Controll MCP23S17 as GPIO

ExioMcp23s17DigitalIn.h

Committer:
ryood
Date:
2016-10-30
Revision:
4:4a8ba9d9926b
Parent:
3:aaea541bdbf9
Child:
9:b0e9ec45a720

File content as of revision 4:4a8ba9d9926b:

/*
 * ExioMcp23s17DigitalIn.h
 *
 * Created: 2016.10.30
 *
 */
 
#ifndef _EXIOMCP2317SDIGITALIN_H_
#define _EXIOMCP2317SDIGITALIN_H_

#include "mbed.h"
#include "ExioMcp23s17.h"

class ExioMcp23s17DigitalIn {
public:
    ExioMcp23s17DigitalIn(ExioMcp23s17& _device, ExioPort _port, int _pin) : 
        device(_device),
        port(_port),
        pin(_pin)
    {
        // set as input
        uint8_t tmp = device.ioDirection(port);
        device.ioDirection(port, tmp | (1 << pin));
        //printf("pin:%d port:%d %d\r\n", pin, port, device.ioDirection(port));
    }
    
    void mode(PinMode pull)
    {
        uint8_t tmp = device.ioPullup(port);
        switch (pull) {
        case PullUp:
            device.ioPullup(port, tmp | (1 << pin));
            break;
        case PullNone:
            device.ioPullup(port, tmp & ~(1 << pin));
            break;
        default:
            error("PinMode must be PullUp or PullNone");
        }
    }
    
    int read()
    {
        uint8_t data = device.readPort(port);
        int bv = data & (1 << pin);
        return bv ? 1 : 0;
    }
    
protected:
    ExioMcp23s17 device;
    ExioPort port;
    int pin;
};

#endif //_EXIOMCP2317SDIGITALIN_H_