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); }
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."); } } } }