From 13e2a23c2667335713a8682ba18e2bd75a310269 Mon Sep 17 00:00:00 2001 From: fleur <spacecarrot@fleurshax.net> Date: Sat, 17 Aug 2019 08:13:21 +0200 Subject: [PATCH] feat(pycardium): Add buttons module --- pycardium/meson.build | 1 + pycardium/modules/buttons.c | 39 ++++++++++++++++++++++++++++++++++++ pycardium/modules/qstrdefs.h | 9 +++++++++ pycardium/mpconfigport.h | 1 + 4 files changed, 50 insertions(+) create mode 100644 pycardium/modules/buttons.c diff --git a/pycardium/meson.build b/pycardium/meson.build index b43d0fc5..4d976e0a 100644 --- a/pycardium/meson.build +++ b/pycardium/meson.build @@ -1,6 +1,7 @@ name = 'pycardium' modsrc = files( + 'modules/buttons.c', 'modules/fat_file.c', 'modules/fat_reader_import.c', 'modules/interrupt.c', diff --git a/pycardium/modules/buttons.c b/pycardium/modules/buttons.c new file mode 100644 index 00000000..ab8dabd7 --- /dev/null +++ b/pycardium/modules/buttons.c @@ -0,0 +1,39 @@ +#include "py/obj.h" +#include "py/objlist.h" +#include "py/runtime.h" +#include <stdio.h> + +#include "epicardium.h" + +static mp_obj_t mp_buttons_read(mp_obj_t mask_in) +{ + uint8_t mask = mp_obj_get_int(mask_in); + uint8_t button_states = epic_buttons_read(mask); + return MP_OBJ_NEW_SMALL_INT(button_states); +} +static MP_DEFINE_CONST_FUN_OBJ_1(buttons_read_obj, mp_buttons_read); + +static const mp_rom_map_elem_t buttons_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_buttons) }, + { MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&buttons_read_obj) }, + { MP_ROM_QSTR(MP_QSTR_BOTTOM_LEFT), + MP_OBJ_NEW_SMALL_INT(BUTTON_LEFT_BOTTOM) }, + { MP_ROM_QSTR(MP_QSTR_BOTTOM_RIGHT), + MP_OBJ_NEW_SMALL_INT(BUTTON_RIGHT_BOTTOM) }, + { MP_ROM_QSTR(MP_QSTR_TOP_RIGHT), + MP_OBJ_NEW_SMALL_INT(BUTTON_RIGHT_TOP) }, + { MP_ROM_QSTR(MP_QSTR_TOP_LEFT), + MP_OBJ_NEW_SMALL_INT(BUTTON_LEFT_TOP) }, + { MP_ROM_QSTR(MP_QSTR_RESET), MP_OBJ_NEW_SMALL_INT(BUTTON_RESET) }, +}; +static MP_DEFINE_CONST_DICT( + buttons_module_globals, buttons_module_globals_table +); + +const mp_obj_module_t buttons_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t *)&buttons_module_globals, +}; + +/* clang-format off */ +MP_REGISTER_MODULE(MP_QSTR_buttons, buttons_module, MODULE_BUTTONS_ENABLED); diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h index 2da8ea8e..e1bb0a02 100644 --- a/pycardium/modules/qstrdefs.h +++ b/pycardium/modules/qstrdefs.h @@ -24,6 +24,15 @@ Q(BOTTOM_RIGHT) Q(TOP_LEFT) Q(TOP_RIGHT) +/* buttons */ +Q(buttons) +Q(read) +Q(BOTTOM_LEFT) +Q(TOP_LEFT) +Q(BOTTOM_RIGHT) +Q(TOP_RIGHT) +Q(RESET) + /* utime */ Q(utime) Q(alarm) diff --git a/pycardium/mpconfigport.h b/pycardium/mpconfigport.h index 5e4d09e9..00430b2e 100644 --- a/pycardium/mpconfigport.h +++ b/pycardium/mpconfigport.h @@ -39,6 +39,7 @@ #define MICROPY_PY_UERRNO (1) /* Modules */ +#define MODULE_BUTTONS_ENABLED (1) #define MODULE_DISPLAY_ENABLED (1) #define MODULE_INTERRUPT_ENABLED (1) #define MODULE_LEDS_ENABLED (1) -- GitLab