Wii Classic Controller /Pro のライブラリです。

Dependents:   WiiClassicController_test

Committer:
kambara1415
Date:
Thu Jun 16 03:39:36 2016 +0000
Revision:
0:726fea07d08f
wii classic controller???????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kambara1415 0:726fea07d08f 1 #include "mbed.h"
kambara1415 0:726fea07d08f 2 #include "WiiClassicController.h"
kambara1415 0:726fea07d08f 3
kambara1415 0:726fea07d08f 4 WiiClassicController::WiiClassicController(PinName p_sda, PinName p_scl):i2c(p_sda, p_scl)
kambara1415 0:726fea07d08f 5 {
kambara1415 0:726fea07d08f 6 WiiClaInitFlag = init();
kambara1415 0:726fea07d08f 7 timer.start();
kambara1415 0:726fea07d08f 8 }
kambara1415 0:726fea07d08f 9
kambara1415 0:726fea07d08f 10
kambara1415 0:726fea07d08f 11 bool WiiClassicController::init()
kambara1415 0:726fea07d08f 12 {
kambara1415 0:726fea07d08f 13 bool result = false;
kambara1415 0:726fea07d08f 14 unsigned char cmd[] = {CLASSIC_REGADDR, 0x00};
kambara1415 0:726fea07d08f 15 if (i2c.write(CLASSIC_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) {
kambara1415 0:726fea07d08f 16 result = true;
kambara1415 0:726fea07d08f 17 }
kambara1415 0:726fea07d08f 18 return result;
kambara1415 0:726fea07d08f 19 }
kambara1415 0:726fea07d08f 20
kambara1415 0:726fea07d08f 21
kambara1415 0:726fea07d08f 22 void WiiClassicController::read()
kambara1415 0:726fea07d08f 23 {
kambara1415 0:726fea07d08f 24 int i;
kambara1415 0:726fea07d08f 25
kambara1415 0:726fea07d08f 26 if(timer.read_ms() < 50) return;
kambara1415 0:726fea07d08f 27
kambara1415 0:726fea07d08f 28 if(!WiiClaInitFlag) {
kambara1415 0:726fea07d08f 29 WiiClaInitFlag = init();
kambara1415 0:726fea07d08f 30 }
kambara1415 0:726fea07d08f 31
kambara1415 0:726fea07d08f 32 if(WiiClaInitFlag) {
kambara1415 0:726fea07d08f 33 const unsigned char cmd[] = {0x00};
kambara1415 0:726fea07d08f 34 if (i2c.write(CLASSIC_ADDR, (const char*)cmd, sizeof(cmd)) == I2C_ACK) {
kambara1415 0:726fea07d08f 35 wait(I2C_READ_DELAY);
kambara1415 0:726fea07d08f 36 if (i2c.read(CLASSIC_ADDR, readBuf, sizeof(readBuf)) == I2C_ACK) {
kambara1415 0:726fea07d08f 37 for(i = 0; i < CLASSIC_READLEN; ++i) {
kambara1415 0:726fea07d08f 38 readBuf[i] = (readBuf[i] ^ 0x17) + 0x17;
kambara1415 0:726fea07d08f 39 }
kambara1415 0:726fea07d08f 40
kambara1415 0:726fea07d08f 41 if(readBuf[0] & 0x80) joyRX = 0x10;
kambara1415 0:726fea07d08f 42 else joyRX = 0;
kambara1415 0:726fea07d08f 43
kambara1415 0:726fea07d08f 44 if(readBuf[0] & 0x40) joyRX += 0x08;
kambara1415 0:726fea07d08f 45 if(readBuf[1] & 0x80) joyRX += 0x04;
kambara1415 0:726fea07d08f 46 if(readBuf[1] & 0x40) joyRX += 0x02;
kambara1415 0:726fea07d08f 47 if(readBuf[1] & 0x80) joyRX += 0x01;
kambara1415 0:726fea07d08f 48
kambara1415 0:726fea07d08f 49 joyRY = readBuf[2] & 0x1F;
kambara1415 0:726fea07d08f 50 joyLX = readBuf[0] & 0x3F;
kambara1415 0:726fea07d08f 51 joyLY = readBuf[1] & 0x3F;
kambara1415 0:726fea07d08f 52
kambara1415 0:726fea07d08f 53
kambara1415 0:726fea07d08f 54 if(readBuf[4] & 0x80) {
kambara1415 0:726fea07d08f 55 buttonDR = 0;
kambara1415 0:726fea07d08f 56 } else {
kambara1415 0:726fea07d08f 57 buttonDR = 1;
kambara1415 0:726fea07d08f 58 }
kambara1415 0:726fea07d08f 59
kambara1415 0:726fea07d08f 60 if(readBuf[4] & 0x40) {
kambara1415 0:726fea07d08f 61 buttonDD = 0;
kambara1415 0:726fea07d08f 62 } else {
kambara1415 0:726fea07d08f 63 buttonDD = 1;
kambara1415 0:726fea07d08f 64 }
kambara1415 0:726fea07d08f 65
kambara1415 0:726fea07d08f 66 if(readBuf[4] & 0x20) {
kambara1415 0:726fea07d08f 67 buttonL = 0;
kambara1415 0:726fea07d08f 68 } else {
kambara1415 0:726fea07d08f 69 buttonL = 1;
kambara1415 0:726fea07d08f 70 }
kambara1415 0:726fea07d08f 71
kambara1415 0:726fea07d08f 72 if(readBuf[4] & 0x10) {
kambara1415 0:726fea07d08f 73 buttonMinus = 0;
kambara1415 0:726fea07d08f 74 } else {
kambara1415 0:726fea07d08f 75 buttonMinus = 1;
kambara1415 0:726fea07d08f 76 }
kambara1415 0:726fea07d08f 77
kambara1415 0:726fea07d08f 78 if(readBuf[4] & 0x08) {
kambara1415 0:726fea07d08f 79 buttonHome = 0;
kambara1415 0:726fea07d08f 80 } else {
kambara1415 0:726fea07d08f 81 buttonHome = 1;
kambara1415 0:726fea07d08f 82 }
kambara1415 0:726fea07d08f 83
kambara1415 0:726fea07d08f 84 if(readBuf[4] & 0x04) {
kambara1415 0:726fea07d08f 85 buttonPlus = 0;
kambara1415 0:726fea07d08f 86 } else {
kambara1415 0:726fea07d08f 87 buttonPlus = 1;
kambara1415 0:726fea07d08f 88 }
kambara1415 0:726fea07d08f 89
kambara1415 0:726fea07d08f 90 if(readBuf[4] & 0x02) {
kambara1415 0:726fea07d08f 91 buttonR = 0;
kambara1415 0:726fea07d08f 92 } else {
kambara1415 0:726fea07d08f 93 buttonR = 1;
kambara1415 0:726fea07d08f 94 }
kambara1415 0:726fea07d08f 95
kambara1415 0:726fea07d08f 96 if(readBuf[5] & 0x80) {
kambara1415 0:726fea07d08f 97 buttonZL = 0;
kambara1415 0:726fea07d08f 98 } else {
kambara1415 0:726fea07d08f 99 buttonZL = 1;
kambara1415 0:726fea07d08f 100 }
kambara1415 0:726fea07d08f 101
kambara1415 0:726fea07d08f 102 if(readBuf[5] & 0x40) {
kambara1415 0:726fea07d08f 103 buttonB = 0;
kambara1415 0:726fea07d08f 104 } else {
kambara1415 0:726fea07d08f 105 buttonB = 1;
kambara1415 0:726fea07d08f 106 }
kambara1415 0:726fea07d08f 107
kambara1415 0:726fea07d08f 108 if(readBuf[5] & 0x20) {
kambara1415 0:726fea07d08f 109 buttonY = 0;
kambara1415 0:726fea07d08f 110 } else {
kambara1415 0:726fea07d08f 111 buttonY = 1;
kambara1415 0:726fea07d08f 112 }
kambara1415 0:726fea07d08f 113
kambara1415 0:726fea07d08f 114 if(readBuf[5] & 0x10) {
kambara1415 0:726fea07d08f 115 buttonA = 0;
kambara1415 0:726fea07d08f 116 } else {
kambara1415 0:726fea07d08f 117 buttonA = 1;
kambara1415 0:726fea07d08f 118 }
kambara1415 0:726fea07d08f 119
kambara1415 0:726fea07d08f 120 if(readBuf[5] & 0x08) {
kambara1415 0:726fea07d08f 121 buttonX = 0;
kambara1415 0:726fea07d08f 122 } else {
kambara1415 0:726fea07d08f 123 buttonX = 1;
kambara1415 0:726fea07d08f 124 }
kambara1415 0:726fea07d08f 125
kambara1415 0:726fea07d08f 126 if(readBuf[5] & 0x04) {
kambara1415 0:726fea07d08f 127 buttonZR = 0;
kambara1415 0:726fea07d08f 128 } else {
kambara1415 0:726fea07d08f 129 buttonZR = 1;
kambara1415 0:726fea07d08f 130 }
kambara1415 0:726fea07d08f 131
kambara1415 0:726fea07d08f 132 if(readBuf[5] & 0x02) {
kambara1415 0:726fea07d08f 133 buttonDL = 0;
kambara1415 0:726fea07d08f 134 } else {
kambara1415 0:726fea07d08f 135 buttonDL = 1;
kambara1415 0:726fea07d08f 136 }
kambara1415 0:726fea07d08f 137
kambara1415 0:726fea07d08f 138 if(readBuf[5] & 0x01) {
kambara1415 0:726fea07d08f 139 buttonDU = 0;
kambara1415 0:726fea07d08f 140 } else {
kambara1415 0:726fea07d08f 141 buttonDU = 1;
kambara1415 0:726fea07d08f 142 }
kambara1415 0:726fea07d08f 143 }
kambara1415 0:726fea07d08f 144 }
kambara1415 0:726fea07d08f 145 }
kambara1415 0:726fea07d08f 146 timer.reset();
kambara1415 0:726fea07d08f 147 }
kambara1415 0:726fea07d08f 148
kambara1415 0:726fea07d08f 149
kambara1415 0:726fea07d08f 150 unsigned char WiiClassicController::joy_RX()
kambara1415 0:726fea07d08f 151 {
kambara1415 0:726fea07d08f 152 read();
kambara1415 0:726fea07d08f 153 return joyRX;
kambara1415 0:726fea07d08f 154 }
kambara1415 0:726fea07d08f 155
kambara1415 0:726fea07d08f 156
kambara1415 0:726fea07d08f 157 unsigned char WiiClassicController::joy_RY()
kambara1415 0:726fea07d08f 158 {
kambara1415 0:726fea07d08f 159 read();
kambara1415 0:726fea07d08f 160 return joyRY;
kambara1415 0:726fea07d08f 161 }
kambara1415 0:726fea07d08f 162
kambara1415 0:726fea07d08f 163 unsigned char WiiClassicController::joy_LX()
kambara1415 0:726fea07d08f 164 {
kambara1415 0:726fea07d08f 165 read();
kambara1415 0:726fea07d08f 166 return joyLX;
kambara1415 0:726fea07d08f 167 }
kambara1415 0:726fea07d08f 168
kambara1415 0:726fea07d08f 169
kambara1415 0:726fea07d08f 170 unsigned char WiiClassicController::joy_LY()
kambara1415 0:726fea07d08f 171 {
kambara1415 0:726fea07d08f 172 read();
kambara1415 0:726fea07d08f 173 return joyLY;
kambara1415 0:726fea07d08f 174 }
kambara1415 0:726fea07d08f 175
kambara1415 0:726fea07d08f 176 bool WiiClassicController::button_A()
kambara1415 0:726fea07d08f 177 {
kambara1415 0:726fea07d08f 178 read();
kambara1415 0:726fea07d08f 179 return buttonA;
kambara1415 0:726fea07d08f 180 }
kambara1415 0:726fea07d08f 181
kambara1415 0:726fea07d08f 182 bool WiiClassicController::button_B()
kambara1415 0:726fea07d08f 183 {
kambara1415 0:726fea07d08f 184 read();
kambara1415 0:726fea07d08f 185 return buttonB;
kambara1415 0:726fea07d08f 186 }
kambara1415 0:726fea07d08f 187
kambara1415 0:726fea07d08f 188 bool WiiClassicController::button_X()
kambara1415 0:726fea07d08f 189 {
kambara1415 0:726fea07d08f 190 read();
kambara1415 0:726fea07d08f 191 return buttonX;
kambara1415 0:726fea07d08f 192 }
kambara1415 0:726fea07d08f 193
kambara1415 0:726fea07d08f 194 bool WiiClassicController::button_Y()
kambara1415 0:726fea07d08f 195 {
kambara1415 0:726fea07d08f 196 read();
kambara1415 0:726fea07d08f 197 return buttonY;
kambara1415 0:726fea07d08f 198 }
kambara1415 0:726fea07d08f 199
kambara1415 0:726fea07d08f 200 bool WiiClassicController::button_minus()
kambara1415 0:726fea07d08f 201 {
kambara1415 0:726fea07d08f 202 read();
kambara1415 0:726fea07d08f 203 return buttonMinus;
kambara1415 0:726fea07d08f 204 }
kambara1415 0:726fea07d08f 205
kambara1415 0:726fea07d08f 206 bool WiiClassicController::button_plus()
kambara1415 0:726fea07d08f 207 {
kambara1415 0:726fea07d08f 208 read();
kambara1415 0:726fea07d08f 209 return buttonPlus;
kambara1415 0:726fea07d08f 210 }
kambara1415 0:726fea07d08f 211
kambara1415 0:726fea07d08f 212 bool WiiClassicController::button_home()
kambara1415 0:726fea07d08f 213 {
kambara1415 0:726fea07d08f 214 read();
kambara1415 0:726fea07d08f 215 return buttonHome;
kambara1415 0:726fea07d08f 216 }
kambara1415 0:726fea07d08f 217
kambara1415 0:726fea07d08f 218 bool WiiClassicController::button_R()
kambara1415 0:726fea07d08f 219 {
kambara1415 0:726fea07d08f 220 read();
kambara1415 0:726fea07d08f 221 return buttonR;
kambara1415 0:726fea07d08f 222 }
kambara1415 0:726fea07d08f 223
kambara1415 0:726fea07d08f 224 bool WiiClassicController::button_L()
kambara1415 0:726fea07d08f 225 {
kambara1415 0:726fea07d08f 226 read();
kambara1415 0:726fea07d08f 227 return buttonL;
kambara1415 0:726fea07d08f 228 }
kambara1415 0:726fea07d08f 229
kambara1415 0:726fea07d08f 230 bool WiiClassicController::button_ZL()
kambara1415 0:726fea07d08f 231 {
kambara1415 0:726fea07d08f 232 read();
kambara1415 0:726fea07d08f 233 return buttonZL;
kambara1415 0:726fea07d08f 234 }
kambara1415 0:726fea07d08f 235
kambara1415 0:726fea07d08f 236 bool WiiClassicController::button_ZR()
kambara1415 0:726fea07d08f 237 {
kambara1415 0:726fea07d08f 238 read();
kambara1415 0:726fea07d08f 239 return buttonZR;
kambara1415 0:726fea07d08f 240 }
kambara1415 0:726fea07d08f 241
kambara1415 0:726fea07d08f 242 bool WiiClassicController::button_DU()
kambara1415 0:726fea07d08f 243 {
kambara1415 0:726fea07d08f 244 read();
kambara1415 0:726fea07d08f 245 return buttonDU;
kambara1415 0:726fea07d08f 246 }
kambara1415 0:726fea07d08f 247
kambara1415 0:726fea07d08f 248 bool WiiClassicController::button_DD()
kambara1415 0:726fea07d08f 249 {
kambara1415 0:726fea07d08f 250 read();
kambara1415 0:726fea07d08f 251 return buttonDD;
kambara1415 0:726fea07d08f 252 }
kambara1415 0:726fea07d08f 253
kambara1415 0:726fea07d08f 254 bool WiiClassicController::button_DL()
kambara1415 0:726fea07d08f 255 {
kambara1415 0:726fea07d08f 256 read();
kambara1415 0:726fea07d08f 257 return buttonDL;
kambara1415 0:726fea07d08f 258 }
kambara1415 0:726fea07d08f 259
kambara1415 0:726fea07d08f 260 bool WiiClassicController::button_DR()
kambara1415 0:726fea07d08f 261 {
kambara1415 0:726fea07d08f 262 read();
kambara1415 0:726fea07d08f 263 return buttonDR;
kambara1415 0:726fea07d08f 264 }