modgint: basic gint module with some of <gint/keyboard.h>
This commit is contained in:
parent
1992ec0a49
commit
f930ff95db
|
@ -14,6 +14,7 @@ SRC_C = \
|
|||
main.c \
|
||||
console.c \
|
||||
keymap.c \
|
||||
modgint.c \
|
||||
mphalport.c \
|
||||
shared/readline/readline.c \
|
||||
shared/runtime/gchelper_generic.c \
|
||||
|
@ -22,6 +23,7 @@ SRC_C = \
|
|||
|
||||
SRC_QSTR += \
|
||||
shared/readline/readline.c \
|
||||
modgint.c \
|
||||
|
||||
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ static uint8_t map_flat[30] = {
|
|||
'7', '8', '9', 0, 0, 0,
|
||||
'4', '5', '6', '*', '/', 0,
|
||||
'1', '2', '3', '+', '-', 0,
|
||||
'0', '.', 'e', '-', 0, 0,
|
||||
'0', '.', 'e', '_', 0, 0,
|
||||
};
|
||||
static uint8_t map_alpha[36] = {
|
||||
'a', 'b', 'c', 'd', 'e', 'f',
|
||||
|
|
|
@ -0,0 +1,258 @@
|
|||
#include "py/runtime.h"
|
||||
#include "py/objtuple.h"
|
||||
#include <gint/display.h>
|
||||
#include <gint/keyboard.h>
|
||||
|
||||
#define FUN_0(NAME) \
|
||||
MP_DEFINE_CONST_FUN_OBJ_0(modgint_ ## NAME ## _obj, modgint_ ## NAME)
|
||||
#define FUN_1(NAME) \
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(modgint_ ## NAME ## _obj, modgint_ ## NAME)
|
||||
#define FUN_2(NAME) \
|
||||
MP_DEFINE_CONST_FUN_OBJ_2(modgint_ ## NAME ## _obj, modgint_ ## NAME)
|
||||
#define FUN_VAR(NAME, MIN) \
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR(modgint_ ## NAME ## _obj, MIN, modgint_ ## NAME)
|
||||
|
||||
/* <gint/keyboard.h> */
|
||||
|
||||
STATIC qstr const key_event_fields[] = {
|
||||
MP_QSTR_time,
|
||||
MP_QSTR_mod,
|
||||
MP_QSTR_shift,
|
||||
MP_QSTR_alpha,
|
||||
MP_QSTR_type,
|
||||
MP_QSTR_key,
|
||||
};
|
||||
|
||||
STATIC mp_obj_t mk_key_event(key_event_t ev)
|
||||
{
|
||||
mp_obj_t items[] = {
|
||||
mp_obj_new_int(ev.time),
|
||||
mp_obj_new_bool(ev.mod),
|
||||
mp_obj_new_bool(ev.shift),
|
||||
mp_obj_new_bool(ev.alpha),
|
||||
mp_obj_new_int(ev.type),
|
||||
mp_obj_new_int(ev.key),
|
||||
};
|
||||
return mp_obj_new_attrtuple(key_event_fields, 6, items);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t modgint_pollevent(void)
|
||||
{
|
||||
key_event_t ev = pollevent();
|
||||
return mk_key_event(ev);
|
||||
}
|
||||
|
||||
// TODO: waitevent: timeout parameter?
|
||||
|
||||
STATIC mp_obj_t modgint_clearevents(void)
|
||||
{
|
||||
clearevents();
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
STATIC mp_obj_t modgint_keydown(mp_obj_t arg1)
|
||||
{
|
||||
mp_int_t key = mp_obj_get_int(arg1);
|
||||
bool down = keydown(key) != 0;
|
||||
return mp_obj_new_bool(down);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t modgint_keydown_all(size_t n, mp_obj_t const *args)
|
||||
{
|
||||
bool down = true;
|
||||
for(size_t i = 0; i < n; i++)
|
||||
down &= keydown(mp_obj_get_int(args[i])) != 0;
|
||||
return mp_obj_new_bool(down);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t modgint_keydown_any(size_t n, mp_obj_t const *args)
|
||||
{
|
||||
bool down = false;
|
||||
for(size_t i = 0; i < n; i++)
|
||||
down |= keydown(mp_obj_get_int(args[i])) != 0;
|
||||
return mp_obj_new_bool(down);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t modgint_getkey(void)
|
||||
{
|
||||
key_event_t ev = getkey();
|
||||
return mk_key_event(ev);
|
||||
}
|
||||
|
||||
// TODO: getkey_opt: timeout parameter?
|
||||
STATIC mp_obj_t modgint_getkey_opt(mp_obj_t arg1)
|
||||
{
|
||||
int options = mp_obj_get_int(arg1);
|
||||
key_event_t ev = getkey_opt(options, NULL);
|
||||
return mk_key_event(ev);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t modgint_keycode_function(mp_obj_t arg1)
|
||||
{
|
||||
int keycode = mp_obj_get_int(arg1);
|
||||
return MP_OBJ_NEW_SMALL_INT(keycode_function(keycode));
|
||||
}
|
||||
|
||||
STATIC mp_obj_t modgint_keycode_digit(mp_obj_t arg1)
|
||||
{
|
||||
int keycode = mp_obj_get_int(arg1);
|
||||
return MP_OBJ_NEW_SMALL_INT(keycode_digit(keycode));
|
||||
}
|
||||
|
||||
FUN_0(clearevents);
|
||||
FUN_0(pollevent);
|
||||
FUN_1(keydown);
|
||||
FUN_VAR(keydown_all, 0);
|
||||
FUN_VAR(keydown_any, 0);
|
||||
FUN_0(getkey);
|
||||
FUN_1/*2*/(getkey_opt);
|
||||
FUN_1(keycode_function);
|
||||
FUN_1(keycode_digit);
|
||||
|
||||
/* <gint/display.h> */
|
||||
|
||||
STATIC mp_obj_t modgint_dclear(mp_obj_t arg1)
|
||||
{
|
||||
mp_int_t color0 = mp_obj_get_int(arg1);
|
||||
int color = MP_OBJ_SMALL_INT_VALUE(color0);
|
||||
dclear(color);
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
STATIC mp_obj_t modgint_dupdate(void)
|
||||
{
|
||||
dupdate();
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
FUN_1(dclear);
|
||||
FUN_0(dupdate);
|
||||
|
||||
/* Module definition */
|
||||
|
||||
// Helper: define object "modgint_F_obj" as object "F" in the module
|
||||
#define OBJ(F) {MP_ROM_QSTR(MP_QSTR_ ## F), MP_ROM_PTR(&modgint_ ## F ## _obj)}
|
||||
|
||||
// Helper: define small integer constant "I" as "I" in the module
|
||||
#define INT(I) {MP_ROM_QSTR(MP_QSTR_ ## I), MP_OBJ_NEW_SMALL_INT(I)}
|
||||
|
||||
STATIC const mp_rom_map_elem_t modgint_module_globals_table[] = {
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_gint) },
|
||||
|
||||
/* <gint/keycodes.h> */
|
||||
|
||||
INT(KEY_F1),
|
||||
INT(KEY_F2),
|
||||
INT(KEY_F3),
|
||||
INT(KEY_F4),
|
||||
INT(KEY_F5),
|
||||
INT(KEY_F6),
|
||||
|
||||
INT(KEY_SHIFT),
|
||||
INT(KEY_OPTN),
|
||||
INT(KEY_VARS),
|
||||
INT(KEY_MENU),
|
||||
INT(KEY_LEFT),
|
||||
INT(KEY_UP),
|
||||
|
||||
INT(KEY_ALPHA),
|
||||
INT(KEY_SQUARE),
|
||||
INT(KEY_POWER),
|
||||
INT(KEY_EXIT),
|
||||
INT(KEY_DOWN),
|
||||
INT(KEY_RIGHT),
|
||||
|
||||
INT(KEY_XOT),
|
||||
INT(KEY_LOG),
|
||||
INT(KEY_LN),
|
||||
INT(KEY_SIN),
|
||||
INT(KEY_COS),
|
||||
INT(KEY_TAN),
|
||||
|
||||
INT(KEY_FRAC),
|
||||
INT(KEY_FD),
|
||||
INT(KEY_LEFTP),
|
||||
INT(KEY_RIGHTP),
|
||||
INT(KEY_COMMA),
|
||||
INT(KEY_ARROW),
|
||||
|
||||
INT(KEY_7),
|
||||
INT(KEY_8),
|
||||
INT(KEY_9),
|
||||
INT(KEY_DEL),
|
||||
|
||||
INT(KEY_4),
|
||||
INT(KEY_5),
|
||||
INT(KEY_6),
|
||||
INT(KEY_MUL),
|
||||
INT(KEY_DIV),
|
||||
|
||||
INT(KEY_1),
|
||||
INT(KEY_2),
|
||||
INT(KEY_3),
|
||||
INT(KEY_ADD),
|
||||
INT(KEY_SUB),
|
||||
|
||||
INT(KEY_0),
|
||||
INT(KEY_DOT),
|
||||
INT(KEY_EXP),
|
||||
INT(KEY_NEG),
|
||||
INT(KEY_EXE),
|
||||
|
||||
INT(KEY_ACON),
|
||||
INT(KEY_HELP),
|
||||
INT(KEY_LIGHT),
|
||||
|
||||
INT(KEY_X2),
|
||||
INT(KEY_CARET),
|
||||
INT(KEY_SWITCH),
|
||||
INT(KEY_LEFTPAR),
|
||||
INT(KEY_RIGHTPAR),
|
||||
INT(KEY_STORE),
|
||||
INT(KEY_TIMES),
|
||||
INT(KEY_PLUS),
|
||||
INT(KEY_MINUS),
|
||||
|
||||
/* <gint/keyboard.h> */
|
||||
|
||||
INT(KEYEV_NONE),
|
||||
INT(KEYEV_DOWN),
|
||||
INT(KEYEV_UP),
|
||||
INT(KEYEV_HOLD),
|
||||
|
||||
INT(GETKEY_MOD_SHIFT),
|
||||
INT(GETKEY_MOD_ALPHA),
|
||||
INT(GETKEY_BACKLIGHT),
|
||||
INT(GETKEY_MENU),
|
||||
INT(GETKEY_REP_ARROWS),
|
||||
INT(GETKEY_REP_ALL),
|
||||
INT(GETKEY_REP_PROFILE),
|
||||
INT(GETKEY_FEATURES),
|
||||
INT(GETKEY_NONE),
|
||||
INT(GETKEY_DEFAULT),
|
||||
|
||||
OBJ(pollevent),
|
||||
// OBJ(waitevent),
|
||||
OBJ(clearevents),
|
||||
OBJ(keydown),
|
||||
OBJ(keydown_all),
|
||||
OBJ(keydown_any),
|
||||
OBJ(getkey),
|
||||
OBJ(getkey_opt),
|
||||
OBJ(keycode_function),
|
||||
OBJ(keycode_digit),
|
||||
|
||||
/* <gint/display.h> */
|
||||
|
||||
OBJ(dclear),
|
||||
OBJ(dupdate),
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(
|
||||
modgint_module_globals, modgint_module_globals_table);
|
||||
|
||||
const mp_obj_module_t modgint_module = {
|
||||
.base = { &mp_type_module },
|
||||
.globals = (mp_obj_dict_t *)&modgint_module_globals,
|
||||
};
|
||||
|
||||
MP_REGISTER_MODULE(MP_QSTR_gint, modgint_module);
|
Loading…
Reference in New Issue