예제 #1
0
        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));
        }
예제 #2
0
        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);
        }