mp_flipper_modflipperzero.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. #include <stdio.h>
  2. #include "py/objint.h"
  3. #include "py/objfun.h"
  4. #include "py/obj.h"
  5. #include "py/runtime.h"
  6. #include "mp_flipper_modflipperzero.h"
  7. typedef struct {
  8. uint8_t button;
  9. uint8_t type;
  10. } on_input_arg_t;
  11. static void* mp_flipper_on_input_callback = NULL;
  12. static mp_obj_t flipperzero_light_set(mp_obj_t light_obj, mp_obj_t brightness_obj) {
  13. mp_int_t light = mp_obj_get_int(light_obj);
  14. mp_int_t brightness = mp_obj_get_int(brightness_obj);
  15. mp_flipper_light_set(light, brightness);
  16. return mp_const_none;
  17. }
  18. static MP_DEFINE_CONST_FUN_OBJ_2(flipperzero_light_set_obj, flipperzero_light_set);
  19. static mp_obj_t flipperzero_light_blink_start(size_t n_args, const mp_obj_t* args) {
  20. if(n_args != 4) {
  21. return mp_const_none;
  22. }
  23. mp_int_t light = mp_obj_get_int(args[0]);
  24. mp_int_t brightness = mp_obj_get_int(args[1]);
  25. mp_int_t on_time = mp_obj_get_int(args[2]);
  26. mp_int_t period = mp_obj_get_int(args[3]);
  27. mp_flipper_light_blink_start(light, brightness, on_time, period);
  28. return mp_const_none;
  29. }
  30. static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(flipperzero_light_blink_start_obj, 4, 4, flipperzero_light_blink_start);
  31. static mp_obj_t flipperzero_light_blink_stop() {
  32. mp_flipper_light_blink_stop();
  33. return mp_const_none;
  34. }
  35. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_light_blink_stop_obj, flipperzero_light_blink_stop);
  36. static mp_obj_t flipperzero_light_blink_set_color(mp_obj_t light_obj) {
  37. mp_int_t light = mp_obj_get_int(light_obj);
  38. mp_flipper_light_blink_set_color(light);
  39. return mp_const_none;
  40. }
  41. static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_light_blink_set_color_obj, flipperzero_light_blink_set_color);
  42. static mp_obj_t flipperzero_vibro_set(mp_obj_t state) {
  43. bool state_bool = mp_obj_is_true(state);
  44. mp_flipper_vibro(state_bool);
  45. return state_bool ? mp_const_true : mp_const_false;
  46. }
  47. static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_vibro_set_obj, flipperzero_vibro_set);
  48. const _mp_obj_float_t flipperzero_speaker_note_c0 = {{&mp_type_float}, (mp_float_t)MP_FLIPPER_SPEAKER_NOTE_C0};
  49. static mp_obj_t flipperzero_speaker_start(mp_obj_t frequency_obj, mp_obj_t volume_obj) {
  50. mp_float_t frequency = mp_obj_get_float(frequency_obj);
  51. mp_float_t volume = mp_obj_get_float(volume_obj);
  52. return mp_flipper_speaker_start(frequency, volume) ? mp_const_true : mp_const_false;
  53. }
  54. static MP_DEFINE_CONST_FUN_OBJ_2(flipperzero_speaker_start_obj, flipperzero_speaker_start);
  55. static mp_obj_t flipperzero_speaker_set_volume(mp_obj_t volume_obj) {
  56. mp_float_t volume = mp_obj_get_float(volume_obj);
  57. return mp_flipper_speaker_set_volume(volume) ? mp_const_true : mp_const_false;
  58. }
  59. static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_speaker_set_volume_obj, flipperzero_speaker_set_volume);
  60. static mp_obj_t flipperzero_speaker_stop() {
  61. mp_flipper_speaker_stop();
  62. return mp_flipper_speaker_stop() ? mp_const_true : mp_const_false;
  63. }
  64. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_speaker_stop_obj, flipperzero_speaker_stop);
  65. static mp_obj_t flipperzero_canvas_width() {
  66. uint8_t width = mp_flipper_canvas_width();
  67. return mp_obj_new_int(width);
  68. }
  69. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_canvas_width_obj, flipperzero_canvas_width);
  70. static mp_obj_t flipperzero_canvas_height() {
  71. uint8_t height = mp_flipper_canvas_height();
  72. return mp_obj_new_int(height);
  73. }
  74. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_canvas_height_obj, flipperzero_canvas_height);
  75. static mp_obj_t flipperzero_canvas_text_width(mp_obj_t text_obj) {
  76. const char* text = mp_obj_str_get_str(text_obj);
  77. uint8_t width = mp_flipper_canvas_text_width(text);
  78. return mp_obj_new_int(width);
  79. }
  80. static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_canvas_text_width_obj, flipperzero_canvas_text_width);
  81. static mp_obj_t flipperzero_canvas_text_height() {
  82. uint8_t height = mp_flipper_canvas_text_height();
  83. return mp_obj_new_int(height);
  84. }
  85. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_canvas_text_height_obj, flipperzero_canvas_text_height);
  86. static mp_obj_t flipperzero_canvas_draw_dot(mp_obj_t x_obj, mp_obj_t y_obj) {
  87. mp_int_t x = mp_obj_get_int(x_obj);
  88. mp_int_t y = mp_obj_get_int(y_obj);
  89. mp_flipper_canvas_draw_dot(x, y);
  90. return mp_const_none;
  91. }
  92. static MP_DEFINE_CONST_FUN_OBJ_2(flipperzero_canvas_draw_dot_obj, flipperzero_canvas_draw_dot);
  93. static mp_obj_t flipperzero_canvas_draw_box(size_t n_args, const mp_obj_t* args) {
  94. if(n_args < 4) {
  95. return mp_const_none;
  96. }
  97. mp_int_t x = mp_obj_get_int(args[0]);
  98. mp_int_t y = mp_obj_get_int(args[1]);
  99. mp_int_t width = mp_obj_get_int(args[2]);
  100. mp_int_t height = mp_obj_get_int(args[3]);
  101. mp_int_t radius = n_args == 5 ? mp_obj_get_int(args[4]) : 0;
  102. mp_flipper_canvas_draw_box(x, y, width, height, radius);
  103. return mp_const_none;
  104. }
  105. static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(flipperzero_canvas_draw_box_obj, 4, 5, flipperzero_canvas_draw_box);
  106. static mp_obj_t flipperzero_canvas_draw_frame(size_t n_args, const mp_obj_t* args) {
  107. if(n_args < 4) {
  108. return mp_const_none;
  109. }
  110. mp_int_t x = mp_obj_get_int(args[0]);
  111. mp_int_t y = mp_obj_get_int(args[1]);
  112. mp_int_t width = mp_obj_get_int(args[2]);
  113. mp_int_t height = mp_obj_get_int(args[3]);
  114. mp_int_t radius = n_args == 5 ? mp_obj_get_int(args[4]) : 0;
  115. mp_flipper_canvas_draw_frame(x, y, width, height, radius);
  116. return mp_const_none;
  117. }
  118. static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(flipperzero_canvas_draw_frame_obj, 4, 5, flipperzero_canvas_draw_frame);
  119. static mp_obj_t flipperzero_canvas_draw_line(size_t n_args, const mp_obj_t* args) {
  120. if(n_args != 4) {
  121. return mp_const_none;
  122. }
  123. mp_int_t x0 = mp_obj_get_int(args[0]);
  124. mp_int_t y0 = mp_obj_get_int(args[1]);
  125. mp_int_t x1 = mp_obj_get_int(args[2]);
  126. mp_int_t y1 = mp_obj_get_int(args[3]);
  127. mp_flipper_canvas_draw_line(x0, y0, x1, y1);
  128. return mp_const_none;
  129. }
  130. static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(flipperzero_canvas_draw_line_obj, 4, 4, flipperzero_canvas_draw_line);
  131. static mp_obj_t flipperzero_canvas_draw_circle(mp_obj_t x_obj, mp_obj_t y_obj, mp_obj_t r_obj) {
  132. mp_int_t x = mp_obj_get_int(x_obj);
  133. mp_int_t y = mp_obj_get_int(y_obj);
  134. mp_int_t r = mp_obj_get_int(r_obj);
  135. mp_flipper_canvas_draw_circle(x, y, r);
  136. return mp_const_none;
  137. }
  138. static MP_DEFINE_CONST_FUN_OBJ_3(flipperzero_canvas_draw_circle_obj, flipperzero_canvas_draw_circle);
  139. static mp_obj_t flipperzero_canvas_draw_disc(mp_obj_t x_obj, mp_obj_t y_obj, mp_obj_t r_obj) {
  140. mp_int_t x = mp_obj_get_int(x_obj);
  141. mp_int_t y = mp_obj_get_int(y_obj);
  142. mp_int_t r = mp_obj_get_int(r_obj);
  143. mp_flipper_canvas_draw_disc(x, y, r);
  144. return mp_const_none;
  145. }
  146. static MP_DEFINE_CONST_FUN_OBJ_3(flipperzero_canvas_draw_disc_obj, flipperzero_canvas_draw_disc);
  147. static mp_obj_t flipperzero_canvas_set_font(mp_obj_t font_obj) {
  148. mp_int_t font = mp_obj_get_int(font_obj);
  149. mp_flipper_canvas_set_font(font);
  150. return mp_const_none;
  151. }
  152. static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_canvas_set_font_obj, flipperzero_canvas_set_font);
  153. static mp_obj_t flipperzero_canvas_set_color(mp_obj_t color_obj) {
  154. mp_int_t color = mp_obj_get_int(color_obj);
  155. mp_flipper_canvas_set_color(color);
  156. return mp_const_none;
  157. }
  158. static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_canvas_set_color_obj, flipperzero_canvas_set_color);
  159. static mp_obj_t flipperzero_canvas_set_text(mp_obj_t x_obj, mp_obj_t y_obj, mp_obj_t str_obj) {
  160. mp_int_t x = mp_obj_get_int(x_obj);
  161. mp_int_t y = mp_obj_get_int(y_obj);
  162. const char* str = mp_obj_str_get_str(str_obj);
  163. mp_flipper_canvas_set_text(x, y, str);
  164. return mp_const_none;
  165. }
  166. static MP_DEFINE_CONST_FUN_OBJ_3(flipperzero_canvas_set_text_obj, flipperzero_canvas_set_text);
  167. static mp_obj_t flipperzero_canvas_set_text_align(mp_obj_t x_obj, mp_obj_t y_obj) {
  168. mp_int_t x = mp_obj_get_int(x_obj);
  169. mp_int_t y = mp_obj_get_int(y_obj);
  170. mp_flipper_canvas_set_text_align(x, y);
  171. return mp_const_none;
  172. }
  173. static MP_DEFINE_CONST_FUN_OBJ_2(flipperzero_canvas_set_text_align_obj, flipperzero_canvas_set_text_align);
  174. static mp_obj_t flipperzero_canvas_update() {
  175. mp_flipper_canvas_update();
  176. return mp_const_none;
  177. }
  178. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_canvas_update_obj, flipperzero_canvas_update);
  179. static mp_obj_t flipperzero_canvas_clear() {
  180. mp_flipper_canvas_clear();
  181. return mp_const_none;
  182. }
  183. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_canvas_clear_obj, flipperzero_canvas_clear);
  184. static mp_obj_t flipperzero_on_input(mp_obj_t callback_obj) {
  185. mp_flipper_on_input_callback = callback_obj;
  186. return callback_obj;
  187. }
  188. static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_on_input_obj, flipperzero_on_input);
  189. static mp_obj_t flipperzero_input_trigger_handler(mp_obj_t flags_obj) {
  190. if(mp_flipper_on_input_callback != NULL) {
  191. mp_int_t flags = mp_obj_get_int(flags_obj);
  192. mp_obj_t button_obj = mp_obj_new_int(flags & MP_FLIPPER_INPUT_BUTTON);
  193. mp_obj_t type_obj = mp_obj_new_int(flags & MP_FLIPPER_INPUT_TYPE);
  194. mp_call_function_2_protected(mp_flipper_on_input_callback, button_obj, type_obj);
  195. }
  196. return mp_const_none;
  197. }
  198. static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_input_trigger_handler_obj, flipperzero_input_trigger_handler);
  199. void mp_flipper_on_input(uint16_t button, uint16_t type) {
  200. if(mp_flipper_on_input_callback != NULL) {
  201. uint16_t flags = button | type;
  202. mp_obj_t flags_obj = mp_obj_new_int_from_uint(flags);
  203. mp_sched_schedule(&flipperzero_input_trigger_handler_obj, flags_obj);
  204. }
  205. }
  206. static mp_obj_t flipperzero_dialog_message_set_text(size_t n_args, const mp_obj_t* args) {
  207. if(n_args < 3) {
  208. return mp_const_none;
  209. }
  210. const char* text = mp_obj_str_get_str(args[0]);
  211. mp_int_t x = mp_obj_get_int(args[1]);
  212. mp_int_t y = mp_obj_get_int(args[2]);
  213. mp_int_t h = n_args > 3 ? mp_obj_get_int(args[3]) : MP_FLIPPER_ALIGN_BEGIN;
  214. mp_int_t v = n_args > 4 ? mp_obj_get_int(args[4]) : MP_FLIPPER_ALIGN_BEGIN;
  215. mp_flipper_dialog_message_set_text(text, x, y, h, v);
  216. return mp_const_none;
  217. }
  218. static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(flipperzero_dialog_message_set_text_obj, 3, 5, flipperzero_dialog_message_set_text);
  219. static mp_obj_t flipperzero_dialog_message_set_header(size_t n_args, const mp_obj_t* args) {
  220. if(n_args < 3) {
  221. return mp_const_none;
  222. }
  223. const char* text = mp_obj_str_get_str(args[0]);
  224. mp_int_t x = mp_obj_get_int(args[1]);
  225. mp_int_t y = mp_obj_get_int(args[2]);
  226. mp_int_t h = n_args > 3 ? mp_obj_get_int(args[3]) : MP_FLIPPER_ALIGN_BEGIN;
  227. mp_int_t v = n_args > 4 ? mp_obj_get_int(args[4]) : MP_FLIPPER_ALIGN_BEGIN;
  228. mp_flipper_dialog_message_set_header(text, x, y, h, v);
  229. return mp_const_none;
  230. }
  231. static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(flipperzero_dialog_message_set_header_obj, 3, 5, flipperzero_dialog_message_set_header);
  232. static mp_obj_t flipperzero_dialog_message_set_button(mp_obj_t text_obj, mp_obj_t button_obj) {
  233. const char* text = mp_obj_str_get_str(text_obj);
  234. mp_int_t button = mp_obj_get_int(button_obj);
  235. mp_flipper_dialog_message_set_button(text, button);
  236. return mp_const_none;
  237. }
  238. static MP_DEFINE_CONST_FUN_OBJ_2(flipperzero_dialog_message_set_button_obj, flipperzero_dialog_message_set_button);
  239. static mp_obj_t flipperzero_dialog_message_show() {
  240. mp_int_t button = mp_flipper_dialog_message_show();
  241. return mp_obj_new_int(button);
  242. }
  243. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_dialog_message_show_obj, flipperzero_dialog_message_show);
  244. static mp_obj_t flipperzero_dialog_message_clear() {
  245. mp_flipper_dialog_message_clear();
  246. return mp_const_none;
  247. }
  248. static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_dialog_message_clear_obj, flipperzero_dialog_message_clear);
  249. static const mp_rom_map_elem_t flipperzero_module_globals_table[] = {
  250. {MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_flipperzero)},
  251. {MP_ROM_QSTR(MP_QSTR_LIGHT_RED), MP_ROM_INT(MP_FLIPPER_LED_RED)},
  252. {MP_ROM_QSTR(MP_QSTR_LIGHT_GREEN), MP_ROM_INT(MP_FLIPPER_LED_GREEN)},
  253. {MP_ROM_QSTR(MP_QSTR_LIGHT_BLUE), MP_ROM_INT(MP_FLIPPER_LED_BLUE)},
  254. {MP_ROM_QSTR(MP_QSTR_LIGHT_BACKLIGHT), MP_ROM_INT(MP_FLIPPER_LED_BACKLIGHT)},
  255. {MP_ROM_QSTR(MP_QSTR_light_set), MP_ROM_PTR(&flipperzero_light_set_obj)},
  256. {MP_ROM_QSTR(MP_QSTR_light_blink_start), MP_ROM_PTR(&flipperzero_light_blink_start_obj)},
  257. {MP_ROM_QSTR(MP_QSTR_light_blink_set_color), MP_ROM_PTR(&flipperzero_light_blink_set_color_obj)},
  258. {MP_ROM_QSTR(MP_QSTR_light_blink_stop), MP_ROM_PTR(&flipperzero_light_blink_stop_obj)},
  259. {MP_ROM_QSTR(MP_QSTR_vibro_set), MP_ROM_PTR(&flipperzero_vibro_set_obj)},
  260. {MP_ROM_QSTR(MP_QSTR_SPEAKER_NOTE_C0), MP_ROM_PTR(&flipperzero_speaker_note_c0)},
  261. {MP_ROM_QSTR(MP_QSTR_speaker_start), MP_ROM_PTR(&flipperzero_speaker_start_obj)},
  262. {MP_ROM_QSTR(MP_QSTR_speaker_set_volume), MP_ROM_PTR(&flipperzero_speaker_set_volume_obj)},
  263. {MP_ROM_QSTR(MP_QSTR_speaker_stop), MP_ROM_PTR(&flipperzero_speaker_stop_obj)},
  264. {MP_ROM_QSTR(MP_QSTR_CANVAS_BLACK), MP_ROM_INT(MP_FLIPPER_COLOR_BLACK)},
  265. {MP_ROM_QSTR(MP_QSTR_CANVAS_WHITE), MP_ROM_INT(MP_FLIPPER_COLOR_WHITE)},
  266. {MP_ROM_QSTR(MP_QSTR_canvas_width), MP_ROM_PTR(&flipperzero_canvas_width_obj)},
  267. {MP_ROM_QSTR(MP_QSTR_canvas_height), MP_ROM_PTR(&flipperzero_canvas_height_obj)},
  268. {MP_ROM_QSTR(MP_QSTR_canvas_text_width), MP_ROM_PTR(&flipperzero_canvas_text_width_obj)},
  269. {MP_ROM_QSTR(MP_QSTR_canvas_text_height), MP_ROM_PTR(&flipperzero_canvas_text_height_obj)},
  270. {MP_ROM_QSTR(MP_QSTR_canvas_draw_dot), MP_ROM_PTR(&flipperzero_canvas_draw_dot_obj)},
  271. {MP_ROM_QSTR(MP_QSTR_canvas_draw_box), MP_ROM_PTR(&flipperzero_canvas_draw_box_obj)},
  272. {MP_ROM_QSTR(MP_QSTR_canvas_draw_frame), MP_ROM_PTR(&flipperzero_canvas_draw_frame_obj)},
  273. {MP_ROM_QSTR(MP_QSTR_canvas_draw_line), MP_ROM_PTR(&flipperzero_canvas_draw_line_obj)},
  274. {MP_ROM_QSTR(MP_QSTR_canvas_draw_circle), MP_ROM_PTR(&flipperzero_canvas_draw_circle_obj)},
  275. {MP_ROM_QSTR(MP_QSTR_canvas_draw_disc), MP_ROM_PTR(&flipperzero_canvas_draw_disc_obj)},
  276. {MP_ROM_QSTR(MP_QSTR_FONT_PRIMARY), MP_ROM_INT(MP_FLIPPER_FONT_PRIMARY)},
  277. {MP_ROM_QSTR(MP_QSTR_FONT_SECONDARY), MP_ROM_INT(MP_FLIPPER_FONT_SECONDARY)},
  278. {MP_ROM_QSTR(MP_QSTR_canvas_set_font), MP_ROM_PTR(&flipperzero_canvas_set_font_obj)},
  279. {MP_ROM_QSTR(MP_QSTR_canvas_set_color), MP_ROM_PTR(&flipperzero_canvas_set_color_obj)},
  280. {MP_ROM_QSTR(MP_QSTR_canvas_set_text), MP_ROM_PTR(&flipperzero_canvas_set_text_obj)},
  281. {MP_ROM_QSTR(MP_QSTR_ALIGN_BEGIN), MP_ROM_INT(MP_FLIPPER_ALIGN_BEGIN)},
  282. {MP_ROM_QSTR(MP_QSTR_ALIGN_CENTER), MP_ROM_INT(MP_FLIPPER_ALIGN_CENTER)},
  283. {MP_ROM_QSTR(MP_QSTR_ALIGN_END), MP_ROM_INT(MP_FLIPPER_ALIGN_END)},
  284. {MP_ROM_QSTR(MP_QSTR_canvas_set_text_align), MP_ROM_PTR(&flipperzero_canvas_set_text_align_obj)},
  285. {MP_ROM_QSTR(MP_QSTR_canvas_update), MP_ROM_PTR(&flipperzero_canvas_update_obj)},
  286. {MP_ROM_QSTR(MP_QSTR_canvas_clear), MP_ROM_PTR(&flipperzero_canvas_clear_obj)},
  287. {MP_ROM_QSTR(MP_QSTR_on_input), MP_ROM_PTR(&flipperzero_on_input_obj)},
  288. {MP_ROM_QSTR(MP_QSTR__input_trigger_handler), MP_ROM_PTR(&flipperzero_input_trigger_handler_obj)},
  289. {MP_ROM_QSTR(MP_QSTR_INPUT_BUTTON_BACK), MP_ROM_INT(MP_FLIPPER_INPUT_BUTTON_BACK)},
  290. {MP_ROM_QSTR(MP_QSTR_INPUT_BUTTON_OK), MP_ROM_INT(MP_FLIPPER_INPUT_BUTTON_OK)},
  291. {MP_ROM_QSTR(MP_QSTR_INPUT_BUTTON_LEFT), MP_ROM_INT(MP_FLIPPER_INPUT_BUTTON_LEFT)},
  292. {MP_ROM_QSTR(MP_QSTR_INPUT_BUTTON_RIGHT), MP_ROM_INT(MP_FLIPPER_INPUT_BUTTON_RIGHT)},
  293. {MP_ROM_QSTR(MP_QSTR_INPUT_BUTTON_UP), MP_ROM_INT(MP_FLIPPER_INPUT_BUTTON_UP)},
  294. {MP_ROM_QSTR(MP_QSTR_INPUT_BUTTON_DOWN), MP_ROM_INT(MP_FLIPPER_INPUT_BUTTON_DOWN)},
  295. {MP_ROM_QSTR(MP_QSTR_INPUT_TYPE_PRESS), MP_ROM_INT(MP_FLIPPER_INPUT_TYPE_PRESS)},
  296. {MP_ROM_QSTR(MP_QSTR_INPUT_TYPE_RELEASE), MP_ROM_INT(MP_FLIPPER_INPUT_TYPE_RELEASE)},
  297. {MP_ROM_QSTR(MP_QSTR_INPUT_TYPE_SHORT), MP_ROM_INT(MP_FLIPPER_INPUT_TYPE_SHORT)},
  298. {MP_ROM_QSTR(MP_QSTR_INPUT_TYPE_LONG), MP_ROM_INT(MP_FLIPPER_INPUT_TYPE_LONG)},
  299. {MP_ROM_QSTR(MP_QSTR_INPUT_TYPE_REPEAT), MP_ROM_INT(MP_FLIPPER_INPUT_TYPE_REPEAT)},
  300. {MP_ROM_QSTR(MP_QSTR_dialog_message_set_text), MP_ROM_PTR(&flipperzero_dialog_message_set_text_obj)},
  301. {MP_ROM_QSTR(MP_QSTR_dialog_message_set_header), MP_ROM_PTR(&flipperzero_dialog_message_set_header_obj)},
  302. {MP_ROM_QSTR(MP_QSTR_dialog_message_set_button), MP_ROM_PTR(&flipperzero_dialog_message_set_button_obj)},
  303. {MP_ROM_QSTR(MP_QSTR_dialog_message_show), MP_ROM_PTR(&flipperzero_dialog_message_show_obj)},
  304. {MP_ROM_QSTR(MP_QSTR_dialog_message_clear), MP_ROM_PTR(&flipperzero_dialog_message_clear_obj)},
  305. };
  306. static MP_DEFINE_CONST_DICT(flipperzero_module_globals, flipperzero_module_globals_table);
  307. const mp_obj_module_t flipperzero_module = {
  308. .base = {&mp_type_module},
  309. .globals = (mp_obj_dict_t*)&flipperzero_module_globals,
  310. };
  311. MP_REGISTER_MODULE(MP_QSTR_flipperzero, flipperzero_module);