ducky_script_keycodes.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include <furi_hal.h>
  2. #include "ducky_script_i.h"
  3. typedef struct {
  4. char* name;
  5. uint16_t keycode;
  6. } DuckyKey;
  7. static const DuckyKey ducky_keys[] = {
  8. {"CTRL-ALT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_ALT},
  9. {"CTRL-SHIFT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT},
  10. {"ALT-SHIFT", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_SHIFT},
  11. {"ALT-GUI", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_GUI},
  12. {"GUI-SHIFT", KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT},
  13. {"GUI-CTRL", KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_CTRL},
  14. {"CTRL", KEY_MOD_LEFT_CTRL},
  15. {"CONTROL", KEY_MOD_LEFT_CTRL},
  16. {"SHIFT", KEY_MOD_LEFT_SHIFT},
  17. {"ALT", KEY_MOD_LEFT_ALT},
  18. {"GUI", KEY_MOD_LEFT_GUI},
  19. {"WINDOWS", KEY_MOD_LEFT_GUI},
  20. {"DOWNARROW", HID_KEYBOARD_DOWN_ARROW},
  21. {"DOWN", HID_KEYBOARD_DOWN_ARROW},
  22. {"LEFTARROW", HID_KEYBOARD_LEFT_ARROW},
  23. {"LEFT", HID_KEYBOARD_LEFT_ARROW},
  24. {"RIGHTARROW", HID_KEYBOARD_RIGHT_ARROW},
  25. {"RIGHT", HID_KEYBOARD_RIGHT_ARROW},
  26. {"UPARROW", HID_KEYBOARD_UP_ARROW},
  27. {"UP", HID_KEYBOARD_UP_ARROW},
  28. {"ENTER", HID_KEYBOARD_RETURN},
  29. {"BREAK", HID_KEYBOARD_PAUSE},
  30. {"PAUSE", HID_KEYBOARD_PAUSE},
  31. {"CAPSLOCK", HID_KEYBOARD_CAPS_LOCK},
  32. {"DELETE", HID_KEYBOARD_DELETE_FORWARD},
  33. {"BACKSPACE", HID_KEYBOARD_DELETE},
  34. {"END", HID_KEYBOARD_END},
  35. {"ESC", HID_KEYBOARD_ESCAPE},
  36. {"ESCAPE", HID_KEYBOARD_ESCAPE},
  37. {"HOME", HID_KEYBOARD_HOME},
  38. {"INSERT", HID_KEYBOARD_INSERT},
  39. {"NUMLOCK", HID_KEYPAD_NUMLOCK},
  40. {"PAGEUP", HID_KEYBOARD_PAGE_UP},
  41. {"PAGEDOWN", HID_KEYBOARD_PAGE_DOWN},
  42. {"PRINTSCREEN", HID_KEYBOARD_PRINT_SCREEN},
  43. {"SCROLLLOCK", HID_KEYBOARD_SCROLL_LOCK},
  44. {"SPACE", HID_KEYBOARD_SPACEBAR},
  45. {"TAB", HID_KEYBOARD_TAB},
  46. {"MENU", HID_KEYBOARD_APPLICATION},
  47. {"APP", HID_KEYBOARD_APPLICATION},
  48. {"F1", HID_KEYBOARD_F1},
  49. {"F2", HID_KEYBOARD_F2},
  50. {"F3", HID_KEYBOARD_F3},
  51. {"F4", HID_KEYBOARD_F4},
  52. {"F5", HID_KEYBOARD_F5},
  53. {"F6", HID_KEYBOARD_F6},
  54. {"F7", HID_KEYBOARD_F7},
  55. {"F8", HID_KEYBOARD_F8},
  56. {"F9", HID_KEYBOARD_F9},
  57. {"F10", HID_KEYBOARD_F10},
  58. {"F11", HID_KEYBOARD_F11},
  59. {"F12", HID_KEYBOARD_F12},
  60. {"F13", HID_KEYBOARD_F13},
  61. {"F14", HID_KEYBOARD_F14},
  62. {"F15", HID_KEYBOARD_F15},
  63. {"F16", HID_KEYBOARD_F16},
  64. {"F17", HID_KEYBOARD_F17},
  65. {"F18", HID_KEYBOARD_F18},
  66. {"F19", HID_KEYBOARD_F19},
  67. {"F20", HID_KEYBOARD_F20},
  68. {"F21", HID_KEYBOARD_F21},
  69. {"F22", HID_KEYBOARD_F22},
  70. {"F23", HID_KEYBOARD_F23},
  71. {"F24", HID_KEYBOARD_F24},
  72. };
  73. static const DuckyKey ducky_media_keys[] = {
  74. {"POWER", HID_CONSUMER_POWER},
  75. {"REBOOT", HID_CONSUMER_RESET},
  76. {"SLEEP", HID_CONSUMER_SLEEP},
  77. {"LOGOFF", HID_CONSUMER_AL_LOGOFF},
  78. {"EXIT", HID_CONSUMER_AC_EXIT},
  79. {"HOME", HID_CONSUMER_AC_HOME},
  80. {"BACK", HID_CONSUMER_AC_BACK},
  81. {"FORWARD", HID_CONSUMER_AC_FORWARD},
  82. {"REFRESH", HID_CONSUMER_AC_REFRESH},
  83. {"SNAPSHOT", HID_CONSUMER_SNAPSHOT},
  84. {"PLAY", HID_CONSUMER_PLAY},
  85. {"PAUSE", HID_CONSUMER_PAUSE},
  86. {"PLAY_PAUSE", HID_CONSUMER_PLAY_PAUSE},
  87. {"NEXT_TRACK", HID_CONSUMER_SCAN_NEXT_TRACK},
  88. {"PREV_TRACK", HID_CONSUMER_SCAN_PREVIOUS_TRACK},
  89. {"STOP", HID_CONSUMER_STOP},
  90. {"EJECT", HID_CONSUMER_EJECT},
  91. {"MUTE", HID_CONSUMER_MUTE},
  92. {"VOLUME_UP", HID_CONSUMER_VOLUME_INCREMENT},
  93. {"VOLUME_DOWN", HID_CONSUMER_VOLUME_DECREMENT},
  94. {"FN", HID_CONSUMER_FN_GLOBE},
  95. {"BRIGHT_UP", HID_CONSUMER_BRIGHTNESS_INCREMENT},
  96. {"BRIGHT_DOWN", HID_CONSUMER_BRIGHTNESS_DECREMENT},
  97. };
  98. uint16_t ducky_get_keycode_by_name(const char* param) {
  99. for(size_t i = 0; i < COUNT_OF(ducky_keys); i++) {
  100. size_t key_cmd_len = strlen(ducky_keys[i].name);
  101. if((strncmp(param, ducky_keys[i].name, key_cmd_len) == 0) &&
  102. (ducky_is_line_end(param[key_cmd_len]))) {
  103. return ducky_keys[i].keycode;
  104. }
  105. }
  106. return HID_KEYBOARD_NONE;
  107. }
  108. uint16_t ducky_get_media_keycode_by_name(const char* param) {
  109. for(size_t i = 0; i < COUNT_OF(ducky_media_keys); i++) {
  110. size_t key_cmd_len = strlen(ducky_media_keys[i].name);
  111. if((strncmp(param, ducky_media_keys[i].name, key_cmd_len) == 0) &&
  112. (ducky_is_line_end(param[key_cmd_len]))) {
  113. return ducky_media_keys[i].keycode;
  114. }
  115. }
  116. return HID_CONSUMER_UNASSIGNED;
  117. }