Generalized adaptation of the WiiChuk_compat library.

Fork of WiiChuk_compat by Greg Brush

Committer:
d34d
Date:
Sat Dec 20 01:22:58 2014 +0000
Revision:
2:9c4ac1a64c30
Parent:
1:a5dbc8a15c83
Child:
3:fcc2f24d0644
More cleaning up of the original code.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
d34d 1:a5dbc8a15c83 1 /*
d34d 1:a5dbc8a15c83 2 * Copyright (c) 2011 Greg Brush
d34d 2:9c4ac1a64c30 3 * Portions copyright (C) 2014 Clark Scheff
d34d 1:a5dbc8a15c83 4 *
d34d 1:a5dbc8a15c83 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
d34d 1:a5dbc8a15c83 6 * of this software and associated documentation files (the "Software"), to deal
d34d 1:a5dbc8a15c83 7 * in the Software without restriction, including without limitation the rights
d34d 1:a5dbc8a15c83 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
d34d 1:a5dbc8a15c83 9 * copies of the Software, and to permit persons to whom the Software is
d34d 1:a5dbc8a15c83 10 * furnished to do so, subject to the following conditions:
d34d 1:a5dbc8a15c83 11 *
d34d 1:a5dbc8a15c83 12 * The above copyright notice and this permission notice shall be included in
d34d 1:a5dbc8a15c83 13 * all copies or substantial portions of the Software.
d34d 1:a5dbc8a15c83 14 *
d34d 1:a5dbc8a15c83 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
d34d 1:a5dbc8a15c83 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
d34d 1:a5dbc8a15c83 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
d34d 1:a5dbc8a15c83 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
d34d 1:a5dbc8a15c83 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
d34d 1:a5dbc8a15c83 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
d34d 1:a5dbc8a15c83 21 * THE SOFTWARE.
d34d 1:a5dbc8a15c83 22 *
d34d 1:a5dbc8a15c83 23 * This code based on:
d34d 1:a5dbc8a15c83 24 * WiiChuck
d34d 1:a5dbc8a15c83 25 * http://mbed.org/users/FrankWeissenborn/libraries/WiiChuck/lnae1a
d34d 1:a5dbc8a15c83 26 * 2011-03-14
d34d 1:a5dbc8a15c83 27 * New initialization compatible with 3rd party controllers
d34d 1:a5dbc8a15c83 28 *
d34d 1:a5dbc8a15c83 29 */
d34d 1:a5dbc8a15c83 30
d34d 1:a5dbc8a15c83 31 #ifndef __WIICHUCK_H
d34d 1:a5dbc8a15c83 32 #define __WIICHUCK_H
d34d 1:a5dbc8a15c83 33
d34d 1:a5dbc8a15c83 34 #include "mbed.h"
d34d 1:a5dbc8a15c83 35
d34d 1:a5dbc8a15c83 36 #define NUNCHUCK_ADDR 0xA4 // 0x52 << 1
d34d 1:a5dbc8a15c83 37 #define NUNCHUCK_READLEN 0x06 //
d34d 1:a5dbc8a15c83 38 #define I2C_ACK 0
d34d 1:a5dbc8a15c83 39 #define I2C_READ_DELAY 0.0001
d34d 1:a5dbc8a15c83 40
d34d 2:9c4ac1a64c30 41 #define JOY_X_IDX 0
d34d 2:9c4ac1a64c30 42 #define JOY_Y_IDX 1
d34d 2:9c4ac1a64c30 43 #define ACC_X_IDX 2
d34d 2:9c4ac1a64c30 44 #define ACC_Y_IDX 3
d34d 2:9c4ac1a64c30 45 #define ACC_Z_IDX 4
d34d 2:9c4ac1a64c30 46 #define BUTTON_IDX 5
d34d 1:a5dbc8a15c83 47
d34d 1:a5dbc8a15c83 48 // ----------------------------------------------------------------------------
d34d 1:a5dbc8a15c83 49 // Control values
d34d 1:a5dbc8a15c83 50 // ----------------------------------------------------------------------------
d34d 1:a5dbc8a15c83 51 #define BUTTON_PREV_VALUE '1'
d34d 1:a5dbc8a15c83 52 #define BUTTON_NEXT_VALUE '2'
d34d 1:a5dbc8a15c83 53 #define BUTTON_OK_VALUE '3'
d34d 1:a5dbc8a15c83 54 #define BUTTON_CANCEL_VALUE '4'
d34d 1:a5dbc8a15c83 55 #define BUTTON_RESET_VALUE 'r'
d34d 1:a5dbc8a15c83 56 #define BUTTON_VOLUME_PLUS '+'
d34d 1:a5dbc8a15c83 57 #define BUTTON_VOLUME_MINUS '-'
d34d 1:a5dbc8a15c83 58
d34d 1:a5dbc8a15c83 59 typedef struct nunchuck_data_s {
d34d 1:a5dbc8a15c83 60 uint8_t joyX;
d34d 1:a5dbc8a15c83 61 uint8_t joyY;
d34d 1:a5dbc8a15c83 62 uint16_t accX;
d34d 1:a5dbc8a15c83 63 uint16_t accY;
d34d 1:a5dbc8a15c83 64 uint16_t accZ;
d34d 1:a5dbc8a15c83 65 bool buttonC;
d34d 1:a5dbc8a15c83 66 bool buttonZ;
d34d 1:a5dbc8a15c83 67 } nunchuck_data_t;
d34d 1:a5dbc8a15c83 68
d34d 2:9c4ac1a64c30 69 typedef void(*pt2Func)(nunchuck_data_t*);
d34d 1:a5dbc8a15c83 70
d34d 2:9c4ac1a64c30 71 /**
d34d 2:9c4ac1a64c30 72 * Class for interfacing with a Wii Nunchuck (including knock offs)
d34d 2:9c4ac1a64c30 73 */
d34d 1:a5dbc8a15c83 74 class WiiChuck {
d34d 1:a5dbc8a15c83 75 public:
d34d 2:9c4ac1a64c30 76 /**
d34d 2:9c4ac1a64c30 77 * @param data I2C data pin
d34d 2:9c4ac1a64c30 78 * @param clk I2C clock pin
d34d 2:9c4ac1a64c30 79 */
d34d 1:a5dbc8a15c83 80 WiiChuck(PinName data, PinName clk);
d34d 2:9c4ac1a64c30 81
d34d 2:9c4ac1a64c30 82 /**
d34d 2:9c4ac1a64c30 83 * Reads a packet of data from the nunchuck and fills in the supplied data structure.
d34d 2:9c4ac1a64c30 84 *
d34d 2:9c4ac1a64c30 85 * @param data Pointer to the data that will be filled in.
d34d 2:9c4ac1a64c30 86 */
d34d 1:a5dbc8a15c83 87 bool read(nunchuck_data_t* data);
d34d 2:9c4ac1a64c30 88 void attach(pt2Func, float t);
d34d 2:9c4ac1a64c30 89 void detach();
d34d 2:9c4ac1a64c30 90
d34d 2:9c4ac1a64c30 91 bool Error;
d34d 2:9c4ac1a64c30 92
d34d 1:a5dbc8a15c83 93 private:
d34d 1:a5dbc8a15c83 94 I2C _i2c;
d34d 2:9c4ac1a64c30 95 pt2Func _callback;
d34d 1:a5dbc8a15c83 96 Ticker _getValues;
d34d 1:a5dbc8a15c83 97 void getValues();
d34d 2:9c4ac1a64c30 98 nunchuck_data_t _data;
d34d 1:a5dbc8a15c83 99 };
d34d 1:a5dbc8a15c83 100
d34d 1:a5dbc8a15c83 101 #endif