| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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('<H', self.BlockNum)) # 包号,单包为0x00
- w1.extend(struct.pack('<I', self.file.FileLen)) # 包长,若是单包发送,此处为文件长度。
- w1.extend(struct.pack('<I', self.BlockAddr)) # 本包数据在文件中的偏移量,单包为0x00
-
- # 文件内容数据
- w2 = bytearray()
- w2.append(self.file.FileType)
- w2.extend(self.file.FileName.encode('ascii'))
- w2.extend(struct.pack('<I', self.file.FileLen))
- w2.extend(self.file.LibData)
-
- data = w2
- crc = CRC16(data, 0, len(data))
- w1.extend(data)
- w1.extend(struct.pack('<H', crc))
- self.temp = w1
-
- # Start Write File "开始写文件",写文件前先检查内存是否够用
- w3 = bytearray()
- w3.append(CMD_START_WRITE_FILE.group)
- w3.append(CMD_START_WRITE_FILE.code)
- w3.append(0x01)
- w3.extend([0x00, 0x00])
- w3.append(0x01) # 同名是否覆盖,0不覆盖,1覆盖
- w3.extend(self.file.FileName.encode('ascii'))
- w3.extend(struct.pack('<I', self.file.FileLen))
-
- self.state = 1
- return bytes(w3)
- else:
- return bytes(self.temp)
- def NewBitmapFile(filename, libdata):
- return bitmapFile(filename, libdata)
|