bad_usb_script.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #pragma once
  2. #ifdef __cplusplus
  3. extern "C" {
  4. #endif
  5. #include <furi.h>
  6. #include <furi_hal.h>
  7. #define FILE_BUFFER_LEN 16
  8. typedef enum {
  9. BadUsbStateInit,
  10. BadUsbStateNotConnected,
  11. BadUsbStateIdle,
  12. BadUsbStateWillRun,
  13. BadUsbStateRunning,
  14. BadUsbStateDelay,
  15. BadUsbStateDone,
  16. BadUsbStateScriptError,
  17. BadUsbStateFileError,
  18. } BadUsbWorkerState;
  19. typedef struct {
  20. BadUsbWorkerState state;
  21. uint16_t line_cur;
  22. uint16_t line_nb;
  23. uint32_t delay_remain;
  24. uint16_t error_line;
  25. char error[64];
  26. } BadUsbState;
  27. typedef struct BadUsbScript {
  28. FuriHalUsbHidConfig hid_cfg;
  29. BadUsbState st;
  30. FuriString* file_path;
  31. uint32_t defdelay;
  32. uint16_t layout[128];
  33. uint32_t stringdelay;
  34. FuriThread* thread;
  35. uint8_t file_buf[FILE_BUFFER_LEN + 1];
  36. uint8_t buf_start;
  37. uint8_t buf_len;
  38. bool file_end;
  39. FuriString* line;
  40. FuriString* line_prev;
  41. uint32_t repeat_cnt;
  42. } BadUsbScript;
  43. BadUsbScript* bad_usb_script_open(FuriString* file_path);
  44. void bad_usb_script_close(BadUsbScript* bad_usb);
  45. void bad_usb_script_set_keyboard_layout(BadUsbScript* bad_usb, FuriString* layout_path);
  46. void bad_usb_script_start(BadUsbScript* bad_usb);
  47. void bad_usb_script_stop(BadUsbScript* bad_usb);
  48. void bad_usb_script_toggle(BadUsbScript* bad_usb);
  49. BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb);
  50. uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars);
  51. uint32_t ducky_get_command_len(const char* line);
  52. bool ducky_is_line_end(const char chr);
  53. #ifdef __cplusplus
  54. }
  55. #endif