示例#1
0
 public void setPacketCollectorStaus(PacketCollectorStates packetCollectorStates)
 {
     this._packetCollectorStates = packetCollectorStates;
 }
示例#2
0
        //public static void Close()
        //{
        //    _Run = false;
        //    if (readThread != null)
        //    {
        //        if (readThread.IsAlive)
        //            readThread.Join();
        //    }
        //    if (_serialPort != null)
        //    {
        //        if (_serialPort.IsOpen)
        //        {
        //            _serialPort.Close();
        //            _serialPort.Dispose();
        //        }
        //    }
        //    if (_rxQueue != null)
        //    {
        //        _rxQueue.Dispose();
        //        rxQueueIsDisposed = true;
        //    }
        //}

        //---------------------- Private methods ------------------------------

        //public static void PacketCollector()
        //{
        //    while (_Run)
        //    {
        //        Thread.Sleep(1);
        //        if (_serialPort.IsOpen)
        //        {
        //            try
        //            {
        //                if (_serialPort.BytesToRead > 0)
        //                {
        //                    int received = _serialPort.ReadByte();
        //                    PacketDecoder((byte)received);
        //                }
        //            }
        //            catch (TimeoutException) { }
        //            catch (UnauthorizedAccessException) { }
        //        }
        //    }
        //}

        // Packet format is:
        // [STX1][STX2][STX3] [LEN] [DATA] [LRC]
        //  8bit  8bit  8bit  16bit N bit   8bit
        // LEN + DATA are used to calculate the LRC
        public void PacketDecoder(byte rxByte)
        {
            switch (_packetCollectorStates)
            {
            case PacketCollectorStates.STATE_STX_1:
                if (rxByte == STX_1)
                {
                    _packetCollectorStates = PacketCollectorStates.STATE_STX_2;
                }
                break;

            case PacketCollectorStates.STATE_STX_2:
                if (rxByte == STX_2)
                {
                    _packetCollectorStates = PacketCollectorStates.STATE_STX_3;
                }
                else
                {
                    _packetCollectorStates = PacketCollectorStates.STATE_STX_1;
                }
                break;

            case PacketCollectorStates.STATE_STX_3:
                if (rxByte == STX_3)
                {
                    _packetCollectorStates = PacketCollectorStates.STATE_STX_LEN;
                }
                else
                {
                    _packetCollectorStates = PacketCollectorStates.STATE_STX_1;
                }
                break;

            case PacketCollectorStates.STATE_STX_LEN:
                _calLRC           = 0;
                _rxBufferWriteIdx = 0;

                _calLRC               ^= rxByte;
                _rxPacket.Length       = rxByte;
                _packetCollectorStates = PacketCollectorStates.STATE_STX_DATA;

                break;

            case PacketCollectorStates.STATE_STX_DATA:
                _calLRC ^= rxByte;
                _rxPacket.Buffer[_rxBufferWriteIdx++] = rxByte;
                if (_rxBufferWriteIdx == _rxPacket.Length)
                {
                    _packetCollectorStates = PacketCollectorStates.STATE_STX_LRC;
                }

                break;

            case PacketCollectorStates.STATE_STX_LRC:
                if (_calLRC == rxByte)
                {
                    // Valid Packet received. Push it to queue
                    TL_Packet pct = new TL_Packet();
                    pct       = _rxPacket;
                    _rxPacket = new TL_Packet();
                    _rxQueue.Add(pct);
                }
                _packetCollectorStates = PacketCollectorStates.STATE_STX_1;
                break;

            default:
                _packetCollectorStates = PacketCollectorStates.STATE_STX_1;
                break;
            } // End of switch
        }     //End of PacketDecoder method