示例#1
0
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            if (tsLoading.Visible)
            {
                return;
            }


            string path = string.Empty;

            try
            {
                Msg_configuration_control msg = new Msg_configuration_control();
                msg.command            = (byte)CONFIG_COMMAND.CONFIG_COMMAND_BOOTLOADER;
                mavlink_packet.Message = msg;
                byte[] bytes = mavlink.Send(mavlink_packet);
                serialPort.Write(bytes, 0, bytes.Length);

                Disconnect(false);
                Enabled = false;
                UpdateForm.ShowDialog(this, serialPort.PortName, path);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "Error while communication:\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            Enabled = true;
            Connect(true);
        }
示例#2
0
        private void timer_Tick(object sender, EventArgs e)
        {
            if (retry > MAX_RETRY)
            {
                try
                {
                    serialPort.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error while closing serial port:\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                StateMachineUpdate(StateMachineStep.None);

                MessageBox.Show(this, string.Format("No AnySense found on {0}\nMaybe wrong Port?", serialPort.PortName), "Connection failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                retry++;

                try
                {
                    Msg_configuration_control msg = new Msg_configuration_control();
                    msg.command            = (byte)CONFIG_COMMAND.CONFIG_COMMAND_GET_VERSION;
                    mavlink_packet.Message = msg;
                    byte[] bytes = mavlink.Send(mavlink_packet);
                    serialPort.Write(bytes, 0, bytes.Length);
                }
                catch (Exception ex)
                {
                    StateMachineUpdate(StateMachineStep.None);
                    MessageBox.Show(this, "Error while communicating:\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
示例#3
0
        private async Task <DeviceModelBase> Connect(SerialPortManager.SerialPortInfo port, CancellationToken ct)
        {
            DeviceModelBase    device  = null;
            SerialMavlinkLayer mavlink = new SerialMavlinkLayer(port.Device);

            Msg_configuration_control configCMD = new Msg_configuration_control();

            configCMD.command = (byte)CONFIG_COMMAND.CONFIG_COMMAND_GET_VERSION;
            Msg_data_transmission_handshake handshake = new Msg_data_transmission_handshake();

            PacketReceivedEventHandler pr = (o, e) =>
            {
                if (e.Message.GetType() == typeof(Msg_configuration_version2))
                {
                    Msg_configuration_version2 msg = e.Message as Msg_configuration_version2;
                    device = new AnySense(mavlink, msg.fw_version);
                }
                else if (e.Message.GetType() == typeof(Msg_configuration_version3))
                {
                    Msg_configuration_version3 msg = e.Message as Msg_configuration_version3;

                    switch (msg.hw_version)
                    {
                    case 1:
                        device = new AnySensePro(mavlink, msg.fw_version);
                        break;

                    default:
                        break;
                    }
                }
            };

            mavlink.PacketReceived += pr;

            do
            {
                ct.ThrowIfCancellationRequested();
                mavlink.SendMessage(configCMD);
                await Task.Delay(500, ct);
            } while (device == null);

            mavlink.PacketReceived -= pr;

            if (device == null)
            {
                try{
                    mavlink.Dispose();
                }
                catch { }
            }

            return(device);
        }
示例#4
0
        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (serialPort.IsOpen)
            {
                Msg_configuration_control msg = new Msg_configuration_control();
                msg.command            = (byte)CONFIG_COMMAND.CONFIG_COMMAND_EXIT;
                mavlink_packet.Message = msg;
                byte[] bytes = mavlink.Send(mavlink_packet);

                try
                {
                    serialPort.Write(bytes, 0, bytes.Length);
                    serialPort.Close();

                    deviceChanged.Stop();
                }
                catch { }
            }
        }
示例#5
0
        private void ConfigurePort(CONFIG_PORT port)
        {
            Msg_configuration_control msg = new Msg_configuration_control();

            msg.command            = (byte)CONFIG_COMMAND.CONFIG_COMMAND_GET_CONFIGURATION;
            msg.param1             = (byte)port;
            mavlink_packet.Message = msg;
            byte[] bytes = mavlink.Send(mavlink_packet);
            serialPort.Write(bytes, 0, bytes.Length);

            tsLoading.Visible = true;

            btnPort1Configure.Enabled = false;
            btnPort2Configure.Enabled = false;

            Task.Factory.StartNew(() =>
            {
                Extensions.TaskExtensions.Delay(5000).Wait();

                if (!Disposing && !IsDisposed)
                {
                    BeginInvoke(((Action)(() =>
                    {
                        if (!Disposing && !IsDisposed)
                        {
                            if (tsLoading.Visible)
                            {
                                tsLoading.Visible = false;

                                btnPort1Configure.Enabled = true;
                                btnPort2Configure.Enabled = true;

                                MessageBox.Show(this, "Could not load Configuration. A connection timeout occurred.", "Timeout", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    })));
                }
            });
        }
示例#6
0
        private void Disconnect(bool notifyDevice)
        {
            try
            {
                if (notifyDevice)
                {
                    Msg_configuration_control msg = new Msg_configuration_control();
                    msg.command            = (byte)CONFIG_COMMAND.CONFIG_COMMAND_EXIT;
                    mavlink_packet.Message = msg;
                    byte[] bytes = mavlink.Send(mavlink_packet);
                    serialPort.Write(bytes, 0, bytes.Length);
                }
                serialPort.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "Error while communication:\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            if (!serialPort.IsOpen)
            {
                StateMachineUpdate(StateMachineStep.None);
            }
        }
示例#7
0
        private void ProcessMessage(MavlinkMessage msg)
        {
            if (msg == null)
            {
                return;
            }

            Type t = msg.GetType();

            if (currentStep != StateMachineStep.Connected && t != typeof(Msg_configuration_version) && t != typeof(Msg_configuration_version2))
            {
                return;
            }

            if (t == typeof(Msg_configuration_control))
            {
                Msg_configuration_control msg_control = (msg as Msg_configuration_control);
                switch ((CONFIG_COMMAND)msg_control.command)
                {
                case CONFIG_COMMAND.CONFIG_COMMAND_ACK:

                    if (msg_control.param1 == (byte)CONFIG_PORT.CONFIG_PORT_1)
                    {
                        lblPort1.Text = ((ProtocolType)msg_control.param2).GetDescription();
                    }
                    else if (msg_control.param1 == (byte)CONFIG_PORT.CONFIG_PORT_2)
                    {
                        lblPort2.Text = ((ProtocolType)msg_control.param2).GetDescription();
                    }

                    tsLoading.Visible = false;

                    btnPort1Configure.Enabled = true;
                    btnPort2Configure.Enabled = true;


                    break;

                case CONFIG_COMMAND.CONFIG_COMMAND_NACK:
                    tsLoading.Visible = false;

                    btnPort1Configure.Enabled = true;
                    btnPort2Configure.Enabled = true;

                    MessageBox.Show(this, string.Format("Error while saving Configuration for Port {0}", msg_control.param1), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    break;

                case CONFIG_COMMAND.CONFIG_COMMAND_BOOTLOADER:
                    serialPort.Close();
                    StateMachineUpdate(StateMachineStep.None);
                    break;

                default:
                    break;
                }
            }
            else if (t == typeof(Msg_configuration_port))
            {
                Msg_configuration_port msg_config = (msg as Msg_configuration_port);
                try
                {
                    PortConfiguration config = new PortConfiguration();
                    config.Port     = msg_config.port;
                    config.Protocol = (ProtocolType)msg_config.protocol;
                    if (config.Configuration != null)
                    {
                        config.Configuration.DeSerialize(msg_config.data);
                    }

                    tsLoading.Visible = false;

                    if (PortConfigurationForm.ShowDialog(this, config) == DialogResult.OK)
                    {
                        try
                        {
                            Msg_configuration_port msg_send = new Msg_configuration_port();
                            msg_send.port     = msg_config.port;
                            msg_send.protocol = (byte)config.Protocol;
                            if (config.Configuration != null)
                            {
                                msg_send.data = config.Configuration.Serialize();
                            }
                            else
                            {
                                msg_send.data = new byte[128];
                            }

                            mavlink_packet.Message = msg_send;

                            byte[] bytes = mavlink.Send(mavlink_packet);
                            serialPort.Write(bytes, 0, bytes.Length);

                            tsLoading.Visible = true;

                            btnPort1Configure.Enabled = false;
                            btnPort2Configure.Enabled = false;

                            Task.Factory.StartNew(() =>
                            {
                                Extensions.TaskExtensions.Delay(5000).Wait();

                                if (!Disposing && !IsDisposed)
                                {
                                    BeginInvoke(((Action)(() =>
                                    {
                                        if (!Disposing && !IsDisposed)
                                        {
                                            if (tsLoading.Visible)
                                            {
                                                tsLoading.Visible = false;

                                                btnPort1Configure.Enabled = true;
                                                btnPort2Configure.Enabled = true;

                                                MessageBox.Show(this, "Could not load Configuration. A connection timeout occurred.", "Timeout", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            }
                                        }
                                    })));
                                }
                            });
                        }
                        catch (Exception ex)
                        {
                            StateMachineUpdate(StateMachineStep.None);
                            MessageBox.Show(this, "Error while communicating:\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    else
                    {
                        btnPort1Configure.Enabled = true;
                        btnPort2Configure.Enabled = true;
                    }
                }
                catch (Exception ex)
                {
                    tsLoading.Visible = false;

                    btnPort1Configure.Enabled = true;
                    btnPort2Configure.Enabled = true;

                    MessageBox.Show(this, string.Format("Error loading Configuration for Port {0}\n{1}", msg_config.port, ex.Message), "Error",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (t == typeof(Msg_configuration_version) || t == typeof(Msg_configuration_version2))
            {
                StateMachineUpdate(StateMachineStep.Connected);

                uint version = 0;

                if (t == typeof(Msg_configuration_version))
                {
                    //0x0009
                    Msg_configuration_version msg_version = (msg as Msg_configuration_version);
                    lblPort1.Text = ((ProtocolType)msg_version.port1).GetDescription();
                    lblPort2.Text = ((ProtocolType)msg_version.port2).GetDescription();

                    version = msg_version.fw_version;
                    version = version << 8;
                }
                else
                {
                    //0x00000901
                    Msg_configuration_version2 msg_version = (msg as Msg_configuration_version2);
                    version = msg_version.fw_version;

                    lblPort1.Text = ((ProtocolType)msg_version.port1).GetDescription();
                    lblPort2.Text = ((ProtocolType)msg_version.port2).GetDescription();
                }

                tsFWVersion.Text = string.Format("{0}.{1}.{2}", (byte)(version >> 16), (byte)(version >> 8), (byte)version);

                btnUpdate.Visible     = FIRMWARE_VERSION > version;
                lblUpdateHint.Visible = FIRMWARE_VERSION != version;

                lblUpdateHint.Text = (FIRMWARE_VERSION > version ? "Your Firmware ist outdated.\n Please click Update to flash your AnySense with latest Firmware Version." :
                                      "Your Konfiguration Manager is outdated.\nPlease visit our support page for more information.");

                btnPort1Configure.Enabled = FIRMWARE_VERSION == version;
                btnPort2Configure.Enabled = FIRMWARE_VERSION == version;
            }
            else if (t == typeof(Msg_heartbeat))
            {
                Msg_heartbeat heartbeat = (msg as Msg_heartbeat);
                lblFlightMode.Text = ((FlightMode)heartbeat.custom_mode).GetDescription();
                tsUniAdapterHeartbeat.BackgroundImage = KonfigurationTool.Properties.Resources.led_g_an;
                if (UAHeartbeat == null || UAHeartbeat.Status == TaskStatus.RanToCompletion)
                {
                    UAHeartbeat = Task.Factory.StartNew(() =>
                    {
                        Extensions.TaskExtensions.Delay(300).Wait();
                        if (!Disposing && !IsDisposed)
                        {
                            BeginInvoke(((Action)(() =>
                            {
                                if (!Disposing && !IsDisposed)
                                {
                                    tsUniAdapterHeartbeat.BackgroundImage = KonfigurationTool.Properties.Resources.led_aus;
                                }
                            })));
                        }
                    });
                }

                retry = 0;
            }
            else if (t == typeof(Msg_configuration_naza_heartbeat))
            {
                tsFCHearbeat.BackgroundImage = KonfigurationTool.Properties.Resources.led_b_an;
                if (FCHeartbeat == null || FCHeartbeat.Status == TaskStatus.RanToCompletion)
                {
                    FCHeartbeat = Task.Factory.StartNew(() =>
                    {
                        Extensions.TaskExtensions.Delay(300).Wait();

                        if (!Disposing && !IsDisposed)
                        {
                            BeginInvoke(((Action)(() =>
                            {
                                if (!Disposing && !IsDisposed)
                                {
                                    tsFCHearbeat.BackgroundImage = KonfigurationTool.Properties.Resources.led_aus;
                                }
                            })));
                        }
                    });
                }
            }
            else if (t == typeof(Msg_sys_status))
            {
                Msg_sys_status sys = (msg as Msg_sys_status);
                lblBattery.Text = (sys.voltage_battery / 1000f).ToString("0.00 V");
                lblCurrent.Text = (sys.current_battery / 100f).ToString("0.00 A");
            }
            else if (t == typeof(Msg_gps_raw_int))
            {
                Msg_gps_raw_int gps = (msg as Msg_gps_raw_int);
                lblCOG.Text       = (gps.cog / 100f).ToString("0.00 °");
                lblAltitude.Text  = (gps.alt / 1000f).ToString("0.00 m");
                lblGPSFix.Text    = ((FixType)gps.fix_type).GetDescription();
                lblHDOP.Text      = (gps.eph / 100f).ToString("0.00");
                lblVDOP.Text      = (gps.epv / 100f).ToString("0.00");
                lblLatitude.Text  = (gps.lat / 10000000.0f).ToString("0.000000");
                lblLongitude.Text = (gps.lon / 10000000.0f).ToString("0.000000");
                lblSpeed.Text     = (gps.vel / 100f).ToString("0.00 m/s");
                lblNumSat.Text    = gps.satellites_visible.ToString();
            }
            else if (t == typeof(Msg_vfr_hud))
            {
                Msg_vfr_hud vfr = (msg as Msg_vfr_hud);
                lblClimb.Text    = vfr.climb.ToString("0.00 m/s");
                lblSpeed.Text    = vfr.groundspeed.ToString("0.00 m/s");
                lblHeading.Text  = vfr.heading.ToString("0 °");
                lblThrottle.Text = vfr.throttle.ToString() + " %";
            }
            else if (t == typeof(Msg_attitude))
            {
                Msg_attitude att = (msg as Msg_attitude);
                lblRoll.Text  = (att.roll * 180.0 / Math.PI).ToString("0.00 °");
                lblPitch.Text = (att.pitch * 180.0 / Math.PI).ToString("0.00 °");
            }
            else if (t == typeof(Msg_rc_channels))
            {
                Msg_rc_channels rc = (msg as Msg_rc_channels);
                lblRC1.Text = rc.chan2_raw.ToString();
                lblRC2.Text = rc.chan3_raw.ToString();
                lblRC3.Text = rc.chan6_raw.ToString();
                lblRC4.Text = rc.chan4_raw.ToString();
                lblRC5.Text = rc.chan8_raw.ToString();
                lblRC6.Text = rc.chan9_raw.ToString();
                lblRC7.Text = rc.chan5_raw.ToString();
                lblRC8.Text = rc.chan10_raw.ToString();
            }
            else if (t == typeof(Msg_rc_channels_raw))
            {
                Msg_rc_channels_raw rc = (msg as Msg_rc_channels_raw);
                lblRC1.Text = rc.chan1_raw.ToString();
                lblRC2.Text = rc.chan2_raw.ToString();
                lblRC3.Text = rc.chan3_raw.ToString();
                lblRC4.Text = rc.chan4_raw.ToString();
                lblRC5.Text = rc.chan5_raw.ToString();
                lblRC6.Text = rc.chan6_raw.ToString();
                lblRC7.Text = rc.chan7_raw.ToString();
                lblRC8.Text = rc.chan8_raw.ToString();
            }
            else if (t == typeof(Msg_battery_status))
            {
                Msg_battery_status batt = (msg as Msg_battery_status);

                lbCell1.Text  = string.Format("{0:00}. {1:0.00} V", 1, ((float)batt.voltages[0] / 1000f));
                lbCell2.Text  = string.Format("{0:00}. {1:0.00} V", 2, ((float)batt.voltages[1] / 1000f));
                lbCell3.Text  = string.Format("{0:00}. {1:0.00} V", 3, ((float)batt.voltages[2] / 1000f));
                lbCell4.Text  = string.Format("{0:00}. {1:0.00} V", 4, ((float)batt.voltages[3] / 1000f));
                lbCell5.Text  = string.Format("{0:00}. {1:0.00} V", 5, ((float)batt.voltages[4] / 1000f));
                lbCell6.Text  = string.Format("{0:00}. {1:0.00} V", 6, ((float)batt.voltages[5] / 1000f));
                lbCell7.Text  = string.Format("{0:00}. {1:0.00} V", 7, ((float)batt.voltages[6] / 1000f));
                lbCell8.Text  = string.Format("{0:00}. {1:0.00} V", 8, ((float)batt.voltages[7] / 1000f));
                lbCell9.Text  = string.Format("{0:00}. {1:0.00} V", 9, ((float)batt.voltages[8] / 1000f));
                lbCell10.Text = string.Format("{0:00}. {1:0.00} V", 10, ((float)batt.voltages[9] / 1000f));
            }
        }