示例#1
0
        static void ReadMultipleTest(Stream ecuStream, SerialPort port)
        {
            SsmPacket ecuInitRequest = SsmPacket.CreateEcuIdentifierRequest();

            byte[] buffer = ecuInitRequest.Data;
            ecuStream.Write(buffer, 0, buffer.Length);

            Thread.Sleep(100);

            byte[]    receiveBuffer   = new byte[1000];
            int       expectedLength  = 68;
            int       receiveLength   = ecuStream.Read(receiveBuffer, 0, receiveBuffer.Length);
            SsmPacket ecuInitResponse = SsmPacket.ParseResponse(receiveBuffer, 0, receiveLength);

            // TPS and IPW
            UInt32[] addresses = new UInt32[] { 0x29, 0x20 };

            for (int i = 0; i < 1000 && !Console.KeyAvailable; i++)
            {
                SsmPacket readRequest = SsmPacket.CreateMultipleReadRequest(addresses);
                buffer = readRequest.Data;
                ecuStream.Write(buffer, 0, buffer.Length);

                Thread.Sleep(100);
                expectedLength = 21;
                receiveLength  = ecuStream.Read(receiveBuffer, 0, expectedLength);
                if (!Check("ReceiveLength", receiveLength, expectedLength))
                {
                    if (port != null)
                    {
                        port.DiscardInBuffer();
                        port.DiscardOutBuffer();
                    }
                    continue;
                }

                SsmPacket readResponse = SsmPacket.ParseResponse(receiveBuffer, 0, receiveLength);
                if (!Check("CommandID", readResponse.Command, SsmCommand.ReadAddressesResponse))
                {
                    if (port != null)
                    {
                        port.DiscardInBuffer();
                        port.DiscardOutBuffer();
                    }
                    continue;
                }
                Console.WriteLine(readResponse.Values[0] + " " + readResponse.Values[1]);
            }
        }
示例#2
0
        public void SsmPacketMultipleReadRequest()
        {
            List <int> addresses = new List <int>();

            addresses.Add(0x000029);
            addresses.Add(0x000020);
            SsmPacket    packet   = SsmPacket.CreateMultipleReadRequest(addresses);
            IList <byte> expected = SamplePacketData.MultipleReadRequest;

            Utility.CompareArrays("MultipeReadRequest", expected, packet.Data);
            Assert.AreEqual(SsmDirection.ToEcu, packet.Direction, "Direction");
            Assert.AreEqual(SsmCommand.ReadAddressesRequest, packet.Command, "Command");
            Assert.AreEqual(2, packet.Addresses.Count, "Addresses.Count");
            Assert.AreEqual(0x29, packet.Addresses[0], "Addresses[0]");
            Assert.AreEqual(0x20, packet.Addresses[1], "Addresses[1]");
        }
示例#3
0
        public void SsmPacketReadOverlongFromStream()
        {
            IList <int>  addresses = new int[] { 1, 2, 3 };
            SsmPacket    request   = SsmPacket.CreateMultipleReadRequest(addresses);
            IList <byte> values    = new byte[] { 1, 2, 3 };
            SsmPacket    response  = SsmPacket.CreateMultipleReadResponse(values);
            List <byte>  buffer    = new List <byte>(request.Data);

            buffer.AddRange(response.Data);
            buffer.AddRange(new byte[] { 0, 0, 0, 0 });
            MemoryStream stream = new MemoryStream(buffer.ToArray());

            SsmPacket actual = SsmPacketParser.ReadFromStream(stream);

            Utility.CompareArrays("ReadFromStream", response.Data, actual.Data);
        }
示例#4
0
        public void MockEcuStreamMultipleAddressRead()
        {
            MockEcuStream stream    = MockEcuStream.CreateInstance();
            List <int>    addresses = new List <int>();

            addresses.Add(0x000029);
            addresses.Add(0x000020);
            SsmPacket send = SsmPacket.CreateMultipleReadRequest(addresses);

            List <byte> payload = new List <byte>();

            payload.Add(127);
            payload.Add(39);
            SsmPacket receive = SsmPacket.CreateMultipleReadResponse(payload);

            MockEcuStreamTest.SendReceive("Read", stream, send, receive);
        }
示例#5
0
        private void ReadFromStream(bool fragmented)
        {
            IList <int>  addresses = new int[] { 1, 2, 3 };
            SsmPacket    request   = SsmPacket.CreateMultipleReadRequest(addresses);
            IList <byte> values    = new byte[] { 1, 2, 3 };
            SsmPacket    response  = SsmPacket.CreateMultipleReadResponse(values);
            List <byte>  buffer    = new List <byte>(request.Data);

            buffer.AddRange(response.Data);
            MemoryStream stream = new MemoryStream(buffer.ToArray());

            if (fragmented)
            {
                stream = FragmentedStream.GetInstance(stream);
            }

            SsmPacket actual = SsmPacketParser.ReadFromStream(stream);

            Utility.CompareArrays("ReadFromStream", response.Data, actual.Data);
        }
示例#6
0
        private void ReadFromStreamAsync(bool fragmented)
        {
            IList <int>  addresses = new int[] { 1, 2, 3 };
            SsmPacket    request   = SsmPacket.CreateMultipleReadRequest(addresses);
            IList <byte> values    = new byte[] { 1, 2, 3 };
            SsmPacket    response  = SsmPacket.CreateMultipleReadResponse(values);
            List <byte>  buffer    = new List <byte>(request.Data);

            buffer.AddRange(response.Data);
            MemoryStream stream = new MemoryStream(buffer.ToArray());

            if (fragmented)
            {
                stream = FragmentedStream.GetInstance(stream);
            }

            SsmPacketParser parser      = SsmPacketParser.CreateInstance();
            IAsyncResult    asyncResult = parser.BeginReadFromStream(stream, ReadCompleted, parser);

            asyncResult.AsyncWaitHandle.WaitOne();
            Utility.CompareArrays("ReadFromStreamAsync", response.Data, this.packet.Data);
        }