Skip to content
This repository was archived by the owner on Dec 14, 2025. It is now read-only.

Commit be6b1bd

Browse files
committed
[PS] Restore turbo and fix pressure mode
1 parent 15e53ca commit be6b1bd

2 files changed

Lines changed: 25 additions & 5 deletions

File tree

main/adapter/wired/ps.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ static DRAM_ATTR const uint32_t ps_btns_mask[32] = {
9292
BIT(PS_L2), BIT(PS_L1), 0, BIT(PS_L3),
9393
BIT(PS_R2), BIT(PS_R1), 0, BIT(PS_R3),
9494
};
95-
static const uint8_t ps_btns_idx[32] = {
95+
static DRAM_ATTR const uint8_t ps_btns_idx[32] = {
9696
0, 0, 0, 0,
9797
0, 0, 0, 0,
9898
5, 4, 7, 6,
@@ -180,9 +180,10 @@ void IRAM_ATTR ps_init_buffer(int32_t dev_mode, struct wired_data *wired_data) {
180180
memset((void *)map, 0, sizeof(*map));
181181
map->buttons = 0xFFFF;
182182
map->analog_btn = 0x00;
183-
for (uint32_t i = 0; i < ADAPTER_MAX_AXES; i++) {
183+
for (uint32_t i = 0; i < 4; i++) {
184184
map->axes[ps_axes_idx[i]] = ps_axes_meta[i].neutral;
185185
}
186+
memset(map->pressure, 0x00, sizeof(map->pressure));
186187

187188
map_mask->buttons = 0x0000;
188189
map_mask->sticks = 0x00000000;
@@ -252,7 +253,7 @@ static void ps_ctrl_from_generic(struct wired_ctrl *ctrl_data, struct wired_data
252253
}
253254
}
254255

255-
for (uint32_t i = 0; i < ADAPTER_MAX_AXES; i++) {
256+
for (uint32_t i = 0; i < 4; i++) {
256257
if (ctrl_data->map_mask[0] & (axis_to_btn_mask(i) & ps_desc[0])) {
257258
if (ctrl_data->axes[i].value > ctrl_data->axes[i].meta->size_max) {
258259
map_tmp.axes[ps_axes_idx[i]] = 255;
@@ -393,5 +394,5 @@ void IRAM_ATTR ps_gen_turbo_mask(struct wired_data *wired_data) {
393394
}
394395
}
395396

396-
wired_gen_turbo_mask_axes8(wired_data, map_mask->axes, ADAPTER_MAX_AXES, ps_axes_idx, ps_axes_meta);
397+
wired_gen_turbo_mask_axes8(wired_data, map_mask->axes, 4, ps_axes_idx, ps_axes_meta);
397398
}

main/wired/ps_spi.c

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,26 @@ static void ps_cmd_rsp_hdlr(struct ps_ctrl_port *port, uint8_t id, uint8_t cmd,
470470
load_mouse_axes(id + port->mt_first_port, &rsp[2]);
471471
break;
472472
default:
473-
memcpy(rsp, wired_adapter.data[id + port->mt_first_port].output, size);
473+
*(uint16_t *)&rsp[0] = wired_adapter.data[id + port->mt_first_port].output16[0]
474+
| wired_adapter.data[id + port->mt_first_port].output_mask16[0];
475+
if (size > 2) {
476+
for (uint32_t i = 2; i < 6; ++i) {
477+
rsp[i] = (wired_adapter.data[id + port->mt_first_port].output_mask[i]) ?
478+
wired_adapter.data[id + port->mt_first_port].output_mask[i]
479+
: wired_adapter.data[id + port->mt_first_port].output[i];
480+
}
481+
}
482+
if (size > 6) {
483+
*(uint16_t *)&rsp[6] = wired_adapter.data[id + port->mt_first_port].output16[3]
484+
& wired_adapter.data[id + port->mt_first_port].output_mask16[3];
485+
*(uint32_t *)&rsp[8] = wired_adapter.data[id + port->mt_first_port].output32[2]
486+
& wired_adapter.data[id + port->mt_first_port].output_mask32[2];
487+
*(uint32_t *)&rsp[12] = wired_adapter.data[id + port->mt_first_port].output32[3]
488+
& wired_adapter.data[id + port->mt_first_port].output_mask32[3];
489+
*(uint16_t *)&rsp[16] = wired_adapter.data[id + port->mt_first_port].output16[8]
490+
& wired_adapter.data[id + port->mt_first_port].output_mask16[8];
491+
}
492+
++wired_adapter.data[id + port->mt_first_port].frame_cnt;
474493
break;
475494
}
476495
if (cmd != 0x42 && cmd != 0x43) {

0 commit comments

Comments
 (0)