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

main.cpp

Committer:
RichardE
Date:
2013-06-30
Revision:
3:21e262cee052
Parent:
0:3c7f660dbc34
Child:
4:71f5e3d2b0c6

File content as of revision 3:21e262cee052:

/*
 * SOURCE FILE : main.cpp
 *
 * Test program to test out WiiClassicController class.
 *
 */
 
#include "mbed.h"
#include "WiiClassicControllerWithCalibration.h"

// Define this to dump packet in hex.
#define DUMP_PACKET

#define LOOP_DELAY    1    // seconds

// global declarations
Serial pc(USBTX, USBRX);

/* Read from the Wii classic controller and display results on serial port output.
 * @param ctrlr Controller to read from.
 * @param portname Name of port you are reading from.
 */
static void ReadAndReport( WiiClassicControllerWithCalibration *ctrlr, const char *portname ) {
    if( ctrlr->Read() ) {

        pc.printf( "%c[H", 27 );                            // VT100 home cursor
        pc.printf("%s: ", portname);
    
        #ifdef DUMP_PACKET
            int bufSize = ctrlr->GetReadBufSize();
            UInt8 *bufPtr = ctrlr->GetReadBuf();
            for (int i = 0; i < bufSize; i++) {
                pc.printf("%x ", bufPtr[i]);
            }
            pc.printf("\r\n");
        #endif
        
        pc.printf("A=%u\r\n", ctrlr->GetButtonA());
        pc.printf("B=%u\r\n", ctrlr->GetButtonB());
        pc.printf("X=%u\r\n", ctrlr->GetButtonX());
        pc.printf("Y=%u\r\n", ctrlr->GetButtonY());
        pc.printf("ZL=%u\r\n", ctrlr->GetButtonZL());
        pc.printf("ZR=%u\r\n", ctrlr->GetButtonZR());
        pc.printf("Up=%u\r\n", ctrlr->GetButtonUp());
        pc.printf("Down=%u\r\n", ctrlr->GetButtonDown());
        pc.printf("Left=%u\r\n", ctrlr->GetButtonLeft());
        pc.printf("Right=%u\r\n", ctrlr->GetButtonRight());
        pc.printf("Home=%u\r\n", ctrlr->GetButtonHome());
        pc.printf("Select=%u\r\n", ctrlr->GetButtonSelect());
        pc.printf("Start=%u\r\n", ctrlr->GetButtonStart());
        pc.printf("LeftTrigger=%2u (%5.3f)\r\n", ctrlr->GetLeftTrigger(), ctrlr->GetCalLeftTrigger() );
        pc.printf("ButtonLT=%u\r\n", ctrlr->GetButtonLT());
        pc.printf("RightTrigger=%2u (%5.3f)\r\n", ctrlr->GetRightTrigger(), ctrlr->GetCalRightTrigger() );
        pc.printf("ButtonRT=%u\r\n", ctrlr->GetButtonRT());
        pc.printf("LJoyX=%2u (%5.3f)\r\n", ctrlr->GetLJoyX(), ctrlr->GetCalLJoyX() );
        pc.printf("LJoyY=%2u (%5.3f)\r\n", ctrlr->GetLJoyY(), ctrlr->GetCalLJoyY() );
        pc.printf("RJoyX=%2u (%5.3f)\r\n", ctrlr->GetRJoyX(), ctrlr->GetCalRJoyX() );
        pc.printf("RJoyY=%2u (%5.3f)\r\n", ctrlr->GetRJoyY(), ctrlr->GetCalRJoyY() );
    }
    else {
        pc.puts( "READ FAILURE\r\n" );
    }
}

/** Main program.
 */
int main() {
    WiiClassicControllerWithCalibration ctrlrA( PTE0, PTE1 );
    while (true) {
        ReadAndReport( &ctrlrA, "PORT A" );
        wait(LOOP_DELAY);
    }
    // Never gets here.
    // return EXIT_SUCCESS;
}