| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- import struct
- from .BxArea import BaseArea, NewBxArea
- class BxAreaDynamic(BaseArea):
- def __init__(self, id, runMode, dispMode, x, y, w, h, data, soundData, is5K):
- super().__init__(0, x, y, w, h)
- self.is5K = is5K
- self.id = id
- self.lineSpace = 0
- self.runMode = runMode
- self.timeout = 5
- self.soundMode = 0x00
- self.soundPerson = 0x00
- self.soundRepeat = 0x00
- self.soundVolume = 0x01
- self.soundSpeed = 0x10
- self.soundData = soundData if soundData else []
- self.extendParaLen = 0
- self.alignment = 0
- self.singleLine = 0x02
- self.autoNewLine = 0x01
- self.dispMode = dispMode
- self.exitMode = 0
- self.speed = 0x0a
- self.holdTime = 0x08
- self.data = data if data else []
- def Length(self):
- """获取区域长度"""
- return 27 + len(self.data)
- def Build(self):
- """构建区域数据"""
- result = bytearray()
- # 写入类型
- result.append(self.typ)
-
- # 处理坐标和尺寸
- x8 = self.GetX()
- w8 = self.GetW()
- if self.is5K:
- x8 = self.x // 8
- w8 = self.w // 8
-
- # 写入坐标和尺寸(小端序)
- result.extend(struct.pack('<H', x8))
- result.extend(struct.pack('<H', self.GetY()))
- result.extend(struct.pack('<H', w8))
- result.extend(struct.pack('<H', self.GetH()))
-
- # 写入动态区编号
- result.append(self.id)
- # 写入行间距
- result.append(self.lineSpace)
- # 写入运行模式
- result.append(self.runMode)
- # 写入超时时间
- result.extend(struct.pack('<h', self.timeout))
- # 写入声音模式
- result.append(self.soundMode)
-
- # 处理声音参数
- if self.soundMode == 0x01 or self.soundMode == 0x02:
- pr = ((self.soundRepeat << 4) & 0xf0) | (self.soundPerson & 0x0f)
- result.append(pr)
- result.append(self.soundVolume)
- result.append(self.soundSpeed)
-
- # 处理声音数据
- if self.soundMode == 0x02:
- soundDataLen = len(self.soundData)
- result.extend(struct.pack('<I', soundDataLen))
- result.extend(self.soundData)
-
- # 写入扩展参数长度
- result.append(self.extendParaLen)
- # 写入对齐方式
- result.append(self.alignment)
- # 写入单行模式
- result.append(self.singleLine)
- # 写入自动换行
- result.append(self.autoNewLine)
- # 写入显示模式
- result.append(self.dispMode)
- # 写入退出模式
- result.append(self.exitMode)
- # 写入速度
- result.append(self.speed)
- # 写入保持时间
- result.append(self.holdTime)
- # 写入数据长度
- result.extend(struct.pack('<I', len(self.data)))
- # 写入数据
- result.extend(self.data)
-
- return bytes(result)
- def SetSoundMode(self, soundMode):
- """设置声音模式"""
- if soundMode > 2:
- self.soundMode = 0x02
- else:
- self.soundMode = soundMode
- def SetSoundPerson(self, soundPerson):
- """设置声音人物"""
- if soundPerson > 5:
- self.soundPerson = 0
- else:
- self.soundPerson = soundPerson
- def SetSoundRepeat(self, soundRepeat):
- """设置声音重复次数"""
- if soundRepeat > 15:
- self.soundRepeat = 15
- else:
- self.soundRepeat = soundRepeat
- def SetSoundVolume(self, soundVolume):
- """设置声音音量"""
- if soundVolume > 10:
- self.soundVolume = 10
- else:
- self.soundVolume = soundVolume
- def SetSoundSpeed(self, soundSpeed):
- """设置声音速度"""
- if soundSpeed < 1:
- self.soundSpeed = 1
- elif soundSpeed > 10:
- self.soundSpeed = 10
- else:
- self.soundSpeed = soundSpeed
- # 创建BxAreaDynamic实例的函数
- def NewBxAreaDynamic(id, runMode, dispMode, x, y, w, h, data, soundData, is5K):
- return BxAreaDynamic(id, runMode, dispMode, x, y, w, h, data, soundData, is5K)
- # 创建程序动态区域实例的函数
- def NewBxAreaProgram(id, runMode, dispMode, alignment, x, y, w, h, data, is5K):
- area = BxAreaDynamic(id, runMode, dispMode, x, y, w, h, data, [], is5K)
- area.alignment = alignment
- area.soundVolume = 0x05
- area.soundSpeed = 0x05
- area.speed = 0x01
- return area
|