Keyboard firmwares for Atmel AVR and Cortex-M
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef USB_KEYBOARD_H
  2. #define USB_KEYBOARD_H 1
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include "usb.h"
  6. #define KBD_INTERFACE 0
  7. #define KBD_ENDPOINT 1
  8. #define KBD_SIZE 8
  9. #define KBD_BUFFER EP_DOUBLE_BUFFER
  10. #define KBD_REPORT_KEYS (KBD_SIZE - 2)
  11. // secondary keyboard
  12. #ifdef USB_NKRO_ENABLE
  13. #define KBD2_INTERFACE 4
  14. #define KBD2_ENDPOINT 5
  15. #define KBD2_SIZE 16
  16. #define KBD2_BUFFER EP_DOUBLE_BUFFER
  17. #define KBD2_REPORT_KEYS (KBD2_SIZE - 1)
  18. #endif
  19. #if defined(KBD2_REPORT_KEYS) && KBD2_REPORT_KEYS > KBD_REPORT_KEYS
  20. #define KEYS_MAX KBD2_REPORT_KEYS
  21. #else
  22. #define KEYS_MAX KBD_REPORT_KEYS
  23. #endif
  24. #define BIT_LCTRL (1<<0)
  25. #define BIT_LSHIFT (1<<1)
  26. #define BIT_LALT (1<<2)
  27. #define BIT_LGUI (1<<3)
  28. #define BIT_RCTRL (1<<4)
  29. #define BIT_RSHIFT (1<<5)
  30. #define BIT_RALT (1<<6)
  31. #define BIT_RGUI (1<<7)
  32. #define BIT_LCTL BIT_LCTRL
  33. #define BIT_RCTL BIT_RCTRL
  34. #define BIT_LSFT BIT_LSHIFT
  35. #define BIT_RSFT BIT_RSHIFT
  36. typedef struct report {
  37. uint8_t keys[KEYS_MAX];
  38. uint8_t mods;
  39. bool is_sent;
  40. } usb_keyboard_report_t;
  41. #define usb_keyboard_keys usb_keyboard_report->keys
  42. #define usb_keyboard_mods usb_keyboard_report->mods
  43. #define usb_keyboard_keys_prev usb_keyboard_report_prev->keys
  44. #define usb_keyboard_mods_prev usb_keyboard_report_prev->mods
  45. extern usb_keyboard_report_t *usb_keyboard_report;
  46. extern usb_keyboard_report_t *usb_keyboard_report_prev;
  47. extern uint8_t usb_keyboard_protocol;
  48. extern uint8_t usb_keyboard_idle_config;
  49. extern uint8_t usb_keyboard_idle_count;
  50. extern volatile uint8_t usb_keyboard_leds;
  51. extern bool usb_keyboard_nkro;
  52. int8_t usb_keyboard_send(void);
  53. int8_t usb_keyboard_send_report(usb_keyboard_report_t *report);
  54. void usb_keyboard_swap_report(void);
  55. void usb_keyboard_clear_report(void);
  56. void usb_keyboard_clear_keys(void);
  57. void usb_keyboard_clear_mods(void);
  58. void usb_keyboard_set_keys(uint8_t *keys);
  59. void usb_keyboard_set_mods(uint8_t mods);
  60. void usb_keyboard_add_code(uint8_t code);
  61. void usb_keyboard_add_key(uint8_t code);
  62. void usb_keyboard_add_mod(uint8_t code);
  63. void usb_keyboard_del_code(uint8_t code);
  64. void usb_keyboard_del_key(uint8_t code);
  65. void usb_keyboard_del_mod(uint8_t code);
  66. bool usb_keyboard_is_sent(void);
  67. bool usb_keyboard_has_key(void);
  68. bool usb_keyboard_has_mod(void);
  69. uint8_t usb_keyboard_get_key(void);
  70. void usb_keyboard_print_report(usb_keyboard_report_t *report);
  71. #endif