summaryrefslogtreecommitdiff
path: root/shared-bindings
diff options
context:
space:
mode:
authorRadomir Dopieralski <openstack@sheep.art.pl>2018-08-23 23:22:47 +0200
committerRadomir Dopieralski <openstack@sheep.art.pl>2019-02-28 23:34:03 +0100
commit59f63eaef6d1024163864c9b30f879efc9dfd682 (patch)
tree30c08d2c5e052e0929b932d835605ffe845aa952 /shared-bindings
parent0a5c1c94025a1d36762d14b48995337b0f09ce97 (diff)
Handle new buttons
Diffstat (limited to 'shared-bindings')
-rw-r--r--shared-bindings/_pew/PewPew.c15
-rw-r--r--shared-bindings/_pew/__init__.c13
2 files changed, 26 insertions, 2 deletions
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);