Added NKRO(80 Key) and binary hid descriptor

master
Fabian Felix Selbach 2 years ago
parent 094f7c8a84
commit 96aa12ebbd
  1. 24
      kbdrv-main.c
  2. BIN
      misc/kb-desc.bin

@ -10,12 +10,6 @@
#include <wiringx.h> #include <wiringx.h>
/*int columns[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
* int rows[] = {15, 16, 17, 18, 19, 20, 21, 22, 26, 27};
* unsigned char pressed_scancodes[6];
* char kmod = 0;
*/
bool state[sizeof(columns)/sizeof(int)][sizeof(rows)/sizeof(int)]; bool state[sizeof(columns)/sizeof(int)][sizeof(rows)/sizeof(int)];
#define BUF_LEN 512 #define BUF_LEN 512
int main() { int main() {
@ -38,7 +32,6 @@ int main() {
printf("Invalid GPIO %d\n", rows[i]); printf("Invalid GPIO %d\n", rows[i]);
return -1; return -1;
} }
// digitalWrite(rows[i], LOW);
pinMode(rows[i], PINMODE_INPUT); pinMode(rows[i], PINMODE_INPUT);
} }
if(wiringXValidGPIO(num_lock) != 0){ if(wiringXValidGPIO(num_lock) != 0){
@ -86,15 +79,15 @@ int main() {
} }
} }
char report[8]; char report[82];
memset(&report, 0x0, 8); memset(&report, 0x0, 82);
int curKey = 0; int curKey = 0;
for(int c = 0; c < sizeof(columns)/sizeof(int); c++){ for(int c = 0; c < sizeof(columns)/sizeof(int); c++){
digitalWrite(columns[c], LOW); digitalWrite(columns[c], LOW);
for(int r = 0; r < sizeof(rows)/sizeof(int); r++){ for(int r = 0; r < sizeof(rows)/sizeof(int); r++){
char curState = state[c][r]; char curState = state[c][r];
state[c][r] = (digitalRead(rows[r]) == LOW); state[c][r] = (digitalRead(rows[r]) == LOW);
if(state[c][r] == true && curKey < 6){ if(state[c][r] == true && curKey < 80){
char *binding = mapping[c][r]; char *binding = mapping[c][r];
for(int i = 0; kmod[i].opt != NULL; i++){ for(int i = 0; kmod[i].opt != NULL; i++){
if (strcmp(binding, kmod[i].opt) == 0) { if (strcmp(binding, kmod[i].opt) == 0) {
@ -109,17 +102,12 @@ int main() {
} }
} }
} }
if(state[c][r] != curState) printf("statechange to %s column %d, row %d\n", (state[c][r] ? "HIGH" : "LOW"), c, r); //if(state[c][r] != curState) printf("statechange to %s column %d, row %d\n", (state[c][r] ? "HIGH" : "LOW"), c, r);
} }
digitalWrite(columns[c], HIGH); digitalWrite(columns[c], HIGH);
} }
//printf("Report: "); write(fd, report, 80);//Send Report over USB
//for(int i = 0; i < sizeof(report)/sizeof(char); i++){ usleep(700);
// printf("%x ", report[i]);
//}
//printf("\n");
write(fd, report, 8);//Send Report over USB
usleep(1000);
} }
close(fd); close(fd);

Binary file not shown.
Loading…
Cancel
Save