/*
* Copyright (c) 2009, 浙江大华技术股份有限公司
* All rights reserved.
*
* 摘　要：SDK接口很多,定制或一些不常用的功能可以放入dhnetsdkEx.h,
*         对外提供 dhnetsdk.h,
*         定制项目额外提供 dhnetsdkEx.h
*/
//////////////////////////////////////////////////////////////////////////
#ifndef DHNETSDKEX_H
#define DHNETSDKEX_H

#include "dhnetsdk.h"

#ifdef __cplusplus
extern "C" {
#endif

/************************************************************************
 ** 常量定义
 ***********************************************************************/
#define CUSTOM_TITLE_LEN				  1024			   // 自定义标题名称长度(扩充到1024)
#define MAX_CUSTOM_TITLE_NUM    		  8                // 编码物件自定义标题最大数量

/************************************************************************
 ** 枚举定义
 ***********************************************************************/

/************************************************************************
 ** 结构体定义
************************************************************************/

 //////////////////////////////////////透传扩展接口参数//////////////////////////////////////////////////////////////////
 
 // 透传类型
 typedef enum   tagNET_TRANSMIT_INFO_TYPE
 {
    NET_TRANSMIT_INFO_TYPE_DEFAULT,                 // 默认类型，即CLIENT_TransmitInfoForWeb接口的兼容透传方式
    NET_TRANSMIT_INFO_TYPE_F6,                      // F6纯透传
 } NET_TRANSMIT_INFO_TYPE;

 // CLIENT_TransmitInfoForWebEx输入参数
 typedef struct tagNET_IN_TRANSMIT_INFO
 {
    DWORD                   dwSize;                         // 用户使用该结构体，dwSize需赋值为sizeof(NET_IN_TRANSMIT_INFO)
    NET_TRANSMIT_INFO_TYPE  emType;                         // 透传类型
    char*                   szInJsonBuffer;                 // Json请求数据,用户申请空间
    DWORD                   dwInJsonBufferSize;             // Json请求数据长度
    unsigned char*          szInBinBuffer;                  // 二进制请求数据，用户申请空间
    DWORD                   dwInBinBufferSize;              // 二进制请求数据长度
 } NET_IN_TRANSMIT_INFO;

 // CLIENT_TransmitInfoForWebEx输出参数
 typedef struct tagNET_OUT_TRANSMIT_INFO
 {
    DWORD                   dwSize;                         // 用户使用该结构体时，dwSize需赋值为sizeof(NET_OUT_TRANSMIT_INFO)
    char*                   szOutBuffer;                    // 应答数据缓冲空间, 用户申请空间
    DWORD                   dwOutBufferSize;                // 应答数据缓冲空间长度
    DWORD                   dwOutJsonLen;                   // Json应答数据长度
    DWORD                   dwOutBinLen;                    // 二进制应答数据长度
 } NET_OUT_TRANSMIT_INFO;

 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 //////////////////////////////////////////////异步纯透传结构体定义开始////////////////////////////////////////////////////////////////////////////////////////////
 // CLIENT_AttachTransmitInfo 上报信息回调
 typedef struct tagNET_CB_TRANSMIT_INFO
 {
     BYTE*              pBuffer;            // 数据缓冲地址，SDK内部申请空间
     DWORD              dwBufferSize;       // 数据缓冲总长度
     DWORD              dwJsonLen;          // Json数据长度
     DWORD              dwBinLen;           // 二进制数据长度
     BYTE               byReserved[512];    // 保留字节
 } NET_CB_TRANSMIT_INFO;

 // CLIENT_AttachTransmitInfo()回调函数原型，第一个参数lAttachHandle是CLIENT_AttachTransmitInfo返回值
 typedef int  (CALLBACK *AsyncTransmitInfoCallBack)(LLONG lAttachHandle, NET_CB_TRANSMIT_INFO* pTransmitInfo, LDWORD dwUser);

 // CLIENT_AttachTransmitInfo输入参数
 typedef struct tagNET_IN_ATTACH_TRANSMIT_INFO
 {
     DWORD                       dwSize;                         // 用户使用该结构体时，dwSize需赋值为sizeof(NET_IN_ATTACH_TRANSMIT_INFO)
     AsyncTransmitInfoCallBack   cbTransmitInfo;                 // 回调函数
     LDWORD				         dwUser;                         // 用户数据
     char*                       szInJsonBuffer;                 // Json请求数据,用户申请空间
     DWORD                       dwInJsonBufferSize;             // Json请求数据长度  `

 }NET_IN_ATTACH_TRANSMIT_INFO;

 // CLIENT_AttachTransmitInfo输出参数
 typedef struct tagNET_OUT_ATTACH_TRANSMIT_INFO
 {
     DWORD                   dwSize;                         // 用户使用该结构体时，dwSize需赋值为sizeof(NET_OUT_ATTACH_TRANSMIT_INFO)
     BYTE*                   szOutBuffer;                    // 应答缓冲地址,用户申请空间
     DWORD                   dwOutBufferSize;                // 应答缓冲总长度
     DWORD                   dwOutJsonLen;                   // 应答Json数据长度
     DWORD                   dwOutBinLen;                    // 应答二进制数据长度 
 } NET_OUT_ATTACH_TRANSMIT_INFO;

 // CLIENT_DetachTransmitInfo输入参数
 typedef struct tagNET_IN_DETACH_TRANSMIT_INFO
 {
     DWORD                   dwSize;                         // 用户使用该结构体时，dwSize需赋值为sizeof(NET_IN_DETACH_TRANSMIT_INFO)
     char*                   szInJsonBuffer;                 // Json请求数据,用户申请空间
     DWORD                   dwInJsonBufferSize;             // Json请求数据长度
 } NET_IN_DETACH_TRANSMIT_INFO;

 // CLIENT_DetachTransmitInfo输出参数
 typedef struct tagNET_OUT_DETACH_TRANSMIT_INFO
 {
     DWORD                   dwSize;                         // 用户使用该结构体时，dwSize需赋值为sizeof(NET_OUT_DETACH_TRANSMIT_INFO)
     char*                   szOutBuffer;                    // 应答数据缓冲空间, 用户申请空间
     DWORD                   dwOutBufferSize;                // 应答数据缓冲空间长度
     DWORD                   dwOutJsonLen;                   // 应答Json数据长度
 } NET_OUT_DETACH_TRANSMIT_INFO;

//////上海BUS//////
 
// 上海巴士控制类型， 对应CLIENT_ControlSpecialDevice接口
typedef enum tagNET_SPECIAL_CTRL_TYPE
{
    NET_SPECIAL_CTRL_SHUTDOWN_PAD,            // 关闭PAD命令, pInBuf对应类型NET_IN_SHUTDOWN_PAD*, pOutBuf对应类型NET_OUT_SHUTDOWN_PAD*
    NET_SPECIAL_CTRL_REBOOT_PAD,              // 重启PAD命令, pInBuf对应类型NET_IN_REBOOT_PAD*, pOutBuf对应类型NET_OUT_REBOOT_PAD*                 
} NET_SPECIAL_CTRL_TYPE;

 //////////////////////////////////////////////设备特殊配置结构体定义开始////////////////////////////////////////////////////////////////////////////////////////////
 // CLIENT_DevSpecialCtrl 特殊控制类型
 typedef enum tagEM_DEV_SPECIAL_CTRL_TYPE
 {
     DEV_SPECIAL_CTRL_TYPE_RECORD_FLUSH,                  // 缓存录像数据强制写入硬盘, pInBuf=NET_IN_RECORD_FLUSH_INFO* , pOutBuf=NET_OUT_RECORD_FLUSH_INFO*
 } EM_DEV_SPECIAL_CTRL_TYPE;
 
 // CLIENT_DevSpecialCtrl, 对应 DEV_SPECIAL_CTRL_TYPE_RECORD_FLUSH 输入参数
 typedef struct tagNET_IN_NET_IN_RECORD_FLUSH_INFO
 {
    DWORD                                      dwSize;       // 用户使用该结构体时，dwSize需赋值为sizeof(NET_IN_RECORD_FLUSH_INFO)               
    int                                        nChannel;     // 通道号
    NET_STREAM_TYPE                            emStreamType; // 码流类型, 有效类型 "main", "Extra1", "Extra2", "Extar3", "Snapshot"     
 }NET_IN_RECORD_FLUSH_INFO;

 // CLIENT_DevSpecialCtrl, 对应 DEV_SPECIAL_CTRL_TYPE_RECORD_FLUSH 输出参数
 typedef struct tagNET_OUT_RECORD_FLUSH_INFO
 {
     DWORD                                     dwSize;       // 用户使用该结构体时，dwSize需赋值为sizeof(NET_OUT_RECORD_FLUSH_INFO)              
 }NET_OUT_RECORD_FLUSH_INFO;
 
 //////////////////////////////////////////////设备特殊配置结构体定义结束////////////////////////////////////////////////////////////////////////////////////////////
 

typedef struct tagNET_IN_REBOOT_PAD
{
    DWORD               dwSize;                  // 用户使用该结构体时，dwSize 需赋值为 sizeof(NET_IN_REBOOT_PAD)
} NET_IN_REBOOT_PAD;

typedef struct tagNET_OUT_REBOOT_PADE
{
    DWORD               dwSize;                  // 用户使用该结构体时，dwSize 需赋值为 sizeof(NET_OUT_REBOOT_PAD)
} NET_OUT_REBOOT_PAD;

typedef struct tagNET_IN_SHUTDOWN_PAD
{
    DWORD               dwSize;                  // 用户使用该结构体时，dwSize 需赋值为 sizeof(NET_IN_REBOOT_PAD)
    int                 nDelayTime;              // 延时关机时间, 单位：秒
} NET_IN_SHUTDOWN_PAD;

typedef struct tagNET_OUT_SHUTDOWN_PAD
{
    DWORD               dwSize;                  // 用户使用该结构体时，dwSize 需赋值为 sizeof(NET_OUT_SHUTDOWN_PAD)
} NET_OUT_SHUTDOWN_PAD;

//////////////////////////////////////////////异步纯透传结构体定义结束////////////////////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////设备网卡信息结构体定义开始 ////////////////////////////////////////////////////////////////////////////////////////////

typedef struct tagNET_DHDEV_ETHERNET_INFO
{
    DWORD               dwSize;                                 // 用户使用该结构体时，dwSize 需赋值为 sizeof(NET_DHDEV_ETHERNET_INFO)
    int                 nEtherNetNum;                           // 以太网口数
    DH_ETHERNET_EX      stuEtherNet[DH_MAX_ETHERNET_NUM_EX];    // 以太网口
} NET_DHDEV_ETHERNET_INFO;

//////////////////////////////////////////////设备网卡信息结构体定义结束////////////////////////////////////////////////////////////////////////////////////////////


//获取HCDZ采集信息,输入参数
typedef struct tagNET_IN_HCDZ_LIST_INFO 
{
    DWORD                           dwSize;							//  结构体大小, 调用者必须初始化该字段
	UINT							nIndexNum;					   //数组szindex有效数量
    UINT                            szIndex[DH_COMMON_STRING_64]; //一个数组,index 值与通道下标对应
}NET_IN_HCDZ_LIST_INFO;

// HCDZ采集信息，检测模块采集信息
typedef struct tagNET_HCDZ_INFO 
{
    UINT            nChannelID;								// 通道号(从0开始)
    UINT            nAIMode;								// AI测量数据模式设置  0 表示输入数据0-10000对应0-100%输入 1 表示4-20mA测量方式，输入数据0-10000对应4-20mA(20%-100%AI量程)
	UINT            nAIO;									// 检测模块模拟输入通道量程 20表示20mA 5表示5V 10表示10V
	UINT			nAnalogInputNum;						// 有效的模拟量输入数量
    UINT            arrAnalogInput[DH_COMMON_STRING_8];     // 是一个数组,检测模块模拟量输入寄存器值 无符号数0-10000对应0-满量程；实际值=DATA/10000*量程AI0，单位mA或V 
	UINT			nDINum;						            // 有效的模模块开关量输入数量
    UINT            arrDI[DH_COMMON_STRING_4];              // 检测模块开关量输入值，是一个数组，0为关，1为开
	UINT			nDONum;						            // 有效的模块开关量输出数量
    UINT            arrDO[DH_COMMON_STRING_4];              // 检测模块开关量输出值，是一个数组，0为关，1为开
}NET_HCDZ_INFO;

// 获取HCDZ采集信息,输出参数
typedef struct tagNET_OUT_HCDZ_LIST_INFO 
{
    DWORD                       dwSize;                             // 结构体大小, 调用者必须初始化该字段
	UINT				        nValidNum;						    // 数组stuInfo的有效个数
    NET_HCDZ_INFO				stuInfo[DH_COMMON_STRING_64];       // HCDZ采集信息
}NET_OUT_HCDZ_LIST_INFO;

typedef struct tagNET_IN_HCDZ_CAPS 
{
    DWORD                           dwSize;                          // 结构体大小, 调用者必须初始化该字段
}NET_IN_HCDZ_CAPS;

// 获取HCDZ(惠测电子)能力结构体
typedef struct tagCFG_HCDZ_CAPS
{
	DWORD                               dwSize;                                 // 结构体大小, 调用者必须初始化该字段
	char								szModelID[DH_COMMON_STRING_32];		    // 设备型号
	unsigned int						nVersion;								// 版本
	unsigned int						nAnalogsNum;							// 检测模块模拟量输入个数
	unsigned int						nDINum;									// 检测模块开关量输入个数
	unsigned int						nDONum;									// 检测模块开关量输出个数
}NET_OUT_HCDZ_CAPS;

// 获取电梯状态(HADT山东金鲁班宏安电梯),输入参数
typedef struct tagNET_IN_HADT_STATUS
{
    DWORD                               dwSize;                                 // 结构体大小, 调用者必须初始化该字段
}NET_IN_HADT_STATUS;

// 获取电梯状态(HADT山东金鲁班宏安电梯),输出参数
typedef struct tagNET_OUT_HADT_STATUS
{
    DWORD                               dwSize;                                 // 结构体大小, 调用者必须初始化该字段
    int                                 nLevelSignal1;                          // 楼层信号值，用于获取楼层的个位数信息，范围(0~37)由客户获取值后自行解析
    int                                 nLevelSignal2;                          // 楼层信号值，用于获取楼层的十位数信息，范围(0~37)由客户获取值后自行解析
    int                                 nLevelSignal3;                          // 楼层信号值，用于获取楼层的百位数信息，范围(0~37)由客户获取值后自行解析 
    DWORD                               dwliftStatus;                           // 电梯状态信息，每一位代表一种状态
                                                                                // bit0: 地震；该位置1表示地震，置0表示没有地震
                                                                                // bit1: 自救；该位置1表示自救，置0表示没有自救
                                                                                // bit2: 满载；该位置1且bit3和bit12置0表示满载，其它表示无效
                                                                                // bit3: 超载；该位置1且bit2和bit12置0表示超载，其它表示无效
                                                                                // bit4: 消防；该位置1表示消防，置0表示没有消防
                                                                                // bit5: 检修；该位置1表示检修，置0表示没有检修
                                                                                // bit6: 下行；该位置1且bit7置0下行，其它表示无效
                                                                                // bit7: 上行；该位置1且bit6置0表示上行，其它表示无效
                                                                                // bit8: 语音报站；该位置1表示有语音报站，置0表示没有语音报站
                                                                                // bit12: 空载；该位置1且bit2和bit3置0表示空载，其它表示无效
                                                                                // bit13: 停止/运行；该位置1表示运行，置0表示停止
                                                                                // bit14: 关门；该位置1且bit15置0表示关门，其它表示无效
                                                                                // bit15: 开门；该位置1且bit14置0表示开门，其它表示无效
}NET_OUT_HADT_STATUS;

typedef enum tagNET_EM_OSD_BLEND_TYPE
{
    NET_EM_OSD_BLEND_TYPE_UNKNOWN,                                  //未知叠加类型
    NET_EM_OSD_BLEND_TYPE_MAIN,                                     //叠加到主码流
    NET_EM_OSD_BLEND_TYPE_EXTRA1,                                   //叠加到辅码流1
    NET_EM_OSD_BLEND_TYPE_EXTRA2,                                   //叠加到辅码流2
    NET_EM_OSD_BLEND_TYPE_EXTRA3,                                   //叠加到辅码流3
    NET_EM_OSD_BLEND_TYPE_SNAPSHOT,                                 //叠加到抓图
    NET_EM_OSD_BLEND_TYPE_PREVIEW,                                  //叠加到预览视频
}NET_EM_OSD_BLEND_TYPE;

// 编码物件-通道标题
typedef struct tagNET_OSD_CHANNEL_TITLE
{
	DWORD				    dwSize;
    NET_EM_OSD_BLEND_TYPE   emOsdBlendType;                 // 叠加类型，不管是获取还是设置都要设置该字段
    BOOL                    bEncodeBlend;                   // 是否叠加
	NET_COLOR_RGBA		    stuFrontColor;					// 前景色
	NET_COLOR_RGBA		    stuBackColor;					// 背景色
	NET_RECT		    	stuRect;						// 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
} NET_OSD_CHANNEL_TITLE;

// 编码物件-时间标题
typedef struct tagNET_OSD_TIME_TITLE
{
	DWORD				    dwSize;
    NET_EM_OSD_BLEND_TYPE   emOsdBlendType;             // 叠加类型，不管是获取还是设置都要设置该字段
    BOOL                    bEncodeBlend;               // 是否叠加
	NET_COLOR_RGBA		    stuFrontColor;				// 前景色
	NET_COLOR_RGBA		    stuBackColor;				// 背景色
	NET_RECT 			    stuRect;					// 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
	BOOL 				    bShowWeek;					// 是否显示星期
} NET_OSD_TIME_TITLE;

// 编码物件-自定义标题
typedef struct tagNET_CUSTOM_TITLE_INFO
{
    BOOL                    bEncodeBlend;                   // 是否叠加
	NET_COLOR_RGBA		    stuFrontColor;					// 前景色
	NET_COLOR_RGBA		    stuBackColor;					// 背景色
	NET_RECT			    stuRect;						// 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
	char				    szText[CUSTOM_TITLE_LEN];		// 标题内容
	BYTE                    byReserved[512];                // 保留字节 
} NET_CUSTOM_TITLE_INFO;

typedef struct tagNET_OSD_CUSTOM_TITLE
{
	DWORD					dwSize;
	NET_EM_OSD_BLEND_TYPE   emOsdBlendType;                         // 叠加类型，不管是获取还是设置都要设置该字段
	int						nCustomTitleNum;						// 自定义标题数量
	NET_CUSTOM_TITLE_INFO	stuCustomTitle[MAX_CUSTOM_TITLE_NUM];	// 自定义标题
} NET_OSD_CUSTOM_TITLE;

// 通道标题对齐信息
typedef enum tagEM_TITLE_TEXT_ALIGNTYPE
{
    EM_TEXT_ALIGNTYPE_INVALID,                              // 无效的对齐方式
    EM_TEXT_ALIGNTYPE_LEFT,                                 // 左对齐
    EM_TEXT_ALIGNTYPE_XCENTER,                              // X坐标中对齐
    EM_TEXT_ALIGNTYPE_YCENTER,                              // Y坐标中对齐
    EM_TEXT_ALIGNTYPE_CENTER,                               // 居中
    EM_TEXT_ALIGNTYPE_RIGHT,                                // 右对齐
    EM_TEXT_ALIGNTYPE_TOP,                                  // 按照顶部对齐
    EM_TEXT_ALIGNTYPE_BOTTOM,                               // 按照底部对齐
    EM_TEXT_ALIGNTYPE_LEFTTOP,                              // 按照左上角对齐
    EM_TEXT_ALIGNTYPE_CHANGELINE,                           // 换行对齐
}EM_TITLE_TEXT_ALIGNTYPE;

typedef struct tagNET_OSD_CUSTOM_TITLE_TEXT_ALIGN
{
	DWORD					dwSize;
	int						nCustomTitleNum;						// 自定义标题数量
    EM_TITLE_TEXT_ALIGNTYPE emTextAlign[MAX_CUSTOM_TITLE_NUM];      // 自定义标题文本对齐方式
}NET_OSD_CUSTOM_TITLE_TEXT_ALIGN;

//编码物件-公共配置信息
typedef struct tagNET_OSD_COMM_INFO
{
	DWORD					dwSize;
	double					fFontSizeScale;			//叠加字体大小放大比例
													//当fFontSizeScale≠0时,nFontSize不起作用
													//当fFontSizeScale=0时,nFontSize起作用
													//设备默认fFontSizeScale=1.0
													//如果需要修改倍数，修改该值
													//如果需要按照像素设置，则置该值为0，nFontSize的值生效
	int						nFontSize;				//叠加到主码流上的全局字体大小,单位 px.
													//和fFontSizeScale共同作用
	int						nFontSizeExtra1;		//叠加到辅码流1上的全局字体大小,单位 px
	int						nFontSizeExtra2;		//叠加到辅码流2上的全局字体大小,单位 px
	int						nFontSizeExtra3;		//叠加到辅码流3上的全局字体大小,单位 px
	int						nFontSizeSnapshot;		//叠加到抓图流上的全局字体大小, 单位 px
	int						nFontSizeMergeSnapshot; //叠加到抓图流上合成图片的字体大小,单位 px
} NET_OSD_COMM_INFO;

typedef enum tagNET_EM_CFG_OPERATE_TYPE
{
	NET_EM_CFG_CHANNELTITLE,            // 叠加通道标题属性配置，对应结构体 NET_OSD_CHANNEL_TITLE，其中结构体中的emOsdBlendType为必填参数
	NET_EM_CFG_TIMETITLE,               // 叠加时间标题属性配置，对应结构体 NET_OSD_TIME_TITLE，其中结构体中的emOsdBlendType为必填参数
	NET_EM_CFG_CUSTOMTITLE,             // 叠加自定义标题属性配置，对应结构体 NET_OSD_CUSTOM_TITLE，其中结构体中的stuCustomTitle.emOsdBlendType为必填参数
	NET_EM_CFG_CUSTOMTITLETEXTALIGN,    // 叠加自定义标题对齐方式属性配置，对应结构体 NET_OSD_CUSTOM_TITLE_TEXT_ALIGN
	NET_EM_CFG_OSDCOMMINFO,             // 叠加公共属性配置，对应结构体 NET_OSD_COMM_INFO
} NET_EM_CFG_OPERATE_TYPE;

/***********************************************************************
 ** 回调函数定义
 ***********************************************************************/

 /**************************************************************************************
 *   Funcname: fAsynPlayHandleCallBack
 *   Purpose:  异步实时监视回调函数
 *   InputParam:    LLONG                    :lPlayHandle // 实时监视播放句柄
 *   InputParam:    LLONG                    :lLoginID    // 登陆句柄
 *   InputParam:    int                      :nChannelID  // 通道号
 *   InputParam:    HWND                     :hWnd        // 窗口句柄
 *   InputParam:    LDWORD                   :dwUser      // 用户
 *   Created:%2015%:%12%:%23%  
 *   Revision Record:date:author:modify sth
**************************************************************************************/
typedef void (CALLBACK *fAsynPlayHandleCallBack)(LLONG lPlayHandle, LLONG lLoginID, int nChannelID, HWND hWnd, LDWORD dwUser);




/************************************************************************
 ** 接口定义
 ***********************************************************************/

/******************************************************************************
功能描述	:	下载录像文件--扩展,可加载码流转换库
输入参数	:	
    lLoginID:       登录接口返回的句柄
    lpRecordFile:   查询录像接口返回的录像信息
    sSavedFileName: 保存录像文件名,支持全路径
    cbDownLoadPos:  下载进度回调函数(回调下载进度,下载结果)
    dwUserData:     下载进度回调对应用户数据
    fDownLoadDataCallBack: 录像数据回调函数(回调形式暂不支持转换PS流)
    dwDataUser:     录像数据回调对应用户数据
    scType:         码流转换类型,0-DAV码流(默认); 1-PS流
    pReserved:      保留字段,后续扩展
输出参数	：	N/A
返 回 值	：	LLONG 下载录像句柄
其他说明	：	特殊接口,SDK默认不支持转PS流,需定制SDK
******************************************************************************/
CLIENT_NET_API LLONG CALL_METHOD CLIENT_DownloadByRecordFileEx2(LLONG lLoginID, LPNET_RECORDFILE_INFO lpRecordFile, char *sSavedFileName, 
                                                    fDownLoadPosCallBack cbDownLoadPos, LDWORD dwUserData, 
                                                    fDataCallBack fDownLoadDataCallBack, LDWORD dwDataUser, 
                                                    int scType = 0, void* pReserved = NULL);

/******************************************************************************
功能描述	:	通过时间下载录像--扩展,可加载码流转换库
输入参数	:	
    lLoginID:       登录接口返回的句柄
    nChannelId:     视频通道号,从0开始
    nRecordFileType:录像类型0 所有录像文件
                            1 外部报警 
                            2 动态检测报警 
                            3 所有报警 
                            4 卡号查询  
                            5 组合条件查询 
                            6 录像位置与偏移量长度 
                            8 按卡号查询图片(目前仅HB-U和NVS特殊型号的设备支持) 
                            9 查询图片(目前仅HB-U和NVS特殊型号的设备支持)  
                            10 按字段查询 
                            15 返回网络数据结构(金桥网吧) 
                            16 查询所有透明串数据录像文件 
    tmStart:        开始时间 
    tmEnd:          结束时间 
    sSavedFileName: 保存录像文件名,支持全路径
    cbTimeDownLoadPos: 下载进度回调函数(回调下载进度,下载结果)
    dwUserData:     下载进度回调对应用户数据
    fDownLoadDataCallBack: 录像数据回调函数(回调形式暂不支持转换PS流)
    dwDataUser:     录像数据回调对应用户数据
    scType:         码流转换类型,0-DAV码流(默认); 1-PS流
    pReserved:      保留参数,后续扩展
输出参数	：	N/A
返 回 值	：	LLONG 下载录像句柄
其他说明	：	特殊接口,SDK默认不支持转PS流,需定制SDK
******************************************************************************/
CLIENT_NET_API LLONG CALL_METHOD CLIENT_DownloadByTimeEx2(LLONG lLoginID, int nChannelId, int nRecordFileType, 
                                                    LPNET_TIME tmStart, LPNET_TIME tmEnd, char *sSavedFileName, 
                                                    fTimeDownLoadPosCallBack cbTimeDownLoadPos, LDWORD dwUserData, 
                                                    fDataCallBack fDownLoadDataCallBack, LDWORD dwDataUser, 
                                                    int scType = 0, void* pReserved = NULL);

/******************************************************************************
功能描述	:	透传扩展接口,按透传类型走对应透传方式接口，目前支持F6纯透传, 同时兼容CLIENT_TransmitInfoForWeb接口
参数定义	:	
    lLoginID:       登录接口返回的句柄
    pInParam:       透传扩展接口输入参数
    pOutParam       透传扩展接口输出参数
    nWaittime       接口超时时间

返 回 值	：	BOOL  TRUE :成功; FALSE :失败
******************************************************************************/
CLIENT_NET_API BOOL  CALL_METHOD CLIENT_TransmitInfoForWebEx(LLONG lLoginID, NET_IN_TRANSMIT_INFO* pInParam, 
                                                             NET_OUT_TRANSMIT_INFO* pOutParam, int nWaittime = 3000);


/******************************************************************************
功能描述	:	 异步纯透传订阅接口
参数定义	:	
    lLoginID:       登录接口返回的句柄
    pInParam:       异步纯透传接口输入参数
    pOutParam       异步纯透传接口输出参数
    nWaittime       接口超时时间

返 回 值	：	    LLONG 异步纯透传句柄
******************************************************************************/
CLIENT_NET_API LLONG CALL_METHOD CLIENT_AttachTransmitInfo(LLONG lLoginID, const NET_IN_ATTACH_TRANSMIT_INFO* pInParam, NET_OUT_ATTACH_TRANSMIT_INFO* pOutParam, int nWaitTime);

 

/******************************************************************************
功能描述	:	 异步纯透传取消订阅接口
参数定义	:	
    lAttachHandle:  异步纯透传句柄，即CLIENT_AttachTransmitInfo接口的返回值
    pInParam:       异步纯透传取消订阅接口输入参数
    pOutParam       异步纯透传取消订阅接口输出参数
    nWaittime       接口超时时间

返 回 值	：		BOOL  TRUE :成功; FALSE :失败
******************************************************************************/
CLIENT_NET_API BOOL  CALL_METHOD CLIENT_DetachTransmitInfo(LLONG lAttachHandle, const NET_IN_DETACH_TRANSMIT_INFO* pInParam, NET_OUT_DETACH_TRANSMIT_INFO* pOutParam, int nWaitTime);


/******************************************************************************
功能描述	:	 设备特殊控制接口
参数定义	:	
    lLoginID:                       登录接口返回的句柄
    EM_DEV_SPECIAL_CTRL_TYPE:       特殊控制类型
    pInParam:                       设备特殊控制接口输入参数
    pOutParam                       设备特殊控制接口输出参数
    nWaittime                       接口超时时间

返 回 值	：		BOOL  TRUE :成功; FALSE :失败
******************************************************************************/
CLIENT_NET_API  BOOL CALL_METHOD CLIENT_DevSpecialCtrl(LLONG lLoginID, EM_DEV_SPECIAL_CTRL_TYPE emType, void* pInParam, void* pOutParam, int nWaitTime = 3000);


/******************************************************************************
功能描述	:	 获取设备网卡信息接口
参数定义	:	
    lLoginID:                       登录接口返回的句柄
    pstOutParam                     获取设备网卡信息接口的输出参数
    nWaittime                       接口超时时间

返 回 值	：		BOOL  TRUE :成功; FALSE :失败
******************************************************************************/
CLIENT_NET_API  BOOL CALL_METHOD CLIENT_QueryEtherNetInfo(LLONG lLoginID, NET_DHDEV_ETHERNET_INFO* pstuOutParam, int nWaitTime = 3000);


/**************************************************************************************
*   Funcname: CLIENT_StartAsynRealPlay
*   Purpose:开启异步实时监视接口
*   InputParam:    LLONG                    :lLoginID    // 登陆句柄
*   InputParam:    int                      :nChannelID  // 通道号
*   InputParam:    HWND                     :hWnd        // 窗口句柄
*   InputParam:    fAsynPlayHandleCallBack  :cbPlayHandle// 异步实时监视播放句柄回调
*   InputParam:    DH_RealPlayType          :rType       // 主码流类型
*   InputParam:    fRealDataCallBackEx      :cbRealData  // 实时监视数据回调函数
*   InputParam:    fRealPlayDisConnect      :cbDisconnect// 视频监视断开回调函数
*   InputParam:    LDWORD                   :dwUser      // 用户
*   InputParam:    DWORD                    :dwWaitTime  // 等待时间
*   Return:BOOL:FALSE,wrong;TRUE :right
*   Created:%2015%:%12%:%23%  
*   Revision Record:date:author:modify sth
**************************************************************************************/
CLIENT_NET_API BOOL CALL_METHOD CLIENT_StartAsynRealPlay(LLONG lLoginID, int nChannelID, HWND hWnd, fAsynPlayHandleCallBack cbPlayHandle, DH_RealPlayType rType, fRealDataCallBackEx cbRealData = NULL, fRealPlayDisConnect cbDisconnect = NULL, LDWORD dwUser = 0, DWORD dwWaitTime = 10000);


//////上海BUS//////

// 串口数据交互接口,异步获取数据
CLIENT_NET_API LLONG CALL_METHOD CLIENT_ExChangeData(LLONG lLoginId, NET_IN_EXCHANGEDATA* pInParam, NET_OUT_EXCHANGEDATA* pOutParam, int nWaittime = 5000);

// 监听CAN总线数据
CLIENT_NET_API LLONG CALL_METHOD CLIENT_AttachCAN(LLONG lLoginID, const NET_IN_ATTACH_CAN* pstInParam, NET_OUT_ATTACH_CAN* pstOutParam, int nWaitTime = 3000);

// 取消监听CAN总线数据，lAttachHandle是CLIENT_AttachCAN返回值
CLIENT_NET_API BOOL CALL_METHOD CLIENT_DetachCAN(LLONG lAttachHandle);

// 发送CAN总线数据
CLIENT_NET_API BOOL CALL_METHOD CLIENT_SendCAN(LLONG lLoginID, const NET_IN_SEND_CAN* pstInParam, NET_OUT_SEND_CAN* pstOutParam, int nWaitTime = 3000);

// 监听透明串口数据
CLIENT_NET_API LLONG CALL_METHOD CLIENT_AttachDevComm(LLONG lLoginID, const NET_IN_ATTACH_DEVCOMM* pstInParam, NET_OUT_ATTACH_DEVCOMM* pstOutParam, int nWaitTime = 3000);

// 取消监听透明串口数据，lAttachHandle是CLIENT_AttachDevComm返回值
CLIENT_NET_API BOOL CALL_METHOD CLIENT_DetachDevComm(LLONG lAttachHandle);

// 上海巴士设备控制接口，包括控制PAD关机和重启等
CLIENT_NET_API BOOL CALL_METHOD CLIENT_ControlSpecialDevice(LLONG lLoginID, NET_SPECIAL_CTRL_TYPE emType, void* pInBuf, void* pOutBuf = NULL, int nWaitTime = NET_INTERFACE_DEFAULT_TIMEOUT);

//获取HCDZ采集信息
CLIENT_NET_API BOOL  CALL_METHOD CLIENT_GetHCDZInfo(LLONG lLoginID, const NET_IN_HCDZ_LIST_INFO* pInParam, NET_OUT_HCDZ_LIST_INFO* pOutParam, int nWaitTime = 3000);

//获取HCDZ能力集
CLIENT_NET_API BOOL  CALL_METHOD CLIENT_GetHCDZCaps(LLONG lLoginID, const NET_IN_HCDZ_CAPS* pInParam, NET_OUT_HCDZ_CAPS* pOutParam, int nWaitTime = 3000);


// 设置云台持续性控制命令发送间隔，该设置对当前所有登录的云台设备都生效（单位ms，间隔时间需大于100ms，否则不生效）
CLIENT_NET_API void CALL_METHOD CLIENT_PTZCmdSendIntervalTime(DWORD dwIntervalTime);

/**********************************************************************************
功能描述:获取HADT(山东金鲁班宏安电梯)运行状态
参数定义:
    lLoginID:登录接口返回的句柄
    pInBuf  :输入参数,需初始化dwSize
    pOutBuf :输出参数,需初始化dwSize
    nWaitTime :接口超时时间
返 回 值:	BOOL  TRUE :成功; FALSE :失败
**********************************************************************************/
CLIENT_NET_API BOOL CALL_METHOD CLIENT_GetHADTStatus(LLONG lLoginID, const NET_IN_HADT_STATUS* pInBuf, NET_OUT_HADT_STATUS* pOutBuf,int nWaitTime = 3000);

// 获取配置信息(szOutBuffer内存由用户申请释放, 具体见枚举类型说明)
CLIENT_NET_API BOOL CALL_METHOD CLIENT_GetConfig(LLONG lLoginID, NET_EM_CFG_OPERATE_TYPE emCfgOpType, int nChannelID,
                                                         void* szOutBuffer, DWORD dwOutBufferSize, int waittime=NET_INTERFACE_DEFAULT_TIMEOUT, void *reserve = NULL);

// 设置配置信息(szInBuffer内存由用户申请释放, 具体见枚举类型说明)
CLIENT_NET_API BOOL CALL_METHOD CLIENT_SetConfig(LLONG lLoginID, NET_EM_CFG_OPERATE_TYPE emCfgOpType, int nChannelID,
                                                         void* szInBuffer, DWORD dwInBufferSize, int waittime=NET_INTERFACE_DEFAULT_TIMEOUT, int *restart = NULL, void *reserve = NULL);

#ifdef __cplusplus
}
#endif
#endif // DHNETSDKEX_H





