#include <avr/pgmspace.h> #include <avrpins.h> #include <max3421e.h> #include <usbhost.h> #include <usb_ch9.h> #include <Usb.h> #include <usbhub.h> #include <avr/pgmspace.h> #include <address.h> #include <hid.h> #include <hiduniversal.h> #include <printhex.h> #include <message.h> #include <hexdump.h> #include <parsetools.h> #include "hidwh1080rptparser.h" #define XBEE_SLEEP 2 #define MAX_RESET 7 //MAX3421E pin 12 #define MAX_GPX 8 //MAX3421E pin 17 USB Usb; USBHub Hub(&Usb); HIDUniversal Hid(&Usb); WH1080ReportParser parser; void startUsb() { // Set up reset and GPX ports -- USB Host library seems to be missing this, // see https://github.com/watterott/KnowledgeBase/wiki/SparkFun-USB-Host-Shield pinMode(MAX_GPX, INPUT); pinMode(MAX_RESET, OUTPUT); digitalWrite(MAX_RESET, LOW); delay(20); //wait 20ms digitalWrite(MAX_RESET, HIGH); delay(20); //wait 20ms if (Usb.Init() == -1) Serial.println("{\"error\":\"OSC did not start.\"}"); delay( 200 ); if (!Hid.SetReportParser(0, &parser)) ErrorMessage<uint8_t>(PSTR("SetReportParser"), 1 ); } void setup() { Serial.begin( 9600 ); pinMode(XBEE_SLEEP, OUTPUT); // XBee sleep pin (DTR) digitalWrite(XBEE_SLEEP, LOW); // ensure awake startUsb(); } void loop() { Usb.Task(); if ((Usb.getUsbTaskState() == USB_STATE_RUNNING) && parser.startDelay && (parser.startDelay <= millis())) { int rcode = Hid.SetReport(0, 0, 0x02, 0x01, sizeof(parser.report), parser.report); if (rcode != 0) { Serial.print("{\"error\":\"Rcode = "); Serial.print(rcode, HEX); Serial.println("\"}"); parser.startDelay = millis() + 5000; } else { parser.startDelay = 0; } } /* if ((parser.lastMillis + 60000) < millis()) { parser.lastMillis = millis(); startUsb(); } */ }