Improved Keyboard API a bit
This commit is contained in:
parent
82ac20e3a0
commit
bc5a28b8a7
8 changed files with 45 additions and 29 deletions
|
|
@ -128,6 +128,10 @@ enum KeyboardKeycode : uint8_t {
|
|||
KEY_LEFT_ARROW = 0x50,
|
||||
KEY_DOWN_ARROW = 0x51,
|
||||
KEY_UP_ARROW = 0x52,
|
||||
KEY_RIGHT = 0x4F, // Alias
|
||||
KEY_LEFT = 0x50, // Alias
|
||||
KEY_DOWN = 0x51, // Alias
|
||||
KEY_UP = 0x52, // Alias
|
||||
KEY_NUM_LOCK = 0x53,
|
||||
KEYPAD_DIVIDE = 0x54,
|
||||
KEYPAD_MULTIPLY = 0x55,
|
||||
|
|
|
|||
|
|
@ -72,13 +72,13 @@ public:
|
|||
inline size_t remove(KeyboardModifier k);
|
||||
inline size_t remove(ConsumerKeycode k);
|
||||
|
||||
inline void releaseAll(void);
|
||||
inline void removeAll(void);
|
||||
inline void send_now(void);
|
||||
inline size_t releaseAll(void);
|
||||
inline size_t removeAll(void);
|
||||
inline int send(void);
|
||||
inline void wakeupHost(void);
|
||||
|
||||
// Sending is public in the base class for advanced users.
|
||||
virtual void SendReport(void* data, int length) = 0;
|
||||
virtual int SendReport(void* data, int length) = 0;
|
||||
|
||||
protected:
|
||||
HID_KeyboardReport_Data_t _keyReport;
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ size_t KeyboardAPI::press(uint8_t k)
|
|||
// Press key and send report to host
|
||||
auto ret = add(k);
|
||||
if(ret){
|
||||
send_now();
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -96,7 +96,7 @@ size_t KeyboardAPI::press(KeyboardKeycode k)
|
|||
// Press key and send report to host
|
||||
auto ret = add(k);
|
||||
if(ret){
|
||||
send_now();
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -107,7 +107,7 @@ size_t KeyboardAPI::press(KeyboardModifier k)
|
|||
// Press modifier key and send report to host
|
||||
auto ret = add(k);
|
||||
if(ret){
|
||||
send_now();
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -118,7 +118,7 @@ size_t KeyboardAPI::press(ConsumerKeycode k)
|
|||
// Press key and send report to host
|
||||
auto ret = add(k);
|
||||
if(ret){
|
||||
send_now();
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -174,8 +174,8 @@ size_t KeyboardAPI::add(KeyboardModifier k)
|
|||
|
||||
size_t KeyboardAPI::add(ConsumerKeycode k)
|
||||
{
|
||||
// No 2 byte keys are supported
|
||||
if(k > 0xFF){
|
||||
// No 2 byte keys are supported
|
||||
setWriteError();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -192,7 +192,7 @@ size_t KeyboardAPI::release(uint8_t k)
|
|||
// Release key and send report to host
|
||||
auto ret = remove(k);
|
||||
if(ret){
|
||||
send_now();
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -203,7 +203,7 @@ size_t KeyboardAPI::release(KeyboardKeycode k)
|
|||
// Release key and send report to host
|
||||
auto ret = remove(k);
|
||||
if(ret){
|
||||
send_now();
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -214,7 +214,7 @@ size_t KeyboardAPI::release(KeyboardModifier k)
|
|||
// Release modifier key and send report to host
|
||||
auto ret = remove(k);
|
||||
if(ret){
|
||||
send_now();
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -225,7 +225,7 @@ size_t KeyboardAPI::release(ConsumerKeycode k)
|
|||
// Release key and send report to host
|
||||
auto ret = remove(k);
|
||||
if(ret){
|
||||
send_now();
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -281,8 +281,8 @@ size_t KeyboardAPI::remove(KeyboardModifier k)
|
|||
|
||||
size_t KeyboardAPI::remove(ConsumerKeycode k)
|
||||
{
|
||||
// No 2 byte keys are supported
|
||||
if(k > 0xFF){
|
||||
// No 2 byte keys are supported
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -293,23 +293,37 @@ size_t KeyboardAPI::remove(ConsumerKeycode k)
|
|||
}
|
||||
|
||||
|
||||
void KeyboardAPI::releaseAll(void)
|
||||
size_t KeyboardAPI::releaseAll(void)
|
||||
{
|
||||
// Release all keys
|
||||
removeAll();
|
||||
send_now();
|
||||
auto ret = removeAll();
|
||||
if(ret){
|
||||
send();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void KeyboardAPI::removeAll(void)
|
||||
size_t KeyboardAPI::removeAll(void)
|
||||
{
|
||||
// Release all keys
|
||||
memset(&_keyReport, 0x00, sizeof(_keyReport));
|
||||
uint8_t ret = 0;
|
||||
for (uint8_t i = 0; i < sizeof(_keyReport.keys); i++)
|
||||
{
|
||||
// Is a key in the list or did we found an empty slot?
|
||||
if(_keyReport.keys[i]){
|
||||
ret++;
|
||||
}
|
||||
|
||||
_keyReport.keys[i] = KEY_RESERVED;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void KeyboardAPI::send_now(void){
|
||||
SendReport(&_keyReport, sizeof(_keyReport));
|
||||
int KeyboardAPI::send(void){
|
||||
// TODO set write error if usb send fails/disconnected?
|
||||
return SendReport(&_keyReport, sizeof(_keyReport));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -550,8 +550,6 @@ extern "C"{
|
|||
#define SHIFT_MASK 0x0040
|
||||
#define ALTGR_MASK 0x0080
|
||||
#define DEADKEYS_MASK 0x0700
|
||||
#define SHIFT_MASK 0x0100
|
||||
#define ALTGR_MASK 0x0200
|
||||
#define CIRCUMFLEX_BITS 0x0300
|
||||
#define ACUTE_ACCENT_BITS 0x0400
|
||||
#define GRAVE_ACCENT_BITS 0x0500
|
||||
|
|
|
|||
|
|
@ -70,9 +70,9 @@ Keyboard_::Keyboard_(void)
|
|||
HID().AppendDescriptor(&node);
|
||||
}
|
||||
|
||||
void Keyboard_::SendReport(void* data, int length)
|
||||
int Keyboard_::SendReport(void* data, int length)
|
||||
{
|
||||
HID().SendReport(HID_REPORTID_KEYBOARD, data, length);
|
||||
return HID().SendReport(HID_REPORTID_KEYBOARD, data, length);
|
||||
}
|
||||
|
||||
Keyboard_ Keyboard;
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ public:
|
|||
Keyboard_(void);
|
||||
|
||||
protected:
|
||||
virtual inline void SendReport(void* data, int length) override;
|
||||
virtual inline int SendReport(void* data, int length) override;
|
||||
};
|
||||
extern Keyboard_ Keyboard;
|
||||
|
||||
|
|
|
|||
|
|
@ -156,8 +156,8 @@ uint8_t BootKeyboard_::getProtocol(void){
|
|||
return protocol;
|
||||
}
|
||||
|
||||
void BootKeyboard_::SendReport(void* data, int length){
|
||||
USB_Send(pluggedEndpoint | TRANSFER_RELEASE, data, length);
|
||||
int BootKeyboard_::SendReport(void* data, int length){
|
||||
return USB_Send(pluggedEndpoint | TRANSFER_RELEASE, data, length);
|
||||
}
|
||||
|
||||
BootKeyboard_ BootKeyboard;
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ protected:
|
|||
|
||||
uint8_t leds;
|
||||
|
||||
virtual void SendReport(void* data, int length) override;
|
||||
virtual int SendReport(void* data, int length) override;
|
||||
};
|
||||
extern BootKeyboard_ BootKeyboard;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue