USB: run USB stack from idle event instead of via interrupts
authorMichael Moon <triffid.hunter@gmail.com>
Wed, 6 Feb 2013 00:17:32 +0000 (11:17 +1100)
committerMichael Moon <triffid.hunter@gmail.com>
Wed, 6 Feb 2013 00:17:32 +0000 (11:17 +1100)
src/libs/USBDevice/USB.cpp
src/libs/USBDevice/USB.h
src/libs/USBDevice/USBDevice/USBHAL_LPC17.cpp

index 3f1d935..5710c74 100644 (file)
@@ -673,5 +673,11 @@ void USB::dumpDescriptors() {
 
 void USB::on_module_loaded()
 {
+    register_for_event(ON_IDLE);
     connect();
 }
+
+void USB::on_idle(void*)
+{
+    USBHAL::usbisr();
+}
index 9a169d1..b213ef7 100644 (file)
@@ -22,20 +22,21 @@ public:
 
     void init(void);
 
-    virtual bool USBEvent_busReset(void);
-    virtual bool USBEvent_connectStateChanged(bool connected);
-    virtual bool USBEvent_suspendStateChanged(bool suspended);
+    bool USBEvent_busReset(void);
+    bool USBEvent_connectStateChanged(bool connected);
+    bool USBEvent_suspendStateChanged(bool suspended);
 
-    virtual bool USBEvent_Request(CONTROL_TRANSFER&);
-    virtual bool USBEvent_RequestComplete(CONTROL_TRANSFER&, uint8_t *, uint32_t);
+    bool USBEvent_Request(CONTROL_TRANSFER&);
+    bool USBEvent_RequestComplete(CONTROL_TRANSFER&, uint8_t *, uint32_t);
 
-    virtual bool USBEvent_EPIn(uint8_t, uint8_t);
-    virtual bool USBEvent_EPOut(uint8_t, uint8_t);
+    bool USBEvent_EPIn(uint8_t, uint8_t);
+    bool USBEvent_EPOut(uint8_t, uint8_t);
 
-    virtual bool USBCallback_setConfiguration(uint8_t configuration);
-    virtual bool USBCallback_setInterface(uint16_t interface, uint8_t alternate);
+    bool USBCallback_setConfiguration(uint8_t configuration);
+    bool USBCallback_setInterface(uint16_t interface, uint8_t alternate);
 
-    virtual void on_module_loaded(void);
+    void on_module_loaded(void);
+    void on_idle(void*);
 
     int addDescriptor(usbdesc_base *descriptor);
     int addDescriptor(void *descriptor);
index 436e0de..62b382d 100644 (file)
@@ -531,7 +531,7 @@ uint32_t USBHAL::getSerialNumber(int length, uint32_t *buf) {
 void USBHAL::connect(void) {\r
     // Connect USB device\r
 //     iprintf("USBHAL::connect\n");\r
-    NVIC_EnableIRQ(USB_IRQn);\r
+//     NVIC_EnableIRQ(USB_IRQn);\r
     SIEconnect();\r
 //     iprintf("USBHAL::connect OK\n");\r
 }\r