public static bool GetBluetoothState(UART uart)
        {
            ushort serviceCode = (ushort)TegamServiceCode_t.TEGAM_BLUETOOTH_GET_REQ;
            ushort valueSize   = 0;

            byte[] cmdbuf  = new byte[10];
            byte[] cobsbuf = new byte[12];

            cmdbuf[0] = CMD_MARK_START;
            cmdbuf[1] = CMD_MARK_HEADER & 0x00FF;
            cmdbuf[2] = (CMD_MARK_HEADER & 0xFF00) >> 8;
            cmdbuf[3] = CMD_VERSION_CODE & 0x00FF;
            cmdbuf[4] = (CMD_VERSION_CODE & 0xFF00) >> 8;
            cmdbuf[5] = (byte)(serviceCode & 0x00FF);
            cmdbuf[6] = (byte)((serviceCode & 0xFF00) >> 8);
            cmdbuf[7] = (byte)(valueSize & 0x00FF);
            cmdbuf[8] = (byte)((valueSize & 0xFF00) >> 8);
            cmdbuf[9] = CMD_MARK_END;

            COBS.Encode(cmdbuf, 10, ref cobsbuf);

            cobsbuf[11] = 0;

            if (WRITE)
            {
                uart.Write(cobsbuf, 12);
            }

            return(true);
        }
        public static bool SendSerialNumber(UART uart, byte[] value)
        {
            ushort serviceCode = (ushort)TegamServiceCode_t.TEGAM_SERIAL_NUMBER_SET_REQ;
            ushort valueSize   = 10;

            byte[] cmdbuf  = new byte[20];
            byte[] cobsbuf = new byte[22];

            cmdbuf[0]  = CMD_MARK_START;
            cmdbuf[1]  = CMD_MARK_HEADER & 0x00FF;
            cmdbuf[2]  = (CMD_MARK_HEADER & 0xFF00) >> 8;
            cmdbuf[3]  = CMD_VERSION_CODE & 0x00FF;
            cmdbuf[4]  = (CMD_VERSION_CODE & 0xFF00) >> 8;
            cmdbuf[5]  = (byte)(serviceCode & 0x00FF);
            cmdbuf[6]  = (byte)((serviceCode & 0xFF00) >> 8);
            cmdbuf[7]  = (byte)(valueSize & 0x00FF);
            cmdbuf[8]  = (byte)((valueSize & 0xFF00) >> 8);
            cmdbuf[9]  = value[0];
            cmdbuf[10] = value[1];
            cmdbuf[11] = value[2];
            cmdbuf[12] = value[3];
            cmdbuf[13] = value[4];
            cmdbuf[14] = value[5];
            cmdbuf[15] = value[6];
            cmdbuf[16] = value[7];
            cmdbuf[17] = value[8];
            cmdbuf[18] = value[9];
            cmdbuf[19] = CMD_MARK_END;

            COBS.Encode(cmdbuf, 20, ref cobsbuf);

            cobsbuf[21] = 0;

            if (WRITE)
            {
                uart.Write(cobsbuf, 22);
            }

            if (VERIFY)
            {
                System.Threading.Thread.Sleep(100);

                char[] readBuf    = uart.ReadBuffer();
                byte[] decodedBuf = new byte[11];

                // decoded what was read from UART
                COBS.Decode(Encoding.Default.GetBytes(readBuf), 11, ref decodedBuf);

                // reset the UART read buffer after obtaining read data
                uart.ResetReadBuffer();

                // ensure ACK command is valid
                return(ValidateACK(decodedBuf, TegamServiceCode_t.TEGAM_SERIAL_NUMBER_SET_ACK));
            }
            else
            {
                return(true);
            }
        }
Beispiel #3
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) { }
            }
        }