import struct from .BxCmd import baseBxCmd from .BxCmdCode import CMD_WRITE_FILE, CMD_START_WRITE_FILE from .BxUtils import CRC16 class bitmapFile: def __init__(self, filename, libdata): chk = CRC16(libdata, 0, len(libdata)) print(f"位图文件校验: {chk: 02x}") self.FileType = 0x04 self.FileName = filename self.FileLen = len(libdata) self.LibData = libdata self.CHK = chk def NewCmd(self): return CmdWriteBitmapFile(self) class CmdWriteBitmapFile(baseBxCmd): def __init__(self, file): super().__init__(CMD_WRITE_FILE.group, CMD_WRITE_FILE.code) self.state = 0 self.file = file self.LastBlockFlag = 1 self.BlockNum = 0 # 包号,如果是单包发送,则默认为 0x00。 self.BlockLen = 0 # 包长,若是单包发送,此处为文件长度。 self.BlockAddr = 0 # 本包数据在文件中的起始位置,如果是单包发送,此处默认为 0。 self.temp = bytearray() def Build(self): if self.state == 0: # Write File w1 = bytearray() # 文件描述数据 w1.append(self.Group()) w1.append(self.Cmd()) w1.append(0x01) w1.extend([0x00, 0x00]) w1.extend(self.file.FileName.encode('ascii')) w1.append(self.LastBlockFlag) # 是否是最后一包,0x00——不是最后一包 0x01——最后一包。 w1.extend(struct.pack('