예제 #1
0
            public void GetTheSameMessageCountAsSend()
            {
                int messagesToSend                       = 20;
                int messagesReceived                     = 0;
                int messagesSuccessfullySent             = 0;
                IMavlinkCommunicator mavlinkCommunicator = MavlinkCommunicatorFactory.Create(Stream);
                IMessageNotifier     messageNotifier     = mavlinkCommunicator.SubscribeForReceive(m => m.Id == MessageId.Heartbeat);

                messageNotifier.MessageReceived += (s, e) =>
                {
                    Interlocked.Increment(ref messagesReceived);
                };

                HeartbeatMessage sentHeartbeat = new HeartbeatMessage
                {
                    Autopilot = MavAutopilot.Ardupilotmega,
                    BaseMode  =
                        MavModeFlag.CustomModeEnabled | MavModeFlag.StabilizeEnabled | MavModeFlag.ManualInputEnabled,
                    MavlinkVersion = 3,
                    Type           = MavType.Quadrotor,
                    SystemStatus   = MavState.Active,
                    CustomMode     = 0
                };

                for (int i = 0; i < messagesToSend; i++)
                {
                    bool result = mavlinkCommunicator.SendMessage(sentHeartbeat, 1, 1);
                    if (result)
                    {
                        messagesSuccessfullySent++;
                    }
                }

                Stream.Seek(0, SeekOrigin.Begin);

                Thread.Sleep(8000);
                Assert.AreEqual(messagesSuccessfullySent, messagesReceived, 0,
                                $"Successfully sent {messagesSuccessfullySent}. Successfully received {messagesReceived}");
                mavlinkCommunicator.Dispose();
                Thread.Sleep(1000);
            }
예제 #2
0
            public void GetTheSameMessageAsSend()
            {
                HeartbeatMessage     receivedHeartbeat   = default(HeartbeatMessage);
                IMavlinkCommunicator mavlinkCommunicator = MavlinkCommunicatorFactory.Create(Stream);
                IMessageNotifier     messageNotifier     = mavlinkCommunicator.SubscribeForReceive(m => m.Id == MessageId.Heartbeat);

                messageNotifier.MessageReceived += (s, e) =>
                {
                    receivedHeartbeat = (HeartbeatMessage)e.Message;
                };

                HeartbeatMessage sentHeartbetat = new HeartbeatMessage
                {
                    Autopilot = MavAutopilot.Ardupilotmega,
                    BaseMode  =
                        MavModeFlag.CustomModeEnabled | MavModeFlag.StabilizeEnabled | MavModeFlag.ManualInputEnabled,
                    MavlinkVersion = 3,
                    Type           = MavType.Quadrotor,
                    SystemStatus   = MavState.Active,
                    CustomMode     = 0
                };

                mavlinkCommunicator.SendMessage(sentHeartbetat, 1, 1);

                Stream.Seek(0, SeekOrigin.Begin);

                Thread.Sleep(3000);
                Assert.AreEqual(sentHeartbetat.Autopilot, receivedHeartbeat.Autopilot);
                Assert.AreEqual(sentHeartbetat.Type, receivedHeartbeat.Type);
                Assert.AreEqual(sentHeartbetat.CustomMode, receivedHeartbeat.CustomMode);
                Assert.AreEqual(sentHeartbetat.BaseMode, receivedHeartbeat.BaseMode);
                Assert.AreEqual(sentHeartbetat.SystemStatus, receivedHeartbeat.SystemStatus);
                Assert.AreEqual(sentHeartbetat.MavlinkVersion, receivedHeartbeat.MavlinkVersion);
                mavlinkCommunicator.Dispose();
                Thread.Sleep(1000);
            }
예제 #3
0
파일: Program.cs 프로젝트: zaprog/Mavlink-1
        private static void Main(string[] args)
        {
            FileStream file = File.Open(@"E:\Desktop\Test.txt", FileMode.Open);

            var mavlinkcommunicatorFactory = new MavlinkCommunicatorFactory();

            IMavlinkCommunicator mavlinkCommunicator = mavlinkcommunicatorFactory.Create(file);

            mavlinkCommunicator.SendMessage(new HeartbeatMessage
            {
                Autopilot      = MavAutopilot.Aerob,
                BaseMode       = MavModeFlag.AutoEnabled,
                CustomMode     = 1,
                MavlinkVersion = 2,
                SystemStatus   = MavState.Active,
                Type           = MavType.Airship
            }, 1, 1);

            // 00  00  00  00  02  03  51  04  03
            var      bytes            = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x51, 0x04, 0x03 };
            IMessage heartbeatMessage = ByteArrayToStructure(bytes, typeof(HeartbeatMessage));

            Console.ReadKey();
        }