1 #include "usb_keycodes.h"
8 static report_keyboard_t report0
;
9 static report_keyboard_t report1
;
10 static report_keyboard_t
*report
= &report0
;
11 static report_keyboard_t
*report_prev
= &report1
;
14 void keyboard_set_led(uint8_t usb_led
)
17 if (usb_led
& (1<<USB_LED_SCROLL_LOCK
))
18 ps2_led
|= (1<<PS2_LED_SCROLL_LOCK
);
19 if (usb_led
& (1<<USB_LED_NUM_LOCK
))
20 ps2_led
|= (1<<PS2_LED_NUM_LOCK
);
21 if (usb_led
& (1<<USB_LED_CAPS_LOCK
))
22 ps2_led
|= (1<<PS2_LED_CAPS_LOCK
);
23 print("ps2_led: "); phex(ps2_led
); print("\n");
25 ps2_host_set_led(ps2_led
);
28 void keyboard_send(void)
30 host_keyboard_send(report
);
33 bool keyboard_has_key(void)
35 for (int i
= 0; i
< REPORT_KEYS
; i
++) {
42 void keyboard_add_mod(uint8_t mod
)
47 void keyboard_add_key(uint8_t code
)
51 for (; i
< REPORT_KEYS
; i
++) {
52 if (report_prev
->keys
[i
] == code
) {
53 report
->keys
[i
] = code
;
56 if (empty
== -1 && report_prev
->keys
[i
] == KB_NO
&& report
->keys
[i
] == KB_NO
) {
60 if (i
== REPORT_KEYS
&& empty
!= -1) {
61 report
->keys
[empty
] = code
;
65 void keyboard_add_code(uint8_t code
)
68 keyboard_add_mod(code
);
70 keyboard_add_key(code
);
74 void keyboard_swap_report(void)
76 report_keyboard_t
*tmp
= report_prev
;
81 void keyboard_clear_report(void)
84 for (int8_t i
= 0; i
< REPORT_KEYS
; i
++) {
89 report_keyboard_t
*keyboard_report(void)
94 report_keyboard_t
*keyboard_report_prev(void)