Wii Nunchuk module with nasty hacks from debugging on a FRDM-KL25Z

Fork of WiiChuk_compat by Greg Brush

Committer:
eisd
Date:
Mon Jun 08 19:53:32 2015 +0000
Revision:
2:566662f892b1
Parent:
1:7ff30607465f
Child:
3:2431ea9893be
nasty hacks

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gbrush 0:e84a5ccbac19 1 /*
gbrush 0:e84a5ccbac19 2 * Copyright (c) 2011 Greg Brush
gbrush 0:e84a5ccbac19 3 *
gbrush 0:e84a5ccbac19 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
gbrush 0:e84a5ccbac19 5 * of this software and associated documentation files (the "Software"), to deal
gbrush 0:e84a5ccbac19 6 * in the Software without restriction, including without limitation the rights
gbrush 0:e84a5ccbac19 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
gbrush 0:e84a5ccbac19 8 * copies of the Software, and to permit persons to whom the Software is
gbrush 0:e84a5ccbac19 9 * furnished to do so, subject to the following conditions:
gbrush 0:e84a5ccbac19 10 *
gbrush 0:e84a5ccbac19 11 * The above copyright notice and this permission notice shall be included in
gbrush 0:e84a5ccbac19 12 * all copies or substantial portions of the Software.
gbrush 0:e84a5ccbac19 13 *
gbrush 0:e84a5ccbac19 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
gbrush 0:e84a5ccbac19 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
gbrush 0:e84a5ccbac19 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
gbrush 0:e84a5ccbac19 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
gbrush 0:e84a5ccbac19 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
gbrush 0:e84a5ccbac19 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
gbrush 0:e84a5ccbac19 20 * THE SOFTWARE.
gbrush 0:e84a5ccbac19 21 *
gbrush 0:e84a5ccbac19 22 * This code based on:
gbrush 0:e84a5ccbac19 23 * WiiChuck
gbrush 0:e84a5ccbac19 24 * http://mbed.org/users/FrankWeissenborn/libraries/WiiChuck/lnae1a
gbrush 0:e84a5ccbac19 25 * 2011-03-14
gbrush 0:e84a5ccbac19 26 * New initialization compatible with 3rd party controllers
gbrush 0:e84a5ccbac19 27 *
gbrush 0:e84a5ccbac19 28 */
gbrush 0:e84a5ccbac19 29
gbrush 0:e84a5ccbac19 30 #ifndef __WIICHUCK_H
gbrush 0:e84a5ccbac19 31 #define __WIICHUCK_H
gbrush 0:e84a5ccbac19 32
gbrush 0:e84a5ccbac19 33 #include "mbed.h"
gbrush 0:e84a5ccbac19 34
gbrush 0:e84a5ccbac19 35 #define NUNCHUCK_ADDR 0xA4 // 0x52 << 1
gbrush 0:e84a5ccbac19 36 #define NUNCHUCK_READLEN 0x06 //
gbrush 0:e84a5ccbac19 37 #define I2C_ACK 0
gbrush 0:e84a5ccbac19 38 #define I2C_READ_DELAY 0.0001
gbrush 0:e84a5ccbac19 39
gbrush 0:e84a5ccbac19 40 #define Joy_X 0
gbrush 0:e84a5ccbac19 41 #define Joy_Y 1
gbrush 0:e84a5ccbac19 42 #define Acc_X 2
gbrush 0:e84a5ccbac19 43 #define Acc_Y 3
gbrush 0:e84a5ccbac19 44 #define Acc_Z 4
gbrush 0:e84a5ccbac19 45 #define Button 5
gbrush 0:e84a5ccbac19 46
gbrush 0:e84a5ccbac19 47 // ----------------------------------------------------------------------------
gbrush 0:e84a5ccbac19 48 // Control values
gbrush 0:e84a5ccbac19 49 // ----------------------------------------------------------------------------
gbrush 0:e84a5ccbac19 50 #define BUTTON_PREV_VALUE '1'
gbrush 0:e84a5ccbac19 51 #define BUTTON_NEXT_VALUE '2'
gbrush 0:e84a5ccbac19 52 #define BUTTON_OK_VALUE '3'
gbrush 0:e84a5ccbac19 53 #define BUTTON_CANCEL_VALUE '4'
gbrush 0:e84a5ccbac19 54 #define BUTTON_RESET_VALUE 'r'
gbrush 0:e84a5ccbac19 55 #define BUTTON_VOLUME_PLUS '+'
gbrush 0:e84a5ccbac19 56 #define BUTTON_VOLUME_MINUS '-'
gbrush 0:e84a5ccbac19 57
gbrush 0:e84a5ccbac19 58 typedef void(*pt2Func)(int);
gbrush 0:e84a5ccbac19 59
eisd 2:566662f892b1 60 struct nunchuk {
eisd 2:566662f892b1 61 uint8_t X, Y, Z, C;
eisd 2:566662f892b1 62 uint16_t aX, aY, aZ;
eisd 2:566662f892b1 63 };
eisd 2:566662f892b1 64
gbrush 0:e84a5ccbac19 65 class WiiChuck {
gbrush 0:e84a5ccbac19 66 public:
gbrush 0:e84a5ccbac19 67 bool Error;
eisd 1:7ff30607465f 68 WiiChuck(PinName data, PinName clk, Stream &pc);
eisd 2:566662f892b1 69 bool Read(uint8_t* joyX, uint8_t* joyY, uint16_t* accX, uint16_t* accY, uint16_t* accZ, uint8_t* buttonC, uint8_t* buttonZ);
gbrush 0:e84a5ccbac19 70 void start();
gbrush 0:e84a5ccbac19 71 void stop();
gbrush 0:e84a5ccbac19 72 void attach(pt2Func function);
gbrush 0:e84a5ccbac19 73 private:
gbrush 0:e84a5ccbac19 74 I2C _i2c;
gbrush 0:e84a5ccbac19 75 pt2Func _callback_input;
gbrush 0:e84a5ccbac19 76 Ticker _getValues;
gbrush 0:e84a5ccbac19 77 void getValues();
gbrush 0:e84a5ccbac19 78 int _oldC;
gbrush 0:e84a5ccbac19 79 int _oldZ;
eisd 1:7ff30607465f 80 Stream &pc;
gbrush 0:e84a5ccbac19 81
gbrush 0:e84a5ccbac19 82 };
gbrush 0:e84a5ccbac19 83
gbrush 0:e84a5ccbac19 84 #endif