private void SendReceive( byte device, byte command, bool pad, byte[] payloadBytes, StringBuilder builder) { SsmPacket probe = SsmPacket.CreateArbitrary(device, command, pad, payloadBytes); builder.AppendFormat( "Sending {0:X2} to {1:X2} with payload of {2} bytes:", command, device, payloadBytes.Length); builder.AppendLine(); builder.AppendLine(MainForm.BytesToString(payloadBytes)); builder.AppendLine(); byte[] requestBuffer = probe.Data; this.stream.Write(requestBuffer, 0, requestBuffer.Length); System.Threading.Thread.Sleep(250); byte[] responseBuffer = new byte[2000]; int bytesRead = this.stream.Read(responseBuffer, 0, responseBuffer.Length); builder.AppendFormat( "Received {0} bytes total, {1} after subtracting echo, {2} payload bytes.", bytesRead, bytesRead - probe.Data.Length, bytesRead - (probe.Data.Length + 6)); builder.AppendLine(); SsmPacket response = SsmPacket.ParseResponse(responseBuffer, 0, bytesRead); builder.AppendLine("Response packet:"); builder.AppendLine(BytesToString(response.Data)); builder.AppendLine(); builder.AppendLine("Response payload:"); builder.AppendFormat("Header: {0}", response.Data[0].ToHex()); builder.AppendLine(); builder.AppendFormat("Dest: {0}", response.Data[1].ToHex()); builder.AppendLine(); builder.AppendFormat("Source: {0}", response.Data[2].ToHex()); builder.AppendLine(); builder.AppendFormat("DataSize: {0}", response.Data[3].ToHex()); builder.AppendLine(); builder.AppendFormat("Command: {0}", response.Data[4].ToHex()); builder.AppendLine(); builder.AppendFormat("Checksum: {0}", response.Data[response.Data.Length - 1].ToHex()); builder.AppendLine(); byte[] payload = new byte[response.Data.Length - 6]; for (int i = 5; i < response.Data.Length - 1; i++) { payload[i - 5] = response.Data[i]; } builder.AppendFormat("Payload: {0}", BytesToString(payload)); }
public void SsmPacketCreateArbitrary() { SsmPacket expectedReadRequest = SsmPacket.CreateBlockReadRequest(123, 12); SsmPacket actualReadRequest = SsmPacket.CreateArbitrary( 0x10, (byte)SsmCommand.ReadBlockRequest, true, new byte[] { 0, 0, 123, 11, }); Utility.CompareArrays("Block read request", expectedReadRequest.Data, actualReadRequest.Data); }