From ef33241ca37289d72f0d57afbd376da745771850 Mon Sep 17 00:00:00 2001 From: NicoHood Date: Tue, 8 Sep 2015 17:31:29 +0200 Subject: [PATCH] Different inclusion of Teensy Keyboard Moved Report IDs to the HID-Project.h file --- src/Consumer.h | 4 +-- src/Gamepad.h | 4 +-- src/HID-Project.h | 48 ++++++++++++++++++++++++++++- src/ImprovedKeyboard.cpp | 2 +- src/ImprovedKeyboard.h | 4 +-- src/Keylayout_German.cpp | 2 +- src/System.h | 4 +-- src/TeensyKeyboard.cpp | 66 +++++++++++++++++++++++++++++++++++++++- src/TeensyKeyboard.h | 7 ++--- src/TeensyKeylayouts.c | 66 ---------------------------------------- src/TeensyKeylayouts.h | 17 +++++++++-- 11 files changed, 134 insertions(+), 90 deletions(-) delete mode 100644 src/TeensyKeylayouts.c diff --git a/src/Consumer.h b/src/Consumer.h index 041660a..377a59f 100644 --- a/src/Consumer.h +++ b/src/Consumer.h @@ -35,9 +35,7 @@ THE SOFTWARE. // Consumer //================================================================================ -#ifndef HID_REPORTID_CONSUMERCONTROL -#define HID_REPORTID_CONSUMERCONTROL 4 -#endif +#include "HID-Project.h" // Media key definitions, see official USB docs for more #define MEDIA_FAST_FORWARD 0xB3 diff --git a/src/Gamepad.h b/src/Gamepad.h index ecd478d..70881a3 100644 --- a/src/Gamepad.h +++ b/src/Gamepad.h @@ -35,9 +35,7 @@ THE SOFTWARE. // Gamepad //================================================================================ -#ifndef HID_REPORTID_GAMEPAD -#define HID_REPORTID_GAMEPAD 6 -#endif +#include "HID-Project.h" // Dpad directions #define GAMEPAD_DPAD_CENTERED 0 diff --git a/src/HID-Project.h b/src/HID-Project.h index 0287128..e9dadcd 100644 --- a/src/HID-Project.h +++ b/src/HID-Project.h @@ -33,12 +33,58 @@ THE SOFTWARE. #error "This is not an USB AVR or you use an old version of the IDE." #endif +//#define LAYOUT_US_ENGLISH +//#define LAYOUT_CANADIAN_FRENCH +//#define LAYOUT_CANADIAN_MULTILINGUAL +//#define LAYOUT_DANISH +//#define LAYOUT_FINNISH +//#define LAYOUT_FRENCH +//#define LAYOUT_FRENCH_BELGIAN +//#define LAYOUT_FRENCH_SWISS +//#define LAYOUT_GERMAN +//#define LAYOUT_GERMAN_MAC +//#define LAYOUT_GERMAN_SWISS +//#define LAYOUT_ICELANDIC +//#define LAYOUT_IRISH +//#define LAYOUT_ITALIAN +//#define LAYOUT_NORWEGIAN +//#define LAYOUT_PORTUGUESE +//#define LAYOUT_PORTUGUESE_BRAZILIAN +//#define LAYOUT_SPANISH +//#define LAYOUT_SPANISH_LATIN_AMERICA +//#define LAYOUT_SWEDISH +//#define LAYOUT_TURKISH +//#define LAYOUT_UNITED_KINGDOM +//#define LAYOUT_US_INTERNATIONAL + +#ifndef HID_REPORTID_KEYBOARD +#define HID_REPORTID_KEYBOARD 2 +#endif + +#ifndef HID_REPORTID_CONSUMERCONTROL +#define HID_REPORTID_CONSUMERCONTROL 4 +#endif + +#ifndef HID_REPORTID_SYSTEMCONTROL +#define HID_REPORTID_SYSTEMCONTROL 5 +#endif + +#ifndef HID_REPORTID_GAMEPAD +#define HID_REPORTID_GAMEPAD 6 +#endif + +#ifndef HID_REPORTID_TEENSY_KEYBOARD +#define HID_REPORTID_TEENSY_KEYBOARD 9 +#endif + // Include all HID libraries (.a linkage required to work) properly -//#include "ImprovedKeyboard.h" +#include "ImprovedKeyboard.h" #include "AbsoluteMouse.h" #include "Consumer.h" #include "Gamepad.h" #include "System.h" // Include Teensy HID afterwards to overwrite key definitions if used +#ifdef USE_TEENSY_KEYBOARD #include "TeensyKeyboard.h" +#endif diff --git a/src/ImprovedKeyboard.cpp b/src/ImprovedKeyboard.cpp index 3b4f926..2b512e4 100644 --- a/src/ImprovedKeyboard.cpp +++ b/src/ImprovedKeyboard.cpp @@ -35,7 +35,7 @@ static const u8 _hidReportDescriptor[] PROGMEM = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) // 47 0x09, 0x06, // USAGE (Keyboard) 0xa1, 0x01, // COLLECTION (Application) - 0x85, HID_REPORTID_KEYBOARD, // REPORT_ID (2) + 0x85, HID_REPORTID_KEYBOARD, // REPORT_ID 0x05, 0x07, // USAGE_PAGE (Keyboard) 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) diff --git a/src/ImprovedKeyboard.h b/src/ImprovedKeyboard.h index 1ba7030..659be47 100644 --- a/src/ImprovedKeyboard.h +++ b/src/ImprovedKeyboard.h @@ -36,9 +36,7 @@ THE SOFTWARE. //================================================================================ // Keyboard -#ifndef HID_REPORTID_KEYBOARD -#define HID_REPORTID_KEYBOARD 2 -#endif +#include "HID-Project.h" #define KEY_PRINT 0xCE #define KEY_NUM_LOCK 0xDB diff --git a/src/Keylayout_German.cpp b/src/Keylayout_German.cpp index 65ef07e..0b3bb52 100644 --- a/src/Keylayout_German.cpp +++ b/src/Keylayout_German.cpp @@ -156,7 +156,7 @@ static const uint8_t _asciimap[128] PROGMEM = 0x35|SHIFT, // ~ 0 // DEL }; -Keyboard_ Keyboard; + uint8_t Keyboard_::getKeycode(uint8_t k){ return pgm_read_byte(_asciimap + k); } diff --git a/src/System.h b/src/System.h index fbe42c1..8a778ae 100644 --- a/src/System.h +++ b/src/System.h @@ -35,9 +35,7 @@ THE SOFTWARE. // System //================================================================================ -#ifndef HID_REPORTID_SYSTEMCONTROL -#define HID_REPORTID_SYSTEMCONTROL 5 -#endif +#include "HID-Project.h" #define SYSTEM_POWER_DOWN 0x81 #define SYSTEM_SLEEP 0x82 diff --git a/src/TeensyKeyboard.cpp b/src/TeensyKeyboard.cpp index 7700350..46d7e48 100644 --- a/src/TeensyKeyboard.cpp +++ b/src/TeensyKeyboard.cpp @@ -256,7 +256,7 @@ void usb_keyboard_class::set_media(uint8_t c) void usb_keyboard_class::send_now(void) { - HID.SendReport(HID_REPORTID_KEYBOARD,keyboard_report_data,sizeof(keyboard_report_data)); + HID.SendReport(HID_REPORTID_TEENSY_KEYBOARD,keyboard_report_data,sizeof(keyboard_report_data)); } @@ -386,3 +386,67 @@ void usb_keyboard_class::releaseAll(void) } usb_keyboard_class TeensyKeyboard = usb_keyboard_class(); + +#include +#include + +#ifdef M +#undef M +#endif +#define M(n) ((n) & 0x3FFF) + +const KEYCODE_TYPE PROGMEM keycodes_ascii[] = { + M(ASCII_20), M(ASCII_21), M(ASCII_22), M(ASCII_23), + M(ASCII_24), M(ASCII_25), M(ASCII_26), M(ASCII_27), + M(ASCII_28), M(ASCII_29), M(ASCII_2A), M(ASCII_2B), + M(ASCII_2C), M(ASCII_2D), M(ASCII_2E), M(ASCII_2F), + M(ASCII_30), M(ASCII_31), M(ASCII_32), M(ASCII_33), + M(ASCII_34), M(ASCII_35), M(ASCII_36), M(ASCII_37), + M(ASCII_38), M(ASCII_39), M(ASCII_3A), M(ASCII_3B), + M(ASCII_3C), M(ASCII_3D), M(ASCII_3E), M(ASCII_3F), + M(ASCII_40), M(ASCII_41), M(ASCII_42), M(ASCII_43), + M(ASCII_44), M(ASCII_45), M(ASCII_46), M(ASCII_47), + M(ASCII_48), M(ASCII_49), M(ASCII_4A), M(ASCII_4B), + M(ASCII_4C), M(ASCII_4D), M(ASCII_4E), M(ASCII_4F), + M(ASCII_50), M(ASCII_51), M(ASCII_52), M(ASCII_53), + M(ASCII_54), M(ASCII_55), M(ASCII_56), M(ASCII_57), + M(ASCII_58), M(ASCII_59), M(ASCII_5A), M(ASCII_5B), + M(ASCII_5C), M(ASCII_5D), M(ASCII_5E), M(ASCII_5F), + M(ASCII_60), M(ASCII_61), M(ASCII_62), M(ASCII_63), + M(ASCII_64), M(ASCII_65), M(ASCII_66), M(ASCII_67), + M(ASCII_68), M(ASCII_69), M(ASCII_6A), M(ASCII_6B), + M(ASCII_6C), M(ASCII_6D), M(ASCII_6E), M(ASCII_6F), + M(ASCII_70), M(ASCII_71), M(ASCII_72), M(ASCII_73), + M(ASCII_74), M(ASCII_75), M(ASCII_76), M(ASCII_77), + M(ASCII_78), M(ASCII_79), M(ASCII_7A), M(ASCII_7B), + M(ASCII_7C), M(ASCII_7D), M(ASCII_7E), M(ASCII_7F) +}; + +#ifdef ISO_8859_1_A0 +const KEYCODE_TYPE PROGMEM keycodes_iso_8859_1[] = { + M(ISO_8859_1_A0), M(ISO_8859_1_A1), M(ISO_8859_1_A2), M(ISO_8859_1_A3), + M(ISO_8859_1_A4), M(ISO_8859_1_A5), M(ISO_8859_1_A6), M(ISO_8859_1_A7), + M(ISO_8859_1_A8), M(ISO_8859_1_A9), M(ISO_8859_1_AA), M(ISO_8859_1_AB), + M(ISO_8859_1_AC), M(ISO_8859_1_AD), M(ISO_8859_1_AE), M(ISO_8859_1_AF), + M(ISO_8859_1_B0), M(ISO_8859_1_B1), M(ISO_8859_1_B2), M(ISO_8859_1_B3), + M(ISO_8859_1_B4), M(ISO_8859_1_B5), M(ISO_8859_1_B6), M(ISO_8859_1_B7), + M(ISO_8859_1_B8), M(ISO_8859_1_B9), M(ISO_8859_1_BA), M(ISO_8859_1_BB), + M(ISO_8859_1_BC), M(ISO_8859_1_BD), M(ISO_8859_1_BE), M(ISO_8859_1_BF), + M(ISO_8859_1_C0), M(ISO_8859_1_C1), M(ISO_8859_1_C2), M(ISO_8859_1_C3), + M(ISO_8859_1_C4), M(ISO_8859_1_C5), M(ISO_8859_1_C6), M(ISO_8859_1_C7), + M(ISO_8859_1_C8), M(ISO_8859_1_C9), M(ISO_8859_1_CA), M(ISO_8859_1_CB), + M(ISO_8859_1_CC), M(ISO_8859_1_CD), M(ISO_8859_1_CE), M(ISO_8859_1_CF), + M(ISO_8859_1_D0), M(ISO_8859_1_D1), M(ISO_8859_1_D2), M(ISO_8859_1_D3), + M(ISO_8859_1_D4), M(ISO_8859_1_D5), M(ISO_8859_1_D6), M(ISO_8859_1_D7), + M(ISO_8859_1_D8), M(ISO_8859_1_D9), M(ISO_8859_1_DA), M(ISO_8859_1_DB), + M(ISO_8859_1_DC), M(ISO_8859_1_DD), M(ISO_8859_1_DE), M(ISO_8859_1_DF), + M(ISO_8859_1_E0), M(ISO_8859_1_E1), M(ISO_8859_1_E2), M(ISO_8859_1_E3), + M(ISO_8859_1_E4), M(ISO_8859_1_E5), M(ISO_8859_1_E6), M(ISO_8859_1_E7), + M(ISO_8859_1_E8), M(ISO_8859_1_E9), M(ISO_8859_1_EA), M(ISO_8859_1_EB), + M(ISO_8859_1_EC), M(ISO_8859_1_ED), M(ISO_8859_1_EE), M(ISO_8859_1_EF), + M(ISO_8859_1_F0), M(ISO_8859_1_F1), M(ISO_8859_1_F2), M(ISO_8859_1_F3), + M(ISO_8859_1_F4), M(ISO_8859_1_F5), M(ISO_8859_1_F6), M(ISO_8859_1_F7), + M(ISO_8859_1_F8), M(ISO_8859_1_F9), M(ISO_8859_1_FA), M(ISO_8859_1_FB), + M(ISO_8859_1_FC), M(ISO_8859_1_FD), M(ISO_8859_1_FE), M(ISO_8859_1_FF) +}; +#endif // ISO_8859_1_A0 diff --git a/src/TeensyKeyboard.h b/src/TeensyKeyboard.h index bc02f6c..639e332 100644 --- a/src/TeensyKeyboard.h +++ b/src/TeensyKeyboard.h @@ -31,18 +31,15 @@ #else +#include "HID-Project.h" #include "TeensyKeylayouts.h" -#ifndef HID_REPORTID_KEYBOARD -#define HID_REPORTID_KEYBOARD 2 -#endif - // Keyboard Protocol 1, HID 1.11 spec, Appendix B, page 59-60 static const uint8_t PROGMEM keyboard_hid_report_desc[] = { 0x05, 0x01, // Usage Page (Generic Desktop), 0x09, 0x06, // Usage (Keyboard), 0xA1, 0x01, // Collection (Application), - 0x85, HID_REPORTID_KEYBOARD, // REPORT_ID (2) + 0x85, HID_REPORTID_TEENSY_KEYBOARD, // REPORT_ID 0x75, 0x01, // Report Size (1), 0x95, 0x08, // Report Count (8), 0x05, 0x07, // Usage Page (Key Codes), diff --git a/src/TeensyKeylayouts.c b/src/TeensyKeylayouts.c deleted file mode 100644 index 9ff3b67..0000000 --- a/src/TeensyKeylayouts.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include - -#include "TeensyKeylayouts.h" - -#ifdef M -#undef M -#endif -#define M(n) ((n) & 0x3FFF) - -const KEYCODE_TYPE PROGMEM keycodes_ascii[] = { - M(ASCII_20), M(ASCII_21), M(ASCII_22), M(ASCII_23), - M(ASCII_24), M(ASCII_25), M(ASCII_26), M(ASCII_27), - M(ASCII_28), M(ASCII_29), M(ASCII_2A), M(ASCII_2B), - M(ASCII_2C), M(ASCII_2D), M(ASCII_2E), M(ASCII_2F), - M(ASCII_30), M(ASCII_31), M(ASCII_32), M(ASCII_33), - M(ASCII_34), M(ASCII_35), M(ASCII_36), M(ASCII_37), - M(ASCII_38), M(ASCII_39), M(ASCII_3A), M(ASCII_3B), - M(ASCII_3C), M(ASCII_3D), M(ASCII_3E), M(ASCII_3F), - M(ASCII_40), M(ASCII_41), M(ASCII_42), M(ASCII_43), - M(ASCII_44), M(ASCII_45), M(ASCII_46), M(ASCII_47), - M(ASCII_48), M(ASCII_49), M(ASCII_4A), M(ASCII_4B), - M(ASCII_4C), M(ASCII_4D), M(ASCII_4E), M(ASCII_4F), - M(ASCII_50), M(ASCII_51), M(ASCII_52), M(ASCII_53), - M(ASCII_54), M(ASCII_55), M(ASCII_56), M(ASCII_57), - M(ASCII_58), M(ASCII_59), M(ASCII_5A), M(ASCII_5B), - M(ASCII_5C), M(ASCII_5D), M(ASCII_5E), M(ASCII_5F), - M(ASCII_60), M(ASCII_61), M(ASCII_62), M(ASCII_63), - M(ASCII_64), M(ASCII_65), M(ASCII_66), M(ASCII_67), - M(ASCII_68), M(ASCII_69), M(ASCII_6A), M(ASCII_6B), - M(ASCII_6C), M(ASCII_6D), M(ASCII_6E), M(ASCII_6F), - M(ASCII_70), M(ASCII_71), M(ASCII_72), M(ASCII_73), - M(ASCII_74), M(ASCII_75), M(ASCII_76), M(ASCII_77), - M(ASCII_78), M(ASCII_79), M(ASCII_7A), M(ASCII_7B), - M(ASCII_7C), M(ASCII_7D), M(ASCII_7E), M(ASCII_7F) -}; - -#ifdef ISO_8859_1_A0 -const KEYCODE_TYPE PROGMEM keycodes_iso_8859_1[] = { - M(ISO_8859_1_A0), M(ISO_8859_1_A1), M(ISO_8859_1_A2), M(ISO_8859_1_A3), - M(ISO_8859_1_A4), M(ISO_8859_1_A5), M(ISO_8859_1_A6), M(ISO_8859_1_A7), - M(ISO_8859_1_A8), M(ISO_8859_1_A9), M(ISO_8859_1_AA), M(ISO_8859_1_AB), - M(ISO_8859_1_AC), M(ISO_8859_1_AD), M(ISO_8859_1_AE), M(ISO_8859_1_AF), - M(ISO_8859_1_B0), M(ISO_8859_1_B1), M(ISO_8859_1_B2), M(ISO_8859_1_B3), - M(ISO_8859_1_B4), M(ISO_8859_1_B5), M(ISO_8859_1_B6), M(ISO_8859_1_B7), - M(ISO_8859_1_B8), M(ISO_8859_1_B9), M(ISO_8859_1_BA), M(ISO_8859_1_BB), - M(ISO_8859_1_BC), M(ISO_8859_1_BD), M(ISO_8859_1_BE), M(ISO_8859_1_BF), - M(ISO_8859_1_C0), M(ISO_8859_1_C1), M(ISO_8859_1_C2), M(ISO_8859_1_C3), - M(ISO_8859_1_C4), M(ISO_8859_1_C5), M(ISO_8859_1_C6), M(ISO_8859_1_C7), - M(ISO_8859_1_C8), M(ISO_8859_1_C9), M(ISO_8859_1_CA), M(ISO_8859_1_CB), - M(ISO_8859_1_CC), M(ISO_8859_1_CD), M(ISO_8859_1_CE), M(ISO_8859_1_CF), - M(ISO_8859_1_D0), M(ISO_8859_1_D1), M(ISO_8859_1_D2), M(ISO_8859_1_D3), - M(ISO_8859_1_D4), M(ISO_8859_1_D5), M(ISO_8859_1_D6), M(ISO_8859_1_D7), - M(ISO_8859_1_D8), M(ISO_8859_1_D9), M(ISO_8859_1_DA), M(ISO_8859_1_DB), - M(ISO_8859_1_DC), M(ISO_8859_1_DD), M(ISO_8859_1_DE), M(ISO_8859_1_DF), - M(ISO_8859_1_E0), M(ISO_8859_1_E1), M(ISO_8859_1_E2), M(ISO_8859_1_E3), - M(ISO_8859_1_E4), M(ISO_8859_1_E5), M(ISO_8859_1_E6), M(ISO_8859_1_E7), - M(ISO_8859_1_E8), M(ISO_8859_1_E9), M(ISO_8859_1_EA), M(ISO_8859_1_EB), - M(ISO_8859_1_EC), M(ISO_8859_1_ED), M(ISO_8859_1_EE), M(ISO_8859_1_EF), - M(ISO_8859_1_F0), M(ISO_8859_1_F1), M(ISO_8859_1_F2), M(ISO_8859_1_F3), - M(ISO_8859_1_F4), M(ISO_8859_1_F5), M(ISO_8859_1_F6), M(ISO_8859_1_F7), - M(ISO_8859_1_F8), M(ISO_8859_1_F9), M(ISO_8859_1_FA), M(ISO_8859_1_FB), - M(ISO_8859_1_FC), M(ISO_8859_1_FD), M(ISO_8859_1_FE), M(ISO_8859_1_FF) -}; -#endif // ISO_8859_1_A0 - diff --git a/src/TeensyKeylayouts.h b/src/TeensyKeylayouts.h index 58ce9b2..10bf602 100644 --- a/src/TeensyKeylayouts.h +++ b/src/TeensyKeylayouts.h @@ -47,7 +47,7 @@ extern "C"{ //#define LAYOUT_FRENCH //#define LAYOUT_FRENCH_BELGIAN //#define LAYOUT_FRENCH_SWISS -#define LAYOUT_GERMAN +//#define LAYOUT_GERMAN //#define LAYOUT_GERMAN_MAC //#define LAYOUT_GERMAN_SWISS //#define LAYOUT_ICELANDIC @@ -60,10 +60,21 @@ extern "C"{ //#define LAYOUT_SPANISH_LATIN_AMERICA //#define LAYOUT_SWEDISH //#define LAYOUT_TURKISH -//#define LAYOUT_UNITED_KINGDOM +//#define LAYOUT_UNITED_KINGDOM //#define LAYOUT_US_INTERNATIONAL - +// Default US keyboard layout +#if !defined(LAYOUT_CANADIAN_FRENCH) && !defined(LAYOUT_CANADIAN_MULTILINGUAL) \ +&& !defined(LAYOUT_DANISH) && !defined(LAYOUT_FINNISH) && !defined(LAYOUT_FRENCH) \ +&& !defined(LAYOUT_FRENCH_BELGIAN) && !defined(LAYOUT_FRENCH_SWISS) && !defined(LAYOUT_GERMAN) \ +&& !defined(LAYOUT_GERMAN_MAC) && !defined(LAYOUT_GERMAN_SWISS) && !defined(LAYOUT_ICELANDIC) \ +&& !defined(LAYOUT_IRISH) && !defined(LAYOUT_ITALIAN) && !defined(LAYOUT_NORWEGIAN) \ +&& !defined(LAYOUT_PORTUGUESE) && !defined(LAYOUT_PORTUGUESE_BRAZILIAN) \ +&& !defined(LAYOUT_SPANISH) && !defined(LAYOUT_SPANISH_LATIN_AMERICA) \ +&& !defined(LAYOUT_SWEDISH) && !defined(LAYOUT_TURKISH) && !defined(LAYOUT_UNITED_KINGDOM) \ +&& !defined(LAYOUT_US_INTERNATIONAL) && !defined(LAYOUT_US_ENGLISH) +#define LAYOUT_US_ENGLISH +#endif // http://en.wikipedia.org/wiki/Keyboard_layout