/////////////////////////////////////
// ADSmartIO.h
// 720020-1153x
//
// Applied Data Systems
//
// {See ADSmartIO.cpp for description and history}
//
/////////////////////////////////////
#include "windows.h"

class ADSmartIO
{
private:
	HINSTANCE	hSmartIO;
	BOOL		loaded;

	typedef UINT (*SIOFIRMWAREVERSION)(void);
	typedef BYTE (*SIOREADKEYPAD)(void);
	typedef BOOL (*SIOSETKEYPADSIZE)(BYTE x, BYTE y);
	typedef UINT (*SIOANALOGCONVERSION)(BYTE channel);
	typedef void (*SIOSELECTOPTION)(BYTE Option);
	typedef void (*SIOBACKLIGHTVEEPWM)(BYTE value);
	typedef void (*SIOBACKLIGHTPWM)(BYTE value);
	typedef void (*SIOBACKLIGHTON)(void);
	typedef void (*SIOBACKLIGHTOFF)(void);
	typedef UINT (*SIOREADDEVICEVERSION)(void);
	typedef UINT (*SIOREADDEVICEPARTTYPE)(void);
	typedef void (*SIOWRITEPORTA)(BYTE value);
	typedef void (*SIOWRITEPORTB)(BYTE value);
	typedef void (*SIOWRITEPORTC)(BYTE value);
	typedef void (*SIOWRITEPORTD)(BYTE value);
	typedef void (*SIOINITDDRA)(BYTE value);
	typedef void (*SIOINITDDRB)(BYTE value);
	typedef void (*SIOINITDDRC)(BYTE value);
	typedef void (*SIOINITDDRD)(BYTE value);
	typedef UINT (*SIOREADPORTA)(void);
	typedef UINT (*SIOREADPORTB)(void);
	typedef UINT (*SIOREADPORTC)(void);
	typedef UINT (*SIOREADPORTD)(void);
	typedef UINT (*SIOREADEEPROM)(BYTE blockNumber, BYTE dataBytes[16]);
	typedef UINT (*SIOWRITEEEPROM)(BYTE blockNumber, BYTE dataBytes[16]);
	typedef BOOL (*SIOSETSSPTIMEOUT)(ULONG timeout);
	typedef void (*SIOCHARGERON)(BOOL value);

	SIOSETSSPTIMEOUT		SIOSetSSPTimeout;
	SIOFIRMWAREVERSION		SIOFirmwareVersion;
	SIOREADKEYPAD			SIOReadKeypad;
	SIOSETKEYPADSIZE		SIOSetKeyPadSize;
	SIOANALOGCONVERSION		SIOAnalogConversion;
	SIOSELECTOPTION			SIOSelectOption;
	SIOBACKLIGHTVEEPWM		SIOBackLightVEEPwm;
	SIOBACKLIGHTPWM			SIOBackLightPwm;
	SIOBACKLIGHTON			SIOBackLightON;
	SIOBACKLIGHTOFF			SIOBackLightOFF;
	SIOREADDEVICEVERSION	SIOReadDeviceVersion;
	SIOREADDEVICEPARTTYPE	SIOReadDevicePartType;
	SIOWRITEPORTA			SIOWritePortA;
	SIOWRITEPORTB			SIOWritePortB;
	SIOWRITEPORTC			SIOWritePortC;
	SIOWRITEPORTD			SIOWritePortD;
	SIOINITDDRA				SIOInitDDRA;
	SIOINITDDRB				SIOInitDDRB;
	SIOINITDDRC				SIOInitDDRC;
	SIOINITDDRD				SIOInitDDRD;
	SIOREADPORTA			SIOReadPortA;
	SIOREADPORTB			SIOReadPortB;
	SIOREADPORTC			SIOReadPortC;
	SIOREADPORTD			SIOReadPortD;
	SIOREADEEPROM			SIOReadEEPROM;
	SIOWRITEEEPROM			SIOWriteEEPROM;
	SIOCHARGERON			SIOChargerOn;
public:
	ADSmartIO();
	~ADSmartIO();
	UINT FirmwareVersion();
	BYTE ReadKeypad();
	BOOL SetKeyPadSize(BYTE x, BYTE y);
	UINT AnalogConversion(BYTE channel);
	void SelectOption(BYTE option);
	void SetBacklightVEE(BYTE value);
	void SetBacklightPwm(BYTE value);
	void SetBacklightState(BOOL value);
	//UINT Version();
	UINT PartType();
	void WritePortA(BYTE value);
	void WritePortB(BYTE value);
	void WritePortC(BYTE value);
	void WritePortD(BYTE value);
	void InitDDRA(BYTE mask);
	void InitDDRB(BYTE mask);
	void InitDDRC(BYTE mask);
	void InitDDRD(BYTE mask);
	BYTE ReadPortA();	
	BYTE ReadPortB();	
	BYTE ReadPortC();	
	BYTE ReadPortD();	
	UINT ReadEEPROM(BYTE blockNumber, BYTE dataBytes[16]);
	UINT WriteEEPROM(BYTE blockNumber, BYTE dataBytes[16]);
	BOOL SetSSPTimeout(ULONG timeout);
	void ChargerOn(BOOL value);
};
