BxCmdFileBitmap.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import struct
  2. from .BxCmd import baseBxCmd
  3. from .BxCmdCode import CMD_WRITE_FILE, CMD_START_WRITE_FILE
  4. from .BxUtils import CRC16
  5. class bitmapFile:
  6. def __init__(self, filename, libdata):
  7. chk = CRC16(libdata, 0, len(libdata))
  8. print(f"位图文件校验: {chk: 02x}")
  9. self.FileType = 0x04
  10. self.FileName = filename
  11. self.FileLen = len(libdata)
  12. self.LibData = libdata
  13. self.CHK = chk
  14. def NewCmd(self):
  15. return CmdWriteBitmapFile(self)
  16. class CmdWriteBitmapFile(baseBxCmd):
  17. def __init__(self, file):
  18. super().__init__(CMD_WRITE_FILE.group, CMD_WRITE_FILE.code)
  19. self.state = 0
  20. self.file = file
  21. self.LastBlockFlag = 1
  22. self.BlockNum = 0 # 包号,如果是单包发送,则默认为 0x00。
  23. self.BlockLen = 0 # 包长,若是单包发送,此处为文件长度。
  24. self.BlockAddr = 0 # 本包数据在文件中的起始位置,如果是单包发送,此处默认为 0。
  25. self.temp = bytearray()
  26. def Build(self):
  27. if self.state == 0:
  28. # Write File
  29. w1 = bytearray()
  30. # 文件描述数据
  31. w1.append(self.Group())
  32. w1.append(self.Cmd())
  33. w1.append(0x01)
  34. w1.extend([0x00, 0x00])
  35. w1.extend(self.file.FileName.encode('ascii'))
  36. w1.append(self.LastBlockFlag) # 是否是最后一包,0x00——不是最后一包 0x01——最后一包。
  37. w1.extend(struct.pack('<H', self.BlockNum)) # 包号,单包为0x00
  38. w1.extend(struct.pack('<I', self.file.FileLen)) # 包长,若是单包发送,此处为文件长度。
  39. w1.extend(struct.pack('<I', self.BlockAddr)) # 本包数据在文件中的偏移量,单包为0x00
  40. # 文件内容数据
  41. w2 = bytearray()
  42. w2.append(self.file.FileType)
  43. w2.extend(self.file.FileName.encode('ascii'))
  44. w2.extend(struct.pack('<I', self.file.FileLen))
  45. w2.extend(self.file.LibData)
  46. data = w2
  47. crc = CRC16(data, 0, len(data))
  48. w1.extend(data)
  49. w1.extend(struct.pack('<H', crc))
  50. self.temp = w1
  51. # Start Write File "开始写文件",写文件前先检查内存是否够用
  52. w3 = bytearray()
  53. w3.append(CMD_START_WRITE_FILE.group)
  54. w3.append(CMD_START_WRITE_FILE.code)
  55. w3.append(0x01)
  56. w3.extend([0x00, 0x00])
  57. w3.append(0x01) # 同名是否覆盖,0不覆盖,1覆盖
  58. w3.extend(self.file.FileName.encode('ascii'))
  59. w3.extend(struct.pack('<I', self.file.FileLen))
  60. self.state = 1
  61. return bytes(w3)
  62. else:
  63. return bytes(self.temp)
  64. def NewBitmapFile(filename, libdata):
  65. return bitmapFile(filename, libdata)