Keyboard firmwares for Atmel AVR and Cortex-M
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
10 лет назад
11 лет назад
11 лет назад
11 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*
  2. Copyright 2011,2012 Jun Wako <[email protected]>
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #ifndef REPORT_H
  15. #define REPORT_H
  16. #include <stdint.h>
  17. #include "keycode.h"
  18. /* report id */
  19. #define REPORT_ID_MOUSE 1
  20. #define REPORT_ID_SYSTEM 2
  21. #define REPORT_ID_CONSUMER 3
  22. /* mouse buttons */
  23. #define MOUSE_BTN1 (1<<0)
  24. #define MOUSE_BTN2 (1<<1)
  25. #define MOUSE_BTN3 (1<<2)
  26. #define MOUSE_BTN4 (1<<3)
  27. #define MOUSE_BTN5 (1<<4)
  28. /* Consumer Page(0x0C)
  29. * following are supported by Windows: http://msdn.microsoft.com/en-us/windows/hardware/gg463372.aspx
  30. */
  31. #define AUDIO_MUTE 0x00E2
  32. #define AUDIO_VOL_UP 0x00E9
  33. #define AUDIO_VOL_DOWN 0x00EA
  34. #define TRANSPORT_NEXT_TRACK 0x00B5
  35. #define TRANSPORT_PREV_TRACK 0x00B6
  36. #define TRANSPORT_STOP 0x00B7
  37. #define TRANSPORT_STOP_EJECT 0x00CC
  38. #define TRANSPORT_PLAY_PAUSE 0x00CD
  39. /* application launch */
  40. #define AL_CC_CONFIG 0x0183
  41. #define AL_EMAIL 0x018A
  42. #define AL_CALCULATOR 0x0192
  43. #define AL_LOCAL_BROWSER 0x0194
  44. /* application control */
  45. #define AC_SEARCH 0x0221
  46. #define AC_HOME 0x0223
  47. #define AC_BACK 0x0224
  48. #define AC_FORWARD 0x0225
  49. #define AC_STOP 0x0226
  50. #define AC_REFRESH 0x0227
  51. #define AC_BOOKMARKS 0x022A
  52. /* supplement for Bluegiga iWRAP HID(not supported by Windows?) */
  53. #define AL_LOCK 0x019E
  54. #define TRANSPORT_RECORD 0x00B2
  55. #define TRANSPORT_FAST_FORWARD 0x00B3
  56. #define TRANSPORT_REWIND 0x00B4
  57. #define TRANSPORT_EJECT 0x00B8
  58. #define AC_MINIMIZE 0x0206
  59. /* Generic Desktop Page(0x01) - system power control */
  60. #define SYSTEM_POWER_DOWN 0x0081
  61. #define SYSTEM_SLEEP 0x0082
  62. #define SYSTEM_WAKE_UP 0x0083
  63. /* key report size(NKRO or boot mode) */
  64. #if defined(PROTOCOL_PJRC) && defined(NKRO_ENABLE)
  65. # include "usb.h"
  66. # define KEYBOARD_REPORT_SIZE KBD2_SIZE
  67. # define KEYBOARD_REPORT_KEYS (KBD2_SIZE - 2)
  68. # define KEYBOARD_REPORT_BITS (KBD2_SIZE - 1)
  69. #elif defined(PROTOCOL_LUFA) && defined(NKRO_ENABLE)
  70. # include "protocol/lufa/descriptor.h"
  71. # define KEYBOARD_REPORT_SIZE NKRO_EPSIZE
  72. # define KEYBOARD_REPORT_KEYS (NKRO_EPSIZE - 2)
  73. # define KEYBOARD_REPORT_BITS (NKRO_EPSIZE - 1)
  74. #else
  75. # define KEYBOARD_REPORT_SIZE 8
  76. # define KEYBOARD_REPORT_KEYS 6
  77. #endif
  78. #ifdef __cplusplus
  79. extern "C" {
  80. #endif
  81. /*
  82. * keyboard report is 8-byte array retains state of 8 modifiers and 6 keys.
  83. *
  84. * byte |0 |1 |2 |3 |4 |5 |6 |7
  85. * -----+--------+--------+--------+--------+--------+--------+--------+--------
  86. * desc |mods |reserved|keys[0] |keys[1] |keys[2] |keys[3] |keys[4] |keys[5]
  87. *
  88. * It is exended to 16 bytes to retain 120keys+8mods when NKRO mode.
  89. *
  90. * byte |0 |1 |2 |3 |4 |5 |6 |7 ... |15
  91. * -----+--------+--------+--------+--------+--------+--------+--------+-------- +--------
  92. * desc |mods |bits[0] |bits[1] |bits[2] |bits[3] |bits[4] |bits[5] |bits[6] ... |bit[14]
  93. *
  94. * mods retains state of 8 modifiers.
  95. *
  96. * bit |0 |1 |2 |3 |4 |5 |6 |7
  97. * -----+--------+--------+--------+--------+--------+--------+--------+--------
  98. * desc |Lcontrol|Lshift |Lalt |Lgui |Rcontrol|Rshift |Ralt |Rgui
  99. *
  100. */
  101. typedef union {
  102. uint8_t raw[KEYBOARD_REPORT_SIZE];
  103. struct {
  104. uint8_t mods;
  105. uint8_t reserved;
  106. uint8_t keys[KEYBOARD_REPORT_KEYS];
  107. };
  108. #ifdef NKRO_ENABLE
  109. struct {
  110. uint8_t mods;
  111. uint8_t bits[KEYBOARD_REPORT_BITS];
  112. } nkro;
  113. #endif
  114. } __attribute__ ((packed)) report_keyboard_t;
  115. /*
  116. typedef struct {
  117. uint8_t mods;
  118. uint8_t reserved;
  119. uint8_t keys[REPORT_KEYS];
  120. } __attribute__ ((packed)) report_keyboard_t;
  121. */
  122. typedef struct {
  123. uint8_t buttons;
  124. int8_t x;
  125. int8_t y;
  126. int8_t v;
  127. int8_t h;
  128. } __attribute__ ((packed)) report_mouse_t;
  129. /* keycode to system usage */
  130. #define KEYCODE2SYSTEM(key) \
  131. (key == KC_SYSTEM_POWER ? SYSTEM_POWER_DOWN : \
  132. (key == KC_SYSTEM_SLEEP ? SYSTEM_SLEEP : \
  133. (key == KC_SYSTEM_WAKE ? SYSTEM_WAKE_UP : 0)))
  134. /* keycode to consumer usage */
  135. #define KEYCODE2CONSUMER(key) \
  136. (key == KC_AUDIO_MUTE ? AUDIO_MUTE : \
  137. (key == KC_AUDIO_VOL_UP ? AUDIO_VOL_UP : \
  138. (key == KC_AUDIO_VOL_DOWN ? AUDIO_VOL_DOWN : \
  139. (key == KC_MEDIA_NEXT_TRACK ? TRANSPORT_NEXT_TRACK : \
  140. (key == KC_MEDIA_PREV_TRACK ? TRANSPORT_PREV_TRACK : \
  141. (key == KC_MEDIA_FAST_FORWARD ? TRANSPORT_FAST_FORWARD : \
  142. (key == KC_MEDIA_REWIND ? TRANSPORT_REWIND : \
  143. (key == KC_MEDIA_STOP ? TRANSPORT_STOP : \
  144. (key == KC_MEDIA_EJECT ? TRANSPORT_STOP_EJECT : \
  145. (key == KC_MEDIA_PLAY_PAUSE ? TRANSPORT_PLAY_PAUSE : \
  146. (key == KC_MEDIA_SELECT ? AL_CC_CONFIG : \
  147. (key == KC_MAIL ? AL_EMAIL : \
  148. (key == KC_CALCULATOR ? AL_CALCULATOR : \
  149. (key == KC_MY_COMPUTER ? AL_LOCAL_BROWSER : \
  150. (key == KC_WWW_SEARCH ? AC_SEARCH : \
  151. (key == KC_WWW_HOME ? AC_HOME : \
  152. (key == KC_WWW_BACK ? AC_BACK : \
  153. (key == KC_WWW_FORWARD ? AC_FORWARD : \
  154. (key == KC_WWW_STOP ? AC_STOP : \
  155. (key == KC_WWW_REFRESH ? AC_REFRESH : \
  156. (key == KC_WWW_FAVORITES ? AC_BOOKMARKS : 0)))))))))))))))))))))
  157. #ifdef __cplusplus
  158. }
  159. #endif
  160. #endif