usb_ccb_help.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "usb_ccb_help.h"
  2. #include <furi.h>
  3. #include <furi_hal_usb_hid.h>
  4. #include <gui/elements.h>
  5. struct UsbCcbHelp {
  6. View* view;
  7. };
  8. typedef struct {
  9. bool left_pressed;
  10. bool up_pressed;
  11. bool right_pressed;
  12. bool down_pressed;
  13. bool ok_pressed;
  14. bool back_pressed;
  15. bool connected;
  16. } UsbCcbHelpModel;
  17. static void usb_ccb_help_draw_callback(Canvas* canvas, void* context) {
  18. furi_assert(context);
  19. canvas_set_font(canvas, FontSecondary);
  20. canvas_draw_str(canvas, 0, 8, "Exit to menu: hold [back].");
  21. canvas_draw_str(canvas, 0, 18, "Adjust delay between keys:");
  22. canvas_draw_str(canvas, 0, 26, "push [up] or [down].");
  23. canvas_draw_str(canvas, 0, 36, "Cycle between keys:");
  24. canvas_draw_str(canvas, 0, 44, "push/hold [left] or [right].");
  25. canvas_draw_str(canvas, 0, 54, "Toggle sending keys: push [ok].");
  26. canvas_draw_str(canvas, 0, 62, "Send one key: double click [ok].");
  27. }
  28. static bool usb_ccb_help_input_callback(InputEvent* event, void* context) {
  29. furi_assert(context);
  30. bool consumed = false;
  31. if(event->type == InputTypeLong && event->key == InputKeyBack) {
  32. furi_hal_hid_kb_release_all();
  33. }
  34. return consumed;
  35. }
  36. UsbCcbHelp* usb_ccb_help_alloc() {
  37. UsbCcbHelp* usb_ccb_help = malloc(sizeof(UsbCcbHelp));
  38. usb_ccb_help->view = view_alloc();
  39. view_set_context(usb_ccb_help->view, usb_ccb_help);
  40. view_allocate_model(usb_ccb_help->view, ViewModelTypeLocking, sizeof(UsbCcbHelpModel));
  41. view_set_draw_callback(usb_ccb_help->view, usb_ccb_help_draw_callback);
  42. view_set_input_callback(usb_ccb_help->view, usb_ccb_help_input_callback);
  43. return usb_ccb_help;
  44. }
  45. void usb_ccb_help_free(UsbCcbHelp* usb_ccb_help) {
  46. furi_assert(usb_ccb_help);
  47. view_free(usb_ccb_help->view);
  48. free(usb_ccb_help);
  49. }
  50. View* usb_ccb_help_get_view(UsbCcbHelp* usb_ccb_help) {
  51. furi_assert(usb_ccb_help);
  52. return usb_ccb_help->view;
  53. }
  54. void usb_ccb_help_set_connected_status(UsbCcbHelp* usb_ccb_help, bool connected) {
  55. furi_assert(usb_ccb_help);
  56. with_view_model(
  57. usb_ccb_help->view, UsbCcbHelpModel * model, { model->connected = connected; }, true);
  58. }