mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-31 05:52:55 +08:00
59 lines
1.5 KiB
C
59 lines
1.5 KiB
C
|
#ifndef KEYBOARD_HELPER_H
|
||
|
#define KEYBAORD_HELPER_H
|
||
|
|
||
|
#include <stdbool.h>
|
||
|
#include <stdint.h>
|
||
|
|
||
|
#include "tusb.h"
|
||
|
|
||
|
// look up new key in previous keys
|
||
|
inline bool find_key_in_report(hid_keyboard_report_t const *p_report, uint8_t keycode)
|
||
|
{
|
||
|
for(uint8_t i = 0; i < 6; i++)
|
||
|
{
|
||
|
if (p_report->keycode[i] == keycode) return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
inline uint8_t keycode_to_ascii(uint8_t modifier, uint8_t keycode)
|
||
|
{
|
||
|
return keycode > 128 ? 0 :
|
||
|
hid_keycode_to_ascii_tbl [keycode][modifier & (KEYBOARD_MODIFIER_LEFTSHIFT | KEYBOARD_MODIFIER_RIGHTSHIFT) ? 1 : 0];
|
||
|
}
|
||
|
|
||
|
void print_kbd_report(hid_keyboard_report_t *prev_report, hid_keyboard_report_t const *new_report)
|
||
|
{
|
||
|
|
||
|
printf("Report: ");
|
||
|
uint8_t c;
|
||
|
|
||
|
// I assume it's possible to have up to 6 keypress events per report?
|
||
|
for (uint8_t i = 0; i < 6; i++)
|
||
|
{
|
||
|
// Check for key presses
|
||
|
if (new_report->keycode[i])
|
||
|
{
|
||
|
// If not in prev report then it is newly pressed
|
||
|
if ( !find_key_in_report(prev_report, new_report->keycode[i]) )
|
||
|
c = keycode_to_ascii(new_report->modifier, new_report->keycode[i]);
|
||
|
printf("press %c ", c);
|
||
|
}
|
||
|
|
||
|
// Check for key depresses (i.e. was present in prev report but not here)
|
||
|
if (prev_report->keycode[i])
|
||
|
{
|
||
|
// If not present in the current report then depressed
|
||
|
if (!find_key_in_report(new_report, prev_report->keycode[i]))
|
||
|
{
|
||
|
c = keycode_to_ascii(prev_report->modifier, prev_report->keycode[i]);
|
||
|
printf("depress %c ", c);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
printf("\n");
|
||
|
}
|
||
|
|
||
|
#endif
|