def process(self): """ Process a buffer. Check CRC, and emit a uart packet. Buffer starts after size header, and includes wrapper header and tail (CRC). Return: processing success """ # Check size bufferSize = len(self.buffer) wrapperSize = WRAPPER_HEADER_SIZE + CRC_SIZE if bufferSize < wrapperSize: _LOGGER.warning("Buffer too small") return False # Get the buffer between size field and CRC: baseBuffer = self.buffer[0 : bufferSize - CRC_SIZE] # Check CRC calculatedCrc = crc16ccitt(baseBuffer) sourceCrc = Conversion.uint8_array_to_uint16(self.buffer[bufferSize - CRC_SIZE : ]) if calculatedCrc != sourceCrc: _LOGGER.warning("Failed CRC: {0} != {1} (data: {2})".format(calculatedCrc, sourceCrc, baseBuffer)) UartEventBus.emit(DevTopics.uartNoise, "crc mismatch") return False wrapperPacket = UartWrapperPacket() if wrapperPacket.parse(baseBuffer): UartEventBus.emit(SystemTopics.uartNewPackage, wrapperPacket) return True
def process(self): """ Process a buffer. Check CRC, and emit a uart packet. Buffer starts after size header, and includes wrapper header and tail (CRC). """ # Check size bufferSize = len(self.buffer) wrapperSize = WRAPPER_HEADER_SIZE + CRC_SIZE if bufferSize < wrapperSize: _LOGGER.warning("Buffer too small") UartEventBus.emit(DevTopics.uartNoise, "buffer too small") return # Get the buffer between size field and CRC: baseBuffer = self.buffer[0:bufferSize - CRC_SIZE] # Check CRC calculatedCrc = crc16ccitt(baseBuffer) sourceCrc = Conversion.uint8_array_to_uint16(self.buffer[bufferSize - CRC_SIZE:]) if calculatedCrc != sourceCrc: _LOGGER.warning("Failed CRC") _LOGGER.debug( f"Failed CRC: sourceCrc={sourceCrc} calculatedCrc={calculatedCrc} bufSize={len(self.buffer)} buffer={self.buffer}" ) UartEventBus.emit(DevTopics.uartNoise, "crc mismatch") return wrapperPacket = UartWrapperPacket() if wrapperPacket.parse(baseBuffer): UartEventBus.emit(SystemTopics.uartNewPackage, wrapperPacket)