private void InternalMessageProc() { int bytesToRead; int i; IFlMessage parsedMessage; FlParseState parseState; byte[] data = new byte[128]; _logger.Debug("InternalMessageProc started"); while (_messageLoop == true) { bytesToRead = _serialPort.BytesToRead; if (bytesToRead > 0) { _serialPort.Read(data, 0, bytesToRead); for (i = 0; i < bytesToRead; i++) { parseState = _parser.Parse(data[i], out parsedMessage); if (parseState == FlParseState.ParseOk) { lock (_generalLock) { switch (parsedMessage.MessageCategory) { case FlMessageCategory.Response: int commandCount = 0; lock (_generalLock) { commandCount = _commandQ.Count; } if (commandCount > 0) { FlBinMessageResponse response = (FlBinMessageResponse)parsedMessage; _responseQ.Add(response); } else { _logger.Debug("Timeout response received"); } break; case FlMessageCategory.Event: FlBinMessageEvent evt = (FlBinMessageEvent)parsedMessage; OnEventReceived?.Invoke(this, evt); break; } } } } } } _logger.Debug("InternalMessageProc stopped"); }
private unsafe bool MakeEventObject(FlBinMsgFullStruct fullMsg, ref IFlMessage message) { bool ret = false; ushort receivedCrc = 0; int crcDataLen = _bufPos - 4; int crcStartIndex = _bufPos - 3; List <object> arguments = null; FlMessageId messageId = (FlMessageId)fullMsg.header.message_id; switch (messageId) { case FlMessageId.ButtonEvent: { _crc16 = FlUtil.CRC16(_buf, 1, crcDataLen); receivedCrc = BitConverter.ToUInt16(_buf, crcStartIndex); if ((CompareCrc(_crc16, receivedCrc) == true) && (FlConstant.FL_BIN_MSG_ETX == _buf[_bufPos - 1])) { arguments = new List <object>() { fullMsg.payload[0], // Button number fullMsg.payload[1] // Button value }; ret = true; } } break; } if (ret == true) { FlBinMessageEvent evt = new FlBinMessageEvent() { Arguments = arguments, ReceiveTime = DateTime.UtcNow }; evt.Header.device_id = fullMsg.header.device_id; evt.Header.length = fullMsg.header.length; evt.Header.message_id = (FlMessageId)fullMsg.header.message_id; evt.Header.flag1 = fullMsg.header.flag1; evt.Header.flag2 = fullMsg.header.flag2; message = evt; } return(ret); }