A program that enables communication between one or two Wii Classic Controllers and the mbed via I2C. Includes a test program that utilizes the PIC Serial Analyzer.
main.cpp@0:4e399a907c98, 2011-02-12 (annotated)
- Committer:
- alfredog83
- Date:
- Sat Feb 12 18:01:06 2011 +0000
- Revision:
- 0:4e399a907c98
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alfredog83 | 0:4e399a907c98 | 1 | /* |
alfredog83 | 0:4e399a907c98 | 2 | * WiiClassicControllerReader. A program allowing the output of one or two |
alfredog83 | 0:4e399a907c98 | 3 | * Wii Classic Controllers to be read via I2C and decoded for use, using the mbed |
alfredog83 | 0:4e399a907c98 | 4 | * microcontroller and its associated libraries. |
alfredog83 | 0:4e399a907c98 | 5 | * |
alfredog83 | 0:4e399a907c98 | 6 | * Written by Alfredo Guerrero <alfredog83@gmail.com> for the mbedGC open-source |
alfredog83 | 0:4e399a907c98 | 7 | * game console <http://www.mbedgc.com>. Based on the original code for |
alfredog83 | 0:4e399a907c98 | 8 | * the WiiNunchuckReader written by Petras Saduikis <petras@petras.co.uk>. |
alfredog83 | 0:4e399a907c98 | 9 | * |
alfredog83 | 0:4e399a907c98 | 10 | * This file is part of WiiClassicControllerReader. |
alfredog83 | 0:4e399a907c98 | 11 | * |
alfredog83 | 0:4e399a907c98 | 12 | * WiiClassicControllerReader is free software: you can redistribute it and/or modify |
alfredog83 | 0:4e399a907c98 | 13 | * it under the terms of the GNU General Public License as published by |
alfredog83 | 0:4e399a907c98 | 14 | * the Free Software Foundation, either version 3 of the License, or |
alfredog83 | 0:4e399a907c98 | 15 | * (at your option) any later version. |
alfredog83 | 0:4e399a907c98 | 16 | * |
alfredog83 | 0:4e399a907c98 | 17 | * WiiClassicControllerReader is distributed in the hope that it will be useful, |
alfredog83 | 0:4e399a907c98 | 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
alfredog83 | 0:4e399a907c98 | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
alfredog83 | 0:4e399a907c98 | 20 | * GNU General Public License for more details. |
alfredog83 | 0:4e399a907c98 | 21 | * |
alfredog83 | 0:4e399a907c98 | 22 | * You can find a copy of the GNU General Public License at <http://www.gnu.org/licenses/>. |
alfredog83 | 0:4e399a907c98 | 23 | */ |
alfredog83 | 0:4e399a907c98 | 24 | |
alfredog83 | 0:4e399a907c98 | 25 | #include "I2CConfig.h" |
alfredog83 | 0:4e399a907c98 | 26 | #include "WiiClassicControllerReader.h" |
alfredog83 | 0:4e399a907c98 | 27 | |
alfredog83 | 0:4e399a907c98 | 28 | #define LOOP_DELAY 1 // seconds |
alfredog83 | 0:4e399a907c98 | 29 | |
alfredog83 | 0:4e399a907c98 | 30 | // global declarations |
alfredog83 | 0:4e399a907c98 | 31 | Serial serial(USBTX, USBRX); |
alfredog83 | 0:4e399a907c98 | 32 | |
alfredog83 | 0:4e399a907c98 | 33 | void ReadAndReport(WiiClassicControllerReader* const ctrlr, const char* const portname) |
alfredog83 | 0:4e399a907c98 | 34 | { |
alfredog83 | 0:4e399a907c98 | 35 | int bufSize = 0; |
alfredog83 | 0:4e399a907c98 | 36 | char* bufPtr = NULL; |
alfredog83 | 0:4e399a907c98 | 37 | bool debug = true; |
alfredog83 | 0:4e399a907c98 | 38 | |
alfredog83 | 0:4e399a907c98 | 39 | ctrlr->RequestRead(); |
alfredog83 | 0:4e399a907c98 | 40 | serial.printf("%s: ", portname); |
alfredog83 | 0:4e399a907c98 | 41 | |
alfredog83 | 0:4e399a907c98 | 42 | if (debug) |
alfredog83 | 0:4e399a907c98 | 43 | { |
alfredog83 | 0:4e399a907c98 | 44 | bufSize = ctrlr->getBufferSize(); |
alfredog83 | 0:4e399a907c98 | 45 | bufPtr = ctrlr->getReadBuf(); |
alfredog83 | 0:4e399a907c98 | 46 | if (bufPtr != NULL) |
alfredog83 | 0:4e399a907c98 | 47 | { |
alfredog83 | 0:4e399a907c98 | 48 | for (int i = 0; i < bufSize; i++) |
alfredog83 | 0:4e399a907c98 | 49 | { |
alfredog83 | 0:4e399a907c98 | 50 | serial.printf("%x ", bufPtr[i]); |
alfredog83 | 0:4e399a907c98 | 51 | } |
alfredog83 | 0:4e399a907c98 | 52 | serial.printf("\r\n"); |
alfredog83 | 0:4e399a907c98 | 53 | } |
alfredog83 | 0:4e399a907c98 | 54 | } |
alfredog83 | 0:4e399a907c98 | 55 | serial.printf("\r\nA\tB\tX\tY\tZL\tZR\tDU\tDD\tDL\tDR\tH\r\n"); |
alfredog83 | 0:4e399a907c98 | 56 | serial.printf("%d\t", ctrlr->getButtonA()); |
alfredog83 | 0:4e399a907c98 | 57 | serial.printf("%d\t", ctrlr->getButtonB()); |
alfredog83 | 0:4e399a907c98 | 58 | serial.printf("%d\t", ctrlr->getButtonX()); |
alfredog83 | 0:4e399a907c98 | 59 | serial.printf("%d\t", ctrlr->getButtonY()); |
alfredog83 | 0:4e399a907c98 | 60 | serial.printf("%d\t", ctrlr->getButtonZL()); |
alfredog83 | 0:4e399a907c98 | 61 | serial.printf("%d\t", ctrlr->getButtonZR()); |
alfredog83 | 0:4e399a907c98 | 62 | serial.printf("%d\t", ctrlr->getButtonDU()); |
alfredog83 | 0:4e399a907c98 | 63 | serial.printf("%d\t", ctrlr->getButtonDD()); |
alfredog83 | 0:4e399a907c98 | 64 | serial.printf("%d\t", ctrlr->getButtonDL()); |
alfredog83 | 0:4e399a907c98 | 65 | serial.printf("%d\t", ctrlr->getButtonDR()); |
alfredog83 | 0:4e399a907c98 | 66 | serial.printf("%d\t", ctrlr->getButtonHOME()); |
alfredog83 | 0:4e399a907c98 | 67 | serial.printf("\r\nSEL\tSTART\tLT\tLC\tRT\tRC\tLX\tLY\tRX\tRY\r\n"); |
alfredog83 | 0:4e399a907c98 | 68 | serial.printf("%d\t", ctrlr->getButtonSELECT()); |
alfredog83 | 0:4e399a907c98 | 69 | serial.printf("%d\t", ctrlr->getButtonSTART()); |
alfredog83 | 0:4e399a907c98 | 70 | serial.printf("%d\t", ctrlr->getButtonLT()); |
alfredog83 | 0:4e399a907c98 | 71 | serial.printf("%d\t", ctrlr->getButtonLC()); |
alfredog83 | 0:4e399a907c98 | 72 | serial.printf("%d\t", ctrlr->getButtonRT()); |
alfredog83 | 0:4e399a907c98 | 73 | serial.printf("%d\t", ctrlr->getButtonRC()); |
alfredog83 | 0:4e399a907c98 | 74 | serial.printf("%d\t", ctrlr->getLJoyX()); |
alfredog83 | 0:4e399a907c98 | 75 | serial.printf("%d\t", ctrlr->getLJoyY()); |
alfredog83 | 0:4e399a907c98 | 76 | serial.printf("%d\t", ctrlr->getRJoyX()); |
alfredog83 | 0:4e399a907c98 | 77 | serial.printf("%d\t", ctrlr->getRJoyY()); |
alfredog83 | 0:4e399a907c98 | 78 | serial.printf("\r\n\n\n"); |
alfredog83 | 0:4e399a907c98 | 79 | } |
alfredog83 | 0:4e399a907c98 | 80 | |
alfredog83 | 0:4e399a907c98 | 81 | int main() |
alfredog83 | 0:4e399a907c98 | 82 | { |
alfredog83 | 0:4e399a907c98 | 83 | WiiClassicControllerReader ctrlrA(I2CPort_A::SDA, I2CPort_A::SCL); |
alfredog83 | 0:4e399a907c98 | 84 | // WiiClassicControllerReader ctrlrB(I2CPort_B::SDA, I2CPort_B::SCL); |
alfredog83 | 0:4e399a907c98 | 85 | |
alfredog83 | 0:4e399a907c98 | 86 | while (true) |
alfredog83 | 0:4e399a907c98 | 87 | { |
alfredog83 | 0:4e399a907c98 | 88 | ReadAndReport(&ctrlrA, "PORT A"); |
alfredog83 | 0:4e399a907c98 | 89 | // ReadAndReport(&ctrlrB, "PORT B"); |
alfredog83 | 0:4e399a907c98 | 90 | |
alfredog83 | 0:4e399a907c98 | 91 | wait(LOOP_DELAY); |
alfredog83 | 0:4e399a907c98 | 92 | } |
alfredog83 | 0:4e399a907c98 | 93 | |
alfredog83 | 0:4e399a907c98 | 94 | return EXIT_SUCCESS; |
alfredog83 | 0:4e399a907c98 | 95 | } |