rg_input: Do not invert I2C input for RAW/MRGC

This commit is contained in:
Alex Duchesne 2025-06-27 19:09:14 -04:00
parent b46e5b767a
commit d7811ec7aa
7 changed files with 61 additions and 47 deletions

View File

@ -131,7 +131,15 @@ bool rg_i2c_write_byte(uint8_t addr, uint8_t reg, uint8_t value)
typedef struct {int input_reg, output_reg, direction_reg, pullup_reg;} _gpio_port;
typedef struct {uint8_t reg, value;} _gpio_sequence;
#if RG_I2C_GPIO_DRIVER == 1 // AW9523
#if RG_I2C_GPIO_DRIVER == 0 // None/testing
static const _gpio_port gpio_ports[] = {
{-1, -1, -1, -1},
};
static const _gpio_sequence gpio_init_seq[] = {};
static const _gpio_sequence gpio_deinit_seq[] = {};
#elif RG_I2C_GPIO_DRIVER == 1 // AW9523
static const _gpio_port gpio_ports[] = {
{0x00, 0x02, 0x04, -1}, // PORT 0

View File

@ -129,17 +129,15 @@ bool rg_input_read_gamepad_raw(uint32_t *out)
#if defined(RG_GAMEPAD_I2C_MAP)
uint32_t buttons = 0;
#if defined(RG_I2C_GPIO_DRIVER)
buttons = (rg_i2c_gpio_read_port(0) | rg_i2c_gpio_read_port(1) << 8);
buttons = rg_i2c_gpio_read_port(0) | (rg_i2c_gpio_read_port(1) << 8);
#elif defined(RG_TARGET_T_DECK_PLUS)
uint8_t data[5];
if (rg_i2c_read(T_DECK_KBD_ADDRESS, -1, &data, 5)) {
if (rg_i2c_read(T_DECK_KBD_ADDRESS, -1, &data, 5))
buttons = ((data[0] << 25) | (data[1] << 18) | (data[2] << 11) | ((data[3] & 0xF8) << 4) | (data[4]));
//RG_LOGI("buttons: %08lX", buttons);
}
#else
uint8_t data[5];
if (rg_i2c_read(0x20, -1, &data, 5))
buttons = ~((data[2] << 8) | data[1]);
if (rg_i2c_read(RG_I2C_GPIO_ADDR, -1, &data, 5))
buttons = data[1] | (data[2] << 8);
#endif
for (size_t i = 0; i < RG_COUNT(keymap_i2c); ++i)
{

View File

@ -10,8 +10,8 @@
// #define RG_STORAGE_FLASH_PARTITION "vfs"
// GPIO Extender
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
// #define RG_I2C_GPIO_ADDR 0x00
#define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
#define RG_I2C_GPIO_ADDR 0x20
// Audio
#define RG_AUDIO_USE_INT_DAC 0 // 0 = Disable, 1 = GPIO25, 2 = GPIO26, 3 = Both
@ -57,14 +57,14 @@
// A and B silkscreen on the board are swapped relative to standard Nintendo layout
// Temporarily unmapped menu and option. Start + Select activates menu.
#define RG_GAMEPAD_I2C_MAP {\
{RG_KEY_UP, 2, 1},\
{RG_KEY_RIGHT, 5, 1},\
{RG_KEY_DOWN, 3, 1},\
{RG_KEY_LEFT, 4, 1},\
{RG_KEY_SELECT, 1, 1},\
{RG_KEY_START, 8, 1},\
{RG_KEY_A, 7, 1},\
{RG_KEY_B, 6, 1},\
{RG_KEY_UP, 2, 0},\
{RG_KEY_RIGHT, 5, 0},\
{RG_KEY_DOWN, 3, 0},\
{RG_KEY_LEFT, 4, 0},\
{RG_KEY_SELECT, 1, 0},\
{RG_KEY_START, 8, 0},\
{RG_KEY_A, 7, 0},\
{RG_KEY_B, 6, 0},\
}
#define RG_GAMEPAD_VIRT_MAP {\
{RG_KEY_MENU, RG_KEY_START | RG_KEY_SELECT},\

View File

@ -9,6 +9,10 @@
#define RG_STORAGE_SDMMC_SPEED SDMMC_FREQ_DEFAULT
// #define RG_STORAGE_FLASH_PARTITION "vfs"
// GPIO Extender
#define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
#define RG_I2C_GPIO_ADDR 0x20
// Audio
#define RG_AUDIO_USE_INT_DAC 0 // 0 = Disable, 1 = GPIO25, 2 = GPIO26, 3 = Both
#define RG_AUDIO_USE_EXT_DAC 1 // 0 = Disable, 1 = Enable
@ -43,14 +47,14 @@
// Input
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
#define RG_GAMEPAD_I2C_MAP {\
{RG_KEY_UP, 2, 1},\
{RG_KEY_RIGHT, 5, 1},\
{RG_KEY_DOWN, 3, 1},\
{RG_KEY_LEFT, 4, 1},\
{RG_KEY_SELECT, 1, 1},\
{RG_KEY_START, 0, 1},\
{RG_KEY_A, 6, 1},\
{RG_KEY_B, 7, 1},\
{RG_KEY_UP, 2, 0},\
{RG_KEY_RIGHT, 5, 0},\
{RG_KEY_DOWN, 3, 0},\
{RG_KEY_LEFT, 4, 0},\
{RG_KEY_SELECT, 1, 0},\
{RG_KEY_START, 0, 0},\
{RG_KEY_A, 6, 0},\
{RG_KEY_B, 7, 0},\
}
#define RG_GAMEPAD_GPIO_MAP {\
{RG_KEY_L, GPIO_NUM_40, GPIO_PULLUP_ONLY, 0},\

View File

@ -10,8 +10,8 @@
// #define RG_STORAGE_FLASH_PARTITION "vfs"
// GPIO Extender
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
// #define RG_I2C_GPIO_ADDR 0x00
#define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
#define RG_I2C_GPIO_ADDR 0x20
// Audio
#define RG_AUDIO_USE_INT_DAC 0 // 0 = Disable, 1 = GPIO25, 2 = GPIO26, 3 = Both
@ -48,15 +48,15 @@
// Input
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
#define RG_GAMEPAD_I2C_MAP {\
{RG_KEY_UP, 2, 1},\
{RG_KEY_RIGHT, 5, 1},\
{RG_KEY_DOWN, 3, 1},\
{RG_KEY_LEFT, 4, 1},\
{RG_KEY_SELECT, 1, 1},\
{RG_KEY_START, 0, 1},\
{RG_KEY_MENU, 8, 1},\
{RG_KEY_A, 6, 1},\
{RG_KEY_B, 7, 1},\
{RG_KEY_UP, 2, 0},\
{RG_KEY_RIGHT, 5, 0},\
{RG_KEY_DOWN, 3, 0},\
{RG_KEY_LEFT, 4, 0},\
{RG_KEY_SELECT, 1, 0},\
{RG_KEY_START, 0, 0},\
{RG_KEY_MENU, 8, 0},\
{RG_KEY_A, 6, 0},\
{RG_KEY_B, 7, 0},\
}
#define RG_GAMEPAD_VIRT_MAP {\
{RG_KEY_OPTION, RG_KEY_SELECT | RG_KEY_A},\

View File

@ -10,8 +10,8 @@
// #define RG_STORAGE_FLASH_PARTITION "vfs"
// GPIO Extender
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
// #define RG_I2C_GPIO_ADDR 0x00
#define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
#define RG_I2C_GPIO_ADDR 0x20
// Audio
#define RG_AUDIO_USE_INT_DAC 0 // 0 = Disable, 1 = GPIO25, 2 = GPIO26, 3 = Both
@ -49,15 +49,15 @@
*/
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
#define RG_GAMEPAD_I2C_MAP {\
{RG_KEY_UP, 2, 1},\
{RG_KEY_RIGHT, 5, 1},\
{RG_KEY_DOWN, 3, 1},\
{RG_KEY_LEFT, 4, 1},\
{RG_KEY_SELECT, 0, 1},\
{RG_KEY_START, 1, 1},\
{RG_KEY_MENU, 8, 1},\
{RG_KEY_A, 6, 1},\
{RG_KEY_B, 7, 1},\
{RG_KEY_UP, 2, 0},\
{RG_KEY_RIGHT, 5, 0},\
{RG_KEY_DOWN, 3, 0},\
{RG_KEY_LEFT, 4, 0},\
{RG_KEY_SELECT, 0, 0},\
{RG_KEY_START, 1, 0},\
{RG_KEY_MENU, 8, 0},\
{RG_KEY_A, 6, 0},\
{RG_KEY_B, 7, 0},\
}
#define RG_GAMEPAD_VIRT_MAP {\
{RG_KEY_OPTION, RG_KEY_SELECT | RG_KEY_A},\

View File

@ -6,6 +6,10 @@
#define RG_STORAGE_SDSPI_HOST SPI2_HOST
#define RG_STORAGE_SDSPI_SPEED SDMMC_FREQ_DEFAULT
// GPIO Extender
#define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
#define RG_I2C_GPIO_ADDR T_DECK_KBD_ADDRESS
// Audio
#define RG_AUDIO_USE_INT_DAC 0 // 0 = Disable, 1 = GPIO25, 2 = GPIO26, 3 = Both
#define RG_AUDIO_USE_EXT_DAC 1 // 0 = Disable, 1 = Enable