示例#1
0
        public void Stop(byte sysid, byte compid)
        {
            if (port == null)
            {
                throw new ArgumentNullException(nameof(port));
            }

            var stoppacket = new MAVLink.mavlink_remote_log_block_status_t(
                (uint)MAVLink.MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS.MAV_REMOTE_LOG_DATA_BLOCK_STOP, sysid, compid,
                (byte)MAVLink.MAV_REMOTE_LOG_DATA_BLOCK_STATUSES.MAV_REMOTE_LOG_DATA_BLOCK_ACK);

            port.sendPacket(stoppacket, sysid, compid);

            port.OnPacketReceived -= Port_OnPacketReceived;

            try
            {
                if (logfilestream != null)
                {
                    logfilestream.Close();
                }
            }
            catch
            {
            }

            running = false;
        }
示例#2
0
        public void Start(MAVLinkInterface port, byte sysid, byte compid)
        {
            if (port == null)
            {
                throw new ArgumentNullException(nameof(port));
            }

            if (running)
            {
                Stop(sysid, compid);
            }

            this.port = port;

            var dt = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss");

            logfilename = Settings.GetDefaultLogDir() + Path.DirectorySeparatorChar + dt + ".bin";

            logfilestream =
                new BufferedStream(new FileStream(logfilename, FileMode.Create, FileAccess.ReadWrite, FileShare.Read));

            port.OnPacketReceived += Port_OnPacketReceived;

            var startpacket = new MAVLink.mavlink_remote_log_block_status_t(
                (uint)MAVLink.MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS.MAV_REMOTE_LOG_DATA_BLOCK_START, sysid, compid,
                (byte)MAVLink.MAV_REMOTE_LOG_DATA_BLOCK_STATUSES.MAV_REMOTE_LOG_DATA_BLOCK_ACK);

            port.sendPacket(startpacket, sysid, compid);

            running = true;
        }
示例#3
0
        private void Port_OnPacketReceived(object sender, MAVLink.MAVLinkMessage message)
        {
            if (message.msgid == (uint)MAVLink.MAVLINK_MSG_ID.REMOTE_LOG_DATA_BLOCK)
            {
                var data = (MAVLink.mavlink_remote_log_data_block_t)message.data;

                seq = data.seqno;

                if (logfilestream.Position != data.seqno * 200)
                {
                    logfilestream.Seek(data.seqno * 200, SeekOrigin.Begin);
                }

                logfilestream.Write(data.data, 0, data.data.Length);

                var resp = new MAVLink.mavlink_remote_log_block_status_t(data.seqno, message.sysid, message.compid,
                                                                         (byte)MAVLink.MAV_REMOTE_LOG_DATA_BLOCK_STATUSES.MAV_REMOTE_LOG_DATA_BLOCK_ACK);

                port.sendPacket(resp, message.sysid, message.compid);
            }
        }