[fix] 广播端口改为异步发送

测试发现RTK有阻塞,导致死机

# 类型 包含:
# feat:新功能(feature)
# fix:修补bug
# docs:文档(documentation)
# style: 格式(不影响代码运行的变动)
# refactor:重构(即不是新增功能,也不是修改bug的代码变动)
# test:增加测试
# chore:构建过程或辅助工具的变动
This commit is contained in:
xu 2024-06-28 23:15:26 +08:00
parent a88311a160
commit 40bf208054

View File

@ -1214,25 +1214,27 @@ namespace Plane.CommunicationManagement
byte rtcm_Broadser = 0;//用于广播的
public void BroadcastbackupGpsDataAsync(byte[] packet)
public async Task BroadcastbackupGpsDataAsync(byte[] packet)
{
bool sendok=false;
try
{
RecomPort.Write(packet, 0, packet.Length);
//防止阻塞,异步发送
await RecomPort.BaseStream.WriteAsync(packet, 0, packet.Length);
//RecomPort.Write(packet, 0, packet.Length);
sendok = true;
}
catch (Exception ex)
{
Windows.Messages.Message.Show("转发端口发送失败("+ ex.Message + "),尝试新打开...");
Windows.Messages.Message.Show("广播端口发送失败...");
}
if (!sendok)
{
try
{
ReOpenRtcmserial();
if (Recomisopen) Windows.Messages.Message.Show("转发端口打开成功!");
if (Recomisopen) Windows.Messages.Message.Show("广播端口打开成功!");
}
catch (Exception ex)
{
@ -1289,15 +1291,15 @@ namespace Plane.CommunicationManagement
await WriteCommPacketAsync(0, MavComm.COMM_DOWNLOAD_COMM, packet).ConfigureAwait(false);
//发送到广播端口作为备用数据源
if (enrecom)
BroadcastbackupGpsDataAsync(packet);
await BroadcastbackupGpsDataAsync(packet);
await Task.Delay(80).ConfigureAwait(false); //没有延时得话如果超过110长度连续发可能收不到
// 重发一次,有序列号(target_component)飞机可以检测出来重复接收的
//需要新固件支持
await WriteCommPacketAsync(0, MavComm.COMM_DOWNLOAD_COMM, packet).ConfigureAwait(false);
//发送到广播端口作为备用数据源
if (enrecom)
BroadcastbackupGpsDataAsync(packet);
if (enrecom)
await BroadcastbackupGpsDataAsync(packet);
await Task.Delay(80).ConfigureAwait(false); //没有延时得话如果超过110长度连续发可能收不到
}
@ -1451,7 +1453,10 @@ namespace Plane.CommunicationManagement
RecomPort.StopBits = StopBits.One;
RecomPort.DataBits = 8;
RecomPort.Handshake = Handshake.None;
//改为异步更好一些
// RecomPort.WriteTimeout = 500; // 设置写入超时为500毫秒
try
{
RecomPort.Open();