From e5d28296d2785ef3f16ac4a8dc27edc63f2e6ef6 Mon Sep 17 00:00:00 2001 From: Nico Date: Sat, 3 Jan 2015 19:00:08 +0100 Subject: [PATCH] Easy USB-Core selection HoodLoader2 needs an update as well. --- Readme.md | 50 +++--- avr/boards.txt | 152 +++++++++++------- avr/cores/hid/USB-Core/HID.h | 50 +++++- avr/platform.txt | 3 +- .../pins_arduino.h} | 46 +++--- avr/variants/leonardo_gamepad/pins_arduino.h | 45 ++++++ avr/variants/leonardo_hid/pins_arduino.h | 25 ++- avr/variants/leonardo_no_usb/pins_arduino.h | 28 ++++ avr/variants/micro_custom/pins_arduino.h | 64 ++++++++ avr/variants/micro_gamepad/pins_arduino.h | 45 ++++++ avr/variants/micro_hid/pins_arduino.h | 25 ++- avr/variants/micro_no_usb/pins_arduino.h | 28 ++++ board.png | Bin 0 -> 27786 bytes usb-core.png | Bin 0 -> 18162 bytes 14 files changed, 450 insertions(+), 111 deletions(-) rename avr/variants/{hid_descriptors/hid_descriptors.h => leonardo_custom/pins_arduino.h} (64%) create mode 100644 avr/variants/leonardo_gamepad/pins_arduino.h create mode 100644 avr/variants/leonardo_no_usb/pins_arduino.h create mode 100644 avr/variants/micro_custom/pins_arduino.h create mode 100644 avr/variants/micro_gamepad/pins_arduino.h create mode 100644 avr/variants/micro_no_usb/pins_arduino.h create mode 100644 board.png create mode 100644 usb-core.png diff --git a/Readme.md b/Readme.md index 465ba74..1ca38f8 100644 --- a/Readme.md +++ b/Readme.md @@ -37,6 +37,7 @@ Installation ============ For Arduino Uno/Mega first install [HoodLoader2](https://github.com/NicoHood/HoodLoader2) on your 16u2 + the needed software files. +Make sure your HoodLoader2 software is up to date when you also update the HID-Project files. [HoodLoader1](https://github.com/NicoHood/HoodLoader) is only supported for legacy but will get a new use soon! For Arduino Micro/Leonardo ignore this step. @@ -57,30 +58,33 @@ How to use ### Micro/Leonardo + HoodLoader2 +**1. Select the new board via *Tools->Board->Arduino Leonardo HID-Project* for example.** +For HoodLoader2 select the HoodLoader 16u2 MCU. Ensure HoodLoader2 Software is up to date. + +![Board Selection Picture](board.png) + +**2. Select the USB-Core you want to use. You have 5 options here:** + +* Extended (Keyboard+Leds, Mouse+Absolute, Consumer, System) +* Gamepad (Keyboard+Leds, Mouse, Gamepad) +* Custom (Your custom configuration, see below) +* Default Core (Standard Arduino Core) +* No USB Core (No USB functions available, saves ram + flash) + +![USB-Core Selection Picture](usb-core.png) + +To create a custom HID report descriptor you can edit the file in *avr/variants/leonardo_custom/pins_arduino.h*. +Same for Micro and HoodLoader2. Not all HID reports are playing well together on all OS so I made these pre selections. +With the custom report you can try it out yourself. Everything you need should be in the pins_arduino.h file. + **You can compile all HID APIs but this doesn't mean that you can use them if no hid descriptor is set correctly.** Edit the *sketchbook/hardware/HID/avr/variants/hid_descriptors/hid_descriptors.h* to use the extended HID core. At the moment you have 3 options: Default, Gamepad or Extended. Extended should work for anything expect Gamepads. See the bug section below to find out more about working hid reports. Not all of them are playing well together. +Use the void HID_SendReport(uint8_t id, const void* data, int len); function to send hid reports with your custom HID-APIs. -Have a closer look at these lines: -``` cpp -// use this to enable the Keyboard Led functions -#define HID_KEYBOARD_LEDS_ENABLED -// add your custom HID Report Descriptor here. -// you can use the pre defined reports as well -//#define EXTERN_HID_REPORT DEFAULT_HID_REPORT -#define EXTERN_HID_REPORT EXTENDED_HID_REPORT -//#define EXTERN_HID_REPORT GAMEPAD_HID_REPORT -``` - -You can also add your own descriptor with your own APIs. -Use the void HID_SendReport(uint8_t id, const void* data, int len); function to send hid reports. - -**Select your Arduino board under *Tools->Board->Arduino Leonardo/Micro Custom HID* to use the new HID-Core. -If you select the normal Leonardo/Micro entry you will automatically use the standard Arduino Core.** - -**Try the Basic HID examples for each HID device. They are pretty much self explaining. +**3. Try the Basic HID examples for each HID device. They are pretty much self explaining. You can also see the *Projects/HID_Test* for an all in one example.** See *Project/USB-Serial* for a fully usable USB-Serial bridge and how to use the new Serial functions. @@ -215,6 +219,7 @@ Version History * Separated USB-Core in its own folder * Added HID Tables * USB-Serial now fully reprogrammable +* Easy USB-Core selection via Tools->USB-Core 2.0 Release (29.11.2014) * Added HoodLoader2 @@ -345,11 +350,10 @@ Include schematic - Arduino.h - USBAPI.h -> Arduino.h, USBDESC.h, USBCore.h - CDC.h -> Arduino.h, USBDESC.h, USBCore.h - - HID.h -> Arduino.h, USBDESC.h, USBCore.h, HID-API - - HID-API -> Keyboard.h, Mouse.h - - Keyboard.h -> Arduino.h - - Mouse.h -> Arduino.h - - [Other APIs].h -> Arduino.h + - HID.h -> Arduino.h, USBDESC.h, USBCore.h, HID-APIs(Keyboard.h, Mouse.h, etc) + - Keyboard.h -> Arduino.h + - Mouse.h -> Arduino.h + - [Other APIs].h -> Arduino.h - HIDTables.h HID.h contains all HID configuration. diff --git a/avr/boards.txt b/avr/boards.txt index ff9f9f9..d03c595 100644 --- a/avr/boards.txt +++ b/avr/boards.txt @@ -1,65 +1,103 @@ -############################################################## +#HID Project board definition file -leonardo_extended.name=Arduino Leonardo Custom HID -leonardo_extended.vid.0=0x2341 -leonardo_extended.pid.0=0x0036 -leonardo_extended.vid.1=0x2341 -leonardo_extended.pid.1=0x8036 -leonardo_extended.upload.tool=arduino:avrdude -leonardo_extended.upload.protocol=avr109 -leonardo_extended.upload.maximum_size=28672 -leonardo_extended.upload.maximum_data_size=2560 -leonardo_extended.upload.speed=57600 -leonardo_extended.upload.disable_flushing=true -leonardo_extended.upload.use_1200bps_touch=true -leonardo_extended.upload.wait_for_upload_port=true - -leonardo_extended.bootloader.tool=arduino:avrdude -leonardo_extended.bootloader.low_fuses=0xff -leonardo_extended.bootloader.high_fuses=0xd8 -leonardo_extended.bootloader.extended_fuses=0xcb -leonardo_extended.bootloader.file=arduino:caterina/Caterina-leonardo_extended.hex -leonardo_extended.bootloader.unlock_bits=0x3F -leonardo_extended.bootloader.lock_bits=0x2F - -leonardo_extended.build.mcu=atmega32u4 -leonardo_extended.build.f_cpu=16000000L -leonardo_extended.build.vid=0x2341 -leonardo_extended.build.pid=0x8036 -leonardo_extended.build.usb_product="Arduino Leonardo" -leonardo_extended.build.board=AVR_LEONARDO -leonardo_extended.build.core=arduino:hid -leonardo_extended.build.variant=leonardo_hid -leonardo_extended.build.extra_flags={build.usb_flags} +menu.usbcore=USB Core ############################################################## -micro.name=Arduino Micro Custom HID -micro.upload.tool=arduino:avrdude -micro.upload.protocol=avr109 -micro.upload.maximum_size=28672 -micro.upload.maximum_data_size=2560 -micro.upload.speed=57600 -micro.upload.disable_flushing=true -micro.upload.use_1200bps_touch=true -micro.upload.wait_for_upload_port=true +leonardoExtended.name=Arduino Leonardo HID-Project +leonardoExtended.vid.0=0x2341 +leonardoExtended.pid.0=0x0036 +leonardoExtended.vid.1=0x2341 +leonardoExtended.pid.1=0x8036 +leonardoExtended.upload.tool=arduino:avrdude +leonardoExtended.upload.protocol=avr109 +leonardoExtended.upload.maximum_size=28672 +leonardoExtended.upload.maximum_data_size=2560 +leonardoExtended.upload.speed=57600 +leonardoExtended.upload.disable_flushing=true +leonardoExtended.upload.use_1200bps_touch=true +leonardoExtended.upload.wait_for_upload_port=true -micro.bootloader.tool=arduino:avrdude -micro.bootloader.low_fuses=0xff -micro.bootloader.high_fuses=0xd8 -micro.bootloader.extended_fuses=0xcb -micro.bootloader.file=arduino:caterina/Caterina-Micro.hex -micro.bootloader.unlock_bits=0x3F -micro.bootloader.lock_bits=0x2F +leonardoExtended.bootloader.tool=arduino:avrdude +leonardoExtended.bootloader.low_fuses=0xff +leonardoExtended.bootloader.high_fuses=0xd8 +leonardoExtended.bootloader.extended_fuses=0xcb +leonardoExtended.bootloader.file=arduino:caterina/Caterina-leonardo.hex +leonardoExtended.bootloader.unlock_bits=0x3F +leonardoExtended.bootloader.lock_bits=0x2F -micro.build.mcu=atmega32u4 -micro.build.f_cpu=16000000L -micro.build.vid=0x2341 -micro.build.pid=0x8037 -micro.build.usb_product="Arduino Micro" -micro.build.board=AVR_MICRO -micro.build.core=arduino:hid -micro.build.variant=micro_hid -micro.build.extra_flags={build.usb_flags} +leonardoExtended.build.mcu=atmega32u4 +leonardoExtended.build.f_cpu=16000000L +leonardoExtended.build.vid=0x2341 +leonardoExtended.build.pid=0x8036 +leonardoExtended.build.usb_product="Arduino Leonardo" +leonardoExtended.build.board=AVR_LEONARDO +leonardoExtended.build.extra_flags={build.usb_flags} + +#USB core selection +#HID Project needs to be installed https://github.com/NicoHood/HID +#TODO change to HID:hid +leonardoExtended.menu.usbcore.hid=Serial + Extended HID +leonardoExtended.menu.usbcore.hid.build.variant=leonardo_hid +leonardoExtended.menu.usbcore.hid.build.core=arduino:hid +leonardoExtended.menu.usbcore.gamepad=Serial + Gamepad HID +leonardoExtended.menu.usbcore.gamepad.build.variant=leonardo_gamepad +leonardoExtended.menu.usbcore.gamepad.build.core=arduino:hid +leonardoExtended.menu.usbcore.custom=Serial + Custom HID +leonardoExtended.menu.usbcore.custom.build.variant=leonardo_custom +leonardoExtended.menu.usbcore.custom.build.core=arduino:hid +leonardoExtended.menu.usbcore.USB_CORE=Default Core +leonardoExtended.menu.usbcore.USB_CORE.build.variant=arduino:leonardo +leonardoExtended.menu.usbcore.USB_CORE.build.core=arduino:arduino +leonardoExtended.menu.usbcore.NO_USB=No USB functions +leonardoExtended.menu.usbcore.NO_USB.build.variant=leonardo_no_usb +leonardoExtended.menu.usbcore.NO_USB.build.core=arduino:hid + +############################################################## + +microExtended.name=Arduino Micro HID-Project +microExtended.upload.tool=arduino:avrdude +microExtended.upload.protocol=avr109 +microExtended.upload.maximum_size=28672 +microExtended.upload.maximum_data_size=2560 +microExtended.upload.speed=57600 +microExtended.upload.disable_flushing=true +microExtended.upload.use_1200bps_touch=true +microExtended.upload.wait_for_upload_port=true + +microExtended.bootloader.tool=arduino:avrdude +microExtended.bootloader.low_fuses=0xff +microExtended.bootloader.high_fuses=0xd8 +microExtended.bootloader.extended_fuses=0xcb +microExtended.bootloader.file=arduino:caterina/Caterina-Micro.hex +microExtended.bootloader.unlock_bits=0x3F +microExtended.bootloader.lock_bits=0x2F + +microExtended.build.mcu=atmega32u4 +microExtended.build.f_cpu=16000000L +microExtended.build.vid=0x2341 +microExtended.build.pid=0x8037 +microExtended.build.usb_product="Arduino Micro" +microExtended.build.board=AVR_MICRO +microExtended.build.extra_flags={build.usb_flags} + +#USB core selection +#HID Project needs to be installed https://github.com/NicoHood/HID +#TODO change to HID:hid +microExtended.menu.usbcore.hid=Serial + Extended HID +microExtended.menu.usbcore.hid.build.variant=micro_hid +microExtended.menu.usbcore.hid.build.core=arduino:hid +microExtended.menu.usbcore.gamepad=Serial + Gamepad HID +microExtended.menu.usbcore.gamepad.build.variant=micro_gamepad +microExtended.menu.usbcore.gamepad.build.core=arduino:hid +microExtended.menu.usbcore.custom=Serial + Custom HID +microExtended.menu.usbcore.custom.build.variant=micro_custom +microExtended.menu.usbcore.custom.build.core=arduino:hid +microExtended.menu.usbcore.USB_CORE=Default Core +microExtended.menu.usbcore.USB_CORE.build.variant=arduino:micro +microExtended.menu.usbcore.USB_CORE.build.core=arduino:arduino +microExtended.menu.usbcore.NO_USB=No USB functions +microExtended.menu.usbcore.NO_USB.build.variant=micro_no_usb +microExtended.menu.usbcore.NO_USB.build.core=arduino:hid ############################################################## \ No newline at end of file diff --git a/avr/cores/hid/USB-Core/HID.h b/avr/cores/hid/USB-Core/HID.h index 238ac79..2606e5a 100644 --- a/avr/cores/hid/USB-Core/HID.h +++ b/avr/cores/hid/USB-Core/HID.h @@ -45,8 +45,8 @@ THE SOFTWARE. #include "Arduino.h" -// for the extern HID descriptors -#include "pins_Arduino.h" +// for the extern HID descriptors + settings +#include "pins_arduino.h" // extern accessible led out report #if defined(HID_KEYBOARD_LEDS_ENABLED) @@ -80,6 +80,49 @@ extern uint8_t hid_keyboard_leds; #define HID_REPORTID_MOUSE_ABSOLUTE 7 #endif +// only include HIDAPIs if we have an USB AVR MCU. +// only enable specific APIs to throw an error if the hid report wasn't set +// The user can overwrite HID_SendReport() and manually include the APIs for a non USB AVR +// the include has to be done after the report IDs! + +#ifdef HID_ENABLE_ALL_APIS +// include all HID APIs +#define HID_MOUSE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +#define HID_CONSUMER_API_ENABLE +#define HID_SYSTEM_API_ENABLE +#define HID_GAMEPAD_API_ENABLE + +#elif !defined(EXTERN_HID_REPORT) +// by default enable mouse + keyboard api +#define HID_MOUSE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +#endif + +#ifdef USBCON + +#ifdef HID_MOUSE_API_ENABLE +#include "Mouse.h" +#endif + +#ifdef HID_KEYBOARD_API_ENABLE +#include "Keyboard.h" +#endif + +#ifdef HID_CONSUMER_API_ENABLE +#include "Consumer.h" +#endif + +#ifdef HID_SYSTEM_API_ENABLE +#include "System.h" +#endif + +#ifdef HID_GAMEPAD_API_ENABLE +#include "Gamepad.h" +#endif + +#endif + // HID reports // Report IDs and the report itself can be overwritten by the pins_arduino.h @@ -347,9 +390,6 @@ HID_REPORT_MOUSE(HID_REPORTID_MOUSE) #include "USBDesc.h" #include "USBCore.h" -// only include HIDAPI if we have an USB AVR MCU. -// The use can overwrite HID_SendReport() and manually include the APIs. -#include "HIDAPI.h" //================================================================================ //================================================================================ diff --git a/avr/platform.txt b/avr/platform.txt index 8887bd7..c1dae04 100644 --- a/avr/platform.txt +++ b/avr/platform.txt @@ -7,5 +7,6 @@ # https://github.com/arduino/Arduino/wiki/Arduino-Hardware-Cores-migration-guide-from-1.0-to-1.6 # https://github.com/NicoHood -name=Arduino Custom HID-Core + +name=HID Project USB-Core version=2.1 diff --git a/avr/variants/hid_descriptors/hid_descriptors.h b/avr/variants/leonardo_custom/pins_arduino.h similarity index 64% rename from avr/variants/hid_descriptors/hid_descriptors.h rename to avr/variants/leonardo_custom/pins_arduino.h index 72809e5..5fed3ae 100644 --- a/avr/variants/hid_descriptors/hid_descriptors.h +++ b/avr/variants/leonardo_custom/pins_arduino.h @@ -21,38 +21,38 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#define EXTENDED_HID_REPORT \ -HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), \ -HID_REPORT_MOUSE(HID_REPORTID_MOUSE), \ -HID_REPORT_MOUSE_ABSOLUTE(HID_REPORTID_MOUSE_ABSOLUTE), \ -HID_REPORT_CONSUMERCONTROL(HID_REPORTID_CONSUMERCONTROL), \ -HID_REPORT_SYSTEMCONTROL(HID_REPORTID_SYSTEMCONTROL) - -#define GAMEPAD_HID_REPORT \ -HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), \ -HID_REPORT_MOUSE(HID_REPORTID_MOUSE), \ -HID_REPORT_GAMEPAD(HID_REPORTID_GAMEPAD) +// include the standard leonardo board definition file +#include <../../variants/leonardo/pins_arduino.h> //================================================================================ -// Settings +// HID Settings //================================================================================ // use this to enable the Keyboard Led functions #define HID_KEYBOARD_LEDS_ENABLED -// add your custom HID Report Descriptor here. -// you can use the pre defined reports as well -//#define EXTERN_HID_REPORT DEFAULT_HID_REPORT -#define EXTERN_HID_REPORT EXTENDED_HID_REPORT -//#define EXTERN_HID_REPORT GAMEPAD_HID_REPORT +// add your custom report here: +#define EXTERN_HID_REPORT \ +HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), \ +HID_REPORT_MOUSE(HID_REPORTID_MOUSE) +// activate your custom HID-APIs here: +#define HID_MOUSE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +//#define HID_CONSUMER_API_ENABLE +//#define HID_SYSTEM_API_ENABLE +//#define HID_GAMEPAD_API_ENABLE -// Keep in mind that changing the ids or reports might confuse your OS -// Then you might need to reinstall all drivers or change the USB PID -// Mouse Abs only works with a System report and without Gamepad -// Gamepads can causes some recognition Problems with some OS -// RAW HID seems to not works properly in a multireport -// Currently available pre defined reports: +/* +You can use the pre defined reports as well. +Keep in mind that changing the ids or reports might confuse your OS. +Then you might need to reinstall all drivers or change the USB PID. +Mouse Abs only works with a System report together. +Gamepad and Mouse Abs dont work together. +Gamepads can causes some recognition problems with some OS. +RAW HID seems to not works properly in a multireport. +Currently available pre defined reports : +*/ //HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), //HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), diff --git a/avr/variants/leonardo_gamepad/pins_arduino.h b/avr/variants/leonardo_gamepad/pins_arduino.h new file mode 100644 index 0000000..738c80e --- /dev/null +++ b/avr/variants/leonardo_gamepad/pins_arduino.h @@ -0,0 +1,45 @@ +/* +Copyright (c) 2014 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// include the standard leonardo board definition file +#include <../../variants/leonardo/pins_arduino.h> + +//================================================================================ +// HID Settings +//================================================================================ + +// use this to enable the Keyboard Led functions +#define HID_KEYBOARD_LEDS_ENABLED + +#define GAMEPAD_HID_REPORT \ +HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), \ +HID_REPORT_MOUSE(HID_REPORTID_MOUSE), \ +HID_REPORT_GAMEPAD(HID_REPORTID_GAMEPAD) + +// add your custom report here: +#define EXTERN_HID_REPORT GAMEPAD_HID_REPORT + +// activate your custom HID-APIs here: +#define HID_MOUSE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +#define HID_GAMEPAD_API_ENABLE \ No newline at end of file diff --git a/avr/variants/leonardo_hid/pins_arduino.h b/avr/variants/leonardo_hid/pins_arduino.h index adf6c2a..4d8fbc4 100644 --- a/avr/variants/leonardo_hid/pins_arduino.h +++ b/avr/variants/leonardo_hid/pins_arduino.h @@ -21,5 +21,28 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +// include the standard leonardo board definition file #include <../../variants/leonardo/pins_arduino.h> -#include "../hid_descriptors/hid_descriptors.h" \ No newline at end of file + +//================================================================================ +// HID Settings +//================================================================================ + +// use this to enable the Keyboard Led functions +#define HID_KEYBOARD_LEDS_ENABLED + +#define EXTENDED_HID_REPORT \ +HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), \ +HID_REPORT_MOUSE(HID_REPORTID_MOUSE), \ +HID_REPORT_MOUSE_ABSOLUTE(HID_REPORTID_MOUSE_ABSOLUTE), \ +HID_REPORT_CONSUMERCONTROL(HID_REPORTID_CONSUMERCONTROL), \ +HID_REPORT_SYSTEMCONTROL(HID_REPORTID_SYSTEMCONTROL) + +// add your custom report here: +#define EXTERN_HID_REPORT EXTENDED_HID_REPORT + +// activate your custom HID-APIs here: +#define HID_MOUSE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +#define HID_CONSUMER_API_ENABLE +#define HID_SYSTEM_API_ENABLE diff --git a/avr/variants/leonardo_no_usb/pins_arduino.h b/avr/variants/leonardo_no_usb/pins_arduino.h new file mode 100644 index 0000000..53dfb82 --- /dev/null +++ b/avr/variants/leonardo_no_usb/pins_arduino.h @@ -0,0 +1,28 @@ +/* +Copyright (c) 2014 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// include the standard leonardo board definition file +#include <../../variants/leonardo/pins_arduino.h> + +// deactivate usb functions +#undef USBCON diff --git a/avr/variants/micro_custom/pins_arduino.h b/avr/variants/micro_custom/pins_arduino.h new file mode 100644 index 0000000..4e7ff4c --- /dev/null +++ b/avr/variants/micro_custom/pins_arduino.h @@ -0,0 +1,64 @@ +/* +Copyright (c) 2014 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// include the standard micro board definition file +#include <../../variants/micro/pins_arduino.h> + +//================================================================================ +// HID Settings +//================================================================================ + +// use this to enable the Keyboard Led functions +#define HID_KEYBOARD_LEDS_ENABLED + +// add your custom report here: +#define EXTERN_HID_REPORT \ +HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), \ +HID_REPORT_MOUSE(HID_REPORTID_MOUSE) + +// activate your custom HID-APIs here: +#define HID_MOUSE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +//#define HID_CONSUMER_API_ENABLE +//#define HID_SYSTEM_API_ENABLE +//#define HID_GAMEPAD_API_ENABLE + +/* +You can use the pre defined reports as well. +Keep in mind that changing the ids or reports might confuse your OS. +Then you might need to reinstall all drivers or change the USB PID. +Mouse Abs only works with a System report together. +Gamepad and Mouse Abs dont work together. +Gamepads can causes some recognition problems with some OS. +RAW HID seems to not works properly in a multireport. +Currently available pre defined reports : +*/ + +//HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), +//HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), +//HID_REPORT_MOUSE(HID_REPORTID_MOUSE), +//HID_REPORT_MOUSE_ABSOLUTE(HID_REPORTID_MOUSE_ABSOLUTE), +////HID_REPORT_RAWHID(HID_REPORTID_RAWHID), // not working at the moment +//HID_REPORT_CONSUMERCONTROL(HID_REPORTID_CONSUMERCONTROL), +//HID_REPORT_SYSTEMCONTROL(HID_REPORTID_SYSTEMCONTROL), +//HID_REPORT_GAMEPAD(HID_REPORTID_GAMEPAD), \ No newline at end of file diff --git a/avr/variants/micro_gamepad/pins_arduino.h b/avr/variants/micro_gamepad/pins_arduino.h new file mode 100644 index 0000000..54a65b7 --- /dev/null +++ b/avr/variants/micro_gamepad/pins_arduino.h @@ -0,0 +1,45 @@ +/* +Copyright (c) 2014 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// include the standard micro board definition file +#include <../../variants/micro/pins_arduino.h> + +//================================================================================ +// HID Settings +//================================================================================ + +// use this to enable the Keyboard Led functions +#define HID_KEYBOARD_LEDS_ENABLED + +#define GAMEPAD_HID_REPORT \ +HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), \ +HID_REPORT_MOUSE(HID_REPORTID_MOUSE), \ +HID_REPORT_GAMEPAD(HID_REPORTID_GAMEPAD) + +// add your custom report here: +#define EXTERN_HID_REPORT GAMEPAD_HID_REPORT + +// activate your custom HID-APIs here: +#define HID_MOUSE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +#define HID_GAMEPAD_API_ENABLE \ No newline at end of file diff --git a/avr/variants/micro_hid/pins_arduino.h b/avr/variants/micro_hid/pins_arduino.h index eecbe30..b687abd 100644 --- a/avr/variants/micro_hid/pins_arduino.h +++ b/avr/variants/micro_hid/pins_arduino.h @@ -21,5 +21,28 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +// include the standard micro board definition file #include <../../variants/micro/pins_arduino.h> -#include "../hid_descriptors/hid_descriptors.h" \ No newline at end of file + +//================================================================================ +// HID Settings +//================================================================================ + +// use this to enable the Keyboard Led functions +#define HID_KEYBOARD_LEDS_ENABLED + +#define EXTENDED_HID_REPORT \ +HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), \ +HID_REPORT_MOUSE(HID_REPORTID_MOUSE), \ +HID_REPORT_MOUSE_ABSOLUTE(HID_REPORTID_MOUSE_ABSOLUTE), \ +HID_REPORT_CONSUMERCONTROL(HID_REPORTID_CONSUMERCONTROL), \ +HID_REPORT_SYSTEMCONTROL(HID_REPORTID_SYSTEMCONTROL) + +// add your custom report here: +#define EXTERN_HID_REPORT EXTENDED_HID_REPORT + +// activate your custom HID-APIs here: +#define HID_MOUSE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +#define HID_CONSUMER_API_ENABLE +#define HID_SYSTEM_API_ENABLE \ No newline at end of file diff --git a/avr/variants/micro_no_usb/pins_arduino.h b/avr/variants/micro_no_usb/pins_arduino.h new file mode 100644 index 0000000..43f444c --- /dev/null +++ b/avr/variants/micro_no_usb/pins_arduino.h @@ -0,0 +1,28 @@ +/* +Copyright (c) 2014 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// include the standard micro board definition file +#include <../../variants/micro/pins_arduino.h> + +// deactivate usb functions +#undef USBCON diff --git a/board.png b/board.png new file mode 100644 index 0000000000000000000000000000000000000000..7ceebc06a547288c080e167729c7d905368c679f GIT binary patch literal 27786 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 literal 0 HcmV?d00001