import struct UBX_SYNC_WORD = b'\xb5\x62' def checksum(data: bytes) -> bytes: ck_a = 0 ck_b = 0 for i in range(len(data)): ck_a = (ck_a + data[i]) & 0xFF ck_b = (ck_b + ck_a) & 0xFF return struct.pack("BB", ck_a, ck_b) def frame_create(_class: int, _id: int, _data: bytes) -> bytes: _sync = b'\xb5\x62' _hdr = struct.pack('B', _class) _hdr += struct.pack('B', _id) _hdr += struct.pack(' Hdr|None: hdr = Hdr(0,0,0) if len(frame) < 4: return None hdr.mclass = struct.unpack('B', frame[0:1])[0] hdr.mid = struct.unpack('B', frame[1:2])[0] hdr.length = struct.unpack('