public void setPacketCollectorStaus(PacketCollectorStates packetCollectorStates) { this._packetCollectorStates = packetCollectorStates; }
//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