Esempio n. 1
0
        private static bool GenerateHexFile(List <byte[]> buffer_list)
        {
            StreamWriter sw;

            try
            {
                sw = new StreamWriter(opt_output_file);
            }
            catch
            {
                Console.WriteLine("Unable to open \"" + opt_output_file + "\" for writing.");
                return(false);
            }

            MemoryStream ms = new MemoryStream();

            foreach (byte[] buffer in buffer_list)
            {
                ms.Write(buffer, 0, buffer.Length);
            }
            byte[] terminator = new byte[2] {
                0, 0
            };
            ms.Write(terminator, 0, 2);
            //byte[] buffer = new byte[512];
            //for (int i = 0; i < buffer.Length; i++)
            //	buffer[i] = 0xFF;
            //ms.Write(buffer, 0, buffer.Length);

            sw.Write(IntelHEX.GenerateHEX(ms));

            sw.Close();
            Console.WriteLine("Wrote \"" + opt_output_file + "\".");
            return(true);
        }
Esempio n. 2
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBoxCOM.SelectedIndex < 0)
            {
                if (me.Idioma == 0)
                {
                    MessageBox.Show("Selecciona un puerto serie");
                }
                else
                {
                    MessageBox.Show("Choose Serial Port");
                }
            }
            else
            {
                try
                {
                    hex = IntelHEX.FromBinFw(textBox1.Text);
                }
                catch (Exception)
                {
                }

                if (hex == null)
                {
                    if (me.Idioma == 0)
                    {
                        MessageBox.Show("Error abriendo fichero. Usando interno");
                    }
                    else
                    {
                        MessageBox.Show("Error opening file. Using build-in");
                    }

                    MemoryStream stream;
                    switch (device)
                    {
                    case Devices.OSD:
                        stream = new MemoryStream(global::UAVConsole.Properties.Resources.firmware);
                        break;

                    case Devices.Uplink:
                        stream = new MemoryStream(global::UAVConsole.Properties.Resources.fw_uplink);
                        break;

                    case Devices.AntTracker:
                        stream = new MemoryStream(global::UAVConsole.Properties.Resources.fw_anttrack);
                        break;

                    default:
                        stream = null;
                        break;
                    }
                    hex = IntelHEX.FromBinFw(stream);
                }
                if (modo == Modos.Usb)
                {
                    pages      = hex.lenght / 512;
                    currPage   = 0;
                    currOffset = 0;

                    if (hex.lenght % 512 == 0)
                    {
                        if (device == Devices.Uplink)
                        {
                            usbFirm = new UsbLayerFIRM("9100");
                        }
                        else
                        {
                            usbFirm = new UsbLayerFIRM("9200");
                        }

                        // configuramos la prgressbar
                        progressBar1.Maximum = pages;
                        progressBar1.Value   = 0;
                        progressBar1.Invalidate();

                        timer1.Interval = 3000;
                        timer1.Start();
                    }
                    else
                    {
                        MessageBox.Show("El fichero no tiene la longitud adecuada. Debe ser múltiplo del tamaño de página.");
                    }
                }
                else
                {
                    string comm_name = comboBoxCOM.Items[comboBoxCOM.SelectedIndex].ToString();
                    sp       = new SerialPort(comm_name, 115200, Parity.None, 8, StopBits.One);
                    pages    = hex.lenght / 512;
                    currPage = 0;
                    crc      = 0;

                    if (hex.lenght % 512 == 0)
                    {
                        sp.Open();
                        sp.Write("$");
                        sp.Write("A");
                        sp.Write("T");
                        sp.Write("C");

                        //enviamos el número de pages
                        sp.Write(new byte[] { (byte)pages }, 0, 1);

                        // configuramos la prgressbar
                        progressBar1.Maximum = pages;
                        progressBar1.Value   = 0;
                        progressBar1.Invalidate();

                        timer1.Interval = 3000;
                        timer1.Start();
                    }
                    else
                    {
                        MessageBox.Show("El fichero no tiene la longitud adecuada. Debe ser múltiplo del tamaño de página.");
                    }
                }
            }
        }