diff --git a/apps/code/python_toolbox.cpp b/apps/code/python_toolbox.cpp index ad8f7b548..6b5686b18 100644 --- a/apps/code/python_toolbox.cpp +++ b/apps/code/python_toolbox.cpp @@ -365,7 +365,6 @@ const ToolboxMessageTree KandinskyModuleChildren[] = { ToolboxMessageTree::Leaf(I18n::Message::PythonCommandFillRect, I18n::Message::PythonFillRect), ToolboxMessageTree::Leaf(I18n::Message::PythonCommandFillCircle, I18n::Message::PythonFillCircle), ToolboxMessageTree::Leaf(I18n::Message::PythonCommandFillPolygon, I18n::Message::PythonFillPolygon), - ToolboxMessageTree::Leaf(I18n::Message::PythonCommandGetKeys, I18n::Message::PythonGetKeys), ToolboxMessageTree::Leaf(I18n::Message::PythonCommandGetPalette, I18n::Message::PythonGetPalette)}; const ToolboxMessageTree IonModuleChildren[] = { @@ -373,6 +372,7 @@ const ToolboxMessageTree IonModuleChildren[] = { ToolboxMessageTree::Leaf(I18n::Message::PythonCommandImportFromIon, I18n::Message::PythonImportIon, false), ToolboxMessageTree::Leaf(I18n::Message::PythonCommandIonFunction, I18n::Message::PythonIonFunction, false, I18n::Message::PythonCommandIonFunctionWithoutArg), ToolboxMessageTree::Leaf(I18n::Message::PythonCommandIsKeyDown, I18n::Message::PythonIsKeyDown), + ToolboxMessageTree::Leaf(I18n::Message::PythonCommandGetKeys, I18n::Message::PythonGetKeys), ToolboxMessageTree::Leaf(I18n::Message::PythonCommandBattery, I18n::Message::PythonBattery), ToolboxMessageTree::Leaf(I18n::Message::PythonCommandBatteryLevel, I18n::Message::PythonBatteryLevel), ToolboxMessageTree::Leaf(I18n::Message::PythonCommandBatteryIscharging, I18n::Message::PythonBatteryIscharging), diff --git a/python/port/genhdr/qstrdefs.in.h b/python/port/genhdr/qstrdefs.in.h index ec26ab46f..4e3b493ce 100644 --- a/python/port/genhdr/qstrdefs.in.h +++ b/python/port/genhdr/qstrdefs.in.h @@ -340,6 +340,7 @@ Q(version_info) Q(zip) // Ion QSTR +Q(get_keys) Q(ion) Q(keydown) Q(battery) @@ -406,7 +407,6 @@ Q(set_pixel) Q(large_font) Q(small_font) Q(wait_vblank) -Q(get_keys) Q(get_palette) Q(PrimaryText) diff --git a/python/port/mod/ion/modion.cpp b/python/port/mod/ion/modion.cpp index 6a892a9f5..a631ebef8 100644 --- a/python/port/mod/ion/modion.cpp +++ b/python/port/mod/ion/modion.cpp @@ -18,9 +18,88 @@ mp_obj_t modion_battery() { } mp_obj_t modion_battery_level(){ - return mp_obj_new_int(static_cast(Ion::Battery::level())); + return mp_obj_new_int(static_cast(Ion::Battery::level())); } mp_obj_t modion_battery_ischarging(){ - return mp_obj_new_bool(Ion::Battery::isCharging()); -} \ No newline at end of file + return mp_obj_new_bool(Ion::Battery::isCharging()); +} + +struct key2mp +{ + Ion::Keyboard::Key key; + mp_obj_t string; +}; + +const static key2mp keyMapping[] = +{ + { Ion::Keyboard::Key::Left, MP_ROM_QSTR(MP_QSTR_left) }, + { Ion::Keyboard::Key::Right, MP_ROM_QSTR(MP_QSTR_right) }, + { Ion::Keyboard::Key::Down, MP_ROM_QSTR(MP_QSTR_down) }, + { Ion::Keyboard::Key::Up, MP_ROM_QSTR(MP_QSTR_up) }, + { Ion::Keyboard::Key::OK, MP_ROM_QSTR(MP_QSTR_OK) }, + { Ion::Keyboard::Key::Back, MP_ROM_QSTR(MP_QSTR_back) }, + + { Ion::Keyboard::Key::Home, MP_ROM_QSTR(MP_QSTR_home) }, + { Ion::Keyboard::Key::OnOff, MP_ROM_QSTR(MP_QSTR_onOff) }, + + { Ion::Keyboard::Key::Shift, MP_ROM_QSTR(MP_QSTR_shift) }, + { Ion::Keyboard::Key::Alpha, MP_ROM_QSTR(MP_QSTR_alpha) }, + { Ion::Keyboard::Key::XNT, MP_ROM_QSTR(MP_QSTR_xnt) }, + { Ion::Keyboard::Key::Var, MP_ROM_QSTR(MP_QSTR_var) }, + { Ion::Keyboard::Key::Toolbox, MP_ROM_QSTR(MP_QSTR_toolbox) }, + { Ion::Keyboard::Key::Backspace, MP_ROM_QSTR(MP_QSTR_backspace) }, + + { Ion::Keyboard::Key::Exp, MP_ROM_QSTR(MP_QSTR_exp) }, + { Ion::Keyboard::Key::Ln, MP_ROM_QSTR(MP_QSTR_ln) }, + { Ion::Keyboard::Key::Log, MP_ROM_QSTR(MP_QSTR_log) }, + { Ion::Keyboard::Key::Imaginary, MP_ROM_QSTR(MP_QSTR_imaginary) }, + { Ion::Keyboard::Key::Comma, MP_ROM_QSTR(MP_QSTR_comma) }, + { Ion::Keyboard::Key::Power, MP_ROM_QSTR(MP_QSTR_power) }, + + { Ion::Keyboard::Key::Sine, MP_ROM_QSTR(MP_QSTR_sin) }, + { Ion::Keyboard::Key::Cosine, MP_ROM_QSTR(MP_QSTR_cos) }, + { Ion::Keyboard::Key::Tangent, MP_ROM_QSTR(MP_QSTR_tan) }, + { Ion::Keyboard::Key::Pi, MP_ROM_QSTR(MP_QSTR_pi) }, + { Ion::Keyboard::Key::Sqrt, MP_ROM_QSTR(MP_QSTR_sqrt) }, + { Ion::Keyboard::Key::Square, MP_ROM_QSTR(MP_QSTR_square) }, + + { Ion::Keyboard::Key::Seven, MP_ROM_QSTR(MP_QSTR_7) }, + { Ion::Keyboard::Key::Eight, MP_ROM_QSTR(MP_QSTR_8) }, + { Ion::Keyboard::Key::Nine, MP_ROM_QSTR(MP_QSTR_9) }, + { Ion::Keyboard::Key::RightParenthesis, MP_ROM_QSTR(MP_QSTR__paren_open_) }, + { Ion::Keyboard::Key::LeftParenthesis, MP_ROM_QSTR(MP_QSTR__paren_close_) }, + + { Ion::Keyboard::Key::Four, MP_ROM_QSTR(MP_QSTR_4) }, + { Ion::Keyboard::Key::Five, MP_ROM_QSTR(MP_QSTR_5) }, + { Ion::Keyboard::Key::Six, MP_ROM_QSTR(MP_QSTR_6) }, + { Ion::Keyboard::Key::Multiplication, MP_ROM_QSTR(MP_QSTR__star_) }, + { Ion::Keyboard::Key::Division, MP_ROM_QSTR(MP_QSTR__slash_) }, + + { Ion::Keyboard::Key::One, MP_ROM_QSTR(MP_QSTR_1) }, + { Ion::Keyboard::Key::Two, MP_ROM_QSTR(MP_QSTR_2) }, + { Ion::Keyboard::Key::Three, MP_ROM_QSTR(MP_QSTR_3) }, + { Ion::Keyboard::Key::Plus, MP_ROM_QSTR(MP_QSTR__plus_) }, + { Ion::Keyboard::Key::Minus, MP_ROM_QSTR(MP_QSTR__hyphen_) }, + + { Ion::Keyboard::Key::Zero, MP_ROM_QSTR(MP_QSTR_0) }, + { Ion::Keyboard::Key::Dot, MP_ROM_QSTR(MP_QSTR__dot_) }, + { Ion::Keyboard::Key::EE, MP_ROM_QSTR(MP_QSTR_EE) }, + { Ion::Keyboard::Key::Ans, MP_ROM_QSTR(MP_QSTR_Ans) }, + { Ion::Keyboard::Key::EXE, MP_ROM_QSTR(MP_QSTR_EXE) }, +}; + +mp_obj_t modion_get_keys() { + micropython_port_interrupt_if_needed(); + + Ion::Keyboard::State keys = Ion::Keyboard::scan(); + mp_obj_t result = mp_obj_new_set(0, nullptr); + + for (unsigned i = 0; i < sizeof(keyMapping)/sizeof(key2mp); i++) { + if (keys.keyDown(keyMapping[i].key)) { + mp_obj_set_store(result, keyMapping[i].string); + } + } + + return result; +} diff --git a/python/port/mod/ion/modion.h b/python/port/mod/ion/modion.h index b4c99df02..88367300c 100644 --- a/python/port/mod/ion/modion.h +++ b/python/port/mod/ion/modion.h @@ -4,4 +4,5 @@ mp_obj_t modion_keyboard_keydown(mp_obj_t key_o); mp_obj_t modion_battery(); mp_obj_t modion_battery_level(); mp_obj_t modion_battery_ischarging(); -extern const mp_obj_type_t file_type; \ No newline at end of file +mp_obj_t modion_get_keys(); +extern const mp_obj_type_t file_type; diff --git a/python/port/mod/ion/modion_table.cpp b/python/port/mod/ion/modion_table.cpp index 4b120d494..0e07b006b 100644 --- a/python/port/mod/ion/modion_table.cpp +++ b/python/port/mod/ion/modion_table.cpp @@ -16,6 +16,11 @@ const mp_obj_fun_builtin_fixed_t modion_keyboard_keydown_obj = { {(mp_fun_0_t)modion_keyboard_keydown} }; +const mp_obj_fun_builtin_fixed_t modion_get_keys_obj = { + {&mp_type_fun_builtin_0}, + {(mp_fun_0_t)modion_get_keys} +}; + const mp_obj_fun_builtin_fixed_t modion_battery_obj = { {&mp_type_fun_builtin_0}, {(mp_fun_0_t)modion_battery} @@ -37,6 +42,7 @@ extern "C" const mp_rom_map_elem_t modion_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_battery_level), MP_ROM_PTR(&modion_battery_level_obj) }, { MP_ROM_QSTR(MP_QSTR_battery_ischarging), MP_ROM_PTR(&modion_battery_ischarging_obj) }, { MP_ROM_QSTR(MP_QSTR_keydown), MP_ROM_PTR(&modion_keyboard_keydown_obj) }, + { MP_ROM_QSTR(MP_QSTR_get_keys), MP_ROM_PTR(&modion_get_keys_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) }, diff --git a/python/port/mod/kandinsky/modkandinsky.cpp b/python/port/mod/kandinsky/modkandinsky.cpp index 90568a4e1..63e483209 100644 --- a/python/port/mod/kandinsky/modkandinsky.cpp +++ b/python/port/mod/kandinsky/modkandinsky.cpp @@ -164,85 +164,6 @@ mp_obj_t modkandinsky_wait_vblank() { return mp_const_none; } -struct key2mp -{ - Ion::Keyboard::Key key; - mp_obj_t string; -}; - -const static key2mp keyMapping[] = -{ - { Ion::Keyboard::Key::Left, MP_ROM_QSTR(MP_QSTR_left) }, - { Ion::Keyboard::Key::Right, MP_ROM_QSTR(MP_QSTR_right) }, - { Ion::Keyboard::Key::Down, MP_ROM_QSTR(MP_QSTR_down) }, - { Ion::Keyboard::Key::Up, MP_ROM_QSTR(MP_QSTR_up) }, - { Ion::Keyboard::Key::OK, MP_ROM_QSTR(MP_QSTR_OK) }, - { Ion::Keyboard::Key::Back, MP_ROM_QSTR(MP_QSTR_back) }, - - { Ion::Keyboard::Key::Home, MP_ROM_QSTR(MP_QSTR_home) }, - { Ion::Keyboard::Key::OnOff, MP_ROM_QSTR(MP_QSTR_onOff) }, - - { Ion::Keyboard::Key::Shift, MP_ROM_QSTR(MP_QSTR_shift) }, - { Ion::Keyboard::Key::Alpha, MP_ROM_QSTR(MP_QSTR_alpha) }, - { Ion::Keyboard::Key::XNT, MP_ROM_QSTR(MP_QSTR_xnt) }, - { Ion::Keyboard::Key::Var, MP_ROM_QSTR(MP_QSTR_var) }, - { Ion::Keyboard::Key::Toolbox, MP_ROM_QSTR(MP_QSTR_toolbox) }, - { Ion::Keyboard::Key::Backspace, MP_ROM_QSTR(MP_QSTR_backspace) }, - - { Ion::Keyboard::Key::Exp, MP_ROM_QSTR(MP_QSTR_exp) }, - { Ion::Keyboard::Key::Ln, MP_ROM_QSTR(MP_QSTR_ln) }, - { Ion::Keyboard::Key::Log, MP_ROM_QSTR(MP_QSTR_log) }, - { Ion::Keyboard::Key::Imaginary, MP_ROM_QSTR(MP_QSTR_imaginary) }, - { Ion::Keyboard::Key::Comma, MP_ROM_QSTR(MP_QSTR_comma) }, - { Ion::Keyboard::Key::Power, MP_ROM_QSTR(MP_QSTR_power) }, - - { Ion::Keyboard::Key::Sine, MP_ROM_QSTR(MP_QSTR_sin) }, - { Ion::Keyboard::Key::Cosine, MP_ROM_QSTR(MP_QSTR_cos) }, - { Ion::Keyboard::Key::Tangent, MP_ROM_QSTR(MP_QSTR_tan) }, - { Ion::Keyboard::Key::Pi, MP_ROM_QSTR(MP_QSTR_pi) }, - { Ion::Keyboard::Key::Sqrt, MP_ROM_QSTR(MP_QSTR_sqrt) }, - { Ion::Keyboard::Key::Square, MP_ROM_QSTR(MP_QSTR_square) }, - - { Ion::Keyboard::Key::Seven, MP_ROM_QSTR(MP_QSTR_7) }, - { Ion::Keyboard::Key::Eight, MP_ROM_QSTR(MP_QSTR_8) }, - { Ion::Keyboard::Key::Nine, MP_ROM_QSTR(MP_QSTR_9) }, - { Ion::Keyboard::Key::RightParenthesis, MP_ROM_QSTR(MP_QSTR__paren_open_) }, - { Ion::Keyboard::Key::LeftParenthesis, MP_ROM_QSTR(MP_QSTR__paren_close_) }, - - { Ion::Keyboard::Key::Four, MP_ROM_QSTR(MP_QSTR_4) }, - { Ion::Keyboard::Key::Five, MP_ROM_QSTR(MP_QSTR_5) }, - { Ion::Keyboard::Key::Six, MP_ROM_QSTR(MP_QSTR_6) }, - { Ion::Keyboard::Key::Multiplication, MP_ROM_QSTR(MP_QSTR__star_) }, - { Ion::Keyboard::Key::Division, MP_ROM_QSTR(MP_QSTR__slash_) }, - - { Ion::Keyboard::Key::One, MP_ROM_QSTR(MP_QSTR_1) }, - { Ion::Keyboard::Key::Two, MP_ROM_QSTR(MP_QSTR_2) }, - { Ion::Keyboard::Key::Three, MP_ROM_QSTR(MP_QSTR_3) }, - { Ion::Keyboard::Key::Plus, MP_ROM_QSTR(MP_QSTR__plus_) }, - { Ion::Keyboard::Key::Minus, MP_ROM_QSTR(MP_QSTR__hyphen_) }, - - { Ion::Keyboard::Key::Zero, MP_ROM_QSTR(MP_QSTR_0) }, - { Ion::Keyboard::Key::Dot, MP_ROM_QSTR(MP_QSTR__dot_) }, - { Ion::Keyboard::Key::EE, MP_ROM_QSTR(MP_QSTR_EE) }, - { Ion::Keyboard::Key::Ans, MP_ROM_QSTR(MP_QSTR_Ans) }, - { Ion::Keyboard::Key::EXE, MP_ROM_QSTR(MP_QSTR_EXE) }, -}; - -mp_obj_t modkandinsky_get_keys() { - micropython_port_interrupt_if_needed(); - - Ion::Keyboard::State keys = Ion::Keyboard::scan(); - mp_obj_t result = mp_obj_new_set(0, nullptr); - - for (unsigned i = 0; i < sizeof(keyMapping)/sizeof(key2mp); i++) { - if (keys.keyDown(keyMapping[i].key)) { - mp_obj_set_store(result, keyMapping[i].string); - } - } - - return result; -} - mp_obj_t modkandinsky_get_palette() { mp_obj_t modkandinsky_palette_table = mp_obj_new_dict(0); mp_obj_dict_store(modkandinsky_palette_table, MP_ROM_QSTR(MP_QSTR_PrimaryText), TupleForKDColor(Palette::PrimaryText)); diff --git a/python/port/mod/kandinsky/modkandinsky_table.c b/python/port/mod/kandinsky/modkandinsky_table.c index 902338c5f..033dbf5b6 100644 --- a/python/port/mod/kandinsky/modkandinsky_table.c +++ b/python/port/mod/kandinsky/modkandinsky_table.c @@ -10,7 +10,6 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_fill_rect_obj, 5, 5, mod STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_fill_circle_obj, 4, 4, modkandinsky_fill_circle); STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(modkandinsky_fill_polygon_obj, 2, 2, modkandinsky_fill_polygon); STATIC MP_DEFINE_CONST_FUN_OBJ_0(modkandinsky_wait_vblank_obj, modkandinsky_wait_vblank); -STATIC MP_DEFINE_CONST_FUN_OBJ_0(modkandinsky_get_keys_obj, modkandinsky_get_keys); STATIC MP_DEFINE_CONST_FUN_OBJ_0(modkandinsky_get_palette_obj, modkandinsky_get_palette); STATIC const mp_rom_map_elem_t modkandinsky_module_globals_table[] = { @@ -27,7 +26,6 @@ STATIC const mp_rom_map_elem_t modkandinsky_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_large_font), mp_const_true }, { MP_ROM_QSTR(MP_QSTR_small_font), mp_const_false }, { MP_ROM_QSTR(MP_QSTR_wait_vblank), (mp_obj_t)&modkandinsky_wait_vblank_obj }, - { MP_ROM_QSTR(MP_QSTR_get_keys), (mp_obj_t)&modkandinsky_get_keys_obj }, { MP_ROM_QSTR(MP_QSTR_get_palette), (mp_obj_t)&modkandinsky_get_palette_obj }, };