From eeed9275292e500d34865bfd47b6000066182068 Mon Sep 17 00:00:00 2001 From: zxd Date: Fri, 15 Nov 2019 11:13:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E6=9D=A1RTK=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E5=8F=91=E9=80=81=20=E7=81=AF=E5=85=89=E9=95=BF=E5=BA=A6?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommunicationManagement/CommModule.cs | 13 +-- .../CommModuleGenerateMavLink.cs | 80 ++++++++++++++++++- 2 files changed, 80 insertions(+), 13 deletions(-) diff --git a/PlaneGcsSdk_Shared/CommunicationManagement/CommModule.cs b/PlaneGcsSdk_Shared/CommunicationManagement/CommModule.cs index 2e04977..7d01430 100644 --- a/PlaneGcsSdk_Shared/CommunicationManagement/CommModule.cs +++ b/PlaneGcsSdk_Shared/CommunicationManagement/CommModule.cs @@ -27,6 +27,7 @@ namespace Plane.CommunicationManagement public int CommModuleCurMode = 0; private long packetCountNum = 0; + /// /// 用于判断写入任务操作超时的秒表。 /// @@ -322,7 +323,7 @@ namespace Plane.CommunicationManagement //await WriteCommPacketAsync(id, MavComm.COMM_DOWNLOAD_COMM, packet); byte[] senddata = packet; - for (int times = 0; times < 4; times++) + for (int times = 0; times < 13; times++) { senddata = senddata.Concat(packet).ToArray(); } @@ -333,15 +334,9 @@ namespace Plane.CommunicationManagement temp = !temp; while (temp) { + Message.Show("长度 = " + senddata.Length); await WriteCommPacketAsync(id, MavComm.COMM_DOWNLOAD_COMM, senddata); - await Task.Delay(50).ConfigureAwait(false); - await WriteCommPacketAsync(id, MavComm.COMM_DOWNLOAD_COMM, senddata); - await Task.Delay(50).ConfigureAwait(false); - await WriteCommPacketAsync(id, MavComm.COMM_DOWNLOAD_COMM, senddata); - await Task.Delay(50).ConfigureAwait(false); - await WriteCommPacketAsync(id, MavComm.COMM_DOWNLOAD_COMM, senddata); - await Task.Delay(50).ConfigureAwait(false); - await Task.Delay(800).ConfigureAwait(false); + await Task.Delay(1000).ConfigureAwait(false); } } diff --git a/PlaneGcsSdk_Shared/CommunicationManagement/CommModuleGenerateMavLink.cs b/PlaneGcsSdk_Shared/CommunicationManagement/CommModuleGenerateMavLink.cs index 5922b42..07cce03 100644 --- a/PlaneGcsSdk_Shared/CommunicationManagement/CommModuleGenerateMavLink.cs +++ b/PlaneGcsSdk_Shared/CommunicationManagement/CommModuleGenerateMavLink.cs @@ -11,8 +11,7 @@ namespace Plane.CommunicationManagement { public partial class CommModuleManager { - public int packetcount = 0; - + public int packetcount = 0; /// /// 设置通道 @@ -586,6 +585,8 @@ namespace Plane.CommunicationManagement } int inject_seq_no = 0; + + public async Task InjectGpsRTCMDataAsync(byte[] data, int length) { MAVLink.mavlink_gps_rtcm_data_t gps = new MAVLink.mavlink_gps_rtcm_data_t(); @@ -629,12 +630,82 @@ namespace Plane.CommunicationManagement gps.len = (byte)copy; byte[] packet = GeneratePacket(MAVLink.MAVLINK_MSG_ID_GPS_RTCM_DATA, gps); - Console.WriteLine($"{DateTime.Now.ToLongTimeString()}---发送给张伟的数据长度 = {packet.Length}"); + Windows.Messages.Message.Show($"{DateTime.Now.ToString("HH:mm:ss:fff")} 通信数据长度 = {packet.Length}"); await WriteCommPacketAsync(0, MavComm.COMM_DOWNLOAD_COMM, packet).ConfigureAwait(false); - } } + +// lock (lock_rtcm) +// { +// rtcm_packets.Add(packet); +// if (rtcm_packets.Count == 1) +// { +// waitRtcmTime = DateTime.Now; +// starttime = true; +// } +// } + + } + } + private static object lock_rtcm = new object();//互锁量 + private List rtcm_packets = new List(); + private DateTime waitRtcmTime = DateTime.Now; + private bool starttime = false; + private bool rtcm_run = false; + /// + /// 开始循环检测Rtcm数量 + /// + /// + public async Task StartRtcmLoop() + { + rtcm_run = true; + waitRtcmTime = DateTime.Now; + await Task.Factory.StartNew(RtcmLoop); + } + /// + /// 结束循环检测Rtcm数量 + /// + /// + public async Task CloseRtcmLoop() + { + rtcm_run = false; + await Task.Delay(1); + } + + private async Task RtcmLoop() + { + while(rtcm_run) + { + byte[] sendDate = new byte[0]; + lock (lock_rtcm) + { + if (rtcm_packets.Count >= 3 || + (starttime && waitRtcmTime.AddMilliseconds(200) <= DateTime.Now)) + { + if (rtcm_packets.Count > 0) + { + Windows.Messages.Message.Show($"rtcm_packets.Count = {rtcm_packets.Count}"); + for (int i = 0; i < rtcm_packets.Count; i++) + { + sendDate = sendDate.Concat(rtcm_packets[i]).ToArray(); + } + rtcm_packets.Clear(); + starttime = false; + } + } + } + + if (sendDate!=null && sendDate.Length>0) + { + Windows.Messages.Message.Show($"{DateTime.Now.ToString("HH:mm:ss:fff")} 通信数据长度 = {sendDate.Length}"); + await WriteCommPacketAsync(0, MavComm.COMM_DOWNLOAD_COMM, sendDate).ConfigureAwait(false); + } + + await Task.Delay(10); + } + } + public byte[] GenerateRTKPacketAsync(byte messageType, TMavlinkPacket indata, int rtklength) { @@ -779,4 +850,5 @@ namespace Plane.CommunicationManagement } } } + }