Skip to content

Commit 2fe3374

Browse files
authored
Merge pull request #35 from Peetz0r/gpio-convenience-functions
Convenience functions for getting and setting RP2040 GPIO
2 parents 8886bae + c5c0de5 commit 2fe3374

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

components/driver_mch22/modmch22.c

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ void driver_mch22_init() {
5353
rp2040.pin_interrupt = GPIO_INT_RP2040;
5454
rp2040.queue = xQueueCreate(15, sizeof(rp2040_input_message_t));
5555
rp2040_init(&rp2040);
56-
56+
5757
ice40.spi_bus = SPI_BUS;
5858
ice40.pin_cs = GPIO_SPI_CS_FPGA;
5959
ice40.pin_done = -1;
@@ -91,6 +91,38 @@ static mp_obj_t buttons() {
9191
}
9292
static MP_DEFINE_CONST_FUN_OBJ_0(buttons_obj, buttons);
9393

94+
static mp_obj_t get_gpio_dir(mp_obj_t gpio) {
95+
uint8_t value_gpio = mp_obj_get_int(gpio);
96+
uint8_t value_direction;
97+
rp2040_get_gpio_dir(&rp2040, value_gpio, &value_direction);
98+
return mp_obj_new_int(value_direction);
99+
}
100+
static MP_DEFINE_CONST_FUN_OBJ_1(get_gpio_dir_obj, get_gpio_dir);
101+
102+
static mp_obj_t set_gpio_dir(mp_obj_t gpio, mp_obj_t value) {
103+
uint8_t value_gpio = mp_obj_get_int(gpio);
104+
bool value_value = (bool) mp_obj_get_int(value);
105+
rp2040_set_gpio_dir(&rp2040, value_gpio, value_value);
106+
return mp_const_none;
107+
}
108+
static MP_DEFINE_CONST_FUN_OBJ_2(set_gpio_dir_obj, set_gpio_dir);
109+
110+
static mp_obj_t get_gpio_value(mp_obj_t gpio) {
111+
uint8_t value_gpio = mp_obj_get_int(gpio);
112+
uint8_t value_value;
113+
rp2040_get_gpio_value(&rp2040, value_gpio, &value_value);
114+
return mp_obj_new_int(value_value);
115+
}
116+
static MP_DEFINE_CONST_FUN_OBJ_1(get_gpio_value_obj, get_gpio_value);
117+
118+
static mp_obj_t set_gpio_value(mp_obj_t gpio, mp_obj_t value) {
119+
uint8_t value_gpio = mp_obj_get_int(gpio);
120+
bool value_value = (bool) mp_obj_get_int(value);
121+
rp2040_set_gpio_value(&rp2040, value_gpio, value_value);
122+
return mp_const_none;
123+
}
124+
static MP_DEFINE_CONST_FUN_OBJ_2(set_gpio_value_obj, set_gpio_value);
125+
94126
static mp_obj_t set_handler(mp_obj_t handler) {
95127
touch_callback = handler;
96128
return mp_const_none;
@@ -275,9 +307,14 @@ static mp_obj_t read_vusb() {
275307
}
276308
static MP_DEFINE_CONST_FUN_OBJ_0(read_vusb_obj, read_vusb);
277309

310+
typedef enum {SAO_IO0_PIN, SAO_IO1_PIN, PROTO_0_PIN, PROTO_1_PIN} gpio_name_t;
278311

279312
STATIC const mp_rom_map_elem_t mch22_module_globals_table[] = {
280313
{MP_ROM_QSTR(MP_QSTR_buttons), MP_ROM_PTR(&buttons_obj)},
314+
{MP_ROM_QSTR(MP_QSTR_get_gpio_dir), MP_ROM_PTR(&get_gpio_dir_obj)},
315+
{MP_ROM_QSTR(MP_QSTR_set_gpio_dir), MP_ROM_PTR(&set_gpio_dir_obj)},
316+
{MP_ROM_QSTR(MP_QSTR_get_gpio_value), MP_ROM_PTR(&get_gpio_value_obj)},
317+
{MP_ROM_QSTR(MP_QSTR_set_gpio_value), MP_ROM_PTR(&set_gpio_value_obj)},
281318
{MP_ROM_QSTR(MP_QSTR_get_brightness), MP_ROM_PTR(&get_brightness_obj)},
282319
{MP_ROM_QSTR(MP_QSTR_set_brightness), MP_ROM_PTR(&set_brightness_obj)},
283320
{MP_ROM_QSTR(MP_QSTR_set_handler), MP_ROM_PTR(&set_handler_obj)},
@@ -293,6 +330,11 @@ STATIC const mp_rom_map_elem_t mch22_module_globals_table[] = {
293330
{MP_ROM_QSTR(MP_QSTR_exit_python), MP_ROM_PTR(&mch22_return_to_launcher_obj)},
294331
{MP_ROM_QSTR(MP_QSTR_read_vbat), MP_ROM_PTR(&read_vbat_obj)},
295332
{MP_ROM_QSTR(MP_QSTR_read_vusb), MP_ROM_PTR(&read_vusb_obj)},
333+
334+
{ MP_ROM_QSTR(MP_QSTR_SAO_IO0_PIN), MP_ROM_INT(SAO_IO0_PIN) },
335+
{ MP_ROM_QSTR(MP_QSTR_SAO_IO1_PIN), MP_ROM_INT(SAO_IO1_PIN) },
336+
{ MP_ROM_QSTR(MP_QSTR_PROTO_0_PIN), MP_ROM_INT(PROTO_0_PIN) },
337+
{ MP_ROM_QSTR(MP_QSTR_PROTO_1_PIN), MP_ROM_INT(PROTO_1_PIN) },
296338
};
297339

298340
STATIC MP_DEFINE_CONST_DICT(mch22_module_globals, mch22_module_globals_table);

0 commit comments

Comments
 (0)