From 7607c4cba4bc2c9fed23951cc6f331d84a6e80ff Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Fri, 15 Nov 2019 13:56:34 +0100 Subject: [PATCH] [python/modion] Use constants to identify keys --- python/port/genhdr/qstrdefs.in.h | 46 +++++++++++++++++ python/port/mod/ion/modion.cpp | 2 +- python/port/mod/ion/modion_table.c | 15 ------ python/port/mod/ion/modion_table.cpp | 77 ++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+), 16 deletions(-) delete mode 100644 python/port/mod/ion/modion_table.c create mode 100644 python/port/mod/ion/modion_table.cpp diff --git a/python/port/genhdr/qstrdefs.in.h b/python/port/genhdr/qstrdefs.in.h index 655b3d039..ff18301c9 100644 --- a/python/port/genhdr/qstrdefs.in.h +++ b/python/port/genhdr/qstrdefs.in.h @@ -18,6 +18,52 @@ QCFG(BYTES_IN_HASH, (2)) // Ion QSTR Q(ion) Q(keydown) +Q(KEY_LEFT) +Q(KEY_UP) +Q(KEY_DOWN) +Q(KEY_RIGHT) +Q(KEY_OK) +Q(KEY_BACK) +Q(KEY_HOME) +Q(KEY_ONOFF) +Q(KEY_SHIFT) +Q(KEY_ALPHA) +Q(KEY_XNT) +Q(KEY_VAR) +Q(KEY_TOOLBOX) +Q(KEY_BACKSPACE) +Q(KEY_EXP) +Q(KEY_LN) +Q(KEY_LOG) +Q(KEY_IMAGINARY) +Q(KEY_COMMA) +Q(KEY_POWER) +Q(KEY_SINE) +Q(KEY_COSINE) +Q(KEY_TANGENT) +Q(KEY_PI) +Q(KEY_SQRT) +Q(KEY_SQUARE) +Q(KEY_SEVEN) +Q(KEY_EIGHT) +Q(KEY_NINE) +Q(KEY_LEFTPARENTHESIS) +Q(KEY_RIGHTPARENTHESIS) +Q(KEY_FOUR) +Q(KEY_FIVE) +Q(KEY_SIX) +Q(KEY_MULTIPLICATION) +Q(KEY_DIVISION) +Q(KEY_ONE) +Q(KEY_TWO) +Q(KEY_THREE) +Q(KEY_PLUS) +Q(KEY_MINUS) +Q(KEY_ZERO) +Q(KEY_DOT) +Q(KEY_EE) +Q(KEY_ANS) +Q(KEY_EXE) // Kandinsky QSTRs Q(kandinsky) diff --git a/python/port/mod/ion/modion.cpp b/python/port/mod/ion/modion.cpp index e1bf78417..69118a103 100644 --- a/python/port/mod/ion/modion.cpp +++ b/python/port/mod/ion/modion.cpp @@ -9,5 +9,5 @@ extern "C" { 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)); + return mp_obj_new_bool(state.keyDown(key)); } diff --git a/python/port/mod/ion/modion_table.c b/python/port/mod/ion/modion_table.c deleted file mode 100644 index cfa6bd369..000000000 --- a/python/port/mod/ion/modion_table.c +++ /dev/null @@ -1,15 +0,0 @@ -#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/mod/ion/modion_table.cpp b/python/port/mod/ion/modion_table.cpp new file mode 100644 index 000000000..235c2c3ae --- /dev/null +++ b/python/port/mod/ion/modion_table.cpp @@ -0,0 +1,77 @@ +extern "C" { +#include "modion.h" +} + +#include + +/* We cannot use C99-style struct initizalition in C++. As a result, we cannot + * use the macros that micropython recommends, and we have to hand build those + * structs. To avoid errors, we drop in a few static_asserts. */ + +static_assert(sizeof(mp_fun_1_t) == sizeof(mp_fun_0_t)); +static_assert(sizeof(mp_obj_fun_builtin_fixed_t) == sizeof(mp_obj_base_t) + sizeof(mp_fun_1_t)); + +const mp_obj_fun_builtin_fixed_t modion_keyboard_keydown_obj = { + {&mp_type_fun_builtin_1}, + (mp_fun_0_t)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) }, + { MP_ROM_QSTR(MP_QSTR_KEY_LEFT), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Left) }, + { MP_ROM_QSTR(MP_QSTR_KEY_UP), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Up) }, + { MP_ROM_QSTR(MP_QSTR_KEY_DOWN), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Down) }, + { MP_ROM_QSTR(MP_QSTR_KEY_RIGHT), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Right) }, + { MP_ROM_QSTR(MP_QSTR_KEY_OK), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::OK) }, + { MP_ROM_QSTR(MP_QSTR_KEY_BACK), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Back) }, + { MP_ROM_QSTR(MP_QSTR_KEY_HOME), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Home) }, + { MP_ROM_QSTR(MP_QSTR_KEY_ONOFF), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::OnOff) }, + { MP_ROM_QSTR(MP_QSTR_KEY_SHIFT), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Shift) }, + { MP_ROM_QSTR(MP_QSTR_KEY_ALPHA), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Alpha) }, + { MP_ROM_QSTR(MP_QSTR_KEY_XNT), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::XNT) }, + { MP_ROM_QSTR(MP_QSTR_KEY_VAR), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Var) }, + { MP_ROM_QSTR(MP_QSTR_KEY_TOOLBOX), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Toolbox) }, + { MP_ROM_QSTR(MP_QSTR_KEY_BACKSPACE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Backspace) }, + { MP_ROM_QSTR(MP_QSTR_KEY_EXP), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Exp) }, + { MP_ROM_QSTR(MP_QSTR_KEY_LN), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Ln) }, + { MP_ROM_QSTR(MP_QSTR_KEY_LOG), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Log) }, + { MP_ROM_QSTR(MP_QSTR_KEY_IMAGINARY), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Imaginary) }, + { MP_ROM_QSTR(MP_QSTR_KEY_COMMA), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Comma) }, + { MP_ROM_QSTR(MP_QSTR_KEY_POWER), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Power) }, + { MP_ROM_QSTR(MP_QSTR_KEY_SINE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Sine) }, + { MP_ROM_QSTR(MP_QSTR_KEY_COSINE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Cosine) }, + { MP_ROM_QSTR(MP_QSTR_KEY_TANGENT), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Tangent) }, + { MP_ROM_QSTR(MP_QSTR_KEY_PI), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Pi) }, + { MP_ROM_QSTR(MP_QSTR_KEY_SQRT), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Sqrt) }, + { MP_ROM_QSTR(MP_QSTR_KEY_SQUARE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Square) }, + { MP_ROM_QSTR(MP_QSTR_KEY_SEVEN), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Seven) }, + { MP_ROM_QSTR(MP_QSTR_KEY_EIGHT), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Eight) }, + { MP_ROM_QSTR(MP_QSTR_KEY_NINE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Nine) }, + { MP_ROM_QSTR(MP_QSTR_KEY_LEFTPARENTHESIS), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::LeftParenthesis) }, + { MP_ROM_QSTR(MP_QSTR_KEY_RIGHTPARENTHESIS), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::RightParenthesis) }, + { MP_ROM_QSTR(MP_QSTR_KEY_FOUR), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Four) }, + { MP_ROM_QSTR(MP_QSTR_KEY_FIVE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Five) }, + { MP_ROM_QSTR(MP_QSTR_KEY_SIX), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Six) }, + { MP_ROM_QSTR(MP_QSTR_KEY_MULTIPLICATION), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Multiplication) }, + { MP_ROM_QSTR(MP_QSTR_KEY_DIVISION), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Division) }, + { MP_ROM_QSTR(MP_QSTR_KEY_ONE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::One) }, + { MP_ROM_QSTR(MP_QSTR_KEY_TWO), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Two) }, + { MP_ROM_QSTR(MP_QSTR_KEY_THREE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Three) }, + { MP_ROM_QSTR(MP_QSTR_KEY_PLUS), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Plus) }, + { MP_ROM_QSTR(MP_QSTR_KEY_MINUS), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Minus) }, + { MP_ROM_QSTR(MP_QSTR_KEY_ZERO), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Zero) }, + { MP_ROM_QSTR(MP_QSTR_KEY_DOT), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Dot) }, + { MP_ROM_QSTR(MP_QSTR_KEY_EE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::EE) }, + { MP_ROM_QSTR(MP_QSTR_KEY_ANS), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::Ans) }, + { MP_ROM_QSTR(MP_QSTR_KEY_EXE), MP_OBJ_NEW_SMALL_INT(Ion::Keyboard::Key::EXE) }, +}; + +STATIC MP_DEFINE_CONST_DICT(modion_module_globals, modion_module_globals_table); + +static_assert(sizeof(mp_obj_module_t) == sizeof(mp_obj_base_t) + sizeof(mp_obj_dict_t *)); + +extern "C" const mp_obj_module_t modion_module = { + { &mp_type_module }, + (mp_obj_dict_t*)&modion_module_globals, +};