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.

Dependencies:   mbed

Committer:
alfredog83
Date:
Sat Feb 12 18:01:06 2011 +0000
Revision:
0:4e399a907c98

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }