usb_ccb_about.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "usb_ccb_about.h"
  2. #include <furi.h>
  3. #include <furi_hal_usb_hid.h>
  4. #include <gui/elements.h>
  5. struct UsbCcbAbout {
  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. } UsbCcbAboutModel;
  17. static void usb_ccb_about_draw_callback(Canvas* canvas, void* context) {
  18. furi_assert(context);
  19. canvas_set_font(canvas, FontSecondary);
  20. canvas_draw_str(canvas, 0, 7, "A tool to send USB CCBs,");
  21. canvas_draw_str(canvas, 0, 16, "to launch & control apps.");
  22. canvas_draw_str(canvas, 0, 28, "For security research.");
  23. canvas_draw_str(canvas, 0, 37, "Only use with permission.");
  24. canvas_draw_str(canvas, 0, 49, "More info at: github.com");
  25. canvas_draw_str(canvas, 0, 58, "/piraija/usb-hid-and-run");
  26. }
  27. static bool usb_ccb_about_input_callback(InputEvent* event, void* context) {
  28. furi_assert(context);
  29. bool consumed = false;
  30. if(event->type == InputTypeLong && event->key == InputKeyBack) {
  31. furi_hal_hid_kb_release_all();
  32. }
  33. return consumed;
  34. }
  35. UsbCcbAbout* usb_ccb_about_alloc() {
  36. UsbCcbAbout* usb_ccb_about = malloc(sizeof(UsbCcbAbout));
  37. usb_ccb_about->view = view_alloc();
  38. view_set_context(usb_ccb_about->view, usb_ccb_about);
  39. view_allocate_model(usb_ccb_about->view, ViewModelTypeLocking, sizeof(UsbCcbAboutModel));
  40. view_set_draw_callback(usb_ccb_about->view, usb_ccb_about_draw_callback);
  41. view_set_input_callback(usb_ccb_about->view, usb_ccb_about_input_callback);
  42. return usb_ccb_about;
  43. }
  44. void usb_ccb_about_free(UsbCcbAbout* usb_ccb_about) {
  45. furi_assert(usb_ccb_about);
  46. view_free(usb_ccb_about->view);
  47. free(usb_ccb_about);
  48. }
  49. View* usb_ccb_about_get_view(UsbCcbAbout* usb_ccb_about) {
  50. furi_assert(usb_ccb_about);
  51. return usb_ccb_about->view;
  52. }
  53. void usb_ccb_about_set_connected_status(UsbCcbAbout* usb_ccb_about, bool connected) {
  54. furi_assert(usb_ccb_about);
  55. with_view_model(usb_ccb_about->view, UsbCcbAboutModel * model, { model->connected = connected; }, true);
  56. }