ekt: Fix bindings and trackball speed/range

This commit is contained in:
2025-09-02 16:23:48 +02:00
parent 873ae0a30a
commit 837b0663aa
9 changed files with 50 additions and 49 deletions

View File

@ -171,4 +171,4 @@ trackball_up=0x26
trackball_right=0x27 trackball_right=0x27
trackball_down=0x28 trackball_down=0x28
trackball_left=0x25 trackball_left=0x25
speed=1 speed_modifier=10

View File

@ -10,7 +10,7 @@ struct ekt_dll {
HRESULT (*poll)(void); HRESULT (*poll)(void);
void (*get_opbtns)(uint8_t *opbtn); void (*get_opbtns)(uint8_t *opbtn);
void (*get_gamebtns)(uint32_t *gamebtn); void (*get_gamebtns)(uint32_t *gamebtn);
void (*get_trackball_position)(uint8_t *x, uint8_t *y); void (*get_trackball_position)(uint16_t *x, uint16_t *y);
HRESULT (*led_init)(void); HRESULT (*led_init)(void);
void (*led_set_leds)(uint8_t board, uint8_t *rgb); void (*led_set_leds)(uint8_t board, uint8_t *rgb);
}; };

View File

@ -40,7 +40,8 @@ HRESULT ekt_io4_hook_init(const struct io4_config *cfg, bool is_terminal)
static HRESULT ekt_io4_poll(void *ctx, struct io4_state *state) static HRESULT ekt_io4_poll(void *ctx, struct io4_state *state)
{ {
uint8_t opbtn, x, y; uint8_t opbtn;
uint16_t x, y;
uint32_t gamebtn; uint32_t gamebtn;
HRESULT hr; HRESULT hr;

View File

@ -6,5 +6,5 @@
struct ekt_io_backend { struct ekt_io_backend {
void (*get_gamebtns)(uint32_t *gamebtn); void (*get_gamebtns)(uint32_t *gamebtn);
void (*get_trackball)(uint8_t *x, uint8_t *y); void (*get_trackball)(uint16_t *x, uint16_t *y);
}; };

View File

@ -13,43 +13,43 @@ void ekt_kb_config_load(
struct ekt_kb_config *cfg, struct ekt_kb_config *cfg,
const wchar_t *filename) { const wchar_t *filename) {
cfg->vk_menu = GetPrivateProfileIntW(L"io4", L"menu", 'A', filename); cfg->vk_menu = GetPrivateProfileIntW(L"keyboard", L"menu", 'A', filename);
cfg->vk_start = GetPrivateProfileIntW(L"io4", L"start", 'S', filename); cfg->vk_start = GetPrivateProfileIntW(L"keyboard", L"start", 'S', filename);
cfg->vk_stratagem = GetPrivateProfileIntW(L"io4", L"stratagem", 'D', filename); cfg->vk_stratagem = GetPrivateProfileIntW(L"keyboard", L"stratagem", 'D', filename);
cfg->vk_stratagem_lock = GetPrivateProfileIntW(L"io4", L"stratagem_lock", 'F', filename); cfg->vk_stratagem_lock = GetPrivateProfileIntW(L"keyboard", L"stratagem_lock", 'F', filename);
cfg->vk_hougu = GetPrivateProfileIntW(L"io4", L"hougu", 'G', filename); cfg->vk_hougu = GetPrivateProfileIntW(L"keyboard", L"hougu", 'G', filename);
cfg->vk_ryuuha = GetPrivateProfileIntW(L"io4", L"ryuuha", 'H', filename); cfg->vk_ryuuha = GetPrivateProfileIntW(L"keyboard", L"ryuuha", 'H', filename);
cfg->vk_tenkey_0 = GetPrivateProfileIntW(L"io4", L"tenkey_0", VK_NUMPAD0, filename); cfg->vk_tenkey_0 = GetPrivateProfileIntW(L"keyboard", L"tenkey_0", VK_NUMPAD0, filename);
cfg->vk_tenkey_1 = GetPrivateProfileIntW(L"io4", L"tenkey_1", VK_NUMPAD1, filename); cfg->vk_tenkey_1 = GetPrivateProfileIntW(L"keyboard", L"tenkey_1", VK_NUMPAD1, filename);
cfg->vk_tenkey_2 = GetPrivateProfileIntW(L"io4", L"tenkey_2", VK_NUMPAD2, filename); cfg->vk_tenkey_2 = GetPrivateProfileIntW(L"keyboard", L"tenkey_2", VK_NUMPAD2, filename);
cfg->vk_tenkey_3 = GetPrivateProfileIntW(L"io4", L"tenkey_3", VK_NUMPAD3, filename); cfg->vk_tenkey_3 = GetPrivateProfileIntW(L"keyboard", L"tenkey_3", VK_NUMPAD3, filename);
cfg->vk_tenkey_4 = GetPrivateProfileIntW(L"io4", L"tenkey_4", VK_NUMPAD4, filename); cfg->vk_tenkey_4 = GetPrivateProfileIntW(L"keyboard", L"tenkey_4", VK_NUMPAD4, filename);
cfg->vk_tenkey_5 = GetPrivateProfileIntW(L"io4", L"tenkey_5", VK_NUMPAD5, filename); cfg->vk_tenkey_5 = GetPrivateProfileIntW(L"keyboard", L"tenkey_5", VK_NUMPAD5, filename);
cfg->vk_tenkey_6 = GetPrivateProfileIntW(L"io4", L"tenkey_6", VK_NUMPAD6, filename); cfg->vk_tenkey_6 = GetPrivateProfileIntW(L"keyboard", L"tenkey_6", VK_NUMPAD6, filename);
cfg->vk_tenkey_7 = GetPrivateProfileIntW(L"io4", L"tenkey_7", VK_NUMPAD7, filename); cfg->vk_tenkey_7 = GetPrivateProfileIntW(L"keyboard", L"tenkey_7", VK_NUMPAD7, filename);
cfg->vk_tenkey_8 = GetPrivateProfileIntW(L"io4", L"tenkey_8", VK_NUMPAD8, filename); cfg->vk_tenkey_8 = GetPrivateProfileIntW(L"keyboard", L"tenkey_8", VK_NUMPAD8, filename);
cfg->vk_tenkey_9 = GetPrivateProfileIntW(L"io4", L"tenkey_9", VK_NUMPAD9, filename); cfg->vk_tenkey_9 = GetPrivateProfileIntW(L"keyboard", L"tenkey_9", VK_NUMPAD9, filename);
cfg->vk_tenkey_clear = GetPrivateProfileIntW(L"io4", L"tenkey_clear", VK_DECIMAL, filename); cfg->vk_tenkey_clear = GetPrivateProfileIntW(L"keyboard", L"tenkey_clear", VK_DECIMAL, filename);
cfg->vk_tenkey_enter = GetPrivateProfileIntW(L"io4", L"tenkey_enter", VK_RETURN, filename); cfg->vk_tenkey_enter = GetPrivateProfileIntW(L"keyboard", L"tenkey_enter", VK_RETURN, filename);
cfg->vk_vol_down = GetPrivateProfileIntW(L"io4", L"vol_down", VK_NEXT, filename); cfg->vk_vol_down = GetPrivateProfileIntW(L"keyboard", L"vol_down", VK_NEXT, filename);
cfg->vk_vol_up = GetPrivateProfileIntW(L"io4", L"vol_up", VK_PRIOR, filename); cfg->vk_vol_up = GetPrivateProfileIntW(L"keyboard", L"vol_up", VK_PRIOR, filename);
cfg->vk_terminal_decide = GetPrivateProfileIntW(L"io4", L"decide", 'A', filename); cfg->vk_terminal_decide = GetPrivateProfileIntW(L"keyboard", L"decide", 'A', filename);
cfg->vk_terminal_cancel = GetPrivateProfileIntW(L"io4", L"cancel", 'S', filename); cfg->vk_terminal_cancel = GetPrivateProfileIntW(L"keyboard", L"cancel", 'S', filename);
cfg->vk_terminal_up = GetPrivateProfileIntW(L"io4", L"up", VK_UP, filename); cfg->vk_terminal_up = GetPrivateProfileIntW(L"keyboard", L"up", VK_UP, filename);
cfg->vk_terminal_right = GetPrivateProfileIntW(L"io4", L"right", VK_RIGHT, filename); cfg->vk_terminal_right = GetPrivateProfileIntW(L"keyboard", L"right", VK_RIGHT, filename);
cfg->vk_terminal_down = GetPrivateProfileIntW(L"io4", L"down", VK_DOWN, filename); cfg->vk_terminal_down = GetPrivateProfileIntW(L"keyboard", L"down", VK_DOWN, filename);
cfg->vk_terminal_left = GetPrivateProfileIntW(L"io4", L"left", VK_LEFT, filename); cfg->vk_terminal_left = GetPrivateProfileIntW(L"keyboard", L"left", VK_LEFT, filename);
cfg->vk_terminal_left_2 = GetPrivateProfileIntW(L"io4", L"left2", 'Q', filename); cfg->vk_terminal_left_2 = GetPrivateProfileIntW(L"keyboard", L"left2", 'Q', filename);
cfg->vk_terminal_right_2 = GetPrivateProfileIntW(L"io4", L"right2", 'W', filename); cfg->vk_terminal_right_2 = GetPrivateProfileIntW(L"keyboard", L"right2", 'W', filename);
cfg->x_down = GetPrivateProfileIntW(L"io4", L"trackball_left", VK_LEFT, filename); cfg->x_down = GetPrivateProfileIntW(L"keyboard", L"trackball_left", VK_LEFT, filename);
cfg->x_up = GetPrivateProfileIntW(L"io4", L"trackball_right", VK_RIGHT, filename); cfg->x_up = GetPrivateProfileIntW(L"keyboard", L"trackball_right", VK_RIGHT, filename);
cfg->y_down = GetPrivateProfileIntW(L"io4", L"trackball_up", VK_UP, filename); cfg->y_down = GetPrivateProfileIntW(L"keyboard", L"trackball_up", VK_UP, filename);
cfg->y_up = GetPrivateProfileIntW(L"io4", L"trackball_down", VK_DOWN, filename); cfg->y_up = GetPrivateProfileIntW(L"keyboard", L"trackball_down", VK_DOWN, filename);
cfg->speed = GetPrivateProfileIntW(L"io4", L"speed_modifier", 1, filename); cfg->speed = GetPrivateProfileIntW(L"keyboard", L"speed_modifier", 1, filename);
} }
void ekt_io_config_load( void ekt_io_config_load(
@ -59,14 +59,14 @@ void ekt_io_config_load(
assert(cfg != NULL); assert(cfg != NULL);
assert(filename != NULL); assert(filename != NULL);
cfg->vk_test = GetPrivateProfileIntW(L"io4", L"test", '1', filename); cfg->vk_test = GetPrivateProfileIntW(L"keyboard", L"test", '1', filename);
cfg->vk_service = GetPrivateProfileIntW(L"io4", L"service", '2', filename); cfg->vk_service = GetPrivateProfileIntW(L"keyboard", L"service", '2', filename);
cfg->vk_coin = GetPrivateProfileIntW(L"io4", L"coin", '3', filename); cfg->vk_coin = GetPrivateProfileIntW(L"keyboard", L"coin", '3', filename);
cfg->vk_sw1 = GetPrivateProfileIntW(L"io4", L"sw1", '4', filename); cfg->vk_sw1 = GetPrivateProfileIntW(L"keyboard", L"sw1", '4', filename);
cfg->vk_sw2 = GetPrivateProfileIntW(L"io4", L"sw2", '5', filename); cfg->vk_sw2 = GetPrivateProfileIntW(L"keyboard", L"sw2", '5', filename);
GetPrivateProfileStringW( GetPrivateProfileStringW(
L"io4", L"keyboard",
L"mode", L"mode",
L"keyboard", L"keyboard",
cfg->mode, cfg->mode,

View File

@ -83,7 +83,7 @@ void ekt_io_get_gamebtns(uint32_t* btn) {
ekt_io_backend->get_gamebtns(btn); ekt_io_backend->get_gamebtns(btn);
} }
void ekt_io_get_trackball_position(uint8_t* stick_x, uint8_t* stick_y) { void ekt_io_get_trackball_position(uint16_t* stick_x, uint16_t* stick_y) {
assert(ekt_io_backend != NULL); assert(ekt_io_backend != NULL);
assert(stick_x != NULL); assert(stick_x != NULL);
assert(stick_y != NULL); assert(stick_y != NULL);

View File

@ -88,7 +88,7 @@ void ekt_io_get_gamebtns(uint32_t *gamebtn);
Minimum API version: 0x0100 */ Minimum API version: 0x0100 */
void ekt_io_get_trackball_position(uint8_t *stick_x, uint8_t *stick_y); void ekt_io_get_trackball_position(uint16_t *stick_x, uint16_t *stick_y);
/* Initialize LED emulation. This function will be called before any /* Initialize LED emulation. This function will be called before any
other ekt_io_led_*() function calls. other ekt_io_led_*() function calls.

View File

@ -13,15 +13,15 @@
#include "util/dprintf.h" #include "util/dprintf.h"
static void ekt_kb_get_gamebtns(uint32_t* gamebtn_out); static void ekt_kb_get_gamebtns(uint32_t* gamebtn_out);
static void ekt_kb_get_trackball(uint8_t* x, uint8_t* y); static void ekt_kb_get_trackball(uint16_t* x, uint16_t* y);
static const struct ekt_io_backend ekt_kb_backend = { static const struct ekt_io_backend ekt_kb_backend = {
.get_gamebtns = ekt_kb_get_gamebtns, .get_gamebtns = ekt_kb_get_gamebtns,
.get_trackball = ekt_kb_get_trackball .get_trackball = ekt_kb_get_trackball
}; };
static uint8_t current_x; static uint16_t current_x;
static uint8_t current_y; static uint16_t current_y;
static struct ekt_kb_config config; static struct ekt_kb_config config;
@ -156,7 +156,7 @@ static void ekt_kb_get_gamebtns(uint32_t* gamebtn_out) {
*gamebtn_out = gamebtn; *gamebtn_out = gamebtn;
} }
static void ekt_kb_get_trackball(uint8_t* x, uint8_t* y) { static void ekt_kb_get_trackball(uint16_t* x, uint16_t* y) {
assert(x != NULL); assert(x != NULL);
assert(y != NULL); assert(y != NULL);