Пример #1
0
        public SystemStatus(MavLinkMessage message) : base(null)
        {
            if (message.messid == this.MessageID)
            {
                MAVLink.mavlink_sys_status_t raw_data = (MAVLink.mavlink_sys_status_t)message.data_struct;
                this.voltage_battery   = raw_data.voltage_battery;
                this.current_battery   = raw_data.current_battery;
                this.battery_remaining = raw_data.battery_remaining;
                this.drop_rate_comm    = raw_data.drop_rate_comm;
                this.errors_comm       = raw_data.errors_comm;
                this.errors_count1     = raw_data.errors_count1;
                this.errors_count2     = raw_data.errors_count2;
                this.errors_count3     = raw_data.errors_count3;
                this.errors_count4     = raw_data.errors_count4;

                // parse bit masks into lists
                IEnumerable <MAVLink.MAV_SYS_STATUS_SENSOR> values = EnumValues.GetValues <MAVLink.MAV_SYS_STATUS_SENSOR>();
                foreach (MAVLink.MAV_SYS_STATUS_SENSOR sensor in values)
                {
                    uint sensorMask = (uint)sensor;
                    if ((sensorMask & raw_data.onboard_control_sensors_enabled) == sensorMask)
                    {
                        sensorsEnabled.Add(sensor);
                    }
                    if ((sensorMask & raw_data.onboard_control_sensors_health) == sensorMask)
                    {
                        sensorsHealth.Add(sensor);
                    }
                    if ((sensorMask & raw_data.onboard_control_sensors_present) == sensorMask)
                    {
                        sensorsPresent.Add(sensor);
                    }
                }
            }
        }
Пример #2
0
        void CDroneManager_OnPacket(object packet, int sysId, int compId)
        {
            if (packet.GetType() == typeof(MAVLink.mavlink_sys_status_t))
            {
                MAVLink.mavlink_sys_status_t status = (MAVLink.mavlink_sys_status_t)packet;

                RefreshInfo(
                    (double)status.voltage_battery / 1000,
                    (double)status.current_battery / 100,
                    status.battery_remaining);
            }
        }
Пример #3
0
        public void CheckSystemStatusObject()
        {
            MAVLink.mavlink_sys_status_t statusStruct = new MAVLink.mavlink_sys_status_t();
            statusStruct.voltage_battery   = 1;
            statusStruct.current_battery   = 2;
            statusStruct.battery_remaining = 3;
            statusStruct.drop_rate_comm    = 4;
            statusStruct.errors_comm       = 5;
            statusStruct.errors_count1     = 6;
            statusStruct.errors_count2     = 7;
            statusStruct.errors_count3     = 8;
            statusStruct.errors_count4     = 9;

            MavLinkMessage message = new MavLinkMessage();

            message.compid      = 1;
            message.messid      = MAVLink.MAVLINK_MSG_ID.SYS_STATUS;
            message.seq         = 1;
            message.sysid       = 1;
            message.data_struct = statusStruct;

            SystemStatus systemStatus = new SystemStatus(message);

            Assert.AreEqual(statusStruct.voltage_battery, systemStatus.voltage_battery);
            Assert.AreEqual(statusStruct.current_battery, systemStatus.current_battery);
            Assert.AreEqual(statusStruct.battery_remaining, systemStatus.battery_remaining);
            Assert.AreEqual(statusStruct.drop_rate_comm, systemStatus.drop_rate_comm);
            Assert.AreEqual(statusStruct.errors_comm, systemStatus.errors_comm);
            Assert.AreEqual(statusStruct.errors_count1, systemStatus.errors_count1);
            Assert.AreEqual(statusStruct.errors_count2, systemStatus.errors_count2);
            Assert.AreEqual(statusStruct.errors_count3, systemStatus.errors_count3);
            Assert.AreEqual(statusStruct.errors_count4, systemStatus.errors_count4);

            SystemStatusDTO dto = DTOFactory.createSystemStatusDTO(systemStatus);

            Assert.AreEqual(dto.voltage_battery, systemStatus.voltage_battery);
            Assert.AreEqual(dto.current_battery, systemStatus.current_battery);
            Assert.AreEqual(dto.battery_remaining, systemStatus.battery_remaining);
            Assert.AreEqual(dto.drop_rate_comm, systemStatus.drop_rate_comm);
            Assert.AreEqual(dto.errors_comm, systemStatus.errors_comm);
            Assert.AreEqual(dto.errors_count1, systemStatus.errors_count1);
            Assert.AreEqual(dto.errors_count2, systemStatus.errors_count2);
            Assert.AreEqual(dto.errors_count3, systemStatus.errors_count3);
            Assert.AreEqual(dto.errors_count4, systemStatus.errors_count4);

            String json = JsonConvert.SerializeObject(dto);
        }
Пример #4
0
        private void LogPacket(object packet, bool ingoing, int sysId, int compId)
        {
            if (threadDone)
            {
                return;
            }

            if (listViewMessages.InvokeRequired)
            {
                try { listViewMessages.Invoke(new Action <object, bool, int, int>(LogPacket), packet, ingoing, sysId, compId); }
                catch { };
                return;
            }

            List <string> fields = new List <string>();

            fields.Add(sysId.ToString());
            fields.Add(compId.ToString());

            if ((ingoing && !checkBoxIngoing.Checked) || (!ingoing && !checkBoxOutgoing.Checked))
            {
                return;
            }

            string messageName = packet.ToString().Replace("MAVLink+mavlink_", "");

            if (IsMessageFilteredOut(messageName))
            {
                return;
            }


            if (listViewMessages.IsDisposed)
            {
                return;
            }


            if (packet.GetType() == typeof(MAVLink.mavlink_gps_raw_int_t))
            {
                MAVLink.mavlink_gps_raw_int_t gps = (MAVLink.mavlink_gps_raw_int_t)packet;
                fields.Add("GPS Raw Int");
                fields.Add(((double)gps.lat / 10000000).ToString());
                fields.Add(((double)gps.lon / 10000000).ToString());
                fields.Add(gps.alt.ToString());
                fields.Add(gps.vel.ToString());
                fields.Add(gps.satellites_visible.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_global_position_int_t))
            {
                MAVLink.mavlink_global_position_int_t gps = (MAVLink.mavlink_global_position_int_t)packet;
                fields.Add("GPS Global Position Int");
                fields.Add(((double)gps.lat / 10000000).ToString());
                fields.Add(((double)gps.lon / 10000000).ToString());
                fields.Add(gps.alt.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_attitude_t))
            {
                MAVLink.mavlink_attitude_t att = (MAVLink.mavlink_attitude_t)packet;
                fields.Add("Attitude");
                fields.Add((att.pitch * 180.0 / Math.PI).ToString());
                fields.Add((att.roll * 180.0 / Math.PI).ToString());
                fields.Add((att.yaw * 180.0 / Math.PI).ToString());
                fields.Add((att.pitchspeed * 180.0 / Math.PI).ToString());
                fields.Add((att.rollspeed * 180.0 / Math.PI).ToString());
                fields.Add((att.yawspeed * 180.0 / Math.PI).ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_scaled_imu_t))
            {
                MAVLink.mavlink_scaled_imu_t imu = (MAVLink.mavlink_scaled_imu_t)packet;
                fields.Add("Scaled IMU");
                fields.Add(imu.xmag.ToString());
                fields.Add(imu.ymag.ToString());
                fields.Add(imu.zmag.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_scaled_imu3_t))
            {
                MAVLink.mavlink_scaled_imu3_t imu = (MAVLink.mavlink_scaled_imu3_t)packet;
                fields.Add("Scaled IMU3");
                fields.Add(imu.xmag.ToString());
                fields.Add(imu.ymag.ToString());
                fields.Add(imu.zmag.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_scaled_imu2_t))
            {
                MAVLink.mavlink_scaled_imu2_t imu = (MAVLink.mavlink_scaled_imu2_t)packet;
                fields.Add("Scaled IMU2");
                fields.Add(imu.xmag.ToString());
                fields.Add(imu.ymag.ToString());
                fields.Add(imu.zmag.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_sys_status_t))
            {
                MAVLink.mavlink_sys_status_t status = (MAVLink.mavlink_sys_status_t)packet;
                fields.Add("System Status");
                fields.Add(status.voltage_battery.ToString());
            }
//          else if (packet.GetType() == typeof(MAVLink.mavlink_autopilot_version_t))
//          {
//              MAVLink.mavlink_autopilot_version_t ver = (MAVLink.mavlink_autopilot_version_t)packet;
//              listViewMessages.Items.Add(new ListViewItem(new string[] {
//                  "Autopilot Version",
//                  ver.version.ToString(),
//                  ver.custom_version.ToString(),
//                  ver.capabilities.ToString()}));
//          }
            else if (packet.GetType() == typeof(MAVLink.mavlink_heartbeat_t))
            {
                MAVLink.mavlink_heartbeat_t hb = (MAVLink.mavlink_heartbeat_t)packet;
                fields.Add("Heartbeat");
                fields.Add(hb.autopilot.ToString());
                fields.Add(hb.system_status.ToString());
                fields.Add(hb.mavlink_version.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_statustext_t))
            {
                MAVLink.mavlink_statustext_t status = (MAVLink.mavlink_statustext_t)packet;
                fields.Add("Status Text");
                fields.Add(ASCIIEncoding.ASCII.GetString(status.text));
                fields.Add(status.severity.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_param_value_t))
            {
                MAVLink.mavlink_param_value_t paramValue = (MAVLink.mavlink_param_value_t)packet;
                fields.Add("Param Value");
                fields.Add(ASCIIEncoding.ASCII.GetString(paramValue.param_id));
                fields.Add(paramValue.param_value.ToString());
                fields.Add(paramValue.param_count.ToString());
                fields.Add(paramValue.param_index.ToString());
                fields.Add(paramValue.param_type.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_param_request_read_t))
            {
                MAVLink.mavlink_param_request_read_t paramReq = (MAVLink.mavlink_param_request_read_t)packet;
                fields.Add("Param Request Read");
                fields.Add(ASCIIEncoding.ASCII.GetString(paramReq.param_id));
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_param_set_t))
            {
                MAVLink.mavlink_param_set_t paramSet = (MAVLink.mavlink_param_set_t)packet;
                fields.Add("Param Set");
                fields.Add(ASCIIEncoding.ASCII.GetString(paramSet.param_id));
                fields.Add(paramSet.param_value.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_mission_count_t))
            {
                MAVLink.mavlink_mission_count_t paramValue = (MAVLink.mavlink_mission_count_t)packet;
                fields.Add("Mission Count");
                fields.Add(paramValue.count.ToString());
                fields.Add(paramValue.target_component.ToString());
                fields.Add(paramValue.target_system.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_mission_item_t))
            {
                MAVLink.mavlink_mission_item_t item = (MAVLink.mavlink_mission_item_t)packet;
                fields.Add("Mission Item");
                fields.Add(item.seq.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_mission_request_t))
            {
                MAVLink.mavlink_mission_request_t item = (MAVLink.mavlink_mission_request_t)packet;
                fields.Add("Mission Request Item");
                fields.Add(item.seq.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_command_ack_t))
            {
                MAVLink.mavlink_command_ack_t paramValue = (MAVLink.mavlink_command_ack_t)packet;
                fields.Add("Ack");
                fields.Add(((MAVLink.MAV_CMD)paramValue.command).ToString());
                fields.Add(((MAVLink.MAV_RESULT)paramValue.result).ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_mission_ack_t))
            {
                MAVLink.mavlink_mission_ack_t paramValue = (MAVLink.mavlink_mission_ack_t)packet;
                fields.Add("Mission Ack");
                fields.Add(paramValue.type.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_radio_status_t))
            {
                MAVLink.mavlink_radio_status_t radio = (MAVLink.mavlink_radio_status_t)packet;
                fields.Add("Radio Status");
                fields.Add(radio.rssi.ToString());
                fields.Add(radio.remrssi.ToString());
            }
            else if (packet.GetType() == typeof(MAVLink.mavlink_ekf_status_report_t))
            {
                MAVLink.mavlink_ekf_status_report_t ekf = (MAVLink.mavlink_ekf_status_report_t)packet;
                fields.Add("EKF Status");
                fields.Add(ekf.flags.ToString());
                fields.Add(ekf.velocity_variance.ToString());
                fields.Add(ekf.pos_horiz_variance.ToString());
                fields.Add(ekf.pos_vert_variance.ToString());
                fields.Add(ekf.compass_variance.ToString());
                fields.Add(ekf.terrain_alt_variance.ToString());
            }
            else
            {
                fields.Add(messageName);
                //Log(packet.ToString());
            }

            if (ingoing)
            {
                listViewMessages.Items.Add(INGOING(new ListViewItem(fields.ToArray())));
            }
            else
            {
                listViewMessages.Items.Add(OUTGOING(new ListViewItem(fields.ToArray())));
            }
        }
 public void SetAttitude(MAVLink.mavlink_sys_status_t sysstatus)
 {
     mission_sysstatus = sysstatus;
     time = DateTime.Now;
 }
 public sysstatus(MAVLink.mavlink_sys_status_t sysstatus)
 {
     mission_sysstatus = sysstatus;
     time = DateTime.Now;
 }
        private int updatedata(int timeout = 5000)
        {
            if (ReadHeartBeat())
            {
                DateTime deadline = DateTime.Now.AddMilliseconds(timeout);
                while (DateTime.Now < deadline)
                {
                    try
                    {
                        var data = _mavlinkparse.ReadPacket(_datastream);
                        if (data == null)
                        {
                            continue;
                        }
                        switch (data.GetType().ToString())
                        {
                        case "MAVLink+mavlink_attitude_t":
                            MAVLink.mavlink_attitude_t pack0 = (MAVLink.mavlink_attitude_t)data;
                            Vehicle.Roll       = pack0.roll;
                            Vehicle.RollSpeed  = pack0.rollspeed;
                            Vehicle.Pitch      = pack0.pitch;
                            Vehicle.PitchSpeed = pack0.pitchspeed;
                            Vehicle.Yaw        = pack0.yaw;
                            Vehicle.YawSpeed   = pack0.yawspeed;
                            Vehicle.BootTime   = pack0.time_boot_ms;
                            break;

                        case "MAVLink+_global_position_int_t":
                            MAVLink.mavlink_global_position_int_t pack1 = (MAVLink.mavlink_global_position_int_t)data;
                            Vehicle.Attitude   = pack1.alt;
                            Vehicle.Latitude   = pack1.lat;
                            Vehicle.Longtitude = pack1.lon;
                            break;

                        case "MAVLink+mavlink_sys_status_t":
                            MAVLink.mavlink_sys_status_t pack2 = (MAVLink.mavlink_sys_status_t)data;
                            Vehicle.BatteryVoltage   = pack2.voltage_battery;
                            Vehicle.BatteryCurrent   = pack2.current_battery;
                            Vehicle.BatteryRemaining = pack2.battery_remaining;
                            break;

                        case "MAVLink+mavlink_vfr_hud_t":
                            MAVLink.mavlink_vfr_hud_t pack3 = (MAVLink.mavlink_vfr_hud_t)data;
                            Vehicle.AirSpeed    = pack3.airspeed;
                            Vehicle.GroungSpeed = pack3.groundspeed;
                            break;

                        case "MAVLink+mavlink_heartbeat_t":
                            ReadHeartBeat();
                            Vehicle.HeartBeating = true;
                            deadline             = DateTime.Now.AddMilliseconds(timeout);
                            break;

                        default:
                            break;
                        }
                    }
                    catch
                    {
                        Vehicle.Connected = false;
                    }
                }
            }
            return(0);
        }