在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++网络编程 → ehome协议32位的windows sdk(源码)

ehome协议32位的windows sdk(源码)

C/C++网络编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:6.55M
  • 下载次数:5
  • 浏览次数:496
  • 发布时间:2021-04-02
  • 实例类别:C/C++网络编程
  • 发 布 人:wt_dawson
  • 文件格式:.rar
  • 所需积分:2
 相关标签: windows window sdk 32位 协议

实例介绍

【实例简介】

EHOME协议是设备和服务器通信的一种推模式协议,EHOME SDK是基于该协议开发的API接口,数据结构和接口函数简洁清晰,更具有易用性。适用于支持EHOME协议的网络摄像机、网络球机、DVR、NVR、车载DVR、车载取证系统、单兵、报警主机等设备。

EHOME SDK包含3个组成模块:

A:CMS注册请求模块,设备(PU)和注册服务器(CMS)之间网络交互接口,包括设备注册、预览请求、录像/图片查找、录像回放请求、参数配置、语音对讲等。

B:预览回放取流模块,设备(PU)和流媒体服务器(VTDU)之间的网络交互接口,包括实时预览、远程回放等。CMS发送预览或者回放请求给设备,告知设备流媒体服务器地址,设备将数据推送给该服务器,流媒体服务器端通过该模块的接口启动监听,接收实时流数据或者录像数据。

C:报警监听模块,设备(PU)和报警管理服务器(AMS)之间的网络交互接口。CMS监听到设备注册,响应时告知设备报警服务器地址信息,设备将报警信息推送给该服务器,报警服务器端通过该模块接口启动监听,接收报警信息,包括移动侦测、视频信号丢失、遮挡报警、行为分析报警、客流量、热度图、人脸抓拍、GPS信息等


【实例截图】

from clipboard

from clipboard

【核心代码】

#ifndef _HC_EHOME_CMS_H_
#define _HC_EHOME_CMS_H_

#include "HCEHomePublic.h"

//初始化,反初始化
NET_DVR_API BOOL  CALLBACK NET_ECMS_Init();
NET_DVR_API BOOL  CALLBACK NET_ECMS_Fini();

//获取错误码
NET_DVR_API DWORD CALLBACK NET_ECMS_GetLastError();

//获取版本号
NET_DVR_API DWORD CALLBACK NET_ECMS_GetBuildVersion();

//开启关闭监听
typedef enum tagNET_EHOME_REGISTER_TYPE{
    ENUM_UNKNOWN = -1,   
    ENUM_DEV_ON = 0,             //设备上线回调
    ENUM_DEV_OFF,                //设备下线回调
    ENUM_DEV_ADDRESS_CHANGED     //设备地址发生变化
}NET_EHOME_REGISTER_TYPE;

typedef BOOL (CALLBACK * DEVICE_REGISTER_CB)(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, 
                                                 void *pInBuffer, DWORD dwInLen, void *pUser);

typedef struct tagNET_EHOME_CMS_LISTEN_PARAM
{
    NET_EHOME_IPADDRESS struAddress;  //本地监听信息,IP为0.0.0.0的情况下,默认为本地地址,多个网卡的情况下,默认为从操作系统获取到的第一个
    DEVICE_REGISTER_CB  fnCB; //报警信息回调函数
    void * pUserData;   //用户数据
    BYTE  byRes[32]; 
}NET_EHOME_CMS_LISTEN_PARAM, *LPNET_EHOME_CMS_LISTEN_PARAM;

//开启关闭监听
NET_DVR_API LONG CALLBACK NET_ECMS_StartListen(LPNET_EHOME_CMS_LISTEN_PARAM lpCMSListenPara);
NET_DVR_API BOOL CALLBACK NET_ECMS_StopListen(LONG iHandle);
//注销设备
NET_DVR_API BOOL CALLBACK NET_ECMS_ForceLogout(LONG lUserID);
NET_DVR_API BOOL CALLBACK NET_ECMS_SetLogToFile(DWORD iLogLevel, char *strLogDir, BOOL bAutoDel);

#define FIRMWARE_VER_LEN 24
#define CODE_LEN   8
typedef struct tagNET_EHOME_DEV_REG_INFO
{
    DWORD  dwSize; 
    DWORD  dwNetUnitType;            //根据EHomeSDK协议预留,目前没有意义
    BYTE   byDeviceID[MAX_DEVICE_ID_LEN]; //设备ID
    BYTE   byFirmwareVersion[24];    //固件版本
    NET_EHOME_IPADDRESS struDevAdd;         //设备注册上来是,设备的本地地址
    DWORD  dwDevType;                  //设备类型
    DWORD  dwManufacture;              //设备厂家代码
    BYTE   byPassWord[32];             //设备登陆CMS的密码,由用户自行根据需求进行验证
    BYTE   sDeviceSerial[NET_EHOME_SERIAL_LEN/*12*/];    //设备序列号,数字序列号
    BYTE   byRes[52];
}NET_EHOME_DEV_REG_INFO, *LPNET_EHOME_DEV_REG_INFO;

typedef struct tagNET_EHOME_BLACKLIST_SEVER
{
    NET_EHOME_IPADDRESS struAdd;          //服务器地址
    BYTE    byServerName[NAME_LEN/*32*/];       //服务器名称
    BYTE    byUserName[NAME_LEN/*32*/];             //用户名
    BYTE    byPassWord[NAME_LEN/*32*/];             //密码
    BYTE   byRes[64];
}NET_EHOME_BLACKLIST_SEVER, *LPNET_EHOME_BLACKLIST_SEVER;

typedef struct tagNET_EHOME_SERVER_INFO
{
    DWORD                  dwSize;
    DWORD                  dwKeepAliveSec;            //心跳间隔(单位:秒,0:默认为15S)
    DWORD                  dwTimeOutCount;         //心跳超时次数(0:默认为6)
    NET_EHOME_IPADDRESS         struTCPAlarmSever;      //报警服务器地址(TCP协议)
    NET_EHOME_IPADDRESS         struUDPAlarmSever;        //报警服务器地址(UDP协议)
    DWORD                  dwAlarmServerType;        //报警服务器类型0-只支持UDP协议上报,1-支持UDP、TCP两种协议上报
    NET_EHOME_IPADDRESS         struNTPSever;            //NTP服务器地址
    DWORD                  dwNTPInterval;            //NTP校时间隔(单位:秒)
    NET_EHOME_IPADDRESS         struPictureSever;       //图片服务器地址
    DWORD                  dwPicServerType;        //图片服务器类型图片服务器类型,1-VRB图片服务器,0-Tomcat图片服务
    NET_EHOME_BLACKLIST_SEVER   struBlackListServer;    //黑名单服务器
    BYTE                   byRes[128];
}NET_EHOME_SERVER_INFO, *LPNET_EHOME_SERVER_INFO;


//-----------------------------------------------------------------------------------------------------------
//语音对讲

typedef void(CALLBACK *fVoiceDataCallBack)(LONG iVoiceHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwEncodeType, BYTE byAudioFlag, void* pUser);

typedef struct tagNET_EHOME_VOICETALK_PARA
{
    BOOL           bNeedCBNoEncData; //需要回调的语音类型:0-编码后语音,1-编码前语音(语音转发时不支持)
    fVoiceDataCallBack  cbVoiceDataCallBack; //用于回调音频数据的回调函数
    DWORD          dwEncodeType;    //SDK赋值,SDK的语音编码类型,0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM
    void*          pUser;    //用户参数
    BYTE           byVoiceTalk;    //0-语音对讲,1-语音转发
    BYTE           byDevAudioEnc;  //输出参数,设备的音频编码方式 0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM
    BYTE           byRes[62];//Reserved, set as 0. 0
} NET_EHOME_VOICETALK_PARA,*LPNET_EHOME_VOICETALK_PARA;

typedef struct tagNET_EHOME_VOICE_TALK_IN
{
    DWORD dwVoiceChan;                   //通道号
    NET_EHOME_IPADDRESS struStreamSever; //流媒体地址
    BYTE  byRes[128];
}NET_EHOME_VOICE_TALK_IN, *LPNET_EHOME_VOICE_TALK_IN;

typedef struct tagNET_EHOME_VOICE_TALK_OUT
{
    LONG  lSessionID;
    BYTE  byRes[128];
}NET_EHOME_VOICE_TALK_OUT, *LPNET_EHOME_VOICE_TALK_OUT;

typedef struct tagNET_EHOME_PUSHVOICE_IN
{
    DWORD dwSize;
    LONG  lSessionID; 
    BYTE  byRes[128];
}NET_EHOME_PUSHVOICE_IN, *LPNET_EHOME_PUSHVOICE_IN;

typedef struct tagNET_EHOME_PUSHVOICE_OUT
{
    DWORD dwSize;
    BYTE  byRes[128];
}NET_EHOME_PUSHVOICE_OUT, *LPNET_EHOME_PUSHVOICE_OUT;


NET_DVR_API LONG CALLBACK  NET_ECMS_StartVoiceTalk(LONG lUserID, DWORD dwVoiceChan, 
                                                   const NET_EHOME_VOICETALK_PARA    *pVoiceTalkPara);

NET_DVR_API BOOL CALLBACK   NET_ECMS_StartVoiceWithStmServer(LONG lUserID, NET_EHOME_VOICE_TALK_IN *lpVoiceTalkIn, NET_EHOME_VOICE_TALK_OUT *lpVoiceTalkOut);
NET_DVR_API BOOL CALLBACK   NET_ECMS_StartPushVoiceStream(LONG lUserID, LPNET_EHOME_PUSHVOICE_IN lpPushParamIn, LPNET_EHOME_PUSHVOICE_OUT lpPushParamOut);
NET_DVR_API BOOL CALLBACK   NET_ECMS_StopVoiceTalk(LONG iVoiceHandle);
NET_DVR_API BOOL CALLBACK   NET_ECMS_StopVoiceTalkWithStmServer(LONG lUserID, LONG lSessionID);
NET_DVR_API BOOL CALLBACK   NET_ECMS_SendVoiceTransData(LONG iVoiceHandle, const char *pSendBuf, DWORD dwBufSize);

bool NET_EHOME_ClientAudioStart(fVoiceDataCallBack cbVoiceDataCallBack, void *pUser);
//---------------------------------------------------------------------------------------------------------

typedef    struct    tagNET_EHOME_CONFIG
{
    void*        pCondBuf;    //[in],条件数据指针,如表示通道号等
    DWORD        dwCondSize; //[in],pCondBuf指向的数据大小
    void*        pInBuf;        //[in],设置时需要用到,指向结构体的指针
    DWORD        dwInSize;    //[in], pInBuf指向的数据大小
    void*        pOutBuf;        //[out],获取时需要用到,指向结构体的指针,内存由上层分配
    DWORD        dwOutSize;    //[in],获取时需要用到,表示pOutBuf指向的内存大小, 
    BYTE         byRes[40];    //保留
}NET_EHOME_CONFIG, *LPNET_EHOME_CONFIG;

typedef struct tagNET_EHOME_XML_CFG 
{
    void*      pCmdBuf;    //字符串格式命令
    DWORD      dwCmdLen;   //pCmdBuf长度
    void*      pInBuf;     //输入数据
    DWORD      dwInSize;   //输入数据长度
    void*      pOutBuf;    //输出缓冲
    DWORD      dwOutSize;  //输出缓冲区长度
    DWORD      dwSendTimeOut;  //数据发送超时时间,单位ms,默认5s
    DWORD      dwRecvTimeOut;  //数据接收超时时间,单位ms,默认5s
    void*      pStatusBuf;     //返回的状态参数(XML格式),如果不需要,可以置NULL
    DWORD      dwStatusSize;   //状态缓冲区大小(内存大小)
    BYTE       byRes[24];
}NET_EHOME_XML_CFG, *LPNET_EHOME_XML_CFG;

#define    MAX_SERIALNO_LEN        128    //序列号最大长度
#define    MAX_PHOMENUM_LEN        32    //手机号码最大长度
#define    MAX_DEVICE_NAME_LEN     32//设备名称长度

typedef struct tagNET_DVR_DVR_TYPE_NAME
{
    DWORD dwDVRType;
    char byDevName[24];  
}NET_DVR_TYPE_NAME;

static const NET_DVR_TYPE_NAME DVRTypeName[] = 
{
    {0,"UNKNOWN TYPE"},      /*对尚未定义的dvr类型返回NETRET_DVR*/
    {1,"DVR"},                    /*DVR*/    
    {2,"ATMDVR"},                /*atm dvr*/
    {3,"DVS"},                /*DVS*/
    {4,"DEC"},                /* 6001D */
    {5,"ENC_DEC"},                /* 6001F */
    {6,"DVR_HC"},                /*8000HC*/
    {7,"DVR_HT"},                /*8000HT*/
    {8,"DVR_HF"},                /*8000HF*/
    {9,"DVR_HS"},                /* 8000HS DVR(no audio) */
    {10,"DVR_HTS"},              /* 8016HTS DVR(no audio) */
    {11,"DVR_HB"},              /* HB DVR(SATA HD) */
    {12,"DVR_HCS"},              /* 8000HCS DVR */
    {13,"DVS_A"},              /* 带ATA硬盘的DVS */
    {14,"DVR_HC_S"},              /* 8000HC-S */
    {15,"DVR_HT_S"},              /* 8000HT-S */
    {16,"DVR_HF_S"},              /* 8000HF-S */
    {17,"DVR_HS_S"},              /* 8000HS-S */
    {18,"ATMDVR_S"},              /* ATM-S */
    {19,"DVR_7000H"},                /*7000H系列*/
    {20,"DEC_MAT"},              /*多路解码器*/
    {21,"DVR_MOBILE"},                /* mobile DVR */                 
    {22,"DVR_HD_S"},              /* 8000HD-S */
    {23,"DVR_HD_SL"},                /* 8000HD-SL */
    {24,"DVR_HC_SL"},                /* 8000HC-SL */
    {25,"DVR_HS_ST"},                /* 8000HS_ST */
    {26,"DVS_HW"},              /* 6000HW */
    {27,"DS630X_D"},             /* 多路解码器 */
    {28,"DS640X_HD"},                /*640X高清解码器*/
    {29,"DS610X_D"},              /*610X解码器*/
    {30,"IPCAM"},                /*IP 摄像机*/
    {31,"MEGA_IPCAM"},                /*高清IP摄像机 852F&852MF*/
    {32,"IPCAM_862MF"},                /*862MF可以接入9000设备*/
    {35,"ITCCAM"},                /*智能高清网络摄像机*/
    {36,"IVS_IPCAM"},          /*智能分析高清网络摄像机*/
    {38,"ZOOMCAM"},            /*一体机*/
    {40,"IPDOME"},              /*IP 标清球机*/
    {41,"IPDOME_MEGA200"},              /*IP 200万高清球机*/
    {42,"IPDOME_MEGA130"},              /*IP 130万高清球机*/
    {43,"IPDOME_AI"},              /*IP 高清智能快球*/ 
    {44,"TII_IPCAM"},          /*红外热成像摄像机*/
    {50,"IPMOD"},                /*IP 模块*/
    {59,"DS64XXHD_T"},                //64-T高清解码器
    {60,"IDS6501_HF_P"},    // 6501 车牌
    {61,"IDS6101_HF_A"},              //智能ATM
    {62,"IDS6002_HF_B"},          //双机跟踪:DS6002-HF/B
    {63,"IDS6101_HF_B"},          //行为分析:DS6101-HF/B
    {64,"IDS52XX"},          //智能分析仪IVMS
    {65,"IDS90XX"},                // 9000智能
    {67,"IDS8104_AHL_S_H"},              // 海康人脸识别 ATM
    {68,"IDS91XX"},                // 9100智能
    {69,"IIP_CAM_B"},  //智能行为IP摄像机
    {70,"IIP_CAM_F"},  //智能人脸IP摄像机
    {71,"DS71XX_H"},                /* DS71XXH_S */
    {72,"DS72XX_H_S"},                /* DS72XXH_S */
    {73,"DS73XX_H_S"},                /* DS73XXH_S */
    {74,"DS72XX_HF_S"},              //DS72XX_HF_S
    {75,"DS73XX_HFI_S"},              //DS73XX_HFI_S
    {75,"DS73XX_HF_S"},              //DS73XX_HF_S
    {76,"DS76XX_H_S"},                /* DVR,e.g. DS7604_HI_S */
    {77,"DS76XX_N_S"},                /* NVR,e.g. DS7604_NI_S */
    {81,"DS81XX_HS_S"},                /* DS81XX_HS_S */
    {82,"DS81XX_HL_S"},                /* DS81XX_HL_S */
    {83,"DS81XX_HC_S"},                /* DS81XX_HC_S */
    {84,"DS81XX_HD_S"},                /* DS81XX_HD_S */
    {85,"DS81XX_HE_S"},                /* DS81XX_HE_S */
    {86,"DS81XX_HF_S"},                /* DS81XX_HF_S */
    {87,"DS81XX_AH_S"},                /* DS81XX_AH_S */
    {88,"DS81XX_AHF_S"},                /* DS81XX_AHF_S */
    {90,"DS90XX_HF_S"},              /*DS90XX_HF_S*/
    {91,"DS91XX_HF_S"},              /*DS91XX_HF_S*/
    {92,"DS91XX_HD_S"},              /*91XXHD-S(MD)*/
    {93,"IDS90XX_A"},                // 9000智能 ATM
    {94,"IDS91XX_A"},                // 9100智能 ATM
    {95,"DS95XX_N_S"},              /*DS95XX_N_S NVR 不带任何输出*/
    {96,"DS96XX_N_SH"},              /*DS96XX_N_SH NVR*/
    {97,"DS90XX_HF_SH"},              /*DS90XX_HF_SH */   
    {98,"DS91XX_HF_SH"},              /*DS91XX_HF_SH */
    {100,"DS_B10_XY"},             /*视频综合平台设备型号(X:编码板片数,Y:解码板片数)*/
    {101,"DS_6504HF_B10"},             /*视频综合平台内部编码器*/
    {102,"DS_6504D_B10"},             /*视频综合平台内部解码器*/
    {103,"DS_1832_B10"},             /*视频综合平台内部码分器*/
    {104,"DS_6401HFH_B10"},             /*视频综合平台内部光纤板*/
    {105,"DS_65XXHC"},                //65XXHC DVS
    {106,"DS_65XXHC_S"},                //65XXHC-SATA DVS
    {107,"DS_65XXHF"},                //65XXHF DVS
    {108,"DS_65XXHF_S"},                //65XXHF-SATA DVS
    {109,"DS_6500HF_B"},             //65 rack DVS
    {110,"IVMS_6200_C"},            // iVMS-6200(/C)  
    {111,"IVMS_6200_B"},             // iVMS-6200(/B)
    {112,"DS_72XXHV_ST"},                //72XXHV_ST15 DVR
    {113,"DS_72XXHV_ST"},                //72XXHV_ST20 DVR,这两个设备显示一个名字
    {114,"IVMS_6200_T"},             // IVMS-6200(/T)
    {115,"IVMS_6200_BP"},             // IVMS-6200(/BP)
    {116,"DS_81XXHC_ST"},                //DS_81XXHC_ST
    {117,"DS_81XXHS_ST"},                //DS_81XXHS_ST
    {118,"DS_81XXAH_ST"},                //DS_81XXAH_ST
    {119,"DS_81XXAHF_ST"},                //DS_81XXAHF_ST
    {120,"DS_66XXDVS"},                //66XX DVS
    {121,"DS_1964_B10"},             /*视频综合平台内部报警器*/
    {122,"DS_B10N04_IN"},             /*视频综合平台内部级联输入*/
    {123,"DS_B10N04_OUT"},             /*视频综合平台内部级联输出*/
    {124,"DS_B10N04_INTEL"},             /*视频综合平台内部智能*/
    {125,"DS_6408HFH_B10E_RM"},             //V6高清
    {126,"DS_B10N64F1_RTM"},             //V6级联不带DSP
    {127,"DS_B10N64F1D_RTM"},             //V6级联带DSP
    {128,"DS_B10_SDS"},             //视频综合平台子域控制器
    {129,"DS_B10_DS"},             //视频综合平台域控制器
    {130,"DS_6401HFH_B10V"},             //VGA高清编码器
    {131,"DS_6504D_B10B"},             /*视频综合平台内部标清解码器*/
    {132,"DS_6504D_B10H"},             /*视频综合平台内部高清解码器*/
    {133,"DS_6504D_B10V"},             /*视频综合平台内部VGA解码器*/
    {134,"DS_6408HFH_B10S"},             //视频综合平台SDI子板 
    {135,"DS_18XX_N"},             /* 矩阵接入网关*/ 
    //注:121~140预留给视频综合平台系列产品使用,141~160留给码分设备和报警设备类用
    {141,"DS_18XX_PTZ"},                /*网络码分类产品*/
    {142,"DS_19AXX"},                /*通用报警主机类产品*/
    {143,"DS_19BXX"},                /*家用报警主机*/
    {144,"DS_19CXX"},                /*自助银行报警主机*/
    {145,"DS_19DXX"},                /*动环监控报警主机*/    
    {146,"DS_19XX"},             /*1900系列报警主机*/ 
    {147,"DS_19SXX"},                /*视频报警主机*/
    {148, "DS_1HXX"},            /*CS类产品*/ //防护舱
    /**********************设备类型 end***********************/
    //2011-11-03 161~170分配给大屏设备使用
    {161,"DS_C10H"},           /*多屏控制器*/
    {162,"DS_C10N_BI"},            //BNC处理器
    {163,"DS_C10N_DI"},            //rbg处理器
    {164,"DS_C10N_SI"},            //码流处理器
    {165,"DS_C10N_DO"},            //显示处理器
    {166,"DS_C10N_SERVER"},        //分布式服务器
    // 171- 180  划给智能使用
    {171,"IDS_8104_AHFL_S_H"},             // 8104ATM 
    {172,"IDS_65XX_HF_A"},             // 65 ATM
    {173,"IDS90XX_HF_RH"},             // 9000 智能RH
    {174,"IDS91XX_HF_RH"},             // 9100 智能RH设备
    {175,"IDS_65XX_HF_B"},             // 65 行为分析
    {176,"IDS_65XX_HF_P"},             // 65 车牌识别
    {177,"IVMS_6200_F"},     // IVMS-6200(/F)
    {178,"IVMS_6200_A"},             //iVMS-6200(/A)
    {179,"IVMS_6200_F_S"},   //iVMS-6200(/F_S)
    {181,"DS90XX_HF_RH"},             // 9000 RH
    {182,"DS91XX_HF_RH"},             // 9100 RH设备
    {183,"DS78XX_S"},             // 78系列设备
    {185,"DS81XXHW_S"},                // 81 Resolution 960 
    {186,"DS81XXHW_ST"},             // DS81XXHW_ST
    {187,"DS91XXHW_ST"},             // DS91XXHW_ST
    {188,"DS91XX_ST"},             // DS91XX_ST
    {189,"DS81XX_ST"},             // DS81XX_ST
    {190,"DS81XXH_ST"},             // DS81XXHDI_ST,DS81XXHE_ST ky2012
    {191,"DS73XXH_ST"},             // DS73XXHI_ST ky2012
    {192,"DS81XX_SH"},             // 审讯81SH,81SHF
    {193,"DS81XX_SN"},             // 审讯81SNL
    {194,"DS96XXN_ST"},             //NVR:DS96xxN_ST
    {195,"DS86XXN_ST"},             //NVR:DS86xxN_ST
    {196,"DS80XXHF_ST"},             //DVR:DS80xxHF_ST
    {197,"DS90XXHF_ST"},             //DVR:DS90xxHF_ST
    {198,"DS76XXN_ST"},             //NVR:DS76xxN_ST
    {199,"DS_9664N_RX"},         //嵌入式NVR(64路IP通道,无模拟通道),最后一个X:T/H    
    {200,"ENCODER_SERVER"},            // 编码卡服务器
    {201,"DECODER_SERVER"},         // 解码卡服务器
    {202,"PCNVR_SERVER"},         // PCNVR存储服务器
    {203,"CVR_SERVER"},         // 邦诺CVR,他给自己定的类型为DVR_S-1
    {204,"DS_91XXHFH_ST"},         // 91系列HD-SDI高清DVR
    {205,"DS_66XXHFH"},         // 66高清编码器    
    {210,"TRAFFIC_TS_SERVER"},         //终端服务器
    {211,"TRAFFIC_VAR"},         //视频分析记录仪
    {212,"IPCALL"},              //IP可视对讲分机

    //2012-03-21 类型值255以后的设备不要添加至此数组中,该数组的作用是为了使扩展协议能获取类型值255以下设备的名称
    //{2001, "DS90XXHW_ST"}        // DS90XXHW_ST混合DVR
};

typedef struct tagNET_EHOME_DEVICE_INFO
{
    DWORD        dwSize;                //结构体大小
    DWORD        dwChannelNumber;     //模拟视频通道个数
    DWORD        dwChannelAmount;    //总视频通道数(模拟 IP)
    DWORD        dwDevType;            //设备类型,1-DVR,3-DVS,30-IPC,40-IPDOME,其他值参考海康NetSdk设备类型号定义值
    DWORD        dwDiskNumber;        //设备当前硬盘数
    BYTE        sSerialNumber[MAX_SERIALNO_LEN];        //设备序列号
    DWORD        dwAlarmInPortNum;    //模拟通道报警输入个数
    DWORD        dwAlarmInAmount;    //设备总报警输入个数
    DWORD        dwAlarmOutPortNum;    //模拟通道报警输出个数
    DWORD        dwAlarmOutAmount;    //设备总报警输出个数
    DWORD        dwStartChannel;        //视频起始通道号
    DWORD        dwAudioChanNum;    //语音对讲通道个数
    DWORD        dwMaxDigitChannelNum;    //设备支持的最大数字通道路数
    DWORD        dwAudioEncType;        //语音对讲音频格式,0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM
    BYTE        sSIMCardSN[MAX_SERIALNO_LEN];    //车载设备扩展:SIM卡序列号
    BYTE        sSIMCardPhoneNum[MAX_PHOMENUM_LEN];    //车载扩展:SIM卡手机号码
    DWORD        dwSupportZeroChan;    // SupportZeroChan:支持零通道的个数:0-不支持,1-支持1路,2-支持2路,以此类推
    DWORD        dwStartZeroChan;        //零通道起始编号,默认10000
    DWORD        dwSmartType;            //智能类型,0-smart,1-专业智能;默认0-smart
    BYTE        byRes[160];            //保留
}NET_EHOME_DEVICE_INFO,*LPNET_EHOME_DEVICE_INFO;

#define    MAX_VERSION_LEN            32  //版本描述长度
typedef struct tagNET_EHOME_VERSION_INFO
{
    DWORD        dwSize;                //结构体大小
    BYTE        sSoftwareVersion[MAX_VERSION_LEN];    //主控版本
    BYTE        sDSPSoftwareVersion[MAX_VERSION_LEN];//编码版本
    BYTE        sPanelVersion[MAX_VERSION_LEN];    //面板版本
    BYTE        sHardwareVersion[MAX_VERSION_LEN];    //硬件版本
    BYTE        byRes[124];
}NET_EHOME_VERSION_INFO,*LPNET_EHOME_VERSION_INFO;

typedef struct tagNET_EHOME_DEVICE_CFG
{
    DWORD        dwSize;                //结构体大小
    BYTE        sServerName[MAX_DEVICE_NAME_LEN];    //设备名称
    DWORD        dwServerID;            //设备号(遥控器编号:0~255)
    DWORD        dwRecycleRecord;        //是否循环录像,0代表不循环,1代表循环
    DWORD        dwServerType;        //设备类型,同DevType,由于公司设备型号有几百个,本协议中只使用通用型号:1-DVR,3-DVS,30-IPC,40-IPDOME
    DWORD        dwChannelNum;        //通道个数,包括模拟 IP通道(只读)
    DWORD        dwHardDiskNum;        //硬盘个数(只读)
    DWORD        dwAlarmInNum;        //报警输入个数(模拟通道)(只读)
    DWORD        dwAlarmOutNum;        //报警输出个数(模拟通道)(只读)
    DWORD        dwRS232Num;        //232串口个数(只读)
    DWORD        dwRS485Num;        //485串口个数(只读)
    DWORD        dwNetworkPortNum;    //网络口个数(只读)
    DWORD        dwAuxoutNum;        //辅口个数(只读)
    DWORD        dwAudioNum;        //语音口个数(只读)
    BYTE        sSerialNumber[MAX_SERIALNO_LEN];    //设备序列号(只读)
    DWORD        dwMajorScale;        //主口缩放:0代表不缩放;1代表缩放
    DWORD        dwMinorScale;        //辅口缩放:0代表不缩放;1代表缩放
    BYTE        byRes[292];            //保留
}NET_EHOME_DEVICE_CFG,*LPNET_EHOME_DEVICE_CFG;

#define    NET_EHOME_GET_DEVICE_INFO        1    //获取设备信息
#define    NET_EHOME_GET_VERSION_INFO        2    //获取版本信息
#define    NET_EHOME_GET_DEVICE_CFG        3    //获取设备基本参数
#define    NET_EHOME_SET_DEVICE_CFG        4    //设置设备基本参数

#define NET_EHOME_GET_GPS_CFG 20 //获取GPS参数
#define NET_EHOME_SET_GPS_CFG 21 //设置GPS参数
#define NET_EHOME_GET_PIC_CFG 22 //获取OSD显示参数
#define NET_EHOME_SET_PIC_CFG 23 //设置OSD显示参数


#define MAX_EHOME_PROTOCOL_LEN  1500

typedef struct tagNET_EHOME_REMOTE_CTRL_PARAM
{
    DWORD dwSize;
    void *lpCondBuffer;        //条件参数缓冲区
    DWORD  dwCondBufferSize;    //条件参数缓冲区长度
    void *lpInbuffer;          //控制参数缓冲区
    DWORD  dwInBufferSize;      //控制参数缓冲区长度
    BYTE   byRes[32];
}NET_EHOME_REMOTE_CTRL_PARAM, *LPNET_EHOME_REMOTE_CTRL_PARAM;

//GPS参数
typedef struct tagNET_EHOME_GPS_CFG
{
    DWORD        dwSize;
    DWORD        dwTransInterval;    //GPS上传时间,单位:秒
    DWORD        dwMaxSpeed;        //超速限速值,单位:厘米/小时
    DWORD        dwMinSpeed;        //低速限速值,单位:厘米/小时
    BYTE            byRes[64];                //保留
}NET_EHOME_GPS_CFG, *LPNET_EHOME_GPS_CFG;

//OSD显示参数
typedef struct tagNET_EHOME_PIC_CFG
{
    DWORD        dwSize;
    BYTE            byChannelName[NAME_LEN];        //通道名称(GB2312编码, V30以后版本使用UTF-8编码),长度不超过31字节
    BOOL            bIsShowChanName;                            //是否显示通道名称:0:不显示;1:显示
    WORD            wChanNameXPos;                            //通道名称显示X坐标,按照704x576来配置
    WORD            wChanNameYPos;                            //通道名称显示Y坐标,按照704x576来配置,坐标值为16的倍数
    BOOL            bIsShowOSD;                                    //是否显示OSD:0:不显示;1:显示
    WORD            wOSDXPos;                                        //OSD显示X坐标
    WORD            wOSDYPos;                                        //OSD显示Y坐标
    BYTE            byOSDType;                                        /**OSD类型 0:XXXX-XX-XX(年月日) 1:XX-XX-XXXX(月日年) 2:XXXX年XX月XX日
                                                                    3:XX月XX日XXXX年 4:XX-XX-XXXX(日月年) 5:XX日XX月XXXX年
                                                                    */
    BYTE            byOSDAtrib;                                    //OSD属性 0:不显示OSD 1:透明,闪烁 2:透明,不闪烁 3:闪烁,不透明 4:不透明,不闪烁
    BYTE            byRes1[2];                                            //保留1
    BOOL            bIsShowWeek;                                    //是否显示星期:0:不显示;1:显示
    BYTE            byRes2[64];                                        //保留2
}NET_EHOME_PIC_CFG, *LPNET_EHOME_PIC_CFG;

NET_DVR_API BOOL CALLBACK NET_ECMS_GetDevConfig(LONG lUserID, DWORD dwCommand, LPNET_EHOME_CONFIG lpConfig, DWORD dwConfigSize);

NET_DVR_API BOOL CALLBACK NET_ECMS_SetDevConfig(LONG lUserID, DWORD dwCommand, LPNET_EHOME_CONFIG lpConfig, DWORD dwConfigSize);

NET_DVR_API BOOL CALLBACK NET_ECMS_XMLConfig(LONG lUserID, LPNET_EHOME_XML_CFG pXmlCfg, DWORD dwConfigSize);

NET_DVR_API BOOL CALLBACK NET_ECMS_RemoteControl(LONG lUserID, DWORD dwCommand, LPNET_EHOME_REMOTE_CTRL_PARAM lpCtrlParam);

//预览请求
typedef struct tagNET_EHOME_PREVIEWINFO_IN
{
    int iChannel;                        //通道号 
    DWORD dwStreamType;                    // 码流类型,0-主码流,1-子码流, 2-第三码流
    DWORD dwLinkMode;                        // 0:TCP方式,1:UDP方式,2: HRUDP方式
    NET_EHOME_IPADDRESS struStreamSever;     //流媒体地址
}NET_EHOME_PREVIEWINFO_IN, *LPNET_EHOME_PREVIEWINFO_IN;

typedef struct tagNET_EHOME_PREVIEWINFO_IN_V11
{
    int iChannel;
    DWORD dwStreamType;
    DWORD dwLinkMode;
    NET_EHOME_IPADDRESS struStreamSever;
    BYTE  byDelayPreview;
    BYTE  byRes[31];
}NET_EHOME_PREVIEWINFO_IN_V11, *LPNET_EHOME_PREVIEWINFO_IN_V11;

typedef struct tagNET_EHOME_PREVIEWINFO_OUT
{
    LONG  lSessionID; 
    BYTE byRes[128];
}NET_EHOME_PREVIEWINFO_OUT, *LPNET_EHOME_PREVIEWINFO_OUT;

typedef struct tagNET_EHOME_PUSHSTREAM_IN
{
    DWORD dwSize;
    LONG  lSessionID; 
    BYTE  byRes[128];
}NET_EHOME_PUSHSTREAM_IN, *LPNET_EHOME_PUSHSTREAM_IN;

typedef struct tagNET_EHOME_PUSHSTREAM_INFO_OUT
{
    DWORD dwSize;
    BYTE  byRes[128];
}NET_EHOME_PUSHSTREAM_OUT, *LPNET_EHOME_PUSHSTREAM_OUT;

NET_DVR_API BOOL CALLBACK NET_ECMS_StartGetRealStream(LONG lUserID, LPNET_EHOME_PREVIEWINFO_IN pPreviewInfoIn, LPNET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut ); //lUserID由SDK分配的用户ID,由设备注册回调时fDeviceRegisterCallBack返回
NET_DVR_API BOOL CALLBACK NET_ECMS_StartGetRealStreamV11(LONG lUserID, LPNET_EHOME_PREVIEWINFO_IN_V11 pPreviewInfoIn, LPNET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut);
NET_DVR_API BOOL CALLBACK NET_ECMS_StopGetRealStream(LONG lUserID, LONG lSessionID);
NET_DVR_API BOOL CALLBACK NET_ECMS_StartPushRealStream(LONG lUserID, LPNET_EHOME_PUSHSTREAM_IN pPushInfoIn, LPNET_EHOME_PUSHSTREAM_OUT pPushInfoOut);

//查询接口
#define MAX_FILE_NAME_LEN  100
#define LEN_32             32

typedef enum tagSEARCH_TYPE
{
    ENUM_SEARCH_TYPE_ERR = -1,
    ENUM_SEARCH_RECORD_FILE = 0,    //查找录像文件
    ENUM_SEARCH_PICTURE_FILE  = 1,  //查找图片文件
    ENUM_SEARCH_FLOW_INFO = 2,      //流量查询
    ENUM_SEARCH_DEV_LOG = 3,        //设备日志查询
    ENUM_SEARCH_ALARM_HOST_LOG = 4, //报警主机日志查询
}SEARCH_TYPE_ENUM;

typedef enum
{
    ENUM_GET_NEXT_STATUS_SUCCESS = 1000,    //成功读取到一条数据,处理完本次数据后需要再次调用FindNext获取下一条数据
    ENUM_GET_NETX_STATUS_NO_FILE,           //没有找到一条数据
    ENUM_GET_NETX_STATUS_NEED_WAIT,         //数据还未就绪,需等待,继续调用FindNext函数
    ENUM_GET_NEXT_STATUS_FINISH,            //数据全部取完
    ENUM_GET_NEXT_STATUS_FAILED,            //出现异常
    ENUM_GET_NEXT_STATUS_NOT_SUPPORT        //设备不支持该操作,不支持的查询类型
}SEARCH_GET_NEXT_STATUS_ENUM;

//时间参数
typedef struct tagNET_EHOME_TIME
{
    WORD    wYear;      //年
    BYTE    byMonth;    //月
    BYTE    byDay;      //日
    BYTE    byHour;     //时
    BYTE    byMinute;   //分
    BYTE    bySecond;   //秒
    BYTE    byRes1;        
    WORD    wMSecond;   //毫秒
    BYTE    byRes2[2];
}NET_EHOME_TIME, *LPNET_EHOME_TIME;

typedef struct tagNET_EHOME_FINDCOND
{
    DWORD               dwSize;
    LONG                iChannel;           //通道号,从1开始
    DWORD               dwMaxFileCountPer;  //单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8
    NET_EHOME_TIME      struStartTime;      //开始时间
    NET_EHOME_TIME      struStopTime;       //结束时间
    SEARCH_TYPE_ENUM    enumSearchType;     //查找类型 0-录像文件查找,对应struRecordFileParam  1-图片文件查找,对应struPicFileParam 2-流量查询,对应struFlowParam
    union
    {
        BYTE            byLen[64];
        struct
        {
            DWORD       dwFileType;         /**文件类型(字节整形数):
                                            0xff-全部类型录像(不包含图片类型) 
                                            0-定时录像
                                            1-移动报警
                                            2-报警触发
                                            3-报警|动测
                                            4-报警&动测
                                            5-命令触发
                                            6-手动录像
                                            7-震动报警
                                            8-环境报警
                                            9-智能报警(或者取证录像)
                                            10(0x0a)-PIR报警
                                            11(0x0b)-无线报警
                                            12(0x0c)-呼救报警
                                            13(0x0d)全部报警
                                            100-全部类型图片
                                            101-车牌识别图片
                                            102-稽查报警图片
                                            103-手动抓拍图片
                                            104-回放抓拍图片
                                            **/

       }struRecordFileParam;
        struct
        {
            DWORD       dwFileType;         /*255(0xff)-全部类型:
                                            0(0x00)-定时抓图
                                            1(0x01)-移动侦测抓图
                                            2(0x02)-报警抓图
                                            3(0x03)-报警|移动侦测抓图
                                            4(0x04)-报警&移动侦测抓图
                                            5(0x05)-命令触发抓图
                                            6(0x06)-手动抓图
                                            7(0x07)-震动报警抓图
                                            8(0x08)-环境报警触发抓图
                                            9(0x09)-智能报警图片
                                            10(0x0a)-PIR报警图片
                                            11(0x0b)-无线报警图片
                                            12(0x0c)-呼救报警图片
                                            13(0x0d)-人脸侦测图片
                                            14(0x0e)-越界侦测图片
                                            15(0x0f)-入侵区域侦测图片
                                            16(0x10)-场景变更侦测图片
                                            17(0x11)-设备本地回放时截图
                                            18(0x12)-智能侦测图片
                                            19(0x13)-进入区域侦测图片
                                            20(0x14)-离开区域侦测图片
                                            21(0x15)-徘徊侦测图片
                                            22(0x16)-人员聚集侦测图片
                                            23(0x17)-快速运动侦测图片
                                            24(0x18)-停车侦测图片
                                            25(0x19)-物品遗留侦测图片
                                            26(0x1a)-物品拿取侦测图片
                                            27(0x1b)-车牌侦测图片
                                            28(0x1c)-客户端上传图片
                                            */
        }struPicFileParam;
        struct
        {
            BYTE        bySearchMode;       //查询模式,1-按year查询,2-按month查询,3-按day查询
        }struFlowParam;
    }unionSearchParam;
BYTE                byStartIndex;       //查询起始位置,兼容老版本,新版本中不建议使用
BYTE                byRes1[1];
DWORD               dwStartIndexEx;     //扩展后的查询起始位置, 增加对记录条数过大的支持
BYTE                byRes[122];
}NET_EHOME_FINDCOND, *LPNET_EHOME_FINDCOND;

//录像文件查找条件
typedef struct tagNET_EHOME_REC_FILE_COND
{
    DWORD           dwChannel;          //通道号,从1开始
    DWORD           dwRecType;          /*0xff-全部类型录像(不包含图片类型)
                                        0-定时录像
                                        1-移动报警
                                        2-报警触发
                                        3-报警|动测
                                        4-报警&动测
                                        5-命令触发
                                        6-手动录像
                                        7-震动报警
                                        8-环境报警
                                        9-智能报警(或者取证录像)
                                        10(0x0a)-PIR报警
                                        11(0x0b)-无线报警
                                        12(0x0c)-呼救报警
                                        13(0x0d)全部报警
                                        100-全部类型图片
                                        101-车牌识别图片
                                        102-稽查报警图片
                                        103-手动抓拍图片
                                        104-回放抓拍图片
                                        */
    NET_EHOME_TIME  struStartTime;      //开始时间
    NET_EHOME_TIME  struStopTime;       //结束时间
    DWORD           dwStartIndex;       //查询起始位置
    DWORD           dwMaxFileCountPer;  //单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8
    BYTE            byRes[64];
}NET_EHOME_REC_FILE_COND, *LPNET_EHOME_REC_FILE_COND;

//图片文件查找条件
typedef struct tagNET_EHOME_PIC_FILE_COND
{
    DWORD           dwChannel;          //通道号,从1开始
    DWORD           dwPicType;          /*255(0xff)-全部类型
                                        0(0x00)-定时抓图
                                        1(0x01)-移动侦测抓图
                                        2(0x02)-报警抓图
                                        3(0x03)-报警|移动侦测抓图
                                        4(0x04)-报警&移动侦测抓图
                                        5(0x05)-命令触发抓图
                                        6(0x06)-手动抓图
                                        7(0x07)-震动报警抓图
                                        8(0x08)-环境报警触发抓图
                                        9(0x09)-智能报警图片
                                        10(0x0a)-PIR报警图片
                                        11(0x0b)-无线报警图片
                                        12(0x0c)-呼救报警图片
                                        13(0x0d)-人脸侦测图片
                                        14(0x0e)-越界侦测图片
                                        15(0x0f)-入侵区域侦测图片
                                        16(0x10)-场景变更侦测图片
                                        17(0x11)-设备本地回放时截图
                                        18(0x12)-智能侦测图片
                                        19(0x13)-进入区域侦测图片
                                        20(0x14)-离开区域侦测图片
                                        21(0x15)-徘徊侦测图片
                                        22(0x16)-人员聚集侦测图片
                                        23(0x17)-快速运动侦测图片
                                        24(0x18)-停车侦测图片
                                        25(0x19)-物品遗留侦测图片
                                        26(0x1a)-物品拿取侦测图片
                                        27(0x1b)-车牌侦测图片
                                        28(0x1c)-客户端上传图片
                                        */
    NET_EHOME_TIME  struStartTime;      //开始时间
    NET_EHOME_TIME  struStopTime;       //结束时间
    DWORD           dwStartIndex;       //查询起始位置
    DWORD           dwMaxFileCountPer;  //单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8
    BYTE            byRes[64];
}NET_EHOME_PIC_FILE_COND, *LPNET_EHOME_PIC_FILE_COND;

//流量查询条件
typedef struct tagNET_EHOME_FLOW_COND
{
    BYTE            bySearchMode;       //查询模式,1-按year查询,2-按month查询,3-按day查询
    BYTE            byRes[3];
    NET_EHOME_TIME  struStartTime;      //开始时间
    NET_EHOME_TIME  struStopTime;       //结束时间
    DWORD           dwStartIndex;       //查询起始位置
    DWORD           dwMaxFileCountPer;  //单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8
    BYTE            byRes1[64];
}NET_EHOME_FLOW_COND, *LPNET_EHOME_FLOW_COND;

//设备日志查询条件
typedef struct tagNET_EHOME_DEV_LOG_COND
{
    DWORD           dwMajorType;        //日志主类型,1-报警,2-异常,3-操作,0xffff-全部
    DWORD           dwMinorType;        //日志次类型,与设备基线代码定义相同
    NET_EHOME_TIME  struStartTime;      //开始时间
    NET_EHOME_TIME  struStopTime;       //结束时间
    DWORD           dwStartIndex;       //查询起始位置
    DWORD           dwMaxFileCountPer;  //单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8
    BYTE            byRes[64];
}NET_EHOME_DEV_LOG_COND, *LPNET_EHOME_DEV_LOG_COND;

//报警主机日志查询条件
typedef struct tagNET_EHOME_ALARM_HOST_LOG_COND
{
    DWORD           dwMajorType;        //日志主类型,1-报警,2-异常,3-操作,4-事件,0xffff-全部
    DWORD           dwMinorType;        //日志次类型,与设备基线代码定义相同
    NET_EHOME_TIME  struStartTime;      //开始时间
    NET_EHOME_TIME  struStopTime;       //结束时间
    DWORD           dwStartIndex;       //查询起始位置
    DWORD           dwMaxFileCountPer;  //单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8
    BYTE            byRes1[64];
}NET_EHOME_ALARM_HOST_LOG_COND, *LPNET_EHOME_ALARM_HOST_LOG_COND;

//老板的录像文件信息
typedef struct tagNET_EHOME_FINDDATA
{
    DWORD           dwSize;
    char            szFileName[MAX_FILE_NAME_LEN];  //文件名
    NET_EHOME_TIME  struStartTime;                  //文件的开始时间
    NET_EHOME_TIME  struStopTime;                   //文件的结束时间
    DWORD           dwFileSize;                     //文件的大小
    DWORD           dwFileMainType;                 //录像文件主类型
    DWORD           dwFileSubType;                  //录像文件子类型
    DWORD           dwFileIndex;                    //录像文件索引
    BYTE            byRes[128];
}NET_EHOME_FINDDATA, *LPNET_EHOME_FINDDATA;

//录像文件信息
typedef struct tagNET_EHOME_REC_FILE
{
    DWORD           dwSize;
    char            sFileName[MAX_FILE_NAME_LEN];   //文件名
    NET_EHOME_TIME  struStartTime;                  //文件的开始时间
    NET_EHOME_TIME  struStopTime;                   //文件的结束时间
    DWORD           dwFileSize;                     //文件的大小
    DWORD           dwFileMainType;                 //录像文件主类型
    DWORD           dwFileSubType;                  //录像文件子类型
    DWORD           dwFileIndex;                    //录像文件索引
    BYTE            byRes[128];
}NET_EHOME_REC_FILE, *LPNET_EHOME_REC_FILE;

//图片文件信息
typedef struct tagNET_EHOME_PIC_FILE
{
    DWORD           dwSize;
    char            sFileName[MAX_FILE_NAME_LEN];   //文件名
    NET_EHOME_TIME  struPicTime;                    //图片生成时间
    DWORD           dwFileSize;                     //文件的大小
    DWORD           dwFileMainType;                 //图片文件主类型
    DWORD           dwFileIndex;                    //图片文件索引
    BYTE            byRes[128];
}NET_EHOME_PIC_FILE, *LPNET_EHOME_PIC_FILE;

//流量信息
typedef struct tagNET_EHOME_FLOW_INFO
{
    DWORD   dwSize;
    DWORD   dwFlowValue;    //流量值
    DWORD   dwFlowIndex;    //流量索引
    BYTE    byRes[128];
}NET_EHOME_FLOW_INFO, *LPNET_EHOME_FLOW_INFO;

//设备日志信息
#define MAX_LOG_INFO_LEN    8*1024   //日志附加信息长度
typedef struct tagNET_EHOME_DEV_LOG
{
    NET_EHOME_TIME  struLogTime;                    //日志时间
    DWORD           dwMajorType;                    //日志主类型,1-报警,2-异常,3-操作
    DWORD           dwMinorType;                    //日志次类型,与设备基线代码定义相同
    DWORD           dwParamType;                    //次类型参数类型,大部分表示防区号,如果没有则值为0
    char            sLocalUser[NAME_LEN];           //本地用户
    char            sRemoteUser[NAME_LEN];          //远程用户
    char            sIPAddress[128];                //远端主机IP地址
    DWORD           dwChannelNo;                    //通道号
    DWORD           dwHardDiskNo;                   //硬盘号
    DWORD           dwAlarmInputChanNo;             //报警输入通道号
    DWORD           dwAlarmOutputChanNo;            //报警输出通道号
    char            sLogContext[MAX_LOG_INFO_LEN];  //日志内容
    BYTE            byRes[64];
}NET_EHOME_DEV_LOG, *LPNET_EHOME_DEV_LOG;

//报警主机日志信息
typedef struct tagNET_EHOME_ALARM_HOST_LOG
{
    NET_EHOME_TIME  struLogTime;                    //日志时间
    DWORD           dwMajorType;                    //日志主类型,1-报警,2-异常,3-操作,4-事件
    DWORD           dwMinorType;                    //日志次类型,与设备基线代码定义相同
    DWORD           dwParamType;                    //次类型参数类型,大部分表示防区号,如果没有则值为0
    char            sUserName[NAME_LEN];            //用户名
    char            sIPAddress[128];                //远端主机IP地址
    char            sLogContext[MAX_LOG_INFO_LEN];  //日志内容
    BYTE            byRes[64];
}NET_EHOME_ALARM_HOST_LOG, *LPNET_EHOME_ALARM_HOST_LOG;

NET_DVR_API LONG CALLBACK NET_ECMS_StartFindFile(LONG lUserID, LPNET_EHOME_FINDCOND pFindCond); //仅支持录像文件、图片文件和流量查询
NET_DVR_API LONG CALLBACK NET_ECMS_FindNextFile(LONG lHandle, LPNET_EHOME_FINDDATA pFindData); //仅支持录像文件查询

NET_DVR_API LONG CALLBACK NET_ECMS_StartFindFile_V11(LONG lUserID, LONG lSearchType, LPVOID pFindCond, DWORD dwCondSize);
NET_DVR_API LONG CALLBACK NET_ECMS_FindNextFile_V11(LONG lHandle, LPVOID pFindData, DWORD dwDataSize);
NET_DVR_API BOOL CALLBACK NET_ECMS_StopFindFile(LONG lHandle);


typedef struct tagNET_EHOME_PLAYBACK_INFO_IN
{
    DWORD       dwSize;
    DWORD       dwChannel;                    //回放的通道号
    BYTE        byPlayBackMode;               //回放下载模式 0-按名字 1-按时间
    BYTE        byRes[3];
    union
    {
        BYTE    byLen[512];
        struct
        {
            char   szFileName[MAX_FILE_NAME_LEN];          //回放的文件名
            DWORD  dwSeekType;                             //0-按字节长度计算偏移量  1-按时间(秒数)计算偏移量
            DWORD  dwFileOffset;                           //文件偏移量,从哪个位置开始下载,如果dwSeekType为0,偏移则以字节计算,为1则以秒数计算
            DWORD  dwFileSpan;                             //下载下载的文件大小,为0时,表示下载直到该文件结束为止,如果dwSeekType为0,大小则以字节计算,为1则以秒数计算
        }struPlayBackbyName;
        struct 
        {
            NET_EHOME_TIME  struStartTime;            // 按时间回放的开始时间,UTC时间
            NET_EHOME_TIME  struStopTime;            // 按时间回放的结束时间,UTC时间
        }struPlayBackbyTime;
    }unionPlayBackMode;
    NET_EHOME_IPADDRESS struStreamSever;     //流媒体地址
}NET_EHOME_PLAYBACK_INFO_IN, *LPNET_EHOME_PLAYBACK_INFO_IN;

typedef struct tagNET_EHOME_PLAYBACK_INFO_OUT
{
    LONG   lSessionID;     //目前协议不支持,返回-1
    BYTE   byRes[128];
}NET_EHOME_PLAYBACK_INFO_OUT, *LPNET_EHOME_PLAYBACK_INFO_OUT;

typedef struct tagNET_EHOME_PUSHPLAYBACK_IN
{
    DWORD dwSize;
    LONG lSessionID; 
    BYTE  byRes[128];
} NET_EHOME_PUSHPLAYBACK_IN, *LPNET_EHOME_PUSHPLAYBACK_IN;

typedef struct tagNET_EHOME_PUSHPLAYBACK_OUT
{
    DWORD dwSize;
    BYTE  byRes[128];
} NET_EHOME_PUSHPLAYBACK_OUT, *LPNET_EHOME_PUSHPLAYBACK_OUT;

NET_DVR_API BOOL CALLBACK NET_ECMS_StartPlayBack(LONG lUserID, LPNET_EHOME_PLAYBACK_INFO_IN pPlayBackInfoIn, LPNET_EHOME_PLAYBACK_INFO_OUT pPlayBackInfoOut);
NET_DVR_API BOOL CALLBACK NET_ECMS_StopPlayBack(LONG lUserID, LONG lSessionID);
NET_DVR_API BOOL CALLBACK NET_ECMS_StartPushPlayBack(LONG lUserID, LPNET_EHOME_PUSHPLAYBACK_IN pPushInfoIn, LPNET_EHOME_PUSHPLAYBACK_OUT pPushInfoOut);

//云台相关结构体
#define NET_EHOME_PTZ_CTRL                1000        //云镜控制
#define NET_EHOME_PRESET_CTRL        1001        //预置点操作
#define NET_EHOME_PZIN                        1002        //3D框选放大缩小
#define NET_EHOME_PTRACK                    1003        //3D点击居中

typedef enum
{
    PTZ_UP = 0,            //向上
    PTZ_DOWN,            //向下
    PTZ_LEFT,                //向左
    PTZ_RIGHT,            //向右
    PTZ_UPLEFT,            //向左上
    PTZ_DOWNLEFT,        //向左下
    PTZ_UPRIGHT,            //向右上
    PTZ_DOWNRIGHT,        //向右下
    PTZ_ZOOMIN,            //变焦-
    PTZ_ZOOMOUT,        //变焦+
    PTZ_FOCUSNEAR,        //聚焦-
    PTZ_FOCUSFAR,        //聚焦+
    PTZ_IRISSTARTUP,        //光圈变大
    PTZ_IRISSTOPDOWN,    //光圈变小
    PTZ_LIGHT,            //补光灯
    PTZ_WIPER,            //雨刷
    PTZ_AUTO            //自动
}EN_PTZ_CMD;

typedef struct tagNET_EHOME_PTZ_PARAM
{
    DWORD dwSize;
    BYTE  byPTZCmd;        //云台命令,参见EN_PTZ_CMD
    BYTE  byAction;        //云台动作,0-开始云台动作,1-停止云台动作
    BYTE  bySpeed;        //云台速度,0-7,数值越大速度越快
    BYTE  byRes[29];
}NET_EHOME_PTZ_PARAM, *LPNET_EHOME_PTZ_PARAM;

typedef struct tagNET_EHOME_PRESET_PARAM
{
    DWORD dwSize;
    BYTE  byPresetCmd;    //预置点控制命令,1-设置预置点,2-清除预置点,3-转到预置点
    BYTE  byRes1[3];
    DWORD dwPresetIndex;    //预置点编号
    BYTE  byRes2[32];
}NET_EHOME_PRESET_PARAM, *LPNET_EHOME_PRESET_PARAM;

typedef struct tagNET_EHOME_PZIN_PARAM
{
    DWORD dwSize;
    BYTE  byAction;    //动作,0缩小(右上->左下,右下->左上) 1放大(左上->右下,左下->右上)
    BYTE  byRes1[3];
    NET_EHOME_ZONE struArea;    //框选范围
    BYTE  byRes2[32];
}NET_EHOME_PZIN_PARAM, *LPNET_EHOME_PZIN_PARAM;

typedef struct tagNET_EHOME_POINT
{
    DWORD dwX;
    DWORD dwY;
    BYTE  byRes[4];
}NET_EHOME_POINT, *LPNET_EHOME_POINT;

typedef struct tagNET_EHOME_IPADDR
{
    char         sIpV4[16];
    char        sIpV6[128];    
}NET_EHOME_IPADDR, *LPNET_EHOME_IPADDR;

#define MACADDR_LEN                    6       //mac地址长度

typedef struct tagNET_EHOME_ETHERNET
{
    NET_EHOME_IPADDR    struDevIP;        //设备IP地址
    NET_EHOME_IPADDR    struDevIPMask;    //掩码地址
    DWORD        dwNetInterface; // 网卡类型1:10M半双工 2:10M全双工 3:100M半双工 4:100M全双工 6:1000M全双工 5:10M/100M/1000M自适应
    WORD        wDevPort;                    //设备SDK端口号:8000
    WORD        wMTU;                        // MTU参数
    BYTE        byMACAddr[MACADDR_LEN]; //mac地址
    BYTE        byRes[2];
}NET_EHOME_ETHERNET,*LPNET_EHOME_ETHERNET;
#define PASSWD_LEN                    16      //密码长度
typedef struct tagNET_EHOME_PPPOECFG
{
    DWORD        dwPPPoE;    //是否启用PPPOE:1代表使用;0代表不使用
    char            sPPPoEUser[NAME_LEN];    //PPPoE用户名
    char            sPPPoEPassword[PASSWD_LEN];    //PPPoE密码
    NET_EHOME_IPADDR    struPPPoEIP;        //PPPoE IP地址
}NET_EHOME_PPPOECFG,*LPNET_EHOME_PPPOECFG;

typedef struct tagNET_EHOME_NETWORK_CFG
{
    DWORD        dwSize;                //结构体大小
    NET_EHOME_ETHERNET        struEtherNet;    //以太网口
    NET_EHOME_IPADDR        struGateWayIP;//网关地址
    NET_EHOME_IPADDR        struMultiCastIP;//多播地址
    NET_EHOME_IPADDR        struDDNSServer1IP;//DDNS1服务器IP
    NET_EHOME_IPADDR        struDDNSServer2IP;//DDNS2服务器IP
    NET_EHOME_IPADDR        struAlarmHostIP;    //报警主机IP
    WORD        wAlarmHostPort;    //报警主机端口号
    WORD        wIPResolverPort;    //解析服务器端口
    NET_EHOME_IPADDR        struIPResolver; //解析服务器地址
    NET_EHOME_PPPOECFG        struPPPoE;    //PPPoE参数
    WORD        wHTTPPort;;        //Http端口
    BYTE        byRes[674];        //保留
}NET_EHOME_NETWORK_CFG,*LPNET_EHOME_NETWORK_CFG;

typedef struct tagNET_EHOME_COMPRESSION_COND
{
    DWORD        dwSize;    //结构体大小
    DWORD        dwChannelNum;    //通道号,从1开始
    BYTE        byCompressionType;//码流类型,1-主码流,2-子码流,3-三码流
    BYTE        byRes[23];
}NET_EHOME_COMPRESSION_COND,*LPNET_EHOME_COMPRESSION_COND;

typedef struct tagNET_EHOME_COMPRESSION_CFG
{
    DWORD        dwSize;    //结构体大小
    BYTE        byStreamType;    //码流类型
    BYTE        byPicQuality;    //图像质量0:最高 1:较高 2:中等 3:低 4:较低 5:最低
    BYTE        byBitRateType;    //码率类型0:变码率 1:定码率
    BYTE        byRes1;    //保留
    DWORD        dwResolution;    //分辨率,0:DCIF 1:CIF 2:QCIF 3:4CIF 4:2CIF 6:QVGA(320x240) 16:VGA 17:UXGA 18:SVGA 19:HD720p 20:hd900 21:XVGA    22:SXGAp(1360*1024)
    //27:1080P(1920*1080)    28:2560x1920 /*500W*/    29:1600x304    30:2048x1536 /*300W*/
    //31:2448x2048/*500W*/        32:2448x1200        33:2448x800    34:XGA/*(1024*768)*/
    //35:SXGA/*(1280*1024)*/    36:WD1/*(960*576/960*480)*/    37:HD1080I    38-WXGA(1440*900),
    //39-HD_F(1920*1080/1280*720),40-HD_H(1920*540/1280*360),  41-HD_Q(960*540/630*360),  
    //42-2336*1744,    43-1920*1456,44-2592*2048,    45-3296*2472,46-1376*768,47-1366*768,                 
    //48-1360*768,  49-WSXGA ,50-720*720,51-1280*1280,52-2048*768,53-2048*2048
    //54-2560x2048,  55-3072x2048 ,  56-2304*1296  57-WXGA(1280*800),  58-1600*600    
    //59-2592*1944  60-2752*2208,    61-384*288,    62-4000*3000,  63-4096*2160,  64-3840*2160,
    //65-4000*2250, 66-3072*1728,
    DWORD        dwVideoBitRate;    //0-32K 1-48k 2-64K 3-80K 4-96K 5-128K 6-160k 7-192K 8-224K 9-256K 10-320K 11-384K 12-448K 13-512K 14-640K 15-768K 16-896K 17-1024K 18-1280K 19-1536K 20-1792K 21-2048K 22-自定义
    DWORD        dwMaxBitRate;    //自定义码率
    DWORD        dwVideoFrameRate;    //视频帧率(4字节整数)0:全帧率 1:1/16 2:1/8 3:1/4 4:1/2 5:1 6:2 7:4 8:6 9:8 10:10 11:12 12:16 13:20 14:15 15:18 16:22
    WORD        wIntervalFrameI;    // I帧间隔,范围1~400
    BYTE        byIntervalBPFrame; //帧类型 0:BBP 1:BP 2:P
    BYTE        byRes[41];    //保留
}NET_EHOME_COMPRESSION_CFG,*LPNET_EHOME_COMPRESSION_CFG;

#define    MAX_TIME_SEGMENT        8   //时间段,ehome协议只支持4个
#define MAX_ANALOG_ALARMOUT     32      //最大32路模拟报警输出
#define MAX_ANALOG_CHANNUM      32      //最大32个模拟通道
#define MAX_DIGIT_CHANNUM    480/*512-32*/      //最大480个数字通道,与网络库保持

typedef struct tagNET_EHOME_ALARM_TIME_COND
{
    DWORD        dwSize;    //结构体大小
    BYTE        byAlarmType;    //报警类型,0-移动侦测,1-视频丢失,2-遮挡报警,3-报警输入,4-报警输出,9-客流量
    BYTE        byWeekday;    //0-Mon,1-Tues,2-Wed,3-Thur,4-Fri,5-Sat,6-Sun
    BYTE        byRes1[2];
    DWORD        dwChannel;    //通道号,从1开始
    BYTE        byRes2[20];
}NET_EHOME_ALARM_TIME_COND,*LPNET_EHOME_ALARM_TIME_COND;

typedef struct tagNET_EHOME_SCHEDTIME
{
    BYTE        byStartHour;    //开始时间:时
    BYTE        byStartMin;    //开始时间:分
    BYTE        byStopHour;    //结束时间:时
    BYTE        byStopMin;    //结束时间:分
}NET_EHOME_SCHEDTIME,*LPNET_EHOME_SCHEDTIME;

typedef struct tagNET_EHOME_ALARM_TIME_CFG
{
    DWORD        dwSize;    //结构体大小
    NET_EHOME_SCHEDTIME    struSchedTime[MAX_TIME_SEGMENT];//布防时间段
    BYTE        bySchedTimeCount;    //只读,布防时间段数
    BYTE        byRes[43];
}NET_EHOME_ALARM_TIME_CFG,*LPNET_EHOME_ALARM_TIME_CFG;

typedef struct tagNET_EHOME_ALARMOUT_CFG
{
    DWORD        dwSize;    //结构体大小
    BYTE        sAlarmOutName[NAME_LEN];    //报警输出名称
    WORD        wAlarmOutDelay;    //输出延时:0:5秒;1:10秒; 2:30秒; 3:1分; 4:2分; 5:5分; 6:10分; 7:最大;
    BYTE        byRes[26];    //保留
}NET_EHOME_ALARMOUT_CFG,*LPNET_EHOME_ALARMOUT_CFG;

typedef struct tagNET_EHOME_ALARMOUT_STATUS_CFG
{
    DWORD        dwSize;    //结构体大小
    BYTE        byAlarmOutStatus;    //1-开启报警输出,0-关闭报警输出
    BYTE        byRes[11];
}NET_EHOME_ALARMOUT_STATUS_CFG,*LPNET_EHOME_ALARMOUT_STATUS_CFG;

typedef struct tagNET_EHOME_ALARMIN_COND
{
    DWORD        dwSize;    //结构体大小
    DWORD        dwAlarmInNum;    //报警编号,从1开始
    DWORD        dwPTZChan;// PTZ联动视频通道编号,从1开始
    BYTE        byRes[20];
}NET_EHOME_ALARMIN_COND,*LPNET_EHOME_ALARMIN_COND;

typedef struct tagNET_EHOME_LINKAGE_ALARMOUT
{
    DWORD        dwAnalogAlarmOutNum;    //只读,模拟报警数量
    BYTE        byAnalogAlarmOut[MAX_ANALOG_ALARMOUT];    //模拟报警输出,0:不使用;1:使用
    BYTE        byRes[5000];    //保留,协议里面没有IP报警输出联动,接口上位置留出来
}NET_EHOME_LINKAGE_ALARMOUT,*LPNET_EHOME_LINKAGE_ALARMOUT;

typedef struct tagNET_EHOME_LINKAGE_PTZ
{
    BYTE    byUsePreset;    //是否调用预置点,0:不使用;1:使用
    BYTE    byUseCurise;    //是否调用巡航,0:不使用;1:使用
    BYTE    byUseTrack;    //是否调用轨迹,0:不使用;1:使用
    BYTE    byRes1;        //保留
    WORD    wPresetNo;    //预置点号,范围:1~256,协议中规定是1~256,实际已有设备支持300
    WORD    wCuriseNo;    //巡航路径号,范围:1~16
    WORD    wTrackNo;    //轨迹号,范围:1~16
    BYTE    byRes2[6];    //保留
}NET_EHOME_LINKAGE_PTZ,*LPNET_EHOME_LINKAGE_PTZ;

typedef struct tagNET_EHOME_ALARMIN_LINKAGE_TYPE
{
    BYTE    byMonitorAlarm;    //监视器上警告,0:不使用;1:使用
    BYTE    bySoundAlarm;    //声音报警,0:不使用;1:使用
    BYTE    byUpload;        //上传中心,0:不使用;1:使用
    BYTE    byAlarmout;        //触发报警输出,0:不使用;1:使用-
    BYTE    byEmail;            //邮件联动,0:不使用;1:使用
    BYTE    byRes1[3];        //保留
    NET_EHOME_LINKAGE_PTZ    struPTZLinkage;    //PTZ联动
    NET_EHOME_LINKAGE_ALARMOUT    struAlarmOut;    //报警输出联动
    BYTE    byRes[128];
}NET_EHOME_ALARMIN_LINKAGE_TYPE,*LPNET_EHOME_ALARMIN_LINKAGE_TYPE;

typedef    struct    tagNET_EHOME_RECORD_CHAN
{
    BYTE    byAnalogChanNum;    //只读,模拟通道数
    BYTE    byAnalogChan[MAX_ANALOG_CHANNUM];    //模拟通道,0:不使用;1:使用
    BYTE    byRes1[3];    //保留
    WORD    wDigitChanNum;    //只读,数字通道数
    BYTE    byDigitChan[MAX_DIGIT_CHANNUM];    //数字通道,0:不使用;1:使用
    BYTE    byRes2[62];    //保留
}NET_EHOME_RECORD_CHAN,*LPNET_EHOME_RECORD_CHAN;

typedef struct tagNET_EHOME_ALARMIN_CFG
{
    DWORD        dwSize;    //结构体大小
    BYTE        sAlarmInName[NAME_LEN];    //报警输入名称
    BYTE        byAlarmInType;    //报警器类型:0:常开;1:常闭
    BYTE        byUseAlarmIn;    //是否处理,0:不使用;1:使用
    BYTE        byRes1[2];            //保留
    NET_EHOME_ALARMIN_LINKAGE_TYPE    struLinkageType;    //联动模式
    NET_EHOME_RECORD_CHAN    struRecordChan;    //关联录像通道
    BYTE        byRes2[128];        //保留
}NET_EHOME_ALARMIN_CFG,*LPNET_EHOME_ALARMIN_CFG;

typedef    struct    tagNET_EHOME_MANUAL_IOOUT_CTRL
{
    DWORD        dwSize;    //结构体大小
    DWORD        dwChan;        //IO输出编号,从1开始
    DWORD        dwDelayTime;        //报警输出持续时间(秒),值为0表示一直输出,否则按指定时间长度进行输出。
    BYTE        byAction;        //0-关闭报警输出,1-开启报警输出
    BYTE        byRes[19];
}NET_EHOME_MANUAL_IOOUT_CTRL,*LPNET_EHOME_MANUAL_IOOUT_CTRL;

typedef struct tagNET_EHOME_IMAGE_CFG
{
    DWORD       dwSize;    //结构体大小
    BYTE        byHue;    //色调,0~255
    BYTE        byContrast;    //对比度,0~255
    BYTE        byBright;        //亮度,0~255
    BYTE        bySaturation;    //饱和度
    BYTE        byRes[24];
}NET_EHOME_IMAGE_CFG,*LPNET_EHOME_IMAGE_CFG;


typedef struct tagBINARY_DATA_INFO
{
    DWORD dwMagic;
    DWORD dwCommand;  //命令码
    DWORD dwSequence; //序号
    DWORD dwStatus;   //状态值
    DWORD dwBufLen;
    BYTE  byMsgType;    /*报文类型,0-无效,1-请求报文,2-应答报文*/
    char  sSerialNumber[12];//设备序列号,尚未使用
    //char  sDeviceID[16];//设备ID
    BYTE  byVersion;
    BYTE  byRes[2];
} BINARY_DATA_INFO, *LPBINARY_DATA_INFO;


#define    NET_EHOME_GET_NETWORK_CFG        5    //获取网络参数
#define    NET_EHOME_SET_NETWORK_CFG        6    //设置网络参数
#define    NET_EHOME_GET_COMPRESSION_CFG    7    //获取压缩参数
#define    NET_EHOME_SET_COMPRESSION_CFG    8    //设置压缩参数
#define    NET_EHOME_GET_IMAGE_CFG            9    //获取图像参数
#define    NET_EHOME_SET_IMAGE_CFG            10    //设置图像参数
#define    NET_EHOME_GET_ALARMIN_CFG        11        //获取报警输入参数
#define    NET_EHOME_SET_ALARMIN_CFG        12    //设置报警输入参数
#define    NET_EHOME_GET_ALARM_TIME_CFG    13    //获取报警布防时间参数
#define    NET_EHOME_SET_ALARM_TIME_CFG    14    //设置报警布防时间参数
#define    NET_EHOME_GET_ALARMOUT_CFG        15    //获取报警输出参数
#define    NET_EHOME_SET_ALARMOUT_CFG        16    //设置报警输出参数
#define    NET_EHOME_GET_ALARMOUT_STATUS_CFG        17    //获取报警输出状态参数
#define    NET_EHOME_SET_ALARMOUT_STATUS_CFG        18    //设置报警输出状态参数
#define    NET_EHOME_MANUAL_IOOUT            19    //手动控制IO输出

typedef enum tagNET_CMS_ENUM_PROXY_TYPE
{
ENUM_PROXY_TYPE_NETSDK = 0, //NetSDK代理
ENUM_PROXY_TYPE_HTTP //HTTP代理
}NET_CMS_ENUM_PROXY_TYPE;

typedef struct tagNET_EHOME_PT_PARAM
{
NET_EHOME_IPADDRESS struIP;   //监听的IP和端口
BYTE byProtocolType; //协议类型,0-TCP
BYTE byProxyType; //代理类型,0-NetSDK代理,1-HTTP代理
BYTE byRes[2];
}NET_EHOME_PT_PARAM, *LPNET_EHOME_Proxy_PARAM;

typedef struct tagNET_EHOME_PASSTHROUGH_PARAM
{
DWORD dwSequence; //报文序号
DWORD dwUUID; //会话ID
BYTE byRes[64];
}NET_EHOME_PASSTHROUGH_PARAM, *LPNET_EHOME_PASSTHROUGH_PARAM;

typedef struct tagNET_EHOME_PTXML_PARAM
{
    void*   pRequestUrl;        //请求URL
    DWORD   dwRequestUrlLen;    //请求URL长度
    void*   pCondBuffer;        //条件缓冲区(XML格式数据)
    DWORD   dwCondSize;         //条件缓冲区大小
    void*   pInBuffer;          //输入缓冲区(XML格式数据)
    DWORD   dwInSize;           //输入缓冲区大小
    void*   pOutBuffer;         //输出缓冲区(XML格式数据)
    DWORD   dwOutSize;          //输出缓冲区大小
    DWORD   dwReturnedXMLLen;   //实际从设备接收到的XML数据的长度
    BYTE    byRes[32];          //保留
}NET_EHOME_PTXML_PARAM, *LPNET_EHOME_PTXML_PARAM;

NET_DVR_API LONG CALLBACK NET_ECMS_StartListenProxy(LPNET_EHOME_Proxy_PARAM lpStru);
NET_DVR_API BOOL CALLBACK NET_ECMS_StopListenProxy(LONG lListenHandle, DWORD dwProxyType = 0);
NET_DVR_API LONG CALLBACK NET_ECMS_ConvertProtocolHttpToPassthrough(void* pSrcBuffer, DWORD dwSrcBufLen, void* pDestBuffer, DWORD dwDestBufLen, LPNET_EHOME_PASSTHROUGH_PARAM lpParam, BOOL bToPassthrough = TRUE);
typedef void (CALLBACK* PASSTHROUGHDATACALLBACK)(DWORD dwProxyType, LONG lListenHandle, void* pDeviceID, DWORD dwDevIDLen, void* pDataBuffer, DWORD dwDataLen, void* pUser);
NET_DVR_API BOOL CALLBACK NET_ECMS_SetPassthroughDataCallback(PASSTHROUGHDATACALLBACK fnPassthroughDataCb, void* pUser, DWORD dwProxyType = 0);
NET_DVR_API BOOL CALLBACK NET_ECMS_SendPassthroughData(void* pDataBuffer, DWORD dDataLen, DWORD dwProxyType = 0);
NET_DVR_API BOOL CALLBACK NET_ECMS_GetPTXMLConfig(LONG iUserID, LPNET_EHOME_PTXML_PARAM lpPTXMLParam);
NET_DVR_API BOOL CALLBACK NET_ECMS_PutPTXMLConfig(LONG iUserID, LPNET_EHOME_PTXML_PARAM lpPTXMLParam);
NET_DVR_API BOOL CALLBACK NET_ECMS_PostPTXMLConfig(LONG iUserID, LPNET_EHOME_PTXML_PARAM lpPTXMLParam);
NET_DVR_API BOOL CALLBACK NET_ECMS_DeletePTXMLConfig(LONG lUserID, LPNET_EHOME_PTXML_PARAM lpPTXMLParam);


NET_DVR_API BOOL CALLBACK NET_ECMS_SetSDKLocalCfg(NET_EHOME_LOCAL_CFG_TYPE enumType, void* const lpInBuff);
NET_DVR_API BOOL CALLBACK NET_ECMS_GetSDKLocalCfg(NET_EHOME_LOCAL_CFG_TYPE enumType,void *lpOutBuff);

typedef struct tagNET_EHOME_XML_REMOTE_CTRL_PARAM
{
    DWORD dwSize;
    void* lpInbuffer;          //控制参数缓冲区
    DWORD  dwInBufferSize;      //控制参数缓冲区长度
    DWORD  dwSendTimeOut;  //数据发送超时时间,单位ms,默认5s
    DWORD  dwRecvTimeOut;  //数据接收超时时间,单位ms,默认5s
    void *lpOutBuffer;     //输出缓冲区
    DWORD dwOutBufferSize;  //输出缓冲区大小
    void *lpStatusBuffer;   //状态缓冲区,若不需要可置为NULL
    DWORD dwStatusBufferSize;  //状态缓冲区大小
    BYTE   byRes[16];
}NET_EHOME_XML_REMOTE_CTRL_PARAM, *LPNET_EHOME_XML_REMOTE_CTRL_PARAM;
NET_DVR_API BOOL CALLBACK NET_ECMS_XMLRemoteControl(LONG lUserID, LPNET_EHOME_XML_REMOTE_CTRL_PARAM lpCtrlParam, DWORD dwCtrlSize);


#endif //_HC_EHOME_CMS_H_



实例下载地址

ehome协议32位的windows sdk(源码)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警