ducky_script.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #pragma once
  2. #ifdef __cplusplus
  3. extern "C" {
  4. #endif
  5. #include <furi.h>
  6. #include <furi_hal.h>
  7. #include <bt/bt_service/bt_i.h>
  8. #include <gui/view_dispatcher.h>
  9. #include <gui/modules/widget.h>
  10. #include <gui/modules/variable_item_list.h>
  11. #include <gui/modules/text_input.h>
  12. #include <gui/modules/byte_input.h>
  13. #include "../views/bad_bt_view.h"
  14. #define FILE_BUFFER_LEN 16
  15. typedef enum {
  16. LevelRssi122_100,
  17. LevelRssi99_80,
  18. LevelRssi79_60,
  19. LevelRssi59_40,
  20. LevelRssi39_0,
  21. LevelRssiNum,
  22. LevelRssiError = 0xFF,
  23. } LevelRssiRange;
  24. extern const uint8_t bt_hid_delays[LevelRssiNum];
  25. extern uint8_t bt_timeout;
  26. typedef enum {
  27. BadBtStateInit,
  28. BadBtStateNotConnected,
  29. BadBtStateIdle,
  30. BadBtStateWillRun,
  31. BadBtStateRunning,
  32. BadBtStateDelay,
  33. BadBtStateStringDelay,
  34. BadBtStateWaitForBtn,
  35. BadBtStateDone,
  36. BadBtStateScriptError,
  37. BadBtStateFileError,
  38. } BadBtWorkerState;
  39. struct BadBtState {
  40. BadBtWorkerState state;
  41. uint32_t pin;
  42. uint16_t line_cur;
  43. uint16_t line_nb;
  44. uint32_t delay_remain;
  45. uint16_t error_line;
  46. char error[64];
  47. };
  48. typedef struct BadBtApp BadBtApp;
  49. typedef struct {
  50. FuriHalUsbHidConfig hid_cfg;
  51. FuriThread* thread;
  52. BadBtState st;
  53. FuriString* file_path;
  54. FuriString* keyboard_layout;
  55. uint8_t file_buf[FILE_BUFFER_LEN + 1];
  56. uint8_t buf_start;
  57. uint8_t buf_len;
  58. bool file_end;
  59. uint32_t defdelay;
  60. uint32_t stringdelay;
  61. uint16_t layout[128];
  62. FuriString* line;
  63. FuriString* line_prev;
  64. uint32_t repeat_cnt;
  65. uint8_t key_hold_nb;
  66. bool set_usb_id;
  67. bool set_bt_id;
  68. bool has_usb_id;
  69. bool has_bt_id;
  70. FuriString* string_print;
  71. size_t string_print_pos;
  72. Bt* bt;
  73. BadBtApp* app;
  74. } BadBtScript;
  75. BadBtScript* bad_bt_script_open(FuriString* file_path, Bt* bt, BadBtApp* app);
  76. void bad_bt_script_close(BadBtScript* bad_bt);
  77. void bad_bt_script_set_keyboard_layout(BadBtScript* bad_bt, FuriString* layout_path);
  78. void bad_bt_script_start(BadBtScript* bad_bt);
  79. void bad_bt_script_stop(BadBtScript* bad_bt);
  80. void bad_bt_script_toggle(BadBtScript* bad_bt);
  81. BadBtState* bad_bt_script_get_state(BadBtScript* bad_bt);
  82. #define BAD_BT_ADV_NAME_MAX_LEN FURI_HAL_BT_ADV_NAME_LENGTH
  83. #define BAD_BT_MAC_ADDRESS_LEN GAP_MAC_ADDR_SIZE
  84. // this is the MAC address used when we do not forget paired device (BOUND STATE)
  85. extern const uint8_t BAD_BT_BOUND_MAC_ADDRESS[BAD_BT_MAC_ADDRESS_LEN];
  86. extern const uint8_t BAD_BT_EMPTY_MAC_ADDRESS[BAD_BT_MAC_ADDRESS_LEN];
  87. typedef enum {
  88. BadBtAppErrorNoFiles,
  89. BadBtAppErrorCloseRpc,
  90. } BadBtAppError;
  91. typedef struct {
  92. char bt_name[BAD_BT_ADV_NAME_MAX_LEN];
  93. uint8_t bt_mac[BAD_BT_MAC_ADDRESS_LEN];
  94. GapPairing bt_mode;
  95. } BadBtConfig;
  96. struct BadBtApp {
  97. Gui* gui;
  98. ViewDispatcher* view_dispatcher;
  99. SceneManager* scene_manager;
  100. NotificationApp* notifications;
  101. DialogsApp* dialogs;
  102. Widget* widget;
  103. VariableItemList* var_item_list;
  104. TextInput* text_input;
  105. ByteInput* byte_input;
  106. BadBtAppError error;
  107. FuriString* file_path;
  108. FuriString* keyboard_layout;
  109. BadBt* bad_bt_view;
  110. BadBtScript* bad_bt_script;
  111. Bt* bt;
  112. bool bt_remember;
  113. BadBtConfig config;
  114. BadBtConfig prev_config;
  115. FuriThread* conn_init_thread;
  116. FuriThread* switch_mode_thread;
  117. };
  118. int32_t bad_bt_config_switch_mode(BadBtApp* app);
  119. #ifdef __cplusplus
  120. }
  121. #endif