#pragma once
#include "DPSDKDefine_HW.h"

//////////////////////////////////////////------233744------General-----start---------------///////////////////////////////////////////////

//////////////////////////////////////////------233744------GeneralPRO-----start---------------///////////////////////////////////////////////
/**
* @brief	System initialization.
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROInit();

/**
* @brief	System decinitialization.
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROUnInit();

/**
* @brief	Init Pro Rest.
* @param	[IN] DPSDK_PRO_PARAMS
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROInitRest(DPSDK_INT32 iSessionID, DPSDK_PRO_PARAMS* pProParams);

/**
* @brief	UnInit Pro Rest.
* @param	[IN] iSessionID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROUnInitRest(DPSDK_INT32 iSessionID);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetLogLevel(DPSDK_INT32 iLogLevel);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetSSLInfo(DPSDK_MQ_SSL_INFO* pSSLInfo);

DPSDK_EXPORT DPSDK_VOID DPSDK_CALL DPSDK_PROSetHttpsMode(DPSDK_INT32 iHttpsMode);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetTokenInfo(DPSDK_INT32 iSessionID, DPSDK_TOKENCHANGEEVENT_NOTIFY* pTokenInfo);

/**
* @brief	Set event callback function.
* @param	[IN] iSessionID			User session ID
* @param	[IN] fEventCallBack		Event callback function
* @param	[IN] pUserData			User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetEventCallBack(DPSDK_INT32 iSessionID,
	EventCallBack fEventCallBack = NULL,
	DPSDK_VOID* pUserData = NULL);

/**
* @brief	Set event callback function.
* @param	[IN] iSessionID			User session ID
* @param	[IN] fEventCallBack		Event callback function
* @param	[IN] pUserData			User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetEventCallBackEx(DPSDK_INT32 iSessionID,
	EventCallBackEx fEventCallBack = NULL,
	DPSDK_VOID* pUserData = NULL);

/**
* @brief	Set log information.
* @param	[IN] pLogPath		Log root directory
* @param	[IN] iLogLevel		Log level. For details, see DPSDK_LOG_LEVEL_TYPE definition.
* @return	Return 0 if succeeded, return error code if failed.
* @note	This interface shall be called before initialization.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetLogInfo(const DPSDK_CHAR* pLogPath, DPSDK_INT32 iLogLevel);


DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROConnectEventCenter(DPSDK_INT32 iSessionID);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PRODisConnectEventCenter(DPSDK_INT32 iSessionID);


/**
* @brief	Set local file path information.
* @param	[IN] pDirPath		root directory
* @return	Return 0 if succeeded, return error code if failed.
* @note	This interface shall be called before initialization.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetLocalDirPath(const DPSDK_CHAR* pDirPath);

/**
* @brief	Set to CA certificate verification.
* @param	[IN] pCertPath			CA certificate file path
* @return
*/
DPSDK_EXPORT DPSDK_VOID DPSDK_CALL DPSDK_PROSetCertificatePath(const DPSDK_CHAR* pCertPath);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetLanguage(const DPSDK_CHAR* pLanguage);


/**
* @brief	Set time zone.
* @param	[IN] pClientTimeZone	set client-timeZone value,Use NULL by default
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROSetTimeZone(DPSDK_TIME_ZONE_INFO* pClientTimeZone);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PROUpdateEncodeKey(DPSDK_INT32 iSessionID, DPSDK_ENCODE_KEY* pEncodeKey);
//////////////////////////////////////////------233744------GeneralPRO-----end---------------///////////////////////////////////////////////

//////////////////////////////////////////------233744------Alarm-----start---------------///////////////////////////////////////////////

/**
* @brief	Alarm Amount Query
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pQueryAlarmCountParam	Alarm Amount Query Parameter
* @param	[OUT] pAlarmCount			Alarm Amount
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryAlarmCount(DPSDK_INT32 iSessionID,
	DPSDK_QUERYALARMCOUNT_PARAM* pQueryAlarmCountParam,
	DPSDK_UINT32* pAlarmCount);

/**
* @brief	Alarm Treatment Flow Query
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pAlarmCode				Alarm SN
* @param	[IN] uiBufLen				pAlarmProcessInfoList buffer length
* @param	[OUT] pAlarmProcessInfoList	Alarm Treatment Flow List
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_ALARMPROCESS_DETAILINFO_LIST) + (num-1)*sizeof(DPSDK_ALARMPROCESS_DETAILINFO)
*			num is the number of alarm treatment flow which needs to be queried, value >= 1
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryAlarmProcessFlow(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pAlarmCode,
	DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);

/**
 * @brief	Alarm Confirmation
 * @param	[IN] iSessionID				User Session ID
 * @param	[IN] pConfirmAlarmParam		Alarm Confirmation Parameter
 * @return	Return 0 if succeeded, return error code if failed.
 */
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ConfirmAlarm(DPSDK_INT32 iSessionID,
	DPSDK_CONFIRMALARM_PARAM* pConfirmAlarmParam);

/**
* @brief	Alarm Confirmation
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pConfirmAlarmParam		Alarm Confirmation Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ConfirmAlarm(DPSDK_INT32 iSessionID,
	DPSDK_CONFIRMALARM_PARAM* pConfirmAlarmParam);

/**
* @brief	Alarm Confirmation
* @param	[IN] iSessionID					User Session ID
* @param	[IN] pBatchConfirmAlarmParam	Alarm Batch Confirmation Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchConfirmAlarm(DPSDK_INT32 iSessionID,
	DPSDK_BATCHCONFIRM_ALARM_PARAM* pConfirmAlarmParam);

//////////////////////////////////////////------233744------Alarm-----end---------------///////////////////////////////////////////////

/**
* @brief	Send MQ Queue Message.
* @param	[IN] iSessionID			User session ID
* @param	[IN] iMQType			DPSDK_MQ_TYPE
* @param	[IN] pQueueMessage		quque message
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SendMQMessage(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMQType,
	DPSDK_CHAR* pMQMessage);

/**
* @brief	Get channels count.
* @param	[IN] iSessionID		User session ID
* @param	[OUT] pCount		Count
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelsCount(DPSDK_INT32 iSessionID,
	DPSDK_INT32* pCount);

/**
* @brief	Get channels count.
* @param	[IN] iSessionID		User session ID
* @param	[OUT] pCount		Count
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelsResourceCount(DPSDK_INT32 iSessionID,
	DPSDK_INT32* pCount);

/**
* @brief	Get version information of application client.
* @param	[IN] iSessionID		User session ID
* @param	[OUT] pBuf			Data buffer
* @param	[IN] uiBufLen		Data buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetClientVersion(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pBuf,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Get basic version information of server.
* @param	[IN] iSessionID		User session ID
* @param	[OUT] pBuf			Data buffer
* @param	[IN] uiBufLen		Data buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetBasicVersion(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pBuf,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Get address information of application client.
* @param	[IN] iSessionID		User session ID
* @param	[OUT] pBuf			Data buffer
* @param	[IN] uiBufLen		Data buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetClientRoad(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pBuf,
	DPSDK_UINT32 uiBufLen);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPatchVersion(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pBuf,
	DPSDK_UINT32 uiBufLen);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPatchRoad(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pBuf,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Get electronic map information.
* @param	[IN] iSessionID		User session ID
* @param	[OUT] pServerInfo	Map connection information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetEMapInfo(DPSDK_INT32 iSessionID,
	DPSDK_SERVER_INFO* pServerInfo);

/**
* @brief	Set device time.(access device)
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeviceCode			Device code
* @param	[IN] pParam					Device time parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetDeviceTime(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE* pDeviceCode,
	DPSDK_DEVICETIME_PARAM* pParam);

/**
* @brief	Get device time.(access device)
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeviceCode			Device code
* @param	[OUT] pDeviceTimeResult		Device time result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceTime(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE* pDeviceCode,
	DPSDK_DEVICETIME_RESULT* pDeviceTimeResult);

/**
* @brief	Set device time.(access device)
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeviceCode			Device code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeviceTiming(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode);

/**
* @brief	Get Device Login Model
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pDeviceLoginModel		Device Login Model:"1"-Safe model, "2"-Compatible model
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceLoginModel(DPSDK_INT32 iSessionID,
	DPSDK_INT32* pDeviceLoginModel);

/**
* @brief	Get interface common timeout (5 min)
* @param	[IN] iSessionID			User session ID
* @param	[OUT] pSearchTimeOut	Search timeout
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryInterfaceCommonTimeout(DPSDK_INT32 iSessionID,
	DPSDK_INT32* pSearchTimeOut);

/**
* @brief	Download Human Record Pictures
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Download device picture parameter
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_DOWNLOAD_DEVICEPICTURES for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DownloadDevicePictures(DPSDK_INT32 iSessionID,
	DPSDK_DOWNLOAD_DEVICEPIC_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Download Detection Record Pictures
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Download device picture parameter
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_DOWNLOAD_DETECTION_RECORD_PICTURES for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DownloadDetectionRecordPictures(DPSDK_INT32 iSessionID,
	DPSDK_DOWNLOAD_DEVICEPIC_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Download Vehicle Detection Record Pictures
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Download device picture parameter
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_DOWNLOAD_VEHICLE_RECORD_PICTURES for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DownloadVehicleDetectionRecordPictures(DPSDK_INT32 iSessionID,
	DPSDK_DOWNLOAD_DEVICEPIC_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete humans by feature
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Delete humans by feature parameter
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteHumanBodysByFeature(DPSDK_INT32 iSessionID,
	DPSDK_DELETEHUMANBODYS_BYFEATRUE_PARAM* pParam);

/**
* @brief	Delete humans by session
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Delete humans by session parameter
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteHumansByPic(DPSDK_INT32 iSessionID,
	DPSDK_DELETEHUMANS_BYSESSION_PARAM* pParam);

/**
* @brief	Get Page humans by session
* @param	[IN] iSessionID				User session ID
* @param	[IN] pSession				Session info
* @param	[IN] pParam					Get Page humans by session parameter
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_GET_PAGEHUMANS_BY_SESSION for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageHumansBySession(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSession,
	DPSDK_GETPAGEEHUMANS_BYSESSION_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Start search human record by picture
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Human record parameter
* @param	[OUT] pSession				Session
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_StartSearchHumanByPicture(DPSDK_INT32 iSessionID,
	DPSDK_SEARCHHUMAN_BYPIC_PARAM* pParam,
	DPSDK_CHAR pSession[DPSDK_ID_LEN]);

/**
* @brief	Stop human page by picture
* @param	[IN] iSessionID				User session ID
* @param	[IN] pSession				Session
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_StopSearchHumanByPicture(DPSDK_INT32 iSessionID,
	DPSDK_CHAR pSession[DPSDK_ID_LEN]);

/**
* @brief	Get PeopleCount Device Rule
* @param	[IN] iSessionID				User session ID
* @param	[IN] pChannelId				channel ID
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_PEOPLECOUNT_DEVRULE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded. Return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPeopleCountDevRule(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get REST handle.
* @param	[IN] iSessionID			User session ID
* @return	Return REST handle if succeeded. Return NULL if failed.
* @note		Temporary interface which needs to be removed later.
*/
DPSDK_EXPORT DPSDK_LPVOID DPSDK_CALL DPSDK_GetRestHandle(DPSDK_INT32 iSessionID);

/**
* @brief	Get user token.
* @param	[IN] iSessionID			User session ID
* @param	[OUT] pTokenBuffer		Resource Token buffer
* @param	[IN] iBufLen			pTokenBuffer buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note		Temporary interface which needs to be removed later.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserResToken(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pTokenBuffer,
	DPSDK_UINT32 iBufLen);

/**
* @brief	Get user level.
* @param	[IN] iSessionID			User session ID
* @param	[OUT] pUserLevel		User level
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserLevel(DPSDK_INT32 iSessionID,
	DPSDK_INT32* pUserLevel);

//////////////////////////////////////////////////////////////////////////
/*
*	Local Playback Interface
*/

/**
* @brief	MQ is or not connect
* @param	[IN] iMediaSessionID	Media session ID
* @param	[out]
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_IsMQConnect(DPSDK_INT32 iMediaSessionID,
	DPSDK_BOOL* pIsMQConnect);

//////////////////////////////////////////////////////////////////////////
/*
*	IOS ANDROID Application
*/
#if (defined IOS) || (defined ANDROID)
/**
* @brief
* @param	[IN] iSessionID			User Session ID
* @param	[IN] iMediaSessionID	Media Session ID
* @param	[IN] iWidth				Width
* @param	[IN] iHeight			Height
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_OnSurfaceViewChanged(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMediaSessionID,
	DPSDK_INT32 iWidth,
	DPSDK_INT32 iHeight);

/**
* @brief	Set Scaling
* @param	[IN] iSessionID			User Session ID
* @param	[IN] iMediaSessionID	Media Session ID
* @param	[IN] fScale				Scale
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetScale(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMediaSessionID,
	DPSDK_FLOAT fScale);

/**
* @brief	Acquire Scaling
* @param	[IN] iSessionID			User Session ID
* @param	[IN] iMediaSessionID	Media Session ID
* @param	[OUT] pScale			Scale
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetScale(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMediaSessionID,
	DPSDK_FLOAT* pScale);

/**
* @brief	Refresh
* @param	[IN] iSessionID			User Session ID
* @param	[IN] iMediaSessionID	Media Session ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RefreshPlay(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMediaSessionID);

/**
* @brief	Acquire
* @param	[IN] iSessionID			User Session ID
* @param	[IN] iMediaSessionID	Media Session ID
* @param	[OUT] pTranslateX
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetTranslateX(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMediaSessionID,
	DPSDK_FLOAT* pTranslateX);

/**
* @brief
* @param	[IN] iSessionID			User Session ID
* @param	[IN] iMediaSessionID	Media Session ID
* @param	[OUT] pTranslateY
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetTranslateY(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMediaSessionID,
	DPSDK_FLOAT* pTranslateY);

/**
* @brief
* @param	[IN] iSessionID			User Session ID
* @param	[IN] iMediaSessionID	Media Session ID
* @param	[IN] fTranslateX
* @param	[IN] fTranslateY
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_Translate(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMediaSessionID,
	DPSDK_FLOAT fTranslateX,
	DPSDK_FLOAT fTranslateY);

/**
* @brief
* @param	[IN] iSessionID			User Session ID
* @param	[IN] iMediaSessionID	Media Session ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetIdentity(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMediaSessionID);
#endif

/***********************************************************  vehicle begin   **********************************************************/

/**
* @brief	Get page Outside Group info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					page param
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_GET_OTHER_GROUP_VEHICLES_LIST for data
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageoutsideGroup(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_GROUP_OUTSIDE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get page Outside Group info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					page param
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_GET_OTHER_ENTRANCE_GROUP_VEHICLES_LIST for data
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetOtherEntranceGroupVehicleList(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_GROUP_OUTSIDE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	add cars to Group
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pId					Group ID
* @param	[IN] pIds					carid list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddCarsToGroup(DPSDK_INT32 iSessionID,
	DPSDK_ID* pGroupId,
	DPSDK_ID_LIST* pVehicleIds,
	DPSDK_ORGCODE_LIST* pPersonVehicleOrgCodes);

/**
* @brief	Get All Groups info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pType					Group Type
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_GET_GROUPS_LIST for data
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAllGroups(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get page Groups info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					page param
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_GET_PAGE_VEHICLE_GROUPS_LIST for data
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageVehicleGroups(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_GROUP_BASE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Add Group
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					car param
* @param	[OUT] pId					Group ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddVehicleGroup(DPSDK_INT32 iSessionID,
	DPSDK_VEHICLE_GROUP_BASE_INFO* pParam,
	DPSDK_ID* pId);
/**
* @brief	Delete Groups
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pIds					Group list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteVehicleGroup(DPSDK_INT32 iSessionID,
	DPSDK_ID_LIST* pIds);

/**
* @brief	Update Group
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Group param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateVehicleGroup(DPSDK_INT32 iSessionID,
	DPSDK_VEHICLE_GROUP_UPDATE_INFO* pParam);
/**
* @brief	Get Vehicle Group
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Group param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVehicleGroup(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pVehicleId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Remove Vehicles
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Vehicles param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RemoveVehicles(DPSDK_INT32 iSessionID,
	DPSDK_REMOVE_VEHICLES_PARAM* pParam);

/**
* @brief	Get vehicle
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pVehicleId				Vehicle ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_VEHICLE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVehicle(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pVehicleId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get vehicle by plate no
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					Get car param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_VEHICLE_INFO_BY_PLATE_NO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVehicleByPlateNo(DPSDK_INT32 iSessionID,
	DPSDK_GET_VEHICLE_BY_PLATE_NO_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get page vehiclesGetCars
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					Get Cars Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PAGE_VEHICLES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageVehicles(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_VEHICLES_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Batch add vehicles
* @param	[IN] iSessionID				User session ID
* @param	[IN] pAddVehiclesInfo		Vehicles info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchAddVehicles(DPSDK_INT32 iSessionID,
	DPSDK_ADD_VEHICLES_INFO* pAddVehiclesInfo);
/**
* @brief	Delete vehicles
* @param	[IN] iSessionID				User session ID
* @param	[IN] pCarIDsList			CarIDs to be deleted
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteVehicles(DPSDK_INT32 iSessionID,
	DPSDK_BATCHDELETECARS_INFO* pCarIDsList);

/***********************************************************  vehicle end     **********************************************************/
//////////////////////////////////////////////////////////////////////////
/*
*	Alarm Interface
*/


/**
* @brief	Shield Alarm
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pBlockAlarmParam		Shield Alarm Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BlockAlarm(DPSDK_INT32 iSessionID,
	DPSDK_BLOCKALARM_PARAM* pBlockAlarmParam);

/**
* @brief	Get Alarm Car Block list Info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pBlockAlarmParam		Get Alarm Car Block list Info Parameter
* @param	[OUT] pBlockAlarmResult		Get Alarm Car Block list Info Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmCarBlocklistInfo(DPSDK_INT32 iSessionID,
	DPSDK_CAR_ALARM_PARAM* pBlockAlarmParam,
	DPSDK_CAR_BLOCKALARM_RESULT* pBlockAlarmResult);

/**
* @brief	Get Vehicle Arming Info With Double Picture Info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pVehicleArmingParam	Get Vehicle Arming Info With Double Picture Parameter
* @param	[OUT] pVehicleAlarmResult	Get Vehicle Arming Info With Double Picture Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVehicleArmingInfoWithDoublePicInfo(DPSDK_INT32 iSessionID, const DPSDK_CHAR* pAlarmCode, DPSDK_VEHICLE_ARMING_INOF_WITH_DOUBLE_PIC_RESULT* pVehicleArmingResult);

/**
* @brief	Get Alarm Car Peccancy Info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pCarAlarmParam		Get Alarm Car Peccancy Info Parameter
* @param	[OUT] pCarAlarmResult		Get Alarm Car Peccancy Info Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmCarPeccancyInfo(DPSDK_INT32 iSessionID,
	DPSDK_CAR_ALARM_PARAM* pCarAlarmParam,
	DPSDK_CAR_PECCANCYALARM_RESULT* pCarAlarmResult);

/**
* @brief	Get Alarm FaceRecognition Info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFaceAlarmParam		Get Alarm FaceRecognition Info Parameter
* @param	[OUT] pFaceAlarmResult		Get Alarm FaceRecognition Info Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmFaceRecognitionInfo(DPSDK_INT32 iSessionID,
	DPSDK_FACE_ALARM_PARAM* pFaceAlarmParam,
	DPSDK_FACE_ALARM_RESULT* pFaceAlarmResult);

/**
* @brief	Add Custom Alarm Type
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddCustomAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_CUSTOM_ALARM_INFO* pParam);

/**
* @brief	Update Custom Alarm Type
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateCustomAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_CUSTOM_ALARM_INFO* pParam);

/**
* @brief	Delete Custom Alarm Type
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Param
* @param	[IN] fDataCallBack			Data synchronization callback function, refer to DPSDK_DATA_DEL_CUSTOM_ALARM_RESULT for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteCustomAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_CUSTOM_ALARMID_LIST* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

//////////////////////////////////////////////////////////////////////////
/*
*	Alarm Process Interface
*/

/**
* @brief	Alarm on file
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOnFileParam			On File Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportAlarmRecords(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_ALARM_RECORDS_PARAM* pExportParam,
	DPSDK_EXPORT_ALARM_RECORDS_RESULT* pResult);


DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CloseLinkOutputChannels(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iNodeType,
	const DPSDK_CHAR* pNodeCode,
	DPSDK_INT32 iAlarmType
);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageAlarmRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_ALARM_RECORDS_PARAM* pGetParam,
	DPSDK_UINT32 uiBufLen,
	DPSDK_ALARM_DETAILINFO_LIST* pAlarmDetailInfoList);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetHistoryAlarmRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_HISTORY_ALARM_RECORDS_PARAM* pGetParam,
	DPSDK_UINT32 uiBufLen,
	DPSDK_ALARM_DETAILINFO_LIST* pAlarmDetailInfoList);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetEquipmentTree(DPSDK_INT32 iSessionID,
	DPSDK_QUERY_EQUIPMENTORG_INFO* pQueryOrgInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLastPointRecord(DPSDK_INT32 iSessionID,
	DPSDK_QUERY_LAST_POINT_RECORD_PARAM* pQueryParam,
	DPSDK_LAST_POINT_RECORD_INFO* pResult);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_PointRecordBatchAudit(DPSDK_INT32 iSessionID,
	DPSDK_AUDIT_RESULT* pParam);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetInspectPagePlans(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_INSPECT_PLAN_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPlanProgress(DPSDK_INT32 iSessionID,
	const DPSDK_CHAR* szProjectID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pData);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ControlPlan(DPSDK_INT32 iSessionID,
	const DPSDK_CHAR* szPlanID,
	DPSDK_INT32 iInstruction);

/**
* @brief	Acquire face channel data according to condition (VSL)
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pQueryParam			Organization Query Condition, refer to DPSDK_QUERY_FACE_CHANNEL_PARAM definition
* @param	[IN] pPageInfo				Page Info
* @param	[OUT] uiTotal				Total number of records
* @param	[OUT] pFaceChannelList		Face Channel List
* @param	[IN] uiBufLen				pFaceChannelList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_FACE_CHANNEL_LIST) + (num-1)*sizeof(DPSDK_FACE_CHANNEL_INFO)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFaceChannels(DPSDK_INT32 iSessionID,
	DPSDK_QUERY_FACE_CHANNEL_PARAM* pQueryParam,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_UINT32* pTotal,
	DPSDK_FACE_CHANNEL_LIST* pFaceChannelList,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Add Collection Channel
* @param	[IN] iSessionID			    User Session ID
* @param	[IN] pCollectParam			Channel Info
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_COLLECTION_LIST) + (num-1)*sizeof(DPSDK_COLLECTION_INFO)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddCollectionChannel(DPSDK_INT32 iSessionID,
	DPSDK_COLLECTION_INFO* pCollectParam);


/**
* @brief	Update Collection Site Channel
* @param	[IN] iSessionID			    User Session ID
* @param	[IN] pCollectParam			Channel Info
* @return	Return 0 if succeeded, return error code if failed.
* @note	Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateCollectionSiteChannel(DPSDK_INT32 iSessionID,
	DPSDK_COLLECTION_INFO* pCollectParam);

/**
* @brief	Add Collection Channel
* @param	[IN] iSessionID			    User Session ID
* @param	[IN] pCollectParam			Move Channel Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_MoveCollectionChannel(DPSDK_INT32 iSessionID,
	DPSDK_MOVECOLLECTION_INFO* pCollectParam);


/**
* @brief	Delete Collection Channel
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChannelID				Channel ID
* @param	[IN] pOrgCode				Organization ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DelCollectionChannel(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelID,
	DPSDK_CHAR* pOrgCode,
	DPSDK_CHAR* pSiteIP);

/**
* @brief	Acquire all collection organization data
* @param	[IN] szOrgCode				Org Code
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_COLLECT_TREE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCollectionTree(const DPSDK_CHAR* szOrgCode,
	DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Add Single collection organization data
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pCollectOrgInfo		Collect Organization Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddSingleCollectionOrg(DPSDK_INT32 iSessionID,
	DPSDK_COLLECTION_ORG_INFO* pCollectOrgInfo);


/**
* @brief	Add Single collection organization data
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pCollectOrgInfo		Collect Organization Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateSingleCollectionOrg(DPSDK_INT32 iSessionID,
	DPSDK_COLLECTION_ORG_INFO* pCollectOrgInfo);

/**
* @brief	move collection org
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pMoveInfo		        move org Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_MoveCollectionOrg(DPSDK_INT32 iSessionID,
	DPSDK_MOVECOLLECTION_ORG_INFO* pMoveInfo);



/**
* @brief	share collection data
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgCode		    org code
* @param	[IN] pUserIds		    User Id List
* @param	[OUT] pFaildInfo		faild info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ShareCollection(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pOrgCode,
	DPSDK_USER_ID_LIST* pUserIds,
	DPSDK_SHARECOLLECTION_FAILDINFO* pFaildInfo);

/**
* @brief	ack collection
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgCode		    org code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AckShareCollection(DPSDK_INT32 iSessionID, DPSDK_CHAR* pOrgCode);



/**
* @brief	Acquire all unread collection organization data
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_UNREAD_COLLECTIONLIST_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUnReadCollections(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete collection org channels
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgCode				Org code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteCollectionOrgChannels(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pOrgCode);

/**
* @brief	Get view tree
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_VIEW_ORG_INFO for data type
* @param	[IN] pParam					Query view Parm
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetViewTree(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VIEW_GET_TREE_PARAM* pParam,
	DPSDK_VOID* pUserData);

/**
* @brief	Add view directory file
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Add view dir param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddViewDir(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_ADD_DIR_PARAM* pParam);

/**
* @brief	Get view directory file
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pViewPublicDirInfo		Public view dir info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetViewDir(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_PUBLIC_DIR_INFO* pViewPublicDirInfo);

/**
* @brief	Batch delete view directory files
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Batch deleete view dir param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchDeleteViewDirs(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_BATCH_DELETE_PARAM* pParam);

/**
* @brief	Update view directory file
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Update view dir param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateViewDir(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_UPDATE_DIR_PARAM* pParam);

/**
* @brief	Add view
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Add view param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddView(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_ADD_PARAM* pParam);

/**
* @brief	Update view
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Update view param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateView(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_UPDATE_PARAM* pParam);
/**
* @brief	Update view name
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Rename view
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RenameView(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_RENAME_PARAM* pParam);

/**
* @brief	Share view
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Share view param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ShareView(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_SHARE_INFO* pParam);

/**
* @brief	Acknowledge share view
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pSharedViewCode			Shared view Code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AckShareView(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSharedViewCode);

/**
* @brief	Batch delete views
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Batch deleete view param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchDeleteViews(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_BATCH_DELETE_PARAM* pParam);

/**
* @brief	Get share view
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pShareViewInfo			Share view info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetShareView(DPSDK_INT32 iSessionID,
	DPSDK_SHARE_VIEW* pShareViewInfo);

/**
* @brief	Get unread share views
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pUnreadShareViewInfo	Unread share view info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUnreadShareViews(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_UNREAD_SHARE_INFO* pUnreadShareViewInfo);

/**
* @brief	Upgrade View
* @param	[IN] iSessionID				User Session ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpgradeView(DPSDK_INT32 iSessionID);

/**
* @brief	Move View
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Move view param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_MoveView(DPSDK_INT32 iSessionID,
	DPSDK_VIEW_MOVE_PARAM* pParam);

/**
* @brief	Get View Thumbnail
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pViewCode				View Code
* @param	[OUT] pInfo					View Thumbnail Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetViewThumbnail(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pViewCode, DPSDK_VIEW_THUMBNAILS_INFO* pInfo);

/**
* @brief	Get View Icon
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pViewCode				View Code
* @param	[OUT] pInfo					View Icon Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetViewIcon(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pViewCode, DPSDK_VIEW_ICON_INFO* pInfo);


/**
* @brief	Get Users
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pUserName				User Name
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_USER_GET_USERS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUsers(DPSDK_INT32 iSessionID,
	DPSDK_GET_USER_INFO_PARA* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
 * @brief	Release Data Cache
 * @param	[IN] pBuffer				Cache that needs to be released
 * @return	Return 0 if succeeded, return error code if failed.
 * @note		pBuffer is the cache space which is internally applied by sdk
 */
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ReleaseDataBuffer(DPSDK_CHAR* pBuffer);

/**
* @brief	Save Fish Eye Data
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgCode				Organization code
* @param	[IN] pFishEyeData			Fish eye data
* @param	[IN] uiFishEyeDataLen		User Data Length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SaveFishEyeData(DPSDK_INT32 iSessionID,
	DPSDK_ORG_CODE* pOrgCode,
	DPSDK_CHAR* pFishEyeData,
	DPSDK_UINT32 uiFishEyeDataLen);

/**
* @brief	Acquire Fish Eye Data
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFishEyeDataParam		Fish eye data param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_FISH_DATA_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFishEyeData(DPSDK_INT32 iSessionID,
	DPSDK_FISHEYE_DATA_PARAM *pFishEyeDataParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

//////////////////////////////////////////////////////////////////////////
/*
*	User Interface
*/

/**
* @brief	Acquire User Functions List
* @param	[IN] iSessionID			User Session ID
* @param	[OUT] pFuncList			User Func List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAvailableFunctions(DPSDK_INT32 iSessionID,
	DPSDK_AVAILABLE_FUNCTIONS_LIST* pFuncList);

/**
* @brief	Acquire Sub Systems List
* @param	[IN] iSessionID			User Session ID
* @param	[OUT] pSystemList		Sub System List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAvailableSubSystems(DPSDK_INT32 iSessionID,
	DPSDK_SUBSYSTEMS_LIST* pSystemList);

/**
* @brief	Get subsystem config warning
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pSubSystemWarn		warning info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSubSystemConfigWarning(DPSDK_INT32 iSessionID,
	DPSDK_SUBSYSTEM_WARNING_INFO* pSubSystemWarn);

/**
* @brief	Get Domain user list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pKeyWord				keyWord
* @param	[IN] pDomainOrgCode			Domain Org Code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_DOMAIN_USER_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDomainUserList(DPSDK_INT32 iSessionID,
	DPSDK_DOMAINUSER_GETUSERS_KEYWORD* pKeyWord,
	DPSDK_DOMAINUSER_GETUSERS_CODE* pDomainOrgCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get User Roles list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_USERROLES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserRolesList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get All Roles list(Differs from Get roles list )
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_USERROLES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAllRolesList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Multi add Domain user
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pAddUserParam			Domain user param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_ADDUSER_FAILEDUSERS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddDomainUser(DPSDK_INT32 iSessionID,
	DPSDK_DOMAINUSER_ADDUSER_PARAM* pAddUserParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete invalid domain user
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pSession				session
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteInvalidDomainUser(DPSDK_INT32 iSessionID,
	DPSDK_SESSION_ID* pSession);

/**
* @brief	Get Domain Organizations
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pGetDomainOrgParam		Get Domain Organization Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_GET_DOMAIN_ORG_RESULT for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDomainOrganizations(DPSDK_INT32 iSessionID,
	DPSDK_GET_DOMAIN_ORG_PARAM* pGetDomainOrgParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Import Domain Organization user
* @param	[IN] iSessionID					User Session ID
* @param	[IN] pImportDomainOrgUserParam	Domain Organization user param
* @param	[OUT] pImportSession			Import response session
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ImportDomainOrganizationUsers(DPSDK_INT32 iSessionID,
	DPSDK_IMPORT_DOMAIN_ORG_USERS_PARAM* pImportDomainOrgUserParam,
	DPSDK_SESSION_ID* pImportSession);

/**
* @brief	Add Domain information
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDomainInfo			Domain information
* @param	[OUT] pDomainId				Domain ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddDomainInfo(DPSDK_INT32 iSessionID, DPSDK_DOMAIN_INFO *pDomainInfo, DPSDK_DOMAIN_ID* pDomainId);

/**
* @brief	Update domain information
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDomainInfo			Domain information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateDomainInfo(DPSDK_INT32 iSessionID, DPSDK_DOMAIN_INFO *pDomainInfo);

/**
* @brief	Get domain information
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDomainId				Domain ID
* @param	[OUT] pDomainInfo			Domain information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDomainInfo(DPSDK_INT32 iSessionID, DPSDK_DOMAIN_ID *pDomainId, DPSDK_DOMAIN_INFO *pDomainInfo);

/**
* @brief	Get domain informations by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_DOMAIN_INFO_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDomainInfosByPage(DPSDK_INT32 iSessionID, DPSDK_GET_PAGE_DOMAINS_PARAM *pParam, DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);

/**
* @brief	Delete domain information list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDomainIds				Domain ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteDomainInfos(DPSDK_INT32 iSessionID, DPSDK_DOMAIN_ID_LIST *pDomainIds);

/**
* @brief	Check device function authorized
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Function authorized parameter
* @param	[OUT] pAuthorized			Function authorized：0-No，1-Yes
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CheckDeviceFunction(DPSDK_INT32 iSessionID,
	DPSDK_ACCOUNT_FUNCTION_DEVICE_AUTH_PARAM* pParam,
	DPSDK_INT32* pAuthorized);

/**
* @brief	Get device overview
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pDevOverview			device overview
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceOverview(DPSDK_INT32 iSessionID,
	DPSDK_ACCOUNT_DEVICE_OVERVIEW* pDevOverview);

/**
* @brief	Check channel function authorized
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Function authorized parameter
* @param	[OUT] pAuthorized			Function authorized：0-No，1-Yes
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CheckChannelFunction(DPSDK_INT32 iSessionID,
	DPSDK_ACCOUNT_FUNCTION_CHANNEL_AUTH_PARAM* pParam,
	DPSDK_INT32* pAuthorized);

/**
* @brief	Search full grade device tree
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_TREE_SEARCH_GRADE_DEVICE_TREE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SearchFullGradeDeviceTree(DPSDK_INT32 iSessionID,
	DPSDK_TREE_SEARCH_FULL_GRADE_DEVICE_TREE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Search grade device tree
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_TREE_SEARCH_GRADE_DEVICE_TREE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SearchGradeDeviceTree(DPSDK_INT32 iSessionID,
	DPSDK_TREE_SEARCH_GRADE_DEVICE_TREE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get full grade device tree
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_TREE_GRADE_DEVICE_TREE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFullGradeDeviceTree(DPSDK_INT32 iSessionID,
	DPSDK_TREE_GRADE_FULL_DEVICE_TREE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Acquire User Menu List
* @param	[IN] iSessionID			User Session ID
* @param	[IN] pRoleId			Role  ID
* @param	[OUT] pMenuList			User Menu List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAvailableMenus(DPSDK_INT32 iSessionID,
	DPSDK_USER_ID* pRoleId,
	DPSDK_AVAILABLE_MENUS_LIST* pMenuList);

/**
* @brief	Check Menu Available
* @param	[IN] iSessionID			User Session ID
* @param	[IN] pRoleId			Menu  ID
* @param	[OUT] bAvailable		is  Available
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CheckMenuAvailable(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pMenuId,
	DPSDK_BOOL* pAvailable);

/**
* @brief	 get user manager user list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Get parameter
* @param	[IN] fDataCallBack			Data sync call function, refer to DPSDK_GET_USERMANAGER_USERIFNO for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserManagerUsers(DPSDK_INT32 iSessionID,
	DPSDK_GET_USERS_INFO* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	 get user manager role list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Get parameter
* @param	[IN] fDataCallBack			Data sync call function, refer to DPSDK_GET_USERMANAGER_ROLEIFNO for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserManagerRoles(DPSDK_INT32 iSessionID,
	DPSDK_GET_ROLES_INFO* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Modify User
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pSaveUserInfo			User Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SaveUser(DPSDK_INT32 iSessionID,
	DPSDK_EDIT_USER_INFO* pSaveUserInfo);


/**
* @brief	Modify Role
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pUpdateRoleInfo		Role Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateRole(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_EDIT_ROLE_INFO* pUpdateRoleInfo);
/**
* @brief	Get User
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pId					User Id
* @param	[IN] pGetUserInfo			User Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUser(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_GET_USER_INFO* pGetUserInfo);


/**
* @brief	Get Resource Role
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Resource Info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_ROLE_GET_ROLE_INFO for data type
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetResourceRoles(DPSDK_INT32 iSessionID,
	DPSDK_RESOURCE_ROLE_INFO_PARA* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get Resource Role
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Resource Info
* @param	[IN] pRoleIdListInfo		Role id list
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetResourceRoles(DPSDK_INT32 iSessionID,
	DPSDK_RESOURCE_ROLE_INFO_PARA* pParam,
	DPSDK_ROLE_ID_LIST* pRoleIdListInfo);

/**
* @brief	Get Role
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pId					Role Id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_ROLE_GET_ROLE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRole(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Add User
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pAddUserInfo			User Info
* @param	[OUT] pUserId				User ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddUser(DPSDK_INT32 iSessionID,
	DPSDK_EDIT_USER_INFO* pAddUserInfo,
	DPSDK_CHAR* pUserId);


/**
* @brief	Add Role
* @param	[IN] iSessionID				Role Session ID
* @param	[IN] pAddRoleInfo			Role Info
* @param	[OUT] pRoleId				Role ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddRole(DPSDK_INT32 iSessionID,
	DPSDK_EDIT_ROLE_INFO* pAddRoleInfo,
	DPSDK_CHAR* pRoleId);


/**
* @brief	Delete User
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iUserNum				User Number
* @param	[IN] pUserIdList			User ID List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteUser(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iUserNum,
	DPSDK_USER_ID* pUserIdList);

/**
* @brief	Delete Role
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iRoleNum				Role Number
* @param	[IN] pRoleIdList			Role ID List
* @param	[IN] pFailList				Fail List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteRole(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iRoleNum,
	DPSDK_ROLE_ID* pRoleIdList,
	DPSDK_FAILEDROLES_LIST *pFailList);

/**
* @brief	Lock User
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pUserId				User ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_LockUser(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pUserId);

/**
* @brief	UnLock User
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pUserId				User ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UnLockUser(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pUserId);

/**
* @brief	Associate user email list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pKeyword				keyword
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_ASSOCIATE_USER_EMAIL_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AssociateUserEmails(DPSDK_INT32 iSessionID,
	DPSDK_KEYWORD_INFO* pKeyword,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get user email list by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Paging parameters
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_USER_EMAIL_USER_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserEmailsByPage(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_USER_EMAIL_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get role group user list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pKeyword				keyword
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_USER_GROUP_BY_ROLE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetGroupUsers(DPSDK_INT32 iSessionID,
	DPSDK_KEYWORD_INFO* pKeyword,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Get app users
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pGetParam				Get Parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_USER_GET_APP_USERS for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAppUsers(DPSDK_INT32 iSessionID,
	DPSDK_GET_APP_USERS_PARAM* pGetParam,
	DPSDK_DataCallback fDataCallback,
	DPSDK_VOID* pUserData);

/**
* @brief	Del app users
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDeleteParam			Delete Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteAppUsers(DPSDK_INT32 iSessionID,
	DPSDK_DELETE_APP_USER_PARAM* pDeleteParam);

/**
* @brief	Update app users
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pUpdateParam			Update Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateAppUser(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_APP_USER_PARAM* pUpdateParam);


/**
* @brief	Save operate log
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pSaveLogParam			Save Log Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SaveOperateLog(DPSDK_INT32 iSessionID,
	DPSDK_SAVE_OPERATE_LOG_PARAM* pSaveLogParam);


/**
* @brief	Get right user.
* @param	[IN] iSessionID				User session ID
* @param	[IN] pResourceId		    Resource Id
* @param	[IN] fDataCallBack			Data sync call function, refer to DPSDK_DATA_USER_USERNAME_LIST for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRightUsers(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pResourceId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get user email info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pSendParam				Send Email Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SendEmailMessage(DPSDK_INT32 iSessionID,
	DPSDK_SEND_EMAIL_PARAM* pSendParam);

//////////////////////////////////////////////////////////////////////////
/*
*	Thrid **** System Interface
*/

/**
* @brief	 get all event source list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pBridgeId				Bridge ID
* @param	[IN] fDataCallBack			Data sync call function, refer to DPSDK_DATA_THRIDSYSTEM_GET_ALLEVENTSOURCE_LIST for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAllEventSources(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	set thrid data sync ststus
* @param	[IN] iSessionID				User session ID
* @param	[IN] pTaskId				Task id
* @param	[IN] iStatus				Is Auto Sync
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DataSyncSetTaskStatus(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pTaskId,
	DPSDK_INT32 iStatus);

/**
* @brief	Acquire Parameter Config Info
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pStorageInfo			Parameter Config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetStorageConfig(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_CONFIG_INFO* pStorageInfo);

/**
* @brief	Save Parameter Config info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pStorageInfo			Parameter Config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SaveStorageConfig(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_CONFIG_INFO* pStorageInfo);

/**
* @brief	Get Pos End info
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pPosEndInfo			Pos end Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPosEnd(DPSDK_INT32 iSessionID,
	DPSDK_POS_END_INFO* pPosEndInfo);

/**
* @brief	Save Pos End info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPosEndInfo			Pos end Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SavePosEnd(DPSDK_INT32 iSessionID,
	DPSDK_POS_END_INFO* pPosEndInfo);

/**
* @brief	Email Config Info
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pMailInfo				Email Config info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetMailConfig(DPSDK_INT32 iSessionID,
	DPSDK_GET_MAIL_CONFIG_PARAM* pMailInfo);

/**
* @brief	Email Config Info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pMailInfo				Email Config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SaveMailConfig(DPSDK_INT32 iSessionID,
	DPSDK_SAVE_MAIL_CONFIG_PARAM* pMailInfo);

/**
* @brief	Verify Email
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pMailInfo				Email Config Info
* @param	[OUT] pLockTime				Email Lock Time
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_TestMailConfig(DPSDK_INT32 iSessionID,
	DPSDK_TEST_MAIL_CONFIG_PARAM* pMailInfo,
	DPSDK_INT32* pLockTime);

/**
* @brief	Send Email Include Attachments
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pIncludeAttachmentsMailParam	Email Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SendMailIncludeAttachments(DPSDK_INT32 iSessionID,
	DPSDK_SEND_INCLUDE_ATTACHMENT_EMAIL_PARAM* pIncludeAttachmentsMailParam);

/**
* @brief	Generate key
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pAccessKey				Access key
* @param	[IN] pCredence				One-time authentication
* @param	[OUT]pKeyInfo				Key Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GenerateAcupickKey(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pAccessKey,
	DPSDK_CHAR* pCredence,
	DPSDK_ACUPICK_KEY_INFO* pKeyInfo);

/**
* @brief	Feature analyze Config Info
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pConfigInfo				Email Config info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFeatureAnalyzeconfig(DPSDK_INT32 iSessionID,
	DPSDK_GET_FEATURE_ANALYZE_CONFIG_PARAM* pConfigInfo);


/**
* @brief	Update Feature config
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pConfigInfo			Config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateFeatureAnalyzeConfig(DPSDK_INT32 iSessionID,
	DPSDK_GET_FEATURE_ANALYZE_CONFIG_PARAM* pConfigInfo);

/**
* @brief	Verify Server Config
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pServerInfo			Server Config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_TestFeatureAnalyzeService(DPSDK_INT32 iSessionID,
	DPSDK_GET_FEATURE_ANALYZE_SERVER_INFO* pServerInfo);

/**
* @brief	Get LDAP config
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pLdapConfig			LDAP config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLdapConfig(DPSDK_INT32 iSessionID,
	DPSDK_GET_LDAP_CONFIG_PARAM* pLdapConfig);

/**
* @brief	Get LDAP DN
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParm					LDAP Config param
* @param	[OUT] pLdapDN				LDAP DN
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLdapDN(DPSDK_INT32 iSessionID,
	DPSDK_GET_LDAP_DN_PARAM* pParm,
	DPSDK_LDAP_DN_INFO* pLdapDN);

/**
* @brief	Save LDAP config
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pLdapConfig			LDAP config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SaveLdapConfig(DPSDK_INT32 iSessionID,
	DPSDK_SAVE_LDAP_CONFIG_PARAM* pLdapConfig);

/**
* @brief	Test LDAP config
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pLdapConfig			LDAP config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_TestLdapConfig(DPSDK_INT32 iSessionID,
	DPSDK_TEST_LDAP_CONFIG_PARAM* pLdapConfig);

/**
* @brief	Get Domain Organization Sync Info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPageParam				Search KeyWord and page info
* @param	[IN] fDataCallBack			Data sync call function, refer to DPSDK_DOMAIN_ORG_SYNCS_INFO for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDomainOrgSyns(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_GROUP_BASE_PARAM* pPageParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete Domain Organization Sync mission
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgId					Domain Organization ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteDomainOrgSyn(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pOrgId);

/**
* @brief	Save Apple cert
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFileName				File name
* @param	[IN] pId					cert ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SaveAppleCert(DPSDK_INT32 iSessionID,
	DPSDK_NAME* pFileName,
	DPSDK_ID* pId);

/**
* @brief	Test Apple cert
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFileName				File name
* @param	[IN] pUserName				User name
* @param	[IN] pId					cert ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_TestAppleCert(DPSDK_INT32 iSessionID,
	DPSDK_NAME* pFileName,
	DPSDK_NAME* pUserName,
	DPSDK_ID* pId);

/**
* @brief	Export Apple cert
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pId					cert ID
* @param	[OUT] pFileUrl				File URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportAppleCert(DPSDK_INT32 iSessionID,
	DPSDK_ID* pId,
	DPSDK_FILE_URL* pFileUrl);
/**
* @brief	Import Apple cert
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFlieData				File data
* @param	[IN] pId					cert ID
* @param	[OUT] pFileName				File name
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ImportAppleCert(DPSDK_INT32 iSessionID,
	DPOSDK_FILE_DATA* pFlieData,
	DPSDK_ID* pId,
	DPSDK_NAME* pFileName);

/**
* @brief	Get Apple VOIP certificate Info
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pAppleVOIPInfo		Certificate Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAppleVoipCert(DPSDK_INT32 iSessionID, DPSDK_APPLE_VOIP_CERTINFO* pAppleVOIPInfo);

/**
* @brief	export HTTPS cert info
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pCertExportResult			HTTPS cert export info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportHttpsCert(DPSDK_INT32 iSessionID,
	DPSDK_HTTPS_CERT_EXPORT_RESULT* pCertExportResult);

/**
* @brief	generate HTTPS cert
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pGenerateCertParam			cenerate HTTPS cert parram
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GenerateHttpsCert(DPSDK_INT32 iSessionID,
	const DPSDK_HTTPS_CERT_GENERATEPARAM* pGenerateCertParam);

/**
* @brief	get HTTPS cert info
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pCertExportDetailResult	HTTPS cert detail info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetHttpsCertDetail(DPSDK_INT32 iSessionID,
	DPSDK_HTTPS_CERT_GETDETIAL_RESULT* pCertExportDetailResult);

/**
* @brief	import HTTPS cert info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pCertImportParam			import HTTPS cert info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ImportHttpsCert(DPSDK_INT32 iSessionID,
	const DPSDK_HTTPS_CERT_IMPORT_PARAM* pCertImportParam);

/**
* @brief	Get OutsideDB Type
* @param	[OUT]pDataInfo			OutsideDB Type
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSupportOutsideDataBaseType(DPSDK_INT32 iSessionID, DPSDK_DataCallback fDataCallBack, void* pDataInfo);

/**
* @brief	Get OutsideDB Config
* @param	[OUT] pDataInfo			OutsideDB Config
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetOutsideDataBaseConfig(DPSDK_INT32 iSessionID,
	DPSDK_OUTSIDE_DATABASE_INFO* pDataInfo);

/**
* @brief	Update OutsideDB Config
* @param	[IN] pDataInfo				OutsideDB Config
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateOutsideDataBaseConfig(DPSDK_INT32 iSessionID,
	DPSDK_OUTSIDE_DATABASE_INFO* pDataInfo);
/**
* @brief	Add UpdatePlan Info
* @param	[IN]pKeyWord			KeyWord
* @param	[OUT]pKeyWord			planId
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddUpgradePlanInfo(DPSDK_INT32 iSessionID,
	DPSDK_ID* pId, DPSDK_ADD_UPGRAPE_PLAN_INFO* pKeyWord);


/**
* @brief	Get UpdatePlan Info
* @param	[OUT]pDataInfo			UpdatePlanInfo
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUpgradePlanInfo(DPSDK_INT32 iSessionID, DPSDK_CHAR* pKeyWord, DPSDK_DataCallback fDataCallBack, void* pDataInfo);


/**
* @brief	Get UpdateTask Info
* @param	[OUT]pDataInfo			UpgradeTaskInfo
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUpgradeTaskInfo(DPSDK_INT32 iSessionID, DPSDK_QUERY_UPGRAPE_PLAN_PARAM* pQueryParam, DPSDK_DataCallback fDataCallBack, void* pDataInfo);


/**
* @brief	Get DeviceSoftVersion Info
* @param	[OUT]pDataInfo			DeviceSoftVersionInfo
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceSoftVersionInfo(DPSDK_INT32 iSessionID, DPSDK_DataCallback fDataCallBack, void* pDataInfo);

/**
* @brief	Execute Upgrade Task
* @param	[IN]pTaskId			pTaskId
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExecuteUpgradeTask(DPSDK_INT32 iSessionID, DPSDK_ID_LIST* pTaskId);


/**
* @brief	Delete UpdatePlan Info
* @param	[IN]pPalnId			planID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteUpgradePlanInfo(DPSDK_INT32 iSessionID, DPSDK_ID_LIST* pPalnId);


/**
* @brief	DeleteUpgradeTaskInfo
* @param	[IN]pTaskId			TASKID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteUpgradeTaskInfo(DPSDK_INT32 iSessionID, DPSDK_ID_LIST* pTaskId);

/**
* @brief	DeleteUpgradePackage
* @param	[IN]pPackageUrl			url
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteUpgradePackage(DPSDK_INT32 iSessionID, DPSDK_CHAR* pPackageUrl);


/**
* @brief	Get timezone list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_CONFIG_TYPE for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetTimezoneList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get snmp manu list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_SNMP_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSNMPManuList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get server timezone
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pTimezone				server timezone
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_GetServerTimezone(DPSDK_INT32 iSessionID,
	DPSDK_TIMEZONE_BASE_INFO* pServerTimezone);

/**
* @brief	Get SubOSS port
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pSubOSSPort			SubOSS port
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_GetSubOssPort(DPSDK_INT32 iSessionID,
	DPSDK_INT32* pSubOSSPort);

/**
* @brief	get system log total
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pQueryParam			query param
* @param	[OUT] pResult			get system log total info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSystemLogsCount(DPSDK_INT32 iSessionID,
	DPSDK_QUERY_OPERATE_LOG_PARAM* pQueryParam,
	DPSDK_EXPRESS_RECORDS_COUNT_INFO* pResult);

/**
* @brief	get system log event type list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_SYSTEM_EVENTTYPE_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSystemEventTypeList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get system log list by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pQueryParam			Query Param
* @param	[IN] pPageInfo				page info
* @param	[OUT] uiTotal				total count
* @param	[OUT] pLogList				log list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSystemLogPage(DPSDK_INT32 iSessionID,
	DPSDK_QUERY_OPERATE_LOG_PARAM* pQueryParam,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_UINT32* uiTotal,
	DPSDK_OPERATE_LOG_LIST* pLogList);

/**
* @brief	get server list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_SERVER_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetServersList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	export system log
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pExportParam			Export Param
* @param	[OUT] pResult				export result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportSystemLogEx(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_USER_LOG_PARAM* pExportParam,
	DPSDK_EXPORT_FILE_RESULT* pResult);
/**
* @brief	User Operation Log Query
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pQueryParam			Query Parameter
* @param	[IN] pPageInfo				Page Info
* @param	[OUT] uiTotal				Total Record Number
* @param	[OUT] pLogList				Log List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserLogList(DPSDK_INT32 iSessionID,
	DPSDK_QUERY_OPERATE_LOG_PARAM* pQueryParam,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_UINT32* uiTotal,
	DPSDK_OPERATE_LOG_LIST* pLogList);

/**
* @brief	get server backupFile by Page
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_OPERATE_EVENTTYPE_RESULT
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetOpeEventTypeList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Export User Operation Log
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pExportParam			Export Parameter
* @param	[OUT] pResult				export result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportUserLog(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_USER_LOG_PARAM* pExportParam,
	DPSDK_EXPORT_FILE_RESULT* pResult);


/**
* @brief	Export service debug log
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam			Export Parameter
* @param	[OUT] pResult		Export result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportServiceDebugLog(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_SERVICE_DEBUG_LOG_PARAM* pParam,
	DPSDK_EXPORT_FILE_RESULT* pResult);

/**
* @brief	Acquire Service List
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pServerList			Service Status List
* @param	[IN] uiBufLen				pServerList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_SERVER_LIST) + (num-1)*sizeof(DPSDK_REMOTE_SERVER_INFO)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetServerList(DPSDK_INT32 iSessionID,
	DPSDK_SERVER_LIST* pServerList,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Modify Service Status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChangeStatusParam		Modify service status request parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ChangeServerStatus(DPSDK_INT32 iSessionID,
	DPSDK_CHANGE_SERVER_STATUS_PARAM* pChangeStatusParam);

/**
* @brief	Modify service IP, port, internal and external network mapping (modify service port according to service name)
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pServerName			Service Name
* @param	[OUT] pServerPort			Service Port
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ConfigServerPort(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pServerName,
	DPSDK_INT32 iServerPort);

/**
* @brief	Acquire Service Status
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pFunctionList			Function List
* @param	[IN] uiBufLen				pFunctionList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_SERVER_FUNCTION_LIST) + (num-1)*sizeof(DPSDK_SERVER_FUNCTION_INFO)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetServerFunction(DPSDK_INT32 iSessionID,
	DPSDK_SERVER_FUNCTION_LIST* pFunctionList,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Modify Service Status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFunctionList			Function List
* @param	[IN] uiBufLen				pFunctionList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_SERVER_FUNCTION_LIST) + (num-1)*sizeof(DPSDK_SERVER_FUNCTION_INFO)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetServerFunction(DPSDK_INT32 iSessionID,
	DPSDK_SERVER_FUNCTION_LIST* pFunctionList,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Update Visual Intercom Config
* @param	[IN] iSessionID				User Session ID
* @param	[IN] struConfigInfo			Config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateVideoIntercomConfig(DPSDK_INT32 iSessionID,
	DPSDK_VIDEOINTERCOM_CONFIG_INFO struConfigInfo);

/**
* @brief	Get Visual Intercom Config
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pConfigInfo			Config Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVideoIntercomConfig(DPSDK_INT32 iSessionID,
	DPSDK_VIDEOINTERCOM_CONFIG_INFO* pConfigInfo);

/**
* @brief	Get Call Mode Config
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pCallMode				Call Mode
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCallModeConfig(DPSDK_INT32 iSessionID, DPSDK_INT32* pCallMode);

/**
* @brief	Get Call Mode Config
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iCallMode				Call Mode
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateCallModeConfig(DPSDK_INT32 iSessionID, DPSDK_INT32 iCallMode);


//////////////////////////////////////////////////////////////////////////
/*
*	Device Management Interface
*/
/**
* @brief	Query Device Info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDeviceCode 			Device code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_QUERY_DEVICE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryDevice(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE* pDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get devices by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Get devices by page param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_DEVICE_LIST_BY_PAGE for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDevicesByPage(DPSDK_INT32 iSessionID,
	DPSDK_GET_DEVICE_BY_PAGE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get device cost time
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				Discover device cost time param
* @param	[IN] pCostTime				Cost time
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DiscoverDeviceCostTime(DPSDK_INT32 iSessionID,
	DPSDK_GET_ENC_DEVICE_COST_TIME_PARAM* pParam,
	DPSDK_INT32* pCostTime);

/**
* @brief	Get device summary
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				Get device summary param
* @param	[IN] pDeviceSummary			Device summary
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceAummary(DPSDK_INT32 iSessionID,
	DPSDK_GET_DEVICE_SUMMARY_PARAM* pParam,
	DPSDK_DEVICE_SUMMARY_INFO* pDeviceSummary);

/**
* @brief	Get Device detailed information
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pGetDeviceParam 		Get Device param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_DEVICE_DETAILED_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceDetailInfo(DPSDK_INT32 iSessionID,
	DPSDK_GET_DEVICE_DETAIL_PARAM* pGetDeviceParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add Device
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pAddDeviceInfo 		Add Device Info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_ADD_DEVICE_RESULT for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddDevice(DPSDK_INT32 iSessionID,
	DPSDK_ADD_DEVICE_INFO* pAddDeviceInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add Device list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pAddDeviceList 		Add Device List Info
* @param	[OUT] pResult				Add device list result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddDeviceList(DPSDK_INT32 iSessionID,
	DPSDK_ADD_DEVICE_LIST* pAddDeviceList,
	DPSDK_BATACH_ADD_DEVICES_RESULT* pResult);

/**
* @brief	Update Device
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDeviceInfo 			Device Info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_UPDATE_DEVICE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateDevice(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_DEVICE_INFO* pDeviceInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Update Device
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgCode 				Organization Code
* @param	[IN] pDeviceList			Device list
* @param	[IN] uiBufLen				pDeviceList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_DEVICE_LIST) + (num-1)*sizeof(DPSDK_DEVICE_ID)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_MoveDevice(DPSDK_INT32 iSessionID,
	DPSDK_ORG_CODE* pOrgCode,
	DPSDK_DEVICE_LIST* pDeviceList,
	DPSDK_INT32 uiBufLen);

/**
* @brief	Get channel info by Device
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChnlId			 	Channel ID
* @param	[OUT] pChnlInfo				Channel info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChnlInfobyDev(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChnlId,
	DPSDK_TVWALL_CHANNEL_INFO* pChnlInfo);

/**
* @brief	Reboot Device
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDevCode				Device code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RebootDevice(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE* pDevCode);
/**
* @brief	Upgrade Device
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Upgrade device info
* @param   [OUT] pUpgradeDevSession	Upgrade device session ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpgradeDevice(DPSDK_INT32 iSessionID,
	DPSDK_UPGRADE_DEVICE* pParam,
	DPSDK_SESSION_ID* pUpgradeDevSession);

/**
* @brief	Update channel banding relation list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRelations				channel banding relation list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateChannelBandingRelations(DPSDK_INT32 iSessionID,
	DPSDK_RESOURCE_BINDING_UPDATE_CHANNEL_RELATION_LIST* pRelations);

/**
* @brief	Get channel banding relation
* @param	[IN] iSessionID				User session ID
* @param	[IN] pSrcChannelId			Source channel ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_RESOURCE_BINDING_CHANNEL_RELATION_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelBandingRelation(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pSrcChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get channel banding relation list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_RESOURCE_BINDING_CHANNEL_RELATION_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelBandingRelations(DPSDK_INT32 iSessionID,
	DPSDK_GET_BINDING_CHANNEL_RELATION_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete channel banding relation list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pSrcChannelIds			Source channel ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteChannelBandingRelations(DPSDK_INT32 iSessionID,
	DPSDK_RESOURCE_BINDING_CHANNEL_LIST* pSrcChannelIds);

/**
* @brief	Batch get channel config status
* @param	[IN] iSessionID				User session ID
* @param	[IN] pChannelIds			Channel ID list
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_RESOURCE_BINDING_CHANNEL_STATUS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchGetChannelBindingStatus(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID_LIST* pChannelIds,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Batch update channel capabilities
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						parameter
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_BATCH_UPDATE_CHANNEL_CAPABILITY_FAIL_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchUpdateChannelCapabilities(DPSDK_INT32 iSessionID,
	DPSDK_BATCH_UPDATE_CHANNEL_CAPABILITY_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get channel capabilities used infos
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Parameter
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_GET_CHANNEL_CAPABILITY_OCCUPY_RESULT_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelCapabilityUsedInfos(DPSDK_INT32 iSessionID,
	DPSDK_GET_CHANNEL_CAPABILITY_OCCUPY_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Modify Device Password
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Modify Device Password param
* @param	[IN] uiBufLen				pParam buffer length
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_UPDATE_DEVICE_PWD_RESULT for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_UPDATE_DEVICE_PWD_PARAM) + num*sizeof(DPSDK_DEVICE_CODE)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 0.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ModifyDevicePWD(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_DEVICE_PWD_PARAM* pParam,
	DPSDK_UINT32 uiBufLen,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Batch set device timezone
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDevTimezone 			device timezone param
* @param	[IN] uiBufLen				pDevTimezone buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_SET_DEVICE_TIMEZONE) + num*sizeof(DPSDK_DEVICE_CODE)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 0.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetDeviceTimezone(DPSDK_INT32 iSessionID,
	DPSDK_SET_DEVICE_TIMEZONE* pDevTimezone,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Get Device Channel list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Getting param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_DEVICE_CHANNEL_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceChannels(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_GET_CHANNEL_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get intercom device template
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pFileUrl				Intercom device template URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetIntercomDeviceTemplate(DPSDK_INT32 iSessionID,
	DPSDK_FILE_URL* pFileUrl);

/**
* @brief	Device Initialization
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pInitDevInfo 			Device Modify Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_InitDevice(DPSDK_INT32 iSessionID,
	DPSDK_INIT_DEVICE_INFO* pInitDevInfo);

/**
* @brief	Get discover device list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				Parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_DISCOVER_DEVICE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDiscoverDevices(DPSDK_INT32 iSessionID,
	DPSDK_GET_DISCOVER_DEVICE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add discover device list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				Device parameter
* @param	[OUT] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_ADD_DISCOVER_DEVICE_RESULT for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddDiscoverDevices(DPSDK_INT32 iSessionID,
	DPSDK_ADD_DISCOVER_DEVICE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Update device network information
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDevNetwork 			Device network information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateDeviceNetwork(DPSDK_INT32 iSessionID,
	DPSDK_DISCOVER_DEVICE_NETWORK_INFO* pDevNetwork);

/**
* @brief	Delete Device
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iMode					Delete Mode
* @param	[IN] pDeviceList 			Device List
* @param	[IN] uiBufLen				pDeviceList buffer length
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_DELETE_DEVICE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_DEVICE_LIST) + (num-1)*sizeof(DPSDK_DEVICE_ID)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteDevice(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iMode,
	DPSDK_DEVICE_LIST* pDeviceList,
	DPSDK_INT32 uiBufLen,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Query the reason of device offline
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam		 			Request Parameter
* @param	[OUT] pResultList		 	Result List
* @param	[IN] uiBufLen				pResultList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_GET_DEVICE_OFFLINE_REASON_RESULT_LIST) + (num-1)*sizeof(DPSDK_GET_DEVICE_OFFLINE_REASON_RESULT)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceOfflineReason(DPSDK_INT32 iSessionID,
	DPSDK_GET_DEVICE_OFFLINE_REASON_PARAM* pParam,
	DPSDK_GET_DEVICE_OFFLINE_REASON_RESULT_LIST* pResultList,
	DPSDK_UINT32 uiBufLen);

/**
*@brief	Get the list of devices with the same SIP number as the specified device
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDeviceCode		 	Device code
* @param	[IN] fDataCallBack		    Data sync callback function, refer to DPSDK_DATA_GET_REPEAT_DEVICE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSameSipDeviceList(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE* pDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add Organization
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgParam				Add Organization Parameter
* @param	[OUT] pOrgCode 				Newly added organization code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddOrg(DPSDK_INT32 iSessionID,
	DPSDK_ORG_EDIT_PARAM* pOrgParam,
	DPSDK_ORG_CODE* pOrgCode);

/**
* @brief	Modify Organization
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgCode	 			Organization Code
* @param	[IN] pOrgParam				Modify Organization Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ModifyOrg(DPSDK_INT32 iSessionID,
	DPSDK_ORG_CODE* pOrgCode,
	DPSDK_ORG_EDIT_PARAM* pOrgParam);

/**
* @brief	Delete Organization
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pOrgCode				Organization Code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteOrg(DPSDK_INT32 iSessionID,
	DPSDK_ORG_CODE* pOrgCode);

/**
* @brief	Mobile Organization
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pMoveParam				Organization Mobile Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_MoveOrg(DPSDK_INT32 iSessionID,
	DPSDK_ORG_MOVE_PARAM* pMoveParam);

/**
* @brief	barrier Control
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Barrier Control Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ControlSluice(DPSDK_INT32 iSessionID,
	DPSDK_ITC_PARAM* pParam);


//////////////////////////////////////////////////////////////////////////
/*
*	LICENSE Interface
*/

/**
* @brief	Get License List
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_LICENSE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLicenseList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get license key list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_LICENSE_KEY_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLicenseKeyList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get license	detail list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_LICENSE_DETAIL_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLicenseDetailList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get license key list upgrade from express
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_LICENSE_KEY_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLicenseKeysUpgradeFromExp(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Upgrade license from express
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Upgrade license parameter
* @param	[OUT] pErrorDetail			error detail
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpgradeLicenseFromExpress(DPSDK_INT32 iSessionID,
	DPSDK_LICENSE_UPGRADE_PARAM* pParam,
	DPSDK_LICENSE_ERROR_DESC* pErrorDetail,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Export License file from express
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					export license parameter
* @Param   [OUT] pFileUrl				File URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportLicenseFileFromExpress(DPSDK_INT32 iSessionID,
	DPSDK_LICENSE_UPGRADE_PARAM* pParam,
	DPSDK_FILE_URL* pFileUrl);

/**
* @brief	ActiveLicensen(online)
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pLicenseKeys			License key list
* @param	[OUT] pErrorDetail			error detail
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ActiveLicense(DPSDK_INT32 iSessionID,
	DPSDK_LICENSE_KEY_LIST* pLicenseKeys,
	DPSDK_LICENSE_ERROR_DESC* pErrorDetail,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	ActiveCareLicense(online)
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pLicenseKeys			License key list
* @param	[IN] pCareKeys				Care License key list
* @param	[OUT] pErrorDetail			error detail
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ActiveCareLicense(DPSDK_INT32 iSessionID,
	DPSDK_LICENSE_KEY_LIST* pLicenseKeys,
	DPSDK_LICENSE_KEY_LIST* pCareKeys,
	DPSDK_LICENSE_ERROR_DESC* pErrorDetail,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	ReActiveLicensen(online)
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pErrorDetail			error detail
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ReActiveLicense(DPSDK_INT32 iSessionID,
	DPSDK_LICENSE_ERROR_DESC* pErrorDetail,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Deactivate license(online)
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pErrorDetail			error detail
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeactivateLicense(DPSDK_INT32 iSessionID,
	DPSDK_LICENSE_ERROR_DESC* pErrorDetail);

/**
* @brief	Export active license file((off line)
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pLicenseKeys			License key list
* @Param   [OUT] pFileUrl				File URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportActiveLicenseFile(DPSDK_INT32 iSessionID,
	DPSDK_LICENSE_KEY_LIST* pLicenseKeys,
	DPSDK_FILE_URL* pFileUrl);

/**
* @brief	Export deactivate license file((off line)
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pFileUrl				File URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportDeactivateLicenseFile(DPSDK_INT32 iSessionID,
	DPSDK_FILE_URL* pFileUrl);

/**
* @brief	Switch license to free version
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_LICENSE_EXCEED_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SwitchLicenseToFreeVersion(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get license Active URL from server
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pActiveUrl			Active URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLicenseServer(DPSDK_INT32 iSessionID, DPSDK_FILE_URL* pActiveUrl);

/**
* @brief	Get license module info
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam					    Parameter
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_LICENSE_MODULE_USED_INFO
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLicenseModuleUsedInfo(DPSDK_INT32 iSessionID,
	DPSDK_GET_LICENSE_MODULE_USED_INFO_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

//////////////////////////////////////////////////////////////////////////
/*
*	Record Schedule Interface
*/

/**
* @brief	Add channel record plan
* @param	[IN] iSessionID				User Session
* @param	[IN] pPlanInfo 				Record Schedule
* @param	[OUT] pPlanId 				Record Schedule ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddStoragePlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_INFO* pPlanInfo,
	DPSDK_INT32* pPlanId);

/**
* @brief	Modify channel record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iPlanId 				Record Schedule ID
* @param	[IN] pPlanInfo 				Record Schedule
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateStoragePlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPlanId,
	DPSDK_STORAGE_PLAN_INFO* pPlanInfo);

/**
* @brief	Check Unable channes
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pCheckParam 			Record Schedule ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PLAN_UNABLE_CHANNEL_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CheckUnableRecordChannels(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_UNABLE_CHANNEL_PARAM* pCheckParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Search channel record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iPlanID				Record Schedule ID
* @param	[IN] pChannelId				Channel ID
* @param	[OUT] pPlanInfo 			Record Schedule information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetStoragePlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPlanID,
	DPSDK_CHANNEL_ID* pChannelId,
	DPSDK_STORAGE_PLAN_DETAIL_INFO* pPlanInfo);

/**
* @brief	Modify channel motion record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iPlanId 				Record Schedule ID
* @param	[IN] pPlanInfo 				Record Schedule
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateMotionStoragePlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPlanId,
	DPSDK_STORAGE_PLAN_INFO* pPlanInfo);


/**
* @brief	Search channel record plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChannelId				Channel ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_STORAGE_PLAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetStoragePlanList(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Search channel Motion record plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChannelId				Channel ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_STORAGE_PLAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetMotionStoragePlanList(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get channel Record Plan list by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_CHANNEL_RECORD_PLAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetStoragePlansByPage(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_GET_CHANNEL_RECORD_PLAN_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);

/**
* @brief	Get existed record plan channel list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iPosition				Position：1=Server, 3=Device，0-all
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PLAN_CHANNEL_BASE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetExistRecordPlanChannels(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPosition,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get record Plan remove log  list by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PLAN_CHANNEL_REMOVE_LOG_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL GetStoragePlanRemoveLogsByPage(DPSDK_INT32 iSessionID,
	DPSDK_GET_CHANNEL_REMOVE_LOG_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/* @brief	Change channel record plan Status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				Record plan Status
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ChangeStoragePlanStatus(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_STATUS_PARAM* pParam);

/**
* @brief	Delete Record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanId 				Record Schedule ID
* @param	[IN] pChannelId				Channel ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteStoragePlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPlanId,
	DPSDK_CHANNEL_ID* pChannelId);

/**
* @brief	Add record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanInfo 				Plan info
* @param	[OUT] pPlanId 				Plan ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddRecordPlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_RECORD_BASE_INFO* pPlanInfo,
	DPSDK_INT32* pPlanId);

/**
* @brief	Add Motion record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanInfo 				Plan info
* @param	[OUT] pPlanId 				Plan ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddMotionRecordPlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_RECORD_BASE_INFO* pPlanInfo,
	DPSDK_INT32* pPlanId);

/**
* @brief	Update record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iPlanId 				Plan ID
* @param	[IN] pPlanInfo 				Plan info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateRecordPlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPlanId,
	DPSDK_STORAGE_PLAN_RECORD_BASE_INFO* pPlanInfo);
/**
* @brief	Update record plan Status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanInfo 				Plan info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateRecordPlanStatus(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_RECORD_UPDATESTATUS_INFO* pPlanInfo);

/**
* @brief	Update motion record plan Status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanInfo 				Plan info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateMotionRecordPlanStatus(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_RECORD_UPDATESTATUS_INFO* pPlanInfo);

/**
* @brief	Get Page Channel record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] stuQueryInfo 			Plan page channel info
* @param	[IN] fDataCallBack 			callback
* @param	[IN] pUserData				callback param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageChannelRecordPlans(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_RECORD_QUERYCHANNEL_INFO* pStuQueryInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get Page Channel Motion record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] stuQueryInfo 			Plan page channel info
* @param	[IN] fDataCallBack 			callback
* @param	[IN] pUserData				callback param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageChannelMotionRecordPlans(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_RECORD_QUERYCHANNEL_INFO* pStuQueryInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get record plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iPlanId 				Data sync callback function, refer to DPSDK_DATA_STORAGE_PLAN_RECORD_DETAIL_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRecordPlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPlanId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get record plan list by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Getting parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PALN_RECORD_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRecordPlansByPage(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_GET_RECORD_PALN_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Switch Record Schedule Status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iPlanId 				Record Schedule id
* @param	[IN] bStat 					Record Schedule Status, false:Disable, true:Enable
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ChangeRecordPlanStatus(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPlanId,
	DPSDK_BOOL bStat);

/**
* @brief	Delete Record plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanIds 				Plan ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteStoragePlans(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_ID_LIST* pPlanIds);


/**
* @brief	Delete Motion Record plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanIds 				Plan ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteMotionStoragePlans(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_ID_LIST* pPlanIds);


/**
* @brief	Copy Record Schedule
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pCopyParam				Copy Request Parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CopyStoragePlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_COPY_PARAM* pCopyParam);


/**
* @brief	Add device file patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFilePatchPlanInfo 	File Patch plan information
* @param	[OUT] pPatchPlanId 			Patch plan ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddDeviceFilePatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_FILE_PATCH_PLAN_INFO* pFilePatchPlanInfo,
	DPSDK_INT32* pPatchPlanId);

/**
* @brief	Update device file patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFilePatchPlanInfo 	File Patch plan information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateDeviceFilePatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_FILE_PATCH_PLAN_INFO* pFilePatchPlanInfo);

/**
* @brief	Add file patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pFilePatchPlanInfo 	File Patch plan information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddFilePatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_FILE_PATCH_PLAN_INFO* pFilePatchPlanInfo);

/**
* @brief	Add channel patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPatchPlanInfo 		Patch plan information
* @param	[OUT] pPatchPlanId 			Patch plan ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddChannelPatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_PATCH_PLAN_INFO* pPatchPlanInfo,
	DPSDK_INT32* pPatchPlanId);

/**
* @brief	Update channel patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPatchPlanInfo 		Patch plan information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateChannelPatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_PATCH_PLAN_INFO* pPatchPlanInfo);

/**
* @brief	Get channel patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChannelId				Channel ID
* @param	[IN] iPatchPlanId			Data sync callback function, refer to DPSDK_DATA_GET_STORAGE_PLAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelPatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPatchPlanId,
	DPSDK_CHANNEL_ID* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get device file patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDeviceCode			Device Code
* @param	[IN] iPatchPlanId			Data sync callback function, refer to DPSDK_DATA_STORAGE_PLAN_DEVIDE_FILE_PATCH_PLAN_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceFilePatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPatchPlanId,
	DPSDK_DEVICE_CODE* pDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get channel patch plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChannelId				Channel ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_STORAGE_PLAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelPatchPlans(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get device file patch plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pDeviceCode			Device Code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PLAN_DEVIDE_FILE_PATCH_PLAN_LIST for data
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceFilePatchPlans(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE* pDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get channel patch plan list by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_CHANNEL_PATCH_PLAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelPatchPlansByPage(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_GET_CHANNEL_PATCH_PLAN_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);

/**
* @brief	Get page device file patch plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_DEVICE_FILE_PATCH_PLAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageDeviceFilePatchPlans(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_GET_DEVICE_FILE_PATCH_PLAN_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);

/**
* @brief	Get exist patch plan channel list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PATCH_PLAN_CHANNEL_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetExistPatchPlanChannels(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get exist file patch plan device list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_FILE_PATCH_PLAN_DEVICE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetExistFilePatchPlanDevices(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get patch plan remove log list by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam					Parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PATCH_PLAN_REMOVE_LOG_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPatchPlanRemoveLogsByPage(DPSDK_INT32 iSessionID,
	DPSDK_GET_CHANNEL_REMOVE_LOG_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/* @brief	Change channel patch plan Status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				Record plan Status
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ChangeChannelPatchPlanStatus(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_STATUS_PARAM* pParam);

/**
* @brief	Delete patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iPatchPlanId 			Patch plan ID
* @param	[IN] pChannelId				Channel ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeletePatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPatchPlanId,
	DPSDK_CHANNEL_ID* pChannelId);

/**
* @brief	Add patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPatchPlanInfo 		Patch plan information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddPatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_UPDATE_PATCH_PLAN_INFO* pPatchPlanInfo);

/**
* @brief	Update patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPatchPlanInfo 		Patch plan information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdatePatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_UPDATE_PATCH_PLAN_INFO* pPatchPlanInfo);

/**
* @brief	Get patch plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPatchPlanId 			Patch plan ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_GET_PATCH_PLAN_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPatchPlan(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iPatchPlanId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get  patch plan list by page
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				parameter
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PATCH_PLAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPatchPlansByPage(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_GET_PATCH_PLAN_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete patch plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanIds 				Patch plan ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeletePatchPlans(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_ID_LIST* pPlanIds);

/**
* @brief	Delete patch file plan list
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanIds 				Patch plan ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteFilePatchPlans(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_ID_LIST* pPlanIds);

/**
* @brief	Set patch plan status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanIds 				Patch plan ID
* @param	[IN] bStatus 				On or off status, false:Off, true:On
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetPatchPlanStatus(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_ID_LIST* pPlanIds,
	DPSDK_BOOL bStatus);

/**
* @brief	Set file patch plan status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPlanIds 				File Patch plan ID
* @param	[IN] bStatus 				On or off status, false:Off, true:On
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetFilePatchPlanStatus(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_ID_LIST* pPlanIds,
	DPSDK_BOOL bStatus);

/**
* @brief	Batch get channel plan config status
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChannelIds 			Channel ID list
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PLAN_CONFIG_STATUS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchGetChannelConfigStatus(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID_LIST* pChannelIds,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Copy Channel Record Plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				Copy Channel Record Plan Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CopyChannelRecordPlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_COPY_CHANNEL_RECORD_PLAN_PARAM* pParam);

/**
* @brief	Copy Channel Motion Record Plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pParam 				Copy Channel Record Plan Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CopyChannelMotionRecordPlan(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_PLAN_COPY_CHANNEL_RECORD_PLAN_PARAM* pParam);


/**
* @brief	Get Channel New Device Record Plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] struChannelId 			Channe ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PLAN_CONFIG_STATUS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelNewDeviceRecordPlan(DPSDK_INT32 iSessionID, DPSDK_ID struChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Set Channel New Device Record Plan
* @param	[IN] iSessionID				User Session ID
* @param	[IN] struChannelId 			Channe ID
* @param	[IN] pParam					set Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetChannelNewDeviceRecordPlan(DPSDK_INT32 iSessionID, DPSDK_ID struChannelId, DPSDK_NEWDEVICERECORDPLAN_PARAM* pParam);

//////////////////////////////////////////////////////////////////////////
/*
*	Storage configuration interface
*/

/**
* @brief	Add Raid cloud
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDiskParam				Raid Param
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddRaidDisk(DPSDK_INT32 iSessionID, DPSDK_ADD_RAID_DISK_PARAM* pDiskParam);
/**
* @brief	Delete Raid cloud
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDiskParam				Raid Param
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteRaidDisk(DPSDK_INT32 iSessionID, DPSDK_DELETE_RAID_DISK_PARAM* pDiskParam);
/**
* @brief	Add hotstandby Raid cloud
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDiskParam				Raid Param
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddRaidHotStandbyDisk(DPSDK_INT32 iSessionID, DPSDK_ADD_RAIDHOT_DISK_PARAM* pDiskParam);
/**
* @brief	Delete hotstandby Raid cloud
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDiskParam				Raid param
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteRaidHotStandbyDisk(DPSDK_INT32 iSessionID, DPSDK_ADD_RAIDHOT_DISK_PARAM* pDiskParam);
/**
* @brief	Get config hotstandby raid list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pServerCode			Server Code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_HOTSTANDBY_RAIDS
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAvailableHotStandbyRaids(DPSDK_INT32 iSessionID,
	DPSDK_ID *pServerCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get config Raid disk list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					raid disk param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DISK_RAIDS
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAvailableRaidDisks(DPSDK_INT32 iSessionID,
	DPSDK_DISK_RAID_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get raid detail
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					raid disk param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_RAID_DISK_INFO
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRaidDetail(DPSDK_INT32 iSessionID,
	DPSDK_DISK_RAID_PARAM_EX* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get raid type list
* @param	[IN] iSessionID				User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_RAID_TYPES
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRaidTypes(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get picture storage config warning
* @param	[IN] iSessionID				User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_PIC_CONFIG_WARN for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetStoragePicConfigWarning(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get  Hot Spare Status
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pResult				hot spare status
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetHotSpareStatus(DPSDK_INT32 iSessionID, DPSDK_BOOL* pStatus);

/**
* @brief	Get net disk list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pServerCode			Server code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_NET_DISK_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetNetDiskList(DPSDK_INT32 iSessionID,
	DPSDK_ID *pServerCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add net disk
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Net disk parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddNetDisk(DPSDK_INT32 iSessionID,
	DPSDK_ADD_NET_DISK_PARAM* pDiskParam);

/**
* @brief	Delete net disk
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDiskParam				Net disk parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteNetDisk(DPSDK_INT32 iSessionID,
	DPSDK_DELETE_NET_DISK_PARAM* pDiskParam);

/**
* @brief	Format net disk
* @param	[IN] pFormatParam			Format parameter
* @param	[IN] uiBufLen				pFormatParam buffer length
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_FORMAT_NET_DISK_FAILED_PATH_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_STORAGE_NET_DISK_FORMAT_PARAM) + num*sizeof(DPSDK_PATH)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 0.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_FormatNetDisk(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_NET_DISK_FORMAT_PARAM* pFormatParam,
	DPSDK_UINT32 uiBufLen,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Rob to format net dist
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRobParam				robbing parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RobNetDisk(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_DISK_ROB_PARAM* pRobParam);

/**
* @brief	Get net disk type list
* @param	[IN] iSessionID				User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_NET_DISK_TYPE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetNetDiskTypeList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Change net disk type
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDiskType				Disk type
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ChangeNetDiskType(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_DISK_TYPE_PARAM* pDiskType);
/**
* @brief	Get local disk list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pServerCode			Server code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_LOCAL_DISK_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLocalDiskList(DPSDK_INT32 iSessionID,
	DPSDK_ID *pServerCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Delete virtual disk
* @param	[IN] iSessionID				User session ID
* param   [IN]
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteLocalVirtualDisk(DPSDK_INT32 iSessionID,
	DPSDK_DELETE_LOCAL_VIRTUALDISK_INFO* pDeleteDiskInfo);

/**
* @brief	Format local disk
* @param	[IN] iSessionID				User session ID
* @param	[IN] pFormatParam			Formatting parameter
* @param	[IN] uiBufLen				pFormatParam buffer length
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_FORMAT_LOCAL_DISK_FAILED_PATH_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_STORAGE_LOCAL_DISK_FORMAT_PARAM) + num*sizeof(DPSDK_PATH)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 0.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_FormatLocalDisk(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_LOCAL_DISK_FORMAT_PARAM* pFormatParam,
	DPSDK_UINT32 uiBufLen,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Rob to format local dist
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRobParam				parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RobLocalDisk(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_DISK_ROB_PARAM* pRobParam);

/**
* @brief	Get local disk type list
* @param	[IN] iSessionID				User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_LOCAL_DISK_TYPE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLocalDiskTypeList(DPSDK_INT32 iSessionID, DPSDK_ID *pServerCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Change local disk type
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDiskType				Disk type
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ChangeLocalDiskType(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_DISK_TYPE_PARAM* pDiskType);

/**
* @brief	Get disk group list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pServerCode			Server code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_DISK_GROUP_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDiskGroupList(DPSDK_INT32 iSessionID,
	DPSDK_ID *pServerCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get disk group
* @param	[IN] iSessionID				User session ID
* @param	[IN] pId					Disk group ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_DISK_GROUP_DETAIL for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDiskGroup(DPSDK_INT32 iSessionID,
	DPSDK_ID* pId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get binding disk group channel list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pServerCode			Server code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_BINDING_DISK_GROUP_CHANNEL_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetBindingDiskGroupChannels(DPSDK_INT32 iSessionID,
	DPSDK_ID *pServerCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get unbound disk list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pServerCode			Server code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_STORAGE_UNBOUND_DISK_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUnboundDiskList(DPSDK_INT32 iSessionID,
	DPSDK_ID *pServerCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add disk group
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDiskGrpParam			Disk group parameter
* @param	[IN] uiBufLen				pDiskGrpParam buffer length
* @param	[OUT] pId					Disk group ID
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_DISK_GROUP_PARAM) + num*sizeof(DPSDK_CHANNEL_ID)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 0.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddDiskGroup(DPSDK_INT32 iSessionID,
	DPSDK_DISK_GROUP_PARAM* pDiskGrpParam,
	DPSDK_UINT32 uiBufLen,
	DPSDK_ID* pId);

/**
* @brief	Update disk group
* @param	[IN] iSessionID				User session ID
* @param	[IN] pId					Disk group ID
* @param	[IN] pDiskGrpParam			Disk group parameter
* @param	[IN] uiBufLen				pDiskGrpParam buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_DISK_GROUP_PARAM) + num*sizeof(DPSDK_CHANNEL_ID)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 0.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateDiskGroup(DPSDK_INT32 iSessionID,
	DPSDK_ID* pId,
	DPSDK_DISK_GROUP_PARAM* pDiskGrpParam,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Delete disk group list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pIds					Disk group ID list
* @param	[IN] uiBufLen				pIds buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_ID_LIST) + num*sizeof(DPSDK_ID)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 0.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteDiskGroups(DPSDK_INT32 iSessionID,
	DPSDK_ID_LIST* pIds,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Get disk statistics
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pDiskStatistics		Disk statistics
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDiskStatistics(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_DISK_STATISTICS* pDiskStatistics);




/**
* @brief	Search video service list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pLocale				language zh_CN/en
* @param	[OUT] pServerList 			Service list
* @param	[IN] uiBufLen				pServerList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_DISK_SERVER_LIST) + (num-1)*sizeof(DPSDK_DISK_SERVER_INFO)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVideoServerList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pLocale,
	DPSDK_DISK_SERVER_LIST* pServerList,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Search image service list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pLocale				language zh_CN/en
* @param	[OUT] pServerList 			Service list
* @param	[IN] uiBufLen				pServerList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_DISK_SERVER_LIST) + (num-1)*sizeof(DPSDK_DISK_SERVER_INFO)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPicServerList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pLocale,
	DPSDK_DISK_SERVER_LIST* pServerList,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Get device storage position
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeviceCode			device code
* @param	[OUT] pStorageInfo 			Storage position infomation
* @return	Return 0 if succeeded, return error code if failed.
* @note
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceStoragePosition(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_DEVICE_STORAGE_POSITION_INFO* pStorageInfo);

/**
* @brief	Get device storage position list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPageParam				page param
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DEVICE_STORAGE_POSITION_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
* @note
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageDeviceStoragePositionList(DPSDK_INT32 iSessionID,
	DPSDK_STORAGE_GET_CHANNEL_PATCH_PLAN_PARAM* pPageParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Update device storage position
* @param	[IN] iSessionID				User session ID
* @param	[IN] pStorageInfo			Device storage position infomation, refer to DPSDK_UPDATE_DEVICE_STORAGE_POSITION
* @return	Return 0 if succeeded, return error code if failed.
* @note
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateDeviceStoragePosition(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_DEVICE_STORAGE_POSITION* pStorageInfo);

/**
* @brief	Alarm output control
* @param	[IN]	iSessionID					User session ID
* @param	[IN]	pAlarmOutParam				Alarm output control parameters
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AlarmActionOut(DPSDK_INT32 iSessionID,
	DPSDK_PTZOPERATE_ALARMOUT_PARAM* pAlarmOutParam);

/**
* @brief	Audio light control
* @param	[IN]	iSessionID					User session ID
* @param	[IN]	pAudioLightParam     		Alarm Light control parameters
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AudioLightRegulate(DPSDK_INT32 iSessionID,
	DPSDK_AUDIOLIGHT_REGULATE_PARAM* pAudioLightParam);

/**
* @brief	Get Audio light Volumes
* @param	[IN]	iSessionID					User session ID
* @param	[IN]	pDeviceVolumesParam     	Alarm Volumes control parameters
* @param	[OUT]	fDataCallBack				Operation result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchGetDeviceVolumes(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_GETVOLUMES_PARAM* pDeviceVolumesParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Audio light Volumes control
* @param	[IN]	iSessionID					User session ID
* @param	[IN]	pDeviceVolumesParam     	Alarm Volumes control parameters
* @param	[OUT]	fDataCallBack				Operation result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchRegulateDeviceVolumes(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_VOLUMES_REGULATE_PARAM* pDeviceVolumesParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Search heat map
* @param	[IN]	iSessionID					User session ID
* @param	[IN]	pGetHeatMapParam			Search heat map parameters
* @param	[OUT]	pHeatMapInfoXml				Search heat map, xml stream
* @return	Return 0 if succeeded, return error code if failed.
* @note		pHeatMapInfoXml shall be released by DPSDK_ReleaseDataBuffer
*
*			pHeatMapInfoXml format is shown as below
*			<HeatMapInfos>
*				<HeatMapInfo>
*					<Width>width</Width>
*					<Height>height</Height>
*					<Average>average</Average>
*					<PicDataLen>picdatalen</PicDataLen>
*					<PicData>picdata</PicData>
* 				</HeatMapInfo>
*			</HeatMapInfos>
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryHeatmap(DPSDK_INT32 iSessionID,
	DPSDK_PTZOPERATE_GETHEATMAP_PARAM* pGetHeatMapParam,
	DPSDK_CHAR** pHeatMapInfoXml);

/**
* @brief	Search Accerate heat map
* @param	[IN]	iSessionID					User session ID
* @param	[IN]	pGetHeatMapParam			Search heat map parameters
* @param   [IN]    iQueryType                  Query Type
* @param	[OUT]	pHeatMapInfoXml				Search heat map, xml stream
* @return	Return 0 if succeeded, return error code if failed.
* @note		pHeatMapInfoXml shall be released by DPSDK_ReleaseDataBuffer
*
*			pHeatMapInfoXml format is shown as below
*			<HeatMapInfos>
*				<HeatMapInfo>
*					<Width>width</Width>
*					<Height>height</Height>
*					<Average>average</Average>
*					<PicDataLen>picdatalen</PicDataLen>
*					<PicData>picdata</PicData>
* 				</HeatMapInfo>
*			</HeatMapInfos>
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryAccurateHeatmap(DPSDK_INT32 iSessionID,
	DPSDK_PTZOPERATE_GETHEATMAP_ACCURATE_PARAM* pGetAccurateHeatMapParam,
	DPSDK_CHAR** pHeatMapInfoXml);

/**
* @brief	Get linage video channel info
* @param	[IN]	iSessionID					User session ID
* @param	[out]	ppLinkedResourceParam		Link video channel info
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelLinkResource(DPSDK_INT32 iSessionID,
	DPSDK_LINKED_RESOURCE_PARAM** ppLinkedResourceParam);

/**
* @brief	Release linkage video channel memory
* @param	[IN]pLinkedResourceParam			Linkage video channel data
* @return	Return 0 if succeeded, return error code if failed
* @note     pLinkedResourceParam is getting from DPSDK_GetChannelLinkResource
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ReleaseLinkResourceBuffer(DPSDK_LINKED_RESOURCE_PARAM* pLinkedResourceParam);

/**
* @brief	Get channel real-time temperature
* @param	[IN] iSessionID			User session ID
* @param	[IN] pChannelId			Channel ID
* @param	[IN] iPosX				x coordinates
* @param	[IN] iPosY				y coordinates
* @param	[OUT] pTemperatureInfo	Temperature data
* @return	Return 0 if succeeded, return error code if failed.
* @note		The tested position coordinated, value 0~8192
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelTemperature(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_INT32 iPosX,
	DPSDK_INT32 iPosY,
	DPSDK_TEMPERATURE_INFO* pTemperatureInfo);

/**
* @brief Batch Get Cross Line Rules
* @param	[IN] iSessionID					    User session ID
* @param	[IN] pParam					        pParam
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_DATA_BATCHGET_CROSSLINE_RULES
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchGetCrossLineRules(DPSDK_INT32 iSessionID,
	DPSDK_BATCH_GET_CROSSLINE_RULES_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief Get Channel Rules
* @param	[IN] iSessionID					    User session ID
* @param	[IN] pParam					        pParam
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_DATA_BATCHGET_CROSSLINE_RULES
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelRules(DPSDK_INT32 iSessionID,
	DPSDK_GET_CHANNEL_RULES_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief Synchronize Channel Rules
* @param	[IN] iSessionID					    User session ID
* @param	[IN] pParam					        pParam
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_DATA_SYNCHRO_CHANNEL_CROSSLINE_RULES
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SynchronizeChannelRules(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete Flow Group list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pGroupId				    pGroupId id
* @return	Successful return 0，failed return error code
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteFlowGroups(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pGroupId,
	DPSDK_INT32 iDelMode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief   Get Groups About PassengerFlow
* @param	[IN] iSessionID					    User session ID
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_DATA_GET_FLOW_GROUPS
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFlowGroups(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief   Get Group About PassengerFlow
* @param	[IN] iSessionID					    User session ID
* @param	[IN] pGroupId					    Group ID
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_DATA_GET_FLOW_GROUP
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFlowGroup(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pGroupId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief   Get Device Record Wholeness
* @param	[IN] iSessionID					    User session ID
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_DATA_GET_FLOW_GROUP
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceRecordWholenessConfig(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief   Get Group Real time Flow
* @param	[IN] iSessionID					    User session ID
* @param	[IN] pGroupId					    Group ID
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_DATA_GET_GROUP_REALTIME_FLOW
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetGroupRealtimeFlow(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pGroupId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief   Get Group User Defined Texts
* @param	[IN] iSessionID					    User session ID
* @param	[IN] pGroupId					    Group ID
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_DATA_GET_FLOW_GROUP_TEXTS
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetGroupUserDefinedTexts(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pGroupId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

//////////////////////////////////////////////////////////////////////////
/*
*	Cloud synopsis interface
*/

/**
* @brief	Get cloud synopsis intelligent analysis time slice list
* @param	[IN] iSessionID			User session ID
* @param	[IN] pQueryParam		Query parameter
* @param	[OUT] pTimeSecList		Time slice list
* @param	[IN] uiBufLen			pTimeSecList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	uiBufLen = sizeof(DPSDK_ABSTRACT_ANALYSIS_TIME_SEC_LIST) + (num-1)*sizeof(DPSDK_ABSTRACT_ANALYSIS_TIME_SEC)
*			Parameter num refers to the number of menu rights you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAbstractAnalysisTimeSec(DPSDK_INT32 iSessionID,
	DPSDK_ABSTRACT_ANALYSIS_TIME_QUERY_PARAM* pQueryParam,
	DPSDK_ABSTRACT_ANALYSIS_TIME_SEC_LIST* pTimeSecList,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	Get cloud synopsis detailed info by time
* @param	[IN] iSessionID				User session ID
* @param	[IN] pChannelID				Channel ID
* @param	[IN] tBeginTime				Start time
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_ABS_INFO_TIME for data type.
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAbstractDetailInfoByTime(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelID,
	DPSDK_TIMET tBeginTime,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get cloud synopsis abstract info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pQueryParam			Query parameter
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_ABS_SUMMARY_INFO for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAbstractSummaryInfo(DPSDK_INT32 iSessionID,
	DPSDK_ABSTRACT_OBJ_SUMMMARY_INFO_QUERY_PARAM* pQueryParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

//////////////////////////////////////////////////////////////////////////
/*
*	Alarm controller interface
*/

/**
* @brief	alarm controller control
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOperateParam			Alarm controller operation parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_OperateAlarmHost(DPSDK_INT32 iSessionID,
	DPSDK_OPERATE_ALARMHOST_PARAM* pOperateParam);

/**
* @brief	get area list
* @param	[IN] iSessionID				User session ID
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_AREA_LIST for data type
* @param	[IN] pUserData				User data
* @param	[IN] pParam					Get area list parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAreaList(DPSDK_INT32 iSessionID,
	DPSDK_GET_AREA_LIST_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get page area list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPageInfo				Page info
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_PAGE_AREA_LIST for data type
* @param	[IN] pUserData				User data
* @param	[IN] pParam					Get area list parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageAreaList(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_GET_PAGE_AREA_LIST_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get page zone list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPageInfo				Page info
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_PAGE_ZONE_LIST for data type
* @param	[IN] pUserData				User data
* @param	[IN] pParam					Get area list parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageZoneList(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_GET_PAGE_ZONE_LIST_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	alarm host device control
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOperateParam			Alarm host device operation parameter
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_OPERATE_ALARMHOST_DEVICE for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_OperateAlarmHostDevice(DPSDK_INT32 iSessionID,
	DPSDK_OPERATE_DEVICE_PARAM* pOperateParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	alarm host area control
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOperateParam			Alarm host area operation parameter
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_OPERATE_ALARMHOST_AREA for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_OperateAlarmHostArea(DPSDK_INT32 iSessionID,
	DPSDK_OPERATE_AREA_PARAM* pOperateParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	alarm host zone control
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOperateParam			Alarm host zone operation parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_OperateAlarmHostZone(DPSDK_INT32 iSessionID,
	DPSDK_OPERATE_ZONE_PARAM* pOperateParam);

/**
* @brief	update alarm host device
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeviceCode			Alarm host device code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateAlarmHostDevice(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode);

/**
* @brief	operate alarm host out channels
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOperateParam			operation parameter
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_HOST_OUT_FAIL_CHANNEL_LIST for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_OperateAlarmHostOutChannels(DPSDK_INT32 iSessionID,
	DPSDK_Channel_OPERATE_PARAM* pOperateParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	operate alarm host signal channels
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOperateParam			operation parameter
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_HOST_SIGNAL_FAIL_CHANNEL_LIST for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_OperateAlarmHostSignalChannels(DPSDK_INT32 iSessionID,
	DPSDK_Channel_OPERATE_PARAM* pOperateParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get alarm host out channels info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeviceCode			Alarm host device code
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_HOST_OUT_CHANNEL_LIST for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmHostOutChannels(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get alarm host signal channels info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeviceCode			Alarm host device code
* @param	[IN] fDataCallBack			Data sync call function. Refer to DPSDK_DATA_GET_HOST_SIGNAL_CHANNEL_LIST for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmHostSignalChannels(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);




//////////////////////////////////////////////////////////////////////////
/*
*	A&C interface
*/

/**
* @brief	Add Time Template
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pTemplateDetailInfo	Time Template Info
* @param	[OUT] iTemplateId			Time Template id
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddTimeTemplate(DPSDK_INT32 iSessionID,
	DPSDK_TIME_TEMPLATE_DETAIL_INFO* pTemplateDetailInfo,
	DPSDK_INT32* iTemplateId);

/**
* @brief	Modify Time Template
* @param	[IN] iSessionID			 	User Session ID
* @param	[IN] pTemplateDetailInfo	Time Template Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateTimeTemplate(DPSDK_INT32 iSessionID,
	DPSDK_TIME_TEMPLATE_DETAIL_INFO* pTemplateDetailInfo);

/**
* @brief	Acquire Time Module Basic Info
* @param	[IN] iSessionID				User Session ID
* @param    [IN] pParam					Query Time Template List Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_TIME_TEMPLATE_BASE_INFO_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetTimeTemplateBaseInfoList(DPSDK_INT32 iSessionID,
	DPSDK_QUERY_TIME_TEMPLATE_LIST_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Acquire Time Template Detail Info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iTemplateId			Time Template ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_TIME_TEMPLATE_DETAIL_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetTimeTemplateDetailInfo(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iTemplateId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete Time Template
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iTemplateId			Time Template id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_TIME_TEMPLATE_DETAIL_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteTimeTemplate(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iTemplateId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get A&C log
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					A&C log info
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ACCESSCONTROL_LOG_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAccessControlLog(DPSDK_INT32 iSessionID,
	DPSDK_ACCESSCONTROL_LOG_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get Access Area log
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Access Area log info
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ACCESSCONTROL_AREA_LOG_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAccessControlAreaLog(DPSDK_INT32 iSessionID,
	DPSDK_ACCESSCONTROL_LOG_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get A&C log count
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					A&C log info
* @param	[OUT] pResult				Count info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAccessControlLogCount(DPSDK_INT32 iSessionID,
	DPSDK_GET_ACCESSCONTROL_LOG_COUNT* pParam,
	DPSDK_EXPRESS_RECORDS_COUNT_INFO* pResult);

/**
* @brief	Get alarm access record info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Alarm access record parameter
* @param	[OUT] pResult				Alarm access record information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmAccessRecordInfo(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_ACCESSRECORD_PARAM* pParam,
	DPSDK_ALARM_ACCESSRECORD_INFO* pResult);


/**
* @brief	extract A&C log
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Param
* @param	[OUT] pResult				Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExtractAccessControlLog(DPSDK_INT32 iSessionID,
	DPSDK_EXTRACT_ACCESSCONTROL_PARAM* pParam,
	DPSDK_EXTRACT_ACCESSCONTROL_RESULT* pResult);

/**
* @brief	export Area Access log
* @param	[IN] iSessionID				User session ID
* @param	[IN] pExportParam			Export parameter
* @param	[OUT] pFileUrl				File URL and Sesson ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportAreaAccessLog(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_ACCESS_LOG_PARAM* pExportParam,
	DPSDK_EXPORT_FILE_INFO* pFileUrl);

/**
* @brief	export Area Stay log
* @param	[IN] iSessionID				User session ID
* @param	[IN] pExportParam			Export parameter
* @param	[OUT] pFileUrl				File URL and Sesson ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportAreaStayLog(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_ACCESS_LOG_PARAM* pExportParam,
	DPSDK_EXPORT_FILE_INFO* pFileUrl);

/**
* @brief	get A&C detail
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDevCode				Device code
* @param	[OUT] pAccessDetail			A&C detail
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAccessDoorDetail(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE* pDevCode,
	DPSDK_ACCESS_DOOR_DETAIL* pAccessDetail);

/**
* @brief	door alarm input/output basic config
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Door alarm input/output basic config info
* @param	[IN] iBufLen				pParam buffer length(Not used)
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DoorAlarmInOut(DPSDK_INT32 iSessionID,
	DPSDK_DOOR_ALARM_INOUT* pParam,
	DPSDK_INT32 iBufLen);

/**
* @brief	get door alarm input/output basic config
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeviceId				Device id
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_DOOR_ALARM_INOUT
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDoorAlarmInOut(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get Device Local Log
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					door basic info
* @param   [OUT] pSession				session ID
* @param	[IN] uiBufLen				pSession buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceLocalLog(DPSDK_INT32 iSessionID,
	DPSDK_GET_LOCAL_LOG* pParam,
	DPSDK_CHAR* pSession,
	DPSDK_UINT32 uiBufLen);
/**
* @brief	Get Fault List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Param
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_PAGE_FAULT_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageFaultList(DPSDK_INT32 iSessionID,
	DPSDK_GET_FAULT_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Export Fault List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Param
* @param	[OUT] pFileInfo				File info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportFaultList(DPSDK_INT32 iSessionID,
	DPSDK_FAULT_EXPORT_PARAM* pParam,
	DPSDK_EXPORT_FILE_INFO* pFileInfo);

/**
* @brief	Export Device List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Param
* @param	[OUT] pFileInfo				File info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportDeviceList(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_EXPORT_PARAM* pParam,
	DPSDK_EXPORT_FILE_INFO* pFileInfo);


/**
* @brief	door basic config
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					door basic info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DoorBaseConfigure(DPSDK_INT32 iSessionID,
	DPSDK_DOOR_INFO* pParam);

/**
* @brief	get door basic config
* @param	[IN] iSessionID				User session ID
* @param	[IN] pChannelId				Channel id
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_DOORBASE_CONFIGURE
* @param	[IN] pUserData				User data*
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDoorBaseConfigure(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	 door basic config copy
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Copy door basic config  parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CoypDoorBaseConfigure(DPSDK_INT32 iSessionID,
	DPSDK_DOOR_BASE_CONFIGURE* pParam);

/**
* @brief	single door unlock/locl
* @param	[IN] iSessionID				User session ID
* @param	[IN] pChannelId				 door channel id
* @param	[IN] iStatus				 door status；0 lock，1 unlock
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ControlDoor(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_INT32 iStatus,
	DPSDK_CHAR* pSessionId,
	int iBufLen);
/**
* @brief	single door unlock/locl
* @param	[IN] iSessionID				User session ID
* @param	[IN] pChannelId				 door channel id
* @param	[IN] iStatus				 door status￡?0 lock￡?1 unlock
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ControlDoorLift(DPSDK_INT32 iSessionID,
	DPSDK_CONTROL_DOOR_PARAM *pParam);


/**
* @brief	config global unlock channel
* @param	[IN] iSessionID				User session ID
* @param	[IN] pChannelList			Unlock channel type
* @param	[IN] iBufLen				pChannelList buffer length
* @return	Return 0 if succeeded, return error code if failed.
* @note	iBufLen = sizeof(DPSDK_CHANNEL_LIST) + (num-1)*sizeof(DPSDK_CHANNEL_ID)
*			Parameter num refers to the number of FTP services you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GlobalDoorChannel(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_LIST* pChannelList,
	DPSDK_INT32 iBufLen);

/**
* @brief	get certain door reader property
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDevCode				Device code
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_DOOR_READER
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDoorReader(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE* pDevCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	 get device controller
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDevCodeList			Device code list
* @param	[IN] iBufLen				pDevCodeList buffer length
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_DOOR_CONTROLLER
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
* @note	iBufLen = sizeof(DPSDK_DEVICE_CODE_LIST) + (num-1)*sizeof(DPSDK_DEVICE_CODE)
*			Parameter num refers to the number of FTP services you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDoorController(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CODE_LIST* pDevCodeList,
	DPSDK_INT32 iBufLen,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	global unlock/lock
* @param	[IN] iSessionID				User session ID
* @param	[IN] iStatus				 door status；0 global lock，1 global unlock
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GlobalControlDoor(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iStatus);

/**
* @brief	 get global unlock/lock status
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pStatus				 door  status
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetGlobalControlDoor(DPSDK_INT32 iSessionID,
	DPSDK_DOOR_GLOBAL_CONTROL_STATUE* pStatus);

/**
* @brief	 get A&C  status mode
* @param	[IN] iSessionID				User session ID
* @param	[IN] pChnIdList				Channel id list
* @param	[IN] iBufLen				pChnIdList buffer length
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ACCESS_CONTROL_STATUS
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
* @note	iBufLen = sizeof(DPSDK_CHANNEL_LIST) + (num-1)*sizeof(DPSDK_CHANNEL_ID)
*			Parameter num refers to the number of FTP services you need to query. Parameter num >= 1.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAccessControlStatus(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_LIST* pChnIdList,
	DPSDK_INT32 iBufLen,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Point global unlock/lock
* @param	[IN] iSessionID				User session ID
* @param	[IN] pGlobalParam			point status
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetGlobalPointStatus(DPSDK_INT32 iSessionID,
	DPSDK_POINT_GLOBAL_PARAM* pGlobalParam);

/**
* @brief	Point global unlock/lock
* @param	[IN] iSessionID				User session ID
* @param	[IN] pGlobalParam			area code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAllPointStatus(DPSDK_INT32 iSessionID,
	DPSDK_POINT_LIST_STATUS_PARAM *pPointStatusParam, DPSDK_CHAR* pSessionId, int iBufLen);


//Attendance
/**
* @brief	Save Channels
* @param	[IN] iSessionID				User session ID
* @param	[IN] pSaveParam				Save Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceSaveChannels(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCE_CHANNEL_PARAM* pSaveParam);

/**
* @brief	Del Channels
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDelParam				del Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceDelChannels(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCE_CHANNEL_PARAM* pDelParam);

/**
* @brief	Get Channels
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPageInfo				Page info
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_CHANNELS_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetChannels(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get StatisRule
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pStatisRule			Rule
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetStatisRule(DPSDK_INT32 iSessionID,
	DPSDK_INT32* pStatisRule);

/**
* @brief	Save StatisRule
* @param	[IN] iSessionID				User session ID
* @param	[IN] iStatisRule			Rule
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceSaveStatisRule(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iStatisRule);

/**
* @brief	Manual sync attendance record
* @param	[IN] iSessionID				User session ID
* @param	[IN] pManualSyncInfo		Manual sync information
* @param	[OUT] pSessionCode			session code
* @param	[OUT] iBufLen				pSessionCode  size
* @return	Successful return 0，failed return error code
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceManualSyncRecord(DPSDK_INT32 iSessionID,
	DPSDK_ATT_MANUALSYNCRECORD* pManualSyncInfo,
	DPSDK_CHAR* pSessionCode,
	DPSDK_INT32 iBufLen);

/**
* @brief	add Holiday
* @param	[IN] iSessionID				User session ID
* @param	[IN] pAddParam			    Add Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceAddHoliday(DPSDK_INT32 iSessionID,
	DPSDK_HOLIDAY_DATA* pAddParam);

/**
* @brief	Update Holiday
* @param	[IN] iSessionID				User session ID
* @param	[IN] pUpdateParam			Update Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceUpdateHoliday(DPSDK_INT32 iSessionID,
	DPSDK_HOLIDAY_DATA* pUpdateParam);

/**
* @brief	Del Holiday
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDelParam				Del Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceDelHoliday(DPSDK_INT32 iSessionID,
	DPSDK_DEL_HOLIDAY_INFO* pDelParam);

/**
* @brief	Get Holiday By Id
* @param	[IN] iSessionID				User session ID
* @param	[IN] pHolidayId				Holiday Id
* @param	[OUT] pGetResult			Get Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetHolidayById(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pHolidayId,
	DPSDK_HOLIDAY_DATA* pGetResult);

/**
* @brief	Get Holiday List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pGetParam				Get Param
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_HOLIDAYS_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetHolidayList(DPSDK_INT32 iSessionID,
	DPSDK_GET_HOLIDAY_PARAM* pGetParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	add TimeInterval
* @param	[IN] iSessionID				User session ID
* @param	[IN] pAddParam			    Add Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceAddTimeInterval(DPSDK_INT32 iSessionID,
	DPSDK_TIMEINTERVAL_DATA* pAddParam);

/**
* @brief	del TimeInterval
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDelParam			    del Param
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_DEL_ATTENDANCE_TIMEINTERVAL_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceDelTimeInterval(DPSDK_INT32 iSessionID,
	DPSDK_DEL_TIMEINTERVAL_PARAM* pDelParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get TimeInterval
* @param	[IN] iSessionID				User session ID
* @param	[IN] pIntervalId			Interval Id
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_TIMEINTERVAL_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetTimeInterval(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pIntervalId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Batch Get TimeIntervals
* @param	[IN] iSessionID				User session ID
* @param	[IN] pIntervalIdList		IntervalId List
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_BATCH_TIMEINTERVAL_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceBatchGetTimeIntervals(DPSDK_INT32 iSessionID,
	DPSDK_TIMEINTERVAL_ID_LIST* pIntervalIdList,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Get TimeIntervals
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPageInfo				Page info
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_TIMEINTERVALS_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetTimeIntervals(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	update TimeInterval
* @param	[IN] iSessionID				User session ID
* @param	[IN] pIntervalInfo			Interval Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceUpdateTimeInterval(DPSDK_INT32 iSessionID,
	DPSDK_TIMEINTERVAL_DATA* pIntervalInfo);

/**
* @brief	add order
* @param	[IN] iSessionID				User session ID
* @param	[IN] pAddParam			    Add Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceAddOrder(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCEORDER_INFO* pAddParam);

/**
* @brief	del order
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDelIdList			    del Id List
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_DEL_ATTENDANCE_ORDERS_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceDelOrder(DPSDK_INT32 iSessionID,
	DPSDK_ORDER_ID_LIST* pDelIdList,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get order
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOrderId			    Order Id
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_ORDER_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetOrder(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pOrderId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Batch Get orders
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOrderIdList			OrderId List
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_BATCH_ORDER_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceBatchGetOrders(DPSDK_INT32 iSessionID,
	DPSDK_ORDER_ID_LIST* pOrderIdList,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Get orders
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPageInfo				Page info
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_ORDERS_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetOrders(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	update order
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOrderInfo			Order Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceUpdateOrder(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCEORDER_INFO* pOrderInfo);

/**
* @brief	update Schedule
* @param	[IN] iSessionID				User session ID
* @param	[IN] pUpdateParam			    Update Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceUpdateSchedule(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_PERSON_SCHEDULE* pUpdateParam);

/**
* @brief	Get Schedule
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPersonId			    Person Id
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_SCHEDULE_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetSchedule(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pPersonId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	update Dept Schedule
* @param	[IN] iSessionID				User session ID
* @param	[IN] pUpdateParam			    Update Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceUpdateDeptSchedule(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_DEPT_SCHEDULE* pUpdateParam);

/**
* @brief	Get Dept Schedule
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDeptId			    dept Id
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_GET_ATTENDANCE_DEPTSCHEDULE_INFO
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceGetDeptSchedule(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeptId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add Temp Schedule
* @param	[IN] iSessionID				User session ID
* @param	[IN] pAddParam			    Add Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceAddTempSchedule(DPSDK_INT32 iSessionID,
	DPSDK_SCHEDULE_TEMP_INFO* pAddParam);

/**
* @brief	Del Temp Schedule
* @param	[IN] iSessionID				User session ID
* @param	[IN] pDelParam			    Del Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceDelTempSchedule(DPSDK_INT32 iSessionID,
	DPSDK_DEL_SCHEDULE_TEMP_INFO* pDelParam);

/**
* @brief	Export Attendance Abnormal Record
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRecord				Abnormal Record Param
* @param	[OUT] pFileUrl				File download URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceAbnormalRecord(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCE_RECORD* pRecord,
	DPSDK_EXPORT_FILE_INFO* pFileUrl);

/**
* @brief	Get attendance abnormal Record List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Abnormal record param
* @param	[OUT] pResult				Attendance abnormal Record List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAttendanceAbnormalRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_ATTENDANCE_ABNORMAL_REPORT_PARAM* pParam,
	DPSDK_ATTENDANCE_ABNORMAL_REPORT_LIST* pResult);

/**
* @brief	Export Attendance Card Record
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRecord				Attendance Card Record Param
* @param	[OUT] pFileUrl				File download URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceCardRecord(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCE_RECORD* pRecord,
	DPSDK_EXPORT_FILE_INFO* pFileUrl);

/**
* @brief	Get Attendance Card Record List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Attendance Card Record Param
* @param	[OUT] pResult				Attendance Card Record List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAttendanceCardRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_ATTENDANCE_SWIPING_CARD_REPORT_PARAM* pParam,
	DPSDK_ATTENDANCE_SWIPING_CARD_REPORT_LIST* pResult);

/**
* @brief	Export Attendance Info Record
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRecord				Attendance Info Record Param
* @param	[OUT] pFileUrl				File download URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceInfoRecord(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCE_RECORD* pRecord,
	DPSDK_EXPORT_FILE_INFO* pFileUrl);

/**
* @brief	Get Attendance Info Record List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Attendance Info Record Param
* @param	[OUT] pResult				Attendance Info Record List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAttendanceInfoRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_ATTENDANCE_RECORD_INFO_REPORT_PARAM* pParam,
	DPSDK_ATTENDANCE_RECORD_INFO_REPORT_LIST* pResult);

/**
* @brief	Export Attendance Outing
* @param	[IN] iSessionID				User session ID
* @param	[IN] pOuting				Attendance Outing Param
* @param	[OUT] pFileUrl				File download URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceOuting(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCE_RECORD* pOuting,
	DPSDK_EXPORT_FILE_INFO* pFileUrl);

/**
* @brief	Get Attendance Outing List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Attendance Outing Param
* @param	[OUT] pResult				Attendance Outing List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAttendanceOutingRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_ATTENDANCE_OUTING_REPORT_PARAM* pParam,
	DPSDK_ATTENDANCE_OUTING_REPORT_LIST* pResult);

/**
* @brief	Export Attendance Work Over Time
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Attendance Work Over Time param
* @param	[OUT] pFileUrl				File download URL
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AttendanceWorkOverTime(DPSDK_INT32 iSessionID,
	DPSDK_ATTENDANCE_RECORD* pParam,
	DPSDK_EXPORT_FILE_INFO* pFileUrl);

/**
* @brief	Get Attendance Work Over Time List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Attendance Work Over Time param
* @param	[OUT] pResult				Attendance Work Over Time List
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAttendanceWorkOverTimeRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_ATTENDANCE_WORK_OVERTIME_REPORT_PARAM* pParam,
	DPSDK_ATTENDANCE_WORK_OVERTIME_REPORT_LIST* pResult);
//Attendance end

/**
* @brief	Import Persons
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pPersonParam			Import Param
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_IMPORT_PERSONS
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ImportPersons(DPSDK_INT32 iSessionID,
	DSPDK_IMPORTPERSON_PARAM* pPersonParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	add user org config
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Add user org config parameter
* @param	[OUT] pPersonOrgId			    User org id
* @param	[IN] iBufLen					pPersonOrgId buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddPersonOrg(DPSDK_INT32 iSessionID,
	DPSDK_PERSON_ORG* pParam,
	DPSDK_CHAR* pPersonOrgCode,
	DPSDK_INT32 iBufLen);
/**
* @brief	Get Person Vehicle org config
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Add user org config parameter
* @param	[OUT] pPersonOrgId			    User org id
* @param	[IN] iBufLen					pPersonOrgId buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPersonOrg(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pPersonOrgCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	update user org config
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						User org parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdatePersonOrg(DPSDK_INT32 iSessionID,
	DPSDK_PERSON_ORG* pParam);

/**
* @brief	 get user group info list
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_PERSON_ORG_TREE
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPersonOrgTree(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	batch delete user group
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam			User org
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DelPersonOrg(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pPersonOrgCode,
	DPSDK_CHAR* pSessionId,
	int iBufLen);

/**
* @brief	add person
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Person info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_ADD_PERSON_RESULT
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddPerson(DPSDK_INT32 iSessionID,
	DPSDK_BATCH_PERSON_INFO* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get person
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_PERSON_RESULT
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPerson(DPSDK_INT32 iSessionID,
	DPSDK_BASE_ID_INFO* pPersonId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	 get areas info list
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see  DPSDK_DATA_GET_AREAS_TREE
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAreasTree(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get point list(GetPointsByAreaCode)
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Area info param
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_AREAS_POINT_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPointListByAreaCode(DPSDK_INT32 iSessionID, DPSDK_AREA_POINT_PARAM* pParam, DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);


/**
* @brief	Get point details(GetAccessPoint)
* @param	[IN] iSessionID					User session ID
* @param	[IN] pPointCode					Point Id
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_POINT_DETAILS
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAreaPoint(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pPointCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get person list(GetPagePersons)
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Person info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_PERSON_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchGetPersonList(DPSDK_INT32 iSessionID,
	DPSDK_PERSON_LIST_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get person list(GetPageSummaryPersons)
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Person info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_REDUCE_PERSON_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetReducePersonList(DPSDK_INT32 iSessionID,
	DPSDK_REDUCE_PERSON_LIST_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	batch delete person
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Batch Person info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchDeletePersons(DPSDK_INT32 iSessionID,
	DPSDK_BATCH_DELPERSONS_PARAM* pParam);

/**
* @brief	delete person by group
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Org info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeletePersonByGroup(DPSDK_INT32 iSessionID,
	DPSDK_DELPERSONSBYGROUP_PARAM* pParam,
	DPSDK_CHAR* pSessionId,
	int iBufLen);

/**
* @brief	get person failure info list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						param info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_PERSON_FAILURE_INFOS_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFailureInfos(DPSDK_INT32 iSessionID,
	DPSDK_PERSON_GET_PERSON_FAILURE_INFOS_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	face delete detection records by feature
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Face capture record info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_FaceDeleteDetectionRecordsByFeature(DPSDK_INT32 iSessionID,
	DPSDK_FACE_DELETE_RERCORD_PARAM* pParam);

/**
* @brief	face delete detection records by session
* @param	[IN] iSessionID					User session ID
* @param	[IN] pSession					Session
* @param	[IN] pParam						Face capture record info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_FaceDeleteDetectionRecordsBySession(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSession,
	DPSDK_FACE_DELETE_RERCORD_PARAM* pParam);

/**
* @brief	vehicel delete detection records by session
* @param	[IN] iSessionID					User session ID
* @param	[IN] pSession					Session
* @param	[IN] pParam						Vehicle capture record info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_VehicleDeleteDetectionRecordsBySession(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSession,
	DPSDK_VEHICLE_DELETE_RERCORD_PARAM* pParam);

/**
* @brief	face comparison group authorize
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Face comparison group authorize info
* @param	[OUT] pResult					Face comparison group authorize Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_FaceComparisonGroupAuthorize(DPSDK_INT32 iSessionID,
	DPSDK_FACECOMPARISONGROUP_AUTHORIZE* pParam,
	DPSDK_FACECOMPARISONGROUP_AUTHORIZE_RESULT* pResult);

/**
* @brief	face comparison group unauthorize
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Face comparison group authorize info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_FaceComparisonGroupUnauthorize(DPSDK_INT32 iSessionID,
	DPSDK_FACECOMPARISONGROUP_AUTHORIZE* pParam);

/**
* @brief	get **** records by feature
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Face info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_GET_PAGE_RECOGNITION_RECORDS_BY_FEATURE_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageRecognitionRecordsByFeature(DPSDK_INT32 iSessionID,
	DPSDK_FACE_GET_PAGE_RECOGNITION_RECORDS_BY_FEATURE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get car vehicle capture records
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Car info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FUSION_GET_PAGE_VEHICLE_CAPTURE_RECORDS_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageVehicleCaptureRecords(DPSDK_INT32 iSessionID,
	DPSDK_FUSION_GET_PAGE_VEHICLE_CAPTURE_RECORDS_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get MPT records
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Car info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_PAGE_MPT_RECORDS_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageMPTRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_MPT_RECORD_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get MPT record picture
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRecordId					Record ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_MPT_RECORD_PICTURE_INFO
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageMPTRecordPictureData(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pRecordId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete vehicle capture records
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRecordIds					Capture record ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteVehicleCaptureRecords(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pRecordIds);

/**
* @brief	Delete MPT records
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRecordIds					MPT record ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchDeleteMPTRecords(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pRecordIds);

/**
* @brief	Delete vehicle capture records
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						param
* @param	[OUT] pSession					session
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportVehicleCaptureRecords(DPSDK_INT32 iSessionID,
	DPSDK_FUSION_EXPORT_VEHICLE_CAPTURE_RECORDS_PARAM* pParam,
	DSPDK_FACE_EXPORT_DETECTION_RECORDS_RESULT* pResult);

/**
* @brief	start search detection records by picture
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						picture info
* @param	[OUT] pSession				    session
* @param	[IN] iBufLen					pSession length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_StartSearchDetectionRecordsByPicture(DPSDK_INT32 iSessionID,
	DPSDK_FACE_START_SEARCH_DETECTION_RECORDS_BY_PICTURE_PARAM* pParam,
	DPSDK_CHAR* pSession,
	DPSDK_INT32 iBufLen);
/**
* @brief	start search detection records by picture
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						picture info
* @param	[OUT] pSession				    session
* @param	[IN] iBufLen					pSession length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_StartSearchVehicleRecordsByPicture(DPSDK_INT32 iSessionID,
	DPSDK_VEHICLE_START_SEARCH_DETECTION_RECORDS_BY_PICTURE_PARAM* pParam,
	DPSDK_CHAR* pSession,
	DPSDK_INT32 iBufLen);

/**
* @brief	stop search detection records by picture
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						picture info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_StopSearchDetectionRecordsByPicture(DPSDK_INT32 iSessionID,
	DPSDK_FACE_STOP_SEARCH_DETECTION_RECORDS_BY_PICTURE_PARAM* pParam);


/**
* @brief	stop search detection records by picture
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						picture info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_StopSearchVehicleRecordsByPicture(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSession);

/**
* @brief	analyze image target objects
* @param	[IN] iSessionID				User Session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_ANALYZE_TARGETOBJECT for data type
* @param	[IN] pObjectData			Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AnalyseImageTargetObjects(DPSDK_INT32 iSessionID,
	DPSDK_ANALYZE_IMAGET_TARGET_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pObjectData);

/**
* @brief	get page detection records by session
* @param	[IN] iSessionID					User session ID
* @param	[IN] pSession					Session info
* @param	[IN] pParam						Param info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_GET_PAGE_DETECTION_RECORDS_BY_SESSION_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageDetectionRecordsBySession(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSession,
	DPSDK_FACE_GET_PAGE_DETECTION_RECORDS_BY_SESSION_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get page uvss detection records
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Param info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_UVSS_GET_PAGE_DETECTION_RECORDS_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageUVSSDetectionRecords(DPSDK_INT32 iSessionID,
	DPSDK_UVSS_GET_PAGE_DETECTION_RECORDS_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Export UVSS Records
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					enter param
* @param	[OUT] pResult				export result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportUVSSRecordList(DPSDK_INT32 iSessionID,
	DPSDK_UVSS_RECORDS_PARAM* pParam,
	DSPDK_EXPORT_UVSS_RECORDS_RESULT* pResult);

/**
* @brief	get page detection records by session
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Param info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_GET_PAGE_DETECTION_RECORDS_BY_FEATURE_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageDetectionRecordsByFeature(DPSDK_INT32 iSessionID,
	DPSDK_FACE_GET_PAGE_DETECTION_RECORDS_BY_FEATURE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get page vehicle detection records by session
* @param	[IN] iSessionID					User session ID
* @param	[IN] pSession					Session info
* @param	[IN] pParam						Param info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_VEHICLE_GET_PAGE_DETECTION_RECORDS_BY_SESSION_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageVehicleDetectionRecordsBySession(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSession,
	DPSDK_VEHICLE_GET_PAGE_DETECTION_RECORDS_BY_SESSION_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	export vehicle detection records by session
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						query session param
* @param	[OUT] pResult					export result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportVehicleDetectionRecordsBySession(DPSDK_INT32 iSessionID,
	DSPDK_VEHICLE_EXPORT_DETECTION_RECORDS_BY_SESSION* pParam,
	DSPDK_VEHICLE_EXPORT_DETECTION_RECORDS_RESULT* pResult);

//AutoSyncRecord
/**
* @brief	Sync Access Record
* @param	[IN] iSessionID					User session ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SynchronizeOfflineRecords(DPSDK_INT32 iSessionID);

/**
* @brief	Get Auto Sync Access Rule
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_AUTO_SYNC_ACCESS_RECORD
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAutoSynchronizeRule(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Set Auto Sync Access Rule
* @param	[IN] iSessionID					User session ID
* @param	[IN] pAutoSyncRecord			Auto Synchronize Rule
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetAutoSynchronizeRule(DPSDK_INT32 iSessionID,
	DPSDK_AUTO_SYNC_ACCESS_RECORD* pAutoSyncRecord);

//AutoSyncRecord end

/**
* @brief	 get set global unlock channel
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_GLOBALCONTRAL_DOOR_CONFIG
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetGlobalDoorConfig(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	issue fingerprint collection info
* @param	[IN] iSessionID					User session ID
* @param	[IN] pReaderId					ReaderID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CaptureFingerPrint(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pReaderId);

/**
* @brief	Get opelog count
* @param	[IN] iSessionID			User Session ID
* @param	[IN] pParam				Parameter
* @param	[OUT] pResult			Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetOpeLogsCount(DPSDK_INT32 iSessionID,
	DPSDK_QUERY_OPERATE_LOG_PARAM* pParam,
	DPSDK_EXPRESS_RECORDS_COUNT_INFO* pResult);

// Store
/**
* @brief	release store structure data buffer
* @param	[IN] pStoreBuffer				buffer to be released
* @return	Return 0 if succeeded, return error code if failed.
* @note		pBuffer is sdk internal applied buffer space
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ReleaseStoreDataBuffer(DPSDK_STORE_LIST* pStoreBuffer);

//POCTalk
/**
* @brief	Add POC Talk
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pGTalkInfo				POC Talk Info
* @param	[OUT] pGroupId				Group ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddGTalkGroup(DPSDK_INT32 iSessionID,
	DPSDK_GTALK_INFO* pGTalkInfo,
	DPSDK_CHAR* pGroupId);

/**
* @brief	Update POC Talk
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pGTalkInfo				POC Talk Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateGTalkGroup(DPSDK_INT32 iSessionID,
	DPSDK_GTALK_INFO* pGTalkInfo);

/**
* @brief	Delete POC Talk Groups
* @param	[IN] iSessionID				User session ID
* @param	[IN] pGroupIdList			Group id list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteGTalkGroups(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pGroupIdList);


/**
* @brief	MPT User Call POC Talk Managers
* @param	[IN] iSessionID				User session ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GTalkCallManagers(DPSDK_INT32 iSessionID);

/**
* @brief	Get POC Talk User Group Detail
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pGroupId				Group Id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_GTALK_USERGROUP_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetGTalkGroup(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pGroupId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	 Get page POC Talk user group list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Get parameter
* @param	[IN] fDataCallBack			Data sync call function, refer to DPSDK_DATA_GET_GTALK_USERGROUP_LIST for data type
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetGTalkPageGroups(DPSDK_INT32 iSessionID,
	DPSDK_GET_GROUPS_INFO* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Join POC Talk User Group
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pGroupId				Group Id
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GTalkJoinGroup(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pGroupId);

/**
* @brief	get Function Config
* @param	[IN] iSessionID			User session ID
* @param	[OUT] pInfoXml			Store organization tree info Xml stream
* @return	Return 0 if succeeded, return error code if failed.
* @note		pInfoXml need DPSDK_ReleaseDataBuffer interface to release
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFunctionConfig(DPSDK_INT32 iSessionID,
	DPSDK_CHAR** pInfoXml);

/**
* @brief	get sira Config
* @param	[IN] iSessionID			User session ID
* @param	[OUT] pSiraEnable		sira enable
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSiraConfig(DPSDK_INT32 iSessionID,
	DPSDK_BOOL* pSiraEnable);

/**
* @brief	get user functions
* @param	[IN] iSessionID			User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_HUMAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserFunctions(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get user functions
* @param	[IN] iSessionID			User session ID
* @param	[IN] pChannelId			channel id
* @param	[IN] pChannelId			    need check functions
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelFunctions(DPSDK_INT32 iSessionID,
	const DPSDK_CHAR* pChannelId,
	DPSDK_USER_FUNCTION_LIST* pCheckFunction,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get Human by feature
* @param	[IN] iSessionID			User session ID
* @param	[IN] pHumanSearchInfo		Search Info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_HUMAN_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageHumansByFeature(DPSDK_INT32 iSessionID,
	DPSDK_HUMANSEARCH_PARAM* pHumanSearchInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get Human Count
* @param	[IN] iSessionID			User session ID
* @param	[IN] pHumanSearchInfo		Search Info
* @param	[OUT] pHumanCount			Human Count
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetHumanCount(DPSDK_INT32 iSessionID,
	DPSDK_HUMANSEARCH_PARAM* pHumanSearchInfo,
	DPSDK_INT32* pHumanCount);

/**
* @brief	Export Human Bodys By Session
* @param	[IN] iSessionID			User session ID
* @param	[IN] pHumanSearchInfo		Search Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportHumanBodysBySession(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSession,
	DSPDK_EXPORT_HUMAN_BODYS_BY_SESSION* pHumanSearchInfo,
	DSPDK_FACE_EXPORT_DETECTION_RECORDS_RESULT* pResult);


/**
* @brief	Export Human Bpdys By Feature
* @param	[IN] iSessionID			User session ID
* @param	[IN] pHumanSearchInfo		Search Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportHumanBodysByFeature(DPSDK_INT32 iSessionID,
	DSPDK_EXPORT_HUMAN_BODYS_BY_FEATURE* pHumanSearchInfo,
	DSPDK_FACE_EXPORT_DETECTION_RECORDS_RESULT* pResult);

/**
* @brief	get Vehicle List
* @param	[IN] iSessionID			User session ID
* @param	[IN] pLocale			 	International Voice
* @param	[IN] pPageInfo				Page Info
* @param	[IN] pVehicleSearchInfo		Search Info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_VEHICLES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVehicleList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pLocale,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_VEHICLE_PARAM* pVehicleSearchInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get Vehicle Count
* @param	[IN] iSessionID			User session ID
* @param	[IN] pVehicleSearchInfo		Search Info
* @param	[OUT] pVehicleCount			Vehicle Count
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVehicleCount(DPSDK_INT32 iSessionID,
	DPSDK_VEHICLE_PARAM* pVehicleSearchInfo,
	DPSDK_INT32* pVehicleCount);

/**
* @brief	Export VehicleList List
* @param	[IN] iSessionID			User session ID
* @param	[IN] pVehicleSearchInfo		Search Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportVehicleList(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_VEHICLESEARCH_PARAM* pVehicleSearchInfo);


/**
* @brief	Delete vechicle list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pVechicleId				VechicleId id
* @return	Successful return 0，failed return error code
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteVehicleList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pVechicleId);


/**
* @brief	get NonVehicle List
* @param	[IN] iSessionID			User session ID
* @param	[IN] pNonVehicleSearchInfo		Search Info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_NONVEHICLES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetNonVehicleList(DPSDK_INT32 iSessionID,
	DPSDK_NONVEHICLE_PARAM* pVehicleSearchInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get NonVehicle Count
* @param	[IN] iSessionID			User session ID
* @param	[IN] pVehicleSearchInfo		Search Info
* @param	[OUT] pNonVehicleCount			Vehicle Count
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetNonVehicleCount(DPSDK_INT32 iSessionID,
	DPSDK_NONVEHICLE_PARAM* pVehicleSearchInfo,
	DPSDK_INT32* pNonVehicleCount);

/**
* @brief	Export NonVehicleList List
* @param	[IN] iSessionID			User session ID
* @param	[IN] pNonVehicleSearchInfo		Search Info
* @param	[OUT] pExportResult				export result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportNonVehicleList(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_NONVEHICLESEARCH_PARAM* pNonVehicleSearchInfo,
	DSPDK_EXPORTNONVEHICLE_RESULT* pExportResult);

/**
* @brief	Delete NonVechicleId list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pNonVechicleIds			NonVechicleId id
* @return	Successful return 0，failed return error code
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteNonVehicleList(DPSDK_INT32 iSessionID,
	DPSDK_DELETE_NONMOTORRECORD_PARAM* pNonVechicleIds);

/**
* @brief	SmartAnalyzeStart
* @param	[IN] iSessionID			User session ID
* @param	[IN] pBillNo				BillNo
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_SMART_ANALYZE_START
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SmartAnalyzeStart(DPSDK_INT32 iSessionID,
	DPSDK_SMART_ANALYZE_INFO* pSmartAnalyzeStartInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	SmartAnalyzeStop
* @param	[IN] iSessionID					User session ID
* @param	[IN] pSmartAnalyzeStopInfo		Smart analyze stop info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SmartAnalyzeStop(DPSDK_INT32 iSessionID,
	DPSDK_SMART_ANALYZE_RESULT* pSmartAnalyzeStopInfo);

/**
* @brief	Get ProbScanRecords
* @param	[IN] iSessionID				User session ID
* @param	[IN] pBillNo				BillNo
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_SMART_ANALYZE_GETFRAMES
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SmartAnalyzeGetFrames(DPSDK_INT32 iSessionID,
	DPSDK_SMART_ANALYZE_GETFRAMES* pGetFrameInfoList,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

///////////////////////////////////Face Start///////////////////////////////////////

/**
* @brief	Extract human face info
* @param	[IN]	iSessionID					User session ID
* @param	[IN]	pDeviceCode					Device ID
* @param	[IN]	pFaceImageData				Human face image data（base64）
* @param	[OUT]	pInfoXml				Get info xml stream
* @param	[OUT]	pFaceImageInfo				Human face original image
* @return	Return 0 if succeeded, return error code if failed.
* @note		pInfoXml shall be released by DPSDK_ReleaseDataBuffer
*
*			pInfoXml format is shown as below
*			<FaceImageInfos>
*				<FaceImageInfo>
*					<ImageId>id</ImageId>
*					<ImageUrl>url</ImageUrl>
*					<ImageCodX>x</ImageCodX>
*					<ImageCodY>y</ImageCodY>
*					<ImageHeight>height</ImageHeight>
*					<ImageWidth>width</ImageWidth>
*				</FaceImageInfo>
*			</FaceImageInfos>
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DistinguishImageFaces(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_CHAR* pFaceImageData,
	DPSDK_CHAR** pInfoXml,
	DPSDK_FACEIMAGE_INFO* pFaceImageInfo);

/**
* @brief	Get person face info
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					Request parameters
* @param	[OUT] pPersonInfo			Person face info
* @return	Successful return 0，failed return error code
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPersonFaceInfo(DPSDK_INT32 iSessionID,
	DPSDK_FACE_PERSON_PARAM* pParam,
	DPSDK_FACE_GET_PERSON_INFO* pPersonInfo);

/**
* @brief	分页获取人脸库人脸信息
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					Request parameters
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_FACE_PERSON_LIST
* @param	[IN] pUserData				User data
* @return	成功返回0, 失败返回错误码
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPersonsByPage(DPSDK_INT32 iSessionID,
	DPSDK_GET_PERSON_BY_PAGE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Delete person face info
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					Request parameters
* @return	Successful return 0，failed return error code
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeletePersonFaceInfos(DPSDK_INT32 iSessionID,
	DPSDK_FACE_DELETE_PERSON_PARAM* pParam);



/**
* @brief	Get person type list
* @param	[IN] iSessionID				User session ID
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_FACE_PERSON_TYPE_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPersonTypeList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add person type
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPersonTypeName		person type name
* @param	[OUT] pPersonTypeId			person type ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddPersonTypeInfo(DPSDK_INT32 iSessionID,
	DPSDK_NAME* pPersonTypeName,
	DPSDK_INT32* pPersonTypeId);

/**
* @brief	Update person type
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPersonType			person type info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdatePersonType(DPSDK_INT32 iSessionID,
	DPSDK_FACE_PERSON_TYPE_INFO* pPersonType);

/**
* @brief	Delete person type list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pPersonTypeIds			person type ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeletePersonTypes(DPSDK_INT32 iSessionID,
	DPSDK_FACE_TYPE_ID_LIST* pPersonTypeIds);


/**
* @brief	Add repository info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRepositoryInfo		Repository info
* @param	[OUT] pRepositoryId			Repository ID
* @return	成功返回0, 失败返回错误码
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddRepositoryInfo(DPSDK_INT32 iSessionID,
	DPSDK_FACE_REPOSITORY_INFO* pRepositoryInfo,
	DPSDK_REPOSITORY_ID* pRepositoryId);

/**
* @brief	Update repository info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRepositoryInfo		Repository info
* @param	[IN] pRepositoryId			Repository ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateRepositoryInfo(DPSDK_INT32 iSessionID,
	DPSDK_FACE_REPOSITORY_INFO* pRepositoryInfo,
	DPSDK_REPOSITORY_ID* pRepositoryId);


/**
* @brief	Get repository info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRepositoryInfo		Repository info
* @param	[IN] pRepositoryId			Repository ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRepositoryInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pRepositoryId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete repository info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRepositoryId			Repository ID
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_FACE_FAILED_DEVICE_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteRepository(DPSDK_INT32 iSessionID,
	DPSDK_REPOSITORY_ID* pRepositoryId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Force delete repository info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRepositoryId			Repository ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ForceDeleteRepository(DPSDK_INT32 iSessionID,
	DPSDK_REPOSITORY_ID* pRepositoryId);


/**
* @brief	Issue/Update/Delete person to devices again
* @param	[IN] iSessionID				User session ID
* @param	[IN] pRepositoryId			Repository ID
* @param	[IN] pFaceIds				Face ID list
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_DATA_FACE_DPSDK_ID_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_IssueFailedPersonAgain(DPSDK_INT32 iSessionID,
	DPSDK_REPOSITORY_ID* pRepositoryId,
	DPSDK_FACE_ID_LIST* pFaceIds,
	DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);

/**
* @brief	Get repository control process list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRepositoryId				Repository ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_REPOSITORY_CONTROL_PROCESS_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRepositoryControlProcess(DPSDK_INT32 iSessionID,
	DPSDK_REPOSITORY_ID* pRepositoryId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get control process detail
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRepositoryId				Repository ID
* @param	[IN] pPageInfo					Paging get parameters
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_REPOSITORY_CONTROL_PROCESS_DETAIL
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetControlProcessDetails(DPSDK_INT32 iSessionID,
	DPSDK_REPOSITORY_ID* pRepositoryId,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get control repositorie list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Paging get parameters
* @param	[IN]fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_CONTOLR_REPOSITORY_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetControlRepositories(DPSDK_INT32 iSessionID,
	DPSDK_GET_CONTOLR_REPOSITORY_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Control Channel list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Channel parameter
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_CONTORL_FAILED_CHANNEL_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ControlChannels(DPSDK_INT32 iSessionID,
	DPSDK_FACE_CONTROL_CHANNEL_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get repository control channels
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Paging get parameters
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_CONTOLR_CHANNEL_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRepositoryControlChannels(DPSDK_INT32 iSessionID,
	DPSDK_GET_CONTOLR_CHANNEL_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get face group issue list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Paging get parameters
* @param	[IN]fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACEGROUP_ISSUE_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFaceGroupIssueDetails(DPSDK_INT32 iSessionID,
	DPSDK_GET_ISSUECONTROL_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get face group control list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Paging get parameters
* @param	[IN]fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACEGROUP_CONTOLR_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFaceGroupControlDetails(DPSDK_INT32 iSessionID,
	DPSDK_GET_ISSUECONTROL_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Face group issue
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Object parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_FaceGroupIssue(DPSDK_INT32 iSessionID,
	DPSDK_FACEGROUP_ISSUE_PARAM* pParam);

/**
* @brief	Face group control
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Object parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_FaceGroupControl(DPSDK_INT32 iSessionID,
	DPSDK_FACEGROUP_CONTROL_PARAM* pParam);

/**
* @brief	Get face group issue object list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Object parameter
* @param	[IN]fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACEGROUP_GET_ISSUEOBJECT_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFaceGroupIssueObjectList(DPSDK_INT32 iSessionID,
	DPSDK_GET_FACEGROUP_ISSUEOBJECT_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get face group issue person list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Object parameter
* @param	[IN]fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACEGAOUP_GET_ISSUEPERSON_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFaceGroupIssuePersons(DPSDK_INT32 iSessionID,
	DPSDK_GET_FACEGROUPISSUE_PERSON_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Cancel issue Repository
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Object parameter
* @param	[IN]fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACEGROUP_FAILED_ISSUE_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CancelFaceGroupIssue(DPSDK_INT32 iSessionID,
	DPSDK_FACEGROUP_ISSUE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Cancel control Repository
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Object parameter
* @param	[IN]fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACEGROUP_FAILED_CONTROL_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CancelFaceGroupControl(DPSDK_INT32 iSessionID,
	DPSDK_FACEGROUP_CONTROL_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Force cancel Face group issue
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Object parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ForceCancelFaceGroupIssue(DPSDK_INT32 iSessionID,
	DPSDK_FACEGROUP_ISSUE_PARAM* pParam);

/**
* @brief	Force cancel Face group issue
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Object parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ForceCancelFaceGroupControl(DPSDK_INT32 iSessionID,
	DPSDK_FACEGROUP_CONTROL_PARAM* pParam);
///////////////////////////////////Face End///////////////////////////////////////

/**
* @brief	Get dictionary list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pTypes						Dictionary type list
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_FACE_CONTOLR_CHANNEL_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDictionaryList(DPSDK_INT32 iSessionID,
	DPSDK_DICTIONARY_TYPE_LIST* pTypes,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get channel capabilities
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_DEFINITION_CHANNEL_CAPABILITY_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelCapabilities(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get device type list
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_DEFINITION_DEVICE_CATEGORY_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceTypes(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ConvertDevType(DPSDK_INT32 iCateGory, DPSDK_INT32 iSubType, DPSDK_INT32* pDevType);


DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ConvertDevTypeCode(DPSDK_INT32 iCateGory, DPSDK_INT32 iSubType, DPSDK_INT32* pDevType);

/**
* @brief	general transport method
* @param	[IN]iSessionID					User session ID
* @param	[IN]pRequest					request param
* @param	[IN]iRequestSize				request struct size
* @param	[IN]pResponse					response param
* @param	[IN]iResponseSize				response struct size
* @note		Content-Type header default null.append to pRequest->pHeaderList if needed
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GeneralJsonRequest(DPSDK_INT32 iSessionID,
	DPSDK_GENERALTRANSPORT_REQUEST* pRequest, DPSDK_INT32 iRequestSize,
	DPSDK_GENERALTRANSPORT_RESPONSE* pResponse, DPSDK_INT32 iResponseSize);


/**
* @brief	Update cover info
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_UPDATE_COVER_INFO
* @param	[IN] pParam						Update cover param
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateCover(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_COVER_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get Tracking Points Info
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_GET_TRACKING_POINTS_INFO
* @param	[IN] pParam						Get Tracking Points Info param
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetTrackingPointsInfo(DPSDK_INT32 iSessionID,
	DPSDK_GET_TRACKING_POINTS_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get shop information list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Getting  shop parameter
* @param	[OUT] pShopInfos				Shop information list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetShopInfos(DPSDK_INT32 iSessionID,
	DPSDK_SHOP_GET_PARAM* pParam,
	DPSDK_SHOP_LIST* pShopInfos);

/**
* @brief	Batch move shop list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Moving shop parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchMoveShops(DPSDK_INT32 iSessionID,
	DPSDK_SHOP_MOVE_PARAM* pParam);

/**
* @brief	Batch delete shop list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pShopIds					Shop ID list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchDeleteShops(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pShopIds);

/**
* @brief	Get Pos config info
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_POS_CONFIG_INFO
* @param	[IN] pUserData					User data
* @return	eturn 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPosConfig(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Update Pos config info
* @param	[IN] iSessionID					User session ID
* @param	[IN] pPosConfigInfo				Pos config info
* @return	eturn 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdatePosConfig(DPSDK_INT32 iSessionID,
	DPSDK_POS_CONFIG_INFO* pPosConfigInfo);

/**
* @brief	Get Pos page info
* @param	[IN] iSessionID					User session ID
* @param	[IN] pPosPageInfo				Pos page info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_POS_PAGE_RESPONCE_INFO
* @param	[IN] pUserData					User data
* @return	eturn 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPosPageReceipts(DPSDK_INT32 iSessionID,
	DPSDK_POS_PAGE_INFO* pPosPageInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Export Pos Receipts info
* @param	[IN] iSessionID					User session ID
* @param	[IN] pPosExportInfo				Pos export info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_POS_EXPORT_RESPONCE_INFO
* @param	[IN] pUserData					User data
* @return	eturn 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportPosReceipts(DPSDK_INT32 iSessionID,
	DPSDK_POS_EXPORT_INFO* pPosExportInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Update Server information
* @param	[IN] iSessionID					User session ID
* @param	[IN] pServerInfo 				Server information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateServerInfo(DPSDK_INT32 iSessionID,
	DPSDK_BRMS_UPDATE_SERVER_PARAM* pServerInfo);

/**
* @brief	Get Server information
* @param	[IN] iSessionID					User session ID
* @param	[IN] pServerId 					Server ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_BRMS_SERVER_DETIAL_INFO
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetServerInfo(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pServerId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get server information list
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_BRMS_SERVER_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetServerInfos(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get server information list by page
* @param	[IN] iSessionID					User session ID
* @param	[IN] pPageInfo 					Page info
* @param	[IN] pKeyword 					Keyword
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_BRMS_SERVER_LIST_BY_PAGE
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetServerInfosByPage(DPSDK_INT32 iSessionID,
	DPSDK_PAGE_INFO* pPageInfo,
	DPSDK_KEYWORD_INFO* pKeyword,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get server log status list by page
* @param	[IN] iSessionID					User session ID
* @param	[IN] pQueryParam 				Query param
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_BRMS_SERVERLOG_SERVER_LIST_BY_PAGE
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageServerLogServerInfo(DPSDK_INT32 iSessionID,
	DPSDK_BRMS_SERVERLOG_SERVER_PARAM* pQueryParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Set server debug log
* @param	[IN] iSessionID				User Session ID
* @param	[IN] iStatus 				Debug status
* @param	[IN] pServerCode			Server Code
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetServerDebugStatus(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iStatus,
	DPSDK_CHAR* pServerCode);

/**
* @brief	Enable server
* @param	[IN] iSessionID					User session ID
* @param	[IN] pServerId 					Server ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EnableServer(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pServerId);

/**
* @brief	Disable server
* @param	[IN] iSessionID					User session ID
* @param	[IN] pServerId 					Server ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DisableServer(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pServerId);

/**
* @brief	Switch server
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam 					parameter
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SwitchServer(DPSDK_INT32 iSessionID,
	DPSDK_BRMS_SERVER_SWITCH_PARAM* pParam);

/**
* @brief	Get available server list
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_DATA_BRMS_SERVER_AVAILABLE_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAvailableServers(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Update main server name
* @param	[IN] iSessionID					User session ID
* @param	[IN] pServerName				Main Server name
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateMainServerName(DPSDK_INT32 iSessionID,
	DPSDK_NAME_INFO* pServerName);

/**
* @brief	Delete server information
* @param	[IN] iSessionID					User session ID
* @param	[IN] pServerId 					Server ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteServerInfo(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pServerId);

/**
* @brief	resouce allocate
* @param	[IN] iSessionID					User session ID
* @param	[IN] pResouceAllocateList 		resouce allocate info
* @param	[OUT]pSession
* @param	[IN] uiBufLen				pSession buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ResourceAllocateDevices(DPSDK_INT32 iSessionID,
	DPSDK_RESOUCEALLOCATE_DEVICE_LIST* pResouceAllocateList,
	DPSDK_CHAR* pSession,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	auto resouce allocate
* @param	[IN] iSessionID					User session ID
* @param	[IN] pResouceAllocateList 		auto resouce allocate info
* @param	[OUT]pSession
* @param	[IN] uiBufLen				pSession buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ResourceAutoAllocateDevices(DPSDK_INT32 iSessionID,
	DPSDK_RESOUCEALLOCATE_AUTODEVICE_LIST* pResouceAllocateList,
	DPSDK_CHAR* pSession,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	set resouce allocate flag
* @param	[IN] iSessionID					User session ID
* @param	[IN] iFlag 					guide flag
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ResourceAllocateSetGuidanceFlag(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iFlag);

/**
* @brief	get resouce allocate flag
* @param	[IN] iSessionID					User session ID
* @param	[OUT] pFlag 					guide flag
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ResourceAllocateGetGuidanceFlag(DPSDK_INT32 iSessionID,
	DPSDK_INT32* pFlag);

/**
* @brief	get org device list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pOrgDevList				org device info
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_RESOUCEALLOCATE_ORGDEVICE_RESULT
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ResourceAllocateGetOrgDevices(DPSDK_INT32 iSessionID,
	DPSDK_RESOUCEALLOCATE_ORGDEVICE_LIST* pOrgDevList,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get server info
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see DPSDK_RESOUCEALLOCATE_SERVERS_RESULT
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ResourceAllocateGetServers(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get auto backup config info
* @param	[IN] iSessionID					User session ID
* @param	[OUT] pResult					backup config
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAutoBackUp(DPSDK_INT32 iSessionID,
	DPSDK_AUTO_BACKUP_PARAM* pResult);

/**
* @brief	get server backupFile by Page
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync call function, data type see PAGE_BACKUP_FILEDATA_LIST
* @param	[IN] pUserData					User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAutoBackUpFileList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	local manual restore
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam					local manual restore info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ManualRestore(DPSDK_INT32 iSessionID,
	DPSDK_MANUAL_RESTORE_INFO* pParam);

/**
* @brief	manual backup
* @param	[IN] iSessionID					User session ID
* @param	[IN] pFilePwd					file password
* @param	[IN] pCredence					One time certificate
* @param	[OUT]pSession
* @param	[IN] uiBufLen				pSession buffer length
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetManualBackUpFile(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pFilePwd,
	DPSDK_CHAR* pCredence,
	DPSDK_CHAR* pSession,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	server manual restore
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam					server manual restore info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AutoFileRestore(DPSDK_INT32 iSessionID,
	DPSDK_MANUAL_RESTORE_INFO* pParam);

/**
* @brief	update auto backup config
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam					backup config info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AutoBackUp(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_BACKUP_CONFIG_INFO* pParam);
/**
* @brief	Add raster map
* @param	[IN] iSessionID					User session ID
* @param	[IN] pBitmapInfo				Raster map
* @param	[OUT] pRasterMapId				Raster mapID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddRasterMap(DPSDK_INT32 iSessionID,
	DPSDK_EMAP_RASTER_MAP_INFO* pRasterMap,
	DPSDK_GENERAL_ID* pRasterMapId);

/**
* @brief	Update raster map
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRasterMap					Raster map info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateRasterMap(DPSDK_INT32 iSessionID,
	DPSDK_EMAP_RASTER_MAP_INFO* pRasterMap);

/**
* @brief	Get raster map
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRasterMapId				Raster map ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_EMAP_RASTER_MAP_DETAIL for data type
* @param	[IN] pUserData					User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRasterMap(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pRasterMapId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get raster map list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Parameters
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_EMAP_RASTER_MAP_LIST for data type
* @param	[IN] pUserData					User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRasterMaps(DPSDK_INT32 iSessionID,
	DPSDK_GET_RASTER_MAP_LIST_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Set raster map status
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRasterMapId				Raster map ID
* @param	[IN] iStatus					Enable, 0 = no, 1 = yes
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetRasterMapStatus(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pRasterMapId,
	DPSDK_INT32 iStatus);

/**
* @brief	Delete  raster map
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRasterMapId				Raster map ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteRasterMap(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pRasterMapId);

/**
* @brief	Delete map image list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pMapImageUrls				Map image list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteMapImages(DPSDK_INT32 iSessionID,
	DPSDK_FILE_URL_LIST* pMapImageUrls);

/**
* @brief	Update vector map
* @param	[IN] iSessionID					User session ID
* @param	[IN] pVectorMapInfo 			vector map information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateVectorMap(DPSDK_INT32 iSessionID,
	DPSDK_EMAP_VECTOR_MAP_INFO* pVectorMapInfo);

/**
* @brief	Get vector map
* @param	[IN] iSessionID					User session ID
* @param	[OUT] pVectorMapInfo 			vector map information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVectorMap(DPSDK_INT32 iSessionID,
	DPSDK_EMAP_VECTOR_MAP_INFO* pVectorMapInfo);

/**
* @brief	Set vector map status
* @param	[IN] iSessionID					User session ID
* @param	[IN] iStatus 					Map available, 0 = off, 1 = on
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetVectorMapStatus(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iStatus);

///////////////////////////////////OBMS Start///////////////////////////////////////
/**
* @brief	Batch control door list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pDoorControlParam 			Control door parameters
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchControlDoors(DPSDK_INT32 iSessionID,
	DPSDK_OBMS_ACS_DOOR_CONTROL_PARAM* pDoorControlParam);

///////////////////////////////////OBMS Start///////////////////////////////////////

///////////////////////////////////BRMS Start///////////////////////////////////////
/**
* @brief	Batch get resource(device 0r channel) config status
* @param	[IN] iSessionID					User session ID
* @param	[IN] pResourceIds 				Resource ID list
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_ALARM_PLAN_RESOURCE_LIST for data type
* @param	[IN] pUserData					User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchGetResourceConfigStatus(DPSDK_INT32 iSessionID,
	DPSDK_ID_LIST* pResourceIds,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);



/**
* @brief	Add mail template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pMailTemplate 				Mail template info
* @param	[OUT] pMailTemplateId 			Mail template ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddMailTemplate(DPSDK_INT32 iSessionID,
	DPSDK_MAIL_TEMPLATE_INFO* pMailTemplate,
	DPSDK_GENERAL_ID* pMailTemplateId);

/**
* @brief	Update mail template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pMailTemplate 				Mail template info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateMailTemplate(DPSDK_INT32 iSessionID,
	DPSDK_MAIL_TEMPLATE_INFO* pMailTemplate);

/**
* @brief	Get mail template list
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_MAIL_TEMPLATE_LIST for data type
* @param	[IN] pUserData					User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetMailTemplates(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete mail template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pMailTemplateId 			Mail template ID
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteMailTemplate(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pMailTemplateId);


/**
* @brief	Set alarm record quota status
* @param	[IN] iSessionID					User session ID
* @param	[IN] pChnlID 					Channel code
* @param	[IN] iStatus 					0 Disable, 1 Enable
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetAlarmRecordQuotaStatus(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChnlID,
	DPSDK_INT32 iStatus);

/**
* @brief	Set normal record quota status
* @param	[IN] iSessionID					User session ID
* @param	[IN] pChnlID 					Channel code
* @param	[IN] iStatus 					0 Disable, 1 Enable
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetNormalRecordQuotaStatus(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChnlID,
	DPSDK_INT32 iStatus);

/**
* @brief	Set motion detect record quota status
* @param	[IN] iSessionID					User session ID
* @param	[IN] pChnlID 					Channel code
* @param	[IN] iStatus 					0 Disable, 1 Enable
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetMotionDetectRecordQuotaStatus(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChnlID,
	DPSDK_INT32 iStatus);


/**
* @brief	Set channel quota info
* @param	[IN] iSessionID					User session ID
* @param	[IN] pChnlID 					Channel code
* @param	[IN] pInfo 						Channel quota info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetChannelQuotaInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChnlID,
	DPSDK_CHANNEL_QUOTA_INFO* pInfo);

/**
* @brief	Get channel quota info
* @param	[IN] iSessionID					User session ID
* @param	[IN] pChnlID 					Channel code
* @param	[OUT] pInfo 					Channel quota info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelQuotaInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHANNEL_ID* pChnlID,
	DPSDK_CHANNEL_QUOTA_INFO* pInfo);

///////////////////////////////////BRMS Start///////////////////////////////////////


///////////////////////////////////Parking Start///////////////////////////////////////




/**
* @brief	Get Entrance Page Vehicle Capture Records
* @param	[IN] iSessionID			User session ID
* @param	[IN] pGetCaptureInfo	Capture Record Info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ENTRANCE_PAGEVEHICLE_CAPTURERECORDS for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetEntrancePageVehicleCaptureRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_CAPTURERECORD_INFO* pGetCaptureInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Delete Entrance Vehicle Capture Records
* @param	[IN] iSessionID			User session ID
* @param	[IN] pRecordIds		    Capture record ID list
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteEntranceVehicleCaptureRecords(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pRecordIds);

/**
* @brief	Export Entrance Vehicle Capture Records
* @param	[IN] iSessionID			User session ID
* @param	[IN] pParam			    Param
* @param	[OUT] pResult			Result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportEntranceVehicleCaptureRecords(DPSDK_INT32 iSessionID,
	DPSDK_FUSION_EXPORT_VEHICLE_CAPTURE_RECORDS_PARAM* pParam,
	DSPDK_FACE_EXPORT_DETECTION_RECORDS_RESULT* pResult);

/**
* @brief	Update Entrance Vehicle Capture Record
* @param	[IN] iSessionID			User session ID
* @param	[IN] pParam				Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateEntranceVehicleCaptureRecord(DPSDK_INT32 iSessionID,
	DPSDK_UPDATE_ENTRANCE_VEHICLE_CAPTUR_ERECORD_PARAM* pParam);



/**
* @brief	Remote Open Sluice
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RemoteOpenSluice(DPSDK_INT32 iSessionID,
	DPSDK_OPEN_SLUICE_INFO* pParam);

/**
* @brief	Remote Open Sluice By Point
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RemoteOpenSluiceByPoint(DPSDK_INT32 iSessionID,
	DPSDK_OPEN_SLUICE_BY_POINT_INFO* pParam);

/**
* @brief	Get BindItc Info
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pChannelId		        ChannelId
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_BINDITC_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetBindItcInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get all vto rel itc
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_VTO_RELITC for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAllVtoRelItc(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);



///////////////////////////////////Parking End/////////////////////////////////////////

/**
* @brief	Get capture channel info
* @param	[IN]	iSessionID					User session ID
* @param	[out]	ppCaptureChlInfo			Capture channel info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCaptureChannelInfo(DPSDK_INT32 iSessionID,
	DPSDK_CAPTURE_CHL_INFO** ppCaptureChlInfo);

/**
* @brief	Release capture channel info memory
* @param	[IN]pCaptureChlInfo					Capture channel info
* @return   Return 0 if succeeded, return error code if failed
* @note     pCaptureChlInfo is getting from DPSDK_GetCaptureChannelInfo
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ReleaseCaptureChlInfoBuffer(DPSDK_CAPTURE_CHL_INFO* pCaptureChlInfo);


/*******************************************	Alarm begin		******************************************************/
/**
* @brief	Get Mail Templates Count
* @param	[IN]	iSessionID					User session ID
* @param	[out]	pEmailTemplatesCount		Email Templates Count
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetEmailTemplatesCount(DPSDK_INT32 iSessionID,
	DPSDK_EMAIL_TEMPLATE_COUNT *pMailTemplatesCount);

/**
* @brief	Add alarm plan
* @param	[IN]	iSessionID					User session ID
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddAlarmPlanEx(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_PLAN_INFO* pAlarmPlanInfo, DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Batch delete alarm plans
* @param	[IN]	iSessionID					User session ID
* @param	[IN]pParam					alarm plan info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchDeleteAlarmPlans(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_BATCH_DELETE_PARAM* pParam);

/**
* @brief	Batch delete alarm plans by sources
* @param	[IN]iSessionID						User session ID
* @param	[IN]pParam							alarm plan info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchDeleteAlarmPlansBySources(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_BATCH_DELETE_BY_SOURCE_PARAM* pParam);

/**
* @brief	Batch update alarm plan status
* @param	[IN]	iSessionID					User session ID
* @param	[IN]pParam					alarm plan info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchUpdateAlarmPlanStatus(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_BATCH_UPDATE_STATUS_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get alarm plan Info
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pPlainId		        Plain Id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ALARM_PLAN_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmPlanEx(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pPlainId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get alarm type configed sources
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pAlarmTypeId		    Alarm plain type Id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ALARM_TYPE_CONFIGED_SOURCES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmTypeConfigedSources(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pAlarmTypeId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get alarm type info
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ALARM_TYPES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmTypes(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get page alarm plan info
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					page param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PAGE_ALARM_PLANS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageAlarmPlans(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_GET_PAGE_PLANS_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Update alarm plan
* @param	[IN] iSessionID					User session ID
* @param	[IN] pAlarmPlanInfo				Alarm plan info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateAlarmPlan(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_PLAN_INFO* pAlarmPlanInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add alarm Protocol template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pProtocolTemplate			Alarm Protocol template info
* @param	[OUT] pProtocolTemplateId		Alarm Protocol template ID
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddAlarmProtocolTemplate(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_PROTOCOL_TEMPLATE_INFO* pProtocolTemplate,
	DPSDK_GENERAL_ID* pProtocolTemplateId);

/**
* @brief	Update alarm Protocol template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pProtocolTemplate			Alarm Protocol template info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateAlarmProtocolTemplate(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_PROTOCOL_TEMPLATE_INFO* pProtocolTemplate);

/**
* @brief	Get alarm Protocol template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pProtocolTemplateId		Alarm Protocol template ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_ALARM_Protocol_TEMPLATE_INFO for data type
* @param	[IN] pUserData					User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmProtocolTemplateInfo(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pProtocolTemplateId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get alarm Protocol template list
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_ALARM_PROTOCOL_TEMPLATE_LIST for data type
* @param	[IN] pUserData					User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmProtocolTemplateList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete alarm Protocol template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pProtocolTemplateId		Alarm Protocol template ID
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteAlarmProtocolTemplate(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pProtocolTemplateId);
/**
* @brief	Add alarm vacation template

* @param	[IN] iSessionID					User session ID
* @param	[IN] pVacationTemplate				Alarm vacation template info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddAlarmVacationTemplate(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_VACATION_TEMPLATE_INFO* pVacationTemplate,
	DPSDK_GENERAL_ID* pVacationTemplateId);

/**
* @brief	Update alarm vacation template

* @param	[IN] iSessionID					User session ID
* @param	[IN] pVacationTemplate				Alarm vacation template info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateAlarmVacationTemplate(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_VACATION_TEMPLATE_INFO* pVacationTemplate);

/**
* @brief	Get alarm vacation template list
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_ALARM_VACATION_TEMPLATE_LIST for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmVacationTemplateList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get alarm vacation template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pVacationTemplateId			Alarm vacation template ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_ALARM_VACATION_TEMPLATE_INFO for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmVacationTemplateInfo(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pVacationTemplateId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete alarm vacation template
* @param	[IN] iSessionID					User session ID
* @param	[IN] pVacationTemplateId		Alarm vacation template ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DELETE_VACATION_TEMPLATE_FAILED_INFO for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteAlarmVacationTemplate(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pVacationTemplateId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Add soft trigger alarm type
* @param	[IN] iSessionID					User session ID
* @param	[IN] pSoftAlarmTypeInfo			Soft trigger Alarm type info
* @param	[OUT] pSoftAlarmTypeId			Alarm trigger Alarm type ID
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddSoftTriggerAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_SOFT_TRIGGER_ALARM_TYPE_INFO* pSoftAlarmTypeInfo,
	DPSDK_GENERAL_ID* pSoftAlarmTypeId);

/**
* @brief	Generate soft trigger alarm type
* @param	[IN] iSessionID					User session ID
* @param	[IN] pSoftAlarmTypeInfo			Soft trigger Alarm type info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GenerateSoftTriggerAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_GENERATE_SOFT_TRIGGER_ALARM_TYPE_INFO* pSoftAlarmTypeInfo);

/**
* @brief	Update soft trigger alarm type
* @param	[IN] iSessionID					User session ID
* @param	[IN] pSoftAlarmTypeInfo			Soft trigger Alarm type info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateSoftTriggerAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_SOFT_TRIGGER_ALARM_TYPE_INFO* pSoftAlarmTypeInfo);
/**
* @brief	Update custom alarm code type
* @param	[IN] iSessionID					User session ID
* @param	[IN] pCustomAlarmCodeTypeInfo	Custom Alarm Code type info
* @return   Return 0 if succeeded, return error code if failed
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateCustomAlarmCodeType(DPSDK_INT32 iSessionID,
	DPSDK_CUSTOM_ALARM_CODE_TYPE_INFO* pSoftAlarmTypeInfo);

/**
* @brief	Add custom alarm code type
* @param	[IN] iSessionID					User session ID
* @param	[IN] pCustomAlarmCodeTypeInfo	Custom Alarm Code type info
* @param	[OUT] pCustomAlarmCodeTypeId	Custom Alarm Code type ID
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddCustomAlarmCodeType(DPSDK_INT32 iSessionID,
	DPSDK_CUSTOM_ALARM_CODE_TYPE_INFO* pSoftAlarmTypeInfo,
	DPSDK_GENERAL_ID* pSoftAlarmTypeId);

/**
* @brief	Update Pos alarm type
* @param	[IN] iSessionID					User session ID
* @param	[IN] pPosAlarmTypeInfo			Pos Alarm type info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdatePosAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_POS_ALARM_TYPE_INFO* pPosAlarmTypeInfo);

/**
* @brief	Update Pos alarm type
* @param	[IN] iSessionID					User session ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_POS_ALARM_TYPE_INFO for data type
* @param	[IN] pAlarmTypeId				Alarm Type ID
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPosAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_CHAR* pAlarmTypeId,
	DPSDK_VOID* pUserData);
/**
* @brief	Get soft trigger alarm type list
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pSourceCode		    Alarm source code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_SOFT_TRIGGER_ALARM_TYPE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSoftTriggerAlarmTypeList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSourceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Delete soft trigger alarm type
* @param	[IN] iSessionID					User session ID
* @param	[IN] iDelMode					Delete Mode
* @param	[IN] pAlarmTypeId				Alarm Type ID
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteSoftTriggerAlarmType(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iDelMode,
	DPSDK_GENERAL_ID* pAlarmTypeId);
/**
* @brief	Get custom alarm code type list
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pSourceCode		    Alarm source code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_CUSTOM_ALARM_CODE_TYPE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.

*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCustomAlarmCodeTypeList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSourceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Delete custom alarm code type
* @param	[IN] iSessionID					User session ID
* @param	[IN] iDelMode					Delete Mode
* @param	[IN] pAlarmTypeId				Alarm Type ID
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteCustomAlarmCodeType(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID* pAlarmTypeId);

/**
* @brief	Get map resource config status
* @param	[IN] pResourceIds				Resource ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_MAP_RESOURCE_CONFIG_STATUS_LIST for data type
* @param	[IN] pUserData					User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetMapResourceConfigStatus(DPSDK_INT32 iSessionID,
	DPSDK_MAP_RESOURCE_CONFIG_ID_LIST* pResourceIds,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get radar bind cameras
* @param	[IN] iSessionID					User session ID
* @param	[IN] pChannelId					Radar Channel Id
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_EMAP_RADAR_BIND_CAMERAS_LIST for data type
* @param	[IN] pUserData					User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetRadarBindCamera(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Alarm Overview Get Summary
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Alarm summary param
* @param	[OUT] pSummaryInfo				Alarm summary info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AlarmOverviewGetSummary(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_OVERVIEW_GET_SUMMARY_PARAM* pParam,
	DPSDK_ALARM_OVERVIEW_GET_SUMMARY_INFO* pSummaryInfo);

/**
* @brief	Alarm get entrance info
* @param	[IN] iSessionID					User session ID
* @param	[IN] pAlarmCode					Alarm code
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_GET_ALARM_ENTRANCE_INFO for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AlarmGetEntranceInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pAlarmCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get combination alarm sules
* @param	[IN] iSessionID					User session ID
* @param	[IN] pkeyword					keyword
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_ALARM_COMBINATION_RULE_LIST for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmCombinationRules(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pKeyword,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get combination alarm sources by page
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Param
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_ALARM_COMBINATION_SOURCE_LIST for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmCombinationSourcesByPage(DPSDK_INT32 iSessionID,
	DPSDK_ALARM_COMBINATION_SOURCE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Get Alarm Handle Comment Config
* @param	[IN] iSessionID					User session ID
* @param	[OUT] pForceComment				Alarm Handle Comment Config Info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAlarmHandleCommentConfig(DPSDK_INT32 iSessionID,
	bool* pForceComment);

/**
* @brief	Set Alarm Handle Comment Config
* @param	[IN] iSessionID					User session ID
* @param	[IN] bForceComment				Alarm Handle Comment Config Info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SetAlarmHandleCommentConfig(DPSDK_INT32 iSessionID,
	bool bForceComment);

/*******************************************	Alarm end		******************************************************/


/*******************************************	Audio begin		******************************************************/
/**
* @brief	Get Audio Info List
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pPlainId		        Plain Id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ALARM_PLAN_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AudioGetFileListInfo(DPSDK_INT32 iSessionID, DPSDK_CHAR* pChannelID, DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);

/**
* @brief	Get Audio Info List
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pPlainId		        Plain Id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ALARM_PLAN_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AudioUpdateFileListInfo(DPSDK_INT32 iSessionID, DPSDK_CHAR* pChannelID, DPSDK_DataCallback fDataCallBack, DPSDK_VOID* pUserData);

/*******************************************	Audio end		******************************************************/



/*******************************************	entrance group begin	**********************************************/

/**
* @brief	entrance group add group
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						group info
* @param	[OUT] pEntranceGroupId			entrance group id
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EntranceGroupAddGroup(DPSDK_INT32 iSessionID,
	DPSDK_ENTRANCE_GROUP_ADD_GROUP* pParam,
	DPSDK_BASE_ID_INFO* pEntranceGroupId);


/**
* @brief	entrance group delete groups
* @param	[IN] iSessionID					User session ID
* @param	[IN] pEntranceGroupIds			Entrance group ids
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EntranceGroupDeleteGroups(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pEntranceGroupIds);

/**
* @brief	entrance group update group
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						group info
* @param	[IN] pEntranceGroupId			entrance group id
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EntranceGroupUpdateGroup(DPSDK_INT32 iSessionID,
	DPSDK_ENTRANCE_GROUP_ADD_GROUP* pParam,
	DPSDK_CHAR* pEntranceGroupId);


/**
* @brief	entrance group get group
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pEntranceGroupId		Entrance group id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ENTRANCE_GROUP_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EntranceGroupGetGroup(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pEntranceGroupId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	entrance group get groups
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParkingLogId			ParkingLot ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ENTRANCE_GROUPS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EntranceGroupGetGroups(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pParkingLogId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	entrance group get page groups
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam				    Param info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PAGE_ENTRANCE_GROUPS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EntranceGroupGetPageGroups(DPSDK_INT32 iSessionID,
	DPSDK_ENTRANCE_GROUP_GET_PAGE_GROUPS_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	entrance get page failure vehicles
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam				    Param info
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PAGE_ENTRANCE_FAILURE_VEHICLES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EntranceGetPageFailureVehicles(DPSDK_INT32 iSessionID,
	DPSDK_ENTRANCE_GET_PAGE_FAILURE_VEHICLES_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	entrance issue vehicles
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pIssueVehiclesInfo		Issue vehicles info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_EntranceIssueVehicles(DPSDK_INT32 iSessionID,
	DSPDK_ENTRANCE_ISSUE_VEHICLES_INFO* pIssueVehiclesInfo);

/**
* @brief	add parking lot
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParkingLotInfo		Parking lot info
* @param	[OUT] pParkingLotId			Parking lot id
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotAddParkingLot(DPSDK_INT32 iSessionID,
	DPSDK_PARKING_LOT_ADD_PARKING_LOT_INFO* pParkingLotInfo,
	DPSDK_BASE_ID_INFO* pParkingLotId);

/**
* @brief	delete parking lots
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pIdList				Parking lot id list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotDeleteParkingLots(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pIdList);

/**
* @brief	update parking lot
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParkingLotInfo		Parking lot info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotUpdateParkingLot(DPSDK_INT32 iSessionID,
	DPSDK_PARKING_LOT_ADD_PARKING_LOT_INFO* pParkingLotInfo,
	DPSDK_PARKING_LOT_UPDATE_RESULT* pUpdateResult);

/**
* @brief	parking lot get parking lot
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pId					Parking lot id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_PARKING_LOT_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetParkingLot(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot get parking lots
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_PARKING_LOTS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetParkingLots(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot get config parking lots
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_CONFIG_PARKING_LOTS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetConfigParkingLots(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	parking lot get record parking lots
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_RECORD_PARKING_LOTS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetRecordParkingLots(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot get parking lots
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_PARKING_LOTS_TREE for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetParkingLotTree(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pIdList,
	DPSDK_INT32 iAuthType,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot get entry positions
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_ENTRY_POSITION_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetEntryPositions(DPSDK_INT32 iSessionID,
	DPSDK_PARKING_LOT_GET_PARKING_LOT_POSITION_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot get unbinding common led channels
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_UNBINDING_COMMON_LED_CHANNELS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetUnBindingCommonLedChannels(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot get unbinding space device
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_UNBINDING_COMMON_LED_CHANNELS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetUnBindingSpace(DPSDK_INT32 iSessionID,
	DPSDK_PARKING_LOT_SPACE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	parking lot get unbinding led device
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_UNBINDING_COMMON_LED_CHANNELS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetUnBindingLed(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_PARKING_LOT_SPACE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot get unbinding detector device
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_UNBINDING_COMMON_LED_CHANNELS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetUnBindingDetector(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_PARKING_LOT_SPACE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	parking lot get unbinding itc channels
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_UNBINDING_ITC_CHANNELS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetUnBindingItcChannels(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	parking lot get unbinding remain led channels
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_UNBINDING_REMAIN_LED_CHANNELS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetUnBindingRemainLedChannels(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot get unbinding vto channels
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_UNBINDING_VTO_CHANNELS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetUnBindingVtoChannels(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	parking lot get vto binding itc channels
* @param	[IN] iSessionID			    User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PARKING_LOT_VTO_BINDING_ITC_CHANNELS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetVtoBindingItcChannels(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pVtoDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	parking lot update Idle parking space count
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam			    parking space count info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotUpdateIdleParkingSpaceCount(DPSDK_INT32 iSessionID,
	DPSDK_PARKING_LOT_UPDATE_SPACECOUNT* pParam,
	DPSDK_PARKING_LOT_UPDATE_RESULT* pUpdateResult);

/**
* @brief	Get led configuration list
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pDeviceCode			Device code
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_LED_CONFIGRATIONS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLedConfigurationInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Update led configuration
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pDeviceCode			Device code
* @param	[IN] pLedConfigurationList  Led configuration info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateLedConfigurationInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_LED_CONFIGURATION_INFO* pLedConfigurationList);

/*******************************************	entrance group end		**********************************************/

/********************************************	entrance record begin	********************************************************/

/**
* @brief	Get Vehicle Enter Record info
* @param	[IN] iSessionID				User session ID
* @param	[IN] pId					enter record id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_VEHICLE_ENTER_RECORD_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetVehicleEnterRecordInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/********************************************	entrance record end		********************************************************/

/**
* @brief	get access record info
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pId					ID
* @param	[OUT] pAccessRecordInfo		Access record info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAccessRecordInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pId,
	DPSDK_ACCESS_RECORD_INFO* pAccessRecordInfo);

/**
* @brief	get page access records
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pParam					Access records param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PAGE_ACCESS_RECORDS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageAccessRecords(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_ACCESS_RECORD_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	export access records
* @param	[IN] iSessionID			    User session ID
* @param	[IN] pExportParam			export access records param
* @param	[OUT] pExportResult			export result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportAccessRecords(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_ACCESS_RECORDS_PARAM* pExportParam,
	DSPDK_EXPORT_ACCESS_RECORDS_RESULT* pExportResult);

/********************************************	case begin	********************************************************/
/**
* @brief	add case
* @param	[IN] iSessionID				User session ID
* @param	[IN] pCaseInfo				case info
* @param	[OUT] pId					case id
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddCase(DPSDK_INT32 iSessionID,
	DPSDK_CASE_INFO* pCaseInfo,
	DPSDK_BASE_ID_INFO* pId);

/**
* @brief	add case operate log
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					operate log info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddCaseOperateLog(DPSDK_INT32 iSessionID,
	DPSDK_ADD_OPERATE_LOG_PARAM* pParam);

/**
* @brief	add case type
* @param	[IN] iSessionID				User session ID
* @param	[IN] pCaseTypeName			case type name
* @param	[OUT] pId					case type id
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddCaseType(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pCaseTypeName,
	DPSDK_BASE_ID_INFO* pId);

/**
* @brief	add temp case
* @param	[IN] iSessionID				User session ID
* @param	[IN] pCaseName				temp case name
* @param	[OUT] pId					case id
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddTempCase(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pCaseName,
	DPSDK_BASE_ID_INFO* pId);

/**
* @brief	delete case type
* @param	[IN] iSessionID				User session ID
* @param	[IN] pCaseTypeId			case type id
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteCaseType(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pCaseTypeId);

/**
* @brief	delete cases
* @param	[IN] iSessionID				User session ID
* @param	[IN] pIdList				case id list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteCaseList(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pIdList);


/**
* @brief	update case
* @param	[IN] iSessionID				User session ID
* @param	[IN] pCaseInfo				case info
* @param	[IN] fDataCallBack			Data sync call function, data type see DPSDK_UPDATECASE_FAIL_LIST
* @param	[IN] pUserData				User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateCase(DPSDK_INT32 iSessionID,
	DPSDK_MODIFY_CASE_INFO* pCaseInfo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	update case type
* @param	[IN] iSessionID				User session ID
* @param	[IN] pCaseTypeInfo			case type info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateCaseType(DPSDK_INT32 iSessionID,
	DPSDK_BASE_ID_NAME_INFO* pCaseTypeInfo);

/**
* @brief	Delete case logo
* @param	[IN] iSessionID				User session ID
* @param	[IN] iId					logo id
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteCaseLogo(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iId);

/**
* @brief	Get case types
* @param	[IN] iSessionID				User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_CASE_TYPE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCaseTypeList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get case operate logs
* @param	[IN] iSessionID				User session ID
* @param	[IN] pCaseId				case id
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_CASE_OPERATE_LOG_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCaseOperateLogList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pCaseId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get case logos
* @param	[IN] iSessionID				User session ID
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_CASE_LOGO_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCaseLogoList(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get page case list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					page case param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PAGE_CASE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageCaseList(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_CASE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	get case statistics
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pResult				statistics result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCaseStatistics(DPSDK_INT32 iSessionID,
	DPSDK_CASE_STATISTICS* pResult);

/**
* @brief	Get case list
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					page case param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_CASE_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCase(DPSDK_INT32 iSessionID,
	DPSDK_CASE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	check add prerequisite
* @param	[IN] iSessionID				User session ID
* @param	[OUT] pResult				check add prerequisite result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCaseCheckAddPrerequisite(DPSDK_INT32 iSessionID,
	DPSDK_CASE_CHECK_ADD_PREREQUISITE_RESULT* pResult);


/********************************************	case end	********************************************************/

/********************************************	device begin	********************************************************/

/**
* @brief	Batch add unauthorized devices
* @param	[IN] iSessionID				User session ID
* @param	[IN] pIdList				device id list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchAddUnauthorizedDevices(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pIdList);

/**
* @brief	Batch Delete unauthorized devices
* @param	[IN] iSessionID				User session ID
* @param	[IN] pIdList				device id list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchDeleteUnauthorizedDevices(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pIdList);

/**
* @brief	Get page unauthorized devices
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					page case param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PAGE_UNAUTHORIZED_DEVICES_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageUnauthorizedDevices(DPSDK_INT32 iSessionID,
	DPSDK_GET_UNAUTHORIZED_DEVICES_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Batch Delete unauthorized devices
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Export param
* @param	[OUT] pResult				Export result
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ExportDeivces(DPSDK_INT32 iSessionID,
	DPSDK_EXPORT_DEVICE_PARAM* pParam,
	DPSDK_EXPORT_FILE_RESULT* pResult);

/********************************************	device end		********************************************************/

/**
* @brief	Get Associate PlateNos List
* @param	[IN] iSessionID				User session ID
* @param	[IN] pKeyword				PlateNo keyword
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_ASSOCIATE_PLATENOS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetAssociatePlateNosList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pKeyword,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Cancel Request
* @param	[IN] iSessionID				User session ID
* @param	[IN] pSequence				Sequence
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CancelRequest(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSequence);

/***********************************************************	intelligence analysis begin		*********************************************************/
/**
* @brief	Get Passenger Flow Page Groups List
* @param	[IN] iSessionID				User session ID
P @param	[IN] pParam					Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_PASSENGER_FLOW_PAGE_GROUPS_LIST for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPassengerFlowPageGroups(DPSDK_INT32 iSessionID,
	DPSDK_PASSENGER_FLOW_PAGE_GROUP_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Calibrate Passenger Flow Group Stay Number
* @param	[IN] iSessionID				User session ID
P @param	[IN] pGroupId				Group ID
* @param	[IN] pGroupStayNum			Group Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CalibratePassengerFlowGroupStayNumber(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pGroupId,
	DPSDK_PASSENGER_FLOW_CALIBRATE_GROUP_STAY_NUMBER* pGroupStayNum);

/**
* @brief	Add Passenger Flow Group
* @param	[IN] iSessionID				User session ID
P @param	[IN] pGroupInfo				Group Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddPassengerFlowGroup(DPSDK_INT32 iSessionID,
	DPSDK_PASSENGER_FLOW_GROUP_INFO* pGroupInfo);

/**
* @brief	Update Passenger Flow Group
* @param	[IN] iSessionID				User session ID
P @param	[IN] pGroupInfo				Group Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdatePassengerFlowGroup(DPSDK_INT32 iSessionID,
	DPSDK_PASSENGER_FLOW_GROUP_INFO* pGroupInfo);

/**
* @brief	Update device record wholeness
* @param	[IN] iSessionID				User session ID
P @param	[IN] pGroupInfo				channel Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateDeviceRecordWholenessConfig(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_RECORD_WHOLENESS_CONFIG_INFO* pGroupInfo);

/**
* @brief	Update Passenger Flow Report Mail Config
* @param	[IN] iSessionID				User session ID
P @param	[IN] pReportInfo			Report Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdatePassengerReportMailConfig(DPSDK_INT32 iSessionID,
	DPSDK_PASSENGER_FLOW_REPORT_INFO* pReportInfo);

/**
* @brief	Send Passenger Report Mail
* @param	[IN] iSessionID				User session ID
P @param	[IN] pReportInfo			Report Info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_SendPassengerReportMail(DPSDK_INT32 iSessionID,
	DPSDK_PASSENGER_FLOW_REPORT_INFO* pReportInfo);

/**
* @brief   Get Report Config
* @param	[IN] iSessionID					    User session ID
* @param	[IN] fDataCallBack				    Data callback function, data type: DPSDK_PASSENGER_FLOW_REPORT_INFO
* @param	[IN] pUserData					    User data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPassengerReportMailConfig(DPSDK_INT32 iSessionID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/***********************************************************	intelligence analysis end		*********************************************************/

/***********************************************************	device tree begin		*********************************************************/
/**
* @brief	Get device tree info
* @param	[IN] iSessionID				User session ID
P @param	[IN] pParam					Param
* @param	[IN] fDataCallBack			Data sync callback function, refer to DPSDK_DATA_GET_DEVICE_TREE_INFO for data type
* @param	[IN] pUserData				User Data
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceTreeInfo(DPSDK_INT32 iSessionID,
	DPSDK_TREE_DEVICE_TREE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/***********************************************************	device tree end		*********************************************************/

/**
* @brief	Get File Export Password
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Param
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFileExportPasswordInfo(DPSDK_INT32 iSessionID,
	DPSDK_FILE_EXPORT_PASSWORD_CONFIG& struParam);
/**
* @brief	Update File Export Password
* @param	[IN] iSessionID				User session ID
* @param	[IN] pParam					Param
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateFileExportPasswordInfo(DPSDK_INT32 iSessionID,
	const DPSDK_FILE_EXPORT_PASSWORD_CONFIG& struParam);

/**
* @brief	add ip allow
* @param	[IN] iSessionID		User session ID
* @param	[IN] pParam			ip allow infomation
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddIPAllow(DPSDK_INT32 iSessionID,
	const DPSDK_IPALLOW_INFO* pParam);

/**
* @brief	add ip allow
* @param	[IN] iSessionID		User session ID
* @param	[IN] pIdList		id list
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteIPAllow(DPSDK_INT32 iSessionID,
	const DPSDK_GENERAL_ID_LIST* pIdList);

/**
* @brief	add ip allow
* @param	[IN] iSessionID		User session ID
* @param	[IN] pParam			ip allow infomation
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateIPAllow(DPSDK_INT32 iSessionID,
	const DPSDK_IPALLOW_INFO* pParam);

/**
* @brief	get ip allow ip list
* @param	[IN] iSessionID		User session ID
* @param	[IN] iAllowType		ip allow type
* @param	[IN] pUserData		uesr data
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetIPAllowList(DPSDK_INT32 iSessionID,
	DPSDK_INT32 iAllowType,
	DPSDK_CHAR* pKeyword,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/********************************************	room begin		********************************************************/
/**
* @brief	room config add room
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						add room info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigAddRoom(DPSDK_INT32 iSessionID,
	DPSDK_ROOM_CONFIG_ADD_ROOM* pParam);


/**
* @brief	room config batch add room
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						batch add room info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigBatchAddRoom(DPSDK_INT32 iSessionID,
	DPSDK_ROOM_CONFIG_BATCHADD_ROOM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	room config query room detail
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						sip ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_QUERY_ROOM_DETAIL for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigQueryRoomDetail(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSipId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	room confing delete rooms
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRoomIds					room ids
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigDeleteRooms(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pSipIds);

/**
* @brief	room config query room page
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						Query room page param
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_QUERY_ROOM_PAGE for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigQueryRoomPage(DPSDK_INT32 iSessionID,
	DPSDK_ROOM_CONFIG_QUERY_ROOM_PAGE* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	room config update room
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						update room info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigUpdateRoom(DPSDK_INT32 iSessionID,
	DPSDK_ROOM_CONFIG_UPDATE_ROOM_BASIC* pParam);

/**
* @brief	room confing set householder
* @param	[IN] iSessionID					User session ID
* @param	[IN] pRoomId					room id
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigSetHouseholder(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pPersonId);

/**
* @brief	room confing delete Users
* @param	[IN] iSessionID					User session ID
* @param	[IN] pUserIds					User ids
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigDeleteUsers(DPSDK_INT32 iSessionID,
	DPSDK_GENERAL_ID_LIST* pUserIds);

/**
* @brief	room config query person list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						sip ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_QUERY_PERSON_LIST for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigQueryPersonList(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pSipId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	room config bind/unbind person
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						bind/unbind info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RoomConfigBindPerson(DPSDK_INT32 iSessionID,
	DPSDK_ROOM_CONFIG_QUERY_BIND_PERSON* pParam);

/********************************************	room end	 ********************************************************/

/****************************************	Special Space Begin	****************************************************/

/**
* @brief	Get special space tree
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParkingLotId				Parking Lot ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_GET_SPECIAL_SPACE_TREE for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetSpecialSpaceTree(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pParkingLotId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get config special space tree
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParkingLotId				Parking Lot ID
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_GET_CONFIG_SPECIAL_SPACE_TREE for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetConfigSpecialSpaceTree(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pParkingLotId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get page special space list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						param
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_GET_PAGE_SPECIAL_SPACE_LIST for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPageSpecialSpaceList(DPSDK_INT32 iSessionID,
	DPSDK_GET_PAGE_SPECIAL_SPACE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Add special space
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						space info
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddSpacialSpace(DPSDK_INT32 iSessionID,
	DPSDK_ADD_SPECIAL_SPACE* pParam);

/**
* @brief	Delete special spaces
* @param	[IN] iSessionID					User session ID
* @param	[IN] pIds						id list
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteSpacialSpace(DPSDK_INT32 iSessionID,
	DPSDK_DEL_SPECIAL_SPACE* pIds);


/**
* @brief	Get current group vehicle list
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						query param
* @param	[IN] fDataCallBack				Data sync callback function, refer to DPSDK_DATA_GET_CURRENT_GROUP_VEHICLE_LIST for data type
* @param	[IN] pUserData					User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetCurrentGroupVehicleList(DPSDK_INT32 iSessionID,
	DPSDK_GET_GROUP_VEHICLE_PARAM* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/****************************************	Special Space end	****************************************************/

/****************************************	Layer start	****************************************************/
/**
* @brief	Add Layer
* @param	[IN] iSessionID					User session ID
* @param	[IN] pAddLayerParam				Add param
* @param	[IN] pLayerId					Add result
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddLayer(DPSDK_INT32 iSessionID, DPSDK_ADD_LAYER* pAddLayerParam, DPSDK_LAYER_ID* pLayerId);

/**
* @brief	Delete Layer
* @param	[IN] iSessionID					User session ID
* @param	[IN] pDeleteLayerParam			Delete param
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DeleteLayer(DPSDK_INT32 iSessionID, DPSDK_LAYER_ID_LIST* pDeleteLayerParam);

/**
* @brief	Get Layer BindingChannel
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGetLayerBindingChannelParam			GetLayerBindingChannel param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_BINDINGCHANNEL for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLayerBindingChannel(DPSDK_INT32 iSessionID,
	DPSDK_GET_LAYER_BINDINGCHANNEL_PARAM* pGetLayerBindingChannelParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get Layer BindingDetector
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGetLayerBindingChannelParam			GetLayerBindingDetector param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_BINDINGDETECTOR for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLayerBindingDetector(DPSDK_INT32 iSessionID,
	DPSDK_GET_LAYER_BINDINGCHANNEL_PARAM* pGetLayerBindingChannelParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get Layer BindingLED
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGetLayerBindingChannelParam			GetLayerBindingLED param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_BINDINGLED for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLayerBindingLED(DPSDK_INT32 iSessionID,
	DPSDK_GET_LAYER_BINDINGCHANNEL_PARAM* pGetLayerBindingChannelParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get Layer Binding ParkingSpace
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGetLayerBindingChannelParam			GetLayerBindingLED param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_BINDINGParkingSpace for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLayerBindingParkingSpace(DPSDK_INT32 iSessionID,
	DPSDK_GET_LAYER_BINDINGCHANNEL_PARAM* pGetLayerBindingChannelParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get Layer Binding Position
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGetLayerBindingChannelParam			GetLayerBindingLED param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_BINDINGPOSITION for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLayerBindingPosition(DPSDK_INT32 iSessionID,
	DPSDK_GET_LAYER_BINDINGCHANNEL_PARAM* pGetLayerBindingChannelParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get Layer
* @param	[IN] iSessionID								User session ID
* @param	[IN] pLayerID			GetLayer param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_LAYER for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLayer(DPSDK_INT32 iSessionID,
	DPSDK_LAYER_ID* pLayerID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get Layer
* @param	[IN] iSessionID								User session ID
* @param	[IN] pLayerID			GetLayer param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_CONFIG_LAYER for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetConfigLayer(DPSDK_INT32 iSessionID,
	DPSDK_LAYER_ID* pLayerID,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Get Layers
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGeLayersParam							GetLayers param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_LAYERS for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLayers(DPSDK_INT32 iSessionID,
	DPSDK_GETLAYERS_PARAM* pGetLayersParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Get Config Layers
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGeLayersParam							GetLayers param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_CONFIG_LAYERS for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetConfigLayers(DPSDK_INT32 iSessionID,
	DPSDK_GETLAYERS_PARAM* pGetLayersParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);
/**
* @brief	Update Layers
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGeLayersParam							Update Layers param
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateLayer(DPSDK_INT32 iSessionID,
	DPSDK_GETLAYER_RESULT* pUpdateLayersParam);

/**
* @brief	Update Layers Name
* @param	[IN] iSessionID								User session ID
* @param	[IN] pGeLayersParam							Update Layers param
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateLayerBaseInfo(DPSDK_INT32 iSessionID,
	DPSDK_ADD_LAYER* pParam);
/**
* @brief	Get Layers
* @param	[IN] iSessionID								User session ID
* @param	[IN] pParkingLotBindingLedParam				Get ParkingLotBindingLedParam param
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_PARKINGLOTBINDINGLED for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetParkingLotBindingLed(DPSDK_INT32 iSessionID,
	DPSDK_PARKINGLOT_ID* pParkingLotBindingLedParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	ParkingLotGetPositionEx
* @param	[IN] iSessionID								User session ID
* @param	[IN] pPositionId							PositionId
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_PARKINGLOTGETPOSITION for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ParkingLotGetPositionEx(DPSDK_INT32 iSessionID,
	DPSDK_PARKINGLOT_ID* pPositionId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);


/**
* @brief	Get idle parking space count
* @param	[IN] iSessionID								User session ID
* @param	[IN] pDeviceCode							device code
* @param	[IN] fDataCallBack							Data sync callback function, refer to DPSDK_DATA_GET_LEDIDLE_PARKINGSPACECOUNT_LIST for data type
* @param	[IN] pUserData								User Data
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetLedIdleParkingSpaceCount(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/****************************************	Layer end	****************************************************/

/**
* @brief	start query channel record state info
* @param	[IN] iSessionID			User session ID
* @param	[IN] pChannelId	        Channel ID
* @param	[IN] fDataCallBack		Call back point
* @param	[IN] pUserData			User data
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryChannelRecordStateInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_INT32 iPossition,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Obtain the information of vehicles not released at designated gates at the entrance and exit
* @param	[IN] iSessionID			User session ID
* @param	[IN] pChannelId	        Channel ID
* @param	[IN] fDataCallBack		Call back point
* @param	[IN] pUserData			User data
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryUnaccessVehicleInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_PARKINGLOT_ID* pPositionId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Obtain the information on the access authority of the designated gate for the entrance and exit vehicles
* @param	[IN] iSessionID			User session ID
* @param	[IN] pChannelId	        Channel ID
* @param	[IN] pCarNo				CarNum
* @param	[IN] fDataCallBack		Call back point
* @param	[IN] pUserData			User data
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryVehicleAccessAuthorityInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelId,
	DPSDK_CHAR* pCarNo,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryParkingLotEventSettings(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pParkingLotId,
	DPSDK_CHAR* pEventTypeId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryParkingLotEventSingleSetting(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pEventConfigId,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateParkingLotEventSingleSetting(DPSDK_INT32 iSessionID,
	DPSDK_PARK_EVENT_SINGLE_PARAM* pParam);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchUpdateParkingLotEventSettingStatus(DPSDK_INT32 iSessionID,
	DPSDK_PARK_EVENT_STATUS_PARAM* pParam);
/**
* @brief	Obtain the use of parking lot resources (parking area / point / exit / entrance)
* @param	[IN] iSessionID					User session ID
* @param	[OUT] pResult					pResult
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_QueryParkingLotResourceUsedInfo(DPSDK_INT32 iSessionID,
	DPSDK_PARKINLOT_RESOURCE_USED_INFO* pResult);

/****************************************	4G start	****************************************************/
/**
* @brief	Batch control device sleep status
* @param	[IN] iSessionID			User session ID
* @param	[IN] pParam				Batch regulate device sleep state param
* @param	[IN] fDataCallBack		Call back point
* @param	[IN] pUserData			User data
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_BatchRegulateSleepStatus(DPSDK_INT32 iSessionID,
	DPSDK_BATCH_REGULATE_SLEEP_STATE* pParam,
	DPSDK_DataCallback fDataCallBack,
	DPSDK_VOID* pUserData);

/**
* @brief	Confirm device sleep request
* @param	[IN] iSessionID			User session ID
* @param	[IN] pParam				Confirm info
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ConfirmDeviceSleep(DPSDK_INT32 iSessionID,
	DPSDK_DEVICE_CONFIRMSLEEP_INFO* pParam);

/**
* @brief	Get device communication extension information
* @param	[IN] iSessionID			User session ID
* @param	[IN] pDeviceCode		Device code
* @param	[IN] iCommand			Operate command, 1:refuse 2：agree
* @param	[OUT] pCommunicationInfo	Device communication information
* @return	Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetDeviceExtCommunicationInfo(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_DEVICE_COMMUNICATION_INFO* pCommunicationInfo);

/***********************************	Web begin	*************************************/
/**
* @brief	Get web authorization
* @param	[IN] iSessionID					User session ID
* @param	[IN] pDeviceCode				Device code
* @param	[OUT] pResult					Get web authorization result
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetWebAuthorization(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_GET_WEB_AUTHORIZATION_RESULT* pResult);

/**
* @brief	Get web port
* @param	[IN] iSessionID					User session ID
* @param	[IN] pDeviceCode				Device code
* @param	[OUT] pResult					Get web http port
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetWebPort(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_GET_WEB_PORT_RESULT* pResult);

/**
* @brief	Get web tunnel port
* @param	[IN] iSessionID					User session ID
* @param	[IN] pDeviceCode				Device code
* @param	[OUT] pResult					Get web tunnel port
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetWebTunnelPort(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pDeviceCode,
	DPSDK_GET_WEB_PORT_RESULT* pResult);
/***********************************	Web end		*************************************/

/***********************************	System Config begin		*************************************/
/**
* @brief	Get P2P Config
* @param	[IN] iSessionID					User session ID
* @param	[OUT] pResult					Get P2P enable
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetP2PConfig(DPSDK_INT32 iSessionID,
	DPSDK_BOOL* pResult);

/**
* @brief	Update P2P Config
* @param	[IN] iSessionID					User session ID
* @param	[IN] pParam						P2P enable
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UpdateP2PConfig(DPSDK_INT32 iSessionID,
	DPSDK_BOOL* pParam);

/***********************************	System Config end		*************************************/

/***********************************	Time Zone begin		*************************************/
/**
* @brief	Get timezone-conversion Check
* @param	[IN] iSessionID					User session ID
* @param	[OUT] pResult					Get check result
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetTimeZoneConversionCheck(DPSDK_INT32 iSessionID,
	DPSDK_BOOL* pResult);

/**
* @brief	Cancel timezone-conversion Check
* @param	[IN] iSessionID					User session ID
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CancelTimeZoneConversionCheck(DPSDK_INT32 iSessionID);
/***********************************	Time Zone end		*************************************/

/**
* @brief	get user initial password which is changed or nor
* @param	[IN] pIP					Platform ip
* @param	[IN] uiPort					Platform port
* @param	[OUT] pIsModifyed			Initial password is changed or not ,true￡ochanged, false￡ounchanged
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserPWDState(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_BOOL* pIsModifyed);

/**
* @brief	Initialize platform
* @param	[IN] pIP					Platform ip
* @param	[IN] uiPort					Platform port
* @param	[IN] pInitializeInfo		Initialize information
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_InitializeAccount(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_USER_INITIALIZE_ACCOUNT* pInitializeInfo);

/*
* @brief	change question answer
* @param	[IN] pAnswers		answers
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ChangeQuessionAnswers(DPSDK_INT32 iSessionID, DPSDK_USER_CHANGE_QUESTIONANSWER* pAnswers);

/**
* @brief	Query RSA Key
* @return	Return true if succeeded, return false if failed.
*/
DPSDK_EXPORT DPSDK_BOOL DPSDK_CALL DPSDK_QueryMailPublicRsaKey();

/**
* @brief	forgot password guide
* @param	[IN] pIP					IP
* @param	[IN] uiPort					port
* @param	[IN] pUserName				Username
* @param	[OUT] pForgotPwdGuideInfo	result
* @return	Return 0 if succeeded, eturn error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GuideForgotPassword(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_CHAR* pUserName,
	DPSDK_USER_FORGOTPWDGUIDE_INFO* pForgotPwdGuideInfo);
/**
* @brief	Realse forgot password guide
* @param	[IN] pForgotPwdGuideInfo	result
* @return	Return 0 if succeeded, eturn error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RealseGuideForgotPassword(DPSDK_USER_FORGOTPWDGUIDE_INFO* pForgotPwdGuideInfo);

/**
* @brief	get vertification code via Email
* @param	[IN] szUserId				User Name
* @param	[IN] email					Email
* @param	[IN] uiBufLen				Buffer size
* @return	Return 0 if succeeded, return error code if failed.
*/

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetMailVertifyCode(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_USER_GETVERTIFYCODE_INFO* pGetVertifyCodeInfo);

/**
* @brief	check vertification code
* @param	[IN] szUserId				User Name
* @param	[IN] email					Email
* @param	[IN] pVertifyCode			Vertify Code
* @param	[IN] uiBufLen				Buffer size
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_CheckMailVertifyCode(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_USER_CHECKVERTIFYCODE_INFO* pCheckVertifyCodeInfo);
/**
* @brief	check vertify code
* @param	[IN] szUserName			    user name
* @param	[IN] szEmail				Email
* @param	[IN] szNewPassword			new password
* @param	[IN] szVerifyCode			Vertify Code
* @param	[IN] uiBufLen				Buffer size
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_VertifyUpdatePWDByMail(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_USER_UPDATEPWDBYMAIL_INFO* pUpdatePWDbyMailInfo);


/**
* @brief	get user system password security question
* @param	[IN] szUserId				User Name
* @param	[OUT] pQuestionList			Password security question list
* @param	[IN] uiBufLen				Buffer size
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetUserQuestionList(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_CHAR* pUserName,
	DPSDK_USER_QUESTION_LIST* pQuestionList,
	DPSDK_UINT32 uiBufLen);

/**
* @brief	verify password security question
* @param	[IN] pAnswerList			Answer list
* @param	[IN] uiBufLen				Buffer size
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_VerifyQuestionAnswer(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_USER_QUESTION_ANSWER_LIST* pAnswerList,
	DPSDK_UINT32 uiBufLen,
	DPSDK_USER_QUESTION_UNLOCKTIME& struUnlockTime);

/**
* @brief	verify password security question and then change password
* @param	[IN] pInitializeInfo		password infomation
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_VerifyUpdatePWD(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_USER_INITIALIZE_ACCOUNT* pInitializeInfo);
/**
* @brief	Change account user password
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pUserPassword			User password parameters
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_ChangeAccountUserPassword(DPSDK_IP* pIP,
	DPSDK_UINT32 uiPort,
	DPSDK_ACCOUNT_CHANGE_USER_PASSWORD* pUserPassword);

/**
* @brief	get Function Config
* @param	[IN] iSessionID			User session ID
* @param	[OUT] pInfoXml			Store organization tree info Xml stream
* @return	Return 0 if succeeded, return error code if failed.
* @note		pInfoXml need DPSDK_ReleaseDataBuffer interface to release
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetFunctionConfigEX(DPSDK_INT32 iSessionID,
	DPSDK_CHAR** pInfoXml);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_InitP2PSetver(DPSDK_INT32 iSessionID, DPSDK_CHAR* pP2PServerDomain);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_UnInitP2PSetver(DPSDK_INT32 iSessionID, DPSDK_CHAR* pP2PServerDomain);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AddP2PP2Mapping(DPSDK_INT32 iSessionID, DPSDK_P2P_TRAVERSAL_DEV_INFO* pDeviceInfo,
	DPSDK_P2P_PORTMAPPING* pMappingInfo);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_DelP2PMapping(DPSDK_INT32 iSessionID, DPSDK_CHAR* pDeviceSN);

/********************************AES加解密相关接口，提供给上传调用，不对外******************************************/
// AES256加密
DPSDK_EXPORT DPSDK_INT32  DPSDK_CALL DPSDK_Aes256Encrypt(DPSDK_UCHAR *pzPlaintext,
	DPSDK_INT32 iPlaintext_len,
	DPSDK_UCHAR *pszkey,
	DPSDK_UCHAR *psziv,
	DPSDK_UCHAR *pszCiphertext);
// AES256解密
DPSDK_EXPORT DPSDK_INT32  DPSDK_CALL DPSDK_AES256Decrypt(const DPSDK_UCHAR *pzCiphertext,
	DPSDK_INT32 iCiphertext_len,
	DPSDK_UCHAR *pszkey,
	DPSDK_UCHAR *psziv,
	DPSDK_UCHAR *pszPlaintext);

DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AESDecrypt(const DPSDK_UCHAR *in,
	DPSDK_INT32 in_len,
	const DPSDK_UCHAR *key,
	DPSDK_INT32 key_len,
	DPSDK_UCHAR *plaintext,
	DPSDK_INT32 key_policy,
	DPSDK_UCHAR *iv,
	DPSDK_BOOL padding);

// SHA-256加密
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_Sha256Encrypt(const DPSDK_CHAR* szInput,
	DPSDK_INT32 iInputLen,
	DPSDK_CHAR* szOutput,
	DPSDK_INT32 iOutputLen);
// HmacSHA256加密
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_HmacSHA256Encrypt(const DPSDK_CHAR* szInput,
	DPSDK_INT32 iInputLen,
	const DPSDK_CHAR* szKey,
	DPSDK_INT32 iKeyLen,
	DPSDK_CHAR* szOutput,
	DPSDK_INT32 iOutputLen);

// Aes加密
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AESEnCryption(const DPSDK_UCHAR *in,
	DPSDK_INT32 in_len,
	DPSDK_UCHAR* out,
	DPSDK_INT32* out_len,
	DPSDK_UCHAR *key,
	DPSDK_INT32 key_len,
	DPSDK_UCHAR* iv,
	DPSDK_INT32 ivLen,
	DPSDK_INT32 mode);
// Aes解密
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_AESDeCryption(const DPSDK_UCHAR *in,
	DPSDK_INT32 in_len,
	DPSDK_UCHAR* out,
	DPSDK_INT32* out_len,
	DPSDK_UCHAR *key,
	DPSDK_INT32 key_len,
	DPSDK_UCHAR* iv,
	DPSDK_INT32 ivLen,
	DPSDK_INT32 mode);

/********************************WebSocket，不对外******************************************/
// 启动WebSocket server
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_StartWebsocketServer();
// 获取WebSocket server端口
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetWebsocketServerPort();

/**
* @brief	Get Permission Resource Collection
* @param	[IN] iSessionID				User Session ID
* @param	[OUT] pResourceInfos		Permission Resource Collection
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetPermissionResourceCollection(DPSDK_INT32 iSessionID,
	DPSDK_PERMISSION_RESOURCE_COLLECTION_INFO* pResourceInfo);

/*realease buffer*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_RealsePermissionResourceCollection(DPSDK_PERMISSION_RESOURCE_COLLECTION_INFO* pResourceInfo);

/**
* @brief	get thumbnails pic info
* @param	[IN] iSessionID				User Session ID
* @param	[IN] pChannelCode			Channel code
* @param	[OUT] pThumbnailsResult			thumbnails pic info
* @return	Return 0 if succeeded, return error code if failed.
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetChannelThumbnail(DPSDK_INT32 iSessionID,
	DPSDK_CHAR* pChannelCode,
	DPSDK_THUMBNAILS_RESULT* pThumbnailsResult);


/**
* @brief	Get watermark config
* @param	[IN] iSessionID					User session ID
* @param	[OUT] pConfig				Watermark config
* @return   Return 0 if succeeded, return error code if failed
*/
DPSDK_EXPORT DPSDK_INT32 DPSDK_CALL DPSDK_GetWatermarkConfig(DPSDK_INT32 iSessionID, DPSDK_WATERMARK_CONFIG* pConfig);
