diff --git a/PlaneGcsSdk.Contract_Shared/Copters/ICopterActions.cs b/PlaneGcsSdk.Contract_Shared/Copters/ICopterActions.cs index d6ec450..3fdf0c9 100644 --- a/PlaneGcsSdk.Contract_Shared/Copters/ICopterActions.cs +++ b/PlaneGcsSdk.Contract_Shared/Copters/ICopterActions.cs @@ -130,5 +130,9 @@ namespace Plane.Copters /// /// 表示此命令异步发送操作的 实例。 Task StopPairingAsync(); + + + Task DoCommandAsync(int actionid, float p1, float p2, float p3, float p4, float p5, float p6, float p7); + } } diff --git a/PlaneGcsSdk_Shared/CommunicationManagement/CommModuleGenerateMavLink.cs b/PlaneGcsSdk_Shared/CommunicationManagement/CommModuleGenerateMavLink.cs index 0ea4a46..cd58d36 100644 --- a/PlaneGcsSdk_Shared/CommunicationManagement/CommModuleGenerateMavLink.cs +++ b/PlaneGcsSdk_Shared/CommunicationManagement/CommModuleGenerateMavLink.cs @@ -19,7 +19,7 @@ namespace Plane.CommunicationManagement private bool starttime = false; private bool rtcm_run = false; //是否使用专用传输模块 - private bool UseTransModule = true; + public bool UseTransModule = true; private byte[] SetChannels(ushort? ch1 = null, ushort? ch2 = null, ushort? ch3 = null, ushort? ch4 = null, ushort? ch5 = null, ushort? ch6 = null, ushort? ch7 = null, ushort? ch8 = null) { @@ -493,7 +493,10 @@ namespace Plane.CommunicationManagement await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, data, batchPacket).ConfigureAwait(false); } else - Windows.Messages.Message.Show($"未开发完成!!"); + { + foreach (var vcopter in copters) + await vcopter.UnlockAsync(); + } } /// @@ -516,7 +519,15 @@ namespace Plane.CommunicationManagement }); } else - Windows.Messages.Message.Show($"未开发完成!!"); + { + Task.Run(async () => + { + foreach (var vcopter in copters) + await vcopter.LEDAsync(); + }); + + } + } @@ -542,7 +553,8 @@ namespace Plane.CommunicationManagement } else { - Windows.Messages.Message.Show($"未开发完成!!"); + foreach (var vcopter in copters) + await vcopter.SetParamAsync(paramname, value); return 0; } } @@ -554,11 +566,11 @@ namespace Plane.CommunicationManagement /// public async Task SetMultipleParamAsync(params string[] param) { + if (param.Length % 2 == 1) + return 0; if (UseTransModule) { - if (param.Length % 2 == 1) - return 0; - + byte[] packet = null; int packetNum = 0; for (int i = 0; i < param.Length; i += 2) @@ -574,7 +586,20 @@ namespace Plane.CommunicationManagement } else { - Windows.Messages.Message.Show($"未开发完成!!"); + byte[] packet = null; + int packetNum = 0; + for (int i = 0; i < param.Length; i += 2) + { + string paramname = param[i]; + float value = float.Parse(param[i + 1]); + // foreach (var vcopter in Copters ) + // await vcopter.SetParamAsync(paramname, value); + + } + + + + return 0; } } @@ -628,7 +653,11 @@ namespace Plane.CommunicationManagement await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, data, batchPacket).ConfigureAwait(false); } else - Windows.Messages.Message.Show($"未开发完成!!"); + { + foreach (var vcopter in copters) + await vcopter.TakeOffAsync(); + + } } /// @@ -648,11 +677,16 @@ namespace Plane.CommunicationManagement await WriteCommPacketAsync((short)copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); } else - Windows.Messages.Message.Show($"未开发完成!!"); + { + foreach (var vcopter in copters) + await vcopter.ReturnToLaunchAsync (); + + } + } - + /// /// 获取飞机版本 @@ -673,7 +707,11 @@ namespace Plane.CommunicationManagement await WriteCommPacketAsync((short)copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); } else + { + Windows.Messages.Message.Show($"未开发完成!!"); + } + } /// /// 降落 @@ -691,7 +729,12 @@ namespace Plane.CommunicationManagement await WriteCommPacketAsync((short)copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); } else - Windows.Messages.Message.Show($"未开发完成!!"); + { + foreach (var vcopter in copters) + await vcopter.LandAsync(); + + } + } /// @@ -715,7 +758,12 @@ namespace Plane.CommunicationManagement await WriteCommPacketAsync((short)copterId, MavComm.COMM_DOWNLOAD_COMM, data, batchPacket).ConfigureAwait(false); } else - Windows.Messages.Message.Show($"未开发完成!!"); + { + foreach (var vcopter in copters) + await vcopter.LockAsync(); + + } + } /// @@ -741,7 +789,17 @@ namespace Plane.CommunicationManagement await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, data, batchPacket); } else - Windows.Messages.Message.Show($"未开发完成!!"); + { + foreach (var vcopter in copters) + { + await vcopter.MotorTestAsync(1); + await vcopter.MotorTestAsync(2); + await vcopter.MotorTestAsync(3); + await vcopter.MotorTestAsync(4); + } + + } + } /// @@ -764,7 +822,12 @@ namespace Plane.CommunicationManagement await WriteCommPacketAsync((short)copterId, MavComm.COMM_DOWNLOAD_COMM, data, batchPacket).ConfigureAwait(false); } else - Windows.Messages.Message.Show($"未开发完成!!"); + { + foreach (var vcopter in copters) + await vcopter.HoverAsync(); + + } + } /// @@ -774,12 +837,21 @@ namespace Plane.CommunicationManagement /// public async Task FloatAsync(IEnumerable copters = null) { - short copterId = 0; - byte[] batchPacket = null; - GetCopterIds(copters, out copterId, out batchPacket); + if (UseTransModule) + { + short copterId = 0; + byte[] batchPacket = null; + GetCopterIds(copters, out copterId, out batchPacket); - byte[] packet = SetModeAsync(FlightMode.ALT_HOLD); - await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); + byte[] packet = SetModeAsync(FlightMode.ALT_HOLD); + await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); + } + else + { + foreach (var vcopter in copters) + await vcopter.FloatAsync(); + + } } /// @@ -789,12 +861,21 @@ namespace Plane.CommunicationManagement /// public async Task DoStartPreflightCompassAsync(IEnumerable copters = null) { - short copterId = 0; - byte[] batchPacket = null; - GetCopterIds(copters, out copterId, out batchPacket); + if (UseTransModule) + { + short copterId = 0; + byte[] batchPacket = null; + GetCopterIds(copters, out copterId, out batchPacket); - byte[] packet = DoCommandAsync(MAVLink.MAV_CMD.PREFLIGHT_CALIBRATION, 0, 0, 0, 0, 1, 0, 0); - await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); + byte[] packet = DoCommandAsync(MAVLink.MAV_CMD.PREFLIGHT_CALIBRATION, 0, 0, 0, 0, 1, 0, 0); + await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); + } + else + { + foreach (var vcopter in copters) + await vcopter.DoCommandAsync((int)MAVLink.MAV_CMD.PREFLIGHT_CALIBRATION, 0, 0, 0, 0, 1, 0, 0); + + } } /// @@ -804,16 +885,24 @@ namespace Plane.CommunicationManagement /// public async Task DoNextPreflightCompassAsync(IEnumerable copters = null) { - short copterId = 0; - byte[] batchPacket = null; - GetCopterIds(copters, out copterId, out batchPacket); + if (UseTransModule) + { + short copterId = 0; + byte[] batchPacket = null; + GetCopterIds(copters, out copterId, out batchPacket); - MAVLink.mavlink_command_ack_t req = new MAVLink.mavlink_command_ack_t(); - req.command = 1; - req.result = 1; + MAVLink.mavlink_command_ack_t req = new MAVLink.mavlink_command_ack_t(); + req.command = 1; + req.result = 1; - byte[] packet = GeneratePacket(MAVLink.MAVLINK_MSG_ID_COMMAND_ACK, req); - await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); + byte[] packet = GeneratePacket(MAVLink.MAVLINK_MSG_ID_COMMAND_ACK, req); + await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); + } + else + { + Windows.Messages.Message.Show($"未开发完成!!"); + + } } /// @@ -823,12 +912,21 @@ namespace Plane.CommunicationManagement /// public async Task DoCalibrationCompassAsync(IEnumerable copters = null) { - short copterId = 0; - byte[] batchPacket = null; - GetCopterIds(copters, out copterId, out batchPacket); + if (UseTransModule) + { + short copterId = 0; + byte[] batchPacket = null; + GetCopterIds(copters, out copterId, out batchPacket); - byte[] packet = DoCommandAsync(MAVLink.MAV_CMD.DO_START_MAG_CAL, 0, 1, 1, 0, 0, 0, 0); - await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); + byte[] packet = DoCommandAsync(MAVLink.MAV_CMD.DO_START_MAG_CAL, 0, 1, 1, 0, 0, 0, 0); + await WriteCommPacketAsync(copterId, MavComm.COMM_DOWNLOAD_COMM, packet, batchPacket).ConfigureAwait(false); + } + else + { + foreach (var vcopter in copters) + await vcopter.DoCommandAsync((int)MAVLink.MAV_CMD.DO_START_MAG_CAL, 0, 1, 1, 0, 0, 0, 0); + + } } /// diff --git a/PlaneGcsSdk_Shared/Copters/EmptyCopter.Mission.cs b/PlaneGcsSdk_Shared/Copters/EmptyCopter.Mission.cs index d3371fa..0fa5d5e 100644 --- a/PlaneGcsSdk_Shared/Copters/EmptyCopter.Mission.cs +++ b/PlaneGcsSdk_Shared/Copters/EmptyCopter.Mission.cs @@ -24,5 +24,14 @@ namespace Plane.Copters { return Task.FromResult(true); } + public async Task DoCommandAsync(int actionid, float p1, float p2, float p3, float p4, float p5, float p6, float p7) + { + + await Task.Delay(50).ConfigureAwait(false); + + + } + + } } diff --git a/PlaneGcsSdk_Shared/Copters/FakeCopter.cs b/PlaneGcsSdk_Shared/Copters/FakeCopter.cs index f750363..ecdb6e0 100644 --- a/PlaneGcsSdk_Shared/Copters/FakeCopter.cs +++ b/PlaneGcsSdk_Shared/Copters/FakeCopter.cs @@ -295,6 +295,13 @@ namespace Plane.Copters } + public async Task DoCommandAsync(int actionid, float p1, float p2, float p3, float p4, float p5, float p6, float p7) + { + + await Task.Delay(50).ConfigureAwait(false); + + + } public Task SetParamAsync(string paramName, float value, int millisecondsTimeout = Timeout.Infinite) { // TODO: 林俊清, 20150807, 实现仿真的 SetParamAsync。 diff --git a/PlaneGcsSdk_Shared/Copters/PLCopter.cs b/PlaneGcsSdk_Shared/Copters/PLCopter.cs index 904c66a..471672e 100644 --- a/PlaneGcsSdk_Shared/Copters/PLCopter.cs +++ b/PlaneGcsSdk_Shared/Copters/PLCopter.cs @@ -356,6 +356,12 @@ namespace Plane.Copters } } + + public async Task DoCommandAsync(int actionid, float p1, float p2, float p3, float p4, float p5, float p6, float p7) + { + await _internalCopter.DoCommandAsync((MAVLink.MAV_CMD)actionid, p1, p2, p3, p4, p5, p6, p7).ConfigureAwait(false); + } + public async Task LEDAsync() {