2
0

keylogger.c 3.2 KB

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