From 59f63eaef6d1024163864c9b30f879efc9dfd682 Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Thu, 23 Aug 2018 23:22:47 +0200 Subject: Handle new buttons --- shared-bindings/_pew/PewPew.c | 15 +++++++++++++-- shared-bindings/_pew/__init__.c | 13 +++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) (limited to 'shared-bindings') diff --git a/shared-bindings/_pew/PewPew.c b/shared-bindings/_pew/PewPew.c index c9322100f..69c9ff4fc 100644 --- a/shared-bindings/_pew/PewPew.c +++ b/shared-bindings/_pew/PewPew.c @@ -50,14 +50,15 @@ //| STATIC mp_obj_t pewpew_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *pos_args) { - mp_arg_check_num(n_args, n_kw, 3, 3, true); + mp_arg_check_num(n_args, n_kw, 4, 4, true); mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, pos_args + n_args); - enum { ARG_buffer, ARG_rows, ARG_cols }; + enum { ARG_buffer, ARG_rows, ARG_cols, ARG_buttons }; static const mp_arg_t allowed_args[] = { { MP_QSTR_buffer, MP_ARG_OBJ | MP_ARG_REQUIRED }, { MP_QSTR_rows, MP_ARG_OBJ | MP_ARG_REQUIRED }, { MP_QSTR_cols, MP_ARG_OBJ | MP_ARG_REQUIRED }, + { MP_QSTR_buttons, MP_ARG_OBJ | MP_ARG_REQUIRED }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args, pos_args, &kw_args, MP_ARRAY_SIZE(allowed_args), @@ -96,6 +97,14 @@ STATIC mp_obj_t pewpew_make_new(const mp_obj_type_t *type, size_t n_args, common_hal_digitalio_digitalinout_deinited(pin)); } + if (!MP_OBJ_IS_TYPE(args[ARG_buttons].u_obj, + &digitalio_digitalinout_type)) { + mp_raise_TypeError("expected a DigitalInOut"); + } + digitalio_digitalinout_obj_t *buttons = MP_OBJ_TO_PTR( + args[ARG_buttons].u_obj); + raise_error_if_deinited( + common_hal_digitalio_digitalinout_deinited(buttons)); pew_obj_t *pew = MP_STATE_VM(pew_singleton); if (!pew) { @@ -110,6 +119,8 @@ STATIC mp_obj_t pewpew_make_new(const mp_obj_type_t *type, size_t n_args, pew->rows_size = rows_size; pew->cols = cols; pew->cols_size = cols_size; + pew->buttons = buttons; + pew->pressed = 0; pew_init(); return MP_OBJ_FROM_PTR(pew); diff --git a/shared-bindings/_pew/__init__.c b/shared-bindings/_pew/__init__.c index 39a3bc885..652d95f1b 100644 --- a/shared-bindings/_pew/__init__.c +++ b/shared-bindings/_pew/__init__.c @@ -27,6 +27,18 @@ #include "py/runtime.h" #include "py/mphal.h" #include "PewPew.h" +#include "shared-module/_pew/PewPew.h" + +STATIC mp_obj_t get_pressed(void) { + pew_obj_t *pew = MP_STATE_VM(pew_singleton); + if (!pew) { + return mp_const_none; + } + uint8_t pressed = pew->pressed; + pew->pressed = 0; + return mp_obj_new_int(pressed); +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(get_pressed_obj, get_pressed); //| :mod:`_pew` --- LED matrix driver @@ -44,6 +56,7 @@ STATIC const mp_rom_map_elem_t pew_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR__pew) }, { MP_OBJ_NEW_QSTR(MP_QSTR_PewPew), MP_ROM_PTR(&pewpew_type)}, + { MP_OBJ_NEW_QSTR(MP_QSTR_get_pressed), MP_ROM_PTR(&get_pressed_obj)}, }; STATIC MP_DEFINE_CONST_DICT(pew_module_globals, pew_module_globals_table); -- cgit v1.2.3