From a0edeebc61db9e47d067f0d87459227baa7cd153 Mon Sep 17 00:00:00 2001 From: NicoHood Date: Sun, 20 Sep 2015 14:05:08 +0200 Subject: [PATCH] Send the whole data for an out report RawHID does not add the reportID again, so we need to see the first byte there For the keyboard led you can just ignore this byte --- src/ImprovedKeyboard.cpp | 4 ++-- src/ImprovedKeyboard.h | 1 - src/NKROKeyboard.cpp | 4 ++-- src/PluggableHID/HID.cpp | 12 +++--------- src/TeensyKeyboard.cpp | 4 ++-- 5 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/ImprovedKeyboard.cpp b/src/ImprovedKeyboard.cpp index 4ddae0c..df912d4 100644 --- a/src/ImprovedKeyboard.cpp +++ b/src/ImprovedKeyboard.cpp @@ -118,8 +118,8 @@ void Keyboard_::send_now(void){ #if defined(HID_KEYBOARD_LEDS_ENABLED) void Keyboard_::setReportData(const void* data, uint8_t len){ // Save led state - if(len == 1) - leds = *(uint8_t*)data; + if(len == 2) + leds = *(uint8_t*)(data+1); } uint8_t Keyboard_::getLeds(void){ diff --git a/src/ImprovedKeyboard.h b/src/ImprovedKeyboard.h index 8b94c34..496b9a6 100644 --- a/src/ImprovedKeyboard.h +++ b/src/ImprovedKeyboard.h @@ -38,7 +38,6 @@ THE SOFTWARE. #include "HID-Project.h" #include "ImprovedKeylayouts.h" -// Low level key report: up to 6 keys and shift, ctrl etc at once typedef union{ // Low level key report: up to 6 keys and shift, ctrl etc at once uint8_t whole8[]; diff --git a/src/NKROKeyboard.cpp b/src/NKROKeyboard.cpp index 0f9ae2c..83a72f7 100644 --- a/src/NKROKeyboard.cpp +++ b/src/NKROKeyboard.cpp @@ -123,8 +123,8 @@ void NKROKeyboard_::send_now(void){ #if defined(HID_KEYBOARD_LEDS_ENABLED) void NKROKeyboard_::setReportData(const void* data, uint8_t len){ // Save led state - if(len == 1) - leds = *(uint8_t*)data; + if(len == 2) + leds = *(uint8_t*)(data+1); } uint8_t NKROKeyboard_::getLeds(void){ diff --git a/src/PluggableHID/HID.cpp b/src/PluggableHID/HID.cpp index d91ca56..6291416 100644 --- a/src/PluggableHID/HID.cpp +++ b/src/PluggableHID/HID.cpp @@ -171,16 +171,10 @@ bool HID_::HID_Setup(USBSetup& setup, u8 i) uint8_t length = setup.wLength; uint8_t data[length]; USB_RecvControl(data, length); - - // Skip report ID data, if any - if(ID){ - current->setReportData(data+1, length-1); - } - // TODO test this case - else{ - current->setReportData(data, length); - } + // Data may contain the report ID again (Keyboard), maybe not (RawHID) + current->setReportData(data, length); + // Dont search any further break; } diff --git a/src/TeensyKeyboard.cpp b/src/TeensyKeyboard.cpp index 5af384e..992df32 100644 --- a/src/TeensyKeyboard.cpp +++ b/src/TeensyKeyboard.cpp @@ -32,8 +32,8 @@ HIDDevice((uint8_t*)teensykeyboard_hid_report_desc, sizeof(teensykeyboard_hid_re #if defined(HID_KEYBOARD_LEDS_ENABLED) void usb_keyboard_class::setReportData(const void* data, uint8_t len){ // Save led state - if(len == 1) - leds = *(uint8_t*)data; + if(len == 2) + leds = *(uint8_t*)(data+1); } uint8_t usb_keyboard_class::getLeds(void){