-
Notifications
You must be signed in to change notification settings - Fork 2
/
keyboard.c
82 lines (65 loc) · 1.38 KB
/
keyboard.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <device/hid/keyboard.h>
#include <usbd/usbd.h>
#include <stdint.h>
#include "stdio.h"
extern const char KeysNormal[];
uint32_t address = 0;
uint8_t keys[6];
uint32_t get_address(){
return address;
}
void LogPrint(char* message, u32 messageLength){
printf(message);
}
void KeyboardUpdate(){
if(address == 0){
PollFailed: UsbCheckForChange();
int count = KeyboardCount();
if(count == 0){
address = 0;
return;
}
address = KeyboardGetAddress(0);
if(address == 0){
return;
}
for(int i = 0; i < 6; i++){
keys[i] = KeyboardGetKeyDown(address, 0);
}
if(KeyboardPoll(address)){
goto PollFailed;
}
}else{
for(int i =0; i < 6; i++){
keys[i] = KeyboardGetKeyDown(address,0);
}
if(KeyboardPoll(address)){
goto PollFailed;
}
}
}
uint8_t KeyWasDown(uint8_t scan_code){
for(int i =0; i < 6; i++){
if(keys[i] == scan_code)
return 1;
}
return 0;
}
char KeyboardGetChar(){
if(address == 0){
return 0;
}
for(int i =0; i < 6; i++){
if(keys[i] == 0){
break;
}
if(!KeyWasDown(keys[i])){
uint8_t j = keys[i];
while(KeysNormal[j++] == 0){
}
return KeysNormal[j];
printf("%c\n", KeysNormal[j]);
}
}
return 0;
}