Based on Alfredo Guerrero's WiiClassicControllerReader although I had to do additional decoding of packet. KL25Z talking to Wii classic controller.

Dependencies:   CommonTypes WiiClassicControllerLib mbed

Committer:
RichardE
Date:
Sat Jun 29 21:40:31 2013 +0000
Revision:
0:3c7f660dbc34
Child:
3:21e262cee052
Working I2C communications with genuine Wii classic controller.  KL25Z using PTE0 as SDA and PTE1 as SCL.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 0:3c7f660dbc34 1 /*
RichardE 0:3c7f660dbc34 2 * SOURCE FILE : main.cpp
RichardE 0:3c7f660dbc34 3 *
RichardE 0:3c7f660dbc34 4 * Test program to test out WiiClassicController class.
RichardE 0:3c7f660dbc34 5 *
RichardE 0:3c7f660dbc34 6 */
RichardE 0:3c7f660dbc34 7
RichardE 0:3c7f660dbc34 8 #include "mbed.h"
RichardE 0:3c7f660dbc34 9 #include "WiiClassicController.h"
RichardE 0:3c7f660dbc34 10
RichardE 0:3c7f660dbc34 11 // Define this to dump packet in hex.
RichardE 0:3c7f660dbc34 12 #define DUMP_PACKET
RichardE 0:3c7f660dbc34 13
RichardE 0:3c7f660dbc34 14 #define LOOP_DELAY 1 // seconds
RichardE 0:3c7f660dbc34 15
RichardE 0:3c7f660dbc34 16 // global declarations
RichardE 0:3c7f660dbc34 17 Serial pc(USBTX, USBRX);
RichardE 0:3c7f660dbc34 18
RichardE 0:3c7f660dbc34 19 /* Read from the Wii classic controller and display results on serial port output.
RichardE 0:3c7f660dbc34 20 * @param ctrlr Controller to read from.
RichardE 0:3c7f660dbc34 21 * @param portname Name of port you are reading from.
RichardE 0:3c7f660dbc34 22 */
RichardE 0:3c7f660dbc34 23 static void ReadAndReport( WiiClassicController* const ctrlr, const char* const portname ) {
RichardE 0:3c7f660dbc34 24 if( ctrlr->Read() ) {
RichardE 0:3c7f660dbc34 25
RichardE 0:3c7f660dbc34 26 pc.printf("%s: ", portname);
RichardE 0:3c7f660dbc34 27
RichardE 0:3c7f660dbc34 28 #ifdef DUMP_PACKET
RichardE 0:3c7f660dbc34 29 int bufSize = ctrlr->GetReadBufSize();
RichardE 0:3c7f660dbc34 30 UInt8 *bufPtr = ctrlr->GetReadBuf();
RichardE 0:3c7f660dbc34 31 for (int i = 0; i < bufSize; i++) {
RichardE 0:3c7f660dbc34 32 pc.printf("%x ", bufPtr[i]);
RichardE 0:3c7f660dbc34 33 }
RichardE 0:3c7f660dbc34 34 pc.printf("\r\n");
RichardE 0:3c7f660dbc34 35 #endif
RichardE 0:3c7f660dbc34 36
RichardE 0:3c7f660dbc34 37 pc.printf("\r\nA\tB\tX\tY\tZL\tZR\tDU\tDD\tDL\tDR\tH\r\n");
RichardE 0:3c7f660dbc34 38 pc.printf("%u\t", ctrlr->GetButtonA());
RichardE 0:3c7f660dbc34 39 pc.printf("%u\t", ctrlr->GetButtonB());
RichardE 0:3c7f660dbc34 40 pc.printf("%u\t", ctrlr->GetButtonX());
RichardE 0:3c7f660dbc34 41 pc.printf("%u\t", ctrlr->GetButtonY());
RichardE 0:3c7f660dbc34 42 pc.printf("%u\t", ctrlr->GetButtonZL());
RichardE 0:3c7f660dbc34 43 pc.printf("%u\t", ctrlr->GetButtonZR());
RichardE 0:3c7f660dbc34 44 pc.printf("%u\t", ctrlr->GetButtonUp());
RichardE 0:3c7f660dbc34 45 pc.printf("%u\t", ctrlr->GetButtonDown());
RichardE 0:3c7f660dbc34 46 pc.printf("%u\t", ctrlr->GetButtonLeft());
RichardE 0:3c7f660dbc34 47 pc.printf("%u\t", ctrlr->GetButtonRight());
RichardE 0:3c7f660dbc34 48 pc.printf("%u\t", ctrlr->GetButtonHome());
RichardE 0:3c7f660dbc34 49 pc.printf("\r\nSEL\tSTART\tLT\tLC\tRT\tRC\tLX\tLY\tRX\tRY\r\n");
RichardE 0:3c7f660dbc34 50 pc.printf("%u\t", ctrlr->GetButtonSelect());
RichardE 0:3c7f660dbc34 51 pc.printf("%u\t", ctrlr->GetButtonStart());
RichardE 0:3c7f660dbc34 52 pc.printf("%u\t", ctrlr->GetLeftTrigger());
RichardE 0:3c7f660dbc34 53 pc.printf("%u\t", ctrlr->GetButtonLT());
RichardE 0:3c7f660dbc34 54 pc.printf("%u\t", ctrlr->GetRightTrigger());
RichardE 0:3c7f660dbc34 55 pc.printf("%u\t", ctrlr->GetButtonRT());
RichardE 0:3c7f660dbc34 56 pc.printf("%u\t", ctrlr->GetLJoyX());
RichardE 0:3c7f660dbc34 57 pc.printf("%u\t", ctrlr->GetLJoyY());
RichardE 0:3c7f660dbc34 58 pc.printf("%u\t", ctrlr->GetRJoyX());
RichardE 0:3c7f660dbc34 59 pc.printf("%u\t", ctrlr->GetRJoyY());
RichardE 0:3c7f660dbc34 60 pc.printf("\r\n\n\n");
RichardE 0:3c7f660dbc34 61 }
RichardE 0:3c7f660dbc34 62 else {
RichardE 0:3c7f660dbc34 63 pc.puts( "READ FAILURE\r\n" );
RichardE 0:3c7f660dbc34 64 }
RichardE 0:3c7f660dbc34 65 }
RichardE 0:3c7f660dbc34 66
RichardE 0:3c7f660dbc34 67 /** Main program.
RichardE 0:3c7f660dbc34 68 */
RichardE 0:3c7f660dbc34 69 int main() {
RichardE 0:3c7f660dbc34 70 WiiClassicController ctrlrA( PTE0, PTE1 );
RichardE 0:3c7f660dbc34 71 while (true) {
RichardE 0:3c7f660dbc34 72 ReadAndReport( &ctrlrA, "PORT A" );
RichardE 0:3c7f660dbc34 73 wait(LOOP_DELAY);
RichardE 0:3c7f660dbc34 74 }
RichardE 0:3c7f660dbc34 75 // Never gets here.
RichardE 0:3c7f660dbc34 76 // return EXIT_SUCCESS;
RichardE 0:3c7f660dbc34 77 }