public string doCommand(ICommsSerial comPort, string cmd, bool multiLineResponce = false, int level = 0) { if (!comPort.IsOpen) { return(""); } comPort.DiscardInBuffer(); comLog("Doing Command " + cmd, 1); comPort.Write(cmd + "\r\n"); comPort.ReadTimeout = 1000; // command echo var cmdecho = Serial_ReadLine(comPort); if (cmdecho.Contains(cmd)) { var value = ""; if (multiLineResponce) { DateTime deadline = DateTime.Now.AddMilliseconds(1000); while (comPort.BytesToRead > 0 || DateTime.Now < deadline) { try { value = value + trimResponse(Serial_ReadLine(comPort)); } catch { value = value + trimResponse(comPort.ReadExisting()); } } } else { value = trimResponse(Serial_ReadLine(comPort)); if (value == "" && level == 0) { return(trimResponse(doCommand(comPort, cmd, multiLineResponce, 1))); } } char[] ends = { '\r', '\n' }; comLog(value.TrimEnd(ends), 1); History.AppendText(cmd.Trim() + " " + value.TrimEnd(ends) + Environment.NewLine); return(value); } comPort.DiscardInBuffer(); // try again if (level == 0) { return(trimResponse(doCommand(comPort, cmd, multiLineResponce, 1))); } return(""); }
public string doCommand(ICommsSerial comPort, string cmd, bool multiLineResponce = false, int level = 0) { if (!comPort.IsOpen) { return(""); } comPort.DiscardInBuffer(); lbl_status.Text = "Doing Command " + cmd; log.Info("Doing Command " + cmd); comPort.Write(cmd + "\r\n"); comPort.ReadTimeout = 1000; // command echo var cmdecho = Serial_ReadLine(comPort); if (cmdecho.Contains(cmd)) { var value = ""; if (multiLineResponce) { DateTime deadline = DateTime.Now.AddMilliseconds(1000); while (comPort.BytesToRead > 0 || DateTime.Now < deadline) { try { value = value + Serial_ReadLine(comPort); } catch { value = value + comPort.ReadExisting(); } } } else { value = Serial_ReadLine(comPort); if (value == "" && level == 0) { return(doCommand(comPort, cmd, multiLineResponce, 1)); } } log.Info(value.Replace('\0', ' ')); return(value); } comPort.DiscardInBuffer(); // try again if (level == 0) { return(doCommand(comPort, cmd, multiLineResponce, 1)); } return(""); }
public string doCommand(ICommsSerial comPort, string cmd, int level = 0) { if (!comPort.IsOpen) return ""; comPort.ReadTimeout = 1000; // setup to known state comPort.Write("\r\n"); // alow some time to gather thoughts Sleep(100); // ignore all existing data comPort.DiscardInBuffer(); lbl_status.Text = "Doing Command " + cmd; log.Info("Doing Command " + cmd); // write command comPort.Write(cmd + "\r\n"); // read echoed line or existing data string temp; try { temp = Serial_ReadLine(comPort); } catch { temp = comPort.ReadExisting(); } log.Info("cmd " + cmd + " echo " + temp); // delay for command Sleep(500); // get responce string ans = ""; while (comPort.BytesToRead > 0) { try { ans = ans + Serial_ReadLine(comPort) + "\n"; } catch { ans = ans + comPort.ReadExisting() + "\n"; } Sleep(50); if (ans.Length > 500) { break; } } log.Info("responce " + level + " " + ans.Replace('\0', ' ')); Regex pattern = new Regex(@"^\[([0-9+])\]\s+",RegexOptions.Multiline); if (pattern.IsMatch(ans)) { Match mat = pattern.Match(ans); ans = pattern.Replace(ans,""); } // try again if (ans == "" && level == 0) return doCommand(comPort, cmd, 1); return ans; }
public void identify() { port.DiscardInBuffer(); //Console.WriteLine("0 " + DateTime.Now.Millisecond); // make sure we are in sync before starting self.__sync(); //Console.WriteLine("1 "+DateTime.Now.Millisecond); //get the bootloader protocol ID first self.bl_rev = self.__getInfo(Info.BL_REV); // Console.WriteLine("2 " + DateTime.Now.Millisecond); if ((bl_rev < (int)BL_REV_MIN) || (bl_rev > (int)BL_REV_MAX)) { throw new Exception("Bootloader protocol mismatch"); } // revert to default write timeout port.WriteTimeout = 500; self.board_type = self.__getInfo(Info.BOARD_ID); self.board_rev = self.__getInfo(Info.BOARD_REV); self.fw_maxsize = self.__getInfo(Info.FLASH_SIZE); }
public string doCommand(ICommsSerial comPort, string cmd, int level = 0) { if (!comPort.IsOpen) return ""; comPort.ReadTimeout = 1000; // setup to known state comPort.Write("\r\n"); // alow some time to gather thoughts Sleep(100); // ignore all existing data comPort.DiscardInBuffer(); lbl_status.Text = "Doing Command " + cmd; log.Info("Doing Command " + cmd); // write command comPort.Write(cmd + "\r\n"); // read echoed line or existing data string temp; try { temp = Serial_ReadLine(comPort); } catch { temp = comPort.ReadExisting(); } log.Info("cmd " + cmd + " echo " + temp); // delay for command Sleep(500); // get responce string ans = ""; while (comPort.BytesToRead > 0) { try { ans = ans + Serial_ReadLine(comPort) + "\n"; } catch { ans = ans + comPort.ReadExisting() + "\n"; } Sleep(50); if (ans.Length > 500) { break; } } log.Info("responce " + level + " " + ans.Replace('\0', ' ')); Regex pattern = new Regex(@"^\[([0-9+])\]\s+",RegexOptions.Multiline); if (pattern.IsMatch(ans)) { Match mat = pattern.Match(ans); ans = pattern.Replace(ans,""); } // try again if (ans == "" && level == 0) return doCommand(comPort, cmd, 1); return ans; }
/// <summary> /// Requests a sync reply. /// </summary> /// <returns> /// True if in sync, false otherwise. /// </returns> private bool cmdSync() { port.DiscardInBuffer(); send(Code.GET_SYNC); send(Code.EOC); try { getSync(); } catch { return(false); } return(true); }
public bool doConnect(ICommsSerial comPort) { try { Console.WriteLine("doConnect"); // setup a known enviroment comPort.Write("ATO\r\n"); // wait Sleep(1100, comPort); comPort.DiscardInBuffer(); // send config string comPort.Write("+++"); Sleep(1100, comPort); // check for config response "OK" log.Info("Connect btr " + comPort.BytesToRead + " baud " + comPort.BaudRate); // allow time for data/response byte[] buffer = new byte[20]; int len = comPort.Read(buffer, 0, buffer.Length); string conn = ASCIIEncoding.ASCII.GetString(buffer, 0, len); log.Info("Connect first response " + conn.Replace('\0', ' ') + " " + conn.Length); if (conn.Contains("OK")) { //return true; } else { // cleanup incase we are already in cmd mode comPort.Write("\r\n"); } doCommand(comPort, "AT&T"); string version = doCommand(comPort, "ATI"); log.Info("Connect Version: " + version.Trim() + "\n"); Regex regex = new Regex(@"SiK\s+(.*)\s+on\s+(.*)"); if (regex.IsMatch(version)) { return(true); } return(false); } catch { return(false); } }
public void identify() { port.DiscardInBuffer(); //Console.WriteLine("0 " + DateTime.Now.Millisecond); // make sure we are in sync before starting self.__sync(); //Console.WriteLine("1 "+DateTime.Now.Millisecond); //get the bootloader protocol ID first self.bl_rev = self.__getInfo(Info.BL_REV); // Console.WriteLine("2 " + DateTime.Now.Millisecond); if ((bl_rev < (int)BL_REV_MIN) || (bl_rev > (int)BL_REV_MAX)) { throw new Exception("Bootloader protocol mismatch"); } print("Got BL Info - changing timeout"); // revert to default write timeout port.WriteTimeout = 500; self.board_type = self.__getInfo(Info.BOARD_ID); self.board_rev = self.__getInfo(Info.BOARD_REV); self.fw_maxsize = self.__getInfo(Info.FLASH_SIZE); if (bl_rev >= 5) { try { self.chip = self.__getCHIP(); self.chip_desc = self.__getCHIPDES(); } catch { __sync(); } } if (bl_rev >= 5) { try { self.extf_maxsize = __getInfo(Info.EXTF_SIZE); } catch { __sync(); } } Console.WriteLine("Found board type {0} brdrev {1} blrev {2} fwmax {3} extf {7} chip {5:X} chipdes {6} on {4}", board_type, board_rev, bl_rev, fw_maxsize, port, chip, chip_desc, extf_maxsize); }
public bool doConnect(ICommsSerial comPort) { try { // clear buffer comPort.DiscardInBuffer(); // setup a known enviroment comPort.Write("\r\n"); // wait Sleep(1100); // send config string comPort.Write("+++"); // wait Sleep(1100); // check for config responce "OK" log.Info("Connect btr " + comPort.BytesToRead + " baud " + comPort.BaudRate); string conn = comPort.ReadExisting(); log.Info("Connect first responce " + conn.Replace('\0', ' ') + " " + conn.Length); if (conn.Contains("OK")) { //return true; } else { // cleanup incase we are already in cmd mode comPort.Write("\r\n"); } doCommand(comPort, "AT&T"); string version = doCommand(comPort, "ATI"); log.Info("Connect Version: " + version.Trim() + "\n"); Regex regex = new Regex(@"SiK\s+(.*)\s+on\s+(.*)"); if (regex.IsMatch(version)) { return(true); } return(false); } catch { return(false); } }
private void Terminal_Load(object sender, EventArgs e) { try { MainV2.comPort.giveComport = true; comPort = MainV2.comPort.BaseStream; if (comPort.IsOpen) comPort.Close(); comPort.ReadBufferSize = 1024 * 1024; comPort.PortName = MainV2.comPortName; comPort.BaudRate = int.Parse(MainV2._connectionControl.CMB_baudrate.Text); comPort.Open(); comPort.toggleDTR(); comPort.DiscardInBuffer(); Console.WriteLine("Terminal_Load"); System.Threading.Thread t11 = new System.Threading.Thread(delegate() { threadrun = true; Console.WriteLine("Terminal thread start"); // 10 sec waitandsleep(10000); Console.WriteLine("Terminal thread 1"); // 100 ms readandsleep(100); Console.WriteLine("Terminal thread 2"); try { if (!inlogview) comPort.Write("\n\n\n"); // 1 secs if (!inlogview) readandsleep(1000); if (!inlogview) comPort.Write("\r\r\r?\r"); } catch (Exception ex) { Console.WriteLine("Terminal thread 3 " + ex.ToString()); threadrun = false; return; } Console.WriteLine("Terminal thread 3"); while (threadrun) { try { System.Threading.Thread.Sleep(10); if (inlogview) continue; if (!comPort.IsOpen) break; if (comPort.BytesToRead > 0) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { Console.WriteLine("Terminal thread 4 " + ex.ToString()); } } threadrun = false; try { comPort.DtrEnable = false; } catch { } try { Console.WriteLine("term thread close"); comPort.Close(); } catch { } Console.WriteLine("Comport thread close"); }); t11.IsBackground = true; t11.Name = "Terminal serial thread"; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); TXT_terminal.AppendText("Opened com port\r\n"); inputStartPos = TXT_terminal.SelectionStart; } catch (Exception) { TXT_terminal.AppendText("Cant open serial port\r\n"); return; } TXT_terminal.Focus(); }
private void Log_Load(object sender, EventArgs e) { status = serialstatus.Connecting; comPort = GCSViews.Terminal.comPort; try { Console.WriteLine("Log_load " + comPort.IsOpen); if (!comPort.IsOpen) comPort.Open(); //Console.WriteLine("Log dtr"); //comPort.toggleDTR(); Console.WriteLine("Log discard"); comPort.DiscardInBuffer(); Console.WriteLine("Log w&sleep"); try { // try provoke a response comPort.Write("\n\n?\r\n\n"); } catch { } // 10 sec waitandsleep(10000); } catch (Exception ex) { log.Error("Error opening comport", ex); CustomMessageBox.Show("Error opening comport"); return; } var t11 = new System.Threading.Thread(delegate() { var start = DateTime.Now; threadrun = true; if (comPort.IsOpen) readandsleep(100); try { if (comPort.IsOpen) comPort.Write("\n\n\n\nexit\r\nlogs\r\n"); // more in "connecting" } catch { } while (threadrun) { try { updateDisplay(); System.Threading.Thread.Sleep(1); if (!comPort.IsOpen) break; while (comPort.BytesToRead >= 4) { comPort_DataReceived((object) null, (SerialDataReceivedEventArgs) null); } } catch (Exception ex) { log.Error("crash in comport reader " + ex); } // cant exit unless told to } log.Info("Comport thread close"); }) {Name = "comport reader", IsBackground = true}; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); }
private void start_Terminal(bool px4) { setcomport(); try { if (MainV2.comPort != null && MainV2.comPort.BaseStream != null && MainV2.comPort.BaseStream.IsOpen) { MainV2.comPort.BaseStream.Close(); } if (comPort.IsOpen) { Console.WriteLine("Terminal Start - Close Port"); threadrun = false; // if (DialogResult.Cancel == CustomMessageBox.Show("The port is open\n Continue?", "Continue", MessageBoxButtons.YesNo)) { // return; } comPort.Close(); // allow things to cleanup System.Threading.Thread.Sleep(400); } comPort.ReadBufferSize = 1024 * 1024 * 4; comPort.PortName = MainV2.comPortName; // test moving baud rate line comPort.BaudRate = int.Parse(MainV2._connectionControl.CMB_baudrate.Text); if (px4) { TXT_terminal.AppendText("Rebooting " + MainV2.comPortName + " at " + comPort.BaudRate + "\n"); // keep it local using (MAVLinkInterface mine = new MAVLinkInterface()) { mine.BaseStream.PortName = MainV2.comPortName; mine.BaseStream.BaudRate = comPort.BaudRate; mine.giveComport = true; mine.BaseStream.Open(); // check if we are a mavlink stream byte[] buffer = mine.readPacket(); if (buffer.Length > 0) { log.Info("got packet - sending reboot via mavlink"); TXT_terminal.AppendText("Via Mavlink\n"); mine.doReboot(false); try { mine.BaseStream.Close(); } catch { } } else { log.Info("no packet - sending reboot via console"); TXT_terminal.AppendText("Via Console\n"); try { mine.BaseStream.Write("reboot\r"); mine.BaseStream.Write("exit\rreboot\r"); } catch { } try { mine.BaseStream.Close(); } catch { } } } TXT_terminal.AppendText("Waiting for reboot\n"); // wait 7 seconds for px4 reboot log.Info("waiting for reboot"); DateTime deadline = DateTime.Now.AddSeconds(9); while (DateTime.Now < deadline) { System.Threading.Thread.Sleep(500); Application.DoEvents(); } int a = 0; while (a < 5) { try { if (!comPort.IsOpen) { comPort.Open(); } } catch { } System.Threading.Thread.Sleep(200); a++; } } else { log.Info("About to open " + comPort.PortName); comPort.Open(); log.Info("toggle dtr"); comPort.toggleDTR(); } try { comPort.DiscardInBuffer(); } catch { } Console.WriteLine("Terminal_Load run " + threadrun + " " + comPort.IsOpen); BUT_disconnect.Enabled = true; System.Threading.Thread t11 = new System.Threading.Thread(delegate() { threadrun = true; Console.WriteLine("Terminal thread start run run " + threadrun + " " + comPort.IsOpen); try { comPort.Write("\r"); } catch { } // 10 sec waitandsleep(10000); Console.WriteLine("Terminal thread 1 run " + threadrun + " " + comPort.IsOpen); // 100 ms readandsleep(100); Console.WriteLine("Terminal thread 2 run " + threadrun + " " + comPort.IsOpen); try { if (!inlogview && comPort.IsOpen) { comPort.Write("\n\n\n"); } // 1 secs if (!inlogview && comPort.IsOpen) { readandsleep(1000); } if (!inlogview && comPort.IsOpen) { comPort.Write("\r\r\r?\r"); } } catch (Exception ex) { Console.WriteLine("Terminal thread 3 " + ex.ToString()); ChangeConnectStatus(false); threadrun = false; return; } Console.WriteLine("Terminal thread 3 run " + threadrun + " " + comPort.IsOpen); while (threadrun) { try { System.Threading.Thread.Sleep(10); if (!threadrun) { break; } if (this.Disposing) { break; } if (inlogview) { continue; } if (!comPort.IsOpen) { Console.WriteLine("Comport Closed"); ChangeConnectStatus(false); break; } if (comPort.BytesToRead > 0) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { Console.WriteLine("Terminal thread 4 " + ex.ToString()); } } threadrun = false; try { comPort.DtrEnable = false; } catch { } try { Console.WriteLine("term thread close run " + threadrun + " " + comPort.IsOpen); ChangeConnectStatus(false); comPort.Close(); } catch { } Console.WriteLine("Comport thread close run " + threadrun); }); t11.IsBackground = true; t11.Name = "Terminal serial thread"; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); if (this.IsDisposed || this.Disposing) { return; } TXT_terminal.AppendText("Opened com port\r\n"); inputStartPos = TXT_terminal.SelectionStart; } catch (Exception ex) { log.Error(ex); TXT_terminal.AppendText("Cant open serial port\r\n"); return; } TXT_terminal.Focus(); }
void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { while (comPort.BytesToRead > 0 && threadrun) { updateDisplay(); string line = ""; comPort.ReadTimeout = 500; try { line = comPort.ReadLine(); //readline(comPort); if (!line.Contains("\n")) { line = line + "\n"; } } catch { line = comPort.ReadExisting(); //byte[] data = readline(comPort); //line = Encoding.ASCII.GetString(data, 0, data.Length); } receivedbytes += line.Length; //string line = Encoding.ASCII.GetString(data, 0, data.Length); switch (status) { case serialstatus.Connecting: if (line.Contains("ENTER") || line.Contains("GROUND START") || line.Contains("reset to FLY") || line.Contains("interactive setup") || line.Contains("CLI") || line.Contains("Ardu")) { try { System.Threading.Thread.Sleep(200); comPort.Write("\n\n\n\n"); } catch { } System.Threading.Thread.Sleep(500); comPort.Write("logs\r"); status = serialstatus.Done; } break; case serialstatus.Closefile: sw.Close(); TextReader tr = new StreamReader(logfile); this.Invoke((System.Windows.Forms.MethodInvoker) delegate() { TXT_seriallog.AppendText("Creating KML for " + logfile); }); while (tr.Peek() != -1) { processLine(tr.ReadLine()); } tr.Close(); try { writeKML(logfile + ".kml"); } catch { } // usualy invalid lat long error status = serialstatus.Done; comPort.DiscardInBuffer(); break; case serialstatus.Createfile: receivedbytes = 0; Directory.CreateDirectory(MainV2.LogDir); logfile = MainV2.LogDir + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm") + " " + currentlog + ".log"; sw = new StreamWriter(logfile); status = serialstatus.Waiting; lock (thisLock) { this.Invoke((System.Windows.Forms.MethodInvoker) delegate() { TXT_seriallog.Clear(); }); } //if (line.Contains("Dumping Log")) { status = serialstatus.Reading; } break; case serialstatus.Done: // // if (line.Contains("start") && line.Contains("end")) { Regex regex2 = new Regex(@"^Log ([0-9]+)[,\s]", RegexOptions.IgnoreCase); if (regex2.IsMatch(line)) { MatchCollection matchs = regex2.Matches(line); logcount = int.Parse(matchs[0].Groups[1].Value); genchkcombo(logcount); //status = serialstatus.Done; } } if (line.Contains("No logs")) { status = serialstatus.Done; } break; case serialstatus.Reading: if (line.Contains("packets read") || line.Contains("Done") || line.Contains("logs enabled")) { status = serialstatus.Closefile; Console.Write("CloseFile: " + line); break; } sw.Write(line); continue; case serialstatus.Waiting: if (line.Contains("Dumping Log") || line.Contains("GPS:") || line.Contains("NTUN:") || line.Contains("CTUN:") || line.Contains("PM:")) { status = serialstatus.Reading; Console.Write("Reading: " + line); } break; } lock (thisLock) { this.BeginInvoke((MethodInvoker) delegate() { Console.Write(line); TXT_seriallog.AppendText(line.Replace((char)0x0, ' ')); // auto scroll if (TXT_seriallog.TextLength >= 10000) { TXT_seriallog.Text = TXT_seriallog.Text.Substring(TXT_seriallog.TextLength / 2); } TXT_seriallog.SelectionStart = TXT_seriallog.Text.Length; TXT_seriallog.ScrollToCaret(); TXT_seriallog.Refresh(); }); } } //log.Info("exit while"); } catch (Exception ex) { CustomMessageBox.Show("Error reading data" + ex.ToString()); } }
private void Log_Load(object sender, EventArgs e) { if (MainV2.config["log_isarducopter"] != null) { CHK_arducopter.Checked = bool.Parse(MainV2.config["log_isarducopter"].ToString()); CHK_arduplane.Checked = bool.Parse(MainV2.config["log_isarduplane"].ToString()); CHK_ardurover.Checked = bool.Parse(MainV2.config["log_isardurover"].ToString()); } status = serialstatus.Connecting; MainV2.comPort.giveComport = true; comPort = MainV2.comPort.BaseStream; comPort.DtrEnable = false; comPort.RtsEnable = false; if (comPort.IsOpen) { comPort.Close(); } try { Console.WriteLine("Log_load " + comPort.IsOpen); // 4mb comPort.ReadBufferSize = 1024 * 1024 * 4; if (!comPort.IsOpen) { comPort.Open(); } Console.WriteLine("Log dtr"); comPort.toggleDTR(); Console.WriteLine("Log discard"); comPort.DiscardInBuffer(); Console.WriteLine("Log w&sleep"); try { // try provoke a responce comPort.Write("\n\n?\r\n\n"); } catch { } // 10 sec waitandsleep(10000); } catch (Exception ex) { log.Error("Error opening comport", ex); CustomMessageBox.Show("Error opening comport"); } var t11 = new System.Threading.Thread(delegate() { var start = DateTime.Now; threadrun = true; readandsleep(100); try { comPort.Write("\n\n\n\nexit\r\nlogs\r\n"); // more in "connecting" } catch { } while (threadrun) { try { updateDisplay(); System.Threading.Thread.Sleep(1); if (!comPort.IsOpen) { break; } while (comPort.BytesToRead >= 4) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { log.Error("crash in comport reader " + ex); } // cant exit unless told to } log.Info("Comport thread close"); }) { Name = "comport reader", IsBackground = true }; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); }
public string doCommand(ICommsSerial comPort, string cmd, bool multiLineResponce = false, int level = 0) { if (!comPort.IsOpen) return ""; comPort.DiscardInBuffer(); lbl_status.Text = "Doing Command " + cmd; log.Info("Doing Command " + cmd); comPort.Write(cmd + "\r\n"); comPort.ReadTimeout = 1000; // command echo var cmdecho = Serial_ReadLine(comPort); if (cmdecho.Contains(cmd)) { var value = ""; if (multiLineResponce) { DateTime deadline = DateTime.Now.AddMilliseconds(1000); while (comPort.BytesToRead > 0 || DateTime.Now < deadline) { try { value = value + Serial_ReadLine(comPort); } catch { value = value + comPort.ReadExisting(); } } } else { value = Serial_ReadLine(comPort); if (value == "" && level == 0) { return doCommand(comPort, cmd, multiLineResponce, 1); } } log.Info(value.Replace('\0', ' ')); return value; } comPort.DiscardInBuffer(); // try again if (level == 0) return doCommand(comPort, cmd, multiLineResponce, 1); return ""; }
private void Log_Load(object sender, EventArgs e) { status = serialstatus.Connecting; comPort = GCSViews.Terminal.comPort; try { Console.WriteLine("Log_load " + comPort.IsOpen); if (!comPort.IsOpen) { comPort.Open(); } //Console.WriteLine("Log dtr"); //comPort.toggleDTR(); Console.WriteLine("Log discard"); comPort.DiscardInBuffer(); Console.WriteLine("Log w&sleep"); try { // try provoke a response comPort.Write("\n\n?\r\n\n"); } catch { } // 10 sec waitandsleep(10000); } catch (Exception ex) { log.Error("Error opening comport", ex); CustomMessageBox.Show("Error opening comport"); return; } var t11 = new System.Threading.Thread(delegate() { var start = DateTime.Now; threadrun = true; if (comPort.IsOpen) { readandsleep(100); } try { if (comPort.IsOpen) { comPort.Write("\n\n\n\nexit\r\nlogs\r\n"); // more in "connecting" } } catch { } while (threadrun) { try { updateDisplay(); System.Threading.Thread.Sleep(1); if (!comPort.IsOpen) { break; } while (comPort.BytesToRead >= 4) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { log.Error("crash in comport reader " + ex); } // cant exit unless told to } log.Info("Comport thread close"); }) { Name = "comport reader", IsBackground = true }; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); }
private void Log_Load(object sender, EventArgs e) { status = serialstatus.Connecting; comPort = MainV2.comPort.BaseStream; try { comPort.toggleDTR(); comPort.DiscardInBuffer(); // 10 sec waitandsleep(10000); } catch (Exception ex) { log.Error("Error opening comport", ex); CustomMessageBox.Show("Error opening comport"); } var t11 = new System.Threading.Thread(delegate() { var start = DateTime.Now; threadrun = true; readandsleep(100); try { comPort.Write("\n\n\n\n"); // more in "connecting" } catch { } while (threadrun) { try { updateDisplay(); System.Threading.Thread.Sleep(10); if (!comPort.IsOpen) { break; } while (comPort.BytesToRead >= 4) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { log.Error("crash in comport reader " + ex); } // cant exit unless told to } log.Info("Comport thread close"); }) { Name = "comport reader" }; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); }
private void Log_Load(object sender, EventArgs e) { if (MainV2.config["log_isarducopter"] != null) { CHK_arducopter.Checked = bool.Parse(MainV2.config["log_isarducopter"].ToString()); CHK_arduplane.Checked = bool.Parse(MainV2.config["log_isarduplane"].ToString()); CHK_ardurover.Checked = bool.Parse(MainV2.config["log_isardurover"].ToString()); } status = serialstatus.Connecting; MainV2.comPort.giveComport = true; comPort = MainV2.comPort.BaseStream; comPort.DtrEnable = false; comPort.RtsEnable = false; try { Console.WriteLine("Log_load " + comPort.IsOpen); if (!comPort.IsOpen) comPort.Open(); Console.WriteLine("Log dtr"); comPort.toggleDTR(); Console.WriteLine("Log discard"); comPort.DiscardInBuffer(); Console.WriteLine("Log w&sleep"); try { // try provoke a responce comPort.Write("\n\n?\r\n\n"); } catch { } // 10 sec waitandsleep(10000); } catch (Exception ex) { log.Error("Error opening comport", ex); CustomMessageBox.Show("Error opening comport"); } var t11 = new System.Threading.Thread(delegate() { var start = DateTime.Now; threadrun = true; readandsleep(100); try { comPort.Write("\n\n\n\nexit\r\nlogs\r\n"); // more in "connecting" } catch { } while (threadrun) { try { updateDisplay(); System.Threading.Thread.Sleep(10); if (!comPort.IsOpen) break; while (comPort.BytesToRead >= 4) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { log.Error("crash in comport reader " + ex); } // cant exit unless told to } log.Info("Comport thread close"); }) {Name = "comport reader"}; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); }
public bool doConnect(ICommsSerial comPort) { try { Console.WriteLine("doConnect"); // setup a known enviroment comPort.Write("ATO\r\n"); // wait Sleep(1100, comPort); comPort.DiscardInBuffer(); // send config string comPort.Write("+++"); Sleep(1100,comPort); // check for config response "OK" log.Info("Connect btr " + comPort.BytesToRead + " baud " + comPort.BaudRate); // allow time for data/response byte[] buffer = new byte[20]; int len = comPort.Read(buffer, 0, buffer.Length); string conn = ASCIIEncoding.ASCII.GetString(buffer, 0, len); log.Info("Connect first response " + conn.Replace('\0', ' ') + " " + conn.Length); if (conn.Contains("OK")) { //return true; } else { // cleanup incase we are already in cmd mode comPort.Write("\r\n"); } doCommand(comPort, "AT&T"); string version = doCommand(comPort, "ATI"); log.Info("Connect Version: " + version.Trim() + "\n"); Regex regex = new Regex(@"SiK\s+(.*)\s+on\s+(.*)"); if (regex.IsMatch(version)) { return true; } return false; } catch { return false; } }
private void start_Terminal(bool px4) { setcomport(); try { if (MainV2.comPort != null && MainV2.comPort.BaseStream != null && MainV2.comPort.BaseStream.IsOpen) { MainV2.comPort.BaseStream.Close(); } if (comPort.IsOpen) { Console.WriteLine("Terminal Start - Close Port"); threadrun = false; // if (DialogResult.Cancel == CustomMessageBox.Show("The port is open\n Continue?", "Continue", MessageBoxButtons.YesNo)) { // return; } comPort.Close(); // allow things to cleanup Thread.Sleep(400); } comPort.ReadBufferSize = 1024 * 1024 * 4; comPort.PortName = MainV2.comPortName; // test moving baud rate line comPort.BaudRate = int.Parse(MainV2._connectionControl.CMB_baudrate.Text); if (px4) { TXT_terminal.AppendText("Rebooting " + MainV2.comPortName + " at " + comPort.BaudRate + "\n"); // keep it local using (var mine = new MAVLinkInterface()) { mine.BaseStream.PortName = MainV2.comPortName; mine.BaseStream.BaudRate = comPort.BaudRate; mine.giveComport = true; mine.BaseStream.Open(); // check if we are a mavlink stream var buffer = mine.readPacket(); if (buffer.Length > 0) { log.Info("got packet - sending reboot via mavlink"); TXT_terminal.AppendText("Via Mavlink\n"); mine.doReboot(false); try { mine.BaseStream.Close(); } catch { } } else { log.Info("no packet - sending reboot via console"); TXT_terminal.AppendText("Via Console\n"); try { mine.BaseStream.Write("reboot\r"); mine.BaseStream.Write("exit\rreboot\r"); } catch { } try { mine.BaseStream.Close(); } catch { } } } TXT_terminal.AppendText("Waiting for reboot\n"); // wait 7 seconds for px4 reboot log.Info("waiting for reboot"); var deadline = DateTime.Now.AddSeconds(9); while (DateTime.Now < deadline) { Thread.Sleep(500); Application.DoEvents(); } var a = 0; while (a < 5) { try { if (!comPort.IsOpen) { comPort.Open(); } } catch { } Thread.Sleep(200); a++; } } else { log.Info("About to open " + comPort.PortName); comPort.Open(); log.Info("toggle dtr"); comPort.toggleDTR(); } try { comPort.DiscardInBuffer(); } catch { } startreadthread(); } catch (Exception ex) { log.Error(ex); TXT_terminal.AppendText("Cant open serial port\r\n"); return; } }
private void Log_Load(object sender, EventArgs e) { status = serialstatus.Connecting; comPort = MainV2.comPort.BaseStream; try { comPort.toggleDTR(); comPort.DiscardInBuffer(); // 10 sec waitandsleep(10000); } catch (Exception ex) { log.Error("Error opening comport", ex); CustomMessageBox.Show("Error opening comport"); } var t11 = new System.Threading.Thread(delegate() { var start = DateTime.Now; threadrun = true; readandsleep(100); try { comPort.Write("\n\n\n\n"); // more in "connecting" } catch { } while (threadrun) { try { updateDisplay(); System.Threading.Thread.Sleep(10); if (!comPort.IsOpen) break; while (comPort.BytesToRead >= 4) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { log.Error("crash in comport reader " + ex); } // cant exit unless told to } log.Info("Comport thread close"); }) {Name = "comport reader"}; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); }
private void Terminal_Load(object sender, EventArgs e) { try { MainV2.comPort.giveComport = true; comPort = MainV2.comPort.BaseStream; if (comPort.IsOpen) { comPort.Close(); } comPort.ReadBufferSize = 1024 * 1024; comPort.PortName = MainV2.comPortName; comPort.BaudRate = int.Parse(MainV2._connectionControl.CMB_baudrate.Text); comPort.Open(); comPort.toggleDTR(); MainV2.comPort.doReboot(); comPort.DiscardInBuffer(); Console.WriteLine("Terminal_Load"); System.Threading.Thread t11 = new System.Threading.Thread(delegate() { threadrun = true; Console.WriteLine("Terminal thread start"); // 10 sec waitandsleep(10000); Console.WriteLine("Terminal thread 1"); // 100 ms readandsleep(100); Console.WriteLine("Terminal thread 2"); try { if (!inlogview) { comPort.Write("\n\n\n"); } // 1 secs if (!inlogview) { readandsleep(1000); } if (!inlogview) { comPort.Write("\r\r\r?\r"); } } catch (Exception ex) { Console.WriteLine("Terminal thread 3 " + ex.ToString()); threadrun = false; return; } Console.WriteLine("Terminal thread 3"); while (threadrun) { try { System.Threading.Thread.Sleep(10); if (inlogview) { continue; } if (!comPort.IsOpen) { break; } if (comPort.BytesToRead > 0) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { Console.WriteLine("Terminal thread 4 " + ex.ToString()); } } threadrun = false; try { comPort.DtrEnable = false; } catch { } try { Console.WriteLine("term thread close"); comPort.Close(); } catch { } Console.WriteLine("Comport thread close"); }); t11.IsBackground = true; t11.Name = "Terminal serial thread"; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); TXT_terminal.AppendText("Opened com port\r\n"); inputStartPos = TXT_terminal.SelectionStart; } catch (Exception) { TXT_terminal.AppendText("Cant open serial port\r\n"); return; } TXT_terminal.Focus(); }
public string doCommand(ICommsSerial comPort, string cmd, int level = 0) { if (!comPort.IsOpen) { return(""); } comPort.ReadTimeout = 1000; comPort.DiscardInBuffer(); // setup to known state comPort.Write("\r\n"); try { var temp1 = Serial_ReadLine(comPort); } catch { comPort.ReadExisting(); } Sleep(100); comPort.DiscardInBuffer(); lbl_status.Text = "Doing Command " + cmd; log.Info("Doing Command " + cmd); // write command comPort.Write(cmd + "\r\n"); // read echoed line or existing data string temp; try { temp = Serial_ReadLine(comPort); } catch { temp = comPort.ReadExisting(); } log.Info("cmd " + cmd + " echo " + temp); // get response string ans = ""; DateTime deadline = DateTime.Now.AddMilliseconds(200); while (comPort.BytesToRead > 0 || DateTime.Now < deadline) { try { ans = ans + Serial_ReadLine(comPort) + "\n"; } catch { ans = ans + comPort.ReadExisting() + "\n"; } Sleep(50); if (ans.Length > 1024) { break; } } log.Info("response " + level + " " + ans.Replace('\0', ' ')); Regex pattern = new Regex(@"^\[([0-9+])\]\s+", RegexOptions.Multiline); if (pattern.IsMatch(ans)) { Match mat = pattern.Match(ans); ans = pattern.Replace(ans, ""); } // try again if (ans == "" && level == 0) { return(doCommand(comPort, cmd, 1)); } return(ans); }
public string doCommand(ICommsSerial comPort, string cmd, int level = 0) { if (!comPort.IsOpen) return ""; comPort.ReadTimeout = 1000; comPort.DiscardInBuffer(); // setup to known state comPort.Write("\r\n"); try { var temp1 = Serial_ReadLine(comPort); } catch { try { comPort.ReadExisting(); } catch { return ""; } } Sleep(100); comPort.DiscardInBuffer(); lbl_status.Text = "Doing Command " + cmd; log.Info("Doing Command " + cmd); // write command comPort.Write(cmd + "\r\n"); // read echoed line or existing data string temp; try { temp = Serial_ReadLine(comPort); } catch { temp = comPort.ReadExisting(); } log.Info("cmd " + cmd + " echo " + temp); // get response string ans = ""; DateTime deadline = DateTime.Now.AddMilliseconds(200); while (comPort.BytesToRead > 0 || DateTime.Now < deadline) { try { ans = ans + Serial_ReadLine(comPort) + "\n"; } catch { ans = ans + comPort.ReadExisting() + "\n"; } Sleep(50); if (ans.Length > 1024) { break; } } log.Info("response " + level + " " + ans.Replace('\0', ' ')); Regex pattern = new Regex(@"^\[([0-9+])\]\s+", RegexOptions.Multiline); if (pattern.IsMatch(ans)) { Match mat = pattern.Match(ans); ans = pattern.Replace(ans, ""); } // try again if (ans == "" && level == 0) return doCommand(comPort, cmd, 1); return ans; }
private void start_Terminal(bool px4) { try { MainV2.comPort.giveComport = true; comPort = MainV2.comPort.BaseStream; if (comPort.IsOpen) { threadrun = false; // if (DialogResult.Cancel == CustomMessageBox.Show("The port is open\n Continue?", "Continue", MessageBoxButtons.YesNo)) { // return; } comPort.Close(); // allow things to cleanup System.Threading.Thread.Sleep(200); } comPort.ReadBufferSize = 1024 * 1024; comPort.PortName = MainV2.comPortName; // test moving baud rate line log.Info("About to open " + comPort.PortName); comPort.Open(); comPort.BaudRate = int.Parse(MainV2._connectionControl.CMB_baudrate.Text); if (px4) { TXT_terminal.AppendText("Rebooting"); // check if we are a mavlink stream byte[] buffer = MainV2.comPort.readPacket(); if (buffer.Length > 0) { log.Info("got packet - sending reboot via mavlink"); MainV2.comPort.giveComport = true; MainV2.comPort.doReboot(false); try { comPort.Close(); } catch { } } else { log.Info("no packet - sending reboot via console"); MainV2.comPort.giveComport = true; MainV2.comPort.BaseStream.Write("exit\rreboot\r"); try { comPort.Close(); } catch { } } MainV2.comPort.giveComport = true; TXT_terminal.AppendText("Waiting for reboot"); // wait 7 seconds for px4 reboot log.Info("waiting for reboot"); DateTime deadline = DateTime.Now.AddSeconds(8); while (DateTime.Now < deadline) { System.Threading.Thread.Sleep(100); Application.DoEvents(); } int a = 0; // while (a < 5) { try { comPort.Open(); } catch { } System.Threading.Thread.Sleep(200); a++; } } else { comPort.toggleDTR(); } try { comPort.DiscardInBuffer(); } catch { } Console.WriteLine("Terminal_Load"); BUT_disconnect.Enabled = true; System.Threading.Thread t11 = new System.Threading.Thread(delegate() { threadrun = true; Console.WriteLine("Terminal thread start"); // 10 sec waitandsleep(10000); Console.WriteLine("Terminal thread 1"); // 100 ms readandsleep(100); Console.WriteLine("Terminal thread 2"); try { if (!inlogview) comPort.Write("\n\n\n"); // 1 secs if (!inlogview) readandsleep(1000); if (!inlogview) comPort.Write("\r\r\r?\r"); } catch (Exception ex) { Console.WriteLine("Terminal thread 3 " + ex.ToString()); ChangeConnectStatus(false); threadrun = false; return; } Console.WriteLine("Terminal thread 3"); while (threadrun) { try { System.Threading.Thread.Sleep(10); ChangeConnectStatus(comPort.IsOpen); if (this.Disposing) break; if (inlogview) continue; if (!comPort.IsOpen) { Console.WriteLine("Comport Closed"); ChangeConnectStatus(false); break; } if (comPort.BytesToRead > 0) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch (Exception ex) { Console.WriteLine("Terminal thread 4 " + ex.ToString()); } } threadrun = false; try { comPort.DtrEnable = false; } catch { } try { Console.WriteLine("term thread close"); ChangeConnectStatus(false); comPort.Close(); } catch { } Console.WriteLine("Comport thread close"); }); t11.IsBackground = true; t11.Name = "Terminal serial thread"; t11.Start(); // doesnt seem to work on mac //comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived); TXT_terminal.AppendText("Opened com port\r\n"); inputStartPos = TXT_terminal.SelectionStart; } catch (Exception ex) { log.Error(ex); TXT_terminal.AppendText("Cant open serial port\r\n"); return; } TXT_terminal.Focus(); }
public bool doConnect(ICommsSerial comPort) { try { // clear buffer comPort.DiscardInBuffer(); // setup a known enviroment comPort.Write("\r\n"); // wait Sleep(1100); // send config string comPort.Write("+++"); // wait Sleep(1100); // check for config responce "OK" log.Info("Connect btr " + comPort.BytesToRead + " baud " + comPort.BaudRate); string conn = comPort.ReadExisting(); log.Info("Connect first responce " + conn.Replace('\0', ' ') + " " + conn.Length); if (conn.Contains("OK")) { //return true; } else { // cleanup incase we are already in cmd mode comPort.Write("\r\n"); } doCommand(comPort, "AT&T"); string version = doCommand(comPort, "ATI"); log.Info("Connect Version: " + version.Trim() + "\n"); Regex regex = new Regex(@"SiK\s+(.*)\s+on\s+(.*)"); if (regex.IsMatch(version)) { return true; } return false; } catch { return false; } }
public bool doConnect(ICommsSerial comPort) { char[] ends = { '\r', '\n' }; try { comLog("Connecting", 2); int trys = 1; // setup a known enviroment comPort.Write("ATO\r\n"); retry: // wait Sleep(1500, comPort); comPort.DiscardInBuffer(); // send config string comPort.Write("+++"); Sleep(1500, comPort); // check for config response "OK" comLog("Connect btr " + comPort.BytesToRead + " baud " + comPort.BaudRate, 2); // allow time for data/response if (comPort.BytesToRead == 0 && trys <= 3) { trys++; comLog("doConnect retry", 2); goto retry; } byte[] buffer = new byte[20]; int len = comPort.Read(buffer, 0, buffer.Length); string conn = ASCIIEncoding.ASCII.GetString(buffer, 0, len); comLog("Connect first response " + conn.TrimEnd(ends) + " " + conn.Length); if (conn.Contains("OK")) { //return true; } else { // cleanup incase we are already in cmd mode comPort.Write("\r\n"); } doCommand(comPort, "AT&T"); string version = doCommand(comPort, "ATI"); Regex regex = new Regex(@"SiK\s+(.*)\s+on\s+(.*)"); if (regex.IsMatch(version)) { comLog("Connected: " + version.TrimEnd(ends), 2); return(true); } comLog("Connect Version: " + version.TrimEnd(ends)); return(false); } catch { return(false); } }