diff --git a/doc/hsjl_plugin_timer.py b/doc/hsjl_plugin_timer.py index eed3e9c..71d8ca6 100644 --- a/doc/hsjl_plugin_timer.py +++ b/doc/hsjl_plugin_timer.py @@ -157,6 +157,21 @@ class Plugin(Plugin_Base): toggleBtn.setMenu(menu) return toggleBtn + def createtoIdButton(self): + toggleBtn = QPushButton("目的节点id: 01") + menu = QMenu(toggleBtn) + ids = ["01", "02", "03"] + + def setId(text): + toggleBtn.setText(f"目的节点id: {text}") + print(f"目的节点id设为 {text}") + + for id_text in ids: + menu.addAction(id_text).triggered.connect(lambda checked, t=id_text: setId(t)) + + toggleBtn.setMenu(menu) + return toggleBtn + def createSlotButton(self): slotBtn = QPushButton("时隙表: 01") # 默认选中01 menu = QMenu(slotBtn) @@ -175,7 +190,7 @@ class Plugin(Plugin_Base): def createRateButton(self): rateBtn = QPushButton("速率: 128kpbs") # 默认选中01 menu = QMenu(rateBtn) - rateOptions = ["128kpbs", "256kpbs", "2Mbps"] + rateOptions = ["128kpbs", "512kpbs", "2Mbps"] def setRate(text): rateBtn.setText(f"速率: {text}") @@ -212,7 +227,7 @@ class Plugin(Plugin_Base): frame.append(id_val) # 速率字段对应映射(参考原来速率的0x22等) - rate_map = {"128kpbs": 0x22, "256kpbs": 0x33, "2Mbps": 0x44} + rate_map = {"128kpbs": 0x22, "512kpbs": 0x33, "2Mbps": 0x44} rate_key = rate_text.split(":")[1].strip() rate_val = rate_map.get(rate_key, 0x22) frame.append(rate_val) @@ -237,18 +252,19 @@ class Plugin(Plugin_Base): # 转成空格分隔的大写16进制字符串 return " ".join(f"{b:02X}" for b in frame) - def buildimageCommand(self, switch_text, id_text, rate_text, slot_text, image_index=0): + def buildimageCommand(self, switch_text, toid_text, rate_text, slot_text, image_index=0): # 头部固定 - frame = [0x5A, 0x54, 0xE4, 0xEE, 0x00, 0x00, 0x00] + frame = [0x5A, 0x54, 0xE4, 0xEE] if image_index == 0:#两个图片的序号不同 frame.append(0x01) else: frame.append(0x02) + frame.extend([0x00, 0x00, 0x00]) # ID字段,转为整数 try: - id_val = int(id_text.split(":")[1].strip(), 16) + id_val = int(toid_text.split(":")[1].strip(), 16) except: id_val = 0x01 frame.append(id_val) @@ -259,13 +275,13 @@ class Plugin(Plugin_Base): else: image_data = self.IMAGE2_DATA - # 计算图片数据长度(2字节表示,这里使用大端模式) + # 计算图片数据长度(2字节表示,这里使用小端模式) data_length = len(image_data) # 拆分长度为高8位和低8位 - high_byte = (data_length >> 8) & 0xFF - low_byte = data_length & 0xFF + high_byte = (data_length >> 8) & 0xFF # 高8位 + low_byte = data_length & 0xFF # 低8位 - frame.extend([high_byte, low_byte]) # 替换固定字段为动态长度 + frame.extend([low_byte, high_byte]) # 小端模式:低位字节在前,高位字节在后 # 根据索引选择图片数据 if image_index == 0: frame.extend(self.IMAGE1_DATA) @@ -291,10 +307,9 @@ class Plugin(Plugin_Base): id_text = self.idButton.text() slot_text = self.slotButton.text() rate_text = self.rateButton.text() - - # 发送当前索引对应的图片 + toid_text = self.toidButton.text() cmd_str = self.buildimageCommand( - switch_text, id_text, rate_text, slot_text, + switch_text, toid_text, rate_text, slot_text, self.image_index # 传入当前图片索引 ) print(f"第{self.cycle_count + 1}次发送,图片{self.image_index + 1}: {cmd_str}") @@ -458,6 +473,9 @@ class Plugin(Plugin_Base): self.rateButton = self.createRateButton() self.customSendItemsLayout.addWidget(self.rateButton, 1, 3) + self.toidButton = self.createtoIdButton() + self.customSendItemsLayout.addWidget(self.toidButton, 0, 3) + # 第一行固定插入“遥测”、“图片传输”、“总控” for item in self.config["customSendItems"]: if item["caption"] == "遥测": @@ -491,7 +509,7 @@ class Plugin(Plugin_Base): # 1. 定义速率与间隔的映射关系(单位:毫秒) rate_interval_map = { "128kpbs": 1500, # 128kpbs对应1.5秒 - "256kpbs": 1000, # 256kpbs对应1秒 + "512kpbs": 1000, # 256kpbs对应1秒 "2Mbps": 500 # 2Mbps对应0.5秒 } @@ -512,10 +530,10 @@ class Plugin(Plugin_Base): id_text = self.idButton.text() slot_text = self.slotButton.text() rate_text = self.rateButton.text() - + toid_text = self.toidButton.text() # 构建当前图片指令 cmd_str = self.buildimageCommand( - switch_text, id_text, rate_text, slot_text, self.image_index + switch_text, toid_text, rate_text, slot_text, self.image_index ) print(f"第{self.cycle_count + 1}次循环,图片{self.image_index + 1}: {cmd_str}") @@ -659,7 +677,7 @@ class Plugin(Plugin_Base): cmd_id = binary_data[2] print(f"收到指令: cmd_id=0x{cmd_id:02X}") - if cmd_id == 0xE4: # 图像测试回令 + if cmd_id == 0xE5: # 图像测试回令 result = self.evalimageTestRsp(binary_data) self.showReceiveDataSignal.emit(result) return @@ -830,7 +848,7 @@ class Plugin(Plugin_Base): print('“”“”“”“”“”“”“”“”“”“”“”“') try: # 1. 先解析头部获取数据长度和图片类型标识 - header_struct = Struct(">2s B B I B H") # 前11字节结构 + header_struct = Struct("<2s B B I B H") # 前11字节结构 header_data = header_struct.unpack(data[:11]) frame_head, cmd_id, node_type, data_id, from_id, data_len = header_data print(data) diff --git a/src/systembus/systembus.c b/src/systembus/systembus.c index d5130f5..d61e837 100644 --- a/src/systembus/systembus.c +++ b/src/systembus/systembus.c @@ -449,7 +449,7 @@ int32_t SystemBus_GenRecvRsp(SYSBUS *instPtr, SYSBUS_SVC_PLD *payload) return ENOMEM; } - sysbusRsp->len = payload->dataLen + RECV_DATA_LEN_OFFSET; + sysbusRsp->len = payload->dataLen + RECV_DATA_OFFSET; sysbusRsp->data[WD_CMD] = CMD_RECV_DATA; sysbusRsp->data[WD_PRD] = MY_PRD_ID;