fixed some led issues, added leds for teensy

seems to still not work for nkro and teensy?
This commit is contained in:
NicoHood 2015-09-19 18:51:16 +02:00
parent f34b500d68
commit 2281210b1c
5 changed files with 50 additions and 16 deletions

View file

@ -11,6 +11,14 @@
https://github.com/NicoHood/HID/wiki/Keyboard-API
*/
// Choose your favourite keyboard
#define USBKEYBOARD Keyboard
//#define USBKEYBOARD NKROKeyboard
//#define USBKEYBOARD TeensyKeyboard
//#define USE_TEENSY_KEYBOARD
#include "HID-Project.h"
const int pinLed = LED_BUILTIN;
@ -21,21 +29,21 @@ void setup() {
pinMode(pinButton, INPUT_PULLUP);
// Sends a clean report to the host. This is important on any Arduino type.
Keyboard.begin();
USBKEYBOARD.begin();
}
void loop() {
// Update Led equal to the caps lock state.
// Keep in mind that on a 16u2 and Arduino Micro HIGH and LOW for TX/RX Leds are inverted.
if (Keyboard.getLeds() & LED_CAPS_LOCK)
if (USBKEYBOARD.getLeds() & LED_CAPS_LOCK)
digitalWrite(pinLed, HIGH);
else
digitalWrite(pinLed, LOW);
// Trigger caps lock manually via button
if (!digitalRead(pinButton)) {
Keyboard.write(KEY_CAPS_LOCK);
USBKEYBOARD.write(KEY_CAPS_LOCK);
// Simple debounce
delay(300);

View file

@ -52,18 +52,17 @@ static const u8 _hidReportDescriptor[] PROGMEM = {
0x81, 0x03, /* INPUT (Cnst,Var,Abs) */
#if defined(HID_KEYBOARD_LEDS_ENABLED)
//TODO remove reserved bytes to add 3 more custom data bits for advanced users?
/* 5 LEDs for num lock etc */
/* 5 LEDs for num lock etc, 3 left for advanced, custom usage */
0x05, 0x08, /* USAGE_PAGE (LEDs) */
0x19, 0x01, /* USAGE_MINIMUM (Num Lock) */
0x29, 0x05, /* USAGE_MAXIMUM (Kana) */
0x95, 0x05, /* REPORT_COUNT (5) */
0x95, 0x08, /* REPORT_COUNT (8) */
0x75, 0x01, /* REPORT_SIZE (1) */
0x91, 0x02, /* OUTPUT (Data,Var,Abs) */
/* Reserved 3 bits */
0x95, 0x01, /* REPORT_COUNT (1) */
0x75, 0x03, /* REPORT_SIZE (3) */
0x91, 0x03, /* OUTPUT (Cnst,Var,Abs) */
//0x95, 0x01, /* REPORT_COUNT (1) */
//0x75, 0x03, /* REPORT_SIZE (3) */
//0x91, 0x03, /* OUTPUT (Cnst,Var,Abs) */
#endif
/* 6 Keyboard keys */

View file

@ -47,18 +47,17 @@ static const u8 _hidReportDescriptor[] PROGMEM = {
0x81, 0x02, /* INPUT (Data,Var,Abs) */
#if defined(HID_KEYBOARD_LEDS_ENABLED)
//TODO remove reserved bytes to add 3 more custom data bits for advanced users?
/* 5 LEDs for num lock etc */
/* 5 LEDs for num lock etc, 3 left for advanced, custom usage */
0x05, 0x08, /* USAGE_PAGE (LEDs) */
0x19, 0x01, /* USAGE_MINIMUM (Num Lock) */
0x29, 0x05, /* USAGE_MAXIMUM (Kana) */
0x95, 0x05, /* REPORT_COUNT (5) */
0x95, 0x08, /* REPORT_COUNT (8) */
0x75, 0x01, /* REPORT_SIZE (1) */
0x91, 0x02, /* OUTPUT (Data,Var,Abs) */
/* Reserved 3 bits */
0x95, 0x01, /* REPORT_COUNT (1) */
0x75, 0x03, /* REPORT_SIZE (3) */
0x91, 0x03, /* OUTPUT (Cnst,Var,Abs) */
//0x95, 0x01, /* REPORT_COUNT (1) */
//0x75, 0x03, /* REPORT_SIZE (3) */
//0x91, 0x03, /* OUTPUT (Cnst,Var,Abs) */
#endif
/* 104 Keys as bitmap */
@ -124,7 +123,7 @@ void NKROKeyboard_::setReportData(const void* data, int len){
leds = *(uint8_t*)data;
}
uint8_t Keyboard_::getLeds(void){
uint8_t NKROKeyboard_::getLeds(void){
return leds;
}
#endif

View file

@ -29,6 +29,18 @@ HIDDevice((uint8_t*)teensykeyboard_hid_report_desc, sizeof(teensykeyboard_hid_re
// HID Descriptor is appended via the inherited HIDDevice class
}
#if defined(HID_KEYBOARD_LEDS_ENABLED)
void usb_keyboard_class::setReportData(const void* data, int len){
// Save led state
if(len == 1)
leds = *(uint8_t*)data;
}
uint8_t usb_keyboard_class::getLeds(void){
return leds;
}
#endif
// Step #1, decode UTF8 to Unicode code points
//
size_t usb_keyboard_class::write(uint8_t c)

View file

@ -61,6 +61,7 @@ static const uint8_t PROGMEM teensykeyboard_hid_report_desc[] = {
0x09, 0xB6, // Usage (Scan Previous Track),
0x09, 0xB7, // Usage (Stop),
0x09, 0xB8, // Usage (Eject),
// Note: Teensy ledreport was not modified to 8 bit, nor left out when leds are deactivated
0x81, 0x02, // Input (Data, Variable, Absolute), ;Media keys
0x95, 0x05, // Report Count (5),
0x75, 0x01, // Report Size (1),
@ -82,10 +83,20 @@ static const uint8_t PROGMEM teensykeyboard_hid_report_desc[] = {
0xc0 // End Collection
};
// Keyboard Leds
#define LED_NUM_LOCK 0x01
#define LED_CAPS_LOCK 0x02
#define LED_SCROLL_LOCK 0x04
class usb_keyboard_class : public Print, private HIDDevice
{
public:
usb_keyboard_class(void);
#if defined(HID_KEYBOARD_LEDS_ENABLED)
uint8_t getLeds(void);
#endif
void begin(void) { }
void end(void) { }
virtual size_t write(uint8_t);
@ -115,6 +126,11 @@ class usb_keyboard_class : public Print, private HIDDevice
uint8_t utf8_state;
uint16_t unicode_wchar;
uint8_t keyboard_report_data[8];
#if defined(HID_KEYBOARD_LEDS_ENABLED)
virtual void setReportData(const void* data, int len);
uint8_t leds;
#endif
};
extern usb_keyboard_class TeensyKeyboard;