#pragma once

#include "GobiApiService.h"

class CFuncList;

class CGobiApiDms : public CGobiApiService
{
public:
	CGobiApiDms(HMODULE hQCDll);
	~CGobiApiDms(void);

	BOOL GetAvailFuncList(CFuncList* pFuncList);
	UINT ExecuteFunctions(CFuncList* pFuncList, UINT &nTotalExec);

protected:
	static const TableFuncEntry m_TableFunc[];

	static BOOL FuncGetDeviceCapabilities(CParamList* pParams = NULL);
	static BOOL FuncGetModelID(CParamList* pParams = NULL);
	static BOOL FuncGetPower(CParamList* pParams = NULL);
	static BOOL FuncGetSerialNumbers(CParamList* pParams = NULL);
	static BOOL FuncGetFirmwareRevision(CParamList* pParams = NULL);
	static BOOL FuncGetFirmwareRevisions(CParamList* pParams = NULL);
	static BOOL FuncGetManufacturer(CParamList* pParams = NULL);
	static BOOL FuncGetVoiceNumber(CParamList* pParams = NULL);
	static BOOL FuncGetImsi(CParamList* pParams = NULL);
	static BOOL FuncSetPower(CParamList* pParams = NULL);
	static BOOL FuncGetHardwareRevision(CParamList* pParams = NULL);
	static BOOL FuncGetPRLVersion(CParamList* pParams = NULL);
	static BOOL FuncGetERIFile(CParamList* pParams = NULL);
	static BOOL FuncGetOfflineReason(CParamList* pParams = NULL);
	static BOOL FuncGetNetworkTime(CParamList* pParams = NULL);
	static BOOL FuncActivateAutomatic(CParamList* pParams = NULL);
	static BOOL FuncActivateManual(CParamList* pParams = NULL);
	static BOOL FuncGetActivationState(CParamList* pParams = NULL);
	static BOOL FuncDMSUimSetPinProtection(CParamList* pParams = NULL);
	static BOOL FuncDMSUimVerifyPin(CParamList* pParams = NULL);
	static BOOL FuncDMSUimUnblockPin(CParamList* pParams = NULL);
	static BOOL FuncDMSUimChangePin(CParamList* pParams = NULL);
	static BOOL FuncDMSUimGetPinStatus(CParamList* pParams = NULL);
	static BOOL FuncDMSUimGetIccId(CParamList* pParams = NULL);
	static BOOL FuncResetToFactoryDefaults(CParamList* pParams = NULL);
	static BOOL FuncValidateSPC(CParamList* pParams = NULL);
	static BOOL FuncDMSUimGetControlKeyStatus(CParamList* pParams = NULL);
	static BOOL FuncDMSUimSetControlKeyProtection(CParamList* pParams = NULL);
	static BOOL FuncDMSUimUnblockControlKey(CParamList* pParams = NULL);
	static BOOL FuncSetActivationStatusCallback(CParamList* pParams /*= NULL*/);
	static BOOL FuncSetPowerCallback(CParamList* pParams /*= NULL*/);
    static BOOL FuncSwitchModemToBootMode(CParamList * pParams = NULL);

	static CParamList m_sSetPowerParams;
	static CParamList m_sSetPinProtection;
	static CParamList m_sVerifyPin;
	static CParamList m_sUnblockPin;
	static CParamList m_sChangePin;
	static CParamList m_sGetPinStatus;
	static CParamList m_sResetDefaults;
	static CParamList m_sValidateSPC;
	static CParamList m_sActivateAutomatic;
	static CParamList m_sActivateManual;
	static CParamList m_sGetControlKeyStatus;
	static CParamList m_sSetControlKeyProtection;
	static CParamList m_sUnblockControlKey;
	static CParamList m_sSetActivationStatusCallback;
	static CParamList m_sSetPowerCallback;
};
