Added HangmanGame class, but does not work yet

Dependencies:   SDFileSystem app epson mbed msp430 pl tests

hal.cpp

Committer:
markpsymonds
Date:
2017-12-04
Revision:
1:a5ec6f9dcf0d
Parent:
0:fa7450a43b99

File content as of revision 1:a5ec6f9dcf0d:

//
// Filename: hal.cpp
//
// Flexbook Hardware Abstraction Layer.
//

#include "hal.h"

#include "mcp23s17.h"

#include "mbed.h"

#include <stdio.h>

// Initialisation values for MCP23S17 registers.
uint8_t MCP23S17value[0x16] =
{
0x00, // IODIRA
0x00, // IODIRB
0xff, // IPOLA
0x00, // IPOLB
0x00, // GPINTENA
0x00, // GPINTENB
0x00, // DEFVALA
0x00, // DEFVALB
0x00, // INTCONA
0x00, // INTCONB
0x00, // IOCON1
0x00, // IOCON2
0x00, // GPPUA
0x00, // GPPUB
0x00, // INTFA
0x00, // INTFB
0x00, // INTCAPA
0x00, // INTCAPB
0x00, // GPIOA
0x00, // GPIOB
0x00, // OLATA
0x00, // OLATB
};

namespace HAL {

MCP23S17 &GetMCP23S17()
{
    // The MCP23S17 uses pins 5, 6, 7 (SPI MOSI, MISO, SCK) and 19 (CS).
    static SPI spi(p5, p6, p7);
    static DigitalOut cs(p19);
    static MCP23S17 mcp23s17(0x00, spi, cs);

    return mcp23s17;
}

// Initialise the HAL.
void Initialise()
{
    // Setup MCP23S17 I/O expander.
    for(unsigned int reg = 0; reg < sizeof(MCP23S17value); reg++)
        GetMCP23S17().Write((REG_MCP23S17) reg, MCP23S17value[reg]);
    
    GetMCP23S17().Write(GPIOA, 0);
    GetMCP23S17().Write(GPIOB, 0);
}

void EnablePowerToPages(Flexbook::PageType pages)
{
    // Power on the board(s).
    GetMCP23S17().Write(GPIOB, pages);

    // Wait for the power to stabilize.
    wait(0.1);
    
    // Enable the I2C connection.
    GetMCP23S17().Write(GPIOA, pages);   
}

Flexbook::PageType GetPageType()
{
    using namespace Flexbook;

    static PageType lastype = Flexbook::PageType_PageNull;   

    //printf("%x\n", GetMCP23S17().Read(GPIOA));

    switch(GetMCP23S17().Read(GPIOA))
    {
        case 0:
            break;
            
        //case PageType_PageSensor:    
        case 0xFE:
            lastype = PageType_PageSensor;
            break;

        case 0xF7:
            lastype = PageType_PageDice;
            break;

        case PageType_PageOLED:
            lastype = PageType_PageOLED;
            break;

        //case PageType_PageTouch:
        case 0xFD:
            lastype = PageType_PageTouch;
            break;

        case PageType_PageFlexEnable:
            lastype = PageType_PageFlexEnable;
            break;

        case PageType_PageNFC:
            lastype = PageType_PageNFC;
            break;

        default:
            break;
    }
    
    return lastype;
}

} // End HAL namespace.