keylogger.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. #include <stdio.h>
  2. #include "progmem.h"
  3. #define NUM_USB_HID_KEYCODES 255
  4. #define LEN_KEYCODE_STR 4
  5. char keylog[22] = {"KC: ID: "};
  6. // Quick and dirty way to display USB HID keycodes used in QMK
  7. // USB HID keycodes from 0x0000 to 0x00FF are stored in a 4x256+1 length char
  8. const char code_to_name[] PROGMEM = {
  9. "NO " //0x00
  10. "TRNS"
  11. "? "
  12. "? "
  13. "A "
  14. "B "
  15. "C "
  16. "D "
  17. "E "
  18. "F "
  19. "G "
  20. "H "
  21. "I "
  22. "J "
  23. "K "
  24. "L "
  25. "M " //0x10
  26. "N "
  27. "O "
  28. "P "
  29. "Q "
  30. "R "
  31. "S "
  32. "T "
  33. "U "
  34. "V "
  35. "W "
  36. "X "
  37. "Y "
  38. "Z "
  39. "1 "
  40. "2 "
  41. "3 " //0x20
  42. "4 "
  43. "5 "
  44. "6 "
  45. "7 "
  46. "8 "
  47. "9 "
  48. "0 "
  49. "ENT "
  50. "ESC "
  51. "BSPC"
  52. "TAB "
  53. "SPC "
  54. "MINS"
  55. "EQL "
  56. "LBRC"
  57. "RBRC" //0x30
  58. "BSLS"
  59. "NUHS"
  60. "SCLN"
  61. "QUOT"
  62. "GRV "
  63. "COMM"
  64. "DOT "
  65. "SLSH"
  66. "CAPS"
  67. "F1 "
  68. "F2 "
  69. "F3 "
  70. "F4 "
  71. "F5 "
  72. "F6 "
  73. "F7 " //0x40
  74. "F8 "
  75. "F9 "
  76. "F10 "
  77. "F11 "
  78. "F12 "
  79. "PSCR"
  80. "SLCK"
  81. "PAUS"
  82. "INS "
  83. "HOME"
  84. "PGUP"
  85. "DEL "
  86. "END "
  87. "PGDN"
  88. "RGHT"
  89. "LEFT" //0x50
  90. "DOWN"
  91. "UP "
  92. "NLCK"
  93. "PSLS"
  94. "PAST"
  95. "PMNS"
  96. "PPLS"
  97. "PENT"
  98. "P1 "
  99. "P2 "
  100. "P3 "
  101. "P4 "
  102. "P5 "
  103. "P6 "
  104. "P7 "
  105. "P8 " //0x60
  106. "P9 "
  107. "P0 "
  108. "PDOT"
  109. "NUBS"
  110. "APP "
  111. "POW "
  112. "PEQL"
  113. "F13 "
  114. "F14 "
  115. "F15 "
  116. "F16 "
  117. "F17 "
  118. "F18 "
  119. "F19 "
  120. "F20 "
  121. "F21 " //0x70
  122. "F22 "
  123. "F23 "
  124. "F24 "
  125. "EXEC"
  126. "HELP"
  127. "MENU"
  128. "SLCT"
  129. "STOP"
  130. "AGIN"
  131. "UNDO"
  132. "CUT "
  133. "COPY"
  134. "PSTE"
  135. "FIND"
  136. "_MUT"
  137. "_VUP" //0x80
  138. "_VDN"
  139. "LCAP"
  140. "LNUM"
  141. "LSCR"
  142. "PCMM"
  143. "PEQA"
  144. "INT1"
  145. "INT2"
  146. "INT3"
  147. "INT4"
  148. "INT5"
  149. "INT6"
  150. "INT7"
  151. "INT8"
  152. "INT9"
  153. "LAN1" //0x90
  154. "LAN2"
  155. "LAN3"
  156. "LAN4"
  157. "LAN5"
  158. "LAN6"
  159. "LAN7"
  160. "LAN8"
  161. "LAN9"
  162. "ERAS"
  163. "SYSR"
  164. "CNCL"
  165. "CLR "
  166. "PRIR"
  167. "RTRN"
  168. "SEP "
  169. "OUT " //0xA0
  170. "OPER"
  171. "CLRA"
  172. "CSEL"
  173. "ESEL"
  174. "PWR " //0xA5
  175. "SLEP"
  176. "WAKE"
  177. "MUTE"
  178. "VOLU"
  179. "VOLD"
  180. "MNXT"
  181. "MPRV"
  182. "MSTP"
  183. "MPLY"
  184. "MSEL"
  185. "EJCT" //0xB0
  186. "MAIL"
  187. "CALC"
  188. "MYCM"
  189. "WSCH"
  190. "WHOM"
  191. "WBAK"
  192. "WFWD"
  193. "WSTP"
  194. "WREF"
  195. "WFAV"
  196. "MFFD"
  197. "MRWD"
  198. "BRIU"
  199. "BRID"
  200. "? "
  201. "FN0 " //0xC0
  202. "FN1 "
  203. "FN2 "
  204. "FN3 "
  205. "FN4 "
  206. "FN5 "
  207. "FN6 "
  208. "FN7 "
  209. "FN8 "
  210. "FN9 "
  211. "FN10"
  212. "FN11"
  213. "FN12"
  214. "FN13"
  215. "FN14"
  216. "FN15"
  217. "FN16" //0xD0
  218. "FN17"
  219. "FN18"
  220. "FN19"
  221. "FN20"
  222. "FN21"
  223. "FN22"
  224. "FN23"
  225. "FN24"
  226. "FN25"
  227. "FN26"
  228. "FN27"
  229. "FN28"
  230. "FN29"
  231. "FN30"
  232. "FN31"
  233. "LCTL" //0xE0
  234. "LSFT"
  235. "LALT"
  236. "LGUI"
  237. "RCTL"
  238. "RSFT"
  239. "RALT"
  240. "RGUI"
  241. "? "
  242. "? "
  243. "? "
  244. "? "
  245. "? "
  246. "? "
  247. "? "
  248. "? "
  249. "MS_U" //0xF0
  250. "MS_D"
  251. "MS_L"
  252. "MS_R"
  253. "BTN1"
  254. "BTN2"
  255. "BTN3"
  256. "BTN4"
  257. "BTN5"
  258. "WH_U"
  259. "WH_D"
  260. "WH_L"
  261. "WH_R"
  262. "ACL0"
  263. "ACL1"
  264. "ACL2"
  265. };
  266. void set_keylog(uint16_t keycode)
  267. {
  268. char name[LEN_KEYCODE_STR+1] = "? ";
  269. if (keycode <= NUM_USB_HID_KEYCODES) {
  270. for (uint8_t k = 0; k < LEN_KEYCODE_STR; k++) {
  271. name[k] = pgm_read_byte_near(code_to_name + keycode * LEN_KEYCODE_STR + k);
  272. }
  273. } else if (keycode > NUM_USB_HID_KEYCODES) {
  274. snprintf(name, sizeof(name), "QMK ");
  275. }
  276. // update keylog
  277. snprintf(keylog, sizeof(keylog), "KC: %s ID: %d", name, keycode);
  278. }
  279. const char *read_keylog(void) {
  280. return keylog;
  281. }