add simple mouse controls

This commit is contained in:
2025-07-19 07:05:28 -04:00
parent cf9cfa9ef9
commit d3b12890bb
6 changed files with 1029 additions and 813 deletions
+29 -5
View File
@@ -13,7 +13,9 @@ void parse_key_list(char * keys) {
uint8_t keypos = 2; // bytes 2-7 are used for normal keys
uint8_t code = 0x00;
static unsigned char boot_report[8];
static unsigned char mouse_report[3];
memset(boot_report, 0x00, 8);
memset(mouse_report, 0x00, 3);
// Javascript sends the list as comma delimited, so split into individual
// keys by splitting at commas
@@ -27,20 +29,43 @@ void parse_key_list(char * keys) {
keypos++;
}
// if a scan code was not returned, it might be a modifier
// search for the correct modifier bit and add it to byte 0 of the
// USB boot keyboard report
// if a scan code was not returned, it might be a modifier or mouse
if (code == 0x00) {
// search for the correct modifier bit and add it to byte 0 of the
// USB boot keyboard report
code = parse_mod(token);
if (code) {
boot_report[0] = boot_report[0] | code;
} else if ( strncmp(&token[0],"Mouse", 5) == 0 ){
if ( strncmp(&token[5], "Left", 4) == 0 ) {
mouse_report[1] = -1*MOUSE_SPEED;
} else if ( strncmp(&token[5], "Right", 5) == 0 ) {
mouse_report[1] = 1*MOUSE_SPEED;
} else if ( strncmp(&token[5], "Up", 2) == 0 ) {
mouse_report[2] = -1*MOUSE_SPEED;
} else if ( strncmp(&token[5], "Down", 4) == 0 ) {
mouse_report[2] = 1*MOUSE_SPEED;
} else if ( strncmp(&token[5], "ClickLeft", 9) == 0 ) {
mouse_report[0] = mouse_report[0] | 1;
} else if ( strncmp(&token[5], "ClickRight", 10) == 0) {
mouse_report[0] = mouse_report[0] | 2;
}
}
}
token = strtok(NULL, ",");
}
// print resulting HID boot mouse report to CDC for debugging
printf("Mouse report: ");
for(int i=0; i<3; i++){
printf("%02X ",mouse_report[i]);
}
printf("\n");
tud_hid_report(REPORT_ID_MOUSE, mouse_report, 3);
// print resulting HID boot keyboard report to CDC for debugging
printf("HID report: ");
printf("Keyboard report: ");
for(int i=0; i<8; i++){
printf("%02X ",boot_report[i]);
}
@@ -75,4 +100,3 @@ uint8_t parse_mod(char * key) {
}
return 0x00;
}