void getTelemPortWithRadio(ref ICommsSerial comPort) { // try telem1 comPort = new MAVLinkSerialPort(MainV2.comPort, (int)MAVLink.SERIAL_CONTROL_DEV.TELEM1); comPort.ReadTimeout = 4000; comPort.Open(); }
void background_DoOpen(object state) { if (CoTStream == null) { return; } try { CoTStream.Open(); } catch { CoTStream = null; } // don't care if we crash }
private void BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; } else { try { comPort.PortName = CMB_serialport.Text; } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { comPort.Open(); } catch { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??"); return; } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "Nmea output" }; t12.Start(); } }
private void start_NSHTerminal() { try { if (MainV2.comPort != null && MainV2.comPort.BaseStream != null && MainV2.comPort.BaseStream.IsOpen) { comPort = new MAVLinkSerialPort(MainV2.comPort, MAVLink.SERIAL_CONTROL_DEV.SHELL); comPort.BaudRate = 0; // 20 hz ((MAVLinkSerialPort)comPort).timeout = 50; comPort.Open(); startreadthread(); } } catch { } }
bool Connect() { try { if (MainV2.comPort.BaseStream.PortName.Contains("TCP")) { _comPort = new TcpSerial(); _comPort.BaudRate = MainV2.comPort.BaseStream.BaudRate; _comPort.ReadTimeout = 4000; _comPort.Open(); } else { _comPort = new SerialPort(); if (MainV2.comPort.BaseStream.IsOpen) { getTelemPortWithRadio(ref _comPort); } else { _comPort.PortName = MainV2.comPort.BaseStream.PortName; _comPort.BaudRate = MainV2.comPort.BaseStream.BaudRate; } _comPort.ReadTimeout = 4000; _comPort.Open(); } return(true); } catch { return(false); } }
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); }
///// <summary> ///// Do full update - get firmware from internet ///// </summary> ///// <param name="temp"></param> ///// <param name="historyhash"></param> //public bool update(string comport, software temp, string historyhash) //{ // BoardDetect.boards board = BoardDetect.boards.none; // try // { // updateProgress(-1, Strings.DetectingBoardVersion); // board = BoardDetect.DetectBoard(comport); // if (board == BoardDetect.boards.none) // { // CustomMessageBox.Show(Strings.CantDetectBoardVersion); // return false; // } // int apmformat_version = -1; // fail continue // if (board != BoardDetect.boards.px4 && board != BoardDetect.boards.px4v2 && board != BoardDetect.boards.vrbrainv40 && board != BoardDetect.boards.vrbrainv45 && board != BoardDetect.boards.vrbrainv50 && board != BoardDetect.boards.vrbrainv51 && board != BoardDetect.boards.vrbrainv52 && board != BoardDetect.boards.vrherov10 && board != BoardDetect.boards.vrubrainv51 && board != BoardDetect.boards.vrubrainv52 && board != BoardDetect.boards.vrgimbalv20 && board != BoardDetect.boards.vrugimbalv11) // { // try // { // apmformat_version = BoardDetect.decodeApVar(comport, board); // } // catch { } // if (apmformat_version != -1 && apmformat_version != temp.k_format_version) // { // if (DialogResult.No == CustomMessageBox.Show(Strings.EppromChanged, String.Format(Strings.EppromFormatChanged, apmformat_version, temp.k_format_version), MessageBoxButtons.YesNo)) // { // CustomMessageBox.Show(Strings.PleaseConnectAndBackupConfig); // return false; // } // } // } // log.Info("Detected a " + board); // updateProgress(-1, Strings.DetectedA + board); // string baseurl = ""; // if (board == BoardDetect.boards.b2560) // { // baseurl = temp.url2560.ToString(); // } // else if (board == BoardDetect.boards.b1280) // { // baseurl = temp.url.ToString(); // } // else if (board == BoardDetect.boards.b2560v2) // { // baseurl = temp.url2560_2.ToString(); // } // else if (board == BoardDetect.boards.px4) // { // baseurl = temp.urlpx4v1.ToString(); // } // else if (board == BoardDetect.boards.px4v2) // { // baseurl = temp.urlpx4v2.ToString(); // } // else if (board == BoardDetect.boards.vrbrainv40) // { // baseurl = temp.urlvrbrainv40.ToString(); // } // else if (board == BoardDetect.boards.vrbrainv45) // { // baseurl = temp.urlvrbrainv45.ToString(); // } // else if (board == BoardDetect.boards.vrbrainv50) // { // baseurl = temp.urlvrbrainv50.ToString(); // } // else if (board == BoardDetect.boards.vrbrainv51) // { // baseurl = temp.urlvrbrainv51.ToString(); // } // else if (board == BoardDetect.boards.vrbrainv52) // { // baseurl = temp.urlvrbrainv52.ToString(); // } // else if (board == BoardDetect.boards.vrherov10) // { // baseurl = temp.urlvrherov10.ToString(); // } // else if (board == BoardDetect.boards.vrubrainv51) // { // baseurl = temp.urlvrubrainv51.ToString(); // } // else if (board == BoardDetect.boards.vrubrainv52) // { // baseurl = temp.urlvrubrainv52.ToString(); // } // else if (board == BoardDetect.boards.vrgimbalv20) // { // baseurl = temp.urlvrgimbalv20.ToString(); // } // else if (board == BoardDetect.boards.vrugimbalv11) // { // baseurl = temp.urlvrugimbalv11.ToString(); // } // else // { // CustomMessageBox.Show(Strings.InvalidBoardType); // return false; // } // if (board < BoardDetect.boards.px4) // { // if (temp.name.ToLower().Contains("arducopter")) // { // CustomMessageBox.Show("This board has been retired, Mission Planner this will upload the last available version to your board","Note"); // } // } // if (historyhash != "") // baseurl = getUrl(historyhash, baseurl); // // update to use mirror url // ReplaceMirrorUrl(ref baseurl); // log.Info("Using " + baseurl); // // Create a request using a URL that can receive a post. // WebRequest request = WebRequest.Create(baseurl); // request.Timeout = 10000; // // Set the Method property of the request to POST. // request.Method = "GET"; // // Get the request stream. // Stream dataStream; //= request.GetRequestStream(); // // Get the response. // WebResponse response = request.GetResponse(); // // Display the status. // log.Info(((HttpWebResponse)response).StatusDescription); // // Get the stream containing content returned by the server. // dataStream = response.GetResponseStream(); // long bytes = response.ContentLength; // long contlen = bytes; // byte[] buf1 = new byte[1024]; // FileStream fs = new FileStream(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex", FileMode.Create); // updateProgress(0, Strings.DownloadingFromInternet); // dataStream.ReadTimeout = 30000; // while (dataStream.CanRead) // { // try // { // updateProgress(50, Strings.DownloadingFromInternet); // } // catch { } // int len = dataStream.Read(buf1, 0, 1024); // if (len == 0) // break; // bytes -= len; // fs.Write(buf1, 0, len); // } // fs.Close(); // dataStream.Close(); // response.Close(); // updateProgress(100, Strings.DownloadedFromInternet); // log.Info("Downloaded"); // } // catch (Exception ex) // { // updateProgress(50, Strings.FailedDownload); // CustomMessageBox.Show("Failed to download new firmware : " + ex.ToString()); // return false; // } // MissionPlanner.Utilities.Tracking.AddFW(temp.name, board.ToString()); // return UploadFlash(comport, Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"firmware.hex", board); //} //void apmtype(object temp) //{ // try // { // // Create a request using a URL that can receive a post. // HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://vps.oborne.me/axs/ax.pl?" + (string)temp); // //request.AllowAutoRedirect = true; // request.UserAgent = MainV2.instance.Text + " (res" + Screen.PrimaryScreen.Bounds.Width + "x" + Screen.PrimaryScreen.Bounds.Height + "; " + Environment.OSVersion.VersionString + "; cores " + Environment.ProcessorCount + ")"; // request.Timeout = 10000; // // Set the Method property of the request to POST. // request.Method = "GET"; // // Get the request stream. // // Get the response. // WebResponse response = request.GetResponse(); // } // catch { } //} /// <summary> /// upload to playuav standalone /// </summary> /// <param name="filename"></param> public bool UploadPlayUAVOSD(string filename) { Uploader up; updateProgress(0, "Reading Hex File"); px4uploader.Firmware fw; try { fw = px4uploader.Firmware.ProcessFirmware(filename); } catch (Exception ex) { CustomMessageBox.Show(Strings.ErrorFirmwareFile + "\n\n" + ex.ToString(), Strings.ERROR); return(false); } try { //if (comPortosdbl.IsOpen()) comPortosdbl.Close(); try { comPortosdbl.PortName = PlayuavOSD.comPortName; comPortosdbl.BaudRate = 115200; comPortosdbl.ReadBufferSize = 1024 * 1024 * 4; comPortosdbl.Open(); } catch { MessageBox.Show("Error opening com port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } __syncbl(); __sendbl(new byte[] { (byte)Codebl.BL_UPLOAD, (byte)Codebl.EOC }); __getSyncbl(); //comPortosdbl.BaseStream.Flush(); if (comPortosdbl.IsOpen) { comPortosdbl.Close(); } //CustomMessageBox.Show("Please unplug the board, and then press OK and plug back in.\nMission Planner will look for 30 seconds to find the board"); //// check if we are seeing heartbeats //MainV2.comPort.BaseStream.Open(); //MainV2.comPort.giveComport = true; //BoardDetect.boards board = BoardDetect.DetectBoard(MainV2.comPortName); //if (MainV2.comPort.getHeartBeat().Length > 0) //{ // MainV2.comPort.doReboot(true); // MainV2.comPort.Close(); // //specific action for VRBRAIN4 board that needs to be manually disconnected before uploading // if (board == BoardDetect.boards.vrbrainv40) // { // CustomMessageBox.Show("VRBRAIN 4 detected. Please unplug the board then press OK and plug back in.\n"); // } //} //else //{ // MainV2.comPort.BaseStream.Close(); // CustomMessageBox.Show("Please unplug the board, and then press OK and plug back in.\nMission Planner will look for 30 seconds to find the board"); //} } catch (Exception ex) { log.Error(ex); CustomMessageBox.Show("Please unplug the board, and then press OK and plug back in.\nMission Planner will look for 30 seconds to find the board"); } //System.Threading.Thread.Sleep(1); DateTime DEADLINE = DateTime.Now.AddSeconds(30); updateProgress(0, "Scanning comports"); while (DateTime.Now < DEADLINE) { string[] allports = SerialPort.GetPortNames(); foreach (string port in allports) { log.Info(DateTime.Now.Millisecond + " Trying Port " + port); updateProgress(-1, "Connecting"); try { up = new Uploader(port, 115200); } catch (Exception ex) { //System.Threading.Thread.Sleep(50); Console.WriteLine(ex.Message); continue; } try { up.identify(); updateProgress(-1, "Identify"); log.InfoFormat("Found board type {0} boardrev {1} bl rev {2} fwmax {3} on {4}", up.board_type, up.board_rev, up.bl_rev, up.fw_maxsize, port); up.ProgressEvent += new Uploader.ProgressEventHandler(up_ProgressEvent); up.LogEvent += new Uploader.LogEventHandler(up_LogEvent); } catch (Exception) { Console.WriteLine("Not There.."); //Console.WriteLine(ex.Message); up.close(); continue; } // test if pausing here stops - System.TimeoutException: The write timed out. System.Threading.Thread.Sleep(500); try { up.verifyotp(); if (up.libre) { MissionPlanner.Utilities.Tracking.AddEvent("FWUpload", "verifyotp", "libre", ""); } else { MissionPlanner.Utilities.Tracking.AddEvent("FWUpload", "verifyotp", "Pass", ""); } } catch (Org.BouncyCastle.Security.InvalidKeyException ex) { MissionPlanner.Utilities.Tracking.AddEvent("FWUpload", "verifyotp", "InvalidKeyException", ""); log.Error(ex); CustomMessageBox.Show("You are using unsupported hardware.\nThis board does not contain a valid certificate of authenticity.\nPlease contact your hardware vendor about signing your hardware.", "Invalid Cert"); up.skipotp = true; } catch (FormatException ex) { MissionPlanner.Utilities.Tracking.AddEvent("FWUpload", "verifyotp", "FormatException", ""); log.Error(ex); CustomMessageBox.Show("You are using unsupported hardware.\nThis board does not contain a valid certificate of authenticity.\nPlease contact your hardware vendor about signing your hardware.", "Invalid Cert"); up.skipotp = true; } catch (IOException ex) { MissionPlanner.Utilities.Tracking.AddEvent("FWUpload", "verifyotp", "IOException", ""); log.Error(ex); CustomMessageBox.Show("lost communication with the board.", "lost comms"); up.close(); return(false); } catch (TimeoutException ex) { MissionPlanner.Utilities.Tracking.AddEvent("FWUpload", "verifyotp", "TimeoutException", ""); log.Error(ex); CustomMessageBox.Show("lost communication with the board.", "lost comms"); up.close(); return(false); } catch (Exception ex) { MissionPlanner.Utilities.Tracking.AddEvent("FWUpload", "verifyotp", "Exception", ""); log.Error(ex); CustomMessageBox.Show("lost communication with the board. " + ex.ToString(), "lost comms"); up.close(); return(false); } try { up.currentChecksum(fw); } catch (IOException ex) { log.Error(ex); CustomMessageBox.Show("lost communication with the board.", "lost comms"); up.close(); return(false); } catch { up.__reboot(); up.close(); CustomMessageBox.Show("No need to upload. already on the board"); return(true); } try { updateProgress(0, "Upload"); up.upload(fw); updateProgress(100, "Upload Done"); } catch (Exception ex) { updateProgress(0, "ERROR: " + ex.Message); log.Info(ex); Console.WriteLine(ex.ToString()); return(false); } finally { up.close(); } // wait for IO firmware upgrade and boot to a mavlink state //CustomMessageBox.Show("Please wait for the musical tones to finish before clicking OK"); return(true); } } updateProgress(0, "ERROR: No Response from board"); return(false); }
private void Terminal_Load(object sender, EventArgs e) { try { if (comPort.IsOpen) { comPort.Close(); } comPort.ReadBufferSize = 1024 * 1024; comPort.PortName = MainV2.comPort.BaseStream.PortName; comPort.Open(); comPort.toggleDTR(); var t11 = new Thread(delegate() { threadrun = true; var start = DateTime.Now; while ((DateTime.Now - start).TotalMilliseconds < 2000) { try { if (comPort.BytesToRead > 0) { comPort_DataReceived(null, null); } } catch { return; } } try { comPort.Write("\n\n\n"); } catch { return; } while (threadrun) { try { Thread.Sleep(10); if (!comPort.IsOpen) { break; } if (comPort.BytesToRead > 0) { comPort_DataReceived(null, null); } } catch { } } comPort.DtrEnable = false; try { //if (sw != null) // sw.Close(); } catch { } if (threadrun == false) { comPort.Close(); } 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"); } catch (Exception) { TXT_terminal.AppendText("Cant open serial port\r\n"); return; } TXT_terminal.Focus(); }
private static void mainloop() { DateTime lastrecv = DateTime.MinValue; threadrun = true; bool isrtcm = false; bool issbp = false; int reconnecttimeout = 10; while (threadrun) { try { // reconnect logic - 10 seconds with no data, or comport is closed try { if ((DateTime.Now - lastrecv).TotalSeconds > reconnecttimeout || !comPort.IsOpen) { if (comPort is CommsNTRIP || comPort is UdpSerialConnect || comPort is UdpSerial) { } else { log.Warn("Reconnecting"); // close existing comPort.Close(); // reopen comPort.Open(); } // reset timer lastrecv = DateTime.Now; } } catch { log.Error("Failed to reconnect"); // sleep for 10 seconds on error System.Threading.Thread.Sleep(10000); } // limit to 110 byte packets byte[] buffer = new byte[110]; // limit to 180 byte packet if using new packet if (rtcm_msg) { buffer = new byte[180]; } while (comPort.BytesToRead > 0) { int read = comPort.Read(buffer, 0, Math.Min(buffer.Length, comPort.BytesToRead)); if (read > 0) { lastrecv = DateTime.Now; } bytes += read; bps += read; try { if (basedata != null) { basedata.Write(buffer, 0, read); } } catch { } // if this is raw data transport of unknown packet types if (!(isrtcm || issbp)) { sendData(buffer, (byte)read); } // check for valid rtcm/sbp/ubx packets for (int a = 0; a < read; a++) { int seenmsg = -1; // rtcm if ((seenmsg = rtcm3.Read(buffer[a])) > 0) { sbp.resetParser(); ubx_m8p.resetParser(); nmea.resetParser(); isrtcm = true; sendData(rtcm3.packet, (byte)rtcm3.length); bpsusefull += rtcm3.length; string msgname = "Rtcm" + seenmsg; if (!msgseen.ContainsKey(msgname)) { msgseen[msgname] = 0; } msgseen[msgname] = (int)msgseen[msgname] + 1; ExtractBasePos(seenmsg); seenRTCM(seenmsg); } // sbp if ((seenmsg = sbp.read(buffer[a])) > 0) { rtcm3.resetParser(); ubx_m8p.resetParser(); nmea.resetParser(); issbp = true; sendData(sbp.packet, (byte)sbp.length); bpsusefull += sbp.length; string msgname = "Sbp" + seenmsg.ToString("X4"); if (!msgseen.ContainsKey(msgname)) { msgseen[msgname] = 0; } msgseen[msgname] = (int)msgseen[msgname] + 1; } // ubx if ((seenmsg = ubx_m8p.Read(buffer[a])) > 0) { rtcm3.resetParser(); sbp.resetParser(); nmea.resetParser(); ProcessUBXMessage(); string msgname = "Ubx" + seenmsg.ToString("X4"); if (!msgseen.ContainsKey(msgname)) { msgseen[msgname] = 0; } msgseen[msgname] = (int)msgseen[msgname] + 1; } // nmea if ((seenmsg = nmea.Read(buffer[a])) > 0) { rtcm3.resetParser(); sbp.resetParser(); ubx_m8p.resetParser(); string msgname = "NMEA"; if (!msgseen.ContainsKey(msgname)) { msgseen[msgname] = 0; } msgseen[msgname] = (int)msgseen[msgname] + 1; } } } System.Threading.Thread.Sleep(10); } catch (Exception ex) { log.Error(ex); } } }
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(); }
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 BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; } else { try { switch (CMB_serialport.Text) { case "NTRIP": comPort = new CommsNTRIP(); CMB_baudrate.SelectedIndex = 0; break; case "TCP Client": comPort = new TcpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Host": comPort = new UdpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": comPort = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: comPort = new SerialPort(); comPort.PortName = CMB_serialport.Text; break; } } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { comPort.Open(); } catch (Exception ex) { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??\n" + ex.ToString()); return; } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "injectgps" }; t12.Start(); BUT_connect.Text = Strings.Stop; msgseen.Clear(); bytes = 0; } }
private void mainloop() { DateTime lastrecv = DateTime.MinValue; threadrun = true; bool isrtcm = false; bool issbp = false; while (threadrun) { try { // reconnect logic - 10 seconds with no data, or comport is closed try { if ((DateTime.Now - lastrecv).TotalSeconds > 10 || !comPort.IsOpen) { log.Info("Reconnecting"); // close existing comPort.Close(); // reopen comPort.Open(); // reset timer lastrecv = DateTime.Now; } } catch { log.Error("Failed to reconnect"); // sleep for 10 seconds on error System.Threading.Thread.Sleep(10000); } // limit to 110 byte packets byte[] buffer = new byte[110]; while (comPort.BytesToRead > 0) { int read = comPort.Read(buffer, 0, Math.Min(buffer.Length, comPort.BytesToRead)); if (read > 0) { lastrecv = DateTime.Now; } bytes += read; bps += read; if (!(isrtcm || issbp)) { sendData(buffer, (byte)read); } // check for valid rtcm packets for (int a = 0; a < read; a++) { int seen = -1; // rtcm if ((seen = rtcm3.Read(buffer[a])) > 0) { isrtcm = true; sendData(rtcm3.packet, (byte)rtcm3.length); if (!msgseen.ContainsKey(seen)) { msgseen[seen] = 0; } msgseen[seen] = (int)msgseen[seen] + 1; } // sbp if ((seen = sbp.read(buffer[a])) > 0) { issbp = true; sendData(sbp.packet, (byte)sbp.length); if (!msgseen.ContainsKey(seen)) { msgseen[seen] = 0; } msgseen[seen] = (int)msgseen[seen] + 1; } } } System.Threading.Thread.Sleep(10); } catch (Exception ex) { log.Error(ex); } } }
private void Terminal_Load(object sender, EventArgs e) { try { MainV2.givecomport = true; if (comPort.IsOpen) { comPort.Close(); } comPort.ReadBufferSize = 1024 * 1024; comPort.PortName = MainV2.comportname; comPort.Open(); comPort.toggleDTR(); System.Threading.Thread t11 = new System.Threading.Thread(delegate() { threadrun = true; DateTime start = DateTime.Now; while ((DateTime.Now - start).TotalMilliseconds < 2000) { try { if (comPort.BytesToRead > 0) { comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null); } } catch { return; } } comPort.Write("\n\n\n"); 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 { } } comPort.DtrEnable = false; if (threadrun == false) { comPort.Close(); } Console.WriteLine("Comport thread close"); }); t11.IsBackground = true; t11.Name = "Terminal serial thread"; t11.Start(); MainV2.threads.Add(t11); // 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 BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; try { basedata.Close(); basedata = null; } catch { } } else { status_line3 = null; try { switch (CMB_serialport.Text) { case "NTRIP": comPort = new CommsNTRIP(); CMB_baudrate.SelectedIndex = 0; break; case "TCP Client": comPort = new TcpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Host": comPort = new UdpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": comPort = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: comPort = new SerialPort(); comPort.PortName = CMB_serialport.Text; break; } Settings.Instance["SerialInjectGPS_port"] = CMB_serialport.Text; Settings.Instance["SerialInjectGPS_baud"] = CMB_baudrate.Text; } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { comPort.ReadBufferSize = 1024 * 64; comPort.Open(); try { basedata = new BinaryWriter(new BufferedStream( File.Open( Settings.Instance.LogDir + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".gpsbase", FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None))); } catch (Exception ex2) { CustomMessageBox.Show("Error creating file to save base data into " + ex2.ToString()); } } catch (Exception ex) { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??\n" + ex.ToString()); return; } // inject init strings - m8p if (chk_m8pautoconfig.Checked) { this.LogInfo("Setup M8P"); ubx_m8p.SetupM8P(comPort, basepos, int.Parse(txt_surveyinDur.Text), double.Parse(txt_surveyinAcc.Text)); } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "injectgps" }; t12.Start(); BUT_connect.Text = Strings.Stop; msgseen.Clear(); bytes = 0; } }
private void mainloop() { DateTime lastrecv = DateTime.MinValue; threadrun = true; bool isrtcm = false; bool issbp = false; while (threadrun) { try { // reconnect logic - 10 seconds with no data, or comport is closed try { if ((DateTime.Now - lastrecv).TotalSeconds > 10 || !comPort.IsOpen) { this.LogInfo("Reconnecting"); // close existing comPort.Close(); // reopen comPort.Open(); // reset timer lastrecv = DateTime.Now; } } catch { this.LogError("Failed to reconnect"); // sleep for 10 seconds on error System.Threading.Thread.Sleep(10000); } // limit to 110 byte packets byte[] buffer = new byte[110]; // limit to 180 byte packet if using new packet if (rtcm_msg) { buffer = new byte[180]; } while (comPort.BytesToRead > 0) { int read = comPort.Read(buffer, 0, Math.Min(buffer.Length, comPort.BytesToRead)); if (read > 0) { lastrecv = DateTime.Now; } bytes += read; bps += read; try { if (basedata != null) { basedata.Write(buffer, 0, read); } } catch { } if (!(isrtcm || issbp)) { sendData(buffer, (byte)read); } // check for valid rtcm packets for (int a = 0; a < read; a++) { int seenmsg = -1; // rtcm if ((seenmsg = rtcm3.Read(buffer[a])) > 0) { isrtcm = true; sendData(rtcm3.packet, (byte)rtcm3.length); string msgname = "Rtcm" + seenmsg; if (!msgseen.ContainsKey(msgname)) { msgseen[msgname] = 0; } msgseen[msgname] = (int)msgseen[msgname] + 1; ExtractBasePos(seenmsg); } // sbp if ((seenmsg = sbp.read(buffer[a])) > 0) { issbp = true; sendData(sbp.packet, (byte)sbp.length); string msgname = "Sbp" + seenmsg.ToString("X4"); if (!msgseen.ContainsKey(msgname)) { msgseen[msgname] = 0; } msgseen[msgname] = (int)msgseen[msgname] + 1; } // ubx if ((seenmsg = ubx_m8p.Read(buffer[a])) > 0) { ProcessUBXMessage(); string msgname = "Ubx" + seenmsg.ToString("X4"); if (!msgseen.ContainsKey(msgname)) { msgseen[msgname] = 0; } msgseen[msgname] = (int)msgseen[msgname] + 1; } } } System.Threading.Thread.Sleep(10); } catch (Exception ex) { this.LogError(ex); } } }
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(); }
private void but_cotstart_Click(object sender, EventArgs e) { if (listenerCoT != null) { listenerCoT.Stop(); listenerCoT = null; } if (CoTStream.IsOpen) { CoTthreadrun = false; CoTStream.Close(); but_cotstart.Text = Strings.Connect; } else { try { switch (cmb_cotport.Text) { case "TCP Host - 14551": case "TCP Host": CoTStream = new TcpSerial(); int portt = int.Parse(Settings.Instance["cot_tcphostport", "14551"]); InputBox.Show("Enter Port", "Please enter a listen port", ref portt); cmb_cotbaud.SelectedIndex = 0; listenerCoT = new TcpListener(System.Net.IPAddress.Any, portt); listenerCoT.Start(0); listenerCoT.BeginAcceptTcpClient(new AsyncCallback(DoAcceptCoTTcpClientCallback), listenerCoT); break; case "TCP Client": CoTStream = new TcpSerial() { retrys = 999999, autoReconnect = true }; CMB_baudrate.SelectedIndex = 0; break; case "UDP Host - 14551": case "UDP Host": int portu = int.Parse(Settings.Instance["cot_udphostport", "10011"]); InputBox.Show("Enter Port", "Please enter a listen port", ref portu); Settings.Instance["cot_udphostport"] = portu.ToString(); CoTStream = new UdpSerial() { ConfigRef = "cot", Port = portu.ToString(), client = new UdpClient(portu), IsOpen = true }; CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": CoTStream = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: CoTStream = new SerialPort(); CoTStream.PortName = CMB_serialport.Text; break; } } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { CoTStream.BaudRate = int.Parse(cmb_cotbaud.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { if (listenerCoT == null) { CoTStream.Open(); } } catch { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??"); return; } CoTThread = new System.Threading.Thread(new System.Threading.ThreadStart(CoTmainloop)) { IsBackground = true, Name = "CoT output" }; CoTThread.Start(); but_cotstart.Text = Strings.Stop; } }
private void BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; } else { try { switch (CMB_serialport.Text) { case "NTRIP": comPort = new CommsNTRIP(); CMB_baudrate.SelectedIndex = 0; break; case "TCP Client": comPort = new TcpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Host": comPort = new UdpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": comPort = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: comPort = new SerialPort(); comPort.PortName = CMB_serialport.Text; break; } } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { comPort.Open(); } catch (Exception ex) { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??\n" + ex.ToString()); return; } // inject init strings - m8p if (true) { var ubloxm8p_timepulse_60s_1m = new byte[] { 0xB5, 0x62, 0x06, 0x71, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x20, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x53 }; comPort.Write(ubloxm8p_timepulse_60s_1m, 0, ubloxm8p_timepulse_60s_1m.Length); var ubloxm8p_msg_f5_05_5s = new byte[] { 0xB5, 0x62, 0x06, 0x01, 0x08, 0x00, 0xF5, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00, 0x13, 0x96 }; comPort.Write(ubloxm8p_msg_f5_05_5s, 0, ubloxm8p_msg_f5_05_5s.Length); var ubloxm8p_msg_f5_4d_1s = new byte[] { 0xB5, 0x62, 0x06, 0x01, 0x08, 0x00, 0xF5, 0x4D, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x53, 0x6E }; comPort.Write(ubloxm8p_msg_f5_4d_1s, 0, ubloxm8p_msg_f5_4d_1s.Length); var ubloxm8p_msg_f5_57_1s = new byte[] { 0xB5, 0x62, 0x06, 0x01, 0x08, 0x00, 0xF5, 0x57, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x5D, 0xB4 }; comPort.Write(ubloxm8p_msg_f5_57_1s, 0, ubloxm8p_msg_f5_57_1s.Length); } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "injectgps" }; t12.Start(); BUT_connect.Text = Strings.Stop; msgseen.Clear(); bytes = 0; } }
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); }
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(); }
private void BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; } else { try { switch (CMB_serialport.Text) { case "NTRIP": comPort = new CommsNTRIP(); CMB_baudrate.SelectedIndex = 0; break; case "TCP Client": comPort = new TcpSerial(); break; case "UDP Host": comPort = new UdpSerial(); break; case "UDP Client": comPort = new UdpSerialConnect(); break; default: comPort = new SerialPort(); comPort.PortName = CMB_serialport.Text; break; } } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { comPort.Open(); } catch (Exception ex) { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??\n" + ex.ToString()); return; } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "injectgps" }; t12.Start(); BUT_connect.Text = Strings.Stop; } }
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 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 BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; } else { try { comPort.PortName = CMB_serialport.Text; } catch { CustomMessageBox.Show(Strings.InvalidPortName, Strings.ERROR); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate, Strings.ERROR); return; } try { comPort.Open(); } catch (Exception ex) { CustomMessageBox.Show(Strings.ErrorConnecting + "\n" + ex.ToString(), Strings.ERROR); return; } string alt = "100"; if (MainV2.comPort.MAV.cs.firmware == Firmwares.ArduCopter2) { alt = (10 * CurrentState.multiplierdist).ToString("0"); } else { alt = (100 * CurrentState.multiplierdist).ToString("0"); } if (DialogResult.Cancel == InputBox.Show("Enter Alt", "Enter Alt (relative to home alt)", ref alt)) { return; } intalt = (int)(100 * CurrentState.multiplierdist); if (!int.TryParse(alt, out intalt)) { CustomMessageBox.Show(Strings.InvalidAlt, Strings.ERROR); return; } intalt = (int)(intalt / CurrentState.multiplierdist); t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "followme Input" }; t12.Start(); BUT_connect.Text = Strings.Stop; } }
private void BUT_connect_Click(object sender, EventArgs e) { threadrun = false; if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; try { basedata.Close(); basedata = null; } catch { } } else { status_line3 = null; try { switch (CMB_serialport.Text) { case "NTRIP": comPort = new CommsNTRIP(); CMB_baudrate.SelectedIndex = 0; ((CommsNTRIP)comPort).lat = MainV2.comPort.MAV.cs.HomeLocation.Lat; ((CommsNTRIP)comPort).lng = MainV2.comPort.MAV.cs.HomeLocation.Lng; ((CommsNTRIP)comPort).alt = MainV2.comPort.MAV.cs.HomeLocation.Alt; chk_m8pautoconfig.Checked = false; break; case "TCP Client": comPort = new TcpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Host": comPort = new UdpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": comPort = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: comPort = new SerialPort(); comPort.PortName = CMB_serialport.Text; break; } Settings.Instance["SerialInjectGPS_port"] = CMB_serialport.Text; Settings.Instance["SerialInjectGPS_baud"] = CMB_baudrate.Text; } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { comPort.ReadBufferSize = 1024 * 64; try { comPort.Open(); } catch (ArgumentException ex) { log.Error(ex); // try pipe method comPort = new CommsSerialPipe(); comPort.PortName = CMB_serialport.Text; comPort.BaudRate = int.Parse(CMB_baudrate.Text); try { comPort.Open(); } catch { comPort.Close(); throw; } } try { basedata = new BinaryWriter(new BufferedStream( File.Open( Settings.Instance.LogDir + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".gpsbase", FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None))); } catch (Exception ex2) { CustomMessageBox.Show("Error creating file to save base data into " + ex2.ToString()); } } catch (Exception ex) { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??\n" + ex.ToString()); return; } // inject init strings - m8p if (chk_m8pautoconfig.Checked) { this.LogInfo("Setup M8P"); ubx_m8p.SetupM8P(comPort, chk_m8p_130p.Checked, chk_movingbase.Checked); if (basepos != PointLatLngAlt.Zero) { ubx_m8p.SetupBasePos(comPort, basepos, 0, 0, false, chk_movingbase.Checked); } CMB_baudrate.Text = "115200"; this.LogInfo("Setup M8P done"); } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "injectgps" }; t12.Start(); BUT_connect.Text = Strings.Stop; msgseen.Clear(); bytes = 0; invalidateRTCMStatus(); panel1.Controls.Clear(); } }
private void BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; } else { try { switch (CMB_serialport.Text) { case "TCP Host - 14551": case "TCP Host": comPort = new TcpSerial(); CMB_baudrate.SelectedIndex = 0; listener = new TcpListener(System.Net.IPAddress.Any, 14551); listener.Start(0); listener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClientCallback), listener); BUT_connect.Text = Strings.Stop; break; case "TCP Client": comPort = new TcpSerial() { retrys = 999999, autoReconnect = true }; CMB_baudrate.SelectedIndex = 0; break; case "UDP Host - 14551": comPort = new UdpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": comPort = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: comPort = new SerialPort(); comPort.PortName = CMB_serialport.Text; break; } } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate, Strings.ERROR); return; } try { if (listener == null) { comPort.Open(); } } catch (Exception ex) { CustomMessageBox.Show(Strings.ErrorConnecting + "\n" + ex.ToString(), Strings.ERROR); return; } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "movingbase Input" }; t12.Start(); BUT_connect.Text = Strings.Stop; } }
private void BUT_connect_Click(object sender, EventArgs e) { if (listener != null) { listener.Stop(); listener = null; } if (NmeaStream.IsOpen) { threadrun = false; NmeaStream.Close(); BUT_connect.Text = Strings.Connect; } else { try { switch (CMB_serialport.Text) { case "TCP Host - 14551": case "TCP Host": NmeaStream = new TcpSerial(); CMB_baudrate.SelectedIndex = 0; listener = new TcpListener(System.Net.IPAddress.Any, 14551); listener.Start(0); listener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClientCallback), listener); BUT_connect.Text = Strings.Stop; break; case "TCP Client": NmeaStream = new TcpSerial() { retrys = 999999, autoReconnect = true }; CMB_baudrate.SelectedIndex = 0; break; case "UDP Host - 14551": NmeaStream = new UdpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": NmeaStream = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: NmeaStream = new SerialPort(); NmeaStream.PortName = CMB_serialport.Text; break; } } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { NmeaStream.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { if (listener == null) { NmeaStream.Open(); } } catch { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??"); return; } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "Nmea output" }; t12.Start(); BUT_connect.Text = Strings.Stop; } }
private void BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; } else { try { switch (CMB_serialport.Text) { case "NTRIP": comPort = new CommsNTRIP(); CMB_baudrate.SelectedIndex = 0; break; case "TCP Client": comPort = new TcpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Host": comPort = new UdpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": comPort = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: comPort = new SerialPort(); comPort.PortName = CMB_serialport.Text; break; } } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { comPort.Open(); } catch (Exception ex) { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??\n" + ex.ToString()); return; } // inject init strings - m8p if (true) { var ubloxm8p_timepulse_60s_1m = new byte[] { 0xB5, 0x62, 0x06, 0x71, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x20, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x53 }; comPort.Write(ubloxm8p_timepulse_60s_1m, 0, ubloxm8p_timepulse_60s_1m.Length); var ubloxm8p_msg_f5_05_5s = new byte[] {0xB5, 0x62, 0x06, 0x01, 0x08, 0x00, 0xF5, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00, 0x13, 0x96}; comPort.Write(ubloxm8p_msg_f5_05_5s, 0, ubloxm8p_msg_f5_05_5s.Length); var ubloxm8p_msg_f5_4d_1s = new byte[] {0xB5, 0x62, 0x06, 0x01, 0x08, 0x00, 0xF5, 0x4D, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x53, 0x6E}; comPort.Write(ubloxm8p_msg_f5_4d_1s, 0, ubloxm8p_msg_f5_4d_1s.Length); var ubloxm8p_msg_f5_57_1s = new byte[] {0xB5, 0x62, 0x06, 0x01, 0x08, 0x00, 0xF5, 0x57, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x5D, 0xB4}; comPort.Write(ubloxm8p_msg_f5_57_1s, 0, ubloxm8p_msg_f5_57_1s.Length); } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "injectgps" }; t12.Start(); BUT_connect.Text = Strings.Stop; msgseen.Clear(); bytes = 0; } }
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 BUT_connect_Click(object sender, EventArgs e) { if (comPort.IsOpen) { threadrun = false; comPort.Close(); BUT_connect.Text = Strings.Connect; try { basedata.Close(); basedata = null; } catch { } } else { status_line3 = null; try { switch (CMB_serialport.Text) { case "NTRIP": comPort = new CommsNTRIP(); CMB_baudrate.SelectedIndex = 0; ((CommsNTRIP) comPort).lat = MainV2.comPort.MAV.cs.lat; ((CommsNTRIP) comPort).lng = MainV2.comPort.MAV.cs.lng; ((CommsNTRIP) comPort).alt = MainV2.comPort.MAV.cs.altasl; break; case "TCP Client": comPort = new TcpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Host": comPort = new UdpSerial(); CMB_baudrate.SelectedIndex = 0; break; case "UDP Client": comPort = new UdpSerialConnect(); CMB_baudrate.SelectedIndex = 0; break; default: comPort = new SerialPort(); comPort.PortName = CMB_serialport.Text; break; } Settings.Instance["SerialInjectGPS_port"] = CMB_serialport.Text; Settings.Instance["SerialInjectGPS_baud"] = CMB_baudrate.Text; } catch { CustomMessageBox.Show(Strings.InvalidPortName); return; } try { comPort.BaudRate = int.Parse(CMB_baudrate.Text); } catch { CustomMessageBox.Show(Strings.InvalidBaudRate); return; } try { comPort.ReadBufferSize = 1024*64; comPort.Open(); try { basedata = new BinaryWriter(new BufferedStream( File.Open( Settings.Instance.LogDir + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".gpsbase", FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None))); } catch (Exception ex2) { CustomMessageBox.Show("Error creating file to save base data into " + ex2.ToString()); } } catch (Exception ex) { CustomMessageBox.Show("Error Connecting\nif using com0com please rename the ports to COM??\n" + ex.ToString()); return; } // inject init strings - m8p if (chk_m8pautoconfig.Checked) { this.LogInfo("Setup M8P"); ubx_m8p.SetupM8P(comPort, basepos, int.Parse(txt_surveyinDur.Text, CultureInfo.InvariantCulture), double.Parse(txt_surveyinAcc.Text, CultureInfo.InvariantCulture)); } t12 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { IsBackground = true, Name = "injectgps" }; t12.Start(); BUT_connect.Text = Strings.Stop; msgseen.Clear(); bytes = 0; } }