#include #include // Satisfy the IDE, which needs to see the include statment in the ino too. #ifdef dobogusinclude #include #endif #include // Override HIDComposite to be able to select which interface we want to hook into class HIDSelector : public HIDComposite { public: HIDSelector(USB *p) : HIDComposite(p) {}; protected: void ParseHIDData(USBHID *hid, uint8_t ep, bool is_rpt_id, uint8_t len, uint8_t *buf); // Called by the HIDComposite library bool SelectInterface(uint8_t iface, uint8_t proto); }; // Return true for the interface we want to hook into bool HIDSelector::SelectInterface(uint8_t iface, uint8_t proto) { if (proto != 0) return true; return false; } // Will be called for all HID data received from the USB interface void HIDSelector::ParseHIDData(USBHID *hid, uint8_t ep, bool is_rpt_id, uint8_t len, uint8_t *buf) { #if 1 if (len && buf) { Notify(PSTR("\r\n"), 0x80); for (uint8_t i = 0; i < len; i++) { D_PrintHex (buf[i], 0x80); Notify(PSTR(" "), 0x80); } } #endif } USB Usb; //USBHub Hub(&Usb); HIDSelector hidSelector(&Usb); void setup() { Serial.begin( 115200 ); #if !defined(__MIPSEL__) while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #endif Serial.println("Start"); if (Usb.Init() == -1) Serial.println("OSC did not start."); // Set this to higher values to enable more debug information // minimum 0x00, maximum 0xff, default 0x80 UsbDEBUGlvl = 0xff; delay( 200 ); } void loop() { Usb.Task(); }