fix command level
This commit is contained in:
@@ -329,6 +329,39 @@ void UserBufferManagementInit(unsigned sampFreq)
|
|||||||
memset(ubm_ingress, 0, sizeof(ubm_ingress)); // 清掉哑帧输出
|
memset(ubm_ingress, 0, sizeof(ubm_ingress)); // 清掉哑帧输出
|
||||||
}
|
}
|
||||||
float fLevel[NUM_USB_CHAN_OUT] = {0,};
|
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 在 tile0,fLevel 由 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};
|
enum {UBM_A3D_OFF=0, UBM_A3D_VON=1, UBM_A3D_ON=2};
|
||||||
extern unsigned int is_eq_disabled(void);
|
extern unsigned int is_eq_disabled(void);
|
||||||
extern unsigned int g_eq_enable;
|
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;
|
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);
|
// 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];
|
pSendBuf[idx++] = pLevel[i];
|
||||||
// debug_printf("%08x, ", pLevel[i] );
|
// debug_printf("%08x, ", pLevel[i] );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -477,6 +477,8 @@ extern unsigned g_hid_angle_save_request;
|
|||||||
extern unsigned g_hid_angle_save_channel;
|
extern unsigned g_hid_angle_save_channel;
|
||||||
extern unsigned g_hid_angle_values[8];
|
extern unsigned g_hid_angle_values[8];
|
||||||
void SetEx3dHidChan(chanend_t c) { g_ex3d_hid_chanend = c; }
|
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
|
#endif
|
||||||
|
|
||||||
// 0x84 FACTORY_RESET: 删除Flash参数后触发重启(由button_task轮询执行)
|
// 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
|
// 处理发送/读取EX3D命令 (0xB0/0xB1) - SET_EX3D_CMD / GET_EX3D_CMD
|
||||||
// 数据通过 g_ex3d_hid_chanend 直接传到tile1的hid_button_task执行,结果同步返回
|
// 多数命令经 g_ex3d_hid_chanend 到 tile1;CMD_LEVEL(0x18D) 在 tile0 读 fLevel,不转发 tile1
|
||||||
if (data[1] == 0xB0 || data[1] == 0xB1) {
|
if (data[1] == 0xB0 || data[1] == 0xB1) {
|
||||||
#if (USE_EX3D == 1) && (HID_CONTROLS == 1)
|
#if (USE_EX3D == 1) && (HID_CONTROLS == 1)
|
||||||
if (!g_ex3d_hid_chanend) return false;
|
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);
|
if (params_len > 0) memcpy(ex3d_request.ex3d_params, &data[6], params_len);
|
||||||
ex3d_request.pending_cmd = data[1];
|
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状态
|
// 若是SET CMD_EXPAND_GAIN (0x93),同步更新footstep LED状态
|
||||||
if (data[1] == 0xB0 && ex3d_cmd == 0x93 && params_len >= 4) {
|
if (data[1] == 0xB0 && ex3d_cmd == 0x93 && params_len >= 4) {
|
||||||
uint32_t gain_val = (uint32_t)data[6] | ((uint32_t)data[7] << 8) |
|
uint32_t gain_val = (uint32_t)data[6] | ((uint32_t)data[7] << 8) |
|
||||||
|
|||||||
Reference in New Issue
Block a user