public bool sendCmd(String command) { if (command.Length == 0) { return(false); } _recvTransType = ReceiveTransmissionType.Sync; try { String st; st = comPort.ReadExisting(); debugLog("::sendCmd - ReadExisting: '" + st + "'"); WriteData("m" + command + "\r"); st = comPort.ReadExisting(); debugLog("::sendCmd - ReadExisting: '" + st + "'"); } catch (Exception ex) { #if DEBUG DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace); #else DisplayData(MessageType.Error, ex.Message); #endif return(false); } return(true); }
public bool readDeviceMenu(ref String menu) { _recvTransType = ReceiveTransmissionType.Sync; try { String st; st = comPort.ReadExisting(); Console.WriteLine("::readDeviceStats - ReadExisting: '" + st + "'"); WriteData("\rms\r"); menu = ""; do { st = comPort.ReadLine(); menu += st; if ((st != string.Empty) && (st.IndexOf("name=") >= 0)) { Console.WriteLine("::readDeviceStats - ReadLine: menu = '" + menu + "'"); st = comPort.ReadLine(); return(true); } }while (true); } catch //catch (Exception ex) { //DisplayData(MessageType.Error, ex.Message + "\r\n"); DisplayData(MessageType.Error, "Can not read device menu.\r\n"); } return(false); }
public bool readDeviceStats(ref String stats) { _recvTransType = ReceiveTransmissionType.Sync; try { String st; st = comPort.ReadExisting(); Console.WriteLine("::readDeviceStats - ReadExisting: '" + st + "'"); WriteData("ms\r"); stats = comPort.ReadLine(); st = comPort.ReadLine(); Console.WriteLine("::readDeviceStats - ReadLine: stats = '" + stats + "' st = '" + st + "'"); if ((st != string.Empty) && (st.IndexOf("return=1") >= 0)) { return(true); } } catch //catch (Exception ex) { //DisplayData(MessageType.Error, ex.Message + "\r\n"); DisplayData(MessageType.Error, "Can not read device stats.\r\n"); } return(false); }
public bool sendCmd(String command) { if (command.Length == 0) { return(false); } _recvTransType = ReceiveTransmissionType.Sync; try { String st; st = comPort.ReadExisting(); Console.WriteLine("::sendCmd - ReadExisting: '" + st + "'"); WriteData("m" + command + "\r"); st = comPort.ReadExisting(); Console.WriteLine("::sendCmd - ReadExisting: '" + st + "'"); } catch //catch (Exception ex) { //DisplayData(MessageType.Error, ex.Message + "\r\n"); DisplayData(MessageType.Error, "Can not write to port.\r\n"); return(false); } return(true); }
public void finaliseDownload(Boolean success) { Console.WriteLine("::finaliseDownload()"); Console.WriteLine("::finaliseDownload() - removed the downloadHandler"); comPort.DataReceived -= downloadHandler; _recvTransType = ReceiveTransmissionType.Sync; if (Status(false) != State.LoggedIn) { sendAbort(); if (Status(false) != State.LoggedIn) { Console.WriteLine("Problem aborting download"); } } dl.file.Close(); dl.downloading = false; dl.finaliseCallback(success); }
public bool readDeviceMenu(ref String menu) { _recvTransType = ReceiveTransmissionType.Sync; try { WriteData("\rms\r"); menu = waitForAnswer("return"); return(true); } catch (Exception ex) { #if DEBUG DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace); #else DisplayData(MessageType.Error, ex.Message); #endif } return(false); }
public void finaliseDownload(Boolean success) { debugLog("::finaliseDownload()"); debugLog("::finaliseDownload() - removed the downloadHandler"); comPort.DataReceived -= downloadHandler; _recvTransType = ReceiveTransmissionType.Sync; //string st = comPort.ReadExisting(); Thread.Sleep(200); string st = comPort.ReadExisting().ToLower(); if (st.Length > 400 && !st.Contains("return") && !st.Contains("statistics")) { sendAbort(); } dl.file.Close(); dl.downloading = false; form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(success); })); }
public bool readDeviceStats(ref String stats) { _recvTransType = ReceiveTransmissionType.Sync; try { comPort.ReadExisting(); WriteData("ms\r"); stats = waitForAnswer("return"); return(true); } catch (Exception ex) { #if DEBUG DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace); #else DisplayData(MessageType.Error, ex.Message); #endif } return(false); }
public bool getResult() { String st; _recvTransType = ReceiveTransmissionType.Sync; try { st = comPort.ReadLine(); Console.WriteLine("::sendCmd - read: '" + st + "'"); if ((st != string.Empty) && (st.IndexOf("return=1") >= 0)) { return(true); } } catch //catch (Exception ex) { //DisplayData(MessageType.Error, ex.Message + "\r\n"); DisplayData(MessageType.Error, "Can not read from port.\r\n"); return(false); } return(false); }
public bool getResult() { String st; _recvTransType = ReceiveTransmissionType.Sync; try { st = waitForAnswer("return").ToLower(); if (st.Contains("return=1")) { return(true); } } catch (Exception ex) { #if DEBUG DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace); #else DisplayData(MessageType.Error, ex.Message); #endif return(false); } return(false); }
string waitForAnswer(string[] expected) { string st; //bool abort_sent = false; StringBuilder sb = new StringBuilder(); for (int i = 0; i < expected.Length; i++) { expected[i] = expected[i].ToLower(); } _recvTransType = ReceiveTransmissionType.Sync; do { try { st = comPort.ReadLine() + '\n'; } catch (System.Exception) { sb.Append(comPort.ReadExisting()); return(sb.ToString()); } debugLog("waitForAnswer() read: '" + st + "'"); sb.Append(st); st = st.ToLower(); foreach (string s in expected) { if (st.Contains(s)) { return(sb.ToString()); } } }while (true); }
public bool enterBootLoader() { _recvTransType = ReceiveTransmissionType.Sync; int oldTimeOut = comPort.ReadTimeout; try { string [] answers = { "boot v", "return=1" }; string st; comPort.ReadExisting(); WriteData("\rmfyk\rmr\r"); /* try enter (for not logged in) => will generate an answer if not in bootloader mode */ /* try reboot (for logged in) => which will generate reply return=1 */ st = waitForAnswer(answers).ToLower(); if (st == "" || /* case1: old bootloader, already in bootloader: will not reply anything */ st.Contains(answers[0]) || /* case2: new bootloader, already in bootloader, will say: "boot v" */ st.Contains(answers[1])) /* case3: old bootloader, logged in, will say return=1, as accepted the firmware update request "mfyk" */ /* case4: new bootloader, logged in, will say return=1, as accepted the firmware update request "mfyk" */ { return(true); } /* case 5: old bootloader logged out: will fail as bold bootloader does not support this feature */ /* case 6: new bootloader logged out: will expect removal and reinsertion of device. */ WriteData("\r"); comPort.ReadTimeout = 10000; st = waitForAnswer(answers[0]).ToLower(); comPort.ReadTimeout = oldTimeOut; if (!st.Contains(answers[0])) // not "boot v" { return(false); } int i = 0; while (comPort.BytesToRead == 0 && i < 1000) { i++; WriteData("zzzzz"); } st = waitForAnswer(answers[0]).ToLower(); if (st.Contains(answers[0])) // "boot v" ? { return(true); } else { return(false); } } catch (Exception ex) { comPort.ReadTimeout = oldTimeOut; #if DEBUG DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace); #else DisplayData(MessageType.Error, ex.Message); #endif return(false); } }
public State Status(bool show) { int i; String st = ""; try { if (!comPort.IsOpen) { if (show) { DisplayData(MessageType.Error, "Port " + comPort.PortName + " is closed"); } lastState = State.PortClosed; return(lastState); } _recvTransType = ReceiveTransmissionType.Sync; comPort.ReadExisting(); } catch (Exception ex) { #if DEBUG DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace); #else DisplayData(MessageType.Error, ex.Message); #endif lastState = State.Disconnected; return(lastState); } comPort.ReadExisting(); debugLog("-------------------------------------------"); for (i = 0; i < 3; i++) { try { WriteData("\r"); string[] answers = { "s) statistics", "l) login", "brute force" }; st = waitForAnswer(answers).ToLower(); if (st.Contains(answers[0])) { //if (show && lastState != State.LoggedIn) // DisplayData(MessageType.Incoming, "Logged in successfully"); lastState = State.LoggedIn; return(lastState); } else if (st.Contains(answers[1])) { if (show && lastState != State.LoggedOut) { DisplayData(MessageType.Incoming, "Connected; authentification required"); } lastState = State.LoggedOut; return(lastState); } else if (st.Contains(answers[2])) { GetUnlockTimes(st, out blockMaxTime, out blockedCurrentTime); if (show) { int firstBlockMaxTime; int firstBlockedCurrentTime; firstBlockMaxTime = blockMaxTime; firstBlockedCurrentTime = blockedCurrentTime; DateTime startTime = DateTime.Now; Thread.Sleep(1000); DateTime statusTime = DateTime.Now; Status(false); DateTime now = DateTime.Now; TimeSpan executionTime = now - statusTime; TimeSpan totalTime = now - startTime; TimeSpan sleepTime = statusTime - startTime; double units = 1.0; TimeSpan diffTime = totalTime - executionTime - sleepTime; if (diffTime.Milliseconds > 50) { units = 1.2; } string msg = BuildUnlockString(firstBlockMaxTime, firstBlockedCurrentTime, units); blockTimeMessage = msg; DisplayData(MessageType.Incoming, "Device blocked!" + msg); } lastState = State.Blocked; return(lastState); } else if (st.Length > 1000) { sendAbort(); } } catch (Exception ex) { if (i == 2 && show) { #if DEBUG DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace); #else DisplayData(MessageType.Error, ex.Message); #endif } } } if (show) { DisplayData(MessageType.Error, "Device is not responding on " + comPort.PortName); } lastState = State.Disconnected; return(lastState); }
public bool Download(bool full, String filename, DownloadCallback finaliseCallback) { String st; int length = 0; int block = 0; debugLog("::Download()"); //Assert(dl.downloading == false); dl.finaliseCallback = finaliseCallback; _recvTransType = ReceiveTransmissionType.Sync; try { st = comPort.ReadExisting(); debugLog("::Download - ReadExisting: '" + st + "'"); if (full) { WriteData("mdA\r"); } else { WriteData("md\r"); } bool sigOk = getString("dl"); length = getLong(); block = getLong(); if (!sigOk || block == 0) { DisplayData(MessageType.Error, "Fatal error while talking with the device..."); sendAbort(); form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(false); })); return(false); } if (length == 0) { DisplayData(MessageType.Error, "Device is empty"); form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(false); })); return(false); } } catch (Exception ex) { sendAbort(); DisplayData(MessageType.Error, ex.Message); form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(false); })); return(false); } try { _recvTransType = ReceiveTransmissionType.Async; dl.file = new FileStream(filename, FileMode.Create, FileAccess.Write); dl.blockSize = block + 4; dl.blockOffset = 0; dl.fileSize = length; dl.fileOffset = 0; dl.buf = new byte[block + 4]; dl.lastOk = 0; dl.previousOk = 0; dl.retrying = false; dl.retrySignatureIndex = 0; dl.retries = 0; dl.downloading = true; debugLog("::Download - filesize = " + dl.fileSize + " in blocks of = " + dl.blockSize); if (progressBar != null) { progressBar.Maximum = length; } DisplayData(MessageType.Normal, "Downloading " + length + " bytes ..."); downloadHandler(null, null); if (dl.downloading) { debugLog("::Download() - added the download handler"); comPort.DataReceived += new SerialDataReceivedEventHandler(downloadHandler); return(true); } else { return(false); } } catch (Exception ex) { if (dl.file != null) { dl.file.Close(); } DisplayData(MessageType.Error, ex.Message); form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(false); })); return(false); } }
public State Status(bool show) { int i; string st = ""; try { if (!comPort.IsOpen) { if (show) { DisplayData(MessageType.Error, "Cannot read status: Port " + comPort.PortName + " is closed\r\n"); } return(State.Disconnected); } _recvTransType = ReceiveTransmissionType.Sync; comPort.ReadExisting(); } catch //catch (Exception ex) { //DisplayData(MessageType.Error, ex.Message + "\r\n"); DisplayData(MessageType.Error, "Error reading device status.\r\n"); return(State.Disconnected); } for (i = 0; i < 3; i++) { try { st += comPort.ReadExisting(); Console.WriteLine("::Status - ReadExisting: '" + st + "'"); WriteData("\r"); st += comPort.ReadLine(); Console.WriteLine("::Status - ReadLine: '" + st + "'"); if (st == string.Empty) { continue; } if (st.IndexOf("s) Statistics") >= 0) { if (show) { DisplayData(MessageType.Incoming, "Logged in successfully\r\n"); } return(State.LoggedIn); } if (st.IndexOf("l) LogIn") >= 0) { if (show) { DisplayData(MessageType.Incoming, "Connected; authentification required\r\n"); } return(State.LoggedOut); } if (st.IndexOf("Brute force") >= 0) { if (show) { DisplayData(MessageType.Incoming, "Device blocked!\r\n"); } return(State.Blocked); } } catch //catch (Exception ex) { if (i == 2 && show) { //DisplayData(MessageType.Error, ex.Message + "\r\n"); DisplayData(MessageType.Error, "Error reading device status.\r\n"); } } } try { if (show) { DisplayData(MessageType.Error, "Device is not responding on " + comPort.PortName + "\r\n"); } } catch //catch (Exception ex) { //DisplayData(MessageType.Error, ex.Message + "\r\n"); DisplayData(MessageType.Error, "Error reading device status.\r\n"); }; return(State.Disconnected); }