private void BUT_copy1280_Click(object sender, EventArgs e) { ArduinoSTK port = new ArduinoSTK(); port.BaudRate = 57600; port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = ArdupilotMega.MainV2.comPortName; log.Info("Open Port"); port.Open(); log.Info("Connect AP"); if (port.connectAP()) { log.Info("Download AP"); byte[] EEPROM = new byte[1024 * 4]; for (int a = 0; a < 4 * 1024; a += 0x100) { port.setaddress(a); port.download(0x100).CopyTo(EEPROM, a); } log.Info("Verify State"); if (port.keepalive()) { StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"EEPROM1280.bin"); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bw.Write(EEPROM, 0, EEPROM.Length); bw.Close(); log.Info("Download AP"); byte[] FLASH = new byte[1024 * 128]; for (int a = 0; a < FLASH.Length; a += 0x100) { port.setaddress(a); port.downloadflash(0x100).CopyTo(FLASH, a); } sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"FLASH1280.bin"); bw = new BinaryWriter(sw.BaseStream); bw.Write(FLASH, 0, FLASH.Length); bw.Close(); } else { CustomMessageBox.Show("Communication Error - Bad data"); } } else { CustomMessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { CustomMessageBox.Show("Port Error? " + ex.ToString()); if (port != null && port.IsOpen) { port.Close(); } } }
private void BUT_ReadOSD_Click(object sender, EventArgs e) { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; this.toolStripStatusLabel1.Text = ""; bool fail = false; ArduinoSTK sp; try { if (comPort.IsOpen) comPort.Close(); sp = new ArduinoSTK(); sp.PortName = CMB_ComPort.Text; sp.BaudRate = 57600; sp.DtrEnable = true; sp.Open(); } catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (sp.connectAP()) { try { eeprom = sp.download(1024); } catch (Exception ex) { fail = true; MessageBox.Show(ex.Message); } } else { MessageBox.Show("Failed to talk to bootloader"); fail = true; } sp.Close(); if (!fail) { for (int a = 0; a < panelItems.Length; a++) { if (panelItems[a] != null) { if (panelItems[a].Item5 >= 0) LIST_items.SetItemCheckState(a, eeprom[panelItems[a].Item5] == 0 ? CheckState.Unchecked : CheckState.Checked); if (panelItems[a].Item7 >= 0 || panelItems[a].Item6 >= 0) panelItems[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems[a].Item1, panelItems[a].Item2, eeprom[panelItems[a].Item6], eeprom[panelItems[a].Item7], panelItems[a].Item5, panelItems[a].Item6, panelItems[a].Item7); } } } osdDraw(); if (!fail) MessageBox.Show("Done!"); }
private void BUT_ReadOSD_Click(object sender, EventArgs e) { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; this.toolStripStatusLabel1.Text = ""; bool fail = false; ArduinoSTK sp; try { if (comPort.IsOpen) comPort.Close(); sp = new ArduinoSTK(); sp.PortName = CMB_ComPort.Text; sp.BaudRate = 57600; sp.DtrEnable = true; sp.Open(); } catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (sp.connectAP()) { try { for (int i = 0; i < 5; i++) { //try to download two times if it fail eeprom = sp.download(1024); if (!sp.down_flag) { if (sp.keepalive()) Console.WriteLine("keepalive successful (iter " + i + ")"); else Console.WriteLine("keepalive fail (iter " + i + ")"); } else break; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } else { MessageBox.Show("Failed to talk to bootloader"); fail = true; } sp.Close(); //Verify EEPROM version if (eeprom[CHK_VERSION] != VER) { // no match MessageBox.Show("The EEPROM mapping is outdated! An automatic update will start.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); BUT_ResetOSD_EEPROM(); //write defaults MessageBox.Show("EEPROM mapping updated!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (!fail) { for (int a = 0; a < panelItems.Length; a++) { if (panelItems[a] != null) { if (panelItems[a].Item5 >= 0) { TreeNode[] tnArray = LIST_items.Nodes.Find(panelItems[a].Item1, true); if (tnArray.Length > 0) tnArray[0].Checked = (eeprom[panelItems[a].Item5] == 1); //LIST_items.SetItemCheckState(a, eeprom[panelItems[a].Item5] == 0 ? CheckState.Unchecked : CheckState.Checked); } if (panelItems[a].Item7 >= 0 || panelItems[a].Item6 >= 0) panelItems[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems[a].Item1, panelItems[a].Item2, eeprom[panelItems[a].Item6], eeprom[panelItems[a].Item7], panelItems[a].Item5, panelItems[a].Item6, panelItems[a].Item7); } } //Second panel for (int a = 0; a < panelItems2.Length; a++) { if (panelItems2[a] != null) { if (panelItems2[a].Item5 >= 0) { TreeNode[] tnArray = LIST_items2.Nodes.Find(panelItems2[a].Item1, true); if (tnArray.Length > 0) tnArray[0].Checked = (eeprom[panelItems2[a].Item5 + OffsetBITpanel] == 1); //LIST_items2.SetItemCheckState(a, eeprom[panelItems[a].Item5] == 0 ? CheckState.Unchecked : CheckState.Checked); } if (panelItems2[a].Item7 >= 0 || panelItems2[a].Item6 >= 0) panelItems2[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems2[a].Item1, panelItems2[a].Item2, eeprom[panelItems2[a].Item6 + OffsetBITpanel], eeprom[panelItems2[a].Item7 + OffsetBITpanel], panelItems2[a].Item5, panelItems2[a].Item6, panelItems2[a].Item7); } } } //Setup configuration panel pan.converts = eeprom[measure_ADDR]; //Modify units if (pan.converts == 0) { UNITS_combo.SelectedIndex = 0; //metric STALL_label.Text = "Stall Speed (km/h)"; OVERSPEED_label.Text = "Overspeed (km/h)"; } else if (pan.converts == 1) { UNITS_combo.SelectedIndex = 1; //imperial STALL_label.Text = "Stall Speed (mph)"; OVERSPEED_label.Text = "Overspeed (mph)"; } else //garbage value in EEPROM - default to metric { pan.converts = 0; //correct value UNITS_combo.SelectedIndex = 0; //metric STALL_label.Text = "Stall Speed (km/h)"; OVERSPEED_label.Text = "Overspeed (km/h)"; } pan.overspeed = eeprom[overspeed_ADDR]; OVERSPEED_numeric.Value = pan.overspeed; pan.stall = eeprom[stall_ADDR]; STALL_numeric.Value = pan.stall; pan.battv = eeprom[battv_ADDR]; MINVOLT_numeric.Value = Convert.ToDecimal(pan.battv) / Convert.ToDecimal(10.0); pan.rssical = eeprom[OSD_RSSI_HIGH_ADDR]; RSSI_numeric_max.Value = pan.rssical; pan.rssipersent = eeprom[OSD_RSSI_LOW_ADDR]; RSSI_numeric_min.Value = pan.rssipersent; pan.rssiraw_on = eeprom[OSD_RSSI_RAW_ADDR]; RSSI_RAW.Checked = Convert.ToBoolean(pan.rssiraw_on); pan.ch_toggle = eeprom[OSD_Toggle_ADDR]; if (pan.ch_toggle >= toggle_offset && pan.ch_toggle < 9) ONOFF_combo.SelectedIndex = pan.ch_toggle - toggle_offset; else ONOFF_combo.SelectedIndex = 0; //reject garbage from EEPROM pan.switch_mode = eeprom[switch_mode_ADDR]; TOGGLE_BEH.Checked = Convert.ToBoolean(pan.switch_mode); pan.pal_ntsc = eeprom[PAL_NTSC_ADDR]; CHK_pal.Checked = Convert.ToBoolean(pan.pal_ntsc); pan.batt_warn_level = eeprom[OSD_BATT_WARN_ADDR]; BATT_WARNnumeric.Value = pan.batt_warn_level; pan.osd_battery_show_percentage = eeprom[OSD_BATT_SHOW_PERCENT_ADDR]; rbtBatteryPercent.Checked = Convert.ToBoolean(pan.osd_battery_show_percentage); rbtBatterymAh.Checked = !rbtBatteryPercent.Checked; pan.rssi_warn_level = eeprom[OSD_RSSI_WARN_ADDR]; RSSI_WARNnumeric.Value = pan.rssi_warn_level; pan.osd_brightness = eeprom[OSD_BRIGHTNESS_ADDR]; BRIGHTNESScomboBox.SelectedIndex = pan.osd_brightness; char[] str_call = new char[OSD_CALL_SIGN_TOTAL]; for (int i = 0; i < OSD_CALL_SIGN_TOTAL; i++){ str_call[i] = Convert.ToChar(eeprom[OSD_CALL_SIGN_ADDR + i]); Console.WriteLine("Call Sign read ", i, " is ", eeprom[OSD_CALL_SIGN_ADDR + i]); } pan.callsign_str = new string(str_call); CALLSIGNmaskedText.Text = pan.callsign_str; this.pALToolStripMenuItem_CheckStateChanged(EventArgs.Empty, EventArgs.Empty); this.nTSCToolStripMenuItem_CheckStateChanged(EventArgs.Empty, EventArgs.Empty); this.CHK_pal_CheckedChanged(EventArgs.Empty, EventArgs.Empty); osdDraw1(); osdDraw2(); //if (!fail) // MessageBox.Show("Done!"); if (sp.down_flag) MessageBox.Show("Done downloading data!"); else MessageBox.Show("Failed to download data!"); sp.down_flag = false; }
private void ReadCharsetVersion() { byte[] tempEeprom = new byte[1024]; bool fail = false; ArduinoSTK sp; try { if (comPort.IsOpen) comPort.Close(); sp = new ArduinoSTK(); sp.PortName = CMB_ComPort.Text; sp.BaudRate = 57600; sp.DtrEnable = true; sp.Open(); } catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (sp.connectAP()) { try { for (int i = 0; i < 5; i++) { //try to download two times if it fail tempEeprom = sp.download(1024); if (!sp.down_flag) { if (sp.keepalive()) Console.WriteLine("keepalive successful (iter " + i + ")"); else Console.WriteLine("keepalive fail (iter " + i + ")"); } else break; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } else { MessageBox.Show("Failed to talk to bootloader"); fail = true; } sp.Close(); if (!fail) { lblLatestCharsetUploaded.Text = "Last charset uploaded to OSD: " + tempEeprom[CS_VERSION1_ADDR].ToString() + "." + tempEeprom[CS_VERSION1_ADDR + 1].ToString() + "." + tempEeprom[CS_VERSION1_ADDR + 2].ToString(); } }
private void BUT_ReadOSD_Click(object sender, EventArgs e) { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; this.toolStripStatusLabel1.Text = ""; bool fail = false; ArduinoSTK sp; try { if (comPort.IsOpen) comPort.Close(); sp = new ArduinoSTK(); sp.PortName = CMB_ComPort.Text; sp.BaudRate = 57600; sp.DtrEnable = true; sp.Open(); } catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (sp.connectAP()) { try { for (int i = 0; i < 5; i++) { //try to download two times if it fail eeprom = sp.download(1024); if (!sp.down_flag) { if (sp.keepalive()) Console.WriteLine("keepalive successful (iter " + i + ")"); else Console.WriteLine("keepalive fail (iter " + i + ")"); } else break; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } else { MessageBox.Show("Failed to talk to bootloader"); fail = true; } sp.Close(); //Verify EEPROM version if (eeprom[CHK_VERSION] != VER) { // no match MessageBox.Show("The EEPROM mapping is outdated! An automatic update will start.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); BUT_ResetOSD_EEPROM(); //write defaults MessageBox.Show("EEPROM mapping updated!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (!fail) { for (int a = 0; a < panelItems.Length; a++) { if (panelItems[a] != null) { if (panelItems[a].Item5 >= 0) { TreeNode[] tnArray = LIST_items.Nodes.Find(panelItems[a].Item1, true); if (tnArray.Length > 0) tnArray[0].Checked = (eeprom[panelItems[a].Item5] == 1); //LIST_items.SetItemCheckState(a, eeprom[panelItems[a].Item5] == 0 ? CheckState.Unchecked : CheckState.Checked); } if (panelItems[a].Item7 >= 0 || panelItems[a].Item6 >= 0) panelItems[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems[a].Item1, panelItems[a].Item2, eeprom[panelItems[a].Item6], eeprom[panelItems[a].Item7], panelItems[a].Item5, panelItems[a].Item6, panelItems[a].Item7); } } //Second panel for (int a = 0; a < panelItems2.Length; a++) { if (panelItems2[a] != null) { if (panelItems2[a].Item5 >= 0) { TreeNode[] tnArray = LIST_items2.Nodes.Find(panelItems2[a].Item1, true); if (tnArray.Length > 0) tnArray[0].Checked = (eeprom[panelItems2[a].Item5 + OffsetBITpanel] == 1); //LIST_items2.SetItemCheckState(a, eeprom[panelItems[a].Item5] == 0 ? CheckState.Unchecked : CheckState.Checked); } if (panelItems2[a].Item7 >= 0 || panelItems2[a].Item6 >= 0) panelItems2[a] = new Tuple<string, Func<int, int, int>, int, int, int, int, int>(panelItems2[a].Item1, panelItems2[a].Item2, eeprom[panelItems2[a].Item6 + OffsetBITpanel], eeprom[panelItems2[a].Item7 + OffsetBITpanel], panelItems2[a].Item5, panelItems2[a].Item6, panelItems2[a].Item7); } } } //Setup configuration panel pan.model_type = eeprom[MODEL_TYPE_ADD]; pan.fw_version1 = eeprom[FW_VERSION1_ADDR]; pan.fw_version2 = eeprom[FW_VERSION2_ADDR]; pan.fw_version3 = eeprom[FW_VERSION3_ADDR]; pan.cs_version1 = eeprom[CS_VERSION1_ADDR]; pan.cs_version2 = eeprom[CS_VERSION1_ADDR + 1]; pan.cs_version3 = eeprom[CS_VERSION1_ADDR + 2]; if((pan.fw_version1 == '0') && (pan.fw_version2 == '0') && (pan.fw_version3 == '0')) { lblFWModelType.Text = "Model Type found in OSD: Unknown or custom"; } else { lblFWModelType.Text = "Model Type found in OSD: " + (ModelType)pan.model_type + " " + pan.fw_version1 + "." + pan.fw_version2 + "." + pan.fw_version3; } if ((pan.cs_version1 == '0') && (pan.cs_version2 == '0') && (pan.cs_version3 == '0')) { lblLatestCharsetUploaded.Text = "Last charset uploaded to OSD: Unknown or custom "; } else { lblLatestCharsetUploaded.Text = "Last charset uploaded to OSD: Charset " + (pan.cs_version1 - '0').ToString() + "." + (pan.cs_version2 - '0').ToString() + "." + (pan.cs_version3 - '0').ToString(); } pan.sign_air_speed = eeprom[SIGN_AS_ON_ADDR]; pan.sign_ground_speed = eeprom[SIGN_GS_ON_ADDR]; pan.sign_home_altitude = eeprom[SIGN_HA_ON_ADDR]; pan.sign_msl_altitude = eeprom[SIGN_MSL_ON_ADDR]; cbxAirSpeedSign.Checked = (pan.sign_air_speed != 0); cbxGroundSpeedSign.Checked = (pan.sign_ground_speed != 0); cbxHomeAltitudeSign.Checked = (pan.sign_home_altitude != 0); cbxMslAltitudeSign.Checked = (pan.sign_msl_altitude != 0); cbxModelType.SelectedItem = (ModelType)pan.model_type; pan.converts = eeprom[measure_ADDR]; //Modify units if (pan.converts == 0) { UNITS_combo.SelectedIndex = 0; //metric STALL_label.Text = cbxModelType.SelectedItem.ToString() == "Copter" ? "Max VS (m/min) / 10" : "Stall Speed (km/h)"; OVERSPEED_label.Text = "Overspeed (km/h)"; } else if (pan.converts == 1) { UNITS_combo.SelectedIndex = 1; //imperial STALL_label.Text = cbxModelType.SelectedItem.ToString() == "Copter" ? "Max VS (ft/min) / 10" : "Stall Speed (mph)"; OVERSPEED_label.Text = "Overspeed (mph)"; } else //garbage value in EEPROM - default to metric { pan.converts = 0; //correct value UNITS_combo.SelectedIndex = 0; //metric STALL_label.Text = cbxModelType.SelectedItem.ToString() == "Copter" ? "Max VS (m/min) / 10" : "Stall Speed (km/h)"; OVERSPEED_label.Text = "Overspeed (km/h)"; } pan.overspeed = eeprom[overspeed_ADDR]; OVERSPEED_numeric.Value = pan.overspeed; pan.stall = eeprom[stall_ADDR]; STALL_numeric.Value = pan.stall; pan.battv = eeprom[battv_ADDR]; MINVOLT_numeric.Value = Convert.ToDecimal(pan.battv) / Convert.ToDecimal(10.0); pan.rssical = eeprom[OSD_RSSI_HIGH_ADDR]; //RSSI_numeric_max.Value = pan.rssical; pan.rssipersent = eeprom[OSD_RSSI_LOW_ADDR]; //RSSI_numeric_min.Value = pan.rssipersent; pan.rssiraw_on = eeprom[OSD_RSSI_RAW_ADDR]; updatingRSSI = true; RSSI_numeric_min.Minimum = 0; RSSI_numeric_min.Maximum = 2000; RSSI_numeric_max.Minimum = 0; RSSI_numeric_max.Maximum = 2000; RSSI_numeric_min.Value = 0; RSSI_numeric_max.Value = 0; RSSI_RAW.Checked = Convert.ToBoolean(pan.rssiraw_on % 2); if ((int)(pan.rssiraw_on / 2) == 0) { RSSI_numeric_min.Value = pan.rssipersent; RSSI_numeric_max.Value = pan.rssical; RSSI_numeric_min.Minimum = 0; RSSI_numeric_min.Maximum = 255; RSSI_numeric_max.Minimum = 0; RSSI_numeric_max.Maximum = 255; } else { RSSI_numeric_min.Value = pan.rssipersent * 10; RSSI_numeric_max.Value = pan.rssical * 10; RSSI_numeric_min.Minimum = 900; RSSI_numeric_min.Maximum = 2000; RSSI_numeric_max.Minimum = 900; RSSI_numeric_max.Maximum = 2000; } cbxRSSIChannel.SelectedIndex = (int)(pan.rssiraw_on / 2); updatingRSSI = false; pan.ch_toggle = eeprom[OSD_Toggle_ADDR]; if (pan.ch_toggle >= toggle_offset && pan.ch_toggle < 9) ONOFF_combo.SelectedIndex = pan.ch_toggle - toggle_offset; else ONOFF_combo.SelectedIndex = 0; //reject garbage from EEPROM pan.auto_screen_switch = eeprom[AUTO_SCREEN_SWITCH_ADD]; cbxWarningsAutoPanelSwitch.SelectedItem = (PanelsAutoSwitch)pan.auto_screen_switch; pan.switch_mode = eeprom[switch_mode_ADDR]; TOGGLE_BEH.Checked = Convert.ToBoolean(pan.switch_mode); pan.pal_ntsc = eeprom[PAL_NTSC_ADDR]; CHK_pal.Checked = Convert.ToBoolean(pan.pal_ntsc); pan.batt_warn_level = eeprom[OSD_BATT_WARN_ADDR]; BATT_WARNnumeric.Value = pan.batt_warn_level; pan.osd_battery_show_percentage = eeprom[OSD_BATT_SHOW_PERCENT_ADDR]; rbtBatteryPercent.Checked = Convert.ToBoolean(pan.osd_battery_show_percentage); rbtBatterymAh.Checked = !rbtBatteryPercent.Checked; pan.rssi_warn_level = eeprom[OSD_RSSI_WARN_ADDR]; RSSI_WARNnumeric.Value = pan.rssi_warn_level; pan.osd_brightness = eeprom[OSD_BRIGHTNESS_ADDR]; BRIGHTNESScomboBox.SelectedIndex = pan.osd_brightness; char[] str_call = new char[OSD_CALL_SIGN_TOTAL]; for (int i = 0; i < OSD_CALL_SIGN_TOTAL; i++) { str_call[i] = Convert.ToChar(eeprom[OSD_CALL_SIGN_ADDR + i]); Console.WriteLine("Call Sign read ", i, " is ", eeprom[OSD_CALL_SIGN_ADDR + i]); } pan.callsign_str = new string(str_call); CALLSIGNmaskedText.Text = pan.callsign_str; this.pALToolStripMenuItem_CheckStateChanged(EventArgs.Empty, EventArgs.Empty); this.nTSCToolStripMenuItem_CheckStateChanged(EventArgs.Empty, EventArgs.Empty); this.CHK_pal_CheckedChanged(EventArgs.Empty, EventArgs.Empty); osdDraw1(); osdDraw2(); //if (!fail) // MessageBox.Show("Done!"); if (sp.down_flag) { fwWasRead = true; MessageBox.Show("Done downloading data!"); } else MessageBox.Show("Failed to download data!"); sp.down_flag = false; }
private void BUT_copy1280_Click(object sender, EventArgs e) { ArduinoSTK port = new ArduinoSTK(); port.BaudRate = 57600; port.DataBits = 8; port.StopBits = StopBits.One; port.Parity = Parity.None; port.DtrEnable = true; try { port.PortName = ArdupilotMega.MainV2.comportname; Console.WriteLine("Open Port"); port.Open(); Console.WriteLine("Connect AP"); if (port.connectAP()) { Console.WriteLine("Download AP"); byte[] EEPROM = new byte[1024 * 4]; for (int a = 0; a < 4 * 1024; a += 0x100) { port.setaddress(a); port.download(0x100).CopyTo(EEPROM, a); } Console.WriteLine("Verify State"); if (port.keepalive()) { StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"EEPROM1280.bin"); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bw.Write(EEPROM, 0, EEPROM.Length); bw.Close(); Console.WriteLine("Download AP"); byte[] FLASH = new byte[1024 * 128]; for (int a = 0; a < FLASH.Length; a += 0x100) { port.setaddress(a); port.downloadflash(0x100).CopyTo(FLASH, a); } sw = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"FLASH1280.bin"); bw = new BinaryWriter(sw.BaseStream); bw.Write(FLASH, 0, FLASH.Length); bw.Close(); } else { MessageBox.Show("Communication Error - Bad data"); } } else { MessageBox.Show("Communication Error - no connection"); } port.Close(); } catch (Exception ex) { MessageBox.Show("Port Error? " + ex.ToString()); if (port != null && port.IsOpen) { port.Close(); } } }
private ModelType GetModelType() { ModelType modelType = ModelType.Unknown; byte[] tempEeprom = null; bool fail = false; ArduinoSTK sp; try { if (comPort.IsOpen) comPort.Close(); sp = new ArduinoSTK(); sp.PortName = CMB_ComPort.Text; sp.BaudRate = 57600; sp.DtrEnable = true; sp.Open(); } catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return ModelType.Unknown; } if (sp.connectAP()) { try { for (int i = 0; i < 5; i++) { //try to download two times if it fail tempEeprom = sp.download(1024); if (!sp.down_flag) { if (sp.keepalive()) Console.WriteLine("keepalive successful (iter " + i + ")"); else Console.WriteLine("keepalive fail (iter " + i + ")"); } else break; } modelType = (ModelType)tempEeprom[MODEL_TYPE_ADD]; } catch (Exception ex) { MessageBox.Show(ex.Message); } } else { MessageBox.Show("Failed to talk to bootloader"); } sp.Close(); //Setup configuration panel return modelType; }
private void BUT_ReadIOB_Click(object sender, EventArgs e) { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; this.toolStripStatusLabel1.Text = ""; bool fail = false; ArduinoSTK sp; try { if (comPort.IsOpen) comPort.Close(); sp = new ArduinoSTK(); sp.PortName = CMB_ComPort.Text; sp.BaudRate = 57600; sp.DtrEnable = true; sp.Open(); } catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (sp.connectAP()) { try { eeprom = sp.download(1024); } catch (Exception ex) { fail = true; MessageBox.Show(ex.Message); } } else { MessageBox.Show("Failed to talk to bootloader"); fail = true; } sp.Close(); int startmbind = 64; if (!fail) { for (int pos = 0; pos < 16 ;pos++) { patterns[pos] = (ushort)((ushort)(eeprom[pos*2] << 8) + eeprom[pos*2 + 1]); Control[] ctls = this.Controls.Find("pattern" + (pos+1), true); if (ctls.Length > 0) { ((Pattern)ctls[0]).Value = patterns[pos]; ((Pattern)ctls[0]).FlightMode = (ushort)(eeprom[startmbind + pos * 2]); } } } printeeprom(); if (!fail) MessageBox.Show("Done!"); }
void ser(ArduinoSTK sp) { if (sp.connectAP()) { try { byte[] test = sp.download(1024); Console.WriteLine("Download OK!!"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } else { Console.WriteLine("Failed connect"); } //System.Threading.Thread.Sleep(2000); }
private void BUT_ReadIOB_Click(object sender, EventArgs e) { toolStripProgressBar1.Style = ProgressBarStyle.Continuous; this.toolStripStatusLabel1.Text = ""; bool fail = false; ArduinoSTK sp; try { if (comPort.IsOpen) comPort.Close(); sp = new ArduinoSTK(); sp.PortName = CMB_ComPort.Text; sp.BaudRate = 57600; sp.DtrEnable = true; sp.Open(); } catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (sp.connectAP()) { try { eeprom = sp.download(1024); } catch (Exception ex) { fail = true; MessageBox.Show(ex.Message); } } else { MessageBox.Show("Failed to talk to bootloader"); fail = true; } sp.Close(); // txtLEFT.Text = eeprom[128]; int startmbind = 64; // Reading EEPROM values and put them to their right locations. if (!fail) { for (int pos = 0; pos < 16 ;pos++) { patterns[pos] = (ushort)((ushort)(eeprom[pos*2] << 8) + eeprom[pos*2 + 1]); Control[] ctls = this.Controls.Find("pattern" + (pos+1), true); if (ctls.Length > 0) { ((Pattern)ctls[0]).Value = patterns[pos]; ((Pattern)ctls[0]).FlightMode = (ushort)(eeprom[startmbind + pos * 2]); } } // Single values numLEFT.Value = eeprom[128]; numRIGHT.Value = eeprom[129]; numFRONT.Value = eeprom[130]; numREAR.Value = eeprom[131]; BAlarm_Percentage.Text = Convert.ToString(eeprom[152]); if (eeprom[140] == 1) CB_FrSky.Checked = true; if(eeprom[1000] >= 10) { BUT_WriteIOB.Enabled = true; LBL_NOTIFY.Visible = false; hasRead = true; } } printeeprom(); if (!fail) MessageBox.Show("Download settings...\n Done!"); if (eeprom[1012] < 5) { BUT_WriteIOB.Enabled = false; MessageBox.Show( "Please update firmware on\n" + "your jD-IOBoard. Version\n" + "needs to be at least v0.5\n\n" + "Click \"Download Firmware\" button\n" + "on General tab!!" , "Outdated Firmware", MessageBoxButtons.OK, MessageBoxIcon.Information); } }