public List <byte> Encode(List <byte> rawBytes) { List <byte> tmpBytes = new List <byte>(rawBytes); tmpBytes.Add(Crc8.Calculate(tmpBytes)); List <byte> encodedData = new List <byte>(); encodedData.Add((byte)FrameChar.END); for (int i = 0; i < tmpBytes.Count; i++) { switch (tmpBytes[i]) { case (byte)FrameChar.END: encodedData.Add((byte)FrameChar.ESC); encodedData.Add((byte)FrameChar.ESC_END); break; case (byte)FrameChar.ESC: encodedData.Add((byte)FrameChar.ESC); encodedData.Add((byte)FrameChar.ESC_ESC); break; default: encodedData.Add(tmpBytes[i]); break; } } encodedData.Add((byte)FrameChar.END); return(encodedData); }
public byte[] encode(List <byte> bytes) { List <byte> frame = new List <byte>(); setCommLog(bytes, "Tx"); byte crc = Crc8.Calculate(bytes); bytes.Add(crc); frame.Add((byte)FrameChar.END); for (int i = 0; i < bytes.Count; i++) { switch (bytes[i]) { case (byte)FrameChar.END: frame.Add((byte)FrameChar.ESC); frame.Add((byte)FrameChar.ESC_END); break; case (byte)FrameChar.ESC: frame.Add((byte)FrameChar.ESC); frame.Add((byte)FrameChar.ESC_ESC); break; default: frame.Add(bytes[i]); break; } } frame.Add((byte)FrameChar.END); return(frame.ToArray()); }
public void decode(byte[] bytes) { foreach (var tmp in bytes) { RxBytes.Enqueue(tmp); } while (RxBytes.Count != 0) { byte tmp = RxBytes.Dequeue(); if (tmp == (byte)FrameChar.END) { // Start SLIP Frame if (RcvFlg == false) { RcvFlg = true; RcvFrame = new List <byte>(); } else { if (RcvFrame.Count == 0) { // receive order FRAMECHAR.END,FRAMECHAR.END // Last FRAMECHAR.END might be Start of Frame RcvFlg = true; } else { byte crc = Crc8.Calculate(RcvFrame); if ((crc == 0x00) && (RcvFrame.Count >= 2)) { // End SLIP Frame // delete useless crc data size RcvFrame.RemoveRange((RcvFrame.Count - 1), 1); string time = setCommLog(RcvFrame, "Rx"); RxDataParam rxData = new RxDataParam(); rxData.Time = time; rxData.Data = new List <byte>(RcvFrame); myComponents.ReceiveStream.Enqueue(rxData); RcvFrame = new List <byte>(); RcvFlg = false; } else { RcvFlg = true; RcvFrame = new List <byte>(); } } } } else { if (EscFlg == true) { EscFlg = false; switch (tmp) { case (byte)FrameChar.ESC_END: RcvFrame.Add((byte)FrameChar.END); break; case (byte)FrameChar.ESC_ESC: RcvFrame.Add((byte)FrameChar.ESC); break; } } else if (tmp == (byte)FrameChar.ESC) { EscFlg = true; } else { if (RcvFlg == true) { RcvFrame.Add(tmp); } } } } }