forked from gatsby/df_datalink
fix: 修复PS上传数据长度不足的问题;图片上位机修改控制字的大小端,增加目标节点选择
This commit is contained in:
+35
-17
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user