#ifndef _PORTEXPANDER

#define _PORTEXPANDER

#include "Config.h"
#include "PCAL6416A-SOLDERED.h"

PCAL6416A _expander;   // Create object from class PCAL6416A

class PortExpander 
{
    public:
        PortExpander() {
        }

        bool initialize() {

            // Turn on the expander
            digitalWrite(GPIO_0_RESET, HIGH);

            // Enable expander and set all outputs low
            _expander.begin();
            for (int i = 0; i < 16; i++) {
                _expander.pinModePCAL(i, OUTPUT);
            }
            return true;
        }

        uint32_t readPort(uint32_t portNumber) {
            if (portNumber >= 0 && portNumber < 16) {
                return _expander.digitalReadPCAL(portNumber);
            }
            else {
                return 100;
            }
        }

        bool enablePort(uint32_t portNumber) {
            if (portNumber >= 0 && portNumber < 16) {
                _expander.driveStrengthPCAL(portNumber, 3);
                _expander.digitalWritePCAL(portNumber,HIGH);
            }
            return true;
        }

        bool disablePort(uint32_t portNumber) {
            if (portNumber >= 0 && portNumber < 16) {
                _expander.driveStrengthPCAL(portNumber, 0);
                _expander.digitalWritePCAL(portNumber,LOW);
            }
            return true;
        }

};

#endif