public string doCommand(ArdupilotMega.Comms.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', ' ')); // try again if (ans == "" && level == 0) { return(doCommand(comPort, cmd, 1)); } return(ans); }
public bool doConnect(ArdupilotMega.Comms.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); } }