Wii Classic Controller /Pro のライブラリです。
Dependents: WiiClassicController_test
WiiClassicController.cpp@0:726fea07d08f, 2016-06-16 (annotated)
- Committer:
- kambara1415
- Date:
- Thu Jun 16 03:39:36 2016 +0000
- Revision:
- 0:726fea07d08f
wii classic controller???????????
Who changed what in which revision?
User | Revision | Line number | New 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 | } |