A small emulator for the gigatron created for the STM32F746G-DISCO and an NES wii controller

WiiClassicControllerReader/WiiClassicControllerReader.h

Committer:
davidr99
Date:
2020-03-05
Revision:
1:4c1f3d32fceb

File content as of revision 1:4c1f3d32fceb:

/*
* WiiClassicControllerReader. A program allowing the output of one or two
* Wii Classic Controllers to be read via I2C and decoded for use, using the mbed 
* microcontroller and its associated libraries.
*
* Written by Alfredo Guerrero <alfredog83@gmail.com> for the mbedGC open-source 
* game console <http://www.mbedgc.com>. Based on the original code for
* the WiiNunchuckReader written by Petras Saduikis <petras@petras.co.uk>.
*
* This file is part of WiiClassicControllerReader.
*
* WiiClassicControllerReader is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* 
* WiiClassicControllerReader is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You can find a copy of the GNU General Public License at <http://www.gnu.org/licenses/>.
*/

#ifndef ALFREDOG83_WIICLASSICCONTROLLERREADER_H
#define ALFREDOG83_WIICLASSICCONTROLLERREADER_H

#include <mbed.h>
#include "WiiClassicControllerDefs.h"

typedef unsigned char BYTE;

class WiiClassicControllerReader
{
public:
    // constructors
    WiiClassicControllerReader(PinName sda, PinName scl);
    
    // functions
    void RequestRead();
    
    // accessors
    int getLJoyX() const { return ljoyX; }
    int getLJoyY() const { return ljoyY; }
    int getRJoyX() const { return rjoyX; }
    int getRJoyY() const { return rjoyY; }
    int getButtonX() const { return buttonX; }
    int getButtonY() const { return buttonY; }
    int getButtonA() const { return buttonA; }
    int getButtonB() const { return buttonB; }
    int getButtonLT() const { return buttonLT; }
    int getButtonRT() const { return buttonRT; }
    int getButtonLC() const { return buttonLC; }
    int getButtonRC() const { return buttonRC; }
    int getButtonZL() const { return buttonZL; }
    int getButtonZR() const { return buttonZR; }
    int getButtonSELECT() const { return buttonSELECT; }
    int getButtonHOME() const { return buttonHOME; }
    int getButtonSTART() const { return buttonSTART; }
    int getButtonDU() const { return buttonDU; }
    int getButtonDD() const { return buttonDD; }
    int getButtonDL() const { return buttonDL; }
    int getButtonDR() const { return buttonDR; }
    int getBufferSize() const { return sizeof(readBuf); }
    char* getReadBuf() { return readBuf; }
    
    bool ControllerWriteCmd();
    bool ControllerReadCmd();
    void ControllerDecode();
    
private:
    // classic controls states
    int ljoyX;
    int ljoyY;
    int rjoyX;
    int rjoyY;
    int buttonY;
    int buttonX;
    int buttonB;
    int buttonA;
    int buttonLT;
    int buttonRT;
    int buttonLC;
    int buttonRC;
    int buttonZL;
    int buttonZR;
    int buttonSELECT;
    int buttonHOME;
    int buttonSTART;
    int buttonDU;
    int buttonDD;
    int buttonDL;
    int buttonDR;
    
    // classic init state
    bool controllerInit;
    
    // classic I2C port
    I2C controllerPort;
    
    // read data
    char readBuf[CONTROLLER_READLEN];
    
    // functions    
    bool ControllerInit();
    bool ControllerRead();
    //void ControllerDecode();
};

#endif