diff --git a/PlaneGcsSdk.Contract_Shared/Copters/ICopterStatus.cs b/PlaneGcsSdk.Contract_Shared/Copters/ICopterStatus.cs index 47c6a19..2f4fc8b 100644 --- a/PlaneGcsSdk.Contract_Shared/Copters/ICopterStatus.cs +++ b/PlaneGcsSdk.Contract_Shared/Copters/ICopterStatus.cs @@ -173,6 +173,14 @@ namespace Plane.Copters /// float Voltage { get; } + /// + /// 预留字节用于通信模块条件下的返回值 + /// byte[] Retain { get; } + + /// + /// 飞机上通信模块版本 + /// + byte CommModuleVersion { get; } } } diff --git a/PlaneGcsSdk_Shared/Communication/TcpConnectionBase.cs b/PlaneGcsSdk_Shared/Communication/TcpConnectionBase.cs index b866599..aedcd37 100644 --- a/PlaneGcsSdk_Shared/Communication/TcpConnectionBase.cs +++ b/PlaneGcsSdk_Shared/Communication/TcpConnectionBase.cs @@ -43,7 +43,7 @@ namespace Plane.Communication { try { - return !((_client.Client.Poll(1000, SelectMode.SelectRead) && (_client.Client.Available == 0)) || !_client.Client.Connected); + return _client.Client != null && !((_client.Client.Poll(1000, SelectMode.SelectRead) && (_client.Client.Available == 0)) || !_client.Client.Connected); } catch (ObjectDisposedException) { @@ -107,6 +107,8 @@ namespace Plane.Communication { while (Available < count) { + if (Available > 0) + Console.WriteLine("Available = " + Available); //if (!IsOpen) // return 0; if (!IsOnline) diff --git a/PlaneGcsSdk_Shared/Copters/CopterImplSharedPart.cs b/PlaneGcsSdk_Shared/Copters/CopterImplSharedPart.cs index a3cf514..9200070 100644 --- a/PlaneGcsSdk_Shared/Copters/CopterImplSharedPart.cs +++ b/PlaneGcsSdk_Shared/Copters/CopterImplSharedPart.cs @@ -662,6 +662,13 @@ namespace Plane.Copters protected set { Set(nameof(CommModuleMode), ref _CommModuleMode, value); } } + private byte _CommModuleVersion; + public byte CommModuleVersion + { + get { return _CommModuleVersion; } + protected set { Set(nameof(CommModuleVersion), ref _CommModuleVersion, value); } + } + #if PRIVATE public #else diff --git a/PlaneGcsSdk_Shared/Copters/EHCopter.InternalCopterEventHandlers.cs b/PlaneGcsSdk_Shared/Copters/EHCopter.InternalCopterEventHandlers.cs index 46c96d6..97f2073 100644 --- a/PlaneGcsSdk_Shared/Copters/EHCopter.InternalCopterEventHandlers.cs +++ b/PlaneGcsSdk_Shared/Copters/EHCopter.InternalCopterEventHandlers.cs @@ -33,6 +33,7 @@ namespace Plane.Copters Retain = BitConverter.GetBytes(_internalCopter.retain); Voltage = _internalCopter.battery_voltage; CommModuleMode = (FlightMode)_internalCopter.commModuleMode; + CommModuleVersion = _internalCopter.commModuleVersion; IsUnlocked = _internalCopter.isUnlocked; Yaw = _internalCopter.yaw; HeartbeatCount++; diff --git a/PlaneGcsSdk_Shared/Copters/PlaneCopter.PacketAnalysis.cs b/PlaneGcsSdk_Shared/Copters/PlaneCopter.PacketAnalysis.cs index 2d875a2..283d96e 100644 --- a/PlaneGcsSdk_Shared/Copters/PlaneCopter.PacketAnalysis.cs +++ b/PlaneGcsSdk_Shared/Copters/PlaneCopter.PacketAnalysis.cs @@ -378,7 +378,7 @@ namespace Plane.Copters /// 处理通信模块发过来的数据 /// /// - public void AnalyzeCommMouldePositionIntPacket(byte[] buffer) + public void AnalyzeCommMouldePositionIntPacket(byte[] buffer, byte version) { var info = buffer.ByteArrayToStructure(0); lat = info.lat * 1.0e-7; @@ -392,6 +392,8 @@ namespace Plane.Copters battery_voltage = ((float)info.battery_voltage) / 1000; yaw = ((float)info.yaw / 100) % 360; + commModuleVersion = version; + retain = info.retain; RaiseReceiveDataStreamEventOnUIThread(MAVLink.MAVLINK_MSG_ID_GPS_RAW_INT); } diff --git a/PlaneGcsSdk_Shared/Copters/PlaneCopter.cs b/PlaneGcsSdk_Shared/Copters/PlaneCopter.cs index c806ae7..1d275de 100644 --- a/PlaneGcsSdk_Shared/Copters/PlaneCopter.cs +++ b/PlaneGcsSdk_Shared/Copters/PlaneCopter.cs @@ -43,6 +43,8 @@ namespace Plane.Copters public uint mode { get; set; } public uint commModuleMode { get; set; } + public byte commModuleVersion { get; set; } + public bool isUnlocked { get; set; } public float battery_voltage { get; set; }