private static byte[] ToBinary(GDBCommand packet) { var binPacket = new StringBuilder(); binPacket.Append(Prefix); binPacket.Append(packet.Pack); binPacket.Append(Suffix); binPacket.Append(Checksum.Calculate(TextEncoding.GetBytes(packet.Pack)).ToString("x2")); return(TextEncoding.GetBytes(binPacket.ToString())); }
public static byte[] ToBinary(CommandPacket packet) { string dataText = packet.Pack; byte[] dataBin = TextEncoding.GetBytes(dataText); StringBuilder binPacket = new StringBuilder(); binPacket.Append(PacketBinConverter.Prefix); binPacket.Append(dataText); binPacket.Append(PacketBinConverter.Suffix); binPacket.Append(Checksum.Calculate(dataBin).ToString("x2")); return(TextEncoding.GetBytes(binPacket.ToString())); }
private void IncomingPatcket() { int len = receivedData.Count; if (len == 0) { return; } if (len == 1 && receivedData[0] == '+') { receivedData.Clear(); return; } if (len == 1 && receivedData[0] == '-') { // todo: re-transmit receivedData.Clear(); return; } if (len >= 4 && receivedData[0] == '$' && receivedData[len - 3] == '#') { //Debug.WriteLine($"RECEIVED: {Encoding.UTF8.GetString(receivedData.ToArray())}"); LogEvent?.Invoke($"RECEIVED: {Encoding.UTF8.GetString(receivedData.ToArray())}"); if (currentCommand == null) { receivedData.Clear(); return; } var data = Rle.Decode(receivedData, 1, receivedData.Count - 3).ToArray(); bool ok = false; if (data != null) { // Compare checksum byte receivedChecksum = HexToDecimal(receivedData[len - 2], receivedData[len - 1]); uint calculatedChecksum = Checksum.Calculate(data); if (receivedChecksum == calculatedChecksum) { ok = true; } } currentCommand.IsResponseOk = ok; currentCommand.ResponseData = data; if (ok) { currentCommand.Decode(); } var cmd = currentCommand; currentCommand = null; receivedData.Clear(); if (cmd.Callback != null) { ThreadPool.QueueUserWorkItem(state => { cmd.Callback.Invoke(cmd); }); } return; } return; }