Driver for the IO Expander/LED Driver

SX1509.h

Committer:
mwilkens241
Date:
2017-04-26
Revision:
2:0f4b9539feca
Parent:
1:0176ec93c3fe

File content as of revision 2:0f4b9539feca:

#ifndef SX1509_H
#define SX1509_H

#include "mbed.h"

// DEFINES - SX1509 Configuration
// ====================================================
#define SX1509_FREQUENCY    400000
#define SX1509_ADDR         (0x3E<<1)

// DEFINES - Register Addresses
// ====================================================
#define REGINPUTDISABLEB    (0x00)
#define REGINPUTDISABLEA    (0x01)
#define REGLONGSLEWB        (0x02)
#define REGLONGSLEWA        (0x03)
#define REGLOWDRIVEB        (0x04)
#define REGLOWDRIVEA        (0x05)
#define REGPULLUPB          (0x06)
#define REGPULLUPA          (0x07)
#define REGPULLDOWNB        (0x08)
#define REGPULLDOWNA        (0x09)
#define REGOPENDRAINB       (0x0A)
#define REGOPENDRAINA       (0x0B)
#define REGPOLARITYB        (0x0C)
#define REGPOLARITYA        (0x0D)
#define REGDIRB             (0x0E)
#define REGDIRA             (0x0F)
#define REGDATAB            (0x10)
#define REGDATAA            (0x11)
#define REGINTERRUPTMASKB   (0x12)
#define REGINTERRUPTMASKA   (0x13)
#define REGSENSEHIGHB       (0x14)
#define REGSENSELOWB        (0x15)
#define REGSENSEHIGHA       (0x16)
#define REGSENSELOWA        (0x17)
#define REGINTERRUPTSOURCEB (0x18)
#define REGINTERRUPTSOURCEA (0x19)
#define REGEVENTSTATUSB     (0x1A)
#define REGEVENTSTATUSA     (0x1B)
#define REGLEVELSHIFTER1    (0x1C)
#define REGLEVELSHIFTER2    (0x1D)
#define REGCLOCK            (0x1E)
#define REGMISC             (0x1F)
#define REGLEDDRIVERENABLEB (0x20)
#define REGLEDDRIVERENABLEA (0x21)
// Debounce
#define REGDEBOUNCECONFIG   (0x22)
#define REGDEBOUNCEENABLEB  (0x23)
#define REGDEBOUNCEENABLEA  (0x24)
#define REGKEYCONFIG1       (0x25)
#define REGKEYCONFIG2       (0x26)
#define REGKEYDATA1         (0x27)
#define REGKEYDATA2         (0x28)
// LED Driver
#define REGTON0             (0x29)
#define REGION0             (0x2A)
#define REGOFF0             (0x2B)
#define REGTON1             (0x2C)
#define REGION1             (0x2D)
#define REGOFF1             (0x2E)
#define REGTON2             (0x2F)
#define REGION2             (0x30)
#define REGOFF2             (0x31)
#define REGTON3             (0x32)
#define REGION3             (0x33)
#define REGOFF3             (0x34)
#define REGTON4             (0x35)
#define REGION4             (0x36)
#define REGOFF4             (0x37)
#define REGTRISE4           (0x38)
#define REGTFALL4           (0x39)
#define REGTON5             (0x3A)
#define REGION5             (0x3B)
#define REGOFF5             (0x3C)
#define REGTRISE5           (0x3D)
#define REGTFALL5           (0x3E)
#define REGTON6             (0x3F)
#define REGION6             (0x40)
#define REGOFF6             (0x41)
#define REGTRISE6           (0x42)
#define REGTFALL6           (0x43)
#define REGTON7             (0x44)
#define REGION7             (0x45)
#define REGOFF7             (0x46)
#define REGTRISE7           (0x47)
#define REGTFALL7           (0x48)
#define REGTON8             (0x49)
#define REGION8             (0x4A)
#define REGOFF8             (0x4B)
#define REGTON9             (0x4C)
#define REGION9             (0x4D)
#define REGOFF9             (0x4E)
#define REGTON10            (0x4F)
#define REGION10            (0x50)
#define REGOFF10            (0x51)
#define REGTON11            (0x52)
#define REGION11            (0x53)
#define REGOFF11            (0x54)
#define REGTON12            (0x55)
#define REGION12            (0x56)
#define REGOFF12            (0x57)
#define REGTRISE12          (0x58)
#define REGTFALL12          (0x59)
#define REGTON13            (0x5A)
#define REGION13            (0x5B)
#define REGOFF13            (0x5C)
#define REGTRISE13          (0x5D)
#define REGTFALL13          (0x5E)
#define REGTON14            (0x5F)
#define REGION14            (0x60)
#define REGOFF14            (0x61)
#define REGTRISE14          (0x62)
#define REGTFALL14          (0x63)
#define REGTON15            (0x64)
#define REGION15            (0x65)
#define REGOFF15            (0x66)
#define REGTRISE15          (0x67)
#define REGTFALL15          (0x68)
// Misc
#define REGHIGHINPUTB       (0x69)
#define REGHIGHINPUTA       (0x6A)
// Software Reset
#define REGRESET            (0x7D)
// Test Registers (do not write)
#define REGTEST1            (0x7E)
#define REGTEST2            (0x7F)

#define LINEAR 0
#define LOG 1

class SX1509{
    private:
        I2C i2c;
        uint8_t div_g;
        
        void i2cWrite8(char reg, char data);
        uint8_t i2cRead8(char reg);
        uint16_t i2cRead16(char reg);
           
    public:
        SX1509(PinName sda, PinName scl);
        
        enum mode_t {INPUT, OUTPUT, LED};
        
        bool init();
        void enableLEDDriver();
        void enableLEDDriver(uint8_t div, bool mode);
        void setLEDMode(bool mode);
        void setMode(uint8_t pin, mode_t mode);
        void setBreath(uint8_t pin, uint8_t fadeIn, uint8_t fadeOut);
        void setBlink(uint8_t pin, uint8_t tOn, uint8_t tOff, uint8_t iOff);
        void writePin(uint8_t pin, uint8_t intensity);
        void setReset();
        void fullReset();
};


#endif