From 9d66b238482b1c7b981236fcba016c5f66577c81 Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Tue, 17 Sep 2019 15:58:22 +0200 Subject: [PATCH] [python] Add an ion module --- python/Makefile | 2 ++ python/port/genhdr/qstrdefs.in.h | 4 ++++ python/port/mod/ion/modion.cpp | 13 +++++++++++++ python/port/mod/ion/modion.h | 3 +++ python/port/mod/ion/modion_table.c | 15 +++++++++++++++ python/port/mpconfigport.h | 2 ++ 6 files changed, 39 insertions(+) create mode 100644 python/port/mod/ion/modion.cpp create mode 100644 python/port/mod/ion/modion.h create mode 100644 python/port/mod/ion/modion_table.c diff --git a/python/Makefile b/python/Makefile index 6da512c57..dc917fab1 100644 --- a/python/Makefile +++ b/python/Makefile @@ -130,6 +130,8 @@ port_src += $(addprefix python/port/,\ port.c \ builtins.c \ helpers.c \ + mod/ion/modion.cpp \ + mod/ion/modion_table.cpp \ mod/kandinsky/modkandinsky.cpp \ mod/kandinsky/modkandinsky_table.c \ mod/time/modtime.c \ diff --git a/python/port/genhdr/qstrdefs.in.h b/python/port/genhdr/qstrdefs.in.h index 73349bb89..655b3d039 100644 --- a/python/port/genhdr/qstrdefs.in.h +++ b/python/port/genhdr/qstrdefs.in.h @@ -15,6 +15,10 @@ QCFG(BYTES_IN_LEN, (1)) QCFG(BYTES_IN_HASH, (2)) +// Ion QSTR +Q(ion) +Q(keydown) + // Kandinsky QSTRs Q(kandinsky) Q(color) diff --git a/python/port/mod/ion/modion.cpp b/python/port/mod/ion/modion.cpp new file mode 100644 index 000000000..e1bf78417 --- /dev/null +++ b/python/port/mod/ion/modion.cpp @@ -0,0 +1,13 @@ +extern "C" { +#include "modion.h" +#include +#include +} +#include +#include "port.h" + +mp_obj_t modion_keyboard_keydown(mp_obj_t key_o) { + Ion::Keyboard::Key key = static_cast(mp_obj_get_int(key_o)); + Ion::Keyboard::State state = Ion::Keyboard::scan(); + return MP_OBJ_NEW_SMALL_INT(state.keyDown(key)); +} diff --git a/python/port/mod/ion/modion.h b/python/port/mod/ion/modion.h new file mode 100644 index 000000000..d8ffe219b --- /dev/null +++ b/python/port/mod/ion/modion.h @@ -0,0 +1,3 @@ +#include + +mp_obj_t modion_keyboard_keydown(mp_obj_t key_o); diff --git a/python/port/mod/ion/modion_table.c b/python/port/mod/ion/modion_table.c new file mode 100644 index 000000000..cfa6bd369 --- /dev/null +++ b/python/port/mod/ion/modion_table.c @@ -0,0 +1,15 @@ +#include "modion.h" + +MP_DEFINE_CONST_FUN_OBJ_1(modion_keyboard_keydown_obj, modion_keyboard_keydown); + +STATIC const mp_rom_map_elem_t modion_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_ion) }, + { MP_ROM_QSTR(MP_QSTR_keydown), MP_ROM_PTR(&modion_keyboard_keydown_obj) }, +}; + +STATIC MP_DEFINE_CONST_DICT(modion_module_globals, modion_module_globals_table); + +const mp_obj_module_t modion_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t*)&modion_module_globals, +}; diff --git a/python/port/mpconfigport.h b/python/port/mpconfigport.h index dae99b6f2..77348f656 100644 --- a/python/port/mpconfigport.h +++ b/python/port/mpconfigport.h @@ -112,11 +112,13 @@ typedef long mp_off_t; #define MP_STATE_PORT MP_STATE_VM +extern const struct _mp_obj_module_t modion_module; extern const struct _mp_obj_module_t modkandinsky_module; extern const struct _mp_obj_module_t modtime_module; extern const struct _mp_obj_module_t modturtle_module; #define MICROPY_PORT_BUILTIN_MODULES \ + { MP_ROM_QSTR(MP_QSTR_ion), MP_ROM_PTR(&modion_module) }, \ { MP_ROM_QSTR(MP_QSTR_kandinsky), MP_ROM_PTR(&modkandinsky_module) }, \ { MP_ROM_QSTR(MP_QSTR_time), MP_ROM_PTR(&modtime_module) }, \ { MP_ROM_QSTR(MP_QSTR_turtle), MP_ROM_PTR(&modturtle_module) }, \