fix send tab and enter

This commit is contained in:
King Kévin 2024-04-17 06:23:20 +02:00
parent 16af15e47d
commit 0c9ae4bbfd
1 changed files with 29 additions and 21 deletions

View File

@ -733,33 +733,41 @@ void tud_cdc_rx_cb(uint8_t itf)
//--------------------------------------------------------------------+
// USB HID
//--------------------------------------------------------------------+
static void send_hid_report(char c)
static void send_hid_report(uint8_t modifier, uint8_t keycode)
{
// skip if hid is not ready yet
if ( !tud_hid_ready() ) {
return;
}
// ensure it's a printable ASCII
if (0 != c && c < ' ') {
return;
uint8_t keycodes[6] = {keycode, 0, 0, 0, 0, 0};
if (keycode) {
key_when = board_millis(); // remember when we sent the key
key_pressed = true; // remember we pressed a key
} else {
key_pressed = false; // key released
}
tud_hid_keyboard_report(REPORT_ID_KEYBOARD, modifier, keycodes);
}
static void send_hid_char(char c)
{
// set default to US
if (config.layout >= LENGTH(map_asciimap)) {
config.layout = 0;
}
uint8_t keycode[6] = {0, 0, 0, 0, 0, 0};
if (c) {
if (0 == c) {
send_hid_report(0, 0);
} else if ('\t' == c) {
send_hid_report(0, KEY_TAB);
} else if ('\r' == c || '\n' == c) {
send_hid_report(0, KEY_ENTER);
} else if (c >= ' ' && c <= '~') {
const uint16_t code = map_asciimap[config.layout][c - ' '];
const uint8_t modifier = code >> 8;
keycode[0] = code & 0xff;
tud_hid_keyboard_report(REPORT_ID_KEYBOARD, modifier, keycode);
key_when = board_millis(); // remember when we sent the key
key_pressed = true; // remember we pressed a key
} else {
tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode); // release press
key_pressed = false;
const uint8_t keycode = code & 0xff;
send_hid_report(modifier, keycode);
}
}
@ -776,10 +784,10 @@ void hid_task(void)
return;
}
if (pass_paste) { // send password
if (pass_paste < strlen(username)) { // send password
send_hid_report(password[pass_paste++]);
if (pass_paste < strlen(password)) { // send password
send_hid_char(password[pass_paste++]);
} else if (pass_paste == strlen(password)) { // press enter
send_hid_report('\n');
send_hid_char('\n');
pass_paste++;
} else if (pass_paste == (strlen(password) + 1)) { // finished pasting
user_paste = 0;
@ -789,13 +797,13 @@ void hid_task(void)
}
if (user_paste) { // send username
if (user_paste < strlen(username)) { // send username
send_hid_report(username[user_paste++]);
send_hid_char(username[user_paste++]);
} else if (user_paste == strlen(username)) { // switch to password
send_hid_report('\t');
send_hid_char('\t');
user_paste++;
} else if (user_paste == (strlen(username) + 1)) { // start sending password
pass_paste = 0;
send_hid_report(password[pass_paste++]);
send_hid_char(password[pass_paste++]);
user_paste++;
}
}
@ -906,7 +914,7 @@ void tud_hid_report_complete_cb(uint8_t instance, uint8_t const* report, uint16_
if ((report[0] == REPORT_ID_KEYBOARD) && key_pressed) {
//tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL); // release press
send_hid_report(0); // release key
send_hid_report(0, 0); // release key
//return;
}
}