Exemple #1
0
        private void ReadBytes(byte[] data, int offset, int count)
        {
            //DateTime startTime = DateTime.Now;
            do
            {
                int bytesRead = serialPort.Read(data, offset, count);
                offset += bytesRead;
                count  -= bytesRead;

                //if ((DateTime.Now - startTime).Milliseconds > serialPort.ReadTimeout)
                //{

                //   throw new Exception();
                //}
                if (bytesRead == 0)
                {
                    serialPort.DiscardInBuffer();
                    break;
                }
                Thread.Sleep(1);
            } while (count > 0);

            if (count != 0)
            {
                throw new Exception();
            }
        }
        void _readThreadStart()
        {
            int bytesToRead = 0;

            byte[] readBuffer;

            cardID = new string(null);

            for (; ;)
            {
                bytesToRead = serialPort.BytesToRead;

                if (bytesToRead > 0)
                {
                    readBuffer = new byte[bytesToRead];

                    serialPort.Read(readBuffer, 0, bytesToRead);

                    for (int i = 0; i < readBuffer.Length; i++)
                    {
                        cardID += (char)readBuffer[i];

                        if (cardID.Length == ID_LENGTH)
                        {
                            if (cardID[0] != 2)
                            {
                                HandleChecksumError();
                                break;
                            }

                            //verify checksum
                            int cs = 0;
                            for (int x = 1; x < 10; x += 2)
                            {
                                cs ^= ASCIIToNum((char)cardID[x], (char)cardID[x + 1]);
                            }
                            if (cs != cardID[11])
                            {
                                HandleChecksumError();
                                break;
                            }

                            OnIDReadyEvent(this, cardID);

                            System.Threading.Thread.Sleep(100);

                            cardID = new string(null);

                            break;
                        }
                    }
                }

                System.Threading.Thread.Sleep(10);
            }
        }