Trackball based on the NXP LPC11U24 and the ADNS-9500

Dependencies:   ADNS9500 USBDevice mbed 25LCxxx_SPI

Revision:
5:c7056267daa7
Parent:
2:72a8d2b11320
Child:
6:4cb2c9a3abcd
--- a/main.cpp	Thu Dec 13 03:10:46 2012 +0000
+++ b/main.cpp	Sun Dec 16 18:38:20 2012 +0000
@@ -3,8 +3,13 @@
 /*
  * type, VID, PID, release
  */
+ 
 USBMouse mouse( REL_MOUSE, 0x192f, 0x0000, 0x0001 ) ;
 
+//We declare a USBHID device. By default input and output reports are 64 bytes long.
+USBHID hid(8, 8);
+
+
 /* 
  * mosi miso sclk ncs FREQ, motion
  */
@@ -37,27 +42,45 @@
     mouse.press(MOUSE_LEFT);
 }
 void btn_l_release(){
-    mouse.release(MOUSE_LEFT);
+    //mouse.release(MOUSE_LEFT);
 }
 
 void btn_m_press(){
-    mouse.press(MOUSE_MIDDLE);
+    //mouse.press(MOUSE_MIDDLE);
 }
 void btn_m_release(){
-    mouse.release(MOUSE_MIDDLE);
+    //mouse.release(MOUSE_MIDDLE);
 }
 
 void btn_r_press(){
-    mouse.press(MOUSE_RIGHT);
+    //mouse.press(MOUSE_RIGHT);
 }
 void btn_r_release(){
-    mouse.release(MOUSE_RIGHT);
+    //mouse.release(MOUSE_RIGHT);
 }
 
-    
+void set( uint8_t attrib, uint8_t *val ){
+    switch (attrib){
+        case CHAT_MOTION_DEFAULT_CPI:
+            default_motion_cpi = *val;
+            break;
+        case CHAT_Z_DEFAULT_CPI:
+            default_z_cpi = *val;
+            break;
+        default:
+            // FIXME: error handling.
+            printf("crap\r\n");
+    }
+}
+
+void get( uint8_t attrib ){
+}
+
 int main(void)
 {
 
+    send_rep.length = 8;
+    
     btn_hr.rise(&btn_hr_press);
     btn_hr.fall(&btn_hr_release);
 
@@ -92,6 +115,22 @@
     
     while (true)
     {
+        //try to read a msg
+        if(hid.readNB(&recv_rep)) {
+            led4 = !led4;
+            switch (recv_rep.data[0]){
+                case CHAT_SET:
+                    set(recv_rep.data[1],&recv_rep.data[2]);
+                    break;
+                case CHAT_GET:
+                    get(recv_rep.data[1]);
+                    break;
+                default:
+                    // FIXME: error handling.
+                    printf("crap\r\n");
+            }
+        }
+            
         if (motion_triggered) {
             led1 = !led1;
             motion_triggered = false;
@@ -103,10 +142,10 @@
              * so we are helping it out with the y axis.
              */
             if( z_axis_active ){
-                mouse.scroll( - dy );
+                //////mouse.scroll( - dy );
             }
             else{
-                mouse.move( dx, - dy ); 
+                //////mouse.move( dx, - dy ); 
             }
         }
     }