USBHost library. NOTE: This library is only officially supported on the LPC1768 platform. For more information, please see the handbook page.

Dependencies:   FATFileSystem mbed-rtos

Dependents:   BTstack WallbotWii SD to Flash Data Transfer USBHost-MSD_HelloWorld ... more

Legacy Warning

This is an mbed 2 library. To learn more about mbed OS 5, visit the docs.

Pull requests against this repository are no longer supported. Please raise against mbed OS 5 as documented above.

Files at this revision

API Documentation at this revision

Comitter:
samux
Date:
Wed Mar 13 10:23:01 2013 +0000
Parent:
4:b320d68e98e7
Child:
6:1571e517a91b
Commit message:
add button, x, y, z event callbacks

Changed in this revision

USBHostHID/USBHostKeyboard.cpp Show annotated file Show diff for this revision Revisions of this file
USBHostHID/USBHostMouse.cpp Show annotated file Show diff for this revision Revisions of this file
USBHostHID/USBHostMouse.h Show annotated file Show diff for this revision Revisions of this file
USBHostMSD/USBHostMSD.cpp Show annotated file Show diff for this revision Revisions of this file
USBHostSerial/USBHostSerial.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/USBHostHID/USBHostKeyboard.cpp	Tue Mar 12 17:23:37 2013 +0000
+++ b/USBHostHID/USBHostKeyboard.cpp	Wed Mar 13 10:23:01 2013 +0000
@@ -103,13 +103,11 @@
 
 bool USBHostKeyboard::connect() {
     
-    U8 i;
-    
     if (dev_connected) {
         return true;
     }
     
-    for (i = 0; i < MAX_DEVICE_CONNECTED; i++) {
+    for (uint8_t i = 0; i < MAX_DEVICE_CONNECTED; i++) {
         if ((dev = host->getDevice(i)) != NULL) {
 
             if (host->enumerate(dev, this))
@@ -149,11 +147,11 @@
         if (key && onKey) {
             (*onKey)(key);
         }
-        if (onKeyCode) {
+        if ((report[index + 2] || modifier) && onKeyCode) {
             (*onKeyCode)(report[index + 2], modifier);
         }
     }
-    if (dev != NULL)
+    if (dev && int_in)
         host->interruptRead(dev, int_in, report, len_listen, false);
 }
 
--- a/USBHostHID/USBHostMouse.cpp	Tue Mar 12 17:23:37 2013 +0000
+++ b/USBHostHID/USBHostMouse.cpp	Wed Mar 13 10:23:01 2013 +0000
@@ -29,10 +29,19 @@
     dev = NULL;
     int_in = NULL;
     onUpdate = NULL;
+    onButtonUpdate = NULL;
+    onXUpdate = NULL;
+    onYUpdate = NULL;
+    onZUpdate = NULL;
     report_id = 0;
     dev_connected = false;
     mouse_device_found = false;
     mouse_intf = -1;
+    
+    buttons = 0;
+    x = 0;
+    y = 0;
+    z = 0;
 }
 
 bool USBHostMouse::connected() {
@@ -40,14 +49,12 @@
 }
 
 bool USBHostMouse::connect() {
-    
-    U8 i;
-    
+
     if (dev_connected) {
         return true;
     }
     
-    for (i = 0; i < MAX_DEVICE_CONNECTED; i++) {
+    for (uint8_t i = 0; i < MAX_DEVICE_CONNECTED; i++) {
         if ((dev = host->getDevice(i)) != NULL) {
 
             if(host->enumerate(dev, this))
@@ -78,10 +85,34 @@
 void USBHostMouse::rxHandler() {
     int len_listen = int_in->getSize();
     int len = int_in->getLengthTransferred();
+    
     if (onUpdate) {
         (*onUpdate)(report[0] & 0x07, report[1], report[2], report[3]);
     }
-    if (dev != NULL)
+    
+    if (onButtonUpdate && (buttons != (report[0] & 0x07))) {
+        (*onButtonUpdate)(report[0] & 0x07);
+    }
+    
+    if (onXUpdate && (x != report[1])) {
+        (*onXUpdate)(report[1]);
+    }
+    
+    if (onYUpdate && (y != report[2])) {
+        (*onYUpdate)(report[2]);
+    }
+    
+    if (onZUpdate && (z != report[3])) {
+        (*onZUpdate)(report[3]);
+    }
+        
+    // update mouse state
+    buttons = report[0] & 0x07;
+    x = report[1];
+    y = report[2];
+    z = report[3];
+    
+    if (dev)
         host->interruptRead(dev, int_in, report, len_listen, false);
 }
 
--- a/USBHostHID/USBHostMouse.h	Tue Mar 12 17:23:37 2013 +0000
+++ b/USBHostHID/USBHostMouse.h	Wed Mar 13 10:23:01 2013 +0000
@@ -55,11 +55,55 @@
      *
      * @param ptr function pointer
      */
-    inline void attach(void (*ptr)(uint8_t buttons, int8_t x, int8_t y, int8_t z)) {
+    inline void attachEvent(void (*ptr)(uint8_t buttons, int8_t x, int8_t y, int8_t z)) {
         if (ptr != NULL) {
             onUpdate = ptr;
         }
     }
+    
+    /**
+     * Attach a callback called when the button state changes
+     *
+     * @param ptr function pointer
+     */
+    inline void attachButtonEvent(void (*ptr)(uint8_t buttons)) {
+        if (ptr != NULL) {
+            onButtonUpdate = ptr;
+        }
+    }
+    
+    /**
+     * Attach a callback called when the X axis value changes
+     *
+     * @param ptr function pointer
+     */
+    inline void attachXEvent(void (*ptr)(int8_t x)) {
+        if (ptr != NULL) {
+            onXUpdate = ptr;
+        }
+    }
+    
+    /**
+     * Attach a callback called when the Y axis value changes
+     *
+     * @param ptr function pointer
+     */
+    inline void attachYEvent(void (*ptr)(int8_t y)) {
+        if (ptr != NULL) {
+            onYUpdate = ptr;
+        }
+    }
+    
+    /**
+     * Attach a callback called when the Z axis value changes (scrolling)
+     *
+     * @param ptr function pointer
+     */
+    inline void attachZEvent(void (*ptr)(int8_t z)) {
+        if (ptr != NULL) {
+            onZUpdate = ptr;
+        }
+    }
 
 protected:
     //From IUSBEnumerator
@@ -77,8 +121,17 @@
     bool mouse_device_found;
     int mouse_intf;
 
+    uint8_t buttons;
+    int8_t x;
+    int8_t y;
+    int8_t z;
+
     void rxHandler();
     void (*onUpdate)(uint8_t buttons, int8_t x, int8_t y, int8_t z);
+    void (*onButtonUpdate)(uint8_t buttons);
+    void (*onXUpdate)(int8_t x);
+    void (*onYUpdate)(int8_t y);
+    void (*onZUpdate)(int8_t z);
     int report_id;
     void init();
 };
--- a/USBHostMSD/USBHostMSD.cpp	Tue Mar 12 17:23:37 2013 +0000
+++ b/USBHostMSD/USBHostMSD.cpp	Wed Mar 13 10:23:01 2013 +0000
@@ -60,13 +60,12 @@
 
 bool USBHostMSD::connect()
 {
-    U8 i;
 
     if (dev_connected) {
         return true;
     }
 
-    for (i = 0; i < MAX_DEVICE_CONNECTED; i++) {
+    for (uint8_t i = 0; i < MAX_DEVICE_CONNECTED; i++) {
         if ((dev = host->getDevice(i)) != NULL) {
             
             USB_DBG("Trying to connect MSD device\r\n");
--- a/USBHostSerial/USBHostSerial.cpp	Tue Mar 12 17:23:37 2013 +0000
+++ b/USBHostSerial/USBHostSerial.cpp	Wed Mar 13 10:23:01 2013 +0000
@@ -52,7 +52,7 @@
     if (dev_connected) {
         return true;
     }
-    for (int i = 0; i < MAX_DEVICE_CONNECTED; i++) {
+    for (uint8_t i = 0; i < MAX_DEVICE_CONNECTED; i++) {
         if ((dev = host->getDevice(i)) != NULL) {
             
             USB_DBG("Trying to connect serial device\r\n");