// using UnityEngine; // using UnityEngine.UI; // using TMPro; // /// // /// 串口通信状态监控器 // /// 用于在UI上显示串口连接状态和通信质量 // /// // public class SerialStatusMonitor : MonoBehaviour // { // [Header("状态显示")] // public Image StatusIndicator; // 状态指示灯 // public TextMeshProUGUI StatusText; // 状态文本 // public TextMeshProUGUI ConnectionInfo; // 连接信息 // public TextMeshProUGUI DataRate; // 数据传输速率 // [Header("状态颜色")] // public Color ConnectedColor = Color.green; // public Color DisconnectedColor = Color.red; // public Color ErrorColor = Color.yellow; // private DCX.Communication.DCSSerialManager _serialManager; // private int _dataPacketsReceived = 0; // private float _lastDataRateUpdate = 0f; // private string _lastError = ""; // void Start() // { // // 查找DCS串口管理器 // _serialManager = FindObjectOfType(); // if (_serialManager != null) // { // // 订阅串口事件 // _serialManager.OnConnected += OnSerialConnected; // _serialManager.OnDisconnected += OnSerialDisconnected; // _serialManager.OnError += OnSerialError; // _serialManager.OnHeartbeatReceived += OnDataReceived; // _serialManager.OnRawDataReceived += OnRawDataReceived; // } // // 初始状态 // UpdateStatus(SerialStatus.Disconnected, "未连接"); // // 开始定时更新数据速率 // InvokeRepeating(nameof(UpdateDataRate), 1f, 1f); // } // private void OnSerialConnected() // { // UpdateStatus(SerialStatus.Connected, "已连接"); // if (ConnectionInfo != null) // { // ConnectionInfo.text = $"串口: 已连接\n协议: DCS通信协议"; // } // } // private void OnSerialDisconnected() // { // UpdateStatus(SerialStatus.Disconnected, "连接断开"); // if (ConnectionInfo != null) // { // ConnectionInfo.text = "串口: 未连接"; // } // } // private void OnSerialError(string error) // { // UpdateStatus(SerialStatus.Error, $"错误: {error}"); // _lastError = error; // if (ConnectionInfo != null) // { // ConnectionInfo.text = $"串口: 错误\n{error}"; // } // } // private void OnDataReceived(DCX.Communication.DCSSerialManager.HeartbeatData data) // { // _dataPacketsReceived++; // } // private void OnRawDataReceived(byte[] data) // { // // 记录原始数据接收 // _dataPacketsReceived++; // } // private void UpdateStatus(SerialStatus status, string message) // { // if (StatusIndicator != null) // { // StatusIndicator.color = status switch // { // SerialStatus.Connected => ConnectedColor, // SerialStatus.Disconnected => DisconnectedColor, // SerialStatus.Error => ErrorColor, // _ => DisconnectedColor // }; // } // if (StatusText != null) // { // StatusText.text = message; // StatusText.color = status switch // { // SerialStatus.Connected => ConnectedColor, // SerialStatus.Disconnected => Color.white, // SerialStatus.Error => ErrorColor, // _ => Color.white // }; // } // } // private void UpdateDataRate() // { // if (DataRate != null) // { // float timeDelta = Time.time - _lastDataRateUpdate; // if (timeDelta > 0) // { // float packetsPerSecond = _dataPacketsReceived / timeDelta; // DataRate.text = $"数据: {packetsPerSecond:F1} 包/秒"; // } // } // _dataPacketsReceived = 0; // _lastDataRateUpdate = Time.time; // } // /// // /// 手动触发连接测试 // /// // public void TestConnection() // { // if (_serialManager != null) // { // UpdateStatus(SerialStatus.Disconnected, "测试连接..."); // // 这里可以触发重连或连接测试 // _serialManager.Connect(); // } // } // /// // /// 获取详细状态信息 // /// // public string GetDetailedStatus() // { // if (_serialManager == null) // { // return "串口管理器未找到"; // } // var status = new System.Text.StringBuilder(); // status.AppendLine("=== DCS串口状态 ==="); // status.AppendLine($"管理器状态: {(_serialManager.enabled ? "启用" : "禁用")}"); // status.AppendLine($"数据包计数: {_dataPacketsReceived}"); // if (!string.IsNullOrEmpty(_lastError)) // { // status.AppendLine($"最后错误: {_lastError}"); // } // return status.ToString(); // } // void OnDestroy() // { // // 清理事件订阅 // if (_serialManager != null) // { // _serialManager.OnConnected -= OnSerialConnected; // _serialManager.OnDisconnected -= OnSerialDisconnected; // _serialManager.OnError -= OnSerialError; // _serialManager.OnHeartbeatReceived -= OnDataReceived; // _serialManager.OnRawDataReceived -= OnRawDataReceived; // } // } // private enum SerialStatus // { // Connected, // Disconnected, // Error // } // }