Generalized adaptation of the WiiChuk_compat library.

Fork of WiiChuk_compat by Greg Brush

Revision:
2:9c4ac1a64c30
Parent:
1:a5dbc8a15c83
Child:
3:fcc2f24d0644
--- a/WiiChuck.cpp	Fri Dec 19 18:10:44 2014 +0000
+++ b/WiiChuck.cpp	Sat Dec 20 01:22:58 2014 +0000
@@ -2,7 +2,7 @@
 
 
 
-WiiChuck::WiiChuck(PinName data, PinName clk):_i2c(data, clk) {
+WiiChuck::WiiChuck(PinName data, PinName clk):_i2c(data, clk), _callback(NULL) {
     _i2c.frequency(400000); // should work at 100000 too
     Error = true;
 
@@ -17,9 +17,6 @@
     
     cmd[0] = 0xfb; cmd[1]= 0x00;
     _i2c.write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd));
-    
-    _oldC = 0;
-    _oldZ = 0;
 }
 
 bool WiiChuck::read(nunchuck_data_t* data) {
@@ -35,14 +32,14 @@
     if (_i2c.write(NUNCHUCK_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) {
         wait(I2C_READ_DELAY);
         if (_i2c.read(NUNCHUCK_ADDR, readBuf, sizeof(readBuf)) == I2C_ACK) {      
-            data->joyX = readBuf[Joy_X];
-            data->joyY = readBuf[Joy_Y];
-            data->accX = (uint16_t) readBuf[Acc_X] << 2 + ((readBuf[Button] >> 2) & 0x03);
-            data->accY = (uint16_t) readBuf[Acc_Y] << 2 + ((readBuf[Button] >> 4) & 0x03);
-            data->accZ = (uint16_t) readBuf[Acc_Z] << 2 + ((readBuf[Button] >> 6) & 0x03);
+            data->joyX = readBuf[JOY_X_IDX];
+            data->joyY = readBuf[JOY_Y_IDX];
+            data->accX = (uint16_t) readBuf[ACC_X_IDX] << 2 + ((readBuf[BUTTON_IDX] >> 2) & 0x03);
+            data->accY = (uint16_t) readBuf[ACC_Y_IDX] << 2 + ((readBuf[BUTTON_IDX] >> 4) & 0x03);
+            data->accZ = (uint16_t) readBuf[ACC_Z_IDX] << 2 + ((readBuf[BUTTON_IDX] >> 6) & 0x03);
 
-            data->buttonZ = !(readBuf[Button] & 0x01);
-            data->buttonC = !(readBuf[Button] & 0x02);
+            data->buttonZ = !(readBuf[BUTTON_IDX] & 0x01);
+            data->buttonC = !(readBuf[BUTTON_IDX] & 0x02);
             return true;
         }
     }
@@ -50,75 +47,19 @@
     return false;
 }
 
-void WiiChuck::start()
-{
-    _getValues.attach(this, &WiiChuck::getValues,0.2);
+void WiiChuck::attach(pt2Func function, float t) {
+    _callback = function;
+    _getValues.attach(this, &WiiChuck::getValues, t);
 }
-void WiiChuck::stop()
-{
+void WiiChuck::detach() {
      _getValues.detach();
+     _callback = NULL;
 }
 
-void WiiChuck::getValues()
-{
-    nunchuck_data_t data;
-    
-    bool hasData = read(&data);
+void WiiChuck::getValues() {
+    bool hasData = read(&_data);
   
-    if(hasData)
-    {
-        //analyse
-        if(!_oldC && data.buttonC)
-        {
-            _oldC = true;
-            _callback_input(BUTTON_CANCEL_VALUE);
-            return;
-        }
-        else
-        {
-            _oldC = data.buttonC;
-        }
-        
-        //analyse
-        if(!_oldZ&& data.buttonZ)
-        {
-            _oldZ = true;
-            _callback_input(BUTTON_OK_VALUE);
-            return;
-        }
-        else
-        {
-            _oldZ = data.buttonZ;
-        }
-        
-        if(data.joyY>160)
-        {
-            _callback_input(BUTTON_VOLUME_PLUS);
-            return;
-        }
-        if(data.joyY<80)
-        {
-        
-            _callback_input(BUTTON_VOLUME_MINUS);
-            return;
-        }
-        if(data.joyX>160)
-        {
-            _callback_input(BUTTON_NEXT_VALUE);
-            return;
-        }
-        if(data.joyX<80)
-        {
-        
-            _callback_input(BUTTON_PREV_VALUE);
-            return;
-        }
-        
+    if(hasData) {
+        _callback(&_data);
     }
 }
-void WiiChuck::attach(pt2Func function)
-{
-    _callback_input = function;
-}
-
-