diff options
Diffstat (limited to 'protocol')
| -rw-r--r-- | protocol/lufa.mk | 10 | ||||
| -rw-r--r-- | protocol/lufa/lufa.c | 96 | ||||
| -rw-r--r-- | protocol/lufa/lufa.h | 11 | ||||
| -rw-r--r-- | protocol/usb_hid.mk | 67 | ||||
| -rw-r--r-- | protocol/usb_hid/NullSerial.cpp | 44 | ||||
| -rw-r--r-- | protocol/usb_hid/README | 19 | ||||
| -rw-r--r-- | protocol/usb_hid/USBAPI.h | 22 | ||||
| -rw-r--r-- | protocol/usb_hid/arduino-1.0.1/cores/arduino/USBDesc.h | 4 | ||||
| -rw-r--r-- | protocol/usb_hid/arduino-1.0.1/cores/arduino/wiring.c | 2 | ||||
| -rw-r--r-- | protocol/usb_hid/leonardo_led.h | 10 | ||||
| -rw-r--r-- | protocol/usb_hid/main.cpp | 66 | ||||
| -rw-r--r-- | protocol/usb_hid/override_Serial.cpp | 51 | ||||
| -rw-r--r-- | protocol/usb_hid/override_wiring.c | 28 | ||||
| -rw-r--r-- | protocol/usb_hid/parser.cpp | 15 | ||||
| -rw-r--r-- | protocol/usb_hid/parser.h | 5 | ||||
| -rw-r--r-- | protocol/usb_hid/test/Makefile (renamed from protocol/usb_hid/Makefile) | 119 | ||||
| -rw-r--r-- | protocol/usb_hid/test/config.h | 40 | ||||
| -rw-r--r-- | protocol/usb_hid/test/test.cpp | 92 | 
18 files changed, 442 insertions, 259 deletions
| diff --git a/protocol/lufa.mk b/protocol/lufa.mk index ad6cab6d3b..bf6fc97b8e 100644 --- a/protocol/lufa.mk +++ b/protocol/lufa.mk @@ -1,18 +1,20 @@  LUFA_DIR = protocol/lufa  # Path to the LUFA library -LUFA_PATH = $(TOP_DIR)/protocol/lufa/LUFA-120219 +LUFA_PATH = protocol/lufa/LUFA-120219  # Create the LUFA source path variables by including the LUFA root makefile -include $(LUFA_PATH)/LUFA/makefile +include $(TOP_DIR)/$(LUFA_PATH)/LUFA/makefile  LUFA_SRC = $(LUFA_DIR)/lufa.c \  	   $(LUFA_DIR)/descriptor.c \  	   $(LUFA_SRC_USB) -SRC += $(subst $(LUFA_PATH)/,,$(LUFA_SRC)) + +SRC += $(LUFA_SRC)  # Search Path -VPATH += $(LUFA_PATH) +VPATH += $(TOP_DIR)/$(LUFA_DIR) +VPATH += $(TOP_DIR)/$(LUFA_PATH)  # Option modules  #ifdef $(or MOUSEKEY_ENABLE, PS2_MOUSE_ENABLE) diff --git a/protocol/lufa/lufa.c b/protocol/lufa/lufa.c index b7ecb8488d..81409ce9ed 100644 --- a/protocol/lufa/lufa.c +++ b/protocol/lufa/lufa.c @@ -59,7 +59,7 @@ static void send_keyboard(report_keyboard_t *report);  static void send_mouse(report_mouse_t *report);  static void send_system(uint16_t data);  static void send_consumer(uint16_t data); -static host_driver_t lufa_driver = { +host_driver_t lufa_driver = {      keyboard_leds,      send_keyboard,      send_mouse, @@ -68,49 +68,9 @@ static host_driver_t lufa_driver = {  }; -static void SetupHardware(void); -static void Console_Task(void); - -int main(void) -{ -    SetupHardware(); -    sei(); - -    print_enable = true; -    debug_enable = true; -    debug_matrix = true; -    debug_keyboard = true; -    debug_mouse = true; - -    // TODO: can't print here -    debug("LUFA init\n"); - -    keyboard_init(); -    host_set_driver(&lufa_driver); -    while (1) { -        keyboard_proc(); - -#if !defined(INTERRUPT_CONTROL_ENDPOINT) -        USB_USBTask(); -#endif -    } -} - -void SetupHardware(void) -{ -    /* Disable watchdog if enabled by bootloader/fuses */ -    MCUSR &= ~(1 << WDRF); -    wdt_disable(); - -    /* Disable clock division */ -    clock_prescale_set(clock_div_1); - -    USB_Init(); - -    // for Console_Task -    USB_Device_EnableSOFEvents(); -} - +/******************************************************************************* + * Console + ******************************************************************************/  #ifdef CONSOLE_ENABLE  static void Console_Task(void)  { @@ -446,3 +406,51 @@ int8_t sendchar(uint8_t c)      return 0;  }  #endif + + +/******************************************************************************* + * main + ******************************************************************************/ +static void SetupHardware(void) +{ +    /* Disable watchdog if enabled by bootloader/fuses */ +    MCUSR &= ~(1 << WDRF); +    wdt_disable(); + +    /* Disable clock division */ +    clock_prescale_set(clock_div_1); + +    // Leonardo needs. Without this USB device is not recognized. +    USB_Disable(); + +    USB_Init(); + +    // for Console_Task +    USB_Device_EnableSOFEvents(); +} + +int main(void)  __attribute__ ((weak)); +int main(void) +{ +    SetupHardware(); +    sei(); + +    print_enable = true; +    debug_enable = true; +    debug_matrix = true; +    debug_keyboard = true; +    debug_mouse = true; + +    // TODO: can't print here +    debug("LUFA init\n"); + +    keyboard_init(); +    host_set_driver(&lufa_driver); +    while (1) { +        keyboard_proc(); + +#if !defined(INTERRUPT_CONTROL_ENDPOINT) +        USB_USBTask(); +#endif +    } +} diff --git a/protocol/lufa/lufa.h b/protocol/lufa/lufa.h index 71c279b0dc..bcee060d67 100644 --- a/protocol/lufa/lufa.h +++ b/protocol/lufa/lufa.h @@ -47,8 +47,19 @@  #include <string.h>  #include <LUFA/Version.h>  #include <LUFA/Drivers/USB/USB.h> +#include "host.h" +#ifdef __cplusplus +extern "C" { +#endif + +extern host_driver_t lufa_driver; + +#ifdef __cplusplus +} +#endif +  /* extra report structure */  typedef struct {      uint8_t  report_id; diff --git a/protocol/usb_hid.mk b/protocol/usb_hid.mk new file mode 100644 index 0000000000..f3149f7f4b --- /dev/null +++ b/protocol/usb_hid.mk @@ -0,0 +1,67 @@ +USB_HID_DIR = protocol/usb_hid + + +# +# USB Host Shield +# +USB_HOST_SHIELD_DIR = $(USB_HID_DIR)/USB_Host_Shield_2.0 +USB_HOST_SHIELD_SRC = \ +	$(USB_HOST_SHIELD_DIR)/Usb.cpp \ +	$(USB_HOST_SHIELD_DIR)/hid.cpp \ +	$(USB_HOST_SHIELD_DIR)/parsetools.cpp \ +	$(USB_HOST_SHIELD_DIR)/message.cpp  + + + +# +# Arduino +# +ARDUINO_DIR = $(USB_HID_DIR)/arduino-1.0.1 +ARDUINO_CORES_DIR = $(ARDUINO_DIR)/cores/arduino +ARDUINO_CORES_SRC = \ +	$(ARDUINO_CORES_DIR)/Print.cpp \ +	$(ARDUINO_CORES_DIR)/Stream.cpp + +# replaced with override_Serial.c +#	$(ARDUINO_CORES_DIR)/CDC.cpp \ +#	$(ARDUINO_CORES_DIR)/HID.cpp \ +#	$(ARDUINO_CORES_DIR)/USBCore.cpp \ + +# replaced with override_wiring.c and common/timer.c +#	$(ARDUINO_CORES_DIR)/wiring.c \ + + + +# +# HID parser +# +SRC += $(USB_HID_DIR)/parser.cpp + +# replace arduino/CDC.cpp +SRC += $(USB_HID_DIR)/override_Serial.cpp + +# replace arduino/wiring.c +SRC += $(USB_HID_DIR)/override_wiring.c +SRC += common/timer.c + +SRC += $(USB_HOST_SHIELD_SRC) +SRC += $(ARDUINO_CORES_SRC) + + +OPT_DEFS += -DARDUINO=101 +# Arduino USBCore needs USB_VID and USB_PID. +#OPT_DEFS += -DARDUINO=101 -DUSB_VID=0x2341 -DUSB_PID=0x8036 + + + +# +# Search Path +# +VPATH += $(TOP_DIR)/$(USB_HID_DIR) +VPATH += $(TOP_DIR)/$(USB_HOST_SHIELD_DIR) + +# for #include "Arduino.h" +VPATH += $(TOP_DIR)/$(ARDUINO_CORES_DIR) + +# for #include "pins_arduino.h" +VPATH += $(TOP_DIR)/$(ARDUINO_DIR)/variants/leonardo diff --git a/protocol/usb_hid/NullSerial.cpp b/protocol/usb_hid/NullSerial.cpp deleted file mode 100644 index 6d85caf2d8..0000000000 --- a/protocol/usb_hid/NullSerial.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "USBAPI.h" - - -void NullSerial::begin(uint16_t baud_count) -{ -} - -void NullSerial::end(void) -{ -} - -void NullSerial::accept(void) -{ -} - -int NullSerial::available(void) -{ -    return 0; -} - -int NullSerial::peek(void) -{ -    return -1; -} - -int NullSerial::read(void) -{ -    return -1; -} - -void NullSerial::flush(void) -{ -} - -size_t NullSerial::write(uint8_t c) -{ -    return 1; -} - -NullSerial::operator bool() { -    return true; -} - -NullSerial Serial; diff --git a/protocol/usb_hid/README b/protocol/usb_hid/README index 0acf677f8b..9750a1cc8d 100644 --- a/protocol/usb_hid/README +++ b/protocol/usb_hid/README @@ -1,3 +1,8 @@ +USB HID protocol +================ +Host side of USB HID keyboard protocol implementation. +Only standard HID Boot mode is supported at this time. This means most of normal keyboards are supported while proprietary >6KRO and NKRO is not. +  Third party Libraries  ---------------------  USB_Host_Shield_2.0 @@ -7,3 +12,17 @@ USB_Host_Shield_2.0  arduino-1.0.1      Arduino files copied from:      https://github.com/arduino/Arduino/hardware/arduino/{cores,variants} + + +Test build +---------- +In test directory; +    $ make +    $ DEV=/dev/ttyACM0 make program + +You can see HID keyboard reports on debug output. + + +Restriction and Bug +------------------- +Not statble yet. diff --git a/protocol/usb_hid/USBAPI.h b/protocol/usb_hid/USBAPI.h deleted file mode 100644 index e3390d49a8..0000000000 --- a/protocol/usb_hid/USBAPI.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Override original arduino USBAPI.h. - */ -#include <stdint.h> -#include "Stream.h" - - -class NullSerial : public Stream -{ -public: -	void begin(uint16_t baud_count); -	void end(void); - -	virtual int available(void); -	virtual void accept(void); -	virtual int peek(void); -	virtual int read(void); -	virtual void flush(void); -	virtual size_t write(uint8_t); -	operator bool(); -}; -extern NullSerial Serial; diff --git a/protocol/usb_hid/arduino-1.0.1/cores/arduino/USBDesc.h b/protocol/usb_hid/arduino-1.0.1/cores/arduino/USBDesc.h index 229a638c53..900713e0f9 100644 --- a/protocol/usb_hid/arduino-1.0.1/cores/arduino/USBDesc.h +++ b/protocol/usb_hid/arduino-1.0.1/cores/arduino/USBDesc.h @@ -16,8 +16,8 @@  ** SOFTWARE.    */ -//#define CDC_ENABLED -//#define HID_ENABLED +#define CDC_ENABLED +#define HID_ENABLED  #ifdef CDC_ENABLED diff --git a/protocol/usb_hid/arduino-1.0.1/cores/arduino/wiring.c b/protocol/usb_hid/arduino-1.0.1/cores/arduino/wiring.c index b1a4ce4b0b..ac8bb6f9b4 100644 --- a/protocol/usb_hid/arduino-1.0.1/cores/arduino/wiring.c +++ b/protocol/usb_hid/arduino-1.0.1/cores/arduino/wiring.c @@ -108,7 +108,6 @@ unsigned long micros() {  void delay(unsigned long ms)  { -//PORTB &= ~(1<<0);  	uint16_t start = (uint16_t)micros();  	while (ms > 0) { @@ -117,7 +116,6 @@ void delay(unsigned long ms)  			start += 1000;  		}  	} -//PORTB |= (1<<0);  }  /* Delay for the given number of microseconds.  Assumes a 8 or 16 MHz clock. */ diff --git a/protocol/usb_hid/leonardo_led.h b/protocol/usb_hid/leonardo_led.h new file mode 100644 index 0000000000..6f67a88f5b --- /dev/null +++ b/protocol/usb_hid/leonardo_led.h @@ -0,0 +1,10 @@ +#ifndef LEONARDO_LED_H +#define LEONARDO_LED_H + +// Leonardo "TX" LED for debug +#define LED_TX_INIT    (DDRD  |=  (1<<5)) +#define LED_TX_ON      (PORTD &= ~(1<<5)) +#define LED_TX_OFF     (PORTD |=  (1<<5)) +#define LED_TX_TOGGLE  (PORTD ^=  (1<<5)) + +#endif diff --git a/protocol/usb_hid/main.cpp b/protocol/usb_hid/main.cpp deleted file mode 100644 index c292d458e2..0000000000 --- a/protocol/usb_hid/main.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include <util/delay.h> -#include <Arduino.h> -#include "Usb.h" -#include "hid.h" -#include "hidboot.h" -#include "parser.h" - - -USB     Usb; -HIDBoot<HID_PROTOCOL_KEYBOARD>    kbd(&Usb); -KBDReportParser Prs; - -void usb_disable() -{ -    USBCON &= ~(1<<VBUSTI); -    UDIEN = 0; -    USBINT = 0; -    UDINT = 0; -    UDCON |= (1<<DETACH); -    USBCON &= ~(1<<USBE); -    PLLCSR = 0; -    UHWCON &= ~(1<<UVREGE); -    USBCON &= ~(1<<OTGPADE); -} - -void setup() -{ -    usb_disable(); - -    // RX LED for debug -    DDRB |= (1<<0); - -    Serial.begin( 115200 ); -    while (!Serial) ; - -    delay( 1000 ); - -    Serial.println("Start"); - -    if (Usb.Init() == -1) { -        Serial.println("OSC did not start."); -    } -       -    delay( 200 ); -   -    kbd.SetReportParser(0, (HIDReportParser*)&Prs); -} - -void loop() -{ -    Usb.Task(); -} - -int main(void) -{ -    // arduino/wiring.c(Timer initialize) -    init(); - -    setup(); -     -    for (;;) { -        loop(); -    } -         -    return 0; -} diff --git a/protocol/usb_hid/override_Serial.cpp b/protocol/usb_hid/override_Serial.cpp new file mode 100644 index 0000000000..e1755a5dc7 --- /dev/null +++ b/protocol/usb_hid/override_Serial.cpp @@ -0,0 +1,51 @@ +/* + * Null implementation of Serial to dump debug print into blackhole + */ +#include "Arduino.h" +#include "sendchar.h" + +#include "USBAPI.h" + + +void Serial_::begin(uint16_t baud_count) +{ +} + +void Serial_::end(void) +{ +} + +void Serial_::accept(void) +{ +} + +int Serial_::available(void) +{ +    return 0; +} + +int Serial_::peek(void) +{ +    return -1; +} + +int Serial_::read(void) +{ +    return -1; +} + +void Serial_::flush(void) +{ +} + +size_t Serial_::write(uint8_t c) +{ +    sendchar(c); +    return 1; +} + +Serial_::operator bool() { +    return true; +} + +Serial_ Serial; diff --git a/protocol/usb_hid/override_wiring.c b/protocol/usb_hid/override_wiring.c new file mode 100644 index 0000000000..a8c28dd898 --- /dev/null +++ b/protocol/usb_hid/override_wiring.c @@ -0,0 +1,28 @@ +/* + * To keep Timer0 for common/timer.c override arduino/wiring.c. + */ +#include <util/delay.h> +#include "common/timer.h" +#include "Arduino.h" + + +unsigned long millis() +{ +    return timer_read(); +} +unsigned long micros() +{ +    return timer_read() * 1000UL; +} +void delay(unsigned long ms) +{ +    _delay_ms(ms); +} +void delayMicroseconds(unsigned int us) +{ +    _delay_us(us); +} +void init() +{ +    timer_init(); +} diff --git a/protocol/usb_hid/parser.cpp b/protocol/usb_hid/parser.cpp index cf64322302..b03af8ae41 100644 --- a/protocol/usb_hid/parser.cpp +++ b/protocol/usb_hid/parser.cpp @@ -1,15 +1,14 @@  #include "parser.h" +#include "leonardo_led.h" +#include "debug.h"  void KBDReportParser::Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)  { -    PORTB ^= (1<<0); -/* -    Serial.print("KBDReport: "); +    LED_TX_TOGGLE; +    debug("KBDReport: ");      for (uint8_t i = 0; i < len; i++) { -        PrintHex<uint8_t>(buf[i]); -        Serial.print(" "); +        debug_hex(buf[i]); +        debug(" ");      } -    Serial.print("\r\n"); -*/ -    //PORTC &= ~(1<<7); +    debug("\r\n");  } diff --git a/protocol/usb_hid/parser.h b/protocol/usb_hid/parser.h index dc14c82705..703eb1ed4c 100644 --- a/protocol/usb_hid/parser.h +++ b/protocol/usb_hid/parser.h @@ -1,3 +1,6 @@ +#ifndef PARSER_H +#define PARSER_H +  #include "hid.h"  class KBDReportParser : public HIDReportParser @@ -5,3 +8,5 @@ class KBDReportParser : public HIDReportParser  public:  	virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);  }; + +#endif diff --git a/protocol/usb_hid/Makefile b/protocol/usb_hid/test/Makefile index ed3d6518d8..39f5de4552 100644 --- a/protocol/usb_hid/Makefile +++ b/protocol/usb_hid/test/Makefile @@ -39,7 +39,9 @@  #----------------------------------------------------------------------------  # Target file name (without extension). -TARGET = usbkbd +TARGET = usb_hid_test + +TOP_DIR = ../../..  # Directory keyboard dependent files exist  TARGET_DIR = . @@ -63,79 +65,62 @@ F_CPU = 16000000 +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 +# Input clock frequency. +#     This will define a symbol, F_USB, in all source code files equal to the +#     input clock frequency (before any prescaling is performed) in Hz. This value may +#     differ from F_CPU if prescaling is used on the latter, and is required as the +#     raw input clock is fed directly to the PLL sections of the AVR for high speed +#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +#     at the end, this will be done automatically to create a 32-bit value in your +#     source code. +# +#     If no clock division is performed on the input clock inside the AVR (via the +#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) +# Interrupt driven control endpoint task +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + + +# Build Options +#   comment out to disable the options. +# +# Console for debug +OPT_DEFS += -DCONSOLE_ENABLE + +# Boot Section Size in bytes +#   Teensy halfKay   512 +#   Atmel DFU loader 4096 +#   LUFA bootloader  4096 +#OPT_DEFS += -DBOOT_SIZE=4096 + + + +SRC =  test.cpp +SRC += common/debug.c +SRC += common/print.c + +CONFIG_H = config.h + -ARDUINO_DIR = arduino-1.0.1/cores -ARDUINO_SRC = \ -	arduino/Print.cpp \ -	arduino/Stream.cpp \ -	arduino/wiring.c - -#	arduino/main.cpp \ -#	arduino/USBCore.cpp \ -#	arduino/CDC.cpp \ -#	arduino/HID.cpp \ -#	arduino/HardwareSerial.cpp \ -#	arduino/IPAddress.cpp \ -#	arduino/Tone.cpp \ -#	arduino/WMath.cpp \ -#	arduino/WInterrupts.c \ -#	arduino/wiring_analog.c \ -#	arduino/wiring_pulse.c \ -#	arduino/wiring_shift.c -#	arduino/wiring_digital.c \ -#	arduino/WString.cpp \ -#	arduino/new.cpp \ - -USB_HOST_DIR = ./USB_Host_Shield_2.0 -USB_HOST_SRC = \ -	Usb.cpp \ -	cdcacm.cpp \ -	cdcftdi.cpp \ -	cdcprolific.cpp \ -	hid.cpp \ -	hidboot.cpp \ -	hiduniversal.cpp \ -	hidusagetitlearrays.cpp \ -	hidescriptorparser.cpp \ -	message.cpp \ -	parsetools.cpp - -	#PS3BT.cpp \ -	#PS3USB.cpp \ -	#RFCOMM.cpp \ -	#XBOXUSB.cpp \ -	#adk.cpp \ -	#masstorage.cpp \ -	#max_LCD.cpp \ -	#usbhub.cpp - -#SRC =  host_kbd.cpp -SRC =  main.cpp -SRC +=  parser.cpp -SRC +=  NullSerial.cpp -SRC += $(USB_HOST_SRC) -SRC += $(ARDUINO_SRC) - -OPT_DEFS = -DARDUINO=101 -DUSB_VID=0x2341 -DUSB_PID=0x8036  # Search Path  VPATH += $(TARGET_DIR) -VPATH += $(USB_HOST_DIR) -VPATH += $(ARDUINO_DIR) -# for Arduino.h -VPATH += arduino-1.0.1/cores/arduino -# for pins_arduino.h -VPATH += arduino-1.0.1/variants/leonardo +VPATH += $(TOP_DIR) +VPATH += $(TOP_DIR)/common -# Ad hoc workaround to override original arduino/USBAPI.h with our own USBAPI.h. -# Obsolete but needed in order to remove directory including the current input file from search list. -# Option -iquote can't replace -I- for this purpose. -EXTRAFLAGS += -I- -  # program Leonardo -PROGRAM_CMD = avrdude -patmega32u4 -cavr109 -P$(DEV) -b57600 -Uflash:w:$(TARGET).hex +PROGRAM_CMD = avrdude -p$(MCU) -cavr109 -P$(DEV) -b57600 -Uflash:w:$(TARGET).hex + -include ../../rules.mk +include $(TOP_DIR)/protocol/usb_hid.mk +include $(TOP_DIR)/protocol/lufa.mk +include $(TOP_DIR)/rules.mk diff --git a/protocol/usb_hid/test/config.h b/protocol/usb_hid/test/config.h new file mode 100644 index 0000000000..c2230fb570 --- /dev/null +++ b/protocol/usb_hid/test/config.h @@ -0,0 +1,40 @@ +/* +Copyright 2012 Jun Wako <wakojun@gmail.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef CONFIG_H +#define CONFIG_H + + +#define VENDOR_ID       0xFEED +#define PRODUCT_ID      0xCAFE +#define DEVICE_VER      0x0814 +#define MANUFACTURER    t.m.k. +#define PRODUCT         USB to USB keyboard converter + + +#define DESCRIPTION     Product from t.m.k. keyboard firmware project + + +/* matrix size */ +#define MATRIX_ROWS 32 +#define MATRIX_COLS 8 + + +/* key combination for command */ +#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT)))  + +#endif diff --git a/protocol/usb_hid/test/test.cpp b/protocol/usb_hid/test/test.cpp new file mode 100644 index 0000000000..4958f0c619 --- /dev/null +++ b/protocol/usb_hid/test/test.cpp @@ -0,0 +1,92 @@ +#include <avr/io.h> +#include <avr/wdt.h> +#include <avr/power.h> +#include <util/delay.h> +#include <Arduino.h> + +// USB HID host +#include "Usb.h" +#include "hid.h" +#include "hidboot.h" +#include "parser.h" + +// LUFA +#include "lufa.h" + +#include "debug.h" + +#include "leonardo_led.h" + + +static USB     usb_host; +static HIDBoot<HID_PROTOCOL_KEYBOARD>    kbd(&usb_host); +static KBDReportParser kbd_parser; + +static void LUFA_setup(void) +{ +    /* Disable watchdog if enabled by bootloader/fuses */ +    MCUSR &= ~(1 << WDRF); +    wdt_disable(); + +    /* Disable clock division */ +    clock_prescale_set(clock_div_1); + +    // Leonardo needs. Without this USB device is not recognized. +    USB_Disable(); + +    USB_Init(); + +    // for Console_Task +    USB_Device_EnableSOFEvents(); +} + +static void HID_setup() +{ +    // Arduino Timer startup: wiring.c +    init(); + +    if (usb_host.Init() == -1) { +        debug("HID init: failed\n"); +        LED_TX_OFF; +    } +   +    _delay_ms(200); +       +    kbd.SetReportParser(0, (HIDReportParser*)&kbd_parser); +} + +int main(void) +{ +    // LED for debug +    LED_TX_INIT; +    LED_TX_ON; + +    print_enable = true; +    debug_enable = true; +    debug_matrix = true; +    debug_keyboard = true; +    debug_mouse = true; + +    LUFA_setup(); +    sei(); + +    // wait for startup of sendchar routine +    while (USB_DeviceState != DEVICE_STATE_Configured) ; +    if (debug_enable) { +        _delay_ms(1000); +    } + +    HID_setup(); +     +    debug("init: done\n"); +    for (;;) { +        usb_host.Task(); + +#if !defined(INTERRUPT_CONTROL_ENDPOINT) +        // LUFA Task for control request +        USB_USBTask(); +#endif +    } +         +    return 0; +} | 
