Program Listing for File DInput2Relay1Temp2Module.h

Return to documentation for file (doc/include/DInput2Relay1Temp2Module.h)

#ifndef DINPUT2RELAY1TEMP2_MODULE_H_
#define DINPUT2RELAY1TEMP2_MODULE_H_

#include <stdint.h>

#include "EmodRet.hpp"

#ifdef __cplusplus
extern "C" {
#endif

#define DInput2Relay1Temp2Module_NUMBER_OF_DI 2
#define DInput2Relay1Temp2Module_NUMBER_OF_RELAYS 1
#define DInput2Relay1Temp2Module_NUMBER_OF_TEMP 2

#define DInput2Relay1Temp2Module_ALL_DIGITAL_INPUT 0x0003
#define DInput2Relay1Temp2Module_ALL_TEMP_INPUT 0x03

// Identifiers
enum TempSensorID {
    kTempSensor1 = 0x01,
    kTempSensor2 = 0x02,
};

// Temperature Sensor Configurations
enum TempSensorConfig {
    kTwoWirePt100Sensor = 1,
    kThreeWirePt100Sensor = 2,
    kFourWirePt100Sensor = 3,
    kTwoWirePt1000Sensor = 4,
    kThreeWirePt1000Sensor = 5,
    kFourWirePt1000Sensor = 6
};

// Digital Input Function mode
enum DigitalInputFunctionMode {
    kPretriggerTime = 0x00000000,
    kPulseCounter = 0x00000001,
    kWidthCounter = 0x00000002,
};

struct DInput2Relay1Temp2ModuleStruct;
typedef struct DInput2Relay1Temp2ModuleStruct DInput2Relay1Temp2Module_t;
typedef void (*DInput2Relay1Temp2ModuleCallback_Type)(const uint8_t* data, const uint16_t data_len, const uint8_t id_function, void* ctx);

DInput2Relay1Temp2Module_t* DInput2Relay1Temp2Module_create();
void DInput2Relay1Temp2Module_destroy(DInput2Relay1Temp2Module_t* module);

EmodRet DInput2Relay1Temp2Module_init(DInput2Relay1Temp2Module_t* module, const DInput2Relay1Temp2ModuleCallback_Type callback, void* context);
EmodRet DInput2Relay1Temp2Module_init_v(DInput2Relay1Temp2Module_t* module, const DInput2Relay1Temp2ModuleCallback_Type callback, void* context,
                                        uint8_t variant);

// DI methods
EmodRet DInput2Relay1Temp2Module_getStatus(DInput2Relay1Temp2Module_t* module, const uint16_t input_mask, uint8_t* status, bool* new_data);
EmodRet DInput2Relay1Temp2Module_getAllStatus(DInput2Relay1Temp2Module_t* module, uint8_t status[DInput2Relay1Temp2Module_NUMBER_OF_DI], bool* new_data);
EmodRet DInput2Relay1Temp2Module_switchToModeDI(DInput2Relay1Temp2Module_t* module, const uint16_t input_mask, const DigitalInputFunctionMode mode);
EmodRet DInput2Relay1Temp2Module_setPulseFilterTime(DInput2Relay1Temp2Module_t* module, const uint16_t input_mask, const uint32_t ms_time);
EmodRet DInput2Relay1Temp2Module_setAllPulseFilterTime(DInput2Relay1Temp2Module_t* module, const uint32_t ms_time);
EmodRet DInput2Relay1Temp2Module_getPulseFilterTime(DInput2Relay1Temp2Module_t* module, const uint16_t input_mask, uint32_t* ms_time);
EmodRet DInput2Relay1Temp2Module_getAllPulseFilterTime(DInput2Relay1Temp2Module_t* module, uint32_t ms_times[DInput2Relay1Temp2Module_NUMBER_OF_DI]);
EmodRet DInput2Relay1Temp2Module_getPulseCount(DInput2Relay1Temp2Module_t* module, const uint16_t input_mask, uint32_t* count);
EmodRet DInput2Relay1Temp2Module_getAllPulseCount(DInput2Relay1Temp2Module_t* module, uint32_t counts[DInput2Relay1Temp2Module_NUMBER_OF_DI]);
EmodRet DInput2Relay1Temp2Module_resetPulseCount(DInput2Relay1Temp2Module_t* module, const uint16_t input_mask);
EmodRet DInput2Relay1Temp2Module_resetAllPulseCount(DInput2Relay1Temp2Module_t* module);
EmodRet DInput2Relay1Temp2Module_getPulseWidth(DInput2Relay1Temp2Module_t* module, const uint16_t input_mask, uint32_t* width);
EmodRet DInput2Relay1Temp2Module_getAllPulseWidth(DInput2Relay1Temp2Module_t* module, uint32_t widths[DInput2Relay1Temp2Module_NUMBER_OF_DI]);

// Relays methods
EmodRet DInput2Relay1Temp2Module_configPulseWidth(DInput2Relay1Temp2Module_t* module, const uint16_t relay_mask, const uint32_t width_ms);
EmodRet DInput2Relay1Temp2Module_configAllPulseWidth(DInput2Relay1Temp2Module_t* module, const uint32_t width_ms);
EmodRet DInput2Relay1Temp2Module_activate(DInput2Relay1Temp2Module_t* module, const uint16_t relay_mask);
EmodRet DInput2Relay1Temp2Module_deactivate(DInput2Relay1Temp2Module_t* module, const uint16_t relay_mask);
EmodRet DInput2Relay1Temp2Module_activateAll(DInput2Relay1Temp2Module_t* module);
EmodRet DInput2Relay1Temp2Module_deactivateAll(DInput2Relay1Temp2Module_t* module);
EmodRet DInput2Relay1Temp2Module_getRelayStatus(DInput2Relay1Temp2Module_t* module, const uint16_t relay_mask, uint8_t* status);
EmodRet DInput2Relay1Temp2Module_getAllRelayStatus(DInput2Relay1Temp2Module_t* module, uint8_t* status);

// Temperature sensor methods
EmodRet DInput2Relay1Temp2Module_configTempSensor(DInput2Relay1Temp2Module_t* module, const TempSensorID sensor_id, const TempSensorConfig config);
EmodRet DInput2Relay1Temp2Module_configAllTempSensor(DInput2Relay1Temp2Module_t* module, const TempSensorConfig config);
EmodRet DInput2Relay1Temp2Module_getTempSensorConfig(DInput2Relay1Temp2Module_t* module, const TempSensorID sensor_id, TempSensorConfig* temp_sensor_config);
EmodRet DInput2Relay1Temp2Module_getTempSensor(DInput2Relay1Temp2Module_t* module, const TempSensorID sensor_id, int16_t* value);
// Disabled (TODO: convert std::vector to an C array) EmodRet DInput2Relay1Temp2Module_getAllTempSensor(DInput2Relay1Temp2Module_t* module,
// std::vector<int16_t>* data);

// DI Callback methods
EmodRet DInput2Relay1Temp2Module_configEventAtTimeIntervalDI(DInput2Relay1Temp2Module_t* module, const uint32_t time_interval);
EmodRet DInput2Relay1Temp2Module_configEventOnNewDataDI(DInput2Relay1Temp2Module_t* module);
EmodRet DInput2Relay1Temp2Module_configEventOnValueChangeDI(DInput2Relay1Temp2Module_t* module, const uint32_t threshold,
                                                            uint16_t event_mask = DInput2Relay1Temp2Module_ALL_DIGITAL_INPUT);
EmodRet DInput2Relay1Temp2Module_configEventAtTimeIntervalTemp(DInput2Relay1Temp2Module_t* module, const uint32_t time_interval,
                                                               const uint32_t event_mask = DInput2Relay1Temp2Module_ALL_TEMP_INPUT);
EmodRet DInput2Relay1Temp2Module_configEventOnValueChangeTemp(DInput2Relay1Temp2Module_t* module, const uint32_t threshold,
                                                              const uint32_t event_mask = DInput2Relay1Temp2Module_ALL_TEMP_INPUT);
EmodRet DInput2Relay1Temp2Module_configEventWithinRangeTemp(DInput2Relay1Temp2Module_t* module, const uint32_t low_limit, const uint32_t high_limit,
                                                            const uint32_t event_mask = DInput2Relay1Temp2Module_ALL_TEMP_INPUT);
EmodRet DInput2Relay1Temp2Module_configEventOutOfRangeTemp(DInput2Relay1Temp2Module_t* module, const uint32_t low_limit, const uint32_t high_limit,
                                                           const uint32_t event_mask = DInput2Relay1Temp2Module_ALL_TEMP_INPUT);
EmodRet DInput2Relay1Temp2Module_resetEventConfig(DInput2Relay1Temp2Module_t* module);

#ifdef __cplusplus
}
#endif

#endif  // DINPUT2RELAY1TEMP2_MODULE_H_