Generalized adaptation of the WiiChuk_compat library.
Fork of WiiChuk_compat by
Diff: WiiChuck.cpp
- 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; -} - -