fix command level

This commit is contained in:
Steven Dan
2026-06-01 17:33:12 +08:00
parent 7781eaebe6
commit 40315d2826
2 changed files with 52 additions and 2 deletions

View File

@@ -329,6 +329,39 @@ void UserBufferManagementInit(unsigned sampFreq)
memset(ubm_ingress, 0, sizeof(ubm_ingress)); // 清掉哑帧输出
}
float fLevel[NUM_USB_CHAN_OUT] = {0,};
#if USE_EX3D == 1 && (HID_CONTROLS > 0)
/* CMD_GET(CMD_LEVEL) = 0x8D | 0x0100 */
#define EX3D_HID_CMD_GET_LEVEL 0x18Du
/* 改动原因HID process_send_params 在 tile0fLevel 由 tile0 UserBufferManagement 更新;
* CMD_LEVEL 不再转发 tile1直接读本 tile 的 fLevel 填入 ex3d_b0b1_result。 */
void ex3d_hid_fill_cmd_level_on_tile0(unsigned *send_buf_words, uint32_t ch_num)
{
unsigned idx = 1;
unsigned ex3d_en = 0;
uint32_t ch;
if (ch_num > (uint32_t)NUM_USB_CHAN_OUT) {
ch_num = (uint32_t)NUM_USB_CHAN_OUT;
}
GET_SHARED_GLOBAL(ex3d_en, g_3d_enable);
send_buf_words[idx++] = EX3D_HID_CMD_GET_LEVEL;
for (ch = 0; ch < ch_num; ch++) {
union { float f; unsigned u; } conv;
if (ex3d_en) {
conv.f = fLevel[ch];
} else {
conv.f = 0.0f;
}
send_buf_words[idx++] = conv.u;
}
}
#endif /* USE_EX3D && HID_CONTROLS */
enum {UBM_A3D_OFF=0, UBM_A3D_VON=1, UBM_A3D_ON=2};
extern unsigned int is_eq_disabled(void);
extern unsigned int g_eq_enable;
@@ -783,8 +816,9 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
if(ChNum > NUM_USB_CHAN_OUT) ChNum = NUM_USB_CHAN_OUT;
/* 改动原因0xB1 CMD_LEVEL 已在 tile0 eq.c 处理;此处仅保留经 c_hidRcvData 到 tile1 的兼容路径 */
// debug_printf("Get CMD_LEVEL : %d, %d\r\n", ChNum, NUM_USB_CHAN_OUT);
for (int i = 0; i < ChNum; i++) {
for (int i = 0; i < (int)ChNum; i++) {
pSendBuf[idx++] = pLevel[i];
// debug_printf("%08x, ", pLevel[i] );
}

View File

@@ -477,6 +477,8 @@ extern unsigned g_hid_angle_save_request;
extern unsigned g_hid_angle_save_channel;
extern unsigned g_hid_angle_values[8];
void SetEx3dHidChan(chanend_t c) { g_ex3d_hid_chanend = c; }
/* 改动原因CMD_LEVEL 在 tile0 读 fLevel见 process_send_params 中 0xB1/0x18D 分支 */
void ex3d_hid_fill_cmd_level_on_tile0(unsigned *send_buf_words, uint32_t ch_num);
#endif
// 0x84 FACTORY_RESET: 删除Flash参数后触发重启由button_task轮询执行
@@ -836,7 +838,7 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) {
}
// 处理发送/读取EX3D命令 (0xB0/0xB1) - SET_EX3D_CMD / GET_EX3D_CMD
// 数据通过 g_ex3d_hid_chanend 直接传到tile1的hid_button_task执行结果同步返回
// 多数命令经 g_ex3d_hid_chanend 到 tile1CMD_LEVEL(0x18D) 在 tile0 读 fLevel不转发 tile1
if (data[1] == 0xB0 || data[1] == 0xB1) {
#if (USE_EX3D == 1) && (HID_CONTROLS == 1)
if (!g_ex3d_hid_chanend) return false;
@@ -853,6 +855,20 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) {
if (params_len > 0) memcpy(ex3d_request.ex3d_params, &data[6], params_len);
ex3d_request.pending_cmd = data[1];
/* 改动原因HID/UBM 同在 tile0电平由 UserBufferManagement 写入 fLevel[]
* GET CMD_LEVEL 无需经 tile1避免读 tile1 空副本。 */
if (data[1] == 0xB1 && ex3d_cmd == 0x18Du) {
uint32_t ch_num = 0;
if (params_len >= 4) {
ch_num = (uint32_t)data[6] | ((uint32_t)data[7] << 8) |
((uint32_t)data[8] << 16) | ((uint32_t)data[9] << 24);
}
memset(ex3d_b0b1_result, 0, sizeof(ex3d_b0b1_result));
ex3d_hid_fill_cmd_level_on_tile0(ex3d_b0b1_result, ch_num);
return true;
}
// 若是SET CMD_EXPAND_GAIN (0x93)同步更新footstep LED状态
if (data[1] == 0xB0 && ex3d_cmd == 0x93 && params_len >= 4) {
uint32_t gain_val = (uint32_t)data[6] | ((uint32_t)data[7] << 8) |