public bool AddArduinoConfigObject(ArduinoConfigObject o, bool overwrite = true) { if (ArduinoConfigs.ContainsKey(o.DeviceId)) { if (overwrite) { ArduinoConfigs[o.DeviceId] = o; Save(); return(true); } return(false); } // no duplication, just add it ArduinoConfigs.Add(o.DeviceId, o); Save(); return(true); }
private void arduinoConfigureButton_Click(object sender, EventArgs e) { using (var form = new ArduinoConfigForm(currentArduinoConfig)) { switch (form.ShowDialog()) { case DialogResult.OK: arduinoConfiguredBox.Checked = true; configLibrary.AddArduinoConfigObject(form.ArduinoConfig); currentArduinoConfig = form.ArduinoConfig; break; case DialogResult.Cancel: break; } } }
private void arduinoSerialPortCombo_SelectedIndexChanged(object sender, EventArgs e) { if (arduinoSerialPortCombo.Text != "None found") { arduinoSerialPortCombo.Enabled = false; arduinoConfigureButton.Enabled = false; var port = new SerialPort(arduinoSerialPortCombo.Text, 115200); var waitdialog = new PleaseWait("Checking for Arduino on " + arduinoSerialPortCombo.Text); new Thread(() => waitdialog.ShowDialog()).Start(); try { port.Open(); } catch { this.Invoke((Action) delegate { waitdialog.Close(); }); MessageBox.Show("Communication error", "Unable to open port " + arduinoSerialPortCombo.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); arduinoFWverBox.Text = ""; return; } port.Write("?"); Thread.Sleep(1000); var fw = port.ReadExisting(); port.Close(); if (fw.Split(' ').FirstOrDefault() != "WINGMAN") { this.Invoke((Action) delegate { waitdialog.Close(); }); arduinoSerialPortCombo.Enabled = true; MessageBox.Show( "Error communicating with Arduino", "The device on " + arduinoSerialPortCombo.Text + " has not been recognised. Please check it is running WingMan firmware.", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } arduinoFWverBox.Text = fw; var arduinoVersionNo = ""; var atoms = fw.Split(' ').ToArray(); foreach (var i in atoms) { var s = i.Split(':'); if (s.Length == 1) { // this is just the name continue; } if (s.Length != 2) { throw new Exception("Error parsing Arduino firmware data"); } if (s[0] == "F") { arduinoFadersCountBox.Text = s[1]; } // number of faders if (s[0] == "B") { arduinoButtonsCountBox.Text = s[1]; } // number of buttons if (s[0] == "P") { arduinoHwInfoBox.Text = s[1]; } // hardware platform if (s[0] == "I") { arduinoIdBox.Text = s[1]; } // device ID if (s[0] == "V") { arduinoVersionNo = s[1]; } // version number } if (configLibrary.ArduinoConfigs.ContainsKey(arduinoIdBox.Text)) { var libraryArduinoConfig = configLibrary.ArduinoConfigs[arduinoIdBox.Text]; if (libraryArduinoConfig.Buttons == int.Parse(arduinoButtonsCountBox.Text) && libraryArduinoConfig.Faders == int.Parse(arduinoFadersCountBox.Text) && libraryArduinoConfig.Version == arduinoVersionNo) { currentArduinoConfig = libraryArduinoConfig; arduinoConfiguredBox.Checked = true; } else { switch ( MessageBox.Show( "Another Arduino with the same ID has been found in the configuration library but with different parameters. Do you want to overwrite the existing entry? (you will lose and existing mappings for this device ID)", "Duplicate ID found in library", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)) { case DialogResult.Cancel: MessageBox.Show( "Please ensure every Arduino has a unique ID. The software will now quit.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); break; case DialogResult.OK: currentArduinoConfig = new ArduinoConfigObject(arduinoIdBox.Text, arduinoHwInfoBox.Text, int.Parse(arduinoFadersCountBox.Text), int.Parse(arduinoButtonsCountBox.Text), arduinoVersionNo); arduinoConfiguredBox.Checked = false; break; } } } else { currentArduinoConfig = new ArduinoConfigObject(arduinoIdBox.Text, arduinoHwInfoBox.Text, int.Parse(arduinoFadersCountBox.Text), int.Parse(arduinoButtonsCountBox.Text), arduinoVersionNo); arduinoConfiguredBox.Checked = false; } arduinoSerialPortCombo.Enabled = true; arduinoConfigureButton.Enabled = true; this.Invoke((Action) delegate { waitdialog.Close(); }); } else { arduinoConfigureButton.Enabled = false; arduinoFWverBox.Text = ""; arduinoButtonsCountBox.Text = ""; arduinoFadersCountBox.Text = ""; } }