/*
 * LEDring.h
 * Interface with the LEDring via its specified pins and the SX1509 port expander
 *
 *  Created on: Mar 28, 2023
 *      Author: Irene Hu
 */

#ifndef _LEDRING
#define _LEDRING

#include "../lib/SparkFun_SX1509_Arduino_Library/src/SparkFunSX1509.h"
#include "Sensors.h" // for the one method that triggers a power measurement

class LEDring
{
    public:
        // constructor
        LEDring(int pin_strobe, SX1509 *io, int numLEDs = 8); 
        LEDring(int pin_strobe, int pin_cam, SX1509 *io, int numLEDs = 8);
        LEDring(int pin_strobe, int pin_cam, int pin_cam_ready, SX1509 *io, int numLEDs = 8);

        // methods
        int init();
        int strobeLED(int LEDnum, double duration_ms);
        int strobeLED_pinOnly(double duration_ms);
        int strobeMultLEDs(byte LEDnums, double duration_ms);
        int strobeMultLEDs_trigPwrMeas(byte LEDnums, double duration_ms, Sensors* sensors, INA260_ConversionTime time, INA260_AveragingCount count);
        int LEDon_strobeCam(int LEDnum, double duration_ms, Stream * in);

    private:
        // private variables
        int _pin_strobe; // pin for the strobe (global enable)
        int _pin_cam; // pin for camera trigger ouptut
        int _pin_cam_ready; // pin for camera trigger ready input
        int _numLEDs; // total number of LEDs available, for validity checks (0 thru 7 is 8 LEDs)
        // pointer to externally initialized SX1509 port expander - leave external to enable potential operation for other things
        SX1509 *_io;

        // methods
        int _enableMultLEDs(byte LEDnums);
        int _disableAllLEDs(void);
};


#endif