#pragma once
/*************************************************
History:
Jimmy Chan 2022/1/25 3.0.0.0 build this moudle
*************************************************/

#ifndef __CONTROLLERDLL_H__
#define __CONTROLLERDLL_H__

#ifdef _WIN64 
	typedef	  long long   ControllerHandle;
#else
	typedef	  long   ControllerHandle;
#endif

typedef struct MulDigitalValue
{
	int channelIndex;
	int DigitalValue;
}MulDigValItem;


typedef struct MulStrobeValue
{
	int channelIndex;
	int StrobeValue;
}MulStbValItem;


typedef struct MulLightDelayValue
{
	int channelIndex;
	int LightDelayValue;
}MulLigDelValItem;


typedef struct MulCameraDelayValue
{
	int channelIndex;
	int CameraDelayValue;
}MulCamDelValItem;

typedef struct ProgramConfiguration
{
	int channelIndex;
	int intensity;
	int pulseWidth;
}ProgramConfigurationItem;

extern "C"
{
	_declspec(dllexport)	int GetDigitalValue(int* intensity, int ChannelIndex, ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetDigitalValue(int ChannelIndex, int intensity,ControllerHandle controllerHandle);
	_declspec(dllexport)    int SetMulDigitalValue(MulDigValItem* MulDigValArray,int length,ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetStrobeValue(int* strobeValue, int ChannelIndex,ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetStrobeValue(int ChannelIndex, int strobeValue,ControllerHandle controllerHandle);
    _declspec(dllexport)    int SetMulStrobeValue(MulStbValItem* MulStbValArray,int length,ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetLightDelayValue(int* lightDelayValue, int ChannelIndex,ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetLightDelayValue(int ChannelIndex,int lightDelayValue,ControllerHandle controllerHandle);
    _declspec(dllexport)    int SetMulLightDelayValue(MulLigDelValItem* MulLigDelValArray,int length,ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetCameraDelayValue(int* cameraDelayValue,int ChannelIndex,ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetCameraDelayValue(int ChannelIndex,int cameraDelayValue,ControllerHandle controllerHandle);
    _declspec(dllexport)    int SetMulCameraDelayValue(MulCamDelValItem* MulCamDelValArray,int length,ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetIntCycleValue(int* intCycleValue,ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetIntCycleValue(int intCycleValue,ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetLightTriMode(int* lightTriMode,ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetLightTriMode(int LightTriMode,ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetCamTriEdge(int* camTriEdge, ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetCamTriEdge(int camTriEdge,ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetLightState(int* lightState,ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetLightState(int lightState,ControllerHandle controllerHandle);
	_declspec(dllexport)    int KeepAlive(ControllerHandle controllerHandle);
	_declspec(dllexport)    int GetErrMsg(int errCode,char* ErrMsg);

	_declspec(dllexport)	int SetProgramParameter(int triggerSourceIndex, int stepIndex, int length, ProgramConfigurationItem *ProgramConfigurationArray, ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetProgramParameter(int triggerSourceIndex, int stepIndex, int *length, ProgramConfigurationItem *ProgramConfigurationArray, ControllerHandle controllerHandle);
	_declspec(dllexport)    int ClearProgramParameter(int triggerSourceIndex, ControllerHandle controllerHandle);
	_declspec(dllexport)    int GetPulseUnit(int ChannelIndex, int *pulseUnit, ControllerHandle controllerHandle);
	_declspec(dllexport)    int SetPulseUnit(int ChannelIndex, int pulseUnit, ControllerHandle controllerHandle);
	_declspec(dllexport)	int GetLightTriPty(int* triggerPolarity, ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetLightTriPty(int triggerPolarity, ControllerHandle controllerHandle);
	_declspec(dllexport)	int SetCurrentStep(int triggerSourceIndex, int currentStep, ControllerHandle controllerHandle);
	_declspec(dllexport)    int GetCurrentStep(int triggerSourceIndex, int *currentStep, ControllerHandle controllerHandle);
	_declspec(dllexport)	int ResetCurrentStep(int triggerSourceIndex, ControllerHandle controllerHandle);
	_declspec(dllexport)    int GetTotalStep(int triggerSourceIndex, int *totalStep, ControllerHandle controllerHandle);
}

#endif