Пример #1
0
        private void Read()
        {
            while (_continue)
            {
                try
                {
                    int bytesToRead = _serialPort.BytesToRead;

                    if (bytesToRead > 0)
                    {
                        bytesToRead = bytesToRead + _readBytes < UART_READ_BUFFER_SIZE ? bytesToRead : UART_READ_BUFFER_SIZE - _readBytes;
                        _serialPort.Read(_readBuffer, _readBytes, bytesToRead);

                        _readBytes += bytesToRead;

                        if (_readBuffer[_readBytes - 1] == '\r')
                        {
                            CommandHost.TegamServiceCode_t serviceCode;
                            byte[] data;
                            byte[] decodedBuf = new byte[_readBytes + 1];

                            // decoded what was read from UART
                            COBS.Decode(Encoding.Default.GetBytes(_readBuffer), (ushort)(_readBytes + 1), ref decodedBuf);

                            if (CommandHost.Parse(decodedBuf, out serviceCode, out data))
                            {
                                switch (serviceCode)
                                {
                                case CommandHost.TegamServiceCode_t.TEGAM_ERROR:
                                    MessageBox.Show("Received an error from Tegam 919!", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                                    break;

                                case CommandHost.TegamServiceCode_t.TEGAM_BLUETOOTH_GET_ACK:
                                    MessageBox.Show("Current Bluetooth state: " + data[0]);
                                    break;

                                case CommandHost.TegamServiceCode_t.TEGAM_MODEL_NUMBER_SET_ACK:
                                    //MessageBox.Show("Received ACK for model number set.");
                                    break;

                                case CommandHost.TegamServiceCode_t.TEGAM_DATA_PACKET_UPD_ACK:
                                    //MessageBox.Show("Received ACK for data packet update.");
                                    break;

                                case CommandHost.TegamServiceCode_t.TEGAM_SEND_NEXT_READING_SET_REQ:
                                    MessageBox.Show("Received request to send next reading. Value: " + data[0]);
                                    break;

                                case CommandHost.TegamServiceCode_t.TEGAM_CHANNEL_READINGS_SET_ACK:
                                    //MessageBox.Show("Received ACK for channel readings set.");
                                    break;
                                }
                            }

                            ResetReadBuffer();
                        }
                    }
                }
                catch (TimeoutException) { }
            }
        }