public static void Upload(string firmwarebin, ICommsSerial comPort) { comPort.ReadTimeout = 2000; using (var fs = new FileStream(firmwarebin, FileMode.Open)) { var len = (int)fs.Length; len = (len % 128) == 0 ? len / 128 : (len / 128) + 1; var startlen = len; int a = 1; int NoAckCount = 0; while (len > 0) { LogEvent?.Invoke("Uploading block " + a + "/" + startlen); SendBlock(fs, comPort, a); // responce ACK var ack = comPort.ReadByte(); while (ack == 'C') { ack = comPort.ReadByte(); } if (ack == ACK) { NoAckCount = 0; len--; a++; ProgressEvent?.Invoke(1 - ((double)len / (double)startlen)); } else if (ack == NAK) { MsgBox.CustomMessageBox.Show("Corrupted packet. Please power cycle and try again.\r\n", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); len = 0; } else { NoAckCount++; if (NoAckCount >= 10) { } } } } // boot Thread.Sleep(100); comPort.Write("\r\n"); Thread.Sleep(100); comPort.Write("BOOTNEW\r\n"); Thread.Sleep(100); }
void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (!comPort.IsOpen) { return; } try { lock (thisLock) { System.Threading.Thread.Sleep(20); byte[] buffer = new byte[256]; int a = 0; while (comPort.BytesToRead > 0) { byte indata = (byte)comPort.ReadByte(); buffer[a] = indata; if (buffer[a] >= 0x20 && buffer[a] < 0x7f || buffer[a] == (int)'\n' || buffer[a] == (int)'\r') { a++; } } addText(ASCIIEncoding.ASCII.GetString(buffer, 0, a + 1)); } } catch (Exception) { if (!threadrun) { return; } TXT_terminal.AppendText("Error reading com port\r\n"); } }
bool upload_xmodem(ICommsSerial comPort) { // try xmodem mode // xmodem - short cts to ground try { uploader_LogEvent("Trying XModem Mode"); //comPort.BaudRate = 57600; comPort.BaudRate = MainV2.comPort.BaseStream.BaudRate; comPort.ReadTimeout = 1000; Thread.Sleep(2000); var tempd = comPort.ReadExisting(); Console.WriteLine(tempd); comPort.Write("U"); Thread.Sleep(1000); var resp1 = Serial_ReadLine(comPort); // echo var resp2 = Serial_ReadLine(comPort); // echo 2 var tempd2 = comPort.ReadExisting(); // posibly bootloader info / use to sync // identify comPort.Write("i"); // responce is rfd900.... var resp3 = Serial_ReadLine(comPort); //echo var resp4 = Serial_ReadLine(comPort); // newline var resp5 = Serial_ReadLine(comPort); // bootloader info uploader_LogEvent(resp5); if (resp5.Contains("RFD900")) { // start upload comPort.Write("u"); var resp6 = Serial_ReadLine(comPort); // echo var resp7 = Serial_ReadLine(comPort); // Ready if (resp7.Contains("Ready")) { comPort.ReadTimeout = 3500; // responce is C var isC = comPort.ReadByte(); var temp = comPort.ReadExisting(); if (isC == 'C') { XModem.LogEvent += uploader_LogEvent; XModem.ProgressEvent += uploader_ProgressEvent; // start file send XModem.Upload(@"SiK900x.bin", comPort); XModem.LogEvent -= uploader_LogEvent; XModem.ProgressEvent -= uploader_ProgressEvent; return(true); } } } } catch (Exception ex2) { log.Error(ex2); } return(false); }
public static void Upload(string firmwarebin, ICommsSerial comPort) { var fs = new FileStream(firmwarebin, FileMode.Open); var len = (int)fs.Length; len = (len % 128) == 0 ? len / 128 : (len / 128) + 1; var startlen = len; int a = 1; while (len > 0) { if (LogEvent != null) { LogEvent("Uploading block " + a + "/" + startlen); } XModem.SendBlock(fs, comPort, a); // responce ACK var ack = comPort.ReadByte(); while (ack == 'C') { ack = comPort.ReadByte(); } if (ack == ACK) { len--; a++; if (ProgressEvent != null) { ProgressEvent(len / startlen); } } else if (ack == NAK) { CustomMessageBox.Show("Corrupted packet. Please power cycle and try again.\r\n", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); len = 0; } } // boot comPort.Write("b"); }
private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (!comPort.IsOpen) { return; } // if btr > 0 then this shouldnt happen comPort.ReadTimeout = 300; try { lock (thisLock) { var buffer = new byte[256]; var a = 0; while (comPort.IsOpen && comPort.BytesToRead > 0 && !inlogview) { var indata = (byte)comPort.ReadByte(); buffer[a] = indata; if (buffer[a] >= 0x20 && buffer[a] < 0x7f || buffer[a] == '\n' || buffer[a] == 0x1b) { a++; } if (indata == '\n') { break; } if (a == (buffer.Length - 1)) { break; } } addText(Encoding.ASCII.GetString(buffer, 0, a + 1)); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); if (!threadrun) { return; } TXT_terminal.AppendText("Error reading com port\r\n"); } }
string Serial_ReadLine(ICommsSerial comPort) { StringBuilder sb = new StringBuilder(); DateTime Deadline = DateTime.Now.AddMilliseconds(comPort.ReadTimeout); while (DateTime.Now < Deadline) { if (comPort.BytesToRead > 0) { byte data = (byte)comPort.ReadByte(); sb.Append((char)data); if (data == '\n') break; } } return sb.ToString(); }
/// <summary> /// Receive a byte. /// </summary> private byte recv() { byte b; var Deadline = DateTime.Now.AddMilliseconds(port.ReadTimeout); while (DateTime.Now < Deadline && port.BytesToRead == 0) { } if (port.BytesToRead == 0) { throw new Exception("Timeout"); } b = (byte)port.ReadByte(); log(string.Format("recv {0:X}\n", b), 5); return(b); }
bool upload_xmodem(ICommsSerial comPort) { // try xmodem mode // xmodem - short cts to ground try { uploader_LogEvent("Trying XModem Mode"); //comPort.BaudRate = 57600; comPort.BaudRate = MainV2.comPort.BaseStream.BaudRate; comPort.ReadTimeout = 1000; Thread.Sleep(2000); var tempd = comPort.ReadExisting(); Console.WriteLine(tempd); comPort.Write("U"); Thread.Sleep(1000); var resp1 = Serial_ReadLine(comPort); // echo var resp2 = Serial_ReadLine(comPort); // echo 2 var tempd2 = comPort.ReadExisting(); // posibly bootloader info / use to sync // identify comPort.Write("i"); // responce is rfd900.... var resp3 = Serial_ReadLine(comPort); //echo var resp4 = Serial_ReadLine(comPort); // newline var resp5 = Serial_ReadLine(comPort); // bootloader info uploader_LogEvent(resp5); if (resp5.Contains("RFD900")) { // start upload comPort.Write("u"); var resp6 = Serial_ReadLine(comPort); // echo var resp7 = Serial_ReadLine(comPort); // Ready if (resp7.Contains("Ready")) { comPort.ReadTimeout = 3500; // responce is C var isC = comPort.ReadByte(); var temp = comPort.ReadExisting(); if (isC == 'C') { XModem.LogEvent += uploader_LogEvent; XModem.ProgressEvent += uploader_ProgressEvent; // start file send XModem.Upload(@"SiK900x.bin", comPort); XModem.LogEvent -= uploader_LogEvent; XModem.ProgressEvent -= uploader_ProgressEvent; return true; } } } } catch (Exception ex2) { log.Error(ex2); } return false; }
/// <summary> /// /// </summary> /// <param name="serialPort"></param> /// <returns></returns> static byte[] readpacket(ICommsSerial serialPort) { byte[] temp = new byte[4000]; byte[] mes = new byte[2] { 0x0, 0xC0 }; // fail int a = 7; int count = 0; serialPort.ReadTimeout = 1000; while (count < a) { //Console.WriteLine("count {0} a {1} mes leng {2}",count,a,mes.Length); try { temp[count] = (byte)serialPort.ReadByte(); } catch { break; } //Console.Write("{1}", temp[0], (char)temp[0]); if (temp[0] != 0x1b) { count = 0; continue; } if (count == 3) { a = (temp[2] << 8) + temp[3]; mes = new byte[a]; a += 5; } if (count >= 5) { mes[count - 5] = temp[count]; } count++; } //Console.WriteLine("read ck"); try { temp[count] = (byte)serialPort.ReadByte(); } catch { } count++; Array.Resize <byte>(ref temp, count); //Console.WriteLine(this.BytesToRead); return(mes); }
public static void Upload(string firmwarebin, ICommsSerial comPort) { var fs = new FileStream(firmwarebin, FileMode.Open); var len = (int)fs.Length; len = (len % 128) == 0 ? len / 128 : (len / 128) + 1; var startlen = len; int a = 1; while (len > 0) { if (LogEvent != null) LogEvent("Uploading block " + a + "/" + startlen); XModem.SendBlock(fs, comPort, a); // responce ACK var ack = comPort.ReadByte(); while (ack == 'C') ack = comPort.ReadByte(); if (ack==ACK) { len--; a++; if (ProgressEvent != null) ProgressEvent(len / startlen); } else if (ack==NAK) { CustomMessageBox.Show("Corrupted packet. Please power cycle and try again.\r\n", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); len = 0; } } // boot comPort.Write("b"); }
void Sleep(int ms, ICommsSerial comPortT) { DateTime start = DateTime.Now; Console.WriteLine("sleep in"); while (start.AddMilliseconds(ms) > DateTime.Now) { while (comPortT.BytesToRead > 0) { Console.Write((char)comPortT.ReadByte()); } System.Threading.Thread.Sleep(1); } Console.WriteLine("sleep out"); }