IVSC Project

Dependencies:   USBDevice mbed

Revision:
4:262764d24e4d
Parent:
2:d0778c36d28d
diff -r 0072c2a81472 -r 262764d24e4d DigiPot.cpp
--- a/DigiPot.cpp	Thu Jun 06 22:01:51 2013 +0000
+++ b/DigiPot.cpp	Fri Jun 07 19:59:29 2013 +0000
@@ -7,7 +7,7 @@
 // Enable pins for PCA9
 BusOut Pbus(p14,p13,p12,p11);
 
-//Serial dbg(USBTX, USBRX);
+// This is the pins used for I2C and the base address of the chip
 
 MCP4651 Chip1(p9, p10, 0x1);
 MCP4651 Chip2(p9, p10, 0x2);
@@ -61,12 +61,12 @@
     dbg1.printf("data[3] = %d\n",data[3]);
     dbg1.printf("data[4] = %d\n",data[4]);
     dbg1.printf("data[5] = %d\n",data[5]);
-    if (data[0] != 3) return(1);
+    if (data[0] != 3) return(1); // should not be here
     if (data[1] == 0) return(1); // Zero = bus disable
     if (data[3] == 0) return(1); // Zero disallowed
     Pbus = data[1];
-    if(data[4] > 0) wiper = (data[4] - 1);
-    value = data[5];
+    if(data[4] > 0) wiper = (data[4] - 1); //Wiper on Device is zero based
+    value = data[5]; // Pot value
     
     switch (data[3]) {
         case 1:
@@ -102,3 +102,52 @@
     return(0);
 } // End SetResist
 
+//  Decode the HID report and set the pots
+//  This sets all pots in one string from the same USB message
+//  The HID report is the same format as SetResist except:
+//  the Chip#, Pot#, Value must be set for all 6 pots in the string.
+//  Only the Value is used and Chip# must == The top chip in the string.  
+int SetResistChain( uint8_t *data) {
+
+    dbg1.printf("Starting string set\n");
+    dbg1.printf("data[0] = %d\n",data[0]);
+
+
+    if (data[0] != 6) return(1);
+    if (data[1] == 0) return(1); // Zero = bus disable
+    if (data[3] == 0) return(1); // Zero = disallowed chip #
+    Pbus = data[1];
+    dbg1.printf("Set Pbus = %d\n", data[1]);
+   if (data[3] == 1) {
+            Chip1.SetValue(0, data[5]);
+            Chip1.SetValue(1, data[8]);
+            dbg1.printf("Chip1: Wip0 = %d, Wip1 = %d\n", data[5], data[8]);
+  
+            Chip2.SetValue(0, data[11]);
+            Chip2.SetValue(1, data[14]);
+            dbg1.printf("Chip2: Wip0 = %d, Wip1 = %d\n", data[11], data[14]);
+            
+            Chip3.SetValue(0, data[17]);
+            Chip3.SetValue(1, data[20]);
+            dbg1.printf("Chip3: Wip0 = %d, Wip1 = %d\n", data[17], data[20]);
+    } 
+    
+    if (data[3] == 4) {
+            Chip4.SetValue(0, data[5]);
+            Chip4.SetValue(1, data[8]);
+            dbg1.printf("Chip4: Wip0 = %d, Wip1 = %d\n", data[5], data[8]);
+  
+            Chip5.SetValue(0, data[11]);
+            Chip5.SetValue(1, data[14]);
+            dbg1.printf("Chip5: Wip0 = %d, Wip1 = %d\n", data[11], data[14]);
+            
+            Chip6.SetValue(0, data[17]);
+            Chip6.SetValue(1, data[20]);
+            dbg1.printf("Chip6: Wip0 = %d, Wip1 = %d\n", data[17], data[20]);
+    } 
+    dbg1.printf("Resistor Chain Set Done\n");
+    data[0] = 0;
+    Pbus = 0;
+    return(0);
+} // End SetResistChain
+