Ejemplo n.º 1
0
 public void TestDecoding()
 {
     Assert.True(decoded1.SequenceEqual(COBS.Decode(encoded1)));
     Assert.True(decoded2.SequenceEqual(COBS.Decode(encoded2)));
     Assert.True(decoded3.SequenceEqual(COBS.Decode(encoded3)));
     Assert.True(decoded4.SequenceEqual(COBS.Decode(encoded4)));
     Assert.True(decoded5.SequenceEqual(COBS.Decode(encoded5)));
     Assert.True(decoded6.SequenceEqual(COBS.Decode(encoded6)));
     Assert.True(decoded7.SequenceEqual(COBS.Decode(encoded7)));
     Assert.True(decoded8.SequenceEqual(COBS.Decode(encoded8)));
     Assert.True(decoded9.SequenceEqual(COBS.Decode(encoded9)));
 }
Ejemplo n.º 2
0
    /// <summary>
    /// Threaded function. Loops and checks for incoming packets.
    /// </summary>
    private void ReceiveThreadDoTask()
    {
        try
        {
            byte[] receiveBuffer = new byte[bufferSize];
            int    bytesReceived = 0;

            while (running)
            {
                while (sendPackets.Count > 0)
                {
                    byte[] serialPacket;
                    lock (sendLockObject)
                    {
                        serialPacket = sendPackets.Dequeue();
                    }
                    stream.Write(serialPacket, 0, serialPacket.Length);
                }

                if (stream.BytesToRead > 0)
                {
                    int x = stream.ReadByte();

                    if (x == -1)
                    {
//                        Debug.LogError("End of Stream!");
//                        running = false;
                        continue;
                    }

                    if (x == 0)
                    {
                        // decode
                        byte[] decodedBuffer     = new byte[receiveBuffer.Length];
                        int    decodedBufferSize = COBS.Decode(ref receiveBuffer, bytesReceived, ref decodedBuffer);
                        Array.Resize(ref decodedBuffer, decodedBufferSize);

                        // disect packt
                        int             len        = decodedBuffer[0] | (decodedBuffer[1] << 8);
                        int             checksum   = decodedBuffer[2] | (decodedBuffer[3] << 8);
                        int             cmd        = decodedBuffer[4];
                        ArduinoDataType dataType   = (ArduinoDataType)decodedBuffer[5];
                        byte[]          dataPacket = new byte[decodedBuffer.Length - headerSize];
                        Array.Copy(decodedBuffer, headerSize, dataPacket, 0, decodedBufferSize - headerSize);

                        // check length
                        if (dataPacket.Length != len)
                        {
                            Debug.Log(String.Format("Invalid Packet Length. Want: {0} - Have: {1}", len, dataPacket.Length));
                            continue;
                        }

                        // checksum
                        int packetChecksum = Crc16.ComputeChecksum(dataPacket);
                        if (checksum != packetChecksum)
                        {
                            Debug.Log(String.Format("Invalid Checksum. Want: {0} - Have: {1}", checksum, packetChecksum));
                            continue;
                        }

                        bytesReceived = 0;

                        // store in queue
                        lock (receiveLockObject)
                        {
                            receivedPackets.Enqueue(new ArduinoBuffer(cmd, dataType, dataPacket));
                        }
                    }
                    else
                    {
                        if (bytesReceived >= bufferSize)
                        {
                            // TODO handle differently!
                            bytesReceived = 0;
                        }
                        else
                        {
                            receiveBuffer[bytesReceived++] = (byte)x;
                        }
                    }
                }
            }
        }
        catch (ThreadAbortException ex)
        {
            Debug.Log("Aborting UDP Receiver Thread!");
//              Debug.LogException(ex);
        }
    }
Ejemplo n.º 3
0
 public void Decoding10()
 {
     byte[] expected10 = COBS.Decode(encoded10);
     Assert.IsTrue(expected10.SequenceEqual(decoded10));
 }
Ejemplo n.º 4
0
 public void Decoding8()
 {
     byte[] expected8 = COBS.Decode(encoded8);
     Assert.IsTrue(expected8.SequenceEqual(decoded8));
 }
Ejemplo n.º 5
0
 public void Decoding9()
 {
     byte[] expected9 = COBS.Decode(encoded9);
     Assert.IsTrue(expected9.SequenceEqual(decoded9));
 }
Ejemplo n.º 6
0
 public void Decoding6()
 {
     byte[] expected6 = COBS.Decode(encoded6);
     Assert.IsTrue(expected6.SequenceEqual(decoded6));
 }
Ejemplo n.º 7
0
 public void Decoding7()
 {
     byte[] expected7 = COBS.Decode(encoded7);
     Assert.IsTrue(expected7.SequenceEqual(decoded7));
 }
Ejemplo n.º 8
0
 public void Decoding5()
 {
     byte[] expected5 = COBS.Decode(encoded5);
     Assert.IsTrue(expected5.SequenceEqual(decoded5));
 }
Ejemplo n.º 9
0
 public void Decoding4()
 {
     byte[] expected4 = COBS.Decode(encoded4);
     Assert.IsTrue(expected4.SequenceEqual(decoded4));
 }
Ejemplo n.º 10
0
 public void Decoding3()
 {
     byte[] expected3 = COBS.Decode(encoded3);
     Assert.IsTrue(expected3.SequenceEqual(decoded3));
 }
Ejemplo n.º 11
0
 public void Decoding2()
 {
     byte[] expected2 = COBS.Decode(encoded2);
     Assert.IsTrue(expected2.SequenceEqual(decoded2));
 }
Ejemplo n.º 12
0
 public void Decoding1()
 {
     byte[] expected1 = COBS.Decode(encoded1);
     Assert.IsTrue(expected1.SequenceEqual(decoded1));
 }