예제 #1
0
        private async void myDataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // Ignore clicks that are not on button cells.
            if (e.RowIndex < 0)
            {
                return;
            }

            try {
                byte nodeID = (byte)myDataGridView1[iDDataGridViewTextBoxColumn.Index, e.RowIndex].Value;

                if (e.ColumnIndex == myDataGridView1.Columns["Parameter"].Index)
                {
                    IProgressReporterDialogue prd = new ProgressReporterDialogue();
                    List <uavcan.uavcan_protocol_param_GetSet_res> paramlist =
                        new List <uavcan.uavcan_protocol_param_GetSet_res>();
                    prd.doWorkArgs.ForceExit             = true;
                    prd.doWorkArgs.CancelRequestChanged += (sender2, args) => { prd.doWorkArgs.CancelAcknowledged = true; };
                    prd.DoWork += dialogue =>
                    {
                        paramlist = can.GetParameters(nodeID);
                    };
                    prd.UpdateProgressAndStatus(-1, Strings.GettingParams);
                    prd.RunBackgroundOperationAsync();

                    if (!prd.doWorkArgs.CancelRequested)
                    {
                        new UAVCANParams(can, nodeID, paramlist).ShowUserControl();
                    }
                }
                else if (e.ColumnIndex == myDataGridView1.Columns["Restart"].Index)
                {
                    can.RestartNode(nodeID);
                }
                else if (e.ColumnIndex == myDataGridView1.Columns["updateDataGridViewTextBoxColumn"].Index)
                {
                    ProgressReporterDialogue    prd      = new ProgressReporterDialogue();
                    uavcan.FileSendProgressArgs filesend = (id, file, percent) =>
                    {
                        prd.UpdateProgressAndStatus((int)percent, id + " " + file);
                    };
                    can.FileSendProgress += filesend;
                    if (CustomMessageBox.Show("Do you want to search the internet for an update?", "Update",
                                              CustomMessageBox.MessageBoxButtons.YesNo) == CustomMessageBox.DialogResult.Yes)
                    {
                        var devicename = myDataGridView1[nameDataGridViewTextBoxColumn.Index, e.RowIndex].Value.ToString();
                        var hwversion  =
                            double.Parse(
                                myDataGridView1[hardwareVersionDataGridViewTextBoxColumn.Index, e.RowIndex].Value
                                .ToString(), CultureInfo.InvariantCulture);

                        var usebeta = false;

                        if (CustomMessageBox.Show("Do you want to search for a beta firmware? (not recommended)", "Update",
                                                  CustomMessageBox.MessageBoxButtons.YesNo) == CustomMessageBox.DialogResult.Yes)
                        {
                            usebeta = true;
                        }

                        var url = can.LookForUpdate(devicename, hwversion, usebeta);

                        if (url != string.Empty)
                        {
                            try
                            {
                                prd.DoWork += dialogue =>
                                {
                                    var tempfile = Path.GetTempFileName();
                                    Download.getFilefromNet(url, tempfile);

                                    try
                                    {
                                        can.Update(nodeID, devicename, hwversion, tempfile);
                                    }
                                    catch (Exception ex)
                                    {
                                        throw;
                                    }

                                    return;
                                };

                                prd.RunBackgroundOperationAsync();
                            }
                            catch (Exception ex)
                            {
                                CustomMessageBox.Show(ex.Message, Strings.ERROR);
                            }
                        }
                        else
                        {
                            CustomMessageBox.Show(Strings.UpdateNotFound, Strings.UpdateNotFound);
                        }
                    }
                    else
                    {
                        FileDialog fd = new OpenFileDialog();
                        fd.RestoreDirectory = true;
                        fd.Filter           = "*.bin|*.bin";
                        var dia = fd.ShowDialog();

                        if (fd.CheckFileExists && dia == DialogResult.OK)
                        {
                            try
                            {
                                prd.DoWork += dialogue =>
                                {
                                    can.Update(nodeID, myDataGridView1[nameDataGridViewTextBoxColumn.Index, e.RowIndex].Value.ToString(), 0,
                                               fd.FileName);

                                    return;
                                };

                                prd.RunBackgroundOperationAsync();
                            }
                            catch (Exception ex)
                            {
                                CustomMessageBox.Show(ex.Message, Strings.ERROR);
                            }
                        }
                    }
                    can.FileSendProgress -= filesend;
                    prd.Dispose();
                }
            } catch
            {
            }
        }
예제 #2
0
        private async void myDataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // Ignore clicks that are not on button cells.
            if (e.RowIndex < 0 || e.ColumnIndex !=
                myDataGridView1.Columns["updateDataGridViewTextBoxColumn"].Index &&
                e.ColumnIndex != myDataGridView1.Columns["Parameter"].Index)
            {
                return;
            }

            byte nodeID = (byte)myDataGridView1[iDDataGridViewTextBoxColumn.Index, e.RowIndex].Value;

            if (e.ColumnIndex == myDataGridView1.Columns["Parameter"].Index)
            {
                var paramlist = can.GetParameters(nodeID);

                new UAVCANParams(can, nodeID, paramlist).ShowUserControl();
            }
            else if (e.ColumnIndex == myDataGridView1.Columns["updateDataGridViewTextBoxColumn"].Index)
            {
                ProgressReporterDialogue    prd      = new ProgressReporterDialogue();
                uavcan.FileSendProgressArgs filesend = (id, file, percent) =>
                {
                    prd.UpdateProgressAndStatus((int)percent, id + " " + file);
                };
                can.FileSendProgress += filesend;
                if (CustomMessageBox.Show("Do you want to search the internet for an update?", "Update", CustomMessageBox.MessageBoxButtons.YesNo) == CustomMessageBox.DialogResult.Yes)
                {
                    var devicename = myDataGridView1[nameDataGridViewTextBoxColumn.Index, e.RowIndex].Value.ToString();
                    var hwversion  = double.Parse(myDataGridView1[hardwareVersionDataGridViewTextBoxColumn.Index, e.RowIndex].Value.ToString(), CultureInfo.InvariantCulture);

                    var url = can.LookForUpdate(devicename, hwversion);

                    if (url != string.Empty)
                    {
                        try
                        {
                            prd.DoWork += dialogue =>
                            {
                                var tempfile = Path.GetTempFileName();
                                Download.getFilefromNet(url, tempfile);

                                can.Update(nodeID, devicename, hwversion, tempfile);

                                return;
                            };

                            prd.RunBackgroundOperationAsync();
                        }
                        catch (Exception ex)
                        {
                            CustomMessageBox.Show(ex.Message, Strings.ERROR);
                        }
                    }
                    else
                    {
                        CustomMessageBox.Show(Strings.UpdateNotFound, Strings.UpdateNotFound);
                    }
                }
                else
                {
                    FileDialog fd = new OpenFileDialog();
                    fd.RestoreDirectory = true;
                    fd.Filter           = "*-crc.bin|*-crc.bin";
                    var dia = fd.ShowDialog();

                    if (fd.CheckFileExists && dia == DialogResult.OK)
                    {
                        try
                        {
                            prd.DoWork += dialogue =>
                            {
                                can.Update(nodeID, myDataGridView1[nameDataGridViewTextBoxColumn.Index, e.RowIndex].Value.ToString(), 0,
                                           fd.FileName);

                                return;
                            };

                            prd.RunBackgroundOperationAsync();
                        }
                        catch (Exception ex)
                        {
                            CustomMessageBox.Show(ex.Message, Strings.ERROR);
                        }
                    }
                }
                can.FileSendProgress -= filesend;
                prd.Dispose();
            }
        }
예제 #3
0
        private void FirmwareUpdate(byte nodeID, bool beta = false)
        {
            ProgressReporterDialogue prd = new ProgressReporterDialogue();

            uavcan.FileSendProgressArgs filesend = (id, file, percent) =>
            {
                prd.UpdateProgressAndStatus((int)percent, id + " " + file);
            };
            can.FileSendProgress += filesend;
            var devicename = can.GetNodeName(nodeID);
            var hwversion  =
                double.Parse(
                    can.NodeInfo[nodeID].hardware_version.major + "." + can.NodeInfo[nodeID].hardware_version.minor,
                    CultureInfo.InvariantCulture);

            if (CustomMessageBox.Show("Do you want to search the internet for an update?", "Update",
                                      CustomMessageBox.MessageBoxButtons.YesNo) == CustomMessageBox.DialogResult.Yes)
            {
                var url = can.LookForUpdate(devicename, hwversion, beta);

                if (url != string.Empty)
                {
                    try
                    {
                        var cancel = new CancellationTokenSource();

                        prd.DoWork += dialogue =>
                        {
                            prd.UpdateProgressAndStatus(5, "Download FW");
                            var tempfile = Path.GetTempFileName();
                            Download.getFilefromNet(url, tempfile);

                            uavcan.FileSendCompleteArgs file = (p, s) =>
                            {
                                prd.UpdateProgressAndStatus(100, "File send complete");
                            };
                            uavcan.FileSendProgressArgs fileprog = (n, f, p) =>
                            {
                                prd.UpdateProgressAndStatus((int)p, f);
                            };
                            can.FileSendComplete += file;
                            can.FileSendProgress += fileprog;

                            try
                            {
                                can.Update(nodeID, devicename, hwversion, tempfile, cancel.Token);
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                            finally
                            {
                                can.FileSendComplete -= file;
                                can.FileSendProgress -= fileprog;
                            }

                            return;
                        };

                        prd.btnCancel.Click += (sender, args) =>
                        {
                            prd.doWorkArgs.CancelAcknowledged = true;
                            cancel.Cancel();
                        };

                        prd.RunBackgroundOperationAsync();
                    }
                    catch (Exception ex)
                    {
                        CustomMessageBox.Show(ex.Message, Strings.ERROR);
                    }
                }
                else
                {
                    CustomMessageBox.Show(Strings.UpdateNotFound, Strings.UpdateNotFound);
                }
            }
            else
            {
                FileDialog fd = new OpenFileDialog();
                fd.RestoreDirectory = true;
                fd.Filter           = "*.bin|*.bin";
                var dia = fd.ShowDialog();

                if (fd.CheckFileExists && dia == DialogResult.OK)
                {
                    uavcan.FileSendCompleteArgs file = (p, s) =>
                    {
                        prd.UpdateProgressAndStatus(100, "File send complete");
                    };
                    uavcan.FileSendProgressArgs fileprog = (n, f, p) =>
                    {
                        prd.UpdateProgressAndStatus((int)p, f);
                    };
                    can.FileSendComplete += file;
                    can.FileSendProgress += fileprog;

                    try
                    {
                        var cancel = new CancellationTokenSource();

                        prd.DoWork += dialogue =>
                        {
                            can.Update(nodeID,
                                       devicename, 0,
                                       fd.FileName, cancel.Token);

                            return;
                        };

                        prd.btnCancel.Click += (sender, args) =>
                        {
                            prd.doWorkArgs.CancelAcknowledged = true;
                            cancel.Cancel();
                        };

                        prd.RunBackgroundOperationAsync();
                    }
                    catch (Exception ex)
                    {
                        CustomMessageBox.Show(ex.Message, Strings.ERROR);
                    }
                    finally
                    {
                        can.FileSendComplete -= file;
                        can.FileSendProgress -= fileprog;
                    }
                }
            }

            can.FileSendProgress -= filesend;
            prd.Dispose();
        }
예제 #4
0
        private void FirmwareUpdate(byte nodeID)
        {
            ProgressReporterDialogue prd = new ProgressReporterDialogue();

            uavcan.FileSendProgressArgs filesend = (id, file, percent) =>
            {
                prd.UpdateProgressAndStatus((int)percent, id + " " + file);
            };
            can.FileSendProgress += filesend;
            var devicename = can.NodeInfo[nodeID].name.Aggregate("", (a, b) => a + (char)b).ToString();
            var hwversion  =
                double.Parse(
                    can.NodeInfo[nodeID].hardware_version.major + "." + can.NodeInfo[nodeID].hardware_version.minor,
                    CultureInfo.InvariantCulture);

            if (CustomMessageBox.Show("Do you want to search the internet for an update?", "Update",
                                      CustomMessageBox.MessageBoxButtons.YesNo) == CustomMessageBox.DialogResult.Yes)
            {
                var usebeta = false;

                if (CustomMessageBox.Show("Do you want to search for a beta firmware? (not recommended)", "Update",
                                          CustomMessageBox.MessageBoxButtons.YesNo) == CustomMessageBox.DialogResult.Yes)
                {
                    usebeta = true;
                }

                var url = can.LookForUpdate(devicename, hwversion, usebeta);

                if (url != string.Empty)
                {
                    try
                    {
                        prd.DoWork += dialogue =>
                        {
                            var tempfile = Path.GetTempFileName();
                            Download.getFilefromNet(url, tempfile);

                            try
                            {
                                can.Update(nodeID, devicename, hwversion, tempfile);
                            }
                            catch (Exception ex)
                            {
                                throw;
                            }

                            return;
                        };

                        prd.RunBackgroundOperationAsync();
                    }
                    catch (Exception ex)
                    {
                        CustomMessageBox.Show(ex.Message, Strings.ERROR);
                    }
                }
                else
                {
                    CustomMessageBox.Show(Strings.UpdateNotFound, Strings.UpdateNotFound);
                }
            }
            else
            {
                FileDialog fd = new OpenFileDialog();
                fd.RestoreDirectory = true;
                fd.Filter           = "*.bin|*.bin";
                var dia = fd.ShowDialog();

                if (fd.CheckFileExists && dia == DialogResult.OK)
                {
                    try
                    {
                        prd.DoWork += dialogue =>
                        {
                            can.Update(nodeID,
                                       devicename, 0,
                                       fd.FileName);

                            return;
                        };

                        prd.RunBackgroundOperationAsync();
                    }
                    catch (Exception ex)
                    {
                        CustomMessageBox.Show(ex.Message, Strings.ERROR);
                    }
                }
            }

            can.FileSendProgress -= filesend;
            prd.Dispose();
        }