]> git.gir.st - tmk_keyboard.git/blob - tmk_core/protocol/chibios/usb_main.h
NKRO fixes.
[tmk_keyboard.git] / tmk_core / protocol / chibios / usb_main.h
1 /*
2 * (c) 2015 flabberast <s3+flabbergast@sdfeu.org>
3 *
4 * Based on the following work:
5 * - Guillaume Duc's raw hid example (MIT License)
6 * https://github.com/guiduc/usb-hid-chibios-example
7 * - PJRC Teensy examples (MIT License)
8 * https://www.pjrc.com/teensy/usb_keyboard.html
9 * - hasu's TMK keyboard code (GPL v2 and some code Modified BSD)
10 * https://github.com/tmk/tmk_keyboard/
11 * - ChibiOS demo code (Apache 2.0 License)
12 * http://www.chibios.org
13 *
14 * Since some GPL'd code is used, this work is licensed under
15 * GPL v2 or later.
16 */
17
18
19 #ifndef _USB_MAIN_H_
20 #define _USB_MAIN_H_
21
22 // TESTING
23 // extern uint8_t blinkLed;
24
25 #include "ch.h"
26 #include "hal.h"
27
28 /* -------------------------
29 * General USB driver header
30 * -------------------------
31 */
32
33 /* The USB driver to use */
34 #define USB_DRIVER USBD1
35
36 /* Initialize the USB driver and bus */
37 void init_usb_driver(USBDriver *usbp);
38
39 /* ---------------
40 * Keyboard header
41 * ---------------
42 */
43
44 /* main keyboard (6kro) */
45 #define KBD_INTERFACE 0
46 #define KBD_ENDPOINT 1
47 #define KBD_EPSIZE 8
48 #define KBD_REPORT_KEYS (KBD_EPSIZE - 2)
49
50 /* secondary keyboard */
51 #ifdef NKRO_ENABLE
52 #define NKRO_INTERFACE 4
53 #define NKRO_ENDPOINT 5
54 #define NKRO_EPSIZE 16
55 #define NKRO_REPORT_KEYS (NKRO_EPSIZE - 1)
56 #endif
57
58 /* this defines report_keyboard_t and computes REPORT_SIZE defines */
59 // #include "report.h"
60
61 /* extern report_keyboard_t keyboard_report_sent; */
62
63 /* keyboard IN request callback handler */
64 void kbd_in_cb(USBDriver *usbp, usbep_t ep);
65
66 /* start-of-frame handler */
67 void kbd_sof_cb(USBDriver *usbp);
68
69 #ifdef NKRO_ENABLE
70 /* nkro IN callback hander */
71 void nkro_in_cb(USBDriver *usbp, usbep_t ep);
72 #endif /* NKRO_ENABLE */
73
74 /* ------------
75 * Mouse header
76 * ------------
77 */
78
79 #ifdef MOUSE_ENABLE
80
81 #define MOUSE_INTERFACE 1
82 #define MOUSE_ENDPOINT 2
83 #define MOUSE_EPSIZE 8
84
85 /* mouse IN request callback handler */
86 void mouse_in_cb(USBDriver *usbp, usbep_t ep);
87 #endif /* MOUSE_ENABLE */
88
89 /* ---------------
90 * Extrakey header
91 * ---------------
92 */
93
94 #ifdef EXTRAKEY_ENABLE
95
96 #define EXTRA_INTERFACE 3
97 #define EXTRA_ENDPOINT 4
98 #define EXTRA_EPSIZE 8
99
100 /* extrakey IN request callback handler */
101 void extra_in_cb(USBDriver *usbp, usbep_t ep);
102
103 /* extra report structure */
104 typedef struct {
105 uint8_t report_id;
106 uint16_t usage;
107 } __attribute__ ((packed)) report_extra_t;
108 #endif /* EXTRAKEY_ENABLE */
109
110 /* --------------
111 * Console header
112 * --------------
113 */
114
115 #ifdef CONSOLE_ENABLE
116
117 #define CONSOLE_INTERFACE 2
118 #define CONSOLE_ENDPOINT 3
119 #define CONSOLE_EPSIZE 16
120
121 /* Number of IN reports that can be stored inside the output queue */
122 #define CONSOLE_QUEUE_CAPACITY 2
123 #define CONSOLE_QUEUE_BUFFER_SIZE (CONSOLE_QUEUE_CAPACITY * CONSOLE_EPSIZE)
124
125 /* Console flush time */
126 #define CONSOLE_FLUSH_MS 50
127
128 /* Putchar over the USB console */
129 int8_t sendchar(uint8_t c);
130 /* wrapper for printf lib */
131
132 /* Flush output (send everything immediately) */
133 void console_flush_output(void);
134
135 /* console IN request callback handler */
136 void console_in_cb(USBDriver *usbp, usbep_t ep);
137 #endif /* CONSOLE_ENABLE */
138
139 void sendchar_pf(void *p, char c);
140
141 #endif /* _USB_MAIN_H_ */
Imprint / Impressum