Skip to content

Commit 936ea8c

Browse files
committed
rg_input: Added initialization code for RG_GAMEPAD_I2C_MAP when extender is used
I had to convert bitmasks in all targets to use pin/bit number instead.
1 parent 1454089 commit 936ea8c

File tree

10 files changed

+111
-76
lines changed

10 files changed

+111
-76
lines changed

components/retro-go/rg_input.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,9 @@ bool rg_input_read_gamepad_raw(uint32_t *out)
143143
#endif
144144
for (size_t i = 0; i < RG_COUNT(keymap_i2c); ++i)
145145
{
146-
if ((buttons & keymap_i2c[i].src) == keymap_i2c[i].src)
147-
state |= keymap_i2c[i].key;
146+
const rg_keymap_i2c_t *mapping = &keymap_i2c[i];
147+
if (((buttons >> mapping->num) & 1) == mapping->level)
148+
state |= mapping->key;
148149
}
149150
#endif
150151

@@ -285,8 +286,13 @@ void rg_input_init(void)
285286

286287
#if defined(RG_GAMEPAD_I2C_MAP)
287288
RG_LOGI("Initializing I2C gamepad driver...");
288-
rg_i2c_init();
289-
#if defined(RG_TARGET_T_DECK_PLUS)
289+
#if defined(RG_I2C_GPIO_DRIVER)
290+
for (size_t i = 0; i < RG_COUNT(keymap_i2c); ++i)
291+
{
292+
const rg_keymap_i2c_t *mapping = &keymap_i2c[i];
293+
rg_i2c_gpio_set_direction(mapping->num, RG_GPIO_INPUT);
294+
}
295+
#elif defined(RG_TARGET_T_DECK_PLUS)
290296
rg_i2c_write_byte(T_DECK_KBD_ADDRESS, -1, T_DECK_KBD_MODE_RAW_CMD);
291297
#endif
292298
UPDATE_GLOBAL_MAP(keymap_i2c);

components/retro-go/rg_input.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ typedef struct
4848
typedef struct
4949
{
5050
rg_key_t key;
51-
uint32_t src;
51+
int num; // pin (or bit) number
52+
int level; // 0-1
5253
} rg_keymap_i2c_t;
5354

5455
// #define RG_GAMEPAD_KBD_MAP {{}, ...} for Keyboard driver

components/retro-go/targets/byteboi-rev1/config.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@
4848
// Input
4949
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
5050
#define RG_GAMEPAD_I2C_MAP {\
51-
{RG_KEY_UP, (1<<0)},\
52-
{RG_KEY_RIGHT, (1<<2)},\
53-
{RG_KEY_DOWN, (1<<3)},\
54-
{RG_KEY_LEFT, (1<<1)},\
55-
{RG_KEY_SELECT, (1<<4)},\
56-
{RG_KEY_A, (1<<6)},\
57-
{RG_KEY_B, (1<<5)},\
51+
{RG_KEY_UP, 0, 1},\
52+
{RG_KEY_RIGHT, 2, 1},\
53+
{RG_KEY_DOWN, 3, 1},\
54+
{RG_KEY_LEFT, 1, 1},\
55+
{RG_KEY_SELECT, 4, 1},\
56+
{RG_KEY_A, 6, 1},\
57+
{RG_KEY_B, 5, 1},\
5858
}
5959
#define RG_GAMEPAD_VIRT_MAP {\
6060
{RG_KEY_START, RG_KEY_A | RG_KEY_SELECT},\
@@ -73,6 +73,7 @@
7373
#define RG_I2C_GPIO_DRIVER 2 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
7474
#define RG_I2C_GPIO_ADDR 0x74
7575

76+
7677
// Status LED
7778
//#define RG_GPIO_LED GPIO_NUM_14
7879

components/retro-go/targets/esplay-micro/config.h

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@
5353
// A and B silkscreen on the board are swapped relative to standard Nintendo layout
5454
// Temporarily unmapped menu and option. Start + Select activates menu.
5555
#define RG_GAMEPAD_I2C_MAP {\
56-
{RG_KEY_UP, (1<<2)},\
57-
{RG_KEY_RIGHT, (1<<5)},\
58-
{RG_KEY_DOWN, (1<<3)},\
59-
{RG_KEY_LEFT, (1<<4)},\
60-
{RG_KEY_SELECT, (1<<1)},\
61-
{RG_KEY_START, (1<<8)},\
62-
{RG_KEY_A, (1<<7)},\
63-
{RG_KEY_B, (1<<6)},\
56+
{RG_KEY_UP, 2, 1},\
57+
{RG_KEY_RIGHT, 5, 1},\
58+
{RG_KEY_DOWN, 3, 1},\
59+
{RG_KEY_LEFT, 4, 1},\
60+
{RG_KEY_SELECT, 1, 1},\
61+
{RG_KEY_START, 8, 1},\
62+
{RG_KEY_A, 7, 1},\
63+
{RG_KEY_B, 6, 1},\
6464
}
6565
#define RG_GAMEPAD_VIRT_MAP {\
6666
{RG_KEY_MENU, RG_KEY_START | RG_KEY_SELECT},\
@@ -72,6 +72,11 @@
7272
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) - 170) / 30.f * 100.f)
7373
#define RG_BATTERY_CALC_VOLTAGE(raw) ((raw) * 2.f * 0.001f)
7474

75+
// GPIO Extender
76+
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
77+
// #define RG_I2C_GPIO_ADDR 0x00
78+
79+
7580
// Status LED
7681
#define RG_GPIO_LED GPIO_NUM_13 // Causes the "power" LED to blink on disk access.
7782

components/retro-go/targets/esplay-s3/config.h

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@
4343
// Input
4444
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
4545
#define RG_GAMEPAD_I2C_MAP {\
46-
{RG_KEY_UP, (1<<2)},\
47-
{RG_KEY_RIGHT, (1<<5)},\
48-
{RG_KEY_DOWN, (1<<3)},\
49-
{RG_KEY_LEFT, (1<<4)},\
50-
{RG_KEY_SELECT, (1<<1)},\
51-
{RG_KEY_START, (1<<0)},\
52-
{RG_KEY_A, (1<<6)},\
53-
{RG_KEY_B, (1<<7)},\
46+
{RG_KEY_UP, 2, 1},\
47+
{RG_KEY_RIGHT, 5, 1},\
48+
{RG_KEY_DOWN, 3, 1},\
49+
{RG_KEY_LEFT, 4, 1},\
50+
{RG_KEY_SELECT, 1, 1},\
51+
{RG_KEY_START, 0, 1},\
52+
{RG_KEY_A, 6, 1},\
53+
{RG_KEY_B, 7, 1},\
5454
}
5555
#define RG_GAMEPAD_GPIO_MAP {\
5656
{RG_KEY_L, GPIO_NUM_40, GPIO_PULLUP_ONLY, 0},\
@@ -66,6 +66,11 @@
6666
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) * 2.f - 3500.f) / (4200.f - 3500.f) * 100.f)
6767
#define RG_BATTERY_CALC_VOLTAGE(raw) ((raw) * 2.f * 0.001f)
6868

69+
// GPIO Extender
70+
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
71+
// #define RG_I2C_GPIO_ADDR 0x00
72+
73+
6974
// Status LED
7075
#define RG_GPIO_LED GPIO_NUM_2
7176

@@ -88,7 +93,7 @@
8893
#define RG_GPIO_SDSPI_D0 GPIO_NUM_17
8994

9095
// External I2S DAC
91-
#define RG_GPIO_SND_I2S_BCK 38
92-
#define RG_GPIO_SND_I2S_WS 13
93-
#define RG_GPIO_SND_I2S_DATA 9
94-
#define RG_GPIO_SND_AMP_ENABLE 18
96+
#define RG_GPIO_SND_I2S_BCK GPIO_NUM_38
97+
#define RG_GPIO_SND_I2S_WS GPIO_NUM_13
98+
#define RG_GPIO_SND_I2S_DATA GPIO_NUM_9
99+
#define RG_GPIO_SND_AMP_ENABLE GPIO_NUM_18

components/retro-go/targets/mrgc-g32/config.h

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@
4444
// Input
4545
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
4646
#define RG_GAMEPAD_I2C_MAP {\
47-
{RG_KEY_UP, (1<<2)},\
48-
{RG_KEY_RIGHT, (1<<5)},\
49-
{RG_KEY_DOWN, (1<<3)},\
50-
{RG_KEY_LEFT, (1<<4)},\
51-
{RG_KEY_SELECT, (1<<1)},\
52-
{RG_KEY_START, (1<<0)},\
53-
{RG_KEY_MENU, (1<<8)},\
54-
{RG_KEY_A, (1<<6)},\
55-
{RG_KEY_B, (1<<7)},\
47+
{RG_KEY_UP, 2, 1},\
48+
{RG_KEY_RIGHT, 5, 1},\
49+
{RG_KEY_DOWN, 3, 1},\
50+
{RG_KEY_LEFT, 4, 1},\
51+
{RG_KEY_SELECT, 1, 1},\
52+
{RG_KEY_START, 0, 1},\
53+
{RG_KEY_MENU, 8, 1},\
54+
{RG_KEY_A, 6, 1},\
55+
{RG_KEY_B, 7, 1},\
5656
}
5757
#define RG_GAMEPAD_VIRT_MAP {\
5858
{RG_KEY_OPTION, RG_KEY_SELECT | RG_KEY_A},\
@@ -63,6 +63,11 @@
6363
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) - 170) / 30.f * 100.f)
6464
#define RG_BATTERY_CALC_VOLTAGE(raw) (3 * (raw) * 3.3f / 256)
6565

66+
// GPIO Extender
67+
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
68+
// #define RG_I2C_GPIO_ADDR 0x00
69+
70+
6671
// Status LED
6772
// #define RG_GPIO_LED GPIO_NUM_NC
6873

components/retro-go/targets/mrgc-gbm/config.h

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@
4545
*/
4646
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
4747
#define RG_GAMEPAD_I2C_MAP {\
48-
{RG_KEY_UP, (1<<2)},\
49-
{RG_KEY_RIGHT, (1<<5)},\
50-
{RG_KEY_DOWN, (1<<3)},\
51-
{RG_KEY_LEFT, (1<<4)},\
52-
{RG_KEY_SELECT, (1<<0)},\
53-
{RG_KEY_START, (1<<1)},\
54-
{RG_KEY_MENU, (1<<8)},\
55-
{RG_KEY_A, (1<<6)},\
56-
{RG_KEY_B, (1<<7)},\
48+
{RG_KEY_UP, 2, 1},\
49+
{RG_KEY_RIGHT, 5, 1},\
50+
{RG_KEY_DOWN, 3, 1},\
51+
{RG_KEY_LEFT, 4, 1},\
52+
{RG_KEY_SELECT, 0, 1},\
53+
{RG_KEY_START, 1, 1},\
54+
{RG_KEY_MENU, 8, 1},\
55+
{RG_KEY_A, 6, 1},\
56+
{RG_KEY_B, 7, 1},\
5757
}
5858
#define RG_GAMEPAD_VIRT_MAP {\
5959
{RG_KEY_OPTION, RG_KEY_SELECT | RG_KEY_A},\
@@ -64,6 +64,11 @@
6464
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) - 170) / 30.f * 100.f)
6565
#define RG_BATTERY_CALC_VOLTAGE(raw) (128 * 3.3f / (raw))
6666

67+
// GPIO Extender
68+
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
69+
// #define RG_I2C_GPIO_ADDR 0x00
70+
71+
6772
// Status LED (Does not seem to be mappable)
6873
// #define RG_GPIO_LED GPIO_NUM_13 // From OG Firmware
6974

components/retro-go/targets/odroid-go/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
7272
// #define RG_I2C_GPIO_ADDR 0x00
7373

74+
7475
// Status LED
7576
#define RG_GPIO_LED GPIO_NUM_2
7677

components/retro-go/targets/qtpy-gamer/config.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@
3131
// Input
3232
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
3333
#define RG_GAMEPAD_I2C_MAP {\
34-
{RG_KEY_UP, (1<<10)},\
35-
{RG_KEY_RIGHT, (1<<12)},\
36-
{RG_KEY_DOWN, (1<<13)},\
37-
{RG_KEY_LEFT, (1<<14)},\
38-
{RG_KEY_SELECT, (1<<2)},\
39-
{RG_KEY_START, (1<<4)},\
40-
{RG_KEY_MENU, (1<<11)},\
41-
{RG_KEY_OPTION, (1<<5)},\
42-
{RG_KEY_A, (1<<6)},\
43-
{RG_KEY_B, (1<<7)},\
34+
{RG_KEY_UP, 10, 1},\
35+
{RG_KEY_RIGHT, 12, 1},\
36+
{RG_KEY_DOWN, 13, 1},\
37+
{RG_KEY_LEFT, 14, 1},\
38+
{RG_KEY_SELECT, 2, 1},\
39+
{RG_KEY_START, 4, 1},\
40+
{RG_KEY_MENU, 11, 1},\
41+
{RG_KEY_OPTION, 5, 1},\
42+
{RG_KEY_A, 6, 1},\
43+
{RG_KEY_B, 7, 1},\
4444
}
4545

4646
// Battery
@@ -52,6 +52,7 @@
5252
#define RG_I2C_GPIO_DRIVER 1 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
5353
#define RG_I2C_GPIO_ADDR 0x58
5454

55+
5556
// Status LED - not actually used, we've got neopixels instead :/
5657
// #define RG_GPIO_LED GPIO_NUM_NC
5758

components/retro-go/targets/t-deck-plus/config.h

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,19 @@
6161

6262
// Input
6363
#define RG_GAMEPAD_I2C_MAP { \
64-
{RG_KEY_UP, (1<<18)},\
65-
{RG_KEY_RIGHT, (1<<17)},\
66-
{RG_KEY_DOWN, (1<<20)},\
67-
{RG_KEY_LEFT, (1<<19)},\
68-
{RG_KEY_SELECT, (1<<7)}, \
69-
{RG_KEY_START, (1<<30)},\
70-
{RG_KEY_OPTION, (1<<31)},\
71-
{RG_KEY_A, (1<<1)}, \
72-
{RG_KEY_B, (1<<3)}, \
73-
{RG_KEY_X, (1<<0)}, \
74-
{RG_KEY_Y, (1<<21)},\
75-
{RG_KEY_L, (1<<24)},\
76-
{RG_KEY_R, (1<<14)},\
64+
{RG_KEY_UP, 18, 1},\
65+
{RG_KEY_RIGHT, 17, 1},\
66+
{RG_KEY_DOWN, 20, 1},\
67+
{RG_KEY_LEFT, 19, 1},\
68+
{RG_KEY_SELECT, 7, 1},\
69+
{RG_KEY_START, 30, 1},\
70+
{RG_KEY_OPTION, 31, 1},\
71+
{RG_KEY_A, 1, 1},\
72+
{RG_KEY_B, 3, 1},\
73+
{RG_KEY_X, 0, 1},\
74+
{RG_KEY_Y, 21, 1},\
75+
{RG_KEY_L, 24, 1},\
76+
{RG_KEY_R, 14, 1},\
7777
}
7878

7979
#define RG_GAMEPAD_GPIO_MAP { \
@@ -89,6 +89,11 @@
8989
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) * 2.f - 3500.f) / (4200.f - 3500.f) * 100.f)
9090
#define RG_BATTERY_CALC_VOLTAGE(raw) ((raw) * 2.f * 0.001f)
9191

92+
// GPIO Extender
93+
// #define RG_I2C_GPIO_DRIVER 0 // 1 = AW9523, 2 = PCF9539, 3 = MCP23017
94+
// #define RG_I2C_GPIO_ADDR 0x00
95+
96+
9297
// I2C BUS
9398
#define RG_GPIO_I2C_SDA GPIO_NUM_18
9499
#define RG_GPIO_I2C_SCL GPIO_NUM_8
@@ -108,6 +113,6 @@
108113
#define RG_GPIO_SDSPI_CS GPIO_NUM_39
109114

110115
// External I2S DAC
111-
#define RG_GPIO_SND_I2S_BCK 7
112-
#define RG_GPIO_SND_I2S_WS 5
113-
#define RG_GPIO_SND_I2S_DATA 6
116+
#define RG_GPIO_SND_I2S_BCK GPIO_NUM_7
117+
#define RG_GPIO_SND_I2S_WS GPIO_NUM_5
118+
#define RG_GPIO_SND_I2S_DATA GPIO_NUM_6

0 commit comments

Comments
 (0)