fix send tab and enter
This commit is contained in:
parent
16af15e47d
commit
0c9ae4bbfd
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue