From a6f00ceb6c6cdc93139b7837d1ad497535fbdb02 Mon Sep 17 00:00:00 2001 From: linbo <1034003879@qq.com> Date: Tue, 21 Jul 2026 14:18:44 +0800 Subject: [PATCH] add hikvision camera --- cmvr-es/config/devices/camera/camera.pb.txt | 20 + cmvr-es/config/manager/device_manager.pb.txt | 12 +- .../camera/hikvision_camera/CMakeLists.txt | 5 +- .../hikvision_camera/src/hikvision_camera.cpp | 40 +- .../v6.1.11.5/include/HCNetSDK.h | 63184 ++++++++-------- .../v6.1.11.5/lib/libcrypto.so.3 | Bin 5654664 -> 0 bytes 6 files changed, 31648 insertions(+), 31613 deletions(-) delete mode 100644 dependency/x86/third_party/hikvision_sdk/v6.1.11.5/lib/libcrypto.so.3 diff --git a/cmvr-es/config/devices/camera/camera.pb.txt b/cmvr-es/config/devices/camera/camera.pb.txt index 2647e5d9..d44a4715 100644 --- a/cmvr-es/config/devices/camera/camera.pb.txt +++ b/cmvr-es/config/devices/camera/camera.pb.txt @@ -78,4 +78,24 @@ camera { sync: false } } + + cameras { + id: "hikvision_cam" + hikvision { + ip: "192.168.1.64" + port: 8000 + username: "admin" + password: "admin" + channel: 1 + stream_type: 0 + link_mode: 0 + width: 1920 + height: 1080 + fps: 25 + codec: "H264" + camera_mode: CAMERA_MODE_VIDEO + stream_mode: STREAM_MODE_RGB + buffer_size: 30 + } + } } diff --git a/cmvr-es/config/manager/device_manager.pb.txt b/cmvr-es/config/manager/device_manager.pb.txt index 21dd6ee9..be89324d 100644 --- a/cmvr-es/config/manager/device_manager.pb.txt +++ b/cmvr-es/config/manager/device_manager.pb.txt @@ -42,7 +42,7 @@ device_manager { id: "aubo_arm" type: DEVICE_TYPE_ROBOT_ARM config_file: "devices/arm/aubo_arm.pb.txt" - enable: true + enable: false } devices { @@ -63,6 +63,14 @@ device_manager { id: "src1100" type: DEVICE_TYPE_AGV config_file: "devices/agv/src1100.pb.txt" - enable: true + enable: false } + + devices { + id: "hikvision_cam" + type: DEVICE_TYPE_CAMERA + config_file: "devices/camera/camera.pb.txt" + enable: true + } + } diff --git a/cmvr-es/devices/camera/hikvision_camera/CMakeLists.txt b/cmvr-es/devices/camera/hikvision_camera/CMakeLists.txt index 62107d1c..bef14e87 100644 --- a/cmvr-es/devices/camera/hikvision_camera/CMakeLists.txt +++ b/cmvr-es/devices/camera/hikvision_camera/CMakeLists.txt @@ -17,7 +17,10 @@ target_link_libraries(hikvision_camera -lhcnetsdk pthread ) - +set_target_properties(hikvision_camera PROPERTIES + BUILD_RPATH "${HIKVISION_SDK_LIB_DIR};${HIKVISION_SDK_LIB_DIR}/HCNetSDKCom" + INSTALL_RPATH "$ORIGIN;$ORIGIN/HCNetSDKCom" +) add_library(cmvr_es::device::hikvision_camera ALIAS hikvision_camera) install(TARGETS hikvision_camera LIBRARY DESTINATION lib) install(DIRECTORY "${HIKVISION_SDK_LIB_DIR}/HCNetSDKCom" DESTINATION lib) diff --git a/cmvr-es/devices/camera/hikvision_camera/src/hikvision_camera.cpp b/cmvr-es/devices/camera/hikvision_camera/src/hikvision_camera.cpp index 1031c59a..3849fd4d 100644 --- a/cmvr-es/devices/camera/hikvision_camera/src/hikvision_camera.cpp +++ b/cmvr-es/devices/camera/hikvision_camera/src/hikvision_camera.cpp @@ -2,14 +2,16 @@ #include #include +#include +#include + +#if defined(__linux__) +#include +#endif #include "HCNetSDK.h" #include "common/base/logging/logger.h" -#ifndef HIKVISION_SDK_LIB_DIR -#define HIKVISION_SDK_LIB_DIR "" -#endif - namespace { std::mutex g_sdk_mutex; @@ -28,6 +30,21 @@ std::string normalizeSdkPath(std::string path) return path; } +std::string defaultRuntimeSdkPath() +{ +#if defined(__linux__) + char executable_path[PATH_MAX] = {0}; + const ssize_t count = readlink("/proc/self/exe", executable_path, PATH_MAX - 1); + if (count > 0) { + executable_path[count] = '\0'; + const auto lib_path = + std::filesystem::path(executable_path).parent_path() / ".." / "lib"; + return normalizeSdkPath(std::filesystem::weakly_canonical(lib_path).string()); + } +#endif + return normalizeSdkPath((std::filesystem::current_path() / ".." / "lib").string()); +} + void copyCString(char* dest, size_t dest_size, const std::string& source) { if (dest_size == 0) { @@ -67,7 +84,7 @@ HikvisionCamera::HikvisionCamera(const config::HikvisionCameraConfig& camera) buffer_size_ = camera_.buffer_size() > 0 ? static_cast(camera_.buffer_size()) : 30; codec_ = camera_.codec().empty() ? "H264" : camera_.codec(); sdk_path_ = normalizeSdkPath( - camera_.sdk_path().empty() ? std::string(HIKVISION_SDK_LIB_DIR) : camera_.sdk_path()); + camera_.sdk_path().empty() ? defaultRuntimeSdkPath() : camera_.sdk_path()); state_.fps = fps_; state_.width = width_; @@ -328,19 +345,6 @@ bool HikvisionCamera::initSdk_() std::lock_guard lock(g_sdk_mutex); if (g_sdk_ref_count == 0) { - if (!sdk_path_.empty()) { - NET_DVR_LOCAL_SDK_PATH sdk_path_cfg{}; - copyCString(sdk_path_cfg.sPath, sizeof(sdk_path_cfg.sPath), sdk_path_); - NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SDK_PATH, &sdk_path_cfg); - - const std::string crypto_path = sdk_path_ + "libcrypto.so.3"; - const std::string ssl_path = sdk_path_ + "libssl.so.3"; - NET_DVR_SetSDKInitCfg( - NET_SDK_INIT_CFG_LIBEAY_PATH, const_cast(crypto_path.c_str())); - NET_DVR_SetSDKInitCfg( - NET_SDK_INIT_CFG_SSLEAY_PATH, const_cast(ssl_path.c_str())); - } - if (!NET_DVR_Init()) { setError_(sdkError_("NET_DVR_Init")); return false; diff --git a/dependency/x86/third_party/hikvision_sdk/v6.1.11.5/include/HCNetSDK.h b/dependency/x86/third_party/hikvision_sdk/v6.1.11.5/include/HCNetSDK.h index 9089dff4..dba67939 100644 --- a/dependency/x86/third_party/hikvision_sdk/v6.1.11.5/include/HCNetSDK.h +++ b/dependency/x86/third_party/hikvision_sdk/v6.1.11.5/include/HCNetSDK.h @@ -1,4 +1,4 @@ -#ifndef _HC_NET_SDK_H_ +#ifndef _HC_NET_SDK_H_ #define _HC_NET_SDK_H_ #ifndef _WINDOWS_ @@ -95,279 +95,279 @@ }INITINFO; #endif -//궨 -#define MAX_NAMELEN 16 //DVRص½ -#define MAX_RIGHT 32 //豸ֵ֧Ȩޣ1-12ʾȨޣ13-32ʾԶȨޣ -#define NAME_LEN 32 //û -#define MIN_PASSWD_LEN 8 //С볤 -#define PASSWD_LEN 16 //볤 -#define STREAM_PASSWD_LEN 12 //Կ󳤶 -#define MAX_PASSWD_LEN_EX 64 //볤64λ -#define GUID_LEN 16 //GUID -#define DEV_TYPE_NAME_LEN 24 //豸Ƴ -#define SERIALNO_LEN 48 //кų -#define MACADDR_LEN 6 //macַ -#define MAC_ADDRESS_NUM 48 //Macַ -#define MAX_SENCE_NUM 16 // -#define RULE_REGION_MAX 128 // -#define MAX_ETHERNET 2 //豸̫ -#define MAX_NETWORK_CARD 4 //豸Ŀ -#define MAX_NETWORK_CARD_EX 12 //豸Ŀչ -#define PATHNAME_LEN 128 //· -#define MAX_PRESET_V13 16 //Ԥõ -#define MAX_TEST_COMMAND_NUM 32 //߲Աֶγ -#define MAX_NUMBER_LEN 32 //󳤶 -#define MAX_NAME_LEN 128 //豸󳤶 -#define MAX_INDEX_LED 8 //LEDֵ 2013-11-19 -#define MAX_CUSTOM_DIR 64 //ԶĿ¼󳤶 -#define URL_LEN_V40 256 //URL -#define CLOUD_NAME_LEN 48 //ƴ洢û -#define CLOUD_PASSWD_LEN 48 //ƴ洢볤 -#define MAX_SENSORNAME_LEN 64 //Ƴ -#define MAX_SENSORCHAN_LEN 32 //ͨ -#define MAX_DESCRIPTION_LEN 32 // -#define MAX_DEVNAME_LEN_EX 64 //豸Ƴչ -#define NET_SDK_MAX_FILE_PATH 256 //ļ· -#define MAX_TMEVOICE_LEN 64 //TMEݳ -#define ISO_8601_LEN 32 //ISO_8601ʱ䳤 -#define MODULE_INFO_LEN 32 //ģϢ -#define VERSION_INFO_LEN 32 //汾Ϣ +//宏定义 +#define MAX_NAMELEN 16 //DVR本地登陆名 +#define MAX_RIGHT 32 //设备支持的权限(1-12表示本地权限,13-32表示远程权限) +#define NAME_LEN 32 //用户名长度 +#define MIN_PASSWD_LEN 8 //最小密码长度 +#define PASSWD_LEN 16 //密码长度 +#define STREAM_PASSWD_LEN 12 //码流加密密钥最大长度 +#define MAX_PASSWD_LEN_EX 64 //密码长度64位 +#define GUID_LEN 16 //GUID长度 +#define DEV_TYPE_NAME_LEN 24 //设备类型名称长度 +#define SERIALNO_LEN 48 //序列号长度 +#define MACADDR_LEN 6 //mac地址长度 +#define MAC_ADDRESS_NUM 48 //Mac地址长度 +#define MAX_SENCE_NUM 16 //场景数 +#define RULE_REGION_MAX 128 //最大区域 +#define MAX_ETHERNET 2 //设备可配以太网络 +#define MAX_NETWORK_CARD 4 //设备可配最大网卡数目 +#define MAX_NETWORK_CARD_EX 12 //设备可配最大网卡数目扩展 +#define PATHNAME_LEN 128 //路径长度 +#define MAX_PRESET_V13 16 //预置点 +#define MAX_TEST_COMMAND_NUM 32 //产线测试保留字段长度 +#define MAX_NUMBER_LEN 32 //号码最大长度 +#define MAX_NAME_LEN 128 //设备名称最大长度 +#define MAX_INDEX_LED 8 //LED索引最大值 2013-11-19 +#define MAX_CUSTOM_DIR 64 //自定义目录最大长度 +#define URL_LEN_V40 256 //最大URL长度 +#define CLOUD_NAME_LEN 48 //云存储服务器用户名长度 +#define CLOUD_PASSWD_LEN 48 //云存储服务器密码长度 +#define MAX_SENSORNAME_LEN 64 //传感器名称长度 +#define MAX_SENSORCHAN_LEN 32 //传感器通道长度 +#define MAX_DESCRIPTION_LEN 32 //传感器描述长度 +#define MAX_DEVNAME_LEN_EX 64 //设备名称长度扩展 +#define NET_SDK_MAX_FILE_PATH 256 //文件路径长度 +#define MAX_TMEVOICE_LEN 64 //TME语音播报内容长度 +#define ISO_8601_LEN 32 //ISO_8601时间长度 +#define MODULE_INFO_LEN 32 //模块信息长度 +#define VERSION_INFO_LEN 32 //版本信息长度 -#define MAX_NUM_INPUT_BOARD 512 // -#define MAX_SHIPSDETE_REGION_NUM 8 // ֻбĿ +#define MAX_NUM_INPUT_BOARD 512 //输入板最大个数 +#define MAX_SHIPSDETE_REGION_NUM 8 // 船只检测区域列表最大数目 -#define MAX_RES_NUM_ONE_VS_INPUT_CHAN 8 //һֵ֧ͨķֱʵ -#define MAX_VS_INPUT_CHAN_NUM 16 //ͨ +#define MAX_RES_NUM_ONE_VS_INPUT_CHAN 8 //一个虚拟屏输入通道支持的分辨率的最大数量 +#define MAX_VS_INPUT_CHAN_NUM 16 //虚拟屏输入通道最大数量 -#define NET_SDK_MAX_FDID_LEN 256//ID󳤶 -#define NET_SDK_MAX_PICID_LEN 256 //ID󳤶 -#define NET_SDK_FDPIC_CUSTOM_INFO_LEN 96 //ͼƬԶϢ -#define NET_DVR_MAX_FACE_ANALYSIS_NUM 32 //ֵ֧ͼƬʶ -#define NET_DVR_MAX_FACE_SEARCH_NUM 5 //֧ -#define NET_SDK_SECRETKEY_LEN 128 //ļԿ -#define NET_SDK_CUSTOM_LEN 512 //ԶϢ󳤶 -#define NET_SDK_CHECK_CODE_LEN 128//У볤 -#define RELATIVE_CHANNEL_LEN 2//ͨŵ -#define NET_SDK_MAX_CALLEDTARGET_NAME 32 //ºĿû -#define NET_SDK_MAX_HBDID_LEN 256 /*256 ID󳤶*/ -//СLED -#define MAX_LEN_TEXT_CONTENT 128 //ַݳ -#define MAX_NUM_INPUT_SOURCE_TEXT 32 //źԴɵӵı -#define MAX_NUM_OUTPUT_CHANNEL 512 //LEDڸ +#define NET_SDK_MAX_FDID_LEN 256//人脸库ID最大长度 +#define NET_SDK_MAX_PICID_LEN 256 //人脸ID最大长度 +#define NET_SDK_FDPIC_CUSTOM_INFO_LEN 96 //人脸库图片自定义信息长度 +#define NET_DVR_MAX_FACE_ANALYSIS_NUM 32 //最大支持单张图片识别出的人脸区域个数 +#define NET_DVR_MAX_FACE_SEARCH_NUM 5 //最大支持搜索人脸区域个数 +#define NET_SDK_SECRETKEY_LEN 128 //配置文件密钥长度 +#define NET_SDK_CUSTOM_LEN 512 //自定义信息最大长度 +#define NET_SDK_CHECK_CODE_LEN 128//校验码长度 +#define RELATIVE_CHANNEL_LEN 2//报警关联的通道号的数量 +#define NET_SDK_MAX_CALLEDTARGET_NAME 32 //呗呼叫目标的用户名 +#define NET_SDK_MAX_HBDID_LEN 256 /*256 人体库ID最大长度*/ +//小间距LED控制器 +#define MAX_LEN_TEXT_CONTENT 128 //字符内容长度 +#define MAX_NUM_INPUT_SOURCE_TEXT 32 //信号源可叠加的文本数量 +#define MAX_NUM_OUTPUT_CHANNEL 512 //LED区域包含的输出口个数 -//ӴڽOSD -#define MAX_LEN_OSD_CONTENT 256 //OSDϢ󳤶 -#define MAX_NUM_OSD_ONE_SUBWND 8 //Ӵֵ֧OSD -#define MAX_NUM_SPLIT_WND 64 //ֵ֧Ӵ +//子窗口解码OSD +#define MAX_LEN_OSD_CONTENT 256 //OSD信息最大长度 +#define MAX_NUM_OSD_ONE_SUBWND 8 //单个子窗口支持的最大OSD数量 +#define MAX_NUM_SPLIT_WND 64 //单个窗口支持的最大分屏窗口数量(即子窗口数量) #define MAX_NUM_OSD 8 //2013-11-19 -#define MAX_DEVNAME_LEN 32 //豸󳤶 -#define MAX_LED_INFO 256 //ĻʾϢ󳤶 -#define MAX_TIME_LEN 32 //ʱ󳤶 -#define MAX_CARD_LEN 24 //󳤶 -#define MAX_OPERATORNAME_LEN 32 //Ա󳤶 +#define MAX_DEVNAME_LEN 32 //设备名称最大长度 +#define MAX_LED_INFO 256 //屏幕字体显示信息最大长度 +#define MAX_TIME_LEN 32 //时间最大长度 +#define MAX_CARD_LEN 24 //卡号最大长度 +#define MAX_OPERATORNAME_LEN 32 //操作人员名称最大长度 -#define THERMOMETRY_ALARMRULE_NUM 40 //ȳ񱨾 -#define MAX_THERMOMETRY_REGION_NUM 40 //ȶͼ֧ -#define MAX_THERMOMETRY_DIFFCOMPARISON_NUM 40 //ȳ² -#define MAX_SHIPS_NUM 20 //ֻֻ -#define MAX_SHIPIMAGE_NUM 6 //ֻץͼ -#define KEY_WORD_NUM 3 //ؼָ -#define KEY_WORD_LEN 128 //ؼֳ -//첽¼ص״̬궨 -#define ASYN_LOGIN_SUCC 1 //첽¼ɹ -#define ASYN_LOGIN_FAILED 0 //첽¼ʧ +#define THERMOMETRY_ALARMRULE_NUM 40 //热成像报警规则数 +#define MAX_THERMOMETRY_REGION_NUM 40 //热度图检测区域最大支持数 +#define MAX_THERMOMETRY_DIFFCOMPARISON_NUM 40 //热成像温差报警规则数 +#define MAX_SHIPS_NUM 20 //船只检测最大船只数 +#define MAX_SHIPIMAGE_NUM 6 //船只最大抓图数 +#define KEY_WORD_NUM 3 //关键字个数 +#define KEY_WORD_LEN 128 //关键字长度 +//异步登录回调状态宏定义 +#define ASYN_LOGIN_SUCC 1 //异步登录成功 +#define ASYN_LOGIN_FAILED 0 //异步登录失败 -#define NET_SDK_MAX_VERIFICATION_CODE_LEN 32 //өʯ֤볤 -#define NET_SDK_MAX_OPERATE_CODE_LEN 64 //өʯƲ볤 -#define MAX_TIMESEGMENT_V30 8 //9000豸ʱ -#define MAX_TIMESEGMENT 4 //8000豸ʱ -#define MAX_ICR_NUM 8 //ץĻ˹ƬԤõ2013-07-09 -#define MAX_VEHICLEFLOW_INFO 24 //Ϣ -#define MAX_SHELTERNUM 4 //8000豸ڵ -#define MAX_DAYS 7 //ÿ -#define PHONENUMBER_LEN 32 //pppoeź󳤶 -#define MAX_ACCESSORY_CARD 256 //Ϣ󳤶 -#define MAX_DISKNUM_V30 33 //9000豸Ӳ/* 33Ӳ(16SATAӲ̡1eSATAӲ̺16NFS) */ -#define NET_SDK_MAX_NET_USER_NUM 64 //û +#define NET_SDK_MAX_VERIFICATION_CODE_LEN 32 //萤石云验证码长度 +#define NET_SDK_MAX_OPERATE_CODE_LEN 64 //萤石云操作码长度 +#define MAX_TIMESEGMENT_V30 8 //9000设备最大时间段数 +#define MAX_TIMESEGMENT 4 //8000设备最大时间段数 +#define MAX_ICR_NUM 8 //抓拍机红外滤光片预置点数2013-07-09 +#define MAX_VEHICLEFLOW_INFO 24 //车流量信息最大个数 +#define MAX_SHELTERNUM 4 //8000设备最大遮挡区域数 +#define MAX_DAYS 7 //每周天数 +#define PHONENUMBER_LEN 32 //pppoe拨号号码最大长度 +#define MAX_ACCESSORY_CARD 256 //配件板信息最大长度 +#define MAX_DISKNUM_V30 33 //9000设备最大硬盘数/* 最多33个硬盘(包括16个内置SATA硬盘、1个eSATA硬盘和16个NFS盘) */ +#define NET_SDK_MAX_NET_USER_NUM 64 //网络用户 -#define NET_SDK_DISK_LOCATION_LEN 16 //Ӳλó -#define NET_SDK_SUPPLIER_NAME_LEN 32 //ӦƳ -#define NET_SDK_DISK_MODEL_LEN 64 //Ӳͺų -#define NET_SDK_MAX_DISK_VOLUME 33 //Ӳ̾ -#define NET_SDK_DISK_VOLUME_LEN 36 //Ӳ̾Ƴ +#define NET_SDK_DISK_LOCATION_LEN 16 //硬盘位置长度 +#define NET_SDK_SUPPLIER_NAME_LEN 32 //供应商名称长度 +#define NET_SDK_DISK_MODEL_LEN 64 //硬盘型号长度 +#define NET_SDK_MAX_DISK_VOLUME 33 //最大硬盘卷个数 +#define NET_SDK_DISK_VOLUME_LEN 36 //硬盘卷名称长度 -#define MAX_DISKNUM 16 //8000豸Ӳ -#define MAX_DISKNUM_V10 8 //1.2汾֮ǰ汾 -#define CARD_READER_DESCRIPTION 32 // -#define MAX_FACE_NUM 2 // +#define MAX_DISKNUM 16 //8000设备最大硬盘数 +#define MAX_DISKNUM_V10 8 //1.2版本之前版本 +#define CARD_READER_DESCRIPTION 32 //读卡器描述 +#define MAX_FACE_NUM 2 //最大人脸数 -#define MAX_WINDOW_V30 32 //9000豸ʾ󲥷Ŵ -#define MAX_WINDOW_V40 64 //Netra 2.3.1չ -#define MAX_WINDOW 16 //8000豸Ӳ -#define MAX_VGA_V30 4 //9000豸ɽVGA -#define MAX_VGA 1 //8000豸ɽVGA +#define MAX_WINDOW_V30 32 //9000设备本地显示最大播放窗口数 +#define MAX_WINDOW_V40 64 //Netra 2.3.1扩展 +#define MAX_WINDOW 16 //8000设备最大硬盘数 +#define MAX_VGA_V30 4 //9000设备最大可接VGA数 +#define MAX_VGA 1 //8000设备最大可接VGA数 -#define MAX_USERNUM_V30 32 //9000豸û -#define MAX_USERNUM 16 //8000豸û -#define MAX_EXCEPTIONNUM_V30 32 //9000豸쳣 -#define MAX_EXCEPTIONNUM 16 //8000豸쳣 -#define MAX_LINK 6 //8000豸ͨƵ -#define MAX_ITC_EXCEPTIONOUT 32 //ץĻ󱨾 -#define MAX_SCREEN_DISPLAY_LEN 512 //Ļʾַ +#define MAX_USERNUM_V30 32 //9000设备最大用户数 +#define MAX_USERNUM 16 //8000设备最大用户数 +#define MAX_EXCEPTIONNUM_V30 32 //9000设备最大异常处理数 +#define MAX_EXCEPTIONNUM 16 //8000设备最大异常处理数 +#define MAX_LINK 6 //8000设备单通道最大视频流连接数 +#define MAX_ITC_EXCEPTIONOUT 32 //抓拍机最大报警输出 +#define MAX_SCREEN_DISPLAY_LEN 512 //屏幕显示字符长度 -#define MAX_DECPOOLNUM 4 //·ÿͨѭ -#define MAX_DECNUM 4 //·ͨʵֻһ -#define MAX_TRANSPARENTNUM 2 //·͸ͨ -#define MAX_CYCLE_CHAN 16 //·Ѳͨ -#define MAX_CYCLE_CHAN_V30 64 //Ѳͨչ -#define MAX_DIRNAME_LENGTH 80 //Ŀ¼ -#define MAX_WINDOWS 16 //󴰿 +#define MAX_DECPOOLNUM 4 //单路解码器每个解码通道最大可循环解码数 +#define MAX_DECNUM 4 //单路解码器的最大解码通道数(实际只有一个,其他三个保留) +#define MAX_TRANSPARENTNUM 2 //单路解码器可配置最大透明通道数 +#define MAX_CYCLE_CHAN 16 //单路解码器最大轮巡通道数 +#define MAX_CYCLE_CHAN_V30 64 //最大轮巡通道数(扩展) +#define MAX_DIRNAME_LENGTH 80 //最大目录长度 +#define MAX_WINDOWS 16 //最大窗口数 -#define MAX_STRINGNUM_V30 8 //9000豸OSDַ -#define MAX_STRINGNUM 4 //8000豸OSDַ -#define MAX_STRINGNUM_EX 8 //8000չ -#define MAX_AUXOUT_V30 16 //9000豸 -#define MAX_AUXOUT 4 //8000豸 -#define MAX_HD_GROUP 16 //9000豸Ӳ -#define MAX_HD_GROUP_V40 32 //豸Ӳ -#define MAX_NFS_DISK 8 //8000豸NFSӲ -#define NET_SDK_VERSION_LIST_LEN 64 //㷨汾ֵ -#define IW_ESSID_MAX_SIZE 32 //WIFISSIDų -#define IW_ENCODING_TOKEN_MAX 32 //WIFIֽ -#define MAX_SERIAL_NUM 64 //ֵ֧͸ͨ· -#define MAX_DDNS_NUMS 10 //9000豸ddns -#define MAX_DOMAIN_NAME 64 /* */ -#define MAX_EMAIL_ADDR_LEN 48 //emailַ -#define MAX_EMAIL_PWD_LEN 32 //email볤 -#define MAX_SLAVECAMERA_NUM 8 // -#define MAX_CALIB_NUM 6 //궨ĸ -#define MAX_CALIB_NUM_EX 20 //չ궨ĸ -#define MAX_LEDDISPLAYINFO_LEN 1024 //LEDʾ -#define MAX_PEOPLE_DETECTION_NUM 8 //Ա -#define MAXPROGRESS 100 //طʱٷ -#define MAX_SERIALNUM 2 //8000豸ֵ֧Ĵ 1-232 2-485 -#define CARDNUM_LEN 20 //ų +#define MAX_STRINGNUM_V30 8 //9000设备最大OSD字符行数数 +#define MAX_STRINGNUM 4 //8000设备最大OSD字符行数数 +#define MAX_STRINGNUM_EX 8 //8000定制扩展 +#define MAX_AUXOUT_V30 16 //9000设备最大辅助输出数 +#define MAX_AUXOUT 4 //8000设备最大辅助输出数 +#define MAX_HD_GROUP 16 //9000设备最大硬盘组数 +#define MAX_HD_GROUP_V40 32 //设备最大硬盘组数 +#define MAX_NFS_DISK 8 //8000设备最大NFS硬盘数 +#define NET_SDK_VERSION_LIST_LEN 64 //算法库版本最大值 +#define IW_ESSID_MAX_SIZE 32 //WIFI的SSID号长度 +#define IW_ENCODING_TOKEN_MAX 32 //WIFI密锁最大字节数 +#define MAX_SERIAL_NUM 64 //最多支持的透明通道路数 +#define MAX_DDNS_NUMS 10 //9000设备最大可配ddns数 +#define MAX_DOMAIN_NAME 64 /* 最大域名长度 */ +#define MAX_EMAIL_ADDR_LEN 48 //最大email地址长度 +#define MAX_EMAIL_PWD_LEN 32 //最大email密码长度 +#define MAX_SLAVECAMERA_NUM 8 //从摄像机个数 +#define MAX_CALIB_NUM 6 //标定点的个数 +#define MAX_CALIB_NUM_EX 20 //扩展标定点的个数 +#define MAX_LEDDISPLAYINFO_LEN 1024 //最大LED屏显示长度 +#define MAX_PEOPLE_DETECTION_NUM 8 //最大人员检测区域数 +#define MAXPROGRESS 100 //回放时的最大百分率 +#define MAX_SERIALNUM 2 //8000设备支持的串口数 1-232, 2-485 +#define CARDNUM_LEN 20 //卡号长度 #define PATIENTID_LEN 64 -#define CARDNUM_LEN_OUT 32 //ⲿṹ忨ų -#define MAX_VIDEOOUT_V30 4 //9000豸Ƶ -#define MAX_VIDEOOUT 2 //8000豸Ƶ +#define CARDNUM_LEN_OUT 32 //外部结构体卡号长度 +#define MAX_VIDEOOUT_V30 4 //9000设备的视频输出数 +#define MAX_VIDEOOUT 2 //8000设备的视频输出数 -#define MAX_PRESET_V30 256 /* 9000豸ֵ̨֧Ԥõ */ -#define MAX_TRACK_V30 256 /* 9000豸ֵ̨֧ */ -#define MAX_CRUISE_V30 256 /* 9000豸ֵ̨֧Ѳ */ -#define MAX_PRESET 128 /* 8000豸ֵ̨֧Ԥõ */ -#define MAX_TRACK 128 /* 8000豸ֵ̨֧ */ -#define MAX_CRUISE 128 /* 8000豸ֵ̨֧Ѳ */ +#define MAX_PRESET_V30 256 /* 9000设备支持的云台预置点数 */ +#define MAX_TRACK_V30 256 /* 9000设备支持的云台数 */ +#define MAX_CRUISE_V30 256 /* 9000设备支持的云台巡航数 */ +#define MAX_PRESET 128 /* 8000设备支持的云台预置点数 */ +#define MAX_TRACK 128 /* 8000设备支持的云台数 */ +#define MAX_CRUISE 128 /* 8000设备支持的云台巡航数 */ -#define MAX_PRESET_V40 300 /* ֵ̨֧Ԥõ */ -#define MAX_CRUISE_POINT_NUM 128 /* ֵ֧Ѳĸ */ -#define MAX_CRUISEPOINT_NUM_V50 256 //ֵ֧Ѳĸչ +#define MAX_PRESET_V40 300 /* 云台支持的最大预置点数 */ +#define MAX_CRUISE_POINT_NUM 128 /* 最大支持的巡航点的个数 */ +#define MAX_CRUISEPOINT_NUM_V50 256 //最大支持的巡航点的个数扩展 -#define CRUISE_MAX_PRESET_NUMS 32 /* һѲѲ */ -#define MAX_FACE_PIC_NUM 30 /*ͼ*/ -#define LOCKGATE_TIME_NUM 4 //բʱθ +#define CRUISE_MAX_PRESET_NUMS 32 /* 一条巡航最多的巡航点 */ +#define MAX_FACE_PIC_NUM 30 /*人脸子图个数*/ +#define LOCKGATE_TIME_NUM 4 //锁闸时间段个数 -#define MAX_SERIAL_PORT 8 //9000豸֧232 -#define MAX_PREVIEW_MODE 8 /* 豸֧ԤģʽĿ 1,4,9,16.... */ -#define MAX_MATRIXOUT 16 /* ģ */ -#define LOG_INFO_LEN 11840 /* ־Ϣ */ -#define DESC_LEN 16 /* ַ̨ */ -#define PTZ_PROTOCOL_NUM 200 /* 9000ֵ̨֧Э */ -#define IPC_PROTOCOL_NUM 50 //ipc Э +#define MAX_SERIAL_PORT 8 //9000设备支持232串口数 +#define MAX_PREVIEW_MODE 8 /* 设备支持最大预览模式数目 1画面,4画面,9画面,16画面.... */ +#define MAX_MATRIXOUT 16 /* 最大模拟矩阵输出个数 */ +#define LOG_INFO_LEN 11840 /* 日志附加信息 */ +#define DESC_LEN 16 /* 云台描述字符串长度 */ +#define PTZ_PROTOCOL_NUM 200 /* 9000最大支持的云台协议数 */ +#define IPC_PROTOCOL_NUM 50 //ipc 协议最大个数 -#define MAX_AUDIO 1 //8000Խͨ -#define MAX_AUDIO_V30 2 //9000Խͨ -#define MAX_CHANNUM 16 //8000豸ͨ -#define MAX_ALARMIN 16 //8000豸󱨾 -#define MAX_ALARMOUT 4 //8000豸󱨾 -#define MAX_AUDIOCAST_CFG_TYPE 3 //ֹ֧㲥õ MP3MPEG2AAC -//9000 IPC -#define MAX_ANALOG_CHANNUM 32 //32ģͨ -#define MAX_ANALOG_ALARMOUT 32 //32·ģⱨ -#define MAX_ANALOG_ALARMIN 32 //32·ģⱨ +#define MAX_AUDIO 1 //8000语音对讲通道数 +#define MAX_AUDIO_V30 2 //9000语音对讲通道数 +#define MAX_CHANNUM 16 //8000设备最大通道数 +#define MAX_ALARMIN 16 //8000设备最大报警输入数 +#define MAX_ALARMOUT 4 //8000设备最大报警输出数 +#define MAX_AUDIOCAST_CFG_TYPE 3 //支持广播参数配置的类型数量 MP3、MPEG2、AAC +//9000 IPC接入 +#define MAX_ANALOG_CHANNUM 32 //最大32个模拟通道 +#define MAX_ANALOG_ALARMOUT 32 //最大32路模拟报警输出 +#define MAX_ANALOG_ALARMIN 32 //最大32路模拟报警输入 -#define MAX_IP_DEVICE 32 //IP豸 -#define MAX_IP_DEVICE_V40 64 // IP豸 64 IVMS 2000豸 -#define MAX_IP_CHANNEL 32 //IPͨ -#define MAX_IP_ALARMIN 128 //౨ -#define MAX_IP_ALARMOUT 64 //౨ -#define MAX_IP_ALARMIN_V40 4096 //౨ -#define MAX_IP_ALARMOUT_V40 4096 //౨ +#define MAX_IP_DEVICE 32 //允许接入的最大IP设备数 +#define MAX_IP_DEVICE_V40 64 // 允许接入的最大IP设备数 最多可添加64个 IVMS 2000等新设备 +#define MAX_IP_CHANNEL 32 //允许加入的最多IP通道数 +#define MAX_IP_ALARMIN 128 //允许加入的最多报警输入数 +#define MAX_IP_ALARMOUT 64 //允许加入的最多报警输出数 +#define MAX_IP_ALARMIN_V40 4096 //允许加入的最多报警输入数 +#define MAX_IP_ALARMOUT_V40 4096 //允许加入的最多报警输出数 -#define MAX_RECORD_FILE_NUM 20 // ÿɾ߿¼ļ +#define MAX_RECORD_FILE_NUM 20 // 每次删除或者刻录的最大文件数 //SDK_V31 ATM -#define MAX_ACTION_TYPE 12 //ԶЭӽΪΪ -#define MAX_ATM_PROTOCOL_NUM 256 //ÿ뷽ʽӦATMЭ -#define ATM_CUSTOM_PROTO 1025 //ԶЭ ֵΪ1025 -#define ATM_PROTOCOL_SORT 4 //ATMЭ -#define ATM_DESC_LEN 32 //ATMַ +#define MAX_ACTION_TYPE 12 //自定义协议叠加交易行为最大行为个数 +#define MAX_ATM_PROTOCOL_NUM 256 //每种输入方式对应的ATM最大协议数 +#define ATM_CUSTOM_PROTO 1025 //自定义协议 值为1025 +#define ATM_PROTOCOL_SORT 4 //ATM协议段数 +#define ATM_DESC_LEN 32 //ATM描述字符串长度 // SDK_V31 ATM -#define MAX_IPV6_LEN 64 //IPv6ַ󳤶 -#define MAX_EVENTID_LEN 64 //¼ID +#define MAX_IPV6_LEN 64 //IPv6地址最大长度 +#define MAX_EVENTID_LEN 64 //事件ID长度 -#define INVALID_VALUE_UINT32 0xffffffff //Чֵ +#define INVALID_VALUE_UINT32 0xffffffff //无效值 #define MAX_CHANNUM_V40 512 #define MAX_MULTI_AREA_NUM 24 -//SDK ¼ -#define COURSE_NAME_LEN 32 //γ -#define INSTRUCTOR_NAME_LEN 16 //ڿνʦ -#define COURSE_DESCRIPTION_LEN 256 //γϢ +//SDK 录播主机 +#define COURSE_NAME_LEN 32 //课程名称 +#define INSTRUCTOR_NAME_LEN 16 //授课教师 +#define COURSE_DESCRIPTION_LEN 256 //课程信息 -#define MAX_TIMESEGMENT_V40 16 //ÿڿϢ +#define MAX_TIMESEGMENT_V40 16 //每节课信息 -#define MAX_MIX_CHAN_NUM 16 /*Ŀǰֵ֧ͨͨ + MIC + LINE IN + 4С*/ -#define MAX_LINE_IN_CHAN_NUM 16 //line inͨ -#define MAX_MIC_CHAN_NUM 16 //MICͨ -#define INQUEST_CASE_NO_LEN 64 //Ѷų -#define INQUEST_CASE_NAME_LEN 64 //ѶƳ -#define CUSTOM_INFO_LEN 64 //ԶϢ -#define INQUEST_CASE_LEN 64 //ѶϢ +#define MAX_MIX_CHAN_NUM 16 /*目前支持的最大混音通道数,背景通道 + MIC + LINE IN + 最多4个小画面*/ +#define MAX_LINE_IN_CHAN_NUM 16 //最大line in通道数 +#define MAX_MIC_CHAN_NUM 16 //最大MIC通道数 +#define INQUEST_CASE_NO_LEN 64 //审讯案件编号长度 +#define INQUEST_CASE_NAME_LEN 64 //审讯案件名称长度 +#define CUSTOM_INFO_LEN 64 //自定义信息长度 +#define INQUEST_CASE_LEN 64 //审讯信息长度 -#define MAX_FILE_ID_LEN 128 //ͼĿļID󳤶 -#define MAX_PIC_NAME_LEN 128 //ͼƬƳ +#define MAX_FILE_ID_LEN 128 //视图库项目中文件ID的最大长度 +#define MAX_PIC_NAME_LEN 128 //图片名称长度 -/* ֵ֧ͨ ģIP֧ */ +/* 最大支持的通道数 最大模拟加上最大IP支持 */ #define MAX_CHANNUM_V30 ( MAX_ANALOG_CHANNUM + MAX_IP_CHANNEL )//64 #define MAX_ALARMOUT_V40 (MAX_IP_ALARMOUT_V40 +MAX_ANALOG_ALARMOUT) //4128 #define MAX_ALARMOUT_V30 ( MAX_ANALOG_ALARMOUT + MAX_IP_ALARMOUT )//96 #define MAX_ALARMIN_V30 ( MAX_ANALOG_ALARMIN + MAX_IP_ALARMIN )//160 #define MAX_ALARMIN_V40 (MAX_IP_ALARMIN_V40 +MAX_ANALOG_ALARMOUT) //4128 -#define MAX_ANALOG_ALARM_WITH_VOLT_LIMIT 16 //ܵѹ޶ģⱨ +#define MAX_ANALOG_ALARM_WITH_VOLT_LIMIT 16 //受电压限定的模拟报警最大输入数 -#define MAX_ROIDETECT_NUM 8 //ֵ֧ROI -#define MAX_LANERECT_NUM 5 //ʶ -#define MAX_FORTIFY_NUM 10 //󲼷 -#define MAX_INTERVAL_NUM 4 //ʱ -#define MAX_CHJC_NUM 3 //ʡݼַ -#define MAX_VL_NUM 5 //Ȧ -#define MAX_DRIVECHAN_NUM 16 //󳵵 -#define MAX_COIL_NUM 3 //Ȧ -#define MAX_SIGNALLIGHT_NUM 6 //źŵƸ +#define MAX_ROIDETECT_NUM 8 //支持的ROI区域数 +#define MAX_LANERECT_NUM 5 //最大车牌识别区域数 +#define MAX_FORTIFY_NUM 10 //最大布防个数 +#define MAX_INTERVAL_NUM 4 //最大时间间隔个数 +#define MAX_CHJC_NUM 3 //最大车辆省份简称字符个数 +#define MAX_VL_NUM 5 //最大虚拟线圈个数 +#define MAX_DRIVECHAN_NUM 16 //最大车道数 +#define MAX_COIL_NUM 3 //最大线圈个数 +#define MAX_SIGNALLIGHT_NUM 6 //最大信号灯个数 #define LEN_16 16 #define LEN_32 32 #define LEN_64 64 #define LEN_31 31 -#define MAX_LINKAGE_CHAN_NUM 16 //ͨ -#define MAX_CABINET_COUNT 8 //ֻ֧ +#define MAX_LINKAGE_CHAN_NUM 16 //报警联动的通道的最大数量 +#define MAX_CABINET_COUNT 8 //最大支持机柜数量 #define MAX_ID_LEN 48 #define MAX_PARKNO_LEN 16 #define MAX_ALARMREASON_LEN 32 -#define MAX_UPGRADE_INFO_LEN 48 //ȡļƥϢ(ģ) -#define MAX_CUSTOMDIR_LEN 32 //ԶĿ¼ -#define MAX_LED_INFO_LEN 512//LEDݳ -#define MAX_VOICE_INFO_LEN 128//ݳ -#define MAX_LITLE_INFO_LEN 64 //ֽƱݳ -#define MAX_CUSTOM_INFO_LEN 64 //ֽƱԶϢݳ -#define MAX_PHONE_NUM_LEN 16 //ϵ绰ݳ -#define MAX_APP_SERIALNUM_LEN 32 //Ӧкų +#define MAX_UPGRADE_INFO_LEN 48 //获取升级文件匹配信息(模糊升级) +#define MAX_CUSTOMDIR_LEN 32 //自定义目录长度 +#define MAX_LED_INFO_LEN 512//LED内容长度 +#define MAX_VOICE_INFO_LEN 128//语音播报内容长度 +#define MAX_LITLE_INFO_LEN 64 //纸票标题内容长度 +#define MAX_CUSTOM_INFO_LEN 64 //纸票自定义信息内容长度 +#define MAX_PHONE_NUM_LEN 16 //联系电话内容长度 +#define MAX_APP_SERIALNUM_LEN 32 //应用序列号长度 #define AUDIOTALKTYPE_G722 0 #define AUDIOTALKTYPE_G711_MU 1 @@ -387,487 +387,487 @@ #define AUDIO_PACKET 10 //audio packet #define PRIVT_PACKET 11 //private packet //E frame -#define HIK_H264_E_FRAME (1 << 6) // ǰE֡,P֡Ҳûõ -#define MAX_TRANSPARENT_CHAN_NUM 4 //ÿ͸ͨ -#define MAX_TRANSPARENT_ACCESS_NUM 4 //ÿ˿ +#define HIK_H264_E_FRAME (1 << 6) // 以前E帧不用了,深P帧也没用到 +#define MAX_TRANSPARENT_CHAN_NUM 4 //每个串口允许建立的最大透明通道数 +#define MAX_TRANSPARENT_ACCESS_NUM 4 //每个监听端口允许接入的最大主机数 //ITS -#define MAX_PARKING_STATUS 8 //λ״̬ 0޳1г2ѹ(ȼ), 3⳵λ -#define MAX_PARKING_NUM 4 //һͨ4λ (ҳλ 03) +#define MAX_PARKING_STATUS 8 //车位状态 0代表无车,1代表有车,2代表压线(优先级最高), 3特殊车位 +#define MAX_PARKING_NUM 4 //一个通道最大4个车位 (从左到右车位 数组0~3) -#define MAX_ITS_SCENE_NUM 16 //󳡾 -#define MAX_SCENE_TIMESEG_NUM 16 //󳡾ʱ -#define MAX_IVMS_IP_CHANNEL 128 //IPͨ -#define DEVICE_ID_LEN 48 //豸ų -#define MONITORSITE_ID_LEN 48 //ʾų -#define MAX_AUXAREA_NUM 16 //Ŀ -#define MAX_SLAVE_CHANNEL_NUM 16 //ͨ -#define MAX_DEVDESC_LEN 64 //豸Ϣ󳤶 -#define ILLEGAL_LEN 32 //Υ볤 -#define MAX_TRUCK_AXLE_NUM 10 // -#define MAX_CATEGORY_LEN 8 //ƸϢַ -#define SERIAL_NO_LEN 16 //λ +#define MAX_ITS_SCENE_NUM 16 //最大场景数量 +#define MAX_SCENE_TIMESEG_NUM 16 //最大场景时间段数量 +#define MAX_IVMS_IP_CHANNEL 128 //最大IP通道数 +#define DEVICE_ID_LEN 48 //设备编号长度 +#define MONITORSITE_ID_LEN 48 //显示点编号长度 +#define MAX_AUXAREA_NUM 16 //辅助区域最大数目 +#define MAX_SLAVE_CHANNEL_NUM 16 //最大从通道数量 +#define MAX_DEVDESC_LEN 64 //设备描述信息最大长度 +#define ILLEGAL_LEN 32 //违法代码长度 +#define MAX_TRUCK_AXLE_NUM 10 //货车轴最大数 +#define MAX_CATEGORY_LEN 8 //车牌附加信息最大字符 +#define SERIAL_NO_LEN 16 //泊车位编号 -#define MAX_SECRETKEY_LEN 512 //Կ -#define MAX_INDEX_CODE_LEN 64 //ų -#define MAX_ILLEGAL_LEN 64 //Υַ -#define CODE_LEN 64 //Ȩ -#define ALIAS_LEN 32 //ֻ +#define MAX_SECRETKEY_LEN 512 //最大秘钥长度 +#define MAX_INDEX_CODE_LEN 64 //最大序号长度 +#define MAX_ILLEGAL_LEN 64 //违法代码最大字符长度 +#define CODE_LEN 64 //授权码 +#define ALIAS_LEN 32 //别名,只读 #define MAX_SCH_TASKS_NUM 10 -#define MAX_SERVERID_LEN 64 //IDij -#define MAX_SERVERDOMAIN_LEN 128 //󳤶 -#define MAX_AUTHENTICATEID_LEN 64 //֤ID󳤶 -#define MAX_AUTHENTICATEPASSWD_LEN 32 //֤󳤶 -#define MAX_SERVERNAME_LEN 64 //û -#define MAX_COMPRESSIONID_LEN 64 //ID󳤶 -#define MAX_SIPSERVER_ADDRESS_LEN 128 //SIPַ֧IPַ -//ѹ߱ -#define MAX_PlATE_NO_LEN 32 //ƺ󳤶 2013-09-27 -#define UPNP_PORT_NUM 12 //upnp˿ӳ˿Ŀ +#define MAX_SERVERID_LEN 64 //最大服务器ID的长度 +#define MAX_SERVERDOMAIN_LEN 128 //服务器域名最大长度 +#define MAX_AUTHENTICATEID_LEN 64 //认证ID最大长度 +#define MAX_AUTHENTICATEPASSWD_LEN 32 //认证密码最大长度 +#define MAX_SERVERNAME_LEN 64 //最大服务器用户名 +#define MAX_COMPRESSIONID_LEN 64 //编码ID的最大长度 +#define MAX_SIPSERVER_ADDRESS_LEN 128 //SIP服务器地址支持域名和IP地址 +//压线报警 +#define MAX_PlATE_NO_LEN 32 //车牌号码最大长度 2013-09-27 +#define UPNP_PORT_NUM 12 //upnp端口映射端口数目 -#define MAX_PEOPLE_DETECTION_NUM 8 //Ա +#define MAX_PEOPLE_DETECTION_NUM 8 //最大人员检测区域数 -#define MAX_NOTICE_NUMBER_LEN 32 //󳤶 -#define MAX_NOTICE_THEME_LEN 64 //󳤶 -#define MAX_NOTICE_DETAIL_LEN 1024 //󳤶 -#define MAX_NOTICE_PIC_NUM 6 //ϢͼƬ -#define MAX_DEV_NUMBER_LEN 32 //豸󳤶 -#define LOCK_NAME_LEN 32 // +#define MAX_NOTICE_NUMBER_LEN 32 //公告编号最大长度 +#define MAX_NOTICE_THEME_LEN 64 //公告主题最大长度 +#define MAX_NOTICE_DETAIL_LEN 1024 //公告详情最大长度 +#define MAX_NOTICE_PIC_NUM 6 //公告信息最大图片数量 +#define MAX_DEV_NUMBER_LEN 32 //设备编号最大长度 +#define LOCK_NAME_LEN 32 //锁名称 -#define HOLIDAY_GROUP_NAME_LEN 32 //Ƴ -#define MAX_HOLIDAY_PLAN_NUM 16 //ռƻ -#define TEMPLATE_NAME_LEN 32 //ƻģƳ -#define MAX_HOLIDAY_GROUP_NUM 16 //ƻģ -#define DOOR_NAME_LEN 32 // -#define STRESS_PASSWORD_LEN 8 //в볤 -#define SUPER_PASSWORD_LEN 8 //в볤 -#define GROUP_NAME_LEN 32 //ȺƳ -#define GROUP_COMBINATION_NUM 8 //Ⱥ -#define MULTI_CARD_GROUP_NUM 4 //ؿ -#define ACS_CARD_NO_LEN 32 //Žų -#define NET_SDK_EMPLOYEE_NO_LEN 32 //ų -#define NET_SDK_UUID_LEN 36 //UUID -#define NET_SDK_EHOME_KEY_LEN 32 //EHome Key -#define CARD_PASSWORD_LEN 8 //볤 -#define MAX_DOOR_NUM 32 // -#define MAX_CARD_RIGHT_PLAN_NUM 4 //Ȩƻ -#define MAX_GROUP_NUM_128 128 //Ⱥ -#define MAX_CARD_READER_NUM 64 // -#define MAX_SNEAK_PATH_NODE 8 // -#define MAX_MULTI_DOOR_INTERLOCK_GROUP 8 //Ż -#define MAX_INTER_LOCK_DOOR_NUM 8 //һŻ -#define MAX_CASE_SENSOR_NUM 8 //case sensor -#define MAX_DOOR_NUM_256 256 // -#define MAX_READER_ROUTE_NUM 16 //ˢѭ· -#define MAX_FINGER_PRINT_NUM 10 //ָƸ -#define MAX_CARD_READER_NUM_512 512 // -#define NET_SDK_MULTI_CARD_GROUP_NUM_20 20 //ؿ +#define HOLIDAY_GROUP_NAME_LEN 32 //假日组名称长度 +#define MAX_HOLIDAY_PLAN_NUM 16 //假日组最大假日计划数 +#define TEMPLATE_NAME_LEN 32 //计划模板名称长度 +#define MAX_HOLIDAY_GROUP_NUM 16 //计划模板最大假日组数 +#define DOOR_NAME_LEN 32 //门名称 +#define STRESS_PASSWORD_LEN 8 //胁迫密码长度 +#define SUPER_PASSWORD_LEN 8 //胁迫密码长度 +#define GROUP_NAME_LEN 32 //群组名称长度 +#define GROUP_COMBINATION_NUM 8 //群组组合数 +#define MULTI_CARD_GROUP_NUM 4 //单门最大多重卡组数 +#define ACS_CARD_NO_LEN 32 //门禁卡号长度 +#define NET_SDK_EMPLOYEE_NO_LEN 32 //工号长度 +#define NET_SDK_UUID_LEN 36 //UUID长度 +#define NET_SDK_EHOME_KEY_LEN 32 //EHome Key长度 +#define CARD_PASSWORD_LEN 8 //卡密码长度 +#define MAX_DOOR_NUM 32 //最大门数 +#define MAX_CARD_RIGHT_PLAN_NUM 4 //卡权限最大计划个数 +#define MAX_GROUP_NUM_128 128 //最大群组数 +#define MAX_CARD_READER_NUM 64 //最大读卡器数 +#define MAX_SNEAK_PATH_NODE 8 //最大后续读卡器数 +#define MAX_MULTI_DOOR_INTERLOCK_GROUP 8 //最大多门互锁组数 +#define MAX_INTER_LOCK_DOOR_NUM 8 //一个多门互锁组中最大互锁门数 +#define MAX_CASE_SENSOR_NUM 8 //最大case sensor触发器数 +#define MAX_DOOR_NUM_256 256 //最大门数 +#define MAX_READER_ROUTE_NUM 16 //最大刷卡循序路径 +#define MAX_FINGER_PRINT_NUM 10 //最大指纹个数 +#define MAX_CARD_READER_NUM_512 512 //最大读卡器数 +#define NET_SDK_MULTI_CARD_GROUP_NUM_20 20 //单门最大多重卡组数 -#define ERROR_MSG_LEN 32 //·Ϣ -#define MAX_DOOR_CODE_LEN 8 //볤 -#define MAX_LOCK_CODE_LEN 8 //볤 -#define PER_RING_PORT_NUM 2 //ÿĶ˿ -#define SENSORNAME_LEN 32 //Ƴ -#define MAX_SENSORDESCR_LEN 64 // -#define MAX_DNS_SERVER_NUM 2 //DNS -#define SENSORUNIT_LEN 32 //λ +#define ERROR_MSG_LEN 32 //下发错误信息 +#define MAX_DOOR_CODE_LEN 8 //房间代码长度 +#define MAX_LOCK_CODE_LEN 8 //锁代码长度 +#define PER_RING_PORT_NUM 2 //每个环的端口数 +#define SENSORNAME_LEN 32 //传感器名称长度 +#define MAX_SENSORDESCR_LEN 64 //传感器描述长度 +#define MAX_DNS_SERVER_NUM 2 //最大DNS个数 +#define SENSORUNIT_LEN 32 //最大单位长度 -#define WEP_KEY_MAX_SIZE 32 //WEPԿ -#define WEP_KEY_MAX_NUM 4 //WEPԿ -#define WPA_KEY_MAX_SIZE 64 //WPAԿ +#define WEP_KEY_MAX_SIZE 32 //最大WEP加密密钥长度 +#define WEP_KEY_MAX_NUM 4 //最大WEP加密密钥个数 +#define WPA_KEY_MAX_SIZE 64 //最大WPA共享密钥长度 -#define MAX_SINGLE_FTPPICNAME_LEN 20 //󵥸FTPͨ -#define MAX_CAMNAME_LEN 32 //ͨ -#define MAX_FTPNAME_NUM 12 //TFP +#define MAX_SINGLE_FTPPICNAME_LEN 20 //最大单个FTP通道名称 +#define MAX_CAMNAME_LEN 32 //最大通道名称 +#define MAX_FTPNAME_NUM 12 //TFP名称数 -#define MAX_IDCODE_LEN 128 // ʶ󳤶 -#define MAX_VERSIIN_LEN 64 //汾󳤶 -#define MAX_IDCODE_NUM 32 // ʶ +#define MAX_IDCODE_LEN 128 // 识别码最大长度 +#define MAX_VERSIIN_LEN 64 //版本最大长度 +#define MAX_IDCODE_NUM 32 // 识别码个数 #define SDK_LEN_2048 2048 #define SDK_MAX_IP_LEN 48 -#define RECT_POINT_NUM 4 //ν +#define RECT_POINT_NUM 4 //矩形角数 -#define MAX_PUBLIC_KEY_LEN 512 // Կ -#define CHIP_SERIALNO_LEN 32 //оƬкų -#define ENCRYPT_DEV_ID_LEN 20 //豸ID +#define MAX_PUBLIC_KEY_LEN 512 // 最大公钥长度 +#define CHIP_SERIALNO_LEN 32 //加密芯片序列号长度 +#define ENCRYPT_DEV_ID_LEN 20 //设备ID长度 -//MCUص -#define MAX_SEARCH_ID_LEN 36 //ʶ󳤶 -#define TERMINAL_NAME_LEN 64 //նƳ -#define MAX_URL_LEN 512 //URL -#define REGISTER_NAME_LEN 64 //նעGK󳤶 +//MCU相关的 +#define MAX_SEARCH_ID_LEN 36 //搜索标识符最大长度 +#define TERMINAL_NAME_LEN 64 //终端名称长度 +#define MAX_URL_LEN 512 //URL长度 +#define REGISTER_NAME_LEN 64 //终端注册GK名称最大长度 -// -#define MAX_PORT_NUM 64 //˿ -#define MAX_SINGLE_CARD_PORT_NO 4 //շ˿ -#define MAX_FUNC_CARD_NUM 32 //շܿ -#define MAX_FC_CARD_NUM 33 //շ -#define MAX_REMARKS_LEN 128 //ע󳤶 -#define MAX_OUTPUT_PORT_NUM 32 //·˿ -#define MAX_SINGLE_PORT_RECVCARD_NUM 64 //˿ӵտ -#define MAX_GAMMA_X_VALUE 256 //GAMMAXȡֵ -#define NET_DEV_NAME_LEN 64 //豸Ƴ -#define NET_DEV_TYPE_NAME_LEN 64 //豸Ƴ -#define ABNORMAL_INFO_NUM 4 //쳣ʱθ +//光纤 +#define MAX_PORT_NUM 64 //最大端口数 +#define MAX_SINGLE_CARD_PORT_NO 4 //光纤收发器单卡最大端口数 +#define MAX_FUNC_CARD_NUM 32 //光纤收发器最大功能卡数 +#define MAX_FC_CARD_NUM 33 //光纤收发器最大卡数 +#define MAX_REMARKS_LEN 128 //注释最大长度 +#define MAX_OUTPUT_PORT_NUM 32 //单路输出包含的最大输出端口数 +#define MAX_SINGLE_PORT_RECVCARD_NUM 64 //单个端口连接的最大接收卡数 +#define MAX_GAMMA_X_VALUE 256 //GAMMA表X轴取值个数 +#define NET_DEV_NAME_LEN 64 //设备名称长度 +#define NET_DEV_TYPE_NAME_LEN 64 //设备类型名称长度 +#define ABNORMAL_INFO_NUM 4 //异常时间段个数 -#define PLAYLIST_NAME_LEN 64 //űƳ -#define PLAYLIST_ITEM_NUM 64 //Ŀ +#define PLAYLIST_NAME_LEN 64 //播放表名称长度 +#define PLAYLIST_ITEM_NUM 64 //播放项数目 -// -#define NET_SDK_MAX_LOGIN_PASSWORD_LEN 128 //û¼󳤶 -#define NET_SDK_MAX_ANSWER_LEN 256 //ȫ󳤶 -#define NET_SDK_MAX_QUESTION_LIST_LEN 32//ȫб󳤶 +//后端相关 +#define NET_SDK_MAX_LOGIN_PASSWORD_LEN 128 //用户登录密码最大长度 +#define NET_SDK_MAX_ANSWER_LEN 256 //安全问题答案最大长度 +#define NET_SDK_MAX_QUESTION_LIST_LEN 32//安全问题列表最大长度 -#define MAX_SCREEN_AREA_NUM 128 //Ļ -#define NET_SDK_MAX_THERMOMETRYALGNAME 128//㷨汾󳤶 -#define NET_SDK_MAX_SHIPSALGNAME 128//ֻ㷨汾󳤶 -#define NET_SDK_MAX_FIRESALGNAME 128//㷨汾󳤶 +#define MAX_SCREEN_AREA_NUM 128 //屏幕区域最大数量 +#define NET_SDK_MAX_THERMOMETRYALGNAME 128//测温算法库版本最大长度 +#define NET_SDK_MAX_SHIPSALGNAME 128//船只算法库版本最大长度 +#define NET_SDK_MAX_FIRESALGNAME 128//火点算法库版本最大长度 -#define MAX_PASSPORT_NUM_LEN 16 //֤ų -#define MAX_PASSPORT_INFO_LEN 128 //ͨϢ -#define MAX_PASSPORT_NAME_LEN 64 // -#define MAX_PASSPORT_MONITOR_LEN 1024 //ռ໤Ϣ -#define MAX_NATIONALITY_LEN 16 //չ -#define MAX_PASSPORT_TYPE_LEN 4 //֤ͳ +#define MAX_PASSPORT_NUM_LEN 16 //最大护照证件号长度 +#define MAX_PASSPORT_INFO_LEN 128 //最大护照通用信息长度 +#define MAX_PASSPORT_NAME_LEN 64 //最大护照姓名长度 +#define MAX_PASSPORT_MONITOR_LEN 1024 //最大护照监护信息长度 +#define MAX_NATIONALITY_LEN 16 //最大护照国籍长度 +#define MAX_PASSPORT_TYPE_LEN 4 //最大护照证件类型长度 -/*******************ȫִ begin**********************/ -#define NET_DVR_NOERROR 0 //ûд -#define NET_DVR_PASSWORD_ERROR 1 //û -#define NET_DVR_NOENOUGHPRI 2 //Ȩ޲ -#define NET_DVR_NOINIT 3 //ûгʼ -#define NET_DVR_CHANNEL_ERROR 4 //ͨŴ -#define NET_DVR_OVER_MAXLINK 5 //ӵDVRĿͻ˸ -#define NET_DVR_VERSIONNOMATCH 6 //汾ƥ -#define NET_DVR_NETWORK_FAIL_CONNECT 7 //ӷʧ -#define NET_DVR_NETWORK_SEND_ERROR 8 //ʧ -#define NET_DVR_NETWORK_RECV_ERROR 9 //ӷʧ -#define NET_DVR_NETWORK_RECV_TIMEOUT 10 //ӷݳʱ -#define NET_DVR_NETWORK_ERRORDATA 11 //͵ -#define NET_DVR_ORDER_ERROR 12 //ô -#define NET_DVR_OPERNOPERMIT 13 //޴Ȩ -#define NET_DVR_COMMANDTIMEOUT 14 //DVRִгʱ -#define NET_DVR_ERRORSERIALPORT 15 //ںŴ -#define NET_DVR_ERRORALARMPORT 16 //˿ڴ -#define NET_DVR_PARAMETER_ERROR 17 // -#define NET_DVR_CHAN_EXCEPTION 18 //ͨڴ״̬ -#define NET_DVR_NODISK 19 //ûӲ -#define NET_DVR_ERRORDISKNUM 20 //Ӳ̺Ŵ -#define NET_DVR_DISK_FULL 21 //Ӳ -#define NET_DVR_DISK_ERROR 22 //Ӳ̳ -#define NET_DVR_NOSUPPORT 23 //֧ -#define NET_DVR_BUSY 24 //æ -#define NET_DVR_MODIFY_FAIL 25 //޸IJɹ -#define NET_DVR_PASSWORD_FORMAT_ERROR 26 //ʽȷ -#define NET_DVR_DISK_FORMATING 27 //Ӳڸʽ -#define NET_DVR_DVRNORESOURCE 28 //DVRԴ -#define NET_DVR_DVROPRATEFAILED 29 //DVRʧ -#define NET_DVR_OPENHOSTSOUND_FAIL 30 //PCʧ -#define NET_DVR_DVRVOICEOPENED 31 //Խռ -#define NET_DVR_TIMEINPUTERROR 32 //ʱ벻ȷ -#define NET_DVR_NOSPECFILE 33 //طʱûָļ -#define NET_DVR_CREATEFILE_ERROR 34 //ļ -#define NET_DVR_FILEOPENFAIL 35 //ļ -#define NET_DVR_OPERNOTFINISH 36 //ϴεIJû -#define NET_DVR_GETPLAYTIMEFAIL 37 //ȡǰŵʱ -#define NET_DVR_PLAYFAIL 38 //ų -#define NET_DVR_FILEFORMAT_ERROR 39 //ļʽȷ -#define NET_DVR_DIR_ERROR 40 //· -#define NET_DVR_ALLOC_RESOURCE_ERROR 41 //Դ -#define NET_DVR_AUDIO_MODE_ERROR 42 //ģʽ -#define NET_DVR_NOENOUGH_BUF 43 //̫С -#define NET_DVR_CREATESOCKET_ERROR 44 //SOCKET -#define NET_DVR_SETSOCKET_ERROR 45 //SOCKET -#define NET_DVR_MAX_NUM 46 //ﵽ -#define NET_DVR_USERNOTEXIST 47 //û -#define NET_DVR_WRITEFLASHERROR 48 //дFLASH -#define NET_DVR_UPGRADEFAIL 49 //DVRʧ -#define NET_DVR_CARDHAVEINIT 50 //뿨Ѿʼ -#define NET_DVR_PLAYERFAILED 51 //òſijʧ -#define NET_DVR_MAX_USERNUM 52 //豸ûﵽ -#define NET_DVR_GETLOCALIPANDMACFAIL 53 //ÿͻ˵IPַַʧ -#define NET_DVR_NOENCODEING 54 //ͨûб -#define NET_DVR_IPMISMATCH 55 //IPַƥ -#define NET_DVR_MACMISMATCH 56 //MACַƥ -#define NET_DVR_UPGRADELANGMISMATCH 57 //ļԲƥ -#define NET_DVR_MAX_PLAYERPORT 58 //·ﵽ -#define NET_DVR_NOSPACEBACKUP 59 //豸û㹻ռб -#define NET_DVR_NODEVICEBACKUP 60 //ûҵָı豸 -#define NET_DVR_PICTURE_BITS_ERROR 61 //ͼλ24ɫ -#define NET_DVR_PICTURE_DIMENSION_ERROR 62 //ͼƬ*ޣ 128*256 -#define NET_DVR_PICTURE_SIZ_ERROR 63 //ͼƬСޣ100K -#define NET_DVR_LOADPLAYERSDKFAILED 64 //뵱ǰĿ¼Player Sdk -#define NET_DVR_LOADPLAYERSDKPROC_ERROR 65 //ҲPlayer Sdkij -#define NET_DVR_LOADDSSDKFAILED 66 //뵱ǰĿ¼DSsdk -#define NET_DVR_LOADDSSDKPROC_ERROR 67 //ҲDsSdkij -#define NET_DVR_DSSDK_ERROR 68 //ӲDsSdkijʧ -#define NET_DVR_VOICEMONOPOLIZE 69 //ռ -#define NET_DVR_JOINMULTICASTFAILED 70 //ಥʧ -#define NET_DVR_CREATEDIR_ERROR 71 //־ļĿ¼ʧ -#define NET_DVR_BINDSOCKET_ERROR 72 //׽ʧ -#define NET_DVR_SOCKETCLOSE_ERROR 73 //socketжϣ˴ͨжϻĿĵزɴ -#define NET_DVR_USERID_ISUSING 74 //עʱûIDڽij -#define NET_DVR_SOCKETLISTEN_ERROR 75 //ʧ -#define NET_DVR_PROGRAM_EXCEPTION 76 //쳣 -#define NET_DVR_WRITEFILE_FAILED 77 //дļʧ -#define NET_DVR_FORMAT_READONLY 78 //ֹʽֻӲ -#define NET_DVR_WITHSAMEUSERNAME 79 //ûýṹдͬû -#define NET_DVR_DEVICETYPE_ERROR 80 /*ʱ豸ͺŲƥ*/ -#define NET_DVR_LANGUAGE_ERROR 81 /*ʱԲƥ*/ -#define NET_DVR_PARAVERSION_ERROR 82 /*ʱ汾ƥ*/ -#define NET_DVR_IPCHAN_NOTALIVE 83 /*ԤʱIPͨ*/ -#define NET_DVR_RTSP_SDK_ERROR 84 /*ظIPCͨѶStreamTransClient.dllʧ*/ -#define NET_DVR_CONVERT_SDK_ERROR 85 /*תʧ*/ -#define NET_DVR_IPC_COUNT_OVERFLOW 86 /*ipͨ*/ -#define NET_DVR_MAX_ADD_NUM 87 /*ӱǩ(һļƬ64)ȸﵽ*/ -#define NET_DVR_PARAMMODE_ERROR 88 //ͼǿǣģʽӲʱͻ˽ʱֵ -#define NET_DVR_CODESPITTER_OFFLINE 89 //Ƶۺƽ̨ -#define NET_DVR_BACKUP_COPYING 90 //豸ڱ -#define NET_DVR_CHAN_NOTSUPPORT 91 // ָ֧ͨò -#define NET_DVR_CALLINEINVALID 92 // ߶λ̫л򳤶߲б -#define NET_DVR_CALCANCELCONFLICT 93 // ȡ궨ͻ˹ȫֵʵʴСߴ -#define NET_DVR_CALPOINTOUTRANGE 94 // 궨㳬Χ -#define NET_DVR_FILTERRECTINVALID 95 // ߴҪ -#define NET_DVR_DDNS_DEVOFFLINE 96 //豸ûעᵽddns -#define NET_DVR_DDNS_INTER_ERROR 97 //DDNS ڲ -#define NET_DVR_FUNCTION_NOT_SUPPORT_OS 98 //˹ָ֧ܲòϵͳ -#define NET_DVR_DEC_CHAN_REBIND 99 //ͨʾ -#define NET_DVR_INTERCOM_SDK_ERROR 100 //صǰĿ¼µԽʧ -#define NET_DVR_NO_CURRENT_UPDATEFILE 101 //ûȷ -#define NET_DVR_USER_NOT_SUCC_LOGIN 102 //ûû½ɹ -#define NET_DVR_USE_LOG_SWITCH_FILE 103 //ʹ־ļ -#define NET_DVR_POOL_PORT_EXHAUST 104 //˿ڳڰ󶨵Ķ˿Ѻľ -#define NET_DVR_PACKET_TYPE_NOT_SUPPORT 105 //װʽ -#define NET_DVR_IPPARA_IPID_ERROR 106 //IPʱIPID +/*******************全局错误码 begin**********************/ +#define NET_DVR_NOERROR 0 //没有错误 +#define NET_DVR_PASSWORD_ERROR 1 //用户名密码错误 +#define NET_DVR_NOENOUGHPRI 2 //权限不足 +#define NET_DVR_NOINIT 3 //没有初始化 +#define NET_DVR_CHANNEL_ERROR 4 //通道号错误 +#define NET_DVR_OVER_MAXLINK 5 //连接到DVR的客户端个数超过最大 +#define NET_DVR_VERSIONNOMATCH 6 //版本不匹配 +#define NET_DVR_NETWORK_FAIL_CONNECT 7 //连接服务器失败 +#define NET_DVR_NETWORK_SEND_ERROR 8 //向服务器发送失败 +#define NET_DVR_NETWORK_RECV_ERROR 9 //从服务器接收数据失败 +#define NET_DVR_NETWORK_RECV_TIMEOUT 10 //从服务器接收数据超时 +#define NET_DVR_NETWORK_ERRORDATA 11 //传送的数据有误 +#define NET_DVR_ORDER_ERROR 12 //调用次序错误 +#define NET_DVR_OPERNOPERMIT 13 //无此权限 +#define NET_DVR_COMMANDTIMEOUT 14 //DVR命令执行超时 +#define NET_DVR_ERRORSERIALPORT 15 //串口号错误 +#define NET_DVR_ERRORALARMPORT 16 //报警端口错误 +#define NET_DVR_PARAMETER_ERROR 17 //参数错误 +#define NET_DVR_CHAN_EXCEPTION 18 //服务器通道处于错误状态 +#define NET_DVR_NODISK 19 //没有硬盘 +#define NET_DVR_ERRORDISKNUM 20 //硬盘号错误 +#define NET_DVR_DISK_FULL 21 //服务器硬盘满 +#define NET_DVR_DISK_ERROR 22 //服务器硬盘出错 +#define NET_DVR_NOSUPPORT 23 //服务器不支持 +#define NET_DVR_BUSY 24 //服务器忙 +#define NET_DVR_MODIFY_FAIL 25 //服务器修改不成功 +#define NET_DVR_PASSWORD_FORMAT_ERROR 26 //密码输入格式不正确 +#define NET_DVR_DISK_FORMATING 27 //硬盘正在格式化,不能启动操作 +#define NET_DVR_DVRNORESOURCE 28 //DVR资源不足 +#define NET_DVR_DVROPRATEFAILED 29 //DVR操作失败 +#define NET_DVR_OPENHOSTSOUND_FAIL 30 //打开PC声音失败 +#define NET_DVR_DVRVOICEOPENED 31 //服务器语音对讲被占用 +#define NET_DVR_TIMEINPUTERROR 32 //时间输入不正确 +#define NET_DVR_NOSPECFILE 33 //回放时服务器没有指定的文件 +#define NET_DVR_CREATEFILE_ERROR 34 //创建文件出错 +#define NET_DVR_FILEOPENFAIL 35 //打开文件出错 +#define NET_DVR_OPERNOTFINISH 36 //上次的操作还没有完成 +#define NET_DVR_GETPLAYTIMEFAIL 37 //获取当前播放的时间出错 +#define NET_DVR_PLAYFAIL 38 //播放出错 +#define NET_DVR_FILEFORMAT_ERROR 39 //文件格式不正确 +#define NET_DVR_DIR_ERROR 40 //路径错误 +#define NET_DVR_ALLOC_RESOURCE_ERROR 41 //资源分配错误 +#define NET_DVR_AUDIO_MODE_ERROR 42 //声卡模式错误 +#define NET_DVR_NOENOUGH_BUF 43 //缓冲区太小 +#define NET_DVR_CREATESOCKET_ERROR 44 //创建SOCKET出错 +#define NET_DVR_SETSOCKET_ERROR 45 //设置SOCKET出错 +#define NET_DVR_MAX_NUM 46 //个数达到最大 +#define NET_DVR_USERNOTEXIST 47 //用户不存在 +#define NET_DVR_WRITEFLASHERROR 48 //写FLASH出错 +#define NET_DVR_UPGRADEFAIL 49 //DVR升级失败 +#define NET_DVR_CARDHAVEINIT 50 //解码卡已经初始化过 +#define NET_DVR_PLAYERFAILED 51 //调用播放库中某个函数失败 +#define NET_DVR_MAX_USERNUM 52 //设备端用户数达到最大 +#define NET_DVR_GETLOCALIPANDMACFAIL 53 //获得客户端的IP地址或物理地址失败 +#define NET_DVR_NOENCODEING 54 //该通道没有编码 +#define NET_DVR_IPMISMATCH 55 //IP地址不匹配 +#define NET_DVR_MACMISMATCH 56 //MAC地址不匹配 +#define NET_DVR_UPGRADELANGMISMATCH 57 //升级文件语言不匹配 +#define NET_DVR_MAX_PLAYERPORT 58 //播放器路数达到最大 +#define NET_DVR_NOSPACEBACKUP 59 //备份设备中没有足够空间进行备份 +#define NET_DVR_NODEVICEBACKUP 60 //没有找到指定的备份设备 +#define NET_DVR_PICTURE_BITS_ERROR 61 //图像素位数不符,限24色 +#define NET_DVR_PICTURE_DIMENSION_ERROR 62 //图片高*宽超限, 限128*256 +#define NET_DVR_PICTURE_SIZ_ERROR 63 //图片大小超限,限100K +#define NET_DVR_LOADPLAYERSDKFAILED 64 //载入当前目录下Player Sdk出错 +#define NET_DVR_LOADPLAYERSDKPROC_ERROR 65 //找不到Player Sdk中某个函数入口 +#define NET_DVR_LOADDSSDKFAILED 66 //载入当前目录下DSsdk出错 +#define NET_DVR_LOADDSSDKPROC_ERROR 67 //找不到DsSdk中某个函数入口 +#define NET_DVR_DSSDK_ERROR 68 //调用硬解码库DsSdk中某个函数失败 +#define NET_DVR_VOICEMONOPOLIZE 69 //声卡被独占 +#define NET_DVR_JOINMULTICASTFAILED 70 //加入多播组失败 +#define NET_DVR_CREATEDIR_ERROR 71 //建立日志文件目录失败 +#define NET_DVR_BINDSOCKET_ERROR 72 //绑定套接字失败 +#define NET_DVR_SOCKETCLOSE_ERROR 73 //socket连接中断,此错误通常是由于连接中断或目的地不可达 +#define NET_DVR_USERID_ISUSING 74 //注销时用户ID正在进行某操作 +#define NET_DVR_SOCKETLISTEN_ERROR 75 //监听失败 +#define NET_DVR_PROGRAM_EXCEPTION 76 //程序异常 +#define NET_DVR_WRITEFILE_FAILED 77 //写文件失败 +#define NET_DVR_FORMAT_READONLY 78 //禁止格式化只读硬盘 +#define NET_DVR_WITHSAMEUSERNAME 79 //用户配置结构中存在相同的用户名 +#define NET_DVR_DEVICETYPE_ERROR 80 /*导入参数时设备型号不匹配*/ +#define NET_DVR_LANGUAGE_ERROR 81 /*导入参数时语言不匹配*/ +#define NET_DVR_PARAVERSION_ERROR 82 /*导入参数时软件版本不匹配*/ +#define NET_DVR_IPCHAN_NOTALIVE 83 /*预览时外接IP通道不在线*/ +#define NET_DVR_RTSP_SDK_ERROR 84 /*加载高清IPC通讯库StreamTransClient.dll失败*/ +#define NET_DVR_CONVERT_SDK_ERROR 85 /*加载转码库失败*/ +#define NET_DVR_IPC_COUNT_OVERFLOW 86 /*超出最大的ip接入通道数*/ +#define NET_DVR_MAX_ADD_NUM 87 /*添加标签(一个文件片段64)等个数达到最大*/ +#define NET_DVR_PARAMMODE_ERROR 88 //图像增强仪,参数模式错误(用于硬件设置时,客户端进行软件设置时错误值) +#define NET_DVR_CODESPITTER_OFFLINE 89 //视频综合平台,码分器不在线 +#define NET_DVR_BACKUP_COPYING 90 //设备正在备份 +#define NET_DVR_CHAN_NOTSUPPORT 91 // 通道不支持该操作 +#define NET_DVR_CALLINEINVALID 92 // 高度线位置太集中或长度线不够倾斜 +#define NET_DVR_CALCANCELCONFLICT 93 // 取消标定冲突,如果设置了规则及全局的实际大小尺寸过滤 +#define NET_DVR_CALPOINTOUTRANGE 94 // 标定点超出范围 +#define NET_DVR_FILTERRECTINVALID 95 // 尺寸过滤器不符合要求 +#define NET_DVR_DDNS_DEVOFFLINE 96 //设备没有注册到ddns上 +#define NET_DVR_DDNS_INTER_ERROR 97 //DDNS 服务器内部错误 +#define NET_DVR_FUNCTION_NOT_SUPPORT_OS 98 //此功能不支持该操作系统 +#define NET_DVR_DEC_CHAN_REBIND 99 //解码通道绑定显示输出次数受限 +#define NET_DVR_INTERCOM_SDK_ERROR 100 //加载当前目录下的语音对讲库失败 +#define NET_DVR_NO_CURRENT_UPDATEFILE 101 //没有正确的升级包 +#define NET_DVR_USER_NOT_SUCC_LOGIN 102 //用户还没登陆成功 +#define NET_DVR_USE_LOG_SWITCH_FILE 103 //正在使用日志开关文件 +#define NET_DVR_POOL_PORT_EXHAUST 104 //端口池中用于绑定的端口已耗尽 +#define NET_DVR_PACKET_TYPE_NOT_SUPPORT 105 //码流封装格式错误 +#define NET_DVR_IPPARA_IPID_ERROR 106 //IP接入配置时IPID有误 -#define NET_DVR_LOAD_HCPREVIEW_SDK_ERROR 107 //Ԥʧ -#define NET_DVR_LOAD_HCVOICETALK_SDK_ERROR 108 //ʧ -#define NET_DVR_LOAD_HCALARM_SDK_ERROR 109 //ʧ -#define NET_DVR_LOAD_HCPLAYBACK_SDK_ERROR 110 //طʧ -#define NET_DVR_LOAD_HCDISPLAY_SDK_ERROR 111 //ʾʧ -#define NET_DVR_LOAD_HCINDUSTRY_SDK_ERROR 112 //ҵӦʧ -#define NET_DVR_LOAD_HCGENERALCFGMGR_SDK_ERROR 113 //ͨùʧ -#define NET_DVR_LOAD_HCCOREDEVCFG_SDK_ERROR 114 //豸úʧ -#define NET_DVR_LOAD_HCNETUTILS_SDK_ERROR 115 //HCNetUtilsʧ +#define NET_DVR_LOAD_HCPREVIEW_SDK_ERROR 107 //预览组件加载失败 +#define NET_DVR_LOAD_HCVOICETALK_SDK_ERROR 108 //语音组件加载失败 +#define NET_DVR_LOAD_HCALARM_SDK_ERROR 109 //报警组件加载失败 +#define NET_DVR_LOAD_HCPLAYBACK_SDK_ERROR 110 //回放组件加载失败 +#define NET_DVR_LOAD_HCDISPLAY_SDK_ERROR 111 //显示组件加载失败 +#define NET_DVR_LOAD_HCINDUSTRY_SDK_ERROR 112 //行业应用组件加载失败 +#define NET_DVR_LOAD_HCGENERALCFGMGR_SDK_ERROR 113 //通用配置管理组件加载失败 +#define NET_DVR_LOAD_HCCOREDEVCFG_SDK_ERROR 114 //设备配置核心组件加载失败 +#define NET_DVR_LOAD_HCNETUTILS_SDK_ERROR 115 //HCNetUtils加载失败 -#define NET_DVR_CORE_VER_MISMATCH 121 //ʱcore汾ƥ -#define NET_DVR_CORE_VER_MISMATCH_HCPREVIEW 122 //Ԥcore汾ƥ -#define NET_DVR_CORE_VER_MISMATCH_HCVOICETALK 123 //core汾ƥ -#define NET_DVR_CORE_VER_MISMATCH_HCALARM 124 //core汾ƥ -#define NET_DVR_CORE_VER_MISMATCH_HCPLAYBACK 125 //طcore汾ƥ -#define NET_DVR_CORE_VER_MISMATCH_HCDISPLAY 126 //ʾcore汾ƥ -#define NET_DVR_CORE_VER_MISMATCH_HCINDUSTRY 127 //ҵӦcore汾ƥ -#define NET_DVR_CORE_VER_MISMATCH_HCGENERALCFGMGR 128 //ͨùcore汾ƥ +#define NET_DVR_CORE_VER_MISMATCH 121 //单独加载组件时,组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCPREVIEW 122 //预览组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCVOICETALK 123 //语音组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCALARM 124 //报警组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCPLAYBACK 125 //回放组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCDISPLAY 126 //显示组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCINDUSTRY 127 //行业应用组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCGENERALCFGMGR 128 //通用配置管理组件与core版本不匹配 -#define NET_DVR_COM_VER_MISMATCH_HCPREVIEW 136 //ԤHCNetSDK汾ƥ -#define NET_DVR_COM_VER_MISMATCH_HCVOICETALK 137 //HCNetSDK汾ƥ -#define NET_DVR_COM_VER_MISMATCH_HCALARM 138 //HCNetSDK汾ƥ -#define NET_DVR_COM_VER_MISMATCH_HCPLAYBACK 139 //طHCNetSDK汾ƥ -#define NET_DVR_COM_VER_MISMATCH_HCDISPLAY 140 //ʾHCNetSDK汾ƥ -#define NET_DVR_COM_VER_MISMATCH_HCINDUSTRY 141 //ҵӦHCNetSDK汾ƥ -#define NET_DVR_COM_VER_MISMATCH_HCGENERALCFGMGR 142 //ͨùHCNetSDK汾ƥ +#define NET_DVR_COM_VER_MISMATCH_HCPREVIEW 136 //预览组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCVOICETALK 137 //语音组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCALARM 138 //报警组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCPLAYBACK 139 //回放组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCDISPLAY 140 //显示组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCINDUSTRY 141 //行业应用组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCGENERALCFGMGR 142 //通用配置管理组件与HCNetSDK版本不匹配 -#define NET_ERR_CONFIG_FILE_IMPORT_FAILED 145 //ļʧ -#define NET_ERR_CONFIG_FILE_EXPORT_FAILED 146 //ļʧ -#define NET_DVR_CERTIFICATE_FILE_ERROR 147 //֤ -#define NET_DVR_LOAD_SSL_LIB_ERROR 148 //SSLʧܣǰ汾ƥ䣬ҲDzڣ -#define NET_DVR_SSL_VERSION_NOT_MATCH 149 //SSL汾ƥ +#define NET_ERR_CONFIG_FILE_IMPORT_FAILED 145 //配置文件导入失败 +#define NET_ERR_CONFIG_FILE_EXPORT_FAILED 146 //配置文件导出失败 +#define NET_DVR_CERTIFICATE_FILE_ERROR 147 //证书错误 +#define NET_DVR_LOAD_SSL_LIB_ERROR 148 //加载SSL库失败(可能是版本不匹配,也可能是不存在) +#define NET_DVR_SSL_VERSION_NOT_MATCH 149 //SSL库版本不匹配 -#define NET_DVR_ALIAS_DUPLICATE 150 //ظ //2011-08-31 ͨк豸°汾ddns -#define NET_DVR_INVALID_COMMUNICATION 151 //Чͨ -#define NET_DVR_USERNAME_NOT_EXIST 152 //ûڣûڣIPC5.1.7зȥˣɾIJƷòϣ -#define NET_DVR_USER_LOCKED 153 //û -#define NET_DVR_INVALID_USERID 154 //ЧûID -#define NET_DVR_LOW_LOGIN_VERSION 155 //¼汾 -#define NET_DVR_LOAD_LIBEAY32_DLL_ERROR 156 //libeay32.dllʧ -#define NET_DVR_LOAD_SSLEAY32_DLL_ERROR 157 //ssleay32.dllʧ -#define NET_ERR_LOAD_LIBICONV 158 //libiconvʧ -#define NET_ERR_SSL_CONNECT_FAILED 159 //SSLʧ -#define NET_ERR_MCAST_ADDRESS_ERROR 160 //ȡಥַ -#define NET_ERR_LOAD_ZLIB 161 //zlib.dllʧ -#define NET_ERR_OPENSSL_NO_INIT 162 //Opensslδʼ +#define NET_DVR_ALIAS_DUPLICATE 150 //别名重复 //2011-08-31 通过别名或者序列号来访问设备的新版本ddns的配置 +#define NET_DVR_INVALID_COMMUNICATION 151 //无效通信 +#define NET_DVR_USERNAME_NOT_EXIST 152 //用户名不存在(用户名不存在,IPC5.1.7中发布出去了,所以删不掉。后续的产品这个错误码用不上) +#define NET_DVR_USER_LOCKED 153 //用户被锁定 +#define NET_DVR_INVALID_USERID 154 //无效用户ID +#define NET_DVR_LOW_LOGIN_VERSION 155 //登录版本低 +#define NET_DVR_LOAD_LIBEAY32_DLL_ERROR 156 //加载libeay32.dll库失败 +#define NET_DVR_LOAD_SSLEAY32_DLL_ERROR 157 //加载ssleay32.dll库失败 +#define NET_ERR_LOAD_LIBICONV 158 //加载libiconv库失败 +#define NET_ERR_SSL_CONNECT_FAILED 159 //SSL连接失败 +#define NET_ERR_MCAST_ADDRESS_ERROR 160 //获取多播地址错误 +#define NET_ERR_LOAD_ZLIB 161 //加载zlib.dll库失败 +#define NET_ERR_OPENSSL_NO_INIT 162 //Openssl库未初始化 -#define NET_DVR_SERVER_NOT_EXIST 164 //ӦķҲ,ʱĹұŻ߷ʹ -#define NET_DVR_TEST_SERVER_FAIL_CONNECT 165 //ӲԷʧ -#define NET_DVR_NAS_SERVER_INVALID_DIR 166 //NASĿ¼ʧܣĿ¼Ч -#define NET_DVR_NAS_SERVER_NOENOUGH_PRI 167 //NASĿ¼ʧܣûȨ -#define NET_DVR_EMAIL_SERVER_NOT_CONFIG_DNS 168 //ʹûDNSЧ -#define NET_DVR_EMAIL_SERVER_NOT_CONFIG_GATEWAY 169 //ûأɷʼʧܡ -#define NET_DVR_TEST_SERVER_PASSWORD_ERROR 170 //û벻ȷԷû -#define NET_DVR_EMAIL_SERVER_CONNECT_EXCEPTION_WITH_SMTP 171 //豸smtp쳣 -#define NET_DVR_FTP_SERVER_FAIL_CREATE_DIR 172 //FTPĿ¼ʧ -#define NET_DVR_FTP_SERVER_NO_WRITE_PIR 173 //FTPûдȨ -#define NET_DVR_IP_CONFLICT 174 //IPͻ -#define NET_DVR_INSUFFICIENT_STORAGEPOOL_SPACE 175 //洢ؿռ -#define NET_DVR_STORAGEPOOL_INVALID 176 //Ʒ洢Ч,ûô洢ػߴ洢ID -#define NET_DVR_EFFECTIVENESS_REBOOT 177 //ЧҪ -#define NET_ERR_ANR_ARMING_EXIST 178 //Ѿ(ô˽вӽ£ظĶʱء) -#define NET_ERR_UPLOADLINK_EXIST 179 //ϴѾ(EHOMEЭSDKЭDzͬʱֶ֧ģһЭڵʱһӽ롣) -#define NET_ERR_INCORRECT_FILE_FORMAT 180 //ļʽȷ -#define NET_ERR_INCORRECT_FILE_CONTENT 181 //ļݲȷ -#define NET_ERR_MAX_HRUDP_LINK 182 //HRUDP 豸 -#define NET_SDK_ERR_ACCESSKEY_SECRETKEY 183 // ԿԿȷ -#define NET_SDK_ERR_CREATE_PORT_MULTIPLEX 184 //˿ڸʧ -#define NET_DVR_NONBLOCKING_CAPTURE_NOTSUPPORT 185 //֧ץͼ -#define NET_SDK_ERR_FUNCTION_INVALID 186 //ѿ첽ùЧ -#define NET_SDK_ERR_MAX_PORT_MULTIPLEX 187 //Ѵﵽ˿ڸĿ -#define NET_DVR_INVALID_LINK 188 //δЧ -#define NET_DVR_ISAPI_NOT_SUPPORT 189 //ӿڲ֧ISAPIЭ +#define NET_DVR_SERVER_NOT_EXIST 164 //对应的服务器找不到,查找时输入的国家编号或者服务器类型错误 +#define NET_DVR_TEST_SERVER_FAIL_CONNECT 165 //连接测试服务器失败 +#define NET_DVR_NAS_SERVER_INVALID_DIR 166 //NAS服务器挂载目录失败,目录无效 +#define NET_DVR_NAS_SERVER_NOENOUGH_PRI 167 //NAS服务器挂载目录失败,没有权限 +#define NET_DVR_EMAIL_SERVER_NOT_CONFIG_DNS 168 //服务器使用域名,但是没有配置DNS,可能造成域名无效。 +#define NET_DVR_EMAIL_SERVER_NOT_CONFIG_GATEWAY 169 //没有配置网关,可能造成发送邮件失败。 +#define NET_DVR_TEST_SERVER_PASSWORD_ERROR 170 //用户名密码不正确,测试服务器的用户名或密码错误 +#define NET_DVR_EMAIL_SERVER_CONNECT_EXCEPTION_WITH_SMTP 171 //设备和smtp服务器交互异常 +#define NET_DVR_FTP_SERVER_FAIL_CREATE_DIR 172 //FTP服务器创建目录失败 +#define NET_DVR_FTP_SERVER_NO_WRITE_PIR 173 //FTP服务器没有写入权限 +#define NET_DVR_IP_CONFLICT 174 //IP冲突 +#define NET_DVR_INSUFFICIENT_STORAGEPOOL_SPACE 175 //存储池空间已满 +#define NET_DVR_STORAGEPOOL_INVALID 176 //云服务器存储池无效,没有配置存储池或者存储池ID错误 +#define NET_DVR_EFFECTIVENESS_REBOOT 177 //生效需要重启 +#define NET_ERR_ANR_ARMING_EXIST 178 //断网续传布防连接已经存在(该错误码是在私有布防连接建立的情况下,重复布防的断网续传功能时,返回。) +#define NET_ERR_UPLOADLINK_EXIST 179 //断网续传上传连接已经存在(EHOME协议和SDK协议是不能同时支持断网续传的,当一个协议存在的时候,另外一个连接建立话,报错这个错误码。) +#define NET_ERR_INCORRECT_FILE_FORMAT 180 //导入文件格式不正确 +#define NET_ERR_INCORRECT_FILE_CONTENT 181 //导入文件内容不正确 +#define NET_ERR_MAX_HRUDP_LINK 182 //HRUDP 连接数 超过设备限制 +#define NET_SDK_ERR_ACCESSKEY_SECRETKEY 183 // 接入秘钥或加密秘钥不正确 +#define NET_SDK_ERR_CREATE_PORT_MULTIPLEX 184 //创建端口复用失败 +#define NET_DVR_NONBLOCKING_CAPTURE_NOTSUPPORT 185 //不支持无阻塞抓图 +#define NET_SDK_ERR_FUNCTION_INVALID 186 //已开启异步,该功能无效 +#define NET_SDK_ERR_MAX_PORT_MULTIPLEX 187 //已达到端口复用最大数目 +#define NET_DVR_INVALID_LINK 188 //连接尚未建立或连接无效 +#define NET_DVR_ISAPI_NOT_SUPPORT 189 //接口不支持ISAPI协议 // 2010-5-28 -// д +// 阵列错误码 #define RAID_ERROR_INDEX 200 -#define NET_DVR_NAME_NOT_ONLY (RAID_ERROR_INDEX + 0) // Ѵ -#define NET_DVR_OVER_MAX_ARRAY (RAID_ERROR_INDEX + 1 ) // дﵽ -#define NET_DVR_OVER_MAX_VD (RAID_ERROR_INDEX + 2 ) // ̴ﵽ -#define NET_DVR_VD_SLOT_EXCEED (RAID_ERROR_INDEX + 3 ) // ̲λ -#define NET_DVR_PD_STATUS_INVALID (RAID_ERROR_INDEX + 4 ) // ؽ״̬ -#define NET_DVR_PD_BE_DEDICATE_SPARE (RAID_ERROR_INDEX + 5 ) // ؽΪָȱ -#define NET_DVR_PD_NOT_FREE (RAID_ERROR_INDEX + 6 ) // ؽ̷ǿ -#define NET_DVR_CANNOT_MIG2NEWMODE (RAID_ERROR_INDEX + 7 ) // ܴӵǰǨƵµ -#define NET_DVR_MIG_PAUSE (RAID_ERROR_INDEX + 8 ) // ǨƲͣ -#define NET_DVR_MIG_CANCEL (RAID_ERROR_INDEX + 9 ) // ִеǨƲȡ -#define NET_DVR_EXIST_VD (RAID_ERROR_INDEX + 10) // ϴ̣޷ɾ -#define NET_DVR_TARGET_IN_LD_FUNCTIONAL (RAID_ERROR_INDEX + 11) // Ϊɲҹ -#define NET_DVR_HD_IS_ASSIGNED_ALREADY (RAID_ERROR_INDEX + 12) // ָ̱Ϊ -#define NET_DVR_INVALID_HD_COUNT (RAID_ERROR_INDEX + 13) // ָRAIDȼƥ -#define NET_DVR_LD_IS_FUNCTIONAL (RAID_ERROR_INDEX + 14) // ޷ؽ -#define NET_DVR_BGA_RUNNING (RAID_ERROR_INDEX + 15) // ִеĺ̨ -#define NET_DVR_LD_NO_ATAPI (RAID_ERROR_INDEX + 16) // ޷ATAPI̴ -#define NET_DVR_MIGRATION_NOT_NEED (RAID_ERROR_INDEX + 17) // Ǩ -#define NET_DVR_HD_TYPE_MISMATCH (RAID_ERROR_INDEX + 18) // ̲ͬ -#define NET_DVR_NO_LD_IN_DG (RAID_ERROR_INDEX + 19) // ̣޷д -#define NET_DVR_NO_ROOM_FOR_SPARE (RAID_ERROR_INDEX + 20) // ̿ռС޷ָΪȱ -#define NET_DVR_SPARE_IS_IN_MULTI_DG (RAID_ERROR_INDEX + 21) // ѱΪijȱ -#define NET_DVR_DG_HAS_MISSING_PD (RAID_ERROR_INDEX + 22) // ȱ +#define NET_DVR_NAME_NOT_ONLY (RAID_ERROR_INDEX + 0) // 名称已存在 +#define NET_DVR_OVER_MAX_ARRAY (RAID_ERROR_INDEX + 1 ) // 阵列达到上限 +#define NET_DVR_OVER_MAX_VD (RAID_ERROR_INDEX + 2 ) // 虚拟磁盘达到上限 +#define NET_DVR_VD_SLOT_EXCEED (RAID_ERROR_INDEX + 3 ) // 虚拟磁盘槽位已满 +#define NET_DVR_PD_STATUS_INVALID (RAID_ERROR_INDEX + 4 ) // 重建阵列所需物理磁盘状态错误 +#define NET_DVR_PD_BE_DEDICATE_SPARE (RAID_ERROR_INDEX + 5 ) // 重建阵列所需物理磁盘为指定热备 +#define NET_DVR_PD_NOT_FREE (RAID_ERROR_INDEX + 6 ) // 重建阵列所需物理磁盘非空闲 +#define NET_DVR_CANNOT_MIG2NEWMODE (RAID_ERROR_INDEX + 7 ) // 不能从当前的阵列类型迁移到新的阵列类型 +#define NET_DVR_MIG_PAUSE (RAID_ERROR_INDEX + 8 ) // 迁移操作已暂停 +#define NET_DVR_MIG_CANCEL (RAID_ERROR_INDEX + 9 ) // 正在执行的迁移操作已取消 +#define NET_DVR_EXIST_VD (RAID_ERROR_INDEX + 10) // 阵列上阵列上存在虚拟磁盘,无法删除阵列 +#define NET_DVR_TARGET_IN_LD_FUNCTIONAL (RAID_ERROR_INDEX + 11) // 对象物理磁盘为虚拟磁盘组成部分且工作正常 +#define NET_DVR_HD_IS_ASSIGNED_ALREADY (RAID_ERROR_INDEX + 12) // 指定的物理磁盘被分配为虚拟磁盘 +#define NET_DVR_INVALID_HD_COUNT (RAID_ERROR_INDEX + 13) // 物理磁盘数量与指定的RAID等级不匹配 +#define NET_DVR_LD_IS_FUNCTIONAL (RAID_ERROR_INDEX + 14) // 阵列正常,无法重建 +#define NET_DVR_BGA_RUNNING (RAID_ERROR_INDEX + 15) // 存在正在执行的后台任务 +#define NET_DVR_LD_NO_ATAPI (RAID_ERROR_INDEX + 16) // 无法用ATAPI盘创建虚拟磁盘 +#define NET_DVR_MIGRATION_NOT_NEED (RAID_ERROR_INDEX + 17) // 阵列无需迁移 +#define NET_DVR_HD_TYPE_MISMATCH (RAID_ERROR_INDEX + 18) // 物理磁盘不属于同意类型 +#define NET_DVR_NO_LD_IN_DG (RAID_ERROR_INDEX + 19) // 无虚拟磁盘,无法进行此项操作 +#define NET_DVR_NO_ROOM_FOR_SPARE (RAID_ERROR_INDEX + 20) // 磁盘空间过小,无法被指定为热备盘 +#define NET_DVR_SPARE_IS_IN_MULTI_DG (RAID_ERROR_INDEX + 21) // 磁盘已被分配为某阵列热备盘 +#define NET_DVR_DG_HAS_MISSING_PD (RAID_ERROR_INDEX + 22) // 阵列缺少盘 -// x86 64bit nvr 2012-02-04 -#define NET_DVR_NAME_EMPTY (RAID_ERROR_INDEX + 23) /*Ϊ*/ -#define NET_DVR_INPUT_PARAM (RAID_ERROR_INDEX + 24) /**/ -#define NET_DVR_PD_NOT_AVAILABLE (RAID_ERROR_INDEX + 25) /*̲*/ -#define NET_DVR_ARRAY_NOT_AVAILABLE (RAID_ERROR_INDEX + 26) /*в*/ -#define NET_DVR_PD_COUNT (RAID_ERROR_INDEX + 27) /*ȷ*/ -#define NET_DVR_VD_SMALL (RAID_ERROR_INDEX + 28) /*̫С*/ -#define NET_DVR_NO_EXIST (RAID_ERROR_INDEX + 29) /**/ -#define NET_DVR_NOT_SUPPORT (RAID_ERROR_INDEX + 30) /*ָ֧ò*/ -#define NET_DVR_NOT_FUNCTIONAL (RAID_ERROR_INDEX + 31) /*״̬״̬*/ -#define NET_DVR_DEV_NODE_NOT_FOUND (RAID_ERROR_INDEX + 32) /*豸ڵ㲻*/ -#define NET_DVR_SLOT_EXCEED (RAID_ERROR_INDEX + 33) /*λﵽ*/ -#define NET_DVR_NO_VD_IN_ARRAY (RAID_ERROR_INDEX + 34) /*ϲ*/ -#define NET_DVR_VD_SLOT_INVALID (RAID_ERROR_INDEX + 35) /*̲λЧ*/ -#define NET_DVR_PD_NO_ENOUGH_SPACE (RAID_ERROR_INDEX + 36) /*̿ռ䲻*/ -#define NET_DVR_ARRAY_NONFUNCTION (RAID_ERROR_INDEX + 37) /*ֻд״̬вܽǨ*/ -#define NET_DVR_ARRAY_NO_ENOUGH_SPACE (RAID_ERROR_INDEX + 38) /*пռ䲻*/ -#define NET_DVR_STOPPING_SCANNING_ARRAY (RAID_ERROR_INDEX + 39) /*ִаȫ̻ɨ*/ -#define NET_DVR_NOT_SUPPORT_16T (RAID_ERROR_INDEX + 40) /*ִ֧16T*/ -#define NET_DVR_ARRAY_FORMATING (RAID_ERROR_INDEX + 41) /*ִиʽ޷ɾ*/ -#define NET_DVR_QUICK_SETUP_PD_COUNT (RAID_ERROR_INDEX + 42) /*һҪ*/ +// x86 64bit nvr新增 2012-02-04 +#define NET_DVR_NAME_EMPTY (RAID_ERROR_INDEX + 23) /*名称为空*/ +#define NET_DVR_INPUT_PARAM (RAID_ERROR_INDEX + 24) /*输入参数有误*/ +#define NET_DVR_PD_NOT_AVAILABLE (RAID_ERROR_INDEX + 25) /*物理磁盘不可用*/ +#define NET_DVR_ARRAY_NOT_AVAILABLE (RAID_ERROR_INDEX + 26) /*阵列不可用*/ +#define NET_DVR_PD_COUNT (RAID_ERROR_INDEX + 27) /*物理磁盘数不正确*/ +#define NET_DVR_VD_SMALL (RAID_ERROR_INDEX + 28) /*虚拟磁盘太小*/ +#define NET_DVR_NO_EXIST (RAID_ERROR_INDEX + 29) /*不存在*/ +#define NET_DVR_NOT_SUPPORT (RAID_ERROR_INDEX + 30) /*不支持该操作*/ +#define NET_DVR_NOT_FUNCTIONAL (RAID_ERROR_INDEX + 31) /*阵列状态不是正常状态*/ +#define NET_DVR_DEV_NODE_NOT_FOUND (RAID_ERROR_INDEX + 32) /*虚拟磁盘设备节点不存在*/ +#define NET_DVR_SLOT_EXCEED (RAID_ERROR_INDEX + 33) /*槽位达到上限*/ +#define NET_DVR_NO_VD_IN_ARRAY (RAID_ERROR_INDEX + 34) /*阵列上不存在虚拟磁盘*/ +#define NET_DVR_VD_SLOT_INVALID (RAID_ERROR_INDEX + 35) /*虚拟磁盘槽位无效*/ +#define NET_DVR_PD_NO_ENOUGH_SPACE (RAID_ERROR_INDEX + 36) /*所需物理磁盘空间不足*/ +#define NET_DVR_ARRAY_NONFUNCTION (RAID_ERROR_INDEX + 37) /*只有处于正常状态的阵列才能进行迁移*/ +#define NET_DVR_ARRAY_NO_ENOUGH_SPACE (RAID_ERROR_INDEX + 38) /*阵列空间不足*/ +#define NET_DVR_STOPPING_SCANNING_ARRAY (RAID_ERROR_INDEX + 39) /*正在执行安全拔盘或重新扫描*/ +#define NET_DVR_NOT_SUPPORT_16T (RAID_ERROR_INDEX + 40) /*不支持创建大于16T的阵列*/ +#define NET_DVR_ARRAY_FORMATING (RAID_ERROR_INDEX + 41) /*正在执行格式化的阵列无法删除*/ +#define NET_DVR_QUICK_SETUP_PD_COUNT (RAID_ERROR_INDEX + 42) /*一键配置至少需要三块空闲盘*/ -//豸δʱ¼ʧܣش -#define NET_DVR_ERROR_DEVICE_NOT_ACTIVATED 250//豸δ -//SDK豸û߼ʱΪʱ -#define NET_DVR_ERROR_RISK_PASSWORD 251 //зյ -//Ѽ豸ٴμʱش -#define NET_DVR_ERROR_DEVICE_HAS_ACTIVATED 252//豸Ѽ +//设备未激活时,登录失败,返回错误码 +#define NET_DVR_ERROR_DEVICE_NOT_ACTIVATED 250//设备未激活 +//老SDK接新设备,设置用户密码或者激活的时候为风险密码时,错误码 +#define NET_DVR_ERROR_RISK_PASSWORD 251 //有风险的密码 +//已激活的设备,再次激活时返回错误码 +#define NET_DVR_ERROR_DEVICE_HAS_ACTIVATED 252//设备已激活 -// ܴ -#define VCA_ERROR_INDEX 300 // ܴ -#define NET_DVR_ID_ERROR (VCA_ERROR_INDEX + 0) // ID -#define NET_DVR_POLYGON_ERROR (VCA_ERROR_INDEX + 1) // βҪ -#define NET_DVR_RULE_PARAM_ERROR (VCA_ERROR_INDEX + 2) // -#define NET_DVR_RULE_CFG_CONFLICT (VCA_ERROR_INDEX + 3) // Ϣͻ -#define NET_DVR_CALIBRATE_NOT_READY (VCA_ERROR_INDEX + 4) // ǰûб궨Ϣ -#define NET_DVR_CAMERA_DATA_ERROR (VCA_ERROR_INDEX + 5) // -#define NET_DVR_CALIBRATE_DATA_UNFIT (VCA_ERROR_INDEX + 6) // Ȳбڱ궨 -#define NET_DVR_CALIBRATE_DATA_CONFLICT (VCA_ERROR_INDEX + 7) // 궨Ϊе㹲߻λ̫ -#define NET_DVR_CALIBRATE_CALC_FAIL (VCA_ERROR_INDEX + 8) // 궨ֵʧ -#define NET_DVR_CALIBRATE_LINE_OUT_RECT (VCA_ERROR_INDEX + 9) // 궨߳Ӿο -#define NET_DVR_ENTER_RULE_NOT_READY (VCA_ERROR_INDEX + 10) // ûý -#define NET_DVR_AID_RULE_NO_INCLUDE_LANE (VCA_ERROR_INDEX + 11) // ͨ¼ûаֵӵºУ -#define NET_DVR_LANE_NOT_READY (VCA_ERROR_INDEX + 12) // ǰûó -#define NET_DVR_RULE_INCLUDE_TWO_WAY (VCA_ERROR_INDEX + 13) // ¼а2ֲͬ -#define NET_DVR_LANE_TPS_RULE_CONFLICT (VCA_ERROR_INDEX + 14) // ݹͻ -#define NET_DVR_NOT_SUPPORT_EVENT_TYPE (VCA_ERROR_INDEX + 15) // ֵ֧¼ -#define NET_DVR_LANE_NO_WAY (VCA_ERROR_INDEX + 16) // ûз -#define NET_DVR_SIZE_FILTER_ERROR (VCA_ERROR_INDEX + 17) // ߴ˿򲻺 -#define NET_DVR_LIB_FFL_NO_FACE (VCA_ERROR_INDEX + 18) // 㶨λʱͼû -#define NET_DVR_LIB_FFL_IMG_TOO_SMALL (VCA_ERROR_INDEX + 19) // 㶨λʱͼ̫С -#define NET_DVR_LIB_FD_IMG_NO_FACE (VCA_ERROR_INDEX + 20) // ͼʱͼû -#define NET_DVR_LIB_FACE_TOO_SMALL (VCA_ERROR_INDEX + 21) // ģʱ̫С -#define NET_DVR_LIB_FACE_QUALITY_TOO_BAD (VCA_ERROR_INDEX + 22) // ģʱͼ̫ -#define NET_DVR_KEY_PARAM_ERR (VCA_ERROR_INDEX + 23) //߼ô -#define NET_DVR_CALIBRATE_DATA_ERR (VCA_ERROR_INDEX + 24) //궨Ŀ󣬻ֵ󣬻㳬ƽ -#define NET_DVR_CALIBRATE_DISABLE_FAIL (VCA_ERROR_INDEX + 25) //ùȡ궨 -#define NET_DVR_VCA_LIB_FD_SCALE_OUTRANGE (VCA_ERROR_INDEX + 26) //˿ĿСֵС˿Ŀֵ -#define NET_DVR_LIB_FD_REGION_TOO_LARGE (VCA_ERROR_INDEX + 27) //ǰΧ󡣼Ϊͼ2/3 -#define NET_DVR_TRIAL_OVERDUE (VCA_ERROR_INDEX + 28) //ðѽ -#define NET_DVR_CONFIG_FILE_CONFLICT (VCA_ERROR_INDEX + 29) //豸ļͻܹзòʾ -//㷨ش -#define NET_DVR_FR_FPL_FAIL (VCA_ERROR_INDEX + 30) // 㶨λʧ -#define NET_DVR_FR_IQA_FAIL (VCA_ERROR_INDEX + 31) // ʧ -#define NET_DVR_FR_FEM_FAIL (VCA_ERROR_INDEX + 32) // ȡʧ -#define NET_DVR_FPL_DT_CONF_TOO_LOW (VCA_ERROR_INDEX + 33) // 㶨λʱŶȹ -#define NET_DVR_FPL_CONF_TOO_LOW (VCA_ERROR_INDEX + 34) // 㶨λŶȹ -#define NET_DVR_E_DATA_SIZE (VCA_ERROR_INDEX + 35) // ݳȲƥ -#define NET_DVR_FR_MODEL_VERSION_ERR (VCA_ERROR_INDEX + 36) // ģеģͰ汾 -#define NET_DVR_FR_FD_FAIL (VCA_ERROR_INDEX + 37) // ʶʧ -#define NET_DVR_FA_NORMALIZE_ERR (VCA_ERROR_INDEX + 38) // һ -// -#define NET_DVR_DOG_PUSTREAM_NOT_MATCH (VCA_ERROR_INDEX + 39) // ܹǰȡ豸Ͳƥ -#define NET_DVR_DEV_PUSTREAM_NOT_MATCH (VCA_ERROR_INDEX + 40) // ǰȡ豸汾ƥ -#define NET_DVR_PUSTREAM_ALREADY_EXISTS (VCA_ERROR_INDEX + 41) // 豸ͨѾӹǰ豸 -#define NET_DVR_SEARCH_CONNECT_FAILED (VCA_ERROR_INDEX + 42) // Ӽʧ -#define NET_DVR_INSUFFICIENT_DISK_SPACE (VCA_ERROR_INDEX + 43) // ɴ洢Ӳ̿ռ䲻 -#define NET_DVR_DATABASE_CONNECTION_FAILED (VCA_ERROR_INDEX + 44) // ݿʧ -#define NET_DVR_DATABASE_ADM_PW_ERROR (VCA_ERROR_INDEX + 45) // ݿû -#define NET_DVR_DECODE_YUV (VCA_ERROR_INDEX + 46) // ʧ +// 智能错误码 +#define VCA_ERROR_INDEX 300 // 智能错误码索引 +#define NET_DVR_ID_ERROR (VCA_ERROR_INDEX + 0) // 配置ID不合理 +#define NET_DVR_POLYGON_ERROR (VCA_ERROR_INDEX + 1) // 多边形不符合要求 +#define NET_DVR_RULE_PARAM_ERROR (VCA_ERROR_INDEX + 2) // 规则参数不合理 +#define NET_DVR_RULE_CFG_CONFLICT (VCA_ERROR_INDEX + 3) // 配置信息冲突 +#define NET_DVR_CALIBRATE_NOT_READY (VCA_ERROR_INDEX + 4) // 当前没有标定信息 +#define NET_DVR_CAMERA_DATA_ERROR (VCA_ERROR_INDEX + 5) // 摄像机参数不合理 +#define NET_DVR_CALIBRATE_DATA_UNFIT (VCA_ERROR_INDEX + 6) // 长度不够倾斜,不利于标定 +#define NET_DVR_CALIBRATE_DATA_CONFLICT (VCA_ERROR_INDEX + 7) // 标定出错,以为所有点共线或者位置太集中 +#define NET_DVR_CALIBRATE_CALC_FAIL (VCA_ERROR_INDEX + 8) // 摄像机标定参数值计算失败 +#define NET_DVR_CALIBRATE_LINE_OUT_RECT (VCA_ERROR_INDEX + 9) // 输入的样本标定线超出了样本外接矩形框 +#define NET_DVR_ENTER_RULE_NOT_READY (VCA_ERROR_INDEX + 10) // 没有设置进入区域 +#define NET_DVR_AID_RULE_NO_INCLUDE_LANE (VCA_ERROR_INDEX + 11) // 交通事件规则中没有包括车道(特值拥堵和逆行) +#define NET_DVR_LANE_NOT_READY (VCA_ERROR_INDEX + 12) // 当前没有设置车道 +#define NET_DVR_RULE_INCLUDE_TWO_WAY (VCA_ERROR_INDEX + 13) // 事件规则中包含2种不同方向 +#define NET_DVR_LANE_TPS_RULE_CONFLICT (VCA_ERROR_INDEX + 14) // 车道和数据规则冲突 +#define NET_DVR_NOT_SUPPORT_EVENT_TYPE (VCA_ERROR_INDEX + 15) // 不支持的事件类型 +#define NET_DVR_LANE_NO_WAY (VCA_ERROR_INDEX + 16) // 车道没有方向 +#define NET_DVR_SIZE_FILTER_ERROR (VCA_ERROR_INDEX + 17) // 尺寸过滤框不合理 +#define NET_DVR_LIB_FFL_NO_FACE (VCA_ERROR_INDEX + 18) // 特征点定位时输入的图像没有人脸 +#define NET_DVR_LIB_FFL_IMG_TOO_SMALL (VCA_ERROR_INDEX + 19) // 特征点定位时输入的图像太小 +#define NET_DVR_LIB_FD_IMG_NO_FACE (VCA_ERROR_INDEX + 20) // 单张图像人脸检测时输入的图像没有人脸 +#define NET_DVR_LIB_FACE_TOO_SMALL (VCA_ERROR_INDEX + 21) // 建模时人脸太小 +#define NET_DVR_LIB_FACE_QUALITY_TOO_BAD (VCA_ERROR_INDEX + 22) // 建模时人脸图像质量太差 +#define NET_DVR_KEY_PARAM_ERR (VCA_ERROR_INDEX + 23) //高级参数设置错误 +#define NET_DVR_CALIBRATE_DATA_ERR (VCA_ERROR_INDEX + 24) //标定样本数目错误,或数据值错误,或样本点超出地平线 +#define NET_DVR_CALIBRATE_DISABLE_FAIL (VCA_ERROR_INDEX + 25) //所配置规则不允许取消标定 +#define NET_DVR_VCA_LIB_FD_SCALE_OUTRANGE (VCA_ERROR_INDEX + 26) //最大过滤框的宽高最小值超过最小过滤框的宽高最大值两倍以上 +#define NET_DVR_LIB_FD_REGION_TOO_LARGE (VCA_ERROR_INDEX + 27) //当前检测区域范围过大。检测区最大为图像的2/3 +#define NET_DVR_TRIAL_OVERDUE (VCA_ERROR_INDEX + 28) //试用版评估期已结束 +#define NET_DVR_CONFIG_FILE_CONFLICT (VCA_ERROR_INDEX + 29) //设备类型与配置文件冲突(加密狗类型与现有分析仪配置不符错误码提示) +//算法库相关错误码 +#define NET_DVR_FR_FPL_FAIL (VCA_ERROR_INDEX + 30) // 人脸特征点定位失败 +#define NET_DVR_FR_IQA_FAIL (VCA_ERROR_INDEX + 31) // 人脸评分失败 +#define NET_DVR_FR_FEM_FAIL (VCA_ERROR_INDEX + 32) // 人脸特征提取失败 +#define NET_DVR_FPL_DT_CONF_TOO_LOW (VCA_ERROR_INDEX + 33) // 特征点定位时人脸检测置信度过低 +#define NET_DVR_FPL_CONF_TOO_LOW (VCA_ERROR_INDEX + 34) // 特征点定位置信度过低 +#define NET_DVR_E_DATA_SIZE (VCA_ERROR_INDEX + 35) // 数据长度不匹配 +#define NET_DVR_FR_MODEL_VERSION_ERR (VCA_ERROR_INDEX + 36) // 人脸模型数据中的模型版本错误 +#define NET_DVR_FR_FD_FAIL (VCA_ERROR_INDEX + 37) // 识别库中人脸检测失败 +#define NET_DVR_FA_NORMALIZE_ERR (VCA_ERROR_INDEX + 38) // 人脸归一化出错 +//其他错误码 +#define NET_DVR_DOG_PUSTREAM_NOT_MATCH (VCA_ERROR_INDEX + 39) // 加密狗与前端取流设备类型不匹配 +#define NET_DVR_DEV_PUSTREAM_NOT_MATCH (VCA_ERROR_INDEX + 40) // 前端取流设备版本不匹配 +#define NET_DVR_PUSTREAM_ALREADY_EXISTS (VCA_ERROR_INDEX + 41) // 设备的其他通道已经添加过该前端设备 +#define NET_DVR_SEARCH_CONNECT_FAILED (VCA_ERROR_INDEX + 42) // 连接检索服务器失败 +#define NET_DVR_INSUFFICIENT_DISK_SPACE (VCA_ERROR_INDEX + 43) // 可存储的硬盘空间不足 +#define NET_DVR_DATABASE_CONNECTION_FAILED (VCA_ERROR_INDEX + 44) // 数据库连接失败 +#define NET_DVR_DATABASE_ADM_PW_ERROR (VCA_ERROR_INDEX + 45) // 数据库用户名、密码错误 +#define NET_DVR_DECODE_YUV (VCA_ERROR_INDEX + 46) // 解码失败 #define NET_DVR_IMAGE_RESOLUTION_ERROR (VCA_ERROR_INDEX + 47) // #define NET_DVR_CHAN_WORKMODE_ERROR (VCA_ERROR_INDEX + 48) // -#define NET_DVR_RTSP_ERROR_NOENOUGHPRI 401 //Ȩޣ401ʱת -#define NET_DVR_RTSP_ERROR_ALLOC_RESOURCE 402 //Դʧ -#define NET_DVR_RTSP_ERROR_PARAMETER 403 // -#define NET_DVR_RTSP_ERROR_NO_URL 404 //ָURLַڣ404ʱת -#define NET_DVR_RTSP_ERROR_FORCE_STOP 406 //û;ǿ˳ +#define NET_DVR_RTSP_ERROR_NOENOUGHPRI 401 //无权限:服务器返回401时,转成这个错误码 +#define NET_DVR_RTSP_ERROR_ALLOC_RESOURCE 402 //分配资源失败 +#define NET_DVR_RTSP_ERROR_PARAMETER 403 //参数错误 +#define NET_DVR_RTSP_ERROR_NO_URL 404 //指定的URL地址不存在:服务器返回404时,转成这个错误码 +#define NET_DVR_RTSP_ERROR_FORCE_STOP 406 //用户中途强行退出 -#define NET_DVR_RTSP_GETPORTFAILED 407 //rtsp õ˿ڴ -#define NET_DVR_RTSP_DESCRIBERROR 410 //rtsp decribe -#define NET_DVR_RTSP_DESCRIBESENDTIMEOUT 411 //rtsp decribe ͳʱ -#define NET_DVR_RTSP_DESCRIBESENDERROR 412 //rtsp decribe ʧ -#define NET_DVR_RTSP_DESCRIBERECVTIMEOUT 413 //rtsp decribe ճʱ -#define NET_DVR_RTSP_DESCRIBERECVDATALOST 414 //rtsp decribe ݴ -#define NET_DVR_RTSP_DESCRIBERECVERROR 415 //rtsp decribe ʧ -#define NET_DVR_RTSP_DESCRIBESERVERERR 416 //rtsp decribe ش״̬ +#define NET_DVR_RTSP_GETPORTFAILED 407 //rtsp 得到端口错误 +#define NET_DVR_RTSP_DESCRIBERROR 410 //rtsp decribe 交互错误 +#define NET_DVR_RTSP_DESCRIBESENDTIMEOUT 411 //rtsp decribe 发送超时 +#define NET_DVR_RTSP_DESCRIBESENDERROR 412 //rtsp decribe 发送失败 +#define NET_DVR_RTSP_DESCRIBERECVTIMEOUT 413 //rtsp decribe 接收超时 +#define NET_DVR_RTSP_DESCRIBERECVDATALOST 414 //rtsp decribe 接收数据错误 +#define NET_DVR_RTSP_DESCRIBERECVERROR 415 //rtsp decribe 接收失败 +#define NET_DVR_RTSP_DESCRIBESERVERERR 416 //rtsp decribe 服务器返回错误状态 -#define NET_DVR_RTSP_SETUPERROR 420 //rtsp setup -#define NET_DVR_RTSP_SETUPSENDTIMEOUT 421 //rtsp setup ͳʱ -#define NET_DVR_RTSP_SETUPSENDERROR 422 //rtsp setup ʹ -#define NET_DVR_RTSP_SETUPRECVTIMEOUT 423 //rtsp setup ճʱ -#define NET_DVR_RTSP_SETUPRECVDATALOST 424 //rtsp setup ݴ -#define NET_DVR_RTSP_SETUPRECVERROR 425 //rtsp setup ʧ -#define NET_DVR_RTSP_OVER_MAX_CHAN 426 //߷Դ㣬453ʱת롣 -#define NET_DVR_RTSP_SETUPSERVERERR 427 //rtsp setup ش״̬ +#define NET_DVR_RTSP_SETUPERROR 420 //rtsp setup 交互错误 +#define NET_DVR_RTSP_SETUPSENDTIMEOUT 421 //rtsp setup 发送超时 +#define NET_DVR_RTSP_SETUPSENDERROR 422 //rtsp setup 发送错误 +#define NET_DVR_RTSP_SETUPRECVTIMEOUT 423 //rtsp setup 接收超时 +#define NET_DVR_RTSP_SETUPRECVDATALOST 424 //rtsp setup 接收数据错误 +#define NET_DVR_RTSP_SETUPRECVERROR 425 //rtsp setup 接收失败 +#define NET_DVR_RTSP_OVER_MAX_CHAN 426 //超过服务器最大连接数,或者服务器资源不足,服务器返回453时,转成这个错误码。 +#define NET_DVR_RTSP_SETUPSERVERERR 427 //rtsp setup 服务器返回错误状态 -#define NET_DVR_RTSP_PLAYERROR 430 //rtsp play -#define NET_DVR_RTSP_PLAYSENDTIMEOUT 431 //rtsp play ͳʱ -#define NET_DVR_RTSP_PLAYSENDERROR 432 //rtsp play ʹ -#define NET_DVR_RTSP_PLAYRECVTIMEOUT 433 //rtsp play ճʱ -#define NET_DVR_RTSP_PLAYRECVDATALOST 434 //rtsp play ݴ -#define NET_DVR_RTSP_PLAYRECVERROR 435 //rtsp play ʧ -#define NET_DVR_RTSP_PLAYSERVERERR 436 //rtsp play ش״̬ +#define NET_DVR_RTSP_PLAYERROR 430 //rtsp play 交互错误 +#define NET_DVR_RTSP_PLAYSENDTIMEOUT 431 //rtsp play 发送超时 +#define NET_DVR_RTSP_PLAYSENDERROR 432 //rtsp play 发送错误 +#define NET_DVR_RTSP_PLAYRECVTIMEOUT 433 //rtsp play 接收超时 +#define NET_DVR_RTSP_PLAYRECVDATALOST 434 //rtsp play 接收数据错误 +#define NET_DVR_RTSP_PLAYRECVERROR 435 //rtsp play 接收失败 +#define NET_DVR_RTSP_PLAYSERVERERR 436 //rtsp play 服务器返回错误状态 -#define NET_DVR_RTSP_TEARDOWNERROR 440 //rtsp teardown -#define NET_DVR_RTSP_TEARDOWNSENDTIMEOUT 441 //rtsp teardown ͳʱ -#define NET_DVR_RTSP_TEARDOWNSENDERROR 442 //rtsp teardown ʹ -#define NET_DVR_RTSP_TEARDOWNRECVTIMEOUT 443 //rtsp teardown ճʱ -#define NET_DVR_RTSP_TEARDOWNRECVDATALOST 444 //rtsp teardown ݴ -#define NET_DVR_RTSP_TEARDOWNRECVERROR 445 //rtsp teardown ʧ -#define NET_DVR_RTSP_TEARDOWNSERVERERR 446 //rtsp teardown ش״̬ +#define NET_DVR_RTSP_TEARDOWNERROR 440 //rtsp teardown 交互错误 +#define NET_DVR_RTSP_TEARDOWNSENDTIMEOUT 441 //rtsp teardown 发送超时 +#define NET_DVR_RTSP_TEARDOWNSENDERROR 442 //rtsp teardown 发送错误 +#define NET_DVR_RTSP_TEARDOWNRECVTIMEOUT 443 //rtsp teardown 接收超时 +#define NET_DVR_RTSP_TEARDOWNRECVDATALOST 444 //rtsp teardown 接收数据错误 +#define NET_DVR_RTSP_TEARDOWNRECVERROR 445 //rtsp teardown 接收失败 +#define NET_DVR_RTSP_TEARDOWNSERVERERR 446 //rtsp teardown 服务器返回错误状态 #define NET_PLAYM4_NOERROR 500 //no error #define NET_PLAYM4_PARA_OVER 501 //input parameter is invalid; @@ -899,25 +899,25 @@ #define NET_PLAYM4_EXTRACT_NOT_SUPPORT 527 //Don't support the version of this file. #define NET_PLAYM4_EXTRACT_DATA_ERROR 528 //extract video data failed. -//תװ +//转封装库错误码 #define NET_CONVERT_ERROR_NOT_SUPPORT 581 //convert not support -//Խ -#define NET_AUDIOINTERCOM_OK 600 //޴ -#define NET_AUDIOINTECOM_ERR_NOTSUPORT 601 //֧ -#define NET_AUDIOINTECOM_ERR_ALLOC_MEMERY 602 //ڴ -#define NET_AUDIOINTECOM_ERR_PARAMETER 603 // -#define NET_AUDIOINTECOM_ERR_CALL_ORDER 604 //ô -#define NET_AUDIOINTECOM_ERR_FIND_DEVICE 605 //δ豸 -#define NET_AUDIOINTECOM_ERR_OPEN_DEVICE 606 //ܴ豸 -#define NET_AUDIOINTECOM_ERR_NO_CONTEXT 607 //豸ij -#define NET_AUDIOINTECOM_ERR_NO_WAVFILE 608 //WAVļ -#define NET_AUDIOINTECOM_ERR_INVALID_TYPE 609 //ЧWAV -#define NET_AUDIOINTECOM_ERR_ENCODE_FAIL 610 //ʧ -#define NET_AUDIOINTECOM_ERR_DECODE_FAIL 611 //ʧ -#define NET_AUDIOINTECOM_ERR_NO_PLAYBACK 612 //ʧ -#define NET_AUDIOINTECOM_ERR_DENOISE_FAIL 613 //ʧ -#define NET_AUDIOINTECOM_ERR_UNKOWN 619 //δ֪ +//语音对讲库错误码 +#define NET_AUDIOINTERCOM_OK 600 //无错误 +#define NET_AUDIOINTECOM_ERR_NOTSUPORT 601 //不支持 +#define NET_AUDIOINTECOM_ERR_ALLOC_MEMERY 602 //内存申请错误 +#define NET_AUDIOINTECOM_ERR_PARAMETER 603 //参数错误 +#define NET_AUDIOINTECOM_ERR_CALL_ORDER 604 //调用次序错误 +#define NET_AUDIOINTECOM_ERR_FIND_DEVICE 605 //未发现设备 +#define NET_AUDIOINTECOM_ERR_OPEN_DEVICE 606 //不能打开设备诶 +#define NET_AUDIOINTECOM_ERR_NO_CONTEXT 607 //设备上下文出错 +#define NET_AUDIOINTECOM_ERR_NO_WAVFILE 608 //WAV文件出错 +#define NET_AUDIOINTECOM_ERR_INVALID_TYPE 609 //无效的WAV参数类型 +#define NET_AUDIOINTECOM_ERR_ENCODE_FAIL 610 //编码失败 +#define NET_AUDIOINTECOM_ERR_DECODE_FAIL 611 //解码失败 +#define NET_AUDIOINTECOM_ERR_NO_PLAYBACK 612 //播放失败 +#define NET_AUDIOINTECOM_ERR_DENOISE_FAIL 613 //降噪失败 +#define NET_AUDIOINTECOM_ERR_UNKOWN 619 //未知错误 #define NET_QOS_OK 700 //no error #define NET_QOS_ERROR (NET_QOS_OK - 1) //qos error @@ -933,886 +933,886 @@ #define NET_QOS_ERR_SCHEDPARAMS_BAD_FRACTION (NET_QOS_OK - 21) //schedparams bad fraction #define NET_QOS_ERR_SCHEDPARAMS_BAD_MINIMUM_INTERVAL (NET_QOS_OK - 22) //schedparams bad minimum interval -#define NET_ERROR_TRUNK_LINE 711 //ϵͳѱɸ -#define NET_ERROR_MIXED_JOINT 712 //ܽлƴ -#define NET_ERROR_DISPLAY_SWITCH 713 //ܽʾͨл -#define NET_ERROR_USED_BY_BIG_SCREEN 714 //Դռ -#define NET_ERROR_USE_OTHER_DEC_RESOURCE 715 //ʹϵͳԴ -#define NET_ERROR_DISP_MODE_SWITCH 716 //ʾͨʾ״̬л -#define NET_ERROR_SCENE_USING 717 //ʹ -#define NET_ERR_NO_ENOUGH_DEC_RESOURCE 718 //Դ -#define NET_ERR_NO_ENOUGH_FREE_SHOW_RESOURCE 719 //Դ -#define NET_ERR_NO_ENOUGH_VIDEO_MEMORY 720 //ԴԴ -#define NET_ERR_MAX_VIDEO_NUM 721 //һ϶Դ -#define NET_ERR_WIN_COVER_FREE_SHOW_AND_NORMAL 722 //ڿԽ˳ںͷdz -#define NET_ERR_FREE_SHOW_WIN_SPLIT 723 //Դڲַ֧ -#define NET_ERR_INAPPROPRIATE_WIN_FREE_SHOW 724 //Ĵڲֿ֧ -#define NET_DVR_TRANSPARENT_WIN_NOT_SUPPORT_SPLIT 725 //͸ȵĴڲַ֧ -#define NET_DVR_SPLIT_WIN_NOT_SUPPORT_TRANSPARENT 726 //Ĵڲ֧͸ -#define NET_ERR_MAX_LOGO_NUM 727 //logoﵽ -#define NET_ERR_MAX_WIN_LOOP_NUM 728 //Ѳﵽ -#define NET_ERR_VIRTUAL_LED_VERTICAL_CROSS 729 //LED -#define NET_ERR_MAX_VIRTUAL_LED_HEIGHT 730 //LED߶ȳ -#define NET_ERR_VIRTUAL_LED_ILLEGAL_CHARACTER 731 //LEDݰǷַ -#define NET_ERR_BASEMAP_NOT_EXIST 732 //ͼͼƬ -#define NET_ERR_LED_NOT_SUPPORT_VIRTUAL_LED 733 //LEDĻ֧LED -#define NET_ERR_LED_RESOLUTION_NOT_SUPPORT 734 //LEDֱʲ֧ -#define NET_ERR_PLAN_OVERDUE 735 //Ԥڣٵ -#define NET_ERR_PROCESSER_MAX_SCREEN_BLK 736 //źſԽĻ -#define NET_ERR_WND_SIZE_TOO_SMALL 737 //ڿ̫С -#define NET_ERR_WND_SPLIT_NOT_SUPPORT_ROAM 738 //ڲ֧ -#define NET_ERR_OUTPUT_ONE_BOARD_ONE_WALL 739 //ͬһӰֻܰ󶨵ͬһǽ -#define NET_ERR_WND_CANNOT_LCD_AND_LED_OUTPUT 740 //ڲͬʱLCDLED -#define NET_ERR_MAX_OSD_NUM 741 //OSDﵽ - -#define NET_SDK_CANCEL_WND_TOPKEEP_ATTR_FIRST 751 //ȡöִڵöԲܽõײ -#define NET_SDK_ERR_LED_SCREEN_CHECKING 752 //УLEDĻ -#define NET_SDK_ERR_NOT_SUPPORT_SINGLE_RESOLUTION 753 //LCD/LEDڰֵ֧֮ڵķֱ -#define NET_SDK_ERR_LED_RESOLUTION_MISMATCHED 754 //ڵLEDֱʺڵLEDֱʲƥ䣬Ҫͬеȸߡͬеȿ - - -#define NET_SDK_ERR_MAX_VIRTUAL_LED_WIDTH 755 //LEDȳޣֵСֵ -#define NET_SDK_ERR_MAX_VIRTUAL_LED_IN_SCREEN 756 //LED -#define NET_SDK_ERR_MAX_VIRTUAL_LED_IN_WALL 757 //ǽLED -#define NET_SDK_ERR_VIRTUAL_LED_OVERLAP 758 //LEDص -#define NET_SDK_ERR_VIRTUAL_LED_TYPE 759 //ʹ -#define NET_SDK_ERR_VIRTUAL_LED_COLOUR 760 //ɫ -#define NET_SDK_ERR_VIRTUAL_LED_MOVE_DIRECTION 761 //ƶ -#define NET_SDK_ERR_VIRTUAL_LED_MOVE_MODE 762 //ƶģʽ -#define NET_SDK_ERR_VIRTUAL_LED_MOVE_SPEED 763 //ƶٶȴ -#define NET_SDK_ERR_VIRTUAL_LED_DISP_MODE 764 //ʾģʽ -#define NET_SDK_ERR_VIRTUAL_LED_NO 765 //LEDŴ -#define NET_SDK_ERR_VIRTUAL_LED_PARA 766 //LEDô󣬰ṹ -#define NET_SDK_ERR_BASEMAP_POSITION 767 //ͼڿ߲ -#define NET_SDK_ERR_BASEMAP_PICTURE_LEN 768 //ͼͼƬȳ -#define NET_SDK_ERR_BASEMAP_PICTURE_RESOLUTION 769 //ͼͼƬֱʴ -#define NET_SDK_ERR_BASEMAP_PICTURE_FORMAT 770 //ͼͼƬʽ -#define NET_SDK_ERR_MAX_VIRTUAL_LED_NUM 771 //豸ֵ֧LED -#define NET_SDK_ERR_MAX_TIME_VIRTUAL_LED_IN_WALL 772 //ǽֵ֧ʱLED - -#define NET_ERR_TERMINAL_BUSY 780 //նæն˴ڻ - -#define NET_ERR_DATA_RETURNED_ILLEGAL 790 //豸صݲϷ -#define NET_DVR_FUNCTION_RESOURCE_USAGE_ERROR 791 //豸ռԴ¸ù޷ - -#define NET_DVR_ERR_IMPORT_EMPTY_FILE 792 //ļΪ -#define NET_DVR_ERR_IMPORT_TOO_LARGE_FILE 793 //ļ -#define NET_DVR_ERR_BAD_IPV4_ADDRESS 794 //IPV4ַЧ -#define NET_DVR_ERR_BAD_NET_MASK 795 //ַЧ -#define NET_DVR_ERR_INVALID_NET_GATE_ADDRESS 796 //صַЧ -#define NET_DVR_ERR_BAD_DNS 797 //DNSַЧ -#define NET_DVR_ERR_ILLEGAL_PASSWORD 798 //벻ܰû - -#define NET_DVR_DEV_NET_OVERFLOW 800 //豸 -#define NET_DVR_STATUS_RECORDFILE_WRITING_NOT_LOCK 801 //¼ļ¼޷ -#define NET_DVR_STATUS_CANT_FORMAT_LITTLE_DISK 802 //Ӳ̫С޷ʽ - -//N+1 -#define NET_SDK_ERR_REMOTE_DISCONNECT 803 //Զ޷ -#define NET_SDK_ERR_RD_ADD_RD 804 //ӱ -#define NET_SDK_ERR_BACKUP_DISK_EXCEPT 805 //쳣 -#define NET_SDK_ERR_RD_LIMIT 806 //Ѵ -#define NET_SDK_ERR_ADDED_RD_IS_WD 807 //ӵıǹ -#define NET_SDK_ERR_ADD_ORDER_WRONG 808 //˳ûбΪӹ -#define NET_SDK_ERR_WD_ADD_WD 809 //ӹ -#define NET_SDK_ERR_WD_SERVICE_EXCETP 810 //CVR쳣 -#define NET_SDK_ERR_RD_SERVICE_EXCETP 811 //CVR쳣 -#define NET_SDK_ERR_ADDED_WD_IS_RD 812 //ӵĹDZ -#define NET_SDK_ERR_PERFORMANCE_LIMIT 813 //ܴﵽ -#define NET_SDK_ERR_ADDED_DEVICE_EXIST 814 //ӵ豸Ѿ - -//Ѷ -#define NET_SDK_ERR_INQUEST_RESUMING 815 //Ѷָ -#define NET_SDK_ERR_RECORD_BACKUPING 816 //Ѷ -#define NET_SDK_ERR_DISK_PLAYING 817 //̻ط -#define NET_SDK_ERR_INQUEST_STARTED 818 //Ѷѿ -#define NET_SDK_ERR_LOCAL_OPERATING 819 //ز -#define NET_SDK_ERR_INQUEST_NOT_START 820 //Ѷδ -//Netra3.1.0 -#define NET_SDK_ERR_CHAN_AUDIO_BIND 821 //ͨδ󶨻Խʧ -//ƴ洢 -#define NET_DVR_N_PLUS_ONE_MODE 822 //豸ǰN+1ģʽ -#define NET_DVR_CLOUD_STORAGE_OPENED 823 //ƴ洢ģʽѿ - -#define NET_DVR_ERR_OPER_NOT_ALLOWED 824 //豸N+0ӹ״̬ò -#define NET_DVR_ERR_NEED_RELOCATE 825 //豸N+0ӹ״̬ҪȡضϢ² - -//ͥ -#define NET_SDK_ERR_IR_PORT_ERROR 830 //ڴ -#define NET_SDK_ERR_IR_CMD_ERROR 831 //ڵŴ -#define NET_SDK_ERR_NOT_INQUESTING 832 //豸ڷѶ״̬ -#define NET_SDK_ERR_INQUEST_NOT_PAUSED 833 //豸ڷͣ״̬ -#define NET_DVR_CHECK_PASSWORD_MISTAKE_ERROR 834 //У -#define NET_DVR_CHECK_PASSWORD_NULL_ERROR 835 //У벻Ϊ -#define NET_DVR_UNABLE_CALIB_ERROR 836 // ǰ޷궨 -#define NET_DVR_PLEASE_CALIB_ERROR 837 //ɱ궨 -#define NET_DVR_ERR_PANORAMIC_CAL_EMPTY 838 //Flashȫ궨Ϊ -#define NET_DVR_ERR_CALIB_FAIL_PLEASEAGAIN 839 //궨ʧܣ±궨(Calibration failed. Please calibrate again.) -#define NET_DVR_ERR_DETECTION_LINE 840 //ôùߣȷλںɫ(Please set detection line again. The detection line should be within the red count area.) -#define NET_DVR_ERR_TURN_OFF_IMAGE_PARA 841 //ȹرͼл(Please turn off the image parameters switch first.) -#define NET_DVR_EXCEED_FACE_IMAGES_ERROR 843 //ͼƬ -#define NET_DVR_ANALYSIS_FACE_IMAGES_ERROR 844 //ͼƬʶʧ -#define NET_ERR_ALARM_INPUT_OCCUPIED 845 //A<-1ڴץAlarm Input No. A<-1 is used to trigger vehicle capture. -#define NET_DVR_FACELIB_DATABASE_ERROR 846 //ݿ汾ƥ -#define NET_DVR_FACELIB_DATA_ERROR 847 //ݴ -#define NET_DVR_FACE_DATA_ID_ERROR 848 //PIDЧ -#define NET_DVR_FACELIB_ID_ERROR 849 //IDЧ -#define NET_DVR_EXCEED_FACE_LIBARY_ERROR 850 // -#define NET_DVR_PIC_ANALYSIS_NO_TARGET_ERROR 851 //ͼƬδʶĿ -#define NET_DVR_SUBPIC_ANALYSIS_MODELING_ERROR 852 //ͼģʧ -#define NET_DVR_PIC_ANALYSIS_NO_RESOURCE_ERROR 853 //޶Ӧܷ֧ͼƬʶ -#define NET_DVR_ANALYSIS_ENGINES_NO_RESOURCE_ERROR 854//޷Դ -#define NET_DVR_ANALYSIS_ENGINES_USAGE_EXCEED_ERROR 855//ʹʳɣѴ100% -#define NET_DVR_EXCEED_HUMANMISINFO_FILTER_ENABLED_ERROR 856 //ȥͨ -#define NET_DVR_NAME_ERROR 857 //ƴ -#define NET_DVR_NAME_EXIST_ERROR 858 //Ѵ -#define NET_DVR_FACELIB_PIC_IMPORTING_ERROR 859 //⵼ͼƬ -#define NET_DVR_ERR_CALIB_POSITION 860 //궨λó˶Χ -#define NET_DVR_ERR_DELETE 861 //޷ɾ -#define NET_DVR_ERR_SCENE_ID 862 //IDЧ -#define NET_DVR_ERR_CALIBING 863 //궨 -#define NET_DVR_PIC_FORMAT_ERROR 864 //ͼƬʽ -#define NET_DVR_PIC_RESOLUTION_INVALID_ERROR 865 //ͼƬֱЧ -#define NET_DVR_PIC_SIZE_EXCEED_ERROR 866 //ͼƬ -#define NET_DVR_PIC_ANALYSIS_TARGRT_NUM_EXCEED_ERROR 867 //ͼƬĿ -#define NET_DVR_ANALYSIS_ENGINES_LOADING_ERROR 868//ʼ -#define NET_DVR_ANALYSIS_ENGINES_ABNORMA_ERROR 869//쳣 -#define NET_DVR_ANALYSIS_ENGINES_FACELIB_IMPORTING 870//ڵ -#define NET_DVR_NO_DATA_FOR_MODELING_ERROR 871 //޴ģ -#define NET_DVR_FACE_DATA_MODELING_ERROR 872 //豸ڽͼƬģֲ֧ -#define NET_ERR_FACELIBDATA_OVERLIMIT 873 //豸ֵ֧ƣݣ -#define NET_DVR_ANALYSIS_ENGINES_ASSOCIATED_CHANNEL 874//ѹͨ -#define NET_DVR_ERR_CUSTOMID_LEN 875 //ϲԶIDijС32ַ -#define NET_DVR_ERR_CUSTOMFACELIBID_REPEAT 876 //ϲ·ظԶID -#define NET_DVR_ERR_CUSTOMHUMANID_REPEAT 877 //ϲ·ظԶԱID -#define NET_DVR_ERR_URL_DOWNLOAD_FAIL 878 //urlʧ -#define NET_DVR_ERR_URL_DOWNLOAD_NOTSTART 879 //urlδʼ - -#define NET_DVR_CFG_FILE_SECRETKEY_ERROR 880 //ļȫУԿ -#define NET_DVR_WDR_NOTDISABLE_ERROR 881 //ȹرͨǰҹתģʽµĿ̬ -#define NET_DVR_HLC_NOTDISABLE_ERROR 882 //ȹرͨǰҹתģʽµǿ - -#define NET_DVR_THERMOMETRY_REGION_OVERSTEP_ERROR 883 //Խ - - -#define NET_DVR_ERR_MODELING_DEVICEINTERNAL 884 //ģʧܣ豸ڲ -#define NET_DVR_ERR_MODELING_FACE 885 //ģʧܣģ -#define NET_DVR_ERR_MODELING_FACEGRADING 886 //ģʧܣִ -#define NET_DVR_ERR_MODELING_FACEGFEATURE 887 //ģʧܣȡ -#define NET_DVR_ERR_MODELING_FACEGANALYZING 888 //ģʧܣȡ - -#define NET_DVR_ERR_STREAM_LIMIT 889 //ܳޣȡ· -#define NET_DVR_ERR_STREAM_DESCRIPTION 890 // -#define NET_DVR_ERR_STREAM_DELETE 891 //ʹ޷ɾ -#define NET_DVR_ERR_CUSTOMSTREAM_NAME 892 //ԶΪջ򲻺Ϸ -#define NET_DVR_ERR_CUSTOMSTREAM_NOTEXISTED 893 //Զ - -#define NET_DVR_ERR_TOO_SHORT_CALIBRATING_TIME 894 //궨ʱ̫ -#define NET_DVR_ERR_AUTO_CALIBRATE_FAILED 895 //Զ궨ʧ -#define NET_DVR_ERR_VERIFICATION_FAILED 896 //Уʧ - -#define NET_DVR_NO_TEMP_SENSOR_ERROR 897 //¶ȴ -#define NET_DVR_PUPIL_DISTANCE_OVERSIZE_ERROR 898 //ͫ -#define NET_DVR_ERR_UNOPENED_FACE_SNAP 899 //ЧȿĿץ -//2011-10-25루900-950 -#define NET_ERR_CUT_INPUTSTREAM_OVERLIMIT 900 //źԴüֵ -#define NET_ERR_WINCHAN_IDX 901 // ͨŴ -#define NET_ERR_WIN_LAYER 902 // ڲ󣬵ĻาǵĴڲ -#define NET_ERR_WIN_BLK_NUM 903 // ڵĿ󣬵ڿɸǵĻ -#define NET_ERR_OUTPUT_RESOLUTION 904 // ֱʴ -#define NET_ERR_LAYOUT 905 // ֺŴ -#define NET_ERR_INPUT_RESOLUTION 906 // ֱʲ֧ -#define NET_ERR_SUBDEVICE_OFFLINE 907 // 豸 -#define NET_ERR_NO_DECODE_CHAN 908 // ûпнͨ -#define NET_ERR_MAX_WINDOW_ABILITY 909 // , ֲʽн豸޻ʾ޵ -#define NET_ERR_ORDER_ERROR 910 // ˳ -#define NET_ERR_PLAYING_PLAN 911 // ִԤ -#define NET_ERR_DECODER_USED 912 // ʹ -#define NET_ERR_OUTPUT_BOARD_DATA_OVERFLOW 913 // -#define NET_ERR_SAME_USER_NAME 914 // ûͬ -#define NET_ERR_INVALID_USER_NAME 915 // Чû -#define NET_ERR_MATRIX_USING 916 // ʹ -#define NET_ERR_DIFFERENT_CHAN_TYPE 917 // ͨͲͬͨͿΪͬͣ -#define NET_ERR_INPUT_CHAN_BINDED 918 // ͨѾ -#define NET_ERR_BINDED_OUTPUT_CHAN_OVERFLOW 919 // ʹõľͨ󶨵ͨ -#define NET_ERR_MAX_SIGNAL_NUM 920 // źԴﵽ -#define NET_ERR_INPUT_CHAN_USING 921 // ͨʹ -#define NET_ERR_MANAGER_LOGON 922 // ԱѾ½ʧ -#define NET_ERR_USERALREADY_LOGON 923 // ûѾ½ʧ -#define NET_ERR_LAYOUT_INIT 924 // ڳʼʧ -#define NET_ERR_BASEMAP_SIZE_NOT_MATCH 925 // ͼС -#define NET_ERR_WINDOW_OPERATING 926 // ִβʧ -#define NET_ERR_SIGNAL_UPLIMIT 927 // źԴﵽ -#define NET_ERR_SIGNAL_MAX_ENLARGE_TIMES 928 // źԴŴ -#define NET_ERR_ONE_SIGNAL_MULTI_CROSS 929 // źԴܶο -#define NET_ERR_ULTRA_HD_SIGNAL_MULTI_WIN 930 // źԴظ -#define NET_ERR_MAX_VIRTUAL_LED_WIDTH 931 //LEDȴֵ -#define NET_ERR_MAX_VIRTUAL_LED_WORD_LEN 932 //LEDֵַ -#define NET_ERR_SINGLE_OUTPUTPARAM_CONFIG 933//ֵ֧ʾ -#define NET_ERR_MULTI_WIN_BE_COVER 934//ڱ -#define NET_ERR_WIN_NOT_EXIST 935 //ڲ -#define NET_ERR_WIN_MAX_SIGNALSOURCE 936//źԴֵ -#define NET_ERR_MULTI_WIN_MOVE 937//Զƶ -#define NET_ERR_MULTI_WIN_YPBPR_SDI 938 // YPBPR SDIźԴ֧9/16 -#define NET_ERR_DIFF_TYPE_OUTPUT_MIXUSE 939 //ͬ -#define NET_ERR_SPLIT_WIN_CROSS 940//Կڷ -#define NET_ERR_SPLIT_WIN_NOT_FULL_SCREEN 941 //δڷ -#define NET_ERR_SPLIT_WIN_MANY_WIN 942 //ԵжڵĴڷ -#define NET_ERR_WINDOW_SIZE_OVERLIMIT 943 //ڴС -#define NET_ERR_INPUTSTREAM_ALREADY_JOINT 944 //źԴѼƴ -#define NET_ERR_JOINT_INPUTSTREAM_OVERLIMIT 945 //ƴźԴ - -#define NET_ERR_LED_RESOLUTION 946 //LED ֱʴֱ -#define NET_ERR_JOINT_SCALE_OVERLIMIT 947 //ƴźԴĹģ -#define NET_ERR_INPUTSTREAM_ALREADY_DECODE 948 //źԴǽ -#define NET_ERR_INPUTSTREAM_NOTSUPPORT_CAPTURE 949 //źԴ֧ץͼ -#define NET_ERR_JOINT_NOTSUPPORT_SPLITWIN 950 //źԴַ֧ - -//루951-999 -#define NET_ERR_MAX_WIN_OVERLAP 951 //ﵽ󴰿ص -#define NET_ERR_STREAMID_CHAN_BOTH_VALID 952 //stream IDͨͬʱЧ -#define NET_ERR_NO_ZERO_CHAN 953 //豸ͨ -#define NEED_RECONNECT 955 //Ҫضתϵͳʹã -#define NET_ERR_NO_STREAM_ID 956 //ID -#define NET_DVR_TRANS_NOT_START 957 //תδ -#define NET_ERR_MAXNUM_STREAM_ID 958 //IDﵽ -#define NET_ERR_WORKMODE_MISMATCH 959 //ģʽƥ -#define NET_ERR_MODE_IS_USING 960 //ѹڵǰģʽ -#define NET_ERR_DEV_PROGRESSING 961 //豸ڴ -#define NET_ERR_PASSIVE_TRANSCODING 962 //ڱת - -#define NET_ERR_RING_NOT_CONFIGURE 964 //δ - -#define NET_ERR_CLOSE_WINDOW_FIRST 971 //лȫ֡ʳʱȹرնӦǽĴ -#define NET_ERR_SPLIT_WINDOW_NUM_NOT_SUPPORT 972 //VGA/DVI/DP/HDMI/HDBase_TԴȫ֡ʳ²֧9/16 -#define NET_ERR_REACH_ONE_SIGNAL_PREVIEW_MAX_LINK 973 //źԴ -#define NET_ERR_ONLY_SPLITWND_SUPPORT_AMPLIFICATION 974 //ֻз֧ӴڷŴ -#define NET_DVR_ERR_WINDOW_SIZE_PLACE 975 //λô -#define NET_DVR_ERR_RGIONAL_RESTRICTIONS 976 //Ļ볬 -#define NET_ERR_WNDZOOM_NOT_SUPPORT 977 //ڲ֧Ӵȫ -#define NET_ERR_LED_SCREEN_SIZE 978 //LED߲ȷ -#define NET_ERR_OPEN_WIN_IN_ERROR_AREA 979 //ڷǷ򿪴(LCD/LED) -#define NET_ERR_TITLE_WIN_NOT_SUPPORT_MOVE 980 //ƽģʽ֧ -#define NET_ERR_TITLE_WIN_NOT_SUPPORT_COVER 981 //ƽģʽ֧ͼ㸲 -#define NET_ERR_TITLE_WIN_NOT_SUPPORT_SPLIT 982 //ƽģʽַ֧ -#define NET_DVR_LED_WINDOWS_ALREADY_CLOSED 983 //LEDڵķֱʷ仯豸ѹرոڵLED -#define NET_DVR_ERR_CLOSE_WINDOWS 984 //ʧܣȹرմ -#define NET_DVR_ERR_MATRIX_LOOP_ABILITY 985 //Ѳ -#define NET_DVR_ERR_MATRIX_LOOP_TIME 986 //Ѳʱ䲻֧ -#define NET_DVR_ERR_LINKED_OUT_ABILITY 987 //ͨ -#define NET_ERR_REACH_SCENE_MAX_NUM 988 //ﵽ -#define NET_ERR_SCENE_MEM_NOT_ENOUGH 989 //ڴ治㣬޷½ -#define NET_ERR_RESOLUTION_NOT_SUPPORT_ODD_VOUT 990 //ڲָ֧÷ֱ -#define NET_ERR_RESOLUTION_NOT_SUPPORT_EVEN_VOUT 991 //żڲָ֧÷ֱ - -#define NET_DVR_CANCEL_WND_OPENKEEP_ATTR_FIRST 992 //ҪȡԲܱر -#define NET_SDK_LED_MODE_NOT_SUPPORT_SPLIT 993 //LEDģʽ²ִ֧ڷ -#define NET_ERR_VOICETALK_ONLY_SUPPORT_ONE_TALK 994 //ͬʱֻ֧һ·Խ -#define NET_ERR_WND_POSITION_ADJUSTED 995 //λñ豸ϲҪ»ȡ´λ -#define NET_SDK_ERR_STARTTIME_CANNOT_LESSTHAN_CURTIME 996 //ʼʱ䲻Сڵǰʱ -#define NET_SDK_ERR_NEED_ADJUST_PLAN 997 //ѱԤȽóԤɾ -#define NET_ERR_UnitConfig_Failed 998 //õλͳһѡʱõĵλϵͳµĵλͬصλô - -// -#define XML_ABILITY_NOTSUPPORT 1000 //֧ڵȡ -#define XML_ANALYZE_NOENOUGH_BUF 1001 //ڴ治 -#define XML_ANALYZE_FIND_LOCALXML_ERROR 1002 //޷ҵӦıxml -#define XML_ANALYZE_LOAD_LOCALXML_ERROR 1003 //رxml -#define XML_NANLYZE_DVR_DATA_FORMAT_ERROR 1004 //豸ݸʽ -#define XML_ANALYZE_TYPE_ERROR 1005 //ʹ -#define XML_ANALYZE_XML_NODE_ERROR 1006 //XMLڵʽ -#define XML_INPUT_PARAM_ERROR 1007 //XMLڵֵ - -#define NET_DVR_ERR_RETURNED_XML_DATA 1008 //豸صXML - -//Դ -#define NET_ERR_LEDAREA_EXIST_WINDOW 1051 //LEDдڴ(LEDѾдڴڣ޸LED -#define NET_ERR_AUDIO_EXIST 1052 //ϴƵ -#define NET_ERR_MATERIAL_NAME_EXIST 1053 //زѴ -#define NET_ERR_MATERIAL_APPROVE_STATE 1054 //ز״̬ -#define NET_ERR_DATAHD_SIGNAL_FORMAT 1055 //ʹõӲ̲ʽ - -#define NET_ERR_SCENE_SWITCHING 1056 //л -#define NER_ERR_DATA_TRANSFER 1057 //豸ת -#define NET_ERR_DATA_RESTORE 1058 //豸ݻԭ -#define NET_ERR_CHECK_NOT_ENABLE 1059 //Уʹδ -#define NET_ERR_AREA_OFFLINE 1060 // -#define NET_ERR_SCREEN_TYPE 1061 //ĻͲƥ -#define NET_ERR_MIN_OPERATE_UNIT 1062 //СԪƥ -#define NET_ERR_MAINHD_NOT_BACKUP 1063 //һλϵֹ̣̣ͨóɱ -#define NET_ERR_ONE_BACKUP_HD 1064 //ñʱ豸һͨ -#define NET_ERR_CONNECT_SUB_SYSTEM_ABNORMAL 1065 //ϵͳ쳣 -#define NET_ERR_SERIAL_PORT_VEST 1066 //Ĵڹ -#define NET_ERR_BLOCKLIST_FULL 1067 //б -#define NET_ERR_NOT_MATCH_SOURCE 1068 //ƥźԴ -#define NET_ERR_CLOCK_VIRTUAL_LED_FULL 1069 //ʱӹܵLED -#define NET_ERR_MAX_WIN_SIGNAL_LOOP_NUM 1070 //ѲźԴѴ -#define NET_ERR_RESOLUTION_NO_MATCH_FRAME 1071 //ֱ뵱ǰ֡ƥ -#define NET_ERR_NOT_UPDATE_LOW_VERSION 1072 //֧Ͱ汾 -#define NET_ERR_NO_CUSTOM_TO_UPDATE 1073 //ǶƳ޷ -#define NET_ERR_CHAN_RESOLUTION_NOT_SUPPORT_SPLIT 1074 //ڷֱʲַ֧ -#define NET_ERR_HIGH_DEFINITION_NOT_SUPPORT_SPLIT 1075 //岻֧9/16ָ -#define NET_ERR_MIRROR_IMAGE_BY_VIDEO_WALL 1076 //ǽ -#define NET_ERR_MAX_OSD_FONT_SIZE 1077 //OSDַ֧ -#define NET_ERR_HIGH_DEFINITION_NOT_SUPPORT_VIDEO_SET 1078 //岻֧Ƶ -#define NET_ERR_TILE_MODE_NOT_SUPPORT_JOINT 1079 //ƽģʽ֧ƴӴ -#define NET_ERR_ADD_AUDIO_MATRIX_FAILED 1080 //Ƶʧ -#define NET_ERR_ONE_VIRTUAL_LED_AREA_BIND_ONE_AUDIO_AREA 1081 //һLEDֻܰһƵ -#define NET_ERR_NAT_NOT_MODIFY_SERVER_NETWORK_PARAM 1082 //NAT޷޸ķ -#define NET_ERR_ORIGINAL_CHECH_DATA_ERROR 1083 //ԭʼУݴ -#define NET_ERR_INPUT_BOARD_SPLICED_IN_DIFFERENT_NETWORKAREAS 1084 //ͬ岻ƴ -#define NET_ERR_SPLICINGSOURCE_ONWALL_IN_DIFFERENT_NETWORKAREAS 1085 //ͬƴԴǽ -#define NET_ERR_ONWALL_OUTPUTBOARD_MODIFY_NETWORKAREAS 1086 //Ѱڵǽϵ岻޸ -#define NET_ERR_LAN_AND_WAN_CANNOT_SAME_NET_SEGMENT 1087 //LANIPWANIPܴͬһ -#define NET_ERR_USERNAME_REPETITIVE 1088 //ûظ -#define NET_ERR_ASSOCIATED_SAMEWALL_IN_DIFFERENT_NETWORKAREAS 1089 //ͬڲܹͬһǽ -#define NET_ERR_BASEMAP_ROAM_IN_LED_AREA 1090 //LEDͼ -#define NET_ERR_VIRTUAL_LED_NOT_SUPPORT_4K_OUTPUT 1091 //LED֧4Kʾ -#define NET_ERR_BASEMAP_NOT_SUPPORT_4K_OUTPUT 1092 //ͼ֧4Kʾ -#define NET_ERR_MIN_BLOCK_IN_VIRTUAL_LED_AND_OUTPUT 1093 //LEDཻС -#define NET_ERR_485FIlE_VERSION_INVALID 1094 //485ļ汾Ч -#define NET_ERR_485FIlE_CHECK_ERROR 1095 //485ļУ -#define NET_ERR_485FIlE_ABNORMAL_SIZE 1096 //485ļС쳣Ч -#define NET_ERR_MODIFY_SUBBOARD_NETCFG_IN_NAT 1097 //NAT޷޸Ӱ -#define NET_ERR_OSD_CONTENT_WITH_ILLEGAL_CHARACTERS 1098 //OSDݰǷַ -#define NET_ERR_NON_SLAVE_DEVICE_INSERT_SYNC_LINE 1099 //Ǵ豸ֹͬ -//ô루11001200 -#define NET_ERR_PLT_USERID 1100 //֤ƽ̨userid -#define NET_ERR_TRANS_CHAN_START 1101 //͸ͨѴ򿪣ǰ޷ -#define NET_ERR_DEV_UPGRADING 1102 //豸 -#define NET_ERR_MISMATCH_UPGRADE_PACK_TYPE 1103 //Ͳƥ -#define NET_ERR_DEV_FORMATTING 1104 //豸ڸʽ -#define NET_ERR_MISMATCH_UPGRADE_PACK_VERSION 1105 //汾ƥ -#define NET_ERR_PT_LOCKED 1106 //PT - -#define NET_DVR_LOGO_OVERLAY_WITHOUT_UPLOAD_PIC 1110 //logoʧܣûϴlogoͼƬ -#define NET_DVR_ERR_ILLEGAL_VERIFICATION_CODE 1111 //Ϸ֤ -#define NET_DVR_ERR_LACK_VERIFICATION_CODE 1112 //ȱ֤ -#define NET_DVR_ERR_FORBIDDEN_IP 1113 //IPַѱֹ(豸ֵ֧IPַ˹) -#define NET_DVR_ERR_UNLOCKPTZ 1114 //Ч̨ -#define NET_DVR_ERR_COUNTAREA_LARGE 1116 //ƴ豸ֵ -#define NET_DVR_ERR_LABEL_ID_EXCEED 1117//ǩID -#define NET_DVR_ERR_LABEL_TYPE 1118//ǩʹ -#define NET_DVR_ERR_LABEL_FULL 1119//ǩ -#define NET_DVR_ERR_LABEL_DISABLED 1120//ǩδʹ -#define NET_DVR_ERR_DOME_PT_TRANS_TO_DOME_XY 1121//PTתXYʧ -#define NET_DVR_ERR_DOME_PT_TRANS_TO_PANORAMA_XY 1122//PTתȫXYʧ -#define NET_DVR_ERR_PANORAMA_XY_TRANS_TO_DOME_PT 1123//ȫXYתPT -#define NET_DVR_ERR_SCENE_DUR_TIME_LESS_THAN_INTERV_TIME 1124//ͣʱҪڼ -#define NET_DVR_ERR_HTTP_BKN_EXCEED_ONE 1125//ֻ֧һ· -#define NET_DVR_ERR_DELETING_FAILED_TURN_OFF_HTTPS_ESDK_WEBSOCKETS_FIRST 1126//ɾʧܣȹرHTTPSеǿSDKWebSockets -#define NET_DVR_ERR_DELETING_FAILED_TURN_OFF_HTTPS_ESDK_FIRST 1127//ɾʧܣȹرHTTPSеǿSDK -#define NET_DVR_ERR_PTZ_OCCUPIED_PRIORITY 1128// иȼ̨Ȩû -#define NET_DVR_ERR_INCORRECT_VIDEOAUDIO_ID 1129// ƵͨIDͨID -#define NET_DVR_ERR_REPETITIONTIME_OVER_MAXIMUM 1130// ȥʱ󲻳ֵ -#define NET_DVR_ERR_FORMATTING_FAILED 1131// ʽ -#define NET_DVR_ERR_ENCRYPTED_FORMATTING_FAILED 1132// ܸʽʧܣ -#define NET_DVR_ERR_WRONG_PASSWORD 1133// ,ȷ루SD Уʧܣ -#define NET_DVR_ERR_EXPOSURE_SYNC 1134// ͷعͬѿֶRGB -#define NET_DVR_ERR_TABLE_NOT_MATCH 1135// Уƽ̨ƥ - -//2012-10-16 豸루1200~1300 -#define NET_ERR_SEARCHING_MODULE 1201 // ģ -#define NET_ERR_REGISTERING_MODULE 1202 // עģ -#define NET_ERR_GETTING_ZONES 1203 // ڻȡ -#define NET_ERR_GETTING_TRIGGERS 1204 // ڻȡ -#define NET_ERR_ARMED_STATUS 1205 // ϵͳڲ״̬ -#define NET_ERR_PROGRAM_MODE_STATUS 1206 // ϵͳڱģʽ -#define NET_ERR_WALK_TEST_MODE_STATUS 1207 // ϵͳڲģʽ -#define NET_ERR_BYPASS_STATUS 1208 // ·״̬ -#define NET_ERR_DISABLED_MODULE_STATUS 1209 // δʹ -#define NET_ERR_NOT_SUPPORT_OPERATE_ZONE 1210 // ָ֧ò -#define NET_ERR_NOT_SUPPORT_MOD_MODULE_ADDR 1211 // ģַܱ޸ -#define NET_ERR_UNREGISTERED_MODULE 1212 // ģδע -#define NET_ERR_PUBLIC_SUBSYSTEM_ASSOCIATE_SELF 1213 // ϵͳ -#define NET_ERR_EXCEEDS_ASSOCIATE_SUBSYSTEM_NUM 1214 // ϵͳ -#define NET_ERR_BE_ASSOCIATED_BY_PUBLIC_SUBSYSTEM 1215 // ϵͳϵͳ -#define NET_ERR_ZONE_FAULT_STATUS 1216 // ڹ״̬ -#define NET_ERR_SAME_EVENT_TYPE 1217 // ¼¼رͬ¼ -#define NET_ERR_ZONE_ALARM_STATUS 1218 // ڱ״̬ -#define NET_ERR_EXPANSION_BUS_SHORT_CIRCUIT 1219 //չ߶· -#define NET_ERR_PWD_CONFLICT 1220 //ͻ -#define NET_ERR_DETECTOR_GISTERED_BY_OTHER_ZONE 1221 //̽ѱע -#define NET_ERR_DETECTOR_GISTERED_BY_OTHER_PU 1222 //̽ѱע -#define NET_ERR_DETECTOR_DISCONNECT 1223 //̽ -#define NET_ERR_CALL_BUSY 1224 //豸ͨ -#define NET_DVR_ERR_ZONE_TAMPER_STAUS 1225 //ڷ״̬ -#define NET_DVR_ERR_WIRELESS_DEV_REGISTER 1226 //ѱע -#define NET_DVR_ERR_WIRELESS_DEV_ADDED 1227 //ѱ -#define NET_DVR_ERR_WIRELESS_DEV_OFFLINE 1228 //費 -#define NET_DVR_ERR_WIRELESS_DEV_TAMPER_STATUS 1229 //账ڷ״̬ -#define NET_DVR_ERR_GPRS_PHONE_CONFLICT 1230 //绰߱ijͻ -#define NET_ERR_INIT_PASSWORD_NOT_MODIFY 1231 //ʼδ޸ģ޷װ/Աûڳʼδ޸ʱ޸û⣬ظô -#define NET_ERR_USER_DISABLED 1232 //ûδ -#define NET_ERR_DEVICE_DEBUGGING 1233 //ǰ豸ڵģʽ -//Ϣ -#define NET_ERR_GET_ALL_RETURN_OVER 1300 //ȡзĿ -#define NET_ERR_RESOURCE_USING 1301 //ϢԴʹã޸ -#define NET_ERR_FILE_SIZE_OVERLIMIT 1302 //ļС - -//Ϣ -#define NET_ERR_MATERIAL_NAME 1303 //زƷǷ -#define NET_ERR_MATERIAL_NAME_LEN 1304 //زƳȷǷ -#define NET_ERR_MATERIAL_REMARK 1305 //زǷ -#define NET_ERR_MATERIAL_REMARK_LEN 1306 //زȷǷ -#define NET_ERR_MATERIAL_SHARE_PROPERTY 1307 //زĹԷǷ -#define NET_ERR_UNSUPPORT_MATERIAL_TYPE 1308 //زͲ֧ -#define NET_ERR_MATERIAL_NOT_EXIST 1309 //زIJ -#define NET_ERR_READ_FROM_DISK 1310 //Ӳ̶ȡزļʧ -#define NET_ERR_WRITE_TO_DISK 1311 //Ӳдزļʧ -#define NET_ERR_WRITE_DATA_BASE 1312 //زдݿʧ -#define NET_ERR_NO_APPROVED_NOT_EXPORT 1313 //δݽֹ -#define NET_ERR_MATERIAL_EXCEPTION 1314 //ز쳣 -#define NET_ERR_NO_MISINFO 1315 //Ϣ -#define NET_ERR_LAN_NOT_SUP_DHCP_CLIENT_CONFIGURATION 1316 //·ģʽ£DHCPͻ˷ش -#define NET_ERR_VIDEOWALL_OPTPORT_RESOLUTION_INCONSISTENT 1317 //ǽϸڷֱʲһ(ҪֱΪ4K쳣ʱ) -#define NET_ERR_VIDEOWALL_OPTPORT_RESOLUTION_INCONSISTENT_UNBIND_OPTPORT_FIRST 1318 //ǽϸڷֱʲһ£Ƚ(Ҫڰڳ쳣ʱ) -#define NET_ERR_FOUR_K_OUTPUT_RESOLUTION_UNSUPPORT_NINE_TO_SIXTEEN_SPLIT_SCREEN 1319 //4Kֱʲ֧9/16 -#define NET_ERR_SIGNAL_SOURCE_UNSUPPORT_CUSTOM_RESOLUTION 1320 //źԴָ֧Զֱ -#define NET_ERR_DVI_UNSUPPORT_FOURK_OUTPUT_RESOLUTION 1321 //DVI֧4Kֱ -#define NET_ERR_BNC_UNSUPPORT_SOURCE_CROPPING 1322 //BNC֧źԴü -#define NET_ERR_OUTPUT_NOT_SUPPORT_VIDEOWALL_RESOLUTION 1323 //ڲֵ֧ǽֱ - -// -#define NET_ERR_MAX_SCREEN_CTRL_NUM 1351 //Ļﵽ -#define NET_ERR_FILE_NOT_EXIST 1352 //ļ -#define NET_ERR_THUMBNAIL_NOT_EXIST 1353 //ͼ -#define NET_ERR_DEV_OPEN_FILE_FAIL 1354 //豸˴ļʧ -#define NET_ERR_SERVER_READ_FILE_FAIL 1355 //豸˶ȡļʧ -#define NET_ERR_FILE_SIZE 1356 //ļС -#define NET_ERR_FILE_NAME 1357 //ļƴΪջ򲻺Ϸ - -//ֶδ루1351-1400 -#define NET_ERR_BROADCAST_BUSY 1358 //豸ڹ㲥 - -//2012-12-20ץĻ루1400-1499 -#define NET_DVR_ERR_LANENUM_EXCEED 1400 // -#define NET_DVR_ERR_PRAREA_EXCEED 1401 //ʶ -#define NET_DVR_ERR_LIGHT_PARAM 1402 //źŵƽ -#define NET_DVR_ERR_LANE_LINE_INVALID 1403 //ô -#define NET_DVR_ERR_STOP_LINE_INVALID 1404 //ֹͣô -#define NET_DVR_ERR_LEFTORRIGHT_LINE_INVALID 1405 ///תֽô -#define NET_DVR_ERR_LANE_NO_REPEAT 1406 //ӳظ -#define NET_DVR_ERR_PRAREA_INVALID 1407 //ʶβҪ -#define NET_DVR_ERR_LIGHT_NUM_EXCEED 1408 //Ƶ⽻ͨźŵĿֵ -#define NET_DVR_ERR_SUBLIGHT_NUM_INVALID 1409 //Ƶ⽻ͨźŵӵĿϷ -#define NET_DVR_ERR_LIGHT_AREASIZE_INVALID 1410 //Ƶ⽻ͨźŵƿСϷ -#define NET_DVR_ERR_LIGHT_COLOR_INVALID 1411 //Ƶ⽻ͨźŵɫϷ -#define NET_DVR_ERR_LIGHT_DIRECTION_INVALID 1412 //Ƶ⽻ͨƷԲϷ -#define NET_DVR_ERR_LACK_IOABLITY 1413 //IOʵֵ֧ - -#define NET_DVR_ERR_FTP_PORT 1414 //FTP˿ںŷǷ˿ںظ쳣 -#define NET_DVR_ERR_FTP_CATALOGUE 1415 //FTPĿ¼Ƿö༶Ŀ¼༶Ŀ¼ֵΪգ -#define NET_DVR_ERR_FTP_UPLOAD_TYPE 1416 //FTPϴͷǷftpֻ֧ȫ/˫ftpֻֿ֧ںΥ£ -#define NET_DVR_ERR_FLASH_PARAM_WRITE 1417 //òʱдFLASHʧ -#define NET_DVR_ERR_FLASH_PARAM_READ 1418 //òʱFLASHʧ -#define NET_DVR_ERR_PICNAME_DELIMITER 1419 //FTPͼƬָǷ -#define NET_DVR_ERR_PICNAME_ITEM 1420 //FTPͼƬǷ ָ -#define NET_DVR_ERR_PLATE_RECOGNIZE_TYPE 1421 //ʶͷǷ κͶЧУ飩 -#define NET_DVR_ERR_CAPTURE_TIMES 1422 //ץĴǷ Чֵ05 -#define NET_DVR_ERR_LOOP_DISTANCE 1423 //ȦǷ Чֵ02000ms -#define NET_DVR_ERR_LOOP_INPUT_STATUS 1424 //Ȧ״̬Ƿ Чֵ -#define NET_DVR_ERR_RELATE_IO_CONFLICT 1425 //IOͻ -#define NET_DVR_ERR_INTERVAL_TIME 1426 //ļʱǷ 06000ms -#define NET_DVR_ERR_SIGN_SPEED 1427 //־ֵǷ󳵱־ٲܴС־ -#define NET_DVR_ERR_PIC_FLIP 1428 //ͼ÷ת ýӰ죩 -#define NET_DVR_ERR_RELATE_LANE_NUMBER 1429 // (ظ ЧֵУ199) -#define NET_DVR_ERR_TRIGGER_MODE 1430 //ץĻģʽǷ -#define NET_DVR_ERR_DELAY_TIME 1431 //ʱʱ(2000ms) -#define NET_DVR_ERR_EXCEED_RS485_COUNT 1432 //485 -#define NET_DVR_ERR_RADAR_TYPE 1433 //״ʹ -#define NET_DVR_ERR_RADAR_ANGLE 1434 //״Ƕȴ -#define NET_DVR_ERR_RADAR_SPEED_VALID_TIME 1435 //״Чʱ -#define NET_DVR_ERR_RADAR_LINE_CORRECT 1436 //״Խ -#define NET_DVR_ERR_RADAR_CONST_CORRECT 1437 //״ﳣ -#define NET_DVR_ERR_RECORD_PARAM 1438 //¼ЧԤ¼ʱ䲻10s -#define NET_DVR_ERR_LIGHT_WITHOUT_COLOR_AND_DIRECTION 1439 //ƵźŵźŵƸûйѡźŵƷɫ -#define NET_DVR_ERR_LIGHT_WITHOUT_DETECTION_REGION 1440 //ƵźŵźŵƸûл -#define NET_DVR_ERR_RECOGNIZE_PROVINCE_PARAM 1441 //ʶʡݲĺϷ - -#define NET_DVR_ERR_SPEED_TIMEOUT 1442 //IOٳʱʱǷЧֵ0 -#define NET_DVR_ERR_NTP_TIMEZONE 1443 //ntpʱ -#define NET_DVR_ERR_NTP_INTERVAL_TIME 1444 //ntpУʱ -#define NET_DVR_ERR_NETWORK_CARD_NUM 1445 //Ŀ -#define NET_DVR_ERR_DEFAULT_ROUTE 1446 //Ĭ·ɴ -#define NET_DVR_ERR_BONDING_WORK_MODE 1447 //bondingģʽ -#define NET_DVR_ERR_SLAVE_CARD 1448 //slave -#define NET_DVR_ERR_PRIMARY_CARD 1449 //Primary -#define NET_DVR_ERR_DHCP_PPOE_WORK 1450 //dhcppppoEͬʱ -#define NET_DVR_ERR_NET_INTERFACE 1451 //ӿڴ -#define NET_DVR_ERR_MTU 1452 //MTU -#define NET_DVR_ERR_NETMASK 1453 // -#define NET_DVR_ERR_IP_INVALID 1454 //IPַϷ -#define NET_DVR_ERR_MULTICAST_IP_INVALID 1455 //ಥַϷ -#define NET_DVR_ERR_GATEWAY_INVALID 1456 //زϷ -#define NET_DVR_ERR_DNS_INVALID 1457 //DNSϷ -#define NET_DVR_ERR_ALARMHOST_IP_INVALID 1458 //澯ַϷ -#define NET_DVR_ERR_IP_CONFLICT 1459 //IPͻ -#define NET_DVR_ERR_NETWORK_SEGMENT 1460 //IP֧ͬ -#define NET_DVR_ERR_NETPORT 1461 //˿ڴ - -#define NET_DVR_ERR_PPPOE_NOSUPPORT 1462 //PPPOE֧ -#define NET_DVR_ERR_DOMAINNAME_NOSUPPORT 1463 //֧ -#define NET_DVR_ERR_NO_SPEED 1464 //δòٹ -#define NET_DVR_ERR_IOSTATUS_INVALID 1465 //IO״̬ -#define NET_DVR_ERR_BURST_INTERVAL_INVALID 1466 //ļǷ -#define NET_DVR_ERR_RESERVE_MODE 1467 //ģʽ - -#define NET_DVR_ERR_LANE_NO 1468 //ӳŴ -#define NET_DVR_ERR_COIL_AREA_TYPE 1469 //Ȧʹ -#define NET_DVR_ERR_TRIGGER_AREA_PARAM 1470 // -#define NET_DVR_ERR_SPEED_LIMIT_PARAM 1471 //Υٲ -#define NET_DVR_ERR_LANE_PROTOCOL_TYPE 1472 //Эʹ - -#define NET_DVR_ERR_INTERVAL_TYPE 1473 //ļͷǷ -#define NET_DVR_ERR_INTERVAL_DISTANCE 1474 //ļǷ -#define NET_DVR_ERR_RS485_ASSOCIATE_DEVTYPE 1475 //RS485ͷǷ -#define NET_DVR_ERR_RS485_ASSOCIATE_LANENO 1476 //RS485ŷǷ -#define NET_DVR_ERR_LANENO_ASSOCIATE_MULTIRS485 1477 //ŹRS485 -#define NET_DVR_ERR_LIGHT_DETECTION_REGION 1478 //ƵźŵźŵƸǼΪ0 - -#define NET_DVR_ERR_DN2D_NOSUPPORT 1479 //֧ץ֡2D -#define NET_DVR_ERR_IRISMODE_NOSUPPORT 1480 //ֵ֧ľͷ -#define NET_DVR_ERR_WB_NOSUPPORT 1481 //ֵ֧İƽģʽ -#define NET_DVR_ERR_IO_EFFECTIVENESS 1482 //IOڵЧ -#define NET_DVR_ERR_LIGHTNO_MAX 1483 //źŵƼ/ƵƳ(16) -#define NET_DVR_ERR_LIGHTNO_CONFLICT 1484 //źŵƼ/ƵƳͻ - -#define NET_DVR_ERR_CANCEL_LINE 1485 //ֱд -#define NET_DVR_ERR_STOP_LINE 1486 //ֹͣ -#define NET_DVR_ERR_RUSH_REDLIGHT_LINE 1487 //ƴ -#define NET_DVR_ERR_IOOUTNO_MAX 1488 //IOڱԽ - -#define NET_DVR_ERR_IOOUTNO_AHEADTIME_MAX 1489 //IOǰʱ䳬 -#define NET_DVR_ERR_IOOUTNO_IOWORKTIME 1490 //IOЧʱ䳬 -#define NET_DVR_ERR_IOOUTNO_FREQMULTI 1491 //IOģʽ±Ƶ -#define NET_DVR_ERR_IOOUTNO_DUTYRATE 1492 //IOģʽռձȳ -#define NET_DVR_ERR_VIDEO_WITH_EXPOSURE 1493 //Чʽ֧Ƶ -#define NET_DVR_ERR_PLATE_BRIGHTNESS_WITHOUT_FLASHDET 1494 //ԶʹƽڳȲģʽЧ - -#define NET_DVR_ERR_RECOGNIZE_TYPE_PARAM 1495 //ʶͷǷ ʶ󳵡С򡢳ʶȣ -#define NET_DVR_ERR_PALTE_RECOGNIZE_AREA_PARAM 1496 //ʶǷ ʶʱжϳ -#define NET_DVR_ERR_PORT_CONFLICT 1497 //˿гͻ -#define NET_DVR_ERR_LOOP_IP 1498 //IPΪػַ -#define NET_DVR_ERR_DRIVELINE_SENSITIVE 1499 //ѹȳ(Ƶ羯ģʽ) - - -//2013-3-6VQD루15001550 -#define NET_ERR_VQD_TIME_CONFLICT 1500 //VQDʱγͻ -#define NET_ERR_VQD_PLAN_NO_EXIST 1501 //VQDϼƻ -#define NET_ERR_VQD_CHAN_NO_EXIST 1502 //VQD㲻 -#define NET_ERR_VQD_CHAN_MAX 1503 //VQDƻѴ -#define NET_ERR_VQD_TASK_MAX 1504 //VQDѴ - -#define NET_SDK_GET_INPUTSTREAMCFG 1551 //ȡźԴ -#define NET_SDK_AUDIO_SWITCH_CONTROL 1552 //ӴƵؿ -#define NET_SDK_GET_VIDEOWALLDISPLAYNO 1553 //ȡ豸ʾ -#define NET_SDK_GET_ALLSUBSYSTEM_BASIC_INFO 1554//ȡϵͳϢ -#define NET_SDK_SET_ALLSUBSYSTEM_BASIC_INFO 1555 //ϵͳϢ -#define NET_SDK_GET_AUDIO_INFO 1556//ȡƵϢ -#define NET_SDK_GET_MATRIX_STATUS_V50 1557 // ȡƵۺƽ̨״̬_V50 -#define NET_SDK_DELETE_MONITOR_INFO 1558//ɾMonitorϢ -#define NET_SDK_DELETE_CAMERA_INFO 1559//ɾCamaeraϢ - - -//ץĻչ(1600~1900) -#define NET_DVR_ERR_EXCEED_MAX_CAPTURE_TIMES 1600 //ץģʽΪƵʱץΪ2(IVTģʽ) -#define NET_DVR_ERR_REDAR_TYPE_CONFLICT 1601 //ͬ485ڹ״ͳͻ -#define NET_DVR_ERR_LICENSE_PLATE_NULL 1602 //ƺΪ -#define NET_DVR_ERR_WRITE_DATABASE 1603 //дݿʧ -#define NET_DVR_ERR_LICENSE_EFFECTIVE_TIME 1604 //Чʱ -//Ƶ羯 -#define NET_DVR_ERR_PRERECORDED_STARTTIME_LONG 1605 //Ԥ¼ʼʱΥץ -//Ͽ -#define NET_DVR_ERR_TRIGGER_RULE_LINE 1606 //ߴ -#define NET_DVR_ERR_LEFTRIGHT_TRIGGERLINE_NOTVERTICAL 1607 ///Ҵֱ߲ -#define NET_DVR_ERR_FLASH_LAMP_MODE 1608 //˸ģʽ -#define NET_DVR_ERR_ILLEGAL_SNAPSHOT_NUM 1609 //Υץ -#define NET_DVR_ERR_ILLEGAL_DETECTION_TYPE 1610 //Υ¼ʹ -#define NET_DVR_ERR_POSITIVEBACK_TRIGGERLINE_HIGH 1611 //򴥷߸߶ȴ -#define NET_DVR_ERR_MIXEDMODE_CAPTYPE_ALLTARGETS 1612 //ģʽֻֻ֧ץ - -#define NET_DVR_ERR_CARSIGNSPEED_GREATERTHAN_LIMITSPEED 1613//С־ٴֵ -#define NET_DVR_ERR_BIGCARSIGNSPEED_GREATERTHAN_LIMITSPEED 1614//󳵱־ٴֵ -#define NET_DVR_ERR_BIGCARSIGNSPEED_GREATERTHAN_CARSIGNSPEED 1615//󳵱־ٴС־ֵ -#define NET_DVR_ERR_BIGCARLIMITSPEED_GREATERTHAN_CARLIMITSPEED 1616//ֵСֵ -#define NET_DVR_ERR_BIGCARLOWSPEEDLIMIT_GREATERTHAN_CARLOWSPEEDLIMIT 1617//󳵵ֵСֵ -#define NET_DVR_ERR_CARLIMITSPEED_GREATERTHAN_EXCEPHIGHSPEED 1618//Сٴ쳣ֵ -#define NET_DVR_ERR_BIGCARLIMITSPEED_GREATERTHAN_EXCEPHIGHSPEED 1619//ٴ쳣ֵ -#define NET_DVR_ERR_STOPLINE_MORETHAN_TRIGGERLINE 1620//ֱֹͣ߳д -#define NET_DVR_ERR_YELLOWLIGHTTIME_INVALID 1621/*ƵƵƳʱ䲻Ϸ*/ -#define NET_DVR_ERR_TRIGGERLINE1_FOR_NOT_YIELD_TO_PEDESTRIAN_CANNOT_EXCEED_TRIGGERLINE2 1622//һ˴ߵλó˵ڶ˴ -#define NET_DVR_ERR_TRIGGERLINE2_FOR_NOT_YIELD_TO_PEDESTRIAN_CANNOT_EXCEED_TRIGGERLINE1 1623//ڶ˴ߵλó˵һ˴ - -//Ž -#define NET_ERR_TIME_OVERLAP 1900 //ʱص -#define NET_ERR_HOLIDAY_PLAN_OVERLAP 1901 //ռƻص -#define NET_ERR_CARDNO_NOT_SORT 1902 //δ -#define NET_ERR_CARDNO_NOT_EXIST 1903 //Ų -#define NET_ERR_ILLEGAL_CARDNO 1904 //Ŵ -#define NET_ERR_ZONE_ALARM 1905 //ڲ״̬(޸IJ) -#define NET_ERR_ZONE_OPERATION_NOT_SUPPORT 1906 //ָ֧ò -#define NET_ERR_INTERLOCK_ANTI_CONFLICT 1907 //ŻͷDZͬʱô -#define NET_ERR_DEVICE_CARD_FULL 1908 //ﵽ10W󷵻أ -#define NET_ERR_HOLIDAY_GROUP_DOWNLOAD 1909 //ʧ -#define NET_ERR_LOCAL_CONTROL_OFF 1910 //͵ؿ -#define NET_ERR_LOCAL_CONTROL_DISADD 1911 //͵ؿδ -#define NET_ERR_LOCAL_CONTROL_HASADD 1912 //͵ؿ -#define NET_ERR_LOCAL_CONTROL_DOORNO_CONFLICT 1913 //ӵľ͵ؿűųͻ -#define NET_ERR_LOCAL_CONTROL_COMMUNICATION_FAIL 1914 //͵ؿͨʧ -#define NET_ERR_OPERAND_INEXISTENCE 1915 //󲻴ڣšزδʱأ -#define NET_ERR_LOCAL_CONTROL_OVER_LIMIT 1916 //͵ؿ豸ضԾ͵ƣ -#define NET_ERR_DOOR_OVER_LIMIT 1917 //ų豸 -#define NET_ERR_ALARM_OVER_LIMIT 1918 //豸 -#define NET_ERR_LOCAL_CONTROL_ADDRESS_INCONFORMITY_TYPE 1919 //͵ؿַͲ -#define NET_ERR_NOT_SUPPORT_ONE_MORE_CARD 1920 //֧һ˶࿨ -#define NET_ERR_DELETE_NO_EXISTENCE_FACE 1921 //ɾ -#define NET_ERR_DOOR_SPECIAL_PASSWORD_REPEAT 1922 //豸ظ -#define NET_ERR_AUTH_CODE_REPEAT 1923 //豸֤ظ -#define NET_ERR_DEPLOY_EXCEED_MAX 1924 // -#define NET_ERR_NOT_SUPPORT_DEL_FP_BY_ID 1925 //ְָ֧IDɾָ -#define NET_ERR_TIME_RANGE 1926 //Чڲ÷Χ -#define NET_ERR_CAPTURE_TIMEOUT 1927 //ɼʱ -#define NET_ERR_LOW_SCORE 1928 //ɼ -#define NET_ERR_OFFLINE_CAPTURING 1929 //߲ɼУ޷Ӧ - -//ӶԽ -#define NET_DVR_ERR_OUTDOOR_COMMUNICATION 1950 //ſڻͨ쳣 -#define NET_DVR_ERR_ROOMNO_UNDEFINED 1951 //δ÷ -#define NET_DVR_ERR_NO_CALLING 1952 //޺ -#define NET_DVR_ERR_RINGING 1953 // -#define NET_DVR_ERR_IS_CALLING_NOW 1954 //ͨ -#define NET_DVR_ERR_LOCK_PASSWORD_WRONG 1955// -#define NET_DVR_ERR_CONTROL_LOCK_FAILURE 1956//ʧ -#define NET_DVR_ERR_CONTROL_LOCK_OVERTIME 1957//ʱ -#define NET_DVR_ERR_LOCK_DEVICE_BUSY 1958//豸æ -#define NET_DVR_ERR_UNOPEN_REMOTE_LOCK_FUNCTION 1959//Զ̿δ - - -//˴ 2100 - 3000 -#define NET_DVR_ERR_FILE_NOT_COMPLETE 2100 //صļ -#define NET_DVR_ERR_IPC_EXIST 2101 //IPCѾ -#define NET_DVR_ERR_ADD_IPC 2102 //ͨIPC -#define NET_DVR_ERR_OUT_OF_RES 2103 // -#define NET_DVR_ERR_CONFLICT_TO_LOCALIP 2104 //IPCipַDVRipַͻ -#define NET_DVR_ERR_IP_SET 2105 //Ƿipַ -#define NET_DVR_ERR_PORT_SET 2106 //ǷĶ˿ں - -#define NET_ERR_WAN_NOTSUPPORT 2107 //ͬһ޷ðȫ򵼳GUIDļ -#define NET_ERR_MUTEX_FUNCTION 2108 //ܻ -#define NET_ERR_QUESTION_CONFIGNUM 2109 //ȫ -#define NET_ERR_FACECHAN_NORESOURCE 2110 //ͨԴ -#define NET_ERR_DATA_CALLBACK 2111 //ݻǨ -#define NET_ERR_ATM_VCA_CHAN_IS_RELATED 2112 //ATMͨѱ -#define NET_ERR_ATM_VCA_CHAN_IS_OVERLAPED 2113 //ATMͨѱ -#define NET_ERR_FACE_CHAN_UNOVERLAP_EACH_OTHER 2114 //ܻͨ -#define NET_ERR_ACHIEVE_MAX_CHANNLE_LIMIT 2115 //ﵽ· -#define NET_DVR_SMD_ENCODING_NORESOURSE 2116 //SMDԴ -#define NET_DVR_SMD_DECODING_NORESOURSE 2117 //SMDԴ -#define NET_DVR_FACELIB_DATA_PROCESSING 2118 //ڴ -#define NET_DVR_ERR_LARGE_TIME_DIFFRENCE 2119 //豸ͷ֮ʱ̫ -#define NET_DVR_NO_SUPPORT_WITH_PLAYBACK 2120 //ѿطţֱ֧ -#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_SMD 2121 //ͨѿSMDֱ֧ -#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_FD 2122 //ͨѿĿץģֱ֧ -#define NET_DVR_ILLEGAL_PHONE_NUMBER 2123 //Ƿĵ绰 -#define NET_DVR_ILLEGAL_CERITIFICATE_NUMBER 2124 //Ƿ֤ -#define NET_DVR_ERR_CHANNEL_RESOLUTION_NO_SUPPORT 2125 //ֱͨʲ֧ -#define NET_DVR_ERR_CHANNEL_COMPRESSION_NO_SUPPORT 2126 //ͨʽ֧ - -#define NET_DVR_ERR_CLUSTER_DEVICE_TOO_LESS 2127 //豸٣ɾ -#define NET_DVR_ERR_CLUSTER_DEL_DEVICE_CM_PLAYLOAD 2128 //豸ǼȺɾ -#define NET_DVR_ERR_CLUSTER_DEVNUM_OVER_UPPER_LIMIT 2129 //豸ﵽޣ -#define NET_DVR_ERR_CLUSTER_DEVICE_TYPE_INCONFORMITY 2130 //豸Ͳһ -#define NET_DVR_ERR_CLUSTER_DEVICE_VERSION_INCONFORMITY 2131 //豸汾һ -#define NET_DVR_ERR_CLUSTER_IP_CONFLICT 2132 //ȺϵͳIPַͻipv4ַͻipv6ַͻ -#define NET_DVR_ERR_CLUSTER_IP_INVALID 2133 //ȺϵͳIPַЧipv4Ƿipv6Ƿ -#define NET_DVR_ERR_CLUSTER_PORT_CONFLICT 2134 //Ⱥϵͳ˿ڳͻ -#define NET_DVR_ERR_CLUSTER_PORT_INVALID 2135 //Ⱥϵͳ˿ڷǷ -#define NET_DVR_ERR_CLUSTER_USERNAEM_OR_PASSWORD_INVALID 2136 //ûǷ -#define NET_DVR_ERR_CLUSTER_DEVICE_ALREADY_EXIST 2137 //ͬ豸 -#define NET_DVR_ERR_CLUSTER_DEVICE_NOT_EXIST 2138 //豸(ʱ·csбе豸Ϣκһ̨cs϶Ҳɾʱ·id) -#define NET_DVR_ERR_CLUSTER_NON_CLUSTER_MODE 2139 //豸ڷǼȺģʽ -#define NET_DVR_ERR_CLUSTER_IP_NOT_SAME_LAN 2140 //IPַͬһͬ/ - -#define NET_DVR_ERR_CAPTURE_PACKAGE_FAILED 2141 //ץʧ -#define NET_DVR_ERR_CAPTURE_PACKAGE_PROCESSING 2142 //ץ -#define NET_DVR_ERR_SAFETY_HELMET_NO_RESOURCE 2143 //ȫñԴ -#define NET_DVR_NO_SUPPORT_WITH_ABSTRACT 2144 //ѿƵժҪֱ֧ -#define NET_DVR_ERR_TAPE_LIB_NEED_STOP_ARCHIVE 2145 //Ŵ鵵Ҫֹͣ -#define NET_DVR_INSUFFICIENT_DEEP_LEARNING_RESOURCES 2146 //ѧϰԴ -#define NET_DVR_ERR_IDENTITY_KEY 2147 // -#define NET_DVR_MISSING_IDENTITY_KEY 2148 //ȱʧ -#define NET_DVR_NO_SUPPORT_WITH_PERSON_DENSITY_DETECT 2149 //ѿԱܶȼ⣬ֱ֧ -#define NET_DVR_IPC_RESOLUTION_OVERFLOW 2150 //IPCֱʳ -#define NET_DVR_IPC_BITRATE_OVERFLOW 2151 //IPCʳ -#define NET_DVR_ERR_INVALID_TASKID 2152 //ЧtaskID -#define NET_DVR_PANEL_MODE_NOT_CONFIG 2153 //û· -#define NET_DVR_NO_HUMAN_ENGINES_RESOURCE 2154 //Դ -#define NET_DVR_ERR_TASK_NUMBER_OVERFLOW 2155 //ݳ -#define NET_DVR_ERR_COLLISION_TIME_OVERFLOW 2156 //ײʱ䳬 -#define NET_DVR_ERR_CAPTURE_PACKAGE_NO_USB 2157 //δʶỤU̻² -#define NET_DVR_ERR_NO_SET_SECURITY_EMAIL 2158 //δðȫ -#define NET_DVR_ERR_EVENT_NOTSUPPORT 2159 //¼֧ -#define NET_DVR_ERR_PASSWORD_FORMAT 2160 //ʽ -#define NET_DVR_ACCESS_FRONT_DEVICE_PARAM_FAILURE 2161 //ȡǰ豸ʧ -#define NET_DVR_ACCESS_FRONT_DEVICE_STREAM_FAILURE 2162 //ǰ豸ȡʧ -#define NET_DVR_ERR_USERNAME_FORMAT 2163 //ûʽ -#define NET_DVR_ERR_UNOPENED_HIGH_RESOLUTION_MODE 2164 //߷ֱģʽδ -#define NET_DVR_ERR_TOO_SMALL_QUATO 2165 //̫С -#define NET_DVR_ERR_EMAIL_FORMAT 2166 //ʽ -#define NET_DVR_ERR_SECURITY_CODE_FORMAT 2167 //ȫʽ -#define NET_DVR_PD_SPACE_TOO_SMALL 2168 //Ӳ̫С -#define NET_DVR_PD_NUM_TOO_BIG 2169 //ӲĶ֮һ -#define NET_DVR_ERR_USB_IS_FULL 2170 //U -#define NET_DVR_EXCEED_MAX_SMD_TYPE 2171 //ﵽSMD¼ -#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_BEHAVIOR 2172 //ͨѿ쳣Ϊ⣬ֱ֧ -#define NET_DVR_NO_BEHAVIOR_ENGINES_RESOURCE 2173 //쳣ΪԴ -#define NET_DVR_NO_RETENTION_ENGINES_RESOURCE 2174 //ԱԴ -#define NET_DVR_NO_LEAVE_POSITION_ENGINES_RESOURCE 2175 //ڼԴ -#define NET_DVR_NO_PEOPLE_NUM_CHANGE_ENGINES_RESOURCE 2176 //쳣Դ -#define NET_DVR_PANEL_MODE_NUM_OVER_LIMIT 2177 //·· -#define NET_DVR_SURROUND_MODE_NUM_OVER_LIMIT 2178 //·· -#define NET_DVR_FACE_MODE_NUM_OVER_LIMIT 2179 //·· -#define NET_DVR_SAFETYCABIN_MODE_NUM_OVER_LIMIT 2180 //·· -#define NET_DVR_DETECT_REGION_RANGE_INVALID 2181 //ΧǷ -#define NET_DVR_CHANNEL_CAPTURE_PICTURE_FAILURE 2182 //ͨץͼʧ -#define NET_DVR_VCACHAN_IS_NORESOURCE 2183 //ͨԴ -#define NET_DVR_IPC_NUM_REACHES_LIMIT 2184 // IpcͨĿﵽ -#define NET_DVR_IOT_NUM_REACHES_LIMIT 2185 // IOTͨĿﵽ -#define NET_DVR_IOT_CHANNEL_DEVICE_EXIST 2186 //ǰIOTͨѾ豸 -#define NET_DVR_IOT_CHANNEL_DEVICE_NOT_EXIST 2187 //ǰIOTͨ豸 -#define NET_DVR_INVALID_IOT_PROTOCOL_TYPE 2188 //ǷIOTЭ -#define NET_DVR_INVALID_EZVIZ_SECRET_KEY 2189 //Ƿөʯע֤ -#define NET_DVR_DUPLICATE_IOT_DEVICE 2190 //ظIOT豸 -#define NET_DVR_SADP_MODIFY_FALIURE 2191 // SADP޸ʧ -#define NET_DVR_IPC_NETWORK_ABNORMAL 2192 // IPC쳣 -#define NET_DVR_IPC_PASSWORD_ERROR 2193 // IPCû -#define NET_DVR_ERROR_IPC_TYPE 2194 //IPCͲ -#define NET_DVR_ERROR_IPC_LIST_NOT_EMPTY 2195 //IPCбΪգ֧һ -#define NET_DVR_ERROR_IPC_LIST_NOT_MATCH_PAIRING 2196 //IPCб䵥ƥ -#define NET_DVR_ERROR_IPC_BAD_LANGUAGE 2197 //IPCԺ豸ƥ -#define NET_DVR_ERROR_IPC_IS_LOCKING 2198 //IPCѱ -#define NET_DVR_ERROR_IPC_NOT_ACTIVATED 2199 //IPCδ -#define NET_DVR_FIELD_CODING_NOT_SUPPORT 2200 //벻֧ -#define NET_DVR_ERROR_H323_NOT_SUPPORT_H265 2201 //H323ƵͲ֧H265 -#define NET_DVR_ERROR_EXPOSURE_TIME_TOO_BIG_IN_MODE_P 2202 //Pʽ£عʱ -#define NET_DVR_ERROR_EXPOSURE_TIME_TOO_BIG_IN_MODE_N 2203 //Nʽ£عʱ -#define NET_DVR_ERROR_PING_PROCESSING 2204 //PING -#define NET_DVR_ERROR_PING_NOT_START 2205 //Pingδʼ -#define NET_DVR_ERROR_NEED_DOUBLE_VERIFICATION 2206 //Ҫ֤ -#define NET_DVR_NO_DOUBLE_VERIFICATION_USER 2207 //޶֤û -#define NET_DVR_CHANNEL_OFFLINE 2208 //ͨ -#define NET_DVR_TIMESPAN_NUM_OVER_LIMIT 2209 //ʱγ֧Ŀ -#define NET_DVR_CHANNEL_NUM_OVER_LIMIT 2210 //ͨĿ֧Ŀ -#define NET_DVR_NO_SEARCH_ID_RESOURCE 2211 //ҳѯsearchIDԴ -#define NET_DVR_ERROR_ONEKEY_EXPORT 2212 //ڽеԺ -#define NET_DVR_NO_CITY_MANAGEMENT_ENGINES_RESOURCE 2213 //ǹ㷨Դ -#define NET_DVR_NO_SITUATION_ANALYSIS_ENGINES_RESOURCE 2214 //̬ƷԴ -#define NET_DVR_INTELLIGENT_ANALYSIS_IPC_CANNT_DELETE 2215 //ڽܷIPC޷ɾ -#define NET_DVR_NOSUPPORT_RESET_PASSWORD 2216 //NVRֶ֧IPC -#define NET_DVR_ERROR_IPC_NEED_ON_LAN 2217 // IPCҪھ -#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_SAFETY_HELMET 2218 //ͨѿȫñ⣬ֱ֧ -#define NET_DVR_ERROR_GET_RESETPASSWORDTYPE_IS_ABNORMAL 2219 /*IPCʱȡIPC쳣*/ -#define NET_DVR_ERROR_IPC_NOSUPPORT_RESET_PASSWORD 2220 /* IPC֧*/ -#define NET_DVR_ERROR_IP_IS_NOT_ONLY_ONE 2221 /*IPCIPΨһظ*/ -#define NET_DVR_NO_SUPPORT_WITH_SMD_OR_SCD 2222 //ѿSMD/SCDֱ֧ܣSCDΪ -#define NET_DVR_NO_SUPPORT_WITH_FD 2223 //ѿĿץģֱ֧ -#define NET_DVR_NO_FD_ENGINES_RESOURCE 2224 //ĿץԴ -#define NET_DVR_ERROR_ONEKEY_REMOVE 2225 //ڽɾԺ -#define NET_DVR_FACE_PIP_BACKGROUND_CHANNEL_OVERFLOW 2226 //лͨ -#define NET_DVR_MICIN_CHANNEL_OCCUPIED 2227 //micinͨռ -#define NET_DVR_IPC_CHANNEL_IS_IN_PIP 2228 //ʧܣͨѹѶͨȡлù - -#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_FACE_CONTRAST 2229 //ͨѿȶԣֱ֧ - -#define NET_DVR_INVALID_RECHARGE_CARD 2230 //Чijֵ -#define NET_DVR_CLOUD_PLATFORM_SERVER_EXCEPTION 2231 //ƽ̨쳣 -#define NET_DVR_OPERATION_FAILURE_WITHOUT_LOGIN 2232 //δ¼ʧ -#define NET_DVR_INVALID_ASSOCIATED_SERIAL_NUMBER 2233 //кŷǷ -#define NET_DVR_CLOUD_PLATFORM_ACCOUNT_NOT_EXIST 2234 //ƽ̨ʺŲ -#define NET_DVR_DEVICE_SERIAL_NUMBER_REGISTERED 2235 //豸кע -#define NET_DVR_CONFERENCE_ROOM_NOT_EXIST 2236 //Ҳ -#define NET_DVR_NEED_DISABLED_ANALOG_CHANNEL 2237//ģͨ -#define NET_DVR_STUDENT_ROLL_CALL_FAILURE 2238//ѧʧ -#define NET_DVR_SUB_DEVICE_NOT_ENABLE_INDIVIDUAL_BEHAVIOR 2239//豸δøΪģʽ -#define NET_DVR_SUB_DEVICE_CHANNEL_CONTROL_FAILED 2240//豸ͨʧ -#define NET_DVR_DEVICE_NOT_IN_CONFERENCE 2241//豸ڻ -#define NET_DVR_ALREADY_EXIST_CONFERENCE 2242//ǰѾڻ -#define NET_DVR_NO_SUPPORT_WITH_VIDEO_CONFERENCE 2243//ǰƵУֱ֧ -#define NET_DVR_START_INTERACTION_FAILURE 2244//ʼʧ -#define NET_DVR_ASK_QUESTION_STARTED 2245//ѿʼ -#define NET_DVR_ASK_QUESTION_CLOSED 2246//ѽ -#define NET_DVR_UNABLE_OPERATE_BY_HOST 2247//ѱ˽ã޷ -#define NET_DVR_REPEATED_ASK_QUESTION 2248//ظ -#define NET_DVR_SWITCH_TIMEDIFF_LESS_LIMIT 2249/*ػʱСֵ(10)*/ -#define NET_DVR_CHANNEL_DEVICE_EXIST 2250 //ǰͨѾ豸 -#define NET_DVR_CHANNEL_DEVICE_NOT_EXIST 2251 //ǰͨ豸 -#define NET_DVR_ERROR_ADJUSTING_RESOLUTION 2252 //ȹرIJüٵֱ -#define NET_DVR_SSD_FILE_SYSTEM_IS_UPGRADING 2253 //SSDļϵͳ -#define NET_DVR_SSD_FILE_SYSTEM_IS_FORMAT 2254 //SSDڸʽ -#define NET_DVR_CHANNEL_IS_CONNECTING 2255 //ǰͨ - -#define NET_DVR_CHANNEL_STREAM_TYPE_NOT_SUPPORT 2257 //ǰͨͲ֧ -#define NET_DVR_CHANNEL_USERNAME_NOT_EXIST 2258 //ǰͨû -#define NET_DVR_CHANNEL_ACCESS_PARAM_FAILURE 2259 //ǰͨȡʧ -#define NET_DVR_CHANNEL_GET_STREAM_FAILURE 2260 //ǰͨȡʧ -#define NET_DVR_CHANNEL_RISK_PASSWORD 2261 //ǰͨΪ - -#define NET_DVR_NO_SUPPORT_DELETE_STRANGER_LIB 2262 //֧ɾİ˿ -#define NET_DVR_NO_SUPPORT_CREATE_STRANGER_LIB 2263 //ִ֧İ˿ - -#define NET_DVR_NETWORK_PORT_CONFLICT 2264 //ö˿ڳͻ -#define NET_DVR_TRANSCODE_NO_RESOURCES 2265 //תԴ -#define NET_DVR_SSD_FILE_SYSTEM_ERROR 2266 //SSDļϵͳ -#define NET_DVR_INSUFFICIENT_SSD__FOR_FPD 2267 //ԱƵҵSSD -#define NET_DVR_ASSOCIATED_FACELIB_OVER_LIMIT 2268 //Ѵ -#define NET_DVR_NEED_DELETE_DIGITAL_CHANNEL 2269 //ɾͨ -#define NET_DVR_ERR_FALL_DOWN_RULENUM_LIMIT 2270 //Աع -#define NET_DVR_ERR_VIOLENT_MOTION_RULENUM_LIMIT 2271 //˶ -#define NET_DVR_UPGRADE_ENGINE_VERSION_MISMATCH 2272 //汾ƥ(з) -#define NET_ERR_SLEEP_STREAM_UNSUPPORT 2273 //УԤʧܣȻѺٽг - -//ȳش루3001 - 3500 -#define NET_DVR_ERR_NOTSUPPORT_DEICING 3001 //豸ǰ״ֳ̬֧ܣֻPOE+AC24VDC12Vֳ֧ܣ -#define NET_DVR_ERR_THERMENABLE_CLOSE 3002 //¹ʹδ(NET_DVR_THERMOMETRY_BASICPARAMʹδ) -#define NET_DVR_ERR_NOTMEET_DEICING 3003 //ǰǻ¶Ȳֶǻ¶С30Ȳſɿ -#define NET_DVR_ERR_PANORAMIC_LIMIT_OPERATED 3004 //ȫͼλͬʱ -#define NET_DVR_ERR_SMARTH264_ROI_OPERATED 3005 //SmartH264ROIͬʱ -#define NET_DVR_ERR_RULENUM_LIMIT 3006 // -#define NET_DVR_ERR_LASER_DEICING_OPERATED 3007 //Լܲͬʱ -#define NET_DVR_ERR_OFFDIGITALZOOM_OR_MINZOOMLIMIT 3008 //ȹرݱ䱶ܻ䱶ΪСִֵ̻⡢쳣Ϊ⡢ֻ⡢¡̻ιʱûйرݱ䱶߱䱶ûΪСֵʱʾô롣 -#define NET_DVR_ERR_FIREWAITING 3009 //豸̨ڻȴ -#define NET_DVR_SYNCHRONIZEFOV_ERROR 3010 //ͬӳǴ -#define NET_DVR_CERTIFICATE_VALIDATION_ERROR 3011 //֤֤ͨ -#define NET_DVR_CERTIFICATES_NUM_EXCEED_ERROR 3012 //֤ -#define NET_DVR_RULE_SHIELDMASK_CONFLICT_ERROR 3013 //ͻ -#define NET_DVR_MOTOR_PREHEATING_ERROR 3014 //Ԥ -#define NET_DVR_PT_DEICING_ERROR 3015 //̨ - -//ǰ˲Ʒߴ루3501-4000 -#define NET_DVR_ERR_NO_SAFETY_HELMET_REGION 3501 //δðȫñ -#define NET_DVR_ERR_UNCLOSED_SAFETY_HELMET 3502 //δرհȫñʹ -#define NET_DVR_ERR_MUX_RECV_STATE 3503 //·ý״̬쳣 -#define NET_DVR_UPLOAD_HBDLIBID_ERROR 3504 // ϴIDHBDID or customHBDID -#define NET_DVR_NOTSUPPORT_SMALLER_RATIOS 3505 // С1ʱֹ֧,߱ -#define NET_ERR_ACCOUNT_NOT_ACTIVED 3506// û˻δŲ齨飺ȵ¼˻޸ijʼ룬ٳԲ - -#define NET_ERR_NPQ_BASE_INDEX 8000 //NPQ -#define NET_ERR_NPQ_PARAM (NET_ERR_NPQ_BASE_INDEX + 1) //NPQ -#define NET_ERR_NPQ_SYSTEM (NET_ERR_NPQ_BASE_INDEX + 2) //NPQϵͳô(Դʧܻڲȣ -#define NET_ERR_NPQ_GENRAL (NET_ERR_NPQ_BASE_INDEX + 3) //NPQڲͨô -#define NET_ERR_NPQ_PRECONDITION (NET_ERR_NPQ_BASE_INDEX + 4) //NPQ˳ -#define NET_ERR_NPQ_NOTSUPPORT (NET_ERR_NPQ_BASE_INDEX + 5) //NPQ⹦֧ܲ - -#define NET_ERR_NPQ_NOTCALLBACK (NET_ERR_NPQ_BASE_INDEX + 100) //ûлص -#define NET_ERR_NPQ_LOADLIB (NET_ERR_NPQ_BASE_INDEX + 101) //NPQʧ -#define NET_ERR_NPQ_STEAM_CLOSE (NET_ERR_NPQ_BASE_INDEX + 104) //·NPQδ -#define NET_ERR_NPQ_MAX_LINK (NET_ERR_NPQ_BASE_INDEX + 110) //NPQȡ·ﵽ -#define NET_ERR_NPQ_STREAM_CFG (NET_ERR_NPQ_BASE_INDEX + 111) //ڳͻ -#define NET_ERR_NPQ_PLAYBACK_OVERSPEED (NET_ERR_NPQ_BASE_INDEX + 112) //NPQطűʴﵽ -#define NET_ERR_NPQ_PLAYBACK_BELOWSPEED (NET_ERR_NPQ_BASE_INDEX + 113) //NPQطűʴﵽ - -#define NET_EZVIZ_P2P_BASE_INDEX 8300 //өʯP2P +#define NET_ERROR_TRUNK_LINE 711 //子系统已被配成干线 +#define NET_ERROR_MIXED_JOINT 712 //不能进行混合拼接 +#define NET_ERROR_DISPLAY_SWITCH 713 //不能进行显示通道切换 +#define NET_ERROR_USED_BY_BIG_SCREEN 714 //解码资源被大屏占用 +#define NET_ERROR_USE_OTHER_DEC_RESOURCE 715 //不能使用其他解码子系统资源 +#define NET_ERROR_DISP_MODE_SWITCH 716 //显示通道显示状态切换中 +#define NET_ERROR_SCENE_USING 717 //场景正在使用 +#define NET_ERR_NO_ENOUGH_DEC_RESOURCE 718 //解码资源不足 +#define NET_ERR_NO_ENOUGH_FREE_SHOW_RESOURCE 719 //畅显资源不足 +#define NET_ERR_NO_ENOUGH_VIDEO_MEMORY 720 //显存资源不足 +#define NET_ERR_MAX_VIDEO_NUM 721 //一拖多资源不足 +#define NET_ERR_WIN_COVER_FREE_SHOW_AND_NORMAL 722 //窗口跨越了畅显输出口和非畅显输出口 +#define NET_ERR_FREE_SHOW_WIN_SPLIT 723 //畅显窗口不支持分屏 +#define NET_ERR_INAPPROPRIATE_WIN_FREE_SHOW 724 //不是输出口整数倍的窗口不支持开启畅显 +#define NET_DVR_TRANSPARENT_WIN_NOT_SUPPORT_SPLIT 725 //开启透明度的窗口不支持分屏 +#define NET_DVR_SPLIT_WIN_NOT_SUPPORT_TRANSPARENT 726 //开启多分屏的窗口不支持透明度设置 +#define NET_ERR_MAX_LOGO_NUM 727 //logo数达到上限 +#define NET_ERR_MAX_WIN_LOOP_NUM 728 //轮巡窗口数达到上限 +#define NET_ERR_VIRTUAL_LED_VERTICAL_CROSS 729 //虚拟LED不能纵向跨屏 +#define NET_ERR_MAX_VIRTUAL_LED_HEIGHT 730 //虚拟LED高度超限 +#define NET_ERR_VIRTUAL_LED_ILLEGAL_CHARACTER 731 //虚拟LED内容包含非法字符 +#define NET_ERR_BASEMAP_NOT_EXIST 732 //底图图片不存在 +#define NET_ERR_LED_NOT_SUPPORT_VIRTUAL_LED 733 //LED屏幕不支持虚拟LED +#define NET_ERR_LED_RESOLUTION_NOT_SUPPORT 734 //LED分辨率不支持 +#define NET_ERR_PLAN_OVERDUE 735 //预案超期,不能再调用 +#define NET_ERR_PROCESSER_MAX_SCREEN_BLK 736 //单个处理器接入的信号跨越的屏幕个数超限 +#define NET_ERR_WND_SIZE_TOO_SMALL 737 //开窗窗口宽高太小 +#define NET_ERR_WND_SPLIT_NOT_SUPPORT_ROAM 738 //分屏窗口不支持漫游 +#define NET_ERR_OUTPUT_ONE_BOARD_ONE_WALL 739 //同一个子板的输出口只能绑定到同一面墙上 +#define NET_ERR_WND_CANNOT_LCD_AND_LED_OUTPUT 740 //窗口不能同时跨LCD和LED输出口 +#define NET_ERR_MAX_OSD_NUM 741 //OSD数量达到最大 + +#define NET_SDK_CANCEL_WND_TOPKEEP_ATTR_FIRST 751 //先取消置顶保持窗口的置顶保持属性才能进行置底操作 +#define NET_SDK_ERR_LED_SCREEN_CHECKING 752 //正在校正LED屏幕 +#define NET_SDK_ERR_NOT_SUPPORT_SINGLE_RESOLUTION 753 //LCD/LED输出口绑定之后不支持单个输出口的分辨率配置 +#define NET_SDK_ERR_LED_RESOLUTION_MISMATCHED 754 //该输出口的LED分辨率和其他输出口的LED分辨率不匹配,需要满足同行等高、同列等宽 + + +#define NET_SDK_ERR_MAX_VIRTUAL_LED_WIDTH 755 //虚拟LED宽度超限,包括最大值和最小值 +#define NET_SDK_ERR_MAX_VIRTUAL_LED_IN_SCREEN 756 //单屏虚拟LED数量超限 +#define NET_SDK_ERR_MAX_VIRTUAL_LED_IN_WALL 757 //单墙虚拟LED数量超限 +#define NET_SDK_ERR_VIRTUAL_LED_OVERLAP 758 //虚拟LED重叠错误 +#define NET_SDK_ERR_VIRTUAL_LED_TYPE 759 //类型错误 +#define NET_SDK_ERR_VIRTUAL_LED_COLOUR 760 //颜色错误 +#define NET_SDK_ERR_VIRTUAL_LED_MOVE_DIRECTION 761 //移动方向错误 +#define NET_SDK_ERR_VIRTUAL_LED_MOVE_MODE 762 //移动模式错误 +#define NET_SDK_ERR_VIRTUAL_LED_MOVE_SPEED 763 //移动速度错误 +#define NET_SDK_ERR_VIRTUAL_LED_DISP_MODE 764 //显示模式有误 +#define NET_SDK_ERR_VIRTUAL_LED_NO 765 //虚拟LED序号错误 +#define NET_SDK_ERR_VIRTUAL_LED_PARA 766 //虚拟LED参数配置错误,包括结构体内其他参数 +#define NET_SDK_ERR_BASEMAP_POSITION 767 //底图窗口宽高参数错误 +#define NET_SDK_ERR_BASEMAP_PICTURE_LEN 768 //底图图片长度超限 +#define NET_SDK_ERR_BASEMAP_PICTURE_RESOLUTION 769 //底图图片分辨率错误 +#define NET_SDK_ERR_BASEMAP_PICTURE_FORMAT 770 //底图图片格式错误 +#define NET_SDK_ERR_MAX_VIRTUAL_LED_NUM 771 //设备支持的虚拟LED数量超限 +#define NET_SDK_ERR_MAX_TIME_VIRTUAL_LED_IN_WALL 772 //单面电视墙支持的时间虚拟LED的数量超限 + +#define NET_ERR_TERMINAL_BUSY 780 //终端忙,终端处于会议中 + +#define NET_ERR_DATA_RETURNED_ILLEGAL 790 //设备返回的数据不合法 +#define NET_DVR_FUNCTION_RESOURCE_USAGE_ERROR 791 //设备其它功能占用资源,导致该功能无法开启 + +#define NET_DVR_ERR_IMPORT_EMPTY_FILE 792 //导入文件为空 +#define NET_DVR_ERR_IMPORT_TOO_LARGE_FILE 793 //导入文件过大 +#define NET_DVR_ERR_BAD_IPV4_ADDRESS 794 //IPV4地址无效 +#define NET_DVR_ERR_BAD_NET_MASK 795 //子网掩码地址无效 +#define NET_DVR_ERR_INVALID_NET_GATE_ADDRESS 796 //网关地址无效 +#define NET_DVR_ERR_BAD_DNS 797 //DNS地址无效 +#define NET_DVR_ERR_ILLEGAL_PASSWORD 798 //密码不能包含用户名 + +#define NET_DVR_DEV_NET_OVERFLOW 800 //网络流量超过设备能力上限 +#define NET_DVR_STATUS_RECORDFILE_WRITING_NOT_LOCK 801 //录像文件在录像,无法被锁定 +#define NET_DVR_STATUS_CANT_FORMAT_LITTLE_DISK 802 //由于硬盘太小无法格式化 + +//N+1错误码 +#define NET_SDK_ERR_REMOTE_DISCONNECT 803 //远端无法连接 +#define NET_SDK_ERR_RD_ADD_RD 804 //备机不能添加备机 +#define NET_SDK_ERR_BACKUP_DISK_EXCEPT 805 //备份盘异常 +#define NET_SDK_ERR_RD_LIMIT 806 //备机数已达上限 +#define NET_SDK_ERR_ADDED_RD_IS_WD 807 //添加的备机是工作机 +#define NET_SDK_ERR_ADD_ORDER_WRONG 808 //添加顺序出错,比如没有被工作机添加为备机,就添加工作机 +#define NET_SDK_ERR_WD_ADD_WD 809 //工作机不能添加工作机 +#define NET_SDK_ERR_WD_SERVICE_EXCETP 810 //工作机CVR服务异常 +#define NET_SDK_ERR_RD_SERVICE_EXCETP 811 //备机CVR服务异常 +#define NET_SDK_ERR_ADDED_WD_IS_RD 812 //添加的工作机是备机 +#define NET_SDK_ERR_PERFORMANCE_LIMIT 813 //性能达到上限 +#define NET_SDK_ERR_ADDED_DEVICE_EXIST 814 //添加的设备已经存在 + +//审讯机错误码 +#define NET_SDK_ERR_INQUEST_RESUMING 815 //审讯恢复中 +#define NET_SDK_ERR_RECORD_BACKUPING 816 //审讯备份中 +#define NET_SDK_ERR_DISK_PLAYING 817 //光盘回放中 +#define NET_SDK_ERR_INQUEST_STARTED 818 //审讯已开启 +#define NET_SDK_ERR_LOCAL_OPERATING 819 //本地操作进行中 +#define NET_SDK_ERR_INQUEST_NOT_START 820 //审讯未开启 +//Netra3.1.0错误码 +#define NET_SDK_ERR_CHAN_AUDIO_BIND 821 //通道未绑定或绑定语音对讲失败 +//云存储错误码 +#define NET_DVR_N_PLUS_ONE_MODE 822 //设备当前处于N+1模式 +#define NET_DVR_CLOUD_STORAGE_OPENED 823 //云存储模式已开启 + +#define NET_DVR_ERR_OPER_NOT_ALLOWED 824 //设备处于N+0被接管状态,不允许该操作 +#define NET_DVR_ERR_NEED_RELOCATE 825 //设备处于N+0被接管状态,需要获取重定向信息,再重新操作 + +//庭审主机错误码 +#define NET_SDK_ERR_IR_PORT_ERROR 830 //红外输出口错误 +#define NET_SDK_ERR_IR_CMD_ERROR 831 //红外输出口的命令号错误 +#define NET_SDK_ERR_NOT_INQUESTING 832 //设备处于非审讯状态 +#define NET_SDK_ERR_INQUEST_NOT_PAUSED 833 //设备处于非暂停状态 +#define NET_DVR_CHECK_PASSWORD_MISTAKE_ERROR 834 //校验密码错误 +#define NET_DVR_CHECK_PASSWORD_NULL_ERROR 835 //校验密码不能为空 +#define NET_DVR_UNABLE_CALIB_ERROR 836 // 当前无法标定 +#define NET_DVR_PLEASE_CALIB_ERROR 837 //请先完成标定 +#define NET_DVR_ERR_PANORAMIC_CAL_EMPTY 838 //Flash中全景标定为空 +#define NET_DVR_ERR_CALIB_FAIL_PLEASEAGAIN 839 //标定失败,请重新标定(Calibration failed. Please calibrate again.) +#define NET_DVR_ERR_DETECTION_LINE 840 //规则线配置错误,请重新配置规则线,确保规则线位于红色区域内(Please set detection line again. The detection line should be within the red count area.) +#define NET_DVR_ERR_TURN_OFF_IMAGE_PARA 841 //请先关闭图像参数切换功能(Please turn off the image parameters switch first.) +#define NET_DVR_EXCEED_FACE_IMAGES_ERROR 843 //超过人脸图片最大张数 +#define NET_DVR_ANALYSIS_FACE_IMAGES_ERROR 844 //图片数据识别失败 +#define NET_ERR_ALARM_INPUT_OCCUPIED 845 //A<-1报警号已用于触发车辆抓拍Alarm Input No. A<-1 is used to trigger vehicle capture. +#define NET_DVR_FACELIB_DATABASE_ERROR 846 //人脸库中数据库版本不匹配 +#define NET_DVR_FACELIB_DATA_ERROR 847 //人脸库数据错误 +#define NET_DVR_FACE_DATA_ID_ERROR 848 //人脸数据PID无效 +#define NET_DVR_FACELIB_ID_ERROR 849 //人脸库ID无效 +#define NET_DVR_EXCEED_FACE_LIBARY_ERROR 850 //超过人脸库最大个数 +#define NET_DVR_PIC_ANALYSIS_NO_TARGET_ERROR 851 //图片未识别到目标 +#define NET_DVR_SUBPIC_ANALYSIS_MODELING_ERROR 852 //子图建模失败 +#define NET_DVR_PIC_ANALYSIS_NO_RESOURCE_ERROR 853 //无对应智能分析引擎支持图片二次识别 +#define NET_DVR_ANALYSIS_ENGINES_NO_RESOURCE_ERROR 854//无分析引擎资源 +#define NET_DVR_ANALYSIS_ENGINES_USAGE_EXCEED_ERROR 855//引擎使用率超负荷,已达100% +#define NET_DVR_EXCEED_HUMANMISINFO_FILTER_ENABLED_ERROR 856 //超过开启人体去误报最大通道个数 +#define NET_DVR_NAME_ERROR 857 //名称错误 +#define NET_DVR_NAME_EXIST_ERROR 858 //名称已存在 +#define NET_DVR_FACELIB_PIC_IMPORTING_ERROR 859 //人脸库导入图片中 +#define NET_DVR_ERR_CALIB_POSITION 860 //标定位置超出摄像机运动范围 +#define NET_DVR_ERR_DELETE 861 //无法删除 +#define NET_DVR_ERR_SCENE_ID 862 //场景ID无效 +#define NET_DVR_ERR_CALIBING 863 //标定中 +#define NET_DVR_PIC_FORMAT_ERROR 864 //图片格式错误 +#define NET_DVR_PIC_RESOLUTION_INVALID_ERROR 865 //图片分辨率无效错误 +#define NET_DVR_PIC_SIZE_EXCEED_ERROR 866 //图片过大 +#define NET_DVR_PIC_ANALYSIS_TARGRT_NUM_EXCEED_ERROR 867 //图片目标个数超过上限 +#define NET_DVR_ANALYSIS_ENGINES_LOADING_ERROR 868//分析引擎初始化中 +#define NET_DVR_ANALYSIS_ENGINES_ABNORMA_ERROR 869//分析引擎异常 +#define NET_DVR_ANALYSIS_ENGINES_FACELIB_IMPORTING 870//分析引擎正在导入人脸库 +#define NET_DVR_NO_DATA_FOR_MODELING_ERROR 871 //无待建模数据 +#define NET_DVR_FACE_DATA_MODELING_ERROR 872 //设备正在进行图片建模操作,不支持并发处理 +#define NET_ERR_FACELIBDATA_OVERLIMIT 873 //超过设备中支持导入人脸数最大个数限制(导入的人脸库中数据) +#define NET_DVR_ANALYSIS_ENGINES_ASSOCIATED_CHANNEL 874//分析引擎已关联通道 +#define NET_DVR_ERR_CUSTOMID_LEN 875 //上层自定义ID的长度最小32字符长度 +#define NET_DVR_ERR_CUSTOMFACELIBID_REPEAT 876 //上层下发重复的自定义人脸库ID +#define NET_DVR_ERR_CUSTOMHUMANID_REPEAT 877 //上层下发重复的自定义人员ID +#define NET_DVR_ERR_URL_DOWNLOAD_FAIL 878 //url下载失败 +#define NET_DVR_ERR_URL_DOWNLOAD_NOTSTART 879 //url未开始下载 + +#define NET_DVR_CFG_FILE_SECRETKEY_ERROR 880 //配置文件安全校验密钥错误 +#define NET_DVR_WDR_NOTDISABLE_ERROR 881 //请先关闭所有通道当前日夜参数转换模式下的宽动态 +#define NET_DVR_HLC_NOTDISABLE_ERROR 882 //请先关闭所有通道当前日夜参数转换模式下的强光抑制 + +#define NET_DVR_THERMOMETRY_REGION_OVERSTEP_ERROR 883 //测温区域越界 + + +#define NET_DVR_ERR_MODELING_DEVICEINTERNAL 884 //建模失败,设备内部错误 +#define NET_DVR_ERR_MODELING_FACE 885 //建模失败,人脸建模错误 +#define NET_DVR_ERR_MODELING_FACEGRADING 886 //建模失败,人脸质量评分错误 +#define NET_DVR_ERR_MODELING_FACEGFEATURE 887 //建模失败,特征点提取错误 +#define NET_DVR_ERR_MODELING_FACEGANALYZING 888 //建模失败,属性提取错误 + +#define NET_DVR_ERR_STREAM_LIMIT 889 //码流性能超过上限,请减少取流路数 +#define NET_DVR_ERR_STREAM_DESCRIPTION 890 //请输入码流描述 +#define NET_DVR_ERR_STREAM_DELETE 891 //码流正在使用无法删除 +#define NET_DVR_ERR_CUSTOMSTREAM_NAME 892 //自定义码流名称为空或不合法 +#define NET_DVR_ERR_CUSTOMSTREAM_NOTEXISTED 893 //该自定义码流不存在 + +#define NET_DVR_ERR_TOO_SHORT_CALIBRATING_TIME 894 //标定时间太短 +#define NET_DVR_ERR_AUTO_CALIBRATE_FAILED 895 //自动标定失败 +#define NET_DVR_ERR_VERIFICATION_FAILED 896 //校验失败 + +#define NET_DVR_NO_TEMP_SENSOR_ERROR 897 //无温度传感器 +#define NET_DVR_PUPIL_DISTANCE_OVERSIZE_ERROR 898 //瞳距过大 +#define NET_DVR_ERR_UNOPENED_FACE_SNAP 899 //操作无效,请先开启目标抓拍 +//2011-10-25多屏控制器错误码(900-950) +#define NET_ERR_CUT_INPUTSTREAM_OVERLIMIT 900 //信号源裁剪数值超限 +#define NET_ERR_WINCHAN_IDX 901 // 开窗通道号错误 +#define NET_ERR_WIN_LAYER 902 // 窗口层数错误,单个屏幕上最多覆盖的窗口层数 +#define NET_ERR_WIN_BLK_NUM 903 // 窗口的块数错误,单个窗口可覆盖的屏幕个数 +#define NET_ERR_OUTPUT_RESOLUTION 904 // 输出分辨率错误 +#define NET_ERR_LAYOUT 905 // 布局号错误 +#define NET_ERR_INPUT_RESOLUTION 906 // 输入分辨率不支持 +#define NET_ERR_SUBDEVICE_OFFLINE 907 // 子设备不在线 +#define NET_ERR_NO_DECODE_CHAN 908 // 没有空闲解码通道 +#define NET_ERR_MAX_WINDOW_ABILITY 909 // 开窗能力上限, 分布式多屏控制器中解码子设备能力上限或者显示处理器能力上限导致 +#define NET_ERR_ORDER_ERROR 910 // 调用顺序有误 +#define NET_ERR_PLAYING_PLAN 911 // 正在执行预案 +#define NET_ERR_DECODER_USED 912 // 解码板正在使用 +#define NET_ERR_OUTPUT_BOARD_DATA_OVERFLOW 913 // 输出板数据量超限 +#define NET_ERR_SAME_USER_NAME 914 // 用户名相同 +#define NET_ERR_INVALID_USER_NAME 915 // 无效用户名 +#define NET_ERR_MATRIX_USING 916 // 输入矩阵正在使用 +#define NET_ERR_DIFFERENT_CHAN_TYPE 917 // 通道类型不同(矩阵输出通道和控制器的输入为不同的类型) +#define NET_ERR_INPUT_CHAN_BINDED 918 // 输入通道已经被其他矩阵绑定 +#define NET_ERR_BINDED_OUTPUT_CHAN_OVERFLOW 919 // 正在使用的矩阵输出通道个数超过矩阵与控制器绑定的通道个数 +#define NET_ERR_MAX_SIGNAL_NUM 920 // 输入信号源个数达到上限 +#define NET_ERR_INPUT_CHAN_USING 921 // 输入通道正在使用 +#define NET_ERR_MANAGER_LOGON 922 // 管理员已经登陆,操作失败 +#define NET_ERR_USERALREADY_LOGON 923 // 该用户已经登陆,操作失败 +#define NET_ERR_LAYOUT_INIT 924 // 布局正在初始化,操作失败 +#define NET_ERR_BASEMAP_SIZE_NOT_MATCH 925 // 底图大小不符 +#define NET_ERR_WINDOW_OPERATING 926 // 窗口正在执行其他操作,本次操作失败 +#define NET_ERR_SIGNAL_UPLIMIT 927 // 信号源开窗个数达到上限 +#define NET_ERR_SIGNAL_MAX_ENLARGE_TIMES 928 // 信号源放大倍数超限 +#define NET_ERR_ONE_SIGNAL_MULTI_CROSS 929 // 单个信号源不能多次跨屏 +#define NET_ERR_ULTRA_HD_SIGNAL_MULTI_WIN 930 // 超高清信号源不能重复开窗 +#define NET_ERR_MAX_VIRTUAL_LED_WIDTH 931 //虚拟LED宽度大于限制值 +#define NET_ERR_MAX_VIRTUAL_LED_WORD_LEN 932 //虚拟LED字符数大于限制值 +#define NET_ERR_SINGLE_OUTPUTPARAM_CONFIG 933//不支持单个显示输出参数设置 +#define NET_ERR_MULTI_WIN_BE_COVER 934//多分屏窗口被覆盖 +#define NET_ERR_WIN_NOT_EXIST 935 //窗口不存在 +#define NET_ERR_WIN_MAX_SIGNALSOURCE 936//窗口信号源数超过限制值 +#define NET_ERR_MULTI_WIN_MOVE 937//对多分屏窗口移动 +#define NET_ERR_MULTI_WIN_YPBPR_SDI 938 // YPBPR 和SDI信号源不支持9/16分屏 +#define NET_ERR_DIFF_TYPE_OUTPUT_MIXUSE 939 //不同类型输出板混插 +#define NET_ERR_SPLIT_WIN_CROSS 940//对跨屏窗口分屏 +#define NET_ERR_SPLIT_WIN_NOT_FULL_SCREEN 941 //对未满屏窗口分屏 +#define NET_ERR_SPLIT_WIN_MANY_WIN 942 //对单个输出口上有多个窗口的窗口分屏 +#define NET_ERR_WINDOW_SIZE_OVERLIMIT 943 //窗口大小超限 +#define NET_ERR_INPUTSTREAM_ALREADY_JOINT 944 //信号源已加入拼接 +#define NET_ERR_JOINT_INPUTSTREAM_OVERLIMIT 945 //拼接信号源个数超限 + +#define NET_ERR_LED_RESOLUTION 946 //LED 分辨率大于输出分辨率 +#define NET_ERR_JOINT_SCALE_OVERLIMIT 947 //拼接信号源的规模超限 +#define NET_ERR_INPUTSTREAM_ALREADY_DECODE 948 //信号源已上墙 +#define NET_ERR_INPUTSTREAM_NOTSUPPORT_CAPTURE 949 //信号源不支持抓图 +#define NET_ERR_JOINT_NOTSUPPORT_SPLITWIN 950 //该信号源不支持分屏 + +//解码器错误码(951-999) +#define NET_ERR_MAX_WIN_OVERLAP 951 //达到最大窗口重叠数 +#define NET_ERR_STREAMID_CHAN_BOTH_VALID 952 //stream ID和通道号同时有效 +#define NET_ERR_NO_ZERO_CHAN 953 //设备无零通道 +#define NEED_RECONNECT 955 //需要重定向(转码子系统使用) +#define NET_ERR_NO_STREAM_ID 956 //流ID不存在 +#define NET_DVR_TRANS_NOT_START 957 //转码未启动 +#define NET_ERR_MAXNUM_STREAM_ID 958 //流ID数达到上限 +#define NET_ERR_WORKMODE_MISMATCH 959 //工作模式不匹配 +#define NET_ERR_MODE_IS_USING 960 //已工作在当前模式 +#define NET_ERR_DEV_PROGRESSING 961 //设备正在处理中 +#define NET_ERR_PASSIVE_TRANSCODING 962 //正在被动转码 + +#define NET_ERR_RING_NOT_CONFIGURE 964 //环网未配置 + +#define NET_ERR_CLOSE_WINDOW_FIRST 971 //切换全帧率畅显时必须先关闭对应的已上墙的窗口 +#define NET_ERR_SPLIT_WINDOW_NUM_NOT_SUPPORT 972 //VGA/DVI/DP/HDMI/HDBase_T输入源在全帧率畅显下不支持9/16画面 +#define NET_ERR_REACH_ONE_SIGNAL_PREVIEW_MAX_LINK 973 //单信号源回显连接数量超限 +#define NET_ERR_ONLY_SPLITWND_SUPPORT_AMPLIFICATION 974 //只有分屏窗口支持子窗口放大 +#define NET_DVR_ERR_WINDOW_SIZE_PLACE 975 //窗口位置错误 +#define NET_DVR_ERR_RGIONAL_RESTRICTIONS 976 //屏幕距离超限 +#define NET_ERR_WNDZOOM_NOT_SUPPORT 977 //单窗口不支持子窗口全屏功能 +#define NET_ERR_LED_SCREEN_SIZE 978 //LED屏宽高不正确 +#define NET_ERR_OPEN_WIN_IN_ERROR_AREA 979 //在非法区域开窗(包括跨LCD/LED屏) +#define NET_ERR_TITLE_WIN_NOT_SUPPORT_MOVE 980 //平铺模式不支持漫游 +#define NET_ERR_TITLE_WIN_NOT_SUPPORT_COVER 981 //平铺模式不支持图层覆盖 +#define NET_ERR_TITLE_WIN_NOT_SUPPORT_SPLIT 982 //平铺模式不支持分屏 +#define NET_DVR_LED_WINDOWS_ALREADY_CLOSED 983 //LED区域内输出口的分辨率发生变化,设备已关闭该区域内的所有LED窗口 +#define NET_DVR_ERR_CLOSE_WINDOWS 984 //操作失败,请先关闭窗口 +#define NET_DVR_ERR_MATRIX_LOOP_ABILITY 985 //超出轮巡解码能力限制 +#define NET_DVR_ERR_MATRIX_LOOP_TIME 986 //轮巡解码时间不支持 +#define NET_DVR_ERR_LINKED_OUT_ABILITY 987 //联动通道数超过上限 +#define NET_ERR_REACH_SCENE_MAX_NUM 988 //场景数量达到上限 +#define NET_ERR_SCENE_MEM_NOT_ENOUGH 989 //内存不足,无法新建场景 +#define NET_ERR_RESOLUTION_NOT_SUPPORT_ODD_VOUT 990 //奇口不支持该分辨率 +#define NET_ERR_RESOLUTION_NOT_SUPPORT_EVEN_VOUT 991 //偶口不支持该分辨率 + +#define NET_DVR_CANCEL_WND_OPENKEEP_ATTR_FIRST 992 //常开窗口需要先取消常开属性才能被关闭 +#define NET_SDK_LED_MODE_NOT_SUPPORT_SPLIT 993 //LED模式下不支持窗口分屏 +#define NET_ERR_VOICETALK_ONLY_SUPPORT_ONE_TALK 994 //同时只支持一路语音对讲 +#define NET_ERR_WND_POSITION_ADJUSTED 995 //窗口位置被设备调整,上层需要重新获取下窗口位置 +#define NET_SDK_ERR_STARTTIME_CANNOT_LESSTHAN_CURTIME 996 //开始时间不能小于当前时间 +#define NET_SDK_ERR_NEED_ADJUST_PLAN 997 //场景已被预案关联,请先将该场景从预案中删除 +#define NET_ERR_UnitConfig_Failed 998 //当“启用单位统一”勾选时,测温下配置的单位与系统设置下的单位不同返回单位配置错误 + +//能力集解析库错误码 +#define XML_ABILITY_NOTSUPPORT 1000 //不支持能力节点获取 +#define XML_ANALYZE_NOENOUGH_BUF 1001 //输出内存不足 +#define XML_ANALYZE_FIND_LOCALXML_ERROR 1002 //无法找到对应的本地xml +#define XML_ANALYZE_LOAD_LOCALXML_ERROR 1003 //加载本地xml出错 +#define XML_NANLYZE_DVR_DATA_FORMAT_ERROR 1004 //设备能力数据格式错误 +#define XML_ANALYZE_TYPE_ERROR 1005 //能力集类型错误 +#define XML_ANALYZE_XML_NODE_ERROR 1006 //XML能力节点格式错误 +#define XML_INPUT_PARAM_ERROR 1007 //输入的能力XML节点值错误 + +#define NET_DVR_ERR_RETURNED_XML_DATA 1008 //设备返回的XML数据有误 + +//传显错误码 +#define NET_ERR_LEDAREA_EXIST_WINDOW 1051 //LED区域有窗口存在(如果LED区域上已经有窗口存在,不允许修改LED区域) +#define NET_ERR_AUDIO_EXIST 1052 //输出口上存在音频输出,不允许解除绑定 +#define NET_ERR_MATERIAL_NAME_EXIST 1053 //素材名称已存在 +#define NET_ERR_MATERIAL_APPROVE_STATE 1054 //素材审核状态错误 +#define NET_ERR_DATAHD_SIGNAL_FORMAT 1055 //已使用的硬盘不允许单个格式化 + +#define NET_ERR_SCENE_SWITCHING 1056 //场景正在切换 +#define NER_ERR_DATA_TRANSFER 1057 //设备正在数据转移中 +#define NET_ERR_DATA_RESTORE 1058 //设备正在数据还原中 +#define NET_ERR_CHECK_NOT_ENABLE 1059 //校正使能未开启 +#define NET_ERR_AREA_OFFLINE 1060 //区域不在线 +#define NET_ERR_SCREEN_TYPE 1061 //屏幕类型不匹配 +#define NET_ERR_MIN_OPERATE_UNIT 1062 //最小操作单元不匹配 +#define NET_ERR_MAINHD_NOT_BACKUP 1063 //第一槽位上的普通盘(主盘)禁止设置成备份盘 +#define NET_ERR_ONE_BACKUP_HD 1064 //设置备份盘时,设备至少有一块普通盘 +#define NET_ERR_CONNECT_SUB_SYSTEM_ABNORMAL 1065 //连接子系统异常 +#define NET_ERR_SERIAL_PORT_VEST 1066 //错误的串口归属 +#define NET_ERR_BLOCKLIST_FULL 1067 //允许名单列表数量已满 +#define NET_ERR_NOT_MATCH_SOURCE 1068 //不匹配的信号源类型 +#define NET_ERR_CLOCK_VIRTUAL_LED_FULL 1069 //开启时钟功能的虚拟LED达上限 +#define NET_ERR_MAX_WIN_SIGNAL_LOOP_NUM 1070 //窗口轮巡信号源个数已达上限 +#define NET_ERR_RESOLUTION_NO_MATCH_FRAME 1071 //分辨率与当前帧数不匹配 +#define NET_ERR_NOT_UPDATE_LOW_VERSION 1072 //不支持向低版本升级 +#define NET_ERR_NO_CUSTOM_TO_UPDATE 1073 //非定制程序无法升级 +#define NET_ERR_CHAN_RESOLUTION_NOT_SUPPORT_SPLIT 1074 //该输出口分辨率不支持分屏 +#define NET_ERR_HIGH_DEFINITION_NOT_SUPPORT_SPLIT 1075 //超高清不支持9/16画面分割 +#define NET_ERR_MIRROR_IMAGE_BY_VIDEO_WALL 1076 //电视墙镜像出错 +#define NET_ERR_MAX_OSD_FONT_SIZE 1077 //超过OSD最大支持字符数 +#define NET_ERR_HIGH_DEFINITION_NOT_SUPPORT_VIDEO_SET 1078 //超清不支持视频参数设置 +#define NET_ERR_TILE_MODE_NOT_SUPPORT_JOINT 1079 //平铺模式不支持拼接窗口 +#define NET_ERR_ADD_AUDIO_MATRIX_FAILED 1080 //创建音频矩阵失败 +#define NET_ERR_ONE_VIRTUAL_LED_AREA_BIND_ONE_AUDIO_AREA 1081 //一个虚拟LED区域只能绑定一个音频区域 +#define NET_ERR_NAT_NOT_MODIFY_SERVER_NETWORK_PARAM 1082 //NAT下无法修改服务器网络参数 +#define NET_ERR_ORIGINAL_CHECH_DATA_ERROR 1083 //原始校正数据错误 +#define NET_ERR_INPUT_BOARD_SPLICED_IN_DIFFERENT_NETWORKAREAS 1084 //不同网络区域的输入板不能拼接 +#define NET_ERR_SPLICINGSOURCE_ONWALL_IN_DIFFERENT_NETWORKAREAS 1085 //不同网络区域的拼接源不能上墙 +#define NET_ERR_ONWALL_OUTPUTBOARD_MODIFY_NETWORKAREAS 1086 //已绑定在电视墙上的输出板不能修改网络区域 +#define NET_ERR_LAN_AND_WAN_CANNOT_SAME_NET_SEGMENT 1087 //LAN口IP和WAN口IP不能处于同一网段 +#define NET_ERR_USERNAME_REPETITIVE 1088 //用户名重复 +#define NET_ERR_ASSOCIATED_SAMEWALL_IN_DIFFERENT_NETWORKAREAS 1089 //不同数据网络区域的输出口不能关联到同一电视墙 +#define NET_ERR_BASEMAP_ROAM_IN_LED_AREA 1090 //LED区域不允许底图漫游 +#define NET_ERR_VIRTUAL_LED_NOT_SUPPORT_4K_OUTPUT 1091 //虚拟LED不支持4K输出口显示 +#define NET_ERR_BASEMAP_NOT_SUPPORT_4K_OUTPUT 1092 //底图不支持4K输出口显示 +#define NET_ERR_MIN_BLOCK_IN_VIRTUAL_LED_AND_OUTPUT 1093 //虚拟LED与输出口相交出现最小块 +#define NET_ERR_485FIlE_VERSION_INVALID 1094 //485文件版本无效 +#define NET_ERR_485FIlE_CHECK_ERROR 1095 //485文件校验错误 +#define NET_ERR_485FIlE_ABNORMAL_SIZE 1096 //485文件大小异常效 +#define NET_ERR_MODIFY_SUBBOARD_NETCFG_IN_NAT 1097 //NAT下无法修改子板网络参 +#define NET_ERR_OSD_CONTENT_WITH_ILLEGAL_CHARACTERS 1098 //OSD内容包含非法字符 +#define NET_ERR_NON_SLAVE_DEVICE_INSERT_SYNC_LINE 1099 //非从设备禁止插入同步线 +//民用错误码(1100~1200) +#define NET_ERR_PLT_USERID 1100 //验证平台userid错误 +#define NET_ERR_TRANS_CHAN_START 1101 //透明通道已打开,当前操作无法完成 +#define NET_ERR_DEV_UPGRADING 1102 //设备正在升级 +#define NET_ERR_MISMATCH_UPGRADE_PACK_TYPE 1103 //升级包类型不匹配 +#define NET_ERR_DEV_FORMATTING 1104 //设备正在格式化 +#define NET_ERR_MISMATCH_UPGRADE_PACK_VERSION 1105 //升级包版本不匹配 +#define NET_ERR_PT_LOCKED 1106 //PT锁定功能 + +#define NET_DVR_LOGO_OVERLAY_WITHOUT_UPLOAD_PIC 1110 //logo叠加失败,没有上传logo图片 +#define NET_DVR_ERR_ILLEGAL_VERIFICATION_CODE 1111 //不合法验证码 +#define NET_DVR_ERR_LACK_VERIFICATION_CODE 1112 //缺少验证码 +#define NET_DVR_ERR_FORBIDDEN_IP 1113 //该IP地址已被禁止,不允许配置(设备支持的IP地址过滤功能) +#define NET_DVR_ERR_UNLOCKPTZ 1114 //操作无效,请先锁定云台 +#define NET_DVR_ERR_COUNTAREA_LARGE 1116 //计数区域绘制错误,区域面积大于设备允许值 +#define NET_DVR_ERR_LABEL_ID_EXCEED 1117//标签ID超限 +#define NET_DVR_ERR_LABEL_TYPE 1118//标签类型错误 +#define NET_DVR_ERR_LABEL_FULL 1119//标签满 +#define NET_DVR_ERR_LABEL_DISABLED 1120//标签未使能 +#define NET_DVR_ERR_DOME_PT_TRANS_TO_DOME_XY 1121//球机PT转球机XY失败 +#define NET_DVR_ERR_DOME_PT_TRANS_TO_PANORAMA_XY 1122//球机PT转全景XY失败 +#define NET_DVR_ERR_PANORAMA_XY_TRANS_TO_DOME_PT 1123//全景XY坐标转球机PT错误 +#define NET_DVR_ERR_SCENE_DUR_TIME_LESS_THAN_INTERV_TIME 1124//场景停留时间要大于检测周期 +#define NET_DVR_ERR_HTTP_BKN_EXCEED_ONE 1125//断网续传布防只支持一路 +#define NET_DVR_ERR_DELETING_FAILED_TURN_OFF_HTTPS_ESDK_WEBSOCKETS_FIRST 1126//删除失败,请先关闭HTTPS和网络服务中的增强型SDK服务及WebSockets服务。 +#define NET_DVR_ERR_DELETING_FAILED_TURN_OFF_HTTPS_ESDK_FIRST 1127//删除失败,请先关闭HTTPS和网络服务中的增强型SDK服务 +#define NET_DVR_ERR_PTZ_OCCUPIED_PRIORITY 1128// 有高优先级云台控制权限用户操作 +#define NET_DVR_ERR_INCORRECT_VIDEOAUDIO_ID 1129// 视频通道编码ID或语音输出通道编码ID错误 +#define NET_DVR_ERR_REPETITIONTIME_OVER_MAXIMUM 1130// 去重时间最大不超过最大值 +#define NET_DVR_ERR_FORMATTING_FAILED 1131// 格式化错误,请重新 +#define NET_DVR_ERR_ENCRYPTED_FORMATTING_FAILED 1132// 加密格式化失败,请重试 +#define NET_DVR_ERR_WRONG_PASSWORD 1133// 密码错误,请输入正确的密码(SD卡 密码校验失败) +#define NET_DVR_ERR_EXPOSURE_SYNC 1134// 镜头间曝光同步已开启,不允许配置手动RGB +#define NET_DVR_ERR_TABLE_NOT_MATCH 1135// 校正表跟平台不匹配 + +//2012-10-16 报警设备错误码(1200~1300) +#define NET_ERR_SEARCHING_MODULE 1201 // 正在搜索外接模块 +#define NET_ERR_REGISTERING_MODULE 1202 // 正在注册外接模块 +#define NET_ERR_GETTING_ZONES 1203 // 正在获取防区参数 +#define NET_ERR_GETTING_TRIGGERS 1204 // 正在获取触发器 +#define NET_ERR_ARMED_STATUS 1205 // 系统处于布防状态 +#define NET_ERR_PROGRAM_MODE_STATUS 1206 // 系统处于编程模式 +#define NET_ERR_WALK_TEST_MODE_STATUS 1207 // 系统处于步测模式 +#define NET_ERR_BYPASS_STATUS 1208 // 旁路状态 +#define NET_ERR_DISABLED_MODULE_STATUS 1209 // 功能未使能 +#define NET_ERR_NOT_SUPPORT_OPERATE_ZONE 1210 // 防区不支持该操作 +#define NET_ERR_NOT_SUPPORT_MOD_MODULE_ADDR 1211 // 模块地址不能被修改 +#define NET_ERR_UNREGISTERED_MODULE 1212 // 模块未注册 +#define NET_ERR_PUBLIC_SUBSYSTEM_ASSOCIATE_SELF 1213 // 公共子系统关联自身 +#define NET_ERR_EXCEEDS_ASSOCIATE_SUBSYSTEM_NUM 1214 // 超过公共子系统最大关联个数 +#define NET_ERR_BE_ASSOCIATED_BY_PUBLIC_SUBSYSTEM 1215 // 子系统被其他公共子系统关联 +#define NET_ERR_ZONE_FAULT_STATUS 1216 // 防区处于故障状态 +#define NET_ERR_SAME_EVENT_TYPE 1217 // 事件触发报警输出开启和事件触发报警输出关闭中有相同事件类型 +#define NET_ERR_ZONE_ALARM_STATUS 1218 // 防区处于报警状态 +#define NET_ERR_EXPANSION_BUS_SHORT_CIRCUIT 1219 //扩展总线短路 +#define NET_ERR_PWD_CONFLICT 1220 //密码冲突 +#define NET_ERR_DETECTOR_GISTERED_BY_OTHER_ZONE 1221 //探测器已被其他防区注册 +#define NET_ERR_DETECTOR_GISTERED_BY_OTHER_PU 1222 //探测器已被其他主机注册 +#define NET_ERR_DETECTOR_DISCONNECT 1223 //探测器不在线 +#define NET_ERR_CALL_BUSY 1224 //设备正在通话中 +#define NET_DVR_ERR_ZONE_TAMPER_STAUS 1225 //防区处于防拆状态 +#define NET_DVR_ERR_WIRELESS_DEV_REGISTER 1226 //无线外设已被其他主机注册 +#define NET_DVR_ERR_WIRELESS_DEV_ADDED 1227 //无线外设已被添加 +#define NET_DVR_ERR_WIRELESS_DEV_OFFLINE 1228 //无线外设不在线 +#define NET_DVR_ERR_WIRELESS_DEV_TAMPER_STATUS 1229 //无线外设处于防拆状态 +#define NET_DVR_ERR_GPRS_PHONE_CONFLICT 1230 //电话报警与无线报警中心冲突 +#define NET_ERR_INIT_PASSWORD_NOT_MODIFY 1231 //初始密码未修改,无法进行其他操作(安装商/管理员用户在初始密码未修改时,除修改自身用户密码外,其他操作均返回该错误码 +#define NET_ERR_USER_DISABLED 1232 //用户未开启 +#define NET_ERR_DEVICE_DEBUGGING 1233 //当前设备处于调试模式中 +//信息发布主机 +#define NET_ERR_GET_ALL_RETURN_OVER 1300 //获取所有返回数目超限 +#define NET_ERR_RESOURCE_USING 1301 //信息发布资源正在使用,不能修改 +#define NET_ERR_FILE_SIZE_OVERLIMIT 1302 //文件大小超限 + +//信息发布服务器错误码 +#define NET_ERR_MATERIAL_NAME 1303 //素材名称非法 +#define NET_ERR_MATERIAL_NAME_LEN 1304 //素材名称长度非法 +#define NET_ERR_MATERIAL_REMARK 1305 //素材描述非法 +#define NET_ERR_MATERIAL_REMARK_LEN 1306 //素材描述长度非法 +#define NET_ERR_MATERIAL_SHARE_PROPERTY 1307 //素材共享属性非法 +#define NET_ERR_UNSUPPORT_MATERIAL_TYPE 1308 //素材类型不支持 +#define NET_ERR_MATERIAL_NOT_EXIST 1309 //素材不存在 +#define NET_ERR_READ_FROM_DISK 1310 //从硬盘读取素材文件失败 +#define NET_ERR_WRITE_TO_DISK 1311 //向硬盘写素材文件失败 +#define NET_ERR_WRITE_DATA_BASE 1312 //素材写数据库失败 +#define NET_ERR_NO_APPROVED_NOT_EXPORT 1313 //未审核内容禁止发布 +#define NET_ERR_MATERIAL_EXCEPTION 1314 //素材异常 +#define NET_ERR_NO_MISINFO 1315 //无误报信息 +#define NET_ERR_LAN_NOT_SUP_DHCP_CLIENT_CONFIGURATION 1316 //网桥在路由模式下,配置DHCP客户端返回错误 +#define NET_ERR_VIDEOWALL_OPTPORT_RESOLUTION_INCONSISTENT 1317 //电视墙上各输出口分辨率不一致(主要用于设置输出分辨率为4K出现异常时报错) +#define NET_ERR_VIDEOWALL_OPTPORT_RESOLUTION_INCONSISTENT_UNBIND_OPTPORT_FIRST 1318 //电视墙上各输出口分辨率不一致,请先解绑定输出口(主要用于绑定输出口出现异常时报错) +#define NET_ERR_FOUR_K_OUTPUT_RESOLUTION_UNSUPPORT_NINE_TO_SIXTEEN_SPLIT_SCREEN 1319 //4K输出分辨率不支持9/16分屏 +#define NET_ERR_SIGNAL_SOURCE_UNSUPPORT_CUSTOM_RESOLUTION 1320 //信号源不支持该自定义分辨率 +#define NET_ERR_DVI_UNSUPPORT_FOURK_OUTPUT_RESOLUTION 1321 //DVI不支持4K输出分辨率 +#define NET_ERR_BNC_UNSUPPORT_SOURCE_CROPPING 1322 //BNC不支持信号源裁剪 +#define NET_ERR_OUTPUT_NOT_SUPPORT_VIDEOWALL_RESOLUTION 1323 //输出口不支持电视墙分辨率 + +//多屏互动错误码 +#define NET_ERR_MAX_SCREEN_CTRL_NUM 1351 //屏幕控制连接数达到上限 +#define NET_ERR_FILE_NOT_EXIST 1352 //文件不存在 +#define NET_ERR_THUMBNAIL_NOT_EXIST 1353 //缩略图不存在 +#define NET_ERR_DEV_OPEN_FILE_FAIL 1354 //设备端打开文件失败 +#define NET_ERR_SERVER_READ_FILE_FAIL 1355 //设备端读取文件失败 +#define NET_ERR_FILE_SIZE 1356 //文件大小错误 +#define NET_ERR_FILE_NAME 1357 //文件名称错误,为空或不合法 + +//分段错误码(1351-1400) +#define NET_ERR_BROADCAST_BUSY 1358 //设备正在广播中 + +//2012-12-20抓拍机错误码(1400-1499) +#define NET_DVR_ERR_LANENUM_EXCEED 1400 //车道数超出能力 +#define NET_DVR_ERR_PRAREA_EXCEED 1401 //牌识区域过大 +#define NET_DVR_ERR_LIGHT_PARAM 1402 //信号灯接入参数错误 +#define NET_DVR_ERR_LANE_LINE_INVALID 1403 //车道线配置错误 +#define NET_DVR_ERR_STOP_LINE_INVALID 1404 //停止线配置错误 +#define NET_DVR_ERR_LEFTORRIGHT_LINE_INVALID 1405 //左/右转分界线配置错误 +#define NET_DVR_ERR_LANE_NO_REPEAT 1406 //叠加车道号重复 +#define NET_DVR_ERR_PRAREA_INVALID 1407 //牌识多边形不符合要求 +#define NET_DVR_ERR_LIGHT_NUM_EXCEED 1408 //视频检测交通灯信号灯数目超出最大值 +#define NET_DVR_ERR_SUBLIGHT_NUM_INVALID 1409 //视频检测交通灯信号灯子灯数目不合法 +#define NET_DVR_ERR_LIGHT_AREASIZE_INVALID 1410 //视频检测交通灯输入信号灯框大小不合法 +#define NET_DVR_ERR_LIGHT_COLOR_INVALID 1411 //视频检测交通灯输入信号灯颜色不合法 +#define NET_DVR_ERR_LIGHT_DIRECTION_INVALID 1412 //视频检测交通灯输入灯方向属性不合法 +#define NET_DVR_ERR_LACK_IOABLITY 1413 //IO口实际支持的能力不足 + +#define NET_DVR_ERR_FTP_PORT 1414 //FTP端口号非法(端口号重复或者异常) +#define NET_DVR_ERR_FTP_CATALOGUE 1415 //FTP目录名非法(启用多级目录,多级目录传值为空) +#define NET_DVR_ERR_FTP_UPLOAD_TYPE 1416 //FTP上传类型非法(单ftp只支持全部/双ftp只支持卡口和违章) +#define NET_DVR_ERR_FLASH_PARAM_WRITE 1417 //配置参数时写FLASH失败 +#define NET_DVR_ERR_FLASH_PARAM_READ 1418 //配置参数时读FLASH失败 +#define NET_DVR_ERR_PICNAME_DELIMITER 1419 //FTP图片命名分隔符非法 +#define NET_DVR_ERR_PICNAME_ITEM 1420 //FTP图片命名项非法(例如 分隔符) +#define NET_DVR_ERR_PLATE_RECOGNIZE_TYPE 1421 //牌识区域类型非法 (矩形和多边形有效性校验) +#define NET_DVR_ERR_CAPTURE_TIMES 1422 //抓拍次数非法 (有效值是0~5) +#define NET_DVR_ERR_LOOP_DISTANCE 1423 //线圈距离非法 (有效值是0~2000ms) +#define NET_DVR_ERR_LOOP_INPUT_STATUS 1424 //线圈输入状态非法 (有效值) +#define NET_DVR_ERR_RELATE_IO_CONFLICT 1425 //测速组IO关联冲突 +#define NET_DVR_ERR_INTERVAL_TIME 1426 //连拍间隔时间非法 (0~6000ms) +#define NET_DVR_ERR_SIGN_SPEED 1427 //标志限速值非法(大车标志限速不能大于小车标志限速 ) +#define NET_DVR_ERR_PIC_FLIP 1428 //图像配置翻转 (配置交互影响) +#define NET_DVR_ERR_RELATE_LANE_NUMBER 1429 //关联车道数错误 (重复 有效值校验1~99) +#define NET_DVR_ERR_TRIGGER_MODE 1430 //配置抓拍机触发模式非法 +#define NET_DVR_ERR_DELAY_TIME 1431 //触发延时时间错误(2000ms) +#define NET_DVR_ERR_EXCEED_RS485_COUNT 1432 //超过最大485个数限制 +#define NET_DVR_ERR_RADAR_TYPE 1433 //雷达类型错误 +#define NET_DVR_ERR_RADAR_ANGLE 1434 //雷达角度错误 +#define NET_DVR_ERR_RADAR_SPEED_VALID_TIME 1435 //雷达有效时间错误 +#define NET_DVR_ERR_RADAR_LINE_CORRECT 1436 //雷达线性矫正参数错误 +#define NET_DVR_ERR_RADAR_CONST_CORRECT 1437 //雷达常量矫正参数错误 +#define NET_DVR_ERR_RECORD_PARAM 1438 //录像参数无效(预录时间不超过10s) +#define NET_DVR_ERR_LIGHT_WITHOUT_COLOR_AND_DIRECTION 1439 //视频检测信号灯配置信号灯个数,但是没有勾选信号灯方向和颜色的 +#define NET_DVR_ERR_LIGHT_WITHOUT_DETECTION_REGION 1440 //视频检测信号灯配置信号灯个数,但是没有画检测区域 +#define NET_DVR_ERR_RECOGNIZE_PROVINCE_PARAM 1441 //牌识参数省份参数的合法性 + +#define NET_DVR_ERR_SPEED_TIMEOUT 1442 //IO测速超时时间非法(有效值大于0) +#define NET_DVR_ERR_NTP_TIMEZONE 1443 //ntp时区参数错误 +#define NET_DVR_ERR_NTP_INTERVAL_TIME 1444 //ntp校时间隔错误 +#define NET_DVR_ERR_NETWORK_CARD_NUM 1445 //可配置网卡数目错误 +#define NET_DVR_ERR_DEFAULT_ROUTE 1446 //默认路由错误 +#define NET_DVR_ERR_BONDING_WORK_MODE 1447 //bonding网卡工作模式错误 +#define NET_DVR_ERR_SLAVE_CARD 1448 //slave网卡错误 +#define NET_DVR_ERR_PRIMARY_CARD 1449 //Primary网卡错误 +#define NET_DVR_ERR_DHCP_PPOE_WORK 1450 //dhcp和pppoE不能同时启动 +#define NET_DVR_ERR_NET_INTERFACE 1451 //网络接口错误 +#define NET_DVR_ERR_MTU 1452 //MTU错误 +#define NET_DVR_ERR_NETMASK 1453 //子网掩码错误 +#define NET_DVR_ERR_IP_INVALID 1454 //IP地址不合法 +#define NET_DVR_ERR_MULTICAST_IP_INVALID 1455 //多播地址不合法 +#define NET_DVR_ERR_GATEWAY_INVALID 1456 //网关不合法 +#define NET_DVR_ERR_DNS_INVALID 1457 //DNS不合法 +#define NET_DVR_ERR_ALARMHOST_IP_INVALID 1458 //告警主机地址不合法 +#define NET_DVR_ERR_IP_CONFLICT 1459 //IP冲突 +#define NET_DVR_ERR_NETWORK_SEGMENT 1460 //IP不支持同网段 +#define NET_DVR_ERR_NETPORT 1461 //端口错误 + +#define NET_DVR_ERR_PPPOE_NOSUPPORT 1462 //PPPOE不支持 +#define NET_DVR_ERR_DOMAINNAME_NOSUPPORT 1463 //域名不支持 +#define NET_DVR_ERR_NO_SPEED 1464 //未启用测速功能 +#define NET_DVR_ERR_IOSTATUS_INVALID 1465 //IO状态错误 +#define NET_DVR_ERR_BURST_INTERVAL_INVALID 1466 //连拍间隔非法 +#define NET_DVR_ERR_RESERVE_MODE 1467 //备用模式错误 + +#define NET_DVR_ERR_LANE_NO 1468 //叠加车道号错误 +#define NET_DVR_ERR_COIL_AREA_TYPE 1469 //线圈区域类型错误 +#define NET_DVR_ERR_TRIGGER_AREA_PARAM 1470 //触发区域参数错误 +#define NET_DVR_ERR_SPEED_LIMIT_PARAM 1471 //违章限速参数错误 +#define NET_DVR_ERR_LANE_PROTOCOL_TYPE 1472 //车道关联协议类型错误 + +#define NET_DVR_ERR_INTERVAL_TYPE 1473 //连拍间隔类型非法 +#define NET_DVR_ERR_INTERVAL_DISTANCE 1474 //连拍间隔距离非法 +#define NET_DVR_ERR_RS485_ASSOCIATE_DEVTYPE 1475 //RS485关联类型非法 +#define NET_DVR_ERR_RS485_ASSOCIATE_LANENO 1476 //RS485关联车道号非法 +#define NET_DVR_ERR_LANENO_ASSOCIATE_MULTIRS485 1477 //车道号关联多个RS485口 +#define NET_DVR_ERR_LIGHT_DETECTION_REGION 1478 //视频检测信号灯配置信号灯个数,但是检测区域宽或高为0 + +#define NET_DVR_ERR_DN2D_NOSUPPORT 1479 //不支持抓拍帧2D降噪 +#define NET_DVR_ERR_IRISMODE_NOSUPPORT 1480 //不支持的镜头类型 +#define NET_DVR_ERR_WB_NOSUPPORT 1481 //不支持的白平衡模式 +#define NET_DVR_ERR_IO_EFFECTIVENESS 1482 //IO口的有效性 +#define NET_DVR_ERR_LIGHTNO_MAX 1483 //信号灯检测器接入红/黄灯超限(16) +#define NET_DVR_ERR_LIGHTNO_CONFLICT 1484 //信号灯检测器接入红/黄灯冲突 + +#define NET_DVR_ERR_CANCEL_LINE 1485 //直行触发线 +#define NET_DVR_ERR_STOP_LINE 1486 //待行区停止线 +#define NET_DVR_ERR_RUSH_REDLIGHT_LINE 1487 //闯红灯触发线 +#define NET_DVR_ERR_IOOUTNO_MAX 1488 //IO输出口编号越界 + +#define NET_DVR_ERR_IOOUTNO_AHEADTIME_MAX 1489 //IO输出口提前时间超限 +#define NET_DVR_ERR_IOOUTNO_IOWORKTIME 1490 //IO输出口有效持续时间超限 +#define NET_DVR_ERR_IOOUTNO_FREQMULTI 1491 //IO输出口脉冲模式下倍频出错 +#define NET_DVR_ERR_IOOUTNO_DUTYRATE 1492 //IO输出口脉冲模式下占空比出错 +#define NET_DVR_ERR_VIDEO_WITH_EXPOSURE 1493 //以曝闪起效,工作方式不支持视频 +#define NET_DVR_ERR_PLATE_BRIGHTNESS_WITHOUT_FLASHDET 1494 //车牌亮度自动使能闪光灯仅在车牌亮度补偿模式下起效 + +#define NET_DVR_ERR_RECOGNIZE_TYPE_PARAM 1495 //识别类型非法 车牌识别参数(如大车、小车、背向、正向、车标识别等) +#define NET_DVR_ERR_PALTE_RECOGNIZE_AREA_PARAM 1496 //牌识参数非法 牌识区域配置时判断出错 +#define NET_DVR_ERR_PORT_CONFLICT 1497 //端口有冲突 +#define NET_DVR_ERR_LOOP_IP 1498 //IP不能设置为回环地址 +#define NET_DVR_ERR_DRIVELINE_SENSITIVE 1499 //压线灵敏度出错(视频电警模式下) + + +//2013-3-6VQD错误码(1500~1550) +#define NET_ERR_VQD_TIME_CONFLICT 1500 //VQD诊断时间段冲突 +#define NET_ERR_VQD_PLAN_NO_EXIST 1501 //VQD诊断计划不存在 +#define NET_ERR_VQD_CHAN_NO_EXIST 1502 //VQD布防点不存在 +#define NET_ERR_VQD_CHAN_MAX 1503 //VQD计划数已达上限 +#define NET_ERR_VQD_TASK_MAX 1504 //VQD任务数已达上限 + +#define NET_SDK_GET_INPUTSTREAMCFG 1551 //获取信号源 +#define NET_SDK_AUDIO_SWITCH_CONTROL 1552 //子窗口音频开关控制 +#define NET_SDK_GET_VIDEOWALLDISPLAYNO 1553 //获取设备显示输出号 +#define NET_SDK_GET_ALLSUBSYSTEM_BASIC_INFO 1554//获取所有子系统基本信息 +#define NET_SDK_SET_ALLSUBSYSTEM_BASIC_INFO 1555 //设置所有子系统基本信息 +#define NET_SDK_GET_AUDIO_INFO 1556//获取所有音频信息 +#define NET_SDK_GET_MATRIX_STATUS_V50 1557 // 获取视频综合平台状态_V50 +#define NET_SDK_DELETE_MONITOR_INFO 1558//删除Monitor信息 +#define NET_SDK_DELETE_CAMERA_INFO 1559//删除Camaera信息 + + +//抓拍机错误码新增扩展(1600~1900) +#define NET_DVR_ERR_EXCEED_MAX_CAPTURE_TIMES 1600 //抓拍模式为频闪时最大抓拍张数为2张(IVT模式下) +#define NET_DVR_ERR_REDAR_TYPE_CONFLICT 1601 //相同485口关联雷达类型冲突 +#define NET_DVR_ERR_LICENSE_PLATE_NULL 1602 //车牌号为空 +#define NET_DVR_ERR_WRITE_DATABASE 1603 //写入数据库失败 +#define NET_DVR_ERR_LICENSE_EFFECTIVE_TIME 1604 //车牌有效时间错误 +//视频电警 +#define NET_DVR_ERR_PRERECORDED_STARTTIME_LONG 1605 //预录开始时间大于违法抓拍张数 +//混合卡口 +#define NET_DVR_ERR_TRIGGER_RULE_LINE 1606 //触发规则线错误 +#define NET_DVR_ERR_LEFTRIGHT_TRIGGERLINE_NOTVERTICAL 1607 //左/右触发线不垂直 +#define NET_DVR_ERR_FLASH_LAMP_MODE 1608 //闪光灯闪烁模式错误 +#define NET_DVR_ERR_ILLEGAL_SNAPSHOT_NUM 1609 //违章抓拍张数错误 +#define NET_DVR_ERR_ILLEGAL_DETECTION_TYPE 1610 //违章检测类型错误 +#define NET_DVR_ERR_POSITIVEBACK_TRIGGERLINE_HIGH 1611 //正背向触发线高度错误 +#define NET_DVR_ERR_MIXEDMODE_CAPTYPE_ALLTARGETS 1612 //混合模式下只支持机非人抓拍类型 + +#define NET_DVR_ERR_CARSIGNSPEED_GREATERTHAN_LIMITSPEED 1613//小车标志限速大于限速值 +#define NET_DVR_ERR_BIGCARSIGNSPEED_GREATERTHAN_LIMITSPEED 1614//大车标志限速大于限速值 +#define NET_DVR_ERR_BIGCARSIGNSPEED_GREATERTHAN_CARSIGNSPEED 1615//大车标志限速大于小车标志限速值 +#define NET_DVR_ERR_BIGCARLIMITSPEED_GREATERTHAN_CARLIMITSPEED 1616//大车限速值大于小车限速值 +#define NET_DVR_ERR_BIGCARLOWSPEEDLIMIT_GREATERTHAN_CARLOWSPEEDLIMIT 1617//大车低速限速值大于小车低速限速值 +#define NET_DVR_ERR_CARLIMITSPEED_GREATERTHAN_EXCEPHIGHSPEED 1618//小车限速大于异常高速值 +#define NET_DVR_ERR_BIGCARLIMITSPEED_GREATERTHAN_EXCEPHIGHSPEED 1619//大车限速大于异常高速值 +#define NET_DVR_ERR_STOPLINE_MORETHAN_TRIGGERLINE 1620//停止线超过直行触发线 +#define NET_DVR_ERR_YELLOWLIGHTTIME_INVALID 1621/*视频检测黄灯持续时间不合法报错*/ +#define NET_DVR_ERR_TRIGGERLINE1_FOR_NOT_YIELD_TO_PEDESTRIAN_CANNOT_EXCEED_TRIGGERLINE2 1622//第一条不礼让行人触发线的位置超过了第二条不礼让行人触发线 +#define NET_DVR_ERR_TRIGGERLINE2_FOR_NOT_YIELD_TO_PEDESTRIAN_CANNOT_EXCEED_TRIGGERLINE1 1623//第二条不礼让行人触发线的位置超过了第一条不礼让行人触发线 + +//门禁主机错误码 +#define NET_ERR_TIME_OVERLAP 1900 //时间段重叠 +#define NET_ERR_HOLIDAY_PLAN_OVERLAP 1901 //假日计划重叠 +#define NET_ERR_CARDNO_NOT_SORT 1902 //卡号未排序 +#define NET_ERR_CARDNO_NOT_EXIST 1903 //卡号不存在 +#define NET_ERR_ILLEGAL_CARDNO 1904 //卡号错误 +#define NET_ERR_ZONE_ALARM 1905 //防区处于布防状态(参数修改不允许) +#define NET_ERR_ZONE_OPERATION_NOT_SUPPORT 1906 //防区不支持该操作 +#define NET_ERR_INTERLOCK_ANTI_CONFLICT 1907 //多门互锁和反潜回同时配置错误 +#define NET_ERR_DEVICE_CARD_FULL 1908 //卡已满(卡达到10W后返回) +#define NET_ERR_HOLIDAY_GROUP_DOWNLOAD 1909 //假日组下载失败 +#define NET_ERR_LOCAL_CONTROL_OFF 1910 //就地控制器离线 +#define NET_ERR_LOCAL_CONTROL_DISADD 1911 //就地控制器未添加 +#define NET_ERR_LOCAL_CONTROL_HASADD 1912 //就地控制器已添加 +#define NET_ERR_LOCAL_CONTROL_DOORNO_CONFLICT 1913 //与已添加的就地控制器门编号冲突 +#define NET_ERR_LOCAL_CONTROL_COMMUNICATION_FAIL 1914 //就地控制器通信失败 +#define NET_ERR_OPERAND_INEXISTENCE 1915 //操作对象不存在(对门、报警输出、报警输入相关操作,当对象未添加时返回) +#define NET_ERR_LOCAL_CONTROL_OVER_LIMIT 1916 //就地控制器超出设备最大能力(主控对就地数量有限制) +#define NET_ERR_DOOR_OVER_LIMIT 1917 //门超出设备最大能力 +#define NET_ERR_ALARM_OVER_LIMIT 1918 //报警输入输出超出设备最大能力 +#define NET_ERR_LOCAL_CONTROL_ADDRESS_INCONFORMITY_TYPE 1919 //就地控制器地址与类型不符 +#define NET_ERR_NOT_SUPPORT_ONE_MORE_CARD 1920 //不支持一人多卡 +#define NET_ERR_DELETE_NO_EXISTENCE_FACE 1921 //删除的人脸不存在 +#define NET_ERR_DOOR_SPECIAL_PASSWORD_REPEAT 1922 //与设备门特殊密码重复 +#define NET_ERR_AUTH_CODE_REPEAT 1923 //与设备认证码重复 +#define NET_ERR_DEPLOY_EXCEED_MAX 1924 //布防超过最大连接数 +#define NET_ERR_NOT_SUPPORT_DEL_FP_BY_ID 1925 //读卡器不支持按手指ID删除指纹 +#define NET_ERR_TIME_RANGE 1926 //有效期参数配置范围有误 +#define NET_ERR_CAPTURE_TIMEOUT 1927 //采集超时 +#define NET_ERR_LOW_SCORE 1928 //采集质量低 +#define NET_ERR_OFFLINE_CAPTURING 1929 //离线采集中,无法响应 + +//可视对讲错误码 +#define NET_DVR_ERR_OUTDOOR_COMMUNICATION 1950 //与门口机通信异常 +#define NET_DVR_ERR_ROOMNO_UNDEFINED 1951 //未设置房间号 +#define NET_DVR_ERR_NO_CALLING 1952 //无呼叫 +#define NET_DVR_ERR_RINGING 1953 //响铃 +#define NET_DVR_ERR_IS_CALLING_NOW 1954 //正在通话 +#define NET_DVR_ERR_LOCK_PASSWORD_WRONG 1955//智能锁密码错误 +#define NET_DVR_ERR_CONTROL_LOCK_FAILURE 1956//开关锁失败 +#define NET_DVR_ERR_CONTROL_LOCK_OVERTIME 1957//开关锁超时 +#define NET_DVR_ERR_LOCK_DEVICE_BUSY 1958//智能锁设备繁忙 +#define NET_DVR_ERR_UNOPEN_REMOTE_LOCK_FUNCTION 1959//远程开锁功能未打开 + + +//后端错误码 (2100 - 3000) +#define NET_DVR_ERR_FILE_NOT_COMPLETE 2100 //下载的文件不完整 +#define NET_DVR_ERR_IPC_EXIST 2101 //该IPC已经存在 +#define NET_DVR_ERR_ADD_IPC 2102 //该通道已添加IPC +#define NET_DVR_ERR_OUT_OF_RES 2103 //网络带宽能力不足 +#define NET_DVR_ERR_CONFLICT_TO_LOCALIP 2104 //IPC的ip地址跟DVR的ip地址冲突 +#define NET_DVR_ERR_IP_SET 2105 //非法ip地址 +#define NET_DVR_ERR_PORT_SET 2106 //非法的端口号 + +#define NET_ERR_WAN_NOTSUPPORT 2107 //不在同一个局域网,无法设置安全问题或导出GUID文件 +#define NET_ERR_MUTEX_FUNCTION 2108 //功能互斥 +#define NET_ERR_QUESTION_CONFIGNUM 2109 //安全问题配置数量错误 +#define NET_ERR_FACECHAN_NORESOURCE 2110 //人脸智能通道资源已用完 +#define NET_ERR_DATA_CALLBACK 2111 //正在数据回迁 +#define NET_ERR_ATM_VCA_CHAN_IS_RELATED 2112 //ATM智能通道已被关联 +#define NET_ERR_ATM_VCA_CHAN_IS_OVERLAPED 2113 //ATM智能通道已被叠加 +#define NET_ERR_FACE_CHAN_UNOVERLAP_EACH_OTHER 2114 //人脸通道不能互相叠加 +#define NET_ERR_ACHIEVE_MAX_CHANNLE_LIMIT 2115 //达到最大路数限制 +#define NET_DVR_SMD_ENCODING_NORESOURSE 2116 //SMD编码资源不足 +#define NET_DVR_SMD_DECODING_NORESOURSE 2117 //SMD解码资源不足 +#define NET_DVR_FACELIB_DATA_PROCESSING 2118 //人脸库数据正在处理 +#define NET_DVR_ERR_LARGE_TIME_DIFFRENCE 2119 //设备和服务器之间的时间差异太大 +#define NET_DVR_NO_SUPPORT_WITH_PLAYBACK 2120 //已开启回放,不支持本功能 +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_SMD 2121 //通道已开启SMD,不支持本功能 +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_FD 2122 //通道已开启目标抓拍,不支持本功能 +#define NET_DVR_ILLEGAL_PHONE_NUMBER 2123 //非法的电话号码 +#define NET_DVR_ILLEGAL_CERITIFICATE_NUMBER 2124 //非法的证件号码 +#define NET_DVR_ERR_CHANNEL_RESOLUTION_NO_SUPPORT 2125 //通道分辨率不支持 +#define NET_DVR_ERR_CHANNEL_COMPRESSION_NO_SUPPORT 2126 //通道编码格式不支持 + +#define NET_DVR_ERR_CLUSTER_DEVICE_TOO_LESS 2127 //设备数少,不允许删除 +#define NET_DVR_ERR_CLUSTER_DEL_DEVICE_CM_PLAYLOAD 2128 //该设备是集群主机,不允许删除 +#define NET_DVR_ERR_CLUSTER_DEVNUM_OVER_UPPER_LIMIT 2129 //设备数达到上限,不允许增加 +#define NET_DVR_ERR_CLUSTER_DEVICE_TYPE_INCONFORMITY 2130 //设备类型不一致 +#define NET_DVR_ERR_CLUSTER_DEVICE_VERSION_INCONFORMITY 2131 //设备版本不一致 +#define NET_DVR_ERR_CLUSTER_IP_CONFLICT 2132 //集群系统IP地址冲突:ipv4地址冲突、ipv6地址冲突 +#define NET_DVR_ERR_CLUSTER_IP_INVALID 2133 //集群系统IP地址无效:ipv4非法、ipv6非法 +#define NET_DVR_ERR_CLUSTER_PORT_CONFLICT 2134 //集群系统端口冲突 +#define NET_DVR_ERR_CLUSTER_PORT_INVALID 2135 //集群系统端口非法 +#define NET_DVR_ERR_CLUSTER_USERNAEM_OR_PASSWORD_INVALID 2136 //组网用户名或密码非法 +#define NET_DVR_ERR_CLUSTER_DEVICE_ALREADY_EXIST 2137 //存在相同设备 +#define NET_DVR_ERR_CLUSTER_DEVICE_NOT_EXIST 2138 //设备不存在(组网时下发的cs列表中的设备信息在任何一台cs上都找不到,删除的时候下发的id不对) +#define NET_DVR_ERR_CLUSTER_NON_CLUSTER_MODE 2139 //设备处于非集群模式 +#define NET_DVR_ERR_CLUSTER_IP_NOT_SAME_LAN 2140 //IP地址不在同一局域网,不同区域网不允许组网/扩容 + +#define NET_DVR_ERR_CAPTURE_PACKAGE_FAILED 2141 //抓包失败 +#define NET_DVR_ERR_CAPTURE_PACKAGE_PROCESSING 2142 //正在抓包 +#define NET_DVR_ERR_SAFETY_HELMET_NO_RESOURCE 2143 //安全帽检测资源不足 +#define NET_DVR_NO_SUPPORT_WITH_ABSTRACT 2144 //已开启视频摘要,不支持本功能 +#define NET_DVR_ERR_TAPE_LIB_NEED_STOP_ARCHIVE 2145 //磁带库归档需要停止 +#define NET_DVR_INSUFFICIENT_DEEP_LEARNING_RESOURCES 2146 //深度学习资源超限 +#define NET_DVR_ERR_IDENTITY_KEY 2147 //交互口令错误 +#define NET_DVR_MISSING_IDENTITY_KEY 2148 //交互口令缺失 +#define NET_DVR_NO_SUPPORT_WITH_PERSON_DENSITY_DETECT 2149 //已开启人员密度检测,不支持本功能 +#define NET_DVR_IPC_RESOLUTION_OVERFLOW 2150 //IPC分辨率超限 +#define NET_DVR_IPC_BITRATE_OVERFLOW 2151 //IPC码率超限 +#define NET_DVR_ERR_INVALID_TASKID 2152 //无效的taskID +#define NET_DVR_PANEL_MODE_NOT_CONFIG 2153 //没有配置面板路智能 +#define NET_DVR_NO_HUMAN_ENGINES_RESOURCE 2154 //人体引擎资源不足 +#define NET_DVR_ERR_TASK_NUMBER_OVERFLOW 2155 //任务数据超过上限 +#define NET_DVR_ERR_COLLISION_TIME_OVERFLOW 2156 //碰撞时间超过上限 +#define NET_DVR_ERR_CAPTURE_PACKAGE_NO_USB 2157 //未识别到U盘,请插入U盘或重新插入 +#define NET_DVR_ERR_NO_SET_SECURITY_EMAIL 2158 //未设置安全邮箱 +#define NET_DVR_ERR_EVENT_NOTSUPPORT 2159 //订阅事件不支持 +#define NET_DVR_ERR_PASSWORD_FORMAT 2160 //密码格式不对 +#define NET_DVR_ACCESS_FRONT_DEVICE_PARAM_FAILURE 2161 //获取前端设备参数失败 +#define NET_DVR_ACCESS_FRONT_DEVICE_STREAM_FAILURE 2162 //对前端设备取流失败 +#define NET_DVR_ERR_USERNAME_FORMAT 2163 //用户名格式不对 +#define NET_DVR_ERR_UNOPENED_HIGH_RESOLUTION_MODE 2164 //超高分辨率模式未开启 +#define NET_DVR_ERR_TOO_SMALL_QUATO 2165 //配额设置太小 +#define NET_DVR_ERR_EMAIL_FORMAT 2166 //邮箱格式不对 +#define NET_DVR_ERR_SECURITY_CODE_FORMAT 2167 //安全码格式不对 +#define NET_DVR_PD_SPACE_TOO_SMALL 2168 //阵列硬盘容量太小 +#define NET_DVR_PD_NUM_TOO_BIG 2169 //阵列硬盘总数超过总盘数的二分之一 +#define NET_DVR_ERR_USB_IS_FULL 2170 //U盘已满 +#define NET_DVR_EXCEED_MAX_SMD_TYPE 2171 //达到最大SMD事件种类上限 +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_BEHAVIOR 2172 //通道已开启异常行为检测,不支持本功能 +#define NET_DVR_NO_BEHAVIOR_ENGINES_RESOURCE 2173 //异常行为检测资源不足 +#define NET_DVR_NO_RETENTION_ENGINES_RESOURCE 2174 //人员滞留检测资源不足 +#define NET_DVR_NO_LEAVE_POSITION_ENGINES_RESOURCE 2175 //离岗检测资源不足 +#define NET_DVR_NO_PEOPLE_NUM_CHANGE_ENGINES_RESOURCE 2176 //人数异常资源不足 +#define NET_DVR_PANEL_MODE_NUM_OVER_LIMIT 2177 //超过面板路最大路数 +#define NET_DVR_SURROUND_MODE_NUM_OVER_LIMIT 2178 //超过环境路最大路数 +#define NET_DVR_FACE_MODE_NUM_OVER_LIMIT 2179 //超过人脸路最大路数 +#define NET_DVR_SAFETYCABIN_MODE_NUM_OVER_LIMIT 2180 //超过防护舱路最大路数 +#define NET_DVR_DETECT_REGION_RANGE_INVALID 2181 //检测区域范围非法 +#define NET_DVR_CHANNEL_CAPTURE_PICTURE_FAILURE 2182 //通道抓图失败 +#define NET_DVR_VCACHAN_IS_NORESOURCE 2183 //智能通道资源用完 +#define NET_DVR_IPC_NUM_REACHES_LIMIT 2184 // Ipc通道数目达到上限 +#define NET_DVR_IOT_NUM_REACHES_LIMIT 2185 // IOT通道数目达到上限 +#define NET_DVR_IOT_CHANNEL_DEVICE_EXIST 2186 //当前IOT通道已经添加设备 +#define NET_DVR_IOT_CHANNEL_DEVICE_NOT_EXIST 2187 //当前IOT通道不存在设备 +#define NET_DVR_INVALID_IOT_PROTOCOL_TYPE 2188 //非法的IOT协议类型 +#define NET_DVR_INVALID_EZVIZ_SECRET_KEY 2189 //非法的萤石注册验证码 +#define NET_DVR_DUPLICATE_IOT_DEVICE 2190 //重复的IOT设备 +#define NET_DVR_SADP_MODIFY_FALIURE 2191 // SADP修改失败 +#define NET_DVR_IPC_NETWORK_ABNORMAL 2192 // IPC网络异常 +#define NET_DVR_IPC_PASSWORD_ERROR 2193 // IPC用户名密码错误 +#define NET_DVR_ERROR_IPC_TYPE 2194 //IPC类型不对 +#define NET_DVR_ERROR_IPC_LIST_NOT_EMPTY 2195 //已添加IPC列表不为空,不支持一键配置 +#define NET_DVR_ERROR_IPC_LIST_NOT_MATCH_PAIRING 2196 //IPC列表和配单不匹配 +#define NET_DVR_ERROR_IPC_BAD_LANGUAGE 2197 //IPC语言和设备不匹配 +#define NET_DVR_ERROR_IPC_IS_LOCKING 2198 //IPC已被锁 +#define NET_DVR_ERROR_IPC_NOT_ACTIVATED 2199 //IPC未激活 +#define NET_DVR_FIELD_CODING_NOT_SUPPORT 2200 //场编码不支持 +#define NET_DVR_ERROR_H323_NOT_SUPPORT_H265 2201 //H323视频会议就不支持H265码流 +#define NET_DVR_ERROR_EXPOSURE_TIME_TOO_BIG_IN_MODE_P 2202 //P制式下,曝光时间过大 +#define NET_DVR_ERROR_EXPOSURE_TIME_TOO_BIG_IN_MODE_N 2203 //N制式下,曝光时间过大 +#define NET_DVR_ERROR_PING_PROCESSING 2204 //正在PING +#define NET_DVR_ERROR_PING_NOT_START 2205 //Ping功能未开始 +#define NET_DVR_ERROR_NEED_DOUBLE_VERIFICATION 2206 //需要二次认证 +#define NET_DVR_NO_DOUBLE_VERIFICATION_USER 2207 //无二次认证用户 +#define NET_DVR_CHANNEL_OFFLINE 2208 //通道离线 +#define NET_DVR_TIMESPAN_NUM_OVER_LIMIT 2209 //时间段超出支持最大数目 +#define NET_DVR_CHANNEL_NUM_OVER_LIMIT 2210 //通道数目超出支持最大数目 +#define NET_DVR_NO_SEARCH_ID_RESOURCE 2211 //分页查询的searchID资源不足 +#define NET_DVR_ERROR_ONEKEY_EXPORT 2212 //正在进行导出操作,请稍后再试 +#define NET_DVR_NO_CITY_MANAGEMENT_ENGINES_RESOURCE 2213 //城管算法引擎资源不足 +#define NET_DVR_NO_SITUATION_ANALYSIS_ENGINES_RESOURCE 2214 //态势分析引擎资源不足 +#define NET_DVR_INTELLIGENT_ANALYSIS_IPC_CANNT_DELETE 2215 //正在进行智能分析的IPC无法删除 +#define NET_DVR_NOSUPPORT_RESET_PASSWORD 2216 //NVR不支持对IPC重置密码 +#define NET_DVR_ERROR_IPC_NEED_ON_LAN 2217 // IPC需要在局域网内 +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_SAFETY_HELMET 2218 //通道已开启安全帽检测,不支持本功能 +#define NET_DVR_ERROR_GET_RESETPASSWORDTYPE_IS_ABNORMAL 2219 /*IPC重置密码时,获取IPC的重置密码类型异常*/ +#define NET_DVR_ERROR_IPC_NOSUPPORT_RESET_PASSWORD 2220 /* IPC不支持重置密码*/ +#define NET_DVR_ERROR_IP_IS_NOT_ONLY_ONE 2221 /*IPC的IP不唯一,有重复*/ +#define NET_DVR_NO_SUPPORT_WITH_SMD_OR_SCD 2222 //已开启SMD/SCD,不支持本功能(SCD为场景变更) +#define NET_DVR_NO_SUPPORT_WITH_FD 2223 //已开启目标抓拍,不支持本功能 +#define NET_DVR_NO_FD_ENGINES_RESOURCE 2224 //目标抓拍资源不足 +#define NET_DVR_ERROR_ONEKEY_REMOVE 2225 //正在进行删除操作,请稍后再试 +#define NET_DVR_FACE_PIP_BACKGROUND_CHANNEL_OVERFLOW 2226 //人脸画中画背景通道超限 +#define NET_DVR_MICIN_CHANNEL_OCCUPIED 2227 //micin通道被占用 +#define NET_DVR_IPC_CHANNEL_IS_IN_PIP 2228 //操作失败,该通道已关联到审讯通道,请先取消画中画配置关联 + +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_FACE_CONTRAST 2229 //通道已开启人脸比对,不支持本功能 + +#define NET_DVR_INVALID_RECHARGE_CARD 2230 //无效的充值卡 +#define NET_DVR_CLOUD_PLATFORM_SERVER_EXCEPTION 2231 //云平台服务器异常 +#define NET_DVR_OPERATION_FAILURE_WITHOUT_LOGIN 2232 //未登录操作失败 +#define NET_DVR_INVALID_ASSOCIATED_SERIAL_NUMBER 2233 //关联序列号非法 +#define NET_DVR_CLOUD_PLATFORM_ACCOUNT_NOT_EXIST 2234 //云平台帐号不存在 +#define NET_DVR_DEVICE_SERIAL_NUMBER_REGISTERED 2235 //设备序列号已注册 +#define NET_DVR_CONFERENCE_ROOM_NOT_EXIST 2236 //会议室不存在 +#define NET_DVR_NEED_DISABLED_ANALOG_CHANNEL 2237//需禁用模拟通道 +#define NET_DVR_STUDENT_ROLL_CALL_FAILURE 2238//学生点名失败 +#define NET_DVR_SUB_DEVICE_NOT_ENABLE_INDIVIDUAL_BEHAVIOR 2239//子设备未启用个体行为模式 +#define NET_DVR_SUB_DEVICE_CHANNEL_CONTROL_FAILED 2240//子设备通道控制失败 +#define NET_DVR_DEVICE_NOT_IN_CONFERENCE 2241//设备不在会议中 +#define NET_DVR_ALREADY_EXIST_CONFERENCE 2242//当前已经存在会议 +#define NET_DVR_NO_SUPPORT_WITH_VIDEO_CONFERENCE 2243//当前正在视频会议中,不支持本功能 +#define NET_DVR_START_INTERACTION_FAILURE 2244//互动开始失败 +#define NET_DVR_ASK_QUESTION_STARTED 2245//已开始提问 +#define NET_DVR_ASK_QUESTION_CLOSED 2246//已结束提问 +#define NET_DVR_UNABLE_OPERATE_BY_HOST 2247//已被主持人禁用,无法操作 +#define NET_DVR_REPEATED_ASK_QUESTION 2248//重复提问 +#define NET_DVR_SWITCH_TIMEDIFF_LESS_LIMIT 2249/*开关机时间差小于限制值(10分钟)*/ +#define NET_DVR_CHANNEL_DEVICE_EXIST 2250 //当前通道已经添加设备 +#define NET_DVR_CHANNEL_DEVICE_NOT_EXIST 2251 //当前通道不存在设备 +#define NET_DVR_ERROR_ADJUSTING_RESOLUTION 2252 //先关闭摄像机的裁剪,再调整分辨率 +#define NET_DVR_SSD_FILE_SYSTEM_IS_UPGRADING 2253 //SSD文件系统正在升级 +#define NET_DVR_SSD_FILE_SYSTEM_IS_FORMAT 2254 //SSD正在格式化 +#define NET_DVR_CHANNEL_IS_CONNECTING 2255 //当前通道正在连接 + +#define NET_DVR_CHANNEL_STREAM_TYPE_NOT_SUPPORT 2257 //当前通道码流类型不支持 +#define NET_DVR_CHANNEL_USERNAME_NOT_EXIST 2258 //当前通道用户名不存在 +#define NET_DVR_CHANNEL_ACCESS_PARAM_FAILURE 2259 //当前通道获取参数失败 +#define NET_DVR_CHANNEL_GET_STREAM_FAILURE 2260 //当前通道取流失败 +#define NET_DVR_CHANNEL_RISK_PASSWORD 2261 //当前通道密码为风险密码 + +#define NET_DVR_NO_SUPPORT_DELETE_STRANGER_LIB 2262 //不支持删除陌生人库 +#define NET_DVR_NO_SUPPORT_CREATE_STRANGER_LIB 2263 //不支持创建陌生人库 + +#define NET_DVR_NETWORK_PORT_CONFLICT 2264 //网络配置端口冲突 +#define NET_DVR_TRANSCODE_NO_RESOURCES 2265 //转码资源不足 +#define NET_DVR_SSD_FILE_SYSTEM_ERROR 2266 //SSD文件系统错误 +#define NET_DVR_INSUFFICIENT_SSD__FOR_FPD 2267 //用于人员频次业务的SSD容量不够 +#define NET_DVR_ASSOCIATED_FACELIB_OVER_LIMIT 2268 //关联人脸库已达上限 +#define NET_DVR_NEED_DELETE_DIGITAL_CHANNEL 2269 //需删除数字通道 +#define NET_DVR_ERR_FALL_DOWN_RULENUM_LIMIT 2270 //人员倒地规则数上限 +#define NET_DVR_ERR_VIOLENT_MOTION_RULENUM_LIMIT 2271 //剧烈运动规则数上限 +#define NET_DVR_UPGRADE_ENGINE_VERSION_MISMATCH 2272 //升级包引擎版本不匹配(升级过程中返回) +#define NET_ERR_SLEEP_STREAM_UNSUPPORT 2273 //相机处于休眠中,开启预览失败;请先唤醒后再进行尝试 + +//热成像产线相关错误码(3001 - 3500) +#define NET_DVR_ERR_NOTSUPPORT_DEICING 3001 //设备当前状态不支持除冰功能(只在POE+、AC24V、DC12V供电下支持除冰功能) +#define NET_DVR_ERR_THERMENABLE_CLOSE 3002 //测温功能总使能未开启。(即NET_DVR_THERMOMETRY_BASICPARAM使能未开启) +#define NET_DVR_ERR_NOTMEET_DEICING 3003 //当前空腔温度不满足手动除冰开启条件(需空腔温度小于30度才可开启) +#define NET_DVR_ERR_PANORAMIC_LIMIT_OPERATED 3004 //全景地图和限位不可同时操作 +#define NET_DVR_ERR_SMARTH264_ROI_OPERATED 3005 //SmartH264和ROI不可同时操作 +#define NET_DVR_ERR_RULENUM_LIMIT 3006 //规则数上限 +#define NET_DVR_ERR_LASER_DEICING_OPERATED 3007 //激光以及除冰功能不可同时操作 +#define NET_DVR_ERR_OFFDIGITALZOOM_OR_MINZOOMLIMIT 3008 //请先关闭数据变倍功能或变倍限制设置为最小值。当执行烟火检测、异常行为检测、船只检测、坏点矫正、测温、烟火屏蔽功能时,若没有关闭数据变倍或者变倍限制没有设置为最小值时,将会提示该错误码。 +#define NET_DVR_ERR_FIREWAITING 3009 //设备云台正在火点等待中 +#define NET_DVR_SYNCHRONIZEFOV_ERROR 3010 //同步视场角错误 +#define NET_DVR_CERTIFICATE_VALIDATION_ERROR 3011 //证书验证不通过 +#define NET_DVR_CERTIFICATES_NUM_EXCEED_ERROR 3012 //证书个数超过上限 +#define NET_DVR_RULE_SHIELDMASK_CONFLICT_ERROR 3013 //规则区域与屏蔽区域冲突 +#define NET_DVR_MOTOR_PREHEATING_ERROR 3014 //电机预热中 +#define NET_DVR_PT_DEICING_ERROR 3015 //云台除冰中 + +//前端产品线错误码(3501-4000) +#define NET_DVR_ERR_NO_SAFETY_HELMET_REGION 3501 //未配置安全帽检测区域 +#define NET_DVR_ERR_UNCLOSED_SAFETY_HELMET 3502 //未关闭安全帽检测使能 +#define NET_DVR_ERR_MUX_RECV_STATE 3503 //多路复用接收状态异常 +#define NET_DVR_UPLOAD_HBDLIBID_ERROR 3504 // 上传人体库ID(HBDID or customHBDID)错误 +#define NET_DVR_NOTSUPPORT_SMALLER_RATIOS 3505 // 倍率小于1倍时不支持功能配置,请调高倍率 +#define NET_ERR_ACCOUNT_NOT_ACTIVED 3506// 用户账户未激活,排查建议:请先登录账户修改初始密码,再尝试操作。 + +#define NET_ERR_NPQ_BASE_INDEX 8000 //NPQ库错误码 +#define NET_ERR_NPQ_PARAM (NET_ERR_NPQ_BASE_INDEX + 1) //NPQ库参数有误 +#define NET_ERR_NPQ_SYSTEM (NET_ERR_NPQ_BASE_INDEX + 2) //NPQ库操作系统调用错误(包括资源申请失败或内部错误等) +#define NET_ERR_NPQ_GENRAL (NET_ERR_NPQ_BASE_INDEX + 3) //NPQ库内部通用错误 +#define NET_ERR_NPQ_PRECONDITION (NET_ERR_NPQ_BASE_INDEX + 4) //NPQ库调用顺序错误 +#define NET_ERR_NPQ_NOTSUPPORT (NET_ERR_NPQ_BASE_INDEX + 5) //NPQ库功能不支持 + +#define NET_ERR_NPQ_NOTCALLBACK (NET_ERR_NPQ_BASE_INDEX + 100) //数据没有回调上来 +#define NET_ERR_NPQ_LOADLIB (NET_ERR_NPQ_BASE_INDEX + 101) //NPQ库加载失败 +#define NET_ERR_NPQ_STEAM_CLOSE (NET_ERR_NPQ_BASE_INDEX + 104) //本路码流NPQ功能未开启 +#define NET_ERR_NPQ_MAX_LINK (NET_ERR_NPQ_BASE_INDEX + 110) //NPQ取流路数达到上限 +#define NET_ERR_NPQ_STREAM_CFG (NET_ERR_NPQ_BASE_INDEX + 111) //编码参数存在冲突配置 +#define NET_ERR_NPQ_PLAYBACK_OVERSPEED (NET_ERR_NPQ_BASE_INDEX + 112) //NPQ回放倍率达到上限 +#define NET_ERR_NPQ_PLAYBACK_BELOWSPEED (NET_ERR_NPQ_BASE_INDEX + 113) //NPQ回放倍率达到下限 + +#define NET_EZVIZ_P2P_BASE_INDEX 8300 //萤石P2P组件错误码 #define NET_DVR_EZVIZ_P2P_REGISTER_ERROR (NET_EZVIZ_P2P_BASE_INDEX + 1) #define NET_DVR_EZVIZ_P2P_LOGIN_2C_ERROR (NET_EZVIZ_P2P_BASE_INDEX + 2) #define NET_DVR_EZVIZ_P2P_LOGIN_2B_ERROR (NET_EZVIZ_P2P_BASE_INDEX + 3) @@ -1849,188 +1849,188 @@ #define NET_DVR_EZVIZ_P2P_SVR_DEV_NOT_BELONG_TO_USER (NET_EZVIZ_P2P_BASE_INDEX + 34) //P2PCLOUD_ER_SVR_DEV_NOT_BELONG_TO_USER 5005 -//Դ 8501~9500 -#define NET_ERR_UPGRADE_PROG_ERR 8501 //ִг -#define NET_ERR_UPGRADE_NO_DEVICE 8502 //û豸(ָLEDûнӽտ) -#define NET_ERR_UPGRADE_NO_FILE 8503 //ûҵļ -#define NET_ERR_UPGRADE_DATA_ERROR 8504 //ļݲ -#define NET_ERR_UPGRADE_LINK_SERVER_ERR 8505 //ʧ -#define NET_ERR_UPGRADE_OEMCODE_NOMATCH 8506 //oemCodeƥ -#define NET_ERR_UPGRADE_FLASH_NOENOUGH 8507 //flash -#define NET_ERR_UPGRADE_RAM_NOENOUGH 8508 //RAM -#define NET_ERR_UPGRADE_DSPRAM_NOENOUGH 8509 //DSP RAM -#define NET_ERR_NOT_SUPPORT_CHECK 8510 //ĻͺŲ֧У -#define NET_ERR_LED_DEVICE_BUSY_CHECK 8511 //LED豸æУ -#define NET_ERR_DEVICE_MEM_NOT_ENOUGH 8512 //豸ڴ治 -#define NET_ERR_CHECK_PARAM 8513 //У -#define NET_ERR_RESOLUTION_OVER_LIMIT 8514 //ֱʳ -#define NET_ERR_NO_CUSTOM_BASE 8515 //Զͼ -#define NET_ERR_PRIORITY_LOWER 8516 //ȼڵǰģʽ -#define NET_ERR_SEND_MESSAGE_EXCEPT 8517 //Ϣ쳣 -#define NET_ERR_SENDCARD_UPGRADING 8518 //Ϳ -#define NET_ERR_NO_WIRELESS_NETCARD 8519 //δ -#define NET_ERR_LOAD_FS_FAIL 8520 //Ļʧ -#define NET_ERR_FLASH_UNSTORAGE_RECCARD 8521 //Flashδ洢տ -#define NET_ERR_NOT_SUPPORT_SINGLE_NETWORKCARD_AGGREGA 8522 //ֵ֧ۺ -#define NET_ERR_DISPLAYRESOLUTION_LESSTHAN_SMALLESTRESOLUTION 8523 //ʾֱССֱ -#define NET_ERR_NOT_SUPPORT_LOCAL_SOURCE_DRAG_MORE 8524 //ֱ֧Դһ϶ -#define NET_ERR_CANCEL_CURRENT_LED_AREA 8525 //ȡLED -#define NET_ERR_LED_OUT_ASSOCIATED_AREA 8526 //LEDδڹ -#define NET_ERR_MAX_VIRTUAL_LED_PICTURE_SIZE 8527 //LEDͼƬС -#define NET_ERR_DEVICE_CTRLED_BY_REMOTER 8528 //豸ǰң -//#define NET_DVR_RETRANSMISSIONID_NORESOURCE 9501 //شIDԴ -#define NET_DVR_RETRANSMISSIONID_ALREADYEXIST 9502 //شIDѾ -#define NET_DVR_RETRANSMISSIONID_NOTEXIST 9503 //شID +//传显错误码 8501~9500 +#define NET_ERR_UPGRADE_PROG_ERR 8501 //程序执行出错 +#define NET_ERR_UPGRADE_NO_DEVICE 8502 //没有设备(指LED控制器没有接接收卡) +#define NET_ERR_UPGRADE_NO_FILE 8503 //没有找到升级文件 +#define NET_ERR_UPGRADE_DATA_ERROR 8504 //升级文件数据不兼容 +#define NET_ERR_UPGRADE_LINK_SERVER_ERR 8505 //与服务器连接失败 +#define NET_ERR_UPGRADE_OEMCODE_NOMATCH 8506 //oemCode不匹配 +#define NET_ERR_UPGRADE_FLASH_NOENOUGH 8507 //flash不足 +#define NET_ERR_UPGRADE_RAM_NOENOUGH 8508 //RAM不足 +#define NET_ERR_UPGRADE_DSPRAM_NOENOUGH 8509 //DSP RAM不足 +#define NET_ERR_NOT_SUPPORT_CHECK 8510 //该屏幕型号不支持校正 +#define NET_ERR_LED_DEVICE_BUSY_CHECK 8511 //LED设备忙(正在校正) +#define NET_ERR_DEVICE_MEM_NOT_ENOUGH 8512 //设备内存不足 +#define NET_ERR_CHECK_PARAM 8513 //校正参数错误 +#define NET_ERR_RESOLUTION_OVER_LIMIT 8514 //输入分辨率超过限制 +#define NET_ERR_NO_CUSTOM_BASE 8515 //无自定义底图 +#define NET_ERR_PRIORITY_LOWER 8516 //优先级低于当前模式 +#define NET_ERR_SEND_MESSAGE_EXCEPT 8517 //消息发送异常 +#define NET_ERR_SENDCARD_UPGRADING 8518 //发送卡升级中 +#define NET_ERR_NO_WIRELESS_NETCARD 8519 //未插入无线网卡 +#define NET_ERR_LOAD_FS_FAIL 8520 //从屏幕加载失败 +#define NET_ERR_FLASH_UNSTORAGE_RECCARD 8521 //Flash中未存储接收卡参数 +#define NET_ERR_NOT_SUPPORT_SINGLE_NETWORKCARD_AGGREGA 8522 //不支持单网卡聚合 +#define NET_ERR_DISPLAYRESOLUTION_LESSTHAN_SMALLESTRESOLUTION 8523 //显示分辨率小于最小分辨率 +#define NET_ERR_NOT_SUPPORT_LOCAL_SOURCE_DRAG_MORE 8524 //不支持本地源一拖多 +#define NET_ERR_CANCEL_CURRENT_LED_AREA 8525 //请先取消LED区域 +#define NET_ERR_LED_OUT_ASSOCIATED_AREA 8526 //LED未在关联区域 +#define NET_ERR_MAX_VIRTUAL_LED_PICTURE_SIZE 8527 //虚拟LED图片大小超限 +#define NET_ERR_DEVICE_CTRLED_BY_REMOTER 8528 //设备当前受遥控器控制 +//#define NET_DVR_RETRANSMISSIONID_NORESOURCE 9501 //重传ID资源不足 +#define NET_DVR_RETRANSMISSIONID_ALREADYEXIST 9502 //重传ID已经存在 +#define NET_DVR_RETRANSMISSIONID_NOTEXIST 9503 //重传ID不存在 -/*******************ȫִ end**********************/ +/*******************全局错误码 end**********************/ /************************************************* -NET_DVR_IsSupport()ֵ -19λֱʾϢλTRUE)ʾ֧֣ +NET_DVR_IsSupport()返回值 +1-9位分别表示以下信息(位与是TRUE)表示支持; **************************************************/ -#define NET_DVR_SUPPORT_DDRAW 0x01//֧DIRECTDRAW֧֣򲥷ܹ -#define NET_DVR_SUPPORT_BLT 0x02//Կ֧BLT֧֣򲥷ܹ -#define NET_DVR_SUPPORT_BLTFOURCC 0x04//ԿBLT֧ɫת֧֣RGBת -#define NET_DVR_SUPPORT_BLTSHRINKX 0x08//ԿBLT֧XС֧֣ϵͳת -#define NET_DVR_SUPPORT_BLTSHRINKY 0x10//ԿBLT֧YС֧֣ϵͳת -#define NET_DVR_SUPPORT_BLTSTRETCHX 0x20//ԿBLT֧XŴ֧֣ϵͳת -#define NET_DVR_SUPPORT_BLTSTRETCHY 0x40//ԿBLT֧YŴ֧֣ϵͳת -#define NET_DVR_SUPPORT_SSE 0x80//CPU֧SSEָIntel Pentium3֧SSEָ -#define NET_DVR_SUPPORT_MMX 0x100//CPU֧MMXָIntel Pentium3֧SSEָ +#define NET_DVR_SUPPORT_DDRAW 0x01//支持DIRECTDRAW,如果不支持,则播放器不能工作; +#define NET_DVR_SUPPORT_BLT 0x02//显卡支持BLT操作,如果不支持,则播放器不能工作; +#define NET_DVR_SUPPORT_BLTFOURCC 0x04//显卡BLT支持颜色转换,如果不支持,播放器会用软件方法作RGB转换; +#define NET_DVR_SUPPORT_BLTSHRINKX 0x08//显卡BLT支持X轴缩小;如果不支持,系统会用软件方法转换; +#define NET_DVR_SUPPORT_BLTSHRINKY 0x10//显卡BLT支持Y轴缩小;如果不支持,系统会用软件方法转换; +#define NET_DVR_SUPPORT_BLTSTRETCHX 0x20//显卡BLT支持X轴放大;如果不支持,系统会用软件方法转换; +#define NET_DVR_SUPPORT_BLTSTRETCHY 0x40//显卡BLT支持Y轴放大;如果不支持,系统会用软件方法转换; +#define NET_DVR_SUPPORT_SSE 0x80//CPU支持SSE指令,Intel Pentium3以上支持SSE指令; +#define NET_DVR_SUPPORT_MMX 0x100//CPU支持MMX指令集,Intel Pentium3以上支持SSE指令; -/**********************̨ begin*************************/ -#define LIGHT_PWRON 2 /* ͨƹԴ */ -#define WIPER_PWRON 3 /* ͨˢ */ -#define FAN_PWRON 4 /* ͨȿ */ -#define HEATER_PWRON 5 /* ͨ */ -#define AUX_PWRON1 6 /* ͨ豸 */ -#define AUX_PWRON2 7 /* ͨ豸 */ -#define SET_PRESET 8 /* Ԥõ */ -#define CLE_PRESET 9 /* Ԥõ */ +/**********************云台控制命令 begin*************************/ +#define LIGHT_PWRON 2 /* 接通灯光电源 */ +#define WIPER_PWRON 3 /* 接通雨刷开关 */ +#define FAN_PWRON 4 /* 接通风扇开关 */ +#define HEATER_PWRON 5 /* 接通加热器开关 */ +#define AUX_PWRON1 6 /* 接通辅助设备开关 */ +#define AUX_PWRON2 7 /* 接通辅助设备开关 */ +#define SET_PRESET 8 /* 设置预置点 */ +#define CLE_PRESET 9 /* 清除预置点 */ -#define ZOOM_IN 11 /* ٶSS(ʱ) */ -#define ZOOM_OUT 12 /* ٶSSС(ʱС) */ -#define FOCUS_NEAR 13 /* ٶSSǰ */ -#define FOCUS_FAR 14 /* ٶSS */ -#define IRIS_OPEN 15 /* ȦٶSS */ -#define IRIS_CLOSE 16 /* ȦٶSSС */ +#define ZOOM_IN 11 /* 焦距以速度SS变大(倍率变大) */ +#define ZOOM_OUT 12 /* 焦距以速度SS变小(倍率变小) */ +#define FOCUS_NEAR 13 /* 焦点以速度SS前调 */ +#define FOCUS_FAR 14 /* 焦点以速度SS后调 */ +#define IRIS_OPEN 15 /* 光圈以速度SS扩大 */ +#define IRIS_CLOSE 16 /* 光圈以速度SS缩小 */ -#define TILT_UP 21 /* ̨SSٶ */ -#define TILT_DOWN 22 /* ̨SSٶ¸ */ -#define PAN_LEFT 23 /* ̨SSٶת */ -#define PAN_RIGHT 24 /* ̨SSٶת */ -#define UP_LEFT 25 /* ̨SSٶת */ -#define UP_RIGHT 26 /* ̨SSٶת */ -#define DOWN_LEFT 27 /* ̨SSٶ¸ת */ -#define DOWN_RIGHT 28 /* ̨SSٶ¸ת */ -#define PAN_AUTO 29 /* ̨SSٶԶɨ */ +#define TILT_UP 21 /* 云台以SS的速度上仰 */ +#define TILT_DOWN 22 /* 云台以SS的速度下俯 */ +#define PAN_LEFT 23 /* 云台以SS的速度左转 */ +#define PAN_RIGHT 24 /* 云台以SS的速度右转 */ +#define UP_LEFT 25 /* 云台以SS的速度上仰和左转 */ +#define UP_RIGHT 26 /* 云台以SS的速度上仰和右转 */ +#define DOWN_LEFT 27 /* 云台以SS的速度下俯和左转 */ +#define DOWN_RIGHT 28 /* 云台以SS的速度下俯和右转 */ +#define PAN_AUTO 29 /* 云台以SS的速度左右自动扫描 */ -#define FILL_PRE_SEQ 30 /* ԤõѲ */ -#define SET_SEQ_DWELL 31 /* Ѳͣʱ */ -#define SET_SEQ_SPEED 32 /* Ѳٶ */ -#define CLE_PRE_SEQ 33 /* ԤõѲɾ */ -#define STA_MEM_CRUISE 34 /* ʼ¼ */ -#define STO_MEM_CRUISE 35 /* ֹͣ¼ */ -#define RUN_CRUISE 36 /* ʼ */ -#define RUN_SEQ 37 /* ʼѲ */ -#define STOP_SEQ 38 /* ֹͣѲ */ -#define GOTO_PRESET 39 /* תԤõ */ -//dacͨ˽ЭNVRNVRͨOnvifЭʱ˽ЭѲλ·ٶȡʱΪ -//OnvifΪ·еλ˽ЭѲλ·ĿʼͽNVR޷жϺʱOnvifĸǰ豸 -#define SET_SEQ_START 41 /* IP򣬿ʼѲ*/ -#define SET_SEQ_END 42 /* IP򣬽Ѳ*/ +#define FILL_PRE_SEQ 30 /* 将预置点加入巡航序列 */ +#define SET_SEQ_DWELL 31 /* 设置巡航点停顿时间 */ +#define SET_SEQ_SPEED 32 /* 设置巡航速度 */ +#define CLE_PRE_SEQ 33 /* 将预置点从巡航序列中删除 */ +#define STA_MEM_CRUISE 34 /* 开始记录 */ +#define STO_MEM_CRUISE 35 /* 停止记录 */ +#define RUN_CRUISE 36 /* 开始 */ +#define RUN_SEQ 37 /* 开始巡航 */ +#define STOP_SEQ 38 /* 停止巡航 */ +#define GOTO_PRESET 39 /* 快球转到预置点 */ +//dac通过私有协议接入NVR,NVR通过Onvif协议接入相机时。由于私有协议巡航点位下发速度、时间等为单个命令, +//Onvif为批量下发所有点位,私有协议中无巡航点位下发的开始和结束,导致NVR无法判断何时组Onvif报文给前端设备 +#define SET_SEQ_START 41 /* IP快球,开始设置巡航*/ +#define SET_SEQ_END 42 /* IP快球,结束设置巡航*/ -#define DEL_SEQ 43 /* ɾѲ· */ -#define STOP_CRUISE 44 /* ֹͣ */ -#define DELETE_CRUISE 45 /* ɾ */ -#define DELETE_ALL_CRUISE 46/* ɾ */ +#define DEL_SEQ 43 /* 删除巡航路径 */ +#define STOP_CRUISE 44 /* 停止 */ +#define DELETE_CRUISE 45 /* 删除单条 */ +#define DELETE_ALL_CRUISE 46/* 删除所有 */ -#define PAN_CIRCLE 50 /* ̨SSٶԶԲɨ */ -#define DRAG_PTZ 51 /* ϶PTZ */ -#define LINEAR_SCAN 52 /* ɨ */ //2014-03-15 -#define CLE_ALL_PRESET 53 /* Ԥõȫ */ -#define CLE_ALL_SEQ 54 /* Ѳȫ */ -#define CLE_ALL_CRUISE 55 /* ȫ */ +#define PAN_CIRCLE 50 /* 云台以SS的速度自动圆周扫描 */ +#define DRAG_PTZ 51 /* 拖动PTZ */ +#define LINEAR_SCAN 52 /* 区域扫描 */ //2014-03-15 +#define CLE_ALL_PRESET 53 /* 预置点全部清除 */ +#define CLE_ALL_SEQ 54 /* 巡航全部清除 */ +#define CLE_ALL_CRUISE 55 /* 全部清除 */ -#define POPUP_MENU 56 /* ʾ˵ */ +#define POPUP_MENU 56 /* 显示操作菜单 */ -#define TILT_DOWN_ZOOM_IN 58 /* ̨SSٶ¸&&ٶSS(ʱ) */ -#define TILT_DOWN_ZOOM_OUT 59 /* ̨SSٶ¸&&ٶSSС(ʱС) */ -#define PAN_LEFT_ZOOM_IN 60 /* ̨SSٶת&&ٶSS(ʱ)*/ -#define PAN_LEFT_ZOOM_OUT 61 /* ̨SSٶת&&ٶSSС(ʱС)*/ -#define PAN_RIGHT_ZOOM_IN 62 /* ̨SSٶת&&ٶSS(ʱ) */ -#define PAN_RIGHT_ZOOM_OUT 63 /* ̨SSٶת&&ٶSSС(ʱС) */ -#define UP_LEFT_ZOOM_IN 64 /* ̨SSٶת&&ٶSS(ʱ)*/ -#define UP_LEFT_ZOOM_OUT 65 /* ̨SSٶת&&ٶSSС(ʱС)*/ -#define UP_RIGHT_ZOOM_IN 66 /* ̨SSٶת&&ٶSS(ʱ)*/ -#define UP_RIGHT_ZOOM_OUT 67 /* ̨SSٶת&&ٶSSС(ʱС)*/ -#define DOWN_LEFT_ZOOM_IN 68 /* ̨SSٶ¸ת&&ٶSS(ʱ) */ -#define DOWN_LEFT_ZOOM_OUT 69 /* ̨SSٶ¸ת&&ٶSSС(ʱС) */ -#define DOWN_RIGHT_ZOOM_IN 70 /* ̨SSٶ¸ת&&ٶSS(ʱ) */ -#define DOWN_RIGHT_ZOOM_OUT 71 /* ̨SSٶ¸ת&&ٶSSС(ʱС) */ -#define TILT_UP_ZOOM_IN 72 /* ̨SSٶ&&ٶSS(ʱ) */ -#define TILT_UP_ZOOM_OUT 73 /* ̨SSٶ&&ٶSSС(ʱС) */ -/**********************̨ end*************************/ +#define TILT_DOWN_ZOOM_IN 58 /* 云台以SS的速度下俯&&焦距以速度SS变大(倍率变大) */ +#define TILT_DOWN_ZOOM_OUT 59 /* 云台以SS的速度下俯&&焦距以速度SS变小(倍率变小) */ +#define PAN_LEFT_ZOOM_IN 60 /* 云台以SS的速度左转&&焦距以速度SS变大(倍率变大)*/ +#define PAN_LEFT_ZOOM_OUT 61 /* 云台以SS的速度左转&&焦距以速度SS变小(倍率变小)*/ +#define PAN_RIGHT_ZOOM_IN 62 /* 云台以SS的速度右转&&焦距以速度SS变大(倍率变大) */ +#define PAN_RIGHT_ZOOM_OUT 63 /* 云台以SS的速度右转&&焦距以速度SS变小(倍率变小) */ +#define UP_LEFT_ZOOM_IN 64 /* 云台以SS的速度上仰和左转&&焦距以速度SS变大(倍率变大)*/ +#define UP_LEFT_ZOOM_OUT 65 /* 云台以SS的速度上仰和左转&&焦距以速度SS变小(倍率变小)*/ +#define UP_RIGHT_ZOOM_IN 66 /* 云台以SS的速度上仰和右转&&焦距以速度SS变大(倍率变大)*/ +#define UP_RIGHT_ZOOM_OUT 67 /* 云台以SS的速度上仰和右转&&焦距以速度SS变小(倍率变小)*/ +#define DOWN_LEFT_ZOOM_IN 68 /* 云台以SS的速度下俯和左转&&焦距以速度SS变大(倍率变大) */ +#define DOWN_LEFT_ZOOM_OUT 69 /* 云台以SS的速度下俯和左转&&焦距以速度SS变小(倍率变小) */ +#define DOWN_RIGHT_ZOOM_IN 70 /* 云台以SS的速度下俯和右转&&焦距以速度SS变大(倍率变大) */ +#define DOWN_RIGHT_ZOOM_OUT 71 /* 云台以SS的速度下俯和右转&&焦距以速度SS变小(倍率变小) */ +#define TILT_UP_ZOOM_IN 72 /* 云台以SS的速度上仰&&焦距以速度SS变大(倍率变大) */ +#define TILT_UP_ZOOM_OUT 73 /* 云台以SS的速度上仰&&焦距以速度SS变小(倍率变小) */ +/**********************云台控制命令 end*************************/ -#define DVR_VEHICLE_CONTROL_LIST 0x1 //(͵)2013-11-04 +#define DVR_VEHICLE_CONTROL_LIST 0x1 //车辆名单数据类型(发送的数据类型)2013-11-04 /************************************************* -طʱſ궨 +回放时播放控制命令宏定义 NET_DVR_PlayBackControl NET_DVR_PlayControlLocDisplay -NET_DVR_DecPlayBackCtrlĺ궨 -ֲ֧鿴˵ʹ +NET_DVR_DecPlayBackCtrl的宏定义 +具体支持查看函数说明和代码 **************************************************/ -#define NET_DVR_PLAYSTART 1//ʼ -#define NET_DVR_PLAYSTOP 2//ֹͣ -#define NET_DVR_PLAYPAUSE 3//ͣ -#define NET_DVR_PLAYRESTART 4//ָ -#define NET_DVR_PLAYFAST 5// -#define NET_DVR_PLAYSLOW 6// -#define NET_DVR_PLAYNORMAL 7//ٶ -#define NET_DVR_PLAYFRAME 8//֡ -#define NET_DVR_PLAYSTARTAUDIO 9// -#define NET_DVR_PLAYSTOPAUDIO 10//ر -#define NET_DVR_PLAYAUDIOVOLUME 11// -#define NET_DVR_PLAYSETPOS 12//ıļطŵĽ -#define NET_DVR_PLAYGETPOS 13//ȡļطŵĽ -#define NET_DVR_PLAYGETTIME 14//ȡǰѾŵʱ(ļطŵʱЧ) -#define NET_DVR_PLAYGETFRAME 15//ȡǰѾŵ֡(ļطŵʱЧ) -#define NET_DVR_GETTOTALFRAMES 16//ȡǰļܵ֡(ļطŵʱЧ) -#define NET_DVR_GETTOTALTIME 17//ȡǰļܵʱ(ļطŵʱЧ) -#define NET_DVR_THROWBFRAME 20//B֡ -#define NET_DVR_SETSPEED 24//ٶ -#define NET_DVR_KEEPALIVE 25//豸(ص2뷢һ) -#define NET_DVR_PLAYSETTIME 26//ʱ䶨λ -#define NET_DVR_PLAYGETTOTALLEN 27//ȡʱطŶӦʱڵļܳ -#define NET_DVR_PLAYSETTIME_V50 28//ʱ䶨λ(֧ʱչ) -#define NET_DVR_PLAY_FORWARD 29 //лΪ -#define NET_DVR_PLAY_REVERSE 30 //лΪ +#define NET_DVR_PLAYSTART 1//开始播放 +#define NET_DVR_PLAYSTOP 2//停止播放 +#define NET_DVR_PLAYPAUSE 3//暂停播放 +#define NET_DVR_PLAYRESTART 4//恢复播放 +#define NET_DVR_PLAYFAST 5//快放 +#define NET_DVR_PLAYSLOW 6//慢放 +#define NET_DVR_PLAYNORMAL 7//正常速度 +#define NET_DVR_PLAYFRAME 8//单帧放 +#define NET_DVR_PLAYSTARTAUDIO 9//打开声音 +#define NET_DVR_PLAYSTOPAUDIO 10//关闭声音 +#define NET_DVR_PLAYAUDIOVOLUME 11//调节音量 +#define NET_DVR_PLAYSETPOS 12//改变文件回放的进度 +#define NET_DVR_PLAYGETPOS 13//获取文件回放的进度 +#define NET_DVR_PLAYGETTIME 14//获取当前已经播放的时间(按文件回放的时候有效) +#define NET_DVR_PLAYGETFRAME 15//获取当前已经播放的帧数(按文件回放的时候有效) +#define NET_DVR_GETTOTALFRAMES 16//获取当前播放文件总的帧数(按文件回放的时候有效) +#define NET_DVR_GETTOTALTIME 17//获取当前播放文件总的时间(按文件回放的时候有效) +#define NET_DVR_THROWBFRAME 20//丢B帧 +#define NET_DVR_SETSPEED 24//设置码流速度 +#define NET_DVR_KEEPALIVE 25//保持与设备的心跳(如果回调阻塞,建议2秒发送一次) +#define NET_DVR_PLAYSETTIME 26//按绝对时间定位 +#define NET_DVR_PLAYGETTOTALLEN 27//获取按时间回放对应时间段内的所有文件的总长度 +#define NET_DVR_PLAYSETTIME_V50 28//按绝对时间定位(支持时区扩展) +#define NET_DVR_PLAY_FORWARD 29 //倒放切换为正放 +#define NET_DVR_PLAY_REVERSE 30 //正放切换为倒放 #define NET_DVR_SET_DECODEFFRAMETYPE 31 -#define NET_DVR_SET_TRANS_TYPE 32 //תʽ -#define NET_DVR_PLAY_CONVERT 33 //طת -#define NET_DVR_START_DRAWFRAME 34 //ʼ֡ط -#define NET_DVR_STOP_DRAWFRAME 35 //ֹͣ֡ط -#define NET_DVR_CHANGEWNDRESOLUTION 36 //ڴСı䣬֪ͨſ -#define NET_DVR_RESETBUFFER 37 //վ뻺Զ̻طļ -#define NET_DVR_VOD_DRAG_ING 38 //ط϶ -#define NET_DVR_VOD_DRAG_END 39 //ط϶ -#define NET_DVR_VOD_RESET_PLAYTIME 40 //貥ʱ -#define NET_DVR_PLAYSETTIME_V60 41 //ʱ䶨λV60 -#define NET_DVR_PLAY_FORWARD_V60 42 //лΪV60 -#define NET_DVR_PLAY_REVERSE_V60 43 //лΪV60 +#define NET_DVR_SET_TRANS_TYPE 32 //设置转码格式 +#define NET_DVR_PLAY_CONVERT 33 //回放转码 +#define NET_DVR_START_DRAWFRAME 34 //开始抽帧回放 +#define NET_DVR_STOP_DRAWFRAME 35 //停止抽帧回放 +#define NET_DVR_CHANGEWNDRESOLUTION 36 //窗口大小改变,通知播放库 +#define NET_DVR_RESETBUFFER 37 //清空矩阵解码缓冲区(远程回放文件) +#define NET_DVR_VOD_DRAG_ING 38 //回放拖动中 +#define NET_DVR_VOD_DRAG_END 39 //回放拖动结束 +#define NET_DVR_VOD_RESET_PLAYTIME 40 //重设播放时间 +#define NET_DVR_PLAYSETTIME_V60 41 //按绝对时间定位V60 +#define NET_DVR_PLAY_FORWARD_V60 42 //倒放切换为正放V60 +#define NET_DVR_PLAY_REVERSE_V60 43 //正放切换为倒放V60 -#define PLAYM4_DECODE_NORMAIL 0 // -#define PLAYM4_DECODE_KEY_FRAME 1 //ֻI֡ -#define PLAYM4_DECODE_NONE 2 //ȫ -#define PLAYM4_DECODE_TEMPORAL_LAYER_0 3 //1/2 -#define PLAYM4_DECODE_TEMPORAL_LAYER_1 4 //1/4 +#define PLAYM4_DECODE_NORMAIL 0 //正常解码 +#define PLAYM4_DECODE_KEY_FRAME 1 //只解I帧 +#define PLAYM4_DECODE_NONE 2 //全不解 +#define PLAYM4_DECODE_TEMPORAL_LAYER_0 3 //解1/2 +#define PLAYM4_DECODE_TEMPORAL_LAYER_1 4 //解1/4 -//Զ̰£ +//远程按键定义如下: /* key value send to CONFIG program */ #define KEY_CODE_1 1 #define KEY_CODE_2 2 @@ -2074,25 +2074,25 @@ NET_DVR_DecPlayBackCtrl #define KEY_PTZ_RIGHT_START KEY_CODE_RIGHT #define KEY_PTZ_RIGHT_STOP 35 -#define KEY_PTZ_AP1_START KEY_CODE_EDIT /*Ȧ+*/ +#define KEY_PTZ_AP1_START KEY_CODE_EDIT /*光圈+*/ #define KEY_PTZ_AP1_STOP 36 -#define KEY_PTZ_AP2_START KEY_CODE_PAN /*Ȧ-*/ +#define KEY_PTZ_AP2_START KEY_CODE_PAN /*光圈-*/ #define KEY_PTZ_AP2_STOP 37 -#define KEY_PTZ_FOCUS1_START KEY_CODE_A /*۽+*/ +#define KEY_PTZ_FOCUS1_START KEY_CODE_A /*聚焦+*/ #define KEY_PTZ_FOCUS1_STOP 38 -#define KEY_PTZ_FOCUS2_START KEY_CODE_M /*۽-*/ +#define KEY_PTZ_FOCUS2_START KEY_CODE_M /*聚焦-*/ #define KEY_PTZ_FOCUS2_STOP 39 -#define KEY_PTZ_B1_START 40 /*䱶+*/ +#define KEY_PTZ_B1_START 40 /*变倍+*/ #define KEY_PTZ_B1_STOP 41 -#define KEY_PTZ_B2_START 42 /*䱶-*/ +#define KEY_PTZ_B2_START 42 /*变倍-*/ #define KEY_PTZ_B2_STOP 43 -//9000 +//9000新增 #define KEY_CODE_11 44 #define KEY_CODE_12 45 #define KEY_CODE_13 46 @@ -2102,934 +2102,934 @@ NET_DVR_DecPlayBackCtrl -/************************* begin*******************************/ -//NET_DVR_SetDVRConfigNET_DVR_GetDVRConfig,עӦýṹ +/*************************参数配置命令 begin*******************************/ +//用于NET_DVR_SetDVRConfig和NET_DVR_GetDVRConfig,注意其对应的配置结构 -#define NET_DVR_GET_DEVICECFG 100 //ȡ豸 -#define NET_DVR_SET_DEVICECFG 101 //豸 -#define NET_DVR_GET_NETCFG 102 //ȡ -#define NET_DVR_SET_NETCFG 103 // -#define NET_DVR_GET_PICCFG 104 //ȡͼ -#define NET_DVR_SET_PICCFG 105 //ͼ -#define NET_DVR_GET_COMPRESSCFG 106 //ȡѹ -#define NET_DVR_SET_COMPRESSCFG 107 //ѹ -#define NET_DVR_GET_RECORDCFG 108 //ȡ¼ʱ -#define NET_DVR_SET_RECORDCFG 109 //¼ʱ -#define NET_DVR_GET_DECODERCFG 110 //ȡ -#define NET_DVR_SET_DECODERCFG 111 //ý -#define NET_DVR_GET_RS232CFG 112 //ȡ232ڲ -#define NET_DVR_SET_RS232CFG 113 //232ڲ -#define NET_DVR_GET_ALARMINCFG 114 //ȡ -#define NET_DVR_SET_ALARMINCFG 115 //ñ -#define NET_DVR_GET_ALARMOUTCFG 116 //ȡ -#define NET_DVR_SET_ALARMOUTCFG 117 //ñ -#define NET_DVR_GET_TIMECFG 118 //ȡDVRʱ -#define NET_DVR_SET_TIMECFG 119 //DVRʱ -#define NET_DVR_GET_PREVIEWCFG 120 //ȡԤ -#define NET_DVR_SET_PREVIEWCFG 121 //Ԥ -#define NET_DVR_GET_VIDEOOUTCFG 122 //ȡƵ -#define NET_DVR_SET_VIDEOOUTCFG 123 //Ƶ -#define NET_DVR_GET_USERCFG 124 //ȡû -#define NET_DVR_SET_USERCFG 125 //û -#define NET_DVR_GET_EXCEPTIONCFG 126 //ȡ쳣 -#define NET_DVR_SET_EXCEPTIONCFG 127 //쳣 -#define NET_DVR_GET_ZONEANDDST 128 //ȡʱʱƲ -#define NET_DVR_SET_ZONEANDDST 129 //ʱʱƲ +#define NET_DVR_GET_DEVICECFG 100 //获取设备参数 +#define NET_DVR_SET_DEVICECFG 101 //设置设备参数 +#define NET_DVR_GET_NETCFG 102 //获取网络参数 +#define NET_DVR_SET_NETCFG 103 //设置网络参数 +#define NET_DVR_GET_PICCFG 104 //获取图象参数 +#define NET_DVR_SET_PICCFG 105 //设置图象参数 +#define NET_DVR_GET_COMPRESSCFG 106 //获取压缩参数 +#define NET_DVR_SET_COMPRESSCFG 107 //设置压缩参数 +#define NET_DVR_GET_RECORDCFG 108 //获取录像时间参数 +#define NET_DVR_SET_RECORDCFG 109 //设置录像时间参数 +#define NET_DVR_GET_DECODERCFG 110 //获取解码器参数 +#define NET_DVR_SET_DECODERCFG 111 //设置解码器参数 +#define NET_DVR_GET_RS232CFG 112 //获取232串口参数 +#define NET_DVR_SET_RS232CFG 113 //设置232串口参数 +#define NET_DVR_GET_ALARMINCFG 114 //获取报警输入参数 +#define NET_DVR_SET_ALARMINCFG 115 //设置报警输入参数 +#define NET_DVR_GET_ALARMOUTCFG 116 //获取报警输出参数 +#define NET_DVR_SET_ALARMOUTCFG 117 //设置报警输出参数 +#define NET_DVR_GET_TIMECFG 118 //获取DVR时间 +#define NET_DVR_SET_TIMECFG 119 //设置DVR时间 +#define NET_DVR_GET_PREVIEWCFG 120 //获取预览参数 +#define NET_DVR_SET_PREVIEWCFG 121 //设置预览参数 +#define NET_DVR_GET_VIDEOOUTCFG 122 //获取视频输出参数 +#define NET_DVR_SET_VIDEOOUTCFG 123 //设置视频输出参数 +#define NET_DVR_GET_USERCFG 124 //获取用户参数 +#define NET_DVR_SET_USERCFG 125 //设置用户参数 +#define NET_DVR_GET_EXCEPTIONCFG 126 //获取异常参数 +#define NET_DVR_SET_EXCEPTIONCFG 127 //设置异常参数 +#define NET_DVR_GET_ZONEANDDST 128 //获取时区和夏时制参数 +#define NET_DVR_SET_ZONEANDDST 129 //设置时区和夏时制参数 -//עֻ֧4OSDͣͨV30µ豸汾 -#define NET_DVR_GET_SHOWSTRING 130 //ȡַ -#define NET_DVR_SET_SHOWSTRING 131 //õַ +//注:该命令只支持4条OSD的类型,通常用于V30以下的设备版本。 +#define NET_DVR_GET_SHOWSTRING 130 //获取叠加字符参数 +#define NET_DVR_SET_SHOWSTRING 131 //设置叠加字符参数 -#define NET_DVR_GET_EVENTCOMPCFG 132 //ȡ¼¼ -#define NET_DVR_SET_EVENTCOMPCFG 133 //¼¼ -#define NET_DVR_GET_FTPCFG 134 //ȡץͼFTP() -#define NET_DVR_SET_FTPCFG 135 //ץͼFTP() -#define NET_DVR_GET_AUXOUTCFG 140 //ȡ(HS豸2006-02-28) -#define NET_DVR_SET_AUXOUTCFG 141 //ñ(HS豸2006-02-28) -#define NET_DVR_GET_PREVIEWCFG_AUX 142 //ȡ-sϵ˫Ԥ(-sϵ˫2006-04-13) -#define NET_DVR_SET_PREVIEWCFG_AUX 143 //-sϵ˫Ԥ(-sϵ˫2006-04-13) +#define NET_DVR_GET_EVENTCOMPCFG 132 //获取事件触发录像参数 +#define NET_DVR_SET_EVENTCOMPCFG 133 //设置事件触发录像参数 +#define NET_DVR_GET_FTPCFG 134 //获取抓图的FTP参数(基线) +#define NET_DVR_SET_FTPCFG 135 //设置抓图的FTP参数(基线) +#define NET_DVR_GET_AUXOUTCFG 140 //获取报警触发辅助输出设置(HS设备辅助输出2006-02-28) +#define NET_DVR_SET_AUXOUTCFG 141 //设置报警触发辅助输出设置(HS设备辅助输出2006-02-28) +#define NET_DVR_GET_PREVIEWCFG_AUX 142 //获取-s系列双输出预览参数(-s系列双输出2006-04-13) +#define NET_DVR_SET_PREVIEWCFG_AUX 143 //设置-s系列双输出预览参数(-s系列双输出2006-04-13) -#define NET_DVR_GET_PASSWORD_MANAGE_CFG 144 //ȡ -#define NET_DVR_SET_PASSWORD_MANAGE_CFG 145 // -#define NET_DVR_UNLOCK_USER 146 //û -#define NET_DVR_GET_SECURITY_CFG 147 //ȡȫ֤ -#define NET_DVR_SET_SECURITY_CFG 148 //ðȫ֤ -#define NET_DVR_GET_LOCKED_INFO_LIST 149 //ȡбϢ +#define NET_DVR_GET_PASSWORD_MANAGE_CFG 144 //获取密码管理配置 +#define NET_DVR_SET_PASSWORD_MANAGE_CFG 145 //设置密码管理配置 +#define NET_DVR_UNLOCK_USER 146 //用户解锁 +#define NET_DVR_GET_SECURITY_CFG 147 //获取安全认证配置 +#define NET_DVR_SET_SECURITY_CFG 148 //设置安全认证配置 +#define NET_DVR_GET_LOCKED_INFO_LIST 149 //获取所有被锁定信息 -/*********************************ֽܲӿ begin***************************************/ -//ΪӦNET_VCA_RULECFG -#define NET_DVR_SET_RULECFG 152 //쳣Ϊ -#define NET_DVR_GET_RULECFG 153 //ȡ쳣Ϊ -//궨NET_DVR_TRACK_CFG -#define NET_DVR_SET_TRACK_CFG 160//ò -#define NET_DVR_GET_TRACK_CFG 161//ȡò +/*********************************智能部分接口 begin***************************************/ +//行为对应(NET_VCA_RULECFG) +#define NET_DVR_SET_RULECFG 152 //设置异常行为检测规则 +#define NET_DVR_GET_RULECFG 153 //获取异常行为检测规则 +//球机标定参数(NET_DVR_TRACK_CFG ) +#define NET_DVR_SET_TRACK_CFG 160//设置球机的配置参数 +#define NET_DVR_GET_TRACK_CFG 161//获取球机的配置参数 -//ܷȡýṹ -#define NET_DVR_SET_IVMS_STREAMCFG 162 //ܷȡ -#define NET_DVR_GET_IVMS_STREAMCFG 163 //ȡܷȡ -//ܿƲṹ -#define NET_DVR_SET_VCA_CTRLCFG 164 //ܿƲ -#define NET_DVR_GET_VCA_CTRLCFG 165 //ȡܿƲ -//NET_VCA_MASK_REGION_LIST -#define NET_DVR_SET_VCA_MASK_REGION 166 // -#define NET_DVR_GET_VCA_MASK_REGION 167 //ȡ +//智能分析仪取流配置结构 +#define NET_DVR_SET_IVMS_STREAMCFG 162 //设置智能分析仪取流参数 +#define NET_DVR_GET_IVMS_STREAMCFG 163 //获取智能分析仪取流参数 +//智能控制参数结构 +#define NET_DVR_SET_VCA_CTRLCFG 164 //设置智能控制参数 +#define NET_DVR_GET_VCA_CTRLCFG 165 //获取智能控制参数 +//屏蔽区域NET_VCA_MASK_REGION_LIST +#define NET_DVR_SET_VCA_MASK_REGION 166 //设置屏蔽区域参数 +#define NET_DVR_GET_VCA_MASK_REGION 167 //获取屏蔽区域参数 -//ATM NET_VCA_ENTER_REGION -#define NET_DVR_SET_VCA_ENTER_REGION 168 //ý -#define NET_DVR_GET_VCA_ENTER_REGION 169 //ȡ +//ATM进入区域 NET_VCA_ENTER_REGION +#define NET_DVR_SET_VCA_ENTER_REGION 168 //设置进入区域参数 +#define NET_DVR_GET_VCA_ENTER_REGION 169 //获取进入区域参数 -//궨NET_VCA_LINE_SEGMENT_LIST -#define NET_DVR_SET_VCA_LINE_SEGMENT 170 //ñ궨 -#define NET_DVR_GET_VCA_LINE_SEGMENT 171 //ȡ궨 +//标定线配置NET_VCA_LINE_SEGMENT_LIST +#define NET_DVR_SET_VCA_LINE_SEGMENT 170 //设置标定线 +#define NET_DVR_GET_VCA_LINE_SEGMENT 171 //获取标定线 -// ivmsNET_IVMS_MASK_REGION_LIST -#define NET_DVR_SET_IVMS_MASK_REGION 172 //IVMS -#define NET_DVR_GET_IVMS_MASK_REGION 173 //ȡIVMS -// ivmsNET_IVMS_ENTER_REGION -#define NET_DVR_SET_IVMS_ENTER_REGION 174 //IVMS -#define NET_DVR_GET_IVMS_ENTER_REGION 175 //ȡIVMS +// ivms屏蔽区域NET_IVMS_MASK_REGION_LIST +#define NET_DVR_SET_IVMS_MASK_REGION 172 //设置IVMS屏蔽区域参数 +#define NET_DVR_GET_IVMS_MASK_REGION 173 //获取IVMS屏蔽区域参数 +// ivms进入检测区域NET_IVMS_ENTER_REGION +#define NET_DVR_SET_IVMS_ENTER_REGION 174 //设置IVMS进入区域参数 +#define NET_DVR_GET_IVMS_ENTER_REGION 175 //获取IVMS进入区域参数 -#define NET_DVR_SET_IVMS_BEHAVIORCFG 176 //ܷΪ -#define NET_DVR_GET_IVMS_BEHAVIORCFG 177 //ȡܷΪ +#define NET_DVR_SET_IVMS_BEHAVIORCFG 176 //设置智能分析仪行为规则参数 +#define NET_DVR_GET_IVMS_BEHAVIORCFG 177 //获取智能分析仪行为规则参数 -// IVMS طż -#define NET_DVR_IVMS_SET_SEARCHCFG 178 //IVMSطż -#define NET_DVR_IVMS_GET_SEARCHCFG 179 //ȡIVMSطż +// IVMS 回放检索 +#define NET_DVR_IVMS_SET_SEARCHCFG 178 //设置IVMS回放检索参数 +#define NET_DVR_IVMS_GET_SEARCHCFG 179 //获取IVMS回放检索参数 -#define NET_DVR_SET_POSITION_TRACK 180 // óϢ -#define NET_DVR_GET_POSITION_TRACK 181 // ȡϢ +#define NET_DVR_SET_POSITION_TRACK 180 // 设置场景配置信息 +#define NET_DVR_GET_POSITION_TRACK 181 // 获取场景配置信息 -#define NET_DVR_SET_CALIBRATION 182 // ñ궨Ϣ -#define NET_DVR_GET_CALIBRATION 183 // ȡ궨Ϣ +#define NET_DVR_SET_CALIBRATION 182 // 设置标定信息 +#define NET_DVR_GET_CALIBRATION 183 // 获取标定信息 -#define NET_DVR_SET_PDC_RULECFG 184 // ͳƹ -#define NET_DVR_GET_PDC_RULECFG 185 // ȡͳƹ +#define NET_DVR_SET_PDC_RULECFG 184 // 设置人流量统计规则 +#define NET_DVR_GET_PDC_RULECFG 185 // 获取人流量统计规则 -#define NET_DVR_SET_PU_STREAMCFG 186 // ǰȡ豸Ϣ -#define NET_DVR_GET_PU_STREAMCFG 187 // ȡǰȡ豸Ϣ +#define NET_DVR_SET_PU_STREAMCFG 186 // 设置前段取流设备信息 +#define NET_DVR_GET_PU_STREAMCFG 187 // 获取前段取流设备信息 -#define NET_VCA_SET_IVMS_BEHAVIOR_CFG 192 // IVMSΪ ʱ -#define NET_VCA_GET_IVMS_BEHAVIOR_CFG 193 // ȡIVMSΪ ʱ +#define NET_VCA_SET_IVMS_BEHAVIOR_CFG 192 // 设置IVMS行为规则配置 不带时间段 +#define NET_VCA_GET_IVMS_BEHAVIOR_CFG 193 // 获取IVMS行为规则配置 不带时间段 -#define NET_VCA_SET_SIZE_FILTER 194 // ȫֳߴ -#define NET_VCA_GET_SIZE_FILTER 195 // ȡȫֳߴ +#define NET_VCA_SET_SIZE_FILTER 194 // 设置全局尺寸过滤器 +#define NET_VCA_GET_SIZE_FILTER 195 // 获取全局尺寸过滤器 -#define NET_DVR_SET_TRACK_PARAMCFG 196 // ز˵ -#define NET_DVR_GET_TRACK_PARAMCFG 197 // ȡز˵ +#define NET_DVR_SET_TRACK_PARAMCFG 196 // 设置球机本地菜单规则 +#define NET_DVR_GET_TRACK_PARAMCFG 197 // 获取球机本地菜单规则 -#define NET_DVR_SET_DOME_MOVEMENT_PARAM 198 // о -#define NET_DVR_GET_DOME_MOVEMENT_PARAM 199 // ȡо +#define NET_DVR_SET_DOME_MOVEMENT_PARAM 198 // 设置球机机芯参数 +#define NET_DVR_GET_DOME_MOVEMENT_PARAM 199 // 获取球机机芯参数 -#define NET_DVR_GET_PICCFG_EX 200 //ȡͼ(SDK_V14չ) -#define NET_DVR_SET_PICCFG_EX 201 //ͼ(SDK_V14չ) -#define NET_DVR_GET_USERCFG_EX 202 //ȡû(SDK_V15չ) -#define NET_DVR_SET_USERCFG_EX 203 //û(SDK_V15չ) -#define NET_DVR_GET_COMPRESSCFG_EX 204 //ȡѹ(SDK_V15չ2006-05-15) -#define NET_DVR_SET_COMPRESSCFG_EX 205 //ѹ(SDK_V15չ2006-05-15) +#define NET_DVR_GET_PICCFG_EX 200 //获取图象参数(SDK_V14扩展命令) +#define NET_DVR_SET_PICCFG_EX 201 //设置图象参数(SDK_V14扩展命令) +#define NET_DVR_GET_USERCFG_EX 202 //获取用户参数(SDK_V15扩展命令) +#define NET_DVR_SET_USERCFG_EX 203 //设置用户参数(SDK_V15扩展命令) +#define NET_DVR_GET_COMPRESSCFG_EX 204 //获取压缩参数(SDK_V15扩展命令2006-05-15) +#define NET_DVR_SET_COMPRESSCFG_EX 205 //设置压缩参数(SDK_V15扩展命令2006-05-15) -#define NET_DVR_GET_NETAPPCFG 222 //ȡӦò NTP/DDNS/EMAIL -#define NET_DVR_SET_NETAPPCFG 223 //Ӧò NTP/DDNS/EMAIL -#define NET_DVR_GET_NTPCFG 224 //ȡӦò NTP -#define NET_DVR_SET_NTPCFG 225 //Ӧò NTP -#define NET_DVR_GET_DDNSCFG 226 //ȡӦò DDNS -#define NET_DVR_SET_DDNSCFG 227 //Ӧò DDNS -//ӦNET_DVR_EMAILPARA -#define NET_DVR_GET_EMAILCFG 228 //ȡӦò EMAIL -#define NET_DVR_SET_EMAILCFG 229 //Ӧò EMAIL +#define NET_DVR_GET_NETAPPCFG 222 //获取网络应用参数 NTP/DDNS/EMAIL +#define NET_DVR_SET_NETAPPCFG 223 //设置网络应用参数 NTP/DDNS/EMAIL +#define NET_DVR_GET_NTPCFG 224 //获取网络应用参数 NTP +#define NET_DVR_SET_NTPCFG 225 //设置网络应用参数 NTP +#define NET_DVR_GET_DDNSCFG 226 //获取网络应用参数 DDNS +#define NET_DVR_SET_DDNSCFG 227 //设置网络应用参数 DDNS +//对应NET_DVR_EMAILPARA +#define NET_DVR_GET_EMAILCFG 228 //获取网络应用参数 EMAIL +#define NET_DVR_SET_EMAILCFG 229 //设置网络应用参数 EMAIL #define NET_DVR_GET_NFSCFG 230 /* NFS disk config */ #define NET_DVR_SET_NFSCFG 231 /* NFS disk config */ -/*עΪƣֻ֧8OSDͣV30豸汾֮ǰ -NET_DVR_GET_SHOWSTRING NET_DVR_SET_SHOWSTRING ʹã*/ -#define NET_DVR_GET_SHOWSTRING_EX 238 //ȡַչ(֧8ַ) -#define NET_DVR_SET_SHOWSTRING_EX 239 //õַչ(֧8ַ) -#define NET_DVR_GET_NETCFG_OTHER 244 //ȡ -#define NET_DVR_SET_NETCFG_OTHER 245 // +/*注:该命令为定制,只支持8条OSD的类型,不会兼容V30设备版本之前的 +NET_DVR_GET_SHOWSTRING 、NET_DVR_SET_SHOWSTRING 命令。(不建议使用)*/ +#define NET_DVR_GET_SHOWSTRING_EX 238 //获取叠加字符参数扩展(支持8条字符) +#define NET_DVR_SET_SHOWSTRING_EX 239 //设置叠加字符参数扩展(支持8条字符) +#define NET_DVR_GET_NETCFG_OTHER 244 //获取网络参数 +#define NET_DVR_SET_NETCFG_OTHER 245 //设置网络参数 -//ӦNET_DVR_EMAILCFGṹ +//对应NET_DVR_EMAILCFG结构 #define NET_DVR_GET_EMAILPARACFG 250 //Get EMAIL parameters #define NET_DVR_SET_EMAILPARACFG 251 //Setup EMAIL parameters -#define NET_DVR_GET_DDNSCFG_EX 274 //ȡչDDNS -#define NET_DVR_SET_DDNSCFG_EX 275 //չDDNS +#define NET_DVR_GET_DDNSCFG_EX 274 //获取扩展DDNS参数 +#define NET_DVR_SET_DDNSCFG_EX 275 //设置扩展DDNS参数 -#define NET_DVR_SET_PTZPOS 292 //̨PTZλ -#define NET_DVR_GET_PTZPOS 293 //̨ȡPTZλ -#define NET_DVR_GET_PTZSCOPE 294 //̨ȡPTZΧ +#define NET_DVR_SET_PTZPOS 292 //云台设置PTZ位置 +#define NET_DVR_GET_PTZPOS 293 //云台获取PTZ位置 +#define NET_DVR_GET_PTZSCOPE 294 //云台获取PTZ范围 -#define NET_DVR_GET_AP_INFO_LIST 305//ȡԴ -#define NET_DVR_SET_WIFI_CFG 306 //IP豸߲ -#define NET_DVR_GET_WIFI_CFG 307 //ȡIP豸߲ -#define NET_DVR_SET_WIFI_WORKMODE 308 //IP豸ڹģʽ -#define NET_DVR_GET_WIFI_WORKMODE 309 //ȡIP豸ڹģʽ -#define NET_DVR_GET_WIFI_STATUS 310 //ȡ豸ǰwifi״̬ -/*********************************ܽͨ¼begin***************************************/ -#define NET_DVR_GET_REFERENCE_REGION 400 //ȡο -#define NET_DVR_SET_REFERENCE_REGION 401 //òο +#define NET_DVR_GET_AP_INFO_LIST 305//获取无线网络资源参数 +#define NET_DVR_SET_WIFI_CFG 306 //设置IP布防设备无线参数 +#define NET_DVR_GET_WIFI_CFG 307 //获取IP布防设备无线参数 +#define NET_DVR_SET_WIFI_WORKMODE 308 //设置IP布防设备网口工作模式参数 +#define NET_DVR_GET_WIFI_WORKMODE 309 //获取IP布防设备网口工作模式参数 +#define NET_DVR_GET_WIFI_STATUS 310 //获取设备当前wifi连接状态 +/*********************************智能交通事件begin***************************************/ +#define NET_DVR_GET_REFERENCE_REGION 400 //获取参考区域 +#define NET_DVR_SET_REFERENCE_REGION 401 //设置参考区域 -#define NET_DVR_GET_TRAFFIC_MASK_REGION 402 //ȡͨ¼ -#define NET_DVR_SET_TRAFFIC_MASK_REGION 403 //ýͨ¼ -#define NET_DVR_SET_AID_RULECFG 404 //ýͨ¼ -#define NET_DVR_GET_AID_RULECFG 405 //ȡͨ¼ +#define NET_DVR_GET_TRAFFIC_MASK_REGION 402 //获取交通事件屏蔽区域 +#define NET_DVR_SET_TRAFFIC_MASK_REGION 403 //设置交通事件屏蔽区域 +#define NET_DVR_SET_AID_RULECFG 404 //设置交通事件规则参数 +#define NET_DVR_GET_AID_RULECFG 405 //获取交通事件规则参数 -#define NET_DVR_SET_TPS_RULECFG 406 //ýͨͳƹ -#define NET_DVR_GET_TPS_RULECFG 407 //ȡͨͳƹ +#define NET_DVR_SET_TPS_RULECFG 406 //设置交通统计规则参数 +#define NET_DVR_GET_TPS_RULECFG 407 //获取交通统计规则参数 -#define NET_DVR_SET_LANECFG 408 //ó -#define NET_DVR_GET_LANECFG 409 //ȡ -#define NET_DVR_GET_VCA_RULE_COLOR_CFG 410 //ȡܹɫ -#define NET_DVR_SET_VCA_RULE_COLOR_CFG 411 //ܹɫ -#define NET_DVR_GET_SWITCH_LAMP_CFG 412 //ȡصƼò -#define NET_DVR_SET_SWITCH_LAMP_CFG 413 //ÿصƼò +#define NET_DVR_SET_LANECFG 408 //设置车道规则 +#define NET_DVR_GET_LANECFG 409 //获取车道规则 +#define NET_DVR_GET_VCA_RULE_COLOR_CFG 410 //获取智能规则关联的颜色参数 +#define NET_DVR_SET_VCA_RULE_COLOR_CFG 411 //设置智能规则关联的颜色参数 +#define NET_DVR_GET_SWITCH_LAMP_CFG 412 //获取开关灯检测规则配置参数 +#define NET_DVR_SET_SWITCH_LAMP_CFG 413 //设置开关灯检测规则配置参数 -/*********************************ܽͨ¼end***************************************/ -#define NET_DVR_SET_FACEDETECT_RULECFG 420 // -#define NET_DVR_GET_FACEDETECT_RULECFG 421 // ȡ +/*********************************智能交通事件end***************************************/ +#define NET_DVR_SET_FACEDETECT_RULECFG 420 // 设置人脸检测规则 +#define NET_DVR_GET_FACEDETECT_RULECFG 421 // 获取人脸检测规则 -#define NET_DVR_SET_VEHICLE_RECOG_TASK 422 //ʶύ -#define NET_DVR_GET_VEHICLE_RECOG_TASK 423 //ʶȡ +#define NET_DVR_SET_VEHICLE_RECOG_TASK 422 //车辆二次识别任务提交 +#define NET_DVR_GET_VEHICLE_RECOG_TASK 423 //车辆二次识别任务获取 -#define NET_DVR_SET_TIMECORRECT 432 //УʱãֻУʱ¼Уʱ eg.NET_DVR_SET_TIMECFG ޸豸УʱãNTPУʱᱻ޸ΪֶУʱ -#define NET_DVR_GET_CONNECT_LIST 433 //ȡ豸бϢ +#define NET_DVR_SET_TIMECORRECT 432 //校时配置(只做校时操作,不记录校时配置 eg.NET_DVR_SET_TIMECFG 会修改设备的校时配置(NTP校时,会被修改为手动校时)) +#define NET_DVR_GET_CONNECT_LIST 433 //获取连接设备列表信息 -/***************************DS9000(_V30) begin *****************************/ -//(NET_DVR_NETCFG_V30ṹ) -#define NET_DVR_GET_NETCFG_V30 1000 //ȡ -#define NET_DVR_SET_NETCFG_V30 1001 // +/***************************DS9000新增命令(_V30) begin *****************************/ +//网络(NET_DVR_NETCFG_V30结构) +#define NET_DVR_GET_NETCFG_V30 1000 //获取网络参数 +#define NET_DVR_SET_NETCFG_V30 1001 //设置网络参数 -//ͼ(NET_DVR_PICCFG_V30ṹ) -#define NET_DVR_GET_PICCFG_V30 1002 //ȡͼ -#define NET_DVR_SET_PICCFG_V30 1003 //ͼ +//图象(NET_DVR_PICCFG_V30结构) +#define NET_DVR_GET_PICCFG_V30 1002 //获取图象参数 +#define NET_DVR_SET_PICCFG_V30 1003 //设置图象参数 -//¼ʱ(NET_DVR_RECORD_V30ṹ) -#define NET_DVR_GET_RECORDCFG_V30 1004 //ȡ¼ -#define NET_DVR_SET_RECORDCFG_V30 1005 //¼ +//录像时间(NET_DVR_RECORD_V30结构) +#define NET_DVR_GET_RECORDCFG_V30 1004 //获取录像参数 +#define NET_DVR_SET_RECORDCFG_V30 1005 //设置录像参数 -//û(NET_DVR_USER_V30ṹ) -#define NET_DVR_GET_USERCFG_V30 1006 //ȡû -#define NET_DVR_SET_USERCFG_V30 1007 //û +//用户(NET_DVR_USER_V30结构) +#define NET_DVR_GET_USERCFG_V30 1006 //获取用户参数 +#define NET_DVR_SET_USERCFG_V30 1007 //设置用户参数 -//¼ʱ(NET_DVR_RECORD_V40ṹ) -#define NET_DVR_GET_RECORDCFG_V40 1008 //ȡ¼(չ) -#define NET_DVR_SET_RECORDCFG_V40 1009 //¼(չ) +//录像时间(NET_DVR_RECORD_V40结构) +#define NET_DVR_GET_RECORDCFG_V40 1008 //获取录像参数(扩展) +#define NET_DVR_SET_RECORDCFG_V40 1009 //设置录像参数(扩展) -//9000DDNS(NET_DVR_DDNSPARA_V30ṹ) -#define NET_DVR_GET_DDNSCFG_V30 1010 //ȡDDNS(9000չ) -#define NET_DVR_SET_DDNSCFG_V30 1011 //DDNS(9000չ) +//9000DDNS参数配置(NET_DVR_DDNSPARA_V30结构) +#define NET_DVR_GET_DDNSCFG_V30 1010 //获取DDNS(9000扩展) +#define NET_DVR_SET_DDNSCFG_V30 1011 //设置DDNS(9000扩展) -//EMAIL(NET_DVR_EMAILCFG_V30ṹ) -#define NET_DVR_GET_EMAILCFG_V30 1012 //ȡEMAIL -#define NET_DVR_SET_EMAILCFG_V30 1013 //EMAIL +//EMAIL功能(NET_DVR_EMAILCFG_V30结构) +#define NET_DVR_GET_EMAILCFG_V30 1012 //获取EMAIL参数 +#define NET_DVR_SET_EMAILCFG_V30 1013 //设置EMAIL参数 -#define NET_DVR_GET_NETCFG_V50 1015 //ȡ(V50) -#define NET_DVR_SET_NETCFG_V50 1016 //(V50) +#define NET_DVR_GET_NETCFG_V50 1015 //获取网络参数配置(V50) +#define NET_DVR_SET_NETCFG_V50 1016 //设置网络参数配置(V50) -#define NET_GET_CRUISEPOINT_V40 1018 //ȡѲ· +#define NET_GET_CRUISEPOINT_V40 1018 //获取巡航路径配置 -//Ѳ (NET_DVR_CRUISE_PARAṹ) +//巡航参数 (NET_DVR_CRUISE_PARA结构) #define NET_DVR_GET_CRUISE 1020 #define NET_DVR_SET_CRUISE 1021 -//ṹ (NET_DVR_ALARMINCFG_V30ṹ) +//报警输入结构参数 (NET_DVR_ALARMINCFG_V30结构) #define NET_DVR_GET_ALARMINCFG_V30 1024 #define NET_DVR_SET_ALARMINCFG_V30 1025 -//ṹ (NET_DVR_ALARMOUTCFG_V30ṹ) +//报警输出结构参数 (NET_DVR_ALARMOUTCFG_V30结构) #define NET_DVR_GET_ALARMOUTCFG_V30 1026 #define NET_DVR_SET_ALARMOUTCFG_V30 1027 -//Ƶṹ (NET_DVR_VIDEOOUT_V30ṹ) +//视频输出结构参数 (NET_DVR_VIDEOOUT_V30结构) #define NET_DVR_GET_VIDEOOUTCFG_V30 1028 #define NET_DVR_SET_VIDEOOUTCFG_V30 1029 -/*֧8OSDͣ豸汾ΪV30ʱͨ豸汾ƥ䣬 -ͬʱ֮ǰNET_DVR_GET_SHOWSTRING NET_DVR_SET_SHOWSTRING ʹã*/ -//ַṹ (NET_DVR_SHOWSTRING_V30ṹ) +/*该命令支持8条OSD的类型(即设备版本为V30以上时),并会通过设备版本的匹配, +同时兼容之前的NET_DVR_GET_SHOWSTRING 、NET_DVR_SET_SHOWSTRING 命令。(建议使用)*/ +//叠加字符结构参数 (NET_DVR_SHOWSTRING_V30结构) #define NET_DVR_GET_SHOWSTRING_V30 1030 #define NET_DVR_SET_SHOWSTRING_V30 1031 -//쳣ṹ (NET_DVR_EXCEPTION_V30ṹ) +//异常结构参数 (NET_DVR_EXCEPTION_V30结构) #define NET_DVR_GET_EXCEPTIONCFG_V30 1034 #define NET_DVR_SET_EXCEPTIONCFG_V30 1035 -//232ṹ (NET_DVR_RS232CFG_V30ṹ) +//串口232结构参数 (NET_DVR_RS232CFG_V30结构) #define NET_DVR_GET_RS232CFG_V30 1036 #define NET_DVR_SET_RS232CFG_V30 1037 -//Ӳ̽ṹ (NET_DVR_NET_DISKCFGṹ) -#define NET_DVR_GET_NET_DISKCFG 1038 //Ӳ̽ȡ -#define NET_DVR_SET_NET_DISKCFG 1039 //Ӳ̽ -//ѹ (NET_DVR_COMPRESSIONCFG_V30ṹ) +//网络硬盘接入结构参数 (NET_DVR_NET_DISKCFG结构) +#define NET_DVR_GET_NET_DISKCFG 1038 //网络硬盘接入获取 +#define NET_DVR_SET_NET_DISKCFG 1039 //网络硬盘接入设置 +//压缩参数 (NET_DVR_COMPRESSIONCFG_V30结构) #define NET_DVR_GET_COMPRESSCFG_V30 1040 #define NET_DVR_SET_COMPRESSCFG_V30 1041 -//ȡ485 (NET_DVR_DECODERCFG_V30ṹ) -#define NET_DVR_GET_DECODERCFG_V30 1042 //ȡ -#define NET_DVR_SET_DECODERCFG_V30 1043 //ý +//获取485解码器参数 (NET_DVR_DECODERCFG_V30结构) +#define NET_DVR_GET_DECODERCFG_V30 1042 //获取解码器参数 +#define NET_DVR_SET_DECODERCFG_V30 1043 //设置解码器参数 -//ȡԤ (NET_DVR_PREVIEWCFG_V30ṹ) -#define NET_DVR_GET_PREVIEWCFG_V30 1044 //ȡԤ -#define NET_DVR_SET_PREVIEWCFG_V30 1045 //Ԥ +//获取预览参数 (NET_DVR_PREVIEWCFG_V30结构) +#define NET_DVR_GET_PREVIEWCFG_V30 1044 //获取预览参数 +#define NET_DVR_SET_PREVIEWCFG_V30 1045 //设置预览参数 -//Ԥ (NET_DVR_PREVIEWCFG_AUX_V30ṹ) -#define NET_DVR_GET_PREVIEWCFG_AUX_V30 1046 //ȡԤ -#define NET_DVR_SET_PREVIEWCFG_AUX_V30 1047 //øԤ +//辅助预览参数 (NET_DVR_PREVIEWCFG_AUX_V30结构) +#define NET_DVR_GET_PREVIEWCFG_AUX_V30 1046 //获取辅助预览参数 +#define NET_DVR_SET_PREVIEWCFG_AUX_V30 1047 //设置辅助预览参数 -//IPò NET_DVR_IPPARACFGṹ -#define NET_DVR_GET_IPPARACFG 1048 //ȡIPϢ -#define NET_DVR_SET_IPPARACFG 1049 //IPϢ +//IP接入配置参数 (NET_DVR_IPPARACFG结构) +#define NET_DVR_GET_IPPARACFG 1048 //获取IP接入配置信息 +#define NET_DVR_SET_IPPARACFG 1049 //设置IP接入配置信息 -//IPò NET_DVR_IPALARMINCFGṹ -#define NET_DVR_GET_IPALARMINCFG 1050 //ȡIPϢ -#define NET_DVR_SET_IPALARMINCFG 1051 //IPϢ +//IP报警输入接入配置参数 (NET_DVR_IPALARMINCFG结构) +#define NET_DVR_GET_IPALARMINCFG 1050 //获取IP报警输入接入配置信息 +#define NET_DVR_SET_IPALARMINCFG 1051 //设置IP报警输入接入配置信息 -//IPò NET_DVR_IPALARMOUTCFGṹ -#define NET_DVR_GET_IPALARMOUTCFG 1052 //ȡIPϢ -#define NET_DVR_SET_IPALARMOUTCFG 1053 //IPϢ +//IP报警输出接入配置参数 (NET_DVR_IPALARMOUTCFG结构) +#define NET_DVR_GET_IPALARMOUTCFG 1052 //获取IP报警输出接入配置信息 +#define NET_DVR_SET_IPALARMOUTCFG 1053 //设置IP报警输出接入配置信息 -//Ӳ̹IJȡ (NET_DVR_HDCFGṹ) -#define NET_DVR_GET_HDCFG 1054 //ȡӲ̹ò -#define NET_DVR_SET_HDCFG 1055 //Ӳ̹ò -//IJȡ (NET_DVR_HDGROUP_CFGṹ) -#define NET_DVR_GET_HDGROUP_CFG 1056 //ȡò -#define NET_DVR_SET_HDGROUP_CFG 1057 //ò +//硬盘管理的参数获取 (NET_DVR_HDCFG结构) +#define NET_DVR_GET_HDCFG 1054 //获取硬盘管理配置参数 +#define NET_DVR_SET_HDCFG 1055 //设置硬盘管理配置参数 +//盘组管理的参数获取 (NET_DVR_HDGROUP_CFG结构) +#define NET_DVR_GET_HDGROUP_CFG 1056 //获取盘组管理配置参数 +#define NET_DVR_SET_HDGROUP_CFG 1057 //设置盘组管理配置参数 -//豸(NET_DVR_COMPRESSION_AUDIOṹ) -#define NET_DVR_GET_COMPRESSCFG_AUD 1058 //ȡ豸Խ -#define NET_DVR_SET_COMPRESSCFG_AUD 1059 //豸Խ +//设备编码类型配置(NET_DVR_COMPRESSION_AUDIO结构) +#define NET_DVR_GET_COMPRESSCFG_AUD 1058 //获取设备语音对讲编码参数 +#define NET_DVR_SET_COMPRESSCFG_AUD 1059 //设置设备语音对讲编码参数 -//IPò NET_DVR_IPPARACFG_V31ṹ -#define NET_DVR_GET_IPPARACFG_V31 1060 //ȡIPϢ -#define NET_DVR_SET_IPPARACFG_V31 1061 //IPϢ +//IP接入配置参数 (NET_DVR_IPPARACFG_V31结构) +#define NET_DVR_GET_IPPARACFG_V31 1060 //获取IP接入配置信息 +#define NET_DVR_SET_IPPARACFG_V31 1061 //设置IP接入配置信息 -// ͨԴ (NET_DVR_IPPARACFG_V40ṹ) -#define NET_DVR_GET_IPPARACFG_V40 1062 // ȡIP -#define NET_DVR_SET_IPPARACFG_V40 1063 // IP +// 通道资源配置 (NET_DVR_IPPARACFG_V40结构) +#define NET_DVR_GET_IPPARACFG_V40 1062 // 获取IP接入配置 +#define NET_DVR_SET_IPPARACFG_V40 1063 // 设置IP接入配置 -#define NET_DVR_GET_CCDPARAMCFG 1067 //IPCȡCCD -#define NET_DVR_SET_CCDPARAMCFG 1068 //IPCCCD +#define NET_DVR_GET_CCDPARAMCFG 1067 //IPC获取CCD参数配置 +#define NET_DVR_SET_CCDPARAMCFG 1068 //IPC设置CCD参数配置 -#define NET_DVR_GET_IOINCFG 1070 //ȡץĻIO -#define NET_DVR_SET_IOINCFG 1071 //ץĻIO +#define NET_DVR_GET_IOINCFG 1070 //获取抓拍机IO输入参数 +#define NET_DVR_SET_IOINCFG 1071 //设置抓拍机IO输入参数 -#define NET_DVR_GET_IOOUTCFG 1072 //ȡץĻIO -#define NET_DVR_SET_IOOUTCFG 1073 //ץĻIO - -#define NET_DVR_GET_FLASHCFG 1074 //ȡIO -#define NET_DVR_SET_FLASHCFG 1075 //IO - -#define NET_DVR_GET_LIGHTSNAPCFG 1076 //ȡץĻ̵Ʋ -#define NET_DVR_SET_LIGHTSNAPCFG 1077 //ץĻ̵Ʋ - -#define NET_DVR_GET_MEASURESPEEDCFG 1078 //ȡץĻٲ -#define NET_DVR_SET_MEASURESPEEDCFG 1079 //ץĻٲ - -#define NET_DVR_GET_IMAGEOVERLAYCFG 1080//ȡץĻͼϢ -#define NET_DVR_SET_IMAGEOVERLAYCFG 1081//ץĻͼϢ - -#define NET_DVR_GET_SNAPCFG 1082//ȡIOץĹ -#define NET_DVR_SET_SNAPCFG 1083//õIOץĹ - -#define NET_DVR_GET_VTPPARAM 1084//ȡȦ -#define NET_DVR_SET_VTPPARAM 1085//Ȧ - -#define NET_DVR_GET_SNAPENABLECFG 1086//ȡץĻʹܲ -#define NET_DVR_SET_SNAPENABLECFG 1087//ץĻʹܲ - -#define NET_DVR_GET_POSTEPOLICECFG 1088//ȡڵ羯 -#define NET_DVR_SET_POSTEPOLICECFG 1089//ÿڵ羯 - -#define NET_DVR_GET_JPEGCFG_V30 1090//ȡץͼJPEG() -#define NET_DVR_SET_JPEGCFG_V30 1091//ץͼJPEG() - -#define NET_DVR_GET_SPRCFG 1092//ȡʶ -#define NET_DVR_SET_SPRCFG 1093//óʶ -#define NET_DVR_GET_PLCCFG 1094//ȡȲ -#define NET_DVR_SET_PLCCFG 1095//óȲ - -#define NET_DVR_GET_DEVICESTATECFG 1096//ȡ豸ǰ״̬ -#define NET_DVR_SET_CALIBRATE_TIME 1097//չʱУʱ -#define NET_DVR_GET_CALIBRATE_TIME 1098//ȡչʱУʱ - -#define NET_DVR_GET_DEVICECFG_V40 1100//ȡչ豸 -#define NET_DVR_SET_DEVICECFG_V40 1101//չ豸 - -#define NET_DVR_GET_ZEROCHANCFG 1102 //ȡͨѹ -#define NET_DVR_SET_ZEROCHANCFG 1103 //ͨѹ - -#define NET_DVR_GET_ZERO_PREVIEWCFG_V30 1104 // ȡͨԤ -#define NET_DVR_SET_ZERO_PREVIEWCFG_V30 1105 // ͨԤ - -#define NET_DVR_SET_ZERO_ZOOM 1106 //ͨ -#define NET_DVR_GET_ZERO_ZOOM 1107 //ȡͨ - -#define NET_DVR_NATASSOCIATECFG_GET 1110 //ȡNATϢ -#define NET_DVR_NATASSOCIATECFG_SET 1111 //NATϢ - -#define NET_DVR_GET_SNMPCFG 1112 //ȡSNMP -#define NET_DVR_SET_SNMPCFG 1113 //SNMP - -#define NET_DVR_GET_SNMPCFG_V30 1114 //ȡSNMPv30 -#define NET_DVR_SET_SNMPCFG_V30 1115 //SNMPv30 - -#define NET_DVR_VIDEOPLATFORMALARMCFG_GET 1130 //ȡƵۺƽ̨ -#define NET_DVR_VIDEOPLATFORMALARMCFG_SET 1131 //Ƶۺƽ̨ - -#define NET_DVR_GET_RAID_ADAPTER_INFO 1134 // ȡϢ -#define NET_DVR_SET_RAID_ADAPTER_INFO 1135 // Ϣ - -#define NET_DVR_MATRIX_BIGSCREENCFG_GET 1140//ȡƴӲ -#define NET_DVR_MATRIX_BIGSCREENCFG_SET 1141//ôƴӲ - -#define NET_DVR_GET_MB_PLATFORMPARA 1145 //ȡƽ̨¼ -#define NET_DVR_SET_MB_PLATFORMPARA 1146 //ƽ̨¼ -#define NET_DVR_GET_MB_DEVSTATUS 1147 //ȡƶ豸״̬ - -#define NET_DVR_GET_DECODER_JOINT_CHAN 1151//ȡͨ -#define NET_DVR_SET_DECODER_JOINT_CHAN 1152//ýͨ - -// -#define NET_DVR_GET_NETCFG_MULTI 1161 //ȡ -#define NET_DVR_SET_NETCFG_MULTI 1162 //ö -#define NET_DVR_GET_NETCFG_MULTI_V50 1163 //ȡ() -#define NET_DVR_SET_NETCFG_MULTI_V50 1164 //ö() - -#define NET_DVR_GET_CMSPARA 1170//ȡƽ̨ -#define NET_DVR_SET_CMSPARA 1171//ƽ̨ -#define NET_DVR_GET_DIALSTATUS 1172//ȡ״̬ -#define NET_DVR_GET_SMSRELATIVEPARA 1173//ȡز -#define NET_DVR_SET_SMSRELATIVEPARA 1174//öز -#define NET_DVR_GET_PINSTATUS 1175//ȡPin״̬ -#define NET_DVR_SET_PINCMD 1176//PIN -#define NET_DVR_SET_SENSOR_CFG 1180//ģ -#define NET_DVR_GET_SENSOR_CFG 1181//ȡģ -#define NET_DVR_SET_ALARMIN_PARAM 1182//ñ -#define NET_DVR_GET_ALARMIN_PARAM 1183//ȡ -#define NET_DVR_SET_ALARMOUT_PARAM 1184//ñ -#define NET_DVR_GET_ALARMOUT_PARAM 1185//ȡ -#define NET_DVR_SET_SIREN_PARAM 1186//þŲ -#define NET_DVR_GET_SIREN_PARAM 1187//ȡŲ -#define NET_DVR_SET_ALARM_RS485CFG 1188//ñ485 -#define NET_DVR_GET_ALARM_RS485CFG 1189//ȡ485 -#define NET_DVR_GET_ALARMHOST_MAIN_STATUS 1190//ȡҪ״̬ -#define NET_DVR_GET_ALARMHOST_OTHER_STATUS 1191//ȡ״̬ -#define NET_DVR_SET_ALARMHOST_ENABLECFG 1192//ȡʹ״̬ -#define NET_DVR_GET_ALARMHOST_ENABLECFG 1193//ñʹ״̬ -#define NET_DVR_SET_ALARM_CAMCFG 1194//Ƶۺƽ̨CAM -#define NET_DVR_GET_ALARM_CAMCFG 1195//Ƶۺƽ̨CAM -#define NET_DVR_GET_GATEWAY_CFG 1196//ȡŽ -#define NET_DVR_SET_GATEWAY_CFG 1197//Ž - -#define NET_DVR_GET_ALARMDIALMODECFG 1198//ȡŲ -#define NET_DVR_SET_ALARMDIALMODECFG 1199//ñŲ -#define NET_DVR_SET_ALARMIN_PARAM_V50 1200 // ÷V50 -#define NET_DVR_GET_ALARMIN_PARAM_V50 1201 // ȡV50 -#define NET_DVR_SET_WINCFG 1202//ڲ -#define NET_DVR_GET_ALARMHOSTDIALSETUPMODE 1204//ȡ÷ʽ -#define NET_DVR_SET_ALARMHOSTDIALSETUPMODE 1205//ñ÷ʽ - -//Ƶ(Ƶ V1.3) -#define NET_DVR_SET_SUBSYSTEM_ALARM 1210 //ϵͳ/ -#define NET_DVR_GET_SUBSYSTEM_ALARM 1211 //ȡϵͳ/ -#define NET_DVR_GET_ALLOWLIST_ALARM 1215 //ȡ -#define NET_DVR_SET_ALLOWLIST_ALARM 1216 // -#define NET_DVR_GET_ALARMHOST_MODULE_LIST 1222 //ȡģ -#define NET_DVR_SET_PRIOR_ALARM 1223 //ϵͳ/ -#define NET_DVR_GET_PRIOR_ALARM 1224 //ȡϵͳ/ -#define NET_DVR_SET_TAMPER_ALARMIN_PARAM 1225 // ÷ -#define NET_DVR_GET_TAMPER_ALARMIN_PARAM 1226 // ȡ - -#define NET_DVR_GET_HOLIDAY_PARAM_CFG 1240// ȡڼղ -#define NET_DVR_SET_HOLIDAY_PARAM_CFG 1241// ýڼղ - -#define NET_DVR_GET_MOTION_HOLIDAY_HANDLE 1242// ȡƶձʽ -#define NET_DVR_SET_MOTION_HOLIDAY_HANDLE 1243// ȡƶձʽ - -#define NET_DVR_GET_VILOST_HOLIDAY_HANDLE 1244// ȡƵźŶʧձʽ -#define NET_DVR_SET_VILOST_HOLIDAY_HANDLE 1245// ȡƵźŶʧձʽ - -#define NET_DVR_GET_HIDE_HOLIDAY_HANDLE 1246// ȡڸǼձʽ -#define NET_DVR_SET_HIDE_HOLIDAY_HANDLE 1247// ڸǼձʽ - -#define NET_DVR_GET_ALARMIN_HOLIDAY_HANDLE 1248// ȡձʽ -#define NET_DVR_SET_ALARMIN_HOLIDAY_HANDLE 1249// ñձʽ -#define NET_DVR_GET_ALARMOUT_HOLIDAY_HANDLE 1250// ȡձʽ -#define NET_DVR_SET_ALARMOUT_HOLIDAY_HANDLE 1251// ñձʽ -#define NET_DVR_GET_HOLIDAY_RECORD 1252// ȡ¼ -#define NET_DVR_SET_HOLIDAY_RECORD 1253// ü¼ -#define NET_DVR_GET_NETWORK_BONDING 1254// ȡBONDING -#define NET_DVR_SET_NETWORK_BONDING 1255// BONDING -#define NET_DVR_GET_LINK_STATUS 1256// ȡͨIP״̬ -#define NET_DVR_GET_DISK_QUOTA_CFG 1278// ȡϢ -#define NET_DVR_SET_DISK_QUOTA_CFG 1279// ôϢ -#define NET_DVR_GET_JPEG_CAPTURE_CFG 1280// ȡDVRץͼ -#define NET_DVR_SET_JPEG_CAPTURE_CFG 1281// DVRץͼ -#define NET_DVR_GET_SCHED_CAPTURECFG 1282// ȡץͼƻ -#define NET_DVR_SET_SCHED_CAPTURECFG 1283// ץͼƻ -#define NET_DVR_GET_VGA_PREVIEWCFG 1284// ȡVGAԤ -#define NET_DVR_SET_VGA_PREVIEWCFG 1285// VGAԤ -#define NET_DVR_GET_VIDEO_INPUT_EFFECT 1286// ȡͨƵͼ -#define NET_DVR_SET_VIDEO_INPUT_EFFECT 1287// ͨƵͼ - -#define NET_DVR_GET_STORAGE_SERVER_SWITCH 1290//ȡ洢״̬ -#define NET_DVR_SET_STORAGE_SERVER_SWITCH 1291//ô洢״̬ - -#define NET_DVR_GET_DISK_QUOTA_CFG_V60 1292//ȡϢV60 -#define NET_DVR_SET_DISK_QUOTA_CFG_V60 1293//ôϢV60 - -#define NET_DVR_GET_OPTICAL_CHANNEL 1300//ȡϵͳͨϢ -#define NET_DVR_SET_OPTICAL_CHANNEL 1301//ùϵͳͨϢ -#define NET_DVR_GET_FIBER_CASCADE 1302//ȡ˼ģʽ -#define NET_DVR_SET_FIBER_CASCADE 1303//ù˼ģʽ -#define NET_DVR_GET_SPARTAN_STATUS 1304//ȡ״̬ -#define NET_DVR_SET_SPARTAN_STATUS 1305//ó״̬ -#define NET_DVR_GET_ETHERNET_CHANNEL 1306//ȡ˿ھۺϲ -#define NET_DVR_SET_ETHERMET_CHANNEL 1307//ö˿ھۺϲ -#define NET_DVR_OPTICAL_REBOOT 1320//˻ -#define NET_DVR_SET_AUDIOCHAN_CFG 1321//Ƶл -#define NET_DVR_GET_AUDIOCHAN_CFG 1322//ȡƵл -//SDI1.0 -#define NET_DVR_SET_MATRIX_BASE_CFG 1332 //þ -#define NET_DVR_GET_MATRIX_BASE_CFG 1333 //ȡ -#define NET_DVR_SWITCH_MATRIX_IO 1334 //л -#define NET_DVR_GET_MATRIX_IO_RELATION 1335 //ȡϵ - -#define NET_DVR_V6PSUBSYSTEMARAM_GET 1501//ȡV6ϵͳ -#define NET_DVR_V6PSUBSYSTEMARAM_SET 1502//V6ϵͳ -#define NET_DVR_GET_ALLWINCFG 1503 //ڲȡ - -#define NET_DVR_BIGSCREENASSOCIATECFG_GET 1511 //ȡ -#define NET_DVR_BIGSCREENASSOCIATECFG_SET 1512 //ô - -//1200 -#define NET_DVR_GETSCREENINFO 1601 //ȡϢ -#define NET_DVR_SETSCREENINFO 1602 //ôϢ -#define NET_DVR_GET_SCREEN_WINCFG 1603//ڲȡ -#define NET_DVR_LAYOUTLIST_GET 1605//ȡб -#define NET_DVR_SET_LAYOUTCFG 1606 // -#define NET_DVR_LAYOUTCTRL 1607//ֿƣ1-open2-close -#define NET_DVR_INPUTLIST_GET 1608 //ȡźԴб -#define NET_DVR_SET_INPUTSTREAMCFG 1609 //źԴ -#define NET_DVR_OUTPUT_SET 1610 // -#define NET_DVR_OUTPUT_GET 1611 //ȡ -#define NET_DVR_SET_OSDCFG 1612 //OSD -#define NET_DVR_GET_OSDCFG 1613 //OSDȡ -#define NET_DVR_BIGSCREEN_GETSERIAL 1614//ȡϢ -#define NET_DVR_GET_PLANLIST 1615//ȡԤб -#define NET_DVR_SET_PLAN 1616//Ԥ -#define NET_DVR_CTRL_PLAN 1617//Ԥ -#define NET_DVR_GET_DEVICE_RUN_STATUS 1618//ȡ豸״̬ -#define NET_DVR_GET_EXTERNAL_MATRIX_CFG 1619//ȡϢ -#define NET_DVR_SET_EXTERNAL_MATRIX_CFG 1620//þϢ -#define NET_DVR_GET_OUTPUT_SCREEN_RELATION 1621//ȡĻİ󶨹ϵ -#define NET_DVR_SET_OUTPUT_SCREEN_RELATION 1622//Ļİ󶨹ϵ -#define NET_DVR_GET_VCS_USER_CFG 1623//ȡûϢ -#define NET_DVR_SET_VCS_USER_CFG 1624//ûϢ -#define NET_DVR_CONTROL_SCREEN 1625//Ļ -#define NET_DVR_GET_EXTERNAL_MATRIX_CFG_V50 1626 //ȡϢ -#define NET_DVR_SET_EXTERNAL_MATRIX_CFG_V50 1627 //þϢ - -#define NET_DVR_GET_DEV_BASEINFO 1650//ȡ豸Ϣ -#define NET_DVR_SET_DEV_BASEINFO 1651//õ豸Ϣ -#define NET_DVR_GET_DEV_NETINFO 1652//ȡ豸Ϣ -#define NET_DVR_SET_DEV_NETINFO 1653//豸Ϣ -#define NET_DVR_GET_SIGNAL_SOURCE_INFO 1654//ȡźԴϢ -#define NET_DVR_SET_SIGNAL_SOURCE_INFO 1655//źԴϢ -#define NET_DVR_ADJUST_PIC_V40 1656//ͼ΢ -#define NET_DVR_RESTORE_V40 1657//ָĬϲ -#define NET_DVR_SET_NET_SIGNAL 1658//źԴ -#define NET_DVR_REBOOT_V40 1659// -#define NET_DVR_CONTROL_PICTURE_V41 1660//ͼƬV41 - -#define NET_DVR_GET_AUTO_REBOOT_CFG 1710//ȡԶ -#define NET_DVR_SET_AUTO_REBOOT_CFG 1711//Զ -#define NET_DVR_GET_TRUNK_USE_STATE 1713//ȡָʹ״̬ -#define NET_DVR_SET_PTZ_CTRL_INFO 1714//PTZƲ -#define NET_DVR_GET_PTZ_CTRL_INFO 1715//ȡPTZƲ -#define NET_DVR_GET_PTZ_STATUS 1716//ȡPTZ״̬ -#define NET_DVR_GET_DISP_ROUTE_LIST 1717//ȡʾ·б - -#define NET_DVR_GET_DEC_RESOURCE_LIST 1720//ȡýԴб -#define NET_DVR_SET_DEC_RESOURCE_LIST 1721//ԤԴ -#define NET_DVR_GET_DEC_YUV 1722//ȡͨYUV -#define NET_DVR_SET_DEC_YUV 1723//ýͨYUV -#define NET_DVR_GET_DEC_RESOUCE 1724//Ƶۺƽ̨Դ -#define NET_DVR_FREE_DEC_RESOURCE 1725//ͷŽԴ - -#define NET_DVR_SET_VIDEOWALLDISPLAYMODE 1730//õǽƴģʽ -#define NET_DVR_GET_VIDEOWALLDISPLAYMODE 1731//ȡǽƴģʽ -#define NET_DVR_GET_VIDEOWALLDISPLAYNO 1732//ȡ豸ʾ -#define NET_DVR_SET_VIDEOWALLDISPLAYPOSITION 1733//ʾλò -#define NET_DVR_GET_VIDEOWALLDISPLAYPOSITION 1734//ȡʾλò -#define NET_DVR_GET_VIDEOWALLWINDOWPOSITION 1735//ȡǽڲ -#define NET_DVR_SET_VIDEOWALLWINDOWPOSITION 1736//õǽڲ -#define NET_DVR_VIDEOWALLWINDOW_CLOSEALL 1737//ǽرд -#define NET_DVR_SET_VIRTUALLED 1738//LED -#define NET_DVR_GET_VIRTUALLED 1739//LEDȡ -#define NET_DVR_GET_IMAGE_CUT_MODE 1740//ȡͼиģʽ -#define NET_DVR_SET_IMAGE_CUT_MODE 1741//ͼиģʽ -#define NET_DVR_GET_USING_SERIALPORT 1742//ȡǰʹô -#define NET_DVR_SET_USING_SERIALPORT 1743//õǰʹô -#define NET_DVR_SCENE_CONTROL 1744// -#define NET_DVR_GET_CURRENT_SCENE 1745//ȡǰ -#define NET_DVR_GET_VW_SCENE_PARAM 1746//ȡǽģʽ -#define NET_DVR_SET_VW_SCENE_PARAM 1747//õǽģʽ -#define NET_DVR_DISPLAY_CHANNO_CONTROL 1748//ǽʾſ -#define NET_DVR_GET_WIN_DEC_INFO 1749//ȡڽϢ -#define NET_DVR_RESET_VIDEOWALLDISPLAYPOSITION 1750 //ǽӿڰ -#define NET_DVR_SET_VW_AUDIO_CFG 1752 //Ƶл -#define NET_DVR_GET_VW_AUDIO_CFG 1753 //ȡƵл -#define NET_DVR_GET_GBT28181_DECCHANINFO_CFG 1754 //ȡGBT28181Э豸ĽͨϢ -#define NET_DVR_SET_GBT28181_DECCHANINFO_CFG 1755 //GBT28181Э豸ĽͨϢ -#define NET_DVR_SET_MAINBOARD_SERIAL 1756 //ذ崮ڲ -#define NET_DVR_GET_MAINBOARD_SERIAL 1757 //ȡذ崮ڲ -#define NET_DVR_GET_SUBBOARD_INFO 1758 //ȡӰϢ -#define NET_DVR_GET_SUBBOARD_EXCEPTION 1759 //ȡ쳣Ӱ쳣Ϣ - -#define NET_DVR_GET_CAMERACHAN_SERIALCFG 1760 //ȡCameraͨ󶨴 -#define NET_DVR_SET_CAMERACHAN_SERIALCFG 1761 //Cameraͨ󶨴 -#define NET_DVR_GET_MATRIX_STATUS 1762 //ȡƵۺƽ̨״̬ -#define NET_SET_MULTIFUNCTION_SERIALCFG 1763 //ö๦ܴ -#define NET_GET_MULTIFUNCTION_SERIALCFG 1764 //ȡ๦ܴ -#define NET_DVR_PTZ_3D_SPEED 1765 // 3άٶȵ̨ - -#define NET_DVR_GET_SIGNAL_JOINT 1766 //ȡźԴ -#define NET_DVR_SET_SIGNAL_JOINT 1767 //źԴ -#define NET_DVR_SIGNAL_CUT 1768 //źԴü -#define NET_DVR_DYNAMIC_DECODE_BATCH 1769 //̬ -#define NET_DVR_DECSWITCH_SET_BATCH 1770 //ýͨ -#define NET_DVR_DECSWITCH_GET_BATCH 1771 //ȡͨ -#define NET_DVR_GET_ALL_SIGNAL_JOINT 1772 //ȡźԴ -#define NET_DVR_GET_PLAYING_PLAN 1773 //ȡִԤ -#define NET_DVR_WALL_RELATION_GET 1774 //ȡ豸ǽǽĹ -#define NET_DVR_WALL_RELATION_SET 1775 //豸ǽǽĹ -#define NET_DVR_SET_INPUTSTREAMCFG_V40 1776 //źԴ -#define NET_DVR_PTZCFG_INPUTSTREAM_GET 1777 //ȡԴ̨ -#define NET_DVR_PTZCFG_INPUTSTREAM_SET 1778 //Դ̨ -#define NET_DVR_SIGNAL_CUTPARAM_GET 1779 //ȡźԴü - -#define NET_DVR_GET_SUBSYSTEM_NETCFG 1780 //ȡϵͳ -#define NET_DVR_SET_SUBSYSTEM_NETCFG 1781 //ϵͳ -#define NET_DVR_DEL_SIGNAL_JOINT 1782 //ɾƴźԴ - -#define NET_DVR_GET_PICTURE_INFO 1783 //ȡͼƬϢ -#define NET_DVR_SET_PICTURE_INFO 1784 //ͼƬϢ -#define NET_DVR_GET_VIDEO_INFO 1785 //ȡƵϢ -#define NET_DVR_SET_VIDEO_INFO 1786 //ƵϢ -#define NET_DVR_SET_PLAYLIST 1787 //òб -#define NET_DVR_GET_PLAYLIST 1788 //ȡб -#define NET_DVR_GET_ALL_PLAYLIST 1789 //ȡвб -#define NET_DVR_PLAYITEM_CONTROL 1790 // -#define NET_DVR_SET_PLAYPLAN_TEMPLATE 1791 //òżƻģ -#define NET_DVR_GET_PLAYPLAN_TEMPLATE 1792 //ȡżƻ -#define NET_DVR_GET_ALL_PLAYPLAN_TEMPLATE 1793 //ȡвżƻ -#define NET_DVR_SET_WINDOW_PLAYPLAN 1794 //ôڲżƻ -#define NET_DVR_GET_WINDOW_PLAYPLAN 1795 //ȡڲżƻ -#define NET_DVR_TOPLAY_ITEM 1796 //ָ -#define NET_DVR_DEVICE_PLAY_CONTROL 1797 //豸ſ -#define NET_DVR_GET_PLAY_INFO 1798 //ȡǰϢ -#define NET_DVR_GET_ALL_PICTURE_INFO 1799 //ȡͼƬϢ -#define NET_DVR_GET_ALL_VIDEO_INFO 1800 //ȡƵϢ -#define NET_DVR_DELETE_VIDEO_FILE 1801 //ɾƵ - - -#define NET_DVR_GET_ALARMHOSTSUBSYSTEM_CFG 2001//ȡϵͳ -#define NET_DVR_SET_ALARMHOSTSUBSYSTEM_CFG 2002//ϵͳ -#define NET_DVR_GETEXTENDALARMININFO 2003//ȡϢ -#define NET_DVR_MODIFYALARMINNO 2004//޸ķϢ -#define NET_DVR_GET_ALARMHOST_WIRELESS_NETWORK_CFG 2005//ȡ -#define NET_DVR_SET_ALARMHOST_WIRELESS_NETWORK_CFG 2006// -#define NET_DVR_GET_ALARMHOST_NETCFG 2007//ȡ -#define NET_DVR_SET_ALARMHOST_NETCFG 2008// -#define NET_DVR_GET_LED_SCREEN_CFG 2009// ȡLEDĻ -#define NET_DVR_SET_LED_SCREEN_CFG 2010// LEDĻ -#define NET_DVR_GET_LED_CONTENT_CFG 2011// ȡLED -#define NET_DVR_SET_LED_CONTENT_CFG 2012// LED -#define NET_DVR_TURNON_LED 2013// LED -#define NET_DVR_TURNOFF_LED 2014// رLED -#define NET_DVR_GET_LED_TIMER_SWITCH 2015// ȡLEDʱز -#define NET_DVR_SET_LED_TIMER_SWITCH 2016// LEDʱز -#define NET_DVR_SET_LED_BRIGHTNESS 2017// ֶLED -#define NET_DVR_GET_LED_TIMER_BRIGHTNESS 2018//÷ʱLED -#define NET_DVR_SET_LED_TIMER_BRIGHTNESS 2019//ȡʱLED -#define NET_DVR_LED_CHECKTIME 2020//LEDУʱ -#define NET_DVR_GET_ALARMHOST_AUDIO_ASSOCIATE_ALARM 2021//ȡƵ¼ -#define NET_DVR_SET_ALARMHOST_AUDIO_ASSOCIATE_ALARM 2022//Ƶ¼ -#define NET_DVR_GET_LED_STATUS 2023//ȡLED״̬ -#define NET_DVR_CLOSE_SUBSYSTEM_FAULT_ALARM 2027//رϵͳʾ -#define NET_DVR_SET_SUBSYSTEM_BYPASS 2028//ϵͳ· -#define NET_DVR_CANCEL_SUBSYSTEM_BYPASS 2029//ϵͳ·ָ - -#define NET_DVR_GET_ALARMHOST_SUBSYSTEM_CFG_EX 2030//ȡϵͳչ -#define NET_DVR_SET_ALARMHOST_SUBSYSTEM_CFG_EX 2031//ϵͳչ -#define NET_DVR_GET_ALARMHOST_PRINTER_CFG 2032//ȡӡӡʹ -#define NET_DVR_SET_ALARMHOST_PRINTER_CFG 2033//ôӡӡʹ -#define NET_DVR_GET_ALARMHOST_ZONE_LIST_IN_SUBSYSTEM 2034//ȡָϵͳڵз -#define NET_DVR_GET_ALARMHOST_TRIGGER_LIST 2035//ȡд -#define NET_DVR_ARM_ALARMHOST_SUBSYSTEM 2036//Ͷϵͳ -#define NET_DVR_GET_ALARMHOST_EVENT_TRIG_ALARMOUT_CFG 2037// ȡ¼ -#define NET_DVR_SET_ALARMHOST_EVENT_TRIG_ALARMOUT_CFG 2038// ¼ -#define NET_DVR_GET_ALARMHOST_FAULT_CFG 2039// ȡϴ -#define NET_DVR_SET_ALARMHOST_FAULT_CFG 2040// ùϴ -#define NET_DVR_SEARCH_ARMHOST_EXTERNAL_MODULE 2041//Զ -#define NET_DVR_REGISTER_ALARMHOST_EXTERNAL_MODULE 2042//Զע -#define NET_DVR_CLOSE_ALARMHOST_OVERALL_FAULT_ALARM 2043//رȫֹʾ - -#define NET_DVR_GET_SAFETYCABIN_WORK_MODE 2044 //ȡչģʽ -#define NET_DVR_SET_SAFETYCABIN_WORK_MODE 2045 //÷չģʽ -#define NET_DVR_GET_SAFETYCABIN_PERSON_SIGNAL_CFG 2046 //ȡź̽ -#define NET_DVR_SET_SAFETYCABIN_PERSON_SIGNAL_CFG 2047 //÷ź̽ - -#define NET_DVR_GET_ALARMHOST_MODULE_CFG 2048//ȡģϢ -//#define NET_DVR_SET_ALARMHOST_MODULE_CFG 2049//ģϢ(Ԥ) - -#define NET_DVR_GET_ALARMHOST_EXTERNAL_DEVICE_STATE 2050//ȡ485豸״̬ -#define NET_DVR_SET_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE 2051//豸ֵ -#define NET_DVR_GET_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE 2052//ȡ豸ֵ -#define NET_DVR_GET_ALARMHOST_SENSOR_JOINT_CFG 2053// ȡģ -#define NET_DVR_SET_ALARMHOST_SENSOR_JOINT_CFG 2054// ģ -#define NET_DVR_SET_ALARMHOST_RS485_SLOT_CFG 2055// ñ485λ -#define NET_DVR_GET_ALARMHOST_RS485_SLOT_CFG 2056// ȡ485λ - -#define NET_DVR_GET_ALL_VARIABLE_INFO 2057 // ȡбԪϢ -#define NET_DVR_GET_ALARM_POINT_CFG 2058 // ȡϢ -#define NET_DVR_SET_ALARM_POINT_CFG 2059 // õϢ -#define NET_DVR_GET_HISTORY_VALUE 2060 // ȡʷ -#define NET_DVR_GET_ALARMHOST_ALARM_MODE 2061 // ȡϴʽ -#define NET_DVR_SET_ALARMHOST_ALARM_MODE 2062 // ϴʽ -#define NET_DVR_GET_ALARMHOST_SENSOR_VALUE 2063 // ȡģʵʱ - -#define NET_DVR_GET_ALARMHOST_REPORT_CENTER_V40 2064 // ȡϴʽ -#define NET_DVR_SET_ALARMHOST_REPORT_CENTER_V40 2065 // ϴʽ -#define NET_DVR_GET_OUTPUT_SCHEDULE_RULECFG 2068 // ȡʱ -#define NET_DVR_SET_OUTPUT_SCHEDULE_RULECFG 2069 // ʱ +#define NET_DVR_GET_IOOUTCFG 1072 //获取抓拍机IO输出参数 +#define NET_DVR_SET_IOOUTCFG 1073 //设置抓拍机IO输出参数 + +#define NET_DVR_GET_FLASHCFG 1074 //获取IO闪光灯输出参数 +#define NET_DVR_SET_FLASHCFG 1075 //设置IO闪光灯输出参数 + +#define NET_DVR_GET_LIGHTSNAPCFG 1076 //获取抓拍机红绿灯参数 +#define NET_DVR_SET_LIGHTSNAPCFG 1077 //设置抓拍机红绿灯参数 + +#define NET_DVR_GET_MEASURESPEEDCFG 1078 //获取抓拍机测速参数 +#define NET_DVR_SET_MEASURESPEEDCFG 1079 //设置抓拍机测速参数 + +#define NET_DVR_GET_IMAGEOVERLAYCFG 1080//获取抓拍机图像叠加信息参数 +#define NET_DVR_SET_IMAGEOVERLAYCFG 1081//设置抓拍机图像叠加信息参数 + +#define NET_DVR_GET_SNAPCFG 1082//获取单IO触发抓拍功能配置 +#define NET_DVR_SET_SNAPCFG 1083//设置单IO触发抓拍功能配置 + +#define NET_DVR_GET_VTPPARAM 1084//获取虚拟线圈参数 +#define NET_DVR_SET_VTPPARAM 1085//设置虚拟线圈参数 + +#define NET_DVR_GET_SNAPENABLECFG 1086//获取抓拍机使能参数 +#define NET_DVR_SET_SNAPENABLECFG 1087//设置抓拍机使能参数 + +#define NET_DVR_GET_POSTEPOLICECFG 1088//获取卡口电警参数 +#define NET_DVR_SET_POSTEPOLICECFG 1089//设置卡口电警参数 + +#define NET_DVR_GET_JPEGCFG_V30 1090//获取抓图的JPEG参数(基线) +#define NET_DVR_SET_JPEGCFG_V30 1091//设置抓图的JPEG参数(基线) + +#define NET_DVR_GET_SPRCFG 1092//获取车牌识别参数 +#define NET_DVR_SET_SPRCFG 1093//设置车牌识别参数 +#define NET_DVR_GET_PLCCFG 1094//获取车牌亮度补偿参数 +#define NET_DVR_SET_PLCCFG 1095//设置车牌亮度补偿参数 + +#define NET_DVR_GET_DEVICESTATECFG 1096//获取设备当前状态参数 +#define NET_DVR_SET_CALIBRATE_TIME 1097//设置扩展时间校时 +#define NET_DVR_GET_CALIBRATE_TIME 1098//获取扩展时间校时 + +#define NET_DVR_GET_DEVICECFG_V40 1100//获取扩展设备参数 +#define NET_DVR_SET_DEVICECFG_V40 1101//设置扩展设备参数 + +#define NET_DVR_GET_ZEROCHANCFG 1102 //获取零通道压缩参数 +#define NET_DVR_SET_ZEROCHANCFG 1103 //设置零通道压缩参数 + +#define NET_DVR_GET_ZERO_PREVIEWCFG_V30 1104 // 获取零通道预览参数配置 +#define NET_DVR_SET_ZERO_PREVIEWCFG_V30 1105 // 设置零通道预览参数配置 + +#define NET_DVR_SET_ZERO_ZOOM 1106 //设置零通道的缩放配置 +#define NET_DVR_GET_ZERO_ZOOM 1107 //获取零通道的缩放配置 + +#define NET_DVR_NATASSOCIATECFG_GET 1110 //获取NAT功能相关信息 +#define NET_DVR_NATASSOCIATECFG_SET 1111 //设置NAT功能相关信息 + +#define NET_DVR_GET_SNMPCFG 1112 //获取SNMP参数 +#define NET_DVR_SET_SNMPCFG 1113 //设置SNMP参数 + +#define NET_DVR_GET_SNMPCFG_V30 1114 //获取SNMPv30参数 +#define NET_DVR_SET_SNMPCFG_V30 1115 //设置SNMPv30参数 + +#define NET_DVR_VIDEOPLATFORMALARMCFG_GET 1130 //获取视频综合平台报警配置 +#define NET_DVR_VIDEOPLATFORMALARMCFG_SET 1131 //设置视频综合平台报警配置 + +#define NET_DVR_GET_RAID_ADAPTER_INFO 1134 // 获取适配器信息 +#define NET_DVR_SET_RAID_ADAPTER_INFO 1135 // 设置适配器信息 + +#define NET_DVR_MATRIX_BIGSCREENCFG_GET 1140//获取大屏拼接参数 +#define NET_DVR_MATRIX_BIGSCREENCFG_SET 1141//设置大屏拼接参数 + +#define NET_DVR_GET_MB_PLATFORMPARA 1145 //获取平台登录参数 +#define NET_DVR_SET_MB_PLATFORMPARA 1146 //设置平台登录参数 +#define NET_DVR_GET_MB_DEVSTATUS 1147 //获取移动设备状态 + +#define NET_DVR_GET_DECODER_JOINT_CHAN 1151//获取解码关联通道 +#define NET_DVR_SET_DECODER_JOINT_CHAN 1152//设置解码关联通道 + +//多网卡配置 +#define NET_DVR_GET_NETCFG_MULTI 1161 //获取多网卡配置 +#define NET_DVR_SET_NETCFG_MULTI 1162 //设置多网卡配置 +#define NET_DVR_GET_NETCFG_MULTI_V50 1163 //获取多网卡配置(分组) +#define NET_DVR_SET_NETCFG_MULTI_V50 1164 //设置多网卡配置(分组) + +#define NET_DVR_GET_CMSPARA 1170//获取平台参数 +#define NET_DVR_SET_CMSPARA 1171//设置平台参数 +#define NET_DVR_GET_DIALSTATUS 1172//获取拨号状态参数 +#define NET_DVR_GET_SMSRELATIVEPARA 1173//获取短信相关参数 +#define NET_DVR_SET_SMSRELATIVEPARA 1174//设置短信相关参数 +#define NET_DVR_GET_PINSTATUS 1175//获取Pin状态 +#define NET_DVR_SET_PINCMD 1176//设置PIN命令 +#define NET_DVR_SET_SENSOR_CFG 1180//设置模拟量参数 +#define NET_DVR_GET_SENSOR_CFG 1181//获取模拟量参数 +#define NET_DVR_SET_ALARMIN_PARAM 1182//设置报警输入参数 +#define NET_DVR_GET_ALARMIN_PARAM 1183//获取报警输入参数 +#define NET_DVR_SET_ALARMOUT_PARAM 1184//设置报警输出参数 +#define NET_DVR_GET_ALARMOUT_PARAM 1185//获取报警输出参数 +#define NET_DVR_SET_SIREN_PARAM 1186//设置警号参数 +#define NET_DVR_GET_SIREN_PARAM 1187//获取警号参数 +#define NET_DVR_SET_ALARM_RS485CFG 1188//设置报警主机485参数 +#define NET_DVR_GET_ALARM_RS485CFG 1189//获取报警主机485参数 +#define NET_DVR_GET_ALARMHOST_MAIN_STATUS 1190//获取报警主机主要状态 +#define NET_DVR_GET_ALARMHOST_OTHER_STATUS 1191//获取报警主机其他状态 +#define NET_DVR_SET_ALARMHOST_ENABLECFG 1192//获取报警主机使能状态 +#define NET_DVR_GET_ALARMHOST_ENABLECFG 1193//设置报警主机使能状态 +#define NET_DVR_SET_ALARM_CAMCFG 1194//设置视频综合平台报警触发CAM操作配置 +#define NET_DVR_GET_ALARM_CAMCFG 1195//设置视频综合平台报警触发CAM操作配置 +#define NET_DVR_GET_GATEWAY_CFG 1196//获取门禁参数配置 +#define NET_DVR_SET_GATEWAY_CFG 1197//设置门禁参数配置 + +#define NET_DVR_GET_ALARMDIALMODECFG 1198//获取报警主机拨号参数 +#define NET_DVR_SET_ALARMDIALMODECFG 1199//设置报警主机拨号参数 +#define NET_DVR_SET_ALARMIN_PARAM_V50 1200 // 设置防区参数V50 +#define NET_DVR_GET_ALARMIN_PARAM_V50 1201 // 获取防区参数V50 +#define NET_DVR_SET_WINCFG 1202//窗口参数设置 +#define NET_DVR_GET_ALARMHOSTDIALSETUPMODE 1204//获取报警主机拨号启用方式 +#define NET_DVR_SET_ALARMHOSTDIALSETUPMODE 1205//设置报警主机拨号启用方式 + +//视频报警主机海外版命令(视频报警主机 V1.3) +#define NET_DVR_SET_SUBSYSTEM_ALARM 1210 //设置子系统布/撤防 +#define NET_DVR_GET_SUBSYSTEM_ALARM 1211 //获取子系统布/撤防 +#define NET_DVR_GET_ALLOWLIST_ALARM 1215 //获取允许名单参数 +#define NET_DVR_SET_ALLOWLIST_ALARM 1216 //设置允许名单参数 +#define NET_DVR_GET_ALARMHOST_MODULE_LIST 1222 //获取所有模块 +#define NET_DVR_SET_PRIOR_ALARM 1223 //设置子系统布/撤防 +#define NET_DVR_GET_PRIOR_ALARM 1224 //获取子系统布/撤防 +#define NET_DVR_SET_TAMPER_ALARMIN_PARAM 1225 // 设置防区防拆参数 +#define NET_DVR_GET_TAMPER_ALARMIN_PARAM 1226 // 获取防区防拆参数 + +#define NET_DVR_GET_HOLIDAY_PARAM_CFG 1240// 获取节假日参数 +#define NET_DVR_SET_HOLIDAY_PARAM_CFG 1241// 设置节假日参数 + +#define NET_DVR_GET_MOTION_HOLIDAY_HANDLE 1242// 获取移动侦测假日报警处理方式 +#define NET_DVR_SET_MOTION_HOLIDAY_HANDLE 1243// 获取移动侦测假日报警处理方式 + +#define NET_DVR_GET_VILOST_HOLIDAY_HANDLE 1244// 获取视频信号丢失假日报警处理方式 +#define NET_DVR_SET_VILOST_HOLIDAY_HANDLE 1245// 获取视频信号丢失假日报警处理方式 + +#define NET_DVR_GET_HIDE_HOLIDAY_HANDLE 1246// 获取遮盖假日报警处理方式 +#define NET_DVR_SET_HIDE_HOLIDAY_HANDLE 1247// 设置遮盖假日报警处理方式 + +#define NET_DVR_GET_ALARMIN_HOLIDAY_HANDLE 1248// 获取报警输入假日报警处理方式 +#define NET_DVR_SET_ALARMIN_HOLIDAY_HANDLE 1249// 设置报警输入假日报警处理方式 +#define NET_DVR_GET_ALARMOUT_HOLIDAY_HANDLE 1250// 获取报警输出假日报警处理方式 +#define NET_DVR_SET_ALARMOUT_HOLIDAY_HANDLE 1251// 设置报警输出假日报警处理方式 +#define NET_DVR_GET_HOLIDAY_RECORD 1252// 获取假日录像参数 +#define NET_DVR_SET_HOLIDAY_RECORD 1253// 设置假日录像参数 +#define NET_DVR_GET_NETWORK_BONDING 1254// 获取BONDING网络参数 +#define NET_DVR_SET_NETWORK_BONDING 1255// 设置BONDING网络参数 +#define NET_DVR_GET_LINK_STATUS 1256// 获取通道IP工作状态 +#define NET_DVR_GET_DISK_QUOTA_CFG 1278// 获取磁盘配额信息 +#define NET_DVR_SET_DISK_QUOTA_CFG 1279// 设置磁盘配额信息 +#define NET_DVR_GET_JPEG_CAPTURE_CFG 1280// 获取DVR抓图配置 +#define NET_DVR_SET_JPEG_CAPTURE_CFG 1281// 设置DVR抓图配置 +#define NET_DVR_GET_SCHED_CAPTURECFG 1282// 获取抓图计划 +#define NET_DVR_SET_SCHED_CAPTURECFG 1283// 设置抓图计划 +#define NET_DVR_GET_VGA_PREVIEWCFG 1284// 获取VGA预览配置 +#define NET_DVR_SET_VGA_PREVIEWCFG 1285// 设置VGA预览配置 +#define NET_DVR_GET_VIDEO_INPUT_EFFECT 1286// 获取通道视频输入图像参数 +#define NET_DVR_SET_VIDEO_INPUT_EFFECT 1287// 设置通道视频输入图像参数 + +#define NET_DVR_GET_STORAGE_SERVER_SWITCH 1290//获取存储服务器开关状态 +#define NET_DVR_SET_STORAGE_SERVER_SWITCH 1291//设置存储服务器开关状态 + +#define NET_DVR_GET_DISK_QUOTA_CFG_V60 1292//获取磁盘配额信息V60 +#define NET_DVR_SET_DISK_QUOTA_CFG_V60 1293//设置磁盘配额信息V60 + +#define NET_DVR_GET_OPTICAL_CHANNEL 1300//获取光端子系统通道关联信息 +#define NET_DVR_SET_OPTICAL_CHANNEL 1301//设置光端子系统通道关联信息 +#define NET_DVR_GET_FIBER_CASCADE 1302//获取光纤级联模式 +#define NET_DVR_SET_FIBER_CASCADE 1303//设置光纤级联模式 +#define NET_DVR_GET_SPARTAN_STATUS 1304//获取畅显状态 +#define NET_DVR_SET_SPARTAN_STATUS 1305//设置畅显状态 +#define NET_DVR_GET_ETHERNET_CHANNEL 1306//获取端口聚合参数 +#define NET_DVR_SET_ETHERMET_CHANNEL 1307//设置端口聚合参数 +#define NET_DVR_OPTICAL_REBOOT 1320//光端机重启 +#define NET_DVR_SET_AUDIOCHAN_CFG 1321//设置音频切换参数 +#define NET_DVR_GET_AUDIOCHAN_CFG 1322//获取音频切换参数 +//SDI矩阵1.0 +#define NET_DVR_SET_MATRIX_BASE_CFG 1332 //设置矩阵基本参数 +#define NET_DVR_GET_MATRIX_BASE_CFG 1333 //获取矩阵基本参数 +#define NET_DVR_SWITCH_MATRIX_IO 1334 //矩阵输入输出切换 +#define NET_DVR_GET_MATRIX_IO_RELATION 1335 //获取矩阵输入输入关联关系 + +#define NET_DVR_V6PSUBSYSTEMARAM_GET 1501//获取V6子系统配置 +#define NET_DVR_V6PSUBSYSTEMARAM_SET 1502//设置V6子系统配置 +#define NET_DVR_GET_ALLWINCFG 1503 //窗口参数获取 + +#define NET_DVR_BIGSCREENASSOCIATECFG_GET 1511 //获取大屏关联配置 +#define NET_DVR_BIGSCREENASSOCIATECFG_SET 1512 //设置大屏关联配置 + +//1200起 +#define NET_DVR_GETSCREENINFO 1601 //获取大屏信息配置 +#define NET_DVR_SETSCREENINFO 1602 //设置大屏信息配置 +#define NET_DVR_GET_SCREEN_WINCFG 1603//单个窗口参数获取 +#define NET_DVR_LAYOUTLIST_GET 1605//获取布局列表 +#define NET_DVR_SET_LAYOUTCFG 1606 //布局设置 +#define NET_DVR_LAYOUTCTRL 1607//布局控制,1-open,2-close +#define NET_DVR_INPUTLIST_GET 1608 //获取输入信号源列表 +#define NET_DVR_SET_INPUTSTREAMCFG 1609 //输入信号源设置 +#define NET_DVR_OUTPUT_SET 1610 //输出参数设置 +#define NET_DVR_OUTPUT_GET 1611 //输出参数获取 +#define NET_DVR_SET_OSDCFG 1612 //OSD参数设置 +#define NET_DVR_GET_OSDCFG 1613 //OSD参数获取 +#define NET_DVR_BIGSCREEN_GETSERIAL 1614//获取大屏串口信息 +#define NET_DVR_GET_PLANLIST 1615//获取预案列表 +#define NET_DVR_SET_PLAN 1616//设置预案 +#define NET_DVR_CTRL_PLAN 1617//控制预案 +#define NET_DVR_GET_DEVICE_RUN_STATUS 1618//获取设备运行状态 +#define NET_DVR_GET_EXTERNAL_MATRIX_CFG 1619//获取矩阵信息 +#define NET_DVR_SET_EXTERNAL_MATRIX_CFG 1620//设置矩阵信息 +#define NET_DVR_GET_OUTPUT_SCREEN_RELATION 1621//获取输出和屏幕的绑定关系 +#define NET_DVR_SET_OUTPUT_SCREEN_RELATION 1622//设置输出和屏幕的绑定关系 +#define NET_DVR_GET_VCS_USER_CFG 1623//获取用户信息配置 +#define NET_DVR_SET_VCS_USER_CFG 1624//设置用户信息配置 +#define NET_DVR_CONTROL_SCREEN 1625//屏幕控制 +#define NET_DVR_GET_EXTERNAL_MATRIX_CFG_V50 1626 //获取矩阵信息 +#define NET_DVR_SET_EXTERNAL_MATRIX_CFG_V50 1627 //设置矩阵信息 + +#define NET_DVR_GET_DEV_BASEINFO 1650//获取单个设备信息 +#define NET_DVR_SET_DEV_BASEINFO 1651//设置单个设备信息 +#define NET_DVR_GET_DEV_NETINFO 1652//获取设备的网络信息 +#define NET_DVR_SET_DEV_NETINFO 1653//设置设备的网络信息 +#define NET_DVR_GET_SIGNAL_SOURCE_INFO 1654//获取信号源信息 +#define NET_DVR_SET_SIGNAL_SOURCE_INFO 1655//设置信号源信息 +#define NET_DVR_ADJUST_PIC_V40 1656//图像微调 +#define NET_DVR_RESTORE_V40 1657//恢复默认参数 +#define NET_DVR_SET_NET_SIGNAL 1658//设置网络信号源 +#define NET_DVR_REBOOT_V40 1659//重启 +#define NET_DVR_CONTROL_PICTURE_V41 1660//图片控制V41 + +#define NET_DVR_GET_AUTO_REBOOT_CFG 1710//获取自动重启参数 +#define NET_DVR_SET_AUTO_REBOOT_CFG 1711//设置自动重启参数 +#define NET_DVR_GET_TRUNK_USE_STATE 1713//获取指定干线使用状态 +#define NET_DVR_SET_PTZ_CTRL_INFO 1714//设置PTZ控制参数 +#define NET_DVR_GET_PTZ_CTRL_INFO 1715//获取PTZ控制参数 +#define NET_DVR_GET_PTZ_STATUS 1716//获取PTZ状态 +#define NET_DVR_GET_DISP_ROUTE_LIST 1717//获取显示路径列表 + +#define NET_DVR_GET_DEC_RESOURCE_LIST 1720//获取可用解码资源列表 +#define NET_DVR_SET_DEC_RESOURCE_LIST 1721//预分配解码资源 +#define NET_DVR_GET_DEC_YUV 1722//获取解码通道关联YUV输出参数 +#define NET_DVR_SET_DEC_YUV 1723//设置解码通道关联YUV输出参数 +#define NET_DVR_GET_DEC_RESOUCE 1724//向视频综合平台申请解码资源 +#define NET_DVR_FREE_DEC_RESOURCE 1725//释放解码资源 + +#define NET_DVR_SET_VIDEOWALLDISPLAYMODE 1730//设置电视墙拼接模式 +#define NET_DVR_GET_VIDEOWALLDISPLAYMODE 1731//获取电视墙拼接模式 +#define NET_DVR_GET_VIDEOWALLDISPLAYNO 1732//获取设备显示输出号 +#define NET_DVR_SET_VIDEOWALLDISPLAYPOSITION 1733//设置显示输出位置参数 +#define NET_DVR_GET_VIDEOWALLDISPLAYPOSITION 1734//获取显示输出位置参数 +#define NET_DVR_GET_VIDEOWALLWINDOWPOSITION 1735//获取电视墙窗口参数 +#define NET_DVR_SET_VIDEOWALLWINDOWPOSITION 1736//设置电视墙窗口参数 +#define NET_DVR_VIDEOWALLWINDOW_CLOSEALL 1737//电视墙关闭所有窗口 +#define NET_DVR_SET_VIRTUALLED 1738//虚拟LED设置 +#define NET_DVR_GET_VIRTUALLED 1739//虚拟LED获取 +#define NET_DVR_GET_IMAGE_CUT_MODE 1740//获取图像切割模式 +#define NET_DVR_SET_IMAGE_CUT_MODE 1741//设置图像切割模式 +#define NET_DVR_GET_USING_SERIALPORT 1742//获取当前使用串口 +#define NET_DVR_SET_USING_SERIALPORT 1743//设置当前使用串口 +#define NET_DVR_SCENE_CONTROL 1744//场景控制 +#define NET_DVR_GET_CURRENT_SCENE 1745//获取当前场景号 +#define NET_DVR_GET_VW_SCENE_PARAM 1746//获取电视墙场景模式参数 +#define NET_DVR_SET_VW_SCENE_PARAM 1747//设置电视墙场景模式参数 +#define NET_DVR_DISPLAY_CHANNO_CONTROL 1748//电视墙显示编号控制 +#define NET_DVR_GET_WIN_DEC_INFO 1749//获取窗口解码信息(批量) +#define NET_DVR_RESET_VIDEOWALLDISPLAYPOSITION 1750 //解除电视墙输出接口绑定 +#define NET_DVR_SET_VW_AUDIO_CFG 1752 //设置音频切换参数 +#define NET_DVR_GET_VW_AUDIO_CFG 1753 //获取音频切换参数 +#define NET_DVR_GET_GBT28181_DECCHANINFO_CFG 1754 //获取GBT28181协议接入设备的解码通道信息 +#define NET_DVR_SET_GBT28181_DECCHANINFO_CFG 1755 //设置GBT28181协议接入设备的解码通道信息 +#define NET_DVR_SET_MAINBOARD_SERIAL 1756 //设置主控板串口参数 +#define NET_DVR_GET_MAINBOARD_SERIAL 1757 //获取主控板串口参数 +#define NET_DVR_GET_SUBBOARD_INFO 1758 //获取子板信息 +#define NET_DVR_GET_SUBBOARD_EXCEPTION 1759 //获取异常子板异常信息 + +#define NET_DVR_GET_CAMERACHAN_SERIALCFG 1760 //获取Camera通道绑定串口配置 +#define NET_DVR_SET_CAMERACHAN_SERIALCFG 1761 //设置Camera通道绑定串口配置 +#define NET_DVR_GET_MATRIX_STATUS 1762 //获取视频综合平台状态 +#define NET_SET_MULTIFUNCTION_SERIALCFG 1763 //设置多功能串口配置 +#define NET_GET_MULTIFUNCTION_SERIALCFG 1764 //获取多功能串口配置 +#define NET_DVR_PTZ_3D_SPEED 1765 // 3维带速度的云台控制 + +#define NET_DVR_GET_SIGNAL_JOINT 1766 //获取信号源绑定配置 +#define NET_DVR_SET_SIGNAL_JOINT 1767 //设置信号源绑定配置 +#define NET_DVR_SIGNAL_CUT 1768 //信号源裁剪 +#define NET_DVR_DYNAMIC_DECODE_BATCH 1769 //批量动态解码 +#define NET_DVR_DECSWITCH_SET_BATCH 1770 //批量设置解码通道开关 +#define NET_DVR_DECSWITCH_GET_BATCH 1771 //批量获取解码通道开关 +#define NET_DVR_GET_ALL_SIGNAL_JOINT 1772 //获取所有信号源绑定配置 +#define NET_DVR_GET_PLAYING_PLAN 1773 //获取正在执行预案 +#define NET_DVR_WALL_RELATION_GET 1774 //获取设备墙与物理墙的关联 +#define NET_DVR_WALL_RELATION_SET 1775 //设置设备墙与物理墙的关联 +#define NET_DVR_SET_INPUTSTREAMCFG_V40 1776 //输入信号源设置 +#define NET_DVR_PTZCFG_INPUTSTREAM_GET 1777 //获取输入源反向云台控制配置 +#define NET_DVR_PTZCFG_INPUTSTREAM_SET 1778 //设置输入源反向云台控制配置 +#define NET_DVR_SIGNAL_CUTPARAM_GET 1779 //获取信号源裁剪参数 + +#define NET_DVR_GET_SUBSYSTEM_NETCFG 1780 //获取子系统网卡参数 +#define NET_DVR_SET_SUBSYSTEM_NETCFG 1781 //设置子系统网卡参数 +#define NET_DVR_DEL_SIGNAL_JOINT 1782 //删除拼接信号源 + +#define NET_DVR_GET_PICTURE_INFO 1783 //获取图片信息 +#define NET_DVR_SET_PICTURE_INFO 1784 //设置图片信息 +#define NET_DVR_GET_VIDEO_INFO 1785 //获取视频信息 +#define NET_DVR_SET_VIDEO_INFO 1786 //设置视频信息 +#define NET_DVR_SET_PLAYLIST 1787 //设置播放列表 +#define NET_DVR_GET_PLAYLIST 1788 //获取播放列表 +#define NET_DVR_GET_ALL_PLAYLIST 1789 //获取所有播放列表 +#define NET_DVR_PLAYITEM_CONTROL 1790 //播放项操作 +#define NET_DVR_SET_PLAYPLAN_TEMPLATE 1791 //设置播放计划模板 +#define NET_DVR_GET_PLAYPLAN_TEMPLATE 1792 //获取播放计划 +#define NET_DVR_GET_ALL_PLAYPLAN_TEMPLATE 1793 //获取所有播放计划 +#define NET_DVR_SET_WINDOW_PLAYPLAN 1794 //设置窗口播放计划 +#define NET_DVR_GET_WINDOW_PLAYPLAN 1795 //获取窗口播放计划 +#define NET_DVR_TOPLAY_ITEM 1796 //指定播放 +#define NET_DVR_DEVICE_PLAY_CONTROL 1797 //设备播放控制 +#define NET_DVR_GET_PLAY_INFO 1798 //获取当前播放信息 +#define NET_DVR_GET_ALL_PICTURE_INFO 1799 //获取图片信息 +#define NET_DVR_GET_ALL_VIDEO_INFO 1800 //获取视频信息 +#define NET_DVR_DELETE_VIDEO_FILE 1801 //删除视频 + + +#define NET_DVR_GET_ALARMHOSTSUBSYSTEM_CFG 2001//报警主机获取子系统参数 +#define NET_DVR_SET_ALARMHOSTSUBSYSTEM_CFG 2002//报警主机设置子系统参数 +#define NET_DVR_GETEXTENDALARMININFO 2003//获取防区编号信息 +#define NET_DVR_MODIFYALARMINNO 2004//修改防区编号信息 +#define NET_DVR_GET_ALARMHOST_WIRELESS_NETWORK_CFG 2005//获取无线网络参数配置 +#define NET_DVR_SET_ALARMHOST_WIRELESS_NETWORK_CFG 2006//设置无线网络参数配置 +#define NET_DVR_GET_ALARMHOST_NETCFG 2007//获取网络参数配置 +#define NET_DVR_SET_ALARMHOST_NETCFG 2008//设置网络参数配置 +#define NET_DVR_GET_LED_SCREEN_CFG 2009// 获取LED屏幕参数 +#define NET_DVR_SET_LED_SCREEN_CFG 2010// 设置LED屏幕参数 +#define NET_DVR_GET_LED_CONTENT_CFG 2011// 获取LED屏显内容 +#define NET_DVR_SET_LED_CONTENT_CFG 2012// 设置LED屏显内容 +#define NET_DVR_TURNON_LED 2013// 打开LED屏 +#define NET_DVR_TURNOFF_LED 2014// 关闭LED屏 +#define NET_DVR_GET_LED_TIMER_SWITCH 2015// 获取LED屏定时开关参数 +#define NET_DVR_SET_LED_TIMER_SWITCH 2016// 设置LED屏定时开关参数 +#define NET_DVR_SET_LED_BRIGHTNESS 2017// 手动设置LED屏亮度 +#define NET_DVR_GET_LED_TIMER_BRIGHTNESS 2018//设置分时LED屏亮度 +#define NET_DVR_SET_LED_TIMER_BRIGHTNESS 2019//获取分时LED屏亮度 +#define NET_DVR_LED_CHECKTIME 2020//LED校时 +#define NET_DVR_GET_ALARMHOST_AUDIO_ASSOCIATE_ALARM 2021//获取音频报警事件 +#define NET_DVR_SET_ALARMHOST_AUDIO_ASSOCIATE_ALARM 2022//设置音频报警事件 +#define NET_DVR_GET_LED_STATUS 2023//获取LED屏状态 +#define NET_DVR_CLOSE_SUBSYSTEM_FAULT_ALARM 2027//关闭子系统故障提示音 +#define NET_DVR_SET_SUBSYSTEM_BYPASS 2028//子系统旁路 +#define NET_DVR_CANCEL_SUBSYSTEM_BYPASS 2029//子系统旁路恢复 + +#define NET_DVR_GET_ALARMHOST_SUBSYSTEM_CFG_EX 2030//获取子系统扩展参数 +#define NET_DVR_SET_ALARMHOST_SUBSYSTEM_CFG_EX 2031//设置子系统扩展参数 +#define NET_DVR_GET_ALARMHOST_PRINTER_CFG 2032//获取打印机打印使能 +#define NET_DVR_SET_ALARMHOST_PRINTER_CFG 2033//设置打印机打印使能 +#define NET_DVR_GET_ALARMHOST_ZONE_LIST_IN_SUBSYSTEM 2034//获取指定子系统内的所有防区 +#define NET_DVR_GET_ALARMHOST_TRIGGER_LIST 2035//获取所有触发器 +#define NET_DVR_ARM_ALARMHOST_SUBSYSTEM 2036//按布防类型对子系统布防 +#define NET_DVR_GET_ALARMHOST_EVENT_TRIG_ALARMOUT_CFG 2037// 获取事件触发报警输出配置 +#define NET_DVR_SET_ALARMHOST_EVENT_TRIG_ALARMOUT_CFG 2038// 设置事件触发报警输出配置 +#define NET_DVR_GET_ALARMHOST_FAULT_CFG 2039// 获取故障处理配置 +#define NET_DVR_SET_ALARMHOST_FAULT_CFG 2040// 设置故障处理配置 +#define NET_DVR_SEARCH_ARMHOST_EXTERNAL_MODULE 2041//自动搜索 +#define NET_DVR_REGISTER_ALARMHOST_EXTERNAL_MODULE 2042//自动注册 +#define NET_DVR_CLOSE_ALARMHOST_OVERALL_FAULT_ALARM 2043//关闭全局故障提示音 + +#define NET_DVR_GET_SAFETYCABIN_WORK_MODE 2044 //获取防护舱工作模式参数 +#define NET_DVR_SET_SAFETYCABIN_WORK_MODE 2045 //设置防护舱工作模式参数 +#define NET_DVR_GET_SAFETYCABIN_PERSON_SIGNAL_CFG 2046 //获取防护舱人信号探测参数 +#define NET_DVR_SET_SAFETYCABIN_PERSON_SIGNAL_CFG 2047 //设置防护舱人信号探测参数 + +#define NET_DVR_GET_ALARMHOST_MODULE_CFG 2048//获取模块信息 +//#define NET_DVR_SET_ALARMHOST_MODULE_CFG 2049//设置模块信息(预留) + +#define NET_DVR_GET_ALARMHOST_EXTERNAL_DEVICE_STATE 2050//获取485外接设备状态 +#define NET_DVR_SET_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE 2051//设置外接设备报警限值 +#define NET_DVR_GET_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE 2052//获取外接设备报警限值 +#define NET_DVR_GET_ALARMHOST_SENSOR_JOINT_CFG 2053// 获取模拟量关联配置 +#define NET_DVR_SET_ALARMHOST_SENSOR_JOINT_CFG 2054// 设置模拟量关联配置 +#define NET_DVR_SET_ALARMHOST_RS485_SLOT_CFG 2055// 设置报警主机485槽位参数 +#define NET_DVR_GET_ALARMHOST_RS485_SLOT_CFG 2056// 获取报警主机485槽位参数 + +#define NET_DVR_GET_ALL_VARIABLE_INFO 2057 // 获取所有变量元素信息 +#define NET_DVR_GET_ALARM_POINT_CFG 2058 // 获取点号信息 +#define NET_DVR_SET_ALARM_POINT_CFG 2059 // 设置点号信息 +#define NET_DVR_GET_HISTORY_VALUE 2060 // 获取历史数据 +#define NET_DVR_GET_ALARMHOST_ALARM_MODE 2061 // 获取数据上传方式 +#define NET_DVR_SET_ALARMHOST_ALARM_MODE 2062 // 设置数据上传方式 +#define NET_DVR_GET_ALARMHOST_SENSOR_VALUE 2063 // 获取模拟量实时数据 + +#define NET_DVR_GET_ALARMHOST_REPORT_CENTER_V40 2064 // 获取数据上传方式 +#define NET_DVR_SET_ALARMHOST_REPORT_CENTER_V40 2065 // 设置数据上传方式 +#define NET_DVR_GET_OUTPUT_SCHEDULE_RULECFG 2068 // 获取时控输出参数 +#define NET_DVR_SET_OUTPUT_SCHEDULE_RULECFG 2069 // 设置时控输出参数 #define NET_DVR_GET_CMS_CFG 2070 #define NET_DVR_SET_CMS_CFG 2071 -#define NET_DVR_GET_PASSTHROUGH_CAP 2073 //ȡ豸͸ +#define NET_DVR_GET_PASSTHROUGH_CAP 2073 //获取设备透传能力集 -#define NET_DVR_GET_ALARMHOST_MAIN_STATUS_V40 2072 // ȡҪ״̬V40 -#define NET_DVR_GET_ALARMHOST_MAIN_STATUS_V51 2083 // ȡҪ״̬V51 +#define NET_DVR_GET_ALARMHOST_MAIN_STATUS_V40 2072 // 获取主要状态V40 +#define NET_DVR_GET_ALARMHOST_MAIN_STATUS_V51 2083 // 获取主要状态V51 -/*************************************Ƶ1.3 begin*************************************/ -#define NET_DVR_GET_ALARM_CAPTRUE_CFG 2074 //ȡץͼ -#define NET_DVR_SET_ALARM_CAPTRUE_CFG 2075 //ñץͼ -#define NET_DVR_GET_ONE_OUTPUT_SCH_RULECFG_V40 2078 // ȡʱV40 -#define NET_DVR_SET_ONE_OUTPUT_SCH_RULECFG_V40 2079 // õʱV40 -#define NET_DVR_GET_OUTPUT_SCHEDULE_RULECFG_V40 2080 // ȡʱV40 -#define NET_DVR_SET_OUTPUT_SCHEDULE_RULECFG_V40 2081 // ʱV40 -#define NET_DVR_ALARMHOST_CLOSE_SUBSYSTEM 2082 //ϵͳ -/*************************************Ƶ1.3 end**************************************/ +/*************************************视频报警主机1.3 begin*************************************/ +#define NET_DVR_GET_ALARM_CAPTRUE_CFG 2074 //获取报警抓图参数配置 +#define NET_DVR_SET_ALARM_CAPTRUE_CFG 2075 //设置报警抓图参数配置 +#define NET_DVR_GET_ONE_OUTPUT_SCH_RULECFG_V40 2078 // 获取单个时控输出参数V40 +#define NET_DVR_SET_ONE_OUTPUT_SCH_RULECFG_V40 2079 // 设置单个时控输出参数V40 +#define NET_DVR_GET_OUTPUT_SCHEDULE_RULECFG_V40 2080 // 获取时控输出参数V40 +#define NET_DVR_SET_OUTPUT_SCHEDULE_RULECFG_V40 2081 // 设置时控输出参数V40 +#define NET_DVR_ALARMHOST_CLOSE_SUBSYSTEM 2082 //对子系统撤防操作 +/*************************************视频报警主机1.3 end**************************************/ -#define NET_DVR_GET_WEEK_PLAN_CFG 2100 //ȡ״̬ܼƻ -#define NET_DVR_SET_WEEK_PLAN_CFG 2101 //״̬ܼƻ -#define NET_DVR_GET_DOOR_STATUS_HOLIDAY_PLAN 2102 //ȡ״̬ռƻ -#define NET_DVR_SET_DOOR_STATUS_HOLIDAY_PLAN 2103 //״̬ռƻ -#define NET_DVR_GET_DOOR_STATUS_HOLIDAY_GROUP 2104 //ȡ״̬ -#define NET_DVR_SET_DOOR_STATUS_HOLIDAY_GROUP 2105 //״̬ -#define NET_DVR_GET_DOOR_STATUS_PLAN_TEMPLATE 2106 //ȡ״̬ƻģ -#define NET_DVR_SET_DOOR_STATUS_PLAN_TEMPLATE 2107 //״̬ƻģ -#define NET_DVR_GET_DOOR_CFG 2108 //ȡŲ -#define NET_DVR_SET_DOOR_CFG 2109 //Ų -#define NET_DVR_GET_DOOR_STATUS_PLAN 2110 //ȡ״̬ƻ -#define NET_DVR_SET_DOOR_STATUS_PLAN 2111 //״̬ƻ -#define NET_DVR_GET_GROUP_CFG 2112 //ȡȺ -#define NET_DVR_SET_GROUP_CFG 2113 //Ⱥ -#define NET_DVR_GET_MULTI_CARD_CFG 2114 //ȡؿ -#define NET_DVR_SET_MULTI_CARD_CFG 2115 //öؿ -#define NET_DVR_GET_CARD_CFG 2116 //ȡ -#define NET_DVR_SET_CARD_CFG 2117 //ÿ -#define NET_DVR_CLEAR_ACS_PARAM 2118 //Ž -#define NET_DVR_GET_SNEAK_CFG 2119 //ȡDZز -#define NET_DVR_SET_SNEAK_CFG 2120 //÷DZز -#define NET_DVR_GET_MULTI_DOOR_INTERLOCK_CFG 2121 //ȡŻ -#define NET_DVR_SET_MULTI_DOOR_INTERLOCK_CFG 2122 //öŻ -#define NET_DVR_GET_ACS_WORK_STATUS 2123 //ȡŽ״̬ -#define NET_DVR_GET_VERIFY_WEEK_PLAN 2124 //ȡ֤ʽܼƻ -#define NET_DVR_SET_VERIFY_WEEK_PLAN 2125 //ö֤ʽܼƻ -#define NET_DVR_GET_CARD_RIGHT_WEEK_PLAN 2126 //ȡȨܼƻ -#define NET_DVR_SET_CARD_RIGHT_WEEK_PLAN 2127 //ÿȨܼƻ -#define NET_DVR_GET_VERIFY_HOLIDAY_PLAN 2128 //ȡ֤ʽռƻ -#define NET_DVR_SET_VERIFY_HOLIDAY_PLAN 2129 //ö֤ʽռƻ -#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_PLAN 2130 //ȡȨ޼ռƻ -#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_PLAN 2131 //ÿȨ޼ռƻ -#define NET_DVR_GET_VERIFY_HOLIDAY_GROUP 2132 //ȡ֤ʽ -#define NET_DVR_SET_VERIFY_HOLIDAY_GROUP 2133 //ö֤ʽ -#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_GROUP 2134 //ȡȨ޼ -#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_GROUP 2135 //ÿȨ޼ -#define NET_DVR_GET_VERIFY_PLAN_TEMPLATE 2136 //ȡ֤ʽƻģ -#define NET_DVR_SET_VERIFY_PLAN_TEMPLATE 2137 //ö֤ʽƻģ -#define NET_DVR_GET_CARD_RIGHT_PLAN_TEMPLATE 2138 //ȡȨ޼ƻģ -#define NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE 2139 //ÿȨ޼ƻģ -#define NET_DVR_GET_CARD_READER_CFG 2140 //ȡ -#define NET_DVR_SET_CARD_READER_CFG 2141 //ö -#define NET_DVR_GET_CARD_READER_PLAN 2142 //ȡ֤ƻ -#define NET_DVR_SET_CARD_READER_PLAN 2143 //ö֤ƻ -#define NET_DVR_GET_CASE_SENSOR_CFG 2144 //ȡ¼ -#define NET_DVR_SET_CASE_SENSOR_CFG 2145 //¼ -#define NET_DVR_GET_CARD_READER_ANTI_SNEAK_CFG 2146 //ȡDZز -#define NET_DVR_SET_CARD_READER_ANTI_SNEAK_CFG 2147 //öDZز -#define NET_DVR_GET_PHONE_DOOR_RIGHT_CFG 2148 //ȡֻȨ޲ -#define NET_DVR_SET_PHONE_DOOR_RIGHT_CFG 2149 //ȡֻȨ޲ -#define NET_DVR_GET_FINGERPRINT_CFG 2150 //ȡָƲ -#define NET_DVR_SET_FINGERPRINT_CFG 2151 //ָƲ -#define NET_DVR_DEL_FINGERPRINT_CFG 2152 //ɾָƲ -#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG 2153 //ȡ¼ò -#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG 2154 //¼ò -#define NET_DVR_GET_ANTI_SNEAK_HOST_CFG 2155 //ȡ鷴DZز -#define NET_DVR_SET_ANTI_SNEAK_HOST_CFG 2156 //鷴DZز -#define NET_DVR_GET_READER_ANTI_SNEAK_HOST_CFG 2157 //ȡDZز -#define NET_DVR_SET_READER_ANTI_SNEAK_HOST_CFG 2158 //DZز -#define NET_DVR_GET_ACS_CFG 2159 //ȡŽ -#define NET_DVR_SET_ACS_CFG 2160 //Ž -#define NET_DVR_GET_CARD_PASSWD_CFG 2161 //ȡ뿪ʹ -#define NET_DVR_SET_CARD_PASSWD_CFG 2162 //ÿ뿪ʹ -#define NET_DVR_GET_CARD_USERINFO_CFG 2163 //ȡŹûϢ -#define NET_DVR_SET_CARD_USERINFO_CFG 2164 //ÿŹûϢ +#define NET_DVR_GET_WEEK_PLAN_CFG 2100 //获取门状态周计划参数 +#define NET_DVR_SET_WEEK_PLAN_CFG 2101 //设置门状态周计划参数 +#define NET_DVR_GET_DOOR_STATUS_HOLIDAY_PLAN 2102 //获取门状态假日计划参数 +#define NET_DVR_SET_DOOR_STATUS_HOLIDAY_PLAN 2103 //设置门状态假日计划参数 +#define NET_DVR_GET_DOOR_STATUS_HOLIDAY_GROUP 2104 //获取门状态假日组参数 +#define NET_DVR_SET_DOOR_STATUS_HOLIDAY_GROUP 2105 //设置门状态假日组参数 +#define NET_DVR_GET_DOOR_STATUS_PLAN_TEMPLATE 2106 //获取门状态计划模板参数 +#define NET_DVR_SET_DOOR_STATUS_PLAN_TEMPLATE 2107 //设置门状态计划模板参数 +#define NET_DVR_GET_DOOR_CFG 2108 //获取门参数 +#define NET_DVR_SET_DOOR_CFG 2109 //设置门参数 +#define NET_DVR_GET_DOOR_STATUS_PLAN 2110 //获取门状态计划参数 +#define NET_DVR_SET_DOOR_STATUS_PLAN 2111 //设置门状态计划参数 +#define NET_DVR_GET_GROUP_CFG 2112 //获取群组参数 +#define NET_DVR_SET_GROUP_CFG 2113 //设置群组参数 +#define NET_DVR_GET_MULTI_CARD_CFG 2114 //获取多重卡参数 +#define NET_DVR_SET_MULTI_CARD_CFG 2115 //设置多重卡参数 +#define NET_DVR_GET_CARD_CFG 2116 //获取卡参数 +#define NET_DVR_SET_CARD_CFG 2117 //设置卡参数 +#define NET_DVR_CLEAR_ACS_PARAM 2118 //清空门禁主机参数 +#define NET_DVR_GET_SNEAK_CFG 2119 //获取反潜回参数 +#define NET_DVR_SET_SNEAK_CFG 2120 //设置反潜回参数 +#define NET_DVR_GET_MULTI_DOOR_INTERLOCK_CFG 2121 //获取多门互锁参数 +#define NET_DVR_SET_MULTI_DOOR_INTERLOCK_CFG 2122 //设置多门互锁参数 +#define NET_DVR_GET_ACS_WORK_STATUS 2123 //获取门禁主机工作状态 +#define NET_DVR_GET_VERIFY_WEEK_PLAN 2124 //获取读卡器验证方式周计划参数 +#define NET_DVR_SET_VERIFY_WEEK_PLAN 2125 //设置读卡器验证方式周计划参数 +#define NET_DVR_GET_CARD_RIGHT_WEEK_PLAN 2126 //获取卡权限周计划参数 +#define NET_DVR_SET_CARD_RIGHT_WEEK_PLAN 2127 //设置卡权限周计划参数 +#define NET_DVR_GET_VERIFY_HOLIDAY_PLAN 2128 //获取读卡器验证方式假日计划参数 +#define NET_DVR_SET_VERIFY_HOLIDAY_PLAN 2129 //设置读卡器验证方式假日计划参数 +#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_PLAN 2130 //获取卡权限假日计划参数 +#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_PLAN 2131 //设置卡权限假日计划参数 +#define NET_DVR_GET_VERIFY_HOLIDAY_GROUP 2132 //获取读卡器验证方式假日组参数 +#define NET_DVR_SET_VERIFY_HOLIDAY_GROUP 2133 //设置读卡器验证方式假日组参数 +#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_GROUP 2134 //获取卡权限假日组参数 +#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_GROUP 2135 //设置卡权限假日组参数 +#define NET_DVR_GET_VERIFY_PLAN_TEMPLATE 2136 //获取读卡器验证方式计划模板参数 +#define NET_DVR_SET_VERIFY_PLAN_TEMPLATE 2137 //设置读卡器验证方式计划模板参数 +#define NET_DVR_GET_CARD_RIGHT_PLAN_TEMPLATE 2138 //获取卡权限计划模板参数 +#define NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE 2139 //设置卡权限计划模板参数 +#define NET_DVR_GET_CARD_READER_CFG 2140 //获取读卡器参数 +#define NET_DVR_SET_CARD_READER_CFG 2141 //设置读卡器参数 +#define NET_DVR_GET_CARD_READER_PLAN 2142 //获取读卡器验证计划参数 +#define NET_DVR_SET_CARD_READER_PLAN 2143 //设置读卡器验证计划参数 +#define NET_DVR_GET_CASE_SENSOR_CFG 2144 //获取事件触发器参数 +#define NET_DVR_SET_CASE_SENSOR_CFG 2145 //设置事件触发器参数 +#define NET_DVR_GET_CARD_READER_ANTI_SNEAK_CFG 2146 //获取读卡器反潜回参数 +#define NET_DVR_SET_CARD_READER_ANTI_SNEAK_CFG 2147 //设置读卡器反潜回参数 +#define NET_DVR_GET_PHONE_DOOR_RIGHT_CFG 2148 //获取手机关联门权限参数 +#define NET_DVR_SET_PHONE_DOOR_RIGHT_CFG 2149 //获取手机关联门权限参数 +#define NET_DVR_GET_FINGERPRINT_CFG 2150 //获取指纹参数 +#define NET_DVR_SET_FINGERPRINT_CFG 2151 //设置指纹参数 +#define NET_DVR_DEL_FINGERPRINT_CFG 2152 //删除指纹参数 +#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG 2153 //获取事件卡号联动配置参数 +#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG 2154 //设置事件卡号联动配置参数 +#define NET_DVR_GET_ANTI_SNEAK_HOST_CFG 2155 //获取主机组反潜回参数 +#define NET_DVR_SET_ANTI_SNEAK_HOST_CFG 2156 //设置主机组反潜回参数 +#define NET_DVR_GET_READER_ANTI_SNEAK_HOST_CFG 2157 //获取主机组读卡器反潜回参数 +#define NET_DVR_SET_READER_ANTI_SNEAK_HOST_CFG 2158 //设置主机组读卡器反潜回参数 +#define NET_DVR_GET_ACS_CFG 2159 //获取门禁主机参数 +#define NET_DVR_SET_ACS_CFG 2160 //设置门禁主机参数 +#define NET_DVR_GET_CARD_PASSWD_CFG 2161 //获取卡密码开门使能配置 +#define NET_DVR_SET_CARD_PASSWD_CFG 2162 //设置卡密码开门使能配置 +#define NET_DVR_GET_CARD_USERINFO_CFG 2163 //获取卡号关联用户信息参数 +#define NET_DVR_SET_CARD_USERINFO_CFG 2164 //设置卡号关联用户信息参数 -#define NET_DVR_GET_ACS_EXTERNAL_DEV_CFG 2165 //ȡŽ -#define NET_DVR_SET_ACS_EXTERNAL_DEV_CFG 2166 //Ž -#define NET_DVR_GET_PERSONNEL_CHANNEL_CFG 2167 //ȡԱͨ -#define NET_DVR_SET_PERSONNEL_CHANNEL_CFG 2168 //Աͨ -#define NET_DVR_SET_PLATFORM_VERIFY_CFG 2169 //·ƽ̨֤ -#define NET_DVR_GET_PERSON_STATISTICS_CFG 2170 //ȡͳƲ -#define NET_DVR_SET_PERSON_STATISTICS_CFG 2171 //ͳƲ -#define NET_DVR_GET_ACS_SCREEN_DISPLAY_CFG 2172 //ȡĻַʾ -#define NET_DVR_SET_ACS_SCREEN_DISPLAY_CFG 2173 //Ļַʾ -#define NET_DVR_GET_GATE_TIME_CFG 2174 //ȡԱͨբʱ -#define NET_DVR_SET_GATE_TIME_CFG 2175 //Աͨբʱ -#define NET_DVR_GET_LOCAL_CONTROLLER_STATUS 2176 //ȡ͵ؿ״̬ -#define NET_DVR_GET_ONLINE_LOCAL_CONTROLLER 2177 //߾͵ؿ -#define NET_DVR_GET_CARD_CFG_V50 2178 //ȡ¿(V50) -#define NET_DVR_SET_CARD_CFG_V50 2179 //¿(V50) -#define NET_DVR_GET_ACS_WORK_STATUS_V50 2180 //ȡŽ״̬(V50) -#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V50 2181 //ȡ¼ò(V50) -#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG_V50 2182 //¼ò(V50) -#define NET_DVR_GET_FINGERPRINT_CFG_V50 2183 //ȡָƲV50 -#define NET_DVR_SET_FINGERPRINT_CFG_V50 2184 //ָƲV50 +#define NET_DVR_GET_ACS_EXTERNAL_DEV_CFG 2165 //获取门禁主机串口外设参数 +#define NET_DVR_SET_ACS_EXTERNAL_DEV_CFG 2166 //设置门禁主机串口外设参数 +#define NET_DVR_GET_PERSONNEL_CHANNEL_CFG 2167 //获取人员通道参数 +#define NET_DVR_SET_PERSONNEL_CHANNEL_CFG 2168 //设置人员通道参数 +#define NET_DVR_SET_PLATFORM_VERIFY_CFG 2169 //下发平台认证结果 +#define NET_DVR_GET_PERSON_STATISTICS_CFG 2170 //获取人数统计参数 +#define NET_DVR_SET_PERSON_STATISTICS_CFG 2171 //设置人数统计参数 +#define NET_DVR_GET_ACS_SCREEN_DISPLAY_CFG 2172 //获取屏幕字符串显示参数 +#define NET_DVR_SET_ACS_SCREEN_DISPLAY_CFG 2173 //设置屏幕字符串显示参数 +#define NET_DVR_GET_GATE_TIME_CFG 2174 //获取人员通道闸门时间参数 +#define NET_DVR_SET_GATE_TIME_CFG 2175 //设置人员通道闸门时间参数 +#define NET_DVR_GET_LOCAL_CONTROLLER_STATUS 2176 //获取就地控制器状态 +#define NET_DVR_GET_ONLINE_LOCAL_CONTROLLER 2177 //搜索在线就地控制器 +#define NET_DVR_GET_CARD_CFG_V50 2178 //获取新卡参数(V50) +#define NET_DVR_SET_CARD_CFG_V50 2179 //设置新卡参数(V50) +#define NET_DVR_GET_ACS_WORK_STATUS_V50 2180 //获取门禁主机工作状态(V50) +#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V50 2181 //获取事件卡号联动配置参数(V50) +#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG_V50 2182 //设置事件卡号联动配置参数(V50) +#define NET_DVR_GET_FINGERPRINT_CFG_V50 2183 //获取指纹参数V50 +#define NET_DVR_SET_FINGERPRINT_CFG_V50 2184 //设置指纹参数V50 -#define NET_DVR_GET_SAFETYCABIN_STATE 2197 //ȡ״̬ -#define NET_DVR_GET_RS485_CASCADE_CFG 2198 //ȡRs485豸 -#define NET_DVR_SET_RS485_CASCADE_CFG 2199 //Rs485豸 +#define NET_DVR_GET_SAFETYCABIN_STATE 2197 //获取防护舱状态 +#define NET_DVR_GET_RS485_CASCADE_CFG 2198 //获取Rs485级联设备配置 +#define NET_DVR_SET_RS485_CASCADE_CFG 2199 //设置Rs485级联设备配置 -/*************************************Ƶ2.0 begin*************************************/ -#define NET_DVR_GET_REMOTECONTROLLER_PERMISION_CFG 2200 //ȡңȨ޲ -#define NET_DVR_SET_REMOTECONTROLLER_PERMISION_CFG 2201 //ңȨ޲ -#define NET_DVR_GET_KEYBOARD_CFG 2202 //ȡ̲ -#define NET_DVR_SET_KEYBOARD_CFG 2203 //ü̲ -#define NET_DVR_GET_ALARMHOST_WIRELESS_BUSINNESS_INFO 2204 //ҵѯ -#define NET_DVR_GET_ALL_REMOTECONTROLLER_LIST 2205 //ȡң -#define NET_DVR_GET_PREVIEW_DELAY_CFG 2206 //ȡӳԤ -#define NET_DVR_SET_PREVIEW_DELAY_CFG 2207 //ӳԤ -#define NET_DVR_GET_ZONE_CHANNEL_LINKAGE_CFG 2208 //ȡƵͨ -#define NET_DVR_SET_ZONE_CHANNEL_LINKAGE_CFG 2209 //÷Ƶͨ -#define NET_DVR_GET_CENTER_SERVER_CFG 2210 //ȡķ -#define NET_DVR_SET_CENTER_SERVER_CFG 2211 //ñķ -/*************************************Ƶ2.0 end**************************************/ +/*************************************视频报警主机2.0 begin*************************************/ +#define NET_DVR_GET_REMOTECONTROLLER_PERMISION_CFG 2200 //获取遥控器权限参数 +#define NET_DVR_SET_REMOTECONTROLLER_PERMISION_CFG 2201 //设置遥控器权限参数 +#define NET_DVR_GET_KEYBOARD_CFG 2202 //获取键盘参数配置 +#define NET_DVR_SET_KEYBOARD_CFG 2203 //设置键盘参数配置 +#define NET_DVR_GET_ALARMHOST_WIRELESS_BUSINNESS_INFO 2204 //无线业务查询 +#define NET_DVR_GET_ALL_REMOTECONTROLLER_LIST 2205 //获取所有遥控器 +#define NET_DVR_GET_PREVIEW_DELAY_CFG 2206 //获取延迟预览参数配置 +#define NET_DVR_SET_PREVIEW_DELAY_CFG 2207 //设置延迟预览参数配置 +#define NET_DVR_GET_ZONE_CHANNEL_LINKAGE_CFG 2208 //获取防区联动视频通道配置 +#define NET_DVR_SET_ZONE_CHANNEL_LINKAGE_CFG 2209 //设置防区联动视频通道配置 +#define NET_DVR_GET_CENTER_SERVER_CFG 2210 //获取报警中心服务器 +#define NET_DVR_SET_CENTER_SERVER_CFG 2211 //设置报警中心服务器 +/*************************************视频报警主机2.0 end**************************************/ -/********************************һʽƷV1.0.0 begin********************************/ -#define NET_DVR_GET_EMERGENCE_ALARM_PRODUCT_CAP 2212 //ȡһʽƷ -#define NET_DVR_GET_CALL_WAITTING_CFG_CAP 2213 //ȡеȴ -#define NET_DVR_GET_CALL_WAITTING_CFG 2214 //ȡеȴ -#define NET_DVR_SET_CALL_WAITTING_CFG 2215 //úеȴ -#define NET_DVR_GET_ALARM_LAMP_CFG_CAP 2216 //ȡƲ -#define NET_DVR_GET_ALARM_LAMP_CFG 2217 //ȡƲ -#define NET_DVR_SET_ALARM_LAMP_CFG 2218 //þƲ -#define NET_DVR_GET_VOICE_PROMPTION_CFG_CAP 2219 //ȡʾ -#define NET_DVR_GET_VOICE_PROMPTION_CFG 2220 //ȡʾ -#define NET_DVR_SET_VOICE_PROMPTION_CFG 2221 //ʾ -#define NET_DVR_GET_EMERGENCE_ALARM_RESPONSE_CAP 2222 //ȡ -#define NET_DVR_EMERGENCE_ALARM_RESPONSE_CTRL 2223 // -/********************************һʽƷV1.0.0 end**********************************/ +/********************************一键式紧急报警产品V1.0.0 begin********************************/ +#define NET_DVR_GET_EMERGENCE_ALARM_PRODUCT_CAP 2212 //获取一键式紧急报警产品能力 +#define NET_DVR_GET_CALL_WAITTING_CFG_CAP 2213 //获取呼叫等待参数配置能力 +#define NET_DVR_GET_CALL_WAITTING_CFG 2214 //获取呼叫等待参数配置 +#define NET_DVR_SET_CALL_WAITTING_CFG 2215 //设置呼叫等待参数配置 +#define NET_DVR_GET_ALARM_LAMP_CFG_CAP 2216 //获取警灯参数配置能力 +#define NET_DVR_GET_ALARM_LAMP_CFG 2217 //获取警灯参数配置 +#define NET_DVR_SET_ALARM_LAMP_CFG 2218 //设置警灯参数配置 +#define NET_DVR_GET_VOICE_PROMPTION_CFG_CAP 2219 //获取语音提示配置能力 +#define NET_DVR_GET_VOICE_PROMPTION_CFG 2220 //获取语音提示配置 +#define NET_DVR_SET_VOICE_PROMPTION_CFG 2221 //设置语音提示配置 +#define NET_DVR_GET_EMERGENCE_ALARM_RESPONSE_CAP 2222 //获取紧急报警处理能力 +#define NET_DVR_EMERGENCE_ALARM_RESPONSE_CTRL 2223 //紧急报警处理控制 +/********************************一键式紧急报警产品V1.0.0 end**********************************/ -//籨 V2.2 -#define NET_DVR_GET_ALARMHOST_NETCFG_V50 2224 //ȡV50 -#define NET_DVR_SET_ALARMHOST_NETCFG_V50 2225 //ñV50 -#define NET_DVR_REGISTER_ALARM_RS485 2226 //RS485ע -/**********************************V3.0****************************************/ +//网络报警主机 V2.2 +#define NET_DVR_GET_ALARMHOST_NETCFG_V50 2224 //获取报警主机网络参数配置V50 +#define NET_DVR_SET_ALARMHOST_NETCFG_V50 2225 //设置报警主机网络参数配置V50 +#define NET_DVR_REGISTER_ALARM_RS485 2226 //RS485重新注册 +/**********************************动环报警主机V3.0****************************************/ -#define NET_DVR_GET_ALARMIN_PARAM_LIST 2227 //ȡб -//߱1.0.0 -#define NET_DVR_GET_ALARMHOST_OTHER_STATUS_V50 2228 //ȡ״̬v50 -#define NET_DVR_GET_ALARMHOST_OTHER_STATUS_V51 2236 //ȡ״̬V51 -#define NET_DVR_GET_ALARMIN_ASSOCIATED_CHAN_LIST 2229 //ȡƵͨб -#define NET_DVR_GET_ALARMIN_TRIGGER 2230 //ȡ -#define NET_DVR_SET_ALARMIN_TRIGGER 2231 //ñ -#define NET_DVR_GET_EMERGENCY_CALL_HELP_TRIGGER 2232 //ȡ -#define NET_DVR_SET_EMERGENCY_CALL_HELP_TRIGGER 2233 //ñ -#define NET_DVR_GET_CONSULT_TRIGGER 2234 //ȡҵѯ -#define NET_DVR_SET_CONSULT_TRIGGER 2235 //ñҵѯ -#define NET_DVR_GET_ALARMIN_PARAM_LIST_V50 2237 //ȡбV50 +#define NET_DVR_GET_ALARMIN_PARAM_LIST 2227 //获取防区参数列表 +//无线报警主机1.0.0 +#define NET_DVR_GET_ALARMHOST_OTHER_STATUS_V50 2228 //获取报警主机其他状态v50 +#define NET_DVR_GET_ALARMHOST_OTHER_STATUS_V51 2236 //获取报警主机其他状态V51 +#define NET_DVR_GET_ALARMIN_ASSOCIATED_CHAN_LIST 2229 //获取防区防区联动视频通道参数列表 +#define NET_DVR_GET_ALARMIN_TRIGGER 2230 //获取报警主机防区联动配置 +#define NET_DVR_SET_ALARMIN_TRIGGER 2231 //设置报警主机防区联动配置 +#define NET_DVR_GET_EMERGENCY_CALL_HELP_TRIGGER 2232 //获取报警主机紧急求助联动配置 +#define NET_DVR_SET_EMERGENCY_CALL_HELP_TRIGGER 2233 //设置报警主机紧急求助联动配置 +#define NET_DVR_GET_CONSULT_TRIGGER 2234 //获取报警主机业务咨询联动配置 +#define NET_DVR_SET_CONSULT_TRIGGER 2235 //设置报警主机业务咨询联动配置 +#define NET_DVR_GET_ALARMIN_PARAM_LIST_V50 2237 //获取防区参数列表V50 -#define NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50 2304 //ȡȨܼƻV50 -#define NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50 2305 //ÿȨܼƻV50 +#define NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50 2304 //获取卡权限周计划参数V50 +#define NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50 2305 //设置卡权限周计划参数V50 -#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_PLAN_V50 2310 //ȡȨ޼ռƻV50 -#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_PLAN_V50 2311 //ÿȨ޼ռƻV50 +#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_PLAN_V50 2310 //获取卡权限假日计划参数V50 +#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_PLAN_V50 2311 //设置卡权限假日计划参数V50 -#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_GROUP_V50 2316 //Ȩ޼V50 -#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_GROUP_V50 2317 //ÿȨ޼V50 +#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_GROUP_V50 2316 //获卡权限假日组参数V50 +#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_GROUP_V50 2317 //设置卡权限假日组参数V50 -#define NET_DVR_GET_CARD_RIGHT_PLAN_TEMPLATE_V50 2322 //ȡȨ޼ƻģV50 -#define NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50 2323//ÿȨ޼ƻģV50 +#define NET_DVR_GET_CARD_RIGHT_PLAN_TEMPLATE_V50 2322 //获取卡权限计划模板参数V50 +#define NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50 2323//设置卡权限计划模板参数V50 -/**********************************ָŽƷV1.0 豸****************************************/ -#define NET_DVR_GET_SCHEDULE_INFO 2500 //ȡŰϢ -#define NET_DVR_GET_ATTENDANCE_SUMMARY_INFO 2501 //ȡڻϢ -#define NET_DVR_GET_ATTENDANCE_RECORD_INFO 2502 //ȡڼ¼Ϣ -#define NET_DVR_GET_ABNORMAL_INFO 2503 //ȡ쳣ͳϢ -/**********************************ָŽƷV1.0****************************************/ +/**********************************经济型指纹门禁产品V1.0 设备不做****************************************/ +#define NET_DVR_GET_SCHEDULE_INFO 2500 //获取排班信息 +#define NET_DVR_GET_ATTENDANCE_SUMMARY_INFO 2501 //获取考勤汇总信息 +#define NET_DVR_GET_ATTENDANCE_RECORD_INFO 2502 //获取考勤记录信息 +#define NET_DVR_GET_ABNORMAL_INFO 2503 //获取异常统计信息 +/**********************************经济型指纹门禁产品V1.0****************************************/ -/*************************************ƵŽһ1.0 begin**************************************/ -#define NET_DVR_CAPTURE_FINGERPRINT_INFO 2504 //ɼָϢ -/*************************************ƵŽһ1.0 end**************************************/ +/*************************************视频门禁一体机1.0 begin**************************************/ +#define NET_DVR_CAPTURE_FINGERPRINT_INFO 2504 //采集指纹信息 +/*************************************视频门禁一体机1.0 end**************************************/ -/*************************************Ƕʽն1.0 begin**************************************/ -#define NET_DVR_BULK_UPLOAD_BLOCKLIST_PICTURE 2520 //ϴֹͼƬ -#define NET_DVR_BULK_UPLOAD_ID_BLOCKLIST 2521 //ϴֹ֤ -#define NET_DVR_GET_FAILED_FACE_INFO 2522 //ȡ豸ģʧܵ¼ -#define NET_DVR_GET_FACE_AND_TEMPLATE 2523 //ȡģ -#define NET_DVR_SET_FACE_AND_TEMPLATE 2524 //ģ -/*************************************Ƕʽն1.0 end**************************************/ +/*************************************嵌入式智能终端1.0 begin**************************************/ +#define NET_DVR_BULK_UPLOAD_BLOCKLIST_PICTURE 2520 //批量上传禁止名单图片 +#define NET_DVR_BULK_UPLOAD_ID_BLOCKLIST 2521 //批量上传身份证禁止名单 +#define NET_DVR_GET_FAILED_FACE_INFO 2522 //获取设备升级建模失败的人脸记录 +#define NET_DVR_GET_FACE_AND_TEMPLATE 2523 //获取人脸及模板数据 +#define NET_DVR_SET_FACE_AND_TEMPLATE 2524 //设置人脸及模板数据 +/*************************************嵌入式智能终端1.0 end**************************************/ -/*************************************ĿʶŽһ1.0 begin**************************************/ -#define NET_DVR_GET_CARD_READER_CFG_V50 2505 //ȡ(V50) -#define NET_DVR_SET_CARD_READER_CFG_V50 2506 //ö(V50) -#define NET_DVR_GET_FACE_PARAM_CFG 2507 //ȡ -#define NET_DVR_SET_FACE_PARAM_CFG 2508 // -#define NET_DVR_DEL_FACE_PARAM_CFG 2509 //ɾ -#define NET_DVR_CAPTURE_FACE_INFO 2510 //ɼϢ -/*************************************ĿʶŽһ1.0 end**************************************/ -#define NET_DVR_GET_REGISTER_INFO 2511 //ǼϢȡ +/*************************************目标识别门禁一体机1.0 begin**************************************/ +#define NET_DVR_GET_CARD_READER_CFG_V50 2505 //获取读卡器参数(V50) +#define NET_DVR_SET_CARD_READER_CFG_V50 2506 //设置读卡器参数(V50) +#define NET_DVR_GET_FACE_PARAM_CFG 2507 //获取人脸参数 +#define NET_DVR_SET_FACE_PARAM_CFG 2508 //设置人脸参数 +#define NET_DVR_DEL_FACE_PARAM_CFG 2509 //删除人脸参数 +#define NET_DVR_CAPTURE_FACE_INFO 2510 //采集人脸信息 +/*************************************目标识别门禁一体机1.0 end**************************************/ +#define NET_DVR_GET_REGISTER_INFO 2511 //登记信息获取 -#define NET_DVR_GET_SMSRELATIVEPARA_V50 2512 //ȡز -#define NET_DVR_SET_SMSRELATIVEPARA_V50 2513 //öز -#define NET_DVR_GET_ACS_EVENT 2514 //豸¼ȡ -#define NET_DVR_GET_MULTI_CARD_CFG_V50 2515 //ȡؿV50 -#define NET_DVR_SET_MULTI_CARD_CFG_V50 2516 //öؿV50 -#define NET_DVR_DEL_FINGERPRINT_CFG_V50 2517 //ɾָƲV50 -#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V51 2518 //ȡ¼ò(V51) -#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG_V51 2519 //¼ò(V51) +#define NET_DVR_GET_SMSRELATIVEPARA_V50 2512 //获取短信相关参数 +#define NET_DVR_SET_SMSRELATIVEPARA_V50 2513 //设置短信相关参数 +#define NET_DVR_GET_ACS_EVENT 2514 //设备事件获取 +#define NET_DVR_GET_MULTI_CARD_CFG_V50 2515 //获取多重卡参数V50 +#define NET_DVR_SET_MULTI_CARD_CFG_V50 2516 //设置多重卡参数V50 +#define NET_DVR_DEL_FINGERPRINT_CFG_V50 2517 //删除指纹参数V50 +#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V51 2518 //获取事件卡号联动配置参数(V51) +#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG_V51 2519 //设置事件卡号联动配置参数(V51) -#define NET_DVR_SET_EXAM_INFO 2530 //Ϣ· -#define NET_DVR_SET_EXAMINEE_INFO 2531 //Ϣ· -#define NET_DVR_SEARCH_EXAM_COMPARE_RESULT 2532 //ԱȶԽѯ -#define NET_DVR_BULK_CHECK_FACE_PICTURE 2533 //УͼƬ -#define NET_DVR_JSON_CONFIG 2550 //JSON͸ -#define NET_DVR_FACE_DATA_RECORD 2551 //ݵ -#define NET_DVR_FACE_DATA_SEARCH 2552 //ѯе -#define NET_DVR_FACE_DATA_MODIFY 2553 //޸е -#define NET_DVR_CAPTURE_DATA_SEARCH 2554 //ѯ߲ɼݼ -#define NET_DVR_SET_FORM_DATA 2555 //ñ -#define NET_DVR_GET_FORM_DATA 2556 //ӻȡ +#define NET_DVR_SET_EXAM_INFO 2530 //考试信息下发 +#define NET_DVR_SET_EXAMINEE_INFO 2531 //考生信息下发 +#define NET_DVR_SEARCH_EXAM_COMPARE_RESULT 2532 //考试比对结果查询 +#define NET_DVR_BULK_CHECK_FACE_PICTURE 2533 //批量校验人脸图片 +#define NET_DVR_JSON_CONFIG 2550 //JSON透传数据 +#define NET_DVR_FACE_DATA_RECORD 2551 //添加人脸数据到人脸库 +#define NET_DVR_FACE_DATA_SEARCH 2552 //查询人脸库中的人脸数据 +#define NET_DVR_FACE_DATA_MODIFY 2553 //修改人脸库中的人脸数据 +#define NET_DVR_CAPTURE_DATA_SEARCH 2554 //查询离线采集数据集中数据 +#define NET_DVR_SET_FORM_DATA 2555 //长连接设置表单数据 +#define NET_DVR_GET_FORM_DATA 2556 //长连接获取表单数据 #define NET_DVR_GET_CARD 2560 #define NET_DVR_SET_CARD 2561 @@ -3040,4377 +3040,4377 @@ NET_DVR_GET_SHOWSTRING #define NET_DVR_GET_FACE 2566 #define NET_DVR_SET_FACE 2567 -#define NET_DVR_GET_ALL_ALARM_RS485CFG 2705 // ȡ485 -#define NET_DVR_GET_ALL_ALARMHOST_RS485_SLOT_CFG 2706 // ȡб485λ -#define NET_DVR_GET_DEVICE_SELF_CHECK_STATE 2707 //ȡ豸Լ칦 -#define NET_DVR_GET_ALL_ALARM_POINT_CFG 2708 // ȡеŲ -#define NET_DVR_GET_ALL_ALARM_SENSOR_CFG 2709 // ȡģ -#define NET_DVR_GET_ALL_ALARM_SENSOR_JOINT 2710 //ȡģ -#define NET_DVR_GET_AIR_CONDITION_PARAM 2711 //ȡյ -#define NET_DVR_GET_OUT_SCALE_CFG 2712 //ȡ -#define NET_DVR_SET_OUT_SCALE_CFG 2713 // -#define NET_DVR_GET_ALARM_CHAN_ABLITITY 2714 //ȡͨ -/**********************************V3.0****************************************/ +#define NET_DVR_GET_ALL_ALARM_RS485CFG 2705 // 获取485参数 +#define NET_DVR_GET_ALL_ALARMHOST_RS485_SLOT_CFG 2706 // 获取所有报警主机485槽位参数 +#define NET_DVR_GET_DEVICE_SELF_CHECK_STATE 2707 //获取设备自检功能 +#define NET_DVR_GET_ALL_ALARM_POINT_CFG 2708 // 获取所有点号参数 +#define NET_DVR_GET_ALL_ALARM_SENSOR_CFG 2709 // 获取所有模拟量参数 +#define NET_DVR_GET_ALL_ALARM_SENSOR_JOINT 2710 //获取所有模拟量联动参数 +#define NET_DVR_GET_AIR_CONDITION_PARAM 2711 //获取空调参数 +#define NET_DVR_GET_OUT_SCALE_CFG 2712 //获取主辅口输出配置 +#define NET_DVR_SET_OUT_SCALE_CFG 2713 //设置主辅口输出配置 +#define NET_DVR_GET_ALARM_CHAN_ABLITITY 2714 //获取报警相关通道参 +/**********************************动环报警主机V3.0****************************************/ -//D2000 V1.0 -#define NET_DVR_GET_ALARMCENTER_NETCFG 2715 //ȡ -#define NET_DVR_SET_ALARMCENTER_NETCFG 2716 //ȡ +//动环报警主机D2000 V1.0 +#define NET_DVR_GET_ALARMCENTER_NETCFG 2715 //获取报警中心网络参数配置 +#define NET_DVR_SET_ALARMCENTER_NETCFG 2716 //获取报警中心网络参数配置 -#define NET_ITC_GET_TRIGGERCFG 3003 //ȡ -#define NET_ITC_SET_TRIGGERCFG 3004 //ô -#define NET_ITC_GET_IOOUT_PARAM_CFG 3005 //ȡIO3.1֮汾 -#define NET_ITC_SET_IOOUT_PARAM_CFG 3006 //IO3.1֮汾 +#define NET_ITC_GET_TRIGGERCFG 3003 //获取触发参数 +#define NET_ITC_SET_TRIGGERCFG 3004 //设置触发参数 +#define NET_ITC_GET_IOOUT_PARAM_CFG 3005 //获取IO输出参数(3.1含之后版本) +#define NET_ITC_SET_IOOUT_PARAM_CFG 3006 //设置IO输出参数(3.1含之后版本) -#define NET_DVR_GET_CAMERA_SETUPCFG 3007 //ȡ -#define NET_DVR_SET_CAMERA_SETUPCFG 3008 // +#define NET_DVR_GET_CAMERA_SETUPCFG 3007 //获取相机架设参数 +#define NET_DVR_SET_CAMERA_SETUPCFG 3008 //设置相机架设参数 -#define NET_ITC_GET_TRIGGER_DEFAULTCFG 3013 //ȡģʽƼ -#define NET_DVR_GET_STATUS_DETECTCFG 3015 //ȡ״̬ʹܲ -#define NET_DVR_SET_STATUS_DETECTCFG 3016 //״̬ʹܲ -#define NET_ITC_GET_VIDEO_TRIGGERCFG 3017 //ȡƵ羯 -#define NET_ITC_SET_VIDEO_TRIGGERCFG 3018 //Ƶ羯 -#define NET_DVR_GET_TPS_ALARMCFG 3019 //ȡͨͳƱ -#define NET_DVR_SET_TPS_ALARMCFG 3020 //ýͨͳƱ +#define NET_ITC_GET_TRIGGER_DEFAULTCFG 3013 //获取触发模式推荐参数 +#define NET_DVR_GET_STATUS_DETECTCFG 3015 //获取状态检测使能参数 +#define NET_DVR_SET_STATUS_DETECTCFG 3016 //设置状态检测使能参数 +#define NET_ITC_GET_VIDEO_TRIGGERCFG 3017 //获取视频电警触发参数 +#define NET_ITC_SET_VIDEO_TRIGGERCFG 3018 //设置视频电警触发参数 +#define NET_DVR_GET_TPS_ALARMCFG 3019 //获取交通统计报警参数 +#define NET_DVR_SET_TPS_ALARMCFG 3020 //设置交通统计报警参数 -#define NET_DVR_GET_REDAREACFG 3100 //ȡ̵ -#define NET_DVR_SET_REDAREACFG 3101 //ú̵ -#define NET_DVR_GET_TEST_SPOT 3102 //ȡSPOTڲܲ͵ǰڼ -#define NET_DVR_SET_TEST_SPOT 3103 //SPOTڲܲ͵ǰڼ -#define NET_DVR_GET_CABINETCFG 3104 //ûȡ -#define NET_DVR_SET_CABINETCFG 3105 // -#define NET_DVR_VEHICLE_CHECK_START 3106 //ֹݻش -#define NET_DVR_SET_CAPTUREPIC_CFG 3107 //ץͼ -#define NET_DVR_GET_CAPTUREPIC_CFG 3108 //ץͼûȡ -#define NET_DVR_SET_MOBILEPLATE_RECOG_CFG 3109 //سʶ -#define NET_DVR_GET_MOBILEPLATE_RECOG_CFG 3110 //سʶûȡ -#define NET_DVR_SET_MOBILE_RADAR_CFG 3111 //״ -#define NET_DVR_GET_MOBILE_RADAR_CFG 3112 //״ûȡ -#define NET_DVR_SET_MOBILE_LOCALPLATECHK_CFG 3113 //ؽֹضԱ -#define NET_DVR_GET_MOBILE_LOCALPLATECHK_CFG 3114 //ؽֹضԱûȡ +#define NET_DVR_GET_REDAREACFG 3100 //获取红绿灯区域参数 +#define NET_DVR_SET_REDAREACFG 3101 //设置红绿灯区域参数 +#define NET_DVR_GET_TEST_SPOT 3102 //获取SPOT口测试总步数和当前第几步 +#define NET_DVR_SET_TEST_SPOT 3103 //设置SPOT口测试总步数和当前第几步 +#define NET_DVR_GET_CABINETCFG 3104 //机柜参数配置获取 +#define NET_DVR_SET_CABINETCFG 3105 //机柜参数配置设置 +#define NET_DVR_VEHICLE_CHECK_START 3106 //禁止名单稽查数据回传 +#define NET_DVR_SET_CAPTUREPIC_CFG 3107 //车载抓图配置设置命令 +#define NET_DVR_GET_CAPTUREPIC_CFG 3108 //车载抓图配置获取命令 +#define NET_DVR_SET_MOBILEPLATE_RECOG_CFG 3109 //车载车牌识别配置设置命令 +#define NET_DVR_GET_MOBILEPLATE_RECOG_CFG 3110 //车载车牌识别配置获取命令 +#define NET_DVR_SET_MOBILE_RADAR_CFG 3111 //车载雷达配置设置命令 +#define NET_DVR_GET_MOBILE_RADAR_CFG 3112 //车载雷达配置获取命令 +#define NET_DVR_SET_MOBILE_LOCALPLATECHK_CFG 3113 //车载禁止名单本地对比配置设置命令 +#define NET_DVR_GET_MOBILE_LOCALPLATECHK_CFG 3114 //车载禁止名单本地对比配置获取命令 -#define NET_ITC_GET_ICRCFG 3115 //ȡICRл -#define NET_ITC_SET_ICRCFG 3116 //ICRл -#define NET_ITC_GET_RS485_ACCESSINFO 3117 //ȡRs485豸Ϣ -#define NET_ITC_SET_RS485_ACCESSINFO 3118 //Rs485豸Ϣ -#define NET_ITC_GET_EXCEPTIONCFG 3119 //ȡ쳣 -#define NET_ITC_SET_EXCEPTIONCFG 3120 //쳣 -#define NET_ITC_GET_FTPCFG 3121 //ȡITC FTPò -#define NET_ITC_SET_FTPCFG 3122 //ITC FTPò +#define NET_ITC_GET_ICRCFG 3115 //获取ICR配置切换 +#define NET_ITC_SET_ICRCFG 3116 //设置ICR配置切换 +#define NET_ITC_GET_RS485_ACCESSINFO 3117 //获取Rs485关联接入设备的信息 +#define NET_ITC_SET_RS485_ACCESSINFO 3118 //设置Rs485关联接入设备的信息 +#define NET_ITC_GET_EXCEPTIONCFG 3119 //获取异常参数 +#define NET_ITC_SET_EXCEPTIONCFG 3120 //设置异常参数 +#define NET_ITC_GET_FTPCFG 3121 //获取ITC FTP设置参数 +#define NET_ITC_SET_FTPCFG 3122 //设置ITC FTP设置参数 -#define NET_DVR_VEHICLE_CONTROL_LIST_START 3123 //óֹϢ -#define NET_DVR_GET_ALL_VEHICLE_CONTROL_LIST 3124 //ȡгֹϢ -#define NET_DVR_VEHICLE_DELINFO_CTRL 3125 //ɾ豸ڽֹݿϢ -#define NET_DVR_GET_ENTRANCE_PARAMCFG 3126 //ȡڿƲ -#define NET_DVR_SET_ENTRANCE_PARAMCFG 3127 //óڿƲ -#define NET_DVR_BARRIERGATE_CTRL 3128 //Զ̿Ƶբ -#define NET_DVR_GATELAMP_CTRL 3129 //ƹ -#define NET_DVR_GET_CURTRIGGERMODE 3130 //ȡ豸ǰģʽ -#define NET_DVR_GET_GPSDATACFG 3131 //ȡGPS -#define NET_DVR_SET_GPSDATACFG 3132 //GPS -#define NET_DVR_VEHICLELIST_CTRL_START 3133 //óֹϢ +#define NET_DVR_VEHICLE_CONTROL_LIST_START 3123 //设置车辆禁止和允许名单信息 +#define NET_DVR_GET_ALL_VEHICLE_CONTROL_LIST 3124 //获取所有车辆禁止和允许名单信息 +#define NET_DVR_VEHICLE_DELINFO_CTRL 3125 //删除设备内禁止名单数据库信息 +#define NET_DVR_GET_ENTRANCE_PARAMCFG 3126 //获取出入口控制参数 +#define NET_DVR_SET_ENTRANCE_PARAMCFG 3127 //设置出入口控制参数 +#define NET_DVR_BARRIERGATE_CTRL 3128 //远程控制道闸 +#define NET_DVR_GATELAMP_CTRL 3129 //常亮灯功能 +#define NET_DVR_GET_CURTRIGGERMODE 3130 //获取设备当前触发模式 +#define NET_DVR_GET_GPSDATACFG 3131 //获取GPS参数 +#define NET_DVR_SET_GPSDATACFG 3132 //设置GPS参数 +#define NET_DVR_VEHICLELIST_CTRL_START 3133 //设置车辆禁止和允许名单信息 -#define NET_DVR_GET_GUARDCFG 3134 //ȡʶƻ -#define NET_DVR_SET_GUARDCFG 3135 //óʶƻ -#define NET_DVR_GET_SNAPINFO_CFG 3136 //ȡץͼƬ -#define NET_DVR_SET_SNAPINFO_CFG 3137 //ץͼƬ -#define NET_DVR_GET_SNAPINFO_CFG_V40 3138 //ȡץͼƬչ -#define NET_DVR_SET_SNAPINFO_CFG_V40 3139 //ץͼƬչ -#define NET_DVR_SET_CURTRIGGERMODE 3140 //豸ǰģʽ(IPC/D֧) -#define NET_DVR_GET_TRAFFIC_DATA 3141 //ӻȡͨ -#define NET_DVR_GET_TRAFFIC_FLOW 3142 //ӻȡͨ -#define NET_DVR_PARKING_VEHICLE_SEND 3143 //ͣϢ· -#define NET_DVR_PARKING_CARD_SEND 3144 //ͣ· -#define NET_DVR_PARKING_CARD_CTRL 3145 //ͣͣƽӿ +#define NET_DVR_GET_GUARDCFG 3134 //获取车牌识别检测计划 +#define NET_DVR_SET_GUARDCFG 3135 //设置车牌识别检测计划 +#define NET_DVR_GET_SNAPINFO_CFG 3136 //获取抓拍图片参数 +#define NET_DVR_SET_SNAPINFO_CFG 3137 //设置抓拍图片参数 +#define NET_DVR_GET_SNAPINFO_CFG_V40 3138 //获取抓拍图片参数扩展 +#define NET_DVR_SET_SNAPINFO_CFG_V40 3139 //设置抓拍图片参数扩展 +#define NET_DVR_SET_CURTRIGGERMODE 3140 //设置设备当前触发模式(仅IPC/D支持) +#define NET_DVR_GET_TRAFFIC_DATA 3141 //长连接获取交通数据 +#define NET_DVR_GET_TRAFFIC_FLOW 3142 //长连接获取交通流量 +#define NET_DVR_PARKING_VEHICLE_SEND 3143 //停车车辆信息下发 +#define NET_DVR_PARKING_CARD_SEND 3144 //停车卡下发 +#define NET_DVR_PARKING_CARD_CTRL 3145 //停车场停车卡控制接口 -#define NET_DVR_GET_ALARMCTRL_CAPABILITIES 3146 //ȡ -#define NET_DVR_SET_ALARMCTRL_CFG 3147 //ñ -#define NET_DVR_GET_ALARMCTRL_CFG 3148 //ȡ +#define NET_DVR_GET_ALARMCTRL_CAPABILITIES 3146 //获取报警控制能力 +#define NET_DVR_SET_ALARMCTRL_CFG 3147 //设置报警控制 +#define NET_DVR_GET_ALARMCTRL_CFG 3148 //获取报警控制 -#define NET_DVR_GET_AUDIO_INPUT 3201 //ȡƵ -#define NET_DVR_SET_AUDIO_INPUT 3202 //Ƶ -#define NET_DVR_GET_CAMERA_DEHAZE_CFG 3203 //ȡ͸ -#define NET_DVR_SET_CAMERA_DEHAZE_CFG 3204 //͸ -#define NET_DVR_REMOTECONTROL_ALARM 3205 //Զ̿ң -#define NET_DVR_REMOTECONTROL_DISALARM 3206 //Զ̿ң -#define NET_DVR_REMOTECONTROL_STUDY 3207 //Զ̿ңѧϰ -#define NET_DVR_WIRELESS_ALARM_STUDY 3208 //Զ̿߱ѧϰ -#define NET_IPC_GET_AUX_ALARMCFG 3209 //ȡ -#define NET_IPC_SET_AUX_ALARMCFG 3210 //ø -#define NET_DVR_GET_PREVIEW_DISPLAYCFG 3211 //ȡԤʾ -#define NET_DVR_SET_PREVIEW_DISPLAYCFG 3212 //Ԥʾ -#define NET_DVR_REMOTECONTROL_PTZ 3213 //Զ̿PTZ -#define NET_DVR_REMOTECONTROL_PRESETPOINT 3214 //Զ̿Ԥõ -#define NET_DVR_REMOTECONTROL_CRUISE 3215 //Զ̿Ѳ +#define NET_DVR_GET_AUDIO_INPUT 3201 //获取音频输入参数 +#define NET_DVR_SET_AUDIO_INPUT 3202 //设置音频输入参数 +#define NET_DVR_GET_CAMERA_DEHAZE_CFG 3203 //获取透雾参数配置 +#define NET_DVR_SET_CAMERA_DEHAZE_CFG 3204 //设置透雾参数配置 +#define NET_DVR_REMOTECONTROL_ALARM 3205 //远程控制遥控器布防 +#define NET_DVR_REMOTECONTROL_DISALARM 3206 //远程控制遥控器撤防 +#define NET_DVR_REMOTECONTROL_STUDY 3207 //远程控制遥控器学习 +#define NET_DVR_WIRELESS_ALARM_STUDY 3208 //远程控制无线报警学习 +#define NET_IPC_GET_AUX_ALARMCFG 3209 //获取辅助报警参数配置 +#define NET_IPC_SET_AUX_ALARMCFG 3210 //设置辅助报警参数配置 +#define NET_DVR_GET_PREVIEW_DISPLAYCFG 3211 //获取预览显示参数 +#define NET_DVR_SET_PREVIEW_DISPLAYCFG 3212 //设置预览显示参数 +#define NET_DVR_REMOTECONTROL_PTZ 3213 //远程控制PTZ +#define NET_DVR_REMOTECONTROL_PRESETPOINT 3214 //远程控制预置点 +#define NET_DVR_REMOTECONTROL_CRUISE 3215 //远程控制巡航 -#define NET_DVR_GET_MULTI_STREAM_COMPRESSIONCFG 3216 //Զ̻ȡѹ -#define NET_DVR_SET_MULTI_STREAM_COMPRESSIONCFG 3217 //Զöѹ +#define NET_DVR_GET_MULTI_STREAM_COMPRESSIONCFG 3216 //远程获取多码流压缩参数 +#define NET_DVR_SET_MULTI_STREAM_COMPRESSIONCFG 3217 //远程设置多码流压缩参数 -#define NET_DVR_GET_WPSCFG 3218 //ȡWPS -#define NET_DVR_SET_WPSCFG 3219 //WPS -#define NET_DVR_WPS_CONNECT 3220 //ԶWPS -#define NET_DVR_GET_DEVICE_PIN 3221 //ȡ豸PIN -#define NET_DVR_UPDATE_PIN 3223 //豸PIN -#define NET_DVR_GET_PRESETCFG 3224 //ȡԤõ -#define NET_DVR_GET_PTZCRUISECFG 3225 //ȡѲ· -#define NET_DVR_GET_PRESET_NUM 3226 //ȡԤõ -#define NET_DVR_GET_PTZCRUISE_NUM 3227 //ȡѲ· +#define NET_DVR_GET_WPSCFG 3218 //获取WPS参数 +#define NET_DVR_SET_WPSCFG 3219 //设置WPS参数 +#define NET_DVR_WPS_CONNECT 3220 //远程启用WPS连接 +#define NET_DVR_GET_DEVICE_PIN 3221 //获取设备PIN码 +#define NET_DVR_UPDATE_PIN 3223 //更新设备PIN码 +#define NET_DVR_GET_PRESETCFG 3224 //获取预置点参数 +#define NET_DVR_GET_PTZCRUISECFG 3225 //获取巡航路径参数 +#define NET_DVR_GET_PRESET_NUM 3226 //获取预置点个数 +#define NET_DVR_GET_PTZCRUISE_NUM 3227 //获取巡航路径个数 -#define NET_DVR_GET_MOTION_TRACK_CFG 3228 //ȡ˶ -#define NET_DVR_SET_MOTION_TRACK_CFG 3229 //˶ -#define NET_DVR_CLEAR_IPC_PARAM 3230 //ǰ˲ -#define NET_DVR_GET_IPADDR_FILTERCFG 3232 //ȡIPַ˲ -#define NET_DVR_SET_IPADDR_FILTERCFG 3233 //IPַ˲ +#define NET_DVR_GET_MOTION_TRACK_CFG 3228 //获取运动参数 +#define NET_DVR_SET_MOTION_TRACK_CFG 3229 //设置运动参数 +#define NET_DVR_CLEAR_IPC_PARAM 3230 //清空前端参数 +#define NET_DVR_GET_IPADDR_FILTERCFG 3232 //获取IP地址过滤参数 +#define NET_DVR_SET_IPADDR_FILTERCFG 3233 //设置IP地址过滤参数 -#define NET_DVR_GET_LOGO_OVERLAYCFG 3234 //ȡLOGOͼƬӲ -#define NET_DVR_SET_LOGO_OVERLAYCFG 3235 //LOGOͼƬӲ +#define NET_DVR_GET_LOGO_OVERLAYCFG 3234 //获取LOGO图片叠加参数 +#define NET_DVR_SET_LOGO_OVERLAYCFG 3235 //设置LOGO图片叠加参数 -#define NET_DVR_GET_IPV6_LIST 3236 //ȡȫIPV6ַϢ -#define NET_DVR_GET_AUDIOOUT_VOLUME 3237 //ȡƵС -#define NET_DVR_SET_AUDIOOUT_VOLUME 3238 //ƵС -#define NET_DVR_GET_FUZZY_UPGRADE 3239 //ȡģƥϢ +#define NET_DVR_GET_IPV6_LIST 3236 //获取网卡的全部IPV6地址信息 +#define NET_DVR_GET_AUDIOOUT_VOLUME 3237 //获取输出音频大小 +#define NET_DVR_SET_AUDIOOUT_VOLUME 3238 //设置输出音频大小 +#define NET_DVR_GET_FUZZY_UPGRADE 3239 //获取模糊升级匹配信息 -#define NET_DVR_GET_BV_CORRECT_PARAM 3240 //ȡУ -#define NET_DVR_SET_BV_CORRECT_PARAM 3241 //У -#define NET_DVR_GET_OUTPUT_VIDEO_TYPE 3242 //ȡƵ -#define NET_DVR_SET_OUTPUT_VIDEO_TYPE 3243 //Ƶ +#define NET_DVR_GET_BV_CORRECT_PARAM 3240 //获取相机校正参数 +#define NET_DVR_SET_BV_CORRECT_PARAM 3241 //设置相机校正参数 +#define NET_DVR_GET_OUTPUT_VIDEO_TYPE 3242 //获取输出视频类型 +#define NET_DVR_SET_OUTPUT_VIDEO_TYPE 3243 //设置输出视频类型 -#define NET_DVR_FISHEYE_CFG 3244 //۳ -#define NET_DVR_GET_PTZ_POINT 3245 //ȡPTZ -#define NET_DVR_SET_PTZ_POINT 3246 //PTZ -#define NET_DVR_REMOTECONTROL_DEV_PARAM 3247 //豸¼ͻ˲ -#define NET_DVR_GET_FISHEYE_STREAM_STATUS 3248 //ȡ״̬ +#define NET_DVR_FISHEYE_CFG 3244 //鱼眼长连接配置 +#define NET_DVR_GET_PTZ_POINT 3245 //获取PTZ点坐标 +#define NET_DVR_SET_PTZ_POINT 3246 //设置PTZ点坐标 +#define NET_DVR_REMOTECONTROL_DEV_PARAM 3247 //设置设备登录客户端参数 +#define NET_DVR_GET_FISHEYE_STREAM_STATUS 3248 //获取鱼眼码流状态 -#define NET_DVR_GET_GBT28181_ACCESS_CFG 3249 //ȡGBT28181Э -#define NET_DVR_SET_GBT28181_ACCESS_CFG 3250 //GBT28181Э -#define NET_DVR_GET_GBT28181_CHANINFO_CFG 3251 //ȡGBT28181Э豸ͨϢ -#define NET_DVR_SET_GBT28181_CHANINFO_CFG 3252 //GBT28181Э豸ͨϢ -#define NET_DVR_GET_GBT28181_ALARMINCFG 3253 //ȡGBT28181Э豸ıϢ -#define NET_DVR_SET_GBT28181_ALARMINCFG 3254 //GBT28181Э豸ıϢ -#define NET_DVR_GET_ISP_CAMERAPARAMCFG 3255 //ȡISPǰ˲ -#define NET_DVR_SET_ISP_CAMERAPARAMCFG 3256 //ISPǰ˲ -#define NET_DVR_GET_DEVSERVER_CFG 3257 //ȡģ -#define NET_DVR_SET_DEVSERVER_CFG 3258 //ģ +#define NET_DVR_GET_GBT28181_ACCESS_CFG 3249 //获取GBT28181协议接入配置 +#define NET_DVR_SET_GBT28181_ACCESS_CFG 3250 //设置GBT28181协议接入配置 +#define NET_DVR_GET_GBT28181_CHANINFO_CFG 3251 //获取GBT28181协议接入设备的通道信息 +#define NET_DVR_SET_GBT28181_CHANINFO_CFG 3252 //设置GBT28181协议接入设备的通道信息 +#define NET_DVR_GET_GBT28181_ALARMINCFG 3253 //获取GBT28181协议接入设备的报警信息 +#define NET_DVR_SET_GBT28181_ALARMINCFG 3254 //设置GBT28181协议接入设备的报警信息 +#define NET_DVR_GET_ISP_CAMERAPARAMCFG 3255 //获取ISP前端参数配置 +#define NET_DVR_SET_ISP_CAMERAPARAMCFG 3256 //设置ISP前端参数配置 +#define NET_DVR_GET_DEVSERVER_CFG 3257 //获取模块服务配置 +#define NET_DVR_SET_DEVSERVER_CFG 3258 //设置模块服务配置 //2013-11-25 -#define NET_DVR_GET_WIPERINFO_CFG 3259 //ˢûȡ -#define NET_DVR_SET_WIPERINFO_CFG 3260 //ˢ -#define NET_DVR_GET_TRACK_DEV_PARAM 3261 //ȡ豸 -#define NET_DVR_SET_TRACK_DEV_PARAM 3262 //豸 -#define NET_DVR_GET_PTZ_TRACK_PARAM 3263 //ȡPTZ -#define NET_DVR_SET_PTZ_TRACK_PARAM 3264 //PTZ -#define NET_DVR_GET_CENTER_POINT_CFG 3265 //ȡĵ -#define NET_DVR_SET_CENTER_POINT_CFG 3266 //ĵ -#define NET_DVR_GET_CENTER_POINT_CFG_CAPABILITIES 3267 //ȡĵ -#define NET_DVR_GET_FISHEYE_CAPABILITIES 3268 //ȡ +#define NET_DVR_GET_WIPERINFO_CFG 3259 //雨刷配置获取 +#define NET_DVR_SET_WIPERINFO_CFG 3260 //雨刷配置设置 +#define NET_DVR_GET_TRACK_DEV_PARAM 3261 //获取设备参数 +#define NET_DVR_SET_TRACK_DEV_PARAM 3262 //设置设备参数 +#define NET_DVR_GET_PTZ_TRACK_PARAM 3263 //获取PTZ参数 +#define NET_DVR_SET_PTZ_TRACK_PARAM 3264 //设置PTZ参数 +#define NET_DVR_GET_CENTER_POINT_CFG 3265 //获取中心点参数 +#define NET_DVR_SET_CENTER_POINT_CFG 3266 //设置中心点参数 +#define NET_DVR_GET_CENTER_POINT_CFG_CAPABILITIES 3267 //获取中心点参数能力 +#define NET_DVR_GET_FISHEYE_CAPABILITIES 3268 //获取鱼眼能力 -#define NET_DVR_GET_BASICPARAMCFG 3270 //ȡPTZûϢ -#define NET_DVR_SET_BASICPARAMCFG 3271 //PTZûϢ -#define NET_DVR_GET_PTZOSDCFG 3272 //ȡPTZ OSDòϢ -#define NET_DVR_SET_PTZOSDCFG 3273 //PTZ OSDòϢ -#define NET_DVR_GET_POWEROFFMEMCFG 3274 //ȡģʽϢ -#define NET_DVR_SET_POWEROFFMEMCFG 3275 //õģʽϢ -#define NET_DVR_GET_LIMITCFG 3276 //ȡλϢ -#define NET_DVR_SET_LIMITCFG 3277 //λϢ -#define NET_DVR_PTZLIMIT_CTRL 3278 //λ +#define NET_DVR_GET_BASICPARAMCFG 3270 //获取PTZ配置基本参数信息 +#define NET_DVR_SET_BASICPARAMCFG 3271 //设置PTZ配置基本参数信息 +#define NET_DVR_GET_PTZOSDCFG 3272 //获取PTZ OSD配置参数信息 +#define NET_DVR_SET_PTZOSDCFG 3273 //设置PTZ OSD配置参数信息 +#define NET_DVR_GET_POWEROFFMEMCFG 3274 //获取掉电记忆模式参数信息 +#define NET_DVR_SET_POWEROFFMEMCFG 3275 //设置掉电记忆模式参数信息 +#define NET_DVR_GET_LIMITCFG 3276 //获取限位参数配置信息 +#define NET_DVR_SET_LIMITCFG 3277 //设置限位参数配置信息 +#define NET_DVR_PTZLIMIT_CTRL 3278 //清除限位参数控制 -#define NET_DVR_PTZ_CLEARCTRL 3279 //Ϣƽӿ -#define NET_DVR_GET_PRIORITIZECFG 3281 //ȡ̨Ϣ -#define NET_DVR_SET_PRIORITIZECFG 3282 //̨Ϣ -#define NET_DVR_PTZ_INITIALPOSITIONCTRL 3283 //㷽λǿ -#define NET_DVR_GET_PRIVACY_MASKSCFG 3285 //ȡ˽ڱβ -#define NET_DVR_SET_PRIVACY_MASKSCFG 3286 //˽ڱβ -#define NET_DVR_GET_PTZLOCKCFG 3287 //ȡ̨Ϣ -#define NET_DVR_SET_PTZLOCKCFG 3288 //̨Ϣ -#define NET_DVR_PTZ_ZOOMRATIOCTRL 3289 //ñ -#define NET_DVR_GET_PTZLOCKINFO 3290 //ȡ̨ʣ -#define NET_DVR_GET_PRIVACY_MASKS_ENABLECFG 3291 //ȡȫʹ -#define NET_DVR_SET_PRIVACY_MASKS_ENABLECFG 3292 //ȫʹ -#define NET_DVR_GET_SMARTTRACKCFG 3293 //ȡ˶Ϣ -#define NET_DVR_SET_SMARTTRACKCFG 3294 //˶Ϣ -#define NET_DVR_GET_EPTZ_CFG 3295 //ȡEPTZ -#define NET_DVR_SET_EPTZ_CFG 3296 //EPTZ -#define NET_DVR_GET_EPTZ_CFG_CAPABILITIES 3297 //ȡEPTZ +#define NET_DVR_PTZ_CLEARCTRL 3279 //清除配置信息控制接口 +#define NET_DVR_GET_PRIORITIZECFG 3281 //获取云台优先配置信息 +#define NET_DVR_SET_PRIORITIZECFG 3282 //设置云台优先配置信息 +#define NET_DVR_PTZ_INITIALPOSITIONCTRL 3283 //零方位角控制 +#define NET_DVR_GET_PRIVACY_MASKSCFG 3285 //获取隐私遮蔽参数 +#define NET_DVR_SET_PRIVACY_MASKSCFG 3286 //设置隐私遮蔽参数 +#define NET_DVR_GET_PTZLOCKCFG 3287 //获取云台锁定信息 +#define NET_DVR_SET_PTZLOCKCFG 3288 //设置云台锁定信息 +#define NET_DVR_PTZ_ZOOMRATIOCTRL 3289 //设置倍率 +#define NET_DVR_GET_PTZLOCKINFO 3290 //获取云台锁定剩余秒数 +#define NET_DVR_GET_PRIVACY_MASKS_ENABLECFG 3291 //获取全局使能 +#define NET_DVR_SET_PRIVACY_MASKS_ENABLECFG 3292 //设置全局使能 +#define NET_DVR_GET_SMARTTRACKCFG 3293 //获取智能运动配置信息 +#define NET_DVR_SET_SMARTTRACKCFG 3294 //设置智能运动配置信息 +#define NET_DVR_GET_EPTZ_CFG 3295 //获取EPTZ参数 +#define NET_DVR_SET_EPTZ_CFG 3296 //设置EPTZ参数 +#define NET_DVR_GET_EPTZ_CFG_CAPABILITIES 3297 //获取EPTZ参数能力 -#define NET_DVR_GET_LOW_LIGHTCFG 3303//ȡնϢ -#define NET_DVR_SET_LOW_LIGHTCFG 3304//ÿնϢ -#define NET_DVR_GET_FOCUSMODECFG 3305//ȡ۽ģʽϢ -#define NET_DVR_SET_FOCUSMODECFG 3306//ÿ۽ģʽϢ -#define NET_DVR_GET_INFRARECFG 3307//ȡϢ -#define NET_DVR_SET_INFRARECFG 3308//ÿϢ -#define NET_DVR_GET_AEMODECFG 3309//ȡϢ -#define NET_DVR_SET_AEMODECFG 3310//ÿϢ -#define NET_DVR_CONTROL_RESTORE_SUPPORT 3311 //ָǰĬϲ(еǰ˲صĶָ) -#define NET_DVR_CONTROL_RESTART_SUPPORT 3312 //о -#define NET_DVR_CONTROL_PTZ_PATTERN 3313//̨ɨ -#define NET_DVR_GET_PTZ_PARKACTION_CFG 3314//ȡ̨ -#define NET_DVR_SET_PTZ_PARKACTION_CFG 3315//̨ -#define NET_DVR_CONTROL_PTZ_MANUALTRACE 3316//ֶλ -#define NET_DVR_GET_ROI_DETECT_NUM 3349 //ȡROIĿ -#define NET_DVR_GET_ROI_DETECT 3350 //ȡROI -#define NET_DVR_SET_ROI_DETECT 3351 //ROI -#define NET_DVR_GET_FACE_DETECT 3352 //ȡ -#define NET_DVR_SET_FACE_DETECT 3353 // -#define NET_DVR_GET_CORRIDOR_MODE 3354 //ȡģʽ -#define NET_DVR_SET_CORRIDOR_MODE 3355 //ģʽ -#define NET_DVR_GET_SCENECHANGE_DETECTIONCFG 3356 //ȡ -#define NET_DVR_SET_SCENECHANGE_DETECTIONCFG 3357 //ó +#define NET_DVR_GET_LOW_LIGHTCFG 3303//获取快球低照度设置信息 +#define NET_DVR_SET_LOW_LIGHTCFG 3304//设置快球低照度设置信息 +#define NET_DVR_GET_FOCUSMODECFG 3305//获取快球聚焦模式信息 +#define NET_DVR_SET_FOCUSMODECFG 3306//设置快球聚焦模式信息 +#define NET_DVR_GET_INFRARECFG 3307//获取快球红外设置信息 +#define NET_DVR_SET_INFRARECFG 3308//设置快球红外设置信息 +#define NET_DVR_GET_AEMODECFG 3309//获取快球其他设置信息 +#define NET_DVR_SET_AEMODECFG 3310//设置快球其他设置信息 +#define NET_DVR_CONTROL_RESTORE_SUPPORT 3311 //恢复前端默认参数(参数能力中有的前端参数配置相关的都恢复) +#define NET_DVR_CONTROL_RESTART_SUPPORT 3312 //快球机芯重启 +#define NET_DVR_CONTROL_PTZ_PATTERN 3313//云台花样扫描 +#define NET_DVR_GET_PTZ_PARKACTION_CFG 3314//获取云台守望参数 +#define NET_DVR_SET_PTZ_PARKACTION_CFG 3315//设置云台守望参数 +#define NET_DVR_CONTROL_PTZ_MANUALTRACE 3316//手动定位 +#define NET_DVR_GET_ROI_DETECT_NUM 3349 //获取ROI检测区域编号数目 +#define NET_DVR_GET_ROI_DETECT 3350 //获取ROI检测区域配置 +#define NET_DVR_SET_ROI_DETECT 3351 //设置ROI检测区域配置 +#define NET_DVR_GET_FACE_DETECT 3352 //获取人脸侦测配置 +#define NET_DVR_SET_FACE_DETECT 3353 //设置人脸侦测配置 +#define NET_DVR_GET_CORRIDOR_MODE 3354 //获取走廊模式功能配置 +#define NET_DVR_SET_CORRIDOR_MODE 3355 //设置走廊模式功能配置 +#define NET_DVR_GET_SCENECHANGE_DETECTIONCFG 3356 //获取场景变更报警配置 +#define NET_DVR_SET_SCENECHANGE_DETECTIONCFG 3357 //设置场景变更报警配置 #define NET_DVR_GET_TRAVERSE_PLANE_DETECTION 3360 #define NET_DVR_SET_TRAVERSE_PLANE_DETECTION 3361 -#define NET_DVR_GET_FIELD_DETECTION 3362 //ȡ -#define NET_DVR_SET_FIELD_DETECTION 3363 // -#define NET_DVR_GET_DEFOCUSPARAM 3364 //ȡ齹 -#define NET_DVR_SET_DEFOCUSPARAM 3365 //齹 -#define NET_DVR_GET_AUDIOEXCEPTIONPARAM 3366 //ȡƵ쳣 -#define NET_DVR_SET_AUDIOEXCEPTIONPARAM 3367 //Ƶ쳣 -#define NET_DVR_GET_CCDPARAMCFG_EX 3368 //ȡCCD -#define NET_DVR_SET_CCDPARAMCFG_EX 3369 //CCD -#define NET_DVR_START_GET_INPUTVOLUME 3370//ʼȡ -#define NET_DVR_SET_SCH_TASK 3380 //ʱ -#define NET_DVR_GET_SCH_TASK 3381 //ȡʱ -#define NET_DVR_SET_PRESET_NAME 3382 //Ԥõ -#define NET_DVR_GET_PRESET_NAME 3383 //ȡԤõ -#define NET_DVR_SET_AUDIO_NAME 3384 // -#define NET_DVR_GET_AUDIO_NAME 3385 //ȡ -#define NET_DVR_RESUME_INITRACKPOS 3386 //ָʼλ -#define NET_DVR_NTP_SERVER_TEST 3387 //NTP -#define NET_DVR_NAS_SERVER_TEST 3388 //NAS -#define NET_DVR_EMAIL_SERVER_TEST 3389 //Email -#define NET_DVR_FTP_SERVER_TEST 3390 //FTP -#define NET_DVR_IP_TEST 3391 //IP -#define NET_DVR_GET_NET_DISKCFG_V40 3392 //Ӳ̽ȡv40 -#define NET_DVR_SET_NET_DISKCFG_V40 3393 //Ӳ̽v40 -#define NET_DVR_GET_IOOUT_CFG 3394//ȡƲ -#define NET_DVR_SET_IOOUT_CFG 3395//òƲ -#define NET_DVR_GET_SIGNAL_SYNC 3396//ȡźŵͬò -#define NET_DVR_SET_SIGNAL_SYNC 3397//źŵͬò +#define NET_DVR_GET_FIELD_DETECTION 3362 //获取区域侦测配置 +#define NET_DVR_SET_FIELD_DETECTION 3363 //设置区域侦测配置 +#define NET_DVR_GET_DEFOCUSPARAM 3364 //获取虚焦侦测参数配置 +#define NET_DVR_SET_DEFOCUSPARAM 3365 //设置虚焦侦测参数配置 +#define NET_DVR_GET_AUDIOEXCEPTIONPARAM 3366 //获取音频异常配置 +#define NET_DVR_SET_AUDIOEXCEPTIONPARAM 3367 //设置音频异常配置 +#define NET_DVR_GET_CCDPARAMCFG_EX 3368 //获取CCD参数配置 +#define NET_DVR_SET_CCDPARAMCFG_EX 3369 //设置CCD参数配置 +#define NET_DVR_START_GET_INPUTVOLUME 3370//开始获取音量 +#define NET_DVR_SET_SCH_TASK 3380 //设置球机定时任务 +#define NET_DVR_GET_SCH_TASK 3381 //获取球机定时任务 +#define NET_DVR_SET_PRESET_NAME 3382 //设置预置点名称 +#define NET_DVR_GET_PRESET_NAME 3383 //获取预置点名称 +#define NET_DVR_SET_AUDIO_NAME 3384 //设置语音名称 +#define NET_DVR_GET_AUDIO_NAME 3385 //获取语音名称 +#define NET_DVR_RESUME_INITRACKPOS 3386 //恢复初始位 +#define NET_DVR_NTP_SERVER_TEST 3387 //NTP服务器测试 +#define NET_DVR_NAS_SERVER_TEST 3388 //NAS服务器测试 +#define NET_DVR_EMAIL_SERVER_TEST 3389 //Email服务器测试 +#define NET_DVR_FTP_SERVER_TEST 3390 //FTP服务器测试 +#define NET_DVR_IP_TEST 3391 //IP测试 +#define NET_DVR_GET_NET_DISKCFG_V40 3392 //网络硬盘接入获取v40 +#define NET_DVR_SET_NET_DISKCFG_V40 3393 //网络硬盘接入设置v40 +#define NET_DVR_GET_IOOUT_CFG 3394//获取补光灯参数 +#define NET_DVR_SET_IOOUT_CFG 3395//设置补光灯参数 +#define NET_DVR_GET_SIGNAL_SYNC 3396//获取信号灯同步配置参数 +#define NET_DVR_SET_SIGNAL_SYNC 3397//设置信号灯同步配置参数 -#define NET_DVR_GET_EZVIZ_ACCESS_CFG 3398//ȡEZVIZ -#define NET_DVR_SET_EZVIZ_ACCESS_CFG 3399//EZVIZ -#define NET_DVR_GET_SCHEDULE_AUTO_TRACK_CFG 3400//ȡʱܲ -#define NET_DVR_SET_SCHEDULE_AUTO_TRACK_CFG 3401//öʱܲ -#define NET_DVR_MAKE_I_FRAME 3402//ǿI֡ -#define NET_DVR_GET_ALARM_RELATE 3403//ȡͨܲ -#define NET_DVR_SET_ALARM_RELATE 3404//ñͨܲ -#define NET_DVR_GET_PDC_RULECFG_V42 3405 //ͳƹ(չ) -#define NET_DVR_SET_PDC_RULECFG_V42 3406 //ȡͳƹ(չ) -#define NET_DVR_GET_HEATMAP_CFG 3407 //ȶͼ -#define NET_DVR_SET_HEATMAP_CFG 3408 //ȡȶͼ -#define NET_DVR_REMOTECONTROL_LINEARSCAN 3409 //ұ߽ 2014-03-15 -#define NET_DVR_DPC_CTRL 3410//У -#define NET_DVR_FFC_MANUAL_CTRL 3411//ǾУ(FFC)ֶģʽ -#define NET_DVR_FFC_BACKCOMP_CTRL 3412//ǾУ(FFC) -#define NET_DVR_GET_FOCUSING_POSITION_STATE 3413//ȡ۽λ״̬ -#define NET_DVR_GET_PRIVATE_PROTOCOL_CFG 3414 //ȡ ˽йؼϢϴýӿ -#define NET_DVR_SET_PRIVATE_PROTOCOL_CFG 3415 // ˽йؼϢϴýӿ -#define NET_DVR_COMPLETE_RESTORE_CTRL 3420 //ȫֵָ +#define NET_DVR_GET_EZVIZ_ACCESS_CFG 3398//获取EZVIZ接入参数 +#define NET_DVR_SET_EZVIZ_ACCESS_CFG 3399//设置EZVIZ接入参数 +#define NET_DVR_GET_SCHEDULE_AUTO_TRACK_CFG 3400//获取定时智能参数 +#define NET_DVR_SET_SCHEDULE_AUTO_TRACK_CFG 3401//设置定时智能参数 +#define NET_DVR_MAKE_I_FRAME 3402//强制I帧 +#define NET_DVR_GET_ALARM_RELATE 3403//获取报警联动通道功能参数 +#define NET_DVR_SET_ALARM_RELATE 3404//设置报警联动通道功能参数 +#define NET_DVR_GET_PDC_RULECFG_V42 3405 //设置人流量统计规则(扩展) +#define NET_DVR_SET_PDC_RULECFG_V42 3406 //获取人流量统计规则(扩展) +#define NET_DVR_GET_HEATMAP_CFG 3407 //设置热度图参数配置 +#define NET_DVR_SET_HEATMAP_CFG 3408 //获取热度图参数配置 +#define NET_DVR_REMOTECONTROL_LINEARSCAN 3409 //设置左右边界参数 2014-03-15 +#define NET_DVR_DPC_CTRL 3410//坏点校正控制 +#define NET_DVR_FFC_MANUAL_CTRL 3411//非均匀性校正(FFC)手动模式 +#define NET_DVR_FFC_BACKCOMP_CTRL 3412//非均匀性校正(FFC)背景补偿 +#define NET_DVR_GET_FOCUSING_POSITION_STATE 3413//获取聚焦到位状态参数 +#define NET_DVR_GET_PRIVATE_PROTOCOL_CFG 3414 //获取 私有关键信息上传配置接口配置 +#define NET_DVR_SET_PRIVATE_PROTOCOL_CFG 3415 //设置 私有关键信息上传配置接口配置 +#define NET_DVR_COMPLETE_RESTORE_CTRL 3420 //设置完全恢复出厂值 -#define NET_DVR_CLOUDSTORAGE_SERVER_TEST 3421 //ƴ洢 -#define NET_DVR_PHONE_NUM_TEST 3422 //绰 -#define NET_DVR_GET_REMOTECONTROL_STATUS 3423 //ȡ߲״̬ -#define NET_DVR_GET_MONITOR_LOCATION_INFO 3424 //ȡʾϢ -#define NET_DVR_SET_MONITOR_LOCATION_INFO 3425 //ʾϢ +#define NET_DVR_CLOUDSTORAGE_SERVER_TEST 3421 //云存储服务器测试 +#define NET_DVR_PHONE_NUM_TEST 3422 //电话号码测试 +#define NET_DVR_GET_REMOTECONTROL_STATUS 3423 //获取无线布防状态 +#define NET_DVR_GET_MONITOR_LOCATION_INFO 3424 //获取显示点信息 +#define NET_DVR_SET_MONITOR_LOCATION_INFO 3425 //设置显示点信息 -#define NET_DVR_GET_SMART_CAPABILITIES 3500 //ȡSmart -#define NET_DVR_GET_EVENT_TRIGGERS_CAPABILITIES 3501 //ȡ¼ -#define NET_DVR_GET_REGION_ENTRANCE_CAPABILITIES 3502 //ȡ -#define NET_DVR_GET_REGION_ENTR_DETECTION 3503 //ȡ -#define NET_DVR_SET_REGION_ENTR_DETECTION 3504 //ý -#define NET_DVR_GET_REGION_ENTR_REGION 3505 //ȡĵ -#define NET_DVR_SET_REGION_ENTR_REGION 3506 //ýĵ -#define NET_DVR_GET_REGION_ENTR_TRIGGER 3507 //ȡ -#define NET_DVR_SET_REGION_ENTR_TRIGGER 3508 //ý -#define NET_DVR_GET_REGION_ENTR_SCHEDULE 3509 //ȡ򲼷ʱ -#define NET_DVR_SET_REGION_ENTR_SCHEDULE 3510 //ý򲼷ʱ -#define NET_DVR_GET_REGION_EXITINT_CAPABILITIES 3511 //ȡ뿪 -#define NET_DVR_GET_REGION_EXITING_DETECTION 3512 //ȡ뿪 -#define NET_DVR_SET_REGION_EXITING_DETECTION 3513 //뿪 -#define NET_DVR_GET_REGION_EXITING_REGION 3514 //ȡ뿪ĵ -#define NET_DVR_SET_REGION_EXITING_REGION 3515 //뿪ĵ -#define NET_DVR_GET_REGION_EXIT_TRIGGER 3516 //ȡ뿪 -#define NET_DVR_SET_REGION_EXIT_TRIGGER 3517 //뿪 -#define NET_DVR_GET_REGION_EXIT_SCHEDULE 3518 //ȡ뿪򲼷ʱ -#define NET_DVR_SET_REGION_EXIT_SCHEDULE 3519 //뿪򲼷ʱ -#define NET_DVR_GET_LOITERING_CAPABILITIES 3520 //ȡǻ -#define NET_DVR_GET_LOITERING_DETECTION 3521 //ȡǻ -#define NET_DVR_SET_LOITERING_DETECTION 3522 //ǻ -#define NET_DVR_GET_LOITERING_REGION 3523 //ȡǻĵ -#define NET_DVR_SET_LOITERING_REGION 3524 //ǻĵ -#define NET_DVR_GET_LOITERING_TRIGGER 3525 //ȡǻ -#define NET_DVR_SET_LOITERING_TRIGGER 3526 //ǻ -#define NET_DVR_GET_LOITERING_SCHEDULE 3527 //ȡǻʱ -#define NET_DVR_SET_LOITERING_SCHEDULE 3528 //ǻʱ -#define NET_DVR_GET_GROUPDETECTION_CAPABILITIES 3529 //ȡԱۼ -#define NET_DVR_GET_GROUP_DETECTION 3530 //ȡԱۼ -#define NET_DVR_SET_GROUP_DETECTION 3531 //Աۼ -#define NET_DVR_GET_GROUPDETECTION_REGION 3532 //ȡԱۼĵ -#define NET_DVR_SET_GROUPDETECTION_REGION 3533 //Աۼĵ -#define NET_DVR_GET_GROUPDETECTION_TRIGGER 3534 //ȡԱۼ -#define NET_DVR_SET_GROUPDETECTION_TRIGGER 3535 //Աۼ -#define NET_DVR_GET_GROUPDETECTION_SCHEDULE 3536 //ȡԱۼʱ -#define NET_DVR_SET_GROUPDETECTION_SCHEDULE 3537 //Աۼʱ -#define NET_DVR_GET_RAPIDMOVE_CAPABILITIES 3538 //ȡ˶ -#define NET_DVR_GET_RAPIDMOVE_DETECTION 3539 //ȡ˶ -#define NET_DVR_SET_RAPIDMOVE_DETECTION 3540 //ÿ˶ -#define NET_DVR_GET_RAPIDMOVE_REGION 3541 //ȡ˶ĵ -#define NET_DVR_SET_RAPIDMOVE_REGION 3542 //ÿ˶ĵ -#define NET_DVR_GET_RAPIDMOVE_TRIGGER 3543 //ȡ˶ -#define NET_DVR_SET_RAPIDMOVE_TRIGGER 3544 //ÿ˶ -#define NET_DVR_GET_RAPIDMOVE_SCHEDULE 3545 //ȡ˶IJʱ -#define NET_DVR_SET_RAPIDMOVE_SCHEDULE 3546 //ÿ˶IJʱ -#define NET_DVR_GET_PATKING_CAPABILITIES 3547 //ȡͣ -#define NET_DVR_GET_PARKING_DETECTION 3548 //ȡͣ -#define NET_DVR_SET_PARKING_DETECTION 3549 //ͣ -#define NET_DVR_GET_PARKING_REGION 3550 //ȡͣĵ -#define NET_DVR_SET_PARKING_REGION 3551 //ͣĵ -#define NET_DVR_GET_PARKING_TRIGGER 3552 //ȡͣ -#define NET_DVR_SET_PARKING_TRIGGER 3553 //ͣ -#define NET_DVR_GET_PARKING_SCHEDULE 3554 //ȡͣIJʱ -#define NET_DVR_SET_PARKING_SCHEDULE 3555 //ͣIJʱ -#define NET_DVR_GET_UNATTENDED_BAGGAGE_CAPABILITIES 3556 //ȡƷ -#define NET_DVR_GET_UNATTENDED_BAGGAGE_DETECTION 3557 //ȡƷ -#define NET_DVR_SET_UNATTENDED_BAGGAGE_DETECTION 3558 //Ʒ -#define NET_DVR_GET_UNATTENDED_BAGGAGE_REGION 3559 //ȡƷĵ -#define NET_DVR_SET_UNATTENDED_BAGGAGE_REGION 3560 //Ʒĵ -#define NET_DVR_GET_UNATTENDED_BAGGAGE_TRIGGER 3561 //ȡƷ -#define NET_DVR_SET_UNATTENDED_BAGGAGE_TRIGGER 3562 //Ʒ -#define NET_DVR_GET_UNATTENDED_BAGGAGE_SCHEDULE 3563 //ȡƷIJʱ -#define NET_DVR_SET_UNATTENDED_BAGGAGE_SCHEDULE 3564 //ƷIJʱ -#define NET_DVR_GET_ATTENDEDBAGGAGE_CAPABILITIES 3565 //ȡƷȡ -#define NET_DVR_GET_ATTENDEDBAGGAGE_DETECTION 3566 //ȡƷȡ -#define NET_DVR_SET_ATTENDEDBAGGAGE_DETECTION 3567 //Ʒȡ -#define NET_DVR_GET_ATTENDEDBAGGAGE_REGION 3568 //ȡƷȡĵ -#define NET_DVR_SET_ATTENDEDBAGGAGE_REGION 3569 //Ʒȡĵ -#define NET_DVR_GET_ATTENDEDBAGGAGE_TRIGGER 3570 //ȡƷȡ -#define NET_DVR_SET_ATTENDEDBAGGAGE_TRIGGER 3571 //Ʒȡ -#define NET_DVR_GET_ATTENDEDBAGGAGE_SCHEDULE 3572 //ȡƷIJʱ -#define NET_DVR_SET_ATTENDEDBAGGAGE_SCHEDULE 3573 //ƷȡIJʱ -#define NET_DVR_GET_REGIONCLIP_CAPABILITIES 3574 //ȡü -#define NET_DVR_GET_REGION_CLIP 3575 //ȡü -#define NET_DVR_SET_REGION_CLIP 3576 //ü -#define NET_DVR_GET_NETWORK_CAPABILITIES 3577 //ȡ -#define NET_DVR_GET_WIRELESS_DIAL 3578 //ȡ߲ -#define NET_DVR_SET_WIRELESS_DIAL 3579 //߲ -#define NET_DVR_GET_WIRELESSDIAL_CAPABILITIES 3580 //ȡ߲Ų -#define NET_DVR_GET_WIRELESSDIAL_SCHEDULE 3581 //ȡżƻ -#define NET_DVR_SET_WIRELESSDIAL_SCHEDULE 3582 //òżƻ -#define NET_DVR_GET_WIRELESSDIAL_STATUS 3583 //ȡ״̬ -#define NET_DVR_GET_REGION_ENTRANCE_SCHEDULE_CAPABILITIES 3584 //ȡⲼʱ -#define NET_DVR_GET_REGION_EXITING_SCHEDULE_CAPABILITIES 3585 //ȡ뿪Ⲽʱ -#define NET_DVR_GET_LOITERING_SCHEDULE_CAPABILITIES 3586 //ȡǻⲼʱ -#define NET_DVR_GET_GROUP_SCHEDULE_CAPABILITIES 3587 //ȡԱۼⲼʱ -#define NET_DVR_GET_RAPIDMOVE_SCHEDULE_CAPABILITIES 3588 //ȡ˶Ⲽʱ -#define NET_DVR_GET_PARKING_SCHEDULE_CAPABILITIES 3589 //ȡͣⲼʱ -#define NET_DVR_GET_UNATTENDEDBAGGAGE_SCHEDULE_CAPABILITIES 3590 //ȡƷⲼʱ -#define NET_DVR_GET_ATTENDEDBAGGAGE_SCHEDULE_CAPABILITIES 3591 //ȡƷȡⲼʱ -#define NET_DVR_GET_WIRELESSDIAL_SCHEDULE_CAPABILITIES 3592 //ȡżƻ -#define NET_DVR_WIRELESSDIAL_CONNECT 3593 // +#define NET_DVR_GET_SMART_CAPABILITIES 3500 //获取Smart能力 +#define NET_DVR_GET_EVENT_TRIGGERS_CAPABILITIES 3501 //获取事件触发能力 +#define NET_DVR_GET_REGION_ENTRANCE_CAPABILITIES 3502 //获取进入区域侦测能力 +#define NET_DVR_GET_REGION_ENTR_DETECTION 3503 //获取进入区域配置 +#define NET_DVR_SET_REGION_ENTR_DETECTION 3504 //设置进入区域配置 +#define NET_DVR_GET_REGION_ENTR_REGION 3505 //获取进入区域的单个区域配置 +#define NET_DVR_SET_REGION_ENTR_REGION 3506 //设置进入区域的单个区域配置 +#define NET_DVR_GET_REGION_ENTR_TRIGGER 3507 //获取进入区域联动配置 +#define NET_DVR_SET_REGION_ENTR_TRIGGER 3508 //设置进入区域联动配置 +#define NET_DVR_GET_REGION_ENTR_SCHEDULE 3509 //获取进入区域布防时间配置 +#define NET_DVR_SET_REGION_ENTR_SCHEDULE 3510 //设置进入区域布防时间配置 +#define NET_DVR_GET_REGION_EXITINT_CAPABILITIES 3511 //获取离开区域侦测能力 +#define NET_DVR_GET_REGION_EXITING_DETECTION 3512 //获取离开区域配置 +#define NET_DVR_SET_REGION_EXITING_DETECTION 3513 //设置离开区域配置 +#define NET_DVR_GET_REGION_EXITING_REGION 3514 //获取离开区域的单个区域配置 +#define NET_DVR_SET_REGION_EXITING_REGION 3515 //设置离开区域的单个区域配置 +#define NET_DVR_GET_REGION_EXIT_TRIGGER 3516 //获取离开区域联动配置 +#define NET_DVR_SET_REGION_EXIT_TRIGGER 3517 //设置离开区域联动配置 +#define NET_DVR_GET_REGION_EXIT_SCHEDULE 3518 //获取离开区域布防时间配置 +#define NET_DVR_SET_REGION_EXIT_SCHEDULE 3519 //设置离开区域布防时间配置 +#define NET_DVR_GET_LOITERING_CAPABILITIES 3520 //获取徘徊侦测能力 +#define NET_DVR_GET_LOITERING_DETECTION 3521 //获取徘徊侦测配置 +#define NET_DVR_SET_LOITERING_DETECTION 3522 //设置徘徊侦测配置 +#define NET_DVR_GET_LOITERING_REGION 3523 //获取徘徊的单个区域配置 +#define NET_DVR_SET_LOITERING_REGION 3524 //设置徘徊的单个区域配置 +#define NET_DVR_GET_LOITERING_TRIGGER 3525 //获取徘徊联动配置 +#define NET_DVR_SET_LOITERING_TRIGGER 3526 //设置徘徊联动配置 +#define NET_DVR_GET_LOITERING_SCHEDULE 3527 //获取徘徊布防时间配置 +#define NET_DVR_SET_LOITERING_SCHEDULE 3528 //设置徘徊布防时间配置 +#define NET_DVR_GET_GROUPDETECTION_CAPABILITIES 3529 //获取人员聚集侦测能力 +#define NET_DVR_GET_GROUP_DETECTION 3530 //获取人员聚集侦测配置 +#define NET_DVR_SET_GROUP_DETECTION 3531 //设置人员聚集侦测配置 +#define NET_DVR_GET_GROUPDETECTION_REGION 3532 //获取人员聚集的单个区域配置 +#define NET_DVR_SET_GROUPDETECTION_REGION 3533 //设置人员聚集的单个区域配置 +#define NET_DVR_GET_GROUPDETECTION_TRIGGER 3534 //获取人员聚集联动配置 +#define NET_DVR_SET_GROUPDETECTION_TRIGGER 3535 //设置人员聚集联动配置 +#define NET_DVR_GET_GROUPDETECTION_SCHEDULE 3536 //获取人员聚集布防时间配置 +#define NET_DVR_SET_GROUPDETECTION_SCHEDULE 3537 //设置人员聚集布防时间配置 +#define NET_DVR_GET_RAPIDMOVE_CAPABILITIES 3538 //获取快速运动侦测能力 +#define NET_DVR_GET_RAPIDMOVE_DETECTION 3539 //获取快速运动侦测配置 +#define NET_DVR_SET_RAPIDMOVE_DETECTION 3540 //设置快速运动侦测配置 +#define NET_DVR_GET_RAPIDMOVE_REGION 3541 //获取快速运动的单个区域配置 +#define NET_DVR_SET_RAPIDMOVE_REGION 3542 //设置快速运动的单个区域配置 +#define NET_DVR_GET_RAPIDMOVE_TRIGGER 3543 //获取快速运动联动配置 +#define NET_DVR_SET_RAPIDMOVE_TRIGGER 3544 //设置快速运动联动配置 +#define NET_DVR_GET_RAPIDMOVE_SCHEDULE 3545 //获取快速运动的布防时间配置 +#define NET_DVR_SET_RAPIDMOVE_SCHEDULE 3546 //设置快速运动的布防时间配置 +#define NET_DVR_GET_PATKING_CAPABILITIES 3547 //获取停车侦测能力 +#define NET_DVR_GET_PARKING_DETECTION 3548 //获取停车侦测配置 +#define NET_DVR_SET_PARKING_DETECTION 3549 //设置停车侦测配置 +#define NET_DVR_GET_PARKING_REGION 3550 //获取停车侦测的单个区域配置 +#define NET_DVR_SET_PARKING_REGION 3551 //设置停车侦测的单个区域配置 +#define NET_DVR_GET_PARKING_TRIGGER 3552 //获取停车侦测联动配置 +#define NET_DVR_SET_PARKING_TRIGGER 3553 //设置停车侦测联动配置 +#define NET_DVR_GET_PARKING_SCHEDULE 3554 //获取停车侦测的布防时间配置 +#define NET_DVR_SET_PARKING_SCHEDULE 3555 //设置停车侦测的布防时间配置 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_CAPABILITIES 3556 //获取物品遗留侦测能力 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_DETECTION 3557 //获取物品遗留侦测配置 +#define NET_DVR_SET_UNATTENDED_BAGGAGE_DETECTION 3558 //设置物品遗留侦测配置 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_REGION 3559 //获取物品遗留侦测的单个区域配置 +#define NET_DVR_SET_UNATTENDED_BAGGAGE_REGION 3560 //设置物品遗留侦测的单个区域配置 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_TRIGGER 3561 //获取物品遗留侦测联动配置 +#define NET_DVR_SET_UNATTENDED_BAGGAGE_TRIGGER 3562 //设置物品遗留侦测联动配置 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_SCHEDULE 3563 //获取物品遗留侦测的布防时间配置 +#define NET_DVR_SET_UNATTENDED_BAGGAGE_SCHEDULE 3564 //设置物品遗留侦测的布防时间配置 +#define NET_DVR_GET_ATTENDEDBAGGAGE_CAPABILITIES 3565 //获取物品拿取侦测能力 +#define NET_DVR_GET_ATTENDEDBAGGAGE_DETECTION 3566 //获取物品拿取侦测配置 +#define NET_DVR_SET_ATTENDEDBAGGAGE_DETECTION 3567 //设置物品拿取侦测配置 +#define NET_DVR_GET_ATTENDEDBAGGAGE_REGION 3568 //获取物品拿取侦测的单个区域配置 +#define NET_DVR_SET_ATTENDEDBAGGAGE_REGION 3569 //设置物品拿取侦测的单个区域配置 +#define NET_DVR_GET_ATTENDEDBAGGAGE_TRIGGER 3570 //获取物品拿取侦测联动配置 +#define NET_DVR_SET_ATTENDEDBAGGAGE_TRIGGER 3571 //设置物品拿取侦测联动配置 +#define NET_DVR_GET_ATTENDEDBAGGAGE_SCHEDULE 3572 //获取物品遗留侦测的布防时间配置 +#define NET_DVR_SET_ATTENDEDBAGGAGE_SCHEDULE 3573 //设置物品拿取侦测的布防时间配置 +#define NET_DVR_GET_REGIONCLIP_CAPABILITIES 3574 //获取区域裁剪能力 +#define NET_DVR_GET_REGION_CLIP 3575 //获取区域裁剪配置 +#define NET_DVR_SET_REGION_CLIP 3576 //设置区域裁剪配置 +#define NET_DVR_GET_NETWORK_CAPABILITIES 3577 //获取网络能力 +#define NET_DVR_GET_WIRELESS_DIAL 3578 //获取无线参数配置 +#define NET_DVR_SET_WIRELESS_DIAL 3579 //设置无线参数配置 +#define NET_DVR_GET_WIRELESSDIAL_CAPABILITIES 3580 //获取无线拨号参数能力 +#define NET_DVR_GET_WIRELESSDIAL_SCHEDULE 3581 //获取拨号计划配置 +#define NET_DVR_SET_WIRELESSDIAL_SCHEDULE 3582 //设置拨号计划配置 +#define NET_DVR_GET_WIRELESSDIAL_STATUS 3583 //获取拨号状态 +#define NET_DVR_GET_REGION_ENTRANCE_SCHEDULE_CAPABILITIES 3584 //获取进入区域侦测布防时间能力 +#define NET_DVR_GET_REGION_EXITING_SCHEDULE_CAPABILITIES 3585 //获取离开区域侦测布防时间能力 +#define NET_DVR_GET_LOITERING_SCHEDULE_CAPABILITIES 3586 //获取徘徊侦测布防时间能力 +#define NET_DVR_GET_GROUP_SCHEDULE_CAPABILITIES 3587 //获取人员聚集侦测布防时间能力 +#define NET_DVR_GET_RAPIDMOVE_SCHEDULE_CAPABILITIES 3588 //获取快速运动侦测布防时间能力 +#define NET_DVR_GET_PARKING_SCHEDULE_CAPABILITIES 3589 //获取停车侦测布防时间能力 +#define NET_DVR_GET_UNATTENDEDBAGGAGE_SCHEDULE_CAPABILITIES 3590 //获取物品遗留侦测布防时间能力 +#define NET_DVR_GET_ATTENDEDBAGGAGE_SCHEDULE_CAPABILITIES 3591 //获取物品拿取侦测布防时间能力 +#define NET_DVR_GET_WIRELESSDIAL_SCHEDULE_CAPABILITIES 3592 //获取拨号计划能力 +#define NET_DVR_WIRELESSDIAL_CONNECT 3593 //控制无线网络连网断网 -#define NET_DVR_GET_LITESTORAGE 3594 //ȡ洢 -#define NET_DVR_SET_LITESTORAGE 3595 //洢 -#define NET_DVR_GET_LITESTORAGE_CAPABILITIES 3596 //ȡ洢 +#define NET_DVR_GET_LITESTORAGE 3594 //获取轻存储配置 +#define NET_DVR_SET_LITESTORAGE 3595 //设置轻存储配置 +#define NET_DVR_GET_LITESTORAGE_CAPABILITIES 3596 //获取轻存储能力 -#define NET_DVR_GET_VEHICLE_CAPABILITIES 3597 //ȡ궨 -#define NET_DVR_GET_VEHICLE_CALIBRATION 3598 //ȡ궨 +#define NET_DVR_GET_VEHICLE_CAPABILITIES 3597 //获取车俩检测标定能力 +#define NET_DVR_GET_VEHICLE_CALIBRATION 3598 //获取车辆检测标定 -#define NET_DVR_GET_SLAVECAMERA_CAPABILITIES 3599 //ȡIPϢ -#define NET_DVR_GET_SLAVECAMERA 3600 //ȡIPϢ -#define NET_DVR_SET_SLAVECAMERA 3601 //ôIPϢ -#define NET_DVR_GET_SLAVECAMERA_STATUS 3602 //ȡ״̬ -#define NET_DVR_GET_SLAVECAMERA_CALIB_CAPABILITIES 3603 //ȡ&&궨 -#define NET_DVR_GET_SLAVECAMERA_CALIB 3604 //ȡ궨 -#define NET_DVR_SET_SLAVECAMERA_CALIB 3605 //ô궨 -#define NET_DVR_GET_PHY_RATIO 3606 //ȡϢ -#define NET_DVR_SET_PHY_RATIO 3607 //Ϣ -#define NET_DVR_GET_MASTERSLAVETRACKING_CAPABILITIES 3608 //ȡ -#define NET_DVR_SET_TRACKINGRATIO 3610 //ô -#define NET_DVR_GET_TRACKING 3611 //ȡӹ -#define NET_DVR_SET_TRACKING 3612 //ӹ -#define NET_DVR_GET_TRACKING_CAPABILITIES 3613 //ȡӹ +#define NET_DVR_GET_SLAVECAMERA_CAPABILITIES 3599 //获取从摄像机IP信息配置能力 +#define NET_DVR_GET_SLAVECAMERA 3600 //获取从摄像机IP信息配置 +#define NET_DVR_SET_SLAVECAMERA 3601 //设置从摄像机IP信息配置 +#define NET_DVR_GET_SLAVECAMERA_STATUS 3602 //获取从摄像机连接状态 +#define NET_DVR_GET_SLAVECAMERA_CALIB_CAPABILITIES 3603 //获取从摄像机配置&&标定能力 +#define NET_DVR_GET_SLAVECAMERA_CALIB 3604 //获取从摄像机标定配置 +#define NET_DVR_SET_SLAVECAMERA_CALIB 3605 //设置从摄像机标定配置 +#define NET_DVR_GET_PHY_RATIO 3606 //获取物理倍率坐标信息 +#define NET_DVR_SET_PHY_RATIO 3607 //设置物理倍率坐标信息 +#define NET_DVR_GET_MASTERSLAVETRACKING_CAPABILITIES 3608 //获取主从能力 +#define NET_DVR_SET_TRACKINGRATIO 3610 //设置从摄像机倍率 +#define NET_DVR_GET_TRACKING 3611 //获取主从功能相机配置 +#define NET_DVR_SET_TRACKING 3612 //设置主从功能相机配置 +#define NET_DVR_GET_TRACKING_CAPABILITIES 3613 //获取主从功能相机配置能力 -#define NET_DVR_GET_SLAVECAMERA_CALIB_V50 3614 //ȡ궨V50 -#define NET_DVR_SET_SLAVECAMERA_CALIB_V50 3615 //ô궨V50 -#define NET_DVR_SET_TRACKINGRATIO_MANUAL 3616 //ôֶ -#define NET_DVR_GET_TRACKINGRATIO_MANUAL 3617 //ȡֶ -#define NET_DVR_SET_TRACK_INITPOSTION 3618 //ôʼλ -#define NET_DVR_GET_PTZ_CAPABILITIES 3619 //ȡptz +#define NET_DVR_GET_SLAVECAMERA_CALIB_V50 3614 //获取从摄像机标定配置V50 +#define NET_DVR_SET_SLAVECAMERA_CALIB_V50 3615 //设置从摄像机标定配置V50 +#define NET_DVR_SET_TRACKINGRATIO_MANUAL 3616 //设置从摄像机手动倍率 +#define NET_DVR_GET_TRACKINGRATIO_MANUAL 3617 //获取从摄像机手动倍率 +#define NET_DVR_SET_TRACK_INITPOSTION 3618 //设置从摄像机初始位置 +#define NET_DVR_GET_PTZ_CAPABILITIES 3619 //获取ptz球机控制能力 -#define NET_DVR_GET_THERMOMETRY_BASICPARAM_CAPABILITIES 3620 //ȡ -#define NET_DVR_GET_THERMOMETRY_BASICPARAM 3621 //ȡò -#define NET_DVR_SET_THERMOMETRY_BASICPARAM 3622 //òò -#define NET_DVR_GET_THERMOMETRY_SCENE_CAPABILITIES 3623 //ȡԤõ -#define NET_DVR_GET_THERMOMETRY_PRESETINFO 3624 //ȡԤõò -#define NET_DVR_SET_THERMOMETRY_PRESETINFO 3625 //òԤõò -#define NET_DVR_GET_THERMOMETRY_ALARMRULE_CAPABILITIES 3626//ȡ±ʽ -#define NET_DVR_GET_THERMOMETRY_ALARMRULE 3627 //ȡԤõ㱨ò -#define NET_DVR_SET_THERMOMETRY_ALARMRULE 3628 //òԤõ㱨ò -#define NET_DVR_GET_REALTIME_THERMOMETRY 3629 //ʵʱ¶ȼ -#define NET_DVR_GET_THERMOMETRY_DIFFCOMPARISON 3630 //ȡԤõ²ò -#define NET_DVR_SET_THERMOMETRY_DIFFCOMPARISON 3631 //òԤõ²ò -#define NET_DVR_GET_THERMOMETRY_TRIGGER 3632 //ȡ -#define NET_DVR_SET_THERMOMETRY_TRIGGER 3633 //ò +#define NET_DVR_GET_THERMOMETRY_BASICPARAM_CAPABILITIES 3620 //获取测温配置能力 +#define NET_DVR_GET_THERMOMETRY_BASICPARAM 3621 //获取测温配置参数 +#define NET_DVR_SET_THERMOMETRY_BASICPARAM 3622 //设置测温配置参数 +#define NET_DVR_GET_THERMOMETRY_SCENE_CAPABILITIES 3623 //获取测温预置点关联配置能力 +#define NET_DVR_GET_THERMOMETRY_PRESETINFO 3624 //获取测温预置点关联配置参数 +#define NET_DVR_SET_THERMOMETRY_PRESETINFO 3625 //设置测温预置点关联配置参数 +#define NET_DVR_GET_THERMOMETRY_ALARMRULE_CAPABILITIES 3626//获取测温报警方式配置能力 +#define NET_DVR_GET_THERMOMETRY_ALARMRULE 3627 //获取测温预置点报警规则配置参数 +#define NET_DVR_SET_THERMOMETRY_ALARMRULE 3628 //设置测温预置点报警规则配置参数 +#define NET_DVR_GET_REALTIME_THERMOMETRY 3629 //实时温度检测 +#define NET_DVR_GET_THERMOMETRY_DIFFCOMPARISON 3630 //获取测温预置点温差规则配置参数 +#define NET_DVR_SET_THERMOMETRY_DIFFCOMPARISON 3631 //设置测温预置点温差规则配置参数 +#define NET_DVR_GET_THERMOMETRY_TRIGGER 3632 //获取测温联动配置 +#define NET_DVR_SET_THERMOMETRY_TRIGGER 3633 //设置测温联动配置 -#define NET_DVR_GET_THERMAL_CAPABILITIES 3634 //ȡȳThermal -#define NET_DVR_GET_FIREDETECTION_CAPABILITIES 3635 //ȡ -#define NET_DVR_GET_FIREDETECTION 3636 //ȡ -#define NET_DVR_SET_FIREDETECTION 3637 //û -#define NET_DVR_GET_FIREDETECTION_TRIGGER 3638 //ȡ -#define NET_DVR_SET_FIREDETECTION_TRIGGER 3639 //û +#define NET_DVR_GET_THERMAL_CAPABILITIES 3634 //获取热成像(Thermal)能力 +#define NET_DVR_GET_FIREDETECTION_CAPABILITIES 3635 //获取火点检测配置能力 +#define NET_DVR_GET_FIREDETECTION 3636 //获取火点检测参数 +#define NET_DVR_SET_FIREDETECTION 3637 //设置火点检测参数 +#define NET_DVR_GET_FIREDETECTION_TRIGGER 3638 //获取火点检测联动配置 +#define NET_DVR_SET_FIREDETECTION_TRIGGER 3639 //设置火点检测联动配置 -#define NET_DVR_GET_OIS_CAPABILITIES 3640 //ȡѧ -#define NET_DVR_GET_OIS_CFG 3641 //ȡѧ -#define NET_DVR_SET_OIS_CFG 3642 //ùѧ -#define NET_DVR_GET_MACFILTER_CAPABILITIES 3643 //ȡMACַ -#define NET_DVR_GET_MACFILTER_CFG 3644 //ȡMACַ -#define NET_DVR_SET_MACFILTER_CFG 3645 //MACַ -#define NET_DVR_GET_EAGLEFOCUS_CALCFG_CAPABILITIES 3646 //ӥӾ۽궨 -#define NET_DVR_GET_EAGLEFOCUSING_CALCFG 3647 //ȡӥӾ۽궨 -#define NET_DVR_SET_EAGLEFOCUSING_CALCFG 3648 //ӥӾ۽궨 -#define NET_DVR_GET_EAGLEFOCUSING_CFG_CAPABILITIES 3649 //ȡӥӾ۽ -#define NET_DVR_GET_EAGLEFOCUSING_CTRL 3650 //ȡӥӾ۽ -#define NET_DVR_SET_EAGLEFOCUSING_CTRL 3651 //ӥӾ۽ +#define NET_DVR_GET_OIS_CAPABILITIES 3640 //获取光学防抖参数配置能力 +#define NET_DVR_GET_OIS_CFG 3641 //获取光学防抖配置 +#define NET_DVR_SET_OIS_CFG 3642 //设置光学防抖配置 +#define NET_DVR_GET_MACFILTER_CAPABILITIES 3643 //获取MAC地址过滤配置能力 +#define NET_DVR_GET_MACFILTER_CFG 3644 //获取MAC地址过滤配置 +#define NET_DVR_SET_MACFILTER_CFG 3645 //设置MAC地址过滤配置 +#define NET_DVR_GET_EAGLEFOCUS_CALCFG_CAPABILITIES 3646 //鹰视聚焦标定配置能力 +#define NET_DVR_GET_EAGLEFOCUSING_CALCFG 3647 //获取鹰视聚焦标定配置 +#define NET_DVR_SET_EAGLEFOCUSING_CALCFG 3648 //设置鹰视聚焦标定配置 +#define NET_DVR_GET_EAGLEFOCUSING_CFG_CAPABILITIES 3649 //获取鹰视聚焦配置能力 +#define NET_DVR_GET_EAGLEFOCUSING_CTRL 3650 //获取鹰视聚焦配置 +#define NET_DVR_SET_EAGLEFOCUSING_CTRL 3651 //设置鹰视聚焦配置 -#define NET_DVR_GET_PXOFFLINE_CAPABILITIES 3652 //ȡͣƱѻ² -#define NET_DVR_SET_PXOFFLINE_CFG 3653 //ͣƱѻ²Ϣ -#define NET_DVR_GET_PXOFFLINE_CFG 3654 //ȡͣƱѻ²Ϣ -#define NET_DVR_GET_PAPERCHARGEINFO_CAPABILITIES 3655 //ȡֽͣƱϢ· -#define NET_DVR_SET_PAPERCHARGEINFO 3656 //ֽͣƱϢ· -#define NET_DVR_GET_PARKINGSAPCE_CAPABILITIES 3657 //ȡͣͣλϢ· -#define NET_DVR_SET_PARKINGSAPCE_INFO 3658 //ͣͣλϢ· -#define NET_DVR_GET_PXMULTICTRL_CAPABILITIES 3659 //ȡͣƱ豸ǶȲ -#define NET_DVR_GET_CHARGEACCOUNT_CAPABILITIES 3661 //ȡͣƱ -#define NET_DVR_SET_CHARGE_ACCOUNTINFO 3662 //ýɷѽϢ -#define NET_DVR_SET_PXMULTICTRL_CFG 3663 //ͣƱ豸ǶȲϢ -#define NET_DVR_GET_PXMULTICTRL_CFG 3664 //ȡͣƱ豸ǶȲϢ -#define NET_DVR_GET_TME_CHARGERULE 3665 //ȡͣڳշѹ -#define NET_DVR_SET_TME_CHARGERULE 3666 //ͣڳշѹ -#define NET_DVR_GET_TME_CHARGERULE_CAPABILITIES 3667 //ȡͣ շϢ -#define NET_DVR_GET_ILLEGALCARDFILTERING_CAPABILITIES 3668 //ȡͣƱ -#define NET_DVR_GET_ILLEGALCARDFILTERING_CFG 3669 //ȡͣƱ -#define NET_DVR_SET_ILLEGALCARDFILTERING_CFG 3670 //ͣƱ -#define NET_DVR_GET_LEDDISPLAY_CAPABILITIES 3671 //ȡLEDĻʾò -#define NET_DVR_SET_LEDDISPLAY_CFG 3672 //LEDĻʾ -#define NET_DVR_GET_LEDDISPLAY_CFG 3673 //ȡLEDĻʾ -#define NET_DVR_GET_VOICEBROADCAST_CAPABILITIES 3674 //ȡƲò -#define NET_DVR_SET_VOICEBROADCAST_CFG 3675 //Ʋ -#define NET_DVR_GET_PAPERPRINTFORMAT_CAPABILITIES 3676//ȡֽƱӡʽ -#define NET_DVR_GET_PAPERPRINTFORMAT_CFG 3677 //ȡֽƱӡʽ -#define NET_DVR_SET_PAPERPRINTFORMAT_CFG 3678 //ֽƱӡʽ -#define NET_DVR_GET_LOCkGATE_CAPABILITIES 3679 //ȡբ -#define NET_DVR_GET_LOCKGATE_CFG 3680 //ȡբ -#define NET_DVR_SET_LOCKGATE_CFG 3681 //բ -#define NET_DVR_GET_PARKING_DATASTATE 3682 //ȡͬ״̬ -#define NET_DVR_SET_PARKING_DATASTATE 3683 //ͬ״̬ -#define NET_DVR_GET_TME_CAPABILITIES 3684 //ȡͣ豸 +#define NET_DVR_GET_PXOFFLINE_CAPABILITIES 3652 //获取停车场票箱脱机下参数配置 能力 +#define NET_DVR_SET_PXOFFLINE_CFG 3653 //设置停车场票箱脱机下参数配置信息 +#define NET_DVR_GET_PXOFFLINE_CFG 3654 //获取停车场票箱脱机下参数配置信息 +#define NET_DVR_GET_PAPERCHARGEINFO_CAPABILITIES 3655 //获取停车场出入口纸票信息下发 能力 +#define NET_DVR_SET_PAPERCHARGEINFO 3656 //设置停车场出入口纸票信息下发 +#define NET_DVR_GET_PARKINGSAPCE_CAPABILITIES 3657 //获取停车场出入口停车位信息下发 能力 +#define NET_DVR_SET_PARKINGSAPCE_INFO 3658 //设置停车场出入口停车位信息下发 +#define NET_DVR_GET_PXMULTICTRL_CAPABILITIES 3659 //获取停车场票箱从属设备多角度参数配置 能力 +#define NET_DVR_GET_CHARGEACCOUNT_CAPABILITIES 3661 //获取停车场票箱参数配置能力 +#define NET_DVR_SET_CHARGE_ACCOUNTINFO 3662 //设置缴费金额信息 +#define NET_DVR_SET_PXMULTICTRL_CFG 3663 //设置停车场票箱从属设备多角度参数配置信息 +#define NET_DVR_GET_PXMULTICTRL_CFG 3664 //获取停车场票箱从属设备多角度参数配置信息 +#define NET_DVR_GET_TME_CHARGERULE 3665 //获取停车场出入口车卡收费规则规则 +#define NET_DVR_SET_TME_CHARGERULE 3666 //设置停车场出入口车卡收费规则规则 +#define NET_DVR_GET_TME_CHARGERULE_CAPABILITIES 3667 //获取停车场出入口 车卡收费信息配置能力 +#define NET_DVR_GET_ILLEGALCARDFILTERING_CAPABILITIES 3668 //获取停车场票箱参数配置能力 +#define NET_DVR_GET_ILLEGALCARDFILTERING_CFG 3669 //获取停车场票箱参数配置 +#define NET_DVR_SET_ILLEGALCARDFILTERING_CFG 3670 //设置停车场票箱参数配置 +#define NET_DVR_GET_LEDDISPLAY_CAPABILITIES 3671 //获取LED屏幕显示参数配置参数能力 +#define NET_DVR_SET_LEDDISPLAY_CFG 3672 //设置LED屏幕显示参数 +#define NET_DVR_GET_LEDDISPLAY_CFG 3673 //获取LED屏幕显示参数 +#define NET_DVR_GET_VOICEBROADCAST_CAPABILITIES 3674 //获取语音播报控制参数配置参数能力 +#define NET_DVR_SET_VOICEBROADCAST_CFG 3675 //设置语音播报控制参数 +#define NET_DVR_GET_PAPERPRINTFORMAT_CAPABILITIES 3676//获取纸票打印格式配置能力 +#define NET_DVR_GET_PAPERPRINTFORMAT_CFG 3677 //获取纸票打印格式参数配置 +#define NET_DVR_SET_PAPERPRINTFORMAT_CFG 3678 //设置纸票打印格式参数配置 +#define NET_DVR_GET_LOCkGATE_CAPABILITIES 3679 //获取智能锁闸配置能力 +#define NET_DVR_GET_LOCKGATE_CFG 3680 //获取智能锁闸参数配置 +#define NET_DVR_SET_LOCKGATE_CFG 3681 //设置智能锁闸参数配置 +#define NET_DVR_GET_PARKING_DATASTATE 3682 //获取数据同步状态 +#define NET_DVR_SET_PARKING_DATASTATE 3683 //设置数据同步状态 +#define NET_DVR_GET_TME_CAPABILITIES 3684 //获取停车场出入口设备 能力 -#define NET_DVR_GET_TMEVOICE_CAPABILITIES 3686 //ȡϢ -#define NET_DVR_SET_TMEVOICE_CFG 3687 // -#define NET_DVR_GET_TMEVOICE_CFG 3688 //ȡ -#define NET_DVR_DEL_TMEVOICE_CFG 3689 //ɾ -#define NET_DVR_GET_POSITION 3698 // ȡλò -#define NET_DVR_SET_POSITION 3699 // ÷λò -#define NET_DVR_GET_CENTRALIZEDCTRL_CAPABILITIES 3700//ȡв -#define NET_DVR_GET_CENTRALIZEDCTRL 3701//ȡв -#define NET_DVR_SET_CENTRALIZEDCTRL 3702//üв -#define NET_DVR_GET_COMPASS_CAPABILITIES 3703//ȡ -#define NET_DVR_GET_VANDALPROOFALARM 3704//ȡƻ -#define NET_DVR_SET_VANDALPROOFALARM 3705//÷ƻ -#define NET_DVR_COMPASS_CALIBRATE_CTRL 3706//̽ƽӿ -#define NET_DVR_COMPASS_NORTH_CTRL 3707//ָƽӿ -#define NET_DVR_GET_AZIMUTHINFO 3708//ȡλǶȲ +#define NET_DVR_GET_TMEVOICE_CAPABILITIES 3686 //获取语音配置信息能力 +#define NET_DVR_SET_TMEVOICE_CFG 3687 //设置语音参数配置 +#define NET_DVR_GET_TMEVOICE_CFG 3688 //获取语音参数配置 +#define NET_DVR_DEL_TMEVOICE_CFG 3689 //删除语音参数配置 +#define NET_DVR_GET_POSITION 3698 // 获取方位矫正配置参数 +#define NET_DVR_SET_POSITION 3699 // 设置方位矫正配置参数 +#define NET_DVR_GET_CENTRALIZEDCTRL_CAPABILITIES 3700//获取集中布防能力 +#define NET_DVR_GET_CENTRALIZEDCTRL 3701//获取集中布防参数配置 +#define NET_DVR_SET_CENTRALIZEDCTRL 3702//设置集中布防参数配置 +#define NET_DVR_GET_COMPASS_CAPABILITIES 3703//获取电子罗盘能力 +#define NET_DVR_GET_VANDALPROOFALARM 3704//获取防破坏报警参数配置 +#define NET_DVR_SET_VANDALPROOFALARM 3705//设置防破坏报警参数配置 +#define NET_DVR_COMPASS_CALIBRATE_CTRL 3706//电子罗盘矫正控制接口 +#define NET_DVR_COMPASS_NORTH_CTRL 3707//电子罗盘指向正北控制接口 +#define NET_DVR_GET_AZIMUTHINFO 3708//获取方位角度参数配置 -#define NET_DVR_GET_SATELLITETIME 3709//ȡǶλ -#define NET_DVR_SET_SATELLITETIME 3710//Ƕλ -#define NET_DVR_GET_GISINFO 3711//ȡǰGISϢ -#define NET_DVR_GET_STREAMING_CAPABILITIES 3712//ȡƵ -#define NET_DVR_GET_REFRESHFRAME_CAPABILITIES 3713//ȡˢ֡ -#define NET_DVR_STREAMING_REFRESH_FRAME 3714//ȡԤǿˢ֡ -#define NET_DVR_FACECAPTURE_STATISTICS 3715//Աͳ -#define NET_DVR_GET_WIRELESSSERVER_CAPABILITIES 3716 //ȡȵ㹦Э -#define NET_DVR_GET_WIRELESSSERVER 3717 //ȡȵ㹦Э -#define NET_DVR_SET_WIRELESSSERVER 3718 //ȵ㹦Э -#define NET_DVR_GET_CONNECT_LIST_CAPABILITIES 3719 //ȡ豸бϢ -#define NET_DVR_GET_THSCREEN_CAPABILITIES 3720 //ȡʪЭ -#define NET_DVR_GET_THSCREEN 3721 //ȡʪЭ -#define NET_DVR_GET_EXTERNALDEVICE_CAPABILITIES 3722//ȡЭ -#define NET_DVR_GET_EXTERNALDEVICE 3723//ȡЭ -#define NET_DVR_SET_EXTERNALDEVICE 3724//Э -#define NET_DVR_GET_LEDDISPLAYINFO_CAPABILITIES 3725 //ȡLEDʾϢ -#define NET_DVR_SET_LEDDISPLAYINFO 3726 //LEDʾϢ -#define NET_DVR_GET_SUPPLEMENTLIGHT_CAPABILITIES 3727 //ȡòЭ (֧֣ʵ֣豸ڲ) -#define NET_DVR_GET_SUPPLEMENTLIGHT 3728 //ȡòЭ -#define NET_DVR_SET_SUPPLEMENTLIGHT 3729 //òЭ -#define NET_DVR_SET_THSCREEN 3730 //ʪЭ -#define NET_DVR_GET_LOWPOWER_CAPABILITIES 3731 //ȡ͹Э -#define NET_DVR_GET_LOWPOWER 3732 //ȡ͹Э -#define NET_DVR_SET_LOWPOWER 3733 //õ͹Э -#define NET_DVR_GET_ZOOMLINKAGE_CAPABILITIES 3734 //ȡ䱶Э -#define NET_DVR_GET_ZOOMLINKAGE 3735 //ȡ䱶Э -#define NET_DVR_SET_ZOOMLINKAGE 3736 //ñ䱶Э -#define NET_DVR_THSCREEN_TIMING 3737 //ʪ -#define NET_DVR_GET_OSD_BATTERY_POWER_CFG 3741 //ȡOSDصʾ -#define NET_DVR_SET_OSD_BATTERY_POWER_CFG 3742 //OSDصʾ -#define NET_DVR_GET_OSD_BATTERY_POWER_CFG_CAPABILITIES 3743//OSDصʾ -#define NET_DVR_GET_VANDALPROOFALARM_TRIGGER 3744 //ȡƻ -#define NET_DVR_SET_VANDALPROOFALARM_TRIGGER 3745 //÷ƻ -#define NET_DVR_GET_PANORAMAIMAGE_CAPABILITIES 3746 //ȡȫͼ -#define NET_DVR_GET_PANORAMAIMAGE 3747 //ȡȫͼЭ -#define NET_DVR_SET_PANORAMAIMAGE 3748 //ȫͼЭ -#define NET_DVR_GET_STREAMENCRYPTION 3749 //ȡ -#define NET_DVR_SET_STREAMENCRYPTION 3750 // -#define NET_DVR_GET_STREAMENCRYPTION_CAPABILITIES 3751 //ȡ -#define NET_DVR_GET_REVISE_GPS_CAPABILITIES 3752 //ȡУ׼GPSγ -#define NET_DVR_GET_REVISE_GPS 3753 //ȡУ׼GPSγ -#define NET_DVR_SET_REVISE_GPS 3754 //У׼GPSγ -#define NET_DVR_GET_PDC_RECOMMEND 3755 //ȡͳƱʾƼֵ -#define NET_DVR_REMOVE_FLASHSTORAGE 3756 // -#define NET_DVR_GET_COUNTING_CAPABILITIES 3757 //ȡͳ -#define NET_DVR_SET_SENSOR_ADJUSTMENT 3758 //Sensor ڲЭ -#define NET_DVR_GET_SENSOR_ADJUSTMENT_CAPABILITIES 3759 //ȡSensor ڲЭ -#define NET_DVR_GET_WIRELESSSERVER_FULLVERSION_CFG 3760 //ȡwifiȵ() -#define NET_DVR_SET_WIRELESSSERVER_FULLVERSION_CFG 3761 //wifiȵ() -#define NET_DVR_GET_ONLINEUSER_INFO 3762 //ӻȡûϢ -#define NET_DVR_GET_SENSOR_ADJUSTMENT_INFO 3763 //ȡָsensorڲ -#define NET_DVR_SENSOR_RESET_CTRL 3764 //Sensor ڸλ +#define NET_DVR_GET_SATELLITETIME 3709//获取卫星定位参数配置 +#define NET_DVR_SET_SATELLITETIME 3710//设置卫星定位参数配置 +#define NET_DVR_GET_GISINFO 3711//获取当前球机的GIS信息数据 +#define NET_DVR_GET_STREAMING_CAPABILITIES 3712//获取视频流的能力 +#define NET_DVR_GET_REFRESHFRAME_CAPABILITIES 3713//获取刷新帧的能力 +#define NET_DVR_STREAMING_REFRESH_FRAME 3714//取流预览的强制刷新帧 +#define NET_DVR_FACECAPTURE_STATISTICS 3715//长连接人员统计 +#define NET_DVR_GET_WIRELESSSERVER_CAPABILITIES 3716 //获取热点功能配置协议的能力 +#define NET_DVR_GET_WIRELESSSERVER 3717 //获取热点功能配置协议 +#define NET_DVR_SET_WIRELESSSERVER 3718 //设置热点功能配置协议 +#define NET_DVR_GET_CONNECT_LIST_CAPABILITIES 3719 //获取连接设备列表信息的能力 +#define NET_DVR_GET_THSCREEN_CAPABILITIES 3720 //获取温湿度配置协议的能力 +#define NET_DVR_GET_THSCREEN 3721 //获取温湿度配置协议 +#define NET_DVR_GET_EXTERNALDEVICE_CAPABILITIES 3722//获取外设配置协议的能力 +#define NET_DVR_GET_EXTERNALDEVICE 3723//获取外设配置协议 +#define NET_DVR_SET_EXTERNALDEVICE 3724//设置外设配置协议 +#define NET_DVR_GET_LEDDISPLAYINFO_CAPABILITIES 3725 //获取LED显示信息的能力 +#define NET_DVR_SET_LEDDISPLAYINFO 3726 //设置LED显示信息 +#define NET_DVR_GET_SUPPLEMENTLIGHT_CAPABILITIES 3727 //获取内置补光灯配置协议的能力 (球机支持,软件实现,补光灯是设计在设备内部的) +#define NET_DVR_GET_SUPPLEMENTLIGHT 3728 //获取内置补光灯配置协议 +#define NET_DVR_SET_SUPPLEMENTLIGHT 3729 //设置内置补光灯配置协议 +#define NET_DVR_SET_THSCREEN 3730 //设置温湿度配置协议 +#define NET_DVR_GET_LOWPOWER_CAPABILITIES 3731 //获取低功耗配置协议的能力 +#define NET_DVR_GET_LOWPOWER 3732 //获取低功耗配置协议 +#define NET_DVR_SET_LOWPOWER 3733 //设置低功耗配置协议 +#define NET_DVR_GET_ZOOMLINKAGE_CAPABILITIES 3734 //获取变倍联动配置协议的能力 +#define NET_DVR_GET_ZOOMLINKAGE 3735 //获取变倍联动配置协议 +#define NET_DVR_SET_ZOOMLINKAGE 3736 //设置变倍联动配置协议 +#define NET_DVR_THSCREEN_TIMING 3737 //温湿度 +#define NET_DVR_GET_OSD_BATTERY_POWER_CFG 3741 //获取OSD电池电量显示参数 +#define NET_DVR_SET_OSD_BATTERY_POWER_CFG 3742 //设置OSD电池电量显示参数 +#define NET_DVR_GET_OSD_BATTERY_POWER_CFG_CAPABILITIES 3743//OSD电池电量显示参数的能力 +#define NET_DVR_GET_VANDALPROOFALARM_TRIGGER 3744 //获取防破坏报警联动配置 +#define NET_DVR_SET_VANDALPROOFALARM_TRIGGER 3745 //设置防破坏报警联动配置 +#define NET_DVR_GET_PANORAMAIMAGE_CAPABILITIES 3746 //获取全景图像的能力 +#define NET_DVR_GET_PANORAMAIMAGE 3747 //获取全景图像参数的协议 +#define NET_DVR_SET_PANORAMAIMAGE 3748 //设置全景图像参数的协议 +#define NET_DVR_GET_STREAMENCRYPTION 3749 //获取码流加密配置 +#define NET_DVR_SET_STREAMENCRYPTION 3750 //设置码流加密配置 +#define NET_DVR_GET_STREAMENCRYPTION_CAPABILITIES 3751 //获取码流加密能力 +#define NET_DVR_GET_REVISE_GPS_CAPABILITIES 3752 //获取校准GPS经纬度能力 +#define NET_DVR_GET_REVISE_GPS 3753 //获取校准GPS经纬度能力 +#define NET_DVR_SET_REVISE_GPS 3754 //设置校准GPS经纬度能力 +#define NET_DVR_GET_PDC_RECOMMEND 3755 //获取客流统计表示推荐值 +#define NET_DVR_REMOVE_FLASHSTORAGE 3756 //客流数据清除操作 +#define NET_DVR_GET_COUNTING_CAPABILITIES 3757 //获取客流量统计能力 +#define NET_DVR_SET_SENSOR_ADJUSTMENT 3758 //设置Sensor 调节参数的协议 +#define NET_DVR_GET_SENSOR_ADJUSTMENT_CAPABILITIES 3759 //获取Sensor 调节参数的协议的能力 +#define NET_DVR_GET_WIRELESSSERVER_FULLVERSION_CFG 3760 //获取wifi热点参数配置(完整版) +#define NET_DVR_SET_WIRELESSSERVER_FULLVERSION_CFG 3761 //设置wifi热点参数配置(完整版) +#define NET_DVR_GET_ONLINEUSER_INFO 3762 //长连接获取用户在线信息 +#define NET_DVR_GET_SENSOR_ADJUSTMENT_INFO 3763 //获取指定sensor调节参数 +#define NET_DVR_SENSOR_RESET_CTRL 3764 //Sensor 调节复位 -#define NET_DVR_GET_POSTRADAR_CAPABILITIES 3765 //ȡ״ -#define NET_DVR_GET_POSTRADARSPEED_CFG 3766 //ȡ״ -#define NET_DVR_SET_POSTRADARSPEED_CFG 3767 //״ -#define NET_DVR_GET_POSTRADARSPEED_RECOM_CFG 3768 //ȡ״Ƽֵ -#define NET_DVR_GET_POSTRADARPARAM_CFG 3769 //ȡ״ -#define NET_DVR_SET_POSTRADARPARAM_CFG 3770 //״ -#define NET_DVR_GET_POSTRADARPARAM_RECOM_CFG 3771 //ȡ״Ƽֵ +#define NET_DVR_GET_POSTRADAR_CAPABILITIES 3765 //获取雷达测速配置能力 +#define NET_DVR_GET_POSTRADARSPEED_CFG 3766 //获取雷达测速配置 +#define NET_DVR_SET_POSTRADARSPEED_CFG 3767 //设置雷达测速配置 +#define NET_DVR_GET_POSTRADARSPEED_RECOM_CFG 3768 //获取雷达测速推荐值 +#define NET_DVR_GET_POSTRADARPARAM_CFG 3769 //获取雷达参数配置 +#define NET_DVR_SET_POSTRADARPARAM_CFG 3770 //设置雷达参数配置 +#define NET_DVR_GET_POSTRADARPARAM_RECOM_CFG 3771 //获取雷达参数推荐值 -#define NET_DVR_GET_ENCRYPT_DEVICE_INFO 3772 //ȡ豸Ϣ -#define NET_DVR_GET_ANR_ARMING_HOST 3773 //ȡϢ +#define NET_DVR_GET_ENCRYPT_DEVICE_INFO 3772 //获取加密设备信息 +#define NET_DVR_GET_ANR_ARMING_HOST 3773 //获取断网续传的主机信息 #define NET_DVR_GET_FIRMWARE_VERSION 3776 //GET firmware version -/********************************IPCFF****************************/ -#define NET_DVR_GET_FTP_CAPABILITIES 3782 //ȡftp -#define NET_DVR_GET_FTPUPLOAD_CFG 3783 //ȡftpϴϢ -#define NET_DVR_SET_FTPUPLOAD_CFG 3784 //ftpϴϢ -#define NET_DVR_GET_VEHICLE_INFORMATION 3785 //ȡϢ -#define NET_DVR_GET_DDNS_COUNTRY_ABILITY 3800//ȡ豸ֵ֧DDNSб -#define NET_DVR_GET_DEVICECFG_V50 3801 //ȡ豸 -#define NET_DVR_SET_DEVICECFG_V50 3802 //豸 -#define NET_DVR_SET_VEHICLE_RECOG_TASK_V50 3851 //ʶύV50չ -#define NET_DVR_GET_SMARTCALIBRATION_CAPABILITIES 3900// SmartΪ궨˳ߴ繦 -#define NET_DVR_GET_TEMPERATURE_TRIGGER 3903 //ȡ² -#define NET_DVR_SET_TEMPERATURE_TRIGGER 3904 //ò² +/********************************IPC基线FF车牌****************************/ +#define NET_DVR_GET_FTP_CAPABILITIES 3782 //获取ftp能力 +#define NET_DVR_GET_FTPUPLOAD_CFG 3783 //获取ftp上传信息规整参数 +#define NET_DVR_SET_FTPUPLOAD_CFG 3784 //设置ftp上传信息规整参数 +#define NET_DVR_GET_VEHICLE_INFORMATION 3785 //获取车辆信息 +#define NET_DVR_GET_DDNS_COUNTRY_ABILITY 3800//获取设备支持的DDNS国家能力列表 +#define NET_DVR_GET_DEVICECFG_V50 3801 //获取设备参数 +#define NET_DVR_SET_DEVICECFG_V50 3802 //设置设备参数 +#define NET_DVR_SET_VEHICLE_RECOG_TASK_V50 3851 //车辆二次识别任务提交V50扩展 +#define NET_DVR_GET_SMARTCALIBRATION_CAPABILITIES 3900// Smart行为标定过滤尺寸功能能力 +#define NET_DVR_GET_TEMPERATURE_TRIGGER 3903 //获取测温差联动配置 +#define NET_DVR_SET_TEMPERATURE_TRIGGER 3904 //设置测温差联动配置 -#define NET_DVR_GET_SMARTCALIBRATION_CFG 3910 //ȡSmartΪ궨˳ߴ繦 -#define NET_DVR_SET_SMARTCALIBRATION_CFG 3911 //SmartΪ궨˳ߴ繦 -#define NET_DVR_POST_SETUP_CALIB 3912 //궨 -#define NET_DVR_SET_POS_INFO_OVERLAY 3913//PosϢӿ -#define NET_DVR_GET_POS_INFO_OVERLAY 3914//ȡPosϢӿ -#define NET_DVR_GET_CAMERA_WORK_MODE 3915 //ģʽ -#define NET_DVR_SET_CAMERA_WORK_MODE 3916 //ȡģʽ -#define NET_DVR_GET_RESOLUTION_SWITCH_CAPABILITIES 3917 //ȡֱģʽл -#define NET_DVR_GET_RESOLUTION_SWITCH 3918 //ȡֱģʽл -#define NET_DVR_SET_RESOLUTION_SWITCH 3919 //÷ֱģʽл -#define NET_DVR_GET_CONFIRM_MECHANISM_CAPABILITIES 3920 //ϴȷϻƿ -#define NET_DVR_CONFIRM_MECHANISM_CTRL 3921 //ϴȷϻƿ -#define NET_DVR_GET_VEHICLLE_RESULT_CAPABILITIES 3951 //ȡȡϢ -#define NET_DVR_GET_CALIB_CAPABILITIES 3952//ȡ궨 -#define NET_DVR_GET_POSINFO_OVERLAY_CAPABILITIES 3953//ȡȡPos -#define NET_SDK_FINDMEDICALFILE 3954 //ӰƼǻҽƲ¼ļ -#define NET_SDK_FINDMEDICALPICTURE 3955 //ӰƼǻҽƲͼƬļ -#define NET_DVR_SET_POSINFO_OVERLAY 3960//Pos -#define NET_DVR_GET_POSINFO_OVERLAY 3961//ȡPos -#define NET_DVR_GET_FACELIB_TRIGGER 3962 //ȡȶԿ -#define NET_DVR_SET_FACELIB_TRIGGER 3963 //ȶԿ -#define NET_DVR_GET_FACECONTRAST_TRIGGER 3965//ȡȶ -#define NET_DVR_SET_FACECONTRAST_TRIGGER 3966//ȶ -#define NET_DVR_GET_FACECONTRAST_SCHEDULE_CAPABILITIES 3967 //ȡȶԲʱ -#define NET_DVR_GET_FACECONTRAST_SCHEDULE 3968//ȡȶԲʱ -#define NET_DVR_SET_FACECONTRAST_SCHEDULE 3969//ȶԲʱ -#define NET_DVR_GET_FACELIB_SCHEDULE_CAPABILITIES 3970 //ȡȶԿIJʱ -#define NET_DVR_GET_VCA_VERSION_LIST 3973//ȡ㷨汾 -#define NET_DVR_GET_SETUP_CALIB 3974//ȡ궨 -#define NET_DVR_GET_PANORAMA_LINKAGE 3975//ȡץͼϴʹ -#define NET_DVR_SET_PANORAMA_LINKAGE 3976//ץͼϴʹ -#define NET_DVR_GET_FACELIB_SCHEDULE 3977 //ȡȶԿIJʱ -#define NET_DVR_SET_FACELIB_SCHEDULE 3978 //ȶԿIJʱ -#define NET_DVR_GET_SOFTWARE_SERVICE_CAPABILITIES 3980//ȡ -#define NET_DVR_GET_SOFTWARE_SERVICE 3981//ȡ -#define NET_DVR_SET_SOFTWARE_SERVICE 3982// -#define NET_DVR_GET_PREVIEW_MODE_CAPABILITIES 3983//ȡԤģʽ -#define NET_DVR_SET_EAGLE_FOCUS_GOTOSCENE 3984//ӥʽ۽תָijID -#define NET_DVR_EAGLE_FOCUS_SCENE_DEL 3985//ɾӥʽ۽궨ij -#define NET_DVR_GET_SAFETY_HELMET_TRIGGER 3986 //ȡȫñ -#define NET_DVR_SET_SAFETY_HELMET_TRIGGER 3987 //ðȫñ -#define NET_DVR_GET_SAFETY_HELMET_SCHEDULE_CAPABILITIES 3988 //ȡȫñⲼʱ -#define NET_DVR_GET_SAFETY_HELMET_SCHEDULE 3989//ȡȫñⲼʱ -#define NET_DVR_SET_SAFETY_HELMET_SCHEDULE 3990//ðȫñⲼʱ +#define NET_DVR_GET_SMARTCALIBRATION_CFG 3910 //获取Smart行为标定过滤尺寸功能 +#define NET_DVR_SET_SMARTCALIBRATION_CFG 3911 //设置Smart行为标定过滤尺寸功能 +#define NET_DVR_POST_SETUP_CALIB 3912 //架设标定 +#define NET_DVR_SET_POS_INFO_OVERLAY 3913//设置Pos信息码流叠加控制 +#define NET_DVR_GET_POS_INFO_OVERLAY 3914//获取Pos信息码流叠加控制 +#define NET_DVR_GET_CAMERA_WORK_MODE 3915 //设置相机工作模式参数 +#define NET_DVR_SET_CAMERA_WORK_MODE 3916 //获取相机工作模式参数 +#define NET_DVR_GET_RESOLUTION_SWITCH_CAPABILITIES 3917 //获取分辨率模式切换能力 +#define NET_DVR_GET_RESOLUTION_SWITCH 3918 //获取分辨率模式切换配置 +#define NET_DVR_SET_RESOLUTION_SWITCH 3919 //设置分辨率模式切换配置 +#define NET_DVR_GET_CONFIRM_MECHANISM_CAPABILITIES 3920 //报警上传确认机制控制能力 +#define NET_DVR_CONFIRM_MECHANISM_CTRL 3921 //报警上传确认机制控制 +#define NET_DVR_GET_VEHICLLE_RESULT_CAPABILITIES 3951 //获取获取车辆信息结果能力 +#define NET_DVR_GET_CALIB_CAPABILITIES 3952//获取架设标定能力 +#define NET_DVR_GET_POSINFO_OVERLAY_CAPABILITIES 3953//获取获取Pos叠加能力 +#define NET_SDK_FINDMEDICALFILE 3954 //慧影科技智慧医疗查找录像文件 +#define NET_SDK_FINDMEDICALPICTURE 3955 //慧影科技智慧医疗查找图片文件 +#define NET_DVR_SET_POSINFO_OVERLAY 3960//设置Pos叠加 +#define NET_DVR_GET_POSINFO_OVERLAY 3961//获取Pos叠加 +#define NET_DVR_GET_FACELIB_TRIGGER 3962 //获取人脸比对库的联动配置 +#define NET_DVR_SET_FACELIB_TRIGGER 3963 //设置人脸比对库的联动配置 +#define NET_DVR_GET_FACECONTRAST_TRIGGER 3965//获取人脸比对联动配置 +#define NET_DVR_SET_FACECONTRAST_TRIGGER 3966//设置人脸比对联动配置 +#define NET_DVR_GET_FACECONTRAST_SCHEDULE_CAPABILITIES 3967 //获取人脸比对布防时间能力 +#define NET_DVR_GET_FACECONTRAST_SCHEDULE 3968//获取人脸比对布防时间配置 +#define NET_DVR_SET_FACECONTRAST_SCHEDULE 3969//设置人脸比对布防时间配置 +#define NET_DVR_GET_FACELIB_SCHEDULE_CAPABILITIES 3970 //获取人脸比对库的布防时间能力 +#define NET_DVR_GET_VCA_VERSION_LIST 3973//获取算法库版本 +#define NET_DVR_GET_SETUP_CALIB 3974//获取架设标定 +#define NET_DVR_GET_PANORAMA_LINKAGE 3975//获取联动抓图上传使能配置 +#define NET_DVR_SET_PANORAMA_LINKAGE 3976//设置联动抓图上传使能配置 +#define NET_DVR_GET_FACELIB_SCHEDULE 3977 //获取人脸比对库的布防时间配置 +#define NET_DVR_SET_FACELIB_SCHEDULE 3978 //设置人脸比对库的布防时间配置 +#define NET_DVR_GET_SOFTWARE_SERVICE_CAPABILITIES 3980//获取软件服务能力 +#define NET_DVR_GET_SOFTWARE_SERVICE 3981//获取软件服务配置 +#define NET_DVR_SET_SOFTWARE_SERVICE 3982//设置软件服务配置 +#define NET_DVR_GET_PREVIEW_MODE_CAPABILITIES 3983//获取预览模式配置能力 +#define NET_DVR_SET_EAGLE_FOCUS_GOTOSCENE 3984//鹰式聚焦设置摄像机转向指定的场景ID +#define NET_DVR_EAGLE_FOCUS_SCENE_DEL 3985//删除鹰式聚焦标定的场景 +#define NET_DVR_GET_SAFETY_HELMET_TRIGGER 3986 //获取安全帽检测联动配置 +#define NET_DVR_SET_SAFETY_HELMET_TRIGGER 3987 //设置安全帽检测联动配置 +#define NET_DVR_GET_SAFETY_HELMET_SCHEDULE_CAPABILITIES 3988 //获取安全帽检测布防时间能力 +#define NET_DVR_GET_SAFETY_HELMET_SCHEDULE 3989//获取安全帽检测布防时间配置 +#define NET_DVR_SET_SAFETY_HELMET_SCHEDULE 3990//设置安全帽检测布防时间配置 -#define NET_DVR_GET_SIGN_ABNORMAL_TRIGGER 4150 //ȡ쳣 -#define NET_DVR_SET_SIGN_ABNORMAL_TRIGGER 4151 //쳣 +#define NET_DVR_GET_SIGN_ABNORMAL_TRIGGER 4150 //获取体征异常联动配置 +#define NET_DVR_SET_SIGN_ABNORMAL_TRIGGER 4151 //设置体征异常联动配置 -#define NET_DVR_ONE_KEY_CONFIG_SAN_V50 4152 //һSAN(V50) -#define NET_DVR_GET_HDCFG_V50 4153 //ȡӲϢV50 -#define NET_DVR_SET_HDCFG_V50 4154 //ӲϢV50 -#define NET_DVR_GET_HDVOLUME_CFG 4155 //ȡӲ̾Ϣ -#define NET_DVR_SET_HDVOLUME_CFG 4156 //Ӳ̾Ϣ -#define NET_DVR_GET_POWER_SUPPLY_CABINET_TRIGGER 4157 //ȡ񹩵 -#define NET_DVR_SET_POWER_SUPPLY_CABINET_TRIGGER 4158 //û񹩵 -#define NET_DVR_GET_SENSOR_TRIGGER 4159 //ȡ -#define NET_DVR_SET_SENSOR_TRIGGER 4160 //ô -#define NET_DVR_GET_FACESNAP_TRIGGER 4161 //ȡĿץ -#define NET_DVR_SET_FACESNAP_TRIGGER 4162 //Ŀץ -#define NET_DVR_GET_FACESNAP_SCHEDULE_CAPABILITIES 4163 //ȡĿץIJʱ -#define NET_DVR_GET_FACESNAP_SCHEDULE 4164 //ȡĿץIJʱ -#define NET_DVR_SET_FACESNAP_SCHEDULE 4165 //ĿץIJʱ +#define NET_DVR_ONE_KEY_CONFIG_SAN_V50 4152 //一键配置SAN(V50) +#define NET_DVR_GET_HDCFG_V50 4153 //获取硬盘信息参数V50 +#define NET_DVR_SET_HDCFG_V50 4154 //设置硬盘信息参数V50 +#define NET_DVR_GET_HDVOLUME_CFG 4155 //获取硬盘卷信息 +#define NET_DVR_SET_HDVOLUME_CFG 4156 //设置硬盘卷信息 +#define NET_DVR_GET_POWER_SUPPLY_CABINET_TRIGGER 4157 //获取机柜供电检测的联动配置 +#define NET_DVR_SET_POWER_SUPPLY_CABINET_TRIGGER 4158 //设置机柜供电检测的联动配置 +#define NET_DVR_GET_SENSOR_TRIGGER 4159 //获取传感器检测的联动配置 +#define NET_DVR_SET_SENSOR_TRIGGER 4160 //设置传感器检测的联动配置 +#define NET_DVR_GET_FACESNAP_TRIGGER 4161 //获取目标抓拍联动配置 +#define NET_DVR_SET_FACESNAP_TRIGGER 4162 //设置目标抓拍联动配置 +#define NET_DVR_GET_FACESNAP_SCHEDULE_CAPABILITIES 4163 //获取目标抓拍布防时间能力 +#define NET_DVR_GET_FACESNAP_SCHEDULE 4164 //获取目标抓拍布防时间配置 +#define NET_DVR_SET_FACESNAP_SCHEDULE 4165 //设置目标抓拍布防时间配置 -#define NET_DVR_SET_SCREEN_SWITCH 4171 //л -#define NET_DVR_GET_BV_CALIB_PIC 4172 //ȡ豸ץȡͼƬ͸Ϣ -#define NET_DVR_GET_BV_CALIB_RESULT 4173 //ȡ˫Ŀα궨 -#define NET_DVR_GET_BV_HCORRECTION 4174 //ȡ˫Ŀ߶Ƚ -#define NET_DVR_DEL_BV_CALIB_PIC 4175 //ɾͼƬ -#define NET_DVR_GET_TV_SCREEN_CFG 4176 //ȡͣʱ -#define NET_DVR_SET_TV_SCREEN_CFG 4177 //õͣʱ -#define NET_DVR_ADJUST_BV_CALIB 4178 //˫Ŀ궨΢ -#define NET_DVR_GET_HUMAN_CALIB 4179 //ȡ궨 -#define NET_DVR_SET_HUMAN_CALIB 4180 //궨 -#define NET_DVR_GET_USERCFG_V51 4181 //ȡû -#define NET_DVR_SET_USERCFG_V51 4182 //û -#define NET_DVR_GET_SOFTIO_TRIGGER 4183 //ȡSoftIO -#define NET_DVR_SET_SOFTIO_TRIGGER 4184 //SoftIO -#define NET_DVR_GET_SOFTIO_SCHEDULE_CAPABILITIES 4185 //ȡSoftIOʱ -#define NET_DVR_GET_SOFTIO_SCHEDULE 4186 //ȡSoftIOʱ -#define NET_DVR_SET_SOFTIO_SCHEDULE 4187 //SoftIOʱ -#define NET_DVR_GET_HFPD_TRIGGER 4188 //ȡƵͼʶ -#define NET_DVR_SET_HFPD_TRIGGER 4189 //øƵͼʶ -#define NET_DVR_GET_HFPD_SCHEDULE_CAPABILITIES 4190 //ȡƵͼʶ𲼷ʱ -#define NET_DVR_GET_HFPD_SCHEDULE 4191 //ȡƵͼʶ𲼷ʱ -#define NET_DVR_SET_HFPD_SCHEDULE 4192 //øƵͼʶ𲼷ʱ -#define NET_DVR_GET_ALARM_INFO 4193 //ȡ¼Ϣ -#define NET_DVR_GET_USERCFG_V52 4194 //ȡû -#define NET_DVR_SET_USERCFG_V52 4195 //û +#define NET_DVR_SET_SCREEN_SWITCH 4171 //画面切换控制 +#define NET_DVR_GET_BV_CALIB_PIC 4172 //获取设备抓取图片和附加信息 +#define NET_DVR_GET_BV_CALIB_RESULT 4173 //获取双目外参标定结果 +#define NET_DVR_GET_BV_HCORRECTION 4174 //获取双目高度矫正数据 +#define NET_DVR_DEL_BV_CALIB_PIC 4175 //删除样本图片 +#define NET_DVR_GET_TV_SCREEN_CFG 4176 //获取导播画面停留时间配置 +#define NET_DVR_SET_TV_SCREEN_CFG 4177 //设置导播画面停留时间配置 +#define NET_DVR_ADJUST_BV_CALIB 4178 //双目标定微调 +#define NET_DVR_GET_HUMAN_CALIB 4179 //获取人体坐标标定配置 +#define NET_DVR_SET_HUMAN_CALIB 4180 //设置人体坐标标定配置 +#define NET_DVR_GET_USERCFG_V51 4181 //获取用户参数 +#define NET_DVR_SET_USERCFG_V51 4182 //设置用户参数 +#define NET_DVR_GET_SOFTIO_TRIGGER 4183 //获取SoftIO联动配置 +#define NET_DVR_SET_SOFTIO_TRIGGER 4184 //设置SoftIO联动配置 +#define NET_DVR_GET_SOFTIO_SCHEDULE_CAPABILITIES 4185 //获取SoftIO布防时间能力 +#define NET_DVR_GET_SOFTIO_SCHEDULE 4186 //获取SoftIO布防时间配置 +#define NET_DVR_SET_SOFTIO_SCHEDULE 4187 //设置SoftIO布防时间配置 +#define NET_DVR_GET_HFPD_TRIGGER 4188 //获取高频图像特征识别联动配置 +#define NET_DVR_SET_HFPD_TRIGGER 4189 //设置高频图像特征识别联动配置 +#define NET_DVR_GET_HFPD_SCHEDULE_CAPABILITIES 4190 //获取高频图像特征识别布防时间能力 +#define NET_DVR_GET_HFPD_SCHEDULE 4191 //获取高频图像特征识别布防时间配置 +#define NET_DVR_SET_HFPD_SCHEDULE 4192 //设置高频图像特征识别布防时间配置 +#define NET_DVR_GET_ALARM_INFO 4193 //获取报警事件信息 +#define NET_DVR_GET_USERCFG_V52 4194 //获取用户参数 +#define NET_DVR_SET_USERCFG_V52 4195 //设置用户参数 -/********************************NVR_˲Ʒ****************************/ -#define NET_DVR_GET_MUTEX_FUNCTION 4353 //ȡܻϢ +/********************************NVR_后端产品线****************************/ +#define NET_DVR_GET_MUTEX_FUNCTION 4353 //获取功能互斥信息 -#define NET_DVR_GET_SINGLE_CHANNELINFO 4360 //ȡͨ -#define NET_DVR_GET_CHANNELINFO 4361 //ȡͨ -#define NET_DVR_CHECK_LOGIN_PASSWORDCFG 4362 //û¼У -#define NET_DVR_GET_SINGLE_SECURITY_QUESTION_CFG 4363 //ȡ豸ȫ -#define NET_DVR_SET_SINGLE_SECURITY_QUESTION_CFG 4364 //õ豸ȫ -#define NET_DVR_GET_SECURITY_QUESTION_CFG 4365 //ȡ豸ȫ -#define NET_DVR_SET_SECURITY_QUESTION_CFG 4366 //豸ȫ -#define NET_DVR_GET_ONLINEUSERLIST_SC 4367 //Զ̻ȡ½ûϢӣ +#define NET_DVR_GET_SINGLE_CHANNELINFO 4360 //获取单个通道属性数据 +#define NET_DVR_GET_CHANNELINFO 4361 //获取通道属性数据 +#define NET_DVR_CHECK_LOGIN_PASSWORDCFG 4362 //用户登录密码校验 +#define NET_DVR_GET_SINGLE_SECURITY_QUESTION_CFG 4363 //获取单个设备安全问题 +#define NET_DVR_SET_SINGLE_SECURITY_QUESTION_CFG 4364 //设置单个设备安全问题 +#define NET_DVR_GET_SECURITY_QUESTION_CFG 4365 //获取设备安全问题 +#define NET_DVR_SET_SECURITY_QUESTION_CFG 4366 //设置设备安全问题 +#define NET_DVR_GET_ONLINEUSERLIST_SC 4367 //远程获取登陆用户信息(短连接) -#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_TRIGGER 4368 //ȡֹȶ -#define NET_DVR_SET_BLOCKLIST_FACECONTRAST_TRIGGER 4369 //ýֹȶ -#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_TRIGGER 4370 //ȡȶ -#define NET_DVR_SET_ALLOWLIST_FACECONTRAST_TRIGGER 4371 //ȶ -#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_SCHEDULE_CAPABILITIES 4372 //ȡֹȶԲʱ -#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_SCHEDULE 4373 //ȡֹȶԲʱ -#define NET_DVR_SET_BLOCKLIST_FACECONTRAST_SCHEDULE 4374 //ýֹȶԲʱ -#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_SCHEDULE_CAPABILITIES 4375 //ȡȶԲʱ -#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_SCHEDULE 4376 //ȡȶԲʱ -#define NET_DVR_SET_ALLOWLIST_FACECONTRAST_SCHEDULE 4377 //ȶԲʱ +#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_TRIGGER 4368 //获取禁止单人脸比对联动配置 +#define NET_DVR_SET_BLOCKLIST_FACECONTRAST_TRIGGER 4369 //设置禁止单人脸比对联动配置 +#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_TRIGGER 4370 //获取允许名单人脸比对联动配置 +#define NET_DVR_SET_ALLOWLIST_FACECONTRAST_TRIGGER 4371 //设置允许名单人脸比对联动配置 +#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_SCHEDULE_CAPABILITIES 4372 //获取禁止单人脸比对布防时间能力 +#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_SCHEDULE 4373 //获取禁止单人脸比对布防时间配置 +#define NET_DVR_SET_BLOCKLIST_FACECONTRAST_SCHEDULE 4374 //设置禁止单人脸比对布防时间配置 +#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_SCHEDULE_CAPABILITIES 4375 //获取允许名单人脸比对布防时间能力 +#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_SCHEDULE 4376 //获取允许名单人脸比对布防时间配置 +#define NET_DVR_SET_ALLOWLIST_FACECONTRAST_SCHEDULE 4377 //设置允许名单人脸比对布防时间配置 -#define NET_DVR_GET_HUMAN_RECOGNITION_SCHEDULE_CAPABILITIES 4378 //ȡʶ𲼷ʱ -#define NET_DVR_GET_HUMAN_RECOGNITION_SCHEDULE 4379 //ȡʶ𲼷ʱ -#define NET_DVR_SET_HUMAN_RECOGNITION_SCHEDULE 4380 //ʶ𲼷ʱ -#define NET_DVR_GET_HUMAN_RECOGNITION_TRIGGER 4381 //ȡʶ -#define NET_DVR_SET_HUMAN_RECOGNITION_TRIGGER 4382 //ʶ -#define NET_DVR_GET_GBT28181_AUDIO_OUTPUT_CFG 4383 //ȡGBT28181Э豸ԽϢ -#define NET_DVR_SET_GBT28181_AUDIO_OUTPUT_CFG 4384 //GBT28181Э豸ԽϢ +#define NET_DVR_GET_HUMAN_RECOGNITION_SCHEDULE_CAPABILITIES 4378 //获取人体识别布防时间能力 +#define NET_DVR_GET_HUMAN_RECOGNITION_SCHEDULE 4379 //获取人体识别布防时间配置 +#define NET_DVR_SET_HUMAN_RECOGNITION_SCHEDULE 4380 //设置人体识别布防时间配置 +#define NET_DVR_GET_HUMAN_RECOGNITION_TRIGGER 4381 //获取人体识别联动配置 +#define NET_DVR_SET_HUMAN_RECOGNITION_TRIGGER 4382 //设置人体识别联动配置 +#define NET_DVR_GET_GBT28181_AUDIO_OUTPUT_CFG 4383 //获取GBT28181协议接入设备的语音对讲信息 +#define NET_DVR_SET_GBT28181_AUDIO_OUTPUT_CFG 4384 //设置GBT28181协议接入设备的语音对讲信息 -#define NET_DVR_GET_STUDENTS_STOODUP_TRIGGER 4386 //ȡѧ -#define NET_DVR_SET_STUDENTS_STOODUP_TRIGGER 4387 //ѧ -#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_SCHEDULE_CAPABILITIES 4388 //ȡͳƲʱ -#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_SCHEDULE 4389 //ȡͳƲʱ -#define NET_DVR_SET_FRAMES_PEOPLE_COUNTING_SCHEDULE 4390 //ͳƲʱ -#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_TRIGGER 4391 //ȡͳ -#define NET_DVR_SET_FRAMES_PEOPLE_COUNTING_TRIGGER 4392 //ͳ +#define NET_DVR_GET_STUDENTS_STOODUP_TRIGGER 4386 //获取学生起立检测联动配置 +#define NET_DVR_SET_STUDENTS_STOODUP_TRIGGER 4387 //设置学生起立检测联动配置 +#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_SCHEDULE_CAPABILITIES 4388 //获取区域人数统计布防时间能力 +#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_SCHEDULE 4389 //获取区域人数统计布防时间配置 +#define NET_DVR_SET_FRAMES_PEOPLE_COUNTING_SCHEDULE 4390 //设置区域人数统计布防时间配置 +#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_TRIGGER 4391 //获取区域人数统计联动配置 +#define NET_DVR_SET_FRAMES_PEOPLE_COUNTING_TRIGGER 4392 //设置区域人数统计联动配置 -#define NET_DVR_GET_PERSONDENSITY_TRIGGER 4393 //ȡԱܶȼ -#define NET_DVR_SET_PERSONDENSITY_TRIGGER 4394 //Աܶȼ -#define NET_DVR_GET_PERSONDENSITY_SCHEDULE_CAPABILITIES 4395 //ȡԱܶȼIJʱ -#define NET_DVR_GET_PERSONDENSITY_SCHEDULE 4396 //ȡԱܶȼIJʱ -#define NET_DVR_SET_PERSONDENSITY_SCHEDULE 4397 //ԱܶȼIJʱ +#define NET_DVR_GET_PERSONDENSITY_TRIGGER 4393 //获取人员密度检测的联动配置 +#define NET_DVR_SET_PERSONDENSITY_TRIGGER 4394 //设置人员密度检测的联动配置 +#define NET_DVR_GET_PERSONDENSITY_SCHEDULE_CAPABILITIES 4395 //获取人员密度检测的布防时间能力 +#define NET_DVR_GET_PERSONDENSITY_SCHEDULE 4396 //获取人员密度检测的布防时间配置 +#define NET_DVR_SET_PERSONDENSITY_SCHEDULE 4397 //设置人员密度检测的布防时间配置 -#define NET_DVR_GET_STUDENTS_STOODUP_SCHEDULE_CAPABILITIES 4398 //ȡѧⲼʱ -#define NET_DVR_GET_STUDENTS_STOODUP_SCHEDULE 4399 //ȡѧⲼʱ -#define NET_DVR_SET_STUDENTS_STOODUP_SCHEDULE 4400 //ѧⲼʱ +#define NET_DVR_GET_STUDENTS_STOODUP_SCHEDULE_CAPABILITIES 4398 //获取学生起立检测布防时间能力 +#define NET_DVR_GET_STUDENTS_STOODUP_SCHEDULE 4399 //获取学生起立检测布防时间配置 +#define NET_DVR_SET_STUDENTS_STOODUP_SCHEDULE 4400 //设置学生起立检测布防时间配置 -#define NET_DVR_SET_FACE_THERMOMETRY_TRIGGER 4401 // -#define NET_DVR_GET_FACE_THERMOMETRY_SCHEDULE_CAPABILITIES 4402 //ȡ²ʱ -#define NET_DVR_GET_FACE_THERMOMETRY_SCHEDULE 4403 //ȡ²ʱ -#define NET_DVR_SET_FACE_THERMOMETRY_SCHEDULE 4404 //²ʱ -#define NET_DVR_GET_FACE_THERMOMETRY_TRIGGER 4405 //ȡ -#define NET_DVR_GET_PERSONQUEUE_TRIGGER 4406 //ȡԱŶӼ -#define NET_DVR_SET_PERSONQUEUE_TRIGGER 4407 //ԱŶӼ -#define NET_DVR_GET_PERSONQUEUE_SCHEDULE_CAPABILITIES 4408 //ȡԱŶӼIJʱ -#define NET_DVR_GET_PERSONQUEUE_SCHEDULE 4409 //ȡԱŶӼIJʱ -#define NET_DVR_SET_PERSONQUEUE_SCHEDULE 4410 //ԱŶӼIJʱ -#define NET_DVR_SET_START_VIDEOAUDIO 4411 //NVRƵ(豸Բ⹦) +#define NET_DVR_SET_FACE_THERMOMETRY_TRIGGER 4401 //设置人脸测温联动配置 +#define NET_DVR_GET_FACE_THERMOMETRY_SCHEDULE_CAPABILITIES 4402 //获取人脸测温布防时间能力 +#define NET_DVR_GET_FACE_THERMOMETRY_SCHEDULE 4403 //获取人脸测温布防时间配置 +#define NET_DVR_SET_FACE_THERMOMETRY_SCHEDULE 4404 //设置人脸测温布防时间配置 +#define NET_DVR_GET_FACE_THERMOMETRY_TRIGGER 4405 //获取人脸测温联动配置 +#define NET_DVR_GET_PERSONQUEUE_TRIGGER 4406 //获取人员排队检测的联动配置 +#define NET_DVR_SET_PERSONQUEUE_TRIGGER 4407 //设置人员排队检测的联动配置 +#define NET_DVR_GET_PERSONQUEUE_SCHEDULE_CAPABILITIES 4408 //获取人员排队检测的布防时间能力 +#define NET_DVR_GET_PERSONQUEUE_SCHEDULE 4409 //获取人员排队检测的布防时间配置 +#define NET_DVR_SET_PERSONQUEUE_SCHEDULE 4410 //设置人员排队检测的布防时间配置 +#define NET_DVR_SET_START_VIDEOAUDIO 4411 //设置NVR开启音视频功能(仅供设备自测功能) -/********************************Ŀʶ****************************/ -#define NET_DVR_GET_FACESNAPCFG 5001 //ȡĿץIJ -#define NET_DVR_SET_FACESNAPCFG 5002 //ĿץIJ -#define NET_DVR_GET_DEVACCESS_CFG 5005 //ȡ豸 -#define NET_DVR_SET_DEVACCESS_CFG 5006 //ý豸 -#define NET_DVR_GET_SAVE_PATH_CFG 5007 //ȡ洢Ϣ -#define NET_DVR_SET_SAVE_PATH_CFG 5008 //ô洢Ϣ -#define NET_VCA_GET_RULECFG_V41 5011 //ȡ쳣Ϊ(չ) -#define NET_VCA_SET_RULECFG_V41 5012 //쳣Ϊ(չ) -#define NET_DVR_GET_AID_RULECFG_V41 5013 //ȡͨ¼ -#define NET_DVR_SET_AID_RULECFG_V41 5014 //ýͨ¼ -#define NET_DVR_GET_TPS_RULECFG_V41 5015 //ȡͨͳƹ(չ) -#define NET_DVR_SET_TPS_RULECFG_V41 5016 //ýͨͳƹ(չ) -#define NET_VCA_GET_FACEDETECT_RULECFG_V41 5017 //ȡATM(չ) -#define NET_VCA_SET_FACEDETECT_RULECFG_V41 5018 //ATM(չ) -#define NET_DVR_GET_PDC_RULECFG_V41 5019 //ͳƹ(չ) -#define NET_DVR_SET_PDC_RULECFG_V41 5020 //ȡͳƹ(չ) -#define NET_DVR_GET_TRIAL_VERSION_CFG 5021 //ȡðϢ -#define NET_DVR_GET_VCA_CTRLINFO_CFG 5022 //ȡܿƲ -#define NET_DVR_SET_VCA_CTRLINFO_CFG 5023 //ܿƲ -#define NET_DVR_SYN_CHANNEL_NAME 5024 //ͬͨ -#define NET_DVR_GET_RESET_COUNTER 5025 //ȡͳͨͳƣ -#define NET_DVR_SET_RESET_COUNTER 5026 //ͳͨͳƣ -#define NET_DVR_GET_OBJECT_COLOR 5027 //ȡɫ -#define NET_DVR_SET_OBJECT_COLOR 5028 //ɫ -#define NET_DVR_GET_AUX_AREA 5029 //ȡ -#define NET_DVR_SET_AUX_AREA 5030 //ø -#define NET_DVR_GET_CHAN_WORKMODE 5031 //ȡͨģʽ -#define NET_DVR_SET_CHAN_WORKMODE 5032 //ͨģʽ -#define NET_DVR_GET_SLAVE_CHANNEL 5033 //ȡͨ -#define NET_DVR_SET_SLAVE_CHANNEL 5034 //ôͨ -#define NET_DVR_GET_VQD_EVENT_RULE 5035 //ȡƵ¼ -#define NET_DVR_SET_VQD_EVENT_RULE 5036 //Ƶ¼ -#define NET_DVR_GET_BASELINE_SCENE 5037 //ȡ׼ -#define NET_DVR_SET_BASELINE_SCENE 5038 //û׼ -#define NET_DVR_CONTROL_BASELINE_SCENE 5039 //׼ -#define NET_DVR_SET_VCA_DETION_CFG 5040 //ƶ -#define NET_DVR_GET_VCA_DETION_CFG 5041 //ȡƶ -#define NET_DVR_GET_STREAM_ATTACHINFO_CFG 5042 //ȡϢ -#define NET_DVR_SET_STREAM_ATTACHINFO_CFG 5043 //Ϣ +/********************************智能目标识别****************************/ +#define NET_DVR_GET_FACESNAPCFG 5001 //获取目标抓拍参数 +#define NET_DVR_SET_FACESNAPCFG 5002 //设置目标抓拍参数 +#define NET_DVR_GET_DEVACCESS_CFG 5005 //获取接入设备参数 +#define NET_DVR_SET_DEVACCESS_CFG 5006 //设置接入设备参数 +#define NET_DVR_GET_SAVE_PATH_CFG 5007 //获取存储信息参数 +#define NET_DVR_SET_SAVE_PATH_CFG 5008 //设置存储信息参数 +#define NET_VCA_GET_RULECFG_V41 5011 //获取异常行为检测参数(扩展) +#define NET_VCA_SET_RULECFG_V41 5012 //设置异常行为检测参数(扩展) +#define NET_DVR_GET_AID_RULECFG_V41 5013 //获取交通事件规则参数 +#define NET_DVR_SET_AID_RULECFG_V41 5014 //设置交通事件规则参数 +#define NET_DVR_GET_TPS_RULECFG_V41 5015 //获取交通统计规则参数(扩展) +#define NET_DVR_SET_TPS_RULECFG_V41 5016 //设置交通统计规则参数(扩展) +#define NET_VCA_GET_FACEDETECT_RULECFG_V41 5017 //获取ATM人脸检测规则(扩展) +#define NET_VCA_SET_FACEDETECT_RULECFG_V41 5018 //设置ATM人脸检测规则(扩展) +#define NET_DVR_GET_PDC_RULECFG_V41 5019 //设置人流量统计规则(扩展) +#define NET_DVR_SET_PDC_RULECFG_V41 5020 //获取人流量统计规则(扩展) +#define NET_DVR_GET_TRIAL_VERSION_CFG 5021 //获取试用版信息 +#define NET_DVR_GET_VCA_CTRLINFO_CFG 5022 //批量获取智能控制参数 +#define NET_DVR_SET_VCA_CTRLINFO_CFG 5023 //批量设置智能控制参数 +#define NET_DVR_SYN_CHANNEL_NAME 5024 //同步通道名 +#define NET_DVR_GET_RESET_COUNTER 5025 //获取统计数据清零参数(人流量、交通统计) +#define NET_DVR_SET_RESET_COUNTER 5026 //设置统计数据清零参数(人流量、交通统计) +#define NET_DVR_GET_OBJECT_COLOR 5027 //获取物体颜色属性 +#define NET_DVR_SET_OBJECT_COLOR 5028 //设置物体颜色属性 +#define NET_DVR_GET_AUX_AREA 5029 //获取辅助区域 +#define NET_DVR_SET_AUX_AREA 5030 //设置辅助区域 +#define NET_DVR_GET_CHAN_WORKMODE 5031 //获取通道工作模式 +#define NET_DVR_SET_CHAN_WORKMODE 5032 //设置通道工作模式 +#define NET_DVR_GET_SLAVE_CHANNEL 5033 //获取从通道参数 +#define NET_DVR_SET_SLAVE_CHANNEL 5034 //设置从通道参数 +#define NET_DVR_GET_VQD_EVENT_RULE 5035 //获取视频质量诊断事件规则 +#define NET_DVR_SET_VQD_EVENT_RULE 5036 //设置视频质量诊断事件规则 +#define NET_DVR_GET_BASELINE_SCENE 5037 //获取基准场景参数 +#define NET_DVR_SET_BASELINE_SCENE 5038 //设置基准场景参数 +#define NET_DVR_CONTROL_BASELINE_SCENE 5039 //基准场景操作 +#define NET_DVR_SET_VCA_DETION_CFG 5040 //设置智能移动参数配置 +#define NET_DVR_GET_VCA_DETION_CFG 5041 //获取智能移动参数配置 +#define NET_DVR_GET_STREAM_ATTACHINFO_CFG 5042 //获取码流附加信息配置 +#define NET_DVR_SET_STREAM_ATTACHINFO_CFG 5043 //设置码流附加信息配置 -#define NET_DVR_GET_BV_CALIB_TYPE 5044 //ȡ˫Ŀ궨 -#define NET_DVR_CONTROL_BV_SAMPLE_CALIB 5045 //˫Ŀ궨 -#define NET_DVR_GET_BV_SAMPLE_CALIB_CFG 5046 //ȡ˫Ŀ궨 -#define NET_DVR_GET_RULECFG_V42 5049 //ȡ쳣Ϊ(֧16չ) -#define NET_DVR_SET_RULECFG_V42 5050 //쳣Ϊ(֧16չ) -#define NET_DVR_SET_VCA_DETION_CFG_V40 5051 //ƶ -#define NET_DVR_GET_VCA_DETION_CFG_V40 5052 //ȡƶ -#define NET_DVR_SET_FLASH_CFG 5110 //дݵFlash ʹ -/********************************Ŀʶ end****************************/ +#define NET_DVR_GET_BV_CALIB_TYPE 5044 //获取双目标定类型 +#define NET_DVR_CONTROL_BV_SAMPLE_CALIB 5045 //双目样本标定 +#define NET_DVR_GET_BV_SAMPLE_CALIB_CFG 5046 //获取双目标定参数 +#define NET_DVR_GET_RULECFG_V42 5049 //获取异常行为检测参数(支持16条规则扩展) +#define NET_DVR_SET_RULECFG_V42 5050 //设置异常行为检测参数(支持16条规则扩展) +#define NET_DVR_SET_VCA_DETION_CFG_V40 5051 //设置智能移动参数配置 +#define NET_DVR_GET_VCA_DETION_CFG_V40 5052 //获取智能移动参数配置 +#define NET_DVR_SET_FLASH_CFG 5110 //写入数据到Flash 测试使用 +/********************************智能目标识别 end****************************/ //2014-12-03 -#define NET_DVR_GET_T1TEST_CFG 5053 //߲ýӿڣȡ -#define NET_DVR_SET_T1TEST_CFG 5054 ////߲ýӿڣã +#define NET_DVR_GET_T1TEST_CFG 5053 //产线测试配置接口(获取) +#define NET_DVR_SET_T1TEST_CFG 5054 ////产线测试配置接口(设置) /********************************ITS****************************/ -#define NET_ITS_GET_OVERLAP_CFG_V50 5055 //ȡַӲչ -#define NET_ITS_SET_OVERLAP_CFG_V50 5056 //ַӲչ +#define NET_ITS_GET_OVERLAP_CFG_V50 5055 //获取字符叠加参数配置扩展 +#define NET_ITS_SET_OVERLAP_CFG_V50 5056 //设置字符叠加参数配置扩展 -#define NET_DVR_GET_PARKLAMP_STATE 5057 //ȡͣźŵ״̬Ϣ -#define NET_DVR_GET_CLOUDSTORAGE_CFG 5058 //ȡƴ洢ò -#define NET_DVR_SET_CLOUDSTORAGE_CFG 5059 //ƴ洢ò +#define NET_DVR_GET_PARKLAMP_STATE 5057 //获取停车场信号灯状态信息 +#define NET_DVR_GET_CLOUDSTORAGE_CFG 5058 //获取云存储配置参数 +#define NET_DVR_SET_CLOUDSTORAGE_CFG 5059 //设置云存储配置参数 -#define NET_ITS_GET_BASE_INFO 5060 //ȡն˻Ϣ -#define NET_DVR_GET_SENSOR_INFO 5061 //Ϣѯ -#define NET_DVR_SET_SENSOR_SWITCH 5062 //Զ̿ -#define NET_ITS_GET_IMGMERGE_CFG 5063 //ȡͼƬϳò -#define NET_ITS_SET_IMGMERGE_CFG 5064 //ͼƬϳò -#define NET_ITS_GET_UPLOAD_CFG 5065 //ȡϴ -#define NET_ITS_SET_UPLOAD_CFG 5066 //ϴ -#define NET_DVR_GET_SENSOR_PORT_CAPABILITIES 5067 //ȡ -#define NET_ITS_GET_WORKSTATE 5069 //ȡն˹״̬ -#define NET_ITS_GET_IPC_CHAN_CFG 5070 //ȡͨIPCϢ -#define NET_ITS_SET_IPC_CHAN_CFG 5071 //ͨIPCϢ -#define NET_ITS_GET_OVERLAP_CFG 5072 //ȡַӲ -#define NET_ITS_SET_OVERLAP_CFG 5073 //ַӲ -#define NET_DVR_GET_TRIGGEREX_CFG 5074 //ȡITCչ -#define NET_DVR_SET_TRIGGEREX_CFG 5075 //ITCչ -#define NET_ITS_GET_ROAD_INFO 5076 //ȡ·Ϣ +#define NET_ITS_GET_BASE_INFO 5060 //获取终端基本信息 +#define NET_DVR_GET_SENSOR_INFO 5061 //传感器信息查询 +#define NET_DVR_SET_SENSOR_SWITCH 5062 //传感器远程控制 +#define NET_ITS_GET_IMGMERGE_CFG 5063 //获取图片合成配置参数 +#define NET_ITS_SET_IMGMERGE_CFG 5064 //设置图片合成配置参数 +#define NET_ITS_GET_UPLOAD_CFG 5065 //获取数据上传配置 +#define NET_ITS_SET_UPLOAD_CFG 5066 //设置数据上传配置 +#define NET_DVR_GET_SENSOR_PORT_CAPABILITIES 5067 //获取传感器能力 +#define NET_ITS_GET_WORKSTATE 5069 //获取终端工作状态 +#define NET_ITS_GET_IPC_CHAN_CFG 5070 //获取通道IPC信息 +#define NET_ITS_SET_IPC_CHAN_CFG 5071 //设置通道IPC信息 +#define NET_ITS_GET_OVERLAP_CFG 5072 //获取字符叠加参数配置 +#define NET_ITS_SET_OVERLAP_CFG 5073 //设置字符叠加参数配置 +#define NET_DVR_GET_TRIGGEREX_CFG 5074 //获取ITC扩展配置 +#define NET_DVR_SET_TRIGGEREX_CFG 5075 //设置ITC扩展配置 +#define NET_ITS_GET_ROAD_INFO 5076 //获取路口信息 -#define NET_ITS_REMOTE_DEVICE_CONTROL 5077//Զ豸 -#define NET_ITS_GET_GATEIPC_CHAN_CFG 5078//ȡڲ -#define NET_ITS_SET_GATEIPC_CHAN_CFG 5079//óڲ -#define NET_ITS_TRANSCHAN_START 5080//ͬݷ -#define NET_ITS_GET_ECTWORKSTATE 5081//ȡն˹״̬ -#define NET_ITS_GET_ECT_CHAN_INFO 5082//ȡնͨ״̬ -#define NET_DVR_GET_HEATMAP_RESULT 5083//ȶͼݲ -#define NET_DVR_SET_ITS_EXDEVCFG 5084 //ITS豸Ϣ -#define NET_DVR_GET_ITS_EXDEVCFG 5085 //ȡITS豸Ϣ -#define NET_DVR_GET_ITS_EXDEVSTATUS 5086 //ȡITS豸Ϣ -#define NET_DVR_SET_ITS_ENDEVCMD 5087 //ITSն˳ڿ -#define NET_DVR_SET_ENISSUED_DATADEL 5088 //ITSն˳ڿ -#define NET_DVR_GET_PDC_RESULT 5089//ݲѯ 2014-03-21 -#define NET_ITS_GET_LAMP_CTRLCFG 5090 //ȡõƲ -#define NET_ITS_SET_LAMP_CTRLCFG 5091 //õƲ -#define NET_ITS_GET_PARKSPACE_ATTRIBUTE_CFG 5092 //ȡ⳵λ -#define NET_ITS_SET_PARKSPACE_ATTRIBUTE_CFG 5093 //⳵λ -#define NET_ITS_SET_LAMP_EXTERNAL_CFG 5095 //ò -#define NET_ITS_SET_COMPEL_CAPTURE 5096 //óλǿץͼ -#define NET_DVR_SET_TIMESIGN_CFG 5097 //չУʱԶ -#define NET_DVR_GET_TIMESIGN_CFG 5098 //ȡչУʱԶ -#define NET_DVR_GET_SIGNALLAMP_STATUS 5099 //źŵƼ +#define NET_ITS_REMOTE_DEVICE_CONTROL 5077//设置远程设备控制 +#define NET_ITS_GET_GATEIPC_CHAN_CFG 5078//获取出入口参数 +#define NET_ITS_SET_GATEIPC_CHAN_CFG 5079//设置出入口参数 +#define NET_ITS_TRANSCHAN_START 5080//同步数据服务器建立连接 +#define NET_ITS_GET_ECTWORKSTATE 5081//获取出入口终端工作状态 +#define NET_ITS_GET_ECT_CHAN_INFO 5082//获取出入口终端通道状态 +#define NET_DVR_GET_HEATMAP_RESULT 5083//热度图数据查找 +#define NET_DVR_SET_ITS_EXDEVCFG 5084 //设置ITS外接设备信息 +#define NET_DVR_GET_ITS_EXDEVCFG 5085 //获取ITS外接设备信息 +#define NET_DVR_GET_ITS_EXDEVSTATUS 5086 //获取ITS所有外接设备信息 +#define NET_DVR_SET_ITS_ENDEVCMD 5087 //设置ITS终端出入口控制命令 +#define NET_DVR_SET_ENISSUED_DATADEL 5088 //设置ITS终端出入口控制清除 +#define NET_DVR_GET_PDC_RESULT 5089//客流量数据查询 2014-03-21 +#define NET_ITS_GET_LAMP_CTRLCFG 5090 //获取内外置灯参数 +#define NET_ITS_SET_LAMP_CTRLCFG 5091 //设置内外置灯参数 +#define NET_ITS_GET_PARKSPACE_ATTRIBUTE_CFG 5092 //获取特殊车位参数 +#define NET_ITS_SET_PARKSPACE_ATTRIBUTE_CFG 5093 //设置特殊车位参数 +#define NET_ITS_SET_LAMP_EXTERNAL_CFG 5095 //设置外控配置参数 +#define NET_ITS_SET_COMPEL_CAPTURE 5096 //设置车位强制抓图 +#define NET_DVR_SET_TIMESIGN_CFG 5097 //设置扩展校时自定义标记 +#define NET_DVR_GET_TIMESIGN_CFG 5098 //获取扩展校时自定义标记 +#define NET_DVR_GET_SIGNALLAMP_STATUS 5099 //信号灯检测 /********************************ITS end****************************/ -#define NET_DVR_GET_MONITOR_PLAN_VQD 5100 //ӻȡϷƻ -#define NET_DVR_GET_MONITORID_VQD 5101 //ӻȡӦƻڵIJϢ -#define NET_DVR_SET_MONITOR_INFO 5102 //üƻڵIJϢ -#define NET_DVR_DEL_MONITOR_PLAN_VQD 5103 //ɾƻ -#define NET_DVR_GET_MONITOR_VQD_STATUS 5104 //ƽ̨ѯϷ״̬ -#define NET_DVR_GET_RECORD_INFO 5105 //ȡԴͼƬѯ -#define NET_DVR_GET_MONITOR_VQDCFG 5106 //ȡIJϢ -#define NET_DVR_SET_MONITOR_VQDCFG 5107 //÷IJϢ -#define NET_DVR_SET_MONITOR_PLAN_VQDCFG 5108 //ùƻ(ļƻ) +#define NET_DVR_GET_MONITOR_PLAN_VQD 5100 //长连接获取诊断服务器计划 +#define NET_DVR_GET_MONITORID_VQD 5101 //长连接获取对应计划内的布防点信息 +#define NET_DVR_SET_MONITOR_INFO 5102 //批量设置计划内的布防点信息 +#define NET_DVR_DEL_MONITOR_PLAN_VQD 5103 //删除计划 +#define NET_DVR_GET_MONITOR_VQD_STATUS 5104 //平台查询诊断服务器的状态 +#define NET_DVR_GET_RECORD_INFO 5105 //获取资源图片查询 +#define NET_DVR_GET_MONITOR_VQDCFG 5106 //获取服务器的布防点信息 +#define NET_DVR_SET_MONITOR_VQDCFG 5107 //设置服务器的布防点信息 +#define NET_DVR_SET_MONITOR_PLAN_VQDCFG 5108 //设置管理计划(单独的计划) -#define NET_DVR_SCENE_CHANGE_UPDATE 5109 //ݸ +#define NET_DVR_SCENE_CHANGE_UPDATE 5109 //场景变更数据更新 -#define NET_DVR_GET_CALIBRATE_POINT 5153 //һתǹ豸 ⲿ ߴ벻ʵֹ֣ͻύߣ/*************************ܶೡ********************************/ -#define NET_DVR_GET_SCENE_CFG 5201 //ȡϢ -#define NET_DVR_SET_SCENE_CFG 5202 //óϢ -#define NET_DVR_GET_SCENE_REFERENCE_REGION 5203 //ȡο -#define NET_DVR_SET_SCENE_REFERENCE_REGION 5204 //òο -#define NET_DVR_GET_SCENE_CALIBRATION 5205 //ȡ궨Ϣ -#define NET_DVR_SET_SCENE_CALIBRATION 5206 //ñ궨Ϣ -#define NET_DVR_GET_SCENE_MASK_REGION 5207 //ȡ -#define NET_DVR_SET_SCENE_MASK_REGION 5208 // -#define NET_DVR_GET_SCENE_LANECFG 5209 //ȡ -#define NET_DVR_SET_SCENE_LANECFG 5210 //ó -#define NET_DVR_GET_SCENE_AID_RULECFG 5211 //ȡͨ¼ -#define NET_DVR_SET_SCENE_AID_RULECFG 5212 //ýͨ¼ -#define NET_DVR_GET_SCENE_TPS_RULECFG 5213 //ȡͨͳƹ -#define NET_DVR_SET_SCENE_TPS_RULECFG 5214 //ýͨͳƹ -#define NET_DVR_GET_SCENE_TIME_CFG 5215 //ȡͨijʱ -#define NET_DVR_SET_SCENE_TIME_CFG 5216 //ͨijʱ -#define NET_DVR_GET_FORENSICS_MODE 5217 //ȡȡ֤ʽ -#define NET_DVR_SET_FORENSICS_MODE 5218 //ȡ֤ʽ -#define NET_DVR_FORCESTOP_FORENSICS_CTRL 5219 //ǿֹͣȡ֤ -#define NET_DVR_GET_ALARM_PROCESS_CFG 5220 //ȡ -#define NET_DVR_SET_ALARM_PROCESS_CFG 5221 //ñ -#define NET_DVR_GET_BLOCKLIST_ALARM_INFO 5222 //ȡ -#define NET_DVR_GET_STORAGE_RESOURCE_CFG 5225 //ȡ洢Դ -#define NET_DVR_SET_STORAGE_RESOURCE_CFG 5226 //ô洢Դ -#define NET_DVR_DEL_BLOCKLIST_ALARM_RECORD 5227 //Զɾ¼ -#define NET_DVR_SET_BLOCKLIST_GROUP_INFO 5229 //Զ̷б -#define NET_DVR_DEL_BLOCKLIST_GROUP_INFO 5230 //Զɾб -#define NET_DVR_GET_BLOCKLIST_GROUP_INFO 5231 //Զ̻ȡȫб -#define NET_DVR_SET_BLOCKLIST_GROUP_RECORD_CFG 5232 //¼ -#define NET_DVR_GET_BLOCKLIST_GROUP_RECORD_CFG 5234 //Զ̻ȡ¼ -#define NET_DVR_DEL_BLOCKLIST_GROUP_RECORD_CFG 5235 //Զɾ¼ -#define NET_DVR_GET_AREA_MONITOR_CFG 5236 //ȡ򲼷 -#define NET_DVR_SET_AREA_MONITOR_CFG 5237 //򲼷 -#define NET_DVR_DEL_AREA_MONITOR_CFG 5238 //ɾ򲼷 -#define NET_DVR_RETRIEVAL_SNAP_RECORD 5240 //ץĿ -#define NET_DVR_GET_ALARMLIST 5241 //ȡб -#define NET_DVR_DETECT_IMAGE 5242 //ͼƬ -#define NET_DVR_GET_SNAP_RECORD 5243 //ȡץļ¼ -#define NET_DVR_DEL_SNAP_RECORD 5244 //ɾץļ¼ -#define NET_DVR_GET_FACE_RECORD 5245 //Զ̻ȡ¼б -#define NET_DVR_SET_FACE_RECORD 5246 //¼ -#define NET_DVR_DEL_FACE_RECORD 5247 //ɾ¼ -#define NET_DVR_GET_FACE_DATABASE 5248 //ȡò -#define NET_DVR_SET_FACE_DATABASE 5249 //ò -#define NET_DVR_DEL_FACE_DATABASE 5250 //ɾ -#define NET_DVR_RETRIEVAL_FACE_DATABASE 5251 // -#define NET_DVR_SET_BLOCKLIST_REL_DEV_CFG 5252 //豸 -#define NET_DVR_DEL_BLOCKLIST_REL_DEV 5253 //ɾ 豸Ϣ -/*************************ܶೡend*****************************/ +#define NET_DVR_GET_CALIBRATE_POINT 5153 //归一化坐标转换(枪球联动设备 外部交互命令码 基线代码不实现,防止冲突,提交基线)/*************************智能多场景********************************/ +#define NET_DVR_GET_SCENE_CFG 5201 //获取场景信息 +#define NET_DVR_SET_SCENE_CFG 5202 //设置场景信息 +#define NET_DVR_GET_SCENE_REFERENCE_REGION 5203 //获取参考区域 +#define NET_DVR_SET_SCENE_REFERENCE_REGION 5204 //设置参考区域 +#define NET_DVR_GET_SCENE_CALIBRATION 5205 //获取标定信息 +#define NET_DVR_SET_SCENE_CALIBRATION 5206 //设置标定信息 +#define NET_DVR_GET_SCENE_MASK_REGION 5207 //获取屏蔽区域 +#define NET_DVR_SET_SCENE_MASK_REGION 5208 //设置屏蔽区域 +#define NET_DVR_GET_SCENE_LANECFG 5209 //获取车道规则 +#define NET_DVR_SET_SCENE_LANECFG 5210 //设置车道规则 +#define NET_DVR_GET_SCENE_AID_RULECFG 5211 //获取交通事件规则参数 +#define NET_DVR_SET_SCENE_AID_RULECFG 5212 //设置交通事件规则参数 +#define NET_DVR_GET_SCENE_TPS_RULECFG 5213 //获取交通统计规则参数 +#define NET_DVR_SET_SCENE_TPS_RULECFG 5214 //设置交通统计规则参数 +#define NET_DVR_GET_SCENE_TIME_CFG 5215 //获取通道的场景时间段配置 +#define NET_DVR_SET_SCENE_TIME_CFG 5216 //设置通道的场景时间段配置 +#define NET_DVR_GET_FORENSICS_MODE 5217 //获取取证方式参数 +#define NET_DVR_SET_FORENSICS_MODE 5218 //设置取证方式参数 +#define NET_DVR_FORCESTOP_FORENSICS_CTRL 5219 //强制停止取证 +#define NET_DVR_GET_ALARM_PROCESS_CFG 5220 //获取报警处理参数 +#define NET_DVR_SET_ALARM_PROCESS_CFG 5221 //设置报警处理参数 +#define NET_DVR_GET_BLOCKLIST_ALARM_INFO 5222 //获取名单报警 +#define NET_DVR_GET_STORAGE_RESOURCE_CFG 5225 //获取存储资源参数 +#define NET_DVR_SET_STORAGE_RESOURCE_CFG 5226 //设置存储资源参数 +#define NET_DVR_DEL_BLOCKLIST_ALARM_RECORD 5227 //远程删除名单报警记录 +#define NET_DVR_SET_BLOCKLIST_GROUP_INFO 5229 //远程分组列表参数配置 +#define NET_DVR_DEL_BLOCKLIST_GROUP_INFO 5230 //远程删除分组列表 +#define NET_DVR_GET_BLOCKLIST_GROUP_INFO 5231 //远程获取全部分组列表 +#define NET_DVR_SET_BLOCKLIST_GROUP_RECORD_CFG 5232 //分组记录参数配置 +#define NET_DVR_GET_BLOCKLIST_GROUP_RECORD_CFG 5234 //远程获取分组记录参数 +#define NET_DVR_DEL_BLOCKLIST_GROUP_RECORD_CFG 5235 //远程删除分组记录参数 +#define NET_DVR_GET_AREA_MONITOR_CFG 5236 //获取区域布防点参数 +#define NET_DVR_SET_AREA_MONITOR_CFG 5237 //设置区域布防点参数 +#define NET_DVR_DEL_AREA_MONITOR_CFG 5238 //删除区域布防点 +#define NET_DVR_RETRIEVAL_SNAP_RECORD 5240 //抓拍库检索 +#define NET_DVR_GET_ALARMLIST 5241 //获取名单报警列表 +#define NET_DVR_DETECT_IMAGE 5242 //单张图片检测 +#define NET_DVR_GET_SNAP_RECORD 5243 //获取抓拍记录 +#define NET_DVR_DEL_SNAP_RECORD 5244 //删除抓拍记录 +#define NET_DVR_GET_FACE_RECORD 5245 //远程获取人脸记录列表 +#define NET_DVR_SET_FACE_RECORD 5246 //添加人脸记录 +#define NET_DVR_DEL_FACE_RECORD 5247 //删除人脸记录 +#define NET_DVR_GET_FACE_DATABASE 5248 //获取人脸库配置参数 +#define NET_DVR_SET_FACE_DATABASE 5249 //设置人脸库配置参数 +#define NET_DVR_DEL_FACE_DATABASE 5250 //删除人脸库 +#define NET_DVR_RETRIEVAL_FACE_DATABASE 5251 //人脸库检索 +#define NET_DVR_SET_BLOCKLIST_REL_DEV_CFG 5252 //设备关联名单分组关联 +#define NET_DVR_DEL_BLOCKLIST_REL_DEV 5253 //删除 设备关联名单分组信息 +/*************************智能多场景end*****************************/ -#define NET_DVR_GET_DISK_RAID_INFO 6001 //ȡRaidϢ -#define NET_DVR_SET_DISK_RAID_INFO 6002 //ôRaidϢ +#define NET_DVR_GET_DISK_RAID_INFO 6001 //获取磁盘Raid信息 +#define NET_DVR_SET_DISK_RAID_INFO 6002 //设置磁盘Raid信息 -#define NET_DVR_GET_DVR_SYNCHRONOUS_IPC 6005 //ȡǷΪǰIPCͬ豸 -#define NET_DVR_SET_DVR_SYNCHRONOUS_IPC 6006 //ãǷΪǰIPCͬ豸 +#define NET_DVR_GET_DVR_SYNCHRONOUS_IPC 6005 //获取:是否为前端IPC同步设备参数 +#define NET_DVR_SET_DVR_SYNCHRONOUS_IPC 6006 //设置:是否为前端IPC同步设备参数 -#define NET_DVR_SET_DVR_IPC_PASSWD 6008 //ãIPCû -#define NET_DVR_GET_DEVICE_NET_USING_INFO 6009 //ȡǰ豸Դʹ +#define NET_DVR_SET_DVR_IPC_PASSWD 6008 //设置:IPC用户名密码 +#define NET_DVR_GET_DEVICE_NET_USING_INFO 6009 //获取:当前设备网络资源使用情况 -#define NET_DVR_SET_DVR_IPC_NET 6012 //ãǰIPCַ +#define NET_DVR_SET_DVR_IPC_NET 6012 //设置:设置前端IPC的网络地址 -#define NET_DVR_GET_RECORD_CHANNEL_INFO 6013 //ȡ¼ͨϢ -#define NET_DVR_SET_RECORD_CHANNEL_INFO 6014 //ã¼ͨϢ +#define NET_DVR_GET_RECORD_CHANNEL_INFO 6013 //获取:录像通道信息 +#define NET_DVR_SET_RECORD_CHANNEL_INFO 6014 //设置:录像通道信息 -#define NET_DVR_MOUNT_DISK 6015 // ش -#define NET_DVR_UNMOUNT_DISK 6016 // жش +#define NET_DVR_MOUNT_DISK 6015 // 加载磁盘 +#define NET_DVR_UNMOUNT_DISK 6016 // 卸载磁盘 // CVR -#define NET_DVR_GET_STREAM_SRC_INFO 6017 //ȡԴϢ -#define NET_DVR_SET_STREAM_SRC_INFO 6018 //ãԴϢ -#define NET_DVR_GET_STREAM_RECORD_INFO 6019 //ȡ¼Ϣ -#define NET_DVR_SET_STREAM_RECORD_INFO 6020 //ã¼Ϣ -#define NET_DVR_GET_STREAM_RECORD_STATUS 6021 //ȡ¼״̬ -#define NET_DVR_SET_STREAM_RECORD_STATUS 6022 //ã¼״̬ -#define NET_DVR_GET_STREAM_INFO 6023 //ȡӵIDϢ -#define NET_DVR_GET_STREAM_SRC_INFO_V40 6024 //ȡԴϢ -#define NET_DVR_SET_STREAM_SRC_INFO_V40 6025 //ãԴϢ -#define NET_DVR_GET_RELOCATE_INFO 6026 //ȡN+0ģʽضϢ -#define NET_DVR_START_GOP_INFO_PASSBACK 6032 //Ϣ -#define NET_DVR_GET_CHANS_RECORD_STATUS_CFG 6035 //ȡͨ¼״̬Ϣ -#define NET_DVR_SET_CHANS_RECORD_STATUS_CFG 6036 //ͨ¼״̬Ϣ -//NVR96xx -#define NET_DVR_GET_IP_ALARM_GROUP_NUM 6100 //ȡIPͨ -#define NET_DVR_GET_IP_ALARM_IN 6101 //ȡIPͨϢ -#define NET_DVR_GET_IP_ALARM_OUT 6102 //ȡIPͨϢ +#define NET_DVR_GET_STREAM_SRC_INFO 6017 //获取:流来源信息 +#define NET_DVR_SET_STREAM_SRC_INFO 6018 //设置:流来源信息 +#define NET_DVR_GET_STREAM_RECORD_INFO 6019 //获取:流录像信息 +#define NET_DVR_SET_STREAM_RECORD_INFO 6020 //设置:流录像信息 +#define NET_DVR_GET_STREAM_RECORD_STATUS 6021 //获取:流录像状态 +#define NET_DVR_SET_STREAM_RECORD_STATUS 6022 //设置:流录像状态 +#define NET_DVR_GET_STREAM_INFO 6023 //获取已添加的流ID信息 +#define NET_DVR_GET_STREAM_SRC_INFO_V40 6024 //获取:流来源信息 +#define NET_DVR_SET_STREAM_SRC_INFO_V40 6025 //设置:流来源信息 +#define NET_DVR_GET_RELOCATE_INFO 6026 //获取N+0模式下重定向信息 +#define NET_DVR_START_GOP_INFO_PASSBACK 6032 //智能信息回填 +#define NET_DVR_GET_CHANS_RECORD_STATUS_CFG 6035 //获取通道录像状态信息 +#define NET_DVR_SET_CHANS_RECORD_STATUS_CFG 6036 //设置通道录像状态信息 +//NVR:96xx +#define NET_DVR_GET_IP_ALARM_GROUP_NUM 6100 //获取:IP通道报警输入输出组数 +#define NET_DVR_GET_IP_ALARM_IN 6101 //获取:IP通道报警输入信息 +#define NET_DVR_GET_IP_ALARM_OUT 6102 //获取:IP通道报警输出信息 //9000 v2.2 -#define NET_DVR_GET_FTPCFG_SECOND 6103 //ȡͼƬϴFTP -#define NET_DVR_SET_FTPCFG_SECOND 6104 //ͼƬϴFTP +#define NET_DVR_GET_FTPCFG_SECOND 6103 //获取图片上传FTP参数 +#define NET_DVR_SET_FTPCFG_SECOND 6104 //设置图片上传FTP参数 -#define NET_DVR_GET_DEFAULT_VIDEO_EFFECT 6105 // ȡƵЧĬֵ -#define NET_DVR_SET_VIDEO_EFFECT 6106 // ͨƵͼ -#define NET_DVR_DEL_INVALID_DISK 6107 // ɾЧ +#define NET_DVR_GET_DEFAULT_VIDEO_EFFECT 6105 // 获取视频输入效果参数默认值 +#define NET_DVR_SET_VIDEO_EFFECT 6106 // 设置通道视频输入图像参数 +#define NET_DVR_DEL_INVALID_DISK 6107 // 删除无效磁盘 -#define NET_DVR_GET_DRAWFRAME_DISK_QUOTA_CFG 6109 //ȡ֡ͨ -#define NET_DVR_SET_DRAWFRAME_DISK_QUOTA_CFG 6110 //ó֡ͨ +#define NET_DVR_GET_DRAWFRAME_DISK_QUOTA_CFG 6109 //获取抽帧通道磁盘配额 +#define NET_DVR_SET_DRAWFRAME_DISK_QUOTA_CFG 6110 //设置抽帧通道磁盘配额 -#define NET_DVR_GET_NAT_CFG 6111 //ȡNATӳ -#define NET_DVR_SET_NAT_CFG 6112 //NATӳ -#define NET_DVR_GET_AES_KEY 6113 //ȡ豸AESԿ -#define NET_DVR_GET_POE_CFG 6114 //ȡPOE -#define NET_DVR_SET_POE_CFG 6115 //POE -#define NET_DVR_GET_CUSTOM_PRO_CFG 6116 //ȡԶЭ -#define NET_DVR_SET_CUSTOM_PRO_CFG 6117 //ԶЭ -#define NET_DVR_GET_STREAM_CABAC 6118 //ȡѹѡ -#define NET_DVR_SET_STREAM_CABAC 6119 //ѹѡ -#define NET_DVR_GET_ESATA_MINISAS_USAGE_CFG 6120 //ȡeSATAminiSAS; -#define NET_DVR_SET_ESATA_MINISAS_USAGE_CFG 6121 //eSATAminiSAS; +#define NET_DVR_GET_NAT_CFG 6111 //获取NAT映射参数 +#define NET_DVR_SET_NAT_CFG 6112 //设置NAT映射参数 +#define NET_DVR_GET_AES_KEY 6113 //获取设备AES加密密钥 +#define NET_DVR_GET_POE_CFG 6114 //获取POE参数 +#define NET_DVR_SET_POE_CFG 6115 //设置POE参数 +#define NET_DVR_GET_CUSTOM_PRO_CFG 6116 //获取自定义协议参数 +#define NET_DVR_SET_CUSTOM_PRO_CFG 6117 //设置自定义协议参数 +#define NET_DVR_GET_STREAM_CABAC 6118 //获取码流压缩性能选项 +#define NET_DVR_SET_STREAM_CABAC 6119 //设置码流压缩性能选项 +#define NET_DVR_GET_ESATA_MINISAS_USAGE_CFG 6120 //获取eSATA和miniSAS用途 +#define NET_DVR_SET_ESATA_MINISAS_USAGE_CFG 6121 //设置eSATA和miniSAS用途 -#define NET_DVR_GET_HDCFG_V40 6122 //ȡӲϢ -#define NET_DVR_SET_HDCFG_V40 6123 //ӲϢ -#define NET_DVR_GET_POE_CHANNEL_ADD_MODE 6124 //ȡPOEͨӷʽ -#define NET_DVR_SET_POE_CHANNEL_ADD_MODE 6125 //POEͨӷʽ -#define NET_DVR_GET_DIGITAL_CHANNEL_STATE 6126 //ȡ豸ͨ״̬ -#define NET_DVR_GET_BONJOUR_CFG 6127 // ȡBonjourϢ -#define NET_DVR_SET_BONJOUR_CFG 6128 // BonjourϢ +#define NET_DVR_GET_HDCFG_V40 6122 //获取硬盘信息参数 +#define NET_DVR_SET_HDCFG_V40 6123 //设置硬盘信息参数 +#define NET_DVR_GET_POE_CHANNEL_ADD_MODE 6124 //获取POE通道添加方式 +#define NET_DVR_SET_POE_CHANNEL_ADD_MODE 6125 //设置POE通道添加方式 +#define NET_DVR_GET_DIGITAL_CHANNEL_STATE 6126 //获取设备数字通道状态 +#define NET_DVR_GET_BONJOUR_CFG 6127 // 获取Bonjour信息 +#define NET_DVR_SET_BONJOUR_CFG 6128 // 设置Bonjour信息 -#define NET_DVR_GET_SOCKS_CFG 6130//ȡSOCKSϢ -#define NET_DVR_SET_SOCKS_CFG 6131//SOCKSϢ +#define NET_DVR_GET_SOCKS_CFG 6130//获取SOCKS信息 +#define NET_DVR_SET_SOCKS_CFG 6131//设置SOCKS信息 -#define NET_DVR_GET_QOS_CFG 6132//ȡQoSϢ -#define NET_DVR_SET_QOS_CFG 6133//QoSϢ +#define NET_DVR_GET_QOS_CFG 6132//获取QoS信息 +#define NET_DVR_SET_QOS_CFG 6133//设置QoS信息 -#define NET_DVR_GET_HTTPS_CFG 6134//ȡHTTPSϢ -#define NET_DVR_SET_HTTPS_CFG 6135//HTTPSϢ +#define NET_DVR_GET_HTTPS_CFG 6134//获取HTTPS信息 +#define NET_DVR_SET_HTTPS_CFG 6135//设置HTTPS信息 -#define NET_DVR_GET_WD1_CFG 6136//Զ̻ȡWD1ʹܿ -#define NET_DVR_SET_WD1_CFG 6137//ԶWD1ʹܿ +#define NET_DVR_GET_WD1_CFG 6136//远程获取WD1使能开关 +#define NET_DVR_SET_WD1_CFG 6137//远程设置WD1使能开关 -#define NET_DVR_CREATE_CERT 6138//֤ -#define NET_DVR_DELETE_CERT 6139//ɾ֤ +#define NET_DVR_CREATE_CERT 6138//创建证书 +#define NET_DVR_DELETE_CERT 6139//删除证书 -#define NET_DVR_GET_RECORD_LOCK_PERCENTAGE 6140 //ȡ¼ -#define NET_DVR_SET_RECORD_LOCK_PERCENTAGE 6141 //¼ +#define NET_DVR_GET_RECORD_LOCK_PERCENTAGE 6140 //获取录像段锁定比例 +#define NET_DVR_SET_RECORD_LOCK_PERCENTAGE 6141 //设置录像段锁定比例 -#define NET_DVR_CMD_TRIGGER_PERIOD_RECORD 6144 //ⲿָʱ¼ -#define NET_DVR_UPLOAD_CERT 6145 //ϴ֤ -#define NET_DVR_DOWNLOAD_CERT 6146 //֤ -#define NET_DVR_GET_CERT 6147 //ȡ֤ +#define NET_DVR_CMD_TRIGGER_PERIOD_RECORD 6144 //外部命令触发指定时间录像 +#define NET_DVR_UPLOAD_CERT 6145 //上传证书 +#define NET_DVR_DOWNLOAD_CERT 6146 //下载证书 +#define NET_DVR_GET_CERT 6147 //获取证书 -#define NET_DVR_GET_POS_FILTER_CFG 6148 //ȡPOS˹ -#define NET_DVR_SET_POS_FILTER_CFG 6149 //POS˹ -#define NET_DVR_GET_CONNECT_POS_CFG 6150 //ȡDVRPOSӷʽ -#define NET_DVR_SET_CONNECT_POS_CFG 6151 //DVRPOSӷʽ -#define NET_DVR_GET_CHAN_FILTER_CFG 6152 //ȡͨϢ -#define NET_DVR_SET_CHAN_FILTER_CFG 6153 //ùͨϢ +#define NET_DVR_GET_POS_FILTER_CFG 6148 //获取POS过滤规则 +#define NET_DVR_SET_POS_FILTER_CFG 6149 //设置POS过滤规则 +#define NET_DVR_GET_CONNECT_POS_CFG 6150 //获取DVR与POS连接方式 +#define NET_DVR_SET_CONNECT_POS_CFG 6151 //设置DVR与POS连接方式 +#define NET_DVR_GET_CHAN_FILTER_CFG 6152 //获取规则与通道关联信息 +#define NET_DVR_SET_CHAN_FILTER_CFG 6153 //设置规则与通道关联信息 -#define NET_DVR_GET_FTPCFG_V40 6162 //ȡFTPϢ -#define NET_DVR_SET_FTPCFG_V40 6163 //FTPϢ +#define NET_DVR_GET_FTPCFG_V40 6162 //获取FTP信息 +#define NET_DVR_SET_FTPCFG_V40 6163 //设置FTP信息 -#define NET_DVR_GET_MONTHLY_RECORD_DISTRIBUTION 6164 //ȡ¼ֲ -#define NET_DVR_GET_ACCESS_DEVICE_CHANNEL_INFO 6165 //ȡ豸ͨϢ -#define NET_DVR_GET_PREVIEW_SWITCH_CFG 6166 //ȡ豸Ԥл -#define NET_DVR_SET_PREVIEW_SWITCH_CFG 6167 //豸Ԥл +#define NET_DVR_GET_MONTHLY_RECORD_DISTRIBUTION 6164 //获取月历录像分布 +#define NET_DVR_GET_ACCESS_DEVICE_CHANNEL_INFO 6165 //获取待接入设备通道信息 +#define NET_DVR_GET_PREVIEW_SWITCH_CFG 6166 //获取设备本地预览切换参数 +#define NET_DVR_SET_PREVIEW_SWITCH_CFG 6167 //设置设备本地预览切换参数 //Netra3.0.0 -#define NET_DVR_GET_N_PLUS_ONE_WORK_MODE 6168 //ȡN+1ģʽ -#define NET_DVR_SET_N_PLUS_ONE_WORK_MODE 6169 //N+1ģʽ +#define NET_DVR_GET_N_PLUS_ONE_WORK_MODE 6168 //获取N+1工作模式 +#define NET_DVR_SET_N_PLUS_ONE_WORK_MODE 6169 //设置N+1工作模式 -#define NET_DVR_GET_HD_STATUS 6170 //ȡӲ״̬ -#define NET_DVR_SET_HD_STATUS 6171 //Ӳ״̬ +#define NET_DVR_GET_HD_STATUS 6170 //获取硬盘状态 +#define NET_DVR_SET_HD_STATUS 6171 //设置硬盘状态 -#define NET_DVR_IMPORT_IPC_CFG_FILE 6172 //IPCļ -#define NET_DVR_EXPORT_IPC_CFG_FILE 6173 //IPCļ -#define NET_DVR_UPGRADE_IPC 6174 //IPͨ +#define NET_DVR_IMPORT_IPC_CFG_FILE 6172 //导入IPC配置文件 +#define NET_DVR_EXPORT_IPC_CFG_FILE 6173 //导出IPC配置文件 +#define NET_DVR_UPGRADE_IPC 6174 //升级IP通道 -#define NET_DVR_GET_RAID_BACKGROUND_TASK_SPEED 6175 //ȡRAID̨ٶ -#define NET_DVR_SET_RAID_BACKGROUND_TASK_SPEED 6176 //RAID̨ٶ +#define NET_DVR_GET_RAID_BACKGROUND_TASK_SPEED 6175 //获取RAID后台任务速度 +#define NET_DVR_SET_RAID_BACKGROUND_TASK_SPEED 6176 //设置RAID后台任务速度 -//256·NVR -#define NET_DVR_GET_EXCEPTIONCFG_V40 6177 //ȡ쳣 -#define NET_DVR_SET_EXCEPTIONCFG_V40 6178 //쳣 -#define NET_DVR_GET_PICCFG_V40 6179 //ȡͼ ֱ֧䳤 NetSDK_ -#define NET_DVR_SET_PICCFG_V40 6180 //ͼ ֱ֧䳤 -#define NET_DVR_GET_ALARMINCFG_V40 6181 //ȡֱ֧䳤 -#define NET_DVR_SET_ALARMINCFG_V40 6182 //ȡֱ֧䳤 -#define NET_DVR_GET_IPALARMINCFG_V40 6183 //ȡIPϢ -#define NET_DVR_GET_IPALARMOUTCFG_V40 6185 //ȡIPϢ -#define NET_DVR_GET_USERCFG_V40 6187 //ȡû -#define NET_DVR_SET_USERCFG_V40 6188 //û -#define NET_DVR_GET_WORK_STATUS 6189 //ȡ豸״̬ -#define NET_DVR_GET_JPEG_CAPTURE_CFG_V40 6190 //ȡDVRץͼ -#define NET_DVR_SET_JPEG_CAPTURE_CFG_V40 6191 //DVRץͼ -#define NET_DVR_GET_HDGROUP_CFG_V40 6192 //ȡò -#define NET_DVR_SET_HDGROUP_CFG_V40 6193 //ò -#define NET_DVR_GET_SMD_HOLIDAY_HANDLE 6194 //ȡܼռƻ -#define NET_DVR_SET_SMD_HOLIDAY_HANDLE 6195 //üܼռƻ -#define NET_DVR_GET_PIC_MODEL_CFG 6196 //ȡͼƬģò -#define NET_DVR_SET_PIC_MODEL_CFG 6197 //ͼƬģò -#define NET_DVR_START_LOCAL_MOUSE_EVENT 6198 //豸¼¼ -#define NET_DVR_START_SIMULARE_MOUSE_EVENT 6199 //Զģ¼ -#define NET_DVR_GET_WORK_STATUS_V50 6200 //ȡ豸״̬V50 +//256路NVR +#define NET_DVR_GET_EXCEPTIONCFG_V40 6177 //获取异常参数配置 +#define NET_DVR_SET_EXCEPTIONCFG_V40 6178 //设置异常参数配置 +#define NET_DVR_GET_PICCFG_V40 6179 //获取图象参数 支持变长 NetSDK_ +#define NET_DVR_SET_PICCFG_V40 6180 //设置图象参数, 支持变长 +#define NET_DVR_GET_ALARMINCFG_V40 6181 //获取报警输入参数,支持变长 +#define NET_DVR_SET_ALARMINCFG_V40 6182 //获取报警输入参数,支持变长 +#define NET_DVR_GET_IPALARMINCFG_V40 6183 //获取IP报警输入接入配置信息 +#define NET_DVR_GET_IPALARMOUTCFG_V40 6185 //获取IP报警输出接入配置信息 +#define NET_DVR_GET_USERCFG_V40 6187 //获取用户参数 +#define NET_DVR_SET_USERCFG_V40 6188 //设置用户参数 +#define NET_DVR_GET_WORK_STATUS 6189 //获取设备工作状态 +#define NET_DVR_GET_JPEG_CAPTURE_CFG_V40 6190 //获取DVR抓图配置 +#define NET_DVR_SET_JPEG_CAPTURE_CFG_V40 6191 //设置DVR抓图配置 +#define NET_DVR_GET_HDGROUP_CFG_V40 6192 //获取盘组管理配置参数 +#define NET_DVR_SET_HDGROUP_CFG_V40 6193 //设置盘组管理配置参数 +#define NET_DVR_GET_SMD_HOLIDAY_HANDLE 6194 //获取简易智能假日计划 +#define NET_DVR_SET_SMD_HOLIDAY_HANDLE 6195 //设置简易智能假日计划 +#define NET_DVR_GET_PIC_MODEL_CFG 6196 //获取图片建模配置参数 +#define NET_DVR_SET_PIC_MODEL_CFG 6197 //设置图片建模配置参数 +#define NET_DVR_START_LOCAL_MOUSE_EVENT 6198 //开启设备本地鼠标事件记录 +#define NET_DVR_START_SIMULARE_MOUSE_EVENT 6199 //远程模拟鼠标事件 +#define NET_DVR_GET_WORK_STATUS_V50 6200 //获取设备工作状态V50 -//91ϵHD-SDIDVR -#define NET_DVR_GET_ACCESS_CAMERA_INFO 6201 // ȡǰϢ -#define NET_DVR_SET_ACCESS_CAMERA_INFO 6202 // ǰϢ -#define NET_DVR_PULL_DISK 6203 // ȫ -#define NET_DVR_SCAN_RAID 6204 // ɨ +//91系列HD-SDI高清DVR +#define NET_DVR_GET_ACCESS_CAMERA_INFO 6201 // 获取前端相机信息 +#define NET_DVR_SET_ACCESS_CAMERA_INFO 6202 // 设置前端相机信息 +#define NET_DVR_PULL_DISK 6203 // 安全拔盘 +#define NET_DVR_SCAN_RAID 6204 // 扫描阵列 // CVR 2.0.X -#define NET_DVR_GET_USER_RIGHT_CFG 6210 // ȡûȨ -#define NET_DVR_SET_USER_RIGHT_CFG 6211 // ûȨ +#define NET_DVR_GET_USER_RIGHT_CFG 6210 // 获取用户权限 +#define NET_DVR_SET_USER_RIGHT_CFG 6211 // 设置用户权限 -#define NET_DVR_ONE_KEY_CONFIG 6212 // һCVR -#define NET_DVR_RESTART_SERVICE 6213 // CVR +#define NET_DVR_ONE_KEY_CONFIG 6212 // 一键配置CVR +#define NET_DVR_RESTART_SERVICE 6213 // 重启CVR服务 -#define NET_DVR_GET_MAX_MACHINE_NUM_CFG 6214 // ȡ -#define NET_DVR_SET_MAX_MACHINE_NUM_CFG 6215 // ñ +#define NET_DVR_GET_MAX_MACHINE_NUM_CFG 6214 // 获取备机最大个数 +#define NET_DVR_SET_MAX_MACHINE_NUM_CFG 6215 // 设置备机最大个数 -#define NET_DVR_ADD_DEVICE 6216 //N+1ģʽ豸 -#define NET_DVR_DEL_DEVICE 6217 //N+1ģʽɾ豸 +#define NET_DVR_ADD_DEVICE 6216 //N+1模式添加设备 +#define NET_DVR_DEL_DEVICE 6217 //N+1模式删除设备 -#define NET_DVR_GET_DATA_CALLBACK_CFG 6218 // ȡݻǨ״̬ -#define NET_DVR_SET_DATA_CALLBACK_CFG 6219 // ݻǨ״̬ +#define NET_DVR_GET_DATA_CALLBACK_CFG 6218 // 获取数据回迁状态 +#define NET_DVR_SET_DATA_CALLBACK_CFG 6219 // 设置数据回迁状态 -#define NET_DVR_CLONE_LUN 6220 //¡LUN -#define NET_DVR_EXPAND_LUN 6221 //չLUN +#define NET_DVR_CLONE_LUN 6220 //克隆LUN卷 +#define NET_DVR_EXPAND_LUN 6221 //扩展和重命名LUN卷 -#define NET_DVR_GET_N_PLUS_ONE_DEVICE_INFO 6222 //ȡN+1豸Ϣ -#define NET_DVR_MODIFY_DVR_NET_DISK 6223 //޸DVR -//#define NET_DVR_DEL_DVR_NET_DISK 6224 //ɾDVR +#define NET_DVR_GET_N_PLUS_ONE_DEVICE_INFO 6222 //获取N+1设备信息 +#define NET_DVR_MODIFY_DVR_NET_DISK 6223 //修改DVR网盘 +//#define NET_DVR_DEL_DVR_NET_DISK 6224 //删除DVR网盘 -#define NET_DVR_CREATE_NAS 6225 //NAS -#define NET_DVR_DELETE_NAS 6226 //ɾNAS +#define NET_DVR_CREATE_NAS 6225 //创建NAS +#define NET_DVR_DELETE_NAS 6226 //删除NAS -#define NET_DVR_OPEN_ISCSI 6227 //iSCSI -#define NET_DVR_CLOSE_ISCSI 6228 //رiSCSI +#define NET_DVR_OPEN_ISCSI 6227 //开启iSCSI +#define NET_DVR_CLOSE_ISCSI 6228 //关闭iSCSI -#define NET_DVR_GET_FC 6229 //ȡϢ -#define NET_DVR_OPEN_FC 6230 //FC -#define NET_DVR_CLOSE_FC 6231 //رFC -#define NET_DVR_ONE_KEY_CONFIG_SAN 6232 // һSAN, һCVR߼һ +#define NET_DVR_GET_FC 6229 //获取光纤信息 +#define NET_DVR_OPEN_FC 6230 //开启FC +#define NET_DVR_CLOSE_FC 6231 //关闭FC +#define NET_DVR_ONE_KEY_CONFIG_SAN 6232 // 一键配置SAN, 与一键配置CVR逻辑一样 //CVR2.3.2 -#define NET_DVR_RECORD_CHECK 6233 //¼Լ -#define NET_DVR_ADD_RECORD_PASSBACK_TASK_MANUAL 6234 //ֶ¼ش -#define NET_DVR_GET_ALL_RECORD_PASSBACK_TASK_MANUAL 6235 //ȡֶ¼ش -#define NET_DVR_RECORD_PASSBACK_TASK_MANUAL_CTRL 6236 //ֶ¼ش -#define NET_DVR_DEL_RECORD_PASSBACK_TASK_MANUAL 6237 //ɾֶ¼ش -#define NET_DVR_GET_RECORD_PASSBACK_PLAN_CFG 6238 //ȡ¼شƻ -#define NET_DVR_SET_RECORD_PASSBACK_PLAN_CFG 6239 //¼شƻ -#define NET_DVR_GET_DEV_STORAGE_CFG 6240 //ȡ豸洢Ϣ -#define NET_DVR_GET_ONLINE_USER_CFG 6241 //ȡû -#define NET_DVR_GET_RECORD_SEGMENT_CFG 6242 //ȡ¼ +#define NET_DVR_RECORD_CHECK 6233 //录像完整性检测 +#define NET_DVR_ADD_RECORD_PASSBACK_TASK_MANUAL 6234 //手动添加录像回传任务 +#define NET_DVR_GET_ALL_RECORD_PASSBACK_TASK_MANUAL 6235 //获取所有手动添加录像回传任务 +#define NET_DVR_RECORD_PASSBACK_TASK_MANUAL_CTRL 6236 //控制手动录像回传任务 +#define NET_DVR_DEL_RECORD_PASSBACK_TASK_MANUAL 6237 //删除手动录像回传任务 +#define NET_DVR_GET_RECORD_PASSBACK_PLAN_CFG 6238 //获取录像回传计划配置 +#define NET_DVR_SET_RECORD_PASSBACK_PLAN_CFG 6239 //设置录像回传计划配置 +#define NET_DVR_GET_DEV_STORAGE_CFG 6240 //获取设备存储信息 +#define NET_DVR_GET_ONLINE_USER_CFG 6241 //获取在线用户参数 +#define NET_DVR_GET_RECORD_SEGMENT_CFG 6242 //获取录像段总量 -#define NET_DVR_GET_REC_PASSBACK_TASK_EXECUTABLE 6243 //ѯֶ¼شִ -#define NET_DVR_GET_STREAM_MEDIA_CFG 6244 //ȡýش¼ãIDʽ -#define NET_DVR_SET_STREAM_MEDIA_CFG 6245 //ýش¼ãIDʽ -#define NET_DVR_GET_USERCFG_V50 6246 //ȡûV50 -#define NET_DVR_SET_USERCFG_V50 6247 //ûV50 +#define NET_DVR_GET_REC_PASSBACK_TASK_EXECUTABLE 6243 //查询手动录像回传任务可执行性 +#define NET_DVR_GET_STREAM_MEDIA_CFG 6244 //获取流媒体回传录像参数配置(流ID方式) +#define NET_DVR_SET_STREAM_MEDIA_CFG 6245 //设置流媒体回传录像参数配置(流ID方式) +#define NET_DVR_GET_USERCFG_V50 6246 //获取用户参数V50 +#define NET_DVR_SET_USERCFG_V50 6247 //设置用户参数V50 -#define NET_DVR_GET_RECORD_PASSBACK_BASIC_CFG_CAP 6248 //ȡCVRشܻ -#define NET_DVR_GET_RECORD_PASSBACK_BASIC_CFG 6249 //ȡCVRشܻ -#define NET_DVR_SET_RECORD_PASSBACK_BASIC_CFG 6250 //CVRشܻ -#define NET_DVR_ONE_KEY_CONFIG_V50 6251 // һCVR(V50) -#define NET_DVR_GET_RACM_CAP 6252 //ȡ洢RACM -#define NET_DVR_GET_THUMBNAILS 6253 //ȡͼĬ¼ͼ(֧ID) -#define NET_DVR_ADD_RECORD_PASSBACK_TASK_MANUAL_V50 6254 //ֶ¼شV50ID -#define NET_DVR_GET_RECORD_PASSBACK_HISTORY_PLAN_CFG_CAP 6255 //ȡCVRشʷ¼ƻ -#define NET_DVR_GET_RECORD_PASSBACK_HISTORY_PLAN_CFG 6256 //ȡCVRشʷ¼ƻ -#define NET_DVR_SET_RECORD_PASSBACK_HISTORY_PLAN_CFG 6257 //CVRشʷ¼ƻ -#define NET_DVR_ONE_KEY_CONFIG_V51 6258 // һCVR(V51) +#define NET_DVR_GET_RECORD_PASSBACK_BASIC_CFG_CAP 6248 //获取CVR回传功能基础配置能力 +#define NET_DVR_GET_RECORD_PASSBACK_BASIC_CFG 6249 //获取CVR回传功能基础配置 +#define NET_DVR_SET_RECORD_PASSBACK_BASIC_CFG 6250 //设置CVR回传功能基础配置 +#define NET_DVR_ONE_KEY_CONFIG_V50 6251 // 一键配置CVR(V50) +#define NET_DVR_GET_RACM_CAP 6252 //获取存储总能力(RACM能力) +#define NET_DVR_GET_THUMBNAILS 6253 //获取缩略图(默认是录像的缩略图)(支持流ID) +#define NET_DVR_ADD_RECORD_PASSBACK_TASK_MANUAL_V50 6254 //手动添加录像回传任务V50(返回任务ID) +#define NET_DVR_GET_RECORD_PASSBACK_HISTORY_PLAN_CFG_CAP 6255 //获取CVR回传历史录像计划能力 +#define NET_DVR_GET_RECORD_PASSBACK_HISTORY_PLAN_CFG 6256 //获取CVR回传历史录像计划配置 +#define NET_DVR_SET_RECORD_PASSBACK_HISTORY_PLAN_CFG 6257 //设置CVR回传历史录像计划配置 +#define NET_DVR_ONE_KEY_CONFIG_V51 6258 // 一键配置CVR(V51) -#define NET_DVR_GET_RECORD_PACK 6301 //ȡ¼ -#define NET_DVR_SET_RECORD_PACK 6302 //¼ +#define NET_DVR_GET_RECORD_PACK 6301 //获取录像打包参数 +#define NET_DVR_SET_RECORD_PACK 6302 //设置录像打包参数 -#define NET_DVR_GET_CLOUD_STORAGE_CFG 6303 //ȡƴ洢Ϣ -#define NET_DVR_SET_CLOUD_STORAGE_CFG 6304 //ƴ洢Ϣ -#define NET_DVR_GET_GOP_INFO 6305 //ȡGOPϢ -#define NET_DVR_GET_PHY_DISK_INFO 6306 //ȡϢ -//¼ⲿ -#define NET_DVR_GET_RECORDING_AUTO_TRACK_CFG 6307 //ȡSDIԶϢ -#define NET_DVR_SET_RECORDING_AUTO_TRACK_CFG 6308 //SDIԶϢ +#define NET_DVR_GET_CLOUD_STORAGE_CFG 6303 //获取云存储配置信息 +#define NET_DVR_SET_CLOUD_STORAGE_CFG 6304 //设置云存储配置信息 +#define NET_DVR_GET_GOP_INFO 6305 //获取GOP信息 +#define NET_DVR_GET_PHY_DISK_INFO 6306 //获取物理磁盘信息 +//录播主机外部命令 +#define NET_DVR_GET_RECORDING_AUTO_TRACK_CFG 6307 //获取SDI自动配置信息 +#define NET_DVR_SET_RECORDING_AUTO_TRACK_CFG 6308 //设置SDI自动配置信息 -#define NET_DVR_GET_RECORDING_PUBLISH_CFG 6309 //ȡһϢ -#define NET_DVR_SET_RECORDING_PUBLISH_CFG 6310 //һϢ +#define NET_DVR_GET_RECORDING_PUBLISH_CFG 6309 //获取一键发布信息 +#define NET_DVR_SET_RECORDING_PUBLISH_CFG 6310 //设置一键发布信息 -#define NET_DVR_RECORDING_ONEKEY_CONTROL 6311 //¼ +#define NET_DVR_RECORDING_ONEKEY_CONTROL 6311 //录播主机控制 -#define NET_DVR_GET_RECORDING_END_TIME 6312 //ȡ¼ʣʱ +#define NET_DVR_GET_RECORDING_END_TIME 6312 //获取录播剩余时间 -#define NET_DVR_RECORDING_PUBLISH 6313 //һ¼ +#define NET_DVR_RECORDING_PUBLISH 6313 //一键发布录像 -#define NET_DVR_GET_CURRICULUM_CFG 6314 //ȡαϢ -#define NET_DVR_SET_CURRICULUM_CFG 6315 //ÿαϢ +#define NET_DVR_GET_CURRICULUM_CFG 6314 //获取课表配置信息 +#define NET_DVR_SET_CURRICULUM_CFG 6315 //设置课表配置信息 -#define NET_DVR_GET_COURSE_INDEX_CFG 6316 //ȡγϢ -#define NET_DVR_SET_COURSE_INDEX_CFG 6317 //ÿγϢ +#define NET_DVR_GET_COURSE_INDEX_CFG 6316 //获取课程信息索引 +#define NET_DVR_SET_COURSE_INDEX_CFG 6317 //设置课程信息索引 -#define NET_DVR_GET_PPT_CHANNEL 6318 //ȡPPT֧ͨ -#define NET_DVR_GET_PPT_DETECT_CFG 6319 //ȡPPT -#define NET_DVR_SET_PPT_DETECT_CFG 6320 //PPT +#define NET_DVR_GET_PPT_CHANNEL 6318 //获取PPT支持通道号 +#define NET_DVR_GET_PPT_DETECT_CFG 6319 //获取PPT检测参数 +#define NET_DVR_SET_PPT_DETECT_CFG 6320 //设置PPT检测参数 -#define NET_DVR_GET_RECORDINGHOST_CFG 6321 //ȡ¼Ϣ -#define NET_DVR_SET_RECORDINGHOST_CFG 6322 //¼Ϣ -#define NET_DVR_GET_BACKUP_RECORD_CFG 6323 //ȡһϢ -#define NET_DVR_SET_BACKUP_RECORD_CFG 6324 //һϢ +#define NET_DVR_GET_RECORDINGHOST_CFG 6321 //获取录播主机配置信息 +#define NET_DVR_SET_RECORDINGHOST_CFG 6322 //设置录播主机配置信息 +#define NET_DVR_GET_BACKUP_RECORD_CFG 6323 //获取一键备份配置信息 +#define NET_DVR_SET_BACKUP_RECORD_CFG 6324 //设置一键备份配置信息 -//ͥ -#define NET_DVR_GET_AUDIO_ACTIVATION_CFG 6326 //ȡò -#define NET_DVR_SET_AUDIO_ACTIVATION_CFG 6327 //ò -#define NET_DVR_GET_DECODERCFG_V40 6328 //ȡϢ -#define NET_DVR_SET_DECODERCFG_V40 6329 //ýϢ +//庭审主机 +#define NET_DVR_GET_AUDIO_ACTIVATION_CFG 6326 //获取语音激励配置参数 +#define NET_DVR_SET_AUDIO_ACTIVATION_CFG 6327 //设置语音激励配置参数 +#define NET_DVR_GET_DECODERCFG_V40 6328 //获取解码器参数信息 +#define NET_DVR_SET_DECODERCFG_V40 6329 //设置解码器参数信息 -#define NET_DVR_INFRARED_OUTPUT_CONTROL 6330 // -#define NET_DVR_GET_INFRARED_CMD_NAME_CFG 6331 //ȡƲ -#define NET_DVR_SET_INFRARED_CMD_NAME_CFG 6332 //úƲ -#define NET_DVR_START_INFRARED_LEARN 6333 //Զ̺ѧ +#define NET_DVR_INFRARED_OUTPUT_CONTROL 6330 //红外输出控制 +#define NET_DVR_GET_INFRARED_CMD_NAME_CFG 6331 //获取红外命令名称参数配置 +#define NET_DVR_SET_INFRARED_CMD_NAME_CFG 6332 //设置红外命令名称参数配置 +#define NET_DVR_START_INFRARED_LEARN 6333 //远程红外学码 -#define NET_DVR_GET_TRIAL_SYSTEM_CFG 6334 //ȡͥϵͳϢ -#define NET_DVR_SET_CASE_INFO 6335 //Ϣ¼ -#define NET_DVR_GET_TRIAL_MICROPHONE_STATUS 6336 //ȡ˷״̬Ϣ -#define NET_DVR_SET_TRIAL_MICROPHONE_STATUS 6337 //ȡ˷״̬Ϣ -#define NET_DVR_GET_TRIAL_HOST_STATUS 6338 //ȡͥ״̬Ϣ -#define NET_DVR_GET_LAMP_OUT 6339 //ȡLAMPϢ -#define NET_DVR_SET_LAMP_OUT 6340 //LAMPϢ -#define NET_DVR_LAMP_REMOTE_CONTROL 6341 // LAMP -#define NET_DVR_REMOTE_CONTROL_PLAY 6342 //Զ̿Ʊػط -#define NET_DVR_GET_LOCAL_INPUT_CFG 6343 //ȡͥ״̬ϢͥϢ -#define NET_DVR_SET_LOCAL_INPUT_CFG 6344 //ͥϢ -#define NET_DVR_GET_CASE_INFO 6345 //ȡǰϢ +#define NET_DVR_GET_TRIAL_SYSTEM_CFG 6334 //获取庭审主机系统信息 +#define NET_DVR_SET_CASE_INFO 6335 //案件信息录入 +#define NET_DVR_GET_TRIAL_MICROPHONE_STATUS 6336 //获取麦克风状态信息 +#define NET_DVR_SET_TRIAL_MICROPHONE_STATUS 6337 //获取麦克风状态信息 +#define NET_DVR_GET_TRIAL_HOST_STATUS 6338 //获取庭审主机状态信息 +#define NET_DVR_GET_LAMP_OUT 6339 //获取LAMP输出口信息 +#define NET_DVR_SET_LAMP_OUT 6340 //设置LAMP输出口信息 +#define NET_DVR_LAMP_REMOTE_CONTROL 6341 // LAMP控制 +#define NET_DVR_REMOTE_CONTROL_PLAY 6342 //远程控制本地回放 +#define NET_DVR_GET_LOCAL_INPUT_CFG 6343 //获取庭审主机状态信息庭审主机本地输入信息 +#define NET_DVR_SET_LOCAL_INPUT_CFG 6344 //设置庭审主机本地输入信息 +#define NET_DVR_GET_CASE_INFO 6345 //获取当前案件信息 -//Ѷⲿ -#define NET_DVR_INQUEST_GET_CDW_STATUS 6350 //ȡѶ¼״̬- -#define NET_DVR_GET_MIX_AUDIOIN_CFG 6351 //ȡڲ -#define NET_DVR_SET_MIX_AUDIOIN_CFG 6352 //ûڲ -#define NET_DVR_GET_MIX_AUDIOOUT_CFG 6353 //ȡڲ -#define NET_DVR_SET_MIX_AUDIOOUT_CFG 6354 //ûڲ -#define NET_DVR_GET_AUDIOIN_VOLUME_CFG 6355 //ȡƵڲ -#define NET_DVR_SET_AUDIOIN_VOLUME_CFG 6356 //Ƶڲ -#define NET_DVR_GET_AREA_MASK_CFG 6357 //ȡ -#define NET_DVR_SET_AREA_MASK_CFG 6358 // -#define NET_DVR_GET_AUDIO_DIACRITICAL_CFG 6359 //ȡƵ -#define NET_DVR_SET_AUDIO_DIACRITICAL_CFG 6360 //Ƶ -#define NET_DVR_GET_WIFI_DHCP_ADDR_CFG 6361 //WIFI DHCP ַΧ -#define NET_DVR_SET_WIFI_DHCP_ADDR_CFG 6362 //WIFI DHCP ַΧ -#define NET_DVR_GET_WIFI_CLIENT_LIST_INFO 6363 //ȡwifiȵӵ豸Ϣ -#define NET_DVR_REMOTECONTROL_POWER_ON 6364 //Զ̿ -#define NET_DVR_GET_MULTISTREAM_RELATION_CHAN_CFG 6365 //ȡͨ -#define NET_DVR_SET_MULTISTREAM_RELATION_CHAN_CFG 6366 //öͨ -#define NET_DVR_GET_VIDEOOUT_RESOLUTION_CFG 6367 //ȡ豸Ƶڷֱ -#define NET_DVR_SET_VIDEOOUT_RESOLUTION_CFG 6368 //豸Ƶڷֱ -#define NET_DVR_GET_AUDIOOUT_VOLUME_CFG 6369 //ȡƵڲ -#define NET_DVR_SET_AUDIOOUT_VOLUME_CFG 6370 //Ƶڲ -#define NET_DVR_INQUEST_PAUSE_CDW 6371 //ͣ¼ -#define NET_DVR_INQUEST_RESUME_CDW 6372 //ָ¼ -#define NET_DVR_GET_INPUT_CHAN_CFG 6373 //ȡͨ -#define NET_DVR_SET_INPUT_CHAN_CFG 6374 //ͨ -#define NET_DVR_GET_INQUEST_MIX_AUDIOIN_CFG 6375 //ȡѶƵ -#define NET_DVR_SET_INQUEST_MIX_AUDIOIN_CFG 6376 //ѶƵ -#define NET_DVR_CASE_INFO_CTRL 6377 //Ϣʾ -#define NET_DVR_GET_INQUEST_USER_RIGHT 6378 //ȡѶûȨ -#define NET_DVR_SET_INQUEST_USER_RIGHT 6379 //ѶûȨ -#define NET_DVR_GET_INQUEST_CASE_INFO 6380 //ȡѶϢ -#define NET_DVR_SET_INQUEST_CASE_INFO 6381 //ѶϢ +//审讯机外部命令 +#define NET_DVR_INQUEST_GET_CDW_STATUS 6350 //获取审讯机刻录状态-长连接 +#define NET_DVR_GET_MIX_AUDIOIN_CFG 6351 //获取混音输入口参数配置 +#define NET_DVR_SET_MIX_AUDIOIN_CFG 6352 //设置混音输入口参数配置 +#define NET_DVR_GET_MIX_AUDIOOUT_CFG 6353 //获取混音输出口参数配置 +#define NET_DVR_SET_MIX_AUDIOOUT_CFG 6354 //设置混音输出口参数配置 +#define NET_DVR_GET_AUDIOIN_VOLUME_CFG 6355 //获取音频输入口音量调节参数配置 +#define NET_DVR_SET_AUDIOIN_VOLUME_CFG 6356 //设置音频输入口音量调节参数配置 +#define NET_DVR_GET_AREA_MASK_CFG 6357 //获取马赛克区域配置 +#define NET_DVR_SET_AREA_MASK_CFG 6358 //设置马赛克区域配置 +#define NET_DVR_GET_AUDIO_DIACRITICAL_CFG 6359 //获取音频变音配置 +#define NET_DVR_SET_AUDIO_DIACRITICAL_CFG 6360 //设置音频变音配置 +#define NET_DVR_GET_WIFI_DHCP_ADDR_CFG 6361 //获WIFI DHCP 地址范围参数配置 +#define NET_DVR_SET_WIFI_DHCP_ADDR_CFG 6362 //设WIFI DHCP 地址范围参数配置 +#define NET_DVR_GET_WIFI_CLIENT_LIST_INFO 6363 //获取wifi热点下连接的设备信息 +#define NET_DVR_REMOTECONTROL_POWER_ON 6364 //远程开机 +#define NET_DVR_GET_MULTISTREAM_RELATION_CHAN_CFG 6365 //获取多码流关联通道参数配置 +#define NET_DVR_SET_MULTISTREAM_RELATION_CHAN_CFG 6366 //设置多码流关联通道参数配置 +#define NET_DVR_GET_VIDEOOUT_RESOLUTION_CFG 6367 //获取设备本地视频输出口分辨率 +#define NET_DVR_SET_VIDEOOUT_RESOLUTION_CFG 6368 //设置设备本地视频输出口分辨率 +#define NET_DVR_GET_AUDIOOUT_VOLUME_CFG 6369 //获取音频输出口音量调节参数配置 +#define NET_DVR_SET_AUDIOOUT_VOLUME_CFG 6370 //设置音频输出口音量调节参数配置 +#define NET_DVR_INQUEST_PAUSE_CDW 6371 //暂停刻录 +#define NET_DVR_INQUEST_RESUME_CDW 6372 //恢复刻录 +#define NET_DVR_GET_INPUT_CHAN_CFG 6373 //获取输入通道配置 +#define NET_DVR_SET_INPUT_CHAN_CFG 6374 //设置输入通道配置 +#define NET_DVR_GET_INQUEST_MIX_AUDIOIN_CFG 6375 //获取审讯机音频输入混音配置 +#define NET_DVR_SET_INQUEST_MIX_AUDIOIN_CFG 6376 //设置审讯机音频输入混音配置 +#define NET_DVR_CASE_INFO_CTRL 6377 //案件信息显示控制 +#define NET_DVR_GET_INQUEST_USER_RIGHT 6378 //获取审讯机用户权限 +#define NET_DVR_SET_INQUEST_USER_RIGHT 6379 //设置审讯机用户权限 +#define NET_DVR_GET_INQUEST_CASE_INFO 6380 //获取审讯案件信息配置 +#define NET_DVR_SET_INQUEST_CASE_INFO 6381 //设置审讯案件信息配置 -#define NET_DVR_GET_FILM_MODE_CFG 6387 //ȡӰģʽ -#define NET_DVR_SET_FILM_MODE_CFG 6388 //õӰģʽ -#define NET_DVR_GET_FILM_MODE_CFG_CAP 6389 //ȡӰģʽ +#define NET_DVR_GET_FILM_MODE_CFG 6387 //获取电影模式 +#define NET_DVR_SET_FILM_MODE_CFG 6388 //设置电影模式 +#define NET_DVR_GET_FILM_MODE_CFG_CAP 6389 //获取电影模式配置能力 -#define NET_DVR_GET_DIRECTED_STRATEGY_CFG 6390 //ȡ -#define NET_DVR_SET_DIRECTED_STRATEGY_CFG 6391 //õ -#define NET_DVR_GET_DIRECTED_STRATEGY_CFG_CAP 6392 //ȡӰģʽ -#define NET_DVR_GET_FRAME_CFG 6393 //ȡ߿ -#define NET_DVR_SET_FRAME_CFG 6394 //û߿ -#define NET_DVR_GET_FRAME_CFG_CAP 6395 //ȡ߿ -#define NET_DVR_GET_AUDIO_EFFECTIVE_CFG 6396 //ȡƵŻ -#define NET_DVR_SET_AUDIO_EFFECTIVE_CFG 6397 //ƵЧ -#define NET_DVR_GET_AUDIO_EFFECTIVE_CFG_CAP 6398 //ȡƵЧŻ -#define NET_DVR_GET_RECORD_VIDEO_CFG 6399 //ȡ¼Ƶ -#define NET_DVR_SET_RECORD_VIDEO_CFG 6400 //¼Ƶ +#define NET_DVR_GET_DIRECTED_STRATEGY_CFG 6390 //获取导播策略类型 +#define NET_DVR_SET_DIRECTED_STRATEGY_CFG 6391 //设置导播策略类型 +#define NET_DVR_GET_DIRECTED_STRATEGY_CFG_CAP 6392 //获取电影模式配置能力 +#define NET_DVR_GET_FRAME_CFG 6393 //获取画面边框 +#define NET_DVR_SET_FRAME_CFG 6394 //设置画面边框 +#define NET_DVR_GET_FRAME_CFG_CAP 6395 //获取画面边框配置能力 +#define NET_DVR_GET_AUDIO_EFFECTIVE_CFG 6396 //获取音频优化参数 +#define NET_DVR_SET_AUDIO_EFFECTIVE_CFG 6397 //设置音频效果参数 +#define NET_DVR_GET_AUDIO_EFFECTIVE_CFG_CAP 6398 //获取音频效果优化配置能力 +#define NET_DVR_GET_RECORD_VIDEO_CFG 6399 //获取录制视频参数 +#define NET_DVR_SET_RECORD_VIDEO_CFG 6400 //设置录制视频参数 -#define NET_DVR_GET_OUTPUT_CFG 6401 //ȡʾ -#define NET_DVR_SET_OUTPUT_CFG 6402 //ʾ -#define NET_DVR_CODER_DISPLAY_START 6403 //ʼ -#define NET_DVR_CODER_DISPLAY_STOP 6404 //ֹͣ -#define NET_DVR_GET_WINDOW_STATUS 6405 //ȡʾ״̬ +#define NET_DVR_GET_OUTPUT_CFG 6401 //获取显示输出参数 +#define NET_DVR_SET_OUTPUT_CFG 6402 //设置显示输出参数 +#define NET_DVR_CODER_DISPLAY_START 6403 //开始输出 +#define NET_DVR_CODER_DISPLAY_STOP 6404 //停止输出 +#define NET_DVR_GET_WINDOW_STATUS 6405 //获取显示窗口状态 -//VQDܽӿ -#define NET_DVR_GET_VQD_LOOP_DIAGNOSE_CFG 6406 //ȡVQDѭò -#define NET_DVR_SET_VQD_LOOP_DIAGNOSE_CFG 6407 //VQDѭò -#define NET_DVR_GET_VQD_DIAGNOSE_INFO 6408 //ֶȡVQDϢ +//VQD功能接口 +#define NET_DVR_GET_VQD_LOOP_DIAGNOSE_CFG 6406 //获取VQD循环诊断配置参数 +#define NET_DVR_SET_VQD_LOOP_DIAGNOSE_CFG 6407 //设置VQD循环诊断配置参数 +#define NET_DVR_GET_VQD_DIAGNOSE_INFO 6408 //手动获取VQD诊断信息 -#define NET_DVR_RECORDING_PUBLISH_FILE 6421 //ļ -#define NET_DVR_GET_RECORDING_PUBLISH_FILE_CAP 6422 //ȡļ -#define NET_DVR_GET_PUBLISH_PROGRESS 6423 //ȡ -#define NET_DVR_GET_RECORD_VIDEO_CFG_CAP 6424 //ȡ¼Ƶ -#define NET_DVR_GET_RTMP_CFG 6425 //ȡRTMP -#define NET_DVR_SET_RTMP_CFG 6426 //RTMP -#define NET_DVR_GET_RTMP_CFG_CAP 6427 //ȡRTMP -#define NET_DVR_DEL_BACKGROUND_PIC 6428 //ɾͼƬļ -#define NET_DVR_GET_BACKGROUND_PIC_CFG 6429 //ѯͼƬļ -#define NET_DVR_GET_BACKGROUND_PIC_INFO 6430 //ȡͼƬΪͼƬ -#define NET_DVR_SET_BACKGROUND_PIC_INFO 6431 //ͼƬΪͼƬ -#define NET_DVR_GET_BACKGROUND_PIC_INFO_CAP 6432 //ȡͼƬΪͼƬ -#define NET_DVR_GET_RECORD_HOST_CAP 6433 //ȡ¼ -#define NET_DVR_GET_COURSE_LIST 6434 //ȡγб -#define NET_DVR_GET_RECORD_STATUS 6435 //ѯ¼ǰ״̬ -#define NET_DVR_MANUAL_CURRICULUM_CONTROL 6436 //ֶα -#define NET_DVR_GET_IMAGE_DIFF_DETECTION_CFG 6437 //ȡͼּ -#define NET_DVR_SET_IMAGE_DIFF_DETECTION_CFG 6438 //ͼּ -#define NET_DVR_GET_IMAGE_DIFF_DETECTION_CFG_CAP 6439 //ȡͼּ -#define NET_DVR_GET_RECORDING_PUBLISH_FILE_INFO 6440 //ȡļϢ -#define NET_DVR_SET_RECORDING_PUBLISH_FILE_INFO 6441 //÷ļϢ -#define NET_DVR_GET_RECORDING_PUBLISH_FILE_INFO_CAP 6442 //ȡļϢ -#define NET_DVR_MANUAL_CURRICULUM_CONTROL_CAP 6443 //ȡֶγ¼ -#define NET_DVR_GET_STATISTIC_DATA_LIST 6444 //ȡͳб +#define NET_DVR_RECORDING_PUBLISH_FILE 6421 //文件发布 +#define NET_DVR_GET_RECORDING_PUBLISH_FILE_CAP 6422 //获取文件发布能力 +#define NET_DVR_GET_PUBLISH_PROGRESS 6423 //获取发布进度 +#define NET_DVR_GET_RECORD_VIDEO_CFG_CAP 6424 //获取录制视频配置能力 +#define NET_DVR_GET_RTMP_CFG 6425 //获取RTMP参数 +#define NET_DVR_SET_RTMP_CFG 6426 //设置RTMP参数 +#define NET_DVR_GET_RTMP_CFG_CAP 6427 //获取RTMP配置能力 +#define NET_DVR_DEL_BACKGROUND_PIC 6428 //删除背景图片文件 +#define NET_DVR_GET_BACKGROUND_PIC_CFG 6429 //查询背景图片文件 +#define NET_DVR_GET_BACKGROUND_PIC_INFO 6430 //获取哪张图片作为背景图片 +#define NET_DVR_SET_BACKGROUND_PIC_INFO 6431 //设置哪张图片作为背景图片 +#define NET_DVR_GET_BACKGROUND_PIC_INFO_CAP 6432 //获取哪张图片作为背景图片配置能力 +#define NET_DVR_GET_RECORD_HOST_CAP 6433 //获取录播主机总能力 +#define NET_DVR_GET_COURSE_LIST 6434 //获取课程列表 +#define NET_DVR_GET_RECORD_STATUS 6435 //查询录播主机当前状态 +#define NET_DVR_MANUAL_CURRICULUM_CONTROL 6436 //手动课表控制 +#define NET_DVR_GET_IMAGE_DIFF_DETECTION_CFG 6437 //获取图像差分检测参数 +#define NET_DVR_SET_IMAGE_DIFF_DETECTION_CFG 6438 //设置图像差分检测参数 +#define NET_DVR_GET_IMAGE_DIFF_DETECTION_CFG_CAP 6439 //获取图像差分检测配置能力 +#define NET_DVR_GET_RECORDING_PUBLISH_FILE_INFO 6440 //获取发布文件信息参数 +#define NET_DVR_SET_RECORDING_PUBLISH_FILE_INFO 6441 //设置发布文件信息参数 +#define NET_DVR_GET_RECORDING_PUBLISH_FILE_INFO_CAP 6442 //获取发布文件信息配置能力 +#define NET_DVR_MANUAL_CURRICULUM_CONTROL_CAP 6443 //获取手动课程录像的能力 +#define NET_DVR_GET_STATISTIC_DATA_LIST 6444 //获取统计数据列表 -#define NET_DVR_GET_DEVICE_LAN_ENCODE 6501 //ȡ豸Ա -#define NET_DVR_GET_GBT28181_SERVICE_CFG 6503 //ȡGB28181 -#define NET_DVR_SET_GBT28181_SERVICE_CFG 6504 //GB28181 -#define NET_DVR_GET_GBT28181_SERVICE_CAPABILITIES 6505 //ȡGB28181 +#define NET_DVR_GET_DEVICE_LAN_ENCODE 6501 //获取设备的语言编码 +#define NET_DVR_GET_GBT28181_SERVICE_CFG 6503 //获取GB28181服务器参数 +#define NET_DVR_SET_GBT28181_SERVICE_CFG 6504 //设置GB28181服务器参数 +#define NET_DVR_GET_GBT28181_SERVICE_CAPABILITIES 6505 //获取GB28181服务器能力 -#define NET_DVR_GET_CLOUD_URL 6506 //ȡƴ洢URL -#define NET_DVR_GET_CLOUD_URL_CAP 6507 //ȡƴ洢URL- -#define NET_DVR_GET_CLOUD_CFG 6508 //ȡƴ洢ò -#define NET_DVR_SET_CLOUD_CFG 6509 //ƴ洢ò -#define NET_DVR_GET_CLOUD_CFG_CAP 6510 //ȡƴ洢- -#define NET_DVR_GET_CLOUD_UPLOADSTRATEGY 6511 //ȡƴ洢ϴ -#define NET_DVR_SET_CLOUD_UPLOADSTRATEGY 6512 //ƴ洢ϴ -#define NET_DVR_GET_CLOUDSTORAGE_UPLOADSTRATEGY_CAP 6513 //ƴ洢ϴ- +#define NET_DVR_GET_CLOUD_URL 6506 //获取云存储URL +#define NET_DVR_GET_CLOUD_URL_CAP 6507 //获取云存储URL-能力集 +#define NET_DVR_GET_CLOUD_CFG 6508 //获取云存储配置参数 +#define NET_DVR_SET_CLOUD_CFG 6509 //设置云存储配置参数 +#define NET_DVR_GET_CLOUD_CFG_CAP 6510 //获取云存储配置-能力集 +#define NET_DVR_GET_CLOUD_UPLOADSTRATEGY 6511 //获取云存储上传策略 +#define NET_DVR_SET_CLOUD_UPLOADSTRATEGY 6512 //设置云存储上传策略 +#define NET_DVR_GET_CLOUDSTORAGE_UPLOADSTRATEGY_CAP 6513 //云存储上传策略配置-能力集 -#define NET_DVR_GET_VIDEO_IMAGE_DB_CFG 6601 //ȡͼϢ -#define NET_DVR_SET_VIDEO_IMAGE_DB_CFG 6602 //ͼϢ -#define NET_DVR_GET_VIDEO_IMAGE_DB_CFG_CAP 6603 //ȡͼ -#define NET_DVR_GET_FILE_INFO_BY_ID 6604 //ļIDȡͼļϢ -#define NET_DVR_QUERY_FILE_INFO_CAP 6605 //ļѯļϢ -#define NET_DVR_DEL_FILE_FROM_DB 6606 //ͼɾļ -#define NET_DVR_GET_VIDEO_IMAGE_DB_CAP 6607 //ȡͼ +#define NET_DVR_GET_VIDEO_IMAGE_DB_CFG 6601 //获取视图库信息 +#define NET_DVR_SET_VIDEO_IMAGE_DB_CFG 6602 //设置视图库信息 +#define NET_DVR_GET_VIDEO_IMAGE_DB_CFG_CAP 6603 //获取视图库相关能力 +#define NET_DVR_GET_FILE_INFO_BY_ID 6604 //根据文件ID获取视图库中文件信息 +#define NET_DVR_QUERY_FILE_INFO_CAP 6605 //根据文件名查询文件信息能力 +#define NET_DVR_DEL_FILE_FROM_DB 6606 //从视图库中删除文件 +#define NET_DVR_GET_VIDEO_IMAGE_DB_CAP 6607 //获取视图库总能力 -#define NET_DVR_GET_FIGURE 6610 //ȡͼ +#define NET_DVR_GET_FIGURE 6610 //获取缩略图 -#define NET_DVR_SYNC_IPC_PASSWD 6621 //ͬIPCNVRһ -#define NET_DVR_GET_VEHICLE_BLOCKLIST_SCHEDULE 6622 //ȡֹʱ -#define NET_DVR_SET_VEHICLE_BLOCKLIST_SCHEDULE 6623 //ýֹʱ +#define NET_DVR_SYNC_IPC_PASSWD 6621 //同步IPC密码与NVR一致 +#define NET_DVR_GET_VEHICLE_BLOCKLIST_SCHEDULE 6622 //获取禁止名单布防时间配置 +#define NET_DVR_SET_VEHICLE_BLOCKLIST_SCHEDULE 6623 //设置禁止名单布防时间配置 -#define NET_DVR_GET_VEHICLE_ALLOWLIST_SCHEDULE 6624 //ȡʱ -#define NET_DVR_SET_VEHICLE_ALLOWLIST_SCHEDULE 6625 //ʱ +#define NET_DVR_GET_VEHICLE_ALLOWLIST_SCHEDULE 6624 //获取允许名单布防时间配置 +#define NET_DVR_SET_VEHICLE_ALLOWLIST_SCHEDULE 6625 //设置允许名单布防时间配置 -#define NET_DVR_GET_VEHICLE_BLOCKLIST_EVENT_TRIGGER 6626 //ȡֹ -#define NET_DVR_SET_VEHICLE_BLOCKLIST_EVENT_TRIGGER 6627 //ýֹ +#define NET_DVR_GET_VEHICLE_BLOCKLIST_EVENT_TRIGGER 6626 //获取禁止名单布防联动配置 +#define NET_DVR_SET_VEHICLE_BLOCKLIST_EVENT_TRIGGER 6627 //设置禁止名单布防联动配置 -#define NET_DVR_GET_VEHICLE_ALLOWLIST_EVENT_TRIGGER 6628 //ȡ -#define NET_DVR_SET_VEHICLE_ALLOWLIST_EVENT_TRIGGER 6629 // +#define NET_DVR_GET_VEHICLE_ALLOWLIST_EVENT_TRIGGER 6628 //获取允许名单布防联动配置 +#define NET_DVR_SET_VEHICLE_ALLOWLIST_EVENT_TRIGGER 6629 //设置允许名单布防联动配置 -#define NET_DVR_GET_TRAFFIC_CAP 6630 //ȡץ -#define NET_DVR_GET_VEHICLE_ALLLIST_EVENT_TRIGGER 6631 //ȡȫⲼ -#define NET_DVR_SET_VEHICLE_ALLLIST_EVENT_TRIGGER 6632 //ȫⲼ -#define NET_DVR_GET_VEHICLE_OTHERLIST_EVENT_TRIGGER 6633 //ȡ -#define NET_DVR_SET_VEHICLE_OTHERLIST_EVENT_TRIGGER 6634 // +#define NET_DVR_GET_TRAFFIC_CAP 6630 //获取抓拍相关能力集 +#define NET_DVR_GET_VEHICLE_ALLLIST_EVENT_TRIGGER 6631 //获取全部车辆检测布防联动配置 +#define NET_DVR_SET_VEHICLE_ALLLIST_EVENT_TRIGGER 6632 //设置全部车辆检测布防联动配置 +#define NET_DVR_GET_VEHICLE_OTHERLIST_EVENT_TRIGGER 6633 //获取其他单布防联动配置 +#define NET_DVR_SET_VEHICLE_OTHERLIST_EVENT_TRIGGER 6634 //设置其他单布防联动配置 -#define NET_DVR_GET_STORAGEDETECTION_EVENT_TRIGGER 6635 //ȡ洢 -#define NET_DVR_SET_STORAGEDETECTION_EVENT_TRIGGER 6636 //ô洢 -#define NET_DVR_GET_STORAGEDETECTION_SCHEDULE_CAPABILITIES 6637 //ȡ洢Ⲽʱ -#define NET_DVR_GET_STORAGEDETECTION_SCHEDULE 6638 //ȡ洢ʱ -#define NET_DVR_SET_STORAGEDETECTION_SCHEDULE 6639 //ô洢ʱ -#define NET_DVR_GET_STORAGEDETECTION_STATE 6640 //ȡ洢״̬ +#define NET_DVR_GET_STORAGEDETECTION_EVENT_TRIGGER 6635 //获取存储健康检测联动配置 +#define NET_DVR_SET_STORAGEDETECTION_EVENT_TRIGGER 6636 //设置存储健康检测联动配置 +#define NET_DVR_GET_STORAGEDETECTION_SCHEDULE_CAPABILITIES 6637 //获取存储健康检测布防时间能力 +#define NET_DVR_GET_STORAGEDETECTION_SCHEDULE 6638 //获取存储健康布防时间配置 +#define NET_DVR_SET_STORAGEDETECTION_SCHEDULE 6639 //设置存储健康布防时间配置 +#define NET_DVR_GET_STORAGEDETECTION_STATE 6640 //获取存储健康状态 -#define NET_DVR_GET_STORAGEDETECTION_RWLOCK 6646 //ȡ洢Ķд -#define NET_DVR_GET_STORAGEDETECTION_RWLOCK_CAPABILITIES 6647 //ȡ洢Ķд -#define NET_DVR_SET_STORAGEDETECTION_RWLOCK 6648 //ô洢Ķд -#define NET_DVR_GET_PTZTRACKSTATUS 6649 //ȡ״̬ +#define NET_DVR_GET_STORAGEDETECTION_RWLOCK 6646 //获取存储侦测的读写锁配置 +#define NET_DVR_GET_STORAGEDETECTION_RWLOCK_CAPABILITIES 6647 //获取存储侦测的读写锁配置能力 +#define NET_DVR_SET_STORAGEDETECTION_RWLOCK 6648 //设置存储侦测的读写锁配置 +#define NET_DVR_GET_PTZTRACKSTATUS 6649 //获取球机联动状态 -#define NET_DVR_SET_STORAGEDETECTION_UNLOCK 6653 //ô洢Ľ -#define NET_DVR_GET_STORAGEDETECTION_UNLOCK_CAPABILITIES 6654 //ȡ洢Ľ +#define NET_DVR_SET_STORAGEDETECTION_UNLOCK 6653 //设置存储侦测的解锁配置 +#define NET_DVR_GET_STORAGEDETECTION_UNLOCK_CAPABILITIES 6654 //获取存储侦测的解锁配置能力 -#define NET_DVR_SET_SHIPSDETECTION_CFG 6655 //ôֻ -#define NET_DVR_GET_SHIPSDETECTION_CFG 6656 //ȡֻ -#define NET_DVR_GET_SHIPSDETECTION_CAPABILITIES 6657 //ȡֻ -#define NET_DVR_GET_SHIPSDETECTION_COUNT 6658 //ȡֻϢ -#define NET_DVR_SHIPSCOUNT_DELETE_CTRL 6659 //մֻϢ +#define NET_DVR_SET_SHIPSDETECTION_CFG 6655 //设置船只检测参数配置 +#define NET_DVR_GET_SHIPSDETECTION_CFG 6656 //获取船只检测参数配置 +#define NET_DVR_GET_SHIPSDETECTION_CAPABILITIES 6657 //获取船只检测参数配置能力 +#define NET_DVR_GET_SHIPSDETECTION_COUNT 6658 //获取船只计数信息 +#define NET_DVR_SHIPSCOUNT_DELETE_CTRL 6659 //清空船只计数信息 -#define NET_DVR_GET_BAREDATAOVERLAY_CAPABILITIES 6660 //ȡݵ -#define NET_DVR_SET_BAREDATAOVERLAY_CFG 6661 //ݵ -#define NET_DVR_GET_BAREDATAOVERLAY_CFG 6662 //ȡݵ -#define NET_DVR_GET_SHIPSDETECTION_SCHEDULE 6663 //ȡֻⲼʱ -#define NET_DVR_SET_SHIPSDETECTION_SCHEDULE 6664 //ôֻⲼʱ -#define NET_DVR_GET_SHIPSDETECTION_EVENT_TRIGGER 6665 //ȡֻ -#define NET_DVR_SET_SHIPSDETECTION_EVENT_TRIGGER 6666 //ôֻ -#define NET_DVR_GET_SHIPSDETECTION_SCHEDULE_CAPABILITIES 6667 //ȡֻⲼʱ +#define NET_DVR_GET_BAREDATAOVERLAY_CAPABILITIES 6660 //获取裸数据叠加能力 +#define NET_DVR_SET_BAREDATAOVERLAY_CFG 6661 //设置裸数据叠加 +#define NET_DVR_GET_BAREDATAOVERLAY_CFG 6662 //获取裸数据叠加 +#define NET_DVR_GET_SHIPSDETECTION_SCHEDULE 6663 //获取船只检测布防时间配置 +#define NET_DVR_SET_SHIPSDETECTION_SCHEDULE 6664 //设置船只检测布防时间配置 +#define NET_DVR_GET_SHIPSDETECTION_EVENT_TRIGGER 6665 //获取船只检测联动配置 +#define NET_DVR_SET_SHIPSDETECTION_EVENT_TRIGGER 6666 //设置船只检测联动配置 +#define NET_DVR_GET_SHIPSDETECTION_SCHEDULE_CAPABILITIES 6667 //获取船只检测布防时间能力 -#define NET_DVR_FIRE_FOCUSZOOM_CTRL 6670 //ɼ⾵ͷ۽䱶 +#define NET_DVR_FIRE_FOCUSZOOM_CTRL 6670 //火点可见光镜头聚焦变倍 -#define NET_DVR_GET_FIREDETECTION_SCHEDULE_CAPABILITIES 6671 //ȡⲼʱ -#define NET_DVR_GET_FIREDETECTION_SCHEDULE 6672 //ȡⲼʱ -#define NET_DVR_SET_FIREDETECTION_SCHEDULE 6673 //ûⲼʱ -#define NET_DVR_GET_MANUALRANGING_CAPABILITIES 6675 //ȡֶ -#define NET_DVR_SET_MANUALRANGING 6677 //ֶ -#define NET_DVR_GET_MANUALDEICING_CAPABILITIES 6678//ȡֶ -#define NET_DVR_SET_MANUALDEICING 6679 //ֶ -#define NET_DVR_GET_MANUALDEICING 6680 //ȡֶ +#define NET_DVR_GET_FIREDETECTION_SCHEDULE_CAPABILITIES 6671 //获取火点检测布防时间能力 +#define NET_DVR_GET_FIREDETECTION_SCHEDULE 6672 //获取火点检测布防时间配置 +#define NET_DVR_SET_FIREDETECTION_SCHEDULE 6673 //设置火点检测布防时间配置 +#define NET_DVR_GET_MANUALRANGING_CAPABILITIES 6675 //获取手动测距配置能力 +#define NET_DVR_SET_MANUALRANGING 6677 //设置手动测距参数 +#define NET_DVR_GET_MANUALDEICING_CAPABILITIES 6678//获取手动除冰配置能力 +#define NET_DVR_SET_MANUALDEICING 6679 //设置手动除冰 +#define NET_DVR_GET_MANUALDEICING 6680 //获取手动除冰 -#define NET_DVR_GET_THERMALPOWER_CAPABILITIES 6689 //ȡԴ -#define NET_DVR_GET_THERMALPOWER 6690 //ȡԴò -#define NET_DVR_SET_THERMALPOWER 6691 //Դò -#define NET_DVR_GET_PTZABSOLUTEEX_CAPABILITIES 6695 //ȡ߾PTZλչ -#define NET_DVR_GET_PTZABSOLUTEEX 6696 //ȡ߾PTZλչ -#define NET_DVR_SET_PTZABSOLUTEEX 6697 //ø߾PTZλչ +#define NET_DVR_GET_THERMALPOWER_CAPABILITIES 6689 //获取相机电源配置能力 +#define NET_DVR_GET_THERMALPOWER 6690 //获取相机电源配置参数 +#define NET_DVR_SET_THERMALPOWER 6691 //设置相机电源配置参数 +#define NET_DVR_GET_PTZABSOLUTEEX_CAPABILITIES 6695 //获取高精度PTZ绝对位置配置扩展能力 +#define NET_DVR_GET_PTZABSOLUTEEX 6696 //获取高精度PTZ绝对位置配置扩展 +#define NET_DVR_SET_PTZABSOLUTEEX 6697 //设置高精度PTZ绝对位置配置扩展 -#define NET_DVR_GET_CRUISE_CAPABILITIES 6698 //ȡ豸Ѳģʽ -#define NET_DVR_GET_CRUISE_INFO 6699 //ȡ豸Ѳģʽ -#define NET_DVR_GET_TEMP_HUMI_CAPABILITIES 6700 //ʪʵʱȡ -#define NET_DVR_GET_TEMP_HUMI_INFO 6701 //ʪʵʱȡ +#define NET_DVR_GET_CRUISE_CAPABILITIES 6698 //获取设备巡航模式配置能力 +#define NET_DVR_GET_CRUISE_INFO 6699 //获取设备巡航模式 +#define NET_DVR_GET_TEMP_HUMI_CAPABILITIES 6700 //温湿度实时能力获取 +#define NET_DVR_GET_TEMP_HUMI_INFO 6701 //温湿度实时获取 -#define NET_DVR_GET_MANUALTHERM_INFO 6706 //ֶʵʱȡ -#define NET_DVR_GET_MANUALTHERM_CAPABILITIES 6707 //ȡֶʵʱ -#define NET_DVR_SET_MANUALTHERM 6708 //ֶ +#define NET_DVR_GET_MANUALTHERM_INFO 6706 //手动测温实时获取 +#define NET_DVR_GET_MANUALTHERM_CAPABILITIES 6707 //获取手动测温实时数据能力 +#define NET_DVR_SET_MANUALTHERM 6708 //设置手动测温数据设置 //DVR96000 -#define NET_DVR_GET_ACCESSORY_CARD_INFO_CAPABILITIES 6709 //ȡϢ -#define NET_DVR_GET_ACCESSORY_CARD_INFO 6710 //ȡϢ +#define NET_DVR_GET_ACCESSORY_CARD_INFO_CAPABILITIES 6709 //获取配件板信息能力 +#define NET_DVR_GET_ACCESSORY_CARD_INFO 6710 //获取配件板信息 -#define NET_DVR_GET_THERMINTELL_CAPABILITIES 6711 //ȡȳܻ -#define NET_DVR_GET_THERMINTELL 6712 //ȡȳܻò -#define NET_DVR_SET_THERMINTELL 6713 //ȳܻò -#define NET_GET_CRUISEPOINT_V50 6714 //ȡѲ·չ -#define NET_DVR_GET_MANUALTHERM_BASIC_CAPABILITIES 6715 //ȡֶ» -#define NET_DVR_SET_MANUALTHERM_BASICPARAM 6716 //ֶ» -#define NET_DVR_GET_MANUALTHERM_BASICPARAM 6717 //ȡֶ» +#define NET_DVR_GET_THERMINTELL_CAPABILITIES 6711 //获取热成像智能互斥能力 +#define NET_DVR_GET_THERMINTELL 6712 //获取热成像智能互斥配置参数 +#define NET_DVR_SET_THERMINTELL 6713 //设置热成像智能互斥配置参数 +#define NET_GET_CRUISEPOINT_V50 6714 //获取巡航路径配置扩展 +#define NET_DVR_GET_MANUALTHERM_BASIC_CAPABILITIES 6715 //获取手动测温基本参数配置能力 +#define NET_DVR_SET_MANUALTHERM_BASICPARAM 6716 //设置手动测温基本参数 +#define NET_DVR_GET_MANUALTHERM_BASICPARAM 6717 //获取手动测温基本参数 -#define NET_DVR_GET_FIRESHIELDMASK_CAPABILITIES 6718 //ȡ +#define NET_DVR_GET_FIRESHIELDMASK_CAPABILITIES 6718 //获取火点区域屏蔽能力 -#define NET_DVR_GET_HIDDEN_INFORMATION_CAPABILITIES 6720 //Ϣ -#define NET_DVR_GET_HIDDEN_INFORMATION 6721 //ȡϢ -#define NET_DVR_SET_HIDDEN_INFORMATION 6722 //Ϣ +#define NET_DVR_GET_HIDDEN_INFORMATION_CAPABILITIES 6720 //隐藏信息配置能力 +#define NET_DVR_GET_HIDDEN_INFORMATION 6721 //获取隐藏信息参数 +#define NET_DVR_SET_HIDDEN_INFORMATION 6722 //设置隐藏信息参数 -#define NET_DVR_SET_FIRESHIELDMASK_CFG 6723 //ûβ -#define NET_DVR_GET_FIRESHIELDMASK_CFG 6724 //ȡβ +#define NET_DVR_SET_FIRESHIELDMASK_CFG 6723 //设置火点区域屏蔽参数 +#define NET_DVR_GET_FIRESHIELDMASK_CFG 6724 //获取火点区域屏蔽参数 -#define NET_DVR_GET_SMOKESHIELDMASK_CAPABILITIES 6725 //ȡ -#define NET_DVR_SET_SMOKESHIELDMASK_CFG 6726 //β -#define NET_DVR_GET_SMOKESHIELDMASK_CFG 6727 //ȡβ +#define NET_DVR_GET_SMOKESHIELDMASK_CAPABILITIES 6725 //获取烟雾区域屏蔽能力 +#define NET_DVR_SET_SMOKESHIELDMASK_CFG 6726 //设置烟雾区域屏蔽参数 +#define NET_DVR_GET_SMOKESHIELDMASK_CFG 6727 //获取烟雾区域屏蔽参数 -#define NET_DVR_GET_AREASCAN_CAPABILITIES 6728 //ȡɨ -#define NET_DVR_GET_AREASCAN_CFG 6730 //ȡɨ +#define NET_DVR_GET_AREASCAN_CAPABILITIES 6728 //获取区域扫描能力 +#define NET_DVR_GET_AREASCAN_CFG 6730 //获取区域扫描参数 -#define NET_DVR_DEL_AREASCAN_CFG 6731 //ɨɾ -#define NET_DVR_AREASCAN_INIT_CTRL 6732 //ɨ -#define NET_DVR_AREASCAN_CONFIRM_CTRL 6733 //ɨ -#define NET_DVR_AREASCAN_STOP_CTRL 6734 //ֹͣɨ -#define NET_DVR_SAVE_SCANZOOM_CTRL 6735 //ɨ豶ʣ浱ǰѧΪɨ豶 -#define NET_DVR_GET_SCANZOOM_CTRL 6736 //ȡɨ豶ʣԤеĹѧʷصǰɨ豶ʡ -#define NET_DVR_DEL_FIRESHIELDMASK_CTRL 6737 //ɾ -#define NET_DVR_DEL_SMOKESHIELDMASK_CTRL 6738 //ɾ +#define NET_DVR_DEL_AREASCAN_CFG 6731 //扫描区域删除 +#define NET_DVR_AREASCAN_INIT_CTRL 6732 //进入区域扫描设置 +#define NET_DVR_AREASCAN_CONFIRM_CTRL 6733 //保存区域扫描设置 +#define NET_DVR_AREASCAN_STOP_CTRL 6734 //停止区域扫描设置 +#define NET_DVR_SAVE_SCANZOOM_CTRL 6735 //设置扫描倍率;保存当前光学倍率为扫描倍率 +#define NET_DVR_GET_SCANZOOM_CTRL 6736 //获取扫描倍率;将预览界面中的光学倍率返回到当前扫描倍率。 +#define NET_DVR_DEL_FIRESHIELDMASK_CTRL 6737 //删除火点屏蔽区域 +#define NET_DVR_DEL_SMOKESHIELDMASK_CTRL 6738 //删除烟雾屏蔽区域 -#define NET_DVR_GET_DENSEFOG_EVENT_TRIGGER 6740 //ȡ -#define NET_DVR_SET_DENSEFOG_EVENT_TRIGGER 6741 //ô -#define NET_DVR_SET_DENSEFOGDETECTION_CFG 6742 //ô -#define NET_DVR_GET_DENSEFOGDETECTION_CFG 6743 //ȡ -#define NET_DVR_GET_DENSEFOGDETECTION_CAPABILITIES 6744 //ȡ +#define NET_DVR_GET_DENSEFOG_EVENT_TRIGGER 6740 //获取大雾检测联动配置 +#define NET_DVR_SET_DENSEFOG_EVENT_TRIGGER 6741 //设置大雾检测联动配置 +#define NET_DVR_SET_DENSEFOGDETECTION_CFG 6742 //设置大雾检测参数配置 +#define NET_DVR_GET_DENSEFOGDETECTION_CFG 6743 //获取大雾检测参数配置 +#define NET_DVR_GET_DENSEFOGDETECTION_CAPABILITIES 6744 //获取大雾检测参数配置能力 -#define NET_DVR_GET_THERMOMETRY_SCHEDULE_CAPABILITIES 6750 //ȡ¼Ⲽʱ -#define NET_DVR_GET_THERMOMETRY_SCHEDULE 6751 //ȡ¼Ⲽʱ -#define NET_DVR_SET_THERMOMETRY_SCHEDULE 6752 //ò¼Ⲽʱ -#define NET_DVR_GET_TEMPERTURE_SCHEDULE_CAPABILITIES 6753 //ȡ²ʱ -#define NET_DVR_GET_TEMPERTURE_SCHEDULE 6754 //ȡ²ʱ -#define NET_DVR_SET_TEMPERTURE_SCHEDULE 6755 //²ʱ -#define NET_DVR_GET_SEARCH_LOG_CAPABILITIES 6756 //־֧ -#define NET_DVR_GET_VEHICLEFLOW 6758 //ȡ -#define NET_DVR_GET_IPADDR_FILTERCFG_V50 6759 //ȡIPַ˲չ -#define NET_DVR_SET_IPADDR_FILTERCFG_V50 6760 //IPַ˲չ -#define NET_DVR_GET_TEMPHUMSENSOR_CAPABILITIES 6761 //ȡʪȴ -#define NET_DVR_GET_TEMPHUMSENSOR 6762 //ȡʪȴЭ -#define NET_DVR_SET_TEMPHUMSENSOR 6763 //ʪȴЭ +#define NET_DVR_GET_THERMOMETRY_SCHEDULE_CAPABILITIES 6750 //获取测温检测布防时间能力 +#define NET_DVR_GET_THERMOMETRY_SCHEDULE 6751 //获取测温检测布防时间配置 +#define NET_DVR_SET_THERMOMETRY_SCHEDULE 6752 //设置测温检测布防时间配置 +#define NET_DVR_GET_TEMPERTURE_SCHEDULE_CAPABILITIES 6753 //获取温差布防时间能力 +#define NET_DVR_GET_TEMPERTURE_SCHEDULE 6754 //获取温差布防时间配置 +#define NET_DVR_SET_TEMPERTURE_SCHEDULE 6755 //设置温差布防时间配置 +#define NET_DVR_GET_SEARCH_LOG_CAPABILITIES 6756 //日志类型支持能力 +#define NET_DVR_GET_VEHICLEFLOW 6758 //获取车流量数据 +#define NET_DVR_GET_IPADDR_FILTERCFG_V50 6759 //获取IP地址过滤参数扩展 +#define NET_DVR_SET_IPADDR_FILTERCFG_V50 6760 //设置IP地址过滤参数扩展 +#define NET_DVR_GET_TEMPHUMSENSOR_CAPABILITIES 6761 //获取温湿度传感器的能力 +#define NET_DVR_GET_TEMPHUMSENSOR 6762 //获取温湿度传感器配置协议 +#define NET_DVR_SET_TEMPHUMSENSOR 6763 //设置温湿度传感器配置协议 -#define NET_DVR_GET_THERMOMETRY_MODE_CAPABILITIES 6764 //ȡģʽ -#define NET_DVR_GET_THERMOMETRY_MODE 6765 //ȡģʽ -#define NET_DVR_SET_THERMOMETRY_MODE 6766 //òģʽ +#define NET_DVR_GET_THERMOMETRY_MODE_CAPABILITIES 6764 //获取测温模式能力 +#define NET_DVR_GET_THERMOMETRY_MODE 6765 //获取测温模式参数 +#define NET_DVR_SET_THERMOMETRY_MODE 6766 //设置测温模式参数 -#define NET_DVR_GET_THERMAL_PIP_CAPABILITIES 6767 //ȡȳл -#define NET_DVR_GET_THERMAL_PIP 6768 //ȡȳлò -#define NET_DVR_SET_THERMAL_PIP 6769 //ȳлò -#define NET_DVR_GET_THERMAL_INTELRULEDISPLAY_CAPABILITIES 6770 //ȡȳܹʾ -#define NET_DVR_GET_THERMAL_INTELRULE_DISPLAY 6771 //ȡȳܹʾ -#define NET_DVR_SET_THERMAL_INTELRULE_DISPLAY 6772 //ȳܹʾ -#define NET_DVR_GET_THERMAL_ALGVERSION 6773 //ȡȳ㷨汾 -#define NET_DVR_GET_CURRENT_LOCK_CAPABILITIES 6774 //ȡ -#define NET_DVR_GET_CURRENT_LOCK 6775 //ȡò -#define NET_DVR_SET_CURRENT_LOCK 6776 //õò +#define NET_DVR_GET_THERMAL_PIP_CAPABILITIES 6767 //获取热成像画中画配置能力 +#define NET_DVR_GET_THERMAL_PIP 6768 //获取热成像画中画配置参数 +#define NET_DVR_SET_THERMAL_PIP 6769 //设置热成像画中画配置参数 +#define NET_DVR_GET_THERMAL_INTELRULEDISPLAY_CAPABILITIES 6770 //获取热成像智能规则显示能力 +#define NET_DVR_GET_THERMAL_INTELRULE_DISPLAY 6771 //获取热成像智能规则显示参数 +#define NET_DVR_SET_THERMAL_INTELRULE_DISPLAY 6772 //设置热成像智能规则显示参数 +#define NET_DVR_GET_THERMAL_ALGVERSION 6773 //获取热成像相关算法库版本 +#define NET_DVR_GET_CURRENT_LOCK_CAPABILITIES 6774 //获取电流锁定配置能力 +#define NET_DVR_GET_CURRENT_LOCK 6775 //获取电流锁定配置参数 +#define NET_DVR_SET_CURRENT_LOCK 6776 //设置电流锁定配置参数 -#define NET_DVR_DEL_MANUALTHERM_RULE 6778 //ɾֶ¹ +#define NET_DVR_DEL_MANUALTHERM_RULE 6778 //删除手动测温规则 -#define NET_DVR_GET_UPGRADE_INFO 6779 //ȡϢ +#define NET_DVR_GET_UPGRADE_INFO 6779 //获取升级信息 #define NET_DVR_SWITCH_TRANSFER 7000 -#define NET_DVR_GET_MB_POWERCTRLPARA 8000//ȡƲ -#define NET_DVR_SET_MB_POWERCTRLPARA 8001 //Ʋ -#define NET_DVR_GET_AUTOBACKUPPARA 8002//ȡԶݲ -#define NET_DVR_SET_AUTOBACKUPPARA 8003 //Զݲ -#define NET_DVR_GET_MB_GPSPARA 8004//ȡGPS -#define NET_DVR_SET_MB_GPSPARA 8005 //GPS -#define NET_DVR_GET_MB_SENSORINPARA 8006//ȡSENSOR -#define NET_DVR_SET_MB_SENSORINPARA 8007 //SENSOR -#define NET_DVR_GET_GSENSORPARA 8008//ȡGSENSOR -#define NET_DVR_SET_GSENSORPARA 8009 //GSENSOR -#define NET_DVR_GET_MB_DOWNLOADSVRPARA 8010//ȡط -#define NET_DVR_SET_MB_DOWNLOADSVRPARA 8011//ط -#define NET_DVR_GET_PLATERECOG_PARA 8012//ȡʶ -#define NET_DVR_SET_PLATERECOG_PARA 8013//óʶ -#define NET_DVR_GET_ENFORCESYS_PARA 8014//ȡ -#define NET_DVR_SET_ENFORCESYS_PARA 8015//ó -#define NET_DVR_GET_GPS_DATA 8016 //ȡGPS -#define NET_DVR_GET_ANALOG_ALARMINCFG 8017//ȡģⱨ -#define NET_DVR_SET_ANALOG_ALARMINCFG 8018//ģⱨ +#define NET_DVR_GET_MB_POWERCTRLPARA 8000//获取启动控制参数 +#define NET_DVR_SET_MB_POWERCTRLPARA 8001 //设置启动控制参数 +#define NET_DVR_GET_AUTOBACKUPPARA 8002//获取自动备份参数 +#define NET_DVR_SET_AUTOBACKUPPARA 8003 //设置自动备份参数 +#define NET_DVR_GET_MB_GPSPARA 8004//获取GPS参数 +#define NET_DVR_SET_MB_GPSPARA 8005 //设置GPS参数 +#define NET_DVR_GET_MB_SENSORINPARA 8006//获取SENSOR参数 +#define NET_DVR_SET_MB_SENSORINPARA 8007 //设置SENSOR参数 +#define NET_DVR_GET_GSENSORPARA 8008//获取GSENSOR参数 +#define NET_DVR_SET_GSENSORPARA 8009 //设置GSENSOR参数 +#define NET_DVR_GET_MB_DOWNLOADSVRPARA 8010//获取下载服务器参数 +#define NET_DVR_SET_MB_DOWNLOADSVRPARA 8011//设置下载服务器参数 +#define NET_DVR_GET_PLATERECOG_PARA 8012//获取车牌识别参数 +#define NET_DVR_SET_PLATERECOG_PARA 8013//设置车牌识别参数 +#define NET_DVR_GET_ENFORCESYS_PARA 8014//获取车辆稽查参数 +#define NET_DVR_SET_ENFORCESYS_PARA 8015//设置车辆稽查参数 +#define NET_DVR_GET_GPS_DATA 8016 //获取GPS数据 +#define NET_DVR_GET_ANALOG_ALARMINCFG 8017//获取模拟报警输入参数 +#define NET_DVR_SET_ANALOG_ALARMINCFG 8018//设置模拟报警输入参数 -#define NET_DVR_GET_SYSTEM_CAPABILITIES 8100 //ȡ豸ϵͳ -#define NET_DVR_GET_EAGLEEYE_CAPABILITIES 8101 //ȡ豸ӥ -#define NET_DVR_GET_SLAVECAMERA_CALIB_V51 8102 //ȡ궨V51 -#define NET_DVR_SET_SLAVECAMERA_CALIB_V51 8103 //ô궨V51 -#define NET_DVR_SET_GOTOSCENE 8105 //תָijID +#define NET_DVR_GET_SYSTEM_CAPABILITIES 8100 //获取设备的系统能力 +#define NET_DVR_GET_EAGLEEYE_CAPABILITIES 8101 //获取设备鹰眼能力 +#define NET_DVR_GET_SLAVECAMERA_CALIB_V51 8102 //获取从摄像机标定配置V51 +#define NET_DVR_SET_SLAVECAMERA_CALIB_V51 8103 //设置从摄像机标定配置V51 +#define NET_DVR_SET_GOTOSCENE 8105 //设置主摄像机转向指定的场景ID -//IKEϵNVRƷ -#define NET_DVR_GET_PTZ_NOTIFICATION 8201//ȡͨ¼PTZ -#define NET_DVR_SET_PTZ_NOTIFICATION 8202//öͨ¼PTZ -/*****************************ǽ start****************************/ -#define NET_DVR_MATRIX_WALL_SET 9001 //õǽĻ -#define NET_DVR_MATRIX_WALL_GET 9002 //ȡǽĻ -#define NET_DVR_WALLWIN_GET 9003 //ǽлȡڲ -#define NET_DVR_WALLWIN_SET 9004 //ǽôڲ -#define NET_DVR_WALLWINPARAM_SET 9005 //õǽز -#define NET_DVR_WALLWINPARAM_GET 9006 //ȡǽز -#define NET_DVR_WALLSCENEPARAM_GET 9007 //óģʽ -#define NET_DVR_WALLSCENEPARAM_SET 9008 //ȡģʽ -#define NET_DVR_MATRIX_GETWINSTATUS 9009 //ȡڽ״̬ -#define NET_DVR_GET_WINASSOCIATEDDEVINFO 9010 //ǽлȡӦԴϢ -#define NET_DVR_WALLOUTPUT_GET 9011 //ǽлȡʾ -#define NET_DVR_WALLOUTPUT_SET 9012 //ǽʾ -#define NET_DVR_GET_UNITEDMATRIXSYSTEM 9013 //ǽлȡӦԴ -#define NET_DVR_GET_WALL_CFG 9014 //ȡǽȫֲ -#define NET_DVR_SET_WALL_CFG 9015 //õǽȫֲ -#define NET_DVR_CLOSE_ALL_WND 9016 //رд -#define NET_DVR_SWITCH_WIN_TOP 9017 //ö -#define NET_DVR_SWITCH_WIN_BOTTOM 9018 //õ +//I、K、E系列NVR产品升级 +#define NET_DVR_GET_PTZ_NOTIFICATION 8201//获取多通道事件联动PTZ +#define NET_DVR_SET_PTZ_NOTIFICATION 8202//设置多通道事件联动PTZ +/*****************************电视墙 start****************************/ +#define NET_DVR_MATRIX_WALL_SET 9001 //设置电视墙中屏幕参数 +#define NET_DVR_MATRIX_WALL_GET 9002 //获取电视墙中屏幕参数 +#define NET_DVR_WALLWIN_GET 9003 //电视墙中获取窗口参数 +#define NET_DVR_WALLWIN_SET 9004 //电视墙中设置窗口参数 +#define NET_DVR_WALLWINPARAM_SET 9005 //设置电视墙窗口相关参数 +#define NET_DVR_WALLWINPARAM_GET 9006 //获取电视墙窗口相关参数 +#define NET_DVR_WALLSCENEPARAM_GET 9007 //设置场景模式参数 +#define NET_DVR_WALLSCENEPARAM_SET 9008 //获取场景模式参数 +#define NET_DVR_MATRIX_GETWINSTATUS 9009 //获取窗口解码状态 +#define NET_DVR_GET_WINASSOCIATEDDEVINFO 9010 //电视墙中获取对应资源信息 +#define NET_DVR_WALLOUTPUT_GET 9011 //电视墙中获取显示输出参数 +#define NET_DVR_WALLOUTPUT_SET 9012 //电视墙中设置显示输出参数 +#define NET_DVR_GET_UNITEDMATRIXSYSTEM 9013 //电视墙中获取对应资源 +#define NET_DVR_GET_WALL_CFG 9014 //获取电视墙全局参数 +#define NET_DVR_SET_WALL_CFG 9015 //设置电视墙全局参数 +#define NET_DVR_CLOSE_ALL_WND 9016 //关闭所有窗口 +#define NET_DVR_SWITCH_WIN_TOP 9017 //窗口置顶 +#define NET_DVR_SWITCH_WIN_BOTTOM 9018 //窗口置底 -#define NET_DVR_CLOSE_ALL_WND_V41 9019 //ǽرдv41жǽ -#define NET_DVR_GET_WALL_WINDOW_V41 9020 //ȡǽеĴv41 -#define NET_DVR_SET_WALL_WINDOW_V41 9021 //õǽеĴv41 -#define NET_DVR_GET_CURRENT_SCENE_V41 9022 //ȡǰǽʹõijv41 -#define NET_DVR_GET_WALL_SCENE_PARAM_V41 9023 //ȡǰǽʹõijv41 -#define NET_DVR_SET_WALL_SCENE_PARAM_V41 9024 //õǰǽʹõijv41 -#define NET_DVR_GET_MATRIX_LOGO_CFG 9025 //ȡlogo -#define NET_DVR_SET_MATRIX_LOGO_CFG 9026 //logo -#define NET_DVR_GET_WIN_LOGO_CFG 9027 //ȡlogo -#define NET_DVR_SET_WIN_LOGO_CFG 9028 //ôlogo -#define NET_DVR_DELETE_LOGO 9029 //ɾlogo -#define NET_DVR_SET_DISPLAY_EFFECT_CFG 9030 //ʾЧv41 -#define NET_DVR_GET_DISPLAY_EFFECT_CFG 9031 //ȡʾЧv41 -#define NET_DVR_DEC_PLAY_REMOTE_FILE 9032 //벥Զļ -#define NET_DVR_DEC_PLAY_REMOTE_FILE_V50 9314 //벥ԶļV50 -#define NET_DVR_GET_WIN_ZOOM_STATUS 9033 //ȡڵӷŴ״̬ -#define NET_DVR_GET_ALL_MATRIX_LOGOCFG 9034 //ȡlogo +#define NET_DVR_CLOSE_ALL_WND_V41 9019 //电视墙关闭所有窗口v41(有多个电视墙) +#define NET_DVR_GET_WALL_WINDOW_V41 9020 //获取电视墙中的窗口v41 +#define NET_DVR_SET_WALL_WINDOW_V41 9021 //设置电视墙中的窗口v41 +#define NET_DVR_GET_CURRENT_SCENE_V41 9022 //获取当前电视墙中正在使用的场景v41 +#define NET_DVR_GET_WALL_SCENE_PARAM_V41 9023 //获取当前电视墙中正在使用的场景v41 +#define NET_DVR_SET_WALL_SCENE_PARAM_V41 9024 //设置当前电视墙中正在使用的场景v41 +#define NET_DVR_GET_MATRIX_LOGO_CFG 9025 //获取logo参数 +#define NET_DVR_SET_MATRIX_LOGO_CFG 9026 //设置logo参数 +#define NET_DVR_GET_WIN_LOGO_CFG 9027 //获取窗口logo参数 +#define NET_DVR_SET_WIN_LOGO_CFG 9028 //设置窗口logo参数 +#define NET_DVR_DELETE_LOGO 9029 //删除logo +#define NET_DVR_SET_DISPLAY_EFFECT_CFG 9030 //设置显示输出效果参数v41 +#define NET_DVR_GET_DISPLAY_EFFECT_CFG 9031 //获取显示输出效果参数v41 +#define NET_DVR_DEC_PLAY_REMOTE_FILE 9032 //解码播放远程文件 +#define NET_DVR_DEC_PLAY_REMOTE_FILE_V50 9314 //解码播放远程文件V50 +#define NET_DVR_GET_WIN_ZOOM_STATUS 9033 //获取窗口电子放大状态 +#define NET_DVR_GET_ALL_MATRIX_LOGOCFG 9034 //获取所有logo参数 -/*****************************ǽ end******************************/ +/*****************************电视墙 end******************************/ -/*******************************LCDƴ begin******************************************/ -#define NET_DVR_SIMULATE_REMOTE_CONTROL 9035 //ģңذ 2013-09-05 -#define NET_DVR_SET_SCREEN_SIGNAL_CFG 9036 //ĻźԴ -#define NET_DVR_GET_SCREEN_SIGNAL_CFG 9037 //ȡĻźԴ -#define NET_DVR_SET_SCREEN_SPLICE_CFG 9038 //Ļƴ -#define NET_DVR_GET_SCREEN_SPLICE_CFG 9039 //ȡĻƴ -#define NET_DVR_GET_SCREEN_FAN_WORK_MODE 9040 //ȡȹʽ -#define NET_DVR_SET_SCREEN_FAN_WORK_MODE 9041 //÷ȹʽ -#define NET_DVR_SHOW_SCREEN_WORK_STATUS 9044 //ʾĻ״̬ -#define NET_DVR_GET_VGA_CFG 9045 //ȡVGAź -#define NET_DVR_SET_VGA_CFG 9046 //VGAź -#define NET_DVR_GET_SCREEN_MENU_CFG 9048 //ȡĻ˵ -#define NET_DVR_SET_SCREEN_MENU_CFG 9049 //Ļ˵ -#define NET_DVR_SET_SCREEN_DISPLAY_CFG 9050 //ʾ 2013-08-28 -#define NET_DVR_GET_SCREEN_DISPLAY_CFG 9051 //ȡʾ 2013-08-28 +/*******************************LCD拼接屏 begin******************************************/ +#define NET_DVR_SIMULATE_REMOTE_CONTROL 9035 //模拟遥控按键 2013-09-05 +#define NET_DVR_SET_SCREEN_SIGNAL_CFG 9036 //设置屏幕信号源参数 +#define NET_DVR_GET_SCREEN_SIGNAL_CFG 9037 //获取屏幕信号源参数 +#define NET_DVR_SET_SCREEN_SPLICE_CFG 9038 //设置屏幕拼接 +#define NET_DVR_GET_SCREEN_SPLICE_CFG 9039 //获取屏幕拼接 +#define NET_DVR_GET_SCREEN_FAN_WORK_MODE 9040 //获取风扇工作方式 +#define NET_DVR_SET_SCREEN_FAN_WORK_MODE 9041 //设置风扇工作方式 +#define NET_DVR_SHOW_SCREEN_WORK_STATUS 9044 //显示屏幕状态 +#define NET_DVR_GET_VGA_CFG 9045 //获取VGA信号配置 +#define NET_DVR_SET_VGA_CFG 9046 //设置VGA信号配置 +#define NET_DVR_GET_SCREEN_MENU_CFG 9048 //获取屏幕菜单配置 +#define NET_DVR_SET_SCREEN_MENU_CFG 9049 //设置屏幕菜单配置 +#define NET_DVR_SET_SCREEN_DISPLAY_CFG 9050 //设置显示参数 2013-08-28 +#define NET_DVR_GET_SCREEN_DISPLAY_CFG 9051 //获取显示参数 2013-08-28 -#define NET_DVR_SET_FUSION_CFG 9052 //ͼںϲ -#define NET_DVR_GET_FUSION_CFG 9053 //ȡͼںϲ +#define NET_DVR_SET_FUSION_CFG 9052 //设置图像融合参数 +#define NET_DVR_GET_FUSION_CFG 9053 //获取图像融合参数 -#define NET_DVR_SET_PIP_CFG 9060 //ûл -#define NET_DVR_GET_PIP_CFG 9061 //ȡл -#define NET_DVR_SET_DEFOG_LCD 9073 //͸ -#define NET_DVR_GET_DEFOG_LCD 9074 //ȡ͸ -#define NET_DVR_SHOW_IP 9075 //ʾIP -#define NET_DVR_SCREEN_MAINTENANCE_WALL 9076 //Ļάǽ -#define NET_DVR_SET_SCREEN_POS 9077 //Ļλò -#define NET_DVR_GET_SCREEN_POS 9078 //ȡĻλò -/*******************************LCDƴ end******************************************/ +#define NET_DVR_SET_PIP_CFG 9060 //设置画中画参数 +#define NET_DVR_GET_PIP_CFG 9061 //获取画中画参数 +#define NET_DVR_SET_DEFOG_LCD 9073 //设置透雾参数 +#define NET_DVR_GET_DEFOG_LCD 9074 //获取透雾参数 +#define NET_DVR_SHOW_IP 9075 //显示IP +#define NET_DVR_SCREEN_MAINTENANCE_WALL 9076 //屏幕维墙 +#define NET_DVR_SET_SCREEN_POS 9077 //设置屏幕位置参数 +#define NET_DVR_GET_SCREEN_POS 9078 //获取屏幕位置参数 +/*******************************LCD拼接屏 end******************************************/ -/*******************************LCDƴV1.2 begin******************************************/ -#define NET_DVR_SCREEN_INDEX_SET 9079 //Ļز -#define NET_DVR_SCREEN_INDEX_GET 9080 //Ļزȡ -#define NET_DVR_SCREEN_SPLICE_SET 9081 //ĻƴӲ -#define NET_DVR_SCREEN_SPLICE_GET 9082 //ȡĻƴӲ -#define NET_DVR_SET_SCREEN_PARAM 9083 //Ļز -#define NET_DVR_GET_SCREEN_PARAM 9084 //ȡĻز -#define NET_DVR_SET_SWITCH_CFG 9085 //öʱػ -#define NET_DVR_GET_SWITCH_CFG 9086 //ȡʱػ -#define NET_DVR_SET_POWERON_DELAY_CFG 9087 //ʱ -#define NET_DVR_GET_POWERON_DELAY_CFG 9088 //ȡʱ -#define NET_DVR_SET_SCREEN_POSITION 9089 //Ļλò -#define NET_DVR_GET_SCREEN_POSITION 9090 //ȡĻλò -#define NET_DVR_SCREEN_SCENE_CONTROL 9091 //Ļ -#define NET_DVR_GET_CURRENT_SCREEN_SCENE 9092 //ȡǰĻ -#define NET_DVR_GET_SCREEN_SCENE_PARAM 9093 //ȡĻģʽ -#define NET_DVR_SET_SCREEN_SCENE_PARAM 9094 //Ļģʽ -#define NET_DVR_GET_EXTERNAL_MATRIX_RELATION 9095 //ȡӾϵ -#define NET_DVR_GET_LCD_AUDIO_CFG 9096 //ȡLCDĻƵ -#define NET_DVR_SET_LCD_AUDIO_CFG 9097 //LCDĻƵ -#define NET_DVR_GET_LCD_WORK_STATE 9098 //ȡLCDĻ״̬ -#define NET_DVR_GET_BOOT_LOGO_CFG 9099 //ȡLCDĻlogoʾ -#define NET_DVR_SET_BOOT_LOGO_CFG 9100 //LCDĻlogoʾ +/*******************************LCD拼接屏V1.2 begin******************************************/ +#define NET_DVR_SCREEN_INDEX_SET 9079 //屏幕索引相关参数设置 +#define NET_DVR_SCREEN_INDEX_GET 9080 //屏幕索引相关参数获取 +#define NET_DVR_SCREEN_SPLICE_SET 9081 //设置屏幕拼接参数 +#define NET_DVR_SCREEN_SPLICE_GET 9082 //获取屏幕拼接参数 +#define NET_DVR_SET_SCREEN_PARAM 9083 //设置屏幕相关参数 +#define NET_DVR_GET_SCREEN_PARAM 9084 //获取屏幕相关参数 +#define NET_DVR_SET_SWITCH_CFG 9085 //设置定时开关机参数 +#define NET_DVR_GET_SWITCH_CFG 9086 //获取定时开关机参数 +#define NET_DVR_SET_POWERON_DELAY_CFG 9087 //设置延时开机参数 +#define NET_DVR_GET_POWERON_DELAY_CFG 9088 //获取延时开机参数 +#define NET_DVR_SET_SCREEN_POSITION 9089 //设置屏幕位置参数 +#define NET_DVR_GET_SCREEN_POSITION 9090 //获取屏幕位置参数 +#define NET_DVR_SCREEN_SCENE_CONTROL 9091 //屏幕场景控制 +#define NET_DVR_GET_CURRENT_SCREEN_SCENE 9092 //获取当前屏幕场景号 +#define NET_DVR_GET_SCREEN_SCENE_PARAM 9093 //获取屏幕场景模式参数 +#define NET_DVR_SET_SCREEN_SCENE_PARAM 9094 //设置屏幕场景模式参数 +#define NET_DVR_GET_EXTERNAL_MATRIX_RELATION 9095 //获取外接矩阵输入输出关联关系 +#define NET_DVR_GET_LCD_AUDIO_CFG 9096 //获取LCD屏幕音频参数 +#define NET_DVR_SET_LCD_AUDIO_CFG 9097 //设置LCD屏幕音频参数 +#define NET_DVR_GET_LCD_WORK_STATE 9098 //获取LCD屏幕工作状态 +#define NET_DVR_GET_BOOT_LOGO_CFG 9099 //获取LCD屏幕开机logo显示参数 +#define NET_DVR_SET_BOOT_LOGO_CFG 9100 //设置LCD屏幕开机logo显示参数 -/*******************************LCDƴV1.2 end ******************************************/ -#define NET_DVR_GET_STREAM_DST_COMPRESSIONINFO 9101 //ȡĿѹ -#define NET_DVR_SET_STREAM_DST_COMPRESSIONINFO 9102 //Ŀѹ -#define NET_DVR_GET_STREAM_TRANS_STATUS 9103 //ȡ״̬ -#define NET_DVR_GET_DEVICE_TRANS_STATUS 9104 //ȡ豸ת״̬ -#define NET_DVR_GET_ALLSTREAM_SRC_INFO 9105 //ȡϢ -#define NET_DVR_GET_BIG_SCREEN_AUDIO 9106 //ȡƵϢ -#define NET_DVR_SET_BIG_SCREEN_AUDIO 9107 //ôƵϢ -#define NET_DVR_GET_DEV_WORK_MODE 9108 //ȡת豸ģʽ -#define NET_DVR_SET_DEV_WORK_MODE 9109 //ת豸ģʽ -#define NET_DVR_APPLY_TRANS_CHAN 9110 //IDתͨ -#define NET_DVR_GET_DISPCHAN_CFG 9111 //ȡʾͨ -#define NET_DVR_SET_DISPCHAN_CFG 9112 //ʾͨ +/*******************************LCD拼接屏V1.2 end ******************************************/ +#define NET_DVR_GET_STREAM_DST_COMPRESSIONINFO 9101 //获取目标压缩参数 +#define NET_DVR_SET_STREAM_DST_COMPRESSIONINFO 9102 //设置目标压缩参数 +#define NET_DVR_GET_STREAM_TRANS_STATUS 9103 //获取流状态 +#define NET_DVR_GET_DEVICE_TRANS_STATUS 9104 //获取设备转码状态 +#define NET_DVR_GET_ALLSTREAM_SRC_INFO 9105 //获取所有流信息 +#define NET_DVR_GET_BIG_SCREEN_AUDIO 9106 //获取大屏音频信息 +#define NET_DVR_SET_BIG_SCREEN_AUDIO 9107 //设置大屏音频信息 +#define NET_DVR_GET_DEV_WORK_MODE 9108 //获取转码设备工作模式 +#define NET_DVR_SET_DEV_WORK_MODE 9109 //设置转码设备工作模式 +#define NET_DVR_APPLY_TRANS_CHAN 9110 //按流ID申请转码通道 +#define NET_DVR_GET_DISPCHAN_CFG 9111 //批量获取显示通道参数 +#define NET_DVR_SET_DISPCHAN_CFG 9112 //批量设置显示通道参数 -#define NET_DVR_GET_DEC_CHAN_STATUS 9113 //ȡͨ״̬ -#define NET_DVR_GET_DISP_CHAN_STATUS 9114 //ȡʾͨ״̬ -#define NET_DVR_GET_ALARMIN_STATUS 9115 //ȡ״̬ -#define NET_DVR_GET_ALARMOUT_STATUS 9116 //ȡ״̬ -#define NET_DVR_GET_AUDIO_CHAN_STATUS 9117 //ȡԽ״̬ +#define NET_DVR_GET_DEC_CHAN_STATUS 9113 //获取解码通道解码状态 +#define NET_DVR_GET_DISP_CHAN_STATUS 9114 //获取显示通道状态 +#define NET_DVR_GET_ALARMIN_STATUS 9115 //获取报警输入状态 +#define NET_DVR_GET_ALARMOUT_STATUS 9116 //获取报警输出状态 +#define NET_DVR_GET_AUDIO_CHAN_STATUS 9117 //获取语音对讲状态 -#define NET_DVR_GET_VIDEO_AUDIOIN_CFG 9118 //ȡƵƵ -#define NET_DVR_SET_VIDEO_AUDIOIN_CFG 9119 //ƵƵ +#define NET_DVR_GET_VIDEO_AUDIOIN_CFG 9118 //获取视频的音频输入参数 +#define NET_DVR_SET_VIDEO_AUDIOIN_CFG 9119 //设置视频的音频输入参数 -#define NET_DVR_SET_BASEMAP_CFG 9120 //õͼ -#define NET_DVR_GET_BASEMAP_CFG 9121 //ȡͼ -#define NET_DVR_GET_VIRTUAL_SCREEN_CFG 9122 //ȡϵͳ -#define NET_DVR_SET_VIRTUAL_SCREEN_CFG 9123 //óϵͳ -#define NET_DVR_GET_BASEMAP_WIN_CFG 9124 //ȡͼڲ -#define NET_DVR_SET_BASEMAP_WIN_CFG 9125 //õͼڲ -#define NET_DVR_DELETE_PICTURE 9126 //ɾͼ -#define NET_DVR_GET_BASEMAP_PIC_INFO 9127 //ȡͼͼƬϢ -#define NET_DVR_SET_BASEMAP_WIN_CFG_V40 9128 //õͼڲV40 -#define NET_DVR_GET_BASEMAP_WIN_CFG_V40 9129 //ȡͼڲV40 +#define NET_DVR_SET_BASEMAP_CFG 9120 //设置底图参数 +#define NET_DVR_GET_BASEMAP_CFG 9121 //获取底图参数 +#define NET_DVR_GET_VIRTUAL_SCREEN_CFG 9122 //获取超高清输入子系统参数 +#define NET_DVR_SET_VIRTUAL_SCREEN_CFG 9123 //设置超高清输入子系统参数 +#define NET_DVR_GET_BASEMAP_WIN_CFG 9124 //获取底图窗口参数 +#define NET_DVR_SET_BASEMAP_WIN_CFG 9125 //设置底图窗口参数 +#define NET_DVR_DELETE_PICTURE 9126 //删除底图 +#define NET_DVR_GET_BASEMAP_PIC_INFO 9127 //获取底图图片信息 +#define NET_DVR_SET_BASEMAP_WIN_CFG_V40 9128 //设置底图窗口参数V40 +#define NET_DVR_GET_BASEMAP_WIN_CFG_V40 9129 //获取底图窗口参数V40 -#define NET_DVR_GET_DEC_VCA_CFG 9130 //ȡܱ -#define NET_DVR_SET_DEC_VCA_CFG 9131 //ýܱ +#define NET_DVR_GET_DEC_VCA_CFG 9130 //获取解码器智能报警参数 +#define NET_DVR_SET_DEC_VCA_CFG 9131 //设置解码器智能报警参数 -#define NET_DVR_SET_VS_INPUT_CHAN_INIT_ALL 9132 //ʼӰͨ -#define NET_DVR_GET_VS_INPUT_CHAN_INIT_ALL 9133 //ȡӰͨijʼ -#define NET_DVR_GET_VS_INPUT_CHAN_INIT 9134 //ȡͨijʼ -#define NET_DVR_GET_VS_INPUT_CHAN_CFG 9135 //ȡͨò +#define NET_DVR_SET_VS_INPUT_CHAN_INIT_ALL 9132 //初始化虚拟屏子板的所有输入通道 +#define NET_DVR_GET_VS_INPUT_CHAN_INIT_ALL 9133 //获取虚拟屏子板的所有输入通道的初始化参数 +#define NET_DVR_GET_VS_INPUT_CHAN_INIT 9134 //获取虚拟屏输入通道的初始化参数 +#define NET_DVR_GET_VS_INPUT_CHAN_CFG 9135 //获取虚拟屏输入通道配置参数 -#define NET_DVR_GET_TERMINAL_CONFERENCE_STATUS 9136 //ȡն˻״̬ -#define NET_DVR_GET_TERMINAL_INPUT_CFG_CAP 9137 //ȡն -#define NET_DVR_GET_TERMINAL_INPUT_CFG 9138 //ȡնƵ -#define NET_DVR_SET_TERMINAL_INPUT_CFG 9139 //նƵ +#define NET_DVR_GET_TERMINAL_CONFERENCE_STATUS 9136 //获取终端会议状态 +#define NET_DVR_GET_TERMINAL_INPUT_CFG_CAP 9137 //获取终端输入参数能力 +#define NET_DVR_GET_TERMINAL_INPUT_CFG 9138 //获取终端视频会议输入参数 +#define NET_DVR_SET_TERMINAL_INPUT_CFG 9139 //设置终端视频会议输入参数 -#define NET_DVR_GET_CONFERENCE_REGION_CAP 9140 //ȡն˻ -#define NET_DVR_GET_CONFERENCE_REGION 9141 //ȡն˻ -#define NET_DVR_SET_CONFERENCE_REGION 9142 //ն˻ -#define NET_DVR_GET_TERMINAL_CALL_CFG_CAP 9143 //ȡն˺ -#define NET_DVR_GET_TERMINAL_CALL_CFG 9144 //ȡն˺в -#define NET_DVR_SET_TERMINAL_CALL_CFG 9145 //ն˺в -#define NET_DVR_GET_TERMINAL_CTRL_CAP 9146 //ȡն˺п -#define NET_DVR_TERMINAL_CTRL 9147 //ն˺п -#define NET_DVR_GET_CALL_QUERY_CAP 9148 //ȡ -#define NET_DVR_GET_CALLINFO_BY_COND 9149 //ѯм¼ +#define NET_DVR_GET_CONFERENCE_REGION_CAP 9140 //获取终端会议区域能力 +#define NET_DVR_GET_CONFERENCE_REGION 9141 //获取终端会议区域参数 +#define NET_DVR_SET_CONFERENCE_REGION 9142 //设置终端会议区域参数 +#define NET_DVR_GET_TERMINAL_CALL_CFG_CAP 9143 //获取终端呼叫配置能力 +#define NET_DVR_GET_TERMINAL_CALL_CFG 9144 //获取终端呼叫参数 +#define NET_DVR_SET_TERMINAL_CALL_CFG 9145 //设置终端呼叫参数 +#define NET_DVR_GET_TERMINAL_CTRL_CAP 9146 //获取终端呼叫控制能力 +#define NET_DVR_TERMINAL_CTRL 9147 //终端呼叫控制 +#define NET_DVR_GET_CALL_QUERY_CAP 9148 //获取会议查找能力 +#define NET_DVR_GET_CALLINFO_BY_COND 9149 //按条件查询呼叫记录 -#define NET_DVR_SET_FUSION_SCALE 9150 //ͼںϹģ -#define NET_DVR_GET_FUSION_SCALE 9151 //ȡͼںϹģ +#define NET_DVR_SET_FUSION_SCALE 9150 //设置图像融合规模 +#define NET_DVR_GET_FUSION_SCALE 9151 //获取图像融合规模 -#define NET_DVR_GET_VCS_CAP 9152 //ȡMCU +#define NET_DVR_GET_VCS_CAP 9152 //获取MCU能力集 -#define NET_DVR_GET_TERMINAL_GK_CFG_CAP 9153 //ȡնעGK -#define NET_DVR_GET_TERMINAL_GK_CFG 9154 //ȡնעGK -#define NET_DVR_SET_TERMINAL_GK_CFG 9155 //նעGK -#define NET_DVR_GET_MCU_CONFERENCESEARCH_CAP 9156 //ȡMCU豸 -#define NET_DVR_SET_VS_INPUT_CHAN_CFG 9157 //ͨò -#define NET_DVR_GET_VS_NETSRC_CFG 9158 //Դ -#define NET_DVR_SET_VS_NETSRC_CFG 9159 //Դ +#define NET_DVR_GET_TERMINAL_GK_CFG_CAP 9153 //获取终端注册GK能力 +#define NET_DVR_GET_TERMINAL_GK_CFG 9154 //获取终端注册GK参数 +#define NET_DVR_SET_TERMINAL_GK_CFG 9155 //设置终端注册GK参数 +#define NET_DVR_GET_MCU_CONFERENCESEARCH_CAP 9156 //获取MCU设备的能力 +#define NET_DVR_SET_VS_INPUT_CHAN_CFG 9157 //设置虚拟屏输入通道配置参数 +#define NET_DVR_GET_VS_NETSRC_CFG 9158 //设置虚拟屏网络源参数 +#define NET_DVR_SET_VS_NETSRC_CFG 9159 //设置虚拟屏网络源参数 -#define NET_DVR_GET_LLDP_CFG 9160 //ȡLLDP -#define NET_DVR_SET_LLDP_CFG 9161 //LLDP -#define NET_DVR_GET_LLDP_CAP 9162 //ȡLLDP -#define NET_DVR_GET_FIBER_CONVERT_BASIC_INFO 9163 //ȡշϢ -#define NET_DVR_GET_FIBER_CONVERT_WORK_STATE 9164 //ȡշ״ -#define NET_DVR_GET_FIBER_CONVERT_TOPOLOGY 9165 //ȡշϢ -#define NET_DVR_GET_FC_PORT_REMARKS 9166 //ȡշ˿עͲ -#define NET_DVR_SET_FC_PORT_REMARKS 9167 //ùշ˿עͲ -#define NET_DVR_GET_PORT_REMARKS_CAP 9168 //ȡշ˿ע +#define NET_DVR_GET_LLDP_CFG 9160 //获取LLDP参数 +#define NET_DVR_SET_LLDP_CFG 9161 //设置LLDP参数 +#define NET_DVR_GET_LLDP_CAP 9162 //获取LLDP能力集 +#define NET_DVR_GET_FIBER_CONVERT_BASIC_INFO 9163 //获取光纤收发器基本信息 +#define NET_DVR_GET_FIBER_CONVERT_WORK_STATE 9164 //获取光纤收发器工作状 +#define NET_DVR_GET_FIBER_CONVERT_TOPOLOGY 9165 //获取光纤收发器拓扑信息 +#define NET_DVR_GET_FC_PORT_REMARKS 9166 //获取光纤收发器端口注释参数 +#define NET_DVR_SET_FC_PORT_REMARKS 9167 //设置光纤收发器端口注释参数 +#define NET_DVR_GET_PORT_REMARKS_CAP 9168 //获取光纤收发器端口注释能力集 -#define NET_DVR_GET_MCU_CONFERENCECONTROL_CAP 9169 //ȡ -#define NET_DVR_GET_MCU_TERMINALCONTROL_CAP 9170 //ȡն˿ -#define NET_DVR_GET_MCU_TERIMINALGROUP_CAP 9171 //ȡն˷ -#define NET_DVR_GET_MCU_TERMINAL_CAP 9174 //ȡն˹ -#define NET_DVR_GET_MCU_CONFERENCE_CAP 9175 //ȡ -#define NET_DVR_GET_MCU_GK_CFG_CAP 9176 //ȡMCUGK -#define NET_DVR_GET_MCU_GK_SERVER_CAP 9177 //ȡMCUGK +#define NET_DVR_GET_MCU_CONFERENCECONTROL_CAP 9169 //获取会议控制能力 +#define NET_DVR_GET_MCU_TERMINALCONTROL_CAP 9170 //获取终端控制能力 +#define NET_DVR_GET_MCU_TERIMINALGROUP_CAP 9171 //获取终端分组能力 +#define NET_DVR_GET_MCU_TERMINAL_CAP 9174 //获取终端管理能力 +#define NET_DVR_GET_MCU_CONFERENCE_CAP 9175 //获取会议能力 +#define NET_DVR_GET_MCU_GK_CFG_CAP 9176 //获取MCUGK配置能力 +#define NET_DVR_GET_MCU_GK_SERVER_CAP 9177 //获取MCUGK服务能力 -#define NET_DVR_GET_EDID_CFG_FILE_INFO 9178 //ȡEDIDļϢ -#define NET_DVR_GET_EDID_CFG_FILE_INFO_LIST 9179 //ȡEDIDļϢ -#define NET_DVR_SET_EDID_CFG_FILE_INFO 9180 //EDIDļϢ -#define NET_DVR_DEL_EDID_CFG_FILE_INFO 9181 //ɾEDIDļϢļ -#define NET_DVR_GET_EDID_CFG_FILE_INFO_CAP 9182 //EDIDļϢ +#define NET_DVR_GET_EDID_CFG_FILE_INFO 9178 //获取EDID配置文件信息 +#define NET_DVR_GET_EDID_CFG_FILE_INFO_LIST 9179 //获取所有EDID配置文件信息 +#define NET_DVR_SET_EDID_CFG_FILE_INFO 9180 //设置EDID配置文件信息 +#define NET_DVR_DEL_EDID_CFG_FILE_INFO 9181 //删除EDID配置文件信息(包括文件) +#define NET_DVR_GET_EDID_CFG_FILE_INFO_CAP 9182 //EDID配置文件信息能力集 -#define NET_DVR_GET_SUBWND_DECODE_OSD 9183 //ȡӴڽOSDϢ -#define NET_DVR_GET_SUBWND_DECODE_OSD_ALL 9184 //ȡӴڽOSDϢ -#define NET_DVR_SET_SUBWND_DECODE_OSD 9185 //ӴڽOSDϢ -#define NET_DVR_GET_SUBWND_DECODE_OSD_CAP 9186 //ȡӴڽOSDϢ -#define NET_DVR_GET_DECODE_CHANNEL_OSD 9187 //ȡͨOSDϢ -#define NET_DVR_SET_DECODE_CHANNEL_OSD 9188 //ýͨOSDϢ +#define NET_DVR_GET_SUBWND_DECODE_OSD 9183 //获取子窗口解码OSD信息 +#define NET_DVR_GET_SUBWND_DECODE_OSD_ALL 9184 //获取所有子窗口解码OSD信息 +#define NET_DVR_SET_SUBWND_DECODE_OSD 9185 //设置子窗口解码OSD信息 +#define NET_DVR_GET_SUBWND_DECODE_OSD_CAP 9186 //获取子窗口解码OSD信息能力集 +#define NET_DVR_GET_DECODE_CHANNEL_OSD 9187 //获取解码通道OSD信息 +#define NET_DVR_SET_DECODE_CHANNEL_OSD 9188 //设置解码通道OSD信息 -#define NET_DVR_GET_OUTPUT_PIC_INFO 9200 //ȡͼƬ -#define NET_DVR_SET_OUTPUT_PIC_INFO 9201 //ͼƬ -#define NET_DVR_GET_OUTPUT_PIC_WIN_CFG 9202 //ȡͼƬڲ -#define NET_DVR_SET_OUTPUT_PIC_WIN_CFG 9203 //ͼƬڲ -#define NET_DVR_GET_OUTPUT_ALL_PIC_WIN_CFG 9204 //ȡͼƬڲ -#define NET_DVR_DELETE_OUPUT_PIC 9205 //ɾͼƬ -#define NET_DVR_GET_OUTPUT_OSD_CFG 9206 //ȡOSD -#define NET_DVR_SET_OUTPUT_OSD_CFG 9207 //OSD -#define NET_DVR_GET_OUTPUT_ALL_OSD_CFG 9208 //ȡOSD -#define NET_DVR_GET_CHAN_RELATION 9209 //ȡͨԴ -#define NET_DVR_SET_CHAN_RELATION 9210 //ñͨԴ -#define NET_DVR_GET_ALL_CHAN_RELATION 9211 //ȡбͨԴ -#define NET_DVR_GET_NS_RING_CFG 9212 //ȡ˰廷 -#define NET_DVR_SET_NS_RING_CFG 9213 //ù˰廷 -#define NET_DVR_GET_NS_RING_STATUS 9214 //ȡ˰廷״̬ -#define NET_DVR_GET_OPTICAL_PORT_INFO 9220 //ȡϢ -#define NET_DVR_SET_OPTICAL_PORT_INFO 9221 //ùϢ -#define NET_DVR_GET_OPTICAL_CHAN_RELATE_CFG 9222 //ȡͨԴ -#define NET_DVR_SET_OPTICAL_CHAN_RELATE_CFG 9223 //ñͨԴ -#define NET_DVR_GET_WIN_ROAM_SWITCH_CFG 9224 //ȡοز -#define NET_DVR_SET_WIN_ROAM_SWITCH_CFG 9225 //ýοز -#define NET_DVR_START_SCREEN_CRTL 9226 //ʼĻ -#define NET_DVR_GET_SCREEN_FLIE_LIST 9227 //ȡĻļб -#define NET_DVR_GET_SCREEN_FILEINFO 9228 //ȡĻļϢ -#define NET_DVR_SET_SCREEN_FILEINFO 9229 //ĻļϢ +#define NET_DVR_GET_OUTPUT_PIC_INFO 9200 //获取输出口图片参数 +#define NET_DVR_SET_OUTPUT_PIC_INFO 9201 //设置输出口图片参数 +#define NET_DVR_GET_OUTPUT_PIC_WIN_CFG 9202 //获取输出口图片窗口参数 +#define NET_DVR_SET_OUTPUT_PIC_WIN_CFG 9203 //设置输出口图片窗口参数 +#define NET_DVR_GET_OUTPUT_ALL_PIC_WIN_CFG 9204 //获取输出口所有图片窗口参数 +#define NET_DVR_DELETE_OUPUT_PIC 9205 //删除输出口图片 +#define NET_DVR_GET_OUTPUT_OSD_CFG 9206 //获取输出口OSD参数 +#define NET_DVR_SET_OUTPUT_OSD_CFG 9207 //设置输出口OSD参数 +#define NET_DVR_GET_OUTPUT_ALL_OSD_CFG 9208 //获取输出口所有OSD参数 +#define NET_DVR_GET_CHAN_RELATION 9209 //获取编码通道关联资源参数 +#define NET_DVR_SET_CHAN_RELATION 9210 //设置编码通道关联资源参数 +#define NET_DVR_GET_ALL_CHAN_RELATION 9211 //获取所有编码通道关联资源参数 +#define NET_DVR_GET_NS_RING_CFG 9212 //获取光纤板环网配置 +#define NET_DVR_SET_NS_RING_CFG 9213 //设置光纤板环网配置 +#define NET_DVR_GET_NS_RING_STATUS 9214 //获取光纤板环网状态 +#define NET_DVR_GET_OPTICAL_PORT_INFO 9220 //获取光口信息 +#define NET_DVR_SET_OPTICAL_PORT_INFO 9221 //设置光口信息 +#define NET_DVR_GET_OPTICAL_CHAN_RELATE_CFG 9222 //获取编码通道关联光口输入源参数 +#define NET_DVR_SET_OPTICAL_CHAN_RELATE_CFG 9223 //设置编码通道关联光口输入源参数 +#define NET_DVR_GET_WIN_ROAM_SWITCH_CFG 9224 //获取解码器窗口漫游开关参数 +#define NET_DVR_SET_WIN_ROAM_SWITCH_CFG 9225 //设置解码器窗口漫游开关参数 +#define NET_DVR_START_SCREEN_CRTL 9226 //开始屏幕控制 +#define NET_DVR_GET_SCREEN_FLIE_LIST 9227 //获取屏幕文件列表 +#define NET_DVR_GET_SCREEN_FILEINFO 9228 //获取屏幕文件信息参数 +#define NET_DVR_SET_SCREEN_FILEINFO 9229 //设置屏幕文件信息参数 -/*******************************СLEDʾ begin***************************************/ -#define NET_DVR_GET_LED_OUTPUT_CFG 9230 //ȡͿ -#define NET_DVR_SET_LED_OUTPUT_CFG 9231 //÷Ϳ -#define NET_DVR_GET_LED_OUTPUT_PORT_CFG 9232 //ȡLEDͿ˿ڲ -#define NET_DVR_SET_LED_OUTPUT_PORT_CFG 9233 //LEDͿ˿ڲ -#define NET_DVR_GET_LED_DISPLAY_AREA_CFG 9234 //ȡLEDͿʾ -#define NET_DVR_SET_LED_DISPLAY_AREA_CFG 9235 //LEDͿʾ -#define NET_DVR_GET_LED_PORT_CFG 9236 //ȡLEDͿ˿ڲ -#define NET_DVR_SET_LED_PORT_CFG 9237 //LEDͿ˿ڲ -#define NET_DVR_GET_LED_DISPLAY_CFG 9238 //ȡLEDͿʾ -#define NET_DVR_SET_LED_DISPLAY_CFG 9239 //LEDͿʾ -#define NET_DVR_GET_ALL_LED_PORT_CFG 9240 //ȡLEDͿijӦ -#define NET_DVR_SAVE_LED_CONFIGURATION 9241 //̻ -#define NET_DVR_GET_LED_TEST_SIGNAL_CFG 9242 //ȡLEDźŲ -#define NET_DVR_SET_LED_TEST_SIGNAL_CFG 9243 //LEDźŲ -#define NET_DVR_GET_LED_NOSIGNAL_CFG 9244 //ȡLEDźʾģʽ -#define NET_DVR_SET_LED_NOSIGNAL_CFG 9245 //LEDźʾģʽ -#define NET_DVR_GET_LED_INPUT_CFG 9246 //ȡLEDͿ -#define NET_DVR_SET_LED_INPUT_CFG 9247 //LEDͿ -#define NET_DVR_GET_LED_RECV_GAMMA_CFG 9248 //ȡտGAMMA -#define NET_DVR_SET_LED_RECV_GAMMA_CFG 9249 //ýտGAMMA -#define NET_DVR_GET_LED_RECV_CFG 9250 //ȡտ -#define NET_DVR_SET_LED_RECV_CFG 9251 //ýտ -#define NET_DVR_GET_LED_RECV_ADVANCED_CFG 9252 //ȡտ߼ -#define NET_DVR_SET_LED_RECV_ADVANCED_CFG 9253 //ýտ߼ -#define NET_DVR_GET_LED_SCREEN_DISPLAY_CFG 9254 //ȡLEDʾ -#define NET_DVR_SET_LED_SCREEN_DISPLAY_CFG 9255 //LEDʾ -/*******************************СLEDʾ end*****************************************/ +/*******************************小间距LED显示屏 begin***************************************/ +#define NET_DVR_GET_LED_OUTPUT_CFG 9230 //获取发送卡输出参数 +#define NET_DVR_SET_LED_OUTPUT_CFG 9231 //设置发送卡输出参数 +#define NET_DVR_GET_LED_OUTPUT_PORT_CFG 9232 //获取LED发送卡输出端口参数 +#define NET_DVR_SET_LED_OUTPUT_PORT_CFG 9233 //设置LED发送卡输出端口参数 +#define NET_DVR_GET_LED_DISPLAY_AREA_CFG 9234 //获取LED发送卡显示区域 +#define NET_DVR_SET_LED_DISPLAY_AREA_CFG 9235 //设置LED发送卡显示区域 +#define NET_DVR_GET_LED_PORT_CFG 9236 //获取LED发送卡端口参数 +#define NET_DVR_SET_LED_PORT_CFG 9237 //设置LED发送卡端口参数 +#define NET_DVR_GET_LED_DISPLAY_CFG 9238 //获取LED发送卡显示参数 +#define NET_DVR_SET_LED_DISPLAY_CFG 9239 //设置LED发送卡显示参数 +#define NET_DVR_GET_ALL_LED_PORT_CFG 9240 //获取LED发送卡某个输出对应 +#define NET_DVR_SAVE_LED_CONFIGURATION 9241 //参数固化 +#define NET_DVR_GET_LED_TEST_SIGNAL_CFG 9242 //获取LED屏测试信号参数 +#define NET_DVR_SET_LED_TEST_SIGNAL_CFG 9243 //设置LED屏测试信号参数 +#define NET_DVR_GET_LED_NOSIGNAL_CFG 9244 //获取LED屏无信号显示模式参数 +#define NET_DVR_SET_LED_NOSIGNAL_CFG 9245 //设置LED屏无信号显示模式参数 +#define NET_DVR_GET_LED_INPUT_CFG 9246 //获取LED发送卡输入参数 +#define NET_DVR_SET_LED_INPUT_CFG 9247 //设置LED发送卡输入参数 +#define NET_DVR_GET_LED_RECV_GAMMA_CFG 9248 //获取接收卡GAMMA表参数 +#define NET_DVR_SET_LED_RECV_GAMMA_CFG 9249 //设置接收卡GAMMA表参数 +#define NET_DVR_GET_LED_RECV_CFG 9250 //获取接收卡基本参数 +#define NET_DVR_SET_LED_RECV_CFG 9251 //设置接收卡基本参数 +#define NET_DVR_GET_LED_RECV_ADVANCED_CFG 9252 //获取接收卡高级参数 +#define NET_DVR_SET_LED_RECV_ADVANCED_CFG 9253 //设置接收卡高级参数 +#define NET_DVR_GET_LED_SCREEN_DISPLAY_CFG 9254 //获取LED屏显示参数 +#define NET_DVR_SET_LED_SCREEN_DISPLAY_CFG 9255 //设置LED屏显示参数 +/*******************************小间距LED显示屏 end*****************************************/ -#define NET_DVR_GET_INSERTPLAY_PROGRESS 9273 //ȡ岥 +#define NET_DVR_GET_INSERTPLAY_PROGRESS 9273 //获取插播进度 -#define NET_DVR_GET_SCREEN_CONFIG 9260 //ȡĻ -#define NET_DVR_SET_SCREEN_CONFIG 9261 //Ļ -#define NET_DVR_GET_SCREEN_CONFIG_CAP 9262 //ȡĻ +#define NET_DVR_GET_SCREEN_CONFIG 9260 //获取屏幕服务器参数 +#define NET_DVR_SET_SCREEN_CONFIG 9261 //设置屏幕服务器参数 +#define NET_DVR_GET_SCREEN_CONFIG_CAP 9262 //获取屏幕服务器参数能力集 -#define NET_DVR_GET_SCHEDULE_PUBLISH_PROGRESS 9271 //ȡճ̷ -#define NET_DVR_GET_PUBLISH_UPGRADE_PROGRESS 9272 //ȡϢն +#define NET_DVR_GET_SCHEDULE_PUBLISH_PROGRESS 9271 //获取日程发布进度 +#define NET_DVR_GET_PUBLISH_UPGRADE_PROGRESS 9272 //获取信息发布终端升级进度 -#define NET_DVR_GET_INPUT_BOARD_CFG 9281 //ȡϢ -#define NET_DVR_GET_INPUT_BOARD_CFG_LIST 9282 //ȡϢб -#define NET_DVR_SET_INPUT_BOARD_CFG 9283 //Ϣ +#define NET_DVR_GET_INPUT_BOARD_CFG 9281 //获取输入板配置信息 +#define NET_DVR_GET_INPUT_BOARD_CFG_LIST 9282 //获取输入板配置信息列表 +#define NET_DVR_SET_INPUT_BOARD_CFG 9283 //设置输入板配置信息 -#define NET_DVR_GET_INPUT_SOURCE_TEXT_CAP 9284 //ȡԴַ -#define NET_DVR_GET_INPUT_SOURCE_TEXT_CFG 9285 //ȡԴַӲ -#define NET_DVR_GET_INPUT_SOURCE_TEXT_CFG_LSIT 9286 //ȡԴַӲб -#define NET_DVR_SET_INPUT_SOURCE_TEXT_CFG 9287 //ԴַӲ -#define NET_DVR_SET_INPUT_SOURCE_TEXT_CFG_LIST 9288 //ԴַӲб -#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CAP 9289 //ȡԴԶֱ -#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CFG 9290 //ȡԴԶֱʲ -#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CFG_LIST 9291 //ȡԴԶֱб -#define NET_DVR_SET_INPUT_SOURCE_RESOLUTION_CFG 9292 //ԴԶֱʲ -#define NET_DVR_SET_INPUT_SOURCE_RESOLUTION_CFG_LIST 9293 //ԴԶֱʲ -#define NET_DVR_GET_LED_AREA_INFO_LIST 9295 //ȡLEDб +#define NET_DVR_GET_INPUT_SOURCE_TEXT_CAP 9284 //获取输入源字符叠加能力 +#define NET_DVR_GET_INPUT_SOURCE_TEXT_CFG 9285 //获取输入源字符叠加参数 +#define NET_DVR_GET_INPUT_SOURCE_TEXT_CFG_LSIT 9286 //获取输入源字符叠加参数列表 +#define NET_DVR_SET_INPUT_SOURCE_TEXT_CFG 9287 //设置输入源字符叠加参数 +#define NET_DVR_SET_INPUT_SOURCE_TEXT_CFG_LIST 9288 //设置输入源字符叠加参数列表 +#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CAP 9289 //获取输入源自定义分辨率能力 +#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CFG 9290 //获取输入源自定义分辨率参数 +#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CFG_LIST 9291 //获取输入源自定义分辨率列表 +#define NET_DVR_SET_INPUT_SOURCE_RESOLUTION_CFG 9292 //设置输入源自定义分辨率参数 +#define NET_DVR_SET_INPUT_SOURCE_RESOLUTION_CFG_LIST 9293 //设置输入源自定义分辨率参数 +#define NET_DVR_GET_LED_AREA_INFO_LIST 9295 //获取LED区域列表 -#define NET_DVR_GET_DISPINPUT_CFG 9296 //ȡʾ -#define NET_DVR_GET_DISPINPUT_CFG_LIST 9297 //ȡʾ -#define NET_DVR_SET_DISPINPUT_CFG 9298 //ʾ -#define NET_DVR_GET_DISPINPUT_CFG_CAP 9299 //ȡʾ -#define NET_DVR_GET_CURRENT_VALID_PORT 9300 //ȡǰЧ,ӵĶ˿ +#define NET_DVR_GET_DISPINPUT_CFG 9296 //获取显示输入参数 +#define NET_DVR_GET_DISPINPUT_CFG_LIST 9297 //获取所有显示输入参数 +#define NET_DVR_SET_DISPINPUT_CFG 9298 //设置显示输入参数 +#define NET_DVR_GET_DISPINPUT_CFG_CAP 9299 //获取显示输入参数能力集 +#define NET_DVR_GET_CURRENT_VALID_PORT 9300 //获取当前有效的,可以连接的端口 -#define NET_DVR_SET_ONLINE_UPGRADE 9301 // -#define NET_DVR_GET_ONLINEUPGRADE_PROGRESS 9302 //ȡ -#define NET_DVR_GET_FIRMWARECODE 9303 //ȡʶ -#define NET_DVR_GET_ONLINEUPGRADE_SERVER 9304 //ȡ״̬ -#define NET_DVR_GET_ONLINEUPGRADE_VERSION 9305 //ȡ°汾Ϣ -#define NET_DVR_GET_RECOMMEN_VERSION 9306 //ǷƼ˰汾 -#define NET_DVR_GET_ONLINEUPGRADE_ABILITY 9309 //ȡ +#define NET_DVR_SET_ONLINE_UPGRADE 9301 //允许在线升级 +#define NET_DVR_GET_ONLINEUPGRADE_PROGRESS 9302 //获取在线升级进度 +#define NET_DVR_GET_FIRMWARECODE 9303 //获取识别码 +#define NET_DVR_GET_ONLINEUPGRADE_SERVER 9304 //获取升级服务器状态 +#define NET_DVR_GET_ONLINEUPGRADE_VERSION 9305 //获取新版本信息 +#define NET_DVR_GET_RECOMMEN_VERSION 9306 //检测是否推荐升级到此版本 +#define NET_DVR_GET_ONLINEUPGRADE_ABILITY 9309 //获取在线升级能力集 -#define NET_DVR_GET_FIBER_CONVERT_BASIC_INFO_V50 9310 //ȡԶշϢV50 -#define NET_DVR_GET_FIBER_CONVERT_WORK_STATE_V50 9311 //ȡԶշ״̬ +#define NET_DVR_GET_FIBER_CONVERT_BASIC_INFO_V50 9310 //获取远端网管收发器基本信息V50 +#define NET_DVR_GET_FIBER_CONVERT_WORK_STATE_V50 9311 //获取远端网管收发器工作状态 -#define NET_SDK_LED_SCREEN_CHECK 9312 //LEDĻУ -#define NET_SDK_GENERATE_OUTPUT_CONTROL 9315 //ͨչģ -#define NET_SDK_GET_MATRIX_STATUS_V51 9313 /*ȡƵۺƽ̨״̬*/ +#define NET_SDK_LED_SCREEN_CHECK 9312 //LED屏幕校正 +#define NET_SDK_GENERATE_OUTPUT_CONTROL 9315 //通用扩展输出口模块控制 +#define NET_SDK_GET_MATRIX_STATUS_V51 9313 /*获取视频综合平台状态*/ -//DS-19D2000-S V2.0 ò -#define NET_DVR_GET_ALARM_LINKAGE_CFG 9316 //ȡò -#define NET_DVR_SET_ALARM_LINKAGE_CFG 9317 //öò +//DS-19D2000-S V2.0升级 报警联动配置参数命令码 +#define NET_DVR_GET_ALARM_LINKAGE_CFG 9316 //获取动环报警联动配置参数 +#define NET_DVR_SET_ALARM_LINKAGE_CFG 9317 //设置动环报警联动配置参数 -#define NET_DVR_GET_RS485_WORK_MODE 10001 //ȡRS485ڹģʽ -#define NET_DVR_SET_RS485_WORK_MODE 10002 //RS485ڹģʽ -#define NET_DVR_GET_SPLITTER_TRANS_CHAN_CFG 10003 //ȡ͸ͨ -#define NET_DVR_SET_SPLITTER_TRANS_CHAN_CFG 10004 //͸ͨ +#define NET_DVR_GET_RS485_WORK_MODE 10001 //获取RS485串口工作模式 +#define NET_DVR_SET_RS485_WORK_MODE 10002 //设置RS485串口工作模式 +#define NET_DVR_GET_SPLITTER_TRANS_CHAN_CFG 10003 //获取码分器透明通道参数 +#define NET_DVR_SET_SPLITTER_TRANS_CHAN_CFG 10004 //设置码分器透明通道参数 -#define NET_DVR_GET_RS485_PROTOCOL_VERSION 10301 //ȡRS485Э汾Ϣ -#define NET_DVR_ALARMHOST_REGISTER_DETECTOR 10302 //Զע̽ +#define NET_DVR_GET_RS485_PROTOCOL_VERSION 10301 //获取RS485协议库版本信息 +#define NET_DVR_ALARMHOST_REGISTER_DETECTOR 10302 //自动注册探测器 -#define NET_DVR_GET_SIP_CFG 11001 //IPӻȡSIP -#define NET_DVR_SET_SIP_CFG 11002 //IPӻSIP -#define NET_DVR_GET_IP_VIEW_DEVCFG 11003 //ȡIPԽֻ -#define NET_DVR_SET_IP_VIEW_DEVCFG 11004 //IPԽֻ -#define NET_DVR_GET_IP_VIEW_AUDIO_CFG 11005 //ȡIPԽֻƵ -#define NET_DVR_SET_IP_VIEW_AUDIO_CFG 11006 //IPԽֻƵ -#define NET_DVR_GET_IP_VIEW_CALL_CFG 11007 //ȡIPԽֻв -#define NET_DVR_SET_IP_VIEW_CALL_CFG 11008 //IPԽֻв -#define NET_DVR_GET_AUDIO_LIMIT_ALARM_CFG 11009 //ȡò -#define NET_DVR_SET_AUDIO_LIMIT_ALARM_CFG 11010 //ò -#define NET_DVR_GET_BUTTON_DOWN_ALARM_CFG 11011 //ȡť¸澯ò -#define NET_DVR_SET_BUTTON_DOWN_ALARM_CFG 11012 //ðť¸澯ò +#define NET_DVR_GET_SIP_CFG 11001 //IP可视化机获取SIP参数 +#define NET_DVR_SET_SIP_CFG 11002 //IP可视化机设置SIP参数 +#define NET_DVR_GET_IP_VIEW_DEVCFG 11003 //获取IP对讲分机配置 +#define NET_DVR_SET_IP_VIEW_DEVCFG 11004 //设置IP对讲分机配置 +#define NET_DVR_GET_IP_VIEW_AUDIO_CFG 11005 //获取IP对讲分机音频参数 +#define NET_DVR_SET_IP_VIEW_AUDIO_CFG 11006 //设置IP对讲分机音频参数 +#define NET_DVR_GET_IP_VIEW_CALL_CFG 11007 //获取IP对讲分机呼叫参数 +#define NET_DVR_SET_IP_VIEW_CALL_CFG 11008 //设置IP对讲分机呼叫参数 +#define NET_DVR_GET_AUDIO_LIMIT_ALARM_CFG 11009 //获取声音超限配置参数 +#define NET_DVR_SET_AUDIO_LIMIT_ALARM_CFG 11010 //设置声音超限配置参数 +#define NET_DVR_GET_BUTTON_DOWN_ALARM_CFG 11011 //获取按钮按下告警配置参数 +#define NET_DVR_SET_BUTTON_DOWN_ALARM_CFG 11012 //设置按钮按下告警配置参数 -#define NET_DVR_GET_ISCSI_CFG 11070 // ȡISCSI洢Э -#define NET_DVR_SET_ISCSI_CFG 11071 // ȡISCSI洢Э +#define NET_DVR_GET_ISCSI_CFG 11070 // 获取ISCSI存储配置协议 +#define NET_DVR_SET_ISCSI_CFG 11071 // 获取ISCSI存储配置协议 -#define NET_DVR_GET_SECURITYMODE 12004 //ȡǰȫģʽ -//2013-11-21 ȡ豸ǰ¶Ⱥʪ +#define NET_DVR_GET_SECURITYMODE 12004 //获取当前安全模式 +//2013-11-21 获取设备当前的温度和湿度 #define NET_DVR_GET_TEMP_HUMI 12005 -//2014-02-15 IPCԶĿ -#define NET_DVR_SET_ALARMSOUNDMODE 12006 //ñģʽ -#define NET_DVR_GET_ALARMSOUNDMODE 12007 //ȡģʽ +//2014-02-15 民用IPC自动化测试项目 +#define NET_DVR_SET_ALARMSOUNDMODE 12006 //设置报警声音模式 +#define NET_DVR_GET_ALARMSOUNDMODE 12007 //获取报警声音模式 -#define NET_DVR_SET_IPDEVICE_ACTIVATED 13000//ͨNVRǰ豸 -#define NET_DVR_GET_DIGITAL_CHAN_SECURITY_STATUS 13001 //ȡͨӦ豸ȫ״̬ -#define NET_DVR_GET_ACTIVATE_IPC_ABILITY 13003 //ȡNVRIPC +#define NET_DVR_SET_IPDEVICE_ACTIVATED 13000//通过NVR激活前端设备 +#define NET_DVR_GET_DIGITAL_CHAN_SECURITY_STATUS 13001 //获取数字通道对应设备安全状态 +#define NET_DVR_GET_ACTIVATE_IPC_ABILITY 13003 //获取NVR激活IPC能力集 -/*******************************¥ӶԽ start***********************************/ -#define NET_DVR_GET_VIDEO_INTERCOM_DEVICEID_CFG 16001 //ȡӶԽ豸 -#define NET_DVR_SET_VIDEO_INTERCOM_DEVICEID_CFG 16002 //ÿӶԽ豸 -#define NET_DVR_SET_PRIVILEGE_PASSWORD 16003 //ȨϢ -#define NET_DVR_GET_OPERATION_TIME_CFG 16004 //ȡʱ -#define NET_DVR_SET_OPERATION_TIME_CFG 16005 //òʱ -#define NET_DVR_GET_VIDEO_INTERCOM_RELATEDEV_CFG 16006 //ȡ豸 -#define NET_DVR_SET_VIDEO_INTERCOM_RELATEDEV_CFG 16007 //ù豸 -#define NET_DVR_REMOTECONTROL_NOTICE_DATA 16008 //Ϣ· -#define NET_DVR_REMOTECONTROL_GATEWAY 16009 //Զ̿ -#define NET_DVR_REMOTECONTROL_OPERATION_AUTH 16010 //Ȩ֤ +/*******************************楼宇可视对讲机 start***********************************/ +#define NET_DVR_GET_VIDEO_INTERCOM_DEVICEID_CFG 16001 //获取可视对讲设备编号 +#define NET_DVR_SET_VIDEO_INTERCOM_DEVICEID_CFG 16002 //设置可视对讲设备编号 +#define NET_DVR_SET_PRIVILEGE_PASSWORD 16003 //设置权限密码配置信息 +#define NET_DVR_GET_OPERATION_TIME_CFG 16004 //获取操作时间配置 +#define NET_DVR_SET_OPERATION_TIME_CFG 16005 //设置操作时间配置 +#define NET_DVR_GET_VIDEO_INTERCOM_RELATEDEV_CFG 16006 //获取关联网络设备参数 +#define NET_DVR_SET_VIDEO_INTERCOM_RELATEDEV_CFG 16007 //设置关联网络设备参数 +#define NET_DVR_REMOTECONTROL_NOTICE_DATA 16008 //公告信息下发 +#define NET_DVR_REMOTECONTROL_GATEWAY 16009 //远程开锁 +#define NET_DVR_REMOTECONTROL_OPERATION_AUTH 16010 //操作权限验证 -#define NET_DVR_GET_VIDEO_INTERCOM_IOIN_CFG 16016 //ȡIO -#define NET_DVR_SET_VIDEO_INTERCOM_IOIN_CFG 16017 //IO -#define NET_DVR_GET_VIDEO_INTERCOM_IOOUT_CFG 16018 //ȡIO -#define NET_DVR_SET_VIDEO_INTERCOM_IOOUT_CFG 16019 //IO -#define NET_DVR_GET_ELEVATORCONTROL_CFG 16020 //ȡݿ -#define NET_DVR_SET_ELEVATORCONTROL_CFG 16021 //ݿ -#define NET_DVR_GET_VIDEOINTERCOM_STREAM 16022 //ȡӶԽͨ -#define NET_DVR_SET_VIDEOINTERCOM_STREAM 16023 //ÿӶԽͨ -#define NET_DVR_GET_WDR_CFG 16024 //ȡ̬ -#define NET_DVR_SET_WDR_CFG 16025 //ÿ̬ -#define NET_DVR_GET_VIS_DEVINFO 16026 //ȡ豸Ϣ -#define NET_DVR_GET_VIS_REGISTER_INFO 16027 //ȡ豸ע豸Ϣ -#define NET_DVR_GET_ELEVATORCONTROL_CFG_V40 16028 //ȡݿ-չ -#define NET_DVR_SET_ELEVATORCONTROL_CFG_V40 16029 //ݿ-չ -#define NET_DVR_GET_CALL_ROOM_CFG 16030 //ȡס -#define NET_DVR_SET_CALL_ROOM_CFG 16031 //ðס -#define NET_DVR_VIDEO_CALL_SIGNAL_PROCESS 16032 //ӻԽ -#define NET_DVR_GET_CALLER_INFO 16033 //ȡгϢ -#define NET_DVR_GET_CALL_STATUS 16034 //ȡͨ״̬ -#define NET_DVR_GET_SERVER_DEVICE_INFO 16035 //ȡ豸б -#define NET_DVR_SET_CALL_SIGNAL 16036 //ӶԽֻ˷ -#define NET_DVR_GET_VIDEO_INTERCOM_ALARM_CFG 16037 //ȡӶԽ¼ -#define NET_DVR_SET_VIDEO_INTERCOM_ALARM_CFG 16038 //ÿӶԽ¼ -#define NET_DVR_GET_RING_LIST 16039 //ѯб +#define NET_DVR_GET_VIDEO_INTERCOM_IOIN_CFG 16016 //获取IO输入参数 +#define NET_DVR_SET_VIDEO_INTERCOM_IOIN_CFG 16017 //设置IO输入参数 +#define NET_DVR_GET_VIDEO_INTERCOM_IOOUT_CFG 16018 //获取IO输出参数 +#define NET_DVR_SET_VIDEO_INTERCOM_IOOUT_CFG 16019 //设置IO输出参数 +#define NET_DVR_GET_ELEVATORCONTROL_CFG 16020 //获取梯控器参数 +#define NET_DVR_SET_ELEVATORCONTROL_CFG 16021 //设置梯控器参数 +#define NET_DVR_GET_VIDEOINTERCOM_STREAM 16022 //获取可视对讲流通道参数 +#define NET_DVR_SET_VIDEOINTERCOM_STREAM 16023 //设置可视对讲流通道参数 +#define NET_DVR_GET_WDR_CFG 16024 //获取宽动态参数配置 +#define NET_DVR_SET_WDR_CFG 16025 //设置宽动态参数配置 +#define NET_DVR_GET_VIS_DEVINFO 16026 //获取可设备编号信息 +#define NET_DVR_GET_VIS_REGISTER_INFO 16027 //获取可设备注册的设备信息 +#define NET_DVR_GET_ELEVATORCONTROL_CFG_V40 16028 //获取梯控器参数-扩展 +#define NET_DVR_SET_ELEVATORCONTROL_CFG_V40 16029 //设置梯控器参数-扩展 +#define NET_DVR_GET_CALL_ROOM_CFG 16030 //获取按键呼叫住户配置 +#define NET_DVR_SET_CALL_ROOM_CFG 16031 //设置按键呼叫住户配置 +#define NET_DVR_VIDEO_CALL_SIGNAL_PROCESS 16032 //可视话对讲信令处理 +#define NET_DVR_GET_CALLER_INFO 16033 //获取主叫长号信息 +#define NET_DVR_GET_CALL_STATUS 16034 //获取通话状态 +#define NET_DVR_GET_SERVER_DEVICE_INFO 16035 //获取设备列表 +#define NET_DVR_SET_CALL_SIGNAL 16036 //可视对讲手机端发送信令 +#define NET_DVR_GET_VIDEO_INTERCOM_ALARM_CFG 16037 //获取可视对讲报警事件参数 +#define NET_DVR_SET_VIDEO_INTERCOM_ALARM_CFG 16038 //设置可视对讲报警事件参数 +#define NET_DVR_GET_RING_LIST 16039 //查询铃音参数列表 -#define NET_DVR_GET_ROOM_CUSTOM_CFG 16040 //Զȡ -#define NET_DVR_SET_ROOM_CUSTOM_CFG 16041 //Զ -#define NET_DVR_GET_ELEVATORCONTROL_CFG_V50 16042 //ȡݿV50 -#define NET_DVR_SET_ELEVATORCONTROL_CFG_V50 16043 //ݿV50 -#define NET_DVR_GET_SIP_CFG_V50 16044 //ȡSIPV50 -#define NET_DVR_SET_SIP_CFG_V50 16045 //SIPV50 -#define NET_DVR_GET_NOTICE_VIDEO_DATA 16050 //Ƶȡ +#define NET_DVR_GET_ROOM_CUSTOM_CFG 16040 //房间自定义获取 +#define NET_DVR_SET_ROOM_CUSTOM_CFG 16041 //房间自定义设置 +#define NET_DVR_GET_ELEVATORCONTROL_CFG_V50 16042 //获取梯控器参数V50 +#define NET_DVR_SET_ELEVATORCONTROL_CFG_V50 16043 //设置梯控器参数V50 +#define NET_DVR_GET_SIP_CFG_V50 16044 //获取SIP参数V50 +#define NET_DVR_SET_SIP_CFG_V50 16045 //设置SIP参数V50 +#define NET_DVR_GET_NOTICE_VIDEO_DATA 16050 //公告视频获取 -/*******************************¥ӶԽ end***********************************/ +/*******************************楼宇可视对讲机 end***********************************/ -#define NET_DVR_DEBUGINFO_START 18000 //豸Ϣ -#define NET_DVR_AUTO_TEST_START 18001 //ԶԳӻȡ +#define NET_DVR_DEBUGINFO_START 18000 //网传设备调试信息启动命令 +#define NET_DVR_AUTO_TEST_START 18001 //自动测试长连接获取 -#define NET_DVR_GET_SELFCHECK_RESULT 20000 //ȡ豸Լ -#define NET_DVR_SET_TEST_COMMAND 20001 //òԿ -#define NET_DVR_SET_TEST_DEVMODULE 20002 //òӲģ -#define NET_DVR_GET_TEST_DEVMODULE 20003 //ȡӲģ +#define NET_DVR_GET_SELFCHECK_RESULT 20000 //获取设备自检结果 +#define NET_DVR_SET_TEST_COMMAND 20001 //设置测试控制命令 +#define NET_DVR_SET_TEST_DEVMODULE 20002 //设置测试硬件模块控制命令 +#define NET_DVR_GET_TEST_DEVMODULE 20003 //获取测试硬件模块控制命令 -#define NET_DVR_SET_AUTOFOCUS_TEST 20004 //ԶԽ 2013-10-26 -#define NET_DVR_CHECK_USER_STATUS 20005 //ûǷ -#define NET_DVR_GET_TEST_COMMAND 20010 //ȡԿ -#define NET_DVR_GET_DIAL_SWITCH_CFG 20200 //ȡ뿪Ϣ -#define NET_DVR_SET_AGING_TRICK_SCAN 20201 //ϻǰ󹤾߲ -#define NET_DVR_GET_ECCENTRIC_CORRECT_STATE 20202 //ȡȡƫУ״̬ +#define NET_DVR_SET_AUTOFOCUS_TEST 20004 //保存自动对焦参数 2013-10-26 +#define NET_DVR_CHECK_USER_STATUS 20005 //检测用户是否在线 +#define NET_DVR_GET_TEST_COMMAND 20010 //获取测试控制命令 +#define NET_DVR_GET_DIAL_SWITCH_CFG 20200 //获取拨码开关信息 +#define NET_DVR_SET_AGING_TRICK_SCAN 20201 //设置老化前后工具参数 +#define NET_DVR_GET_ECCENTRIC_CORRECT_STATE 20202 //获取获取偏心校正状态 -#define NET_DVR_GET_THERMOMETRYRULE_TEMPERATURE_INFO 23001 //ֶȡ¹¶Ϣ +#define NET_DVR_GET_THERMOMETRYRULE_TEMPERATURE_INFO 23001 //手动获取测温规则温度信息 -#define NET_DVR_T1_TEST_CMD 131073 //ãͨı־ʲô.ݳȲô1024 -//ʽΪ//ָ豸Ĭϲػ +#define NET_DVR_T1_TEST_CMD 131073 //当测试命令来用,通过数据区域的文本内容区分具体做什么.数据长度不得大于1024 +//数据区格式为://恢复设备默认参数并关机。 -// ֶƲ˵ģʽⲿ -#define NET_DVR_GET_MEMU_OUTPUT_MODE 155649 // ȡ˵ģʽ -#define NET_DVR_SET_MEMU_OUTPUT_MODE 155650 // ò˵ģʽ +// 美分定制菜单输出模式外部命令 +#define NET_DVR_GET_MEMU_OUTPUT_MODE 155649 // 获取菜单输出模式 +#define NET_DVR_SET_MEMU_OUTPUT_MODE 155650 // 设置菜单输出模式 -/***************************DS9000(_V30) end *****************************/ +/***************************DS9000新增命令(_V30) end *****************************/ -#define NET_DVR_GET_DEV_LOGIN_RET_INFO 16777200 //豸½ز +#define NET_DVR_GET_DEV_LOGIN_RET_INFO 16777200 //设备登陆返回参数 -#define NET_DVR_GET_TEST_VERSION_HEAD 268435441 //ȡ԰汾ͷ -#define NET_DVR_SET_TEST_VERSION_HEAD 268435442 //ò԰汾ͷ -#define NET_DVR_GET_TEST_VERSION_HEAD_V1 268435443 //ȡ԰汾ͷ-ڶ -#define NET_DVR_SET_TEST_VERSION_HEAD_V1 268435444 //ò԰汾ͷ-ڶ -#define NET_DVR_GET_TEST_VERSION_HEAD_V2 268435445 //ȡ԰汾ͷ- -#define NET_DVR_SET_TEST_VERSION_HEAD_V2 268435446 //ò԰汾ͷ- +#define NET_DVR_GET_TEST_VERSION_HEAD 268435441 //获取测试版本头 +#define NET_DVR_SET_TEST_VERSION_HEAD 268435442 //设置测试版本头 +#define NET_DVR_GET_TEST_VERSION_HEAD_V1 268435443 //获取测试版本头-第二版 +#define NET_DVR_SET_TEST_VERSION_HEAD_V1 268435444 //设置测试版本头-第二版 +#define NET_DVR_GET_TEST_VERSION_HEAD_V2 268435445 //获取测试版本头-第三版 +#define NET_DVR_SET_TEST_VERSION_HEAD_V2 268435446 //设置测试版本头-第三版 -#define NET_DVR_GET_TEST_VERSION_HEAD_ONLY_0 268435447 //ȡ԰汾ͷ,ǰһ汾 -#define NET_DVR_SET_TEST_VERSION_HEAD_ONLY_0 268435448 //ò԰汾ͷ,ǰһ汾 +#define NET_DVR_GET_TEST_VERSION_HEAD_ONLY_0 268435447 //获取测试版本头,当前仅有一个版本 +#define NET_DVR_SET_TEST_VERSION_HEAD_ONLY_0 268435448 //设置测试版本头,当前仅有一个版本 -#define MAX_LOCAL_ADDR_LEN 96 //SOCKS󱾵θ -#define MAX_COUNTRY_NAME_LEN 4 //ҼдƳ +#define MAX_LOCAL_ADDR_LEN 96 //SOCKS最大本地网段个数 +#define MAX_COUNTRY_NAME_LEN 4 //国家简写名称长度 -/************************DVR־ begin***************************/ +/************************DVR日志 begin***************************/ -/* */ -// +/* 报警 */ +//主类型 #define MAJOR_ALARM 0x1 -// -#define MINOR_ALARM_IN 0x1 /* */ -#define MINOR_ALARM_OUT 0x2 /* */ -#define MINOR_MOTDET_START 0x3 /* ƶⱨʼ */ -#define MINOR_MOTDET_STOP 0x4 /* ƶⱨ */ -#define MINOR_HIDE_ALARM_START 0x5 /* ڵʼ */ -#define MINOR_HIDE_ALARM_STOP 0x6 /* ڵ */ -#define MINOR_VCA_ALARM_START 0x7 /*ܱʼ*/ -#define MINOR_VCA_ALARM_STOP 0x8 /*ֹܱͣ*/ -#define MINOR_ITS_ALARM_START 0x09 // ͨ¼ʼ -#define MINOR_ITS_ALARM_STOP 0x0A // ͨ¼ -//2010-11-10 籨־ -#define MINOR_NETALARM_START 0x0b /*籨ʼ*/ -#define MINOR_NETALARM_STOP 0x0c /*籨*/ -//2010-12-16 ־"MINOR_ALARM_IN"ʹ -#define MINOR_NETALARM_RESUME 0x0d /*籨ָ*/ -//2012-4-5 IPC PIRߡȱ -#define MINOR_WIRELESS_ALARM_START 0x0e /* ߱ʼ */ -#define MINOR_WIRELESS_ALARM_STOP 0x0f /* ߱ */ -#define MINOR_PIR_ALARM_START 0x10 /* Ӧʼ */ -#define MINOR_PIR_ALARM_STOP 0x11 /* Ӧ */ -#define MINOR_CALLHELP_ALARM_START 0x12 /* ȱʼ */ -#define MINOR_CALLHELP_ALARM_STOP 0x13 /* ȱ */ -#define MINOR_IPCHANNEL_ALARMIN_START 0x14 //ͨ뿪ʼPCNVRڽյͨMINOR_ALARM_INͨ뿪ʼ10sղMINOR_ALARM_INͨ -#define MINOR_IPCHANNEL_ALARMIN_STOP 0x15 //ͨ뿪ʼͬ -#define MINOR_DETECTFACE_ALARM_START 0x16 /* ⱨʼ */ -#define MINOR_DETECTFACE_ALARM_STOP 0x17 /* ⱨ */ -#define MINOR_VQD_ALARM_START 0x18 //VQD -#define MINOR_VQD_ALARM_STOP 0x19 //VQD -#define MINOR_VCA_SECNECHANGE_DETECTION 0x1a //ⱨ 2013-07-16 +//次类型 +#define MINOR_ALARM_IN 0x1 /* 报警输入 */ +#define MINOR_ALARM_OUT 0x2 /* 报警输出 */ +#define MINOR_MOTDET_START 0x3 /* 移动侦测报警开始 */ +#define MINOR_MOTDET_STOP 0x4 /* 移动侦测报警结束 */ +#define MINOR_HIDE_ALARM_START 0x5 /* 遮挡报警开始 */ +#define MINOR_HIDE_ALARM_STOP 0x6 /* 遮挡报警结束 */ +#define MINOR_VCA_ALARM_START 0x7 /*智能报警开始*/ +#define MINOR_VCA_ALARM_STOP 0x8 /*智能报警停止*/ +#define MINOR_ITS_ALARM_START 0x09 // 交通事件报警开始 +#define MINOR_ITS_ALARM_STOP 0x0A // 交通事件报警结束 +//2010-11-10 网络报警日志 +#define MINOR_NETALARM_START 0x0b /*网络报警开始*/ +#define MINOR_NETALARM_STOP 0x0c /*网络报警结束*/ +//2010-12-16 报警板日志,与"MINOR_ALARM_IN"配对使用 +#define MINOR_NETALARM_RESUME 0x0d /*网络报警恢复*/ +//2012-4-5 IPC PIR、无线、呼救报警 +#define MINOR_WIRELESS_ALARM_START 0x0e /* 无线报警开始 */ +#define MINOR_WIRELESS_ALARM_STOP 0x0f /* 无线报警结束 */ +#define MINOR_PIR_ALARM_START 0x10 /* 人体感应报警开始 */ +#define MINOR_PIR_ALARM_STOP 0x11 /* 人体感应报警结束 */ +#define MINOR_CALLHELP_ALARM_START 0x12 /* 呼救报警开始 */ +#define MINOR_CALLHELP_ALARM_STOP 0x13 /* 呼救报警结束 */ +#define MINOR_IPCHANNEL_ALARMIN_START 0x14 //数字通道报警输入开始:PCNVR在接收到数字通道的MINOR_ALARM_IN产生“数字通道报警输入开始”,10s,再收不到MINOR_ALARM_IN,产生“数字通道报警输入结束” +#define MINOR_IPCHANNEL_ALARMIN_STOP 0x15 //数字通道报警输入开始:同上 +#define MINOR_DETECTFACE_ALARM_START 0x16 /* 人脸侦测报警开始 */ +#define MINOR_DETECTFACE_ALARM_STOP 0x17 /* 人脸侦测报警结束 */ +#define MINOR_VQD_ALARM_START 0x18 //VQD报警 +#define MINOR_VQD_ALARM_STOP 0x19 //VQD报警结束 +#define MINOR_VCA_SECNECHANGE_DETECTION 0x1a //场景侦测报警 2013-07-16 -#define MINOR_SMART_REGION_EXITING_BEGIN 0x1b //뿪⿪ʼ -#define MINOR_SMART_REGION_EXITING_END 0x1c //뿪 -#define MINOR_SMART_LOITERING_BEGIN 0x1d //ǻ⿪ʼ -#define MINOR_SMART_LOITERING_END 0x1e //ǻ +#define MINOR_SMART_REGION_EXITING_BEGIN 0x1b //离开区域侦测开始 +#define MINOR_SMART_REGION_EXITING_END 0x1c //离开区域侦测结束 +#define MINOR_SMART_LOITERING_BEGIN 0x1d //徘徊侦测开始 +#define MINOR_SMART_LOITERING_END 0x1e //徘徊侦测结束 #define MINOR_VCA_ALARM_LINE_DETECTION_BEGIN 0x20 #define MINOR_VCA_ALARM_LINE_DETECTION_END 0x21 -#define MINOR_VCA_ALARM_INTRUDE_BEGIN 0x22 //⿪ʼ -#define MINOR_VCA_ALARM_INTRUDE_END 0x23 // -#define MINOR_VCA_ALARM_AUDIOINPUT 0x24 //Ƶ쳣 -#define MINOR_VCA_ALARM_AUDIOABNORMAL 0x25 //ǿͻ -#define MINOR_VCA_DEFOCUS_DETECTION_BEGIN 0x26 //齹⿪ʼ -#define MINOR_VCA_DEFOCUS_DETECTION_END 0x27 //齹 +#define MINOR_VCA_ALARM_INTRUDE_BEGIN 0x22 //区域侦测开始 +#define MINOR_VCA_ALARM_INTRUDE_END 0x23 //区域侦测结束 +#define MINOR_VCA_ALARM_AUDIOINPUT 0x24 //音频异常输入 +#define MINOR_VCA_ALARM_AUDIOABNORMAL 0x25 //声强突变 +#define MINOR_VCA_DEFOCUS_DETECTION_BEGIN 0x26 //虚焦侦测开始 +#define MINOR_VCA_DEFOCUS_DETECTION_END 0x27 //虚焦侦测结束 -//NVR -#define MINOR_EXT_ALARM 0x28/*IPCⲿ*/ -#define MINOR_VCA_FACE_ALARM_BEGIN 0x29 /*⿪ʼ*/ -#define MINOR_SMART_REGION_ENTRANCE_BEGIN 0x2a //⿪ʼ -#define MINOR_SMART_REGION_ENTRANCE_END 0x2b // -#define MINOR_SMART_PEOPLE_GATHERING_BEGIN 0x2c //Աۼ⿪ʼ -#define MINOR_SMART_PEOPLE_GATHERING_END 0x2d //Աۼ -#define MINOR_SMART_FAST_MOVING_BEGIN 0x2e //˶⿪ʼ -#define MINOR_SMART_FAST_MOVING_END 0x2f //˶ +//民用NVR +#define MINOR_EXT_ALARM 0x28/*IPC外部报警*/ +#define MINOR_VCA_FACE_ALARM_BEGIN 0x29 /*人脸侦测开始*/ +#define MINOR_SMART_REGION_ENTRANCE_BEGIN 0x2a //进入区域侦测开始 +#define MINOR_SMART_REGION_ENTRANCE_END 0x2b //进入区域侦测结束 +#define MINOR_SMART_PEOPLE_GATHERING_BEGIN 0x2c //人员聚集侦测开始 +#define MINOR_SMART_PEOPLE_GATHERING_END 0x2d //人员聚集侦测结束 +#define MINOR_SMART_FAST_MOVING_BEGIN 0x2e //快速运动侦测开始 +#define MINOR_SMART_FAST_MOVING_END 0x2f //快速运动侦测结束 -#define MINOR_VCA_FACE_ALARM_END 0x30 /**/ -#define MINOR_VCA_SCENE_CHANGE_ALARM_BEGIN 0x31 /*⿪ʼ*/ -#define MINOR_VCA_SCENE_CHANGE_ALARM_END 0x32 /**/ -#define MINOR_VCA_ALARM_AUDIOINPUT_BEGIN 0x33 /*Ƶ쳣뿪ʼ*/ -#define MINOR_VCA_ALARM_AUDIOINPUT_END 0x34 /*Ƶ쳣*/ -#define MINOR_VCA_ALARM_AUDIOABNORMAL_BEGIN 0x35 /*ǿͻ⿪ʼ*/ -#define MINOR_VCA_ALARM_AUDIOABNORMAL_END 0x36 /*ǿͻ*/ +#define MINOR_VCA_FACE_ALARM_END 0x30 /*人脸侦测结束*/ +#define MINOR_VCA_SCENE_CHANGE_ALARM_BEGIN 0x31 /*场景变更侦测开始*/ +#define MINOR_VCA_SCENE_CHANGE_ALARM_END 0x32 /*场景变更侦测结束*/ +#define MINOR_VCA_ALARM_AUDIOINPUT_BEGIN 0x33 /*音频异常输入开始*/ +#define MINOR_VCA_ALARM_AUDIOINPUT_END 0x34 /*音频异常输入结束*/ +#define MINOR_VCA_ALARM_AUDIOABNORMAL_BEGIN 0x35 /*声强突变侦测开始*/ +#define MINOR_VCA_ALARM_AUDIOABNORMAL_END 0x36 /*声强突变侦测结束*/ -#define MINOR_VCA_LECTURE_DETECTION_BEGIN 0x37 //ڿ⿪ʼ -#define MINOR_VCA_LECTURE_DETECTION_END 0x38 //ڿ -#define MINOR_VCA_ALARM_AUDIOSTEEPDROP 0x39 //ǿ 2014-03-21 -#define MINOR_VCA_ANSWER_DETECTION_BEGIN 0x3a //ش⿪ʼ -#define MINOR_VCA_ANSWER_DETECTION_END 0x3b //ش +#define MINOR_VCA_LECTURE_DETECTION_BEGIN 0x37 //授课侦测开始报警 +#define MINOR_VCA_LECTURE_DETECTION_END 0x38 //授课侦测结束报警 +#define MINOR_VCA_ALARM_AUDIOSTEEPDROP 0x39 //声强陡降 2014-03-21 +#define MINOR_VCA_ANSWER_DETECTION_BEGIN 0x3a //回答问题侦测开始报警 +#define MINOR_VCA_ANSWER_DETECTION_END 0x3b //回答问题侦测结束报警 -#define MINOR_SMART_PARKING_BEGIN 0x3c //ͣ⿪ʼ -#define MINOR_SMART_PARKING_END 0x3d //ͣ -#define MINOR_SMART_UNATTENDED_BAGGAGE_BEGIN 0x3e //Ʒ⿪ʼ -#define MINOR_SMART_UNATTENDED_BAGGAGE_END 0x3f //Ʒ -#define MINOR_SMART_OBJECT_REMOVAL_BEGIN 0x40 //Ʒȡ⿪ʼ -#define MINOR_SMART_OBJECT_REMOVAL_END 0x41 //Ʒȡ -#define MINOR_SMART_VEHICLE_ALARM_START 0x46 //Ƽ⿪ʼ -#define MINOR_SMART_VEHICLE_ALARM_STOP 0x47 //Ƽ -#define MINOR_THERMAL_FIREDETECTION 0x48 //ȳ⿪ʼ -#define MINOR_THERMAL_FIREDETECTION_END 0x49 //ȳ -#define MINOR_SMART_VANDALPROOF_BEGIN 0x50 //ƻ⿪ʼ -#define MINOR_SMART_VANDALPROOF_END 0x51 //ƻ +#define MINOR_SMART_PARKING_BEGIN 0x3c //停车侦测开始 +#define MINOR_SMART_PARKING_END 0x3d //停车侦测结束 +#define MINOR_SMART_UNATTENDED_BAGGAGE_BEGIN 0x3e //物品遗留侦测开始 +#define MINOR_SMART_UNATTENDED_BAGGAGE_END 0x3f //物品遗留侦测结束 +#define MINOR_SMART_OBJECT_REMOVAL_BEGIN 0x40 //物品拿取侦测开始 +#define MINOR_SMART_OBJECT_REMOVAL_END 0x41 //物品拿取侦测结束 +#define MINOR_SMART_VEHICLE_ALARM_START 0x46 //车牌检测开始 +#define MINOR_SMART_VEHICLE_ALARM_STOP 0x47 //车牌检测结束 +#define MINOR_THERMAL_FIREDETECTION 0x48 //热成像火点检测侦测开始 +#define MINOR_THERMAL_FIREDETECTION_END 0x49 //热成像火点检测侦测结束 +#define MINOR_SMART_VANDALPROOF_BEGIN 0x50 //防破坏检测开始 +#define MINOR_SMART_VANDALPROOF_END 0x51 //防破坏检测结束 -#define MINOR_FACESNAP_MATCH_ALARM_START 0x55 /*ȶԱʼ*/ -#define MINOR_FACESNAP_MATCH_ALARM_STOP 0x56 /*ȶԱ*/ -#define MINOR_ALLOWLIST_FACESNAP_MATCH_ALARM_START 0x57 /*ȶԣİˣʼ*/ -#define MINOR_ALLOWLIST_FACESNAP_MATCH_ALARM_STOP 0x58 /*ȶԣİˣ*/ +#define MINOR_FACESNAP_MATCH_ALARM_START 0x55 /*人脸比对报警开始*/ +#define MINOR_FACESNAP_MATCH_ALARM_STOP 0x56 /*人脸比对报警结束*/ +#define MINOR_ALLOWLIST_FACESNAP_MATCH_ALARM_START 0x57 /*允许名单人脸比对(陌生人)报警开始*/ +#define MINOR_ALLOWLIST_FACESNAP_MATCH_ALARM_STOP 0x58 /*允许名单人脸比对(陌生人)报警结束*/ -#define MINOR_THERMAL_SHIPSDETECTION 0x5a //ȳֻ -#define MINOR_THERMAL_THERMOMETRY_EARLYWARNING_BEGIN 0x5b //ȳԤʼ -#define MINOR_THERMAL_THERMOMETRY_EARLYWARNING_END 0x5c //ȳԤ -#define MINOR_THERMAL_THERMOMETRY_ALARM_BEGIN 0x5d //ȳ±ʼ -#define MINOR_THERMAL_THERMOMETRY_ALARM_END 0x5e //ȳ± -#define MINOR_THERMAL_THERMOMETRY_DIFF_ALARM_BEGIN 0x5f //ȳ²ʼ -#define MINOR_THERMAL_THERMOMETRY_DIFF_ALARM_END 0x60 //ȳ² -#define MINOR_FACE_THERMOMETRY_ALARM 0x63 //± -#define MINOR_SMART_DENSEFOGDETECTION_BEGIN 0x6e //⿪ʼ -#define MINOR_SMART_DENSEFOGDETECTION_END 0x6f // -#define MINOR_RUNNING_ALARM 0x70 //ܼ -#define MINOR_RETENTION_ALARM 0x71 // -#define MINOR_SAFETY_HELMET_ALARM_START 0x72 /*δȫñⱨʼ*/ -#define MINOR_SAFETY_HELMET_ALARM_STOP 0x73 /*δȫñⱨ*/ -#define MINOR_HFPD_ALARM_START 0x74 /*Ƶͼʶⱨʼ*/ -#define MINOR_HFPD_ALARM_STOP 0x75 /*Ƶͼʶⱨ*/ -#define MINOR_MIXED_TARGET_ALARM_START 0x76 /*Ŀⱨʼ*/ -#define MINOR_MIXED_TARGET_ALARM_STOP 0x77 /*Ŀⱨ*/ -#define MINOR_VCA_PLAY_CELLPHONE_ALARM_BEGIN 0x78 //ֻⱨʼ -#define MINOR_VCA_PLAY_CELLPHONE_ALARM_END 0x79 //ֻⱨ -#define MINOR_VCA_GET_UP_ALARM_BEGIN 0x80 //𴲼ⱨʼ -#define MINOR_VCA_GET_UP_ALARM_END 0x81 //𴲼ⱨ -#define MINOR_VCA_ADV_REACH_HEIGHT_ALARM_BEGIN 0x82 //ʸ߱ʼ -#define MINOR_VCA_ADV_REACH_HEIGHT_ALARM_END 0x83 //ʸ߱ -#define MINOR_VCA_TOILET_TARRY_ALARM_BEGIN 0x84 //Ŀʱʼ -#define MINOR_VCA_TOILET_TARRY_ALARM_END 0x85 //Ŀʱ -#define MINOR_HUMAN_RECOGNITION_ALARM_BEGIN 0x86 //ʶ𱨾ʼ -#define MINOR_HUMAN_RECOGNITION_ALARM_END 0x87 //ʶ𱨾 -#define MINOR_STUDENTS_STOODUP_ALARM_BEGIN 0x88 //ѧʼ -#define MINOR_STUDENTS_STOODUP_ALARM_END 0x89 //ѧ -#define MINOR_FRAMES_PEOPLE_COUNTING_ALARM 0x8a //ͳƱ -#define MINOR_FACE_SNAP_ALARM_BEGIN 0x8b //Ŀץıʼ -#define MINOR_FACE_SNAP_ALARM_END 0x8c //Ŀץı -#define MINOR_TEACHER_BEHAVIOR_DETECT_ALARM_BEGIN 0x8d //ʦΪⱨʼ -#define MINOR_TEACHER_BEHAVIOR_DETECT_ALARM_END 0x8e //ʦΪⱨ -#define MINOR_PERIMETER_CAPTURE_ALARM_BEGIN 0x8f //ܽץıʼ -#define MINOR_PERIMETER_CAPTURE_ALARM_END 0x90 //ܽץı -#define MINOR_UNREGISTERED_STREET_VENDOR_ALARM 0x91 //Ƿ̯ +#define MINOR_THERMAL_SHIPSDETECTION 0x5a //热成像船只检测侦测 +#define MINOR_THERMAL_THERMOMETRY_EARLYWARNING_BEGIN 0x5b //热成像测温预警开始 +#define MINOR_THERMAL_THERMOMETRY_EARLYWARNING_END 0x5c //热成像测温预警结束 +#define MINOR_THERMAL_THERMOMETRY_ALARM_BEGIN 0x5d //热成像测温报警开始 +#define MINOR_THERMAL_THERMOMETRY_ALARM_END 0x5e //热成像测温报警结束 +#define MINOR_THERMAL_THERMOMETRY_DIFF_ALARM_BEGIN 0x5f //热成像温差报警开始 +#define MINOR_THERMAL_THERMOMETRY_DIFF_ALARM_END 0x60 //热成像温差报警结束 +#define MINOR_FACE_THERMOMETRY_ALARM 0x63 //人脸测温报警 +#define MINOR_SMART_DENSEFOGDETECTION_BEGIN 0x6e //大雾侦测开始 +#define MINOR_SMART_DENSEFOGDETECTION_END 0x6f //大雾侦测结束 +#define MINOR_RUNNING_ALARM 0x70 //奔跑检测 +#define MINOR_RETENTION_ALARM 0x71 //滞留检测 +#define MINOR_SAFETY_HELMET_ALARM_START 0x72 /*未佩戴安全帽检测报警开始*/ +#define MINOR_SAFETY_HELMET_ALARM_STOP 0x73 /*未佩戴安全帽检测报警结束*/ +#define MINOR_HFPD_ALARM_START 0x74 /*高频图像特征识别检测报警开始*/ +#define MINOR_HFPD_ALARM_STOP 0x75 /*高频图像特征识别检测报警结束*/ +#define MINOR_MIXED_TARGET_ALARM_START 0x76 /*混合目标检测报警开始*/ +#define MINOR_MIXED_TARGET_ALARM_STOP 0x77 /*混合目标检测报警结束*/ +#define MINOR_VCA_PLAY_CELLPHONE_ALARM_BEGIN 0x78 //玩手机检测报警开始 +#define MINOR_VCA_PLAY_CELLPHONE_ALARM_END 0x79 //玩手机检测报警结束 +#define MINOR_VCA_GET_UP_ALARM_BEGIN 0x80 //起床检测报警开始 +#define MINOR_VCA_GET_UP_ALARM_END 0x81 //起床检测报警结束 +#define MINOR_VCA_ADV_REACH_HEIGHT_ALARM_BEGIN 0x82 //折线攀高报警开始 +#define MINOR_VCA_ADV_REACH_HEIGHT_ALARM_END 0x83 //折线攀高报警结束 +#define MINOR_VCA_TOILET_TARRY_ALARM_BEGIN 0x84 //目标区域滞留超时报警开始 +#define MINOR_VCA_TOILET_TARRY_ALARM_END 0x85 //目标区域滞留超时报警结束 +#define MINOR_HUMAN_RECOGNITION_ALARM_BEGIN 0x86 //人体识别报警开始 +#define MINOR_HUMAN_RECOGNITION_ALARM_END 0x87 //人体识别报警结束 +#define MINOR_STUDENTS_STOODUP_ALARM_BEGIN 0x88 //学生起立报警开始 +#define MINOR_STUDENTS_STOODUP_ALARM_END 0x89 //学生起立报警结束 +#define MINOR_FRAMES_PEOPLE_COUNTING_ALARM 0x8a //区域人数统计报警 +#define MINOR_FACE_SNAP_ALARM_BEGIN 0x8b //目标抓拍报警开始 +#define MINOR_FACE_SNAP_ALARM_END 0x8c //目标抓拍报警结束 +#define MINOR_TEACHER_BEHAVIOR_DETECT_ALARM_BEGIN 0x8d //教师行为检测报警开始 +#define MINOR_TEACHER_BEHAVIOR_DETECT_ALARM_END 0x8e //教师行为检测报警结束 +#define MINOR_PERIMETER_CAPTURE_ALARM_BEGIN 0x8f //周界抓拍报警开始 +#define MINOR_PERIMETER_CAPTURE_ALARM_END 0x90 //周界抓拍报警结束 +#define MINOR_UNREGISTERED_STREET_VENDOR_ALARM 0x91 //非法摆摊报警 -#define MINOR_PERSON_QUEUE_TIME_ALARM_BEGIN 0x92 //Ŷʱⱨʼ -#define MINOR_PERSON_QUEUE_TIME_ALARM_END 0x93 //Ŷʱⱨ -#define MINOR_PERSON_QUEUE_COUNTING_ALARM_BEGIN 0x94 //Ŷⱨʼ -#define MINOR_PERSON_QUEUE_COUNTING_ALARM_END 0x95 //Ŷⱨ -#define MINOR_FACE_SNAP_MATCH_FAILURE_ALARM_START 0x96 //ȶʧܱʼ -#define MINOR_FACE_SNAP_MATCH_FAILURE_ALARM_END 0x97 //ȶʧܱ +#define MINOR_PERSON_QUEUE_TIME_ALARM_BEGIN 0x92 //排队时长检测报警开始 +#define MINOR_PERSON_QUEUE_TIME_ALARM_END 0x93 //排队时长检测报警结束 +#define MINOR_PERSON_QUEUE_COUNTING_ALARM_BEGIN 0x94 //排队人数检测报警开始 +#define MINOR_PERSON_QUEUE_COUNTING_ALARM_END 0x95 //排队人数检测报警结束 +#define MINOR_FACE_SNAP_MATCH_FAILURE_ALARM_START 0x96 //人脸比对失败报警开始 +#define MINOR_FACE_SNAP_MATCH_FAILURE_ALARM_END 0x97 //人脸比对失败报警结束 -#define MINOR_ACCESS_CONTROLLER_EVENT 0x100 //޼ -#define MINOR_VIDEO_INTERCOM_EVENT 0x101 //ӶԽ豸¼ -#define MINOR_GJD_EVENT 0x102 //GJD¼ -#define MINOR_LUMINITE_EVENT 0x103 // LUMINITE¼ -#define MINOR_OPTEX_EVENT 0x104 // OPTEX¼ -#define MINOR_CAMERA_DETECTOR_EVENT 0x105 // ¼ -#define MINOR_SECURITY_CONTROL_PANEL_EVENT 0x106 //˽б¼ +#define MINOR_ACCESS_CONTROLLER_EVENT 0x100 //门禁主机事件 +#define MINOR_VIDEO_INTERCOM_EVENT 0x101 //可视对讲设备事件 +#define MINOR_GJD_EVENT 0x102 //GJD报警主机事件 +#define MINOR_LUMINITE_EVENT 0x103 // LUMINITE报警主机事件 +#define MINOR_OPTEX_EVENT 0x104 // OPTEX报警主机事件 +#define MINOR_CAMERA_DETECTOR_EVENT 0x105 // 传感器事件 +#define MINOR_SECURITY_CONTROL_PANEL_EVENT 0x106 //私有报警主机事件 -#define MINOR_VCA_SPACE_CHANGE_START 0x10c //쳣⿪ʼ -#define MINOR_VCA_SPACE_CHANGE_STOP 0x10d //쳣 -#define MINOR_MANUAL_ALARM 0x10e //ֶ -#define MINOR_DETECTOR_ALARM 0x10f //̽ -#define MINOR_LINKAGE_ALARM 0x110 // -#define MINOR_VCA_SITUATION_ANALYSIS_START 0x111 //̬Ʒ⿪ʼ -#define MINOR_VCA_SITUATION_ANALYSIS_STOP 0x112 //̬Ʒ -#define MINOR_FIRE_ALARM 0x113 //𾯱 -#define MINOR_SUPERVISE_ALARM 0x114 //ܱ -#define MINOR_SHIELD_ALARM 0x115 //α -#define MINOR_ABNORMAL_ALARM 0x116 //ϱ -#define MINOR_RESIDUAL_CURRENT_ALARM 0x117 //ʣ -#define MINOR_TEMPERATURE_ALARM 0x118 //¶ȱ -#define MINOR_ARC_ALARM 0x119 //绡 +#define MINOR_VCA_SPACE_CHANGE_START 0x10c //间距异常检测开始 +#define MINOR_VCA_SPACE_CHANGE_STOP 0x10d //间距异常检测结束 +#define MINOR_MANUAL_ALARM 0x10e //手动报警 +#define MINOR_DETECTOR_ALARM 0x10f //探测器报警 +#define MINOR_LINKAGE_ALARM 0x110 //联动报警 +#define MINOR_VCA_SITUATION_ANALYSIS_START 0x111 //态势分析检测开始 +#define MINOR_VCA_SITUATION_ANALYSIS_STOP 0x112 //态势分析检测结束 +#define MINOR_FIRE_ALARM 0x113 //火警报警 +#define MINOR_SUPERVISE_ALARM 0x114 //监管报警 +#define MINOR_SHIELD_ALARM 0x115 //屏蔽报警 +#define MINOR_ABNORMAL_ALARM 0x116 //故障报警 +#define MINOR_RESIDUAL_CURRENT_ALARM 0x117 //剩余电流报警 +#define MINOR_TEMPERATURE_ALARM 0x118 //温度报警 +#define MINOR_ARC_ALARM 0x119 //电弧报警 -#define MINOR_VCA_YARD_TARRY_ALARM_BEGIN 0x11a //ŷ糡ʼ -#define MINOR_VCA_YARD_TARRY_ALARM_END 0x11b //ŷ糡 -#define MINOR_VCA_KEY_PERSON_GET_UP_ALARM_BEGIN 0x11c //Ŀʼ -#define MINOR_VCA_KEY_PERSON_GET_UP_ALARM_END 0x11d //Ŀ -#define MINOR_VCA_SIT_QUIETLY_ALARM_BEGIN 0x11e //һʼ -#define MINOR_VCA_SIT_QUIETLY_ALARM_END 0x11f //һ -#define MINOR_VCA_STAND_UP_ALARM_BEGIN 0x120 //վʼ -#define MINOR_VCA_STAND_UP_ALARM_END 0x121 //վ -#define MINOR_VCA_REACH_HIGHT_ALARM_BEGIN 0x122 //ʸ߱ʼ -#define MINOR_VCA_REACH_HIGHT_ALARM_END 0x123 //ʸ߱ +#define MINOR_VCA_YARD_TARRY_ALARM_BEGIN 0x11a //放风场滞留报警开始 +#define MINOR_VCA_YARD_TARRY_ALARM_END 0x11b //放风场滞留报警结束 +#define MINOR_VCA_KEY_PERSON_GET_UP_ALARM_BEGIN 0x11c //目标起身报警开始 +#define MINOR_VCA_KEY_PERSON_GET_UP_ALARM_END 0x11d //目标起身报警结束 +#define MINOR_VCA_SIT_QUIETLY_ALARM_BEGIN 0x11e //一动不动报警开始 +#define MINOR_VCA_SIT_QUIETLY_ALARM_END 0x11f //一动不动报警结束 +#define MINOR_VCA_STAND_UP_ALARM_BEGIN 0x120 //站立报警开始 +#define MINOR_VCA_STAND_UP_ALARM_END 0x121 //站立报警结束 +#define MINOR_VCA_REACH_HIGHT_ALARM_BEGIN 0x122 //攀高报警开始 +#define MINOR_VCA_REACH_HIGHT_ALARM_END 0x123 //攀高报警结束 -#define MINOR_LFPD_ALARM_START 0x124 /*ƵԱⱨʼ*/ -#define MINOR_LFPD_ALARM_STOP 0x125 /*ƵԱⱨ*/ +#define MINOR_LFPD_ALARM_START 0x124 /*低频人员检测报警开始*/ +#define MINOR_LFPD_ALARM_STOP 0x125 /*低频人员检测报警结束*/ -#define MINOR_DREDGERDETECTION_ALARM 0x126// ɳⱨ -#define MINOR_STUDENT_BEHAVIOR_ALARM_BEGIN 0x127 //ѧΪʼ -#define MINOR_STUDENT_BEHAVIOR_ALARM_END 0x128 //ѧΪ -#define MINOR_VCA_ALARM_VEHICLEMONITOR 0x129 //(ڳһ⣨Ϣ־) -#define MINOR_WASTEGASDETECTION_ALARM 0x130// ŷʾ¼ϱ -#define MINOR_GREYSCALE_ALARM 0x131// Ҷȱ -#define MINOR_VIBRATION_DETECTION_ALARM_BEGIN 0x132 //ⱨʼ -#define MINOR_VIBRATION_DETECTION_ALARM_END 0x133 //ⱨ -#define MINOR_SMOKE_DETECT_ALARM_BEGIN 0x134 //̼ⱨʼ -#define MINOR_SMOKE_DETECT_ALARM_END 0x135 //̼ⱨ -#define MINOR_METHANE_CONCENTRATION_ALARM 0x136 //Ũ쳣¼ -#define MINOR_METHANE_LIGHTINTENSITY_ALARM 0x137 //ǿ쳣¼ -#define MINOR_SMOG_BEGIN 0x138 //ʼ -#define MINOR_SMOG_END 0x139 // -#define MINOR_VOCS_ALARM 0x140 //VOCs屨 +#define MINOR_DREDGERDETECTION_ALARM 0x126// 挖沙船检测报警 +#define MINOR_STUDENT_BEHAVIOR_ALARM_BEGIN 0x127 //课堂学生行为报警开始 +#define MINOR_STUDENT_BEHAVIOR_ALARM_END 0x128 //课堂学生行为报警结束 +#define MINOR_VCA_ALARM_VEHICLEMONITOR 0x129 //车辆布防报警(用于车辆布防第一次上来车辆检测(带车辆布防信息)的日志) +#define MINOR_WASTEGASDETECTION_ALARM 0x130// 废气排放显示事件上报 +#define MINOR_GREYSCALE_ALARM 0x131// 灰度报警 +#define MINOR_VIBRATION_DETECTION_ALARM_BEGIN 0x132 //振动侦测报警开始 +#define MINOR_VIBRATION_DETECTION_ALARM_END 0x133 //振动侦测报警结束 +#define MINOR_SMOKE_DETECT_ALARM_BEGIN 0x134 //抽烟检测报警开始 +#define MINOR_SMOKE_DETECT_ALARM_END 0x135 //抽烟检测报警结束 +#define MINOR_METHANE_CONCENTRATION_ALARM 0x136 //甲烷浓度异常事件 +#define MINOR_METHANE_LIGHTINTENSITY_ALARM 0x137 //甲烷光强异常事件 +#define MINOR_SMOG_BEGIN 0x138 //烟雾报警开始 +#define MINOR_SMOG_END 0x139 //烟雾报警结束 +#define MINOR_VOCS_ALARM 0x140 //VOCs气体报警 -//0x400-0x1000 Ž -#define MINOR_ALARMIN_SHORT_CIRCUIT 0x400 //· -#define MINOR_ALARMIN_BROKEN_CIRCUIT 0x401 //· -#define MINOR_ALARMIN_EXCEPTION 0x402 //쳣 -#define MINOR_ALARMIN_RESUME 0x403 //ָ -#define MINOR_HOST_DESMANTLE_ALARM 0x404 //豸𱨾 -#define MINOR_HOST_DESMANTLE_RESUME 0x405 //豸ָ -#define MINOR_CARD_READER_DESMANTLE_ALARM 0x406 //𱨾 -#define MINOR_CARD_READER_DESMANTLE_RESUME 0x407 //ָ -#define MINOR_CASE_SENSOR_ALARM 0x408 //¼뱨 -#define MINOR_CASE_SENSOR_RESUME 0x409 //¼ָ -#define MINOR_STRESS_ALARM 0x40a //вȱ -#define MINOR_OFFLINE_ECENT_NEARLY_FULL 0x40b //¼90% -#define MINOR_CARD_MAX_AUTHENTICATE_FAIL 0x40c //֤ʧܳα -#define MINOR_SD_CARD_FULL 0x40d //SD洢 -#define MINOR_LINKAGE_CAPTURE_PIC 0x40e //ץ¼ -#define MINOR_SECURITY_MODULE_DESMANTLE_ALARM 0x40f //ſذȫģ𱨾 -#define MINOR_SECURITY_MODULE_DESMANTLE_RESUME 0x410 //ſذȫģָ +//0x400-0x1000 门禁报警 +#define MINOR_ALARMIN_SHORT_CIRCUIT 0x400 //防区短路报警 +#define MINOR_ALARMIN_BROKEN_CIRCUIT 0x401 //防区断路报警 +#define MINOR_ALARMIN_EXCEPTION 0x402 //防区异常报警 +#define MINOR_ALARMIN_RESUME 0x403 //防区报警恢复 +#define MINOR_HOST_DESMANTLE_ALARM 0x404 //设备防拆报警 +#define MINOR_HOST_DESMANTLE_RESUME 0x405 //设备防拆恢复 +#define MINOR_CARD_READER_DESMANTLE_ALARM 0x406 //读卡器防拆报警 +#define MINOR_CARD_READER_DESMANTLE_RESUME 0x407 //读卡器防拆恢复 +#define MINOR_CASE_SENSOR_ALARM 0x408 //事件输入报警 +#define MINOR_CASE_SENSOR_RESUME 0x409 //事件输入恢复 +#define MINOR_STRESS_ALARM 0x40a //胁迫报警 +#define MINOR_OFFLINE_ECENT_NEARLY_FULL 0x40b //离线事件满90%报警 +#define MINOR_CARD_MAX_AUTHENTICATE_FAIL 0x40c //卡号认证失败超次报警 +#define MINOR_SD_CARD_FULL 0x40d //SD卡存储满报警 +#define MINOR_LINKAGE_CAPTURE_PIC 0x40e //联动抓拍事件报警 +#define MINOR_SECURITY_MODULE_DESMANTLE_ALARM 0x40f //门控安全模块防拆报警 +#define MINOR_SECURITY_MODULE_DESMANTLE_RESUME 0x410 //门控安全模块防拆恢复 -#define MINOR_POS_START_ALARM 0x411 //POS -#define MINOR_POS_END_ALARM 0x412 //POS -#define MINOR_FACE_IMAGE_QUALITY_LOW 0x413 //ͼʵ -#define MINOR_FINGE_RPRINT_QUALITY_LOW 0x414 //ָͼʵ -#define MINOR_FIRE_IMPORT_SHORT_CIRCUIT 0x415 //· -#define MINOR_FIRE_IMPORT_BROKEN_CIRCUIT 0x416 //· -#define MINOR_FIRE_IMPORT_RESUME 0x417 //ָ -#define MINOR_FIRE_BUTTON_TRIGGER 0x418 //ť -#define MINOR_FIRE_BUTTON_RESUME 0x419 //ťָ -#define MINOR_MAINTENANCE_BUTTON_TRIGGER 0x41a //άť -#define MINOR_MAINTENANCE_BUTTON_RESUME 0x41b //άťָ -#define MINOR_EMERGENCY_BUTTON_TRIGGER 0x41c //ť -#define MINOR_EMERGENCY_BUTTON_RESUME 0x41d //ťָ -#define MINOR_DISTRACT_CONTROLLER_ALARM 0x41e //ֿ𱨾 -#define MINOR_DISTRACT_CONTROLLER_RESUME 0x41f //ֿ𱨾ָ +#define MINOR_POS_START_ALARM 0x411 //POS开启 +#define MINOR_POS_END_ALARM 0x412 //POS结束 +#define MINOR_FACE_IMAGE_QUALITY_LOW 0x413 //人脸图像画质低 +#define MINOR_FINGE_RPRINT_QUALITY_LOW 0x414 //指纹图像画质低 +#define MINOR_FIRE_IMPORT_SHORT_CIRCUIT 0x415 //消防输入短路报警 +#define MINOR_FIRE_IMPORT_BROKEN_CIRCUIT 0x416 //消防输入断路报警 +#define MINOR_FIRE_IMPORT_RESUME 0x417 //消防输入恢复 +#define MINOR_FIRE_BUTTON_TRIGGER 0x418 //消防按钮触发 +#define MINOR_FIRE_BUTTON_RESUME 0x419 //消防按钮恢复 +#define MINOR_MAINTENANCE_BUTTON_TRIGGER 0x41a //维护按钮触发 +#define MINOR_MAINTENANCE_BUTTON_RESUME 0x41b //维护按钮恢复 +#define MINOR_EMERGENCY_BUTTON_TRIGGER 0x41c //紧急按钮触发 +#define MINOR_EMERGENCY_BUTTON_RESUME 0x41d //紧急按钮恢复 +#define MINOR_DISTRACT_CONTROLLER_ALARM 0x41e //分控器防拆报警 +#define MINOR_DISTRACT_CONTROLLER_RESUME 0x41f //分控器防拆报警恢复 -#define MINOR_PERSON_DENSITY_DETECTION_START 0x420 //Աܶȳֵʼ -#define MINOR_PERSON_DENSITY_DETECTION_END 0x421 //Աܶȳֵ +#define MINOR_PERSON_DENSITY_DETECTION_START 0x420 //人员密度超阈值报警开始 +#define MINOR_PERSON_DENSITY_DETECTION_END 0x421 //人员密度超阈值报警结束 -#define MINOR_CHANNEL_CONTROLLER_DESMANTLE_ALARM 0x422 //ͨ𱨾 -#define MINOR_CHANNEL_CONTROLLER_DESMANTLE_RESUME 0x423 //ͨ𱨾ָ -#define MINOR_CHANNEL_CONTROLLER_FIRE_IMPORT_ALARM 0x424 //ͨ뱨 -#define MINOR_CHANNEL_CONTROLLER_FIRE_IMPORT_RESUME 0x425 //ͨ뱨ָ +#define MINOR_CHANNEL_CONTROLLER_DESMANTLE_ALARM 0x422 //通道控制器防拆报警 +#define MINOR_CHANNEL_CONTROLLER_DESMANTLE_RESUME 0x423 //通道控制器防拆报警恢复 +#define MINOR_CHANNEL_CONTROLLER_FIRE_IMPORT_ALARM 0x424 //通道控制器消防输入报警 +#define MINOR_CHANNEL_CONTROLLER_FIRE_IMPORT_RESUME 0x425 //通道控制器消防输入报警恢复 -#define MINOR_HEART_RATE_ABNORMAL_BEGIN 0x426 //쳣ʼ -#define MINOR_HEART_RATE_ABNORMAL_END 0x427 //쳣 -#define MINOR_BLOOD_OXYGEN_ABNORMAL_BEGIN 0x428 //Ѫ쳣ʼ -#define MINOR_BLOOD_OXYGEN_ABNORMAL_END 0x429 //Ѫ쳣 -#define MINOR_SYSTOLIC_BLOOD_PRESSURE_ABNORMAL_BEGIN 0x42a //Ѫѹѹ쳣ʼ -#define MINOR_SYSTOLIC_BLOOD_PRESSURE_ABNORMAL_END 0x42b //Ѫѹѹ쳣 -#define MINOR_DIASTOLIC_BLOOD_PRESSURE_ABNORMAL_BEGIN 0x42c //Ѫѹѹ쳣ʼ -#define MINOR_DIASTOLIC_BLOOD_PRESSURE_ABNORMAL_END 0x42d //Ѫѹѹ쳣 -#define MINOR_VCA_LEAVE_POSITION_START 0x42e//ڼ⿪ʼ -#define MINOR_VCA_LEAVE_POSITION_STOP 0x42f//ڼ -#define MINOR_VCA_STOOODUP_START 0x430//⿪ʼ -#define MINOR_VCA_STOOODUP_STOP 0x431// -#define MINOR_VCA_PEOPLENUM_CHANGE_START 0x434//仯ʼ -#define MINOR_VCA_PEOPLENUM_CHANGE_STOP 0x435//仯 -#define MINOR_VCA_RUNNING_START 0x438//Աܿʼ -#define MINOR_VCA_RUNNING_STOP 0x439//Աܽ -#define MINOR_VCA_VIOLENT_MOTION_START 0x43a//˶ʼ -#define MINOR_VCA_VIOLENT_MOTION_STOP 0x43b//˶ -#define MINOR_VCA_FAIL_DOWN_START 0x43c//Աؿʼ -#define MINOR_VCA_FAIL_DOWN_STOP 0x43d//Աؽ -#define MINOR_VCA_RETENTION_START 0x43e//Աʼ -#define MINOR_VCA_RETENTION_STOP 0x43f//Ա +#define MINOR_HEART_RATE_ABNORMAL_BEGIN 0x426 //心率异常报警开始 +#define MINOR_HEART_RATE_ABNORMAL_END 0x427 //心率异常报警结束 +#define MINOR_BLOOD_OXYGEN_ABNORMAL_BEGIN 0x428 //血氧异常报警开始 +#define MINOR_BLOOD_OXYGEN_ABNORMAL_END 0x429 //血氧异常报警结束 +#define MINOR_SYSTOLIC_BLOOD_PRESSURE_ABNORMAL_BEGIN 0x42a //血压收缩压异常报警开始 +#define MINOR_SYSTOLIC_BLOOD_PRESSURE_ABNORMAL_END 0x42b //血压收缩压异常报警结束 +#define MINOR_DIASTOLIC_BLOOD_PRESSURE_ABNORMAL_BEGIN 0x42c //血压舒张压异常报警开始 +#define MINOR_DIASTOLIC_BLOOD_PRESSURE_ABNORMAL_END 0x42d //血压舒张压异常报警结束 +#define MINOR_VCA_LEAVE_POSITION_START 0x42e//离岗检测开始 +#define MINOR_VCA_LEAVE_POSITION_STOP 0x42f//离岗检测结束 +#define MINOR_VCA_STOOODUP_START 0x430//起立检测开始 +#define MINOR_VCA_STOOODUP_STOP 0x431//起立检测结束 +#define MINOR_VCA_PEOPLENUM_CHANGE_START 0x434//人数变化开始 +#define MINOR_VCA_PEOPLENUM_CHANGE_STOP 0x435//人数变化结束 +#define MINOR_VCA_RUNNING_START 0x438//人员奔跑开始 +#define MINOR_VCA_RUNNING_STOP 0x439//人员奔跑结束 +#define MINOR_VCA_VIOLENT_MOTION_START 0x43a//剧烈运动开始 +#define MINOR_VCA_VIOLENT_MOTION_STOP 0x43b//剧烈运动结束 +#define MINOR_VCA_FAIL_DOWN_START 0x43c//人员倒地开始 +#define MINOR_VCA_FAIL_DOWN_STOP 0x43d//人员倒地结束 +#define MINOR_VCA_RETENTION_START 0x43e//人员滞留开始 +#define MINOR_VCA_RETENTION_STOP 0x43f//人员滞留结束 -#define MINOR_PRINTER_OUT_OF_PAPER 0x440 //ӡȱֽ -#define MINOR_LEGAL_EVENT_NEARLY_FULL 0x442 //ߺϷ¼90% -#define MINOR_FIRE_IMPORT_ALARM 0x443 //뱨 -#define MINOR_TRANSACTION_RECORD_NEARLY_FULL 0x444 //׼¼90% +#define MINOR_PRINTER_OUT_OF_PAPER 0x440 //打印机缺纸报警 +#define MINOR_LEGAL_EVENT_NEARLY_FULL 0x442 //离线合法事件满90%报警 +#define MINOR_FIRE_IMPORT_ALARM 0x443 //消防输入报警 +#define MINOR_TRANSACTION_RECORD_NEARLY_FULL 0x444 //交易记录满90%报警 -#define MINOR_ALARM_CUSTOM1 0x900 //ŽԶ屨1 -#define MINOR_ALARM_CUSTOM2 0x901 //ŽԶ屨2 -#define MINOR_ALARM_CUSTOM3 0x902 //ŽԶ屨3 -#define MINOR_ALARM_CUSTOM4 0x903 //ŽԶ屨4 -#define MINOR_ALARM_CUSTOM5 0x904 //ŽԶ屨5 -#define MINOR_ALARM_CUSTOM6 0x905 //ŽԶ屨6 -#define MINOR_ALARM_CUSTOM7 0x906 //ŽԶ屨7 -#define MINOR_ALARM_CUSTOM8 0x907 //ŽԶ屨8 -#define MINOR_ALARM_CUSTOM9 0x908 //ŽԶ屨9 -#define MINOR_ALARM_CUSTOM10 0x909 //ŽԶ屨10 -#define MINOR_ALARM_CUSTOM11 0x90a //ŽԶ屨11 -#define MINOR_ALARM_CUSTOM12 0x90b //ŽԶ屨12 -#define MINOR_ALARM_CUSTOM13 0x90c //ŽԶ屨13 -#define MINOR_ALARM_CUSTOM14 0x90d //ŽԶ屨14 -#define MINOR_ALARM_CUSTOM15 0x90e //ŽԶ屨15 -#define MINOR_ALARM_CUSTOM16 0x90f //ŽԶ屨16 -#define MINOR_ALARM_CUSTOM17 0x910 //ŽԶ屨17 -#define MINOR_ALARM_CUSTOM18 0x911 //ŽԶ屨18 -#define MINOR_ALARM_CUSTOM19 0x912 //ŽԶ屨19 -#define MINOR_ALARM_CUSTOM20 0x913 //ŽԶ屨20 -#define MINOR_ALARM_CUSTOM21 0x914 //ŽԶ屨21 -#define MINOR_ALARM_CUSTOM22 0x915 //ŽԶ屨22 -#define MINOR_ALARM_CUSTOM23 0x916 //ŽԶ屨23 -#define MINOR_ALARM_CUSTOM24 0x917 //ŽԶ屨24 -#define MINOR_ALARM_CUSTOM25 0x918 //ŽԶ屨25 -#define MINOR_ALARM_CUSTOM26 0x919 //ŽԶ屨26 -#define MINOR_ALARM_CUSTOM27 0x91a //ŽԶ屨27 -#define MINOR_ALARM_CUSTOM28 0x91b //ŽԶ屨28 -#define MINOR_ALARM_CUSTOM29 0x91c //ŽԶ屨29 -#define MINOR_ALARM_CUSTOM30 0x91d //ŽԶ屨30 -#define MINOR_ALARM_CUSTOM31 0x91e //ŽԶ屨31 -#define MINOR_ALARM_CUSTOM32 0x91f //ŽԶ屨32 -#define MINOR_ALARM_CUSTOM33 0x920 //ŽԶ屨33 -#define MINOR_ALARM_CUSTOM34 0x921 //ŽԶ屨34 -#define MINOR_ALARM_CUSTOM35 0x922 //ŽԶ屨35 -#define MINOR_ALARM_CUSTOM36 0x923 //ŽԶ屨36 -#define MINOR_ALARM_CUSTOM37 0x924 //ŽԶ屨37 -#define MINOR_ALARM_CUSTOM38 0x925 //ŽԶ屨38 -#define MINOR_ALARM_CUSTOM39 0x926 //ŽԶ屨39 -#define MINOR_ALARM_CUSTOM40 0x927 //ŽԶ屨40 -#define MINOR_ALARM_CUSTOM41 0x928 //ŽԶ屨41 -#define MINOR_ALARM_CUSTOM42 0x929 //ŽԶ屨42 -#define MINOR_ALARM_CUSTOM43 0x92a //ŽԶ屨43 -#define MINOR_ALARM_CUSTOM44 0x92b //ŽԶ屨44 -#define MINOR_ALARM_CUSTOM45 0x92c //ŽԶ屨45 -#define MINOR_ALARM_CUSTOM46 0x92d //ŽԶ屨46 -#define MINOR_ALARM_CUSTOM47 0x92e //ŽԶ屨47 -#define MINOR_ALARM_CUSTOM48 0x92f //ŽԶ屨48 -#define MINOR_ALARM_CUSTOM49 0x930 //ŽԶ屨49 -#define MINOR_ALARM_CUSTOM50 0x931 //ŽԶ屨50 -#define MINOR_ALARM_CUSTOM51 0x932 //ŽԶ屨51 -#define MINOR_ALARM_CUSTOM52 0x933 //ŽԶ屨52 -#define MINOR_ALARM_CUSTOM53 0x934 //ŽԶ屨53 -#define MINOR_ALARM_CUSTOM54 0x935 //ŽԶ屨54 -#define MINOR_ALARM_CUSTOM55 0x936 //ŽԶ屨55 -#define MINOR_ALARM_CUSTOM56 0x937 //ŽԶ屨56 -#define MINOR_ALARM_CUSTOM57 0x938 //ŽԶ屨57 -#define MINOR_ALARM_CUSTOM58 0x939 //ŽԶ屨58 -#define MINOR_ALARM_CUSTOM59 0x93a //ŽԶ屨59 -#define MINOR_ALARM_CUSTOM60 0x93b //ŽԶ屨60 -#define MINOR_ALARM_CUSTOM61 0x93c //ŽԶ屨61 -#define MINOR_ALARM_CUSTOM62 0x93d //ŽԶ屨62 -#define MINOR_ALARM_CUSTOM63 0x93e //ŽԶ屨63 -#define MINOR_ALARM_CUSTOM64 0x93f //ŽԶ屨64 -#define MINOR_LOCK_HIJIACK_FINGER_ALARM 0x950 //ٳָƱ -#define MINOR_LOCK_HIJIACK_PASSWORD_ALARM 0x951 //ٳ뱨 -#define MINOR_LOCK_PRY_DOOR_ALARM 0x952 //ű -#define MINOR_LOCK_LOCKED_ALARM 0x953 // -#define MINOR_LOCK_BATTERLOW_ALARM 0x954 //͵ѹ -#define MINOR_LOCK_BLOCKLIST_DOOR_ALARM 0x955 //ֹ -#define MINOR_LOCK_OFFLINE_ALARM 0x956 //߱ -#define MINOR_LOCK_UNCLOSED_ALARM 0x957 //ڱ -#define MINOR_LOCK_NO_HOME_ALARM 0x958 //ûδؼұ -#define MINOR_LOCK_MAGNETOMETER_ALARM 0x959 //Ŵ̽ -#define MINOR_LOCK_IR_DETECTOR_ALARM 0x95a //̽ -#define MINOR_LOCK_FP_LOCKED_ALARM 0x95b //ָ -#define MINOR_LOCK_PASSWORD_LOCKED_ALARM 0x95c // -#define MINOR_LOCK_HIJIACK_ALARM 0x95d //ٳֱ -#define MINOR_DISTRACT_CONTROLLER_FIRE_IMPORT_SHORT_CIRCUIT 0x95e //ֿ· -#define MINOR_DISTRACT_CONTROLLER_FIRE_IMPORT_RESUME 0x95f //ָֿ +#define MINOR_ALARM_CUSTOM1 0x900 //门禁自定义报警1 +#define MINOR_ALARM_CUSTOM2 0x901 //门禁自定义报警2 +#define MINOR_ALARM_CUSTOM3 0x902 //门禁自定义报警3 +#define MINOR_ALARM_CUSTOM4 0x903 //门禁自定义报警4 +#define MINOR_ALARM_CUSTOM5 0x904 //门禁自定义报警5 +#define MINOR_ALARM_CUSTOM6 0x905 //门禁自定义报警6 +#define MINOR_ALARM_CUSTOM7 0x906 //门禁自定义报警7 +#define MINOR_ALARM_CUSTOM8 0x907 //门禁自定义报警8 +#define MINOR_ALARM_CUSTOM9 0x908 //门禁自定义报警9 +#define MINOR_ALARM_CUSTOM10 0x909 //门禁自定义报警10 +#define MINOR_ALARM_CUSTOM11 0x90a //门禁自定义报警11 +#define MINOR_ALARM_CUSTOM12 0x90b //门禁自定义报警12 +#define MINOR_ALARM_CUSTOM13 0x90c //门禁自定义报警13 +#define MINOR_ALARM_CUSTOM14 0x90d //门禁自定义报警14 +#define MINOR_ALARM_CUSTOM15 0x90e //门禁自定义报警15 +#define MINOR_ALARM_CUSTOM16 0x90f //门禁自定义报警16 +#define MINOR_ALARM_CUSTOM17 0x910 //门禁自定义报警17 +#define MINOR_ALARM_CUSTOM18 0x911 //门禁自定义报警18 +#define MINOR_ALARM_CUSTOM19 0x912 //门禁自定义报警19 +#define MINOR_ALARM_CUSTOM20 0x913 //门禁自定义报警20 +#define MINOR_ALARM_CUSTOM21 0x914 //门禁自定义报警21 +#define MINOR_ALARM_CUSTOM22 0x915 //门禁自定义报警22 +#define MINOR_ALARM_CUSTOM23 0x916 //门禁自定义报警23 +#define MINOR_ALARM_CUSTOM24 0x917 //门禁自定义报警24 +#define MINOR_ALARM_CUSTOM25 0x918 //门禁自定义报警25 +#define MINOR_ALARM_CUSTOM26 0x919 //门禁自定义报警26 +#define MINOR_ALARM_CUSTOM27 0x91a //门禁自定义报警27 +#define MINOR_ALARM_CUSTOM28 0x91b //门禁自定义报警28 +#define MINOR_ALARM_CUSTOM29 0x91c //门禁自定义报警29 +#define MINOR_ALARM_CUSTOM30 0x91d //门禁自定义报警30 +#define MINOR_ALARM_CUSTOM31 0x91e //门禁自定义报警31 +#define MINOR_ALARM_CUSTOM32 0x91f //门禁自定义报警32 +#define MINOR_ALARM_CUSTOM33 0x920 //门禁自定义报警33 +#define MINOR_ALARM_CUSTOM34 0x921 //门禁自定义报警34 +#define MINOR_ALARM_CUSTOM35 0x922 //门禁自定义报警35 +#define MINOR_ALARM_CUSTOM36 0x923 //门禁自定义报警36 +#define MINOR_ALARM_CUSTOM37 0x924 //门禁自定义报警37 +#define MINOR_ALARM_CUSTOM38 0x925 //门禁自定义报警38 +#define MINOR_ALARM_CUSTOM39 0x926 //门禁自定义报警39 +#define MINOR_ALARM_CUSTOM40 0x927 //门禁自定义报警40 +#define MINOR_ALARM_CUSTOM41 0x928 //门禁自定义报警41 +#define MINOR_ALARM_CUSTOM42 0x929 //门禁自定义报警42 +#define MINOR_ALARM_CUSTOM43 0x92a //门禁自定义报警43 +#define MINOR_ALARM_CUSTOM44 0x92b //门禁自定义报警44 +#define MINOR_ALARM_CUSTOM45 0x92c //门禁自定义报警45 +#define MINOR_ALARM_CUSTOM46 0x92d //门禁自定义报警46 +#define MINOR_ALARM_CUSTOM47 0x92e //门禁自定义报警47 +#define MINOR_ALARM_CUSTOM48 0x92f //门禁自定义报警48 +#define MINOR_ALARM_CUSTOM49 0x930 //门禁自定义报警49 +#define MINOR_ALARM_CUSTOM50 0x931 //门禁自定义报警50 +#define MINOR_ALARM_CUSTOM51 0x932 //门禁自定义报警51 +#define MINOR_ALARM_CUSTOM52 0x933 //门禁自定义报警52 +#define MINOR_ALARM_CUSTOM53 0x934 //门禁自定义报警53 +#define MINOR_ALARM_CUSTOM54 0x935 //门禁自定义报警54 +#define MINOR_ALARM_CUSTOM55 0x936 //门禁自定义报警55 +#define MINOR_ALARM_CUSTOM56 0x937 //门禁自定义报警56 +#define MINOR_ALARM_CUSTOM57 0x938 //门禁自定义报警57 +#define MINOR_ALARM_CUSTOM58 0x939 //门禁自定义报警58 +#define MINOR_ALARM_CUSTOM59 0x93a //门禁自定义报警59 +#define MINOR_ALARM_CUSTOM60 0x93b //门禁自定义报警60 +#define MINOR_ALARM_CUSTOM61 0x93c //门禁自定义报警61 +#define MINOR_ALARM_CUSTOM62 0x93d //门禁自定义报警62 +#define MINOR_ALARM_CUSTOM63 0x93e //门禁自定义报警63 +#define MINOR_ALARM_CUSTOM64 0x93f //门禁自定义报警64 +#define MINOR_LOCK_HIJIACK_FINGER_ALARM 0x950 //智能锁防劫持指纹报警 +#define MINOR_LOCK_HIJIACK_PASSWORD_ALARM 0x951 //智能锁防劫持密码报警 +#define MINOR_LOCK_PRY_DOOR_ALARM 0x952 //智能锁撬门报警 +#define MINOR_LOCK_LOCKED_ALARM 0x953 //智能锁锁定报警 +#define MINOR_LOCK_BATTERLOW_ALARM 0x954 //智能锁低电压报警 +#define MINOR_LOCK_BLOCKLIST_DOOR_ALARM 0x955 //智能锁禁止名单报警 +#define MINOR_LOCK_OFFLINE_ALARM 0x956 //智能锁离线报警 +#define MINOR_LOCK_UNCLOSED_ALARM 0x957 //智能锁虚掩报警 +#define MINOR_LOCK_NO_HOME_ALARM 0x958 //智能锁用户未回家报警 +#define MINOR_LOCK_MAGNETOMETER_ALARM 0x959 //门磁探测器报警 +#define MINOR_LOCK_IR_DETECTOR_ALARM 0x95a //红外探测器报警 +#define MINOR_LOCK_FP_LOCKED_ALARM 0x95b //指纹锁定报警 +#define MINOR_LOCK_PASSWORD_LOCKED_ALARM 0x95c //密码锁定报警 +#define MINOR_LOCK_HIJIACK_ALARM 0x95d //智能锁防劫持报警 +#define MINOR_DISTRACT_CONTROLLER_FIRE_IMPORT_SHORT_CIRCUIT 0x95e //分控制器消防输入短路报警 +#define MINOR_DISTRACT_CONTROLLER_FIRE_IMPORT_RESUME 0x95f //分控制器消防输入恢复 -//2018-04-23 ͨر־ -#define MINOR_ALARMHOST_SHORT_CIRCUIT 0x1001 //· -#define MINOR_ALARMHOST_BROKEN_CIRCUIT 0x1002 //· -#define MINOR_ALARMHOST_ALARM_RESET 0x1003 //λ -#define MINOR_ALARMHOST_ALARM_NORMAL 0x1004 //ָ -#define MINOR_ALARMHOST_PASSWORD_ERROR 0x1005 //3 -#define MINOR_ALARMHOST_ID_CARD_ILLEGALLY 0x1006 //ǷӦID -#define MINOR_ALARMHOST_KEYPAD_REMOVE 0x1007 //̷ -#define MINOR_ALARMHOST_KEYPAD_REMOVE_RESTORE 0x1008 //̷λ +//2018-04-23 通用物联网关报警日志类型 +#define MINOR_ALARMHOST_SHORT_CIRCUIT 0x1001 //短路报警 +#define MINOR_ALARMHOST_BROKEN_CIRCUIT 0x1002 //断路报警 +#define MINOR_ALARMHOST_ALARM_RESET 0x1003 //报警复位 +#define MINOR_ALARMHOST_ALARM_NORMAL 0x1004 //报警恢复正常 +#define MINOR_ALARMHOST_PASSWORD_ERROR 0x1005 //密码错误(连续3次输入密码错误) +#define MINOR_ALARMHOST_ID_CARD_ILLEGALLY 0x1006 //非法感应卡ID +#define MINOR_ALARMHOST_KEYPAD_REMOVE 0x1007 //键盘防拆 +#define MINOR_ALARMHOST_KEYPAD_REMOVE_RESTORE 0x1008 //键盘防拆复位 -#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT1 0x1011 //ģڱ1 -#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT2 0x1012 //ģڱ2 -#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT3 0x1013 //ģڱ3 -#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT4 0x1014 //ģڱ4 -#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT1 0x1015 //ģڱ1 -#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT2 0x1016 //ģڱ2 -#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT3 0x1017 //ģڱ3 -#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT4 0x1018 //ģڱ4 +#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT1 0x1011 //模拟量低于报警限1 +#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT2 0x1012 //模拟量低于报警限2 +#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT3 0x1013 //模拟量低于报警限3 +#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT4 0x1014 //模拟量低于报警限4 +#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT1 0x1015 //模拟量高于报警限1 +#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT2 0x1016 //模拟量高于报警限2 +#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT3 0x1017 //模拟量高于报警限3 +#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT4 0x1018 //模拟量高于报警限4 -#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_SUSPECT 0x1021 //˾ -#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_FIRE 0x1022 // -#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_URGENT 0x1023 // +#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_SUSPECT 0x1021 //软防区匪警 +#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_FIRE 0x1022 //软防区火警 +#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_URGENT 0x1023 //软防区紧急 -#define MINOR_UPS_ALARM 0x1028 //UPS -#define MINOR_ELECTRICITY_METER_ALARM 0x1029 //ܵ -#define MINOR_SWITCH_POWER_ALARM 0x1030 //صԴ -#define MINOR_GAS_DETECT_SYS_ALARM 0x1031 //ϵͳ -#define MINOR_TRANSFORMER_TEMPRATURE_ALARM 0x1032 //Ա -#define MINOR_TEMP_HUMI_ALARM 0x1033 //ʪȴ -#define MINOR_UPS_ALARM_RESTORE 0x1034 //UPSָ -#define MINOR_ELECTRICITY_METER_ALARM_RESTORE 0x1035 //ָܵ -#define MINOR_SWITCH_POWER_ALARM_RESTORE 0x1036 //صԴָ -#define MINOR_GAS_DETECT_SYS_ALARM_RESTORE 0x1037 //ϵͳָ -#define MINOR_TRANSFORMER_TEMPRATURE_ALARM_RESTORE 0x1038 //Աָ -#define MINOR_TEMP_HUMI_ALARM_RESTORE 0x1039 //ʪȴָ -#define MINOR_WATER_LEVEL_SENSOR_ALARM 0x1040 //ˮλ -#define MINOR_WATER_LEVEL_SENSOR_ALARM_RESTORE 0x1041 //ˮλָ -#define MINOR_DUST_NOISE_ALARM 0x1042 //ﳾ -#define MINOR_DUST_NOISE_ALARM_RESTORE 0x1043 //ﳾָ -#define MINOR_ENVIRONMENTAL_LOGGER_ALARM 0x1044 //ɼDZ -#define MINOR_ENVIRONMENTAL_LOGGER_ALARM_RESTORE 0x1045 //ɼDZָ +#define MINOR_UPS_ALARM 0x1028 //UPS报警 +#define MINOR_ELECTRICITY_METER_ALARM 0x1029 //智能电表报警 +#define MINOR_SWITCH_POWER_ALARM 0x1030 //开关电源报警 +#define MINOR_GAS_DETECT_SYS_ALARM 0x1031 //气体检测系统报警 +#define MINOR_TRANSFORMER_TEMPRATURE_ALARM 0x1032 //变电器温显表报警 +#define MINOR_TEMP_HUMI_ALARM 0x1033 //温湿度传感器报警 +#define MINOR_UPS_ALARM_RESTORE 0x1034 //UPS报警恢复 +#define MINOR_ELECTRICITY_METER_ALARM_RESTORE 0x1035 //智能电表报警恢复 +#define MINOR_SWITCH_POWER_ALARM_RESTORE 0x1036 //开关电源报警恢复 +#define MINOR_GAS_DETECT_SYS_ALARM_RESTORE 0x1037 //气体检测系统报警恢复 +#define MINOR_TRANSFORMER_TEMPRATURE_ALARM_RESTORE 0x1038 //变电器温显表报警恢复 +#define MINOR_TEMP_HUMI_ALARM_RESTORE 0x1039 //温湿度传感器报警恢复 +#define MINOR_WATER_LEVEL_SENSOR_ALARM 0x1040 //水位传感器报警 +#define MINOR_WATER_LEVEL_SENSOR_ALARM_RESTORE 0x1041 //水位传感器报警恢复 +#define MINOR_DUST_NOISE_ALARM 0x1042 //扬尘噪声传感器报警 +#define MINOR_DUST_NOISE_ALARM_RESTORE 0x1043 //扬尘噪声传感器报警恢复 +#define MINOR_ENVIRONMENTAL_LOGGER_ALARM 0x1044 //环境采集仪报警 +#define MINOR_ENVIRONMENTAL_LOGGER_ALARM_RESTORE 0x1045 //环境采集仪报警恢复 -#define MINOR_TRIGGER_TAMPER 0x1046 //̽ -#define MINOR_TRIGGER_TAMPER_RESTORE 0x1047 //ָ̽ -#define MINOR_EMERGENCY_CALL_HELP_ALARM 0x1048 // -#define MINOR_EMERGENCY_CALL_HELP_ALARM_RESTORE 0x1049 //ָ -#define MINOR_CONSULTING_ALARM 0x1050 //ҵѯ -#define MINOR_CONSULTING_ALARM_RESTORE 0x1051 //ҵѯָ -#define MINOR_ALARMHOST_ZONE_MODULE_REMOVE 0x1052 //ģ -#define MINOR_ALARMHOST_ZONE_MODULE_RESET 0x1053 //ģλ +#define MINOR_TRIGGER_TAMPER 0x1046 //探测器防拆 +#define MINOR_TRIGGER_TAMPER_RESTORE 0x1047 //探测器防拆恢复 +#define MINOR_EMERGENCY_CALL_HELP_ALARM 0x1048 //紧急呼叫求助报警 +#define MINOR_EMERGENCY_CALL_HELP_ALARM_RESTORE 0x1049 //紧急呼叫求助报警恢复 +#define MINOR_CONSULTING_ALARM 0x1050 //业务咨询报警 +#define MINOR_CONSULTING_ALARM_RESTORE 0x1051 //业务咨询报警恢复 +#define MINOR_ALARMHOST_ZONE_MODULE_REMOVE 0x1052 //防区模块防拆 +#define MINOR_ALARMHOST_ZONE_MODULE_RESET 0x1053 //防区模块防拆复位 -#define MINOR_ALARMHOST_ALARM_WIND_SPEED_ALARM 0x1054 //ٴ澯 -#define MINOR_ALARMHOST_ALARM_WIND_SPEED_ALARM_RESTORE 0x1055 //ٴ澯ָ -#define MINOR_ALARMHOST_ALARM_GENERATE_OUTPUT_ALARM 0x1056 //ͨչģ澯 -#define MINOR_ALARMHOST_ALARM_GENERATE_OUTPUT_RESTORE 0x1057 //ͨչģ澯ָ -#define MINOR_ALARMHOST_ALARM_SOAK_ALARM 0x1058 //ˮ澯 -#define MINOR_ALARMHOST_ALARM_SOAK_ALARM_RESTORE 0x1059 //ˮ澯ָ -#define MINOR_ALARMHOST_ALARM_SOLAR_POWER_ALARM 0x1060 //̫ܴ澯 -#define MINOR_ALARMHOST_ALARM_SOLAR_POWER_ALARM_RESTORE 0x1061 //̫ܴ澯ָ -#define MINOR_ALARMHOST_ALARM_SF6_ALARM 0x1062 //SF6澯 -#define MINOR_ALARMHOST_ALARM_SF6_ALARM_RESTORE 0x1063 //SF6澯ָ -#define MINOR_ALARMHOST_ALARM_WEIGHT_ALARM 0x1064 //Ǹ澯 -#define MINOR_ALARMHOST_ALARM_WEIGHT_ALARM_RESTORE 0x1065 //Ǹ澯ָ -#define MINOR_ALARMHOST_ALARM_WEATHER_ALARM 0x1066 //ɼϵͳ澯 -#define MINOR_ALARMHOST_ALARM_WEATHER_ALARM_RESTORE 0x1067 //ɼϵͳ澯ָ -#define MINOR_ALARMHOST_ALARM_FUEL_GAS_ALARM 0x1068 //ȼʾϵͳ澯 -#define MINOR_ALARMHOST_ALARM_FUEL_GAS_ALARM_RESTORE 0x1069 //ȼʾϵͳ澯ָ -#define MINOR_ALARMHOST_ALARM_FIRE_ALARM 0x1070 //ֱϵͳ澯 -#define MINOR_ALARMHOST_ALARM_FIRE_ALARM_RESTORE 0x1071 //ֱϵͳ澯ָ -#define MINOR_ALARMHOST_WIRELESS_OUTPUT_MODULE_REMOVE 0x1072 //ģ -#define MINOR_ALARMHOST_WIRELESS_OUTPUT_MODULE_RESET 0x1073 //ģλ -#define MINOR_ALARMHOST_WIRELESS_REPEATER_MODULE_REMOVE 0x1074 //м +#define MINOR_ALARMHOST_ALARM_WIND_SPEED_ALARM 0x1054 //风速传感器告警 +#define MINOR_ALARMHOST_ALARM_WIND_SPEED_ALARM_RESTORE 0x1055 //风速传感器告警恢复 +#define MINOR_ALARMHOST_ALARM_GENERATE_OUTPUT_ALARM 0x1056 //通用扩展输出模块告警 +#define MINOR_ALARMHOST_ALARM_GENERATE_OUTPUT_RESTORE 0x1057 //通用扩展输出模块告警恢复 +#define MINOR_ALARMHOST_ALARM_SOAK_ALARM 0x1058 //水浸传感器告警 +#define MINOR_ALARMHOST_ALARM_SOAK_ALARM_RESTORE 0x1059 //水浸传感器告警恢复 +#define MINOR_ALARMHOST_ALARM_SOLAR_POWER_ALARM 0x1060 //太阳能传感器告警 +#define MINOR_ALARMHOST_ALARM_SOLAR_POWER_ALARM_RESTORE 0x1061 //太阳能传感器告警恢复 +#define MINOR_ALARMHOST_ALARM_SF6_ALARM 0x1062 //SF6报警主机告警 +#define MINOR_ALARMHOST_ALARM_SF6_ALARM_RESTORE 0x1063 //SF6报警主机告警恢复 +#define MINOR_ALARMHOST_ALARM_WEIGHT_ALARM 0x1064 //称重仪告警 +#define MINOR_ALARMHOST_ALARM_WEIGHT_ALARM_RESTORE 0x1065 //称重仪告警恢复 +#define MINOR_ALARMHOST_ALARM_WEATHER_ALARM 0x1066 //气象采集系统告警 +#define MINOR_ALARMHOST_ALARM_WEATHER_ALARM_RESTORE 0x1067 //气象采集系统告警恢复 +#define MINOR_ALARMHOST_ALARM_FUEL_GAS_ALARM 0x1068 //燃气显示系统告警 +#define MINOR_ALARMHOST_ALARM_FUEL_GAS_ALARM_RESTORE 0x1069 //燃气显示系统告警恢复 +#define MINOR_ALARMHOST_ALARM_FIRE_ALARM 0x1070 //火灾报警系统告警 +#define MINOR_ALARMHOST_ALARM_FIRE_ALARM_RESTORE 0x1071 //火灾报警系统告警恢复 +#define MINOR_ALARMHOST_WIRELESS_OUTPUT_MODULE_REMOVE 0x1072 //无线输出模块防拆 +#define MINOR_ALARMHOST_WIRELESS_OUTPUT_MODULE_RESET 0x1073 //无线输出模块防拆复位 +#define MINOR_ALARMHOST_WIRELESS_REPEATER_MODULE_REMOVE 0x1074 //无线中继器防拆 -#define MINOR_ALARMHOST_WIRELESS_SIREN_MODULE_REMOVE 0x1075 //߾ŷ -#define MINOR_ALARMHOST_WIRELESS_SIREN_MODULE_RESET 0x1076 //߾ŷλ +#define MINOR_ALARMHOST_WIRELESS_SIREN_MODULE_REMOVE 0x1075 //无线警号防拆 +#define MINOR_ALARMHOST_WIRELESS_SIREN_MODULE_RESET 0x1076 //无线警号防拆复位 -#define MINOR_RS485_DEV_ALARM 0x1077 //RS485豸豸δ֪豸 -#define MINOR_RS485_DEV_RESTORE 0x1078 //RS485豸ָ豸δ֪豸 -#define MINOR_ALARMHOST_ALARM_HOST_ALARM 0x1079 // -#define MINOR_ALARMHOST_ALARM_HOST_RESTORE 0x107a //ָ +#define MINOR_RS485_DEV_ALARM 0x1077 //RS485外接设备报警(针对设备类型未知的设备) +#define MINOR_RS485_DEV_RESTORE 0x1078 //RS485外接设备报警恢复(针对设备类型未知的设备) +#define MINOR_ALARMHOST_ALARM_HOST_ALARM 0x1079 //消防主机报警 +#define MINOR_ALARMHOST_ALARM_HOST_RESTORE 0x107a //消防主机报警恢复 -#define MINOR_AIR_CONDITION_DEV_ALARM 0x107b //յ -#define MINOR_AIR_CONDITION_DEV_RESTORE 0x107c //յָ +#define MINOR_AIR_CONDITION_DEV_ALARM 0x107b //空调控制器报警 +#define MINOR_AIR_CONDITION_DEV_RESTORE 0x107c //空调控制器报警恢复 -#define MINOR_ALARMHOST_WIRELESS_REPEATER_MODULE_RESET 0x107d //мλ +#define MINOR_ALARMHOST_WIRELESS_REPEATER_MODULE_RESET 0x107d //无线中继器防拆复位 -#define MINOR_ALARM_ELEVATOR_BREAKDOWN 0x107e//ݹ -#define MINOR_WATER_PRESSURE_SENSOR_ALARM 0x107f //ˮѹ -#define MINOR_FLOW_SENSOR_ALARM 0x1080 // -#define MINOR_SENSOR_LINKAGE_ALARM 0x1081 // -#define MINOR_SENSOR_LINKAGE_ALARM_RESTORE 0x1082 //ָ -#define MINOR_SHELF_ABNORMAL_ALARM 0x1083 //쳣 +#define MINOR_ALARM_ELEVATOR_BREAKDOWN 0x107e//电梯故障 +#define MINOR_WATER_PRESSURE_SENSOR_ALARM 0x107f //水压传感器报警 +#define MINOR_FLOW_SENSOR_ALARM 0x1080 //流量传感器报警 +#define MINOR_SENSOR_LINKAGE_ALARM 0x1081 //传感器联动报警 +#define MINOR_SENSOR_LINKAGE_ALARM_RESTORE 0x1082 //传感器联动报警恢复 +#define MINOR_SHELF_ABNORMAL_ALARM 0x1083 //货架异常报警 -//LED 0x1201 ~ 0x1300 -#define MINOR_SYSTEM_CHECK_ALARM 0x1201 //ϵͳⱨ +//LED报警次类型 0x1201 ~ 0x1300 +#define MINOR_SYSTEM_CHECK_ALARM 0x1201 //系统检测报警 -/* 쳣 */ -// +/* 异常 */ +//主类型 #define MAJOR_EXCEPTION 0x2 -// -#define MINOR_SUBSYSTEM_ERROR 0x0a /* ϵͳ쳣 */ -#define MINOR_RAID_ERROR 0x20 /* 쳣 */ -#define MINOR_VI_LOST 0x21 /* ƵźŶʧ */ -#define MINOR_ILLEGAL_ACCESS 0x22 /* Ƿ */ -#define MINOR_HD_FULL 0x23 /* Ӳ */ -#define MINOR_HD_ERROR 0x24 /* Ӳ̴ */ -#define MINOR_DCD_LOST 0x25 /* MODEM (ʹ) */ -#define MINOR_IP_CONFLICT 0x26 /* IPַͻ */ -#define MINOR_NET_BROKEN 0x27 /* Ͽ*/ -#define MINOR_REC_ERROR 0x28 /* ¼ */ -#define MINOR_IPC_NO_LINK 0x29 /* IPC쳣 */ -#define MINOR_VI_EXCEPTION 0x2a /* Ƶ쳣(ֻģͨ) */ -#define MINOR_IPC_IP_CONFLICT 0x2b /*ipc ip ַ ͻ*/ -#define MINOR_SENCE_EXCEPTION 0x2c // 쳣 +//次类型 +#define MINOR_SUBSYSTEM_ERROR 0x0a /* 子系统异常 */ +#define MINOR_RAID_ERROR 0x20 /* 阵列异常 */ +#define MINOR_VI_LOST 0x21 /* 视频信号丢失 */ +#define MINOR_ILLEGAL_ACCESS 0x22 /* 非法访问 */ +#define MINOR_HD_FULL 0x23 /* 硬盘满 */ +#define MINOR_HD_ERROR 0x24 /* 硬盘错误 */ +#define MINOR_DCD_LOST 0x25 /* MODEM 掉线(保留不使用) */ +#define MINOR_IP_CONFLICT 0x26 /* IP地址冲突 */ +#define MINOR_NET_BROKEN 0x27 /* 网络断开*/ +#define MINOR_REC_ERROR 0x28 /* 录像出错 */ +#define MINOR_IPC_NO_LINK 0x29 /* IPC连接异常 */ +#define MINOR_VI_EXCEPTION 0x2a /* 视频输入异常(只针对模拟通道) */ +#define MINOR_IPC_IP_CONFLICT 0x2b /*ipc ip 地址 冲突*/ +#define MINOR_SENCE_EXCEPTION 0x2c // 场景异常 -#define MINOR_PIC_REC_ERROR 0x2d /* ץͼ--ȡͼƬļʧ*/ -#define MINOR_VI_MISMATCH 0x2e /* Ƶʽƥ*/ -#define MINOR_RESOLUTION_MISMATCH 0x2f /*ǰ/¼ֱʲƥ */ +#define MINOR_PIC_REC_ERROR 0x2d /* 抓图出错--获取图片文件失败*/ +#define MINOR_VI_MISMATCH 0x2e /* 视频制式不匹配*/ +#define MINOR_RESOLUTION_MISMATCH 0x2f /*前端/录像分辨率不匹配 */ -//2009-12-16 Ƶۺƽ̨־ -#define MINOR_FANABNORMAL 0x31 /* Ƶۺƽ̨״̬쳣 */ -#define MINOR_FANRESUME 0x32 /* Ƶۺƽ̨״ָ̬ */ -#define MINOR_SUBSYSTEM_ABNORMALREBOOT 0x33 /* Ƶۺƽ̨6467쳣 */ -#define MINOR_MATRIX_STARTBUZZER 0x34 /* Ƶۺƽ̨dm6467쳣 */ +//2009-12-16 增加视频综合平台日志类型 +#define MINOR_FANABNORMAL 0x31 /* 视频综合平台:风扇状态异常 */ +#define MINOR_FANRESUME 0x32 /* 视频综合平台:风扇状态恢复正常 */ +#define MINOR_SUBSYSTEM_ABNORMALREBOOT 0x33 /* 视频综合平台:6467异常重启 */ +#define MINOR_MATRIX_STARTBUZZER 0x34 /* 视频综合平台:dm6467异常,启动蜂鸣器 */ -//2010-01-22 Ƶۺƽ̨쳣־ -#define MINOR_NET_ABNORMAL 0x35 /*״̬쳣*/ -#define MINOR_MEM_ABNORMAL 0x36 /*ڴ״̬쳣*/ -#define MINOR_FILE_ABNORMAL 0x37 /*ļ״̬쳣*/ -#define MINOR_PANEL_ABNORMAL 0x38 /*ǰ쳣*/ -#define MINOR_PANEL_RESUME 0x39 /*ǰָ*/ -#define MINOR_RS485_DEVICE_ABNORMAL 0x3a /*RS485״̬쳣*/ -#define MINOR_RS485_DEVICE_REVERT 0x3b /*RS485״̬쳣ָ*/ +//2010-01-22 增加视频综合平台异常日志次类型 +#define MINOR_NET_ABNORMAL 0x35 /*网络状态异常*/ +#define MINOR_MEM_ABNORMAL 0x36 /*内存状态异常*/ +#define MINOR_FILE_ABNORMAL 0x37 /*文件状态异常*/ +#define MINOR_PANEL_ABNORMAL 0x38 /*前面板连接异常*/ +#define MINOR_PANEL_RESUME 0x39 /*前面板恢复正常*/ +#define MINOR_RS485_DEVICE_ABNORMAL 0x3a /*RS485连接状态异常*/ +#define MINOR_RS485_DEVICE_REVERT 0x3b /*RS485连接状态异常恢复*/ -//2012-2-18 Ӵ쳣־ -#define MINOR_SCREEN_SUBSYSTEM_ABNORMALREBOOT 0x3c //Ӱ쳣 -#define MINOR_SCREEN_SUBSYSTEM_ABNORMALINSERT 0x3d //Ӱ -#define MINOR_SCREEN_SUBSYSTEM_ABNORMALPULLOUT 0x3e //Ӱγ -#define MINOR_SCREEN_ABNARMALTEMPERATURE 0x3f //¶쳣 -//2012-07-26 Ƶۺƽ̨v2.1 -#define MINOR_HIGH_TEMPERATURE_PROTECT 0x40 //Ӱȱ +//2012-2-18 增加大屏控制器异常日志次类型 +#define MINOR_SCREEN_SUBSYSTEM_ABNORMALREBOOT 0x3c //子板异常启动 +#define MINOR_SCREEN_SUBSYSTEM_ABNORMALINSERT 0x3d //子板插入 +#define MINOR_SCREEN_SUBSYSTEM_ABNORMALPULLOUT 0x3e //子板拔出 +#define MINOR_SCREEN_ABNARMALTEMPERATURE 0x3f //温度异常 +//2012-07-26 视频综合平台v2.1 +#define MINOR_HIGH_TEMPERATURE_PROTECT 0x40 //子板过热保护 //Netra 2.2.2 -#define MINOR_RECORD_OVERFLOW 0x41 /**/ -#define MINOR_DSP_ABNORMAL 0x42 //DSP쳣 +#define MINOR_RECORD_OVERFLOW 0x41 /*缓冲区溢出*/ +#define MINOR_DSP_ABNORMAL 0x42 //DSP异常 //Netra 3.0.0 -#define MINOR_ANR_RECORD_FAIED 0x43 /*ANR¼ʧ*/ -#define MINOR_SPARE_WORK_DEVICE_EXCEPT 0x44 /*ȱ豸쳣*/ -#define MINOR_START_IPC_MAS_FAILED 0x45 /*IPC MASʧ*/ -//256·NVR -#define MINOR_IPCM_CRASH 0x46 /*IPCM쳣*/ -#define MINOR_POE_POWER_EXCEPTION 0x47 /*POE 쳣*/ -#define MINOR_UPLOAD_DATA_CS_EXCEPTION 0x48 //ƴ洢ϴʧ/ -#define MINOR_DIAL_EXCEPTION 0x49 /*쳣*/ -#define MINOR_DEV_EXCEPTION_OFFLINE 0x50 //豸쳣 -#define MINOR_UPGRADEFAIL 0x51 //Զ豸ʧ -#define MINOR_AI_LOST 0x52 /* ƵźŶʧ */ -#define MINOR_SYNC_IPC_PASSWD 0x53 /* ͬIPC쳣 */ -#define MINOR_EZVIZ_OFFLINE 0x54 /* өʯ쳣*/ -#define MINOR_VQD_ABNORMAL 0x55 //VQD쳣 -#define MINOR_ACCESSORIES_PLATE 0x57 //쳣 -#define MINOR_KMS_EXPAMSION_DISK_LOST 0x58 // KMS̶ʧ -#define MINOR_ABNORMAL_PORT 0x59 // ˿쳣 -#define MINOR_CAMERA_ANGLE_ANOMALY 0x60// ӽ쳣 -#define MINOR_DATA_DISK_ERROE 0x61// ̴ -#define MINOR_INTELLIGENT_SYSTEM_RUNNING_ERROR 0x62// ϵͳ쳣 -#define MINOR_FACESNAP_RESOLUTION_OVERFLOW 0x63// Ŀץֱʳ -#define MINOR_SMD_RESOLUTION_OVERFLOW 0x64// SMDֱʳ -#define MINOR_AUDIO_LOSS_EXCEPTION 0x65// Ƶʧ쳣 -#define MINOR_SAFETY_HELMET_EXCEPTION 0x66 //δȫñ쳣 -#define MINOR_VCA_PIC_LENGTH_OVERFLOW 0x67 // VCAͼƬȹ糬2MСͼƬ -#define MINOR_FACE_MODEL_EXCEPTION 0x68// ģͬ쳣 -#define MINOR_SSD_EXCEPTION 0x69 // SSD쳣 -//NVRȺ -#define MINOR_CLUSTER_DEVICE_OFFLINE 0x70 // Ⱥ豸 -#define MINOR_CLUSTER_CONFIG_FAILED 0x71 // Ⱥ豸ʧ -#define MINOR_CLUSTER_DISASTER_TOLERANCE_EXCEPT 0x72 // Ⱥ쳣:ȺCMѡʧ,Ⱥ洢ڲ,Ⱥ,ȺͨԴ,Ⱥ豸 -#define MINOR_CLUSTER_STORFULL_EXCEPTION 0x73 //ȺӲ -#define MINOR_CLUSTER_VERSION_EXCEPTION 0x74 //Ⱥ汾쳣 -#define MINOR_CLUSTER_OFFLINENODE_EXCEPTION 0x75 //Ⱥ -#define MINOR_CLUSTER_RECORDCYCLE_EXCEPTION 0x76 //Ⱥ¼ڲ -#define MINOR_CLUSTER_IPCTRANSFER_EXCEPTION 0x77 //ȺIPCǨʧ -#define MINOR_CLUSTER_IPCONFLICT_EXCEPTION 0x78 // ȺIPͻ¼CMIPַ +#define MINOR_ANR_RECORD_FAIED 0x43 /*ANR录像失败*/ +#define MINOR_SPARE_WORK_DEVICE_EXCEPT 0x44 /*热备设备工作机异常*/ +#define MINOR_START_IPC_MAS_FAILED 0x45 /*开启IPC MAS失败*/ +//256路NVR +#define MINOR_IPCM_CRASH 0x46 /*IPCM异常重启*/ +#define MINOR_POE_POWER_EXCEPTION 0x47 /*POE 供电异常*/ +#define MINOR_UPLOAD_DATA_CS_EXCEPTION 0x48 //云存储数据上传失败/ +#define MINOR_DIAL_EXCEPTION 0x49 /*拨号异常*/ +#define MINOR_DEV_EXCEPTION_OFFLINE 0x50 //设备异常下线 +#define MINOR_UPGRADEFAIL 0x51 //远程升级设备失败 +#define MINOR_AI_LOST 0x52 /* 音频信号丢失 */ +#define MINOR_SYNC_IPC_PASSWD 0x53 /* 同步IPC密码异常 */ +#define MINOR_EZVIZ_OFFLINE 0x54 /* 萤石下线异常*/ +#define MINOR_VQD_ABNORMAL 0x55 //VQD异常 +#define MINOR_ACCESSORIES_PLATE 0x57 //配件板异常 +#define MINOR_KMS_EXPAMSION_DISK_LOST 0x58 // KMS扩容盘丢失 +#define MINOR_ABNORMAL_PORT 0x59 // 端口异常 +#define MINOR_CAMERA_ANGLE_ANOMALY 0x60// 相机视角异常 +#define MINOR_DATA_DISK_ERROE 0x61// 数据盘错误 +#define MINOR_INTELLIGENT_SYSTEM_RUNNING_ERROR 0x62// 智能系统运行异常 +#define MINOR_FACESNAP_RESOLUTION_OVERFLOW 0x63// 目标抓拍码流分辨率超限 +#define MINOR_SMD_RESOLUTION_OVERFLOW 0x64// SMD码流分辨率超限 +#define MINOR_AUDIO_LOSS_EXCEPTION 0x65// 音频丢失异常 +#define MINOR_SAFETY_HELMET_EXCEPTION 0x66 //未佩戴安全帽检测异常 +#define MINOR_VCA_PIC_LENGTH_OVERFLOW 0x67 // VCA图片长度过长(例如超过2M大小的图片) +#define MINOR_FACE_MODEL_EXCEPTION 0x68// 人脸库模型同步异常 +#define MINOR_SSD_EXCEPTION 0x69 // SSD异常 +//NVR集群 +#define MINOR_CLUSTER_DEVICE_OFFLINE 0x70 // 集群内设备下线 +#define MINOR_CLUSTER_CONFIG_FAILED 0x71 // 集群内设备配置失败 +#define MINOR_CLUSTER_DISASTER_TOLERANCE_EXCEPT 0x72 // 集群容灾异常:集群CM选举失败,集群存储周期不足,集群带宽不足,集群通道资源不足,集群设备不足等 +#define MINOR_CLUSTER_STORFULL_EXCEPTION 0x73 //集群硬盘满 +#define MINOR_CLUSTER_VERSION_EXCEPTION 0x74 //集群版本异常 +#define MINOR_CLUSTER_OFFLINENODE_EXCEPTION 0x75 //集群掉线数超限 +#define MINOR_CLUSTER_RECORDCYCLE_EXCEPTION 0x76 //集群录像周期不足 +#define MINOR_CLUSTER_IPCTRANSFER_EXCEPTION 0x77 //集群IPC迁移失败 +#define MINOR_CLUSTER_IPCONFLICT_EXCEPTION 0x78 // 集群IP冲突,记录CM的IP地址 -#define MINOR_GET_SUB_STREAM_FAILURE 0x79//ȡʧ -#define MINOR_HDD_SHM_DETECT_EXCEPTION 0x7a//ӲSHM쳣 -#define MINOR_DEVICE_FORTIFY_FAILURE 0x7b//ǰ豸ʧ -#define MINOR_EVENT_UPLOAD_EXCEPTION 0x7c //¼쳣豸ϴ¼ʧܻ߶ˣ +#define MINOR_GET_SUB_STREAM_FAILURE 0x79//子码流取流失败 +#define MINOR_HDD_SHM_DETECT_EXCEPTION 0x7a//硬盘SHM检测异常 +#define MINOR_DEVICE_FORTIFY_FAILURE 0x7b//前端设备报警布防失败 +#define MINOR_EVENT_UPLOAD_EXCEPTION 0x7c //事件发送异常(设备上传事件失败或者丢弃了) -#define MINOR_LORA_EXCEPTION 0x7d//LoRa쳣 -#define MINOR_AK_OR_SK_IS_EMPTY 0x7e//ƴ洢Ϊ +#define MINOR_LORA_EXCEPTION 0x7d//LoRa异常 +#define MINOR_AK_OR_SK_IS_EMPTY 0x7e//云存储密码或加密密码为空 -#define MINOR_HIGH_HD_TEMPERATURE 0x80 /*Ӳ¶ȹ*/ -#define MINOR_LOW_HD_TEMPERATURE 0x81 /*Ӳ¶ȹ*/ -#define MINOR_HD_IMPACT 0x82 /*Ӳܵ*/ -#define MINOR_HD_BAD_BLOCK 0x83 /*Ӳֻ̳*/ -#define MINOR_SEVERE_HD_FAILURE 0x84 /*Ӳع*/ -#define MINOR_RELEASE_FAILED 0x85 //Ϣʧ -#define MINOR_PORT_CONFLICT 0x86 //˿ڳͻ -#define MINOR_MODULE_STARTUP_FAILED 0x87 //ģʧ -#define MINIOR_VCA_RUNNING_EXCEPTION 0x88 //ܰ쳣 +#define MINOR_HIGH_HD_TEMPERATURE 0x80 /*硬盘温度过高*/ +#define MINOR_LOW_HD_TEMPERATURE 0x81 /*硬盘温度过低*/ +#define MINOR_HD_IMPACT 0x82 /*硬盘受到冲击*/ +#define MINOR_HD_BAD_BLOCK 0x83 /*硬盘出现坏块*/ +#define MINOR_SEVERE_HD_FAILURE 0x84 /*硬盘严重故障*/ +#define MINOR_RELEASE_FAILED 0x85 //信息发布失败 +#define MINOR_PORT_CONFLICT 0x86 //端口冲突 +#define MINOR_MODULE_STARTUP_FAILED 0x87 //模块启动失败 +#define MINIOR_VCA_RUNNING_EXCEPTION 0x88 //智能板运行异常 -//0x400-0x1000 Ž쳣 -#define MINOR_DEV_POWER_ON 0x400 //豸ϵ -#define MINOR_DEV_POWER_OFF 0x401 //豸ر -#define MINOR_WATCH_DOG_RESET 0x402 //Źλ -#define MINOR_LOW_BATTERY 0x403 //صѹ -#define MINOR_BATTERY_RESUME 0x404 //صѹָ -#define MINOR_AC_OFF 0x405 //ϵ -#define MINOR_AC_RESUME 0x406 //ָ -#define MINOR_NET_RESUME 0x407 //ָ -#define MINOR_FLASH_ABNORMAL 0x408 //FLASHд쳣 -#define MINOR_CARD_READER_OFFLINE 0x409 // -#define MINOR_CARD_READER_RESUME 0x40a //߻ָ -#define MINOR_INDICATOR_LIGHT_OFF 0x40b //ָʾƹر -#define MINOR_INDICATOR_LIGHT_RESUME 0x40c //ָʾƻָ -#define MINOR_CHANNEL_CONTROLLER_OFF 0x40d //ͨ -#define MINOR_CHANNEL_CONTROLLER_RESUME 0x40e //ָͨ -#define MINOR_SECURITY_MODULE_OFF 0x40f //ſذȫģ -#define MINOR_SECURITY_MODULE_RESUME 0x410 //ſذȫģ -#define MINOR_BATTERY_ELECTRIC_LOW 0x411 //صѹ(豸ʹ) -#define MINOR_BATTERY_ELECTRIC_RESUME 0x412 //صѹָ(豸ʹ) -#define MINOR_LOCAL_CONTROL_NET_BROKEN 0x413 //͵ؿϿ -#define MINOR_LOCAL_CONTROL_NET_RSUME 0x414 //͵ؿָ -#define MINOR_MASTER_RS485_LOOPNODE_BROKEN 0x415 //RS485·ڵϿ -#define MINOR_MASTER_RS485_LOOPNODE_RESUME 0x416 //RS485·ڵָ -#define MINOR_LOCAL_CONTROL_OFFLINE 0x417 //͵ؿ -#define MINOR_LOCAL_CONTROL_RESUME 0x418 //͵ؿ߻ָ -#define MINOR_LOCAL_DOWNSIDE_RS485_LOOPNODE_BROKEN 0x419 //͵RS485·Ͽ -#define MINOR_LOCAL_DOWNSIDE_RS485_LOOPNODE_RESUME 0x41a //͵RS485·ָ -#define MINOR_DISTRACT_CONTROLLER_ONLINE 0x41b //ֿ -#define MINOR_DISTRACT_CONTROLLER_OFFLINE 0x41c //ֿ -#define MINOR_ID_CARD_READER_NOT_CONNECT 0x41d //֤Ķδӣרã -#define MINOR_ID_CARD_READER_RESUME 0x41e //֤Ķӻָרã -#define MINOR_FINGER_PRINT_MODULE_NOT_CONNECT 0x41f //ָģδӣרã -#define MINOR_FINGER_PRINT_MODULE_RESUME 0x420 //ָģӻָרã -#define MINOR_CAMERA_NOT_CONNECT 0x421 //ͷδ -#define MINOR_CAMERA_RESUME 0x422 //ͷӻָ -#define MINOR_COM_NOT_CONNECT 0x423 //COMδ -#define MINOR_COM_RESUME 0x424 //COMӻָ -#define MINOR_DEVICE_NOT_AUTHORIZE 0x425 //豸δȨ -#define MINOR_PEOPLE_AND_ID_CARD_DEVICE_ONLINE 0x426 //֤豸 -#define MINOR_PEOPLE_AND_ID_CARD_DEVICE_OFFLINE 0x427 //֤豸 -#define MINOR_LOCAL_LOGIN_LOCK 0x428 //ص¼ -#define MINOR_LOCAL_LOGIN_UNLOCK 0x429 //ص¼ -#define MINOR_SUBMARINEBACK_COMM_BREAK 0x42a //뷴DZطͨŶϿ -#define MINOR_SUBMARINEBACK_COMM_RESUME 0x42b //뷴DZطͨŻָ -#define MINOR_MOTOR_SENSOR_EXCEPTION 0x42c //򴫸쳣 -#define MINOR_CAN_BUS_EXCEPTION 0x42d //CAN쳣 -#define MINOR_CAN_BUS_RESUME 0x42e //CAN߻ָ -#define MINOR_GATE_TEMPERATURE_OVERRUN 0x42f //բǻ¶ȳ -#define MINOR_IR_EMITTER_EXCEPTION 0x430 //쳣 -#define MINOR_IR_EMITTER_RESUME 0x431 //ָ -#define MINOR_LAMP_BOARD_COMM_EXCEPTION 0x432 //ưͨ쳣 -#define MINOR_LAMP_BOARD_COMM_RESUME 0x433 //ưͨŻָ -#define MINOR_IR_ADAPTOR_COMM_EXCEPTION 0x434 //תӰͨ쳣 -#define MINOR_IR_ADAPTOR_COMM_RESUME 0x435 //תӰͨŻָ -#define MINOR_PRINTER_ONLINE 0x436 //ӡ -#define MINOR_PRINTER_OFFLINE 0x437 //ӡ -#define MINOR_4G_MOUDLE_ONLINE 0x438 //4Gģ -#define MINOR_4G_MOUDLE_OFFLINE 0x439 //4Gģ -#define MINOR_DSP_START_FAILED 0x43a //DSPʧ -#define MINOR_SMART_REGULATION_NOT_ALLOWED 0x43b //ܹ֧ -#define MINOR_AUXILIARY_BOARD_OFFLINE 0x43c // -#define MINOR_AUXILIARY_BOARD_RESUME 0x43d //߻ָ -#define MINOR_IDCARD_SECURITY_MOUDLE_EXCEPTION 0x43e //֤ȫģ쳣 -#define MINOR_IDCARD_SECURITY_MOUDLE_RESUME 0x43f //֤ȫģָ -#define MINOR_FP_PERIPHERAL_EXCEPTION 0x440 //ָƲɼ쳣 -#define MINOR_FP_PERIPHERAL_RESUME 0x441 //ָƲɼָ -#define MINOR_REPLAY_ATTACK 0x442 //ظ -#define MINOR_TLS_ABNORMAL 0x443 //TLSͨ쳣 -#define MINOR_SMART_PLATE_OFFLINE 0x444 // -#define MINOR_SMART_PLATE_ONLINE 0x445 // -#define MINOR_REFUND_LOCKED 0x446 // -#define MINOR_CODER_ONLINE 0x447 // -#define MINOR_CODER_OFFLINE 0x448 // -#define MINOR_KEYBOARD_OFFLINE 0x449 //С -#define MINOR_KEYBOARD_ONLINE 0x44a //С -#define MINOR_5G_MOUDLE_ONLINE 0x44b //5Gģ -#define MINOR_5G_MOUDLE_OFFLINE 0x44c //5Gģ -#define MINOR_EXTEND_MODULE_ONLINE 0x44d //չģߣչģ飺Ҫusbʽָ֤ƴάģ飬֧ȲΣ -#define MINOR_EXTEND_MODULE_OFFLINE 0x44e //չģߣչģ飺Ҫusbʽָ֤ƴάģ飬֧ȲΣ -#define MINOR_INTERLOCK_SERVER_DISCONNECTED 0x44f //ŻͨŶϿ -#define MINOR_INTERLOCK_SERVER_CONNECTED 0x450 //ŻͨŻָ -#define MINOR_QRCODE_READER_OFFLINE 0x451 //άĶ -#define MINOR_QRCODE_READER_ONLINE 0x452 //άĶ -#define MINOR_HEALTH_INFO_ABNORMAL_LOCK 0x453 //Ϣ쳣 -#define MINOR_HEALTH_INFO_ABNORMAL_UNLOCK 0x454 //Ϣ쳣 -#define MINOR_OPTIONAL_BOARD_OFFLINE 0x455 //ѡ -#define MINOR_OPTIONAL_BOARD_RESUME 0x456 //ѡ߻ָ +//0x400-0x1000 门禁异常类型 +#define MINOR_DEV_POWER_ON 0x400 //设备上电启动 +#define MINOR_DEV_POWER_OFF 0x401 //设备掉电关闭 +#define MINOR_WATCH_DOG_RESET 0x402 //看门狗复位 +#define MINOR_LOW_BATTERY 0x403 //蓄电池电压低 +#define MINOR_BATTERY_RESUME 0x404 //蓄电池电压恢复正常 +#define MINOR_AC_OFF 0x405 //交流电断电 +#define MINOR_AC_RESUME 0x406 //交流电恢复 +#define MINOR_NET_RESUME 0x407 //网络恢复 +#define MINOR_FLASH_ABNORMAL 0x408 //FLASH读写异常 +#define MINOR_CARD_READER_OFFLINE 0x409 //读卡器掉线 +#define MINOR_CARD_READER_RESUME 0x40a //读卡器掉线恢复 +#define MINOR_INDICATOR_LIGHT_OFF 0x40b //指示灯关闭 +#define MINOR_INDICATOR_LIGHT_RESUME 0x40c //指示灯恢复 +#define MINOR_CHANNEL_CONTROLLER_OFF 0x40d //通道控制器掉线 +#define MINOR_CHANNEL_CONTROLLER_RESUME 0x40e //通道控制器恢复 +#define MINOR_SECURITY_MODULE_OFF 0x40f //门控安全模块掉线 +#define MINOR_SECURITY_MODULE_RESUME 0x410 //门控安全模块在线 +#define MINOR_BATTERY_ELECTRIC_LOW 0x411 //电池电压低(仅人脸设备使用) +#define MINOR_BATTERY_ELECTRIC_RESUME 0x412 //电池电压恢复正常(仅人脸设备使用) +#define MINOR_LOCAL_CONTROL_NET_BROKEN 0x413 //就地控制器网络断开 +#define MINOR_LOCAL_CONTROL_NET_RSUME 0x414 //就地控制器网络恢复 +#define MINOR_MASTER_RS485_LOOPNODE_BROKEN 0x415 //主控RS485环路节点断开 +#define MINOR_MASTER_RS485_LOOPNODE_RESUME 0x416 //主控RS485环路节点恢复 +#define MINOR_LOCAL_CONTROL_OFFLINE 0x417 //就地控制器掉线 +#define MINOR_LOCAL_CONTROL_RESUME 0x418 //就地控制器掉线恢复 +#define MINOR_LOCAL_DOWNSIDE_RS485_LOOPNODE_BROKEN 0x419 //就地下行RS485环路断开 +#define MINOR_LOCAL_DOWNSIDE_RS485_LOOPNODE_RESUME 0x41a //就地下行RS485环路恢复 +#define MINOR_DISTRACT_CONTROLLER_ONLINE 0x41b //分控器在线 +#define MINOR_DISTRACT_CONTROLLER_OFFLINE 0x41c //分控器离线 +#define MINOR_ID_CARD_READER_NOT_CONNECT 0x41d //身份证阅读器未连接(智能专用) +#define MINOR_ID_CARD_READER_RESUME 0x41e //身份证阅读器连接恢复(智能专用) +#define MINOR_FINGER_PRINT_MODULE_NOT_CONNECT 0x41f //指纹模组未连接(智能专用) +#define MINOR_FINGER_PRINT_MODULE_RESUME 0x420 //指纹模组连接恢复(智能专用) +#define MINOR_CAMERA_NOT_CONNECT 0x421 //摄像头未连接 +#define MINOR_CAMERA_RESUME 0x422 //摄像头连接恢复 +#define MINOR_COM_NOT_CONNECT 0x423 //COM口未连接 +#define MINOR_COM_RESUME 0x424 //COM口连接恢复 +#define MINOR_DEVICE_NOT_AUTHORIZE 0x425 //设备未授权 +#define MINOR_PEOPLE_AND_ID_CARD_DEVICE_ONLINE 0x426 //人证设备在线 +#define MINOR_PEOPLE_AND_ID_CARD_DEVICE_OFFLINE 0x427 //人证设备离线 +#define MINOR_LOCAL_LOGIN_LOCK 0x428 //本地登录锁定 +#define MINOR_LOCAL_LOGIN_UNLOCK 0x429 //本地登录解锁 +#define MINOR_SUBMARINEBACK_COMM_BREAK 0x42a //与反潜回服务器通信断开 +#define MINOR_SUBMARINEBACK_COMM_RESUME 0x42b //与反潜回服务器通信恢复 +#define MINOR_MOTOR_SENSOR_EXCEPTION 0x42c //电机或传感器异常 +#define MINOR_CAN_BUS_EXCEPTION 0x42d //CAN总线异常 +#define MINOR_CAN_BUS_RESUME 0x42e //CAN总线恢复 +#define MINOR_GATE_TEMPERATURE_OVERRUN 0x42f //闸机腔体温度超限 +#define MINOR_IR_EMITTER_EXCEPTION 0x430 //红外对射异常 +#define MINOR_IR_EMITTER_RESUME 0x431 //红外对射恢复 +#define MINOR_LAMP_BOARD_COMM_EXCEPTION 0x432 //灯板通信异常 +#define MINOR_LAMP_BOARD_COMM_RESUME 0x433 //灯板通信恢复 +#define MINOR_IR_ADAPTOR_COMM_EXCEPTION 0x434 //红外转接板通信异常 +#define MINOR_IR_ADAPTOR_COMM_RESUME 0x435 //红外转接板通信恢复 +#define MINOR_PRINTER_ONLINE 0x436 //打印机在线 +#define MINOR_PRINTER_OFFLINE 0x437 //打印机离线 +#define MINOR_4G_MOUDLE_ONLINE 0x438 //4G模块在线 +#define MINOR_4G_MOUDLE_OFFLINE 0x439 //4G模块离线 +#define MINOR_DSP_START_FAILED 0x43a //DSP启动失败 +#define MINOR_SMART_REGULATION_NOT_ALLOWED 0x43b //智能规则不支持 +#define MINOR_AUXILIARY_BOARD_OFFLINE 0x43c //辅助板掉线 +#define MINOR_AUXILIARY_BOARD_RESUME 0x43d //辅助板掉线恢复 +#define MINOR_IDCARD_SECURITY_MOUDLE_EXCEPTION 0x43e //身份证安全模块异常 +#define MINOR_IDCARD_SECURITY_MOUDLE_RESUME 0x43f //身份证安全模块恢复 +#define MINOR_FP_PERIPHERAL_EXCEPTION 0x440 //指纹采集外设异常 +#define MINOR_FP_PERIPHERAL_RESUME 0x441 //指纹采集外设恢复 +#define MINOR_REPLAY_ATTACK 0x442 //重复攻击 +#define MINOR_TLS_ABNORMAL 0x443 //TLS通信异常 +#define MINOR_SMART_PLATE_OFFLINE 0x444 //智盘离线 +#define MINOR_SMART_PLATE_ONLINE 0x445 //智盘上线 +#define MINOR_REFUND_LOCKED 0x446 //纠错锁定 +#define MINOR_CODER_ONLINE 0x447 //编码盘在线 +#define MINOR_CODER_OFFLINE 0x448 //编码盘离线 +#define MINOR_KEYBOARD_OFFLINE 0x449 //小键盘离线 +#define MINOR_KEYBOARD_ONLINE 0x44a //小键盘上线 +#define MINOR_5G_MOUDLE_ONLINE 0x44b //5G模块在线 +#define MINOR_5G_MOUDLE_OFFLINE 0x44c //5G模块离线 +#define MINOR_EXTEND_MODULE_ONLINE 0x44d //扩展模块在线(拓展模块:主要是以usb形式外接身份证读卡器、指纹传感器、蓝牙、二维码等模块,支持热插拔) +#define MINOR_EXTEND_MODULE_OFFLINE 0x44e //扩展模块离线(拓展模块:主要是以usb形式外接身份证读卡器、指纹传感器、蓝牙、二维码等模块,支持热插拔) +#define MINOR_INTERLOCK_SERVER_DISCONNECTED 0x44f //与多门互锁服务器通信断开 +#define MINOR_INTERLOCK_SERVER_CONNECTED 0x450 //与多门互锁服务器通信恢复 +#define MINOR_QRCODE_READER_OFFLINE 0x451 //二维码阅读器离线 +#define MINOR_QRCODE_READER_ONLINE 0x452 //二维码阅读器在线 +#define MINOR_HEALTH_INFO_ABNORMAL_LOCK 0x453 //健康信息异常锁定 +#define MINOR_HEALTH_INFO_ABNORMAL_UNLOCK 0x454 //健康信息异常解锁 +#define MINOR_OPTIONAL_BOARD_OFFLINE 0x455 //选配板掉线 +#define MINOR_OPTIONAL_BOARD_RESUME 0x456 //选配板掉线恢复 -#define MINOR_EXCEPTION_CUSTOM1 0x900 //ŽԶ쳣1 -#define MINOR_EXCEPTION_CUSTOM2 0x901 //ŽԶ쳣2 -#define MINOR_EXCEPTION_CUSTOM3 0x902 //ŽԶ쳣3 -#define MINOR_EXCEPTION_CUSTOM4 0x903 //ŽԶ쳣4 -#define MINOR_EXCEPTION_CUSTOM5 0x904 //ŽԶ쳣5 -#define MINOR_EXCEPTION_CUSTOM6 0x905 //ŽԶ쳣6 -#define MINOR_EXCEPTION_CUSTOM7 0x906 //ŽԶ쳣7 -#define MINOR_EXCEPTION_CUSTOM8 0x907 //ŽԶ쳣8 -#define MINOR_EXCEPTION_CUSTOM9 0x908 //ŽԶ쳣9 -#define MINOR_EXCEPTION_CUSTOM10 0x909 //ŽԶ쳣10 -#define MINOR_EXCEPTION_CUSTOM11 0x90a //ŽԶ쳣11 -#define MINOR_EXCEPTION_CUSTOM12 0x90b //ŽԶ쳣12 -#define MINOR_EXCEPTION_CUSTOM13 0x90c //ŽԶ쳣13 -#define MINOR_EXCEPTION_CUSTOM14 0x90d //ŽԶ쳣14 -#define MINOR_EXCEPTION_CUSTOM15 0x90e //ŽԶ쳣15 -#define MINOR_EXCEPTION_CUSTOM16 0x90f //ŽԶ쳣16 -#define MINOR_EXCEPTION_CUSTOM17 0x910 //ŽԶ쳣17 -#define MINOR_EXCEPTION_CUSTOM18 0x911 //ŽԶ쳣18 -#define MINOR_EXCEPTION_CUSTOM19 0x912 //ŽԶ쳣19 -#define MINOR_EXCEPTION_CUSTOM20 0x913 //ŽԶ쳣20 -#define MINOR_EXCEPTION_CUSTOM21 0x914 //ŽԶ쳣21 -#define MINOR_EXCEPTION_CUSTOM22 0x915 //ŽԶ쳣22 -#define MINOR_EXCEPTION_CUSTOM23 0x916 //ŽԶ쳣23 -#define MINOR_EXCEPTION_CUSTOM24 0x917 //ŽԶ쳣24 -#define MINOR_EXCEPTION_CUSTOM25 0x918 //ŽԶ쳣25 -#define MINOR_EXCEPTION_CUSTOM26 0x919 //ŽԶ쳣26 -#define MINOR_EXCEPTION_CUSTOM27 0x91a //ŽԶ쳣27 -#define MINOR_EXCEPTION_CUSTOM28 0x91b //ŽԶ쳣28 -#define MINOR_EXCEPTION_CUSTOM29 0x91c //ŽԶ쳣29 -#define MINOR_EXCEPTION_CUSTOM30 0x91d //ŽԶ쳣30 -#define MINOR_EXCEPTION_CUSTOM31 0x91e //ŽԶ쳣31 -#define MINOR_EXCEPTION_CUSTOM32 0x91f //ŽԶ쳣32 -#define MINOR_EXCEPTION_CUSTOM33 0x920 //ŽԶ쳣33 -#define MINOR_EXCEPTION_CUSTOM34 0x921 //ŽԶ쳣34 -#define MINOR_EXCEPTION_CUSTOM35 0x922 //ŽԶ쳣35 -#define MINOR_EXCEPTION_CUSTOM36 0x923 //ŽԶ쳣36 -#define MINOR_EXCEPTION_CUSTOM37 0x924 //ŽԶ쳣37 -#define MINOR_EXCEPTION_CUSTOM38 0x925 //ŽԶ쳣38 -#define MINOR_EXCEPTION_CUSTOM39 0x926 //ŽԶ쳣39 -#define MINOR_EXCEPTION_CUSTOM40 0x927 //ŽԶ쳣40 -#define MINOR_EXCEPTION_CUSTOM41 0x928 //ŽԶ쳣41 -#define MINOR_EXCEPTION_CUSTOM42 0x929 //ŽԶ쳣42 -#define MINOR_EXCEPTION_CUSTOM43 0x92a //ŽԶ쳣43 -#define MINOR_EXCEPTION_CUSTOM44 0x92b //ŽԶ쳣44 -#define MINOR_EXCEPTION_CUSTOM45 0x92c //ŽԶ쳣45 -#define MINOR_EXCEPTION_CUSTOM46 0x92d //ŽԶ쳣46 -#define MINOR_EXCEPTION_CUSTOM47 0x92e //ŽԶ쳣47 -#define MINOR_EXCEPTION_CUSTOM48 0x92f //ŽԶ쳣48 -#define MINOR_EXCEPTION_CUSTOM49 0x930 //ŽԶ쳣49 -#define MINOR_EXCEPTION_CUSTOM50 0x931 //ŽԶ쳣50 -#define MINOR_EXCEPTION_CUSTOM51 0x932 //ŽԶ쳣51 -#define MINOR_EXCEPTION_CUSTOM52 0x933 //ŽԶ쳣52 -#define MINOR_EXCEPTION_CUSTOM53 0x934 //ŽԶ쳣53 -#define MINOR_EXCEPTION_CUSTOM54 0x935 //ŽԶ쳣54 -#define MINOR_EXCEPTION_CUSTOM55 0x936 //ŽԶ쳣55 -#define MINOR_EXCEPTION_CUSTOM56 0x937 //ŽԶ쳣56 -#define MINOR_EXCEPTION_CUSTOM57 0x938 //ŽԶ쳣57 -#define MINOR_EXCEPTION_CUSTOM58 0x939 //ŽԶ쳣58 -#define MINOR_EXCEPTION_CUSTOM59 0x93a //ŽԶ쳣59 -#define MINOR_EXCEPTION_CUSTOM60 0x93b //ŽԶ쳣60 -#define MINOR_EXCEPTION_CUSTOM61 0x93c //ŽԶ쳣61 -#define MINOR_EXCEPTION_CUSTOM62 0x93d //ŽԶ쳣62 -#define MINOR_EXCEPTION_CUSTOM63 0x93e //ŽԶ쳣63 -#define MINOR_EXCEPTION_CUSTOM64 0x93f //ŽԶ쳣64 -#define MINOR_SWITCH_WIRED_NETWORK 0x950 //л -#define MINOR_SWITCH_WIRELESS_NETWORK 0x951 //л -#define MINOR_LOCK_ONLINE_RESUME 0x952 //ָ -#define MINOR_USB_ONLINE 0x953 //USBͷ -#define MINOR_USB_OFFLINE 0x954 //USBͷ -#define MINOR_LOCAL_CONTROL_BACKUP_PATH_EXCEPTION 0x955 //͵ؿͨ·쳣 -#define MINOR_SOCIAL_SECURITY_CARD_READER_ONLINE 0x956 //籣Ķ -#define MINOR_SOCIAL_SECURITY_CARD_READER_OFFLINE 0x957 //籣Ķ -#define MINOR_CHANNEL_INFRARED_EXCEPTION 0x958 //Աͨ쳣 -#define MINOR_CHANNEL_INFRARED_WORKING_EXCEPTION 0x959 //Աͨ쳣 -#define MINOR_CHANNEL_INFRARED_DETECT_EXCEPTION 0x95a //Աͨ̽쳣 -#define MINOR_CHANNEL_INFRARED_NO_TARGET_CALIBRATE_EXCEPTION 0x95b //ԱͨĿ궨쳣 -#define MINOR_CHANNEL_INFRARED_TARGET_DISTANCE_ERROR_CALIBRATE_EXCEPTION 0x95c //ԱͨĿ궨쳣 -#define MINOR_CHANNEL_INFRARED_NO_CHANNEL_WIDTH 0x95d //Աͨ̽δ·ͨ +#define MINOR_EXCEPTION_CUSTOM1 0x900 //门禁自定义异常1 +#define MINOR_EXCEPTION_CUSTOM2 0x901 //门禁自定义异常2 +#define MINOR_EXCEPTION_CUSTOM3 0x902 //门禁自定义异常3 +#define MINOR_EXCEPTION_CUSTOM4 0x903 //门禁自定义异常4 +#define MINOR_EXCEPTION_CUSTOM5 0x904 //门禁自定义异常5 +#define MINOR_EXCEPTION_CUSTOM6 0x905 //门禁自定义异常6 +#define MINOR_EXCEPTION_CUSTOM7 0x906 //门禁自定义异常7 +#define MINOR_EXCEPTION_CUSTOM8 0x907 //门禁自定义异常8 +#define MINOR_EXCEPTION_CUSTOM9 0x908 //门禁自定义异常9 +#define MINOR_EXCEPTION_CUSTOM10 0x909 //门禁自定义异常10 +#define MINOR_EXCEPTION_CUSTOM11 0x90a //门禁自定义异常11 +#define MINOR_EXCEPTION_CUSTOM12 0x90b //门禁自定义异常12 +#define MINOR_EXCEPTION_CUSTOM13 0x90c //门禁自定义异常13 +#define MINOR_EXCEPTION_CUSTOM14 0x90d //门禁自定义异常14 +#define MINOR_EXCEPTION_CUSTOM15 0x90e //门禁自定义异常15 +#define MINOR_EXCEPTION_CUSTOM16 0x90f //门禁自定义异常16 +#define MINOR_EXCEPTION_CUSTOM17 0x910 //门禁自定义异常17 +#define MINOR_EXCEPTION_CUSTOM18 0x911 //门禁自定义异常18 +#define MINOR_EXCEPTION_CUSTOM19 0x912 //门禁自定义异常19 +#define MINOR_EXCEPTION_CUSTOM20 0x913 //门禁自定义异常20 +#define MINOR_EXCEPTION_CUSTOM21 0x914 //门禁自定义异常21 +#define MINOR_EXCEPTION_CUSTOM22 0x915 //门禁自定义异常22 +#define MINOR_EXCEPTION_CUSTOM23 0x916 //门禁自定义异常23 +#define MINOR_EXCEPTION_CUSTOM24 0x917 //门禁自定义异常24 +#define MINOR_EXCEPTION_CUSTOM25 0x918 //门禁自定义异常25 +#define MINOR_EXCEPTION_CUSTOM26 0x919 //门禁自定义异常26 +#define MINOR_EXCEPTION_CUSTOM27 0x91a //门禁自定义异常27 +#define MINOR_EXCEPTION_CUSTOM28 0x91b //门禁自定义异常28 +#define MINOR_EXCEPTION_CUSTOM29 0x91c //门禁自定义异常29 +#define MINOR_EXCEPTION_CUSTOM30 0x91d //门禁自定义异常30 +#define MINOR_EXCEPTION_CUSTOM31 0x91e //门禁自定义异常31 +#define MINOR_EXCEPTION_CUSTOM32 0x91f //门禁自定义异常32 +#define MINOR_EXCEPTION_CUSTOM33 0x920 //门禁自定义异常33 +#define MINOR_EXCEPTION_CUSTOM34 0x921 //门禁自定义异常34 +#define MINOR_EXCEPTION_CUSTOM35 0x922 //门禁自定义异常35 +#define MINOR_EXCEPTION_CUSTOM36 0x923 //门禁自定义异常36 +#define MINOR_EXCEPTION_CUSTOM37 0x924 //门禁自定义异常37 +#define MINOR_EXCEPTION_CUSTOM38 0x925 //门禁自定义异常38 +#define MINOR_EXCEPTION_CUSTOM39 0x926 //门禁自定义异常39 +#define MINOR_EXCEPTION_CUSTOM40 0x927 //门禁自定义异常40 +#define MINOR_EXCEPTION_CUSTOM41 0x928 //门禁自定义异常41 +#define MINOR_EXCEPTION_CUSTOM42 0x929 //门禁自定义异常42 +#define MINOR_EXCEPTION_CUSTOM43 0x92a //门禁自定义异常43 +#define MINOR_EXCEPTION_CUSTOM44 0x92b //门禁自定义异常44 +#define MINOR_EXCEPTION_CUSTOM45 0x92c //门禁自定义异常45 +#define MINOR_EXCEPTION_CUSTOM46 0x92d //门禁自定义异常46 +#define MINOR_EXCEPTION_CUSTOM47 0x92e //门禁自定义异常47 +#define MINOR_EXCEPTION_CUSTOM48 0x92f //门禁自定义异常48 +#define MINOR_EXCEPTION_CUSTOM49 0x930 //门禁自定义异常49 +#define MINOR_EXCEPTION_CUSTOM50 0x931 //门禁自定义异常50 +#define MINOR_EXCEPTION_CUSTOM51 0x932 //门禁自定义异常51 +#define MINOR_EXCEPTION_CUSTOM52 0x933 //门禁自定义异常52 +#define MINOR_EXCEPTION_CUSTOM53 0x934 //门禁自定义异常53 +#define MINOR_EXCEPTION_CUSTOM54 0x935 //门禁自定义异常54 +#define MINOR_EXCEPTION_CUSTOM55 0x936 //门禁自定义异常55 +#define MINOR_EXCEPTION_CUSTOM56 0x937 //门禁自定义异常56 +#define MINOR_EXCEPTION_CUSTOM57 0x938 //门禁自定义异常57 +#define MINOR_EXCEPTION_CUSTOM58 0x939 //门禁自定义异常58 +#define MINOR_EXCEPTION_CUSTOM59 0x93a //门禁自定义异常59 +#define MINOR_EXCEPTION_CUSTOM60 0x93b //门禁自定义异常60 +#define MINOR_EXCEPTION_CUSTOM61 0x93c //门禁自定义异常61 +#define MINOR_EXCEPTION_CUSTOM62 0x93d //门禁自定义异常62 +#define MINOR_EXCEPTION_CUSTOM63 0x93e //门禁自定义异常63 +#define MINOR_EXCEPTION_CUSTOM64 0x93f //门禁自定义异常64 +#define MINOR_SWITCH_WIRED_NETWORK 0x950 //切换有线网络 +#define MINOR_SWITCH_WIRELESS_NETWORK 0x951 //切换无线网络 +#define MINOR_LOCK_ONLINE_RESUME 0x952 //智能锁恢复上线 +#define MINOR_USB_ONLINE 0x953 //USB摄像头上线 +#define MINOR_USB_OFFLINE 0x954 //USB摄像头掉线 +#define MINOR_LOCAL_CONTROL_BACKUP_PATH_EXCEPTION 0x955 //就地控制器备份通路异常 +#define MINOR_SOCIAL_SECURITY_CARD_READER_ONLINE 0x956 //社保卡阅读器上线 +#define MINOR_SOCIAL_SECURITY_CARD_READER_OFFLINE 0x957 //社保卡阅读器离线 +#define MINOR_CHANNEL_INFRARED_EXCEPTION 0x958 //人员通道红外器件异常 +#define MINOR_CHANNEL_INFRARED_WORKING_EXCEPTION 0x959 //人员通道红外运行异常 +#define MINOR_CHANNEL_INFRARED_DETECT_EXCEPTION 0x95a //人员通道红外探测异常 +#define MINOR_CHANNEL_INFRARED_NO_TARGET_CALIBRATE_EXCEPTION 0x95b //人员通道红外无目标标定异常 +#define MINOR_CHANNEL_INFRARED_TARGET_DISTANCE_ERROR_CALIBRATE_EXCEPTION 0x95c //人员通道红外目标距离错误标定异常 +#define MINOR_CHANNEL_INFRARED_NO_CHANNEL_WIDTH 0x95d //人员通道红外探测器未下发通道宽度 -//2018-04-23 ͨ쳣־ -#define MINOR_ALARMHOST_WDT_RESET 0x1003 //WDT λ -#define MINOR_ALARMHOST_RTC_EXCEPTION 0x1007 //RTCʵʱʱ쳣 +//2018-04-23 通用物联网关异常日志类型 +#define MINOR_ALARMHOST_WDT_RESET 0x1003 //WDT 复位 +#define MINOR_ALARMHOST_RTC_EXCEPTION 0x1007 //RTC实时时钟异常 -#define MINOR_ALARMHOST_TEL_LINE_CONNECT_FAILURE 0x100a //绰Ӷ -#define MINOR_ALARMHOST_TEL_LINE_CONNECT_RESTORE 0x100b //绰ӻָ -#define MINOR_ALARMHOST_EXPANDER_BUS_LOSS 0x100c //չģ -#define MINOR_ALARMHOST_EXPANDER_BUS_RESTORE 0x100d //չģ߻ָ -#define MINOR_ALARMHOST_KEYPAD_BUS_LOSS 0x100e //ģ -#define MINOR_ALARMHOST_KEYPAD_BUS_RESTORE 0x100f //ģ߻ָ -#define MINOR_ALARMHOST_SENSOR_FAILURE 0x1010 //ģ -#define MINOR_ALARMHOST_SENSOR_RESTORE 0x1011 //ģָ -#define MINOR_ALARMHOST_RS485_CONNECT_FAILURE 0x1012 //RS485ͨӶ -#define MINOR_ALARMHOST_RS485_CONNECT_RESTORE 0x1013 //RS485ͨӶϻָ +#define MINOR_ALARMHOST_TEL_LINE_CONNECT_FAILURE 0x100a //电话线连接断 +#define MINOR_ALARMHOST_TEL_LINE_CONNECT_RESTORE 0x100b //电话线连接恢复 +#define MINOR_ALARMHOST_EXPANDER_BUS_LOSS 0x100c //扩展总线模块掉线 +#define MINOR_ALARMHOST_EXPANDER_BUS_RESTORE 0x100d //扩展总线模块掉线恢复 +#define MINOR_ALARMHOST_KEYPAD_BUS_LOSS 0x100e //键盘总线模块掉线 +#define MINOR_ALARMHOST_KEYPAD_BUS_RESTORE 0x100f //键盘总线模块掉线恢复 +#define MINOR_ALARMHOST_SENSOR_FAILURE 0x1010 //模拟量传感器故障 +#define MINOR_ALARMHOST_SENSOR_RESTORE 0x1011 //模拟量传感器恢复 +#define MINOR_ALARMHOST_RS485_CONNECT_FAILURE 0x1012 //RS485通道连接断 +#define MINOR_ALARMHOST_RS485_CONNECT_RESTORE 0x1013 //RS485通道连接断恢复 -//쳣͡쳣ָ־Ӷϡӻָ־ʱһģû豸֧֡쳣͡쳣ָ͡ -#define MINOR_ALARMHOST_WIRED_NETWORK_ABNORMAL 0x1015 //쳣 -#define MINOR_ALARMHOST_WIRED_NETWORK_RESTORE 0x1016 //ָ -#define MINOR_ALARMHOST_GPRS_ABNORMAL 0x1017 //GPRSͨ쳣 -#define MINOR_ALARMHOST_GPRS_RESTORE 0x1018 //GPRSָ -#define MINOR_ALARMHOST_3G_ABNORMAL 0x1019 //3Gͨ쳣 -#define MINOR_ALARMHOST_3G_RESTORE 0x101a //3Gָ -#define MINOR_ALARMHOST_SIM_CARD_ABNORMAL 0x101b //SIM쳣 -#define MINOR_ALARMHOST_SIM_CARD_RESTORE 0x101c //SIMָ +//“有线网络异常”和“有线网络异常恢复”这两个日志跟“网络连接断”“网络连接恢复”这两个日志时一样的,且没有设备支持“有线网络异常”和“有线网络异常恢复”这两种类型。 +#define MINOR_ALARMHOST_WIRED_NETWORK_ABNORMAL 0x1015 //有线网络异常 +#define MINOR_ALARMHOST_WIRED_NETWORK_RESTORE 0x1016 //有线网络恢复正常 +#define MINOR_ALARMHOST_GPRS_ABNORMAL 0x1017 //GPRS通信异常 +#define MINOR_ALARMHOST_GPRS_RESTORE 0x1018 //GPRS恢复正常 +#define MINOR_ALARMHOST_3G_ABNORMAL 0x1019 //3G通信异常 +#define MINOR_ALARMHOST_3G_RESTORE 0x101a //3G恢复正常 +#define MINOR_ALARMHOST_SIM_CARD_ABNORMAL 0x101b //SIM卡异常 +#define MINOR_ALARMHOST_SIM_CARD_RESTORE 0x101c //SIM卡恢复正常 -#define MINOR_FORMAT_HDD_ERROR 0x1026 //Զ̸ʽӲʧ -#define MINOR_USB_ERROR 0x1027 //USBͨŹ -#define MINOR_USB_RESTORE 0x1028 //USBͨŹϻָ -#define MINOR_PRINT_ERROR 0x1029 //ӡ -#define MINOR_PRINT_RESTORE 0x1030 //ӡϻָ -#define MINOR_ALARMHOST_SUBSYSTEM_COMMUNICATION_ERROR 0x1031 //ӰͨѶ +#define MINOR_FORMAT_HDD_ERROR 0x1026 //远程格式化硬盘失败 +#define MINOR_USB_ERROR 0x1027 //USB通信故障 +#define MINOR_USB_RESTORE 0x1028 //USB通信故障恢复 +#define MINOR_PRINT_ERROR 0x1029 //打印机故障 +#define MINOR_PRINT_RESTORE 0x1030 //打印机故障恢复 +#define MINOR_ALARMHOST_SUBSYSTEM_COMMUNICATION_ERROR 0x1031 //子板通讯错误 -#define MINOR_MCU_RESTART 0x1035 //MCU -#define MINOR_GPRS_MODULE_FAULT 0x1036 //GPRSģ -#define MINOR_TELEPHONE_MODULE_FAULT 0x1037 //绰ģ -#define MINOR_WIFI_ABNORMAL 0x1038 //WIFIͨ쳣 -#define MINOR_WIFI_RESTORE 0x1039 //WIFIָ -#define MINOR_RF_ABNORMAL 0x103a //RFź쳣 -#define MINOR_RF_RESTORE 0x103b //RFźŻָ -#define MINOR_DETECTOR_ONLINE 0x103c //̽ -#define MINOR_DETECTOR_OFFLINE 0x103d //̽ -#define MINOR_DETECTOR_BATTERY_NORMAL 0x103e //̽ -#define MINOR_DETECTOR_BATTERY_LOW 0x103f //̽Ƿѹ -#define MINOR_DATA_TRAFFIC_OVERFLOW 0x1040 // -#define MINOR_ALARMHOST_ZONE_MODULE_LOSS 0x1041 //ģ -#define MINOR_ALARMHOST_ZONE_MODULE_RESTORE 0x1042 //ģ߻ָ -#define MINOR_WIRELESS_OUTPUT_LOSS 0x1043 //ģ -#define MINOR_WIRELESS_OUTPUT_RESTORE 0x1044 //ģָ -#define MINOR_WIRELESS_REPEATER_LOSS 0x1045 //м -#define MINOR_WIRELESS_REPEATER_RESTORE 0x1046 //мָ -#define MINOR_ALARMHOST_TRIGGER_MODULE_LOSS 0x1047 //ģ -#define MINOR_ALARMHOST_TRIGGER_MODULE_RESTORE 0x1048 //ģ߻ָ -#define MINOR_ALARMHOST_WIRELESS_SIREN_LOSS 0x1049 //߾ -#define MINOR_ALARMHOST_WIRELESS_SIREN_RESTORE 0x104a //߾Żָ -#define MINOR_TX1_SUB_SYSTEM_EXCEPTION 0x1050 /*TX1ϵͳ쳣*/ -#define MINOR_TX1_REBOOT_EXCEPTION 0x1051 /*TX1ϵͳ쳣*/ -#define MINOR_TX1_SUB_SYSTEM_LOSS 0x1052 /*ϵͳ쳣*/ -#define MINOR_TX1_SUB_SYSTEM_RESTORE 0x1053 /*ϵͳ߻ָ*/ -#define MINOR_WIRELESS_SPEED_EXCEPTION 0x1054 //ߴ쳣 -#define MINOR_SUB_BOARD_HEARTBEAT_EXCEPTION 0x1055 //Ӱ쳣 -#define MINOR_HOTSTANDBY__EXCEPTION 0x1056 //ȱ쳣 -#define MINOR_PRODUCTIONDATA_EXCEPTION 0x1057 //쳣 +#define MINOR_MCU_RESTART 0x1035 //MCU重启 +#define MINOR_GPRS_MODULE_FAULT 0x1036 //GPRS模块故障 +#define MINOR_TELEPHONE_MODULE_FAULT 0x1037 //电话模块故障 +#define MINOR_WIFI_ABNORMAL 0x1038 //WIFI通信异常 +#define MINOR_WIFI_RESTORE 0x1039 //WIFI恢复正常 +#define MINOR_RF_ABNORMAL 0x103a //RF信号异常 +#define MINOR_RF_RESTORE 0x103b //RF信号恢复正常 +#define MINOR_DETECTOR_ONLINE 0x103c //探测器在线 +#define MINOR_DETECTOR_OFFLINE 0x103d //探测器离线 +#define MINOR_DETECTOR_BATTERY_NORMAL 0x103e //探测器电量正常 +#define MINOR_DETECTOR_BATTERY_LOW 0x103f //探测器电量欠压 +#define MINOR_DATA_TRAFFIC_OVERFLOW 0x1040 //流量超额 +#define MINOR_ALARMHOST_ZONE_MODULE_LOSS 0x1041 //防区模块掉线 +#define MINOR_ALARMHOST_ZONE_MODULE_RESTORE 0x1042 //防区模块掉线恢复 +#define MINOR_WIRELESS_OUTPUT_LOSS 0x1043 //无线输出模块离线 +#define MINOR_WIRELESS_OUTPUT_RESTORE 0x1044 //无线输出模块恢复在线 +#define MINOR_WIRELESS_REPEATER_LOSS 0x1045 //无线中继器离线 +#define MINOR_WIRELESS_REPEATER_RESTORE 0x1046 //无线中继器恢复在线 +#define MINOR_ALARMHOST_TRIGGER_MODULE_LOSS 0x1047 //触发器模块掉线 +#define MINOR_ALARMHOST_TRIGGER_MODULE_RESTORE 0x1048 //触发器模块掉线恢复 +#define MINOR_ALARMHOST_WIRELESS_SIREN_LOSS 0x1049 //无线警号离线 +#define MINOR_ALARMHOST_WIRELESS_SIREN_RESTORE 0x104a //无线警号恢复在线 +#define MINOR_TX1_SUB_SYSTEM_EXCEPTION 0x1050 /*TX1子系统异常*/ +#define MINOR_TX1_REBOOT_EXCEPTION 0x1051 /*TX1系统异常重启*/ +#define MINOR_TX1_SUB_SYSTEM_LOSS 0x1052 /*智能子系统异常离线*/ +#define MINOR_TX1_SUB_SYSTEM_RESTORE 0x1053 /*智能子系统离线恢复*/ +#define MINOR_WIRELESS_SPEED_EXCEPTION 0x1054 //无线传输速率异常 +#define MINOR_SUB_BOARD_HEARTBEAT_EXCEPTION 0x1055 //子板心跳异常 +#define MINOR_HOTSTANDBY__EXCEPTION 0x1056 //热备异常 +#define MINOR_PRODUCTIONDATA_EXCEPTION 0x1057 //生产数据异常 -//LED 쳣 0x1201~0x1300 -#define MINOR_LED_SYSTEM_EXCEPTION 0x1201 //LEDϵͳ쳣 -#define MINOR_FLASH_NOTENOUGH_EXCEPTION 0x1202 //FLASHռ䲻 +//LED 异常次类型 0x1201~0x1300 +#define MINOR_LED_SYSTEM_EXCEPTION 0x1201 //LED系统异常 +#define MINOR_FLASH_NOTENOUGH_EXCEPTION 0x1202 //FLASH空间不足 -#define MINOR_LOG_EXCEPTION 0x1301 //־쳣 +#define MINOR_LOG_EXCEPTION 0x1301 //日志盘异常 //[add]by silujie 2013-3-22 14:16 -//0x2000~0x3fff Ϊ豸־ -//0x4000~0x5000 Ϊ豸쳣־ -#define MINOR_SUBSYSTEM_IP_CONFLICT 0x4000 //ӰIPͻ -#define MINOR_SUBSYSTEM_NET_BROKEN 0x4001 //Ӱ -#define MINOR_FAN_ABNORMAL 0x4002 //쳣 -#define MINOR_BACKPANEL_TEMPERATURE_ABNORMAL 0x4003 //¶쳣 +//0x2000~0x3fff 为设备报警日志 +//0x4000~0x5000 为设备异常日志 +#define MINOR_SUBSYSTEM_IP_CONFLICT 0x4000 //子板IP冲突 +#define MINOR_SUBSYSTEM_NET_BROKEN 0x4001 //子板断网 +#define MINOR_FAN_ABNORMAL 0x4002 //风扇异常 +#define MINOR_BACKPANEL_TEMPERATURE_ABNORMAL 0x4003 //背板温度异常 -#define MINOR_SDCARD_ABNORMAL 0x4004 //SD -#define MINOR_SDCARD_DAMAGE 0x4005 //SD -#define MINOR_POC_ABNORMAL 0x4006 //豸POCģ쳣 -#define MINOR_MAIN_POWER_FAULT 0x4007 // -#define MINOR_BACK_UP_POWER_FAULT 0x4008 // -#define MINOR_TAMPER_FAULT 0x4009 // -#define MINOR_RS232_FAULT 0x400a //232߹ -#define MINOR_RS485_FAULT 0x400b //485߹ -#define MINOR_LAN_STATUS_FAULT 0x400c //LAN߽״̬ -#define MINOR_LAN_LINK1_FAULT 0x400d //LAN·1 -#define MINOR_LAN_LINK2_FAULT 0x400e //LAN·2 -#define MINOR_SIM_CARD_STATUS_FAULT 0x400f //4G-SIM״̬ -#define MINOR_4G_LINK1_FAULT 0x4010 //4G·1 -#define MINOR_4G_LINK2_FAULT 0x4011 //4G·2 -#define MINOR_OTHER_FAULT 0x4012 // -#define MINOR_FIRE_CONTROL_CONNECT_FAULT 0x4013 //ӹ -#define MINOR_SENSOR_SHORT_CIRCUIT 0x4014 //· -#define MINOR_SENSOR_OPEN_CIRCUIT 0x4015 //· -#define MINOR_SENSOR_MIS_CONNECT 0x4016 // -#define MINOR_SENSOR_FAULT_RESTORE 0x4017 //ϻָ -#define MINOR_DEVICE_FAULT 0x4018 //豸 -#define MINOR_OVERVOLTAGE 0X4019 //Դѹ -#define MINOR_UNDERVOLTAGE 0X401a //Դѹ -#define MINOR_PANLOCKING 0x401b //̨ˮƽת -#define MINOR_TILTLOCKING 0x401c //ֱ̨ת -#define MINOR_SUBBOARD_TEMPERATURE_ABNORMAL 0x401d //Ӱ¶쳣 -#define MINOR_EZVIZ_UPGRADE_EXCEPTION 0x401e //өʯ쳣 +#define MINOR_SDCARD_ABNORMAL 0x4004 //SD卡不健康 +#define MINOR_SDCARD_DAMAGE 0x4005 //SD卡损坏 +#define MINOR_POC_ABNORMAL 0x4006 //设备POC模块异常 +#define MINOR_MAIN_POWER_FAULT 0x4007 //主电故障 +#define MINOR_BACK_UP_POWER_FAULT 0x4008 //备电故障 +#define MINOR_TAMPER_FAULT 0x4009 //防拆故障 +#define MINOR_RS232_FAULT 0x400a //232总线故障 +#define MINOR_RS485_FAULT 0x400b //485总线故障 +#define MINOR_LAN_STATUS_FAULT 0x400c //LAN网线接入状态故障 +#define MINOR_LAN_LINK1_FAULT 0x400d //LAN链路1故障 +#define MINOR_LAN_LINK2_FAULT 0x400e //LAN链路2故障 +#define MINOR_SIM_CARD_STATUS_FAULT 0x400f //4G-SIM卡状态故障 +#define MINOR_4G_LINK1_FAULT 0x4010 //4G链路1故障 +#define MINOR_4G_LINK2_FAULT 0x4011 //4G链路2故障 +#define MINOR_OTHER_FAULT 0x4012 //其他故障 +#define MINOR_FIRE_CONTROL_CONNECT_FAULT 0x4013 //与消控主机连接故障 +#define MINOR_SENSOR_SHORT_CIRCUIT 0x4014 //传感器短路 +#define MINOR_SENSOR_OPEN_CIRCUIT 0x4015 //传感器断路 +#define MINOR_SENSOR_MIS_CONNECT 0x4016 //传感器错接 +#define MINOR_SENSOR_FAULT_RESTORE 0x4017 //传感器故障恢复 +#define MINOR_DEVICE_FAULT 0x4018 //设备故障 +#define MINOR_OVERVOLTAGE 0X4019 //电源电压过高 +#define MINOR_UNDERVOLTAGE 0X401a //电源电压过低 +#define MINOR_PANLOCKING 0x401b //云台水平堵转 +#define MINOR_TILTLOCKING 0x401c //云台垂直堵转 +#define MINOR_SUBBOARD_TEMPERATURE_ABNORMAL 0x401d //子板温度异常 +#define MINOR_EZVIZ_UPGRADE_EXCEPTION 0x401e //萤石升级异常 -//өʯز쳣־ -#define MINOR_EZVIZ_OPERATION_ABNORMAL 0x4020 //өʯ쳣 +//萤石相关操作异常日志 +#define MINOR_EZVIZ_OPERATION_ABNORMAL 0x4020 //萤石操作异常 -#define MINOR_IFRAME_IS_TOO_LARGE 0x4030 //Ԥ/طʱI֡ +#define MINOR_IFRAME_IS_TOO_LARGE 0x4030 //预览/回放时I帧过大 -/* */ -// +/* 操作 */ +//主类型 #define MAJOR_OPERATION 0x3 -// -#define MINOR_VCA_MOTIONEXCEPTION 0x29 //쳣 -#define MINOR_START_DVR 0x41 /* */ -#define MINOR_STOP_DVR 0x42 /* ػ */ -#define MINOR_STOP_ABNORMAL 0x43 /* 쳣ػ */ -#define MINOR_REBOOT_DVR 0x44 /*豸*/ +//次类型 +#define MINOR_VCA_MOTIONEXCEPTION 0x29 //智能侦测异常 +#define MINOR_START_DVR 0x41 /* 开机 */ +#define MINOR_STOP_DVR 0x42 /* 关机 */ +#define MINOR_STOP_ABNORMAL 0x43 /* 异常关机 */ +#define MINOR_REBOOT_DVR 0x44 /*本地重启设备*/ -#define MINOR_LOCAL_LOGIN 0x50 /* ص½ */ -#define MINOR_LOCAL_LOGOUT 0x51 /* ע½ */ -#define MINOR_LOCAL_CFG_PARM 0x52 /* ò */ -#define MINOR_LOCAL_PLAYBYFILE 0x53 /* ذļطŻ */ -#define MINOR_LOCAL_PLAYBYTIME 0x54 /* ذʱطŻ*/ -#define MINOR_LOCAL_START_REC 0x55 /* ؿʼ¼ */ -#define MINOR_LOCAL_STOP_REC 0x56 /* ֹͣ¼ */ -#define MINOR_LOCAL_PTZCTRL 0x57 /* ̨ */ -#define MINOR_LOCAL_PREVIEW 0x58 /* Ԥ (ʹ)*/ -#define MINOR_LOCAL_MODIFY_TIME 0x59 /* ޸ʱ(ʹ) */ -#define MINOR_LOCAL_UPGRADE 0x5a /* */ -#define MINOR_LOCAL_RECFILE_OUTPUT 0x5b /* ر¼ļ */ -#define MINOR_LOCAL_FORMAT_HDD 0x5c /* سʼӲ */ -#define MINOR_LOCAL_CFGFILE_OUTPUT 0x5d /* ļ */ -#define MINOR_LOCAL_CFGFILE_INPUT 0x5e /* 뱾ļ */ -#define MINOR_LOCAL_COPYFILE 0x5f /* رļ */ -#define MINOR_LOCAL_LOCKFILE 0x60 /* ¼ļ */ -#define MINOR_LOCAL_UNLOCKFILE 0x61 /* ؽ¼ļ */ -#define MINOR_LOCAL_DVR_ALARM 0x62 /* ֶʹ*/ -#define MINOR_IPC_ADD 0x63 /* IPC */ -#define MINOR_IPC_DEL 0x64 /* ɾIPC */ -#define MINOR_IPC_SET 0x65 /* IPC */ -#define MINOR_LOCAL_START_BACKUP 0x66 /* ؿʼ */ -#define MINOR_LOCAL_STOP_BACKUP 0x67 /* ֹͣ*/ -#define MINOR_LOCAL_COPYFILE_START_TIME 0x68 /* رݿʼʱ*/ -#define MINOR_LOCAL_COPYFILE_END_TIME 0x69 /* رݽʱ*/ -#define MINOR_LOCAL_ADD_NAS 0x6a /*Ӳ nfsiscsi*/ -#define MINOR_LOCAL_DEL_NAS 0x6b /* ɾnas nfsiscsi*/ -#define MINOR_LOCAL_SET_NAS 0x6c /* nas nfsiscsi*/ -#define MINOR_LOCAL_RESET_PASSWD 0x6d /* ػָԱĬ*/ +#define MINOR_LOCAL_LOGIN 0x50 /* 本地登陆 */ +#define MINOR_LOCAL_LOGOUT 0x51 /* 本地注销登陆 */ +#define MINOR_LOCAL_CFG_PARM 0x52 /* 本地配置参数 */ +#define MINOR_LOCAL_PLAYBYFILE 0x53 /* 本地按文件回放或下载 */ +#define MINOR_LOCAL_PLAYBYTIME 0x54 /* 本地按时间回放或下载*/ +#define MINOR_LOCAL_START_REC 0x55 /* 本地开始录像 */ +#define MINOR_LOCAL_STOP_REC 0x56 /* 本地停止录像 */ +#define MINOR_LOCAL_PTZCTRL 0x57 /* 本地云台控制 */ +#define MINOR_LOCAL_PREVIEW 0x58 /* 本地预览 (保留不使用)*/ +#define MINOR_LOCAL_MODIFY_TIME 0x59 /* 本地修改时间(保留不使用) */ +#define MINOR_LOCAL_UPGRADE 0x5a /* 本地升级 */ +#define MINOR_LOCAL_RECFILE_OUTPUT 0x5b /* 本地备份录象文件 */ +#define MINOR_LOCAL_FORMAT_HDD 0x5c /* 本地初始化硬盘 */ +#define MINOR_LOCAL_CFGFILE_OUTPUT 0x5d /* 导出本地配置文件 */ +#define MINOR_LOCAL_CFGFILE_INPUT 0x5e /* 导入本地配置文件 */ +#define MINOR_LOCAL_COPYFILE 0x5f /* 本地备份文件 */ +#define MINOR_LOCAL_LOCKFILE 0x60 /* 本地锁定录像文件 */ +#define MINOR_LOCAL_UNLOCKFILE 0x61 /* 本地解锁录像文件 */ +#define MINOR_LOCAL_DVR_ALARM 0x62 /* 本地手动清除和触发报警*/ +#define MINOR_IPC_ADD 0x63 /* 本地添加IPC */ +#define MINOR_IPC_DEL 0x64 /* 本地删除IPC */ +#define MINOR_IPC_SET 0x65 /* 本地设置IPC */ +#define MINOR_LOCAL_START_BACKUP 0x66 /* 本地开始备份 */ +#define MINOR_LOCAL_STOP_BACKUP 0x67 /* 本地停止备份*/ +#define MINOR_LOCAL_COPYFILE_START_TIME 0x68 /* 本地备份开始时间*/ +#define MINOR_LOCAL_COPYFILE_END_TIME 0x69 /* 本地备份结束时间*/ +#define MINOR_LOCAL_ADD_NAS 0x6a /*本地添加网络硬盘 (nfs、iscsi)*/ +#define MINOR_LOCAL_DEL_NAS 0x6b /* 本地删除nas盘 (nfs、iscsi)*/ +#define MINOR_LOCAL_SET_NAS 0x6c /* 本地设置nas盘 (nfs、iscsi)*/ +#define MINOR_LOCAL_RESET_PASSWD 0x6d /* 本地恢复管理员默认密码*/ -#define MINOR_REMOTE_LOGIN 0x70 /* Զ̵¼ */ -#define MINOR_REMOTE_LOGOUT 0x71 /* Զע½ */ -#define MINOR_REMOTE_START_REC 0x72 /* Զ̿ʼ¼ */ -#define MINOR_REMOTE_STOP_REC 0x73 /* Զֹͣ¼ */ -#define MINOR_START_TRANS_CHAN 0x74 /* ʼ͸ */ -#define MINOR_STOP_TRANS_CHAN 0x75 /* ֹͣ͸ */ -#define MINOR_REMOTE_GET_PARM 0x76 /* Զ̻ȡ */ -#define MINOR_REMOTE_CFG_PARM 0x77 /* Զò */ -#define MINOR_REMOTE_GET_STATUS 0x78 /* Զ̻ȡ״̬ */ -#define MINOR_REMOTE_ARM 0x79 /* Զ̲ */ -#define MINOR_REMOTE_DISARM 0x7a /* Զ̳ */ -#define MINOR_REMOTE_REBOOT 0x7b /* Զ */ -#define MINOR_START_VT 0x7c /* ʼԽ */ -#define MINOR_STOP_VT 0x7d /* ֹͣԽ */ -#define MINOR_REMOTE_UPGRADE 0x7e /* Զ */ -#define MINOR_REMOTE_PLAYBYFILE 0x7f /* Զ̰ļطŻ */ -#define MINOR_REMOTE_PLAYBYTIME 0x80 /* Զ̰ʱطŻ */ -#define MINOR_REMOTE_PTZCTRL 0x81 /* Զ̨ */ -#define MINOR_REMOTE_FORMAT_HDD 0x82 /* Զ̸ʽӲ */ -#define MINOR_REMOTE_STOP 0x83 /* Զ̹ػ */ -#define MINOR_REMOTE_LOCKFILE 0x84 /* Զļ */ -#define MINOR_REMOTE_UNLOCKFILE 0x85 /* Զ̽ļ */ -#define MINOR_REMOTE_CFGFILE_OUTPUT 0x86 /* Զ̵ļ */ -#define MINOR_REMOTE_CFGFILE_INTPUT 0x87 /* Զ̵ļ */ -#define MINOR_REMOTE_RECFILE_OUTPUT 0x88 /* Զ̵¼ļ */ -#define MINOR_REMOTE_DVR_ALARM 0x89 /* Զֶʹ*/ -#define MINOR_REMOTE_IPC_ADD 0x8a /* ԶIPC */ -#define MINOR_REMOTE_IPC_DEL 0x8b /* ԶɾIPC */ -#define MINOR_REMOTE_IPC_SET 0x8c /* ԶIPC */ -#define MINOR_REBOOT_VCA_LIB 0x8d /*ܿ*/ -#define MINOR_REMOTE_ADD_NAS 0x8e /* Զnas nfsiscsi*/ -#define MINOR_REMOTE_DEL_NAS 0x8f /* Զɾnas nfsiscsi*/ -#define MINOR_REMOTE_SET_NAS 0x90 /* Զnas nfsiscsi*/ -#define MINOR_LOCAL_OPERATE_LOCK 0x9d /* ز */ -#define MINOR_LOCAL_OPERATE_UNLOCK 0x9e /* ز */ -#define MINOR_REMOTE_DELETE_HDISK 0x9a /* Զɾ쳣ڵӲ */ -#define MINOR_REMOTE_LOAD_HDISK 0x9b /* Զ̼Ӳ */ -#define MINOR_REMOTE_UNLOAD_HDISK 0x9c /* ԶжӲ */ -#define MINOR_SCHEDULE_ANGLECALIBRATION 0x139 /*У׼*/ -#define MINOR_OTHER_OPERATE 0x200 /* */ +#define MINOR_REMOTE_LOGIN 0x70 /* 远程登录 */ +#define MINOR_REMOTE_LOGOUT 0x71 /* 远程注销登陆 */ +#define MINOR_REMOTE_START_REC 0x72 /* 远程开始录像 */ +#define MINOR_REMOTE_STOP_REC 0x73 /* 远程停止录像 */ +#define MINOR_START_TRANS_CHAN 0x74 /* 开始透明传输 */ +#define MINOR_STOP_TRANS_CHAN 0x75 /* 停止透明传输 */ +#define MINOR_REMOTE_GET_PARM 0x76 /* 远程获取参数 */ +#define MINOR_REMOTE_CFG_PARM 0x77 /* 远程配置参数 */ +#define MINOR_REMOTE_GET_STATUS 0x78 /* 远程获取状态 */ +#define MINOR_REMOTE_ARM 0x79 /* 远程布防 */ +#define MINOR_REMOTE_DISARM 0x7a /* 远程撤防 */ +#define MINOR_REMOTE_REBOOT 0x7b /* 远程重启 */ +#define MINOR_START_VT 0x7c /* 开始语音对讲 */ +#define MINOR_STOP_VT 0x7d /* 停止语音对讲 */ +#define MINOR_REMOTE_UPGRADE 0x7e /* 远程升级 */ +#define MINOR_REMOTE_PLAYBYFILE 0x7f /* 远程按文件回放或下载 */ +#define MINOR_REMOTE_PLAYBYTIME 0x80 /* 远程按时间回放或下载 */ +#define MINOR_REMOTE_PTZCTRL 0x81 /* 远程云台控制 */ +#define MINOR_REMOTE_FORMAT_HDD 0x82 /* 远程格式化硬盘 */ +#define MINOR_REMOTE_STOP 0x83 /* 远程关机 */ +#define MINOR_REMOTE_LOCKFILE 0x84 /* 远程锁定文件 */ +#define MINOR_REMOTE_UNLOCKFILE 0x85 /* 远程解锁文件 */ +#define MINOR_REMOTE_CFGFILE_OUTPUT 0x86 /* 远程导出配置文件 */ +#define MINOR_REMOTE_CFGFILE_INTPUT 0x87 /* 远程导入配置文件 */ +#define MINOR_REMOTE_RECFILE_OUTPUT 0x88 /* 远程导出录象文件 */ +#define MINOR_REMOTE_DVR_ALARM 0x89 /* 远程手动清除和触发报警*/ +#define MINOR_REMOTE_IPC_ADD 0x8a /* 远程添加IPC */ +#define MINOR_REMOTE_IPC_DEL 0x8b /* 远程删除IPC */ +#define MINOR_REMOTE_IPC_SET 0x8c /* 远程设置IPC */ +#define MINOR_REBOOT_VCA_LIB 0x8d /*重启智能库*/ +#define MINOR_REMOTE_ADD_NAS 0x8e /* 远程添加nas盘 (nfs、iscsi)*/ +#define MINOR_REMOTE_DEL_NAS 0x8f /* 远程删除nas盘 (nfs、iscsi)*/ +#define MINOR_REMOTE_SET_NAS 0x90 /* 远程设置nas盘 (nfs、iscsi)*/ +#define MINOR_LOCAL_OPERATE_LOCK 0x9d /* 本地操作锁定 */ +#define MINOR_LOCAL_OPERATE_UNLOCK 0x9e /* 本地操作解除锁定 */ +#define MINOR_REMOTE_DELETE_HDISK 0x9a /* 远程删除异常不存在的硬盘 */ +#define MINOR_REMOTE_LOAD_HDISK 0x9b /* 远程加载硬盘 */ +#define MINOR_REMOTE_UNLOAD_HDISK 0x9c /* 远程卸载硬盘 */ +#define MINOR_SCHEDULE_ANGLECALIBRATION 0x139 /*定期倾角校准*/ +#define MINOR_OTHER_OPERATE 0x200 /* 其他操作 */ -//2010-05-26 ѶDVR־ -#define MINOR_LOCAL_START_REC_CDRW 0x91 /* ؿʼѶ */ -#define MINOR_LOCAL_STOP_REC_CDRW 0x92 /* ֹͣѶ */ -#define MINOR_REMOTE_START_REC_CDRW 0x93 /* Զ̿ʼѶ */ -#define MINOR_REMOTE_STOP_REC_CDRW 0x94 /* ԶֹͣѶ */ +//2010-05-26 增加审讯DVR日志类型 +#define MINOR_LOCAL_START_REC_CDRW 0x91 /* 本地开始讯问 */ +#define MINOR_LOCAL_STOP_REC_CDRW 0x92 /* 本地停止讯问 */ +#define MINOR_REMOTE_START_REC_CDRW 0x93 /* 远程开始讯问 */ +#define MINOR_REMOTE_STOP_REC_CDRW 0x94 /* 远程停止讯问 */ -#define MINOR_LOCAL_PIC_OUTPUT 0x95 /* رͼƬļ */ -#define MINOR_REMOTE_PIC_OUTPUT 0x96 /* Զ̱ͼƬļ */ +#define MINOR_LOCAL_PIC_OUTPUT 0x95 /* 本地备份图片文件 */ +#define MINOR_REMOTE_PIC_OUTPUT 0x96 /* 远程备份图片文件 */ -//2011-07-26 81ѶDVR־ -#define MINOR_LOCAL_INQUEST_RESUME 0x97 /* ػָѶ¼*/ -#define MINOR_REMOTE_INQUEST_RESUME 0x98 /* Զָ̻Ѷ¼*/ +//2011-07-26 增加81审讯DVR日志类型 +#define MINOR_LOCAL_INQUEST_RESUME 0x97 /* 本地恢复审讯事件*/ +#define MINOR_REMOTE_INQUEST_RESUME 0x98 /* 远程恢复审讯事件*/ -//2013-01-23 86ѶNVR־ -#define MINOR_LOCAL_ADD_FILE 0x99 /*صļ*/ -#define MINOR_LOCAL_DEL_FILE 0x9f /*ɾѶ*/ -#define MINOR_REMOTE_INQUEST_ADD_FILE 0x100 /*Զ̵ļ*/ +//2013-01-23 增加86高清审讯NVR操作日志 +#define MINOR_LOCAL_ADD_FILE 0x99 /*本地导入文件*/ +#define MINOR_LOCAL_DEL_FILE 0x9f /*本地删除审讯*/ +#define MINOR_REMOTE_INQUEST_ADD_FILE 0x100 /*远程导入文件*/ -//2009-12-16 Ƶۺƽ̨־ -#define MINOR_SUBSYSTEMREBOOT 0xa0 /*Ƶۺƽ̨dm6467 */ -#define MINOR_MATRIX_STARTTRANSFERVIDEO 0xa1 /*Ƶۺƽ̨лʼͼ*/ -#define MINOR_MATRIX_STOPTRANSFERVIDEO 0xa2 /*Ƶۺƽ̨лֹͣͼ*/ -#define MINOR_REMOTE_SET_ALLSUBSYSTEM 0xa3 /*Ƶۺƽ̨6467ϵͳϢ*/ -#define MINOR_REMOTE_GET_ALLSUBSYSTEM 0xa4 /*Ƶۺƽ̨ȡ6467ϵͳϢ*/ -#define MINOR_REMOTE_SET_PLANARRAY 0xa5 /*Ƶۺƽ̨üƻѲ*/ -#define MINOR_REMOTE_GET_PLANARRAY 0xa6 /*Ƶۺƽ̨ȡƻѲ*/ -#define MINOR_MATRIX_STARTTRANSFERAUDIO 0xa7 /*Ƶۺƽ̨лʼƵ*/ -#define MINOR_MATRIX_STOPRANSFERAUDIO 0xa8 /*Ƶۺƽ̨лֹͣƵ*/ -#define MINOR_LOGON_CODESPITTER 0xa9 /*Ƶۺƽ̨½*/ -#define MINOR_LOGOFF_CODESPITTER 0xaa /*Ƶۺƽ̨˳*/ +//2009-12-16 增加视频综合平台日志类型 +#define MINOR_SUBSYSTEMREBOOT 0xa0 /*视频综合平台:dm6467 正常重启*/ +#define MINOR_MATRIX_STARTTRANSFERVIDEO 0xa1 /*视频综合平台:矩阵切换开始传输图像*/ +#define MINOR_MATRIX_STOPTRANSFERVIDEO 0xa2 /*视频综合平台:矩阵切换停止传输图像*/ +#define MINOR_REMOTE_SET_ALLSUBSYSTEM 0xa3 /*视频综合平台:设置所有6467子系统信息*/ +#define MINOR_REMOTE_GET_ALLSUBSYSTEM 0xa4 /*视频综合平台:获取所有6467子系统信息*/ +#define MINOR_REMOTE_SET_PLANARRAY 0xa5 /*视频综合平台:设置计划轮巡组*/ +#define MINOR_REMOTE_GET_PLANARRAY 0xa6 /*视频综合平台:获取计划轮巡组*/ +#define MINOR_MATRIX_STARTTRANSFERAUDIO 0xa7 /*视频综合平台:矩阵切换开始传输音频*/ +#define MINOR_MATRIX_STOPRANSFERAUDIO 0xa8 /*视频综合平台:矩阵切换停止传输音频*/ +#define MINOR_LOGON_CODESPITTER 0xa9 /*视频综合平台:登陆码分器*/ +#define MINOR_LOGOFF_CODESPITTER 0xaa /*视频综合平台:退出码分器*/ -//2010-01-22 Ƶۺƽ̨н־ -#define MINOR_START_DYNAMIC_DECODE 0xb0 /*ʼ̬*/ -#define MINOR_STOP_DYNAMIC_DECODE 0xb1 /*ֹ̬ͣ*/ -#define MINOR_GET_CYC_CFG 0xb2 /*ȡͨѲ*/ -#define MINOR_SET_CYC_CFG 0xb3 /*ýͨѲ*/ -#define MINOR_START_CYC_DECODE 0xb4 /*ʼѲ*/ -#define MINOR_STOP_CYC_DECODE 0xb5 /*ֹͣѲ*/ -#define MINOR_GET_DECCHAN_STATUS 0xb6 /*ȡͨ״̬*/ -#define MINOR_GET_DECCHAN_INFO 0xb7 /*ȡͨǰϢ*/ -#define MINOR_START_PASSIVE_DEC 0xb8 /*ʼ*/ -#define MINOR_STOP_PASSIVE_DEC 0xb9 /*ֹͣ*/ -#define MINOR_CTRL_PASSIVE_DEC 0xba /*Ʊ*/ -#define MINOR_RECON_PASSIVE_DEC 0xbb /**/ -#define MINOR_GET_DEC_CHAN_SW 0xbc /*ȡͨܿ*/ -#define MINOR_SET_DEC_CHAN_SW 0xbd /*ýͨܿ*/ -#define MINOR_CTRL_DEC_CHAN_SCALE 0xbe /*ͨſ*/ -#define MINOR_SET_REMOTE_REPLAY 0xbf /*Զ̻ط*/ -#define MINOR_GET_REMOTE_REPLAY 0xc0 /*ȡԶ̻ط״̬*/ -#define MINOR_CTRL_REMOTE_REPLAY 0xc1 /*Զ̻طſ*/ -#define MINOR_SET_DISP_CFG 0xc2 /*ʾͨ*/ -#define MINOR_GET_DISP_CFG 0xc3 /*ȡʾͨ*/ -#define MINOR_SET_PLANTABLE 0xc4 /*üƻѲ*/ -#define MINOR_GET_PLANTABLE 0xc5 /*ȡƻѲ*/ -#define MINOR_START_PPPPOE 0xc6 /*ʼPPPoE*/ -#define MINOR_STOP_PPPPOE 0xc7 /*PPPoE*/ -#define MINOR_UPLOAD_LOGO 0xc8 /*ϴLOGO*/ -//ģʽ־ -#define MINOR_LOCAL_PIN 0xc9 /* PINܲ */ -#define MINOR_LOCAL_DIAL 0xca /* ֶϿ */ -#define MINOR_SMS_CONTROL 0xcb /* ſ */ -#define MINOR_CALL_ONLINE 0xcc /* п */ -#define MINOR_REMOTE_PIN 0xcd /* ԶPINܲ */ +//2010-01-22 增加视频综合平台中解码器操作日志 +#define MINOR_START_DYNAMIC_DECODE 0xb0 /*开始动态解码*/ +#define MINOR_STOP_DYNAMIC_DECODE 0xb1 /*停止动态解码*/ +#define MINOR_GET_CYC_CFG 0xb2 /*获取解码器通道轮巡配置*/ +#define MINOR_SET_CYC_CFG 0xb3 /*设置解码通道轮巡配置*/ +#define MINOR_START_CYC_DECODE 0xb4 /*开始轮巡解码*/ +#define MINOR_STOP_CYC_DECODE 0xb5 /*停止轮巡解码*/ +#define MINOR_GET_DECCHAN_STATUS 0xb6 /*获取解码通道状态*/ +#define MINOR_GET_DECCHAN_INFO 0xb7 /*获取解码通道当前信息*/ +#define MINOR_START_PASSIVE_DEC 0xb8 /*开始被动解码*/ +#define MINOR_STOP_PASSIVE_DEC 0xb9 /*停止被动解码*/ +#define MINOR_CTRL_PASSIVE_DEC 0xba /*控制被动解码*/ +#define MINOR_RECON_PASSIVE_DEC 0xbb /*被动解码重连*/ +#define MINOR_GET_DEC_CHAN_SW 0xbc /*获取解码通道总开关*/ +#define MINOR_SET_DEC_CHAN_SW 0xbd /*设置解码通道总开关*/ +#define MINOR_CTRL_DEC_CHAN_SCALE 0xbe /*解码通道缩放控制*/ +#define MINOR_SET_REMOTE_REPLAY 0xbf /*设置远程回放*/ +#define MINOR_GET_REMOTE_REPLAY 0xc0 /*获取远程回放状态*/ +#define MINOR_CTRL_REMOTE_REPLAY 0xc1 /*远程回放控制*/ +#define MINOR_SET_DISP_CFG 0xc2 /*设置显示通道*/ +#define MINOR_GET_DISP_CFG 0xc3 /*获取显示通道设置*/ +#define MINOR_SET_PLANTABLE 0xc4 /*设置计划轮巡表*/ +#define MINOR_GET_PLANTABLE 0xc5 /*获取计划轮巡表*/ +#define MINOR_START_PPPPOE 0xc6 /*开始PPPoE连接*/ +#define MINOR_STOP_PPPPOE 0xc7 /*结束PPPoE连接*/ +#define MINOR_UPLOAD_LOGO 0xc8 /*上传LOGO*/ +//推模式操作日志 +#define MINOR_LOCAL_PIN 0xc9 /* 本地PIN功能操作 */ +#define MINOR_LOCAL_DIAL 0xca /* 本地手动启动断开拨号 */ +#define MINOR_SMS_CONTROL 0xcb /* 短信控制上下线 */ +#define MINOR_CALL_ONLINE 0xcc /* 呼叫控制上线 */ +#define MINOR_REMOTE_PIN 0xcd /* 远程PIN功能操作 */ -//2010-12-16 ־ -#define MINOR_REMOTE_BYPASS 0xd0 /* Զ·*/ -#define MINOR_REMOTE_UNBYPASS 0xd1 /* Զ·ָ*/ -#define MINOR_REMOTE_SET_ALARMIN_CFG 0xd2 /* Զñ*/ -#define MINOR_REMOTE_GET_ALARMIN_CFG 0xd3 /* Զ̻ȡ*/ -#define MINOR_REMOTE_SET_ALARMOUT_CFG 0xd4 /* Զñ*/ -#define MINOR_REMOTE_GET_ALARMOUT_CFG 0xd5 /* Զ̻ȡ*/ -#define MINOR_REMOTE_ALARMOUT_OPEN_MAN 0xd6 /* Զֶ*/ -#define MINOR_REMOTE_ALARMOUT_CLOSE_MAN 0xd7 /* Զֶرձ*/ -#define MINOR_REMOTE_ALARM_ENABLE_CFG 0xd8 /* ԶñRS485ʹ״̬*/ -#define MINOR_DBDATA_OUTPUT 0xd9 /* ݿ¼ */ -#define MINOR_DBDATA_INPUT 0xda /* ݿ¼ */ -#define MINOR_MU_SWITCH 0xdb /* л */ -#define MINOR_MU_PTZ 0xdc /* PTZ */ -#define MINOR_DELETE_LOGO 0xdd /* ɾlogo */ -#define MINOR_REMOTE_INQUEST_DEL_FILE 0xde /*Զɾļ*/ +//2010-12-16 报警板日志 +#define MINOR_REMOTE_BYPASS 0xd0 /* 远程旁路*/ +#define MINOR_REMOTE_UNBYPASS 0xd1 /* 远程旁路恢复*/ +#define MINOR_REMOTE_SET_ALARMIN_CFG 0xd2 /* 远程设置报警输入参数*/ +#define MINOR_REMOTE_GET_ALARMIN_CFG 0xd3 /* 远程获取报警输入参数*/ +#define MINOR_REMOTE_SET_ALARMOUT_CFG 0xd4 /* 远程设置报警输出参数*/ +#define MINOR_REMOTE_GET_ALARMOUT_CFG 0xd5 /* 远程获取报警输出参数*/ +#define MINOR_REMOTE_ALARMOUT_OPEN_MAN 0xd6 /* 远程手动开启报警输出*/ +#define MINOR_REMOTE_ALARMOUT_CLOSE_MAN 0xd7 /* 远程手动关闭报警输出*/ +#define MINOR_REMOTE_ALARM_ENABLE_CFG 0xd8 /* 远程设置报警主机的RS485串口使能状态*/ +#define MINOR_DBDATA_OUTPUT 0xd9 /* 导出数据库记录 */ +#define MINOR_DBDATA_INPUT 0xda /* 导入数据库记录 */ +#define MINOR_MU_SWITCH 0xdb /* 级联切换 */ +#define MINOR_MU_PTZ 0xdc /* 级联PTZ控制 */ +#define MINOR_DELETE_LOGO 0xdd /* 删除logo */ +#define MINOR_REMOTE_INQUEST_DEL_FILE 0xde /*远程删除文件*/ -#define MINOR_LOCAL_CONF_REB_RAID 0x101 /*Զؽ*/ -#define MINOR_LOCAL_CONF_SPARE 0x102 /*ȱ*/ -#define MINOR_LOCAL_ADD_RAID 0x103 /*ش*/ -#define MINOR_LOCAL_DEL_RAID 0x104 /*ɾ*/ -#define MINOR_LOCAL_MIG_RAID 0x105 /*Ǩ*/ -#define MINOR_LOCAL_REB_RAID 0x106 /* ֶؽ*/ -#define MINOR_LOCAL_QUICK_CONF_RAID 0x107 /*һ*/ -#define MINOR_LOCAL_ADD_VD 0x108 /*ش*/ -#define MINOR_LOCAL_DEL_VD 0x109 /*ɾ*/ -#define MINOR_LOCAL_RP_VD 0x10a /*޸*/ -#define MINOR_LOCAL_FORMAT_EXPANDVD 0X10b /*չ*/ -#define MINOR_LOCAL_RAID_UPGRADE 0X10c /*raid*/ -#define MINOR_LOCAL_STOP_RAID 0x10d /*ͣRAID(ȫ)*/ -#define MINOR_REMOTE_CONF_REB_RAID 0x111 /*ԶԶؽ*/ -#define MINOR_REMOTE_CONF_SPARE 0x112 /*Զȱ*/ -#define MINOR_REMOTE_ADD_RAID 0x113 /*Զ̴*/ -#define MINOR_REMOTE_DEL_RAID 0x114 /*Զɾ*/ -#define MINOR_REMOTE_MIG_RAID 0x115 /*ԶǨ*/ -#define MINOR_REMOTE_REB_RAID 0x116 /* Զֶؽ*/ -#define MINOR_REMOTE_QUICK_CONF_RAID 0x117 /*Զһ*/ -#define MINOR_REMOTE_ADD_VD 0x118 /*Զ̴*/ -#define MINOR_REMOTE_DEL_VD 0x119 /*Զɾ*/ -#define MINOR_REMOTE_RP_VD 0x11a /*Զ޸*/ -#define MINOR_REMOTE_FORMAT_EXPANDVD 0X11b /*Զ*/ -#define MINOR_REMOTE_RAID_UPGRADE 0X11c /*Զraid*/ -#define MINOR_REMOTE_STOP_RAID 0x11d /*ԶͣRAID(ȫ)*/ -#define MINOR_LOCAL_START_PIC_REC 0x121 /*ؿʼץͼ*/ -#define MINOR_LOCAL_STOP_PIC_REC 0x122 /*ֹͣץͼ*/ -#define MINOR_LOCAL_SET_SNMP 0x125 /*SNMP*/ -#define MINOR_LOCAL_TAG_OPT 0x126 /*رǩ*/ -#define MINOR_REMOTE_START_PIC_REC 0x131 /*Զ̿ʼץͼ*/ -#define MINOR_REMOTE_STOP_PIC_REC 0x132 /*Զֹͣץͼ*/ -#define MINOR_REMOTE_SET_SNMP 0x135 /*ԶSNMP*/ -#define MINOR_REMOTE_TAG_OPT 0x136 /*Զ̱ǩ*/ -#define MINOR_REMOTE_LOGIN_LOCK 0x137 //Զ̵¼ -#define MINOR_REMOTE_LOGIN_UNLOCK 0x138 //Զ̵¼ +#define MINOR_LOCAL_CONF_REB_RAID 0x101 /*本地配置自动重建*/ +#define MINOR_LOCAL_CONF_SPARE 0x102 /*本地配置热备*/ +#define MINOR_LOCAL_ADD_RAID 0x103 /*本地创建阵列*/ +#define MINOR_LOCAL_DEL_RAID 0x104 /*本地删除阵列*/ +#define MINOR_LOCAL_MIG_RAID 0x105 /*本地迁移阵列*/ +#define MINOR_LOCAL_REB_RAID 0x106 /* 本地手动重建阵列*/ +#define MINOR_LOCAL_QUICK_CONF_RAID 0x107 /*本地一键配置*/ +#define MINOR_LOCAL_ADD_VD 0x108 /*本地创建虚拟磁盘*/ +#define MINOR_LOCAL_DEL_VD 0x109 /*本地删除虚拟磁盘*/ +#define MINOR_LOCAL_RP_VD 0x10a /*本地修复虚拟磁盘*/ +#define MINOR_LOCAL_FORMAT_EXPANDVD 0X10b /*本地扩展虚拟磁盘扩容*/ +#define MINOR_LOCAL_RAID_UPGRADE 0X10c /*本地raid卡升级*/ +#define MINOR_LOCAL_STOP_RAID 0x10d /*本地暂停RAID操作(即安全拔盘)*/ +#define MINOR_REMOTE_CONF_REB_RAID 0x111 /*远程配置自动重建*/ +#define MINOR_REMOTE_CONF_SPARE 0x112 /*远程配置热备*/ +#define MINOR_REMOTE_ADD_RAID 0x113 /*远程创建阵列*/ +#define MINOR_REMOTE_DEL_RAID 0x114 /*远程删除阵列*/ +#define MINOR_REMOTE_MIG_RAID 0x115 /*远程迁移阵列*/ +#define MINOR_REMOTE_REB_RAID 0x116 /* 远程手动重建阵列*/ +#define MINOR_REMOTE_QUICK_CONF_RAID 0x117 /*远程一键配置*/ +#define MINOR_REMOTE_ADD_VD 0x118 /*远程创建虚拟磁盘*/ +#define MINOR_REMOTE_DEL_VD 0x119 /*远程删除虚拟磁盘*/ +#define MINOR_REMOTE_RP_VD 0x11a /*远程修复虚拟磁盘*/ +#define MINOR_REMOTE_FORMAT_EXPANDVD 0X11b /*远程虚拟磁盘扩容*/ +#define MINOR_REMOTE_RAID_UPGRADE 0X11c /*远程raid卡升级*/ +#define MINOR_REMOTE_STOP_RAID 0x11d /*远程暂停RAID操作(即安全拔盘)*/ +#define MINOR_LOCAL_START_PIC_REC 0x121 /*本地开始抓图*/ +#define MINOR_LOCAL_STOP_PIC_REC 0x122 /*本地停止抓图*/ +#define MINOR_LOCAL_SET_SNMP 0x125 /*本地配置SNMP*/ +#define MINOR_LOCAL_TAG_OPT 0x126 /*本地标签操作*/ +#define MINOR_REMOTE_START_PIC_REC 0x131 /*远程开始抓图*/ +#define MINOR_REMOTE_STOP_PIC_REC 0x132 /*远程停止抓图*/ +#define MINOR_REMOTE_SET_SNMP 0x135 /*远程配置SNMP*/ +#define MINOR_REMOTE_TAG_OPT 0x136 /*远程标签操作*/ +#define MINOR_REMOTE_LOGIN_LOCK 0x137 //远程登录锁定 +#define MINOR_REMOTE_LOGIN_UNLOCK 0x138 //远程登录解锁 // 9000 v2.2.0 -#define MINOR_LOCAL_VOUT_SWITCH 0x140 /* л*/ -#define MINOR_STREAM_CABAC 0x141 /* ѹѡò*/ +#define MINOR_LOCAL_VOUT_SWITCH 0x140 /* 本地输出口切换操作*/ +#define MINOR_STREAM_CABAC 0x141 /* 码流压缩性能选项配置操作*/ //Netra 3.0.0 -#define MINOR_LOCAL_SPARE_OPT 0x142 /*N+1 ȱز*/ -#define MINOR_REMOTE_SPARE_OPT 0x143 /*ԶN+1 ȱز*/ -#define MINOR_LOCAL_IPCCFGFILE_OUTPUT 0x144 /* صipcļ*/ -#define MINOR_LOCAL_IPCCFGFILE_INPUT 0x145 /* صipcļ */ -#define MINOR_LOCAL_IPC_UPGRADE 0x146 /* IPC */ -#define MINOR_REMOTE_IPCCFGFILE_OUTPUT 0x147 /* Զ̵ipcļ*/ -#define MINOR_REMOTE_IPCCFGFILE_INPUT 0x148 /* Զ̵ipcļ*/ -#define MINOR_REMOTE_IPC_UPGRADE 0x149 /* ԶIPC */ +#define MINOR_LOCAL_SPARE_OPT 0x142 /*本地N+1 热备相关操作*/ +#define MINOR_REMOTE_SPARE_OPT 0x143 /*远程N+1 热备相关操作*/ +#define MINOR_LOCAL_IPCCFGFILE_OUTPUT 0x144 /* 本地导出ipc配置文件*/ +#define MINOR_LOCAL_IPCCFGFILE_INPUT 0x145 /* 本地导入ipc配置文件 */ +#define MINOR_LOCAL_IPC_UPGRADE 0x146 /* 本地升级IPC */ +#define MINOR_REMOTE_IPCCFGFILE_OUTPUT 0x147 /* 远程导出ipc配置文件*/ +#define MINOR_REMOTE_IPCCFGFILE_INPUT 0x148 /* 远程导入ipc配置文件*/ +#define MINOR_REMOTE_IPC_UPGRADE 0x149 /* 远程升级IPC */ -#define MINOR_LOCAL_UNLOAD_HDISK 0x150 /*жӲ*/ -#define MINOR_LOCAL_AUDIO_MIX 0x151 /*Ƶ*/ -#define MINOR_REMOTE_AUDIO_MIX 0x152 /*ԶƵ*/ -#define MINOR_LOCAL_TRIAL_PAUSE 0x153 /*ͣѶ*/ -#define MINOR_LOCAL_TRIAL_RESUME 0x154 /*ؼѶ*/ -#define MINOR_REMOTE_TRIAL_PAUSE 0x155 /*ԶͣѶ*/ -#define MINOR_REMOTE_TRIAL_RESUME 0x156 /*Զ̼Ѷ*/ -#define MINOR_REMOTE_MODIFY_VERIFICATION_CODE 0x157 /*޸ƽ̨֤*/ +#define MINOR_LOCAL_UNLOAD_HDISK 0x150 /*本地卸载硬盘*/ +#define MINOR_LOCAL_AUDIO_MIX 0x151 /*本地配置音频混音参数*/ +#define MINOR_REMOTE_AUDIO_MIX 0x152 /*远程配置音频混音参数*/ +#define MINOR_LOCAL_TRIAL_PAUSE 0x153 /*本地暂停讯问*/ +#define MINOR_LOCAL_TRIAL_RESUME 0x154 /*本地继续讯问*/ +#define MINOR_REMOTE_TRIAL_PAUSE 0x155 /*远程暂停讯问*/ +#define MINOR_REMOTE_TRIAL_RESUME 0x156 /*远程继续讯问*/ +#define MINOR_REMOTE_MODIFY_VERIFICATION_CODE 0x157 /*修改平台的验证码*/ -#define MINOR_LOCAL_MAKECALL 0x180 /*غ*/ -#define MINOR_LOCAL_REJECTCALL 0x181 /*ؾܽ*/ -#define MINOR_LOCAL_ANSWERCALL 0x182 /*ؽ*/ -#define MINOR_LOCAL_HANGUPCALL 0x183 /*عҶ*/ +#define MINOR_LOCAL_MAKECALL 0x180 /*本地呼叫*/ +#define MINOR_LOCAL_REJECTCALL 0x181 /*本地拒接*/ +#define MINOR_LOCAL_ANSWERCALL 0x182 /*本地接听*/ +#define MINOR_LOCAL_HANGUPCALL 0x183 /*本地挂断*/ -#define MINOR_REMOTE_MAKECALL 0x188 /*Զ̺*/ -#define MINOR_REMOTE_REJECTCALL 0x189 /*Զ̾ܽ*/ -#define MINOR_REMOTE_ANSWERCALL 0x18a /*Զ̽*/ -#define MINOR_REMOTE_HANGUPCALL 0x18b /*Զ̹Ҷ*/ +#define MINOR_REMOTE_MAKECALL 0x188 /*远程呼叫*/ +#define MINOR_REMOTE_REJECTCALL 0x189 /*远程拒接*/ +#define MINOR_REMOTE_ANSWERCALL 0x18a /*远程接听*/ +#define MINOR_REMOTE_HANGUPCALL 0x18b /*远程挂断*/ -#define MINOR_LOCAL_CHANNEL_ORDERED 0x19b /*ͨ*/ +#define MINOR_LOCAL_CHANNEL_ORDERED 0x19b /*本地通道排序*/ -#define MINOR_SET_MULTI_MASTER 0x201 /*ô*/ -#define MINOR_SET_MULTI_SLAVE 0x202 /*ô*/ -#define MINOR_CANCEL_MULTI_MASTER 0x203 /*ȡ*/ -#define MINOR_CANCEL_MULTI_SLAVE 0x204 /*ȡ*/ +#define MINOR_SET_MULTI_MASTER 0x201 /*设置大屏主屏*/ +#define MINOR_SET_MULTI_SLAVE 0x202 /*设置大屏子屏*/ +#define MINOR_CANCEL_MULTI_MASTER 0x203 /*取消大屏主屏*/ +#define MINOR_CANCEL_MULTI_SLAVE 0x204 /*取消大屏子屏*/ -#define MINOR_DISPLAY_LOGO 0x205 /*ʾLOGO*/ -#define MINOR_HIDE_LOGO 0x206 /*LOGO*/ -#define MINOR_SET_DEC_DELAY_LEVEL 0x207 /*ͨʱ*/ -#define MINOR_SET_BIGSCREEN_DIPLAY_AREA 0x208 /*ôʾ*/ -#define MINOR_CUT_VIDEO_SOURCE 0x209 /*ƵԴи*/ -#define MINOR_SET_BASEMAP_AREA 0x210 /*ͼ*/ -#define MINOR_DOWNLOAD_BASEMAP 0x211 /*شͼ*/ -#define MINOR_CUT_BASEMAP 0x212 /*ͼи*/ -#define MINOR_CONTROL_ELEC_ENLARGE 0x213 /*ӷŴ(Ŵԭ)*/ -#define MINOR_SET_OUTPUT_RESOLUTION 0x214 /*ʾֱ*/ -#define MINOR_SET_TRANCSPARENCY 0X215 /*ͼ͸*/ -#define MINOR_SET_OSD 0x216 /*ʾOSD*/ -#define MINOR_RESTORE_DEC_STATUS 0x217 /*ָʼ״̬(лʱָʼ״̬)*/ +#define MINOR_DISPLAY_LOGO 0x205 /*显示LOGO*/ +#define MINOR_HIDE_LOGO 0x206 /*隐藏LOGO*/ +#define MINOR_SET_DEC_DELAY_LEVEL 0x207 /*解码通道延时级别设置*/ +#define MINOR_SET_BIGSCREEN_DIPLAY_AREA 0x208 /*设置大屏显示区域*/ +#define MINOR_CUT_VIDEO_SOURCE 0x209 /*大屏视频源切割设置*/ +#define MINOR_SET_BASEMAP_AREA 0x210 /*大屏底图区域设置*/ +#define MINOR_DOWNLOAD_BASEMAP 0x211 /*下载大屏底图*/ +#define MINOR_CUT_BASEMAP 0x212 /*底图切割配置*/ +#define MINOR_CONTROL_ELEC_ENLARGE 0x213 /*电子放大操作(放大或还原)*/ +#define MINOR_SET_OUTPUT_RESOLUTION 0x214 /*显示输出分辨率设置*/ +#define MINOR_SET_TRANCSPARENCY 0X215 /*图层透明度设置*/ +#define MINOR_SET_OSD 0x216 /*显示OSD设置*/ +#define MINOR_RESTORE_DEC_STATUS 0x217 /*恢复初始状态(场景切换时,解码恢复初始状态)*/ -//2011-11-11 Ӵ־ -#define MINOR_SCREEN_OPEN_SCREEN 0x218 //Ļ -#define MINOR_SCREEN_CLOSE_SCREEN 0x219 //رĻ -#define MINOR_SCREEN_SWITCH_SIGNAL 0x21a //źԴл -#define MINOR_SCREEN_MODIFY_NETWORK 0x21b // -#define MINOR_SCREEN_MODIFY_LEDRES 0x21c //LEDֱ -#define MINOR_SCREEN_SHOW_NORMAL 0x21d //ôͨʾģʽ -#define MINOR_SCREEN_SHOW_TILE 0x21e //ôƽʾģʽ -#define MINOR_SCREEN_DEC_NORMAL 0x21f //ͨģʽ -#define MINOR_SCREEN_DEC_LOWLATENCY 0x220 //õʱģʽ -#define MINOR_SCREEN_MODIFY_SELFRES 0x221 //źԴԶֱ -#define MINOR_SCREEN_OUTPUT_POSITION 0x222 //ڹĻ -#define MINOR_SCREEN_IMAGE_ENHANCE 0x223 //ͼǿ -#define MINOR_SCREEN_JOIN_SIGNAL 0x224 //źԴƴ -#define MINOR_SCREEN_SIGNAL_OSD 0x225 //źԴַ -#define MINOR_SCREEN_ASSOCIATED_INTERACTION 0x226 //źԴ -#define MINOR_SCREEN_MODIFY_MATRIX 0x227 //þ -#define MINOR_SCREEN_WND_TOP_KEEP 0x228 //ö -#define MINOR_SCREEN_WND_OPEN_KEEP 0x229 //ڴ򿪱 -#define MINOR_SCREEN_WALL_MIRROR 0x22a //ǽ -#define MINOR_SCREEN_UPLOAD_BASEMAP 0x22b //ϴͼ -#define MINOR_SCREEN_SHOW_BASEMAP 0x22c //ʾͼ -#define MINOR_SCREEN_HIDE_BASEMAP 0x22d //صͼ -#define MINOR_SCREEN_MODIFY_SERIAL 0x22e //ôڲ +//2011-11-11 增加大屏控制器操作日志次类型 +#define MINOR_SCREEN_OPEN_SCREEN 0x218 //打开屏幕 +#define MINOR_SCREEN_CLOSE_SCREEN 0x219 //关闭屏幕 +#define MINOR_SCREEN_SWITCH_SIGNAL 0x21a //信号源切换 +#define MINOR_SCREEN_MODIFY_NETWORK 0x21b //配置网络参数 +#define MINOR_SCREEN_MODIFY_LEDRES 0x21c //配置输出口LED分辨率 +#define MINOR_SCREEN_SHOW_NORMAL 0x21d //配置窗口普通显示模式 +#define MINOR_SCREEN_SHOW_TILE 0x21e //配置窗口平铺显示模式 +#define MINOR_SCREEN_DEC_NORMAL 0x21f //配置普通解码模式 +#define MINOR_SCREEN_DEC_LOWLATENCY 0x220 //配置低延时解码模式 +#define MINOR_SCREEN_MODIFY_SELFRES 0x221 //配置信号源自定义分辨率 +#define MINOR_SCREEN_OUTPUT_POSITION 0x222 //输出口关联屏幕 +#define MINOR_SCREEN_IMAGE_ENHANCE 0x223 //图像增强 +#define MINOR_SCREEN_JOIN_SIGNAL 0x224 //信号源拼接 +#define MINOR_SCREEN_SIGNAL_OSD 0x225 //信号源字符叠加 +#define MINOR_SCREEN_ASSOCIATED_INTERACTION 0x226 //信号源关联多屏互动服务器 +#define MINOR_SCREEN_MODIFY_MATRIX 0x227 //配置矩阵参数 +#define MINOR_SCREEN_WND_TOP_KEEP 0x228 //窗口置顶保持 +#define MINOR_SCREEN_WND_OPEN_KEEP 0x229 //窗口打开保持 +#define MINOR_SCREEN_WALL_MIRROR 0x22a //电视墙区域镜像 +#define MINOR_SCREEN_UPLOAD_BASEMAP 0x22b //上传底图 +#define MINOR_SCREEN_SHOW_BASEMAP 0x22c //显示底图 +#define MINOR_SCREEN_HIDE_BASEMAP 0x22d //隐藏底图 +#define MINOR_SCREEN_MODIFY_SERIAL 0x22e //配置串口参数 -#define MINOR_SCREEN_SET_INPUT 0x251 /*޸Դ*/ -#define MINOR_SCREEN_SET_OUTPUT 0x252 /*޸ͨ*/ -#define MINOR_SCREEN_SET_OSD 0x253 /*޸LED*/ -#define MINOR_SCREEN_SET_LOGO 0x254 /*޸LOGO*/ -#define MINOR_SCREEN_SET_LAYOUT 0x255 /*ò*/ -#define MINOR_SCREEN_PICTUREPREVIEW 0x256 /*Բ*/ +#define MINOR_SCREEN_SET_INPUT 0x251 /*修改输入源*/ +#define MINOR_SCREEN_SET_OUTPUT 0x252 /*修改输出通道*/ +#define MINOR_SCREEN_SET_OSD 0x253 /*修改虚拟LED*/ +#define MINOR_SCREEN_SET_LOGO 0x254 /*修改LOGO*/ +#define MINOR_SCREEN_SET_LAYOUT 0x255 /*设置布局*/ +#define MINOR_SCREEN_PICTUREPREVIEW 0x256 /*回显操作*/ -//2012-06-14 CVCS2.0, õȲV1.0 V1.1Ѿˣʱ豸־ûж -#define MINOR_SCREEN_GET_OSD 0x257 /*ȡLED*/ -#define MINOR_SCREEN_GET_LAYOUT 0x258 /*ȡ*/ -#define MINOR_SCREEN_LAYOUT_CTRL 0x259 /*ֿ*/ -#define MINOR_GET_ALL_VALID_WND 0x260 /*ȡЧ*/ -#define MINOR_GET_SIGNAL_WND 0x261 /*ȡϢ*/ -#define MINOR_WINDOW_CTRL 0x262 /*ڿ*/ -#define MINOR_GET_LAYOUT_LIST 0x263 /*ȡб*/ -#define MINOR_LAYOUT_CTRL 0x264 /*ֿ*/ -#define MINOR_SET_LAYOUT 0x265 /*ò*/ -#define MINOR_GET_SIGNAL_LIST 0x266 /*ȡźԴб*/ -#define MINOR_GET_PLAN_LIST 0x267 /*ȡԤб*/ -#define MINOR_SET_PLAN 0x268 /*޸Ԥ*/ -#define MINOR_CTRL_PLAN 0x269 /*Ԥ*/ -#define MINOR_CTRL_SCREEN 0x270 /*Ļ*/ -#define MINOR_ADD_NETSIG 0x271 /*źԴ*/ -#define MINOR_SET_NETSIG 0x272 /*޸źԴ*/ -#define MINOR_SET_DECBDCFG 0x273 /*ý*/ -#define MINOR_GET_DECBDCFG 0x274 /*ȡ*/ -#define MINOR_GET_DEVICE_STATUS 0x275 /*ȡ豸Ϣ*/ -#define MINOR_UPLOAD_PICTURE 0x276 /*ͼϴ*/ -#define MINOR_SET_USERPWD 0x277 /*û*/ -#define MINOR_ADD_LAYOUT 0x278 /*Ӳ*/ -#define MINOR_DEL_LAYOUT 0x279 /*ɾ*/ -#define MINOR_DEL_NETSIG 0x280 /*ɾźԴ*/ -#define MINOR_ADD_PLAN 0x281 /*Ԥ*/ -#define MINOR_DEL_PLAN 0x282 /*ɾԤ*/ -#define MINOR_GET_EXTERNAL_MATRIX_CFG 0x283 //ȡӾ -#define MINOR_SET_EXTERNAL_MATRIX_CFG 0x284 //Ӿ -#define MINOR_GET_USER_CFG 0x285 //ȡû -#define MINOR_SET_USER_CFG 0x286 //û -#define MINOR_GET_DISPLAY_PANEL_LINK_CFG 0x287 //ȡʾǽ -#define MINOR_SET_DISPLAY_PANEL_LINK_CFG 0x288 //ʾǽ +//2012-06-14 CVCS2.0, 窗口设置等操作在V1.0, V1.1中已经有了,当时在设备日志中没有定义 +#define MINOR_SCREEN_GET_OSD 0x257 /*获取虚拟LED*/ +#define MINOR_SCREEN_GET_LAYOUT 0x258 /*获取布局*/ +#define MINOR_SCREEN_LAYOUT_CTRL 0x259 /*布局控制*/ +#define MINOR_GET_ALL_VALID_WND 0x260 /*获取所有有效窗口*/ +#define MINOR_GET_SIGNAL_WND 0x261 /*获取单个窗口信息*/ +#define MINOR_WINDOW_CTRL 0x262 /*窗口控制*/ +#define MINOR_GET_LAYOUT_LIST 0x263 /*获取布局列表*/ +#define MINOR_LAYOUT_CTRL 0x264 /*布局控制*/ +#define MINOR_SET_LAYOUT 0x265 /*设置布局*/ +#define MINOR_GET_SIGNAL_LIST 0x266 /*获取输入信号源列表*/ +#define MINOR_GET_PLAN_LIST 0x267 /*获取预案列表*/ +#define MINOR_SET_PLAN 0x268 /*修改预案*/ +#define MINOR_CTRL_PLAN 0x269 /*控制预案*/ +#define MINOR_CTRL_SCREEN 0x270 /*屏幕控制*/ +#define MINOR_ADD_NETSIG 0x271 /*添加信号源*/ +#define MINOR_SET_NETSIG 0x272 /*修改信号源*/ +#define MINOR_SET_DECBDCFG 0x273 /*设置解码板参数*/ +#define MINOR_GET_DECBDCFG 0x274 /*获取解码板参数*/ +#define MINOR_GET_DEVICE_STATUS 0x275 /*获取设备信息*/ +#define MINOR_UPLOAD_PICTURE 0x276 /*底图上传*/ +#define MINOR_SET_USERPWD 0x277 /*设置用户密码*/ +#define MINOR_ADD_LAYOUT 0x278 /*添加布局*/ +#define MINOR_DEL_LAYOUT 0x279 /*删除布局*/ +#define MINOR_DEL_NETSIG 0x280 /*删除信号源*/ +#define MINOR_ADD_PLAN 0x281 /*添加预案*/ +#define MINOR_DEL_PLAN 0x282 /*删除预案*/ +#define MINOR_GET_EXTERNAL_MATRIX_CFG 0x283 //获取外接矩阵配置 +#define MINOR_SET_EXTERNAL_MATRIX_CFG 0x284 //设置外接矩阵配置 +#define MINOR_GET_USER_CFG 0x285 //获取用户配置 +#define MINOR_SET_USER_CFG 0x286 //设置用户配置 +#define MINOR_GET_DISPLAY_PANEL_LINK_CFG 0x287 //获取显示墙连接配置 +#define MINOR_SET_DISPLAY_PANEL_LINK_CFG 0x288 //设置显示墙连接配置 -#define MINOR_GET_WALLSCENE_PARAM 0x289 //ȡǽ -#define MINOR_SET_WALLSCENE_PARAM 0x28a //õǽ -#define MINOR_GET_CURRENT_WALLSCENE 0x28b //ȡǰʹó -#define MINOR_SWITCH_WALLSCENE 0x28c //л -#define MINOR_SIP_LOGIN 0x28d //SIPעɹ -#define MINOR_VOIP_START 0x28e //VOIPԽʼ -#define MINOR_VOIP_STOP 0x28f //VOIPԽֹͣ -#define MINOR_WIN_TOP 0x290 //ǽö -#define MINOR_WIN_BOTTOM 0x291 //ǽõ -#define MINOR_SET_USER_ADD_CFG 0x292 //û -#define MINOR_SET_USER_MODF_CFG 0x293 //޸û -#define MINOR_SET_USER_DEL_CFG 0x294 //ɾû +#define MINOR_GET_WALLSCENE_PARAM 0x289 //获取电视墙场景 +#define MINOR_SET_WALLSCENE_PARAM 0x28a //设置电视墙场景 +#define MINOR_GET_CURRENT_WALLSCENE 0x28b //获取当前使用场景 +#define MINOR_SWITCH_WALLSCENE 0x28c //场景切换 +#define MINOR_SIP_LOGIN 0x28d //SIP注册成功 +#define MINOR_VOIP_START 0x28e //VOIP对讲开始 +#define MINOR_VOIP_STOP 0x28f //VOIP对讲停止 +#define MINOR_WIN_TOP 0x290 //电视墙窗口置顶 +#define MINOR_WIN_BOTTOM 0x291 //电视墙窗口置底 +#define MINOR_SET_USER_ADD_CFG 0x292 //增加用户 +#define MINOR_SET_USER_MODF_CFG 0x293 //修改用户 +#define MINOR_SET_USER_DEL_CFG 0x294 //删除用户 // Netra 2.2.2 -#define MINOR_LOCAL_LOAD_HDISK 0x300 //ؼӲ -#define MINOR_LOCAL_DELETE_HDISK 0x301 //ɾ쳣ڵӲ +#define MINOR_LOCAL_LOAD_HDISK 0x300 //本地加载硬盘 +#define MINOR_LOCAL_DELETE_HDISK 0x301 //本地删除异常不存在的硬盘 //KY2013 3.0.0 -#define MINOR_LOCAL_MAIN_AUXILIARY_PORT_SWITCH 0X302 //л -#define MINOR_LOCAL_HARD_DISK_CHECK 0x303 //ӲԼ +#define MINOR_LOCAL_MAIN_AUXILIARY_PORT_SWITCH 0X302 //本地主辅口切换 +#define MINOR_LOCAL_HARD_DISK_CHECK 0x303 //本地物理硬盘自检 //Netra3.1.0 -#define MINOR_LOCAL_CFG_DEVICE_TYPE 0x310 //豸 -#define MINOR_REMOTE_CFG_DEVICE_TYPE 0x311 //Զ豸 -#define MINOR_LOCAL_CFG_WORK_HOT_SERVER 0x312 //ùȱ -#define MINOR_REMOTE_CFG_WORK_HOT_SERVER 0x313 //Զùȱ -#define MINOR_LOCAL_DELETE_WORK 0x314 //ɾ -#define MINOR_REMOTE_DELETE_WORK 0x315 //Զɾ -#define MINOR_LOCAL_ADD_WORK 0x316 //ӹ -#define MINOR_REMOTE_ADD_WORK 0x317 //Զӹ -#define MINOR_LOCAL_IPCHEATMAP_OUTPUT 0x318 /* صȶͼļ */ -#define MINOR_LOCAL_IPCHEATFLOW_OUTPUT 0x319 /* صȶļ */ -#define MINOR_REMOTE_SMS_SEND 0x350 /*Զ̷Ͷ*/ -#define MINOR_LOCAL_SMS_SEND 0x351 /*طͶ*/ -#define MINOR_ALARM_SMS_SEND 0x352 /*Ͷű*/ -#define MINOR_SMS_RECV 0x353 /*ն*/ -//ע0x3500x351ָ˹GUIIEؼϱ༭Ͷţ -#define MINOR_LOCAL_SMS_SEARCH 0x354 /**/ -#define MINOR_REMOTE_SMS_SEARCH 0x355 /*Զ*/ -#define MINOR_LOCAL_SMS_READ 0x356 /*ز鿴*/ -#define MINOR_REMOTE_SMS_READ 0x357 /*Զ̲鿴*/ -#define MINOR_REMOTE_DIAL_CONNECT 0x358 /*Զֶ̿*/ -#define MINOR_REMOTE_DIAL_DISCONN 0x359 /*Զֶֹͣ*/ -#define MINOR_LOCAL_ALLOWLIST_SET 0x35A /**/ -#define MINOR_REMOTE_ALLOWLIST_SET 0x35B /*Զ*/ -#define MINOR_LOCAL_DIAL_PARA_SET 0x35C /*òŲ*/ -#define MINOR_REMOTE_DIAL_PARA_SET 0x35D /*ԶòŲ*/ -#define MINOR_LOCAL_DIAL_SCHEDULE_SET 0x35E /*òżƻ*/ -#define MINOR_REMOTE_DIAL_SCHEDULE_SET 0x35F /*Զòżƻ*/ -#define MINOR_PLAT_OPER 0x360 /* ƽ̨*/ -#define MINOR_REMOTE_CFG_POE_WORK_MODE 0x361//ԶPOEģʽ -#define MINOR_LOCAL_CFG_POE_WORK_MODE 0x362//POEģʽ -#define MINOR_REMOTE_CFG_FACE_CONTRAST 0x363//Զȶ -#define MINOR_LOCAL_CFG_FACE_CONTRAST 0x364//ȶ -#define MINOR_REMOTE_CFG_ALLOWLIST_FACE_CONTRAST 0x365//Զȶ -#define MINOR_LOCAL_CFG_ALLOWLIST_FACE_CONTRAST 0x366//ȶ -#define MINOR_LOCAL_CHECK_TIME 0x367 //ֶУʱ -#define MINOR_VCA_ONEKEY_EXPORT_PICTURE 0x368 //һͼƬ -#define MINOR_VCA_ONEKEY_DELETE_PICTURE 0x369 //һɾͼƬ -#define MINOR_VCA_ONEKEY_EXPORT_VIDEO 0x36a //һ¼ -#define MINOR_VCA_ONEKEY_DELETE_VIDEO 0x36b //һɾ¼ -#define MINOR_REMOTE_CFG_WIRELESS_DIALPARAM 0x36c /*Զ߲Ų*/ -#define MINOR_LOCAL_CFG_WIRELESS_DIALPARAM 0x36d /*߲Ų*/ -#define MINOR_REMOTE_CFG_WIRELESS_SMSPARAM 0x36e /*Զ߶ò*/ -#define MINOR_LOCAL_CFG_WIRELESS_SMSPARAM 0x36f /*߶ò*/ -#define MINOR_REMOTE_CFG_WIRELESS_SMSSElFHELP 0x370 /*Զ߶ò*/ -#define MINOR_LOCAL_CFG_WIRELESS_SMSSElFHELP 0x371 /*߶ò*/ -#define MINOR_REMOTE_CFG_WIRELESS_NETFLOWPARAM 0x372 /*Զò*/ -#define MINOR_LOCAL_CFG_WIRELESS_NETFLOWPARAM 0x373 /*ò*/ +#define MINOR_LOCAL_CFG_DEVICE_TYPE 0x310 //本地配置设备类型 +#define MINOR_REMOTE_CFG_DEVICE_TYPE 0x311 //远程配置设备类型 +#define MINOR_LOCAL_CFG_WORK_HOT_SERVER 0x312 //本地配置工作机热备服务器 +#define MINOR_REMOTE_CFG_WORK_HOT_SERVER 0x313 //远程配置工作机热备服务器 +#define MINOR_LOCAL_DELETE_WORK 0x314 //本地删除工作机 +#define MINOR_REMOTE_DELETE_WORK 0x315 //远程删除工作机 +#define MINOR_LOCAL_ADD_WORK 0x316 //本地添加工作机 +#define MINOR_REMOTE_ADD_WORK 0x317 //远程添加工作机 +#define MINOR_LOCAL_IPCHEATMAP_OUTPUT 0x318 /* 本地导出热度图文件 */ +#define MINOR_LOCAL_IPCHEATFLOW_OUTPUT 0x319 /* 本地导出热度流量文件 */ +#define MINOR_REMOTE_SMS_SEND 0x350 /*远程发送短信*/ +#define MINOR_LOCAL_SMS_SEND 0x351 /*本地发送短信*/ +#define MINOR_ALARM_SMS_SEND 0x352 /*发送短信报警*/ +#define MINOR_SMS_RECV 0x353 /*接收短信*/ +//(备注:0x350、0x351是指人工在GUI或IE控件上编辑并发送短信) +#define MINOR_LOCAL_SMS_SEARCH 0x354 /*本地搜索短信*/ +#define MINOR_REMOTE_SMS_SEARCH 0x355 /*远程搜索短信*/ +#define MINOR_LOCAL_SMS_READ 0x356 /*本地查看短信*/ +#define MINOR_REMOTE_SMS_READ 0x357 /*远程查看短信*/ +#define MINOR_REMOTE_DIAL_CONNECT 0x358 /*远程开启手动拨号*/ +#define MINOR_REMOTE_DIAL_DISCONN 0x359 /*远程停止手动拨号*/ +#define MINOR_LOCAL_ALLOWLIST_SET 0x35A /*本地配置允许名单*/ +#define MINOR_REMOTE_ALLOWLIST_SET 0x35B /*远程配置允许名单*/ +#define MINOR_LOCAL_DIAL_PARA_SET 0x35C /*本地配置拨号参数*/ +#define MINOR_REMOTE_DIAL_PARA_SET 0x35D /*远程配置拨号参数*/ +#define MINOR_LOCAL_DIAL_SCHEDULE_SET 0x35E /*本地配置拨号计划*/ +#define MINOR_REMOTE_DIAL_SCHEDULE_SET 0x35F /*远程配置拨号计划*/ +#define MINOR_PLAT_OPER 0x360 /* 平台操作*/ +#define MINOR_REMOTE_CFG_POE_WORK_MODE 0x361//远程设置POE工作模式 +#define MINOR_LOCAL_CFG_POE_WORK_MODE 0x362//本地设置POE工作模式 +#define MINOR_REMOTE_CFG_FACE_CONTRAST 0x363//远程设置人脸比对配置 +#define MINOR_LOCAL_CFG_FACE_CONTRAST 0x364//本地设置人脸比对配置 +#define MINOR_REMOTE_CFG_ALLOWLIST_FACE_CONTRAST 0x365//远程设置允许名单人脸比对配置 +#define MINOR_LOCAL_CFG_ALLOWLIST_FACE_CONTRAST 0x366//本地设置允许名单人脸比对配置 +#define MINOR_LOCAL_CHECK_TIME 0x367 //本地手动校时 +#define MINOR_VCA_ONEKEY_EXPORT_PICTURE 0x368 //一键导出图片 +#define MINOR_VCA_ONEKEY_DELETE_PICTURE 0x369 //一键删除图片 +#define MINOR_VCA_ONEKEY_EXPORT_VIDEO 0x36a //一键导出录像 +#define MINOR_VCA_ONEKEY_DELETE_VIDEO 0x36b //一键删除录像 +#define MINOR_REMOTE_CFG_WIRELESS_DIALPARAM 0x36c /*远程配置无线拨号参数*/ +#define MINOR_LOCAL_CFG_WIRELESS_DIALPARAM 0x36d /*本地配置无线拨号参数*/ +#define MINOR_REMOTE_CFG_WIRELESS_SMSPARAM 0x36e /*远程配置无线短信配置参数*/ +#define MINOR_LOCAL_CFG_WIRELESS_SMSPARAM 0x36f /*本地配置无线短信配置参数*/ +#define MINOR_REMOTE_CFG_WIRELESS_SMSSElFHELP 0x370 /*远程配置无线短信自助配置参数*/ +#define MINOR_LOCAL_CFG_WIRELESS_SMSSElFHELP 0x371 /*本地配置无线短信自助配置参数*/ +#define MINOR_REMOTE_CFG_WIRELESS_NETFLOWPARAM 0x372 /*远程配置无线流量配置参数*/ +#define MINOR_LOCAL_CFG_WIRELESS_NETFLOWPARAM 0x373 /*本地配置无线流量配置参数*/ -//0x400-0x1000 Ž -#define MINOR_REMOTE_OPEN_DOOR 0x400 //Զ̿ -#define MINOR_REMOTE_CLOSE_DOOR 0x401 //Զ̹(ܿ) -#define MINOR_REMOTE_ALWAYS_OPEN 0x402 //Զ̳() -#define MINOR_REMOTE_ALWAYS_CLOSE 0x403 //Զ̳() -#define MINOR_REMOTE_CHECK_TIME 0x404 //ԶֶУʱ -#define MINOR_NTP_CHECK_TIME 0x405 //NTPԶУʱ -#define MINOR_REMOTE_CLEAR_CARD 0x406 //Զտ -#define MINOR_REMOTE_RESTORE_CFG 0x407 //Զָ̻Ĭϲ -#define MINOR_ALARMIN_ARM 0x408 // -#define MINOR_ALARMIN_DISARM 0x409 // -#define MINOR_LOCAL_RESTORE_CFG 0x40a //ػָĬϲ -#define MINOR_REMOTE_CAPTURE_PIC 0x40b //Զץ -#define MINOR_MOD_NET_REPORT_CFG 0x40c //޸IJ -#define MINOR_MOD_GPRS_REPORT_PARAM 0x40d //޸GPRSIJ -#define MINOR_MOD_REPORT_GROUP_PARAM 0x40e //޸ -#define MINOR_UNLOCK_PASSWORD_OPEN_DOOR 0x40f // -#define MINOR_AUTO_RENUMBER 0x410 //Զ± -#define MINOR_AUTO_COMPLEMENT_NUMBER 0x411 //Զ -#define MINOR_NORMAL_CFGFILE_INPUT 0x412 //ͨļ -#define MINOR_NORMAL_CFGFILE_OUTTPUT 0x413 //ͨļ -#define MINOR_CARD_RIGHT_INPUT 0x414 //뿨Ȩ޲ -#define MINOR_CARD_RIGHT_OUTTPUT 0x415 //Ȩ޲ -#define MINOR_LOCAL_USB_UPGRADE 0x416 //U -#define MINOR_REMOTE_VISITOR_CALL_LADDER 0x417 //ÿͺ -#define MINOR_REMOTE_HOUSEHOLD_CALL_LADDER 0x418 //ס -#define MINOR_REMOTE_ACTUAL_GUARD 0x419 //Զʵʱ -#define MINOR_REMOTE_ACTUAL_UNGUARD 0x41a //Զʵʱ -#define MINOR_REMOTE_CONTROL_NOT_CODE_OPER_FAILED 0x41b //ңδʧ -#define MINOR_REMOTE_CONTROL_CLOSE_DOOR 0x41c //ң -#define MINOR_REMOTE_CONTROL_OPEN_DOOR 0x41d //ң -#define MINOR_REMOTE_CONTROL_ALWAYS_OPEN_DOOR 0x41e //ң -#define MINOR_M1_CARD_ENCRYPT_VERIFY_OPEN 0x41f /*M1֤ܿ*/ -#define MINOR_M1_CARD_ENCRYPT_VERIFY_CLOSE 0x420 /*M1֤ܹر*/ -#define MINOR_NFC_FUNCTION_OPEN 0x421 /*NFCŹܿ*/ -#define MINOR_NFC_FUNCTION_CLOSE 0x422 /*NFCŹܹر*/ -#define MINOR_OFFLINE_DATA_OUTPUT 0x423 //߲ɼݵ -#define MINOR_CREATE_SSH_LINK 0x42d //SSH -#define MINOR_CLOSE_SSH_LINK 0x42e //ϿSSH -#define MINOR_LOCAL_IMPORT_USERINFO 0x42f //صԱݣԱȨޣģ壬ͼƬ¼ͣ -#define MINOR_LOCAL_EXPORT_USERINFO 0x430 //صԱ -#define MINOR_CREATE_CERTIFICATE 0x431 //֤飨SSLͨŵ֤飬SDKTLSHTTPSȣ -#define MINOR_UPLOAD_CERTIFICATE 0x432 //ϴ֤ -#define MINOR_DELETE_CERTIFICATE 0x433 //ɾ֤ -#define MINOR_COMSUME_ARM 0x434 //Ѳ -#define MINOR_COMSUME_DISARM 0x435 //ѳ -#define MINOR_ORCODE_KEY_MODIFY 0x436 //άԿ޸ +//0x400-0x1000 门禁操作类型 +#define MINOR_REMOTE_OPEN_DOOR 0x400 //远程开门 +#define MINOR_REMOTE_CLOSE_DOOR 0x401 //远程关门(受控) +#define MINOR_REMOTE_ALWAYS_OPEN 0x402 //远程常开(自由) +#define MINOR_REMOTE_ALWAYS_CLOSE 0x403 //远程常关(禁用) +#define MINOR_REMOTE_CHECK_TIME 0x404 //远程手动校时 +#define MINOR_NTP_CHECK_TIME 0x405 //NTP自动校时 +#define MINOR_REMOTE_CLEAR_CARD 0x406 //远程清空卡号 +#define MINOR_REMOTE_RESTORE_CFG 0x407 //远程恢复默认参数 +#define MINOR_ALARMIN_ARM 0x408 //防区布防 +#define MINOR_ALARMIN_DISARM 0x409 //防区撤防 +#define MINOR_LOCAL_RESTORE_CFG 0x40a //本地恢复默认参数 +#define MINOR_REMOTE_CAPTURE_PIC 0x40b //远程抓拍 +#define MINOR_MOD_NET_REPORT_CFG 0x40c //修改网络中心参数配置 +#define MINOR_MOD_GPRS_REPORT_PARAM 0x40d //修改GPRS中心参数配置 +#define MINOR_MOD_REPORT_GROUP_PARAM 0x40e //修改中心组参数配置 +#define MINOR_UNLOCK_PASSWORD_OPEN_DOOR 0x40f //解除码输入 +#define MINOR_AUTO_RENUMBER 0x410 //自动重新编号 +#define MINOR_AUTO_COMPLEMENT_NUMBER 0x411 //自动补充编号 +#define MINOR_NORMAL_CFGFILE_INPUT 0x412 //导入普通配置文件 +#define MINOR_NORMAL_CFGFILE_OUTTPUT 0x413 //导出普通配置文件 +#define MINOR_CARD_RIGHT_INPUT 0x414 //导入卡权限参数 +#define MINOR_CARD_RIGHT_OUTTPUT 0x415 //导出卡权限参数 +#define MINOR_LOCAL_USB_UPGRADE 0x416 //本地U盘升级 +#define MINOR_REMOTE_VISITOR_CALL_LADDER 0x417 //访客呼梯 +#define MINOR_REMOTE_HOUSEHOLD_CALL_LADDER 0x418 //住户呼梯 +#define MINOR_REMOTE_ACTUAL_GUARD 0x419 //远程实时布防 +#define MINOR_REMOTE_ACTUAL_UNGUARD 0x41a //远程实时撤防 +#define MINOR_REMOTE_CONTROL_NOT_CODE_OPER_FAILED 0x41b //遥控器未对码操作失败 +#define MINOR_REMOTE_CONTROL_CLOSE_DOOR 0x41c //遥控器关门 +#define MINOR_REMOTE_CONTROL_OPEN_DOOR 0x41d //遥控器开门 +#define MINOR_REMOTE_CONTROL_ALWAYS_OPEN_DOOR 0x41e //遥控器常开门 +#define MINOR_M1_CARD_ENCRYPT_VERIFY_OPEN 0x41f /*M1卡加密验证功能开启*/ +#define MINOR_M1_CARD_ENCRYPT_VERIFY_CLOSE 0x420 /*M1卡加密验证功能关闭*/ +#define MINOR_NFC_FUNCTION_OPEN 0x421 /*NFC开门功能开启*/ +#define MINOR_NFC_FUNCTION_CLOSE 0x422 /*NFC开门功能关闭*/ +#define MINOR_OFFLINE_DATA_OUTPUT 0x423 //离线采集数据导出 +#define MINOR_CREATE_SSH_LINK 0x42d //建立SSH连接 +#define MINOR_CLOSE_SSH_LINK 0x42e //断开SSH连接 +#define MINOR_LOCAL_IMPORT_USERINFO 0x42f //本地导入人员数据(导入人员权限,模板,人脸图片都用这个事件类型) +#define MINOR_LOCAL_EXPORT_USERINFO 0x430 //本地导出人员数据 +#define MINOR_CREATE_CERTIFICATE 0x431 //创建证书(用于SSL通信的证书,包括SDK的TLS和HTTPS等) +#define MINOR_UPLOAD_CERTIFICATE 0x432 //上传证书 +#define MINOR_DELETE_CERTIFICATE 0x433 //删除证书 +#define MINOR_COMSUME_ARM 0x434 //消费布防 +#define MINOR_COMSUME_DISARM 0x435 //消费撤防 +#define MINOR_ORCODE_KEY_MODIFY 0x436 //二维码密钥修改 -#define MINOR_OPERATION_CUSTOM1 0x900 //ŽԶ1 -#define MINOR_OPERATION_CUSTOM2 0x901 //ŽԶ2 -#define MINOR_OPERATION_CUSTOM3 0x902 //ŽԶ3 -#define MINOR_OPERATION_CUSTOM4 0x903 //ŽԶ4 -#define MINOR_OPERATION_CUSTOM5 0x904 //ŽԶ5 -#define MINOR_OPERATION_CUSTOM6 0x905 //ŽԶ6 -#define MINOR_OPERATION_CUSTOM7 0x906 //ŽԶ7 -#define MINOR_OPERATION_CUSTOM8 0x907 //ŽԶ8 -#define MINOR_OPERATION_CUSTOM9 0x908 //ŽԶ9 -#define MINOR_OPERATION_CUSTOM10 0x909 //ŽԶ10 -#define MINOR_OPERATION_CUSTOM11 0x90a //ŽԶ11 -#define MINOR_OPERATION_CUSTOM12 0x90b //ŽԶ12 -#define MINOR_OPERATION_CUSTOM13 0x90c //ŽԶ13 -#define MINOR_OPERATION_CUSTOM14 0x90d //ŽԶ14 -#define MINOR_OPERATION_CUSTOM15 0x90e //ŽԶ15 -#define MINOR_OPERATION_CUSTOM16 0x90f //ŽԶ16 -#define MINOR_OPERATION_CUSTOM17 0x910 //ŽԶ17 -#define MINOR_OPERATION_CUSTOM18 0x911 //ŽԶ18 -#define MINOR_OPERATION_CUSTOM19 0x912 //ŽԶ19 -#define MINOR_OPERATION_CUSTOM20 0x913 //ŽԶ20 -#define MINOR_OPERATION_CUSTOM21 0x914 //ŽԶ21 -#define MINOR_OPERATION_CUSTOM22 0x915 //ŽԶ22 -#define MINOR_OPERATION_CUSTOM23 0x916 //ŽԶ23 -#define MINOR_OPERATION_CUSTOM24 0x917 //ŽԶ24 -#define MINOR_OPERATION_CUSTOM25 0x918 //ŽԶ25 -#define MINOR_OPERATION_CUSTOM26 0x919 //ŽԶ26 -#define MINOR_OPERATION_CUSTOM27 0x91a //ŽԶ27 -#define MINOR_OPERATION_CUSTOM28 0x91b //ŽԶ28 -#define MINOR_OPERATION_CUSTOM29 0x91c //ŽԶ29 -#define MINOR_OPERATION_CUSTOM30 0x91d //ŽԶ30 -#define MINOR_OPERATION_CUSTOM31 0x91e //ŽԶ31 -#define MINOR_OPERATION_CUSTOM32 0x91f //ŽԶ32 -#define MINOR_OPERATION_CUSTOM33 0x920 //ŽԶ33 -#define MINOR_OPERATION_CUSTOM34 0x921 //ŽԶ34 -#define MINOR_OPERATION_CUSTOM35 0x922 //ŽԶ35 -#define MINOR_OPERATION_CUSTOM36 0x923 //ŽԶ36 -#define MINOR_OPERATION_CUSTOM37 0x924 //ŽԶ37 -#define MINOR_OPERATION_CUSTOM38 0x925 //ŽԶ38 -#define MINOR_OPERATION_CUSTOM39 0x926 //ŽԶ39 -#define MINOR_OPERATION_CUSTOM40 0x927 //ŽԶ40 -#define MINOR_OPERATION_CUSTOM41 0x928 //ŽԶ41 -#define MINOR_OPERATION_CUSTOM42 0x929 //ŽԶ42 -#define MINOR_OPERATION_CUSTOM43 0x92a //ŽԶ43 -#define MINOR_OPERATION_CUSTOM44 0x92b //ŽԶ44 -#define MINOR_OPERATION_CUSTOM45 0x92c //ŽԶ45 -#define MINOR_OPERATION_CUSTOM46 0x92d //ŽԶ46 -#define MINOR_OPERATION_CUSTOM47 0x92e //ŽԶ47 -#define MINOR_OPERATION_CUSTOM48 0x92f //ŽԶ48 -#define MINOR_OPERATION_CUSTOM49 0x930 //ŽԶ49 -#define MINOR_OPERATION_CUSTOM50 0x931 //ŽԶ50 -#define MINOR_OPERATION_CUSTOM51 0x932 //ŽԶ51 -#define MINOR_OPERATION_CUSTOM52 0x933 //ŽԶ52 -#define MINOR_OPERATION_CUSTOM53 0x934 //ŽԶ53 -#define MINOR_OPERATION_CUSTOM54 0x935 //ŽԶ54 -#define MINOR_OPERATION_CUSTOM55 0x936 //ŽԶ55 -#define MINOR_OPERATION_CUSTOM56 0x937 //ŽԶ56 -#define MINOR_OPERATION_CUSTOM57 0x938 //ŽԶ57 -#define MINOR_OPERATION_CUSTOM58 0x939 //ŽԶ58 -#define MINOR_OPERATION_CUSTOM59 0x93a //ŽԶ59 -#define MINOR_OPERATION_CUSTOM60 0x93b //ŽԶ60 -#define MINOR_OPERATION_CUSTOM61 0x93c //ŽԶ61 -#define MINOR_OPERATION_CUSTOM62 0x93d //ŽԶ62 -#define MINOR_OPERATION_CUSTOM63 0x93e //ŽԶ63 -#define MINOR_OPERATION_CUSTOM64 0x93f //ŽԶ64 -#define MINOR_OPERATION_REALTIMEBROADCAST 0x940 //ʵʱ㲥 -#define MINOR_OPERATION_PLANBROADCAST 0x941 //ƻ㲥 -#define MINOR_LOCAL_IMPORT_DISHESDATA 0x942 //صƷ -#define MINOR_LOCAL_EXPORT_DISHESDATA 0x943 //صƷ +#define MINOR_OPERATION_CUSTOM1 0x900 //门禁自定义操作1 +#define MINOR_OPERATION_CUSTOM2 0x901 //门禁自定义操作2 +#define MINOR_OPERATION_CUSTOM3 0x902 //门禁自定义操作3 +#define MINOR_OPERATION_CUSTOM4 0x903 //门禁自定义操作4 +#define MINOR_OPERATION_CUSTOM5 0x904 //门禁自定义操作5 +#define MINOR_OPERATION_CUSTOM6 0x905 //门禁自定义操作6 +#define MINOR_OPERATION_CUSTOM7 0x906 //门禁自定义操作7 +#define MINOR_OPERATION_CUSTOM8 0x907 //门禁自定义操作8 +#define MINOR_OPERATION_CUSTOM9 0x908 //门禁自定义操作9 +#define MINOR_OPERATION_CUSTOM10 0x909 //门禁自定义操作10 +#define MINOR_OPERATION_CUSTOM11 0x90a //门禁自定义操作11 +#define MINOR_OPERATION_CUSTOM12 0x90b //门禁自定义操作12 +#define MINOR_OPERATION_CUSTOM13 0x90c //门禁自定义操作13 +#define MINOR_OPERATION_CUSTOM14 0x90d //门禁自定义操作14 +#define MINOR_OPERATION_CUSTOM15 0x90e //门禁自定义操作15 +#define MINOR_OPERATION_CUSTOM16 0x90f //门禁自定义操作16 +#define MINOR_OPERATION_CUSTOM17 0x910 //门禁自定义操作17 +#define MINOR_OPERATION_CUSTOM18 0x911 //门禁自定义操作18 +#define MINOR_OPERATION_CUSTOM19 0x912 //门禁自定义操作19 +#define MINOR_OPERATION_CUSTOM20 0x913 //门禁自定义操作20 +#define MINOR_OPERATION_CUSTOM21 0x914 //门禁自定义操作21 +#define MINOR_OPERATION_CUSTOM22 0x915 //门禁自定义操作22 +#define MINOR_OPERATION_CUSTOM23 0x916 //门禁自定义操作23 +#define MINOR_OPERATION_CUSTOM24 0x917 //门禁自定义操作24 +#define MINOR_OPERATION_CUSTOM25 0x918 //门禁自定义操作25 +#define MINOR_OPERATION_CUSTOM26 0x919 //门禁自定义操作26 +#define MINOR_OPERATION_CUSTOM27 0x91a //门禁自定义操作27 +#define MINOR_OPERATION_CUSTOM28 0x91b //门禁自定义操作28 +#define MINOR_OPERATION_CUSTOM29 0x91c //门禁自定义操作29 +#define MINOR_OPERATION_CUSTOM30 0x91d //门禁自定义操作30 +#define MINOR_OPERATION_CUSTOM31 0x91e //门禁自定义操作31 +#define MINOR_OPERATION_CUSTOM32 0x91f //门禁自定义操作32 +#define MINOR_OPERATION_CUSTOM33 0x920 //门禁自定义操作33 +#define MINOR_OPERATION_CUSTOM34 0x921 //门禁自定义操作34 +#define MINOR_OPERATION_CUSTOM35 0x922 //门禁自定义操作35 +#define MINOR_OPERATION_CUSTOM36 0x923 //门禁自定义操作36 +#define MINOR_OPERATION_CUSTOM37 0x924 //门禁自定义操作37 +#define MINOR_OPERATION_CUSTOM38 0x925 //门禁自定义操作38 +#define MINOR_OPERATION_CUSTOM39 0x926 //门禁自定义操作39 +#define MINOR_OPERATION_CUSTOM40 0x927 //门禁自定义操作40 +#define MINOR_OPERATION_CUSTOM41 0x928 //门禁自定义操作41 +#define MINOR_OPERATION_CUSTOM42 0x929 //门禁自定义操作42 +#define MINOR_OPERATION_CUSTOM43 0x92a //门禁自定义操作43 +#define MINOR_OPERATION_CUSTOM44 0x92b //门禁自定义操作44 +#define MINOR_OPERATION_CUSTOM45 0x92c //门禁自定义操作45 +#define MINOR_OPERATION_CUSTOM46 0x92d //门禁自定义操作46 +#define MINOR_OPERATION_CUSTOM47 0x92e //门禁自定义操作47 +#define MINOR_OPERATION_CUSTOM48 0x92f //门禁自定义操作48 +#define MINOR_OPERATION_CUSTOM49 0x930 //门禁自定义操作49 +#define MINOR_OPERATION_CUSTOM50 0x931 //门禁自定义操作50 +#define MINOR_OPERATION_CUSTOM51 0x932 //门禁自定义操作51 +#define MINOR_OPERATION_CUSTOM52 0x933 //门禁自定义操作52 +#define MINOR_OPERATION_CUSTOM53 0x934 //门禁自定义操作53 +#define MINOR_OPERATION_CUSTOM54 0x935 //门禁自定义操作54 +#define MINOR_OPERATION_CUSTOM55 0x936 //门禁自定义操作55 +#define MINOR_OPERATION_CUSTOM56 0x937 //门禁自定义操作56 +#define MINOR_OPERATION_CUSTOM57 0x938 //门禁自定义操作57 +#define MINOR_OPERATION_CUSTOM58 0x939 //门禁自定义操作58 +#define MINOR_OPERATION_CUSTOM59 0x93a //门禁自定义操作59 +#define MINOR_OPERATION_CUSTOM60 0x93b //门禁自定义操作60 +#define MINOR_OPERATION_CUSTOM61 0x93c //门禁自定义操作61 +#define MINOR_OPERATION_CUSTOM62 0x93d //门禁自定义操作62 +#define MINOR_OPERATION_CUSTOM63 0x93e //门禁自定义操作63 +#define MINOR_OPERATION_CUSTOM64 0x93f //门禁自定义操作64 +#define MINOR_OPERATION_REALTIMEBROADCAST 0x940 //实时广播 +#define MINOR_OPERATION_PLANBROADCAST 0x941 //计划广播 +#define MINOR_LOCAL_IMPORT_DISHESDATA 0x942 //本地导入菜品数据 +#define MINOR_LOCAL_EXPORT_DISHESDATA 0x943 //本地导出菜品数据 -#define MINOR_SET_WIFI_PARAMETER 0x950 //WIFIò -#define MINOR_EZVIZ_LOGIN 0x951 //өʯƵ½ -#define MINOR_EZVIZ_LOGINOUT 0x952 //өʯƵdz -#define MINOR_LOCK_ADD 0x953 // -#define MINOR_LOCK_DELETE 0x954 //ɾ -#define MINOR_LOCK_GET_STATUS 0x955 //״̬ȡ -#define MINOR_LOCK_SET_TMP_PASSWORD 0x956 //ʱ· -#define MINOR_LOCK_SET_SILENT_MODE 0x957 // -#define MINOR_LOCK_SET_LATE_WARNING 0x958 // -#define MINOR_LOCK_IPC_ADD 0x959 //IPC -#define MINOR_LOCK_IPC_REMOVE 0x95a //IPC -#define MINOR_LOCK_DETECTOR_ADD 0x95b //̽ -#define MINOR_LOCK_DETECTOR_REMOVE 0x95c //̽ -#define MINOR_LOCK_MESSAGE_REMINDING_OPEN 0x95d //ϢѴ -#define MINOR_LOCK_MESSAGE_REMINDING_CLOSE 0x95e //Ϣѹر -#define MINOR_LOCK_SET_HEART_BEAT 0x95f // -#define MINOR_LOCK_REBOOT 0x960 // -#define MINOR_LOCK_CLEAR_USER 0x961 //û -#define MINOR_LOCK_FORMAT 0x962 //ʽ -#define MINOR_LOCK_FINGER_CHANGE 0x963 //ָƸĶ -#define MINOR_LOCK_PASSWORD_CHANGE 0x964 //Ķ -#define MINOR_LOCK_CARD_CHANGE 0x965 //ϢĶ -#define MINOR_LOCK_USER_CHANGE 0x966 //ûϢĶ -#define MINOR_LOCK_SYSTEM_CHANGE 0x967 //ϵͳϢĶ -#define MINOR_LOCK_CHANGE_ADD_UESR 0x968 //û -#define MINOR_LOCK_CHANGE_DEL_UESR 0x969 //ɾû -#define MINOR_LOCK_CHANGE_CUSTOM_USER_NAME 0x96a //ԶûûĶ -#define MINOR_LOCK_CHANGE_REMOTE_DEVICE 0x96b //ңϢĶ -#define MINOR_LOCK_CHANGE_ADD_FP 0x96c //ָ -#define MINOR_LOCK_CHANGE_DEL_FP 0x96d //ɾָ -#define MINOR_LOCK_CHANGE_ADD_PASSWORD 0x96e // -#define MINOR_LOCK_CHANGE_DEL_PASSWORD 0x96f //ɾ -#define MINOR_LOCK_CHANGE_ADD_CARD 0x970 //Ƭ -#define MINOR_LOCK_CHANGE_DEL_CARD 0x971 //ɾƬ -#define MINOR_LOCK_NETWORK_SWITCH 0x972 //繦ܿظĶ -#define MINOR_LOCK_CLEAR_NETWORK_DATA 0x973 // -#define MINOR_LOCK_CLEAR_HOST_USER 0x974 //û -#define MINOR_LOCK_CLEAR_GUEST_USER 0x975 //տû -#define MINOR_LOCK_CLEAN_ALL_REMOTE_DEVICE 0x976 //ңûϢ -#define MINOR_LOCK_CLEAN_NORMAL_USER_FINGRT 0x977 //ͨûָ -#define MINOR_LOCK_CLEAN_ALL_CARD 0x978 //пƬ -#define MINOR_LOCK_CLEAN_ALL_PASSWORD 0x979 // -#define MINOR_START_WIRELESSSERVER 0x97a //豸ȵ -#define MINOR_STOP_WIRELESSSERVER 0x97b //ر豸ȵ -#define MINOR_EMERGENCY_CARD_AUTH_NORMAL_CARD 0x97c //ӦȨͨ -#define MINOR_CHANGE_ALWAYS_OPEN_RIGHT 0x97d //ͨģʽĶ -#define MINOR_LOCK_DOOR_BELL_EVENT 0x97e //¼ -#define MINOR_DISTRACT_CONTROLLER_REBOOT 0x97f //ֿ -#define MINOR_DISTRACT_CONTROLLER_RESUME_CFG 0x980 //ָֿ -#define MINOR_LOCAL_RESTORE_AP_PASSWORD_CFG 0x981 //ػָAPĬϲ +#define MINOR_SET_WIFI_PARAMETER 0x950 //设置WIFI配置参数 +#define MINOR_EZVIZ_LOGIN 0x951 //萤石云登陆 +#define MINOR_EZVIZ_LOGINOUT 0x952 //萤石云登出 +#define MINOR_LOCK_ADD 0x953 //智能锁添加 +#define MINOR_LOCK_DELETE 0x954 //智能锁删除 +#define MINOR_LOCK_GET_STATUS 0x955 //智能锁状态获取 +#define MINOR_LOCK_SET_TMP_PASSWORD 0x956 //智能锁临时密码下发 +#define MINOR_LOCK_SET_SILENT_MODE 0x957 //智能锁静音设置 +#define MINOR_LOCK_SET_LATE_WARNING 0x958 //智能锁晚归提醒设置 +#define MINOR_LOCK_IPC_ADD 0x959 //智能锁IPC关联 +#define MINOR_LOCK_IPC_REMOVE 0x95a //智能锁IPC解除关联 +#define MINOR_LOCK_DETECTOR_ADD 0x95b //智能锁探测器关联 +#define MINOR_LOCK_DETECTOR_REMOVE 0x95c //智能锁探测器解除关联 +#define MINOR_LOCK_MESSAGE_REMINDING_OPEN 0x95d //智能锁消息提醒打开 +#define MINOR_LOCK_MESSAGE_REMINDING_CLOSE 0x95e //智能锁消息提醒关闭 +#define MINOR_LOCK_SET_HEART_BEAT 0x95f //智能锁心跳设置 +#define MINOR_LOCK_REBOOT 0x960 //智能锁重启 +#define MINOR_LOCK_CLEAR_USER 0x961 //智能锁清空用户 +#define MINOR_LOCK_FORMAT 0x962 //智能锁格式化 +#define MINOR_LOCK_FINGER_CHANGE 0x963 //智能锁指纹改动 +#define MINOR_LOCK_PASSWORD_CHANGE 0x964 //智能锁密码改动 +#define MINOR_LOCK_CARD_CHANGE 0x965 //智能锁卡信息改动 +#define MINOR_LOCK_USER_CHANGE 0x966 //智能锁用户信息改动 +#define MINOR_LOCK_SYSTEM_CHANGE 0x967 //智能锁系统信息改动 +#define MINOR_LOCK_CHANGE_ADD_UESR 0x968 //智能锁新增用户 +#define MINOR_LOCK_CHANGE_DEL_UESR 0x969 //智能锁删除用户 +#define MINOR_LOCK_CHANGE_CUSTOM_USER_NAME 0x96a //智能锁自定义用户用户名改动 +#define MINOR_LOCK_CHANGE_REMOTE_DEVICE 0x96b //智能锁遥控器信息改动 +#define MINOR_LOCK_CHANGE_ADD_FP 0x96c //智能锁新增指纹 +#define MINOR_LOCK_CHANGE_DEL_FP 0x96d //智能锁删除指纹 +#define MINOR_LOCK_CHANGE_ADD_PASSWORD 0x96e //智能锁新增密码 +#define MINOR_LOCK_CHANGE_DEL_PASSWORD 0x96f //智能锁删除密码 +#define MINOR_LOCK_CHANGE_ADD_CARD 0x970 //智能锁新增卡片 +#define MINOR_LOCK_CHANGE_DEL_CARD 0x971 //智能锁删除卡片 +#define MINOR_LOCK_NETWORK_SWITCH 0x972 //智能锁网络功能开关改动 +#define MINOR_LOCK_CLEAR_NETWORK_DATA 0x973 //智能锁网络数据清空 +#define MINOR_LOCK_CLEAR_HOST_USER 0x974 //智能锁清空主人用户 +#define MINOR_LOCK_CLEAR_GUEST_USER 0x975 //智能锁清空客人用户 +#define MINOR_LOCK_CLEAN_ALL_REMOTE_DEVICE 0x976 //遥控器用户信息清空 +#define MINOR_LOCK_CLEAN_NORMAL_USER_FINGRT 0x977 //智能锁清空普通用户指纹 +#define MINOR_LOCK_CLEAN_ALL_CARD 0x978 //智能锁清空所有卡片 +#define MINOR_LOCK_CLEAN_ALL_PASSWORD 0x979 //智能锁清空所有密码 +#define MINOR_START_WIRELESSSERVER 0x97a //开启设备热点 +#define MINOR_STOP_WIRELESSSERVER 0x97b //关闭设备热点 +#define MINOR_EMERGENCY_CARD_AUTH_NORMAL_CARD 0x97c //应急管理卡授权普通卡 +#define MINOR_CHANGE_ALWAYS_OPEN_RIGHT 0x97d //通道模式改动 +#define MINOR_LOCK_DOOR_BELL_EVENT 0x97e //门铃事件(操作锁触发) +#define MINOR_DISTRACT_CONTROLLER_REBOOT 0x97f //分控制器重启 +#define MINOR_DISTRACT_CONTROLLER_RESUME_CFG 0x980 //分控制器恢复参数 +#define MINOR_LOCAL_RESTORE_AP_PASSWORD_CFG 0x981 //本地恢复AP密码默认参数 -//Ϣ־ -#define MINOR_BACKUP_DATA 0xc41 //ݱ -#define MINOR_TRANSFER_DATA 0xc42 //Ǩ -#define MINOR_RESTORE_DATA 0xc43 //ݻԭ -#define MINOR_SET_INPUT_PLAN 0xc44 //ն˶ʱлƻ -#define MINOR_TERMINAL_ADB 0xc45//նADB -#define MINOR_TERMINAL_VOLUME 0xc46 //ն -#define MINOR_TERMINAL_LOGO 0xc47 //նLOGO -#define MINOR_TERMINAL_DEFAULT_SCHEDULE 0xc48 //Ƭճʹ -#define MINOR_TERMINAL_PASSWORD 0xc49 //ն -#define MINOR_TERMINAL_IP 0xc4a//նIP -#define MINOR_TERMINAL_RELATE_IPC 0xc4b//ն˹IPC -#define MINOR_TERMINAL_SERVER 0xc4c//ն˹ -#define MINOR_TERMINAL_SADP 0xc4d//նSADP -#define MINOR_TERMINAL_TIMEZONE 0xc4e//նʱ -#define MINOR_TERMINAL_TEMP_PROTECT 0xc4f//ն¶ȱ -#define MINOR_ADD_ORGANIZATION 0xc50 //֯ -#define MINOR_DELETE_ORGANIZATION 0xc51 //ɾ֯ -#define MINOR_MODIFY_ORGANIZATION 0xc52 //޸֯ -#define MINOR_WEATHER_FACTORY 0xc53 // -#define MINOR_SADP_ENABLE 0xc54 //sadp -#define MINOR_SSH_ENABLE 0xc55 //SSH -#define MINOR_MODIFY_MATERIAL 0xc56 //زIJ޸ -#define MINOR_INSERT_CHARACTER 0xc57 //岥Ϣ -#define MINOR_TERMINAL_BACKLIGHT 0xc58 //ն˱ -#define MINOR_DOWNLOAD_MATERIAL_THUMBNAIL 0xc59 //زͼ -#define MINOR_UPLOAD_PROGRAM_THUMBNAIL 0xc5a//ϴĿͼ -#define MINOR_TDOWNLOAD_PROGRAM_THUMBNAIL 0xc5b//ؽĿͼ -#define MINOR_BATCH_DELETE_SCHEDULE_PLAN 0xc5c//ɾƻ -#define MINOR_REPUBLISH 0xc5d//· -#define MINOR_CLEAR_TERMINAL_PLAY_INFO 0xc5e//ն˲Ϣ -#define MINOR_GET_TERMINAL_RESOLUTION 0xc5f//ȡն˷ֱ -#define MINOR_SET_TERMINAL_RESOLUTION 0xc60//ն˷ֱ -#define MINOR_GET_BATCH_TERMINAL_UPGRATE_PROGRESS 0xc61//ȡն -#define MINOR_GET_BATCH_PROGRESS 0xc62//ȡն˷ -#define MINOR_GET_TEMPLATE 0xc64//ȡģ -#define MINOR_INIT_TEMPLATE 0xc65//ʼģ -#define MINOR_GET_TERMINAL_NTP_SERVERS 0xc66//ȡնNTP -#define MINOR_SET_TERMINAL_NTP_SERVERS 0xc67//նNTP -#define MINOR_GET_RELEASE_DETAILS 0xc68//ȡϸϢ -#define MINOR_UPLOAD_TEMPLATE_THUMBNAIL 0xc69//ϴģͼ -#define MINOR_DOWNLOAD_TEMPLATE_THUMBNAIL 0xc6a//ģͼ -#define MINOR_ADD_TEMPLATE 0xc6b//ģ -#define MINOR_DELETE_TEMPLATE 0xc6c//ɾģ -#define MINOR_MODIFY_TEMPLATE 0xc6d//޸ģ -#define MINOR_ADD_SCHEDULE_PLAN 0xc6e//ӷƻ -#define MINOR_MODIFY_SCHEDULE_PLAN 0xc6f//޸ķƻ -#define MINOR_CANCEL_SCHEDULE_RELEASE 0xc70//ȡճ̷ -#define MINOR_GET_SCHEDULE 0xc71//ȡճ -#define MINOR_ADD_INSERT 0xc72//½岥 -#define MINOR_CANCEL_INSERT 0xc73//ȡ岥 -#define MINOR_SWITCH_LANGUAGE 0xc74//л -#define MINOR_SET_ADMIN_INITIAL_PASSWORD 0xc75//ùԱʼ -#define MINOR_MODIFY_PORT 0xc76//޸Ķ˿ -#define MINOR_MODIFY_STORAGE_PATH 0xc77//޸Ĵ洢· -#define MINOR_EXIT_PROGRAM 0xc78//˳ -#define MINOR_MODULE_STARTUP_SUCCESS 0xc79//ģɹ -#define MINOR_APPROVE_SCHEDULE 0xc80//ճ -#define MINOR_GENERAL_DATA_SEND 0xc81//· -#define MINOR_SET_SIGN_INTERFACE 0xc82//ǩ -#define MINOR_GET_SIGN_INTERFACE 0xc83//ȡǩ -#define MINOR_SET_SHOW_MODE 0xc84//ʾģʽ -#define MINOR_GET_SHOW_MODE 0xc85//ȡʾģʽ -#define MINOR_SET_SCREEN_DIRECTION 0xc86//Ļ -#define MINOR_GET_SCREEN_DIRECTION 0xc87//ȡĻ -#define MINOR_SET_LOCK_SCREEN 0xc88// -#define MINOR_GET_LOCK_SCREEN 0xc89//ȡ -#define MINOR_SET_FACE_DATA_LIB 0xc8a// -#define MINOR_DELETE_FACE_DATA_LIB 0xc8b//ɾ -#define MINOR_SET_SPEC_FACE_DATA_LIB 0xc8c//ָ -#define MINOR_DELETE_SPEC_FACE_DATA_LIB 0xc8d//ɾָ -#define MINOR_ADD_FACE_DATA 0xc8e// -#define MINOR_SEARCH_FACE_DATA 0xc8f//ѯ -#define MINOR_MODIFY_FACE_DATA 0xc90//޸ -#define MINOR_DELETE_FACE_DATA 0xc91//ɾ -#define MINOR_DELETE_USERINFO_DETAIL 0xc92//ԱϢȨɾ -#define MINOR_ADD_USERINFO 0xc93//ԱϢ -#define MINOR_MODIFY_USERINFO 0xc94//޸ԱϢ -#define MINOR_DELETE_USERINFO 0xc95//ɾԱϢ -#define MINOR_ADD_CARD_INFO 0xc96//ӿϢ -#define MINOR_MODIFY_CARD_INFO 0xc97//޸ĿϢ -#define MINOR_DELETE_CARD_INFO 0xc98//ɾϢ -#define MINOR_SET_USER_RIGHT_WEEK 0xc99//ԱȨܼƻ -#define MINOR_SET_USER_RIGHT_HOLIDAY 0xc9a//ԱȨ޽ռƻ -#define MINOR_SET_USER_RIGHT_HOLIDAYGROUP 0xc9b//ԱȨ޼ƻ -#define MINOR_SET_USER_RIGHT_TEMPLATE 0xc9c//ԱȨ޼ƻģ +//传显信息发布操作日志 +#define MINOR_BACKUP_DATA 0xc41 //数据备份 +#define MINOR_TRANSFER_DATA 0xc42 //数据迁移 +#define MINOR_RESTORE_DATA 0xc43 //数据还原 +#define MINOR_SET_INPUT_PLAN 0xc44 //设置终端定时输入切换计划 +#define MINOR_TERMINAL_ADB 0xc45//终端ADB配置 +#define MINOR_TERMINAL_VOLUME 0xc46 //终端音量配置 +#define MINOR_TERMINAL_LOGO 0xc47 //终端LOGO配置 +#define MINOR_TERMINAL_DEFAULT_SCHEDULE 0xc48 //垫片日程使能 +#define MINOR_TERMINAL_PASSWORD 0xc49 //设置终端密码 +#define MINOR_TERMINAL_IP 0xc4a//终端IP配置 +#define MINOR_TERMINAL_RELATE_IPC 0xc4b//终端关联IPC +#define MINOR_TERMINAL_SERVER 0xc4c//终端关联服务器配置 +#define MINOR_TERMINAL_SADP 0xc4d//终端SADP开关配置 +#define MINOR_TERMINAL_TIMEZONE 0xc4e//终端时区配置 +#define MINOR_TERMINAL_TEMP_PROTECT 0xc4f//终端温度保护配置 +#define MINOR_ADD_ORGANIZATION 0xc50 //添加组织 +#define MINOR_DELETE_ORGANIZATION 0xc51 //删除组织 +#define MINOR_MODIFY_ORGANIZATION 0xc52 //修改组织 +#define MINOR_WEATHER_FACTORY 0xc53 //天气厂商配置 +#define MINOR_SADP_ENABLE 0xc54 //sadp开关配置 +#define MINOR_SSH_ENABLE 0xc55 //SSH开关配置 +#define MINOR_MODIFY_MATERIAL 0xc56 //素材参数修改 +#define MINOR_INSERT_CHARACTER 0xc57 //插播文字消息 +#define MINOR_TERMINAL_BACKLIGHT 0xc58 //终端背光配置 +#define MINOR_DOWNLOAD_MATERIAL_THUMBNAIL 0xc59 //下载素材缩略图 +#define MINOR_UPLOAD_PROGRAM_THUMBNAIL 0xc5a//上传节目缩略图 +#define MINOR_TDOWNLOAD_PROGRAM_THUMBNAIL 0xc5b//下载节目缩略图 +#define MINOR_BATCH_DELETE_SCHEDULE_PLAN 0xc5c//批量删除发布计划 +#define MINOR_REPUBLISH 0xc5d//重新发布 +#define MINOR_CLEAR_TERMINAL_PLAY_INFO 0xc5e//清空终端播放信息 +#define MINOR_GET_TERMINAL_RESOLUTION 0xc5f//获取终端分辨率 +#define MINOR_SET_TERMINAL_RESOLUTION 0xc60//设置终端分辨率 +#define MINOR_GET_BATCH_TERMINAL_UPGRATE_PROGRESS 0xc61//批量获取终端升级进度 +#define MINOR_GET_BATCH_PROGRESS 0xc62//批量获取终端发布进度 +#define MINOR_GET_TEMPLATE 0xc64//获取模板 +#define MINOR_INIT_TEMPLATE 0xc65//初始化模板 +#define MINOR_GET_TERMINAL_NTP_SERVERS 0xc66//获取终端NTP服务 +#define MINOR_SET_TERMINAL_NTP_SERVERS 0xc67//设置终端NTP服务 +#define MINOR_GET_RELEASE_DETAILS 0xc68//获取发布详细信息 +#define MINOR_UPLOAD_TEMPLATE_THUMBNAIL 0xc69//上传模板缩略图 +#define MINOR_DOWNLOAD_TEMPLATE_THUMBNAIL 0xc6a//下载模板缩略图 +#define MINOR_ADD_TEMPLATE 0xc6b//添加模板 +#define MINOR_DELETE_TEMPLATE 0xc6c//删除模板 +#define MINOR_MODIFY_TEMPLATE 0xc6d//修改模板 +#define MINOR_ADD_SCHEDULE_PLAN 0xc6e//添加发布计划 +#define MINOR_MODIFY_SCHEDULE_PLAN 0xc6f//修改发布计划 +#define MINOR_CANCEL_SCHEDULE_RELEASE 0xc70//取消日程发布 +#define MINOR_GET_SCHEDULE 0xc71//获取日程 +#define MINOR_ADD_INSERT 0xc72//新建插播 +#define MINOR_CANCEL_INSERT 0xc73//取消插播 +#define MINOR_SWITCH_LANGUAGE 0xc74//切换语言 +#define MINOR_SET_ADMIN_INITIAL_PASSWORD 0xc75//设置管理员初始密码 +#define MINOR_MODIFY_PORT 0xc76//修改端口 +#define MINOR_MODIFY_STORAGE_PATH 0xc77//修改存储路径 +#define MINOR_EXIT_PROGRAM 0xc78//退出程序 +#define MINOR_MODULE_STARTUP_SUCCESS 0xc79//模块启动成功 +#define MINOR_APPROVE_SCHEDULE 0xc80//日程审核 +#define MINOR_GENERAL_DATA_SEND 0xc81//第三方数据下发 +#define MINOR_SET_SIGN_INTERFACE 0xc82//配置签到界面参数 +#define MINOR_GET_SIGN_INTERFACE 0xc83//获取签到界面参数 +#define MINOR_SET_SHOW_MODE 0xc84//配置显示模式参数 +#define MINOR_GET_SHOW_MODE 0xc85//获取显示模式参数 +#define MINOR_SET_SCREEN_DIRECTION 0xc86//配置屏幕方向参数 +#define MINOR_GET_SCREEN_DIRECTION 0xc87//获取屏幕方向参数 +#define MINOR_SET_LOCK_SCREEN 0xc88//配置锁屏参数 +#define MINOR_GET_LOCK_SCREEN 0xc89//获取锁屏参数 +#define MINOR_SET_FACE_DATA_LIB 0xc8a//配置人脸库参数 +#define MINOR_DELETE_FACE_DATA_LIB 0xc8b//删除人脸库 +#define MINOR_SET_SPEC_FACE_DATA_LIB 0xc8c//配置指定人脸库参数 +#define MINOR_DELETE_SPEC_FACE_DATA_LIB 0xc8d//删除指定人脸库参数 +#define MINOR_ADD_FACE_DATA 0xc8e//添加人脸数据 +#define MINOR_SEARCH_FACE_DATA 0xc8f//查询人脸数据 +#define MINOR_MODIFY_FACE_DATA 0xc90//修改人脸数据 +#define MINOR_DELETE_FACE_DATA 0xc91//删除人脸数据 +#define MINOR_DELETE_USERINFO_DETAIL 0xc92//人员信息及权限删除 +#define MINOR_ADD_USERINFO 0xc93//添加人员信息 +#define MINOR_MODIFY_USERINFO 0xc94//修改人员信息 +#define MINOR_DELETE_USERINFO 0xc95//删除人员信息 +#define MINOR_ADD_CARD_INFO 0xc96//添加卡信息 +#define MINOR_MODIFY_CARD_INFO 0xc97//修改卡信息 +#define MINOR_DELETE_CARD_INFO 0xc98//删除卡信息 +#define MINOR_SET_USER_RIGHT_WEEK 0xc99//人员权限周计划设置 +#define MINOR_SET_USER_RIGHT_HOLIDAY 0xc9a//人员权限节日计划设置 +#define MINOR_SET_USER_RIGHT_HOLIDAYGROUP 0xc9b//人员权限假日组计划设置 +#define MINOR_SET_USER_RIGHT_TEMPLATE 0xc9c//人员权限计划模板设置 -//2012-03-05 ITC־ -#define MINOR_SET_TRIGGERMODE_CFG 0x1001 /*ôģʽ*/ -#define MINOR_GET_TRIGGERMODE_CFG 0x1002 /*ȡģʽ*/ -#define MINOR_SET_IOOUT_CFG 0x1003 /*IO*/ -#define MINOR_GET_IOOUT_CFG 0x1004 /*ȡIO*/ -#define MINOR_GET_TRIGGERMODE_DEFAULT 0x1005 /*ȡģʽƼ*/ -#define MINOR_GET_ITCSTATUS 0x1006 /*ȡ״̬*/ -#define MINOR_SET_STATUS_DETECT_CFG 0x1007 /*״̬*/ -#define MINOR_GET_STATUS_DETECT_CFG 0x1008 /*ȡ״̬*/ -#define MINOR_SET_VIDEO_TRIGGERMODE_CFG 0x1009 /*Ƶģʽ*/ -#define MINOR_GET_VIDEO_TRIGGERMODE_CFG 0x100a /*ȡƵģʽ*/ +//2012-03-05 ITC操作日志类型 +#define MINOR_SET_TRIGGERMODE_CFG 0x1001 /*设置触发模式参数*/ +#define MINOR_GET_TRIGGERMODE_CFG 0x1002 /*获取触发模式参数*/ +#define MINOR_SET_IOOUT_CFG 0x1003 /*设置IO输出参数*/ +#define MINOR_GET_IOOUT_CFG 0x1004 /*获取IO输出参数*/ +#define MINOR_GET_TRIGGERMODE_DEFAULT 0x1005 /*获取触发模式推荐参数*/ +#define MINOR_GET_ITCSTATUS 0x1006 /*获取状态检测参数*/ +#define MINOR_SET_STATUS_DETECT_CFG 0x1007 /*设置状态检测参数*/ +#define MINOR_GET_STATUS_DETECT_CFG 0x1008 /*获取状态检测参数*/ +#define MINOR_SET_VIDEO_TRIGGERMODE_CFG 0x1009 /*设置视频触发模式参数*/ +#define MINOR_GET_VIDEO_TRIGGERMODE_CFG 0x100a /*获取视频触发模式参数*/ -//2018-04-23 ͨز־ -#define MINOR_ALARMHOST_GUARD 0x1010 //ͨ() -#define MINOR_ALARMHOST_UNGUARD 0x1011 //ͨ -#define MINOR_ALARMHOST_BYPASS 0x1012 //· -#define MINOR_ALARMHOST_DURESS_ACCESS 0x1013 //Ю +//2018-04-23 通用物联网关操作日志类型 +#define MINOR_ALARMHOST_GUARD 0x1010 //普通布防(外出布防) +#define MINOR_ALARMHOST_UNGUARD 0x1011 //普通撤防 +#define MINOR_ALARMHOST_BYPASS 0x1012 //旁路 +#define MINOR_ALARMHOST_DURESS_ACCESS 0x1013 //挟持 -#define MINOR_ALARMHOST_RS485_PARAM 0x1018 //޸485ò -#define MINOR_ALARMHOST_ALARM_OUTPUT 0x1019 //ƴ -#define MINOR_ALARMHOST_ACCESS_OPEN 0x101a //Ž -#define MINOR_ALARMHOST_ACCESS_CLOSE 0x101b //Ž -#define MINOR_ALARMHOST_SIREN_OPEN 0x101c //ƾſ -#define MINOR_ALARMHOST_SIREN_CLOSE 0x101d //ƾŹ -#define MINOR_ALARMHOST_MOD_ZONE_CONFIG 0x101e //޸ķ -#define MINOR_ALARMHOST_MOD_ALARMOUT_CONIFG 0x101f //޸Ĵ -#define MINOR_ALARMHOST_MOD_ANALOG_CONFIG 0x1020 //޸ģ -#define MINOR_ALARMHOST_RS485_CONFIG 0x1021 //޸485ͨ -#define MINOR_ALARMHOST_PHONE_CONFIG 0x1022 //޸IJ -#define MINOR_ALARMHOST_ADD_ADMIN 0x1023 //ӹԱ -#define MINOR_ALARMHOST_MOD_ADMIN_PARAM 0x1024 //޸ĹԱ -#define MINOR_ALARMHOST_DEL_ADMIN 0x1025 //ɾԱ -#define MINOR_ALARMHOST_ADD_NETUSER 0x1026 //Ӻ˲Ա -#define MINOR_ALARMHOST_MOD_NETUSER_PARAM 0x1027 //޸ĺ˲Ա -#define MINOR_ALARMHOST_DEL_NETUSER 0x1028 //ɾ˲Ա -#define MINOR_ALARMHOST_ADD_OPERATORUSER 0x1029 //ǰ˲Ա -#define MINOR_ALARMHOST_MOD_OPERATORUSER_PW 0x102a //޸ǰ˲Ա -#define MINOR_ALARMHOST_DEL_OPERATORUSER 0x102b //ɾǰ˲Ա -#define MINOR_ALARMHOST_ADD_KEYPADUSER 0x102c //Ӽ/û -#define MINOR_ALARMHOST_DEL_KEYPADUSER 0x102d //ɾ/û +#define MINOR_ALARMHOST_RS485_PARAM 0x1018 //修改485配置参数 +#define MINOR_ALARMHOST_ALARM_OUTPUT 0x1019 //控制触发器 +#define MINOR_ALARMHOST_ACCESS_OPEN 0x101a //控制门禁开 +#define MINOR_ALARMHOST_ACCESS_CLOSE 0x101b //控制门禁关 +#define MINOR_ALARMHOST_SIREN_OPEN 0x101c //控制警号开 +#define MINOR_ALARMHOST_SIREN_CLOSE 0x101d //控制警号关 +#define MINOR_ALARMHOST_MOD_ZONE_CONFIG 0x101e //修改防区参数 +#define MINOR_ALARMHOST_MOD_ALARMOUT_CONIFG 0x101f //修改触发器参数 +#define MINOR_ALARMHOST_MOD_ANALOG_CONFIG 0x1020 //修改模拟量配置 +#define MINOR_ALARMHOST_RS485_CONFIG 0x1021 //修改485通道配置 +#define MINOR_ALARMHOST_PHONE_CONFIG 0x1022 //修改拨号配置 +#define MINOR_ALARMHOST_ADD_ADMIN 0x1023 //增加管理员 +#define MINOR_ALARMHOST_MOD_ADMIN_PARAM 0x1024 //修改管理员参数 +#define MINOR_ALARMHOST_DEL_ADMIN 0x1025 //删除管理员 +#define MINOR_ALARMHOST_ADD_NETUSER 0x1026 //增加后端操作员 +#define MINOR_ALARMHOST_MOD_NETUSER_PARAM 0x1027 //修改后端操作员参数 +#define MINOR_ALARMHOST_DEL_NETUSER 0x1028 //删除后端操作员 +#define MINOR_ALARMHOST_ADD_OPERATORUSER 0x1029 //增加前端操作员 +#define MINOR_ALARMHOST_MOD_OPERATORUSER_PW 0x102a //修改前端操作员密码 +#define MINOR_ALARMHOST_DEL_OPERATORUSER 0x102b //删除前端操作员 +#define MINOR_ALARMHOST_ADD_KEYPADUSER 0x102c //增加键盘/读卡器用户 +#define MINOR_ALARMHOST_DEL_KEYPADUSER 0x102d //删除键盘/读卡器用户 -#define MINOR_ALARMHOST_MOD_HOST_CONFIG 0x1032 //޸ -#define MINOR_ALARMHOST_RESTORE_BYPASS 0x1033 //·ָ +#define MINOR_ALARMHOST_MOD_HOST_CONFIG 0x1032 //修改主机配置 +#define MINOR_ALARMHOST_RESTORE_BYPASS 0x1033 //旁路恢复 -#define MINOR_ALARMHOST_ALARMOUT_OPEN 0x1034 // -#define MINOR_ALARMHOST_ALARMOUT_CLOSE 0x1035 //ر -#define MINOR_ALARMHOST_MOD_SUBSYSTEM_PARAM 0x1036 //޸ϵͳ -#define MINOR_ALARMHOST_GROUP_BYPASS 0x1037 //· -#define MINOR_ALARMHOST_RESTORE_GROUP_BYPASS 0x1038 //·ָ -#define MINOR_ALARMHOST_MOD_GRPS_PARAM 0x1039 //޸GPRS +#define MINOR_ALARMHOST_ALARMOUT_OPEN 0x1034 //触发器开启 +#define MINOR_ALARMHOST_ALARMOUT_CLOSE 0x1035 //触发器关闭 +#define MINOR_ALARMHOST_MOD_SUBSYSTEM_PARAM 0x1036 //修改子系统参数配置 +#define MINOR_ALARMHOST_GROUP_BYPASS 0x1037 //组旁路 +#define MINOR_ALARMHOST_RESTORE_GROUP_BYPASS 0x1038 //组旁路恢复 +#define MINOR_ALARMHOST_MOD_GRPS_PARAM 0x1039 //修改GPRS参数 -#define MINOR_ALARMHOST_MOD_REPORT_MOD 0x103b //޸ϴʽ -#define MINOR_ALARMHOST_MOD_GATEWAY_PARAM 0x103c //޸Ž +#define MINOR_ALARMHOST_MOD_REPORT_MOD 0x103b //修改上传方式配置 +#define MINOR_ALARMHOST_MOD_GATEWAY_PARAM 0x103c //修改门禁参数配置 -#define MINOR_STAY_ARM 0x104c //ز -#define MINOR_QUICK_ARM 0x104d //ʱ -#define MINOR_AUTOMATIC_ARM 0x104e //Զ -#define MINOR_AUTOMATIC_DISARM 0x104f //Զ -#define MINOR_KEYSWITCH_ARM 0x1050 //Կײ -#define MINOR_KEYSWITCH_DISARM 0x1051 //Կײ -#define MINOR_CLEAR_ALARM 0x1052 // -#define MINOR_MOD_FAULT_CFG 0x1053 //޸ϵͳ -#define MINOR_MOD_EVENT_TRIGGER_ALARMOUT_CFG 0x1054 //޸¼ -#define MINOR_SEARCH_EXTERNAL_MODULE 0x1055 //ģ -#define MINOR_REGISTER_EXTERNAL_MODULE 0x1056 //עģ -#define MINOR_CLOSE_KEYBOARD_ALARM 0x1057 //رռ̱ʾ -#define MINOR_MOD_3G_PARAM 0x1058 //޸3G -#define MINOR_MOD_PRINT_PARAM 0x1059 //޸Ĵӡ -#define MINOR_ALARMHOST_SD_CARD_FORMAT 0x1060 //SDʽ -#define MINOR_ALARMHOST_SUBSYSTEM_UPGRADE 0x1061 //Ӱ̼ +#define MINOR_STAY_ARM 0x104c //留守布防 +#define MINOR_QUICK_ARM 0x104d //即时布防 +#define MINOR_AUTOMATIC_ARM 0x104e //自动布防 +#define MINOR_AUTOMATIC_DISARM 0x104f //自动撤防 +#define MINOR_KEYSWITCH_ARM 0x1050 //钥匙布撤防防区布防 +#define MINOR_KEYSWITCH_DISARM 0x1051 //钥匙布撤防防区撤防 +#define MINOR_CLEAR_ALARM 0x1052 //消警 +#define MINOR_MOD_FAULT_CFG 0x1053 //修改系统故障配置 +#define MINOR_MOD_EVENT_TRIGGER_ALARMOUT_CFG 0x1054 //修改事件触发触发器配置 +#define MINOR_SEARCH_EXTERNAL_MODULE 0x1055 //搜索外接模块 +#define MINOR_REGISTER_EXTERNAL_MODULE 0x1056 //重新注册外接模块 +#define MINOR_CLOSE_KEYBOARD_ALARM 0x1057 //关闭键盘报警提示音 +#define MINOR_MOD_3G_PARAM 0x1058 //修改3G参数 +#define MINOR_MOD_PRINT_PARAM 0x1059 //修改打印机参数 +#define MINOR_ALARMHOST_SD_CARD_FORMAT 0x1060 //SD卡格式化 +#define MINOR_ALARMHOST_SUBSYSTEM_UPGRADE 0x1061 //子板固件升级 -#define MINOR_PLAN_ARM_CFG 0x1062 //ƻ -#define MINOR_PHONE_ARM 0x1063 //ֻ -#define MINOR_PHONE_STAY_ARM 0x1064 //ֻز -#define MINOR_PHONE_QUICK_ARM 0x1065 //ֻʱ -#define MINOR_PHONE_DISARM 0x1066 //ֻ -#define MINOR_PHONE_CLEAR_ALARM 0x1067 //ֻ -#define MINOR_ALLOWLIST_CFG 0x1068 // -#define MINOR_TIME_TRIGGER_CFG 0x1069 //ʱش -#define MINOR_CAPTRUE_CFG 0x106a //ץͼ -#define MINOR_TAMPER_CFG 0x106b // +#define MINOR_PLAN_ARM_CFG 0x1062 //计划布撤防参数配置 +#define MINOR_PHONE_ARM 0x1063 //手机布防 +#define MINOR_PHONE_STAY_ARM 0x1064 //手机留守布防 +#define MINOR_PHONE_QUICK_ARM 0x1065 //手机即时布防 +#define MINOR_PHONE_DISARM 0x1066 //手机撤防 +#define MINOR_PHONE_CLEAR_ALARM 0x1067 //手机消警 +#define MINOR_ALLOWLIST_CFG 0x1068 //允许名单配置 +#define MINOR_TIME_TRIGGER_CFG 0x1069 //定时开关触发器配置 +#define MINOR_CAPTRUE_CFG 0x106a //抓图参数配置 +#define MINOR_TAMPER_CFG 0x106b //防区防拆参数配置 -#define MINOR_REMOTE_KEYPAD_UPGRADE 0x106c //Զ -#define MINOR_ONETOUCH_AWAY_ARMING 0x106d //һ -#define MINOR_ONETOUCH_STAY_ARMING 0x106e //һز -#define MINOR_SINGLE_PARTITION_ARMING_OR_DISARMING 0x106f // -#define MINOR_CARD_CONFIGURATION 0x1070 // -#define MINOR_CARD_ARMING_OR_DISARMING 0x1071 //ˢ -#define MINOR_EXPENDING_NETCENTER_CONFIGURATION 0x1072 //չ -#define MINOR_NETCARD_CONFIGURATION 0x1073 // -#define MINOR_DDNS_CONFIGURATION 0x1074 //DDNS -#define MINOR_RS485BUS_CONFIGURATION 0x1075 // 485߲ -#define MINOR_RS485BUS_RE_REGISTRATION 0x1076 //485ע +#define MINOR_REMOTE_KEYPAD_UPGRADE 0x106c //远程升级键盘 +#define MINOR_ONETOUCH_AWAY_ARMING 0x106d //一键外出布防 +#define MINOR_ONETOUCH_STAY_ARMING 0x106e //一键留守布防 +#define MINOR_SINGLE_PARTITION_ARMING_OR_DISARMING 0x106f //单防区布撤防 +#define MINOR_CARD_CONFIGURATION 0x1070 //卡参数配置 +#define MINOR_CARD_ARMING_OR_DISARMING 0x1071 //刷卡布撤防 +#define MINOR_EXPENDING_NETCENTER_CONFIGURATION 0x1072 //扩展网络中心配置 +#define MINOR_NETCARD_CONFIGURATION 0x1073 //网卡配置 +#define MINOR_DDNS_CONFIGURATION 0x1074 //DDNS配置 +#define MINOR_RS485BUS_CONFIGURATION 0x1075 // 485总线参数配置 +#define MINOR_RS485BUS_RE_REGISTRATION 0x1076 //485总线重新注册 -#define MINOR_REMOTE_OPEN_ELECTRIC_LOCK 0x1077 //Զ̴򿪵 -#define MINOR_REMOTE_CLOSE_ELECTRIC_LOCK 0x1078 //Զ̹رյ -#define MINOR_LOCAL_OPEN_ELECTRIC_LOCK 0x1079 //ش򿪵 -#define MINOR_LOCAL_CLOSE_ELECTRIC_LOCK 0x107a //عرյ -#define MINOR_OPEN_ALARM_LAMP 0x107b //򿪾(Զ) -#define MINOR_CLOSE_ALARM_LAMP 0x107c //رվ(Զ) +#define MINOR_REMOTE_OPEN_ELECTRIC_LOCK 0x1077 //远程打开电锁 +#define MINOR_REMOTE_CLOSE_ELECTRIC_LOCK 0x1078 //远程关闭电锁 +#define MINOR_LOCAL_OPEN_ELECTRIC_LOCK 0x1079 //本地打开电锁 +#define MINOR_LOCAL_CLOSE_ELECTRIC_LOCK 0x107a //本地关闭电锁 +#define MINOR_OPEN_ALARM_LAMP 0x107b //打开警灯(远程) +#define MINOR_CLOSE_ALARM_LAMP 0x107c //关闭警灯(远程) -#define MINOR_TEMPORARY_PASSWORD 0x107d //ʱ¼ +#define MINOR_TEMPORARY_PASSWORD 0x107d //临时密码操作记录 -#define MINOR_HIDDNS_CONFIG 0x1082 // HIDDNS -#define MINOR_REMOTE_KEYBOARD_UPDATA 0x1083 //Զ̼־ -#define MINOR_ZONE_ADD_DETECTOR 0x1084 //̽ -#define MINOR_ZONE_DELETE_DETECTOR 0x1085 //ɾ̽ -#define MINOR_QUERY_DETECTOR_SIGNAL 0x1086 //ѯ̽źǿ -#define MINOR_QUERY_DETECTOR_BATTERY 0x1087 //ѯ̽ -#define MINOR_SET_DETECTOR_GUARD 0x1088 //̽ -#define MINOR_SET_DETECTOR_UNGUARD 0x1089 //̽ -#define MINOR_WIRELESS_CONFIGURATION 0x108a //߲ -#define MINOR_OPEN_VOICE 0x108b // -#define MINOR_CLOSE_VOICE 0x108c //ر -#define MINOR_ENABLE_FUNCTION_KEY 0x108d //ùܼ -#define MINOR_DISABLE_FUNCTION_KEY 0x108e //رչܼ -#define MINOR_READ_CARD 0x108f //Ѳˢ -#define MINOR_START_BROADCAST 0x1090 //㲥 -#define MINOR_STOP_BROADCAST 0x1091 //ر㲥 -#define MINOR_REMOTE_ZONE_MODULE_UPGRADE 0x1092 //Զģ -#define MINOR_NETWORK_MODULE_EXTEND 0x1093 //ģ -#define MINOR_ADD_CONTROLLER 0x1094 //ңû -#define MINOR_DELETE_CONTORLLER 0x1095 //ɾңû -#define MINOR_REMOTE_NETWORKMODULE_UPGRADE 0x1096 //Զģ -#define MINOR_WIRELESS_OUTPUT_ADD 0x1097 //עģ -#define MINOR_WIRELESS_OUTPUT_DEL 0x1098 //ɾģ -#define MINOR_WIRELESS_REPEATER_ADD 0x1099 //עм -#define MINOR_WIRELESS_REPEATER_DEL 0x109a //ɾм -#define MINOR_PHONELIST_CFG 0x109b //绰 -#define MINOR_RF_SIGNAL_CHECK 0x109c // RFźŲѯ -#define MINOR_USB_UPGRADE 0x109d // USB -#define MINOR_DOOR_TIME_REMINDER_CFG 0x109f //ŴŶʱѲ -#define MINOR_WIRELESS_SIREN_ADD 0x1100 //ע߾ -#define MINOR_WIRELESS_SIREN_DEL 0x1101 //ɾ߾ -#define MINOR_OUT_SCALE_OPEN 0x1102 //翪 -#define MINOR_OUT_SCALE_CLOSE 0x1103 //ر +#define MINOR_HIDDNS_CONFIG 0x1082 // HIDDNS配置 +#define MINOR_REMOTE_KEYBOARD_UPDATA 0x1083 //远程键盘升级日志 +#define MINOR_ZONE_ADD_DETECTOR 0x1084 //防区添加探测器 +#define MINOR_ZONE_DELETE_DETECTOR 0x1085 //防区删除探测器 +#define MINOR_QUERY_DETECTOR_SIGNAL 0x1086 //主机查询探测器信号强度 +#define MINOR_QUERY_DETECTOR_BATTERY 0x1087 //主机查询探测器电量 +#define MINOR_SET_DETECTOR_GUARD 0x1088 //探测器布防 +#define MINOR_SET_DETECTOR_UNGUARD 0x1089 //探测器撤防 +#define MINOR_WIRELESS_CONFIGURATION 0x108a //无线参数配置 +#define MINOR_OPEN_VOICE 0x108b //打开语音 +#define MINOR_CLOSE_VOICE 0x108c //关闭语音 +#define MINOR_ENABLE_FUNCTION_KEY 0x108d //启用功能键 +#define MINOR_DISABLE_FUNCTION_KEY 0x108e //关闭功能键 +#define MINOR_READ_CARD 0x108f //巡更刷卡 +#define MINOR_START_BROADCAST 0x1090 //打开语音广播 +#define MINOR_STOP_BROADCAST 0x1091 //关闭语音广播 +#define MINOR_REMOTE_ZONE_MODULE_UPGRADE 0x1092 //远程升级防区模块 +#define MINOR_NETWORK_MODULE_EXTEND 0x1093 //网络模块参数配置 +#define MINOR_ADD_CONTROLLER 0x1094 //添加遥控器用户 +#define MINOR_DELETE_CONTORLLER 0x1095 //删除遥控器用户 +#define MINOR_REMOTE_NETWORKMODULE_UPGRADE 0x1096 //远程升级网络模块 +#define MINOR_WIRELESS_OUTPUT_ADD 0x1097 //注册无线输出模块 +#define MINOR_WIRELESS_OUTPUT_DEL 0x1098 //删除无线输出模块 +#define MINOR_WIRELESS_REPEATER_ADD 0x1099 //注册无线中继器 +#define MINOR_WIRELESS_REPEATER_DEL 0x109a //删除无线中继器 +#define MINOR_PHONELIST_CFG 0x109b //电话名单参数配置 +#define MINOR_RF_SIGNAL_CHECK 0x109c // RF信号查询 +#define MINOR_USB_UPGRADE 0x109d // USB升级 +#define MINOR_DOOR_TIME_REMINDER_CFG 0x109f //门磁定时提醒参数配置 +#define MINOR_WIRELESS_SIREN_ADD 0x1100 //注册无线警号 +#define MINOR_WIRELESS_SIREN_DEL 0x1101 //删除无线警号 +#define MINOR_OUT_SCALE_OPEN 0x1102 //辅电开启 +#define MINOR_OUT_SCALE_CLOSE 0x1103 //辅电关闭 -#define MINOR_ALARMHOST_4G_MODULS_START 0x1108 //4Gģ -#define MINOR_ALARMHOST_4G_MODULS_STOP 0x1109 //4Gģͣ +#define MINOR_ALARMHOST_4G_MODULS_START 0x1108 //4G模块启用 +#define MINOR_ALARMHOST_4G_MODULS_STOP 0x1109 //4G模块停用 -#define MINOR_EZVIZ_CLOUD_START 0x1110 //өʯ -#define MINOR_EZVIZ_CLOUD_STOP 0x1111 //өʯͣ -#define MINOR_SIPUA_GRID_START 0x1112 //B -#define MINOR_SIPUA_GRID_STOP 0x1113 //Bͣ +#define MINOR_EZVIZ_CLOUD_START 0x1110 //萤石云启用 +#define MINOR_EZVIZ_CLOUD_STOP 0x1111 //萤石云停用 +#define MINOR_SIPUA_GRID_START 0x1112 //国网B启用 +#define MINOR_SIPUA_GRID_STOP 0x1113 //国网B停用 -#define MINOR_MODBUS_FILE_DOWNLOAD 0x1114 //modbusЭļ -#define MINOR_MODBUS_FILE_UPLOAD 0x1115 //modbusЭļ +#define MINOR_MODBUS_FILE_DOWNLOAD 0x1114 //导出modbus协议配置文件 +#define MINOR_MODBUS_FILE_UPLOAD 0x1115 //导入modbus协议配置文件 -#define MINOR_RS485_DLL_FILE_DOWNLOAD 0x1116 //485Эļ -#define MINOR_RS485_DLL_FLIE_UPLOAD 0x1117 //485Эļ -#define MINOR_TX1_REBOOT 0x1118 //TX1ϵͳ +#define MINOR_RS485_DLL_FILE_DOWNLOAD 0x1116 //导出485协议库文件 +#define MINOR_RS485_DLL_FLIE_UPLOAD 0x1117 //导入485协议库文件 +#define MINOR_TX1_REBOOT 0x1118 //TX1系统正常重启 -#define MINOR_LORA_PARAM 0x1119 //LoRa -#define MINOR_GB28181_PLATE_CFG_PARAM 0x111a //ƽ̨ -#define MINOR_GB28181_SERVER_START 0x111b // -#define MINOR_GB28181_SERVER_STOP 0x111c //ͣ -#define MINOR_WEB_AUTHENTICATION 0x111d //web֤ʽ -#define MINOR_SADP_ENABLED 0x111e //SADP -#define MINOR_HTTPS_ENABLED 0x111f //HTTPS -#define MINOR_EZVIZ_PARAM_CFG 0x1120 //өʯ -#define MINOR_SET_MOTION_DETECTION_CFG 0x1121 //ƶ -#define MINOR_GET_MOTION_DETECTION_CFG 0x1122 //ȡƶ -#define MINOR_SET_SHELTER_ALARM_CFG 0x1123 //ڵ -#define MINOR_GET_SHELTER_ALARM_CFG 0x1124 //ȡڵ -#define MINOR_SET_VIDEO_LOSS_CFG 0x1125 //Ƶʧ -#define MINOR_GET_VIDEO_LOSS_CFG 0x1126 //ȡƵʧ -#define MINOR_SET_ABNORMAL_CFG 0x1127 //쳣 -#define MINOR_GET_ABNORMAL_CFG 0x1128 //ȡ쳣 -#define MINOR_SET_ALARM_LINKAGE_CFG 0x1129 //ñ -#define MINOR_GET_ALARM_LINKAGE_CFG 0x112a //ȡ -#define MINOR_SET_NETWORK_CFG 0x112b // -#define MINOR_GET_NETWORK_CFG 0x112c //ȡ -#define MINOR_SET_VIDEO_MASK_CFG 0x112d //ƵڸDz -#define MINOR_GET_VIDEO_MASK_CFG 0x112e //ȡƵڸDz +#define MINOR_LORA_PARAM 0x1119 //LoRa参数 +#define MINOR_GB28181_PLATE_CFG_PARAM 0x111a //国标平台接入参数配置 +#define MINOR_GB28181_SERVER_START 0x111b //国标服务启用 +#define MINOR_GB28181_SERVER_STOP 0x111c //国标服务停用 +#define MINOR_WEB_AUTHENTICATION 0x111d //web认证方式配置 +#define MINOR_SADP_ENABLED 0x111e //SADP开关配置 +#define MINOR_HTTPS_ENABLED 0x111f //HTTPS开关配置 +#define MINOR_EZVIZ_PARAM_CFG 0x1120 //萤石云配置 +#define MINOR_SET_MOTION_DETECTION_CFG 0x1121 //设置移动侦测参数配置 +#define MINOR_GET_MOTION_DETECTION_CFG 0x1122 //获取移动侦测参数配置 +#define MINOR_SET_SHELTER_ALARM_CFG 0x1123 //设置遮挡报警参数配置 +#define MINOR_GET_SHELTER_ALARM_CFG 0x1124 //获取遮挡报警参数配置 +#define MINOR_SET_VIDEO_LOSS_CFG 0x1125 //设置视频丢失参数配置 +#define MINOR_GET_VIDEO_LOSS_CFG 0x1126 //获取视频丢失参数配置 +#define MINOR_SET_ABNORMAL_CFG 0x1127 //设置异常参数配置 +#define MINOR_GET_ABNORMAL_CFG 0x1128 //获取异常参数配置 +#define MINOR_SET_ALARM_LINKAGE_CFG 0x1129 //设置报警联动配置 +#define MINOR_GET_ALARM_LINKAGE_CFG 0x112a //获取报警联动配置 +#define MINOR_SET_NETWORK_CFG 0x112b //设置网络参数配置 +#define MINOR_GET_NETWORK_CFG 0x112c //获取网络参数配置 +#define MINOR_SET_VIDEO_MASK_CFG 0x112d //设置视频遮盖参数配置 +#define MINOR_GET_VIDEO_MASK_CFG 0x112e //获取视频遮盖参数配置 -#define MINOR_BASIC_OPERATION_CFG 0x112f // -#define MINOR_DISPLAY_EFFECT_ADJUST_CFG 0x1130 //ʾЧ -#define MINOR_DISPLAY_PROPERTY_CFG 0x1131 //ʾ -#define MINOR_SIGNAL_CABLE_CFG 0x1132 //ź -#define MINOR_BASIC_CFG 0x1133 // -#define MINOR_IMAGE_ADJUST_CFG 0x1134 //ͼ -#define MINOR_IMAGE_ENHANCE_CFG 0x1135 //ͼǿ -#define MINOR_NOSIGN_SCREEN_SAVER_CFG 0x1136 //ź -#define MINOR_ADVANCED_OPERATION_CFG 0x1137 //߼ -#define MINOR_RECEIVE_CARD_CFG 0x1138 //տ -#define MINOR_INPUT_SUPPORT_CFG 0x1139 //ֹ֧ -#define MINOR_SYSTEM_MAINTAIN_CFG 0x113a //ϵͳά -#define MINOR_SYSTEM_TEST_CFG 0x113b //ϵͳ -#define MINOR_JOINT_CFG 0x113c //ƴ -#define MINOR_SHOW_MODE_CFG 0x113d //ʾģʽ -#define MINOR_ADVANCED_IMAGE_CFG 0x113e //߼ͼ -#define MINOR_SHELF_SIZE_CALIBRATION 0x1140 //ܹ궨 -#define MINOR_CARGO_SENSOR_CALIBRATION 0x1141 //񴫸궨 -#define MINOR_CARGO_PRODUCT_BIND_CFG 0x1142 //Ʒ +#define MINOR_BASIC_OPERATION_CFG 0x112f //基本操作 +#define MINOR_DISPLAY_EFFECT_ADJUST_CFG 0x1130 //显示效果调节 +#define MINOR_DISPLAY_PROPERTY_CFG 0x1131 //显示屏属性配置 +#define MINOR_SIGNAL_CABLE_CFG 0x1132 //信号线缆配置 +#define MINOR_BASIC_CFG 0x1133 //基础配置 +#define MINOR_IMAGE_ADJUST_CFG 0x1134 //图像调整配置 +#define MINOR_IMAGE_ENHANCE_CFG 0x1135 //图像增强配置 +#define MINOR_NOSIGN_SCREEN_SAVER_CFG 0x1136 //无信号屏保 +#define MINOR_ADVANCED_OPERATION_CFG 0x1137 //高级操作 +#define MINOR_RECEIVE_CARD_CFG 0x1138 //接收卡配置 +#define MINOR_INPUT_SUPPORT_CFG 0x1139 //输入支持管理 +#define MINOR_SYSTEM_MAINTAIN_CFG 0x113a //系统维护配置 +#define MINOR_SYSTEM_TEST_CFG 0x113b //系统检测配置 +#define MINOR_JOINT_CFG 0x113c //拼接配置 +#define MINOR_SHOW_MODE_CFG 0x113d //显示模式配置 +#define MINOR_ADVANCED_IMAGE_CFG 0x113e //高级图像配置 +#define MINOR_SHELF_SIZE_CALIBRATION 0x1140 //货架规格标定 +#define MINOR_CARGO_SENSOR_CALIBRATION 0x1141 //货格传感器标定 +#define MINOR_CARGO_PRODUCT_BIND_CFG 0x1142 //货格商品绑定配置 -//2013-04-19 ITS־ -#define MINOR_LOCAL_ADD_CAR_INFO 0x2001 /*ӳϢ*/ -#define MINOR_LOCAL_MOD_CAR_INFO 0x2002 /*޸ijϢ*/ -#define MINOR_LOCAL_DEL_CAR_INFO 0x2003 /*ɾϢ*/ -#define MINOR_LOCAL_FIND_CAR_INFO 0x2004 /*زҳϢ*/ -#define MINOR_LOCAL_ADD_MONITOR_INFO 0x2005 /*ӲϢ*/ -#define MINOR_LOCAL_MOD_MONITOR_INFO 0x2006 /*޸IJϢ*/ -#define MINOR_LOCAL_DEL_MONITOR_INFO 0x2007 /*ɾϢ*/ -#define MINOR_LOCAL_FIND_MONITOR_INFO 0x2008 /*زѯϢ*/ -#define MINOR_LOCAL_FIND_NORMAL_PASS_INFO 0x2009 /*زѯͨϢ*/ -#define MINOR_LOCAL_FIND_ABNORMAL_PASS_INFO 0x200a /*زѯ쳣ͨϢ*/ -#define MINOR_LOCAL_FIND_PEDESTRIAN_PASS_INFO 0x200b /*زѯͨϢ*/ -#define MINOR_LOCAL_PIC_PREVIEW 0x200c /*ͼƬԤ*/ -#define MINOR_LOCAL_SET_GATE_PARM_CFG 0x200d /*ñóڲ*/ -#define MINOR_LOCAL_GET_GATE_PARM_CFG 0x200e /*ȡóڲ*/ -#define MINOR_LOCAL_SET_DATAUPLOAD_PARM_CFG 0x200f /*ñϴ*/ -#define MINOR_LOCAL_GET_DATAUPLOAD_PARM_CFG 0x2010 /*ȡϴ*/ +//2013-04-19 ITS操作日志类型 +#define MINOR_LOCAL_ADD_CAR_INFO 0x2001 /*本地添加车辆信息*/ +#define MINOR_LOCAL_MOD_CAR_INFO 0x2002 /*本地修改车辆信息*/ +#define MINOR_LOCAL_DEL_CAR_INFO 0x2003 /*本地删除车辆信息*/ +#define MINOR_LOCAL_FIND_CAR_INFO 0x2004 /*本地查找车辆信息*/ +#define MINOR_LOCAL_ADD_MONITOR_INFO 0x2005 /*本地添加布防信息*/ +#define MINOR_LOCAL_MOD_MONITOR_INFO 0x2006 /*本地修改布防信息*/ +#define MINOR_LOCAL_DEL_MONITOR_INFO 0x2007 /*本地删除布防信息*/ +#define MINOR_LOCAL_FIND_MONITOR_INFO 0x2008 /*本地查询布防信息*/ +#define MINOR_LOCAL_FIND_NORMAL_PASS_INFO 0x2009 /*本地查询正常通行信息*/ +#define MINOR_LOCAL_FIND_ABNORMAL_PASS_INFO 0x200a /*本地查询异常通行信息*/ +#define MINOR_LOCAL_FIND_PEDESTRIAN_PASS_INFO 0x200b /*本地查询正常通行信息*/ +#define MINOR_LOCAL_PIC_PREVIEW 0x200c /*本地图片预览*/ +#define MINOR_LOCAL_SET_GATE_PARM_CFG 0x200d /*设置本地配置出入口参数*/ +#define MINOR_LOCAL_GET_GATE_PARM_CFG 0x200e /*获取本地配置出入口参数*/ +#define MINOR_LOCAL_SET_DATAUPLOAD_PARM_CFG 0x200f /*设置本地配置数据上传参数*/ +#define MINOR_LOCAL_GET_DATAUPLOAD_PARM_CFG 0x2010 /*获取本地配置数据上传参数*/ -//2013-11-19־ -#define MINOR_LOCAL_DEVICE_CONTROL 0x2011 /*豸(ؿբ)*/ -#define MINOR_LOCAL_ADD_EXTERNAL_DEVICE_INFO 0x2012 /*豸Ϣ */ -#define MINOR_LOCAL_MOD_EXTERNAL_DEVICE_INFO 0x2013 /*޸豸Ϣ */ -#define MINOR_LOCAL_DEL_EXTERNAL_DEVICE_INFO 0x2014 /*ɾ豸Ϣ */ -#define MINOR_LOCAL_FIND_EXTERNAL_DEVICE_INFO 0x2015 /*زѯ豸Ϣ */ -#define MINOR_LOCAL_ADD_CHARGE_RULE 0x2016 /*շѹ */ -#define MINOR_LOCAL_MOD_CHARGE_RULE 0x2017 /*޸շѹ */ -#define MINOR_LOCAL_DEL_CHARGE_RULE 0x2018 /*ɾշѹ */ -#define MINOR_LOCAL_FIND_CHARGE_RULE 0x2019 /*زѯշѹ */ -#define MINOR_LOCAL_COUNT_NORMAL_CURRENTINFO 0x2020 /*ͳͨϢ */ -#define MINOR_LOCAL_EXPORT_NORMAL_CURRENTINFO_REPORT 0x2021 /*صͨϢͳƱ */ -#define MINOR_LOCAL_COUNT_ABNORMAL_CURRENTINFO 0x2022 /*ͳ쳣ͨϢ */ -#define MINOR_LOCAL_EXPORT_ABNORMAL_CURRENTINFO_REPORT 0x2023 /*ص쳣ͨϢͳƱ */ -#define MINOR_LOCAL_COUNT_PEDESTRIAN_CURRENTINFO 0x2024 /*ͳͨϢ */ -#define MINOR_LOCAL_EXPORT_PEDESTRIAN_CURRENTINFO_REPORT 0x2025 /*صͨϢͳƱ */ -#define MINOR_LOCAL_FIND_CAR_CHARGEINFO 0x2026 /*زѯշϢ */ -#define MINOR_LOCAL_COUNT_CAR_CHARGEINFO 0x2027 /*ͳƹշϢ */ -#define MINOR_LOCAL_EXPORT_CAR_CHARGEINFO_REPORT 0x2028 /*صշϢͳƱ */ -#define MINOR_LOCAL_FIND_SHIFTINFO 0x2029 /*زѯӰϢ */ -#define MINOR_LOCAL_FIND_CARDINFO 0x2030 /*زѯƬϢ */ -#define MINOR_LOCAL_ADD_RELIEF_RULE 0x2031 /*Ӽ */ -#define MINOR_LOCAL_MOD_RELIEF_RULE 0x2032 /*޸ļ */ -#define MINOR_LOCAL_DEL_RELIEF_RULE 0x2033 /*ɾ */ -#define MINOR_LOCAL_FIND_RELIEF_RULE 0x2034 /*زѯ */ -#define MINOR_LOCAL_GET_ENDETCFG 0x2035 /*ػȡڿƻ߼ */ -#define MINOR_LOCAL_SET_ENDETCFG 0x2036 /*óڿƻ߼*/ -#define MINOR_LOCAL_SET_ENDEV_ISSUEDDATA 0x2037 /*óڿƻ·ƬϢ */ -#define MINOR_LOCAL_DEL_ENDEV_ISSUEDDATA 0x2038 /*ճڿƻ·ƬϢ */ +//2013-11-19新增日志类型 +#define MINOR_LOCAL_DEVICE_CONTROL 0x2011 /*本地设备控制(本地开关闸)*/ +#define MINOR_LOCAL_ADD_EXTERNAL_DEVICE_INFO 0x2012 /*本地添加外接设备信息 */ +#define MINOR_LOCAL_MOD_EXTERNAL_DEVICE_INFO 0x2013 /*本地修改外接设备信息 */ +#define MINOR_LOCAL_DEL_EXTERNAL_DEVICE_INFO 0x2014 /*本地删除外接设备信息 */ +#define MINOR_LOCAL_FIND_EXTERNAL_DEVICE_INFO 0x2015 /*本地查询外接设备信息 */ +#define MINOR_LOCAL_ADD_CHARGE_RULE 0x2016 /*本地添加收费规则 */ +#define MINOR_LOCAL_MOD_CHARGE_RULE 0x2017 /*本地修改收费规则 */ +#define MINOR_LOCAL_DEL_CHARGE_RULE 0x2018 /*本地删除收费规则 */ +#define MINOR_LOCAL_FIND_CHARGE_RULE 0x2019 /*本地查询收费规则 */ +#define MINOR_LOCAL_COUNT_NORMAL_CURRENTINFO 0x2020 /*本地统计正常通行信息 */ +#define MINOR_LOCAL_EXPORT_NORMAL_CURRENTINFO_REPORT 0x2021 /*本地导出正常通行信息统计报表 */ +#define MINOR_LOCAL_COUNT_ABNORMAL_CURRENTINFO 0x2022 /*本地统计异常通行信息 */ +#define MINOR_LOCAL_EXPORT_ABNORMAL_CURRENTINFO_REPORT 0x2023 /*本地导出异常通行信息统计报表 */ +#define MINOR_LOCAL_COUNT_PEDESTRIAN_CURRENTINFO 0x2024 /*本地统计行人通行信息 */ +#define MINOR_LOCAL_EXPORT_PEDESTRIAN_CURRENTINFO_REPORT 0x2025 /*本地导出行人通行信息统计报表 */ +#define MINOR_LOCAL_FIND_CAR_CHARGEINFO 0x2026 /*本地查询过车收费信息 */ +#define MINOR_LOCAL_COUNT_CAR_CHARGEINFO 0x2027 /*本地统计过车收费信息 */ +#define MINOR_LOCAL_EXPORT_CAR_CHARGEINFO_REPORT 0x2028 /*本地导出过车收费信息统计报表 */ +#define MINOR_LOCAL_FIND_SHIFTINFO 0x2029 /*本地查询交接班信息 */ +#define MINOR_LOCAL_FIND_CARDINFO 0x2030 /*本地查询卡片信息 */ +#define MINOR_LOCAL_ADD_RELIEF_RULE 0x2031 /*本地添加减免规则 */ +#define MINOR_LOCAL_MOD_RELIEF_RULE 0x2032 /*本地修改减免规则 */ +#define MINOR_LOCAL_DEL_RELIEF_RULE 0x2033 /*本地删除减免规则 */ +#define MINOR_LOCAL_FIND_RELIEF_RULE 0x2034 /*本地查询减免规则 */ +#define MINOR_LOCAL_GET_ENDETCFG 0x2035 /*本地获取出入口控制机离线检测配置 */ +#define MINOR_LOCAL_SET_ENDETCFG 0x2036 /*本地设置出入口控制机离线检测配置*/ +#define MINOR_LOCAL_SET_ENDEV_ISSUEDDATA 0x2037 /*本地设置出入口控制机下发卡片信息 */ +#define MINOR_LOCAL_DEL_ENDEV_ISSUEDDATA 0x2038 /*本地清空出入口控制机下发卡片信息 */ -#define MINOR_REMOTE_DEVICE_CONTROL 0x2101 /*Զ豸*/ -#define MINOR_REMOTE_SET_GATE_PARM_CFG 0x2102 /*Զóڲ*/ -#define MINOR_REMOTE_GET_GATE_PARM_CFG 0x2103 /*ȡԶóڲ*/ -#define MINOR_REMOTE_SET_DATAUPLOAD_PARM_CFG 0x2104 /*Զϴ*/ -#define MINOR_REMOTE_GET_DATAUPLOAD_PARM_CFG 0x2105 /*ȡԶϴ*/ -#define MINOR_REMOTE_GET_BASE_INFO 0x2106 /*Զ̻ȡն˻Ϣ*/ -#define MINOR_REMOTE_GET_OVERLAP_CFG 0x2107 /*Զ̻ȡַӲ*/ -#define MINOR_REMOTE_SET_OVERLAP_CFG 0x2108 /*ԶַӲ*/ -#define MINOR_REMOTE_GET_ROAD_INFO 0x2109 /*Զ̻ȡ·Ϣ*/ -#define MINOR_REMOTE_START_TRANSCHAN 0x210a /*Զ̽ͬݷ*/ -#define MINOR_REMOTE_GET_ECTWORKSTATE 0x210b /*Զ̻ȡն˹״̬*/ -#define MINOR_REMOTE_GET_ECTCHANINFO 0x210c /*Զ̻ȡնͨ״̬*/ +#define MINOR_REMOTE_DEVICE_CONTROL 0x2101 /*远程设备控制*/ +#define MINOR_REMOTE_SET_GATE_PARM_CFG 0x2102 /*设置远程配置出入口参数*/ +#define MINOR_REMOTE_GET_GATE_PARM_CFG 0x2103 /*获取远程配置出入口参数*/ +#define MINOR_REMOTE_SET_DATAUPLOAD_PARM_CFG 0x2104 /*设置远程配置数据上传参数*/ +#define MINOR_REMOTE_GET_DATAUPLOAD_PARM_CFG 0x2105 /*获取远程配置数据上传参数*/ +#define MINOR_REMOTE_GET_BASE_INFO 0x2106 /*远程获取终端基本信息*/ +#define MINOR_REMOTE_GET_OVERLAP_CFG 0x2107 /*远程获取字符叠加参数配置*/ +#define MINOR_REMOTE_SET_OVERLAP_CFG 0x2108 /*远程设置字符叠加参数配置*/ +#define MINOR_REMOTE_GET_ROAD_INFO 0x2109 /*远程获取路口信息*/ +#define MINOR_REMOTE_START_TRANSCHAN 0x210a /*远程建立同步数据服务器*/ +#define MINOR_REMOTE_GET_ECTWORKSTATE 0x210b /*远程获取出入口终端工作状态*/ +#define MINOR_REMOTE_GET_ECTCHANINFO 0x210c /*远程获取出入口终端通道状态*/ -//Զ̿ 2013-11-19 -#define MINOR_REMOTE_ADD_EXTERNAL_DEVICE_INFO 0x210d /*Զ豸Ϣ */ -#define MINOR_REMOTE_MOD_EXTERNAL_DEVICE_INFO 0x210e /*Զ޸豸Ϣ */ -#define MINOR_REMOTE_GET_ENDETCFG 0x210f /*Զ̻ȡڿƻ߼ */ -#define MINOR_REMOTE_SET_ENDETCFG 0x2110 /*Զóڿƻ߼*/ -#define MINOR_REMOTE_ENDEV_ISSUEDDATA 0x2111 /*Զóڿƻ·ƬϢ */ -#define MINOR_REMOTE_DEL_ENDEV_ISSUEDDATA 0x2112 /*Զճڿƻ·ƬϢ */ +//远程控制 2013-11-19 +#define MINOR_REMOTE_ADD_EXTERNAL_DEVICE_INFO 0x210d /*远程添加外接设备信息 */ +#define MINOR_REMOTE_MOD_EXTERNAL_DEVICE_INFO 0x210e /*远程修改外接设备信息 */ +#define MINOR_REMOTE_GET_ENDETCFG 0x210f /*远程获取出入口控制机离线检测配置 */ +#define MINOR_REMOTE_SET_ENDETCFG 0x2110 /*远程设置出入口控制机离线检测配置*/ +#define MINOR_REMOTE_ENDEV_ISSUEDDATA 0x2111 /*远程设置出入口控制机下发卡片信息 */ +#define MINOR_REMOTE_DEL_ENDEV_ISSUEDDATA 0x2112 /*远程清空出入口控制机下发卡片信息 */ -//ITS 0x2115~0x2120 ͣλĿ -#define MINOR_REMOTE_ON_CTRL_LAMP 0x2115 /*Զ̿Ƴλָʾ*/ -#define MINOR_REMOTE_OFF_CTRL_LAMP 0x2116 /*رԶ̿Ƴλָʾ*/ +//ITS 0x2115~0x2120 停车场车位项目 +#define MINOR_REMOTE_ON_CTRL_LAMP 0x2115 /*开启远程控制车位指示灯*/ +#define MINOR_REMOTE_OFF_CTRL_LAMP 0x2116 /*关闭远程控制车位指示灯*/ //Netra3.1.0 -#define MINOR_SET_VOICE_LEVEL_PARAM 0x2117 /*С */ -#define MINOR_SET_VOICE_INTERCOM_PARAM 0x2118 /*¼ */ -#define MINOR_SET_INTELLIGENT_PARAM 0x2119 /**/ -#define MINOR_LOCAL_SET_RAID_SPEED 0x211a /*raidٶ*/ -#define MINOR_REMOTE_SET_RAID_SPEED 0x211b /*Զraidٶ*/ +#define MINOR_SET_VOICE_LEVEL_PARAM 0x2117 /*设置音量大小 */ +#define MINOR_SET_VOICE_INTERCOM_PARAM 0x2118 /*设置音量录音 */ +#define MINOR_SET_INTELLIGENT_PARAM 0x2119 /*智能配置*/ +#define MINOR_LOCAL_SET_RAID_SPEED 0x211a /*本地设置raid速度*/ +#define MINOR_REMOTE_SET_RAID_SPEED 0x211b /*远程设置raid速度*/ //Nerta3.1.2 -#define MINOR_REMOTE_CREATE_STORAGE_POOL 0x211c //ԶӴ洢 -#define MINOR_REMOTE_DEL_STORAGE_POOL 0x211d //Զɾ洢 +#define MINOR_REMOTE_CREATE_STORAGE_POOL 0x211c //远程添加存储池 +#define MINOR_REMOTE_DEL_STORAGE_POOL 0x211d //远程删除存储池 -#define MINOR_REMOTE_DEL_PIC 0x2120 //ԶɾͼƬ -#define MINOR_REMOTE_DEL_RECORD 0x2121 //Զɾ¼ -#define MINOR_REMOTE_CLOUD_ENABLE 0x2123 //Զϵͳ -#define MINOR_REMOTE_CLOUD_DISABLE 0x2124 //Զϵͳ -#define MINOR_REMOTE_CLOUD_MODIFY_PARAM 0x2125 //Զ޸Ĵ洢ز -#define MINOR_REMOTE_CLOUD_MODIFY_VOLUME 0x2126 //Զ޸Ĵ洢 -#define MINOR_REMOTE_GET_GB28181_SERVICE_PARAM 0x2127 //Զ̻ȡGB28181 -#define MINOR_REMOTE_SET_GB28181_SERVICE_PARAM 0x2128 //ԶGB28181 -#define MINOR_LOCAL_GET_GB28181_SERVICE_PARAM 0x2129 //ػȡGB28181 -#define MINOR_LOCAL_SET_GB28181_SERVICE_PARAM 0x212a //B28181 -#define MINOR_REMOTE_SET_SIP_SERVER 0x212b //ԶSIP SERVER -#define MINOR_LOCAL_SET_SIP_SERVER 0x212c //SIP SERVER -#define MINOR_LOCAL_BLOCKALLOWFILE_OUTPUT 0x212d // -#define MINOR_LOCAL_BLOCKALLOWFILE_INPUT 0x212e // -#define MINOR_REMOTE_BLOCKALLOWCFGFILE_OUTPUT 0x212f //Զ -#define MINOR_REMOTE_BLOCKALLOWCFGFILE_INPUT 0x2130 //Զ +#define MINOR_REMOTE_DEL_PIC 0x2120 //远程删除图片数据 +#define MINOR_REMOTE_DEL_RECORD 0x2121 //远程删除录像数据 +#define MINOR_REMOTE_CLOUD_ENABLE 0x2123 //远程设置云系统启用 +#define MINOR_REMOTE_CLOUD_DISABLE 0x2124 //远程设置云系统禁用 +#define MINOR_REMOTE_CLOUD_MODIFY_PARAM 0x2125 //远程修改存储池参数 +#define MINOR_REMOTE_CLOUD_MODIFY_VOLUME 0x2126 //远程修改存储池容量 +#define MINOR_REMOTE_GET_GB28181_SERVICE_PARAM 0x2127 //远程获取GB28181服务参数 +#define MINOR_REMOTE_SET_GB28181_SERVICE_PARAM 0x2128 //远程设置GB28181服务参数 +#define MINOR_LOCAL_GET_GB28181_SERVICE_PARAM 0x2129 //本地获取GB28181服务参数 +#define MINOR_LOCAL_SET_GB28181_SERVICE_PARAM 0x212a //本地配置B28181服务参数 +#define MINOR_REMOTE_SET_SIP_SERVER 0x212b //远程配置SIP SERVER +#define MINOR_LOCAL_SET_SIP_SERVER 0x212c //本地配置SIP SERVER +#define MINOR_LOCAL_BLOCKALLOWFILE_OUTPUT 0x212d //本地名单导出 +#define MINOR_LOCAL_BLOCKALLOWFILE_INPUT 0x212e //本地名单导入 +#define MINOR_REMOTE_BLOCKALLOWCFGFILE_OUTPUT 0x212f //远程名单导出 +#define MINOR_REMOTE_BLOCKALLOWCFGFILE_INPUT 0x2130 //远程名单导入 -#define MINOR_REMOTE_CREATE_MOD_VIEWLIB_SPACE 0x2200 /*Զ̴/޸ͼռ*/ -#define MINOR_REMOTE_DELETE_VIEWLIB_FILE 0x2201 /*Զɾͼļ*/ -#define MINOR_REMOTE_DOWNLOAD_VIEWLIB_FILE 0x2202 /*Զͼļ*/ -#define MINOR_REMOTE_UPLOAD_VIEWLIB_FILE 0x2203 /*Զϴͼļ*/ -#define MINOR_LOCAL_CREATE_MOD_VIEWLIB_SPACE 0x2204 /*ش/޸ͼռ*/ +#define MINOR_REMOTE_CREATE_MOD_VIEWLIB_SPACE 0x2200 /*远程创建/修改视图库空间*/ +#define MINOR_REMOTE_DELETE_VIEWLIB_FILE 0x2201 /*远程删除视图库文件*/ +#define MINOR_REMOTE_DOWNLOAD_VIEWLIB_FILE 0x2202 /*远程下载视图库文件*/ +#define MINOR_REMOTE_UPLOAD_VIEWLIB_FILE 0x2203 /*远程上传视图库文件*/ +#define MINOR_LOCAL_CREATE_MOD_VIEWLIB_SPACE 0x2204 /*本地创建/修改视图库空间*/ -#define MINOR_LOCAL_SET_DEVICE_ACTIVE 0x3000 //ؼ豸 -#define MINOR_REMOTE_SET_DEVICE_ACTIVE 0x3001 //Զ̼豸 -#define MINOR_LOCAL_PARA_FACTORY_DEFAULT 0x3002 //ػظ -#define MINOR_REMOTE_PARA_FACTORY_DEFAULT 0x3003 //Զָ̻ -#define MIMOR_REMOTE_DELETE_ALL_VERIFYORCAP_PICS 0x3004 //Զɾ֤ץͼƬ -#define MIMOR_LOCAL_DELETE_ALL_VERIFYORCAP_PICS 0x3005 //ɾ֤ץͼƬ -#define MIMOR_REMOTE_DELETE_EVENTS_AT_SPECTIME 0x3006 //Զָ̰ʱɾ¼ -#define MIMOR_LOCAL_DELETE_EVENTS_AT_SPECTIME 0x3007 //ذָʱɾ¼ -#define MIMOR_REMOTE_OPEN_SUMMER_TIME 0x3008 //Զ̿ʱ -#define MIMOR_LOCAL_OPEN_SUMMER_TIME 0x3009 //ؿʱ -#define MIMOR_REMOTE_CLOSE_SUMMER_TIME 0x3010 //Զ̹رʱ -#define MIMOR_LOCAL_CLOSE_SUMMER_TIME 0x3011 //عرʱ -#define MIMOR_REMOTE_EZVIZ_UNBIND 0x3012 //Զөʯƽ -#define MIMOR_LOCAL_EZVIZ_UNBIND 0x3013 //өʯƽ -#define MIMOR_ENTER_LOCALUI_BACKGROUND 0x3014 //UĮ -#define MIMOR_REMOTE_DELETE_FACEBASEMAP 0x3015 //Զɾͼ -#define MIMOR_LOCAL_DELETE_FACEBASEMAP 0x3016 //ɾͼ +#define MINOR_LOCAL_SET_DEVICE_ACTIVE 0x3000 //本地激活设备 +#define MINOR_REMOTE_SET_DEVICE_ACTIVE 0x3001 //远程激活设备 +#define MINOR_LOCAL_PARA_FACTORY_DEFAULT 0x3002 //本地回复出厂设置 +#define MINOR_REMOTE_PARA_FACTORY_DEFAULT 0x3003 //远程恢复出厂设置 +#define MIMOR_REMOTE_DELETE_ALL_VERIFYORCAP_PICS 0x3004 //远程删除所有认证或抓拍图片 +#define MIMOR_LOCAL_DELETE_ALL_VERIFYORCAP_PICS 0x3005 //本地删除所有认证或抓拍图片 +#define MIMOR_REMOTE_DELETE_EVENTS_AT_SPECTIME 0x3006 //远程按指定时间删除事件 +#define MIMOR_LOCAL_DELETE_EVENTS_AT_SPECTIME 0x3007 //本地按指定时间删除事件 +#define MIMOR_REMOTE_OPEN_SUMMER_TIME 0x3008 //远程开启夏令时 +#define MIMOR_LOCAL_OPEN_SUMMER_TIME 0x3009 //本地开启夏令时 +#define MIMOR_REMOTE_CLOSE_SUMMER_TIME 0x3010 //远程关闭夏令时 +#define MIMOR_LOCAL_CLOSE_SUMMER_TIME 0x3011 //本地关闭夏令时 +#define MIMOR_REMOTE_EZVIZ_UNBIND 0x3012 //远程萤石云解绑 +#define MIMOR_LOCAL_EZVIZ_UNBIND 0x3013 //本地萤石云解绑 +#define MIMOR_ENTER_LOCALUI_BACKGROUND 0x3014 //进入UI后台 +#define MIMOR_REMOTE_DELETE_FACEBASEMAP 0x3015 //远程删除人脸底图 +#define MIMOR_LOCAL_DELETE_FACEBASEMAP 0x3016 //本地删除人脸底图 -/*Ϣ־*/ -#define MINOR_UPLAOD_STATIC_MATERIAL 0x2401 //̬زϴ -#define MINOR_UPLOAD_DYNAMIC_MATERIAL 0x2402 //̬زϴ -#define MINOR_DELETE_MATERIAL 0x2403 //ɾز -#define MINOR_DOWNLOAD_STATIC_MATERIAL 0x2404 //̬ز -#define MINOR_COVER_STATIC_MATERIAL 0x2405 //̬زĸ -#define MINOR_APPROVE_MATERIAL 0x2406 //ز -#define MINOR_UPLAOD_PROGRAM 0x2407 //ϴĿ -#define MINOR_DOWNLOAD_PROGRAM 0x2408 //ؽĿ -#define MINOR_DELETE_PROGRAM 0x2409 //ɾĿ -#define MINOR_MODIFY_PROGRAM 0x240a //Ŀ޸ -#define MINOR_APPROVE_PRAGRAM 0x240b //Ŀ -#define MINOR_UPLAOD_SCHEDULE 0x240c //ϴճ -#define MINOR_DOWNLOAD_SCHEDULE 0x240d //ճ -#define MINOR_DELETE_SCHEDULE 0x240e //ɾճ -#define MINOR_MODIFY_SCHEDULE 0x240f //޸ճ -#define MINOR_RELEASE_SCHEDULE 0x2410 //ճ -#define MINOR_ADD_TERMINAL 0x2411 //ն -#define MINOR_DELETE_TERMINAL 0x2412 //ɾն -#define MINOR_MODIFY_TERMIANL_PARAM 0x2413 //޸ն˲ -#define MINOR_MODIFY_TERMIANL_PLAY_PARAM 0x2414 //ն˲Ų -#define MINOR_ADD_TERMIANL_GROUP 0x2415 //ն -#define MINOR_MODIFY_TERMINAL_GROUP_PARAM 0x2416 //޸ն -#define MINOR_DELETE_TERMIANL_GROUP 0x2417 //ɾն -#define MINOR_TERMINAL_PLAY_CONTROL 0x2418 //ն˲ſ -#define MINOR_TERMINAL_ON_OFF_LINE 0x2419 //ն -#define MINOR_SET_SWITCH_PLAN 0x241a //ն˶ʱػƻ -#define MINOR_SET_VOLUME_PLAN 0x241b //ն˶ʱƻ -#define MINOR_TERMINAL_SCREENSHOT 0x241c //ն˽ -#define MINOR_SYSTEM_TIME_CFG 0x241d //ϵͳУʱ -#define MINOR_ADD_USER_CFG 0x241e //û -#define MINOR_DEL_USER_CFG 0x241f //ɾû -#define MINOR_REMOTE_MANAGE_HDD 0x2420 //Զ̱༭Ӳ -#define MINOR_TERMINAL_UPDATE_START 0x2421 //ն -#define MINOR_SVR_RESTORE_DEFAULT_PARAM 0x2422 //Զָ̻Ĭ -#define MINOR_SVR_REMOTE_RESTORE_FACTORY 0x2423 //Զָ̻ -#define MINOR_SVR_REMOTE_REBOOT 0x2424 //Զ -#define MINOR_SVR_MODIFY_NETWORK_PARAM 0x2425 //޸ -#define MINOR_SVR_SOFTWARE_UPGRADE 0x2426 // +/*信息发布服务器操作日志*/ +#define MINOR_UPLAOD_STATIC_MATERIAL 0x2401 //静态素材上传 +#define MINOR_UPLOAD_DYNAMIC_MATERIAL 0x2402 //动态素材上传 +#define MINOR_DELETE_MATERIAL 0x2403 //删除素材 +#define MINOR_DOWNLOAD_STATIC_MATERIAL 0x2404 //静态素材下载 +#define MINOR_COVER_STATIC_MATERIAL 0x2405 //静态素材覆盖 +#define MINOR_APPROVE_MATERIAL 0x2406 //素材审核 +#define MINOR_UPLAOD_PROGRAM 0x2407 //上传节目 +#define MINOR_DOWNLOAD_PROGRAM 0x2408 //下载节目 +#define MINOR_DELETE_PROGRAM 0x2409 //删除节目 +#define MINOR_MODIFY_PROGRAM 0x240a //节目属性修改 +#define MINOR_APPROVE_PRAGRAM 0x240b //节目审核 +#define MINOR_UPLAOD_SCHEDULE 0x240c //上传日程 +#define MINOR_DOWNLOAD_SCHEDULE 0x240d //下载日程 +#define MINOR_DELETE_SCHEDULE 0x240e //删除日程 +#define MINOR_MODIFY_SCHEDULE 0x240f //修改日程属性 +#define MINOR_RELEASE_SCHEDULE 0x2410 //发布日程 +#define MINOR_ADD_TERMINAL 0x2411 //添加终端 +#define MINOR_DELETE_TERMINAL 0x2412 //删除终端 +#define MINOR_MODIFY_TERMIANL_PARAM 0x2413 //修改终端参数 +#define MINOR_MODIFY_TERMIANL_PLAY_PARAM 0x2414 //配置终端播放参数 +#define MINOR_ADD_TERMIANL_GROUP 0x2415 //添加终端组 +#define MINOR_MODIFY_TERMINAL_GROUP_PARAM 0x2416 //修改终端组参数 +#define MINOR_DELETE_TERMIANL_GROUP 0x2417 //删除终端组 +#define MINOR_TERMINAL_PLAY_CONTROL 0x2418 //终端播放控制 +#define MINOR_TERMINAL_ON_OFF_LINE 0x2419 //终端上下线 +#define MINOR_SET_SWITCH_PLAN 0x241a //设置终端定时开关机计划 +#define MINOR_SET_VOLUME_PLAN 0x241b //设置终端定时音量计划 +#define MINOR_TERMINAL_SCREENSHOT 0x241c //终端截屏 +#define MINOR_SYSTEM_TIME_CFG 0x241d //系统校时 +#define MINOR_ADD_USER_CFG 0x241e //添加用户配置 +#define MINOR_DEL_USER_CFG 0x241f //删除用户配置 +#define MINOR_REMOTE_MANAGE_HDD 0x2420 //远程编辑硬盘 +#define MINOR_TERMINAL_UPDATE_START 0x2421 //终端升级 +#define MINOR_SVR_RESTORE_DEFAULT_PARAM 0x2422 //服务器远程恢复默认 +#define MINOR_SVR_REMOTE_RESTORE_FACTORY 0x2423 //服务器远程恢复出厂设置 +#define MINOR_SVR_REMOTE_REBOOT 0x2424 //服务器远程重启 +#define MINOR_SVR_MODIFY_NETWORK_PARAM 0x2425 //服务器网络参数修改 +#define MINOR_SVR_SOFTWARE_UPGRADE 0x2426 //服务器软件升级 -#define MINOR_REMOTE_CONFERENCE_CONFIG 0x2501 //MCU -#define MINOR_REMOTE_TERMINAL_CONFIG 0x2502 //MCUն -#define MINOR_REMOTE_GROUP_CONFIG 0x2503 //MCU -#define MINOR_REMOTE_CONFERENCE_CTRL 0x2504 //MCU -#define MINOR_REMOTE_TERMINAL_CTRL 0x2505 //MCUն˿ -#define MINOR_ADD_VIDEOWALLSCENE 0x2506 //½ǽ -#define MINOR_DEL_VIDEOWALLSCENE 0x2507 //ɾǽ -#define MINOR_SAVE_VIDEOWALLSCENE 0x2508 //ǽ -#define MINOR_UPLOAD_SCENECFGFILE 0x2509 //ϴǽļ -#define MINOR_DOWNLOAD_SCENECFGFILE 0x250a //صǽļ +#define MINOR_REMOTE_CONFERENCE_CONFIG 0x2501 //MCU会议配置 +#define MINOR_REMOTE_TERMINAL_CONFIG 0x2502 //MCU终端配置 +#define MINOR_REMOTE_GROUP_CONFIG 0x2503 //MCU分组配置 +#define MINOR_REMOTE_CONFERENCE_CTRL 0x2504 //MCU会议控制 +#define MINOR_REMOTE_TERMINAL_CTRL 0x2505 //MCU终端控制 +#define MINOR_ADD_VIDEOWALLSCENE 0x2506 //新建电视墙场景 +#define MINOR_DEL_VIDEOWALLSCENE 0x2507 //删除电视墙场景 +#define MINOR_SAVE_VIDEOWALLSCENE 0x2508 //保存电视墙场景 +#define MINOR_UPLOAD_SCENECFGFILE 0x2509 //上传电视墙场景配置文件 +#define MINOR_DOWNLOAD_SCENECFGFILE 0x250a //下载电视墙场景配置文件 -//NVR -#define MINOR_LOCAL_RESET_LOGIN_PASSWORD 0x2600 /* ùԱ½*/ -#define MINOR_REMOTE_RESET_LOGIN_PASSWORD 0x2601 /* ԶùԱ¼ */ -#define MINOR_LOCAL_FACE_BASE_CREATE 0x2602 /* Աȿⴴ*/ -#define MINOR_REMOTE_FACE_BASE_CREATE 0x2603 /* ԶԱȿⴴ*/ -#define MINOR_LOCAL_FACE_BASE_MODIFY 0x2604 /* Աȿ޸*/ -#define MINOR_REMOTE_FACE_BASE_MODIFY 0x2605 /* ԶԱȿ޸*/ -#define MINOR_LOCAL_FACE_BASE_DELETE 0x2606 /* Աȿɾ*/ -#define MINOR_REMOTE_FACE_BASE_DELETE 0x2607 /* ԶԱȿɾ*/ -#define MINOR_LOCAL_FACE_DATA_APPEND 0x2608 /* ¼*/ -#define MINOR_REMOTE_FACE_DATA_APPEND 0x2609 /* Զ¼*/ -#define MINOR_LOCAL_FACE_DATA_SEARCH 0x2610 /* ȶݲ*/ -#define MINOR_REMOTE_FACE_DATA_SEARCH 0x2611 /* Զȶݲ*/ -#define MINOR_LOCAL_FACE_DATA_ANALYSIS 0x2612 /* ͼƬ*/ -#define MINOR_REMOTE_FACE_DATA_ANALYSIS 0x2613 /* ԶͼƬ*/ -#define MINOR_LOCAL_FACE_DATA_EDIT 0x2614 /* ޸*/ -#define MINOR_REMOTE_FACE_DATA_EDIT 0x2615 /* Զ޸*/ +//NVR后端 +#define MINOR_LOCAL_RESET_LOGIN_PASSWORD 0x2600 /* 本地重置管理员登陆密码*/ +#define MINOR_REMOTE_RESET_LOGIN_PASSWORD 0x2601 /* 远程重置管理员登录密码 */ +#define MINOR_LOCAL_FACE_BASE_CREATE 0x2602 /* 本地人脸对比库创建*/ +#define MINOR_REMOTE_FACE_BASE_CREATE 0x2603 /* 远程人脸对比库创建*/ +#define MINOR_LOCAL_FACE_BASE_MODIFY 0x2604 /* 本地人脸对比库修改*/ +#define MINOR_REMOTE_FACE_BASE_MODIFY 0x2605 /* 远程人脸对比库修改*/ +#define MINOR_LOCAL_FACE_BASE_DELETE 0x2606 /* 本地人脸对比库删除*/ +#define MINOR_REMOTE_FACE_BASE_DELETE 0x2607 /* 远程人脸对比库删除*/ +#define MINOR_LOCAL_FACE_DATA_APPEND 0x2608 /* 本地录入人脸数据*/ +#define MINOR_REMOTE_FACE_DATA_APPEND 0x2609 /* 远程录入人脸数据*/ +#define MINOR_LOCAL_FACE_DATA_SEARCH 0x2610 /* 本地人脸比对数据查找*/ +#define MINOR_REMOTE_FACE_DATA_SEARCH 0x2611 /* 远程人脸比对数据查找*/ +#define MINOR_LOCAL_FACE_DATA_ANALYSIS 0x2612 /* 本地图片分析操作*/ +#define MINOR_REMOTE_FACE_DATA_ANALYSIS 0x2613 /* 远程图片分析操作*/ +#define MINOR_LOCAL_FACE_DATA_EDIT 0x2614 /* 本地人脸数据修改*/ +#define MINOR_REMOTE_FACE_DATA_EDIT 0x2615 /* 远程人脸数据修改*/ -#define MINOR_LOCAL_FACE_DATA_DELETE 0x2616 /* ɾ*/ -#define MINOR_REMOTE_FACE_DATA_DELET 0x2617 /* Զɾ*/ +#define MINOR_LOCAL_FACE_DATA_DELETE 0x2616 /* 本地人脸数据删除*/ +#define MINOR_REMOTE_FACE_DATA_DELET 0x2617 /* 远程人脸数据删除*/ -#define MINOR_LOCAL_VCA_ANALYSIS_CFG 0x2618 /* ܷ*/ -#define MINOR_REMOTE_VCA_ANALYSIS_CFG 0x2619 /* Զܷ*/ +#define MINOR_LOCAL_VCA_ANALYSIS_CFG 0x2618 /* 本地智能分析配置*/ +#define MINOR_REMOTE_VCA_ANALYSIS_CFG 0x2619 /* 远程智能分析配置*/ -#define MINOR_LOCAL_FACE_BASE_IMPORT 0x261a /* ص*/ -#define MINOR_LOCAL_FACE_BASE_EXPORT 0x261b /* ص*/ -//NVRȺ -#define MINOR_REMOTE_CLUSTER_MODE_CONFIG 0x261c /* Զ̼Ⱥģʽò*/ -#define MINOR_LOCAL_CLUSTER_MODE_CONFIG 0x261d /* ؼȺģʽò*/ -#define MINOR_REMOTE_CLUSTER_NETWORK_CONFIG 0x261e /* Զ̼Ⱥò*/ -#define MINOR_LOCAL_CLUSTER_NETWORK_CONFIG 0x261f /* ؼȺò*/ -#define MINOR_REMOTE_CLUSTER_ADD_DEVICE 0x2620 /* Զ̼Ⱥ豸*/ -#define MINOR_LOCAL_CLUSTER_ADD_DEVICE 0x2621 /* ؼȺ豸*/ -#define MINOR_REMOTE_CLUSTER_DEL_DEVICE 0x2622 /* Զ̼Ⱥɾ豸*/ -#define MINOR_LOCAL_CLUSTER_DEL_DEVICE 0x2623 /* ؼȺɾ豸*/ -#define MINOR_REMOTE_HFPD_CFG 0x2624 /* Զ̸Ƶͼʶ*/ -#define MINOR_REMOTE_FACE_CONTRAST_TASK 0x2625 /* Զȶ */ -#define MINOR_REMOTE_LFPD_CFG 0x2626 /* Զ̵ƵԱ*/ -#define MINOR_REMOTE_IOTCFGFILE_INPUT 0x2627//Զ̵IOTļ -#define MINOR_REMOTE_IOTCFGFILE_OUTPUT 0x2628//Զ̵IOTļ -#define MINOR_LOCAL_IOT_ADD 0x2629//IOTͨ -#define MINOR_REMOTE_IOT_ADD 0x262a//ԶIOTͨ -#define MINOR_LOCAL_IOT_DEL 0x262b//ɾIOTͨ -#define MINOR_REMOTE_IOT_DEL 0x262c//ԶɾIOTͨ -#define MINOR_LOCAL_IOT_SET 0x262d//IOTͨ -#define MINOR_REMOTE_IOT_SET 0x262e//ԶIOTͨ -#define MINOR_LOCAL_IOTCFGFILE_INPUT 0x262f //صIOTļ -#define MINOR_LOCAL_IOTCFGFILE_OUTPUT 0x2630//صIOTļ -#define MINOR_LOCAL_VAD_CFG 0x2631 /* */ -#define MINOR_REMOTE_VAD_CFG 0x2632 /* Զ*/ -#define MINOR_LOCAL_ADDRESS_FILTER_CONFIG 0x2633 /* صַ*/ -#define MINOR_REMOTE_ADDRESS_FILTER_CONFIG 0x2634 /* Զ̵ַ*/ -#define MINOR_LOCAL_POE_CFG 0x2635 /* POE*/ -#define MINOR_REMOTE_POE_CFG 0x2636 /* ԶPOE*/ -#define MINOR_LOCAL_RESET_CHANNEL_PASSWORD 0x2637 /* ͨ*/ -#define MINOR_REMOTE_RESET_CHANNEL_PASSWORD 0x2638 /* Զͨ*/ -#define MINOR_LOCAL_SSD_UPGRADE_START 0x2639 /* SSDļϵͳʼ*/ -#define MINOR_LOCAL_SSD_UPGRADE_STOP 0x2640 /* SSDļϵͳ*/ -#define MINOR_REMOTE_SSD_UPGRADE_START 0x2641 /* ԶSSDļϵͳʼ*/ -#define MINOR_REMOTE_SSD_UPGRADE_STOP 0x2642 /* ԶSSDļϵͳ*/ -#define MINOR_LOCAL_SSD_FORMAT_START 0x2643 /*SSDļϵͳʽʼ*/ -#define MINOR_LOCAL_SSD_FORMAT_STOP 0x2644 /*SSDļϵͳʽ*/ -#define MINOR_REMOTE_SSD_FORMAT_START 0x2645 /*ԶSSDļϵͳʽʼ*/ -#define MINOR_REMOTE_SSD_FORMAT_STOP 0x2646 /*ԶSSDļϵͳʽ*/ -#define MINOR_LOCAL_AUTO_SWITCH_CONFIG 0x2647 /* Զػ*/ -#define MINOR_REMOTE_AUTO_SWITCH_CONFIG 0x2648 /* ԶԶػ*/ +#define MINOR_LOCAL_FACE_BASE_IMPORT 0x261a /* 本地导入人脸库*/ +#define MINOR_LOCAL_FACE_BASE_EXPORT 0x261b /* 本地导出人脸库*/ +//NVR集群 +#define MINOR_REMOTE_CLUSTER_MODE_CONFIG 0x261c /* 远程集群模式配置操作*/ +#define MINOR_LOCAL_CLUSTER_MODE_CONFIG 0x261d /* 本地集群模式配置操作*/ +#define MINOR_REMOTE_CLUSTER_NETWORK_CONFIG 0x261e /* 远程集群组网配置操作*/ +#define MINOR_LOCAL_CLUSTER_NETWORK_CONFIG 0x261f /* 本地集群组网配置操作*/ +#define MINOR_REMOTE_CLUSTER_ADD_DEVICE 0x2620 /* 远程集群添加设备操作*/ +#define MINOR_LOCAL_CLUSTER_ADD_DEVICE 0x2621 /* 本地集群添加设备操作*/ +#define MINOR_REMOTE_CLUSTER_DEL_DEVICE 0x2622 /* 远程集群删除设备操作*/ +#define MINOR_LOCAL_CLUSTER_DEL_DEVICE 0x2623 /* 本地集群删除设备操作*/ +#define MINOR_REMOTE_HFPD_CFG 0x2624 /* 远程高频图像特征识别检测配置*/ +#define MINOR_REMOTE_FACE_CONTRAST_TASK 0x2625 /* 远程人脸比对任务配置 */ +#define MINOR_REMOTE_LFPD_CFG 0x2626 /* 远程低频人员检测配置*/ +#define MINOR_REMOTE_IOTCFGFILE_INPUT 0x2627//远程导入IOT配置文件 +#define MINOR_REMOTE_IOTCFGFILE_OUTPUT 0x2628//远程导出IOT配置文件 +#define MINOR_LOCAL_IOT_ADD 0x2629//本地添加IOT通道 +#define MINOR_REMOTE_IOT_ADD 0x262a//远程添加IOT通道 +#define MINOR_LOCAL_IOT_DEL 0x262b//本地删除IOT通道 +#define MINOR_REMOTE_IOT_DEL 0x262c//远程删除IOT通道 +#define MINOR_LOCAL_IOT_SET 0x262d//本地配置IOT通道 +#define MINOR_REMOTE_IOT_SET 0x262e//远程配置IOT通道 +#define MINOR_LOCAL_IOTCFGFILE_INPUT 0x262f //本地导入IOT配置文件 +#define MINOR_LOCAL_IOTCFGFILE_OUTPUT 0x2630//本地导出IOT配置文件 +#define MINOR_LOCAL_VAD_CFG 0x2631 /* 本地语音活动检测配置*/ +#define MINOR_REMOTE_VAD_CFG 0x2632 /* 远程语音活动检测配置*/ +#define MINOR_LOCAL_ADDRESS_FILTER_CONFIG 0x2633 /* 本地地址过滤配置*/ +#define MINOR_REMOTE_ADDRESS_FILTER_CONFIG 0x2634 /* 远程地址过滤配置*/ +#define MINOR_LOCAL_POE_CFG 0x2635 /* 本地POE配置*/ +#define MINOR_REMOTE_POE_CFG 0x2636 /* 远程POE配置*/ +#define MINOR_LOCAL_RESET_CHANNEL_PASSWORD 0x2637 /* 本地重置通道密码*/ +#define MINOR_REMOTE_RESET_CHANNEL_PASSWORD 0x2638 /* 远程重置通道密码*/ +#define MINOR_LOCAL_SSD_UPGRADE_START 0x2639 /* 本地SSD文件系统升级开始*/ +#define MINOR_LOCAL_SSD_UPGRADE_STOP 0x2640 /* 本地SSD文件系统升级结束*/ +#define MINOR_REMOTE_SSD_UPGRADE_START 0x2641 /* 远程SSD文件系统升级开始*/ +#define MINOR_REMOTE_SSD_UPGRADE_STOP 0x2642 /* 远程SSD文件系统升级结束*/ +#define MINOR_LOCAL_SSD_FORMAT_START 0x2643 /*本地SSD文件系统格式化开始*/ +#define MINOR_LOCAL_SSD_FORMAT_STOP 0x2644 /*本地SSD文件系统格式化结束*/ +#define MINOR_REMOTE_SSD_FORMAT_START 0x2645 /*远程SSD文件系统格式化开始*/ +#define MINOR_REMOTE_SSD_FORMAT_STOP 0x2646 /*远程SSD文件系统格式化结束*/ +#define MINOR_LOCAL_AUTO_SWITCH_CONFIG 0x2647 /* 本地自动开关机配置*/ +#define MINOR_REMOTE_AUTO_SWITCH_CONFIG 0x2648 /* 远程自动开关机配置*/ -#define MINOR_LOCAL_SSD_INITIALIZATION_START 0x264a /* SSDʼʼ*/ -#define MINOR_LOCAL_SSD_INITIALIZATION_END 0x264b /* SSDʼ*/ -#define MINOR_REMOTE_SSD_INITIALIZATION_START 0x264c /* ԶSSDʼʼ*/ -#define MINOR_REMOTE_SSD_INITIALIZATION_END 0x264d /* ԶSSDʼ*/ +#define MINOR_LOCAL_SSD_INITIALIZATION_START 0x264a /* 本地SSD初始化开始*/ +#define MINOR_LOCAL_SSD_INITIALIZATION_END 0x264b /* 本地SSD初始化结束*/ +#define MINOR_REMOTE_SSD_INITIALIZATION_START 0x264c /* 远程SSD初始化开始*/ +#define MINOR_REMOTE_SSD_INITIALIZATION_END 0x264d /* 远程SSD初始化结束*/ -//AIƽ̨IJ־ -#define MINOR_REMOTE_AI_MODEL_ADD 0x2650//ģͰ -#define MINOR_REMOTE_AI_MODEL_QUERY 0x2651//ģͰѯ -#define MINOR_REMOTE_AI_MODEL_DELETE 0x2652//ģͰɾ -#define MINOR_REMOTE_AI_MODEL_UPDATE 0x2653//ģͰ -#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_ADD 0x2654//ͼƬѯ -#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_QUERY 0x2655//ͼƬѯѯ -#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_DELETE 0x2656//ͼƬѯɾ -#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_MODIFY 0x2657//ͼƬѯ޸ -#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_ADD 0x2658//Ƶѯ -#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_QUERY 0x2659//Ƶѯѯ -#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_DELETE 0x265A//Ƶѯɾ -#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_MODIFY 0x265B//Ƶѯ޸ -#define MINOR_REMOTE_AI_PICTURE_TASK_ADD 0x265C//ͼƬ -#define MINOR_REMOTE_AI_PICTURE_TASK_QUERY 0x265D//ͼƬѯ -#define MINOR_REMOTE_AI_PICTURE_TASK_DELETE 0x265E//ͼƬɾ -#define MINOR_REMOTE_AI_PICTURE_TASK_MODIFY 0x265F//ͼƬ޸ -#define MINOR_REMOTE_AI_VIDEO_TASK_ADD 0x2660//Ƶ -#define MINOR_REMOTE_AI_VIDEO_TASK_QUERY 0x2661//Ƶѯ -#define MINOR_REMOTE_AI_VIDEO_TASK_DELETE 0x2662//Ƶɾ -#define MINOR_REMOTE_AI_VIDEO_TASK_MODIFY 0x2663//Ƶ޸ -#define MINOR_REMOTE_AI_RULE_CONFIG 0x2664//AI +//定义AI开放平台的操作日志 +#define MINOR_REMOTE_AI_MODEL_ADD 0x2650//模型包添加 +#define MINOR_REMOTE_AI_MODEL_QUERY 0x2651//模型包查询 +#define MINOR_REMOTE_AI_MODEL_DELETE 0x2652//模型包删除 +#define MINOR_REMOTE_AI_MODEL_UPDATE 0x2653//模型包更新 +#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_ADD 0x2654//图片轮询任务增加 +#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_QUERY 0x2655//图片轮询任务查询 +#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_DELETE 0x2656//图片轮询任务删除 +#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_MODIFY 0x2657//图片轮询任务修改 +#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_ADD 0x2658//视频轮询任务增加 +#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_QUERY 0x2659//视频轮询任务查询 +#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_DELETE 0x265A//视频轮询任务删除 +#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_MODIFY 0x265B//视频轮询任务修改 +#define MINOR_REMOTE_AI_PICTURE_TASK_ADD 0x265C//图片任务增加 +#define MINOR_REMOTE_AI_PICTURE_TASK_QUERY 0x265D//图片任务查询 +#define MINOR_REMOTE_AI_PICTURE_TASK_DELETE 0x265E//图片任务删除 +#define MINOR_REMOTE_AI_PICTURE_TASK_MODIFY 0x265F//图片任务修改 +#define MINOR_REMOTE_AI_VIDEO_TASK_ADD 0x2660//视频任务增加 +#define MINOR_REMOTE_AI_VIDEO_TASK_QUERY 0x2661//视频任务查询 +#define MINOR_REMOTE_AI_VIDEO_TASK_DELETE 0x2662//视频任务删除 +#define MINOR_REMOTE_AI_VIDEO_TASK_MODIFY 0x2663//视频任务修改 +#define MINOR_REMOTE_AI_RULE_CONFIG 0x2664//AI规则配置 -#define MINOR_REMOTE_LOG_STORAGE_CONFIG 0x2665//־洢 -#define MINOR_REMOTE_LOG_SERVER_CONFIG 0x2666//־ +#define MINOR_REMOTE_LOG_STORAGE_CONFIG 0x2665//日志存储配置 +#define MINOR_REMOTE_LOG_SERVER_CONFIG 0x2666//日志服务器参数配置 -#define MINOR_REMOTE_RESET_IPC_PASSWORD 0x2670//NVRIPC־ +#define MINOR_REMOTE_RESET_IPC_PASSWORD 0x2670//NVR重置IPC密码日志 -//өʯƽ̨־ -#define MINOR_LOCAL_EZVIZ_OPERATION 0x2671 //өʯ(өʯú) -#define MINOR_REMOTE_EZVIZ_OPERATION 0x2672 //Զөʯ(өʯú) +//定义萤石平台操作日志 +#define MINOR_LOCAL_EZVIZ_OPERATION 0x2671 //本地萤石操作(包括萤石参数配置和升级) +#define MINOR_REMOTE_EZVIZ_OPERATION 0x2672 //远程萤石操作(包括萤石参数配置和升级) -#define MINOR_EZVIZ_BITSTREAM_PARAMATERS_CONFIG 0x2673 /* өʯ*/ -#define MINOR_EZVIZ_ALARM_PARAMATERS_CONFIG 0x2674 /* өʯ*/ -#define MINOR_EZVIZ_UPGRADE 0x2675 /* өʯ*/ -#define MINOR_EZVIZ_REGISTER 0x2676 /* өʯע*/ -#define MINOR_EZVIZ_LOCAL_PARAMATERS_CONFIG 0x2677 /* өʯز*/ -#define MINOR_EZVIZ_REMOTE_PARAMATERS_CONFIG 0x2678 /* өʯԶ̲*/ +#define MINOR_EZVIZ_BITSTREAM_PARAMATERS_CONFIG 0x2673 /* 萤石码流参数配置*/ +#define MINOR_EZVIZ_ALARM_PARAMATERS_CONFIG 0x2674 /* 萤石报警参数配置*/ +#define MINOR_EZVIZ_UPGRADE 0x2675 /* 萤石升级*/ +#define MINOR_EZVIZ_REGISTER 0x2676 /* 萤石注册*/ +#define MINOR_EZVIZ_LOCAL_PARAMATERS_CONFIG 0x2677 /* 萤石本地参数配置*/ +#define MINOR_EZVIZ_REMOTE_PARAMATERS_CONFIG 0x2678 /* 萤石远程参数配置*/ -//־ -#define MINOR_STOP_SOUND 0x2700 /**/ -#define MINOR_SELF_CHECK 0x2701 /*Լ*/ -#define MINOR_DUTY_CHECK 0x2702 /**/ -#define MINOR_SWITCH_SIMPLE_WORKMODE 0x2703 /*лģʽ*/ -#define MINOR_SWITCH_NORMAL_WORKMODE 0x2704 /*л׼ģʽ*/ -#define MINOR_LOCAL_SSD_OPERATE_START 0x2705 /* SSDʼ*/ -#define MINOR_LOCAL_SSD_OPERATE_STOP 0x2706 /* SSD*/ -#define MINOR_REMOTE_SSD_OPERATE_START 0x2707 /* ԶSSDʼ*/ -#define MINOR_REMOTE_SSD_OPERATE_STOP 0x2708 /* ԶSSD*/ +//消防操作日志 +#define MINOR_STOP_SOUND 0x2700 /*消音*/ +#define MINOR_SELF_CHECK 0x2701 /*自检*/ +#define MINOR_DUTY_CHECK 0x2702 /*查岗*/ +#define MINOR_SWITCH_SIMPLE_WORKMODE 0x2703 /*切换至简易模式*/ +#define MINOR_SWITCH_NORMAL_WORKMODE 0x2704 /*切换至标准模式*/ +#define MINOR_LOCAL_SSD_OPERATE_START 0x2705 /* 本地SSD操作开始*/ +#define MINOR_LOCAL_SSD_OPERATE_STOP 0x2706 /* 本地SSD操作结束*/ +#define MINOR_REMOTE_SSD_OPERATE_START 0x2707 /* 远程SSD操作开始*/ +#define MINOR_REMOTE_SSD_OPERATE_STOP 0x2708 /* 远程SSD操作结束*/ -/*־Ϣ*/ -// -#define MAJOR_INFORMATION 0x4 /*Ϣ*/ -// -#define MINOR_HDD_INFO 0xa1 /*ӲϢ*/ -#define MINOR_SMART_INFO 0xa2 /*SMARTϢ*/ -#define MINOR_REC_START 0xa3 /*ʼ¼*/ -#define MINOR_REC_STOP 0xa4 /*ֹͣ¼*/ -#define MINOR_REC_OVERDUE 0xa5 /*¼ɾ*/ -#define MINOR_LINK_START 0xa6 //ǰ豸 -#define MINOR_LINK_STOP 0xa7 //Ͽǰ豸 -#define MINOR_NET_DISK_INFO 0xa8 //ӲϢ -#define MINOR_RAID_INFO 0xa9 //raidϢ -#define MINOR_RUN_STATUS_INFO 0xaa /*ϵͳ״̬Ϣ*/ +/*日志附加信息*/ +//主类型 +#define MAJOR_INFORMATION 0x4 /*附加信息*/ +//次类型 +#define MINOR_HDD_INFO 0xa1 /*硬盘信息*/ +#define MINOR_SMART_INFO 0xa2 /*SMART信息*/ +#define MINOR_REC_START 0xa3 /*开始录像*/ +#define MINOR_REC_STOP 0xa4 /*停止录像*/ +#define MINOR_REC_OVERDUE 0xa5 /*过期录像删除*/ +#define MINOR_LINK_START 0xa6 //连接前端设备 +#define MINOR_LINK_STOP 0xa7 //断开前端设备  +#define MINOR_NET_DISK_INFO 0xa8 //网络硬盘信息 +#define MINOR_RAID_INFO 0xa9 //raid相关信息 +#define MINOR_RUN_STATUS_INFO 0xaa /*系统运行状态信息*/ //Netra3.0.0 -#define MINOR_SPARE_START_BACKUP 0xab /*ȱϵͳʼָ*/ -#define MINOR_SPARE_STOP_BACKUP 0xac /*ȱϵͳָֹͣ*/ -#define MINOR_SPARE_CLIENT_INFO 0xad /*ȱͻϢ*/ -#define MINOR_ANR_RECORD_START 0xae /*ANR¼ʼ*/ -#define MINOR_ANR_RECORD_END 0xaf /*ANR¼*/ -#define MINOR_ANR_ADD_TIME_QUANTUM 0xb0 /*ANRʱ*/ -#define MINOR_ANR_DEL_TIME_QUANTUM 0xb1 /*ANRɾʱ*/ +#define MINOR_SPARE_START_BACKUP 0xab /*热备系统开始备份指定工作机*/ +#define MINOR_SPARE_STOP_BACKUP 0xac /*热备系统停止备份指定工作机*/ +#define MINOR_SPARE_CLIENT_INFO 0xad /*热备客户机信息*/ +#define MINOR_ANR_RECORD_START 0xae /*ANR录像开始*/ +#define MINOR_ANR_RECORD_END 0xaf /*ANR录像结束*/ +#define MINOR_ANR_ADD_TIME_QUANTUM 0xb0 /*ANR添加时间段*/ +#define MINOR_ANR_DEL_TIME_QUANTUM 0xb1 /*ANR删除时间段*/ -#define MINOR_PIC_REC_START 0xb3 /* ʼץͼ*/ -#define MINOR_PIC_REC_STOP 0xb4 /* ֹͣץͼ*/ -#define MINOR_PIC_REC_OVERDUE 0xb5 /* ͼƬļɾ */ +#define MINOR_PIC_REC_START 0xb3 /* 开始抓图*/ +#define MINOR_PIC_REC_STOP 0xb4 /* 停止抓图*/ +#define MINOR_PIC_REC_OVERDUE 0xb5 /* 过期图片文件删除 */ //Netra3.1.0 -#define MINOR_CLIENT_LOGIN 0xb6 /*¼ɹ*/ -#define MINOR_CLIENT_RELOGIN 0xb7 /*µ¼*/ -#define MINOR_CLIENT_LOGOUT 0xb8 /*˳ɹ*/ -#define MINOR_CLIENT_SYNC_START 0xb9 /*¼ͬʼ*/ -#define MINOR_CLIENT_SYNC_STOP 0xba /*¼ֹͬ*/ -#define MINOR_CLIENT_SYNC_SUCC 0xbb /*¼ͬɹ*/ -#define MINOR_CLIENT_SYNC_EXCP 0xbc /*¼ͬ쳣*/ -#define MINOR_GLOBAL_RECORD_ERR_INFO 0xbd /*ȫִ¼Ϣ*/ -#define MINOR_BUFFER_STATE 0xbe /*״̬־¼*/ -#define MINOR_DISK_ERRORINFO_V2 0xbf /*Ӳ̴ϸϢV2*/ -#define MINOR_CS_DATA_EXPIRED 0xc0 //ƴ洢ݹ -#define MINOR_PLAT_INFO 0xc1 //ƽ̨Ϣ -#define MINOR_DIAL_STAT 0xc2 /*״̬*/ +#define MINOR_CLIENT_LOGIN 0xb6 /*登录服务器成功*/ +#define MINOR_CLIENT_RELOGIN 0xb7 /*重新登录服务器*/ +#define MINOR_CLIENT_LOGOUT 0xb8 /*退出服务器成功*/ +#define MINOR_CLIENT_SYNC_START 0xb9 /*录像同步开始*/ +#define MINOR_CLIENT_SYNC_STOP 0xba /*录像同步终止*/ +#define MINOR_CLIENT_SYNC_SUCC 0xbb /*录像同步成功*/ +#define MINOR_CLIENT_SYNC_EXCP 0xbc /*录像同步异常*/ +#define MINOR_GLOBAL_RECORD_ERR_INFO 0xbd /*全局错误记录信息*/ +#define MINOR_BUFFER_STATE 0xbe /*缓冲区状态日志记录*/ +#define MINOR_DISK_ERRORINFO_V2 0xbf /*硬盘错误详细信息V2*/ +#define MINOR_CS_DATA_EXPIRED 0xc0 //云存储数据过期 +#define MINOR_PLAT_INFO 0xc1 //平台操作信息 +#define MINOR_DIAL_STAT 0xc2 /*拨号状态*/ -#define MINOR_UNLOCK_RECORD 0xc3 //¼ -#define MINOR_VIS_ALARM 0xc4 // -#define MINOR_TALK_RECORD 0xc5 //ͨ¼ -#define MINOR_ACCESSORIES_MESSAGE 0xc6 //Ϣ -#define MINOR_KMS_EXPAMSION_DISK_INSERT 0xc7// KMS̲ -#define MINOR_IPC_CONNECT 0xc8// IPCϢ -#define MINOR_INTELLIGENT_BOARD_STATUS 0xc9// ܰ״̬ -#define MINOR_IPC_CONNECT_STATUS 0xca// IPC״̬ -#define MINOR_AUTO_TIMING 0xcb //ԶУʱ -#define MINOR_EZVIZ_OPERATION 0xcc //өʯ״̬ -//NVRȺ -#define MINOR_CLUSTER_DEVICE_ONLINE 0xcd //Ⱥ豸 -#define MINOR_CLUSTER_MGR_SERVICE_STARTUP 0xce //Ⱥ -#define MINOR_CLUSTER_BUSINESS_TRANSFER 0xcf //ȺҵǨ -#define MINOR_CLUSTER_STATUS 0xd0 //Ⱥ״̬Ϣ -#define MINOR_CLUSTER_CS_STATUS 0xd1 //ȺCSCM豸״̬ʧܣ¼CSCMIPַ -#define MINOR_CLUSTER_CM_STATUS 0xd2 //CM״̬л¼CMתĽɫleaderfollowercandidate -#define MINOR_VOICE_START_DETECTED 0xd3 /*⵽ʼ*/ -#define MINOR_VOICE_END_DETECTED 0xd4 /*⵽*/ -#define MINOR_DOUBLE_VERIFICATION_PASS 0xd5 /*֤ͨ*/ -#define MINOR_WIRELESS_RUNNING_STATUS 0xd6 /*״̬*/ -#define MINOR_SYSTEM_DATA_SYNCHRONIZATION 0xd7 /*ϵͳͬ*/ -#define MINOR_HD_FORMAT_START 0xd8 /*Ӳ̸ʽʼ*/ -#define MINOR_HD_FORMAT_STOP 0xd9 /*Ӳ̸ʽ*/ +#define MINOR_UNLOCK_RECORD 0xc3 //开锁记录 +#define MINOR_VIS_ALARM 0xc4 //防区报警 +#define MINOR_TALK_RECORD 0xc5 //通话记录 +#define MINOR_ACCESSORIES_MESSAGE 0xc6 //配件板信息 +#define MINOR_KMS_EXPAMSION_DISK_INSERT 0xc7// KMS扩容盘插入 +#define MINOR_IPC_CONNECT 0xc8// IPC连接信息 +#define MINOR_INTELLIGENT_BOARD_STATUS 0xc9// 智能板状态 +#define MINOR_IPC_CONNECT_STATUS 0xca// IPC连接状态 +#define MINOR_AUTO_TIMING 0xcb //自动校时 +#define MINOR_EZVIZ_OPERATION 0xcc //萤石运行状态 +//NVR集群 +#define MINOR_CLUSTER_DEVICE_ONLINE 0xcd //集群设备上线 +#define MINOR_CLUSTER_MGR_SERVICE_STARTUP 0xce //集群管理服务启动 +#define MINOR_CLUSTER_BUSINESS_TRANSFER 0xcf //集群业务迁移 +#define MINOR_CLUSTER_STATUS 0xd0 //集群状态信息 +#define MINOR_CLUSTER_CS_STATUS 0xd1 //集群CS向CM发送设备状态失败,记录CS和CM的IP地址 +#define MINOR_CLUSTER_CM_STATUS 0xd2 //CM状态切换,记录CM转变的角色,如leader、follower、candidate +#define MINOR_VOICE_START_DETECTED 0xd3 /*检测到语音开始*/ +#define MINOR_VOICE_END_DETECTED 0xd4 /*检测到语音结束*/ +#define MINOR_DOUBLE_VERIFICATION_PASS 0xd5 /*二次认证通过*/ +#define MINOR_WIRELESS_RUNNING_STATUS 0xd6 /*无线运行状态*/ +#define MINOR_SYSTEM_DATA_SYNCHRONIZATION 0xd7 /*系统数据同步*/ +#define MINOR_HD_FORMAT_START 0xd8 /*硬盘格式化开始*/ +#define MINOR_HD_FORMAT_STOP 0xd9 /*硬盘格式化结束*/ -//0x400-0x4ff ŽϢ־ -#define MINOR_LIVE_DETECT_OPEN 0x400 //˼⿪ -#define MINOR_LIVE_DETECT_CLOSE 0x401 //˼ر -#define MINOR_CLEAR_DATA_COLLECTION 0x402 //ɼ -#define MINOR_DELETE_DATA_COLLECTION 0x403 //ɼɾ -#define MINOR_EXPORT_DATA_COLLECTION 0x404 //ɼݵ -#define MINOR_CARD_LEN_CONFIG 0x405 // -#define MINOR_DATA_BASE_INIT_FAILED 0x406 //ݿʼʧ -#define MINOR_DATA_BASE_PATCH_UPDATE 0x407 //ݿⲹ -#define MINOR_PSAM_CARD_INSERT 0x408 //Psam -#define MINOR_PSAM_CARD_REMOVE 0x409 //Psamγ -#define MINOR_HARD_FAULT_REBOOT 0x40a //Ӳ쳣hardfault -#define MINOR_PSAM_CARD_OCP 0x40b //Psam -#define MINOR_STACK_OVERFLOW 0x40c //ջ -#define MINOR_PARM_CFG 0x40d // -#define MINOR_CLR_USER 0x40e //û -#define MINOR_CLR_CARD 0x40f //п -#define MINOR_CLR_FINGER_BY_READER 0x410 //ָ() -#define MINOR_CLR_FINGER_BY_CARD 0x411 //ָ() -#define MINOR_CLR_FINGER_BY_EMPLOYEE_ON 0x412 //ָ() -#define MINOR_DEL_FINGER 0x413 //ɾһָ -#define MINOR_CLR_WEEK_PLAN 0x414 //Ȩܼƻ -#define MINOR_SET_WEEK_PLAN 0x415 //Ȩܼƻ -#define MINOR_SET_HOLIDAY_PLAN 0x416 //Ȩ޼ռƻ -#define MINOR_CLR_HOLIDAY_PLAN 0x417 //Ȩ޼ռƻ -#define MINOR_SET_HOLIDAY_GROUP 0x418 //Ȩ޼ƻ -#define MINOR_CLR_HOLIDAY_GROUP 0x419 //Ȩ޼ƻ -#define MINOR_CLR_TEMPLATE_PLAN 0x41a //Ȩ޼ƻ -#define MINOR_SET_TEMPLATE_PLAN 0x41b //Ȩ޼ƻ -#define MINOR_ADD_CARD 0x41c // -#define MINOR_MOD_CARD 0x41d //޸Ŀ -#define MINOR_ADD_FINGER_BY_CARD 0x41e //ָ() -#define MINOR_ADD_FINGER_BY_EMPLOYEE_NO 0x41f //ָ() -#define MINOR_MOD_FINGER_BY_CARD 0x420 //޸ָ() -#define MINOR_MOD_FINGER_BY_EMPLOYEE_NO 0x421 //޸ָ() -#define MINOR_IMPORT_USER_LIST 0x422 //ûб루߲ɼ -#define MINOR_USB_LOGIN 0x423 //USB½ -#define MINOR_USB_LOGOUT 0x424 //USBdz -#define MINOR_ISAPI_HTTP_LOGIN 0x425 //ISAPI HTTP½ -#define MINOR_ISAPI_HTTP_LOGOUT 0x426 //ISAPI HTTP dz -#define MINOR_ISAPI_HTTPS_LOGIN 0x427 //ISAPI HTTPS½ -#define MINOR_ISAPI_HTTPS_LOGOUT 0x428 //ISAPI HTTPSdz -#define MINOR_ISUP_ONLINE 0x429 //ISUP -#define MINOR_ISUP_OFFLINE 0x42a//ISUP -#define MINOR_FP_ISSUE_REC 0x42b //ָƷ¼ -#define MINOR_FACE_ISSUE_REC 0x42c//¼ -#define MINOR_ADD_IRIS 0x42d //·Ĥ -#define MINOR_MODIFY_IRIS 0x42e //޸ĺĤ -#define MINOR_DELETE_EMPLOYEE_IRIS 0x42f //ɾûĤɾ -#define MINOR_DELETE_WHOLE_IRIS 0x430 //ɾȫĤ -#define MINOR_MODIFY_IRIS_CFG 0x431 //޸ĺĤ -#define MINOR_ADD_USER_INFO 0x432 //ԱϢŽԱȨޣ -#define MINOR_MODIFY_USER_INFO 0x433 //޸ԱϢŽԱȨޣ -#define MINOR_CLR_USER_INFO 0x434 //ɾԱϢŽԱȨޣţ -#define MINOR_CLR_CARD_BY_CARD_OR_EMPLOYEE 0x435 //ɾŻ򹤺ţ -#define MINOR_CLR_ALL_CARD 0x436 //ɾп -#define MINOR_SIM_CARD_INSERT 0x437 //SIM -#define MINOR_SIM_CARD_PULLOUT 0x438 //SIMγ -#define MINOR_FINGERPRINT_RECOGNITION_OPEN 0x439 //ָʶ -#define MINOR_FINGERPRINT_RECOGNITION_CLOSE 0x43a //ָʶر -#define MINOR_FACE_RECOGNITION_OPEN 0x43b //Ŀʶ -#define MINOR_FACE_RECOGNITION_CLOSE 0x43c //Ŀʶر -#define MINOR_RESET_ONLINE_READER 0x43d //߶ -#define MINOR_CLEAR_IRIS_PICTURE 0x43e //պĤͼ -#define MINOR_ADD_VP 0x43f //· -#define MINOR_MODIFY_VP 0x440 //޸ -#define MINOR_DELETE_EMPLOYEE_VP 0x441 //ɾ -#define MINOR_DELETE_ALL_VP 0x442 //ɾ -#define MINOR_FACE_DATA_BASE_UPDATE_LOG_REC 0x443 //ݿ־¼ +//0x400-0x4ff 门禁附件信息日志类型 +#define MINOR_LIVE_DETECT_OPEN 0x400 //真人检测开启 +#define MINOR_LIVE_DETECT_CLOSE 0x401 //真人检测关闭 +#define MINOR_CLEAR_DATA_COLLECTION 0x402 //采集数据清空 +#define MINOR_DELETE_DATA_COLLECTION 0x403 //采集数据删除 +#define MINOR_EXPORT_DATA_COLLECTION 0x404 //采集数据导出 +#define MINOR_CARD_LEN_CONFIG 0x405 //卡长度配置 +#define MINOR_DATA_BASE_INIT_FAILED 0x406 //数据库初始化失败 +#define MINOR_DATA_BASE_PATCH_UPDATE 0x407 //数据库补丁升级 +#define MINOR_PSAM_CARD_INSERT 0x408 //Psam卡插入 +#define MINOR_PSAM_CARD_REMOVE 0x409 //Psam卡拔出 +#define MINOR_HARD_FAULT_REBOOT 0x40a //硬件异常(hardfault)重启 +#define MINOR_PSAM_CARD_OCP 0x40b //Psam卡过流保护 +#define MINOR_STACK_OVERFLOW 0x40c //堆栈溢出 +#define MINOR_PARM_CFG 0x40d //参数配置 +#define MINOR_CLR_USER 0x40e //清空所有用户 +#define MINOR_CLR_CARD 0x40f //清空所有卡 +#define MINOR_CLR_FINGER_BY_READER 0x410 //清空所有指纹(按读卡器) +#define MINOR_CLR_FINGER_BY_CARD 0x411 //清空所有指纹(按卡号) +#define MINOR_CLR_FINGER_BY_EMPLOYEE_ON 0x412 //清空所有指纹(按工号) +#define MINOR_DEL_FINGER 0x413 //删除一个指纹 +#define MINOR_CLR_WEEK_PLAN 0x414 //清除权限周计划 +#define MINOR_SET_WEEK_PLAN 0x415 //设置权限周计划 +#define MINOR_SET_HOLIDAY_PLAN 0x416 //设置权限假日计划 +#define MINOR_CLR_HOLIDAY_PLAN 0x417 //清除权限假日计划 +#define MINOR_SET_HOLIDAY_GROUP 0x418 //设置权限假日组计划 +#define MINOR_CLR_HOLIDAY_GROUP 0x419 //清除权限假日组计划 +#define MINOR_CLR_TEMPLATE_PLAN 0x41a //清除权限计划 +#define MINOR_SET_TEMPLATE_PLAN 0x41b //设置权限计划 +#define MINOR_ADD_CARD 0x41c //新增卡 +#define MINOR_MOD_CARD 0x41d //修改卡 +#define MINOR_ADD_FINGER_BY_CARD 0x41e //新增指纹(按卡号) +#define MINOR_ADD_FINGER_BY_EMPLOYEE_NO 0x41f //新增指纹(按工号) +#define MINOR_MOD_FINGER_BY_CARD 0x420 //修改指纹(按卡号) +#define MINOR_MOD_FINGER_BY_EMPLOYEE_NO 0x421 //修改指纹(按工号) +#define MINOR_IMPORT_USER_LIST 0x422 //用户列表导入(离线采集) +#define MINOR_USB_LOGIN 0x423 //USB登陆 +#define MINOR_USB_LOGOUT 0x424 //USB登出 +#define MINOR_ISAPI_HTTP_LOGIN 0x425 //ISAPI HTTP登陆 +#define MINOR_ISAPI_HTTP_LOGOUT 0x426 //ISAPI HTTP 登出 +#define MINOR_ISAPI_HTTPS_LOGIN 0x427 //ISAPI HTTPS登陆 +#define MINOR_ISAPI_HTTPS_LOGOUT 0x428 //ISAPI HTTPS登出 +#define MINOR_ISUP_ONLINE 0x429 //ISUP在线 +#define MINOR_ISUP_OFFLINE 0x42a//ISUP下线 +#define MINOR_FP_ISSUE_REC 0x42b //指纹发卡记录 +#define MINOR_FACE_ISSUE_REC 0x42c//人脸发卡记录 +#define MINOR_ADD_IRIS 0x42d //下发虹膜 +#define MINOR_MODIFY_IRIS 0x42e //修改虹膜 +#define MINOR_DELETE_EMPLOYEE_IRIS 0x42f //删除用户虹膜(按工号删除) +#define MINOR_DELETE_WHOLE_IRIS 0x430 //删除全部虹膜 +#define MINOR_MODIFY_IRIS_CFG 0x431 //修改虹膜参数 +#define MINOR_ADD_USER_INFO 0x432 //新增人员信息(门禁人员权限) +#define MINOR_MODIFY_USER_INFO 0x433 //修改人员信息(门禁人员权限) +#define MINOR_CLR_USER_INFO 0x434 //删除人员信息(门禁人员权限,按工号) +#define MINOR_CLR_CARD_BY_CARD_OR_EMPLOYEE 0x435 //删除卡(按卡号或工号) +#define MINOR_CLR_ALL_CARD 0x436 //删除所有卡 +#define MINOR_SIM_CARD_INSERT 0x437 //SIM卡插入 +#define MINOR_SIM_CARD_PULLOUT 0x438 //SIM卡拔出 +#define MINOR_FINGERPRINT_RECOGNITION_OPEN 0x439 //指纹识别开启 +#define MINOR_FINGERPRINT_RECOGNITION_CLOSE 0x43a //指纹识别关闭 +#define MINOR_FACE_RECOGNITION_OPEN 0x43b //目标识别开启 +#define MINOR_FACE_RECOGNITION_CLOSE 0x43c //目标识别关闭 +#define MINOR_RESET_ONLINE_READER 0x43d //重置在线读卡器 +#define MINOR_CLEAR_IRIS_PICTURE 0x43e //清空虹膜底图 +#define MINOR_ADD_VP 0x43f //下发声纹 +#define MINOR_MODIFY_VP 0x440 //修改声纹 +#define MINOR_DELETE_EMPLOYEE_VP 0x441 //按工号删除声纹 +#define MINOR_DELETE_ALL_VP 0x442 //删除所有声纹 +#define MINOR_FACE_DATA_BASE_UPDATE_LOG_REC 0x443 //人脸数据库升级日志记录 -//802.1x֤־ -#define MINOR_802_1X_AUTH_SUCC 0x320 /*802.1x֤ɹ*/ -#define MINOR_802_1X_AUTH_FAIL 0x321 /*802.1x֤ʧ*/ +//802.1x认证操作日志 +#define MINOR_802_1X_AUTH_SUCC 0x320 /*802.1x认证成功*/ +#define MINOR_802_1X_AUTH_FAIL 0x321 /*802.1x认证失败*/ -/*¼*/ -// -#define MAJOR_EVENT 0x5 /*¼*/ -// -#define MINOR_LEGAL_CARD_PASS 0x01 //Ϸ֤ͨ -#define MINOR_CARD_AND_PSW_PASS 0x02 //ˢ֤ͨ -#define MINOR_CARD_AND_PSW_FAIL 0x03 //ˢ֤ʧ -#define MINOR_CARD_AND_PSW_TIMEOUT 0x04 //֤ʱ -#define MINOR_CARD_AND_PSW_OVER_TIME 0x05 //ˢ볬 -#define MINOR_CARD_NO_RIGHT 0x06 //δȨ -#define MINOR_CARD_INVALID_PERIOD 0x07 //Чʱ -#define MINOR_CARD_OUT_OF_DATE 0x08 //Ź -#define MINOR_INVALID_CARD 0x09 //޴˿ -#define MINOR_ANTI_SNEAK_FAIL 0x0a //DZ֤ʧ -#define MINOR_INTERLOCK_DOOR_NOT_CLOSE 0x0b //δر -#define MINOR_NOT_BELONG_MULTI_GROUP 0x0c //ڶ֤Ⱥ -#define MINOR_INVALID_MULTI_VERIFY_PERIOD 0x0d //ڶ֤ʱ -#define MINOR_MULTI_VERIFY_SUPER_RIGHT_FAIL 0x0e //֤ģʽȨ֤ʧ -#define MINOR_MULTI_VERIFY_REMOTE_RIGHT_FAIL 0x0f //֤ģʽԶ֤ʧ -#define MINOR_MULTI_VERIFY_SUCCESS 0x10 //֤ɹ -#define MINOR_LEADER_CARD_OPEN_BEGIN 0x11 //׿ſʼ -#define MINOR_LEADER_CARD_OPEN_END 0x12 //׿Ž -#define MINOR_ALWAYS_OPEN_BEGIN 0x13 //״̬ʼ -#define MINOR_ALWAYS_OPEN_END 0x14 //״̬ -#define MINOR_LOCK_OPEN 0x15 // -#define MINOR_LOCK_CLOSE 0x16 //ر -#define MINOR_DOOR_BUTTON_PRESS 0x17 //Űť -#define MINOR_DOOR_BUTTON_RELEASE 0x18 //Űťſ -#define MINOR_DOOR_OPEN_NORMAL 0x19 //ţŴţ -#define MINOR_DOOR_CLOSE_NORMAL 0x1a //ţŴţ -#define MINOR_DOOR_OPEN_ABNORMAL 0x1b //쳣򿪣Ŵţ -#define MINOR_DOOR_OPEN_TIMEOUT 0x1c //Ŵ򿪳ʱŴţ -#define MINOR_ALARMOUT_ON 0x1d // -#define MINOR_ALARMOUT_OFF 0x1e //ر -#define MINOR_ALWAYS_CLOSE_BEGIN 0x1f //״̬ʼ -#define MINOR_ALWAYS_CLOSE_END 0x20 //״̬ -#define MINOR_MULTI_VERIFY_NEED_REMOTE_OPEN 0x21 //ض֤ҪԶ̿ -#define MINOR_MULTI_VERIFY_SUPERPASSWD_VERIFY_SUCCESS 0x22 //֤֤ɹ¼ -#define MINOR_MULTI_VERIFY_REPEAT_VERIFY 0x23 //֤ظ֤¼ -#define MINOR_MULTI_VERIFY_TIMEOUT 0x24 //֤ظ֤¼ -#define MINOR_DOORBELL_RINGING 0x25 // -#define MINOR_FINGERPRINT_COMPARE_PASS 0x26 //ָƱȶͨ -#define MINOR_FINGERPRINT_COMPARE_FAIL 0x27 //ָƱȶʧ -#define MINOR_CARD_FINGERPRINT_VERIFY_PASS 0x28 //ˢָ֤ͨ -#define MINOR_CARD_FINGERPRINT_VERIFY_FAIL 0x29 //ˢָ֤ʧ -#define MINOR_CARD_FINGERPRINT_VERIFY_TIMEOUT 0x2a //ˢָ֤ʱ -#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_PASS 0x2b //ˢָƼ֤ͨ -#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_FAIL 0x2c //ˢָƼ֤ʧ -#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_TIMEOUT 0x2d //ˢָƼ֤ʱ -#define MINOR_FINGERPRINT_PASSWD_VERIFY_PASS 0x2e //ָƼ֤ͨ -#define MINOR_FINGERPRINT_PASSWD_VERIFY_FAIL 0x2f //ָƼ֤ʧ -#define MINOR_FINGERPRINT_PASSWD_VERIFY_TIMEOUT 0x30 //ָƼ֤ʱ -#define MINOR_FINGERPRINT_INEXISTENCE 0x31 //ָƲ -#define MINOR_CARD_PLATFORM_VERIFY 0x32 //ˢƽ̨֤ -#define MINOR_CALL_CENTER 0x33 //¼ -#define MINOR_FIRE_RELAY_TURN_ON_DOOR_ALWAYS_OPEN 0x34 //̵ͨų -#define MINOR_FIRE_RELAY_RECOVER_DOOR_RECOVER_NORMAL 0x35 //̵ָŻָ -#define MINOR_FACE_AND_FP_VERIFY_PASS 0x36 //ָ֤ͨ -#define MINOR_FACE_AND_FP_VERIFY_FAIL 0x37 //ָ֤ʧ -#define MINOR_FACE_AND_FP_VERIFY_TIMEOUT 0x38 //ָ֤ʱ -#define MINOR_FACE_AND_PW_VERIFY_PASS 0x39 //֤ͨ -#define MINOR_FACE_AND_PW_VERIFY_FAIL 0x3a //֤ʧ -#define MINOR_FACE_AND_PW_VERIFY_TIMEOUT 0x3b //֤ʱ -#define MINOR_FACE_AND_CARD_VERIFY_PASS 0x3c //ˢ֤ͨ -#define MINOR_FACE_AND_CARD_VERIFY_FAIL 0x3d //ˢ֤ʧ -#define MINOR_FACE_AND_CARD_VERIFY_TIMEOUT 0x3e //ˢ֤ʱ -#define MINOR_FACE_AND_PW_AND_FP_VERIFY_PASS 0x3f //ָ֤ͨ -#define MINOR_FACE_AND_PW_AND_FP_VERIFY_FAIL 0x40 //ָ֤ʧ -#define MINOR_FACE_AND_PW_AND_FP_VERIFY_TIMEOUT 0x41 //ָ֤ʱ -#define MINOR_FACE_CARD_AND_FP_VERIFY_PASS 0x42 //ˢָ֤ͨ -#define MINOR_FACE_CARD_AND_FP_VERIFY_FAIL 0x43 //ˢָ֤ʧ -#define MINOR_FACE_CARD_AND_FP_VERIFY_TIMEOUT 0x44 //ˢָ֤ʱ -#define MINOR_EMPLOYEENO_AND_FP_VERIFY_PASS 0x45 //żָ֤ͨ -#define MINOR_EMPLOYEENO_AND_FP_VERIFY_FAIL 0x46 //żָ֤ʧ -#define MINOR_EMPLOYEENO_AND_FP_VERIFY_TIMEOUT 0x47 //żָ֤ʱ -#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_PASS 0x48 //żָƼ֤ͨ -#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_FAIL 0x49 //żָƼ֤ʧ -#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_TIMEOUT 0x4a //żָƼ֤ʱ -#define MINOR_FACE_VERIFY_PASS 0x4b //֤ͨ -#define MINOR_FACE_VERIFY_FAIL 0x4c //֤ʧ -#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_PASS 0x4d //ż֤ͨ -#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_FAIL 0x4e //ż֤ʧ -#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_TIMEOUT 0x4f //ż֤ʱ -#define MINOR_FACE_RECOGNIZE_FAIL 0x50 //Ŀʶʧ -#define MINOR_FIRSTCARD_AUTHORIZE_BEGIN 0x51 //׿Ȩʼ -#define MINOR_FIRSTCARD_AUTHORIZE_END 0x52 //׿Ȩ -#define MINOR_DOORLOCK_INPUT_SHORT_CIRCUIT 0x53 //· -#define MINOR_DOORLOCK_INPUT_BROKEN_CIRCUIT 0x54 //· -#define MINOR_DOORLOCK_INPUT_EXCEPTION 0x55 //쳣 -#define MINOR_DOORCONTACT_INPUT_SHORT_CIRCUIT 0x56 //Ŵ· -#define MINOR_DOORCONTACT_INPUT_BROKEN_CIRCUIT 0x57 //Ŵ· -#define MINOR_DOORCONTACT_INPUT_EXCEPTION 0x58 //Ŵ쳣 -#define MINOR_OPENBUTTON_INPUT_SHORT_CIRCUIT 0x59 //Űť· -#define MINOR_OPENBUTTON_INPUT_BROKEN_CIRCUIT 0x5a //Űť· -#define MINOR_OPENBUTTON_INPUT_EXCEPTION 0x5b //Űť쳣 -#define MINOR_DOORLOCK_OPEN_EXCEPTION 0x5c //쳣 -#define MINOR_DOORLOCK_OPEN_TIMEOUT 0x5d //򿪳ʱ -#define MINOR_FIRSTCARD_OPEN_WITHOUT_AUTHORIZE 0x5e //׿δȨʧ -#define MINOR_CALL_LADDER_RELAY_BREAK 0x5f //ݼ̵Ͽ -#define MINOR_CALL_LADDER_RELAY_CLOSE 0x60 //ݼ̵պ -#define MINOR_AUTO_KEY_RELAY_BREAK 0x61 //Զ̵Ͽ -#define MINOR_AUTO_KEY_RELAY_CLOSE 0x62 //Զ̵պ -#define MINOR_KEY_CONTROL_RELAY_BREAK 0x63 //ݿؼ̵Ͽ -#define MINOR_KEY_CONTROL_RELAY_CLOSE 0x64 //ݿؼ̵պ -#define MINOR_EMPLOYEENO_AND_PW_PASS 0x65 //ż֤ͨ -#define MINOR_EMPLOYEENO_AND_PW_FAIL 0x66 //ż֤ʧ -#define MINOR_EMPLOYEENO_AND_PW_TIMEOUT 0x67 //ż֤ʱ -#define MINOR_HUMAN_DETECT_FAIL 0x68 //˼ʧ -#define MINOR_PEOPLE_AND_ID_CARD_COMPARE_PASS 0x69 //֤ȶͨ -#define MINOR_PEOPLE_AND_ID_CARD_COMPARE_FAIL 0x70 //֤ȶʧ -#define MINOR_CERTIFICATE_BLOCKLIST 0x71 //ֹ¼ -#define MINOR_LEGAL_MESSAGE 0x72 //Ϸ -#define MINOR_ILLEGAL_MESSAGE 0x73 //Ƿ -#define MINOR_DOOR_OPEN_OR_DORMANT_FAIL 0x75 //״̬ջ״̬֤ʧ -#define MINOR_AUTH_PLAN_DORMANT_FAIL 0x76 //֤ƻģʽ֤ʧ -#define MINOR_CARD_ENCRYPT_VERIFY_FAIL 0x77 //Уʧ -#define MINOR_SUBMARINEBACK_REPLY_FAIL 0x78 //DZطӦʧ -#define MINOR_DOOR_OPEN_OR_DORMANT_OPEN_FAIL 0x82 //ųջʱŰťʧ -#define MINOR_HEART_BEAT 0x83 //¼ -#define MINOR_DOOR_OPEN_OR_DORMANT_LINKAGE_OPEN_FAIL 0x84 //ųջʱʧ -#define MINOR_TRAILING 0x85 //βͨ -#define MINOR_REVERSE_ACCESS 0x86 // -#define MINOR_FORCE_ACCESS 0x87 //ײ -#define MINOR_CLIMBING_OVER_GATE 0x88 //Խ -#define MINOR_PASSING_TIMEOUT 0x89 //ͨгʱ -#define MINOR_INTRUSION_ALARM 0x8a //󴳱 -#define MINOR_FREE_GATE_PASS_NOT_AUTH 0x8b //բͨʱδ֤ͨ -#define MINOR_DROP_ARM_BLOCK 0x8c //ڱ۱赲 -#define MINOR_DROP_ARM_BLOCK_RESUME 0x8d //ڱ赲 -#define MINOR_LOCAL_FACE_MODELING_FAIL 0x8e //豸ģʧ -#define MINOR_STAY_EVENT 0x8f //¼ -#define MINOR_CERTIFICATE_ALLOWLIST_PASS 0x90 //Ȩ֤ͨ -#define MINOR_CERTIFICATE_ALLOWLIST_FALL 0x91 //Ȩ֤ʧ -#define MINOR_FACE_COLLECTION 0x92 //ɼ¼֤Զ̺ʱϱ -#define MINOR_CARD_COLLECTION 0x93 //ɼ¼֤Զ̺ʱϱ -#define MINOR_PSW_ERROR_OVER_TIMES 0x94 //֤ʧܳ -#define MINOR_ID_CARD_COLLECTION 0x95 //֤ɼ¼֤Զ̺ʱϱ -#define MINOR_PSW_VERIFY_FAIL 0x96 //֤ʧ -#define MINOR_PASSWORD_MISMATCH 0x97 //벻ƥ -#define MINOR_EMPLOYEE_NO_NOT_EXIST 0x98 //Ų -#define MINOR_COMBINED_VERIFY_PASS 0x99 //֤ͨ -#define MINOR_COMBINED_VERIFY_TIMEOUT 0x9a //֤ʱ -#define MINOR_VERIFY_MODE_MISMATCH 0x9b //֤ʽƥ -#define MINOR_ORCODE_VERIFY_PASS 0x9c //ά֤ͨ -#define MINOR_ORCODE_VERIFY_FAIL 0x9d //ά֤ʧ -#define MINOR_HOUSEHOLDER_AUTHORIZE_PASS 0x9e //Ȩ֤ͨ -#define MINOR_BLUETOOTH_VERIFY_PASS 0x9f //֤ͨ -#define MINOR_BLUETOOTH_VERIFY_FAIL 0xa0 //֤ʧ +/*事件*/ +//主类型 +#define MAJOR_EVENT 0x5 /*事件*/ +//次类型 +#define MINOR_LEGAL_CARD_PASS 0x01 //合法卡认证通过 +#define MINOR_CARD_AND_PSW_PASS 0x02 //刷卡加密码认证通过 +#define MINOR_CARD_AND_PSW_FAIL 0x03 //刷卡加密码认证失败 +#define MINOR_CARD_AND_PSW_TIMEOUT 0x04 //数卡加密码认证超时 +#define MINOR_CARD_AND_PSW_OVER_TIME 0x05 //刷卡加密码超次 +#define MINOR_CARD_NO_RIGHT 0x06 //未分配权限 +#define MINOR_CARD_INVALID_PERIOD 0x07 //无效时段 +#define MINOR_CARD_OUT_OF_DATE 0x08 //卡号过期 +#define MINOR_INVALID_CARD 0x09 //无此卡号 +#define MINOR_ANTI_SNEAK_FAIL 0x0a //反潜回认证失败 +#define MINOR_INTERLOCK_DOOR_NOT_CLOSE 0x0b //互锁门未关闭 +#define MINOR_NOT_BELONG_MULTI_GROUP 0x0c //卡不属于多重认证群组 +#define MINOR_INVALID_MULTI_VERIFY_PERIOD 0x0d //卡不在多重认证时间段内 +#define MINOR_MULTI_VERIFY_SUPER_RIGHT_FAIL 0x0e //多重认证模式超级权限认证失败 +#define MINOR_MULTI_VERIFY_REMOTE_RIGHT_FAIL 0x0f //多重认证模式远程认证失败 +#define MINOR_MULTI_VERIFY_SUCCESS 0x10 //多重认证成功 +#define MINOR_LEADER_CARD_OPEN_BEGIN 0x11 //首卡开门开始 +#define MINOR_LEADER_CARD_OPEN_END 0x12 //首卡开门结束 +#define MINOR_ALWAYS_OPEN_BEGIN 0x13 //常开状态开始 +#define MINOR_ALWAYS_OPEN_END 0x14 //常开状态结束 +#define MINOR_LOCK_OPEN 0x15 //门锁打开 +#define MINOR_LOCK_CLOSE 0x16 //门锁关闭 +#define MINOR_DOOR_BUTTON_PRESS 0x17 //开门按钮打开 +#define MINOR_DOOR_BUTTON_RELEASE 0x18 //开门按钮放开 +#define MINOR_DOOR_OPEN_NORMAL 0x19 //正常开门(门磁) +#define MINOR_DOOR_CLOSE_NORMAL 0x1a //正常关门(门磁) +#define MINOR_DOOR_OPEN_ABNORMAL 0x1b //门异常打开(门磁) +#define MINOR_DOOR_OPEN_TIMEOUT 0x1c //门打开超时(门磁) +#define MINOR_ALARMOUT_ON 0x1d //报警输出打开 +#define MINOR_ALARMOUT_OFF 0x1e //报警输出关闭 +#define MINOR_ALWAYS_CLOSE_BEGIN 0x1f //常关状态开始 +#define MINOR_ALWAYS_CLOSE_END 0x20 //常关状态结束 +#define MINOR_MULTI_VERIFY_NEED_REMOTE_OPEN 0x21 //多重多重认证需要远程开门 +#define MINOR_MULTI_VERIFY_SUPERPASSWD_VERIFY_SUCCESS 0x22 //多重认证超级密码认证成功事件 +#define MINOR_MULTI_VERIFY_REPEAT_VERIFY 0x23 //多重认证重复认证事件 +#define MINOR_MULTI_VERIFY_TIMEOUT 0x24 //多重认证重复认证事件 +#define MINOR_DOORBELL_RINGING 0x25 //门铃响 +#define MINOR_FINGERPRINT_COMPARE_PASS 0x26 //指纹比对通过 +#define MINOR_FINGERPRINT_COMPARE_FAIL 0x27 //指纹比对失败 +#define MINOR_CARD_FINGERPRINT_VERIFY_PASS 0x28 //刷卡加指纹认证通过 +#define MINOR_CARD_FINGERPRINT_VERIFY_FAIL 0x29 //刷卡加指纹认证失败 +#define MINOR_CARD_FINGERPRINT_VERIFY_TIMEOUT 0x2a //刷卡加指纹认证超时 +#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_PASS 0x2b //刷卡加指纹加密码认证通过 +#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_FAIL 0x2c //刷卡加指纹加密码认证失败 +#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_TIMEOUT 0x2d //刷卡加指纹加密码认证超时 +#define MINOR_FINGERPRINT_PASSWD_VERIFY_PASS 0x2e //指纹加密码认证通过 +#define MINOR_FINGERPRINT_PASSWD_VERIFY_FAIL 0x2f //指纹加密码认证失败 +#define MINOR_FINGERPRINT_PASSWD_VERIFY_TIMEOUT 0x30 //指纹加密码认证超时 +#define MINOR_FINGERPRINT_INEXISTENCE 0x31 //指纹不存在 +#define MINOR_CARD_PLATFORM_VERIFY 0x32 //刷卡平台认证 +#define MINOR_CALL_CENTER 0x33 //呼叫中心事件 +#define MINOR_FIRE_RELAY_TURN_ON_DOOR_ALWAYS_OPEN 0x34 //消防继电器导通触发门常开 +#define MINOR_FIRE_RELAY_RECOVER_DOOR_RECOVER_NORMAL 0x35 //消防继电器恢复门恢复正常 +#define MINOR_FACE_AND_FP_VERIFY_PASS 0x36 //人脸加指纹认证通过 +#define MINOR_FACE_AND_FP_VERIFY_FAIL 0x37 //人脸加指纹认证失败 +#define MINOR_FACE_AND_FP_VERIFY_TIMEOUT 0x38 //人脸加指纹认证超时 +#define MINOR_FACE_AND_PW_VERIFY_PASS 0x39 //人脸加密码认证通过 +#define MINOR_FACE_AND_PW_VERIFY_FAIL 0x3a //人脸加密码认证失败 +#define MINOR_FACE_AND_PW_VERIFY_TIMEOUT 0x3b //人脸加密码认证超时 +#define MINOR_FACE_AND_CARD_VERIFY_PASS 0x3c //人脸加刷卡认证通过 +#define MINOR_FACE_AND_CARD_VERIFY_FAIL 0x3d //人脸加刷卡认证失败 +#define MINOR_FACE_AND_CARD_VERIFY_TIMEOUT 0x3e //人脸加刷卡认证超时 +#define MINOR_FACE_AND_PW_AND_FP_VERIFY_PASS 0x3f //人脸加密码加指纹认证通过 +#define MINOR_FACE_AND_PW_AND_FP_VERIFY_FAIL 0x40 //人脸加密码加指纹认证失败 +#define MINOR_FACE_AND_PW_AND_FP_VERIFY_TIMEOUT 0x41 //人脸加密码加指纹认证超时 +#define MINOR_FACE_CARD_AND_FP_VERIFY_PASS 0x42 //人脸加刷卡加指纹认证通过 +#define MINOR_FACE_CARD_AND_FP_VERIFY_FAIL 0x43 //人脸加刷卡加指纹认证失败 +#define MINOR_FACE_CARD_AND_FP_VERIFY_TIMEOUT 0x44 //人脸加刷卡加指纹认证超时 +#define MINOR_EMPLOYEENO_AND_FP_VERIFY_PASS 0x45 //工号加指纹认证通过 +#define MINOR_EMPLOYEENO_AND_FP_VERIFY_FAIL 0x46 //工号加指纹认证失败 +#define MINOR_EMPLOYEENO_AND_FP_VERIFY_TIMEOUT 0x47 //工号加指纹认证超时 +#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_PASS 0x48 //工号加指纹加密码认证通过 +#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_FAIL 0x49 //工号加指纹加密码认证失败 +#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_TIMEOUT 0x4a //工号加指纹加密码认证超时 +#define MINOR_FACE_VERIFY_PASS 0x4b //人脸认证通过 +#define MINOR_FACE_VERIFY_FAIL 0x4c //人脸认证失败 +#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_PASS 0x4d //工号加人脸认证通过 +#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_FAIL 0x4e //工号加人脸认证失败 +#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_TIMEOUT 0x4f //工号加人脸认证超时 +#define MINOR_FACE_RECOGNIZE_FAIL 0x50 //目标识别失败 +#define MINOR_FIRSTCARD_AUTHORIZE_BEGIN 0x51 //首卡授权开始 +#define MINOR_FIRSTCARD_AUTHORIZE_END 0x52 //首卡授权结束 +#define MINOR_DOORLOCK_INPUT_SHORT_CIRCUIT 0x53 //门锁输入短路报警 +#define MINOR_DOORLOCK_INPUT_BROKEN_CIRCUIT 0x54 //门锁输入断路报警 +#define MINOR_DOORLOCK_INPUT_EXCEPTION 0x55 //门锁输入异常报警 +#define MINOR_DOORCONTACT_INPUT_SHORT_CIRCUIT 0x56 //门磁输入短路报警 +#define MINOR_DOORCONTACT_INPUT_BROKEN_CIRCUIT 0x57 //门磁输入断路报警 +#define MINOR_DOORCONTACT_INPUT_EXCEPTION 0x58 //门磁输入异常报警 +#define MINOR_OPENBUTTON_INPUT_SHORT_CIRCUIT 0x59 //开门按钮输入短路报警 +#define MINOR_OPENBUTTON_INPUT_BROKEN_CIRCUIT 0x5a //开门按钮输入断路报警 +#define MINOR_OPENBUTTON_INPUT_EXCEPTION 0x5b //开门按钮输入异常报警 +#define MINOR_DOORLOCK_OPEN_EXCEPTION 0x5c //门锁异常打开 +#define MINOR_DOORLOCK_OPEN_TIMEOUT 0x5d //门锁打开超时 +#define MINOR_FIRSTCARD_OPEN_WITHOUT_AUTHORIZE 0x5e //首卡未授权开门失败 +#define MINOR_CALL_LADDER_RELAY_BREAK 0x5f //呼梯继电器断开 +#define MINOR_CALL_LADDER_RELAY_CLOSE 0x60 //呼梯继电器闭合 +#define MINOR_AUTO_KEY_RELAY_BREAK 0x61 //自动按键继电器断开 +#define MINOR_AUTO_KEY_RELAY_CLOSE 0x62 //自动按键继电器闭合 +#define MINOR_KEY_CONTROL_RELAY_BREAK 0x63 //按键梯控继电器断开 +#define MINOR_KEY_CONTROL_RELAY_CLOSE 0x64 //按键梯控继电器闭合 +#define MINOR_EMPLOYEENO_AND_PW_PASS 0x65 //工号加密码认证通过 +#define MINOR_EMPLOYEENO_AND_PW_FAIL 0x66 //工号加密码认证失败 +#define MINOR_EMPLOYEENO_AND_PW_TIMEOUT 0x67 //工号加密码认证超时 +#define MINOR_HUMAN_DETECT_FAIL 0x68 //真人检测失败 +#define MINOR_PEOPLE_AND_ID_CARD_COMPARE_PASS 0x69 //人证比对通过 +#define MINOR_PEOPLE_AND_ID_CARD_COMPARE_FAIL 0x70 //人证比对失败 +#define MINOR_CERTIFICATE_BLOCKLIST 0x71 //禁止名单事件 +#define MINOR_LEGAL_MESSAGE 0x72 //合法短信 +#define MINOR_ILLEGAL_MESSAGE 0x73 //非法短信 +#define MINOR_DOOR_OPEN_OR_DORMANT_FAIL 0x75 //门状态常闭或休眠状态认证失败 +#define MINOR_AUTH_PLAN_DORMANT_FAIL 0x76 //认证计划休眠模式认证失败 +#define MINOR_CARD_ENCRYPT_VERIFY_FAIL 0x77 //卡加密校验失败 +#define MINOR_SUBMARINEBACK_REPLY_FAIL 0x78 //反潜回服务器应答失败 +#define MINOR_DOOR_OPEN_OR_DORMANT_OPEN_FAIL 0x82 //门常闭或休眠时开门按钮开门失败 +#define MINOR_HEART_BEAT 0x83 //心跳事件 +#define MINOR_DOOR_OPEN_OR_DORMANT_LINKAGE_OPEN_FAIL 0x84 //门常闭或休眠时开门联动开门失败 +#define MINOR_TRAILING 0x85 //尾随通行 +#define MINOR_REVERSE_ACCESS 0x86 //反向闯入 +#define MINOR_FORCE_ACCESS 0x87 //外力冲撞 +#define MINOR_CLIMBING_OVER_GATE 0x88 //翻越 +#define MINOR_PASSING_TIMEOUT 0x89 //通行超时 +#define MINOR_INTRUSION_ALARM 0x8a //误闯报警 +#define MINOR_FREE_GATE_PASS_NOT_AUTH 0x8b //闸机自由通行时未认证通过 +#define MINOR_DROP_ARM_BLOCK 0x8c //摆臂被阻挡 +#define MINOR_DROP_ARM_BLOCK_RESUME 0x8d //摆臂阻挡消除 +#define MINOR_LOCAL_FACE_MODELING_FAIL 0x8e //设备升级本地人脸建模失败 +#define MINOR_STAY_EVENT 0x8f //逗留事件 +#define MINOR_CERTIFICATE_ALLOWLIST_PASS 0x90 //授权名单认证通过 +#define MINOR_CERTIFICATE_ALLOWLIST_FALL 0x91 //授权名单认证失败 +#define MINOR_FACE_COLLECTION 0x92 //人脸采集事件(无认证,远程核验时上报) +#define MINOR_CARD_COLLECTION 0x93 //卡采集事件(无认证,远程核验时上报) +#define MINOR_PSW_ERROR_OVER_TIMES 0x94 //密码认证失败超次 +#define MINOR_ID_CARD_COLLECTION 0x95 //身份证采集事件(无认证,远程核验时上报) +#define MINOR_PSW_VERIFY_FAIL 0x96 //密码认证失败 +#define MINOR_PASSWORD_MISMATCH 0x97 //密码不匹配 +#define MINOR_EMPLOYEE_NO_NOT_EXIST 0x98 //工号不存在 +#define MINOR_COMBINED_VERIFY_PASS 0x99 //组合认证通过 +#define MINOR_COMBINED_VERIFY_TIMEOUT 0x9a //组合认证超时 +#define MINOR_VERIFY_MODE_MISMATCH 0x9b //认证方式不匹配 +#define MINOR_ORCODE_VERIFY_PASS 0x9c //二维码认证通过 +#define MINOR_ORCODE_VERIFY_FAIL 0x9d //二维码认证失败 +#define MINOR_HOUSEHOLDER_AUTHORIZE_PASS 0x9e //户主授权认证通过 +#define MINOR_BLUETOOTH_VERIFY_PASS 0x9f //蓝牙认证通过 +#define MINOR_BLUETOOTH_VERIFY_FAIL 0xa0 //蓝牙认证失败 -#define MINOR_PASSPORT_VERIFY_FAIL 0xa1 //ϢУʧ -#define MINOR_INFORMAL_M1_CARD_VERIFY_FAIL 0xa2 //M1֤ʧ -#define MINOR_CPU_CARD_ENCRYPT_VERIFY_FAIL 0xa3 //CPUУʧ -#define MINOR_NFC_DISABLE_VERIFY_FAIL 0xa4 //NFCܹر֤ʧ +#define MINOR_PASSPORT_VERIFY_FAIL 0xa1 //护照信息校验失败 +#define MINOR_INFORMAL_M1_CARD_VERIFY_FAIL 0xa2 //非正规M1卡认证失败 +#define MINOR_CPU_CARD_ENCRYPT_VERIFY_FAIL 0xa3 //CPU卡加密校验失败 +#define MINOR_NFC_DISABLE_VERIFY_FAIL 0xa4 //NFC功能关闭验证失败 -#define MINOR_LORA_MODULE_ONLINE 0xa5 //LoRaģ -#define MINOR_LORA_MODULE_OFFLINE 0xa6 //LoRaģ -#define MINOR_MQTT_STATUS 0xa7 //Mqtt״̬ +#define MINOR_LORA_MODULE_ONLINE 0xa5 //LoRa模块上线 +#define MINOR_LORA_MODULE_OFFLINE 0xa6 //LoRa模块下线 +#define MINOR_MQTT_STATUS 0xa7 //Mqtt连接状态 -#define MINOR_EM_CARD_RECOGNIZE_NOT_ENABLED 0xa8 //EMʶδ -#define MINOR_M1_CARD_RECOGNIZE_NOT_ENABLED 0xa9 //M1ʶδ -#define MINOR_CPU_CARD_RECOGNIZE_NOT_ENABLED 0xaa //CPUʶδ -#define MINOR_ID_CARD_RECOGNIZE_NOT_ENABLED 0xab //֤ʶδ -#define MINOR_CARD_SET_SECRET_KEY_FAIL 0xac //װԿʧ -#define MINOR_LOCAL_UPGRADE_FAIL 0xad /* ʧ */ -#define MINOR_REMOTE_UPGRADE_FAIL 0xae /* Զʧ */ -#define MINOR_REMOTE_EXTEND_MODULE_UPGRADE_SUCC 0xaf /*Զչģɹ*/ -#define MINOR_REMOTE_EXTEND_MODULE_UPGRADE_FAIL 0xb0 /*Զչģʧ*/ -#define MINOR_REMOTE_FINGER_PRINT_MODULE_UPGRADE_SUCC 0xb1 /*Զָģɹ*/ -#define MINOR_REMOTE_FINGER_PRINT_MODULE_UPGRADE_FAIL 0xb2 /*Զָģʧ*/ -#define MINOR_DYNAMICCODE_VERIFY_PASS 0xb3 // ̬֤֤ͨ -#define MINOR_DYNAMICCODE_VERIFY_FAIL 0xb4 // ̬֤֤ʧ -#define MINOR_PASSWD_VERIFY_PASS 0xb5 //֤ͨ -#define MINOR_COMSUME_TIMEOUT 0xb6 //ѳʱ -#define MINOR_REFUND_TIMEOUT 0xb7 //ʱ -#define MINOR_COMSUME_AMOUNT_OVERLIMIT 0xb8 //ѽֵ -#define MINOR_COMSUME_TIMES_OVERLIMIT 0xb9 //Ѵ -#define MINOR_USER_COMSUME_ENSURE_TIMEOUT 0xba //ûȷϳʱ -#define MINOR_BLOCKLIST_REACH_THRESHOLD 0xbb //ֹﵽֵ -#define MINOR_DESFIRE_CARD_ENCRYPT_VERIFY_FAIL 0xbc //DesfireУʧ -#define MINOR_DESFIRE_CARD_RECOGNIZE_NOT_ENABLED 0xbd //Desfireʶδ -#define MINOR_IRIS_VERIFY_PASS 0xbe //Ĥ֤ͨ -#define MINOR_IRIS_VERIFY_FAIL 0xbf //Ĥ֤ʧ -#define MINOR_IRIS_BIOASSAY_FAIL 0xc0 //Ĥʧ -#define MINOR_FULL_STAFF 0xc1 //Ա¼Ա90%ʱ -#define MINOR_ATTENDANCE_RECORD_EXCEED_THRESHOLD 0xc2 //ؿڼ¼õֵ -#define MINOR_DYNAMICCODE_VERIFY_INVALID 0xc3 // ̬֤֤ -#define MINOR_MEETING_NO_SIGNIN 0xc4 //δǩ -#define MINOR_MEETING_SIGNIN 0xc5 //ǩ -#define MINOR_MEETING_LATE 0xc6 //ٵ +#define MINOR_EM_CARD_RECOGNIZE_NOT_ENABLED 0xa8 //EM卡识别未启用 +#define MINOR_M1_CARD_RECOGNIZE_NOT_ENABLED 0xa9 //M1卡识别未启用 +#define MINOR_CPU_CARD_RECOGNIZE_NOT_ENABLED 0xaa //CPU卡识别未启用 +#define MINOR_ID_CARD_RECOGNIZE_NOT_ENABLED 0xab //身份证识别未启用 +#define MINOR_CARD_SET_SECRET_KEY_FAIL 0xac //卡灌装密钥失败 +#define MINOR_LOCAL_UPGRADE_FAIL 0xad /* 本地升级失败 */ +#define MINOR_REMOTE_UPGRADE_FAIL 0xae /* 远程升级失败 */ +#define MINOR_REMOTE_EXTEND_MODULE_UPGRADE_SUCC 0xaf /*远程扩展模块升级成功*/ +#define MINOR_REMOTE_EXTEND_MODULE_UPGRADE_FAIL 0xb0 /*远程扩展模块升级失败*/ +#define MINOR_REMOTE_FINGER_PRINT_MODULE_UPGRADE_SUCC 0xb1 /*远程指纹模组升级成功*/ +#define MINOR_REMOTE_FINGER_PRINT_MODULE_UPGRADE_FAIL 0xb2 /*远程指纹模组升级失败*/ +#define MINOR_DYNAMICCODE_VERIFY_PASS 0xb3 // 动态验证码认证通过 +#define MINOR_DYNAMICCODE_VERIFY_FAIL 0xb4 // 动态验证码认证失败 +#define MINOR_PASSWD_VERIFY_PASS 0xb5 //密码认证通过 +#define MINOR_COMSUME_TIMEOUT 0xb6 //消费超时 +#define MINOR_REFUND_TIMEOUT 0xb7 //纠错超时 +#define MINOR_COMSUME_AMOUNT_OVERLIMIT 0xb8 //消费金额超过最大值 +#define MINOR_COMSUME_TIMES_OVERLIMIT 0xb9 //消费次数满 +#define MINOR_USER_COMSUME_ENSURE_TIMEOUT 0xba //用户消费确认超时 +#define MINOR_BLOCKLIST_REACH_THRESHOLD 0xbb //禁止名单数量达到阈值 +#define MINOR_DESFIRE_CARD_ENCRYPT_VERIFY_FAIL 0xbc //Desfire卡加密校验失败 +#define MINOR_DESFIRE_CARD_RECOGNIZE_NOT_ENABLED 0xbd //Desfire卡识别未启用 +#define MINOR_IRIS_VERIFY_PASS 0xbe //虹膜认证通过 +#define MINOR_IRIS_VERIFY_FAIL 0xbf //虹膜认证失败 +#define MINOR_IRIS_BIOASSAY_FAIL 0xc0 //虹膜活体检测失败 +#define MINOR_FULL_STAFF 0xc1 //人员满提醒事件,人员数量超过90%时产生 +#define MINOR_ATTENDANCE_RECORD_EXCEED_THRESHOLD 0xc2 //本地考勤记录超过设置的阈值 +#define MINOR_DYNAMICCODE_VERIFY_INVALID 0xc3 // 动态验证码认证过期 +#define MINOR_MEETING_NO_SIGNIN 0xc4 //会议未签到 +#define MINOR_MEETING_SIGNIN 0xc5 //会议签到 +#define MINOR_MEETING_LATE 0xc6 //会议迟到 -#define MINOR_INTERLOCK_SERVER_FAILED_RESPONSE 0xc9 //ŻӦʧ -#define MINOR_FINGERPRINT_DISENABELD_VERIFY_FAIL 0xca //ָʶδʹ֤ʧ -#define MINOR_FACE_DISENABELD_VERIFY_FAIL 0xcb //Ŀʶδʹ֤ʧ -#define MINOR_MONITOR_OPEN_DOOR 0xcc // -#define MINOR_READER_FACTORY_RESET 0xcd //ָ -#define MINOR_READER_ID_CONFLICT 0xce //IDͻ -#define MINOR_FELICA_CARD_RECOGNIZE_NOT_ENABLED 0xcf //Felicaʶδ -#define MINOR_PROPERTY_EXCEPTION_VERIFY_FAIL 0xd0 //쳣֤ʧܣδ֣ȫñ쳣쳣 -#define MINOR_MEETING_NO_PERSON 0xd1 //ǻԱģʽ£״̬ǻԱǩϱ¼ -#define MINOR_MEETING_NOT_START 0xd2 //δʼ״̬Աǩ -#define MINOR_MEETING_SIGNEDIN 0xd3 //ǩǩԱظǩ -#define MINOR_AUTHENTICATION_TIMES_REACHED 0xd4 //Ա֤Ȩ޼ƻĵǰʱڣﵽ֤ƣ -#define MINOR_FACE_MODEL_FAIL_BY_UPGRADE 0xd5 //ģʧ¼ +#define MINOR_INTERLOCK_SERVER_FAILED_RESPONSE 0xc9 //多门互锁服务器应答失败 +#define MINOR_FINGERPRINT_DISENABELD_VERIFY_FAIL 0xca //指纹识别未使能认证失败 +#define MINOR_FACE_DISENABELD_VERIFY_FAIL 0xcb //目标识别未使能认证失败 +#define MINOR_MONITOR_OPEN_DOOR 0xcc //开门 +#define MINOR_READER_FACTORY_RESET 0xcd //读卡器恢复出厂设置 +#define MINOR_READER_ID_CONFLICT 0xce //读卡器ID冲突 +#define MINOR_FELICA_CARD_RECOGNIZE_NOT_ENABLED 0xcf //Felica卡识别未启用 +#define MINOR_PROPERTY_EXCEPTION_VERIFY_FAIL 0xd0 //属性异常认证失败(未戴口罩,安全帽,体温异常等属性异常) +#define MINOR_MEETING_NO_PERSON 0xd1 //非会议人员:会议模式下,所有状态,非会议人员签到,上报该事件 +#define MINOR_MEETING_NOT_START 0xd2 //会议未开始:会议空闲状态,会议人员签到 +#define MINOR_MEETING_SIGNEDIN 0xd3 //已签到:已签到会议人员重复签到 +#define MINOR_AUTHENTICATION_TIMES_REACHED 0xd4 //人员认证次数已满(在权限计划的当前时间段内,达到认证次数限制) +#define MINOR_FACE_MODEL_FAIL_BY_UPGRADE 0xd5 //人脸建模升级兼容失败事件 -#define MINOR_UNCLOCK_RECORD 0xd6 //豸¼¼ϱ -#define MINOR_DOOR_NOT_OPEN 0xd7 //δԽ豸 -#define MINOR_DOOR_UNCLOSED 0xd8 //δرԽ豸 -#define MINOR_ORCODE_KEY_VERIFY_FAIL 0xd9 //άԿ֤ʧ -#define MINOR_PERSON_PASS_THROUGH 0xda //Աͨ¼ -#define MINOR_PEOPLE_AND_SOCIAL_SECURITY_CARD_COMPARE_PASS 0xdb //籣֤ȶͨ -#define MINOR_PEOPLE_AND_SOCIAL_SECURITY_CARD_COMPARE_FAIL 0xdc //籣֤ȶʧ -#define MINOR_MASK_NOT_REMOVED 0xdd //δժ -#define MINOR_CAPTURE_IMAGE_TOO_SMALL 0xdf //ץͼƬС -#define MINOR_DISTRACT_CONTROLLER_UPGRADE_SUCC 0xe0 //ֿɹ -#define MINOR_DISTRACT_CONTROLLER_UPGRADE_FAIL 0xe1 //ֿʧ -#define MINOR_EMPLOYEENO_VERIFY_PASS 0xe2 //֤ͨ +#define MINOR_UNCLOCK_RECORD 0xd6 //设备开锁记录事件上报 +#define MINOR_DOOR_NOT_OPEN 0xd7 //门未开报警(对讲设备) +#define MINOR_DOOR_UNCLOSED 0xd8 //门未关报警(对讲设备) +#define MINOR_ORCODE_KEY_VERIFY_FAIL 0xd9 //二维码密钥验证失败 +#define MINOR_PERSON_PASS_THROUGH 0xda //人员通行事件 +#define MINOR_PEOPLE_AND_SOCIAL_SECURITY_CARD_COMPARE_PASS 0xdb //社保卡人证比对通过 +#define MINOR_PEOPLE_AND_SOCIAL_SECURITY_CARD_COMPARE_FAIL 0xdc //社保卡人证比对失败 +#define MINOR_MASK_NOT_REMOVED 0xdd //未摘口罩 +#define MINOR_CAPTURE_IMAGE_TOO_SMALL 0xdf //抓拍图片过小 +#define MINOR_DISTRACT_CONTROLLER_UPGRADE_SUCC 0xe0 //分控制器升级成功 +#define MINOR_DISTRACT_CONTROLLER_UPGRADE_FAIL 0xe1 //分控制器升级失败 +#define MINOR_EMPLOYEENO_VERIFY_PASS 0xe2 //工号认证通过 -#define MINOR_EVENT_CUSTOM1 0x500 //ŽԶ¼1 -#define MINOR_EVENT_CUSTOM2 0x501 //ŽԶ¼2 -#define MINOR_EVENT_CUSTOM3 0x502 //ŽԶ¼3 -#define MINOR_EVENT_CUSTOM4 0x503 //ŽԶ¼4 -#define MINOR_EVENT_CUSTOM5 0x504 //ŽԶ¼5 -#define MINOR_EVENT_CUSTOM6 0x505 //ŽԶ¼6 -#define MINOR_EVENT_CUSTOM7 0x506 //ŽԶ¼7 -#define MINOR_EVENT_CUSTOM8 0x507 //ŽԶ¼8 -#define MINOR_EVENT_CUSTOM9 0x508 //ŽԶ¼9 -#define MINOR_EVENT_CUSTOM10 0x509 //ŽԶ¼10 -#define MINOR_EVENT_CUSTOM11 0x50a //ŽԶ¼11 -#define MINOR_EVENT_CUSTOM12 0x50b //ŽԶ¼12 -#define MINOR_EVENT_CUSTOM13 0x50c //ŽԶ¼13 -#define MINOR_EVENT_CUSTOM14 0x50d //ŽԶ¼14 -#define MINOR_EVENT_CUSTOM15 0x50e //ŽԶ¼15 -#define MINOR_EVENT_CUSTOM16 0x50f //ŽԶ¼16 -#define MINOR_EVENT_CUSTOM17 0x510 //ŽԶ¼17 -#define MINOR_EVENT_CUSTOM18 0x511 //ŽԶ¼18 -#define MINOR_EVENT_CUSTOM19 0x512 //ŽԶ¼19 -#define MINOR_EVENT_CUSTOM20 0x513 //ŽԶ¼20 -#define MINOR_EVENT_CUSTOM21 0x514 //ŽԶ¼21 -#define MINOR_EVENT_CUSTOM22 0x515 //ŽԶ¼22 -#define MINOR_EVENT_CUSTOM23 0x516 //ŽԶ¼23 -#define MINOR_EVENT_CUSTOM24 0x517 //ŽԶ¼24 -#define MINOR_EVENT_CUSTOM25 0x518 //ŽԶ¼25 -#define MINOR_EVENT_CUSTOM26 0x519 //ŽԶ¼26 -#define MINOR_EVENT_CUSTOM27 0x51a //ŽԶ¼27 -#define MINOR_EVENT_CUSTOM28 0x51b //ŽԶ¼28 -#define MINOR_EVENT_CUSTOM29 0x51c //ŽԶ¼29 -#define MINOR_EVENT_CUSTOM30 0x51d //ŽԶ¼30 -#define MINOR_EVENT_CUSTOM31 0x51e //ŽԶ¼31 -#define MINOR_EVENT_CUSTOM32 0x51f //ŽԶ¼32 -#define MINOR_EVENT_CUSTOM33 0x520 //ŽԶ¼33 -#define MINOR_EVENT_CUSTOM34 0x521 //ŽԶ¼34 -#define MINOR_EVENT_CUSTOM35 0x522 //ŽԶ¼35 -#define MINOR_EVENT_CUSTOM36 0x523 //ŽԶ¼36 -#define MINOR_EVENT_CUSTOM37 0x524 //ŽԶ¼37 -#define MINOR_EVENT_CUSTOM38 0x525 //ŽԶ¼38 -#define MINOR_EVENT_CUSTOM39 0x526 //ŽԶ¼39 -#define MINOR_EVENT_CUSTOM40 0x527 //ŽԶ¼40 -#define MINOR_EVENT_CUSTOM41 0x528 //ŽԶ¼41 -#define MINOR_EVENT_CUSTOM42 0x529 //ŽԶ¼42 -#define MINOR_EVENT_CUSTOM43 0x52a //ŽԶ¼43 -#define MINOR_EVENT_CUSTOM44 0x52b //ŽԶ¼44 -#define MINOR_EVENT_CUSTOM45 0x52c //ŽԶ¼45 -#define MINOR_EVENT_CUSTOM46 0x52d //ŽԶ¼46 -#define MINOR_EVENT_CUSTOM47 0x52e //ŽԶ¼47 -#define MINOR_EVENT_CUSTOM48 0x52f //ŽԶ¼48 -#define MINOR_EVENT_CUSTOM49 0x530 //ŽԶ¼49 -#define MINOR_EVENT_CUSTOM50 0x531 //ŽԶ¼50 -#define MINOR_EVENT_CUSTOM51 0x532 //ŽԶ¼51 -#define MINOR_EVENT_CUSTOM52 0x533 //ŽԶ¼52 -#define MINOR_EVENT_CUSTOM53 0x534 //ŽԶ¼53 -#define MINOR_EVENT_CUSTOM54 0x535 //ŽԶ¼54 -#define MINOR_EVENT_CUSTOM55 0x536 //ŽԶ¼55 -#define MINOR_EVENT_CUSTOM56 0x537 //ŽԶ¼56 -#define MINOR_EVENT_CUSTOM57 0x538 //ŽԶ¼57 -#define MINOR_EVENT_CUSTOM58 0x539 //ŽԶ¼58 -#define MINOR_EVENT_CUSTOM59 0x53a //ŽԶ¼59 -#define MINOR_EVENT_CUSTOM60 0x53b //ŽԶ¼60 -#define MINOR_EVENT_CUSTOM61 0x53c //ŽԶ¼61 -#define MINOR_EVENT_CUSTOM62 0x53d //ŽԶ¼62 -#define MINOR_EVENT_CUSTOM63 0x53e //ŽԶ¼63 -#define MINOR_EVENT_CUSTOM64 0x53f //ŽԶ¼64 -#define MINOR_ESD_OK 0x540 //ESDϸ -#define MINOR_ESD_LINKAGE_DISENABLE 0x541 //ESDϸ񣬲 -#define MINOR_ESD_LINKAGE_ENABLE 0x542 //ESDϸ񣬿 -#define MINOR_ESD_OVERTIME 0x543 //ESDⳬʱ -#define MINOR_REMOTE_IMPORT_USER_DATA 0x544 //Զ̵û -#define MINOR_REMOTE_EXPORT_USER_DATA 0x545 //Զ̵û +#define MINOR_EVENT_CUSTOM1 0x500 //门禁自定义事件1 +#define MINOR_EVENT_CUSTOM2 0x501 //门禁自定义事件2 +#define MINOR_EVENT_CUSTOM3 0x502 //门禁自定义事件3 +#define MINOR_EVENT_CUSTOM4 0x503 //门禁自定义事件4 +#define MINOR_EVENT_CUSTOM5 0x504 //门禁自定义事件5 +#define MINOR_EVENT_CUSTOM6 0x505 //门禁自定义事件6 +#define MINOR_EVENT_CUSTOM7 0x506 //门禁自定义事件7 +#define MINOR_EVENT_CUSTOM8 0x507 //门禁自定义事件8 +#define MINOR_EVENT_CUSTOM9 0x508 //门禁自定义事件9 +#define MINOR_EVENT_CUSTOM10 0x509 //门禁自定义事件10 +#define MINOR_EVENT_CUSTOM11 0x50a //门禁自定义事件11 +#define MINOR_EVENT_CUSTOM12 0x50b //门禁自定义事件12 +#define MINOR_EVENT_CUSTOM13 0x50c //门禁自定义事件13 +#define MINOR_EVENT_CUSTOM14 0x50d //门禁自定义事件14 +#define MINOR_EVENT_CUSTOM15 0x50e //门禁自定义事件15 +#define MINOR_EVENT_CUSTOM16 0x50f //门禁自定义事件16 +#define MINOR_EVENT_CUSTOM17 0x510 //门禁自定义事件17 +#define MINOR_EVENT_CUSTOM18 0x511 //门禁自定义事件18 +#define MINOR_EVENT_CUSTOM19 0x512 //门禁自定义事件19 +#define MINOR_EVENT_CUSTOM20 0x513 //门禁自定义事件20 +#define MINOR_EVENT_CUSTOM21 0x514 //门禁自定义事件21 +#define MINOR_EVENT_CUSTOM22 0x515 //门禁自定义事件22 +#define MINOR_EVENT_CUSTOM23 0x516 //门禁自定义事件23 +#define MINOR_EVENT_CUSTOM24 0x517 //门禁自定义事件24 +#define MINOR_EVENT_CUSTOM25 0x518 //门禁自定义事件25 +#define MINOR_EVENT_CUSTOM26 0x519 //门禁自定义事件26 +#define MINOR_EVENT_CUSTOM27 0x51a //门禁自定义事件27 +#define MINOR_EVENT_CUSTOM28 0x51b //门禁自定义事件28 +#define MINOR_EVENT_CUSTOM29 0x51c //门禁自定义事件29 +#define MINOR_EVENT_CUSTOM30 0x51d //门禁自定义事件30 +#define MINOR_EVENT_CUSTOM31 0x51e //门禁自定义事件31 +#define MINOR_EVENT_CUSTOM32 0x51f //门禁自定义事件32 +#define MINOR_EVENT_CUSTOM33 0x520 //门禁自定义事件33 +#define MINOR_EVENT_CUSTOM34 0x521 //门禁自定义事件34 +#define MINOR_EVENT_CUSTOM35 0x522 //门禁自定义事件35 +#define MINOR_EVENT_CUSTOM36 0x523 //门禁自定义事件36 +#define MINOR_EVENT_CUSTOM37 0x524 //门禁自定义事件37 +#define MINOR_EVENT_CUSTOM38 0x525 //门禁自定义事件38 +#define MINOR_EVENT_CUSTOM39 0x526 //门禁自定义事件39 +#define MINOR_EVENT_CUSTOM40 0x527 //门禁自定义事件40 +#define MINOR_EVENT_CUSTOM41 0x528 //门禁自定义事件41 +#define MINOR_EVENT_CUSTOM42 0x529 //门禁自定义事件42 +#define MINOR_EVENT_CUSTOM43 0x52a //门禁自定义事件43 +#define MINOR_EVENT_CUSTOM44 0x52b //门禁自定义事件44 +#define MINOR_EVENT_CUSTOM45 0x52c //门禁自定义事件45 +#define MINOR_EVENT_CUSTOM46 0x52d //门禁自定义事件46 +#define MINOR_EVENT_CUSTOM47 0x52e //门禁自定义事件47 +#define MINOR_EVENT_CUSTOM48 0x52f //门禁自定义事件48 +#define MINOR_EVENT_CUSTOM49 0x530 //门禁自定义事件49 +#define MINOR_EVENT_CUSTOM50 0x531 //门禁自定义事件50 +#define MINOR_EVENT_CUSTOM51 0x532 //门禁自定义事件51 +#define MINOR_EVENT_CUSTOM52 0x533 //门禁自定义事件52 +#define MINOR_EVENT_CUSTOM53 0x534 //门禁自定义事件53 +#define MINOR_EVENT_CUSTOM54 0x535 //门禁自定义事件54 +#define MINOR_EVENT_CUSTOM55 0x536 //门禁自定义事件55 +#define MINOR_EVENT_CUSTOM56 0x537 //门禁自定义事件56 +#define MINOR_EVENT_CUSTOM57 0x538 //门禁自定义事件57 +#define MINOR_EVENT_CUSTOM58 0x539 //门禁自定义事件58 +#define MINOR_EVENT_CUSTOM59 0x53a //门禁自定义事件59 +#define MINOR_EVENT_CUSTOM60 0x53b //门禁自定义事件60 +#define MINOR_EVENT_CUSTOM61 0x53c //门禁自定义事件61 +#define MINOR_EVENT_CUSTOM62 0x53d //门禁自定义事件62 +#define MINOR_EVENT_CUSTOM63 0x53e //门禁自定义事件63 +#define MINOR_EVENT_CUSTOM64 0x53f //门禁自定义事件64 +#define MINOR_ESD_OK 0x540 //ESD合格 +#define MINOR_ESD_LINKAGE_DISENABLE 0x541 //ESD不合格,不开门 +#define MINOR_ESD_LINKAGE_ENABLE 0x542 //ESD不合格,开门 +#define MINOR_ESD_OVERTIME 0x543 //ESD检测超时 +#define MINOR_REMOTE_IMPORT_USER_DATA 0x544 //远程导入用户数据 +#define MINOR_REMOTE_EXPORT_USER_DATA 0x545 //远程导出用户数据 -#define MINOR_LOCK_FINGER_OPEN_DOOR 0x600 //ָƿ -#define MINOR_LOCK_PASSWORD_OPEN_DOOR 0x601 //뿪 -#define MINOR_LOCK_CARD_OPEN_DOOR 0x602 //ˢ -#define MINOR_LOCK_CENTER_OPEN_DOOR 0x603 //Ŀ -#define MINOR_LOCK_APP_OPEN_DOOR 0x604 //APP -#define MINOR_LOCK_KEY_OPEN_DOOR 0x605 //Կ׿ -#define MINOR_LOCK_REMOTE_DEVICE_OPEN_DOOR 0x606 //ң -#define MINOR_LOCK_TMP_PASSWORD_OPEN_DOOR 0x607 //ʱ뿪 -#define MINOR_LOCK_BLUETOOTH_OPEN_DOOR 0x608 // -#define MINOR_LOCK_MULTI_OPEN_DOOR 0x609 //ؿ +#define MINOR_LOCK_FINGER_OPEN_DOOR 0x600 //智能锁指纹开门 +#define MINOR_LOCK_PASSWORD_OPEN_DOOR 0x601 //智能锁密码开门 +#define MINOR_LOCK_CARD_OPEN_DOOR 0x602 //智能锁刷卡开门 +#define MINOR_LOCK_CENTER_OPEN_DOOR 0x603 //智能锁中心开门 +#define MINOR_LOCK_APP_OPEN_DOOR 0x604 //智能锁APP开门 +#define MINOR_LOCK_KEY_OPEN_DOOR 0x605 //智能锁钥匙开门 +#define MINOR_LOCK_REMOTE_DEVICE_OPEN_DOOR 0x606 //智能锁遥控器开门 +#define MINOR_LOCK_TMP_PASSWORD_OPEN_DOOR 0x607 //智能锁临时密码开门 +#define MINOR_LOCK_BLUETOOTH_OPEN_DOOR 0x608 //智能锁蓝牙开门 +#define MINOR_LOCK_MULTI_OPEN_DOOR 0x609 //智能锁多重开门 -#define MINOR_VP_ANTI_SPOOFING_FAIL 0x700 //ƻʧ -#define MINOR_VP_VERIFY_FAIL 0x701 //֤ʧ -#define MINOR_PP_AND_PV_VERIFY_SUCCESS 0x707 //ƾ֤ɹ -#define MINOR_PP_AND_PV_VERIFY_FAIL 0x708 //ƾ֤ʧ -#define MINOR_PP_AND_PV_ANTI_SPOOFING_FAIL 0x709 //ƾʧ +#define MINOR_VP_ANTI_SPOOFING_FAIL 0x700 //声纹活体检测失败 +#define MINOR_VP_VERIFY_FAIL 0x701 //声纹认证失败 +#define MINOR_PP_AND_PV_VERIFY_SUCCESS 0x707 //掌纹掌静脉认证成功 +#define MINOR_PP_AND_PV_VERIFY_FAIL 0x708 //掌纹掌静脉认证失败 +#define MINOR_PP_AND_PV_ANTI_SPOOFING_FAIL 0x709 //掌纹掌静脉活体检测失败 -#define MINOR_CHANNEL_SECURITY_AREA_OCCUPY 0x800 //Աͨȫ -#define MINOR_CHANNEL_ANTI_PINCH_AREA_OCCUPY 0x801 //Աͨ -#define MINOR_CHANNEL_MOTOR_BRAKE_WORKING 0x802 //Աͨƶƶ -#define MINOR_CHANNEL_INFRARED_SELF_CHECK_FAIL 0x803 //ԱͨԼʧܣԼ豣֤޴ -#define MINOR_CHANNEL_MOTOR_SELF_LEARNING_FAIL 0x804 //Աͨѧϰʧ -#define MINOR_CHANNEL_ALARM_AREA_NOT_OPEN_DOOR 0x805 //ԱֹͨţԱվ֤ͨǷţ -#define MINOR_CHANNEL_MOTOR_DRIVE_BOARD_EXCEPTION 0x806 //Աͨ쳣 -#define MINOR_CHANNEL_MOTOR_ENCODE_EXCEPTION 0x807 //Աͨ쳣 -#define MINOR_CHANNEL_MOTOR_OVERCURRENT 0x808 //Աͨ -#define MINOR_CHANNEL_MOTOR_OVERVOLTAGE 0x809 //Աͨѹ -#define MINOR_CHANNEL_MOTOR_UNDERVOLTAGE 0x80a //ԱͨǷѹ -#define MINOR_CHANNEL_MOTOR_EXCEPTION 0x80b //Աͨ쳣 -#define MINOR_CHANNEL_PERMISSION_AUTH_BLOCKED 0x80c //Ȩ֤ -#define MINOR_REMOTECONTROL_VERIFY_PASS 0x80d //ң֤ͨ -#define MINOR_REMOTECONTROL_VERIFY_FAIL 0x80e //ң֤ʧ -#define MINOR_FACE_RECOGNITION_ANGLES_POOR 0x80f //ĿʶǶȲ.δ֤ڣֽ -#define MINOR_HIGH_PAYMENT_AMOUNT_SECONDARY_VERIFY_FAILED 0x810 //Ѷ֤ʧ -#define MINOR_SIMILAR_USER_SECONDARY_VERIFY_FAILED 0x811 //Ա֤ʧ -#define MINOR_DOOR_INTERLOCK_DELAY 0x813 //Żʱ -#define MINOR_DOOR_NOT_USED 0x814 //׼ͨеδʹ -#define MINOR_CARD_AUTH_FAILURE_LOCKED 0x815 //֤ʧܳ -#define MINOR_DOOR_SECURITY_MODULE_PAIR_FAIL 0x816 //ſذȫģʧ +#define MINOR_CHANNEL_SECURITY_AREA_OCCUPY 0x800 //人员通道安全区有人 +#define MINOR_CHANNEL_ANTI_PINCH_AREA_OCCUPY 0x801 //人员通道防夹区有人 +#define MINOR_CHANNEL_MOTOR_BRAKE_WORKING 0x802 //人员通道电机制动器制动 +#define MINOR_CHANNEL_INFRARED_SELF_CHECK_FAIL 0x803 //人员通道红外自检失败(整机自检中需保证红外无触发) +#define MINOR_CHANNEL_MOTOR_SELF_LEARNING_FAIL 0x804 //人员通道电机学习失败 +#define MINOR_CHANNEL_ALARM_AREA_NOT_OPEN_DOOR 0x805 //人员通道报警区域禁止开门(人员站在通道里面认证是否允许开门) +#define MINOR_CHANNEL_MOTOR_DRIVE_BOARD_EXCEPTION 0x806 //人员通道电机驱动板异常 +#define MINOR_CHANNEL_MOTOR_ENCODE_EXCEPTION 0x807 //人员通道电机编码器异常 +#define MINOR_CHANNEL_MOTOR_OVERCURRENT 0x808 //人员通道电机过流 +#define MINOR_CHANNEL_MOTOR_OVERVOLTAGE 0x809 //人员通道电机过压 +#define MINOR_CHANNEL_MOTOR_UNDERVOLTAGE 0x80a //人员通道电机欠压 +#define MINOR_CHANNEL_MOTOR_EXCEPTION 0x80b //人员通道电机本体异常 +#define MINOR_CHANNEL_PERMISSION_AUTH_BLOCKED 0x80c //权限认证被拦截 +#define MINOR_REMOTECONTROL_VERIFY_PASS 0x80d //遥控器认证通过 +#define MINOR_REMOTECONTROL_VERIFY_FAIL 0x80e //遥控器认证失败 +#define MINOR_FACE_RECOGNITION_ANGLES_POOR 0x80f //目标识别角度不佳.未到认证环节,区分进出向 +#define MINOR_HIGH_PAYMENT_AMOUNT_SECONDARY_VERIFY_FAILED 0x810 //大额消费二次认证失败 +#define MINOR_SIMILAR_USER_SECONDARY_VERIFY_FAILED 0x811 //相似消费人员二次认证失败 +#define MINOR_DOOR_INTERLOCK_DELAY 0x813 //门互锁延时中 +#define MINOR_DOOR_NOT_USED 0x814 //准许通行但未使用门 +#define MINOR_CARD_AUTH_FAILURE_LOCKED 0x815 //卡号认证失败超次锁定 +#define MINOR_DOOR_SECURITY_MODULE_PAIR_FAIL 0x816 //门控安全模块配对失败 -//2018-04-23 ͨ¼־ -#define MINOR_ALARMHOST_SCHOOLTIME_IRGI_B 0x1001 //BУʱ -#define MINOR_ALARMHOST_SCHOOLTIME_SDK 0x1002 //SDKУʱ -#define MINOR_ALARMHOST_SCHOOLTIME_SELFTEST 0x1003 //ԼУʱ -#define MINOR_ALARMHOST_SUBSYSTEM_ABNORMALINSERT 0x1004 //Ӱ -#define MINOR_ALARMHOST_SUBSYSTEM_ABNORMALPULLOUT 0x1005 //Ӱγ +//2018-04-23 通用物联网关事件日志类型 +#define MINOR_ALARMHOST_SCHOOLTIME_IRGI_B 0x1001 //B码校时 +#define MINOR_ALARMHOST_SCHOOLTIME_SDK 0x1002 //SDK校时 +#define MINOR_ALARMHOST_SCHOOLTIME_SELFTEST 0x1003 //定制自检校时 +#define MINOR_ALARMHOST_SUBSYSTEM_ABNORMALINSERT 0x1004 //子板插入 +#define MINOR_ALARMHOST_SUBSYSTEM_ABNORMALPULLOUT 0x1005 //子板拔出 -#define MINOR_ALARMHOST_AUTO_ARM 0x1006 //Զ -#define MINOR_ALARMHOST_AUTO_DISARM 0x1007 //Զ -#define MINOR_ALARMHOST_TIME_TIGGER_ON 0x1008 //ʱ -#define MINOR_ALARMHOST_TIME_TIGGER_OFF 0x1009 //ʱرմ -#define MINOR_ALARMHOST_AUTO_ARM_FAILD 0x100a //Զʧ -#define MINOR_ALARMHOST_AUTO_DISARM_FAILD 0x100b //Զʧ -#define MINOR_ALARMHOST_TIME_TIGGER_ON_FAILD 0x100c //ʱʧ -#define MINOR_ALARMHOST_TIME_TIGGER_OFF_FAILD 0x100d //ʱرմʧ -#define MINOR_ALARMHOST_MANDATORY_ALARM 0x100e //ǿƲ -#define MINOR_ALARMHOST_KEYPAD_LOCKED 0x100f // -#define MINOR_ALARMHOST_USB_INSERT 0x1010 //USB -#define MINOR_ALARMHOST_USB_PULLOUT 0x1011 //USBγ -#define MINOR_ALARMHOST_4G_MODULS_ONLINE 0x1012 //4Gģ -#define MINOR_ALARMHOST_4G_MODULS_OFFLINE 0x1013 //4Gģ +#define MINOR_ALARMHOST_AUTO_ARM 0x1006 //自动布防 +#define MINOR_ALARMHOST_AUTO_DISARM 0x1007 //自动撤防 +#define MINOR_ALARMHOST_TIME_TIGGER_ON 0x1008 //定时开启触发器 +#define MINOR_ALARMHOST_TIME_TIGGER_OFF 0x1009 //定时关闭触发器 +#define MINOR_ALARMHOST_AUTO_ARM_FAILD 0x100a //自动布防失败 +#define MINOR_ALARMHOST_AUTO_DISARM_FAILD 0x100b //自动撤防失败 +#define MINOR_ALARMHOST_TIME_TIGGER_ON_FAILD 0x100c //定时开启触发器失败 +#define MINOR_ALARMHOST_TIME_TIGGER_OFF_FAILD 0x100d //定时关闭触发器失败 +#define MINOR_ALARMHOST_MANDATORY_ALARM 0x100e //强制布防 +#define MINOR_ALARMHOST_KEYPAD_LOCKED 0x100f //键盘锁定 +#define MINOR_ALARMHOST_USB_INSERT 0x1010 //USB插入 +#define MINOR_ALARMHOST_USB_PULLOUT 0x1011 //USB拔出 +#define MINOR_ALARMHOST_4G_MODULS_ONLINE 0x1012 //4G模块上线 +#define MINOR_ALARMHOST_4G_MODULS_OFFLINE 0x1013 //4G模块下线 -#define MINOR_EZVIZ_CLOUD_ONLINE 0x1014 //өʯ -#define MINOR_EZVIZ_CLOUD_OFFLINE 0x1015 //өʯ +#define MINOR_EZVIZ_CLOUD_ONLINE 0x1014 //萤石云上线 +#define MINOR_EZVIZ_CLOUD_OFFLINE 0x1015 //萤石云下线 -#define MINOR_SIPUA_GRID_ONLINE 0x1016 //B -#define MINOR_SIPUA_GRID_OFFLINE 0x1017 //B +#define MINOR_SIPUA_GRID_ONLINE 0x1016 //国网B上线 +#define MINOR_SIPUA_GRID_OFFLINE 0x1017 //国网B下线 -#define MINOR_INTERNET_ACCESS_CONNECTED 0x1018 // -#define MINOR_INTERNET_ACCESS_BREAK 0x1019 //ڶϿ +#define MINOR_INTERNET_ACCESS_CONNECTED 0x1018 //网口连接 +#define MINOR_INTERNET_ACCESS_BREAK 0x1019 //网口断开 -#define MINOR_WIRELESS_CONNECTED 0x101a // -#define MINOR_WIRELESS_BREAK 0x101b //߶Ͽ -#define MINOR_PORT_LINK_DOWN 0x101c //˿down -#define MINOR_PORT_LINK_UP 0x101d //˿up -#define MINOR_POE_PORT_POWER_ON 0x101e //POE˿power on -#define MINOR_POE_PORT_POWER_OFF 0x101f //POE˿power off -#define MINOR_POE_TOTAL_POWER_MAX 0x1020 //POEܹʴﵽpoe-max -#define MINNOR_POE_TOTAL_POWER_RESUME 0x1021 //POEܹʻָ -#define MINNOR_CARGO_ITEMS 0x1022 //Ʒȡ +#define MINOR_WIRELESS_CONNECTED 0x101a //无线连接 +#define MINOR_WIRELESS_BREAK 0x101b //无线断开 +#define MINOR_PORT_LINK_DOWN 0x101c //端口网络down +#define MINOR_PORT_LINK_UP 0x101d //端口网络up +#define MINOR_POE_PORT_POWER_ON 0x101e //POE端口power on +#define MINOR_POE_PORT_POWER_OFF 0x101f //POE端口power off +#define MINOR_POE_TOTAL_POWER_MAX 0x1020 //POE总功率达到poe-max +#define MINNOR_POE_TOTAL_POWER_RESUME 0x1021 //POE总功率恢复正常 +#define MINNOR_CARGO_ITEMS 0x1022 //货格物品取放 typedef enum tagALARMHOST_MAJOR_TYPE @@ -7423,711 +7423,711 @@ typedef enum tagALARMHOST_MAJOR_TYPE typedef enum tagALARMHOST_MINOR_TYPE { - // - MINOR_SHORT_CIRCUIT =0x01, // · - MINOR_BROKEN_CIRCUIT, // · - MINOR_ALARM_RESET, // λ - MINOR_ALARM_NORMAL, // ָ - MINOR_PASSWORD_ERROR, // 3 - MINOR_ID_CARD_ILLEGALLY, // ǷӦID - MINOR_KEYPAD_REMOVE, // ̷ - MINOR_KEYPAD_REMOVE_RESTORE, // ̷λ - MINOR_DEV_REMOVE, // 豸 - MINOR_DEV_REMOVE_RESTORE, // 豸λ - MINOR_BELOW_ALARM_LIMIT1, // ģڱ1 - MINOR_BELOW_ALARM_LIMIT2, // ģڱ2 - MINOR_BELOW_ALARM_LIMIT3, // ģڱ3 - MINOR_BELOW_ALARM_LIMIT4, // ģڱ4 - MINOR_ABOVE_ALARM_LIMIT1, // ģڱ1 - MINOR_ABOVE_ALARM_LIMIT2, // ģڱ2 - MINOR_ABOVE_ALARM_LIMIT3, // ģڱ3 - MINOR_ABOVE_ALARM_LIMIT4, // ģڱ4 - MINOR_URGENCYBTN_ON, // ť - MINOR_URGENCYBTN_OFF, // ťλ - MINOR_VIRTUAL_DEFENCE_SUSPECT, //˾ - MINOR_VIRTUAL_DEFENCE_FIRE, // - MINOR_VIRTUAL_DEFENCE_URGENT, // - MINOR_ALARMHOST_MOTDET_START, //ƶⱨʼ - MINOR_ALARMHOST_MOTDET_STOP, //ƶⱨ - MINOR_ALARMHOST_HIDE_ALARM_START, //ڵʼ - MINOR_ALARMHOST_HIDE_ALARM_STOP, //ڵ - MINOR_ALARMHOST_UPS_ALARM, //UPS - MINOR_ALARMHOST_ELECTRICITY_METER_ALARM, // - MINOR_ALARMHOST_SWITCH_POWER_ALARM, //صԴ - MINOR_ALARMHOST_GAS_DETECT_SYS_ALARM, //ϵͳ - MINOR_ALARMHOST_TRANSFORMER_TEMPRATURE_ALARM, //Ա - MINOR_ALARMHOST_TEMP_HUMI_ALARM, //ʪȴ - MINOR_ALARMHOST_UPS_ALARM_RESTORE, //UPSָ - MINOR_ALARMHOST_ELECTRICITY_METER_ALARM_RESTORE, //ָ - MINOR_ALARMHOST_SWITCH_POWER_ALARM_RESTORE, //صԴָ - MINOR_ALARMHOST_GAS_DETECT_SYS_ALARM_RESTORE, //ϵͳָ - MINOR_ALARMHOST_TRANSFORMER_TEMPRATURE_ALARM_RESTORE, //Աָ - MINOR_ALARMHOST_TEMP_HUMI_ALARM_RESTORE, //ʪȴָ - MINOR_ALARMHOST_WATER_LEVEL_SENSOR_ALARM, //ˮλ - MINOR_ALARMHOST_WATER_LEVEL_SENSOR_ALARM_RESTORE, //ˮλָ - MINOR_ALARMHOST_DUST_NOISE_ALARM, //ﳾ - MINOR_ALARMHOST_DUST_NOISE_ALARM_RESTORE, //ﳾָ - MINOR_ALARMHOST_ENVIRONMENTAL_LOGGER_ALARM, //ɼDZ - MINOR_ALARMHOST_ENVIRONMENTAL_LOGGER_ALARM_RESTORE, //ɼDZָ + // 报警 + MINOR_SHORT_CIRCUIT =0x01, // 短路报警 + MINOR_BROKEN_CIRCUIT, // 断路报警 + MINOR_ALARM_RESET, // 报警复位 + MINOR_ALARM_NORMAL, // 报警恢复正常 + MINOR_PASSWORD_ERROR, // 密码错误(连续3次输入密码错误) + MINOR_ID_CARD_ILLEGALLY, // 非法感应卡ID + MINOR_KEYPAD_REMOVE, // 键盘防拆 + MINOR_KEYPAD_REMOVE_RESTORE, // 键盘防拆复位 + MINOR_DEV_REMOVE, // 设备防拆 + MINOR_DEV_REMOVE_RESTORE, // 设备防拆复位 + MINOR_BELOW_ALARM_LIMIT1, // 模拟量低于报警限1 + MINOR_BELOW_ALARM_LIMIT2, // 模拟量低于报警限2 + MINOR_BELOW_ALARM_LIMIT3, // 模拟量低于报警限3 + MINOR_BELOW_ALARM_LIMIT4, // 模拟量低于报警限4 + MINOR_ABOVE_ALARM_LIMIT1, // 模拟量高于报警限1 + MINOR_ABOVE_ALARM_LIMIT2, // 模拟量高于报警限2 + MINOR_ABOVE_ALARM_LIMIT3, // 模拟量高于报警限3 + MINOR_ABOVE_ALARM_LIMIT4, // 模拟量高于报警限4 + MINOR_URGENCYBTN_ON, // 紧急按钮按下 + MINOR_URGENCYBTN_OFF, // 紧急按钮复位 + MINOR_VIRTUAL_DEFENCE_SUSPECT, //软防区匪警 + MINOR_VIRTUAL_DEFENCE_FIRE, //软防区火警 + MINOR_VIRTUAL_DEFENCE_URGENT, //软防区紧急 + MINOR_ALARMHOST_MOTDET_START, //移动侦测报警开始 + MINOR_ALARMHOST_MOTDET_STOP, //移动侦测报警结束 + MINOR_ALARMHOST_HIDE_ALARM_START, //遮挡报警开始 + MINOR_ALARMHOST_HIDE_ALARM_STOP, //遮挡报警结束 + MINOR_ALARMHOST_UPS_ALARM, //UPS报警 + MINOR_ALARMHOST_ELECTRICITY_METER_ALARM, //电量表报警 + MINOR_ALARMHOST_SWITCH_POWER_ALARM, //开关电源报警 + MINOR_ALARMHOST_GAS_DETECT_SYS_ALARM, //气体检测系统报警 + MINOR_ALARMHOST_TRANSFORMER_TEMPRATURE_ALARM, //变电器温显表报警 + MINOR_ALARMHOST_TEMP_HUMI_ALARM, //温湿度传感器报警 + MINOR_ALARMHOST_UPS_ALARM_RESTORE, //UPS报警恢复 + MINOR_ALARMHOST_ELECTRICITY_METER_ALARM_RESTORE, //电量表报警恢复 + MINOR_ALARMHOST_SWITCH_POWER_ALARM_RESTORE, //开关电源报警恢复 + MINOR_ALARMHOST_GAS_DETECT_SYS_ALARM_RESTORE, //气体检测系统报警恢复 + MINOR_ALARMHOST_TRANSFORMER_TEMPRATURE_ALARM_RESTORE, //变电器温显表报警恢复 + MINOR_ALARMHOST_TEMP_HUMI_ALARM_RESTORE, //温湿度传感器报警恢复 + MINOR_ALARMHOST_WATER_LEVEL_SENSOR_ALARM, //水位传感器报警 + MINOR_ALARMHOST_WATER_LEVEL_SENSOR_ALARM_RESTORE, //水位传感器报警恢复 + MINOR_ALARMHOST_DUST_NOISE_ALARM, //扬尘噪声传感器报警 + MINOR_ALARMHOST_DUST_NOISE_ALARM_RESTORE, //扬尘噪声传感器报警恢复 + MINOR_ALARMHOST_ENVIRONMENTAL_LOGGER_ALARM, //环境采集仪报警 + MINOR_ALARMHOST_ENVIRONMENTAL_LOGGER_ALARM_RESTORE, //环境采集仪报警恢复 - MINOR_ALARMHOST_TRIGGER_TAMPER, //̽ - MINOR_ALARMHOST_TRIGGER_TAMPER_RESTORE, //ָ̽ - MINOR_ALARMHOST_EMERGENCY_CALL_HELP_ALARM, // - MINOR_ALARMHOST_EMERGENCY_CALL_HELP_ALARM_RESTORE, //ָ - MINOR_ALARMHOST_CONSULTING_ALARM, //ҵѯ - MINOR_ALARMHOST_CONSULTING_ALARM_RESTORE, //ҵѯָ - MINOR_ZONE_MODULE_REMOVE, // ģ - MINOR_ZONE_MODULE_RESET, // ģλ + MINOR_ALARMHOST_TRIGGER_TAMPER, //探测器防拆 + MINOR_ALARMHOST_TRIGGER_TAMPER_RESTORE, //探测器防拆恢复 + MINOR_ALARMHOST_EMERGENCY_CALL_HELP_ALARM, //紧急呼叫求助报警 + MINOR_ALARMHOST_EMERGENCY_CALL_HELP_ALARM_RESTORE, //紧急呼叫求助报警恢复 + MINOR_ALARMHOST_CONSULTING_ALARM, //业务咨询报警 + MINOR_ALARMHOST_CONSULTING_ALARM_RESTORE, //业务咨询报警恢复 + MINOR_ZONE_MODULE_REMOVE, // 防区模块防拆 + MINOR_ZONE_MODULE_RESET, // 防区模块防拆复位 - MINOR_ALARM_WIND_SPEED_ALARM, //ٴ澯 - MINOR_ALARM_WIND_SPEED_ALARM_RESTORE, //ٴ澯ָ - MINOR_ALARM_GENERATE_OUTPUT_ALARM, //ͨģ澯 - MINOR_ALARM_GENERATE_OUTPUT_RESTORE, //ͨģ澯ָ - MINOR_ALARM_SOAK_ALARM, //ˮ澯 - MINOR_ALARM_SOAK_ALARM_RESTORE, //ˮ澯ָ - MINOR_ALARM_SOLAR_POWER_ALARM, //̫ܴ澯 - MINOR_ALARM_SOLAR_POWER_ALARM_RESTORE, //̫ܴ澯ָ - MINOR_ALARM_SF6_ALARM, //SF6澯 - MINOR_ALARM_SF6_ALARM_RESTORE, //SF6澯ָ - MINOR_ALARM_WEIGHT_ALARM, //Ǹ澯 - MINOR_ALARM_WEIGHT_ALARM_RESTORE, //Ǹ澯ָ - MINOR_ALARM_WEATHER_ALARM, //ɼϵͳ澯 - MINOR_ALARM_WEATHER_ALARM_RESTORE, //ɼϵͳ澯ָ - MINOR_ALARM_FUEL_GAS_ALARM, //ȼʾϵͳ澯 - MINOR_ALARM_FUEL_GAS_ALARM_RESTORE, //ȼʾϵͳ澯ָ - MINOR_ALARM_FIRE_ALARM, //ֱϵͳ澯 - MINOR_ALARM_FIRE_ALARM_RESTORE, //ֱϵͳ澯ָ + MINOR_ALARM_WIND_SPEED_ALARM, //风速传感器告警 + MINOR_ALARM_WIND_SPEED_ALARM_RESTORE, //风速传感器告警恢复 + MINOR_ALARM_GENERATE_OUTPUT_ALARM, //通用输出模块告警 + MINOR_ALARM_GENERATE_OUTPUT_RESTORE, //通用输出模块告警恢复 + MINOR_ALARM_SOAK_ALARM, //浸水传感器告警 + MINOR_ALARM_SOAK_ALARM_RESTORE, //浸水传感器告警恢复 + MINOR_ALARM_SOLAR_POWER_ALARM, //太阳能传感器告警 + MINOR_ALARM_SOLAR_POWER_ALARM_RESTORE, //太阳能传感器告警恢复 + MINOR_ALARM_SF6_ALARM, //SF6报警主机告警 + MINOR_ALARM_SF6_ALARM_RESTORE, //SF6报警主机告警恢复 + MINOR_ALARM_WEIGHT_ALARM, //称重仪告警 + MINOR_ALARM_WEIGHT_ALARM_RESTORE, //称重仪告警恢复 + MINOR_ALARM_WEATHER_ALARM, //气象采集系统告警 + MINOR_ALARM_WEATHER_ALARM_RESTORE, //气象采集系统告警恢复 + MINOR_ALARM_FUEL_GAS_ALARM, //燃气显示系统告警 + MINOR_ALARM_FUEL_GAS_ALARM_RESTORE, //燃气显示系统告警恢复 + MINOR_ALARM_FIRE_ALARM, //火灾报警系统告警 + MINOR_ALARM_FIRE_ALARM_RESTORE, //火灾报警系统告警恢复 - MINOR_WIRELESS_OUTPUT_MODULE_REMOVE, // ģ - MINOR_WIRELESS_OUTPUT_MODULE_RESET, // ģλ - MINOR_WIRELESS_REPEATER_MODULE_REMOVE, // м - MINOR_WIRELESS_REPEATER_MODULE_RESET, // мλ - MINOR_WIRELESS_SIREN_MODULE_REMOVE, // ߾ŷ - MINOR_WIRELESS_SIREN_MODULE_RESET, // ߾ŷλ - MINOR_SOUND_INTENSITY_RISE, // ǿ - MINOR_SOUND_INTENSITY_RISE_RESET, // ǿָ - MINOR_SOUND_INTENSITY_DROP, // ǿ - MINOR_SOUND_INTENSITY_DROP_RESET, // ǿָ - MINOR_AUDIO_INPUT_EXCEPTION, // Ƶ쳣 - MINOR_AUDIO_INPUT_EXCEPTION_RESET, // Ƶ쳣ָ - MINOR_FACE_DETECTION_ALARM, // ⱨ - MINOR_FACE_DETECTION_ALARM_RESTORE, // ⱨָ + MINOR_WIRELESS_OUTPUT_MODULE_REMOVE, // 无线输出模块防拆 + MINOR_WIRELESS_OUTPUT_MODULE_RESET, // 无线输出模块防拆复位 + MINOR_WIRELESS_REPEATER_MODULE_REMOVE, // 无线中继器防拆 + MINOR_WIRELESS_REPEATER_MODULE_RESET, // 无线中继器防拆复位 + MINOR_WIRELESS_SIREN_MODULE_REMOVE, // 无线警号防拆 + MINOR_WIRELESS_SIREN_MODULE_RESET, // 无线警号防拆复位 + MINOR_SOUND_INTENSITY_RISE, // 声强陡升报警 + MINOR_SOUND_INTENSITY_RISE_RESET, // 声强陡升报警恢复 + MINOR_SOUND_INTENSITY_DROP, // 声强陡降报警 + MINOR_SOUND_INTENSITY_DROP_RESET, // 声强陡降报警恢复 + MINOR_AUDIO_INPUT_EXCEPTION, // 音频输入异常报警 + MINOR_AUDIO_INPUT_EXCEPTION_RESET, // 音频输入异常报警恢复 + MINOR_FACE_DETECTION_ALARM, // 人脸侦测报警 + MINOR_FACE_DETECTION_ALARM_RESTORE, // 人脸侦测报警恢复 - // 쳣 - MINOR_POWER_ON = 0x01, // ϵ - MINOR_POWER_OFF, // - MINOR_WDT_RESET, // WDT λ - MINOR_LOW_BATTERY_VOLTAGE, // صѹ - MINOR_AC_LOSS, // ϵ - MINOR_AC_RESTORE, // ָ - MINOR_RTC_EXCEPTION, // RTCʵʱʱ쳣 - MINOR_NETWORK_CONNECT_FAILURE, // Ӷ - MINOR_NETWORK_CONNECT_RESTORE, // ӻָ - MINOR_TEL_LINE_CONNECT_FAILURE, // 绰Ӷ - MINOR_TEL_LINE_CONNECT_RESTORE, // 绰ӻָ - MINOR_EXPANDER_BUS_LOSS, // չģ - MINOR_EXPANDER_BUS_RESTORE, // չģ߻ָ - MINOR_KEYPAD_BUS_LOSS, // ģ - MINOR_KEYPAD_BUS_RESTORE, // ģ߻ָ - MINOR_SENSOR_FAILURE, // ģ - MINOR_SENSOR_RESTORE, // ģָ - MINOR_RS485_CONNECT_FAILURE, // RS485ͨӶ - MINOR_RS485_CONNECT_RESTORE, // RS485ͨӶϻָ - MINOR_BATTERT_VOLTAGE_RESTORE, // صѹָ - MINOR_WIRED_NETWORK_ABNORMAL, //쳣 - MINOR_WIRED_NETWORK_RESTORE, //ָ - MINOR_GPRS_ABNORMAL, //GPRSͨ쳣 - MINOR_GPRS_RESTORE, //GPRSָ - MINOR_3G_ABNORMAL, //3Gͨ쳣 - MINOR_3G_RESTORE, //3Gָ - MINOR_SIM_CARD_ABNORMAL, //SIM쳣 - MINOR_SIM_CARD_RESTORE, //SIMָ - MINOR_ALARMHOST_VI_LOST, // ƵźŶʧ - MINOR_ALARMHOST_ILLEGAL_ACCESS, // Ƿ - MINOR_ALARMHOST_HD_FULL, // Ӳ - MINOR_ALARMHOST_HD_ERROR, // Ӳ̴ - MINOR_ALARMHOST_DCD_LOST, // MODEM (ʹ) - MINOR_ALARMHOST_IP_CONFLICT, // IPַͻ - MINOR_ALARMHOST_NET_BROKEN, // Ͽ - MINOR_ALARMHOST_REC_ERROR, // ¼ - MINOR_ALARMHOST_VI_EXCEPTION, // Ƶ쳣(ֻģͨ) - MINOR_ALARMHOST_FORMAT_HDD_ERROR, //Զ̸ʽӲʧ - MINOR_ALARMHOST_USB_ERROR, //USBͨŹ - MINOR_ALARMHOST_USB_RESTORE, //USBͨŹϻָ - MINOR_ALARMHOST_PRINT_ERROR, //ӡ - MINOR_ALARMHOST_PRINT_RESTORE, //ӡϻָ - MINOR_SUBSYSTEM_COMMUNICATION_ERROR, //ӰͨѶ - MINOR_ALARMHOST_IPC_NO_LINK, /* IPCӶϿ */ - MINOR_ALARMHOST_IPC_IP_CONFLICT, /*ipc ip ַ ͻ*/ - MINOR_ALARMHOST_VI_MISMATCH, /*Ƶʽƥ*/ - MINOR_ALARMHOST_MCU_RESTART, //MCU - MINOR_ALARMHOST_GPRS_MODULE_FAULT, //GPRSģ - MINOR_ALARMHOST_TELEPHONE_MODULE_FAULT, //绰ģ - MINOR_ALARMHOST_WIFI_ABNORMAL, //WIFIͨ쳣 - MINOR_ALARMHOST_WIFI_RESTORE, //WIFIָ - MINOR_ALARMHOST_RF_ABNORMAL, //RFź쳣 - MINOR_ALARMHOST_RF_RESTORE, //RFźŻָ - MINOR_ALARMHOST_DETECTOR_ONLINE, //̽ - MINOR_ALARMHOST_DETECTOR_OFFLINE, //̽ - MINOR_ALARMHOST_DETECTOR_BATTERY_NORMAL, //̽ - MINOR_ALARMHOST_DETECTOR_BATTERY_LOW, //̽Ƿѹ - MINOR_ALARMHOST_DATA_TRAFFIC_OVERFLOW, // - MINOR_ZONE_MODULE_LOSS, // ģ - MINOR_ZONE_MODULE_RESTORE, // ģ߻ָ - MINOR_ALARMHOST_WIRELESS_OUTPUT_LOSS, //ģ - MINOR_ALARMHOST_WIRELESS_OUTPUT_RESTORE, //ģָ - MINOR_ALARMHOST_WIRELESS_REPEATER_LOSS, //м - MINOR_ALARMHOST_WIRELESS_REPEATER_RESTORE, //мָ - MINOR_TRIGGER_MODULE_LOSS, // ģ - MINOR_TRIGGER_MODULE_RESTORE, // ģ߻ָ - MINOR_WIRELESS_SIREN_LOSS, // ߾ - MINOR_WIRELESS_SIREN_RESTORE, // ߾Żָ - MINOR_ALARMHOST_WIRELESS_RS485_LOSS, //RS485ģ - MINOR_ALARMHOST_WIRELESS_RS485_RESTORE, //RS485ģָ + // 异常 + MINOR_POWER_ON = 0x01, // 上电 + MINOR_POWER_OFF, // 掉电 + MINOR_WDT_RESET, // WDT 复位 + MINOR_LOW_BATTERY_VOLTAGE, // 蓄电池电压低 + MINOR_AC_LOSS, // 交流电断电 + MINOR_AC_RESTORE, // 交流电恢复 + MINOR_RTC_EXCEPTION, // RTC实时时钟异常 + MINOR_NETWORK_CONNECT_FAILURE, // 网络连接断 + MINOR_NETWORK_CONNECT_RESTORE, // 网络连接恢复 + MINOR_TEL_LINE_CONNECT_FAILURE, // 电话线连接断 + MINOR_TEL_LINE_CONNECT_RESTORE, // 电话线连接恢复 + MINOR_EXPANDER_BUS_LOSS, // 扩展总线模块掉线 + MINOR_EXPANDER_BUS_RESTORE, // 扩展总线模块掉线恢复 + MINOR_KEYPAD_BUS_LOSS, // 键盘总线模块掉线 + MINOR_KEYPAD_BUS_RESTORE, // 键盘总线模块掉线恢复 + MINOR_SENSOR_FAILURE, // 模拟量传感器故障 + MINOR_SENSOR_RESTORE, // 模拟量传感器恢复 + MINOR_RS485_CONNECT_FAILURE, // RS485通道连接断 + MINOR_RS485_CONNECT_RESTORE, // RS485通道连接断恢复 + MINOR_BATTERT_VOLTAGE_RESTORE, // 蓄电池电压恢复正常 + MINOR_WIRED_NETWORK_ABNORMAL, //有线网络异常 + MINOR_WIRED_NETWORK_RESTORE, //有线网络恢复正常 + MINOR_GPRS_ABNORMAL, //GPRS通信异常 + MINOR_GPRS_RESTORE, //GPRS恢复正常 + MINOR_3G_ABNORMAL, //3G通信异常 + MINOR_3G_RESTORE, //3G恢复正常 + MINOR_SIM_CARD_ABNORMAL, //SIM卡异常 + MINOR_SIM_CARD_RESTORE, //SIM卡恢复正常 + MINOR_ALARMHOST_VI_LOST, // 视频信号丢失 + MINOR_ALARMHOST_ILLEGAL_ACCESS, // 非法访问 + MINOR_ALARMHOST_HD_FULL, // 硬盘满 + MINOR_ALARMHOST_HD_ERROR, // 硬盘错误 + MINOR_ALARMHOST_DCD_LOST, // MODEM 掉线(保留不使用) + MINOR_ALARMHOST_IP_CONFLICT, // IP地址冲突 + MINOR_ALARMHOST_NET_BROKEN, // 网络断开 + MINOR_ALARMHOST_REC_ERROR, // 录像出错 + MINOR_ALARMHOST_VI_EXCEPTION, // 视频输入异常(只针对模拟通道) + MINOR_ALARMHOST_FORMAT_HDD_ERROR, //远程格式化硬盘失败 + MINOR_ALARMHOST_USB_ERROR, //USB通信故障 + MINOR_ALARMHOST_USB_RESTORE, //USB通信故障恢复 + MINOR_ALARMHOST_PRINT_ERROR, //打印机故障 + MINOR_ALARMHOST_PRINT_RESTORE, //打印机故障恢复 + MINOR_SUBSYSTEM_COMMUNICATION_ERROR, //子板通讯错误 + MINOR_ALARMHOST_IPC_NO_LINK, /* IPC连接断开 */ + MINOR_ALARMHOST_IPC_IP_CONFLICT, /*ipc ip 地址 冲突*/ + MINOR_ALARMHOST_VI_MISMATCH, /*视频制式不匹配*/ + MINOR_ALARMHOST_MCU_RESTART, //MCU重启 + MINOR_ALARMHOST_GPRS_MODULE_FAULT, //GPRS模块故障 + MINOR_ALARMHOST_TELEPHONE_MODULE_FAULT, //电话模块故障 + MINOR_ALARMHOST_WIFI_ABNORMAL, //WIFI通信异常 + MINOR_ALARMHOST_WIFI_RESTORE, //WIFI恢复正常 + MINOR_ALARMHOST_RF_ABNORMAL, //RF信号异常 + MINOR_ALARMHOST_RF_RESTORE, //RF信号恢复正常 + MINOR_ALARMHOST_DETECTOR_ONLINE, //探测器在线 + MINOR_ALARMHOST_DETECTOR_OFFLINE, //探测器离线 + MINOR_ALARMHOST_DETECTOR_BATTERY_NORMAL, //探测器电量正常 + MINOR_ALARMHOST_DETECTOR_BATTERY_LOW, //探测器电量欠压 + MINOR_ALARMHOST_DATA_TRAFFIC_OVERFLOW, //流量超额 + MINOR_ZONE_MODULE_LOSS, // 防区模块掉线 + MINOR_ZONE_MODULE_RESTORE, // 防区模块掉线恢复 + MINOR_ALARMHOST_WIRELESS_OUTPUT_LOSS, //无线输出模块离线 + MINOR_ALARMHOST_WIRELESS_OUTPUT_RESTORE, //无线输出模块恢复在线 + MINOR_ALARMHOST_WIRELESS_REPEATER_LOSS, //无线中继器离线 + MINOR_ALARMHOST_WIRELESS_REPEATER_RESTORE, //无线中继器恢复在线 + MINOR_TRIGGER_MODULE_LOSS, // 触发器模块掉线 + MINOR_TRIGGER_MODULE_RESTORE, // 触发器模块掉线恢复 + MINOR_WIRELESS_SIREN_LOSS, // 无线警号离线 + MINOR_WIRELESS_SIREN_RESTORE, // 无线警号恢复在线 + MINOR_ALARMHOST_WIRELESS_RS485_LOSS, //无线RS485接收器模块离线 + MINOR_ALARMHOST_WIRELESS_RS485_RESTORE, //无线RS485接收器模块恢复在线 - // - MINOR_GUARD = 0x01, // ͨ - MINOR_UNGUARD, // ͨ - MINOR_BYPASS, // · - MINOR_DURESS_ACCESS, // Ю - MINOR_ALARMHOST_LOCAL_REBOOT, // - MINOR_ALARMHOST_REMOTE_REBOOT, // Զ - MINOR_ALARMHOST_LOCAL_UPGRADE, // - MINOR_ALARMHOST_REMOTE_UPGRADE, // Զ - MINOR_RECOVERY_DEFAULT_PARAM, // ָĬϲ - MINOR_ALARM_OUTPUT, // Ʊ - MINOR_ACCESS_OPEN, // Ž - MINOR_ACCESS_CLOSE, // Ž - MINOR_SIREN_OPEN, // ƾſ - MINOR_SIREN_CLOSE, // ƾŹ - MINOR_MOD_ZONE_CONFIG, // ޸ķ - MINOR_MOD_ALARMOUT_CONIFG, // Ʊ - MINOR_MOD_ANALOG_CONFIG, // ޸ģ - MINOR_RS485_CONFIG, // ޸485ͨ - MINOR_PHONE_CONFIG, // ޸IJ - MINOR_ADD_ADMIN, // ӹԱ - MINOR_MOD_ADMIN_PARAM, // ޸ĹԱ - MINOR_DEL_ADMIN, // ɾԱ - MINOR_ADD_NETUSER, // Ӻ˲Ա - MINOR_MOD_NETUSER_PARAM, // ޸ĺ˲Ա - MINOR_DEL_NETUSER, // ɾ˲Ա - MINOR_ADD_OPERATORUSER, // ǰ˲Ա - MINOR_MOD_OPERATORUSER_PW, // ޸ǰ˲Ա - MINOR_DEL_OPERATORUSER, // ɾǰ˲Ա - MINOR_ADD_KEYPADUSER, // Ӽ/û - MINOR_DEL_KEYPADUSER, // ɾ/û - MINOR_REMOTEUSER_LOGIN, // Զû½ - MINOR_REMOTEUSER_LOGOUT, // Զûע - MINOR_REMOTE_GUARD, // Զ̲ - MINOR_REMOTE_UNGUARD, // Զ̳ - MINOR_MOD_HOST_CONFIG, // ޸ - MINOR_RESTORE_BYPASS, // ·ָ - MINOR_ALARMOUT_OPEN, // - MINOR_ALARMOUT_CLOSE, // ر - MINOR_MOD_SUBSYSTEM_PARAM, // ޸ϵͳ - MINOR_GROUP_BYPASS, // · - MINOR_RESTORE_GROUP_BYPASS, // ·ָ - MINOR_MOD_GRPS_PARAM, // ޸GPRS - MINOR_MOD_NET_REPORT_PARAM, // ޸ϱ - MINOR_MOD_REPORT_MOD, // ޸ϴʽ - MINOR_MOD_GATEWAY_PARAM, // ޸Ž - MINOR_ALARMHOST_REMOTE_START_REC, // Զ̿ʼ¼ - MINOR_ALARMHOST_REMOTE_STOP_REC, // Զֹͣ¼ - MINOR_ALARMHOST_START_TRANS_CHAN, // ʼ͸ - MINOR_ALARMHOST_STOP_TRANS_CHAN, // ֹͣ͸ - MINOR_ALARMHOST_START_VT, // ʼԽ - MINOR_ALARMHOST_STOP_VTM, // ֹͣԽ - MINOR_ALARMHOST_REMOTE_PLAYBYFILE, // Զ̰ļط - MINOR_ALARMHOST_REMOTE_PLAYBYTIME, // Զ̰ʱط - MINOR_ALARMHOST_REMOTE_PTZCTRL, // Զ̨ - MINOR_ALARMHOST_REMOTE_FORMAT_HDD, // Զ̸ʽӲ - MINOR_ALARMHOST_REMOTE_LOCKFILE, // Զļ - MINOR_ALARMHOST_REMOTE_UNLOCKFILE, // Զ̽ļ - MINOR_ALARMHOST_REMOTE_CFGFILE_OUTPUT, // Զ̵ļ - MINOR_ALARMHOST_REMOTE_CFGFILE_INTPUT, // Զ̵ļ - MINOR_ALARMHOST_REMOTE_RECFILE_OUTPUT, // Զ̵¼ļ + // 操作 + MINOR_GUARD = 0x01, // 普通布防 + MINOR_UNGUARD, // 普通撤防 + MINOR_BYPASS, // 旁路 + MINOR_DURESS_ACCESS, // 挟持 + MINOR_ALARMHOST_LOCAL_REBOOT, // 本地重启 + MINOR_ALARMHOST_REMOTE_REBOOT, // 远程重启 + MINOR_ALARMHOST_LOCAL_UPGRADE, // 本地升级 + MINOR_ALARMHOST_REMOTE_UPGRADE, // 远程升级 + MINOR_RECOVERY_DEFAULT_PARAM, // 恢复默认参数 + MINOR_ALARM_OUTPUT, // 控制报警输出 + MINOR_ACCESS_OPEN, // 控制门禁开 + MINOR_ACCESS_CLOSE, // 控制门禁关 + MINOR_SIREN_OPEN, // 控制警号开 + MINOR_SIREN_CLOSE, // 控制警号关 + MINOR_MOD_ZONE_CONFIG, // 修改防区设置 + MINOR_MOD_ALARMOUT_CONIFG, // 控制报警输出配置 + MINOR_MOD_ANALOG_CONFIG, // 修改模拟量配置 + MINOR_RS485_CONFIG, // 修改485通道配置 + MINOR_PHONE_CONFIG, // 修改拨号配置 + MINOR_ADD_ADMIN, // 增加管理员 + MINOR_MOD_ADMIN_PARAM, // 修改管理员参数 + MINOR_DEL_ADMIN, // 删除管理员 + MINOR_ADD_NETUSER, // 增加后端操作员 + MINOR_MOD_NETUSER_PARAM, // 修改后端操作员参数 + MINOR_DEL_NETUSER, // 删除后端操作员 + MINOR_ADD_OPERATORUSER, // 增加前端操作员 + MINOR_MOD_OPERATORUSER_PW, // 修改前端操作员密码 + MINOR_DEL_OPERATORUSER, // 删除前端操作员 + MINOR_ADD_KEYPADUSER, // 增加键盘/读卡器用户 + MINOR_DEL_KEYPADUSER, // 删除键盘/读卡器用户 + MINOR_REMOTEUSER_LOGIN, // 远程用户登陆 + MINOR_REMOTEUSER_LOGOUT, // 远程用户注销 + MINOR_REMOTE_GUARD, // 远程布防 + MINOR_REMOTE_UNGUARD, // 远程撤防 + MINOR_MOD_HOST_CONFIG, // 修改主机配置 + MINOR_RESTORE_BYPASS, // 旁路恢复 + MINOR_ALARMOUT_OPEN, // 报警输出开启 + MINOR_ALARMOUT_CLOSE, // 报警输出关闭 + MINOR_MOD_SUBSYSTEM_PARAM, // 修改子系统参数配置 + MINOR_GROUP_BYPASS, // 组旁路 + MINOR_RESTORE_GROUP_BYPASS, // 组旁路恢复 + MINOR_MOD_GRPS_PARAM, // 修改GPRS参数 + MINOR_MOD_NET_REPORT_PARAM, // 修改网络上报参数配置 + MINOR_MOD_REPORT_MOD, // 修改上传方式配置 + MINOR_MOD_GATEWAY_PARAM, // 修改门禁参数配置 + MINOR_ALARMHOST_REMOTE_START_REC, // 远程开始录像 + MINOR_ALARMHOST_REMOTE_STOP_REC, // 远程停止录像 + MINOR_ALARMHOST_START_TRANS_CHAN, // 开始透明传输 + MINOR_ALARMHOST_STOP_TRANS_CHAN, // 停止透明传输 + MINOR_ALARMHOST_START_VT, // 开始语音对讲 + MINOR_ALARMHOST_STOP_VTM, // 停止语音对讲 + MINOR_ALARMHOST_REMOTE_PLAYBYFILE, // 远程按文件回放 + MINOR_ALARMHOST_REMOTE_PLAYBYTIME, // 远程按时间回放 + MINOR_ALARMHOST_REMOTE_PTZCTRL, // 远程云台控制 + MINOR_ALARMHOST_REMOTE_FORMAT_HDD, // 远程格式化硬盘 + MINOR_ALARMHOST_REMOTE_LOCKFILE, // 远程锁定文件 + MINOR_ALARMHOST_REMOTE_UNLOCKFILE, // 远程解锁文件 + MINOR_ALARMHOST_REMOTE_CFGFILE_OUTPUT, // 远程导出配置文件 + MINOR_ALARMHOST_REMOTE_CFGFILE_INTPUT, // 远程导入配置文件 + MINOR_ALARMHOST_REMOTE_RECFILE_OUTPUT, // 远程导出录象文件 - MINOR_ALARMHOST_STAY_ARM, //ز - MINOR_ALARMHOST_QUICK_ARM, //ʱ - MINOR_ALARMHOST_AUTOMATIC_ARM, //Զ - MINOR_ALARMHOST_AUTOMATIC_DISARM, //Զ - MINOR_ALARMHOST_KEYSWITCH_ARM, //Կ׷ - MINOR_ALARMHOST_KEYSWITCH_DISARM, //Կ׷ - MINOR_ALARMHOST_CLEAR_ALARM, // - MINOR_ALARMHOST_MOD_FAULT_CFG, //޸ϵͳ - MINOR_ALARMHOST_MOD_EVENT_TRIGGER_ALARMOUT_CFG, //޸¼ - MINOR_ALARMHOST_SEARCH_EXTERNAL_MODULE, //ģ - MINOR_ALARMHOST_REGISTER_EXTERNAL_MODULE, //עģ - MINOR_ALARMHOST_CLOSE_KEYBOARD_ALARM, //رռ̱ʾ - MINOR_ALARMHOST_MOD_3G_PARAM, //޸3G - MINOR_ALARMHOST_MOD_PRINT_PARAM, //޸Ĵӡ - MINOR_SD_CARD_FORMAT, //SDʽ - MINOR_SUBSYSTEM_UPGRADE, //Ӱ̼ + MINOR_ALARMHOST_STAY_ARM, //留守布防 + MINOR_ALARMHOST_QUICK_ARM, //即时布防 + MINOR_ALARMHOST_AUTOMATIC_ARM, //自动布防 + MINOR_ALARMHOST_AUTOMATIC_DISARM, //自动撤防 + MINOR_ALARMHOST_KEYSWITCH_ARM, //钥匙防区布防 + MINOR_ALARMHOST_KEYSWITCH_DISARM, //钥匙防区撤防 + MINOR_ALARMHOST_CLEAR_ALARM, //消警 + MINOR_ALARMHOST_MOD_FAULT_CFG, //修改系统故障配置 + MINOR_ALARMHOST_MOD_EVENT_TRIGGER_ALARMOUT_CFG, //修改事件触发报警输出配置 + MINOR_ALARMHOST_SEARCH_EXTERNAL_MODULE, //搜索外接模块 + MINOR_ALARMHOST_REGISTER_EXTERNAL_MODULE, //重新注册外接模块 + MINOR_ALARMHOST_CLOSE_KEYBOARD_ALARM, //关闭键盘报警提示音 + MINOR_ALARMHOST_MOD_3G_PARAM, //修改3G参数 + MINOR_ALARMHOST_MOD_PRINT_PARAM, //修改打印机参数 + MINOR_SD_CARD_FORMAT, //SD卡格式化 + MINOR_SUBSYSTEM_UPGRADE, //子板固件升级 - MINOR_ALARMHOST_PLAN_ARM_CFG, //ƻ - MINOR_ALARMHOST_PHONE_ARM, //ֻ - MINOR_ALARMHOST_PHONE_STAY_ARM, //ֻز - MINOR_ALARMHOST_PHONE_QUICK_ARM,//ֻʱ - MINOR_ALARMHOST_PHONE_DISARM, //ֻ - MINOR_ALARMHOST_PHONE_CLEAR_ALARM, //ֻ - MINOR_ALARMHOST_ALLOWLIST_CFG, // - MINOR_ALARMHOST_TIME_TRIGGER_CFG, //ʱش - MINOR_ALARMHOST_CAPTRUE_CFG, //ץͼ - MINOR_ALARMHOST_TAMPER_CFG, // + MINOR_ALARMHOST_PLAN_ARM_CFG, //计划布撤防参数配置 + MINOR_ALARMHOST_PHONE_ARM, //手机布防 + MINOR_ALARMHOST_PHONE_STAY_ARM, //手机留守布防 + MINOR_ALARMHOST_PHONE_QUICK_ARM,//手机即时布防 + MINOR_ALARMHOST_PHONE_DISARM, //手机撤防 + MINOR_ALARMHOST_PHONE_CLEAR_ALARM, //手机消警 + MINOR_ALARMHOST_ALLOWLIST_CFG, //允许名单配置 + MINOR_ALARMHOST_TIME_TRIGGER_CFG, //定时开关触发器配置 + MINOR_ALARMHOST_CAPTRUE_CFG, //抓图参数配置 + MINOR_ALARMHOST_TAMPER_CFG, //防区防拆参数配置 - MINOR_ALARMHOST_REMOTE_KEYPAD_UPGRADE, //Զ - MINOR_ALARMHOST_ONETOUCH_AWAY_ARMING, //һ - MINOR_ALARMHOST_ONETOUCH_STAY_ARMING, //һز - MINOR_ALARMHOST_SINGLE_PARTITION_ARMING_OR_DISARMING, // - MINOR_ALARMHOST_CARD_CONFIGURATION, // - MINOR_ALARMHOST_CARD_ARMING_OR_DISARMING, //ˢ - MINOR_ALARMHOST_EXPENDING_NETCENTER_CONFIGURATION, //չ - MINOR_ALARMHOST_NETCARD_CONFIGURATION, // - MINOR_ALARMHOST_DDNS_CONFIGURATION, //DDNS - MINOR_ALARMHOST_RS485BUS_CONFIGURATION, // 485߲ - MINOR_ALARMHOST_RS485BUS_RE_REGISTRATION, //485ע + MINOR_ALARMHOST_REMOTE_KEYPAD_UPGRADE, //远程升级键盘 + MINOR_ALARMHOST_ONETOUCH_AWAY_ARMING, //一键外出布防 + MINOR_ALARMHOST_ONETOUCH_STAY_ARMING, //一键留守布防 + MINOR_ALARMHOST_SINGLE_PARTITION_ARMING_OR_DISARMING, //单防区布撤防 + MINOR_ALARMHOST_CARD_CONFIGURATION, //卡参数配置 + MINOR_ALARMHOST_CARD_ARMING_OR_DISARMING, //刷卡布撤防 + MINOR_ALARMHOST_EXPENDING_NETCENTER_CONFIGURATION, //扩展网络中心配置 + MINOR_ALARMHOST_NETCARD_CONFIGURATION, //网卡配置 + MINOR_ALARMHOST_DDNS_CONFIGURATION, //DDNS配置 + MINOR_ALARMHOST_RS485BUS_CONFIGURATION, // 485总线参数配置 + MINOR_ALARMHOST_RS485BUS_RE_REGISTRATION, //485总线重新注册 - MINOR_ALARMHOST_REMOTE_OPEN_ELECTRIC_LOCK, //Զ̴򿪵 - MINOR_ALARMHOST_REMOTE_CLOSE_ELECTRIC_LOCK, //Զ̹رյ - MINOR_ALARMHOST_LOCAL_OPEN_ELECTRIC_LOCK, //ش򿪵 - MINOR_ALARMHOST_LOCAL_CLOSE_ELECTRIC_LOCK, //عرյ - MINOR_ALARMHOST_OPEN_ALARM_LAMP, //򿪾(Զ) - MINOR_ALARMHOST_CLOSE_ALARM_LAMP, //رվ(Զ) + MINOR_ALARMHOST_REMOTE_OPEN_ELECTRIC_LOCK, //远程打开电锁 + MINOR_ALARMHOST_REMOTE_CLOSE_ELECTRIC_LOCK, //远程关闭电锁 + MINOR_ALARMHOST_LOCAL_OPEN_ELECTRIC_LOCK, //本地打开电锁 + MINOR_ALARMHOST_LOCAL_CLOSE_ELECTRIC_LOCK, //本地关闭电锁 + MINOR_ALARMHOST_OPEN_ALARM_LAMP, //打开警灯(远程) + MINOR_ALARMHOST_CLOSE_ALARM_LAMP, //关闭警灯(远程) - MINOR_ALARMHOST_TEMPORARY_PASSWORD, //ʱ¼ - MINOR_ALARMHOST_ONEKEY_AWAY_ARM, //һ - MINOR_ALARMHOST_ONEKEY_STAY_ARM, //һز - MINOR_ALARMHOST_SINGLE_ZONE_ARM, // - MINOR_ALARMHOST_SINGLE_ZONE_DISARM, // - MINOR_ALARMHOST_HIDDNS_CONFIG, // HIDDNS - MINOR_ALARMHOST_REMOTE_KEYBOARD_UPDATA, //Զ̼־ - MINOR_ALARMHOST_ZONE_ADD_DETECTOR, //̽ - MINOR_ALARMHOST_ZONE_DELETE_DETECTOR, //ɾ̽ - MINOR_ALARMHOST_QUERY_DETECTOR_SIGNAL, //ѯ̽źǿ - MINOR_ALARMHOST_QUERY_DETECTOR_BATTERY, //ѯ̽ - MINOR_ALARMHOST_SET_DETECTOR_GUARD, //̽ - MINOR_ALARMHOST_SET_DETECTOR_UNGUARD, //̽ - MINOR_ALARMHOST_SET_WIFI_PARAMETER, //WIFIò - MINOR_ALARMHOST_OPEN_VOICE, // - MINOR_ALARMHOST_CLOSE_VOICE, //ر - MINOR_ALARMHOST_ENABLE_FUNCTION_KEY, //ùܼ - MINOR_ALARMHOST_DISABLE_FUNCTION_KEY, //رչܼ - MINOR_ALARMHOST_READ_CARD, //Ѳˢ - MINOR_ALARMHOST_START_BROADCAST, //㲥 - MINOR_ALARMHOST_STOP_BROADCAST, //ر㲥 - MINOR_ALARMHOST_REMOTE_ZONE_MODULE_UPGRADE, //Զģ - MINOR_ALARMHOST_NETWORK_MODULE_EXTEND, //ģ - MINOR_ALARMHOST_ADD_CONTROLLER, //ңû - MINOR_ALARMHOST_DELETE_CONTORLLER, //ɾңû - MINOR_ALARMHOST_REMOTE_NETWORKMODULE_UPGRADE, //Զģ - MINOR_ALARMHOST_WIRELESS_OUTPUT_ADD, //עģ - MINOR_ALARMHOST_WIRELESS_OUTPUT_DEL, //ɾģ - MINOR_ALARMHOST_WIRELESS_REPEATER_ADD, //עм - MINOR_ALARMHOST_WIRELESS_REPEATER_DEL, //ɾм - MINOR_ALARMHOST_PHONELIST_CFG, //绰 - MINOR_ALARMHOST_RF_SIGNAL_CHECK, // RFźŲѯ - MINOR_ALARMHOST_USB_UPGRADE, // USB - MINOR_ALARMHOST_DOOR_TIME_REMINDER_CFG,//ŴŶʱѲ - MINOR_ALARMHOST_WIRELESS_SIREN_ADD, //ע߾ - MINOR_ALARMHOST_WIRELESS_SIREN_DEL, //ɾ߾ - MINOR_ALARMHOST_OUT_SCALE_OPEN, //翪 - MINOR_ALARMHOST_OUT_SCALE_CLOSE, //ر + MINOR_ALARMHOST_TEMPORARY_PASSWORD, //临时密码操作记录 + MINOR_ALARMHOST_ONEKEY_AWAY_ARM, //一键外出布防 + MINOR_ALARMHOST_ONEKEY_STAY_ARM, //一键留守布防 + MINOR_ALARMHOST_SINGLE_ZONE_ARM, //单防区布防 + MINOR_ALARMHOST_SINGLE_ZONE_DISARM, //单防区撤防 + MINOR_ALARMHOST_HIDDNS_CONFIG, // HIDDNS配置 + MINOR_ALARMHOST_REMOTE_KEYBOARD_UPDATA, //远程键盘升级日志 + MINOR_ALARMHOST_ZONE_ADD_DETECTOR, //防区添加探测器 + MINOR_ALARMHOST_ZONE_DELETE_DETECTOR, //防区删除探测器 + MINOR_ALARMHOST_QUERY_DETECTOR_SIGNAL, //主机查询探测器信号强度 + MINOR_ALARMHOST_QUERY_DETECTOR_BATTERY, //主机查询探测器电量 + MINOR_ALARMHOST_SET_DETECTOR_GUARD, //探测器布防 + MINOR_ALARMHOST_SET_DETECTOR_UNGUARD, //探测器撤防 + MINOR_ALARMHOST_SET_WIFI_PARAMETER, //设置WIFI配置参数 + MINOR_ALARMHOST_OPEN_VOICE, //打开语音 + MINOR_ALARMHOST_CLOSE_VOICE, //关闭语音 + MINOR_ALARMHOST_ENABLE_FUNCTION_KEY, //启用功能键 + MINOR_ALARMHOST_DISABLE_FUNCTION_KEY, //关闭功能键 + MINOR_ALARMHOST_READ_CARD, //巡更刷卡 + MINOR_ALARMHOST_START_BROADCAST, //打开语音广播 + MINOR_ALARMHOST_STOP_BROADCAST, //关闭语音广播 + MINOR_ALARMHOST_REMOTE_ZONE_MODULE_UPGRADE, //远程升级防区模块 + MINOR_ALARMHOST_NETWORK_MODULE_EXTEND, //网络模块参数配置 + MINOR_ALARMHOST_ADD_CONTROLLER, //添加遥控器用户 + MINOR_ALARMHOST_DELETE_CONTORLLER, //删除遥控器用户 + MINOR_ALARMHOST_REMOTE_NETWORKMODULE_UPGRADE, //远程升级网络模块 + MINOR_ALARMHOST_WIRELESS_OUTPUT_ADD, //注册无线输出模块 + MINOR_ALARMHOST_WIRELESS_OUTPUT_DEL, //删除无线输出模块 + MINOR_ALARMHOST_WIRELESS_REPEATER_ADD, //注册无线中继器 + MINOR_ALARMHOST_WIRELESS_REPEATER_DEL, //删除无线中继器 + MINOR_ALARMHOST_PHONELIST_CFG, //电话名单参数配置 + MINOR_ALARMHOST_RF_SIGNAL_CHECK, // RF信号查询 + MINOR_ALARMHOST_USB_UPGRADE, // USB升级 + MINOR_ALARMHOST_DOOR_TIME_REMINDER_CFG,//门磁定时提醒参数配置 + MINOR_ALARMHOST_WIRELESS_SIREN_ADD, //注册无线警号 + MINOR_ALARMHOST_WIRELESS_SIREN_DEL, //删除无线警号 + MINOR_ALARMHOST_OUT_SCALE_OPEN, //辅电开启 + MINOR_ALARMHOST_OUT_SCALE_CLOSE, //辅电关闭 - MINOR_ALARMHOST_TIME_ZONE_CFG,//ʱ޸ - MINOR_ALARMHOST_NTP_START_AND_PARAMETERS_CFG,//NTP޸ - MINOR_ALARMHOST_DST_START_AND_PARAMETERS_CFG,//DST޸ - MINOR_ALARMHOST_DEVINFO_CFG,//豸Ϣ - MINOR_ALARMHOST_VIDEO_OVERLAP_CFG,//¼񸲸 - MINOR_ALARMHOST_SSH_CFG,//SSH - MINOR_ALARMHOST_PASSWORD_MANAGE_CFG,// - MINOR_ALARMHOST_RESTORE_DEFAULT_PARAMETERS,//ָĬϲ - MINOR_ALARMHOST_RESTORECOMPLETELY_DEFAULT_PARAMETERS,//ȫָĬϲ - MINOR_ALARMHOST_AUDIO_AUTO_DETECT_CFG,//Զ - MINOR_ALARMHOST_AUDIO_MANUAL_DETECT_CFG,//ֶ - MINOR_ALARMHOST_NET_PARAMETERS_CFG,// - MINOR_ALARMHOST_MTU_CFG,//MTU - MINOR_ALARMHOST_PORT_CFG,//˿ - MINOR_ALARMHOST_DEFAULT_ROUTER_CFG,//Ĭ· - MINOR_ALARMHOST_DNS_PARAMETERS_CFG,//DNS - MINOR_ALARMHOST_UNPNP_PARAMETERS_CFG,//UNPNP - MINOR_ALARMHOST_SIP_PARAMETERS_CFG,//SIP - MINOR_ALARMHOST_FLOW_LIMIT_CFG,//޶ - MINOR_ALARMHOST_APN_PARAMETERS_CFG,//APN - MINOR_ALARMHOST_MESSAGE_TELEPHONENO_CFG,//ŵ绰 - MINOR_ALARMHOST_EZVIZ_PARAMATERS_CFG,//өʯ - MINOR_ALARMHOST_ISUP_PARAMATERS_CFG,//ISUP - MINOR_ALARMHOST_SIP_SWITCH_CFG,//SIP׼Э˽Эл - MINOR_ALARMHOST_INFO_UPLOAD_TO_PLATFORM_CFG,//ϴƽ̨Ϣ - MINOR_ALARMHOST_ONVIF_CONTROL,//ONVIF(ر) - MINOR_ALARMHOST_ONVIF_USER_ADD,//onvifû - MINOR_ALARMHOST_ONVIF_USER_MOD,//onvifû޸ - MINOR_ALARMHOST_ONVIF_USER_DELETE,//onvifûɾ - MINOR_ALARMHOST_TIME_OF_BELLS_CFG,//ʱ - MINOR_ALARMHOST_CALL_WAITTIME_CFG,//еȴʱ - MINOR_ALARMHOST_PROMPT_PARAMATERS_CFG,//ʾ - MINOR_ALARMHOST_MUTEPLAN_PARAMATERS_CFG,//ƻ - MINOR_ALARMHOST_SD_PARTITION_CFG,//SD - MINOR_ALARMHOST_AUDIO_PARAMETERS_CFG,//Ƶ - MINOR_ALARMHOST_VOICETALK_AUDIO_ENCODING_CFG,//ԽƵ - MINOR_ALARMHOST_RECORD_PLAN_PARAMETERS_CFG,//¼ƻ - MINOR_ALARMHOST_RECORD_ADVANCE_PARAMETERS_CFG,//¼߼ - MINOR_ALARMHOST_PICTURE_PLAN_PARAMETERS_CFG,//ץͼƻ - MINOR_ALARMHOST_PICTURE_ADVANCE_PARAMETERS_CFG,//ץͼ߼ - MINOR_ALARMHOST_AUDIO_EXCEPTION_PARAMETERS_CFG,//Ƶ쳣 - MINOR_ALARMHOST_PATROL_CARD_CFG,//Ѳ - MINOR_ALARMHOST_VOICE_VOLUME_CFG,// - MINOR_ALARMHOST_VOICE_MODE_CFG,//ģʽã룬㲥ģʽ - MINOR_ALARMHOST_AUDIO_OR_MATERIALS_UPLOAD,//Ƶزļϴ - MINOR_ALARMHOST_AUDIO_OR_MATERIALS_DELETE,//Ƶزļɾ - MINOR_ALARMHOST_ALARM_LAMP_FLASH_TIME_CFG,//˸ʱ - MINOR_ALARMHOST_ALARM_LAMP_FLASH_PLAN_CFG,//ƻ˸ - MINOR_ALARMHOST_FRONT_END_VIDEO_PARAMETERS_CFG,//ǰƵ - MINOR_ALARMHOST_WDR_CFG,//̬ - MINOR_ALARMHOST_BPFRAME_CFG,//PN֡ - MINOR_ALARMHOST_PASSWORD_RESET_CFG,// - MINOR_ALARMHOST_ACCOUNT_LOCK,//˻ - MINOR_ALARMHOST_ACCOUNT_UNLOCK,//˻ - MINOR_ALARMHOST_START_LIVEVIEW_REMOTELY,//Զ̿Ԥ - MINOR_ALARMHOST_STOP_LIVEVIEW_REMOTELT,//Զ̹رԤ - MINOR_ALARMHOST_TELEPHONE_CENTER_SETTINGS,//绰IJ - MINOR_ALARMHOST_NATIONAL_STANDARD_CFG,// - MINOR_ALARMHOST_SUPPLEMENTLIGHT_CFG,// - MINOR_ALARMHOST_FACESNAP_CFG,//Ŀץ - MINOR_ALARMHOST_PUBLISHMANAGE_CFG,// - MINOR_ALARMHOST_KEYDIAL_CFG,// - MINOR_ALARMHOST_VOICETALK_SILENT_CFG,//Խ - MINOR_ALARMHOST_START_VIDEO_PROTECT,//Ƶ - MINOR_ALARMHOST_START_AUDIO_PROTECT,//ü - MINOR_ALARMHOST_START_MANUAL_ANSWER,//ֶ - MINOR_ALARMHOST_START_LOG_SERVER,//ðȫ־ - MINOR_ALARMHOST_ADD_CARD,//ӿƬ - MINOR_ALARMHOST_DELETE_CARD,//ɾƬ - MINOR_ALARMHOST_MOTION_DETECTION_CFG,//ƶ - MINOR_ALARMHOST_VIDEO_BLOCK_CFG,//Ƶڵ - MINOR_ALARMHOST_FACE_DETECTION_CFG,// - MINOR_ALARMHOST_LOG_BACKUP,//־ + MINOR_ALARMHOST_TIME_ZONE_CFG,//时区修改 + MINOR_ALARMHOST_NTP_START_AND_PARAMETERS_CFG,//NTP启动及参数修改 + MINOR_ALARMHOST_DST_START_AND_PARAMETERS_CFG,//DST启动及参数修改 + MINOR_ALARMHOST_DEVINFO_CFG,//设备信息配置 + MINOR_ALARMHOST_VIDEO_OVERLAP_CFG,//录像覆盖配置 + MINOR_ALARMHOST_SSH_CFG,//SSH启动配置 + MINOR_ALARMHOST_PASSWORD_MANAGE_CFG,//密码管理配置 + MINOR_ALARMHOST_RESTORE_DEFAULT_PARAMETERS,//恢复默认参数 + MINOR_ALARMHOST_RESTORECOMPLETELY_DEFAULT_PARAMETERS,//完全恢复默认参数 + MINOR_ALARMHOST_AUDIO_AUTO_DETECT_CFG,//自动检测参数配置 + MINOR_ALARMHOST_AUDIO_MANUAL_DETECT_CFG,//手动检测 + MINOR_ALARMHOST_NET_PARAMETERS_CFG,//网络参数配置 + MINOR_ALARMHOST_MTU_CFG,//MTU配置 + MINOR_ALARMHOST_PORT_CFG,//端口配置 + MINOR_ALARMHOST_DEFAULT_ROUTER_CFG,//默认路由配置 + MINOR_ALARMHOST_DNS_PARAMETERS_CFG,//DNS参数配置 + MINOR_ALARMHOST_UNPNP_PARAMETERS_CFG,//UNPNP参数配置 + MINOR_ALARMHOST_SIP_PARAMETERS_CFG,//SIP参数配置 + MINOR_ALARMHOST_FLOW_LIMIT_CFG,//流量限额参数配置 + MINOR_ALARMHOST_APN_PARAMETERS_CFG,//APN参数配置 + MINOR_ALARMHOST_MESSAGE_TELEPHONENO_CFG,//短信电话号码配置 + MINOR_ALARMHOST_EZVIZ_PARAMATERS_CFG,//萤石参数配置 + MINOR_ALARMHOST_ISUP_PARAMATERS_CFG,//ISUP参数配置 + MINOR_ALARMHOST_SIP_SWITCH_CFG,//SIP标准协议私有协议切换 + MINOR_ALARMHOST_INFO_UPLOAD_TO_PLATFORM_CFG,//上传平台信息配置 + MINOR_ALARMHOST_ONVIF_CONTROL,//ONVIF控制(开启,关闭) + MINOR_ALARMHOST_ONVIF_USER_ADD,//onvif用户的增加 + MINOR_ALARMHOST_ONVIF_USER_MOD,//onvif用户的修改 + MINOR_ALARMHOST_ONVIF_USER_DELETE,//onvif用户的删除 + MINOR_ALARMHOST_TIME_OF_BELLS_CFG,//响铃时间 + MINOR_ALARMHOST_CALL_WAITTIME_CFG,//呼叫等待时间 + MINOR_ALARMHOST_PROMPT_PARAMATERS_CFG,//提示音参数配置 + MINOR_ALARMHOST_MUTEPLAN_PARAMATERS_CFG,//静音计划参数配置 + MINOR_ALARMHOST_SD_PARTITION_CFG,//SD卡分区参数配置 + MINOR_ALARMHOST_AUDIO_PARAMETERS_CFG,//音视频参数配置 + MINOR_ALARMHOST_VOICETALK_AUDIO_ENCODING_CFG,//对讲音频编码 + MINOR_ALARMHOST_RECORD_PLAN_PARAMETERS_CFG,//录像计划参数配置 + MINOR_ALARMHOST_RECORD_ADVANCE_PARAMETERS_CFG,//录像高级参数配置 + MINOR_ALARMHOST_PICTURE_PLAN_PARAMETERS_CFG,//抓图计划参数配置 + MINOR_ALARMHOST_PICTURE_ADVANCE_PARAMETERS_CFG,//抓图高级参数配置 + MINOR_ALARMHOST_AUDIO_EXCEPTION_PARAMETERS_CFG,//音频异常参数配置 + MINOR_ALARMHOST_PATROL_CARD_CFG,//巡更卡配置 + MINOR_ALARMHOST_VOICE_VOLUME_CFG,//声音配置 + MINOR_ALARMHOST_VOICE_MODE_CFG,//声音模式配置(输入,输出,广播模式) + MINOR_ALARMHOST_AUDIO_OR_MATERIALS_UPLOAD,//音频、素材文件上传 + MINOR_ALARMHOST_AUDIO_OR_MATERIALS_DELETE,//音频、素材文件删除 + MINOR_ALARMHOST_ALARM_LAMP_FLASH_TIME_CFG,//闪烁时间 + MINOR_ALARMHOST_ALARM_LAMP_FLASH_PLAN_CFG,//计划闪烁配置 + MINOR_ALARMHOST_FRONT_END_VIDEO_PARAMETERS_CFG,//前端视频参数配置 + MINOR_ALARMHOST_WDR_CFG,//宽动态配置 + MINOR_ALARMHOST_BPFRAME_CFG,//PN帧配置 + MINOR_ALARMHOST_PASSWORD_RESET_CFG,//密码重置配置 + MINOR_ALARMHOST_ACCOUNT_LOCK,//账户锁定 + MINOR_ALARMHOST_ACCOUNT_UNLOCK,//账户解锁 + MINOR_ALARMHOST_START_LIVEVIEW_REMOTELY,//远程开启预览 + MINOR_ALARMHOST_STOP_LIVEVIEW_REMOTELT,//远程关闭预览 + MINOR_ALARMHOST_TELEPHONE_CENTER_SETTINGS,//电话中心参数配置 + MINOR_ALARMHOST_NATIONAL_STANDARD_CFG,//国标配置 + MINOR_ALARMHOST_SUPPLEMENTLIGHT_CFG,//补光灯配置 + MINOR_ALARMHOST_FACESNAP_CFG,//目标抓拍配置 + MINOR_ALARMHOST_PUBLISHMANAGE_CFG,//发布管理配置 + MINOR_ALARMHOST_KEYDIAL_CFG,//按键配置 + MINOR_ALARMHOST_VOICETALK_SILENT_CFG,//对讲静音配置 + MINOR_ALARMHOST_START_VIDEO_PROTECT,//启用视频保护 + MINOR_ALARMHOST_START_AUDIO_PROTECT,//启用监听保护 + MINOR_ALARMHOST_START_MANUAL_ANSWER,//启用手动接听 + MINOR_ALARMHOST_START_LOG_SERVER,//启用安全日志 + MINOR_ALARMHOST_ADD_CARD,//添加卡片 + MINOR_ALARMHOST_DELETE_CARD,//删除卡片 + MINOR_ALARMHOST_MOTION_DETECTION_CFG,//移动侦测配置 + MINOR_ALARMHOST_VIDEO_BLOCK_CFG,//视频遮挡配置 + MINOR_ALARMHOST_FACE_DETECTION_CFG,//人脸侦测配置 + MINOR_ALARMHOST_LOG_BACKUP,//日志备份 - MINOR_ALARMHOST_LOCAL_SET_DEVICE_ACTIVE = 0xf0, //ؼ豸 - MINOR_ALARMHOST_REMOTE_SET_DEVICE_ACTIVE = 0xf1, //Զ̼豸 - MINOR_ALARMHOST_LOCAL_PARA_FACTORY_DEFAULT = 0xf2, //ػظ - MINOR_ALARMHOST_REMOTE_PARA_FACTORY_DEFAULT = 0xf3, //Զָ̻ + MINOR_ALARMHOST_LOCAL_SET_DEVICE_ACTIVE = 0xf0, //本地激活设备 + MINOR_ALARMHOST_REMOTE_SET_DEVICE_ACTIVE = 0xf1, //远程激活设备 + MINOR_ALARMHOST_LOCAL_PARA_FACTORY_DEFAULT = 0xf2, //本地回复出厂设置 + MINOR_ALARMHOST_REMOTE_PARA_FACTORY_DEFAULT = 0xf3, //远程恢复出厂设置 - MINOR_ADD_IPC = 0xf4, //IPC(IPC) - MINOR_MODIFY_IPC = 0xf5, //IPC޸ - MINOR_DELETE_IPC = 0xf6, //IPCɾ - MINOR_SYS_CHECK_START = 0xf7, //ϵͳ⿪ʼ - MINOR_SYS_CHECK_STOP = 0xf8, //ϵͳֹ - MINOR_SYS_CHECK_FINISH = 0xf9, //ϵͳ - MINOR_DEVICE_TAMPER_CFG = 0xfa, //豸 - MINOR_ALARMHOST_INDICATORLIGHT_CFG = 0xfb, //ָʾ - MINOR_ALARMHOST_WIRELESSBUTTON_CFG = 0xfc, //߰ť - MINOR_ALARMHOST_IRCUTFILTER_CFG = 0xfd, //ҹл - MINOR_ALARMHOST_KEYWORD_AUDIO_RECOGNITION_CFG = 0xfe, //ؼʶ - MINOR_ALARMHOST_DEVICE_POWER_MODE_SWITCH_CFG = 0xff, //豸ģʽл + MINOR_ADD_IPC = 0xf4, //IPC添加(报警接入IPC) + MINOR_MODIFY_IPC = 0xf5, //IPC修改 + MINOR_DELETE_IPC = 0xf6, //IPC删除 + MINOR_SYS_CHECK_START = 0xf7, //系统检测开始 + MINOR_SYS_CHECK_STOP = 0xf8, //系统检测中止 + MINOR_SYS_CHECK_FINISH = 0xf9, //系统检测结束 + MINOR_DEVICE_TAMPER_CFG = 0xfa, //设备防拆参数配置 + MINOR_ALARMHOST_INDICATORLIGHT_CFG = 0xfb, //指示灯配置 + MINOR_ALARMHOST_WIRELESSBUTTON_CFG = 0xfc, //无线按钮配置 + MINOR_ALARMHOST_IRCUTFILTER_CFG = 0xfd, //日夜切换配置 + MINOR_ALARMHOST_KEYWORD_AUDIO_RECOGNITION_CFG = 0xfe, //关键字语音识别配置 + MINOR_ALARMHOST_DEVICE_POWER_MODE_SWITCH_CFG = 0xff, //设备功耗模式切换 - // ¼ - MINOR_SCHOOLTIME_IRGI_B = 0x01, // BУʱ - MINOR_SCHOOLTIME_SDK, // SDKУʱ - MINOR_SCHOOLTIME_SELFTEST, // ʱԼУʱ - MINOR_SUBSYSTEM_ABNORMALINSERT, //Ӱ - MINOR_SUBSYSTEM_ABNORMALPULLOUT, //Ӱγ + // 事件 + MINOR_SCHOOLTIME_IRGI_B = 0x01, // B码校时 + MINOR_SCHOOLTIME_SDK, // SDK校时 + MINOR_SCHOOLTIME_SELFTEST, // 定时自检校时 + MINOR_SUBSYSTEM_ABNORMALINSERT, //子板插入 + MINOR_SUBSYSTEM_ABNORMALPULLOUT, //子板拔出 - MINOR_AUTO_ARM, //Զ - MINOR_AUTO_DISARM, //Զ - MINOR_TIME_TIGGER_ON, //ʱ - MINOR_TIME_TIGGER_OFF, //ʱرմ - MINOR_AUTO_ARM_FAILD, //Զʧ - MINOR_AUTO_DISARM_FAILD, //Զʧ - MINOR_TIME_TIGGER_ON_FAILD, //ʱʧ - MINOR_TIME_TIGGER_OFF_FAILD, //ʱرմʧ - MINOR_MANDATORY_ALARM, //ǿƲ - MINOR_KEYPAD_LOCKED, // - MINOR_USB_INSERT, //USB - MINOR_USB_PULLOUT, //USBγ - MINOR_KEYPAD_UNLOCK, //̽ + MINOR_AUTO_ARM, //自动布防 + MINOR_AUTO_DISARM, //自动撤防 + MINOR_TIME_TIGGER_ON, //定时开启触发器 + MINOR_TIME_TIGGER_OFF, //定时关闭触发器 + MINOR_AUTO_ARM_FAILD, //自动布防失败 + MINOR_AUTO_DISARM_FAILD, //自动撤防失败 + MINOR_TIME_TIGGER_ON_FAILD, //定时开启触发器失败 + MINOR_TIME_TIGGER_OFF_FAILD, //定时关闭触发器失败 + MINOR_MANDATORY_ALARM, //强制布防 + MINOR_KEYPAD_LOCKED, //键盘锁定 + MINOR_USB_INSERT, //USB插入 + MINOR_USB_PULLOUT, //USB拔出 + MINOR_KEYPAD_UNLOCK, //键盘解锁 }ALARMHOST_MINOR_TYPE; -//־ΪMAJOR_OPERATION=03ΪMINOR_LOCAL_CFG_PARM=0x52MINOR_REMOTE_GET_PARM=0x76 -//MINOR_REMOTE_CFG_PARM=0x77ʱdwParaType:Ч京£ +//当日志的主类型为MAJOR_OPERATION=03,次类型为MINOR_LOCAL_CFG_PARM=0x52或者MINOR_REMOTE_GET_PARM=0x76 +//或者MINOR_REMOTE_CFG_PARM=0x77时,dwParaType:参数类型有效,其含义如下: #define PARA_VIDEOOUT 0x1 #define PARA_IMAGE 0x2 #define PARA_ENCODE 0x4 #define PARA_NETWORK 0x8 #define PARA_ALARM 0x10 #define PARA_EXCEPTION 0x20 -#define PARA_DECODER 0x40 /**/ +#define PARA_DECODER 0x40 /*解码器*/ #define PARA_RS232 0x80 #define PARA_PREVIEW 0x100 #define PARA_SECURITY 0x200 #define PARA_DATETIME 0x400 -#define PARA_FRAMETYPE 0x800 /*֡ʽ*/ -#define PARA_DETECTION 0x1000 // -#define PARA_VCA_RULE 0x1001 //Ϊ -#define PARA_VCA_CTRL 0x1002 //ܿϢ -#define PARA_VCA_PLATE 0x1003 // ʶ +#define PARA_FRAMETYPE 0x800 /*帧格式*/ +#define PARA_DETECTION 0x1000 //侦测配置 +#define PARA_VCA_RULE 0x1001 //行为规则 +#define PARA_VCA_CTRL 0x1002 //配置智能控制信息 +#define PARA_VCA_PLATE 0x1003 // 车牌识别 -#define PARA_CODESPLITTER 0x2000 /**/ -//2010-01-22 Ƶۺƽ̨־Ϣ -#define PARA_RS485 0x2001 /* RS485Ϣ*/ -#define PARA_DEVICE 0x2002 /* 豸Ϣ*/ -#define PARA_HARDDISK 0x2003 /* ӲϢ */ -#define PARA_AUTOBOOT 0x2004 /* ԶϢ*/ -#define PARA_HOLIDAY 0x2005 /* ڼϢ*/ -#define PARA_IPC 0x2006 /* IPͨ */ -/************************* end*******************************/ +#define PARA_CODESPLITTER 0x2000 /*码分器参数*/ +//2010-01-22 增加视频综合平台日志信息次类型 +#define PARA_RS485 0x2001 /* RS485配置信息*/ +#define PARA_DEVICE 0x2002 /* 设备配置信息*/ +#define PARA_HARDDISK 0x2003 /* 硬盘配置信息 */ +#define PARA_AUTOBOOT 0x2004 /* 自动重启配置信息*/ +#define PARA_HOLIDAY 0x2005 /* 节假日配置信息*/ +#define PARA_IPC 0x2006 /* IP通道配置 */ +/*************************参数配置命令 end*******************************/ -/*******************ļ־ֵ*************************/ -#define NET_DVR_FILE_SUCCESS 1000 //ļϢ -#define NET_DVR_FILE_NOFIND 1001 //ûļ -#define NET_DVR_ISFINDING 1002 //ڲļ -#define NET_DVR_NOMOREFILE 1003 //ļʱûиļ -#define NET_DVR_FILE_EXCEPTION 1004 //ļʱ쳣 -#define NET_DVR_FIND_TIMEOUT 1005 //ļʱ +/*******************查找文件和日志函数返回值*************************/ +#define NET_DVR_FILE_SUCCESS 1000 //获得文件信息 +#define NET_DVR_FILE_NOFIND 1001 //没有文件 +#define NET_DVR_ISFINDING 1002 //正在查找文件 +#define NET_DVR_NOMOREFILE 1003 //查找文件时没有更多的文件 +#define NET_DVR_FILE_EXCEPTION 1004 //查找文件时异常 +#define NET_DVR_FIND_TIMEOUT 1005 //查找文件超时 -/*********************ص begin************************/ +/*********************回调函数类型 begin************************/ -//ص -#define COMM_ALARM 0x1100 //8000Ϣϴ +//报警回调命令 +#define COMM_ALARM 0x1100 //8000报警信息主动上传 -//ӦNET_VCA_RULE_ALARM -#define COMM_ALARM_RULE 0x1102 //쳣ΪⱨϢ -#define COMM_ALARM_PDC 0x1103 //ͳƱϢ -#define COMM_ALARM_VIDEOPLATFORM 0x1104 //Ƶۺƽ̨ -#define COMM_ALARM_ALARMHOST 0x1105 //籨 -#define COMM_ALARM_FACE 0x1106 //ʶ𱨾Ϣ -#define COMM_RULE_INFO_UPLOAD 0x1107 // ¼Ϣϴ -#define COMM_ALARM_AID 0x1110 //ͨ¼Ϣ -#define COMM_ALARM_TPS 0x1111 //ͨͳƱϢ -//ĿץĽϴ -#define COMM_UPLOAD_FACESNAP_RESULT 0x1112 //Ŀʶϴ -#define COMM_ALARM_TFS 0x1113 //ͨȡ֤Ϣ -#define COMM_ALARM_TPS_V41 0x1114 //ͨͳƱϢչ -#define COMM_ALARM_AID_V41 0x1115 //ͨ¼Ϣչ -#define COMM_ALARM_VQD_EX 0x1116 //Ƶϱ -#define COMM_ALARM_NOTIFICATION_REPORT 0x1117 //֪ͨ¼ϱ -#define COMM_SENSOR_VALUE_UPLOAD 0x1120 //ģʵʱϴ -#define COMM_SENSOR_ALARM 0x1121 //ģϴ -#define COMM_SWITCH_ALARM 0x1122 // -#define COMM_ALARMHOST_EXCEPTION 0x1123 //ϱ -#define COMM_ALARMHOST_OPERATEEVENT_ALARM 0x1124 //¼ϴ -#define COMM_ALARMHOST_SAFETYCABINSTATE 0x1125 //״̬ -#define COMM_ALARMHOST_ALARMOUTSTATUS 0x1126 ///״̬ -#define COMM_ALARMHOST_CID_ALARM 0x1127 //汨ϴ -#define COMM_ALARMHOST_EXTERNAL_DEVICE_ALARM 0x1128 //豸ϴ -#define COMM_ALARMHOST_DATA_UPLOAD 0x1129 //ϴ -#define COMM_FACECAPTURE_STATISTICS_RESULT 0x112a //Ŀץͳϴ -#define COMM_ALARM_WIRELESS_INFO 0x122b // Ϣϴ -#define COMM_SCENECHANGE_DETECTION_UPLOAD 0x1130 //ϴ()2013-7-16 -#define COMM_CROSSLINE_ALARM 0x1131 //ѹ߱() 2013-09-27 -#define COMM_UPLOAD_VIDEO_INTERCOM_EVENT 0x1132 //ӶԽ¼¼ϴ -#define COMM_ALARM_VIDEO_INTERCOM 0x1133 //ӶԽϴ -#define COMM_UPLOAD_NOTICE_DATA 0x1134 //ӶԽϢϴ -#define COMM_ALARM_AUDIOEXCEPTION 0x1150 //Ϣ -#define COMM_ALARM_DEFOCUS 0x1151 //齹Ϣ -#define COMM_ALARM_BUTTON_DOWN_EXCEPTION 0x1152 //ť±Ϣ -#define COMM_ALARM_ALARMGPS 0x1202 //GPSϢϴ -#define COMM_TRADEINFO 0x1500 //ATMDVRϴϢ -#define COMM_UPLOAD_PLATE_RESULT 0x2800 //ϴϢ -#define COMM_ITC_STATUS_DETECT_RESULT 0x2810 //ʵʱ״̬ϴ(ܸIPC) -#define COMM_IPC_AUXALARM_RESULT 0x2820 //PIR߱ȱϴ -#define COMM_UPLOAD_PICTUREINFO 0x2900 //ϴͼƬϢ -#define COMM_SNAP_MATCH_ALARM 0x2902 //ֹȶԽϴ -#define COMM_ITS_PLATE_RESULT 0x3050 //նͼƬϴ -#define COMM_ITS_TRAFFIC_COLLECT 0x3051 //նͳϴ -#define COMM_ITS_GATE_VEHICLE 0x3052 //ڳץϴ -#define COMM_ITS_GATE_FACE 0x3053 //Ŀץϴ -#define COMM_ITS_GATE_COSTITEM 0x3054 //ڹշϸ 2013-11-19 -#define COMM_ITS_GATE_HANDOVER 0x3055 //ڽӰ 2013-11-19 -#define COMM_ITS_PARK_VEHICLE 0x3056 //ͣϴ -#define COMM_ITS_BLOCKLIST_ALARM 0x3057 //ֹϴ +//对应NET_VCA_RULE_ALARM +#define COMM_ALARM_RULE 0x1102 //异常行为检测报警信息 +#define COMM_ALARM_PDC 0x1103 //人数统计报警信息 +#define COMM_ALARM_VIDEOPLATFORM 0x1104 //视频综合平台报警 +#define COMM_ALARM_ALARMHOST 0x1105 //网络报警主机报警 +#define COMM_ALARM_FACE 0x1106 //人脸检测识别报警信息 +#define COMM_RULE_INFO_UPLOAD 0x1107 // 事件数据信息上传 +#define COMM_ALARM_AID 0x1110 //交通事件报警信息 +#define COMM_ALARM_TPS 0x1111 //交通参数统计报警信息 +//智能目标抓拍结果上传 +#define COMM_UPLOAD_FACESNAP_RESULT 0x1112 //目标识别结果上传 +#define COMM_ALARM_TFS 0x1113 //交通取证报警信息 +#define COMM_ALARM_TPS_V41 0x1114 //交通参数统计报警信息扩展 +#define COMM_ALARM_AID_V41 0x1115 //交通事件报警信息扩展 +#define COMM_ALARM_VQD_EX 0x1116 //视频质量诊断报警 +#define COMM_ALARM_NOTIFICATION_REPORT 0x1117 //通知事件上报 +#define COMM_SENSOR_VALUE_UPLOAD 0x1120 //模拟量数据实时上传 +#define COMM_SENSOR_ALARM 0x1121 //模拟量报警上传 +#define COMM_SWITCH_ALARM 0x1122 //开关量报警 +#define COMM_ALARMHOST_EXCEPTION 0x1123 //报警主机故障报警 +#define COMM_ALARMHOST_OPERATEEVENT_ALARM 0x1124 //操作事件报警上传 +#define COMM_ALARMHOST_SAFETYCABINSTATE 0x1125 //防护舱状态 +#define COMM_ALARMHOST_ALARMOUTSTATUS 0x1126 //报警输出口/警号状态 +#define COMM_ALARMHOST_CID_ALARM 0x1127 //报告报警上传 +#define COMM_ALARMHOST_EXTERNAL_DEVICE_ALARM 0x1128 //报警主机外接设备报警上传 +#define COMM_ALARMHOST_DATA_UPLOAD 0x1129 //报警数据上传 +#define COMM_FACECAPTURE_STATISTICS_RESULT 0x112a //目标抓拍统计上传 +#define COMM_ALARM_WIRELESS_INFO 0x122b // 无线网络信息上传 +#define COMM_SCENECHANGE_DETECTION_UPLOAD 0x1130 //场景变更报警上传(布防)2013-7-16 +#define COMM_CROSSLINE_ALARM 0x1131 //压线报警(监听) 2013-09-27 +#define COMM_UPLOAD_VIDEO_INTERCOM_EVENT 0x1132 //可视对讲事件记录上传 +#define COMM_ALARM_VIDEO_INTERCOM 0x1133 //可视对讲报警上传 +#define COMM_UPLOAD_NOTICE_DATA 0x1134 //可视对讲公告信息上传 +#define COMM_ALARM_AUDIOEXCEPTION 0x1150 //声音报警信息 +#define COMM_ALARM_DEFOCUS 0x1151 //虚焦报警信息 +#define COMM_ALARM_BUTTON_DOWN_EXCEPTION 0x1152 //按钮按下报警信息 +#define COMM_ALARM_ALARMGPS 0x1202 //GPS报警信息上传 +#define COMM_TRADEINFO 0x1500 //ATMDVR主动上传交易信息 +#define COMM_UPLOAD_PLATE_RESULT 0x2800 //上传车牌信息 +#define COMM_ITC_STATUS_DETECT_RESULT 0x2810 //实时状态检测结果上传(智能高清IPC) +#define COMM_IPC_AUXALARM_RESULT 0x2820 //PIR报警、无线报警、呼救报警上传 +#define COMM_UPLOAD_PICTUREINFO 0x2900 //上传图片信息 +#define COMM_SNAP_MATCH_ALARM 0x2902 //禁止名单比对结果上传 +#define COMM_ITS_PLATE_RESULT 0x3050 //终端图片上传 +#define COMM_ITS_TRAFFIC_COLLECT 0x3051 //终端统计数据上传 +#define COMM_ITS_GATE_VEHICLE 0x3052 //出入口车辆抓拍数据上传 +#define COMM_ITS_GATE_FACE 0x3053 //出入口目标抓拍数据上传 +#define COMM_ITS_GATE_COSTITEM 0x3054 //出入口过车收费明细 2013-11-19 +#define COMM_ITS_GATE_HANDOVER 0x3055 //出入口交接班数据 2013-11-19 +#define COMM_ITS_PARK_VEHICLE 0x3056 //停车场数据上传 +#define COMM_ITS_BLOCKLIST_ALARM 0x3057 //禁止名单报警上传 -#define COMM_VEHICLE_CONTROL_LIST_DSALARM 0x3058 //Ҫͬ2013-11-04 -#define COMM_VEHICLE_CONTROL_ALARM 0x3059 //2013-11-04 -#define COMM_FIRE_ALARM 0x3060 //2013-11-04 +#define COMM_VEHICLE_CONTROL_LIST_DSALARM 0x3058 //名单数据需要同步报警2013-11-04 +#define COMM_VEHICLE_CONTROL_ALARM 0x3059 //车辆报警2013-11-04 +#define COMM_FIRE_ALARM 0x3060 //消防报警2013-11-04 -#define COMM_ITS_GATE_ALARMINFO 0x3061 //ڿƻϴ +#define COMM_ITS_GATE_ALARMINFO 0x3061 //出入口控制机数据上传 -#define COMM_VEHICLE_RECOG_RESULT 0x3062 //ʶϴ 2014-11-12 -#define COMM_PLATE_RESULT_V50 0x3063 //ϴ V50 +#define COMM_VEHICLE_RECOG_RESULT 0x3062 //车辆二次识别结果上传 2014-11-12 +#define COMM_PLATE_RESULT_V50 0x3063 //车牌上传 V50 -#define COMM_GATE_CHARGEINFO_UPLOAD 0x3064 //ڸϢϴ -#define COMM_TME_VEHICLE_INDENTIFICATION 0x3065 //TMEץͼϴ -#define COMM_GATE_CARDINFO_UPLOAD 0x3066 //ڿƬϢϴ -#define COMM_LOADING_DOCK_OPERATEINFO 0x3067 //̨ҵϴ +#define COMM_GATE_CHARGEINFO_UPLOAD 0x3064 //出入口付费信息上传 +#define COMM_TME_VEHICLE_INDENTIFICATION 0x3065 //TME车辆抓图上传 +#define COMM_GATE_CARDINFO_UPLOAD 0x3066 //出入口卡片信息上传 +#define COMM_LOADING_DOCK_OPERATEINFO 0x3067 //月台作业上传 -#define COMM_ALARM_SENSORINFO_UPLOAD 0x3077 //ϴϢ -#define COMM_ALARM_CAPTURE_UPLOAD 0x3078 //ץͼƬϴ +#define COMM_ALARM_SENSORINFO_UPLOAD 0x3077 //传感器上传信息 +#define COMM_ALARM_CAPTURE_UPLOAD 0x3078 //抓拍图片上传 -#define COMM_ITS_RADARINFO 0x3079 //״ﱨϴ +#define COMM_ITS_RADARINFO 0x3079 //雷达报警上传 -#define COMM_SIGNAL_LAMP_ABNORMAL 0x3080 //źŵ쳣ϴ +#define COMM_SIGNAL_LAMP_ABNORMAL 0x3080 //信号灯异常检测上传 -#define COMM_ALARM_TPS_REAL_TIME 0x3081 //TPSʵʱϴ -#define COMM_ALARM_TPS_STATISTICS 0x3082 //TPSͳƹϴ +#define COMM_ALARM_TPS_REAL_TIME 0x3081 //TPS实时过车数据上传 +#define COMM_ALARM_TPS_STATISTICS 0x3082 //TPS统计过车数据上传 -#define COMM_ALARM_V30 0x4000 //9000Ϣϴ -#define COMM_IPCCFG 0x4001 //9000豸IPCøı䱨Ϣϴ -#define COMM_IPCCFG_V31 0x4002 //9000豸IPCøı䱨Ϣϴչ 9000_1.1 -#define COMM_IPCCFG_V40 0x4003 // IVMS 2000 NVR IPCøıʱϢϴ -#define COMM_ALARM_DEVICE 0x4004 //豸ݣֵͨ256չ -#define COMM_ALARM_CVR 0x4005 //CVR 2.0.Xⲿ -#define COMM_ALARM_HOT_SPARE 0x4006 //ȱ쳣N+1ģʽ쳣 -#define COMM_ALARM_V40 0x4007 //ƶ⣬ƵʧڵIOźȱϢϴΪɱ䳤 +#define COMM_ALARM_V30 0x4000 //9000报警信息主动上传 +#define COMM_IPCCFG 0x4001 //9000设备IPC接入配置改变报警信息主动上传 +#define COMM_IPCCFG_V31 0x4002 //9000设备IPC接入配置改变报警信息主动上传扩展 9000_1.1 +#define COMM_IPCCFG_V40 0x4003 // IVMS 2000 编码服务器 NVR IPC接入配置改变时报警信息上传 +#define COMM_ALARM_DEVICE 0x4004 //设备报警内容,由于通道值大于256而扩展 +#define COMM_ALARM_CVR 0x4005 //CVR 2.0.X外部报警类型 +#define COMM_ALARM_HOT_SPARE 0x4006 //热备异常报警(N+1模式异常报警) +#define COMM_ALARM_V40 0x4007 //移动侦测,视频丢失,遮挡,IO信号量等报警信息主动上传,报警数据为可变长 -#define COMM_UPLOAD_HEATMAP_RESULT 0x4008 //ȶͼϴ 2014-03-21 -#define COMM_ALARM_DEVICE_V40 0x4009 //豸չ -#define COMM_ALARM_FACE_DETECTION 0x4010 //ⱨ -#define COMM_ALARM_TARGET_LEFT_REGION 0x4011 //Ŀ뿪򱨾(ʦѧ(л¼Ƽѧ)) -#define COMM_GISINFO_UPLOAD 0x4012 //GISϢϴ -#define COMM_VANDALPROOF_ALARM 0x4013 //ϴƻϢ -#define COMM_PEOPLE_DETECTION_UPLOAD 0x4014 //ԱϢϴ -#define COMM_ALARM_STORAGE_DETECTION 0x4015 //洢ܼⱨϴ -#define COMM_MVM_REGISTER 0x4016 //شŹMagnetic Vehicle Managerע -#define COMM_MVM_STATUS_INFO 0x4017 //شŹMagnetic Vehicle Manager״̬ϱ -#define COMM_UPLOAD_HEATMAP_RESULT_PDC 0x4018 //ȶͼͳϴ¼ -#define COMM_UPLOAD_HEATMAP_RESULT_DURATION 0x4019 //ȶͼԱͣʱͳϴ¼ -#define COMM_UPLOAD_HEATMAP_RESULT_INTERSECTION 0x4020 //·ڷȶֵϴ -#define COMM_UPLOAD_AIOP_VIDEO 0x4021 //豸֧AIƽ̨룬ϴƵ -#define COMM_UPLOAD_AIOP_PICTURE 0x4022 //豸֧AIƽ̨룬ϴͼƬ -#define COMM_UPLOAD_AIOP_POLLING_SNAP 0x4023 //豸֧AIƽ̨룬ϴѲץͼͼƬ ӦĽṹ(NET_AIOP_POLLING_PICTURE_HEAD) -#define COMM_UPLOAD_AIOP_POLLING_VIDEO 0x4024 //豸֧AIƽ̨룬ϴѲƵ ӦĽṹ(NET_AIOP_POLLING_VIDEO_HEAD) -#define COMM_UPLOAD_AIOP_HISTORY_VIDEO 0x4025 //豸֧AIƽ̨룬ϴʷƵ ӦĽṹ(NET_AIOP_HISTORY_VIDEO_HEAD) +#define COMM_UPLOAD_HEATMAP_RESULT 0x4008 //热度图报警上传 2014-03-21 +#define COMM_ALARM_DEVICE_V40 0x4009 //设备报警内容扩展 +#define COMM_ALARM_FACE_DETECTION 0x4010 //人脸侦测报警 +#define COMM_ALARM_TARGET_LEFT_REGION 0x4011 //检测目标离开检测区域报警(教师走向学生报警(用于联动切换录播主机控制检测学生的球机)) +#define COMM_GISINFO_UPLOAD 0x4012 //GIS信息上传 +#define COMM_VANDALPROOF_ALARM 0x4013 //上传防破坏报警信息 +#define COMM_PEOPLE_DETECTION_UPLOAD 0x4014 //人员侦测信息上传 +#define COMM_ALARM_STORAGE_DETECTION 0x4015 //存储智能检测报警上传 +#define COMM_MVM_REGISTER 0x4016 //地磁管理器(Magnetic Vehicle Manager)注册 +#define COMM_MVM_STATUS_INFO 0x4017 //地磁管理器(Magnetic Vehicle Manager)状态上报 +#define COMM_UPLOAD_HEATMAP_RESULT_PDC 0x4018 //热度图按人数统计数据上传事件 +#define COMM_UPLOAD_HEATMAP_RESULT_DURATION 0x4019 //热度图按人员停留时间统计数据上传事件 +#define COMM_UPLOAD_HEATMAP_RESULT_INTERSECTION 0x4020 //路口分析热度值结果上传 +#define COMM_UPLOAD_AIOP_VIDEO 0x4021 //设备支持AI开放平台接入,上传视频检测数据 +#define COMM_UPLOAD_AIOP_PICTURE 0x4022 //设备支持AI开放平台接入,上传图片检测数据 +#define COMM_UPLOAD_AIOP_POLLING_SNAP 0x4023 //设备支持AI开放平台接入,上传轮巡抓图图片检测数据 对应的结构体(NET_AIOP_POLLING_PICTURE_HEAD) +#define COMM_UPLOAD_AIOP_POLLING_VIDEO 0x4024 //设备支持AI开放平台接入,上传轮巡视频检测数据 对应的结构体(NET_AIOP_POLLING_VIDEO_HEAD) +#define COMM_UPLOAD_AIOP_HISTORY_VIDEO 0x4025 //设备支持AI开放平台接入,上传历史视频任务检测数据 对应的结构体(NET_AIOP_HISTORY_VIDEO_HEAD) -#define COMM_ITS_ROAD_EXCEPTION 0x4500 //·豸쳣 -#define COMM_ITS_EXTERNAL_CONTROL_ALARM 0x4520 //ر -#define COMM_ALARM_SHIPSDETECTION 0x4521 // ֻⱨϢ +#define COMM_ITS_ROAD_EXCEPTION 0x4500 //路口设备异常报警 +#define COMM_ITS_EXTERNAL_CONTROL_ALARM 0x4520 //外控报警 +#define COMM_ALARM_SHIPSDETECTION 0x4521 // 船只检测报警信息 -#define COMM_VCA_DBD_ALARM 0x4550 //ʻΪϢ -#define COMM_VCA_ADAS_ALARM 0x4551 //߼ʻϢ -#define COMM_VEH_REALTIME_INFO 0x4552 //гʵʱϢ -#define COMM_VCA_ATTEND_ALARM 0x4553 //¼Ϣ +#define COMM_VCA_DBD_ALARM 0x4550 //驾驶行为报警信息 +#define COMM_VCA_ADAS_ALARM 0x4551 //高级辅助驾驶报警信息 +#define COMM_VEH_REALTIME_INFO 0x4552 //行车实时数据信息 +#define COMM_VCA_ATTEND_ALARM 0x4553 //考勤事件报警信息 -#define COMM_FIREDETECTION_ALARM 0x4991 //ⱨ -#define COMM_ALARM_DENSEFOGDETECTION 0x4992 //ⱨϢ -#define COMM_VCA_ALARM 0x4993 //ܼⱨ -#define COMM_FACE_THERMOMETRY_ALARM 0x4994 //± +#define COMM_FIREDETECTION_ALARM 0x4991 //火点检测报警 +#define COMM_ALARM_DENSEFOGDETECTION 0x4992 //大雾检测报警信息 +#define COMM_VCA_ALARM 0x4993 //智能检测报警 +#define COMM_FACE_THERMOMETRY_ALARM 0x4994 //人脸测温报警 -#define COMM_TAPE_ARCHIVE_ALARM 0x4996 //Ŵ鵵 +#define COMM_TAPE_ARCHIVE_ALARM 0x4996 //磁带库归档报警 -#define COMM_SCREEN_ALARM 0x5000 // -#define COMM_DVCS_STATE_ALARM 0x5001 //ֲʽϴ -#define COMM_ALARM_ACS 0x5002 //Ž -#define COMM_ALARM_FIBER_CONVERT 0x5003 //շ -#define COMM_ALARM_SWITCH_CONVERT 0x5004 // -#define COMM_ALARM_DEC_VCA 0x5010 //ܽ뱨 -#define COMM_ALARM_LCD 0x5011 //Ļ -#define COMM_CONFERENCE_CALL_ALARM 0x5012 //и澯 +#define COMM_SCREEN_ALARM 0x5000 //多屏控制器报警类型 +#define COMM_DVCS_STATE_ALARM 0x5001 //分布式大屏控制器报警上传 +#define COMM_ALARM_ACS 0x5002 //门禁主机报警 +#define COMM_ALARM_FIBER_CONVERT 0x5003 //光纤收发器报警 +#define COMM_ALARM_SWITCH_CONVERT 0x5004 //交换机报警 +#define COMM_ALARM_DEC_VCA 0x5010 //智能解码报警 +#define COMM_ALARM_LCD 0x5011 //屏幕报警 +#define COMM_CONFERENCE_CALL_ALARM 0x5012 //会议呼叫告警 -#define COMM_ALARM_WALL_CONFERNECE 0x5015 //MCUѿĻϢ +#define COMM_ALARM_WALL_CONFERNECE 0x5015 //MCU单个已开会的会议信息报警 -#define COMM_DIAGNOSIS_UPLOAD 0x5100 //ϷVQDϴ -#define COMM_HIGH_DENSITY_UPLOAD 0x5101 //Աۼܶϴ +#define COMM_DIAGNOSIS_UPLOAD 0x5100 //诊断服务器VQD报警上传 +#define COMM_HIGH_DENSITY_UPLOAD 0x5101 //人员聚集密度输出报警上传 -#define COMM_ID_INFO_ALARM 0x5200 //֤Ϣϴ -#define COMM_PASSNUM_INFO_ALARM 0x5201 //ͨϱ -#define COMM_PASSPORT_ALARM 0x5202 //Ϣϴ +#define COMM_ID_INFO_ALARM 0x5200 //身份证信息上传 +#define COMM_PASSNUM_INFO_ALARM 0x5201 //通行人数上报 +#define COMM_PASSPORT_ALARM 0x5202 //护照信息上传 -#define COMM_THERMOMETRY_DIFF_ALARM 0x5211 //²ϴ -#define COMM_THERMOMETRY_ALARM 0x5212 //¶ȱϴ -#define COMM_PANORAMIC_LINKAGE_ALARM 0x5213 //ȫλϴ -#define COMM_TAG_INFO_ALARM 0x5215 // ǩϢϴ -#define COMM_ALARM_VQD 0x6000 //VQDϴ -#define COMM_PUSH_UPDATE_RECORD_INFO 0x6001 //ģʽ¼Ϣϴ -#define COMM_SWITCH_LAMP_ALARM 0x6002 //صƼ -#define COMM_INQUEST_ALARM 0x6005 // Ѷϴ -#define COMM_VIDEO_PARKING_POLE_ALARM 0x6006 //Ƶ׮ -#define COMM_GPS_STATUS_ALARM 0x6010 // GPS״̬ϴ -#define COMM_BASE_STATION_INFO_ALARM 0x6011 //վϢϴ -#define COMM_ALARM_SUBSCRIBE_EVENT 0x6012 //Ľϱ +#define COMM_THERMOMETRY_DIFF_ALARM 0x5211 //温差报警上传 +#define COMM_THERMOMETRY_ALARM 0x5212 //温度报警上传 +#define COMM_PANORAMIC_LINKAGE_ALARM 0x5213 //全景联动到位上传 +#define COMM_TAG_INFO_ALARM 0x5215 // 标签信息上传 +#define COMM_ALARM_VQD 0x6000 //VQD主动报警上传 +#define COMM_PUSH_UPDATE_RECORD_INFO 0x6001 //推模式录像信息上传 +#define COMM_SWITCH_LAMP_ALARM 0x6002 //开关灯检测 +#define COMM_INQUEST_ALARM 0x6005 // 审讯主机报警上传 +#define COMM_VIDEO_PARKING_POLE_ALARM 0x6006 //视频桩报警 +#define COMM_GPS_STATUS_ALARM 0x6010 // GPS状态上传 +#define COMM_BASE_STATION_INFO_ALARM 0x6011 //基站信息上传 +#define COMM_ALARM_SUBSCRIBE_EVENT 0x6012 //订阅结果上报 -#define COMM_FACESNAP_RAWDATA_ALARM 0x6015 //ȶԱ͸ʽ -#define COMM_CLUSTER_ALARM 0x6020 //Ⱥϴ +#define COMM_FACESNAP_RAWDATA_ALARM 0x6015 //人脸比对报警(数据透传方式) +#define COMM_CLUSTER_ALARM 0x6020 //集群报警上传 #define COMM_ISAPI_ALARM 0x6009 -//PJ01C20170209084¼NVSܿĿר -#define COMM_FRAMES_PEOPLE_COUNTING_ALARM 0x6069 //֡ͳƽϴ +//PJ01C20170209084超脑录播NVS软件功能开发定制项目专用 +#define COMM_FRAMES_PEOPLE_COUNTING_ALARM 0x6069 //单帧画面人数统计结果上传 -#define COMM_SIGN_ABNORMAL_ALARM 0x6120 //쳣 -#define COMM_HFPD_ALARM 0x6121 //Ƶͼʶⱨ +#define COMM_SIGN_ABNORMAL_ALARM 0x6120 //体征异常报警 +#define COMM_HFPD_ALARM 0x6121 //高频图像特征识别检测报警 -#define COMM_HCU_ALARM 0x6150 //ܺӱSDKⲻʵ֣豸DVRͨЭ飬ռλֹͻ +#define COMM_HCU_ALARM 0x6150 //车载智能盒子报警(本报警SDK库不实现,用作设备和DVR通信协议,占位防止冲突) -#define COMM_DEV_STATUS_CHANGED 0x7000 //豸״̬ı䱨ϴ +#define COMM_DEV_STATUS_CHANGED 0x7000 //设备状态改变报警上传 -#define COMM_CHILD_DEVICE_ALARM 0x7100 //豸ϱ +#define COMM_CHILD_DEVICE_ALARM 0x7100 //子设备上报报警 -#define COMM_ALARM_EXCEPTION 0x7fff //쳣 +#define COMM_ALARM_EXCEPTION 0x7fff //报警异常类型 -/*************쳣(Ϣʽ, صʽ())****************/ -#define EXCEPTION_EXCHANGE 0x8000 //ûʱ쳣 -#define EXCEPTION_AUDIOEXCHANGE 0x8001 //Խ쳣 -#define EXCEPTION_ALARM 0x8002 //쳣 -#define EXCEPTION_PREVIEW 0x8003 //Ԥ쳣 -#define EXCEPTION_SERIAL 0x8004 //͸ͨ쳣 -#define EXCEPTION_RECONNECT 0x8005 //Ԥʱ -#define EXCEPTION_ALARMRECONNECT 0x8006 //ʱ -#define EXCEPTION_SERIALRECONNECT 0x8007 //͸ͨ -#define SERIAL_RECONNECTSUCCESS 0x8008 //͸ͨɹ -#define EXCEPTION_PLAYBACK 0x8010 //ط쳣 -#define EXCEPTION_DISKFMT 0x8011 //Ӳ̸ʽ -#define EXCEPTION_PASSIVEDECODE 0x8012 //쳣 -#define EXCEPTION_EMAILTEST 0x8013 //ʼ쳣 -#define EXCEPTION_BACKUP 0x8014 //쳣 -#define PREVIEW_RECONNECTSUCCESS 0x8015 //Ԥʱɹ -#define ALARM_RECONNECTSUCCESS 0x8016 //ʱɹ -#define RESUME_EXCHANGE 0x8017 //ûָ -#define NETWORK_FLOWTEST_EXCEPTION 0x8018 //쳣 -#define EXCEPTION_PICPREVIEWRECONNECT 0x8019 //ͼƬԤ -#define PICPREVIEW_RECONNECTSUCCESS 0x8020 //ͼƬԤɹ -#define EXCEPTION_PICPREVIEW 0x8021 //ͼƬԤ쳣 -#define EXCEPTION_MAX_ALARM_INFO 0x8022 //ϢѴ -#define EXCEPTION_LOST_ALARM 0x8023 //ʧ -#define EXCEPTION_PASSIVETRANSRECONNECT 0x8024 //ת -#define PASSIVETRANS_RECONNECTSUCCESS 0x8025 //תɹ -#define EXCEPTION_PASSIVETRANS 0x8026 //ת쳣 -#define SUCCESS_PUSHDEVLOGON 0x8030 //ģʽ豸עɹ -#define EXCEPTION_RELOGIN 0x8040 //ûص½ -#define RELOGIN_SUCCESS 0x8041 //ûص½ɹ -#define EXCEPTION_PASSIVEDECODE_RECONNNECT 0x8042 // -#define EXCEPTION_CLUSTER_CS_ARMFAILED 0x8043 //Ⱥ쳣 +/*************操作异常类型(消息方式, 回调方式(保留))****************/ +#define EXCEPTION_EXCHANGE 0x8000 //用户交互时异常 +#define EXCEPTION_AUDIOEXCHANGE 0x8001 //语音对讲异常 +#define EXCEPTION_ALARM 0x8002 //报警异常 +#define EXCEPTION_PREVIEW 0x8003 //网络预览异常 +#define EXCEPTION_SERIAL 0x8004 //透明通道异常 +#define EXCEPTION_RECONNECT 0x8005 //预览时重连 +#define EXCEPTION_ALARMRECONNECT 0x8006 //报警时重连 +#define EXCEPTION_SERIALRECONNECT 0x8007 //透明通道重连 +#define SERIAL_RECONNECTSUCCESS 0x8008 //透明通道重连成功 +#define EXCEPTION_PLAYBACK 0x8010 //回放异常 +#define EXCEPTION_DISKFMT 0x8011 //硬盘格式化 +#define EXCEPTION_PASSIVEDECODE 0x8012 //被动解码异常 +#define EXCEPTION_EMAILTEST 0x8013 //邮件测试异常 +#define EXCEPTION_BACKUP 0x8014 //备份异常 +#define PREVIEW_RECONNECTSUCCESS 0x8015 //预览时重连成功 +#define ALARM_RECONNECTSUCCESS 0x8016 //报警时重连成功 +#define RESUME_EXCHANGE 0x8017 //用户交互恢复 +#define NETWORK_FLOWTEST_EXCEPTION 0x8018 //网络流量检测异常 +#define EXCEPTION_PICPREVIEWRECONNECT 0x8019 //图片预览重连 +#define PICPREVIEW_RECONNECTSUCCESS 0x8020 //图片预览重连成功 +#define EXCEPTION_PICPREVIEW 0x8021 //图片预览异常 +#define EXCEPTION_MAX_ALARM_INFO 0x8022 //报警信息缓存已达上限 +#define EXCEPTION_LOST_ALARM 0x8023 //报警丢失 +#define EXCEPTION_PASSIVETRANSRECONNECT 0x8024 //被动转码重连 +#define PASSIVETRANS_RECONNECTSUCCESS 0x8025 //被动转码重连成功 +#define EXCEPTION_PASSIVETRANS 0x8026 //被动转码异常 +#define SUCCESS_PUSHDEVLOGON 0x8030 //推模式设备注册成功 +#define EXCEPTION_RELOGIN 0x8040 //用户重登陆 +#define RELOGIN_SUCCESS 0x8041 //用户重登陆成功 +#define EXCEPTION_PASSIVEDECODE_RECONNNECT 0x8042 //被动解码重连 +#define EXCEPTION_CLUSTER_CS_ARMFAILED 0x8043 //集群报警异常 -#define EXCEPTION_RELOGIN_FAILED 0x8044 //ص½ʧܣֹͣص½ -#define EXCEPTION_PREVIEW_RECONNECT_CLOSED 0x8045 //رԤ -#define EXCEPTION_ALARM_RECONNECT_CLOSED 0x8046 //رձ -#define EXCEPTION_SERIAL_RECONNECT_CLOSED 0x8047 //ر͸ͨ -#define EXCEPTION_PIC_RECONNECT_CLOSED 0x8048 //رջ -#define EXCEPTION_PASSIVE_DECODE_RECONNECT_CLOSED 0x8049 //رձ -#define EXCEPTION_PASSIVE_TRANS_RECONNECT_CLOSED 0x804a //رձת -#define EXCEPTION_VIDEO_DOWNLOAD 0x804b // [add] by yangzheng 2019/11/09 ¼쳣 +#define EXCEPTION_RELOGIN_FAILED 0x8044 //重登陆失败,停止重登陆 +#define EXCEPTION_PREVIEW_RECONNECT_CLOSED 0x8045 //关闭预览重连功能 +#define EXCEPTION_ALARM_RECONNECT_CLOSED 0x8046 //关闭报警重连功能 +#define EXCEPTION_SERIAL_RECONNECT_CLOSED 0x8047 //关闭透明通道重连功能 +#define EXCEPTION_PIC_RECONNECT_CLOSED 0x8048 //关闭回显重连功能 +#define EXCEPTION_PASSIVE_DECODE_RECONNECT_CLOSED 0x8049 //关闭被动解码重连功能 +#define EXCEPTION_PASSIVE_TRANS_RECONNECT_CLOSED 0x804a //关闭被动转码重连功能 +#define EXCEPTION_VIDEO_DOWNLOAD 0x804b // [add] by yangzheng 2019/11/09 录像下载异常 -/********************Ԥص*********************/ -#define NET_DVR_SYSHEAD 1 //ϵͳͷ -#define NET_DVR_STREAMDATA 2 //ƵݣƵֿƵݣ -#define NET_DVR_AUDIOSTREAMDATA 3 //Ƶ -#define NET_DVR_STD_VIDEODATA 4 //׼Ƶ -#define NET_DVR_STD_AUDIODATA 5 //׼Ƶ -#define NET_DVR_SDP 6 //SDPϢ(RstpʱЧ) -#define NET_DVR_CHANGE_FORWARD 10 //ıΪ -#define NET_DVR_CHANGE_REVERSE 11 //ıΪ -#define NET_DVR_PLAYBACK_ALLFILEEND 12 //طļ -#define NET_DVR_VOD_DRAW_FRAME 13 //طų֡ -#define NET_DVR_VOD_DRAW_DATA 14 //϶ƽ -#define NET_DVR_HLS_INDEX_DATA 15 //HLS -#define NET_DVR_PLAYBACK_NEW_POS 16 //ط(ʱ䶨λNET_DVR_PLAYSETTIMENET_DVR_PLAYSETTIME_V50ӿڷسɹ󣬻ҪȴյûصͺſΪɹ) -#define NET_DVR_PLAYBACK_NEW_STREAM 17 //ıǣвUUID -#define NET_DVR_METADATA_DATA 107 //Metadata -#define NET_DVR_PRIVATE_DATA 112 //˽,Ϣ +/********************预览回调函数*********************/ +#define NET_DVR_SYSHEAD 1 //系统头数据 +#define NET_DVR_STREAMDATA 2 //视频流数据(包括复合流和音视频分开的视频流数据) +#define NET_DVR_AUDIOSTREAMDATA 3 //音频流数据 +#define NET_DVR_STD_VIDEODATA 4 //标准视频流数据 +#define NET_DVR_STD_AUDIODATA 5 //标准音频流数据 +#define NET_DVR_SDP 6 //SDP信息(Rstp传输时有效) +#define NET_DVR_CHANGE_FORWARD 10 //码流改变为正放 +#define NET_DVR_CHANGE_REVERSE 11 //码流改变为倒放 +#define NET_DVR_PLAYBACK_ALLFILEEND 12 //回放文件结束标记 +#define NET_DVR_VOD_DRAW_FRAME 13 //回放抽帧码流 +#define NET_DVR_VOD_DRAW_DATA 14 //拖动平滑码流 +#define NET_DVR_HLS_INDEX_DATA 15 //HLS索引数据 +#define NET_DVR_PLAYBACK_NEW_POS 16 //回放重置(按时间定位命令NET_DVR_PLAYSETTIME和NET_DVR_PLAYSETTIME_V50接口返回成功后,还需要等待收到该回调类型后才可认为操作成功) +#define NET_DVR_PLAYBACK_NEW_STREAM 17 //新码流的标记,并带有操作的UUID +#define NET_DVR_METADATA_DATA 107 //Metadata数据 +#define NET_DVR_PRIVATE_DATA 112 //私有数据,包括智能信息 -//豸ͺ(DVR) -/* 豸 */ -#define DVR 1 /*δdvrͷDVR*/ +//设备型号(DVR类型) +/* 设备类型 */ +#define DVR 1 /*对尚未定义的dvr类型返回DVR*/ #define ATMDVR 2 /*atm dvr*/ #define DVS 3 /*DVS*/ #define DEC 4 /* 6001D */ @@ -8139,52 +8139,52 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DVR_HTS 10 /* 8016HTS DVR(no audio) */ #define DVR_HB 11 /* HB DVR(SATA HD) */ #define DVR_HCS 12 /* 8000HCS DVR */ -#define DVS_A 13 /* ATAӲ̵DVS */ +#define DVS_A 13 /* 带ATA硬盘的DVS */ #define DVR_HC_S 14 /* 8000HC-S */ #define DVR_HT_S 15 /* 8000HT-S */ #define DVR_HF_S 16 /* 8000HF-S */ #define DVR_HS_S 17 /* 8000HS-S */ #define ATMDVR_S 18 /* ATM-S */ -#define DVR_7000H 19 /*7000Hϵ*/ -#define DEC_MAT 20 /*·*/ +#define DVR_7000H 19 /*7000H系列*/ +#define DEC_MAT 20 /*多路解码器*/ #define DVR_MOBILE 21 /* mobile DVR */ #define DVR_HD_S 22 /* 8000HD-S */ #define DVR_HD_SL 23 /* 8000HD-SL */ #define DVR_HC_SL 24 /* 8000HC-SL */ #define DVR_HS_ST 25 /* 8000HS_ST */ #define DVS_HW 26 /* 6000HW */ -#define DS630X_D 27 /* · */ -#define DS640X_HD 28 /*640X*/ -#define DS610X_D 29 /*610X*/ -#define IPCAM 30 /*IP */ -#define MEGA_IPCAM 31 /*IP*/ -#define IPCAM_X62MF 32 /*862MFԽ9000豸*/ -#define ITCCAM 35 /*ܸ*/ -#define IVS_IPCAM 36 /*ܷ*/ -#define ZOOMCAM 38 /*һ*/ -#define IPDOME 40 /*IP */ -#define IPDOME_MEGA200 41 /*IP 200*/ -#define IPDOME_MEGA130 42 /*IP 130*/ -#define IPDOME_AI 43 /*IP ܿ*/ -#define TII_IPCAM 44 /*ȳ*/ -#define IPTC_DOME 45 /*ȳ˫Ŀ*/ -#define DS_2DP_Z 46 /*ӥۣ*/ -#define DS_2DP 47 /*ӥۣС*/ -#define ITS_WMS 48 /*ݹ*/ -#define IPMOD 50 /*IP ģ*/ -#define TRAFFIC_YTDOME 51 //̨ͨ״٣ -#define TRAFFIC_RDDOME 52 //̨ͨ״٣ -#define IDS6501_HF_P 60 // 6501 -#define IDS6101_HF_A 61 //ATM -#define IDS6002_HF_B 62 //˫DS6002-HF/B -#define IDS6101_HF_B 63 //쳣Ϊ⣺DS6101-HF/B DS6101-HF/B_SATA -#define IDS52XX 64 //ܷIVMS -#define IDS90XX 65 // 9000 -#define IDS8104_AHL_S_HX 66 // Ŀʶ ATM -#define IDS8104_AHL_S_H 67 // ˽Ŀʶ ATM -#define IDS91XX 68 // 9100 -#define IIP_CAM_B 69 // ΪIP -#define IIP_CAM_F 70 //IP +#define DS630X_D 27 /* 多路解码器 */ +#define DS640X_HD 28 /*640X高清解码器*/ +#define DS610X_D 29 /*610X解码器*/ +#define IPCAM 30 /*IP 摄像机*/ +#define MEGA_IPCAM 31 /*高清IP摄像机*/ +#define IPCAM_X62MF 32 /*862MF可以接入9000设备*/ +#define ITCCAM 35 /*智能高清网络摄像机*/ +#define IVS_IPCAM 36 /*智能分析高清网络摄像机*/ +#define ZOOMCAM 38 /*一体机*/ +#define IPDOME 40 /*IP 标清球机*/ +#define IPDOME_MEGA200 41 /*IP 200万高清球机*/ +#define IPDOME_MEGA130 42 /*IP 130万高清球机*/ +#define IPDOME_AI 43 /*IP 高清智能快球*/ +#define TII_IPCAM 44 /*红外热成像摄像机*/ +#define IPTC_DOME 45 /*红外热成像双目球机*/ +#define DS_2DP_Z 46 /*球型鹰眼(大)*/ +#define DS_2DP 47 /*非球型鹰眼(小)*/ +#define ITS_WMS 48 /*称重数据管理服务器*/ +#define IPMOD 50 /*IP 模块*/ +#define TRAFFIC_YTDOME 51 //交通智能云台(不带雷达测速) +#define TRAFFIC_RDDOME 52 //交通智能云台(带雷达测速) +#define IDS6501_HF_P 60 // 6501 车牌 +#define IDS6101_HF_A 61 //智能ATM +#define IDS6002_HF_B 62 //双机:DS6002-HF/B +#define IDS6101_HF_B 63 //异常行为检测:DS6101-HF/B DS6101-HF/B_SATA +#define IDS52XX 64 //智能分析仪IVMS +#define IDS90XX 65 // 9000智能 +#define IDS8104_AHL_S_HX 66 // 海鑫目标识别 ATM +#define IDS8104_AHL_S_H 67 // 私有目标识别 ATM +#define IDS91XX 68 // 9100智能 +#define IIP_CAM_B 69 // 智能行为IP摄像机 +#define IIP_CAM_F 70 //智能人脸IP摄像机 #define DS71XX_H 71 /* DS71XXH_S */ #define DS72XX_H_S 72 /* DS72XXH_S */ #define DS73XX_H_S 73 /* DS73XXH_S */ @@ -8192,7 +8192,7 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS73XX_HFI_S 75 //DS73XX_HFI_S #define DS76XX_H_S 76 /* DVR,e.g. DS7604_HI_S */ #define DS76XX_N_S 77 /* NVR,e.g. DS7604_NI_S */ -#define DS_TP3200_EC 78 /*ܼ*/ +#define DS_TP3200_EC 78 /*机柜智能检测仪*/ #define DS81XX_HS_S 81 /* DS81XX_HS_S */ #define DS81XX_HL_S 82 /* DS81XX_HL_S */ #define DS81XX_HC_S 83 /* DS81XX_HC_S */ @@ -8204,17 +8204,17 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS90XX_HF_S 90 /*DS90XX_HF_S*/ #define DS91XX_HF_S 91 /*DS91XX_HF_S*/ #define DS91XX_HD_S 92 /*91XXHD-S(MD)*/ -#define IDS90XX_A 93 // 9000 ATM -#define IDS91XX_A 94 // 9100 ATM -#define DS95XX_N_S 95 /*DS95XX_N_S NVR κ*/ +#define IDS90XX_A 93 // 9000智能 ATM +#define IDS91XX_A 94 // 9100智能 ATM +#define DS95XX_N_S 95 /*DS95XX_N_S NVR 不带任何输出*/ #define DS96XX_N_SH 96 /*DS96XX_N_SH NVR*/ #define DS90XX_HF_SH 97 /*DS90XX_HF_SH */ #define DS91XX_HF_SH 98 /*DS91XX_HF_SH */ -#define DS_B10_XY 100 /*Ƶۺƽ̨豸ͺ(X:ƬY:Ƭ)*/ -#define DS_6504HF_B10 101 /*Ƶۺƽ̨ڲ*/ -#define DS_6504D_B10 102 /*Ƶۺƽ̨ڲ*/ -#define DS_1832_B10 103 /*Ƶۺƽ̨ڲ*/ -#define DS_6401HFH_B10 104 /*Ƶۺƽ̨ڲ˰*/ +#define DS_B10_XY 100 /*视频综合平台设备型号(X:编码板片数,Y:解码板片数)*/ +#define DS_6504HF_B10 101 /*视频综合平台内部编码器*/ +#define DS_6504D_B10 102 /*视频综合平台内部解码器*/ +#define DS_1832_B10 103 /*视频综合平台内部码分器*/ +#define DS_6401HFH_B10 104 /*视频综合平台内部光纤板*/ #define DS_65XXHC 105 //65XXHC DVS #define DS_65XXHC_S 106 //65XXHC-SATA DVS #define DS_65XXHF 107 //65XXHF DVS @@ -8222,8 +8222,8 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS_6500HF_B 109 //65 rack DVS #define IVMS_6200_C 110 // iVMS-6200(/C) #define IVMS_6200_B 111 // iVMS-6200(/B) -#define DS_72XXHV_ST15 112 //72XXHV_ST 3515ƽ̨ DVR -#define DS_72XXHV_ST20 113 //72XXHV_ST 3520ƽ̨ DVR +#define DS_72XXHV_ST15 112 //72XXHV_ST 3515平台 DVR +#define DS_72XXHV_ST20 113 //72XXHV_ST 3520平台 DVR #define IVMS_6200_T 114 // IVMS-6200(/T) #define IVMS_6200_BP 115 // IVMS-6200(/BP) #define DS_81XXHC_ST 116 //DS_81XXHC_ST @@ -8232,61 +8232,61 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS_81XXAHF_ST 119 //DS_81XXAHF_ST #define DS_66XXDVS 120 //66XX DVS -#define DS_1964_B10 121 /*Ƶۺƽ̨ڲ*/ -#define DS_B10N04_IN 122 /*Ƶۺƽ̨ڲ*/ -#define DS_B10N04_OUT 123 /*Ƶۺƽ̨ڲ*/ -#define DS_B10N04_INTEL 124 /*Ƶۺƽ̨ڲ*/ -#define DS_6408HFH_B10E_RM 125 //V6 -#define DS_B10N64F1_RTM 126 //V6DSP -#define DS_B10N64F1D_RTM 127 //V6DSP -#define DS_B10_SDS 128 //Ƶۺƽ̨ -#define DS_B10_DS 129 //Ƶۺƽ̨ -#define DS_6401HFH_B10V 130 //VGA -#define DS_6504D_B10B 131 /*Ƶۺƽ̨ڲ*/ -#define DS_6504D_B10H 132 /*Ƶۺƽ̨ڲ*/ -#define DS_6504D_B10V 133 /*Ƶۺƽ̨ڲVGA*/ -#define DS_6408HFH_B10S 134 //Ƶۺƽ̨SDIӰ -#define DS_18XX_N 135 /* */ -#define DS_6504HF_B10F_CLASS 136 //˻SD -#define DS_18XX_PTZ 141 /*Ʒ*/ -#define DS_19AXX 142 /*ͨñƷ*/ -#define DS_19BXX 143 /*ñ*/ -#define DS_19CXX 144 /*б*/ -#define DS_19DXX 145 /**/ -#define DS_19XX 146 /*1900ϵб*/ -#define DS_19SXX 147 /*Ƶ*/ -#define DS_1HXX 148 /*CSƷ*/ // -#define DS_PEAXX 149 /*һʽƷ*/ -#define DS_PWXX 150 /*߱Ʒ*/ -#define DS_PMXX 151 /*4Gģ*/ -#define DS_19DXX_S 152 /*Ƶ*/ -#define DS_PWAXX 153 /* Axiom Hub߱ */ -#define DS_PHAXX 154 /* Axiom Hybridϱ */ -#define DS_PHAProXX 155 /* Axiom Hybrid Proϱ*/ +#define DS_1964_B10 121 /*视频综合平台内部报警器*/ +#define DS_B10N04_IN 122 /*视频综合平台内部级联输入*/ +#define DS_B10N04_OUT 123 /*视频综合平台内部级联输出*/ +#define DS_B10N04_INTEL 124 /*视频综合平台内部智能*/ +#define DS_6408HFH_B10E_RM 125 //V6高清 +#define DS_B10N64F1_RTM 126 //V6级联不带DSP +#define DS_B10N64F1D_RTM 127 //V6级联带DSP +#define DS_B10_SDS 128 //视频综合平台子域控制器 +#define DS_B10_DS 129 //视频综合平台域控制器 +#define DS_6401HFH_B10V 130 //VGA高清编码器 +#define DS_6504D_B10B 131 /*视频综合平台内部标清解码器*/ +#define DS_6504D_B10H 132 /*视频综合平台内部高清解码器*/ +#define DS_6504D_B10V 133 /*视频综合平台内部VGA解码器*/ +#define DS_6408HFH_B10S 134 //视频综合平台SDI子板 +#define DS_18XX_N 135 /* 矩阵接入网关*/ +#define DS_6504HF_B10F_CLASS 136 //光端机SD +#define DS_18XX_PTZ 141 /*网络码分类产品*/ +#define DS_19AXX 142 /*通用报警主机类产品*/ +#define DS_19BXX 143 /*家用报警主机*/ +#define DS_19CXX 144 /*自助银行报警主机*/ +#define DS_19DXX 145 /*动环布防报警主机*/ +#define DS_19XX 146 /*1900系列报警主机*/ +#define DS_19SXX 147 /*视频报警主机*/ +#define DS_1HXX 148 /*CS类产品*/ //防护舱 +#define DS_PEAXX 149 /*一键式紧急报警产品*/ +#define DS_PWXX 150 /*无线报警主机产品*/ +#define DS_PMXX 151 /*4G网络模块*/ +#define DS_19DXX_S 152 /*视频动环布防主机*/ +#define DS_PWAXX 153 /* Axiom Hub无线报警主机 */ +#define DS_PHAXX 154 /* Axiom Hybrid混合报警主机 */ +#define DS_PHAProXX 155 /* Axiom Hybrid Pro混合报警主机*/ //2011-11-30 -#define DS_C10H 161 /**/ -#define DS_C10N_BI 162 //BNC -#define DS_C10N_DI 163 //rbg -#define DS_C10N_SI 164 // -#define DS_C10N_DO 165 //ʾ -#define DS_C10N_SERVER 166 //ֲʽ +#define DS_C10H 161 /*多屏控制器*/ +#define DS_C10N_BI 162 //BNC处理器 +#define DS_C10N_DI 163 //rbg处理器 +#define DS_C10N_SI 164 //码流处理器 +#define DS_C10N_DO 165 //显示处理器 +#define DS_C10N_SERVER 166 //分布式服务器 #define IDS_8104_AHFL_S_H 171 // 8104ATM #define IDS_65XX_HF_A 172 // 65 ATM -#define IDS90XX_HF_RH 173 // 9000 RH -#define IDS91XX_HF_RH 174 // 9100 RH豸 -#define IDS_65XX_HF_B 175 // 65 쳣Ϊ -#define IDS_65XX_HF_P 176 // 65 ʶ +#define IDS90XX_HF_RH 173 // 9000 智能RH +#define IDS91XX_HF_RH 174 // 9100 智能RH设备 +#define IDS_65XX_HF_B 175 // 65 异常行为检测 +#define IDS_65XX_HF_P 176 // 65 车牌识别 #define IVMS_6200_F 177 // IVMS-6200(/F) #define IVMS_6200_A 178 //iVMS-6200(/A) -#define IVMS_6200_F_S 179 // IVMS-6200(/F_S) +#define IVMS_6200_F_S 179 // IVMS-6200(/F_S)人脸后检索分析仪 #define DS90XX_HF_RH 181 // 9000 RH 648 -#define DS91XX_HF_RH 182 // 9100 RH豸 648 -#define DS78XX_S 183 // 78ϵ豸 6446 +#define DS91XX_HF_RH 182 // 9100 RH设备 648 +#define DS78XX_S 183 // 78系列设备 6446 #define DS81XXHW_S 185 // 81 Resolution 960 KY2011 #define DS81XXHW_ST 186 // DS81XXHW_ST KY2011 #define DS91XXHW_ST 187 // DS91XXHW_ST KY2011 @@ -8294,8 +8294,8 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS81XX_ST 189 // DS81XX_ST netra #define DS81XXHX_ST 190 // DS81XXHDI_ST,DS81XXHE_ST ky2012 #define DS73XXHX_ST 191 // DS73XXHI_ST ky2012 -#define DS81XX_SH 192 // Ѷ81SH,81SHF -#define DS81XX_SN 193 // Ѷ81SNL +#define DS81XX_SH 192 // 审讯81SH,81SHF +#define DS81XX_SN 193 // 审讯81SNL #define DS96XXN_ST 194 //NVR:DS96xxN_ST #define DS86XXN_ST 195 //NVR:DS86xxN_ST @@ -8304,363 +8304,363 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS76XXN_ST 198 //NVR:DS76xxN_ST #define DS_9664N_RX 199 //NVR:DS_9664N_RX -#define ENCODER_SERVER 200 // 뿨 -#define DECODER_SERVER 201 // 뿨 -#define PCNVR_SERVER 202 // PCNVR洢 -#define CVR_SERVER 203 // ŵCVRԼΪDVR_S-1 -#define DS_91XXHFH_ST 204 // 91ϵHD-SDIDVR -#define DS_66XXHFH 205 // 66 -#define TRAFFIC_TS_SERVER 210 //ն˷ -#define TRAFFIC_VAR 211 //Ƶ¼ -#define IPCALL 212 //IPӶԽֻ -#define SAN_SERVER 213 //CVR_SERVERͬijֻģʽͬ +#define ENCODER_SERVER 200 // 编码卡服务器 +#define DECODER_SERVER 201 // 解码卡服务器 +#define PCNVR_SERVER 202 // PCNVR存储服务器 +#define CVR_SERVER 203 // 邦诺CVR,他给自己定的类型为DVR_S-1 +#define DS_91XXHFH_ST 204 // 91系列HD-SDI高清DVR +#define DS_66XXHFH 205 // 66高清编码器 +#define TRAFFIC_TS_SERVER 210 //终端服务器 +#define TRAFFIC_VAR 211 //视频分析记录仪 +#define IPCALL 212 //IP可视对讲分机 +#define SAN_SERVER 213 //与CVR_SERVER相同的程序,只是模式不同 -#define DS_B11_M_CLASS 301 /*Ƶۺƽ̨豸ͺ*/ -#define DS_B12_M_CLASS 302 /*Ƶۺƽ̨豸ͺ*/ -#define DS_6504HF_B11_CLASS 303 /*Ƶۺƽ̨ڲ*/ -#define DS_6504HF_B12_CLASS 304 /*Ƶۺƽ̨ڲ*/ -#define DS_6401HFH_B11V_CLASS 305 //VGA -#define DS_6401HFH_B12V_CLASS 306 //VGA +#define DS_B11_M_CLASS 301 /*视频综合平台设备型号*/ +#define DS_B12_M_CLASS 302 /*视频综合平台设备型号*/ +#define DS_6504HF_B11_CLASS 303 /*视频综合平台内部编码器*/ +#define DS_6504HF_B12_CLASS 304 /*视频综合平台内部编码器*/ +#define DS_6401HFH_B11V_CLASS 305 //VGA高清 +#define DS_6401HFH_B12V_CLASS 306 //VGA高清 #define DS_6408HFH_B11S_CLASS 307 //SDI #define DS_6408HFH_B12S_CLASS 308 //SDI -#define DS_6504D_B11H_CLASS 309 /*Ƶۺƽ̨ڲ*/ -#define DS_6504D_B11B_CLASS 310 /*Ƶۺƽ̨ڲ*/ -#define DS_6504D_B12B_CLASS 311 /*Ƶۺƽ̨ڲ*/ -#define DS_6504D_B11V_CLASS 312 /*Ƶۺƽ̨ڲVGA*/ -#define DS_6504D_B12V_CLASS 313 /*Ƶۺƽ̨ڲVGA*/ -//B10 -#define DS_6401HFH_B10R_CLASS 314 //B10 RGB -#define DS_6401HFH_B10D_CLASS 315 //B10 DVI -#define DS_6401HFH_B10H_CLASS 316 //B10 HDMI -//B11 -#define DS_6401HFH_B11R_CLASS 317 //B11 RGB -#define DS_6401HFH_B11D_CLASS 318 //B11 DVI -#define DS_6401HFH_B11H_CLASS 319 //B11 HDMI -//B12 -#define DS_6401HFH_B12R_CLASS 320 //B12 RGB -#define DS_6401HFH_B12D_CLASS 321 //B12 DVI -#define DS_6401HFH_B12H_CLASS 322 //B12 HDMI -#define DS_65XXD_B10Ex_CLASS 323 //netra +#define DS_6504D_B11H_CLASS 309 /*视频综合平台内部高清解码器*/ +#define DS_6504D_B11B_CLASS 310 /*视频综合平台内部标清解码器*/ +#define DS_6504D_B12B_CLASS 311 /*视频综合平台内部标清解码器*/ +#define DS_6504D_B11V_CLASS 312 /*视频综合平台内部VGA解码器*/ +#define DS_6504D_B12V_CLASS 313 /*视频综合平台内部VGA解码器*/ +//B10新增 +#define DS_6401HFH_B10R_CLASS 314 //B10 RGB高清 +#define DS_6401HFH_B10D_CLASS 315 //B10 DVI高清 +#define DS_6401HFH_B10H_CLASS 316 //B10 HDMI高清 +//B11新增 +#define DS_6401HFH_B11R_CLASS 317 //B11 RGB高清 +#define DS_6401HFH_B11D_CLASS 318 //B11 DVI高清 +#define DS_6401HFH_B11H_CLASS 319 //B11 HDMI高清 +//B12新增 +#define DS_6401HFH_B12R_CLASS 320 //B12 RGB高清 +#define DS_6401HFH_B12D_CLASS 321 //B12 DVI高清 +#define DS_6401HFH_B12H_CLASS 322 //B12 HDMI高清 +#define DS_65XXD_B10Ex_CLASS 323 //netra高清解码 -//B10 V2.1 -#define DS_6516HW_B10_CLASS 324 //netra߱ -#define DS_6401HFH_B10F_RX_CLASS 326 //˻루֧1/2·˻룩 -#define DS_6502HW_B10F_RX_CLASS 327 //960H˻루֧1/4/8·˻룩 -//2012-5-16 -#define DS_6504D_B11Ex_CLASS 328 //netra -#define DS_6504D_B12Ex_CLASS 329 //netra -#define DS_6512_B11_CLASS 330 //netra߱ -#define DS_6512_B12_CLASS 331 //netra߱ -#define DS_6504D_B10H_CLASS 332 //Ƶۺƽ̨ڲ +//B10 V2.1新增 +#define DS_6516HW_B10_CLASS 324 //netra高线编码 +#define DS_6401HFH_B10F_RX_CLASS 326 //高清光端机接入(支持1/2路光端机接入) +#define DS_6502HW_B10F_RX_CLASS 327 //960H光端机接入(支持1/4/8路光端机接入) +//2012-5-16新增 +#define DS_6504D_B11Ex_CLASS 328 //netra高清解码 +#define DS_6504D_B12Ex_CLASS 329 //netra高清解码 +#define DS_6512_B11_CLASS 330 //netra高线编码 +#define DS_6512_B12_CLASS 331 //netra高线编码 +#define DS_6504D_B10H_CLASS 332 //视频综合平台内部高清解码器 -#define DS_65XXT_B10_CLASS 333 //Ƶۺƽ̨תϵͳ -#define DS_65XXD_B10_CLASS 335 //Ƶۺƽ̨ -#define DS_IVMSE_B10X_CLASS 336 //X86ϵͳ -#define DS_6532D_B10ES_CLASS 337 //ǿͽ_SDI(B10) -#define DS_6508HFH_B10ES_CLASS 338 //SDIϵͳ -#define DS_82NCG_CLASS 340 //еϵͳ -#define DS_82VAG_CLASS 341 //еϵͳ -#define DS_1802XXF_B10_CLASS 342 //ڽϵͳ -#define iDS_6504_B10EVAC_CLASS 343 //ϵͳ -#define iDS_6504_B10EDEC_CLASS 344 //ϵͳ -#define DS_6402HFH_B10EV_CLASS 345 //netra(VGA) -#define DS_6402HFH_B10ED_CLASS 346 //netra(DVI) -#define DS_6402HFH_B10EH_CLASS 347 //netra(HDMI) -#define DS_6404HFH_B10T_RX_CLASS 348 //˽ -#define DS_6504D_AIO_CLASS 349 //netra -#define DS_IVMST_B10_CLASS 350 //X86תϵͳ -#define DS_6402_AIO_CLASS 351 //netra -#define DS_iVMSE_AIO_CLASS 352 //x86ϵͳ -#define DS_AIO_M_CLASS 353 //һ +#define DS_65XXT_B10_CLASS 333 //视频综合平台转码子系统 +#define DS_65XXD_B10_CLASS 335 //视频综合平台解码板 +#define DS_IVMSE_B10X_CLASS 336 //X86服务器子系统 +#define DS_6532D_B10ES_CLASS 337 //增强型解码板_SDI(B10) +#define DS_6508HFH_B10ES_CLASS 338 //SDI输入编码子系统 +#define DS_82NCG_CLASS 340 //联网网关中的子系统 +#define DS_82VAG_CLASS 341 //联网网关中的子系统 +#define DS_1802XXF_B10_CLASS 342 //光口交换子系统 +#define iDS_6504_B10EVAC_CLASS 343 //智能子系统 +#define iDS_6504_B10EDEC_CLASS 344 //智能子系统 +#define DS_6402HFH_B10EV_CLASS 345 //netra编码(VGA) +#define DS_6402HFH_B10ED_CLASS 346 //netra编码(DVI) +#define DS_6402HFH_B10EH_CLASS 347 //netra编码(HDMI) +#define DS_6404HFH_B10T_RX_CLASS 348 //光纤接入编码 +#define DS_6504D_AIO_CLASS 349 //netra高清解码 +#define DS_IVMST_B10_CLASS 350 //X86转码子系统 +#define DS_6402_AIO_CLASS 351 //netra编码 +#define DS_iVMSE_AIO_CLASS 352 //x86服务器子系统 +#define DS_AIO_M_CLASS 353 //一体机 -#define DS_6508HF_B10E_CLASS 355 //BNCϵͳ -#define DS_6404HFH_B10ES_CLASS 356 //SDIϵͳ -#define DS_6402HFH_B10ER_CLASS 358 //RGBϵͳ -#define DS_6404HFH_B10T_RM_CLASS 361 //ϵͳ -#define DS_6516D_B10EB_CLASS 362 //BNCϵͳ -#define DS_6516D_B10ES_CLASS 363 //SDIϵͳ +#define DS_6508HF_B10E_CLASS 355 //BNC输入编码子系统 +#define DS_6404HFH_B10ES_CLASS 356 //SDI输入编码子系统 +#define DS_6402HFH_B10ER_CLASS 358 //RGB输入编码子系统 +#define DS_6404HFH_B10T_RM_CLASS 361 //光纤输入编码子系统 +#define DS_6516D_B10EB_CLASS 362 //BNC输出解码子系统 +#define DS_6516D_B10ES_CLASS 363 //SDI输出解码子系统 -//DVI/HDMI/VGAԽ빫һ +//DVI/HDMI/VGA畅显解码公用一个类型 #define DS_6508D_B10FH_CLASS 364 #define DS_6508D_B10FD_CLASS 364 #define DS_6508D_B10FV_CLASS 364 -#define DS_6508_B11E_CLASS 365 //BNCϵͳ -#define DS_6402_B11ES_CLASS 366 //SDIϵͳ -#define DS_6402_B11EV_CLASS 367 //VGAϵͳ -#define DS_6402_B11ER_CLASS 368 //RGBϵͳ -#define DS_6402_B11ED_CLASS 369 //DVIϵͳ -#define DS_6402_B11EH_CLASS 370 //HDMIϵͳ -#define DS_6516D_B11EB_CLASS 371 //BNCϵͳ -#define DS_6516D_B11ES_CLASS 372 //SDIϵͳ +#define DS_6508_B11E_CLASS 365 //BNC输入编码子系统 +#define DS_6402_B11ES_CLASS 366 //SDI输入编码子系统 +#define DS_6402_B11EV_CLASS 367 //VGA输入编码子系统 +#define DS_6402_B11ER_CLASS 368 //RGB输入编码子系统 +#define DS_6402_B11ED_CLASS 369 //DVI输入编码子系统 +#define DS_6402_B11EH_CLASS 370 //HDMI输入编码子系统 +#define DS_6516D_B11EB_CLASS 371 //BNC输出解码子系统 +#define DS_6516D_B11ES_CLASS 372 //SDI输出解码子系统 -#define DS_6508_B12E_CLASS 373 //BNCϵͳ -#define DS_6402_B12ES_CLASS 375 //SDIϵͳ -#define DS_6402_B12EV_CLASS 376 //VGAϵͳ -#define DS_6402_B12ER_CLASS 377 //RGBϵͳ -#define DS_6402_B12ED_CLASS 378 //DVIϵͳ -#define DS_6402_B12EH_CLASS 379 //HDMIϵͳ -#define DS_6516D_B12EB_CLASS 380 //BNCϵͳ +#define DS_6508_B12E_CLASS 373 //BNC输入编码子系统 +#define DS_6402_B12ES_CLASS 375 //SDI输入编码子系统 +#define DS_6402_B12EV_CLASS 376 //VGA输入编码子系统 +#define DS_6402_B12ER_CLASS 377 //RGB输入编码子系统 +#define DS_6402_B12ED_CLASS 378 //DVI输入编码子系统 +#define DS_6402_B12EH_CLASS 379 //HDMI输入编码子系统 +#define DS_6516D_B12EB_CLASS 380 //BNC输出解码子系统 -#define DS_iVMSE_AIO_8100x_CLASS 381 //ҵһX86ϵͳ -#define DS_iVMSE_AIO_87x_CLASS 382 //¥һX86ϵͳ -#define DS_6532D_B11ES_CLASS 384 //ǿͽ_SDI(B11) -#define DS_6532D_B12ES_CLASS 385 //ǿͽ_SDI(B12) -//B20 -#define DS_B20_MSU_NP 400 //B20ذ -#define DS_6416HFH_B20S 401 //SDI -#define DS_6416HFH_B20_RM 402 // -#define DS_6564D_B20D 403 //DVI -#define DS_6564D_B20H 404 //HDMI -#define DS_6564D_B20V 405 //VGA -#define DS_B20_6516D_DEV_CLASS 406 //B20ϵͳ -#define DS_6408HFH_B20V 407 //VGA -#define DS_MMC_B20_CLASS 408 //B20 -#define DS_CARD_CHIP_B20_CLASS 409 //B20Ӱ -#define DS_6564D_B20B_DEV_CLASS 410 //BNCϵͳ -#define DS_6564D_B20S_DEV_CLASS 411 //SDIϵͳ -#define DS_6532HF_B20B_DEV_CLASS 412 //BNCϵͳ -#define DS_6408HFH_B20D_DEV_CLASS 413 //DVIϵͳ -#define DS_6408HFH_B20H_DEV_CLASS 414 //HDMIϵͳ -#define DS_IVMSE_B20_CLASS 415 //X86ϵͳ -#define DS_6402HFH_B20Y_DEV_CLASS 416 //YUVϵͳ -#define DS_6508HW_B20_DEV_CLASS 417 //HWϵͳ -#define DS_B20N128Fx_B20_DEV_CLASS 418 //DS_B20N128Fx_M -#define DS_AIO_MCU_NP_DEV_CLASS 419 //IOذ -#define DS_6402_AIO_EV_DEV_CLASS 420 //VGA -#define DS_6508D_AIO_EV_DEV_CLASS 421 //VGA -#define DS_6508D_AIO_ED_DEV_CLASS 422 //DVI -#define DS_6508D_AIO_EH_DEV_CLASS 423 //HDMI -#define DS_6508HD_B20F_DEV_CLASS 424 //Ƶǿ -#define DS_6402HFH_B20ES_DEV_CLASS 425 //3G SID -#define DS_6532D_B20_DEV_CLASS 426 //B20ϵͳ -#define DS_IVMST_B20_DEV_CLASS 427 //X86ϵͳ -#define DS_6416HFH_B20DD_DEV_CLASS 428 //DVI˫· -#define DS_6441VS_B20_DEV_CLASS 429 //ƴ +#define DS_iVMSE_AIO_8100x_CLASS 381 //金融行业一体机X86子系统 +#define DS_iVMSE_AIO_87x_CLASS 382 //智能楼宇一体机X86子系统 +#define DS_6532D_B11ES_CLASS 384 //增强型解码板_SDI(B11) +#define DS_6532D_B12ES_CLASS 385 //增强型解码板_SDI(B12) +//B20新增 +#define DS_B20_MSU_NP 400 //B20主控板 +#define DS_6416HFH_B20S 401 //SDI输入编码 +#define DS_6416HFH_B20_RM 402 //光纤输入高清编码 +#define DS_6564D_B20D 403 //DVI解码 +#define DS_6564D_B20H 404 //HDMI解码 +#define DS_6564D_B20V 405 //VGA解码 +#define DS_B20_6516D_DEV_CLASS 406 //B20解码子系统 +#define DS_6408HFH_B20V 407 //VGA编码板 +#define DS_MMC_B20_CLASS 408 //B20主控 +#define DS_CARD_CHIP_B20_CLASS 409 //B20主控子板 +#define DS_6564D_B20B_DEV_CLASS 410 //BNC解码子系统 +#define DS_6564D_B20S_DEV_CLASS 411 //SDI解码子系统 +#define DS_6532HF_B20B_DEV_CLASS 412 //BNC编码子系统 +#define DS_6408HFH_B20D_DEV_CLASS 413 //DVI编码子系统 +#define DS_6408HFH_B20H_DEV_CLASS 414 //HDMI编码子系统 +#define DS_IVMSE_B20_CLASS 415 //X86服务器子系统 +#define DS_6402HFH_B20Y_DEV_CLASS 416 //YUV编码子系统 +#define DS_6508HW_B20_DEV_CLASS 417 //HW编码子系统 +#define DS_B20N128Fx_B20_DEV_CLASS 418 //DS_B20N128Fx_M级联板 +#define DS_AIO_MCU_NP_DEV_CLASS 419 //IO主控板 +#define DS_6402_AIO_EV_DEV_CLASS 420 //VGA编码 +#define DS_6508D_AIO_EV_DEV_CLASS 421 //VGA解码 +#define DS_6508D_AIO_ED_DEV_CLASS 422 //DVI解码 +#define DS_6508D_AIO_EH_DEV_CLASS 423 //HDMI解码 +#define DS_6508HD_B20F_DEV_CLASS 424 //视频增强板 +#define DS_6402HFH_B20ES_DEV_CLASS 425 //3G SID编码 +#define DS_6532D_B20_DEV_CLASS 426 //B20解码子系统 +#define DS_IVMST_B20_DEV_CLASS 427 //X86服务器子系统 +#define DS_6416HFH_B20DD_DEV_CLASS 428 //DVI双链路 +#define DS_6441VS_B20_DEV_CLASS 429 //相机拼接类型 #define DS_6404HFH_B20T_CLASS 431 //TVI -#define DS_FS22_B20_DEV_CLASS 432 //ϵͳ -#define DS_IVMSE_B20UH_DEV_CLASS 433 //X86 +#define DS_FS22_B20_DEV_CLASS 432 //交换机子系统 +#define DS_IVMSE_B20UH_DEV_CLASS 433 //超高清X86输入 #define IDS_6524J_B20_DEV_CLASS 434 #define IDS_6532B_B20_DEV_CLASS 435 -#define DS_6404HFH_B20Fx_DEV_CLASS 436 //˻ϵͳ -#define DS_N128x_B20Fy_CLASS 437 //ϵͳ -#define DS_181600F_B20_CLASS 438 //ϵͳ -#define DS_6904UD_B20H_CLASS 439 //ϵͳ +#define DS_6404HFH_B20Fx_DEV_CLASS 436 //光端机接入子系统 +#define DS_N128x_B20Fy_CLASS 437 //级联子系统 +#define DS_181600F_B20_CLASS 438 //网络光纤子系统 +#define DS_6904UD_B20H_CLASS 439 //超高清解码子系统 -#define DS_B21_MCU_NP_CLASS 440 //B21 -#define DS_B21_S10_x_CLASS 441 //B21 x = A/S/D -#define DS_6402HFH_B21D_CLASS 442 //B21ϵͳ -#define DS_6508HD_B21D_CLASS 443 //B21ϵͳ -#define DS_iVMSE_B21HW_CLASS 444 //B21 X86ϵͳ +#define DS_B21_MCU_NP_CLASS 440 //B21主控 +#define DS_B21_S10_x_CLASS 441 //B21机箱 x = A/S/D +#define DS_6402HFH_B21D_CLASS 442 //B21编码子系统 +#define DS_6508HD_B21D_CLASS 443 //B21解码子系统 +#define DS_iVMSE_B21HW_CLASS 444 //B21 X86子系统 -#define DS_C10S 501 //C10S ʽ -#define DS_C3X 502 //ʽƴӿ +#define DS_C10S 501 //C10S 集中式大屏控制器 +#define DS_C3X 502 //集中式拼接控制器 -#define DS_C10N_SDI 551 //SDI -#define DS_C10N_BIW 552 //8·BNC -#define DS_C10N_DON 553 //ʾ -#define DS_C10N_TVI 554 //TVI -#define DS_C10N_DI2 555 //DVI 2· -#define DS_C10N_AUDIO_OUT 556 //DVIHDMIVGAƵ -#define DS_C10N_AUDIO_IN 557 //DVIHDMIVGAƵ +#define DS_C10N_SDI 551 //SDI处理器 +#define DS_C10N_BIW 552 //8路BNC处理器 +#define DS_C10N_DON 553 //显示处理器 +#define DS_C10N_TVI 554 //TVI输入板 +#define DS_C10N_DI2 555 //DVI 2路输入板 +#define DS_C10N_AUDIO_OUT 556 //DVI,HDMI,VGA输出板带音频 +#define DS_C10N_AUDIO_IN 557 //DVI,HDMI,VGA输入板带音频 -//汾ķֲʽ -#define DS_C20N 570 //ֲʽ -#define DS_C20N_BNC 571 //BNC豸 -#define DS_C20N_DVI 572 //DVI豸 -#define DS_C20N_DP 573 //DP豸 -#define DS_C20N_OUT 574 //豸 +//软服务器版本的分布式大屏控制器 +#define DS_C20N 570 //分布式大屏控制器 +#define DS_C20N_BNC 571 //BNC输入设备 +#define DS_C20N_DVI 572 //DVI输入设备 +#define DS_C20N_DP 573 //DP输入设备 +#define DS_C20N_OUT 574 //输出设备 -//ʽ 5301 - 5350 50 -#define DS_C30 5301 //C30ʽƴӿ -#define DS_C31 5302 //C31ʽƴӿ -#define DS_M0804 5303 //M0804ƴӿ +//集中式多屏控制器 5301 - 5350 (50) +#define DS_C30 5301 //C30集中式拼接控制器 +#define DS_C31 5302 //C31集中式拼接控制器 +#define DS_M0804 5303 //M0804经济型拼接控制器 -//Ӳ汾ķֲʽ -#define DS_C20N_VWMS 5351 //C20N -#define DS_C20N_DI2 5352 //·DVI豸 -#define DS_C20N_DO2 5353 //·DVI豸 -#define DS_C20N_UHDI 5354 //DP/HDMI 1·4K豸 -#define DS_C20N_YI2 5355 //·YPbPr +//硬服务器版本的分布式大屏控制器 +#define DS_C20N_VWMS 5351 //C20N服务器 +#define DS_C20N_DI2 5352 //两路DVI输入设备 +#define DS_C20N_DO2 5353 //两路DVI输出设备 +#define DS_C20N_UHDI 5354 //DP/HDMI 1路4K超高清输入设备 +#define DS_C20N_YI2 5355 //两路YPbPr输入板 -#define DS_C12N_VWMS 5356 //C12N -#define DS_C12N_DO 5357 //1·DVI -#define DS_C12N_HOE 5358 //1·HDMI 4K +#define DS_C12N_VWMS 5356 //C12N服务器 +#define DS_C12N_DO 5357 //1路DVI输出 +#define DS_C12N_HOE 5358 //1路HDMI 4K输出 -#define DS_C20N_HI2 5359 // HDMIڵ(2·) -#define DS_C20N_VI2 5360 //VGAڵ(2·) -#define DS_C20N_SI2 5361 //SDIڵ(2·) -#define DS_C20N_HO2 5362 //HDMIڵ(2·) -#define DS_C20N_S24G 5363 //C20Nרǧ׽(24·) -#define DS_C20N_S24X 5364 //C20Nר׽(24·) -#define DS_C12A_0104H 5365 //ƴӿ -#define DS_C20N_DO2_V2 5366 //·DVI豸V2 -#define DS_C20N_HO2_V2 5367 //·HDMI豸V2 -#define DS_C21N 5368 //ֲʽ -#define DS_C21K 5369 //ϯKVMϵͳC21 -#define DS_68TS_A 5370 //һ +#define DS_C20N_HI2 5359 // HDMI输入节点(2路) +#define DS_C20N_VI2 5360 //VGA输入节点(2路) +#define DS_C20N_SI2 5361 //SDI输入节点(2路) +#define DS_C20N_HO2 5362 //HDMI输出节点(2路) +#define DS_C20N_S24G 5363 //C20N专用千兆交换机(24路) +#define DS_C20N_S24X 5364 //C20N专用万兆交换机(24路) +#define DS_C12A_0104H 5365 //创意拼接控制器 +#define DS_C20N_DO2_V2 5366 //两路DVI输出设备V2 +#define DS_C20N_HO2_V2 5367 //两路HDMI输出设备V2 +#define DS_C21N 5368 //分布式大屏控制器 +#define DS_C21K 5369 //坐席KVM系统C21 +#define DS_68TS_A 5370 //触控一体机 #define DS_C80X 5371 //C80N&&C80K -#define DS_C40X 5372 //C40X -#define DS_D5XK 5373 //ϯʾ +#define DS_C40X 5372 //单引擎C40X +#define DS_D5XK 5373 //坐席显示器 -//ȫϢʾ豸 -#define DS_D1HXX 5591 //ȫϢʾ豸 -#define DS_60SDL_X 5592 //Windows˫ն -#define DS_6043DL_B 5593 //׿˫43ն -#define DS_6049DL_B 5594 //׿˫49ն -#define DS_6055DL_B 5595 //׿˫55ն +//全息显示设备 +#define DS_D1HXX 5591 //全息显示设备 +#define DS_60SDL_X 5592 //Windows双面屏终端 +#define DS_6043DL_B 5593 //安卓双面屏43寸终端 +#define DS_6049DL_B 5594 //安卓双面屏49寸终端 +#define DS_6055DL_B 5595 //安卓双面屏55寸终端 -//ߴ豸 -#define ELEVATO_BRIDGE 5751 //ߵ -#define DS_3WF01S_5NG_M 5752 //5.8G1߹ -#define DS_3WF0EC_2N_D 5753 //2.4G500 -#define DS_3WF0EC_5ACT 5754 //5.8G 11ac -#define DS_3WF03S_5AC 5755 //5.8G 3ᆳ -#define DS_3WF0ES_5AC_H 5756 //5.8G500׸ߴ͸ -#define DS_3WF05S_5AC_H 5765 //5.8G 5KMǧڲ -#define DS_3WSXXX 5766 //·ϵУAC -#define DS_3WAXXX 5767 //APϵ -#define DS_3WAXXXP 5768 //APϵ -#define DS_3WRXXX 5769 //ͨ·ϵ -#define DS_3WMRXXX 5770 //MESH·ϵ -#define DS_3WAX18 5881 //AP +//无线传输设备 +#define ELEVATO_BRIDGE 5751 //无线电梯网桥 +#define DS_3WF01S_5NG_M 5752 //5.8G室外1公里无线工地网 +#define DS_3WF0EC_2N_D 5753 //2.4G室外500米网桥 +#define DS_3WF0EC_5ACT 5754 //5.8G 11ac电梯网桥 +#define DS_3WF03S_5AC 5755 //5.8G 3公里经济型网桥 +#define DS_3WF0ES_5AC_H 5756 //5.8G室外500米高穿透网桥 +#define DS_3WF05S_5AC_H 5765 //5.8G 5KM千兆网口拨码网桥 +#define DS_3WSXXX 5766 //网关路由器系列(包括AC控制器) +#define DS_3WAXXX 5767 //吸顶、室外AP系列 +#define DS_3WAXXXP 5768 //面板AP系列 +#define DS_3WRXXX 5769 //普通无线路由器系列 +#define DS_3WMRXXX 5770 //MESH路由器系列 +#define DS_3WAX18 5881 //室外AP -//豸 -#define DS_3CXXXX 5891 //ͳһƽ̨ +//网络设备管理类 +#define DS_3CXXXX 5891 //统一网络管理平台 -//豸 -#define DS_19M00_MN 601 //ģ -#define DS_KH8302_A 602 //ڻ -#define DS_KD8101_2 603 //ſڻ -#define DS_KM8301 604 // -#define DS_KVXXXX_XX 605 //ſڻ -#define DS_LHPM1D_C 606 //Ƶ -#define DS_KAM03 607 //תģ -#define DS_KDXXX 608 //ܽնˣҵDS-KD9623-F-JPDS-KD9623-FC-JPDS-KD9803-F-JPҽҵDS-KD9803-3XF5G-HIDS-KD9803-3XFW-HIDS-KD9803-W-HI +//报警设备 +#define DS_19M00_MN 601 //报警主机百兆网络模块 +#define DS_KH8302_A 602 //室内机 +#define DS_KD8101_2 603 //门口机 +#define DS_KM8301 604 //管理机 +#define DS_KVXXXX_XX 605 //别墅门口机 +#define DS_LHPM1D_C 606 //酒店锁 +#define DS_KAM03 607 //半数字转接模块 +#define DS_KDXXX 608 //智能交互终端,监所行业DS-KD9623-F-JP,DS-KD9623-FC-JP,DS-KD9803-F-JP医疗行业:DS-KD9803-3XF5G-HI,DS-KD9803-3XFW-HI,DS-KD9803-W-HI -#define DS64XXHD_T 701 //64-T -#define DS_65XXD 703 //65 -#define DS63XXD_T 704 //63-T -#define SCE_SERVER 705 //ץ -#define DS_64XXHD_S 706 //64XXHD-S -#define DS_68XXT 707 //๦Ƶת -#define DS_65XXD_T 708 //65D-T -#define DS_65XXHD_T 709 //65HD-T -#define DS_69XXUD 710 //69XXUD -#define DS_65XXUD 711 //65XXUD -#define DS_65XXUD_L 712 //65XXUD_L -#define DS_65XXUD_T 713 //65XXUD_T +#define DS64XXHD_T 701 //64-T高清解码器 +#define DS_65XXD 703 //65解码器 +#define DS63XXD_T 704 //63-T标清解码器 +#define SCE_SERVER 705 //抓屏服务器 +#define DS_64XXHD_S 706 //64XXHD-S高清解码器 +#define DS_68XXT 707 //多功能视音频转码器 +#define DS_65XXD_T 708 //65D-T解码器 +#define DS_65XXHD_T 709 //65HD-T解码器 +#define DS_69XXUD 710 //69XXUD超高清解码器 +#define DS_65XXUD 711 //65XXUD解码器 +#define DS_65XXUD_L 712 //65XXUD_L解码器 +#define DS_65XXUD_T 713 //65XXUD_T解码器 -#define DS_D20XX 750 //LCDĻ 뿨 -//SDI -#define DS_C50S 751 //SDI -#define DS_D50XX 752 //LCDĻ 뿨 +#define DS_D20XX 750 //LCD屏幕 解码卡 +//SDI矩阵 +#define DS_C50S 751 //SDI矩阵 +#define DS_D50XX 752 //LCD屏幕 解码卡 -#define DS_D40 760 //LEDͿ +#define DS_D40 760 //LED屏发送卡 -#define DS_65VMXX 770 //Ƶ -#define DS_65VTXX 771 //Ƶն -#define DS_65VTA 772 //Ƶһʽն -#define DS_65VT_RX 773 //ѧն -#define DS_65VM_MCU_NP 774 //MCU +#define DS_65VMXX 770 //视频会议服务器 +#define DS_65VTXX 771 //视频会议终端 +#define DS_65VTA 772 //视频会议一体式终端 +#define DS_65VT_RX 773 //互动教学终端 +#define DS_65VM_MCU_NP 774 //大容量MCU -#define DS_CS_SERVER 800 // -#define DS_68GAP_MCU 831 //Ƶբ -#define DS_K260X 850 //Ž -#define DS_K1TXXX 851 //ָһ -#define DS_K280X 852 //Ž -#define DS_K281X 853 //ŽDS-K281Xϵ -#define DS_K1T80X 854 //Žһ -#define RAC_6X00 856 //ָŽһ -#define DS_K2602_AX 857 //Աͨ -#define DS_K1T803F 858 //ָŽƷ -#define DS_K2700 859 //ֲʽܹŽ -#define DS_K27M0X 860 //ֲʽܹ͵ؿ -#define DS_K1T500S 861 //Žһ -#define DS_K1A801F 862 //ָŽƷ -#define DS_K1T600X 863 //ĿʶŽһ -#define DS_K22X 864 //ݿ -#define DS_K2M0016AX 865 //ݿطֿ -#define DS_K2602S_AX 867 //ԱͨƷ -#define DS_K560XX 870 //ʽ/̨ʽʶն -#define DS_K260X_E 873 //ͶŽ -#define DS_K5603X 874 //̨ʽ/ڹʽǶʽ֤豸 -#define DS_K3M200X 875 //Ȩ޿ -#define DS_K3M100X 879 //ͨ -#define DS_K1T8101XT 881 //ĿʶŽһ -#define DS_K1T8101XX 882 //ĿʶŽһ -#define DS_K5604 883 //5604֤豸 -#define DS_K1T607XXXX 884 //жŽһDS_K1T607M/MF/E/EF/MG/MFG?MW/MFW/TM/TMF/TE/TEF/TMG/TMFG/TMW/TMFW -#define DS_K1A850X 885 //Ͷ˾ָƿڻ -#define DS_K1T800X 886 //Ͷ˾ָŽһ -#define DS_K1T610XXXX 887 //жŽһDS_K1T610M/MF/E/EF/MG/MFG?MW/MFW/TM/TMF/TE/TEF/TMG/TMFG/TMW/TMFW -#define DS_K1T8115X 888 //DS-K1T8115DS-K1T8115MDS-K1T8115M-Z Ŀʶһ -#define DS_K1T815LC_M 889 //Ŀʶһ -#define DS_K1T606M_Z 890 //Ŀʶһ -#define DS_K5607_XXX 891 //K5607ᱡͨ -#define DS_K1T806X 892 //Ͷ˾ŽһDS-K1T806ϵ -#define DS_K1T950MX 893 //ָŽһ -#define DS_K1T331XX 894 //ͶŽһ -#define DS_K1T671T 895 //Žһ -#define DS_K1T671 896 //Žһ -#define DS_K5671 897 //ᱡͨ -#define DS_K1T640 898 //4.3Žһ -#define DS_K1A802A 899 //ָƿڻ +#define DS_CS_SERVER 800 //虚拟屏服务器 +#define DS_68GAP_MCU 831 //视频网闸 +#define DS_K260X 850 //门禁主机 +#define DS_K1TXXX 851 //指纹一体机 +#define DS_K280X 852 //经济型门禁主机 +#define DS_K281X 853 //门禁主机DS-K281X系列 +#define DS_K1T80X 854 //经济型门禁一体机 +#define RAC_6X00 856 //汉军指纹门禁一体机 +#define DS_K2602_AX 857 //人员通道主机 +#define DS_K1T803F 858 //经济型指纹门禁产品 +#define DS_K2700 859 //分布式三层架构门禁主机 +#define DS_K27M0X 860 //分布式三层架构就地控制器 +#define DS_K1T500S 861 //视屏门禁一体机 +#define DS_K1A801F 862 //经济型指纹门禁产品 +#define DS_K1T600X 863 //目标识别门禁一体机 +#define DS_K22X 864 //梯控主控制器 +#define DS_K2M0016AX 865 //梯控分控制器 +#define DS_K2602S_AX 867 //人员通道产品 +#define DS_K560XX 870 //立式/台式智能识别终端 +#define DS_K260X_E 873 //低端门禁主机 +#define DS_K5603X 874 //台式/壁挂式嵌入式人证设备 +#define DS_K3M200X 875 //权限控制器 +#define DS_K3M100X 879 //通道控制器 +#define DS_K1T8101XT 881 //经销型目标识别门禁一体机 +#define DS_K1T8101XX 882 //经销型目标识别门禁一体机 +#define DS_K5604 883 //5604人证设备 +#define DS_K1T607XXXX 884 //中端人脸门禁一体机DS_K1T607(M/MF/E/EF/MG/MFG?MW/MFW/TM/TMF/TE/TEF/TMG/TMFG/TMW/TMFW) +#define DS_K1A850X 885 //低端经销指纹考勤机 +#define DS_K1T800X 886 //低端经销指纹门禁一体机 +#define DS_K1T610XXXX 887 //中端人脸门禁一体机DS_K1T610(M/MF/E/EF/MG/MFG?MW/MFW/TM/TMF/TE/TEF/TMG/TMFG/TMW/TMFW) +#define DS_K1T8115X 888 //DS-K1T8115、DS-K1T8115M、DS-K1T8115M-Z 经销型目标识别一体机 +#define DS_K1T815LC_M 889 //经销型目标识别一体机 +#define DS_K1T606M_Z 890 //经销型目标识别一体机 +#define DS_K5607_XXX 891 //K5607轻薄款通道人脸组件 +#define DS_K1T806X 892 //低端经销门禁一体机DS-K1T806系列 +#define DS_K1T950MX 893 //经销款人脸指纹门禁一体机 +#define DS_K1T331XX 894 //低端人脸门禁考勤一体机 +#define DS_K1T671T 895 //人脸门禁一体机 +#define DS_K1T671 896 //人脸门禁一体机 +#define DS_K5671 897 //轻薄款通道人脸组件 +#define DS_K1T640 898 //4.3寸人脸门禁一体机 +#define DS_K1A802A 899 //经济型指纹考勤机 -#define DS_6800M 900 //68M -#define DS_68NTH 901 //Ϣ -#define DS_D60S 902 //Ϣ -#define DS_D60W 903 //ϢWindowsն -#define DS_D10 931 //Ͷʾ豸 -#define DS_3K0X_NM 951 //շ -#define DS_3E2328 952 //׽ -#define DS_3E1528 953 //ǧ׽ -#define SCREEN_LINK_SERVER 971 //Ļ -#define DS_D51OPSXX 972 //OPSԺ -//һ廯̨ -#define IP_PTSYS_MEGA200 1001 //IP 200һ廯̨ -#define IPCAM_FISHEYE 1002 // -#define IPCAM_FISHEYE_E 1003 // +#define DS_6800M 900 //68M合码器 +#define DS_68NTH 901 //信息发布主机 +#define DS_D60S 902 //信息发布服务器 +#define DS_D60W 903 //信息发布Windows终端 +#define DS_D10 931 //背投显示设备 +#define DS_3K0X_NM 951 //光纤收发器 +#define DS_3E2328 952 //百兆交换机 +#define DS_3E1528 953 //千兆交换机 +#define SCREEN_LINK_SERVER 971 //屏幕服务器 +#define DS_D51OPSXX 972 //OPS电脑盒 +//一体化云台 +#define IP_PTSYS_MEGA200 1001 //IP 200万一体化云台 +#define IPCAM_FISHEYE 1002 //鱼眼摄像机 +#define IPCAM_FISHEYE_E 1003 //经济型鱼眼摄像机 -//68xxϵ˫Ŀ3D -#define IPCAM_BINOCULAR 1004 //˫Ŀ +//68xx系列双目3D相机 +#define IPCAM_BINOCULAR 1004 //双目摄像机 -#define IPCAM_365 1010 //֧365ƽ̨IPC CAM -#define IPCAM_R0 1011 //֧A5Sƽ̨IPC CAM -#define IPCAM_R1 1012 //֧385ƽ̨IPC CAM -#define IPCAM_R2 1013 //֧R2ƽ̨IPC CAM -#define IPCAM_R3 1014 //֧8127ƽ̨IPC CAM -#define IPCAM_R4 1015 //֧S2ƽ̨IPC CAM +#define IPCAM_365 1010 //支持365的平台的IPC CAM +#define IPCAM_R0 1011 //支持A5S的平台的IPC CAM +#define IPCAM_R1 1012 //支持385的平台的IPC CAM +#define IPCAM_R2 1013 //支持R2的平台的IPC CAM +#define IPCAM_R3 1014 //支持8127的平台的IPC CAM +#define IPCAM_R4 1015 //支持S2的平台的IPC CAM -#define IPDOME_365 1110 //֧365ƽ̨IPD CAM -#define IPDOME_R0 1111 //֧A5Sƽ̨IPD CAM -#define IPDOME_R1 1112 //֧385ƽ̨IPD CAM -#define IPDOME_R2 1113 //֧R2ƽ̨IPD CAM -#define IPDOME_R3 1114 //֧8127ƽ̨IPD CAM -#define IPDOME_R4 1115 //֧S2ƽ̨IPD CAM -#define ITCCAM_R3 1211 //֧8127ƽ̨ITCCAM +#define IPDOME_365 1110 //支持365的平台的IPD CAM +#define IPDOME_R0 1111 //支持A5S的平台的IPD CAM +#define IPDOME_R1 1112 //支持385的平台的IPD CAM +#define IPDOME_R2 1113 //支持R2的平台的IPD CAM +#define IPDOME_R3 1114 //支持8127的平台的IPD CAM +#define IPDOME_R4 1115 //支持S2的平台的IPD CAM +#define ITCCAM_R3 1211 //支持8127的平台的ITCCAM -//˻ҵ豸1300~1350 -#define UAV_S 1300 //˻վ豸 Ummanned Aerial Vehicle C Station +//无人机业务设备(1300~1350) +#define UAV_S 1300 //无人机基站设备 (Ummanned Aerial Vehicle – Station) -//豸 2013-11-19 -#define TRAFFIC_ECT 1400 //ECT豸 -#define TRAFFIC_PARKING_SERVER 1401 //ͣ -#define TRAFFIC_TME 1402 //ڿƻ +//新增设备类型 2013-11-19 +#define TRAFFIC_ECT 1400 //ECT设备类型 +#define TRAFFIC_PARKING_SERVER 1401 //停车场服务器 +#define TRAFFIC_TME 1402 //出入口控制机 // DVR -#define DS90XXHW_ST 2001 // DS90XXHW_STDVR +#define DS90XXHW_ST 2001 // DS90XXHW_ST混合DVR #define DS72XXHX_SH 2002 // DS-72xxHV_SH, DS-72xxHF-SH #define DS_92XX_HF_ST 2003 // DS-92XX-HF-ST #define DS_91XX_HF_XT 2004 // 9100DVR_HF_XT #define DS_90XX_HF_XT 2005 // 9000DVR_HF_XT #define DS_73XXHX_SH 2006 // 7300DVR_HX_SH #define DS_72XXHFH_ST 2007 // 7200DVR_HFH_ST -//DS_67ϵ +//DS_67系列 #define DS_67XXHF_SATA 2008 // DS-67XXHF-SATA #define DS_67XXHW 2009 // DS-67XXHW @@ -8673,16 +8673,16 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS_81XXHX_SH 2014 // 8100DVR_HX_SH -#define DS_71XXHX_SL 2015 //СDVR +#define DS_71XXHX_SL 2015 //小型DVR #define DS_76XXH_ST 2016 //DS_76XXH_ST -#define DS_73XXHFH_ST 2017 //73HFHϵ -#define DS_81XXHFH_ST 2018 //81HFHϵ ST +#define DS_73XXHFH_ST 2017 //73HFH系列 +#define DS_81XXHFH_ST 2018 //81HFH系列 ST #define DS_72XXHFH_SL 2019 //hi3521 -#define DS_FDXXCGA_FLT 2020 //2λATM +#define DS_FDXXCGA_FLT 2020 //2盘位ATM #define IDS_91XX_HF_ST_A 2100 //iDS-9100HF-ST/A #define IDS_91XX_HF_ST_B 2101 //iDS-9100HF-ST/B @@ -8692,8 +8692,8 @@ typedef enum tagALARMHOST_MINOR_TYPE #define IDS_81XX_HF_ST_B 2105 //iDS-8100HF-ST/B #define IDS_80XX_HF_ST_A 2106 //iDS-8000HF-ST/A #define IDS_80XX_HF_ST_B 2107 //iDS-8000HF-ST/B -#define IDS_8104_AHFL_ST 2108 //ܻATM -#define IDS_2CD6812F_C 2109 //ֱ˫Ŀ +#define IDS_8104_AHFL_ST 2108 //智能混合ATM机 +#define IDS_2CD6812F_C 2109 //垂直双目相机 // NVR @@ -8703,54 +8703,54 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS_96XX_N_XT 2204 // 9600NVR_N_XT #define DS_76XX_N_SE 2205 // 7600NVR_N_SE -//Ѷ -#define DS_86XXSN_SX 2206 // 8608NVR_SX4DS-8608SNL-SPDS-8608SNL-STDS-8608SN-SPDS-8608SN-STLʾLCDPPOE +//高清审讯机 +#define DS_86XXSN_SX 2206 // 8608NVR_SX,包括4中类型DS-8608SNL-SP、DS-8608SNL-ST、DS-8608SN-SP、DS-8608SN-ST,L表示带LCD,P表POE //#define DS_96XX_N_RX 2207 //DS-96XX-N-RX -#define DS_71XXN_SL 2208 //DS-71XXN-SL òƷ -#define CS_N1_1XX 2209 //CS_N1_1XXҵ +#define DS_71XXN_SL 2208 //DS-71XXN-SL 民用产品 +#define CS_N1_1XX 2209 //CS_N1_1XX,民用事业部所用 -#define DS_71XXN_SN 2210 //71XX_N_SN òƷ -#define CS_N1_2XX 2211 //N1_2XX ҵ -#define DS_76XX_N_SHT 2212 //76XX_N_SHT ˻߲Ʒ -#define DS_96XXX_N_E 2213 //NVR(256) +#define DS_71XXN_SN 2210 //71XX_N_SN 经济型民用产品 +#define CS_N1_2XX 2211 //N1_2XX 民用事业部所用 +#define DS_76XX_N_SHT 2212 //76XX_N_SHT 后端基线产品 +#define DS_96XXX_N_E 2213 //高新性能NVR(256) -#define DS_76XXN_EX 2214 /* 76 78ϵNVRע 4 8 16·E1һλ 8 16 32· E2λ /N /P豸*/ -#define DS_77XXN_E4 2215/* 77ϵNVR ע8 16 32· /N /P豸*/ -#define DS_86XXN_E8 2216/* 86ϵNVR ע8 16 32· /N /P豸*/ +#define DS_76XXN_EX 2214 /* 76 78系列NVR,注:包括 4 8 16路的E1一盘位, 8 16 32路 E2两盘位; /N /P设备*/ +#define DS_77XXN_E4 2215/* 77系列NVR, 注:包括8 16 32路, /N /P设备*/ +#define DS_86XXN_E8 2216/* 86系列NVR, 注:包括8 16 32路, /N /P设备*/ #define DS_9616N_H8 2217 //DS_9616N_H8 -#define DS_72XXHX_EX_GXY 2218 //ʾ72ϵDVRƷ72xxʾͨHXĿǰHW,Ϊ˺չEXʾλG XYʾ -#define DS_76XXN_EX_GXY 2219 //ʾ76ϵNVRƷ76xxʾͨEXʾλG XYʾ +#define DS_72XXHX_EX_GXY 2218 //表示72系列无线DVR产品,其中72后面的xx表示通道数,H后的X目前仅有HW,为了后续扩展保留,E后面的X表示的是盘位数,G XY表示的是无线类型 +#define DS_76XXN_EX_GXY 2219 //表示是76系列无线NVR产品,其中76后面的xx表示通道数,E后面的X表示的是盘位数,G XY表示的是无线类型 #define DS_72XXHXH_SH_21 2220 // 72XXHXH_SH_21 #define DS_72XXHXH_SH_31 2221 // 72XXHXH_SH_31 #define DS_73XXHXH_SH_31 2222 // 73XXHXH_SH_31 #define DS_81XXHXH_SH_31 2223 // 81XXHXH_SH_31 #define DS_71XXHXH_SH_21 2224 // 71XXHXH_SH_21 #define DS_71XXHXH_SH_31 2225 // 71XXHXH_SH_31 -#define DS_NBXX_N_E1_X 2226 //Яʽ +#define DS_NBXX_N_E1_X 2226 //便携式主机 #define DS_96XXN_FX 2230 #define DS_86XXN_FX 2231 -#define DS_96XXXN_HX 2232 //96ϵ豸 +#define DS_96XXXN_HX 2232 //96系列设备 #define DS_86XXN_I 2233 //DS_86XXN_I #define DS_77XX_N_I 2234 //DS_77XX_N_I #define DS_76XX_N_I 2235 //DS_76XX_N_I #define DS_78XX_N_I 2236 //DS_78XX_N_I -#define DS_96XXXN_IX 2237 //DS-96XXX_N_IDS-96128N-I16DS-96128N-I24DS-96256N-I16DS-96256N-I24 +#define DS_96XXXN_IX 2237 //DS-96XXX_N_I(DS-96128N-I16、DS-96128N-I24、DS-96256N-I16、DS-96256N-I24) -#define DS_90XXHXH_XT 2238 //DS_90XXHXH_XTDS-9016HQH-XT +#define DS_90XXHXH_XT 2238 //DS_90XXHXH_XT(DS-9016HQH-XT) -#define DS_NVR_ALL 2239 //NVR豸ͳһ룬NVRƷѶϵУʹDS_NVR_ALL -#define DS_DVR_ALL 2240 //DVR豸ͳһ룬DVRƷѶϵУʹDS_DVR_ALL +#define DS_NVR_ALL 2239 //NVR设备统一类型码,后续所有NVR产品(包括已定义系列)都使用DS_NVR_ALL +#define DS_DVR_ALL 2240 //DVR设备统一类型码,后续所有DVR产品(包括已定义系列)都使用DS_DVR_ALL //PCNVR #define PCNVR_IVMS_4200 2301 // PCNVR_IVMS_4200 -//ܷ -#define IVMS_6200_TP 2401 //IVMS-6200 ͨյ -#define IVMS_6200_TF 2402 //IVMS-6200 ͨȡ֤ +//智能分析仪 +#define IVMS_6200_TP 2401 //IVMS-6200 交通诱导分析仪 +#define IVMS_6200_TF 2402 //IVMS-6200 交通取证分析仪 #define IVMS_6200_D 2403 //iVMS-6200(/D) #define IDS_81XXAHW_ST 2405 //iDS-81xxAHW-ST #define IDS_81XXAHW_SP 2406 //iDS-81xxAHW-SP @@ -8758,7 +8758,7 @@ typedef enum tagALARMHOST_MINOR_TYPE #define IDS_81XXAHWL_SP 2408 //iDS-81xxAHWL-SP #define IDS_9616N_H8 2409 //iDS_9616N_H8 #define IVMS_6200_SMD 2500 //IVMS_6200_SMD -//3531ƽ̨ATM DVR LʾҺPʾpoe +//3531平台混合ATM DVR, 其中L表示带液晶屏,P表示带poe #define DS_81XXAHW_ST 2501 #define DS_81XXAHW_SP 2502 #define DS_81XXAHWL_ST 2503 @@ -8768,569 +8768,569 @@ typedef enum tagALARMHOST_MINOR_TYPE #define DS_81XXAHGH_E4 2601 //DS_81XXAHGH_E4 /************************************************************************/ -/* ʾƷ豸startϵ豸ͣ */ +/* 传输与显示产品设备类型start(不包含老的设备类型) */ /************************************************************************/ -/** B20ϵУ4001-4100 */ +/** B20系列(4001-4100) */ -#define DS_6904UD_AIOE_H_CLASS 4002 //B20һ -#define DS_6402HFH_B21B_CLASS 4005 //B21 -#define DS_6902UD_B21H_CLASS 4006 //B21 HDMI -#define DS_6902UD_B21D_CLASS 4007 //B21 DVI -#define DS_6902UD_B21V_CLASS 4008 //B21 VGA -#define DS_6904UD_B20D_CLASS 4010 //B20 DVI -#define DS_6904UD_B20V_CLASS 4011 //B20 VGA -#define DS_B30_MCU 4012 //B30ذ -#define DS_B30_SW 4013 //B30 -#define DS_B30_04XI 4014 //B30 -#define DS_B30_04XO 4015 //B30 -#define DS_B31 4016 //B31һ +#define DS_6904UD_AIOE_H_CLASS 4002 //B20一体机 +#define DS_6402HFH_B21B_CLASS 4005 //B21 编码 +#define DS_6902UD_B21H_CLASS 4006 //B21 HDMI解码 +#define DS_6902UD_B21D_CLASS 4007 //B21 DVI解码 +#define DS_6902UD_B21V_CLASS 4008 //B21 VGA解码 +#define DS_6904UD_B20D_CLASS 4010 //B20 DVI解码 +#define DS_6904UD_B20V_CLASS 4011 //B20 VGA解码 +#define DS_B30_MCU 4012 //B30主控板 +#define DS_B30_SW 4013 //B30交换板 +#define DS_B30_04XI 4014 //B30编码输入板 +#define DS_B30_04XO 4015 //B30解码输出板 +#define DS_B31 4016 //B31一体机 -//B21һ豸ͺ -#define DS_AIOH_MCU_NP 4042 //ذ -#define DS_6404HFH_AIOH_D 4043 //4·DVI -#define DS_6908UD_AIOH_D 4044 //4·DVI -#define DS_6908UD_AIOH_H 4045 //4·HDMI +//B21一体机设备型号 +#define DS_AIOH_MCU_NP 4042 //主控板 +#define DS_6404HFH_AIOH_D 4043 //4路DVI输入板 +#define DS_6908UD_AIOH_D 4044 //4路DVI输出板 +#define DS_6908UD_AIOH_H 4045 //4路HDMI输出板 -//һ豸ͺ -#define DS_69XXUD_B 4046 //һ -#define DS_6404HFH_I 4047 //4·DVI -#define DS_6904UD_O 4048 //8·HDMI +//解码一体机设备型号 +#define DS_69XXUD_B 4046 //解码一体机 +#define DS_6404HFH_I 4047 //4路DVI输入板 +#define DS_6904UD_O 4048 //8路HDMI输出板 -//ʽƴ -#define DS_C12L_0204H 4060 //Сƴ +//集中式拼控器 +#define DS_C12L_0204H 4060 //经济型小型拼控器 -//ARһ 4101 - 4120 20 -#define DS_D1A24FDI 4101 //ARһ +//AR一体机 4101 - 4120 (20) +#define DS_D1A24FDI 4101 //AR教育一体机 -//5001-5050 -#define DS_69XXHD 5001 //69XXHD -#define DS_69UD_V2 5002 //69UDV2 -#define DS_69UD_T 5003 //6볬 -#define DS_6AUD 5004 // -#define DS_6AUD_V3 5005 //V3 +//解码器5001-5050 +#define DS_69XXHD 5001 //69XXHD解码器 +#define DS_69UD_V2 5002 //69UD超高清解码器V2 +#define DS_69UD_T 5003 //6输入超高清解码器 +#define DS_6AUD 5004 //超高清解码器网络版 +#define DS_6AUD_V3 5005 //超高清解码器V3 -//ת 5401 - 5450 50 -#define DS_68VTG 5401 //ۺת +//转码器 5401 - 5450 (50) +#define DS_68VTG 5401 //综合转码网关 -//Ƶ豸 5571 - 5590 20 -#define DS_65VT0010 5571 //һʽն -#define DS_65VM_MCU 5572 //ܶMCUذ -#define DS_65VM_MPC 5573 //ܶMCUýԴ -#define DS_65VT2XXYR_SF 5574 //˾Ѷն -#define DS_65VT0XXY 5575 //Ƶն -#define DS_65VT0010Z 5576 //һʽն -#define DS_65VT0050Z 5577 //ܷʽն -#define DS_65VS0XXXS 5878 //opensips豸 -#define DS_65VS0XXXM 5579 //Ƶƽ̨豸 -#define DS_65VM00XX_X 5580 //ƵX86ϵͳMCU -#define DS_65VA800_BOX 5581 //Ƶ˷ -#define DS_65VT0020S 5582 //һʽĿܻն -#define DS_65VT0020D 5583 //һʽ˫Ŀܻն -#define DS_65VM00XX_G 5584 //ƵMCU -#define DS_65VM0000_GPU 5585 //Ƶý崦 -#define DS_65VTA011 5586 //Ŀ߼ն -#define DS_65VCP1100M_S 5587 //4KĿ(ܻն) -#define Z_MINISMC_01 5588 //4K USB +//视频会议设备 5571 - 5590 (20) +#define DS_65VT0010 5571 //一体式终端 +#define DS_65VM_MCU 5572 //高密度MCU主控板 +#define DS_65VM_MPC 5573 //高密度MCU媒体资源板 +#define DS_65VT2XXYR_SF 5574 //司法提讯终端 +#define DS_65VT0XXY 5575 //视频会议大终端 +#define DS_65VT0010Z 5576 //智能一体式终端 +#define DS_65VT0050Z 5577 //智能分体式终端 +#define DS_65VS0XXXS 5878 //opensips服务器设备 +#define DS_65VS0XXXM 5579 //视频会议会控平台设备 +#define DS_65VM00XX_X 5580 //视频会议X86系统MCU +#define DS_65VA800_BOX 5581 //视频会议麦克风 +#define DS_65VT0020S 5582 //一体式单目智能会议终端 +#define DS_65VT0020D 5583 //一体式双目智能会议终端 +#define DS_65VM00XX_G 5584 //视频会议MCU服务器 +#define DS_65VM0000_GPU 5585 //视频会议媒体处理卡 +#define DS_65VTA011 5586 //单目高集成终端 +#define DS_65VCP1100M_S 5587 //4K单目相机(智能会议终端) +#define Z_MINISMC_01 5588 //4K USB相机 -#define DS_65VCAXX 5590 //߼ +#define DS_65VCAXX 5590 //高集成摄像机 -#define DS_65VTR00X0 5791 //ʽŴն -#define DS_65VA800AM_S 5792 //Ƶ˷ -#define DS_65VAM0100UB 5793 //Ƶ˷ -#define DS_65VA800SW 5794 //Ƶת +#define DS_65VTR00X0 5791 //分体式信创会议终端 +#define DS_65VA800AM_S 5792 //视频会议列阵麦克风 +#define DS_65VAM0100UB 5793 //视频会议麦克风扬声器 +#define DS_65VA800SW 5794 //音频转换器 #define DS_65VTA22XX_X 5795 //SmartEye A2200 #define DS_65VCAXXXX 5796 //Smart Meeting Bar -//ƵģY10ϵУ -#define DS_Y10_MCU 5771 //ذ -#define DS_Y10_SW1 5772 // -#define DS_6516UD_Y10D 5773 //8·DVIʾӿڽ -#define DS_6532UD_Y10D 5774 //16·DVIʾӿڽ -#define DS_6E2724_Y10 5775 //24׽ӿڱ -#define DS_68SAA_AA_Y10 5776 //˫·2620ڴ32Gҵ -#define DS_68SBA_AA_Y10 5777 //˫·2630ڴ32Gҵ -#define DS_68SCA_AA_Y10 5778 //˫·2650ڴ32Gҵ -#define DS_68GPU_A1_Y10 5779 //P4Կ -#define DS_CPU_SERVER 5780 //CPU -#define DS_GPU_SERVER 5781 //GPU -#define DS_BIGDATA_SERVER 5782 //ݷ +//视频云模方(Y10系列) +#define DS_Y10_MCU 5771 //主控板 +#define DS_Y10_SW1 5772 //交换板 +#define DS_6516UD_Y10D 5773 //8路DVI显示接口解码板 +#define DS_6532UD_Y10D 5774 //16路DVI显示接口解码板 +#define DS_6E2724_Y10 5775 //24个万兆接口编码接入板 +#define DS_68SAA_AA_Y10 5776 //双路2620、内存32G业务板 +#define DS_68SBA_AA_Y10 5777 //双路2630、内存32G业务板 +#define DS_68SCA_AA_Y10 5778 //双路2650、内存32G业务板 +#define DS_68GPU_A1_Y10 5779 //P4显卡版 +#define DS_CPU_SERVER 5780 //CPU服务板 +#define DS_GPU_SERVER 5781 //GPU服务板 +#define DS_BIGDATA_SERVER 5782 //大数据服务板 -//һϵ -#define DS_B80_MCU 5821//ذ -#define DS_B80_SW 5822// -#define DS_B80_SR_01 5823// -#define DS_B80_AI04 5824//ܷ壬֧4· -#define DS_B80_ST 5825//洢壬֧42.52TӲ -#define DS_B80_D04 5826//ݲɼҵ -#define DS_B80_BNC08 5827// -#define DS_B80_SDI08 5828// -#define DS_B80_VP 5829//ת/ -#define DS_B80_VO02 5830//Ƶ -#define DS_B81_MCU 5831//B81ģ -#define DS_B81_AI 5832//B81ܷģ -#define DS_B81_TVI 5833//B81 ģƵģ飨TVI/BNC -#define DS_B81_APL 5834//B81ģ X86ƽ̨ -#define DS_B81_D08T 5835//B81 ݲɼģ -#define DS_B85 5836//B85С -#define DS_B86 5837//B86п -#define AX_GW100_V16A00M 5838//B81Ǹ룩OEM豸 -#define DS_B81_AT_M 5839//B81Ǹ룩 +//安监一体机系列 +#define DS_B80_MCU 5821//主控板 +#define DS_B80_SW 5822//交换板 +#define DS_B80_SR_01 5823//服务板 +#define DS_B80_AI04 5824//智能分析板,支持4路分析能力 +#define DS_B80_ST 5825//存储板,支持4个2.5寸2T硬盘 +#define DS_B80_D04 5826//数据采集业务板 +#define DS_B80_BNC08 5827//标清编码板 +#define DS_B80_SDI08 5828//高清编码板 +#define DS_B80_VP 5829//转码/合码板 +#define DS_B80_VO02 5830//视频输出板 +#define DS_B81_MCU 5831//B81主控模块 +#define DS_B81_AI 5832//B81智能分析模块 +#define DS_B81_TVI 5833//B81 模拟视频输入模块(TVI/BNC) +#define DS_B81_APL 5834//B81服务模块 X86平台 +#define DS_B81_D08T 5835//B81 生产数据采集模块 +#define DS_B85 5836//B85小型物联网主机 +#define DS_B86 5837//B86物联中控主机 +#define AX_GW100_V16A00M 5838//B81主机(非隔离),OEM设备 +#define DS_B81_AT_M 5839//B81主机(非隔离) -// -#define DS_3LGCX 5841//ͨ -#define DS_3LGRX 5842//LoRa -#define DS_3LGT4 5843 //豸 -#define DS_3LGT40_N 5844 //NB-IoT -#define DS_3LGS_I 5845 // +//网关类 +#define DS_3LGCX 5841//通用物联网关 +#define DS_3LGRX 5842//LoRa网关 +#define DS_3LGT4 5843 //电梯网关设备 +#define DS_3LGT40_N 5844 //NB-IoT电梯网关 +#define DS_3LGS_I 5845 //智能网关 -// -#define DS_3E11XX 5681 //׽ -#define DS_3E13XX 5682 //ǧн -#define DS_3E15XX 5683 //ǧ׽ -#define DS_3E11XXP 5684 //POE -#define DS_3E13XXP 5685 //ǧPOE -#define DS_3E15XXP 5686 //ǧPOE -#define DS_3E1520U 5687 //USB -#define DS_3EODM_H 5688 // -#define DS_3EODM_W 5689 //ï -#define DS_3T1XXX 5690 //DS-3T1XXXϵн -#define DS_3E2XXX 5861 //ȫܽ -#define DS_3E2XXXP 5862 //ȫܽ-POE -#define DS_3E3XXX 5863 //ȫܽ -#define DS_3E3XXXP 5864 //ȫܽ-POE +//交换机 +#define DS_3E11XX 5681 //百兆交换机 +#define DS_3E13XX 5682 //千兆上行交换机 +#define DS_3E15XX 5683 //千兆交换机 +#define DS_3E11XXP 5684 //百兆POE交换机 +#define DS_3E13XXP 5685 //千兆上行POE交换机 +#define DS_3E15XXP 5686 //千兆POE交换机 +#define DS_3E1520U 5687 //USB充电柜 +#define DS_3EODM_H 5688 //华三交换机 +#define DS_3EODM_W 5689 //恒茂交换机 +#define DS_3T1XXX 5690 //DS-3T1XXX系列交换机 +#define DS_3E2XXX 5861 //二层全网管交换机 +#define DS_3E2XXXP 5862 //二层全网管交换机-POE +#define DS_3E3XXX 5863 //三层全网管交换机 +#define DS_3E3XXXP 5864 //三层全网管交换机-POE -//շ -#define DS_3D01R_NM 5691 //շտ -#define DS_3D01T_NM 5692 //շͻ -#define DS_3K02_RNM 5693 //շܿ +//光纤收发器 +#define DS_3D01R_NM 5691 //收发器接收卡 +#define DS_3D01T_NM 5692 //收发器发送机 +#define DS_3K02_RNM 5693 //收发器网管卡 /************************************************************************/ -/* ʾƷ豸endϵ豸ͣ */ +/* 传输与显示产品设备类型end(不包含老的设备类型) */ /************************************************************************/ -#define IDS_90XX_HXH_XX_S 6001 //DVRƷ -#define IDS_90XX_HXH_XX_FA 6002 //DVRƷ +#define IDS_90XX_HXH_XX_S 6001 //超脑人体DVR产品 +#define IDS_90XX_HXH_XX_FA 6002 //超脑人脸DVR产品 -#define DS_81XX_SHXL_K4 6101 //KY2017ƽ̨ѶDS-8104SHFHL-K4/4P +#define DS_81XX_SHXL_K4 6101 //KY2017平台审讯机DS-8104SHFH(L)-K4/4P -#define DS_8116THFHL_F4 6201 //׼ͥDS-8116THFHL-F4 +#define DS_8116THFHL_F4 6201 //标准庭审主机DS-8116THFHL-F4 #define DS_81XXAHQ_E4 6301 //DS_81XXAHQ_E4(TVI ATM) -#define IDS_81XXAHQ_E4 6302 //IDS_81XXAHQ_E4(TVI ATM) +#define IDS_81XXAHQ_E4 6302 //IDS_81XXAHQ_E4(智能TVI ATM) -#define IDS_86XX_NX_A 7501 //ATM NVR(iDS-8632NX-I8/A) -#define IDS_96XX_NX_S 7502 //峬NVR -#define IDS_96XX_NX_V 7503 //ԼվNVR -#define IDS_96XX_NX_FA 7504 //NVR iDS-9632NX-I8/FA -#define IDS_86XX_NX_IX_B 7505 //86ϵаȫñNVRƷ -#define IDS_67XX_NX_S_X 7506 //ܰƷNVR(IDS_67XX_NX/S_X) -#define NP_ST204_X_ 7507 //ڶܰǣNP_ST204_S:NP_ST204_D:NP_ST204_D_4G -#define NP_ST_ANJIAN 7508 // +#define IDS_86XX_NX_A 7501 //超脑智能ATM NVR(iDS-8632NX-I8/A) +#define IDS_96XX_NX_S 7502 //人体超脑智能NVR +#define IDS_96XX_NX_V 7503 //超脑加油站NVR +#define IDS_96XX_NX_FA 7504 //人脸超脑智能NVR iDS-9632NX-I8/FA +#define IDS_86XX_NX_IX_B 7505 //86系列安全帽检测NVR产品 +#define IDS_67XX_NX_S_X 7506 //人脸超脑智能安检产品NVR(IDS_67XX_NX/S_X) +#define NP_ST204_X_ 7507 //第二代智能安检分析仪(NP_ST204_S:NP_ST204_D:NP_ST204_D_4G) +#define NP_ST_ANJIAN 7508 //安检机 -#define IDS_ECDXX_HE 8001//ѧĿ -#define IDS_ECDXX_HT 8002//ʦĿ +#define IDS_ECDXX_HE 8001//学生三目相机 +#define IDS_ECDXX_HT 8002//教师三目相机 -#define IDS_ECDXX_E 8101//4K +#define IDS_ECDXX_E 8101//4K半球 -#define IDS_EPTXX_HF 8201//ĿץĻ +#define IDS_EPTXX_HF 8201//二代目标抓拍机 -#define DS_2CD69XXX_I 8351 //3200WȫƴIPCͺ -#define DS_TRIXX 8471 //Ƶ̶ʽDS_TRI900 +#define DS_2CD69XXX_I 8351 //3200W全景拼接IPC型号 +#define DS_TRIXX 8471 //超高频固定式读卡器DS_TRI900 -#define DS_K1F600_D6EXX 10501 //๦ܲɼ -#define DS_K1T341 10502 //Ž -#define DS_K1T641XXX 10503 //жͨŽ -#define DS_K1T642XXX 10504 //жͨŽ -#define DS_K1T601 10505 //ƵƷ -#define DS_K1T672XXX 10506 //7糬ŽƷ -#define DS_K56A0X 10507 //׿ж֤ -#define DS_K56Q_F70 10508 //Ͷ) -#define DS_K1T6Q_F70M 10509 //F70ϵĿʶһ) -#define DS_K1T6Q_F40X 10510 //F40ϵĿʶһ) -#define DS_K5604A_XXX 10511 //еͶ -#define DS_K1A330X 10512 //Ͷڻ) -#define DS_K1T804A 10513 //ָŽһ -#define DS_K1T202 10514 //ָŽһ -#define DS_K1T343MX 10515 //Žһ) -#define DS_K1T331W_D 10516 //ͶŽһDS-K1T331W(D) -#define DS_K1T671WX_D 10517 //ŽһDS-K1T671M(D) DS-K1T671MW(D) DS-K1T671MG(D) -#define DS_K1T680X 10518 //8.0ŽDS-K1T680M DS-K1T680D -#define DS_K1T640A 10519 //ŽһDS-K1T640AM DS-K1T640AMW -#define DS_K1F600U_D6E_X 10520 //๦ܲɼ(DS-K1F600U-D6E DS-K1F600U-D6E-F DS-K1F600U-D6E-IF) -#define DS_K1T671AMX 10521 //Žһ(DS-K1T671AM DS-K1T671AMW DS-K1T671AM-5G) -#define DS_VISITORXX 10530 //ÿͻ -#define DS_FACE_PAYMENT_TERMINALXX 10531 //ѻ -#define DS_K1T341B_T 10532 //Žһ,ֲ֧£DS-K1T341BMWI-T DS-K1T341BMI-T -#define DS_K1T343 10533 //F1Proƽ̨4.3ŽһDS-K1T343M/MX/MW/MWX/MF/MFX/MFW/MFWX/EX/EWX/EFX/EFWX,D10,D10W/F/FW -#define DS_K1T673 10534 //F1Plusƽ̨7Žһҵ(DS_K1T673M/MG/MW/TMW/TMG/DX/DWX/TDX/TDWX/TDGX) -#define DS_K1T981 10535 //Ĥʶһ -#define DS_K5680X 10536 //K5680ϵ8֤豸 -#define DS_K5022A_X 10537 //5022Aϵа׿ÿͻ -#define DS_K1T342 10538 //F1Proƽ̨4.3ŽһDS-K1T342M/MX/MW/MWX/MF/MFX/MFW/MFWX/EX/EWX/EFWX/DX/DWX,D11,D11S/Pro/Plus +#define DS_K1F600_D6EXX 10501 //多功能采集仪 +#define DS_K1T341 10502 //经销人脸门禁 +#define DS_K1T641XXX 10503 //中端通用人脸门禁 +#define DS_K1T642XXX 10504 //中端通用人脸门禁 +#define DS_K1T601 10505 //酒店人脸产品 +#define DS_K1T672XXX 10506 //室内7寸超薄款人脸门禁产品 +#define DS_K56A0X 10507 //安卓中端人证 +#define DS_K56Q_F70 10508 //低端人脸组件(经销型) +#define DS_K1T6Q_F70M 10509 //F70系列目标识别一体机(经销型) +#define DS_K1T6Q_F40X 10510 //F40系列目标识别一体机(经销型) +#define DS_K5604A_XXX 10511 //中低端人脸组件 +#define DS_K1A330X 10512 //超低端人脸考勤机(经销型) +#define DS_K1T804A 10513 //经济型指纹门禁一体机 +#define DS_K1T202 10514 //经济型指纹门禁一体机 +#define DS_K1T343MX 10515 //人脸门禁一体机(经销型) +#define DS_K1T331W_D 10516 //低端人脸门禁考勤一体机(DS-K1T331W(D)) +#define DS_K1T671WX_D 10517 //人脸门禁一体机(DS-K1T671M(D) DS-K1T671MW(D) DS-K1T671MG(D)) +#define DS_K1T680X 10518 //8.0寸室内外人脸门禁(DS-K1T680M DS-K1T680D) +#define DS_K1T640A 10519 //智能门禁一体机(DS-K1T640AM DS-K1T640AMW) +#define DS_K1F600U_D6E_X 10520 //多功能采集仪(DS-K1F600U-D6E DS-K1F600U-D6E-F DS-K1F600U-D6E-IF) +#define DS_K1T671AMX 10521 //人脸门禁一体机(DS-K1T671AM DS-K1T671AMW DS-K1T671AM-5G) +#define DS_VISITORXX 10530 //访客机 +#define DS_FACE_PAYMENT_TERMINALXX 10531 //人脸消费机 +#define DS_K1T341B_T 10532 //人脸门禁一体机,支持测温(DS-K1T341BMWI-T DS-K1T341BMI-T) +#define DS_K1T343 10533 //F1Pro平台4.3寸人脸门禁一体机(经销)(DS-K1T343M/MX/MW/MWX/MF/MFX/MFW/MFWX/EX/EWX/EFX/EFWX,D10,D10W/F/FW) +#define DS_K1T673 10534 //F1Plus平台7寸人脸门禁一体机(行业)(DS_K1T673M/MG/MW/TMW/TMG/DX/DWX/TDX/TDWX/TDGX) +#define DS_K1T981 10535 //虹膜识别一体机 +#define DS_K5680X 10536 //K5680系列8寸桌面人证设备 +#define DS_K5022A_X 10537 //5022A系列安卓访客机 +#define DS_K1T342 10538 //F1Pro平台4.3寸人脸门禁一体机(经销)(DS-K1T342M/MX/MW/MWX/MF/MFX/MFW/MFWX/EX/EWX/EFWX/DX/DWX,D11,D11S/Pro/Plus) #define DS_K1T690 10539 //DS_K1T690 #define DS_K1T340 10540 //DS_K1T340 -#define DS_K1T6QT_F72 10541 //F72ϵĿʶһ) -#define DS_K1T641A 10542 //F1Plusƽ̨4.3Žһl641ϵ -#define DS_K1TACS 10543 //ŽƷֵISAPI¼豸ϢṹwDevTypeֶη -#define DS_K1T6_GS3 10544 //ҵĿʶһDS-K1T6-GS3ϵ -#define DS_K1T6Q_F41_3XF 10545 //ĿʶһDS_K1T6Q_F41_3XFϵ -#define DS_K56A1X 10546 //K56A1ϵ֤豸 -#define DS_K1T320MFW 10547 //F2 Proƽ̨2.4糬Ͷ˾Žһ -#define DS_K5033X 10548 //5033ϵа׿ʽÿͻ -#define DS_K1T692X 10549 //A2Sƽ̨10ŽһDS-K1T692MDS-K1T692MWDS-K1T692MGȣ +#define DS_K1T6QT_F72 10541 //F72系列目标识别一体机(经销型) +#define DS_K1T641A 10542 //F1Plus平台4.3寸人脸门禁一体机l,641系列 +#define DS_K1TACS 10543 //门禁产品大类值,用于ISAPI登录是在设备信息结构体的wDevType字段返回 +#define DS_K1T6_GS3 10544 //行业目标识别一体机DS-K1T6-GS3系列 +#define DS_K1T6Q_F41_3XF 10545 //经销目标识别一体机DS_K1T6Q_F41_3XF系列 +#define DS_K56A1X 10546 //K56A1系列桌面人证设备 +#define DS_K1T320MFW 10547 //F2 Pro平台2.4寸超低端经销人脸门禁机一体机 +#define DS_K5033X 10548 //5033系列安卓桌面式访客机 +#define DS_K1T692X 10549 //A2S平台10寸人脸门禁一体机(DS-K1T692M、DS-K1T692MW、DS-K1T692MG等) -#define DS_K1T681X 10550 //A2Sƽ̨8ŽһDS-K1T681M DS-K1T681MW DS-K1T681MG DS-K1T681M-3Dȣ -#define DS_K5670X 10551 //F2proͶ7繤K5670ϵ -#define DS_K1T670X 10552 //жҵһʽDS-K1T670ϵ -#define HST_AU3230 10553 //ͨHST_AU3230ϵ -#define HST_AU5240 10554 //ͨHST_AU5240ϵ -#define HST_AU5230 10555 //ͨHST_AU5230ϵ -#define HST_AU5170 10556 //ͨHST_AU5170ϵ -#define DS_K270X 10577 //27Ž -#define DS_PAYMENT_TERMINALXX 10578 //ѻ6201Ͷˢѻ֧ѹܣ -#define DS_K1T344 10579 //F2proƽ̨4.5ŽһͣDS-K1T344/MBFWX-E1/MFX-E1/MBWX-E1/MBWX-QRE1/MX-E1/EBFWX-E1/EBWX-E1/EBWX-QRE1/EX-E1/M-E1/MBFW/MF/MBW/MBW-QR/MD15 Pro-E1D15-E1D15 PlusD15 ProD15 SD15 S-QRD15D19 Pro-E1D19-E1D19 PlusD19 ProD19 SD15 S-QRD19 -#define DS_K1T808X 10580 //ؿָһDS-K1T808ϵУDS-K1T808 EFX/EFWX/MFX/MFWX/EFWX-B/MFWX-B -#define DS_K1T8005X 10581 //ؿָһDS-K1T8005ϵУDS-K1T8005 EFX/EFWX/MFX/MFWX/EFWX-B/MFWX-B -#define DS_K1T6X 10582 // F2proƽ̨4.5ҵŽһҵͣDS-K1T6-GS5, DS-K1T6-GS5W, DS-K1T6-GS5W-QR, DS-K1T6-GS5FW, DS-K1T6-GS5F -#define DS_K1T680AX 10583 //K1T680Aϵ -#define DS_K1T674XXX 10585 //DS-K1T674ϵУҵ +#define DS_K1T681X 10550 //A2S平台8寸人脸门禁一体机(DS-K1T681M 、DS-K1T681MW、 DS-K1T681MG、 DS-K1T681M-3D等) +#define DS_K5670X 10551 //F2pro低端7寸工地明眸K5670系列 +#define DS_K1T670X 10552 //中端行业一体式测温DS-K1T670系列 +#define HST_AU3230 10553 //皓视通HST_AU3230系列 +#define HST_AU5240 10554 //皓视通HST_AU5240系列 +#define HST_AU5230 10555 //皓视通HST_AU5230系列 +#define HST_AU5170 10556 //皓视通HST_AU5170系列 +#define DS_K270X 10577 //27门禁主机 +#define DS_PAYMENT_TERMINALXX 10578 //消费机(6201低端刷卡消费机,不支持人脸消费功能) +#define DS_K1T344 10579 //F2pro平台4.5寸竖屏人脸门禁一体机(经销型)(DS-K1T344/MBFWX-E1/MFX-E1/MBWX-E1/MBWX-QRE1/MX-E1/EBFWX-E1/EBWX-E1/EBWX-QRE1/EX-E1/M-E1/MBFW/MF/MBW/MBW-QR/M,D15 Pro-E1,D15-E1,D15 Plus,D15 Pro,D15 S,D15 S-QR,D15,D19 Pro-E1,D19-E1,D19 Plus,D19 Pro,D19 S,D15 S-QR,D19) +#define DS_K1T808X 10580 //电池款指纹一体机DS-K1T808系列(DS-K1T808 EFX/EFWX/MFX/MFWX/EFWX-B/MFWX-B) +#define DS_K1T8005X 10581 //电池款指纹一体机DS-K1T8005系列(DS-K1T8005 EFX/EFWX/MFX/MFWX/EFWX-B/MFWX-B) +#define DS_K1T6X 10582 // F2pro平台4.5寸竖屏行业人脸门禁一体机(行业型)(DS-K1T6-GS5, DS-K1T6-GS5W, DS-K1T6-GS5W-QR, DS-K1T6-GS5FW, DS-K1T6-GS5F) +#define DS_K1T680AX 10583 //K1T680A系列 +#define DS_K1T674XXX 10585 //DS-K1T674系列(行业) -//ÿͻ1053010601-10650 -#define DS_K3501 10601 //ÿͻK3501ϵ -//ѻ1053110651-10700 -#define DS_K6600X 10651 //K6600ϵ̳ +//访客机10530,10601-10650 +#define DS_K3501 10601 //经销访客机K3501系列 +//消费机10531,10651-10700 +#define DS_K6600X 10651 //K6600系列商超收银机 -//ܹ10701-10750 -#define DS_KL_CABINET 10701 //ܹƷֵISAPI¼豸ϢṹwDevTypeֶη +//智能柜10701-10750 +#define DS_KL_CABINET 10701 //智能柜产品大类值,用于ISAPI登录是在设备信息结构体的wDevType字段返回 -//ݿ10751-10800 +//梯控主机10751-10800 -//Աͨ10801-10850 -#define DS_K3B961 10801 //ԱͨƷֵISAPI¼豸ϢṹwDevTypeֶη +//人员通道10801-10850 +#define DS_K3B961 10801 //人员通道产品大类值,用于ISAPI登录是在设备信息结构体的wDevType字段返回 -#define DS_KBS6XXX_WX 11001 //DS-KBS6100-WV/DS-KBS6101-W/DS-KBS6100-W/DS-KBS6101-W/DS-KBS6200-W/DS-KBS6201-W -#define DS_KBC6XXX_X 11002 //DS-KBC6300/DS-KBC6600 -#define DS_KBI6000_P 11003 //ѰͲDS-KBI6000-P -#define DS_KBA6XXX 11004 //豸()DS-KBA6120/DS-KBA6240/DS-KBA6360/DS-KBA6650/DS-KBA6400-2/DS-KBA6800-2 +#define DS_KBS6XXX_WX 11001 //音箱DS-KBS6100-WV/DS-KBS6101-W/DS-KBS6100-W/DS-KBS6101-W/DS-KBS6200-W/DS-KBS6201-W +#define DS_KBC6XXX_X 11002 //音柱DS-KBC6300/DS-KBC6600 +#define DS_KBI6000_P 11003 //寻呼话筒DS-KBI6000-P +#define DS_KBA6XXX 11004 //功放设备(扩音器)DS-KBA6120/DS-KBA6240/DS-KBA6360/DS-KBA6650/DS-KBA6400-2/DS-KBA6800-2 -#define DS_IEXX_E_J 11501 //ܷ +#define DS_IEXX_E_J 11501 //监所智能服务器 -#define IDS_67XX_NX_A 12501 //67ϵNVSƷ(iDS-6704NX/A) -#define IDS_67XX_NX_L 12502 //67ϵ¼NVSƷ -#define IDS_ENIXX_XHE 12503 //¼NVSҵרҵƷ -#define IDS_67XX_NX_V 12504 //ԼվNVS -#define IDS_67XX_NX_B 12505 //67ϵаȫñNVSƷ +#define IDS_67XX_NX_A 12501 //67系列NVS产品(iDS-6704NX/A) +#define IDS_67XX_NX_L 12502 //67系列录播NVS产品 +#define IDS_ENIXX_XHE 12503 //录播NVS行业专业产品 +#define IDS_67XX_NX_V 12504 //超脑加油站NVS +#define IDS_67XX_NX_B 12505 //67系列安全帽检测NVS产品 -//豸 -#define DS_IE63XX_E_FA 13001 //׵ -#define DS_DS_GPKIA 13002 //ӥ -#define DS_DS_PURE 13003 //״ -#define DS_DS_FS 13004 //̬ݷ -#define DS_DS_FD 13005 //ץļ -#define DS_DS_BLADE 13006 // -#define DS_DS_HMCP 13007 //ģͶԱȷ +//智能中心类设备 +#define DS_IE63XX_E_FA 13001 //脸谱单机 +#define DS_DS_GPKIA 13002 //猎鹰服务器 +#define DS_DS_PURE 13003 //脸谱纯分析 +#define DS_DS_FS 13004 //人脸静态数据服务器 +#define DS_DS_FD 13005 //抓拍检测服务器 +#define DS_DS_BLADE 13006 //刀锋 +#define DS_DS_HMCP 13007 //模型对比服务器 -//豸 -#define DS_LNX_RF 13501 // +//智能锁设备 +#define DS_LNX_RF 13501 //智能锁盒子 -//״豸 13551-14000500 -#define DS_PA_RADAR 13551 //PA״ -#define DS_PERIMETER_RADAR 13552 //ܽ״ -#define DS_SECURITY_RADAR 13553 //120װ״ -#define DS_IMAGING_RADAR_PANEL 13554 //״ +//雷达设备 13551-14000(500) +#define DS_PA_RADAR 13551 //PA雷达 +#define DS_PERIMETER_RADAR 13552 //周界雷达 +#define DS_SECURITY_RADAR 13553 //120米安防雷达 +#define DS_IMAGING_RADAR_PANEL 13554 //成像雷达主机 -//豸 14001-14500500 -#define DS_N1104X 14001 // -#define DS_N1103X 14002 //ûϢ豸 -#define NP_FSC201 14003 //ˮ豸 -#define NP_FDC240 14004 //ʽ̽ -#define DS_N1107 14005 // -#define NP_FAXXX 14006 // -#define NP_FVY100 14007 //Ƶ̸ -#define NP_FVW100 14008 // -#define NP_FVG100 14009 // -#define NP_FVY300 14010 //Ƶ̸ -#define NP_FVR212_P 14011 //һ̽ -#define NP_FVR213_P 14012 //һ̽() +//消防设备 14001-14500(500) +#define DS_N1104X 14001 //消防网关 +#define DS_N1103X 14002 //用户信息传输设备 +#define NP_FSC201 14003 //用水设备 +#define NP_FDC240 14004 //组合式电气火灾探测器 +#define DS_N1107 14005 //物联网网关 +#define NP_FAXXX 14006 //消防分析仪 +#define NP_FVY100 14007 //视频烟感 +#define NP_FVW100 14008 //安消智能相机 +#define NP_FVG100 14009 //安消联动相机 +#define NP_FVY300 14010 //经济型视频烟感 +#define NP_FVR212_P 14011 //三合一火灾探测器 +#define NP_FVR213_P 14012 //三合一火灾探测器(自研) -//豸 14501-15000500 -#define NP_ST204_X 14501 //ڶܰ -#define ISD_SG2XXL_X 14502 //(ISD-SG206L ISD-SG218L ISD-SG218L-F) -#define ISD_SL300T 14503 //Һ +//安检设备 14501-15000(500) +#define NP_ST204_X 14501 //第二代智能安检分析仪 +#define ISD_SG2XXL_X 14502 //安检门(ISD-SG206L ISD-SG218L ISD-SG218L-F) +#define ISD_SL300T 14503 //液体分析仪 -//ģƵ豸 15001-15500500 +//模拟和音频设备 15001-15500(500) #define IPA 15001 -//ƵƷ 15601-16100500 -#define DS_QAAZMM43C501 15601 //4.3㲥 -#define DS_QAAZMM1010 15602//10㲥 +//音频产品 15601-16100(500) +#define DS_QAAZMM43C501 15601 //4.3寸广播管理主机 +#define DS_QAAZMM1010 15602//10寸广播管理主机 -/**********************豸 end***********************/ -/**********************豸 begin**********************/ +/**********************设备类型 end***********************/ +/**********************设备大类 begin**********************/ -/* dvr 1-50 */ -#define DEV_CLASS_DVR 1 //ͨdvr -#define DEV_CLASS_INTERROGATION 2 //Ѷ -#define DEV_CLASS_SIMPLE_TRAIL 3 //ͥ -#define DEV_CLASS_TRAIL 4 //׼ͥ -#define DEV_CLASS_RECORD_PLAY 5 //¼ -#define DEV_CLASS_ATM 6 //ATM +/* dvr相关 1-50 */ +#define DEV_CLASS_DVR 1 //普通dvr类型 +#define DEV_CLASS_INTERROGATION 2 //审讯机 +#define DEV_CLASS_SIMPLE_TRAIL 3 //简易庭审主机 +#define DEV_CLASS_TRAIL 4 //标准庭审主机 +#define DEV_CLASS_RECORD_PLAY 5 //录播主机 +#define DEV_CLASS_ATM 6 //ATM机 -/* dvs 51-100 */ -#define DEV_CLASS_DVS 51 //ͨdvs +/* dvs相关 51-100 */ +#define DEV_CLASS_DVS 51 //普通dvs -/* nvr 101-150 */ -#define DEV_CLASS_NVR 101 //ͨnvr +/* nvr相关 101-150 */ +#define DEV_CLASS_NVR 101 //普通nvr -/* ipc 151-200 */ -#define DEV_CLASS_GUN 151 //ipcǹ -#define DEV_CLASS_BALL 152 //ipc -#define DEV_CLASS_SNAP 153 //ץĻ -#define DEV_CLASS_INTELLI_TILT 154 //̨ -#define DEV_CLASS_FISH_EYE 155 // -#define DEV_CLASS_2DP_Z 156 //ӥ -#define DEV_CLASS_2DP 157 //Сӥ -#define DEV_CLASS_PT 158 //ȫϸ -#define DEV_CLASS_TRI 159 //Ƶ̶ʽ +/* ipc相关 151-200 */ +#define DEV_CLASS_GUN 151 //ipc枪机 +#define DEV_CLASS_BALL 152 //ipc球机 +#define DEV_CLASS_SNAP 153 //抓拍机 +#define DEV_CLASS_INTELLI_TILT 154 //智能云台 +#define DEV_CLASS_FISH_EYE 155 //鱼眼 +#define DEV_CLASS_2DP_Z 156 //大鹰眼 +#define DEV_CLASS_2DP 157 //小鹰眼 +#define DEV_CLASS_PT 158 //全景细节相机 +#define DEV_CLASS_TRI 159 //超高频固定式读卡器 -/* CVR 201 - 250*/ +/* CVR相关 201 - 250*/ #define DEV_CLASS_CVR 201 //CVR -/* 251 - 300*/ -#define DEV_CLASS_B20 251 //B20ϵ -#define DEV_CLASS_B10 252 //B10ϵ -#define DEV_CLASS_DECODER 253 // -#define DEV_CLASS_MATRIXMANAGEDEVICE 254 // -#define DEV_CLASS_OTICAL 255 //˻ -#define DEV_CLASS_CODESPITTER 256 // -#define DEV_CLASS_ALARMHOST 257 //ҵ -#define DEV_CLASS_MOVING_RING 258 //豸 -#define DEV_CLASS_CVCS 259 //ʽ -#define DEV_CLASS_DVCS 260 //ֲʽ -#define DEV_CLASS_TRANSCODER 261 //ת -#define DEV_CLASS_LCD_SCREEN 262 //LCDĻ -#define DEV_CLASS_LED_SCREEN 263 //LEDĻ -#define DEV_CLASS_MATRIX 264 // -#define DEV_CLASS_CONFERENCE_SYSTEM 265 //Ƶ豸 -#define DEV_CLASS_INFORMATION_RELEASE_EQUIPMENT 266 //Ϣ豸 -#define DEV_CLASS_NET_GAP 267 //բ -#define DEV_CLASS_MERGE 268 // -#define DEV_CLASS_REAR_PROJECTION 269 //Ͷʾ豸 -#define DEV_CLASS_SWITCH 270 // -#define DEV_CLASS_FIBER_CONVERTER 271 //շ -#define DEV_CLASS_SCREEN_SERVER 272 //Ļ -#define DEV_CLASS_SCE_SERVER 273 //ץ -#define DEV_CLASS_WIRELESS_TRANS 274 //ߴ豸 -#define DEV_CLASS_Y10_SERIES 275 //Y10ϵ -#define DEV_CLASS_SAFETY_MAVHINE 276 //һ -#define DEV_CLASS_IOTGATEWAY 277 // -#define DEV_CLASS_NET_MANAGEMENT_EQUIPMENT 278 //豸 -#define DEV_CLASS_PUBLISH_SIGNAGE 279 //Ӱ -#define DEV_CLASS_AR_MACHINE 280 //ARһ -/* 301 - 350*/ -#define DEV_CLASS_VIDEO_ALARM_HOST 301 //Ƶ -#define DEV_CLASS_NET_ALARM_HOST 302 //籨 -#define DEV_CLASS_ONE_KEY_ALARM 303 //һʽƷ -#define DEV_CLASS_WIRELESS_ALARM_HOST 304 //߱ -#define DEV_CLASS_ALARM_MODULE 305 //ģ -#define DEV_CLASS_HOME_ALARM_HOST 306 //ñ -#define DEV_CLASS_HYBRID_ALARM_HOST 307 //ϱ -#define DEV_CLASS_NETWORK_RECEIVER 308 //ӾƷ +/* 传显相关 251 - 300*/ +#define DEV_CLASS_B20 251 //传显B20系列 +#define DEV_CLASS_B10 252 //传显B10系列 +#define DEV_CLASS_DECODER 253 //解码器 +#define DEV_CLASS_MATRIXMANAGEDEVICE 254 //矩阵接入网关 +#define DEV_CLASS_OTICAL 255 //光端机 +#define DEV_CLASS_CODESPITTER 256 //码分器 +#define DEV_CLASS_ALARMHOST 257 //行业报警主机 +#define DEV_CLASS_MOVING_RING 258 //动环设备 +#define DEV_CLASS_CVCS 259 //集中式多屏控制器 +#define DEV_CLASS_DVCS 260 //分布式多屏控制器 +#define DEV_CLASS_TRANSCODER 261 //转码器 +#define DEV_CLASS_LCD_SCREEN 262 //LCD屏幕 +#define DEV_CLASS_LED_SCREEN 263 //LED屏幕 +#define DEV_CLASS_MATRIX 264 //矩阵 +#define DEV_CLASS_CONFERENCE_SYSTEM 265 //视频会议设备 +#define DEV_CLASS_INFORMATION_RELEASE_EQUIPMENT 266 //信息发布设备 +#define DEV_CLASS_NET_GAP 267 //网闸 +#define DEV_CLASS_MERGE 268 //合码器 +#define DEV_CLASS_REAR_PROJECTION 269 //背投显示设备 +#define DEV_CLASS_SWITCH 270 //交换机 +#define DEV_CLASS_FIBER_CONVERTER 271 //光纤收发器 +#define DEV_CLASS_SCREEN_SERVER 272 //屏幕服务器 +#define DEV_CLASS_SCE_SERVER 273 //抓屏服务器 +#define DEV_CLASS_WIRELESS_TRANS 274 //无线传输设备 +#define DEV_CLASS_Y10_SERIES 275 //Y10系列 +#define DEV_CLASS_SAFETY_MAVHINE 276 //安监一体机 +#define DEV_CLASS_IOTGATEWAY 277 //物联网关类 +#define DEV_CLASS_NET_MANAGEMENT_EQUIPMENT 278 //网络设备管理类 +#define DEV_CLASS_PUBLISH_SIGNAGE 279 //电子班牌 +#define DEV_CLASS_AR_MACHINE 280 //AR一体机 +/* 报警主机相关 301 - 350*/ +#define DEV_CLASS_VIDEO_ALARM_HOST 301 //视频报警主机 +#define DEV_CLASS_NET_ALARM_HOST 302 //网络报警主机 +#define DEV_CLASS_ONE_KEY_ALARM 303 //一键式报警产品 +#define DEV_CLASS_WIRELESS_ALARM_HOST 304 //无线报警主机 +#define DEV_CLASS_ALARM_MODULE 305 //报警模块 +#define DEV_CLASS_HOME_ALARM_HOST 306 //家用报警主机 +#define DEV_CLASS_HYBRID_ALARM_HOST 307 //混合报警主机 +#define DEV_CLASS_NETWORK_RECEIVER 308 //网络接警机产品 -/* Ž 351 - 400*/ -#define DEV_CLASS_ACCESS_CONTROL 351 //ŽƷ -#define DEV_CLASS_VISITOR 352 //ÿͻƷ -#define DEV_CLASS_FACE_PAYMENT_TERMINALXX 353 //ѻƷ -#define DEV_CLASS_CABINET 354 //ܹ -#define DEV_CLASS_LADDER_CONTROL 355 //ݿ -#define DEV_CLASS_PERSONNEL_CHANNEL 356 //Աͨ +/* 门禁相关 351 - 400*/ +#define DEV_CLASS_ACCESS_CONTROL 351 //门禁产品 +#define DEV_CLASS_VISITOR 352 //访客机产品 +#define DEV_CLASS_FACE_PAYMENT_TERMINALXX 353 //人脸消费机产品 +#define DEV_CLASS_CABINET 354 //智能柜 +#define DEV_CLASS_LADDER_CONTROL 355 //梯控主机 +#define DEV_CLASS_PERSONNEL_CHANNEL 356 //人员通道 -/* ӶԽ 401 - 450*/ -#define DEV_CLASS_VIDEO_INTERCOM 401 //ӶԽ +/* 可视对讲 401 - 450*/ +#define DEV_CLASS_VIDEO_INTERCOM 401 //可视对讲 -/* ˻ 451 - 500*/ -#define DEV_CLASS_UMMANNED_AERIAL_VEHICLE 451 //˻Ʒ +/* 无人机 451 - 500*/ +#define DEV_CLASS_UMMANNED_AERIAL_VEHICLE 451 //无人机产品 -/* ƶƷ: 501-550*/ -#define DEV_CLASS_MOBILE 501 //ƶƷ +/* 移动产品: 501-550*/ +#define DEV_CLASS_MOBILE 501 //移动产品 -/* ƶ豸: 551-600*/ -#define DEV_CLASS_MOBILE_VEHICLE 551 //ƶ豸 +/* 移动车载设备: 551-600*/ +#define DEV_CLASS_MOBILE_VEHICLE 551 //移动车载设备 -//ܷǣ601-650 -#define DEV_CLASS_INTELLIGENT_ANALYZER 601 //ܷ +//智能分析仪:601-650 +#define DEV_CLASS_INTELLIGENT_ANALYZER 601 //智能分析仪 -//ܽͨ651-700 -#define DEV_CLASS_INTELLIGENT_TRAFFIC_SERVER 651 //ܽͨ -#define DS_TP2200_EC 652 //ͻʾ +//智能交通服务器:651-700 +#define DEV_CLASS_INTELLIGENT_TRAFFIC_SERVER 651 //智能交通服务器 +#define DS_TP2200_EC 652 //经济型机柜显示仪 -/* nvs 701-750 */ -#define DEV_CLASS_NVS 701 //ͨnvs +/* nvs相关 701-750 */ +#define DEV_CLASS_NVS 701 //普通nvs -/*ԴRFIDϵ 751-800*/ -#define DS_TRI21A_1_P 751 //ԴRFIDȡ +/*有源RFID系列 751-800*/ +#define DS_TRI21A_1_P 751 //有源RFID读取器 -/* 豸801-850 */ -#define DS_CLASS_FA 801 //׵ -#define DS_CLASS_PURE 802 //״ -#define DS_CLASS_FS 803 //̬ݷ -#define DS_CLASS_FD 804 //ץļ -#define DS_CLASS_HAWK 805 //ӥ -#define DS_CLASS_BLADE 806 // -#define DS_CLASS_HMCP 807 //ģͶԱȷ +/* 数据中心设备801-850 */ +#define DS_CLASS_FA 801 //脸谱单机 +#define DS_CLASS_PURE 802 //脸谱纯分析 +#define DS_CLASS_FS 803 //人脸静态数据服务器 +#define DS_CLASS_FD 804 //抓拍检测服务器 +#define DS_CLASS_HAWK 805 //猎鹰服务器 +#define DS_CLASS_BLADE 806 //刀锋 +#define DS_CLASS_HMCP 807 //模型对比服务器 -/* 851 - 900*/ -#define DEV_CLASS_SMART_LOCK 851 // +/* 智能锁相关 851 - 900*/ +#define DEV_CLASS_SMART_LOCK 851 //智能锁盒子 -/* ״ 901 - 950*/ -#define DEV_CLASS_RADAR 901 //״Ʒ +/* 雷达相关 901 - 950*/ +#define DEV_CLASS_RADAR 901 //雷达产品 -/* ǻ 951 - 1000*/ -#define DEV_CLASS_FIRE_CONTROL 951 //Ʒ +/* 智慧消防相关 951 - 1000*/ +#define DEV_CLASS_FIRE_CONTROL 951 //消防产品 -/* 1001 - 1050*/ -#define DEV_CLASS_SECURITY_CHECK 1001 //Ʒ +/* 安检相关 1001 - 1050*/ +#define DEV_CLASS_SECURITY_CHECK 1001 //安检产品 -#define DEV_CLASS_CONFERENCE_TABLET 1051 //ƽ +#define DEV_CLASS_CONFERENCE_TABLET 1051 //会议平板 -#define DEV_CLASS_JUDICIAL_TABLET 1101 //˾ƽ +#define DEV_CLASS_JUDICIAL_TABLET 1101 //司法平板 -/* ƵƷ 1201 - 1250*/ -#define DEV_CLASS_BROADCAST_MANAGEMENT_HOST 1201 //㲥 +/* 音频产品相关 1201 - 1250*/ +#define DEV_CLASS_BROADCAST_MANAGEMENT_HOST 1201 //广播管理主机 -/*ȫϸ 8451-8470*/ -#define iDS_PT 8451 //ȫϸ +/*全景细节相机: 8451-8470*/ +#define iDS_PT 8451 //全景细节相机 -/*ӾƷ 9851 - 9900*/ -#define DS_XCM1_IP 9851 //Ӿ +/*网络接警机产品 9851 - 9900*/ +#define DS_XCM1_IP 9851 //网络接警机 -/* 豸 65534 */ -#define DEV_CLASS_DEFAULT 65534 //Ĭ豸 -/**********************豸 end**********************/ +/* 其他设备类型 65534 */ +#define DEV_CLASS_DEFAULT 65534 //默认设备类型 +/**********************设备大类 end**********************/ -/******************************ȡ*********************************/ -//ȡ -#define DEVICE_SOFTHARDWARE_ABILITY 0x001 //豸Ӳ -#define DEVICE_NETWORK_ABILITY 0x002 //豸 -#define DEVICE_ENCODE_ALL_ABILITY 0x003 //豸б -#define DEVICE_ENCODE_CURRENT 0x004 //豸ǰ -#define IPC_FRONT_PARAMETER 0x005 //ipcǰ˲1.0 -#define IPC_UPGRADE_DESCRIPTION 0x006 //ipcϢ -#define DEVICE_RAID_ABILITY 0x007 //RAID -#define DEVICE_ENCODE_ALL_ABILITY_V20 0x008 //豸б2.0 -#define IPC_FRONT_PARAMETER_V20 0x009 //ipcǰ˲2.0 -#define DEVICE_ALARM_ABILITY 0x00a // -#define DEVICE_DYNCHAN_ABILITY 0x00b //豸ͨ -#define DEVICE_USER_ABILITY 0x00c //豸û -#define DEVICE_NETAPP_ABILITY 0x00d //豸Ӧò -#define DEVICE_VIDEOPIC_ABILITY 0x00e //豸ͼ -#define DEVICE_JPEG_CAP_ABILITY 0x00f //豸JPEGץͼ -#define DEVICE_SERIAL_ABILITY 0x010 //RS232RS485 -#define DEVICE_ABILITY_INFO 0x011 //豸ͨͣݷ͵ڵ -#define STREAM_ABILITY 0x012 // -#define SYSTEM_MANAGEMENT_ABILITY 0x013 //豸ϵͳ -#define IP_VIEW_DEV_ABILITY 0x014 //IPӶԽֻ -#define VCA_DEV_ABILITY 0x100 //豸ܷ -#define VCA_CHAN_ABILITY 0x110 //쳣Ϊ +/******************************能力集获取*********************************/ +//能力获取命令 +#define DEVICE_SOFTHARDWARE_ABILITY 0x001 //设备软硬件能力 +#define DEVICE_NETWORK_ABILITY 0x002 //设备网络能力 +#define DEVICE_ENCODE_ALL_ABILITY 0x003 //设备所有编码能力 +#define DEVICE_ENCODE_CURRENT 0x004 //设备当前编码能力 +#define IPC_FRONT_PARAMETER 0x005 //ipc前端参数1.0 +#define IPC_UPGRADE_DESCRIPTION 0x006 //ipc升级信息 +#define DEVICE_RAID_ABILITY 0x007 //RAID能力 +#define DEVICE_ENCODE_ALL_ABILITY_V20 0x008 //设备所有编码能力2.0 +#define IPC_FRONT_PARAMETER_V20 0x009 //ipc前端参数2.0 +#define DEVICE_ALARM_ABILITY 0x00a //辅助报警能力 +#define DEVICE_DYNCHAN_ABILITY 0x00b //设备数字通道能力 +#define DEVICE_USER_ABILITY 0x00c //设备用户管理参数能力 +#define DEVICE_NETAPP_ABILITY 0x00d //设备网络应用参数能力 +#define DEVICE_VIDEOPIC_ABILITY 0x00e //设备图像参数能力 +#define DEVICE_JPEG_CAP_ABILITY 0x00f //设备JPEG抓图能力 +#define DEVICE_SERIAL_ABILITY 0x010 //RS232和RS485串口能力 +#define DEVICE_ABILITY_INFO 0x011 //设备通用能力类型,具体能力根据发送的能力节点来区分 +#define STREAM_ABILITY 0x012 //流能力 +#define SYSTEM_MANAGEMENT_ABILITY 0x013 //设备系统管理能力 +#define IP_VIEW_DEV_ABILITY 0x014 //IP可视对讲分机能力 +#define VCA_DEV_ABILITY 0x100 //设备智能分析的总能力 +#define VCA_CHAN_ABILITY 0x110 //异常行为检测能力 #define TRANSFER_ABILITY 0x120 -#define MATRIXDECODER_ABILITY 0x200 //·ʾ -#define VIDEOPLATFORM_ABILITY 0x210 //Ƶۺƽ̨ -#define VIDEOPLATFORM_SBUCODESYSTEM_ABILITY 0x211 //Ƶۺƽ̨ϵͳ -#define WALL_ABILITY 0x212 //ǽ -#define MATRIX_ABILITY 0x213 //SDI -#define DECODECARD_ABILITY 0x220 //뿨 -#define VIDEOPLATFORM_ABILITY_V40 0x230 //Ƶۺƽ̨ -#define MATRIXMANAGEDEVICE_ABILITY 0x240 // -#define MATRIXDECODER_ABILITY_V41 0x260 // -#define DECODER_ABILITY 0x261 //xml -#define DECODECARD_ABILITY_V41 0x270 //뿨V41 -#define CODECARD_ABILITY 0x271 //뿨 -#define SNAPCAMERA_ABILITY 0x300 //ץĻ -#define ITC_TRIGGER_MODE_ABILITY 0x301 //IPC豸Ĵģʽ -#define COMPRESSIONCFG_ABILITY 0x400 //ȡѹ -#define COMPRESSION_LIMIT 0x401 //ȡѹ -#define PIC_CAPTURE_ABILITY 0x402 //ͼƬֱ -#define ALARMHOST_ABILITY 0x500 //籨 -#define IT_DEVICE_ABILITY 0x501 //ܽͨ -#define SCREENCONTROL_ABILITY 0x600 // -#define SCREENSERVER_ABILITY 0x610 // -#define FISHEYE_ABILITY 0x700 // -#define LCD_SCREEN_ABILITY 0x800 //LCDĻ 2013-10-12 -#define ACS_ABILITY 0x801 //Ž -#define MERGEDEV_ABILITY 0x802 // -#define CAM_FUSION_ABILITY 0x803 //ƴ -#define OPTICAL_DEV_ACCESS_ABILITY 0x805 //˻ -#define NET_RING_ABILITY 0x806 // -#define LED_ABILITY 0x807 //LED -#define PUBLISHDEV_ABILITY 0x80a //Ϣ -#define SCREEN_EXCHANGE_ABILITY 0x80b //Ļ -#define REMOTE_NETMGR_FOT_ABILITY 0x80e //Զշ +#define MATRIXDECODER_ABILITY 0x200 //多路解码器显示、解码能力 +#define VIDEOPLATFORM_ABILITY 0x210 //视频综合平台能力集 +#define VIDEOPLATFORM_SBUCODESYSTEM_ABILITY 0x211 //视频综合平台编码子系统能力集 +#define WALL_ABILITY 0x212 //电视墙能力集 +#define MATRIX_ABILITY 0x213 //SDI矩阵能力 +#define DECODECARD_ABILITY 0x220 //解码卡服务器能力集 +#define VIDEOPLATFORM_ABILITY_V40 0x230 //视频综合平台能力集 +#define MATRIXMANAGEDEVICE_ABILITY 0x240 //矩阵接入网关能力集 +#define MATRIXDECODER_ABILITY_V41 0x260 //解码器能力集 +#define DECODER_ABILITY 0x261 //解码器xml能力集 +#define DECODECARD_ABILITY_V41 0x270 //解码卡服务器能力集V41 +#define CODECARD_ABILITY 0x271 //编码卡能力集 +#define SNAPCAMERA_ABILITY 0x300 //抓拍机能力集 +#define ITC_TRIGGER_MODE_ABILITY 0x301 //智能IPC设备的触发模式能力 +#define COMPRESSIONCFG_ABILITY 0x400 //获取压缩参数能力集合 +#define COMPRESSION_LIMIT 0x401 //获取主子码流压缩参数能力限制 +#define PIC_CAPTURE_ABILITY 0x402 //获图片分辨率能力集合 +#define ALARMHOST_ABILITY 0x500 //网络报警主机能力集 +#define IT_DEVICE_ABILITY 0x501 //智能交通能力集 +#define SCREENCONTROL_ABILITY 0x600 //大屏控制器能力集 +#define SCREENSERVER_ABILITY 0x610 //大屏服务器能力集 +#define FISHEYE_ABILITY 0x700 //鱼眼能力集 +#define LCD_SCREEN_ABILITY 0x800 //LCD屏幕能力 2013-10-12 +#define ACS_ABILITY 0x801 //门禁能力 +#define MERGEDEV_ABILITY 0x802 //合码器能力集 +#define CAM_FUSION_ABILITY 0x803 //相机拼接能力 +#define OPTICAL_DEV_ACCESS_ABILITY 0x805 //光端机接入能力 +#define NET_RING_ABILITY 0x806 //环网能力集 +#define LED_ABILITY 0x807 //LED屏能力集 +#define PUBLISHDEV_ABILITY 0x80a //信息发布能力 +#define SCREEN_EXCHANGE_ABILITY 0x80b //屏幕互动能力 +#define REMOTE_NETMGR_FOT_ABILITY 0x80e //远端网管收发器能力 /************************************************* -ýṹ(_V30Ϊ9000) +参数配置结构、参数(其中_V30为9000新增) **************************************************/ -//Ӱ쳣Ϣ -// -#define EXCEPTION_MAJOR_MAINBOARD_BOOT 0x1 // -// -#define EXCEPTION_MINOR_PCIE_SCAN 0x1 // pcie·ɨ쳣 -#define EXCEPTION_MINOR_DOWNLOAD_SUBBOARD 0xa //Ӱ쳣 +//子板异常信息 +//主类型 +#define EXCEPTION_MAJOR_MAINBOARD_BOOT 0x1 //主板启动类型 +//次类型 +#define EXCEPTION_MINOR_PCIE_SCAN 0x1 // pcie链路扫描异常 +#define EXCEPTION_MINOR_DOWNLOAD_SUBBOARD 0xa //下载子板完成异常 -// -#define EXCEPTION_MAJOR_SUBBOARD_BOOT 0x2 //Ӱ -// -#define EXCEPTION_MINOR_INEXISTENCE 0x1 //PCI-EɨǰӰ岻 -#define EXCEPTION_MINOR_UBOOT_DOWNLOAD 0xa // uboot쳣 -#define EXCEPTION_MINOR_UBOOT_INIT 0xe //ubootʼ쳣 -#define EXCEPTION_MINOR_ROOTFS_DOWNLOAD 0x14 //rootfs.img쳣 -#define EXCEPTION_MINOR_UIMAGE_DOWNLOAD 0x19 //uImage쳣 -#define EXCEPTION_MINOR_UBOOT_SETBOOTFLAG 0x1e // uboot־λλ쳣 -#define EXCEPTION_MINOR_ROOTFS_BOOT_SUBBOARD 0x23 // rootfs쳣 -#define EXCEPTION_MINOR_NEED_FILE_FINISH 0x28 //Ӱļ쳣 +//主类型 +#define EXCEPTION_MAJOR_SUBBOARD_BOOT 0x2 //子板启动类型 +//次类型 +#define EXCEPTION_MINOR_INEXISTENCE 0x1 //PCI-E扫不到或当前子板不存在 +#define EXCEPTION_MINOR_UBOOT_DOWNLOAD 0xa // uboot下载异常 +#define EXCEPTION_MINOR_UBOOT_INIT 0xe //uboot初始化异常 +#define EXCEPTION_MINOR_ROOTFS_DOWNLOAD 0x14 //rootfs.img下载异常 +#define EXCEPTION_MINOR_UIMAGE_DOWNLOAD 0x19 //uImage下载异常 +#define EXCEPTION_MINOR_UBOOT_SETBOOTFLAG 0x1e // uboot启动标志位置位异常 +#define EXCEPTION_MINOR_ROOTFS_BOOT_SUBBOARD 0x23 // rootfs启动异常 +#define EXCEPTION_MINOR_NEED_FILE_FINISH 0x28 //子板所需文件传输异常 -// -#define EXCEPTION_MAJOR_SUBBOARD_HARDWARE 0x3 //ӰӲ -// -#define EXCEPTION_MINOR_AD 0x1 //AD쳣 -#define EXCEPTION_MINOR_DA 0xa // DA쳣 -#define EXCEPTION_MINOR_TIMER 0xb //ʱ쳣 +//主类型 +#define EXCEPTION_MAJOR_SUBBOARD_HARDWARE 0x3 //子板硬件类型 +//次类型 +#define EXCEPTION_MINOR_AD 0x1 //AD异常 +#define EXCEPTION_MINOR_DA 0xa // DA异常 +#define EXCEPTION_MINOR_TIMER 0xb //时钟异常 -// -#define EXCEPTION_MAJOR_FPGA 0x4 //FPGA -// -#define EXCEPTION_MINOR_IDLE 0x1 //޷IDLE -#define EXCEPTION_MINOR_LANE 0xa // LANE OKʧ -#define EXCEPTION_MINOR_REGISTER_ALL_F 0xe //FPGAĴȫF -#define EXCEPTION_MINOR_MEMORY_INIT_FAIL 0x14 //FPGAڴʼʧ -// -#define EXCEPTION_MAJOR_DSP 0x5 //DSP +//主类型 +#define EXCEPTION_MAJOR_FPGA 0x4 //FPGA类型 +//次类型 +#define EXCEPTION_MINOR_IDLE 0x1 //无法IDLE +#define EXCEPTION_MINOR_LANE 0xa // LANE OK失败 +#define EXCEPTION_MINOR_REGISTER_ALL_F 0xe //FPGA寄存器全F +#define EXCEPTION_MINOR_MEMORY_INIT_FAIL 0x14 //FPGA内存初始化失败 +//主类型 +#define EXCEPTION_MAJOR_DSP 0x5 //DSP类型 -// -#define EXCEPTION_MAJOR_ARM 0x6 //ARM +//主类型 +#define EXCEPTION_MAJOR_ARM 0x6 //ARM类型 -// -#define EXCEPTION_MAJOR_BACKBOARD 0x7 // -// -#define EXCEPTION_MINOR_BACKBOARD_TYPE 0x1 //ȡ쳣 -#define EXCEPTION_MINOR_SERDES 0xa //ƵоƬ -#define EXCEPTION_MINOR_CLOCK 0xe //ʱӹ -#define EXCEPTION_MINOR_SYNCH 0x14 //ͬźŹ +//主类型 +#define EXCEPTION_MAJOR_BACKBOARD 0x7 //背板类型 +//次类型 +#define EXCEPTION_MINOR_BACKBOARD_TYPE 0x1 //获取背板类型异常 +#define EXCEPTION_MINOR_SERDES 0xa //视频交换芯片 +#define EXCEPTION_MINOR_CLOCK 0xe //时钟故障 +#define EXCEPTION_MINOR_SYNCH 0x14 //同步信号故障 -// -#define EXCEPTION_MAJOR_SUBBOARD_NET 0x8 //Ӱ -// -#define EXCEPTION_MINOR_IP_CONFLICT 0x1 //IPͻ -#define EXCEPTION_MINOR_DISCONNECT 0x14 // +//主类型 +#define EXCEPTION_MAJOR_SUBBOARD_NET 0x8 //子板网络 +//次类型 +#define EXCEPTION_MINOR_IP_CONFLICT 0x1 //IP冲突 +#define EXCEPTION_MINOR_DISCONNECT 0x14 // 断网 //[add]by zengxiaole 2017-09-27 DS-19D2000-S v2.0 -#define MAX_FIRE_ALARM_ZONE 12 // -#define MAX_FIRE_ALARM_POINT_ZONE 32 // +#define MAX_FIRE_ALARM_ZONE 12 //最大消防主机报警分区个数 +#define MAX_FIRE_ALARM_POINT_ZONE 32 //最大消防主机报警火点个数 typedef enum tagCharEncodeType @@ -9349,15 +9349,15 @@ typedef enum tagCharEncodeType ///////////////////////////////////////////////////////////////////////// -//Уʱṹ +//校时结构参数 typedef struct { - DWORD dwYear; // - DWORD dwMonth; // - DWORD dwDay; // - DWORD dwHour; //ʱ - DWORD dwMinute; // - DWORD dwSecond; // + DWORD dwYear; //年 + DWORD dwMonth; //月 + DWORD dwDay; //日 + DWORD dwHour; //时 + DWORD dwMinute; //分 + DWORD dwSecond; //秒 }NET_DVR_TIME, *LPNET_DVR_TIME; typedef struct tagNET_DVR_TIME_V30 @@ -9368,53 +9368,53 @@ typedef struct tagNET_DVR_TIME_V30 BYTE byHour; BYTE byMinute; BYTE bySecond; - BYTE byISO8601; /*Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ */ - WORD wMilliSec; //룬ȲĬΪ0 - char cTimeDifferenceH; //UTCʱСʱ-12 ... +14+ʾ, byISO8601Ϊ1ʱЧ - char cTimeDifferenceM; //UTCʱӣ-30, 30, 45+ʾbyISO8601Ϊ1ʱЧ + BYTE byISO8601; /*是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 */ + WORD wMilliSec; //毫秒,精度不够,默认为0 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区, byISO8601为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 30, 45,+表示东区,byISO8601为1时有效 }NET_DVR_TIME_V30, *LPNET_DVR_TIME_V30; typedef struct tagNET_DVR_TIME_SEARCH { - WORD wYear; //꣬豸OSDʱ - BYTE byMonth; //£豸OSDʱ - BYTE byDay; //գ豸OSDʱ - BYTE byHour; //ʱ豸OSDʱ - BYTE byMinute; //֣豸OSDʱ - BYTE bySecond; //룬豸OSDʱ - char cTimeDifferenceH; //ʱ׼ʱʱСʱ-12 ... +14 - char cTimeDifferenceM; //ʱ׼ʱʱӣ-30, 0, 30, 45 - BYTE byLocalOrUTC; //0-ʱЧ豸ʱ䣬豸OSDʱ 1-ʱЧ - WORD wMillisecond; //룬ȲĬΪ0 + WORD wYear; //年,设备OSD时间 + BYTE byMonth; //月,设备OSD时间 + BYTE byDay; //日,设备OSD时间 + BYTE byHour; //时,设备OSD时间 + BYTE byMinute; //分,设备OSD时间 + BYTE bySecond; //秒,设备OSD时间 + char cTimeDifferenceH; //与国际标准时间的时差(小时),-12 ... +14 + char cTimeDifferenceM; //与国际标准时间的时差(分钟),-30, 0, 30, 45 + BYTE byLocalOrUTC; //0-时差无效,设备本地时间,即设备OSD时间 1-时差有效 + WORD wMillisecond; //毫秒,精度不够,默认为0 }NET_DVR_TIME_SEARCH, *LPNET_DVR_TIME_SEARCH; typedef struct tagNET_DVR_TIME_SEARCH_COND { - WORD wYear; // - BYTE byMonth; // - BYTE byDay; // - BYTE byHour; //ʱ - BYTE byMinute; // - BYTE bySecond; // - BYTE byLocalOrUTC; //0-ʱЧ豸ʱ䣬豸OSDʱ 1-ʱЧ - WORD wMillisecond; //룬ȲĬΪ0 - char cTimeDifferenceH; //UTCʱСʱ-12 ... +14+ʾbyLocalOrUTCΪ1ʱЧ - char cTimeDifferenceM; //UTCʱӣ-30, 0, 30, 45+ʾbyLocalOrUTCΪ1ʱЧ + WORD wYear; //年 + BYTE byMonth; //月 + BYTE byDay; //日 + BYTE byHour; //时 + BYTE byMinute; //分 + BYTE bySecond; //秒 + BYTE byLocalOrUTC; //0-时差无效,设备本地时间,即设备OSD时间 1-时差有效 + WORD wMillisecond; //毫秒,精度不够,默认为0 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区,byLocalOrUTC为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 0, 30, 45,+表示东区,byLocalOrUTC为1时有效 }NET_DVR_TIME_SEARCH_COND, *LPNET_DVR_TIME_SEARCH_COND; typedef struct tagNET_DVR_TIME_V50 { - WORD wYear; // - BYTE byMonth; // - BYTE byDay; // - BYTE byHour; //ʱ - BYTE byMinute; // - BYTE bySecond; // - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - WORD wMillisecond; //룬ȲĬΪ0 - char cTimeDifferenceH; //UTCʱСʱ-12 ... +14+ʾbyISO8601Ϊ1ʱЧ - char cTimeDifferenceM; //UTCʱӣ-30, 0, 30, 45+ʾbyISO8601Ϊ1ʱЧ + WORD wYear; //年 + BYTE byMonth; //月 + BYTE byDay; //日 + BYTE byHour; //时 + BYTE byMinute; //分 + BYTE bySecond; //秒 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + WORD wMillisecond; //毫秒,精度不够,默认为0 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区,byISO8601为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 0, 30, 45,+表示东区,byISO8601为1时有效 }NET_DVR_TIME_V50, *LPNET_DVR_TIME_V50; @@ -9427,11 +9427,11 @@ typedef struct tagNET_DVR_CALIBRATE_TIME BYTE byRes[14]; }NET_DVR_CALIBRATE_TIME,*LPNET_DVR_CALIBRATE_TIME; -#define MAX_TIMESIGN_LEN 32 //ԶУʱϢ +#define MAX_TIMESIGN_LEN 32 //自定义校时标记信息长度 typedef struct tagNET_DVR_TIMESIGN_CFG { DWORD dwSize; - BYTE byCustomSetTimeSign[MAX_TIMESIGN_LEN/*32*/];//ԶУʱ + BYTE byCustomSetTimeSign[MAX_TIMESIGN_LEN/*32*/];//自定义校时标记 BYTE byRes[96]; }NET_DVR_TIMESIGN_CFG,*LPNET_DVR_TIMESIGN_CFG; @@ -9447,680 +9447,680 @@ typedef struct tagNET_DVR_TIME_EX BYTE byRes; }NET_DVR_TIME_EX,*LPNET_DVR_TIME_EX; -//ʱ(ӽṹ) +//时间段(子结构) typedef struct { - //ʼʱ + //开始时间 BYTE byStartHour; BYTE byStartMin; - //ʱ + //结束时间 BYTE byStopHour; BYTE byStopMin; }NET_DVR_SCHEDTIME, *LPNET_DVR_SCHEDTIME; -/*豸쳣ʽ*/ -/*豸쳣ʽ*/ -#define NOACTION 0x0 /*Ӧ*/ -#define WARNONMONITOR 0x1 /*ʾϾ*/ -#define WARNONAUDIOOUT 0x2 /**/ -#define UPTOCENTER 0x4 /*ϴ*/ -#define TRIGGERALARMOUT 0x8 /**/ -#define TRIGGERCATPIC 0x10 /*ץͼϴE-mail*/ -#define SEND_PIC_FTP 0x200 /*ץͼϴftp*/ +/*设备报警和异常处理方式*/ +/*设备报警和异常处理方式*/ +#define NOACTION 0x0 /*无响应*/ +#define WARNONMONITOR 0x1 /*显示器上警告*/ +#define WARNONAUDIOOUT 0x2 /*声音警告*/ +#define UPTOCENTER 0x4 /*上传中心*/ +#define TRIGGERALARMOUT 0x8 /*触发报警输出*/ +#define TRIGGERCATPIC 0x10 /*触发抓图并上传E-mail*/ +#define SEND_PIC_FTP 0x200 /*抓图并上传ftp*/ typedef struct tagNET_DVR_STRUCTHEAD { - WORD wLength; //ṹ - BYTE byVersion ; /*ߵ4λֱߵͰ汾ݰ汾ͳȽչͬİ汾ijȽ*/ + WORD wLength; //结构长度 + BYTE byVersion ; /*高低4位分别代表高低版本,后续根据版本和长度进行扩展,不同的版本的长度进行限制*/ BYTE byRes; }NET_DVR_STRUCTHEAD, *LPNET_DVR_STRUCTHEAD; typedef struct tagNET_DVR_HANDLEEXCEPTION_V41 { - DWORD dwHandleType; //쳣,쳣ʽ"" - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - /*0x400: 齻 ۽ģʽṩԭ豸ԶɣIPC5.1.0*/ - /*0x800: PTZ(Ŀ)*/ - /*0x4000:׹Ʊ*/ - /*0x10000:ű*/ - /*0x20000:ָʾƱ*/ - DWORD dwMaxRelAlarmOutChanNum ; //ıֻ֧ͨ - DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //ͨ - BYTE byRes[64]; // + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x400: 虚交侦测 联动 聚焦模式(提供可配置项,原先设备自动完成)IPC5.1.0*/ + /*0x800: PTZ联动(球机目标)*/ + /*0x4000:白光灯报警*/ + /*0x10000:短信报警*/ + /*0x20000:指示灯报警*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //触发报警通道 + BYTE byRes[64]; //保留 }NET_DVR_HANDLEEXCEPTION_V41, *LPNET_DVR_HANDLEEXCEPTION_V41; typedef struct tagNET_DVR_HANDLEEXCEPTION_V40 { - DWORD dwHandleType; //쳣,쳣ʽ"" - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x80: ¼(ĿǰֻPCNVR֧) */ - /*0x100: ̨Ԥõ (ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - /*0x400: 齻 ۽ģʽṩԭ豸ԶɣIPC5.1.0*/ - /*0x800: PTZ(Ŀ)*/ - /*0x1000:ץͼϴ*/ - /*0x2000:ű*/ - /*0x4000:׹Ʊ*/ - /*0x8000:*/ - DWORD dwMaxRelAlarmOutChanNum ; //ıֻ֧ͨ - DWORD dwRelAlarmOutChanNum; //ıͨ ʵ֧ - DWORD dwRelAlarmOut[MAX_CHANNUM_V30]; //ͨ - BYTE byWhiteLightDurationTime;//׹˸ʱ1~60s(˰׹ƱʱЧ) - BYTE byBrightness;//׹ȣΧ0-100Ĭ50 - BYTE byAudioType;// - BYTE byTimes;//Χ0-9Ĭ2, 0xff- - BYTE byRes[60]; // + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x80: 报警触发录像(目前只有PCNVR支持) */ + /*0x100: 报警触发云台预置点 (目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x400: 虚交侦测 联动 聚焦模式(提供可配置项,原先设备自动完成)IPC5.1.0*/ + /*0x800: PTZ联动(球机目标)*/ + /*0x1000:抓图上传到云*/ + /*0x2000:短信报警*/ + /*0x4000:白光灯报警*/ + /*0x8000:语音报警*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOutChanNum; //触发的报警输出通道数 实际支持数 + DWORD dwRelAlarmOut[MAX_CHANNUM_V30]; //触发报警通道 + BYTE byWhiteLightDurationTime;//白光灯闪烁持续时长,1~60s(当开启了白光灯报警时生效) + BYTE byBrightness;//白光灯亮度,范围0-100,默认50 + BYTE byAudioType;//声音报警类型 + BYTE byTimes;//声音报警次数,范围:0-9,默认2, 0xff-持续 + BYTE byRes[60]; //保留 }NET_DVR_HANDLEEXCEPTION_V40, *LPNET_DVR_HANDLEEXCEPTION_V40; -//쳣ṹ(ӽṹ)(ദʹ)(9000չ) +//报警和异常处理结构(子结构)(多处使用)(9000扩展) typedef struct { - DWORD dwHandleType; /*ʽ,ʽ""*/ - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - /*0x2000:ű*/ + DWORD dwHandleType; /*处理方式,处理方式的"或"结果*/ + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x2000:短信报警*/ BYTE byRelAlarmOut[MAX_ALARMOUT_V30]; - //ͨ,,Ϊ1ʾ + //报警触发的输出通道,报警触发的输出,为1表示触发该输出 }NET_DVR_HANDLEEXCEPTION_V30, *LPNET_DVR_HANDLEEXCEPTION_V30; -//쳣ṹ(ӽṹ)(ദʹ) +//报警和异常处理结构(子结构)(多处使用) typedef struct { - DWORD dwHandleType; /*ʽ,ʽ""*/ - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JpegץͼϴEMail*/ - BYTE byRelAlarmOut[MAX_ALARMOUT]; //ͨ,,Ϊ1ʾ + DWORD dwHandleType; /*处理方式,处理方式的"或"结果*/ + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: Jpeg抓图并上传EMail*/ + BYTE byRelAlarmOut[MAX_ALARMOUT]; //报警触发的输出通道,报警触发的输出,为1表示触发该输出 }NET_DVR_HANDLEEXCEPTION, *LPNET_DVR_HANDLEEXCEPTION; -//DVR豸 +//DVR设备参数 typedef struct { DWORD dwSize; - BYTE sDVRName[NAME_LEN]; //DVR - DWORD dwDVRID; //DVR ID,ң //V1.4(0-99), V1.5(0-255) - DWORD dwRecycleRecord; //Ƿѭ¼,0:; 1: - //²ɸ - BYTE sSerialNumber[SERIALNO_LEN]; //к - DWORD dwSoftwareVersion; //汾,16λ汾,16λǴΰ汾 - DWORD dwSoftwareBuildDate; //,0xYYYYMMDD - DWORD dwDSPSoftwareVersion; //DSP汾,16λ汾,16λǴΰ汾 - DWORD dwDSPSoftwareBuildDate; // DSP,0xYYYYMMDD - DWORD dwPanelVersion; // ǰ汾,16λ汾,16λǴΰ汾 - DWORD dwHardwareVersion; // Ӳ汾,16λ汾,16λǴΰ汾 - BYTE byAlarmInPortNum; //DVR - BYTE byAlarmOutPortNum; //DVR - BYTE byRS232Num; //DVR 232ڸ - BYTE byRS485Num; //DVR 485ڸ - BYTE byNetworkPortNum; //ڸ - BYTE byDiskCtrlNum; //DVR Ӳ̿ - BYTE byDiskNum; //DVR Ӳ̸ - BYTE byDVRType; //DVR, 1:DVR 2:ATM DVR 3:DVS ...... - BYTE byChanNum; //DVR ͨ - BYTE byStartChan; //ʼͨ,DVS-1,DVR - 1 - BYTE byDecordChans; //DVR · - BYTE byVGANum; //VGAڵĸ - BYTE byUSBNum; //USBڵĸ - BYTE byAuxoutNum; //ڵĸ - BYTE byAudioNum; //ڵĸ - BYTE byIPChanNum; //ͨ + BYTE sDVRName[NAME_LEN]; //DVR名称 + DWORD dwDVRID; //DVR ID,用于遥控器 //V1.4(0-99), V1.5(0-255) + DWORD dwRecycleRecord; //是否循环录像,0:不是; 1:是 + //以下不可更改 + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + DWORD dwSoftwareVersion; //软件版本号,高16位是主版本,低16位是次版本 + DWORD dwSoftwareBuildDate; //软件生成日期,0xYYYYMMDD + DWORD dwDSPSoftwareVersion; //DSP软件版本,高16位是主版本,低16位是次版本 + DWORD dwDSPSoftwareBuildDate; // DSP软件生成日期,0xYYYYMMDD + DWORD dwPanelVersion; // 前面板版本,高16位是主版本,低16位是次版本 + DWORD dwHardwareVersion; // 硬件版本,高16位是主版本,低16位是次版本 + BYTE byAlarmInPortNum; //DVR报警输入个数 + BYTE byAlarmOutPortNum; //DVR报警输出个数 + BYTE byRS232Num; //DVR 232串口个数 + BYTE byRS485Num; //DVR 485串口个数 + BYTE byNetworkPortNum; //网络口个数 + BYTE byDiskCtrlNum; //DVR 硬盘控制器个数 + BYTE byDiskNum; //DVR 硬盘个数 + BYTE byDVRType; //DVR类型, 1:DVR 2:ATM DVR 3:DVS ...... + BYTE byChanNum; //DVR 通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 + BYTE byDecordChans; //DVR 解码路数 + BYTE byVGANum; //VGA口的个数 + BYTE byUSBNum; //USB口的个数 + BYTE byAuxoutNum; //辅口的个数 + BYTE byAudioNum; //语音口的个数 + BYTE byIPChanNum; //最大数字通道数 }NET_DVR_DEVICECFG, *LPNET_DVR_DEVICECFG; /* -IPַ +IP地址 */ typedef struct { - char sIpV4[16]; /* IPv4ַ */ - BYTE byIPv6[128]; /* */ + char sIpV4[16]; /* IPv4地址 */ + BYTE byIPv6[128]; /* 保留 */ }NET_DVR_IPADDR, *LPNET_DVR_IPADDR; typedef union tagNET_DVR_IPADDR_UNION { - char szIPv4[16]; //IPv4ַ - char szIPv6[256]; //IPv6ַ + char szIPv4[16]; //IPv4地址 + char szIPv6[256]; //IPv6地址 }NET_DVR_IPADDR_UNION, *LPNET_DVR_IPADDR_UNION; typedef struct tagNET_DVR_ADDRESS { - NET_DVR_IPADDR struIP; //IPַ - WORD wPort; //˿ں + NET_DVR_IPADDR struIP; //IP地址 + WORD wPort; //端口号 BYTE byRes[2]; }NET_DVR_ADDRESS, *LPNET_DVR_ADDRESS; /* -ݽṹ(ӽṹ)(9000չ) +网络数据结构(子结构)(9000扩展) */ typedef struct { - NET_DVR_IPADDR struDVRIP; //DVR IPַ - NET_DVR_IPADDR struDVRIPMask; //DVR IPַ - DWORD dwNetInterface; //ӿ1-10MBase-T 2-10MBase-Tȫ˫ 3-100MBase-TX 4-100Mȫ˫ 5-10M/100MӦ - WORD wDVRPort; //˿ں - WORD wMTU; //MTUãĬ1500 - BYTE byMACAddr[MACADDR_LEN]; // ַ - BYTE byEthernetPortNo; //ںţ0-Ч1-02-1Դƣֻ - BYTE byRes[1]; // + NET_DVR_IPADDR struDVRIP; //DVR IP地址 + NET_DVR_IPADDR struDVRIPMask; //DVR IP地址掩码 + DWORD dwNetInterface; //网络接口1-10MBase-T 2-10MBase-T全双工 3-100MBase-TX 4-100M全双工 5-10M/100M自适应 + WORD wDVRPort; //端口号 + WORD wMTU; //增加MTU设置,默认1500。 + BYTE byMACAddr[MACADDR_LEN]; // 物理地址 + BYTE byEthernetPortNo; //网口号,0-无效,1-网口0,2-网口1以此类推,只读 + BYTE byRes[1]; //保留 }NET_DVR_ETHERNET_V30, *LPNET_DVR_ETHERNET_V30; /* -ݽṹ(ӽṹ) +网络数据结构(子结构) */ typedef struct { - char sDVRIP[16]; //DVR IPַ - char sDVRIPMask[16]; //DVR IPַ - DWORD dwNetInterface; //ӿ 1-10MBase-T 2-10MBase-Tȫ˫ 3-100MBase-TX 4-100Mȫ˫ 5-10M/100MӦ - WORD wDVRPort; //˿ں - BYTE byMACAddr[MACADDR_LEN]; //ַ + char sDVRIP[16]; //DVR IP地址 + char sDVRIPMask[16]; //DVR IP地址掩码 + DWORD dwNetInterface; //网络接口 1-10MBase-T 2-10MBase-T全双工 3-100MBase-TX 4-100M全双工 5-10M/100M自适应 + WORD wDVRPort; //端口号 + BYTE byMACAddr[MACADDR_LEN]; //服务器的物理地址 }NET_DVR_ETHERNET; -//pppoeṹ +//pppoe结构 typedef struct { - DWORD dwPPPOE; //0-,1- - BYTE sPPPoEUser[NAME_LEN]; //PPPoEû - char sPPPoEPassword[PASSWD_LEN]; // PPPoE - NET_DVR_IPADDR struPPPoEIP; //PPPoE IPַ + DWORD dwPPPOE; //0-不启用,1-启用 + BYTE sPPPoEUser[NAME_LEN]; //PPPoE用户名 + char sPPPoEPassword[PASSWD_LEN]; // PPPoE密码 + NET_DVR_IPADDR struPPPoEIP; //PPPoE IP地址 }NET_DVR_PPPOECFG, *LPNET_DVR_PPPOECFG; -//ýṹ(9000չ) +//网络配置结构(9000扩展) typedef struct { DWORD dwSize; - NET_DVR_ETHERNET_V30 struEtherNet[MAX_ETHERNET]; //̫ - NET_DVR_IPADDR struRes1[2]; /**/ - NET_DVR_IPADDR struAlarmHostIpAddr; /* IPַ */ - BYTE byRes2[4]; /* */ - WORD wAlarmHostIpPort; /* ˿ں */ - BYTE byUseDhcp; /* ǷDHCP 0xff-Ч 0- 1-*/ - BYTE byIPv6Mode; //IPv6䷽ʽ0-·ɹ棬1-ֶã2-DHCP - NET_DVR_IPADDR struDnsServer1IpAddr; /* 1IPַ */ - NET_DVR_IPADDR struDnsServer2IpAddr; /* 2IPַ */ - BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IPIPַ */ - WORD wIpResolverPort; /* IP˿ں */ - WORD wHttpPortNo; /* HTTP˿ں */ - NET_DVR_IPADDR struMulticastIpAddr; /* ಥַ */ - NET_DVR_IPADDR struGatewayIpAddr; /* صַ */ + NET_DVR_ETHERNET_V30 struEtherNet[MAX_ETHERNET]; //以太网口 + NET_DVR_IPADDR struRes1[2]; /*保留*/ + NET_DVR_IPADDR struAlarmHostIpAddr; /* 报警主机IP地址 */ + BYTE byRes2[4]; /* 保留 */ + WORD wAlarmHostIpPort; /* 报警主机端口号 */ + BYTE byUseDhcp; /* 是否启用DHCP 0xff-无效 0-不启用 1-启用*/ + BYTE byIPv6Mode; //IPv6分配方式,0-路由公告,1-手动设置,2-启用DHCP分配 + NET_DVR_IPADDR struDnsServer1IpAddr; /* 域名服务器1的IP地址 */ + NET_DVR_IPADDR struDnsServer2IpAddr; /* 域名服务器2的IP地址 */ + BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IP解析服务器域名或IP地址 */ + WORD wIpResolverPort; /* IP解析服务器端口号 */ + WORD wHttpPortNo; /* HTTP端口号 */ + NET_DVR_IPADDR struMulticastIpAddr; /* 多播组地址 */ + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ NET_DVR_PPPOECFG struPPPoE; - BYTE byEnablePrivateMulticastDiscovery; //˽жಥ0~Ĭϣ1~ã2- - BYTE byEnableOnvifMulticastDiscovery; //Onvifಥ0~Ĭϣ1~ã2- - BYTE byEnableDNS; //DNSԶʹ, 0-1-򿪣2-ر + BYTE byEnablePrivateMulticastDiscovery; //私有多播搜索,0~默认,1~启用,2-禁用 + BYTE byEnableOnvifMulticastDiscovery; //Onvif多播搜索,0~默认,1~启用,2-禁用 + BYTE byEnableDNS; //DNS自动使能, 0-保留,1-打开,2-关闭 BYTE byRes[61]; } NET_DVR_NETCFG_V30, *LPNET_DVR_NETCFG_V30; -//ṹ +//多网卡配置网卡结构 typedef struct { - NET_DVR_IPADDR struDVRIP; //DVR IPַ - NET_DVR_IPADDR struDVRIPMask; //DVR IPַ - DWORD dwNetInterface; //ӿ1-10MBase-T 2-10MBase-Tȫ˫ 3-100MBase-TX 4-100Mȫ˫ 5-10M/100M/1000MӦ - BYTE byCardType; //ͣ0-ͨ1-2- - BYTE byEnableDNS; //DNSǷԶʹܣ0-1-, 0-ر - WORD wMTU; //MTUãĬ1500 - BYTE byMACAddr[MACADDR_LEN]; //ַֻʾ - BYTE byEthernetPortNo; //ںţ0-Ч1-02-1Դƣֻ - BYTE bySilkScreen; //˿ӡϢ0-Ч1-GE12-GE23-G14-G2ֻ - BYTE byUseDhcp; /* ǷDHCP */ + NET_DVR_IPADDR struDVRIP; //DVR IP地址 + NET_DVR_IPADDR struDVRIPMask; //DVR IP地址掩码 + DWORD dwNetInterface; //网络接口1-10MBase-T 2-10MBase-T全双工 3-100MBase-TX 4-100M全双工 5-10M/100M/1000M自适应 + BYTE byCardType; //网卡类型,0-普通网卡,1-内网网卡,2-外网网卡 + BYTE byEnableDNS; //DNS是否自动使能,0-保留,1-打开, 0-关闭 + WORD wMTU; //增加MTU设置,默认1500。 + BYTE byMACAddr[MACADDR_LEN]; //物理地址,只用于显示 + BYTE byEthernetPortNo; //网口号,0-无效,1-网口0,2-网口1以此类推,只读 + BYTE bySilkScreen; //丝印信息,0-无效,1-GE1,2-GE2,3-G1,4-G2,只读 + BYTE byUseDhcp; /* 是否启用DHCP */ BYTE byRes3[3]; - NET_DVR_IPADDR struGatewayIpAddr; /* صַ */ - NET_DVR_IPADDR struDnsServer1IpAddr; /* 1IPַ */ - NET_DVR_IPADDR struDnsServer2IpAddr; /* 2IPַ */ + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + NET_DVR_IPADDR struDnsServer1IpAddr; /* 域名服务器1的IP地址 */ + NET_DVR_IPADDR struDnsServer2IpAddr; /* 域名服务器2的IP地址 */ }NET_DVR_ETHERNET_MULTI, *LPNET_DVR_ETHERNET_MULTI; -//ýṹ +//多网卡网络配置结构 typedef struct { DWORD dwSize; - BYTE byDefaultRoute; //Ĭ·ɣ0ʾstruEtherNet[0]1ʾstruEtherNet[1] - BYTE byNetworkCardNum; //豸ʵʿõĿ - BYTE byWorkMode; //0-ͨģʽ1-ģʽ - BYTE byRes; // - NET_DVR_ETHERNET_MULTI struEtherNet[MAX_NETWORK_CARD]; //̫ - NET_DVR_IPADDR struManageHost1IpAddr; /* IPַ */ - NET_DVR_IPADDR struManageHost2IpAddr; /* IPַ */ - NET_DVR_IPADDR struAlarmHostIpAddr; /* IPַ */ - WORD wManageHost1Port; /* ˿ں */ - WORD wManageHost2Port; /* ˿ں */ - WORD wAlarmHostIpPort; /* ˿ں */ - BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IPIPַ */ - WORD wIpResolverPort; /* IP˿ں */ - WORD wDvrPort; //ͨѶ˿ Ĭ8000 - WORD wHttpPortNo; /* HTTP˿ں */ - WORD wDvrPort2; //ͨѶ˿2 + BYTE byDefaultRoute; //默认路由,0表示struEtherNet[0],1表示struEtherNet[1] + BYTE byNetworkCardNum; //设备实际可配置的网卡数目 + BYTE byWorkMode; //0-普通多网卡模式,1-内外网隔离模式 + BYTE byRes; //保留 + NET_DVR_ETHERNET_MULTI struEtherNet[MAX_NETWORK_CARD]; //以太网口 + NET_DVR_IPADDR struManageHost1IpAddr; /* 主管理主机IP地址 */ + NET_DVR_IPADDR struManageHost2IpAddr; /* 辅管理主机IP地址 */ + NET_DVR_IPADDR struAlarmHostIpAddr; /* 报警主机IP地址 */ + WORD wManageHost1Port; /* 主管理主机端口号 */ + WORD wManageHost2Port; /* 辅管理主机端口号 */ + WORD wAlarmHostIpPort; /* 报警主机端口号 */ + BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IP解析服务器域名或IP地址 */ + WORD wIpResolverPort; /* IP解析服务器端口号 */ + WORD wDvrPort; //通讯端口 默认8000 + WORD wHttpPortNo; /* HTTP端口号 */ + WORD wDvrPort2; //通讯端口2 BYTE byRes2[4]; - NET_DVR_IPADDR struMulticastIpAddr; /* ಥַ */ + NET_DVR_IPADDR struMulticastIpAddr; /* 多播组地址 */ NET_DVR_PPPOECFG struPPPoE; BYTE byRes3[24]; }NET_DVR_NETCFG_MULTI, *LPNET_DVR_NETCFG_MULTI; -//ýṹ +//网络配置结构 typedef struct { DWORD dwSize; - NET_DVR_ETHERNET struEtherNet[MAX_ETHERNET]; /* ̫ */ - char sManageHostIP[16]; //Զַ̹ - WORD wManageHostPort; //Զ̹˿ں - char sIPServerIP[16]; //IPServerַ - char sMultiCastIP[16]; //ಥַ - char sGatewayIP[16]; //صַ - char sNFSIP[16]; //NFSIPַ - BYTE sNFSDirectory[PATHNAME_LEN];//NFSĿ¼ - DWORD dwPPPOE; //0-,1- - BYTE sPPPoEUser[NAME_LEN]; //PPPoEû - char sPPPoEPassword[PASSWD_LEN];// PPPoE - char sPPPoEIP[16]; //PPPoE IPַ(ֻ) - WORD wHttpPort; //HTTP˿ں + NET_DVR_ETHERNET struEtherNet[MAX_ETHERNET]; /* 以太网口 */ + char sManageHostIP[16]; //远程管理主机地址 + WORD wManageHostPort; //远程管理主机端口号 + char sIPServerIP[16]; //IPServer服务器地址 + char sMultiCastIP[16]; //多播组地址 + char sGatewayIP[16]; //网关地址 + char sNFSIP[16]; //NFS主机IP地址 + BYTE sNFSDirectory[PATHNAME_LEN];//NFS目录 + DWORD dwPPPOE; //0-不启用,1-启用 + BYTE sPPPoEUser[NAME_LEN]; //PPPoE用户名 + char sPPPoEPassword[PASSWD_LEN];// PPPoE密码 + char sPPPoEIP[16]; //PPPoE IP地址(只读) + WORD wHttpPort; //HTTP端口号 }NET_DVR_NETCFG, *LPNET_DVR_NETCFG; -//ýṹ(V50) +//网络配置结构(V50) typedef struct tagNET_DVR_NETCFG_V50 { DWORD dwSize; - NET_DVR_ETHERNET_V30 struEtherNet[MAX_ETHERNET]; //̫ - NET_DVR_IPADDR struRes1[2]; /**/ - NET_DVR_IPADDR struAlarmHostIpAddr; /* IPַ */ - BYTE byRes2[4]; /* */ - WORD wAlarmHostIpPort; /* ˿ں */ - BYTE byUseDhcp; /* ǷDHCP 0xff-Ч 0- 1-*/ - BYTE byIPv6Mode; //IPv6䷽ʽ0-·ɹ棬1-ֶã2-DHCP - NET_DVR_IPADDR struDnsServer1IpAddr; /* 1IPַ */ - NET_DVR_IPADDR struDnsServer2IpAddr; /* 2IPַ */ - BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IPIPַ */ - WORD wIpResolverPort; /* IP˿ں */ - WORD wHttpPortNo; /* HTTP˿ں */ - NET_DVR_IPADDR struMulticastIpAddr; /* ಥַ */ - NET_DVR_IPADDR struGatewayIpAddr; /* صַ */ + NET_DVR_ETHERNET_V30 struEtherNet[MAX_ETHERNET]; //以太网口 + NET_DVR_IPADDR struRes1[2]; /*保留*/ + NET_DVR_IPADDR struAlarmHostIpAddr; /* 报警主机IP地址 */ + BYTE byRes2[4]; /* 保留 */ + WORD wAlarmHostIpPort; /* 报警主机端口号 */ + BYTE byUseDhcp; /* 是否启用DHCP 0xff-无效 0-不启用 1-启用*/ + BYTE byIPv6Mode; //IPv6分配方式,0-路由公告,1-手动设置,2-启用DHCP分配 + NET_DVR_IPADDR struDnsServer1IpAddr; /* 域名服务器1的IP地址 */ + NET_DVR_IPADDR struDnsServer2IpAddr; /* 域名服务器2的IP地址 */ + BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IP解析服务器域名或IP地址 */ + WORD wIpResolverPort; /* IP解析服务器端口号 */ + WORD wHttpPortNo; /* HTTP端口号 */ + NET_DVR_IPADDR struMulticastIpAddr; /* 多播组地址 */ + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ NET_DVR_PPPOECFG struPPPoE; - BYTE byEnablePrivateMulticastDiscovery; //˽жಥ0~Ĭϣ1~ã2- - BYTE byEnableOnvifMulticastDiscovery; //Onvifಥ0~Ĭϣ1~ã2- - WORD wAlarmHost2IpPort; /* 2˿ں */ - NET_DVR_IPADDR struAlarmHost2IpAddr; /* 2 IPַ */ - BYTE byEnableDNS; //DNSʹ, 0-رգ1- + BYTE byEnablePrivateMulticastDiscovery; //私有多播搜索,0~默认,1~启用,2-禁用 + BYTE byEnableOnvifMulticastDiscovery; //Onvif多播搜索,0~默认,1~启用,2-禁用 + WORD wAlarmHost2IpPort; /* 报警主机2端口号 */ + NET_DVR_IPADDR struAlarmHost2IpAddr; /* 报警主机2 IP地址 */ + BYTE byEnableDNS; //DNS使能, 0-关闭,1-打开 BYTE byRes[599]; }NET_DVR_NETCFG_V50, *LPNET_DVR_NETCFG_V50; -//sip +//sip配置 typedef struct tagNET_DVR_SIP_CFG { DWORD dwSize; - BYTE byEnableAutoLogin; //ʹԶעᣬ0-ʹܣ1-ʹ - BYTE byLoginStatus; //ע״̬0-δעᣬ1-עᣬ˲ֻܻȡ + BYTE byEnableAutoLogin; //使能自动注册,0-不使能,1-使能 + BYTE byLoginStatus; //注册状态,0-未注册,1-已注册,此参数只能获取 BYTE byRes1[2]; - NET_DVR_IPADDR stuServerIP; //SIPIP - WORD wServerPort; //SIP˿ + NET_DVR_IPADDR stuServerIP; //SIP服务器IP + WORD wServerPort; //SIP服务器端口 BYTE byRes2[2]; - BYTE byUserName[NAME_LEN]; //עû - BYTE byPassWord[PASSWD_LEN]; //ע + BYTE byUserName[NAME_LEN]; //注册用户名 + BYTE byPassWord[PASSWD_LEN]; //注册密码 BYTE byLocalNo[MAX_NUMBER_LEN]; - BYTE byDispalyName[MAX_NAME_LEN]; //豸ʾ - WORD wLocalPort; //ض˿ - BYTE byLoginCycle; //עڣ1-99 - BYTE byType;//0-IP/IPV6,1- - BYTE byDomainName[MAX_DOMAIN_NAME]; // + BYTE byDispalyName[MAX_NAME_LEN]; //设备显示名称 + WORD wLocalPort; //本地端口 + BYTE byLoginCycle; //注册周期,1-99分钟 + BYTE byType;//0-IP/IPV6,1-域名 + BYTE byDomainName[MAX_DOMAIN_NAME]; //域名 BYTE byRes[64]; }NET_DVR_SIP_CFG, *LPNET_DVR_SIP_CFG; typedef struct tagNET_DVR_SIP_CFG_V50 { DWORD dwSize; - BYTE byEnableAutoLogin; //ʹԶעᣬ0-ʹܣ1-ʹ - BYTE byLoginStatus; //ע״̬0-δעᣬ1-עᣬ˲ֻܻȡ + BYTE byEnableAutoLogin; //使能自动注册,0-不使能,1-使能 + BYTE byLoginStatus; //注册状态,0-未注册,1-已注册,此参数只能获取 BYTE byRes1[2]; - NET_DVR_IPADDR stuServerIP; //SIPIP - WORD wServerPort; //SIP˿ + NET_DVR_IPADDR stuServerIP; //SIP服务器IP + WORD wServerPort; //SIP服务器端口 BYTE byRes2[2]; - BYTE byUserName[NAME_LEN]; //עû - BYTE byPassWord[PASSWD_LEN]; //ע + BYTE byUserName[NAME_LEN]; //注册用户名 + BYTE byPassWord[PASSWD_LEN]; //注册密码 BYTE byLocalNo[MAX_NUMBER_LEN]; - BYTE byDispalyName[MAX_NAME_LEN]; //豸ʾ - WORD wLocalPort; //ض˿ - BYTE byLoginCycle; //עڣ1-99 + BYTE byDispalyName[MAX_NAME_LEN]; //设备显示名称 + WORD wLocalPort; //本地端口 + BYTE byLoginCycle; //注册周期,1-99分钟 BYTE byRes3; - BYTE bySIPServerDomain[MAX_DOMAIN_NAME]; //sipIPֻҪһֵʱIPȣ - NET_DVR_IPADDR stuSTUNServerIP; // STUNIP - BYTE bySTUNServerDomain[MAX_DOMAIN_NAME]; //STUN IPֻҪһֵʱIPȣ - WORD wSTUNServerPort; // STUN˿ + BYTE bySIPServerDomain[MAX_DOMAIN_NAME]; //sip服务器域名(IP和域名只需要填其一,都有值时IP优先) + NET_DVR_IPADDR stuSTUNServerIP; // STUN服务器IP + BYTE bySTUNServerDomain[MAX_DOMAIN_NAME]; //STUN服务器域名 (IP和域名只需要填其一,都有值时IP优先) + WORD wSTUNServerPort; // STUN服务器端口 BYTE byRes4[2]; - NET_DVR_IPADDR stuProxyServerIP; //IP - BYTE byProxyServerDomain[MAX_DOMAIN_NAME]; // IPֻҪһֵʱIPȣ - WORD wProxyServerPort; // ˿ - BYTE byNetWork; //ʾͣ0-Ч1-1 2-23- + NET_DVR_IPADDR stuProxyServerIP; //代理服务器IP + BYTE byProxyServerDomain[MAX_DOMAIN_NAME]; //代理服务器域名 (IP和域名只需要填其一,都有值时IP优先) + WORD wProxyServerPort; // 代理服务器端口 + BYTE byNetWork; //表示网络类型,0-无效,1-有线网络1, 2-有线网络2,3-无线网络 BYTE byRes5; BYTE byCalledTargetName[NET_SDK_MAX_CALLEDTARGET_NAME]; BYTE byRes[224]; }NET_DVR_SIP_CFG_V50, *LPNET_DVR_SIP_CFG_V50; -//IPӶԽֻ +//IP可视对讲分机配置 typedef struct tagNET_DVR_IP_VIEW_DEVCFG { DWORD dwSize; - BYTE byDefaultRing; //ĬΧ1-6 - BYTE byRingVolume; //Χ0-9 - BYTE byInputVolume; //ֵΧ0-6 - BYTE byOutputVolume; //ֵΧ0-9 - WORD wRtpPort; //Rtp˿ + BYTE byDefaultRing; //默认铃音,范围1-6 + BYTE byRingVolume; //铃音音量,范围0-9 + BYTE byInputVolume; //输入音量值,范围0-6 + BYTE byOutputVolume; //输出音量值,范围0-9 + WORD wRtpPort; //Rtp端口 BYTE byRes1[2]; - DWORD dwPreviewDelayTime; //Ԥʱã0-30 + DWORD dwPreviewDelayTime; //预览延时配置,0-30秒 BYTE byRes2[64]; }NET_DVR_IP_VIEW_DEVCFG,*LPNET_DVR_IP_VIEW_DEVCFG; -//IpӶԽƵز +//Ip可视对讲音频相关参数配置 typedef struct tagNET_DVR_IP_VIEW_AUDIO_CFG { DWORD dwSize; - BYTE byAudioEncPri1; //Ƶȼ10-G7221-G711_U2-G711_A 5-MPEG2,6-G7267-AAC - BYTE byAudioEncPri2; //Ƶȼ2sip֧Ƶ1ʱʹƵ20-G7221-G711_U2-G711_A 5-MPEG2,6-G7267-AAC - WORD wAudioPacketLen1; //Ƶ1ݰ - WORD wAudioPacketLen2; //Ƶ2ݰ + BYTE byAudioEncPri1; //音频编码优先级1,0-G722,1-G711_U,2-G711_A, 5-MPEG2,6-G726,7-AAC + BYTE byAudioEncPri2; //音频编码优先级2,当sip服务器不支持音频编码1时会使用音频编码2,0-G722,1-G711_U,2-G711_A, 5-MPEG2,6-G726,7-AAC + WORD wAudioPacketLen1; //音频编码1数据包长度 + WORD wAudioPacketLen2; //音频编码2数据包长度 BYTE byRes[30]; }NET_DVR_IP_VIEW_AUDIO_CFG,*LPNET_DVR_IP_VIEW_AUDIO_CFG; -//IPֻжԽýṹ +//IP分机呼叫对讲参数配置结构体 typedef struct tagNET_DVR_IP_VIEW_CALL_CFG { DWORD dwSize ; - BYTE byEnableAutoResponse; //ʹԶӦ,0-ʹܣ1-ʹ - BYTE byAudoResponseTime; //ԶӦʱ䣬0-30 + BYTE byEnableAutoResponse; //使能自动应答,0-不使能,1-使能 + BYTE byAudoResponseTime; //自动应答时间,0-30秒 BYTE byRes1[2]; - BYTE byEnableAlarmNumber1; //10-1- + BYTE byEnableAlarmNumber1; //启动报警号码1,0-不启动,1-启动 BYTE byRes2[3]; - BYTE byAlarmNumber1[MAX_NUMBER_LEN]; //к1 - BYTE byEnableAlarmNumber2; //20-1- + BYTE byAlarmNumber1[MAX_NUMBER_LEN]; //呼叫号码1 + BYTE byEnableAlarmNumber2; //启动报警号码2,0-不启动,1-启动 BYTE byRes3[3]; - BYTE byAlarmNumber2[MAX_NUMBER_LEN]; //к2к1ʧ᳢ܻԺк2 + BYTE byAlarmNumber2[MAX_NUMBER_LEN]; //呼叫号码2,呼叫号码1失败会尝试呼叫号码2 BYTE byRes4[72]; }NET_DVR_IP_VIEW_CALL_CFG,*LPNET_DVR_IP_VIEW_CALL_CFG; -//ͨͼṹ -//ƶ(ӽṹ)(鷽ʽչ) +//通道图象结构 +//移动侦测(子结构)(按组方式扩展) typedef struct { - DWORD dwMaxRecordChanNum; //豸ֵ֧¼ͨ-ֻ - DWORD dwCurRecordChanNum; //ǰʵõĹ¼ͨ - DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* ʵʴ¼ֵͨʾ,ýУ±0 - MAX_CHANNUM_V30-1Чм0xffffffff,Ч*/ - BYTE byRes[64]; // + DWORD dwMaxRecordChanNum; //设备支持的最大关联录像通道数-只读 + DWORD dwCurRecordChanNum; //当前实际已配置的关联录像通道数 + DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - MAX_CHANNUM_V30-1有效,如果中间遇到0xffffffff,则后续无效*/ + BYTE byRes[64]; //保留 }NET_DVR_RECORDCHAN, *LPNET_DVR_RECORDCHAN; -//ƶ(ӽṹ)(9000չ) +//移动侦测(子结构)(9000扩展) typedef struct { - BYTE byMotionScope[64][96]; /*,0-96λ,ʾ64,96*64С,Ϊ1ʾƶ,0-ʾ*/ - BYTE byMotionSensitive; /*ƶ, 0 - 5,ԽԽ,oxffر*/ - BYTE byEnableHandleMotion; /* Ƿƶ 0 1*/ - BYTE byEnableDisplay; /*ƶʾ0-1-*/ + BYTE byMotionScope[64][96]; /*侦测区域,0-96位,表示64行,共有96*64个小宏块,为1表示是移动侦测区域,0-表示不是*/ + BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,oxff关闭*/ + BYTE byEnableHandleMotion; /* 是否处理移动侦测 0-否 1-是*/ + BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/ char reservedData; - NET_DVR_HANDLEEXCEPTION_V30 struMotionHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ*/ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; /* ¼ͨ*/ + NET_DVR_HANDLEEXCEPTION_V30 struMotionHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; /* 报警触发的录象通道*/ }NET_DVR_MOTION_V30, *LPNET_DVR_MOTION_V30; -//ƶ(ӽṹ) +//移动侦测(子结构) typedef struct { - BYTE byMotionScope[18][22]; /*,22*18С,Ϊ1ʾĺƶ,0-ʾ*/ - BYTE byMotionSensitive; /*ƶ, 0 - 5,ԽԽ,0xffر*/ - BYTE byEnableHandleMotion; /* Ƿƶ */ - BYTE byEnableDisplay; /*ƶʾ0-1-*/ + BYTE byMotionScope[18][22]; /*侦测区域,共有22*18个小宏块,为1表示改宏块是移动侦测区域,0-表示不是*/ + BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭*/ + BYTE byEnableHandleMotion; /* 是否处理移动侦测 */ + BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/ char reservedData; - NET_DVR_HANDLEEXCEPTION strMotionHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//ʱ - BYTE byRelRecordChan[MAX_CHANNUM]; //¼ͨ,Ϊ1ʾͨ + NET_DVR_HANDLEEXCEPTION strMotionHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM]; //报警触发的录象通道,为1表示触发该通道 }NET_DVR_MOTION, *LPNET_DVR_MOTION; -//ڵ(ӽṹ)(9000չ) С704*576 +//遮挡报警(子结构)(9000扩展) 区域大小704*576 typedef struct { - DWORD dwEnableHideAlarm; /* Ƿڵ ,0-,1- 2- 3-*/ - WORD wHideAlarmAreaTopLeftX; /* ڵx */ - WORD wHideAlarmAreaTopLeftY; /* ڵy */ - WORD wHideAlarmAreaWidth; /* ڵĿ */ - WORD wHideAlarmAreaHeight; /*ڵĸ*/ - NET_DVR_HANDLEEXCEPTION_V30 strHideAlarmHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ + DWORD dwEnableHideAlarm; /* 是否启动遮挡报警 ,0-否,1-低灵敏度 2-中灵敏度 3-高灵敏度*/ + WORD wHideAlarmAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAlarmAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAlarmAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAlarmAreaHeight; /*遮挡区域的高*/ + NET_DVR_HANDLEEXCEPTION_V30 strHideAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 }NET_DVR_HIDEALARM_V30, *LPNET_DVR_HIDEALARM_V30; -//ڵ(ӽṹ) С704*576 +//遮挡报警(子结构) 区域大小704*576 typedef struct { - DWORD dwEnableHideAlarm; /* Ƿڵ ,0-,1- 2- 3-*/ - WORD wHideAlarmAreaTopLeftX; /* ڵx */ - WORD wHideAlarmAreaTopLeftY; /* ڵy */ - WORD wHideAlarmAreaWidth; /* ڵĿ */ - WORD wHideAlarmAreaHeight; /*ڵĸ*/ - NET_DVR_HANDLEEXCEPTION strHideAlarmHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//ʱ + DWORD dwEnableHideAlarm; /* 是否启动遮挡报警 ,0-否,1-低灵敏度 2-中灵敏度 3-高灵敏度*/ + WORD wHideAlarmAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAlarmAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAlarmAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAlarmAreaHeight; /*遮挡区域的高*/ + NET_DVR_HANDLEEXCEPTION strHideAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 }NET_DVR_HIDEALARM, *LPNET_DVR_HIDEALARM; -//źŶʧ(ӽṹ)(9000չ) +//信号丢失报警(子结构)(9000扩展) typedef struct { - BYTE byEnableHandleVILost; /* ǷźŶʧ */ - NET_DVR_HANDLEEXCEPTION_V30 strVILostHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ + BYTE byEnableHandleVILost; /* 是否处理信号丢失报警 */ + NET_DVR_HANDLEEXCEPTION_V30 strVILostHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 }NET_DVR_VILOST_V30, *LPNET_DVR_VILOST_V30; -//źŶʧ(ӽṹ) +//信号丢失报警(子结构) typedef struct { - BYTE byEnableHandleVILost; /* ǷźŶʧ */ - NET_DVR_HANDLEEXCEPTION strVILostHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//ʱ + BYTE byEnableHandleVILost; /* 是否处理信号丢失报警 */ + NET_DVR_HANDLEEXCEPTION strVILostHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 }NET_DVR_VILOST, *LPNET_DVR_VILOST; -//ڵ(ӽṹ) +//遮挡区域(子结构) typedef struct { - WORD wHideAreaTopLeftX; /* ڵx */ - WORD wHideAreaTopLeftY; /* ڵy */ - WORD wHideAreaWidth; /* ڵĿ */ - WORD wHideAreaHeight; /*ڵĸ*/ + WORD wHideAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAreaHeight; /*遮挡区域的高*/ }NET_DVR_SHELTER, *LPNET_DVR_SHELTER; typedef struct { - BYTE byBrightness; /*,0-255*/ - BYTE byContrast; /*Աȶ,0-255*/ - BYTE bySaturation; /*Ͷ,0-255*/ - BYTE byHue; /*ɫ,0-255*/ + BYTE byBrightness; /*亮度,0-255*/ + BYTE byContrast; /*对比度,0-255*/ + BYTE bySaturation; /*饱和度,0-255*/ + BYTE byHue; /*色调,0-255*/ }NET_DVR_COLOR, *LPNET_DVR_COLOR; typedef struct { - BYTE byRed; //RGBɫеĺɫ - BYTE byGreen; //RGBɫеɫ - BYTE byBlue; //RGBɫеɫ - BYTE byRes; // + BYTE byRed; //RGB颜色三分量中的红色 + BYTE byGreen; //RGB颜色三分量中的绿色 + BYTE byBlue; //RGB颜色三分量中的蓝色 + BYTE byRes; //保留 }NET_DVR_RGB_COLOR, *LPNET_DVR_RGB_COLOR; -//ֵһ,ֵΪǰİٷֱȴС, ΪСλ -//ṹ +//坐标值归一化,浮点数值为当前画面的百分比大小, 精度为小数点后三位 +//点坐标结构 typedef struct tagNET_VCA_POINT { - float fX; // X, 0.000~1 - float fY; //Y, 0.000~1 + float fX; // X轴坐标, 0.000~1 + float fY; //Y轴坐标, 0.000~1 }NET_VCA_POINT, *LPNET_VCA_POINT; -//ͨͼṹ(9000չ) +//通道图象结构(9000扩展) typedef struct { DWORD dwSize; BYTE sChanName[NAME_LEN]; - DWORD dwVideoFormat; /* ֻ Ƶʽ 1-NTSC 2-PAL*/ - BYTE byReservedData[64];/**/ - DWORD dwShowChanName; // ԤͼǷʾͨ,0-ʾ,1-ʾ С704*576 - WORD wShowNameTopLeftX; /* ͨʾλõx */ - WORD wShowNameTopLeftY; /* ͨʾλõy */ - //ƵźŶʧ + DWORD dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL*/ + BYTE byReservedData[64];/*保留*/ + DWORD dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示 区域大小704*576 + WORD wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */ + WORD wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */ + //视频信号丢失报警 NET_DVR_VILOST_V30 struVILost; - NET_DVR_VILOST_V30 struRes; /**/ + NET_DVR_VILOST_V30 struRes; /*保留*/ // BYTE byRes1[328]; - //ƶ + //移动侦测 NET_DVR_MOTION_V30 struMotion; - //ڵ + //遮挡报警 NET_DVR_HIDEALARM_V30 struHideAlarm; - //ڵ С704*576 - DWORD dwEnableHide; /* Ƿڵ ,0-,1-*/ + //遮挡 区域大小704*576 + DWORD dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/ NET_DVR_SHELTER struShelter[MAX_SHELTERNUM]; //OSD - DWORD dwShowOsd;// ԤͼǷʾOSD,0-ʾ,1-ʾ С704*576 - WORD wOSDTopLeftX; /* OSDx */ - WORD wOSDTopLeftY; /* OSDy */ - BYTE byOSDType; /* OSD(Ҫոʽ) */ - /* 0: XXXX-XX-XX */ - /* 1: XX-XX-XXXX */ - /* 2: XXXXXXXX */ - /* 3: XXXXXXXX */ - /* 4: XX-XX-XXXX */ - /* 5: XXXXXXXX */ - /*6: xx/xx/xxxx(//) */ - /*7: xxxx/xx/xx(//) */ - /*8: xx/xx/xxxx(//)*/ - BYTE byDispWeek; /* Ƿʾ */ - BYTE byOSDAttrib; /* OSD:͸˸ */ - /* 1: ͸,˸ */ - /* 2: ͸,˸ */ - /* 3: ˸,͸ */ - /* 4: ͸,˸ */ - BYTE byHourOSDType; /* OSDСʱ:0-24Сʱ,1-12Сʱ */ - BYTE byFontSize;//С16*16()/8*16(Ӣ)1-32*32()/16*32(Ӣ)2-64*64()/32*64(Ӣ) 3-48*48()/24*48(Ӣ) 4-24*24()/12*24(Ӣ) 5-96*96()/48*96(Ӣ) 6-128*128()/64*128(Ӣ) 7-80*80()/40*80(Ӣ) 8-112*112()/56*112(Ӣ) 0xff-Ӧ(adaptive) - BYTE byOSDColorType; //0-Ĭϣڰף1-Զ壻2- - /*뷽ʽѡģʽʱԷֱ½ǡ½ַӡ - ½ - ֧6ַӣͨNET_DVR_SET_SHOWSTRING_V30ַӽӿڣӦNET_DVR_SHOWSTRINGINFOṹеĵ05±ֵַķʽΪµϵķʽ - ½ - ֧2ַӣͨNET_DVR_SET_SHOWSTRING_V30ַӽӿڣӦNET_DVR_SHOWSTRINGINFOṹеĵ6͵7±ֵַķʽΪµϵķʽ + DWORD dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示 区域大小704*576 + WORD wOSDTopLeftX; /* OSD的x坐标 */ + WORD wOSDTopLeftY; /* 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年 */ + /*6: xx/xx/xxxx(月/日/年) */ + /*7: xxxx/xx/xx(年/月/日) */ + /*8: xx/xx/xxxx(日/月/年)*/ + BYTE byDispWeek; /* 是否显示星期 */ + BYTE byOSDAttrib; /* OSD属性:透明,闪烁 */ + /* 1: 透明,闪烁 */ + /* 2: 透明,不闪烁 */ + /* 3: 闪烁,不透明 */ + /* 4: 不透明,不闪烁 */ + BYTE byHourOSDType; /* OSD小时制:0-24小时制,1-12小时制 */ + BYTE byFontSize;//字体大小,16*16(中)/8*16(英),1-32*32(中)/16*32(英),2-64*64(中)/32*64(英) 3-48*48(中)/24*48(英) 4-24*24(中)/12*24(英) 5-96*96(中)/48*96(英) 6-128*128(中)/64*128(英) 7-80*80(中)/40*80(英) 8-112*112(中)/56*112(英) 0xff-自适应(adaptive) + BYTE byOSDColorType; //0-默认(黑白);1-自定义;2-勾边 + /*当对齐方式选择国标模式时,可以分别对右下角、左下角两个区域做字符叠加。 + 右下角区域: + 共支持6行字符叠加,可以通过NET_DVR_SET_SHOWSTRING_V30字符叠加接口,对应NET_DVR_SHOWSTRINGINFO结构体数组中的第0至第5个下标的值。叠加字符的方式为从下到上的方式。 + 左下角区域: + 共支持2行字符叠加,可以通过NET_DVR_SET_SHOWSTRING_V30字符叠加接口,对应NET_DVR_SHOWSTRINGINFO结构体数组中的第6和第7个下标的值。叠加字符的方式为从下到上的方式。 */ - BYTE byAlignment;//뷽ʽ 0-Ӧ1-Ҷ, 2-,3-ģʽ, 4-ȫҶ(ַʱԼOSDַ)5-ȫ(ַʱԼOSDַ) - BYTE byOSDMilliSecondEnable;//Ƶʱֺ֧룻0~, 1- - NET_DVR_RGB_COLOR struOsdColor;//OSDɫ - DWORD dwBoundary; //ֵ߽룬ҶԼģʽıֵ߽0-ʾĬֵλ - NET_DVR_RGB_COLOR struOsdBkColor; //ԶOSDɫ - BYTE byOSDBkColorMode; //OSDɫģʽ0-Ĭϣ1-ԶOSDɫ - BYTE byUpDownBoundary; //Сֵ߽ѡλΪַΧǣ0,1,2, ģʽЧbyAlignment=3ֶЧͨdwBoundaryб߽ã.byAlignment3£ byUpDownBoundary/byLeftRightBoundaryóɹdwBoundaryֵЧ - BYTE byLeftRightBoundary; //Сֵ߽ѡλΪַΧǣ0,1,2, ģʽЧbyAlignment=3ֶЧͨdwBoundaryб߽ã.byAlignment3£ byUpDownBoundary/byLeftRightBoundaryóɹdwBoundaryֵЧ - BYTE byAngleEnabled;//OSDǷӸϢ,0~, 1- - WORD wTiltAngleTopLeftX; /* Ϣʾλõx */ - WORD wTiltAngleTopLeftY; /* Ϣʾλõy */ + BYTE byAlignment;//对齐方式 0-自适应,1-右对齐, 2-左对齐,3-国标模式, 4-全部右对齐(包含叠加字符、时间以及标题等所有OSD字符),5-全部左对齐(包含叠加字符、时间以及标题等所有OSD字符) + BYTE byOSDMilliSecondEnable;//视频叠加时间支持毫秒;0~不叠加, 1-叠加 + NET_DVR_RGB_COLOR struOsdColor;//OSD颜色 + DWORD dwBoundary; //边界值,左对齐,右对齐以及国标模式的边界值,0-表示默认值,单位:像素 + NET_DVR_RGB_COLOR struOsdBkColor; //自定义OSD背景色 + BYTE byOSDBkColorMode; //OSD背景色模式,0-默认,1-自定义OSD背景色 + BYTE byUpDownBoundary; //上下最小边界值选项,单位为字符个数(范围是,0,1,2), 国标模式下无效。byAlignment=3该字段无效,通过dwBoundary进行边界配置,.byAlignment不等于3的情况下, byUpDownBoundary/byLeftRightBoundary配置成功后,dwBoundary值将不生效 + BYTE byLeftRightBoundary; //左右最小边界值选项,单位为字符个数(范围是,0,1,2), 国标模式下无效。byAlignment=3该字段无效,通过dwBoundary进行边界配置,.byAlignment不等于3的情况下, byUpDownBoundary/byLeftRightBoundary配置成功后,dwBoundary值将不生效 + BYTE byAngleEnabled;//OSD是否叠加俯仰角信息,0~不叠加, 1-叠加 + WORD wTiltAngleTopLeftX; /* 俯仰角信息显示位置的x坐标 */ + WORD wTiltAngleTopLeftY; /* 俯仰角信息显示位置的y坐标 */ BYTE byRes[40]; }NET_DVR_PICCFG_V30, *LPNET_DVR_PICCFG_V30; -//ͨͼṹSDK_V14չ +//通道图象结构SDK_V14扩展 typedef struct { DWORD dwSize; BYTE sChanName[NAME_LEN]; - DWORD dwVideoFormat; /* ֻ Ƶʽ 1-NTSC 2-PAL*/ - BYTE byBrightness; /*,0-255*/ - BYTE byContrast; /*Աȶ,0-255*/ - BYTE bySaturation; /*Ͷ,0-255 */ - BYTE byHue; /*ɫ,0-255*/ - //ʾͨ - DWORD dwShowChanName; // ԤͼǷʾͨ,0-ʾ,1-ʾ С704*576 - WORD wShowNameTopLeftX; /* ͨʾλõx */ - WORD wShowNameTopLeftY; /* ͨʾλõy */ - //źŶʧ + DWORD dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL*/ + BYTE byBrightness; /*亮度,0-255*/ + BYTE byContrast; /*对比度,0-255*/ + BYTE bySaturation; /*饱和度,0-255 */ + BYTE byHue; /*色调,0-255*/ + //显示通道名 + DWORD dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示 区域大小704*576 + WORD wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */ + WORD wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */ + //信号丢失报警 NET_DVR_VILOST struVILost; - //ƶ + //移动侦测 NET_DVR_MOTION struMotion; - //ڵ + //遮挡报警 NET_DVR_HIDEALARM struHideAlarm; - //ڵ С704*576 - DWORD dwEnableHide; /* Ƿڵ ,0-,1-*/ + //遮挡 区域大小704*576 + DWORD dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/ NET_DVR_SHELTER struShelter[MAX_SHELTERNUM]; //OSD - DWORD dwShowOsd;// ԤͼǷʾOSD,0-ʾ,1-ʾ С704*576 - WORD wOSDTopLeftX; /* OSDx */ - WORD wOSDTopLeftY; /* OSDy */ - BYTE byOSDType; /* OSD(Ҫոʽ) */ - /* 0: XXXX-XX-XX */ - /* 1: XX-XX-XXXX */ - /* 2: XXXXXXXX */ - /* 3: XXXXXXXX */ - /* 4: XX-XX-XXXX */ - /* 5: XXXXXXXX */ - /*6: xx/xx/xxxx(//) */ - /*7: xxxx/xx/xx(//) */ - /*8: xx/xx/xxxx(//)*/ - BYTE byDispWeek; /* Ƿʾ */ - BYTE byOSDAttrib; /* OSD:͸˸ */ - /* 1: ͸,˸ */ - /* 2: ͸,˸ */ - /* 3: ˸,͸ */ - /* 4: ͸,˸ */ - BYTE byHourOsdType; /* OSDСʱ:0-24Сʱ,1-12Сʱ */ + DWORD dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示 区域大小704*576 + WORD wOSDTopLeftX; /* OSD的x坐标 */ + WORD wOSDTopLeftY; /* 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年 */ + /*6: xx/xx/xxxx(月/日/年) */ + /*7: xxxx/xx/xx(年/月/日) */ + /*8: xx/xx/xxxx(日/月/年)*/ + BYTE byDispWeek; /* 是否显示星期 */ + BYTE byOSDAttrib; /* OSD属性:透明,闪烁 */ + /* 1: 透明,闪烁 */ + /* 2: 透明,不闪烁 */ + /* 3: 闪烁,不透明 */ + /* 4: 不透明,不闪烁 */ + BYTE byHourOsdType; /* OSD小时制:0-24小时制,1-12小时制 */ }NET_DVR_PICCFG_EX, *LPNET_DVR_PICCFG_EX; -//ͨͼṹ(SDK_V13֮ǰ汾) +//通道图象结构(SDK_V13及之前版本) typedef struct { DWORD dwSize; BYTE sChanName[NAME_LEN]; - DWORD dwVideoFormat; /* ֻ Ƶʽ 1-NTSC 2-PAL*/ - BYTE byBrightness; /*,0-255*/ - BYTE byContrast; /*Աȶ,0-255*/ - BYTE bySaturation; /*Ͷ,0-255 */ - BYTE byHue; /*ɫ,0-255*/ - //ʾͨ - DWORD dwShowChanName; // ԤͼǷʾͨ,0-ʾ,1-ʾ С704*576 - WORD wShowNameTopLeftX; /* ͨʾλõx */ - WORD wShowNameTopLeftY; /* ͨʾλõy */ - //źŶʧ + DWORD dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL*/ + BYTE byBrightness; /*亮度,0-255*/ + BYTE byContrast; /*对比度,0-255*/ + BYTE bySaturation; /*饱和度,0-255 */ + BYTE byHue; /*色调,0-255*/ + //显示通道名 + DWORD dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示 区域大小704*576 + WORD wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */ + WORD wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */ + //信号丢失报警 NET_DVR_VILOST struVILost; - //ƶ + //移动侦测 NET_DVR_MOTION struMotion; - //ڵ + //遮挡报警 NET_DVR_HIDEALARM struHideAlarm; - //ڵ С704*576 - DWORD dwEnableHide; /* Ƿڵ ,0-,1-*/ - WORD wHideAreaTopLeftX; /* ڵx */ - WORD wHideAreaTopLeftY; /* ڵy */ - WORD wHideAreaWidth; /* ڵĿ */ - WORD wHideAreaHeight; /*ڵĸ*/ + //遮挡 区域大小704*576 + DWORD dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/ + WORD wHideAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAreaHeight; /*遮挡区域的高*/ //OSD - DWORD dwShowOsd;// ԤͼǷʾOSD,0-ʾ,1-ʾ С704*576 - WORD wOSDTopLeftX; /* OSDx */ - WORD wOSDTopLeftY; /* OSDy */ - BYTE byOSDType; /* OSD(Ҫոʽ) */ - /* 0: XXXX-XX-XX */ - /* 1: XX-XX-XXXX */ - /* 2: XXXXXXXX */ - /* 3: XXXXXXXX */ - /* 4: XX-XX-XXXX */ - /* 5: XXXXXXXX */ - /*6: xx/xx/xxxx(//) */ - /*7: xxxx/xx/xx(//) */ - /*8: xx/xx/xxxx(//)*/ - BYTE byDispWeek; /* Ƿʾ */ - BYTE byOSDAttrib; /* OSD:͸˸ */ - /* 1: ͸,˸ */ - /* 2: ͸,˸ */ - /* 3: ˸,͸ */ - /* 4: ͸,˸ */ + DWORD dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示 区域大小704*576 + WORD wOSDTopLeftX; /* OSD的x坐标 */ + WORD wOSDTopLeftY; /* 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年 */ + /*6: xx/xx/xxxx(月/日/年) */ + /*7: xxxx/xx/xx(年/月/日) */ + /*8: xx/xx/xxxx(日/月/年)*/ + BYTE byDispWeek; /* 是否显示星期 */ + BYTE byOSDAttrib; /* OSD属性:透明,闪烁 */ + /* 1: 透明,闪烁 */ + /* 2: 透明,不闪烁 */ + /* 3: 闪烁,不透明 */ + /* 4: 不透明,不闪烁 */ char reservedData2; }NET_DVR_PICCFG, *LPNET_DVR_PICCFG; @@ -10146,25 +10146,25 @@ typedef enum _BITRATE_ENCODE_INDEX_ BITRATE_ENCODE_320kps = 17 }BITRATE_ENCODE_INDEX; -//ѹ(ӽṹ)(9000չ) +//码流压缩参数(子结构)(9000扩展) typedef struct { - BYTE byStreamType; // 0-Ƶ, 1-, ʾ¼ѹʱλʾǷѹ - /*ֱ0-DCIF 1-CIF, 2-QCIF, 3-4CIF, - 4-2CIF 5, 6-QVGA(320*240), 7-QQVGA(160*120), + BYTE byStreamType; //码流类型 0-视频流, 1-复合流, 表示事件压缩参数时最高位表示是否启用压缩参数 + /*分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, + 4-2CIF 5(保留), 6-QVGA(320*240), 7-QQVGA(160*120), 12-384*288 13-576*576, - 16-VGA640*480, 17-UXGA1600*1200, 18-SVGA(800*600), 19-HD720p(1280*720, + 16-VGA(640*480), 17-UXGA(1600*1200), 18-SVGA(800*600), 19-HD720p(1280*720), 20-XVGA, 21-HD900p, 22-1360*1024, 23-1536*1536, 24-1920*1920, 27-HD1080i, 28-2560*1920, 29-1600*304, 30-2048*1536, 31-2448*2048, - 32-2448*1200, 33-2448*800, 34-XGA1024*768 35-SXGA1280*1024, + 32-2448*1200, 33-2448*800, 34-XGA(1024*768), 35-SXGA(1280*1024), 36-WD1(960*576/960*480), 37-1080i, 38-WSXGA(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-2560*2048, 55-3072*2048, 56-2304*1296 57-WXGA(1280*800), 58-1600*600, 59-1600*900, - 60-2752*2208, 61-, 62-4000*3000, 63-4096*2160, + 60-2752*2208, 61-保留, 62-4000*3000, 63-4096*2160, 64-3840*2160, 65-4000*2250, 66-3072*1728, 67-2592*1944, 68-2464*1520, 69-1280*1920, 70-2560*1440, 71-1024*1024, 72-160*128, 73-324*240, 74-324*256, 75-336*256, @@ -10182,7 +10182,7 @@ typedef struct 120-480*768, 121-768*480, 122-320*512, 123-512*320, 124-4096*1800, 125-1280*560, 126-2400*3840, 127-480*272, 128-512*272, 129-2592*2592, 130-1792*2880, 131-1600*2560, - 132-2720*1192, 133-3MP(1920*1536/2048*1536) 134-5MP(2560*1944) + 132-2720*1192, 133-3MP(1920*1536/2048*1536), 134-5MP(2560*1944), 135-2560*960, 136-2064*1544 137-4096*1200, 138-3840*1080 139-2720*800 140-512*232 141-704*200, 142-512*152, 143-2048*896 144-2048*600 145-1280*376, @@ -10203,17 +10203,17 @@ typedef struct 202-2688*1512, 203-704*288, 204-1560*656, 205-3072*1280, 206-4320*1808, 207-6120*2560, 208-1280*960, 209-3000*3000, 210-2032*3616, 211-7680*4320, 212-5760*3240, 213-3264*1836, - 214-2712*1536, 215-1080*720(ռλδ), 216-360x640(ռλδ),217-1440*812, + 214-2712*1536, 215-1080*720(占位,未测试), 216-360x640(占位,未测试),217-1440*812, 218-8160*2416, 219-5760*1712, 220-4080*1200, 221-6144*2560, 222-1568*656, 223-4096*1808, 224-2720*1200, 225-2896*848 226-2048*608 227-3840*1120 228-2720*784 229-1920*560, 230-1360*400 231-704*208 232-496*144 233-352*128, 234-512*240 235-512*160 236-368*128 237-256*128 238-2048*592 239-1456*416 240-1024*304 241-1280*368 - 242-912*256 243-640*192 244-252*112 δʹã 245-(576*704[P]/480*704[N]) + 242-912*256 243-640*192 244-252*112 (未使用) 245-(576*704[P制]/480*704[N制]) - 254-ʾֶηΧʹNET_DVR_MULTI_STREAM_COMPRESSIONCFGеdwResolutionʾֱ - 0xff-Auto(ʹõǰֱ) + 254-表示超出该字段范围,使用NET_DVR_MULTI_STREAM_COMPRESSIONCFG中的dwResolution表示分辨率 + 0xff-Auto(使用当前码流分辨率) 256-3888*1696 257-2784*1200 258-496*224 259-352*160 260-912*400 261-640*288 262-1456*640 263-1024*448 264-2896*1280 265-2544*1080 266-2736*768 267-1920*544 @@ -10238,7 +10238,7 @@ typedef struct 340-3888*1136 341-6120*1800 342-4320*1280 343-3056*896 344-1776*528 345-1392*400 346-7256*1520 347-512*288 348-1936*1210 349-640*400 350-2688*1792 351-2464*2056 - 352-2720*1600 353-4800*1600 354-3600*1200 355-δ + 352-2720*1600 353-4800*1600 354-3600*1200 355-未定义 356-2400*800 357-1200*400 358-4096*3008 359-7680*4096 360-1080*1520 361-6656*3744 362-5120*1400 363-2560*704 364-2688*3040 365-1280*352 366-3376*1008 367-1688*504 @@ -10312,159 +10312,159 @@ typedef struct 636-7680*3360 637-5760*2512 638-3000*4000 639-4096*4096 */ BYTE byResolution; - BYTE byBitrateType; // 0:, 1:,0xfe:ԶԴһ - BYTE byPicQuality; //ͼ 0- 1-κ 2-Ϻ 3-һ 4-ϲ 5-,ԶԴһ - /*Ƶ 0- 1-16K() 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K + BYTE byBitrateType; //码率类型 0:变码率, 1:定码率,0xfe:自动,和源一致 + BYTE byPicQuality; //图象质量 0-最好 1-次好 2-较好 3-一般 4-较差 5-差,自动,和源一致 + /*视频码率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K 24-3072K 25-4096K 26-8192K 27-16384K (28-30 Reserved) 31-12288K*/ DWORD dwVideoBitrate; - DWORD dwVideoFrameRate; //֡ 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; V2.0汾¼14-15; 15-18; 16-22; - //17-2518-3019-3520-4021-4522-5023-5524-6025-3;26-5;27-7;28-9;29-100; 30-120;31-24;32-48,33-8.3,34-75,35-90,36-12.5,37-150,38-180,39-200,40-210,41-6.25,0xfffffffe-ԶԴһ - WORD wIntervalFrameI; //I֡,0xfffe ԶԴһ - BYTE byIntervalBPFrame;//0-BBP֡; 1-BP֡; 2-P֡(2006-08-11 ӵP֡ýӿڣԸʵʱʱ)0xfe-ԶԴһ - BYTE byres1; // - BYTE byVideoEncType; //Ƶ 0-˽2641-׼h2642-׼mpeg47-M-JPEG8-MPEG29-SVAC, 10-׼h265, 0xfe-ԶԴһ£0xff-Ч - BYTE byAudioEncType; //Ƶ 0-G722;1-G711_U;2-G711_A;5-MP2L2;6-G276;7-AAC;8-PCM;12-AAC_LC;13-AAC_LD;14-Opus;15-MP3;0xff-Ч - BYTE byVideoEncComplexity; //Ƶ븴Ӷȣ0-ͣ1-У2,0xfe:ԶԴһ - BYTE byEnableSvc; //0 - SVCܣ1- SVC; 2-ԶSVC - BYTE byFormatType; //װͣ1-2-RTPװ3-PSװ4-TSװ5-˽У6-FLV7-ASF8-3GP,9-RTP+PS꣺GB281810xff-Ч - BYTE byAudioBitRate; //Ƶ ο BITRATE_ENCODE_INDEX - BYTE byStreamSmooth;//ƽ 11001ȼʾ(Clear)100ʾƽ(Smooth) - BYTE byAudioSamplingRate;//Ƶ0-Ĭ,1- 16kHZ, 2-32kHZ, 3-48kHZ, 4- 44.1kHZ,5-8kHZ - BYTE bySmartCodec;///*bit0-ٱ 0-رգ1-򿪣bit1 - ģʽ 0 - رգ1 - */ - BYTE byDepthMapEnable;// ͼʹܿأ0-رգ1-򿪣󣬵ڶͨ˫ĿƵãĬ 960*540 ͼ - //ƽʣSmartCodecʹܿЧ, 0-0K 1-16K 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K 24-2560K 25-3072K 26-4096K 27-5120K 28-6144K 29-7168K 30-8192K - //λ(15λ)ó1ʾԶ, 0-14λʾֵ(MIN- 0 K) + DWORD dwVideoFrameRate; //帧率 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; V2.0版本中新加14-15; 15-18; 16-22; + //17-25;18-30;19-35;20-40;21-45;22-50;23-55;24-60;25-3;26-5;27-7;28-9;29-100; 30-120;31-24;32-48,33-8.3,34-75,35-90,36-12.5,37-150,38-180,39-200,40-210,41-6.25,0xfffffffe-自动,和源一致 + WORD wIntervalFrameI; //I帧间隔,0xfffe 自动,和源一致 + BYTE byIntervalBPFrame;//0-BBP帧; 1-BP帧; 2-单P帧(2006-08-11 增加单P帧的配置接口,可以改善实时流延时问题);0xfe-自动,和源一致 + BYTE byres1; //保留 + BYTE byVideoEncType; //视频编码类型 0-私有264,1-标准h264,2-标准mpeg4,7-M-JPEG,8-MPEG2,9-SVAC, 10-标准h265, 0xfe-自动(和源一致),0xff-无效 + BYTE byAudioEncType; //音频编码类型 0-G722;1-G711_U;2-G711_A;5-MP2L2;6-G276;7-AAC;8-PCM;12-AAC_LC;13-AAC_LD;14-Opus;15-MP3;0xff-无效 + BYTE byVideoEncComplexity; //视频编码复杂度,0-低,1-中,2高,0xfe:自动,和源一致 + BYTE byEnableSvc; //0 - 不启用SVC功能;1- 启用SVC功能; 2-自动启用SVC功能 + BYTE byFormatType; //封装类型,1-裸流,2-RTP封装,3-PS封装,4-TS封装,5-私有,6-FLV,7-ASF,8-3GP,9-RTP+PS(国标:GB28181),0xff-无效 + BYTE byAudioBitRate; //音频码率 参考 BITRATE_ENCODE_INDEX + BYTE byStreamSmooth;//码流平滑 1~100(1等级表示清晰(Clear),100表示平滑(Smooth)) + BYTE byAudioSamplingRate;//音频采样率0-默认,1- 16kHZ, 2-32kHZ, 3-48kHZ, 4- 44.1kHZ,5-8kHZ + BYTE bySmartCodec;///*bit0-快速编码 0-关闭,1-打开,bit1 - 低码率模式 0 - 关闭,1 - 打开*/ + BYTE byDepthMapEnable;// 深度图使能开关,0-关闭,1-打开;如果开启后,第二通道的子码流(双目)的视频参数都不能配置,默认输出 960*540 的深度图; + //平均码率(在SmartCodec使能开启下生效), 0-0K 1-16K 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K 24-2560K 25-3072K 26-4096K 27-5120K 28-6144K 29-7168K 30-8192K + //最高位(15位)置成1表示是自定义码流, 0-14位表示码流值(MIN- 0 K)。 WORD wAverageVideoBitrate; }NET_DVR_COMPRESSION_INFO_V30, *LPNET_DVR_COMPRESSION_INFO_V30; -//ͨѹ(9000չ) +//通道压缩参数(9000扩展) typedef struct { DWORD dwSize; - NET_DVR_COMPRESSION_INFO_V30 struNormHighRecordPara; //¼ Ӧ8000ͨ - NET_DVR_COMPRESSION_INFO_V30 struRes;// char reserveData[28]; - NET_DVR_COMPRESSION_INFO_V30 struEventRecordPara; //¼ѹ - NET_DVR_COMPRESSION_INFO_V30 struNetPara; //() + NET_DVR_COMPRESSION_INFO_V30 struNormHighRecordPara; //录像 对应8000的普通 + NET_DVR_COMPRESSION_INFO_V30 struRes;//保留 char reserveData[28]; + NET_DVR_COMPRESSION_INFO_V30 struEventRecordPara; //事件触发压缩参数 + NET_DVR_COMPRESSION_INFO_V30 struNetPara; //网传(子码流) }NET_DVR_COMPRESSIONCFG_V30, *LPNET_DVR_COMPRESSIONCFG_V30; -//ѹ(ӽṹ) +//码流压缩参数(子结构) typedef struct { - BYTE byStreamType; //0-Ƶ,1-,ʾѹʱλʾǷѹ - BYTE byResolution; //ֱ0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF, 5-2QCIF(352X144)(ר) - BYTE byBitrateType; //0:ʣ1:ʣ2 - BYTE byPicQuality; //ͼ 0- 1-κ 2-Ϻ 3-һ 4-ϲ 5- - DWORD dwVideoBitrate; /*Ƶ 0- 1-16K() 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K + BYTE byStreamType; //码流类型0-视频流,1-复合流,表示压缩参数时最高位表示是否启用压缩参数 + BYTE byResolution; //分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF, 5-2QCIF(352X144)(车载专用) + BYTE byBitrateType; //码率类型0:变码率,1:定码率,2:低码率 + BYTE byPicQuality; //图象质量 0-最好 1-次好 2-较好 3-一般 4-较差 5-差 + DWORD dwVideoBitrate; /*视频码率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K 24-2560K 25-3072K 26-4096K 27-5120K 28-6144K 29-7168K 30-8192K 31-12288K*/ - DWORD dwVideoFrameRate; //֡ 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; + DWORD dwVideoFrameRate; //帧率 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; }NET_DVR_COMPRESSION_INFO, *LPNET_DVR_COMPRESSION_INFO; -//ͨѹ +//通道压缩参数 typedef struct { DWORD dwSize; - NET_DVR_COMPRESSION_INFO struRecordPara; //¼/¼¼ - NET_DVR_COMPRESSION_INFO struNetPara; /// + NET_DVR_COMPRESSION_INFO struRecordPara; //录像/事件触发录像 + NET_DVR_COMPRESSION_INFO struNetPara; //网传/保留 }NET_DVR_COMPRESSIONCFG, *LPNET_DVR_COMPRESSIONCFG; -//ѹ(ӽṹ)(չ) I֡ +//码流压缩参数(子结构)(扩展) 增加I帧间隔 typedef struct { - BYTE byStreamType; //0-Ƶ, 1- - BYTE byResolution; //ֱ0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF, 5-2QCIF(352X144)(ר) - BYTE byBitrateType; //0:ʣ1:ʣ2 - BYTE byPicQuality; //ͼ 0- 1-κ 2-Ϻ 3-һ 4-ϲ 5- - DWORD dwVideoBitrate; /*Ƶ 0- 1-16K() 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K + BYTE byStreamType; //码流类型0-视频流, 1-复合流 + BYTE byResolution; //分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF, 5-2QCIF(352X144)(车载专用) + BYTE byBitrateType; //码率类型0:变码率,1:定码率,2:低码率 + BYTE byPicQuality; //图象质量 0-最好 1-次好 2-较好 3-一般 4-较差 5-差 + DWORD dwVideoBitrate; /*视频码率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K 24-3072K 25-4096K 26-8192K 27-16384K (28-30 Reserved) 31-12288K*/ - DWORD dwVideoFrameRate; //֡ 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, //V2.014-15, 15-18, 16-22; - WORD wIntervalFrameI; //I֡ - //2006-08-11 ӵP֡ýӿڣԸʵʱʱ - BYTE byIntervalBPFrame;//0-BBP֡; 1-BP֡; 2-P֡ + DWORD dwVideoFrameRate; //帧率 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, //V2.0增加14-15, 15-18, 16-22; + WORD wIntervalFrameI; //I帧间隔 + //2006-08-11 增加单P帧的配置接口,可以改善实时流延时问题 + BYTE byIntervalBPFrame;//0-BBP帧; 1-BP帧; 2-单P帧 BYTE byRes; }NET_DVR_COMPRESSION_INFO_EX, *LPNET_DVR_COMPRESSION_INFO_EX; -//ͨѹ(չ) +//通道压缩参数(扩展) typedef struct { DWORD dwSize; - NET_DVR_COMPRESSION_INFO_EX struRecordPara; //¼ - NET_DVR_COMPRESSION_INFO_EX struNetPara; // + NET_DVR_COMPRESSION_INFO_EX struRecordPara; //录像 + NET_DVR_COMPRESSION_INFO_EX struNetPara; //网传 }NET_DVR_COMPRESSIONCFG_EX, *LPNET_DVR_COMPRESSIONCFG_EX; -//ʱ¼(ӽṹ) +//时间段录像参数配置(子结构) typedef struct { NET_DVR_SCHEDTIME struRecordTime; - BYTE byRecordType; //0:ʱ¼1:ƶ⣬2:¼3:|4:&, 5:, 6: ¼,10-PIR11-߱12-ȱ13-б,14-ܽͨ¼15Խ⣬16⣬17Ƶ쳣 + BYTE byRecordType; //0:定时录像,1:移动侦测,2:报警录像,3:动测|报警,4:动测&报警, 5:命令触发, 6: 智能录像,10-PIR报警,11-无线报警,12-呼救报警,13-所有报警,14-智能交通事件,15越界侦测,16区域入侵侦测,17音频异常侦测 char reservedData[3]; }NET_DVR_RECORDSCHED, *LPNET_DVR_RECORDSCHED; -//ȫ¼(ӽṹ) +//全天录像参数配置(子结构) typedef struct { - WORD wAllDayRecord; /* Ƿȫ¼ 0- 1-*/ - BYTE byRecordType; /* ¼ 0:ʱ¼1:ƶ⣬2:¼3:|4:& 5:, 6: ¼, - 10-PIR11-߱12-ȱ13-ƶ||PIR|߱|ȱ,14-ܽͨ¼,15-Խ,16-,17-쳣, - 18-,19-⣨Խ|||뿪|Ŀʶ,20, 21-POS¼*/ + WORD wAllDayRecord; /* 是否全天录像 0-否 1-是*/ + BYTE byRecordType; /* 录象类型 0:定时录像,1:移动侦测,2:报警录像,3:动测|报警,4:动测&报警 5:命令触发, 6: 智能录像, + 10-PIR报警,11-无线报警,12-呼救报警,13-移动|报警输入|PIR|无线报警|呼救报警,14-智能交通事件,15-越界侦测,16-区域入侵,17-声音异常, + 18-场景变更侦测,19-智能侦测(越界侦测|区域入侵|进入区域|离开区域|目标识别),20-人脸侦测, 21-POS录像*/ char reservedData; }NET_DVR_RECORDDAY, *LPNET_DVR_RECORDDAY; -//ͨ¼(9000չ) +//通道录像参数配置(9000扩展) typedef struct { DWORD dwSize; - DWORD dwRecord; /*Ƿ¼ 0- 1-*/ + DWORD dwRecord; /*是否录像 0-否 1-是*/ NET_DVR_RECORDDAY struRecAllDay[MAX_DAYS]; NET_DVR_RECORDSCHED struRecordSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; - DWORD dwRecordTime; /* ¼ʱ 0-5룬 1-10룬 2-30룬 3-1ӣ 4-2ӣ 5-5ӣ 6-10*/ - DWORD dwPreRecordTime; /* Ԥ¼ʱ 0-Ԥ¼ 1-5 2-10 3-15 4-20 5-25 6-30 7-0xffffffff(Ԥ¼) */ - DWORD dwRecorderDuration; /* ¼񱣴ʱ */ - BYTE byRedundancyRec; /*Ƿ¼,Ҫ˫ݣ0/1*/ - BYTE byAudioRec; /*¼ʱʱǷ¼Ƶݣд˷*/ - BYTE byStreamType; // 0-1-2-ͬʱ 3- - BYTE byPassbackRecord; // 0:ش¼ 1ش¼ - WORD wLockDuration; // ¼ʱλСʱ 0ʾ0xffffʾ¼εʱijʱ¼񣬽 - BYTE byRecordBackup; // 0:¼񲻴浵 1¼浵 - BYTE bySVCLevel; //SVC֡ͣ0-飬1-֮һ 2-ķ֮ - BYTE byRecordManage; //¼ȣ0-ã 1-; ʱжʱ¼񣻲ʱжʱ¼񣬵¼ƻʹãƶ⣬شڰ¼ƻ - BYTE byExtraSaveAudio; //Ƶ0-ǵ棬1- - /*¼ܺ㷨Զ¼㷨书Ϊ¼Ŀ֣ήʡ֡ʣĿʱָֻȫʼ֡ʣӶﵽԴĵĿ*/ - BYTE byIntelligentRecord;//Ƿ¼ 0- 1- + DWORD dwRecordTime; /* 录象延时长度 0-5秒, 1-10秒, 2-30秒, 3-1分钟, 4-2分钟, 5-5分钟, 6-10分钟*/ + DWORD dwPreRecordTime; /* 预录时间 0-不预录 1-5秒 2-10秒 3-15秒 4-20秒 5-25秒 6-30秒 7-0xffffffff(尽可能预录) */ + DWORD dwRecorderDuration; /* 录像保存的最长时间 */ + BYTE byRedundancyRec; /*是否冗余录像,重要数据双备份:0/1*/ + BYTE byAudioRec; /*录像时复合流编码时是否记录音频数据:国外有此法规*/ + BYTE byStreamType; // 0-主码流,1-子码流,2-主子码流同时 3-三码流 + BYTE byPassbackRecord; // 0:不回传录像 1:回传录像 + WORD wLockDuration; // 录像锁定时长,单位小时 0表示不锁定,0xffff表示永久锁定,录像段的时长大于锁定的持续时长的录像,将不会锁定 + BYTE byRecordBackup; // 0:录像不存档 1:录像存档 + BYTE bySVCLevel; //SVC抽帧类型:0-不抽,1-抽二分之一 2-抽四分之三 + BYTE byRecordManage; //录像调度,0-启用, 1-不启用; 启用时进行定时录像;不启用时不进行定时录像,但是录像计划仍在使用,比如移动侦测,回传都还在按这条录像计划进行 + BYTE byExtraSaveAudio; //音频单独另存0-非单独另存,1-单独另存 + /*开启智能录像功能后,算法库是自动启用智能录像算法,其功能为若录像中无目标出现,会降低码率、帧率,而目标出现时又恢复全码率及帧率,从而达到减少资源消耗的目的*/ + BYTE byIntelligentRecord;//是否开启智能录像功能 0-否 1-是 BYTE byReserve; }NET_DVR_RECORD_V30, *LPNET_DVR_RECORD_V30; -//ʱ¼(ӽṹ) +//时间段录像参数配置(子结构) typedef struct { NET_DVR_SCHEDTIME struRecordTime; - /*¼ͣ0:ʱ¼1:ƶ⣬2:¼3:|4:& 5:, - 6-ܱ¼10-PIR11-߱12-ȱ13-ȫ¼,14-ܽͨ¼, - 15-Խ,16-,17-쳣,18-, - 19-(Խ|||쳣|),20,21-POS¼, - 22-, 23-뿪,24-ǻ,25-Աۼ,26-˶,27-ͣ, - 28-Ʒ,29-Ʒȡ,30-⣬31-ƻ,32-ܶʼ(˾),33-¼(˾), 34-˯¼(˾) - 35-ֻ, 36-Ԥ37-±38-²39-߲±,40-41-,42-ҵѯ,43-,44-ʸ,45-Ŀʱ46-Ŀץģ47-Ƿ̯,48-Ŀץ, - 49-˶50ڼ⣬51-52仯 53-ŷʾ 54-Ҷȱ*/ + /*录像类型,0:定时录像,1:移动侦测,2:报警录像,3:动测|报警,4:动测&报警 5:命令触发, + 6-智能报警录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件, + 15-越界侦测,16-区域入侵,17-声音异常,18-场景变更侦测, + 19-智能侦测(越界侦测|区域入侵|人脸侦测|声音异常|场景变更侦测),20-人脸侦测,21-POS录像, + 22-进入区域侦测, 23-离开区域侦测,24-徘徊侦测,25-人员聚集侦测,26-快速运动侦测,27-停车侦测, + 28-物品遗留侦测,29-物品拿取侦测,30-火点检测,31-防破坏检测,32-打架斗殴事件(司法),33-起身事件(司法), 34-瞌睡事件(司法) + 35-船只检测, 36-测温预警,37-测温报警,38-温差报警,39-离线测温报警,40-防区报警,41-紧急求助,42-业务咨询,43-起身检测,44-折线攀高,45-目标区域滞留超时,46-目标抓拍,47-非法摆摊,48-目标抓拍, + 49-剧烈运动,50离岗检测,51-起立,52人数变化 53-废气排放显示 54-灰度报警*/ BYTE byRecordType; BYTE byRes[31]; }NET_DVR_RECORDSCHED_V40, *LPNET_DVR_RECORDSCHED_V40; -//ȫ¼(ӽṹ) +//全天录像参数配置(子结构) typedef struct { - BYTE byAllDayRecord; /* Ƿȫ¼ 0- 1-*/ - /*¼ͣ0:ʱ¼1:ƶ⣬2:¼3:|4:& 5:, - 6-ܱ¼10-PIR11-߱12-ȱ13-ȫ¼,14-ܽͨ¼, - 15-Խ,16-,17-쳣,18-, - 19-(Խ|||쳣|),20,21-POS¼, - 22-, 23-뿪,24-ǻ,25-Աۼ,26-˶,27-ͣ, - 28-Ʒ,29-Ʒȡ,30-⣬31-ƻ,32-ܶʼ(˾),33-¼(˾), 34-˯¼(˾) - 35-ֻ, 36-Ԥ37-±38-²39-߲±,40-41-,42-ҵѯ,43-,44-ʸ,45-Ŀʱ,46-Ŀץ,47-Ƿ̯,48-Ŀץ, - 49-˶50ڼ⣬51-52仯 53-ŷʾ 54-Ҷȱ*/ + BYTE byAllDayRecord; /* 是否全天录像 0-否 1-是*/ + /*录像类型,0:定时录像,1:移动侦测,2:报警录像,3:动测|报警,4:动测&报警 5:命令触发, + 6-智能报警录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件, + 15-越界侦测,16-区域入侵,17-声音异常,18-场景变更侦测, + 19-智能侦测(越界侦测|区域入侵|人脸侦测|声音异常|场景变更侦测),20-人脸侦测,21-POS录像, + 22-进入区域侦测, 23-离开区域侦测,24-徘徊侦测,25-人员聚集侦测,26-快速运动侦测,27-停车侦测, + 28-物品遗留侦测,29-物品拿取侦测,30-火点检测,31-防破坏检测,32-打架斗殴事件(司法),33-起身事件(司法), 34-瞌睡事件(司法) + 35-船只检测, 36-测温预警,37-测温报警,38-温差报警,39-离线测温报警,40-防区报警,41-紧急求助,42-业务咨询,43-起身检测,44-折线攀高,45-目标区域滞留超时,46-目标抓拍,47-非法摆摊,48-目标抓拍, + 49-剧烈运动,50离岗检测,51-起立,52人数变化 53-废气排放显示 54-灰度报警*/ BYTE byRecordType; BYTE byRes[62]; }NET_DVR_RECORDDAY_V40, *LPNET_DVR_RECORDDAY_V40; @@ -10472,215 +10472,215 @@ typedef struct typedef struct { DWORD dwSize; - DWORD dwRecord; /*Ƿ¼ 0- 1-*/ + DWORD dwRecord; /*是否录像 0-否 1-是*/ NET_DVR_RECORDDAY_V40 struRecAllDay[MAX_DAYS]; NET_DVR_RECORDSCHED_V40 struRecordSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; - DWORD dwRecordTime; /* ¼ʱ 0-5룬 1-10룬 2-30룬 3-1ӣ 4-2ӣ 5-5ӣ 6-10*/ - DWORD dwPreRecordTime; /* Ԥ¼ʱ 0-Ԥ¼ 1-5 2-10 3-15 4-20 5-25 6-30 7-0xffffffff(Ԥ¼) */ - DWORD dwRecorderDuration; /* ¼񱣴ʱ */ - BYTE byRedundancyRec; /*Ƿ¼,Ҫ˫ݣ0/1*/ - BYTE byAudioRec; /*¼ʱʱǷ¼Ƶݣд˷*/ - BYTE byStreamType; // 0-1-2-ͬʱ 3- - BYTE byPassbackRecord; // 0:ش¼ 1ش¼ - WORD wLockDuration; // ¼ʱλСʱ 0ʾ0xffffʾ¼εʱijʱ¼񣬽 - BYTE byRecordBackup; // 0:¼񲻴浵 1¼浵 - BYTE bySVCLevel; //SVC֡ͣ0-飬1-֮һ 2-ķ֮ - BYTE byRecordManage; //¼ȣ0-ã 1-; ʱжʱ¼񣻲ʱжʱ¼񣬵¼ƻʹãƶ⣬شڰ¼ƻ - BYTE byExtraSaveAudio;//Ƶ洢 - /*¼ܺ㷨Զ¼㷨书Ϊ¼Ŀ֣ήʡ֡ʣĿʱָֻȫʼ֡ʣӶﵽԴĵĿ*/ - BYTE byIntelligentRecord;//Ƿ¼ 0- 1- + DWORD dwRecordTime; /* 录象延时长度 0-5秒, 1-10秒, 2-30秒, 3-1分钟, 4-2分钟, 5-5分钟, 6-10分钟*/ + DWORD dwPreRecordTime; /* 预录时间 0-不预录 1-5秒 2-10秒 3-15秒 4-20秒 5-25秒 6-30秒 7-0xffffffff(尽可能预录) */ + DWORD dwRecorderDuration; /* 录像保存的最长时间 */ + BYTE byRedundancyRec; /*是否冗余录像,重要数据双备份:0/1*/ + BYTE byAudioRec; /*录像时复合流编码时是否记录音频数据:国外有此法规*/ + BYTE byStreamType; // 0-主码流,1-子码流,2-主子码流同时 3-三码流 + BYTE byPassbackRecord; // 0:不回传录像 1:回传录像 + WORD wLockDuration; // 录像锁定时长,单位小时 0表示不锁定,0xffff表示永久锁定,录像段的时长大于锁定的持续时长的录像,将不会锁定 + BYTE byRecordBackup; // 0:录像不存档 1:录像存档 + BYTE bySVCLevel; //SVC抽帧类型:0-不抽,1-抽二分之一 2-抽四分之三 + BYTE byRecordManage; //录像调度,0-启用, 1-不启用; 启用时进行定时录像;不启用时不进行定时录像,但是录像计划仍在使用,比如移动侦测,回传都还在按这条录像计划进行 + BYTE byExtraSaveAudio;//音频单独存储 + /*开启智能录像功能后,算法库是自动启用智能录像算法,其功能为若录像中无目标出现,会降低码率、帧率,而目标出现时又恢复全码率及帧率,从而达到减少资源消耗的目的*/ + BYTE byIntelligentRecord;//是否开启智能录像功能 0-否 1-是 BYTE byRes[125]; }NET_DVR_RECORD_V40, *LPNET_DVR_RECORD_V40; -//ͨ¼ +//通道录像参数配置 typedef struct { DWORD dwSize; - DWORD dwRecord; /*Ƿ¼ 0- 1-*/ + DWORD dwRecord; /*是否录像 0-否 1-是*/ NET_DVR_RECORDDAY struRecAllDay[MAX_DAYS]; NET_DVR_RECORDSCHED struRecordSched[MAX_DAYS][MAX_TIMESEGMENT]; - DWORD dwRecordTime; /* ¼ʱ䳤 */ - DWORD dwPreRecordTime; /* Ԥ¼ʱ 0-Ԥ¼ 1-5 2-10 3-15 4-20 5-25 6-30 7-0xffffffff(Ԥ¼) */ + DWORD dwRecordTime; /* 录象时间长度 */ + DWORD dwPreRecordTime; /* 预录时间 0-不预录 1-5秒 2-10秒 3-15秒 4-20秒 5-25秒 6-30秒 7-0xffffffff(尽可能预录) */ }NET_DVR_RECORD, *LPNET_DVR_RECORD; -//̨Эṹ +//云台协议表结构配置 typedef struct { - DWORD dwType; /*ֵ*/ - BYTE byDescribe[DESC_LEN]; /*8000еһ*/ + DWORD dwType; /*解码器类型值*/ + BYTE byDescribe[DESC_LEN]; /*解码器的描述符,和8000中的一致*/ }NET_DVR_PTZ_PROTOCOL; typedef struct { DWORD dwSize; - NET_DVR_PTZ_PROTOCOL struPtz[PTZ_PROTOCOL_NUM];/*200PTZЭ*/ - DWORD dwPtzNum; /*ЧptzЭĿ0ʼ(ʱ1)*/ + NET_DVR_PTZ_PROTOCOL struPtz[PTZ_PROTOCOL_NUM];/*最大200中PTZ协议*/ + DWORD dwPtzNum; /*有效的ptz协议数目,从0开始(即计算时加1)*/ BYTE byRes[8]; }NET_DVR_PTZCFG, *LPNET_DVR_PTZCFG; -/***************************̨(end)******************************/ -typedef struct tagNET_DVR_SERIALSTART_V40 //͸ͨ +/***************************云台类型(end)******************************/ +typedef struct tagNET_DVR_SERIALSTART_V40 //透明通道 { - DWORD dwSize; //ṹС - DWORD dwSerialType; //ںţ1-232ڣ2-485ڣ - BYTE bySerialNum; //ڱ + DWORD dwSize; //结构体大小 + DWORD dwSerialType; //串口号(1-232串口,2-485串口) + BYTE bySerialNum; //串口编号 BYTE byRes[255]; }NET_DVR_SERIALSTART_V40,*LPNET_DVR_SERIALSTART_V40; -//ͨ(̨) չ +//通道解码器(云台)参数配置 扩展 typedef struct tagNET_DVR_DECODERCFG_V40 { - DWORD dwSize; //ṹС - DWORD dwBaudRate; // 0501752110315043005600612007240084800996001019200 11384001257600137680014115.2k; - BYTE byDataBit; //мλ 05λ16λ27λ38λ; - BYTE byStopBit; //ֹͣλ 01λ12λ - BYTE byParity; //У 0У飬1У飬2żУ - BYTE byFlowcontrol; //0ޣ1,2-Ӳ - WORD wDecoderType; //*/ - WORD wDecoderAddress; //ַ0-255 - BYTE bySetPreset [MAX_PRESET_V30]; //ԤõǷ,0-û,1- - BYTE bySetCruise[MAX_CRUISE_V30]; //ѲǷ: 0-û,1- - BYTE bySetTrack [MAX_TRACK_V30]; //Ƿ,0-û,1- - BYTE bySerialNO; //ڱ - BYTE byWorkMode; /*ģʽ 1-󴮿ڿƣ2-Ļƣ3-͸ͨģʽ 4-PPPģʽ 5-̨ģʽ 6-ֱ 7-̿ 8- 9-̨ 12-LEDʾ13-ץݴ*/ - BYTE byRes[254]; // + DWORD dwSize; //结构体大小 + DWORD dwBaudRate; //波特率 0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byDataBit; //数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit; //停止位 0-1位,1-2位 + BYTE byParity; //校验 0-无校验,1-奇校验,2-偶校验 + BYTE byFlowcontrol; //0-无,1-软流控,2-硬流控 + WORD wDecoderType; //解码器类型*/ + WORD wDecoderAddress; //解码器地址,0-255 + BYTE bySetPreset [MAX_PRESET_V30]; //预置点是否设置,0-没有设置,1-设置 + BYTE bySetCruise[MAX_CRUISE_V30]; //巡航是否设置: 0-没有设置,1-设置 + BYTE bySetTrack [MAX_TRACK_V30]; //是否设置,0-没有设置,1-设置 + BYTE bySerialNO; //串口编号 + BYTE byWorkMode; /*工作模式, 1-矩阵串口控制,2-屏幕控制,3-透明通道模式 4-PPP模式 5-控制台模式 6-串口直连 7-键盘控制 8-布防板管理 9-控制云台 12-LED显示,13-触发抓拍数据传输*/ + BYTE byRes[254]; //保留 }NET_DVR_DECODERCFG_V40,*LPNET_DVR_DECODERCFG_V40; typedef struct tagNET_DVR_THERMOMETRYRULE_TEMPERATURE_INFO { - float fMaxTemperature;//£ȷСһλ - float fMinTemperature;//£ȷСһλ - float fAverageTemperature;//ƽ£ȷСһλ - NET_VCA_POINT struHighestPoint; //¶λ - NET_VCA_POINT struLowestPoint; //¶λ - BYTE byIsFreezedata;//Ƿݶ 0- 1- + float fMaxTemperature;//最高温,精确到小数点后一位 + float fMinTemperature;//最低温,精确到小数点后一位 + float fAverageTemperature;//平均温,精确到小数点后一位 + NET_VCA_POINT struHighestPoint; //最高温度位置坐标 + NET_VCA_POINT struLowestPoint; //最低温度位置坐标 + BYTE byIsFreezedata;//是否数据冻结 0-否 1-是 BYTE byRes[15]; }NET_DVR_THERMOMETRYRULE_TEMPERATURE_INFO, *LPNET_DVR_THERMOMETRYRULE_TEMPERATURE_INFO; -//ͨ(̨)(9000չ) +//通道解码器(云台)参数配置(9000扩展) typedef struct { DWORD dwSize; - DWORD dwBaudRate;//(bps)0501752110315043005600612007240084800996001019200 11384001257600137680014115.2k; - BYTE byDataBit;// мλ 05λ16λ27λ38λ; - BYTE byStopBit;// ֹͣλ 01λ12λ; - BYTE byParity;// У 0У飬1У飬2żУ; - BYTE byFlowcontrol;// 0ޣ1,2-Ӳ - WORD wDecoderType;//, 0ʼӦptzЭбNET_DVR_IPC_PROTO_LISTõ - WORD wDecoderAddress; /*ַ:0 - 255*/ - BYTE bySetPreset[MAX_PRESET_V30]; /* ԤõǷ,0-û,1-*/ - BYTE bySetCruise[MAX_CRUISE_V30]; /* ѲǷ: 0-û,1- */ - BYTE bySetTrack[MAX_TRACK_V30]; /* Ƿ,0-û,1-*/ + DWORD dwBaudRate;//波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byDataBit;// 数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit;// 停止位 0-1位,1-2位; + BYTE byParity;// 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol;// 0-无,1-软流控,2-硬流控 + WORD wDecoderType;//解码器类型, 从0开始,对应ptz协议列表从NET_DVR_IPC_PROTO_LIST得到 + WORD wDecoderAddress; /*解码器地址:0 - 255*/ + BYTE bySetPreset[MAX_PRESET_V30]; /* 预置点是否设置,0-没有设置,1-设置*/ + BYTE bySetCruise[MAX_CRUISE_V30]; /* 巡航是否设置: 0-没有设置,1-设置 */ + BYTE bySetTrack[MAX_TRACK_V30]; /* 是否设置,0-没有设置,1-设置*/ }NET_DVR_DECODERCFG_V30, *LPNET_DVR_DECODERCFG_V30; -//ͨ(̨) +//通道解码器(云台)参数配置 typedef struct { DWORD dwSize; - DWORD dwBaudRate; //(bps)0501752110315043005600612007240084800996001019200 11384001257600137680014115.2k; - BYTE byDataBit; // мλ 05λ16λ27λ38λ; - BYTE byStopBit; // ֹͣλ 01λ12λ; - BYTE byParity; // У 0У飬1У飬2żУ; - BYTE byFlowcontrol; // 0ޣ1,2-Ӳ - WORD wDecoderType; // NET_DVR_IPC_PROTO_LISTеõ - WORD wDecoderAddress; /*ַ:0 - 255*/ - BYTE bySetPreset[MAX_PRESET]; /* ԤõǷ,0-û,1-*/ - BYTE bySetCruise[MAX_CRUISE]; /* ѲǷ: 0-û,1- */ - BYTE bySetTrack[MAX_TRACK]; /* Ƿ,0-û,1-*/ + DWORD dwBaudRate; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byDataBit; // 数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit; // 停止位 0-1位,1-2位; + BYTE byParity; // 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol; // 0-无,1-软流控,2-硬流控 + WORD wDecoderType; //解码器类型 NET_DVR_IPC_PROTO_LIST中得到 + WORD wDecoderAddress; /*解码器地址:0 - 255*/ + BYTE bySetPreset[MAX_PRESET]; /* 预置点是否设置,0-没有设置,1-设置*/ + BYTE bySetCruise[MAX_CRUISE]; /* 巡航是否设置: 0-没有设置,1-设置 */ + BYTE bySetTrack[MAX_TRACK]; /* 是否设置,0-没有设置,1-设置*/ }NET_DVR_DECODERCFG, *LPNET_DVR_DECODERCFG; -//ppp(ӽṹ) +//ppp参数配置(子结构) typedef struct { - NET_DVR_IPADDR struRemoteIP; //ԶIPַ - NET_DVR_IPADDR struLocalIP; //IPַ - char sLocalIPMask[16]; //IPַ - BYTE sUsername[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - BYTE byPPPMode; //PPPģʽ, 01 - BYTE byRedial; //Ƿز 0-,1- - BYTE byRedialMode; //زģʽ,0-ɲָ,1-Ԥûز - BYTE byDataEncrypt; //ݼ,0-,1- + NET_DVR_IPADDR struRemoteIP; //远端IP地址 + NET_DVR_IPADDR struLocalIP; //本地IP地址 + char sLocalIPMask[16]; //本地IP地址掩码 + BYTE sUsername[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byPPPMode; //PPP模式, 0-主动,1-被动 + BYTE byRedial; //是否回拨 :0-否,1-是 + BYTE byRedialMode; //回拨模式,0-由拨入者指定,1-预置回拨号码 + BYTE byDataEncrypt; //数据加密,0-否,1-是 DWORD dwMTU; //MTU - char sTelephoneNumber[PHONENUMBER_LEN]; //绰 + char sTelephoneNumber[PHONENUMBER_LEN]; //电话号码 }NET_DVR_PPPCFG_V30, *LPNET_DVR_PPPCFG_V30; -//ppp(ӽṹ) +//ppp参数配置(子结构) typedef struct { - char sRemoteIP[16]; //ԶIPַ - char sLocalIP[16]; //IPַ - char sLocalIPMask[16]; //IPַ - BYTE sUsername[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - BYTE byPPPMode; //PPPģʽ, 01 - BYTE byRedial; //Ƿز 0-,1- - BYTE byRedialMode; //زģʽ,0-ɲָ,1-Ԥûز - BYTE byDataEncrypt; //ݼ,0-,1- + char sRemoteIP[16]; //远端IP地址 + char sLocalIP[16]; //本地IP地址 + char sLocalIPMask[16]; //本地IP地址掩码 + BYTE sUsername[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byPPPMode; //PPP模式, 0-主动,1-被动 + BYTE byRedial; //是否回拨 :0-否,1-是 + BYTE byRedialMode; //回拨模式,0-由拨入者指定,1-预置回拨号码 + BYTE byDataEncrypt; //数据加密,0-否,1-是 DWORD dwMTU; //MTU - char sTelephoneNumber[PHONENUMBER_LEN]; //绰 + char sTelephoneNumber[PHONENUMBER_LEN]; //电话号码 }NET_DVR_PPPCFG, *LPNET_DVR_PPPCFG; -//RS232ڲ(9000չ) +//RS232串口参数配置(9000扩展) typedef struct { - DWORD dwBaudRate; /*(bps)0501752110315043005600612007240084800996001019200 11384001257600137680014115.2k;*/ - BYTE byDataBit; /* мλ 05λ16λ27λ38λ */ - BYTE byStopBit; /* ֹͣλ 01λ12λ */ - BYTE byParity; /* У 0У飬1У飬2żУ */ - BYTE byFlowcontrol; /* 0ޣ1,2-Ӳ */ - DWORD dwWorkMode; //ģʽ0232PPPţ1232ڲƣ2͸ͨ 3- ptzģʽ,Ѷʪȴ, 4-ģʽ 5-󴮿ڿ 6-Ļ 7-ֱ 8-̿ 9- 10-̨ + DWORD dwBaudRate; /*波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k;*/ + BYTE byDataBit; /* 数据有几位 0-5位,1-6位,2-7位,3-8位 */ + BYTE byStopBit; /* 停止位 0-1位,1-2位 */ + BYTE byParity; /* 校验 0-无校验,1-奇校验,2-偶校验 */ + BYTE byFlowcontrol; /* 0-无,1-软流控,2-硬流控 */ + DWORD dwWorkMode; //工作模式,0-232串口用于PPP拨号,1-232串口用于参数控制,2-透明通道 3- ptz模式,审讯温湿度传感器, 4-报警盒模式 5-矩阵串口控制 6-屏幕控制 7-串口直连 8-键盘控制 9-布防板管理 10-控制云台 }NET_DVR_SINGLE_RS232; typedef struct tagNET_DVR_USB_RS232 { - DWORD dwBaudRate; /*(bps)0501752110315043005600612007240084800996001019200 11384001257600137680014115.2k;*/ - BYTE byDataBit; /* мλ 05λ16λ27λ38λ */ - BYTE byStopBit; /* ֹͣλ 01λ12λ */ - BYTE byParity; /* У 0У飬1У飬2żУ */ - BYTE byFlowcontrol; /* 0ޣ1,2-Ӳ */ - BYTE byVirtualSerialPort; //⴮ڱ + DWORD dwBaudRate; /*波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k;*/ + BYTE byDataBit; /* 数据有几位 0-5位,1-6位,2-7位,3-8位 */ + BYTE byStopBit; /* 停止位 0-1位,1-2位 */ + BYTE byParity; /* 校验 0-无校验,1-奇校验,2-偶校验 */ + BYTE byFlowcontrol; /* 0-无,1-软流控,2-硬流控 */ + BYTE byVirtualSerialPort; //虚拟串口编号 BYTE byRes[3]; }NET_DVR_USB_RS232,*LPNET_DVR_USB_RS232; -//RS232ڲ(9000չ) +//RS232串口参数配置(9000扩展) typedef struct { DWORD dwSize; - NET_DVR_SINGLE_RS232 struRs232[MAX_SERIAL_PORT];/*ע⣺˽ṹ޸ˣԭǵṹ޸Ϊṹ*/ + NET_DVR_SINGLE_RS232 struRs232[MAX_SERIAL_PORT];/*注意:此结构修改了,原来是单个结构,现在修改为了数组结构*/ NET_DVR_PPPCFG_V30 struPPPConfig; }NET_DVR_RS232CFG_V30, *LPNET_DVR_RS232CFG_V30; -//RS232ڲ +//RS232串口参数配置 typedef struct { DWORD dwSize; - DWORD dwBaudRate;//(bps)0501752110315043005600612007240084800996001019200 11384001257600137680014115.2k; - BYTE byDataBit;// мλ 05λ16λ27λ38λ; - BYTE byStopBit;// ֹͣλ 01λ12λ; - BYTE byParity;// У 0У飬1У飬2żУ; - BYTE byFlowcontrol;// 0ޣ1,2-Ӳ - DWORD dwWorkMode;// ģʽ0խ(232PPP)1̨(232ڲ)2͸ͨ + DWORD dwBaudRate;//波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byDataBit;// 数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit;// 停止位 0-1位,1-2位; + BYTE byParity;// 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol;// 0-无,1-软流控,2-硬流控 + DWORD dwWorkMode;// 工作模式,0-窄带传输(232串口用于PPP拨号),1-控制台(232串口用于参数控制),2-透明通道 NET_DVR_PPPCFG struPPPConfig; }NET_DVR_RS232CFG, *LPNET_DVR_RS232CFG; typedef struct { - DWORD dwEnablePresetChan; /*Ԥõͨ, 0xfffffffʾԤõ*/ - DWORD dwPresetPointNo; /*ԤõͨӦԤõ, 0xfffffffʾԤõ㡣*/ + DWORD dwEnablePresetChan; /*启用预置点的通道, 0xfffffff表示不调用预置点*/ + DWORD dwPresetPointNo; /*调用预置点通道对应的预置点序号, 0xfffffff表示不调用预置点。*/ }NET_DVR_PRESETCHAN_INFO, LPNET_DVR_PRESETCHAN_INFO; typedef struct { - DWORD dwEnableCruiseChan; /*Ѳͨ*/ - DWORD dwCruiseNo; /*ѲͨӦѲ, 0xfffffffʾЧ*/ + DWORD dwEnableCruiseChan; /*启用巡航的通道*/ + DWORD dwCruiseNo; /*巡航通道对应的巡航编号, 0xfffffff表示无效*/ }NET_DVR_CRUISECHAN_INFO, LPNET_DVR_CRUISECHAN_INFO; typedef struct { - DWORD dwEnablePtzTrackChan; /*̨ͨ*/ - DWORD dwPtzTrackNo; /*̨ͨӦı, 0xfffffffʾЧ*/ + DWORD dwEnablePtzTrackChan; /*启用云台的通道*/ + DWORD dwPtzTrackNo; /*云台通道对应的编号, 0xfffffff表示无效*/ }NET_DVR_PTZTRACKCHAN_INFO, LPNET_DVR_PTZTRACKCHAN_INFO; typedef struct tagNET_DVR_PTZ_NOTIFICATION_COND @@ -10721,12 +10721,12 @@ typedef struct tagNET_DVR_PTZ_NOTIFICATION_COND typedef struct tagNET_DVR_PTZ_NOTIFICATION_CFG { DWORD dwSize; - DWORD dwEnablePresetChanNum; //ǰԤõĿ - NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //õԤõϢ( ptz) - DWORD dwEnableCruiseChanNum; //ǰѲͨĿ - NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //ѲͨϢ( ptz) - DWORD dwEnablePtzTrackChanNum; //ǰ̨ͨĿ - NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //̨ͨϢ( ptz) + DWORD dwEnablePresetChanNum; //当前已启用预置点的数目 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //启用的预置点信息(关联联动类型 ptz) + DWORD dwEnableCruiseChanNum; //当前已启用巡航的通道数目 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //启用巡航功能通道的信息(关联联动类型 ptz) + DWORD dwEnablePtzTrackChanNum; //当前已启用云台的通道数目 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //调用云台的通道信息(关联联动类型 ptz) BYTE byRes1[1024]; }NET_DVR_PTZ_NOTIFICATION_CFG, *LPNET_DVR_PTZ_NOTIFICATION_CFG; @@ -10749,7 +10749,7 @@ typedef struct tagNET_DVR_PTZ_NOTIFICATION 11-attendedBaggage, 12-audioDetection, 13-PIR, - 14-defocusDetection + 14-defocusDetection, 15-temperature, 16-fireDetection, 17-thermometry, @@ -10761,353 +10761,353 @@ typedef struct tagNET_DVR_PTZ_NOTIFICATION */ WORD byEventType; BYTE byRes[62]; - DWORD dwEnablePresetChanNum; //ǰԤõĿ - NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //õԤõϢ( ptz) - DWORD dwEnableCruiseChanNum; //ǰѲͨĿ - NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //ѲͨϢ( ptz) - DWORD dwEnablePtzTrackChanNum; //ǰ̨ͨĿ - NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //̨ͨϢ( ptz) + DWORD dwEnablePresetChanNum; //当前已启用预置点的数目 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //启用的预置点信息(关联联动类型 ptz) + DWORD dwEnableCruiseChanNum; //当前已启用巡航的通道数目 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //启用巡航功能通道的信息(关联联动类型 ptz) + DWORD dwEnablePtzTrackChanNum; //当前已启用云台的通道数目 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //调用云台的通道信息(关联联动类型 ptz) BYTE byRes1[1024]; }NET_DVR_PTZ_NOTIFICATION, *LPNET_DVR_PTZ_NOTIFICATION; -#define NET_SDK_MAX_EVENT_NUM 64 //¼ָ֧ +#define NET_SDK_MAX_EVENT_NUM 64 //组合事件最大支持个数 -//(256·NVRչ) +//报警输入参数配置(256路NVR扩展) typedef struct tagNET_DVR_ALARMINCFG_V40 { DWORD dwSize; - BYTE sAlarmInName[NAME_LEN]; /* */ - BYTE byAlarmType; //,0,1 - BYTE byAlarmInHandle; /* Ƿ 0- 1-*/ - BYTE byChannel; // 봥ʶͨ - BYTE byInputType; // 0-ʽ 1-źʽ - DWORD dwHandleType; //쳣,쳣ʽ"" - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - /*0x1000:ץͼϴ*/ - /*0x2000:ű*/ - DWORD dwMaxRelAlarmOutChanNum ; //ıֻ֧ͨ - DWORD dwRelAlarmOutChanNum; //ıͨ ʵ֧ - DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //ͨ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - /*¼ͨ*/ - DWORD dwMaxRecordChanNum; //豸ֵ֧¼ͨ-ֻ - DWORD dwCurRecordChanNum; //ǰʵõĹ¼ͨ - DWORD dwRelRecordChan[MAX_CHANNUM_V40]; /* ʵʴ¼ֵͨʾ,ýУ±0 - dwCurRecordChanNum -1Чм0xffffffff,Ч*/ - DWORD dwMaxEnablePtzCtrlNun; //ǫ̃(ֻ) - DWORD dwEnablePresetChanNum; //ǰԤõĿ - NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //õԤõϢ - BYTE byPresetDurationTime[MAX_CHANNUM_V40];//Ԥõͣʱ Χ0-20sĬ10s - BYTE byRes2[4]; /**/ - DWORD dwEnableCruiseChanNum; //ǰѲͨĿ - NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //ѲͨϢ - DWORD dwEnablePtzTrackChanNum; //ǰѲͨĿ - NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //̨ͨϢ - WORD wEventType[NET_SDK_MAX_EVENT_NUM/*64*/]; /*¼ͣÿһλӦһ¼*/ + BYTE sAlarmInName[NAME_LEN]; /* 名称 */ + BYTE byAlarmType; //报警器类型,0:常开,1:常闭 + BYTE byAlarmInHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byChannel; // 报警输入触发智能识别通道 + BYTE byInputType; //输入类型 0-开关量方式 1-信号量方式 + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x1000:抓图上传到云*/ + /*0x2000:短信报警*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOutChanNum; //触发的报警输出通道数 实际支持数 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //触发报警通道 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + /*触发的录像通道*/ + DWORD dwMaxRecordChanNum; //设备支持的最大关联录像通道数-只读 + DWORD dwCurRecordChanNum; //当前实际已配置的关联录像通道数 + DWORD dwRelRecordChan[MAX_CHANNUM_V40]; /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - dwCurRecordChanNum -1有效,如果中间遇到0xffffffff,则后续无效*/ + DWORD dwMaxEnablePtzCtrlNun; //最大可启用的云台控制总数(只读) + DWORD dwEnablePresetChanNum; //当前已启用预置点的数目 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //启用的预置点信息 + BYTE byPresetDurationTime[MAX_CHANNUM_V40];//预置点停留时间 范围0-20s,默认10s; + BYTE byRes2[4]; /*保留*/ + DWORD dwEnableCruiseChanNum; //当前已启用巡航的通道数目 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //启用巡航功能通道的信息 + DWORD dwEnablePtzTrackChanNum; //当前已启用巡航的通道数目 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //调用云台的通道信息 + WORD wEventType[NET_SDK_MAX_EVENT_NUM/*64*/]; /*组合事件类型,每一个位对应一个事件类型*/ BYTE byRes[128]; }NET_DVR_ALARMINCFG_V40, *LPNET_DVR_ALARMINCFG_V40; -//(9000չ) +//报警输入参数配置(9000扩展) typedef struct { DWORD dwSize; - BYTE sAlarmInName[NAME_LEN]; /* */ - BYTE byAlarmType; //,0,1 - BYTE byAlarmInHandle; /* Ƿ 0- 1-*/ - BYTE byChannel; // 봥ʶͨ - BYTE byInputType; // 0-ʽ 1-źʽ - NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ - BYTE byEnablePreset[MAX_CHANNUM_V30]; /* ǷԤõ 0-,1-*/ - BYTE byPresetNo[MAX_CHANNUM_V30]; /* ǫ̃Ԥõ,һԵǫ̈ͨԤõ, 0xffʾԤõ㡣*/ - BYTE byRes2[192]; /**/ - BYTE byEnableCruise[MAX_CHANNUM_V30]; /* ǷѲ 0-,1-*/ - BYTE byCruiseNo[MAX_CHANNUM_V30]; /* Ѳ */ - BYTE byEnablePtzTrack[MAX_CHANNUM_V30]; /* Ƿ 0-,1-*/ - BYTE byPTZTrack[MAX_CHANNUM_V30]; /* ǫ̃ */ + BYTE sAlarmInName[NAME_LEN]; /* 名称 */ + BYTE byAlarmType; //报警器类型,0:常开,1:常闭 + BYTE byAlarmInHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byChannel; // 报警输入触发智能识别通道 + BYTE byInputType; //输入类型 0-开关量方式 1-信号量方式 + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byEnablePreset[MAX_CHANNUM_V30]; /* 是否调用预置点 0-否,1-是*/ + BYTE byPresetNo[MAX_CHANNUM_V30]; /* 调用的云台预置点序号,一个报警输入可以调用多个通道的云台预置点, 0xff表示不调用预置点。*/ + BYTE byRes2[192]; /*保留*/ + BYTE byEnableCruise[MAX_CHANNUM_V30]; /* 是否调用巡航 0-否,1-是*/ + BYTE byCruiseNo[MAX_CHANNUM_V30]; /* 巡航 */ + BYTE byEnablePtzTrack[MAX_CHANNUM_V30]; /* 是否调用 0-否,1-是*/ + BYTE byPTZTrack[MAX_CHANNUM_V30]; /* 调用的云台的序号 */ BYTE byRes3[16]; }NET_DVR_ALARMINCFG_V30, *LPNET_DVR_ALARMINCFG_V30; typedef struct tagNET_DVR_ALARMINFO_FIXED_HEADER { - /*0-ź,1-Ӳ,2-źŶʧ3ƶ⣬4Ӳδʽ,5-дӲ̳,6-ڵ - 7-ʽƥ, 8-Ƿʣ9-Ƶź쳣10-¼쳣11-ܳ仯12-쳣13-ǰ/¼ֱʲƥ, - 14-Դʧ,15-ⱨ, 16-ȱ쳣17-¼18-Խ󱨾,19-Ƶʧ20-¼ - 21-ر¼22-㷨쳣23-屨,24-Ӳ쳣,25-,26-ͼƬ,27-POC쳣,28-ӽ쳣 - 30-ȱSD,32-̨ת쳣34-쳣*/ - DWORD dwAlarmType;// - NET_DVR_TIME_EX struAlarmTime; //ʱ + /*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-写硬盘出错,6-遮挡报警, + 7-制式不匹配, 8-非法访问,9-视频信号异常,10-录像异常,11-智能场景变化,12-阵列异常,13-前端/录像分辨率不匹配, + 14-申请解码资源失败,15-智能侦测报警, 16-热备异常,17-录播主机报警,18-语音对讲请求报警,19-音频丢失,20-开启录像, + 21-关闭录像,22-车辆检测算法异常,23-脉冲报警,24-人脸库硬盘异常,25-人脸库变更,26-人脸库图片变更,27-POC异常,28-相机视角异常, + 30-缺少SD卡,32-云台堵转异常,34-异常重启*/ + DWORD dwAlarmType;//报警类型 + NET_DVR_TIME_EX struAlarmTime; //发生报警的时间 union { - BYTE byUnionLen[116]; //ֳȥ8ֽչʱ + BYTE byUnionLen[116]; //分出去8个字节用于扩展时区 struct { - DWORD dwAlarmInputNo; //ıͨţһֻһ - DWORD dwTrigerAlarmOutNum; /*ıں䳤ݲдıͨţֽڱʾһ*/ - DWORD dwTrigerRecordChanNum; /*¼ͨں䳤ݲд¼ͨţֽڱʾһ*/ - }struIOAlarm; // dwAlarmTypeΪ0ʱЧ + DWORD dwAlarmInputNo; //发生报警的报警输入通道号,一次只有一个 + DWORD dwTrigerAlarmOutNum; /*触发的报警输出个数,用于后面计算变长数据部分中所有触发的报警输出通道号,四字节表示一个*/ + DWORD dwTrigerRecordChanNum; /*触发的录像通道个数,用于后面计算变长数据部分中所有触发的录像通道号,四字节表示一个*/ + }struIOAlarm; // 报警类型dwAlarmType为0时有效 struct { - DWORD dwAlarmChanNum; /*ͨݸں䳤ݲзıͨţֽڱʾһ*/ - DWORD dwPicLen;//JpegͼƬ - BYTE byPicURL; //ͼƬݲURLʽ 0-ͼƬݣ1-ͼƬURLʽ - BYTE byTarget; /*0-ʶĿ꣬1-ʶĿΪˣ2-ʶĿΪ*/ - BYTE byRes1[2]; // -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pDataBuff; //ͼƬͼƬURL + DWORD dwAlarmChanNum; /*发生报警通道数据个数,用于后面计算变长数据部分中所有发生的报警通道号,四字节表示一个*/ + DWORD dwPicLen;//Jpeg图片长度 + BYTE byPicURL; //图片数据采用URL方式 0-二进制图片数据,1-图片数据走URL方式 + BYTE byTarget; /*0-不区分识别目标,1-识别目标为人,2-识别目标为车*/ + BYTE byRes1[2]; //保留 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pDataBuff; //报警图片或者图片URL #else - char* pDataBuff; //ͼƬͼƬURL + char* pDataBuff; //报警图片或者图片URL BYTE byRes3[4]; #endif - }struAlarmChannel; // dwAlarmTypeΪ2369101328ʱЧ + }struAlarmChannel; // dwAlarmType为2,3,6,9,10、13或28时有效 struct { - DWORD dwAlarmHardDiskNum; /*Ӳݳȣں䳤ݲзӲ̺ţĽڱʾһ*/ - }struAlarmHardDisk; // dwAlarmTypeΪ1,4,5ʱЧ + DWORD dwAlarmHardDiskNum; /*发生报警的硬盘数据长度,用于后面计算变长数据部分中所有发生报警的硬盘号,四节表示一个*/ + }struAlarmHardDisk; // dwAlarmType为1,4,5时有效 struct { - BYTE bySubAlarmType; //ͣ1-һӳ¼ - BYTE byRes1[3]; // - NET_DVR_TIME_EX struRecordEndTime; //¼ʱ - }struRecordingHost; //¼רñ + BYTE bySubAlarmType; //报警子类型,1-一键延迟录像; + BYTE byRes1[3]; //保留 + NET_DVR_TIME_EX struRecordEndTime; //录播结束时间 + }struRecordingHost; //录播主机专用报警 struct { - float fVoltageValue;//Դѹֵ,λV,ȷ0.1 - BYTE byVoltageAlarmType; //Դѹͣ0-Դѹߣ1-Դѹ - BYTE byRes1[3]; //ֽ - }struVoltageInstable; //dwAlarmType=31ʱЧ + float fVoltageValue;//电源电压值,单位V,精确到0.1 + BYTE byVoltageAlarmType; //电源电压报警类型,0-电源电压过高,1-电源电压过低 + BYTE byRes1[3]; //保留字节 + }struVoltageInstable; //dwAlarmType=31时有效 struct { - float fTemperature;//¶ȣȷС1λ - DWORD dwCustomInfoLength; //ԶϢ - BYTE* pCustomInfo; //ԶϢ - BYTE byType; //̨ת 1-ˮƽת 2-ֱת - BYTE byDeicingEnabled; // ̨ʹ 0-ر 1- - BYTE byRes2[2]; // - DWORD dwChannel; //ͨ - }struPTLocking; //̨ת쳣 dwAlarmType=32ʱЧ + float fTemperature;//传感器温度,精确到小数点后1位 + DWORD dwCustomInfoLength; //自定义信息长度 + BYTE* pCustomInfo; //自定义信息 + BYTE byType; //云台堵转类型 1-水平堵转 2-垂直堵转 + BYTE byDeicingEnabled; // 云台除冰加热使能 0-关闭 1-开启 + BYTE byRes2[2]; //保留 + DWORD dwChannel; //通道号 + }struPTLocking; //云台堵转异常 dwAlarmType=32时有效 struct { - BYTE byExceptionType; //쳣,0-, 1- ־洢쳣2-־ - }struLogException; //dwAlarmType=33ʱЧ,־쳣Ϣ + BYTE byExceptionType; //异常类型,0-保留, 1- 日志存储异常,2-日志盘满 + }struLogException; //dwAlarmType=33时有效,日志异常信息 struct { - NET_DVR_TIME_EX struAlarmTime; //ʱ䣬豸ʱ - BYTE byExceptionType; // 0- 1- ߳ 2- ǰ012 Ϊ - BYTE byRes1[3]; //ֽ - }struAbnormalReboot; //쳣 dwAlarmType=34ʱЧ + NET_DVR_TIME_EX struAlarmTime; //重启时间,设备本地时间 + BYTE byExceptionType; //重启具体类型 0-保留 1- 线程 2-无码流 当前0、1、2 以外为其他 + BYTE byRes1[3]; //保留字节 + }struAbnormalReboot; //异常重启 dwAlarmType=34时有效 }uStruAlarm; - DWORD* pRes; //ڼ64λ½ṹֽڲ - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,byTimeDiffFlagΪ1ʱЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾbyTimeDiffFlagΪ1ʱЧ*/ - BYTE byRes; // - WORD wDevInfoIvmsChannel; //Ӻ͸ǰʱͨ - BYTE byRes2[2]; // + DWORD* pRes; //用于兼容64位下结构体字节不对齐问题 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes; //保留 + WORD wDevInfoIvmsChannel; //增加后端透传前端时的通道号 + BYTE byRes2[2]; //保留 }NET_DVR_ALRAM_FIXED_HEADER, *LPNET_DVR_ALARM_FIXED_HEADER; -//ϴϢ(256·NVRչ) +//上传报警信息(256路NVR扩展) typedef struct NET_DVR_ALARMINFO_V40 { - NET_DVR_ALRAM_FIXED_HEADER struAlarmFixedHeader; //̶ - DWORD* pAlarmData; //ɱ䲿 + NET_DVR_ALRAM_FIXED_HEADER struAlarmFixedHeader; //报警固定部分 + DWORD* pAlarmData; //报警可变部分内容 }NET_DVR_ALARMINFO_V40, *LPNET_DVR_ALARMINFO_V40; -// +//报警输入参数配置 typedef struct { DWORD dwSize; - BYTE sAlarmInName[NAME_LEN]; /* */ - BYTE byAlarmType; //,0,1 - BYTE byAlarmInHandle; /* Ƿ 0- 1-*/ - BYTE byChannel; // 봥ʶͨ + BYTE sAlarmInName[NAME_LEN]; /* 名称 */ + BYTE byAlarmType; //报警器类型,0:常开,1:常闭 + BYTE byAlarmInHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byChannel; // 报警输入触发智能识别通道 BYTE byRes; - NET_DVR_HANDLEEXCEPTION struAlarmHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//ʱ - BYTE byRelRecordChan[MAX_CHANNUM]; //¼ͨ,Ϊ1ʾͨ - BYTE byEnablePreset[MAX_CHANNUM]; /* ǷԤõ 0-,1-*/ - BYTE byPresetNo[MAX_CHANNUM]; /* ǫ̃Ԥõ,һԵǫ̈ͨԤõ, 0xffʾԤõ㡣*/ - BYTE byEnableCruise[MAX_CHANNUM]; /* ǷѲ 0-,1-*/ - BYTE byCruiseNo[MAX_CHANNUM]; /* Ѳ */ - BYTE byEnablePtzTrack[MAX_CHANNUM]; /* Ƿ 0-,1-*/ - BYTE byPTZTrack[MAX_CHANNUM]; /* ǫ̃ */ + NET_DVR_HANDLEEXCEPTION struAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM]; //报警触发的录象通道,为1表示触发该通道 + BYTE byEnablePreset[MAX_CHANNUM]; /* 是否调用预置点 0-否,1-是*/ + BYTE byPresetNo[MAX_CHANNUM]; /* 调用的云台预置点序号,一个报警输入可以调用多个通道的云台预置点, 0xff表示不调用预置点。*/ + BYTE byEnableCruise[MAX_CHANNUM]; /* 是否调用巡航 0-否,1-是*/ + BYTE byCruiseNo[MAX_CHANNUM]; /* 巡航 */ + BYTE byEnablePtzTrack[MAX_CHANNUM]; /* 是否调用 0-否,1-是*/ + BYTE byPTZTrack[MAX_CHANNUM]; /* 调用的云台的序号 */ }NET_DVR_ALARMINCFG, *LPNET_DVR_ALARMINCFG; -//ģⱨ +//模拟报警输入参数配置 typedef struct { DWORD dwSize; - BYTE byEnableAlarmHandle; // + BYTE byEnableAlarmHandle; //处理报警输入 BYTE byRes1[3]; - BYTE byAlarmInName[NAME_LEN]; //ģⱨ - WORD wAlarmInUpper; //ģѹޣʵֵ10Χ0~360 - WORD wAlarmInLower; //ģѹޣʵֵ10Χ0~360 - NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ + BYTE byAlarmInName[NAME_LEN]; //模拟报警输入名称 + WORD wAlarmInUpper; //模拟输入电压上限,实际值乘10,范围0~360 + WORD wAlarmInLower; //模拟输入电压下限,实际值乘10,范围0~360 + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //被触发的录像通道 BYTE byRes2[100]; }NET_DVR_ANALOG_ALARMINCFG, *LPNET_DVR_ANALOG_ALARMINCFG; -//ϴϢ(9000չ) +//上传报警信息(9000扩展) typedef struct { - DWORD dwAlarmType;/*0-ź,1-Ӳ,2-źŶʧ,3ƶ,4Ӳδʽ,5-дӲ̳,6-ڵ,7-ʽƥ, 8-Ƿ, 9-Ƶź쳣, - 10-¼쳣,11- ܳ仯,12-쳣,13-ǰ/¼ֱʲƥ,14-Դʧ,15-, 16-POE쳣,17-쳣, - 18-쳣,19-Ƶʧ20-¼21-ر¼22-㷨쳣23-屨,24-Ӳ쳣,25-,26-ͼƬ,27-POC쳣 - 28-ӽ쳣,29-ͣ30-ȱSD*/ - DWORD dwAlarmInputNumber;/*˿*/ - BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30];/*˿ڣΪ1ʾӦ*/ - BYTE byAlarmRelateChannel[MAX_CHANNUM_V30];/*¼ͨΪ1ʾӦ¼, dwAlarmRelateChannel[0]Ӧ1ͨ*/ - BYTE byChannel[MAX_CHANNUM_V30];/*dwAlarmTypeΪ23,6,9,10,14,19,28ʱʾĸͨdwChannel[0]Ӧ1ͨ*/ - BYTE byDiskNumber[MAX_DISKNUM_V30];/*dwAlarmTypeΪ1,4,5ʱ,ʾĸӲ, dwDiskNumber[0]Ӧ1Ӳ*/ + DWORD dwAlarmType;/*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问, 9-视频信号异常, + 10-录像异常,11- 智能场景变化,12-阵列异常,13-前端/录像分辨率不匹配,14-申请解码资源失败,15-智能侦测, 16-POE供电异常报警,17-闪光灯异常, + 18-磁盘满负荷异常报警,19-音频丢失,20-开启录像,21-关闭录像,22-车辆检测算法异常,23-脉冲报警,24-人脸库硬盘异常,25-人脸库变更,26-人脸库图片变更,27-POC异常 + 28-相机视角异常,29-电量低,30-缺少SD卡*/ + DWORD dwAlarmInputNumber;/*报警输入端口*/ + BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30];/*触发的输出端口,为1表示对应输出*/ + BYTE byAlarmRelateChannel[MAX_CHANNUM_V30];/*触发的录像通道,为1表示对应录像, dwAlarmRelateChannel[0]对应第1个通道*/ + BYTE byChannel[MAX_CHANNUM_V30];/*dwAlarmType为2或3,6,9,10,14,19,28时,表示哪个通道,dwChannel[0]对应第1个通道*/ + BYTE byDiskNumber[MAX_DISKNUM_V30];/*dwAlarmType为1,4,5时,表示哪个硬盘, dwDiskNumber[0]对应第1个硬盘*/ #ifdef SDK_CHEZAI - NET_DVR_ADDIT_POSITION GPS_pos; /* GPSλϢ */ + NET_DVR_ADDIT_POSITION GPS_pos; /* GPS定位信息 */ #endif }NET_DVR_ALARMINFO_V30, *LPNET_DVR_ALARMINFO_V30; typedef struct tagNET_DVR_ALARM_HOT_SPARE { - DWORD dwSize; //ṹ - DWORD dwExceptionCase; //ԭ 0-쳣 - NET_DVR_IPADDR struDeviceIP; //쳣豸IPַ - BYTE byRes[256]; // + DWORD dwSize; //结构体 + DWORD dwExceptionCase; //报警原因 0-网络异常 + NET_DVR_IPADDR struDeviceIP; //产生异常的设备IP地址 + BYTE byRes[256]; //保留 }NET_DVR_ALARM_HOT_SPARE, *LPNET_DVR_ALARM_HOT_SPARE; typedef struct { - DWORD dwAlarmType;/*0-ź,1-Ӳ,2-źŶʧ,3ƶ,4Ӳδʽ,5-дӲ̳,6-ڵ,7-ʽƥ, 8-Ƿ, 9-Ƶź쳣10-¼쳣 11- ܳ仯*/ - DWORD dwAlarmInputNumber;/*˿*/ - DWORD dwAlarmOutputNumber[MAX_ALARMOUT];/*˿ڣһλΪ1ʾӦһ*/ - DWORD dwAlarmRelateChannel[MAX_CHANNUM];/*¼ͨһλΪ1ʾӦһ·¼, dwAlarmRelateChannel[0]Ӧ1ͨ*/ - DWORD dwChannel[MAX_CHANNUM];/*dwAlarmTypeΪ23,6,9,10ʱʾĸͨdwChannel[0]λӦ1ͨ*/ - DWORD dwDiskNumber[MAX_DISKNUM];/*dwAlarmTypeΪ1,4,5ʱ,ʾĸӲ, dwDiskNumber[0]λӦ1Ӳ*/ + DWORD dwAlarmType;/*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问, 9-视频信号异常,10-录像异常 11- 智能场景变化*/ + DWORD dwAlarmInputNumber;/*报警输入端口*/ + DWORD dwAlarmOutputNumber[MAX_ALARMOUT];/*触发的输出端口,哪一位为1表示对应哪一个输出*/ + DWORD dwAlarmRelateChannel[MAX_CHANNUM];/*触发的录像通道,哪一位为1表示对应哪一路录像, dwAlarmRelateChannel[0]对应第1个通道*/ + DWORD dwChannel[MAX_CHANNUM];/*dwAlarmType为2或3,6,9,10时,表示哪个通道,dwChannel[0]位对应第1个通道*/ + DWORD dwDiskNumber[MAX_DISKNUM];/*dwAlarmType为1,4,5时,表示哪个硬盘, dwDiskNumber[0]位对应第1个硬盘*/ }NET_DVR_ALARMINFO, *LPNET_DVR_ALARMINFO; ////////////////////////////////////////////////////////////////////////////////////// -//IPC -/* IP豸ṹ */ +//IPC接入参数配置 +/* IP设备结构 */ typedef struct { - DWORD dwEnable; /* IP豸Ƿ */ - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - NET_DVR_IPADDR struIP; /* IPַ */ - WORD wDVRPort; /* ˿ں */ - BYTE byRes[34]; /* */ + DWORD dwEnable; /* 该IP设备是否启用 */ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + NET_DVR_IPADDR struIP; /* IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byRes[34]; /* 保留 */ }NET_DVR_IPDEVINFO, *LPNET_DVR_IPDEVINFO; -#define DEV_ID_LEN 32 //豸ID +#define DEV_ID_LEN 32 //设备ID长度 -//ipc豸Ϣչ֧ip豸 +//ipc接入设备信息扩展,支持ip设备的域名添加 typedef struct tagNET_DVR_IPDEVINFO_V31 { - BYTE byEnable; //IP豸ǷЧ - BYTE byProType; //Эͣ0-˽Э飬1-Э飬2- - BYTE byEnableQuickAdd; // 0 ֿ֧ 1 ʹÿ - // Ҫ豸IPЭͣϢ豸Ĭָ - BYTE byCameraType; //ֵͨͣΪ 0-壬1-۽ʦ2-۽ѧ3-ʦȫ4-ѧȫ5-ý壬6Cʦλ,7-ѧλ,8-鶨λ,9- - BYTE sUserName[NAME_LEN]; //û - BYTE sPassword[PASSWD_LEN]; // - BYTE byDomain[MAX_DOMAIN_NAME]; //豸 - NET_DVR_IPADDR struIP; //IPַ - WORD wDVRPort; // ˿ں - BYTE szDeviceID[DEV_ID_LEN]; //豸ID - BYTE byEnableTiming; //0-1-NVRIPCԶУʱ2-NVRIPCԶУʱ - BYTE byCertificateValidation;//֤֤ - // byCertificateValidation:bit0: 0-֤֤ 1-֤֤ - // byCertificateValidation:bit1: 0-ĬͨŶ˿ 1-ĬͨŶ˿ + BYTE byEnable; //该IP设备是否有效 + BYTE byProType; //协议类型,0-私有协议,1-松下协议,2-索尼 + BYTE byEnableQuickAdd; // 0 不支持快速添加 1 使用快速添加 + // 快速添加需要设备IP和协议类型,其他信息由设备默认指定 + BYTE byCameraType; //通道接入的相机类型,值为 0-无意义,1-聚焦老师,2-聚焦学生,3-老师全景,4-学生全景,5-多媒体,6–教师定位,7-学生定位,8-板书定位,9-板书相机 + BYTE sUserName[NAME_LEN]; //用户名 + BYTE sPassword[PASSWD_LEN]; //密码 + BYTE byDomain[MAX_DOMAIN_NAME]; //设备域名 + NET_DVR_IPADDR struIP; //IP地址 + WORD wDVRPort; // 端口号 + BYTE szDeviceID[DEV_ID_LEN]; //设备ID + BYTE byEnableTiming; //0-保留,1-不启用NVR对IPC自动校时,2-启用NVR对IPC自动校时 + BYTE byCertificateValidation;//证书验证 + // byCertificateValidation:bit0: 0-不启用证书验证 1-启用证书验证 + // byCertificateValidation:bit1: 0-不启用默认通信端口 1-启用默认通信端口 }NET_DVR_IPDEVINFO_V31, *LPNET_DVR_IPDEVINFO_V31; -/* IPͨƥ */ +/* IP通道匹配参数 */ typedef struct { - BYTE byEnable; /* ͨǷ */ - BYTE byIPID; //IP豸ID8λ豸IDΪ0ʱʾͨ - BYTE byChannel; /* ͨ */ - BYTE byIPIDHigh; // IP豸IDĸ8λ - BYTE byTransProtocol; //Э0-TCP/auto(豸)1-UDP 2-ಥ 3-TCP 4-auto - BYTE byGetStream; /* ǷԸͨȡ0-ǣ1-*/ - BYTE byres[30]; /* */ + BYTE byEnable; /* 该通道是否在线 */ + BYTE byIPID; //IP设备ID低8位,当设备ID为0时表示通道不可用 + BYTE byChannel; /* 通道号 */ + BYTE byIPIDHigh; // IP设备ID的高8位 + BYTE byTransProtocol; //传输协议类型0-TCP/auto(具体有设备决定),1-UDP 2-多播 3-仅TCP 4-auto + BYTE byGetStream; /* 是否对该通道取流,0-是,1-否*/ + BYTE byres[30]; /* 保留 */ } NET_DVR_IPCHANINFO, *LPNET_DVR_IPCHANINFO; -/* IPýṹ */ +/* IP接入配置结构 */ typedef struct { - DWORD dwSize; /* ṹС */ - NET_DVR_IPDEVINFO struIPDevInfo[MAX_IP_DEVICE]; /* IP豸 */ - BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* ģͨǷãӵ͵߱ʾ1-32ͨ0ʾЧ 1Ч */ - NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IPͨ */ + DWORD dwSize; /* 结构大小 */ + NET_DVR_IPDEVINFO struIPDevInfo[MAX_IP_DEVICE]; /* IP设备 */ + BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* 模拟通道是否启用,从低到高表示1-32通道,0表示无效 1有效 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IP通道 */ }NET_DVR_IPPARACFG, *LPNET_DVR_IPPARACFG; -/* չIPýṹ */ +/* 扩展IP接入配置结构 */ typedef struct tagNET_DVR_IPPARACFG_V31 { - DWORD dwSize; /* ṹС */ - NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE]; /* IP豸 */ - BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* ģͨǷãӵ͵߱ʾ1-32ͨ0ʾЧ 1Ч */ - NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IPͨ */ + DWORD dwSize; /* 结构大小 */ + NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE]; /* IP设备 */ + BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* 模拟通道是否启用,从低到高表示1-32通道,0表示无效 1有效 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IP通道 */ }NET_DVR_IPPARACFG_V31, *LPNET_DVR_IPPARACFG_V31; typedef struct tagNET_DVR_IPSERVER_STREAM { - BYTE byEnable; // Ƿ - BYTE byRes[3]; // ֽ - NET_DVR_IPADDR struIPServer; //IPServer ַ - WORD wPort; //IPServer ˿ - WORD wDvrNameLen; // DVR Ƴ - BYTE byDVRName[NAME_LEN]; // DVR - WORD wDVRSerialLen; // кų - WORD byRes1[2]; // ֽ - BYTE byDVRSerialNumber[SERIALNO_LEN]; // DVRкų - BYTE byUserName[NAME_LEN]; // DVR ½û - BYTE byPassWord[PASSWD_LEN]; // DVR½ - BYTE byChannel; // DVR ͨ - BYTE byRes2[11]; // ֽ + BYTE byEnable; // 是否在线 + BYTE byRes[3]; // 保留字节 + NET_DVR_IPADDR struIPServer; //IPServer 地址 + WORD wPort; //IPServer 端口 + WORD wDvrNameLen; // DVR 名称长度 + BYTE byDVRName[NAME_LEN]; // DVR名称 + WORD wDVRSerialLen; // 序列号长度 + WORD byRes1[2]; // 保留字节 + BYTE byDVRSerialNumber[SERIALNO_LEN]; // DVR序列号长度 + BYTE byUserName[NAME_LEN]; // DVR 登陆用户名 + BYTE byPassWord[PASSWD_LEN]; // DVR登陆密码 + BYTE byChannel; // DVR 通道 + BYTE byRes2[11]; // 保留字节 }NET_DVR_IPSERVER_STREAM, *LPNET_DVR_IPSERVER_STREAM; -//ý +//流媒体服务器基本配置 typedef struct tagNET_DVR_STREAM_MEDIA_SERVER_CFG { - BYTE byValid; /*Ƿ*/ + BYTE byValid; /*是否可用*/ BYTE byRes1[3]; NET_DVR_IPADDR struDevIP; - WORD wDevPort; /*ý˿*/ - BYTE byTransmitType; /*Э 0-TCP1-UDP*/ + WORD wDevPort; /*流媒体服务器端口*/ + BYTE byTransmitType; /*传输协议类型 0-TCP,1-UDP*/ BYTE byRes2[69]; }NET_DVR_STREAM_MEDIA_SERVER_CFG,*LPNET_DVR_STREAM_MEDIA_SERVER_CFG; -//豸ͨϢ +//设备通道信息 typedef struct tagNET_DVR_DEV_CHAN_INFO { - NET_DVR_IPADDR struIP; //DVR IPַ - WORD wDVRPort; //˿ں - BYTE byChannel; //ͨ - BYTE byTransProtocol; //Э0-TCP1-UDP - BYTE byTransMode; //ģʽ 0 1 - BYTE byFactoryType; /*ǰ豸,ͨӿڻȡ*/ - BYTE byDeviceType; //豸(Ƶۺƽ̨ܰʹ)1-ʱƵۺƽ̨byVcaSupportChanModeֶʹýͨʾͨ2- - BYTE byDispChan;//ʾͨ,ʹ - BYTE bySubDispChan;//ʾͨͨţʱʹ - BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500wʹãݸòԴ + NET_DVR_IPADDR struIP; //DVR IP地址 + WORD wDVRPort; //端口号 + BYTE byChannel; //通道号 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byDeviceType; //设备类型(视频综合平台智能板使用),1-解码器(此时根据视频综合平台能力集中byVcaSupportChanMode字段来决定是使用解码通道还是显示通道),2-编码器 + BYTE byDispChan;//显示通道号,智能配置使用 + BYTE bySubDispChan;//显示通道子通道号,智能配置时使用 + BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500w大屏控制器使用,大屏控制器会根据该参数分配解码资源 BYTE byRes[2]; - BYTE byDomain[MAX_DOMAIN_NAME]; //豸 - BYTE sUserName[NAME_LEN]; //½ʺ - BYTE sPassword[PASSWD_LEN]; // + BYTE byDomain[MAX_DOMAIN_NAME]; //设备域名 + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 }NET_DVR_DEV_CHAN_INFO,*LPNET_DVR_DEV_CHAN_INFO; -//ֱͨýȡ +//直接通过流媒体取流 typedef struct tagNET_DVR_PU_STREAM_CFG { DWORD dwSize; @@ -11117,114 +11117,114 @@ typedef struct tagNET_DVR_PU_STREAM_CFG typedef struct tagNET_DVR_DDNS_STREAM_CFG { - BYTE byEnable; // Ƿ + BYTE byEnable; // 是否启用 BYTE byRes1[3]; - NET_DVR_IPADDR struStreamServer; //ýַ - WORD wStreamServerPort; //ý˿ - BYTE byStreamServerTransmitType; //ý崫Э 0-TCP1-UDP + NET_DVR_IPADDR struStreamServer; //流媒体服务器地址 + WORD wStreamServerPort; //流媒体服务器端口 + BYTE byStreamServerTransmitType; //流媒体传输协议类型 0-TCP,1-UDP BYTE byRes2; - NET_DVR_IPADDR struIPServer; //IPSERVERַ - WORD wIPServerPort; //IPserver˿ں + NET_DVR_IPADDR struIPServer; //IPSERVER地址 + WORD wIPServerPort; //IPserver端口号 BYTE byRes3[2]; - BYTE sDVRName[NAME_LEN]; //DVR - WORD wDVRNameLen; // DVRƳ - WORD wDVRSerialLen; // кų - BYTE sDVRSerialNumber[SERIALNO_LEN]; // DVRк - BYTE sUserName[NAME_LEN]; // DVR ½û - BYTE sPassWord[PASSWD_LEN]; // DVR½ - WORD wDVRPort; //DVR˿ں + BYTE sDVRName[NAME_LEN]; //DVR名称 + WORD wDVRNameLen; // DVR名称长度 + WORD wDVRSerialLen; // 序列号长度 + BYTE sDVRSerialNumber[SERIALNO_LEN]; // DVR序列号 + BYTE sUserName[NAME_LEN]; // DVR 登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // DVR登陆密码 + WORD wDVRPort; //DVR端口号 BYTE byRes4[2]; - BYTE byChannel; // DVR ͨ - BYTE byTransProtocol; //Э0-TCP1-UDP - BYTE byTransMode; //ģʽ 0 1 - BYTE byFactoryType; //ǰ豸,ͨӿڻȡ + BYTE byChannel; // DVR 通道 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; //前端设备厂家类型,通过接口获取 }NET_DVR_DDNS_STREAM_CFG, *LPNET_DVR_DDNS_STREAM_CFG; -#define URL_LEN 240 //URL +#define URL_LEN 240 //URL长度 typedef struct tagNET_DVR_PU_STREAM_URL { BYTE byEnable; BYTE strURL[URL_LEN]; - BYTE byTransPortocol ; // Э 0-tcp 1-UDP - WORD wIPID; //豸IDţwIPID = iDevInfoIndex + iGroupNO*64 +1 - BYTE byChannel; //ͨ + BYTE byTransPortocol ; // 传输协议类型 0-tcp 1-UDP + WORD wIPID; //设备ID号,wIPID = iDevInfoIndex + iGroupNO*64 +1 + BYTE byChannel; //通道号 BYTE byRes[7]; }NET_DVR_PU_STREAM_URL, *LPNET_DVR_PU_STREAM_URL; typedef struct tagNET_DVR_HKDDNS_STREAM { - BYTE byEnable; // Ƿ - BYTE byRes[3]; // ֽ - BYTE byDDNSDomain[64]; // hiDDNS - WORD wPort; // hiDDNS ˿ - WORD wAliasLen; // - BYTE byAlias[NAME_LEN]; // - WORD wDVRSerialLen; // кų - BYTE byRes1[2]; // ֽ - BYTE byDVRSerialNumber[SERIALNO_LEN]; // DVRк - BYTE byUserName[NAME_LEN]; // DVR ½û - BYTE byPassWord[PASSWD_LEN]; // DVR½ - BYTE byChannel; // DVRͨ - BYTE byRes2[11]; // + BYTE byEnable; // 是否在线 + BYTE byRes[3]; // 保留字节 + BYTE byDDNSDomain[64]; // hiDDNS服务器 + WORD wPort; // hiDDNS 端口 + WORD wAliasLen; // 别名长度 + BYTE byAlias[NAME_LEN]; // 别名 + WORD wDVRSerialLen; // 序列号长度 + BYTE byRes1[2]; // 保留字节 + BYTE byDVRSerialNumber[SERIALNO_LEN]; // DVR序列号 + BYTE byUserName[NAME_LEN]; // DVR 登陆用户名 + BYTE byPassWord[PASSWD_LEN]; // DVR登陆密码 + BYTE byChannel; // DVR通道 + BYTE byRes2[11]; // 保留字 }NET_DVR_HKDDNS_STREAM, *LPNET_DVR_HKDDNS_STREAM; typedef struct tagNET_DVR_IPCHANINFO_V40 { - BYTE byEnable; /* ͨǷ */ + BYTE byEnable; /* 该通道是否在线 */ BYTE byRes1; - WORD wIPID; //IP豸ID - DWORD dwChannel; //ͨ - BYTE byTransProtocol; //Э0-TCP1-UDP2- ಥ3-RTSP0xff- auto(Զ) - BYTE byTransMode; //ģʽ 0 1 - BYTE byFactoryType; /*ǰ豸,ͨӿڻȡ*/ + WORD wIPID; //IP设备ID + DWORD dwChannel; //通道号 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP,2- 多播,3-RTSP,0xff- auto(自动) + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ BYTE byRes; - BYTE strURL[URL_LEN/*240*/]; /*RTSPЭȡURL RTSPЭʱЧ*/ + BYTE strURL[URL_LEN/*240*/]; /*RTSP协议取流URL (仅RTSP协议时有效)*/ }NET_DVR_IPCHANINFO_V40,*LPNET_DVR_IPCHANINFO_V40; -// ŵCVR +// 邦诺CVR #define MAX_ID_COUNT 256 #define MAX_STREAM_ID_COUNT 1024 #define STREAM_ID_LEN 32 #define PLAN_ID_LEN 32 #define DEVICE_NO_LEN 24 -#define MAX_VOLUMENAME_LEN 32 //¼ -#define MAX_VAG_CHANNO_LEN 32 //VAGЭȡʱͨű볤 +#define MAX_VOLUMENAME_LEN 32 //录像卷名称 +#define MAX_VAG_CHANNO_LEN 32 //VAG协议取流时通道号编码长度 -#define MAX_STREAM_ID_NUM 30 //IDĿ +#define MAX_STREAM_ID_NUM 30 //最大流ID数目 -// Ϣ - 72ֽڳ +// 流信息 - 72字节长 typedef struct tagNET_DVR_STREAM_INFO { DWORD dwSize; - BYTE byID[STREAM_ID_LEN]; //ID - DWORD dwChannel; //豸ͨ0xffffffffʱʾ - BYTE byRes[32]; // + BYTE byID[STREAM_ID_LEN]; //ID数据 + DWORD dwChannel; //关联设备通道,等于0xffffffff时,表示不关联 + BYTE byRes[32]; //保留 }NET_DVR_STREAM_INFO, *LPNET_DVR_STREAM_INFO; typedef struct tagNET_DVR_RTSP_PROTOCAL_CFG { BYTE byEnable; - BYTE byLocalBackUp; //Ƿ񱾵ر + BYTE byLocalBackUp; //是否本地备份 BYTE byRes[2]; BYTE strURL[URL_LEN_V40]; - DWORD dwProtocalType; //Э - BYTE sUserName[NAME_LEN]; //豸½û - BYTE sPassWord[PASSWD_LEN]; // 豸½ - BYTE byAddress[MAX_DOMAIN_NAME]; //ǰIP,Ҫ豸 - //ʽΪĸ'.'Ϊ,ΪIPַ + DWORD dwProtocalType; //协议类型 + BYTE sUserName[NAME_LEN]; //设备登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // 设备登陆密码 + BYTE byAddress[MAX_DOMAIN_NAME]; //前端IP或者域名,需要设备解析 + //解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 WORD wPort; - BYTE byRes1[122]; // + BYTE byRes1[122]; //保留 }NET_DVR_RTSP_PROTOCAL_CFG, *LPNET_DVR_RTSP_PROTOCAL_CFG; typedef union tagNET_DVR_GET_STREAM_UNION { - NET_DVR_IPCHANINFO struChanInfo; /*IPͨϢ*/ - NET_DVR_IPSERVER_STREAM struIPServerStream; // IPServerȥ - NET_DVR_PU_STREAM_CFG struPUStream; // ͨǰ豸ȡýȥ - NET_DVR_DDNS_STREAM_CFG struDDNSStream; //ͨIPServerýȡ - NET_DVR_PU_STREAM_URL struStreamUrl; //ͨý嵽urlȡ - NET_DVR_HKDDNS_STREAM struHkDDNSStream; //ͨhiDDNSȥȡ - NET_DVR_IPCHANINFO_V40 struIPChan; //ֱӴ豸ȡչ + NET_DVR_IPCHANINFO struChanInfo; /*IP通道信息*/ + NET_DVR_IPSERVER_STREAM struIPServerStream; // IPServer去流 + NET_DVR_PU_STREAM_CFG struPUStream; // 通过前端设备获取流媒体去流 + NET_DVR_DDNS_STREAM_CFG struDDNSStream; //通过IPServer和流媒体取流 + NET_DVR_PU_STREAM_URL struStreamUrl; //通过流媒体到url取流 + NET_DVR_HKDDNS_STREAM struHkDDNSStream; //通过hiDDNS去取流 + NET_DVR_IPCHANINFO_V40 struIPChan; //直接从设备取流(扩展) }NET_DVR_GET_STREAM_UNION, *LPNET_DVR_GET_STREAM_UNION; typedef enum @@ -11242,767 +11242,767 @@ typedef enum typedef struct tagNET_DVR_STREAM_MODE { - BYTE byGetStreamType; //ȡʽGET_STREAM_TYPE0-ֱӴ豸ȡ1-ýȡ2-ͨIPServeripַȡ,3.ͨIPServerҵ豸ͨýȥ豸 - //4-ͨýURLȥȡ,5-ͨhkDDNSȡ6-ֱӴ豸ȡ(չ)ʹNET_DVR_IPCHANINFO_V40ṹ, 7-ͨRTSPЭ鷽ʽȡ - BYTE byRes[3]; //ֽ - NET_DVR_GET_STREAM_UNION uGetStream; // ͬȡʽṹ + BYTE byGetStreamType; //取流方式GET_STREAM_TYPE,0-直接从设备取流,1-从流媒体取流、2-通过IPServer获得ip地址后取流,3.通过IPServer找到设备,再通过流媒体去设备的流 + //4-通过流媒体由URL去取流,5-通过hkDDNS取流,6-直接从设备取流(扩展),使用NET_DVR_IPCHANINFO_V40结构, 7-通过RTSP协议方式进行取流 + BYTE byRes[3]; //保留字节 + NET_DVR_GET_STREAM_UNION uGetStream; // 不同取流方式结构体 }NET_DVR_STREAM_MODE, *LPNET_DVR_STREAM_MODE; -//չIP豸 +//扩展IP接入配置设备 typedef struct tagNET_DVR_IPPARACFG_V40 { - DWORD dwSize; /* ṹС */ - DWORD dwGroupNum; // 豸ֵ֧ - DWORD dwAChanNum; //ģͨ - DWORD dwDChanNum; //ͨ - DWORD dwStartDChan; //ʼͨ - BYTE byAnalogChanEnable[MAX_CHANNUM_V30]; /* ģͨǷãӵ͵߱ʾ1-64ͨ0ʾЧ 1Ч */ - NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE_V40]; /* IP豸 */ + DWORD dwSize; /* 结构大小 */ + DWORD dwGroupNum; // 设备支持的总组数 + DWORD dwAChanNum; //最大模拟通道个数 + DWORD dwDChanNum; //数字通道个数 + DWORD dwStartDChan; //起始数字通道 + BYTE byAnalogChanEnable[MAX_CHANNUM_V30]; /* 模拟通道是否启用,从低到高表示1-64通道,0表示无效 1有效 */ + NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE_V40]; /* IP设备 */ NET_DVR_STREAM_MODE struStreamMode[MAX_CHANNUM_V30]; - BYTE byRes2[20]; // ֽ + BYTE byRes2[20]; // 保留字节 }NET_DVR_IPPARACFG_V40, *LPNET_DVR_IPPARACFG_V40; -//ΪCVRչı +//为CVR扩展的报警类型 typedef struct tagNET_DVR_ALARMINFO_DEV { - DWORD dwAlarmType; //0-(ͨ)ź1-˽о𻵣2- NVR˳ - //3-״̬쳣4-ϵͳʱ쳣5-¼ʣͣ - //6-(ͨ)ƶⱨ7-(ͨ)ڵ8-¼ʧ; 9-Ƶʵʱʾ; 10-Դʹʸ澯; 11- CVRԶ޸쳣 12-¼쳣 - NET_DVR_TIME struTime; //ʱ - BYTE byRes[32]; // - DWORD dwNumber; //Ŀ - WORD *pNO; //dwNumberWORD; ÿWORDʾһͨţߴ̺, ЧʱΪ0 + DWORD dwAlarmType; //0-编码器(通道)信号量报警;1-私有卷二损坏;2- NVR服务退出; + //3-编码器状态异常;4-系统时钟异常;5-录像卷剩余容量过低; + //6-编码器(通道)移动侦测报警;7-编码器(通道)遮挡报警。;8-录像丢失报警; 9-视频实时显示报警; 10-资源使用率告警; 11- CVR自动修复异常, 12-录像异常 + NET_DVR_TIME struTime; //报警时间 + BYTE byRes[32]; //保留 + DWORD dwNumber; //数目 + WORD *pNO; //dwNumber个WORD; 每个WORD表示一个通道号,或者磁盘号, 无效时为0 }NET_DVR_ALARMINFO_DEV, *LPNET_DVR_ALARMINFO_DEV; -/* */ +/* 报警输出参数 */ typedef struct { - BYTE byIPID; /* IP豸IDȡֵ1- MAX_IP_DEVICE */ - BYTE byAlarmOut; /* */ - BYTE byRes[18]; /* */ + BYTE byIPID; /* IP设备ID取值1- MAX_IP_DEVICE */ + BYTE byAlarmOut; /* 报警输出号 */ + BYTE byRes[18]; /* 保留 */ }NET_DVR_IPALARMOUTINFO, *LPNET_DVR_IPALARMOUTINFO; -/* IPýṹ */ +/* IP报警输出配置结构 */ typedef struct { - DWORD dwSize; /* ṹС */ - NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT];/* IP */ + DWORD dwSize; /* 结构大小 */ + NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT];/* IP报警输出 */ }NET_DVR_IPALARMOUTCFG, *LPNET_DVR_IPALARMOUTCFG; -/* IP */ +/* IP报警输出参数 */ typedef struct tagNET_DVR_IPALARMOUTINFO_V40 { - DWORD dwIPID; /* IP豸ID */ - DWORD dwAlarmOut; /* IP豸IDӦı */ - BYTE byRes[32]; /* */ -}NET_DVR_IPALARMOUTINFO_V40, *LPNET_DVR_IPALARMOUTINFO_V40;/**/ + DWORD dwIPID; /* IP设备ID */ + DWORD dwAlarmOut; /* IP设备ID对应的报警输出号 */ + BYTE byRes[32]; /* 保留 */ +}NET_DVR_IPALARMOUTINFO_V40, *LPNET_DVR_IPALARMOUTINFO_V40;/*报警输出参数*/ typedef struct tagNET_DVR_IPALARMOUTCFG_V40 { - DWORD dwSize; //ṹ峤 + DWORD dwSize; //结构体长度 DWORD dwCurIPAlarmOutNum; - NET_DVR_IPALARMOUTINFO_V40 struIPAlarmOutInfo[MAX_IP_ALARMOUT_V40];/*IP*/ + NET_DVR_IPALARMOUTINFO_V40 struIPAlarmOutInfo[MAX_IP_ALARMOUT_V40];/*IP报警输出*/ BYTE byRes[256]; -}NET_DVR_IPALARMOUTCFG_V40, *LPNET_DVR_IPALARMOUTCFG_V40; /*IP*/ +}NET_DVR_IPALARMOUTCFG_V40, *LPNET_DVR_IPALARMOUTCFG_V40; /*IP报警输出*/ -/* */ +/* 报警输入参数 */ typedef struct { - BYTE byIPID; /* IP豸IDȡֵ1- MAX_IP_DEVICE */ - BYTE byAlarmIn; /* */ - BYTE byRes[18]; /* */ + BYTE byIPID; /* IP设备ID取值1- MAX_IP_DEVICE */ + BYTE byAlarmIn; /* 报警输入号 */ + BYTE byRes[18]; /* 保留 */ }NET_DVR_IPALARMININFO, *LPNET_DVR_IPALARMININFO; -/* IPýṹ */ +/* IP报警输入配置结构 */ typedef struct { - DWORD dwSize; /* ṹС */ - NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN];/* IP */ + DWORD dwSize; /* 结构大小 */ + NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN];/* IP报警输入 */ }NET_DVR_IPALARMINCFG, *LPNET_DVR_IPALARMINCFG; -/* IP */ +/* IP报警输入参数 */ typedef struct tagNET_DVR_IPALARMININFO_V40 { - DWORD dwIPID; /* IP豸ID */ - DWORD dwAlarmIn; /* IP豸IDӦı */ - BYTE byRes[32]; /* */ -}NET_DVR_IPALARMININFO_V40, *LPNET_DVR_IPALARMININFO_V40; /* */ + DWORD dwIPID; /* IP设备ID */ + DWORD dwAlarmIn; /* IP设备ID对应的报警输入号 */ + BYTE byRes[32]; /* 保留 */ +}NET_DVR_IPALARMININFO_V40, *LPNET_DVR_IPALARMININFO_V40; /* 报警输入参数 */ typedef struct tagNET_DVR_IPALARMINCFG_V40 { - DWORD dwSize; //ṹ峤 - DWORD dwCurIPAlarmInNum; //ǰ - NET_DVR_IPALARMININFO_V40 struIPAlarmInInfo[MAX_IP_ALARMIN_V40];/* IP*/ + DWORD dwSize; //结构体长度 + DWORD dwCurIPAlarmInNum; //当前报警输入口数 + NET_DVR_IPALARMININFO_V40 struIPAlarmInInfo[MAX_IP_ALARMIN_V40];/* IP报警输入*/ BYTE byRes[256]; -}NET_DVR_IPALARMINCFG_V40, *LPNET_DVR_IPALARMINCFG_V40; /*IPԴ*/ +}NET_DVR_IPALARMINCFG_V40, *LPNET_DVR_IPALARMINCFG_V40; /*IP报警输入资源*/ //ipc alarm info typedef struct tagNET_DVR_IPALARMINFO { - NET_DVR_IPDEVINFO struIPDevInfo[MAX_IP_DEVICE]; /* IP豸 */ - BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* ģͨǷã0-δ 1- */ - NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IPͨ */ - NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP */ - NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP */ + NET_DVR_IPDEVINFO struIPDevInfo[MAX_IP_DEVICE]; /* IP设备 */ + BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* 模拟通道是否启用,0-未启用 1-启用 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IP通道 */ + NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP报警输入 */ + NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP报警输出 */ }NET_DVR_IPALARMINFO, *LPNET_DVR_IPALARMINFO; -//ipcøı䱨Ϣչ 9000_1.1 +//ipc配置改变报警信息扩展 9000_1.1 typedef struct tagNET_DVR_IPALARMINFO_V31 { - NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE]; /* IP豸 */ - BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* ģͨǷã0-δ 1- */ - NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IPͨ */ - NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP */ - NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP */ + NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE]; /* IP设备 */ + BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* 模拟通道是否启用,0-未启用 1-启用 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IP通道 */ + NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP报警输入 */ + NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP报警输出 */ }NET_DVR_IPALARMINFO_V31, *LPNET_DVR_IPALARMINFO_V31; typedef struct tagNET_DVR_IPALARMINFO_V40 { - NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE_V40]; // IP豸 - BYTE byAnalogChanEnable[MAX_CHANNUM_V30]; /* ģͨǷã0-δ 1- */ - NET_DVR_IPCHANINFO struIPChanInfo[MAX_CHANNUM_V30]; /* IPͨ */ - NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP */ - NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP */ - BYTE byRes[20]; // ֽ + NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE_V40]; // IP设备 + BYTE byAnalogChanEnable[MAX_CHANNUM_V30]; /* 模拟通道是否启用,0-未启用 1-启用 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_CHANNUM_V30]; /* IP通道 */ + NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP报警输入 */ + NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP报警输出 */ + BYTE byRes[20]; // 保留字节 }NET_DVR_IPALARMINFO_V40, *LPNET_DVR_IPALARMINFO_V40; typedef enum _HD_STAT_ { - HD_STAT_OK = 0, /* */ - HD_STAT_UNFORMATTED = 1, /* δʽ */ - HD_STAT_ERROR = 2, /* */ - HD_STAT_SMART_FAILED = 3, /* SMART״̬ */ - HD_STAT_MISMATCH = 4, /* ƥ */ - HD_STAT_IDLE = 5, /* */ - NET_HD_STAT_OFFLINE = 6, /* ̴δ״̬ */ - HD_RIADVD_EXPAND = 7, /* ̿ */ - HD_STAT_REPARING = 10, /* Ӳ޸(9000 2.0) */ - HD_STAT_FORMATING = 11, /* Ӳڸʽ(9000 2.0) */ + HD_STAT_OK = 0, /* 正常 */ + HD_STAT_UNFORMATTED = 1, /* 未格式化 */ + HD_STAT_ERROR = 2, /* 错误 */ + HD_STAT_SMART_FAILED = 3, /* SMART状态 */ + HD_STAT_MISMATCH = 4, /* 不匹配 */ + HD_STAT_IDLE = 5, /* 休眠*/ + NET_HD_STAT_OFFLINE = 6, /* 网络盘处于未连接状态 */ + HD_RIADVD_EXPAND = 7, /* 虚拟磁盘可扩容 */ + HD_STAT_REPARING = 10, /* 硬盘正在修复(9000 2.0) */ + HD_STAT_FORMATING = 11, /* 硬盘正在格式化(9000 2.0) */ }HD_STAT; -//ӲϢ +//本地硬盘信息配置 typedef struct { - DWORD dwHDNo; /*Ӳ̺, ȡֵ0~MAX_DISKNUM_V30-1*/ - DWORD dwCapacity; /*Ӳ()*/ - DWORD dwFreeSpace; /*Ӳʣռ()*/ - DWORD dwHdStatus; //Ӳ״̬() HD_STAT 0-, 1-δʽ, 2-, 3-SMART״̬, - //4-ƥ, 5- 6-Ӳ̲ 7-̿ 10-Ӳ޸ - //11-Ӳڸʽ 12-Ӳڵȴʽ 13-Ӳж 14-Ӳ̲ - //15-ɾ(Ӳ),16- - BYTE byHDAttr; /*0-ͨ, 1-; 2-ֻ 3-浵CVRרã4-ɶд*/ - BYTE byHDType; /*0-Ӳ,1-ESATAӲ,2-NASӲ,3-iSCSIӲ 4-Array,5-SD,6-minSAS*/ - BYTE byDiskDriver; // ֵ ASCIIַ + DWORD dwHDNo; /*硬盘号, 取值0~MAX_DISKNUM_V30-1*/ + DWORD dwCapacity; /*硬盘容量(不可设置)*/ + DWORD dwFreeSpace; /*硬盘剩余空间(不可设置)*/ + DWORD dwHdStatus; //硬盘状态(不可设置) HD_STAT 0-正常, 1-未格式化, 2-错误, 3-SMART状态, + //4-不匹配, 5-休眠 6-网络硬盘不在线 7-虚拟磁盘可扩容 10-硬盘正在修复 + //11-硬盘正在格式化 12-硬盘正在等待格式化 13-硬盘已卸载 14-本地硬盘不存在 + //15-正在删除(网络硬盘),16-已锁定 + BYTE byHDAttr; /*0-普通, 1-冗余; 2-只读 3-存档(CVR专用),4-不可读写*/ + BYTE byHDType; /*0-本地硬盘,1-ESATA硬盘,2-NAS硬盘,3-iSCSI硬盘 4-Array虚拟磁盘,5-SD卡,6-minSAS*/ + BYTE byDiskDriver; // 值 代表其ASCII字符 BYTE byRes1; - DWORD dwHdGroup; /*ĸ 1-MAX_HD_GROUP*/ - BYTE byRecycling; // Ƿѭ 0ѭã1ѭ - BYTE bySupportFormatType; /*ǰӲֵ֧ĸʽ,ֻǰýڵ֧byHDType=5(SD)ʱ; - bySupportFormatType=0,豸ĬʽӲ; - bySupportFormatType:bit0: 0-֧FAT32ʽ,1-֧; - bySupportFormatType:bit1: 0-֧EXT4ʽ,1-֧;*/ - BYTE byFormatType; /*ǰӲ̸ʽ: 0-豸Ĭϸʽ,1-ָFAT32ʽ(byHDType=5(SD)ʱЧ), - 2-ָEXT4ʽ(byHDType=5(SD)ʱЧ)*/ + DWORD dwHdGroup; /*属于哪个盘组 1-MAX_HD_GROUP*/ + BYTE byRecycling; // 是否循环利用 0:不循环利用,1:循环利用 + BYTE bySupportFormatType; /*当前硬盘所支持的格式化类型,只读。当前该节点仅支持byHDType=5(SD卡)时; + 若bySupportFormatType=0,则代表设备将以自身的默认类型来格式化硬盘; + bySupportFormatType:bit0: 0-代表不支持FAT32格式化类型,1-代表支持; + bySupportFormatType:bit1: 0-代表不支持EXT4格式化类型,1-代表支持;*/ + BYTE byFormatType; /*当前硬盘格式化类型配置: 0-设备默认格式化类型,1-指定FAT32格式化(byHDType=5(SD卡)时生效), + 2-指定EXT4格式化(byHDType=5(SD卡)时生效)*/ BYTE byRes2; - DWORD dwStorageType; //λʾ 0-֧ 0-֧ - // dwStorageType & 0x1 ʾǷͨ¼רô洢 - // dwStorageType & 0x2 ʾǷdz֡¼רô洢 - // dwStorageType & 0x4 ʾǷͼƬ¼רô洢 + DWORD dwStorageType; //按位表示 0-不支持 非0-支持 + // dwStorageType & 0x1 表示是否是普通录像专用存储盘 + // dwStorageType & 0x2 表示是否是抽帧录像专用存储盘 + // dwStorageType & 0x4 表示是否是图片录像专用存储盘 - DWORD dwPictureCapacity; //ӲͼƬ()λ:MB - DWORD dwFreePictureSpace; //ʣͼƬռ()λ:MB + DWORD dwPictureCapacity; //硬盘图片容量(不可设置),单位:MB + DWORD dwFreePictureSpace; //剩余图片空间(不可设置),单位:MB BYTE byRes3[104]; }NET_DVR_SINGLE_HD, *LPNET_DVR_SINGLE_HD; typedef struct { DWORD dwSize; - DWORD dwHDCount; /*Ӳ()*/ - NET_DVR_SINGLE_HD struHDInfo[MAX_DISKNUM_V30];//ӲزҪЧ + DWORD dwHDCount; /*硬盘数(不可设置)*/ + NET_DVR_SINGLE_HD struHDInfo[MAX_DISKNUM_V30];//硬盘相关操作都需要重启才能生效; }NET_DVR_HDCFG, *LPNET_DVR_HDCFG; -//ӲϢ +//本地硬盘信息配置 typedef struct { - DWORD dwHDNo; /*Ӳ̺, ȡֵ0~MAX_DISKNUM_V30-1*/ - DWORD dwCapacity; /*Ӳ()*/ - DWORD dwFreeSpace; /*Ӳʣռ()*/ - DWORD dwHdStatus; //Ӳ״̬() HD_STAT 0-, 1-δʽ, 2-, 3-SMART״̬, - //4-ƥ, 5- 6-Ӳ̲ 7-̿ 10-Ӳ޸ - //11-Ӳڸʽ 12-Ӳڵȴʽ 13-Ӳж 14-Ӳ̲ - //15-ɾ(Ӳ),16-,17-棨ʱɻ̣,18-̣Ѿ𻵵Ӳ̣,19-̣쳣߳Уֻ,20-δ֤δ⣬ҪCVRжԴ̽м⣩ - //21-δ¼иʽ - BYTE byHDAttr; /*0-ͨ, 1-; 2-ֻ3-浵4-ɶд*/ - BYTE byHDType; /*0-Ӳ,1-ESATAӲ,2-NASӲ,3-iSCSIӲ 4-Array,5-SD,6-minSAS*/ - BYTE byDiskDriver; // ֵ ASCIIַ - BYTE byGenusGruop; //飺0-1-У2-洢أ3-̣4-δʼ5-Ч̣6-ȱ7-ȫȱֻ - DWORD dwHdGroup; /*ĸ 1-MAX_HD_GROUP*/ - BYTE byRecycling; // Ƿѭ 0ѭã1ѭ - BYTE bySupportFormatType; /*ǰӲֵ֧ĸʽ,ֻǰýڵ֧byHDType=5(SD)ʱ; - bySupportFormatType=0,豸ĬʽӲ; - bySupportFormatType:bit0: 0-֧FAT32ʽ,1-֧; - bySupportFormatType:bit1: 0-֧EXT4ʽ,1-֧;*/ - BYTE byFormatType; /*ǰӲ̸ʽ: 0-豸Ĭϸʽ,1-ָFAT32ʽ(byHDType=5(SD)ʱЧ), - 2-ָEXT4ʽ(byHDType=5(SD)ʱЧ)*/ + DWORD dwHDNo; /*硬盘号, 取值0~MAX_DISKNUM_V30-1*/ + DWORD dwCapacity; /*硬盘容量(不可设置)*/ + DWORD dwFreeSpace; /*硬盘剩余空间(不可设置)*/ + DWORD dwHdStatus; //硬盘状态(不可设置) HD_STAT 0-正常, 1-未格式化, 2-错误, 3-SMART状态, + //4-不匹配, 5-休眠 6-网络硬盘不在线 7-虚拟磁盘可扩容 10-硬盘正在修复 + //11-硬盘正在格式化 12-硬盘正在等待格式化 13-硬盘已卸载 14-本地硬盘不存在 + //15-正在删除(网络硬盘),16-已锁定,17-警告(随时会变成坏盘),18-坏盘(已经损坏的硬盘),19-隐患盘(出现异常被踢出阵列,比如出现坏扇区),20-未认证(未检测,需要到CVR中对磁盘进行检测) + //21-未在录播主机中格式化 + BYTE byHDAttr; /*0-普通, 1-冗余; 2-只读,3-存档,4-不可读写*/ + BYTE byHDType; /*0-本地硬盘,1-ESATA硬盘,2-NAS硬盘,3-iSCSI硬盘 4-Array虚拟磁盘,5-SD卡,6-minSAS*/ + BYTE byDiskDriver; // 值 代表其ASCII字符 + BYTE byGenusGruop; //属组:0-保留,1-阵列,2-存储池,3-阵列踢盘,4-未初始化,5-无效盘,6-区域热备,7-全局热备,只读 + DWORD dwHdGroup; /*属于哪个盘组 1-MAX_HD_GROUP*/ + BYTE byRecycling; // 是否循环利用 0:不循环利用,1:循环利用 + BYTE bySupportFormatType; /*当前硬盘所支持的格式化类型,只读。当前该节点仅支持byHDType=5(SD卡)时; + 若bySupportFormatType=0,则代表设备将以自身的默认类型来格式化硬盘; + bySupportFormatType:bit0: 0-代表不支持FAT32格式化类型,1-代表支持; + bySupportFormatType:bit1: 0-代表不支持EXT4格式化类型,1-代表支持;*/ + BYTE byFormatType; /*当前硬盘格式化类型配置: 0-设备默认格式化类型,1-指定FAT32格式化(byHDType=5(SD卡)时生效), + 2-指定EXT4格式化(byHDType=5(SD卡)时生效)*/ BYTE byRes2; - DWORD dwStorageType; //λʾ 0-֧ 0-֧ - // dwStorageType & 0x1 ʾǷͨ¼רô洢 - // dwStorageType & 0x2 ʾǷdz֡¼רô洢 - // dwStorageType & 0x4 ʾǷͼƬ¼רô洢 + DWORD dwStorageType; //按位表示 0-不支持 非0-支持 + // dwStorageType & 0x1 表示是否是普通录像专用存储盘 + // dwStorageType & 0x2 表示是否是抽帧录像专用存储盘 + // dwStorageType & 0x4 表示是否是图片录像专用存储盘 - DWORD dwPictureCapacity; //ӲͼƬ()λ:MB - DWORD dwFreePictureSpace; //ʣͼƬռ()λ:MB - BYTE byDiskLocation[NET_SDK_DISK_LOCATION_LEN/*16*/];//Ӳλãʽעֻ - BYTE bySupplierName[NET_SDK_SUPPLIER_NAME_LEN/*32*/];//Ӧƣֻ - BYTE byDiskModel[NET_SDK_DISK_MODEL_LEN /*64*/];//Ӳͺţֻ - char szHDLocateIP[SDK_MAX_IP_LEN];//IPϢ + DWORD dwPictureCapacity; //硬盘图片容量(不可设置),单位:MB + DWORD dwFreePictureSpace; //剩余图片空间(不可设置),单位:MB + BYTE byDiskLocation[NET_SDK_DISK_LOCATION_LEN/*16*/];//硬盘位置,具体格式见备注,只读 + BYTE bySupplierName[NET_SDK_SUPPLIER_NAME_LEN/*32*/];//供应商名称,只读 + BYTE byDiskModel[NET_SDK_DISK_MODEL_LEN /*64*/];//硬盘型号,只读 + char szHDLocateIP[SDK_MAX_IP_LEN];//磁盘所在IP信息 BYTE byRes3[80]; }NET_DVR_SINGLE_HD_V50, *LPNET_DVR_SINGLE_HD_V50; typedef struct { DWORD dwSize; - DWORD dwHDCount; /*Ӳ()*/ - NET_DVR_SINGLE_HD_V50 struHDInfoV50[MAX_DISKNUM_V30];//ӲزҪЧ + DWORD dwHDCount; /*硬盘数(不可设置)*/ + NET_DVR_SINGLE_HD_V50 struHDInfoV50[MAX_DISKNUM_V30];//硬盘相关操作都需要重启才能生效; BYTE byRes[128]; }NET_DVR_HDCFG_V50, *LPNET_DVR_HDCFG_V50; typedef struct tagNET_DVR_HARD_DISK_SINGLE_VOLUME_INFO { DWORD dwSize; - BYTE byHDVolumeNo; /*Ӳ̾ID()*/ - BYTE byType; /*Ӳ̾:0-¼ڱ¼񣩣1-浵ڴ浵¼·¼ƻʱܹ浵, - 2-ļֻڴ洢ͻϴļ·¼ƻʱܹļҪ˵3-ͼƬֻڴ洢ͻϴͼƬ*/ + BYTE byHDVolumeNo; /*硬盘卷ID(不可设置)*/ + BYTE byType; /*硬盘卷类型:0-录像卷(用于保存录像),1-存档卷(用于存档录像,下发录像计划时,不能关联存档卷), + 2-文件卷(只用于存储客户端上传的文件,下发录像计划时,不能关联文件卷,需要过滤掉)3-图片卷(只用于存储客户端上传的图片)*/ BYTE byRes1[2]; - DWORD dwCapacity; /*Ӳ̾λMB()*/ - DWORD dwFreeSpace; /*Ӳ̾ʣռ䣬λMB() */ - BYTE byHDVolumeName[NET_SDK_DISK_VOLUME_LEN/*36*/]; /*Ӳ̾()*/ - BYTE byLoopCover; /*Ƿѭǣ0-ѭǣ1-ѭǣӲ֮̾ѭϵ¼*/ + DWORD dwCapacity; /*硬盘卷容量,单位MB(不可设置)*/ + DWORD dwFreeSpace; /*硬盘卷剩余空间,单位MB(不可设置) */ + BYTE byHDVolumeName[NET_SDK_DISK_VOLUME_LEN/*36*/]; /*硬盘卷名称(不可设置)*/ + BYTE byLoopCover; /*是否循环覆盖:0-非循环覆盖,1-循环覆盖(硬盘卷满了之后,循环覆盖最老的录像)*/ BYTE byRes[63]; }NET_DVR_HARD_DISK_SINGLE_VOLUME_INFO, *LPNET_DVR_HARD_DISK_SINGLE_VOLUME_INFO; typedef struct tagNET_DVR_HARD_DISK_VOLUME_INFO { DWORD dwSize; - DWORD dwHDVolumeCount; /*ǰӲ̾()*/ - NET_DVR_HARD_DISK_SINGLE_VOLUME_INFO struSingleVolumeInfo[NET_SDK_MAX_DISK_VOLUME/*33*/]; /*Ӳ̾Ϣ*/ + DWORD dwHDVolumeCount; /*当前硬盘卷总数(不可设置)*/ + NET_DVR_HARD_DISK_SINGLE_VOLUME_INFO struSingleVolumeInfo[NET_SDK_MAX_DISK_VOLUME/*33*/]; /*单个硬盘卷信息*/ BYTE byRes[128]; }NET_DVR_HARD_DISK_VOLUME_INFO, *LPNET_DVR_HARD_DISK_VOLUME_INFO; -//Ϣչ +//本地盘组信息配置扩展 typedef struct tagNET_DVR_SINGLE_HDGROUP_V40 { - DWORD dwHDGroupNo; /*() 1-MAX_HD_GROUP*/ - DWORD dwRelRecordChan[MAX_CHANNUM_V40]; //¼ֵͨʾ0xffffffffʱΪЧ - BYTE byRes[64]; /* */ + DWORD dwHDGroupNo; /*盘组号(不可设置) 1-MAX_HD_GROUP*/ + DWORD dwRelRecordChan[MAX_CHANNUM_V40]; //触发的录像通道,按值表示,遇到0xffffffff时后续视为无效 + BYTE byRes[64]; /* 保留 */ }NET_DVR_SINGLE_HDGROUP_V40, *LPNET_DVR_SINGLE_HDGROUP_V40; typedef struct tagNET_DVR_HDGROUP_CFG_V40 { - DWORD dwSize; //ṹС - DWORD dwMaxHDGroupNum; //豸ֵ֧-ֻ - DWORD dwCurHDGroupNum; /*ǰõ*/ - NET_DVR_SINGLE_HDGROUP_V40 struHDGroupAttr[MAX_HD_GROUP]; //ӲزҪЧ - BYTE byRes[128]; // + DWORD dwSize; //结构体大小 + DWORD dwMaxHDGroupNum; //设备支持的最大盘组数-只读 + DWORD dwCurHDGroupNum; /*当前配置的盘组数*/ + NET_DVR_SINGLE_HDGROUP_V40 struHDGroupAttr[MAX_HD_GROUP]; //硬盘相关操作都需要重启才能生效; + BYTE byRes[128]; //保留 }NET_DVR_HDGROUP_CFG_V40, *LPNET_DVR_HDGROUP_CFG_V40; -//Ϣ +//本地盘组信息配置 typedef struct { - DWORD dwHDGroupNo; /*() 1-MAX_HD_GROUP*/ - BYTE byHDGroupChans[MAX_CHANNUM_V30]; /*Ӧ¼ͨ, 0-ʾͨ¼󵽸飬1-ʾ¼󵽸*/ + DWORD dwHDGroupNo; /*盘组号(不可设置) 1-MAX_HD_GROUP*/ + BYTE byHDGroupChans[MAX_CHANNUM_V30]; /*盘组对应的录像通道, 0-表示该通道不录象到该盘组,1-表示录象到该盘组*/ BYTE byRes[8]; }NET_DVR_SINGLE_HDGROUP, *LPNET_DVR_SINGLE_HDGROUP; typedef struct { DWORD dwSize; - DWORD dwHDGroupCount; /*()*/ - NET_DVR_SINGLE_HDGROUP struHDGroupAttr[MAX_HD_GROUP];//ӲزҪЧ + DWORD dwHDGroupCount; /*盘组总数(不可设置)*/ + NET_DVR_SINGLE_HDGROUP struHDGroupAttr[MAX_HD_GROUP];//硬盘相关操作都需要重启才能生效; }NET_DVR_HDGROUP_CFG, *LPNET_DVR_HDGROUP_CFG; -//ŲĽṹ +//配置缩放参数的结构 typedef struct { DWORD dwSize; - DWORD dwMajorScale; /* ʾ 0-ţ1-*/ - DWORD dwMinorScale; /* ʾ 0-ţ1-*/ + DWORD dwMajorScale; /* 主显示 0-不缩放,1-缩放*/ + DWORD dwMinorScale; /* 辅显示 0-不缩放,1-缩放*/ DWORD dwRes[2]; }NET_DVR_SCALECFG, *LPNET_DVR_SCALECFG; -//DVR(9000չ) +//DVR报警输出(9000扩展) typedef struct { DWORD dwSize; - BYTE sAlarmOutName[NAME_LEN]; /* */ - DWORD dwAlarmOutDelay; /* ʱ(-1Ϊޣֶر) */ - //0-5,1-10,2-30,3-1,4-2,5-5,6-10,7-ֶ,8-1,9-2,10-3,11-4 - NET_DVR_SCHEDTIME struAlarmOutTime[MAX_DAYS][MAX_TIMESEGMENT_V30];/* ʱ */ - BYTE byAlarmOutHandle; /* Ƿ 0- 1-*/ - BYTE byNormalSatus; /* ̬ 0- 1-*/ + BYTE sAlarmOutName[NAME_LEN]; /* 名称 */ + DWORD dwAlarmOutDelay; /* 输出保持时间(-1为无限,手动关闭) */ + //0-5秒,1-10秒,2-30秒,3-1分钟,4-2分钟,5-5分钟,6-10分钟,7-手动,8-1秒,9-2秒,10-3秒,11-4秒 + NET_DVR_SCHEDTIME struAlarmOutTime[MAX_DAYS][MAX_TIMESEGMENT_V30];/* 报警输出激活时间段 */ + BYTE byAlarmOutHandle; /* 是否处理 0-处理 1-不处理*/ + BYTE byNormalSatus; /* 常态 0-常开 1-常闭*/ BYTE byRes[14]; }NET_DVR_ALARMOUTCFG_V30, *LPNET_DVR_ALARMOUTCFG_V30; -//DVR +//DVR报警输出 typedef struct { DWORD dwSize; - BYTE sAlarmOutName[NAME_LEN]; /* */ - DWORD dwAlarmOutDelay; /* ʱ(-1Ϊޣֶر) */ - //0-5,1-10,2-30,3-1,4-2,5-5,6-10,7-ֶ, 8-1, 9-3 - NET_DVR_SCHEDTIME struAlarmOutTime[MAX_DAYS][MAX_TIMESEGMENT];/* ʱ */ + BYTE sAlarmOutName[NAME_LEN]; /* 名称 */ + DWORD dwAlarmOutDelay; /* 输出保持时间(-1为无限,手动关闭) */ + //0-5秒,1-10秒,2-30秒,3-1分钟,4-2分钟,5-5分钟,6-10分钟,7-手动, 8-1秒, 9-3秒 + NET_DVR_SCHEDTIME struAlarmOutTime[MAX_DAYS][MAX_TIMESEGMENT];/* 报警输出激活时间段 */ }NET_DVR_ALARMOUTCFG, *LPNET_DVR_ALARMOUTCFG; -//DVRԤ(9000չ) -/*лָڵǰԤģʽлʾ棬лԤģʽbyPreviewNumberΪ01棩bySwitchSeq[0][0] = 1,bySwitchSeq[0][1] = 2,bySwitchSeq[0][2] = 3 -򱾵ػһֱ1棬Ȼ水1,2,3ͨ˳л*/ +//DVR本地预览参数(9000扩展) +/*切换是指在当前预览模式下切换显示画面,而不是切换预览模式。比如byPreviewNumber为0(1画面),bySwitchSeq[0][0] = 1,bySwitchSeq[0][1] = 2,bySwitchSeq[0][2] = 3 +则本地画面一直是1画面,然后在输出画面按1,2,3通道顺序切换*/ typedef struct { DWORD dwSize; - BYTE byPreviewNumber;//Ԥģʽ,0-1,1-4,2-9,3-16,0xff: - BYTE byEnableAudio;//ǷԤ,0-Ԥ,1-Ԥ - WORD wSwitchTime;//лʱ,0-л,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s - BYTE bySwitchSeq[MAX_PREVIEW_MODE][MAX_WINDOW_V30];//л˳,lSwitchSeq[i]Ϊ 0xffʾ + BYTE byPreviewNumber;//预览模式,0-1画面,1-4画面,2-9画面,3-16画面,0xff:最大画面 + BYTE byEnableAudio;//是否声音预览,0-不预览,1-预览 + WORD wSwitchTime;//切换时间,0-不切换,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s + BYTE bySwitchSeq[MAX_PREVIEW_MODE][MAX_WINDOW_V30];//切换顺序,如果lSwitchSeq[i]为 0xff表示不用 BYTE byRes[24]; }NET_DVR_PREVIEWCFG_V30, *LPNET_DVR_PREVIEWCFG_V30; -//DVRԤ +//DVR本地预览参数 typedef struct { DWORD dwSize; - BYTE byPreviewNumber;//ԤĿ,0-1,1-4,2-9,3-16,0xff: - BYTE byEnableAudio;//ǷԤ,0-Ԥ,1-Ԥ - WORD wSwitchTime;//лʱ,0-л,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s - BYTE bySwitchSeq[MAX_WINDOW];//л˳,lSwitchSeq[i]Ϊ 0xffʾ + BYTE byPreviewNumber;//预览数目,0-1画面,1-4画面,2-9画面,3-16画面,0xff:最大画面 + BYTE byEnableAudio;//是否声音预览,0-不预览,1-预览 + WORD wSwitchTime;//切换时间,0-不切换,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s + BYTE bySwitchSeq[MAX_WINDOW];//切换顺序,如果lSwitchSeq[i]为 0xff表示不用 }NET_DVR_PREVIEWCFG, *LPNET_DVR_PREVIEWCFG; -//DVRƵ +//DVR视频输出 typedef struct { - WORD wResolution; /* ֱ */ - WORD wFreq; /* ˢƵ */ - DWORD dwBrightness; /* */ + WORD wResolution; /* 分辨率 */ + WORD wFreq; /* 刷新频率 */ + DWORD dwBrightness; /* 亮度 */ }NET_DVR_VGAPARA; /* -* MATRIXṹ +* MATRIX输出参数结构 */ typedef struct { - WORD wOrder[MAX_ANALOG_CHANNUM]; /* Ԥ˳, 0xffʾӦĴڲԤ */ - WORD wSwitchTime; /* Ԥлʱ */ + WORD wOrder[MAX_ANALOG_CHANNUM]; /* 预览顺序, 0xff表示相应的窗口不预览 */ + WORD wSwitchTime; /* 预览切换时间 */ BYTE res[14]; }NET_DVR_MATRIXPARA_V30, *LPNET_DVR_MATRIXPARA_V30; typedef struct { - WORD wDisplayLogo; /* ʾƵͨ */ - WORD wDisplayOsd; /* ʾʱ */ + WORD wDisplayLogo; /* 显示视频通道号 */ + WORD wDisplayOsd; /* 显示时间 */ }NET_DVR_MATRIXPARA; typedef struct { - BYTE byVideoFormat; /* ʽ,0-PAL,1-NTSC */ - BYTE byMenuAlphaValue; /* ˵뱳ͼԱȶ */ - WORD wScreenSaveTime; /* Ļʱ 0-Ӳ,1-1,2-2,3-5,4-10,5-20,6-30 */ - WORD wVOffset; /* Ƶƫ */ - WORD wBrightness; /* Ƶ */ - BYTE byStartMode; /* Ƶģʽ(0:˵,1:Ԥ)*/ - BYTE byEnableScaler; /* Ƿ (0-, 1-)*/ + BYTE byVideoFormat; /* 输出制式,0-PAL,1-NTSC */ + BYTE byMenuAlphaValue; /* 菜单与背景图象对比度 */ + WORD wScreenSaveTime; /* 屏幕保护时间 0-从不,1-1分钟,2-2分钟,3-5分钟,4-10分钟,5-20分钟,6-30分钟 */ + WORD wVOffset; /* 视频输出偏移 */ + WORD wBrightness; /* 视频输出亮度 */ + BYTE byStartMode; /* 启动后视频输出模式(0:菜单,1:预览)*/ + BYTE byEnableScaler; /* 是否启动缩放 (0-不启动, 1-启动)*/ }NET_DVR_VOOUT; -//DVRƵ(9000չ) +//DVR视频输出(9000扩展) typedef struct { DWORD dwSize; NET_DVR_VOOUT struVOOut[MAX_VIDEOOUT_V30]; - NET_DVR_VGAPARA struVGAPara[MAX_VGA_V30]; /* VGA */ - NET_DVR_MATRIXPARA_V30 struMatrixPara[MAX_MATRIXOUT]; /* MATRIX */ + NET_DVR_VGAPARA struVGAPara[MAX_VGA_V30]; /* VGA参数 */ + NET_DVR_MATRIXPARA_V30 struMatrixPara[MAX_MATRIXOUT]; /* MATRIX参数 */ BYTE byRes[16]; }NET_DVR_VIDEOOUT_V30, *LPNET_DVR_VIDEOOUT_V30; -//DVRƵ +//DVR视频输出 typedef struct { DWORD dwSize; NET_DVR_VOOUT struVOOut[MAX_VIDEOOUT]; - NET_DVR_VGAPARA struVGAPara[MAX_VGA]; /* VGA */ - NET_DVR_MATRIXPARA struMatrixPara; /* MATRIX */ + NET_DVR_VGAPARA struVGAPara[MAX_VGA]; /* VGA参数 */ + NET_DVR_MATRIXPARA struMatrixPara; /* MATRIX参数 */ }NET_DVR_VIDEOOUT, *LPNET_DVR_VIDEOOUT; -//û(ӽṹ)(չ) +//单用户参数(子结构)(扩展) typedef struct tagNET_DVR_USER_INFO_V40 { - BYTE sUserName[NAME_LEN]; /* ûֻ16ֽ */ - BYTE sPassword[PASSWD_LEN]; /* */ - BYTE byLocalRight[MAX_RIGHT]; /* Ȩ */ - /*0: ؿ̨*/ - /*1: ֶ¼*/ - /*2: ػط*/ - /*3: ò*/ - /*4: ز鿴״̬־*/ - /*5: ظ߼(ʽػ)*/ - /*6: ز鿴 */ - /*7: عģIP camera */ - /*8: ر */ - /*9: عػ/ */ - BYTE byRemoteRight[MAX_RIGHT];/* ԶȨ */ - /*0: Զ̨̿*/ - /*1: Զֶ¼*/ - /*2: Զ̻ط */ - /*3: Զò*/ - /*4: Զ̲鿴״̬־*/ - /*5: Զ̸߼(ʽػ)*/ - /*6: Զ̷Խ*/ - /*7: ԶԤ*/ - /*8: Զ󱨾ϴ*/ - /*9: Զ̿ƣ*/ - /*10: Զ̿ƴ*/ - /*11: Զ̲鿴 */ - /*12: Զ̹ģIP camera */ - /*13: Զ̹ػ/ */ - DWORD dwNetPreviewRight[MAX_CHANNUM_V40]; /* Զ̿Ԥͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalRecordRight[MAX_CHANNUM_V40]; /* ؿ¼ͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetRecordRight[MAX_CHANNUM_V40]; /* Զ̿¼ͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40]; /* ؿԻطŵͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetPlaybackRight[MAX_CHANNUM_V40]; /* Զ̿Իطŵͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalPTZRight[MAX_CHANNUM_V40]; /* ؿPTZͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetPTZRight[MAX_CHANNUM_V40]; /* Զ̿PTZͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalBackupRight[MAX_CHANNUM_V40]; /* رȨͨǰ˳У0xffffffffΪЧ*/ - NET_DVR_IPADDR struUserIP; /* ûIPַ(Ϊ0ʱʾκεַ) */ - BYTE byMACAddr[MACADDR_LEN]; /* ַ */ - BYTE byPriority; /* ȼ0xff-ޣ0--ͣ1--У2-- */ - /* ޡʾ֧ȼ - ͡ĬȨ:غԶ̻ط,غԶ̲鿴־ - ״̬,غԶ̹ػ/ - СغԶ̨̿,غԶֶ¼,غ - Զ̻ط,ԽԶԤر,/Զ̹ػ/ - ߡԱ */ - BYTE byAlarmOnRight; // ڲȨ 1-Ȩޣ0-Ȩ - BYTE byAlarmOffRight; // ڳȨ 1-Ȩޣ0-Ȩ - BYTE byBypassRight; // ·Ȩ 1-Ȩޣ0-Ȩ - BYTE byRes1[2]; //ֽڶ - BYTE byPublishRight[MAX_RIGHT]; //ϢרȨ - /*0: زȨ*/ - /*1: ĿȨ*/ - /*2: ճȨ*/ - /*3: ϴزȨ*/ - /*4: ½ĿȨ*/ - /*5: ½ճȨ*/ - /*6: ϢȨ*/ - /*7: ն˹Ȩ*/ - /*8: ҵȨ*/ + BYTE sUserName[NAME_LEN]; /* 用户名只能用16字节 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byLocalRight[MAX_RIGHT]; /* 本地权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + /*数组6: 本地查看参数 */ + /*数组7: 本地管理模拟和IP camera */ + /*数组8: 本地备份 */ + /*数组9: 本地关机/重启 */ + BYTE byRemoteRight[MAX_RIGHT];/* 远程权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + /*数组11: 远程查看参数 */ + /*数组12: 远程管理模拟和IP camera */ + /*数组13: 远程关机/重启 */ + DWORD dwNetPreviewRight[MAX_CHANNUM_V40]; /* 远程可以预览的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalRecordRight[MAX_CHANNUM_V40]; /* 本地可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetRecordRight[MAX_CHANNUM_V40]; /* 远程可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40]; /* 本地可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPlaybackRight[MAX_CHANNUM_V40]; /* 远程可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPTZRight[MAX_CHANNUM_V40]; /* 本地可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPTZRight[MAX_CHANNUM_V40]; /* 远程可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalBackupRight[MAX_CHANNUM_V40]; /* 本地备份权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ + BYTE byPriority; /* 优先级,0xff-无,0--低,1--中,2--高 */ + /* 无……表示不支持优先级的设置 + 低……默认权限:包括本地和远程回放,本地和远程查看日志和 + 状态,本地和远程关机/重启 + 中……包括本地和远程控制云台,本地和远程手动录像,本地和 + 远程回放,语音对讲和远程预览、本地备份,本地/远程关机/重启 + 高……管理员 */ + BYTE byAlarmOnRight; // 报警输入口布防权限 1-有权限,0-无权限 + BYTE byAlarmOffRight; // 报警输入口撤防权限 1-有权限,0-无权限 + BYTE byBypassRight; // 报警输入口旁路权限 1-有权限,0-无权限 + BYTE byRes1[2]; //四字节对齐 + BYTE byPublishRight[MAX_RIGHT]; //信息发布专有权限 + /*数组0: 素材审核权限*/ + /*数组1: 节目审核权限*/ + /*数组2: 日程审核权限*/ + /*数组3: 上传素材权限*/ + /*数组4: 新建节目权限*/ + /*数组5: 新建日程权限*/ + /*数组6: 信息播放权限*/ + /*数组7: 终端管理权限*/ + /*数组8: 商业智能权限*/ BYTE byRes[84]; }NET_DVR_USER_INFO_V40, *LPNET_DVR_USER_INFO_V40; -//û(ӽṹ)(չ) +//单用户参数(子结构)(扩展) typedef struct tagNET_DVR_USER_INFO_V51 { - BYTE sUserName[NAME_LEN/*32*/]; /* ûֻ16ֽ */ - BYTE sPassword[PASSWD_LEN/*16*/]; /* */ - BYTE byLocalRight[MAX_RIGHT/*32*/]; /* Ȩ */ - /*0: ؿ̨*/ - /*1: ֶ¼*/ - /*2: ػط*/ - /*3: ò*/ - /*4: ز鿴״̬־*/ - /*5: ظ߼(ʽػ)*/ - /*6: ز鿴 */ - /*7: عģIP camera */ - /*8: ر */ - /*9: عػ/ */ - /*10: Ԥ */ - BYTE byRemoteRight[MAX_RIGHT/*32*/];/* ԶȨ */ - /*0: Զ̨̿*/ - /*1: Զֶ¼*/ - /*2: Զ̻ط */ - /*3: Զò*/ - /*4: Զ̲鿴״̬־*/ - /*5: Զ̸߼(ʽػ)*/ - /*6: Զ̷Խ*/ - /*7: ԶԤ*/ - /*8: Զ󱨾ϴ*/ - /*9: Զ̿ƣ*/ - /*10: Զ̿ƴ*/ - /*11: Զ̲鿴 */ - /*12: Զ̹ģIP camera */ - /*13: Զ̹ػ/ */ - DWORD dwNetPreviewRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿Ԥͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalRecordRight[MAX_CHANNUM_V40/*512*/]; /* ؿ¼ͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetRecordRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿¼ͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* ؿԻطŵͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿Իطŵͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalPTZRight[MAX_CHANNUM_V40/*512*/]; /* ؿPTZͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetPTZRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿PTZͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalBackupRight[MAX_CHANNUM_V40/*512*/]; /* رȨͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalPreviewRight[MAX_CHANNUM_V40/*512*/]; /* ԤȨͨǰ˳У0xffffffffΪЧ*/ - NET_DVR_IPADDR struUserIP; /* ûIPַ(Ϊ0ʱʾκεַ) */ - BYTE byMACAddr[MACADDR_LEN/*6*/]; /* ַ */ - BYTE byPriority; /* ȼ0xff-ޣ0--ͣ1--У2-- */ - /* ޡʾ֧ȼ - ͡ĬȨ:غԶ̻ط,غԶ̲鿴־ - ״̬,غԶ̹ػ/ - СغԶ̨̿,غԶֶ¼,غ - Զ̻ط,ԽԶԤر,/Զ̹ػ/ߡԱ */ - BYTE byAlarmOnRight; // ڲȨ 1-Ȩޣ0-Ȩ - BYTE byAlarmOffRight; // ڳȨ 1-Ȩޣ0-Ȩ - BYTE byBypassRight; // ·Ȩ 1-Ȩޣ0-Ȩ - BYTE byRes1[2]; //ֽڶ - BYTE byPublishRight[MAX_RIGHT/*32*/]; //ϢרȨ - /*0: زȨ*/ - /*1: ĿȨ*/ - /*2: ճȨ*/ - /*3: ϴزȨ*/ - /*4: ½ĿȨ*/ - /*5: ½ճȨ*/ - /*6: ϢȨ*/ - /*7: ն˹Ȩ*/ - /*8: ҵȨ*/ - DWORD dwPasswordValidity; //Ч,Աû޸,λ죬0ʾЧ - BYTE byKeypadPassword[PASSWD_LEN/*16*/]; // - BYTE byUserOperateType; //ûͣ1-û2-û3-û+û + BYTE sUserName[NAME_LEN/*32*/]; /* 用户名只能用16字节 */ + BYTE sPassword[PASSWD_LEN/*16*/]; /* 密码 */ + BYTE byLocalRight[MAX_RIGHT/*32*/]; /* 本地权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + /*数组6: 本地查看参数 */ + /*数组7: 本地管理模拟和IP camera */ + /*数组8: 本地备份 */ + /*数组9: 本地关机/重启 */ + /*数组10: 本地预览 */ + BYTE byRemoteRight[MAX_RIGHT/*32*/];/* 远程权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + /*数组11: 远程查看参数 */ + /*数组12: 远程管理模拟和IP camera */ + /*数组13: 远程关机/重启 */ + DWORD dwNetPreviewRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以预览的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalRecordRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetRecordRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPTZRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPTZRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalBackupRight[MAX_CHANNUM_V40/*512*/]; /* 本地备份权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPreviewRight[MAX_CHANNUM_V40/*512*/]; /* 本地预览权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN/*6*/]; /* 物理地址 */ + BYTE byPriority; /* 优先级,0xff-无,0--低,1--中,2--高 */ + /* 无……表示不支持优先级的设置 + 低……默认权限:包括本地和远程回放,本地和远程查看日志和 + 状态,本地和远程关机/重启 + 中……包括本地和远程控制云台,本地和远程手动录像,本地和 + 远程回放,语音对讲和远程预览、本地备份,本地/远程关机/重启高……管理员 */ + BYTE byAlarmOnRight; // 报警输入口布防权限 1-有权限,0-无权限 + BYTE byAlarmOffRight; // 报警输入口撤防权限 1-有权限,0-无权限 + BYTE byBypassRight; // 报警输入口旁路权限 1-有权限,0-无权限 + BYTE byRes1[2]; //四字节对齐 + BYTE byPublishRight[MAX_RIGHT/*32*/]; //信息发布专有权限 + /*数组0: 素材审核权限*/ + /*数组1: 节目审核权限*/ + /*数组2: 日程审核权限*/ + /*数组3: 上传素材权限*/ + /*数组4: 新建节目权限*/ + /*数组5: 新建日程权限*/ + /*数组6: 信息播放权限*/ + /*数组7: 终端管理权限*/ + /*数组8: 商业智能权限*/ + DWORD dwPasswordValidity; //密码有效期,仅管理员用户可以修改,单位:天,填0表示永久生效 + BYTE byKeypadPassword[PASSWD_LEN/*16*/]; //键盘密码 + BYTE byUserOperateType; //用户操作类型,1-网络用户,2-键盘用户,3-网络用户+键盘用户 BYTE byRes[1007]; }NET_DVR_USER_INFO_V51, *LPNET_DVR_USER_INFO_V51; typedef struct tagNET_DVR_USER_V51 { - DWORD dwSize; //ṹС - DWORD dwMaxUserNum; //豸ֵ֧û-ֻ - NET_DVR_USER_INFO_V51 struUser[MAX_USERNUM_V30/*32*/]; /* û */ - char sloginPassword[PASSWD_LEN/*16*/]; /* ½ȷ */ - BYTE byRes[240]; // + DWORD dwSize; //结构体大小 + DWORD dwMaxUserNum; //设备支持的最大用户数-只读 + NET_DVR_USER_INFO_V51 struUser[MAX_USERNUM_V30/*32*/]; /* 用户参数 */ + char sloginPassword[PASSWD_LEN/*16*/]; /* 登陆密码确认 */ + BYTE byRes[240]; //保留 }NET_DVR_USER_V51, *LPNET_DVR_USER_V51; -//û(ӽṹ)(չ) +//单用户参数(子结构)(扩展) typedef struct tagNET_DVR_USER_INFO_V52 { - BYTE sUserName[NAME_LEN/*32*/]; /* ûֻ16ֽ */ - BYTE sPassword[PASSWD_LEN/*16*/]; /* */ - BYTE byLocalRight[MAX_RIGHT/*32*/]; /* Ȩ */ - /*0: ؿ̨*/ - /*1: ֶ¼*/ - /*2: ػط*/ - /*3: ò*/ - /*4: ز鿴״̬־*/ - /*5: ظ߼(ʽػ)*/ - /*6: ز鿴 */ - /*7: عģIP camera */ - /*8: ر */ - /*9: عػ/ */ - /*10: Ԥ */ - BYTE byRemoteRight[MAX_RIGHT/*32*/];/* ԶȨ */ - /*0: Զ̨̿*/ - /*1: Զֶ¼*/ - /*2: Զ̻ط */ - /*3: Զò*/ - /*4: Զ̲鿴״̬־*/ - /*5: Զ̸߼(ʽػ)*/ - /*6: Զ̷Խ*/ - /*7: ԶԤ*/ - /*8: Զ󱨾ϴ*/ - /*9: Զ̿ƣ*/ - /*10: Զ̿ƴ*/ - /*11: Զ̲鿴 */ - /*12: Զ̹ģIP camera */ - /*13: Զ̹ػ/ */ - DWORD dwNetPreviewRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿Ԥͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalRecordRight[MAX_CHANNUM_V40/*512*/]; /* ؿ¼ͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetRecordRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿¼ͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* ؿԻطŵͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿Իطŵͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalPTZRight[MAX_CHANNUM_V40/*512*/]; /* ؿPTZͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetPTZRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿PTZͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalBackupRight[MAX_CHANNUM_V40/*512*/]; /* رȨͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalPreviewRight[MAX_CHANNUM_V40/*512*/]; /* ԤȨͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalDoubleVerificationPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* ؿԶ֤طŵͨǰ˳У0xffffffffΪЧ*/ - DWORD dwLocalDoubleVerificationBackupRight[MAX_CHANNUM_V40/*512*/]; /* ؿԶ֤ݵͨǰ˳У0xffffffffΪЧ*/ - DWORD dwNetDoubleVerificationPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* Զ̿Զ֤طŵͨǰ˳У0xffffffffΪЧ*/ - NET_DVR_IPADDR struUserIP; /* ûIPַ(Ϊ0ʱʾκεַ) */ - BYTE byMACAddr[MACADDR_LEN/*6*/]; /* ַ */ - BYTE byPriority; /* ȼ0xff-ޣ0--ͣ1--У2-- */ - /* ޡʾ֧ȼ - ͡ĬȨ:غԶ̻ط,غԶ̲鿴־ - ״̬,غԶ̹ػ/ - СغԶ̨̿,غԶֶ¼,غ - Զ̻ط,ԽԶԤر,/Զ̹ػ/ߡԱ */ - BYTE byAlarmOnRight; // ڲȨ 1-Ȩޣ0-Ȩ - BYTE byAlarmOffRight; // ڳȨ 1-Ȩޣ0-Ȩ - BYTE byBypassRight; // ·Ȩ 1-Ȩޣ0-Ȩ - BYTE byRes1[2]; //ֽڶ - BYTE byPublishRight[MAX_RIGHT/*32*/]; //ϢרȨ - /*0: زȨ*/ - /*1: ĿȨ*/ - /*2: ճȨ*/ - /*3: ϴزȨ*/ - /*4: ½ĿȨ*/ - /*5: ½ճȨ*/ - /*6: ϢȨ*/ - /*7: ն˹Ȩ*/ - /*8: ҵȨ*/ - DWORD dwPasswordValidity; //Ч,Աû޸,λ죬0ʾЧ - BYTE byKeypadPassword[PASSWD_LEN/*16*/]; // - BYTE byUserOperateType; //ûͣ1-û2-û3-û+û + BYTE sUserName[NAME_LEN/*32*/]; /* 用户名只能用16字节 */ + BYTE sPassword[PASSWD_LEN/*16*/]; /* 密码 */ + BYTE byLocalRight[MAX_RIGHT/*32*/]; /* 本地权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + /*数组6: 本地查看参数 */ + /*数组7: 本地管理模拟和IP camera */ + /*数组8: 本地备份 */ + /*数组9: 本地关机/重启 */ + /*数组10: 本地预览 */ + BYTE byRemoteRight[MAX_RIGHT/*32*/];/* 远程权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + /*数组11: 远程查看参数 */ + /*数组12: 远程管理模拟和IP camera */ + /*数组13: 远程关机/重启 */ + DWORD dwNetPreviewRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以预览的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalRecordRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetRecordRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPTZRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPTZRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalBackupRight[MAX_CHANNUM_V40/*512*/]; /* 本地备份权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPreviewRight[MAX_CHANNUM_V40/*512*/]; /* 本地预览权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalDoubleVerificationPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以二次认证回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalDoubleVerificationBackupRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以二次认证备份的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetDoubleVerificationPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以二次认证回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN/*6*/]; /* 物理地址 */ + BYTE byPriority; /* 优先级,0xff-无,0--低,1--中,2--高 */ + /* 无……表示不支持优先级的设置 + 低……默认权限:包括本地和远程回放,本地和远程查看日志和 + 状态,本地和远程关机/重启 + 中……包括本地和远程控制云台,本地和远程手动录像,本地和 + 远程回放,语音对讲和远程预览、本地备份,本地/远程关机/重启高……管理员 */ + BYTE byAlarmOnRight; // 报警输入口布防权限 1-有权限,0-无权限 + BYTE byAlarmOffRight; // 报警输入口撤防权限 1-有权限,0-无权限 + BYTE byBypassRight; // 报警输入口旁路权限 1-有权限,0-无权限 + BYTE byRes1[2]; //四字节对齐 + BYTE byPublishRight[MAX_RIGHT/*32*/]; //信息发布专有权限 + /*数组0: 素材审核权限*/ + /*数组1: 节目审核权限*/ + /*数组2: 日程审核权限*/ + /*数组3: 上传素材权限*/ + /*数组4: 新建节目权限*/ + /*数组5: 新建日程权限*/ + /*数组6: 信息播放权限*/ + /*数组7: 终端管理权限*/ + /*数组8: 商业智能权限*/ + DWORD dwPasswordValidity; //密码有效期,仅管理员用户可以修改,单位:天,填0表示永久生效 + BYTE byKeypadPassword[PASSWD_LEN/*16*/]; //键盘密码 + BYTE byUserOperateType; //用户操作类型,1-网络用户,2-键盘用户,3-网络用户+键盘用户 BYTE byRes[1007]; }NET_DVR_USER_INFO_V52, *LPNET_DVR_USER_INFO_V52; typedef struct tagNET_DVR_USER_V52 { - DWORD dwSize; //ṹС - DWORD dwMaxUserNum; //豸ֵ֧û-ֻ - NET_DVR_USER_INFO_V52 struUser[MAX_USERNUM_V30/*32*/]; /* û */ - char sloginPassword[PASSWD_LEN/*16*/]; /* ½ȷ */ - BYTE byRes[240]; // + DWORD dwSize; //结构体大小 + DWORD dwMaxUserNum; //设备支持的最大用户数-只读 + NET_DVR_USER_INFO_V52 struUser[MAX_USERNUM_V30/*32*/]; /* 用户参数 */ + char sloginPassword[PASSWD_LEN/*16*/]; /* 登陆密码确认 */ + BYTE byRes[240]; //保留 }NET_DVR_USER_V52, *LPNET_DVR_USER_V52; -//û(ӽṹ)(9000չ) +//单用户参数(子结构)(9000扩展) typedef struct { - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - BYTE byLocalRight[MAX_RIGHT]; /* Ȩ */ - /*0: ؿ̨*/ - /*1: ֶ¼*/ - /*2: ػط*/ - /*3: ò*/ - /*4: ز鿴״̬־*/ - /*5: ظ߼(ʽػ)*/ - /*6: ز鿴 */ - /*7: عģIP camera */ - /*8: ر */ - /*9: عػ/ */ - BYTE byRemoteRight[MAX_RIGHT];/* ԶȨ */ - /*0: Զ̨̿*/ - /*1: Զֶ¼*/ - /*2: Զ̻ط */ - /*3: Զò*/ - /*4: Զ̲鿴״̬־*/ - /*5: Զ̸߼(ʽػ)*/ - /*6: Զ̷Խ*/ - /*7: ԶԤ*/ - /*8: Զ󱨾ϴ*/ - /*9: Զ̿ƣ*/ - /*10: Զ̿ƴ*/ - /*11: Զ̲鿴 */ - /*12: Զ̹ģIP camera */ - /*13: Զ̹ػ/ */ - BYTE byNetPreviewRight[MAX_CHANNUM_V30]; /* Զ̿Ԥͨ 0-Ȩޣ1-Ȩ*/ - BYTE byLocalPlaybackRight[MAX_CHANNUM_V30]; /* ؿԻطŵͨ 0-Ȩޣ1-Ȩ*/ - BYTE byNetPlaybackRight[MAX_CHANNUM_V30]; /* Զ̿Իطŵͨ 0-Ȩޣ1-Ȩ*/ - BYTE byLocalRecordRight[MAX_CHANNUM_V30]; /* ؿ¼ͨ 0-Ȩޣ1-Ȩ*/ - BYTE byNetRecordRight[MAX_CHANNUM_V30]; /* Զ̿¼ͨ 0-Ȩޣ1-Ȩ*/ - BYTE byLocalPTZRight[MAX_CHANNUM_V30]; /* ؿPTZͨ 0-Ȩޣ1-Ȩ*/ - BYTE byNetPTZRight[MAX_CHANNUM_V30]; /* Զ̿PTZͨ 0-Ȩޣ1-Ȩ*/ - BYTE byLocalBackupRight[MAX_CHANNUM_V30]; /* رȨͨ 0-Ȩޣ1-Ȩ*/ - NET_DVR_IPADDR struUserIP; /* ûIPַ(Ϊ0ʱʾκεַ) */ - BYTE byMACAddr[MACADDR_LEN]; /* ַ */ - BYTE byPriority; /* ȼ0xff-ޣ0--ͣ1--У2-- */ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byLocalRight[MAX_RIGHT]; /* 本地权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + /*数组6: 本地查看参数 */ + /*数组7: 本地管理模拟和IP camera */ + /*数组8: 本地备份 */ + /*数组9: 本地关机/重启 */ + BYTE byRemoteRight[MAX_RIGHT];/* 远程权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + /*数组11: 远程查看参数 */ + /*数组12: 远程管理模拟和IP camera */ + /*数组13: 远程关机/重启 */ + BYTE byNetPreviewRight[MAX_CHANNUM_V30]; /* 远程可以预览的通道 0-有权限,1-无权限*/ + BYTE byLocalPlaybackRight[MAX_CHANNUM_V30]; /* 本地可以回放的通道 0-有权限,1-无权限*/ + BYTE byNetPlaybackRight[MAX_CHANNUM_V30]; /* 远程可以回放的通道 0-有权限,1-无权限*/ + BYTE byLocalRecordRight[MAX_CHANNUM_V30]; /* 本地可以录像的通道 0-有权限,1-无权限*/ + BYTE byNetRecordRight[MAX_CHANNUM_V30]; /* 远程可以录像的通道 0-有权限,1-无权限*/ + BYTE byLocalPTZRight[MAX_CHANNUM_V30]; /* 本地可以PTZ的通道 0-有权限,1-无权限*/ + BYTE byNetPTZRight[MAX_CHANNUM_V30]; /* 远程可以PTZ的通道 0-有权限,1-无权限*/ + BYTE byLocalBackupRight[MAX_CHANNUM_V30]; /* 本地备份权限通道 0-有权限,1-无权限*/ + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ + BYTE byPriority; /* 优先级,0xff-无,0--低,1--中,2--高 */ /* - ޡʾ֧ȼ - ͡ĬȨ:غԶ̻ط,غԶ̲鿴־״̬,غԶ̹ػ/ - СغԶ̨̿,غԶֶ¼,غԶ̻ط,ԽԶԤ - ر,/Զ̹ػ/ - ߡԱ + 无……表示不支持优先级的设置 + 低……默认权限:包括本地和远程回放,本地和远程查看日志和状态,本地和远程关机/重启 + 中……包括本地和远程控制云台,本地和远程手动录像,本地和远程回放,语音对讲和远程预览 + 本地备份,本地/远程关机/重启 + 高……管理员 */ - BYTE byAlarmOnRight; // ڲȨ - BYTE byAlarmOffRight; // ڳȨ - BYTE byBypassRight; // ·Ȩ + BYTE byAlarmOnRight; // 报警输入口布防权限 + BYTE byAlarmOffRight; // 报警输入口撤防权限 + BYTE byBypassRight; // 报警输入口旁路权限 BYTE byRes[14]; }NET_DVR_USER_INFO_V30, *LPNET_DVR_USER_INFO_V30; -//û(SDK_V15չ)(ӽṹ) +//单用户参数(SDK_V15扩展)(子结构) typedef struct { - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - DWORD dwLocalRight[MAX_RIGHT]; /* Ȩ */ - /*0: ؿ̨*/ - /*1: ֶ¼*/ - /*2: ػط*/ - /*3: ò*/ - /*4: ز鿴״̬־*/ - /*5: ظ߼(ʽػ)*/ - DWORD dwLocalPlaybackRight; /* ؿԻطŵͨ bit0 -- channel 1*/ - DWORD dwRemoteRight[MAX_RIGHT]; /* Ȩ */ - /*0: Զ̨̿*/ - /*1: Զֶ¼*/ - /*2: Զ̻ط */ - /*3: Զò*/ - /*4: Զ̲鿴״̬־*/ - /*5: Զ̸߼(ʽػ)*/ - /*6: Զ̷Խ*/ - /*7: ԶԤ*/ - /*8: Զ󱨾ϴ*/ - /*9: Զ̿ƣ*/ - /*10: Զ̿ƴ*/ - DWORD dwNetPreviewRight; /* Զ̿Ԥͨ bit0 -- channel 1*/ - DWORD dwNetPlaybackRight; /* Զ̿Իطŵͨ bit0 -- channel 1*/ - char sUserIP[16]; /* ûIPַ(Ϊ0ʱʾκεַ) */ - BYTE byMACAddr[MACADDR_LEN]; /* ַ */ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwLocalRight[MAX_RIGHT]; /* 权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + DWORD dwLocalPlaybackRight; /* 本地可以回放的通道 bit0 -- channel 1*/ + DWORD dwRemoteRight[MAX_RIGHT]; /* 权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + DWORD dwNetPreviewRight; /* 远程可以预览的通道 bit0 -- channel 1*/ + DWORD dwNetPlaybackRight; /* 远程可以回放的通道 bit0 -- channel 1*/ + char sUserIP[16]; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ }NET_DVR_USER_INFO_EX, *LPNET_DVR_USER_INFO_EX; -//û(ӽṹ) +//单用户参数(子结构) typedef struct { - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - DWORD dwLocalRight[MAX_RIGHT]; /* Ȩ */ - /*0: ؿ̨*/ - /*1: ֶ¼*/ - /*2: ػط*/ - /*3: ò*/ - /*4: ز鿴״̬־*/ - /*5: ظ߼(ʽػ)*/ - DWORD dwRemoteRight[MAX_RIGHT]; /* Ȩ */ - /*0: Զ̨̿*/ - /*1: Զֶ¼*/ - /*2: Զ̻ط */ - /*3: Զò*/ - /*4: Զ̲鿴״̬־*/ - /*5: Զ̸߼(ʽػ)*/ - /*6: Զ̷Խ*/ - /*7: ԶԤ*/ - /*8: Զ󱨾ϴ*/ - /*9: Զ̿ƣ*/ - /*10: Զ̿ƴ*/ - char sUserIP[16]; /* ûIPַ(Ϊ0ʱʾκεַ) */ - BYTE byMACAddr[MACADDR_LEN]; /* ַ */ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwLocalRight[MAX_RIGHT]; /* 权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + DWORD dwRemoteRight[MAX_RIGHT]; /* 权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + char sUserIP[16]; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ }NET_DVR_USER_INFO, *LPNET_DVR_USER_INFO; -//DVRû(չ) +//DVR用户参数(扩展) typedef struct tagNET_DVR_USER_V40 { - DWORD dwSize; //ṹС - DWORD dwMaxUserNum; //豸ֵ֧û-ֻ - NET_DVR_USER_INFO_V40 struUser[MAX_USERNUM_V30]; /* û */ + DWORD dwSize; //结构体大小 + DWORD dwMaxUserNum; //设备支持的最大用户数-只读 + NET_DVR_USER_INFO_V40 struUser[MAX_USERNUM_V30]; /* 用户参数 */ }NET_DVR_USER_V40,*LPNET_DVR_USER_V40; typedef struct tagNET_DVR_USER_V50 { - DWORD dwSize; //ṹС - DWORD dwMaxUserNum; //豸ֵ֧û-ֻ - NET_DVR_USER_INFO_V40 struUser[MAX_USERNUM_V30]; /* û */ - char sloginPassword[PASSWD_LEN/*16*/]; /* ½ȷ */ - BYTE byRes[240]; // + DWORD dwSize; //结构体大小 + DWORD dwMaxUserNum; //设备支持的最大用户数-只读 + NET_DVR_USER_INFO_V40 struUser[MAX_USERNUM_V30]; /* 用户参数 */ + char sloginPassword[PASSWD_LEN/*16*/]; /* 登陆密码确认 */ + BYTE byRes[240]; //保留 }NET_DVR_USER_V50, *LPNET_DVR_USER_V50; -//DVRû(9000չ) +//DVR用户参数(9000扩展) typedef struct { DWORD dwSize; NET_DVR_USER_INFO_V30 struUser[MAX_USERNUM_V30]; }NET_DVR_USER_V30, *LPNET_DVR_USER_V30; -//DVRû(SDK_V15չ) +//DVR用户参数(SDK_V15扩展) typedef struct { DWORD dwSize; NET_DVR_USER_INFO_EX struUser[MAX_USERNUM]; }NET_DVR_USER_EX, *LPNET_DVR_USER_EX; -//DVRû +//DVR用户参数 typedef struct { DWORD dwSize; @@ -12011,226 +12011,226 @@ typedef struct typedef struct tagNET_DVR_EXCEPTION_V40 { - DWORD dwSize ; //ṹС - DWORD dwMaxGroupNum ; //豸ֵ֧ + DWORD dwSize ; //结构体大小 + DWORD dwMaxGroupNum ; //设备支持的最大组数 NET_DVR_HANDLEEXCEPTION_V41 struExceptionHandle[MAX_EXCEPTIONNUM_V30]; - BYTE byRes[128]; // -}NET_DVR_EXCEPTION_V40,*LPNET_DVR_EXCEPTION_V40; /*쳣չṹ*/ + BYTE byRes[128]; //保留 +}NET_DVR_EXCEPTION_V40,*LPNET_DVR_EXCEPTION_V40; /*异常参数配置扩展结构体*/ -//DVR쳣(9000չ) +//DVR异常参数(9000扩展) typedef struct { DWORD dwSize; NET_DVR_HANDLEEXCEPTION_V30 struExceptionHandleType[MAX_EXCEPTIONNUM_V30]; - /*0-,1- Ӳ̳,2-߶,3-IP ַͻ, 4-Ƿ, 5-/Ƶʽƥ, 6-Ƶź쳣, 7-¼쳣 8-쳣9-ǰ/¼ֱʲƥ쳣10-г(ר) 11-ȱ쳣N+1ʹã12-¶ȣ13-ϵͳ쳣14-쳣, 15-POE쳣, 16-POC쳣,17-Դѹ쳣*/ + /*数组0-盘满,1- 硬盘出错,2-网线断,3-局域网内IP 地址冲突, 4-非法访问, 5-输入/输出视频制式不匹配, 6-视频信号异常, 7-录像异常 8-阵列异常,9-前端/录像分辨率不匹配异常,10-行车超速(车载专用) 11-热备异常(N+1使用)12-温度,13-子系统异常,14-风扇异常, 15-POE供电异常, 16-POC异常,数组17-电源电压波动异常*/ }NET_DVR_EXCEPTION_V30, *LPNET_DVR_EXCEPTION_V30; -//DVR쳣 +//DVR异常参数 typedef struct { DWORD dwSize; NET_DVR_HANDLEEXCEPTION struExceptionHandleType[MAX_EXCEPTIONNUM]; - /*0-,1- Ӳ̳,2-߶,3-IP ַͻ,4-Ƿ, 5-/Ƶʽƥ, 6-Ƶź쳣*/ + /*数组0-盘满,1- 硬盘出错,2-网线断,3-局域网内IP 地址冲突,4-非法访问, 5-输入/输出视频制式不匹配, 6-视频信号异常*/ }NET_DVR_EXCEPTION, *LPNET_DVR_EXCEPTION; -//ͨ״̬(9000չ) +//通道状态(9000扩展) typedef struct { - BYTE byRecordStatic; //ͨǷ¼,0-¼,1-¼ - BYTE bySignalStatic; //ӵź״̬,0-,1-źŶʧ - BYTE byHardwareStatic;//ͨӲ״̬,0-,1-쳣,DSP - BYTE byRes1; // - DWORD dwBitRate;//ʵ - DWORD dwLinkNum;//ͻӵĸ - NET_DVR_IPADDR struClientIP[MAX_LINK];//ͻ˵IPַ - DWORD dwIPLinkNum;//ͨΪIP룬ôʾIP뵱ǰ - BYTE byExceedMaxLink; // Ƿ񳬳˵·6· 0 - δ, 1- - BYTE byRes[3]; // ֽ - DWORD dwAllBitRate; //ʵ֮ - DWORD dwChannelNo; //ǰͨţ0xffffffffʾЧ + BYTE byRecordStatic; //通道是否在录像,0-不录像,1-录像 + BYTE bySignalStatic; //连接的信号状态,0-正常,1-信号丢失 + BYTE byHardwareStatic;//通道硬件状态,0-正常,1-异常,例如DSP死掉 + BYTE byRes1; //保留 + DWORD dwBitRate;//实际码率 + DWORD dwLinkNum;//客户端连接的个数 + NET_DVR_IPADDR struClientIP[MAX_LINK];//客户端的IP地址 + DWORD dwIPLinkNum;//如果该通道为IP接入,那么表示IP接入当前的连接数 + BYTE byExceedMaxLink; // 是否超出了单路6路连接数 0 - 未超出, 1-超出 + BYTE byRes[3]; // 保留字节 + DWORD dwAllBitRate; //所有实际码率之和 + DWORD dwChannelNo; //当前的通道号,0xffffffff表示无效 }NET_DVR_CHANNELSTATE_V30, *LPNET_DVR_CHANNELSTATE_V30; -//ͨ״̬ +//通道状态 typedef struct { - BYTE byRecordStatic; //ͨǷ¼,0-¼,1-¼ - BYTE bySignalStatic; //ӵź״̬,0-,1-źŶʧ - BYTE byHardwareStatic;//ͨӲ״̬,0-,1-쳣,DSP - char reservedData; // - DWORD dwBitRate;//ʵ - DWORD dwLinkNum;//ͻӵĸ - DWORD dwClientIP[MAX_LINK];//ͻ˵IPַ + BYTE byRecordStatic; //通道是否在录像,0-不录像,1-录像 + BYTE bySignalStatic; //连接的信号状态,0-正常,1-信号丢失 + BYTE byHardwareStatic;//通道硬件状态,0-正常,1-异常,例如DSP死掉 + char reservedData; //保留 + DWORD dwBitRate;//实际码率 + DWORD dwLinkNum;//客户端连接的个数 + DWORD dwClientIP[MAX_LINK];//客户端的IP地址 }NET_DVR_CHANNELSTATE, *LPNET_DVR_CHANNELSTATE; -//Ӳ״̬ +//硬盘状态 typedef struct { - DWORD dwVolume;//Ӳ̵ - DWORD dwFreeSpace;//Ӳ̵ʣռ - DWORD dwHardDiskStatic; //Ӳ̵״̬,λ:1-,2-,3-Ӳ̳,4-δʽ, 5-δ״̬(Ӳ),6-Ӳڸʽ,7-Ӳ(δѭǵ),8-쳣豸ͳƣ + DWORD dwVolume;//硬盘的容量 + DWORD dwFreeSpace;//硬盘的剩余空间 + DWORD dwHardDiskStatic; //硬盘的状态,按位:1-休眠,2-不正常,3-休眠硬盘出错,4-未格式化, 5-未连接状态(网络硬盘),6-硬盘正在格式化,7-硬盘满(未开启循环覆盖的情况下),8-其他异常(待设备端统计) }NET_DVR_DISKSTATE, *LPNET_DVR_DISKSTATE; typedef struct tagNET_DVR_WORKSTATE_V40 { - DWORD dwSize ; //ṹС - DWORD dwDeviceStatic; //豸״̬,0-,1-CPUռ̫,85%,2-Ӳ,紮 - NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //Ӳ״̬,һֻܻȡ33ӲϢ - NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V40/*512*/];//ͨ״̬ǰ˳ - DWORD dwHasAlarmInStatic[MAX_ALARMIN_V40/*512*/]; //бıڣֵʾ±ֵ˳УֵΪ0xffffffffʱǰֵЧ - DWORD dwHasAlarmOutStatic[MAX_ALARMOUT_V40/*512*/]; //бıڣֵʾ±ֵ˳УֵΪ0xffffffffʱǰֵЧ - DWORD dwLocalDisplay; //ʾ״̬,0-,1- - BYTE byAudioInChanStatus[MAX_AUDIO_V30/*2*/]; //λʾͨ״̬ 0-δʹã1-ʹУ0λʾ1ͨ + DWORD dwSize ; //结构体大小 + DWORD dwDeviceStatic; //设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 + NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //硬盘状态,一次最多只能获取33个硬盘信息 + NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V40/*512*/];//通道的状态,从前往后顺序排列 + DWORD dwHasAlarmInStatic[MAX_ALARMIN_V40/*512*/]; //有报警的报警输入口,按值表示,按下标值顺序排列,值为0xffffffff时当前及后续值无效 + DWORD dwHasAlarmOutStatic[MAX_ALARMOUT_V40/*512*/]; //有报警输出的报警输出口,按值表示,按下标值顺序排列,值为0xffffffff时当前及后续值无效 + DWORD dwLocalDisplay; //本地显示状态,0-正常,1-不正常 + BYTE byAudioInChanStatus[MAX_AUDIO_V30/*2*/]; //按位表示语音通道的状态 0-未使用,1-使用中,第0位表示第1个语音通道 BYTE byRes1[2]; - float fHumidity; //֪ʪ,Χ:0.0 ~100.0 - float fTemperature; //֪¶ȣΧ-20.0 ~ 90.0 - BYTE byRes[116]; // -}NET_DVR_WORKSTATE_V40, *LPNET_DVR_WORKSTATE_V40; /*豸״̬չṹ*/ + float fHumidity; //传感器获知的湿度,范围:0.0 ~100.0 + float fTemperature; //传感器获知的温度,范围:-20.0 ~ 90.0 + BYTE byRes[116]; //保留 +}NET_DVR_WORKSTATE_V40, *LPNET_DVR_WORKSTATE_V40; /*设备工作状态扩展结构体*/ typedef struct tagNET_DVR_GETWORKSTATE_COND { - DWORD dwSize ; //ṹ峤 - BYTE byFindHardByCond; /*0-ȫ(һֻܲ33)ʱdwFindHardStatusNumЧ*/ - BYTE byFindChanByCond ; /*0-ȫͨʱdwFindChanNumЧ*/ - BYTE byRes1[2] ;// - DWORD dwFindHardStatus[MAX_DISKNUM_V30/*33*/] ; /*ҪҵӲ̺ţֵʾֵ˳У 0xffffffffΪЧ */ - DWORD dwFindChanNo[MAX_CHANNUM_V40/*512*/] ; /*Ҫҵͨţֵʾֵ˳У 0xffffffffΪЧ */ - BYTE byRes[64] ; // + DWORD dwSize ; //结构体长度 + BYTE byFindHardByCond; /*0-查找全部磁盘(但一次最多只能查找33个),此时dwFindHardStatusNum无效*/ + BYTE byFindChanByCond ; /*0-查找全部通道,此时dwFindChanNum无效*/ + BYTE byRes1[2] ;//保留 + DWORD dwFindHardStatus[MAX_DISKNUM_V30/*33*/] ; /*要查找的硬盘号,按值表示,该值采用顺序排列, 遇到0xffffffff则认为后续无效 */ + DWORD dwFindChanNo[MAX_CHANNUM_V40/*512*/] ; /*要查找的通道号,按值表示,该值采用顺序排列, 遇到0xffffffff则认为后续无效 */ + BYTE byRes[64] ; //保留 }NET_DVR_GETWORKSTATE_COND, *LPNET_DVR_GETWORKSTATE_COND; -//DVR״̬(9000չ) +//DVR工作状态(9000扩展) typedef struct { - DWORD dwDeviceStatic; //豸״̬,0-,1-CPUռ̫,85%,2-Ӳ,紮 + DWORD dwDeviceStatic; //设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; - NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V30];//ͨ״̬ - BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //˿ڵ״̬,0-ûб,1-б - BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //˿ڵ״̬,0-û,1-б - DWORD dwLocalDisplay;//ʾ״̬,0-,1- - BYTE byAudioChanStatus[MAX_AUDIO_V30];//ʾͨ״̬ 0-δʹã1-ʹ, 0xffЧ + NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V30];//通道的状态 + BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //报警端口的状态,0-没有报警,1-有报警 + BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //报警输出端口的状态,0-没有输出,1-有报警输出 + DWORD dwLocalDisplay;//本地显示状态,0-正常,1-不正常 + BYTE byAudioChanStatus[MAX_AUDIO_V30];//表示语音通道的状态 0-未使用,1-使用中, 0xff无效 BYTE byRes[10]; }NET_DVR_WORKSTATE_V30, *LPNET_DVR_WORKSTATE_V30; -//DVR״̬ +//DVR工作状态 typedef struct { - DWORD dwDeviceStatic; //豸״̬,0-,1-CPUռ̫,85%,2-Ӳ,紮 + DWORD dwDeviceStatic; //设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM]; - NET_DVR_CHANNELSTATE struChanStatic[MAX_CHANNUM];//ͨ״̬ - BYTE byAlarmInStatic[MAX_ALARMIN]; //˿ڵ״̬,0-ûб,1-б - BYTE byAlarmOutStatic[MAX_ALARMOUT]; //˿ڵ״̬,0-û,1-б - DWORD dwLocalDisplay;//ʾ״̬,0-,1- + NET_DVR_CHANNELSTATE struChanStatic[MAX_CHANNUM];//通道的状态 + BYTE byAlarmInStatic[MAX_ALARMIN]; //报警端口的状态,0-没有报警,1-有报警 + BYTE byAlarmOutStatic[MAX_ALARMOUT]; //报警输出端口的状态,0-没有输出,1-有报警输出 + DWORD dwLocalDisplay;//本地显示状态,0-正常,1-不正常 }NET_DVR_WORKSTATE, *LPNET_DVR_WORKSTATE; -//־Ϣ(9000չ) +//日志信息(9000扩展) typedef struct { NET_DVR_TIME strLogTime; - DWORD dwMajorType; // 1-; 2-쳣; 3-; 0xff-ȫ - DWORD dwMinorType;// 0-ȫ; - BYTE sPanelUser[MAX_NAMELEN]; //û - BYTE sNetUser[MAX_NAMELEN];//û - NET_DVR_IPADDR struRemoteHostAddr;//Զַ - DWORD dwParaType;//,9000豸MINOR_START_VT/MINOR_STOP_VTʱʾԽĶӺ - DWORD dwChannel;//ͨ - DWORD dwDiskNumber;//Ӳ̺ - DWORD dwAlarmInPort;//˿ - DWORD dwAlarmOutPort;//˿ + DWORD dwMajorType; //主类型 1-报警; 2-异常; 3-操作; 0xff-全部 + DWORD dwMinorType;//次类型 0-全部; + BYTE sPanelUser[MAX_NAMELEN]; //操作面板的用户名 + BYTE sNetUser[MAX_NAMELEN];//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr;//远程主机地址 + DWORD dwParaType;//参数类型,9000设备MINOR_START_VT/MINOR_STOP_VT时,表示语音对讲的端子号 + DWORD dwChannel;//通道号 + DWORD dwDiskNumber;//硬盘号 + DWORD dwAlarmInPort;//报警输入端口 + DWORD dwAlarmOutPort;//报警输出端口 DWORD dwInfoLen; char sInfo[LOG_INFO_LEN]; }NET_DVR_LOG_V30, *LPNET_DVR_LOG_V30; -//־Ϣ +//日志信息 typedef struct { NET_DVR_TIME strLogTime; - DWORD dwMajorType; // 1-; 2-쳣; 3-; 0xff-ȫ - DWORD dwMinorType;// 0-ȫ; - BYTE sPanelUser[MAX_NAMELEN]; //û - BYTE sNetUser[MAX_NAMELEN];//û - char sRemoteHostAddr[16];//Զַ - DWORD dwParaType;// - DWORD dwChannel;//ͨ - DWORD dwDiskNumber;//Ӳ̺ - DWORD dwAlarmInPort;//˿ - DWORD dwAlarmOutPort;//˿ + DWORD dwMajorType; //主类型 1-报警; 2-异常; 3-操作; 0xff-全部 + DWORD dwMinorType;//次类型 0-全部; + BYTE sPanelUser[MAX_NAMELEN]; //操作面板的用户名 + BYTE sNetUser[MAX_NAMELEN];//网络操作的用户名 + char sRemoteHostAddr[16];//远程主机地址 + DWORD dwParaType;//参数类型 + DWORD dwChannel;//通道号 + DWORD dwDiskNumber;//硬盘号 + DWORD dwAlarmInPort;//报警输入端口 + DWORD dwAlarmOutPort;//报警输出端口 }NET_DVR_LOG, *LPNET_DVR_LOG; typedef struct tagNET_DVR_FIND_LOG_COND { - DWORD dwSelectMode; // 0ȫ1ͣ2ʱ䣻3ʱ - DWORD dwMainType; //־ - DWORD dwSubType; //־ - NET_DVR_TIME_V50 struStartTime; //ʼʱ - NET_DVR_TIME_V50 struEndTime; //ʱ - BOOL bOnlySmart; //ǷֻS.M.A.R.TϢ־ + DWORD dwSelectMode; // 0-全部;1-按类型;2-按时间;3-按时间和类型 + DWORD dwMainType; //日志主类型 + DWORD dwSubType; //日志次类型 + NET_DVR_TIME_V50 struStartTime; //开始时间 + NET_DVR_TIME_V50 struEndTime; //结束时间 + BOOL bOnlySmart; //是否只搜索带S.M.A.R.T信息的日志 BYTE byRes[128]; }NET_DVR_FIND_LOG_COND, *LPNET_DVR_FIND_LOG_COND; typedef struct { - NET_DVR_TIME_V50 struLogTime; //־ʱ - DWORD dwMajorType; // 1-; 2-쳣; 3-; 0xff-ȫ - DWORD dwMinorType; // 0-ȫ; - BYTE sPanelUser[MAX_NAMELEN];//û - BYTE sNetUser[MAX_NAMELEN]; //û - NET_DVR_IPADDR struRemoteHostAddr; //Զַ - DWORD dwParaType; //,9000豸MINOR_START_VT/MINOR_STOP_VTʱʾԽĶӺ - DWORD dwChannel; //ͨ - DWORD dwDiskNumber; //Ӳ̺ - DWORD dwAlarmInPort; //˿ - DWORD dwAlarmOutPort; //˿ + NET_DVR_TIME_V50 struLogTime; //日志发生的时间 + DWORD dwMajorType; //主类型 1-报警; 2-异常; 3-操作; 0xff-全部 + DWORD dwMinorType; //次类型 0-全部; + BYTE sPanelUser[MAX_NAMELEN];//操作面板的用户名 + BYTE sNetUser[MAX_NAMELEN]; //网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr; //远程主机地址 + DWORD dwParaType; //参数类型,9000设备MINOR_START_VT/MINOR_STOP_VT时,表示语音对讲的端子号 + DWORD dwChannel; //通道号 + DWORD dwDiskNumber; //硬盘号 + DWORD dwAlarmInPort; //报警输入端口 + DWORD dwAlarmOutPort; //报警输出端口 DWORD dwInfoLen; char sInfo[LOG_INFO_LEN]; BYTE byRes[128]; }NET_DVR_LOG_V50, *LPNET_DVR_LOG_V50; -/************************DVR־ end***************************/ +/************************DVR日志 end***************************/ -/************************־ begin************************************************/ +/************************动环报警管理主机日志查找 begin************************************************/ typedef struct tagNET_DVR_ALARMHOST_SEARCH_LOG_PARAM { - WORD wMajorType; // - WORD wMinorType; // - NET_DVR_TIME struStartTime; // ʼʱ - NET_DVR_TIME struEndTime; // ʱ - BYTE byRes[8]; // ֽ + WORD wMajorType; // 主类型 + WORD wMinorType; // 次类型 + NET_DVR_TIME struStartTime; // 开始时间 + NET_DVR_TIME struEndTime; // 结束时间 + BYTE byRes[8]; // 保留字节 }NET_DVR_ALARMHOST_SEARCH_LOG_PARAM, LPNET_DVR_ALARMHOST_SEARCH_LOG_PARAM; typedef struct tagNET_DVR_ALARMHOST_LOG_RET { - NET_DVR_TIME struLogTime; // ־ʱ - BYTE sUserName[NAME_LEN]; // û - NET_DVR_IPADDR struIPAddr; // IPַ - WORD wMajorType; // - WORD wMinorType; // - WORD wParam; // + NET_DVR_TIME struLogTime; // 日志时间 + BYTE sUserName[NAME_LEN]; // 操作用户 + NET_DVR_IPADDR struIPAddr; // 操作IP地址 + WORD wMajorType; // 主类型 + WORD wMinorType; // 次类型 + WORD wParam; // 操作参数 BYTE byRes[10]; - DWORD dwInfoLen; // Ϣ - char sInfo[LOG_INFO_LEN]; // Ϣ + DWORD dwInfoLen; // 描述信息长度 + char sInfo[LOG_INFO_LEN]; // 描述信息 }NET_DVR_ALARMHOST_LOG_RET, *LPNET_DVR_ALARMHOST_LOG_RET; -/*************************־ end***********************************************/ +/*************************动环报警管理主机日志查找 end***********************************************/ -//״̬(9000չ) +//报警输出状态(9000扩展) typedef struct { BYTE Output[MAX_ALARMOUT_V30]; }NET_DVR_ALARMOUTSTATUS_V30, *LPNET_DVR_ALARMOUTSTATUS_V30; -//״̬ +//报警输出状态 typedef struct { BYTE Output[MAX_ALARMOUT]; }NET_DVR_ALARMOUTSTATUS, *LPNET_DVR_ALARMOUTSTATUS; -//Ϣ +//交易信息 typedef struct { USHORT m_Year; @@ -12239,15 +12239,15 @@ typedef struct USHORT m_Hour; USHORT m_Minute; USHORT m_Second; - BYTE DeviceName[24]; //豸 - DWORD dwChannelNumer; //ͨ - BYTE CardNumber[32]; // - char cTradeType[12]; // - DWORD dwCash; //׽ + BYTE DeviceName[24]; //设备名称 + DWORD dwChannelNumer; //通道号 + BYTE CardNumber[32]; //卡号 + char cTradeType[12]; //交易类型 + DWORD dwCash; //交易金额 }NET_DVR_TRADEINFO, *LPNET_DVR_TRADEINFO; -//ATMר +//ATM专用 /****************************ATM(begin)***************************/ #define NCR 0 #define DIEBOLD 1 @@ -12276,221 +12276,221 @@ typedef struct #define NXS 24 -/*֡ʽ*/ +/*帧格式*/ typedef struct { - BYTE code[12]; /* */ + BYTE code[12]; /* 代码 */ }NET_DVR_FRAMETYPECODE; -//ATM +//ATM参数 typedef struct { DWORD dwSize; - char sATMIP[16]; /* ATM IPַ */ - DWORD dwATMType; /* ATM */ - DWORD dwInputMode; /* 뷽ʽ 0- 1- 2-ֱ 3-ATM*/ - DWORD dwFrameSignBeginPos; /* ı־λʼλ*/ - DWORD dwFrameSignLength; /* ı־λij */ - BYTE byFrameSignContent[12]; /* ı־λ */ - DWORD dwCardLengthInfoBeginPos; /* ųϢʼλ */ - DWORD dwCardLengthInfoLength; /* ųϢij */ - DWORD dwCardNumberInfoBeginPos; /* Ϣʼλ */ - DWORD dwCardNumberInfoLength; /* Ϣij */ - DWORD dwBusinessTypeBeginPos; /* ͵ʼλ */ - DWORD dwBusinessTypeLength; /* ͵ij */ - NET_DVR_FRAMETYPECODE frameTypeCode[10];/* */ + char sATMIP[16]; /* ATM IP地址 */ + DWORD dwATMType; /* ATM类型 */ + DWORD dwInputMode; /* 输入方式 0-网络侦听 1-网络接收 2-串口直接输入 3-串口ATM命令输入*/ + DWORD dwFrameSignBeginPos; /* 报文标志位的起始位置*/ + DWORD dwFrameSignLength; /* 报文标志位的长度 */ + BYTE byFrameSignContent[12]; /* 报文标志位的内容 */ + DWORD dwCardLengthInfoBeginPos; /* 卡号长度信息的起始位置 */ + DWORD dwCardLengthInfoLength; /* 卡号长度信息的长度 */ + DWORD dwCardNumberInfoBeginPos; /* 卡号信息的起始位置 */ + DWORD dwCardNumberInfoLength; /* 卡号信息的长度 */ + DWORD dwBusinessTypeBeginPos; /* 交易类型的起始位置 */ + DWORD dwBusinessTypeLength; /* 交易类型的长度 */ + NET_DVR_FRAMETYPECODE frameTypeCode[10];/* 类型 */ }NET_DVR_FRAMEFORMAT, *LPNET_DVR_FRAMEFORMAT; -//ATM(9000չ) +//ATM参数(9000扩展) typedef struct { DWORD dwSize; - NET_DVR_IPADDR struATMIP; /* ATM IPַ */ - DWORD dwATMType; /* ATM */ - DWORD dwInputMode; /* 뷽ʽ 0- 1- 2-ֱ 3-ATM*/ - DWORD dwFrameSignBeginPos; /* ı־λʼλ*/ - DWORD dwFrameSignLength; /* ı־λij */ - BYTE byFrameSignContent[12]; /* ı־λ */ - DWORD dwCardLengthInfoBeginPos; /* ųϢʼλ */ - DWORD dwCardLengthInfoLength; /* ųϢij */ - DWORD dwCardNumberInfoBeginPos; /* Ϣʼλ */ - DWORD dwCardNumberInfoLength; /* Ϣij */ - DWORD dwBusinessTypeBeginPos; /* ͵ʼλ */ - DWORD dwBusinessTypeLength; /* ͵ij */ - NET_DVR_FRAMETYPECODE frameTypeCode[10]; /* */ - WORD wATMPort; /* Ų׽˿ں(Э鷽ʽ) ()0xffffʾֵЧ*/ - WORD wProtocolType; /* Э() 0xffffʾֵЧ*/ + NET_DVR_IPADDR struATMIP; /* ATM IP地址 */ + DWORD dwATMType; /* ATM类型 */ + DWORD dwInputMode; /* 输入方式 0-网络侦听 1-网络接收 2-串口直接输入 3-串口ATM命令输入*/ + DWORD dwFrameSignBeginPos; /* 报文标志位的起始位置*/ + DWORD dwFrameSignLength; /* 报文标志位的长度 */ + BYTE byFrameSignContent[12]; /* 报文标志位的内容 */ + DWORD dwCardLengthInfoBeginPos; /* 卡号长度信息的起始位置 */ + DWORD dwCardLengthInfoLength; /* 卡号长度信息的长度 */ + DWORD dwCardNumberInfoBeginPos; /* 卡号信息的起始位置 */ + DWORD dwCardNumberInfoLength; /* 卡号信息的长度 */ + DWORD dwBusinessTypeBeginPos; /* 交易类型的起始位置 */ + DWORD dwBusinessTypeLength; /* 交易类型的长度 */ + NET_DVR_FRAMETYPECODE frameTypeCode[10]; /* 类型 */ + WORD wATMPort; /* 卡号捕捉端口号(网络协议方式) (保留)0xffff表示该值无效*/ + WORD wProtocolType; /* 网络协议类型(保留) 0xffff表示该值无效*/ BYTE byRes[24]; }NET_DVR_FRAMEFORMAT_V30, *LPNET_DVR_FRAMEFORMAT_V30; //SDK_V31 ATM -/**/ +/*过滤设置*/ typedef struct tagNET_DVR_FILTER { - BYTE byEnable; //0,;1, + BYTE byEnable; //0,不启用;1,启用 BYTE byMode; //0,ASCII;1,HEX - BYTE byFrameBeginPos; // ҪĿַʼλ - BYTE byRes; // ֽ - BYTE byFilterText[16]; //ַ - BYTE byRes2[12]; // ֽ + BYTE byFrameBeginPos; // 需要过滤目标字符串起始位置 + BYTE byRes; // 保留字节 + BYTE byFilterText[16]; //过滤字符串 + BYTE byRes2[12]; // 保留字节 }NET_DVR_FILTER, *LPNET_DVR_FILTER; -//ݰ ݰʶ +//数据包分析 数据包标识 typedef struct tagNET_DVR_IDENTIFICAT { - BYTE byStartMode; //ʼַģʽ:0,ASCII;1,HEX - BYTE byEndMode; //ַģʽ0,ASCII;1,HEX - BYTE byRes[2]; //ֽ - NET_DVR_FRAMETYPECODE struStartCode; //ݰʼʶַ - NET_DVR_FRAMETYPECODE struEndCode; //ݰʶַ - BYTE byRes1[12]; //ֽ + BYTE byStartMode; //起始字符模式:0,ASCII;1,HEX + BYTE byEndMode; //结束字符模式:0,ASCII;1,HEX + BYTE byRes[2]; //保留字节 + NET_DVR_FRAMETYPECODE struStartCode; //数据包起始标识字符 + NET_DVR_FRAMETYPECODE struEndCode; //数据包结束标识字符 + BYTE byRes1[12]; //保留字节 }NET_DVR_IDENTIFICAT, *LPNET_DVR_IDENTIFICAT; -typedef struct tagNET_DVR_PACKAGE_LOCATION/*Ϣλ*/ +typedef struct tagNET_DVR_PACKAGE_LOCATION/*报文信息位置*/ { - BYTE byOffsetMode; /*λϢģʽ 0,token(ַ־ģʽ);1,fix̶ģʽ*/ - BYTE byRes1[3]; // ֽ - DWORD dwOffsetPos; /*modeΪ1ʱʹ,̶ƫƴС*/ - NET_DVR_FRAMETYPECODE struTokenCode; /*־λ*/ - BYTE byMultiplierValue; /*־λٴγ*/ - BYTE byEternOffset; /*ַƫ*/ + BYTE byOffsetMode; /*报文位置信息模式 0,token(字符标志模式);1,fix(固定模式)*/ + BYTE byRes1[3]; // 保留字节 + DWORD dwOffsetPos; /*mode为1的时候使用,固定偏移大小*/ + NET_DVR_FRAMETYPECODE struTokenCode; /*标志位*/ + BYTE byMultiplierValue; /*标志位多少次出现*/ + BYTE byEternOffset; /*附加字符偏移量*/ BYTE byCodeMode; /*0,ASCII;1,HEX*/ - BYTE byRes2[9]; //ֽ + BYTE byRes2[9]; //保留字节 }NET_DVR_PACKAGE_LOCATION, *LPNET_DVR_PACKAGE_LOCATION; -typedef struct tagNET_DVR_PACKAGE_LENGTH//Ϣ +typedef struct tagNET_DVR_PACKAGE_LENGTH//报文信息长度 { - BYTE byLengthMode; //ͣ0,ɱ䳤;1,̶;2,(ӿлȡ) - BYTE byRes1[3]; // ֽ - DWORD dwFixLength; //modeΪ1ʱʹ,̶ȴС - DWORD dwMaxLength; //Ϣ󳤶 byLengthModeΪ0ʱʹ - DWORD dwMinLength; //ϢС byLengthModeΪ0ʱʹ - BYTE byEndMode; //ɱ䳤 սģʽ 0,ASCII;1,HEX - BYTE byRes2[3]; //ֽ - NET_DVR_FRAMETYPECODE struEndCode; //ɱ䳤ս - DWORD dwLengthPos; //lengthModeΪ2ʱʹãųڱеλ - DWORD dwLengthLen; //lengthModeΪ2ʱʹãųȵij - BYTE byRes3[8]; // ֽ + BYTE byLengthMode; //长度类型,0,可变长度;1,固定长度;2,自助长度(从卡号中获取) + BYTE byRes1[3]; // 保留字节 + DWORD dwFixLength; //mode为1的时候使用,固定长度大小 + DWORD dwMaxLength; //报文信息最大长度 byLengthMode为0时使用 + DWORD dwMinLength; //报文信息最小长度 byLengthMode为0时使用 + BYTE byEndMode; //可变长度 终结符模式 0,ASCII;1,HEX + BYTE byRes2[3]; //保留字节 + NET_DVR_FRAMETYPECODE struEndCode; //可变长度终结符 + DWORD dwLengthPos; //lengthMode为2的时候使用,卡号长度在报文中的位置 + DWORD dwLengthLen; //lengthMode为2的时候使用,卡号长度的长度 + BYTE byRes3[8]; // 保留字节 }NET_DVR_PACKAGE_LENGTH,* LPNET_DVR_PACKAGE_LENGTH; -typedef struct tagNET_DVR_OSD_POSITION//OSD ӵλ +typedef struct tagNET_DVR_OSD_POSITION//OSD 叠加的位置 { - BYTE byPositionMode; //ӷ񣬹2֣0ʾ1Զ - BYTE byRes1[3]; // ֽ - DWORD dwPosX; //x꣬ӷΪԶʱʹ - DWORD dwPosY; //y꣬ӷΪԶʱʹ - BYTE byRes2[8]; //ֽ + BYTE byPositionMode; //叠加风格,共2种;0,不显示;1,自定义 + BYTE byRes1[3]; // 保留字节 + DWORD dwPosX; //x坐标,叠加风格为自定义时使用 + DWORD dwPosY; //y坐标,叠加风格为自定义时使用 + BYTE byRes2[8]; //保留字节 }NET_DVR_OSD_POSITION, *LPNET_DVR_OSD_POSITION; -typedef struct tagNET_DVR_DATE_FORMAT//ʾʽ +typedef struct tagNET_DVR_DATE_FORMAT//日期显示格式 { BYTE byMonth; //Month,0.mm;1.mmm;2.mmmm BYTE byDay; //Day,0.dd; BYTE byYear; //Year,0.yy;1.yyyy - BYTE byDateForm; //0~5յ - BYTE byRes[20]; // ֽ - char chSeprator[4]; //ָ - char chDisplaySeprator[4]; //ʾָ - BYTE byDisplayForm; //0~53item - BYTE res[27]; // ֽ + BYTE byDateForm; //0~5,年月日的排列组合 + BYTE byRes[20]; // 保留字节 + char chSeprator[4]; //分隔符 + char chDisplaySeprator[4]; //显示分隔符 + BYTE byDisplayForm; //0~5,3个item的排列组合 + BYTE res[27]; // 保留字节 }NET_DVR_DATE_FORMAT, *LPNET_DVR_DATE_FORMAT; -typedef struct tagNET_DVRT_TIME_FORMAT//ʱʾʽ +typedef struct tagNET_DVRT_TIME_FORMAT//时间显示格式 { BYTE byTimeForm; //1. HH MM SS;0. HH MM - BYTE byRes1[23]; // ֽ + BYTE byRes1[23]; // 保留字节 BYTE byHourMode; //0,12;1,24 - BYTE byRes2[3]; // ֽ - char chSeprator[4]; //ķָʱû - char chDisplaySeprator[4]; //ʾָ - BYTE byDisplayForm; //0~53item - BYTE byRes3[3]; // ֽ + BYTE byRes2[3]; // 保留字节 + char chSeprator[4]; //报文分隔符,暂时没用 + char chDisplaySeprator[4]; //显示分隔符 + BYTE byDisplayForm; //0~5,3个item的排列组合 + BYTE byRes3[3]; // 保留字节 BYTE byDisplayHourMode; //0,12;1,24 - BYTE byRes4[19]; // ֽ + BYTE byRes4[19]; // 保留字节 }NET_DVR_TIME_FORMAT, *LPNET_DVR_TIME_FORMAT; typedef struct tagNET_DVR_OVERLAY_CHANNEL { - BYTE byChannel[64];//ӵͨ ÿֽڱʶһͨ byChannel[0]ֵΪ1Ӧͨ10ʾͨ1 - DWORD dwDelayTime; //ʱʱ - BYTE byEnableDelayTime; //Ƿõʱ - BYTE byRes[11]; // ֽ + BYTE byChannel[64];//叠加的通道 每个字节标识一个通道, 例如byChannel[0]值为1对应叠加通道1,0表示不叠加通道1。 + DWORD dwDelayTime; //叠加延时时间 + BYTE byEnableDelayTime; //是否启用叠加延时 + BYTE byRes[11]; // 保留字节 }NET_DVR_OVERLAY_CHANNEL, *LPNET_DVR_OVERLAY_CHANNEL; -// ATM ΪϢ +// ATM 报文行为信息 typedef struct tagNET_DVR_ATM_PACKAGE_ACTION { - NET_DVR_PACKAGE_LOCATION struPackageLocation;// λϢ - NET_DVR_OSD_POSITION struOsdPosition; // OSD λ - NET_DVR_FRAMETYPECODE struActionCode; //Ϊ - NET_DVR_FRAMETYPECODE struPreCode; //ַǰַ - BYTE byActionCodeMode; //Ϊģʽ0,ASCII;1,HEX - BYTE byRes[7]; // ֽ + NET_DVR_PACKAGE_LOCATION struPackageLocation;// 报文位置信息 + NET_DVR_OSD_POSITION struOsdPosition; // OSD 叠加位置 + NET_DVR_FRAMETYPECODE struActionCode; //交易类型行为码 + NET_DVR_FRAMETYPECODE struPreCode; //叠加字符前的字符 + BYTE byActionCodeMode; //交易类型行为码模式0,ASCII;1,HEX + BYTE byRes[7]; // 保留字节 }NET_DVR_ATM_PACKAGE_ACTION, *LPNET_DVR_ATM_PACKAGE_ACTION; -// ATM DATAϢ +// ATM 报文DATA信息 typedef struct tagNET_DVR_ATM_PACKAGE_DATE { - NET_DVR_PACKAGE_LOCATION struPackageLocation;// ڱеλϢ - NET_DVR_DATE_FORMAT struDateForm; //ʾʽ - NET_DVR_OSD_POSITION struOsdPosition; // OSDλϢ - BYTE res[8]; // ֽ + NET_DVR_PACKAGE_LOCATION struPackageLocation;// 日期在报文中的位置信息 + NET_DVR_DATE_FORMAT struDateForm; //日期显示格式 + NET_DVR_OSD_POSITION struOsdPosition; // OSD叠加位置信息 + BYTE res[8]; // 保留字节 }NET_DVR_ATM_PACKAGE_DATE, *LPNET_DVR_ATM_PACKAGE_DATE; -//ATMʱϢ +//ATM报文时间信息 typedef struct tagNET_DVR_ATM_PACKAGE_TIME { - NET_DVR_PACKAGE_LOCATION location; // ʱڱеλϢ - NET_DVR_TIME_FORMAT struTimeForm; // ʱʾʽ - NET_DVR_OSD_POSITION struOsdPosition;// OSD λϢ - BYTE byRes[8]; // ֽ + NET_DVR_PACKAGE_LOCATION location; // 时间在报文中的位置信息 + NET_DVR_TIME_FORMAT struTimeForm; // 时间显示格式 + NET_DVR_OSD_POSITION struOsdPosition;// OSD 叠加位置信息 + BYTE byRes[8]; // 保留字节 }NET_DVR_ATM_PACKAGE_TIME, *LPNET_DVR_ATM_PACKAGE_TIME; -// ATM Ϣţ׽ţ +// ATM 其他报文信息(卡号,交易金额,交易序号) typedef struct tagNET_DVR_ATM_PACKAGE_OTHERS { - NET_DVR_PACKAGE_LOCATION struPackageLocation; //λϢ - NET_DVR_PACKAGE_LENGTH struPackageLength; //Ϣ - NET_DVR_OSD_POSITION struOsdPosition; // OSDλϢ - NET_DVR_FRAMETYPECODE struPreCode; //ַǰַ - BYTE res[8]; //ֽ + NET_DVR_PACKAGE_LOCATION struPackageLocation; //报文位置信息 + NET_DVR_PACKAGE_LENGTH struPackageLength; //长度信息 + NET_DVR_OSD_POSITION struOsdPosition; // OSD叠加位置信息 + NET_DVR_FRAMETYPECODE struPreCode; //叠加字符前的字符 + BYTE res[8]; //保留字节 }NET_DVR_ATM_PACKAGE_OTHERS, *LPNET_DVR_ATM_PACKAGE_OTHERS; -//ûԶЭ +//用户自定义协议 typedef struct tagNET_DVR_ATM_USER_DEFINE_PROTOCOL { - NET_DVR_IDENTIFICAT struIdentification; //ı־ - NET_DVR_FILTER struFilter; //ݰ - NET_DVR_ATM_PACKAGE_OTHERS struCardNoPara; //ӿ - NET_DVR_ATM_PACKAGE_ACTION struTradeActionPara[MAX_ACTION_TYPE]; //ӽΪ 0-9 ζӦInCard OutCard OverLay SetTime GetStatus Query WithDraw Deposit ChanPass Transfer - NET_DVR_ATM_PACKAGE_OTHERS struAmountPara; //ӽ׽ - NET_DVR_ATM_PACKAGE_OTHERS struSerialNoPara; //ӽ - NET_DVR_OVERLAY_CHANNEL struOverlayChan; //ͨ - NET_DVR_ATM_PACKAGE_DATE struRes1; //ڣ - NET_DVR_ATM_PACKAGE_TIME struRes2; //ʱ䣬 - BYTE byRes3[124]; // + NET_DVR_IDENTIFICAT struIdentification; //报文标志 + NET_DVR_FILTER struFilter; //数据包过滤设置 + NET_DVR_ATM_PACKAGE_OTHERS struCardNoPara; //叠加卡号设置 + NET_DVR_ATM_PACKAGE_ACTION struTradeActionPara[MAX_ACTION_TYPE]; //叠加交易行为设置 0-9 依次对应InCard OutCard OverLay SetTime GetStatus Query WithDraw Deposit ChanPass Transfer + NET_DVR_ATM_PACKAGE_OTHERS struAmountPara; //叠加交易金额设置 + NET_DVR_ATM_PACKAGE_OTHERS struSerialNoPara; //叠加交易序号设置 + NET_DVR_OVERLAY_CHANNEL struOverlayChan; //叠加通道设置 + NET_DVR_ATM_PACKAGE_DATE struRes1; //叠加日期,保留 + NET_DVR_ATM_PACKAGE_TIME struRes2; //叠加时间,保留 + BYTE byRes3[124]; //保留 }NET_DVR_ATM_USER_DEFINE_PROTOCOL, *LPNET_DVR_ATM_USER_DEFINE_PROTOCOL; typedef struct tagNET_DVR_ATM_FRAMEFORMAT_V30 { - DWORD dwSize; //ṹС - BYTE byEnable; /*Ƿ0,;1,*/ - BYTE byInputMode; /**뷽ʽ:0-1Э顢2-ڼ3-Э*/ - BYTE byRes1[34]; //ֽ - NET_DVR_IPADDR struAtmIp; /*ATM IP ʱʹ */ - WORD wAtmPort; /* Э鷽ʽʱʹ*/ - BYTE byRes2[2]; // ֽ - DWORD dwAtmType; /*ATMЭͣNET_DVR_ATM_PROTOCOLṹлȡΪԶʱʹûԶЭ*/ - NET_DVR_ATM_USER_DEFINE_PROTOCOL struAtmUserDefineProtocol; //ûԶЭ飬ATMΪԶʱҪʹøö + DWORD dwSize; //结构大小 + BYTE byEnable; /*是否启用0,不启用;1,启用*/ + BYTE byInputMode; /**输入方式:0-网络监听、1网络协议、2-串口监听、3-串口协议*/ + BYTE byRes1[34]; //保留字节 + NET_DVR_IPADDR struAtmIp; /*ATM 机IP 网络监听时使用 */ + WORD wAtmPort; /* 网络协议方式时是使用*/ + BYTE byRes2[2]; // 保留字节 + DWORD dwAtmType; /*ATM协议类型,从NET_DVR_ATM_PROTOCOL结构中获取,如果类型为自定义时使用用户自定义协议*/ + NET_DVR_ATM_USER_DEFINE_PROTOCOL struAtmUserDefineProtocol; //用户自定义协议,当ATM类型为自定时需要使用该定义 BYTE byRes3[8]; }NET_DVR_ATM_FRAMEFORMAT_V30, *LPNET_DVR_ATM_FRAMEFORMAT_V30; -//ATMЭ +//ATM协议类型 typedef enum _ATM_PROTO_TYPE_ { ATM_PROTO_NCR = 0,//NCR @@ -12502,46 +12502,46 @@ typedef enum _ATM_PROTO_TYPE_ ATM_PROTO_HITACHI = 7,//HITACHI ATM_PROTO_SMI = 8,//SMI ATM_PROTO_BULL = 9,//BULL - ATM_PROTO_YIHUA = 10,// - ATM_PROTO_LIDE = 11,// - ATM_PROTO_GDYT = 12,//ͨ + ATM_PROTO_YIHUA = 10,//怡化 + ATM_PROTO_LIDE = 11,//立德 + ATM_PROTO_GDYT = 12,//广电运通 ATM_PROTO_MINI_BANL = 13,//Mini-Banl - ATM_PROTO_GUANGLI = 14,// - ATM_PROTO_DONGXIN = 15,// - ATM_PROTO_CHENTONG = 16,//ͨ - ATM_PROTO_NANTIAN = 17,// - ATM_PROTO_XIAOXING = 18,// - ATM_PROTO_GZYY = 19,// - ATM_PROTO_QHTLT = 20,//̩ + ATM_PROTO_GUANGLI = 14,//广利 + ATM_PROTO_DONGXIN = 15,//东信 + ATM_PROTO_CHENTONG = 16,//辰通 + ATM_PROTO_NANTIAN = 17,//南天 + ATM_PROTO_XIAOXING = 18,//晓星 + ATM_PROTO_GZYY = 19,//广州御银 + ATM_PROTO_QHTLT = 20,//青湖泰利特 ATM_PROTO_DRS918 = 21,//DRS918 ATM_PROTO_KALATEL = 22,//KALATEL ATM_PROTO_NCR_2 = 23,//NCR_2 ATM_PROTO_NXS = 24,//NXS - ATM_PROTO_ICBC = 25,// - ATM_PROTO_PSBC = 26,//й - ATM_PROTO_CUSTOM = 1025//Զ + ATM_PROTO_ICBC = 25,//工商银行 + ATM_PROTO_PSBC = 26,//中国邮政储蓄银行 + ATM_PROTO_CUSTOM = 1025//自定义 }ATM_PROTO_TYPE; typedef struct tagNET_DVR_ATM_PROTO_TYPE { - DWORD dwAtmType; //ATMЭͣͬʱΪ ATM еdwAtmType ԶʱΪ1025 - char chDesc[ATM_DESC_LEN]; //ATMЭ -}NET_DVR_ATM_PROTO_TYPE, *LPNET_DVR_ATM_PROTO_TYPE; //ЭϢݽṹ + DWORD dwAtmType; //ATM协议类型,同时作为索引序号 ATM 配置中的dwAtmType 自定义时为1025 + char chDesc[ATM_DESC_LEN]; //ATM协议简单描述 +}NET_DVR_ATM_PROTO_TYPE, *LPNET_DVR_ATM_PROTO_TYPE; //协议信息数据结构 -typedef struct tagNET_DVR_ATM_PROTO_LIST //ATM Эб +typedef struct tagNET_DVR_ATM_PROTO_LIST //ATM 协议列表 { - DWORD dwAtmProtoNum; // Эбĸ - NET_DVR_ATM_PROTO_TYPE struAtmProtoType[MAX_ATM_PROTOCOL_NUM]; //ЭбϢ + DWORD dwAtmProtoNum; // 协议列表的个数 + NET_DVR_ATM_PROTO_TYPE struAtmProtoType[MAX_ATM_PROTOCOL_NUM]; //协议列表信息 }NET_DVR_ATM_PROTO_LIST, *LPNET_DVR_ATM_PROTO_LIST; typedef struct tagNET_DVR_ATM_PROTOCOL { DWORD dwSize; - NET_DVR_ATM_PROTO_LIST struNetListenList; // Э - NET_DVR_ATM_PROTO_LIST struSerialListenList; //ڼЭ - NET_DVR_ATM_PROTO_LIST struNetProtoList; //Э - NET_DVR_ATM_PROTO_LIST struSerialProtoList; //Э - NET_DVR_ATM_PROTO_TYPE struCustomProto; //ԶЭ + NET_DVR_ATM_PROTO_LIST struNetListenList; // 网络监听协议描述 + NET_DVR_ATM_PROTO_LIST struSerialListenList; //串口监听协议描述 + NET_DVR_ATM_PROTO_LIST struNetProtoList; //网络协议描述 + NET_DVR_ATM_PROTO_LIST struSerialProtoList; //串口协议描述 + NET_DVR_ATM_PROTO_TYPE struCustomProto; //自定义协议 }NET_DVR_ATM_PROTOCOL, *LPNET_DVR_ATM_PROTOCOL; // SDK_V31 @@ -12549,114 +12549,114 @@ typedef struct tagNET_DVR_ATM_PROTOCOL //DS-6001D Decoder typedef struct { - BYTE byEncoderIP[16]; //豸ӵķIP - BYTE byEncoderUser[16]; //豸ӵķû - BYTE byEncoderPasswd[16]; //豸ӵķ - BYTE bySendMode; //豸ӷģʽ - BYTE byEncoderChannel; //豸ӵķͨ - WORD wEncoderPort; //豸ӵķĶ˿ں - BYTE reservedData[4]; // + BYTE byEncoderIP[16]; //解码设备连接的服务器IP + BYTE byEncoderUser[16]; //解码设备连接的服务器的用户名 + BYTE byEncoderPasswd[16]; //解码设备连接的服务器的密码 + BYTE bySendMode; //解码设备连接服务器的连接模式 + BYTE byEncoderChannel; //解码设备连接的服务器的通道号 + WORD wEncoderPort; //解码设备连接的服务器的端口号 + BYTE reservedData[4]; //保留 }NET_DVR_DECODERINFO, *LPNET_DVR_DECODERINFO; typedef struct { - BYTE byEncoderIP[16]; //豸ӵķIP - BYTE byEncoderUser[16]; //豸ӵķû - BYTE byEncoderPasswd[16]; //豸ӵķ - BYTE byEncoderChannel; //豸ӵķͨ - BYTE bySendMode; //豸ӵķģʽ - WORD wEncoderPort; //豸ӵķĶ˿ں - DWORD dwConnectState; //豸ӷ״̬ - BYTE reservedData[4]; // + BYTE byEncoderIP[16]; //解码设备连接的服务器IP + BYTE byEncoderUser[16]; //解码设备连接的服务器的用户名 + BYTE byEncoderPasswd[16]; //解码设备连接的服务器的密码 + BYTE byEncoderChannel; //解码设备连接的服务器的通道号 + BYTE bySendMode; //解码设备连接的服务器的连接模式 + WORD wEncoderPort; //解码设备连接的服务器的端口号 + DWORD dwConnectState; //解码设备连接服务器的状态 + BYTE reservedData[4]; //保留 }NET_DVR_DECODERSTATE, *LPNET_DVR_DECODERSTATE; -/*豸붨*/ +/*解码设备控制码定义*/ #define NET_DEC_STARTDEC 1 #define NET_DEC_STOPDEC 2 #define NET_DEC_STOPCYCLE 3 #define NET_DEC_CONTINUECYCLE 4 -/*ӵͨ*/ +/*连接的通道配置*/ typedef struct { - char sDVRIP[16]; /* DVR IPַ */ - WORD wDVRPort; /* ˿ں */ - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - BYTE byChannel; /* ͨ */ - BYTE byLinkMode; /* ģʽ */ - BYTE byLinkType; /* 0 1 */ + char sDVRIP[16]; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byChannel; /* 通道号 */ + BYTE byLinkMode; /* 连接模式 */ + BYTE byLinkType; /* 连接类型 0-主码流 1-子码流 */ }NET_DVR_DECCHANINFO, *LPNET_DVR_DECCHANINFO; -/*ÿͨ*/ +/*每个解码通道的配置*/ typedef struct { - BYTE byPoolChans; /*ÿ·ͨϵѭͨ, 4ͨ 0ʾûн*/ + BYTE byPoolChans; /*每路解码通道上的循环通道数量, 最多4通道 0表示没有解码*/ NET_DVR_DECCHANINFO struchanConInfo[MAX_DECPOOLNUM]; - BYTE byEnablePoll; /*ǷѲ 0- 1-*/ - BYTE byPoolTime; /*Ѳʱ 0- 1-10 2-15 3-20 4-30 5-45 6-1 7-2 8-5 */ + BYTE byEnablePoll; /*是否轮巡 0-否 1-是*/ + BYTE byPoolTime; /*轮巡时间 0-保留 1-10秒 2-15秒 3-20秒 4-30秒 5-45秒 6-1分钟 7-2分钟 8-5分钟 */ }NET_DVR_DECINFO, *LPNET_DVR_DECINFO; -/*豸*/ +/*整个设备解码配置*/ typedef struct { DWORD dwSize; - DWORD dwDecChanNum; /*ͨ*/ + DWORD dwDecChanNum; /*解码通道的数量*/ NET_DVR_DECINFO struDecInfo[MAX_DECNUM]; }NET_DVR_DECCFG, *LPNET_DVR_DECCFG; //2005-08-01 -/* 豸͸ͨ */ +/* 解码设备透明通道设置 */ typedef struct { - DWORD dwEnableTransPort; /* Ƿ͸ͨ 0 1*/ - char sDecoderIP[16]; /* DVR IPַ */ - WORD wDecoderPort; /* ˿ں */ - WORD wDVRTransPort; /* ǰDVRǴ485/2321ʾ232,2ʾ485 */ + DWORD dwEnableTransPort; /* 是否启动透明通道 0-不启用 1-启用*/ + char sDecoderIP[16]; /* DVR IP地址 */ + WORD wDecoderPort; /* 端口号 */ + WORD wDVRTransPort; /* 配置前端DVR是从485/232输出,1表示232串口,2表示485串口 */ char cReserve[4]; }NET_DVR_PORTINFO, *LPNET_DVR_PORTINFO; typedef struct { DWORD dwSize; - NET_DVR_PORTINFO struTransPortInfo[MAX_TRANSPARENTNUM]; /* 0ʾ232 1ʾ485 */ + NET_DVR_PORTINFO struTransPortInfo[MAX_TRANSPARENTNUM]; /* 数组0表示232 数组1表示485 */ }NET_DVR_PORTCFG, *LPNET_DVR_PORTCFG; -/* ļط */ +/* 控制网络文件回放 */ typedef struct { DWORD dwSize; - char sDecoderIP[16]; /* DVR IPַ */ - WORD wDecoderPort; /* ˿ں */ - WORD wLoadMode; /* طģʽ 1 2ʱ */ + char sDecoderIP[16]; /* DVR IP地址 */ + WORD wDecoderPort; /* 端口号 */ + WORD wLoadMode; /* 回放下载模式 1-按名字 2-按时间 */ union { - BYTE byFile[100]; /* طŵļ */ + BYTE byFile[100]; /* 回放的文件名 */ struct { DWORD dwChannel; - BYTE sUserName[NAME_LEN]; /*Ƶû*/ - BYTE sPassword[PASSWD_LEN]; /* */ - NET_DVR_TIME struStartTime; /* ʱطŵĿʼʱ */ - NET_DVR_TIME struStopTime; /* ʱطŵĽʱ */ + BYTE sUserName[NAME_LEN]; /*请求视频用户名*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + NET_DVR_TIME struStartTime; /* 按时间回放的开始时间 */ + NET_DVR_TIME struStopTime; /* 按时间回放的结束时间 */ }bytime; }mode_size; }NET_DVR_PLAYREMOTEFILE, *LPNET_DVR_PLAYREMOTEFILE; -/*ǰ豸״̬*/ +/*当前设备解码连接状态*/ typedef struct { - DWORD dwWorkType; /*ʽ1Ѳ2̬ӽ롢3ļط 4ʱط*/ - char sDVRIP[16]; /*ӵ豸ip*/ - WORD wDVRPort; /*Ӷ˿ں*/ - BYTE byChannel; /* ͨ */ - BYTE byLinkMode; /* ģʽ */ - DWORD dwLinkType; /* 0 1*/ + DWORD dwWorkType; /*工作方式:1:轮巡、2:动态连接解码、3:文件回放下载 4:按时间回放下载*/ + char sDVRIP[16]; /*连接的设备ip*/ + WORD wDVRPort; /*连接端口号*/ + BYTE byChannel; /* 通道号 */ + BYTE byLinkMode; /* 连接模式 */ + DWORD dwLinkType; /*连接类型 0-主码流 1-子码流*/ union { struct { - BYTE sUserName[NAME_LEN]; /*Ƶû*/ - BYTE sPassword[PASSWD_LEN]; /* */ + BYTE sUserName[NAME_LEN]; /*请求视频用户名*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ char cReserve[52]; }userInfo; struct @@ -12666,10 +12666,10 @@ typedef struct struct { DWORD dwChannel; - BYTE sUserName[NAME_LEN]; /*Ƶû*/ - BYTE sPassword[PASSWD_LEN]; /* */ - NET_DVR_TIME struStartTime; /* ʱطŵĿʼʱ */ - NET_DVR_TIME struStopTime; /* ʱطŵĽʱ */ + BYTE sUserName[NAME_LEN]; /*请求视频用户名*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + NET_DVR_TIME struStartTime; /* 按时间回放的开始时间 */ + NET_DVR_TIME struStopTime; /* 按时间回放的结束时间 */ }timeInfo; }objectInfo; }NET_DVR_DECCHANSTATUS, *LPNET_DVR_DECCHANSTATUS; @@ -12681,117 +12681,117 @@ typedef struct }NET_DVR_DECSTATUS, *LPNET_DVR_DECSTATUS; /*****************************DS-6001D/F(end)***************************/ -//ַ(ӽṹ) +//单字符参数(子结构) typedef struct { - WORD wShowString; // ԤͼǷʾַ,0-ʾ,1-ʾ ԤС704*576,ַĴСΪ32*32 - WORD wStringSize; /* ַijȣܴ44ַ */ - WORD wShowStringTopLeftX; /* ַʾλõx */ - WORD wShowStringTopLeftY; /* ַʾλõy */ - char sString[44]; /* Ҫʾַ */ + WORD wShowString; // 预览的图象上是否显示字符,0-不显示,1-显示 整个预览画面大小704*576,单个字符的大小为32*32 + WORD wStringSize; /* 该行字符的长度,不能大于44个字符 */ + WORD wShowStringTopLeftX; /* 字符显示位置的x坐标 */ + WORD wShowStringTopLeftY; /* 字符名称显示位置的y坐标 */ + char sString[44]; /* 要显示的字符内容 */ }NET_DVR_SHOWSTRINGINFO, *LPNET_DVR_SHOWSTRINGINFO; -//ַ(9000չ) +//叠加字符(9000扩展) typedef struct { DWORD dwSize; - NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM_V30]; /* Ҫʾַ */ + NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM_V30]; /* 要显示的字符内容 */ }NET_DVR_SHOWSTRING_V30, *LPNET_DVR_SHOWSTRING_V30; -//ַչ(8ַ) +//叠加字符扩展(8条字符) typedef struct { DWORD dwSize; - NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM_EX]; /* Ҫʾַ */ + NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM_EX]; /* 要显示的字符内容 */ }NET_DVR_SHOWSTRING_EX, *LPNET_DVR_SHOWSTRING_EX; -//ַ +//叠加字符 typedef struct { DWORD dwSize; - NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM]; /* Ҫʾַ */ + NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM]; /* 要显示的字符内容 */ }NET_DVR_SHOWSTRING, *LPNET_DVR_SHOWSTRING; -/****************************DS9000ṹ(begin)******************************/ +/****************************DS9000新增结构(begin)******************************/ /* -EMAILṹ +EMAIL参数结构 */ typedef struct { DWORD dwSize; - BYTE sAccount[NAME_LEN]; /* ˺*/ - BYTE sPassword[MAX_EMAIL_PWD_LEN]; /* */ + BYTE sAccount[NAME_LEN]; /* 账号*/ + BYTE sPassword[MAX_EMAIL_PWD_LEN]; /*密码 */ struct { - BYTE sName[NAME_LEN]; /* */ - BYTE sAddress[MAX_EMAIL_ADDR_LEN]; /* ˵ַ */ + BYTE sName[NAME_LEN]; /* 发件人姓名 */ + BYTE sAddress[MAX_EMAIL_ADDR_LEN]; /* 发件人地址 */ }struSender; - BYTE sSmtpServer[MAX_EMAIL_ADDR_LEN]; /* smtp */ - BYTE sPop3Server[MAX_EMAIL_ADDR_LEN]; /* pop3 */ + BYTE sSmtpServer[MAX_EMAIL_ADDR_LEN]; /* smtp服务器 */ + BYTE sPop3Server[MAX_EMAIL_ADDR_LEN]; /* pop3服务器 */ struct { - BYTE sName[NAME_LEN]; /* ռ */ - BYTE sAddress[MAX_EMAIL_ADDR_LEN]; /* ռ˵ַ */ - }struReceiver[3]; /* 3ռ */ - BYTE byAttachment; /* Ƿ */ - BYTE bySmtpServerVerify; /* ͷҪ֤ */ + BYTE sName[NAME_LEN]; /* 收件人姓名 */ + BYTE sAddress[MAX_EMAIL_ADDR_LEN]; /* 收件人地址 */ + }struReceiver[3]; /* 最多可以设置3个收件人 */ + BYTE byAttachment; /* 是否带附件 */ + BYTE bySmtpServerVerify; /* 发送服务器要求身份验证 */ BYTE byMailInterval; /* mail interval */ - BYTE byEnableSSL; //sslǷ9000_1.1 - WORD wSmtpPort; //gmail465ͨΪ25 - BYTE byEnableTLS; /*TLSǷ*/ - BYTE byStartTLS; /*ǷStartTLS*/ - BYTE byRes[72]; /**/ + BYTE byEnableSSL; //ssl是否启用9000_1.1 + WORD wSmtpPort; //gmail的465,普通的为25 + BYTE byEnableTLS; /*TLS是否启用*/ + BYTE byStartTLS; /*是否启用StartTLS*/ + BYTE byRes[72]; /*保留*/ } NET_DVR_EMAILCFG_V30, *LPNET_DVR_EMAILCFG_V30; /* -DVRʵѲݽṹ +DVR实现巡航数据结构 */ typedef struct { DWORD dwSize; - BYTE byPresetNo[CRUISE_MAX_PRESET_NUMS]; /* Ԥõ */ - BYTE byCruiseSpeed[CRUISE_MAX_PRESET_NUMS]; /* Ѳٶ */ - WORD wDwellTime[CRUISE_MAX_PRESET_NUMS]; /* ͣʱ */ - BYTE byEnableThisCruise; /* Ƿ */ + BYTE byPresetNo[CRUISE_MAX_PRESET_NUMS]; /* 预置点号 */ + BYTE byCruiseSpeed[CRUISE_MAX_PRESET_NUMS]; /* 巡航速度 */ + WORD wDwellTime[CRUISE_MAX_PRESET_NUMS]; /* 停留时间 */ + BYTE byEnableThisCruise; /* 是否启用 */ BYTE res[15]; }NET_DVR_CRUISE_PARA, *LPNET_DVR_CRUISE_PARA; -/****************************DS9000ṹ(end)******************************/ +/****************************DS9000新增结构(end)******************************/ -//ʱ +//时间点 typedef struct { - DWORD dwMonth; // 0-11ʾ1-12 - DWORD dwWeekNo; //ڼ 01 12 23 34 4һ - DWORD dwWeekDate; //ڼ 0 1һ 2ڶ 3 4 5 6 - DWORD dwHour; //Сʱ ʼʱ023 ʱ123 - DWORD dwMin; // 059 + DWORD dwMonth; //月 0-11表示1-12个月 + DWORD dwWeekNo; //第几周 0-第1周 1-第2周 2-第3周 3-第4周 4-最后一周 + DWORD dwWeekDate; //星期几 0-星期日 1-星期一 2-星期二 3-星期三 4-星期四 5-星期五 6-星期六 + DWORD dwHour; //小时 开始时间0-23 结束时间1-23 + DWORD dwMin; //分 0-59 }NET_DVR_TIMEPOINT; -//ʱ +//夏令时参数 typedef struct { DWORD dwSize; - DWORD dwZoneIndex; //ӦòʹNET_DVR_NTPPARA еcTimeDifferenceH cTimeDifferenceM ʱ˴ûȡֵ䣬ûṩ༭ - BYTE byRes1[12]; // - DWORD dwEnableDST; //Ƿʱ 0 1 - BYTE byDSTBias; //ʱƫֵ30min, 60min, 90min, 120min, ԷӼƣԭʼֵ + DWORD dwZoneIndex; //应用层软件使用NET_DVR_NTPPARA 中的cTimeDifferenceH 或cTimeDifferenceM 来设置时区,此处用获取的值填充,不对用户提供输入编辑框 + BYTE byRes1[12]; //保留 + DWORD dwEnableDST; //是否启用夏时制 0-不启用 1-启用 + BYTE byDSTBias; //夏令时偏移值,30min, 60min, 90min, 120min, 以分钟计,传递原始数值 BYTE byRes2[3]; - NET_DVR_TIMEPOINT struBeginPoint; //ʱƿʼʱ - NET_DVR_TIMEPOINT struEndPoint; //ʱֹͣʱ + NET_DVR_TIMEPOINT struBeginPoint; //夏时制开始时间 + NET_DVR_TIMEPOINT struEndPoint; //夏时制停止时间 }NET_DVR_ZONEANDDST, *LPNET_DVR_ZONEANDDST; -//ͼƬ +//图片质量 typedef struct { -/*ע⣺ͼѹֱΪVGAʱ֧0=CIF, 1=QCIF, 2=D1ץͼ -ֱΪ3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA,7=XVGA, 8=HD900p - ֵ֧ǰֱʵץͼ*/ +/*注意:当图像压缩分辨率为VGA时,支持0=CIF, 1=QCIF, 2=D1抓图, +当分辨率为3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA,7=XVGA, 8=HD900p + 仅支持当前分辨率的抓图*/ - /* ͨȡ - 0-CIF 1-QCIF 2-D1 3-UXGA(1600x1200), 4-SVGA(800x600),5-HD720p(1280x720) - 6-VGA 7-XVGA 8-HD900p 9-HD1080 10-2560*1920 - 11-1600*304 12-2048*1536 13-2448*2048, 14-2448*1200 15-2448*800 - 16-XGA(1024*768), 17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080i, 20-576*576 + /* 可以通过能力集获取 + 0-CIF, 1-QCIF, 2-D1, 3-UXGA(1600x1200), 4-SVGA(800x600),5-HD720p(1280x720), + 6-VGA, 7-XVGA, 8-HD900p, 9-HD1080, 10-2560*1920, + 11-1600*304, 12-2048*1536, 13-2448*2048, 14-2448*1200, 15-2448*800, + 16-XGA(1024*768), 17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080i, 20-576*576, 21-1536*1536, 22-1920*1920, 23-320*240, 24-720*720, 25-1024*768, 26-1280*1280, 27-1600*600, 28-2048*768, 29-160*120, 55-3072*2048, 64-3840*2160, 70-2560*1440, 75-336*256, @@ -12799,70 +12799,70 @@ typedef struct 127-480*272, 128-512*272, 161-288*320, 162-144*176, 163-480*640, 164-240*320, 165-120*160, 166-576*720, 167-720*1280, 168-576*960, 180-180*240, 181-360*480, 182-540*720, 183-720*960, 184-960*1280, - 185-1080*1440, 215-1080*720(ռλδ), 216-360x640(ռλδ),245-576*704(ռλδ) + 185-1080*1440, 215-1080*720(占位,未测试), 216-360x640(占位,未测试),245-576*704(占位,未测试) 500-384*288, - 0xff-Auto(ʹõǰֱ) + 0xff-Auto(使用当前码流分辨率) */ WORD wPicSize; - WORD wPicQuality; /* ͼƬϵ 0- 1-Ϻ 2-һ */ + WORD wPicQuality; /* 图片质量系数 0-最好 1-较好 2-一般 */ }NET_DVR_JPEGPARA, *LPNET_DVR_JPEGPARA; -//ṹ +//区域框结构 typedef struct tagNET_VCA_RECT { - float fX; //߽ϽǵX, 0.000~1 - float fY; //߽ϽǵY, 0.000~1 - float fWidth; //߽Ŀ, 0.000~1 - float fHeight; //߽ĸ߶, 0.000~1 + float fX; //边界框左上角点的X轴坐标, 0.000~1 + float fY; //边界框左上角点的Y轴坐标, 0.000~1 + float fWidth; //边界框的宽度, 0.000~1 + float fHeight; //边界框的高度, 0.000~1 }NET_VCA_RECT, *LPNET_VCA_RECT; typedef struct tagNET_DVR_JPEGPICTURE_WITH_APPENDDATA { DWORD dwSize; - DWORD dwChannel;//ͨ - DWORD dwJpegPicLen;//JpegͼƬ - char *pJpegPicBuff;//JpegͼƬָ - DWORD dwJpegPicWidth; // ͼ - DWORD dwJpegPicHeight; //ͼ߶ - DWORD dwP2PDataLen;//ȫݳ - char *pP2PDataBuff; //ȫָ - BYTE byIsFreezedata;//Ƿݶ 0- 1- + DWORD dwChannel;//通道号 + DWORD dwJpegPicLen;//Jpeg图片长度 + char *pJpegPicBuff;//Jpeg图片指针 + DWORD dwJpegPicWidth; // 图像宽度 + DWORD dwJpegPicHeight; //图像高度 + DWORD dwP2PDataLen;//全屏测温数据长度 + char *pP2PDataBuff; //全屏测温数据指针 + BYTE byIsFreezedata;//是否数据冻结 0-否 1-是 BYTE byRes1[3]; - DWORD dwVisiblePicLen;//ɼͼƬ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char *pVisiblePicBuff;//ɼͼƬָ + DWORD dwVisiblePicLen;//可见光图片长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char *pVisiblePicBuff;//可见光图片指针 #else - char *pVisiblePicBuff;//ɼͼƬָ + char *pVisiblePicBuff;//可见光图片指针 BYTE byRes2[4]; #endif - NET_VCA_RECT struThermalValidRect;//ȳЧ - NET_VCA_RECT struVisibleValidRect;//ɼЧ + NET_VCA_RECT struThermalValidRect;//热成像有效区域 + NET_VCA_RECT struVisibleValidRect;//可见光有效区域 BYTE byRes[208]; }NET_DVR_JPEGPICTURE_WITH_APPENDDATA, *LPNET_DVR_JPEGPICTURE_WITH_APPENDDATA; -//ץͼ +//抓图参数 typedef struct { NET_DVR_JPEGPARA struParam; - BYTE byPicFormat; // 豸ץͼͼƬʽ 0-Jpeg + BYTE byPicFormat; // 设备抓图图片格式 0-Jpeg /* - 豸ץͼ: - 0-豸ͨץͼ1-ӥ۱궨ͼƬFPJAˢ»ȡͼƬ ʱ3min,2-FlashлȡѴӥ۱궨ͼƬ, - 3-ȡԲͼƬ,4-רøץͼ,5-ȡװȫչͼͼ + 设备抓图类型: + 0-设备通用抓图,1-鹰眼标定图片(FPJA重启刷新获取图片 最长超时3min),2-从Flash中获取已存在鹰眼标定图片, + 3-获取鱼眼相机圆形图片,4-专用高清抓图,5-获取鱼眼相机壁装全景展开图(矩形图) */ BYTE byCapturePicType; - BYTE bySceneID; //0-֧֣1-12-2 + BYTE bySceneID; //0-不支持,1-场景1,2-场景2 …… BYTE byRes[253]; }NET_DVR_PICPARAM_V50, *LPNET_DVR_PICPARAM_V50; /* aux video out parameter */ -// +//辅助输出参数配置 typedef struct { DWORD dwSize; - DWORD dwAlarmOutChan; /* ѡ񱨾󱨾ͨлʱ䣺1ͨ: 0:/1:1/2:2/3:3/4:4 */ - DWORD dwAlarmChanSwitchTime; /* :1 - 10:10 */ - DWORD dwAuxSwitchTime[MAX_AUXOUT]; /* лʱ: 0-л,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s */ - BYTE byAuxOrder[MAX_AUXOUT][MAX_WINDOW]; /* Ԥ˳, 0xffʾӦĴڲԤ */ + DWORD dwAlarmOutChan; /* 选择报警弹出大报警通道切换时间:1画面的输出通道: 0:主输出/1:辅1/2:辅2/3:辅3/4:辅4 */ + DWORD dwAlarmChanSwitchTime; /* :1秒 - 10:10秒 */ + DWORD dwAuxSwitchTime[MAX_AUXOUT]; /* 辅助输出切换时间: 0-不切换,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s */ + BYTE byAuxOrder[MAX_AUXOUT][MAX_WINDOW]; /* 辅助输出预览顺序, 0xff表示相应的窗口不预览 */ }NET_DVR_AUXOUTCFG, *LPNET_DVR_AUXOUTCFG; @@ -12871,68 +12871,68 @@ typedef struct { BYTE sNTPServer[64]; /* Domain Name or IP addr of NTP server */ WORD wInterval; /* adjust time interval(hours) */ - BYTE byEnableNTP; /* enable NPT client 0-no1-yes*/ - signed char cTimeDifferenceH; /* ʱ׼ʱ Сʱƫ-12 ... +13 */ - signed char cTimeDifferenceM;/* ʱ׼ʱ ƫ0, 30, 45*/ + BYTE byEnableNTP; /* enable NPT client 0-no,1-yes*/ + signed char cTimeDifferenceH; /* 与国际标准时间的 小时偏移-12 ... +13 */ + signed char cTimeDifferenceM;/* 与国际标准时间的 分钟偏移0, 30, 45*/ BYTE res1; - WORD wNtpPort; /* ntp server port 9000 豸ĬΪ123*/ + WORD wNtpPort; /* ntp server port 9000新增 设备默认为123*/ BYTE res2[8]; }NET_DVR_NTPPARA, *LPNET_DVR_NTPPARA; //ddns typedef struct { - BYTE sUsername[NAME_LEN]; /* DDNS˺û/ */ + BYTE sUsername[NAME_LEN]; /* DDNS账号用户名/密码 */ BYTE sPassword[PASSWD_LEN]; - BYTE sDomainName[64]; /* */ - BYTE byEnableDDNS; /*ǷӦ 0-1-*/ + BYTE sDomainName[64]; /* 域名 */ + BYTE byEnableDDNS; /*是否应用 0-否,1-是*/ BYTE res[15]; }NET_DVR_DDNSPARA, *LPNET_DVR_DDNSPARA; typedef struct { - BYTE byHostIndex; /* 0-˽DDNS 1Dyndns 2PeanutHull()*/ - BYTE byEnableDDNS; /*ǷӦDDNS 0-1-*/ - WORD wDDNSPort; /* DDNS˿ں */ - BYTE sUsername[NAME_LEN]; /* DDNSû*/ - BYTE sPassword[PASSWD_LEN]; /* DDNS */ - BYTE sDomainName[MAX_DOMAIN_NAME]; /* 豸䱸ַ */ - BYTE sServerName[MAX_DOMAIN_NAME]; /* DDNS ӦķַIPַ */ + BYTE byHostIndex; /* 0-私有DDNS 1-Dyndns 2-PeanutHull(花生壳)*/ + BYTE byEnableDDNS; /*是否应用DDNS 0-否,1-是*/ + WORD wDDNSPort; /* DDNS端口号 */ + BYTE sUsername[NAME_LEN]; /* DDNS用户名*/ + BYTE sPassword[PASSWD_LEN]; /* DDNS密码 */ + BYTE sDomainName[MAX_DOMAIN_NAME]; /* 设备配备的域名地址 */ + BYTE sServerName[MAX_DOMAIN_NAME]; /* DDNS 对应的服务器地址,可以是IP地址或域名 */ BYTE byRes[16]; }NET_DVR_DDNSPARA_EX, *LPNET_DVR_DDNSPARA_EX; -//9000չ +//9000扩展 typedef struct { BYTE byEnableDDNS; - BYTE byHostIndex;/*0-IPServer 1Dyndns 2PeanutHull()3- NO-IP, 4- hiDDNS*/ + BYTE byHostIndex;/*0-IPServer 1-Dyndns 2-PeanutHull(花生壳),3- NO-IP, 4- hiDDNS*/ BYTE byRes1[2]; struct { - BYTE sUsername[NAME_LEN]; /* DDNS˺û*/ - BYTE sPassword[PASSWD_LEN]; /* */ - BYTE sDomainName[MAX_DOMAIN_NAME]; /* 豸䱸ַ */ - BYTE sServerName[MAX_DOMAIN_NAME]; /* DDNSЭӦķַIPַ */ - WORD wDDNSPort; /* ˿ں */ - WORD wCountryID; //ұţbyHostIndex = 4ʱЧ0ʾĬ - BYTE byStatus; /* DDNS״ֻ̬ - 0- - 1-ӷʧ(connServerfail) - 2-Ϣʧ(solveServerMesFail) - 3-ʧ(connHeartSrvfail) - 4-Ϣʧ(solveHeartSrvMesFail) - 5-ʧ(connHostSrvfail) - 6-Ϣʧ(solveHostSrvMesFail) - 7-DDNS״̬(updateSuccess) - 8-δ(disable) - 9-עɹ(registHostSuccess) - 10-DNSô(DNSSrvError) - 11-ռ(DomainConflict) - 12-()Ϸ(invalidAlias) - 13-Ȩʧ(authenticationFail) - 14-ע(registServerError) - 15-עʧ(registFail) + BYTE sUsername[NAME_LEN]; /* DDNS账号用户名*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE sDomainName[MAX_DOMAIN_NAME]; /* 设备配备的域名地址 */ + BYTE sServerName[MAX_DOMAIN_NAME]; /* DDNS协议对应的服务器地址,可以是IP地址或域名 */ + WORD wDDNSPort; /* 端口号 */ + WORD wCountryID; //国家编号,仅在byHostIndex = 4时有效,0表示默认 + BYTE byStatus; /* DDNS运行状态(只读), + 0-无意义 + 1-连接服务器失败(connServerfail)、 + 2-解析服务器消息失败(solveServerMesFail)、 + 3-连接心跳服务器失败(connHeartSrvfail)、 + 4-解析心跳服务器消息失败(solveHeartSrvMesFail)、 + 5-连接域名服务器失败(connHostSrvfail)、 + 6-解析域名服务器消息失败(solveHostSrvMesFail)、 + 7-DDNS状态正常(updateSuccess)、 + 8-未启用(disable)、 + 9-注册域名成功(registHostSuccess)、 + 10-DNS服务器配置错误(DNSSrvError)、 + 11-域名被占用(DomainConflict)、 + 12-别名(域名)不合法(invalidAlias)、 + 13-鉴权失败(authenticationFail) + 14-注册服务器错误(registServerError) + 15-注册失败(registFail) */ BYTE byRes[7]; } struDDNS[MAX_DDNS_NUMS]; @@ -12942,27 +12942,27 @@ typedef struct //email typedef struct { - BYTE sUsername[64]; /* ʼ˺/ */ + BYTE sUsername[64]; /* 邮件账号/密码 */ BYTE sPassword[64]; BYTE sSmtpServer[64]; BYTE sPop3Server[64]; BYTE sMailAddr[64]; /* email */ - BYTE sEventMailAddr1[64]; /* ϴ/쳣ȵemail */ + BYTE sEventMailAddr1[64]; /* 上传报警/异常等的email */ BYTE sEventMailAddr2[64]; BYTE res[16]; }NET_DVR_EMAILPARA, *LPNET_DVR_EMAILPARA; -// +//网络参数配置 typedef struct { DWORD dwSize; - char sDNSIp[16]; /* DNSַ */ - NET_DVR_NTPPARA struNtpClientParam; /* NTP */ - NET_DVR_DDNSPARA struDDNSClientParam; /* DDNS */ - BYTE res[464]; /* */ + char sDNSIp[16]; /* DNS服务器地址 */ + NET_DVR_NTPPARA struNtpClientParam; /* NTP参数 */ + NET_DVR_DDNSPARA struDDNSClientParam; /* DDNS参数 */ + BYTE res[464]; /* 保留 */ }NET_DVR_NETAPPCFG, *LPNET_DVR_NETAPPCFG; -//nfsṹ +//nfs结构配置 typedef struct { char sNfsHostIPAddr[16]; @@ -12977,29 +12977,29 @@ typedef struct typedef struct tagNET_DVR_ISCSI_CFG { - DWORD dwSize; // ṹС - WORD wVrmPort; // VRM ˿ - BYTE byEnable; // Ƿ ISCSI洢 - BYTE byRes[69]; // ֽ - NET_DVR_IPADDR struVrmAddr; // VRM ipַ 16λ + DWORD dwSize; // 结构大小 + WORD wVrmPort; // VRM 监听端口 + BYTE byEnable; // 是否启用 ISCSI存储 + BYTE byRes[69]; // 保留字节 + NET_DVR_IPADDR struVrmAddr; // VRM ip地址 16位 char chNvtIndexCode[64]; //nvt index Code }NET_DVR_ISCSI_CFG, *LPNET_DVR_ISCSI_CFG; -//Ѳ(˽IPר) +//巡航点配置(私有IP快球专用) typedef struct { - BYTE PresetNum; //Ԥõ - BYTE Dwell; //ͣʱ - BYTE Speed; //ٶ - BYTE Reserve; // + BYTE PresetNum; //预置点 + BYTE Dwell; //停留时间 + BYTE Speed; //速度 + BYTE Reserve; //保留 }NET_DVR_CRUISE_POINT, *LPNET_DVR_CRUISE_POINT; typedef struct { - NET_DVR_CRUISE_POINT struCruisePoint[32]; //֧32Ѳ + NET_DVR_CRUISE_POINT struCruisePoint[32]; //最大支持32个巡航点 }NET_DVR_CRUISE_RET, *LPNET_DVR_CRUISE_RET; -/************************************·(begin)***************************************/ +/************************************多路解码器(begin)***************************************/ typedef struct { DWORD dwSize; @@ -13010,205 +13010,205 @@ typedef struct typedef struct { - char sDVRIP[16]; /* DVR IPַ */ - WORD wDVRPort; /* ˿ں */ - BYTE byChannel; /* ͨ */ - BYTE byTransProtocol; /* Э 0-TCP, 1-UDP */ - BYTE byTransMode; /* ģʽ 0 1*/ + char sDVRIP[16]; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byChannel; /* 通道号 */ + BYTE byTransProtocol; /* 传输协议类型 0-TCP, 1-UDP */ + BYTE byTransMode; /* 传输码流模式 0-主码流 1-子码流*/ BYTE byRes[3]; - BYTE sUserName[NAME_LEN]; /* ½ʺ */ - BYTE sPassword[PASSWD_LEN]; /* */ + BYTE sUserName[NAME_LEN]; /* 布防主机登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /* 布防主机密码 */ }NET_DVR_MATRIX_DECINFO, *LPNET_DVR_MATRIX_DECINFO; -///ֹ̬ͣ +//启动/停止动态解码 typedef struct { DWORD dwSize; - NET_DVR_MATRIX_DECINFO struDecChanInfo; /* ̬ͨϢ */ + NET_DVR_MATRIX_DECINFO struDecChanInfo; /* 动态解码通道信息 */ }NET_DVR_MATRIX_DYNAMIC_DEC, *LPNET_DVR_MATRIX_DYNAMIC_DEC; typedef struct { DWORD dwSize; - DWORD dwIsLinked; /* ͨ״̬ 0 1 2 3-ڽ */ + DWORD dwIsLinked; /* 解码通道状态 0-休眠 1-正在连接 2-已连接 3-正在解码 */ DWORD dwStreamCpRate; /* Stream copy rate, X kbits/second */ - char cRes[64]; /* */ + char cRes[64]; /* 保留 */ }NET_DVR_MATRIX_DEC_CHAN_STATUS, *LPNET_DVR_MATRIX_DEC_CHAN_STATUS; typedef struct { DWORD dwSize; - NET_DVR_MATRIX_DECINFO struDecChanInfo; /* ͨϢ */ - DWORD dwDecState; /* 0-̬ 1ѭ 2ʱط 3ļط */ - NET_DVR_TIME StartTime; /* ʱطſʼʱ */ - NET_DVR_TIME StopTime; /* ʱطֹͣʱ */ - char sFileName[128]; /* ļطļ */ + NET_DVR_MATRIX_DECINFO struDecChanInfo; /* 解码通道信息 */ + DWORD dwDecState; /* 0-动态解码 1-循环解码 2-按时间回放 3-按文件回放 */ + NET_DVR_TIME StartTime; /* 按时间回放开始时间 */ + NET_DVR_TIME StopTime; /* 按时间回放停止时间 */ + char sFileName[128]; /* 按文件回放文件名 */ }NET_DVR_MATRIX_DEC_CHAN_INFO, *LPNET_DVR_MATRIX_DEC_CHAN_INFO; -//ӵͨ 2007-11-05 +//连接的通道配置 2007-11-05 typedef struct { - DWORD dwEnable; /* Ƿ 0 1*/ - NET_DVR_MATRIX_DECINFO struDecChanInfo; /* ѲͨϢ */ + DWORD dwEnable; /* 是否启用 0-否 1-启用*/ + NET_DVR_MATRIX_DECINFO struDecChanInfo; /* 轮巡解码通道信息 */ }NET_DVR_MATRIX_DECCHANINFO, *LPNET_DVR_MATRIX_DECCHANINFO; -//2007-11-05 ÿͨ +//2007-11-05 新增每个解码通道的配置 typedef struct { DWORD dwSize; - DWORD dwPoolTime; /*Ѳʱ */ + DWORD dwPoolTime; /*轮巡时间 */ NET_DVR_MATRIX_DECCHANINFO struchanConInfo[MAX_CYCLE_CHAN]; }NET_DVR_MATRIX_LOOP_DECINFO, *LPNET_DVR_MATRIX_LOOP_DECINFO; //2007-12-22 typedef struct { - BYTE baudrate; /* */ - BYTE databits; /* λ */ - BYTE stopbits; /* ֹͣλ */ - BYTE parity; /* żУλ */ - BYTE flowcontrol; /* */ + BYTE baudrate; /* 波特率 */ + BYTE databits; /* 数据位 */ + BYTE stopbits; /* 停止位 */ + BYTE parity; /* 奇偶校验位 */ + BYTE flowcontrol; /* 流控 */ BYTE res[3]; }TTY_CONFIG, *LPTTY_CONFIG; typedef struct { - BYTE byTranChanEnable; /* ǰ͸ͨǷ 0ر 1 */ + BYTE byTranChanEnable; /* 当前透明通道是否打开 0:关闭 1:打开 */ /* - * ·1485ڣ1232ڶΪ͸ͨ,豸ŷ£ + * 多路解码器本地有1个485串口,1个232串口都可以作为透明通道,设备号分配如下: * 0 RS485 * 1 RS232 Console */ BYTE byLocalSerialDevice; /* Local serial device */ /* - * Զ̴,һRS232һRS485 - * 1ʾ232 - * 2ʾ485 + * 远程串口输出还是两个,一个RS232,一个RS485 + * 1表示232串口 + * 2表示485串口 */ BYTE byRemoteSerialDevice; /* Remote output serial device */ - BYTE res1; /* */ + BYTE res1; /* 保留 */ char sRemoteDevIP[16]; /* Remote Device IP */ WORD wRemoteDevPort; /* Remote Net Communication Port */ - BYTE res2[2]; /* */ + BYTE res2[2]; /* 保留 */ TTY_CONFIG RemoteSerialDevCfg; }NET_DVR_MATRIX_TRAN_CHAN_INFO, *LPNET_DVR_MATRIX_TRAN_CHAN_INFO; typedef struct { DWORD dwSize; - BYTE by232IsDualChan; /* ·232͸ͨȫ˫ ȡֵ1MAX_SERIAL_NUM */ - BYTE by485IsDualChan; /* ·485͸ͨȫ˫ ȡֵ1MAX_SERIAL_NUM */ - BYTE res[2]; /* */ - NET_DVR_MATRIX_TRAN_CHAN_INFO struTranInfo[MAX_SERIAL_NUM];/*ͬʱֽ֧MAX_SERIAL_NUM͸ͨ*/ + BYTE by232IsDualChan; /* 设置哪路232透明通道是全双工的 取值1到MAX_SERIAL_NUM */ + BYTE by485IsDualChan; /* 设置哪路485透明通道是全双工的 取值1到MAX_SERIAL_NUM */ + BYTE res[2]; /* 保留 */ + NET_DVR_MATRIX_TRAN_CHAN_INFO struTranInfo[MAX_SERIAL_NUM];/*同时支持建立MAX_SERIAL_NUM个透明通道*/ }NET_DVR_MATRIX_TRAN_CHAN_CONFIG, *LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG; //2007-12-24 Merry Christmas Eve... typedef struct { DWORD dwSize; - char sDVRIP[16]; /* DVR IPַ */ - WORD wDVRPort; /* ˿ں */ - BYTE byChannel; /* ͨ */ + char sDVRIP[16]; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byChannel; /* 通道号 */ BYTE byReserve; - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - DWORD dwPlayMode; /* 0ļ 1ʱ*/ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwPlayMode; /* 0-按文件 1-按时间*/ NET_DVR_TIME StartTime; NET_DVR_TIME StopTime; char sFileName[128]; }NET_DVR_MATRIX_DEC_REMOTE_PLAY, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY; -/* ļ */ -#define NET_DVR_PLAYSTART 1//ʼ -#define NET_DVR_PLAYSTOP 2//ֹͣ -#define NET_DVR_PLAYPAUSE 3//ͣ -#define NET_DVR_PLAYRESTART 4//ָ -#define NET_DVR_PLAYFAST 5// -#define NET_DVR_PLAYSLOW 6// -#define NET_DVR_PLAYNORMAL 7//ٶ -#define NET_DVR_PLAYSTARTAUDIO 9// -#define NET_DVR_PLAYSTOPAUDIO 10//ر -#define NET_DVR_PLAYSETPOS 12//ıļطŵĽ -#define NET_DVR_RESETBUFFER 37 //վ뻺Զ̻طļ +/* 文件播放命令 */ +#define NET_DVR_PLAYSTART 1//开始播放 +#define NET_DVR_PLAYSTOP 2//停止播放 +#define NET_DVR_PLAYPAUSE 3//暂停播放 +#define NET_DVR_PLAYRESTART 4//恢复播放 +#define NET_DVR_PLAYFAST 5//快放 +#define NET_DVR_PLAYSLOW 6//慢放 +#define NET_DVR_PLAYNORMAL 7//正常速度 +#define NET_DVR_PLAYSTARTAUDIO 9//打开声音 +#define NET_DVR_PLAYSTOPAUDIO 10//关闭声音 +#define NET_DVR_PLAYSETPOS 12//改变文件回放的进度 +#define NET_DVR_RESETBUFFER 37 //清空矩阵解码缓冲区(远程回放文件) typedef struct { DWORD dwSize; - DWORD dwPlayCmd; /* ļ*/ - DWORD dwCmdParam; /* */ + DWORD dwPlayCmd; /* 播放命令 见文件播放命令*/ + DWORD dwCmdParam; /* 播放命令参数 */ }NET_DVR_MATRIX_DEC_REMOTE_PLAY_CONTROL, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_CONTROL; typedef struct { DWORD dwSize; - DWORD dwCurMediaFileLen; /* ǰŵýļ */ - DWORD dwCurMediaFilePosition; /* ǰļIJλ */ - DWORD dwCurMediaFileDuration; /* ǰļʱ */ - DWORD dwCurPlayTime; /* ǰѾŵʱ */ - DWORD dwCurMediaFIleFrames; /* ǰļ֡ */ - DWORD dwCurDataType; /* ǰͣ19-ļͷ20-ݣ 21-Ž־ */ + DWORD dwCurMediaFileLen; /* 当前播放的媒体文件长度 */ + DWORD dwCurMediaFilePosition; /* 当前播放文件的播放位置 */ + DWORD dwCurMediaFileDuration; /* 当前播放文件的总时间 */ + DWORD dwCurPlayTime; /* 当前已经播放的时间 */ + DWORD dwCurMediaFIleFrames; /* 当前播放文件的总帧数 */ + DWORD dwCurDataType; /* 当前传输的数据类型,19-文件头,20-流数据, 21-播放结束标志 */ BYTE res[72]; }NET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS; -//2009-4-11 added by likui ·new +//2009-4-11 added by likui 多路解码器new typedef struct tagNET_MATRIX_PASSIVEMODE { - WORD wTransProtol; //Э飬0-TCP, 1-UDP, 2-MCAST - WORD wPassivePort; //UDP˿, TCPʱĬ - NET_DVR_IPADDR struMcastIP; //TCP,UDPʱЧ, MCASTʱΪಥַ - BYTE byStreamType;/* ݲģʽ:REAL_TIME_STREAM(1)ʵʱ,RECORD_STREAM(2)ļ */ + WORD wTransProtol; //传输协议,0-TCP, 1-UDP, 2-MCAST + WORD wPassivePort; //UDP端口, TCP时默认 + NET_DVR_IPADDR struMcastIP; //TCP,UDP时无效, MCAST时为多播地址 + BYTE byStreamType;/* 数据播放模式:REAL_TIME_STREAM(1)实时流,RECORD_STREAM(2)文件流 */ BYTE byRes[7]; }NET_DVR_MATRIX_PASSIVEMODE, *LPNET_DVR_MATRIX_PASSIVEMODE; typedef struct tagNET_DVR_MATRIX_TRAN_CHAN_INFO_V30 { - BYTE byTranChanEnable; /* ǰ͸ͨǷ 0ر 1 */ + BYTE byTranChanEnable; /* 当前透明通道是否打开 0:关闭 1:打开 */ BYTE byLocalSerialDevice; /* Local serial device */ /* - * ·1485ڣ1232ڶΪ͸ͨ,豸ŷ£ + * 多路解码器本地有1个485串口,1个232串口都可以作为透明通道,设备号分配如下: * 0 RS485 * 1 RS232 Console * 2 Dual Scom */ BYTE byRemoteSerialDevice; /* Remote output serial device */ /* - * Զ̴,һRS232һRS485 - * 1 ʾ232 - * 2 ʾ485 + * 远程串口输出还是两个,一个RS232,一个RS485 + * 1 表示232串口 + * 2 表示485串口 */ - BYTE byRes1; /* */ + BYTE byRes1; /* 保留 */ NET_DVR_IPADDR struRemoteDevIP; /* Remote Device IP */ WORD wRemoteDevPort; /* Remote Net Communication Port */ - BYTE byIsEstablished; /* ͸ͨɹ־0-ûгɹ1-ɹ */ - BYTE byRes2; /* */ + BYTE byIsEstablished; /* 透明通道建立成功标志,0-没有成功,1-建立成功 */ + BYTE byRes2; /* 保留 */ TTY_CONFIG RemoteSerialDevCfg; BYTE byUsername[NAME_LEN]; BYTE byPassword[PASSWD_LEN]; - DWORD dwLocalSerialNo; /* ش */ - DWORD dwRemoteSerialNo; /* Զ̴ */ + DWORD dwLocalSerialNo; /* 本地串口 */ + DWORD dwRemoteSerialNo; /* 远程串口 */ BYTE byRes3[8]; } NET_DVR_MATRIX_TRAN_CHAN_INFO_V30,*LPNET_DVR_MATRIX_TRAN_CHAN_INFO_V30; typedef struct tagMATRIX_TRAN_CHAN_CONFIG { DWORD dwSize; - BYTE by232IsDualChan; /* ·232͸ͨȫ˫ ȡֵ1MAX_SERIAL_NUM */ - BYTE by485IsDualChan; /* ·485͸ͨȫ˫ ȡֵ1MAX_SERIAL_NUM */ - BYTE byRes[2]; /* */ - NET_DVR_MATRIX_TRAN_CHAN_INFO_V30 struTranInfo[MAX_SERIAL_NUM]; /*ͬʱֽ֧MAX_SERIAL_NUM͸ͨ*/ + BYTE by232IsDualChan; /* 设置哪路232透明通道是全双工的 取值1到MAX_SERIAL_NUM */ + BYTE by485IsDualChan; /* 设置哪路485透明通道是全双工的 取值1到MAX_SERIAL_NUM */ + BYTE byRes[2]; /* 保留 */ + NET_DVR_MATRIX_TRAN_CHAN_INFO_V30 struTranInfo[MAX_SERIAL_NUM]; /*同时支持建立MAX_SERIAL_NUM个透明通道*/ }NET_DVR_MATRIX_TRAN_CHAN_CONFIG_V30,*LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG_V30; typedef struct { - DWORD dwEnable; /* Ƿ 0 1*/ + DWORD dwEnable; /* 是否启用 0-否 1-启用*/ NET_DVR_STREAM_MEDIA_SERVER_CFG streamMediaServerCfg; - NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* ѲͨϢ */ + NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* 轮巡解码通道信息 */ }NET_DVR_MATRIX_CHAN_INFO_V30,*LPNET_DVR_CYC_SUR_CHAN_ELE_V30; typedef struct tagMATRIX_LOOP_DECINFO_V30 { DWORD dwSize; - DWORD dwPoolTime; /*Ѳ*/ + DWORD dwPoolTime; /*轮巡间隔*/ NET_DVR_MATRIX_CHAN_INFO_V30 struchanConInfo[MAX_CYCLE_CHAN_V30]; BYTE byRes[16]; } NET_DVR_MATRIX_LOOP_DECINFO_V30,*LPNET_DVR_MATRIX_LOOP_DECINFO_V30; @@ -13217,18 +13217,18 @@ typedef struct tagMATRIX_LOOP_DECINFO_V30 typedef struct tagDEC_MATRIX_CHAN_INFO_V30 { DWORD dwSize; - NET_DVR_STREAM_MEDIA_SERVER_CFG streamMediaServerCfg; /*ý*/ - NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* ͨϢ */ - DWORD dwDecState; /* 0-̬ 1ѭ 2ʱط 3ļط */ - NET_DVR_TIME StartTime; /* ʱطſʼʱ */ - NET_DVR_TIME StopTime; /* ʱطֹͣʱ */ - char sFileName[128]; /* ļطļ */ - DWORD dwGetStreamMode; /*ȡģʽ:1-2-*/ + NET_DVR_STREAM_MEDIA_SERVER_CFG streamMediaServerCfg; /*流媒体服务器配置*/ + NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* 解码通道信息 */ + DWORD dwDecState; /* 0-动态解码 1-循环解码 2-按时间回放 3-按文件回放 */ + NET_DVR_TIME StartTime; /* 按时间回放开始时间 */ + NET_DVR_TIME StopTime; /* 按时间回放停止时间 */ + char sFileName[128]; /* 按文件回放文件名 */ + DWORD dwGetStreamMode; /*取流模式:1-主动,2-被动*/ NET_DVR_MATRIX_PASSIVEMODE struPassiveMode; BYTE byRes[32]; }NET_DVR_MATRIX_DEC_CHAN_INFO_V30,*LPNET_DVR_MATRIX_DEC_CHAN_INFO_V30; -#define MAX_RESOLUTIONNUM 64 //ֱֵ֧Ŀ +#define MAX_RESOLUTIONNUM 64 //支持的最大分辨率数目 typedef struct tagNET_DVR_MATRIX_ABILITY { DWORD dwSize; @@ -13236,34 +13236,34 @@ typedef struct tagNET_DVR_MATRIX_ABILITY BYTE byStartChan; BYTE byVGANums; BYTE byBNCNums; - BYTE byVGAWindowMode[8][12]; /*VGAֵ֧ĴģʽVGA1ɻ*/ - BYTE byBNCWindowMode[4]; /*BNCֵ֧Ĵģʽ*/ + BYTE byVGAWindowMode[8][12]; /*VGA支持的窗口模式,VGA1可能由混合输出*/ + BYTE byBNCWindowMode[4]; /*BNC支持的窗口模式*/ BYTE byDspNums; - BYTE byHDMINums;//HDMIʾͨ25ʼ - BYTE byDVINums;//DVIʾͨ29ʼ + BYTE byHDMINums;//HDMI显示通道个数(从25开始) + BYTE byDVINums;//DVI显示通道个数(从29开始) BYTE byRes1[13]; - BYTE bySupportResolution[MAX_RESOLUTIONNUM];//öٶ,һֽڴһֱ//֧֣1֧֣0֧ - BYTE byHDMIWindowMode[4][8];//HDMIֵ֧Ĵģʽ - BYTE byDVIWindowMode[4][8];//DVIֵ֧Ĵģʽ + BYTE bySupportResolution[MAX_RESOLUTIONNUM];//按照上面的枚举定义,一个字节代表一个分辨率是//否支持,1:支持,0:不支持 + BYTE byHDMIWindowMode[4][8];//HDMI支持的窗口模式 + BYTE byDVIWindowMode[4][8];//DVI支持的窗口模式 BYTE byRes2[24]; }NET_DVR_MATRIX_ABILITY, *LPNET_DVR_MATRIX_ABILITY; -//ϴlogoṹ +//上传logo结构 typedef struct tagNET_DVR_DISP_LOGOCFG { - DWORD dwCorordinateX; //ͼƬʾX - DWORD dwCorordinateY; //ͼƬʾY - WORD wPicWidth; //ͼƬ - WORD wPicHeight; //ͼƬ + DWORD dwCorordinateX; //图片显示区域X坐标 + DWORD dwCorordinateY; //图片显示区域Y坐标 + WORD wPicWidth; //图片宽 + WORD wPicHeight; //图片高 BYTE byRes1[4]; - BYTE byFlash; //Ƿ˸1-˸0-˸ - BYTE byTranslucent; //Ƿ͸1-͸0-͸ - BYTE byRes2[6]; // - DWORD dwLogoSize;//LOGOСBMPļͷ + BYTE byFlash; //是否闪烁1-闪烁,0-不闪烁 + BYTE byTranslucent; //是否半透明1-半透明,0-不半透明 + BYTE byRes2[6]; //保留 + DWORD dwLogoSize;//LOGO大小,包括BMP的文件头 }NET_DVR_DISP_LOGOCFG,*LPNET_DVR_DISP_LOGOCFG; -/**/ -#define NET_DVR_ENCODER_UNKOWN 0 /*δ֪ʽ*/ -#define NET_DVR_ENCODER_H264 1 /*˽ 264*/ +/*编码类型*/ +#define NET_DVR_ENCODER_UNKOWN 0 /*未知编码格式*/ +#define NET_DVR_ENCODER_H264 1 /*私有 264*/ #define NET_DVR_ENCODER_S264 2 /*Standard H264*/ #define NET_DVR_ENCODER_MPEG4 3 /*MPEG4*/ #define NET_DVR_ORIGINALSTREAM 4 /*Original Stream*/ @@ -13275,39 +13275,39 @@ typedef struct tagNET_DVR_DISP_LOGOCFG #define NET_DVR_ENCODER_SMART264 10/*Smart 264*/ #define NET_DVR_ENCODER_SMART265 11/*Smart 265*/ -/* ʽ */ -#define NET_DVR_STREAM_TYPE_UNKOWN 0 /*δ֪ʽ*/ -#define NET_DVR_STREAM_TYPE_PRIVT 1 /*˽иʽ*/ -#define NET_DVR_STREAM_TYPE_TS 7 /* TS */ -#define NET_DVR_STREAM_TYPE_PS 8 /* PS */ -#define NET_DVR_STREAM_TYPE_RTP 9 /* RTP */ -#define NET_DVR_STREAM_TYPE_ORIGIN 10 //δ(Ƶۺƽ̨ϵͳ) +/* 打包格式 */ +#define NET_DVR_STREAM_TYPE_UNKOWN 0 /*未知打包格式*/ +#define NET_DVR_STREAM_TYPE_PRIVT 1 /*私有格式*/ +#define NET_DVR_STREAM_TYPE_TS 7 /* TS打包 */ +#define NET_DVR_STREAM_TYPE_PS 8 /* PS打包 */ +#define NET_DVR_STREAM_TYPE_RTP 9 /* RTP打包 */ +#define NET_DVR_STREAM_TYPE_ORIGIN 10 //未打包(视频综合平台解码子系统用) -/*ͨ״̬*/ +/*解码通道状态*/ typedef struct { - BYTE byDecodeStatus; /*ǰ״̬:0:δ1*/ - BYTE byStreamType; /**/ - BYTE byPacketType; /*ʽ*/ - BYTE byRecvBufUsage; /*ջʹ*/ - BYTE byDecBufUsage; /*뻺ʹ*/ - BYTE byFpsDecV; /*Ƶ֡*/ - BYTE byFpsDecA; /*Ƶ֡*/ - BYTE byCpuLoad; /*DSP CPUʹ*/ + BYTE byDecodeStatus; /*当前状态:0:未启动,1:启动解码*/ + BYTE byStreamType; /*码流类型*/ + BYTE byPacketType; /*打包方式*/ + BYTE byRecvBufUsage; /*接收缓冲使用率*/ + BYTE byDecBufUsage; /*解码缓冲使用率*/ + BYTE byFpsDecV; /*视频解码帧率*/ + BYTE byFpsDecA; /*音频解码帧率*/ + BYTE byCpuLoad; /*DSP CPU使用率*/ BYTE byRes1[4]; - DWORD dwDecodedV; /*Ƶ֡*/ - DWORD dwDecodedA; /*Ƶ֡*/ - WORD wImgW; /*ǰͼС,*/ - WORD wImgH; // - BYTE byVideoFormat; /*Ƶʽ:0-NON,NTSC--1,PAL--2*/ + DWORD dwDecodedV; /*解码的视频帧*/ + DWORD dwDecodedA; /*解码的音频帧*/ + WORD wImgW; /*解码器当前的图像大小,宽*/ + WORD wImgH; //高 + BYTE byVideoFormat; /*视频制式:0-NON,NTSC--1,PAL--2*/ BYTE byRes2[3]; - DWORD dwDecChan; /*ȡȫͨ״̬ʱЧʱ0*/ + DWORD dwDecChan; /*获取全部解码通道状态时有效,设置时可填0*/ BYTE byRes3[20]; }NET_DVR_MATRIX_CHAN_STATUS, *LPNET_DVR_MATRIX_CHAN_STATUS; -/*ʾͨ״̬*/ -#define NET_DVR_MAX_DISPREGION 16 /*ÿʾͨʾĴ*/ -//ֱ +/*显示通道状态*/ +#define NET_DVR_MAX_DISPREGION 16 /*每个显示通道最多可以显示的窗口*/ +//分辨率 // typedef enum { @@ -13355,13 +13355,13 @@ typedef enum YPbPr_DECSVR_MODE_1080I_60HZ }VGA_MODE; -//֡ʶ +//低帧率定义 #define LOW_DEC_FPS_1_2 51 #define LOW_DEC_FPS_1_4 52 #define LOW_DEC_FPS_1_8 53 #define LOW_DEC_FPS_1_16 54 -/*Ƶʽ׼*/ +/*视频制式标准*/ typedef enum { VS_NON = 0, @@ -13372,20 +13372,20 @@ typedef enum typedef struct tagNET_DVR_VGA_DISP_CHAN_CFG { DWORD dwSize; - BYTE byAudio; /*ƵǷ,0-1-*/ - BYTE byAudioWindowIdx; /*ƵӴ*/ - BYTE byVgaResolution; /*VGAķֱ*/ + BYTE byAudio; /*音频是否开启,0-否,1-是*/ + BYTE byAudioWindowIdx; /*音频开启子窗口*/ + BYTE byVgaResolution; /*VGA的分辨率*/ BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ - DWORD dwWindowMode; /*ģʽ,ȡ,Ŀǰ֧1,2,4,9,16*/ - BYTE byJoinDecChan[MAX_WINDOWS];/*ӴڹĽͨ*/ - BYTE byEnlargeStatus; /*ǷڷŴ״̬0Ŵ1Ŵ*/ - BYTE byEnlargeSubWindowIndex;//ŴӴں + DWORD dwWindowMode; /*画面模式,从能力集获取,目前支持1,2,4,9,16*/ + BYTE byJoinDecChan[MAX_WINDOWS];/*各个子窗口关联的解码通道*/ + BYTE byEnlargeStatus; /*是否处于放大状态,0:不放大,1:放大*/ + BYTE byEnlargeSubWindowIndex;//放大的子窗口号 union { BYTE byRes[16]; struct { - /*ӴڶӦͨӦĽϵͳIJλ(Ƶۺƽ̨нϵͳЧ)*/ + /*各个子窗口对应解码通道所对应的解码子系统的槽位号(对于视频综合平台中解码子系统有效)*/ BYTE byJoinDecoderId[MAX_WINDOWS]; }struVideoPlatform; struct @@ -13393,100 +13393,100 @@ typedef struct tagNET_DVR_VGA_DISP_CHAN_CFG BYTE byRes[16]; }struNotVideoPlatform; }struDiff; - /*ֹ壬0-Ƶۺƽ̨ڲʾͨã1-ʾͨ*/ + /*区分共用体,0-视频综合平台内部解码器显示通道配置,1-其他解码器显示通道配置*/ BYTE byUnionType; - BYTE byScale; /*ʾģʽ0---ʵʾ1---ʾ( BNC )*/ + BYTE byScale; /*显示模式,0---真实显示,1---缩放显示( 针对BNC )*/ }NET_DVR_VGA_DISP_CHAN_CFG,*LPNET_DVR_VGA_DISP_CHAN_CFG; -/*ʾͨ״̬*/ -#define NET_DVR_MAX_DISPREGION 16 /*ÿʾͨʾĴ*/ +/*显示通道状态*/ +#define NET_DVR_MAX_DISPREGION 16 /*每个显示通道最多可以显示的窗口*/ typedef struct { - BYTE byDispStatus; /*ʾ״̬0δʾ1ʾ*/ - BYTE byBVGA; /*0-BNC1-VGA 2-HDMI3-DVI*/ - BYTE byVideoFormat; /*Ƶʽ:1:NTSC,2:PAL,0-NON*/ - BYTE byWindowMode; /*ǰģʽ*/ - BYTE byJoinDecChan[MAX_WINDOWS]; /*ӴڹĽͨ*/ - BYTE byFpsDisp[NET_DVR_MAX_DISPREGION]; /*ÿӻʾ֡*/ - BYTE byScreenMode; //Ļģʽ0-ͨ 1- + BYTE byDispStatus; /*显示状态:0:未显示,1:启动显示*/ + BYTE byBVGA; /*0-BNC,1-VGA, 2-HDMI,3-DVI*/ + BYTE byVideoFormat; /*视频制式:1:NTSC,2:PAL,0-NON*/ + BYTE byWindowMode; /*当前画面模式*/ + BYTE byJoinDecChan[MAX_WINDOWS]; /*各个子窗口关联的解码通道*/ + BYTE byFpsDisp[NET_DVR_MAX_DISPREGION]; /*每个子画面的显示帧率*/ + BYTE byScreenMode; //屏幕模式0-普通 1-大屏 BYTE byRes2[31]; }NET_DVR_DISP_CHAN_STATUS, *LPNET_DVR_DISP_CHAN_STATUS; -#define MAX_DECODECHANNUM 32//·ͨ -#define MAX_DISPCHANNUM 24//·ʾͨ +#define MAX_DECODECHANNUM 32//多路解码器最大解码通道数 +#define MAX_DISPCHANNUM 24//多路解码器最大显示通道数 -/*豸״̬*/ +/*解码器设备状态*/ typedef struct tagNET_DVR_DECODER_WORK_STATUS { DWORD dwSize; - NET_DVR_MATRIX_CHAN_STATUS struDecChanStatus[MAX_DECODECHANNUM]; /*ͨ״̬*/ - NET_DVR_DISP_CHAN_STATUS struDispChanStatus[MAX_DISPCHANNUM]; /*ʾͨ״̬*/ - BYTE byAlarmInStatus[MAX_ANALOG_ALARMIN]; /*״̬*/ - BYTE byAlarmOutStatus[MAX_ANALOG_ALARMOUT]; /*״̬*/ - BYTE byAudioInChanStatus; /*Խ״̬*/ + NET_DVR_MATRIX_CHAN_STATUS struDecChanStatus[MAX_DECODECHANNUM]; /*解码通道状态*/ + NET_DVR_DISP_CHAN_STATUS struDispChanStatus[MAX_DISPCHANNUM]; /*显示通道状态*/ + BYTE byAlarmInStatus[MAX_ANALOG_ALARMIN]; /*报警输入状态*/ + BYTE byAlarmOutStatus[MAX_ANALOG_ALARMOUT]; /*报警输出状态*/ + BYTE byAudioInChanStatus; /*语音对讲状态*/ BYTE byRes[127]; }NET_DVR_DECODER_WORK_STATUS,*LPNET_DVR_DECODER_WORK_STATUS; -//2009-12-1 ӱ벥ſ +//2009-12-1 增加被动解码播放控制 typedef struct tagNET_DVR_PASSIVEDECODE_CONTROL { DWORD dwSize; - DWORD dwPlayCmd; /* ļ*/ - DWORD dwCmdParam; /* */ + DWORD dwPlayCmd; /* 播放命令 见文件播放命令*/ + DWORD dwCmdParam; /* 播放命令参数 */ BYTE byRes[16];//Reverse }NET_DVR_PASSIVEDECODE_CONTROL,*LPNET_DVR_PASSIVEDECODE_CONTROL; -#define PASSIVE_DEC_PAUSE 1 /*ͣ(ļЧ)*/ -#define PASSIVE_DEC_RESUME 2 /*ָ(ļЧ)*/ -#define PASSIVE_DEC_FAST 3 /*ٱ(ļЧ)*/ -#define PASSIVE_DEC_SLOW 4 /*ٱ(ļЧ)*/ -#define PASSIVE_DEC_NORMAL 5 /*(ļЧ)*/ -#define PASSIVE_DEC_ONEBYONE 6 /*뵥֡()*/ -#define PASSIVE_DEC_AUDIO_ON 7 /*Ƶ*/ -#define PASSIVE_DEC_AUDIO_OFF 8 /*Ƶر*/ -#define PASSIVE_DEC_RESETBUFFER 9 /*ջ*/ -//2009-12-16 ӿƽͨ +#define PASSIVE_DEC_PAUSE 1 /*被动解码暂停(仅文件流有效)*/ +#define PASSIVE_DEC_RESUME 2 /*恢复被动解码(仅文件流有效)*/ +#define PASSIVE_DEC_FAST 3 /*快速被动解码(仅文件流有效)*/ +#define PASSIVE_DEC_SLOW 4 /*慢速被动解码(仅文件流有效)*/ +#define PASSIVE_DEC_NORMAL 5 /*正常被动解码(仅文件流有效)*/ +#define PASSIVE_DEC_ONEBYONE 6 /*被动解码单帧播放(保留)*/ +#define PASSIVE_DEC_AUDIO_ON 7 /*音频开启*/ +#define PASSIVE_DEC_AUDIO_OFF 8 /*音频关闭*/ +#define PASSIVE_DEC_RESETBUFFER 9 /*清空缓冲区*/ +//2009-12-16 增加控制解码器解码通道缩放 typedef struct tagNET_DVR_MATRIX_DECCHAN_CONTROL { DWORD dwSize; - BYTE byDecChanScaleStatus;/*ͨʾſ,1ʾʾ0ʾʵʾ*/ - BYTE byDecodeDelay;//ʱ0-Ĭϣ1-ʵʱԺã2-ʵʱԽϺã3-ʵʱУУ4-ԽϺã5-Ժã0xff-Զ - BYTE byEnableSpartan;//ʹܣ0-أ1- - BYTE byLowLight; //նȡ0-أ1-8նȵȼȼԽǿԽ - BYTE byNoiseReduction; //3D룬0-أ1-2-Զ - BYTE byDefog; //͸0-أ1-7͸ȼȼԽǿԽ - BYTE byEnableVcaDec; //Ƿܽ룬0-ã0- - BYTE byEnableAudio; //ǷƵ0-Ч1-2-ر - DWORD dwAllCtrlType; //ӴһͣʱЧλʾ - //dwAllCtrlType & 0x01,رܽ + BYTE byDecChanScaleStatus;/*解码通道显示缩放控制,1表示缩放显示,0表示真实显示*/ + BYTE byDecodeDelay;//解码延时,0-默认,1-实时性好,2-实时性较好,3-实时性中,流畅性中,4-流畅性较好,5-流畅性好,0xff-自动调整 + BYTE byEnableSpartan;//畅显使能,0-关,1-开 + BYTE byLowLight; //低照度。0-关,1-8代表低照度等级,等级越高强度越大 + BYTE byNoiseReduction; //3D降噪,0-关,1-开,2-自动 + BYTE byDefog; //透雾,0-关,1-7代表透雾等级,等级越高强度越大 + BYTE byEnableVcaDec; //是否启用智能解码,0-不启用,非0-启用 + BYTE byEnableAudio; //是否开启音频,0-无效,1-开启,2-关闭 + DWORD dwAllCtrlType; //所有子窗口一起操作的类型,设置时有效,按位表示 + //dwAllCtrlType & 0x01,开启关闭智能解码 BYTE byVolume; //volume,[0-100] BYTE byRes[55]; }NET_DVR_MATRIX_DECCHAN_CONTROL,*LPNET_DVR_MATRIX_DECCHAN_CONTROL; -/************************************·(end)***************************************/ -//2009-8-19 Ƶۺƽ̨ӿں -/************************************Ƶۺƽ̨(begin)***************************************/ -#define MAX_SUBSYSTEM_NUM 80 //һϵͳϵͳ -#define MAX_SERIALLEN 36 //кų -#define MAX_LOOPPLANNUM 16//ƻл -#define DECODE_TIMESEGMENT 4//ƻÿʱ +/************************************多路解码器(end)***************************************/ +//2009-8-19 视频综合平台接口函数 +/************************************视频综合平台(begin)***************************************/ +#define MAX_SUBSYSTEM_NUM 80 //一个矩阵系统中最多子系统数量 +#define MAX_SERIALLEN 36 //最大序列号长度 +#define MAX_LOOPPLANNUM 16//最大计划切换组 +#define DECODE_TIMESEGMENT 4//计划解码每天时间段数 typedef struct tagNET_DVR_SUBSYSTEMINFO { - BYTE bySubSystemType;//ϵͳͣ1-ϵͳ2-ϵͳ3-ϵͳ4-ϵͳ5-ϵͳ6-ϵͳ7-ϵͳ0-NULL˲ֻܻȡ - BYTE byChan;//ϵͳͨϵͳ485˲ֻܻȡ - BYTE byLoginType;//עͣ1-ֱ2-DNS3- + BYTE bySubSystemType;//子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,0-NULL(此参数只能获取) + BYTE byChan;//子系统通道数,对于码分子系统,代表485串口数量(此参数只能获取) + BYTE byLoginType;//注册类型,1-直连,2-DNS,3-花生壳 BYTE byRes1[5]; - NET_DVR_IPADDR struSubSystemIP; /*IPַ޸ģ*/ - WORD wSubSystemPort; //ϵͳ˿ںţ޸ģ + NET_DVR_IPADDR struSubSystemIP; /*IP地址(可修改)*/ + WORD wSubSystemPort; //子系统端口号(可修改) BYTE byRes2[6]; - NET_DVR_IPADDR struSubSystemIPMask;// - NET_DVR_IPADDR struGatewayIpAddr; /* صַ*/ - BYTE sUserName[NAME_LEN]; /* û ˲ֻܻȡ*/ - BYTE sPassword[PASSWD_LEN]; /*루˲ֻܻȡ*/ - char sDomainName[MAX_DOMAIN_NAME];//(޸) - char sDnsAddress[MAX_DOMAIN_NAME];/*DNSIPַ*/ - BYTE sSerialNumber[SERIALNO_LEN];//кţ˲ֻܻȡ + NET_DVR_IPADDR struSubSystemIPMask;//子网掩码 + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址*/ + BYTE sUserName[NAME_LEN]; /* 用户名 (此参数只能获取)*/ + BYTE sPassword[PASSWD_LEN]; /*密码(此参数只能获取)*/ + char sDomainName[MAX_DOMAIN_NAME];//域名(可修改) + char sDnsAddress[MAX_DOMAIN_NAME];/*DNS域名或IP地址*/ + BYTE sSerialNumber[SERIALNO_LEN];//序列号(此参数只能获取) }NET_DVR_SUBSYSTEMINFO, *LPNET_DVR_SUBSYSTEMINFO; typedef struct tagNET_DVR_ALLSUBSYSTEMINFO @@ -13499,7 +13499,7 @@ typedef struct tagNET_DVR_ALLSUBSYSTEMINFO typedef struct tagNET_DVR_LOOPPLAN_SUBCFG { DWORD dwSize; - DWORD dwPoolTime; /*Ѳλ*/ + DWORD dwPoolTime; /*轮巡间隔,单位:秒*/ NET_DVR_MATRIX_CHAN_INFO_V30 struChanConInfo[MAX_CYCLE_CHAN_V30]; BYTE byRes[16]; }NET_DVR_LOOPPLAN_SUBCFG,*LPNET_DVR_LOOPPLAN_SUBCFG; @@ -13507,71 +13507,71 @@ typedef struct tagNET_DVR_LOOPPLAN_SUBCFG typedef struct tagNET_DVR_ALARMMODECFG { DWORD dwSize; - BYTE byAlarmMode;//ͣ1-Ѳ2- - WORD wLoopTime;//Ѳʱ, λ + BYTE byAlarmMode;//报警触发类型,1-轮巡,2-保持 + WORD wLoopTime;//轮巡时间, 单位:秒 BYTE byRes[9]; }NET_DVR_ALARMMODECFG,*LPNET_DVR_ALARMMODECFG; typedef struct tagNET_DVR_CODESPLITTERINFO { DWORD dwSize; - NET_DVR_IPADDR struIP; /*IPַ*/ - WORD wPort; //˿ں + NET_DVR_IPADDR struIP; /*码分器IP地址*/ + WORD wPort; //码分器端口号 BYTE byRes1[6]; - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - BYTE byChan;//485 - BYTE by485Port;//485ڵַ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /*密码 */ + BYTE byChan;//码分器485号 + BYTE by485Port;//485口地址 BYTE byRes2[14]; } NET_DVR_CODESPLITTERINFO, *LPNET_DVR_CODESPLITTERINFO; typedef struct tagNET_DVR_ASSOCIATECFG { - BYTE byAssociateType;//ͣ1- - WORD wAlarmDelay;//ʱ05룻110룻230룻31ӣ42ӣ55ӣ610ӣ - BYTE byAlarmNum;//ţֵӦøͬıֵͬ + BYTE byAssociateType;//关联类型,1-报警 + WORD wAlarmDelay;//报警延时,0-5秒;1-10秒;2-30秒;3-1分钟;4-2分钟;5-5分钟;6-10分钟; + BYTE byAlarmNum;//报警号,具体的值由应用赋,相同的报警赋相同的值 BYTE byRes[8]; } NET_DVR_ASSOCIATECFG,*LPNET_DVR_ASSOCIATECFG; typedef struct tagNET_DVR_DYNAMICDECODE { DWORD dwSize; - NET_DVR_ASSOCIATECFG struAssociateCfg;//̬ṹ - NET_DVR_PU_STREAM_CFG struPuStreamCfg;//̬ṹ + NET_DVR_ASSOCIATECFG struAssociateCfg;//触发动态解码关联结构 + NET_DVR_PU_STREAM_CFG struPuStreamCfg;//动态解码结构 BYTE byRes[8]; }NET_DVR_DYNAMICDECODE,*LPNET_DVR_DYNAMICDECODE; typedef struct tagNET_DVR_DECODESCHED { NET_DVR_SCHEDTIME struSchedTime;// - BYTE byDecodeType;/*0-ޣ1-Ѳ룬2-̬*/ - BYTE byLoopGroup;//Ѳ + BYTE byDecodeType;/*0-无,1-轮巡解码,2-动态解码*/ + BYTE byLoopGroup;//轮巡组号 BYTE byRes[6]; - NET_DVR_PU_STREAM_CFG struDynamicDec;//̬ + NET_DVR_PU_STREAM_CFG struDynamicDec;//动态解码 } NET_DVR_DECODESCHED, *LPNET_DVR_DECODESCHED; typedef struct tagNET_DVR_PLANDECODE { DWORD dwSize; - NET_DVR_DECODESCHED struDecodeSched[MAX_DAYS][DECODE_TIMESEGMENT];//һΪʼ9000һ + NET_DVR_DECODESCHED struDecodeSched[MAX_DAYS][DECODE_TIMESEGMENT];//周一作为开始,和9000一致 BYTE byRes[8]; } NET_DVR_PLANDECODE,*LPNET_DVR_PLANDECODE; //end -/************************************Ƶۺƽ̨(end)***************************************/ +/************************************视频综合平台(end)***************************************/ typedef struct { /* 12 bytes */ DWORD dwSize; char sUserName[32]; char sPassWord[32]; - char sFromName[32]; /* Sender *///ַеĵһַһַ"@",ַҪ"@"ַ + char sFromName[32]; /* Sender *///字符串中的第一个字符和最后一个字符不能是"@",并且字符串中要有"@"字符 char sFromAddr[48]; /* Sender address */ char sToName1[32]; /* Receiver1 */ char sToName2[32]; /* Receiver2 */ char sToAddr1[48]; /* Receiver address1 */ char sToAddr2[48]; /* Receiver address2 */ char sEmailServer[32]; /* Email server address */ - BYTE byServerType; /* Email server type: 0-SMTP, 1-POP, 2-IMTP*/ + BYTE byServerType; /* Email server type: 0-SMTP, 1-POP, 2-IMTP…*/ BYTE byUseAuthen; /* Email server authentication method: 1-enable, 0-disable */ BYTE byAttachment; /* enable attachment */ BYTE byMailinterval; /* mail interval 0-2s, 1-3s, 2-4s. 3-5s*/ @@ -13580,174 +13580,174 @@ typedef struct typedef struct { DWORD dwSize; - NET_DVR_COMPRESSION_INFO_EX struLowCompression; //ʱ¼ - NET_DVR_COMPRESSION_INFO_EX struEventCompression; //¼¼ + NET_DVR_COMPRESSION_INFO_EX struLowCompression; //定时录像 + NET_DVR_COMPRESSION_INFO_EX struEventCompression; //事件触发录像 }NET_DVR_COMPRESSIONCFG_NEW, *LPNET_DVR_COMPRESSIONCFG_NEW; -//λϢ +//球机位置信息 typedef struct { - WORD wAction;//ȡʱֶЧ - WORD wPanPos;//ˮƽ - WORD wTiltPos;//ֱ - WORD wZoomPos;//䱶 + WORD wAction;//获取时该字段无效 + WORD wPanPos;//水平参数 + WORD wTiltPos;//垂直参数 + WORD wZoomPos;//变倍参数 }NET_DVR_PTZPOS, *LPNET_DVR_PTZPOS; -//ΧϢ +//球机范围信息 typedef struct { - WORD wPanPosMin;//ˮƽmin - WORD wPanPosMax;//ˮƽmax - WORD wTiltPosMin;//ֱmin - WORD wTiltPosMax;//ֱmax - WORD wZoomPosMin;//䱶min - WORD wZoomPosMax;//䱶max + WORD wPanPosMin;//水平参数min + WORD wPanPosMax;//水平参数max + WORD wTiltPosMin;//垂直参数min + WORD wTiltPosMax;//垂直参数max + WORD wZoomPosMin;//变倍参数min + WORD wZoomPosMax;//变倍参数max }NET_DVR_PTZSCOPE, *LPNET_DVR_PTZSCOPE; -//rtsp ipcameraר +//rtsp配置 ipcamera专用 typedef struct { - DWORD dwSize; // - WORD wPort; //rtsp˿ - BYTE byReserve1[40]; //Ԥ - WORD wRtspsPort; //rtsps˿ + DWORD dwSize; //长度 + WORD wPort; //rtsp服务器侦听端口 + BYTE byReserve1[40]; //预留 + WORD wRtspsPort; //rtsps服务器侦听端口 BYTE byReserve[12]; }NET_DVR_RTSPCFG, *LPNET_DVR_RTSPCFG; -/********************************ӿڲṹ(begin)*********************************/ +/********************************接口参数结构(begin)*********************************/ -//NET_DVR_Login()ṹ +//NET_DVR_Login()参数结构 typedef struct { - BYTE sSerialNumber[SERIALNO_LEN]; //к - BYTE byAlarmInPortNum; //DVR - BYTE byAlarmOutPortNum; //DVR - BYTE byDiskNum; //DVRӲ̸ - BYTE byDVRType; //DVR, 1:DVR 2:ATM DVR 3:DVS ...... - BYTE byChanNum; //DVR ͨ - BYTE byStartChan; //ʼͨ,DVS-1,DVR - 1 + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + BYTE byAlarmInPortNum; //DVR报警输入个数 + BYTE byAlarmOutPortNum; //DVR报警输出个数 + BYTE byDiskNum; //DVR硬盘个数 + BYTE byDVRType; //DVR类型, 1:DVR 2:ATM DVR 3:DVS ...... + BYTE byChanNum; //DVR 通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 }NET_DVR_DEVICEINFO, *LPNET_DVR_DEVICEINFO; -//NET_DVR_Login_V30()ṹ +//NET_DVR_Login_V30()参数结构 typedef struct { - BYTE sSerialNumber[SERIALNO_LEN]; //к - BYTE byAlarmInPortNum; // - BYTE byAlarmOutPortNum; // - BYTE byDiskNum; //Ӳ̸ - BYTE byDVRType; //豸, 1:DVR 2:ATM DVR 3:DVS ...... - BYTE byChanNum; //ģͨ - BYTE byStartChan; //ʼͨ,DVS-1,DVR - 1 - BYTE byAudioChanNum; //ͨ - BYTE byIPChanNum; //ͨλ - BYTE byZeroChanNum; //ͨ //2010-01-16 - BYTE byMainProto; //Э 0-private, 1-rtsp,2-ͬʱ֧privatertsp - BYTE bySubProto; //Э0-private, 1-rtsp,2-ͬʱ֧privatertsp - BYTE bySupport; //λΪ0ʾ֧֣1ʾ֧֣ - //bySupport & 0x1, ʾǷ֧ - //bySupport & 0x2, ʾǷֱ֧ - //bySupport & 0x4, ʾǷ֧ѹȡ - //bySupport & 0x8, ʾǷֶ֧ - //bySupport & 0x10, ʾ֧ԶSADP - //bySupport & 0x20, ʾ֧Raid - //bySupport & 0x40, ʾ֧IPSAN Ŀ¼ - //bySupport & 0x80, ʾ֧rtp over rtsp - BYTE bySupport1; // 䣬λΪ0ʾ֧֣1ʾ֧ - //bySupport1 & 0x1, ʾǷ֧snmp v30 - //bySupport1 & 0x2, ֻ֧طź - //bySupport1 & 0x4, Ƿֲ֧ȼ - //bySupport1 & 0x8, 豸Ƿֲ֧ʱչ - //bySupport1 & 0x10, ʾǷֶ֧33 - //bySupport1 & 0x20, ʾǷ֧rtsp over http - //bySupport1 & 0x80, ʾǷֳ֧±Ϣ2012-9-28, һʾǷ֧NET_DVR_IPPARACFG_V40ṹ - BYTE bySupport2; /*λΪ0ʾ֧֣0ʾ֧ - bySupport2 & 0x1, ʾǷ֧ͨURLȡ - bySupport2 & 0x2, ʾ֧FTPV40 - bySupport2 & 0x4, ʾ֧ANR - bySupport2 & 0x8, ʾ֧CCDͨ - bySupport2 & 0x10, ʾֲ֧شϢ֧ץĻ ϱṹ - bySupport2 & 0x20, ʾǷֵ֧ȡ豸״̬ - bySupport2 & 0x40, ʾǷ豸*/ - WORD wDevType; //豸ͺ - BYTE bySupport3; //չλΪ0ʾ֧֣1ʾ֧ - //bySupport3 & 0x1, ʾǷ֧ö - // bySupport3 & 0x4 ʾְ֧ã ͨͼIP롢 - // û豸״̬JPEGץͼʱʱץͼӲ - //bySupport3 & 0x8Ϊ1 ʾ֧ʹTCPԤUDPԤಥԤе"ʱԤ"ֶʱԤʹַʽʱԤbySupport3 & 0x8Ϊ0ʱʹ "˽ʱԤ"Э顣 - //bySupport3 & 0x10 ʾ֧"ȡҪ״̬V40" - //bySupport3 & 0x20 ʾǷ֧ͨDDNSȡ + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + BYTE byAlarmInPortNum; //报警输入个数 + BYTE byAlarmOutPortNum; //报警输出个数 + BYTE byDiskNum; //硬盘个数 + BYTE byDVRType; //设备类型, 1:DVR 2:ATM DVR 3:DVS ...... + BYTE byChanNum; //模拟通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 + BYTE byAudioChanNum; //语音通道数 + BYTE byIPChanNum; //最大数字通道个数,低位 + BYTE byZeroChanNum; //零通道编码个数 //2010-01-16 + BYTE byMainProto; //主码流传输协议类型 0-private, 1-rtsp,2-同时支持private和rtsp + BYTE bySubProto; //子码流传输协议类型0-private, 1-rtsp,2-同时支持private和rtsp + BYTE bySupport; //能力,位与结果为0表示不支持,1表示支持, + //bySupport & 0x1, 表示是否支持智能搜索 + //bySupport & 0x2, 表示是否支持备份 + //bySupport & 0x4, 表示是否支持压缩参数能力获取 + //bySupport & 0x8, 表示是否支持多网卡 + //bySupport & 0x10, 表示支持远程SADP + //bySupport & 0x20, 表示支持Raid卡功能 + //bySupport & 0x40, 表示支持IPSAN 目录查找 + //bySupport & 0x80, 表示支持rtp over rtsp + BYTE bySupport1; // 能力集扩充,位与结果为0表示不支持,1表示支持 + //bySupport1 & 0x1, 表示是否支持snmp v30 + //bySupport1 & 0x2, 支持区分回放和下载 + //bySupport1 & 0x4, 是否支持布防优先级 + //bySupport1 & 0x8, 智能设备是否支持布防时间段扩展 + //bySupport1 & 0x10, 表示是否支持多磁盘数(超过33个) + //bySupport1 & 0x20, 表示是否支持rtsp over http + //bySupport1 & 0x80, 表示是否支持车牌新报警信息2012-9-28, 且还表示是否支持NET_DVR_IPPARACFG_V40结构体 + BYTE bySupport2; /*能力,位与结果为0表示不支持,非0表示支持 + bySupport2 & 0x1, 表示解码器是否支持通过URL取流解码 + bySupport2 & 0x2, 表示支持FTPV40 + bySupport2 & 0x4, 表示支持ANR + bySupport2 & 0x8, 表示支持CCD的通道参数配置 + bySupport2 & 0x10, 表示支持布防报警回传信息(仅支持抓拍机报警 新老报警结构) + bySupport2 & 0x20, 表示是否支持单独获取设备状态子项 + bySupport2 & 0x40, 表示是否是码流加密设备*/ + WORD wDevType; //设备型号 + BYTE bySupport3; //能力集扩展,位与结果为0表示不支持,1表示支持 + //bySupport3 & 0x1, 表示是否支持批量配置多码流参数 + // bySupport3 & 0x4 表示支持按组配置, 具体包含 通道图像参数、报警输入参数、IP报警输入、输出接入参数、 + // 用户参数、设备工作状态、JPEG抓图、定时和时间抓图、硬盘盘组管理 + //bySupport3 & 0x8为1 表示支持使用TCP预览、UDP预览、多播预览中的"延时预览"字段来请求延时预览(后续都将使用这种方式请求延时预览)。而当bySupport3 & 0x8为0时,将使用 "私有延时预览"协议。 + //bySupport3 & 0x10 表示支持"获取报警主机主要状态(V40)"。 + //bySupport3 & 0x20 表示是否支持通过DDNS域名解析取流 - BYTE byMultiStreamProto;//Ƿֶ֧,λʾ,0-֧,1-֧,bit1-3,bit2-4,bit7-bit-8 - BYTE byStartDChan; //ʼͨ,0ʾЧ - BYTE byStartDTalkChan; //ʼֶԽͨţģԽͨţ0ʾЧ - BYTE byHighDChanNum; //ͨλ - BYTE bySupport4; //չλΪ0ʾ֧֣1ʾ֧ - //bySupport4 & 0x02 ʾǷ֧NetSDK͸ӿڣNET_DVR_STDXMLConfig͸ʽ - //bySupport4 & 0x4ʾǷ֧ƴͳһӿ - //bySupport4 & 0x80 ֧豸ϴıʹܡʾжϵýӿ NET_DVR_PDC_RULE_CFG_V42 NET_DVR_PDC_RULE_CFG_V41 - BYTE byLanguageType;// ֧,λʾ,ÿһλ0-֧,1-֧ - // byLanguageType 0 ʾ 豸 - // byLanguageType & 0x1ʾ֧ - // byLanguageType & 0x2ʾ֧Ӣ - BYTE byVoiceInChanNum; //Ƶͨ - BYTE byStartVoiceInChanNo; //Ƶʼͨ 0ʾЧ - BYTE bySupport5; //λʾ,0-֧,1-֧,bit0-ֶ֧ - //bySupport5 &0x01ʾ֧wEventTypeEx ,dwEventType ¼֧ͣΪ¼չ--ռסֹͻ - //bySupport5 &0x04ʾǷ֧ʹչijģʽӿ + BYTE byMultiStreamProto;//是否支持多码流,按位表示,0-不支持,1-支持,bit1-码流3,bit2-码流4,bit7-主码流,bit-8子码流 + BYTE byStartDChan; //起始数字通道号,0表示无效 + BYTE byStartDTalkChan; //起始数字对讲通道号,区别于模拟对讲通道号,0表示无效 + BYTE byHighDChanNum; //数字通道个数,高位 + BYTE bySupport4; //能力集扩展,位与结果为0表示不支持,1表示支持 + //bySupport4 & 0x02 表示是否支持NetSDK透传接口(NET_DVR_STDXMLConfig)透传表单格式 + //bySupport4 & 0x4表示是否支持拼控统一接口 + //bySupport4 & 0x80 支持设备上传中心报警使能。表示判断调用接口是 NET_DVR_PDC_RULE_CFG_V42还是 NET_DVR_PDC_RULE_CFG_V41 + BYTE byLanguageType;// 支持语种能力,按位表示,每一位0-不支持,1-支持 + // byLanguageType 等于0 表示 老设备 + // byLanguageType & 0x1表示支持中文 + // byLanguageType & 0x2表示支持英文 + BYTE byVoiceInChanNum; //音频输入通道数 + BYTE byStartVoiceInChanNo; //音频输入起始通道号 0表示无效 + BYTE bySupport5; //按位表示,0-不支持,1-支持,bit0-支持多码流 + //bySupport5 &0x01表示支持wEventTypeEx ,兼容dwEventType 的事件类型(支持行为事件扩展)--先占住,防止冲突 + //bySupport5 &0x04表示是否支持使用扩展的场景模式接口 /* - bySupport5 &0x08 豸ظֵʾǷּ֧ƻ¼V40ӿЭ(DVR_SET_RECORDCFG_V40/ DVR_GET_RECORDCFG_V40)(ڸЭ豸֧13) - ֮ǰIJַ豸֧¼13¼13֧֣ͳһת¼3ݴSDKͨ̽⴦) - bySupport5 &0x10 豸ظֵʾֳ֧255Ԥõ + bySupport5 &0x08 设备返回该值表示是否支持计划录像类型V40接口协议(DVR_SET_RECORDCFG_V40/ DVR_GET_RECORDCFG_V40)(在该协议中设备支持类型类型13的配置) + 之前的部分发布的设备,支持录像类型13,则配置录像类型13。如果不支持,统一转换成录像类型3兼容处理。SDK通过命令探测处理) + bySupport5 &0x10 设备返回改值表示支持超过255个预置点 */ - BYTE bySupport6; //λʾ0-֧,1-֧ - //bySupport6 0x1 ʾ豸Ƿ֧ѹ - //bySupport6 0x2 ʾǷ֧IDʽԴչDVR_SET_STREAM_SRC_INFO_V40 - //bySupport6 0x4 ʾǷ֧¼V40ӿ - //bySupport6 0x8 ʾǷ֧չ - //bySupport6 0x40ʾͼƬѯV40չ - BYTE byMirrorChanNum; //ͨ<¼ڱʾͨ> - WORD wStartMirrorChanNo; //ʼͨ - BYTE bySupport7; //,λʾ,0-֧,1-֧ - // bySupport7 & 0x1 ʾ豸Ƿ֧ INTER_VCA_RULECFG_V42 չ - // bySupport7 & 0x2 ʾ豸Ƿ֧ IPC HVT ģʽչ - // bySupport7 & 0x04 ʾ豸Ƿ֧ ʱ - // bySupport7 & 0x08 ʾ̨PTZλʱǷִ֧ͨ - // bySupport7 & 0x10 ʾ豸Ƿ֧˫ϵͳ - // bySupport7 & 0x20 ʾ豸Ƿ֧ OSDַ V50 - // bySupport7 & 0x40 ʾ豸Ƿ֧ ӣ - // bySupport7 & 0x80 ʾ豸Ƿ֧ ļ - BYTE byRes2; // + BYTE bySupport6; //能力,按位表示,0-不支持,1-支持 + //bySupport6 0x1 表示设备是否支持压缩 + //bySupport6 0x2 表示是否支持流ID方式配置流来源扩展命令,DVR_SET_STREAM_SRC_INFO_V40 + //bySupport6 0x4 表示是否支持事件搜索V40接口 + //bySupport6 0x8 表示是否支持扩展智能侦测配置命令 + //bySupport6 0x40表示图片查询结果V40扩展 + BYTE byMirrorChanNum; //镜像通道个数,<录播主机中用于表示导播通道> + WORD wStartMirrorChanNo; //起始镜像通道号 + BYTE bySupport7; //能力,按位表示,0-不支持,1-支持 + // bySupport7 & 0x1 表示设备是否支持 INTER_VCA_RULECFG_V42 扩展 + // bySupport7 & 0x2 表示设备是否支持 IPC HVT 模式扩展 + // bySupport7 & 0x04 表示设备是否支持 返回锁定时间 + // bySupport7 & 0x08 表示设置云台PTZ位置时,是否支持带通道号 + // bySupport7 & 0x10 表示设备是否支持双系统升级备份 + // bySupport7 & 0x20 表示设备是否支持 OSD字符叠加 V50 + // bySupport7 & 0x40 表示设备是否支持 主从(从摄像机) + // bySupport7 & 0x80 表示设备是否支持 报文加密 + BYTE byRes2; //保留 }NET_DVR_DEVICEINFO_V30, *LPNET_DVR_DEVICEINFO_V30; typedef struct tagNET_DVR_DEVICEINFO_V40 { NET_DVR_DEVICEINFO_V30 struDeviceV30; - BYTE bySupportLock; //豸֧ܣֶSDK豸ֵֵġbySupportLockΪ1ʱdwSurplusLockTimebyRetryLoginTimeЧ - BYTE byRetryLoginTime; //ʣɳԵ½Ĵûʱ˲Ч - BYTE byPasswordLevel; //Ա밲ȫȼ - //0-Ч1-Ĭ룬2-Ч룬3-սϸߵ롣ûΪĬ߷սϸߵʱϲͻҪʾû롣 - //4-ԱһͨûΪ룬ͨûȷ¼豸Ҫʾ޸ijʼ¼롱δ޸ĵ£ûÿε붼ѣ - //5-ͨû뱻Ա޸ģͨûٴȷ¼豸Ҫʾõ¼롱δ޸ĵ£ûÿε붼; - //6-Աһװ/ԱûΪ룬ûȷ¼豸Ҫʾ޸ijʼ¼롱δ޸ĵ£޷г޸ı; - BYTE byProxyType; //ͣ0-ʹô, 1-ʹsocks5, 2-ʹEHome - DWORD dwSurplusLockTime; //ʣʱ䣬λ룬ûʱ˲Ч - BYTE byCharEncodeType; //ַ0-ַϢ(豸),1-GB2312()2-GBK,3-BIG5(),4-Shift_JIS(),5-EUC-KR(),6-UTF-8,7-21:ISO8859-1---15(ŷ),22-ISO8859-8-I-ϣ(߼˳)(עûչʾʱתΪISO8859-8(Hebrew)-ϣ(Ӿ˳)չʾ) - BYTE bySupportDev5;//֧v50汾豸ȡ豸ƺ豸ƳչΪ64ֽ - BYTE bySupport; //չλ0- ֧֣1- ֧ - // bySupport & 0x1: - // bySupport & 0x2: 0-ֱ֧仯ϱ 1-ֱ֧仯ϱ - BYTE byLoginMode; //¼ģʽ 0-Private¼ 1-ISAPI¼ + BYTE bySupportLock; //设备支持锁定功能,该字段由SDK根据设备返回值来赋值的。bySupportLock为1时,dwSurplusLockTime和byRetryLoginTime有效 + BYTE byRetryLoginTime; //剩余可尝试登陆的次数,用户名,密码错误时,此参数有效 + BYTE byPasswordLevel; //管理员密码安全等级 + //0-无效,1-默认密码,2-有效密码,3-风险较高的密码。当用户的密码为出厂默认密码或者风险较高的密码时,上层客户端需要提示用户更改密码。 + //4-管理员创建一个普通用户为其设置密码,该普通用户正确登录设备后要提示“请修改初始登录密码”,未修改的情况下,用户每次登入都会进行提醒; + //5-当普通用户的密码被管理员修改,该普通用户再次正确登录设备后,需要提示“请重新设置登录密码”,未修改的情况下,用户每次登入都会进行提醒; + //6-管理员创建一个安装商/操作员用户为其设置密码,该用户正确登录设备后要提示“请修改初始登录密码”,未修改的情况下,无法进行除修改本身密码外的其他操作; + BYTE byProxyType; //代理类型,0-不使用代理, 1-使用socks5代理, 2-使用EHome代理 + DWORD dwSurplusLockTime; //剩余时间,单位秒,用户锁定时,此参数有效 + BYTE byCharEncodeType; //字符编码类型0-无字符编码信息(老设备),1-GB2312(简体中文),2-GBK,3-BIG5(繁体中文),4-Shift_JIS(日文),5-EUC-KR(韩文),6-UTF-8,7-21:ISO8859-1---15(西欧),22-ISO8859-8-I-希伯来语(逻辑顺序)(注:用户集成展示时需转换为“ISO8859-8(Hebrew)-希伯来语(视觉顺序)”才能正常展示) + BYTE bySupportDev5;//支持v50版本的设备参数获取,设备名称和设备类型名称长度扩展为64字节 + BYTE bySupport; //能力集扩展,位与结果:0- 不支持,1- 支持 + // bySupport & 0x1: 保留 + // bySupport & 0x2: 0-不支持变化上报 1-支持变化上报 + BYTE byLoginMode; //登录模式 0-Private登录 1-ISAPI登录 DWORD dwOEMCode; - int iResidualValidity; //ûʣЧλ죬ظֵʾѾʹã硰-3ʾѾʹ3족 - BYTE byResidualValidity; // iResidualValidityֶǷЧ0-Ч1-Ч - BYTE bySingleStartDTalkChan; //豸ʼͨţ0-Ϊֽڣʵʺ壬ͨŲܴ0ʼ - BYTE bySingleDTalkChanNums; //豸ͨ0-ʾ֧ - BYTE byPassWordResetLevel; //0-Ч1-ԱһǹԱûΪ룬÷ǹԱûȷ¼豸Ҫʾ޸ijʼ¼롱δ޸ĵ£ûÿε붼ѣ2-ǹԱû뱻Ա޸ģ÷ǹԱûٴȷ¼豸Ҫʾõ¼롱δ޸ĵ£ûÿε붼ѡ - BYTE bySupportStreamEncrypt; //չλ0- ֧֣1- ֧ bySupportStreamEncrypt & 0x1:ʾǷ֧RTP/TLSȡ bySupportStreamEncrypt & 0x2: ʾǷ֧SRTP/UDPȡ bySupportStreamEncrypt & 0x4: ʾǷ֧SRTP/MULTICASTȡ - BYTE byMarketType;//0-Чδ֪ͣ,1-ͣ2-ҵ - BYTE byTLSCap; //0-Ч;byTLSCap & 0x1: ʾǷ֧TLS·Ԥ;byTLSCap & 0x2: ʾǷ֧TLS·ط;byTLSCap & 0x4: ʾǷ֧TLS·; - BYTE byChildManage; //0-Ч;1-֧豸 - BYTE byPlaybackNewPosCap;//byPlaybackNewPosCap & 0x2: ʾ豸ֻ֧طų֡ššʱ䶨λ + int iResidualValidity; //该用户密码剩余有效天数,单位:天,返回负值,表示密码已经超期使用,例如“-3表示密码已经超期使用3天” + BYTE byResidualValidity; // iResidualValidity字段是否有效,0-无效,1-有效 + BYTE bySingleStartDTalkChan; //独立音轨接入的设备,起始接入通道号,0-为保留字节,无实际含义,音轨通道号不能从0开始 + BYTE bySingleDTalkChanNums; //独立音轨接入的设备的通道总数,0-表示不支持 + BYTE byPassWordResetLevel; //0-无效,1-管理员创建一个非管理员用户为其设置密码,该非管理员用户正确登录设备后要提示“请修改初始登录密码”,未修改的情况下,用户每次登入都会进行提醒;2-当非管理员用户的密码被管理员修改,该非管理员用户再次正确登录设备后,需要提示“请重新设置登录密码”,未修改的情况下,用户每次登入都会进行提醒。 + BYTE bySupportStreamEncrypt; //能力集扩展,位与结果:0- 不支持,1- 支持 bySupportStreamEncrypt & 0x1:表示是否支持RTP/TLS取流 bySupportStreamEncrypt & 0x2: 表示是否支持SRTP/UDP取流 bySupportStreamEncrypt & 0x4: 表示是否支持SRTP/MULTICAST取流 + BYTE byMarketType;//0-无效(未知类型),1-经销型,2-行业型 + BYTE byTLSCap; //0-无效;byTLSCap & 0x1: 表示是否支持TLS链路预览;byTLSCap & 0x2: 表示是否支持TLS链路回放;byTLSCap & 0x4: 表示是否支持TLS链路下载; + BYTE byChildManage; //0-无效;1-支持子设备管理 + BYTE byPlaybackNewPosCap;//byPlaybackNewPosCap & 0x2: 表示设备支持回放抽帧、正放、倒放、时间定位返回新码流标记 BYTE byRes2[235]; }NET_DVR_DEVICEINFO_V40, *LPNET_DVR_DEVICEINFO_V40; @@ -13760,37 +13760,37 @@ typedef void (CALLBACK *fLoginResultCallBack) (LONG lUserID, DWORD dwResult, LPN typedef struct { char sDeviceAddress[NET_DVR_DEV_ADDRESS_MAX_LEN]; - BYTE byUseTransport; //Ƿ͸0--͸Ĭϣ1--͸ + BYTE byUseTransport; //是否启用能力集透传,0--不启用透传,默认,1--启用透传 WORD wPort; char sUserName[NET_DVR_LOGIN_USERNAME_MAX_LEN]; char sPassword[NET_DVR_LOGIN_PASSWD_MAX_LEN]; fLoginResultCallBack cbLoginResult; void *pUser; BOOL bUseAsynLogin; - BYTE byProxyType; //0:ʹô1ʹñ׼2ʹEHome - BYTE byUseUTCTime; //0-תĬ,1-ӿȫʹUTCʱ,SDKUTCʱ豸ʱת,2-ӿȫʹƽ̨ʱ䣬SDKƽ̨ʱ豸ʱת - BYTE byLoginMode; //0-Private 1-ISAPI 2-Ӧ - BYTE byHttps; //0-tls1-ʹtls 2-Ӧ - LONG iProxyID; //ţӴϢʱӦķ±ֵ - BYTE byVerifyMode; //֤ʽ0-֤1-˫֤2-֤֤ʹTLSʱЧ; + BYTE byProxyType; //0:不使用代理,1:使用标准代理,2:使用EHome代理 + BYTE byUseUTCTime; //0-不进行转换,默认,1-接口上输入输出全部使用UTC时间,SDK完成UTC时间与设备时区的转换,2-接口上输入输出全部使用平台本地时间,SDK完成平台本地时间与设备时区的转换 + BYTE byLoginMode; //0-Private 1-ISAPI 2-自适应 + BYTE byHttps; //0-不适用tls,1-使用tls 2-自适应 + LONG iProxyID; //代理服务器序号,添加代理服务器信息时,相对应的服务器数组下表值 + BYTE byVerifyMode; //认证方式,0-不认证,1-双向认证,2-单向认证;认证仅在使用TLS的时候生效; BYTE byRes3[119]; }NET_DVR_USER_LOGIN_INFO,*LPNET_DVR_USER_LOGIN_INFO; -//sdk绷öٱԶ +//sdk网络环境枚举变量,用于远程升级 typedef enum _SDK_NET_ENV { LOCAL_AREA_NETWORK = 0, WIDE_AREA_NETWORK }SDK_NETWORK_ENVIRONMENT; -//ʾģʽ +//显示模式 typedef enum { NORMALMODE = 0, OVERLAYMODE }DISPLAY_MODE; -//ģʽ +//发送模式 typedef enum { PTOPTCPMODE = 0, @@ -13800,96 +13800,96 @@ typedef enum RESERVEDMODE }SEND_MODE; -//ץͼģʽ +//抓图模式 typedef enum { - BMP_MODE = 0, //BMPģʽ - JPEG_MODE = 1 //JPEGģʽ + BMP_MODE = 0, //BMP模式 + JPEG_MODE = 1 //JPEG模式 }CAPTURE_MODE; -//ʵʱģʽ +//实时声音模式 typedef enum { - MONOPOLIZE_MODE = 1,//ռģʽ - SHARE_MODE = 2 //ģʽ + MONOPOLIZE_MODE = 1,//独占模式 + SHARE_MODE = 2 //共享模式 }REALSOUND_MODE; -//Ԥ +//软解码预览参数 typedef struct { - LONG lChannel;//ͨ - LONG lLinkMode;//λ(31)Ϊ0ʾΪ1ʾӣ030λʾӷʽ: 0TCPʽ,1UDPʽ,2ಥʽ,3 - RTPʽ4-RTP/RTSP,5-RSTP/HTTP - HWND hPlayWnd;//Ŵڵľ,ΪNULLʾͼ - char* sMultiCastIP;//ಥַ - BYTE byProtoType; //ӦòȡЭ飬0-˽Э飬1-RTSPЭ + LONG lChannel;//通道号 + LONG lLinkMode;//最高位(31)为0表示主码流,为1表示子,0-30位表示码流连接方式: 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP + HWND hPlayWnd;//播放窗口的句柄,为NULL表示不播放图象 + char* sMultiCastIP;//多播组地址 + BYTE byProtoType; //应用层取流协议,0-私有协议,1-RTSP协议 BYTE byRes[3]; }NET_DVR_CLIENTINFO, *LPNET_DVR_CLIENTINFO; -//SDK״̬Ϣ(9000) +//SDK状态信息(9000新增) typedef struct { - DWORD dwTotalLoginNum; //ǰloginû - DWORD dwTotalRealPlayNum; //ǰrealplay· - DWORD dwTotalPlayBackNum; //ǰطŻ· - DWORD dwTotalAlarmChanNum; //ǰͨ· - DWORD dwTotalFormatNum; //ǰӲ̸ʽ· - DWORD dwTotalFileSearchNum; //ǰ־ļ· - DWORD dwTotalLogSearchNum; //ǰ־ļ· - DWORD dwTotalSerialNum; //ǰ͸ͨ· - DWORD dwTotalUpgradeNum; //ǰ· - DWORD dwTotalVoiceComNum; //ǰת· - DWORD dwTotalBroadCastNum; //ǰ㲥· - DWORD dwTotalListenNum; //ǰ· - DWORD dwEmailTestNum; //ǰʼ· - DWORD dwBackupNum; // ǰļ· - DWORD dwTotalInquestUploadNum; //ǰѶϴ· + DWORD dwTotalLoginNum; //当前login用户数 + DWORD dwTotalRealPlayNum; //当前realplay路数 + DWORD dwTotalPlayBackNum; //当前回放或下载路数 + DWORD dwTotalAlarmChanNum; //当前建立报警通道路数 + DWORD dwTotalFormatNum; //当前硬盘格式化路数 + DWORD dwTotalFileSearchNum; //当前日志或文件搜索路数 + DWORD dwTotalLogSearchNum; //当前日志或文件搜索路数 + DWORD dwTotalSerialNum; //当前透明通道路数 + DWORD dwTotalUpgradeNum; //当前升级路数 + DWORD dwTotalVoiceComNum; //当前语音转发路数 + DWORD dwTotalBroadCastNum; //当前语音广播路数 + DWORD dwTotalListenNum; //当前网络监听路数 + DWORD dwEmailTestNum; //当前邮件计数路数 + DWORD dwBackupNum; // 当前文件备份路数 + DWORD dwTotalInquestUploadNum; //当前审讯上传路数 DWORD dwRes[6]; }NET_DVR_SDKSTATE, *LPNET_DVR_SDKSTATE; -//SDK֧Ϣ(9000) +//SDK功能支持信息(9000新增) typedef struct { - DWORD dwMaxLoginNum; //loginû MAX_LOGIN_USERS - DWORD dwMaxRealPlayNum; //realplay· WATCH_NUM - DWORD dwMaxPlayBackNum; //طŻ· WATCH_NUM - DWORD dwMaxAlarmChanNum; //ͨ· ALARM_NUM - DWORD dwMaxFormatNum; //Ӳ̸ʽ· SERVER_NUM - DWORD dwMaxFileSearchNum; //ļ· SERVER_NUM - DWORD dwMaxLogSearchNum; //־· SERVER_NUM - DWORD dwMaxSerialNum; //͸ͨ· SERVER_NUM - DWORD dwMaxUpgradeNum; //· SERVER_NUM - DWORD dwMaxVoiceComNum; //ת· SERVER_NUM - DWORD dwMaxBroadCastNum; //㲥· MAX_CASTNUM + DWORD dwMaxLoginNum; //最大login用户数 MAX_LOGIN_USERS + DWORD dwMaxRealPlayNum; //最大realplay路数 WATCH_NUM + DWORD dwMaxPlayBackNum; //最大回放或下载路数 WATCH_NUM + DWORD dwMaxAlarmChanNum; //最大建立报警通道路数 ALARM_NUM + DWORD dwMaxFormatNum; //最大硬盘格式化路数 SERVER_NUM + DWORD dwMaxFileSearchNum; //最大文件搜索路数 SERVER_NUM + DWORD dwMaxLogSearchNum; //最大日志搜索路数 SERVER_NUM + DWORD dwMaxSerialNum; //最大透明通道路数 SERVER_NUM + DWORD dwMaxUpgradeNum; //最大升级路数 SERVER_NUM + DWORD dwMaxVoiceComNum; //最大语音转发路数 SERVER_NUM + DWORD dwMaxBroadCastNum; //最大语音广播路数 MAX_CASTNUM DWORD dwRes[10]; }NET_DVR_SDKABL, *LPNET_DVR_SDKABL; -//豸Ϣ +//报警设备信息 typedef struct { - BYTE byUserIDValid; /* useridǷЧ 0-Ч1-Ч */ - BYTE bySerialValid; /* кǷЧ 0-Ч1-Ч */ - BYTE byVersionValid; /* 汾ǷЧ 0-Ч1-Ч */ - BYTE byDeviceNameValid; /* 豸ǷЧ 0-Ч1-Ч */ - BYTE byMacAddrValid; /* MACַǷЧ 0-Ч1-Ч */ - BYTE byLinkPortValid; /* login˿ǷЧ 0-Ч1-Ч */ - BYTE byDeviceIPValid; /* 豸IPǷЧ 0-Ч1-Ч */ - BYTE bySocketIPValid; /* socket ipǷЧ 0-Ч1-Ч */ - LONG lUserID; /* NET_DVR_Login()ֵ, ʱЧ */ - BYTE sSerialNumber[SERIALNO_LEN]; /* к */ - DWORD dwDeviceVersion; /* 汾Ϣ 16λʾ汾16λʾΰ汾*/ - char sDeviceName[NAME_LEN]; /* 豸 */ - BYTE byMacAddr[MACADDR_LEN]; /* MACַ */ + BYTE byUserIDValid; /* userid是否有效 0-无效,1-有效 */ + BYTE bySerialValid; /* 序列号是否有效 0-无效,1-有效 */ + BYTE byVersionValid; /* 版本号是否有效 0-无效,1-有效 */ + BYTE byDeviceNameValid; /* 设备名字是否有效 0-无效,1-有效 */ + BYTE byMacAddrValid; /* MAC地址是否有效 0-无效,1-有效 */ + BYTE byLinkPortValid; /* login端口是否有效 0-无效,1-有效 */ + BYTE byDeviceIPValid; /* 设备IP是否有效 0-无效,1-有效 */ + BYTE bySocketIPValid; /* socket ip是否有效 0-无效,1-有效 */ + LONG lUserID; /* NET_DVR_Login()返回值, 布防时有效 */ + BYTE sSerialNumber[SERIALNO_LEN]; /* 序列号 */ + DWORD dwDeviceVersion; /* 版本信息 高16位表示主版本,低16位表示次版本*/ + char sDeviceName[NAME_LEN]; /* 设备名字 */ + BYTE byMacAddr[MACADDR_LEN]; /* MAC地址 */ WORD wLinkPort; /* link port */ - char sDeviceIP[128]; /* IPַ */ - char sSocketIP[128]; /* ϴʱsocket IPַ */ - BYTE byIpProtocol; /* IpЭ 0-IPV4, 1-IPV6 */ + char sDeviceIP[128]; /* IP地址 */ + char sSocketIP[128]; /* 报警主动上传时的socket IP地址 */ + BYTE byIpProtocol; /* Ip协议 0-IPV4, 1-IPV6 */ BYTE byRes1[2]; - BYTE bJSONBroken; //JSON־01 + BYTE bJSONBroken; //JSON断网续传标志。0:不续传;1:续传 WORD wSocketPort; BYTE byRes2[6]; }NET_DVR_ALARMER, *LPNET_DVR_ALARMER; -//Ӳʾ(ӽṹ) +//硬解码显示区域参数(子结构) typedef struct { long bToScreen; @@ -13901,52 +13901,52 @@ typedef struct long nReserved; }NET_DVR_DISPLAY_PARA, *LPNET_DVR_DISPLAY_PARA; -//ӲԤ +//硬解码预览参数 typedef struct { - LONG lChannel;//ͨ - LONG lLinkMode; //λ(31)Ϊ0ʾΪ1ʾӣ030λʾӷʽ:0TCPʽ,1UDPʽ,2ಥʽ,3 - RTPʽ4-绰ߣ5128k6256k7384k8512k + LONG lChannel;//通道号 + LONG lLinkMode; //最高位(31)为0表示主码流,为1表示子,0-30位表示码流连接方式:0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-电话线,5-128k宽带,6-256k宽带,7-384k宽带,8-512k宽带; char* sMultiCastIP; NET_DVR_DISPLAY_PARA struDisplayPara; }NET_DVR_CARDINFO, *LPNET_DVR_CARDINFO; -//¼ļ +//录象文件参数 typedef struct { - char sFileName[100];//ļ - NET_DVR_TIME struStartTime;//ļĿʼʱ - NET_DVR_TIME struStopTime;//ļĽʱ - DWORD dwFileSize;//ļĴС + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 }NET_DVR_FIND_DATA, *LPNET_DVR_FIND_DATA; -//¼ļ(9000) +//录象文件参数(9000) typedef struct { - char sFileName[100];//ļ - NET_DVR_TIME struStartTime;//ļĿʼʱ - NET_DVR_TIME struStopTime;//ļĽʱ - DWORD dwFileSize;//ļĴС + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 char sCardNum[32]; - BYTE byLocked;//9000豸֧,1ʾļѾ,0ʾļ - BYTE byFileType; //ļ:0ʱ¼,1-ƶ 2 - //3-|ƶ 4-&ƶ 5- 6-ֶ¼,7𶯱8-9-ܱ10-PIR11-߱12-ȱ,14-ܽͨ¼ + BYTE byLocked;//9000设备支持,1表示此文件已经被锁定,0表示正常的文件 + BYTE byFileType; //文件类型:0-定时录像,1-移动侦测 ,2-报警触发, + //3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像,7-震动报警,8-环境报警,9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,14-智能交通事件 BYTE byRes[2]; }NET_DVR_FINDDATA_V30, *LPNET_DVR_FINDDATA_V30; -//¼ļ(cvr) +//录象文件参数(cvr) typedef struct { - char sFileName[100];//ļ - NET_DVR_TIME struStartTime;//ļĿʼʱ - NET_DVR_TIME struStopTime;//ļĽʱ - DWORD dwFileSize;//ļĴС + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 char sCardNum[32]; - BYTE byLocked;//9000豸֧,1ʾļѾ,0ʾļ - BYTE byFileType; //ļ:0ʱ¼,1-ƶ 2 - //3-|ƶ 4-&ƶ 5- 6-ֶ¼,7𶯱8-9-ܱ10-PIR11-߱12-ȱ,14-ܽͨ¼ - BYTE byQuickSearch; //0:ͨѯ1٣ѯ + BYTE byLocked;//9000设备支持,1表示此文件已经被锁定,0表示正常的文件 + BYTE byFileType; //文件类型:0-定时录像,1-移动侦测 ,2-报警触发, + //3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像,7-震动报警,8-环境报警,9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,14-智能交通事件 + BYTE byQuickSearch; //0:普通查询结果,1:快速(日历)查询结果 BYTE byRes; - DWORD dwFileIndex; //ļ + DWORD dwFileIndex; //文件索引号 BYTE byStreamType; BYTE byRes1[127]; }NET_DVR_FINDDATA_V40, *LPNET_DVR_FINDDATA_V40; @@ -13956,63 +13956,63 @@ typedef struct tagNET_DVR_FINDDATA_V50 char sFileName[100]; NET_DVR_TIME_SEARCH struStartTime; NET_DVR_TIME_SEARCH struStopTime; - NET_DVR_ADDRESS struAddr; //ƬڵĵַϢȺطʱõ - DWORD dwFileSize; //ļС //ڴļʱbyBigFileTypeΪ1ֵ - BYTE byLocked; //ļǷ1ļ0ļδ - BYTE byFileType; //ļͣV40ͬ - BYTE byQuickSearch; //0- ͨѯ1- ٣ѯ - BYTE byStreamType; //ͣ0- 1- 2- - DWORD dwFileIndex; //ļ - char sCardNum[32]; // - DWORD dwTotalLenH; // ڴļʱܳȣ32ֽ - DWORD dwTotalLenL; // ڴļʱܳȣ32ֽ - BYTE byBigFileType; // 0ΪͨƬ1Ϊļ + NET_DVR_ADDRESS struAddr; //片段所在的地址信息,集群回放时用到 + DWORD dwFileSize; //文件大小 //对于大文件搜索类型时(byBigFileType为1),该值无意义 + BYTE byLocked; //文件是否被锁定,1-文件已锁定;0-文件未锁定 + BYTE byFileType; //文件类型,与V40相同 + BYTE byQuickSearch; //0- 普通查询结果,1- 快速(日历)查询结果 + BYTE byStreamType; //码流类型:0- 主码流,1- 子码流,2- 码流三 + DWORD dwFileIndex; //文件索引号 + char sCardNum[32]; //卡号 + DWORD dwTotalLenH; // 对于大文件搜索,时间段内数据总长度,高32字节 + DWORD dwTotalLenL; // 对于大文件搜索,时间段内数据总长度,低32字节 + BYTE byBigFileType; // 0为普通片段搜索,1为大文件搜索 BYTE byRes[247]; }NET_DVR_FINDDATA_V50, *LPNET_DVR_FINDDATA_V50; -//¼ļ() +//录象文件参数(带卡号) typedef struct { - char sFileName[100];//ļ - NET_DVR_TIME struStartTime;//ļĿʼʱ - NET_DVR_TIME struStopTime;//ļĽʱ - DWORD dwFileSize;//ļĴС + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 char sCardNum[32]; }NET_DVR_FINDDATA_CARD, *LPNET_DVR_FINDDATA_CARD; -//¼ļṹ +//录象文件查找条件结构 typedef struct { - LONG lChannel;//ͨ - DWORD dwFileType;//¼ļ - //ţ0xffȫ0ʱ¼,1-ƶ 23-|ƶ 4-&ƶ 5- 6-ֶ¼,7-¼10-PIR11-߱12-ȱ13-ȫ¼14-ܽͨ¼ - //ţ0xffȫ0ʱ¼1-ƶ⣬2ӽ345-6ֶ¼7𶯱8-9-ܱ10-PIR11-߱12-ȱ13-ȫ¼14-ܽͨ¼ - DWORD dwIsLocked;//Ƿ 0-ļ,1-ļ, 0xffʾļ - DWORD dwUseCardNo;//Ƿʹÿ - BYTE sCardNumber[32];// - NET_DVR_TIME struStartTime;//ʼʱ - NET_DVR_TIME struStopTime;//ʱ + LONG lChannel;//通道号 + DWORD dwFileType;//录象文件类型 + //不带卡号,0xff-全部,0-定时录像,1-移动侦测 ,2-报警触发,3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像,7-智能录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件 + //带卡号,0xff-全部,0-定时录像,1-移动侦测,2-接近报警,3-出钞报警,4-进钞报警,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件 + DWORD dwIsLocked;//是否锁定 0-正常文件,1-锁定文件, 0xff表示所有文件 + DWORD dwUseCardNo;//是否使用卡号 + BYTE sCardNumber[32];//卡号 + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 }NET_DVR_FILECOND, *LPNET_DVR_FILECOND; -//̨ѡŴС(˽ ר) +//云台区域选择放大缩小(私有 快球专用) typedef struct { - int xTop; //ʼx - int yTop; //y - int xBottom; //x - int yBottom; //y - int bCounter; // + int xTop; //方框起始点的x坐标 + int yTop; //方框结束点的y坐标 + int xBottom; //方框结束点的x坐标 + int yBottom; //方框结束点的y坐标 + int bCounter; //保留 }NET_DVR_POINT_FRAME, *LPNET_DVR_POINT_FRAME; -//Խ +//语音对讲参数 typedef struct tagNET_DVR_COMPRESSION_AUDIO { - BYTE byAudioEncType; //Ƶ 0-OggVorbis(G722.1);1-G711_U;2-G711_A;5-MP2L2;6-G726;7-AAC,8-PCM;9-G722.1.C;12-AAC_LC;13-AAC_LD;14-Opus;15-MP3;16-ADPCM - BYTE byAudioSamplingRate;//Ƶ 0-Ĭϣ1-16kHZ2-32kHZ3-48kHZ, 4- 44.1kHZ,5-8kHZ - BYTE byAudioBitRate;// Ƶ ο BITRATE_ENCODE_INDEX - BYTE byres[4];//ﱣƵѹ - BYTE bySupport;//bySupport Bit0ʾ Mp2l2ǰ4ֽڵĺʾƵݳ + BYTE byAudioEncType; //音频编码类型 0-OggVorbis(G722.1);1-G711_U;2-G711_A;5-MP2L2;6-G726;7-AAC,8-PCM;9-G722.1.C;12-AAC_LC;13-AAC_LD;14-Opus;15-MP3;16-ADPCM + BYTE byAudioSamplingRate;//音频采样率 0-默认,1-16kHZ,2-32kHZ,3-48kHZ, 4- 44.1kHZ,5-8kHZ + BYTE byAudioBitRate;// 音频码率 参考 BITRATE_ENCODE_INDEX + BYTE byres[4];//这里保留音频的压缩参数 + BYTE bySupport;//bySupport Bit0表示 Mp2l2前4个字节的含义表示后面内容音频数据长度 }NET_DVR_COMPRESSION_AUDIO, *LPNET_DVR_COMPRESSION_AUDIO; //2009-7-22 @@ -14024,829 +14024,829 @@ typedef struct tagNET_DVR_COMPRESSION_AUDIO #define WIFI_WPA_PSK_MAX_KEY_LENGTH 63 #define WIFI_WPA_PSK_MIN_KEY_LENGTH 8 #define WIFI_MAX_AP_COUNT 20 -#define WIFI_WPA_PSK_MAX_HEXKEY_LENGTH 68 //WPA16Կ󳤶 +#define WIFI_WPA_PSK_MAX_HEXKEY_LENGTH 68 //WPA16进制密钥最大长度 typedef struct tagNET_DVR_AP_INFO { char sSsid[IW_ESSID_MAX_SIZE]; - DWORD dwMode; /* 0 mange ģʽ;1 ad-hocģʽμNICMODE */ - DWORD dwSecurity; /*0 ܣ1 wepܣ2 wpa-psk;3 wpa-Enterprise;4-WPA2_PSKμWIFISECURITY*/ - DWORD dwChannel; /*1-11ʾ11ͨ*/ - DWORD dwSignalStrength; /*0-100źΪǿ*/ - DWORD dwSpeed; /*,λ0.01mbps*/ + DWORD dwMode; /* 0 mange 模式;1 ad-hoc模式,参见NICMODE */ + DWORD dwSecurity; /*0 不加密;1 wep加密;2 wpa-psk;3 wpa-Enterprise;4-WPA2_PSK参见WIFISECURITY*/ + DWORD dwChannel; /*1-11表示11个通道*/ + DWORD dwSignalStrength; /*0-100信号由最弱变为最强*/ + DWORD dwSpeed; /*速率,单位是0.01mbps*/ }NET_DVR_AP_INFO,*LPNET_DVR_AP_INFO; typedef struct tagNET_DVR_AP_INFO_LIST { DWORD dwSize; - DWORD dwCount; /*AP20*/ + DWORD dwCount; /*无线AP数量,不超过20*/ NET_DVR_AP_INFO struApInfo[WIFI_MAX_AP_COUNT]; }NET_DVR_AP_INFO_LIST,*LPNET_DVR_AP_INFO_LIST; typedef struct tagNET_DVR_WIFIETHERNET { - char sIpAddress[16]; /*IPַ*/ - char sIpMask[16]; /**/ - BYTE byMACAddr[MACADDR_LEN]; /*ַֻʾ*/ - BYTE byCloseWifi; //Ƿرwifiӣ0-رգ1-ر + char sIpAddress[16]; /*IP地址*/ + char sIpMask[16]; /*掩码*/ + BYTE byMACAddr[MACADDR_LEN]; /*物理地址,只用来显示*/ + BYTE byCloseWifi; //是否关闭wifi连接,0-不关闭,1-关闭 BYTE bRes; - DWORD dwEnableDhcp; /*Ƿdhcp 0 1*/ - DWORD dwAutoDns; /*dhcpǷԶȡdns,0Զȡ 1ԶȡdhcpĿǰԶȡdns*/ - char sFirstDns[16]; /*һdns*/ - char sSecondDns[16]; /*ڶdns*/ - char sGatewayIpAddr[16]; /* صַ*/ + DWORD dwEnableDhcp; /*是否启动dhcp 0不启动 1启动*/ + DWORD dwAutoDns; /*如果启动dhcp是否自动获取dns,0不自动获取 1自动获取;对于有线如果启动dhcp目前自动获取dns*/ + char sFirstDns[16]; /*第一个dns域名*/ + char sSecondDns[16]; /*第二个dns域名*/ + char sGatewayIpAddr[16]; /* 网关地址*/ BYTE bRes2[8]; }NET_DVR_WIFIETHERNET,*LPNET_DVR_WIFIETHERNET; typedef struct tagNET_DVR_WIFI_CFG_EX { - NET_DVR_WIFIETHERNET struEtherNet; /*wifi*/ + NET_DVR_WIFIETHERNET struEtherNet; /*wifi网口*/ char sEssid[IW_ESSID_MAX_SIZE]; /*SSID*/ - DWORD dwMode; /* 0 mange ģʽ;1 ad-hocģʽμ*/ - DWORD dwSecurity; /*0-;1-WEP;2-WPA-personal; 3-WPA-enterprise;4-WPA2-personal;5-WPA2-enterprise */ + DWORD dwMode; /* 0 mange 模式;1 ad-hoc模式,参见*/ + DWORD dwSecurity; /*0-不加密;1-WEP加密;2-WPA-personal; 3-WPA-enterprise;4-WPA2-personal;5-WPA2-enterprise */ union { struct { - DWORD dwAuthentication;/*0 -ʽ 1-ʽ*/ - DWORD dwKeyLength;/* 0 -64λ1- 128λ2-152λ*/ - DWORD dwKeyType;/*0 16;1 ASCI */ - DWORD dwActive;/*0 0---3ʾһԿ*/ + DWORD dwAuthentication;/*0 -开放式 1-共享式*/ + DWORD dwKeyLength;/* 0 -64位;1- 128位;2-152位*/ + DWORD dwKeyType;/*0 16进制;1 ASCI */ + DWORD dwActive;/*0 索引:0---3表示用哪一个密钥*/ char sKeyInfo[WIFI_WEP_MAX_KEY_COUNT][WIFI_WEP_MAX_KEY_LENGTH]; }wep; struct { - DWORD dwKeyLength;/*8-63ASCIIַ*/ + DWORD dwKeyLength;/*8-63个ASCII字符*/ char sKeyInfo[WIFI_WPA_PSK_MAX_KEY_LENGTH]; - BYTE byEncryptType; /*WPA/WPA2ģʽ¼,0-AES, 1-TKIP*/ - char sNewKeyInfo[WIFI_WPA_PSK_MAX_HEXKEY_LENGTH/*68*/];//Կ֧8-63ASCIIַԼ64ʮַԿ - //byKeyTypeΪ0ʱsKeyInfobyKeyTypeΪ1ʱsNewKeyInfo - //Կͣ0 ~ Կֻ֧ͣ8-63ASCIIַ1 ~Կ֧ͣ8-63ASCIIַԼ64ʮַԿ + BYTE byEncryptType; /*WPA/WPA2模式下加密类型,0-AES, 1-TKIP*/ + char sNewKeyInfo[WIFI_WPA_PSK_MAX_HEXKEY_LENGTH/*68*/];//新密钥(支持8-63个ASCII字符以及64个十六制字符密钥) + //当byKeyType为0时,启用sKeyInfo,当byKeyType为1时,启用sNewKeyInfo + //密钥类型;0 ~ 老密钥类型(只支持8-63个ASCII字符),1 ~新密钥类型(支持8-63个ASCII字符以及64个十六制字符密钥) BYTE byKeyType; BYTE byRes[7]; }wpa_psk; struct { - BYTE byEncryptType; /*,0-AES, 1-TKIP*/ - BYTE byAuthType; //֤ͣ0-EAP_TTLS,1-EAP_PEAP,2-EAP_TLS + BYTE byEncryptType; /*加密类型,0-AES, 1-TKIP*/ + BYTE byAuthType; //认证类型,0-EAP_TTLS,1-EAP_PEAP,2-EAP_TLS BYTE byRes[2]; union { struct { - BYTE byEapolVersion; //EAPOL汾0-汾11-汾2 - BYTE byAuthType; //ڲ֤ʽ0-PAP1-MSCHAPV2 + BYTE byEapolVersion; //EAPOL版本,0-版本1,1-版本2 + BYTE byAuthType; //内部认证方式,0-PAP,1-MSCHAPV2 BYTE byRes1[2]; - BYTE byAnonyIdentity [NAME_LEN]; // - BYTE byUserName[NAME_LEN]; //û - BYTE byPassword[NAME_LEN]; // + BYTE byAnonyIdentity [NAME_LEN]; //匿名身份 + BYTE byUserName[NAME_LEN]; //用户名 + BYTE byPassword[NAME_LEN]; //密码 BYTE byRes[44]; - }EAP_TTLS; //WPA-enterprise/WPA2-enterprisģʽ + }EAP_TTLS; //WPA-enterprise/WPA2-enterpris模式适用 struct { - BYTE byEapolVersion; //EAPOL汾0-汾11-汾2 - BYTE byAuthType; //ڲ֤ʽ0-GTC1-MD52-MSCHAPV2 - BYTE byPeapVersion; //PEAP汾0-汾01-汾1 - BYTE byPeapLabel; //PEAPǩ0-ϱǩ1-±ǩ - BYTE byAnonyIdentity[NAME_LEN]; // - BYTE byUserName[NAME_LEN]; //û - BYTE byPassword[NAME_LEN]; // + BYTE byEapolVersion; //EAPOL版本,0-版本1,1-版本2 + BYTE byAuthType; //内部认证方式,0-GTC,1-MD5,2-MSCHAPV2 + BYTE byPeapVersion; //PEAP版本,0-版本0,1-版本1 + BYTE byPeapLabel; //PEAP标签,0-老标签,1-新标签 + BYTE byAnonyIdentity[NAME_LEN]; //匿名身份 + BYTE byUserName[NAME_LEN]; //用户名 + BYTE byPassword[NAME_LEN]; //密码 BYTE byRes[44]; - }EAP_PEAP; //WPA-enterprise/WPA2-enterprisģʽ + }EAP_PEAP; //WPA-enterprise/WPA2-enterpris模式适用 struct { - BYTE byEapolVersion; //EAPOL汾0-汾11-汾2 + BYTE byEapolVersion; //EAPOL版本,0-版本1,1-版本2 BYTE byRes1[3]; - BYTE byIdentity[NAME_LEN]; // - BYTE byPrivateKeyPswd[NAME_LEN]; //˽Կ + BYTE byIdentity[NAME_LEN]; //身份 + BYTE byPrivateKeyPswd[NAME_LEN]; //私钥密码 BYTE byRes[76]; }EAP_TLS; }auth_param; - }wpa_wpa2; //WPA-enterprise/WPA2-enterprisģʽ + }wpa_wpa2; //WPA-enterprise/WPA2-enterpris模式适用 }key; }NET_DVR_WIFI_CFG_EX,*LPNET_DVR_WIFI_CFG_EX; -//wifiýṹ +//wifi配置结构 typedef struct tagNET_DVR_WIFI_CFG { DWORD dwSize; NET_DVR_WIFI_CFG_EX struWifiCfg; }NET_DVR_WIFI_CFG,*LPNET_DVR_WIFI_CFG; -//wifi״̬ +//wifi连接状态 typedef struct tagNET_DVR_WIFI_CONNECT_STATUS { DWORD dwSize; - BYTE byCurStatus; //1-ӣ2-δӣ3- - BYTE byRes1[3]; // - DWORD dwErrorCode; // byCurStatus = 2ʱЧ,1-û,2-޴·,3-δ֪ + BYTE byCurStatus; //1-已连接,2-未连接,3-正在连接 + BYTE byRes1[3]; //保留 + DWORD dwErrorCode; // byCurStatus = 2时有效,1-用户名或密码错误,2-无此路由器,3-未知错误 BYTE byRes[244]; }NET_DVR_WIFI_CONNECT_STATUS,*LPNET_DVR_WIFI_CONNECT_STATUS; -//wifiģʽ +//wifi工作模式 typedef struct tagNET_DVR_WIFI_WORKMODE { DWORD dwSize; - DWORD dwNetworkInterfaceMode; /*0 Զлģʽ1 ģʽ*/ + DWORD dwNetworkInterfaceMode; /*0 自动切换模式 1 有线模式*/ }NET_DVR_WIFI_WORKMODE,*LPNET_DVR_WIFI_WORKMODE; -//ṹ궨 -#define VCA_MAX_POLYGON_POINT_NUM 10 //֧10Ķ -#define MAX_RULE_NUM 8 // -#define MAX_RULE_NUM_V42 16 //չ -#define MAX_TARGET_NUM 30 //Ŀ -#define MAX_CALIB_PT 6 //궨 -#define MIN_CALIB_PT 4 //С궨 -#define MAX_TIMESEGMENT_2 2 //ʱ -#define DATA_INDEX_LEN 64 //ˮ -#define MAX_DEV_DATAINDEX_LEN 64 //豸ˮ -#define MAX_TRAFFIC_PICTURE_NUM 8 //ͨͼƬ -#define MAX_LICENSE_LEN 16 //ƺ󳤶 -#define MAX_LICENSE_LEN_EX 32 //ƺ󳤶 -#define MAX_CARDNO_LEN 48 //󳤶 2013-11-04 -#define MAX_OPERATE_INDEX_LEN 32 //󳤶2014-03-03 -#define MAX_PLATE_NUM 3 //Ƹ -#define MAX_MASK_REGION_NUM 4 //ĸ -#define MAX_SEGMENT_NUM 6 //궨Ŀ -#define MIN_SEGMENT_NUM 3 //궨СĿ -#define MAX_REL_SNAPCHAN_NUM 3 //ץͼͨ -#define MAX_PIC_SWITCH_STORAGE_SERVER 64 //ƴ洢洢ͼƬ -#define MAX_INFO_SWITCH_STORAGE_SERVER 64 //ƴ洢洢󸽼Ϣ -#define RTMP_URL_LEN 128 //RTMP URL -#define MAX_ID_LEN_128 128 //ļID -#define MAX_DEBUGCMD_LEN 1024 //豸󳤶 -#define MAX_DEBUGINFO_LEN 1400 //豸Ϣ󳤶 -#define MAX_VEHICLE_ID_LEN 32 //ʶ +//结构参数宏定义 +#define VCA_MAX_POLYGON_POINT_NUM 10 //检测区域最多支持10个点的多边形 +#define MAX_RULE_NUM 8 //最多规则条数 +#define MAX_RULE_NUM_V42 16 //最多规则条数扩展 +#define MAX_TARGET_NUM 30 //最多目标个数 +#define MAX_CALIB_PT 6 //最大标定点个数 +#define MIN_CALIB_PT 4 //最小标定点个数 +#define MAX_TIMESEGMENT_2 2 //最大时间段数 +#define DATA_INDEX_LEN 64 //数据流水号 +#define MAX_DEV_DATAINDEX_LEN 64 //设备数据流水号 +#define MAX_TRAFFIC_PICTURE_NUM 8 //交通图片数量 +#define MAX_LICENSE_LEN 16 //车牌号最大长度 +#define MAX_LICENSE_LEN_EX 32 //车牌号最大长度 +#define MAX_CARDNO_LEN 48 //卡号最大长度 2013-11-04 +#define MAX_OPERATE_INDEX_LEN 32 //操作数最大长度2014-03-03 +#define MAX_PLATE_NUM 3 //车牌个数 +#define MAX_MASK_REGION_NUM 4 //最多四个屏蔽区域 +#define MAX_SEGMENT_NUM 6 //摄像机标定最大样本线数目 +#define MIN_SEGMENT_NUM 3 //摄像机标定最小样本线数目 +#define MAX_REL_SNAPCHAN_NUM 3 //最大关联抓图通道数 +#define MAX_PIC_SWITCH_STORAGE_SERVER 64 //云存储服务器存储的最大图片类型数 +#define MAX_INFO_SWITCH_STORAGE_SERVER 64 //云存储服务器存储的最大附加信息类型数 +#define RTMP_URL_LEN 128 //RTMP URL 长度 +#define MAX_ID_LEN_128 128 //发布文件ID长度 +#define MAX_DEBUGCMD_LEN 1024 //设备调试命令最大长度 +#define MAX_DEBUGINFO_LEN 1400 //设备调试信息最大长度 +#define MAX_VEHICLE_ID_LEN 32 //最大车辆标识长度 #define LEN_PROPERTY 128 typedef struct { - DWORD dwSize; //αij, - NET_DVR_TIME_EX strStartTime; //ʼʱ - NET_DVR_TIME_EX strStopTime; //ʱ - char sLicense[MAX_LICENSE_LEN_EX/*32*/]; //ƺ + DWORD dwSize; //本段报文长度, + NET_DVR_TIME_EX strStartTime; //开始时间 + NET_DVR_TIME_EX strStopTime; //结束时间 + char sLicense[MAX_LICENSE_LEN_EX/*32*/]; //车牌号码 DWORD dwChannel; BYTE byRegion; - BYTE byRes[127]; // ֵ 0-1-ŷ(Europe Region)2-(Russian Region)3-ŷ&˹(EU&CIS) , 4-жMiddle East0xff- + BYTE byRes[127]; // 区域索引值 0-保留,1-欧洲(Europe Region),2-俄语区域(Russian Region),3-欧洲&俄罗斯(EU&CIS) , 4-中东(Middle East),0xff-所有 }NET_DVR_VEHICLE_INFO_COND, *LPNET_DVR_VEHICLE_INFO_COND; typedef struct { DWORD dwSize; - DWORD dwIndex;// - BYTE byDeviceID[DEVICE_ID_LEN/*48*/]; //豸 - BYTE byBelieve;//Ŷȣ0-100 - BYTE byDir;//0-壬1-2-3-δ֪ - BYTE byLineID;// + DWORD dwIndex;//序号 + BYTE byDeviceID[DEVICE_ID_LEN/*48*/]; //设备编号 + BYTE byBelieve;//置信度,0-100 + BYTE byDir;//方向,0-无意义,1-反向,2-正向,3-未知 + BYTE byLineID;//车道号 BYTE byRes1; - NET_DVR_TIME_EX struSnapTime;//ץʱ - char sLicense[MAX_LICENSE_LEN_EX/*32*/]; //ƺ - BYTE byMonitoringSiteID[MONITORSITE_ID_LEN /*48*/]; //ʾ - BYTE byCountry; // ֵöCOUNTRY_INDEX֧֡COUNTRY_ALL = 0xff, //ALL ȫ - BYTE byMatchingResult;//ƥ0-1-2-ֹ3- - BYTE byArea; //ʡݣڲö٣ EMI_AREA - BYTE byPlateType; // ο VCA_PLATE_TYPE - char sDeviceName[NAME_LEN/*32*/]; //豸 - BYTE byPlateColor; //ɫ ο VCA_PLATE_COLOR - BYTE byPlateSize; //Ƴߴ磬0~δ֪1~long, 2~short(жʹ) + NET_DVR_TIME_EX struSnapTime;//抓拍时间 + char sLicense[MAX_LICENSE_LEN_EX/*32*/]; //车牌号码 + BYTE byMonitoringSiteID[MONITORSITE_ID_LEN /*48*/]; //显示点编号 + BYTE byCountry; // 国家索引值,参照枚举COUNTRY_INDEX(不支持”COUNTRY_ALL = 0xff, //ALL 全部”) + BYTE byMatchingResult;//匹配结果:0-保留,1-允许名单,2-禁止名单,3-其他 + BYTE byArea; //区域(省份),各国家内部区域枚举,阿联酋参照 EMI_AREA + BYTE byPlateType; //车牌类型 参考 VCA_PLATE_TYPE + char sDeviceName[NAME_LEN/*32*/]; //设备名称 + BYTE byPlateColor; //车牌颜色 参考 VCA_PLATE_COLOR + BYTE byPlateSize; //车牌尺寸,0~未知,1~long, 2~short(中东车牌使用) BYTE byRes2[2]; - char sPlateCategory[MAX_CATEGORY_LEN/*8*/]; //ƸϢ, СϢ(Ŀǰֻж֧) - char sPlateImageURL[URL_LEN_V40/*256*/]; //СͼURL - char sEffectiveTime[ISO_8601_LEN/*32*/]; //ϢЧʱ䣬ʹISO8601 timeʽ磺2009-11-14T15:27Z + char sPlateCategory[MAX_CATEGORY_LEN/*8*/]; //车牌附加信息, 即车牌小字信息,(目前只有中东地区支持) + char sPlateImageURL[URL_LEN_V40/*256*/]; //车牌小图URL + char sEffectiveTime[ISO_8601_LEN/*32*/]; //车牌信息有效时间,使用ISO8601 time格式,如:2009-11-14T15:27Z BYTE byRes[176]; }NET_DVR_VEHICLE_INFO_CFG, *LPNET_DVR_VEHICLE_INFO_CFG; -//ܿϢ -#define MAX_VCA_CHAN 16//ͨ +//智能控制信息 +#define MAX_VCA_CHAN 16//最大智能通道数 typedef struct tagNET_VCA_CTRLINFO { - BYTE byVCAEnable; //Ƿ - BYTE byVCAType; //ͣVCA_CHAN_ABILITY_TYPE - BYTE byStreamWithVCA; //ǷϢ - BYTE byMode; //ģʽATMʱVCA_CHAN_MODE_TYPE ,TFSʱTFS_CHAN_MODE_TYPE - BYTE byControlType; //ͣλʾ0-1- - // byControlType &1 ǷץĹ - BYTE byPicWithVCA ;// ץͼĿϢ(Ŀ)0-ӣĬϣ1-ӣ - BYTE byRes[2]; //Ϊ0 + BYTE byVCAEnable; //是否开启智能 + BYTE byVCAType; //智能能力类型,VCA_CHAN_ABILITY_TYPE + BYTE byStreamWithVCA; //码流中是否带智能信息 + BYTE byMode; //模式,ATM能力时参照VCA_CHAN_MODE_TYPE ,TFS能力时参照TFS_CHAN_MODE_TYPE + BYTE byControlType; //控制类型,按位表示,0-否,1-是 + // byControlType &1 是否启用抓拍功能 + BYTE byPicWithVCA ;// 报警抓图叠加目标信息(目标框):0-不叠加(默认),1-叠加; + BYTE byRes[2]; //保留,设置为0 }NET_VCA_CTRLINFO, * LPNET_VCA_CTRLINFO; -//ܿϢṹ +//智能控制信息结构 typedef struct tagNET_VCA_CTRLCFG { DWORD dwSize; - NET_VCA_CTRLINFO struCtrlInfo[MAX_VCA_CHAN]; //Ϣ,0Ӧ豸ʼͨ + NET_VCA_CTRLINFO struCtrlInfo[MAX_VCA_CHAN]; //控制信息,数组0对应设备的起始通道 BYTE byRes[16]; }NET_VCA_CTRLCFG, * LPNET_VCA_CTRLCFG; -//豸 +//智能设备能力集 typedef struct tagNET_VCA_DEV_ABILITY { - DWORD dwSize; //ṹ - BYTE byVCAChanNum; //ͨ - BYTE byPlateChanNum; //ͨ - BYTE byBBaseChanNum; //Ϊ - BYTE byBAdvanceChanNum; //Ϊ߼ - BYTE byBFullChanNum; //Ϊ - BYTE byATMChanNum; //ATM - BYTE byPDCChanNum; //ͳͨ - BYTE byITSChanNum; //ͨ¼ͨ - BYTE byBPrisonChanNum; //Ϊ()ͨ - BYTE byFSnapChanNum; //Ŀץͨ - BYTE byFSnapRecogChanNum; //Ŀץĺʶͨ - BYTE byFRetrievalChanNum; // - BYTE bySupport; //λΪ0ʾ֧֣1ʾ֧ - //bySupport & 0x1ʾǷ֧ 2012-3-22 - //bySupport & 0x2ʾǷ֧128·ȡչ2012-12-27 - BYTE byFRecogChanNum; //Ŀʶͨ - BYTE byBPPerimeterChanNum; //Ϊ(ܽ)ͨ - BYTE byTPSChanNum; //ͨյͨ - BYTE byTFSChanNum; //·Υȡ֤ͨ - BYTE byFSnapBFullChanNum; //Ŀץĺ쳣Ϊͨ - BYTE byHeatMapChanNum; //ȶͼͨ - BYTE bySmartVehicleNum; //SMART¼+ͨ - BYTE bySmartHVTNum; //SMART¼+мͨ - BYTE bySmartNum; //SMART¼ - BYTE byVehicleNum; //ͨ - BYTE bySmartRoadDetectionNum; // SMART¼+·ͨ - BYTE bySmartFaceDetectionNum; // SMART¼+ͨ - BYTE bySmartHeatMapNum; // SMART¼+ȶͼͨ - BYTE byHumanRecognitionNum; //ʶͨ - BYTE byEdcationStudentNum; //¼ѧ&&ѧͳƣֵ֧ͨ - BYTE byRoadDetectionNum;//·ͨ - BYTE byPersonDensityDetection; //Աܶȼͨ - BYTE bySafetyHelmetDetection; //ȫñͨ - BYTE byPerimeterCapture;//ܽץͨ - BYTE byHeelPDC;//бͨ - BYTE by12MPLiveView;// 1200W@20fpsԤ4000*3000 - BYTE byTeacherBehaviorDetectNum; //¼ʦΪ⣩ֵ֧ͨ - BYTE byMixedTargetDetection;//Ŀͨ - BYTE byFaceContrast;//ȶԼͨ - BYTE byCityManagement;//ǻ۳ǹܼͨ - BYTE byMixedTargetDetectionSmart;//Ŀ+Smart¼ + DWORD dwSize; //结构长度 + BYTE byVCAChanNum; //智能通道个数 + BYTE byPlateChanNum; //车牌通道个数 + BYTE byBBaseChanNum; //行为基本版个数 + BYTE byBAdvanceChanNum; //行为高级版个数 + BYTE byBFullChanNum; //行为完整版个数 + BYTE byATMChanNum; //智能ATM个数 + BYTE byPDCChanNum; //人数统计通道个数 + BYTE byITSChanNum; //交通事件通道个数 + BYTE byBPrisonChanNum; //行为监狱版(监舍)通道个数 + BYTE byFSnapChanNum; //目标抓拍通道个数 + BYTE byFSnapRecogChanNum; //目标抓拍和识别通道个数 + BYTE byFRetrievalChanNum; //人脸后检索个数 + BYTE bySupport; //能力,位与结果为0表示不支持,1表示支持 + //bySupport & 0x1,表示是否支持智能 2012-3-22 + //bySupport & 0x2,表示是否支持128路取流扩展2012-12-27 + BYTE byFRecogChanNum; //目标识别通道个数 + BYTE byBPPerimeterChanNum; //行为监狱版(周界)通道个数 + BYTE byTPSChanNum; //交通诱导通道个数 + BYTE byTFSChanNum; //道路违章取证通道个数 + BYTE byFSnapBFullChanNum; //目标抓拍和异常行为检测通道个数 + BYTE byHeatMapChanNum; //热度图通道个数 + BYTE bySmartVehicleNum; //SMART事件+车辆检测通道个数 + BYTE bySmartHVTNum; //SMART事件+混行检测通道个数 + BYTE bySmartNum; //SMART事件个数 + BYTE byVehicleNum; //车辆检测通道个数 + BYTE bySmartRoadDetectionNum; // SMART事件+道路布防通道个数 + BYTE bySmartFaceDetectionNum; // SMART事件+人脸侦测通道个数 + BYTE bySmartHeatMapNum; // SMART事件+热度图通道个数 + BYTE byHumanRecognitionNum; //人体识别通道个数 + BYTE byEdcationStudentNum; //教育录播(学生起来检测&&学生人数统计)支持的通道数 + BYTE byRoadDetectionNum;//道路布防通道个数 + BYTE byPersonDensityDetection; //人员密度检测通道个数 + BYTE bySafetyHelmetDetection; //安全帽检测通道个数 + BYTE byPerimeterCapture;//周界抓拍通道个数 + BYTE byHeelPDC;//倾斜客流通道个数 + BYTE by12MPLiveView;// 主码流 1200W@20fps预览(4000*3000) + BYTE byTeacherBehaviorDetectNum; //教育录播(教师行为检测)支持的通道数 + BYTE byMixedTargetDetection;//混合目标检测通道个数 + BYTE byFaceContrast;//人脸比对检测通道个数 + BYTE byCityManagement;//智慧城管检测通道个数 + BYTE byMixedTargetDetectionSmart;//混合目标检测+Smart事件 BYTE byRes; }NET_VCA_DEV_ABILITY, *LPNET_VCA_DEV_ABILITY; -//쳣Ϊ +//异常行为检测能力类型 typedef enum _VCA_ABILITY_TYPE_ { - TRAVERSE_PLANE_ABILITY = 0x01, //Խ - ENTER_AREA_ABILITY = 0x02, // - EXIT_AREA_ABILITY = 0x04, //뿪 - INTRUSION_ABILITY = 0x08, // - LOITER_ABILITY = 0x10, //ǻ - LEFT_TAKE_ABILITY = 0x20, //Ʒȡ - PARKING_ABILITY = 0x40, //ͣ - RUN_ABILITY = 0x80, //ƶ - HIGH_DENSITY_ABILITY = 0x100, //Աۼ - LF_TRACK_ABILITY = 0x200, // - VIOLENT_MOTION_ABILITY = 0x400, //˶ - REACH_HIGHT_ABILITY = 0x800, //ʸ߼ - GET_UP_ABILITY = 0x1000, // - LEFT_ABILITY = 0x2000, //Ʒ - TAKE_ABILITY = 0x4000, //Ʒȡ - LEAVE_POSITION = 0x8000, // - TRAIL_ABILITY = 0x10000, //β - KEY_PERSON_GET_UP_ABILITY = 0x20000, //Ŀ - STANDUP_ABILITY = 0x40000, // - FALL_DOWN_ABILITY = 0x80000, // - AUDIO_ABNORMAL_ABILITY = 0x100000, //ǿͻ - ADV_REACH_HEIGHT_ABILITY = 0x200000, //ʸ - TOILET_TARRY_ABILITY = 0x400000, //Ŀʱ - YARD_TARRY_ABILITY = 0x800000, //ŷ糡 - ADV_TRAVERSE_PLANE_ABILITY = 0x1000000, //߾ - LECTURE_ABILITY = 0x2000000, //ڿ - ANSWER_ABILITY = 0x4000000, //ش - HUMAN_ENTER_ABILITY = 0x10000000, //˿ATM ,ֻATM_PANELģʽ֧ - OVER_TIME_ABILITY = 0x20000000, //ʱ,ֻATM_PANELģʽ֧ - STICK_UP_ABILITY = 0x40000000, //ֽ - INSTALL_SCANNER_ABILITY = 0x80000000 //װ + TRAVERSE_PLANE_ABILITY = 0x01, //穿越警戒面 + ENTER_AREA_ABILITY = 0x02, //进入区域 + EXIT_AREA_ABILITY = 0x04, //离开区域 + INTRUSION_ABILITY = 0x08, //入侵 + LOITER_ABILITY = 0x10, //徘徊 + LEFT_TAKE_ABILITY = 0x20, //物品遗留拿取 + PARKING_ABILITY = 0x40, //停车 + RUN_ABILITY = 0x80, //快速移动 + HIGH_DENSITY_ABILITY = 0x100, //人员聚集 + LF_TRACK_ABILITY = 0x200, //球机 + VIOLENT_MOTION_ABILITY = 0x400, //剧烈运动检测 + REACH_HIGHT_ABILITY = 0x800, //攀高检测 + GET_UP_ABILITY = 0x1000, //起身检测 + LEFT_ABILITY = 0x2000, //物品遗留 + TAKE_ABILITY = 0x4000, //物品拿取 + LEAVE_POSITION = 0x8000, //离岗 + TRAIL_ABILITY = 0x10000, //尾随 + KEY_PERSON_GET_UP_ABILITY = 0x20000, //目标起身检测 + STANDUP_ABILITY = 0x40000, //起立 + FALL_DOWN_ABILITY = 0x80000, //倒地 + AUDIO_ABNORMAL_ABILITY = 0x100000, //声强突变 + ADV_REACH_HEIGHT_ABILITY = 0x200000, //折线攀高 + TOILET_TARRY_ABILITY = 0x400000, //目标区域滞留超时 + YARD_TARRY_ABILITY = 0x800000, //放风场滞留 + ADV_TRAVERSE_PLANE_ABILITY = 0x1000000, //折线警戒面 + LECTURE_ABILITY = 0x2000000, //授课 + ANSWER_ABILITY = 0x4000000, //回答问题 + HUMAN_ENTER_ABILITY = 0x10000000, //人靠近ATM ,只在ATM_PANEL模式下支持 + OVER_TIME_ABILITY = 0x20000000, //操作超时,只在ATM_PANEL模式下支持 + STICK_UP_ABILITY = 0x40000000, //贴纸条 + INSTALL_SCANNER_ABILITY = 0x80000000 //安装读卡器 }VCA_ABILITY_TYPE; typedef enum _VCA_ABILITY_TYPE_EX_ { - PEOPLENUM_CHANGE_ABILITY = 0x00000002, //仯 - SPACING_CHANGE_ABILITY = 0x00000004, //仯 - EVENT_COMBINED_ABILITY = 0x00000008, //¼ - EVENT_SIT_QUIETLY = 0x00000010, //һ - EVENT_HIGH_DENSITY_STATUS_ABILITY = 0x00000020, //Աۼ״̬ - EVENT_RUNNING = 0x00000040, // - EVENT_RETENTION = 0x00000080, // - EVENT_TEACHER_WRITING = 0x00000100, // - EVENT_FAKECARD = 0x00000200 //α쿨 + PEOPLENUM_CHANGE_ABILITY = 0x00000002, //人数变化检测 + SPACING_CHANGE_ABILITY = 0x00000004, //间距变化检测 + EVENT_COMBINED_ABILITY = 0x00000008, //组合事件规则 + EVENT_SIT_QUIETLY = 0x00000010, //一动不动 + EVENT_HIGH_DENSITY_STATUS_ABILITY = 0x00000020, //人员聚集状态 + EVENT_RUNNING = 0x00000040, //奔跑 + EVENT_RETENTION = 0x00000080, //滞留 + EVENT_TEACHER_WRITING = 0x00000100, //板书 + EVENT_FAKECARD = 0x00000200 //伪造卡检测 }VCA_ABILITY_TYPE_EX; -//ͨ +//智能通道类型 typedef enum _VCA_CHAN_ABILITY_TYPE_ { - VCA_BEHAVIOR_BASE = 1, //쳣Ϊ - VCA_BEHAVIOR_ADVANCE = 2, //쳣Ϊ߼ - VCA_BEHAVIOR_FULL = 3, //쳣Ϊ - VCA_PLATE = 4, // - VCA_ATM = 5, //ATM - VCA_PDC = 6, //ͳ - VCA_ITS = 7, // ͨ¼ - VCA_BEHAVIOR_PRISON = 8, //쳣Ϊ() - VCA_FACE_SNAP = 9, //Ŀץ - VCA_FACE_SNAPRECOG = 10, //Ŀץĺʶ - VCA_FACE_RETRIEVAL = 11, // - VCA_FACE_RECOG = 12, //Ŀʶ - VCA_BEHAVIOR_PRISON_PERIMETER = 13, // 쳣Ϊ (ܽ) - VCA_TPS = 14, //ͨյ - VCA_TFS = 15, //·Υȡ֤ - VCA_BEHAVIOR_FACESNAP = 16, //Ŀץĺ쳣Ϊ - VCA_HEATMAP = 17, //ȶͼ - VCA_SMART_VEHICLE_DETECTION = 18, // SMART¼+ - VCA_SMART_HVT_DETECTION = 19, // SMART¼+м - VCA_SMART_EVENT = 20, // SMART¼ - VCA_VEHICLE_DETECTION = 21, // - VCA_SMART_ROAD_DETECTION = 22, // SMART¼+· - VCA_SMART_FACE_DETECTION = 23, // SMART¼+ - VCA_SMART_HEATMAP = 24, // SMART¼+ȶͼ - VCA_HUMAN_RECOGNITION = 25, // ʶ - VCA_EDUCATION_STUDENT_DETECTION = 26, //¼ѧ&&ѧͳƣ - VCA_ROAD_DETECTION = 27, //· - VCA_PERSON_DENSITY_DETECTION = 28, //Աܶȼ - VCA_PERIMETER_CAPTURE = 29, //ܽץ - VCA_SAFETY_HELMET_DETECTION = 30, //ȫñ - VCA_HEEL_PDC = 31, //б - VCA_12MPLIVE_VIEW = 32, // 1200W@20fpsԤ4000*3000 - VCA_TEACHER_BEHAVIOR_DETECTION = 33, //ʦΪ - VCA_MIXED_TARGET_DETECTION = 34, //Ŀ - VCA_FACE_CONTRAST = 35, //Աȼ(ͬʱ֧ĿץļԱȹܣ㷨IJͬ㷨ȶΪģȷÿαȶԳɹĿ겻ʺ϶ԱԸĿץġ) - VCA_CITY_MANAGEMENT = 36, //ǻ۳ǹ - VCA_MIXED_TARGET_DETECTION_SMART = 37 //ĿSmart + VCA_BEHAVIOR_BASE = 1, //异常行为检测基本版 + VCA_BEHAVIOR_ADVANCE = 2, //异常行为检测高级版 + VCA_BEHAVIOR_FULL = 3, //异常行为检测完整版 + VCA_PLATE = 4, //车牌能力 + VCA_ATM = 5, //ATM能力 + VCA_PDC = 6, //人流量统计 + VCA_ITS = 7, //智能 交通事件 + VCA_BEHAVIOR_PRISON = 8, //异常行为检测监狱版(监舍) + VCA_FACE_SNAP = 9, //目标抓拍能力 + VCA_FACE_SNAPRECOG = 10, //目标抓拍和识别能力 + VCA_FACE_RETRIEVAL = 11, //人脸后检索能力 + VCA_FACE_RECOG = 12, //目标识别能力 + VCA_BEHAVIOR_PRISON_PERIMETER = 13, // 异常行为检测监狱版 (周界) + VCA_TPS = 14, //交通诱导 + VCA_TFS = 15, //道路违章取证 + VCA_BEHAVIOR_FACESNAP = 16, //目标抓拍和异常行为检测能力 + VCA_HEATMAP = 17, //热度图 + VCA_SMART_VEHICLE_DETECTION = 18, // SMART事件+车辆检测 + VCA_SMART_HVT_DETECTION = 19, // SMART事件+混行检测 + VCA_SMART_EVENT = 20, // SMART事件 + VCA_VEHICLE_DETECTION = 21, // 车辆检测 + VCA_SMART_ROAD_DETECTION = 22, // SMART事件+道路布防 + VCA_SMART_FACE_DETECTION = 23, // SMART事件+人脸侦测 + VCA_SMART_HEATMAP = 24, // SMART事件+热度图 + VCA_HUMAN_RECOGNITION = 25, // 人体识别 + VCA_EDUCATION_STUDENT_DETECTION = 26, //教育录播(学生起来检测&&学生人数统计) + VCA_ROAD_DETECTION = 27, //道路布防 + VCA_PERSON_DENSITY_DETECTION = 28, //人员密度检测 + VCA_PERIMETER_CAPTURE = 29, //周界抓拍 + VCA_SAFETY_HELMET_DETECTION = 30, //安全帽检测 + VCA_HEEL_PDC = 31, //倾斜客流 + VCA_12MPLIVE_VIEW = 32, //主码流 1200W@20fps预览(4000*3000) + VCA_TEACHER_BEHAVIOR_DETECTION = 33, //教师行为检测 + VCA_MIXED_TARGET_DETECTION = 34, //混合目标检测 + VCA_FACE_CONTRAST = 35, //人脸对比检测(同时支持目标抓拍及人脸对比功能,但是算法核心不同。算法采用人脸比对为核心,确保每次比对成功。若目标不适合对比则将舍弃对该目标进行抓拍。) + VCA_CITY_MANAGEMENT = 36, //智慧城管 + VCA_MIXED_TARGET_DETECTION_SMART = 37 //混合目标检测加Smart }VCA_CHAN_ABILITY_TYPE; -//ATMģʽ(ATM) +//智能ATM模式类型(ATM能力特有) typedef enum _VCA_CHAN_MODE_TYPE_ { - VCA_ATM_PANEL = 0, //ATM - VCA_ATM_SURROUND = 1, //ATM - VCA_ATM_FACE = 2, //ATM - VCA_ATM_SAFETYCABIN = 3 //ATM + VCA_ATM_PANEL = 0, //ATM面板 + VCA_ATM_SURROUND = 1, //ATM环境 + VCA_ATM_FACE = 2, //ATM人脸 + VCA_ATM_SAFETYCABIN = 3 //ATM防护舱 }VCA_CHAN_MODE_TYPE; -//ͨȡ֤TFSͨģʽ(TFS) +//交通取证TFS通道模式(TFS能力特有) typedef enum _TFS_CHAN_MODE_TYPE_ { - TFS_CITYROAD = 0, //TFS е· - TFS_FREEWAY = 1 //TFS ٵ· + TFS_CITYROAD = 0, //TFS 城市道路 + TFS_FREEWAY = 1 //TFS 高速道路 }TFS_CHAN_MODE_TYPE; -//쳣Ϊⳡģʽ +//异常行为检测场景模式 typedef enum _BEHAVIOR_SCENE_MODE_TYPE_ { - BEHAVIOR_SCENE_DEFAULT = 0, //ϵͳĬ - BEHAVIOR_SCENE_WALL = 1, //Χǽ - BEHAVIOR_SCENE_INDOOR = 2 // + BEHAVIOR_SCENE_DEFAULT = 0, //系统默认 + BEHAVIOR_SCENE_WALL = 1, //围墙 + BEHAVIOR_SCENE_INDOOR = 2 //室内 }BEHAVIOR_SCENE_MODE_TYPE; -//ģʽ +//监舍模式 typedef enum _BEHAVIOR_PRISON_MODE_TYPE_ { - BEHAVIOR_PRISON = 0, // - BEHAVIOR_HEARING = 1, //Ѷ - BEHAVIOR_RECFIELD = 2 //ŷ糡 + BEHAVIOR_PRISON = 0, //监所 + BEHAVIOR_HEARING = 1, //审讯室 + BEHAVIOR_RECFIELD = 2 //放风场 }BEHAVIOR_PRISON_MODE_TYPE,LPBEHAVIOR_PRISON_MODE_TYPE; -//ͨ +//通道能力输入参数 typedef struct tagNET_VCA_CHAN_IN_PARAM { - BYTE byVCAType; //VCA_CHAN_ABILITY_TYPEöֵ - BYTE byMode; //ģʽATM ʱVCA_CHAN_MODE_TYPE,TFSʱTFS_CHAN_MODE_TYPE,VCA_TYPE Ϊͨ¼ʱTRAFFIC_SCENE_MODE - BYTE byRes[2]; //Ϊ0 + BYTE byVCAType; //VCA_CHAN_ABILITY_TYPE枚举值 + BYTE byMode; //模式,ATM 能力时参照VCA_CHAN_MODE_TYPE,TFS能力时参照TFS_CHAN_MODE_TYPE,当VCA_TYPE 为交通事件时参照TRAFFIC_SCENE_MODE + BYTE byRes[2]; //保留,设置为0 }NET_VCA_CHAN_IN_PARAM, *LPNET_VCA_CHAN_IN_PARAM; -//Ϊṹ +//行为能力集结构 typedef struct tagNET_VCA_BEHAVIOR_ABILITY { - DWORD dwSize; //ṹ - DWORD dwAbilityType; //ֵ֧ͣλʾVCA_ABILITY_TYPE - BYTE byMaxRuleNum; // - BYTE byMaxTargetNum; //Ŀ - BYTE bySupport; // ֵ֧Ĺ λʾ - // bySupport & 0x01 ֱ֧궨 - BYTE byRes[5]; //Ϊ0 - DWORD dwAbilityTypeEx; //ֵ֧ͣλʾVCA_ABILITY_TYPE_EX + DWORD dwSize; //结构长度 + DWORD dwAbilityType; //支持的能力类型,按位表示,见VCA_ABILITY_TYPE定义 + BYTE byMaxRuleNum; //最大规则数 + BYTE byMaxTargetNum; //最大目标数 + BYTE bySupport; // 支持的功能类型 按位表示 + // bySupport & 0x01 支持标定功能 + BYTE byRes[5]; //保留,设置为0 + DWORD dwAbilityTypeEx; //支持的能力类型,按位表示,见VCA_ABILITY_TYPE_EX定义 }NET_VCA_BEHAVIOR_ABILITY, *LPNET_VCA_BEHAVIOR_ABILITY; -//ݸ² +//场景变更数据更新参数 typedef struct tagNET_DVR_SCENE_CHANGE_UPDATE_PARAM { DWORD dwSize; - BYTE byIDCount; //ʵID + BYTE byIDCount; //实际流ID数 BYTE byRes1[3]; BYTE byStreamID[MAX_STREAM_ID_NUM][STREAM_ID_LEN]; BYTE byRes[256]; }NET_DVR_SCENE_CHANGE_UPDATE_PARAM, *LPNET_DVR_SCENE_CHANGE_UPDATE_PARAM; -// ͨṹ +// 交通能力集结构 typedef struct tagNET_DVR_ITS_ABILITY { - DWORD dwSize; // ṹС - DWORD dwAbilityType; // ֵ֧б ITS_ABILITY_TYPE - BYTE byMaxRuleNum; // - BYTE byMaxTargetNum; //Ŀ - BYTE byRes[10]; // + DWORD dwSize; // 结构体大小 + DWORD dwAbilityType; // 支持的能力列表 参照ITS_ABILITY_TYPE + BYTE byMaxRuleNum; //最大规则数 + BYTE byMaxTargetNum; //最大目标数 + BYTE byRes[10]; // 保留 }NET_DVR_ITS_ABILITY, *LPNET_DVR_ITS_ABILITY; /***********************************end*******************************************/ -/************************************ܲṹ*********************************/ -//ܹýṹ -//ֵһ,ֵΪǰİٷֱȴС, ΪСλ +/************************************智能参数结构*********************************/ +//智能共用结构 +//坐标值归一化,浮点数值为当前画面的百分比大小, 精度为小数点后三位 -//쳣Ϊ¼ +//异常行为检测事件类型 typedef enum _VCA_EVENT_TYPE_ { - VCA_TRAVERSE_PLANE = 0x1, //Խ - VCA_ENTER_AREA = 0x2, //Ŀ,֧ - VCA_EXIT_AREA = 0x4, //Ŀ뿪,֧ - VCA_INTRUSION = 0x8, //ܽ,֧ - VCA_LOITER = 0x10, //ǻ,֧ - VCA_LEFT_TAKE = 0x20, //Ʒȡ,֧ - VCA_PARKING = 0x40, //ͣ,֧ - VCA_RUN = 0x80, //ƶ,֧ - VCA_HIGH_DENSITY = 0x100, //Աۼ,֧ - VCA_VIOLENT_MOTION = 0x200, //˶ - VCA_REACH_HIGHT = 0x400, //ʸ߼ - VCA_GET_UP = 0x800, // - VCA_LEFT = 0x1000, //Ʒ - VCA_TAKE = 0x2000, //Ʒȡ - VCA_LEAVE_POSITION = 0x4000, // - VCA_TRAIL = 0x8000, //β - VCA_KEY_PERSON_GET_UP = 0x10000, //Ŀ - VCA_STANDUP = 0x20000, // - VCA_FALL_DOWN = 0x80000, //ؼ - VCA_AUDIO_ABNORMAL = 0x100000, //ǿͻ - VCA_ADV_REACH_HEIGHT = 0x200000, //ʸ - VCA_TOILET_TARRY = 0x400000, //Ŀʱ - VCA_YARD_TARRY = 0x800000, //ŷ糡 - VCA_ADV_TRAVERSE_PLANE = 0x1000000, //߾ - VCA_LECTURE = 0x2000000, //ڿ - VCA_ANSWER = 0x4000000, //ش - VCA_HUMAN_ENTER = 0x10000000, //˿ATM ֻATM_PANELģʽ֧ - VCA_OVER_TIME = 0x20000000, //ʱ ֻATM_PANELģʽ֧ - VCA_STICK_UP = 0x40000000, //ֽ,֧ - VCA_INSTALL_SCANNER = 0x80000000 //װ,֧ + VCA_TRAVERSE_PLANE = 0x1, //穿越警戒面 + VCA_ENTER_AREA = 0x2, //目标进入区域,支持区域规则 + VCA_EXIT_AREA = 0x4, //目标离开区域,支持区域规则 + VCA_INTRUSION = 0x8, //周界入侵,支持区域规则 + VCA_LOITER = 0x10, //徘徊,支持区域规则 + VCA_LEFT_TAKE = 0x20, //物品遗留拿取,支持区域规则 + VCA_PARKING = 0x40, //停车,支持区域规则 + VCA_RUN = 0x80, //快速移动,支持区域规则 + VCA_HIGH_DENSITY = 0x100, //区域内人员聚集,支持区域规则 + VCA_VIOLENT_MOTION = 0x200, //剧烈运动检测 + VCA_REACH_HIGHT = 0x400, //攀高检测 + VCA_GET_UP = 0x800, //起身检测 + VCA_LEFT = 0x1000, //物品遗留 + VCA_TAKE = 0x2000, //物品拿取 + VCA_LEAVE_POSITION = 0x4000, //离岗 + VCA_TRAIL = 0x8000, //尾随 + VCA_KEY_PERSON_GET_UP = 0x10000, //目标起身检测 + VCA_STANDUP = 0x20000, //起立 + VCA_FALL_DOWN = 0x80000, //倒地检测 + VCA_AUDIO_ABNORMAL = 0x100000, //声强突变检测 + VCA_ADV_REACH_HEIGHT = 0x200000, //折线攀高 + VCA_TOILET_TARRY = 0x400000, //目标区域滞留超时 + VCA_YARD_TARRY = 0x800000, //放风场滞留 + VCA_ADV_TRAVERSE_PLANE = 0x1000000, //折线警戒面 + VCA_LECTURE = 0x2000000, //授课 + VCA_ANSWER = 0x4000000, //回答问题 + VCA_HUMAN_ENTER = 0x10000000, //人靠近ATM 只在ATM_PANEL模式下支持 + VCA_OVER_TIME = 0x20000000, //操作超时 只在ATM_PANEL模式下支持 + VCA_STICK_UP = 0x40000000, //贴纸条,支持区域规则 + VCA_INSTALL_SCANNER = 0x80000000 //安装读卡器,支持区域规则 }VCA_EVENT_TYPE; -//쳣Ϊ¼չ +//异常行为检测事件类型扩展 typedef enum _VCA_RULE_EVENT_TYPE_EX_ { - ENUM_VCA_EVENT_TRAVERSE_PLANE = 1, //Խ - ENUM_VCA_EVENT_ENTER_AREA = 2, //Ŀ,֧ - ENUM_VCA_EVENT_EXIT_AREA = 3, //Ŀ뿪,֧ - ENUM_VCA_EVENT_INTRUSION = 4, //ܽ,֧ - ENUM_VCA_EVENT_LOITER = 5, //ǻ,֧ - ENUM_VCA_EVENT_LEFT_TAKE = 6, //Ʒȡ,֧ - ENUM_VCA_EVENT_PARKING = 7, //ͣ,֧ - ENUM_VCA_EVENT_RUN = 8, //ƶ,֧ - ENUM_VCA_EVENT_HIGH_DENSITY = 9, //Աۼ,֧ - ENUM_VCA_EVENT_VIOLENT_MOTION = 10, //˶ - ENUM_VCA_EVENT_REACH_HIGHT = 11, //ʸ߼ - ENUM_VCA_EVENT_GET_UP = 12, // - ENUM_VCA_EVENT_LEFT = 13, //Ʒ - ENUM_VCA_EVENT_TAKE = 14, //Ʒȡ - ENUM_VCA_EVENT_LEAVE_POSITION = 15, // - ENUM_VCA_EVENT_TRAIL = 16, //β - ENUM_VCA_EVENT_KEY_PERSON_GET_UP = 17, //Ŀ - ENUM_VCA_EVENT_STANDUP = 18, // - ENUM_VCA_EVENT_FALL_DOWN = 20, //ؼ - ENUM_VCA_EVENT_AUDIO_ABNORMAL = 21, //ǿͻ - ENUM_VCA_EVENT_ADV_REACH_HEIGHT = 22, //ʸ - ENUM_VCA_EVENT_TOILET_TARRY = 23, //Ŀʱ - ENUM_VCA_EVENT_YARD_TARRY = 24, //ŷ糡 - ENUM_VCA_EVENT_ADV_TRAVERSE_PLANE = 25, //߾ - ENUM_VCA_EVENT_LECTURE = 26, //ڿΣḶ̌ - ENUM_VCA_EVENT_ANSWER = 27, //ش⣨Ḷ̌ - ENUM_VCA_EVENT_HUMAN_ENTER = 29, //˿ATM,ֻATM_PANELģʽ֧ - ENUM_VCA_EVENT_OVER_TIME = 30, //ʱ,ֻATM_PANELģʽ֧ - ENUM_VCA_EVENT_STICK_UP = 31, //ֽ,֧ - ENUM_VCA_EVENT_INSTALL_SCANNER = 32, //װ,֧ - ENUM_VCA_EVENT_PEOPLENUM_CHANGE = 35, //仯¼ - ENUM_VCA_EVENT_SPACING_CHANGE = 36, //仯¼ - ENUM_VCA_EVENT_COMBINED_RULE = 37, //Ϲ¼ - ENUM_VCA_EVENT_SIT_QUIETLY = 38, //һ¼ - ENUM_VCA_EVENT_HIGH_DENSITY_STATUS= 39, //Աۼ״̬ - ENUM_VCA_EVENT_RUNNING = 40, //ܼ - ENUM_VCA_EVENT_RETENTION = 41, // - ENUM_VCA_EVENT_BLACKBOARD_WRITE = 42, // - ENUM_VCA_EVENT_SITUATION_ANALYSIS = 43, //̬Ʒ - ENUM_VCA_EVENT_PLAY_CELLPHONE = 44, //ֻ - ENUM_VCA_EVENT_DURATION = 45, // - ENUM_VCA_EVENT_FAKECARD = 46 //α쿨 + ENUM_VCA_EVENT_TRAVERSE_PLANE = 1, //穿越警戒面 + ENUM_VCA_EVENT_ENTER_AREA = 2, //目标进入区域,支持区域规则 + ENUM_VCA_EVENT_EXIT_AREA = 3, //目标离开区域,支持区域规则 + ENUM_VCA_EVENT_INTRUSION = 4, //周界入侵,支持区域规则 + ENUM_VCA_EVENT_LOITER = 5, //徘徊,支持区域规则 + ENUM_VCA_EVENT_LEFT_TAKE = 6, //物品遗留拿取,支持区域规则 + ENUM_VCA_EVENT_PARKING = 7, //停车,支持区域规则 + ENUM_VCA_EVENT_RUN = 8, //快速移动,支持区域规则 + ENUM_VCA_EVENT_HIGH_DENSITY = 9, //区域内人员聚集,支持区域规则 + ENUM_VCA_EVENT_VIOLENT_MOTION = 10, //剧烈运动检测 + ENUM_VCA_EVENT_REACH_HIGHT = 11, //攀高检测 + ENUM_VCA_EVENT_GET_UP = 12, //起身检测 + ENUM_VCA_EVENT_LEFT = 13, //物品遗留 + ENUM_VCA_EVENT_TAKE = 14, //物品拿取 + ENUM_VCA_EVENT_LEAVE_POSITION = 15, //离岗 + ENUM_VCA_EVENT_TRAIL = 16, //尾随 + ENUM_VCA_EVENT_KEY_PERSON_GET_UP = 17, //目标起身检测 + ENUM_VCA_EVENT_STANDUP = 18, //起立 + ENUM_VCA_EVENT_FALL_DOWN = 20, //倒地检测 + ENUM_VCA_EVENT_AUDIO_ABNORMAL = 21, //声强突变检测 + ENUM_VCA_EVENT_ADV_REACH_HEIGHT = 22, //折线攀高 + ENUM_VCA_EVENT_TOILET_TARRY = 23, //目标区域滞留超时 + ENUM_VCA_EVENT_YARD_TARRY = 24, //放风场滞留 + ENUM_VCA_EVENT_ADV_TRAVERSE_PLANE = 25, //折线警戒面 + ENUM_VCA_EVENT_LECTURE = 26, //授课(文教) + ENUM_VCA_EVENT_ANSWER = 27, //回答问题(文教) + ENUM_VCA_EVENT_HUMAN_ENTER = 29, //人靠近ATM,只在ATM_PANEL模式下支持 + ENUM_VCA_EVENT_OVER_TIME = 30, //操作超时,只在ATM_PANEL模式下支持 + ENUM_VCA_EVENT_STICK_UP = 31, //贴纸条,支持区域规则 + ENUM_VCA_EVENT_INSTALL_SCANNER = 32, //安装读卡器,支持区域规则 + ENUM_VCA_EVENT_PEOPLENUM_CHANGE = 35, //人数变化事件 + ENUM_VCA_EVENT_SPACING_CHANGE = 36, //间距变化事件 + ENUM_VCA_EVENT_COMBINED_RULE = 37, //组合规则事件 + ENUM_VCA_EVENT_SIT_QUIETLY = 38, //一动不动则事件 + ENUM_VCA_EVENT_HIGH_DENSITY_STATUS= 39, //区域内人员聚集状态 + ENUM_VCA_EVENT_RUNNING = 40, //奔跑检测 + ENUM_VCA_EVENT_RETENTION = 41, //滞留检测 + ENUM_VCA_EVENT_BLACKBOARD_WRITE = 42, //板书 + ENUM_VCA_EVENT_SITUATION_ANALYSIS = 43, //态势分析 + ENUM_VCA_EVENT_PLAY_CELLPHONE = 44, //玩手机检测 + ENUM_VCA_EVENT_DURATION = 45, //持续报警 + ENUM_VCA_EVENT_FAKECARD = 46 //伪造卡检测 } VCA_RULE_EVENT_TYPE_EX; -//洩Խ +//警戒面穿越方向类型 typedef enum _VCA_CROSS_DIRECTION_ { - VCA_BOTH_DIRECTION, // ˫ - VCA_LEFT_GO_RIGHT, // - VCA_RIGHT_GO_LEFT // + VCA_BOTH_DIRECTION, // 双向 + VCA_LEFT_GO_RIGHT, // 由左至右 + VCA_RIGHT_GO_LEFT // 由右至左 }VCA_CROSS_DIRECTION; -//߽ṹ +//线结构 typedef struct tagNET_VCA_LINE { - NET_VCA_POINT struStart; // - NET_VCA_POINT struEnd; //յ + NET_VCA_POINT struStart; //起点 + NET_VCA_POINT struEnd; //终点 }NET_VCA_LINE, *LPNET_VCA_LINE; -//ͽṹ +//多边型结构体 typedef struct tagNET_VCA_POLYGON { - DWORD dwPointNum; //Ч ڵ33һΪЧ߽ΪЧ - NET_VCA_POINT struPos[VCA_MAX_POLYGON_POINT_NUM]; //α߽,ʮ + DWORD dwPointNum; //有效点 大于等于3,若是3点在一条线上认为是无效区域,线交叉认为是无效区域 + NET_VCA_POINT struPos[VCA_MAX_POLYGON_POINT_NUM]; //多边形边界点,最多十个 }NET_VCA_POLYGON, *LPNET_VCA_POLYGON; -// +//警戒面参数 typedef struct tagNET_VCA_TRAVERSE_PLANE { - NET_VCA_LINE struPlaneBottom; //ױ - VCA_CROSS_DIRECTION dwCrossDirection; //Խ: 0-˫1-ң2-ҵ - BYTE bySensitivity; //ȲΧ[1,5] - BYTE byPlaneHeight; //߶ + NET_VCA_LINE struPlaneBottom; //警戒面底边 + VCA_CROSS_DIRECTION dwCrossDirection; //穿越方向: 0-双向,1-从左到右,2-从右到左 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byPlaneHeight; //警戒面高度 /* - Ŀֶ֧꣬ѡ嶨Ϊ - 0~Ŀ꣨ʾĿ꣬Ŀ궼м⣩ - 0x01 ~ ˣ - 0x02 ~ - 0x04 ~ - ֶֶ֧ѡλȡֵ3ʾ1+2. + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. */ BYTE byDetectionTarget; - BYTE byPriority;//ȼ,0~,1~,2~ - BYTE byAlarmConfidence; //Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRecordConfidence; //¼Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRes2[34]; // + BYTE byPriority;//优先级,0~低,1~中,2~高 + BYTE byAlarmConfidence; //报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; //录像置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRes2[34]; //保留 }NET_VCA_TRAVERSE_PLANE, *LPNET_VCA_TRAVERSE_PLANE; typedef struct tagNET_VCA_SIT_QUIETLY { - NET_VCA_POLYGON struRegion;//Χ - //򴥷˳0-˳򴥷1-˳򴥷 - DWORD dwDuration; //ʱ λs Χ1-3600 + NET_VCA_POLYGON struRegion;//区域范围 + //规则触发顺序,0-顺序或逆序触发,1-顺序触发 + DWORD dwDuration; //持续时间 单位s 范围1-3600 BYTE byRes[4]; } NET_VCA_SIT_QUIETLY, *LPNET_VCA_SIT_QUIETLY; -///뿪 +//进入/离开区域参数 typedef struct tagNET_VCA_AREA { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1,5] + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1,5] /* - Ŀֶ֧꣬ѡ嶨Ϊ - 0~Ŀ꣨ʾĿ꣬Ŀ궼м⣩ - 0x01 ~ ˣ - 0x02 ~ - 0x04 ~ - ֶֶ֧ѡλȡֵ3ʾ1+2. + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. */ BYTE byDetectionTarget; - BYTE byPriority;//ȼ,0~,1~,2~ + BYTE byPriority;//优先级,0~低,1~中,2~高 BYTE byRes[5]; }NET_VCA_AREA, *LPNET_VCA_AREA; -//ݱӳʱʶдͼƬIOһ£1뷢һ -//ֲ +//根据报警延迟时间来标识报警中带图片,报警间隔和IO报警一致,1秒发送一个。 +//入侵参数 typedef struct tagNET_VCA_INTRUSION { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; //Ϊ¼ʱֵ: 1-120룬5룬жЧʱ ATMϵͳдļֵΪ 1-1000 - BYTE bySensitivity; //ȲΧ[1-100] - BYTE byRate; //ռȣδĿߴĿռıأһΪ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //行为事件触发时间阈值: 1-120秒,建议5秒,判断是有效报警的时间 在ATM系统中触发文件阈值为 1-1000秒 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byRate; //占比:区域内所有未报警目标尺寸目标占区域面积的比重,归一化为-; /* - Ŀֶ֧꣬ѡ嶨Ϊ - 0~Ŀ꣨ʾĿ꣬Ŀ궼м⣩ - 0x01 ~ ˣ - 0x02 ~ - 0x04 ~ - ֶֶ֧ѡλȡֵ3ʾ1+2. + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. */ BYTE byDetectionTarget; - BYTE byPriority;//ȼ,0~,1~,2~ - BYTE byAlarmConfidence; //Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRecordConfidence; //¼Ŷ, 0-,1-ϵ,2-ϸ,3- + BYTE byPriority;//优先级,0~低,1~中,2~高 + BYTE byAlarmConfidence; //报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; //录像置信度, 0-低,1-较低,2-较高,3-高 }NET_VCA_INTRUSION, *LPNET_VCA_INTRUSION; -//ǻ +//徘徊参数 typedef struct tagNET_VCA_LOITER { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; //ʱֵ1-120룬10 - BYTE bySensitivity; //ȲΧ[1,5] + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //触发时间阈值:1-120秒,建议10秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] BYTE byRes[1]; - DWORD dwLoiterDistance; //гֵܾ100-5000Ĭ1000cm + DWORD dwLoiterDistance; //行程总距离阈值:100-5000,默认1000cm }NET_VCA_LOITER, *LPNET_VCA_LOITER; -//Ʒ/Ʒȡ +//物品遗留/物品拿取参数 typedef struct tagNET_VCA_TAKE_LEFT { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; //ʱֵ1-120룬10 - BYTE bySensitivity; //ȲΧ[1,5] + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //触发时间阈值:1-120秒,建议10秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] BYTE byRes[5]; }NET_VCA_TAKE_LEFT, *LPNET_VCA_TAKE_LEFT; -//ͣ +//停车参数 typedef struct tagNET_VCA_PARKING { - NET_VCA_POLYGON struRegion; //Χ - WORD wDuration; //ʱֵ1-100룬10 - BYTE bySensitivity; //ȲΧ[1,5] + NET_VCA_POLYGON struRegion; //区域范围 + WORD wDuration; //触发时间阈值:1-100秒,建议10秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] BYTE byRes[5]; }NET_VCA_PARKING, *LPNET_VCA_PARKING; -//ƶ +//快速移动参数 typedef struct tagNET_VCA_RUN { - NET_VCA_POLYGON struRegion; //Χ - float fRunDistance; //˿ƶ, Χ: [0.1, 1.00] ģʽ ʵģʽ(1,20)m/s - BYTE bySensitivity; //ȲΧ[1,5] - BYTE byMode; // 0 ģʽ 1 ʵģʽ + NET_VCA_POLYGON struRegion; //区域范围 + float fRunDistance; //人快速移动最大距离, 范围: [0.1, 1.00] 像素模式 实际模式(1,20)m/s + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byMode; // 0 像素模式 1 实际模式 /* - Ŀֶ֧꣬ѡ嶨Ϊ - 0~Ŀ꣨ʾĿ꣬Ŀ궼м⣩ - 0x01 ~ ˣ - 0x02 ~ - 0x04 ~ - ֶֶ֧ѡλȡֵ3ʾ1+2. + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车,, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. */ BYTE byDetectionTarget; BYTE byRes; }NET_VCA_RUN, *LPNET_VCA_RUN; -//Աۼ +//人员聚集参数 typedef struct tagNET_VCA_HIGH_DENSITY { - NET_VCA_POLYGON struRegion; //Χ - float fDensity; //ۼ, Χ: [0.1, 1.0] - BYTE bySensitivity; //ȲΧ[1,5] - BYTE byRes; // ֽ - WORD wDuration; // Աۼֵ 20-360s + NET_VCA_POLYGON struRegion; //区域范围 + float fDensity; //聚集比率, 范围: [0.1, 1.0] + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes; // 保留字节 + WORD wDuration; // 触发人员聚集参数报警阈值 20-360s }NET_VCA_HIGH_DENSITY, *LPNET_VCA_HIGH_DENSITY; -//˶ +//剧烈运动参数 typedef struct tagNET_VCA_VIOLENT_MOTION { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; //˶ֵ1-50 - BYTE bySensitivity; //ȲΧ[1,5] - BYTE byMode; //0-Ƶģʽ1-Ƶģʽ2-Ƶģʽ - BYTE byRes[4]; // + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //触发剧烈运动报警阈值:1-50秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byMode; //0-纯视频模式,1-音视频联合模式,2-纯音频模式 + BYTE byRes[4]; //保留 }NET_VCA_VIOLENT_MOTION, *LPNET_VCA_VIOLENT_MOTION; -// ʸ߲ +// 攀高参数 typedef struct tagNET_VCA_REACH_HIGHT { - NET_VCA_LINE struVcaLine; //ʸ߾ - WORD wDuration; //ʸֵ߱1-120 - BYTE byRes[6]; // ֽ + NET_VCA_LINE struVcaLine; //攀高警戒面 + WORD wDuration; //触发攀高报警阈值:1-120秒 + BYTE byRes[6]; // 保留字节 }NET_VCA_REACH_HIGHT, *LPNET_VCA_REACH_HIGHT; -// 𴲲 +// 起床参数 typedef struct tagNET_VCA_GET_UP { - NET_VCA_POLYGON struRegion; //Χ - WORD wDuration; //𴲱ֵ1-100 - BYTE byMode; //ģʽ,0-ͨģʽ,1-ߵģʽ,2-ͨģʽ - BYTE bySensitivity; //ȲΧ[1,10] - BYTE byRes[4]; //ֽ + NET_VCA_POLYGON struRegion; //区域范围 + WORD wDuration; //触发起床报警阈值1-100 秒 + BYTE byMode; //起身检测模式,0-大床通铺模式,1-高低铺模式,2-大床通铺坐立起身模式 + BYTE bySensitivity; //灵敏度参数,范围[1,10] + BYTE byRes[4]; //保留字节 }NET_VCA_GET_UP, * LPNET_VCA_GET_UP; -// Ʒ +// 物品遗留 typedef struct tagNET_VCA_LEFT { - NET_VCA_POLYGON struRegion; // Χ - WORD wDuration; // Ʒֵ 10-100 - BYTE bySensitivity; // ȲΧ[1,5] - BYTE byRes[5]; // ֽ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wDuration; // 触发物品遗留报警阈值 10-100秒 + BYTE bySensitivity; // 灵敏度参数,范围[1,5] + BYTE byRes[5]; // 保留字节 }NET_VCA_LEFT, *LPNET_VCA_LEFT; -// Ʒȡ +// 物品拿取 typedef struct tagNET_VCA_TAKE { - NET_VCA_POLYGON struRegion; // Χ - WORD wDuration; // Ʒȡֵ10-100 - BYTE bySensitivity; // ȲΧ[1,5] - BYTE byRes[5]; // ֽ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wDuration; // 触发物品拿取报警阈值10-100秒 + BYTE bySensitivity; // 灵敏度参数,范围[1,5] + BYTE byRes[5]; // 保留字节 }NET_VCA_TAKE, *LPNET_VCA_TAKE; typedef struct tagNET_VCA_OVER_TIME { - NET_VCA_POLYGON struRegion; // Χ - WORD wDuration; // ʱֵ 4s-60000s - BYTE byRes[6]; // ֽ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wDuration; // 操作报警时间阈值 4s-60000s + BYTE byRes[6]; // 保留字节 }NET_VCA_OVER_TIME, *LPNET_VCA_OVER_TIME; typedef struct tagNET_VCA_HUMAN_ENTER { - DWORD dwRes[23]; //ֽ + DWORD dwRes[23]; //保留字节 }NET_VCA_HUMAN_ENTER, *LPNET_VCA_HUMAN_ENTER; -//ֽ +//贴纸条参数 typedef struct tagNET_VCA_STICK_UP { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; //ʱֵ4-60룬10 - BYTE bySensitivity; //ȲΧ[1,5] + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //触发时间阈值:4-60秒,建议10秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] BYTE byRes[5]; }NET_VCA_STICK_UP, *LPNET_VCA_STICK_UP; -// +//读卡器参数 typedef struct tagNET_VCA_SCANNER { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; //ʱ䣺4-60 - BYTE bySensitivity; //ȲΧ[1,5] + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //读卡持续时间:4-60秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] BYTE byRes[5]; }NET_VCA_SCANNER, *LPNET_VCA_SCANNER; -//¼ +//离岗事件 typedef struct tagNET_VCA_LEAVE_POSITION { - NET_VCA_POLYGON struRegion; //Χ - WORD wLeaveDelay; //˱ʱ䣬λs - WORD wStaticDelay; //˯ʱ䣬λs - BYTE byMode; //ģʽ0-¼1-˯¼2-˯¼3-ڸڣԱصλ - BYTE byPersonType; //ֵͣ0-ֵڣ1-˫ֵ - BYTE byOnPosition; //ڸ1-10Ĭ1 - BYTE bySensitivity; //ȲΧ[1,5] + NET_VCA_POLYGON struRegion; //区域范围 + WORD wLeaveDelay; //无人报警时间,单位:s + WORD wStaticDelay; //睡觉报警时间,单位:s + BYTE byMode; //模式,0-离岗事件,1-睡岗事件,2-离岗睡岗事件,3-在岗(当离岗人员回到岗位) + BYTE byPersonType; //值岗人数类型,0-单人值岗,1-双人值岗 + BYTE byOnPosition; //在岗人数,1-10,默认1 + BYTE bySensitivity; //灵敏度参数,范围[1,5] }NET_VCA_LEAVE_POSITION, *LPNET_VCA_LEAVE_POSITION; -//β +//尾随参数 typedef struct tagNET_VCA_TRAIL { - NET_VCA_POLYGON struRegion;//Χ - WORD wRes; /* */ - BYTE bySensitivity; /* ȲΧ[1,5] */ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wRes; /* 保留 */ + BYTE bySensitivity; /* 灵敏度参数,范围[1,5] */ BYTE byRes[5]; }NET_VCA_TRAIL, *LPNET_VCA_TRAIL; -//ز +//倒地参数 typedef struct tagNET_VCA_FALL_DOWN { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; /* ¼ֵ 1-60s*/ - BYTE bySensitivity; /* ȲΧ[1,5] */ - BYTE byHeightThreshold; //߶ֵΧ[0,250]Ĭ90λ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; /* 触发事件阈值 1-60s*/ + BYTE bySensitivity; /* 灵敏度参数,范围[1,5] */ + BYTE byHeightThreshold; //高度阈值,范围[0,250],默认90,单位:厘米 BYTE byRes[4]; }NET_VCA_FALL_DOWN, *LPNET_VCA_FALL_DOWN; -// +//起立 typedef struct tagNET_VCA_STANDUP { - NET_VCA_POLYGON struRegion; //Χ - BYTE bySensitivity; //ȲΧ[1,100] - BYTE byHeightThreshold; //߶ֵΧ[0,250]Ĭ130λ - WORD wDuration; //¼ֵ[1,3600]Ĭ2λ - BYTE byRes[4]; // + NET_VCA_POLYGON struRegion; //区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byHeightThreshold; //高度阈值,范围[0,250],默认130,单位:厘米 + WORD wDuration; //触发事件阈值[1,3600],默认2,单位:秒 + BYTE byRes[4]; //保留 }NET_VCA_STANDUP, *LPNET_VCA_STANDUP; -//仯 +//人数变化 typedef struct tagNET_VCA_PEOPLENUM_CHANGE { - NET_VCA_POLYGON struRegion; //Χ - BYTE bySensitivity; //ȲΧ[1,100] - BYTE byPeopleNumThreshold; //ֵΧ[0,5]Ĭ1 - BYTE byDetectMode; //ⷽʽֵȽϡ1-ڣ2-Сڣ3-ڣ4- - BYTE byNoneStateEffective; //״̬ǷЧ0-Ч1-Ч - WORD wDuration; //ʱֵ[1,3600]Ĭ2λ - BYTE byPeopleNum; //ֻϱ豸0ʾֱ֧ϱ0xffʾΪ0 - BYTE byRes; // + NET_VCA_POLYGON struRegion; //区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byPeopleNumThreshold; //人数阈值,范围[0,5],默认1 + BYTE byDetectMode; //检测方式,与人数阈值相比较。1-大于,2-小于,3-等于,4-不等于 + BYTE byNoneStateEffective; //无人状态是否有效,0-无效,1-有效 + WORD wDuration; //触发时间阈值[1,3600],默认2,单位:秒 + BYTE byPeopleNum; //触发报警人数,只读,仅报警上报,设备返回0表示不支持本功能上报,0xff表示报警人数为0 + BYTE byRes; //保留 }NET_VCA_PEOPLENUM_CHANGE, *LPNET_VCA_PEOPLENUM_CHANGE; -//仯 +//间距变化 typedef struct tagNET_VCA_SPACING_CHANGE { - NET_VCA_POLYGON struRegion; //Χ - float fSpacingThreshold; //ֵΧ[0,10.0]Ĭ1.0λ - BYTE bySensitivity; //ȲΧ[1,100] - BYTE byDetectMode; //ⷽʽֵȽϡ1-ڣ2-С - WORD wDuration; //ʱֵ[1,3600]Ĭ2λ + NET_VCA_POLYGON struRegion; //区域范围 + float fSpacingThreshold; //间距阈值,范围[0,10.0],默认1.0,单位:米 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byDetectMode; //检测方式,与间距阈值相比较。1-大于,2-小于 + WORD wDuration; //触发时间阈值[1,3600],默认2,单位:秒 }NET_VCA_SPACING_CHANGE, *LPNET_VCA_SPACING_CHANGE; -//ǿͻ +//声强突变参数 typedef struct tagNET_VCA_AUDIO_ABNORMAL { - WORD wDecibel; //ǿ - BYTE bySensitivity; //ȲΧ[1,100] - BYTE byAudioMode; //ģʽ0-ȼ⣬1-ֱֵ⣬2-ֱֵ - BYTE byEnable; //ʹܣǷ(ǿͻ䣬) - BYTE byThreshold; //ֵ[1,100] - BYTE byRes[54]; // + WORD wDecibel; //声音强度 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byAudioMode; //声音检测模式,0-灵敏度检测,1-分贝阈值检测,2-灵敏度与分贝阈值检测 + BYTE byEnable; //使能,是否开启(声强突变,陡升) + BYTE byThreshold; //声音阈值[1,100] + BYTE byRes[54]; //保留 }NET_VCA_AUDIO_ABNORMAL, *LPNET_VCA_AUDIO_ABNORMAL; -//ǿ 2014-03-21 +//声强陡降 2014-03-21 typedef struct tagNET_DVR_AUDIO_STEEP_DROP { - BYTE bySensitivity; /* ȲΧ[1,100] */ - BYTE byEnable; //ʹܣǷ(ǿͻ䣬) + BYTE bySensitivity; /* 灵敏度参数,范围[1,100] */ + BYTE byEnable; //使能,是否开启(声强突变,陡降) BYTE byRes[6]; }NET_DVR_AUDIO_STEEP_DROP, *LPNET_DVR_AUDIO_STEEP_DROP; @@ -14854,907 +14854,907 @@ typedef struct tagNET_DVR_AUDIO_STEEP_DROP typedef struct tagNET_DVR_AUDIO_EXCEPTION { DWORD dwSize; - BYTE byEnableAudioInException;//ʹܣǷ + BYTE byEnableAudioInException;//使能,是否开启 BYTE byRes1[3]; NET_VCA_AUDIO_ABNORMAL struAudioAbnormal; - NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //ʱ - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ - DWORD dwMaxRelRecordChanNum ; //¼ͨ ֻ֧ - DWORD dwRelRecordChanNum ; //¼ͨ ʵֵ֧ + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //布防时间 + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 DWORD byRelRecordChan[MAX_CHANNUM_V30]; - NET_DVR_AUDIO_STEEP_DROP struAudioSteepDrop; //ǿ + NET_DVR_AUDIO_STEEP_DROP struAudioSteepDrop; //声强陡降 BYTE byRes2[24]; }NET_DVR_AUDIO_EXCEPTION, *LPNET_DVR_AUDIO_EXCEPTION; typedef struct tagNET_VCA_TOILET_TARRY { - NET_VCA_POLYGON struRegion;//Χ - WORD wDelay; //Ŀʱʱ[1,3600]λ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDelay; //目标区域滞留超时时间[1,3600],单位:秒 BYTE byRes[6]; }NET_VCA_TOILET_TARRY, *LPNET_VCA_TOILET_TARRY; typedef struct tagNET_VCA_YARD_TARRY { - NET_VCA_POLYGON struRegion;//Χ - WORD wDelay; //ŷ糡ʱ[1,120]λ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDelay; //放风场滞留时间[1,120],单位:秒 BYTE byRes[6]; }NET_VCA_YARD_TARRY, *LPNET_VCA_YARD_TARRY; typedef struct tagNET_VCA_ADV_REACH_HEIGHT { - NET_VCA_POLYGON struRegion; //ʸ - DWORD dwCrossDirection; //Խ(VCA_CROSS_DIRECTION): 0-˫1-2-ҵ - BYTE byRes[4]; // ֽ + NET_VCA_POLYGON struRegion; //攀高折线 + DWORD dwCrossDirection; //跨越方向(详见VCA_CROSS_DIRECTION): 0-双向,1-从左到右2-从右到左 + BYTE byRes[4]; // 保留字节 }NET_VCA_ADV_REACH_HEIGHT, * LPNET_VCA_ADV_REACH_HEIGHT; typedef struct tagNET_VCA_ADV_TRAVERSE_PLANE { - NET_VCA_POLYGON struRegion; // - DWORD dwCrossDirection; //Խ(VCA_CROSS_DIRECTION): 0-˫1-2-ҵ - BYTE bySensitivity; //ȲΧ[1,5] - BYTE byRes[3]; //ֽ + NET_VCA_POLYGON struRegion; //警戒面折线 + DWORD dwCrossDirection; //跨越方向(详见VCA_CROSS_DIRECTION): 0-双向,1-从左到右2-从右到左 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[3]; //保留字节 } NET_VCA_ADV_TRAVERSE_PLANE,*LPNET_VCA_ADV_TRAVERSE_PLANE; typedef struct tagNET_VCA_PLAY_CELLPHONE { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; //ֻʱʱ[1,600], Ĭ20 - BYTE byRes[6]; //ֽ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //玩手机超时时间[1,600]秒, 默认20秒 + BYTE byRes[6]; //保留字节 }NET_VCA_PLAY_CELLPHONE, *LPNET_VCA_PLAY_CELLPHONE; typedef struct tagNET_VCA_LECTURE { - NET_VCA_POLYGON struRegion;//Χ - WORD wDuration; //Ϊ¼ʱֵ: 1-10룬1룬жЧʱ - BYTE bySensitivity; //ȲΧ[1-100] - BYTE byAlarmState;//ֶֻν治ʾ0-,1-ʼ,2- - BYTE byTrackingMode ;//ģʽ0-Զ(Ĭ) , 1-ˮƽ, 2-ֱ - BYTE byZoomMode;//䱶ģʽ, 0-̶(Ĭ), 1-Զ - BYTE byZoomOver;//0-,1-䱶λ(ϴ¼Ϊлж) - BYTE byTrackStatus;//״̬ 0-1-ʼڿΣAȫ 2-ڣ2,д3 -ʧ2,ȫ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //行为事件触发时间阈值: 1-10秒,建议1秒,判断是有效报警的时间 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byAlarmState;//只读字段界面不显示;0-保留,1-报警开始,2-报警结束 + BYTE byTrackingMode ;//模式,0-自动(默认) , 1-水平, 2-垂直 + BYTE byZoomMode;//变倍模式, 0-固定(默认), 1-自动 + BYTE byZoomOver;//0-保留,1-变倍到位(报警上传录播主机,作为切换画面判断依据) + BYTE byTrackStatus;//状态 0-保留,1-开始授课(A,全景) 2-正在(2,特写),3 -丢失(2,全景) }NET_VCA_LECTURE, *LPNET_VCA_LECTURE; typedef struct tagNET_VCA_ANSWER { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity;//ȲΧ[1-100] - BYTE byAlarmState;//ֶֻν治ʾ0-,1-ʼ,2- - BYTE byZoomOver;//0-,1-䱶λ(ϴ¼Ϊлж) - BYTE byAnswerStudent;//0-1-ѧ2-ѧ3-ѧ,4-ѧ, 5-ѧ߶ - BYTE byRes[4]; // + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity;//灵敏度参数,范围[1-100] + BYTE byAlarmState;//只读字段界面不显示;0-保留,1-报警开始,2-报警结束 + BYTE byZoomOver;//0-保留,1-变倍到位(报警上传录播主机,作为切换画面判断依据) + BYTE byAnswerStudent;//0-保留,1-无学生起立,2-单个学生起立,3-多个学生起立,4-疑似学生起立, 5-单个学生走动 + BYTE byRes[4]; //保留 }NET_VCA_ANSWER, *LPNET_VCA_ANSWER; -//ṹ +//关联规则结构体 typedef struct tagNET_VCA_RELATE_RULE_PARAM { - BYTE byRuleID; // 0-ʾ - BYTE byRes; // - WORD wEventType; //Ϊ¼ͣοVCA_RULE_EVENT_TYPE_EX + BYTE byRuleID; //规则序号 0-表示无 + BYTE byRes; //保留 + WORD wEventType; //行为事件类型,参考VCA_RULE_EVENT_TYPE_EX留 }NET_VCA_RELATE_RULE_PARAM,*LPNET_VCA_RELATE_RULE_PARAM; typedef struct tagNET_VCA_COMBINED_RULE_ { - //򴥷˳0-˳򴥷1-˳򴥷 + //规则触发顺序,0-顺序或逆序触发,1-顺序触发 BYTE byRuleSequence; BYTE byRes[7]; - DWORD dwMinInterval; //Сʱλ - DWORD dwMaxInterval; //ʱλ - NET_VCA_RELATE_RULE_PARAM struRule1Raram;//1 - NET_VCA_RELATE_RULE_PARAM struRule2Raram;//2 + DWORD dwMinInterval; //最小时间间隔,单位:秒 + DWORD dwMaxInterval; //最大时间间隔,单位:秒 + NET_VCA_RELATE_RULE_PARAM struRule1Raram;//规则1 + NET_VCA_RELATE_RULE_PARAM struRule2Raram;//规则2 BYTE byRes1[36]; } NET_VCA_COMBINED_RULE, *LPNET_VCA_COMBINED_RULE; -//¼ +//板书事件 typedef struct tagNET_VCA_BLACKBOARD_WRITE { - NET_VCA_POLYGON struRegion;//Χ򣬱ви - BYTE byTeacherState;//ʦ״̬0~ʦд1~ʦȫ2~̨״̬ - BYTE byWritingState;//״̬0~鿪ʼ1~ - BYTE byWritingArea;//0~飬1~ߣ2~ұ + NET_VCA_POLYGON struRegion;//区域范围(配置区域,报警中不含有该区域) + BYTE byTeacherState;//教师状态;0~教师特写,1~教师全景,2~讲台无人状态 + BYTE byWritingState;//板书状态;0~板书开始,1~板书结束 + BYTE byWritingArea;//板书区域;0~整个板书,1~板书左边,2~板书右边 BYTE byRes[5]; }NET_VCA_BLACKBOARD_WRITE, *LPNET_VCA_BLACKBOARD_WRITE; -//Աۼ״̬ +//人员聚集状态 typedef struct tagNET_VCA_HIGH_DENSITY_STATUS { - NET_VCA_POLYGON struRegion; //Χ - float fDensity; //ۼ, Χ: [0.1, 1.0] - BYTE bySensitivity; //ȲΧ[1,5] - BYTE byRes[3]; // ֽ + NET_VCA_POLYGON struRegion; //区域范围 + float fDensity; //聚集比率, 范围: [0.1, 1.0] + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[3]; // 保留字节 }NET_VCA_HIGH_DENSITY_STATUS, *LPNET_VCA_HIGH_DENSITY_STATUS; -//ܼ +//奔跑检测 typedef struct _NET_VCA_RUNNING_ { - NET_VCA_POLYGON struRegion; //Χ - DWORD dwSpeed; //ٶȣΧ[1,10] - WORD wDuration; // ʱֵ - BYTE byRunMode; //ģʽ0-,1˱,2:˱ + NET_VCA_POLYGON struRegion; //区域范围 + DWORD dwSpeed; //奔跑速度,范围[1,10] + WORD wDuration; // 触发报警时间阈值 + BYTE byRunMode; //奔跑模式,0-保留,1:单人奔跑,2:多人奔跑 BYTE byRes; }NET_VCA_RUNNING, *LPNET_VCA_RUNNING; -// +// 滞留检测 typedef struct tagNET_VCA_RETENTION { - NET_VCA_POLYGON struRegion; // Χ - WORD wDuration; //ֵʱ䣨60-3600룩Ĭ1800 - BYTE byRes[6]; // ֽ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wDuration; //触发滞留报警阈值时间(60-3600秒)默认1800秒 + BYTE byRes[6]; // 保留字节 }NET_VCA_RETENTION, *LPNET_VCA_RETENTION; -// ̬Ʒ +// 态势分析参数 typedef struct tagNET_VCA_SITUATION_ANALYSIS { - NET_VCA_POLYGON struRegion; // Χ - WORD wPeopleNum; // - BYTE byRes[6]; // ֽ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wPeopleNum; //区域人数 + BYTE byRes[6]; // 保留字节 }NET_VCA_SITUATION_ANALYSIS, *LPNET_VCA_SITUATION_ANALYSIS; -// +//持续报警 typedef struct _NET_VCA_DURATION_ { - WORD wRelationEventType; //οVCA_RULE_EVENT_TYPE_EX + WORD wRelationEventType; //参考VCA_RULE_EVENT_TYPE_EX BYTE byRes[90]; }NET_VCA_DURATION, *LPNET_VCA_DURATION; -//α쿨 +//伪造卡检测参数 typedef struct tagNET_VCA_FAKECARD { - NET_VCA_POLYGON struRegion; // Χ - BYTE bySensitivity; // ȲС1,5,Ĭ3 - BYTE byRes[7]; // ֽ + NET_VCA_POLYGON struRegion; // 区域范围 + BYTE bySensitivity; // 灵敏度参数:最小1,最大5,默认3 + BYTE byRes[7]; // 保留字节 }NET_VCA_FAKECARD, *LPNET_VCA_FAKECARD; -//¼ +//警戒事件参数 typedef union tagNET_VCA_EVENT_UNION { - DWORD uLen[23]; // - NET_VCA_TRAVERSE_PLANE struTraversePlane; //Խ - NET_VCA_AREA struArea; ///뿪 - NET_VCA_INTRUSION struIntrusion; //ֲ - NET_VCA_LOITER struLoiter; //ǻ - NET_VCA_TAKE_LEFT struTakeTeft; //Ʒ/Ʒȡ - NET_VCA_PARKING struParking; //ͣ - NET_VCA_RUN struRun; //ƶ - NET_VCA_HIGH_DENSITY struHighDensity; //Աۼ - NET_VCA_VIOLENT_MOTION struViolentMotion; //˶ - NET_VCA_REACH_HIGHT struReachHight; //ʸ - NET_VCA_GET_UP struGetUp; // - NET_VCA_LEFT struLeft; //Ʒ - NET_VCA_TAKE struTake; // Ʒȡ - NET_VCA_HUMAN_ENTER struHumanEnter; //Ա - NET_VCA_OVER_TIME struOvertime; //ʱ - NET_VCA_STICK_UP struStickUp; //ֽ - NET_VCA_SCANNER struScanner; // - NET_VCA_LEAVE_POSITION struLeavePos; //ڲ - NET_VCA_TRAIL struTrail; //β - NET_VCA_FALL_DOWN struFallDown; //ز - NET_VCA_AUDIO_ABNORMAL struAudioAbnormal; //ǿͻ - NET_VCA_ADV_REACH_HEIGHT struReachHeight; //ʸ߲ - NET_VCA_TOILET_TARRY struToiletTarry; //Ŀʱ - NET_VCA_YARD_TARRY struYardTarry; //ŷ糡 - NET_VCA_ADV_TRAVERSE_PLANE struAdvTraversePlane;//߾ - NET_VCA_LECTURE struLecture; //ڿ¼ - NET_VCA_ANSWER struAnswer; //ش¼ - NET_VCA_STANDUP struStandUp; // - NET_VCA_PEOPLENUM_CHANGE struPeopleNumChange; //仯 - NET_VCA_SPACING_CHANGE struSpacingChange; //仯 - NET_VCA_COMBINED_RULE struCombinedRule; //Ϲ - NET_VCA_SIT_QUIETLY struSitQuietly; //һ - NET_VCA_HIGH_DENSITY_STATUS struHighDensityStatus; //Աۼ״̬ - NET_VCA_RUNNING struRunning; //ܲ - NET_VCA_RETENTION struRetention;// - NET_VCA_BLACKBOARD_WRITE struBlackboardWrite; // - NET_VCA_SITUATION_ANALYSIS struSituationAnalysis; //̬Ʒ - NET_VCA_PLAY_CELLPHONE struPlayCellphone; //ֻ - NET_VCA_DURATION struDruation;// - NET_VCA_FAKECARD struFakeCard; //α쿨 + DWORD uLen[23]; //参数 + NET_VCA_TRAVERSE_PLANE struTraversePlane; //穿越警戒面参数 + NET_VCA_AREA struArea; //进入/离开区域参数 + NET_VCA_INTRUSION struIntrusion; //入侵参数 + NET_VCA_LOITER struLoiter; //徘徊参数 + NET_VCA_TAKE_LEFT struTakeTeft; //物品遗留/物品拿取参数 + NET_VCA_PARKING struParking; //停车参数 + NET_VCA_RUN struRun; //快速移动参数 + NET_VCA_HIGH_DENSITY struHighDensity; //人员聚集参数 + NET_VCA_VIOLENT_MOTION struViolentMotion; //剧烈运动 + NET_VCA_REACH_HIGHT struReachHight; //攀高 + NET_VCA_GET_UP struGetUp; //起床 + NET_VCA_LEFT struLeft; //物品遗留 + NET_VCA_TAKE struTake; // 物品拿取 + NET_VCA_HUMAN_ENTER struHumanEnter; //人员进入 + NET_VCA_OVER_TIME struOvertime; //操作超时 + NET_VCA_STICK_UP struStickUp; //贴纸条 + NET_VCA_SCANNER struScanner; //读卡器参数 + NET_VCA_LEAVE_POSITION struLeavePos; //离岗参数 + NET_VCA_TRAIL struTrail; //尾随参数 + NET_VCA_FALL_DOWN struFallDown; //倒地参数 + NET_VCA_AUDIO_ABNORMAL struAudioAbnormal; //声强突变 + NET_VCA_ADV_REACH_HEIGHT struReachHeight; //折线攀高参数 + NET_VCA_TOILET_TARRY struToiletTarry; //目标区域滞留超时参数 + NET_VCA_YARD_TARRY struYardTarry; //放风场滞留参数 + NET_VCA_ADV_TRAVERSE_PLANE struAdvTraversePlane;//折线警戒面参数 + NET_VCA_LECTURE struLecture; //授课事件 + NET_VCA_ANSWER struAnswer; //回答问题事件 + NET_VCA_STANDUP struStandUp; //起立参数 + NET_VCA_PEOPLENUM_CHANGE struPeopleNumChange; //人数变化参数 + NET_VCA_SPACING_CHANGE struSpacingChange; //间距变化参数 + NET_VCA_COMBINED_RULE struCombinedRule; //组合规则参数 + NET_VCA_SIT_QUIETLY struSitQuietly; //一动不动参数 + NET_VCA_HIGH_DENSITY_STATUS struHighDensityStatus; //人员聚集状态 + NET_VCA_RUNNING struRunning; //奔跑参数 + NET_VCA_RETENTION struRetention;//滞留检测 + NET_VCA_BLACKBOARD_WRITE struBlackboardWrite; //板书参数 + NET_VCA_SITUATION_ANALYSIS struSituationAnalysis; //态势分析参数 + NET_VCA_PLAY_CELLPHONE struPlayCellphone; //玩手机检测参数 + NET_VCA_DURATION struDruation;//持续报警参数 + NET_VCA_FAKECARD struFakeCard; //伪造卡检测 }NET_VCA_EVENT_UNION, *LPNET_VCA_EVENT_UNION; -// ߴ +// 尺寸过滤器类型 typedef enum _VCA_SIZE_FILTER_MODE_ { - IMAGE_PIX_MODE, //شС - REAL_WORLD_MODE, //ʵʴС - DEFAULT_MODE // Ĭģʽ + IMAGE_PIX_MODE, //根据像素大小设置 + REAL_WORLD_MODE, //根据实际大小设置 + DEFAULT_MODE // 默认模式 }SIZE_FILTER_MODE; -//ߴ +//尺寸过滤器 typedef struct tagNET_VCA_SIZE_FILTER { - BYTE byActive; //Ƿ񼤻ߴ 0- 0- - BYTE byMode; //ģʽSIZE_FILTER_MODE - BYTE byRes[2]; //0 - NET_VCA_RECT struMiniRect; //СĿ,ȫ0ʾ - NET_VCA_RECT struMaxRect; //Ŀ,ȫ0ʾ + BYTE byActive; //是否激活尺寸过滤器 0-否 非0-是 + BYTE byMode; //过滤器模式SIZE_FILTER_MODE + BYTE byRes[2]; //保留,置0 + NET_VCA_RECT struMiniRect; //最小目标框,全0表示不设置 + NET_VCA_RECT struMaxRect; //最大目标框,全0表示不设置 }NET_VCA_SIZE_FILTER, *LPNET_VCA_SIZE_FILTER; -//ṹ +//警戒规则结构 typedef struct tagNET_VCA_ONE_RULE { - BYTE byActive; //Ƿ񼤻,0-,0- - BYTE byRes[7]; //Ϊ0ֶ - BYTE byRuleName[NAME_LEN]; // - VCA_EVENT_TYPE dwEventType; //쳣Ϊ¼ - NET_VCA_EVENT_UNION uEventParam; //쳣Ϊ¼ - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ + BYTE byActive; //是否激活规则,0-否,非0-是 + BYTE byRes[7]; //保留,设置为0字段 + BYTE byRuleName[NAME_LEN]; //规则名称 + VCA_EVENT_TYPE dwEventType; //异常行为检测事件类型 + NET_VCA_EVENT_UNION uEventParam; //异常行为检测事件参数 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 }NET_VCA_ONE_RULE, *LPNET_VCA_ONE_RULE; -//쳣Ϊýṹ +//异常行为检测配置结构体 typedef struct tagNET_VCA_RULECFG { - DWORD dwSize; //ṹ - BYTE byPicProType; //ʱͼƬʽ 0- 0-ϴ - BYTE byUpLastAlarm; //2011-04-06 Ƿϴһεı - BYTE byPicRecordEnable; /*2012-3-1ǷͼƬ洢, 0-, 1-*/ + DWORD dwSize; //结构长度 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byUpLastAlarm; //2011-04-06 是否先上传最近一次的报警 + BYTE byPicRecordEnable; /*2012-3-1是否启用图片存储, 0-不启用, 1-启用*/ BYTE byRes; - NET_DVR_JPEGPARA struPictureParam; //ͼƬṹ - NET_VCA_ONE_RULE struRule[MAX_RULE_NUM]; // + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_ONE_RULE struRule[MAX_RULE_NUM]; //规则数组 }NET_VCA_RULECFG, *LPNET_VCA_RULECFG; -//ǰ豸ַϢܷDZʾǰ豸ĵַϢ豸ʾĵַ +//前端设备地址信息,智能分析仪表示的是前端设备的地址信息,其他设备表示本机的地址 /* -豸ģͨ(IPC/DVR/DVS/IVMS)ʱֶд豸IPַ˿ڣbyChannelbyIvmsChannel Ϊǰģͨ +当接入设备模拟通道(IPC/DVR/DVS/IVMS)报警的时候,下面字段填写设备的IP地址,端口,byChannel和byIvmsChannel 均为当前的模拟通道号 eg: -struDevIP = ģͨӦ豸IPַ -wPort = ģͨӦ豸Ķ˿ -byChannel = Ӧģͨͨ -byIvmsChannel = Ӧģͨͨ +struDevIP = 模拟通道对应设备的IP地址 +wPort = 模拟通道对应设备的端口 +byChannel = 报警对应模拟通道的通道号 +byIvmsChannel = 报警对应模拟通道的通道号 - 豸ͨ(DVR/DVS/IVMS)ʱֶдͨ豸IPַ˿ڣbyChannelΪͨ豸ͨţbyIvmsChannelΪͨ + 当接入设备数字通道(DVR/DVS/IVMS)报警的时候,下面字段填写数字通道接入设备的IP地址,端口,byChannel为数字通道接入设备的通道号,byIvmsChannel为数字通道号 eg: - struDevIP = ͨ豸IPַ - wPort = ͨ豸Ķ˿ - byChannel = ͨ豸ͨ - byIvmsChannel = ͨ + struDevIP = 数字通道接入设备的IP地址 + wPort = 数字通道接入设备的端口 + byChannel = 数字通道接入设备的通道号 + byIvmsChannel = 数字通道号 */ typedef struct tagNET_VCA_DEV_INFO { - NET_DVR_IPADDR struDevIP; //ǰ豸ַ - WORD wPort; //ǰ豸˿ںţ - BYTE byChannel; //ǰ豸ͨ - BYTE byIvmsChannel; // Ivms ͨ + NET_DVR_IPADDR struDevIP; //前端设备地址, + WORD wPort; //前端设备端口号, + BYTE byChannel; //前端设备通道, + BYTE byIvmsChannel; // Ivms 通道 }NET_VCA_DEV_INFO, *LPNET_VCA_DEV_INFO; typedef struct tagNET_DVR_TARGET_LEFT_REGION_ALARM { - DWORD dwSize; //ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - BYTE byTargetType;//Ŀ 0-ЧĿ꣬1-ʦ 2-ѧ - BYTE byLeftDirection;//Ŀ뿪0-,1-,2-,3-,4- - BYTE byTargetStatus;//0-() + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + BYTE byTargetType;//检测目标类型 0-无效目标,1-教师 2-学生 + BYTE byLeftDirection;//检测目标离开方向类型0-保留,1-上,2-下,3-左,4-右 + BYTE byTargetStatus;//0-保留(不做处理) BYTE byRes[125]; }NET_DVR_TARGET_LEFT_REGION_ALARM,*LPNET_DVR_TARGET_LEFT_REGION_ALARM; -/* ͼƬͼƬϢ */ +/* 报警图片图片信息 */ typedef struct { - /*20-˾ ˾ӳ̿ʼ, 21-˾绰, 22-˾ƣͼʻ, 23-˾ûĿǰڣ,24-˾ⲻͷ, 25-˾ϵȫ, - 26-˾ʰƷ, 27-˾Ƿ, 28-˾Զˮ, 29-˾, 31-˾δ*/ - DWORD dwPicType; /* ͼƬ */ - char *pPicBuf; /*ͼƬָ*/ - DWORD dwPicLen; /* ͼƬȣΪ0ʱʾûͼƬ */ - DWORD dwTime; /* ץͼʱ */ - char *pVideoBuf; /*Ƶָ, xxx.mp4*/ - DWORD dwVideoLen; /* ץͼƵijȣ0ʾûбƵ 20180518 */ - BYTE byRes[12]; /* Ԥ */ + /*20-司机吸烟 司机报警从抽烟开始, 21-司机打电话, 22-司机疲劳驾驶, 23-司机没有目视前方(离岗),24-司机检测不到头部, 25-司机系安全带, + 26-司机捡拾物品, 27-司机打哈欠, 28-司机吃东西或喝水, 29-司机聊天, 31-司机未穿工作服*/ + DWORD dwPicType; /* 报警图片类型 */ + char *pPicBuf; /*图片指针*/ + DWORD dwPicLen; /* 报警图片长度,为0时表示没有图片 */ + DWORD dwTime; /* 抓图时间 */ + char *pVideoBuf; /*视频指针, xxx.mp4*/ + DWORD dwVideoLen; /* 抓图视频的长度,0表示没有报警视频 20180518 */ + BYTE byRes[12]; /* 预留 */ }NET_DVR_DBD_PICTURE_INFO, *LPNET_DVR_DBD_PICTURE_INFO; -/* λϢ */ +/* 报警位置信息 */ typedef struct {/* 24 bytes */ - DWORD bValid; /* λϢǷЧ */ - DWORD dwLongitude; /* = ʵʶ*3600*100+ʵʷ*60*100+ʵ*100 */ - DWORD dwLatitude; /* γ = ʵʶ*3600*100+ʵʷ*60*100+ʵ*100 */ - DWORD dwVehicleSpeed; /* ٶ = ʵٶ*1000*100 */ - DWORD dwVehicleDirection; /* ٶȷ = ʵʷ*100 */ - DWORD dwAltitude; /* θ߶() */ + DWORD bValid; /* 定位信息是否有效 */ + DWORD dwLongitude; /* 经度 = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwLatitude; /* 纬度 = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwVehicleSpeed; /* 速度 = 实际速度*1000*100 */ + DWORD dwVehicleDirection; /* 速度方向角 = 实际方向*100 */ + DWORD dwAltitude; /* 海拔高度(厘米) */ }NET_DVR_DBD_POSITION_INFO, *LPNET_DVR_DBD_POSITION_INFO; -/* ״̬Ϣ */ +/* 报警状态信息 */ typedef struct {/* 24 bytes */ - BYTE bySmoke; /* */ - BYTE byPhone; /* 绰 */ - BYTE byTiredDriving; /* ƣͼʻ */ - BYTE byNoVisualFront; /* ûĿǰ */ - BYTE byNoHead; /* */ - BYTE byWithoutBelt; /* ϵȫ */ - BYTE byPickingUpThing; /* ʰƷ */ - BYTE byYawn; /* Ƿ */ - BYTE byEatOrDrink; /* Ժ */ - BYTE byChatting; /* */ - BYTE byTampering; /* ڵIPC */ - BYTE byWithoutUniform; /* δ */ - BYTE byDriverCmpFail; /* ʶ쳣*/ - BYTE byDriverChange; /* ʻԱ*/ - BYTE byDriveLongTime; /*ʱʻ*/ - BYTE byInfraredBlockingSunglasses; /* ī */ - BYTE byOutOfWheel; /* 0-1-뷽̣2-˫뷽 */ + BYTE bySmoke; /* 吸烟 */ + BYTE byPhone; /* 打电话 */ + BYTE byTiredDriving; /* 疲劳驾驶 */ + BYTE byNoVisualFront; /* 没有目视前方 */ + BYTE byNoHead; /* 离岗 */ + BYTE byWithoutBelt; /* 不系安全带 */ + BYTE byPickingUpThing; /* 捡拾物品 */ + BYTE byYawn; /* 打哈欠 */ + BYTE byEatOrDrink; /* 吃喝 */ + BYTE byChatting; /* 聊天 */ + BYTE byTampering; /* 遮挡IPC */ + BYTE byWithoutUniform; /* 未穿工作服 */ + BYTE byDriverCmpFail; /* 识别异常*/ + BYTE byDriverChange; /* 驾驶员更换*/ + BYTE byDriveLongTime; /*超时驾驶*/ + BYTE byInfraredBlockingSunglasses; /* 红外阻断墨镜 */ + BYTE byOutOfWheel; /* 0-保留,1-单手脱离方向盘,2-双手脱离方向盘 */ BYTE byRes[7]; }NET_DVR_DBD_ALARM_STATE, *LPNET_DVR_DBD_ALARM_STATE; -/* ʻΪϢ */ +/* 驾驶行为报警信息 */ typedef struct { - DWORD dwSize; /* ϴṹС 4*/ - BYTE byChannel; /* ͨ 1*/ - BYTE byLevel; /*ȼ,ǰֻ1*/ - BYTE byRes1[2]; /* ֽ 3*/ - NET_VCA_DEV_INFO struIpcInfo; /* IPͨϢ 24*/ - NET_DVR_DBD_POSITION_INFO struPosInfo; /* λϢ 24*/ - NET_DVR_DBD_PICTURE_INFO struPicInfo; /* ͼƬϢ*/ - NET_DVR_DBD_ALARM_STATE struAlarmState; /* ״̬Ϣ 24*/ - BYTE byRes2[20]; /* 20*/ + DWORD dwSize; /* 报警上传结构体大小 4*/ + BYTE byChannel; /* 通道号 1*/ + BYTE byLevel; /*报警等级,当前只有1*/ + BYTE byRes1[2]; /* 保留字节 3*/ + NET_VCA_DEV_INFO struIpcInfo; /* 报警IP通道信息 24*/ + NET_DVR_DBD_POSITION_INFO struPosInfo; /* 报警位置信息 24*/ + NET_DVR_DBD_PICTURE_INFO struPicInfo; /* 报警图片信息*/ + NET_DVR_DBD_ALARM_STATE struAlarmState; /* 报警状态信息 24*/ + BYTE byRes2[20]; /* 保留 20*/ }NET_DVR_DBD_ALRAM_INFO, *LPNET_DVR_DBD_ALRAM_INFO; -/* ADASͼƬϢ */ +/* ADAS报警图片信息 */ typedef struct { - DWORD dwPicType; /* ͼƬ */ - char *pPicBuf; /*ͼƬָ*/ - DWORD dwPicLen; /* ͼƬȣΪ0ʱʾûͼƬ */ - DWORD dwTime; /* ץͼʱ */ - char *pVideoBuf; /*Ƶָ, xxx.mp4*/ - DWORD dwVideoLen; /* ץͼƵijȣ0ʾûбƵ 20180518 */ - BYTE byRes[12]; /* Ԥ */ + DWORD dwPicType; /* 报警图片类型 */ + char *pPicBuf; /*图片指针*/ + DWORD dwPicLen; /* 报警图片长度,为0时表示没有图片 */ + DWORD dwTime; /* 抓图时间 */ + char *pVideoBuf; /*视频指针, xxx.mp4*/ + DWORD dwVideoLen; /* 抓图视频的长度,0表示没有报警视频 20180518 */ + BYTE byRes[12]; /* 预留 */ } NET_DVR_ADAS_PICTURE_INFO, *LPNET_DVR_ADAS_PICTURE_INFO; -/* ADASλϢ */ +/* ADAS报警位置信息 */ typedef struct {/* 24 bytes */ - DWORD dwValid; /* λϢǷЧ */ - DWORD dwLongitude; /* = ʵʶ*3600*100+ʵʷ*60*100+ʵ*100 */ - DWORD dwLatitude; /* γ = ʵʶ*3600*100+ʵʷ*60*100+ʵ*100 */ - DWORD dwVehicleSpeed; /* ٶ = ʵٶ*1000*100 */ - DWORD dwVehicleDirection; /* ٶȷ = ʵʷ*100 */ - DWORD dwAltitude; /* θ߶() */ + DWORD dwValid; /* 定位信息是否有效 */ + DWORD dwLongitude; /* 经度 = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwLatitude; /* 纬度 = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwVehicleSpeed; /* 速度 = 实际速度*1000*100 */ + DWORD dwVehicleDirection; /* 速度方向角 = 实际方向*100 */ + DWORD dwAltitude; /* 海拔高度(厘米) */ }NET_DVR_ADAS_POSITION_INFO, *LPNET_DVR_ADAS_POSITION_INFO; -/* ADAS״̬Ϣ */ +/* ADAS报警状态信息 */ typedef struct {/* 24 bytes */ - BYTE dwFcw; /* ǰײ0ޣ1¼ */ - BYTE dwLdw; /* ƫ룬0ޣ1ƫ룬2Ҳƫ */ - BYTE dwHmw; /* ʾ0ޣ1¼ */ - BYTE dwPcw; /* ײ0ޣ1¼ */ - BYTE dwBsd; /* ä⣬0ޣ1¼ , 2-Ҳä3-ä, 4-ä*/ - BYTE byAcc; /* ٣0ޣ1¼ */ - BYTE byBrake; /*٣0ޣ1¼ */ - BYTE byTurn; /* ת䣬0ޣ1Ҽת䣬2ת */ - BYTE byRollover; /* ෭0ޣ1¼ */ - BYTE byNoCourtesy; /* δˣ0ޣ1¼ */ - BYTE byTsr; /*ͨʶ棬0ޣ1٣2޸ߣ3޿ */ + BYTE dwFcw; /* 前车碰撞,0无,1事件发生 */ + BYTE dwLdw; /* 车道偏离,0无,1左侧偏离,2右侧偏离 */ + BYTE dwHmw; /* 车距显示,0无,1事件发生 */ + BYTE dwPcw; /* 行人碰撞,0无,1事件发生 */ + BYTE dwBsd; /* 盲区检测,0无,1事件发生 , 2-右侧盲区报警,3-左侧盲区报警, 4-后侧盲区报警*/ + BYTE byAcc; /* 急加速,0无,1事件发生 */ + BYTE byBrake; /*急减速,0无,1事件发生 */ + BYTE byTurn; /* 急转弯,0无,1右急转弯,2左急转弯 */ + BYTE byRollover; /* 侧翻,0无,1事件发生 */ + BYTE byNoCourtesy; /* 未礼让行人,0无,1事件发生 */ + BYTE byTsr; /*交通标识警告,0无,1限速,2限高,3限宽 */ BYTE byRes[13]; }NET_DVR_ADAS_ALARM_STATE, *LPNET_DVR_ADAS_ALARM_STATE; -/* ADASʻΪϢ */ +/* ADAS驾驶行为报警信息 */ typedef struct { - DWORD dwSize; /* ϴṹС 4*/ - BYTE byChannel; /* ͨ 1*/ - BYTE byRes1[3]; /* ֽ 3*/ - NET_VCA_DEV_INFO struIpcInfo; /* IPͨϢ 28*/ - NET_DVR_ADAS_POSITION_INFO struPosInfo; /* λϢ 24*/ - NET_DVR_ADAS_PICTURE_INFO struPicInfo; /* ͼƬϢ*/ - NET_DVR_ADAS_ALARM_STATE struAlarmState; /* ״̬Ϣ 24*/ - BYTE byRes2[20]; /* 20*/ + DWORD dwSize; /* 报警上传结构体大小 4*/ + BYTE byChannel; /* 通道号 1*/ + BYTE byRes1[3]; /* 保留字节 3*/ + NET_VCA_DEV_INFO struIpcInfo; /* 报警IP通道信息 28*/ + NET_DVR_ADAS_POSITION_INFO struPosInfo; /* 报警位置信息 24*/ + NET_DVR_ADAS_PICTURE_INFO struPicInfo; /* 报警图片信息*/ + NET_DVR_ADAS_ALARM_STATE struAlarmState; /* 报警状态信息 24*/ + BYTE byRes2[20]; /* 保留 20*/ }NET_DVR_ADAS_ALRAM_INFO, *LPNET_DVR_ADAS_ALRAM_INFO; -/* гʵʱ */ +/* 行车实时数据 */ typedef struct { - DWORD dwSize; /* ϴṹС */ - DWORD dwSpeedValue; /* ٶֵ */ - DWORD dwSpeedPulse; /* */ - BYTE byUpgPercent; /* ȣ0-100ʧܷ255ÿοʼʱҪȽ0űʾ׼ʼ 20180508չ*/ + DWORD dwSize; /* 报警上传结构体大小 */ + DWORD dwSpeedValue; /* 速度值 */ + DWORD dwSpeedPulse; /* 测速脉冲 */ + BYTE byUpgPercent; /* 升级进度,正常0-100,升级失败返回255,每次开始升级时,首先需要等进度0,才表示准备开始了 20180508扩展*/ BYTE byRes1[3]; - DWORD dwVideoLostChans; /*λʾ0ʾ1-ʾƵʧһλʾһͨ*/ + DWORD dwVideoLostChans; /*按位表示,0表示正常,1-表示视频丢失,第一位表示第一通道*/ BYTE byRes2[44]; }NET_DVR_VEH_REALTIME_DATA_INFO, *LPNET_DVR_VEH_REALTIME_DATA_INFO; -#define VCA_ATTEND_MAX_PIC_NUM 3 //¼ͼƬ -#define VCA_ATTEND_DRIVER_NAME_LEN 64 //Ϣ˾ֳ -#define VCA_ATTEND_CARD_ID_LEN 32 //Ϣ˾֤볤 -#define VCA_ATTEND_MAX_ALARM_ID_LEN 32 //¼Ψһŵ󳤶 +#define VCA_ATTEND_MAX_PIC_NUM 3 //考勤事件最大图片张数 +#define VCA_ATTEND_DRIVER_NAME_LEN 64 //分组信息司机名字长度 +#define VCA_ATTEND_CARD_ID_LEN 32 //分组信息司机证件号码长度 +#define VCA_ATTEND_MAX_ALARM_ID_LEN 32 //报警事件唯一编号的最大长度 typedef struct { - DWORD dwPicLen; //ͼƬȣΪ0ʱʾûͼƬ - char *pPicBuf; //ͼƬָ - BYTE byRes[12]; //Ԥ + DWORD dwPicLen; //报警图片长度,为0时表示没有图片 + char *pPicBuf; //图片指针 + BYTE byRes[12]; //预留 }NET_DVR_VCA_ATTEND_PICDATA, *LPNET_DVR_VCA_ATTEND_PICDATA; -/* ¼ͼƬϢ */ +/* 考勤事件图片信息 */ typedef struct { - BYTE byPicNum; //ͼƬ - BYTE byRes1[3]; //Ԥ - NET_DVR_VCA_ATTEND_PICDATA struPicData[VCA_ATTEND_MAX_PIC_NUM]; //ͼƬ - DWORD dwVideoLen; //ץͼƵijȣ0ʾûбƵ - char *pVideoBuf; //Ƶָ - BYTE byRes[64]; //Ԥ + BYTE byPicNum; //考勤图片数量 + BYTE byRes1[3]; //预留 + NET_DVR_VCA_ATTEND_PICDATA struPicData[VCA_ATTEND_MAX_PIC_NUM]; //报警图片数据 + DWORD dwVideoLen; //抓图视频的长度,0表示没有报警视频 + char *pVideoBuf; //视频指针 + BYTE byRes[64]; //预留 }NET_DVR_VCA_ATTEND_PICTURE_INFO, *LPNET_DVR_VCA_ATTEND_PICTURE_INFO; -/* ¼ϴϢ*/ +/* 考勤事件上传信息*/ typedef struct { - DWORD dwSize; // ϴṹС - BYTE byMethod; //ڷʽ 0-IC,1- - BYTE byStatus; //״̬ 0-1-ϰ,2-°ࣨ򻻰ࣩ - BYTE byCertIDType; //ʻԱ֤ͣ0-Ӫʸ֤1-֤ - BYTE byCertIDLen; //ʻԱҵʸ֤볤 - char sCertId[VCA_ATTEND_CARD_ID_LEN]; //ʻԱҵʸ֤ - DWORD dwTime; //ʱ - char sName[VCA_ATTEND_DRIVER_NAME_LEN]; //ʻԱ - char sAlarmIdNo[VCA_ATTEND_MAX_ALARM_ID_LEN]; //ʶ - NET_DVR_VCA_ATTEND_PICTURE_INFO struPicInfo; //ͼƬϢ - BYTE byRes[128]; // + DWORD dwSize; // 报警上传结构体大小 + BYTE byMethod; //考勤方式 0-IC卡考勤,1-人脸考勤 + BYTE byStatus; //考勤状态 0-保留,1-上班,2-下班(无人脸或换班) + BYTE byCertIDType; //驾驶员证件类型:0-营运资格证,1-身份证 + BYTE byCertIDLen; //驾驶员从业资格证编码长度 + char sCertId[VCA_ATTEND_CARD_ID_LEN]; //驾驶员从业资格证编码 + DWORD dwTime; //考勤时间 + char sName[VCA_ATTEND_DRIVER_NAME_LEN]; //驾驶员姓名 + char sAlarmIdNo[VCA_ATTEND_MAX_ALARM_ID_LEN]; //报警标识号 + NET_DVR_VCA_ATTEND_PICTURE_INFO struPicInfo; //报警图片信息 + BYTE byRes[128]; //保留 }NET_DVR_VCA_ATTEND_ALARM_INFO, *LPNET_DVR_VCA_ATTEND_ALARM_INFO; -//ߴ˲ +//尺寸过滤策略 typedef struct tagNET_VCA_FILTER_STRATEGY { - BYTE byStrategy; //ߴ˲ 0 - 1-߶ȺͿȹ,2- - BYTE byRes[11]; // + BYTE byStrategy; //尺寸过滤策略 0 - 不启用 1-高度和宽度过滤,2-面积过滤 + BYTE byRes[11]; //保留 }NET_VCA_FILTER_STRATEGY,*LPNET_VCA_FILTER_STRATEGY; -//򴥷 +//规则触发参数 typedef struct tagNET_VCA_RULE_TRIGGER_PARAM { - BYTE byTriggerMode; //Ĵʽ0- ã1- 2- Ŀ - BYTE byTriggerPoint; //㣬ʽΪʱЧ 0- ,1-,2- - BYTE byRes1[2]; // - float fTriggerArea; //Ŀٷֱ [0,100]ʽΪĿʱЧ - BYTE byRes2[4]; // + BYTE byTriggerMode; //规则的触发方式,0- 不启用,1- 点 2- 目标面积 + BYTE byTriggerPoint; //触发点,触发方式为点时有效 0- 中,1-上,2-下 + BYTE byRes1[2]; //保留 + float fTriggerArea; //触发目标面积百分比 [0,100],触发方式为目标面积时有效 + BYTE byRes2[4]; //保留 }NET_VCA_RULE_TRIGGER_PARAM,*LPNET_VCA_RULE_TRIGGER_PARAM; -//ṹ +//警戒规则结构 typedef struct tagNET_VCA_ONE_RULE_V41 { - BYTE byActive; //Ƿ񼤻,0-,0- - BYTE byRes1[4]; //Ϊ0ֶ - BYTE byEventTypeFlag; //־Ϊ¼ֶεЧԣ0-dwEventTypeЧ1-wEventTypeExЧ - //עֶbyEventTypeFlagֻòʱЧ豸ȡʱֱӴwEventTypeExȡ¼ͣжϴֶεֵ - WORD wEventTypeEx; //Ϊ¼չڴֶdwEventTypeοVCA_RULE_EVENT_TYPE_EX - BYTE byRuleName[NAME_LEN]; // - VCA_EVENT_TYPE dwEventType; //Ϊ¼ͣΪ˼ݣʹwEventTypeExȡ¼ - NET_VCA_EVENT_UNION uEventParam; //쳣Ϊ¼ - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ - WORD wAlarmDelay; //ܱʱ0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s - BYTE byRes2[2]; // - NET_VCA_FILTER_STRATEGY struFilterStrategy; //ߴ˲ - NET_VCA_RULE_TRIGGER_PARAM struTriggerParam; //򴥷 + BYTE byActive; //是否激活规则,0-否,非0-是 + BYTE byRes1[4]; //保留,设置为0字段 + BYTE byEventTypeFlag; //标志行为事件类型字段的有效性,0-dwEventType有效,1-wEventTypeEx有效 + //注:此字段byEventTypeFlag只在设置参数时有效,从设备获取参数时,可直接从wEventTypeEx获取事件类型,无需判断此字段的值 + WORD wEventTypeEx; //行为事件类型扩展,用于代替字段dwEventType,参考VCA_RULE_EVENT_TYPE_EX + BYTE byRuleName[NAME_LEN]; //规则名称 + VCA_EVENT_TYPE dwEventType; //行为事件类型,保留是为了兼容,后续建议使用wEventTypeEx获取事件类型 + NET_VCA_EVENT_UNION uEventParam; //异常行为检测事件参数 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + WORD wAlarmDelay; //智能报警延时,0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s + BYTE byRes2[2]; //保留 + NET_VCA_FILTER_STRATEGY struFilterStrategy; //尺寸过滤策略 + NET_VCA_RULE_TRIGGER_PARAM struTriggerParam; //规则触发参数 BYTE byRes[32]; }NET_VCA_ONE_RULE_V41, *LPNET_VCA_ONE_RULE_V41; -//쳣Ϊýṹ +//异常行为检测配置结构体 typedef struct tagNET_VCA_RULECFG_V41 { - DWORD dwSize; //ṹ - BYTE byPicProType; //ʱͼƬʽ 0- 0-ϴ - BYTE byUpLastAlarm; //2011-04-06 Ƿϴһεı - BYTE byPicRecordEnable; /*2012-3-1ǷͼƬ洢, 0-, 1-*/ + DWORD dwSize; //结构长度 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byUpLastAlarm; //2011-04-06 是否先上传最近一次的报警 + BYTE byPicRecordEnable; /*2012-3-1是否启用图片存储, 0-不启用, 1-启用*/ BYTE byRes1; - NET_DVR_JPEGPARA struPictureParam; //ͼƬṹ - NET_VCA_ONE_RULE_V41 struRule[MAX_RULE_NUM]; // - WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //ץͼͨͨʱͬʱϴͨץͼƬ0ʾֵΪͨ + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_ONE_RULE_V41 struRule[MAX_RULE_NUM]; //规则数组 + WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //关联抓图通道,当主通道报警时,同时会上传关联通道的抓拍图片,0表示不关联,其他值为关联通道号 BYTE byRes[26]; }NET_VCA_RULECFG_V41, *LPNET_VCA_RULECFG_V41; -//ṹ +//警戒规则结构 typedef struct NET_VCA_ONE_RULE_V42_ { - BYTE byActive; //Ƿ񼤻, 0-񣬷0- - BYTE byEventPriority;//¼ȼ 0-ͣ1-У2- - BYTE byBackgroundSuppression;// 0-ر 1- 2-Ӧ - BYTE byRes1[3]; //Ϊ0ֶ - WORD wEventType; //Ϊ¼ͣοVCA_RULE_EVENT_TYPE_EX - BYTE byRuleName[NAME_LEN/*32*/]; // - NET_VCA_EVENT_UNION uEventParam; //쳣Ϊ¼ - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*ʽ*/ - //쳣ʽбŰ󶨣Ϊ0ʱʾıŷΧΪ1-64Ϊ1ʱʾıŷΧΪ65-128 ڽУ0xffffffffʾ ǰļںıЧ - DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* ¼ֽͨڵͨţʼֵ 0xffffffff*/ - //¼ͨŰ󶨣Ϊ0ʱʾͨŷΧΪ1-64Ϊ1ʱʾͨŷΧΪ65-128 ڽУ0xffffffffʾ ǰļںĹͨЧ - WORD wAlarmDelay; //ܱʱ0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s - BYTE byRes2[2]; // - NET_VCA_FILTER_STRATEGY struFilterStrategy; //ߴ˲ - NET_VCA_RULE_TRIGGER_PARAM struTriggerParam; //򴥷 + BYTE byActive; //是否激活规则, 0-否,非0-是 + BYTE byEventPriority;//事件优先级 0-低,1-中,2-高 + BYTE byBackgroundSuppression;//背景干扰抑制 0-关闭 1-开启 2-自适应 + BYTE byRes1[3]; //保留,设置为0字段 + WORD wEventType; //行为事件类型,参考VCA_RULE_EVENT_TYPE_EX + BYTE byRuleName[NAME_LEN/*32*/]; //规则名称 + NET_VCA_EVENT_UNION uEventParam; //异常行为检测事件参数 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*处理方式*/ + //异常处理方式中报警输出号与组号绑定,即组号为0时,表示关联的报警输出号范围为1-64,当组号为1时,表示关联的报警输出号范围为65-128, 且是组内紧凑排列,如果遇到0xffffffff表示本组 当前的及组内后续的报警出号无效 + DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* 报警触发的录象通道(四字节的通道号,初始值是 0xffffffff)*/ + //关联的录像通道号与组号绑定,即组号为0时,表示关联的通道号范围为1-64,当组号为1时,表示关联的通道号范围为65-128, 且是组内紧凑排列,如果遇到0xffffffff表示本组 当前的及组内后续的关联通道号无效 + WORD wAlarmDelay; //智能报警延时,0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s + BYTE byRes2[2]; //保留 + NET_VCA_FILTER_STRATEGY struFilterStrategy; //尺寸过滤策略 + NET_VCA_RULE_TRIGGER_PARAM struTriggerParam; //规则触发参数 BYTE byRes[32]; }NET_VCA_ONE_RULE_V42, *LPNET_VCA_ONE_RULE_V42; typedef struct tagNET_DVR_PTZ_POSITION { - // ǷóóΪʱֶЧóλϢʱΪʹλ + // 是否启用场景,在设置场景行为规则的时候该字段无效,在设置球机本地配置场景位置信息时作为使能位 BYTE byEnable; - BYTE byRes1[3]; // - BYTE byPtzPositionName[NAME_LEN]; //λ - NET_DVR_PTZPOS struPtzPos; //ptz + BYTE byRes1[3]; //保留 + BYTE byPtzPositionName[NAME_LEN]; //场景位置名称 + NET_DVR_PTZPOS struPtzPos; //ptz 坐标 BYTE byRes2[40]; }NET_DVR_PTZ_POSITION, *LPNET_DVR_PTZ_POSITION; -//쳣Ϊýṹ +//异常行为检测配置结构体 typedef struct tagNET_VCA_RULECFG_V42 { - DWORD dwSize; //ṹͼС - BYTE byPicProType; //ʱͼƬʽ 0- 1-ϴ - BYTE byUpLastAlarm; //Ƿϴһεı0-1- - BYTE byPicRecordEnable; //ǷͼƬ洢, 0-, 1- + DWORD dwSize; //结构图大小 + BYTE byPicProType; //报警时图片处理方式 0-不处理 1-上传 + BYTE byUpLastAlarm; //是否先上传最近一次的报警,0-否,1-是 + BYTE byPicRecordEnable; //是否启用图片存储, 0-不启用, 1-启用 BYTE byRes1; - NET_DVR_JPEGPARA struPicParam; //ͼƬṹ - NET_VCA_ONE_RULE_V42 struRule[MAX_RULE_NUM_V42 /*16*/]; /* */ - WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //ץͼͨͨʱͬʱϴͨץͼƬ0ʾֵΪͨ - BYTE byTrackEnable; //Ƿ + NET_DVR_JPEGPARA struPicParam; //图片规格结构 + NET_VCA_ONE_RULE_V42 struRule[MAX_RULE_NUM_V42 /*16*/]; /* 规则数组*/ + WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //关联抓图通道,当主通道报警时,同时会上传关联通道的抓拍图片,0表示不关联,其他值为关联通道号 + BYTE byTrackEnable; //是否启用 BYTE byRes2; - NET_DVR_PTZ_POSITION struPTZPosition; //λϢ - WORD wTrackDuration; //ʱ䣬λs - WORD wIntervalTime; //αʱ䣨룩[1-7200]ĬΪ600 - WORD wHeightLimit;//Ŀ߶ޣף[0-250]ĬΪ80cmСڴ˸߶ȵĿ꽫ΪĿм - BYTE byRes[58];// + NET_DVR_PTZ_POSITION struPTZPosition; //场景位置信息 + WORD wTrackDuration; //持续时间,单位s + WORD wIntervalTime; //单次报警间隔时间(秒)[1-7200](默认为600) + WORD wHeightLimit;//目标检测高度下限(厘米)[0-250](默认为80cm),小于此高度的目标将不作为目标进行检测 + BYTE byRes[58];//保留 }NET_VCA_RULECFG_V42, *LPNET_VCA_RULECFG_V42; -//Ŀṹ +//简化目标结构体 typedef struct tagNET_VCA_TARGET_INFO { - DWORD dwID; //ĿID ,Աۼ߱ʱΪ0 - NET_VCA_RECT struRect; //Ŀ߽ - BYTE byRes[4]; // + DWORD dwID; //目标ID ,人员聚集过高报警时为0 + NET_VCA_RECT struRect; //目标边界框 + BYTE byRes[4]; //保留 }NET_VCA_TARGET_INFO, *LPNET_VCA_TARGET_INFO; -//򻯵ĹϢ, ĻϢ +//简化的规则信息, 包含规则的基本信息 typedef struct tagNET_VCA_RULE_INFO { - BYTE byRuleID; //ID,0-7 - BYTE bySceneID; //ID,0Ч - WORD wEventTypeEx; //Ϊ¼չڴֶdwEventTypeοVCA_RULE_EVENT_TYPE_EX - BYTE byRuleName[NAME_LEN]; // - VCA_EVENT_TYPE dwEventType; //Ϊ¼ͣΪ˼ݣʹwEventTypeExȡ¼ - NET_VCA_EVENT_UNION uEventParam;//¼ + BYTE byRuleID; //规则ID,0-7 + BYTE bySceneID; //场景ID,返回0无效 + WORD wEventTypeEx; //行为事件类型扩展,用于代替字段dwEventType,参考VCA_RULE_EVENT_TYPE_EX + BYTE byRuleName[NAME_LEN]; //规则名称 + VCA_EVENT_TYPE dwEventType; //行为事件类型,保留是为了兼容,后续建议使wEventTypeEx获取事件类型 + NET_VCA_EVENT_UNION uEventParam;//事件参数 }NET_VCA_RULE_INFO, *LPNET_VCA_RULE_INFO; -//쳣Ϊϱṹ +//异常行为检测结果上报结构 typedef struct tagNET_VCA_RULE_ALARM { - DWORD dwSize; //ṹ - DWORD dwRelativeTime; //ʱ,ʷԭʵûã汾byRelativeTimeFlagΪ1ʱʾΪUTCʱ - DWORD dwAbsTime; //ʱ,ʷԭʵΪOSDʱ - NET_VCA_RULE_INFO struRuleInfo; //¼Ϣ - NET_VCA_TARGET_INFO struTargetInfo; //ĿϢ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - DWORD dwPicDataLen; //ͼƬij Ϊ0ʾûͼƬ0ʾýṹͼƬ*/ - BYTE byPicType; // 0-ץͼƬ 1-ԱͼƬ - BYTE byRelAlarmPicNum; //ͨͼƬ - BYTE bySmart;//IDS豸0(Ĭֵ)Smart Functiom Return 1 - BYTE byPicTransType; //ͼƬݴ䷽ʽ: 0-ƣ1-url - DWORD dwAlarmID; //IDԱʶͨϱ0ʾЧ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byRelativeTimeFlag; //dwRelativeTimeֶǷЧ 0-Ч 1-ЧdwRelativeTimeʾUTCʱ - BYTE byAppendInfoUploadEnabled; //Ϣϴʹ 0-ϴ 1-ϴ - BYTE *pAppendInfo; //ָ򸽼ϢNET_VCA_APPEND_INFOָ룬byAppendInfoUploadEnabledΪ1ʱbyTimeDiffFlagΪ1ʱЧ - BYTE *pImage; //ָͼƬָ + DWORD dwSize; //结构长度 + DWORD dwRelativeTime; //相对时标,历史原因,实际没用,本版本用起来当byRelativeTimeFlag为1时,表示为UTC的时间 + DWORD dwAbsTime; //绝对时标,历史原因,这里实际为OSD时间 + NET_VCA_RULE_INFO struRuleInfo; //事件规则信息 + NET_VCA_TARGET_INFO struTargetInfo; //报警目标信息 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwPicDataLen; //返回图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据*/ + BYTE byPicType; // 0-触发抓拍图片 1-对比图片 + BYTE byRelAlarmPicNum; //关联通道报警图片数量 + BYTE bySmart;//IDS设备返回0(默认值),Smart Functiom Return 1 + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + DWORD dwAlarmID; //报警ID,用以标识通道间关联产生的组合报警,0表示无效 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRelativeTimeFlag; //dwRelativeTime字段是否有效 0-无效, 1-有效,dwRelativeTime表示UTC时间 + BYTE byAppendInfoUploadEnabled; //附加信息上传使能 0-不上传 1-上传 + BYTE *pAppendInfo; //指向附加信息NET_VCA_APPEND_INFO的指针,byAppendInfoUploadEnabled为1时或者byTimeDiffFlag为1时有效 + BYTE *pImage; //指向图片的指针 }NET_VCA_RULE_ALARM, *LPNET_VCA_RULE_ALARM; -//쳣Ϊ⸽Ϣ +//异常行为检测附加信息 typedef struct tagNET_VCA_APPEND_INFO { - DWORD dwSize; //ṹ - DWORD dwAppendPicLen;//ͼƬ - BYTE* pAppendPicBuff;//ͼƬָ - BYTE byAppendPicType;//ͼƬͣ0-;1-ɼͼƬ;2-ȳͼƬ; - BYTE byUID[64];//豸UID - BYTE byApplicationScene;// Ӧó 0- 1- - BYTE byRes1[2]; // - DWORD dwTargetSpeed; //״⵽Ŀٶ,λ:km/h - DWORD dwTargetDistance; //״⵽Ŀ,λ:m/ - BYTE byAlarmType;// 0-Ƶ 1-״ - BYTE byRadarChannel; //״ͨ1ʼۼ - BYTE byBrokenNetHttp; // ־λ0-شݣ1-ش - BYTE byAppendChannelType;//ͨͣ0-;1-ɼͨ;2-ȳͨ; - DWORD dwAppendChannel; //ͨͨ - BYTE byRes[44]; // + DWORD dwSize; //结构长度 + DWORD dwAppendPicLen;//附加图片长度 + BYTE* pAppendPicBuff;//附加图片指针 + BYTE byAppendPicType;//附加图片类型:0-保留;1-可见光图片;2-热成像图片; + BYTE byUID[64];//设备报警UID + BYTE byApplicationScene;// 应用场景 0-保留 1-室内 + BYTE byRes1[2]; //保留 + DWORD dwTargetSpeed; //雷达检测到目标速度,单位:km/h + DWORD dwTargetDistance; //雷达检测到目标距离,单位:m/米 + BYTE byAlarmType;//报警类型 0-视频 1-雷达 + BYTE byRadarChannel; //雷达通道,从1开始累加 + BYTE byBrokenNetHttp; // 断网续传标志位,0-不重传数据,1-重传数据 + BYTE byAppendChannelType;//附加通道类型:0-保留;1-可见光通道;2-热成像通道; + DWORD dwAppendChannel; //附加通道通道号 + BYTE byRes[44]; //保留 }NET_VCA_APPEND_INFO, *LPNET_VCA_APPEND_INFO; -//쳣ΪDSPϢӽṹ +//异常行为检测规则DSP信息叠加结构 typedef struct tagNET_VCA_DRAW_MODE { DWORD dwSize; - BYTE byDspAddTarget; //ǷĿ - BYTE byDspAddRule; //Ƿӹ - BYTE byDspPicAddTarget; //ץͼǷĿ - BYTE byDspPicAddRule; //ץͼǷӹ + BYTE byDspAddTarget; //编码是否叠加目标 + BYTE byDspAddRule; //编码是否叠加规则 + BYTE byDspPicAddTarget; //抓图是否叠加目标 + BYTE byDspPicAddRule; //抓图是否叠加规则 BYTE byRes[4]; }NET_VCA_DRAW_MODE, *LPNET_VCA_DRAW_MODE; -// +//物体类型 typedef enum tagOBJECT_TYPE_ENUM { - ENUM_OBJECT_TYPE_COAT = 1 // + ENUM_OBJECT_TYPE_COAT = 1 //上衣 }OBJECT_TYPE_ENUM; -//ɫṹ +//物体颜色条件结构体 typedef struct tagNET_DVR_OBJECT_COLOR_COND { - DWORD dwChannel; //ͨ - DWORD dwObjType; //ͣμOBJECT_TYPE_ENUM - BYTE byRes[64]; // + DWORD dwChannel; //通道号 + DWORD dwObjType; //物体类型,参见OBJECT_TYPE_ENUM + BYTE byRes[64]; //保留 }NET_DVR_OBJECT_COLOR_COND,*LPNET_DVR_OBJECT_COLOR_COND; -//ͼƬ +//图片参数 typedef struct tagNET_DVR_PIC { - BYTE byPicType; //ͼƬͣ1-jpg - BYTE byRes1[3]; // - DWORD dwPicWidth; //ͼƬ - DWORD dwPicHeight; //ͼƬ߶ - DWORD dwPicDataLen; //ͼƬʵʴС - DWORD dwPicDataBuffLen; //ͼƬݻС - BYTE* byPicDataBuff; //ͼƬݻ - BYTE byRes2[40]; // + BYTE byPicType; //图片类型,1-jpg + BYTE byRes1[3]; //保留 + DWORD dwPicWidth; //图片宽度 + DWORD dwPicHeight; //图片高度 + DWORD dwPicDataLen; //图片数据实际大小 + DWORD dwPicDataBuffLen; //图片数据缓冲区大小 + BYTE* byPicDataBuff; //图片数据缓冲区 + BYTE byRes2[40]; //保留 }NET_DVR_PIC,*LPNET_DVR_PIC; -//ɫ +//颜色联合体 typedef union tagNET_DVR_OBJECT_COLOR_UNION { - NET_DVR_COLOR struColor; //ɫֵ - NET_DVR_PIC struPicture; //ͼƬ - BYTE byRes[64]; // + NET_DVR_COLOR struColor; //颜色值 + NET_DVR_PIC struPicture; //图片 + BYTE byRes[64]; //保留 }NET_DVR_OBJECT_COLOR_UNION,*LPNET_DVR_OBJECT_COLOR_UNION; -//ɫṹ +//物体颜色参数结构体 typedef struct tagNET_DVR_OBJECT_COLOR { - DWORD dwSize; //ṹС - BYTE byEnable; //0-ã1- - BYTE byColorMode; //ȡɫʽ1-ɫֵ2-ͼƬ - BYTE byRes1[2]; // - NET_DVR_OBJECT_COLOR_UNION uObjColor; //ɫ壬ȡֵȡɫʽ - BYTE byRes2[64]; // + DWORD dwSize; //结构体大小 + BYTE byEnable; //0-不启用,1-启用 + BYTE byColorMode; //取色方式,1-颜色值,2-图片 + BYTE byRes1[2]; //保留 + NET_DVR_OBJECT_COLOR_UNION uObjColor; //物体颜色联合体,取值依赖于取色方式 + BYTE byRes2[64]; //保留 }NET_DVR_OBJECT_COLOR, *LPNET_DVR_OBJECT_COLOR; -// +//区域类型 typedef enum tagAREA_TYPE_ENUM { - ENUM_OVERLAP_REGION = 1,//ͬ - ENUM_BED_LOCATION = 2 //λ + ENUM_OVERLAP_REGION = 1,//共同区域 + ENUM_BED_LOCATION = 2 //床铺位置 }AREA_TYPE_ENUM; -// +//辅助区域 typedef struct tagNET_DVR_AUXAREA { - DWORD dwAreaType; //ͣμAREA_TYPE_ENUM - BYTE byEnable; //0-ã1- - BYTE byRes1[3]; // - NET_VCA_POLYGON struPolygon; // - BYTE byRes2[16]; // + DWORD dwAreaType; //区域类型,参见AREA_TYPE_ENUM + BYTE byEnable; //0-不启用,1-启用 + BYTE byRes1[3]; //保留 + NET_VCA_POLYGON struPolygon; //区域 + BYTE byRes2[16]; //保留 }NET_DVR_AUXAREA,*LPNET_DVR_AUXAREA; -//б +//辅助区域列表 typedef struct tagNET_DVR_AUXAREA_LIST { - DWORD dwSize; // ṹС - NET_DVR_AUXAREA struArea[MAX_AUXAREA_NUM]; // - BYTE byRes2[64]; // + DWORD dwSize; // 结构体大小 + NET_DVR_AUXAREA struArea[MAX_AUXAREA_NUM]; //辅助区域 + BYTE byRes2[64]; // 保留 }NET_DVR_AUXAREA_LIST,*LPNET_DVR_AUXAREA_LIST; -//ͨģʽ +//通道工作模式 typedef enum tagCHAN_WORKMODE_ENUM { - ENUM_CHAN_WORKMODE_INDEPENDENT = 1, //ģʽ - ENUM_CHAN_WORKMODE_MASTER = 2, //ģʽ - ENUM_CHAN_WORKMODE_SLAVE = 3 //ģʽ + ENUM_CHAN_WORKMODE_INDEPENDENT = 1, //独立模式 + ENUM_CHAN_WORKMODE_MASTER = 2, //主模式 + ENUM_CHAN_WORKMODE_SLAVE = 3 //从模式 }CHAN_WORKMODE_ENUM; -//ͨģʽṹ +//通道工作模式参数结构体 typedef struct tagNET_DVR_CHANNEL_WORKMODE { - DWORD dwSize; //ṹС - BYTE byWorkMode; //ģʽμCHAN_WORKMODE_ENUM - BYTE byRes[63]; // + DWORD dwSize; //结构体大小 + BYTE byWorkMode; //工作模式,参见CHAN_WORKMODE_ENUM + BYTE byRes[63]; //保留 }NET_DVR_CHANNEL_WORKMODE,*LPNET_DVR_CHANNEL_WORKMODE; -//豸ͨṹ +//设备通道参数结构体 typedef struct tagNET_DVR_CHANNEL { - BYTE byAddress[MAX_DOMAIN_NAME]; //豸IP - WORD wDVRPort; //˿ں - BYTE byRes1[2]; // - BYTE sUserName[NAME_LEN]; //û - BYTE sPassword[PASSWD_LEN]; // - DWORD dwChannel; //ͨ - BYTE byRes2[32]; // + BYTE byAddress[MAX_DOMAIN_NAME]; //设备IP或域名 + WORD wDVRPort; //端口号 + BYTE byRes1[2]; //保留 + BYTE sUserName[NAME_LEN]; //主机用户名 + BYTE sPassword[PASSWD_LEN]; //主机密码 + DWORD dwChannel; //通道号 + BYTE byRes2[32]; //保留 }NET_DVR_CHANNEL,*LPNET_DVR_CHANNEL; -//ͨϢ +//从通道信息联合体 typedef union tagNET_DVR_SLAVE_CHANNEL_UNION { - BYTE byRes[152]; //С - DWORD dwLocalChannel; //ͨ - NET_DVR_CHANNEL struRemoteChannel; //Զͨ + BYTE byRes[152]; //联合体大小 + DWORD dwLocalChannel; //本机通道 + NET_DVR_CHANNEL struRemoteChannel; //远程通道 }NET_DVR_SLAVE_CHANNEL_UNION,*LPNET_DVR_SLAVE_CHANNEL_UNION; -//ͨṹ +//从通道参数结构体 typedef struct tagNET_DVR_SLAVE_CHANNEL_PARAM { - BYTE byChanType; //ͨͣ1-ͨ2-Զͨ - BYTE byRes1[3]; // - NET_DVR_SLAVE_CHANNEL_UNION uSlaveChannel; //ͨ壬ȡֵbyChanType - BYTE byRes2[64]; // + BYTE byChanType; //从通道类型,1-本机通道,2-远程通道 + BYTE byRes1[3]; //保留 + NET_DVR_SLAVE_CHANNEL_UNION uSlaveChannel; //从通道联合体,取值依赖于byChanType + BYTE byRes2[64]; //保留 }NET_DVR_SLAVE_CHANNEL_PARAM,*LPNET_DVR_SLAVE_CHANNEL_PARAM; -//ͨýṹ +//从通道参数配置结构体 typedef struct tagNET_DVR_SLAVE_CHANNEL_CFG { - DWORD dwSize; //ṹС - NET_DVR_SLAVE_CHANNEL_PARAM struChanParam[MAX_SLAVE_CHANNEL_NUM];//ͨ - BYTE byRes[64]; // + DWORD dwSize; //结构体大小 + NET_DVR_SLAVE_CHANNEL_PARAM struChanParam[MAX_SLAVE_CHANNEL_NUM];//从通道参数 + BYTE byRes[64]; //保留 }NET_DVR_SLAVE_CHANNEL_CFG,*LPNET_DVR_SLAVE_CHANNEL_CFG; -//Ƶϼ¼ +//视频质量诊断检测事件 typedef enum tagVQD_EVENT_ENUM { - ENUM_VQD_EVENT_BLUR = 1, //ͼģ - ENUM_VQD_EVENT_LUMA = 2, //쳣 - ENUM_VQD_EVENT_CHROMA = 3, //ͼƫɫ - ENUM_VQD_EVENT_SNOW = 4, //ѩ - ENUM_VQD_EVENT_STREAK = 5, //Ƹ - ENUM_VQD_EVENT_FREEZE = 6, //涳 - ENUM_VQD_EVENT_SIGNAL_LOSS = 7, //źŶʧ - ENUM_VQD_EVENT_PTZ = 8, //̨ʧ - ENUM_VQD_EVENT_SCNENE_CHANGE = 9, //ͻ - ENUM_VQD_EVENT_VIDEO_ABNORMAL = 10, //Ƶ쳣 - ENUM_VQD_EVENT_VIDEO_BLOCK = 11, //Ƶڵ - ENUM_VQD_EVENT_CLARTY = 12, //쳣 - ENUM_VQD_EVENT_JITTER = 13, //涶 - ENUM_VQD_EVENT_FLOWERS = 14, // - ENUM_VQD_EVENT_NOISE = 15, // - ENUM_VQD_EVENT_GHOST = 16, //쳣 - ENUM_VQD_EVENT_PURPLE = 17, //ϱ - ENUM_VQD_EVENT_ICR = 18, // ICR쳣 - ENUM_VQD_EVENT_PROTECTFILM = 19 //Ĥδ˺ + ENUM_VQD_EVENT_BLUR = 1, //图像模糊 + ENUM_VQD_EVENT_LUMA = 2, //亮度异常 + ENUM_VQD_EVENT_CHROMA = 3, //图像偏色 + ENUM_VQD_EVENT_SNOW = 4, //雪花干扰 + ENUM_VQD_EVENT_STREAK = 5, //条纹干扰 + ENUM_VQD_EVENT_FREEZE = 6, //画面冻结 + ENUM_VQD_EVENT_SIGNAL_LOSS = 7, //信号丢失 + ENUM_VQD_EVENT_PTZ = 8, //云台失控 + ENUM_VQD_EVENT_SCNENE_CHANGE = 9, //场景突变 + ENUM_VQD_EVENT_VIDEO_ABNORMAL = 10, //视频异常 + ENUM_VQD_EVENT_VIDEO_BLOCK = 11, //视频遮挡 + ENUM_VQD_EVENT_CLARTY = 12, //清晰度异常 + ENUM_VQD_EVENT_JITTER = 13, //画面抖动 + ENUM_VQD_EVENT_FLOWERS = 14, //画屏 + ENUM_VQD_EVENT_NOISE = 15, //噪点 + ENUM_VQD_EVENT_GHOST = 16, //异常光斑 + ENUM_VQD_EVENT_PURPLE = 17, //紫边 + ENUM_VQD_EVENT_ICR = 18, // ICR检测异常 + ENUM_VQD_EVENT_PROTECTFILM = 19 //保护膜未撕 }VQD_EVENT_ENUM; -//Ƶ¼ṹ +//视频质量诊断事件条件结构体 typedef struct tagNET_DVR_VQD_EVENT_COND { - DWORD dwChannel; //ͨ - DWORD dwEventType; //¼ͣμVQD_EVENT_ENUM - BYTE byRes[64]; // + DWORD dwChannel; //通道号 + DWORD dwEventType; //检测事件类型,参见VQD_EVENT_ENUM + BYTE byRes[64]; //保留 }NET_DVR_VQD_EVENT_COND,*LPNET_DVR_VQD_EVENT_COND; -//Ƶ¼ +//视频质量诊断事件参数 typedef struct tagNET_DVR_VQD_EVENT_PARAM { - BYTE byThreshold; //ֵΧ[0,100] - BYTE byTriggerMode; //1-2-δ - BYTE byUploadPic; //0-ϴͼƬ1-ϴͼƬǷϴͼƬº󶼿Դ豸ȡ¼ӦµһűͼƬμӿNET_DVR_StartDownload - BYTE byRes1; // - DWORD dwTimeInterval; //ʱΧ[0,3600] λ - BYTE byRes2[64]; // + BYTE byThreshold; //报警阈值,范围[0,100] + BYTE byTriggerMode; //1-持续触发,2-单次触发 + BYTE byUploadPic; //0-不上传图片,1-上传图片,无论是否上传图片,事后都可以从设备获取该事件所对应最新的一张报警图片,参见接口NET_DVR_StartDownload + BYTE byRes1; //保留 + DWORD dwTimeInterval; //持续触发报警时间间隔,范围[0,3600] 单位:秒 + BYTE byRes2[64]; //保留 }NET_DVR_VQD_EVENT_PARAM,*LPNET_DVR_VQD_EVENT_PARAM; -//Ƶ¼ +//视频质量诊断事件规则 typedef struct tagNET_DVR_VQD_EVENT_RULE { - DWORD dwSize; //ṹС - BYTE byEnable; //0-ã1- - BYTE byRes1[3]; // - NET_DVR_VQD_EVENT_PARAM struEventParam; //Ƶ¼ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ - BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //¼ͨ1ʾͨ0ʾ - BYTE byRes2[128]; // + DWORD dwSize; //结构体大小 + BYTE byEnable; //0-不启用,1-启用 + BYTE byRes1[3]; //保留 + NET_DVR_VQD_EVENT_PARAM struEventParam; //视频质量诊断事件参数 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//检测时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //报警触发的录象通道:1表示触发该通道;0表示不触发 + BYTE byRes2[128]; //保留 }NET_DVR_VQD_EVENT_RULE,*LPNET_DVR_VQD_EVENT_RULE; -//׼ +//基准场景参数 typedef struct tagNET_DVR_BASELINE_SCENE { - DWORD dwSize; //ṹС - BYTE byEnable; //0-ã1- - BYTE byRes[63]; // + DWORD dwSize; //结构体大小 + BYTE byEnable; //0-不启用,1-启用 + BYTE byRes[63]; //保留 }NET_DVR_BASELINE_SCENE,*LPNET_DVR_BASELINE_SCENE; -//׼ṹ +//基准场景操作参数结构体 typedef struct tagNET_DVR_CONTROL_BASELINE_SCENE_PARAM { - DWORD dwSize; //ṹС - DWORD dwChannel; //ͨ - BYTE byCommand; //ͣ1-ֶαݲʹã2-»׼ - BYTE byRes[127]; // + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + BYTE byCommand; //操作类型,1-此字段保留,暂不使用,2-更新基准场景 + BYTE byRes[127]; //保留 }NET_DVR_CONTROL_BASELINE_SCENE_PARAM,*LPNET_DVR_CONTROL_BASELINE_SCENE_PARAM; -//Ƶϱṹ +//视频质量诊断报警结构体 typedef struct tagNET_DVR_VQD_ALARM { - DWORD dwSize; //ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - DWORD dwEventType; //¼ͣοVQD_EVENT_ENUM - float fThreshold; //ֵ[0.000,1.000] - DWORD dwPicDataLen; //ͼƬȣΪ0ʾûͼƬ - BYTE *pImage; //ָͼƬָ - BYTE byRes[128]; // + DWORD dwSize; //结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwEventType; //事件类型,参考VQD_EVENT_ENUM + float fThreshold; //报警阈值[0.000,1.000] + DWORD dwPicDataLen; //图片长度,为0表示没有图片 + BYTE *pImage; //指向图片的指针 + BYTE byRes[128]; //保留 }NET_DVR_VQD_ALARM,*LPNET_DVR_VQD_ALARM; -//궨ӽṹ +//标定点子结构 typedef struct tagNET_DVR_CB_POINT { - NET_VCA_POINT struPoint; //궨㣬ǹ - NET_DVR_PTZPOS struPtzPos; //PTZ + NET_VCA_POINT struPoint; //标定点,主摄像机(枪机) + NET_DVR_PTZPOS struPtzPos; //球机输入的PTZ坐标 BYTE byRes[8]; }NET_DVR_CB_POINT, LPNET_DVR_CB_POINT; -//궨ýṹ +//标定参数配置结构 typedef struct tagNET_DVR_TRACK_CALIBRATION_PARAM { - BYTE byPointNum; //Ч궨 + BYTE byPointNum; //有效标定点个数 BYTE byRes[3]; - NET_DVR_CB_POINT struCBPoint[MAX_CALIB_PT]; //궨 + NET_DVR_CB_POINT struCBPoint[MAX_CALIB_PT]; //标定点组 }NET_DVR_TRACK_CALIBRATION_PARAM, *LPNET_DVR_TRACK_CALIBRATION_PARAM; -//ýṹ +//球机配置结构 typedef struct tagNET_DVR_TRACK_CFG { - DWORD dwSize; //ṹ - BYTE byEnable; //궨ʹ - BYTE byFollowChan; // ƵĴͨ - BYTE byDomeCalibrate; //궨1 0 - BYTE byRes; // ֽ - NET_DVR_TRACK_CALIBRATION_PARAM struCalParam; //궨 + DWORD dwSize; //结构长度 + BYTE byEnable; //标定使能 + BYTE byFollowChan; // 被控制的从通道 + BYTE byDomeCalibrate; //设置智能球机标定,1设置 0不设置 + BYTE byRes; // 保留字节 + NET_DVR_TRACK_CALIBRATION_PARAM struCalParam; //标定点组 }NET_DVR_TRACK_CFG, *LPNET_DVR_TRACK_CFG ; -//ģʽ +//模式 typedef enum _TRACK_MODE_ { - MANUAL_CTRL = 0, //ֶ - ALARM_TRACK // + MANUAL_CTRL = 0, //手动 + ALARM_TRACK //报警触发 }TRACK_MODE; -//ֶƽṹ +//手动控制结构 typedef struct tagNET_DVR_MANUAL_CTRL_INFO { NET_VCA_POINT struCtrlPoint; BYTE byRes[8]; }NET_DVR_MANUAL_CTRL_INFO, *LPNET_DVR_MANUAL_CTRL_INFO ; -//ģʽṹ +//模式结构 typedef struct tagNET_DVR_TRACK_MODE { - DWORD dwSize; //ṹ - BYTE byTrackMode; //ģʽ - BYTE byRuleConfMode; //ģʽ0-ã1-Զ - BYTE byRes[2]; //0 + DWORD dwSize; //结构长度 + BYTE byTrackMode; //模式 + BYTE byRuleConfMode; //规则配置模式0-本地配置,1-远程配置 + BYTE byRes[2]; //保留,置0 union { DWORD dwULen[4]; - NET_DVR_MANUAL_CTRL_INFO struManualCtrl;//ֶṹ + NET_DVR_MANUAL_CTRL_INFO struManualCtrl;//手动结构 }uModeParam; }NET_DVR_TRACK_MODE,*LPNET_DVR_TRACK_MODE; typedef struct tagNET_DVR_ALARM_JPEG { - BYTE byPicProType; /*ʱͼƬʽ 0- 1-ϴ*/ - BYTE byRes[3]; //ֽ - NET_DVR_JPEGPARA struPicParam; /*ͼƬṹ*/ + BYTE byPicProType; /*报警时图片处理方式 0-不处理 1-上传*/ + BYTE byRes[3]; //保留字节 + NET_DVR_JPEGPARA struPicParam; /*图片规格结构*/ }NET_DVR_ALARM_JPEG, *LPNET_DVR_ALARM_JPEG; /**********************ipc/d5.3.0********************************/ typedef struct tagNET_DVR_PHY_RATIO { DWORD dwSize; - DWORD dwPhysicsRatio;// + DWORD dwPhysicsRatio;//物理倍率坐标 BYTE byRes[60]; }NET_DVR_PHY_RATIO, *LPNET_DVR_PHY_RATIO; @@ -15762,7 +15762,7 @@ typedef struct tagNET_DVR_SLAVECAMERA_COND { DWORD dwSize; DWORD dwChannel; - BYTE byID;// ID[1,4] + BYTE byID;//主从 从摄像机ID编号[1,4] BYTE byRes1[3]; DWORD dwSceneID;// scene Id BYTE byRes[56]; @@ -15771,37 +15771,37 @@ typedef struct tagNET_DVR_SLAVECAMERA_COND typedef struct tagNET_DVR_SLAVECAMERA_CFG { DWORD dwSize; - BYTE byAddressType; //0-ʵipv4 ipv6ַ 1- - // unionServerʹʵʵַ - WORD wPort; /*˿*/ - BYTE byLoginStatus; /*豸ĵ½״̬ 0-logout,1-login*/ + BYTE byAddressType; //0-实际ipv4 ipv6地址 1-域名 + // 控制unionServer是使用实际地址还是域名 + WORD wPort; /*端口*/ + BYTE byLoginStatus; /*从设备的登陆状态 0-logout,1-login*/ union { struct { - BYTE szDomain[MAX_DOMAIN_NAME/*64*/];//ַ + BYTE szDomain[MAX_DOMAIN_NAME/*64*/];//服务器地址,域名 BYTE byRes1[80]; }struDomain; struct { - NET_DVR_IPADDR struIp;/*IPַ*/ //IPv4 IPv6ַ, 144ֽ + NET_DVR_IPADDR struIp;/*IP地址*/ //IPv4 IPv6地址, 144字节 } struAddrIP; - }unionServer; //ʹṹͨbyAddressTypeֶαʾIPַ 64 - BYTE szUserName[NAME_LEN/*32*/]; /*û*/ - BYTE szPassWord[PASSWD_LEN/*16*/]; /**/ + }unionServer; //使用联合体结构,通过byAddressType字段表示是IP地址还是域名 64 + BYTE szUserName[NAME_LEN/*32*/]; /*用户名*/ + BYTE szPassWord[PASSWD_LEN/*16*/]; /*密码*/ BYTE byRes1[128]; }NET_DVR_SLAVECAMERA_CFG, *LPNET_DVR_SLAVECAMERA_CFG; typedef struct tagNET_DVR_SLAVECAMERA_PARAM { - BYTE byLinkStatus ;//״̬ 0- δӣ1- + BYTE byLinkStatus ;//连接状态 0- 未连接,1-连接 BYTE byRes[15]; }NET_DVR_SLAVECAMERA_PARAM, *LPNET_DVR_SLAVECAMERA_PARAM; typedef struct tagNET_DVR_SLAVECAMERA_STATUS { DWORD dwSize; - NET_DVR_SLAVECAMERA_PARAM struSlaveCamera[MAX_SLAVECAMERA_NUM/*8*/];//±0ʾID 1, + NET_DVR_SLAVECAMERA_PARAM struSlaveCamera[MAX_SLAVECAMERA_NUM/*8*/];//数组下标0表示从摄像机ID 1,依次类推 BYTE byRes[64]; }NET_DVR_SLAVECAMERA_STATUS, *LPNET_DVR_SLAVECAMERA_STATUS; @@ -15810,63 +15810,63 @@ typedef struct tagNET_PTZ_INFO float fPan; float fTilt; float fZoom; - DWORD dwFocus;// ۽۽Χһ0-100000 + DWORD dwFocus;// 聚焦参数,聚焦范围:归一化0-100000 BYTE byRes[4]; }NET_PTZ_INFO, *LPNET_PTZ_INFO; typedef struct tagNET_DVR_BV_CALIB_POSITION { - DWORD dwSize; //ṹ - NET_PTZ_INFO struInitialPos; //ʼ - NET_PTZ_INFO struAdjustPos; // - BYTE byRes[300]; // + DWORD dwSize; //结构长度 + NET_PTZ_INFO struInitialPos; //初始坐标 + NET_PTZ_INFO struAdjustPos; //调整坐标 + BYTE byRes[300]; //保留 }NET_DVR_BV_CALIB_POSITION, *LPNET_DVR_BV_CALIB_POSITION; typedef struct tagNET_DVR_HUMAN_CALIB_CFG { - DWORD dwSize; //ṹ - NET_VCA_POINT struLeftPos; // - NET_VCA_POINT struRightPos; // - BYTE byRes[300]; // + DWORD dwSize; //结构长度 + NET_VCA_POINT struLeftPos; //人体左坐标点 + NET_VCA_POINT struRightPos; //人体右坐标点 + BYTE byRes[300]; //保留 }NET_DVR_HUMAN_CALIB_CFG, *LPNET_DVR_HUMAN_CALIB_CFG; typedef struct tagNET_DVR_CALIB_PARAM { NET_PTZ_INFO struPtzInfo; - NET_VCA_POINT struCalibCoordinates;//궨 - int iHorValue;//˫Ŀ궨 ˮƽֵ cmֶģʽЧ ˫Ŀã - int iVerValue;//˫Ŀ궨 ֱֵ cmֶģʽЧ ˫Ŀã + NET_VCA_POINT struCalibCoordinates;//标定坐标 + int iHorValue;//双目标定 水平值 cm(手动模式下生效 双目相机配置) + int iVerValue;//双目标定 垂直值 cm(手动模式下生效 双目相机配置) BYTE byRes[8]; }NET_DVR_CALIB_PARAM, *LPNET_DVR_CALIB_PARAM; typedef struct tagNET_DVR_SLAVECAMERA_CALIB_CFG { DWORD dwSize; - BYTE byCalibMode;//궨ģʽ: 0-,1-Զ궨, 2-ֶ궨 + BYTE byCalibMode;//标定模式: 0-保留,1-自动标定, 2-手动标定 BYTE byRes[3]; - //±0ʾID 1 - //ֶ궨ģʽ֧ã&&ȡԶģʽֻ֧ȡ - NET_DVR_CALIB_PARAM struCalibParam[MAX_CALIB_NUM/*6*/];//ֶֻ궨ģʽЧ + //数组下标0表示从摄像机ID 1,依次类推 + //手动标定模式下支持配置(设置&&获取),自动模式下支持获取操作 + NET_DVR_CALIB_PARAM struCalibParam[MAX_CALIB_NUM/*6*/];//只在手动标定模式下生效 BYTE byRes1[64]; }NET_DVR_SLAVECAMERA_CALIB_CFG, *LPNET_DVR_SLAVECAMERA_CALIB_CFG; typedef struct tagNET_DVR_TRACKING { - DWORD dwSize; //ṹ - BYTE byEnable; //ʹ 0-false,1-true - BYTE byMode; //ģʽ 0-رգ1-ֶ2-Զ - WORD wTrackingTime;//ʱ䣺[0,60]s - NET_VCA_POLYGON struRegion;//ֶĿΧ + DWORD dwSize; //结构长度 + BYTE byEnable; //使能 0-false,1-true + BYTE byMode; //模式 0-关闭,1-手动,2-自动 + WORD wTrackingTime;//时间:[0,60]s + NET_VCA_POLYGON struRegion;//手动目标区域范围 BYTE byRes[64]; }NET_DVR_TRACKING,*LPNET_DVR_TRACKING; typedef struct tagNET_DVR_SLAVECAMERA_CALIB_V50 { DWORD dwSize; - BYTE byCalibMode;//궨ģʽ: 0-,1-Զ궨, 2-ֶ궨 + BYTE byCalibMode;//标定模式: 0-保留,1-自动标定, 2-手动标定 BYTE byRes[3]; - //±0ʾID 1 - //ֶ궨ģʽ֧ã&&ȡԶģʽֻ֧ȡ + //数组下标0表示从摄像机ID 1,依次类推 + //手动标定模式下支持配置(设置&&获取),自动模式下支持获取操作 NET_DVR_CALIB_PARAM struCalibParam[MAX_CALIB_NUM_EX/*20*/]; BYTE byRes1[64]; }NET_DVR_SLAVECAMERA_CALIB_V50, *LPNET_DVR_SLAVECAMERA_CALIB_V50; @@ -15874,19 +15874,19 @@ typedef struct tagNET_DVR_SLAVECAMERA_CALIB_V50 typedef struct tagNET_DVR_SLAVECAMERA_CALIB_V51 { DWORD dwSize; - BYTE byCalibMode;//궨ģʽ: 0-,1-Զ궨, 2-ֶ궨 + BYTE byCalibMode;//标定模式: 0-保留,1-自动标定, 2-手动标定 BYTE byRes[3]; - //±0ʾID 1 - //ֶ궨ģʽ֧ã&&ȡԶģʽֻ֧ȡ + //数组下标0表示从摄像机ID 1,依次类推 + //手动标定模式下支持配置(设置&&获取),自动模式下支持获取操作 NET_DVR_CALIB_PARAM struCalibParam[MAX_CALIB_NUM_EX/*20*/]; BYTE byRes1[512]; }NET_DVR_SLAVECAMERA_CALIB_V51, *LPNET_DVR_SLAVECAMERA_CALIB_V51; -//⹦ץͼṹӥĿ +//特殊功能抓图结果结构(鹰眼项目) typedef struct tagNET_DVR_CAPTURE_PICTURE_RESULT { - DWORD dwSize;//ṹС - DWORD dwReturnPicSize;//صͼƬС + DWORD dwSize;//结构体大小 + DWORD dwReturnPicSize;//返回的图片大小 BYTE byRes[256]; }NET_DVR_CAPTURE_PICTURE_RESULT, *LPNET_DVR_CAPTURE_PICTURE_RESULT; @@ -15894,7 +15894,7 @@ typedef struct tagNET_DVR_GOTOSCENE_COND { DWORD dwSize; DWORD dwChannel; - DWORD dwSceneID;//ID + DWORD dwSceneID;//场景ID号 BYTE byRes[512]; }NET_DVR_GOTOSCENE_COND, *LPNET_DVR_GOTOSCENE_COND; @@ -15902,104 +15902,104 @@ typedef struct tagNET_DVR_TRACK_INITPOSTION { DWORD dwSize; DWORD dwChannel; - BYTE byID;// ID[1,4] + BYTE byID;//主从 从摄像机ID编号[1,4] BYTE byRes[127]; }NET_DVR_TRACK_INITPOSTION, *LPNET_DVR_TRACK_INITPOSTION; typedef struct tagNET_DVR_MANUAL_TRACKRATIO { DWORD dwSize; - BYTE byCoefficient;//ϵ[1,60] + BYTE byCoefficient;//倍率系数[1,60] BYTE byRes[127]; }NET_DVR_MANUAL_TRACKRATIO, *LPNET_DVR_MANUAL_TRACKRATIO; /**********************ipc/d5.3.0********************************/ -//쳣Ϊṹ -//ṹ +//分析仪异常行为检测规则结构 +//警戒规则结构 typedef struct tagNET_IVMS_ONE_RULE_ { - BYTE byActive; /* Ƿ񼤻,0-, 0- */ - BYTE byRes1[7]; //Ϊ0ֶ - BYTE byRuleName[NAME_LEN]; // - VCA_EVENT_TYPE dwEventType; //쳣Ϊ¼ - NET_VCA_EVENT_UNION uEventParam;//쳣Ϊ¼ - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - BYTE byRes2[68]; /*Ϊ0*/ + BYTE byActive; /* 是否激活规则,0-否, 非0-是 */ + BYTE byRes1[7]; //保留,设置为0字段 + BYTE byRuleName[NAME_LEN]; //规则名称 + VCA_EVENT_TYPE dwEventType; //异常行为检测事件类型 + NET_VCA_EVENT_UNION uEventParam;//异常行为检测事件参数 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + BYTE byRes2[68]; /*保留,设置为0*/ }NET_IVMS_ONE_RULE, *LPNET_IVMS_ONE_RULE; -// ǹṹ +// 分析仪规则结构 typedef struct tagNET_IVMS_RULECFG { - NET_IVMS_ONE_RULE struRule[MAX_RULE_NUM]; // + NET_IVMS_ONE_RULE struRule[MAX_RULE_NUM]; //规则数组 }NET_IVMS_RULECFG, *LPNET_IVMS_RULECFG; -// IVMS쳣Ϊýṹ +// IVMS异常行为检测配置结构 typedef struct tagNET_IVMS_BEHAVIORCFG { DWORD dwSize; - BYTE byPicProType; //ʱͼƬʽ 0- 0-ϴ + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 BYTE byRes[3]; - NET_DVR_JPEGPARA struPicParam; //ͼƬṹ - NET_IVMS_RULECFG struRuleCfg[MAX_DAYS][MAX_TIMESEGMENT];//ÿʱζӦ + NET_DVR_JPEGPARA struPicParam; //图片规格结构 + NET_IVMS_RULECFG struRuleCfg[MAX_DAYS][MAX_TIMESEGMENT];//每个时间段对应规则 } NET_IVMS_BEHAVIORCFG, *LPNET_IVMS_BEHAVIORCFG; -//ܷȡƻӽṹ +//智能分析仪取流计划子结构 typedef struct tagNET_IVMS_DEVSCHED { - NET_DVR_SCHEDTIME struTime; //ʱ - NET_DVR_PU_STREAM_CFG struPUStream; //ǰȡ + NET_DVR_SCHEDTIME struTime; //时间参数 + NET_DVR_PU_STREAM_CFG struPUStream; //前端取流参数 }NET_IVMS_DEVSCHED, *LPNET_IVMS_DEVSCHED; -//ܷDzýṹ +//智能分析仪参数配置结构 typedef struct tagNET_IVMS_STREAMCFG { DWORD dwSize; - NET_IVMS_DEVSCHED struDevSched[MAX_DAYS][MAX_TIMESEGMENT];//ʱǰȡԼϢ + NET_IVMS_DEVSCHED struDevSched[MAX_DAYS][MAX_TIMESEGMENT];//按时间段配置前端取流以及规则信息 } NET_IVMS_STREAMCFG, *LPNET_IVMS_STREAMCFG; -// +//屏蔽区域 typedef struct tagNET_VCA_MASK_REGION { - BYTE byEnable; //Ƿ񼤻, 0-񣬷0- - BYTE byRes[3]; //0 - NET_VCA_POLYGON struPolygon; //ζ + BYTE byEnable; //是否激活, 0-否,非0-是 + BYTE byRes[3]; //保留,置0 + NET_VCA_POLYGON struPolygon; //屏蔽多边形 }NET_VCA_MASK_REGION, * LPNET_VCA_MASK_REGION; -//ṹ +//屏蔽区域链表结构 typedef struct tagNET_VCA_MASK_REGION_LIST { - DWORD dwSize; //ṹ - BYTE byRes[4]; //0 - NET_VCA_MASK_REGION struMask[MAX_MASK_REGION_NUM]; // + DWORD dwSize; //结构长度 + BYTE byRes[4]; //保留,置0 + NET_VCA_MASK_REGION struMask[MAX_MASK_REGION_NUM]; //屏蔽区域数组 }NET_VCA_MASK_REGION_LIST, *LPNET_VCA_MASK_REGION_LIST; -//ATM -typedef struct tagNET_VCA_ENTER_REGION//ֹATM +//ATM进入区域参数 +typedef struct tagNET_VCA_ENTER_REGION//防止干扰ATM检测 { DWORD dwSize; - BYTE byEnable; //Ƿ񼤻0-񣬷0- + BYTE byEnable; //是否激活,0-否,非0-是 BYTE byRes1[3]; - NET_VCA_POLYGON struPolygon; // + NET_VCA_POLYGON struPolygon; //进入区域 BYTE byRes2[16]; }NET_VCA_ENTER_REGION, * LPNET_VCA_ENTER_REGION; -//IVMS +//IVMS屏蔽区域链表 typedef struct tagNET_IVMS_MASK_REGION_LIST { - DWORD dwSize; //ṹ + DWORD dwSize; //结构长度 NET_VCA_MASK_REGION_LIST struList[MAX_DAYS][ MAX_TIMESEGMENT]; }NET_IVMS_MASK_REGION_LIST, *LPNET_IVMS_MASK_REGION_LIST; -//IVMSATM +//IVMS的ATM进入区域参数 typedef struct tagNET_IVMS_ENTER_REGION { DWORD dwSize; - NET_VCA_ENTER_REGION struEnter[MAX_DAYS][ MAX_TIMESEGMENT]; // + NET_VCA_ENTER_REGION struEnter[MAX_DAYS][ MAX_TIMESEGMENT]; //进入区域 }NET_IVMS_ENTER_REGION, *LPNET_IVMS_ENTER_REGION; -// ivms ͼƬϴṹ +// ivms 报警图片上传结构 typedef struct tagNET_IVMS_ALARM_JPEG { BYTE byPicProType; @@ -16007,78 +16007,78 @@ typedef struct tagNET_IVMS_ALARM_JPEG NET_DVR_JPEGPARA struPicParam; }NET_IVMS_ALARM_JPEG, *LPNET_IVMS_ALARM_JPEG; -// IVMS +// IVMS 后检索配置 typedef struct tagNET_IVMS_SEARCHCFG { DWORD dwSize; - NET_DVR_MATRIX_DEC_REMOTE_PLAY struRemotePlay;// Զ̻ط - NET_IVMS_ALARM_JPEG struAlarmJpeg; // ϴͼƬ - NET_IVMS_RULECFG struRuleCfg; //IVMS Ϊ + NET_DVR_MATRIX_DEC_REMOTE_PLAY struRemotePlay;// 远程回放 + NET_IVMS_ALARM_JPEG struAlarmJpeg; // 报警上传图片配置 + NET_IVMS_RULECFG struRuleCfg; //IVMS 行为规则配置 }NET_IVMS_SEARCHCFG, *LPNET_IVMS_SEARCHCFG; -//궨ṹ +//标定参数结构体 typedef struct tagNET_DVR_TRACK_CALIBRATION_PARAM_V41 { - BYTE byPointNum; //Ч궨 - BYTE byRes[3]; // - NET_DVR_CB_POINT struCBPoint[MAX_CALIB_PT]; //궨 - NET_DVR_PTZPOS struHorizonPtzPos; //ˮƽPTZ - BYTE byRes2[256]; // + BYTE byPointNum; //有效标定点个数 + BYTE byRes[3]; //保留 + NET_DVR_CB_POINT struCBPoint[MAX_CALIB_PT]; //标定点组 + NET_DVR_PTZPOS struHorizonPtzPos; //球机水平线PTZ坐标 + BYTE byRes2[256]; //保留 }NET_DVR_TRACK_CALIBRATION_PARAM_V41, *LPNET_DVR_TRACK_CALIBRATION_PARAM_V41; -//豸ò +//设备配置参数 typedef struct tagNET_DVR_TRACK_DEV_PARAM_ { - DWORD dwSize; //ṹС - BYTE byEnable; //ô豸, 0-, 1 - - BYTE byTransMode; //ͨѶʽ0-SDK1-485 - BYTE byRes1[2]; // - NET_DVR_CHANNEL struTrackDevChan; //豸 - NET_DVR_TRACK_CALIBRATION_PARAM_V41 struCalParam; //豸궨 - BYTE byRes2[256]; // + DWORD dwSize; //结构体大小 + BYTE byEnable; //启用此设备, 0-不启用, 1 -启用 + BYTE byTransMode; //通讯方式,0-网络SDK,1-485串口 + BYTE byRes1[2]; //保留 + NET_DVR_CHANNEL struTrackDevChan; //联动设备参数 + NET_DVR_TRACK_CALIBRATION_PARAM_V41 struCalParam; //设备标定参数 + BYTE byRes2[256]; //保留 }NET_DVR_TRACK_DEV_PARAM, *LPNET_DVR_TRACK_DEV_PARAM; /************************************end******************************************/ -//NAS֤ +//NAS认证配置 typedef struct tagNET_DVR_IDENTIFICATION_PARAM { - BYTE sUserName[NAME_LEN]; /* û 32*/ - BYTE sPassword[PASSWD_LEN]; /* 16*/ - BYTE byRes1[4]; // + BYTE sUserName[NAME_LEN]; /* 用户名 32*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 16*/ + BYTE byRes1[4]; //保留 }NET_DVR_IDENTIFICATION_PARAM, *LPNET_DVR_IDENTIFICATION_PARAM; typedef union tagNET_DVR_MOUNT_PARAM_UNION { - BYTE uLen[52]; //ṹС - NET_DVR_IDENTIFICATION_PARAM struIdentificationParam;//(SMB/CIFSʱЧ) + BYTE uLen[52]; //联合体结构大小 + NET_DVR_IDENTIFICATION_PARAM struIdentificationParam;//(SMB/CIFS时生效) } NET_DVR_MOUNT_PARAM_UNION, *LPNET_DVR_MOUNT_PARAM_UNION; typedef struct tagNET_DVR_NAS_MOUNT_PARAM { - BYTE byMountType; //0,1~NFS, 2~ SMB/CIFS + BYTE byMountType; //0~保留,1~NFS, 2~ SMB/CIFS BYTE byRes[3]; NET_DVR_MOUNT_PARAM_UNION uMountParam; }NET_DVR_NAS_MOUNT_PARAM, *LPNET_DVR_NAS_MOUNT_PARAM; typedef union tagNET_DVR_MOUNTMETHOD_PARAM_UNION { - BYTE uLen[56]; //ṹС - NET_DVR_NAS_MOUNT_PARAM struNasMountParam;//NASطʽ (byNetDiskTypeΪNFS(NAS)ʱЧ) + BYTE uLen[56]; //联合体结构大小 + NET_DVR_NAS_MOUNT_PARAM struNasMountParam;//NAS挂载方式 (byNetDiskType为NFS(NAS)时生效) }NET_DVR_MOUNTMETHOD_PARAM_UNION, *LPNET_DVR_MOUNTMETHOD_PARAM_UNION; -//Ӳ̽ṹ +//网络硬盘结构配置 typedef struct tagNET_DVR_SINGLE_NET_DISK_INFO { - BYTE byNetDiskType; //Ӳ, 0-NFS(NAS),1-iSCSI - BYTE byRes1[3]; // - NET_DVR_IPADDR struNetDiskAddr; //Ӳ̵ַ + BYTE byNetDiskType; //网络硬盘类型, 0-NFS(NAS),1-iSCSI + BYTE byRes1[3]; //保留 + NET_DVR_IPADDR struNetDiskAddr; //网络硬盘地址 BYTE sDirectory[PATHNAME_LEN]; // PATHNAME_LEN = 128 - WORD wPort; //iscsiж˿ڣΪĬ + WORD wPort; //iscsi有端口,现在为默认 BYTE byRes2[2]; NET_DVR_MOUNTMETHOD_PARAM_UNION uMountMethodParam; - BYTE byRes3[8]; // + BYTE byRes3[8]; //保留 }NET_DVR_SINGLE_NET_DISK_INFO, *LPNET_DVR_SINGLE_NET_DISK_INFO; -#define MAX_NET_DISK 16//Ӳ̸ +#define MAX_NET_DISK 16//最大网络硬盘个数 typedef struct tagNET_DVR_NET_DISKCFG { @@ -16088,11 +16088,11 @@ typedef struct tagNET_DVR_NET_DISKCFG typedef struct tagNET_DVR_SINGLE_NET_DISK_INFO_V40 { - BYTE byNetDiskType; //Ӳ, 0-NFS(NAS),1-iSCSI - BYTE byRes1[3]; // + BYTE byNetDiskType; //网络硬盘类型, 0-NFS(NAS),1-iSCSI + BYTE byRes1[3]; //保留 BYTE sDirectory[PATHNAME_LEN]; // PATHNAME_LEN = 128 - BYTE byDevAddr[MAX_DOMAIN_NAME]; /* 64*/ - WORD wPort; //iscsiж˿ڣΪĬ + BYTE byDevAddr[MAX_DOMAIN_NAME]; /*域名 64*/ + WORD wPort; //iscsi有端口,现在为默认 BYTE byRes2[2]; NET_DVR_MOUNTMETHOD_PARAM_UNION uMountMethodParam; BYTE byRes4[80]; @@ -16103,158 +16103,158 @@ typedef struct tagNET_DVR_NET_DISKCFG_V40 DWORD dwSize; NET_DVR_SINGLE_NET_DISK_INFO_V40 struNetDiskParam[MAX_NET_DISK]; }NET_DVR_NET_DISKCFG_V40, *LPNET_DVR_NET_DISKCFG_V40; -//¼ -// +//事件类型 +//主类型 typedef enum _MAIN_EVENT_TYPE_ { - EVENT_MOT_DET = 0, //ƶ - EVENT_ALARM_IN = 1, // - EVENT_VCA_BEHAVIOR = 2, // 쳣Ϊ - EVENT_INQUEST = 3, //Ѷ¼ - EVENT_VCA_DETECTION = 4, // + EVENT_MOT_DET = 0, //移动侦测 + EVENT_ALARM_IN = 1, //报警输入 + EVENT_VCA_BEHAVIOR = 2, // 异常行为检测 + EVENT_INQUEST = 3, //审讯事件 + EVENT_VCA_DETECTION = 4, //智能侦测 EVENT_POS = 5, - EVENT_TRIAL_CASE = 6,//ͥ󰸼Ϣ - EVENT_ACS_CASE = 7, //޼ - EVENT_IOT_CASE = 8, //Ƶ¼¼ΪƵ豸Ƶ豸¼Ƶ豸¼ - EVENT_STREAM_INFO = 100 //IDϢ + EVENT_TRIAL_CASE = 6,//庭审案件信息 + EVENT_ACS_CASE = 7, //门禁事件 + EVENT_IOT_CASE = 8, //非视频联动事件—本类事件均为非视频设备联动视频设备产生的事件,不包含非视频设备本身的事件 + EVENT_STREAM_INFO = 100 //流ID信息 }MAIN_EVENT_TYPE; -#define INQUEST_START_INFO 0x1001 /*ѶʿʼϢ*/ -#define INQUEST_STOP_INFO 0x1002 /*ѶֹͣϢ*/ -#define INQUEST_TAG_INFO 0x1003 /*صϢ*/ -#define INQUEST_SEGMENT_INFO 0x1004 /*ѶƬ״̬Ϣ*/ -#define INQUEST_CASE_INFO 0x1005 // Ϣ +#define INQUEST_START_INFO 0x1001 /*讯问开始信息*/ +#define INQUEST_STOP_INFO 0x1002 /*讯问停止信息*/ +#define INQUEST_TAG_INFO 0x1003 /*重点标记信息*/ +#define INQUEST_SEGMENT_INFO 0x1004 /*审讯片断状态信息*/ +#define INQUEST_CASE_INFO 0x1005 // 案件信息类型 typedef enum _VCA_DETECTION_MINOR_TYPE_ { - EVENT_VCA_TRAVERSE_PLANE = 1, //Խ - EVENT_FIELD_DETECTION, // - EVENT_AUDIO_INPUT_ALARM, //Ƶ쳣 - EVENT_SOUND_INTENSITY_ALARM, //ǿͻ - EVENT_FACE_DETECTION, // - EVENT_VIRTUAL_FOCUS_ALARM, //齹 - EVENT_SCENE_CHANGE_ALARM, // - EVENT_PIR_ALARM, //PIR - EVENT_ENTER_REGION, // - EVENT_EXIT_REGION, //Ŀ뿪 - EVENT_LOITERING, //ǻ - EVENT_GROUPDETECTION, //Աۼ,֧ - EVENT_RAPIDMOVE, //ƶ - EVENT_PARK, //ͣ - EVENT_UNATTENDED_BAGGAGE, //Ʒ - EVENT_ATTENDEDBAGGAGE, //Ʒȡ - EVENT_VEHICLE_DETECTION, // - EVENT_ALL = 0xffffffff //ʾȫ + EVENT_VCA_TRAVERSE_PLANE = 1, //越警侦测 + EVENT_FIELD_DETECTION, //区域入侵侦测 + EVENT_AUDIO_INPUT_ALARM, //音频输入异常 + EVENT_SOUND_INTENSITY_ALARM, //声强突变侦测 + EVENT_FACE_DETECTION, //人脸侦测 + EVENT_VIRTUAL_FOCUS_ALARM, //虚焦侦测 + EVENT_SCENE_CHANGE_ALARM, //场景变更侦测 + EVENT_PIR_ALARM, //PIR报警 + EVENT_ENTER_REGION, //进入区域 + EVENT_EXIT_REGION, //目标离开区域 + EVENT_LOITERING, //徘徊 + EVENT_GROUPDETECTION, //区域内人员聚集,支持区域规则 + EVENT_RAPIDMOVE, //快速移动 + EVENT_PARK, //停车 + EVENT_UNATTENDED_BAGGAGE, //物品遗留 + EVENT_ATTENDEDBAGGAGE, //物品拿取 + EVENT_VEHICLE_DETECTION, //车辆检测 + EVENT_ALL = 0xffffffff //表示全部 }VCA_DETECTION_MINOR_TYPE; -//쳣ΪͶӦĴͣ 0xffffʾȫ +//异常行为检测主类型对应的次类型, 0xffff表示全部 typedef enum _BEHAVIOR_MINOR_TYPE_ { - EVENT_TRAVERSE_PLANE = 0, // Խ - EVENT_ENTER_AREA, //Ŀ,֧ - EVENT_EXIT_AREA, //Ŀ뿪,֧ - EVENT_INTRUSION, // ܽ,֧ - EVENT_LOITER, //ǻ,֧ - EVENT_LEFT_TAKE, //Ʒȡ,֧ - EVENT_PARKING, //ͣ,֧ - EVENT_RUN, //ƶ,֧ - EVENT_HIGH_DENSITY, //Աۼ,֧ - EVENT_STICK_UP, //ֽ,֧ - EVENT_INSTALL_SCANNER, //װ,֧ - EVENT_OPERATE_OVER_TIME, // ʱ - EVENT_FACE_DETECT, // 쳣 - EVENT_LEFT, // Ʒ - EVENT_TAKE, // Ʒȡ - EVENT_LEAVE_POSITION, //¼ - EVENT_TRAIL_INFO = 16, //β - EVENT_HUMAN_ENTER = 18, //Ա - EVENT_FALL_DOWN_INFO = 19, // - EVENT_OBJECT_PASTE =20, // ճ - EVENT_FACE_CAPTURE_INFO = 21, // - EVENT_MULTI_FACES_INFO = 22, // - EVENT_AUDIO_ABNORMAL_INFO = 23, //ǿͻ - EVENT_SUNGLASSES_FACE_INFO = 25, //ī - EVENT_CALLING_FACE_INFO = 26, //绰 - EVENT_VIOLENT_MOTION = 27, //˶ - EVENT_SAFETY_HELMET = 28, //ȫñ - EVENT_PEOPLE_NUM_CHANGE = 29, //仯 - EVENT_GET_UP = 30, // - EVENT_ADV_REACH_HEIGHT = 31, //ʸ - EVENT_STOOD_UP = 32, // - EVENT_PERSON_DENSITY = 33, //ԱܶȣԤ - EVENT_MANUAL_ALARM = 34, //ֶ - EVENT_VIOLATION_HIGH_SPEED = 35, // - EVENT_GSENSOR = 36, // G-Sensor¼١١ת䡢ת䡢ײ - EVENT_SENSOR_IN = 37, // Sensor-InΪɲתת - EVENT_VCA_DBD = 38, //˾ʻΪ - EVENT_VCA_ABS = 39, //߼ʻ - EVENT_TOILET_TARRY = 40 //Ŀʱ + EVENT_TRAVERSE_PLANE = 0, // 穿越警戒面 + EVENT_ENTER_AREA, //目标进入区域,支持区域规则 + EVENT_EXIT_AREA, //目标离开区域,支持区域规则 + EVENT_INTRUSION, // 周界入侵,支持区域规则 + EVENT_LOITER, //徘徊,支持区域规则 + EVENT_LEFT_TAKE, //物品遗留拿取,支持区域规则 + EVENT_PARKING, //停车,支持区域规则 + EVENT_RUN, //快速移动,支持区域规则 + EVENT_HIGH_DENSITY, //区域内人员聚集,支持区域规则 + EVENT_STICK_UP, //贴纸条,支持区域规则 + EVENT_INSTALL_SCANNER, //安装读卡器,支持区域规则 + EVENT_OPERATE_OVER_TIME, // 操作超时 + EVENT_FACE_DETECT, // 异常人脸 + EVENT_LEFT, // 物品遗留 + EVENT_TAKE, // 物品拿取 + EVENT_LEAVE_POSITION, //离岗事件 + EVENT_TRAIL_INFO = 16, //尾随 + EVENT_HUMAN_ENTER = 18, //人员进入 + EVENT_FALL_DOWN_INFO = 19, //倒地 + EVENT_OBJECT_PASTE =20, // 异物粘贴区域 + EVENT_FACE_CAPTURE_INFO = 21, //正常人脸 + EVENT_MULTI_FACES_INFO = 22, //多张人脸 + EVENT_AUDIO_ABNORMAL_INFO = 23, //声强突变 + EVENT_SUNGLASSES_FACE_INFO = 25, //戴墨镜人脸 + EVENT_CALLING_FACE_INFO = 26, //打电话人脸 + EVENT_VIOLENT_MOTION = 27, //剧烈运动 + EVENT_SAFETY_HELMET = 28, //安全帽检测 + EVENT_PEOPLE_NUM_CHANGE = 29, //人数变化 + EVENT_GET_UP = 30, //起身 + EVENT_ADV_REACH_HEIGHT = 31, //折线攀高 + EVENT_STOOD_UP = 32, //起立 + EVENT_PERSON_DENSITY = 33, //人员密度(人数预警) + EVENT_MANUAL_ALARM = 34, //手动报警 + EVENT_VIOLATION_HIGH_SPEED = 35, //超速 + EVENT_GSENSOR = 36, // G-Sensor事件(急加速、急减速、急左转弯、急右转弯、车辆翻车、车辆碰撞) + EVENT_SENSOR_IN = 37, // Sensor-In行为(刹车、左转、右转、倒车) + EVENT_VCA_DBD = 38, //司机驾驶行为 + EVENT_VCA_ABS = 39, //高级辅助驾驶 + EVENT_TOILET_TARRY = 40 //目标区域滞留超时 }BEHAVIOR_MINOR_TYPE; -//6ӦĴ +//主类型6对应的次类型 typedef enum _TRIAL_CASE_MINOR_TYPE_ { - TRIAL_START_INFO = 0x1001, // ͥʼ¼ - TRIAL_STOP_INFO = 0x1002, //ͥ¼ - TRIAL_TAG_INFO = 0x1003, //ͥصע¼ - TRIAL_SEGMENT_INFO = 0x1004, // ͥƬ״̬Ϣ - TRIAL_JUDGE_CASE_INFO=0x1005 //ͥ󰸼Ϣ + TRIAL_START_INFO = 0x1001, // 庭审开始事件 + TRIAL_STOP_INFO = 0x1002, //庭审结束事件 + TRIAL_TAG_INFO = 0x1003, //庭审重点标注事件 + TRIAL_SEGMENT_INFO = 0x1004, // 庭审片段状态信息 + TRIAL_JUDGE_CASE_INFO=0x1005 //庭审案件信息 }TRIAL_CASE_MINOR_TYPE; -// 100ӦС +// 主类型100,对应的小类型 typedef enum _STREAM_INFO_MINOR_TYPE_ { - EVENT_STREAM_ID = 0, // ID - EVENT_TIMING = 1, // ʱ¼ - EVENT_MOTION_DETECT = 2, // ƶ - EVENT_ALARM = 3, // ¼ - EVENT_ALARM_OR_MOTION_DETECT = 4, // ƶ - EVENT_ALARM_AND_MOTION_DETECT = 5, // ƶ - EVENT_COMMAND_TRIGGER = 6, //  - EVENT_MANNUAL = 7, // ֶ¼ - EVENT_BACKUP_VOLUME = 8, // 浵¼ - STREAM_EVENT_SEMAPHORE, //ź - STREAM_EVENT_HIDE, //ڵ - STREAM_EVENT_INVERSE, // - STREAM_EVENT_VIDEO_LOST, //Ƶʧ - STREAM_EVENT_WIRELESS_ALARM, //߱ - STREAM_EVENT_PIR_ALARM, //PIR - STREAM_EVENT_CALLHELP_ALARM, //ȱ + EVENT_STREAM_ID = 0, // 流ID + EVENT_TIMING = 1, // 定时录像 + EVENT_MOTION_DETECT = 2, // 移动侦测 + EVENT_ALARM = 3, // 报警录像 + EVENT_ALARM_OR_MOTION_DETECT = 4, // 报警或移动侦测 + EVENT_ALARM_AND_MOTION_DETECT = 5, // 报警和移动侦测 + EVENT_COMMAND_TRIGGER = 6, // 命令触发 + EVENT_MANNUAL = 7, // 手动录像 + EVENT_BACKUP_VOLUME = 8, // 存档卷录像 + STREAM_EVENT_SEMAPHORE, //信号量 + STREAM_EVENT_HIDE, //遮挡 + STREAM_EVENT_INVERSE, //逆行 + STREAM_EVENT_VIDEO_LOST, //视频丢失 + STREAM_EVENT_WIRELESS_ALARM, //无线报警 + STREAM_EVENT_PIR_ALARM, //PIR报警 + STREAM_EVENT_CALLHELP_ALARM, //呼救报警 - STREAM_EVENT_FACESNAP, //Ŀץ - STREAM_EVENT_FACE_DETECTION, // - STREAM_EVENT_ITS_PLATE, // - STREAM_EVENT_PDC, //ͳ - STREAM_EVENT_SCENECHANGE_DETECTION, // - STREAM_EVENT_DEFOCUS_DETECTION, //齹 - STREAM_EVENT_AUDIOEXCEPTION, //Ƶ쳣 + STREAM_EVENT_FACESNAP, //目标抓拍 + STREAM_EVENT_FACE_DETECTION, //人脸侦测 + STREAM_EVENT_ITS_PLATE, //车辆检测 + STREAM_EVENT_PDC, //客流量统计 + STREAM_EVENT_SCENECHANGE_DETECTION, //场景变更 + STREAM_EVENT_DEFOCUS_DETECTION, //虚焦侦测 + STREAM_EVENT_AUDIOEXCEPTION, //音频异常 - //Ϊ쳣Ϊ⣨COMM_ALARM_RULEͣVCA_EVENT_TYPE - VCA_EVENT_TRAVERSE_PLANE, //Խ - VCA_EVENT_INTRUSION, //ܽ - VCA_EVENT_ENTER_AREA, // - VCA_EVENT_EXIT_AREA, //뿪 - VCA_EVENT_LOITER, //ǻ - VCA_EVENT_HIGH_DENSITY, //Աۼ - VCA_EVENT_RUN, //ƶ - VCA_EVENT_PARKING, //Ƿͣ - VCA_EVENT_LEFT, //Ʒ - VCA_EVENT_TAKE, //Ʒȡ + //以下为异常行为检测(COMM_ALARM_RULE)的子类型,具体见VCA_EVENT_TYPE + VCA_EVENT_TRAVERSE_PLANE, //穿越警戒面 + VCA_EVENT_INTRUSION, //周界入侵 + VCA_EVENT_ENTER_AREA, //进入区域 + VCA_EVENT_EXIT_AREA, //离开区域 + VCA_EVENT_LOITER, //徘徊侦测 + VCA_EVENT_HIGH_DENSITY, //人员聚集 + VCA_EVENT_RUN, //快速移动 + VCA_EVENT_PARKING, //非法停车 + VCA_EVENT_LEFT, //物品遗留 + VCA_EVENT_TAKE, //物品拿取 }STREAM_INFO_MINOR_TYPE; // typedef enum tagITS_MINOR_TYPE // { -// ITS_EVENT_CONGESTION = 0, // ӵ -// ITS_EVENT_PARKING, // ͣ -// ITS_EVENT_INVERSE, // -// ITS_EVENT_PEDESTRIAN, // -// ITS_EVENT_DEBRIS // Ƭ +// ITS_EVENT_CONGESTION = 0, // 拥堵 +// ITS_EVENT_PARKING, // 停车 +// ITS_EVENT_INVERSE, // 逆行 +// ITS_EVENT_PEDESTRIAN, // 行人 +// ITS_EVENT_DEBRIS // 遗留物,抛洒物碎片 // }ITS_MINOR_TYPE; -#define SEARCH_EVENT_INFO_LEN 300 //¼Ϣ +#define SEARCH_EVENT_INFO_LEN 300 //事件信息长度 #define CASE_NO_LEN 64 #define CASE_NAME_LEN 128 #define LITIGANT_LEN 32 @@ -16268,272 +16268,272 @@ typedef enum _STREAM_INFO_MINOR_TYPE_ #define LITIGANT_RET_LEN 24 #define CHIEF_JUDGE_RET_LEN 24 #define NET_SDK_CASETYPE_LEN 32 -//¼ +//事件搜索条件 typedef struct tagNET_DVR_SEARCH_EVENT_PARAM { - WORD wMajorType; //0-ƶ⣬1-, 2-¼ - WORD wMinorType; //- ͱ仯0xffffʾȫ - NET_DVR_TIME struStartTime; //Ŀʼʱ䣬ֹͣʱ: ͬʱΪ(0, 0) ʾʱ俪ʼǰ4000¼ + WORD wMajorType; //0-移动侦测,1-报警输入, 2-智能事件 + WORD wMinorType; //搜索次类型- 根据主类型变化,0xffff表示全部 + NET_DVR_TIME struStartTime; //搜索的开始时间,停止时间: 同时为(0, 0) 表示从最早的时间开始,到最后,最前面的4000个事件 NET_DVR_TIME struEndTime; // - BYTE byLockType; // 0xff-ȫ0-δ1- - BYTE byValue; //0-λʾ1-ֵʾ - BYTE byRes[130]; // + BYTE byLockType; // 0xff-全部,0-未锁,1-锁定 + BYTE byValue; //0-按位表示,1-按值表示 + BYTE byRes[130]; // 保留 union { BYTE byLen[SEARCH_EVENT_INFO_LEN]; - struct// + struct//报警输入 { - BYTE byAlarmInNo[MAX_ALARMIN_V30]; //ţbyAlarmInNo[0]1ʾɱ1¼ + BYTE byAlarmInNo[MAX_ALARMIN_V30]; //报警输入号,byAlarmInNo[0]若置1则表示查找由报警输入1触发的事件 BYTE byRes[SEARCH_EVENT_INFO_LEN - MAX_ALARMIN_V30]; }struAlarmParam; - struct//--ֵ + struct//报警输入--按值 { - WORD wAlarmInNo[128]; /*ţֵʾ,ý*/ - BYTE byRes[44]; // + WORD wAlarmInNo[128]; /*报警输入号,按值表示,采用紧凑型排列*/ + BYTE byRes[44]; //保留 }struAlarmParamByValue; - struct//ƶ + struct//移动侦测 { - BYTE byMotDetChanNo[MAX_CHANNUM_V30];//ƶͨbyMotDetChanNo[0]1ʾͨ1ƶⴥ¼ + BYTE byMotDetChanNo[MAX_CHANNUM_V30];//移动侦测通道,byMotDetChanNo[0]若置1则表示查找由通道1发生移动侦测触发的事件 BYTE byRes[SEARCH_EVENT_INFO_LEN - MAX_CHANNUM_V30]; }struMotionParam; - struct//ƶ--ֵ + struct//移动侦测--按值 { - WORD wMotDetChanNo[64]; /* ƶֵͨʾ ,ý*/ - BYTE byRes[172]; /**/ + WORD wMotDetChanNo[64]; /* 移动侦测通道,按值表示 ,采用紧凑型排列*/ + BYTE byRes[172]; /*保留*/ }struMotionParamByValue; - struct//쳣Ϊ + struct//异常行为检测 { - BYTE byChanNo[MAX_CHANNUM_V30]; //¼ͨ - BYTE byRuleID; //ID0xffʾȫ - BYTE byRes1[43]; // + BYTE byChanNo[MAX_CHANNUM_V30]; //触发事件的通道 + BYTE byRuleID; //规则ID,0xff表示全部 + BYTE byRes1[43]; //保留 }struVcaParam; - struct //쳣Ϊ--ֵʽ + struct //异常行为检测--按值方式查找 { - WORD wChanNo[64]; //쳣ΪӦֵͨʾ,ý - BYTE byRuleID; //쳣Ϊͣ0xffʾȫ0ʼ - BYTE byRes[171]; /**/ + WORD wChanNo[64]; //异常行为检测对应的通道,按值表示,采用紧凑型排列 + BYTE byRuleID; //异常行为检测类型,规则0xff表示全部,从0开始 + BYTE byRes[171]; /*保留*/ }struVcaParamByValue; - struct//Ѷ¼ + struct//审讯事件搜索条件 { - BYTE byRoomIndex; //Ѷұ,ֵʾ1ʼ + BYTE byRoomIndex; //审讯室编号,按值表示,从1开始 BYTE byRes1[3]; BYTE sInquestInfo[INQUEST_CASE_LEN]; - BYTE byRes2[232]; // + BYTE byRes2[232]; //保留 } struInquestParam; - struct // + struct //智能侦测查找条件 { - BYTE byChan [256];//ͨţ±ʾbyChan[0]1ʾͨ1ƶⴥ¼ + BYTE byChan [256];//触发智能侦测的通道号,按数组下标表示,byChan[0]若置1则表示查找由通道1发生移动侦测触发的事件 }struVCADetectByBit; - struct// ͨŰֵʾ + struct//智能侦测查找条件 ,通道号按值表示 { - DWORD dwChanNo[MAX_CHANNUM_V30-1];// ͨ,ֵʾ0xffffffffЧҺҲʾЧֵ - BYTE byAll;//0-ʾȫ1-ʾȫ + DWORD dwChanNo[MAX_CHANNUM_V30-1];// 触发通道号,按值表示,0xffffffff无效,且后续数据也表示无效值 + BYTE byAll;//0-表示不是全部,1-表示全部。 BYTE byres[3]; }struVCADetectByValue; struct { - NET_DVR_STREAM_INFO struIDInfo; // idϢ72ֽڳ - DWORD dwCmdType; // ⲿͣNVRƴ洢ʹ - BYTE byBackupVolumeNum; //浵ţCVRʹ + NET_DVR_STREAM_INFO struIDInfo; // 流id信息,72字节长 + DWORD dwCmdType; // 外部触发类型,NVR接入云存储使用 + BYTE byBackupVolumeNum; //存档卷号,CVR使用 BYTE byRes[223]; }struStreamIDParam; struct { - BYTE byCaseNo[SEARCH_CASE_NO_LEN]; // - BYTE byCaseName[SEARCH_CASE_NAME_LEN]; //ƣ - BYTE byLitigant1[SEARCH_LITIGANT_LEN]; //1 - BYTE byLitigant2[SEARCH_LITIGANT_LEN]; //2 - BYTE byChiefJudge[SEARCH_CHIEF_JUDGE_LEN];//г - BYTE byCaseType; //ͣ0-ȫ1-°2-° + BYTE byCaseNo[SEARCH_CASE_NO_LEN]; //案件编号 + BYTE byCaseName[SEARCH_CASE_NAME_LEN]; //案件名称; + BYTE byLitigant1[SEARCH_LITIGANT_LEN]; //当事人1; + BYTE byLitigant2[SEARCH_LITIGANT_LEN]; //当事人2; + BYTE byChiefJudge[SEARCH_CHIEF_JUDGE_LEN];//审判长 + BYTE byCaseType; //案件类型;0-全部、1-刑事案件、2-民事案件 BYTE byRes[47]; }struTrialParam; }uSeniorParam; }NET_DVR_SEARCH_EVENT_PARAM, *LPNET_DVR_SEARCH_EVENT_PARAM; -#define MAX_POS_KEYWORDS_NUM 3 //ֹ֧ؼֲ -#define MAX_POS_KEYWORD_LEN 128 //ÿؼֳ +#define MAX_POS_KEYWORDS_NUM 3 //支持关键字查找条数 +#define MAX_POS_KEYWORD_LEN 128 //每条关键字长度 #define SEARCH_EVENT_INFO_LEN_V40 800 -//¼ +//事件搜索条件 typedef struct tagNET_DVR_SEARCH_EVENT_PARAM_V40 { - WORD wMajorType; //0-ƶ⣬1-, 2-¼ 5-pos¼ 7-޼ - WORD wMinorType; //- ͱ仯0xffffʾȫ - NET_DVR_TIME struStartTime; //Ŀʼʱ䣬ֹͣʱ: ͬʱΪ(0, 0) ʾʱ俪ʼǰ4000¼ + WORD wMajorType; //0-移动侦测,1-报警输入, 2-智能事件 5-pos录像 7-门禁事件 + WORD wMinorType; //搜索次类型- 根据主类型变化,0xffff表示全部 + NET_DVR_TIME struStartTime; //搜索的开始时间,停止时间: 同时为(0, 0) 表示从最早的时间开始,到最后,最前面的4000个事件 NET_DVR_TIME struEndTime; // - BYTE byLockType; // 0xff-ȫ0-δ1- - BYTE byQuickSearch; // Ƿÿٲѯ0-ã1-ãٲѯ᷵ļС豸ݿвѯƵӲ̣ - BYTE byRes[130]; // + BYTE byLockType; // 0xff-全部,0-未锁,1-锁定 + BYTE byQuickSearch; // 是否启用快速查询,0-不启用,1-启用(快速查询不会返回文件大小,仅对设备数据库进行查询,避免频繁唤醒硬盘) + BYTE byRes[130]; // 保留 union { BYTE byLen[SEARCH_EVENT_INFO_LEN_V40/*800*/]; - struct// + struct//报警输入 { - /*ţֵʾ,ýУ0xffffʾЧ*/ + /*报警输入号,按值表示,采用紧凑型排列,0xffff表示后续无效*/ WORD wAlarmInNo[128]; - BYTE byRes[544]; // + BYTE byRes[544]; //保留 }struAlarmParam; - struct//ƶ + struct//移动侦测 { - /* ƶֵͨʾ ,ýУ0xffffʾЧ*/ + /* 移动侦测通道,按值表示 ,采用紧凑型排列,0xffff表示后续无效*/ WORD wMotDetChanNo[MAX_CHANNUM_V30]; - BYTE byRes[672]; /**/ + BYTE byRes[672]; /*保留*/ }struMotionParam; - struct //쳣Ϊ + struct //异常行为检测 { - //쳣ΪӦֵͨʾ,ýУ0xffffʾЧ + //异常行为检测对应的通道,按值表示,采用紧凑型排列,0xffff表示后续无效 WORD wChanNo[MAX_CHANNUM_V30]; - BYTE byRuleID; //쳣Ϊͣ0xffʾȫ0ʼ - BYTE byDriverBehaviortType; //˾ʻΪͣ0-1-̡2-Ӵ绰3-ƣͼʻ4-ѡ5-ʻԱ쳣6-δϵȫ7-ī - BYTE byADASType; //߼ʻͣ0-1-ǰײ2-ƫ롢3-ä⡢4-⡢5-˷ײ6-١7-١8-ת䡢9-ת䡢10-11-δ - BYTE byGSensorType; // G-Sensor¼0-1-١2-١3-ת䡢4-ת䡢5-6-ײ - BYTE bySensorInType; // Sensor-InΪ0-1-ɲ2-ת3-ת4- - BYTE byRes[667]; /**/ + BYTE byRuleID; //异常行为检测类型,规则0xff表示全部,从0开始 + BYTE byDriverBehaviortType; //司机驾驶行为类型:0-保留、1-抽烟、2-接打电话、3-疲劳驾驶、4-分神提醒、5-驾驶员异常、6-未系安全带、7-红外阻断墨镜 + BYTE byADASType; //高级辅助驾驶类型:0-保留、1-前向碰撞、2-车道偏离、3-盲区检测、4-车距检测、5-行人防撞、6-急加速、7-急减速、8-急左转弯、9-急右转弯、10-车辆翻车、11-未礼让行人 + BYTE byGSensorType; // G-Sensor事件:0-保留、1-急加速、2-急减速、3-急左转弯、4-急右转弯、5-车辆翻车、6-车辆碰撞 + BYTE bySensorInType; // Sensor-In行为:0-保留、1-刹车、2-左转、3-右转、4-倒车 + BYTE byRes[667]; /*保留*/ }struVcaParam; - struct//Ѷ¼ + struct//审讯事件搜索条件 { - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byRes[799]; // + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byRes[799]; //保留 } struInquestParam; - struct// ͨŰֵʾ + struct//智能侦测查找条件 ,通道号按值表示 { - BYTE byAll; //ȫͨ0-񣬴ʱdwChanNoЧ - //1-ȫͨʱdwChanNoЧ + BYTE byAll; //查找全部通道,0-否,此时dwChanNo参数有效, + //1-查找全部通道,此时dwChanNo参数无效。 BYTE byRes1[3]; - WORD wChanNo[MAX_CHANNUM_V30];// ͨ,ֵʾ0xffffЧҺҲʾЧֵ + WORD wChanNo[MAX_CHANNUM_V30];// 触发通道号,按值表示,0xffff无效,且后续数据也表示无效值 BYTE byRes[668]; }struVCADetect; struct { - NET_DVR_STREAM_INFO struIDInfo; // idϢ72ֽڳ - DWORD dwCmdType; // ⲿͣNVRƴ洢ʹ - BYTE byBackupVolumeNum; //浵ţCVRʹ + NET_DVR_STREAM_INFO struIDInfo; // 流id信息,72字节长 + DWORD dwCmdType; // 外部触发类型,NVR接入云存储使用 + BYTE byBackupVolumeNum; //存档卷号,CVR使用 BYTE byRes1[3]; - BYTE byArchiveLabel[64]; //浵ǩCVRʹ + BYTE byArchiveLabel[64]; //存档标签,CVR使用 BYTE byRes[656]; }struStreamIDParam; - struct //pos¼ + struct //pos录像 { - WORD wChannel[MAX_CHANNUM_V30]; //ֵͨʾ,У0xffffʱʾֵЧ - BYTE byAllChan; //Ƿȫͨ0-񣬴ʱwChannelЧ1-ȫͨʱwChannelЧ - BYTE byCaseSensitive; //0-ִСд 1-ִСд - BYTE byCombinateMode; //ؼϷʽ0-1- - BYTE byRes1; // + WORD wChannel[MAX_CHANNUM_V30]; //通道,按值表示,紧凑型排列,遇到0xffff时表示数组后续值无效 + BYTE byAllChan; //是否查找全部通道,0-否,此时wChannel有效,1-全部通道,此时wChannel无效 + BYTE byCaseSensitive; //0-不区分大小写, 1-区分大小写 + BYTE byCombinateMode; //关键字组合方式,0-或,1-与 + BYTE byRes1; //保留 char sKeyWord[MAX_POS_KEYWORDS_NUM][MAX_POS_KEYWORD_LEN]; - //ؼֲʱ - BYTE byRes[284]; // + //关键字查找时的条件 + BYTE byRes[284]; //保留 }struPosAlarm; struct { - BYTE byCaseNo[SEARCH_CASE_NO_LEN]; // - BYTE byCaseName[SEARCH_CASE_NAME_LEN]; // - BYTE byLitigant1[SEARCH_LITIGANT_LEN]; //1 - BYTE byLitigant2[SEARCH_LITIGANT_LEN]; //2 - BYTE byChiefJudge[SEARCH_CHIEF_JUDGE_LEN]; //г + BYTE byCaseNo[SEARCH_CASE_NO_LEN]; //案件编号 + BYTE byCaseName[SEARCH_CASE_NAME_LEN]; //案件名称 + BYTE byLitigant1[SEARCH_LITIGANT_LEN]; //当事人1 + BYTE byLitigant2[SEARCH_LITIGANT_LEN]; //当事人2 + BYTE byChiefJudge[SEARCH_CHIEF_JUDGE_LEN]; //审判长 BYTE byCaseType; BYTE byRes[47]; }struTrialParam; - struct //޼ + struct //门禁事件搜索条件 { - DWORD dwMajor; //ͣ¼ϴһ£0ȫ - DWORD dwMinor; //ͣ¼ϴһ£0ȫ - BYTE byCardNo[ACS_CARD_NO_LEN]; // - BYTE byName[NAME_LEN/*32*/]; // - BYTE byMACAddr[MACADDR_LEN]; //MACַ + DWORD dwMajor; //报警主类型(与事件上传主类型一致,0代表全部) + DWORD dwMinor; //报警次类型(与事件上传主类型一致,0代表全部) + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE byMACAddr[MACADDR_LEN]; //物理MAC地址 BYTE byRes[722]; }struACSAlarm; }uSeniorParam; }NET_DVR_SEARCH_EVENT_PARAM_V40, *LPNET_DVR_SEARCH_EVENT_PARAM_V40; -//¼ +//事件搜索条件 typedef struct tagNET_DVR_SEARCH_EVENT_PARAM_V50 { - WORD wMajorType; //0-ƶ⣬1-, 2-¼ 5-pos¼ 7-޼, 8-Ƶ¼ - WORD wMinorType; //- ͱ仯0xffffʾȫ - NET_DVR_TIME_SEARCH_COND struStartTime; //Ŀʼʱ䣬ֹͣʱ: ͬʱΪ(0, 0) ʾʱ俪ʼǰ4000¼ - NET_DVR_TIME_SEARCH_COND struEndTime; //Ľʱ - BYTE byLockType; // 0xff-ȫ0-δ1- - BYTE byQuickSearch; // Ƿÿٲѯ0-ã1-ãٲѯ᷵ļС豸ݿвѯƵӲ̣ - BYTE byRes[254]; // + WORD wMajorType; //0-移动侦测,1-报警输入, 2-智能事件 5-pos录像 7-门禁事件, 8-非视频联动事件 + WORD wMinorType; //搜索次类型- 根据主类型变化,0xffff表示全部 + NET_DVR_TIME_SEARCH_COND struStartTime; //搜索的开始时间,停止时间: 同时为(0, 0) 表示从最早的时间开始,到最后,最前面的4000个事件 + NET_DVR_TIME_SEARCH_COND struEndTime; //搜索的结束时间 + BYTE byLockType; // 0xff-全部,0-未锁,1-锁定 + BYTE byQuickSearch; // 是否启用快速查询,0-不启用,1-启用(快速查询不会返回文件大小,仅对设备数据库进行查询,避免频繁唤醒硬盘) + BYTE byRes[254]; // 保留 union { BYTE byLen[SEARCH_EVENT_INFO_LEN_V40/*800*/]; - struct// + struct//报警输入 { - /*ţֵʾ,ýУ0xffffʾЧ*/ + /*报警输入号,按值表示,采用紧凑型排列,0xffff表示后续无效*/ WORD wAlarmInNo[128]; - BYTE byRes[544]; // + BYTE byRes[544]; //保留 }struAlarmParam; - struct//ƶ + struct//移动侦测 { - /* ƶֵͨʾ ,ýУ0xffffʾЧ*/ + /* 移动侦测通道,按值表示 ,采用紧凑型排列,0xffff表示后续无效*/ WORD wMotDetChanNo[MAX_CHANNUM_V30]; - BYTE byRes[672]; /**/ + BYTE byRes[672]; /*保留*/ }struMotionParam; - struct //쳣Ϊ + struct //异常行为检测 { - //쳣ΪӦֵͨʾ,ýУ0xffffʾЧ + //异常行为检测对应的通道,按值表示,采用紧凑型排列,0xffff表示后续无效 WORD wChanNo[MAX_CHANNUM_V30]; - BYTE byRuleID; //쳣Ϊͣ0xffʾȫ0ʼ - BYTE byDriverBehaviortType; //˾ʻΪͣ0-1-̡2-Ӵ绰3-ƣͼʻ4-ѡ5-ʻԱ쳣6-δϵȫ7-ī - BYTE byADASType; //߼ʻͣ0-1-ǰײ2-ƫ롢3-ä⡢4-⡢5-˷ײ6-١7-١8-ת䡢9-ת䡢10-11-δ - BYTE byGSensorType; // G-Sensor¼0-1-١2-١3-ת䡢4-ת䡢5-6-ײ - BYTE bySensorInType; // Sensor-InΪ0-1-ɲ2-ת3-ת4- - BYTE byRes[667]; /**/ + BYTE byRuleID; //异常行为检测类型,规则0xff表示全部,从0开始 + BYTE byDriverBehaviortType; //司机驾驶行为类型:0-保留、1-抽烟、2-接打电话、3-疲劳驾驶、4-分神提醒、5-驾驶员异常、6-未系安全带、7-红外阻断墨镜 + BYTE byADASType; //高级辅助驾驶类型:0-保留、1-前向碰撞、2-车道偏离、3-盲区检测、4-车距检测、5-行人防撞、6-急加速、7-急减速、8-急左转弯、9-急右转弯、10-车辆翻车、11-未礼让行人 + BYTE byGSensorType; // G-Sensor事件:0-保留、1-急加速、2-急减速、3-急左转弯、4-急右转弯、5-车辆翻车、6-车辆碰撞 + BYTE bySensorInType; // Sensor-In行为:0-保留、1-刹车、2-左转、3-右转、4-倒车 + BYTE byRes[667]; /*保留*/ }struVcaParam; - struct//Ѷ¼ + struct//审讯事件搜索条件 { - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byRes[799]; // + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byRes[799]; //保留 } struInquestParam; - struct// ͨŰֵʾ + struct//智能侦测查找条件 ,通道号按值表示 { - BYTE byAll; //ȫͨ0-񣬴ʱdwChanNoЧ - //1-ȫͨʱdwChanNoЧ + BYTE byAll; //查找全部通道,0-否,此时dwChanNo参数有效, + //1-查找全部通道,此时dwChanNo参数无效。 BYTE byRes1[3]; - WORD wChanNo[MAX_CHANNUM_V30];// ͨ,ֵʾ0xffffЧҺҲʾЧֵ + WORD wChanNo[MAX_CHANNUM_V30];// 触发通道号,按值表示,0xffff无效,且后续数据也表示无效值 BYTE byRes[668]; }struVCADetect; struct { - NET_DVR_STREAM_INFO struIDInfo; // idϢ72ֽڳ - DWORD dwCmdType; // ⲿͣNVRƴ洢ʹ - BYTE byBackupVolumeNum; //浵ţCVRʹ + NET_DVR_STREAM_INFO struIDInfo; // 流id信息,72字节长 + DWORD dwCmdType; // 外部触发类型,NVR接入云存储使用 + BYTE byBackupVolumeNum; //存档卷号,CVR使用 BYTE byRes1[3]; - BYTE byArchiveLabel[64]; //浵ǩCVRʹ + BYTE byArchiveLabel[64]; //存档标签,CVR使用 BYTE byRes[656]; }struStreamIDParam; - struct //pos¼ + struct //pos录像 { - WORD wChannel[MAX_CHANNUM_V30]; //ֵͨʾ,У0xffffʱʾֵЧ - BYTE byAllChan; //Ƿȫͨ0-񣬴ʱwChannelЧ1-ȫͨʱwChannelЧ - BYTE byCaseSensitive; //0-ִСд 1-ִСд - BYTE byCombinateMode; //ؼϷʽ0-1- - BYTE byRes1; // + WORD wChannel[MAX_CHANNUM_V30]; //通道,按值表示,紧凑型排列,遇到0xffff时表示数组后续值无效 + BYTE byAllChan; //是否查找全部通道,0-否,此时wChannel有效,1-全部通道,此时wChannel无效 + BYTE byCaseSensitive; //0-不区分大小写, 1-区分大小写 + BYTE byCombinateMode; //关键字组合方式,0-或,1-与 + BYTE byRes1; //保留 char sKeyWord[MAX_POS_KEYWORDS_NUM][MAX_POS_KEYWORD_LEN]; - //ؼֲʱ - BYTE byRes[284]; // + //关键字查找时的条件 + BYTE byRes[284]; //保留 }struPosAlarm; struct @@ -16547,274 +16547,274 @@ typedef struct tagNET_DVR_SEARCH_EVENT_PARAM_V50 BYTE byRes[547]; }struTrialParam; - struct //޼ + struct //门禁事件搜索条件 { - DWORD dwMajor; //ͣ¼ϴһ£0ȫ - DWORD dwMinor; //ͣ¼ϴһ£0ȫ - BYTE byCardNo[ACS_CARD_NO_LEN]; // - BYTE byName[NAME_LEN/*32*/]; // - BYTE byMACAddr[MACADDR_LEN]; //MACַ + DWORD dwMajor; //报警主类型(与事件上传主类型一致,0代表全部) + DWORD dwMinor; //报警次类型(与事件上传主类型一致,0代表全部) + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE byMACAddr[MACADDR_LEN]; //物理MAC地址 BYTE byRes[722]; }struACSAlarm; - struct //Ƶ¼ + struct //非视频联动事件搜索条件 { - WORD wDeviceType; //豸,0-˽Ž1-˽пӶԽ豸, 2-˽бԤ 3-GJD 4-Luminite, 5-OPTEX,6-cameraDetectorģ豸 - WORD wEventType; //- ͱ仯0xffffʾȫ - WORD wChannel[MAX_CHANNUM_V30/*64*/]; //ͨţֵʾ,У0xffffʱʾֵЧ - BYTE byAllChan; //Ƿȫͨ0-񣬴ʱwChannelЧ1-ȫͨʱwChannelЧ - BYTE byCaseSensitive; //0-ִСд 1-ִСд - BYTE byCombinateMode; //ؼϷʽ0-1- - BYTE bySearchType; //ʽ0-ƵԴʱͨΪƵͨţ - char sKeyWord[MAX_POS_KEYWORDS_NUM/*3*/][MAX_POS_KEYWORD_LEN/*128*/];//ؼֲʱ - WORD wZoneNo; //ţ豸Ϊ˽бΪwEventTypeΪ1ʱЧ - BYTE byRes[278]; // + WORD wDeviceType; //设备类型,0-私有门禁主机,1-私有可视对讲设备, 2-私有报警主机(预留) 3-GJD报警主机 4-Luminite报警主机, 5-OPTEX报警主机,6-cameraDetector模拟相机传感器设备 + WORD wEventType; //搜索次类型- 根据主类型变化,0xffff表示全部 + WORD wChannel[MAX_CHANNUM_V30/*64*/]; //通道号,按值表示,紧凑型排列,遇到0xffff时表示数组后续值无效 + BYTE byAllChan; //是否查找全部通道,0-否,此时wChannel有效,1-全部通道,此时wChannel无效 + BYTE byCaseSensitive; //0-不区分大小写, 1-区分大小写 + BYTE byCombinateMode; //关键字组合方式,0-或,1-与 + BYTE bySearchType; //搜索方式:0-按视频源搜索(此时通道号为视频通道号) + char sKeyWord[MAX_POS_KEYWORDS_NUM/*3*/][MAX_POS_KEYWORD_LEN/*128*/];//关键字查找时的条件 + WORD wZoneNo; //防区号,仅当设备类型为私有报警主机,次类型为防区(wEventType为1)时有效 + BYTE byRes[278]; //保留 }struIOTAlarm; }uSeniorParam; }NET_DVR_SEARCH_EVENT_PARAM_V50, *LPNET_DVR_SEARCH_EVENT_PARAM_V50; -//ҷؽ +//查找返回结果 typedef struct tagNET_DVR_SEARCH_EVENT_RET { - WORD wMajorType; // - WORD wMinorType; // - NET_DVR_TIME struStartTime; //¼ʼʱ - NET_DVR_TIME struEndTime; //¼ֹͣʱ䣬¼ʱͿʼʱһ + WORD wMajorType; //主类型 + WORD wMinorType; //次类型 + NET_DVR_TIME struStartTime; //事件开始的时间 + NET_DVR_TIME struEndTime; //事件停止的时间,脉冲事件时和开始时间一样 BYTE byChan[MAX_CHANNUM_V30]; - BYTE byChanEx[32]; //ͨλʾʹøֶκbyChanԲʹ + BYTE byChanEx[32]; //关联通道,按位表示,使用该字段后byChan可以不使用 BYTE byRes[4]; union { - struct// + struct//报警输入结果 { - DWORD dwAlarmInNo; // + DWORD dwAlarmInNo; //报警输入号 BYTE byRes[SEARCH_EVENT_INFO_LEN]; }struAlarmRet; - struct//ƶ + struct//移动侦测结果 { - DWORD dwMotDetNo; //ƶͨ + DWORD dwMotDetNo; //移动侦测通道 BYTE byRes[SEARCH_EVENT_INFO_LEN]; }struMotionRet; - struct//쳣Ϊ + struct//异常行为检测结果 { - DWORD dwChanNo; //¼ͨ - BYTE byRuleID; //ID - BYTE byRes1[3]; // - BYTE byRuleName[NAME_LEN]; // - NET_VCA_EVENT_UNION uEvent; //Ϊ¼ + DWORD dwChanNo; //触发事件的通道号 + BYTE byRuleID; //规则ID + BYTE byRes1[3]; //保留 + BYTE byRuleName[NAME_LEN]; //规则名称 + NET_VCA_EVENT_UNION uEvent; //行为事件参数 }struVcaRet; - struct//Ѷ¼ + struct//审讯事件 { - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byDriveIndex; //¼,1ʼ - BYTE byRes1[6]; // - DWORD dwSegmentNo; //ƬڱѶе,1ʼ - WORD wSegmetSize; //ƬϵĴС, λM - WORD wSegmentState; //Ƭ״̬ 0 ¼1 ¼쳣2 ¼Ѷ - BYTE byRes2[288]; // + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + BYTE byRes1[6]; //保留 + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + WORD wSegmentState; //本片断状态 0 刻录正常,1 刻录异常,2 不刻录审讯 + BYTE byRes2[288]; //保留 }struInquestRet; - struct //id¼ѯ + struct //流id录像查询结果 { - DWORD dwRecordType; /*¼ 0-ʱ¼,1-ƶ,2-,3-|ƶ, 4-&ƶ,5-,6-ֶ¼,7-𶯱,8-, - 9-ܱ,10-PIR,11-߱,12-ȱ,13- PIR|߱|ȱ, 14-ܽͨ¼,15-Խ,16-,17-쳣, - 18-, 19-ȫܣԽ|||뿪|Ŀʶ, 20-ź,21-ش22-Ǩ¼,23-ڵ 24-¼ƴӴ浵*/ - DWORD dwRecordLength; //¼С - BYTE byLockFlag; // ־ 0û 1 - BYTE byDrawFrameType; // 0dz֡¼ 1֡¼ + DWORD dwRecordType; /*录像类型 0-定时录像,1-移动侦测,2-报警触发,3-报警|移动侦测, 4-报警&移动侦测,5-命令触发,6-手动录像,7-震动报警,8-环境触发报警, + 9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,13- PIR|无线报警|呼救报, 14-智能交通事件,15-越界侦测,16-区域入侵,17-声音异常, + 18-场景变更侦测, 19-全部简单智能(越界侦测|区域入侵|进入区域|离开区域|目标识别), 20-信号量,21-回传、22-回迁录像,23-遮挡 24-录像拼接存档*/ + DWORD dwRecordLength; //录像大小 + BYTE byLockFlag; // 锁定标志 0:没锁定 1:锁定 + BYTE byDrawFrameType; // 0:非抽帧录像 1:抽帧录像 BYTE byRes1[2]; - BYTE byFileName[NAME_LEN]; //ļ - DWORD dwFileIndex; // 浵ϵļ + BYTE byFileName[NAME_LEN]; //文件名 + DWORD dwFileIndex; // 存档卷上的文件索引 BYTE byRes[256]; }struStreamIDRet; struct { - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byDriveIndex; //¼,1ʼ - WORD wSegmetSize; //ƬϵĴС, λM - DWORD dwSegmentNo; //ƬڱѶе,1ʼ - BYTE bySegmentState; //Ƭ״̬0-¼1-¼쳣2-¼Ѷ - BYTE byCaseType; //ͣ0-ȫ1-°2-° + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + BYTE bySegmentState; //本片断状态,0-刻录正常,1-刻录异常,2-不刻录审讯 + BYTE byCaseType; //案件类型;0-全部、1-刑事案件、2-民事案件 BYTE byRes[2]; - BYTE byCaseNo[CASE_NO_RET_LEN]; // - BYTE byCaseName[CASE_NAME_RET_LEN]; //ƣ - BYTE byLitigant1[LITIGANT_RET_LEN]; //1 - BYTE byLitigant2[LITIGANT_RET_LEN]; //2 - BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//г + BYTE byCaseNo[CASE_NO_RET_LEN]; //案件编号 + BYTE byCaseName[CASE_NAME_RET_LEN]; //案件名称; + BYTE byLitigant1[LITIGANT_RET_LEN]; //当事人1; + BYTE byLitigant2[LITIGANT_RET_LEN]; //当事人2; + BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//审判长 BYTE byRes1[104]; }struTrialRet; }uSeniorRet; }NET_DVR_SEARCH_EVENT_RET, *LPNET_DVR_SEARCH_EVENT_RET; -#define NET_SDK_MAX_TAPE_INDEX_LEN 32 //Ŵ󳤶 -#define NET_SDK_MAX_FILE_LEN 256 //ļ󳤶 +#define NET_SDK_MAX_TAPE_INDEX_LEN 32 //磁带编号最大长度 +#define NET_SDK_MAX_FILE_LEN 256 //文件名最大长度 -//ҷؽ +//查找返回结果 typedef struct tagNET_DVR_SEARCH_EVENT_RET_V40 { - WORD wMajorType; // - WORD wMinorType; // - NET_DVR_TIME struStartTime; //¼ʼʱ - NET_DVR_TIME struEndTime; //¼ֹͣʱ䣬¼ʱͿʼʱһ - WORD wChan[MAX_CHANNUM_V40/*512*/]; //ͨţ0xffffʾЧ + WORD wMajorType; //主类型 + WORD wMinorType; //次类型 + NET_DVR_TIME struStartTime; //事件开始的时间 + NET_DVR_TIME struEndTime; //事件停止的时间,脉冲事件时和开始时间一样 + WORD wChan[MAX_CHANNUM_V40/*512*/]; //触发的通道号,0xffff表示后续无效 BYTE byRes[36]; union { - BYTE byLen[800]; //峤 - struct// + BYTE byLen[800]; //联合体长度 + struct//报警输入结果 { - DWORD dwAlarmInNo; // + DWORD dwAlarmInNo; //报警输入号 BYTE byRes[796]; }struAlarmRet; - struct//ƶ + struct//移动侦测结果 { - DWORD dwMotDetNo; //ƶͨ + DWORD dwMotDetNo; //移动侦测通道 BYTE byRes[796]; }struMotionRet; - struct//쳣Ϊ + struct//异常行为检测结果 { - DWORD dwChanNo; //¼ͨ - BYTE byRuleID; //ID - BYTE byRes1[3]; // - BYTE byRuleName[NAME_LEN]; // - NET_VCA_EVENT_UNION uEvent; //Ϊ¼ - BYTE byRes[668]; // + DWORD dwChanNo; //触发事件的通道号 + BYTE byRuleID; //规则ID + BYTE byRes1[3]; //保留 + BYTE byRuleName[NAME_LEN]; //规则名称 + NET_VCA_EVENT_UNION uEvent; //行为事件参数 + BYTE byRes[668]; //保留 }struVcaRet; - struct//Ѷ¼ + struct//审讯事件 { - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byDriveIndex; //¼,1ʼ - BYTE byRes1[6]; // - DWORD dwSegmentNo; //ƬڱѶе,1ʼ - WORD wSegmetSize; //ƬϵĴС, λM - WORD wSegmentState; //Ƭ״̬ 0 ¼1 ¼쳣2 ¼Ѷ - BYTE byRes2[784]; // + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + BYTE byRes1[6]; //保留 + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + WORD wSegmentState; //本片断状态 0 刻录正常,1 刻录异常,2 不刻录审讯 + BYTE byRes2[784]; //保留 }struInquestRet; - struct //id¼ѯ + struct //流id录像查询结果 { - DWORD dwRecordType; //¼ 0-ʱ¼ 1-ƶ 2-¼ 3-|ƶ 4-&ƶ 5- 6-ֶ¼ 7-𶯱 8- 9-ܱ 10-ش¼ - DWORD dwRecordLength; //¼С - BYTE byLockFlag; // ־ 0û 1 - BYTE byDrawFrameType; // 0dz֡¼ 1֡¼ - BYTE byPosition;// ļڴ洢λã0-ϣ1-λϣֱأ2-ŴڣҪѴлλϣ3-ڴŴУҪѴ̲嵽Ŵ + DWORD dwRecordType; //录像类型 0-定时录像 1-移动侦测 2-报警录像 3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像 7-震动报警 8-环境触发 9-智能报警 10-回传录像 + DWORD dwRecordLength; //录像大小 + BYTE byLockFlag; // 锁定标志 0:没锁定 1:锁定 + BYTE byDrawFrameType; // 0:非抽帧录像 1:抽帧录像 + BYTE byPosition;// 文件所在存储位置:0-阵列上,1-带库机位上,可以直接下载,2-磁带库内,需要把磁盘切换到机位上,3-不在磁带库中,需要把磁盘插到磁带库中 BYTE byRes1; - BYTE byFileName[NAME_LEN]; //ļ - DWORD dwFileIndex; // 浵ϵļ - BYTE byTapeIndex[NET_SDK_MAX_TAPE_INDEX_LEN]; //ļڴŴ - BYTE byFileNameEx[NET_SDK_MAX_FILE_LEN/*256*/]; //ļչ + BYTE byFileName[NAME_LEN]; //文件名 + DWORD dwFileIndex; // 存档卷上的文件索引 + BYTE byTapeIndex[NET_SDK_MAX_TAPE_INDEX_LEN]; //文件所在磁带编号 + BYTE byFileNameEx[NET_SDK_MAX_FILE_LEN/*256*/]; //文件名扩展 BYTE byRes[464]; }struStreamIDRet; - struct//POS¼ѯ + struct//POS录像查询结果 { - DWORD dwChanNo; //pos¼ͨ + DWORD dwChanNo; //触发产生pos事件的通道 BYTE byRes[796]; }struPosRet; struct { - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byDriveIndex; //¼,1ʼ - WORD wSegmetSize; //ƬϵĴС, λM - DWORD dwSegmentNo; //ƬڱѶе,1ʼ - BYTE bySegmentState; //Ƭ״̬0-¼1-¼쳣2-¼Ѷ - BYTE byCaseType; //ͣ0-ȫ1-°2-° + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + BYTE bySegmentState; //本片断状态,0-刻录正常,1-刻录异常,2-不刻录审讯 + BYTE byCaseType; //案件类型;0-全部、1-刑事案件、2-民事案件 BYTE byRes[2]; - BYTE byCaseNo[CASE_NO_RET_LEN]; // - BYTE byCaseName[CASE_NAME_RET_LEN]; //ƣ - BYTE byLitigant1[LITIGANT_RET_LEN]; //1 - BYTE byLitigant2[LITIGANT_RET_LEN]; //2 - BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//г + BYTE byCaseNo[CASE_NO_RET_LEN]; //案件编号 + BYTE byCaseName[CASE_NAME_RET_LEN]; //案件名称; + BYTE byLitigant1[LITIGANT_RET_LEN]; //当事人1; + BYTE byLitigant2[LITIGANT_RET_LEN]; //当事人2; + BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//审判长 BYTE byRes1[600]; }struTrialRet; }uSeniorRet; }NET_DVR_SEARCH_EVENT_RET_V40, *LPNET_DVR_SEARCH_EVENT_RET_V40; -//ҷؽ +//查找返回结果 typedef struct tagNET_DVR_SEARCH_EVENT_RET_V50 { - WORD wMajorType; // - WORD wMinorType; // - NET_DVR_TIME_SEARCH struStartTime; //¼ʼʱ - NET_DVR_TIME_SEARCH struEndTime; //¼ֹͣʱ䣬¼ʱͿʼʱһ - NET_DVR_ADDRESS struAddr; //ƬڵĵַϢȺطʱõ - WORD wChan[MAX_CHANNUM_V40/*512*/]; //ͨţ0xffffʾЧ + WORD wMajorType; //主类型 + WORD wMinorType; //次类型 + NET_DVR_TIME_SEARCH struStartTime; //事件开始的时间 + NET_DVR_TIME_SEARCH struEndTime; //事件停止的时间,脉冲事件时和开始时间一样 + NET_DVR_ADDRESS struAddr; //片段所在的地址信息,集群回放时用到 + WORD wChan[MAX_CHANNUM_V40/*512*/]; //触发的通道号,0xffff表示后续无效 BYTE byRes[256]; union { - BYTE byLen[800]; //峤 - struct// + BYTE byLen[800]; //联合体长度 + struct//报警输入结果 { - DWORD dwAlarmInNo; // + DWORD dwAlarmInNo; //报警输入号 BYTE byRes[796]; }struAlarmRet; - struct//ƶ + struct//移动侦测结果 { - DWORD dwMotDetNo; //ƶͨ + DWORD dwMotDetNo; //移动侦测通道 BYTE byRes[796]; }struMotionRet; - struct//쳣Ϊ + struct//异常行为检测结果 { - DWORD dwChanNo; //¼ͨ - BYTE byRuleID; //ID - BYTE byRes1[3]; // - BYTE byRuleName[NAME_LEN]; // - NET_VCA_EVENT_UNION uEvent; //Ϊ¼ - BYTE byRes[668]; // + DWORD dwChanNo; //触发事件的通道号 + BYTE byRuleID; //规则ID + BYTE byRes1[3]; //保留 + BYTE byRuleName[NAME_LEN]; //规则名称 + NET_VCA_EVENT_UNION uEvent; //行为事件参数 + BYTE byRes[668]; //保留 }struVcaRet; - struct//Ѷ¼ + struct//审讯事件 { - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byDriveIndex; //¼,1ʼ - BYTE byRes1[6]; // - DWORD dwSegmentNo; //ƬڱѶе,1ʼ - WORD wSegmetSize; //ƬϵĴС, λM - WORD wSegmentState; //Ƭ״̬ 0 ¼1 ¼쳣2 ¼Ѷ - BYTE byRes2[784]; // + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + BYTE byRes1[6]; //保留 + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + WORD wSegmentState; //本片断状态 0 刻录正常,1 刻录异常,2 不刻录审讯 + BYTE byRes2[784]; //保留 }struInquestRet; - struct //id¼ѯ + struct //流id录像查询结果 { - DWORD dwRecordType; //¼ 0-ʱ¼ 1-ƶ 2-¼ 3-|ƶ 4-&ƶ 5- 6-ֶ¼ 7-𶯱 8- 9-ܱ 10-ش¼ - DWORD dwRecordLength; //¼С - BYTE byLockFlag; // ־ 0û 1 - BYTE byDrawFrameType; // 0dz֡¼ 1֡¼ - BYTE byPosition;// ļڴ洢λã0-ϣ1-λϣֱأ2-ŴڣҪѴлλϣ3-ڴŴУҪѴ̲嵽Ŵ + DWORD dwRecordType; //录像类型 0-定时录像 1-移动侦测 2-报警录像 3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像 7-震动报警 8-环境触发 9-智能报警 10-回传录像 + DWORD dwRecordLength; //录像大小 + BYTE byLockFlag; // 锁定标志 0:没锁定 1:锁定 + BYTE byDrawFrameType; // 0:非抽帧录像 1:抽帧录像 + BYTE byPosition;// 文件所在存储位置:0-阵列上,1-带库机位上,可以直接下载,2-磁带库内,需要把磁盘切换到机位上,3-不在磁带库中,需要把磁盘插到磁带库中 BYTE byRes1; - BYTE byFileName[NAME_LEN]; //ļ - DWORD dwFileIndex; // 浵ϵļ - BYTE byTapeIndex[NET_SDK_MAX_TAPE_INDEX_LEN]; //ļڴŴ - BYTE byFileNameEx[NET_SDK_MAX_FILE_LEN/*256*/]; //ļչ + BYTE byFileName[NAME_LEN]; //文件名 + DWORD dwFileIndex; // 存档卷上的文件索引 + BYTE byTapeIndex[NET_SDK_MAX_TAPE_INDEX_LEN]; //文件所在磁带编号 + BYTE byFileNameEx[NET_SDK_MAX_FILE_LEN/*256*/]; //文件名扩展 BYTE byRes[464]; }struStreamIDRet; - struct//POS¼ѯ + struct//POS录像查询结果 { - DWORD dwChanNo; //pos¼ͨ + DWORD dwChanNo; //触发产生pos事件的通道 BYTE byRes[796]; }struPosRet; struct { - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byDriveIndex; //¼,1ʼ - WORD wSegmetSize; //ƬϵĴС, λM - DWORD dwSegmentNo; //ƬڱѶе,1ʼ - BYTE bySegmentState; //Ƭ״̬0-¼1-¼쳣2-¼Ѷ - BYTE byCaseType; //ͣ0-ȫ1-°2-° + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + BYTE bySegmentState; //本片断状态,0-刻录正常,1-刻录异常,2-不刻录审讯 + BYTE byCaseType; //案件类型;0-全部、1-刑事案件、2-民事案件 BYTE byRes[2]; - BYTE byCaseNo[CASE_NO_RET_LEN]; // - BYTE byCaseName[CASE_NAME_RET_LEN]; //ƣ - BYTE byLitigant1[LITIGANT_RET_LEN]; //1 - BYTE byLitigant2[LITIGANT_RET_LEN]; //2 - BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//г + BYTE byCaseNo[CASE_NO_RET_LEN]; //案件编号 + BYTE byCaseName[CASE_NAME_RET_LEN]; //案件名称; + BYTE byLitigant1[LITIGANT_RET_LEN]; //当事人1; + BYTE byLitigant2[LITIGANT_RET_LEN]; //当事人2; + BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//审判长 BYTE byRes1[600]; }struTrialRet; - struct//Ƶͨѯ + struct//非视频通道查询结果 { - DWORD dwChanNo; //¼ͨţ¼Դͨ + DWORD dwChanNo; //触发产生事件的通道号(事件源通道) BYTE byRes[796]; }struIOTRet; }uSeniorRet; @@ -16822,62 +16822,62 @@ typedef struct tagNET_DVR_SEARCH_EVENT_RET_V50 //SDK_V35 2009-10-26 -// 궨 +// 标定配置类型 typedef enum tagCALIBRATE_TYPE { - PDC_CALIBRATE = 0x01, // PDC 궨 - BEHAVIOR_OUT_CALIBRATE = 0x02, //Ϊⳡ궨 - BEHAVIOR_IN_CALIBRATE = 0x03, // Ϊڳ궨 - ITS_CALBIRETE = 0x04, // ͨ¼궨 - BV_DIRECT_CALIBRATE = 0x05, //˫Ŀֱӱ궨 - PDC_LINE_CALIBRATE = 0x06 //PDC 궨 + PDC_CALIBRATE = 0x01, // PDC 标定 + BEHAVIOR_OUT_CALIBRATE = 0x02, //行为室外场景标定 + BEHAVIOR_IN_CALIBRATE = 0x03, // 行为室内场景标定 + ITS_CALBIRETE = 0x04, // 交通事件标定 + BV_DIRECT_CALIBRATE = 0x05, //双目直接标定 + PDC_LINE_CALIBRATE = 0x06 //PDC 线 标定 }CALIBRATE_TYPE; #define MAX_RECT_NUM 6 typedef struct tagNET_DVR_RECT_LIST { - BYTE byRectNum; // οĸ - BYTE byRes1[11]; //ֽ - NET_VCA_RECT struVcaRect[MAX_RECT_NUM]; // Ϊ6Rect + BYTE byRectNum; // 矩形框的个数 + BYTE byRes1[11]; //保留字节 + NET_VCA_RECT struVcaRect[MAX_RECT_NUM]; // 最大为6个Rect }NET_DVR_RECT_LIST, *LPNET_DVR_RECT_LIST; -// PDC 궨 +// PDC 标定参数 typedef struct tagNET_DVR_PDC_CALIBRATION { - NET_DVR_RECT_LIST struRectList; // 궨οб - BYTE byRes[120]; // ֽ + NET_DVR_RECT_LIST struRectList; // 标定矩形框列表 + BYTE byRes[120]; // 保留字节 }NET_DVR_PDC_CALIBRATION, *LPNET_DVR_PDC_CALIBRATION; -// 궨ߵʾǰ궨ʵʱʾǸ߶߻dzߡ +// 标定线的属性类别,用来表示当前标定线在实际表示的是高度线还是长度线。 typedef enum tagLINE_MODE { - HEIGHT_LINE, //߶ - LENGTH_LINE // + HEIGHT_LINE, //高度样本线 + LENGTH_LINE //长度样本线 }LINE_MODE; /* -ñ궨ϢʱӦλʹܣز -ûʹܣ궨Իȡص +在设置标定信息的时候,如果相应位设置了使能,并设置相关参数, +若没有设置使能,则标定后可以获取相关的摄像机参数 */ typedef struct tagNET_DVR_CAMERA_PARAM { - BYTE byEnableHeight; // Ƿʹ߶ - BYTE byEnableAngle; // ǷʹǶ - BYTE byEnableHorizon; // Ƿʹƽ - BYTE byRes[5]; // ֽ - float fCameraHeight; // ߶ - float fCameraAngle; // Ƕ - float fHorizon; // еĵƽ + BYTE byEnableHeight; // 是否使能设置摄像机高度线 + BYTE byEnableAngle; // 是否使能设置摄像机俯仰角度 + BYTE byEnableHorizon; // 是否使能设置摄像机地平线 + BYTE byRes[5]; // 保留字节 + float fCameraHeight; // 摄像机高度 + float fCameraAngle; // 摄像机俯仰角度 + float fHorizon; // 场景中的地平线 }NET_DVR_CAMERA_PARAM, *LPNET_DVR_CAMERA_PARAM; /* -fValueʾĿ߶ȵʱstruStartPointstruEndPointֱʾĿͷͽŲ㡣 -fValueʾ߶γȵʱstruStartPointstruEndPointֱʾ߶ʼյ㣬 -modeʾǰ߱ʾ߶߻dzߡ +当fValue表示目标高度的时候,struStartPoint和struEndPoint分别表示目标头部点和脚部点。 +当fValue表示线段长度的时候,struStartPoint和struEndPoint分别表示线段起始点和终点, +mode表示当前样本线表示高度线还是长度线。 */ typedef struct tagNET_DVR_LINE_SEGMENT { - BYTE byLineMode; // LINE_MODE - BYTE byRes[3]; // ֽ + BYTE byLineMode; // 参照 LINE_MODE + BYTE byRes[3]; // 保留字节 NET_VCA_POINT struStartPoint; NET_VCA_POINT struEndPoint; float fValue; @@ -16886,209 +16886,209 @@ typedef struct tagNET_DVR_LINE_SEGMENT #define MAX_LINE_SEG_NUM 8 /* -궨ĿǰҪ4-8ߣԻȡز +标定样本线目前需要4-8调样本线,以获取摄像机相关参数 */ typedef struct tagNET_DVR_BEHAVIOR_OUT_CALIBRATION { - DWORD dwLineSegNum; // ߸ - NET_DVR_LINE_SEGMENT struLineSegment[MAX_LINE_SEG_NUM]; // - NET_DVR_CAMERA_PARAM struCameraParam; // + DWORD dwLineSegNum; // 样本线个数 + NET_DVR_LINE_SEGMENT struLineSegment[MAX_LINE_SEG_NUM]; // 样本线最大个数 + NET_DVR_CAMERA_PARAM struCameraParam; // 摄像机参数 BYTE byRes[20]; }NET_DVR_BEHAVIOR_OUT_CALIBRATION, *LPNET_DVR_BEHAVIOR_OUT_CALIBRATION; /* -ýṹʾIASܿ궨 -аһĿһӦĸ߶ȱ궨ߣ -ĿΪվӾο򣻸߶ʶͷ㵽ŵı궨ߣ -ùһʾ +该结构体表示IAS智能库标定样本, +其中包括一个目标框和一条对应的高度标定线; +目标框为站立的人体外接矩形框;高度线样本标识从人头顶点到脚点的标定线; +用归一化坐标表示; */ typedef struct tagNET_DVR_IN_CAL_SAMPLE { - NET_VCA_RECT struVcaRect; // Ŀ - NET_DVR_LINE_SEGMENT struLineSegment; // ߶ȱ궨 + NET_VCA_RECT struVcaRect; // 目标框 + NET_DVR_LINE_SEGMENT struLineSegment; // 高度标定线 }NET_DVR_IN_CAL_SAMPLE, *LPNET_DVR_IN_CAL_SAMPLE; -#define MAX_SAMPLE_NUM 5 //ֱӱ궨 -#define MAX_SAMPLE_NUM_EX 7 //궨չ +#define MAX_SAMPLE_NUM 5 //直接标定点最大个数 +#define MAX_SAMPLE_NUM_EX 7 //样本标定点个数扩展 typedef struct tagNET_DVR_BEHAVIOR_IN_CALIBRATION { - DWORD dwCalSampleNum; // 궨 - NET_DVR_IN_CAL_SAMPLE struCalSample[MAX_SAMPLE_NUM]; // 궨 - NET_DVR_CAMERA_PARAM struCameraParam; // + DWORD dwCalSampleNum; // 标定样本个数 + NET_DVR_IN_CAL_SAMPLE struCalSample[MAX_SAMPLE_NUM]; // 标定样本最大个数 + NET_DVR_CAMERA_PARAM struCameraParam; // 摄像机参数 BYTE byRes[16]; }NET_DVR_BEHAVIOR_IN_CALIBRATION, *LPNET_DVR_BEHAVIOR_IN_CALIBRATION; #define CALIB_PT_NUM 4 typedef struct tagNET_DVR_ITS_CALIBRATION { - DWORD dwPointNum; //궨 - NET_VCA_POINT struPoint[CALIB_PT_NUM]; //ͼ + DWORD dwPointNum; //标定点数 + NET_VCA_POINT struPoint[CALIB_PT_NUM]; //图像坐标 float fWidth; float fHeight; - BYTE byRes1[100]; // ֽ + BYTE byRes1[100]; // 保留字节 }NET_DVR_ITS_CALIBRATION, *LPNET_DVR_ITS_CALIBRATION; typedef struct tagNET_DVR_BV_DIRECT_CALIBRATION { - DWORD dwCameraHeight; //߶ȣλcm - float fPitchAngle; //ӽǶ[0, 60], - float fInclineAngle; //бǶ[-20,20] - BYTE byRes1[228]; // + DWORD dwCameraHeight; //摄像机高度,单位cm + float fPitchAngle; //摄像机俯视角度[0°, 60°], + float fInclineAngle; //摄像机倾斜角度[-20°,20°] + BYTE byRes1[228]; //保留 }NET_DVR_BV_DIRECT_CALIBRATION,*LPNET_DVR_BV_DIRECT_CALIBRATION; -// PDC 궨 +// PDC 标定参数 typedef struct tagNET_DVR_PDC_LINE_CALIBRATION { NET_VCA_LINE struCalibrationLine; - BYTE byRes[224];// ֽ + BYTE byRes[224];// 保留字节 } NET_DVR_PDC_LINE_CALIBRATION, *LPNET_DVR_PDC_LINE_CALIBRATION; -// 궨 -// ر궨Էڸýṹ +// 标定参数联合体 +// 后续的相关标定参数可以放在该结构里面 typedef union tagNET_DVR_CALIBRATION_PRARM_UNION { - BYTE byRes[240]; //ṹС - NET_DVR_PDC_CALIBRATION struPDCCalibration; //PDC 궨 - NET_DVR_BEHAVIOR_OUT_CALIBRATION struBehaviorOutCalibration; // Ϊⳡ궨 ҪӦIVS - NET_DVR_BEHAVIOR_IN_CALIBRATION struBehaviorInCalibration; // Ϊڳ궨ҪӦIAS + BYTE byRes[240]; //联合体结构大小 + NET_DVR_PDC_CALIBRATION struPDCCalibration; //PDC 标定参数 + NET_DVR_BEHAVIOR_OUT_CALIBRATION struBehaviorOutCalibration; // 行为室外场景标定 主要应用于IVS等 + NET_DVR_BEHAVIOR_IN_CALIBRATION struBehaviorInCalibration; // 行为室内场景标定,主要应用IAS等 NET_DVR_ITS_CALIBRATION struITSCalibration; - NET_DVR_BV_DIRECT_CALIBRATION struBvDirectCalibration; //˫Ŀֱӱ궨 - NET_DVR_PDC_LINE_CALIBRATION struPDCLineCalibration; //PDC ߱궨 + NET_DVR_BV_DIRECT_CALIBRATION struBvDirectCalibration; //双目直接标定 + NET_DVR_PDC_LINE_CALIBRATION struPDCLineCalibration; //PDC 线标定参数 }NET_DVR_CALIBRATION_PRARM_UNION, *LPNET_DVR_CALIBRATION_PRARM_UNION; -// 궨ýṹ +// 标定配置结构 typedef struct tagNET_DVR_CALIBRATION_CFG { - DWORD dwSize; //궨ṹС - BYTE byEnable; // Ƿñ궨 - BYTE byCalibrationType; // 궨 ݲͬѡͬı궨 οCALIBRATE_TYPE + DWORD dwSize; //标定结构大小 + BYTE byEnable; // 是否启用标定 + BYTE byCalibrationType; // 标定类型 根据不同类型在联合体类选择不同的标定 参考CALIBRATE_TYPE BYTE byRes1[2]; - NET_DVR_CALIBRATION_PRARM_UNION uCalibrateParam; // 궨 + NET_DVR_CALIBRATION_PRARM_UNION uCalibrateParam; // 标定参数联合体 BYTE byRes2[12]; }NET_DVR_CALIBRATION_CFG, *LPNET_DVR_CALIBRATION_CFG; -//ͳƷṹ +//流量统计方向结构体 typedef struct tagNET_DVR_PDC_ENTER_DIRECTION { - NET_VCA_POINT struStartPoint; //ͳƷʼ - NET_VCA_POINT struEndPoint; // ͳƷ + NET_VCA_POINT struStartPoint; //流量统计方向起始点 + NET_VCA_POINT struEndPoint; // 流量统计方向结束点 }NET_DVR_PDC_ENTER_DIRECTION, *LPNET_DVR_PDC_ENTER_DIRECTION; typedef struct tagNET_DVR_PDC_RULE_CFG { - DWORD dwSize; //ṹС - BYTE byEnable; // Ƿ񼤻; - BYTE byRes1[23]; // ֽ - NET_VCA_POLYGON struPolygon; // - NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 뷽 + DWORD dwSize; //结构大小 + BYTE byEnable; // 是否激活规则; + BYTE byRes1[23]; // 保留字节 + NET_VCA_POLYGON struPolygon; // 多边形 + NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 流量进入方向 } NET_DVR_PDC_RULE_CFG, *LPNET_DVR_PDC_RULE_CFG; typedef struct tagNET_DVR_PDC_RULE_CFG_V41 { - DWORD dwSize; //ṹС - BYTE byEnable; // Ƿ񼤻; - BYTE byRes1[23]; // ֽ - NET_VCA_POLYGON struPolygon; // - NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 뷽 - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - NET_DVR_TIME_EX struDayStartTime; //쿪ʼʱ䣬ʱЧ - NET_DVR_TIME_EX struNightStartTime; //ҹʼʱ䣬ʱЧ - BYTE byRes[100]; // ֽ + DWORD dwSize; //结构大小 + BYTE byEnable; // 是否激活规则; + BYTE byRes1[23]; // 保留字节 + NET_VCA_POLYGON struPolygon; // 多边形 + NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 流量进入方向 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_TIME_EX struDayStartTime; //白天开始时间,时分秒有效 + NET_DVR_TIME_EX struNightStartTime; //夜晚开始时间,时分秒有效 + BYTE byRes[100]; // 保留字节 }NET_DVR_PDC_RULE_CFG_V41, *LPNET_DVR_PDC_RULE_CFG_V41; -/********* IPC5.1.7 ͳƹ Begin 2014-03-21***********/ -//ṹ +/********* IPC5.1.7 人流量统计规则 Begin 2014-03-21***********/ +//条件结构 typedef struct tagNET_DVR_PDC_RULE_COND { - DWORD dwSize; //ṹС - DWORD dwChannel; //ͨ - DWORD dwID; //IDೡϰ汾SDK豸ʱֽΪ0ֽΪ0ʱҲĬΪ1 + DWORD dwSize; //结构大小 + DWORD dwChannel; //通道号 + DWORD dwID; //场景ID,兼容球机多场景概念,兼容老版本SDK配置新设备时,保留字节为0的情况,所以这个字节为0时,也默认为场景1 BYTE byRes[60]; }NET_DVR_PDC_RULE_COND, *LPNET_DVR_PDC_RULE_COND; -//߽ṹ +//折线结构体 typedef struct tagNET_VCA_POLYLINE { - NET_VCA_POINT struPoint[4]; //ߵ + NET_VCA_POINT struPoint[4]; //折线点 }NET_VCA_POLYLINE, *LPNET_VCA_POLYLINE; -//ýṹ +//配置结构 typedef struct tagNET_DVR_PDC_RULE_CFG_V42 { - DWORD dwSize; //ṹС - BYTE byEnable; //Ƿ񼤻; - BYTE byOSDEnable;//ͳOSDʾǷ, 0-0-ޣ1-ǣ0-뿪 2-룬 3-뿪 豸IJOSDӶӦޣöӦ/뿪4-5-; - BYTE byCurDetectType;//ǰͣ0-Σ1-, 2-߼ - BYTE byInterferenceSuppression; //ƣλʾ,0-δѡ,1-ѡbit0-Ӱbit1-ǻbit2-Ƴ - NET_VCA_POINT struOSDPoint;//ͳʾOSDʾϽ - //ϴڣ0-151-12-53-104-205-306-60λ + DWORD dwSize; //结构大小 + BYTE byEnable; //是否激活规则; + BYTE byOSDEnable;//客流统计OSD显示是否启用, 0-否(0-无),1-是(0-进入和离开), 2-进入, 3-离开 对于老设备的不启用OSD叠加对应(无),启用对应(进入/离开),4-经过人数,5-进入和经过。 + BYTE byCurDetectType;//当前检测区域类型,0-多边形,1-检测线, 2-折线检测 + BYTE byInterferenceSuppression; //干扰抑制,按位表示,0-未勾选,1-勾选,bit0-阴影,bit1-徘徊,bit2-推车 + NET_VCA_POINT struOSDPoint;//客流统计显示OSD显示左上角坐标 + //客流量检测数据上传周期(0-15、1-1、2-5、3-10、4-20、5-30、6-60)单位:分钟 BYTE byDataUploadCycle; - //ÿϴʹܣ0-رգ1- + //每秒上传机制使能(0-关闭,1-开启) BYTE bySECUploadEnable; - BYTE byEmailDayReport;//ձʹ 0-رգ1- - BYTE byEmailWeekReport;//ܱʹ 0-رգ1- - BYTE byEmailMonthReport;//±ʹ0-رգ1- - BYTE byEmailYearReport;//걨ʹ0-رգ1- - BYTE byRes2[6];// ֽ - NET_VCA_POLYGON struPolygon; // - NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 뷽 - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - NET_DVR_TIME_EX struDayStartTime; //쿪ʼʱ䣬ʱЧ - NET_DVR_TIME_EX struNightStartTime; //ҹʼʱ䣬ʱЧ - NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*ʽ ֧ϴ*/ - BYTE byDetecteSensitivity;//ĿȣΧ1-100Ĭ50 - BYTE byGenerateSpeedSpace;//Ŀٶȣ򣩣Χ1-100Ĭ50 - BYTE byGenerateSpeedTime;// Ŀٶȣʱ򣩣Χ1-100Ĭ50 - BYTE byCountSpeed;// ٶȣΧ1-100Ĭ50 - BYTE byDetecteType;// Ŀͣ0-Զ1-ͷ2-ͷ磬Ĭ0-ԶԶģʽDSP㷨IJø㷨 - BYTE byTargetSizeCorrect;//ĿߴΧ1-100Ĭ50 - BYTE byStreamOverlayRuleInfos;//Ϣ 0-1- - BYTE byRes3;// ֽ - NET_VCA_LINE struLine;// - BYTE byHeightFilterEnable;//߶ȹǷ0-1-رգ2- - BYTE byDetectThreshold;//ֵ,Χ[0,100],Ĭ 90(ڲʹãݲ)趨㷨бĿŶֵŶȵڸֵĿ꣬ڸټ - BYTE byAidedTrackEnabled;//أ0~1~رգĬϿ(ڲʹ) ڿ͹ر㷨ģеĹԱӾ׼ȡ + BYTE byEmailDayReport;//客流日报表使能 0-关闭,1-开启 + BYTE byEmailWeekReport;//客流周报表使能 0-关闭,1-开启 + BYTE byEmailMonthReport;//客流月报表使能0-关闭,1-开启 + BYTE byEmailYearReport;//客流年报表使能0-关闭,1-开启 + BYTE byRes2[6];// 保留字节 + NET_VCA_POLYGON struPolygon; // 多边形 + NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 流量进入方向 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_TIME_EX struDayStartTime; //白天开始时间,时分秒有效 + NET_DVR_TIME_EX struNightStartTime; //夜晚开始时间,时分秒有效 + NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*处理方式 仅支持上传中心*/ + BYTE byDetecteSensitivity;//目标检测灵敏度:范围1-100,默认50 + BYTE byGenerateSpeedSpace;//目标生成速度(空域):范围1-100,默认50 + BYTE byGenerateSpeedTime;// 目标生成速度(时域):范围1-100,默认50 + BYTE byCountSpeed;// 计数速度:范围1-100,默认50 + BYTE byDetecteType;// 目标检测类型:0-自动,1-人头,2-头肩,默认0-自动,自动模式下DSP调整算法的参数配置给算法库 + BYTE byTargetSizeCorrect;//目标尺寸修正:范围1-100,默认50 + BYTE byStreamOverlayRuleInfos;//码流智能信息叠加 0-否,1-是 + BYTE byRes3;// 保留字节 + NET_VCA_LINE struLine;//检测线 + BYTE byHeightFilterEnable;//高度过滤是否开启,0-保留,1-关闭,2-开启 + BYTE byDetectThreshold;//检测阈值,范围[0,100],默认 90(内部使用,暂不开放)用于设定算法库中被检测目标的置信度阈值,置信度低于该阈值的目标,不用于跟踪计数; + BYTE byAidedTrackEnabled;//辅助开关,0~开启、1~关闭,默认开启(内部使用) 用于开启和关闭算法模块中的光流辅助,客流人员,增加精准度。 BYTE byRes4; - float fHeightFilter;//˸߶ȣλףĬֵ120ףΧ40-200סbyHeightFilterEnableΪ2DzЧ - BYTE byCalibrateType;//궨ͣ0-δб궨1-Զ궨2-ֶ궨 - BYTE byCountingType;//ʽ 0-,1-봥,2-Ƶ - BYTE bySignalType;//ź 0-ƽ1- - BYTE byRS485TransmissionEnabled;//485 0-رգ1- - float fTiltAngle;//,λȣĬֵ0ǷΧ0-180,ֻ - float fHeelAngle;//б,λȣбĬֵ0бǷΧ-90-90,ֻ - float fHeight;//߶ȣ߶ȵλף߶Ĭֵ300ף߶ȷΧ200-500,byCalibrateTypeΪ2ʱЧʱֻ - NET_VCA_POLYGON struCountPolygon;//򣺸òĬΪֻԣͨзڵ㣬ò֧á - NET_VCA_POLYGON struAutoCalibPolygon;//궨򣬵byCalibrateTypeΪ1ʱЧ - NET_DVR_TIME_EX struDailyResetTime; //ʱ - NET_VCA_POLYLINE struPolyLine;//߼ߺstruLineʾ - BYTE byRes[4]; //ֽ + float fHeightFilter;//过滤高度,单位:厘米,默认值:120厘米,范围:40-200厘米。byHeightFilterEnable为2是才有效 + BYTE byCalibrateType;//标定类型,0-未进行标定,1-自动标定,2-手动标定 + BYTE byCountingType;//计数触发方式 0-无,1-报警输入触发,2-视频分析触发 + BYTE bySignalType;//信号类型 0-电平,1-脉冲 + BYTE byRS485TransmissionEnabled;//启用485传输 0-关闭,1-开启 + float fTiltAngle;//俯仰角,单位:度;俯仰角默认值:0;俯仰角范围:0-180度,只读 + float fHeelAngle;//倾斜角,单位:度;倾斜角默认值:0;倾斜角范围:-90-90度,只读 + float fHeight;//高度,高度单位:厘米;高度默认值300厘米:高度范围:200-500厘米,当byCalibrateType为2时设置有效,其余时只读 + NET_VCA_POLYGON struCountPolygon;//计数区域:该参数默认为只读属性,若智能通道分析能力中返回了能力节点,则代表该参数支持配置。 + NET_VCA_POLYGON struAutoCalibPolygon;//标定区域,当byCalibrateType为1时有效 + NET_DVR_TIME_EX struDailyResetTime; //定时清零 + NET_VCA_POLYLINE struPolyLine;//折线检测区域(配置折线后,struLine不做显示) + BYTE byRes[4]; //保留字节 }NET_DVR_PDC_RULE_CFG_V42, *LPNET_DVR_PDC_RULE_CFG_V42; -/********* IPC5.1.7 ͳƹ End 2014-03-21***********/ +/********* IPC5.1.7 人流量统计规则 End 2014-03-21***********/ -//ðϢṹ +//试用版信息结构体 typedef struct tagNET_DVR_TRIAL_VERSION_CFG { DWORD dwSize; - WORD wReserveTime; //ʣʱ䣬0xffffʾЧλ + WORD wReserveTime; //试用期剩余时间,0xffff表示无效,单位:天 BYTE byRes[62]; }NET_DVR_TRIAL_VERSION_CFG, *LPNET_DVR_TRIAL_VERSION_CFG; typedef struct tagNET_DVR_SYN_CHANNEL_NAME_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ + DWORD dwChannel; //通道号 BYTE byRes[64]; }NET_DVR_SYN_CHANNEL_NAME_PARAM, *LPNET_DVR_SYN_CHANNEL_NAME_PARAM; typedef struct tagNET_DVR_RESET_COUNTER_CFG { DWORD dwSize; - BYTE byEnable; //Ƿã0-ã1- - BYTE byMode; //Чģʽ0-ʱ1-ֶ + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byMode; //生效模式,0-定时,1-手动 BYTE byRes1[2]; - NET_DVR_TIME_EX struTime[MAX_DAYS];//ʱ䣬ʱЧ + NET_DVR_TIME_EX struTime[MAX_DAYS];//数据清零时间,时分秒有效 BYTE byRes[64]; }NET_DVR_RESET_COUNTER_CFG, *LPNET_DVR_RESET_COUNTER_CFG; @@ -17099,112 +17099,112 @@ typedef struct tagNET_DVR_VCA_CTRLINFO_COND BYTE byRes[64]; }NET_DVR_VCA_CTRLINFO_COND, *LPNET_DVR_VCA_CTRLINFO_COND; -#define NET_SDK_MAX_RELATED_CHAN_NUM 4 //ͨ +#define NET_SDK_MAX_RELATED_CHAN_NUM 4 //最大关联通道数 typedef struct tagNET_DVR_VCA_CTRLINFO_CFG { DWORD dwSize; - BYTE byVCAEnable; //Ƿ - BYTE byVCAType; //ͣVCA_CHAN_ABILITY_TYPE - BYTE byStreamWithVCA; //ǷϢ - BYTE byMode; //ģʽATM ʱVCA_CHAN_MODE_TYPE ,TFS ʱ TFS_CHAN_MODE_TYPE쳣ΪʱBEHAVIOR_SCENE_MODE_TYPE - BYTE byControlType; //ͣλʾ0-1- - //byControlType &1 ǷץĹ - //byControlType &2 Ƿǰ豸 + BYTE byVCAEnable; //是否开启智能 + BYTE byVCAType; //智能能力类型,VCA_CHAN_ABILITY_TYPE + BYTE byStreamWithVCA; //码流中是否带智能信息 + BYTE byMode; //模式,ATM 能力时参照VCA_CHAN_MODE_TYPE ,TFS 能力时参照 TFS_CHAN_MODE_TYPE,异常行为检测完整版时参照BEHAVIOR_SCENE_MODE_TYPE + BYTE byControlType; //控制类型,按位表示,0-否,1-是 + //byControlType &1 是否启用抓拍功能 + //byControlType &2 是否启用联动前端设备 BYTE byRes1[3]; - WORD wRelatedChannel[NET_SDK_MAX_RELATED_CHAN_NUM/*4*/];/*ͨţ0-ǰATM豸ʹãͨģʽΪATMʱԹһ·ATMͨ*/ - BYTE byRes[72]; //Ϊ0 + WORD wRelatedChannel[NET_SDK_MAX_RELATED_CHAN_NUM/*4*/];/*关联通道号,0-不关联(当前仅ATM设备使用,当设置通道模式为ATM面板时,可以关联一路ATM人脸通道)*/ + BYTE byRes[72]; //保留,设置为0 }NET_DVR_VCA_CTRLINFO_CFG, *LPNET_DVR_VCA_CTRLINFO_CFG; -//ͳƲ Ϊڲؼֲ +//设置人流量统计参数 复用行为内部关键字参数 // HUMAN_GENERATE_RATE -// ĿٶȲPDCĿٶȡٶԽ죬ĿԽɡƵϲԱȶȽϵʱõĹСʱӦӿĿٶȣ Ŀ©죻ƵжԱȶȽϸʱ߹ϴʱӦýĿٶȣԼ졣ĿٶȲ51ٶ5죬ĬϲΪ3 +// 目标生成速度参数,控制PDC库生成目标的速度。速度越快,目标越容易生成。当输入视频光照条件较差,对比度较低时,或者设置的规则区域较小时,应加快目标生成速度, 避免目标的漏检;当输入视频中对比度较高时,或者规则区域较大时,应该降低目标生成速度,以减少误检。目标生成速度参数共有5级,1级速度最慢,5级最快,默认参数为3。 // // DETECT_SENSITIVE -// ĿȿƲPDCһ򱻼ΪĿȡԽߣԽױΪĿ꣬ԽԽѼΪĿꡣƵϲԱȶȽϵʱӦ߼ȣ Ŀ©죻ƵжԱȶȽϸʱӦýͼȣԼ졣Ӧ51ͣ5ߣĬϼΪ3 +// 目标检测灵敏度控制参数,控制PDC库中一个矩形区域被检测为目标的灵敏度。灵敏度越高,矩形区域越容易被检测为目标,灵敏度越低则越难检测为目标。当输入视频光照条件较差,对比度较低时,应提高检测灵敏度, 避免目标的漏检;当输入视频中对比度较高时,应该降低检测灵敏度,以减少误检。对应参数共有5级,级别1灵敏度最低,5级最高,默认级别为3。 // TRAJECTORY_LEN -// ɳȿƲʾʱҪĿλءӦ51ɳ5ɳ̣죬ĬϼΪ3 +// 生成长度控制参数,表示生成时要求目标的最大位移像素。对应参数共有5级,级别1,生成长度最长,生成最慢,5级生成长度最短,生成最快,默认级别为3。 // TRAJECT_CNT_LEN -// ȿƲʾʱҪĿλءӦ51Ҫ󳤶5Ҫ󳤶̣죬ĬϼΪ3 +// 计数长度控制参数,表示计数时要求目标的最大位移像素。对应参数共有5级,级别1,计数要求长度最长,计数最慢,5级计数要求长度最短,计数最快,默认级别为3。 // PREPROCESS -// ͼԤƲ0 - 1 - ĬΪ0 +// 图像预处理控制参数,0 - 不处理;1 - 处理。默认为0; // CAMERA_ANGLE -// Ƕ 0 - б 1 - ֱĬΪ0 +// 摄像机角度输入参数, 0 - 倾斜; 1 - 垂直。默认为0; typedef enum tagPDC_PARAM_KEY { - HUMAN_GENERATE_RATE = 50, // Ŀٶ 50ʼ - DETECT_SENSITIVE = 51, // + HUMAN_GENERATE_RATE = 50, // 目标生成速度 从50开始 + DETECT_SENSITIVE = 51, // 检测灵敏度 }PDC_PARAM_KEY; typedef struct tagNET_DVR_PDC_TARGET_INFO { - DWORD dwTargetID; // Ŀid - NET_VCA_RECT struTargetRect; // Ŀ - BYTE byRes1[8]; // ֽ + DWORD dwTargetID; // 目标id + NET_VCA_RECT struTargetRect; // 目标框 + BYTE byRes1[8]; // 保留字节 }NET_DVR_PDC_TARGET_INFO, *LPNET_DVR_PDC_TARGET_INFO; typedef struct tagNET_DVR_PDC_TARGET_IN_FRAME { - BYTE byTargetNum; //Ŀ + BYTE byTargetNum; //目标个数 BYTE byRes1[3]; - NET_DVR_PDC_TARGET_INFO struTargetInfo[MAX_TARGET_NUM]; //ĿϢ - BYTE byRes2[8]; // ֽ + NET_DVR_PDC_TARGET_INFO struTargetInfo[MAX_TARGET_NUM]; //目标信息数组 + BYTE byRes2[8]; // 保留字节 }NET_DVR_PDC_TARGET_IN_FRAME, *LPNET_DVR_PDC_TARGET_IN_FRAME; typedef struct tagNET_DVR_PDC_ALRAM_INFO { - DWORD dwSize; // PDCϴṹС - BYTE byMode; // 0 ֡ͳƽ 1Сʱͳƽ 2 źڡͳʼʱ䡱&&ͳƽʱ䡱 - BYTE byChannel; // ϴͨ - /********* IPC5.1.7 Begin 2014-03-21***********/ - BYTE bySmart; //רҵܷ0Smart 1 - BYTE byRes1; // ֽ - /********* IPC5.1.7 End 2014-03-21***********/ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ + DWORD dwSize; // PDC人流量报警上传结构体大小 + BYTE byMode; // 0 单帧统计结果 1最小时间段统计结果 2 信号量触发(结果存在“统计起始时间”&&“统计结束时间”) + BYTE byChannel; // 报警上传通道号 + /********* IPC5.1.7 新增参数 Begin 2014-03-21***********/ + BYTE bySmart; //专业智能返回0,Smart 返回 1 + BYTE byRes1; // 保留字节 + /********* IPC5.1.7 新增参数 End 2014-03-21***********/ + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 union { - struct // ֡ͳƽʱʹ + struct // 单帧统计结果时使用 { - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,byTimeDiffFlagΪ1ʱЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾbyTimeDiffFlagΪ1ʱЧ*/ + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ BYTE byRes[89]; }struStatFrame; struct { - NET_DVR_TIME tmStart; // ͳʼʱ - NET_DVR_TIME tmEnd; // ͳƽʱ - BYTE byTimeDifferenceFlag; /*0-ĬΪcStartTimeDifferenceH,ʱϢЧ1-ʱϢЧ*/ - char cStartTimeDifferenceH; /*ʼʱUTCʱСʱ-12 ... +14+ʾ*/ - char cStartTimeDifferenceM; /*ʼʱUTCʱӣ-30, 30, 45+ʾ*/ - char cStopTimeDifferenceH; /*ʱUTCʱСʱ-12 ... +14+ʾ*/ - char cStopTimeDifferenceM; /*ʱUTCʱӣ-30, 30, 45+ʾ*/ + NET_DVR_TIME tmStart; // 统计起始时间 + NET_DVR_TIME tmEnd; // 统计结束时间 + BYTE byTimeDifferenceFlag; /*0-默认行为,cStartTimeDifferenceH,等时差信息无效,1-时差信息有效*/ + char cStartTimeDifferenceH; /*开始时间与UTC的时差(小时),-12 ... +14,+表示东区*/ + char cStartTimeDifferenceM; /*开始时间与UTC的时差(分钟),-30, 30, 45,+表示东区*/ + char cStopTimeDifferenceH; /*结束时间与UTC的时差(小时),-12 ... +14,+表示东区*/ + char cStopTimeDifferenceM; /*结束时间与UTC的时差(分钟),-30, 30, 45,+表示东区*/ BYTE byRes[87]; }struStatTime; - }uStatModeParam; // Ϊһ ֡ʱ֡ĿϢ СʱͳƽҪͳʱ - DWORD dwLeaveNum; // 뿪 - DWORD dwEnterNum; // - BYTE byBrokenNetHttp; //־λ0-شݣ1-ش + }uStatModeParam; // 作为一个联合体 单帧的时候才有帧内目标信息 最小时间段统计结果需要统计时间 参数 + DWORD dwLeaveNum; // 离开人数 + DWORD dwEnterNum; // 进入人数 + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 BYTE byRes3; - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - DWORD dwPassingNum; // ǻûд롢뿪 - DWORD dwChildLeaveNum; // С뿪 - DWORD dwChildEnterNum; // С - DWORD dwDuplicatePeople; // ظ - DWORD dwXmlLen;//XML͸ݳ, EventNotificationAlert XML Blockݳ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pXmlBuf; // XMLϢָ,XMLӦEventNotificationAlert XML Block + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx + DWORD dwPassingNum; // 经过人数(进入区域后徘徊没有触发进入、离开的人数) + DWORD dwChildLeaveNum; // 小孩离开人数 + DWORD dwChildEnterNum; // 小孩进入人数 + DWORD dwDuplicatePeople; // 重复人数 + DWORD dwXmlLen;//XML透传数据长度, 即EventNotificationAlert XML Block的数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block #else - char* pXmlBuf; // XMLϢָ,XMLӦEventNotificationAlert XML Block + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block BYTE byRes4[4]; #endif - BYTE byRes2[8]; // ֽ + BYTE byRes2[8]; // 保留字节 }NET_DVR_PDC_ALRAM_INFO, *LPNET_DVR_PDC_ALRAM_INFO; -// Ϣѯ +// 人流量信息查询 typedef struct tagNET_DVR_PDC_QUERY { NET_DVR_TIME tmStart; @@ -17216,859 +17216,859 @@ typedef struct tagNET_DVR_PDC_QUERY typedef struct tagNET_DVR_POSITION_RULE_CFG { - DWORD dwSize; // ṹС - NET_DVR_PTZ_POSITION struPtzPosition; // λϢ - NET_VCA_RULECFG struVcaRuleCfg; //Ϊ - BYTE byRes2[80]; // ֽ + DWORD dwSize; // 结构大小 + NET_DVR_PTZ_POSITION struPtzPosition; // 场景位置信息 + NET_VCA_RULECFG struVcaRuleCfg; //行为规则配置 + BYTE byRes2[80]; // 保留字节 }NET_DVR_POSITION_RULE_CFG, *LPNET_DVR_POSITION_RULE_CFG; typedef struct tagNET_DVR_POSITION_RULE_CFG_V41 { - DWORD dwSize; // ṹС - NET_DVR_PTZ_POSITION struPtzPosition; // λϢ - NET_VCA_RULECFG_V41 struVcaRuleCfg; //Ϊ - BYTE byTrackEnable; //Ƿ + DWORD dwSize; // 结构大小 + NET_DVR_PTZ_POSITION struPtzPosition; // 场景位置信息 + NET_VCA_RULECFG_V41 struVcaRuleCfg; //行为规则配置 + BYTE byTrackEnable; //是否启用 BYTE byRes1; - WORD wTrackDuration; //ʱ䣬λs - BYTE byRes2[76]; // ֽ + WORD wTrackDuration; //持续时间,单位s + BYTE byRes2[76]; // 保留字节 }NET_DVR_POSITION_RULE_CFG_V41, *LPNET_DVR_POSITION_RULE_CFG_V41; typedef struct tagNET_DVR_LIMIT_ANGLE { - BYTE byEnable; // Ƿóλ + BYTE byEnable; // 是否启用场景限位功能 BYTE byRes1[3]; - NET_DVR_PTZPOS struUp; // λ - NET_DVR_PTZPOS struDown; // λ - NET_DVR_PTZPOS struLeft; // λ - NET_DVR_PTZPOS struRight; // λ + NET_DVR_PTZPOS struUp; // 上限位 + NET_DVR_PTZPOS struDown; // 下限位 + NET_DVR_PTZPOS struLeft; // 左限位 + NET_DVR_PTZPOS struRight; // 右限位 BYTE byRes2[20]; }NET_DVR_LIMIT_ANGLE, *LPNET_DVR_LIMIT_ANGLE; typedef struct tagNET_DVR_POSITION_INDEX { - BYTE byIndex; // + BYTE byIndex; // 场景索引 BYTE byRes1; - WORD wDwell; // ͣʱ - BYTE byRes2[4]; // ֽ + WORD wDwell; // 停留时间 + BYTE byRes2[4]; // 保留字节 }NET_DVR_POSITION_INDEX, *LPNET_DVR_POSITION_INDEX; #define MAX_POSITION_NUM 10 typedef struct tagNET_DVR_POSITION_TRACK_CFG { DWORD dwSize; - BYTE byNum; // + BYTE byNum; // 场景个数 BYTE byRes1[3]; NET_DVR_POSITION_INDEX struPositionIndex[MAX_POSITION_NUM]; BYTE byRes2[8]; }NET_DVR_POSITION_TRACK_CFG, *LPNET_DVR_POSITION_TRACK_CFG; -//Ѳ·Ϣ +//巡航路径场景信息 typedef struct tagNET_DVR_PATROL_SCENE_INFO { - WORD wDwell; // ͣʱ 30-300 - BYTE byPositionID; // 1-10Ĭ0ʾѲ㲻ӳ + WORD wDwell; // 停留时间 30-300 + BYTE byPositionID; // 场景号1-10,默认0表示该巡航点不添加场景 BYTE byRes[5]; }NET_DVR_PATROL_SCENE_INFO, *LPNET_DVR_PATROL_SCENE_INFO; -// ѲϢ +// 场景巡航配置信息 typedef struct tagNET_DVR_PATROL_TRACKCFG { - DWORD dwSize; // ṹС - NET_DVR_PATROL_SCENE_INFO struPatrolSceneInfo[10]; // Ѳ· - BYTE byRes[16]; // ֽ + DWORD dwSize; // 结构大小 + NET_DVR_PATROL_SCENE_INFO struPatrolSceneInfo[10]; // 巡航路径 + BYTE byRes[16]; // 保留字节 }NET_DVR_PATROL_TRACKCFG, *LPNET_DVR_PATROL_TRACKCFG; -//ع˵ýṹ +//球机本地规则菜单配置结构体 typedef struct tagNET_DVR_TRACK_PARAMCFG { - DWORD dwSize; // ṹС - WORD wAlarmDelayTime; // ʱʱ䣬Ŀǰֻ֧ȫ Χ1-120 - WORD wTrackHoldTime; // ʱ Χ0-300 - BYTE byTrackMode; // IPDOME_TRACK_MODE - BYTE byPreDirection; // Ԥ 0- 1- - BYTE byTrackSmooth; // 0- 1- - BYTE byZoomAdjust; // ϵ μ± - BYTE byMaxTrackZoom; //ϵ,0-ʾĬϱϵ,ȼ6-궨ֵ*1.0(Ĭ),1-5ΪС궨ֵֵԽССıԽ,7-15ΪŴֵԽ󣬷ŴıԽ - BYTE byStopTrackWhenFindFace; //⵽Ƿֹͣ 0- 1- - BYTE byStopTrackThreshold; //ֵֹ - BYTE byRes[9]; // ֽ + DWORD dwSize; // 结构大小 + WORD wAlarmDelayTime; // 报警延时时间,目前球机只支持全局入侵 范围1-120秒 + WORD wTrackHoldTime; // 报警持续时间 范围0-300秒 + BYTE byTrackMode; // 参照 IPDOME_TRACK_MODE + BYTE byPreDirection; // 方向预判 0-不启用 1-启用 + BYTE byTrackSmooth; // 连续 0-不启用 1-启用 + BYTE byZoomAdjust; // 倍率系数调整 参见下表 + BYTE byMaxTrackZoom; //最大倍率系数,0-表示默认倍率系数,等级6-标定值*1.0(默认),1-5为缩小标定值,值越小,缩小的比例越大,7-15为放大,值越大,放大的比例越大 + BYTE byStopTrackWhenFindFace; //人脸检测到后是否停止 0-否 1-是 + BYTE byStopTrackThreshold; //终止评分阈值 + BYTE byRes[9]; // 保留字节 }NET_DVR_TRACK_PARAMCFG, *LPNET_DVR_TRACK_PARAMCFG; -// о +// 球机机芯参数 typedef struct tagNET_DVR_DOME_MOVEMENT_PARAM { - WORD wMaxZoom; // ϵ - BYTE byRes[42]; // ֽ + WORD wMaxZoom; // 球机最大倍率系数 + BYTE byRes[42]; // 保留字节 }NET_DVR_DOME_MOVEMENT_PARAM, *LPNET_DVR_DOME_MOVEMENT_PARAM; -/********************************ܽͨ¼ begin****************************************/ -#define MAX_REGION_NUM 8 // бĿ -#define MAX_TPS_RULE 8 // Ŀ -#define MAX_AID_RULE 8 // ¼Ŀ -#define MAX_LANE_NUM 8 // 󳵵Ŀ +/********************************智能交通事件 begin****************************************/ +#define MAX_REGION_NUM 8 // 区域列表最大数目 +#define MAX_TPS_RULE 8 // 最大参数规则数目 +#define MAX_AID_RULE 8 // 最大事件规则数目 +#define MAX_LANE_NUM 8 // 最大车道数目 -//ͨ¼ͣ +//交通事件类型, typedef enum tagTRAFFIC_AID_TYPE { - CONGESTION = 0x01, //ӵ - PARKING = 0x02, //ͣ - INVERSE = 0x04, // - PEDESTRIAN = 0x08, // - DEBRIS = 0x10, // Ƭ - SMOKE = 0x20, // - OVERLINE = 0x40, //ѹ - VEHICLE_CONTROL_LIST = 0x80, //ֹ - SPEED = 0x100, // - LANECHANGE = 0x200, // - TURNAROUND = 0x400, //ͷ - VEHICLE_OCCUPANCY_NONVEHICLE = 0x800, //ռ÷ǻλ - GASSER = 0x1000, // - ROADBLOCK = 0x2000, //· - CONSTRUCTION = 0x4000, //ʩ - TRAFFIC_ACCIDENT = 0x8000, //ͨ¹ʼ⣨ͨ¹Ŀǰ¹ʣ׷βв㷨жϳ복֮н棬򱨾 - PARALLEL_PARKING = 0x10000, //෽λͣ - FOG_DETECTION = 0x20000, //Ũ - OCCUPY_EMERGENCY_LANE = 0x40000, //ռý - CONFLAGRATION = 0X80000, // - TFS_MANUAL_TRIGGER = 0x100000, //ֶΥȡ֤¼ - LOADING_DOCK_TRIGGER_UPLOAD = 0x200000, //̨ϴ - OCCUPY_OVERTAKING_LANE = 0x400000, //ռó - PROHIBITION_MARK_VIOLATION = 0x800000, //Υ־ - CHECK_POINT = 0x1000000, // - SUDDEN_SPEED_DROP = 0x2000000, //ٶ轵 - SLOW_MOVING = 0x4000000, // - CHANGE_LANE_CONTINUOUSLY = 0x8000000, // - S_SHARP_DRIVING = 0x10000000, //ʻ + CONGESTION = 0x01, //拥堵 + PARKING = 0x02, //停车 + INVERSE = 0x04, //逆行 + PEDESTRIAN = 0x08, //行人 + DEBRIS = 0x10, //遗留物 抛洒物碎片 + SMOKE = 0x20, //烟雾 + OVERLINE = 0x40, //压线 + VEHICLE_CONTROL_LIST = 0x80, //禁止名单数据 + SPEED = 0x100, //超速 + LANECHANGE = 0x200, //变道 + TURNAROUND = 0x400, //掉头 + VEHICLE_OCCUPANCY_NONVEHICLE = 0x800, //机动车占用非机动车位 + GASSER = 0x1000, //加塞 + ROADBLOCK = 0x2000, //路障 + CONSTRUCTION = 0x4000, //施工 + TRAFFIC_ACCIDENT = 0x8000, //交通事故检测(交通事故目前先做车车事故,追尾、剐蹭等算法判断车与车之间有交叉,其他车辆绕行则报警) + PARALLEL_PARKING = 0x10000, //侧方位停车检测 + FOG_DETECTION = 0x20000, //浓雾检测 + OCCUPY_EMERGENCY_LANE = 0x40000, //占用紧急车道 + CONFLAGRATION = 0X80000, //火灾 + TFS_MANUAL_TRIGGER = 0x100000, //手动违章取证事件 + LOADING_DOCK_TRIGGER_UPLOAD = 0x200000, //月台触发上传 + OCCUPY_OVERTAKING_LANE = 0x400000, //占用超车道 + PROHIBITION_MARK_VIOLATION = 0x800000, //违反禁令标志 + CHECK_POINT = 0x1000000, //卡口 + SUDDEN_SPEED_DROP = 0x2000000, //速度骤降 + SLOW_MOVING = 0x4000000, //车辆缓行 + CHANGE_LANE_CONTINUOUSLY = 0x8000000, //连续变道 + S_SHARP_DRIVING = 0x10000000, //蛇形行驶 }TRAFFIC_AID_TYPE; typedef enum tagTRAFFIC_SCENE_MODE { - FREEWAY = 0, // ٻⳡ - TUNNEL, // - BRIDGE // + FREEWAY = 0, // 高速户外场景 + TUNNEL, // 高速隧道场景 + BRIDGE // 高速桥梁场景 }TRAFFIC_SCENE_MODE; typedef enum tagITS_ABILITY_TYPE { - ITS_CONGESTION_ABILITY = 0x01, //ӵ - ITS_PARKING_ABILITY = 0x02, //ͣ - ITS_INVERSE_ABILITY = 0x04, // - ITS_PEDESTRIAN_ABILITY = 0x08, // - ITS_DEBRIS_ABILITY = 0x10, // Ƭ - ITS_SMOKE_ABILITY = 0x20, //- - ITS_OVERLINE_ABILITY = 0x40, //ѹ - ITS_VEHICLE_CONTROL_LIST_ABILITY = 0x80, //ֹ - ITS_SPEED_ABILITY = 0x100, // - ITS_LANECHANGE_ABILITY = 0x200, // - ITS_TURNAROUND_ABILITY = 0x400, //ͷ - ITS_LANE_VOLUME_ABILITY = 0x010000, // - ITS_LANE_VELOCITY_ABILITY = 0x020000, //ƽٶ - ITS_TIME_HEADWAY_ABILITY = 0x040000, //ͷʱ - ITS_SPACE_HEADWAY_ABILITY = 0x080000, //ͷ - ITS_TIME_OCCUPANCY_RATIO_ABILITY = 0x100000, //ռʣʱ) - ITS_SPACE_OCCUPANCY_RATIO_ABILITY = 0x200000, //ռʣٷֱȼ㣨ռ) - ITS_LANE_QUEUE_ABILITY = 0x400000, //Ŷӳ - ITS_VEHICLE_TYPE_ABILITY = 0x800000, // - ITS_TRAFFIC_STATE_ABILITY = 0x1000000 //ͨ״̬ + ITS_CONGESTION_ABILITY = 0x01, //拥堵 + ITS_PARKING_ABILITY = 0x02, //停车 + ITS_INVERSE_ABILITY = 0x04, //逆行 + ITS_PEDESTRIAN_ABILITY = 0x08, //行人 + ITS_DEBRIS_ABILITY = 0x10, //遗留物 抛洒物碎片 + ITS_SMOKE_ABILITY = 0x20, //烟雾-隧道 + ITS_OVERLINE_ABILITY = 0x40, //压线 + ITS_VEHICLE_CONTROL_LIST_ABILITY = 0x80, //禁止名单数据 + ITS_SPEED_ABILITY = 0x100, //超速 + ITS_LANECHANGE_ABILITY = 0x200, //变道 + ITS_TURNAROUND_ABILITY = 0x400, //掉头 + ITS_LANE_VOLUME_ABILITY = 0x010000, //车道流量 + ITS_LANE_VELOCITY_ABILITY = 0x020000, //车道平均速度 + ITS_TIME_HEADWAY_ABILITY = 0x040000, //车头时距 + ITS_SPACE_HEADWAY_ABILITY = 0x080000, //车头间距 + ITS_TIME_OCCUPANCY_RATIO_ABILITY = 0x100000, //车道占有率,(时间上) + ITS_SPACE_OCCUPANCY_RATIO_ABILITY = 0x200000, //车道占有率,百分比计算(空间上) + ITS_LANE_QUEUE_ABILITY = 0x400000, //排队长度 + ITS_VEHICLE_TYPE_ABILITY = 0x800000, //车辆类型 + ITS_TRAFFIC_STATE_ABILITY = 0x1000000 //交通状态 }ITS_ABILITY_TYPE; -// ͨͳƲ +// 交通统计参数 typedef enum tagITS_TPS_TYPE { - LANE_VOLUME = 0x01, // - LANE_VELOCITY = 0x02, //ٶ - TIME_HEADWAY = 0x04, //ͷʱ - SPACE_HEADWAY = 0x08, //ͷ - TIME_OCCUPANCY_RATIO = 0x10, //ռ (ʱ) - SPACE_OCCUPANCY_RATIO = 0x20, //ռʣٷֱȼ(ռ) - QUEUE = 0x40, //Ŷӳ - VEHICLE_TYPE = 0x80, // - TRAFFIC_STATE = 0x100 //ͨ״̬ + LANE_VOLUME = 0x01, //车道流量 + LANE_VELOCITY = 0x02, //车道速度 + TIME_HEADWAY = 0x04, //车头时距 + SPACE_HEADWAY = 0x08, //车头间距 + TIME_OCCUPANCY_RATIO = 0x10, //车道占有率 (时间上) + SPACE_OCCUPANCY_RATIO = 0x20, //车道占有率,百分比计算(空间上) + QUEUE = 0x40, //排队长度 + VEHICLE_TYPE = 0x80, //车辆类型 + TRAFFIC_STATE = 0x100 //交通状态 }ITS_TPS_TYPE; typedef struct tagNET_DVR_REGION_LIST { - DWORD dwSize; // ṹС - BYTE byNum; // - BYTE byRes1[3]; // ֽ - NET_VCA_POLYGON struPolygon[MAX_REGION_NUM]; // - BYTE byRes2[20]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byNum; // 区域个数 + BYTE byRes1[3]; // 保留字节 + NET_VCA_POLYGON struPolygon[MAX_REGION_NUM]; // 区域 + BYTE byRes2[20]; // 保留字节 }NET_DVR_REGION_LIST,*LPNET_DVR_REGION_LIST; -// ṹ +// 方向结构体 typedef struct tagNET_DVR_DIRECTION { - NET_VCA_POINT struStartPoint; // ʼ - NET_VCA_POINT struEndPoint; // + NET_VCA_POINT struStartPoint; // 方向起始点 + NET_VCA_POINT struEndPoint; // 方向结束点 }NET_DVR_DIRECTION, *LPNET_DVR_DIRECTION; -// +// 单个车道 typedef struct tagNET_DVR_ONE_LANE { - BYTE byEnable; // Ƿ - BYTE byRes1[11]; // ֽ - BYTE byLaneName[NAME_LEN]; // - NET_DVR_DIRECTION struFlowDirection;// ڳ - NET_VCA_POLYGON struPolygon; // + BYTE byEnable; // 车道是否启用 + BYTE byRes1[11]; // 保留字节 + BYTE byLaneName[NAME_LEN]; // 车道规则名称 + NET_DVR_DIRECTION struFlowDirection;// 车道内车流方向 + NET_VCA_POLYGON struPolygon; // 车道区域 }NET_DVR_ONE_LANE, *LPNET_DVR_ONE_LANE; -// +// 车道配置 typedef struct tagNET_DVR_LANE_CFG { - DWORD dwSize; // ṹС - NET_DVR_ONE_LANE struLane[MAX_LANE_NUM]; // ±ΪID - BYTE byRes1[40]; // ֽ + DWORD dwSize; // 结构体大小 + NET_DVR_ONE_LANE struLane[MAX_LANE_NUM]; // 车道参数 数组下标作为车道ID, + BYTE byRes1[40]; // 保留字节 }NET_DVR_LANE_CFG, *LPNET_DVR_LANE_CFG; -// ͨ¼ +// 交通事件参数 typedef struct tagNET_DVR_AID_PARAM { - WORD wParkingDuration; // Υͣ 10-120s - WORD wPedestrianDuration; // ˳ʱ 1-120s - WORD wDebrisDuration; // ʱ 10-120s - WORD wCongestionLength; // ӵ³ֵ 5-200ף - WORD wCongestionDuration; // ӵ³ 10-120s - WORD wInverseDuration; // гʱ 1-10s - WORD wInverseDistance; // оֵ λm Χ[2-100] Ĭ 10 - WORD wInverseAngleTolerance; // Ƕƫ 90-180,ļн - WORD wIllegalParkingTime; // Υͣʱ[4,60]λ ,TFS(ͨΥȡ֤) ģʽ - WORD wIllegalParkingPicNum; // ΥͣͼƬ[1,6], TFS(ͨΥȡ֤) ģʽ - BYTE byMergePic; // ͼƬƴ,TFS ģʽ 0- ƴ 1- ƴ - BYTE byRes1[23]; // ֽ + WORD wParkingDuration; // 违停检测灵敏度 10-120s + WORD wPedestrianDuration; // 行人持续时间 1-120s + WORD wDebrisDuration; // 抛洒物持续时间 10-120s + WORD wCongestionLength; // 拥堵长度阈值 5-200(米) + WORD wCongestionDuration; // 拥堵持续参数 10-120s + WORD wInverseDuration; // 逆行持续时间 1-10s + WORD wInverseDistance; // 逆行距离阈值 单位m 范围[2-100] 默认 10米 + WORD wInverseAngleTolerance; // 允许角度偏差 90-180度,车流与逆行允许的夹角 + WORD wIllegalParkingTime; // 违停时间[4,60],单位:分钟 ,TFS(交通违章取证) 城市模式下 + WORD wIllegalParkingPicNum; // 违停图片数量[1,6], TFS(交通违章取证) 城市模式下 + BYTE byMergePic; // 图片拼接,TFS 城市模式下 0- 不拼接 1- 拼接 + BYTE byRes1[23]; // 保留字节 }NET_DVR_AID_PARAM, *LPNET_DVR_AID_PARAM; -// ͨ¼ṹ +// 单条交通事件规则结构体 typedef struct tagNET_DVR_ONE_AID_RULE { - BYTE byEnable; // Ƿ¼ - BYTE byRes1[3]; // ֽ - BYTE byRuleName[NAME_LEN]; // - DWORD dwEventType; // ͨ¼ TRAFFIC_AID_TYPE - NET_VCA_SIZE_FILTER struSizeFilter; // ߴ - NET_VCA_POLYGON struPolygon; // - NET_DVR_AID_PARAM struAIDParam; // ¼ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ + BYTE byEnable; // 是否启用事件规则 + BYTE byRes1[3]; // 保留字节 + BYTE byRuleName[NAME_LEN]; // 规则名称 + DWORD dwEventType; // 交通事件检测类型 TRAFFIC_AID_TYPE + NET_VCA_SIZE_FILTER struSizeFilter; // 尺寸过滤器 + NET_VCA_POLYGON struPolygon; // 规则区域 + NET_DVR_AID_PARAM struAIDParam; // 事件参数 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 BYTE byRes2[20]; }NET_DVR_ONE_AID_RULE, *LPNET_DVR_ONE_AID_RULE; -// ͨ¼ +// 交通事件规则 typedef struct tagNET_DVR_AID_RULECFG { - DWORD dwSize; // ṹС - BYTE byPicProType; //ʱͼƬʽ 0- 0-ϴ - BYTE byRes1[3]; // ֽ - NET_DVR_JPEGPARA struPictureParam; //ͼƬṹ + DWORD dwSize; // 结构体大小 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byRes1[3]; // 保留字节 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 NET_DVR_ONE_AID_RULE struOneAIDRule[MAX_AID_RULE]; BYTE byRes2[32]; }NET_DVR_AID_RULECFG, *LPNET_DVR_AID_RULECFG; -// ͨ¼ṹ(չ) +// 单条交通事件规则结构体(扩展) typedef struct tagNET_DVR_ONE_AID_RULE_V41 { - BYTE byEnable; // Ƿ¼ - BYTE byLaneNo; // - BYTE byRes1[2]; // ֽ - BYTE byRuleName[NAME_LEN]; // - DWORD dwEventType; // ͨ¼ TRAFFIC_AID_TYPE - NET_VCA_SIZE_FILTER struSizeFilter; // ߴ - NET_VCA_POLYGON struPolygon; // - NET_DVR_AID_PARAM struAIDParam; // ¼ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];// ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ - BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //¼ͨ1ʾͨ0ʾ - BYTE byRes2[60]; // + BYTE byEnable; // 是否启用事件规则 + BYTE byLaneNo; // 关联车道号 + BYTE byRes1[2]; // 保留字节 + BYTE byRuleName[NAME_LEN]; // 规则名称 + DWORD dwEventType; // 交通事件检测类型 TRAFFIC_AID_TYPE + NET_VCA_SIZE_FILTER struSizeFilter; // 尺寸过滤器 + NET_VCA_POLYGON struPolygon; // 规则区域 + NET_DVR_AID_PARAM struAIDParam; // 事件参数 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];// 布防时间段 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //报警触发的录象通道:1表示触发该通道;0表示不触发 + BYTE byRes2[60]; //保留 }NET_DVR_ONE_AID_RULE_V41, *LPNET_DVR_ONE_AID_RULE_V41; -// ͨ¼(չ) +// 交通事件规则(扩展) typedef struct tagNET_DVR_AID_RULECFG_V41 { - DWORD dwSize; // ṹС - BYTE byPicProType; // ʱͼƬʽ 0- 0-ϴ - BYTE byRes1[3]; // ֽ - NET_DVR_JPEGPARA struPictureParam; // ͼƬṹ - NET_DVR_ONE_AID_RULE_V41 struAIDRule[MAX_AID_RULE]; // - BYTE byRes2[128]; // + DWORD dwSize; // 结构体大小 + BYTE byPicProType; // 报警时图片处理方式 0-不处理 非0-上传 + BYTE byRes1[3]; // 保留字节 + NET_DVR_JPEGPARA struPictureParam; // 图片规格结构 + NET_DVR_ONE_AID_RULE_V41 struAIDRule[MAX_AID_RULE]; //规则数组 + BYTE byRes2[128]; //保留 } NET_DVR_AID_RULECFG_V41, *LPNET_DVR_AID_RULECFG_V41; -// ͨͳƲṹ +// 交通统计参数结构体 typedef struct tagNET_DVR_ONE_TPS_RULE { - BYTE byEnable; //Ƿʹܳͨ - BYTE byLaneID; //ID + BYTE byEnable; //是否使能车道交通规则参数 + BYTE byLaneID; //车道ID BYTE byRes1[2]; - DWORD dwCalcType; //ͳƲITS_TPS_TYPE - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_VCA_POLYGON struVitrualLoop; //Ȧ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ,һΪǷϴģܲҪ - BYTE byRes2[20]; //ֽ + DWORD dwCalcType; //统计参数类型ITS_TPS_TYPE + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_VCA_POLYGON struVitrualLoop; //虚拟线圈 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式,一般为处理是否上传中心,其他功能不需要 + BYTE byRes2[20]; //保留字节 }NET_DVR_ONE_TPS_RULE, *LPNET_DVR_ONE_TPS_RULE; -// ͨͳƹýṹ +// 交通参数统计规则配置结构体 typedef struct tagNET_DVR_TPS_RULECFG { - DWORD dwSize; // ṹС - NET_DVR_ONE_TPS_RULE struOneTpsRule[MAX_TPS_RULE]; // ±ӦͨID - BYTE byRes2[40]; // ֽ + DWORD dwSize; // 结构大小 + NET_DVR_ONE_TPS_RULE struOneTpsRule[MAX_TPS_RULE]; // 下标对应交通参数ID + BYTE byRes2[40]; // 保留字节 }NET_DVR_TPS_RULECFG, *LPNET_DVR_TPS_RULECFG; -// ͨͳƲṹ(չ) +// 交通统计参数结构体(扩展) typedef struct tagNET_DVR_ONE_TPS_RULE_V41 { - BYTE byEnable; //Ƿʹܳͨ - BYTE byLaneID; //ID - BYTE byRes1[2]; // - DWORD dwCalcType; // ͳƲITS_TPS_TYPE - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_VCA_POLYGON struVitrualLoop; //Ȧ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ - BYTE byRes2[60]; // ֽ + BYTE byEnable; //是否使能车道交通规则参数 + BYTE byLaneID; //车道ID + BYTE byRes1[2]; //保留 + DWORD dwCalcType; // 统计参数类型ITS_TPS_TYPE + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_VCA_POLYGON struVitrualLoop; //虚拟线圈 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRes2[60]; // 保留字节 }NET_DVR_ONE_TPS_RULE_V41, *LPNET_DVR_ONE_TPS_RULE_V41; -// ͨͳƹýṹ(չ) +// 交通参数统计规则配置结构体(扩展) typedef struct tagNET_DVR_TPS_RULECFG_V41 { - DWORD dwSize; // ṹС - NET_DVR_ONE_TPS_RULE_V41 struOneTpsRule[MAX_TPS_RULE]; // ±ӦͨID - BYTE byRes[128]; // + DWORD dwSize; // 结构大小 + NET_DVR_ONE_TPS_RULE_V41 struOneTpsRule[MAX_TPS_RULE]; // 下标对应交通参数ID + BYTE byRes[128]; // 保留 }NET_DVR_TPS_RULECFG_V41, *LPNET_DVR_TPS_RULECFG_V41; -//ͨ¼չ +//交通事件类型扩展 typedef enum tagTRAFFIC_AID_TYPE_EX { - ENUM_AID_TYPE_CONGESTION = 1, //ӵ - ENUM_AID_TYPE_PARKING = 2, //ͣ - ENUM_AID_TYPE_INVERSE = 3, // - ENUM_AID_TYPE_PEDESTRIAN = 4, // - ENUM_AID_TYPE_DEBRIS = 5, // Ƭ - ENUM_AID_TYPE_SMOKE = 6, // - ENUM_AID_TYPE_OVERLINE = 7, //ѹ - ENUM_AID_TYPE_VEHICLE_CONTROL_LIST = 8, //ֹ - ENUM_AID_TYPE_SPEED = 9, // - ENUM_AID_TYPE_LANECHANGE = 10, // - ENUM_AID_TYPE_TURNAROUND = 11, //ͷ - ENUM_AID_TYPE_VEHICLE_OCCUPANCY_NONVEHICLE = 12, //ռ÷ǻλ - ENUM_AID_TYPE_GASSER = 13, // - ENUM_AID_TYPE_ROADBLOCK = 14, //· - ENUM_AID_TYPE_CONSTRUCTION = 15, //ʩ - ENUM_AID_TYPE_TRAFFIC_ACCIDENT = 16, //ͨ¹ʼ⣨ͨ¹Ŀǰ¹ʣ׷βв㷨жϳ복֮н棬򱨾 - ENUM_AID_TYPE_PARALLEL_PARKING = 17, //෽λͣ - ENUM_AID_TYPE_FOG_DETECTION = 18, //Ũ - ENUM_AID_TYPE_OCCUPY_EMERGENCY_LANE = 19, //ռý - ENUM_AID_TYPE_CONFLAGRATION = 20, // - ENUM_AID_TYPE_TFS_MANUAL_TRIGGER = 21, //ֶΥȡ֤¼ - ENUM_AID_TYPE_LOADING_DOCK_TRIGGER_UPLOAD = 22, //̨ϴ - ENUM_AID_TYPE_OCCUPY_OVERTAKING_LANE = 23, //ռó - ENUM_AID_TYPE_PROHIBITION_MARK_VIOLATION = 24, //Υ־ - ENUM_AID_TYPE_CHECK_POINT = 25, // - ENUM_AID_TYPE_SUDDEN_SPEED_DROP = 26, //ٶ轵 - ENUM_AID_TYPE_SLOW_MOVING = 27, // - ENUM_AID_TYPE_NOT_KEEP_DISTANCE = 28, //δֳ - ENUM_AID_TYPE_NOT_SLOW_ZEBRA_CROSSING = 29, //δ - ENUM_AID_TYPE_OVER_TAKE_RIGHT_SIDE = 30, //Ҳ೬ - ENUM_AID_TYPE_LOW_SPEED = 31, //ʻ - ENUM_AID_TYPE_DRAG_RACING = 32, //쭳 - ENUM_AID_TYPE_CHANGE_LANE_CONTINUOUSLY = 33, // - ENUM_AID_TYPE_S_SHARP_DRIVING = 34, //ʻ - ENUM_AID_TYPE_LARGE_VEHICLE_OCCUPY_LINE = 35, //ռ - ENUM_AID_TYPE_ROAD_GROUP = 36, //·Աۼ쳣ΪԱۼ㷨ͬӦóͬ, ͨ¼Ӧڸ١Ƚͨ쳣ΪԱۼӦóǽ档 - ENUM_AID_TYPE_SINGLE_VEHICLE_BREAKDOWN = 37, //ê - ENUM_AID_TYPE_BLACK_SMOKE_VEHICLE = 38, //̳ - ENUM_AID_TYPE_VEHNOYIELDPEDEST = 39, // - ENUM_AID_TYPE_ILLEGALMANNEDVEH = 40, //Υ - ENUM_AID_TYPE_ILLEGALMANNEDNONMOTORVEH = 41, //ǻΥ - ENUM_AID_TYPE_UMBRELLATENTINSTALL = 42, //ǻΥװ - ENUM_AID_TYPE_NONMOTORVEHONVEHLANE = 43, //ǻռû - ENUM_AID_TYPE_WEARINGNOHELMET = 44, //ǻδͷ - ENUM_AID_TYPE_PEDESTREDLIGHTRUNNING = 45, //˴ - ENUM_AID_TYPE_PEDESTONNONMOTORVEHLANE = 46, //˷ǻ - ENUM_AID_TYPE_PEDESTONVEHLANE = 47, //˻ - ENUM_AID_TYPE_OCCUPYDEDICATEDLANE = 48,//ռרó - ENUM_AID_TYPE_NOTDRIVEINDEDICATEDLANE = 49,//δרóʻ - ENUM_AID_TYPE_REGIONALVEHICLESTATISTICS = 50,//ͳ + ENUM_AID_TYPE_CONGESTION = 1, //拥堵 + ENUM_AID_TYPE_PARKING = 2, //停车 + ENUM_AID_TYPE_INVERSE = 3, //逆行 + ENUM_AID_TYPE_PEDESTRIAN = 4, //行人 + ENUM_AID_TYPE_DEBRIS = 5, //遗留物 抛洒物碎片 + ENUM_AID_TYPE_SMOKE = 6, //烟雾 + ENUM_AID_TYPE_OVERLINE = 7, //压线 + ENUM_AID_TYPE_VEHICLE_CONTROL_LIST = 8, //禁止名单数据 + ENUM_AID_TYPE_SPEED = 9, //超速 + ENUM_AID_TYPE_LANECHANGE = 10, //变道 + ENUM_AID_TYPE_TURNAROUND = 11, //掉头 + ENUM_AID_TYPE_VEHICLE_OCCUPANCY_NONVEHICLE = 12, //机动车占用非机动车位 + ENUM_AID_TYPE_GASSER = 13, //加塞 + ENUM_AID_TYPE_ROADBLOCK = 14, //路障 + ENUM_AID_TYPE_CONSTRUCTION = 15, //施工 + ENUM_AID_TYPE_TRAFFIC_ACCIDENT = 16, //交通事故检测(交通事故目前先做车车事故,追尾、剐蹭等算法判断车与车之间有交叉,其他车辆绕行则报警) + ENUM_AID_TYPE_PARALLEL_PARKING = 17, //侧方位停车检测 + ENUM_AID_TYPE_FOG_DETECTION = 18, //浓雾检测 + ENUM_AID_TYPE_OCCUPY_EMERGENCY_LANE = 19, //占用紧急车道 + ENUM_AID_TYPE_CONFLAGRATION = 20, //火灾 + ENUM_AID_TYPE_TFS_MANUAL_TRIGGER = 21, //手动违章取证事件 + ENUM_AID_TYPE_LOADING_DOCK_TRIGGER_UPLOAD = 22, //月台触发上传 + ENUM_AID_TYPE_OCCUPY_OVERTAKING_LANE = 23, //占用超车道 + ENUM_AID_TYPE_PROHIBITION_MARK_VIOLATION = 24, //违反禁令标志 + ENUM_AID_TYPE_CHECK_POINT = 25, //卡口 + ENUM_AID_TYPE_SUDDEN_SPEED_DROP = 26, //速度骤降 + ENUM_AID_TYPE_SLOW_MOVING = 27, //车辆缓行 + ENUM_AID_TYPE_NOT_KEEP_DISTANCE = 28, //未保持车距 + ENUM_AID_TYPE_NOT_SLOW_ZEBRA_CROSSING = 29, //斑马线未减速 + ENUM_AID_TYPE_OVER_TAKE_RIGHT_SIDE = 30, //右侧超车 + ENUM_AID_TYPE_LOW_SPEED = 31, //机动车低速行驶 + ENUM_AID_TYPE_DRAG_RACING = 32, //飙车 + ENUM_AID_TYPE_CHANGE_LANE_CONTINUOUSLY = 33, //连续变道 + ENUM_AID_TYPE_S_SHARP_DRIVING = 34, //蛇形行驶 + ENUM_AID_TYPE_LARGE_VEHICLE_OCCUPY_LINE = 35, //大车占道 + ENUM_AID_TYPE_ROAD_GROUP = 36, //道路人员聚集,与异常行为检测的人员聚集算法不同,应用场景不同, 交通事件应用在高速、隧道等交通场景,异常行为检测人员聚集应用场景是街面。 + ENUM_AID_TYPE_SINGLE_VEHICLE_BREAKDOWN = 37, //单车抛锚 + ENUM_AID_TYPE_BLACK_SMOKE_VEHICLE = 38, //黑烟车 + ENUM_AID_TYPE_VEHNOYIELDPEDEST = 39, //机动车不礼让行人 + ENUM_AID_TYPE_ILLEGALMANNEDVEH = 40, //机动车违法载人 + ENUM_AID_TYPE_ILLEGALMANNEDNONMOTORVEH = 41, //非机动车违法载人 + ENUM_AID_TYPE_UMBRELLATENTINSTALL = 42, //非机动车违规加装雨棚 + ENUM_AID_TYPE_NONMOTORVEHONVEHLANE = 43, //非机动车占用机动车道 + ENUM_AID_TYPE_WEARINGNOHELMET = 44, //非机动车未佩戴头盔事 + ENUM_AID_TYPE_PEDESTREDLIGHTRUNNING = 45, //行人闯红灯 + ENUM_AID_TYPE_PEDESTONNONMOTORVEHLANE = 46, //行人非机动车道行走 + ENUM_AID_TYPE_PEDESTONVEHLANE = 47, //行人机动车道行走 + ENUM_AID_TYPE_OCCUPYDEDICATEDLANE = 48,//占用专用车道 + ENUM_AID_TYPE_NOTDRIVEINDEDICATEDLANE = 49,//未按专用车道行驶 + ENUM_AID_TYPE_REGIONALVEHICLESTATISTICS = 50,//区域车辆统计 }TRAFFIC_AID_TYPE_EX; -// ͨ¼Ϣ +// 交通事件信息 typedef struct tagNET_DVR_AID_INFO { - BYTE byRuleID; // ţΪýṹ±꣬0-16 - BYTE byVisibilityLevel; // ܼȵȼ0-1-~2-~3-~Ũ4-Ũ + BYTE byRuleID; // 规则序号,为规则配置结构下标,0-16 + BYTE byVisibilityLevel; // 能见度等级:0-保留;1-无雾~薄雾;2-薄雾~中雾;3-大雾~浓雾;4-浓雾及以上 BYTE byRes1[2]; - BYTE byRuleName[NAME_LEN]; // - DWORD dwAIDType; // ¼ - NET_DVR_DIRECTION struDirect; // ָ - BYTE bySpeedLimit; //ֵλkm/h[0,255] - BYTE byCurrentSpeed; //ǰٶֵλkm/h[0,255] - BYTE byVehicleEnterState;//״̬ 0-Ч 1-ʻ 2-ʻ - BYTE byState; //0-仯ϴ1-Ѳϴ2-ǰ豸ʱץĵϴʵƽ̨γͼƬУڷ㷨ûм⵽ֵͣ2ڡdwAIDType;//¼͡Ϊ ͣ¼ʱЧ - BYTE byParkingID[16]; //ͣλ - DWORD dwAIDTypeEx; // ¼չ,οTRAFFIC_AID_TYPE_EX - BYTE byRes2[16]; // ֽ + BYTE byRuleName[NAME_LEN]; // 规则名称 + DWORD dwAIDType; // 报警事件类型 + NET_DVR_DIRECTION struDirect; // 报警指向区域 + BYTE bySpeedLimit; //限速值,单位km/h[0,255] + BYTE byCurrentSpeed; //当前速度值,单位km/h[0,255] + BYTE byVehicleEnterState;//车辆出入状态 0-无效 1-驶入 2-驶出 + BYTE byState; //0-变化上传,1-轮巡上传,2-当前设备定时抓拍的数据上传,实际作用于平台形成图片序列,用于反查算法没有检测到的停车车辆(索引值2在“dwAIDType;//报警事件类型”为 “停车事件”的时候生效) + BYTE byParkingID[16]; //停车位编号 + DWORD dwAIDTypeEx; // 报警事件类型扩展,参考TRAFFIC_AID_TYPE_EX + BYTE byRes2[16]; // 保留字节 }NET_DVR_AID_INFO, *LPNET_DVR_AID_INFO; -// ͨ¼ +// 交通事件报警 typedef struct tagNET_DVR_AID_ALARM { - DWORD dwSize; // ṹ - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - NET_VCA_DEV_INFO struDevInfo; // ǰ豸Ϣ - NET_DVR_AID_INFO struAIDInfo; // ͨ¼Ϣ - DWORD dwPicDataLen; // ͼƬij Ϊ0ʾûͼƬ0ʾýṹͼƬ - BYTE *pImage; // ָͼƬָ - BYTE byRes[40]; // ֽ + DWORD dwSize; // 结构长度 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + NET_VCA_DEV_INFO struDevInfo; // 前端设备信息 + NET_DVR_AID_INFO struAIDInfo; // 交通事件信息 + DWORD dwPicDataLen; // 返回图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据 + BYTE *pImage; // 指向图片的指针 + BYTE byRes[40]; // 保留字节 }NET_DVR_AID_ALARM, *LPNET_DVR_AID_ALARM; -// нṹ +// 车道队列结构体 typedef struct tagNET_DVR_LANE_QUEUE { - NET_VCA_POINT struHead; //ͷ - NET_VCA_POINT struTail; //β - DWORD dwLength; //ʵʶг λΪ [0-500] + NET_VCA_POINT struHead; //队列头 + NET_VCA_POINT struTail; //队列尾 + DWORD dwLength; //实际队列长度 单位为米 [0-500] }NET_DVR_LANE_QUEUE, *LPNET_DVR_LANE_QUEUE; typedef enum tagTRAFFIC_DATA_VARY_TYPE { - NO_VARY, //ޱ仯 - VEHICLE_ENTER, //Ȧ - VEHICLE_LEAVE, //뿪Ȧ - UEUE_VARY //б仯 + NO_VARY, //无变化 + VEHICLE_ENTER, //车辆进入虚拟线圈 + VEHICLE_LEAVE, //车辆离开虚拟线圈 + UEUE_VARY //队列变化 }TRAFFIC_DATA_VARY_TYPE; typedef struct tagNET_DVR_LANE_PARAM { - BYTE byRuleName[NAME_LEN]; // - BYTE byRuleID; //ţΪýṹ±꣬0-7 - BYTE byVaryType; //ͨ仯 TRAFFIC_DATA_VARY_TYPE - BYTE byLaneType; //л + BYTE byRuleName[NAME_LEN]; //车道规则名称 + BYTE byRuleID; //规则序号,为规则配置结构下标,0-7 + BYTE byVaryType; //车道交通参数变化类型 参照 TRAFFIC_DATA_VARY_TYPE + BYTE byLaneType; //车道上行或下行 BYTE byRes1; - DWORD dwLaneVolume; // ͳжٳͨ - DWORD dwLaneVelocity; //ٶȣ - DWORD dwTimeHeadway; //ͷʱ࣬ - DWORD dwSpaceHeadway; //ͷ࣬ - float fSpaceOccupyRation; //ռʣٷֱȼ㣨ռ) - NET_DVR_LANE_QUEUE struLaneQueue; //г - NET_VCA_POINT struRuleLocation; //Ȧĵλ + DWORD dwLaneVolume; //车道流量 ,统计有多少车子通过 + DWORD dwLaneVelocity; //车道速度,公里计算 + DWORD dwTimeHeadway; //车头时距,以秒计算 + DWORD dwSpaceHeadway; //车头间距,以米来计算 + float fSpaceOccupyRation; //车道占有率,百分比计算(空间上) + NET_DVR_LANE_QUEUE struLaneQueue; //车道队列长度 + NET_VCA_POINT struRuleLocation; //线圈规则的中心点位置 BYTE byRes2[32]; }NET_DVR_LANE_PARAM, *LPNET_DVR_LANE_PARAM; typedef struct tagNET_DVR_TPS_INFO { - DWORD dwLanNum; // ͨijĿ + DWORD dwLanNum; // 交通参数的车道数目 NET_DVR_LANE_PARAM struLaneParam[MAX_TPS_RULE]; }NET_DVR_TPS_INFO, *LPNET_DVR_TPS_INFO; typedef struct tagNET_DVR_TPS_ALARM { - DWORD dwSize; //ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - NET_DVR_TPS_INFO struTPSInfo; //ͨ¼Ϣ - BYTE byRes1[32]; //ֽ + DWORD dwSize; //结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + NET_DVR_TPS_INFO struTPSInfo; //交通事件信息 + BYTE byRes1[32]; //保留字节 }NET_DVR_TPS_ALARM, *LPNET_DVR_TPS_ALARM; typedef enum tagTRAFFIC_DATA_VARY_TYPE_EX_ENUM { - ENUM_TRAFFIC_VARY_NO = 0x00, //ޱ仯 - ENUM_TRAFFIC_VARY_VEHICLE_ENTER = 0x01, //Ȧ - ENUM_TRAFFIC_VARY_VEHICLE_LEAVE = 0x02, //뿪Ȧ - ENUM_TRAFFIC_VARY_QUEUE = 0x04, //б仯 - ENUM_TRAFFIC_VARY_STATISTIC = 0x08, //ͳݱ仯ÿӱ仯һΰƽٶȣռ/ʱռʣͨ״̬ + ENUM_TRAFFIC_VARY_NO = 0x00, //无变化 + ENUM_TRAFFIC_VARY_VEHICLE_ENTER = 0x01, //车辆进入虚拟线圈 + ENUM_TRAFFIC_VARY_VEHICLE_LEAVE = 0x02, //车辆离开虚拟线圈 + ENUM_TRAFFIC_VARY_QUEUE = 0x04, //队列变化 + ENUM_TRAFFIC_VARY_STATISTIC = 0x08, //统计数据变化(每分钟变化一次包括平均速度,车道空间/时间占有率,交通状态) }TRAFFIC_DATA_VARY_TYPE_EX_ENUM; typedef struct tagNET_DVR_LANE_PARAM_V41 { - BYTE byRuleName[NAME_LEN]; // - BYTE byRuleID; // ţΪýṹ±꣬0-7 - BYTE byLaneType; // л - BYTE byTrafficState; // Ľͨ״̬0-Ч1-ͨ2-ӵ3- - BYTE byLaneNo; // - DWORD dwVaryType; // ͨ仯Ͳ TRAFFIC_DATA_VARY_TYPE_EX_ENUMλ - DWORD dwTpsType; // ݱ仯ͱ־ʾǰϴͳƲУЩЧITS_TPS_TYPE,λ - DWORD dwLaneVolume; // ͳжٳͨ - DWORD dwLaneVelocity; // ٶȣ - DWORD dwTimeHeadway ; // ͷʱ࣬ - DWORD dwSpaceHeadway; // ͷ࣬ - float fSpaceOccupyRation; // ռʣٷֱȼ㣨ռ) - float fTimeOccupyRation; // ʱռʣٷֱȼ - DWORD dwLightVehicle; // Сͳ - DWORD dwMidVehicle; // ͳ - DWORD dwHeavyVehicle; // ͳ - NET_DVR_LANE_QUEUE struLaneQueue; // г - NET_VCA_POINT struRuleLocation; // λȦ - DWORD dwOversizeVehicle; // ͳ - BYTE byRes2[60]; // + BYTE byRuleName[NAME_LEN]; // 车道规则名称 + BYTE byRuleID; // 规则序号,为规则配置结构下标,0-7 + BYTE byLaneType; // 车道上行或下行 + BYTE byTrafficState; // 车道的交通状态,0-无效,1-畅通,2-拥挤,3-堵塞 + BYTE byLaneNo; //车道号 + DWORD dwVaryType; // 车道交通参数变化类型参照 TRAFFIC_DATA_VARY_TYPE_EX_ENUM,按位区分 + DWORD dwTpsType; // 数据变化类型标志,表示当前上传的统计参数中,哪些数据有效,参照ITS_TPS_TYPE,按位区分 + DWORD dwLaneVolume; // 车道流量,统计有多少车子通过 + DWORD dwLaneVelocity; // 车道速度,公里计算 + DWORD dwTimeHeadway ; // 车头时距,以秒计算 + DWORD dwSpaceHeadway; // 车头间距,以米来计算 + float fSpaceOccupyRation; // 车道占有率,百分比计算(空间上) + float fTimeOccupyRation; // 时间占有率,百分比计算 + DWORD dwLightVehicle; // 小型车数量 + DWORD dwMidVehicle; // 中型车数量 + DWORD dwHeavyVehicle; // 重型车数量 + NET_DVR_LANE_QUEUE struLaneQueue; // 车道队列长度 + NET_VCA_POINT struRuleLocation; // 规则位置虚拟线圈的中心 + DWORD dwOversizeVehicle; // 大型车数量 + BYTE byRes2[60]; // 保留 }NET_DVR_LANE_PARAM_V41, *LPNET_DVR_LANE_PARAM_V41; typedef struct tagNET_DVR_TPS_INFO_V41 { - DWORD dwLanNum; // ͨijĿ + DWORD dwLanNum; // 交通参数的车道数目 NET_DVR_LANE_PARAM_V41 struLaneParam[MAX_TPS_RULE]; - DWORD dwSceneID;//ID - BYTE byRes[28]; // + DWORD dwSceneID;//场景ID + BYTE byRes[28]; //保留 }NET_DVR_TPS_INFO_V41, *LPNET_DVR_TPS_INFO_V41; -// +// 人脸规则配置 typedef struct tagNET_DVR_FACEDETECT_RULECFG { - DWORD dwSize; // ṹС - BYTE byEnable; // Ƿ - BYTE byEventType; //¼ͣ 0-쳣; 1-;2-쳣&;4-&쳣;5-&; 6-&쳣&; 7- - BYTE byUpLastAlarm; //2011-04-06 Ƿϴһεı - BYTE byUpFacePic; //Ƿϴͼ0-1- + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 是否启用 + BYTE byEventType; //警戒事件类型, 0-异常人脸; 1-正常人脸;2-异常人脸&正常人脸;4-多张人脸&异常人脸;5-多张人脸&正常人脸; 6-多张人脸&异常人脸&正常人脸; 7-多张人脸 + BYTE byUpLastAlarm; //2011-04-06 是否先上传最近一次的报警 + BYTE byUpFacePic; //是否上传人脸子图,0-否,1-是 BYTE byRuleName[NAME_LEN]; - NET_VCA_POLYGON struVcaPolygon; // - BYTE byPicProType; //ʱͼƬʽ 0- 0-ϴ - BYTE bySensitivity; // - WORD wDuration; // ʱֵ - NET_DVR_JPEGPARA struPictureParam; //ͼƬṹ - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ - BYTE byPicRecordEnable; /*2012-3-1ǷͼƬ洢, 0-, 1-*/ - BYTE byRes1[3]; //ֽ + NET_VCA_POLYGON struVcaPolygon; // 人脸检测规则区域 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE bySensitivity; // 规则灵敏度 + WORD wDuration; // 触发人脸报警时间阈值 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byPicRecordEnable; /*2012-3-1是否启用图片存储, 0-不启用, 1-启用*/ + BYTE byRes1[3]; //保留字节 /* - ¼ͣĿǰ¼Ͱλʾѡ1ֻ߼ֽϣ - 0x00: Ч - 0x01: 쳣 - 0x02: - 0x04: - 0x08: ī - 0x10: 绰 + 警戒事件类型:(目前事件类型按位表示,可任意选择其中1种或者几种进行组合) + 0x00: 无效 + 0x01: 异常人脸 + 0x02: 正常人脸 + 0x04: 多张人脸 + 0x08: 戴墨镜人脸 + 0x10: 打电话人脸 */ - DWORD dwEventTypeEx; //dwEventTypeExֶΪ0ʱbyEventTypeֶЧdwEventTypeExbyEventTypeֶζֵʱdwEventTypeExֶΪ׼ϲdwEventTypeExֶκ󣬻ὫֵͬbyEventTypeС - BYTE byRes2[32]; //ֽ + DWORD dwEventTypeEx; //dwEventTypeEx字段若为0时,byEventType字段生效。若dwEventTypeEx、byEventType字段都有值时,以dwEventTypeEx字段为准。上层配置dwEventTypeEx字段后,会将值同步到byEventType中。 + BYTE byRes2[32]; //保留字节 }NET_DVR_FACEDETECT_RULECFG, *LPNET_DVR_FACEDETECT_RULECFG; typedef struct tagNET_DVR_FACE_PIPCFG { - BYTE byEnable; //Ƿл - BYTE byBackChannel; //ͨţͨ - BYTE byPosition; //λã0-,1-,2-,3- - BYTE byPIPDiv; //ϵ(:廭)0-1:4,1-1:9,2-1:16 + BYTE byEnable; //是否开启画中画 + BYTE byBackChannel; //背景通道号(面板通道) + BYTE byPosition; //叠加位置,0-左上,1-左下,2-右上,3-右下 + BYTE byPIPDiv; //分屏系数(人脸画面:面板画面),0-1:4,1-1:9,2-1:16 BYTE byRes[4]; }NET_DVR_FACE_PIPCFG, *LPNET_DVR_FACE_PIPCFG; typedef struct tagNET_DVR_FACEDETECT_RULECFG_V41 { - DWORD dwSize; // ṹС - BYTE byEnable; // Ƿ - BYTE byEventType; //¼ͣ 0-쳣; 1-;2-쳣&;4-&쳣;5-&; 6-&쳣&; 7- - BYTE byUpLastAlarm; //2011-04-06 Ƿϴһεı - BYTE byUpFacePic; //Ƿϴͼ0-1- + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 是否启用 + BYTE byEventType; //警戒事件类型, 0-异常人脸; 1-正常人脸;2-异常人脸&正常人脸;4-多张人脸&异常人脸;5-多张人脸&正常人脸; 6-多张人脸&异常人脸&正常人脸; 7-多张人脸 + BYTE byUpLastAlarm; //2011-04-06 是否先上传最近一次的报警 + BYTE byUpFacePic; //是否上传人脸子图,0-否,1-是 BYTE byRuleName[NAME_LEN]; - NET_VCA_POLYGON struVcaPolygon; // - BYTE byPicProType; //ʱͼƬʽ 0- 0-ϴ - BYTE bySensitivity; // - WORD wDuration; // ʱֵ - NET_DVR_JPEGPARA struPictureParam; //ͼƬṹ - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //ʽ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ - BYTE byPicRecordEnable; /*2012-10-22ǷͼƬ洢, 0-, 1-*/ + NET_VCA_POLYGON struVcaPolygon; // 人脸检测规则区域 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE bySensitivity; // 规则灵敏度 + WORD wDuration; // 触发人脸报警时间阈值 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byPicRecordEnable; /*2012-10-22是否启用图片存储, 0-不启用, 1-启用*/ BYTE byRes1; - WORD wAlarmDelay; //2012-10-22ܱʱ0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s - NET_DVR_FACE_PIPCFG struFacePIP; //2012-11-7л - WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //ץͼͨͨʱͬʱϴͨץͼƬ0ʾֵΪͨ - BYTE byRes2[2]; //ֽ + WORD wAlarmDelay; //2012-10-22智能报警延时,0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s + NET_DVR_FACE_PIPCFG struFacePIP; //2012-11-7画中画参数 + WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //关联抓图通道,当主通道报警时,同时会上传关联通道的抓拍图片,0表示不关联,其他值为关联通道号 + BYTE byRes2[2]; //保留字节 /* - ¼ͣĿǰ¼Ͱλʾѡ1ֻ߼ֽϣ - 0x00: Ч - 0x01: 쳣 - 0x02: - 0x04: - 0x08: ī - 0x10: 绰 + 警戒事件类型:(目前事件类型按位表示,可任意选择其中1种或者几种进行组合) + 0x00: 无效 + 0x01: 异常人脸 + 0x02: 正常人脸 + 0x04: 多张人脸 + 0x08: 戴墨镜人脸 + 0x10: 打电话人脸 */ - DWORD dwEventTypeEx; //dwEventTypeExֶΪ0ʱbyEventTypeֶЧdwEventTypeExbyEventTypeֶζֵʱdwEventTypeExֶΪ׼ϲdwEventTypeExֶκ󣬻ὫֵͬbyEventTypeС - BYTE byRes[16]; //ֽ + DWORD dwEventTypeEx; //dwEventTypeEx字段若为0时,byEventType字段生效。若dwEventTypeEx、byEventType字段都有值时,以dwEventTypeEx字段为准。上层配置dwEventTypeEx字段后,会将值同步到byEventType中。 + BYTE byRes[16]; //保留字节 }NET_DVR_FACEDETECT_RULECFG_V41, *LPNET_DVR_FACEDETECT_RULECFG_V41; typedef struct tagNET_DVR_FACEDETECT_ALARM { - DWORD dwSize; //ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - BYTE byRuleName[NAME_LEN]; // - NET_VCA_TARGET_INFO struTargetInfo;//ĿϢ - NET_VCA_DEV_INFO struDevInfo;//ǰ豸Ϣ - DWORD dwPicDataLen; //ͼƬij Ϊ0ʾûͼƬ0ʾýṹͼƬ*/ - BYTE byAlarmPicType; // 0-쳣ͼƬ 1- ͼƬ,2-, 3-ī, 4-绰 - BYTE byPanelChan; /*2012-3-1ͨͨ*/ - BYTE byRelAlarmPicNum; //ͨͼƬ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byRuleName[NAME_LEN]; //规则名称 + NET_VCA_TARGET_INFO struTargetInfo;//报警目标信息 + NET_VCA_DEV_INFO struDevInfo;//前端设备信息 + DWORD dwPicDataLen; //返回图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据*/ + BYTE byAlarmPicType; // 0-异常人脸报警图片 1- 人脸图片,2-多张人脸, 3-戴墨镜人脸, 4-打电话人脸 + BYTE byPanelChan; /*2012-3-1人脸通道关联的面板通道*/ + BYTE byRelAlarmPicNum; //关联通道报警图片数量 BYTE byRes1; - DWORD dwFacePicDataLen;//ͼƬij Ϊ0ʾûͼƬ0ʾýṹͼƬ*/ - DWORD dwAlarmID; //IDԱʶͨϱ0ʾЧ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byRes2[42]; // ֽ - BYTE *pFaceImage; //ָͼָ - BYTE *pImage; //ָͼƬָ + DWORD dwFacePicDataLen;//人脸图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据*/ + DWORD dwAlarmID; //报警ID,用以标识通道间关联产生的组合报警,0表示无效 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes2[42]; // 保留字节 + BYTE *pFaceImage; //指向人脸图指针 + BYTE *pImage; //指向图片的指针 }NET_DVR_FACEDETECT_ALARM, *LPNET_DVR_FACEDETECT_ALARM; typedef struct tagNET_DVR_EVENT_PARAM_UNION { - DWORD uLen[3]; // СΪ12ֽ - DWORD dwHumanIn; //˽ӽ 0 - 1- - float fCrowdDensity; // Աۼֵ + DWORD uLen[3]; // 联合体大小为12字节 + DWORD dwHumanIn; //有无人接近 0 - 无人 1- 有人 + float fCrowdDensity; // 人员聚集值 }NET_DVR_EVENT_PARAM_UNION, *LPNET_DVR_EVENT_PARAM_UNION; -// Ŀǰֻ¼Աۼ¼ʵʱϴ +// 目前只有有人无人事件和人员聚集事件实时报警上传 typedef struct tagNET_DVR_EVENT_INFO { BYTE byRuleID; // Rule ID - BYTE byRes[3]; // ֽ - BYTE byRuleName[NAME_LEN]; // - DWORD dwEventType; // VCA_EVENT_TYPE + BYTE byRes[3]; // 保留字节 + BYTE byRuleName[NAME_LEN]; // 规则名称 + DWORD dwEventType; // 参照VCA_EVENT_TYPE NET_DVR_EVENT_PARAM_UNION uEventParam; // }NET_DVR_EVENT_INFO, *LPNET_DVR_EVENT_INFO; typedef struct tagNET_DVR_EVENT_INFO_LIST { - BYTE byNum; // ¼ʵʱϢ - BYTE byRes1[3]; // ֽ - NET_DVR_EVENT_INFO struEventInfo[MAX_RULE_NUM]; // ¼ʵʱϢ + BYTE byNum; // 事件实时信息个数 + BYTE byRes1[3]; // 保留字节 + NET_DVR_EVENT_INFO struEventInfo[MAX_RULE_NUM]; // 事际实时信息 }NET_DVR_EVENT_INFO_LIST,*LPNET_DVR_EVENT_INFO_LIST; typedef struct tagNET_DVR_RULE_INFO_ALARM { - DWORD dwSize; // ṹС - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - NET_VCA_DEV_INFO struDevInfo; // ǰ豸Ϣ - NET_DVR_EVENT_INFO_LIST struEventInfoList; //¼Ϣб - BYTE byRes2[40]; // ֽ + DWORD dwSize; // 结构体大小 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + NET_VCA_DEV_INFO struDevInfo; // 前端设备信息 + NET_DVR_EVENT_INFO_LIST struEventInfoList; //事件信息列表 + BYTE byRes2[40]; // 保留字节 }NET_DVR_RULE_INFO_ALARM, *LPNET_DVR_RULE_INFO_ALARM; -//ʱ +//单条场景时间段 typedef struct tagNET_DVR_ONE_SCENE_TIME { - BYTE byActive; //0 -Ч,1CЧ - BYTE byRes1[3]; // - DWORD dwSceneID; //ID - NET_DVR_SCHEDTIME struEffectiveTime; //Чʱ - BYTE byRes2[16]; // + BYTE byActive; //0 -无效,1–有效 + BYTE byRes1[3]; //保留 + DWORD dwSceneID; //场景ID + NET_DVR_SCHEDTIME struEffectiveTime; //场景起效时间 + BYTE byRes2[16]; //保留 }NET_DVR_ONE_SCENE_TIME, *LPNET_DVR_ONE_SCENE_TIME ; -//Чʱ +//场景起效时间段配置 typedef struct tagNET_DVR_SCENE_TIME_CFG { - DWORD dwSize; //ṹС - NET_DVR_ONE_SCENE_TIME struSceneTime[MAX_SCENE_TIMESEG_NUM]; //ʱ - BYTE byRes[64]; // + DWORD dwSize; //结构大小 + NET_DVR_ONE_SCENE_TIME struSceneTime[MAX_SCENE_TIMESEG_NUM]; //场景时间段数组 + BYTE byRes[64]; //保留 }NET_DVR_SCENE_TIME_CFG, *LPNET_DVR_SCENE_TIME_CFG; -//Ϣ +//单条场景配置信息 typedef struct tagNET_DVR_ONE_SCENE_CFG_ { - BYTE byEnable; //Ƿøó,0- 1- - BYTE byDirection; //ʾ 1-У2-У3-˫4-ɶ5-򱱣6-򶫣7-ɱϣ8- - BYTE byRes1[2]; // - DWORD dwSceneID; //ID(ֻ), 0 - ʾóЧ - BYTE bySceneName[NAME_LEN]; // - NET_DVR_PTZPOS struPtzPos; //ptz - DWORD dwTrackTime; //ʱ[5,300] 룬TFS(ͨȡ֤)ģʽЧ - BYTE byRes2[24]; // + BYTE byEnable; //是否启用该场景,0-不启用 1- 启用 + BYTE byDirection; //显示方向 1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其它 + BYTE byRes1[2]; //保留 + DWORD dwSceneID; //场景ID(只读), 0 - 表示该场景无效 + BYTE bySceneName[NAME_LEN]; //场景名称 + NET_DVR_PTZPOS struPtzPos; //ptz 坐标 + DWORD dwTrackTime; //球机时间[5,300] 秒,TFS(交通取证)模式下有效 + BYTE byRes2[24]; //保留 }NET_DVR_ONE_SCENE_CFG, *LPNET_DVR_ONE_SCENE_CFG; -//ýṹ +//场景配置结构体 typedef struct tagNET_DVR_SCENE_CFG { - DWORD dwSize; //ṹС - NET_DVR_ONE_SCENE_CFG struSceneCfg[MAX_ITS_SCENE_NUM]; //Ϣ - BYTE byRes[40]; // + DWORD dwSize; //结构大小 + NET_DVR_ONE_SCENE_CFG struSceneCfg[MAX_ITS_SCENE_NUM]; //场景配置信息 + BYTE byRes[40]; //保留 }NET_DVR_SCENE_CFG,*LPNET_DVR_SCENE_CFG; -//ೡ +//多场景操作条件 typedef struct tagNET_DVR_SCENE_COND { - DWORD dwSize; //ṹС - LONG lChannel; //ͨ - DWORD dwSceneID; //ID, 0-ʾóЧ - BYTE byRes[48]; // + DWORD dwSize; //结构大小 + LONG lChannel; //通道号 + DWORD dwSceneID; //场景ID, 0-表示该场景无效 + BYTE byRes[48]; //保留 }NET_DVR_SCENE_COND, *LPNET_DVR_SCENE_COND; -//ȡ֤ʽ +//取证方式 typedef struct tagNET_DVR_FORENSICS_MODE { - DWORD dwSize; //ṹС - BYTE byMode; // 0-ֶȡ֤ ,1-Զȡ֤2-Զ;̬ȡ֤ - BYTE byRes[23]; // + DWORD dwSize; //结构大小 + BYTE byMode; // 0-手动取证 ,1-自动取证,2-半自动和静态取证 + BYTE byRes[23]; //保留 }NET_DVR_FORENSICS_MODE,*LPNET_DVR_FORENSICS_MODE; -//Ϣ +//报警场景信息 typedef struct tagNET_DVR_SCENE_INFO_ { - DWORD dwSceneID; //ID, 0 - ʾóЧ - BYTE bySceneName[NAME_LEN]; // - BYTE byDirection; //ʾ 1-У2-У3-˫4-ɶ5-򱱣6-򶫣7-ɱϣ8- - BYTE byRes1[3]; // - NET_DVR_PTZPOS struPtzPos; //Ptz - BYTE byRes2[64] ; // + DWORD dwSceneID; //场景ID, 0 - 表示该场景无效 + BYTE bySceneName[NAME_LEN]; //场景名称 + BYTE byDirection; //显示方向 1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其它 + BYTE byRes1[3]; //保留 + NET_DVR_PTZPOS struPtzPos; //Ptz 坐标 + BYTE byRes2[64] ; //保留 }NET_DVR_SCENE_INFO,*LPNET_DVR_SCENE_INFO; -//ͨ¼(չ) +//交通事件报警(扩展) typedef struct tagNET_DVR_AID_ALARM_V41 { - DWORD dwSize; //ṹ - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - NET_DVR_AID_INFO struAIDInfo; //ͨ¼Ϣ - NET_DVR_SCENE_INFO struSceneInfo; //Ϣ - DWORD dwPicDataLen; //ͼƬ - BYTE *pImage; //ָͼƬָ - // 0-ֱϴ; 1-ƴ洢URL(3.7Ver)ԭȵͼƬݱURLݣͼƬȱURL + DWORD dwSize; //结构长度 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + NET_DVR_AID_INFO struAIDInfo; //交通事件信息 + NET_DVR_SCENE_INFO struSceneInfo; //场景信息 + DWORD dwPicDataLen; //图片长度 + BYTE *pImage; //指向图片的指针 + // 0-数据直接上传; 1-云存储服务器URL(3.7Ver)原先的图片数据变成URL数据,图片长度变成URL长度 BYTE byDataType; - BYTE byLaneNo; // - WORD wMilliSecond; //ʱ - //ʾţ·ڱšڲţ + BYTE byLaneNo; //关联车道号 + WORD wMilliSecond; //时标毫秒 + //显示点编号(路口编号、内部编号) BYTE byMonitoringSiteID[MONITORSITE_ID_LEN/*48*/]; - BYTE byDeviceID[DEVICE_ID_LEN/*48*/];//豸 - DWORD dwXmlLen;//XMLϢ - char* pXmlBuf;// XMLϢָ,XMLӦEventNotificationAlert XML Block - BYTE byTargetType;// Ŀͣ0~δ֪1~ˡ2~ֳ3~ֳ(˼з) - BYTE byRuleID;//ID,1-4,congestion¼˹ʱ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byBrokenNetHttp; // ־λ0-شݣ1-ش - BYTE byRes[3]; // ֽ - DWORD dwPlateSmallPicDataLen; //СͼͼƬ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pPlateSmallImage; // //ָСͼָ + BYTE byDeviceID[DEVICE_ID_LEN/*48*/];//设备编号 + DWORD dwXmlLen;//XML报警信息长度 + char* pXmlBuf;// XML报警信息指针,其XML对应到EventNotificationAlert XML Block + BYTE byTargetType;// 检测的目标类型,0~未知,1~行人、2~二轮车、3~三轮车(行人检测中返回) + BYTE byRuleID;//规则ID,1-4,当congestion事件配置了规则区域时返回 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byBrokenNetHttp; // 断网续传标志位,0-不重传数据,1-重传数据 + BYTE byRes[3]; // 保留字节 + DWORD dwPlateSmallPicDataLen; //车牌小图图片长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pPlateSmallImage; // //指向车牌小图的指针 #else - char* pPlateSmallImage; //ָСͼָ + char* pPlateSmallImage; //指向车牌小图的指针 BYTE byRes1[4]; #endif }NET_DVR_AID_ALARM_V41, *LPNET_DVR_AID_ALARM_V41; -//ͨͳϢ(չ) +//交通统计信息报警(扩展) typedef struct tagNET_DVR_TPS_ALARM_V41 { - DWORD dwSize; // ṹС - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - NET_VCA_DEV_INFO struDevInfo; // ǰ豸Ϣ - NET_DVR_TPS_INFO_V41 struTPSInfo; // ͨͳϢ - //ʾţ·ڱšڲţ + DWORD dwSize; // 结构体大小 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + NET_VCA_DEV_INFO struDevInfo; // 前端设备信息 + NET_DVR_TPS_INFO_V41 struTPSInfo; // 交通参数统计信息 + //显示点编号(路口编号、内部编号) BYTE byMonitoringSiteID[MONITORSITE_ID_LEN/*48*/]; - BYTE byDeviceID[DEVICE_ID_LEN/*48*/];//豸 - DWORD dwStartTime; // ʼͳʱ - DWORD dwStopTime; // ͳʱ - BYTE byRes[24]; // + BYTE byDeviceID[DEVICE_ID_LEN/*48*/];//设备编号 + DWORD dwStartTime; // 开始统计时间 + DWORD dwStopTime; // 结束统计时间 + BYTE byRes[24]; // 保留 } NET_DVR_TPS_ALARM_V41,*LPNET_DVR_TPS_ALARM_V41; -/*******************************ܽͨ¼ end*****************************************/ +/*******************************智能交通事件 end*****************************************/ #define XXX_MAJOR_VERSION 2 -/* Ӱ汾ţŻֲṹģڼ汾ʱ31 */ +/* 子版本号,性能优化、局部结构调整、模块内集成其他库的主版本提升时递增,最大31 */ #define XXX_SUB_VERSION 3 -/* 汾ţbug31 */ +/* 修正版本号,修正bug后递增,最大31 */ #define XXX_REVISION_VERSION 4 typedef struct tagNET_DVR_VCA_VERSION { - WORD wMajorVersion; // 汾 - WORD wMinorVersion; // ΰ汾 - WORD wRevisionNumber; // - WORD wBuildNumber; // - WORD wVersionYear; // 汾- - BYTE byVersionMonth; // 汾- - BYTE byVersionDay; // 汾- - BYTE byType;/*㷨ƣ0-1-,2-쳣Ϊ,3-,4-Ŀץ,5-Ŀʶ 6-Ա,7-ѧվ, - 8-ͳ,9-ֿ,10-ȫñ,11-ݼ㷨,12-ͳ,13-(˽Ŀṹ㷨)HMS, - 14-ʦΪ, 15-Աܶȣ16-쳣17-ڼ⣬18-Ա19-ģץģ20-HMSģ,21-̬Ʒ, - 22-ǹ㷨,23-ŶӼ*/ - BYTE byRes[7]; // ֽ + WORD wMajorVersion; // 主版本号 + WORD wMinorVersion; // 次版本号 + WORD wRevisionNumber; // 修正号 + WORD wBuildNumber; // 编译号 + WORD wVersionYear; // 版本日期-年 + BYTE byVersionMonth; // 版本日期-月 + BYTE byVersionDay; // 版本日期-日 + BYTE byType;/*算法库类型名称,0-保留,1-人脸属性,2-异常行为检测,3-人体属性,4-目标抓拍,5-目标识别 6-人脸对比,7-学生站立检测, + 8-区域人数统计,9-人脸评分库,10-安全帽检测,11-电梯检测算法库,12-客流量统计,13-(私有目标结构化算法)HMS, + 14-教师行为检测, 15-人员密度,16-人数异常,17-离岗检测,18-人员滞留,19-人脸建模抓拍,20-HMS建模,21-态势分析, + 22-城管算法,23-排队检测*/ + BYTE byRes[7]; // 保留字节 }NET_DVR_VCA_VERSION, *LPNET_DVR_VCA_VERSION; -/****************************** end***********************************/ +/******************************智能 end***********************************/ -/******************************ʶ begin******************************************/ +/******************************车牌识别 begin******************************************/ typedef struct tagNET_DVR_PLATE_PARAM { - BYTE byPlateRecoMode; //ʶģʽ,ĬΪ1(Ƶģʽ) - BYTE byBelive; //Ŷֵ, ֻƵʶʽ, ݱӳ̶, 󴥷ʸ߾, ©ʸ߾, 80-90Χ - BYTE byRes[22]; //ֽ + BYTE byPlateRecoMode; //车牌识别的模式,默认为1(视频触发模式) + BYTE byBelive; //整牌置信度阈值, 只用于视频识别方式, 根据背景复杂程度设置, 误触发率高就设高, 漏车率高就设低, 建议在80-90范围内 + BYTE byRes[22]; //保留字节 }NET_DVR_PALTE_PARAM, *LPNET_DVR_PALTE_PARAM; typedef struct tagNET_DVR_PLATECFG { DWORD dwSize; - DWORD dwEnable; /* ǷƵʶ 0 1 */ - BYTE byPicProType; //ʱͼƬʽ 0- 0-ϴ - BYTE byRes1[3]; // ֽ - NET_DVR_JPEGPARA struPictureParam; //ͼƬṹ - NET_DVR_PALTE_PARAM struPlateParam; // ʶ - NET_DVR_HANDLEEXCEPTION struHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//ʱ - BYTE byRelRecordChan[MAX_CHANNUM]; //¼ͨ,Ϊ1ʾͨ - BYTE byRes[20]; // ֽ + DWORD dwEnable; /* 是否启用视频车牌识别 0-否 1-是 */ + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byRes1[3]; // 保留字节 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_DVR_PALTE_PARAM struPlateParam; // 车牌识别参数配置 + NET_DVR_HANDLEEXCEPTION struHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM]; //报警触发的录象通道,为1表示触发该通道 + BYTE byRes[20]; // 保留字节 }NET_DVR_PLATECFG, *LPNET_DVR_PLATECFG; -// ʶӽṹ +// 车牌识别结果子结构 typedef struct tagNET_DVR_PLATE_INFO { - BYTE byPlateType; // - BYTE byColor; //ɫ - BYTE byBright; // - BYTE byLicenseLen; //ַ - BYTE byEntireBelieve; //ƵŶȣ-100 - BYTE byRegion; // ֵ 0-1-ŷ(EU)2-(ER)3-ŷ&˹(EU&CIS) ,4-ж(ME),5-̫(APAC),6-(޺,AfandAM),0xff- - BYTE byCountry; // ֵöCOUNTRY_INDEX֧"COUNTRY_ALL = 0xff, //ALL ȫ" - BYTE byArea; //ʡݣڲö٣ EMI_AREA - BYTE byPlateSize; //Ƴߴ磬0~δ֪1~long, 2~short(жʹ) - /*ϢʶǷNET_DVR_VEHICLE_ADDINFOṹ壩,0-޸Ϣ, 1-иϢ*/ + BYTE byPlateType; //车牌类型 + BYTE byColor; //车牌颜色 + BYTE byBright; //车牌亮度 + BYTE byLicenseLen; //车牌字符个数 + BYTE byEntireBelieve; //整个车牌的置信度,-100 + BYTE byRegion; // 区域索引值 0-保留,1-欧洲(EU),2-俄语区域(ER),3-欧洲&俄罗斯(EU&CIS) ,4-中东(ME),5-亚太(APAC),6-非美(非洲和美洲,AfandAM),0xff-所有 + BYTE byCountry; // 国家索引值,参照枚举COUNTRY_INDEX(不支持"COUNTRY_ALL = 0xff, //ALL 全部") + BYTE byArea; //区域(省份),各国家内部区域枚举,阿联酋参照 EMI_AREA + BYTE byPlateSize; //车牌尺寸,0~未知,1~long, 2~short(中东车牌使用) + /*附加信息标识(即是否有NET_DVR_VEHICLE_ADDINFO结构体),0-无附加信息, 1-有附加信息。*/ BYTE byAddInfoFlag; - //ֶbyCountryϣչ֮ʹøֶδbyCountryʹwCRIndexֶ - //Ϊ˼ûֵֶ256򣩣byCountryֵΪ0bxfdֶЧ - WORD wCRIndex ;///ֵο_CR_ INDEX_ - BYTE byRes[4]; // -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ + //该字段是在byCountry索引基础上,扩展了区域索引,之后使用该字段代替byCountry,优先使用wCRIndex字段 + //为了兼容老用户,如果该字段值大于256(即新增区域),则byCountry赋值为0bxfd(国家字段无效)。 + WORD wCRIndex ;//国家/地区索引,索引值参考_CR_ INDEX_ + BYTE byRes[4]; //保留 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 BYTE* pAddInfoBuffer; #else - /*Ϣָ,ָNET_DVR_VEHICLE_ADDINFOṹ*/ + /*附加信息指针,指向NET_DVR_VEHICLE_ADDINFO结构体*/ BYTE* pAddInfoBuffer; BYTE byRes2[4]; #endif - char sPlateCategory[MAX_CATEGORY_LEN/*8*/];//ƸϢ, жгƺԱߵСϢ(Ŀǰֻж֧) - DWORD dwXmlLen; //XMLϢ - char* pXmlBuf; // XMLϢָ,Ϊ COMM_ITS_PLATE_RESULCOMM_PLATE_RESULT_V50ʱЧXMLӦEventNotificationAlert XML Block - NET_VCA_RECT struPlateRect; //λ - char sLicense[MAX_LICENSE_LEN]; //ƺ,עжСҲ복ƺ룬Сֺͳƺмÿոָ - BYTE byBelieve[MAX_LICENSE_LEN]; //ʶַŶȣ⵽"A12345", ŶΪ,20,30,40,50,60,70ʾ""ȷĿֻ%"A"ֵȷĿ% + char sPlateCategory[MAX_CATEGORY_LEN/*8*/];//车牌附加信息, 即中东车牌中车牌号码旁边的小字信息,(目前只有中东地区支持) + DWORD dwXmlLen; //XML报警信息长度 + char* pXmlBuf; // XML报警信息指针,报警类型为 COMM_ITS_PLATE_RESUL、COMM_PLATE_RESULT_V50时有效,其XML对应到EventNotificationAlert XML Block + NET_VCA_RECT struPlateRect; //车牌位置 + char sLicense[MAX_LICENSE_LEN]; //车牌号码,注:中东车牌需求把小字也纳入车牌号码,小字和车牌号中间用空格分隔 + BYTE byBelieve[MAX_LICENSE_LEN]; //各个识别字符的置信度,如检测到车牌"浙A12345", 置信度为,20,30,40,50,60,70,则表示"浙"字正确的可能性只有%,"A"字的正确的可能性是% }NET_DVR_PLATE_INFO, *LPNET_DVR_PLATE_INFO; typedef struct tagNET_DVR_PLATERECO_RESULE { DWORD dwSize; - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo; // ǰ豸Ϣ + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; // 前段设备信息 NET_DVR_PLATE_INFO struPlateInfo; - DWORD dwPicDataLen; //ͼƬij Ϊ0ʾûͼƬ0ʾýṹͼƬ*/ - DWORD dwRes[4]; //Ϊ0 - BYTE *pImage; //ָͼƬָ + DWORD dwPicDataLen; //返回图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据*/ + DWORD dwRes[4]; //保留,设置为0 + BYTE *pImage; //指向图片的指针 }NET_DVR_PLATERECO_RESULE, *LPNET_DVR_PLATERECO_RESULE; -/******************************ʶ end******************************************/ +/******************************车牌识别 end******************************************/ -/*******************************Ƶۺƽ̨***********************************/ +/*******************************视频综合平台***********************************/ typedef struct { NET_DVR_TIME strLogTime; @@ -18083,136 +18083,136 @@ typedef struct DWORD dwAlarmInPort;//alarm input port DWORD dwAlarmOutPort;//alarm output port DWORD dwInfoLen; - BYTE byDevSequence;//λ - BYTE byMacAddr[MACADDR_LEN];//MACַ,6 - BYTE sSerialNumber[SERIALNO_LEN];//кţ48 + BYTE byDevSequence;//槽位号 + BYTE byMacAddr[MACADDR_LEN];//MAC地址,6 + BYTE sSerialNumber[SERIALNO_LEN];//序列号,48 char sInfo[LOG_INFO_LEN - SERIALNO_LEN - MACADDR_LEN - 1 ]; }NET_DVR_LOG_MATRIX, *LPNET_DVR_LOG_MATRIX; -//2009-11-21 Ƶۺƽ̨ +//2009-11-21 视频综合平台 typedef struct tagVEDIOPLATLOG { - BYTE bySearchCondition;//0-λ1-к2-MACַ - //λţ0-79ӦϵͳIJλţ - //0xffʾе־78K6467 - //0xfeʾ78Kϵ־0xfd־0xfc־ + BYTE bySearchCondition;//搜索条件,0-按槽位号搜索,1-按序列号搜索,2-按MAC地址进行搜索 + //槽位号,0-79:对应子系统的槽位号; + //0xff:表示搜索所有的日志,包括78K和所有6467; + //0xfe:表示搜索78K上的日志;0xfd:子域日志;0xfc:域日志。。 BYTE byDevSequence; - BYTE sSerialNumber[SERIALNO_LEN];//кţ48 - BYTE byMacAddr[MACADDR_LEN];//MACַ,6 + BYTE sSerialNumber[SERIALNO_LEN];//序列号,48 + BYTE byMacAddr[MACADDR_LEN];//MAC地址,6 } NET_DVR_VEDIOPLATLOG, *LPNET_DVR_VEDIOPLATLOG; typedef struct tagNET_DVR_CODESYSTEMABILITY { DWORD dwSize; - DWORD dwAbilityVersion;//汾ţ16λʾ汾16λʾΰ汾 - DWORD dwSupportMaxVideoFrameRate;//λ(K) - /*λ: - 0:ʱ¼ - 1:ʱ|¼¼ - 2:ƶ¼ - 3:翪¼ - 4:ƶ|翪¼ - 5:ƶ&翪¼ - 6:ܽ¼ - 7:ⴥ¼ - 8:ʶ𴥷¼ - 9:ֶ¼*/ + DWORD dwAbilityVersion;//能力集版本号,高16位表示主版本,低16位表示次版本 + DWORD dwSupportMaxVideoFrameRate;//单位(K) + /*按位: + 0:定时录像; + 1:定时|事件触发录像 + 2:移动侦测录像; + 3:网络开关量报警录像; + 4:移动侦测|网络开关量报警录像; + 5:移动侦测&网络开关量报警录像; + 6:周界防范触发录像; + 7:人脸检测触发录像; + 8:车牌识别触发录像; + 9:手动录像*/ DWORD dwSupportRecordType; - BYTE bySupportLinkMode;//λ:0λ:ʾ1λ:ʾ - BYTE bySupportStringRow;//ַ֧ - BYTE bySupportHideNum;//֧Ƶڵ + BYTE bySupportLinkMode;//按位:第0位:表示主码流,第1位:表示子码流 + BYTE bySupportStringRow;//支持字符叠加行数 + BYTE bySupportHideNum;//支持视频遮挡数量 BYTE byRes1; - /*0-DCIF1-CIF2-QCIF3-4CIF4-2CIF6-QVGA(320*240), 16-VGA17-UXGA18-SVGA19-HD720p20-XVGA21-HD900p22-SXGAp27-HD1080i28-2560*192029-1600*30430-2048*153631-2448*204832-2448*120033-2448*800 34-XGA1024x76835-SXGA1280x1024*/ - BYTE byMainStreamSupportResolution[8];//ֵ֧ķֱʣλ - BYTE bySubStreamSupportResolution[8];//ֵ֧ķֱʣλ - BYTE byEventStreamSupportResolution[8];//¼ֵ֧ķֱʣλ - BYTE byNotSupportPreview;//Ƿ֧Ԥ,1-֧֣0-֧ - BYTE byNotSupportStorage;//Ƿִ֧洢,1-֧֣0-֧ - BYTE byRes2[98];// + /*0-DCIF,1-CIF,2-QCIF,3-4CIF,4-2CIF,6-QVGA(320*240), 16-VGA,17-UXGA,18-SVGA,19-HD720p,20-XVGA,21-HD900p,22-SXGAp,27-HD1080i,28-2560*1920,29-1600*304,30-2048*1536,31-2448*2048,32-2448*1200,33-2448*800 ,34-XGA(1024x768),35-SXGA(1280x1024)*/ + BYTE byMainStreamSupportResolution[8];//主码流支持的分辨率,按位 + BYTE bySubStreamSupportResolution[8];//子码流支持的分辨率,按位 + BYTE byEventStreamSupportResolution[8];//事件触发码流支持的分辨率,按位 + BYTE byNotSupportPreview;//是否支持预览,1-不支持,0-支持 + BYTE byNotSupportStorage;//是否支持存储,1-不支持,0-支持 + BYTE byRes2[98];//保留 }NET_DVR_CODESYSTEMABILITY, *LPNET_DVR_CODESYSTEMABILITY; /********************************end*******************************************/ -/******************************ץĻ*******************************************/ -//IO +/******************************抓拍机*******************************************/ +//IO输入配置 typedef struct tagNET_DVR_IO_INCFG { DWORD dwSize; - BYTE byIoInStatus;//IO״̬0-½أ1-أ2-غ½أ3-ߵƽ4-͵ƽ - BYTE byRes[3];//ֽ + BYTE byIoInStatus;//输入的IO口状态,0-下降沿,1-上升沿,2-上升沿和下降沿,3-高电平,4-低电平 + BYTE byRes[3];//保留字节 }NET_DVR_IO_INCFG, *LPNET_DVR_IO_INCFG; -//IO +//IO输出配置 typedef struct tagNET_DVR_IO_OUTCFG { DWORD dwSize; - BYTE byDefaultStatus;//IOĬ״̬0-͵ƽ1-ߵƽ - BYTE byIoOutStatus;//IOЧʱ״̬0-͵ƽ1-ߵƽ2- - WORD wAheadTime;//IOǰʱ䣬λus - DWORD dwTimePluse;//ʱ䣬λus - DWORD dwTimeDelay;//IOЧʱ䣬λus - BYTE byFreqMulti; //ƵֵΧ[1,15] - BYTE byDutyRate; //ռձȣ[0,40%] + BYTE byDefaultStatus;//IO默认状态:0-低电平,1-高电平 + BYTE byIoOutStatus;//IO起效时状态:0-低电平,1-高电平,2-脉冲 + WORD wAheadTime;//输出IO提前时间,单位us + DWORD dwTimePluse;//脉冲间隔时间,单位us + DWORD dwTimeDelay;//IO有效持续时间,单位us + BYTE byFreqMulti; //倍频,数值范围[1,15] + BYTE byDutyRate; //占空比,[0,40%] BYTE byRes[2]; }NET_DVR_IO_OUTCFG, *LPNET_DVR_IO_OUTCFG; -// +//闪光灯配置 typedef struct tagNET_DVR_FLASH_OUTCFG { DWORD dwSize; - BYTE byMode;//˸ģʽ0-1-2-3- - BYTE byRelatedIoIn;//ƹIOţʱ˲Ч - BYTE byRecognizedLane; /*IOţλʾbit0ʾIO1Ƿ0-1-*/ - BYTE byDetectBrightness;/*Զʹ0-⣻1-*/ - BYTE byBrightnessThreld;/*ʹֵΧ[0,100],ֵ*/ - BYTE byStartHour; //ʼʱ-Сʱ,ȡֵΧ0-23 - BYTE byStartMinute; //ʼʱ-,ȡֵΧ0-59 - BYTE byEndHour; //ʱ-Сʱ,ȡֵΧ0-23 - BYTE byEndMinute; //ʱ-,ȡֵΧ0-59 - BYTE byFlashLightEnable; //ʱʹ:0-;1- + BYTE byMode;//闪光灯闪烁模式,0-不闪,1-闪,2-关联闪,3-轮闪 + BYTE byRelatedIoIn;//闪光灯关联的输入IO号(关联闪时此参数有效) + BYTE byRecognizedLane; /*关联的IO号,按位表示,bit0表示IO1是否关联,0-不关联,1-关联*/ + BYTE byDetectBrightness;/*自动检测亮度使能闪光灯0-不检测;1-检测*/ + BYTE byBrightnessThreld;/*使能闪光灯亮度阈值,范围[0,100],高于阈值闪*/ + BYTE byStartHour; //开始时间-小时,取值范围0-23 + BYTE byStartMinute; //开始时间-分,取值范围0-59 + BYTE byEndHour; //结束时间-小时,取值范围0-23 + BYTE byEndMinute; //结束时间-分,取值范围0-59 + BYTE byFlashLightEnable; //设置闪光灯时间使能:0-关;1-开 BYTE byRes[2]; }NET_DVR_FLASH_OUTCFG, *LPNET_DVR_FLASH_OUTCFG; -//̵ƹܣ2IOһ飩 +//红绿灯功能(2个IO输入一组) typedef struct tagNET_DVR_LIGHTSNAPCFG { DWORD dwSize; - BYTE byLightIoIn;//̵ƵIO - BYTE byTrigIoIn;//IO - BYTE byRelatedDriveWay;//IOij - BYTE byTrafficLight; //0-ߵƽƣ͵ƽ̵ƣ1-ߵƽ̵ƣ͵ƽ - BYTE bySnapTimes1; //ץĴ10-ץģ0-Ĵ5 - BYTE bySnapTimes2; //̵ץĴ20-ץģ0-Ĵ5 + BYTE byLightIoIn;//红绿灯的IO 号 + BYTE byTrigIoIn;//触发的IO号 + BYTE byRelatedDriveWay;//触发IO关联的车道号 + BYTE byTrafficLight; //0-高电平红灯,低电平绿灯;1-高电平绿灯,低电平红灯 + BYTE bySnapTimes1; //红灯抓拍次数1,0-不抓拍,非0-连拍次数,最大5次 + BYTE bySnapTimes2; //绿灯抓拍次数2,0-不抓拍,非0-连拍次数,最大5次 BYTE byRes1[2]; - WORD wIntervalTime1[MAX_INTERVAL_NUM];//ļʱ䣬ms - WORD wIntervalTime2[MAX_INTERVAL_NUM];//̵ļʱ䣬ms - BYTE byRecord;//¼־0-¼1-¼ - BYTE bySessionTimeout;//¼ʱʱ䣨룩 - BYTE byPreRecordTime;//¼ƬԤ¼ʱ() - BYTE byVideoDelay;//¼Ƭʱʱ䣨룩 - BYTE byRes2[32];//ֽ + WORD wIntervalTime1[MAX_INTERVAL_NUM];//红灯连拍间隔时间,ms + WORD wIntervalTime2[MAX_INTERVAL_NUM];//绿灯连拍间隔时间,ms + BYTE byRecord;//闯红灯周期录像标志,0-不录像,1-录像 + BYTE bySessionTimeout;//闯红灯周期录像超时时间(秒) + BYTE byPreRecordTime;//闯红灯录像片段预录时间(秒) + BYTE byVideoDelay;//闯红灯录像片段延时时间(秒) + BYTE byRes2[32];//保留字节 }NET_DVR_LIGHTSNAPCFG, *LPNET_DVR_LIGHTSNAPCFG; -//ٹ(2IOһ飩 +//测速功能(2个IO输入一组) typedef struct tagNET_DVR_MEASURESPEEDCFG { DWORD dwSize; - BYTE byTrigIo1; //ٵ1Ȧ - BYTE byTrigIo2; //ٵ2Ȧ - BYTE byRelatedDriveWay;//IOij - BYTE byTestSpeedTimeOut;//ģʽʱʱ䣬λs - DWORD dwDistance;//Ȧ,cm - BYTE byCapSpeed;//ģʽٶȣλkm/h - BYTE bySpeedLimit;//ֵλkm/h - BYTE bySnapTimes1; //Ȧ1ץĴ0-ץģ0-Ĵ5 - BYTE bySnapTimes2; //Ȧ2ץĴ0-ץģ0-Ĵ5 - WORD wIntervalTime1[MAX_INTERVAL_NUM];//Ȧ1ļʱ䣬ms - WORD wIntervalTime2[MAX_INTERVAL_NUM];//Ȧ2ļʱ䣬ms - BYTE byRes[32];//ֽ + BYTE byTrigIo1; //测速第1线圈 + BYTE byTrigIo2; //测速第2线圈 + BYTE byRelatedDriveWay;//触发IO关联的车道号 + BYTE byTestSpeedTimeOut;//测速模式超时时间,单位s + DWORD dwDistance;//线圈距离,cm + BYTE byCapSpeed;//测速模式起拍速度,单位km/h + BYTE bySpeedLimit;//限速值,单位km/h + BYTE bySnapTimes1; //线圈1抓拍次数,0-不抓拍,非0-连拍次数,最大5次 + BYTE bySnapTimes2; //线圈2抓拍次数,0-不抓拍,非0-连拍次数,最大5次 + WORD wIntervalTime1[MAX_INTERVAL_NUM];//线圈1连拍间隔时间,ms + WORD wIntervalTime2[MAX_INTERVAL_NUM];//线圈2连拍间隔时间,ms + BYTE byRes[32];//保留字节 }NET_DVR_MEASURESPEEDCFG, *LPNET_DVR_MEASURESPEEDCFG; -// +//配置条件 typedef struct tagNET_DVR_CLOUDSTORAGE_COND { DWORD dwSize; @@ -18220,100 +18220,100 @@ typedef struct tagNET_DVR_CLOUDSTORAGE_COND BYTE byRes1[64]; }NET_DVR_CLOUDSTORAGE_COND,*LPNET_DVR_CLOUDSTORAGE_COND; -//ýṹ +//配置结构 typedef struct tagNET_DVR_POOLPARAM { - DWORD dwPoolID;// ƴ洢ڵ + DWORD dwPoolID;// 云存储分配节点号 BYTE byRes[4]; }NET_DVR_POOLPARAM,*LPNET_DVR_POOLPARAM; typedef struct tagNET_DVR_CLOUDSTORAGE_CFG { DWORD dwSize; - BYTE byEnable;//0-1- + BYTE byEnable;//0-不开启,1-开启 BYTE byRes[3]; NET_DVR_IPADDR struIP; - WORD wPort;//ݶ˿ + WORD wPort;//数据端口 BYTE byRes1[2]; - char szUser[CLOUD_NAME_LEN/*48*/]; //û - char szPassword[CLOUD_PASSWD_LEN/*48*/]; // - NET_DVR_POOLPARAM struPoolInfo[16];//0ʾ¼أ1ʾΥ¼أ2ʾݳأIPC/D + char szUser[CLOUD_NAME_LEN/*48*/]; //用户名 + char szPassword[CLOUD_PASSWD_LEN/*48*/]; // 密码 + NET_DVR_POOLPARAM struPoolInfo[16];//数组0表示卡口录像池,数组1表示违章录像池,数组2表示车辆侦测数据池(IPC/D) BYTE byRes2[128]; }NET_DVR_CLOUDSTORAGE_CFG,*LPNET_DVR_CLOUDSTORAGE_CFG; typedef struct tagNET_DVR_PARKLAMP_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byParkingIndex; //Գλţ14 - BYTE byRes[15]; // + DWORD dwChannel; //通道号 + BYTE byParkingIndex; //相对车位号(1~4) + BYTE byRes[15]; //保留 }NET_DVR_PARKLAMP_COND, *LPNET_DVR_PARKLAMP_COND; typedef struct tagNET_DVR_PARKLAMP_INFOCFG { DWORD dwSize; - char sLicense[MAX_LICENSE_LEN/*16*/];//ƺ - char sParkingNo[MAX_LICENSE_LEN/*16*/];//λ(ʵʵijλ) - BYTE byLampFlicker;//0~˸ 1 ˸ (λָʾ˸) - BYTE byLampColor;//0- 1- 2- 3- 4- 5-Ʒ 6- 7-ɫ (λָʾɫ) - BYTE byStatus; //λ״̬ 0-޳1-г - BYTE byColorDepth; //ɫdz0-ɫ1-dzɫ,0xff-δ֪ - BYTE byColor;//ɫ0-ɫ1-ɫ2-ɫ3-ɫ4-ɫ5-ɫ6-7-ɫ8-ɫ9-ɫ10-ɫ11-ɫ12-ɫ0xff-δгɫʶ - //Ʒʶ οö VLR_VEHICLE_CLASS + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + char sParkingNo[MAX_LICENSE_LEN/*16*/];//车位编号(实际的车位编号) + BYTE byLampFlicker;//0~不闪烁 1 ~闪烁 (车位指示灯闪烁) + BYTE byLampColor;//0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (车位指示灯颜色) + BYTE byStatus; //车位状态 0-无车,1-有车 + BYTE byColorDepth; //车身颜色深浅,0-深色,1-浅色,0xff-未知 + BYTE byColor;//车身颜色,0-其他色,1-白色,2-银色,3-灰色,4-黑色,5-红色,6-深蓝,7-蓝色,8-黄色,9-绿色,10-棕色,11-粉色,12-紫色,0xff-未进行车身颜色识别 + //车辆品牌类型识别; 参考枚举类型 VLR_VEHICLE_CLASS BYTE byVehicleLogoRecog; - BYTE byRes[250];// + BYTE byRes[250];//保留 }NET_DVR_PARKLAMP_INFOCFG, *LPNET_DVR_PARKLAMP_INFOCFG; -//Ƶ +//视频参数配置 typedef struct tagNET_DVR_VIDEOEFFECT { BYTE byBrightnessLevel; /*0-100*/ BYTE byContrastLevel; /*0-100*/ BYTE bySharpnessLevel; /*0-100*/ BYTE bySaturationLevel; /*0-100*/ - BYTE byHueLevel; /*0-100,*/ - BYTE byEnableFunc; //ʹܣλʾbit0-SMART IR()bit1-ն,bit2-ǿʹܣ0-1- - BYTE byLightInhibitLevel; //ǿƵȼ[1-3]ʾȼ - BYTE byGrayLevel; //Ҷֵ0-[0-255]1-[16-235] + BYTE byHueLevel; /*0-100,(保留)*/ + BYTE byEnableFunc; //使能,按位表示,bit0-SMART IR(防过曝),bit1-低照度,bit2-强光抑制使能,0-否,1-是 + BYTE byLightInhibitLevel; //强光抑制等级,[1-3]表示等级 + BYTE byGrayLevel; //灰度值域,0-[0-255],1-[16-235] }NET_DVR_VIDEOEFFECT, *LPNET_DVR_VIDEOEFFECT; -// +//增益配置 typedef struct tagNET_DVR_GAIN { - BYTE byGainLevel; /*棺0-100*/ - BYTE byGainUserSet; /*ûԶ棻0-100ץĻCCDģʽµץ*/ + BYTE byGainLevel; /*增益:0-100*/ + BYTE byGainUserSet; /*用户自定义增益;0-100,对于抓拍机,是CCD模式下的抓拍增益*/ BYTE byRes[2]; - DWORD dwMaxGainValue;/*ֵλdB*/ + DWORD dwMaxGainValue;/*最大增益值,单位dB*/ }NET_DVR_GAIN, *LPNET_DVR_GAIN; -//ƽ +//白平衡配置 typedef struct tagNET_DVR_WHITEBALANCE { -BYTE byWhiteBalanceMode; /*0-ֶƽ⣨MWB,1-Զƽ1AWB1,2-Զƽ2 (AWB2),3-ԶƸΪƽ(Locked WB) - 4-(Indoor)5-(Outdoor)6-չ(Fluorescent Lamp)7-Ƶ(Sodium Lamp) - 8-Զ(Auto-Track)9-һΰƽ(One Push)10-Զ(Auto-Outdoor) - 11-ƵԶ (Auto-Sodiumlight)12-ˮ(Mercury Lamp)13-Զƽ(Auto) -14-׳ (IncandescentLamp)15-ů(Warm Light Lamp)16-Ȼ(Natural Light) */ -BYTE byWhiteBalanceModeRGain; /*ֶƽʱЧֶƽ R*/ -BYTE byWhiteBalanceModeBGain; /*ֶƽʱЧֶƽ B*/ +BYTE byWhiteBalanceMode; /*0-手动白平衡(MWB),1-自动白平衡1(AWB1),2-自动白平衡2 (AWB2),3-自动控制改名为锁定白平衡(Locked WB), + 4-室外(Indoor),5-室内(Outdoor)6-日光灯(Fluorescent Lamp),7-钠灯(Sodium Lamp), + 8-自动(Auto-Track)9-一次白平衡(One Push),10-室外自动(Auto-Outdoor), + 11-钠灯自动 (Auto-Sodiumlight),12-水银灯(Mercury Lamp),13-自动白平衡(Auto), +14-白炽灯 (IncandescentLamp),15-暖光灯(Warm Light Lamp),16-自然光(Natural Light) */ +BYTE byWhiteBalanceModeRGain; /*手动白平衡时有效,手动白平衡 R增益*/ +BYTE byWhiteBalanceModeBGain; /*手动白平衡时有效,手动白平衡 B增益*/ BYTE byRes[5]; }NET_DVR_WHITEBALANCE, *LPNET_DVR_WHITEBALANCE; -//ع +//曝光控制 typedef struct tagNET_DVR_EXPOSURE { - BYTE byExposureMode; /*0 ֶع 1Զع*/ - BYTE byAutoApertureLevel; /* ԶȦ, 0-10 */ + BYTE byExposureMode; /*0 手动曝光 1自动曝光*/ + BYTE byAutoApertureLevel; /* 自动光圈灵敏度, 0-10 */ BYTE byRes[2]; - DWORD dwVideoExposureSet; /* ԶƵعʱ䣨λus*//*ע:ԶعʱֵΪعֵ 20-1s(1000000us)*/ - DWORD dwExposureUserSet; /* Զعʱ,ץĻӦʱCCDģʽʱץĿٶ*/ + DWORD dwVideoExposureSet; /* 自定义视频曝光时间(单位us)*//*注:自动曝光时该值为曝光最慢值 新增20-1s(1000000us)*/ + DWORD dwExposureUserSet; /* 自定义曝光时间,在抓拍机上应用时,CCD模式时是抓拍快门速度*/ DWORD dwRes; } NET_DVR_EXPOSURE, *LPNET_DVR_EXPOSURE; -//̬ +//宽动态配置 typedef struct tagNET_DVR_WDR { - BYTE byWDREnabled; /*̬0 dsibale 1 enable 2 auto*/ + BYTE byWDREnabled; /*宽动态:0 dsibale 1 enable 2 auto*/ BYTE byWDRLevel1; /*0-F*/ BYTE byWDRLevel2; /*0-F*/ BYTE byWDRContrastLevel; /*0-100*/ @@ -18322,33 +18322,33 @@ typedef struct tagNET_DVR_WDR typedef struct tagNET_DVR_WDR_CFG { - DWORD dwSize; //ṹС - NET_DVR_WDR struWDR; //Ϣ + DWORD dwSize; //结构体大小 + NET_DVR_WDR struWDR; //配置信息 }NET_DVR_WDR_CFG, *LPNET_DVR_WDR_CFG; -//ҹת +//日夜转换功能配置 typedef struct tagNET_DVR_DAYNIGHT { - BYTE byDayNightFilterType; /*ҹл0-죬1-ҹ2-Զ3-ʱ4-봥, 5-Զģʽ2޹,6-ڹ⣬7-ڹԶ8-ڹⶨʱ*/ - BYTE bySwitchScheduleEnabled; /*0 dsibale 1 enable,()*/ - //ʱģʽ - BYTE byBeginTime; /*ʼʱ䣨Сʱ0-23*/ - BYTE byEndTime; /*ʱ䣨Сʱ0-23*/ - //ģʽ2 + BYTE byDayNightFilterType; /*日夜切换:0-白天,1-夜晚,2-自动,3-定时,4-报警输入触发, 5-自动模式2(无光敏),6-黑光,7-黑光自动,8-黑光定时*/ + BYTE bySwitchScheduleEnabled; /*0 dsibale 1 enable,(保留)*/ + //定时模式参数 + BYTE byBeginTime; /*开始时间(小时),0-23*/ + BYTE byEndTime; /*结束时间(小时),0-23*/ + //模式2 BYTE byDayToNightFilterLevel; //0-7 BYTE byNightToDayFilterLevel; //0-7 - BYTE byDayNightFilterTime;//(60) - //ʱģʽ - BYTE byBeginTimeMin; //ʼʱ䣨֣0-59 - BYTE byBeginTimeSec; //ʼʱ䣨룩0-59 - BYTE byEndTimeMin; //ʱ䣨֣0-59 - BYTE byEndTimeSec; //ʱ䣨룩0-59 - //봥ģʽ - BYTE byAlarmTrigState; //봥״̬0-죬1-ҹ + BYTE byDayNightFilterTime;//(60秒) + //定时模式参数 + BYTE byBeginTimeMin; //开始时间(分),0-59 + BYTE byBeginTimeSec; //开始时间(秒),0-59 + BYTE byEndTimeMin; //结束时间(分),0-59 + BYTE byEndTimeSec; //结束时间(秒),0-59 + //报警输入触发模式参数 + BYTE byAlarmTrigState; //报警输入触发状态,0-白天,1-夜晚 } NET_DVR_DAYNIGHT, *LPNET_DVR_DAYNIGHT; -//GammaУ +//Gamma校正 typedef struct tagNET_DVR_GAMMACORRECT { BYTE byGammaCorrectionEnabled; /*0 dsibale 1 enable*/ @@ -18356,87 +18356,87 @@ typedef struct tagNET_DVR_GAMMACORRECT BYTE byRes[6]; } NET_DVR_GAMMACORRECT, *LPNET_DVR_GAMMACORRECT; -//ⲹ +//背光补偿配置 typedef struct tagNET_DVR_BACKLIGHT { - BYTE byBacklightMode; /*ⲹ:0 off 1 UP2 DOWN3 LEFT4 RIGHT5MIDDLE6Զ壬10-11-Զ12-򱳹ⲹ*/ + BYTE byBacklightMode; /*背光补偿:0 off 1 UP、2 DOWN、3 LEFT、4 RIGHT、5MIDDLE、6自定义,10-开,11-自动,12-多区域背光补偿*/ BYTE byBacklightLevel; /*0x0-0xF*/ BYTE byRes1[2]; - DWORD dwPositionX1; //X1 - DWORD dwPositionY1; //Y1 - DWORD dwPositionX2; //X2 - DWORD dwPositionY2; //Y2 + DWORD dwPositionX1; //(X坐标1) + DWORD dwPositionY1; //(Y坐标1) + DWORD dwPositionX2; //(X坐标2) + DWORD dwPositionY2; //(Y坐标2) BYTE byRes2[4]; } NET_DVR_BACKLIGHT, *LPNET_DVR_BACKLIGHT; -//ֽ빦 +//数字降噪功能 typedef struct tagNET_DVR_NOISEREMOVE { - BYTE byDigitalNoiseRemoveEnable; /*0-ã1-ͨģʽֽ룬2-רģʽֽ*/ - BYTE byDigitalNoiseRemoveLevel; /*ͨģʽֽ뼶0x0-0xF*/ - BYTE bySpectralLevel; /*רģʽ¿ǿȣ0-100*/ - BYTE byTemporalLevel; /*רģʽʱǿȣ0-100*/ - BYTE byDigitalNoiseRemove2DEnable; /* ץ֡2D룬0-ã1- */ - BYTE byDigitalNoiseRemove2DLevel; /* ץ֡2D뼶0-100 */ + BYTE byDigitalNoiseRemoveEnable; /*0-不启用,1-普通模式数字降噪,2-专家模式数字降噪*/ + BYTE byDigitalNoiseRemoveLevel; /*普通模式数字降噪级别:0x0-0xF*/ + BYTE bySpectralLevel; /*专家模式下空域强度:0-100*/ + BYTE byTemporalLevel; /*专家模式下时域强度:0-100*/ + BYTE byDigitalNoiseRemove2DEnable; /* 抓拍帧2D降噪,0-不启用,1-启用 */ + BYTE byDigitalNoiseRemove2DLevel; /* 抓拍帧2D降噪级别,0-100 */ BYTE byRes[2]; } NET_DVR_NOISEREMOVE, *LPNET_DVR_NOISEREMOVE; -//CMOSģʽǰ˾ͷ +//CMOS模式下前端镜头配置 typedef struct tagNET_DVR_CMOSMODCFG { - BYTE byCaptureMod; //ץģʽ0-ץģʽ11-ץģʽ2 - BYTE byBrightnessGate;//ֵ - BYTE byCaptureGain1; //ץ1,0-100 - BYTE byCaptureGain2; //ץ2,0-100 - DWORD dwCaptureShutterSpeed1;//ץĿٶ1 - DWORD dwCaptureShutterSpeed2;//ץĿٶ2 + BYTE byCaptureMod; //抓拍模式:0-抓拍模式1;1-抓拍模式2 + BYTE byBrightnessGate;//亮度阈值 + BYTE byCaptureGain1; //抓拍增益1,0-100 + BYTE byCaptureGain2; //抓拍增益2,0-100 + DWORD dwCaptureShutterSpeed1;//抓拍快门速度1 + DWORD dwCaptureShutterSpeed2;//抓拍快门速度2 BYTE byRes[4]; }NET_DVR_CMOSMODECFG, *LPNET_DVR_CMOSMODECFG; -//ǰ˲ +//前端参数配置 typedef struct tagNET_DVR_CAMERAPARAMCFG { DWORD dwSize; - NET_DVR_VIDEOEFFECT struVideoEffect;/*ȡԱȶȡͶȡȡɫ*/ - NET_DVR_GAIN struGain;/*Զ*/ - NET_DVR_WHITEBALANCE struWhiteBalance;/*ƽ*/ - NET_DVR_EXPOSURE struExposure; /*ع*/ - NET_DVR_GAMMACORRECT struGammaCorrect;/*GammaУ*/ - NET_DVR_WDR struWdr;/*̬*/ - NET_DVR_DAYNIGHT struDayNight;/*ҹת*/ - NET_DVR_BACKLIGHT struBackLight;/*ⲹ*/ - NET_DVR_NOISEREMOVE struNoiseRemove;/*ֽ*/ + NET_DVR_VIDEOEFFECT struVideoEffect;/*亮度、对比度、饱和度、锐度、色调配置*/ + NET_DVR_GAIN struGain;/*自动增益*/ + NET_DVR_WHITEBALANCE struWhiteBalance;/*白平衡*/ + NET_DVR_EXPOSURE struExposure; /*曝光控制*/ + NET_DVR_GAMMACORRECT struGammaCorrect;/*Gamma校正*/ + NET_DVR_WDR struWdr;/*宽动态*/ + NET_DVR_DAYNIGHT struDayNight;/*日夜转换*/ + NET_DVR_BACKLIGHT struBackLight;/*背光补偿*/ + NET_DVR_NOISEREMOVE struNoiseRemove;/*数字降噪*/ BYTE byPowerLineFrequencyMode; /*0-50HZ; 1-60HZ*/ /* - 0-ԶȦ, - 1-ֶȦ, + 0-自动光圈, + 1-手动光圈, 2-P-Iris1, 3-Union 3-9mm F1.6-2.7 (T5280-PQ1) [IPC5.1.7] 4-Union 2.8-12mm F1.6-2.7 (T5289-PQ1) [IPC5.1.7] - 5-private 3.8-16mm F1.5HV3816P-8MPIR) + 5-private 3.8-16mm F1.5(HV3816P-8MPIR) 6-private 11-40mm F1.7 (HV1140P-8MPIR) - 7-private 2.7-12mm F1.2TV2712P-MPIR + 7-private 2.7-12mm F1.2(TV2712P-MPIR) 8- MZ5721D-12MPIR 9- MZ1555D-12MPIR 10- MZ5721D-12MPIR(RS485) 11- MZ1555D-12MPIR(RS485) */ BYTE byIrisMode; - BYTE byMirror ; /* 0 off1- leftright2- updown3-center */ - BYTE byDigitalZoom; /*:0 dsibale 1 enable*/ - BYTE byDeadPixelDetect; /*,0 dsibale 1 enable*/ - BYTE byBlackPwl;/*ڵƽ , 0-255*/ - BYTE byEptzGate;// EPTZر:0-ǫ̃1-ǫ̃ - BYTE byLocalOutputGate;//ر0-ر1-BNC 2-HDMIر 11-12-ü13-ü - //20-HDMI_720P50 - //21-HDMI_720P60 - //22-HDMI_1080I60 - //23-HDMI_1080I50 - //24-HDMI_1080P24 - //25-HDMI_1080P25 - //26-HDMI_1080P30 - //27-HDMI_1080P50 - //28-HDMI_1080P60 + BYTE byMirror ; /* 镜像:0 off,1- leftright,2- updown,3-center */ + BYTE byDigitalZoom; /*数字缩放:0 dsibale 1 enable*/ + BYTE byDeadPixelDetect; /*坏点检测,0 dsibale 1 enable*/ + BYTE byBlackPwl;/*黑电平补偿 , 0-255*/ + BYTE byEptzGate;// EPTZ开关变量:0-不启用电子云台,1-启用电子云台 + BYTE byLocalOutputGate;//本地输出开关变量0-本地输出关闭1-本地BNC输出打开 2-HDMI输出关闭 11-缩放输出,12-裁剪输出,13-裁剪缩放输出 + //20-HDMI_720P50输出开 + //21-HDMI_720P60输出开 + //22-HDMI_1080I60输出开 + //23-HDMI_1080I50输出开 + //24-HDMI_1080P24输出开 + //25-HDMI_1080P25输出开 + //26-HDMI_1080P30输出开 + //27-HDMI_1080P50输出开 + //28-HDMI_1080P60输出开 //40-SDI_720P50, //41-SDI_720P60, //42-SDI_1080I50, @@ -18461,3127 +18461,3127 @@ typedef struct tagNET_DVR_CAMERAPARAMCFG //68-YPBPR_1080P60 //69-YPBPR_720P25 //70-YPBPR_720P30 - //71- HDMI_1080Pûо֡ʣ֡豸captureModeһ£ - //72- HDMI_720Pûо֡ʣ֡豸captureModeһ£ - //73- HDMI_2160Pûо֡ʣ֡豸captureModeһ£ - BYTE byCoderOutputMode;//fpgaģʽ0ֱͨ3ذ - BYTE byLineCoding; //Ƿб룺0-1- - BYTE byDimmerMode; //ģʽ0-Զ1-Զ - BYTE byPaletteMode; //ɫ壺0-ȣ1-ȣ2-ɫ28-ɫ8 - BYTE byEnhancedMode; //ǿʽܱ̽ߣ0-ǿ1-12-23-34-4 - BYTE byDynamicContrastEN; //̬Աȶǿ 0-1 - BYTE byDynamicContrast; //̬Աȶ 0-100 - BYTE byJPEGQuality; //JPEGͼ 0-100 - NET_DVR_CMOSMODECFG struCmosModeCfg;//CMOSģʽǰ˲ãͷģʽȡ - BYTE byFilterSwitch; //˲أ0-ã1- - BYTE byFocusSpeed; //ͷٶȣ0-10 - BYTE byAutoCompensationInterval; //ʱԶŲ1-120λ - BYTE bySceneMode; //ģʽ0-⣬1-ڣ2-Ĭϣ3- + //71- HDMI_1080P输出开(没有具体帧率,帧率由设备加入和captureMode保持一致) + //72- HDMI_720P输出开(没有具体帧率,帧率由设备加入和captureMode保持一致) + //73- HDMI_2160P输出开(没有具体帧率,帧率由设备加入和captureMode保持一致) + BYTE byCoderOutputMode;//编码器fpga输出模式0直通3像素搬家 + BYTE byLineCoding; //是否开启行编码:0-否,1-是 + BYTE byDimmerMode; //调光模式:0-半自动,1-自动 + BYTE byPaletteMode; //调色板:0-白热,1-黑热,2-调色板2,…,8-调色板8 + BYTE byEnhancedMode; //增强方式(探测物体周边):0-不增强,1-1,2-2,3-3,4-4 + BYTE byDynamicContrastEN; //动态对比度增强 0-1 + BYTE byDynamicContrast; //动态对比度 0-100 + BYTE byJPEGQuality; //JPEG图像质量 0-100 + NET_DVR_CMOSMODECFG struCmosModeCfg;//CMOS模式下前端参数配置,镜头模式从能力集获取 + BYTE byFilterSwitch; //滤波开关:0-不启用,1-启用 + BYTE byFocusSpeed; //镜头调焦速度:0-10 + BYTE byAutoCompensationInterval; //定时自动快门补偿:1-120,单位:分钟 + BYTE bySceneMode; //场景模式:0-室外,1-室内,2-默认,3-弱光 }NET_DVR_CAMERAPARAMCFG, *LPNET_DVR_CAMERAPARAMCFG; -//͸ +//透雾 typedef struct tagNET_DVR_DEFOGCFG { - BYTE byMode; //ģʽ0-ã1-Զģʽ2-ģʽ - BYTE byLevel; //ȼ0-100 + BYTE byMode; //模式,0-不启用,1-自动模式,2-常开模式 + BYTE byLevel; //等级,0-100 BYTE byRes[6]; }NET_DVR_DEFOGCFG, *LPNET_DVR_DEFOGCFG; -//ӷ +//电子防抖 typedef struct tagNET_DVR_ELECTRONICSTABILIZATION { - BYTE byEnable;//ʹ 0- ã1- - BYTE byLevel; //ȼ0-100 + BYTE byEnable;//使能 0- 不启用,1- 启用 + BYTE byLevel; //等级,0-100 BYTE byRes[6]; }NET_DVR_ELECTRONICSTABILIZATION, *LPNET_DVR_ELECTRONICSTABILIZATION; -//ģʽ +//走廊模式 typedef struct tagNET_DVR_CORRIDOR_MODE_CCD { - BYTE byEnableCorridorMode; //Ƿģʽ 0ã 1 + BYTE byEnableCorridorMode; //是否启用走廊模式 0~不启用, 1~启用 BYTE byRes[11]; }NET_DVR_CORRIDOR_MODE_CCD, *LPNET_DVR_CORRIDOR_MODE_CCD; -// SMART IR()ò +// SMART IR(防过曝)配置参数 typedef struct tagNET_DVR_SMARTIR_PARAM { - BYTE byMode;//0ֶ1Զ - BYTE byIRDistance;//ȼ(ȼ)level:1~100 Ĭ:50ֶģʽӣ - BYTE byShortIRDistance;// ƾȼ(1~100) - BYTE byLongIRDistance;// Զƾȼ(1~100) + BYTE byMode;//0~手动,1~自动 + BYTE byIRDistance;//红外距离等级(等级,距离正比例)level:1~100 默认:50(手动模式下增加) + BYTE byShortIRDistance;// 近光灯距离等级(1~100) + BYTE byLongIRDistance;// 远光灯距离等级(1~100) }NET_DVR_SMARTIR_PARAM,*LPNET_DVR_SMARTIR_PARAM; -//byIrisMode ΪP-Iris1ʱЧúȦСȼģʽ +//在byIrisMode 为P-Iris1时生效,配置红外光圈大小等级,配置模式 typedef struct tagNET_DVR_PIRIS_PARAM { - BYTE byMode;//0-Զ1-ֶ - BYTE byPIrisAperture;//ȦСȼ(ȼ,ȦС)level:1~100 Ĭ:50ֶģʽӣ + BYTE byMode;//0-自动,1-手动 + BYTE byPIrisAperture;//红外光圈大小等级(等级,光圈大小正比例)level:1~100 默认:50(手动模式下增加) BYTE byRes[6]; }NET_DVR_PIRIS_PARAM,*LPNET_DVR_PIRIS_PARAM; -// 2014-02-25 +//激光参数配置 2014-02-25 typedef struct tagNET_DVR_LASER_PARAM_CFG { //Length = 16 - BYTE byControlMode; //ģʽ 0-Ч1-Զ2-ֶ ĬԶ - BYTE bySensitivity; // 0-100 Ĭ50 - BYTE byTriggerMode; //ƴģʽ 0-Ч1-о2- Ĭϻо - BYTE byBrightness; //ģʽΪֶģʽЧ 0-255 Ĭ100 - BYTE byAngle; //ƽǶ 0-ЧΧ1-36 Ĭ12䷶ΧΪһԲȦڼǶǵԲİ뾶ĴС - BYTE byLimitBrightness; //ģʽΪԶģʽЧ 0~100 2014-01-26 - BYTE byEnabled ; //ֶƼʹ 0-رգ1- - BYTE byIllumination; //ǿ0~100 - BYTE byLightAngle; //Ƕ 0~100 - BYTE byRes[7]; // + BYTE byControlMode; //控制模式 0-无效,1-自动,2-手动 默认自动 + BYTE bySensitivity; //激光灯灵敏度 0-100 默认50 + BYTE byTriggerMode; //激光灯触发模式 0-无效,1-机芯触发,2-光敏触发 默认机芯触发 + BYTE byBrightness; //控制模式为手动模式下有效;激光灯亮度 0-255 默认100 + BYTE byAngle; //激光灯角度 0-无效,范围1-36 默认12,激光灯照射范围为一个圆圈,调节激光角度是调节这个圆的半径的大小 + BYTE byLimitBrightness; //控制模式为自动模式下有效;激光灯亮度限制 0~100 (新增)2014-01-26 + BYTE byEnabled ; //手动控制激光灯使能 0-关闭,1-启动 + BYTE byIllumination; //激光灯强度配置0~100 + BYTE byLightAngle; //补光角度 0~100 + BYTE byRes[7]; //保留 } NET_DVR_LASER_PARAM_CFG, *LPNET_DVR_LASER_PARAM_CFG; typedef struct tagNET_DVR_FFC_PARAM { //1-Schedule Mode,2-Temperature Mode, 3-Off BYTE byMode; - //ʱ:ʾλӣѡ10,20,30,40,50,60,120,180,240 + //(时间:按能力显示,单位分钟,选项有10,20,30,40,50,60,120,180,240) BYTE byRes1; - WORD wCompensateTime; //ʱģʽЧ + WORD wCompensateTime; //定时模式下生效 BYTE byRes2[4]; }NET_DVR_FFC_PARAM,*LPNET_DVR_FFC_PARAM; -typedef struct tagNET_DVR_DDE_PARAM //sensor +typedef struct tagNET_DVR_DDE_PARAM //在sensor中完成 { BYTE byMode;//1-Off,2-Normal Mode,3-Expert Mode - BYTE byNormalLevel;//ͨģʽȼΧ[1,100]ͨģʽЧ - BYTE byExpertLevel;//רģʽȼΧ[1,100]רģʽЧ + BYTE byNormalLevel;//普通模式等级范围[1,100],普通模式下生效 + BYTE byExpertLevel;//专家模式等级范围[1,100],专家模式下生效 BYTE byRes[5]; }NET_DVR_DDE_PARAM,*LPNET_DVR_DDE_PARAM; typedef struct tagNET_DVR_AGC_PARAM { BYTE bySceneType;//1-Normal Sence,2-Highlight Sence,3-Manual Sence - BYTE byLightLevel;//ȵȼ[1,100]ֶģʽЧ - BYTE byGainLevel; //ȼ[1,100]ֶģʽЧ + BYTE byLightLevel;//亮度等级[1,100];手动模式下生效 + BYTE byGainLevel; //增益等级[1,100];手动模式下生效 BYTE byRes[5]; }NET_DVR_AGC_PARAM,*LPNET_DVR_AGC_PARAM; -//ץĻCCD 64ֽ +//抓拍机CCD参数 共64字节 typedef struct tagNET_DVR_SNAP_CAMERAPARAMCFG { - BYTE byWDRMode; // ̬ģʽ;0~رգ1~ֿ̬ 2~̬ - BYTE byWDRType; // ̬лģʽ; 0~ǿã1~ʱã2~ - BYTE byWDRLevel; // ̬ȼ0~6Ӧ1-7Ĭ23 + BYTE byWDRMode; // 宽动态模式;0~关闭,1~数字宽动态 2~宽动态 + BYTE byWDRType; // 宽动态切换模式; 0~强制启用,1~按时间启用,2~按亮度启用 + BYTE byWDRLevel; // 宽动态等级,0~6索引对应1-7,默认索引2(即3级); BYTE byRes1; - NET_DVR_TIME_EX struStartTime; //ʼ̬ʱ - NET_DVR_TIME_EX struEndTime; //̬ʱ - BYTE byDayNightBrightness; //ҹתֵ0-100Ĭ50 - //ɫǿ - BYTE byMCEEnabled;//ɫǿʹܣtruefalseر - BYTE byMCELevel;//ɫǿǿȣ0~100Ĭֵ50 - //ԶԱȶ - BYTE byAutoContrastEnabled;//ԶԱȶʹܣtruefalseر - BYTE byAutoContrastLevel;//ԶԱȵȼ0-100,Ĭ50 - //ϸǿ - BYTE byLSEDetailEnabled;//ϸǿʹܣtruefalseر - BYTE byLSEDetailLevel;//ϸǿȼ0-100,Ĭ50 - // License Plate Definition Enhancementǿ - BYTE byLPDEEnabled;//ǿʹܣtruefalseر - BYTE byLPDELevel;//ǿȼ0-100,Ĭ50 - //Աȶǿ - BYTE byLseEnabled; //Աȶǿʹܣtruefalseر - BYTE byLseLevel; //Աȶǿȼ0-100,Ĭ0 - BYTE byLSEHaloLevel;//ƵȼΧ 0-100,Ĭ0 - BYTE byLseType; //Աȶǿлģʽ; 0~ǿã1~ʱã2~ãֶοͬʱbyLseLevelbyLSEHaloLevel + NET_DVR_TIME_EX struStartTime; //开始宽动态时间 + NET_DVR_TIME_EX struEndTime; //结束宽动态时间 + BYTE byDayNightBrightness; //日夜转换亮度阈值,0-100,默认50; + //记忆色增强 + BYTE byMCEEnabled;//记忆色增强使能,true:开启,false:关闭 + BYTE byMCELevel;//记忆色增强强度,0~100,默认值50 + //自动对比度 + BYTE byAutoContrastEnabled;//自动对比度使能,true:开启,false:关闭 + BYTE byAutoContrastLevel;//自动对比等级(0-100),默认50 + //细节增强 + BYTE byLSEDetailEnabled;//细节增强使能,true:开启,false:关闭 + BYTE byLSEDetailLevel;//细节增强等级(0-100),默认50 + // License Plate Definition Enhancement车牌增强 + BYTE byLPDEEnabled;//车牌增强使能,true:开启,false:关闭 + BYTE byLPDELevel;//车牌增强等级(0-100),默认50 + //对比度增强 + BYTE byLseEnabled; //对比度增强使能,true:开启,false:关闭 + BYTE byLseLevel; //对比度增强等级(0-100),默认0 + BYTE byLSEHaloLevel;//光晕抑制等级。范围 0-100,默认0 + BYTE byLseType; //对比度增强切换模式; 0~强制启用,1~按时间启用,2~按亮度启用(该字段可同时控制byLseLevel、byLSEHaloLevel两个参数) BYTE byRes2[3]; - NET_DVR_TIME_EX struLSEStartTime; //ʼԱȶǿʱ䣨byLseTypeΪ1ʱЧ - NET_DVR_TIME_EX struLSEEndTime; //Աȶǿʱ䣨byLseTypeΪ1ʱЧ - BYTE byLightLevel;//Ϊȵȼ0-100,Ĭ0byLseTypeΪ2ʱЧ - //ƶԱȶ - BYTE byPlateContrastLevel;//ƶԱȶȵȼ0~100Ĭ0 - //ƱͶ - BYTE byPlateSaturationLevel;//ƱͶȵȼ0~100Ĭ0 + NET_DVR_TIME_EX struLSEStartTime; //开始对比度增强时间(当byLseType为1时生效) + NET_DVR_TIME_EX struLSEEndTime; //结束对比度增强时间(当byLseType为1时生效) + BYTE byLightLevel;//为亮度等级参数(0-100),默认0,(当byLseType为2时生效) + //车牌对比度 + BYTE byPlateContrastLevel;//车牌对比度等级,0~100,默认0 + //车牌饱和度 + BYTE byPlateSaturationLevel;//车牌饱和度等级,0~100,默认0 BYTE byRes[9]; } NET_DVR_SNAP_CAMERAPARAMCFG,*LPNET_DVR_SNAP_CAMERAPARAMCFG; -//ѧ͸ +//光学透雾参数 typedef struct tagNET_DVR_OPTICAL_DEHAZE { - BYTE byEnable; //0~ùѧ͸1~ùѧ͸ + BYTE byEnable; //0~不启用光学透雾,1~启用光学透雾 BYTE byRes[7]; } NET_DVR_OPTICAL_DEHAZE, *LPNET_DVR_OPTICAL_DEHAZE; -//AGCãAGCģʽΪЧʱNET_DVR_AGC_PARAMòΪ׼AGCģʽΪԶֶʱNET_DVR_AGC_PARAMòЧ +//测温AGC设置,当测温AGC模式为无效时,以NET_DVR_AGC_PARAM配置参数为准,当测温AGC模式为自动或者手动时,NET_DVR_AGC_PARAM配置参数无效 typedef struct tagNET_DVR_THERMOMETRY_AGC { - BYTE byMode;//AGCģʽ0~Ч1~Զ2~ֶ + BYTE byMode;//AGC模式,0~无效,1~自动,2~手动 BYTE byRes1[3]; - int iHighTemperature;//¶ȣΧΪ-273~9999϶ȣ1~ֶģʽЧ - int iLowTemperature;//¶ȣΧΪ-273~9999϶ȣ1~ֶģʽЧ + int iHighTemperature;//最高温度,范围为:-273~9999摄氏度(1~手动模式下生效) + int iLowTemperature;//最低温度,范围为:-273~9999摄氏度(1~手动模式下生效) BYTE byRes[8]; }NET_DVR_THERMOMETRY_AGC, *LPNET_DVR_THERMOMETRY_AGC; -//ǰ˲ +//前端参数配置 typedef struct tagNET_DVR_CAMERAPARAMCFG_EX { DWORD dwSize; - NET_DVR_VIDEOEFFECT struVideoEffect;/*ȡԱȶȡͶȡȡɫ*/ - NET_DVR_GAIN struGain;/*Զ*/ - NET_DVR_WHITEBALANCE struWhiteBalance;/*ƽ*/ - NET_DVR_EXPOSURE struExposure; /*ع*/ - NET_DVR_GAMMACORRECT struGammaCorrect;/*GammaУ*/ - NET_DVR_WDR struWdr;/*̬*/ - NET_DVR_DAYNIGHT struDayNight;/*ҹת*/ - NET_DVR_BACKLIGHT struBackLight;/*ⲹ*/ - NET_DVR_NOISEREMOVE struNoiseRemove;/*ֽ*/ + NET_DVR_VIDEOEFFECT struVideoEffect;/*亮度、对比度、饱和度、锐度、色调配置*/ + NET_DVR_GAIN struGain;/*自动增益*/ + NET_DVR_WHITEBALANCE struWhiteBalance;/*白平衡*/ + NET_DVR_EXPOSURE struExposure; /*曝光控制*/ + NET_DVR_GAMMACORRECT struGammaCorrect;/*Gamma校正*/ + NET_DVR_WDR struWdr;/*宽动态*/ + NET_DVR_DAYNIGHT struDayNight;/*日夜转换*/ + NET_DVR_BACKLIGHT struBackLight;/*背光补偿*/ + NET_DVR_NOISEREMOVE struNoiseRemove;/*数字降噪*/ BYTE byPowerLineFrequencyMode; /*0-50HZ; 1-60HZ*/ /* - 0-ԶȦ, - 1-ֶȦ, + 0-自动光圈, + 1-手动光圈, 2-P-Iris1, 3-Union 3-9mm F1.6-2.7 (T5280-PQ1) [IPC5.1.7] 4-Union 2.8-12mm F1.6-2.7 (T5289-PQ1) [IPC5.1.7] - 5-private 3.8-16mm F1.5HV3816P-8MPIR) + 5-private 3.8-16mm F1.5(HV3816P-8MPIR) 6-private 11-40mm F1.7 (HV1140P-8MPIR) - 7-private 2.7-12mm F1.2TV2712P-MPIR + 7-private 2.7-12mm F1.2(TV2712P-MPIR) 8- MZ5721D-12MPIR 9- MZ1555D-12MPIR 10- MZ5721D-12MPIR(RS485) 11- MZ1555D-12MPIR(RS485) */ BYTE byIrisMode; - BYTE byMirror ; /* 0 off1- leftright2- updown3-center 4-Auto*/ - BYTE byDigitalZoom; /*:0 dsibale 1 enable*/ - BYTE byDeadPixelDetect; /*,0 dsibale 1 enable*/ - BYTE byBlackPwl;/*ڵƽ , 0-255*/ - BYTE byEptzGate;// EPTZر:0-ǫ̃1-ǫ̃ - BYTE byLocalOutputGate;//ر0-ر1-BNC 2-HDMIر - //20-HDMI_720P50 - //21-HDMI_720P60 - //22-HDMI_1080I60 - //23-HDMI_1080I50 - //24-HDMI_1080P24 - //25-HDMI_1080P25 - //26-HDMI_1080P30 - //27-HDMI_1080P50 - //28-HDMI_1080P60 - BYTE byCoderOutputMode;//fpgaģʽ0ֱͨ3ذ - BYTE byLineCoding; //Ƿб룺0-1- - BYTE byDimmerMode; //ģʽ0-Զ1-Զ - BYTE byPaletteMode; //ɫ壺0-ȣ1-ȣ2-ɫ28-ɫ8, 9-ں1,10-ʺ,11-ں2,12-1,13-2,14-ɫ,15-ɫ1,16-ɫ2,17-,18-,19-,20-,21-22-ɫ3 - BYTE byEnhancedMode; //ǿʽܱ̽ߣ0-ǿ1-12-23-34-4 - BYTE byDynamicContrastEN; //̬Աȶǿ 0-1 - BYTE byDynamicContrast; //̬Աȶ 0-100 - BYTE byJPEGQuality; //JPEGͼ 0-100 - NET_DVR_CMOSMODECFG struCmosModeCfg;//CMOSģʽǰ˲ãͷģʽȡ - BYTE byFilterSwitch; //˲أ0-ã1- - BYTE byFocusSpeed; //ͷٶȣ0-10 - BYTE byAutoCompensationInterval; //ʱԶŲ1-120λ - BYTE bySceneMode; //ģʽ0-⣬1-ڣ2-Ĭϣ3- - NET_DVR_DEFOGCFG struDefogCfg;//͸ - NET_DVR_ELECTRONICSTABILIZATION struElectronicStabilization;//ӷ - NET_DVR_CORRIDOR_MODE_CCD struCorridorMode;//ģʽ - BYTE byExposureSegmentEnable; //0~,1~ عʱʽ״عϵʱعʱ䵽мֵȻ浽мֵع⵽ֵ浽ֵ - BYTE byBrightCompensate;//ǿ [0~100] + BYTE byMirror ; /* 镜像:0 off,1- leftright,2- updown,3-center 4-Auto*/ + BYTE byDigitalZoom; /*数字缩放:0 dsibale 1 enable*/ + BYTE byDeadPixelDetect; /*坏点检测,0 dsibale 1 enable*/ + BYTE byBlackPwl;/*黑电平补偿 , 0-255*/ + BYTE byEptzGate;// EPTZ开关变量:0-不启用电子云台,1-启用电子云台 + BYTE byLocalOutputGate;//本地输出开关变量0-本地输出关闭1-本地BNC输出打开 2-HDMI输出关闭 + //20-HDMI_720P50输出开 + //21-HDMI_720P60输出开 + //22-HDMI_1080I60输出开 + //23-HDMI_1080I50输出开 + //24-HDMI_1080P24输出开 + //25-HDMI_1080P25输出开 + //26-HDMI_1080P30输出开 + //27-HDMI_1080P50输出开 + //28-HDMI_1080P60输出开 + BYTE byCoderOutputMode;//编码器fpga输出模式0直通3像素搬家 + BYTE byLineCoding; //是否开启行编码:0-否,1-是 + BYTE byDimmerMode; //调光模式:0-半自动,1-自动 + BYTE byPaletteMode; //调色板:0-白热,1-黑热,2-调色板2,…,8-调色板8, 9-融合1,10-彩虹,11-融合2,12-铁红1,13-铁红2,14-深褐色,15-色彩1,16-色彩2,17-冰火,18-雨,19-红热,20-绿热,21-深蓝,22-色彩3 + BYTE byEnhancedMode; //增强方式(探测物体周边):0-不增强,1-1,2-2,3-3,4-4 + BYTE byDynamicContrastEN; //动态对比度增强 0-1 + BYTE byDynamicContrast; //动态对比度 0-100 + BYTE byJPEGQuality; //JPEG图像质量 0-100 + NET_DVR_CMOSMODECFG struCmosModeCfg;//CMOS模式下前端参数配置,镜头模式从能力集获取 + BYTE byFilterSwitch; //滤波开关:0-不启用,1-启用 + BYTE byFocusSpeed; //镜头调焦速度:0-10 + BYTE byAutoCompensationInterval; //定时自动快门补偿:1-120,单位:分钟 + BYTE bySceneMode; //场景模式:0-室外,1-室内,2-默认,3-弱光 + NET_DVR_DEFOGCFG struDefogCfg;//透雾参数 + NET_DVR_ELECTRONICSTABILIZATION struElectronicStabilization;//电子防抖 + NET_DVR_CORRIDOR_MODE_CCD struCorridorMode;//走廊模式 + BYTE byExposureSegmentEnable; //0~不启用,1~启用 曝光时间和增益呈阶梯状调整,比如曝光往上调整时,先提高曝光时间到中间值,然后提高增益到中间值,再提高曝光到最大值,最后提高增益到最大值 + BYTE byBrightCompensate;//亮度增强 [0~100] /* - 0-رա1-640*480@25fps2-640*480@30ps3-704*576@25fps4-704*480@30fps5-1280*720@25fps6-1280*720@30fps - 7-1280*720@50fps8-1280*720@60fps9-1280*960@15fps10-1280*960@25fps11-1280*960@30fps - 12-1280*1024@25fps13--1280*1024@30fps14-1600*900@15fps15-1600*1200@15fps16-1920*1080@15fps - 17-1920*1080@25fps18-1920*1080@30fps19-1920*1080@50fps20-1920*1080@60fps21-2048*1536@15fps22-2048*1536@20fps - 23-2048*1536@24fps24-2048*1536@25fps25-2048*1536@30fps26-2560*2048@25fps27-2560*2048@30fps - 28-2560*1920@7.5fps29-3072*2048@25fps30-3072*2048@30fps31-2048*1536@12.532-2560*1920@6.25 - 33-1600*1200@2534-1600*1200@3035-1600*1200@12.536-1600*900@12.537-1280*960@12.5fps38-800*600@25fps39-800*600@30fps40 - 4000*3000@12.5fps41-4000*3000@15fps42-4096*2160@20fps43-3840*2160@20fps 44-960*576@25fps45-960*480@30fps46-752*582@25fps - 47-768*494@30fps48-2560*1440@25fps49-2560*1440@30fps 50-720P@100fps51-720P@120fps52-2048*1536@50fps53-2048*1536@60fps - 54-3840*2160@25fps55-3840*2160@30fps56-4096*2160@25fps57-4096*2160@30fps 58-1280*1024@50fps59-1280*1024@60fps - 60-3072*2048@50fps61-3072*2048@60fps62-3072*1728@25fps63-3072*1728@30fps64-3072*1728@50fps65-3072*1728@60fps66-336*256@50fps67-336*256@60fps - 68-384*288@50fps69-384*288@60fps 70- 640 * 512@50fps 71- 640 * 512@60fps72-2592*1944@25fps73-2592*1944@30fps74-2688*1536@25fps75-2688*1536@30fps - 76-2592*1944@20fps77-2592*1944@15fps78-2688*1520@20fps79-2688*1520@15fps80-2688*1520@25fps81-2688*1520@30fps82- 2720*2048@25fps 83- 2720*2048@30fps - 84-336*256@25fps85- 384*288@25fps86-640*512@25fps87-1280*960@50fps88-1280*960@60fps89-1280*960@100fps90-1280*960@120fps91-4000*3000@20fps - 92-1920*1200@25fps93-1920*1200@30fps94-2560*1920@25fps95-2560*1920@20fps96-2560*1920@30fps97-1280*1920@25fps98-1280*1920@30fps - 99-4000*3000@24fps100-4000*3000@25fps101-4000*3000@10fps102- 384*288@30fps103-2560*1920@15fps104-2400*3840@25fps105-1200*1920@25fps - 106-4096*1800@30fps107-3840*1680@30fps108-2560*1120@30fps109-704*320@30fps110-1280*560@30fps111-4096*1800@25fps112-3840*1680@25fps - 113-2560*1120@25fps114-704*320@25fps115-1280*560@25fps116-2400*3840@24fps117-3840*2400@24fps118-3840*2400@25fps119-2560*1920@12.5fps - 120-2560*2048@12fps121-2560*2048@15fps122-2560*1536@25fps123-2560*1536@30fps124-2256*2048@25fps125-2256*2048@30fps126-2592*2592@12.5fps127-2592*2592@15fps - 128 - 640*512@30fps129-2048*1520@30fps130-2048*1520@25fps131-3840*2160@24fps132-2592*1520@25fps133-2592*1520@30fps134-2592*1536@25fps135-2592*1536@30fps - 136-640*960@25fps137-640*960@24fps139-3840*1080@25fps140-3840*1080@30fps142-2992*2192@25fps143-2992*2192@30fps144-3008*2160@25fps145-3008*2160@30fps - 146-3072*1728@20fps147-2560*1440@20fps148-2160*3840@25fps149-2160*3840@30fps150-7008*1080@25fps151-7008*1080@30fps152-3072*2048@20fps153-1536*864@25fps - 154-2560*1920@24fps155-2400*3840@30fps156-3840*2400@30fps157-3840*2160@15fps - 158-384*288@8.3fps159-640*512@8.3fps160-160*120@8.3fps161-1024*768@8.3fps162-640*480@8.3fps163-3840*2160@12.5fps164-2304*1296@30fps165-2304*1296@25fps - 166-2560*1440@24fps167-2688*1512@25fps168-2688*1512@30fps169-2688*1512@50fps170-2688*1512@60fps171-1536*864@30fps172-2560*1440@50fps173-2560*1440@60fps - 174-2048*2048@25fps175-2048*2048@30fps176-4000*3060@20fps177-3060*3060@25fps178-3060*3060@30fps179-3000*3000@25fps180-3000*3000@30fps181-8160*3616@30fps - 182-8160*3616@25fps183-3000*3000@20fps184-3000*3000@15fps185-3000*3000@12.5fps186-5472*3648@25fps187-5472*3648@30fps188-7680*4320@25fps189-7680*4320@30fps - 190-8160*2400@25fps191-8160*2400@30fps192-5520*2400@25fps193-5520*2400@30fps194-2560*1440@15fps195-1944*1212@24fps196-1944*1212@25fps197-3456*1920@30fps - 198-4800*2688@25fps199-4800*2688@30fps200-6480*1080@25fps201-6480*1080@30fps202-8640*1440@25fps203-8640*1440@30fps204-3456*1920@25fps205-2688*1520@50fps - 206-2688*1520@60fps207-4976*1452@25fps208-4976*1452@30fps 209-3200*1800@25fps210-3200*1800@30fps211-5472*3648@24fps212-1920*1080@12.5fps213-2944*1656@20fps - 214-1920*1080@24fps215-4800*1600@25fps216-4800*1600@30fps217-2560*1440@12.5fps218-6560*3690@1fps219-5120*1400@20fps220-7680*4320@1fps221-1920*1080@20fps - 222-5120*1440@20fps223-4080*1808@25fps224-4080*1808@30fps225-4080*1152@25fps226-4080*1152@30fps227-2688*1944@20fps228-2592*1944@24fps229-3200*1800@15fps - 230-4416*1696@20fps231-3456*1080@25fps232-3200*1800@12.5fps233-2688*1532@25fps234-2688*1532@30fps235-4416*1696@12.5fps236-3840*2048P12.5fps237-3840*4096P12.5fps - 238-5120*1440@12.5fps239-3840*1080@24fps240-320*256@30fps241-3264*2448@25fps242-3264*2448@30fps243-5430*3054@1fps244-2688*1520@24@24fps245-4000*3000@30fps - 246-1632*1224@25fps247-1632*1224@30fps248-160*120@25fps249-1920*1440@25fps250-1920*1440@30fps-3632*1632@20fps252-3040*1368@25fps253-3040*1368@24fps - 254-5120*1440@25fps255-ֶαʾΧ - 豸ģʽ255ʱ - 1ȡʱֵֶΪ255޾庬壬ڱʾʵģʽֵ255ʵwCaptureModeNwCaptureModePʾ - 2ʱֵҪΪ255ʵwCaptureModeNwCaptureModePʾ - 豸ģʽС255ʱ - 1ȡʱֵֶΪʵģʽֵwCaptureModeNwCaptureModePֵ账 - 2ʱֶΪʵģʽֵwCaptureModeNwCaptureModePֲֵ + 0-关闭、1-640*480@25fps、2-640*480@30ps、3-704*576@25fps、4-704*480@30fps、5-1280*720@25fps、6-1280*720@30fps、 + 7-1280*720@50fps、8-1280*720@60fps、9-1280*960@15fps、10-1280*960@25fps、11-1280*960@30fps、 + 12-1280*1024@25fps、13--1280*1024@30fps、14-1600*900@15fps、15-1600*1200@15fps、16-1920*1080@15fps、 + 17-1920*1080@25fps、18-1920*1080@30fps、19-1920*1080@50fps、20-1920*1080@60fps、21-2048*1536@15fps、22-2048*1536@20fps、 + 23-2048*1536@24fps、24-2048*1536@25fps、25-2048*1536@30fps、26-2560*2048@25fps、27-2560*2048@30fps、 + 28-2560*1920@7.5fps、29-3072*2048@25fps、30-3072*2048@30fps、31-2048*1536@12.5、32-2560*1920@6.25、 + 33-1600*1200@25、34-1600*1200@30、35-1600*1200@12.5、36-1600*900@12.5、37-1280*960@12.5fps、38-800*600@25fps、39-800*600@30fps40、 + 4000*3000@12.5fps、41-4000*3000@15fps、42-4096*2160@20fps、43-3840*2160@20fps 、44-960*576@25fps、45-960*480@30fps、46-752*582@25fps、 + 47-768*494@30fps、48-2560*1440@25fps、49-2560*1440@30fps 、50-720P@100fps、51-720P@120fps、52-2048*1536@50fps、53-2048*1536@60fps、 + 54-3840*2160@25fps、55-3840*2160@30fps、56-4096*2160@25fps、57-4096*2160@30fps 、58-1280*1024@50fps、59-1280*1024@60fps、 + 60-3072*2048@50fps、61-3072*2048@60fps、62-3072*1728@25fps、63-3072*1728@30fps、64-3072*1728@50fps、65-3072*1728@60fps、66-336*256@50fps、67-336*256@60fps、 + 68-384*288@50fps、69-384*288@60fps 、70- 640 * 512@50fps 、71- 640 * 512@60fps、72-2592*1944@25fps、73-2592*1944@30fps、74-2688*1536@25fps、75-2688*1536@30fps + 76-2592*1944@20fps、77-2592*1944@15fps、78-2688*1520@20fps、79-2688*1520@15fps、80-2688*1520@25fps、81-2688*1520@30fps、82- 2720*2048@25fps、 83- 2720*2048@30fps、 + 84-336*256@25fps、85- 384*288@25fps、86-640*512@25fps、87-1280*960@50fps、88-1280*960@60fps、89-1280*960@100fps、90-1280*960@120fps、91-4000*3000@20fps、 + 92-1920*1200@25fps、93-1920*1200@30fps、94-2560*1920@25fps、95-2560*1920@20fps、96-2560*1920@30fps、97-1280*1920@25fps、98-1280*1920@30fps + 99-4000*3000@24fps、100-4000*3000@25fps、101-4000*3000@10fps、102- 384*288@30fps、103-2560*1920@15fps、104-2400*3840@25fps、105-1200*1920@25fps + 106-4096*1800@30fps、107-3840*1680@30fps、108-2560*1120@30fps、109-704*320@30fps、110-1280*560@30fps、111-4096*1800@25fps、112-3840*1680@25fps + 113-2560*1120@25fps、114-704*320@25fps、115-1280*560@25fps、116-2400*3840@24fps、117-3840*2400@24fps、118-3840*2400@25fps、119-2560*1920@12.5fps + 120-2560*2048@12fps、121-2560*2048@15fps、122-2560*1536@25fps、123-2560*1536@30fps、124-2256*2048@25fps、125-2256*2048@30fps、126-2592*2592@12.5fps、127-2592*2592@15fps、 + 128 - 640*512@30fps、129-2048*1520@30fps、130-2048*1520@25fps、131-3840*2160@24fps、132-2592*1520@25fps、133-2592*1520@30fps、134-2592*1536@25fps、135-2592*1536@30fps + 136-640*960@25fps、137-640*960@24fps、139-3840*1080@25fps、140-3840*1080@30fps、142-2992*2192@25fps、143-2992*2192@30fps、144-3008*2160@25fps、145-3008*2160@30fps、 + 146-3072*1728@20fps、147-2560*1440@20fps、148-2160*3840@25fps、149-2160*3840@30fps、150-7008*1080@25fps、151-7008*1080@30fps、152-3072*2048@20fps、153-1536*864@25fps、 + 154-2560*1920@24fps、155-2400*3840@30fps、156-3840*2400@30fps、157-3840*2160@15fps、 + 158-384*288@8.3fps、159-640*512@8.3fps、160-160*120@8.3fps、161-1024*768@8.3fps、162-640*480@8.3fps、163-3840*2160@12.5fps、164-2304*1296@30fps、165-2304*1296@25fps、 + 166-2560*1440@24fps、167-2688*1512@25fps、168-2688*1512@30fps、169-2688*1512@50fps、170-2688*1512@60fps、171-1536*864@30fps、172-2560*1440@50fps、173-2560*1440@60fps、 + 174-2048*2048@25fps、175-2048*2048@30fps、176-4000*3060@20fps、177-3060*3060@25fps、178-3060*3060@30fps、179-3000*3000@25fps、180-3000*3000@30fps、181-8160*3616@30fps、 + 182-8160*3616@25fps、183-3000*3000@20fps、184-3000*3000@15fps、185-3000*3000@12.5fps、186-5472*3648@25fps、187-5472*3648@30fps、188-7680*4320@25fps、189-7680*4320@30fps、 + 190-8160*2400@25fps、191-8160*2400@30fps、192-5520*2400@25fps、193-5520*2400@30fps、194-2560*1440@15fps、195-1944*1212@24fps、196-1944*1212@25fps、197-3456*1920@30fps、 + 198-4800*2688@25fps、199-4800*2688@30fps、200-6480*1080@25fps、201-6480*1080@30fps、202-8640*1440@25fps、203-8640*1440@30fps、204-3456*1920@25fps、205-2688*1520@50fps、 + 206-2688*1520@60fps、207-4976*1452@25fps、208-4976*1452@30fps、 209-3200*1800@25fps、210-3200*1800@30fps、211-5472*3648@24fps、212-1920*1080@12.5fps、213-2944*1656@20fps、 + 214-1920*1080@24fps、215-4800*1600@25fps、216-4800*1600@30fps、217-2560*1440@12.5fps、218-6560*3690@1fps、219-5120*1400@20fps、220-7680*4320@1fps、221-1920*1080@20fps + 222-5120*1440@20fps、223-4080*1808@25fps、224-4080*1808@30fps、225-4080*1152@25fps、226-4080*1152@30fps、227-2688*1944@20fps、228-2592*1944@24fps、229-3200*1800@15fps、 + 230-4416*1696@20fps、231-3456*1080@25fps、232-3200*1800@12.5fps、233-2688*1532@25fps、234-2688*1532@30fps、235-4416*1696@12.5fps、236-3840*2048P12.5fps、237-3840*4096P12.5fps、 + 238-5120*1440@12.5fps、239-3840*1080@24fps、240-320*256@30fps、241-3264*2448@25fps、242-3264*2448@30fps、243-5430*3054@1fps、244-2688*1520@24@24fps、245-4000*3000@30fps、 + 246-1632*1224@25fps、247-1632*1224@30fps、248-160*120@25fps、249-1920*1440@25fps、250-1920*1440@30fps、-3632*1632@20fps、252-3040*1368@25fps、253-3040*1368@24fps、 + 254-5120*1440@25fps、255-超出字段表示范围 + 设备输入模式索引超过255时: + 1)获取时,该字段值为255(无具体含义,用于表示实际输入模式索引值超过255),实际由wCaptureModeN、wCaptureModeP表示; + 2)设置时,该值仍需要设置为255,实际由wCaptureModeN、wCaptureModeP表示。 + 设备输入模式索引小于255时: + 1)获取时,该字段值为实际输入模式值,wCaptureModeN、wCaptureModeP值无需处理; + 2)设置时该字段为实际输入模式值,wCaptureModeN、wCaptureModeP值保持不变 */ - BYTE byCaptureModeN; //ƵģʽNƣ - BYTE byCaptureModeP; //ƵģʽPƣ - NET_DVR_SMARTIR_PARAM struSmartIRParam; //ŹϢ - NET_DVR_PIRIS_PARAM struPIrisParam;//PIrisϢӦbyIrisModeֶδ2-PIris1ʼЧ - //2014-02-25 - NET_DVR_LASER_PARAM_CFG struLaserParam; // + BYTE byCaptureModeN; //视频输入模式(N制) + BYTE byCaptureModeP; //视频输入模式(P制) + NET_DVR_SMARTIR_PARAM struSmartIRParam; //红外放过爆配置信息 + NET_DVR_PIRIS_PARAM struPIrisParam;//PIris配置信息对应byIrisMode字段从2-PIris1开始生效 + //2014-02-25 新增参数 + NET_DVR_LASER_PARAM_CFG struLaserParam; //激光参数 NET_DVR_FFC_PARAM struFFCParam; NET_DVR_DDE_PARAM struDDEParam; NET_DVR_AGC_PARAM struAGCParam; - BYTE byLensDistortionCorrection;//ͷУ 0-ر,1- - BYTE byDistortionCorrectionLevel;//Уȼ0-1-ȼһ2-ȼ3-ȼ;255-Զ - BYTE byCalibrationAccurateLevel;// Уǿ[0-100] - BYTE byZoomedInDistantViewLevel;//Զ˷Ŵȼ[0-100] - NET_DVR_SNAP_CAMERAPARAMCFG struSnapCCD ; //ץĻCCDֻץĻ - NET_DVR_OPTICAL_DEHAZE struOpticalDehaze;//ѧ͸ - NET_DVR_THERMOMETRY_AGC struThermAGC;//AGC - BYTE byFusionMode;//˫Ƶںģʽ0~ȳģʽ1~ںģʽ2~лģʽ,3~ɼģʽ, 4~ںϺڰģʽ, 5~ںϲɫģʽ-ݵأ6~ںϲɫģʽ-ĵأ7~ںϲɫģʽ-ѩأ8~ںϲɫģʽ-9~ںϲɫģʽ- - BYTE byHorizontalFOV;//ˮƽӳ[0-100] - BYTE byVerticalFOV;//ֱӳ[0-100] - BYTE byBrightnessSuddenChangeSuppression;//ͻ0-ر,1- - BYTE byGPSEnabled;//GPSʹܣ0-أ1- + BYTE byLensDistortionCorrection;//镜头畸变校正 0-关闭,1-开启 + BYTE byDistortionCorrectionLevel;//畸变校正等级:0-保留;1-等级一;2-等级二;3-等级三;255-自定义 + BYTE byCalibrationAccurateLevel;// 畸变校正强度[0-100] + BYTE byZoomedInDistantViewLevel;//远端放大等级[0-100] + NET_DVR_SNAP_CAMERAPARAMCFG struSnapCCD ; //抓拍机CCD参数,只用于抓拍机 + NET_DVR_OPTICAL_DEHAZE struOpticalDehaze;//光学透雾参数 + NET_DVR_THERMOMETRY_AGC struThermAGC;//测温AGC配置 + BYTE byFusionMode;//双光谱视频融合模式,0~热成像模式,1~融合模式,2~画中画模式,3~可见光模式, 4~融合黑白模式, 5~融合彩色模式-草地,6~融合彩色模式-荒地,7~融合彩色模式-雪地,8~融合彩色模式-海洋,9~融合彩色模式-城市 + BYTE byHorizontalFOV;//水平视场角[0-100] + BYTE byVerticalFOV;//垂直视场角[0-100] + BYTE byBrightnessSuddenChangeSuppression;//亮度突变抑制0-关闭,1-开启 + BYTE byGPSEnabled;//GPS开关使能,0-关,1-开 BYTE byRes; /* - 256-160*120@50fps257-3200*1800@20fps258-800*480@25fps259-2688*1944@25fps260-640*384@50fps261-8000*6000@1fps262-1440*1080@50fps263-1440*1080@60fps - 264-8160*3616@24fps265-3632*1632@25fps266-3632*1632@30fps267-3632*1632@20fps268-1760*1320@25fps269-4000*3000@4fps270-192*256@25fps271-720*576@25fps - 272-720x576@30fps273-960*432@25fps274-960*432@30fps275-1200*536@25fps276-1200*536@30fps277-1760*1320@12.5fps278-2560*480@25fps279-2048*384@25fps - 280-96*96@25fps281-320*256@25fps282-6128*1800@25fps283-6128*1800@30fps284-2304*1296@24fps285-2048*1152@25fps286-2048*1152@30fps287-3840*2100@20fps - 288-96*72@25fps289-2048*1152@24fps290-720*576@50fps291-2368*1776@25fps292-2368*1776@30fps293-1776*1776@25fps294-3776*2832@25fps295-3776*2832@30fps - 296-2832*2832@25ps297-2832*2832@30fps298-1776*1776@30fps299-1920*1080@100fps300-1920*1080@120fps301-4096*1800@24fps302-8160*2400@24fps303-4032*3024@25fps - 304-4032*3024@30fps305-3024*3024@25fps306-3024*3024@30fps307-1686*948@25fps308-3200*1800@24fps309-3040*5376@25fps310-3040*5376@30fps311-1520*2688@25fps - 312-1520*2688@30fps313-3840*2160@50fps314-3840*2160@60fps315-5040*2160@25fps316-5040*2160@33.3fps317-5040*2160@30fps318-5040*2160@24fps319-5040*2160@40fps - 320-7520*2160@25fps321-7520*2160@24fps322-7520*2160@30fps323-7072*2160@25fps324-7072*2160@33.3fps325-7072*2160@24fps326-7072*2160@30fps327-4208*3120@25fp - 328-4208*3120@30fps329-5376*3040@25fps330-5376*3040@30fps331-1440*1440@25fps332-1440*1440@30fps333-2304*1296@15fps334-5336*2246@25fps335-5336*2246@30fps - 336-5120*1440@30fps337-7680*3840@25fps338-7680*3840@30fps339-2304*1296@12.5fps340-8160*3616@20fps341-1920*1632@25fps342-1920*1632@30fps343-11040*2400@25fps - 344-11040*2400@30fps345-8192*1920@25fps346-8192*1920@30fps347-6192*1344@25fps348-6192*1344@30fps349-5336*2246@24fps350-3632*1632@12.5fps351-3632*1632@15fps - 352-11040*3616@10fps353-2304*1296@20fps354-4256*1888@20fps355-5760*2880@25fps356-5760*2880@30fps357-5760*1280@25fps358-5760*1280@30fps359-4656*3496@6.25fps - 360-8288*1800@25fps361-8288*1800@30fps362-6080*1320@25fps363-6080*1320@30fps364-11040*3616@12.5fps365-4800*2688@50fps366-4800*2688@60fps367-2480*2160@25fps - 368-2480*2160@30fps369-8304*1800@25fps370-8304*1800@30fps371-11040*2400@24fps372-8304x1800@24fps373-6096x1320@24fps374-6096*1320@25fps375-6096*1320@30fps - 376-400*300@25fps377-2560*2160@25fps378-2560*2160@30fps379-4608*2592@25fps380-4608*2592@30fps381-4608*2592@24fps382-3840*2160@45fps383-7680*4320@24fps - 384-9024*2656@12.5fps385-4272*1880@25fps386-4272*1880@30fps387-6432*1888@25fps388-6432*1888@30fps389-6816*3840@25fps390-6816*3840@24fps391-4096*2160@24fps - 392-8160*1800@25fps393-8160*1800@30fps394-2560*1440@75fps395-2560*1440@90fps396-7680*3840@24fps397-2960*1664@20fps398-3840*2160@16.67fps399-4608*3456@15fps - 400-4608*2592@20fps401-3840*2160@10fps402-1920*1080@10fps403-8160*1800@24fps404-1600*1200@50fps405-1600*1200@60fps406-1600*1200@100fps407-1600*1200@120fps - 408-1600*1200@200fps409-1600*1200@210fps410-2880*1616@25fps, 411-2880*1616@30fps412-5760*3232@20fps413-2304*1296@16.67fps414-2560*1440@10fps415-2160*2160@25fps - 416-2160*2160@30fps417-1920*1080@150fps418-1920*1080@180fps419-2560*1440@100fps420-2560*1440@120fps421-2880*1616@20fps422-3632*1632@24fps423-2304*1296@10fps - 424-2560*1440@10fps425-3840*2160@10fps426-480*360@50fps427-2688*2248@25fps428-2688*2248@30fps429-3008*1328@20fps430-4608*3456@12.5fps431-7104*4096@25fps - 432-7104*4096@30fps433-1600*1200@150fps434-4608*3456@25fps435-4608*3456@30fps436-4608*3456@20fps437-4608*3456@9fps438-4608*3456@8fps439-4000*3000@9fps - 440-4000*3000@8fps441-8000*6000@9fps442-8000*6000@8fps443-4096*1280@25fps444-796*796@25fps445-7584*512@25fps446-13101*512@25fps447-1024*320@25fps - 448-8592*3728@12.5fps449-6096*2640@12.5fps450-5520*2400@24fps451-5200*2320@20fps452-5968*2688@12.5fps453-5968*2688@15fps454-2576*1456@25fps455-2576*1456@30fps - 456-2560*2160@20fps457-3840*2160@48fps*/ - WORD wCaptureModeN; //ƵģʽNƣģʽС255ʱbyCaptureModeNһ£255ʱԸֶηֵжϡ - WORD wCaptureModeP; //ƵģʽPƣģʽС255ʱbyCaptureModeNһ£255ʱԸֶηֵж + 256-160*120@50fps、257-3200*1800@20fps、258-800*480@25fps、259-2688*1944@25fps、260-640*384@50fps、261-8000*6000@1fps、262-1440*1080@50fps、263-1440*1080@60fps、 + 264-8160*3616@24fps、265-3632*1632@25fps、266-3632*1632@30fps、267-3632*1632@20fps、268-1760*1320@25fps、269-4000*3000@4fps、270-192*256@25fps、271-720*576@25fps、 + 272-720x576@30fps、273-960*432@25fps、274-960*432@30fps、275-1200*536@25fps、276-1200*536@30fps、277-1760*1320@12.5fps、278-2560*480@25fps、279-2048*384@25fps、 + 280-96*96@25fps、281-320*256@25fps、282-6128*1800@25fps、283-6128*1800@30fps、284-2304*1296@24fps、285-2048*1152@25fps、286-2048*1152@30fps、287-3840*2100@20fps、 + 288-96*72@25fps、289-2048*1152@24fps、290-720*576@50fps、291-2368*1776@25fps、292-2368*1776@30fps、293-1776*1776@25fps、294-3776*2832@25fps、295-3776*2832@30fps、 + 296-2832*2832@25ps、297-2832*2832@30fps、298-1776*1776@30fps、299-1920*1080@100fps、300-1920*1080@120fps、301-4096*1800@24fps、302-8160*2400@24fps、303-4032*3024@25fps、 + 304-4032*3024@30fps、305-3024*3024@25fps、306-3024*3024@30fps、307-1686*948@25fps、308-3200*1800@24fps、309-3040*5376@25fps、310-3040*5376@30fps、311-1520*2688@25fps、 + 312-1520*2688@30fps、313-3840*2160@50fps、314-3840*2160@60fps、315-5040*2160@25fps、316-5040*2160@33.3fps、317-5040*2160@30fps、318-5040*2160@24fps、319-5040*2160@40fps、 + 320-7520*2160@25fps、321-7520*2160@24fps、322-7520*2160@30fps、323-7072*2160@25fps、324-7072*2160@33.3fps、325-7072*2160@24fps、326-7072*2160@30fps、327-4208*3120@25fp、 + 328-4208*3120@30fps、329-5376*3040@25fps、330-5376*3040@30fps、331-1440*1440@25fps、332-1440*1440@30fps、333-2304*1296@15fps、334-5336*2246@25fps、335-5336*2246@30fps、 + 336-5120*1440@30fps、337-7680*3840@25fps、338-7680*3840@30fps、339-2304*1296@12.5fps、340-8160*3616@20fps、341-1920*1632@25fps、342-1920*1632@30fps、343-11040*2400@25fps、 + 344-11040*2400@30fps、345-8192*1920@25fps、346-8192*1920@30fps、347-6192*1344@25fps、348-6192*1344@30fps、349-5336*2246@24fps、350-3632*1632@12.5fps、351-3632*1632@15fps、 + 352-11040*3616@10fps、353-2304*1296@20fps、354-4256*1888@20fps、355-5760*2880@25fps、356-5760*2880@30fps、357-5760*1280@25fps、358-5760*1280@30fps、359-4656*3496@6.25fps、 + 360-8288*1800@25fps、361-8288*1800@30fps、362-6080*1320@25fps、363-6080*1320@30fps、364-11040*3616@12.5fps、365-4800*2688@50fps,366-4800*2688@60fps、367-2480*2160@25fps、 + 368-2480*2160@30fps、369-8304*1800@25fps、370-8304*1800@30fps、371-11040*2400@24fps、372-8304x1800@24fps、373-6096x1320@24fps、374-6096*1320@25fps、375-6096*1320@30fps、 + 376-400*300@25fps、377-2560*2160@25fps、378-2560*2160@30fps、379-4608*2592@25fps、380-4608*2592@30fps、381-4608*2592@24fps、382-3840*2160@45fps、383-7680*4320@24fps、 + 384-9024*2656@12.5fps、385-4272*1880@25fps、386-4272*1880@30fps、387-6432*1888@25fps、388-6432*1888@30fps、389-6816*3840@25fps、390-6816*3840@24fps、391-4096*2160@24fps、 + 392-8160*1800@25fps、393-8160*1800@30fps、394-2560*1440@75fps、395-2560*1440@90fps、396-7680*3840@24fps、397-2960*1664@20fps、398-3840*2160@16.67fps、399-4608*3456@15fps、 + 400-4608*2592@20fps、401-3840*2160@10fps、402-1920*1080@10fps、403-8160*1800@24fps、404-1600*1200@50fps、405-1600*1200@60fps、406-1600*1200@100fps、407-1600*1200@120fps、 + 408-1600*1200@200fps、409-1600*1200@210fps、410-2880*1616@25fps, 411-2880*1616@30fps、412-5760*3232@20fps、413-2304*1296@16.67fps、414-2560*1440@10fps、415-2160*2160@25fps、 + 416-2160*2160@30fps、417-1920*1080@150fps、418-1920*1080@180fps、419-2560*1440@100fps、420-2560*1440@120fps、421-2880*1616@20fps、422-3632*1632@24fps、423-2304*1296@10fps、 + 424-2560*1440@10fps、425-3840*2160@10fps、426-480*360@50fps、427-2688*2248@25fps、428-2688*2248@30fps、429-3008*1328@20fps、430-4608*3456@12.5fps、431-7104*4096@25fps、 + 432-7104*4096@30fps、433-1600*1200@150fps、434-4608*3456@25fps、435-4608*3456@30fps、436-4608*3456@20fps、437-4608*3456@9fps、438-4608*3456@8fps、439-4000*3000@9fps、 + 440-4000*3000@8fps、441-8000*6000@9fps、442-8000*6000@8fps、443-4096*1280@25fps、444-796*796@25fps、445-7584*512@25fps、446-13101*512@25fps、447-1024*320@25fps、 + 448-8592*3728@12.5fps、449-6096*2640@12.5fps、450-5520*2400@24fps、451-5200*2320@20fps、452-5968*2688@12.5fps、453-5968*2688@15fps、454-2576*1456@25fps、455-2576*1456@30fps、 + 456-2560*2160@20fps、457-3840*2160@48fps*/ + WORD wCaptureModeN; //视频输入模式(N制),当模式索引小于255时,与byCaptureModeN保持一致,大于255时以该字段返回索引值判断。 + WORD wCaptureModeP; //视频输入模式(P制),当模式索引小于255时,与byCaptureModeN保持一致,大于255时以该字段返回索引值判断 BYTE byRes2[150]; }NET_DVR_CAMERAPARAMCFG_EX, *LPNET_DVR_CAMERAPARAMCFG_EX; typedef struct tagNET_DVR_FOCUSING_POSITION_STATE { DWORD dwSize; - BYTE byState;//۽λ״̬ 0-λ1-λ + BYTE byState;//聚焦到位状态参数 0-不到位,1-到位 BYTE byRes[31]; }NET_DVR_FOCUSING_POSITION_STATE, *LPNET_DVR_FOCUSING_POSITION_STATE; typedef enum _VCA_PLATE_COLOR_ { - VCA_BLUE_PLATE = 0, //ɫ - VCA_YELLOW_PLATE, //ɫ - VCA_WHITE_PLATE, //ɫ - VCA_BLACK_PLATE, //ɫ - VCA_GREEN_PLATE, //ɫ - VCA_BKAIR_PLATE, //񺽺ɫ - VCA_RED_PLATE, //ɫ - VCA_ORANGE_PLATE, //ɫ - VCA_BROWN_PLATE = 8, //ɫ - VCA_OTHER = 0xff // + VCA_BLUE_PLATE = 0, //蓝色车牌 + VCA_YELLOW_PLATE, //黄色车牌 + VCA_WHITE_PLATE, //白色车牌 + VCA_BLACK_PLATE, //黑色车牌 + VCA_GREEN_PLATE, //绿色车牌 + VCA_BKAIR_PLATE, //民航黑色车牌 + VCA_RED_PLATE, //红色车牌 + VCA_ORANGE_PLATE, //橙色车牌 + VCA_BROWN_PLATE = 8, //棕色车牌 + VCA_OTHER = 0xff //其他 }VCA_PLATE_COLOR; -// +//车牌类型 typedef enum _VCA_PLATE_TYPE_ { - VCA_STANDARD92_PLATE = 0, //׼óֳ - VCA_STANDARD02_PLATE, //02ʽó - VCA_WJPOLICE_PLATE, //侯 - VCA_JINGCHE_PLATE, // - STANDARD92_BACK_PLATE, //ó˫β - VCA_SHIGUAN_PLATE, //ʹݳ - VCA_NONGYONG_PLATE, //ũó - VCA_MOTO_PLATE, //Ħг - NEW_ENERGY_PLATE, //Դ - VCA_CONSULATE_PLATE = 9, //¹ݳ - VCA_EMERGENCY_PLATE = 10, //Ӧ - //2017-05-18 ж - TRANSPORT_PLATE = 0x20, //䳵 - COMMERCIAL_PLATE, //ó - PRIVATE_PLATE, //˽ҳ - LEARNING_PLATE, // - CD_PLATE, //ʹݳ - CC_PLATE, //ʹݳ - SPECIAL_PLATE, //ֳ + VCA_STANDARD92_PLATE = 0, //标准民用车与特种车 + VCA_STANDARD02_PLATE, //02式民用车牌 + VCA_WJPOLICE_PLATE, //武警车 + VCA_JINGCHE_PLATE, //警车 + STANDARD92_BACK_PLATE, //民用车双行尾牌 + VCA_SHIGUAN_PLATE, //使馆车牌 + VCA_NONGYONG_PLATE, //农用车 + VCA_MOTO_PLATE, //摩托车 + NEW_ENERGY_PLATE, //新能源车牌 + VCA_CONSULATE_PLATE = 9, //领事馆车牌 + VCA_EMERGENCY_PLATE = 10, //应急车牌 + //2017-05-18 增加 中东地区车牌类型 + TRANSPORT_PLATE = 0x20, //运输车 + COMMERCIAL_PLATE, //商用车 + PRIVATE_PLATE, //私家车 + LEARNING_PLATE, //教练车 + CD_PLATE, //使馆车 + CC_PLATE, //使馆车 + SPECIAL_PLATE, //特种车 PROTOCOL_PLATE, //PROTOCOL - GOVERNMENT_PLATE, // + GOVERNMENT_PLATE, //政府车 EXPORT_PLATE, //EXPORT - TAXI_PLATE, //⳵ + TAXI_PLATE, //出租车 TESTING_PLATE, //TESTING TRANSFER_PLATE, //TRANSFER - TRUCK_PLATE, // - BUS_PLATE, // + TRUCK_PLATE, //货车 + BUS_PLATE, //公交车 PUBLIC_PLATE, //PUBLIC PUB_TRANS_PLATE, //PUBLIC TRANSFER PRI_TRANS_PLATE, //PRIVATE TRANSPORT - TUMBREL_PLATE, //ֳ - HONG_KONG_MACAO_PLATE, //۰ - UNKNOWN_PLATE = 0xff, //δ֪δʶ + TUMBREL_PLATE, //二轮车 + HONG_KONG_MACAO_PLATE, //港澳入出车 + UNKNOWN_PLATE = 0xff, //未知(未识别) }VCA_PLATE_TYPE; -//ʶ +//车型识别结果 typedef enum _VTR_RESULT { - VTR_RESULT_OTHER = 0, //δ֪ - VTR_RESULT_BUS = 1, //ͳ - VTR_RESULT_TRUCK = 2, // - VTR_RESULT_CAR = 3, //γ - VTR_RESULT_MINIBUS = 4, // - VTR_RESULT_SMALLTRUCK = 5, //С - VTR_RESULT_HUMAN = 6, // - VTR_RESULT_TUMBREL = 7, //ֳ - VTR_RESULT_TRIKE = 8, //ֳ + VTR_RESULT_OTHER = 0, //未知 + VTR_RESULT_BUS = 1, //客车 + VTR_RESULT_TRUCK = 2, //货车 + VTR_RESULT_CAR = 3, //轿车 + VTR_RESULT_MINIBUS = 4, //面包车 + VTR_RESULT_SMALLTRUCK = 5, //小货车 + VTR_RESULT_HUMAN = 6, //行人 + VTR_RESULT_TUMBREL = 7, //二轮车 + VTR_RESULT_TRIKE = 8, //三轮车 VTR_RESULT_SUV_MPV = 9, //SUV/MPV - VTR_RESULT_MEDIUM_BUS = 10, //Ϳͳ - VTR_RESULT_MOTOR_VEHICLE = 11, // - VTR_RESULT_NON_MOTOR_VEHICLE = 12, //ǻ - VTR_RESULT_SMALLCAR = 13, //Сͽγ - VTR_RESULT_MICROCAR = 14, //΢ͽγ - VTR_RESULT_PICKUP = 15, //Ƥ - VTR_RESULT_CONTAINER_TRUCK = 16, // װ俨 - VTR_RESULT_MINI_TRUCK = 17, // ΢忨 - VTR_RESULT_SLAG_CAR = 18, // - VTR_RESULT_CRANE = 19, // ̳ - VTR_RESULT_OIL_TANK_TRUCK = 20, // ͹޳ - VTR_RESULT_CONCRETE_MIXER = 21, // 賵 - VTR_RESULT_PLATFORM_TRAILER = 22, // ƽϳ - VTR_RESULT_HATCHBACK = 23, // γ - VTR_RESULT_SALOON = 24, // γ - VTR_RESULT_SPORT_SEDAN = 25, // - VTR_RESULT_SMALL_BUS = 26 //СͿͳ + VTR_RESULT_MEDIUM_BUS = 10, //中型客车 + VTR_RESULT_MOTOR_VEHICLE = 11, //机动车 + VTR_RESULT_NON_MOTOR_VEHICLE = 12, //非机动车 + VTR_RESULT_SMALLCAR = 13, //小型轿车 + VTR_RESULT_MICROCAR = 14, //微型轿车 + VTR_RESULT_PICKUP = 15, //皮卡车 + VTR_RESULT_CONTAINER_TRUCK = 16, // 集装箱卡车 + VTR_RESULT_MINI_TRUCK = 17, // 微卡,栏板卡 + VTR_RESULT_SLAG_CAR = 18, // 渣土车 + VTR_RESULT_CRANE = 19, // 吊车,工程车 + VTR_RESULT_OIL_TANK_TRUCK = 20, // 油罐车 + VTR_RESULT_CONCRETE_MIXER = 21, // 混凝土搅拌车 + VTR_RESULT_PLATFORM_TRAILER = 22, // 平板拖车 + VTR_RESULT_HATCHBACK = 23, // 两厢轿车 + VTR_RESULT_SALOON = 24, // 三厢轿车 + VTR_RESULT_SPORT_SEDAN = 25, // 轿跑 + VTR_RESULT_SMALL_BUS = 26 //小型客车 }VTR_RESULT; -//ɫ +//车身颜色 typedef enum _VCR_CLR_CLASS { - VCR_CLR_UNSUPPORT = 0, //֧ - VCR_CLR_WHITE = 1, // - VCR_CLR_SILVER = 2, // - VCR_CLR_GRAY = 3, // - VCR_CLR_BLACK = 4, // - VCR_CLR_RED = 5, // - VCR_CLR_DARKBLUE = 6, // - VCR_CLR_BLUE = 7, // - VCR_CLR_YELLOW = 8, // - VCR_CLR_GREEN = 9, // - VCR_CLR_BROWN = 10, // - VCR_CLR_PINK = 11, // - VCR_CLR_PURPLE = 12, // - VCR_CLR_DARKGRAY = 13, // - VCR_CLR_CYAN = 14 //ɫ + VCR_CLR_UNSUPPORT = 0, //不支持 + VCR_CLR_WHITE = 1, //白 + VCR_CLR_SILVER = 2, //银 + VCR_CLR_GRAY = 3, //灰 + VCR_CLR_BLACK = 4, //黑 + VCR_CLR_RED = 5, //红 + VCR_CLR_DARKBLUE = 6, //深蓝 + VCR_CLR_BLUE = 7, //蓝 + VCR_CLR_YELLOW = 8, //黄 + VCR_CLR_GREEN = 9, //绿 + VCR_CLR_BROWN = 10, //棕 + VCR_CLR_PINK = 11, //粉 + VCR_CLR_PURPLE = 12, //紫 + VCR_CLR_DARKGRAY = 13, //深灰 + VCR_CLR_CYAN = 14 //青色 }VCR_CLR_CLASS; -// 2013-11-04 +//车辆操作类型 2013-11-04 typedef enum _VCA_OPERATE_TYPE_ { - VCA_LICENSE_TYPE = 0x1, //ƺ - VCA_PLATECOLOR_TYPE = 0x2, //ɫ - VCA_CARDNO_TYPE = 0x4, // - VCA_PLATETYPE_TYPE = 0x8, // - VCA_LISTTYPE_TYPE = 0x10, // - VCA_INDEX_TYPE = 0x20, //ˮ 2014-02-25 - VCA_OPERATE_INDEX_TYPE = 0x40 // 2014-03-03 + VCA_LICENSE_TYPE = 0x1, //车牌号码 + VCA_PLATECOLOR_TYPE = 0x2, //车牌颜色 + VCA_CARDNO_TYPE = 0x4, //卡号 + VCA_PLATETYPE_TYPE = 0x8, //车牌类型 + VCA_LISTTYPE_TYPE = 0x10, //车辆名单类型 + VCA_INDEX_TYPE = 0x20, //数据流水号 2014-02-25 + VCA_OPERATE_INDEX_TYPE = 0x40 //操作数 2014-03-03 }VCA_OPERATE_TYPE; typedef enum _VCA_ILLEGAL_TYPE_ { - VCA_POSTPIC_TYPE = 0x1, //ͼƬ - VCA_LOWSPEED_TYPE = 0x2, // - VCA_HIGHSPEED_TYPE = 0x4, // - VCA_RETROGRADE_TYPE = 0x8, // - VCA_RUSH_REDLIGHT_TYPE = 0x10, // - VCA_PRESS_LANE_TYPE = 0x20, //ѹ - VCA_VIOLATE_GUIDE_TYPE = 0x40,// - VCA_ROAD_STRAND_TYPE = 0x80,//·(豸֧) - VCA_VEHICLE_ILLEGAL_LANE_TYPE = 0x100,//ռ - VCA_ILLEGAL_LANE_CHANGE_TYPE = 0x200,//Υ - VCA_ILLEGAL_LANE_DRIVE_TYPE = 0x400,// - VCA_VIOLATE_BAN_TYPE = 0x800,//Υ - VCA_CROSS_PARKING_TYPE = 0x1000,//·ͣ - VCA_GREEN_PARKING_TYPE = 0x2000//̵ͣ + VCA_POSTPIC_TYPE = 0x1, //卡口图片 + VCA_LOWSPEED_TYPE = 0x2, //低速 + VCA_HIGHSPEED_TYPE = 0x4, //高速 + VCA_RETROGRADE_TYPE = 0x8, //逆行 + VCA_RUSH_REDLIGHT_TYPE = 0x10, //闯红灯 + VCA_PRESS_LANE_TYPE = 0x20, //压车道线 + VCA_VIOLATE_GUIDE_TYPE = 0x40,//不按导向 + VCA_ROAD_STRAND_TYPE = 0x80,//路口滞留(设备不支持) + VCA_VEHICLE_ILLEGAL_LANE_TYPE = 0x100,//机占非 + VCA_ILLEGAL_LANE_CHANGE_TYPE = 0x200,//违法变道 + VCA_ILLEGAL_LANE_DRIVE_TYPE = 0x400,//不按车道 + VCA_VIOLATE_BAN_TYPE = 0x800,//违法禁令 + VCA_CROSS_PARKING_TYPE = 0x1000,//路口停车 + VCA_GREEN_PARKING_TYPE = 0x2000//绿灯停车 }VCA_ILLEGAL_TYPE; typedef enum _VCA_VEHICLE_TYPE_ { - VCA_OTHER_TYPE = 0x1, // - VCA_SMALLCAR_TYPE = 0x2, //Сͳ - VCA_BIGCAR_TYPE = 0x4, //ͳ - VCA_BUS_TYPE = 0x8, //ͳ - VCA_TRUCK_TYPE = 0x10, // - VCA_CAR_TYPE = 0x20, //γ - VCA_MINIBUS_TYPE = 0x40, // - VCA_SMALL_TRUCK_TYPE = 0x80 //С + VCA_OTHER_TYPE = 0x1, //其它车型 + VCA_SMALLCAR_TYPE = 0x2, //小型车 + VCA_BIGCAR_TYPE = 0x4, //大型车 + VCA_BUS_TYPE = 0x8, //客车 + VCA_TRUCK_TYPE = 0x10, //货车 + VCA_CAR_TYPE = 0x20, //轿车 + VCA_MINIBUS_TYPE = 0x40, //面包车 + VCA_SMALL_TRUCK_TYPE = 0x80 //小货车 }VCA_VEHICLE_TYPE; -//Ʒ +//车辆品牌主类型 typedef enum _VLR_VEHICLE_CLASS { - VLR_OTHER = 0, // - VLR_VOLKSWAGEN = 1, // - VLR_BUICK = 2, // - VLR_BMW = 3, // - VLR_HONDA = 4, // - VLR_PEUGEOT = 5, // - VLR_TOYOTA = 6, // - VLR_FORD = 7, // - VLR_NISSAN = 8, //ղ - VLR_AUDI = 9, //µ - VLR_MAZDA = 10, //Դ - VLR_CHEVROLET = 11, //ѩ - VLR_CITROEN = 12, //ѩ - VLR_HYUNDAI = 13, //ִ - VLR_CHERY = 14, // - VLR_KIA = 15, // - VLR_ROEWE = 16, // - VLR_MITSUBISHI = 17, // - VLR_SKODA = 18, //˹´ - VLR_GEELY = 19, // - VLR_ZHONGHUA = 20, //л - VLR_VOLVO = 21, //ֶ - VLR_LEXUS = 22, //׿˹ - VLR_FIAT = 23, // - VLR_EMGRAND = 24, //ۺ() - VLR_DONGFENG = 25, // - VLR_BYD = 26, //ǵ - VLR_SUZUKI = 27, //ľ - VLR_JINBEI = 28, // - VLR_HAIMA = 29, // - VLR_SGMW = 30, // - VLR_JAC = 31, // - VLR_SUBARU = 32, //˹³ - VLR_ENGLON = 33, //Ӣ() - VLR_GREATWALL = 34, // - VLR_HAFEI = 35, // - VLR_ISUZU = 36, //ʮ() - VLR_SOUEAST = 37, // - VLR_CHANA = 38, // - VLR_FOTON = 39, // - VLR_XIALI = 40, //(һ) - VLR_BENZ = 41, // - VLR_FAW = 42, //һ - VLR_NAVECO = 43, //ά - VLR_LIFAN = 44, // - VLR_BESTURN = 45, //һ(һ) - VLR_CROWN = 46, //ʹ() - VLR_RENAULT = 47, //ŵ - VLR_JMC = 48, //JMC() - VLR_MG = 49, //MG - VLR_KAMA = 50, // - VLR_ZOTYE = 51, //̩ - VLR_CHANGHE = 52, // - VLR_XMKINGLONG = 53, //Ž() - VLR_HUIZHONG = 54, //Ϻ() - VLR_SZKINGLONG = 55, //ݽ - VLR_HIGER = 56, // - VLR_YUTONG = 57, //ͨ - VLR_CNHTC = 58, //й - VLR_BEIBEN = 59, //ؿ - VLR_XINGMA = 60, // - VLR_YUEJIN = 61, //Ծ - VLR_HUANGHAI = 62, //ƺ - VLR_OLDWALL = 63, //Ͽ - VLR_CHANACOMMERCIAL = 64, // - VLR_PORSCHE = 65, // ʱ - VLR_CADILLAC = 66, // - VLR_INFINITI = 67, // Ӣ - VLR_GLEAGLE = 68, // ȫӥ() - VLR_JEEP = 69, // JEEP() - VLR_LANDROVER = 70, // · - VLR_CHANGFENG = 71, // - VLR_BENNI = 72, // () - VLR_ERA = 73, // ʱ(ʱ) - VLR_TAURUS = 74, // ţ() - VLR_EADO = 75, // ݶ - VLR_SHANQI = 76, // - VLR_HONGYAN = 77, // (άº) - VLR_DRAGON = 78, // () - VLR_JACTEXT = 79, // JAC () - VLR_JACBUS = 80, // ִͳ () - VLR_ANKAI = 81, // ͳ - VLR_SHENLONG = 82, // ͳ - VLR_DAEWOO = 83, // ͳ - VLR_WUZHENG = 84, // - VLR_MAN = 85, // MAN - VLR_ZHONGTONG = 86, // ͨͳ - VLR_BAOJUN = 87, // - VLR_BQWEIWANG = 88, // - VLR_TRUMPCHE = 89, // - VLR_LUFENG = 90, // ½ - VLR_HMZHENGZHOU = 91, // ֣ - VLR_BEIJING = 92, // - VLR_ZHONGSHUN = 93, // ˳ - VLR_WEILIN = 94, // - VLR_OPEL = 95, // ŷ - VLR_KARRY = 96, // - VLR_SMA = 97, // - VLR_SMATEXT = 98, // SMA - VLR_YUWIN = 99, // Ԧʤ - VLR_MINI = 100, // MINI - VLR_MARK = 101, // MARKX - VLR_HAVAL = 102, // HAVAL - VLR_OGA = 103, // ک - VLR_VENUCIA = 104, // - VLR_BYD2 = 105, // ǵʽ2 (ǵ) - VLR_SMART = 106, // SMART - VLR_BAW = 107, // 쳧BAW - VLR_LUXGEN = 108, // ǽ - VLR_YEMA = 109, // Ұ - VLR_ZTE = 110, // - VLR_EVERUS = 111, // - VLR_CHRYSLER = 112, // ˹ - VLR_GONOW = 113, // - VLR_SHJIANG = 114, // ɻ - VLR_RUILIN = 115, // - VLR_FORTA = 116, // - VLR_GAGUAR = 117, // ݱ - VLR_HEIBAO = 118, // ڱ - VLR_TKING = 119, // ƿ - VLR_TKINGTEXT = 120, // ƿ - VLR_FODAY = 121, // - VLR_LOTUS = 122, // - VLR_NANJUN = 123, // Ͽ - VLR_SHUANGHUAN = 124, // ˫ - VLR_SAIBAO = 125, // - VLR_HAWTAI = 126, // ̩ - VLR_LIFO = 127, // Դɵ - VLR_JONWAY = 128, // Դ - VLR_FULONGMA = 129, // - VLR_WEILI = 130, // Ϋ - VLR_ANCHI = 131, // - VLR_PAIXI = 132, // ϲ - VLR_HIGERTEXT = 133, // HIGER - VLR_RIYECAR = 134, // ҰῨ - VLR_RIYETRUCK = 135, // Ұؿ - VLR_JIANGNAN = 136, // - VLR_OLDZOTYE = 137, // Ͽ̩ - VLR_OLDXIALI = 138, // Ͽ - VLR_NEWAOCHI = 139, // °³ - VLR_CDW = 140, // - VLR_CDWTEXT = 141, // - VLR_CIIMO = 142, // ˼ - VLR_CHANADS = 143, // а - VLR_DS = 144, // - VLR_ROHENS = 145, // ִͶ˹ - VLR_YANTAI = 146, // ̨ - VLR_SHUANGLONG = 147, // ˫ - VLR_FENGLING = 148, // ʱ - VLR_XINKAI = 149, // ¿ + VLR_OTHER = 0, //其它 + VLR_VOLKSWAGEN = 1, //大众 + VLR_BUICK = 2, //别克 + VLR_BMW = 3, //宝马 + VLR_HONDA = 4, //本田 + VLR_PEUGEOT = 5, //标致 + VLR_TOYOTA = 6, //丰田 + VLR_FORD = 7, //福特 + VLR_NISSAN = 8, //日产 + VLR_AUDI = 9, //奥迪 + VLR_MAZDA = 10, //马自达 + VLR_CHEVROLET = 11, //雪佛兰 + VLR_CITROEN = 12, //雪铁龙 + VLR_HYUNDAI = 13, //现代 + VLR_CHERY = 14, //奇瑞 + VLR_KIA = 15, //起亚 + VLR_ROEWE = 16, //荣威 + VLR_MITSUBISHI = 17, //三菱 + VLR_SKODA = 18, //斯柯达 + VLR_GEELY = 19, //吉利 + VLR_ZHONGHUA = 20, //中华 + VLR_VOLVO = 21, //沃尔沃 + VLR_LEXUS = 22, //雷克萨斯 + VLR_FIAT = 23, //菲亚特 + VLR_EMGRAND = 24, //帝豪(吉利) + VLR_DONGFENG = 25, //东风 + VLR_BYD = 26, //比亚迪 + VLR_SUZUKI = 27, //铃木 + VLR_JINBEI = 28, //金杯 + VLR_HAIMA = 29, //海马 + VLR_SGMW = 30, //五菱 + VLR_JAC = 31, //江淮 + VLR_SUBARU = 32, //斯巴鲁 + VLR_ENGLON = 33, //英伦(吉利) + VLR_GREATWALL = 34, //长城 + VLR_HAFEI = 35, //哈飞 + VLR_ISUZU = 36, //五十铃(庆铃) + VLR_SOUEAST = 37, //东南 + VLR_CHANA = 38, //长安 + VLR_FOTON = 39, //福田 + VLR_XIALI = 40, //夏利(一汽) + VLR_BENZ = 41, //奔驰 + VLR_FAW = 42, //一汽 + VLR_NAVECO = 43, //依维柯 + VLR_LIFAN = 44, //力帆 + VLR_BESTURN = 45, //一汽奔腾(一汽) + VLR_CROWN = 46, //皇冠(丰田) + VLR_RENAULT = 47, //雷诺 + VLR_JMC = 48, //JMC(江铃) + VLR_MG = 49, //MG名爵 + VLR_KAMA = 50, //凯马 + VLR_ZOTYE = 51, //众泰 + VLR_CHANGHE = 52, //昌河 + VLR_XMKINGLONG = 53, //厦门金龙(金旅) + VLR_HUIZHONG = 54, //上海汇众(上汽集团) + VLR_SZKINGLONG = 55, //苏州金龙 + VLR_HIGER = 56, //海格 + VLR_YUTONG = 57, //宇通 + VLR_CNHTC = 58, //中国重汽 + VLR_BEIBEN = 59, //北奔重卡 + VLR_XINGMA = 60, //华菱星马 + VLR_YUEJIN = 61, //跃进 + VLR_HUANGHAI = 62, //黄海 + VLR_OLDWALL = 63, //老款长城 + VLR_CHANACOMMERCIAL = 64, //长安商用 + VLR_PORSCHE = 65, // 保时捷 + VLR_CADILLAC = 66, // 凯迪拉克 + VLR_INFINITI = 67, // 英菲尼迪 + VLR_GLEAGLE = 68, // 吉利全球鹰(吉利) + VLR_JEEP = 69, // JEEP(吉普) + VLR_LANDROVER = 70, // 路虎 + VLR_CHANGFENG = 71, // 长丰 + VLR_BENNI = 72, // 长安奔奔(长安) + VLR_ERA = 73, // 福田时代(时代) + VLR_TAURUS = 74, // 长安金牛星(长安商用) + VLR_EADO = 75, // 长安逸动 + VLR_SHANQI = 76, // 陕汽 + VLR_HONGYAN = 77, // 红岩汽车(上汽依维柯红岩) + VLR_DRAGON = 78, // 霸龙汽车(东风柳汽) + VLR_JACTEXT = 79, // 江淮JAC (江淮) + VLR_JACBUS = 80, // 江淮现代客车 (江淮) + VLR_ANKAI = 81, // 安凯客车 + VLR_SHENLONG = 82, // 申龙客车 + VLR_DAEWOO = 83, // 大宇客车 + VLR_WUZHENG = 84, // 五征汽车 + VLR_MAN = 85, // MAN汽车 + VLR_ZHONGTONG = 86, // 中通客车 + VLR_BAOJUN = 87, // 宝骏 + VLR_BQWEIWANG = 88, // 北汽威旺 + VLR_TRUMPCHE = 89, // 传祺 + VLR_LUFENG = 90, // 陆风 + VLR_HMZHENGZHOU = 91, // 海马郑州 + VLR_BEIJING = 92, // 北京汽车 + VLR_ZHONGSHUN = 93, // 中顺 + VLR_WEILIN = 94, // 威麟汽车 + VLR_OPEL = 95, // 欧宝 + VLR_KARRY = 96, // 开瑞 + VLR_SMA = 97, // 华普汽车 + VLR_SMATEXT = 98, // 华普汽车文字SMA + VLR_YUWIN = 99, // 江铃驭胜 + VLR_MINI = 100, // 宝马MINI + VLR_MARK = 101, // 丰田MARKX + VLR_HAVAL = 102, // 哈弗HAVAL + VLR_OGA = 103, // 讴歌 + VLR_VENUCIA = 104, // 启辰 + VLR_BYD2 = 105, // 比亚迪样式2 (比亚迪) + VLR_SMART = 106, // 奔驰SMART + VLR_BAW = 107, // 北京汽车制造厂BAW + VLR_LUXGEN = 108, // 纳智捷 + VLR_YEMA = 109, // 野马 + VLR_ZTE = 110, // 中兴 + VLR_EVERUS = 111, // 理念 + VLR_CHRYSLER = 112, // 克莱斯勒 + VLR_GONOW = 113, // 吉奥汽车 + VLR_SHJIANG = 114, // 松花江 + VLR_RUILIN = 115, // 瑞麟 + VLR_FORTA = 116, // 福达 + VLR_GAGUAR = 117, // 捷豹 + VLR_HEIBAO = 118, // 黑豹 + VLR_TKING = 119, // 唐骏 + VLR_TKINGTEXT = 120, // 唐骏文字 + VLR_FODAY = 121, // 福迪 + VLR_LOTUS = 122, // 莲花汽车 + VLR_NANJUN = 123, // 南骏 + VLR_SHUANGHUAN = 124, // 双环汽车 + VLR_SAIBAO = 125, // 哈飞赛豹 + VLR_HAWTAI = 126, // 华泰 + VLR_LIFO = 127, // 永源飞碟 + VLR_JONWAY = 128, // 永源汽车 + VLR_FULONGMA = 129, // 福龙马 + VLR_WEILI = 130, // 潍力 + VLR_ANCHI = 131, // 江淮安驰 + VLR_PAIXI = 132, // 派喜 + VLR_HIGERTEXT = 133, // 海格HIGER文字 + VLR_RIYECAR = 134, // 广汽日野轻卡 + VLR_RIYETRUCK = 135, // 广汽日野重卡 + VLR_JIANGNAN = 136, // 江南 + VLR_OLDZOTYE = 137, // 老款众泰 + VLR_OLDXIALI = 138, // 老款夏利 + VLR_NEWAOCHI = 139, // 新奥驰 + VLR_CDW = 140, // 王牌重汽 + VLR_CDWTEXT = 141, // 王牌重汽文字 + VLR_CIIMO = 142, // 本田思铭 + VLR_CHANADS = 143, // 长安谛艾仕 + VLR_DS = 144, // 道奇 + VLR_ROHENS = 145, // 现代劳恩斯酷派 + VLR_YANTAI = 146, // 燕台 + VLR_SHUANGLONG = 147, // 双龙 + VLR_FENGLING = 148, // 时代风菱 + VLR_XINKAI = 149, // 新凯 VLR_GMC = 150, // GMC - VLR_DATONG = 151, // ͨ - VLR_BQYINXIANG = 152, // - VLR_NEWCHERY = 153, // - VLR_MUDAN = 154, // ĵ - VLR_DAYUN = 155, // - VLR_DONGWO = 156, // - VLR_UNION = 157, // - VLR_CHUNZHOU = 158, // ޿ͳ - VLR_SANY = 159, // һع - VLR_YAXING = 160, // ǿͳ - VLR_HENGTONG = 161, // ͨͳ - VLR_SHAOLIN = 162, // ֿͳ - VLR_YOUNG = 163, // ͳ - VLR_STOM = 164, // ʮͨ - VLR_SANHUAN = 165, // - VLR_XUGONG = 166, // 칤 - VLR_BEIFANG = 167, // - VLR_JIANGHUAN = 168, // - VLR_BJFARM = 169, // ũ - VLR_NEWDADI = 170, // ´ - VLR_SUNWIN = 171, // ֿͳ - VLR_YINGTIAN = 172, // Ӣ - VLR_QINGQI = 173, // - VLR_CHUFENG = 174, // - VLR_SCANIA = 175, // ˹ - VLR_JIULONG = 176, // ͳ - VLR_YOUYI = 177, // ͳ - VLR_SHANGRAO = 178, // Ŀͳ - VLR_JIJIANG = 179, // - VLR_YANGZI = 180, // ӿͳ - VLR_XIWO = 181, // ֿͳ - VLR_CHANGJIANG = 182, // ͳ - VLR_WUYI = 183, // - VLR_CHENGDU = 184, // ɶͳ - VLR_TIANMA = 185, // - VLR_BAOLONG = 186, // - VLR_NEWYATU = 187, // ; - VLR_BARUI = 188, // ǰ - VLR_GUANZHI = 189, // - VLR_XIYATE = 190, // - VLR_BINLI = 191, // - VLR_DADI = 192, // - VLR_FUQI = 193, // - VLR_HANGTIAN = 194, // HT - VLR_HENGTIAN = 195, // - VLR_JMCCAR = 196, // - VLR_KAERSEN = 197, // ɭ - VLR_KAWEI = 198, // - VLR_LANBOJINI = 199, // - VLR_MASHALADI = 200, // ɯ - VLR_SHUCHI = 201, // ۿͳ - VLR_SHILI = 202, // ʵͳ - VLR_HUABEI = 203, // пͻ - VLR_YIZHENG = 204, // - VLR_CHUNLAN = 205, // - VLR_DAFA = 206, // - VLR_SHENYE = 207, // Ұ - VLR_FALALI = 208, // - VLR_FUXING = 209, // - VLR_ANYUAN = 210, // Դͳ - VLR_JINGHUA = 211, // ͳ - VLR_TAIHU = 212, // ̫ͳ - VLR_WUZHOULONG = 213, // - VLR_CHANGLONG = 214, // ¡ͳ - VLR_YUEXI = 215, // ͳ - VLR_SHENMA = 216, // ͳ - VLR_LUSHAN = 217, // ®ɽ - VLR_WANFENG = 218, // - VLR_GZYUNBAO = 219, // Ʊ - VLR_ZHONGDA = 220, // д - VLR_THREEWHEEL = 221, // ֳ - VLR_TWOWHEEL = 222, // ֳ - VLR_JBC = 223, // JBC - VLR_YZJIANG = 224, // ӽͳ - VLR_CNJ = 225, // ϿCNJ - VLR_FORLAND = 226, // ʱ - VLR_FARMCAR = 227, // ũó - VLR_DONGFANGHONG = 228, // - VLR_STEYR = 229, // ˹̫ - VLR_HONGQI = 230, // - VLR_USER1 = 231, //û1 - VLR_USER2 = 232, //û2 - VLR_USER3 = 233, //û3 - VLR_USER4 = 234, //û4 - VLR_USER5 = 235, //û5 - VLR_USER6 = 236, //û6 - VLR_USER7 = 237, //û7 - VLR_USER8 = 238 //û8 + VLR_DATONG = 151, // 上汽大通 + VLR_BQYINXIANG = 152, // 北汽银翔 + VLR_NEWCHERY = 153, // 新奇瑞 + VLR_MUDAN = 154, // 牡丹 + VLR_DAYUN = 155, // 大运汽车 + VLR_DONGWO = 156, // 东沃汽车 + VLR_UNION = 157, // 联合汽车 + VLR_CHUNZHOU = 158, // 春洲客车 + VLR_SANY = 159, // 三一重工 + VLR_YAXING = 160, // 亚星客车 + VLR_HENGTONG = 161, // 恒通客车 + VLR_SHAOLIN = 162, // 少林客车 + VLR_YOUNG = 163, // 青年客车 + VLR_STOM = 164, // 十通 + VLR_SANHUAN = 165, // 三环 + VLR_XUGONG = 166, // 徐工 + VLR_BEIFANG = 167, // 北方汽车 + VLR_JIANGHUAN = 168, // 江环货车 + VLR_BJFARM = 169, // 北京农用 + VLR_NEWDADI = 170, // 新大地汽车 + VLR_SUNWIN = 171, // 申沃客车 + VLR_YINGTIAN = 172, // 英田 + VLR_QINGQI = 173, // 轻骑 + VLR_CHUFENG = 174, // 楚风汽车 + VLR_SCANIA = 175, // 斯堪尼亚 + VLR_JIULONG = 176, // 九龙客车 + VLR_YOUYI = 177, // 友谊客车 + VLR_SHANGRAO = 178, // 上饶客车 + VLR_JIJIANG = 179, // 吉江 + VLR_YANGZI = 180, // 扬子客车 + VLR_XIWO = 181, // 西沃客车 + VLR_CHANGJIANG = 182, // 长江客车 + VLR_WUYI = 183, // 武夷 + VLR_CHENGDU = 184, // 成都客车 + VLR_TIANMA = 185, // 天马 + VLR_BAOLONG = 186, // 宝龙 + VLR_NEWYATU = 187, // 新雅途 + VLR_BARUI = 188, // 起亚霸锐 + VLR_GUANZHI = 189, // 观致 + VLR_XIYATE = 190, // 西雅特 + VLR_BINLI = 191, // 宾利 + VLR_DADI = 192, // 大迪 + VLR_FUQI = 193, // 富奇 + VLR_HANGTIAN = 194, // HT汽车 + VLR_HENGTIAN = 195, // 恒天汽车 + VLR_JMCCAR = 196, // 江铃轻汽 + VLR_KAERSEN = 197, // 卡尔森汽车 + VLR_KAWEI = 198, // 卡威汽车 + VLR_LANBOJINI = 199, // 兰博基尼 + VLR_MASHALADI = 200, // 玛莎拉蒂 + VLR_SHUCHI = 201, // 舒驰客车 + VLR_SHILI = 202, // 实力客车 + VLR_HUABEI = 203, // 中客华北 + VLR_YIZHENG = 204, // 上汽仪征 + VLR_CHUNLAN = 205, // 春兰汽车 + VLR_DAFA = 206, // 大发汽车 + VLR_SHENYE = 207, // 神野汽车 + VLR_FALALI = 208, // 法拉利汽车 + VLR_FUXING = 209, // 福星汽车 + VLR_ANYUAN = 210, // 安源客车 + VLR_JINGHUA = 211, // 京华客车 + VLR_TAIHU = 212, // 太湖客车 + VLR_WUZHOULONG = 213, // 五洲龙 + VLR_CHANGLONG = 214, // 常隆客车 + VLR_YUEXI = 215, // 悦西客车 + VLR_SHENMA = 216, // 神马客车 + VLR_LUSHAN = 217, // 庐山牌 + VLR_WANFENG = 218, // 万丰牌 + VLR_GZYUNBAO = 219, // 广州云豹 + VLR_ZHONGDA = 220, // 中大汽车 + VLR_THREEWHEEL = 221, // 三轮车 + VLR_TWOWHEEL = 222, // 二轮车 + VLR_JBC = 223, // 金杯JBC + VLR_YZJIANG = 224, // 扬子江客车 + VLR_CNJ = 225, // 南骏CNJ + VLR_FORLAND = 226, // 福田时代文字 + VLR_FARMCAR = 227, // 农用车 + VLR_DONGFANGHONG = 228, // 东方红 + VLR_STEYR = 229, // 斯太尔汽车 + VLR_HONGQI = 230, // 红旗 + VLR_USER1 = 231, //用户1 + VLR_USER2 = 232, //用户2 + VLR_USER3 = 233, //用户3 + VLR_USER4 = 234, //用户4 + VLR_USER5 = 235, //用户5 + VLR_USER6 = 236, //用户6 + VLR_USER7 = 237, //用户7 + VLR_USER8 = 238 //用户8 }VLR_VEHICLE_CLASS; -/********************ƷBegin*************************/ -//Ʒ +/********************车辆品牌子类型Begin*************************/ +//大众子品牌类型 typedef enum _VSB_VOLKSWAGEN_CLASS { - VSB_VOLKSWAGEN_OTHER = 0, // - VSB_VOLKSWAGEN_LAVIDA = 1, // - VSB_VOLKSWAGEN_CROSSLAVIDA = 2, // ʾ - VSB_VOLKSWAGEN_TIGUAN = 3, // ; - VSB_VOLKSWAGEN_TOURAN = 4, // ; - VSB_VOLKSWAGEN_SANTANA = 5, // ɣ - VSB_VOLKSWAGEN_SANTANA2000 = 6, // ɣ2000 - VSB_VOLKSWAGEN_SANTANA3000 = 7, // ɣ3000 - VSB_VOLKSWAGEN_VISTA = 8, // ɣ-־ - VSB_VOLKSWAGEN_PASSAT = 9, // - VSB_VOLKSWAGEN_PASSATLINGYU = 10, // -Ԧ - VSB_VOLKSWAGEN_POLO = 11, // - VSB_VOLKSWAGEN_POLOCROSS = 12, // -˶ - VSB_VOLKSWAGEN_POLOGTI = 13, // -GTI - VSB_VOLKSWAGEN_SAGITAR = 14, // - VSB_VOLKSWAGEN_MAGOTAN = 15, // - VSB_VOLKSWAGEN_JETTA = 16, // ݴ - VSB_VOLKSWAGEN_BORA = 17, // - VSB_VOLKSWAGEN_NEWGOLF = 18, // ¸߶ - VSB_VOLKSWAGEN_GOLFGTI = 19, // ߶-GTI - VSB_VOLKSWAGEN_GOL = 20, // ߶ - VSB_VOLKSWAGEN_CADDY = 21, // - VSB_VOLKSWAGEN_PHAETON = 22, // - VSB_VOLKSWAGEN_TOUREG = 23, // ; - VSB_VOLKSWAGEN_SCIROCCO = 24, // п - VSB_VOLKSWAGEN_BEETLE = 25, // ׿dz - VSB_VOLKSWAGEN_SHARAN = 26, // - VSB_VOLKSWAGEN_MULTIVAN = 27, // - VSB_VOLKSWAGEN_CARBONCOPY = 28, // һ-CC - VSB_VOLKSWAGEN_VISTACHANGDA = 29, // ɣ־- - VSB_VOLKSWAGEN_BORASPORTLINE = 30, // -SPORTLINE - VSR_VOLKSWAGEN_CC_1 =31, //-CC-2012,2011,2010 - VSR_VOLKSWAGEN_Cross_POLO_1 = 32, //-Cross-POLO-2010,2007 - VSR_VOLKSWAGEN_Cross_POLO_2 = 33, //-Cross-POLO-2014,2012 - VSR_VOLKSWAGEN_MULTIVAN_1 = 34, //-Multivan-2014,2012,2011 - VSR_VOLKSWAGEN_POLO_1 = 35, //-POLO-2006,2005,2004,2003,2002 - VSR_VOLKSWAGEN_POLO_2 = 36, //-POLO-2013,2012,2011 - VSR_VOLKSWAGEN_POLO_JINQU_1 = 37, //-POLOȡ-2009,2008,2007,2006 - VSR_VOLKSWAGEN_POLO_JINQU_2 = 38, //-POLOȡ-2011 - VSR_VOLKSWAGEN_Tiguan_1 = 39, //-Tiguan-2011,2009 - VSR_VOLKSWAGEN_Tiguan_2 = 40, //-Tiguan-2014,2013,2012 - VSR_VOLKSWAGEN_XIALANG_1 = 41, //--2013,2012 - VSR_VOLKSWAGEN_BAOLAI_1 = 42, //--2005,2004 - VSR_VOLKSWAGEN_BAOLAI_2 = 43, //--2006 - VSR_VOLKSWAGEN_BAOLAI_3 = 44, //--2012,2011,2010,2009,2008 - VSR_VOLKSWAGEN_BAOLAI_4 = 45, //--2014,2013 - VSR_VOLKSWAGEN_SHANGKU_1 = 46, //-п-2014,2013 - VSR_VOLKSWAGEN_PASATE_1 = 47, //--2003,2001Ԧ - VSR_VOLKSWAGEN_PASATE_2 = 48, //--2007,2006,2005Ԧ - VSR_VOLKSWAGEN_PASATE_3 = 49, //--2009,2008,2007,2005,2004,2003,2001,2000 - VSR_VOLKSWAGEN_PASATE_4 = 50, //--2011,2009Ԧ - VSR_VOLKSWAGEN_PASATE_5 = 51, //--2014,2013,2012,2011 - VSR_VOLKSWAGEN_JIEDA_1 = 52, //-ݴ-2005CIF,2002 - VSR_VOLKSWAGEN_JIEDA_2 = 53, //-ݴ-2009,2008,2006,2005,2004 - VSR_VOLKSWAGEN_JIEDA_3 = 54, //-ݴ-2012,2010 - VSR_VOLKSWAGEN_JIEDA_4 = 55, //-ݴ-2013 - VSR_VOLKSWAGEN_LANGYI_1 = 56, //--2012,2011,2010,2009,2008 - VSR_VOLKSWAGEN_LANGYI_2 = 57, //--2013 - VSR_VOLKSWAGEN_SANGTANA_1 = 58, //-ɣ-2007,2002,2000,1999,1995 - VSR_VOLKSWAGEN_SANGTANA_2 = 59, //-ɣ-2014,2013 - VSR_VOLKSWAGEN_SANGTANA_3 = 60, //-ɣ2000-2003,2001,2000,1999,1998,1996 - VSR_VOLKSWAGEN_SANGTANA_4 = 61, //-ɣ3000-2007,2006,2005,2004,2003 - VSR_VOLKSWAGEN_SANGTANAZHIJUN_1 = 62, //-ɣ־(vista)-2011,2010,2009,2008 - VSR_VOLKSWAGEN_SANGTANAZHIJUN_2 = 63, //-ɣ־(vista)-2006 - VSR_VOLKSWAGEN_JIAKECHONG_1 = 64, //-׿dz-2010,2009,2008,2007,2006,2005 - VSR_VOLKSWAGEN_JIAKECHONG_2 = 65, //-׿dz-2014,2013 - VSR_VOLKSWAGEN_HUITENG_2 = 66, //--2010,2009,2007,2006 - VSR_VOLKSWAGEN_MAITENG_1 = 67, //--2011,2010,2009,2008,2007 - VSR_VOLKSWAGEN_MAITENG_2 = 68, //--2013,2012 - VSR_VOLKSWAGEN_TUAN_3 = 69, //-;-2006,2005,2004 - VSR_VOLKSWAGEN_TUAN_1 = 70, //-;-2010,2009,2008 - VSR_VOLKSWAGEN_TUAN_2 = 71, //-;-2013,2012,2011 - VSR_VOLKSWAGEN_TUGUAN_1 = 72, //-;-2012,2011,2010 - VSR_VOLKSWAGEN_TURUI_1 = 73, //-;-2006,2005,2003 - VSR_VOLKSWAGEN_TURUI_2 = 74, //-;-2014,2013,2012,2011 - VSR_VOLKSWAGEN_SUTENG_1 = 75, //--2010,2009,2007,2006 - VSR_VOLKSWAGEN_SUTENG_2 = 76, //--2011 - VSR_VOLKSWAGEN_SUTENG_3 = 77, //--2014,2013,2012 - VSR_VOLKSWAGEN_GAOERFU_1 = 78, //-߶-2008,2007,2006,2005,2004,2003 - VSR_VOLKSWAGEN_GAOERFU_2 = 79, //-߶-2012,2011,2012,2011,2010 - VSR_VOLKSWAGEN_GAOERFU_3 = 80, //-߶GTI-2013,2012,2011,2010 - VSR_VOLKSWAGEN_LANGYI_3 = 81, //--2014 - VSR_VOLKSWAGEN_HUITENG_1 = 82 //--2004 + VSB_VOLKSWAGEN_OTHER = 0, // 其他(保留) + VSB_VOLKSWAGEN_LAVIDA = 1, // 朗逸 + VSB_VOLKSWAGEN_CROSSLAVIDA = 2, // 朗境 + VSB_VOLKSWAGEN_TIGUAN = 3, // 途观 + VSB_VOLKSWAGEN_TOURAN = 4, // 途安 + VSB_VOLKSWAGEN_SANTANA = 5, // 桑塔纳 + VSB_VOLKSWAGEN_SANTANA2000 = 6, // 桑塔纳2000 + VSB_VOLKSWAGEN_SANTANA3000 = 7, // 桑塔纳3000 + VSB_VOLKSWAGEN_VISTA = 8, // 桑塔纳-志俊 + VSB_VOLKSWAGEN_PASSAT = 9, // 帕萨特 + VSB_VOLKSWAGEN_PASSATLINGYU = 10, // 帕萨特-领驭 + VSB_VOLKSWAGEN_POLO = 11, // 波罗 + VSB_VOLKSWAGEN_POLOCROSS = 12, // 波罗-运动版 + VSB_VOLKSWAGEN_POLOGTI = 13, // 波罗-GTI + VSB_VOLKSWAGEN_SAGITAR = 14, // 速腾 + VSB_VOLKSWAGEN_MAGOTAN = 15, // 迈腾 + VSB_VOLKSWAGEN_JETTA = 16, // 捷达 + VSB_VOLKSWAGEN_BORA = 17, // 宝来 + VSB_VOLKSWAGEN_NEWGOLF = 18, // 新高尔夫 + VSB_VOLKSWAGEN_GOLFGTI = 19, // 高尔夫-GTI + VSB_VOLKSWAGEN_GOL = 20, // 高尔 + VSB_VOLKSWAGEN_CADDY = 21, // 开迪 + VSB_VOLKSWAGEN_PHAETON = 22, // 辉腾 + VSB_VOLKSWAGEN_TOUREG = 23, // 途锐 + VSB_VOLKSWAGEN_SCIROCCO = 24, // 尚酷 + VSB_VOLKSWAGEN_BEETLE = 25, // 甲壳虫 + VSB_VOLKSWAGEN_SHARAN = 26, // 夏朗 + VSB_VOLKSWAGEN_MULTIVAN = 27, // 迈特威 + VSB_VOLKSWAGEN_CARBONCOPY = 28, // 一汽大众-CC + VSB_VOLKSWAGEN_VISTACHANGDA = 29, // 桑塔纳志俊-畅达 + VSB_VOLKSWAGEN_BORASPORTLINE = 30, // 宝来-SPORTLINE + VSR_VOLKSWAGEN_CC_1 =31, //大众-CC-2012,2011,2010 + VSR_VOLKSWAGEN_Cross_POLO_1 = 32, //大众-Cross-POLO-2010,2007 + VSR_VOLKSWAGEN_Cross_POLO_2 = 33, //大众-Cross-POLO-2014,2012 + VSR_VOLKSWAGEN_MULTIVAN_1 = 34, //大众-Multivan-2014,2012,2011 + VSR_VOLKSWAGEN_POLO_1 = 35, //大众-POLO-2006,2005,2004,2003,2002 + VSR_VOLKSWAGEN_POLO_2 = 36, //大众-POLO-2013,2012,2011 + VSR_VOLKSWAGEN_POLO_JINQU_1 = 37, //大众-POLO劲取-2009,2008,2007,2006 + VSR_VOLKSWAGEN_POLO_JINQU_2 = 38, //大众-POLO劲取-2011 + VSR_VOLKSWAGEN_Tiguan_1 = 39, //大众-Tiguan-2011,2009 + VSR_VOLKSWAGEN_Tiguan_2 = 40, //大众-Tiguan-2014,2013,2012 + VSR_VOLKSWAGEN_XIALANG_1 = 41, //大众-夏朗-2013,2012 + VSR_VOLKSWAGEN_BAOLAI_1 = 42, //大众-宝来-2005,2004 + VSR_VOLKSWAGEN_BAOLAI_2 = 43, //大众-宝来-2006 + VSR_VOLKSWAGEN_BAOLAI_3 = 44, //大众-宝来-2012,2011,2010,2009,2008 + VSR_VOLKSWAGEN_BAOLAI_4 = 45, //大众-宝来-2014,2013 + VSR_VOLKSWAGEN_SHANGKU_1 = 46, //大众-尚酷-2014,2013 + VSR_VOLKSWAGEN_PASATE_1 = 47, //大众-帕萨特-2003进口,2001领驭 + VSR_VOLKSWAGEN_PASATE_2 = 48, //大众-帕萨特-2007,2006,2005领驭 + VSR_VOLKSWAGEN_PASATE_3 = 49, //大众-帕萨特-2009,2008,2007,2005,2004,2003,2001,2000 + VSR_VOLKSWAGEN_PASATE_4 = 50, //大众-帕萨特-2011,2009领驭 + VSR_VOLKSWAGEN_PASATE_5 = 51, //大众-帕萨特-2014,2013,2012,2011 + VSR_VOLKSWAGEN_JIEDA_1 = 52, //大众-捷达-2005CIF伙伴,2002 + VSR_VOLKSWAGEN_JIEDA_2 = 53, //大众-捷达-2009,2008,2006,2005,2004 + VSR_VOLKSWAGEN_JIEDA_3 = 54, //大众-捷达-2012,2010 + VSR_VOLKSWAGEN_JIEDA_4 = 55, //大众-捷达-2013 + VSR_VOLKSWAGEN_LANGYI_1 = 56, //大众-朗逸-2012,2011,2010,2009,2008 + VSR_VOLKSWAGEN_LANGYI_2 = 57, //大众-朗逸-2013 + VSR_VOLKSWAGEN_SANGTANA_1 = 58, //大众-桑塔纳-2007,2002,2000,1999,1995 + VSR_VOLKSWAGEN_SANGTANA_2 = 59, //大众-桑塔纳-2014,2013 + VSR_VOLKSWAGEN_SANGTANA_3 = 60, //大众-桑塔纳2000-2003,2001,2000,1999,1998,1996 + VSR_VOLKSWAGEN_SANGTANA_4 = 61, //大众-桑塔纳3000-2007,2006,2005,2004,2003 + VSR_VOLKSWAGEN_SANGTANAZHIJUN_1 = 62, //大众-桑塔纳志俊(vista)-2011,2010,2009,2008 + VSR_VOLKSWAGEN_SANGTANAZHIJUN_2 = 63, //大众-桑塔纳志俊(vista)-2006 + VSR_VOLKSWAGEN_JIAKECHONG_1 = 64, //大众-甲壳虫-2010,2009,2008,2007,2006,2005 + VSR_VOLKSWAGEN_JIAKECHONG_2 = 65, //大众-甲壳虫-2014,2013 + VSR_VOLKSWAGEN_HUITENG_2 = 66, //大众-辉腾-2010,2009,2007,2006 + VSR_VOLKSWAGEN_MAITENG_1 = 67, //大众-迈腾-2011,2010,2009,2008,2007 + VSR_VOLKSWAGEN_MAITENG_2 = 68, //大众-迈腾-2013,2012 + VSR_VOLKSWAGEN_TUAN_3 = 69, //大众-途安-2006,2005,2004 + VSR_VOLKSWAGEN_TUAN_1 = 70, //大众-途安-2010,2009,2008 + VSR_VOLKSWAGEN_TUAN_2 = 71, //大众-途安-2013,2012,2011 + VSR_VOLKSWAGEN_TUGUAN_1 = 72, //大众-途观-2012,2011,2010 + VSR_VOLKSWAGEN_TURUI_1 = 73, //大众-途锐-2006,2005,2003 + VSR_VOLKSWAGEN_TURUI_2 = 74, //大众-途锐-2014,2013,2012,2011 + VSR_VOLKSWAGEN_SUTENG_1 = 75, //大众-速腾-2010,2009,2007,2006 + VSR_VOLKSWAGEN_SUTENG_2 = 76, //大众-速腾-2011 + VSR_VOLKSWAGEN_SUTENG_3 = 77, //大众-速腾-2014,2013,2012 + VSR_VOLKSWAGEN_GAOERFU_1 = 78, //大众-高尔夫-2008,2007,2006,2005,2004,2003 + VSR_VOLKSWAGEN_GAOERFU_2 = 79, //大众-高尔夫-2012,2011进口,2012,2011,2010 + VSR_VOLKSWAGEN_GAOERFU_3 = 80, //大众-高尔夫GTI-2013,2012,2011,2010 + VSR_VOLKSWAGEN_LANGYI_3 = 81, //大众-朗逸-2014 + VSR_VOLKSWAGEN_HUITENG_1 = 82 //大众-辉腾-2004 } VSB_VOLKSWAGEN_CLASS; -//Ʒ +//别克子品牌类型 typedef enum _VBR_BUICK_CLASS { - VBR_BUICK_OTHER = 0, // - VBR_BUICK_ENCORE = 1, // + VBR_BUICK_OTHER = 0, // 其他(保留) + VBR_BUICK_ENCORE = 1, // 昂科拉 VBR_BUICK_GL8 = 2, // GL8 - VBR_BUICK_LEGAL = 3, // - VBR_BUICK_LACROSS = 4, // Խ - VBR_BUICK_EXCELLE = 5, // Խ - VBR_BUICK_EXCELLEGT = 6, // ӢGT - VBR_BUICK_WXCELLEXT = 7, // ӢXT - VBR_BUICK_ENCLAVE = 8, // - VBR_BUICK_ROYAUM = 9, // - VBR_BUICK_SAIL = 10, // ŷ - VBR_BUICK_EXCELLEHRV = 11, // ԽHRV - VBR_BUICK_PARKAVENUE = 12, // - VBR_BUICK_CENTURY = 13, // - VBR_BUICK_GL8_1 = 14, // -GL8-2004,2003 - VBR_BUICK_GL8_2 = 15, // -GL8-2007,2006,2005 - VBR_BUICK_GL8_3 = 16, // -GL8-2010_2008_2006_2005½ - VBR_BUICK_GL8_4 = 17, // -GL8-2014,2013,2012,2011 - VBR_BUICK_GL8_5 = 18, // -GL8-2014_2013_2011 - VBR_BUICK_ENCORE_1 = 19, // --2014,2013 - VBR_BUICK_ENCLAVE_1 = 20, // --2013,2010,2009 - VBR_BUICK_LEGAL_1 = 21, // --2001,2000,1999 - VBR_BUICK_LEGAL_2 = 22, // --2008,2006,2005,2004,2002 - VBR_BUICK_LEGAL_3 = 23, // --2013,2012,2011,2010,2009 - VBR_BUICK_LEGAL_4 = 24, // --2013_2012_2011˶ - VBR_BUICK_LEGAL_5 = 25, // --2014 - VBR_BUICK_LEGAL_6 = 26, // --2014˶ - VBR_BUICK_LACROSS_1 = 27, // -Խ-2008,2007,2006 - VBR_BUICK_LACROSS_2 = 28, // -Խ-2012,2011,2010,2009 - VBR_BUICK_LACROSS_3 = 29, // -Խ-2013 - VBR_BUICK_EXCELLE_1 = 30, // -Խ-2006,2005,2004 - VBR_BUICK_EXCELLE_2 = 31, // -Խ-2008_2006_2005_2004HRV - VBR_BUICK_EXCELLE_3 = 32, // -Խ-2011,2009,2008 - VBR_BUICK_EXCELLE_4 = 33, // -Խ-2013 - VBR_BUICK_PARKAVENUE_1 = 34, // --2011,2010,2009,2008,2007 - VBR_BUICK_SAIL_1 = 35, // -ŷ-2004,2003 - VBR_BUICK_EXCELLEGT_1 = 36, // -ӢGT-2013,2012,2011,2010 - VBR_BUICK_WXCELLEXT_1 = 37, // -ӢXT-2014,2013,2012,2010 - VBR_BUICK_CENTURY_1 = 38, // --2000 - VBR_BUICK_RONGYU_1 = 39 // --2005,2004 + VBR_BUICK_LEGAL = 3, // 君威 + VBR_BUICK_LACROSS = 4, // 君越 + VBR_BUICK_EXCELLE = 5, // 凯越 + VBR_BUICK_EXCELLEGT = 6, // 英朗GT + VBR_BUICK_WXCELLEXT = 7, // 英朗XT + VBR_BUICK_ENCLAVE = 8, // 昂科雷 + VBR_BUICK_ROYAUM = 9, // 荣御 + VBR_BUICK_SAIL = 10, // 别克赛欧 + VBR_BUICK_EXCELLEHRV = 11, // 凯越HRV + VBR_BUICK_PARKAVENUE = 12, // 林荫大道 + VBR_BUICK_CENTURY = 13, // 新世纪 + VBR_BUICK_GL8_1 = 14, // 别克-GL8-2004,2003 + VBR_BUICK_GL8_2 = 15, // 别克-GL8-2007,2006,2005 + VBR_BUICK_GL8_3 = 16, // 别克-GL8-2010_2008_2006_2005陆尊 + VBR_BUICK_GL8_4 = 17, // 别克-GL8-2014,2013,2012,2011 + VBR_BUICK_GL8_5 = 18, // 别克-GL8-2014_2013_2011豪华版 + VBR_BUICK_ENCORE_1 = 19, // 别克-昂科拉-2014,2013 + VBR_BUICK_ENCLAVE_1 = 20, // 别克-昂科雷-2013,2010,2009 + VBR_BUICK_LEGAL_1 = 21, // 别克-君威-2001,2000,1999 + VBR_BUICK_LEGAL_2 = 22, // 别克-君威-2008,2006,2005,2004,2002 + VBR_BUICK_LEGAL_3 = 23, // 别克-君威-2013,2012,2011,2010,2009 + VBR_BUICK_LEGAL_4 = 24, // 别克-君威-2013_2012_2011运动版 + VBR_BUICK_LEGAL_5 = 25, // 别克-君威-2014 + VBR_BUICK_LEGAL_6 = 26, // 别克-君威-2014运动版 + VBR_BUICK_LACROSS_1 = 27, // 别克-君越-2008,2007,2006 + VBR_BUICK_LACROSS_2 = 28, // 别克-君越-2012,2011,2010,2009 + VBR_BUICK_LACROSS_3 = 29, // 别克-君越-2013 + VBR_BUICK_EXCELLE_1 = 30, // 别克-凯越-2006,2005,2004 + VBR_BUICK_EXCELLE_2 = 31, // 别克-凯越-2008_2006_2005_2004HRV + VBR_BUICK_EXCELLE_3 = 32, // 别克-凯越-2011,2009,2008 + VBR_BUICK_EXCELLE_4 = 33, // 别克-凯越-2013 + VBR_BUICK_PARKAVENUE_1 = 34, // 别克-林荫大道-2011,2010,2009,2008,2007 + VBR_BUICK_SAIL_1 = 35, // 别克-赛欧-2004,2003 + VBR_BUICK_EXCELLEGT_1 = 36, // 别克-英朗GT-2013,2012,2011,2010 + VBR_BUICK_WXCELLEXT_1 = 37, // 别克-英朗XT-2014,2013,2012,2010 + VBR_BUICK_CENTURY_1 = 38, // 别克-新世纪-2000 + VBR_BUICK_RONGYU_1 = 39 // 别克-荣御-2005,2004 }VBR_BUICK_CLASS; -//Ʒ +//宝马子品牌类型 typedef enum _VSB_BMW_CLASS { - VSB_BMW_OTHER = 0, // - VSB_BMW_3SERIES = 1, // 3ϵ - VSB_BMW_5SERIES = 2, // 5ϵ - VSB_BMW_X1 = 3, // X1 - VSB_BMW_1SERIES = 4, // 1ϵ - VSB_BMW_7SERIES = 5, // 7ϵ - VSB_BMW_X3 = 6, // X3 - VSB_BMW_X5 = 7, // X5 - VSB_BMW_X6 = 8, // X6 - VSB_BMW_Z4 = 9, // Z4 - VSB_BMW_MINI = 10, // - VSB_BMW_6SERIES = 11, //6ϵ - VSB_BMW_YIXI_1 = 12, // -1ϵ-2011,2010,2008,2007 - VSB_BMW_YIXI_2 = 13, // -1ϵ-2013,2012 - VSB_BMW_SANXI_1 = 14, // -3ϵ-2004 - VSB_BMW_SANXI_2 = 15, // -3ϵ-2007,2005 - VSB_BMW_SANXI_3 = 16, // -3ϵ-2012,2011,2010,2009 - VSB_BMW_SANXI_4 = 17, // -3ϵ-2014,2013 - VSB_BMW_WUXI_1 = 18, // -5ϵ-2010,2009,2008 - VSB_BMW_WUXI_2 = 19, // -5ϵ-2013,2012,2011 - VSB_BMW_LIUXI_1 = 20, // -6ϵ-δ֪ - VSB_BMW_QIXI_1 = 21, // -7ϵ-2011,2010,2009 - VSB_BMW_QIXI_2 = 22, // -7ϵ-2013 - VSB_BMW_X1_1 = 23, // -X1-2012,2010 - VSB_BMW_X1_2 = 24, // -X1-2014,2013 - VSB_BMW_X3_1 = 25, // -X3-2009,2008,2006 - VSB_BMW_X3_2 = 26, // -X3-2013,2012,2011 - VSB_BMW_X5_1 = 27, // -X5-2010,2009,2008 - VSB_BMW_X5_2 = 28, // -X5-2013,2012,2011 - VSB_BMW_X5_3 = 29, // -X5-2013˶ - VSB_BMW_X6_1 = 30, // -X6-2013,2012,2011,2009,2008 - VSB_BMW_Z4_1 = 31 // -Z4-2004 + VSB_BMW_OTHER = 0, // 其他(保留) + VSB_BMW_3SERIES = 1, // 宝马3系 + VSB_BMW_5SERIES = 2, // 宝马5系 + VSB_BMW_X1 = 3, // 宝马X1 + VSB_BMW_1SERIES = 4, // 宝马1系 + VSB_BMW_7SERIES = 5, // 宝马7系 + VSB_BMW_X3 = 6, // 宝马X3 + VSB_BMW_X5 = 7, // 宝马X5 + VSB_BMW_X6 = 8, // 宝马X6 + VSB_BMW_Z4 = 9, // 宝马Z4 + VSB_BMW_MINI = 10, // 迷你 + VSB_BMW_6SERIES = 11, //宝马6系 + VSB_BMW_YIXI_1 = 12, // 宝马-1系-2011,2010,2008,2007 + VSB_BMW_YIXI_2 = 13, // 宝马-1系-2013,2012 + VSB_BMW_SANXI_1 = 14, // 宝马-3系-2004 + VSB_BMW_SANXI_2 = 15, // 宝马-3系-2007,2005 + VSB_BMW_SANXI_3 = 16, // 宝马-3系-2012,2011,2010,2009 + VSB_BMW_SANXI_4 = 17, // 宝马-3系-2014,2013 + VSB_BMW_WUXI_1 = 18, // 宝马-5系-2010,2009,2008 + VSB_BMW_WUXI_2 = 19, // 宝马-5系-2013,2012,2011 + VSB_BMW_LIUXI_1 = 20, // 宝马-6系-未知 + VSB_BMW_QIXI_1 = 21, // 宝马-7系-2011,2010,2009 + VSB_BMW_QIXI_2 = 22, // 宝马-7系-2013 + VSB_BMW_X1_1 = 23, // 宝马-X1-2012,2010 + VSB_BMW_X1_2 = 24, // 宝马-X1-2014,2013 + VSB_BMW_X3_1 = 25, // 宝马-X3-2009,2008,2006 + VSB_BMW_X3_2 = 26, // 宝马-X3-2013,2012,2011 + VSB_BMW_X5_1 = 27, // 宝马-X5-2010,2009,2008 + VSB_BMW_X5_2 = 28, // 宝马-X5-2013,2012,2011 + VSB_BMW_X5_3 = 29, // 宝马-X5-2013运动型 + VSB_BMW_X6_1 = 30, // 宝马-X6-2013,2012,2011,2009,2008 + VSB_BMW_Z4_1 = 31 // 宝马-Z4-2004 }VSB_BMW_CLASS; -//Ʒ +//本田子品牌类型 typedef enum _VSB_HONDA_CLASS { - VSB_HONDA_OTHER = 0, // - VSB_HONDA_CRV = 1, // CR-V(˼) - VSB_HONDA_JADE = 2, // ܵ - VSB_HONDA_CIVIC = 3, // ˼ - VSB_HONDA_SPIRIOR = 4, // ˼ - VSB_HONDA_CIIMO = 5, // ˼ - VSB_HONDA_ELYSION = 6, // - VSB_HONDA_OBYSSEY = 7, // - VSB_HONDA_FIT = 8, // ɶ - VSB_HONDA_NEWCITY = 9, // 淶 - VSB_HONDA_CROSSTOUR = 10, // ʫͼ - VSB_HONDA_CRIDER = 11, // - VSB_HONDA_ACCORD = 12, // Ÿ - VSB_HONDA_CITY = 13, // ˼ - VSB_HONDA_ANTILOCK = 14, // µ - VSB_HONDA_CRZ = 15, // CR-Z - VSB_HONDA_CRV_1 = 16, // -CR-V-2004 - VSB_HONDA_CRV_2 = 17, // -CR-V-2005 - VSB_HONDA_CRV_3 = 18, // -CR-V-2008,2007 - VSB_HONDA_CRV_4 = 19, // -CR-V-2010 - VSB_HONDA_CRV_5 = 20, // -CR-V-2013,2012 - VSB_HONDA_CRIDER_1 = 21, // --2014,2013 - VSB_HONDA_OBYSSEY_1 = 22, // -µ-2002 - VSB_HONDA_OBYSSEY_2 = 23, // -µ-2006,2005,2004 - VSB_HONDA_OBYSSEY_3 = 24, // -µ-2008,2007 - VSB_HONDA_OBYSSEY_4 = 25, // -µ-2011 - VSB_HONDA_CIVIC_1 = 26, // -˼-2007 - VSB_HONDA_CIVIC_5 = 27, // -˼-1996 - VSB_HONDA_CIVIC_2 = 28, // -˼-2008,2006 - VSB_HONDA_CIVIC_3 = 29, // -˼-2009 - VSB_HONDA_CIVIC_4 = 30, // -˼-2013,2012,2011 - VSB_HONDA_CITY_1 = 31, // -˼-2008,2007,2006 - VSB_HONDA_SPIRIOR_1 = 32, // -˼-2009 - VSB_HONDA_SIMING_1 = 33, // -˼-2012 - VSB_HONDA_JIEDE_1 = 34, // -ܵ-2013 - VSB_HONDA_CROSSTOUR_1 = 35, // -ʫͼ-2013,2012,2010 - VSB_HONDA_AILISHEN_1 = 36, // --2012 - VSB_HONDA_NEWCITY_1 = 37, // -淶-2009 - VSB_HONDA_NEWCITY_2 = 38, // -淶-2011 - VSB_HONDA_NEWCITY_3 = 39, // -淶-2014,2012 - VSB_HONDA_ACCORD_1 = 40, // -Ÿ-1996 - VSB_HONDA_ACCORD_2 = 41, // -Ÿ-1999 - VSB_HONDA_ACCORD_3 = 42, // -Ÿ-2001 - VSB_HONDA_ACCORD_4 = 43, // -Ÿ-2003 - VSB_HONDA_ACCORD_5 = 44, // -Ÿ-2008 - VSB_HONDA_ACCORD_6 = 45, // -Ÿ-2010 - VSB_HONDA_ACCORD_7 = 46, // -Ÿ-2011 - VSB_HONDA_ACCORD_8 = 47, // -Ÿ-2012 - VSB_HONDA_ACCORD_9 = 48, // -Ÿ-2013 - VSB_HONDA_ACCORD_10 = 49, // -Ÿ-2014 - VSB_HONDA_FIT_1 = 50, // -ɶ-2004 - VSB_HONDA_FIT_2 = 51, // -ɶ-2004 - VSB_HONDA_FIT_3 = 52, // -ɶ-2005 - VSB_HONDA_FIT_4 = 53, // -ɶ-2007 - VSB_HONDA_FIT_5 = 54, // -ɶ-2008 - VSB_HONDA_FIT_6 = 55 // -ɶ-2013,2011 + VSB_HONDA_OTHER = 0, // 其他(保留) + VSB_HONDA_CRV = 1, // 本田CR-V(思威) + VSB_HONDA_JADE = 2, // 杰德 + VSB_HONDA_CIVIC = 3, // 思域 + VSB_HONDA_SPIRIOR = 4, // 思铂睿 + VSB_HONDA_CIIMO = 5, // 思铭 + VSB_HONDA_ELYSION = 6, // 艾力绅 + VSB_HONDA_OBYSSEY = 7, // 奥赛德 + VSB_HONDA_FIT = 8, // 飞度 + VSB_HONDA_NEWCITY = 9, // 锋范 + VSB_HONDA_CROSSTOUR = 10, // 歌诗图 + VSB_HONDA_CRIDER = 11, // 凌派 + VSB_HONDA_ACCORD = 12, // 雅阁 + VSB_HONDA_CITY = 13, // 思迪 + VSB_HONDA_ANTILOCK = 14, // 阿柯德 + VSB_HONDA_CRZ = 15, // 本田CR-Z + VSB_HONDA_CRV_1 = 16, // 本田-CR-V-2004 + VSB_HONDA_CRV_2 = 17, // 本田-CR-V-2005 + VSB_HONDA_CRV_3 = 18, // 本田-CR-V-2008,2007 + VSB_HONDA_CRV_4 = 19, // 本田-CR-V-2010 + VSB_HONDA_CRV_5 = 20, // 本田-CR-V-2013,2012 + VSB_HONDA_CRIDER_1 = 21, // 本田-凌派-2014,2013 + VSB_HONDA_OBYSSEY_1 = 22, // 本田-奥德赛-2002 + VSB_HONDA_OBYSSEY_2 = 23, // 本田-奥德赛-2006,2005,2004 + VSB_HONDA_OBYSSEY_3 = 24, // 本田-奥德赛-2008,2007 + VSB_HONDA_OBYSSEY_4 = 25, // 本田-奥德赛-2011豪华版 + VSB_HONDA_CIVIC_1 = 26, // 本田-思域-2007 + VSB_HONDA_CIVIC_5 = 27, // 本田-思域-1996 + VSB_HONDA_CIVIC_2 = 28, // 本田-思域-2008,2006 + VSB_HONDA_CIVIC_3 = 29, // 本田-思域-2009 + VSB_HONDA_CIVIC_4 = 30, // 本田-思域-2013,2012,2011 + VSB_HONDA_CITY_1 = 31, // 本田-思迪-2008,2007,2006 + VSB_HONDA_SPIRIOR_1 = 32, // 本田-思铂睿-2009 + VSB_HONDA_SIMING_1 = 33, // 本田-思铭-2012 + VSB_HONDA_JIEDE_1 = 34, // 本田-杰德-2013 + VSB_HONDA_CROSSTOUR_1 = 35, // 本田-歌诗图-2013,2012,2010 + VSB_HONDA_AILISHEN_1 = 36, // 本田-艾力绅-2012 + VSB_HONDA_NEWCITY_1 = 37, // 本田-锋范-2009 + VSB_HONDA_NEWCITY_2 = 38, // 本田-锋范-2011 + VSB_HONDA_NEWCITY_3 = 39, // 本田-锋范-2014,2012 + VSB_HONDA_ACCORD_1 = 40, // 本田-雅阁-1996 + VSB_HONDA_ACCORD_2 = 41, // 本田-雅阁-1999 + VSB_HONDA_ACCORD_3 = 42, // 本田-雅阁-2001 + VSB_HONDA_ACCORD_4 = 43, // 本田-雅阁-2003 + VSB_HONDA_ACCORD_5 = 44, // 本田-雅阁-2008 + VSB_HONDA_ACCORD_6 = 45, // 本田-雅阁-2010 + VSB_HONDA_ACCORD_7 = 46, // 本田-雅阁-2011 + VSB_HONDA_ACCORD_8 = 47, // 本田-雅阁-2012 + VSB_HONDA_ACCORD_9 = 48, // 本田-雅阁-2013 + VSB_HONDA_ACCORD_10 = 49, // 本田-雅阁-2014 + VSB_HONDA_FIT_1 = 50, // 本田-飞度-2004 + VSB_HONDA_FIT_2 = 51, // 本田-飞度-2004三厢 + VSB_HONDA_FIT_3 = 52, // 本田-飞度-2005 + VSB_HONDA_FIT_4 = 53, // 本田-飞度-2007 + VSB_HONDA_FIT_5 = 54, // 本田-飞度-2008 + VSB_HONDA_FIT_6 = 55 // 本田-飞度-2013,2011 }VSB_HONDA_CLASS; -//Ʒ +//标致子品牌类型 typedef enum _VSB_PEUGEOT_CLASS { - VSB_PEUGEOT_OTHER = 0, // - VSB_PEUGEOT_2008 = 1, // 2008 - VSB_PEUGEOT_207 = 2, // 207 - VSB_PEUGEOT_SENNA = 3, // - VSB_PEUGEOT_3008 = 4, // 3008 - VSB_PEUGEOT_301 = 5, // 301 - VSB_PEUGEOT_307 = 6, // 307 - VSB_PEUGEOT_308 = 7, // 308 - VSB_PEUGEOT_408 = 8, // 408 - VSB_PEUGEOT_508 = 9, // 508 - VSB_PEUGEOT_206 = 10, // 206 - VSB_PEUGEOT_407 = 11, // 407 - VSB_PEUGEOT_206_1 = 12, // -206-δ֪ - VSB_PEUGEOT_207_1 = 13, // -207-2011,2010,2009 - VSB_PEUGEOT_207_2 = 14, // -207-2013 - VSB_PEUGEOT_3008_1 = 15, // -3008-2014,2013 - VSB_PEUGEOT_301_1 = 16, // -301-δ֪ - VSB_PEUGEOT_307_1 = 17, // -307-2007,2006,2005,2004 - VSB_PEUGEOT_307_2 = 18, // -307-2010,2009,2008 - VSB_PEUGEOT_307_3 = 19, // -307-2013_2012_2011CROSS - VSB_PEUGEOT_308_1 = 20, // -308-2014,2013,2012 - VSB_PEUGEOT_407_1 = 21, // -407-δ֪ - VSB_PEUGEOT_408_1 = 22, // -408-2012,2011,2010 - VSB_PEUGEOT_408_2 = 23, // -408-2013 - VSB_PEUGEOT_508_1 = 24, // -508-2014,2013,2012,2011 - VSB_PEUGEOT_207_3 = 25, // -207-2011,2010,2009 - VSB_PEUGEOT_307_4 = 26 // -307-2013,2012,2010,2009,2008 + VSB_PEUGEOT_OTHER = 0, // 其他(保留) + VSB_PEUGEOT_2008 = 1, // 标致2008 + VSB_PEUGEOT_207 = 2, // 标致207 + VSB_PEUGEOT_SENNA = 3, // 赛纳 + VSB_PEUGEOT_3008 = 4, // 标致3008 + VSB_PEUGEOT_301 = 5, // 标致301 + VSB_PEUGEOT_307 = 6, // 标致307 + VSB_PEUGEOT_308 = 7, // 标致308 + VSB_PEUGEOT_408 = 8, // 标致408 + VSB_PEUGEOT_508 = 9, // 标致508 + VSB_PEUGEOT_206 = 10, // 标致206 + VSB_PEUGEOT_407 = 11, // 标致407 + VSB_PEUGEOT_206_1 = 12, // 标致-206-未知 + VSB_PEUGEOT_207_1 = 13, // 标致-207两厢-2011,2010,2009 + VSB_PEUGEOT_207_2 = 14, // 标致-207两厢-2013 + VSB_PEUGEOT_3008_1 = 15, // 标致-3008-2014,2013 + VSB_PEUGEOT_301_1 = 16, // 标致-301-未知 + VSB_PEUGEOT_307_1 = 17, // 标致-307三厢-2007,2006,2005,2004 + VSB_PEUGEOT_307_2 = 18, // 标致-307三厢-2010,2009,2008 + VSB_PEUGEOT_307_3 = 19, // 标致-307两厢-2013_2012_2011CROSS + VSB_PEUGEOT_308_1 = 20, // 标致-308-2014,2013,2012 + VSB_PEUGEOT_407_1 = 21, // 标致-407-未知 + VSB_PEUGEOT_408_1 = 22, // 标致-408-2012,2011,2010 + VSB_PEUGEOT_408_2 = 23, // 标致-408-2013 + VSB_PEUGEOT_508_1 = 24, // 标致-508-2014,2013,2012,2011 + VSB_PEUGEOT_207_3 = 25, // 标致-207三厢-2011,2010,2009 + VSB_PEUGEOT_307_4 = 26 // 标致-307两厢-2013,2012,2010,2009,2008 }VSB_PEUGEOT_CLASS; -//Ʒ +//丰田子品牌类型 typedef enum _VSB_TOYOTA_CLASS { - VSB_TOYOTA_OTHER = 0, // - VSB_TOYOTA_HIGHLANDER = 1, // - VSB_TOYOTA_CAMRY = 2, // - VSB_TOYOTA_YARIS = 3, // ʿ - VSB_TOYOTA_YARISL = 4, // YARIS L - VSB_TOYOTA_VERSO = 5, // - VSB_TOYOTA_HUAGUAN = 6, // - VSB_TOYOTA_CROWN = 7, // ʹ - VSB_TOYOTA_COROLLA = 8, // - VSB_TOYOTA_COSTER = 9, // ˹ - VSB_TOYOTA_PRADO = 10, // - VSB_TOYOTA_PRIUS = 11, // ˹ - VSB_TOYOTA_RAV4 = 12, // RAV4 - VSB_TOYOTA_REZI = 13, // ־ - VSB_TOYOTA_VIOS = 14, // - VSB_TOYOTA_PREVIA = 15, // ά - VSB_TOYOTA_HIACE = 16, // ʨ - VSB_TOYOTA_86 = 17, // 86 - VSB_TOYOTA_SPEQUOIA = 18, // ɼ - VSB_TOYOTA_LANDCRUISER = 19, // ½Ѳ(¿·) - VSB_TOYOTA_SIENNA = 20, // - VSB_TOYOTA_CAMRYHYBRID = 21, // -HYBRID - VSB_TOYOTA_GRACE = 22, // ˹ - VSB_TOYOTA_ALPHARD = 23, // - VSB_TOYOTA_RAV4_1 = 24, // -RAV4-2012ֶ,2011,2010,2009 - VSB_TOYOTA_RAV4_2 = 25, // -RAV4-2013 - VSB_TOYOTA_86_1 = 26, // -86-δ֪ - VSB_TOYOTA_JIAMEI_2 = 27, // --2001,2000,1999,1998 - VSB_TOYOTA_JIAMEI_3 = 28, // --2004,2003,2002 - VSB_TOYOTA_LANDEKLZ_1 = 29, // -¿·-2011ж,2010,2007 - VSB_TOYOTA_KAIMEIRUI_1 = 30, // --2008,2007,2006 - VSB_TOYOTA_KAIMEIRUI_2 = 31, // --2012 - VSB_TOYOTA_KAIMEIRUI_3 = 32, // --2012,2011,2010,2009 - VSB_TOYOTA_KAIMEIRUI_4 = 33, // --2013,2012 - VSB_TOYOTA_KAIMEIRUI_5 = 34, // --2013 - VSB_TOYOTA_KAIMEIRUI_6 = 35, // --2014,2012 - VSB_TOYOTA_KALUOLA_1 = 36, // --2010,2009,2008,2007,2006 - VSB_TOYOTA_KALUOLA_2 = 37, // --2013,2012,2011 - VSB_TOYOTA_AIERFA_1 = 38, // --2011,2010 - VSB_TOYOTA_AIERFA_2 = 39, // --2013,2012 - VSB_TOYOTA_WEICHI_1 = 40, // --2004,2003 - VSB_TOYOTA_WEICHI_2 = 41, // --2007,2006,2005 - VSB_TOYOTA_WEICHI_3 = 42, // --2009,2008 - VSB_TOYOTA_WEICHI_4 = 43, // --2013,2012,2011,2010 - VSB_TOYOTA_WEICHI_5 = 44, // --2014 - VSB_TOYOTA_PULADUO_1 = 45, // --2007,2006,2005,2004 - VSB_TOYOTA_PULADUO_2 = 46, // --2010 - VSB_TOYOTA_PULADUO_3 = 47, // --2014 - VSB_TOYOTA_PURUIWEIYA_1 = 48, // -ά-2004 - VSB_TOYOTA_PURUIWEIYA_4 = 49, // -ά-2005 - VSB_TOYOTA_PURUIWEIYA_2 = 50, // -ά-2006 - VSB_TOYOTA_PURUIWEIYA_3 = 51, // -ά-2012,2010,2008,2007 - VSB_TOYOTA_KESIDA_1 = 52, // -˹-2007 - VSB_TOYOTA_KESIDA_2 = 53, // -˹-2011 - VSB_TOYOTA_HANLANDA_1 = 54, // --2011,2009 - VSB_TOYOTA_HANLANDA_2 = 55, // --2012 - VSB_TOYOTA_HANLANDA_3 = 56, // --2013 - VSB_TOYOTA_HAISHI_1 = 57, // -ʨ-2001 - VSB_TOYOTA_HUANGGUAN_1 = 58, // -ʹ-1999 - VSB_TOYOTA_HUANGGUAN_2 = 59, // -ʹ-2009,2008,2007,2006,2005 - VSB_TOYOTA_HUANGGUAN_3 = 60, // -ʹ-2010 - VSB_TOYOTA_HUANGGUAN_4 = 61, // -ʹ-2012,2011 - VSB_TOYOTA_HONGSHAN_1 = 62, // -ɼ-δ֪ - VSB_TOYOTA_HUAGUAN_1 = 63, // --2006,2005,2004 - VSB_TOYOTA_HUAGUAN_2 = 64, // --2009,2008,2007 - VSB_TOYOTA_HUAGUAN_3 = 65, // --2011,2010 - VSB_TOYOTA_YIZHI_1 = 66, // --2014,2012,2011 - VSB_TOYOTA_RUIZHI_1 = 67, // -־-2006,2005 - VSB_TOYOTA_RUIZHI_2 = 68, // -־-2009,2008,2007 - VSB_TOYOTA_RUIZHI_3 = 69, // -־-2010Ȱ - VSB_TOYOTA_RUIZHI_4 = 70, // -־-2012,2010 - VSB_TOYOTA_LUDIXUNYANG_1 = 71, // -½Ѳ-δ֪ - VSB_TOYOTA_YALISHI_1 = 72, // -ʿ-2009,2008,2007 - VSB_TOYOTA_YALISHI_2 = 73, // -ʿ-2012,2011,2010 - VSB_TOYOTA_RAV4_3 = 74, // -RAV4-2013,Ӣ,,2012 - VSB_TOYOTA_YARiSL_1 = 75, // -YARiS-L - VSB_TOYOTA_JIAMEI_1 = 76, // --1996 - VSB_TOYOTA_PLATZ_1 = 77, // -PLATZ-1999 - VSB_TOYOTA_LANDEKLZ_2 = 78 // -¿·-2014,2012ж,2012 + VSB_TOYOTA_OTHER = 0, // 其他(保留) + VSB_TOYOTA_HIGHLANDER = 1, // 汉兰达 + VSB_TOYOTA_CAMRY = 2, // 凯美瑞 + VSB_TOYOTA_YARIS = 3, // 雅力士 + VSB_TOYOTA_YARISL = 4, // YARIS L致炫 + VSB_TOYOTA_VERSO = 5, // 逸致 + VSB_TOYOTA_HUAGUAN = 6, // 花冠 + VSB_TOYOTA_CROWN = 7, // 皇冠 + VSB_TOYOTA_COROLLA = 8, // 卡罗拉 + VSB_TOYOTA_COSTER = 9, // 柯斯达 + VSB_TOYOTA_PRADO = 10, // 普拉多 + VSB_TOYOTA_PRIUS = 11, // 普锐斯 + VSB_TOYOTA_RAV4 = 12, // 丰田RAV4 + VSB_TOYOTA_REZI = 13, // 锐志 + VSB_TOYOTA_VIOS = 14, // 威驰 + VSB_TOYOTA_PREVIA = 15, // 普瑞维亚 + VSB_TOYOTA_HIACE = 16, // 海狮 + VSB_TOYOTA_86 = 17, // 丰田86 + VSB_TOYOTA_SPEQUOIA = 18, // 红杉 + VSB_TOYOTA_LANDCRUISER = 19, // 陆地巡洋舰(兰德酷路泽) + VSB_TOYOTA_SIENNA = 20, // 赛纳 + VSB_TOYOTA_CAMRYHYBRID = 21, // 凯美瑞-HYBRID + VSB_TOYOTA_GRACE = 22, // 阁瑞斯 + VSB_TOYOTA_ALPHARD = 23, // 埃尔法 + VSB_TOYOTA_RAV4_1 = 24, // 丰田-RAV4-2012手动经典版,2011,2010,2009 + VSB_TOYOTA_RAV4_2 = 25, // 丰田-RAV4-2013 + VSB_TOYOTA_86_1 = 26, // 丰田-丰田86-未知 + VSB_TOYOTA_JIAMEI_2 = 27, // 丰田-佳美-2001,2000,1999,1998 + VSB_TOYOTA_JIAMEI_3 = 28, // 丰田-佳美-2004,2003,2002 + VSB_TOYOTA_LANDEKLZ_1 = 29, // 丰田-兰德酷路泽-2011中东版,2010,2007 + VSB_TOYOTA_KAIMEIRUI_1 = 30, // 丰田-凯美瑞-2008,2007,2006 + VSB_TOYOTA_KAIMEIRUI_2 = 31, // 丰田-凯美瑞-2012尊瑞 + VSB_TOYOTA_KAIMEIRUI_3 = 32, // 丰田-凯美瑞-2012经典版,2011,2010,2009 + VSB_TOYOTA_KAIMEIRUI_4 = 33, // 丰田-凯美瑞-2013,2012 + VSB_TOYOTA_KAIMEIRUI_5 = 34, // 丰田-凯美瑞-2013经典版 + VSB_TOYOTA_KAIMEIRUI_6 = 35, // 丰田-凯美瑞-2014,2012骏瑞 + VSB_TOYOTA_KALUOLA_1 = 36, // 丰田-卡罗拉-2010,2009,2008,2007,2006 + VSB_TOYOTA_KALUOLA_2 = 37, // 丰田-卡罗拉-2013,2012,2011 + VSB_TOYOTA_AIERFA_1 = 38, // 丰田-埃尔法-2011,2010 + VSB_TOYOTA_AIERFA_2 = 39, // 丰田-埃尔法-2013,2012 + VSB_TOYOTA_WEICHI_1 = 40, // 丰田-威驰-2004,2003 + VSB_TOYOTA_WEICHI_2 = 41, // 丰田-威驰-2007,2006,2005 + VSB_TOYOTA_WEICHI_3 = 42, // 丰田-威驰-2009,2008 + VSB_TOYOTA_WEICHI_4 = 43, // 丰田-威驰-2013,2012,2011,2010 + VSB_TOYOTA_WEICHI_5 = 44, // 丰田-威驰-2014 + VSB_TOYOTA_PULADUO_1 = 45, // 丰田-普拉多-2007,2006,2005,2004 + VSB_TOYOTA_PULADUO_2 = 46, // 丰田-普拉多-2010 + VSB_TOYOTA_PULADUO_3 = 47, // 丰田-普拉多-2014 + VSB_TOYOTA_PURUIWEIYA_1 = 48, // 丰田-普瑞维亚-2004 + VSB_TOYOTA_PURUIWEIYA_4 = 49, // 丰田-普瑞维亚-2005 + VSB_TOYOTA_PURUIWEIYA_2 = 50, // 丰田-普瑞维亚-2006 + VSB_TOYOTA_PURUIWEIYA_3 = 51, // 丰田-普瑞维亚-2012,2010,2008,2007 + VSB_TOYOTA_KESIDA_1 = 52, // 丰田-柯斯达-2007 + VSB_TOYOTA_KESIDA_2 = 53, // 丰田-柯斯达-2011 + VSB_TOYOTA_HANLANDA_1 = 54, // 丰田-汉兰达-2011,2009 + VSB_TOYOTA_HANLANDA_2 = 55, // 丰田-汉兰达-2012 + VSB_TOYOTA_HANLANDA_3 = 56, // 丰田-汉兰达-2013 + VSB_TOYOTA_HAISHI_1 = 57, // 丰田-海狮-2001 + VSB_TOYOTA_HUANGGUAN_1 = 58, // 丰田-皇冠-1999 + VSB_TOYOTA_HUANGGUAN_2 = 59, // 丰田-皇冠-2009,2008,2007,2006,2005 + VSB_TOYOTA_HUANGGUAN_3 = 60, // 丰田-皇冠-2010 + VSB_TOYOTA_HUANGGUAN_4 = 61, // 丰田-皇冠-2012,2011 + VSB_TOYOTA_HONGSHAN_1 = 62, // 丰田-红杉-未知 + VSB_TOYOTA_HUAGUAN_1 = 63, // 丰田-花冠-2006,2005,2004 + VSB_TOYOTA_HUAGUAN_2 = 64, // 丰田-花冠-2009,2008,2007 + VSB_TOYOTA_HUAGUAN_3 = 65, // 丰田-花冠-2011,2010 + VSB_TOYOTA_YIZHI_1 = 66, // 丰田-逸致-2014,2012,2011 + VSB_TOYOTA_RUIZHI_1 = 67, // 丰田-锐志-2006,2005 + VSB_TOYOTA_RUIZHI_2 = 68, // 丰田-锐志-2009,2008,2007 + VSB_TOYOTA_RUIZHI_3 = 69, // 丰田-锐志-2010风度版 + VSB_TOYOTA_RUIZHI_4 = 70, // 丰田-锐志-2012,2010 + VSB_TOYOTA_LUDIXUNYANG_1 = 71, // 丰田-陆地巡洋舰-未知 + VSB_TOYOTA_YALISHI_1 = 72, // 丰田-雅力士-2009,2008,2007 + VSB_TOYOTA_YALISHI_2 = 73, // 丰田-雅力士-2012,2011,2010 + VSB_TOYOTA_RAV4_3 = 74, // 丰田-RAV4-2013经典,精英,尊崇,2012 + VSB_TOYOTA_YARiSL_1 = 75, // 丰田-YARiS-L + VSB_TOYOTA_JIAMEI_1 = 76, // 丰田-佳美-1996 + VSB_TOYOTA_PLATZ_1 = 77, // 丰田-PLATZ-1999 + VSB_TOYOTA_LANDEKLZ_2 = 78 // 丰田-兰德酷路泽-2014,2012中东版,2012 }VSB_TOYOTA_CLASS; -//Ʒ +//福特子品牌类型 typedef enum _VSB_FORD_CLASS { - VSB_FORD_OTHER = 0, // - VSB_FORD_FOCUS = 1, // ˹ - VSB_FORD_FIESTA = 2, // 껪 - VSB_FORD_SMAX = 3, // ˹ - VSB_FORD_MONDEO = 4, // ɵŷ - VSB_FORD_ECOSPORT = 5, // - VSB_FORD_ESCAPE = 6, // - VSB_FORD_ZHISHENG = 7, // ʤ - VSB_FORD_ESCORT = 8, // ˹ - VSB_FORD_EXPLORER = 9, // ̽ - VSB_FORD_EDGE = 10, // - VSB_FORD_TRANSIT = 11, // ȫ˳ - VSB_FORD_QUANSHUN_1 = 12, // -ȫ˳-δ֪ - VSB_FORD_JIANIANHUA_1 = 13, // -껪-2006,2005,2004 - VSB_FORD_JIANIANHUA_2 = 14, // -껪-2011,2010,2009 - VSB_FORD_JIANIANHUA_3 = 15, // -껪-2013 - VSB_FORD_JIANIANHUA_4 = 16, // -껪-2012 - VSB_FORD_TANXIANZHE_1 = 17, // -̽-2013,2011 - VSB_FORD_FOCUS_1 = 18, // -˹-2005 - VSB_FORD_FOCUS_2 = 19, // -˹-2005 - VSB_FORD_FOCUS_3 = 20, // -˹-2008,2007,2006 - VSB_FORD_FOCUS_4 = 21, // -˹-2013,2012,2011,2009 - VSB_FORD_FOCUS_5 = 22, // -˹-2012 - VSB_FORD_FOCUS_6 = 23, // -˹-2012,ʱ,2011,2010,2009,2008 - VSB_FORD_YIBO_1 = 24, // --2013 - VSB_FORD_YIHU_1 = 25, // --2013 - VSB_FORD_MENGDIOU_1 = 26, // -ɵŷ-2003 - VSB_FORD_MENGDIOU_2 = 27, // -ɵŷ-2005,2004 - VSB_FORD_MENGDIOU_3 = 28, // -ɵŷ-2006 - VSB_FORD_MENGDIOU_4 = 29, // -ɵŷ-2013 - VSB_FORD_MENGDIOU_5 = 30, // -ɵŷ-ʤ-2010,2008,2007 - VSB_FORD_MENGDIOU_6 = 31, // -ɵŷ-ʤ-2011 - VSB_FORD_RUIJIE_1 = 32, // --2012,2011 - VSB_FORD_MAIKESI_1 = 33 // -˹-2008,2007 + VSB_FORD_OTHER = 0, // 其他(保留) + VSB_FORD_FOCUS = 1, // 福克斯 + VSB_FORD_FIESTA = 2, // 嘉年华 + VSB_FORD_SMAX = 3, // 麦柯斯 + VSB_FORD_MONDEO = 4, // 蒙迪欧 + VSB_FORD_ECOSPORT = 5, // 翼博 + VSB_FORD_ESCAPE = 6, // 翼虎 + VSB_FORD_ZHISHENG = 7, // 致胜 + VSB_FORD_ESCORT = 8, // 福睿斯 + VSB_FORD_EXPLORER = 9, // 福特探险者 + VSB_FORD_EDGE = 10, // 锐界 + VSB_FORD_TRANSIT = 11, // 全顺 + VSB_FORD_QUANSHUN_1 = 12, // 福特-全顺-未知 + VSB_FORD_JIANIANHUA_1 = 13, // 福特-嘉年华三厢-2006,2005,2004 + VSB_FORD_JIANIANHUA_2 = 14, // 福特-嘉年华三厢-2011,2010,2009 + VSB_FORD_JIANIANHUA_3 = 15, // 福特-嘉年华三厢-2013 + VSB_FORD_JIANIANHUA_4 = 16, // 福特-嘉年华两厢-2012 + VSB_FORD_TANXIANZHE_1 = 17, // 福特-探险者-2013,2011 + VSB_FORD_FOCUS_1 = 18, // 福特-福克斯三厢-2005 + VSB_FORD_FOCUS_2 = 19, // 福特-福克斯三厢-2005经典型 + VSB_FORD_FOCUS_3 = 20, // 福特-福克斯三厢-2008,2007,2006 + VSB_FORD_FOCUS_4 = 21, // 福特-福克斯三厢-2013,2012经典,2011,2009 + VSB_FORD_FOCUS_5 = 22, // 福特-福克斯两厢-2012 + VSB_FORD_FOCUS_6 = 23, // 福特-福克斯两厢-2012基本,时尚,2011,2010,2009,2008 + VSB_FORD_YIBO_1 = 24, // 福特-翼博-2013 + VSB_FORD_YIHU_1 = 25, // 福特-翼虎-2013 + VSB_FORD_MENGDIOU_1 = 26, // 福特-蒙迪欧-2003 + VSB_FORD_MENGDIOU_2 = 27, // 福特-蒙迪欧-2005,2004 + VSB_FORD_MENGDIOU_3 = 28, // 福特-蒙迪欧-2006 + VSB_FORD_MENGDIOU_4 = 29, // 福特-蒙迪欧-2013 + VSB_FORD_MENGDIOU_5 = 30, // 福特-蒙迪欧-致胜-2010,2008,2007 + VSB_FORD_MENGDIOU_6 = 31, // 福特-蒙迪欧-致胜-2011 + VSB_FORD_RUIJIE_1 = 32, // 福特-锐界-2012,2011 + VSB_FORD_MAIKESI_1 = 33 // 福特-麦柯斯-2008,2007 }VSB_FORD_CLASS; -//ղƷ +//日产子品牌类型 typedef enum _VSB_NISSAN_CLASS { - VSB_NISSAN_OTHER = 0, // - VSB_NISSAN_XTRAIL = 1, // 濥 - VSB_NISSAN_MURANO = 2, // ¥ - VSB_NISSAN_LIVINA = 3, // - VSB_NISSAN_MARCH = 4, // - VSB_NISSAN_TIIDA = 5, // - VSB_NISSAN_TEANA = 6, // - VSB_NISSAN_QASHQAI = 7, // п - VSB_NISSAN_SYLPHY = 8, // - VSB_NISSAN_SUNNY = 9, // - VSB_NISSAN_D22PICKUP = 10, // D22Ƥ - VSB_NISSAN_D22VAN = 11, // D22ʽ - VSB_NISSAN_CABSTAR = 12, // ˹ + VSB_NISSAN_OTHER = 0, // 其他(保留) + VSB_NISSAN_XTRAIL = 1, // 奇骏 + VSB_NISSAN_MURANO = 2, // 楼兰 + VSB_NISSAN_LIVINA = 3, // 骊威 + VSB_NISSAN_MARCH = 4, // 玛驰 + VSB_NISSAN_TIIDA = 5, // 骐达 + VSB_NISSAN_TEANA = 6, // 天籁 + VSB_NISSAN_QASHQAI = 7, // 逍客 + VSB_NISSAN_SYLPHY = 8, // 轩逸 + VSB_NISSAN_SUNNY = 9, // 阳光 + VSB_NISSAN_D22PICKUP = 10, // D22皮卡 + VSB_NISSAN_D22VAN = 11, // D22厢式车 + VSB_NISSAN_CABSTAR = 12, // 凯普斯达 VSB_NISSAN_HV200 = 13, // NV200 - VSB_NISSAN_PALADIN = 14, // - VSB_NISSAN_YIDA = 15, // ô - VSB_NISSAN_DUCK = 16, // - VSB_NISSAN_CEFIRO = 17, // - VSB_NISSAN_FENGSHENBLUEBIRD = 18, // - VSB_NISSAN_FENGSHENSUNNY = 19, // - VSB_NISSAN_SUCCE = 20, // ˧ - VSB_NISSAN_FUGA = 21, // - VSB_NISSAN_BLUEBIRD4 = 22, // 4 - VSB_NISSAN_VENUCIA = 23, // - VSB_NISSAN_QUEST = 24, // ʿ - VSB_NISSAN_GENISS = 25, // - VSB_NISSAN_NV200_1 = 26, // ղ-NV200-2013,2012,2011,2010 - VSB_NISSAN_TIANLAI_1 = 27, // ղ--2005,2004 - VSB_NISSAN_TIANLAI_2 = 28, // ղ--2007,2006 - VSB_NISSAN_TIANLAI_3 = 29, // ղ--2010,2008 - VSB_NISSAN_TIANLAI_4 = 30, // ղ--2012,2011 - VSB_NISSAN_TIANLAI_5 = 31, // ղ--2012ưȫ,2011 - VSB_NISSAN_TIANLAI_6 = 32, // ղ--2014,2013 - VSB_NISSAN_QIJUN_1 = 33, // ղ-濥-2010,2008 - VSB_NISSAN_QIJUN_2 = 34, // ղ-濥-2012,2011 - VSB_NISSAN_PALADING_1 = 35, // ղ--2013,2011,2006,2004 - VSB_NISSAN_LOULAN_1 = 36, // ղ-¥-2013,2011 - VSB_NISSAN_LOULAN_2 = 37, // ղ--2010 - VSB_NISSAN_LANNIAO_1 = 38, // ղ--2002 - VSB_NISSAN_LANNIAO_2 = 39, // ղ--2003 - VSB_NISSAN_LANNIAO_3 = 40, // ղ--2004 - VSB_NISSAN_GUISHI_1 = 41, // ղ-ʿ-2005 - VSB_NISSAN_XUANYI_1 = 42, // ղ--2006 - VSB_NISSAN_XUANYI_2 = 43, // ղ--2012,2009,2007 - VSB_NISSAN_XUANYI_3 = 44, // ղ--2014,2012 - VSB_NISSAN_XIAOKE_1 = 45, // ղ-п-2009,2008 - VSB_NISSAN_XIAOKE_2 = 46, // ղ-п-2013,2012,2011 - VSB_NISSAN_SUNNY_3 = 47, // ղ--2004 - VSB_NISSAN_SUNNY_1 = 48, // ղ--2006,2005 - VSB_NISSAN_SUNNY_2 = 49, // ղ--2012,2011 - VSB_NISSAN_YIDA_1 = 50, // ղ-ô-2008,2006,2005 - VSB_NISSAN_YIDA_2 = 51, // ղ-ô-δ֪ - VSB_NISSAN_FENGDU_1 = 52, // ղ--δ֪ - VSB_NISSAN_FENGYA_1 = 53, // ղ--δ֪ - VSB_NISSAN_LIWEI_1 = 54, // ղ--2008,2007 - VSB_NISSAN_LIWEI_2 = 55, // ղ--2009 - VSB_NISSAN_LIWEI_3 = 56, // ղ--2010 - VSB_NISSAN_LIWEI_4 = 57, // ղ--2011,2010,2008 - VSB_NISSAN_JUNYI_1 = 58, // ղ--2006 - VSB_NISSAN_QIDA_1 = 59, // ղ--2006,2005 - VSB_NISSAN_QIDA_2 = 60, // ղ--2009,2008 - VSB_NISSAN_QIDA_3 = 61, // ղ--2013,2012,2011 - VSB_NISSAN_RUIQI_1 = 62 // ղ-Ƥ-2009 + VSB_NISSAN_PALADIN = 14, // 帕拉丁 + VSB_NISSAN_YIDA = 15, // 颐达 + VSB_NISSAN_DUCK = 16, // 公爵 + VSB_NISSAN_CEFIRO = 17, // 风度 + VSB_NISSAN_FENGSHENBLUEBIRD = 18, // 风神蓝鸟 + VSB_NISSAN_FENGSHENSUNNY = 19, // 风神阳光 + VSB_NISSAN_SUCCE = 20, // 帅客 + VSB_NISSAN_FUGA = 21, // 风雅 + VSB_NISSAN_BLUEBIRD4 = 22, // 蓝鸟4代 + VSB_NISSAN_VENUCIA = 23, // 启辰 + VSB_NISSAN_QUEST = 24, // 贵士 + VSB_NISSAN_GENISS = 25, // 俊逸 + VSB_NISSAN_NV200_1 = 26, // 日产-NV200-2013,2012,2011,2010 + VSB_NISSAN_TIANLAI_1 = 27, // 日产-天籁-2005,2004 + VSB_NISSAN_TIANLAI_2 = 28, // 日产-天籁-2007,2006 + VSB_NISSAN_TIANLAI_3 = 29, // 日产-天籁-2010,2008 + VSB_NISSAN_TIANLAI_4 = 30, // 日产-天籁-2012,2011 + VSB_NISSAN_TIANLAI_5 = 31, // 日产-天籁-2012云安全版,2011公爵 + VSB_NISSAN_TIANLAI_6 = 32, // 日产-天籁-2014,2013 + VSB_NISSAN_QIJUN_1 = 33, // 日产-奇骏-2010,2008 + VSB_NISSAN_QIJUN_2 = 34, // 日产-奇骏-2012,2011进口 + VSB_NISSAN_PALADING_1 = 35, // 日产-帕拉丁-2013,2011,2006,2004 + VSB_NISSAN_LOULAN_1 = 36, // 日产-楼兰-2013,2011 + VSB_NISSAN_LOULAN_2 = 37, // 日产-玛驰-2010 + VSB_NISSAN_LANNIAO_1 = 38, // 日产-蓝鸟-2002 + VSB_NISSAN_LANNIAO_2 = 39, // 日产-蓝鸟-2003 + VSB_NISSAN_LANNIAO_3 = 40, // 日产-蓝鸟-2004 + VSB_NISSAN_GUISHI_1 = 41, // 日产-贵士-2005 + VSB_NISSAN_XUANYI_1 = 42, // 日产-轩逸-2006 + VSB_NISSAN_XUANYI_2 = 43, // 日产-轩逸-2012经典,2009,2007 + VSB_NISSAN_XUANYI_3 = 44, // 日产-轩逸-2014,2012 + VSB_NISSAN_XIAOKE_1 = 45, // 日产-逍客-2009,2008 + VSB_NISSAN_XIAOKE_2 = 46, // 日产-逍客-2013,2012,2011 + VSB_NISSAN_SUNNY_3 = 47, // 日产-阳光-2004 + VSB_NISSAN_SUNNY_1 = 48, // 日产-阳光-2006,2005 + VSB_NISSAN_SUNNY_2 = 49, // 日产-阳光-2012,2011 + VSB_NISSAN_YIDA_1 = 50, // 日产-颐达-2008,2006,2005 + VSB_NISSAN_YIDA_2 = 51, // 日产-颐达-未知 + VSB_NISSAN_FENGDU_1 = 52, // 日产-风度-未知 + VSB_NISSAN_FENGYA_1 = 53, // 日产-风雅-未知 + VSB_NISSAN_LIWEI_1 = 54, // 日产-骊威-2008,2007 + VSB_NISSAN_LIWEI_2 = 55, // 日产-骊威-2009 + VSB_NISSAN_LIWEI_3 = 56, // 日产-骊威-2010 + VSB_NISSAN_LIWEI_4 = 57, // 日产-骊威-2011,2010劲锐,2008炫能型 + VSB_NISSAN_JUNYI_1 = 58, // 日产-骏逸-2006 + VSB_NISSAN_QIDA_1 = 59, // 日产-骐达-2006,2005 + VSB_NISSAN_QIDA_2 = 60, // 日产-骐达-2009,2008 + VSB_NISSAN_QIDA_3 = 61, // 日产-骐达-2013,2012,2011 + VSB_NISSAN_RUIQI_1 = 62 // 日产-锐骐皮卡-2009豪华型 }VSB_NISSAN_CLASS; -//µƷ +//奥迪子品牌类型 typedef enum _VSB_AUDI_CLASS { - VSB_AUDI_OTHER = 0, // - VSB_AUDI_A3 = 1, // µA3 - VSB_AUDI_A4L = 2, // µA4L - VSB_AUDI_A6L = 3, // µA6L - VSB_AUDI_Q3 = 4, // µQ3 - VSB_AUDI_Q5 = 5, // µQ5 - VSB_AUDI_A1 = 6, // µA1 - VSB_AUDI_A4 = 7, // µA4 - VSB_AUDI_A5 = 8, // µA5 - VSB_AUDI_A6 = 9, // µA6 - VSB_AUDI_A7 = 10, // µA7 - VSB_AUDI_A8L = 11, // µA8L - VSB_AUDI_Q7 = 12, // µQ7 - VSB_AUDI_S5 = 13, // µS5 - VSB_AUDI_TT = 14, // µTT - VSB_AUDI_100 = 15, // µ100 - VSB_AUDI_200 = 16, // µ200 - VSB_AUDI_S7 = 17, // µS7 - VSB_AUDI_S8 = 18, // µS8 - VSB_AUDI_100_1 = 19, // µ-100-δ֪ - VSB_AUDI_200_1 = 20, // µ-200-δ֪ - VSB_AUDI_A1_1 = 21, // µ-A1-2014,2013,2012 - VSB_AUDI_A3_1 = 22, // µ-A3-2013,2010ʰ - VSB_AUDI_A3_2 = 23, // µ-A3-2013,2011,2010 - VSB_AUDI_A4_1 = 24, // µ-A4-2005,2000ڰ - VSB_AUDI_A4_2 = 25, // µ-A4-2007,2006,2004 - VSB_AUDI_A4L_1 = 26, // µ-A4L-2013 - VSB_AUDI_A5_1 = 27, // µ-A5-2011,2010 - VSB_AUDI_A6_1 = 28, // µ-A6-1996,1995,1991 - VSB_AUDI_A6L_1 = 29, // µ-A6L-2008,2007,2006,2005 - VSB_AUDI_A6L_2 = 30, // µ-A6L-2011,2010,2009 - VSB_AUDI_A6L_3 = 31, // µ-A6L-2014,2013,2012 - VSB_AUDI_A7_1 = 32, // µ-A7-2014,2013ȡ,2012,2011 - VSB_AUDI_A8L_1 = 33, // µ-A8L-2006 - VSB_AUDI_A8L_2 = 34, // µ-A8L-2009,2008 - VSB_AUDI_A8L_3 = 35, // µ-A8L-2011 - VSB_AUDI_A8L_4 = 36, // µ-A8L-2013,2012 - VSB_AUDI_Q3_1 = 37, // µ-Q3-2014,2013,2012 - VSB_AUDI_Q5_1 = 38, // µ-Q5-2012,2010˶ - VSB_AUDI_Q5_2 = 39, // µ-Q5-2012,2010ԽҰ - VSB_AUDI_Q5_3 = 40, // µ-Q5-2012ȡ,2011,2010,2009 - VSB_AUDI_Q5_4 = 41, // µ-Q5-2013 - VSB_AUDI_Q7_1 = 42, // µ-Q7-2007 - VSB_AUDI_Q7_2 = 43, // µ-Q7-2014,2013 - VSB_AUDI_S7_1 = 44, // µ-S7-2013 - VSB_AUDI_S8_1 = 45, // µ-S8-2013 - VSB_AUDI_TT_2 = 46, // µ-TT-2010,2008,2007 - VSB_AUDI_TT_3 = 47, // µ-TT-2012,2011 - VSB_AUDI_TT_4 = 48, // µ-TT-2013,2013,2011TTS - VSB_AUDI_TT_1 = 49 // µ-TT-2008TTS + VSB_AUDI_OTHER = 0, // 其他(保留) + VSB_AUDI_A3 = 1, // 奥迪A3 + VSB_AUDI_A4L = 2, // 奥迪A4L + VSB_AUDI_A6L = 3, // 奥迪A6L + VSB_AUDI_Q3 = 4, // 奥迪Q3 + VSB_AUDI_Q5 = 5, // 奥迪Q5 + VSB_AUDI_A1 = 6, // 奥迪A1 + VSB_AUDI_A4 = 7, // 奥迪A4 + VSB_AUDI_A5 = 8, // 奥迪A5 + VSB_AUDI_A6 = 9, // 奥迪A6 + VSB_AUDI_A7 = 10, // 奥迪A7 + VSB_AUDI_A8L = 11, // 奥迪A8L + VSB_AUDI_Q7 = 12, // 奥迪Q7 + VSB_AUDI_S5 = 13, // 奥迪S5 + VSB_AUDI_TT = 14, // 奥迪TT + VSB_AUDI_100 = 15, // 奥迪100 + VSB_AUDI_200 = 16, // 奥迪200 + VSB_AUDI_S7 = 17, // 奥迪S7 + VSB_AUDI_S8 = 18, // 奥迪S8 + VSB_AUDI_100_1 = 19, // 奥迪-100-未知 + VSB_AUDI_200_1 = 20, // 奥迪-200-未知 + VSB_AUDI_A1_1 = 21, // 奥迪-A1-2014,2013,2012 + VSB_AUDI_A3_1 = 22, // 奥迪-A3-2013,2010舒适版 + VSB_AUDI_A3_2 = 23, // 奥迪-A3-2013技术型,2011,2010 + VSB_AUDI_A4_1 = 24, // 奥迪-A4-2005国产,2000进口版 + VSB_AUDI_A4_2 = 25, // 奥迪-A4-2007,2006国产,2004进口 + VSB_AUDI_A4L_1 = 26, // 奥迪-A4L-2013 + VSB_AUDI_A5_1 = 27, // 奥迪-A5-2011,2010 + VSB_AUDI_A6_1 = 28, // 奥迪-A6-1996,1995,1991 + VSB_AUDI_A6L_1 = 29, // 奥迪-A6L-2008,2007,2006,2005 + VSB_AUDI_A6L_2 = 30, // 奥迪-A6L-2011,2010,2009 + VSB_AUDI_A6L_3 = 31, // 奥迪-A6L-2014,2013,2012 + VSB_AUDI_A7_1 = 32, // 奥迪-A7-2014,2013进取型,2012,2011 + VSB_AUDI_A8L_1 = 33, // 奥迪-A8L-2006 + VSB_AUDI_A8L_2 = 34, // 奥迪-A8L-2009,2008 + VSB_AUDI_A8L_3 = 35, // 奥迪-A8L-2011 + VSB_AUDI_A8L_4 = 36, // 奥迪-A8L-2013,2012 + VSB_AUDI_Q3_1 = 37, // 奥迪-Q3-2014,2013,2012 + VSB_AUDI_Q5_1 = 38, // 奥迪-Q5-2012,2010运动 + VSB_AUDI_Q5_2 = 39, // 奥迪-Q5-2012豪华型,2010越野版 + VSB_AUDI_Q5_3 = 40, // 奥迪-Q5-2012进取型,2011,2010,2009 + VSB_AUDI_Q5_4 = 41, // 奥迪-Q5-2013 + VSB_AUDI_Q7_1 = 42, // 奥迪-Q7-2007 + VSB_AUDI_Q7_2 = 43, // 奥迪-Q7-2014,2013 + VSB_AUDI_S7_1 = 44, // 奥迪-S7-2013 + VSB_AUDI_S8_1 = 45, // 奥迪-S8-2013 + VSB_AUDI_TT_2 = 46, // 奥迪-TT-2010,2008,2007 + VSB_AUDI_TT_3 = 47, // 奥迪-TT-2012,2011 + VSB_AUDI_TT_4 = 48, // 奥迪-TT-2013,2013,2011TTS + VSB_AUDI_TT_1 = 49 // 奥迪-TT-2008TTS }VSB_AUDI_CLASS; -//ԴƷ +//马自达子品牌类型 typedef enum _VSB_MAZDA_CLASS { - VSB_MAZDA_OTHER = 0, // - VSB_MAZDA_CX5 = 1, // ԴCX5 - VSB_MAZDA_2 = 2, // Դ2 - VSB_MAZDA_3 = 3, // Դ3 - VSB_MAZDA_6 = 4, // Դ6 - VSB_MAZDA_8 = 5, // Դ8 - VSB_MAZDA_COREWING = 6, // - VSB_MAZDA_CX7 = 7, // ԴCX7 - VSB_MAZDA_X5 = 8, // ԴX5 - VSB_MAZDA_5 = 9, // Դ5 - VSB_MAZDA_PREMACY = 10, // Ͽ - VSB_MAZDA_MPV = 11, // ԴMPV - VSB_MAZDA_CX5_1 = 12, // Դ-CX-5-2014,2013,2012 - VSB_MAZDA_CX7_1 = 13, // Դ-CX-7-2014,2013,2011,2010 - VSB_MAZDA_2_1 = 14, // Դ-Mazda2-2011,2009,2008,2007A - VSB_MAZDA_3_1 = 15, // Դ-Mazda3-2004,2002 - VSB_MAZDA_3_2 = 16, // Դ-Mazda3-2009,2007 - VSB_MAZDA_3_3 = 17, // Դ-Mazda3-2012,2010 - VSB_MAZDA_3_4 = 18, // Դ-Mazda3dz-2013,2012 - VSB_MAZDA_5_1 = 19, // Դ-Mazda5-2010,2008,2007 - VSB_MAZDA_5_2 = 20, // Դ-Mazda5-2013,2012,2011 - VSB_MAZDA_6_2 = 21, // Դ-Mazda6-2006 - VSB_MAZDA_6_3 = 22, // Դ-Mazda6-2007 - VSB_MAZDA_8_1 = 23, // Դ-Mazda8-2013,2011,2010 - VSB_MAZDA_PREMACY_1 = 24, // Դ--2003 - VSB_MAZDA_PREMACY_2 = 25, // Դ--2006,2005,2004 - VSB_MAZDA_COREWING_1 = 26, // Դ--2012,2011,2010,2009 - VSB_MAZDA_COREWING_2 = 27, // Դ--2011,2010 - VSB_MAZDA_COREWING_3 = 28, // Դ--2012 - VSB_MAZDA_2_2 = 29, // Դ-Mazda2()-2011,2010,2008 - VSB_MAZDA_6_1 = 30, // Դ-Mazda6-2004 - VSB_MAZDA_6_4 = 31 // Դ-Mazda6-2014,2013,2012,2011,2010 + VSB_MAZDA_OTHER = 0, // 其他(保留) + VSB_MAZDA_CX5 = 1, // 马自达CX5 + VSB_MAZDA_2 = 2, // 马自达2 + VSB_MAZDA_3 = 3, // 马自达3 + VSB_MAZDA_6 = 4, // 马自达6 + VSB_MAZDA_8 = 5, // 马自达8 + VSB_MAZDA_COREWING = 6, // 睿翼 + VSB_MAZDA_CX7 = 7, // 马自达CX7 + VSB_MAZDA_X5 = 8, // 马自达X5 + VSB_MAZDA_5 = 9, // 马自达5 + VSB_MAZDA_PREMACY = 10, // 老款普力马 + VSB_MAZDA_MPV = 11, // 马自达MPV + VSB_MAZDA_CX5_1 = 12, // 马自达-CX-5-2014,2013,2012进口 + VSB_MAZDA_CX7_1 = 13, // 马自达-CX-7-2014,2013,2011,2010 + VSB_MAZDA_2_1 = 14, // 马自达-Mazda2两厢-2011,2009,2008,2007A + VSB_MAZDA_3_1 = 15, // 马自达-Mazda3三厢-2004,2002 + VSB_MAZDA_3_2 = 16, // 马自达-Mazda3三厢-2009,2007 + VSB_MAZDA_3_3 = 17, // 马自达-Mazda3三厢-2012,2010 + VSB_MAZDA_3_4 = 18, // 马自达-Mazda3星骋两厢-2013,2012 + VSB_MAZDA_5_1 = 19, // 马自达-Mazda5-2010,2008,2007 + VSB_MAZDA_5_2 = 20, // 马自达-Mazda5-2013,2012,2011 + VSB_MAZDA_6_2 = 21, // 马自达-Mazda6-2006 + VSB_MAZDA_6_3 = 22, // 马自达-Mazda6-2007 + VSB_MAZDA_8_1 = 23, // 马自达-Mazda8-2013,2011,2010 + VSB_MAZDA_PREMACY_1 = 24, // 马自达-普力马-2003 + VSB_MAZDA_PREMACY_2 = 25, // 马自达-普力马-2006,2005,2004 + VSB_MAZDA_COREWING_1 = 26, // 马自达-睿翼-2012,2011,2010,2009 + VSB_MAZDA_COREWING_2 = 27, // 马自达-睿翼轿跑-2011,2010 + VSB_MAZDA_COREWING_3 = 28, // 马自达-睿翼轿跑-2012 + VSB_MAZDA_2_2 = 29, // 马自达-Mazda2劲翔(三厢)-2011,2010,2008 + VSB_MAZDA_6_1 = 30, // 马自达-Mazda6-2004 + VSB_MAZDA_6_4 = 31 // 马自达-Mazda6-2014,2013,2012,2011,2010 }VSB_MAZDA_CLASS; -//ѩƷ +//雪佛兰子品牌类型 typedef enum _VSB_CHEVROLET_CLASS { - VSB_CHEVROLET_OTHER = 0, // - VSB_CHEVROLET_NEWAVEO = 1, // Ψŷ - VSB_CHEVROLET_EPICA = 2, // - VSB_CHEVROLET_CRUZE = 3, // ³ - VSB_CHEVROLET_CAPTIVA = 4, // - VSB_CHEVROLET_MALIBU = 5, // - VSB_CHEVROLET_SAIL = 6, // ŷ - VSB_CHEVROLET_CAMARO = 7, // - VSB_CHEVROLET_LECHENG = 8, // ֳ - VSB_CHEVROLET_LOVA = 9, // ַ - VSB_CHEVROLET_OLDAVEO = 10, // ֳ-ϿΨŷ - VSB_CHEVROLET_SPARK = 11, // ֳ - VSB_CHEVROLET_SAILSRV = 12, // ŷSRV - VSB_CHEVROLET_LOVA_1 = 13, // ѩ-ַ-2009,2008,2007,2006 - VSB_CHEVROLET_LOVA_2 = 14, // ѩ-ַ-2010 - VSB_CHEVROLET_SPARK_1 = 15, // ѩ-ֳ-2010,2009,2006,2005,2004 - VSB_CHEVROLET_SPARK_2 = 16, // ѩ-ֳ-2010˶ - VSB_CHEVROLET_OLDAVEO_1 = 17, // ѩ-ֳ-2005 - VSB_CHEVROLET_OLDAVEO_2 = 18, // ѩ-ֳ-2010,2009,2008 - VSB_CHEVROLET_EPICA_1 = 19, // ѩ--2005 - VSB_CHEVROLET_EPICA_3 = 20, // ѩ--2012,2011,2010 - VSB_CHEVROLET_EPICA_4 = 21, // ѩ--2012,2011,2010 - VSB_CHEVROLET_EPICA_5 = 22, // ѩ--2013 - VSB_CHEVROLET_NEWAVEO_1 = 23, // ѩ-Ψŷ-2013,2012,2011 - VSB_CHEVROLET_CAPTIVA_1 = 24, // ѩ--2010,2008 - VSB_CHEVROLET_CAPTIVA_2 = 25, // ѩ--2014,2013,2012,2011 - VSB_CHEVROLET_KEMAILUO_1 = 26, // ѩ--2012,2011 - VSB_CHEVROLET_CRUZE_1 = 27, // ѩ-³-2014,2013,2012,2011,2010,2009 - VSB_CHEVROLET_SAIL_1 = 28, // ѩ-ŷ-2005 - VSB_CHEVROLET_SAIL_2 = 29, // ѩ-ŷ-2013,2011,2010 - VSB_CHEVROLET_MALIBU_1 = 30, // ѩ--2014,2013,2012 - VSB_CHEVROLET_EPICA_2 = 31 // ѩ--2009,2008,2007 + VSB_CHEVROLET_OTHER = 0, // 其他(保留) + VSB_CHEVROLET_NEWAVEO = 1, // 爱唯欧 + VSB_CHEVROLET_EPICA = 2, // 景程 + VSB_CHEVROLET_CRUZE = 3, // 科鲁兹 + VSB_CHEVROLET_CAPTIVA = 4, // 科帕奇 + VSB_CHEVROLET_MALIBU = 5, // 迈锐宝 + VSB_CHEVROLET_SAIL = 6, // 赛欧 + VSB_CHEVROLET_CAMARO = 7, // 科迈罗 + VSB_CHEVROLET_LECHENG = 8, // 乐成 + VSB_CHEVROLET_LOVA = 9, // 乐风 + VSB_CHEVROLET_OLDAVEO = 10, // 乐骋-老款爱唯欧 + VSB_CHEVROLET_SPARK = 11, // 乐驰 + VSB_CHEVROLET_SAILSRV = 12, // 赛欧SRV + VSB_CHEVROLET_LOVA_1 = 13, // 雪佛兰-乐风-2009,2008,2007,2006 + VSB_CHEVROLET_LOVA_2 = 14, // 雪佛兰-乐风-2010 + VSB_CHEVROLET_SPARK_1 = 15, // 雪佛兰-乐驰-2010,2009,2006,2005,2004 + VSB_CHEVROLET_SPARK_2 = 16, // 雪佛兰-乐驰-2010运动款 + VSB_CHEVROLET_OLDAVEO_1 = 17, // 雪佛兰-乐骋-2005 + VSB_CHEVROLET_OLDAVEO_2 = 18, // 雪佛兰-乐骋-2010,2009,2008 + VSB_CHEVROLET_EPICA_1 = 19, // 雪佛兰-景程-2005 + VSB_CHEVROLET_EPICA_3 = 20, // 雪佛兰-景程-2012,2011,2010 + VSB_CHEVROLET_EPICA_4 = 21, // 雪佛兰-景程-2012,2011,2010致真版 + VSB_CHEVROLET_EPICA_5 = 22, // 雪佛兰-景程-2013 + VSB_CHEVROLET_NEWAVEO_1 = 23, // 雪佛兰-爱唯欧三厢-2013,2012,2011 + VSB_CHEVROLET_CAPTIVA_1 = 24, // 雪佛兰-科帕奇-2010,2008 + VSB_CHEVROLET_CAPTIVA_2 = 25, // 雪佛兰-科帕奇-2014,2013,2012,2011 + VSB_CHEVROLET_KEMAILUO_1 = 26, // 雪佛兰-科迈罗-2012,2011 + VSB_CHEVROLET_CRUZE_1 = 27, // 雪佛兰-科鲁兹-2014,2013,2012,2011,2010,2009 + VSB_CHEVROLET_SAIL_1 = 28, // 雪佛兰-赛欧三厢-2005 + VSB_CHEVROLET_SAIL_2 = 29, // 雪佛兰-赛欧三厢-2013,2011,2010 + VSB_CHEVROLET_MALIBU_1 = 30, // 雪佛兰-迈锐宝-2014,2013,2012 + VSB_CHEVROLET_EPICA_2 = 31 // 雪佛兰-景程-2009,2008,2007 }VSB_CHEVROLET_CLASS; -//ѩƷ +//雪铁龙子品牌类型 typedef enum _VSB_CITROEN_CLASS { - VSB_CITROEN_OTHER = 0, // - VSB_CITROEN_C2 = 1, // ѩC2 - VSB_CITROEN_C4L = 2, // ѩC4L - VSB_CITROEN_C5 = 3, // ѩC5 - VSB_CITROEN_ELYSEE = 4, // - VSB_CITROEN_CQUATRELIANGXIANG = 5, // - VSB_CITROEN_CQUATRESANXIANG = 6, // - VSB_CITROEN_SAEAPICASSO = 7, // -ϼ - VSB_CITROEN_PICASSO = 8, // ϼ - VSB_CITROEN_CTRIOMPHE = 9, // - VSB_CITROEN_XSARA = 10, // - VSB_CITROEN_SHENLONGFUKANG = 11, // - VSB_CITROEN_CHANGANDS = 12, // DS - VSB_CITROEN_C2_1 = 13, // ѩ-C2-2012,2010,2008,2007,2006 - VSB_CITROEN_C4L_1 = 14, // ѩ-C4L-2014,2013 - VSB_CITROEN_C4PICASSO_1 = 15, // ѩ-C4ϼ-2009ʰ - VSB_CITROEN_C5_1 = 16, // ѩ-C5-2012,2011,2010 - VSB_CITROEN_CQUATRESANXIANG_1 = 17, // ѩ--2013,2012 - VSB_CITROEN_CQUATRELIANGXIANG_1 = 18, // ѩ--2011,2010,2009,2008 - VSB_CITROEN_CTRIOMPHE_1 = 19, // ѩ--2010,2009,2008,2006 - VSB_CITROEN_FUKANG_1 = 20, // ѩ--2006,2005,2004,2003,2002 - VSB_CITROEN_ELYSEE_1 = 21, // ѩ--2006,2005,2004,2003,2002 - VSB_CITROEN_ELYSEE_2 = 22, // ѩ--2013,2012,2011,2010,2009,2008,2007 - VSB_CITROEN_SAEAPICASSO_1 = 23 // ѩ--ϼ-2014 + VSB_CITROEN_OTHER = 0, // 其他(保留) + VSB_CITROEN_C2 = 1, // 雪铁龙C2 + VSB_CITROEN_C4L = 2, // 雪铁龙C4L + VSB_CITROEN_C5 = 3, // 雪铁龙C5 + VSB_CITROEN_ELYSEE = 4, // 爱丽舍三厢 + VSB_CITROEN_CQUATRELIANGXIANG = 5, // 世嘉两厢 + VSB_CITROEN_CQUATRESANXIANG = 6, // 世嘉三厢 + VSB_CITROEN_SAEAPICASSO = 7, // 萨拉-毕加索 + VSB_CITROEN_PICASSO = 8, // 毕加索 + VSB_CITROEN_CTRIOMPHE = 9, // 凯旋 + VSB_CITROEN_XSARA = 10, // 塞纳 + VSB_CITROEN_SHENLONGFUKANG = 11, // 神龙富康 + VSB_CITROEN_CHANGANDS = 12, // 长安DS + VSB_CITROEN_C2_1 = 13, // 雪铁龙-C2-2012,2010,2008,2007,2006 + VSB_CITROEN_C4L_1 = 14, // 雪铁龙-C4L-2014,2013 + VSB_CITROEN_C4PICASSO_1 = 15, // 雪铁龙-C4毕加索-2009舒适版 + VSB_CITROEN_C5_1 = 16, // 雪铁龙-C5-2012,2011,2010 + VSB_CITROEN_CQUATRESANXIANG_1 = 17, // 雪铁龙-世嘉三厢-2013,2012 + VSB_CITROEN_CQUATRELIANGXIANG_1 = 18, // 雪铁龙-世嘉两厢-2011,2010,2009,2008 + VSB_CITROEN_CTRIOMPHE_1 = 19, // 雪铁龙-凯旋-2010,2009,2008,2006 + VSB_CITROEN_FUKANG_1 = 20, // 雪铁龙-富康-2006,2005,2004,2003,2002 + VSB_CITROEN_ELYSEE_1 = 21, // 雪铁龙-爱丽舍三厢-2006,2005,2004,2003,2002 + VSB_CITROEN_ELYSEE_2 = 22, // 雪铁龙-爱丽舍三厢-2013,2012,2011,2010,2009,2008,2007 + VSB_CITROEN_SAEAPICASSO_1 = 23 // 雪铁龙-萨拉-毕加索-2014 }VSB_CITROEN_CLASS; -//ִƷ +//现代子品牌类型 typedef enum _VSB_HYUNDAI_CLASS { - VSB_HYUNDAI_OTHER = 0, // - VSB_HYUNDAI_IX35 = 1, // ִIX35 - VSB_HYUNDAI_LANGDONG = 2, // ʶ - VSB_HYUNDAI_MOINCA = 3, // Ԧ - VSB_HYUNDAI_SHENGDA = 4, // ʤ - VSB_HYUNDAI_VERNA = 5, // - VSB_HYUNDAI_RUIYI = 6, // - VSB_HYUNDAI_SONATAEIGHT = 7, // - VSB_HYUNDAI_TUCSON = 8, // ;ʤ - VSB_HYUNDAI_YUEDONG = 9, // ö - VSB_HYUNDAI_ELANTRA = 10, // - VSB_HYUNDAI_GRANDSANTAFE = 11, // - VSB_HYUNDAI_COUPE = 12, // - VSB_HYUNDAI_MATRIX = 13, // - VSB_HYUNDAI_ACCENT = 14, // - VSB_HYUNDAI_IX30 = 15, // ִIX30 - VSB_HYUNDAI_SONATA = 16, // - VSB_HYUNDAI_REFINE = 17, // ִ - VSB_HYUNDAI_MISTRA = 18, // ͼ - VSB_HYUNDAI_SONATAYUFENG = 19, // - - VSB_HYUNDAI_SANTAFE = 20, // ִʥ - VSB_HYUNDAI_HUIYI = 21, // ڻ - VSB_HYUNDAI_I30_1 = 22, // ִ-i30-2010,2009 - VSB_HYUNDAI_IX35_1 = 23, // ִ-ix35-2012,2011,2010 - VSB_HYUNDAI_YILANTE_1 = 24, // ִ--2006,2005,2004 - VSB_HYUNDAI_YILANTE_2 = 25, // ִ--2007 - VSB_HYUNDAI_YILANTE_3 = 26, // ִ--2011 - VSB_HYUNDAI_SHENGDA_1 = 27, // ִ-ȫʤ-2013,2012 - VSB_HYUNDAI_MINGTU_1 = 28, // ִ-ͼ-2014,2013 - VSB_HYUNDAI_MINGYU_1 = 29, // ִ-Ԧ-2013,2011,2009 - VSB_HYUNDAI_SHENGDAFEI_1 = 30, // ִ-ʥ-δ֪ - VSB_HYUNDAI_YUXIANG_1 = 31, // ִ--2005ʰ - VSB_HYUNDAI_YUXIANG_2 = 32, // ִ--2006,2005 - VSB_HYUNDAI_YUEDONG_1 = 33, // ִ-ö-2010,2009,2008 - VSB_HYUNDAI_YUEDONG_2 = 34, // ִ-ö-2012,2011 - VSB_HYUNDAI_SHENGDA_2 = 35, // ִ-ʤ-2009,2006 - VSB_HYUNDAI_SHENGDA_3 = 36, // ִ-ʤ-2012,2011,2010 - VSB_HYUNDAI_LANGDONG_1 = 37, // ִ-ʶ-2013,2012 - VSB_HYUNDAI_GERUI_1 = 38, // ִ--δ֪ - VSB_HYUNDAI_RUIYI_1 = 39, // ִ--2014 - VSB_HYUNDAI_RUINA_1 = 40, // ִ--2013,2010 - VSB_HYUNDAI_RUINA_2 = 41, // ִ--2014,2013,2011 - VSB_HYUNDAI_RUIFENG_1 = 42, // ִ--δ֪ - VSB_HYUNDAI_SUONATA_1 = 43, // ִ--2008,2007,2006,2004,2003׼ - VSB_HYUNDAI_SUONATA_2 = 44, // ִ--2010,2009,2008,2006,2004 - VSB_HYUNDAI_SOUNATA_3 = 45, // ִ--2011,2010 - VSB_HYUNDAI_WEILAKESI_1 = 46, // ִ-ά˹-2012,2010,2008,2007 - VSB_HYUNDAI_MEIJIA_1 = 47, // ִ--δ֪ - VSB_HYUNDAI_JINKOUHUIYI_1 = 48, // ִ-ڻ-δ֪ - VSB_HYUNDAI_TUSHENG_1 = 49, // ִ-;ʤ-2005 - VSB_HYUNDAI_TUSHENG_2 = 50, // ִ-;ʤ-2011,2009,2008,2006 - VSB_HYUNDAI_TUSHENG_3 = 51, // ִ-;ʤ-2013 - VSB_HYUNDAI_KUPAI_1 = 52, // ִ--δ֪ - VSB_HYUNDAI_YASHENTE_1 = 53, // ִ--2008,2006 - VSB_HYUNDAI_YASHENTE_2 = 54, // ִ--2011 - VSB_HYUNDAI_LINGXIANG_1 = 55, // ִ--2009,2008 - VSB_HYUNDAI_FEISI_1 = 56 // ִ-˼-2011 + VSB_HYUNDAI_OTHER = 0, // 其他(保留) + VSB_HYUNDAI_IX35 = 1, // 现代IX35 + VSB_HYUNDAI_LANGDONG = 2, // 朗动 + VSB_HYUNDAI_MOINCA = 3, // 名驭 + VSB_HYUNDAI_SHENGDA = 4, // 胜达 + VSB_HYUNDAI_VERNA = 5, // 瑞纳 + VSB_HYUNDAI_RUIYI = 6, // 瑞奕 + VSB_HYUNDAI_SONATAEIGHT = 7, // 索纳塔八 + VSB_HYUNDAI_TUCSON = 8, // 途胜 + VSB_HYUNDAI_YUEDONG = 9, // 悦动 + VSB_HYUNDAI_ELANTRA = 10, // 伊兰特 + VSB_HYUNDAI_GRANDSANTAFE = 11, // 格锐 + VSB_HYUNDAI_COUPE = 12, // 酷派 + VSB_HYUNDAI_MATRIX = 13, // 美佳 + VSB_HYUNDAI_ACCENT = 14, // 雅绅特 + VSB_HYUNDAI_IX30 = 15, // 现代IX30 + VSB_HYUNDAI_SONATA = 16, // 索纳塔 + VSB_HYUNDAI_REFINE = 17, // 现代瑞风商务车 + VSB_HYUNDAI_MISTRA = 18, // 名图 + VSB_HYUNDAI_SONATAYUFENG = 19, // 索纳塔-御翔 + VSB_HYUNDAI_SANTAFE = 20, // 现代圣达菲 + VSB_HYUNDAI_HUIYI = 21, // 进口辉翼 + VSB_HYUNDAI_I30_1 = 22, // 现代-i30-2010,2009 + VSB_HYUNDAI_IX35_1 = 23, // 现代-ix35-2012,2011,2010 + VSB_HYUNDAI_YILANTE_1 = 24, // 现代-伊兰特-2006,2005,2004 + VSB_HYUNDAI_YILANTE_2 = 25, // 现代-伊兰特-2007三厢 + VSB_HYUNDAI_YILANTE_3 = 26, // 现代-伊兰特-2011 + VSB_HYUNDAI_SHENGDA_1 = 27, // 现代-全新胜达-2013,2012 + VSB_HYUNDAI_MINGTU_1 = 28, // 现代-名图-2014,2013 + VSB_HYUNDAI_MINGYU_1 = 29, // 现代-名驭-2013,2011,2009 + VSB_HYUNDAI_SHENGDAFEI_1 = 30, // 现代-圣达菲-未知 + VSB_HYUNDAI_YUXIANG_1 = 31, // 现代-御翔-2005舒适版 + VSB_HYUNDAI_YUXIANG_2 = 32, // 现代-御翔-2006,2005 + VSB_HYUNDAI_YUEDONG_1 = 33, // 现代-悦动-2010,2009,2008 + VSB_HYUNDAI_YUEDONG_2 = 34, // 现代-悦动-2012,2011 + VSB_HYUNDAI_SHENGDA_2 = 35, // 现代-新胜达-2009,2006 + VSB_HYUNDAI_SHENGDA_3 = 36, // 现代-新胜达-2012,2011,2010 + VSB_HYUNDAI_LANGDONG_1 = 37, // 现代-朗动-2013,2012 + VSB_HYUNDAI_GERUI_1 = 38, // 现代-格锐-未知 + VSB_HYUNDAI_RUIYI_1 = 39, // 现代-瑞奕-2014 + VSB_HYUNDAI_RUINA_1 = 40, // 现代-瑞纳三厢-2013,2010 + VSB_HYUNDAI_RUINA_2 = 41, // 现代-瑞纳两厢-2014,2013,2011 + VSB_HYUNDAI_RUIFENG_1 = 42, // 现代-瑞风-未知 + VSB_HYUNDAI_SUONATA_1 = 43, // 现代-索纳塔-2008,2007,2006,2004,2003标准型 + VSB_HYUNDAI_SUONATA_2 = 44, // 现代-索纳塔-2010,2009,2008,2006,2004 + VSB_HYUNDAI_SOUNATA_3 = 45, // 现代-索纳塔八-2011,2010 + VSB_HYUNDAI_WEILAKESI_1 = 46, // 现代-维拉克斯-2012,2010,2008,2007 + VSB_HYUNDAI_MEIJIA_1 = 47, // 现代-美佳-未知 + VSB_HYUNDAI_JINKOUHUIYI_1 = 48, // 现代-进口辉翼-未知 + VSB_HYUNDAI_TUSHENG_1 = 49, // 现代-途胜-2005 + VSB_HYUNDAI_TUSHENG_2 = 50, // 现代-途胜-2011,2009,2008,2006 + VSB_HYUNDAI_TUSHENG_3 = 51, // 现代-途胜-2013 + VSB_HYUNDAI_KUPAI_1 = 52, // 现代-酷派-未知 + VSB_HYUNDAI_YASHENTE_1 = 53, // 现代-雅绅特-2008,2006 + VSB_HYUNDAI_YASHENTE_2 = 54, // 现代-雅绅特-2011 + VSB_HYUNDAI_LINGXIANG_1 = 55, // 现代-领翔-2009,2008 + VSB_HYUNDAI_FEISI_1 = 56 // 现代-飞思-2011 }VSB_HYUNDAI_CLASS; -//Ʒ +//奇瑞子品牌类型 typedef enum _VSB_CHERY_CLASS { - VSB_CHERY_OTHER = 0, // - VSB_CHERY_A1 = 1, // A1 - VSB_CHERY_A3 = 2, // A3 - VSB_CHERY_EASTAR = 3, // ֮ - VSB_CHERY_FULWIN = 4, // - VSB_CHERY_QQ = 5, // QQ - VSB_CHERY_E5 = 6, // E5 - VSB_CHERY_COWIN = 7, // - VSB_CHERY_TIGGO = 8, // - VSB_CHERY_A5 = 9, // A5 - VSB_CHERY_S16 = 10, // S16 - VSB_CHERY_YOUYA = 11, // - VSB_CHERY_V5 = 12, // V5 - VSB_CHERY_E3 = 13, // E3 - VSB_CHERY_A1_1 = 14, // -A1-2011,2008,2007 - VSB_CHERY_A3LIANGXIANG_1 = 15, // -A3-2012,2010,2009 - VSB_CHERY_A5_1 = 16, // -A5-2009,2007,2006 - VSB_CHERY_QQ_1 = 17, // -QQ-2006,2005,2004 - VSB_CHERY_QQ_2 = 18, // -QQ-2010,2007,2006 - VSB_CHERY_QQ_3 = 19, // -QQ-2012,2011,2010,2009,2007 - VSB_CHERY_QQ_4 = 20, // -QQ-2012˶ - VSB_CHERY_QQ_5 = 21, // -QQ-2013 - VSB_CHERY_DONGFANGZHIZI_1 = 22, // -֮-2005,2004,2003 - VSB_CHERY_DONGFANGZHIZI_2 = 23, // -֮-2007,2006 - VSB_CHERY_DONGFANGZHIZI_3 = 24, // -֮CROSS-2009,2008,2007 - VSB_CHERY_YOUYA_1 = 25, // --δ֪ - VSB_CHERY_E3_1 = 26, // -E3-2013 - VSB_CHERY_E5_1 = 27, // -E5-2014,2012,2011 - VSB_CHERY_QIYUN1_1 = 28, // -1-2010 - VSB_CHERY_QIYUN1_2 = 29, // -1-2012 - VSB_CHERY_QIYUN_1 = 30, // --2004 - VSB_CHERY_QIYUN_2 = 31, // --2009,2008,2007,2006 - VSB_CHERY_QIYUN2_1 = 32, // -2-2012 - VSB_CHERY_QIYUN2_2 = 33, // -2-2012,2010 - VSB_CHERY_QIYUN3_1 = 34, // -3-2010 - VSB_CHERY_RUIHU_1 = 35, // --2007,2006,2005 - VSB_CHERY_RUIHU_2 = 36, // --2009,2007 - VSB_CHERY_RUIHU_3 = 37, // --2012,2011 - VSB_CHERY_RUIHU_4 = 38, // --2013,2012ԶDVVT - VSB_CHERY_RUIHU_5 = 39, // --2013Ӣ,2012Ӣ - VSB_CHERY_FENGYUN2SANXIANG_1 = 40, // -2-2010 - VSB_CHERY_AIRUIZE7_1 = 41 // -7-2014,2013 + VSB_CHERY_OTHER = 0, // 其他(保留) + VSB_CHERY_A1 = 1, // 奇瑞A1 + VSB_CHERY_A3 = 2, // 奇瑞A3 + VSB_CHERY_EASTAR = 3, // 东方之子 + VSB_CHERY_FULWIN = 4, // 风云 + VSB_CHERY_QQ = 5, // 奇瑞QQ + VSB_CHERY_E5 = 6, // 奇瑞E5 + VSB_CHERY_COWIN = 7, // 旗云 + VSB_CHERY_TIGGO = 8, // 瑞虎 + VSB_CHERY_A5 = 9, // 奇瑞A5 + VSB_CHERY_S16 = 10, // 奇瑞S16 + VSB_CHERY_YOUYA = 11, // 优雅 + VSB_CHERY_V5 = 12, // 奇瑞V5 + VSB_CHERY_E3 = 13, // 奇瑞E3 + VSB_CHERY_A1_1 = 14, // 奇瑞-A1-2011,2008,2007 + VSB_CHERY_A3LIANGXIANG_1 = 15, // 奇瑞-A3两厢-2012,2010,2009 + VSB_CHERY_A5_1 = 16, // 奇瑞-A5-2009,2007,2006 + VSB_CHERY_QQ_1 = 17, // 奇瑞-QQ-2006,2005,2004 + VSB_CHERY_QQ_2 = 18, // 奇瑞-QQ-2010,2007,2006 + VSB_CHERY_QQ_3 = 19, // 奇瑞-QQ-2012,2011,2010,2009,2007 + VSB_CHERY_QQ_4 = 20, // 奇瑞-QQ-2012运动版 + VSB_CHERY_QQ_5 = 21, // 奇瑞-QQ-2013 + VSB_CHERY_DONGFANGZHIZI_1 = 22, // 奇瑞-东方之子-2005,2004,2003 + VSB_CHERY_DONGFANGZHIZI_2 = 23, // 奇瑞-东方之子-2007,2006 + VSB_CHERY_DONGFANGZHIZI_3 = 24, // 奇瑞-东方之子CROSS-2009,2008,2007 + VSB_CHERY_YOUYA_1 = 25, // 奇瑞-优雅-未知 + VSB_CHERY_E3_1 = 26, // 奇瑞-奇瑞E3-2013 + VSB_CHERY_E5_1 = 27, // 奇瑞-奇瑞E5-2014,2012,2011 + VSB_CHERY_QIYUN1_1 = 28, // 奇瑞-旗云1-2010 + VSB_CHERY_QIYUN1_2 = 29, // 奇瑞-旗云1-2012 + VSB_CHERY_QIYUN_1 = 30, // 奇瑞-旗云-2004 + VSB_CHERY_QIYUN_2 = 31, // 奇瑞-旗云-2009,2008,2007,2006 + VSB_CHERY_QIYUN2_1 = 32, // 奇瑞-旗云2-2012 + VSB_CHERY_QIYUN2_2 = 33, // 奇瑞-旗云2-2012豪华型,2010 + VSB_CHERY_QIYUN3_1 = 34, // 奇瑞-旗云3-2010 + VSB_CHERY_RUIHU_1 = 35, // 奇瑞-瑞虎-2007,2006,2005 + VSB_CHERY_RUIHU_2 = 36, // 奇瑞-瑞虎-2009,2007 + VSB_CHERY_RUIHU_3 = 37, // 奇瑞-瑞虎-2012,2011 + VSB_CHERY_RUIHU_4 = 38, // 奇瑞-瑞虎-2013,2012自动DVVT豪华型 + VSB_CHERY_RUIHU_5 = 39, // 奇瑞-瑞虎-2013精英版豪华型,2012精英版舒适型 + VSB_CHERY_FENGYUN2SANXIANG_1 = 40, // 奇瑞-风云2三厢-2010 + VSB_CHERY_AIRUIZE7_1 = 41 // 奇瑞-艾瑞泽7-2014,2013 }VSB_CHERY_CLASS; -//Ʒ +//起亚子品牌类型 typedef enum _VSB_KIA_CLASS { - VSB_KIA_OTHER = 0, // - VSB_KIA_K2 = 1, // K2 - VSB_KIA_K3 = 2, // K3 - VSB_KIA_K5 = 3, // K5 - VSB_KIA_RIO = 4, // ŷ - VSB_KIA_CERATO = 5, // ͼ - VSB_KIA_SPORTAGER = 6, // ʨ - VSB_KIA_SOUL = 7, // - VSB_KIA_ZHIPAO = 8, // - VSB_KIA_CARENS = 9, // - VSB_KIA_CARNIVAL = 10, // λ - VSB_KIA_OPTIMA = 11, // Զ - VSB_KIA_OPIRUS = 12, // ŷ˹ - VSB_KIA_MAXIMA = 13, // ǧ - VSB_KIA_FORTE = 14, // - VSB_KIA_SORENTO = 15, // - VSB_KIA_K2_1 = 16, // -K2-2013,2012,2011 - VSB_KIA_K3_1 = 17, // -K3-2012 - VSB_KIA_K5_1 = 18, // -K5-2012,2011 - VSB_KIA_RUIOU_1 = 19, // -RIOŷ-2009,2007 - VSB_KIA_QIANLIMA_1 = 20, // -ǧ-2004 - VSB_KIA_QIANLIMA_2 = 21, // -ǧ-2006,2005 - VSB_KIA_JIAHUA_1 = 22, // -λ-δ֪ - VSB_KIA_XINJIALE_1 = 23, // -¼-2011 - VSB_KIA_ZHIPAO_1 = 24, // --2014,2012,2011,2010 - VSB_KIA_SHIPAO_1 = 25, // -ʨ-2008,2007,2005 - VSB_KIA_SHIPAO_2 = 26, // -ʨ-2011,2009 - VSB_KIA_SHIPAO_3 = 27, // -ʨ-2012 - VSB_KIA_SHIPAO_4 = 28, // -ʨ-2013 - VSB_KIA_FURUIDI_1 = 29, // --2012,2011,2009 - VSB_KIA_FURUIDI_2 = 30, // --2014 - VSB_KIA_XIUER_1 = 31, // --2012,2010 - VSB_KIA_SUOLANTUO_1 = 32, // --2006 - VSB_KIA_SUOLANTUO_2 = 33, // --2012,2010,2009 - VSB_KIA_SAILATU_1 = 34, // -ͼ-2006,2005 - VSB_KIA_SAILATU_2 = 35, // -ͼ-2007 - VSB_KIA_SAILATU_3 = 36, // -ͼ-2012,2010GLS - VSB_KIA_YUANJIAN_1 = 37 // -Զ-δ֪ + VSB_KIA_OTHER = 0, // 其他(保留) + VSB_KIA_K2 = 1, // 起亚K2 + VSB_KIA_K3 = 2, // 起亚K3 + VSB_KIA_K5 = 3, // 起亚K5 + VSB_KIA_RIO = 4, // 锐欧 + VSB_KIA_CERATO = 5, // 赛拉图 + VSB_KIA_SPORTAGER = 6, // 狮跑 + VSB_KIA_SOUL = 7, // 秀尔 + VSB_KIA_ZHIPAO = 8, // 智跑 + VSB_KIA_CARENS = 9, // 佳乐 + VSB_KIA_CARNIVAL = 10, // 嘉华 + VSB_KIA_OPTIMA = 11, // 远舰 + VSB_KIA_OPIRUS = 12, // 欧菲莱斯 + VSB_KIA_MAXIMA = 13, // 千里马 + VSB_KIA_FORTE = 14, // 福瑞迪 + VSB_KIA_SORENTO = 15, // 索兰托 + VSB_KIA_K2_1 = 16, // 起亚-K2-2013,2012,2011 + VSB_KIA_K3_1 = 17, // 起亚-K3-2012 + VSB_KIA_K5_1 = 18, // 起亚-K5-2012,2011 + VSB_KIA_RUIOU_1 = 19, // 起亚-RIO锐欧-2009,2007 + VSB_KIA_QIANLIMA_1 = 20, // 起亚-千里马-2004 + VSB_KIA_QIANLIMA_2 = 21, // 起亚-千里马-2006,2005 + VSB_KIA_JIAHUA_1 = 22, // 起亚-嘉华-未知 + VSB_KIA_XINJIALE_1 = 23, // 起亚-新佳乐-2011 + VSB_KIA_ZHIPAO_1 = 24, // 起亚-智跑-2014,2012,2011,2010 + VSB_KIA_SHIPAO_1 = 25, // 起亚-狮跑-2008,2007,2005 + VSB_KIA_SHIPAO_2 = 26, // 起亚-狮跑-2011,2009 + VSB_KIA_SHIPAO_3 = 27, // 起亚-狮跑-2012 + VSB_KIA_SHIPAO_4 = 28, // 起亚-狮跑-2013 + VSB_KIA_FURUIDI_1 = 29, // 起亚-福瑞迪-2012,2011,2009 + VSB_KIA_FURUIDI_2 = 30, // 起亚-福瑞迪-2014 + VSB_KIA_XIUER_1 = 31, // 起亚-秀尔-2012,2010 + VSB_KIA_SUOLANTUO_1 = 32, // 起亚-索兰托-2006 + VSB_KIA_SUOLANTUO_2 = 33, // 起亚-索兰托-2012,2010,2009 + VSB_KIA_SAILATU_1 = 34, // 起亚-赛拉图-2006,2005 + VSB_KIA_SAILATU_2 = 35, // 起亚-赛拉图-2007 + VSB_KIA_SAILATU_3 = 36, // 起亚-赛拉图-2012,2010GLS + VSB_KIA_YUANJIAN_1 = 37 // 起亚-远舰-未知 }VSB_KIA_CLASS; -//Ʒ +//奔驰子品牌类型 typedef enum _VSB_BENZ_CLASS { - VSB_BENZ_OTHER = 0, // - VSB_BENZ_C = 1, // C - VSB_BENZ_E = 2, // E - VSB_BENZ_GLK = 3, // GLK - VSB_BENZ_WEITING = 4, // -PINYIN - VSB_BENZ_SPRINTER = 5, // - VSB_BENZ_VIANO = 6, // Ψŵ - VSB_BENZ_M = 7, // Mϵ - VSB_BENZ_CLK = 8, // CLKϵ - VSB_BENZ_G = 9, // Gϵ - VSB_BENZ_GL = 10, // GLϵ - VSB_BENZ_R = 11, // Rϵ - VSB_BENZ_S = 12, // Sϵ - VSB_BENZ_A = 13, // Aϵ - VSB_BENZ_SMART = 14, // ˹() - VSB_BENZ_B = 15, // Bϵ - VSB_BENZ_SLK = 16, // SLKϵ - VSB_BENZ_MB100 = 17, // MB100 - VSB_BENZ_VITO = 18, // - VSB_BENZ_CLS = 19, // CLSϵ - VSB_BENZ_SL = 20, // SLϵ - VSB_BENZ_AJI_1 = 21, // -A-2011,2009 - VSB_BENZ_AJI_2 = 22, // -A-2013 - VSB_BENZ_BJI_1 = 23, // -B-2010,2009 - VSB_BENZ_CJI_1 = 24, // -C-2010,2008,2007ʱ - VSB_BENZ_CJI_2 = 25, // -C-2013,2011,CGI - VSB_BENZ_CJI_3 = 26, // -C-2013,2011ʱ - VSB_BENZ_EJI_1 = 27, // -E-2002 - VSB_BENZ_EJI_2 = 28, // -E-2007,2006 - VSB_BENZ_EJI_3 = 29, // -E-2013,2012,2011,2010,2009 - VSB_BENZ_EJI_4 = 30, // -E-2013,2012,2011,2010,2009ʱ - VSB_BENZ_GLKJI_1 = 31, // -GLK-2012,2011 - VSB_BENZ_GLKJI_2 = 32, // -GLK-2012,2011,2008 - VSB_BENZ_GLKJI_3 = 33, // -GLK-2014,2013 - VSB_BENZ_GLJI_1 = 34, // -GL-2011 - VSB_BENZ_GLJI_2 = 35, // -GL-2011,2010 - VSB_BENZ_GLJI_3 = 36, // -GL-2012,2010 - VSB_BENZ_GJI_1 = 37, // -G-2013,2010,2009 - VSB_BENZ_MB100_1 = 38, // -MB100-2000 - VSB_BENZ_MLJI_1 = 39, // -ML-2006,2005 - VSB_BENZ_MLJI_2 = 40, // -ML-2010,2008 - VSB_BENZ_MLJI_3 = 41, // -ML-2014,2012 - VSB_BENZ_RJI_1 = 42, // -R-2006 - VSB_BENZ_RJI_2 = 43, // -R-2007 - VSB_BENZ_RJI_3 = 44, // -R-2014,2011,2010,2009 - VSB_BENZ_SLKJI_2 = 45, // -SLK-2006,2004 - VSB_BENZ_SLKJI_3 = 46, // -SLK-2010,2009 - VSB_BENZ_SLKJI_1 = 47, // -SLK-2011 - VSB_BENZ_SJI_1 = 48, // -S-2004 - VSB_BENZ_SJI_2 = 49, // -S-2009_Hybrid,2008,2006 - VSB_BENZ_SJI_3 = 50, // -S-2009,2008 - VSB_BENZ_SJI_4 = 51, // -S-2012,2011,2010 - VSB_BENZ_LINGTE_1 = 52, // --2013,2012,2011 - VSB_BENZ_WEIYANUO_1 = 53, // -Ψŵ-2010,2006,2004 - VSB_BENZ_WEIYANUO_2 = 54, // -Ψŵ-2014,2013,2012,2011 - VSB_BENZ_WEITING_1 = 55, // --2013,2011,2010 - VSB_BENZ_KECHE_1 = 56 // -ͳ1-A + VSB_BENZ_OTHER = 0, // 其他(保留) + VSB_BENZ_C = 1, // 奔驰C级 + VSB_BENZ_E = 2, // 奔驰E级 + VSB_BENZ_GLK = 3, // 奔驰GLK级 + VSB_BENZ_WEITING = 4, // 威霆-PINYIN + VSB_BENZ_SPRINTER = 5, // 凌特 + VSB_BENZ_VIANO = 6, // 唯雅诺 + VSB_BENZ_M = 7, // 奔驰M系 + VSB_BENZ_CLK = 8, // 奔驰CLK系 + VSB_BENZ_G = 9, // 奔驰G系 + VSB_BENZ_GL = 10, // 奔驰GL系 + VSB_BENZ_R = 11, // 奔驰R系 + VSB_BENZ_S = 12, // 奔驰S系 + VSB_BENZ_A = 13, // 奔驰A系 + VSB_BENZ_SMART = 14, // 斯玛特(精灵) + VSB_BENZ_B = 15, // 奔驰B系 + VSB_BENZ_SLK = 16, // 奔驰SLK系 + VSB_BENZ_MB100 = 17, // 奔驰MB100 + VSB_BENZ_VITO = 18, // 威特 + VSB_BENZ_CLS = 19, // 奔驰CLS系 + VSB_BENZ_SL = 20, // 奔驰SL系 + VSB_BENZ_AJI_1 = 21, // 奔驰-A级-2011,2009 + VSB_BENZ_AJI_2 = 22, // 奔驰-A级-2013 + VSB_BENZ_BJI_1 = 23, // 奔驰-B级-2010,2009 + VSB_BENZ_CJI_1 = 24, // 奔驰-C级-2010,2008,2007时尚型 + VSB_BENZ_CJI_2 = 25, // 奔驰-C级-2013,2011,CGI + VSB_BENZ_CJI_3 = 26, // 奔驰-C级-2013,2011时尚型 + VSB_BENZ_EJI_1 = 27, // 奔驰-E级-2002 + VSB_BENZ_EJI_2 = 28, // 奔驰-E级-2007,2006 + VSB_BENZ_EJI_3 = 29, // 奔驰-E级-2013,2012,2011,2010,2009 + VSB_BENZ_EJI_4 = 30, // 奔驰-E级-2013,2012,2011,2010,2009时尚型 + VSB_BENZ_GLKJI_1 = 31, // 奔驰-GLK级-2012,2011 + VSB_BENZ_GLKJI_2 = 32, // 奔驰-GLK级-2012,2011豪华型,2008 + VSB_BENZ_GLKJI_3 = 33, // 奔驰-GLK级-2014,2013 + VSB_BENZ_GLJI_1 = 34, // 奔驰-GL级-2011 + VSB_BENZ_GLJI_2 = 35, // 奔驰-GL级-2011尊贵型,2010 + VSB_BENZ_GLJI_3 = 36, // 奔驰-GL级-2012,2010北美版 + VSB_BENZ_GJI_1 = 37, // 奔驰-G级-2013,2010,2009 + VSB_BENZ_MB100_1 = 38, // 奔驰-MB100-2000 + VSB_BENZ_MLJI_1 = 39, // 奔驰-ML级-2006,2005 + VSB_BENZ_MLJI_2 = 40, // 奔驰-ML级-2010,2008 + VSB_BENZ_MLJI_3 = 41, // 奔驰-ML级-2014,2012 + VSB_BENZ_RJI_1 = 42, // 奔驰-R级-2006 + VSB_BENZ_RJI_2 = 43, // 奔驰-R级-2007 + VSB_BENZ_RJI_3 = 44, // 奔驰-R级-2014,2011,2010,2009 + VSB_BENZ_SLKJI_2 = 45, // 奔驰-SLK级-2006,2004 + VSB_BENZ_SLKJI_3 = 46, // 奔驰-SLK级-2010,2009 + VSB_BENZ_SLKJI_1 = 47, // 奔驰-SLK级-2011 + VSB_BENZ_SJI_1 = 48, // 奔驰-S级-2004 + VSB_BENZ_SJI_2 = 49, // 奔驰-S级-2009_Hybrid,2008,2006 + VSB_BENZ_SJI_3 = 50, // 奔驰-S级-2009,2008商务型 + VSB_BENZ_SJI_4 = 51, // 奔驰-S级-2012,2011,2010 + VSB_BENZ_LINGTE_1 = 52, // 奔驰-凌特-2013,2012,2011 + VSB_BENZ_WEIYANUO_1 = 53, // 奔驰-唯雅诺-2010,2006,2004 + VSB_BENZ_WEIYANUO_2 = 54, // 奔驰-唯雅诺-2014,2013,2012,2011 + VSB_BENZ_WEITING_1 = 55, // 奔驰-威霆-2013,2011,2010 + VSB_BENZ_KECHE_1 = 56 // 奔驰-客车车型1-A款 }VSB_BENZ_CLASS; -//˹´Ʒ +//斯柯达子品牌类型 typedef enum _VSB_SKODA_CLASS { - VSB_SKODA_OTHER = 0, // - VSB_SKODA_HAORUI = 1, // - VSB_SKODA_FABIA = 2, // - VSB_SKODA_OCTAVIA = 3, // - VSB_SKODA_SUPERB = 4, // - VSB_SKODA_SPACEBACK = 5, // 꿶 - VSB_SKODA_RAPID = 6, // - VSB_SKODA_YETI = 7, // Ұ - VSB_SKODA_HAORUI_1 = 8, // ˹´--2013,2012,2010,2009 - VSB_SKODA_MINGRUI_1 = 9, // ˹´--2009,2008,2007 - VSB_SKODA_MINGRUI_2 = 10, // ˹´--2014,2013,2012,2011,2010 - VSB_SKODA_MINGRUI_3 = 11, // ˹´-RS-2010 - VSB_SKODA_XINRUI_1 = 12, // ˹´--2013ѡ - VSB_SKODA_JINGRUI_1 = 13, // ˹´--2011,2009,2008 - VSB_SKODA_JINGRUI_2 = 14, // ˹´--2014,2013,2012 - VSB_SKODA_JINGRUI_3 = 15, // ˹´--2014,2013,2012Sport - VSB_SKODA_SUPAI_1 = 16, // ˹´--2013 - VSB_SKODA_YEDI_1 = 17 // ˹´-Ұ-2014,2013 + VSB_SKODA_OTHER = 0, // 其他(保留) + VSB_SKODA_HAORUI = 1, // 昊锐 + VSB_SKODA_FABIA = 2, // 晶锐 + VSB_SKODA_OCTAVIA = 3, // 明锐 + VSB_SKODA_SUPERB = 4, // 速派 + VSB_SKODA_SPACEBACK = 5, // 昕动 + VSB_SKODA_RAPID = 6, // 昕锐 + VSB_SKODA_YETI = 7, // 野帝 + VSB_SKODA_HAORUI_1 = 8, // 斯柯达-昊锐-2013,2012,2010,2009 + VSB_SKODA_MINGRUI_1 = 9, // 斯柯达-明锐-2009,2008,2007 + VSB_SKODA_MINGRUI_2 = 10, // 斯柯达-明锐-2014,2013,2012,2011,2010 + VSB_SKODA_MINGRUI_3 = 11, // 斯柯达-明锐RS-2010 + VSB_SKODA_XINRUI_1 = 12, // 斯柯达-昕锐-2013乐选型 + VSB_SKODA_JINGRUI_1 = 13, // 斯柯达-晶锐-2011,2009,2008 + VSB_SKODA_JINGRUI_2 = 14, // 斯柯达-晶锐-2014,2013,2012 + VSB_SKODA_JINGRUI_3 = 15, // 斯柯达-晶锐-2014,2013,2012Sport版 + VSB_SKODA_SUPAI_1 = 16, // 斯柯达-速派-2013 + VSB_SKODA_YEDI_1 = 17 // 斯柯达-野帝-2014,2013 }VSB_SKODA_CLASS; -//Ʒ +//东风子品牌类型 typedef enum _VSB_DONGFENG_CLASS { - VSB_DONGFENG_OTHER = 0, // - VSB_DONGFENG_JOYEARX5 = 1, // X5 - VSB_DONGFENG_LINGZHI = 2, // - VSB_DONGFENG_JOYEARX3 = 3, // X3 - VSB_DONGFENG_JOYEAR = 4, // - VSB_DONGFENG_FENGXINGCM7 = 5, // CM7 - VSB_DONGFENG_YUFENG = 6, // - VSB_DONGFENG_FENGSHENA60 = 7, // A60 - VSB_DONGFENG_FENGSHENS30 = 8, // S30 - VSB_DONGFENG_FENGSHENH30CROSS = 9, // H30-CROSS - VSB_DONGFENG_PICKUP = 10, // Ƥ - VSB_DONGFENG_ZHONGXINGMIANBAOCHE = 11, // - VSB_DONGFENG_XIAOXINGMIANBAOCHE = 12, // С - VSB_DONGFENG_ZHONGXINGVAN = 13, // ͻ - VSB_DONGFENG_QINGXINGXIANGSHIVAN = 14, // ʽ - VSB_DONGFENG_QINGZHONGXINGVAN = 15, // ͨ - VSB_DONGFENG_FENGSHENMERCURY = 16, // ˮ - VSB_DONGFENG_SUCCE = 17, // ˧ - VSB_DONGFENG_ODIN = 18, // ¶ - VSB_DONGFENG_YUMSUN = 19, // - VSB_DONGFENG_RUIQI = 20, // - VSB_DONGFENG_FENGGUANG = 21, // - VBR_DONGFENG_C35_1 = 22, // -C35-2013 - VBR_DONGFENG_K07_1 = 23, // -K07-2008 - VBR_DONGFENG_K07_2 = 24, // -K07-2010,2006 - VBR_DONGFENG_V21_1 = 25, // -V21-2011 - VBR_DONGFENG_JIALONG_1 = 26, // --ػ - VBR_DONGFENG_XKFG_1 = 27, // -С-2013 - VBR_DONGFENG_CV03_1 = 28, // -CV03-2012 - VBR_DONGFENG_KAIPUTE_1 = 29, // --C390 - VBR_DONGFENG_DUOLIKA_1 = 30, // --S2800 - VBR_DONGFENG_DUOLIKA_2 = 31, // --XLп - VBR_DONGFENG_DUOLIKA_3 = 32, // --п - VBR_DONGFENG_TIANJIN_1 = 33, // --4X2ػ - VBR_DONGFENG_TIANJIN_2 = 34, // --A - VBR_DONGFENG_XBW_1 = 35, // -С-Ῠ1 - VBR_DONGFENG_XBW_2 = 36, // -С-Ῠ2 - VBR_DONGFENG_MENGKA_1 = 37, // -ο-Ῠ - VBR_DONGFENG_FURUIKA_1 = 38, // --Ῠ1 - VBR_DONGFENG_RUIQI_1 = 39, // -Ƥ-2013,2010,2009 - VBR_DONGFENG_A60_1 = 40, // -A60-2014,2012 - VBR_DONGFENG_H30_1 = 41, // -H30-Cross-2012,2011 - VBR_DONGFENG_H30_2 = 42, // -H30-Cross-2014,2013 - VBR_DONGFENG_H30_3 = 43, // -H30-2012 - VBR_DONGFENG_JINGYI_1 = 44, // --2014_2012LV,2011 - VBR_DONGFENG_JINGYI_2 = 45, // --2014_2012XL,2011,2010,2009,2008,2007 - VBR_DONGFENG_JINGYI_3 = 46, // -X5-2014,2013 - VBR_DONGFENG_LINGZHI_1 = 47, // --2004 - VBR_DONGFENG_LINGZHI_2 = 48, // --2011,2008,2007 - VBR_DONGFENG_LINGZHI_3 = 49, // --2011Q3׼,2010Q7 - VBR_DONGFENG_LINGZHI_4 = 50, // --2014_2013M3 - VBR_DONGFENG_LINGZHI_5 = 51 // --2014_2013V3,2011M3_ð_ + VSB_DONGFENG_OTHER = 0, // 其他(保留) + VSB_DONGFENG_JOYEARX5 = 1, // 景逸X5 + VSB_DONGFENG_LINGZHI = 2, // 菱智 + VSB_DONGFENG_JOYEARX3 = 3, // 景逸X3 + VSB_DONGFENG_JOYEAR = 4, // 景逸 + VSB_DONGFENG_FENGXINGCM7 = 5, // 风行CM7 + VSB_DONGFENG_YUFENG = 6, // 御风 + VSB_DONGFENG_FENGSHENA60 = 7, // 风神A60 + VSB_DONGFENG_FENGSHENS30 = 8, // 风神S30 + VSB_DONGFENG_FENGSHENH30CROSS = 9, // 风神H30-CROSS + VSB_DONGFENG_PICKUP = 10, // 东风皮卡 + VSB_DONGFENG_ZHONGXINGMIANBAOCHE = 11, // 东风中型面包车 + VSB_DONGFENG_XIAOXINGMIANBAOCHE = 12, // 东风小型面包车 + VSB_DONGFENG_ZHONGXINGVAN = 13, // 东风重型货车 + VSB_DONGFENG_QINGXINGXIANGSHIVAN = 14, // 东风轻型厢式货车 + VSB_DONGFENG_QINGZHONGXINGVAN = 15, // 东风轻中型普通货车 + VSB_DONGFENG_FENGSHENMERCURY = 16, // 风神水星 + VSB_DONGFENG_SUCCE = 17, // 帅客 + VSB_DONGFENG_ODIN = 18, // 奥丁 + VSB_DONGFENG_YUMSUN = 19, // 御轩 + VSB_DONGFENG_RUIQI = 20, // 锐骐 + VSB_DONGFENG_FENGGUANG = 21, // 风光 + VBR_DONGFENG_C35_1 = 22, // 东风-C35-2013 + VBR_DONGFENG_K07_1 = 23, // 东风-K07-2008 + VBR_DONGFENG_K07_2 = 24, // 东风-K07-2010,2006 + VBR_DONGFENG_V21_1 = 25, // 东风-V21-2011 + VBR_DONGFENG_JIALONG_1 = 26, // 东风-东风嘉龙-载货车 + VBR_DONGFENG_XKFG_1 = 27, // 东风-东风小康风光-2013 + VBR_DONGFENG_CV03_1 = 28, // 东风-俊风CV03-2012 + VBR_DONGFENG_KAIPUTE_1 = 29, // 东风-凯普特-C390 + VBR_DONGFENG_DUOLIKA_1 = 30, // 东风-多利卡-S2800 + VBR_DONGFENG_DUOLIKA_2 = 31, // 东风-多利卡-XL中卡 + VBR_DONGFENG_DUOLIKA_3 = 32, // 东风-多利卡-中卡 + VBR_DONGFENG_TIANJIN_1 = 33, // 东风-天锦-4X2载货车 + VBR_DONGFENG_TIANJIN_2 = 34, // 东风-天锦-A款 + VBR_DONGFENG_XBW_1 = 35, // 东风-小霸王-轻卡1 + VBR_DONGFENG_XBW_2 = 36, // 东风-小霸王-轻卡2 + VBR_DONGFENG_MENGKA_1 = 37, // 东风-梦卡-轻卡 + VBR_DONGFENG_FURUIKA_1 = 38, // 东风-福瑞卡-轻卡1 + VBR_DONGFENG_RUIQI_1 = 39, // 东风-锐骐皮卡-2013,2010,2009 + VBR_DONGFENG_A60_1 = 40, // 东风风神-A60-2014,2012 + VBR_DONGFENG_H30_1 = 41, // 东风风神-H30-Cross-2012,2011 + VBR_DONGFENG_H30_2 = 42, // 东风风神-H30-Cross-2014,2013 + VBR_DONGFENG_H30_3 = 43, // 东风风神-H30-2012 + VBR_DONGFENG_JINGYI_1 = 44, // 东风风行-景逸-2014_2012LV,2011豪华型 + VBR_DONGFENG_JINGYI_2 = 45, // 东风风行-景逸-2014_2012XL,2011,2010,2009,2008,2007 + VBR_DONGFENG_JINGYI_3 = 46, // 东风风行-景逸X5-2014,2013 + VBR_DONGFENG_LINGZHI_1 = 47, // 东风风行-菱智-2004 + VBR_DONGFENG_LINGZHI_2 = 48, // 东风风行-菱智-2011,2008,2007 + VBR_DONGFENG_LINGZHI_3 = 49, // 东风风行-菱智-2011Q3标准型,2010Q7 + VBR_DONGFENG_LINGZHI_4 = 50, // 东风风行-菱智-2014_2013M3 + VBR_DONGFENG_LINGZHI_5 = 51 // 东风风行-菱智-2014_2013V3,2011M3_商用版_舒适型 }VSB_DONGFENG_CLASS; -//ǵƷ +//比亚迪子品牌类型 typedef enum _VSB_BYD_CLASS { - VSB_BYD_OTHER = 0, // - VSB_BYD_F0 = 1, // ǵF0 - VSB_BYD_F3 = 2, // ǵF3 - VSB_BYD_F3R = 3, // ǵF3R - VSB_BYD_F6 = 4, // ǵF6 - VSB_BYD_G3 = 5, // ǵG3 - VSB_BYD_G3R = 6, // ǵG3R - VSB_BYD_G6 = 7, // ǵG6 - VSB_BYD_L3 = 8, // ǵL3 - VSB_BYD_M6 = 9, // ǵM6 - VSB_BYD_S6 = 10, // ǵS6 - VSB_BYD_SURUI = 11, // - VSB_BYD_FOLEL = 12, // ش - VSB_BYD_SIRUI = 13, // ˼ - VSB_BYD_MT5 = 14, // ǵMT5() - VSB_BYD_F0_1 = 15, // ǵ-F0-2013,2012,2011,2010,2009,2008 - VSB_BYD_F3R_1 = 16, // ǵ-F3R-2011,2009,2008,2007 - VSB_BYD_F6_1 = 17, // ǵ-F6-2011,2009,2008 - VSB_BYD_G3R_1 = 18, // ǵ-G3R-2011 - VSB_BYD_G6_1 = 19, // ǵ-G6-2013,2012,2011 - VSB_BYD_L3_1 = 20, // ǵ-L3-2013,2012,2011,2010 - VSB_BYD_M6_1 = 21, // ǵ-M6-2013,2011,2010 - VSB_BYD_S6_1 = 22, // ǵ-S6-2014,2013,2012,2011 - VSB_BYD_FULAIER_1 = 23, // ǵ--2005 - VSB_BYD_SURUI_1 = 24 // ǵ--2014,2013,2012 + VSB_BYD_OTHER = 0, // 其他(保留) + VSB_BYD_F0 = 1, // 比亚迪F0 + VSB_BYD_F3 = 2, // 比亚迪F3 + VSB_BYD_F3R = 3, // 比亚迪F3R + VSB_BYD_F6 = 4, // 比亚迪F6 + VSB_BYD_G3 = 5, // 比亚迪G3 + VSB_BYD_G3R = 6, // 比亚迪G3R + VSB_BYD_G6 = 7, // 比亚迪G6 + VSB_BYD_L3 = 8, // 比亚迪L3 + VSB_BYD_M6 = 9, // 比亚迪M6 + VSB_BYD_S6 = 10, // 比亚迪S6 + VSB_BYD_SURUI = 11, // 速锐 + VSB_BYD_FOLEL = 12, // 秦川福莱尔 + VSB_BYD_SIRUI = 13, // 思锐 + VSB_BYD_MT5 = 14, // 比亚迪MT5(精灵) + VSB_BYD_F0_1 = 15, // 比亚迪-F0-2013,2012,2011,2010,2009,2008 + VSB_BYD_F3R_1 = 16, // 比亚迪-F3R-2011,2009,2008,2007 + VSB_BYD_F6_1 = 17, // 比亚迪-F6-2011,2009,2008 + VSB_BYD_G3R_1 = 18, // 比亚迪-G3R-2011 + VSB_BYD_G6_1 = 19, // 比亚迪-G6-2013,2012,2011 + VSB_BYD_L3_1 = 20, // 比亚迪-L3-2013,2012,2011,2010 + VSB_BYD_M6_1 = 21, // 比亚迪-M6-2013,2011,2010 + VSB_BYD_S6_1 = 22, // 比亚迪-S6-2014,2013,2012,2011 + VSB_BYD_FULAIER_1 = 23, // 比亚迪-福莱尔-2005豪华型 + VSB_BYD_SURUI_1 = 24 // 比亚迪-速锐-2014,2013,2012 }VSB_BYD_CLASS; -//ľƷ +//铃木子品牌类型 typedef enum _VSB_SUZUKI_CLASS { - VSB_SUZUKI_OTHER = 0, // - VSB_SUZUKI_ALTO = 1, // - VSB_SUZUKI_SCROSS = 2, // Ԧ - VSB_SUZUKI_SWIFT = 3, // - VSB_SUZUKI_SX4 = 4, // - VSB_SUZUKI_LINGYANG = 5, // - VSB_SUZUKI_BEIDOUXING = 6, // - VSB_SUZUKI_LIANAA6 = 7, // -A6 - VSB_SUZUKI_LANDY = 8, // ˵ - VSB_SUZUKI_SPLASH = 9, // ϲ - VSB_SUZUKI_GRANDVITARA = 10, // ά - VSB_SUZUKI_JIMNY = 11, // ķ - VSB_SUZUKI_KAZASHI = 12, // - VSB_SUZUKI_LIANA = 13, // - VSB_SUZUKI_LIANA_1 = 14, // ľ--2012,2011,2010,2008,2007,2005 - VSB_SUZUKI_LIANA_2 = 15, // ľ--2013,2012,2011 - VSB_SUZUKI_BEIDOUXING_1 = 16, // ľ--2012,2011,2010,2009,2008,2007,2005,2004׼ - VSB_SUZUKI_BEIDOUXING_2 = 17, // ľ--2013,2012,2011,2010,2009,2008,2007,2005,2004,2003 - VSB_SUZUKI_BEIDOUXING_3 = 18, // ľ--2013,2012,2011,2010,2009,2008,2007,2005,2004,2003 - VSB_SUZUKI_BEIDOUXING_4 = 19, // ľ--2013X5 - VSB_SUZUKI_JIMUNI_1 = 20, // ľ-ķ-2011,2010,2009,2007 - VSB_SUZUKI_JIMUNI_2 = 21, // ľ-ķ-2012 - VSB_SUZUKI_SX4_1 = 22, // ľ-SX4-2008,2006 - VSB_SUZUKI_SX4_2 = 23, // ľ-SX4-2010,2009 - VSB_SUZUKI_SX4_3 = 24, // ľ-SX4-2011A,2009,2008,2007 - VSB_SUZUKI_SX4_4 = 25, // ľ-SX4-2011B - VSB_SUZUKI_SX4_5 = 26, // ľ-SX4-2013,2012,2011 - VSB_SUZUKI_ALTO_1 = 27, // ľ--2006,2001,2000,1999,1993׼ - VSB_SUZUKI_ALTO_2 = 28, // ľ--2006,2004,2001,2000,1999,1993 - VSB_SUZUKI_ALTO_3 = 29, // ľ--2013 - VSB_SUZUKI_ALTO_4 = 30, // ľ--2014,2012,2011,2010,2009 - VSB_SUZUKI_SPLASH_1 = 31, // ľ-ϲ-2013,2012,2011 - VSB_SUZUKI_LANDY_1 = 32, // ľ-˵-2011,2010,2007 - VSB_SUZUKI_LINGYANG_2 = 33, // ľ--2006,2004,2003 - VSB_SUZUKI_LINGYANG_3 = 34, // ľ--2009,2008,2007 - VSB_SUZUKI_LINGYANG_4 = 35, // ľ--2011 - VSB_SUZUKI_LINGYANG_5 = 36, // ľ--2012 - VSB_SUZUKI_GRANDVITARA_1 = 37, // ľ-ά-2011,2008,2007,2006 - VSB_SUZUKI_FENGYU_1 = 38, // ľ-Ԧ-2014 - VSB_SUZUKI_SWIFT_1 = 39, // ľ--2011_1.3L,2009,2008,2007,2005 - VSB_SUZUKI_SWIFT_2 = 40, // ľ--2012,2011 - VSB_SUZUKI_KINGCHANG_1 = 41, // ľ--2004 - VSB_SUZUKI_LINGYANG_1 = 42 // ľ--2002 + VSB_SUZUKI_OTHER = 0, // 其他(保留) + VSB_SUZUKI_ALTO = 1, // 长安奥拓 + VSB_SUZUKI_SCROSS = 2, // 锋驭 + VSB_SUZUKI_SWIFT = 3, // 雨燕 + VSB_SUZUKI_SX4 = 4, // 天语 + VSB_SUZUKI_LINGYANG = 5, // 羚羊 + VSB_SUZUKI_BEIDOUXING = 6, // 北斗星 + VSB_SUZUKI_LIANAA6 = 7, // 利亚纳-A6 + VSB_SUZUKI_LANDY = 8, // 浪迪 + VSB_SUZUKI_SPLASH = 9, // 派喜 + VSB_SUZUKI_GRANDVITARA = 10, // 超级维特拉 + VSB_SUZUKI_JIMNY = 11, // 吉姆尼 + VSB_SUZUKI_KAZASHI = 12, // 凯泽西 + VSB_SUZUKI_LIANA = 13, // 利亚纳 + VSB_SUZUKI_LIANA_1 = 14, // 铃木-利亚纳三厢-2012,2011,2010,2008,2007,2005 + VSB_SUZUKI_LIANA_2 = 15, // 铃木-利亚纳两厢-2013,2012,2011 + VSB_SUZUKI_BEIDOUXING_1 = 16, // 铃木-北斗星-2012,2011,2010,2009,2008,2007,2005,2004标准型 + VSB_SUZUKI_BEIDOUXING_2 = 17, // 铃木-北斗星-2013,2012,2011,2010,2009,2008,2007,2005,2004,2003 + VSB_SUZUKI_BEIDOUXING_3 = 18, // 铃木-北斗星-2013,2012,2011,2010,2009,2008,2007,2005,2004,2003适用型 + VSB_SUZUKI_BEIDOUXING_4 = 19, // 铃木-北斗星-2013X5 + VSB_SUZUKI_JIMUNI_1 = 20, // 铃木-吉姆尼-2011,2010,2009,2007 + VSB_SUZUKI_JIMUNI_2 = 21, // 铃木-吉姆尼-2012 + VSB_SUZUKI_SX4_1 = 22, // 铃木-天语SX4三厢-2008,2006 + VSB_SUZUKI_SX4_2 = 23, // 铃木-天语SX4三厢-2010,2009 + VSB_SUZUKI_SX4_3 = 24, // 铃木-天语SX4两厢-2011A,2009,2008,2007 + VSB_SUZUKI_SX4_4 = 25, // 铃木-天语SX4两厢-2011B + VSB_SUZUKI_SX4_5 = 26, // 铃木-天语SX4尚悦-2013,2012,2011 + VSB_SUZUKI_ALTO_1 = 27, // 铃木-奥拓-2006,2001,2000,1999,1993标准型 + VSB_SUZUKI_ALTO_2 = 28, // 铃木-奥拓-2006,2004,2001,2000,1999,1993 + VSB_SUZUKI_ALTO_3 = 29, // 铃木-奥拓-2013 + VSB_SUZUKI_ALTO_4 = 30, // 铃木-奥拓-2014,2012,2011,2010,2009 + VSB_SUZUKI_SPLASH_1 = 31, // 铃木-派喜-2013,2012,2011 + VSB_SUZUKI_LANDY_1 = 32, // 铃木-浪迪-2011,2010,2007 + VSB_SUZUKI_LINGYANG_2 = 33, // 铃木-羚羊-2006,2004,2003 + VSB_SUZUKI_LINGYANG_3 = 34, // 铃木-羚羊-2009,2008,2007 + VSB_SUZUKI_LINGYANG_4 = 35, // 铃木-羚羊-2011 + VSB_SUZUKI_LINGYANG_5 = 36, // 铃木-羚羊-2012 + VSB_SUZUKI_GRANDVITARA_1 = 37, // 铃木-超级维特拉-2011,2008,2007,2006 + VSB_SUZUKI_FENGYU_1 = 38, // 铃木-锋驭-2014 + VSB_SUZUKI_SWIFT_1 = 39, // 铃木-雨燕-2011_1.3L,2009,2008,2007,2005 + VSB_SUZUKI_SWIFT_2 = 40, // 铃木-雨燕-2012,2011 + VSB_SUZUKI_KINGCHANG_1 = 41, // 铃木-昌铃王-2004 + VSB_SUZUKI_LINGYANG_1 = 42 // 铃木-羚羊-2002 }VSB_SUZUKI_CLASS; -//Ʒ +//五菱子品牌类型 typedef enum _VSB_SGMW_CLASS { - VSB_SGMW_OTHER = 0, // - VSB_SGMW_HONGGUANG = 1, // - VSB_SGMW_HONGGUANGS = 2, // S - VSB_SGMW_ZHIGUANG = 3, // ֮ - VSB_SGMW_RONGGUANGS = 4, // ٹS - VSB_SGMW_RONGGUANG = 5, // ٹ - VSB_SGMW_HONGTU = 6, // ; - VSB_SGMW_XINGWANG = 7, // - VSB_SGMW_YANGGUANG = 8, // - VSB_SGMW_XIAOXUANFENG = 9, // С - VSB_SGMW_WULINGZHIGUANG_1 = 10, // -֮-2010,2009ҵ - VSB_SGMW_WULINGZHIGUANG_2 = 11, // -֮-2010̳, - VSB_SGMW_WULINGZHIGUANG_3 = 12, // -֮-2010,2008ʽ,2007 - VSB_SGMW_XINGWANG_1 = 13, // --2003 - VSB_SGMW_XINGWANG_2 = 14, // --2009׼ - VSB_SGMW_XINGWANG_3 = 15, // --2010,2009,2007,2006,2005,2004 - VSB_SGMW_HONNGUANG_1 = 16, // --2013,2010 - VSB_SGMW_HONNGUANG_2 = 17, // --2014,2013S - VSB_SGMW_XIAOXUANFENG_1 = 18, // -С-2006 - VSB_SGMW_YANGGUANG_1 = 19, // --2006,2005,2004 - VSB_SGMW_YANGGUANG_2 = 20, // --2008,2007 - VSB_SGMW_YANGGUANG_3 = 21, // --2009,2006,2005ֶ׼ - VSB_SGMW_RONGGUANG_1 = 22, // -ٹ-2012,2011,2008 - VSB_SGMW_RONGGUANG_2 = 23, // -ٹ-2012,2011,2008׼ - VSB_SGMW_HONGTU_1 = 24 // -;-2010,2009,2008,2007 + VSB_SGMW_OTHER = 0, // 其他(保留) + VSB_SGMW_HONGGUANG = 1, // 五菱宏光 + VSB_SGMW_HONGGUANGS = 2, // 五菱宏光S + VSB_SGMW_ZHIGUANG = 3, // 五菱之光 + VSB_SGMW_RONGGUANGS = 4, // 五菱荣光S + VSB_SGMW_RONGGUANG = 5, // 五菱荣光 + VSB_SGMW_HONGTU = 6, // 五菱鸿途 + VSB_SGMW_XINGWANG = 7, // 五菱兴旺 + VSB_SGMW_YANGGUANG = 8, // 五菱扬光 + VSB_SGMW_XIAOXUANFENG = 9, // 五菱小旋风 + VSB_SGMW_WULINGZHIGUANG_1 = 10, // 五菱-五菱之光-2010,2009立业 + VSB_SGMW_WULINGZHIGUANG_2 = 11, // 五菱-五菱之光-2010短车身,基本型 + VSB_SGMW_WULINGZHIGUANG_3 = 12, // 五菱-五菱之光-2010长车身,2008厢式,2007 + VSB_SGMW_XINGWANG_1 = 13, // 五菱-兴旺面包车-2003 + VSB_SGMW_XINGWANG_2 = 14, // 五菱-兴旺面包车-2009标准 + VSB_SGMW_XINGWANG_3 = 15, // 五菱-兴旺面包车-2010,2009,2007,2006,2005,2004 + VSB_SGMW_HONNGUANG_1 = 16, // 五菱-宏光-2013,2010 + VSB_SGMW_HONNGUANG_2 = 17, // 五菱-宏光-2014,2013S + VSB_SGMW_XIAOXUANFENG_1 = 18, // 五菱-小旋风-2006 + VSB_SGMW_YANGGUANG_1 = 19, // 五菱-扬光-2006,2005,2004 + VSB_SGMW_YANGGUANG_2 = 20, // 五菱-扬光-2008,2007 + VSB_SGMW_YANGGUANG_3 = 21, // 五菱-扬光-2009,2006,2005手动标准型 + VSB_SGMW_RONGGUANG_1 = 22, // 五菱-荣光面包车-2012,2011,2008基本 + VSB_SGMW_RONGGUANG_2 = 23, // 五菱-荣光面包车-2012,2011,2008标准 + VSB_SGMW_HONGTU_1 = 24 // 五菱-鸿途-2010,2009,2008,2007 }VSB_SGMW_CLASS; -//Ʒ +//长安子品牌类型 typedef enum _VSB_CHANA_CLASS { - VSB_CHANA_OTHER = 0, // - VSB_CHANA_HONOR = 1, // ŷŵ - VSB_CHANA_XINGKA = 2, // ǿ - VSB_CHANA_ZHIXING = 3, // ֮ - VSB_CHANA_PICKUP = 4, // С(Ƥ) - VSB_CHANA_ZHIXING2 = 5, // ֮2 - VSB_CHANA_TAURUS = 6, // ţ - VSB_CHANA_XINGGUANG = 7, // ǹ - VSB_CHANA_BENNI = 8, // - VSB_CHANA_ALSVIN = 9, // - VSB_CHANA_CX20 = 10, // CX20 - VSB_CHANA_CX30 = 11, // CX30 - VSB_CHANA_EADO = 12, // ݶ - VSB_CHANA_ZHIXINGS460 = 13, // ֮S460 - VSB_CHANA_CM8 = 14, // CM8 - VSB_CHANA_XINBAO = 15, // ± - VSB_CHANA_XUNLONG = 16, // ѫ - VSB_CHANA_YUNTONG = 17, // ͨ - VSB_CHANA_LEIMENG = 18, // - VSB_CHANA_XINGYUN = 19, // - VSB_CHANA_OULIWEI = 20, // ŷ - VSB_CHANA_EADOXT = 21, // XT - VSB_CHANA_XINGYUN_1 = 22, // --2004,2003,2000 - VSB_CHANA_OULIWEI_1 = 23, // -ŷ-2013 - VSB_CHANA_YUNTONG_1 = 24, // -ͨ-2004 - VSB_CHANA_TAURUS_1 = 25, // -ţ-2013,2012,2011,2010 - VSB_CHANA_LEIMENG_1 = 26, // --2005,2003 - VSB_CHANA_ZHIXING_1 = 27, // -֮-2010,2009 - VSB_CHANA_ZHIXING_2 = 28, // -֮-2013 - VSB_CHANA_ZHIXING_3 = 29, // -֮2-2009,2008 - VSB_CHANA_ZHIXING_4 = 30, // -֮2-2012 - VSB_CHANA_ZHIXING_5 = 31, // -֮S460-2010,2009 - VSB_CHANA_ZHIXING_6 = 32, // -֮SC6350-2003 - VSB_CHANA_PICKUP_1 = 33, // -΢-2013,2012 - VSB_CHANA_XINGGUANG_1 = 34, // -ǹ4500-2009,2007 - VSB_CHANA_XINGGUANG_2 = 35, // -ǹ4500-2012 - VSB_CHANA_HONOR_1 = 36 // -ŷŵ-2014,2012 + VSB_CHANA_OTHER = 0, // 其他(保留) + VSB_CHANA_HONOR = 1, // 欧诺 + VSB_CHANA_XINGKA = 2, // 长安星卡 + VSB_CHANA_ZHIXING = 3, // 长安之星 + VSB_CHANA_PICKUP = 4, // 长安神骐小卡(长安皮卡) + VSB_CHANA_ZHIXING2 = 5, // 长安之星2代 + VSB_CHANA_TAURUS = 6, // 金牛星 + VSB_CHANA_XINGGUANG = 7, // 长安星光 + VSB_CHANA_BENNI = 8, // 奔奔 + VSB_CHANA_ALSVIN = 9, // 悦翔 + VSB_CHANA_CX20 = 10, // 长安CX20 + VSB_CHANA_CX30 = 11, // 长安CX30 + VSB_CHANA_EADO = 12, // 逸动 + VSB_CHANA_ZHIXINGS460 = 13, // 长安之星S460 + VSB_CHANA_CM8 = 14, // 长安CM8 + VSB_CHANA_XINBAO = 15, // 新豹 + VSB_CHANA_XUNLONG = 16, // 勋龙 + VSB_CHANA_YUNTONG = 17, // 运通 + VSB_CHANA_LEIMENG = 18, // 镭蒙 + VSB_CHANA_XINGYUN = 19, // 长安星韵 + VSB_CHANA_OULIWEI = 20, // 欧力威 + VSB_CHANA_EADOXT = 21, // 致尚XT + VSB_CHANA_XINGYUN_1 = 22, // 长安商用-星韵-2004,2003,2000 + VSB_CHANA_OULIWEI_1 = 23, // 长安商用-欧力威-2013 + VSB_CHANA_YUNTONG_1 = 24, // 长安商用-运通-2004 + VSB_CHANA_TAURUS_1 = 25, // 长安商用-金牛星-2013,2012,2011,2010 + VSB_CHANA_LEIMENG_1 = 26, // 长安商用-镭蒙-2005,2003 + VSB_CHANA_ZHIXING_1 = 27, // 长安商用-长安之星-2010,2009 + VSB_CHANA_ZHIXING_2 = 28, // 长安商用-长安之星-2013 + VSB_CHANA_ZHIXING_3 = 29, // 长安商用-长安之星2-2009,2008 + VSB_CHANA_ZHIXING_4 = 30, // 长安商用-长安之星2-2012 + VSB_CHANA_ZHIXING_5 = 31, // 长安商用-长安之星S460-2010,2009 + VSB_CHANA_ZHIXING_6 = 32, // 长安商用-长安之星SC6350-2003 + VSB_CHANA_PICKUP_1 = 33, // 长安商用-长安微货神骐-2013,2012 + VSB_CHANA_XINGGUANG_1 = 34, // 长安商用-长安星光4500-2009,2007 + VSB_CHANA_XINGGUANG_2 = 35, // 长安商用-长安星光4500-2012 + VSB_CHANA_HONOR_1 = 36 // 长安商用-长安欧诺-2014,2012 }VSB_CHANA_CLASS; -//γƷ +//长安轿车子品牌类型 typedef enum _VSB_EADO_CLASS { - VSB_EADO_OTHER = 0, // - VSB_EADO_CS_1 = 1, // γ-CS35-2014,2013,2012 - VSB_EADO_CX_1 = 2, // γ-CX20-2011 - VSB_EADO_CX_2 = 3, // γ-CX30-2010 - VSB_EADO_BENBEN_1 = 4, // γ--2008,2007,2006 - VSB_EADO_BENBEN_2 = 5, // γ--2008,2007˶ - VSB_EADO_BENBEN_3 = 6, // γ--2010 - VSB_EADO_BENBEN_4 = 7, // γ-MINI-2011,2010 - VSB_EADO_BENBEN_5 = 8, // γ-MINI-2012 - VSB_EADO_YUEXIANG_1 = 9, // γ--2011,2010,2009 - VSB_EADO_YUEXIANG_2 = 10, // γ--2012 - VSB_EADO_YUEXIANG_3 = 11, // γ-V3-2013,2012 - VSB_EADO_YUEXIANG_4 = 12, // γ-V5-2012 - VSB_EADO_YIDONG_1 = 13 // γ-ݶ-2014,2013,2012 + VSB_EADO_OTHER = 0, // 其他(保留) + VSB_EADO_CS_1 = 1, // 长安轿车-CS35-2014,2013,2012 + VSB_EADO_CX_1 = 2, // 长安轿车-CX20-2011 + VSB_EADO_CX_2 = 3, // 长安轿车-CX30两厢-2010 + VSB_EADO_BENBEN_1 = 4, // 长安轿车-奔奔-2008,2007,2006 + VSB_EADO_BENBEN_2 = 5, // 长安轿车-奔奔-2008经典型,2007运动型 + VSB_EADO_BENBEN_3 = 6, // 长安轿车-奔奔-2010 + VSB_EADO_BENBEN_4 = 7, // 长安轿车-奔奔MINI-2011,2010 + VSB_EADO_BENBEN_5 = 8, // 长安轿车-奔奔MINI-2012 + VSB_EADO_YUEXIANG_1 = 9, // 长安轿车-悦翔-2011,2010,2009 + VSB_EADO_YUEXIANG_2 = 10, // 长安轿车-悦翔-2012 + VSB_EADO_YUEXIANG_3 = 11, // 长安轿车-悦翔V3-2013,2012 + VSB_EADO_YUEXIANG_4 = 12, // 长安轿车-悦翔V5-2012 + VSB_EADO_YIDONG_1 = 13 // 长安轿车-逸动-2014,2013,2012 }VSB_EADO_CLASS; -//Ʒ +//金杯子品牌类型 typedef enum _VSB_JINBEI_CLASS { - VSB_JINBEI_OTHER = 0, // - VSB_JINBEI_GRACE = 1, // 𱭸˹ - VSB_JINBEI_HIACE = 2, // 𱭺ʨ - VSB_JINBEI_HAIXING = 3, // - VSB_JINBEI_BADAO = 4, // 𱭰Ե - VSB_JINBEI_LINGQI = 5, // - VSB_JINBEI_JINQI = 6, // - VSB_JINBEI_LINGCHI = 7, // - VSB_JINBEI_QIYUN = 8, // - VSB_JINBEI_ZHISHANG_1 = 9, // -S30-2014,2013,2012 - VSB_JINBEI_HAIXING_1 = 10, // --2012 - VSB_JINBEI_HAIXING_2 = 11, // --2012A7ػ,2011 - VSB_JINBEI_HIACE_1 = 12, // -ʨ-2008 - VSB_JINBEI_HIACE_2 = 13, // -ʨ-2013,2011,2010 - VSB_JINBEI_HIACE_3 = 14, // -ʨ-2013,2011,2008׼ - VSB_JINBEI_JINDIAN_1 = 15, // --2009 - VSB_JINBEI_GRACE_1 = 16, // -˹MPV-2011,2008,2007 - VSB_JINBEI_GRACE_2 = 17, // -˹MPV-2011,2010,2009,2007׼9 - VSB_JINBEI_BADAO_1 = 18 // -ԵSUV-2011,2008 + VSB_JINBEI_OTHER = 0, // 其他(保留) + VSB_JINBEI_GRACE = 1, // 金杯阁瑞斯 + VSB_JINBEI_HIACE = 2, // 金杯海狮 + VSB_JINBEI_HAIXING = 3, // 海星 + VSB_JINBEI_BADAO = 4, // 金杯霸道 + VSB_JINBEI_LINGQI = 5, // 领骐 + VSB_JINBEI_JINQI = 6, // 金骐 + VSB_JINBEI_LINGCHI = 7, // 领驰 + VSB_JINBEI_QIYUN = 8, // 骐运 + VSB_JINBEI_ZHISHANG_1 = 9, // 金杯-智尚S30-2014,2013,2012 + VSB_JINBEI_HAIXING_1 = 10, // 金杯-海星-2012 + VSB_JINBEI_HAIXING_2 = 11, // 金杯-海星-2012A7特惠型,2011 + VSB_JINBEI_HIACE_1 = 12, // 金杯-海狮-2008 + VSB_JINBEI_HIACE_2 = 13, // 金杯-海狮-2013,2011,2010 + VSB_JINBEI_HIACE_3 = 14, // 金杯-海狮-2013豪华型,2011汽油,2008标准型 + VSB_JINBEI_JINDIAN_1 = 15, // 金杯-金典-2009 + VSB_JINBEI_GRACE_1 = 16, // 金杯-阁瑞斯MPV-2011,2008,2007 + VSB_JINBEI_GRACE_2 = 17, // 金杯-阁瑞斯MPV-2011御领豪华型,2010,2009,2007标准9座 + VSB_JINBEI_BADAO_1 = 18 // 金杯-霸道SUV-2011,2008 }VSB_JINBEI_CLASS; -//Ʒ +//吉利子品牌类型 typedef enum _VSB_GEELY_CLASS { - VSB_GEELY_OTHER = 0, // - VSB_GEELY_EC7 = 1, // ۺEC7 - VSB_GEELY_EC8 = 2, // ۺEC8 - VSB_GEELY_SC3 = 3, // SC3 - VSB_GEELY_SC5RV = 4, // SC5-RV - VSB_GEELY_SC6 = 5, // SC6 - VSB_GEELY_JINGYING = 6, // ӥ - VSB_GEELY_JINGGANG = 7, // - VSB_GEELY_SX7 = 8, // SX7 - VSB_GEELY_HAOQING = 9, // - VSB_GEELY_MEIRI = 10, // - VSB_GEELY_YINGLUNSC7 = 11, // ӢSC7 - VSB_GEELY_PANDA = 12, // è - VSB_GEELY_YUANJING = 13, // Զ - VSB_GEELY_ZIYOUJIAN = 14 // ɽ + VSB_GEELY_OTHER = 0, // 其他(保留) + VSB_GEELY_EC7 = 1, // 吉利帝豪EC7 + VSB_GEELY_EC8 = 2, // 吉利帝豪EC8 + VSB_GEELY_SC3 = 3, // 吉利SC3 + VSB_GEELY_SC5RV = 4, // 吉利SC5-RV + VSB_GEELY_SC6 = 5, // 吉利SC6 + VSB_GEELY_JINGYING = 6, // 金鹰 + VSB_GEELY_JINGGANG = 7, // 金刚 + VSB_GEELY_SX7 = 8, // 吉利SX7 + VSB_GEELY_HAOQING = 9, // 豪情 + VSB_GEELY_MEIRI = 10, // 美日 + VSB_GEELY_YINGLUNSC7 = 11, // 英伦SC7 + VSB_GEELY_PANDA = 12, // 熊猫 + VSB_GEELY_YUANJING = 13, // 远景 + VSB_GEELY_ZIYOUJIAN = 14 // 自由舰 }VSB_GEELY_CLASS; -//Ʒ +//三菱子品牌类型 typedef enum _VSB_MITSUBISHI_CLASS { - VSB_MITSUBISHI_OTHER = 0, // - VSB_MITSUBISHI_GALANT = 1, // - VSB_MITSUBISHI_ZINGER = 2, // - VSB_MITSUBISHI_LANCER = 3, // ɪ - VSB_MITSUBISHI_LANCEREX = 4, // - VSB_MITSUBISHI_PAJERO = 5, // - VSB_MITSUBISHI_PAJEROSPORT = 6, // - - VSB_MITSUBISHI_JINGXUANASX = 7, // ASX - VSB_MITSUBISHI_GRANDIS = 8, // - VSB_MITSUBISHI_OUTLANDER = 9, // ŷ - VSB_MITSUBISHI_QINXINGYUEYE = 10, // ԽҰ - VSB_MITSUBISHI_GTO = 11, // GTO - VSB_MITSUBISHI_SOVERAN = 12, // - VSB_MITSUBISHI_LIONVEL = 13, // - VSB_MITSUBISHI_HAFEISIMBO = 14, // - VSB_MITSUBISHI_LANCEREX_1 = 15, // --2012,2011,2010 - VSB_MITSUBISHI_JINGXUAN_1 = 16, // --2012,2011 - VSB_MITSUBISHI_ZINGER_1 = 17, // --2011,2009 - VSB_MITSUBISHI_PAJERO_1 = 18, // --2004 - VSB_MITSUBISHI_PAJERO_2 = 19, // --2004 - VSB_MITSUBISHI_PAJERO_3 = 20, // --2010 - VSB_MITSUBISHI_PAJEROSPORT_1 = 21, // -޾-2011 - VSB_MITSUBISHI_GALANT_1 = 22, // --2009 - VSB_MITSUBISHI_GALANDI_1 = 23, // --2007 - VSB_MITSUBISHI_GALANDI_2 = 24, // --2010 - VSB_MITSUBISHI_OUTLANDER_1 = 25, // -ŷ-2012,2011,2010 - VSB_MITSUBISHI_OUTLANDER_2 = 26, // -ŷ-2013 - VSB_MITSUBISHI_LINGYUE_1 = 27, // --δ֪ - VSB_MITSUBISHI_LANCER_1 = 28 // -ɪ-2010 + VSB_MITSUBISHI_OTHER = 0, // 其他(保留) + VSB_MITSUBISHI_GALANT = 1, // 戈蓝 + VSB_MITSUBISHI_ZINGER = 2, // 君阁 + VSB_MITSUBISHI_LANCER = 3, // 蓝瑟 + VSB_MITSUBISHI_LANCEREX = 4, // 翼神 + VSB_MITSUBISHI_PAJERO = 5, // 帕杰罗 + VSB_MITSUBISHI_PAJEROSPORT = 6, // 帕杰罗-劲畅 + VSB_MITSUBISHI_JINGXUANASX = 7, // 劲炫ASX + VSB_MITSUBISHI_GRANDIS = 8, // 三菱格蓝迪 + VSB_MITSUBISHI_OUTLANDER = 9, // 欧蓝德 + VSB_MITSUBISHI_QINXINGYUEYE = 10, // 三菱轻型越野 + VSB_MITSUBISHI_GTO = 11, // 三菱GTO + VSB_MITSUBISHI_SOVERAN = 12, // 三菱菱绅 + VSB_MITSUBISHI_LIONVEL = 13, // 三菱菱悦 + VSB_MITSUBISHI_HAFEISIMBO = 14, // 哈飞赛马 + VSB_MITSUBISHI_LANCEREX_1 = 15, // 三菱-三菱翼神-2012,2011,2010 + VSB_MITSUBISHI_JINGXUAN_1 = 16, // 三菱-劲炫-2012,2011 + VSB_MITSUBISHI_ZINGER_1 = 17, // 三菱-君阁-2011,2009 + VSB_MITSUBISHI_PAJERO_1 = 18, // 三菱-帕杰罗-2004国产 + VSB_MITSUBISHI_PAJERO_2 = 19, // 三菱-帕杰罗-2004进口 + VSB_MITSUBISHI_PAJERO_3 = 20, // 三菱-帕杰罗-2010进口 + VSB_MITSUBISHI_PAJEROSPORT_1 = 21, // 三菱-帕杰罗劲畅-2011 + VSB_MITSUBISHI_GALANT_1 = 22, // 三菱-戈蓝-2009 + VSB_MITSUBISHI_GALANDI_1 = 23, // 三菱-格蓝迪-2007 + VSB_MITSUBISHI_GALANDI_2 = 24, // 三菱-格蓝迪-2010 + VSB_MITSUBISHI_OUTLANDER_1 = 25, // 三菱-欧蓝德-2012,2011,2010 + VSB_MITSUBISHI_OUTLANDER_2 = 26, // 三菱-欧蓝德-2013 + VSB_MITSUBISHI_LINGYUE_1 = 27, // 三菱-菱悦-未知 + VSB_MITSUBISHI_LANCER_1 = 28 // 三菱-蓝瑟-2010 }VSB_MITSUBISHI_CLASS; -//׿˹Ʒ +//雷克萨斯子品牌类型 typedef enum _VSB_LEXUS_CLASS { - VSB_LEXUS_OTHER = 0, // - VSB_LEXUS_ES = 1, // ׿˹ES - VSB_LEXUS_CT = 2, // ׿˹CT - VSB_LEXUS_RX = 3, // ׿˹RX - VSB_LEXUS_IS = 4, // ׿˹IS - VSB_LEXUS_LX = 5, // ׿˹LX - VSB_LEXUS_GS = 6, // ׿˹GS - VSB_LEXUS_GX = 7, // ׿˹GX - VSB_LEXUS_LS = 8, // ׿˹LS - VSB_LEXUS_CT_1 = 9, // ׿˹-CT-2013,2012,2011 - VSB_LEXUS_ES_1 = 10, // ׿˹-ES-1994 - VSB_LEXUS_ES_2 = 11, // ׿˹-ES-2010,2009,2006 - VSB_LEXUS_ES_3 = 12, // ׿˹-ES-2013,2012 - VSB_LEXUS_GS_1 = 13, // ׿˹-GS-2011,2010,2009,2008,2005 - VSB_LEXUS_GX_1 = 14, // ׿˹-GX-2012,2010 - VSB_LEXUS_IS_1 = 15, // ׿˹-IS-2011 - VSB_LEXUS_LS_1 = 16, // ׿˹-LS-1994 - VSB_LEXUS_LS_2 = 17, // ׿˹-LS-2005,2004 - VSB_LEXUS_LS_3 = 18, // ׿˹-LS-2009,2007,2006 - VSB_LEXUS_LX_1 = 19, // ׿˹-LX-2013,2012 - VSB_LEXUS_RX_1 = 20, // ׿˹-RX-2011,2010,2009 - VSB_LEXUS_RX_2 = 21, // ׿˹-RX-2013,2012 - VSB_LEXUS_RX_3 = 22 // ׿˹-RX-2007 + VSB_LEXUS_OTHER = 0, // 其他(保留) + VSB_LEXUS_ES = 1, // 雷克萨斯ES + VSB_LEXUS_CT = 2, // 雷克萨斯CT + VSB_LEXUS_RX = 3, // 雷克萨斯RX + VSB_LEXUS_IS = 4, // 雷克萨斯IS + VSB_LEXUS_LX = 5, // 雷克萨斯LX + VSB_LEXUS_GS = 6, // 雷克萨斯GS + VSB_LEXUS_GX = 7, // 雷克萨斯GX + VSB_LEXUS_LS = 8, // 雷克萨斯LS + VSB_LEXUS_CT_1 = 9, // 雷克萨斯-CT-2013,2012,2011 + VSB_LEXUS_ES_1 = 10, // 雷克萨斯-ES-1994 + VSB_LEXUS_ES_2 = 11, // 雷克萨斯-ES-2010,2009,2006 + VSB_LEXUS_ES_3 = 12, // 雷克萨斯-ES-2013,2012 + VSB_LEXUS_GS_1 = 13, // 雷克萨斯-GS-2011,2010,2009,2008,2005 + VSB_LEXUS_GX_1 = 14, // 雷克萨斯-GX-2012,2010 + VSB_LEXUS_IS_1 = 15, // 雷克萨斯-IS-2011 + VSB_LEXUS_LS_1 = 16, // 雷克萨斯-LS-1994 + VSB_LEXUS_LS_2 = 17, // 雷克萨斯-LS-2005,2004 + VSB_LEXUS_LS_3 = 18, // 雷克萨斯-LS-2009,2007,2006 + VSB_LEXUS_LX_1 = 19, // 雷克萨斯-LX-2013,2012 + VSB_LEXUS_RX_1 = 20, // 雷克萨斯-RX-2011,2010,2009 + VSB_LEXUS_RX_2 = 21, // 雷克萨斯-RX-2013,2012 + VSB_LEXUS_RX_3 = 22 // 雷克萨斯-RX-2007 }VSB_LEXUS_CLASS; -//Ʒ +//荣威子品牌类型 typedef enum _VSB_ROEWE_CLASS { - VSB_ROEWE_OTHER = 0, // - VSB_ROEWE_350 = 1, // 350 - VSB_ROEWE_550 = 2, // 550 - VSB_ROEWE_W5 = 3, // W5 - VSB_ROEWE_950 = 4, // 950 - VSB_ROEWE_750 = 5, // 750 - VSB_ROEWE_350_1 = 6, // -350-2011Ѹǰ,2010 - VSB_ROEWE_350_2 = 7, // -350-2014,2013,2012,2011 - VSB_ROEWE_550_1 = 8, // -550-2012,2010,2009,2008 - VSB_ROEWE_750_1 = 9, // -750-2009,2008,2007,2006 - VSB_ROEWE_750_2 = 10, // -750-2012,2011 - VSB_ROEWE_950_1 = 11 // -950-2012 + VSB_ROEWE_OTHER = 0, // 其他(保留) + VSB_ROEWE_350 = 1, // 荣威350 + VSB_ROEWE_550 = 2, // 荣威550 + VSB_ROEWE_W5 = 3, // 荣威W5 + VSB_ROEWE_950 = 4, // 荣威950 + VSB_ROEWE_750 = 5, // 荣威750 + VSB_ROEWE_350_1 = 6, // 荣威-350-2011迅智版,2010 + VSB_ROEWE_350_2 = 7, // 荣威-350-2014,2013,2012,2011 + VSB_ROEWE_550_1 = 8, // 荣威-550-2012,2010,2009,2008 + VSB_ROEWE_750_1 = 9, // 荣威-750-2009,2008,2007,2006 + VSB_ROEWE_750_2 = 10, // 荣威-750-2012,2011 + VSB_ROEWE_950_1 = 11 // 荣威-950-2012 }VSB_ROEWE_CLASS; -//Ʒ +//海马子品牌类型 typedef enum _VSB_HAIMA_CLASS { - VSB_HAIMA_OTHER = 0, // - VSB_HAIMA_PREMARIN = 1, // - VSB_HAIMA_S7 = 2, // S7 - VSB_HAIMA_PRINCE = 3, // - VSB_HAIMA_CUPID = 4, // 2- - VSB_HAIMA_HATCHBACK = 5, // 3- - VSB_HAIMA_KNIGHT = 6, // ʿ - VSB_HAIMA_HAPPIN = 7, // - VSB_HAIMA_FAMILY = 8, // - VSB_HAIMA_M3 = 9, // M3 - VSB_HAIMA_CUPID_1 = 10, // --2012,2011,2010 - VSB_HAIMA_PREMARIN_1 = 11, // --2007 - VSB_HAIMA_PREMARIN_2 = 12, // --2012,2010 - VSB_HAIMA_HATCHBACK_1 = 13, // --2010,2009 - VSB_HAIMA_HAPPIN_1 = 14, // --2010,2009,2008,2007,2004 - VSB_HAIMA_HAPPIN_2 = 15, // --2012,2011 - VSB_HAIMA_M3_1 = 16, // -3-2010,2008,2007 - VSB_HAIMA_FAMILY_1 = 17, // --2007,2006 - VSB_HAIMA_FAMILY_2 = 18, // --2010,2009,2008 - VSB_HAIMA_FAMILY_3 = 19, // --2011 - VSB_HAIMA_FAMILY_4 = 20, // --2014,2013,2012 - VSB_HAIMA_KNIGHT_1 = 21, // -ʿ-2013_2012A,2011,2010 - VSB_HAIMA_KNIGHT_2 = 22, // -ʿ-2013_2012B - VSB_HAIMA_NEWHONGDA_1 = 23, // ó-º-2009 - VSB_HAIMA_NEWHONDGA_2 = 24, // ó-º-2012 - VSB_HAIMA_PRINCE_1 = 25, // ó--2010 - VSB_HAIMA_RONGDA_1 = 26 // ó-ٴ-2012 + VSB_HAIMA_OTHER = 0, // 其他(保留) + VSB_HAIMA_PREMARIN = 1, // 普力马 + VSB_HAIMA_S7 = 2, // 海马S7 + VSB_HAIMA_PRINCE = 3, // 海马王子 + VSB_HAIMA_CUPID = 4, // 海马2-丘比特 + VSB_HAIMA_HATCHBACK = 5, // 海马3-欢动 + VSB_HAIMA_KNIGHT = 6, // 骑士 + VSB_HAIMA_HAPPIN = 7, // 海福星 + VSB_HAIMA_FAMILY = 8, // 福美来 + VSB_HAIMA_M3 = 9, // 海马M3 + VSB_HAIMA_CUPID_1 = 10, // 海马-丘比特-2012,2011,2010 + VSB_HAIMA_PREMARIN_1 = 11, // 海马-普力马-2007 + VSB_HAIMA_PREMARIN_2 = 12, // 海马-普力马-2012,2010 + VSB_HAIMA_HATCHBACK_1 = 13, // 海马-欢动-2010,2009 + VSB_HAIMA_HAPPIN_1 = 14, // 海马-海福星-2010,2009,2008,2007,2004 + VSB_HAIMA_HAPPIN_2 = 15, // 海马-海福星-2012,2011 + VSB_HAIMA_M3_1 = 16, // 海马-海马3-2010,2008,2007 + VSB_HAIMA_FAMILY_1 = 17, // 海马-福美来-2007,2006 + VSB_HAIMA_FAMILY_2 = 18, // 海马-福美来-2010,2009,2008 + VSB_HAIMA_FAMILY_3 = 19, // 海马-福美来-2011 + VSB_HAIMA_FAMILY_4 = 20, // 海马-福美来-2014,2013,2012 + VSB_HAIMA_KNIGHT_1 = 21, // 海马-骑士-2013_2012A,2011,2010 + VSB_HAIMA_KNIGHT_2 = 22, // 海马-骑士-2013_2012B + VSB_HAIMA_NEWHONGDA_1 = 23, // 海马商用车-新鸿达-2009 + VSB_HAIMA_NEWHONDGA_2 = 24, // 海马商用车-新鸿达-2012 + VSB_HAIMA_PRINCE_1 = 25, // 海马商用车-海马王子-2010 + VSB_HAIMA_RONGDA_1 = 26 // 海马商用车-荣达-2012 }VSB_HAIMA_CLASS; -//Ʒ +//长城子品牌类型 typedef enum _VSB_GREATWALL_CLASS { - VSB_GREATWALL_OTHER = 0, // - VSB_GREATWALL_SING = 1, // Ӱ - VSB_GREATWALL_SAIJUN = 2, // - VSB_GREATWALL_HAVAL = 3, // - VSB_GREATWALL_SAFE = 4, // - VSB_GREATWALL_SAIKU = 5, // - VSB_GREATWALL_SAILING = 6, // - VSB_GREATWALL_KINGDEER = 7, // ϶ - VSB_GREATWALL_DEER = 8, // ϶ - VSB_GREATWALL_WINGLE = 9, // 翥 - VSB_GREATWALL_COOLBEAR = 10, // - VSB_GREATWALL_LINGAO = 11, // - VSB_GREATWALL_CROSS = 12, // - VSB_GREATWALL_GWPERI = 13, // - VSB_GREATWALL_COWRY = 14, // - VSB_GREATWALL_M4 = 15, // M4 - VSB_GREATWALL_LINGAO_1 = 16, // --2010 - VSB_GREATWALL_HAVAL_1 = 17, // -H3-2010,2009 - VSB_GREATWALL_HAVAL_2 = 18, // -H3-2012,2010,2009 - VSB_GREATWALL_HAVAL_3 = 19, // -H5-2012,2011,2010 - VSB_GREATWALL_HAVAL_4 = 20, // -H5-2012,2011,2010̾ - VSB_GREATWALL_HAVAL_5 = 21, // -H5-2012 - VSB_GREATWALL_HAVAL_6 = 22, // -H5-2014,2013 - VSB_GREATWALL_HAVAL_8 = 23, // -H6-2014,2013 - VSB_GREATWALL_HAVAL_9 = 24, // -M2-2010 - VSB_GREATWALL_HAVAL_10 = 25, // -M2-2013,2012 - VSB_GREATWALL_HAVAL_11 = 26, // -M4-2012 - VSB_GREATWALL_HAVAL_12 = 27, // --2011 - VSB_GREATWALL_CROSS_1 = 28, // --2009,2008 - VSB_GREATWALL_CROSS_2 = 29, // -CROSS-2011,2009 - VSB_GREATWALL_JINGLING_1 = 30, // --δ֪ - VSB_GREATWALL_SING_1 = 31, // -Ӱ-2003 - VSB_GREATWALL_SAIKU_1 = 32, // --2004 - VSB_GREATWALL_SAILING_1 = 33, // --δ֪ - VSB_GREATWALL_DIER_1 = 34, // -϶-δ֪ - VSB_GREATWALL_COOLBEAR_1 = 35, // --2010,2009 - VSB_GREATWALL_KINGDEER_1 = 36, // -϶-2008,2007,2004,2003 - VSB_GREATWALL_GREATWALL_1 = 37, // -C20R-2013,2011 - VSB_GREATWALL_GREATWALL_2 = 38, // -C30-2010 - VSB_GREATWALL_GREATWALL_3 = 39, // -C30-2012 - VSB_GREATWALL_GREATWALL_4 = 40, // -C30-2013 - VSB_GREATWALL_GREATWALL_5 = 41, // -C50-2013,2012 - VSB_GREATWALL_GREATWALL_6 = 42, // -V80-2013,2012,2010,2009,2008 - VSB_GREATWALL_WINGLE_1 = 43, // -翥3-2011,2010,2007,2006 - VSB_GREATWALL_WINGLE_2 = 44, // -翥5-2014,2012,2011,2009 - VSB_GREATWALL_HAVAL_7 = 45 // -H6-2013,2012,2011 + VSB_GREATWALL_OTHER = 0, // 其他(保留) + VSB_GREATWALL_SING = 1, // 赛影 + VSB_GREATWALL_SAIJUN = 2, // 赛骏 + VSB_GREATWALL_HAVAL = 3, // 哈弗 + VSB_GREATWALL_SAFE = 4, // 赛弗 + VSB_GREATWALL_SAIKU = 5, // 赛酷 + VSB_GREATWALL_SAILING = 6, // 赛铃 + VSB_GREATWALL_KINGDEER = 7, // 金迪尔 + VSB_GREATWALL_DEER = 8, // 迪尔 + VSB_GREATWALL_WINGLE = 9, // 风骏 + VSB_GREATWALL_COOLBEAR = 10, // 酷熊 + VSB_GREATWALL_LINGAO = 11, // 凌傲 + VSB_GREATWALL_CROSS = 12, // 炫丽 + VSB_GREATWALL_GWPERI = 13, // 精灵 + VSB_GREATWALL_COWRY = 14, // 腾翼 + VSB_GREATWALL_M4 = 15, // 长城M4 + VSB_GREATWALL_LINGAO_1 = 16, // 长城-凌傲-2010 + VSB_GREATWALL_HAVAL_1 = 17, // 长城-哈弗H3-2010,2009 + VSB_GREATWALL_HAVAL_2 = 18, // 长城-哈弗H3-2012,2010,2009锐意版 + VSB_GREATWALL_HAVAL_3 = 19, // 长城-哈弗H5-2012,2011,2010 + VSB_GREATWALL_HAVAL_4 = 20, // 长城-哈弗H5-2012,2011,2010绿静豪华型 + VSB_GREATWALL_HAVAL_5 = 21, // 长城-哈弗H5-2012舒适型 + VSB_GREATWALL_HAVAL_6 = 22, // 长城-哈弗H5-2014,2013 + VSB_GREATWALL_HAVAL_8 = 23, // 长城-哈弗H6-2014,2013升级版 + VSB_GREATWALL_HAVAL_9 = 24, // 长城-哈弗M2-2010 + VSB_GREATWALL_HAVAL_10 = 25, // 长城-哈弗M2-2013,2012 + VSB_GREATWALL_HAVAL_11 = 26, // 长城-哈弗M4-2012 + VSB_GREATWALL_HAVAL_12 = 27, // 长城-哈弗派-2011 + VSB_GREATWALL_CROSS_1 = 28, // 长城-炫丽-2009,2008 + VSB_GREATWALL_CROSS_2 = 29, // 长城-炫丽CROSS-2011,2009 + VSB_GREATWALL_JINGLING_1 = 30, // 长城-精灵-未知 + VSB_GREATWALL_SING_1 = 31, // 长城-赛影-2003 + VSB_GREATWALL_SAIKU_1 = 32, // 长城-赛酷-2004 + VSB_GREATWALL_SAILING_1 = 33, // 长城-赛铃-未知 + VSB_GREATWALL_DIER_1 = 34, // 长城-迪尔-未知 + VSB_GREATWALL_COOLBEAR_1 = 35, // 长城-酷熊-2010,2009 + VSB_GREATWALL_KINGDEER_1 = 36, // 长城-金迪尔-2008,2007,2004,2003 + VSB_GREATWALL_GREATWALL_1 = 37, // 长城-长城C20R-2013,2011 + VSB_GREATWALL_GREATWALL_2 = 38, // 长城-长城C30-2010 + VSB_GREATWALL_GREATWALL_3 = 39, // 长城-长城C30-2012 + VSB_GREATWALL_GREATWALL_4 = 40, // 长城-长城C30-2013 + VSB_GREATWALL_GREATWALL_5 = 41, // 长城-长城C50-2013,2012 + VSB_GREATWALL_GREATWALL_6 = 42, // 长城-长城V80-2013,2012,2010,2009,2008 + VSB_GREATWALL_WINGLE_1 = 43, // 长城-风骏3-2011,2010,2007,2006 + VSB_GREATWALL_WINGLE_2 = 44, // 长城-风骏5-2014,2012,2011,2009 + VSB_GREATWALL_HAVAL_7 = 45 // 长城-哈弗H6-2013,2012,2011 }VSB_GREATWALL_CLASS; -//Ʒ +//道奇子品牌类型 typedef enum _VSB_DS_CLASS { - VSB_DS_OTHER = 0, // - VSB_DS_KUBO_1 = 1, // -Ძ-2011,2010,2009,2008 - VSB_DS_KUWEI_1 = 2, // --2011,2010,2009 - VSB_DS_KUWEI_2 = 3 // --2013 + VSB_DS_OTHER = 0, // 其他(保留) + VSB_DS_KUBO_1 = 1, // 道奇-酷搏-2011,2010,2009,2008 + VSB_DS_KUWEI_1 = 2, // 道奇-酷威-2011,2010,2009 + VSB_DS_KUWEI_2 = 3 // 道奇-酷威-2013 }VSB_DS_CLASS; -//·Ʒ +//路虎子品牌类型 typedef enum _VSB_LANDROVER_CLASS { - VSB_LANDROVER_OTHER = 0, // - VSB_LANDROVER_FAXIAN_1 = 1, // ·--2005,2004 - VSB_LANDROVER_FAXIAN_2 = 2, // ·--2013,2011,2010 - VSB_LANDROVER_LANSHENG_1 = 3, // ·-ʤ-2012,2011,2010 - VSB_LANDROVER_LANSHENG_2 = 4, // ·-ʤ-2014,2013,2012,2011 - VSB_LANDROVER_LANSHENG_3 = 5, // ·-ʤ˶-2013,2012,2011,2010 - VSB_LANDROVER_LANSHENG_4 = 6, // ·-ʤ˶-2013Ԧ - VSB_LANDROVER_SXZ_1 = 7 // ·-2-2014,2013,2011 + VSB_LANDROVER_OTHER = 0, // 其他(保留) + VSB_LANDROVER_FAXIAN_1 = 1, // 路虎-发现-2005,2004 + VSB_LANDROVER_FAXIAN_2 = 2, // 路虎-发现-2013,2011,2010 + VSB_LANDROVER_LANSHENG_1 = 3, // 路虎-揽胜-2012,2011,2010 + VSB_LANDROVER_LANSHENG_2 = 4, // 路虎-揽胜极光-2014,2013,2012,2011 + VSB_LANDROVER_LANSHENG_3 = 5, // 路虎-揽胜运动版-2013,2012,2011,2010 + VSB_LANDROVER_LANSHENG_4 = 6, // 路虎-揽胜运动版-2013驭红限量版 + VSB_LANDROVER_SXZ_1 = 7 // 路虎-神行者2代-2014,2013,2011 }VSB_LANDROVER_CLASS; -//Ʒ +//名爵子品牌类型 typedef enum _VSB_MG_CLASS { - VSB_MG_OTHER = 0, // + VSB_MG_OTHER = 0, // 其他(保留) VSB_MG_3SW_1 = 1, // MG-MG-3SW-2009,2008 VSB_MG_MG3_1 = 2, // MG-MG3-2013,2012,2011 VSB_MG_MG5_1 = 3, // MG-MG5-2014,2013,2012 - VSB_MG_MG6_1 = 4, // MG-MG6-2012,2011 + VSB_MG_MG6_1 = 4, // MG-MG6三厢-2012,2011 VSB_MG_MG7_1 = 5, // MG-MG7-2010,2009,2008,2007 }VSB_MG_CLASS; -//һƷ +//一汽子品牌类型 typedef enum _VSB_FAW_CLASS { - VSB_FAW_OTHER = 0, // - VSB_FAW_501_1 = 1, //һ-501-Ῠ - VSB_FAW_N3_1 = 2, //һ-N3+-2006 - VSB_FAW_N3_2 = 3, //һ-N3+-2008 - VSB_FAW_JIABAO_1 = 4, //һ-ѱ-2011T50,T57 - VSB_FAW_JIABAO_2 = 5, //һ-ѱ-2000 - VSB_FAW_JIABAO_3 = 6, //һ-ѱ-2006 - VSB_FAW_JIABAO_4 = 7, //һ-ѱ-2012,2011V50ʰ - VSB_FAW_JIABAO_5 = 8, //һ-ѱ-2012,2011V70 - VSB_FAW_JIABAO_6 = 9, //һ-ѱ-2013,2012,2011V52ʵ - VSB_FAW_JIABAO_7 = 10, //һ-ѱ-2014,2013V80 - VSB_FAW_XIALI_1 = 11, //һ--1999,1997 - VSB_FAW_XIALI_2 = 12, //һ-2000-2003,2002 - VSB_FAW_XIALI_3 = 13, //һ-A+-2011,2010,2006,2005 - VSB_FAW_XIALI_4 = 14, //һ-N3-2012 - VSB_FAW_XIALI_5 = 15, //һ-N5-2014,2013,2011,2010,2009 - VSB_FAW_XIALI_6 = 16, //һ-N7-2013 - VSB_FAW_AOWEI_1 = 17, //һ-J5P-2005,2004,2003 - VSB_FAW_AOWEI_2 = 18, //һ-J5P-4X2ǣ,ж - VSB_FAW_AOWEI_3 = 19, //һ-J5P-4X2ǣ,ж - VSB_FAW_AOWEI_4 = 20, //һ-J5P-6X6ԽҰж - VSB_FAW_AOXING_1 = 21, //һ--2004 - VSB_FAW_WEILE_1 = 22, //һ--2004 - VSB_FAW_WEILE_2 = 23, //һ--2008,2007 - VSB_FAW_WEIZI_1 = 24, //һ--2004 - VSB_FAW_WEIZHI_1 = 25, //һ-־V2-2012ֶCROSS - VSB_FAW_WEIZHI_2 = 26, //һ-־V2-2012ԶCROSS,2010 - VSB_FAW_WEIZHI_3 = 27, //һ-־V5-2013,2012 - VSB_FAW_WEIZHI_4 = 28, //һ-־-2009,2008,2007 - VSB_FAW_WEIZHI_5 = 29, //һ-־-2011 - VSB_FAW_XIAOJIEFANG_1 = 30, //һ-С-90,109Ῠ - VSB_FAW_HANWEI_1 = 31, //һ-J5M-4X4ػ - VSB_FAW_HANWEI_2 = 32, //һ-J5M-6X6ǣ,6X4ж - VSB_FAW_HANWEI_3 = 33, //һ-J5M-8X8ж - VSB_FAW_XINDAWEI_1 = 34, //һ-´-2010 - VSB_FAW_XINHANWEI_1 = 35, //һ-º-2011 - VSB_FAW_SENYA_1 = 36, //һ-ɭM80-2012,2011,2009 - VSB_FAW_TENGWEI_1 = 37, //һ-L5M-ؿ - VSB_FAW_JIEFANG_1 = 38, //һ-J4R-A - VSB_FAW_JIEFANG_2 = 39, //һ-J4R-ж,ǣ - VSB_FAW_JIEFANG_3 = 40, //һ-J6-2004 - VSB_FAW_JIEFANG_4 = 41, //һ-J6-ؿ - VSB_FAW_JIEFANG_5 = 42, //һ-J6L-п - VSB_FAW_JIEFANG_6 = 43, //һ-L5-A - VSB_FAW_SAILONG_1 = 44, //һ--п - VSB_FAW_JUNWEI_1 = 45, //һ-J5K-п - VSB_FAW_B50_1 = 46, //һ-B50-2012,2011,2009 - VSB_FAW_B50_2 = 47 //һ-B50-2013 + VSB_FAW_OTHER = 0, // 其他(保留) + VSB_FAW_501_1 = 1, //一汽-501-轻卡 + VSB_FAW_N3_1 = 2, //一汽-N3+两厢-2006 + VSB_FAW_N3_2 = 3, //一汽-N3+两厢-2008 + VSB_FAW_JIABAO_1 = 4, //一汽-佳宝货车-2011T50,T57 + VSB_FAW_JIABAO_2 = 5, //一汽-佳宝面包车-2000 + VSB_FAW_JIABAO_3 = 6, //一汽-佳宝面包车-2006 + VSB_FAW_JIABAO_4 = 7, //一汽-佳宝面包车-2012,2011V50舒适版 + VSB_FAW_JIABAO_5 = 8, //一汽-佳宝面包车-2012,2011V70 + VSB_FAW_JIABAO_6 = 9, //一汽-佳宝面包车-2013,2012,2011V52实用型 + VSB_FAW_JIABAO_7 = 10, //一汽-佳宝面包车-2014,2013V80 + VSB_FAW_XIALI_1 = 11, //一汽-夏利-1999,1997 + VSB_FAW_XIALI_2 = 12, //一汽-夏利2000-2003,2002 + VSB_FAW_XIALI_3 = 13, //一汽-夏利A+-2011,2010,2006,2005 + VSB_FAW_XIALI_4 = 14, //一汽-夏利N3-2012 + VSB_FAW_XIALI_5 = 15, //一汽-夏利N5-2014,2013,2011,2010,2009 + VSB_FAW_XIALI_6 = 16, //一汽-夏利N7-2013 + VSB_FAW_AOWEI_1 = 17, //一汽-奥威J5P-2005,2004,2003 + VSB_FAW_AOWEI_2 = 18, //一汽-奥威J5P-4X2复合型牵引车,自卸车 + VSB_FAW_AOWEI_3 = 19, //一汽-奥威J5P-4X2牵引车,卸货车 + VSB_FAW_AOWEI_4 = 20, //一汽-奥威J5P-6X6越野自卸车 + VSB_FAW_AOXING_1 = 21, //一汽-奥星-2004 + VSB_FAW_WEILE_1 = 22, //一汽-威乐-2004 + VSB_FAW_WEILE_2 = 23, //一汽-威乐-2008,2007 + VSB_FAW_WEIZI_1 = 24, //一汽-威姿-2004 + VSB_FAW_WEIZHI_1 = 25, //一汽-威志V2-2012手动CROSS + VSB_FAW_WEIZHI_2 = 26, //一汽-威志V2-2012自动CROSS,2010 + VSB_FAW_WEIZHI_3 = 27, //一汽-威志V5-2013,2012 + VSB_FAW_WEIZHI_4 = 28, //一汽-威志三厢-2009,2008,2007 + VSB_FAW_WEIZHI_5 = 29, //一汽-威志三厢-2011 + VSB_FAW_XIAOJIEFANG_1 = 30, //一汽-小解放-90,109马力轻卡 + VSB_FAW_HANWEI_1 = 31, //一汽-悍威J5M-4X4载货车 + VSB_FAW_HANWEI_2 = 32, //一汽-悍威J5M-6X6牵引车,6X4自卸车 + VSB_FAW_HANWEI_3 = 33, //一汽-悍威J5M-8X8自卸车 + VSB_FAW_XINDAWEI_1 = 34, //一汽-新大威-2010 + VSB_FAW_XINHANWEI_1 = 35, //一汽-新悍威-2011 + VSB_FAW_SENYA_1 = 36, //一汽-森雅M80-2012,2011,2009 + VSB_FAW_TENGWEI_1 = 37, //一汽-腾威L5M-重卡 + VSB_FAW_JIEFANG_1 = 38, //一汽-解放J4R-A款 + VSB_FAW_JIEFANG_2 = 39, //一汽-解放J4R-自卸车,牵引车 + VSB_FAW_JIEFANG_3 = 40, //一汽-解放J6-2004 + VSB_FAW_JIEFANG_4 = 41, //一汽-解放J6-重卡 + VSB_FAW_JIEFANG_5 = 42, //一汽-解放J6L-中卡 + VSB_FAW_JIEFANG_6 = 43, //一汽-解放L5-A款 + VSB_FAW_SAILONG_1 = 44, //一汽-赛龙-中卡 + VSB_FAW_JUNWEI_1 = 45, //一汽-骏威J5K-中卡 + VSB_FAW_B50_1 = 46, //一汽-奔腾B50-2012,2011,2009 + VSB_FAW_B50_2 = 47 //一汽-奔腾B50-2013 }VSB_FAW_CLASS; -//Ʒ +//上汽子品牌类型 typedef enum _VSB_SAICMOTOR_CLASS { - VSB_SAICMOTOR_OTHER = 0, // - VSB_HONGYAN_JIESHI_1 = 1, // άº-ʨ-2012 - VSB_DATONG_V80_1 = 2 // ͨ-V80-2014,2013,2012,2011 + VSB_SAICMOTOR_OTHER = 0, // 其他(保留) + VSB_HONGYAN_JIESHI_1 = 1, // 上汽依维柯红岩-杰狮-2012 + VSB_DATONG_V80_1 = 2 // 上汽大通-V80-2014,2013,2012,2011 }VSB_SAICMOTOR_CLASS; -//Ʒ +//东南汽车子品牌类型 typedef enum _VSB_SOUEAST_CLASS { - VSB_SOUEAST_OTHER = 0, // - VSB_SOUEAST_V3_1 = 1, // -V3-2011ֵҸ,2010,2009,2008 - VSB_SOUEAST_V3_2 = 2, // -V3-2012 - VSB_SOUEAST_V3_3 = 3, // -V3-2012콢,2011,2010·ɰ - VSB_SOUEAST_V3_4 = 4, // -V3-2012ɰ - VSB_SOUEAST_V5_1 = 5, // -V5-2014,2013,2012 - VSB_SOUEAST_XIWANG_1 = 6, // -ϣ-2011,2010 - VSB_SOUEAST_DELIKA_1 = 7, // --2003,2002 - VSB_SOUEAST_DELIKA_2 = 8, // --2005 - VSB_SOUEAST_DELIKA_3 = 9, // --2008 - VSB_SOUEAST_DELIKA_4 = 10, // --2009 - VSB_SOUEAST_LINGSHUAI_1 = 11, // -˧-2005,2004GLXi - VSB_SOUEAST_FULIKA_1 = 12, // --2005 - VSB_SOUEAST_FULIKA_2 = 13 // --2007 + VSB_SOUEAST_OTHER = 0, // 其他(保留) + VSB_SOUEAST_V3_1 = 1, // 东南-V3菱悦-2011超值幸福版,2010,2009,2008 + VSB_SOUEAST_V3_2 = 2, // 东南-V3菱悦-2012 + VSB_SOUEAST_V3_3 = 3, // 东南-V3菱悦-2012旗舰版,2011,2010新风采版 + VSB_SOUEAST_V3_4 = 4, // 东南-V3菱悦-2012风采版 + VSB_SOUEAST_V5_1 = 5, // 东南-V5菱致-2014,2013,2012 + VSB_SOUEAST_XIWANG_1 = 6, // 东南-希旺-2011,2010 + VSB_SOUEAST_DELIKA_1 = 7, // 东南-得利卡-2003,2002 + VSB_SOUEAST_DELIKA_2 = 8, // 东南-得利卡-2005 + VSB_SOUEAST_DELIKA_3 = 9, // 东南-得利卡-2008 + VSB_SOUEAST_DELIKA_4 = 10, // 东南-得利卡-2009 + VSB_SOUEAST_LINGSHUAI_1 = 11, // 东南-菱帅-2005,2004GLXi + VSB_SOUEAST_FULIKA_1 = 12, // 东南-富利卡-2005 + VSB_SOUEAST_FULIKA_2 = 13 // 东南-富利卡-2007 }VSB_SOUEAST_CLASS; -//Ʒ +//中兴汽车子品牌类型 typedef enum _VSB_ZTE_CLASS { - VSB_ZTE_OTHER = 0, // - VSB_ZTE_WEIHU_1 = 1, // --2012,2010 - VSB_ZTE_WEIHU_2 = 2, // -TUV-2010,2006 - VSB_ZTE_WUXIAN_1 = 3, // --2008 - VSB_ZTE_WUXIAN_2 = 4 // --2012,2011,2010,2009 + VSB_ZTE_OTHER = 0, // 其他(保留) + VSB_ZTE_WEIHU_1 = 1, // 中兴-威虎-2012,2010 + VSB_ZTE_WEIHU_2 = 2, // 中兴-威虎TUV-2010,2006 + VSB_ZTE_WUXIAN_1 = 3, // 中兴-无限-2008 + VSB_ZTE_WUXIAN_2 = 4 // 中兴-无限-2012,2011,2010,2009 }VSB_ZTE_CLASS; -//лƷ +//中华汽车子品牌类型 typedef enum _VSB_ZHONGHUA_CLASS { - VSB_ZHONGHUA_OTHER = 0, // - VSB_ZHONGHUA_H230_1 = 1, // л-H230-2012 - VSB_ZHONGHUA_H320_1 = 2, // л-H320-2012 - VSB_ZHONGHUA_H330_1 = 3, // л-H330-2013 - VSB_ZHONGHUA_H530_1 = 4, // л-H530-2012,2011 - VSB_ZHONGHUA_V5_1 = 5, // л-V5-2012,2011 - VSB_ZHONGHUA_ZUNCHI_1 = 6, // л--2004 - VSB_ZHONGHUA_ZUNCHI_2 = 7, // л--2005,2003 - VSB_ZHONGHUA_KUBAO_1 = 8, // л-ᱦ-2007 - VSB_ZHONGHUA_JUNJIE_1 = 9, // л--2010,2009,2008,2007,2006 - VSB_ZHONGHUA_JUNJIE_2 = 10, // л--2012,2011 - VSB_ZHONGHUA_JUNJIECROSS_1 = 11, // л-cross-2010,2009 - VSB_ZHONGHUA_JUNJIEFRV_1 = 12, // л-FRV-2009,2008 - VSB_ZHONGHUA_JUNJIEFRV_2 = 13, // л-FRV-2010 - VSB_ZHONGHUA_JUNJIEFSV_1 = 14, // л-FSV-2009 - VSB_ZHONGHUA_JUNJIEFSV_2 = 15, // л-FSV-2010 - VSB_ZHONGHUA_JUNJIEFSV_3 = 16 // л-FSV-2011 + VSB_ZHONGHUA_OTHER = 0, // 其他(保留) + VSB_ZHONGHUA_H230_1 = 1, // 中华-H230-2012 + VSB_ZHONGHUA_H320_1 = 2, // 中华-H320-2012 + VSB_ZHONGHUA_H330_1 = 3, // 中华-H330-2013 + VSB_ZHONGHUA_H530_1 = 4, // 中华-H530-2012,2011 + VSB_ZHONGHUA_V5_1 = 5, // 中华-V5-2012,2011 + VSB_ZHONGHUA_ZUNCHI_1 = 6, // 中华-尊驰-2004 + VSB_ZHONGHUA_ZUNCHI_2 = 7, // 中华-尊驰-2005,2003 + VSB_ZHONGHUA_KUBAO_1 = 8, // 中华-酷宝-2007 + VSB_ZHONGHUA_JUNJIE_1 = 9, // 中华-骏捷-2010,2009,2008,2007,2006 + VSB_ZHONGHUA_JUNJIE_2 = 10, // 中华-骏捷-2012,2011 + VSB_ZHONGHUA_JUNJIECROSS_1 = 11, // 中华-骏捷cross-2010,2009 + VSB_ZHONGHUA_JUNJIEFRV_1 = 12, // 中华-骏捷FRV-2009,2008 + VSB_ZHONGHUA_JUNJIEFRV_2 = 13, // 中华-骏捷FRV-2010 + VSB_ZHONGHUA_JUNJIEFSV_1 = 14, // 中华-骏捷FSV-2009 + VSB_ZHONGHUA_JUNJIEFSV_2 = 15, // 中华-骏捷FSV-2010 + VSB_ZHONGHUA_JUNJIEFSV_3 = 16 // 中华-骏捷FSV-2011 }VSB_ZHONGHUA_CLASS; -//йƷ +//中国重汽子品牌类型 typedef enum _VSB_CNHTC_CLASS { - VSB_CNHTC_OTHER = 0, // - VSB_CNHTC_HOKA_2 = 1, // й-HOKA-ǣ,ж - VSB_CNHTC_HOWO_1 = 2, // й-HOWO-A7 - VSB_CNHTC_HOWO_2 = 3, // й-HOWO-T7H - VSB_CNHTC_HOWO_3 = 4, // й-HOWO-Ῠ - VSB_CNHTC_HOWO_4 = 5, // й-HOWOؿ-ǣ - VSB_CNHTC_HOWO_5 = 6, // й-HOWOؿ-жA - VSB_CNHTC_HOWO_6 = 7, // й-HOWOؿ-жB - VSB_CNHTC_HOWO_7 = 8, // й-HOWOؿ-ػA - VSB_CNHTC_HOWO_8 = 9, // й-HOWOؿ-ػC - VSB_CNHTC_SITAIERWANG_1 = 10, // й-˹̫-ǣA,ػ,賵 - VSB_CNHTC_HAOHAN_1 = 11, // й--A - VSB_CNHTC_HAOYUN_1 = 12, // й--ǣB,ػ,ж - VSB_CNHTC_JINWANGZI_1 = 13, // й-ؿ-ǣB - VSB_CNHTC_HOKA_1 = 14 // й-HOKA-H7 + VSB_CNHTC_OTHER = 0, // 其他(保留) + VSB_CNHTC_HOKA_2 = 1, // 中国重汽-HOKA-牵引车,自卸车 + VSB_CNHTC_HOWO_1 = 2, // 中国重汽-HOWO-A7 + VSB_CNHTC_HOWO_2 = 3, // 中国重汽-HOWO-T7H + VSB_CNHTC_HOWO_3 = 4, // 中国重汽-HOWO-轻卡 + VSB_CNHTC_HOWO_4 = 5, // 中国重汽-HOWO重卡-牵引车 + VSB_CNHTC_HOWO_5 = 6, // 中国重汽-HOWO重卡-自卸车A + VSB_CNHTC_HOWO_6 = 7, // 中国重汽-HOWO重卡-自卸车B + VSB_CNHTC_HOWO_7 = 8, // 中国重汽-HOWO重卡-载货车A + VSB_CNHTC_HOWO_8 = 9, // 中国重汽-HOWO重卡-载货车C + VSB_CNHTC_SITAIERWANG_1 = 10, // 中国重汽-斯太尔王-牵引车A,载货车,搅拌车 + VSB_CNHTC_HAOHAN_1 = 11, // 中国重汽-豪瀚-A款 + VSB_CNHTC_HAOYUN_1 = 12, // 中国重汽-豪运-牵引车B,载货车,自卸车 + VSB_CNHTC_JINWANGZI_1 = 13, // 中国重汽-金王子重卡-牵引车B + VSB_CNHTC_HOKA_1 = 14 // 中国重汽-HOKA-H7 }VSB_CNHTC_CLASS; -//ͨƷ +//中通子品牌类型 typedef enum _VSB_ZHONGTONG_CLASS { - VSB_ZHONGTONG_OTHER = 0, // - VSB_ZHONGTONG_KAICHI_1 = 1, // ͨͳ-A-A - VSB_ZHONGTONG_LINGYU_1 = 2, // ͨͳ--A - VSB_ZHONGTONG_LINGXIU_1 = 3, // ͨͳ--A - VSB_ZHONGTONG_LINGHANG_1 = 4, // ͨͳ-캽-A - VSB_ZHONGTONG_SHIJI_1 = 5, // ͨͳ--A - VSB_ZHONGTONG_KAIXUAN_1 = 6, // ͨͳ--A - VSB_ZHONGTONG_LINGYUN_1 = 7, // ͨͳ-A-A - VSB_ZHONGTONG_YANGGUANG_1 = 8 // ͨͳ--A + VSB_ZHONGTONG_OTHER = 0, // 其他(保留) + VSB_ZHONGTONG_KAICHI_1 = 1, // 中通客车-凯驰A-A款 + VSB_ZHONGTONG_LINGYU_1 = 2, // 中通客车-领御-A款 + VSB_ZHONGTONG_LINGXIU_1 = 3, // 中通客车-领秀-A款 + VSB_ZHONGTONG_LINGHANG_1 = 4, // 中通客车-领航-A款 + VSB_ZHONGTONG_SHIJI_1 = 5, // 中通客车-世纪-A款 + VSB_ZHONGTONG_KAIXUAN_1 = 6, // 中通客车-凯旋-A款 + VSB_ZHONGTONG_LINGYUN_1 = 7, // 中通客车-领韵A-A款 + VSB_ZHONGTONG_YANGGUANG_1 = 8 // 中通客车-阳光-A款 }VSB_ZHONGTONG_CLASS; -//Ʒ +//九龙子品牌类型 typedef enum _VSB_JIULONG_CLASS { - VSB_JIULONG_OTHER = 0, // - VSB_JIULONG_JIULONGA5_1 = 1, // -A5-2011 + VSB_JIULONG_OTHER = 0, // 其他(保留) + VSB_JIULONG_JIULONGA5_1 = 1, // 九龙-九龙A5-2011 }VSB_JIULONG_CLASS; -//̩Ʒ +//众泰子品牌类型 typedef enum _VSB_ZOTYE_CLASS { - VSB_ZOTYE_OTHER = 0, // - VSB_ZOTYE_2008_2 = 1, // ̩-2008-2011,2010,2008 - VSB_ZOTYE_5008_1 = 2, // ̩-5008-2013,2011,2010,2008 - VSB_ZOTYE_Z300_1 = 3, // ̩-Z300-2013,2012 - VSB_ZOTYE_2008_1 = 4 // ̩-2008-2007 + VSB_ZOTYE_OTHER = 0, // 其他(保留) + VSB_ZOTYE_2008_2 = 1, // 众泰-2008-2011,2010,2008 + VSB_ZOTYE_5008_1 = 2, // 众泰-5008-2013,2011,2010,2008 + VSB_ZOTYE_Z300_1 = 3, // 众泰-Z300-2013,2012 + VSB_ZOTYE_2008_1 = 4 // 众泰-2008-2007 }VSB_ZOTYE_CLASS; -//άƷ +//依维柯子品牌类型 typedef enum _VSB_NAVECO_CLASS { - VSB_NAVECO_OTHER = 0, // - VSB_NAVECO_Daily_1 = 1, // ά-Daily-2006,2004,2003 - VSB_NAVECO_Power_1 = 2, // ά-Power-Daily - VSB_NAVECO_Turbo_1 = 3, // ά-Turbo-Daily-2014,2012,2011 - VSB_NAVECO_Venice_1 = 4, // ά-Venice-2011,2008 - VSB_NAVECO_BAODI_1 = 5, // ά--2012,2009 - VSB_NAVECO_DEYIHUOCHE_1 = 6, // ά--2011 - VSB_NAVECO_DULING_1 = 7 // ά--2010,2009,2007 + VSB_NAVECO_OTHER = 0, // 其他(保留) + VSB_NAVECO_Daily_1 = 1, // 依维柯-Daily-2006,2004,2003 + VSB_NAVECO_Power_1 = 2, // 依维柯-Power-Daily + VSB_NAVECO_Turbo_1 = 3, // 依维柯-Turbo-Daily-2014,2012,2011 + VSB_NAVECO_Venice_1 = 4, // 依维柯-Venice-2011,2008 + VSB_NAVECO_BAODI_1 = 5, // 依维柯-宝迪-2012,2009 + VSB_NAVECO_DEYIHUOCHE_1 = 6, // 依维柯-得意货车-2011 + VSB_NAVECO_DULING_1 = 7 // 依维柯-都灵-2010,2009,2007 }VSB_NAVECO_CLASS; -//ʱƷ +//保时捷子品牌类型 typedef enum _VSB_PORSCHE_CLASS { - VSB_PORSCHE_OTHER = 0, // - VBR_PORSCHE_PANAMERA_1 = 1, // ʱ-panamera-2013,2012,2010 - VBR_PORSCHE_CAYENNE_1 = 2, // ʱ-Cayenne-2014,2013,2011,2010 + VSB_PORSCHE_OTHER = 0, // 其他(保留) + VBR_PORSCHE_PANAMERA_1 = 1, // 保时捷-panamera-2013,2012,2010 + VBR_PORSCHE_CAYENNE_1 = 2, // 保时捷-卡宴Cayenne-2014,2013,2011,2010 }VSB_PORSCHE_CLASS; -//˹Ʒ +//克莱斯勒子品牌类型 typedef enum _VSB_CHRYSLER_CLASS { - VSB_CHRYSLER_OTHER = 0, // - VSB_CHRYSLER_300C_1 = 1, // ˹-300C-2007,2006,2004 - VSB_CHRYSLER_PTMANBUZHE_1 = 2, // ˹-PT-2007 + VSB_CHRYSLER_OTHER = 0, // 其他(保留) + VSB_CHRYSLER_300C_1 = 1, // 克莱斯勒-300C-2007,2006,2004 + VSB_CHRYSLER_PTMANBUZHE_1 = 2, // 克莱斯勒-PT漫步者-2007 }VSB_CHRYSLER_CLASS; -//Ʒ +//凯迪拉克子品牌类型 typedef enum _VSB_CADILLAC_CLASS { - VSB_CADILLAC_OTHER = 0, // - VSB_CADILLAC_ATS_1 = 1, // -ATS-2014 - VSB_CADILLAC_CTS_1 = 2, // -CTS-2012 - VSB_CADILLAC_CTS_3 = 3, // -CTS-2012Ӣ˶,2011,2010,2009,2008 - VSB_CADILLAC_SLS_1 = 4, // -SLS-2007,2006 - VSB_CADILLAC_SLS_2 = 5, // -SLS-2012,2011,2010 - VSB_CADILLAC_SRX_1 = 6, // -SRX-2012,2011,2010,2009 - VSB_CADILLAC_CTS_2 = 7, // -CTS-2012,2009CTS - VSB_CADILLAC_KAILEIDE_1 = 8 // -׵-2011,2010,2008,2007,2006 + VSB_CADILLAC_OTHER = 0, // 其他(保留) + VSB_CADILLAC_ATS_1 = 1, // 凯迪拉克-ATS-2014 + VSB_CADILLAC_CTS_1 = 2, // 凯迪拉克-CTS-2012 + VSB_CADILLAC_CTS_3 = 3, // 凯迪拉克-CTS-2012精英运动型,2011,2010,2009,2008 + VSB_CADILLAC_SLS_1 = 4, // 凯迪拉克-SLS赛威-2007,2006 + VSB_CADILLAC_SLS_2 = 5, // 凯迪拉克-SLS赛威-2012,2011,2010 + VSB_CADILLAC_SRX_1 = 6, // 凯迪拉克-SRX-2012,2011,2010,2009 + VSB_CADILLAC_CTS_2 = 7, // 凯迪拉克-CTS-2012,2009CTS + VSB_CADILLAC_KAILEIDE_1 = 8 // 凯迪拉克-凯雷德-2011,2010,2008,2007,2006 }VSB_CADILLAC_CLASS; -//KAMAƷ +//凯马KAMA子品牌类型 typedef enum _VSB_KAMA_CLASS { - VSB_KAMA_OTHER = 0, // - VSB_KAMA_QINGKA_2 = 1, // KAMA--ῨD - VSB_KAMA_FULAIKA_1 = 2, // KAMA--ῨA - VSB_KAMA_JINYUNKA_1 = 3, // KAMA-˿-Ῠ - VSB_KAMA_JUNWEIKA_1 = 4, // KAMA--2014,2011 - VSB_KAMA_QINGKA_1 = 5 // KAMA--ῨC + VSB_KAMA_OTHER = 0, // 其他(保留) + VSB_KAMA_QINGKA_2 = 1, // 凯马KAMA-凯马-轻卡D + VSB_KAMA_FULAIKA_1 = 2, // 凯马KAMA-福来卡-轻卡A + VSB_KAMA_JINYUNKA_1 = 3, // 凯马KAMA-金运卡-轻卡 + VSB_KAMA_JUNWEIKA_1 = 4, // 凯马KAMA-骏威卡车-2014,2011 + VSB_KAMA_QINGKA_1 = 5 // 凯马KAMA-凯马-轻卡C }VSB_KAMA_CLASS; -//Ʒ +//力帆子品牌类型 typedef enum _VSB_LIFAN_CLASS { - VSB_LIFAN_OTHER = 0, // - VSB_LIFAN_320_1 = 1, // -320-2012,2011,2009 - VSB_LIFAN_520_1 = 2, // -520-2007,2006 - VSB_LIFAN_520_2 = 3, // -520-2013,2011,2010,2008 - VSB_LIFAN_620_1 = 4, // -620-2012,2010,2009,2008 - VSB_LIFAN_X60_1 = 5, // -X60-2013,2012,2011 - VSB_LIFAN_FENGSHUN_1 = 6 // -˳-2011 + VSB_LIFAN_OTHER = 0, // 其他(保留) + VSB_LIFAN_320_1 = 1, // 力帆-320-2012,2011,2009 + VSB_LIFAN_520_1 = 2, // 力帆-520-2007,2006 + VSB_LIFAN_520_2 = 3, // 力帆-520-2013,2011,2010,2008 + VSB_LIFAN_620_1 = 4, // 力帆-620-2012,2010,2009,2008 + VSB_LIFAN_X60_1 = 5, // 力帆-X60-2013,2012,2011 + VSB_LIFAN_FENGSHUN_1 = 6 // 力帆-丰顺-2011 }VSB_LIFAN_CLASS; -//Ʒ +//北京子品牌类型 typedef enum _VSB_BEIJING_CLASS { - VSB_BEIJING_OTHER = 0, // - VSB_BEIJING_E_1 = 1, // -Eϵ-2014,2013,2012 + VSB_BEIJING_OTHER = 0, // 其他(保留) + VSB_BEIJING_E_1 = 1, // 北京汽车-E系列两厢-2014,2013,2012 }VSB_BEIJING_CLASS; -//Ʒ +//北奔重汽子品牌类型 typedef enum _VSB_BEIBEN_CLASS { - VSB_BEIBEN_OTHER = 0, // - VSB_BEIBEN_NG80_1 = 1, // -NG80-ؿA - VSB_BEIBEN_NG80_2 = 2, // -NG80-ؿB - VSB_BEIBEN_NG80_3 = 3, // -NG80-ؿC - VSB_BEIBEN_V3_1 = 4, // -V3-V3H1 - VSB_BEIBEN_V3_2 = 5 // -V3-ؿA + VSB_BEIBEN_OTHER = 0, // 其他(保留) + VSB_BEIBEN_NG80_1 = 1, // 北奔重汽-NG80-重卡A + VSB_BEIBEN_NG80_2 = 2, // 北奔重汽-NG80-重卡B + VSB_BEIBEN_NG80_3 = 3, // 北奔重汽-NG80-重卡C + VSB_BEIBEN_V3_1 = 4, // 北奔重汽-北奔V3-V3H1 + VSB_BEIBEN_V3_2 = 5 // 北奔重汽-北奔V3-重卡A }VSB_BEIBEN_CLASS; -//ͳƷ +//北方客车子品牌类型 typedef enum _VSB_BEIFANG_CLASS { - VSB_BEIFANG_OTHER = 0, // - VSB_BEIFANG_A_1 = 1 // ͳ-ͳ1-A + VSB_BEIFANG_OTHER = 0, // 其他(保留) + VSB_BEIFANG_A_1 = 1 // 北方客车-客车车型1-A款 }VSB_BEIFANG_CLASS; -//Ʒ +//北汽制造子品牌类型 typedef enum _VSB_BAW_CLASS { - VSB_BAW_OTHER = 0, // - VSB_BAW_YUSHENG007_1 = 1, // -ʤ007-2013,2011 - VSB_BAW_QILING_1 = 2, // --A - VSB_BAW_LUBA_1 = 3, // -½-2004 - VSB_BAW_QISHI_1 = 4 // -ʿ-2009,2007 + VSB_BAW_OTHER = 0, // 其他(保留) + VSB_BAW_YUSHENG007_1 = 1, // 北汽制造-域胜007-2013,2011 + VSB_BAW_QILING_1 = 2, // 北汽制造-旗铃-A款 + VSB_BAW_LUBA_1 = 3, // 北汽制造-陆霸-2004 + VSB_BAW_QISHI_1 = 4 // 北汽制造-骑士-2009,2007 }VSB_BAW_CLASS; -//Ʒ +//北汽威旺子品牌类型 typedef enum _VSB_BQWEIWANG_CLASS { - VSB_BQWEIWANG_OTHER = 0, // - VSB_BQWEIWANG_205_1 = 1, // -205-2013 - VSB_BQWEIWANG_306_1 = 2 // -306-2014,2013,2011 + VSB_BQWEIWANG_OTHER = 0, // 其他(保留) + VSB_BQWEIWANG_205_1 = 1, // 北汽威旺-205-2013 + VSB_BQWEIWANG_306_1 = 2 // 北汽威旺-306-2014,2013,2011 }VSB_BQWEIWANG_CLASS; -//Ʒ +//华普子品牌类型 typedef enum _VSB_SMA_CLASS { - VSB_SMA_OTHER = 0, // - VSB_SMA_HAIYU_1 = 1, // --2007,2005,2004 - VSB_SMA_HAIYU_2 = 2, // --2007MB - VSB_SMA_HAISHANG_1 = 3, // --2008,2005 - VSB_SMA_HAIJING_1 = 5, // --2010,2009 - VSB_SMA_HAIXUN_1 = 4, // -Ѹ-2005,2004쭷 - VSB_SMA_HAIXUN_2 = 6, // -Ѹ-2007,2006 + VSB_SMA_OTHER = 0, // 其他(保留) + VSB_SMA_HAIYU_1 = 1, // 华普-海域-2007,2005,2004 + VSB_SMA_HAIYU_2 = 2, // 华普-海域-2007海域MB + VSB_SMA_HAISHANG_1 = 3, // 华普-海尚-2008,2005 + VSB_SMA_HAIJING_1 = 5, // 华普-海景-2010,2009 + VSB_SMA_HAIXUN_1 = 4, // 华普-海迅-2005,2004飙风 + VSB_SMA_HAIXUN_2 = 6, // 华普-海迅-2007,2006 }VSB_SMA_CLASS; -//Ʒ +//华菱星马子品牌类型 typedef enum _VSB_XINGMA_CLASS { - VSB_XINGMA_OTHER = 0, // - VSB_XINGMA_XINGKAIMA_1 = 1 // -ǿ-ǣ1,ػ1 + VSB_XINGMA_OTHER = 0, // 其他(保留) + VSB_XINGMA_XINGKAIMA_1 = 1 // 华菱星马-星凯马-牵引车型1,载货车型1 }VSB_XINGMA_CLASS; -//˫Ʒ +//双环子品牌类型 typedef enum _VSB_SHUANGHUAN_CLASS { - VSB_SHUANGHUAN_OTHER = 0, // - VSB_SHUANGHUAN_SCEO_1 = 1, // ˫-SCEO-2011,2009,2006,2005 + VSB_SHUANGHUAN_OTHER = 0, // 其他(保留) + VSB_SHUANGHUAN_SCEO_1 = 1, // 双环-SCEO-2011,2009,2006,2005 }VSB_SHUANGHUAN_CLASS; -//Ʒ +//吉普子品牌类型 typedef enum _VSB_JEEP_CLASS { - VSB_JEEP_OTHER = 0, // - VSB_JEEP_DAQIENUOJI_1 = 1, // -ŵ()-2014,2013,2012,2011 - VSB_JEEP_DAQIENUOJI_2 = 2, // -ŵ()-2014 - VSB_JEEP_ZHINANZHE_1 = 3, // -ָ-2010,2007 - VSB_JEEP_ZHINANZHE_2 = 4, // -ָ-2014,2013,2012,2011 - VSB_JEEP_MUMAREN_1 = 5, // --2012ʹٻ,2011 - VSB_JEEP_MUMAREN_2 = 6, // --2014,2013,2012,2011,2010,2009,2008 - VSB_JEEP_ZIYOUKE = 7, // -ɿ-2014,2013,2012,2011 + VSB_JEEP_OTHER = 0, // 其他(保留) + VSB_JEEP_DAQIENUOJI_1 = 1, // 吉普-大切诺基(进口)-2014,2013,2012,2011 + VSB_JEEP_DAQIENUOJI_2 = 2, // 吉普-大切诺基(进口)-2014舒享导航版 + VSB_JEEP_ZHINANZHE_1 = 3, // 吉普-指南者-2010,2007 + VSB_JEEP_ZHINANZHE_2 = 4, // 吉普-指南者-2014,2013,2012,2011 + VSB_JEEP_MUMAREN_1 = 5, // 吉普-牧马人-2012使命召唤限量版,2011 + VSB_JEEP_MUMAREN_2 = 6, // 吉普-牧马人-2014,2013,2012,2011,2010,2009,2008 + VSB_JEEP_ZIYOUKE = 7, // 吉普-自由客-2014,2013,2012,2011 }VSB_JEEP_CLASS; -//Ʒ +//启辰子品牌类型 typedef enum _VSB_VENUCIA_CLASS { - VSB_VENUCIA_OTHER = 0, // - VSB_VENUCIA_D50_1 = 1 // -D50-2014,2013,2012 + VSB_VENUCIA_OTHER = 0, // 其他(保留) + VSB_VENUCIA_D50_1 = 1 // 启辰-D50-2014,2013,2012 }VSB_VENUCIA_CLASS; -//Ʒ +//哈飞子品牌类型 typedef enum _VSB_HAFEI_CLASS { - VSB_HAFEI_OTHER = 0, // - VSB_HAFEI_XINMINYI_1 = 1, // --2010 - VSB_HAFEI_XINMINYI_2 = 2, // --2012 - VSB_HAFEI_MINYI_1 = 3, // --2006 - VSB_HAFEI_MINYI_2 = 4, // --2008 - VSB_HAFEI_SAIBAO_1 = 5, // --2012 - VSB_HAFEI_SAIMA_1 = 6, // --2002 - VSB_HAFEI_SAIMA_2 = 7, // --2004,2003 - VSB_HAFEI_SAIMA_3 = 8, // --2009 - VSB_HAFEI_LUBAO_1 = 9, // -·-2004 - VSB_HAFEI_LUBAO_2 = 10, // -·-2008,2007 - VSB_HAFEI_LUBAO_3 = 11, // -·-2012 - VSB_HAFEI_LUZUNXIAOBAWANG_1 = 12, // -·С-2011,2010 - VSB_HAFEI_RUIYI_1 = 13, // --2009 - VSB_HAFEI_JUNYI_1 = 14 // --2012,2010 + VSB_HAFEI_OTHER = 0, // 其他(保留) + VSB_HAFEI_XINMINYI_1 = 1, // 哈飞-新民意货车-2010 + VSB_HAFEI_XINMINYI_2 = 2, // 哈飞-新民意面包车-2012 + VSB_HAFEI_MINYI_1 = 3, // 哈飞-民意货车-2006 + VSB_HAFEI_MINYI_2 = 4, // 哈飞-民意面包车-2008 + VSB_HAFEI_SAIBAO_1 = 5, // 哈飞-赛豹Ⅲ-2012 + VSB_HAFEI_SAIMA_1 = 6, // 哈飞-赛马-2002 + VSB_HAFEI_SAIMA_2 = 7, // 哈飞-赛马-2004,2003 + VSB_HAFEI_SAIMA_3 = 8, // 哈飞-赛马-2009 + VSB_HAFEI_LUBAO_1 = 9, // 哈飞-路宝-2004 + VSB_HAFEI_LUBAO_2 = 10, // 哈飞-路宝-2008,2007 + VSB_HAFEI_LUBAO_3 = 11, // 哈飞-路宝-2012 + VSB_HAFEI_LUZUNXIAOBAWANG_1 = 12, // 哈飞-路尊小霸王-2011,2010 + VSB_HAFEI_RUIYI_1 = 13, // 哈飞-锐意-2009 + VSB_HAFEI_JUNYI_1 = 14 // 哈飞-骏意-2012,2010 }VSB_HAFEI_CLASS; -//ƿŷƷ +//唐骏欧铃子品牌类型 typedef enum _VSB_TKING_CLASS { - VSB_TKING_OTHER = 0, // - VSB_TKING_OUGUAN_1 = 1, // ƿŷ-ŷ-2011 - VSB_TKING_OUGUAN_2 = 2, // ƿŷ-ŷ-ῨB - VSB_TKING_OUTENG_1 = 3, // ƿŷ-ŷ-ῨA - VSB_TKING_FUXING_1 = 4, // ƿŷ--2006 - VSB_TKING_QINGKAWANG_1 = 5, // ƿŷ-Ῠ-Ῠ - VSB_TKING_AFANDA_1 = 6, // ƿŷ--ؿ - VSB_TKING_JUNQI_1 = 7 // ƿŷ--ؿA + VSB_TKING_OTHER = 0, // 其他(保留) + VSB_TKING_OUGUAN_1 = 1, // 唐骏欧铃-欧冠-2011 + VSB_TKING_OUGUAN_2 = 2, // 唐骏欧铃-欧冠-轻卡B + VSB_TKING_OUTENG_1 = 3, // 唐骏欧铃-欧腾-轻卡A + VSB_TKING_FUXING_1 = 4, // 唐骏欧铃-福星-2006 + VSB_TKING_QINGKAWANG_1 = 5, // 唐骏欧铃-轻卡王-轻卡 + VSB_TKING_AFANDA_1 = 6, // 唐骏欧铃-阿凡达-中重卡 + VSB_TKING_JUNQI_1 = 7 // 唐骏欧铃-骏麒-中重卡A }VSB_TKING_CLASS; -//Ʒ +//大宇子品牌类型 typedef enum _VSB_DAEWOO_CLASS { - VSB_DAEWOO_OTHER = 0, // - VBR_DAEWOO_6960H3_1 = 1 // -6960H3-A + VSB_DAEWOO_OTHER = 0, // 其他(保留) + VBR_DAEWOO_6960H3_1 = 1 // 大宇-6960H3-A款 }VSB_DAEWOO_CLASS; -//Ʒ +//大运汽车子品牌类型 typedef enum _VSB_DAYUN_CLASS { - VSB_DAYUN_OTHER = 0, // - VBR_DAYUN_ZHONGKA_1 = 1 // -ؿ-A + VSB_DAYUN_OTHER = 0, // 其他(保留) + VBR_DAYUN_ZHONGKA_1 = 1 // 大运汽车-重卡-A款 }VSB_DAYUN_CLASS; -//Ʒ +//奔腾子品牌类型 typedef enum _VSB_BESTURN_CLASS { - VSB_BESTURN_OTHER = 0, // - VSB_BESTURN_B70_1 = 1, // -B70-2009,2007,2006 - VSB_BESTURN_B70_2 = 2, // -B70-2011 - VSB_BESTURN_B70_3 = 3, // -B70-2011Ӣ,2010 - VSB_BESTURN_B70_4 = 4, // -B70-2012 - VSB_BESTURN_B90_1 = 5, // -B90-2012 - VSB_BESTURN_AOXING_1 = 6 // һ--2004 + VSB_BESTURN_OTHER = 0, // 其他(保留) + VSB_BESTURN_B70_1 = 1, // 奔腾-B70-2009,2007,2006 + VSB_BESTURN_B70_2 = 2, // 奔腾-B70-2011 + VSB_BESTURN_B70_3 = 3, // 奔腾-B70-2011精英型,2010 + VSB_BESTURN_B70_4 = 4, // 奔腾-B70-2012 + VSB_BESTURN_B90_1 = 5, // 奔腾-B90-2012 + VSB_BESTURN_AOXING_1 = 6 // 一汽-奥星-2004 }VSB_BESTURN_CLASS; -//Ʒ +//威麟子品牌类型 typedef enum _VSB_WEILIN_CLASS { - VSB_WEILIN_OTHER = 0, // - VSB_WEILIN_H3_1 = 1, // -H3-2011 - VSB_WEILIN_V5_1 = 2, // -V5-2012,2009 - VSB_WEILIN_X5_1 = 3 // -X5-2012,2011,2010 + VSB_WEILIN_OTHER = 0, // 其他(保留) + VSB_WEILIN_H3_1 = 1, // 威麟-H3-2011 + VSB_WEILIN_V5_1 = 2, // 威麟-V5-2012,2009 + VSB_WEILIN_X5_1 = 3 // 威麟-X5-2012,2011,2010 }VSB_WEILIN_CLASS; -//ͨƷ +//宇通子品牌类型 typedef enum _VSB_YUTONG_CLASS { - VSB_YUTONG_OTHER = 0, // - VSB_YUTONG_8XI_1 = 1, // ͨ-8ϵ-2012,2005 - VSB_YUTONG_KECHE_1 = 2, // ͨ-ͳ10-2013,2010 - VSB_YUTONG_KECHE_3 = 3, // ͨ-ͳ2-A - VSB_YUTONG_KECHE_4 = 4, // ͨ-ͳ8-2004 - VSB_YUTONG_KECHE_5 = 5, // ͨ-ͳ9-2014 - VSB_YUTONG_KECHE_2 = 6 // ͨ-ͳ12-A + VSB_YUTONG_OTHER = 0, // 其他(保留) + VSB_YUTONG_8XI_1 = 1, // 宇通-8系-2012,2005 + VSB_YUTONG_KECHE_1 = 2, // 宇通-客车车型10-2013,2010 + VSB_YUTONG_KECHE_3 = 3, // 宇通-客车车型2-A款 + VSB_YUTONG_KECHE_4 = 4, // 宇通-客车车型8-2004 + VSB_YUTONG_KECHE_5 = 5, // 宇通-客车车型9-2014 + VSB_YUTONG_KECHE_2 = 6 // 宇通-客车车型12-A款 }VSB_YUTONG_CLASS; -//Ʒ +//安凯子品牌类型 typedef enum _VSB_ANKAI_CLASS { - VSB_ANKAI_OTHER = 0, // - VSB_ANKAI_KECHE_1 = 1, // -ͳ1-A - VSB_ANKAI_KECHE_2 = 2 // -ͳ3-A + VSB_ANKAI_OTHER = 0, // 其他(保留) + VSB_ANKAI_KECHE_1 = 1, // 安凯-客车车型1-A款 + VSB_ANKAI_KECHE_2 = 2 // 安凯-客车车型3-A款 }VSB_ANKAI_CLASS; -//Ʒ +//宝骏子品牌类型 typedef enum _VSB_BAOJUN_CLASS { - VSB_BAOJUN_OTHER = 0, // - VSB_BAOJUN_630_1 = 1 // -630-2014,2013,2012,2011 + VSB_BAOJUN_OTHER = 0, // 其他(保留) + VSB_BAOJUN_630_1 = 1 // 宝骏-宝骏630-2014,2013,2012,2011 }VSB_BAOJUN_CLASS; -//Ʒ +//宾利子品牌类型 typedef enum _VSB_BINLI_CLASS { - VSB_BINLI_OTHER = 0, // - VSB_BINLI_OULU_1 = 1 // -ŷ½-2009,2008 + VSB_BINLI_OTHER = 0, // 其他(保留) + VSB_BINLI_OULU_1 = 1 // 宾利-欧陆-2009,2008 }VSB_BINLI_CLASS; -//Ʒ +//广汽传祺子品牌类型 typedef enum _VSB_TRUMPCHE_CLASS { - VSB_TRUMPCHE_OTHER = 0, // - VSB_TRUMPCHE_GA5_1 = 1, // -GA5-2012,2011 - VSB_TRUMPCHE_GA5_2 = 3, // -GA5-2013,2012ԶӢ - VSB_TRUMPCHE_GS5_1 = 2 // -GS5-2014,2013,2012 + VSB_TRUMPCHE_OTHER = 0, // 其他(保留) + VSB_TRUMPCHE_GA5_1 = 1, // 广汽传祺-GA5-2012,2011 + VSB_TRUMPCHE_GA5_2 = 3, // 广汽传祺-GA5-2013,2012自动精英版 + VSB_TRUMPCHE_GS5_1 = 2 // 广汽传祺-GS5-2014,2013,2012 }VSB_TRUMPCHE_CLASS; -// Ʒ +//广汽吉奥 子品牌类型 typedef enum _VSB_GONOW_CLASS { - VSB_GONOW_OTHER = 0, // - VSB_GONOW_G3_1 = 1, // -G3-2011 - VSB_GONOW_G5_1 = 2, // -G5-2012,2011 - VSB_GONOW_SHUAIJIAN_1 = 4, // -˧-2012,2009 - VSB_GONOW_XINGWANGM1_1 = 3, // -M1-2012 - VSB_GONOW_CAIYUN500_1 = 5 // -500-2010 + VSB_GONOW_OTHER = 0, // 其他(保留) + VSB_GONOW_G3_1 = 1, // 广汽吉奥-G3-2011 + VSB_GONOW_G5_1 = 2, // 广汽吉奥-G5-2012,2011 + VSB_GONOW_SHUAIJIAN_1 = 4, // 广汽吉奥-帅舰-2012,2009 + VSB_GONOW_XINGWANGM1_1 = 3, // 广汽吉奥-星旺M1-2012 + VSB_GONOW_CAIYUN500_1 = 5 // 广汽吉奥-财运500-2010 }VSB_GONOW_CLASS; -//Ʒ +//庆铃子品牌类型 typedef enum _VSB_ISUZU_CLASS { - VSB_ISUZU_OTHER = 0, // - VSB_ISUZU_ZHONGXINGSHANGYONG_1 = 1, // -ó-2011 - VSB_ISUZU_WUSHILINGPIKA_1 = 2, // -ʮƤ-2009 - VSB_ISUZU_WUSHILINGPIKA_2 = 3, // -ʮƤ-2014,2009 - VSB_ISUZU_JINGJIZHE_1 = 4 // --2004,2002 + VSB_ISUZU_OTHER = 0, // 其他(保留) + VSB_ISUZU_ZHONGXINGSHANGYONG_1 = 1, // 庆铃-中型商用车-2011 + VSB_ISUZU_WUSHILINGPIKA_1 = 2, // 庆铃-五十铃皮卡-2009 + VSB_ISUZU_WUSHILINGPIKA_2 = 3, // 庆铃-五十铃皮卡-2014,2009 + VSB_ISUZU_JINGJIZHE_1 = 4 // 庆铃-竞技者-2004,2002 }VSB_ISUZU_CLASS; -//Ʒ +//开瑞子品牌类型 typedef enum _VSB_KARRY_CLASS { - VSB_KARRY_OTHER = 0, // - VSB_KARRY_YOU_2 = 1, // --2013,2012 - VSB_KARRY_YOUJIN_1 = 2, // -ž-2012,2011,2010 - VSB_KARRY_YOUSHENG_1 = 3, // -ʤ-2010 - VSB_KARRY_YOUSHENG_2 = 4, // -ʤ-2012,2011 - VSB_KARRY_YOUYA = 5, // --2012,2011,2007 - VSB_KARRY_YOU_1 = 6 // --2011,2010,2009 + VSB_KARRY_OTHER = 0, // 其他(保留) + VSB_KARRY_YOU_2 = 1, // 开瑞-优优-2013,2012 + VSB_KARRY_YOUJIN_1 = 2, // 开瑞-优劲-2012,2011基本型,2010 + VSB_KARRY_YOUSHENG_1 = 3, // 开瑞-优胜-2010 + VSB_KARRY_YOUSHENG_2 = 4, // 开瑞-优胜-2012,2011 + VSB_KARRY_YOUYA = 5, // 开瑞-优雅-2012,2011,2007 + VSB_KARRY_YOU_1 = 6 // 开瑞-优优-2011,2010,2009 }VSB_KARRY_CLASS; -//ݱƷ +//捷豹子品牌类型 typedef enum _VSB_GAGUAR_CLASS { - VSB_GAGUAR_OTHER = 0, // - VSB_GAGUAR_XF_1 = 1, // ݱ-XF-2014,2013 - VSB_GAGUAR_XJ_1 = 2 // ݱ-XJ-2014,2013,2012,2011,2010 + VSB_GAGUAR_OTHER = 0, // 其他(保留) + VSB_GAGUAR_XF_1 = 1, // 捷豹-XF-2014,2013 + VSB_GAGUAR_XJ_1 = 2 // 捷豹-XJ-2014,2013,2012,2011,2010 }VSB_GAGUAR_CLASS; -//˹³Ʒ +//斯巴鲁子品牌类型 typedef enum _VSB_SUBARU_CLASS { - VSB_SUBARU_OTHER = 0, // - VSB_SUBARU_AOHU_1 = 1, // ˹³--2012,2011,2010 - VSB_SUBARU_LISHI_1 = 2, // ˹³-ʨγ-2008,2006 - VSB_SUBARU_LISHI_2 = 3, // ˹³-ʨγ-2011,2010 - VSB_SUBARU_XV_1 = 4, // ˹³-˹³XV-2014,2012 - VSB_SUBARU_SENLINREN_1 = 5, // ˹³-ɭ-2007,2006 - VSB_SUBARU_SENLINREN_2 = 6 // ˹³-ɭ-2012,2011,2010,2009,2008 + VSB_SUBARU_OTHER = 0, // 其他(保留) + VSB_SUBARU_AOHU_1 = 1, // 斯巴鲁-傲虎-2012,2011,2010 + VSB_SUBARU_LISHI_1 = 2, // 斯巴鲁-力狮轿车-2008,2006 + VSB_SUBARU_LISHI_2 = 3, // 斯巴鲁-力狮轿车-2011,2010 + VSB_SUBARU_XV_1 = 4, // 斯巴鲁-斯巴鲁XV-2014,2012 + VSB_SUBARU_SENLINREN_1 = 5, // 斯巴鲁-森林人-2007,2006 + VSB_SUBARU_SENLINREN_2 = 6 // 斯巴鲁-森林人-2012,2011,2010,2009,2008 }VSB_SUBARU_CLASS; -//ʱƷ +//时代汽车子品牌类型 typedef enum _VSB_ERA_CLASS { - VSB_ERA_OTHER = 0, // - VSB_ERA_XIAOKA_1 = 1, // ʱ-С֮-С֮1,2,Q2 - VSB_ERA_XIAOKA_3 = 2, // ʱ-С֮-С֮5 - VSB_ERA_XIAOKA_4 = 3, // ʱ-С֮- - VSB_ERA_KANGRUI_1 = 4, // ʱ--H1 - VSB_ERA_KANGRUI_2 = 5, // ʱ--H3 - VSB_ERA_KANGRUI_3 = 6, // ʱ--K1,KQ1 - VSB_ERA_RUIWO_1 = 7, // ʱ--RC1 - VSB_ERA_RUIWO_2 = 8, // ʱ--RC2 - VSB_ERA_RUIWO_3 = 9, // ʱ--IIῨA - VSB_ERA_JINGANG = 10, // ʱ--568 - VSB_ERA_LINGHANG_1 = 11, // ʱ-캽-캽2 - VSB_ERA_LINGHANG_2 = 12, // ʱ-캽-캽3 - VSB_ERA_YULING_1 = 13, // ʱ-Ԧ-ԦV1 - VSB_ERA_YULING_2 = 14, // ʱ-Ԧ-ԦV5,VQ5 - VSB_ERA_YULING_3 = 15, // ʱ-Ԧ-ԦVQ1,VQ2 - VSB_ERA_YULING_4 = 17, // ʱ-Ԧ- - VSB_ERA_XIAOKA_2 = 17, // ʱ-С֮-С֮3 + VSB_ERA_OTHER = 0, // 其他(保留) + VSB_ERA_XIAOKA_1 = 1, // 时代汽车-小卡之星-小卡之星1,2,Q2 + VSB_ERA_XIAOKA_3 = 2, // 时代汽车-小卡之星-小卡之星5 + VSB_ERA_XIAOKA_4 = 3, // 时代汽车-小卡之星-福锐 + VSB_ERA_KANGRUI_1 = 4, // 时代汽车-康瑞-康瑞H1 + VSB_ERA_KANGRUI_2 = 5, // 时代汽车-康瑞-康瑞H3 + VSB_ERA_KANGRUI_3 = 6, // 时代汽车-康瑞-康瑞K1,KQ1 + VSB_ERA_RUIWO_1 = 7, // 时代汽车-瑞沃-RC1 + VSB_ERA_RUIWO_2 = 8, // 时代汽车-瑞沃-RC2 + VSB_ERA_RUIWO_3 = 9, // 时代汽车-瑞沃-瑞沃II轻卡A + VSB_ERA_JINGANG = 10, // 时代汽车-金刚-金刚568 + VSB_ERA_LINGHANG_1 = 11, // 时代汽车-领航-领航2 + VSB_ERA_LINGHANG_2 = 12, // 时代汽车-领航-领航3 + VSB_ERA_YULING_1 = 13, // 时代汽车-驭菱-驭菱V1 + VSB_ERA_YULING_2 = 14, // 时代汽车-驭菱-驭菱V5,VQ5 + VSB_ERA_YULING_3 = 15, // 时代汽车-驭菱-驭菱VQ1,VQ2 + VSB_ERA_YULING_4 = 17, // 时代汽车-驭菱-鸿运 + VSB_ERA_XIAOKA_2 = 17, // 时代汽车-小卡之星-小卡之星3 }VSB_ERA_CLASS; -//Ʒ +//昌河子品牌类型 typedef enum _VSB_CHANGHE_CLASS { - VSB_CHANGHE_OTHER = 0, // - VSB_CHANGHE_CH6321_1 = 1, // -CH6321-2000 - VSB_CHANGHE_DANSHUANGPAI_1 = 2, // -µ˫-1999 - VSB_CHANGHE_AIDIER_1 = 3, // -϶-2004 - VSB_CHANGHE_AIDIER_2 = 4, // -϶-2007,2006 - VSB_CHANGHE_FURUIDA_1 = 5 // --2014,2013,2011,2009 + VSB_CHANGHE_OTHER = 0, // 其他(保留) + VSB_CHANGHE_CH6321_1 = 1, // 昌河-CH6321-2000 + VSB_CHANGHE_DANSHUANGPAI_1 = 2, // 昌河-昌河新单双排-1999 + VSB_CHANGHE_AIDIER_1 = 3, // 昌河-爱迪尔-2004 + VSB_CHANGHE_AIDIER_2 = 4, // 昌河-爱迪尔Ⅱ-2007,2006 + VSB_CHANGHE_FURUIDA_1 = 5 // 昌河-福瑞达面包车-2014,2013,2011,2009 }VSB_CHANGHE_CLASS; -//ŷƷ +//欧宝子品牌类型 typedef enum _VSB_OPEL_CLASS { - VSB_OPEL_OTHER = 0, // - VSB_OPEL_YATE_1 = 1 // ŷ--2010GTCȫ絲,2007,2006 + VSB_OPEL_OTHER = 0, // 其他(保留) + VSB_OPEL_YATE_1 = 1 // 欧宝-雅特-2010GTC全景风挡版,2007,2006 }VSB_OPEL_CLASS; -//ԴƷ +//永源子品牌类型 typedef enum _VSB_JONWAY_CLASS { - VSB_JONWAY_OTHER = 0, // - VSB_JONWAY_A380_1 = 1 // Դ-A380-2010,2009,2008 + VSB_JONWAY_OTHER = 0, // 其他(保留) + VSB_JONWAY_A380_1 = 1 // 永源-A380-2010,2009,2008 }VSB_JONWAY_CLASS; -//Ʒ +//江南子品牌类型 typedef enum _VSB_JIANGNAN_CLASS { - VSB_JIANGNAN_OTHER = 0, // - VSB_JIANGNAN_TT_1 = 1 // -TT-2011,2010,2004 + VSB_JIANGNAN_OTHER = 0, // 其他(保留) + VSB_JIANGNAN_TT_1 = 1 // 江南-江南TT-2011,2010,2004 }VSB_JIANGNAN_CLASS; -//ȫӥƷ +//吉利全球鹰子品牌类型 typedef enum _VSB_GLEAGLE_CLASS { - VSB_GLEAGLE_OTHER = 0, // - VSB_GLEAGLE_EAGLE_GC7_1 = 1, // ȫӥ-GC7-2013,2012 - VSB_GLEAGLE_EAGLE_GX2_1 = 2, // ȫӥ-GX2-2012,2011 - VSB_GLEAGLE_EAGLE_GX7_1 = 3, // ȫӥ-GX7-2013,2012 - VSB_GLEAGLE_EAGLE_PANDA_1 = 4, // ȫӥ-è-2013,2011,2010,2009 - VSB_GLEAGLE_EAGLE_ZIYOUJIAN_1 = 5, // ȫӥ-ɽ-2009±׼,2007 - VSB_GLEAGLE_EAGLE_ZIYOUJIAN_2 = 6, // ȫӥ-ɽ-2010,2009,2008,2006,2005 - VSB_GLEAGLE_EAGLE_ZIYOUJIAN_3 = 7, // ȫӥ-ɽ-2012,2011 - VSB_GLEAGLE_EAGLE_YUANJING_1 = 8, // ȫӥ-Զ-2011,2010,2009,2008,2006 - VSB_GLEAGLE_EAGLE_YUANJING_2 = 9, // ȫӥ-Զ-2013,2012 + VSB_GLEAGLE_OTHER = 0, // 其他(保留) + VSB_GLEAGLE_EAGLE_GC7_1 = 1, // 吉利全球鹰-GC7-2013,2012 + VSB_GLEAGLE_EAGLE_GX2_1 = 2, // 吉利全球鹰-GX2-2012,2011 + VSB_GLEAGLE_EAGLE_GX7_1 = 3, // 吉利全球鹰-GX7-2013,2012 + VSB_GLEAGLE_EAGLE_PANDA_1 = 4, // 吉利全球鹰-熊猫-2013,2011,2010,2009 + VSB_GLEAGLE_EAGLE_ZIYOUJIAN_1 = 5, // 吉利全球鹰-自由舰-2009精致标准型,2007 + VSB_GLEAGLE_EAGLE_ZIYOUJIAN_2 = 6, // 吉利全球鹰-自由舰-2010,2009,2008,2006,2005 + VSB_GLEAGLE_EAGLE_ZIYOUJIAN_3 = 7, // 吉利全球鹰-自由舰-2012,2011 + VSB_GLEAGLE_EAGLE_YUANJING_1 = 8, // 吉利全球鹰-远景-2011,2010,2009,2008,2006 + VSB_GLEAGLE_EAGLE_YUANJING_2 = 9, // 吉利全球鹰-远景-2013,2012 }VSB_GLEAGLE_CLASS; -//ۺƷ +//吉利帝豪子品牌类型 typedef enum _VSB_EMGRAND_CLASS { - VSB_EMGRAND_OTHER = 0, // - VSB_EMGRAND_EC7_2 = 1, // ۺ-EC7-2013 - VSB_EMGRAND_EC7_3 = 2, // ۺ-EC7-RV - VSB_EMGRAND_EC8_1 = 3, // ۺ-EC8-2013,2011,2010 - VSB_EMGRAND_EC7_1 = 4 // ۺ-EC7-2012,2010,2009 + VSB_EMGRAND_OTHER = 0, // 其他(保留) + VSB_EMGRAND_EC7_2 = 1, // 吉利帝豪-EC7-2013 + VSB_EMGRAND_EC7_3 = 2, // 吉利帝豪-EC7-RV + VSB_EMGRAND_EC8_1 = 3, // 吉利帝豪-EC8-2013,2011,2010 + VSB_EMGRAND_EC7_1 = 4 // 吉利帝豪-EC7-2012,2010,2009 }VSB_EMGRAND_CLASS; -//ӢƷ +//吉利英伦子品牌类型 typedef enum _VSB_ENGLON_CLASS { - VSB_ENGLON_OTHER = 0, // - VSB_ENGLON_SC3_1 = 1, // Ӣ-SC3-2012 - VSB_ENGLON_SC5_1 = 2, // Ӣ-SC5-RV-2012 - VSB_ENGLON_SC6_1 = 3, // Ӣ-SC6-2012 - VSB_ENGLON_SC7_1 = 4, // Ӣ-SC7-2013,2012,2011,2010 - VSB_ENGLON_SX7_1 = 5, // Ӣ-SX7-2014,2013 - VSB_ENGLON_JINGANG_1 = 6, // Ӣ--2010,2007,2006 - VSB_ENGLON_JINYING_1 = 7 // Ӣ-ӥ-2011,2010,2008 + VSB_ENGLON_OTHER = 0, // 其他(保留) + VSB_ENGLON_SC3_1 = 1, // 吉利英伦-SC3-2012 + VSB_ENGLON_SC5_1 = 2, // 吉利英伦-SC5-RV-2012 + VSB_ENGLON_SC6_1 = 3, // 吉利英伦-SC6-2012 + VSB_ENGLON_SC7_1 = 4, // 吉利英伦-SC7-2013,2012,2011,2010 + VSB_ENGLON_SX7_1 = 5, // 吉利英伦-SX7-2014,2013 + VSB_ENGLON_JINGANG_1 = 6, // 吉利英伦-金刚-2010,2007,2006 + VSB_ENGLON_JINYING_1 = 7 // 吉利英伦-金鹰-2011,2010,2008 }VSB_ENGLON_CLASS; -//-Ʒ +//江淮-子品牌类型 typedef enum _VSB_JAC_CLASS { - VSB_JAC_OTHER = 0, // - VSB_JAC_TONGYUE_1 = 1, // -ͬ-2012,2010,2008 - VSB_JAC_HEYUE_1 = 2, // --2012,2011,2010 - VSB_JAC_HEYUEA30_2 = 3, // -A30-2013 - VSB_JAC_HEYUERS_3 = 4, // -RS-2012,2011 - VSB_JAC_HAOYUN_1 = 5, // --Ῠ1 - VSB_JAC_WEILING_2 = 6, // --ŰῨ - VSB_JAC_WEILING_3 = 7, // --ػ - VSB_JAC_WEILING_4 = 8, // --Ῠ - VSB_JAC_KECHE_1 = 9, // -ͳ-A - VSB_JAC_BINYUE_1 = 10, // --2010,2008 - VSB_JAC_SHUAILING_2 = 11, // -˧-Ῠ - VSB_JAC_KANGLING_1 = 12, // --Ῠ1 - VSB_JAC_KANGLING_2 = 13, // --Ῠ2 - VSB_JAC_YUEYUE_1 = 14, // --2013,2012,2011,2010 - VSB_JAC_XINGRUI_1 = 15, // --2012,2011 - VSB_JAC_GEERFA_H_1 = 16, // -H-ػ - VSB_JAC_GEERFA_K_2 = 17, // -K-ؿ1 - VSB_JAC_GEERFA_K_3 = 18, // -K-ؿ2 - VSB_JAC_GEERFA_M_4 = 19, // -M-ػ - VSB_JAC_RUIFENG_1 = 20, // --2011,2009,2007ֶ - VSB_JAC_RUIFENG_2 = 21, // --2013,2012,2011,2010,2007,2005 - VSB_JAC_RUIFENG_3 = 22, // -M5-2012,2011 - VSB_JAC_RUIFENG_4 = 23, // -S5-2013 - VSB_JAC_RUIYING_1 = 24, // -ӥ-2009,2007 - VSB_JAC_RUIYING_2 = 25, // -ӥ-2013,2012,2011 - VSB_JAC_JUNLING_2 = 26, // --խ, - VSB_JAC_WEILING_1 = 27, // --ʽῨ - VSB_JAC_SHUAILING_1 = 28, // -˧-ʮ - VSB_JAC_RUILING_1 = 29, // --2012 - VSB_JAC_JUNLING_1 = 30 // --콢 + VSB_JAC_OTHER = 0, // 其他(保留) + VSB_JAC_TONGYUE_1 = 1, // 江淮-同悦-2012,2010,2008 + VSB_JAC_HEYUE_1 = 2, // 江淮-和悦-2012,2011,2010 + VSB_JAC_HEYUEA30_2 = 3, // 江淮-和悦A30-2013 + VSB_JAC_HEYUERS_3 = 4, // 江淮-和悦RS-2012,2011 + VSB_JAC_HAOYUN_1 = 5, // 江淮-好运-轻卡1 + VSB_JAC_WEILING_2 = 6, // 江淮-威铃-排半轻卡 + VSB_JAC_WEILING_3 = 7, // 江淮-威铃-栏板载货车 + VSB_JAC_WEILING_4 = 8, // 江淮-威铃-轻卡 + VSB_JAC_KECHE_1 = 9, // 江淮-客车-A款 + VSB_JAC_BINYUE_1 = 10, // 江淮-宾悦-2010,2008 + VSB_JAC_SHUAILING_2 = 11, // 江淮-帅铃-轻卡 + VSB_JAC_KANGLING_1 = 12, // 江淮-康铃-轻卡1 + VSB_JAC_KANGLING_2 = 13, // 江淮-康铃-轻卡2 + VSB_JAC_YUEYUE_1 = 14, // 江淮-悦悦-2013,2012,2011,2010 + VSB_JAC_XINGRUI_1 = 15, // 江淮-星锐-2012,2011 + VSB_JAC_GEERFA_H_1 = 16, // 江淮-格尔发H-栏板载货车 + VSB_JAC_GEERFA_K_2 = 17, // 江淮-格尔发K-重卡1 + VSB_JAC_GEERFA_K_3 = 18, // 江淮-格尔发K-重卡2 + VSB_JAC_GEERFA_M_4 = 19, // 江淮-格尔发M-栏板载货车 + VSB_JAC_RUIFENG_1 = 20, // 江淮-瑞风-2011,2009,2007手动 + VSB_JAC_RUIFENG_2 = 21, // 江淮-瑞风-2013,2012,2011,2010,2007,2005 + VSB_JAC_RUIFENG_3 = 22, // 江淮-瑞风M5-2012,2011 + VSB_JAC_RUIFENG_4 = 23, // 江淮-瑞风S5-2013 + VSB_JAC_RUIYING_1 = 24, // 江淮-瑞鹰-2009,2007 + VSB_JAC_RUIYING_2 = 25, // 江淮-瑞鹰-2013,2012,2011 + VSB_JAC_JUNLING_2 = 26, // 江淮-骏铃-窄体版,中体版 + VSB_JAC_WEILING_1 = 27, // 江淮-威铃-厢式轻卡 + VSB_JAC_SHUAILING_1 = 28, // 江淮-帅铃-五十铃 + VSB_JAC_RUILING_1 = 29, // 江淮-瑞铃-2012 + VSB_JAC_JUNLING_1 = 30 // 江淮-骏铃-旗舰版 }VSB_JAC_CLASS; -//Ʒ +//江铃子品牌类型 typedef enum _VSB_JMC_CLASS { - VSB_JMC_OTHER = 0, // - VSB_JMC_KAIYUN_1 = 1, // --102,109Ῠ - VSB_JMC_KAIYUN_2 = 2, // --95Ῠ - VSB_JMC_YUHU_1 = 3, // --2012 - VSB_JMC_BAODIAN_1 = 4, // --2007 - VSB_JMC_BAODIAN_2 = 5, // --2009׼,2008 - VSB_JMC_BAODIAN_3 = 6, // --2014,2012,2009 - VSB_JMC_BAOWEI_1 = 7, // --2005 - VSB_JMC_BAOWEI_2 = 8, // --2009 - VSB_JMC_QUANSHUN_1 = 9, // -ȫ˳-2010,2008 - VSB_JMC_QUANSHUN_2 = 10, // -ȫ˳-2006 - VSB_JMC_QUANSHUN_3 = 11, // -ȫ˳-2013,2011,2010 - VSB_JMC_SHUNDA_1 = 12, // -˳-2004,2003 - VSB_JMC_SHUNDA_2 = 13, // -˳-2011,2010,2008 - VSB_JMC_YUSHENG_1 = 14, // -Ԧʤ-2013 - VSB_JMC_YUSHENG_2 = 15 // -Ԧʤ-2013ֶװ,2012,2011 + VSB_JMC_OTHER = 0, // 其他(保留) + VSB_JMC_KAIYUN_1 = 1, // 江铃-凯运-102,109马力轻卡 + VSB_JMC_KAIYUN_2 = 2, // 江铃-凯运-95马力轻卡 + VSB_JMC_YUHU_1 = 3, // 江铃-域虎-2012 + VSB_JMC_BAODIAN_1 = 4, // 江铃-宝典-2007 + VSB_JMC_BAODIAN_2 = 5, // 江铃-宝典-2009标准型,2008 + VSB_JMC_BAODIAN_3 = 6, // 江铃-宝典-2014,2012,2009豪华型 + VSB_JMC_BAOWEI_1 = 7, // 江铃-宝威-2005 + VSB_JMC_BAOWEI_2 = 8, // 江铃-宝威-2009 + VSB_JMC_QUANSHUN_1 = 9, // 江铃-福特新世代全顺-2010,2008 + VSB_JMC_QUANSHUN_2 = 10, // 江铃-经典全顺-2006 + VSB_JMC_QUANSHUN_3 = 11, // 江铃-经典全顺-2013,2011,2010 + VSB_JMC_SHUNDA_1 = 12, // 江铃-顺达-2004,2003 + VSB_JMC_SHUNDA_2 = 13, // 江铃-顺达-2011,2010,2008 + VSB_JMC_YUSHENG_1 = 14, // 江铃-驭胜-2013 + VSB_JMC_YUSHENG_2 = 15 // 江铃-驭胜-2013手动特装版,2012,2011 }VSB_JMC_CLASS; -// ֶƷ +// 沃尔沃子品牌类型 typedef enum _VSB_VOLVO_CLASS { - VSB_VOLVO_OTHER = 0, // - VSB_VOLVO_C30_1 = 1, // ֶ-C30-2013,2012,2011,2010 - VSB_VOLVO_S40_1 = 2, // ֶ-S40-2012,2011,2010,2009,2008,2007 - VSB_VOLVO_S60_1 = 3, // ֶ-S60-2003 - VSB_VOLVO_S60_2 = 4, // ֶ-S60-2013,2012,2011 - VSB_VOLVO_S80L_1 = 5, // ֶ-S80L-2012,2011,2010,2009 - VSB_VOLVO_XC60_1 = 6, // ֶ-XC60-2013,2012,2011,2010,2009 - VSB_VOLVO_XC90_1 = 7 // ֶ-XC90-2013,2012,2011,2008 + VSB_VOLVO_OTHER = 0, // 其他(保留) + VSB_VOLVO_C30_1 = 1, // 沃尔沃-C30-2013,2012,2011,2010 + VSB_VOLVO_S40_1 = 2, // 沃尔沃-S40-2012,2011,2010,2009,2008,2007 + VSB_VOLVO_S60_1 = 3, // 沃尔沃-S60-2003 + VSB_VOLVO_S60_2 = 4, // 沃尔沃-S60-2013,2012,2011 + VSB_VOLVO_S80L_1 = 5, // 沃尔沃-S80L-2012,2011,2010,2009 + VSB_VOLVO_XC60_1 = 6, // 沃尔沃-XC60-2013,2012,2011,2010,2009 + VSB_VOLVO_XC90_1 = 7 // 沃尔沃-XC90-2013,2012,2011,2008 }VSB_VOLVO_CLASS; -// Ʒ +// 海格子品牌类型 typedef enum _VSB_HIGER_CLASS { - VSB_HIGER_OTHER = 0, // - VSB_HIGER_H8_1 = 1, // -H8-A - VSB_HIGER_H92_1 = 2, // -H92-A - VSB_HIGER_V7_1 = 3, // -V7,V8-2006 - VSB_HIGER_KECHE_1 = 4, // -ͳ5-A - VSB_HIGER_LONGWEI_1 = 5, // --2012,2011 - VSB_HIGER_H7V_1 = 6 // -H7V-2010 + VSB_HIGER_OTHER = 0, // 其他(保留) + VSB_HIGER_H8_1 = 1, // 海格-H8-A款 + VSB_HIGER_H92_1 = 2, // 海格-H92-A款 + VSB_HIGER_V7_1 = 3, // 海格-V7,V8-2006 + VSB_HIGER_KECHE_1 = 4, // 海格-客车车型5-A款 + VSB_HIGER_LONGWEI_1 = 5, // 海格-龙威-2012,2011 + VSB_HIGER_H7V_1 = 6 // 海格-海格H7V-2010 }VSB_HIGER_CLASS; -// Ʒ +// 瑞麒子品牌类型 typedef enum _VSB_RUILIN_CLASS { - VSB_RUILIN_OTHER = 0, // - VSB_RUILIN_G3_1 = 1, // -G3-2012,2010 - VSB_RUILIN_G5_1 = 2, // -G5-2012,2011,2010 - VSB_RUILIN_M1_1 = 3, // -M1-2013,2011,2010,2009 - VSB_RUILIN_X1_1 = 4, // -X1-2012A,2011,2010 - VSB_RUILIN_X1_2 = 5 // -X1-2012B + VSB_RUILIN_OTHER = 0, // 其他(保留) + VSB_RUILIN_G3_1 = 1, // 瑞麒-G3-2012,2010 + VSB_RUILIN_G5_1 = 2, // 瑞麒-G5-2012,2011,2010 + VSB_RUILIN_M1_1 = 3, // 瑞麒-M1-2013,2011,2010,2009 + VSB_RUILIN_X1_1 = 4, // 瑞麒-X1-2012A,2011,2010 + VSB_RUILIN_X1_2 = 5 // 瑞麒-X1-2012B }VSB_RUILIN_CLASS; -// Ʒ +// 申龙子品牌类型 typedef enum _VSB_SHENLONG_CLASS { - VSB_SHENLON_OTHER = 0, // - VSB_SHENLONG_KECHE_1 = 1 //ͳ-ͳ4-A + VSB_SHENLON_OTHER = 0, // 其他(保留) + VSB_SHENLONG_KECHE_1 = 1 //申龙客车-客车车型4-A款 }VSB_SHENLONG_CLASS; -// Ʒ +// 福田子品牌类型 typedef enum _VSB_FOTON_CLASS { - VSB_FOTON_OTHER = 0, // - VSB_FOTON_AOLING_1 = 1, // --п - VSB_FOTON_AOLING_2 = 2, // --ʽ - VSB_FOTON_AOLING_3 = 3, // --TX,CTX - VSB_FOTON_OUMAN_1 = 4, // -ŷ-GTL6ϵB - VSB_FOTON_OUMAN_2 = 5, // -ŷ-TX6ϵ,9ϵ - VSB_FOTON_OUMAN_3 = 6, // -ŷ-ŷؿ1 - VSB_FOTON_OUMAN_4 = 7, // -ŷ-ʨ6ϵ,9ϵ - VSB_FOTON_OUHUI_1 = 8, // -ŷԿͳ-D - VSB_FOTON_OUMAKE_1 = 9, // -ŷ-3ϵ - VSB_FOTON_OUMAKE_2 = 10, // -ŷ-5ϵ - VSB_FOTON_SAPU_1 = 11, // --2011 - VSB_FOTON_SAPU_3 = 12, // --2011͹ - VSB_FOTON_MENGPAIKE_1 = 13, // -ɿ-2013 - VSB_FOTON_MIDI_1 = 14, // -Ե-2011,2009 - VSB_FOTON_FENGJING_1 = 15, // -羰ϵ-2012,2011,2009 - VSB_FOTON_SAPU_2 = 16 // --2011Z7 + VSB_FOTON_OTHER = 0, // 其他(保留) + VSB_FOTON_AOLING_1 = 1, // 福田-奥铃-中卡 + VSB_FOTON_AOLING_2 = 2, // 福田-奥铃-厢式货车 + VSB_FOTON_AOLING_3 = 3, // 福田-奥铃-奥铃TX,CTX + VSB_FOTON_OUMAN_1 = 4, // 福田-欧曼-GTL6系B + VSB_FOTON_OUMAN_2 = 5, // 福田-欧曼-TX6系,9系 + VSB_FOTON_OUMAN_3 = 6, // 福田-欧曼-欧曼重卡1 + VSB_FOTON_OUMAN_4 = 7, // 福田-欧曼-雄狮6系,9系 + VSB_FOTON_OUHUI_1 = 8, // 福田-欧辉客车-D款 + VSB_FOTON_OUMAKE_1 = 9, // 福田-欧马可-3系 + VSB_FOTON_OUMAKE_2 = 10, // 福田-欧马可-5系 + VSB_FOTON_SAPU_1 = 11, // 福田-萨普-2011 + VSB_FOTON_SAPU_3 = 12, // 福田-萨普-2011柴油共轨 + VSB_FOTON_MENGPAIKE_1 = 13, // 福田-蒙派克-2013 + VSB_FOTON_MIDI_1 = 14, // 福田-迷迪-2011,2009 + VSB_FOTON_FENGJING_1 = 15, // 福田-风景系列-2012,2011,2009 + VSB_FOTON_SAPU_2 = 16 // 福田-萨普-2011四驱征服者Z7 }VSB_FOTON_CLASS; -//Ʒ +//福迪子品牌类型 typedef enum _VSB_FODAY_CLASS { - VSB_FODAY_OTHER = 0, // - VSB_FODAY_CHAOREN_1 = 1, // -СƤ-2009,2006 - VSB_FODAY_CHAOREN_2 = 2, // -СƤ-2011 - VSB_FODAY_TANSUOZHE_1 = 3, // -̽6-2013,2011,2010 - VSB_FODAY_TANSUOZHE_2 = 4, // -̽ߢ-2011,2010,2009 - VSB_FODAY_TANSUOZHE_3 = 5, // -̽ߢ-2011,2004 - VSB_FODAY_XIONGSHI_1 = 6 // -ʨF16Ƥ-2012 + VSB_FODAY_OTHER = 0, // 其他(保留) + VSB_FODAY_CHAOREN_1 = 1, // 福迪-小超人皮卡-2009,2006 + VSB_FODAY_CHAOREN_2 = 2, // 福迪-小超人皮卡-2011 + VSB_FODAY_TANSUOZHE_1 = 3, // 福迪-探索者6-2013,2011,2010 + VSB_FODAY_TANSUOZHE_2 = 4, // 福迪-探索者Ⅱ-2011,2010,2009 + VSB_FODAY_TANSUOZHE_3 = 5, // 福迪-探索者Ⅲ-2011,2004 + VSB_FODAY_XIONGSHI_1 = 6 // 福迪-雄狮F16皮卡-2012 }VSB_FODAY_CLASS; -// Ʒ +// 红旗子品牌类型 typedef enum _VSB_HONGQI_CLASS { - VSB_HONGQI_OTHER = 0, // - VSB_HONGQI_MINGSHI_1 = 1 // --2007,2003,2001,2000,1999 + VSB_HONGQI_OTHER = 0, // 其他(保留) + VSB_HONGQI_MINGSHI_1 = 1 // 红旗-明仕-2007,2003,2001,2000,1999 }VSB_HONGQI_CLASS; -// ǽ Ʒ +// 纳智捷 子品牌类型 typedef enum _VSB_LUXGEN_CLASS { - VSB_LUXGEN_OTHER = 0, // - VSB_LUXGEN_DASEVEN_1 = 1 // ǽ-7-SUV + VSB_LUXGEN_OTHER = 0, // 其他(保留) + VSB_LUXGEN_DASEVEN_1 = 1 // 纳智捷-大7-SUV }VSB_LUXGEN_CLASS; -// Ʒ +// 夏利子品牌类型 typedef enum _VSB_XIALI_CLASS { - VSB_XIALI_OTHER = 0, // - VSB_XIALI_QIBING_1 = 1, // ()--2010 + VSB_XIALI_OTHER = 0, // 其他(保留) + VSB_XIALI_QIBING_1 = 1, // 美亚(夏利)-奇兵-2010 }VSB_XIALI_CLASS; -// ۿͳƷ +// 舒驰客车子品牌类型 typedef enum _VSB_SHUCHI_CLASS { - VSB_SHUCHI_OTHER = 0, // - VSB_SHUCHI_A_1 = 1 // ۿͳ-ͳ-A + VSB_SHUCHI_OTHER = 0, // 其他(保留) + VSB_SHUCHI_A_1 = 1 // 舒驰客车-客车-A款 }VSB_SHUCHI_CLASS; -//ӢƷ +//英菲尼迪子品牌类型 typedef enum _VSB_INFINITI_CLASS { - VSB_INFINITI_OTHER = 0, // - VSB_INFINITI_EX_1 = 1, // Ӣ-EX-2013,2011,2010,2009,2008 - VSB_INFINITI_FX_1 = 2, // Ӣ-FX-2007 - VSB_INFINITI_FX_2 = 3, // Ӣ-FX-2011,2010,2009 - VSB_INFINITI_FX_3 = 4, // Ӣ-FX-2013,2012FX35 - VSB_INFINITI_G_1 = 5, // Ӣ-G-2013,2010 - VSB_INFINITI_JX_1 = 6 // Ӣ-JX-2013,2011 + VSB_INFINITI_OTHER = 0, // 其他(保留) + VSB_INFINITI_EX_1 = 1, // 英菲尼迪-EX-2013,2011,2010,2009,2008 + VSB_INFINITI_FX_1 = 2, // 英菲尼迪-FX-2007 + VSB_INFINITI_FX_2 = 3, // 英菲尼迪-FX-2011,2010,2009 + VSB_INFINITI_FX_3 = 4, // 英菲尼迪-FX-2013,2012FX35 + VSB_INFINITI_G_1 = 5, // 英菲尼迪-G-2013,2010 + VSB_INFINITI_JX_1 = 6 // 英菲尼迪-JX-2013,2011 }VSB_INFINITI_CLASS; -// Ʒ +// 莲花子品牌类型 typedef enum _VSB_LOTUS_CLASS { - VSB_LOTUS_OTHER = 0, // - VSB_LOTUS_L3_1 = 1, // -L3-2010,2009 - VSB_LOTUS_L3_2 = 2 // -L5-2012,2011 + VSB_LOTUS_OTHER = 0, // 其他(保留) + VSB_LOTUS_L3_1 = 1, // 莲花-L3三厢-2010豪华型,2009 + VSB_LOTUS_L3_2 = 2 // 莲花-L5三厢-2012,2011 }VSB_LOTUS_CLASS; -//Ʒ +//菲亚特子品牌类型 typedef enum _VSB_FIAT_CLASS { - VSB_FIAT_OTHER = 0, // - VSB_FIAT_FEIYUE_1 = 1 // -Ծ-2014,2013,2012 + VSB_FIAT_OTHER = 0, // 其他(保留) + VSB_FIAT_FEIYUE_1 = 1 // 菲亚特-菲跃-2014,2013,2012 }VSB_FIAT_CLASS; -//کƷ +//讴歌子品牌类型 typedef enum _VSB_OGA_CLASS { - VSB_OGA_OTHER = 0, // - VSB_OGA_MDX_1 = 1, // ک-MDX-2010 - VSB_OGA_MDX_2 = 2 // ک-MDX-2011 + VSB_OGA_OTHER = 0, // 其他(保留) + VSB_OGA_MDX_1 = 1, // 讴歌-MDX-2010 + VSB_OGA_MDX_2 = 2 // 讴歌-MDX-2011 }VSB_OGA_CLASS; -// ԾƷ +// 跃进子品牌类型 typedef enum _VSB_YUEJIN_CLASS { - VSB_YUEJIN_OTHER = 0, // - VSB_YUEJIN_SHUAIHU_1 = 1, // Ծ-˧-H100,H300 - VSB_YUEJIN_CAISHEN_1 = 2, // Ծ--S100 - VSB_YUEJIN_CAISHEN_2 = 3, // Ծ--S300 - VSB_YUEJIN_CAISHEN_3 = 4 // Ծ--S500 + VSB_YUEJIN_OTHER = 0, // 其他(保留) + VSB_YUEJIN_SHUAIHU_1 = 1, // 跃进-帅虎-H100,H300 + VSB_YUEJIN_CAISHEN_1 = 2, // 跃进-财神-S100 + VSB_YUEJIN_CAISHEN_2 = 3, // 跃进-财神-S300 + VSB_YUEJIN_CAISHEN_3 = 4 // 跃进-财神-S500 }VSB_YUEJIN_CLASS; -//ҰƷ +//野马子品牌类型 typedef enum _VSB_YEMA_CLASS { - VSB_YEMA_OTHER = 0, // - VSB_YEMA_F99_1 = 1 // Ұ-F99-2012,2011,2010,2009 + VSB_YEMA_OTHER = 0, // 其他(保留) + VSB_YEMA_F99_1 = 1 // 野马-F99-2012,2011,2010,2009 }VSB_YEMA_CLASS; -//Ʒ +//金龙子品牌类型 typedef enum _VSB_SZKINGLONG_CLASS { - VSB_SZKINGLONG_OTHER = 0, // - VSB_SZKINGLONG_BUS11_1 = 1, // -ͳ11-A - VSB_SZKINGLONG_BUS12_1 = 2, // -ͳ12-A - VSB_SZKINGLONG_BUS13_1 = 3, // -ͳ13-A - VSB_SZKINGLONG_BUS14_1 = 4, // -ͳ14-A - VSB_SZKINGLONG_BUS16_1 = 5, // -ͳ16-A - VSB_SZKINGLONG_BUS18_1 = 6, // -ͳ18-A - VSB_SZKINGLONG_BUS1_1 = 7, // -ͳ1-A - VSB_SZKINGLONG_BUS20_1 = 8, // -ͳ20-A - VSB_SZKINGLONG_BUS2_1 = 9, // -ͳ2-A - VSB_SZKINGLONG_BUS5_1 = 10, // -ͳ5-A - VSB_SZKINGLONG_BUS6_1 = 11, // -ͳ6-A - VSB_SZKINGLONG_BUS9_1 = 12, // -ͳ9-A - VSB_SZKINGLONG_BUS10_1 = 13, // -ͳ10-A - VSB_SZKINGLONG_BUS15_1 = 14 // -ͳ15-A + VSB_SZKINGLONG_OTHER = 0, // 其他(保留) + VSB_SZKINGLONG_BUS11_1 = 1, // 金龙-客车车型11-A款 + VSB_SZKINGLONG_BUS12_1 = 2, // 金龙-客车车型12-A款 + VSB_SZKINGLONG_BUS13_1 = 3, // 金龙-客车车型13-A款 + VSB_SZKINGLONG_BUS14_1 = 4, // 金龙-客车车型14-A款 + VSB_SZKINGLONG_BUS16_1 = 5, // 金龙-客车车型16-A款 + VSB_SZKINGLONG_BUS18_1 = 6, // 金龙-客车车型18-A款 + VSB_SZKINGLONG_BUS1_1 = 7, // 金龙-客车车型1-A款 + VSB_SZKINGLONG_BUS20_1 = 8, // 金龙-客车车型20-A款 + VSB_SZKINGLONG_BUS2_1 = 9, // 金龙-客车车型2-A款 + VSB_SZKINGLONG_BUS5_1 = 10, // 金龙-客车车型5-A款 + VSB_SZKINGLONG_BUS6_1 = 11, // 金龙-客车车型6-A款 + VSB_SZKINGLONG_BUS9_1 = 12, // 金龙-客车车型9-A款 + VSB_SZKINGLONG_BUS10_1 = 13, // 金龙-客车车型10-A款 + VSB_SZKINGLONG_BUS15_1 = 14 // 金龙-客车车型15-A款 }VSB_SZKINGLONG_CLASS; -//ԱƷ +//长丰猎豹子品牌类型 typedef enum _VSB_CHANGFENG_CLASS { - VSB_CHANGFENG_OTHER = 0, // - VSB_CHANGFENG_CS7_1 = 1, // Ա-CS7-2009 - VSB_CHANGFENG_QIBING_1 = 2, // Ա--2010,2009 - VSB_CHANGFENG_LIEBAO_1 = 3, // Ա-ԱCS6-2010,2008 - VSB_CHANGFENG_FULING_1 = 4, // Ա-Ƥ-A - VSB_CHANGFENG_FEIYANG_1 = 5, // Ա-Ƥ-2010,2009,2005 - VSB_CHANGFENG_FEITENG_1 = 6, // Ա--2010,2009,2006 - VSB_CHANGFENG_BLACKJINGANG_1 = 7, // Ա-ڽ-2013,2010,2009,2008,2006 + VSB_CHANGFENG_OTHER = 0, // 其他(保留) + VSB_CHANGFENG_CS7_1 = 1, // 长丰猎豹-CS7-2009 + VSB_CHANGFENG_QIBING_1 = 2, // 长丰猎豹-奇兵-2010,2009 + VSB_CHANGFENG_LIEBAO_1 = 3, // 长丰猎豹-猎豹CS6-2010,2008 + VSB_CHANGFENG_FULING_1 = 4, // 长丰猎豹-福铃皮卡-A款 + VSB_CHANGFENG_FEIYANG_1 = 5, // 长丰猎豹-飞扬皮卡-2010,2009,2005 + VSB_CHANGFENG_FEITENG_1 = 6, // 长丰猎豹-飞腾-2010,2009,2006 + VSB_CHANGFENG_BLACKJINGANG_1 = 7, // 长丰猎豹-黑金刚-2013,2010,2009,2008,2006 }VSB_CHANGFENG_CLASS; -//½Ʒ +//陆风子品牌类型 typedef enum _VSB_LUFENG_CLASS { - VSB_LUFENG_OTHER = 0, // - VSB_LUFENG_X6_1 = 1, // ½-X6-2005 - VSB_LUFENG_X6_2 = 2, // ½-X6-2006 - VSB_LUFENG_X6_3 = 3, // ½-X6-2011,2010,2008,2007 - VSB_LUFENG_LUFENGX5_1 = 4, // ½-½X5-2013 - VSB_LUFENG_LUFENGX8_1 = 5, // ½-½X8-2013,2012,2011,2009 - VSB_LUFENG_LUFENGX8_2 = 6, // ½-½X8-2014,2012̽ - VSB_LUFENG_FENGHUA_1 = 7, // ½-绪-2008,2007 - VSB_LUFENG_X6_4 = 8, // ½-X6-2011 - VSB_LUFENG_FENGSHANG_1 = 9 // ½--2011,2006 + VSB_LUFENG_OTHER = 0, // 其他(保留) + VSB_LUFENG_X6_1 = 1, // 陆风-X6-2005 + VSB_LUFENG_X6_2 = 2, // 陆风-X6-2006 + VSB_LUFENG_X6_3 = 3, // 陆风-X6-2011,2010,2008,2007 + VSB_LUFENG_LUFENGX5_1 = 4, // 陆风-陆风X5-2013 + VSB_LUFENG_LUFENGX8_1 = 5, // 陆风-陆风X8-2013,2012,2011,2009 + VSB_LUFENG_LUFENGX8_2 = 6, // 陆风-陆风X8-2014,2012探索版 + VSB_LUFENG_FENGHUA_1 = 7, // 陆风-风华-2008,2007 + VSB_LUFENG_X6_4 = 8, // 陆风-X6-2011两驱 + VSB_LUFENG_FENGSHANG_1 = 9 // 陆风-风尚-2011,2006 }VSB_LUFENG_CLASS; -//ؿƷ +//陕汽重卡子品牌类型 typedef enum _VSB_SHANQI_CLASS { - VSB_SHANQI_OTHER = 0, // - VSB_SHANQI_AOLONG_1 = 1, // ؿ--ؿA - VSB_SHANQI_AOLONG_2 = 2, // ؿ--ؿB - VSB_SHANQI_DELONG_1 = 3, // ؿ-F2000-4X2ǣ - VSB_SHANQI_DELONG_2 = 4, // ؿ-F3000-B - VSB_SHANQI_DELONG_3 = 5, // ؿ-M3000-ؿ + VSB_SHANQI_OTHER = 0, // 其他(保留) + VSB_SHANQI_AOLONG_1 = 1, // 陕汽重卡-奥龙-重卡A + VSB_SHANQI_AOLONG_2 = 2, // 陕汽重卡-奥龙-重卡B + VSB_SHANQI_DELONG_1 = 3, // 陕汽重卡-德龙F2000-4X2牵引车 + VSB_SHANQI_DELONG_2 = 4, // 陕汽重卡-德龙F3000-B款 + VSB_SHANQI_DELONG_3 = 5, // 陕汽重卡-德龙M3000-重卡 }VSB_SHANQI_CLASS; -//ҰƷ +//野马子品牌类型 typedef enum _VSB_RENAULT_CLASS { - VSB_RENAULT_OTHER = 0, // - VSB_RENAULT_MEIGANNA_1 = 1, // ŵ-÷-2006 - VSB_RENAULT_KELEIAO_1 = 2, // ŵ-װ-2010,2009 - VSB_RENAULT_KELEIAO_2 = 3, // ŵ-װ-2013,2012 - VSB_RENAULT_SCENE_1 = 4, // ŵ-羰-2007 - VSB_RENAULT_FENGLANG_1 = 5, // ŵ--2011 - VSB_RENAULT_TAFEIKE_1 = 6 // ŵ-ƿ-2004 + VSB_RENAULT_OTHER = 0, // 其他(保留) + VSB_RENAULT_MEIGANNA_1 = 1, // 雷诺-梅甘娜-2006 + VSB_RENAULT_KELEIAO_1 = 2, // 雷诺-科雷傲-2010,2009 + VSB_RENAULT_KELEIAO_2 = 3, // 雷诺-科雷傲-2013,2012 + VSB_RENAULT_SCENE_1 = 4, // 雷诺-风景-2007 + VSB_RENAULT_FENGLANG_1 = 5, // 雷诺-风朗-2011 + VSB_RENAULT_TAFEIKE_1 = 6 // 雷诺-塔菲克-2004 }VSB_RENAULT_CLASS; -//ƺƷ +//黄海子品牌类型 typedef enum _VSB_HUANGHAI_CLASS { - VSB_HUANGHAI_OTHER = 0, // - VSB_HUANGHAI_DACAISHEN_1 = 1, // ƺ--2013,2012 - VSB_HUANGHAI_DACAISHEN_2 = 2, // ƺ--2013,2012,2011,2010,2009Ͱ - VSB_HUANGHAI_BUS4_1 = 3, // ƺ-ͳ4-2012,2011 - VSB_HUANGHAI_CHALLENGER_1 = 4, // ƺ-ս-2011,2010,2009,2008 - VSB_HUANGHAI_AOLONGCUV_1 = 5, // ƺ-CUV-2010,2009 - VSB_HUANGHAI_AOJUN_1 = 6, // ƺ--2009 - VSB_HUANGHAI_AOJUN_2 = 7, // ƺ--2010,2009 - VSB_HUANGHAI_QISHENGV3_1 = 8, // ƺ-ʤV3-2011 - VSB_HUANGHAI_LINGHANGZHE_1 = 9, // ƺ-캽-2007,2005 - VSB_HUANGHAI_FENGCHI_1 = 10 // ƺ--A + VSB_HUANGHAI_OTHER = 0, // 其他(保留) + VSB_HUANGHAI_DACAISHEN_1 = 1, // 黄海-大柴神-2013,2012 + VSB_HUANGHAI_DACAISHEN_2 = 2, // 黄海-大柴神-2013,2012,2011,2010,2009柴油版 + VSB_HUANGHAI_BUS4_1 = 3, // 黄海-客车车型4-2012,2011 + VSB_HUANGHAI_CHALLENGER_1 = 4, // 黄海-挑战者-2011,2010,2009,2008 + VSB_HUANGHAI_AOLONGCUV_1 = 5, // 黄海-翱龙CUV-2010,2009 + VSB_HUANGHAI_AOJUN_1 = 6, // 黄海-傲骏-2009 + VSB_HUANGHAI_AOJUN_2 = 7, // 黄海-傲骏-2010,2009 + VSB_HUANGHAI_QISHENGV3_1 = 8, // 黄海-旗胜V3-2011 + VSB_HUANGHAI_LINGHANGZHE_1 = 9, // 黄海-领航者-2007,2005 + VSB_HUANGHAI_FENGCHI_1 = 10 // 黄海-风驰-A款 }VSB_HUANGHAI_CLASS; -/********************ƷEnd*************************/ +/********************车辆品牌子类型End*************************/ -//Ϣ +//车辆信息 typedef struct tagNET_DVR_VEHICLE_INFO_ { - DWORD dwIndex; // - BYTE byVehicleType; // 0 ʾͣ1 ʾСͳ2 ʾͳ ,3ʾ˴ ,4ʾֳ 5ʾֳ(3.5Ver) 6ʾ - BYTE byColorDepth; //ɫdz - BYTE byColor; //ɫ,οVCR_CLR_CLASS - /*״쳣״̬ - 0~״ - 1~״ - 2~״һֱijһͬٶֵ - 3~״ͳΪ0 - 4~״ͳݹ߹С + DWORD dwIndex; //车辆序号 + BYTE byVehicleType; //车辆类型 0 表示其它车型,1 表示小型车,2 表示大型车 ,3表示行人触发 ,4表示二轮车触发 5表示三轮车触发(3.5Ver) 6表示机动车触发 + BYTE byColorDepth; //车身颜色深浅 + BYTE byColor; //车身颜色,参考VCR_CLR_CLASS + /*雷达异常状态: + 0~雷达正常, + 1~雷达故障 + 2~雷达一直发送某一个相同速度值 + 3~雷达送出数据为0 + 4~雷达送出数据过大或者过小 */ BYTE byRadarState; - WORD wSpeed; //λkm/h - WORD wLength; //ǰһij - /*Υͣ0-1-٣2-٣3-У4-,5-ѹ,6-7-· - 8-ռǣ9-Υ10- 11-Υ12-·ͣ13-̵ͣ, 14-δ(Υ1357), - 15-Υͣ16-Υµͷ,17-ռӦ,18-,19-,20-ѹ,21-δϵȫ,22-˴,23-,24-ΥʹԶƣ - 25-ʻʱֳֵ绰26-תֱУ27-תת28-ͷֱУ29-Сת, 30-̵ƣ31-δͷ - 32-ǻˣ33-ǻռû34-ǻɡ, 35-̳, 36-,37-ѹͣ,38-λͣ,39-ѹҿλͣ, - 40-ҷ·,41-뻷·δ·ڵĻ,42-ѵ·δ,43-ռ,44-ը,45- + WORD wSpeed; //单位km/h + WORD wLength; //前一辆车的车身长度 + /*违规类型,0-正常,1-低速,2-超速,3-逆行,4-闯红灯,5-压车道线,6-不按导向,7-路口滞留, + 8-机占非,9-违法变道,10-不按车道 11-违反禁令,12-路口停车,13-绿灯停车, 14-未礼让行人(违法代码1357), + 15-违章停车,16-违章掉头,17-占用应急车道,18-禁右,19-禁左,20-压黄线,21-未系安全带,22-行人闯红灯,23-加塞,24-违法使用远光灯, + 25-驾驶时拨打接听手持电话,26-左转不让直行,27-右转不让左转,28-掉头不让直行,29-大弯小转, 30-闯绿灯,31-未带头盔, + 32-非机动车载人,33-非机动车占用机动车道,34-非机动车打伞棚, 35-黑烟车, 36-鸣笛,37-压线停车,38-跨位停车,39-压线且跨位停车, + 40-不让右方道路来车先行,41-进入环形路口未让已在路口内的机动车先行,42-机动车从匝道进入主路未让行,43-大车占道,44-炸街,45-吸烟 */ BYTE byIllegalType; - BYTE byVehicleLogoRecog; //οö VLR_VEHICLE_CLASS - BYTE byVehicleSubLogoRecog; //Ʒʶ𣻲οVSB_VOLKSWAGEN_CLASSö١ - BYTE byVehicleModel; //Ʒ0-δ֪ο"Ʒ.xlsx" - BYTE byCustomInfo[16]; //ԶϢ - WORD wVehicleLogoRecog; //Ʒƣο"Ʒ.xlsx" (ֶμbyVehicleLogoRecog); - BYTE byIsParking;//Ƿͣ 0-Ч1-ͣ2-δͣ - BYTE byRes;//ֽ - DWORD dwParkingTime; //ͣʱ䣬λs - BYTE byBelieve; //byIllegalTypeŶȣ1-100 - BYTE byCurrentWorkerNumber;//ǰҵ - BYTE byCurrentGoodsLoadingRate;//ǰװ 0- 1- 2- 3- 4- - BYTE byDoorsStatus;//״̬ 0-Źر 1-ſ + BYTE byVehicleLogoRecog; //参考枚举类型 VLR_VEHICLE_CLASS + BYTE byVehicleSubLogoRecog; //车辆品牌子类型识别;参考VSB_VOLKSWAGEN_CLASS等子类型枚举。 + BYTE byVehicleModel; //车辆子品牌年款,0-未知,参考"车辆子品牌年款.xlsx" + BYTE byCustomInfo[16]; //自定义信息 + WORD wVehicleLogoRecog; //车辆主品牌,参考"车辆主品牌.xlsx" (该字段兼容byVehicleLogoRecog); + BYTE byIsParking;//是否停车 0-无效,1-停车,2-未停车 + BYTE byRes;//保留字节 + DWORD dwParkingTime; //停车时间,单位:s + BYTE byBelieve; //byIllegalType置信度,1-100 + BYTE byCurrentWorkerNumber;//当前作业人数 + BYTE byCurrentGoodsLoadingRate;//当前货物装载率 0-空 1-少 2-中 3-多 4-满 + BYTE byDoorsStatus;//车门状态 0-车门关闭 1-车门开启 BYTE byRes3[4]; }NET_DVR_VEHICLE_INFO, *LPNET_DVR_VEHICLE_INFO; -//Ƽ +//车牌检测结果 typedef struct tagNET_DVR_PLATE_RESULT { - DWORD dwSize; //ṹ - BYTE byResultType; //0-Ƶʶ1ͼʶ 2 10Mʱ· - BYTE byChanIndex; //ͨ - WORD wAlarmRecordID; //¼ID(ڲѯ¼񣬽byResultTypeΪ2ʱЧ) - DWORD dwRelativeTime; //ʱ - BYTE byAbsTime[32]; //ʱ,yyyymmddhhmmssxxx,e.g.20090810235959999룩 - DWORD dwPicLen; //ͼƬ(ͼ) - DWORD dwPicPlateLen; //СͼƬ - DWORD dwVideoLen; //¼ݳ - BYTE byTrafficLight; //0-Ǻ̵ץģ1-̵ʱץģ2-ʱץ - BYTE byPicNum; //ĵͼƬ - BYTE byDriveChan; // - BYTE byVehicleType; //ͣοVTR_RESULT - DWORD dwBinPicLen; //ƶֵͼ - DWORD dwCarPicLen; //ԭͼ - DWORD dwFarCarPicLen; //Զͼ - BYTE *pBuffer3; //ƶֵͼ - BYTE *pBuffer4; //ԭͼ - BYTE *pBuffer5; //Զͼ - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + DWORD dwSize; //结构长度 + BYTE byResultType; //0-视频识别结果,1图像识别结果 2 大于10M时走下载路线 + BYTE byChanIndex; //通道号 + WORD wAlarmRecordID; //报警录像ID(用于查询录像,仅当byResultType为2时有效) + DWORD dwRelativeTime; //相对时间点 + BYTE byAbsTime[32]; //绝对时间点,yyyymmddhhmmssxxx,e.g.20090810235959999(毫秒) + DWORD dwPicLen; //图片长度(近景图) + DWORD dwPicPlateLen; //车牌小图片长度 + DWORD dwVideoLen; //录像内容长度 + BYTE byTrafficLight; //0-非红绿灯抓拍,1-绿灯时抓拍;2-红灯时抓拍 + BYTE byPicNum; //连拍的图片序号 + BYTE byDriveChan; //触发车道号 + BYTE byVehicleType; //车辆类型,参考VTR_RESULT + DWORD dwBinPicLen; //车牌二值图长度 + DWORD dwCarPicLen; //车辆原图长度 + DWORD dwFarCarPicLen; //远景图长度 + BYTE *pBuffer3; //车牌二值图 + BYTE *pBuffer4; //车辆原图 + BYTE *pBuffer5; //远景图 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; - BYTE byCarDirectionType; //ʻķ0ʾ£1ʾϣʵʳʻ֣,2ʾδ֪ + BYTE byCarDirectionType; //车辆具体行驶的方向,0表示从上往下,1表示从下往上(根据实际车辆的行驶方向来的区分),2表示未知 BYTE byRes3[6]; - NET_DVR_PLATE_INFO struPlateInfo; //Ϣṹ - NET_DVR_VEHICLE_INFO struVehicleInfo; //Ϣ - BYTE *pBuffer1; // ϴͼƬ(ͼ)ָָͼƬϢϴƵָָƵϢͼƬƵϢNULL(DVSͼ) - BYTE *pBuffer2; // ϴͼƬ(ͼ)ʱָͼƬָ루DVSƲͼ + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE *pBuffer1; // 当上传的是图片(近景图),指针指向图片信息,当上传的是视频,指针指向视频信息,如果不想获得图片或视频信息,传NULL(DVS车辆近景图) + BYTE *pBuffer2; // 当上传的是图片(车牌图)时,指向车牌图片的指针(DVS车牌彩图) }NET_DVR_PLATE_RESULT, *LPNET_DVR_PLATE_RESULT; -//ͼƬݺ¼ݣֻһ֣ͼƬΪͼƬ+СͼƬ +//后面紧跟图片数据和录像数据,只传一种,图片数据为场景图片+车牌小图片 typedef struct tagNET_VPD_SHUTTER { - DWORD dwCommmand; //:0, 1, 2, 3, 4,ֱֵ - DWORD dwCode; //ֵ, dwCommmandΪ4, òΪ - BYTE byRes[60]; // + DWORD dwCommmand; //命令:0,不控制 1,调亮 2,调暗 3,保持 4,直接输入快门值 + DWORD dwCode; //快门值, 当参数dwCommmand为4, 该参数不能为空 + BYTE byRes[60]; //保留 }NET_VPD_SHUTTER, *LPNET_VPD_SHUTTER; -//ͼϢ +//图像叠加信息配置 typedef struct tagNET_DVR_IMAGEOVERLAYCFG { DWORD dwSize; - BYTE byOverlayInfo;//ʹܿأ0-ӣ1- - BYTE byOverlayMonitorInfo;//ǷʾϢ0-ӣ1- - BYTE byOverlayTime;//Ƿʱ䣬0-ӣ1- - BYTE byOverlaySpeed;//Ƿٶȣ0-ӣ1- - BYTE byOverlaySpeeding;//Ƿӳٱ0-ӣ1- - BYTE byOverlayLimitFlag;//Ƿٱ־0-ӣ1- - BYTE byOverlayPlate;//Ƿӳƺţ0-ӣ1- - BYTE byOverlayColor;//Ƿӳɫ0-ӣ1- - BYTE byOverlayLength;//Ƿӳ0-ӣ1- - BYTE byOverlayType;//Ƿӳͣ0-ӣ1- - BYTE byOverlayColorDepth;//Ƿӳɫdz0-ӣ1- - BYTE byOverlayDriveChan;//Ƿӳ0-ӣ1- - BYTE byOverlayMilliSec; //ӺϢ 0-ӣ1- - BYTE byOverlayIllegalInfo; //ΥϢ 0-ӣ1- - BYTE byOverlayRedOnTime; //Ӻʱ 0-ӣ1- - BYTE byFarAddPlateJpeg; //ԶͼǷӳƽͼ,0-,1- - BYTE byNearAddPlateJpeg; //ͼǷӳƽͼ,0-,1- - BYTE byRes1[3]; // - BYTE byMonitorInfo1[32]; //ʾϢ1 - BYTE byMonitorInfo2[44]; //Ϣ2 - BYTE byRes2[52]; // + BYTE byOverlayInfo;//叠加使能开关,0-不叠加,1-叠加 + BYTE byOverlayMonitorInfo;//是否叠加显示点信息,0-不叠加,1-叠加 + BYTE byOverlayTime;//是否叠加时间,0-不叠加,1-叠加 + BYTE byOverlaySpeed;//是否叠加速度,0-不叠加,1-叠加 + BYTE byOverlaySpeeding;//是否叠加超速比例,0-不叠加,1-叠加 + BYTE byOverlayLimitFlag;//是否叠加限速标志,0-不叠加,1-叠加 + BYTE byOverlayPlate;//是否叠加车牌号,0-不叠加,1-叠加 + BYTE byOverlayColor;//是否叠加车身颜色,0-不叠加,1-叠加 + BYTE byOverlayLength;//是否叠加车长,0-不叠加,1-叠加 + BYTE byOverlayType;//是否叠加车型,0-不叠加,1-叠加 + BYTE byOverlayColorDepth;//是否叠加车身颜色深浅,0-不叠加,1-叠加 + BYTE byOverlayDriveChan;//是否叠加车道,0-不叠加,1-叠加 + BYTE byOverlayMilliSec; //叠加毫秒信息 0-不叠加,1-叠加 + BYTE byOverlayIllegalInfo; //叠加违章信息 0-不叠加,1-叠加 + BYTE byOverlayRedOnTime; //叠加红灯已亮时间 0-不叠加,1-叠加 + BYTE byFarAddPlateJpeg; //远景图是否叠加车牌截图,0-不叠加,1-叠加 + BYTE byNearAddPlateJpeg; //近景图是否叠加车牌截图,0-不叠加,1-叠加 + BYTE byRes1[3]; //保留 + BYTE byMonitorInfo1[32]; //显示点信息1 + BYTE byMonitorInfo2[44]; //检测点信息2 + BYTE byRes2[52]; //保留 }NET_DVR_IMAGEOVERLAYCFG, *LPNET_DVR_IMAGEOVERLAYCFG; -//IOץĹ +//单IO触发抓拍功能配置 typedef struct tagNET_DVR_SNAPCFG { DWORD dwSize; - BYTE byRelatedDriveWay;//IOij - BYTE bySnapTimes; //ȦץĴ0-ץģ0-ĴĿǰ5 - WORD wSnapWaitTime; //ץĵȴʱ䣬λmsȡֵΧ[0,60000] - WORD wIntervalTime[MAX_INTERVAL_NUM];//ļʱ䣬ms - DWORD dwSnapVehicleNum; //ץijš - NET_DVR_JPEGPARA struJpegPara;//ץͼƬ - BYTE byRes2[16];//ֽ + BYTE byRelatedDriveWay;//触发IO关联的车道号 + BYTE bySnapTimes; //线圈抓拍次数,0-不抓拍,非0-连拍次数,目前最大5次 + WORD wSnapWaitTime; //抓拍等待时间,单位ms,取值范围[0,60000] + WORD wIntervalTime[MAX_INTERVAL_NUM];//连拍间隔时间,ms + DWORD dwSnapVehicleNum; //抓拍车辆序号。 + NET_DVR_JPEGPARA struJpegPara;//抓拍图片参数 + BYTE byRes2[16];//保留字节 }NET_DVR_SNAPCFG, *LPNET_DVR_SNAPCFG; typedef enum _ITC_MAINMODE_ABILITY_ { - ITC_MODE_UNKNOW = 0x0, // - ITC_POST_MODE = 0x1, //ģʽ - ITC_EPOLICE_MODE = 0x2, //羯ģʽ - ITC_POSTEPOLICE_MODE = 0x4 //ʽ羯ģʽ + ITC_MODE_UNKNOW = 0x0, //无 + ITC_POST_MODE = 0x1, //卡口模式 + ITC_EPOLICE_MODE = 0x2, //电警模式 + ITC_POSTEPOLICE_MODE = 0x4 //卡式电警模式 }ITC_MAINMODE_ABILITY; typedef enum _ITC_RECOG_REGION_TYPE_ { - ITC_REGION_RECT = 0x0, // - ITC_REGION_POLYGON = 0x1, // + ITC_REGION_RECT = 0x0, //矩形 + ITC_REGION_POLYGON = 0x1, //多边形 }ITC_RECOG_REGION_TYPE; typedef struct tagNET_DVR_SNAP_ABILITY { DWORD dwSize; - BYTE byIoInNum;//IO - BYTE byIoOutNum;//IO - BYTE bySingleSnapNum;//IO - BYTE byLightModeArrayNum;//̵ģʽ - BYTE byMeasureModeArrayNum;//ģʽ - BYTE byPlateEnable; //ʶ - BYTE byLensMode;//ͷģʽ0-CCD,1-CMOS - BYTE byPreTriggerSupport; //Ƿ֧ԭģʽ0-֧֣1-֧ - DWORD dwAbilityType; //ֵ֧ĴģʽλʾITC_MAINMODE_ABILITY - BYTE byIoSpeedGroup; //ֵ֧IO - BYTE byIoLightGroup; //ֵ֧IO̵ - BYTE byRecogRegionType; //ʶֵ֧ͣITC_RECOG_REGION_TYPE - BYTE bySupport; //豸λʾ0-֧֣1-֧ - // bySupport&0x1ʾǷ֧չַ - // bySupport&0x2ʾǷ֧չУʱýṹ - // bySupport&0x4, ʾǷֶ֧() - // bySupport&0x8, ʾǷ֧bonding(ݴ) - // bySupport&0x10, ʾǷ֧Խ - //2013-07-09 - WORD wSupportMultiRadar;// 豸λʾ0-֧֣1-֧ - // wSupportMultiRadar&0x1ʾ RS485״ ֳ֧״ﴦ - // wSupportMultiRadar&0x2ʾ Ȧ ֳ֧״ﴦ - // wSupportMultiRadar&0x4ʾ п ֳ֧״ﴦ - // wSupportMultiRadar&0x8ʾ Ƶ ֳ֧״ﴦ + BYTE byIoInNum;//IO输入口数 + BYTE byIoOutNum;//IO输出口数 + BYTE bySingleSnapNum;//单IO触发组数 + BYTE byLightModeArrayNum;//红绿灯模式组数 + BYTE byMeasureModeArrayNum;//测速模式组数 + BYTE byPlateEnable; //车牌识别能力 + BYTE byLensMode;//镜头模式0-CCD,1-CMOS + BYTE byPreTriggerSupport; //是否支持原触发模式,0-支持,1-不支持 + DWORD dwAbilityType; //支持的触发模式能力,按位表示,定义见ITC_MAINMODE_ABILITY + BYTE byIoSpeedGroup; //支持的IO测速组数 + BYTE byIoLightGroup; //支持的IO红绿灯组数 + BYTE byRecogRegionType; //牌识区域支持的类型,详见定义ITC_RECOG_REGION_TYPE + BYTE bySupport; //设备能力,按位表示,0-不支持,1-支持 + // bySupport&0x1,表示是否支持扩展的字符叠加配置 + // bySupport&0x2,表示是否支持扩展的校时配置结构 + // bySupport&0x4, 表示是否支持多网卡(多网隔离) + // bySupport&0x8, 表示是否支持网卡的bonding功能(网络容错) + // bySupport&0x10, 表示是否支持语音对讲 + //2013-07-09 能力集返回 + WORD wSupportMultiRadar;// 设备能力,按位表示,0-不支持,1-支持 + // wSupportMultiRadar&0x1,表示 卡口RS485雷达 支持车道关联雷达处理 + // wSupportMultiRadar&0x2,表示 卡口虚拟线圈 支持车道关联雷达处理 + // wSupportMultiRadar&0x4,表示 混行卡口 支持车道关联雷达处理 + // wSupportMultiRadar&0x8,表示 视频检测 支持车道关联雷达处理 BYTE byICRPresetNum; - // ʾֵ֧ICRԤõ㣨˹ƬƫƵ㣩 - BYTE byICRTimeSlot;//ʾֵ֧ICRʱ18 - BYTE bySupportRS485Num;//ʾֵ֧RS485ڵ - BYTE byExpandRs485SupportSensor;// 豸λʾ0-֧֣1-֧ - // byExpandRs485SupportSensor &0x1ʾ羯ֳ֧ - // byExpandRs485SupportSensor &0x2ʾʽ羯ֳ֧ - BYTE byExpandRs485SupportSignalLampDet;// 豸λʾ0-֧֣1-֧ - // byExpandRs485SupportSignalLampDet &0x1ʾ羯֧źŵƼ - // byExpandRs485SupportSignalLampDet &0x2ʾʽ羯֧źŵƼ - BYTE byRelayNum;// ʾ̵ּ֧ĸ 2013-11-04 - BYTE bySupport1; //豸λʾ0-֧֣1-֧ - // bySupport1&0x1ʾǷ֧ԶУʱϢ - // bySupport1&0x2, ʾǷ֧ƵŻ - // bySupport1&0x4, ʾǷ֧DDNS÷ - // bySupport1&0x8, ʾǷֻ֧ȡ豸ǰģʽӿ - // bySupport1&0x10, ʾǷֳ֧ 2014-03-03 - // bySupport1&0x20, ʾǷ֧GPSģ - // bySupport1&0x40, ʾǷ֧NTPУʱַ֧ - // bySupport1&0x80, ʾǷ֧tpsϴ - BYTE bySupport2; //豸λʾ0-֧֣1-֧ - // bySupport2&0x01, ʾǷ֧Ϣ - // bySupport2&0x02, ʾͨͼINTER_PICCFG_V30Ƿ֧ƵʱòbyOSDMilliSecondEnable - // bySupport2&0x04, ʾբƣNET_DVR_BARRIERGATE_CFGbyBarrierGateCtrlֶ֧4~բ֧byUnlockʹܡ֮ʶ֧ - BYTE bySupportWhiteBalance; //ƽĬ϶ֶ֧ƽ⡢Զƽ⡢Զƽ23ģʽ - // bySupportWhiteBalance &0x01, ʾǷ֧չģʽ - // bySupportWhiteBalance &0x02, ʾǷ֧Ȼģʽ - // bySupportWhiteBalance &0x04, ʾǷ֧ůģʽ - // bySupportWhiteBalance &0x08, ʾǷְ֧׳ģʽ + // 表示支持的ICR预置点(滤光片偏移点)数 + BYTE byICRTimeSlot;//表示支持的ICR的时间段数(1~8) + BYTE bySupportRS485Num;//表示支持的RS485口的数量 + BYTE byExpandRs485SupportSensor;// 设备能力,按位表示,0-不支持,1-支持 + // byExpandRs485SupportSensor &0x1,表示电警车检器支持车检器 + // byExpandRs485SupportSensor &0x2,表示卡式电警车检器支持车检器 + BYTE byExpandRs485SupportSignalLampDet;// 设备能力,按位表示,0-不支持,1-支持 + // byExpandRs485SupportSignalLampDet &0x1,表示电警车检器支持外接信号灯检测器 + // byExpandRs485SupportSignalLampDet &0x2,表示卡式电警车检器支持外接信号灯检测器 + BYTE byRelayNum;// 表示支持继电器的个数 2013-11-04 + BYTE bySupport1; //设备能力,按位表示,0-不支持,1-支持 + // bySupport1&0x1,表示是否支持自定义校时信息配置 + // bySupport1&0x2, 表示是否支持视频触发优化方案 + // bySupport1&0x4, 表示是否支持DDNS配置方案 + // bySupport1&0x8, 表示是否支持获取设备当前触发模式接口命令 + // bySupport1&0x10, 表示是否支持出入口配置 2014-03-03 + // bySupport1&0x20, 表示是否支持GPS模块参数配置 + // bySupport1&0x40, 表示是否支持NTP校时间隔支持分钟设置 + // bySupport1&0x80, 表示是否支持tps报警数据上传 + BYTE bySupport2; //设备能力,按位表示,0-不支持,1-支持 + // bySupport2&0x01, 表示是否支持码流附加信息配置 + // bySupport2&0x02, 表示通道图像参数(INTER_PICCFG_V30)中是否支持视频叠加时间毫秒启用参数(byOSDMilliSecondEnable) + // bySupport2&0x04, 表示道闸控制(NET_DVR_BARRIERGATE_CFG)中byBarrierGateCtrl字段支持索引4~解锁道闸,且支持byUnlock解锁使能。反之则标识不支持 + BYTE bySupportWhiteBalance; //白平衡能力,默认都是支持手动白平衡、自动白平衡、自动白平衡2这3种模式。 + // bySupportWhiteBalance &0x01, 表示是否支持日光灯模式 + // bySupportWhiteBalance &0x02, 表示是否支持自然光模式 + // bySupportWhiteBalance &0x04, 表示是否支持暖光灯模式 + // bySupportWhiteBalance &0x08, 表示是否支持白炽灯模式 BYTE byRes[9]; } NET_DVR_SNAP_ABILITY, *LPNET_DVR_SNAP_ABILITY; @@ -21594,37 +21594,37 @@ typedef struct tagNET_DVR_TRANSFER_CAP typedef struct tagNET_ITC_ICRTIMECFG { NET_DVR_SCHEDTIME struTime; - BYTE byAssociateRresetNo;//Ԥõ18 , 0 - BYTE bySubSwitchMode;//1~죬2~ (Ԥõ0 ʱЧ) + BYTE byAssociateRresetNo;//预置点号1~8 , 0代表无 + BYTE bySubSwitchMode;//1~白天,2~晚上 (当预置点等于0 的时候生效) BYTE byRes[10]; }NET_ITC_ICRTIMECFG, *LPNET_ITC_ICRTIMECFG; typedef struct tagNET_ITC_ICR_TIMESWITCH_PARAM //156 { - NET_ITC_ICRTIMECFG struAutoCtrlTime[MAX_TIMESEGMENT_V30];//Զлʱ (Զл ʱЧ ֧4飬Ԥ4) - BYTE byICRPreset[MAX_ICR_NUM]; //ʵЧ̬ʾ [0~100] ±ʾԤõ18 07 Ӧ + NET_ITC_ICRTIMECFG struAutoCtrlTime[MAX_TIMESEGMENT_V30];//自动切换时间段 (自动切换下 时空下生效 现在支持4组,预留4组) + BYTE byICRPreset[MAX_ICR_NUM]; //实际生效根据能力集动态显示 [0~100] 数组下标表示预置点号1~8 (0~7 相对应) BYTE byRes[20]; }NET_ITC_ICR_TIMESWITCH_PARAM, *LPNET_ITC_ICR_TIMESWITCH_PARAM; typedef struct tagNET_ITC_ICR_MANUALSWITCH_PARAM { - BYTE byICRPreset[MAX_ICR_NUM]; //ʵЧ̬ʾ [0~100] - BYTE bySubSwitchMode;//1~죬2~ + BYTE byICRPreset[MAX_ICR_NUM]; //实际生效根据能力集动态显示 [0~100] + BYTE bySubSwitchMode;//1~白天,2~晚上 BYTE byRes[147]; }NET_ITC_ICR_MANUALSWITCH_PARAM, *LPNET_ITC_ICR_MANUALSWITCH_PARAM; typedef struct tagNET_ITC_ICR_AOTOSWITCH_PARAM { - BYTE byICRPreset[MAX_ICR_NUM]; //ʵЧ̬ʾ [0~100] ±ʾԤõ18 07 Ӧ - BYTE byICRAutoSwitch; // ICRԶлֵѡ, ȡֵΧ[0 100] + BYTE byICRPreset[MAX_ICR_NUM]; //实际生效根据能力集动态显示 [0~100] 数组下标表示预置点号1~8 (0~7 相对应) + BYTE byICRAutoSwitch; // ICR自动切换加阈值选项, 取值范围[0 100] BYTE byRes[147]; }NET_ITC_ICR_AOTOSWITCH_PARAM, *LPNET_ITC_ICR_AOTOSWITCH_PARAM; -//㷨Զ +//算法自动 typedef struct tagNET_ITC_ICR_ALGAOTOSWITCH_PARAM { - BYTE byDetectThreshold;//ֵ,Χ[0,100],Ĭ 58 - BYTE byAbBrightnessThreshold; //쳣ֵΧ[0,100]Ĭ12 + BYTE byDetectThreshold;//检测阈值,范围[0,100],默认 58 + BYTE byAbBrightnessThreshold; //异常亮度阈值,范围[0,100],默认12 BYTE byRes[154]; }NET_ITC_ICR_ALGAOTOSWITCH_PARAM, *LPNET_ITC_ICR_ALGAOTOSWITCH_PARAM; @@ -21640,566 +21640,566 @@ typedef union tagNET_ITC_ICR_PARAM_UNION typedef struct tagNET_ITC_ICRCFG { DWORD dwSize; - BYTE bySwitchType;//1~Զл2~ֶл ,3~ʱл,4~㷨Զ + BYTE bySwitchType;//1~自动切换,2~手动切换 ,3~定时切换,4~算法自动 BYTE byRes[3]; NET_ITC_ICR_PARAM_UNION uICRParam; }NET_ITC_ICRCFG, *LPNET_ITC_ICRCFG; -//2013-07-09 쳣 +//2013-07-09 异常处理 typedef struct { - DWORD dwHandleType; //쳣,쳣ʽ"" - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: ̵*/ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - BYTE byEnable; //0ã1 + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出(继电器输出)*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + BYTE byEnable; //0~不启用,1~启用 BYTE byRes; - WORD wDuration;//ʱ(λ/s) - BYTE byAlarmOutTriggered[MAX_ITC_EXCEPTIONOUT];//ͨ + WORD wDuration;//持续时间(单位/s) + BYTE byAlarmOutTriggered[MAX_ITC_EXCEPTIONOUT];//触发输出通道 BYTE byRes1[8]; } NET_ITC_HANDLEEXCEPTION, *LPNET_ITC_HANDLEEXCEPTION; typedef struct { DWORD dwSize; - NET_ITC_HANDLEEXCEPTION struSnapExceptionType[MAX_EXCEPTIONNUM_V30]; //ÿԪضʾһ쳣0- Ӳ̳,1-߶,2-IP ַͻ, 3-쳣, 4-źŵƼ쳣 + NET_ITC_HANDLEEXCEPTION struSnapExceptionType[MAX_EXCEPTIONNUM_V30]; //数组的每个元素都表示一种异常,数组0- 硬盘出错,1-网线断,2-IP 地址冲突, 3-车检器异常, 4-信号灯检测器异常 }NET_ITC_EXCEPTION,*LPNET_ITC_EXCEPTION; typedef struct tagNET_DVR_TRIGCOORDINATE { - WORD wTopLeftX; /*ȦϽǺ꣨2ֽڣ*/ - WORD wTopLeftY; /*ȦϽ꣨2ֽڣ*/ - WORD wWdith; /*Ȧȣ2ֽڣ*/ - WORD wHeight; /*Ȧ߶ȣ2ֽڣ*/ + WORD wTopLeftX; /*线圈左上角横坐标(2个字节)*/ + WORD wTopLeftY; /*线圈左上角纵坐标(2个字节)*/ + WORD wWdith; /*线圈宽度(2个字节)*/ + WORD wHeight; /*线圈高度(2个字节)*/ } NET_DVR_TRIGCOORDINATE, *LPNET_DVR_TRIGCOORDINATE; typedef enum _PROVINCE_CITY_IDX_ { - ANHUI_PROVINCE = 0, // - AOMEN_PROVINCE = 1, //ţй - BEIJING_PROVINCE = 2, // - CHONGQING_PROVINCE = 3, // - FUJIAN_PROVINCE = 4, // - GANSU_PROVINCE = 5, // - GUANGDONG_PROVINCE = 6, //㶫 - GUANGXI_PROVINCE = 7, // - GUIZHOU_PROVINCE = 8, // - HAINAN_PROVINCE = 9, // - HEBEI_PROVINCE = 10, //ӱ - HENAN_PROVINCE = 11, // - HEILONGJIANG_PROVINCE = 12, // - HUBEI_PROVINCE = 13, // - HUNAN_PROVINCE = 14, // - JILIN_PROVINCE = 15, // - JIANGSU_PROVINCE = 16, // - JIANGXI_PROVINCE = 17, // - LIAONING_PROVINCE = 18, // - NEIMENGGU_PROVINCE = 19, //ɹ - NINGXIA_PROVINCE = 20, // - QINGHAI_PROVINCE = 21, //ຣ - SHANDONG_PROVINCE = 22, //ɽ - SHANXI_JIN_PROVINCE = 23, //ɽ - SHANXI_SHAN_PROVINCE = 24, // - SHANGHAI_PROVINCE = 25, //Ϻ - SICHUAN_PROVINCE = 26, //Ĵ - TAIWAN_PROVINCE = 27, //̨壨й - TIANJIN_PROVINCE = 28, // - XIZANG_PROVINCE = 29, // - XIANGGANG_PROVINCE = 30, //ۣй - XINJIANG_PROVINCE = 31, //½ - YUNNAN_PROVINCE = 32, // - ZHEJIANG_PROVINCE = 33 //㽭 + ANHUI_PROVINCE = 0, //安徽 + AOMEN_PROVINCE = 1, //澳门(中国) + BEIJING_PROVINCE = 2, //北京 + CHONGQING_PROVINCE = 3, //重庆 + FUJIAN_PROVINCE = 4, //福建 + GANSU_PROVINCE = 5, //甘肃 + GUANGDONG_PROVINCE = 6, //广东 + GUANGXI_PROVINCE = 7, //广西 + GUIZHOU_PROVINCE = 8, //贵州 + HAINAN_PROVINCE = 9, //海南 + HEBEI_PROVINCE = 10, //河北 + HENAN_PROVINCE = 11, //河南 + HEILONGJIANG_PROVINCE = 12, //黑龙江 + HUBEI_PROVINCE = 13, //湖北 + HUNAN_PROVINCE = 14, //湖南 + JILIN_PROVINCE = 15, //吉林 + JIANGSU_PROVINCE = 16, //江苏 + JIANGXI_PROVINCE = 17, //江西 + LIAONING_PROVINCE = 18, //辽宁 + NEIMENGGU_PROVINCE = 19, //内蒙古 + NINGXIA_PROVINCE = 20, //宁夏 + QINGHAI_PROVINCE = 21, //青海 + SHANDONG_PROVINCE = 22, //山东 + SHANXI_JIN_PROVINCE = 23, //山西 + SHANXI_SHAN_PROVINCE = 24, //陕西 + SHANGHAI_PROVINCE = 25, //上海 + SICHUAN_PROVINCE = 26, //四川 + TAIWAN_PROVINCE = 27, //台湾(中国) + TIANJIN_PROVINCE = 28, //天津 + XIZANG_PROVINCE = 29, //西藏 + XIANGGANG_PROVINCE = 30, //香港(中国) + XINJIANG_PROVINCE = 31, //新疆 + YUNNAN_PROVINCE = 32, //云南 + ZHEJIANG_PROVINCE = 33 //浙江 }PROVINCE_CITY_IDX; typedef struct tagNET_DVR_GEOGLOCATION { - int iRes[2]; /**/ - DWORD dwCity; /*УPROVINCE_CITY_IDX */ + int iRes[2]; /*保留*/ + DWORD dwCity; /*城市,详见PROVINCE_CITY_IDX */ }NET_DVR_GEOGLOCATION, *LPNET_DVR_GEOGLOCATION; -//ģʽ +//场景模式 typedef enum _SCENE_MODE_ { - UNKOWN_SCENE_MODE = 0, //δ֪ģʽ - HIGHWAY_SCENE_MODE = 1, //ٳģʽ - SUBURBAN_SCENE_MODE = 2, //ģʽ() - URBAN_SCENE_MODE = 3, //ģʽ - TUNNEL_SCENE_MODE = 4 //ģʽ() + UNKOWN_SCENE_MODE = 0, //未知场景模式 + HIGHWAY_SCENE_MODE = 1, //高速场景模式 + SUBURBAN_SCENE_MODE = 2, //郊区场景模式(保留) + URBAN_SCENE_MODE = 3, //市区场景模式 + TUNNEL_SCENE_MODE = 4 //隧道场景模式(保留) }SCENE_MODE; -// ˽Ϣģ +// 私有信息模块类型 typedef enum _PRIDATA_RENDER { - RENDER_ANA_INTEL_DATA = 0x00000001, //ܷ - RENDER_MD = 0x00000002, //ƶ - RENDER_ADD_POS = 0x00000004, //POSϢ - RENDER_ADD_PIC = 0x00000008, //ͼƬ - RENDER_FIRE_DETCET = 0x00000010, //ȳϢ - RENDER_TEM = 0x00000020, //¶Ϣ - RENDER_TRACK_TEM = 0x00000040, //Ϣ - RENDER_THERMAL = 0x00000080 //̻Ϣ + RENDER_ANA_INTEL_DATA = 0x00000001, //智能分析 + RENDER_MD = 0x00000002, //移动侦测 + RENDER_ADD_POS = 0x00000004, //POS信息后叠加 + RENDER_ADD_PIC = 0x00000008, //图片叠加 + RENDER_FIRE_DETCET = 0x00000010, //热成像信息 + RENDER_TEM = 0x00000020, //温度信息 + RENDER_TRACK_TEM = 0x00000040, //信息 + RENDER_THERMAL = 0x00000080 //废气检测和烟火屏蔽信息 }PRIDATA_RENDER; typedef enum _THERMAL_FLAG { - THERMAL_FIREMASK = 0x00000001, //̻ - THERMAL_RULEGAS = 0x00000002, // - THERMAL_TARGETGAS = 0x00000004 //Ŀ + THERMAL_FIREMASK = 0x00000001, //烟火屏蔽 + THERMAL_RULEGAS = 0x00000002, //规则废气检测 + THERMAL_TARGETGAS = 0x00000004 //目标废气检测 }THERMAL_FLAG; typedef enum _FIRE_ALARM{ - FIRE_FRAME_DIS = 0x00000001, //ʾ - FIRE_MAX_TEMP = 0x00000002, //¶ - FIRE_MAX_TEMP_POSITION = 0x00000004, //¶λʾ - FIRE_DISTANCE = 0x00000008, //¶Ⱦ}FIRE_ALARM + FIRE_FRAME_DIS = 0x00000001, //火点框显示 + FIRE_MAX_TEMP = 0x00000002, //最高温度 + FIRE_MAX_TEMP_POSITION = 0x00000004, //最高温度位置显示 + FIRE_DISTANCE = 0x00000008, //最高温度距离}FIRE_ALARM }FIRE_ALARM; typedef enum _TEM_FLAG{ - TEM_REGION_BOX = 0x00000001, // - TEM_REGION_LINE = 0x00000002, //߲ - TEM_REGION_POINT = 0x00000004, //}TEM_FLAG + TEM_REGION_BOX = 0x00000001, //框测温 + TEM_REGION_LINE = 0x00000002, //线测温 + TEM_REGION_POINT = 0x00000004, //点测温}TEM_FLAG }TEM_FLAG; typedef enum _TRACK_FLAG { - TRACK_PEOPLE = 0x00000001, // - TRACK_VEHICLE = 0x00000002 // + TRACK_PEOPLE = 0x00000001, //人 + TRACK_VEHICLE = 0x00000002 //车 }TRACK_FLAG; typedef struct tagNET_DVR_VTPARAM { DWORD dwSize; - BYTE byEnable; /* ǷʹȦ0-ʹã1-ʹ*/ - BYTE byIsDisplay; /* ǷʾȦ0-ʾ1-ʾ*/ - BYTE byLoopPos; //䴥Ȧƫ0-ϣ1- - BYTE bySnapGain; /*ץ*/ - DWORD dwSnapShutter; /*ץĿٶ*/ - NET_DVR_TRIGCOORDINATE struTrigCoordinate; // + BYTE byEnable; /* 是否使能虚拟线圈,0-不使用,1-使用*/ + BYTE byIsDisplay; /* 是否显示虚拟线圈,0-不显示,1-显示*/ + BYTE byLoopPos; //晚间触发线圈的偏向:0-向上,1-向下 + BYTE bySnapGain; /*抓拍增益*/ + DWORD dwSnapShutter; /*抓拍快门速度*/ + NET_DVR_TRIGCOORDINATE struTrigCoordinate; //保留 NET_DVR_TRIGCOORDINATE struRes[MAX_VL_NUM]; - BYTE byTotalLaneNum;/*Ƶij1*/ - BYTE byPolarLenType; /*ƫͣ0ƫ񾵣1ʩ͵ƫ񾵡*/ - BYTE byDayAuxLightMode; /*츨ģʽ0޸1LED2*/ - BYTE byLoopToCalRoadBright; /*Լ·ȵij(Ȧ)*/ - BYTE byRoadGrayLowTh; /*·ȵֵʼֵ1*/ - BYTE byRoadGrayHighTh; /*·ȸֵʼֵ140*/ - WORD wLoopPosBias; /*䴥Ȧλ30*/ - DWORD dwHfrShtterInitValue; /*ͼعʱijʼֵ2000*/ - DWORD dwSnapShtterInitValue; /*ץͼعʱijʼֵ500*/ - DWORD dwHfrShtterMaxValue; /*ͼعʱֵ20000*/ - DWORD dwSnapShtterMaxValue; /*ץͼعʱֵ1500*/ - DWORD dwHfrShtterNightValue; /*ͼعʱֵ3000*/ - DWORD dwSnapShtterNightMinValue; /*ץͼعʱСֵ3000*/ - DWORD dwSnapShtterNightMaxValue; /*ץͼعʱֵ5000*/ - DWORD dwInitAfe; /*ijʼֵ200*/ - DWORD dwMaxAfe; /*ֵ400*/ - WORD wResolutionX;/* 豸ǰֱʿ*/ - WORD wResolutionY;/* 豸ǰֱʸ*/ - DWORD dwGainNightValue; /*棬Ĭֵ70*/ - DWORD dwSceneMode; /*ģʽ SCENE_MODE */ - DWORD dwRecordMode; /*¼־0-¼1-¼*/ - NET_DVR_GEOGLOCATION struGeogLocation; /*ַλ*/ - BYTE byTrigFlag[MAX_VL_NUM]; /*־0-ͷ1-β2-ͷ/β*/ - BYTE byTrigSensitive[MAX_VL_NUM]; /*ȣ1-100*/ + BYTE byTotalLaneNum;/*视频触发的车道数1*/ + BYTE byPolarLenType; /*偏振镜类型,0:不加偏振镜;1:加施耐德偏振镜。*/ + BYTE byDayAuxLightMode; /*白天辅助照明模式,0:无辅助照明;1:LED灯照明;2:闪光灯照明*/ + BYTE byLoopToCalRoadBright; /*用以计算路面亮度的车道(虚拟线圈)*/ + BYTE byRoadGrayLowTh; /*路面亮度低阈值初始化值1*/ + BYTE byRoadGrayHighTh; /*路面亮度高阈值初始化值140*/ + WORD wLoopPosBias; /*晚间触发线圈位移30*/ + DWORD dwHfrShtterInitValue; /*连续图像曝光时间的初始值2000*/ + DWORD dwSnapShtterInitValue; /*抓拍图像曝光时间的初始值500*/ + DWORD dwHfrShtterMaxValue; /*连续图像曝光时间的最大值20000*/ + DWORD dwSnapShtterMaxValue; /*抓拍图像曝光时间的最大值1500*/ + DWORD dwHfrShtterNightValue; /*晚间连续图像曝光时间的设置值3000*/ + DWORD dwSnapShtterNightMinValue; /*晚间抓拍图像曝光时间的最小值3000*/ + DWORD dwSnapShtterNightMaxValue; /*晚间抓拍图像曝光时间的最大值5000*/ + DWORD dwInitAfe; /*增益的初始值200*/ + DWORD dwMaxAfe; /*增益的最大值400*/ + WORD wResolutionX;/* 设备当前分辨率宽*/ + WORD wResolutionY;/* 设备当前分辨率高*/ + DWORD dwGainNightValue; /*晚间增益,默认值70*/ + DWORD dwSceneMode; /*场景模式, 详见SCENE_MODE */ + DWORD dwRecordMode; /*录像标志:0-不录像,1-录像*/ + NET_DVR_GEOGLOCATION struGeogLocation; /*地址位置*/ + BYTE byTrigFlag[MAX_VL_NUM]; /*触发标志,0-车头触发;1-车尾触发;2-车头/车尾都触发*/ + BYTE byTrigSensitive[MAX_VL_NUM]; /*触发灵敏度,1-100*/ BYTE byRes2[62]; }NET_DVR_VTPARAM, *LPNET_DVR_VTPARAM; typedef struct tagNET_DVR_SNAPENABLECFG { DWORD dwSize; - BYTE byPlateEnable;//Ƿֳ֧ʶ0-֧֣1-֧ - BYTE byRes1[2]; // - BYTE byFrameFlip; //ͼǷת 0-ת1-ת - WORD wFlipAngle; //ͼתǶ 0,90,180,270 - WORD wLightPhase; //λȡֵΧ[0, 360] - BYTE byLightSyncPower; //ǷźŵƵԴͬ0-ͬ1-ͬ - BYTE byFrequency; //źƵ - BYTE byUploadSDEnable; //ǷԶϴSDͼƬ0-1- - BYTE byPlateMode; //ʶģʽ:0-Ƶ,1-ⲿ - BYTE byUploadInfoFTP; //ǷϴץĸϢFTP0-1- - BYTE byAutoFormatSD; //ǷԶʽSD0-1- - WORD wJpegPicSize; //JpegͼƬС[64-8196] - BYTE bySnapPicResolution; //ץͼƬֱ(NET_DVR_COMPRESSION_INFO_V30зֱʱһ) - BYTE byRes[55]; // + BYTE byPlateEnable;//是否支持车牌识别,0-不支持,1-支持 + BYTE byRes1[2]; //保留 + BYTE byFrameFlip; //图像是否翻转 0-不翻转,1-翻转 + WORD wFlipAngle; //图像翻转角度 0,90,180,270 + WORD wLightPhase; //相位,取值范围[0, 360] + BYTE byLightSyncPower; //是否信号灯电源同步,0-不同步;1-同步 + BYTE byFrequency; //信号频率 + BYTE byUploadSDEnable; //是否自动上传SD图片,0-否;1-是 + BYTE byPlateMode; //识别模式参数:0-视频触发,1-外部触发 + BYTE byUploadInfoFTP; //是否上传抓拍附加信息到FTP,0-否,1-是 + BYTE byAutoFormatSD; //是否自动格式化SD卡,0-否,1-是 + WORD wJpegPicSize; //Jpeg图片大小[64-8196] + BYTE bySnapPicResolution; //抓拍图片分辨率(与NET_DVR_COMPRESSION_INFO_V30中分辨率保持一致) + BYTE byRes[55]; //保留 }NET_DVR_SNAPENABLECFG, *LPNET_DVR_SNAPENABLECFG; -/*ftpϴ*/ +/*ftp上传参数*/ typedef struct { DWORD dwSize; - DWORD dwEnableFTP; /*Ƿftpϴ*/ - char sFTPIP[16]; /*ftp */ - DWORD dwFTPPort; /*ftp˿*/ - BYTE sUserName[NAME_LEN]; /*û*/ - BYTE sPassword[PASSWD_LEN]; /**/ - DWORD dwDirLevel; /*0 = ʹĿ¼ṹֱӱڸĿ¼,1 = ʹ1Ŀ¼,2=ʹ2Ŀ¼*/ - WORD wTopDirMode; /* һĿ¼0x1 = ʹ豸,0x2 = ʹ豸,0x3 = ʹ豸ipַ0x4=ʹʾ,0x5=ʹʱ(),0x=6Զ,0x7=Υ,0x8=,0x9=ص*/ - WORD wSubDirMode; /* Ŀ¼0x1 = ʹͨ,0x2 = ʹͨţ,0x3=ʹʱ(),0x4=ʹó,0x=5Զ,0x6=Υ,0x7=,0x8=ص*/ - BYTE byEnableAnony; //0-1- - BYTE byPicArchivingInterval;//ͼƬ鵵[1~30],0ʾر + DWORD dwEnableFTP; /*是否启动ftp上传功能*/ + char sFTPIP[16]; /*ftp 服务器*/ + DWORD dwFTPPort; /*ftp端口*/ + BYTE sUserName[NAME_LEN]; /*用户名*/ + BYTE sPassword[PASSWD_LEN]; /*密码*/ + DWORD dwDirLevel; /*0 = 不使用目录结构,直接保存在根目录,1 = 使用1级目录,2=使用2级目录*/ + WORD wTopDirMode; /* 一级目录,0x1 = 使用设备名,0x2 = 使用设备号,0x3 = 使用设备ip地址,0x4=使用显示点,0x5=使用时间(年月),0x=6自定义,0x7=违规类型,0x8=方向,0x9=地点*/ + WORD wSubDirMode; /* 二级目录,0x1 = 使用通道名,0x2 = 使用通道号,,0x3=使用时间(年月日),0x4=使用车道号,0x=5自定义,0x6=违规类型,0x7=方向,0x8=地点*/ + BYTE byEnableAnony; //启用匿名,0-否,1-是 + BYTE byPicArchivingInterval;//图片归档间隔[1~30],0表示关闭 BYTE byRes[22]; }NET_DVR_FTPCFG, *LPNET_DVR_FTPCFG; -/*ͼƬԪ */ -#define PICNAME_ITEM_DEV_NAME 1 /*豸*/ -#define PICNAME_ITEM_DEV_NO 2 /*豸*/ -#define PICNAME_ITEM_DEV_IP 3 /*豸IP*/ -#define PICNAME_ITEM_CHAN_NAME 4 /*ͨ*/ -#define PICNAME_ITEM_CHAN_NO 5 /*ͨ*/ -#define PICNAME_ITEM_TIME 6 /*ʱ*/ -#define PICNAME_ITEM_CARDNO 7 /**/ -#define PICNAME_ITEM_PLATE_NO 8 /*ƺ*/ -#define PICNAME_ITEM_PLATE_COLOR 9 /*ɫ*/ -#define PICNAME_ITEM_CAR_CHAN 10 /**/ -#define PICNAME_ITEM_CAR_SPEED 11 /*ٶ*/ -#define PICNAME_ITEM_CARCHAN 12 /*ʾ*/ -#define PICNAME_ITEM_PIC_NUMBER 13 //ͼƬ -#define PICNAME_ITEM_CAR_NUMBER 14 // +/*可用来命名图片的相关元素 */ +#define PICNAME_ITEM_DEV_NAME 1 /*设备名*/ +#define PICNAME_ITEM_DEV_NO 2 /*设备号*/ +#define PICNAME_ITEM_DEV_IP 3 /*设备IP*/ +#define PICNAME_ITEM_CHAN_NAME 4 /*通道名*/ +#define PICNAME_ITEM_CHAN_NO 5 /*通道号*/ +#define PICNAME_ITEM_TIME 6 /*时间*/ +#define PICNAME_ITEM_CARDNO 7 /*卡号*/ +#define PICNAME_ITEM_PLATE_NO 8 /*车牌号码*/ +#define PICNAME_ITEM_PLATE_COLOR 9 /*车牌颜色*/ +#define PICNAME_ITEM_CAR_CHAN 10 /*车道号*/ +#define PICNAME_ITEM_CAR_SPEED 11 /*车辆速度*/ +#define PICNAME_ITEM_CARCHAN 12 /*显示点*/ +#define PICNAME_ITEM_PIC_NUMBER 13 //图片序号 +#define PICNAME_ITEM_CAR_NUMBER 14 //车辆序号 #define PICNAME_MAXITEM 15 -#define PICNAME_ITEM_SPEED_LIMIT_VALUES 15 //ֵ -#define PICNAME_ITEM_ILLEGAL_CODE 16 //Υ -#define PICNAME_ITEM_CROSS_NUMBER 17 //·ڱ -#define PICNAME_ITEM_DIRECTION_NUMBER 18 // +#define PICNAME_ITEM_SPEED_LIMIT_VALUES 15 //限速值 +#define PICNAME_ITEM_ILLEGAL_CODE 16 //国标违法代码 +#define PICNAME_ITEM_CROSS_NUMBER 17 //路口编号 +#define PICNAME_ITEM_DIRECTION_NUMBER 18 //方向编号 //(3.7Ver) -#define PICNAME_ITEM_CAR_COLOR 19 //ɫ -#define PICNAME_ITEM_PLATE_COORDINATE 20 // -#define PICNAME_ITEM_CAR_TYPE 21 // -#define PICNAME_ITEM_VIOLATION_TYPE 22 //Υ -#define PICNAME_ITEM_CUSTOM 255//Զ +#define PICNAME_ITEM_CAR_COLOR 19 //车身颜色 +#define PICNAME_ITEM_PLATE_COORDINATE 20 //车牌坐标 +#define PICNAME_ITEM_CAR_TYPE 21 //车辆类型 +#define PICNAME_ITEM_VIOLATION_TYPE 22 //违规类型 +#define PICNAME_ITEM_CUSTOM 255//自定义 -//ͼƬ +//图片命名 typedef struct { - BYTE byItemOrder[PICNAME_MAXITEM]; /* 鶨ļĹ */ - BYTE byDelimiter; /*ָһΪ'_'*/ + BYTE byItemOrder[PICNAME_MAXITEM]; /* 桉数组定义文件命名的规则 */ + BYTE byDelimiter; /*分隔符,一般为'_'*/ }NET_DVR_PICTURE_NAME, *LPNET_DVR_PICTURE_NAME; -//2013-09-27 -#define PICNAME_ITEM_PARK_DEV_IP 1 /*豸IP*/ -#define PICNAME_ITEM_PARK_PLATE_NO 2 /*ƺ*/ -#define PICNAME_ITEM_PARK_TIME 3 /*ʱ*/ -#define PICNAME_ITEM_PARK_INDEX 4 /*λ*/ -#define PICNAME_ITEM_PARK_STATUS 5 /*λ״̬*/ -#define PICNAME_ITEM_BUILDING_NUMBER 6 /*ŵԪ*/ -#define PICNAME_ITEM_OUTDOOR_UNIT_ID 7 /*ſڻ*/ -#define PICNAME_ITEM_UNLOCK_TYPE 8 /*ʽ*/ -#define PICNAME_ITEM_DEVICE_NAME 9 //豸 -#define PICNAME_ITEM_PERIOD_NO 10 /*ں*/ -#define PICNAME_ITEM_DEV_INDEX 11 /*豸*/ -#define PICNAME_PREFIX 32 /*ͼƬԶǰ׺*/ -//ͼƬչ 2013-09-27 +//命名规则:2013-09-27 +#define PICNAME_ITEM_PARK_DEV_IP 1 /*设备IP*/ +#define PICNAME_ITEM_PARK_PLATE_NO 2 /*车牌号码*/ +#define PICNAME_ITEM_PARK_TIME 3 /*时间*/ +#define PICNAME_ITEM_PARK_INDEX 4 /*车位编号*/ +#define PICNAME_ITEM_PARK_STATUS 5 /*车位状态*/ +#define PICNAME_ITEM_BUILDING_NUMBER 6 /*栋号单元号*/ +#define PICNAME_ITEM_OUTDOOR_UNIT_ID 7 /*门口机编号*/ +#define PICNAME_ITEM_UNLOCK_TYPE 8 /*开锁方式*/ +#define PICNAME_ITEM_DEVICE_NAME 9 //设备名称 +#define PICNAME_ITEM_PERIOD_NO 10 /*期号*/ +#define PICNAME_ITEM_DEV_INDEX 11 /*设备编号*/ +#define PICNAME_PREFIX 32 /*图片名自定义前缀长度*/ +//图片命名扩展 2013-09-27 typedef struct { - BYTE byItemOrder[PICNAME_MAXITEM]; /* 鶨ļĹ */ - BYTE byDelimiter; /*ָһΪ'_'*/ - BYTE byPicNamePrefix[PICNAME_PREFIX/*32*/]; //ͼƬԶǰ׺ + BYTE byItemOrder[PICNAME_MAXITEM]; /* 桉数组定义文件命名的规则 */ + BYTE byDelimiter; /*分隔符,一般为'_'*/ + BYTE byPicNamePrefix[PICNAME_PREFIX/*32*/]; //图片名自定义前缀 }NET_DVR_PICTURE_NAME_EX, *LPNET_DVR_PICTURE_NAME_EX; -/* ץͼ*/ +/* 串口抓图设置*/ typedef struct { - BYTE byStrFlag; /*ݿʼ*/ - BYTE byEndFlag; /**/ - WORD wCardIdx; /*ʼλ*/ - DWORD dwCardLen; /*ų*/ - DWORD dwTriggerPicChans; /*ͨţλӵ1λʼƣ0x2ʾһͨ*/ + BYTE byStrFlag; /*串口数据开始符*/ + BYTE byEndFlag; /*结束符*/ + WORD wCardIdx; /*卡号相对起始位*/ + DWORD dwCardLen; /*卡号长度*/ + DWORD dwTriggerPicChans; /*所触发的通道号,按位,从第1位开始计,即0x2表示第一通道*/ }NET_DVR_SERIAL_CATCHPIC_PARA, *LPNET_DVR_SERIAL_CATCHPIC_PARA; -//DVRץͼãߣ +//DVR抓图参数配置(基线) typedef struct { DWORD dwSize; - NET_DVR_JPEGPARA struJpegPara[MAX_CHANNUM_V30]; /*ÿͨͼ*/ - WORD wBurstMode; /*ץͼʽ,λ.0x1=봥0x2=ƶⴥ 0x4=2320x8=4850x10=紥*/ - WORD wUploadInterval; /*ͼƬϴ()[0,65535]*/ - NET_DVR_PICTURE_NAME struPicNameRule; /* ͼƬ */ - BYTE bySaveToHD; /*Ƿ񱣴浽Ӳ*/ + NET_DVR_JPEGPARA struJpegPara[MAX_CHANNUM_V30]; /*每个通道的图像参数*/ + WORD wBurstMode; /*抓图方式,按位设置.0x1=报警输入触发,0x2=移动侦测触发 0x4=232触发,0x8=485触发,0x10=网络触发*/ + WORD wUploadInterval; /*图片上传间隔(秒)[0,65535]*/ + NET_DVR_PICTURE_NAME struPicNameRule; /* 图片命名规则 */ + BYTE bySaveToHD; /*是否保存到硬盘*/ BYTE byRes1; - WORD wCatchInterval; /*ץͼ()[0,65535]*/ + WORD wCatchInterval; /*抓图间隔(毫秒)[0,65535]*/ BYTE byRes2[12]; NET_DVR_SERIAL_CATCHPIC_PARA struRs232Cfg; NET_DVR_SERIAL_CATCHPIC_PARA struRs485Cfg; - DWORD dwTriggerPicTimes[MAX_CHANNUM_V30]; /* ÿͨһδմ */ - DWORD dwAlarmInPicChanTriggered[MAX_ALARMIN_V30]; /*ץͨ,λãӵ1λʼ*/ + DWORD dwTriggerPicTimes[MAX_CHANNUM_V30]; /* 每个通道一次触发拍照次数 */ + DWORD dwAlarmInPicChanTriggered[MAX_ALARMIN_V30]; /*报警触发抓拍通道,按位设置,从第1位开始*/ }NET_DVR_JPEGCFG_V30, *LPNET_DVR_JPEGCFG_V30; -//ץĴṹ() +//抓拍触发请求结构(保留) typedef struct tagNET_DVR_MANUALSNAP { - BYTE byOSDEnable;//0-ر(Ĭ)1-ر - BYTE byLaneNo;//, ΧΪ1-6ĬΪ1(ץĻڲʹ) - BYTE byChannel;//ͨ - BYTE byRes[21]; // + BYTE byOSDEnable;//0-不关闭(默认),1-关闭 + BYTE byLaneNo;//车道号, 范围为1-6,默认为1(抓拍机内部测试使用) + BYTE byChannel;//通道号 + BYTE byRes[21]; //保留 }NET_DVR_MANUALSNAP, *LPNET_DVR_MANUALSNAP; typedef struct tagNET_DVR_SPRCFG { DWORD dwSize; - BYTE byDefaultCHN[MAX_CHJC_NUM]; /*豸ʡݵĺּд*/ - BYTE byPlateOSD; /*0:ͳƲɫͼ,1:ͳƲɫͼ*/ - BYTE bySendJPEG1; /*0-ͽJPEGͼ,1-ͽJPEGͼ*/ - BYTE bySendJPEG2; /*0-ԶJPEGͼ,1-ԶJPEGͼ*/ - WORD wDesignedPlateWidth; /*ƿ*/ - BYTE byTotalLaneNum; /*ʶij*/ - BYTE byRes1; /**/ - WORD wRecognizedLane; /*ʶijţλʾbit0ʾ1Ƿʶ0-ʶ1-ʶ*/ - NET_VCA_RECT struLaneRect[MAX_LANERECT_NUM]; /*ʶ*/ - DWORD dwRecogMode; /*ʶͣ - bit0-ʶ0-ʶ1-ʶ(βʶ) - bit1-ʶСʶ0-Сʶ1-ʶ - bit2-ɫʶ0-óɫʶڱʶСʶʱֹã1-ɫʶ - bit3-ũóʶ0-ũóʶ1-ũóʶ - bit4-ģʶ0-ģʶ1-ģʶ - bit5-֡λ򳡶λ0-֡λ1-λ - bit6-֡ʶʶ0-֡ʶ1-ʶ - bit7-ϻ죺0-죬1- */ - BYTE bySendPRRaw; //Ƿԭͼ0-ͣ1- - BYTE bySendBinImage; //Ƿͳƶֵͼ0-ͣ1- - BYTE byDelayCapture; //ʱץĿ,λ֡ - BYTE byUseLED; //ʹLEDƣ0-1- - BYTE byRes2[68]; // + BYTE byDefaultCHN[MAX_CHJC_NUM]; /*设备运行省份的汉字简写*/ + BYTE byPlateOSD; /*0:不发送车牌彩色图,1:发送车牌彩色图*/ + BYTE bySendJPEG1; /*0-不传送近景JPEG图,1-传送近景JPEG图*/ + BYTE bySendJPEG2; /*0-不传送远景JPEG图,1-传送远景JPEG图*/ + WORD wDesignedPlateWidth; /*车牌设计宽度*/ + BYTE byTotalLaneNum; /*识别的车道数*/ + BYTE byRes1; /*保留*/ + WORD wRecognizedLane; /*识别的车道号,按位表示,bit0表示车道1是否识别,0-不识别,1-识别*/ + NET_VCA_RECT struLaneRect[MAX_LANERECT_NUM]; /*车道识别区域*/ + DWORD dwRecogMode; /*识别的类型, + bit0-背向识别:0-正向车牌识别,1-背向识别(尾牌识别) ; + bit1-大车牌识别或小车牌识别:0-小车牌识别,1-大车牌识别 ; + bit2-车身颜色识别:0-不采用车身颜色识别,在背向识别或小车牌识别时禁止启用,1-车身颜色识别; + bit3-农用车识别:0-不采用农用车识别,1-农用车识别; + bit4-模糊识别:0-不采用模糊识别,1-模糊识别; + bit5-帧定位或场定位:0-帧定位,1-场定位; + bit6-帧识别或场识别:0-帧识别,1-场识别; + bit7-晚上或白天:0-白天,1-晚上 */ + BYTE bySendPRRaw; //是否发送原图:0-不发送,1-发送 + BYTE bySendBinImage; //是否发送车牌二值图:0-不发送,1-发送 + BYTE byDelayCapture; //延时抓拍控制,单位:帧 + BYTE byUseLED; //使用LED控制,0-否,1-是 + BYTE byRes2[68]; //保留 }NET_DVR_SPRCFG, *LPNET_DVR_SPRCFG; typedef struct tagNET_DVR_PLCCFG { DWORD dwSize; - BYTE byPlcEnable; //ǷóȲĬã0-رգ1- - BYTE byPlateExpectedBright; //ƵԤȣĬֵ50, Χ[0, 100] - BYTE byRes1[2]; // - BYTE byTradeoffFlash; //ǷƵӰ: 0 - ; 1 - (Ĭ); - //ʹƲʱ, ǼƵǿЧӦ, ҪΪ1;Ϊ0 - BYTE byCorrectFactor; //ϵ, Χ[0, 100], Ĭֵ50 (tradeoff_flashлʱ,ָĬֵ - WORD wLoopStatsEn; //ǷȦȣλʾ0-ͳƣ1-ͳ - BYTE byPlcBrightOffset;// Ȳ(ȦģʽЧ)ȡֵΧ1~100 + BYTE byPlcEnable; //是否启用车牌亮度补偿(默认启用):0-关闭,1-启用 + BYTE byPlateExpectedBright; //车牌的预期亮度(默认值50), 范围[0, 100] + BYTE byRes1[2]; //保留 + BYTE byTradeoffFlash; //是否考虑闪光灯的影响: 0 - 否; 1 - 是(默认); + //使用闪光灯补光时, 如果考虑减弱闪光灯的亮度增强效应, 则需要设为1;否则为0 + BYTE byCorrectFactor; //纠正系数, 范围[0, 100], 默认值50 (在tradeoff_flash切换时,恢复默认值) + WORD wLoopStatsEn; //是否该线圈的亮度,按位表示,0-不统计,1-统计 + BYTE byPlcBrightOffset;// 车牌亮度补偿灵敏度(虚拟线圈模式起效),取值范围1~100 BYTE byRes[19]; }NET_DVR_PLCCFG, *LPNET_DVR_PLCCFG; typedef struct tagNET_DVR_DEVICESTATECFG { DWORD dwSize; - WORD wPreviewNum; //ԤӸ - WORD wFortifyLinkNum; //Ӹ - NET_DVR_IPADDR struPreviewIP[MAX_LINK]; //ԤûIPַ - NET_DVR_IPADDR struFortifyIP[MAX_FORTIFY_NUM]; //ӵûIPַ - DWORD dwVideoFrameRate; //֡ʣ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; - BYTE byResolution; //ֱ0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF 5,16-VGA640*480, 17-UXGA1600*1200, 18-SVGA 800*600,19-HD720p1280*720,20-XVGA, 21-HD900p, 27-HD1080i, 28-2560*1920, 29-1600*304, 30-2048*1536, 31-2448*2048 - BYTE bySnapResolution; //ץķֱ0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF 5,16-VGA640*480, 17-UXGA1600*1200, 18-SVGA 800*600,19-HD720p1280*720,20-XVGA, 21-HD900p, 27-HD1080i, 28-2560*1920, 29-1600*304, 30-2048*1536, 31-2448*2048 - BYTE byStreamType; //ͣ0-1- - BYTE byTriggerType; //ģʽ0-Ƶ1-ͨ - DWORD dwSDVolume; //SD - DWORD dwSDFreeSpace; //SDʣռ - BYTE byDetectorState[MAX_DRIVECHAN_NUM][MAX_COIL_NUM]; //״̬0-δʹã1-2-쳣 - BYTE byDetectorLinkState; //״̬0-δӣ1- - BYTE bySDStatus; //SD״̬ 01ߣ2쳣3-sd - BYTE byFortifyLevel[MAX_FORTIFY_NUM]; //ȼ0-ޣ1-һȼߣ2-ȼУ3-ȼͣ - BYTE byRes2[116]; // + WORD wPreviewNum; //预览连接个数 + WORD wFortifyLinkNum; //布防连接个数 + NET_DVR_IPADDR struPreviewIP[MAX_LINK]; //预览的用户IP地址 + NET_DVR_IPADDR struFortifyIP[MAX_FORTIFY_NUM]; //布防连接的用户IP地址 + DWORD dwVideoFrameRate; //帧率: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; + BYTE byResolution; //分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF 5(保留),16-VGA(640*480), 17-UXGA(1600*1200), 18-SVGA (800*600),19-HD720p(1280*720),20-XVGA, 21-HD900p, 27-HD1080i, 28-2560*1920, 29-1600*304, 30-2048*1536, 31-2448*2048 + BYTE bySnapResolution; //抓拍分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF 5(保留),16-VGA(640*480), 17-UXGA(1600*1200), 18-SVGA (800*600),19-HD720p(1280*720),20-XVGA, 21-HD900p, 27-HD1080i, 28-2560*1920, 29-1600*304, 30-2048*1536, 31-2448*2048 + BYTE byStreamType; //传输类型:0-主码流;1-子码流 + BYTE byTriggerType; //触发模式:0-视频触发;1-普通触发 + DWORD dwSDVolume; //SD卡容量 + DWORD dwSDFreeSpace; //SD卡剩余空间 + BYTE byDetectorState[MAX_DRIVECHAN_NUM][MAX_COIL_NUM]; //车检器状态:0-未使用;1-正常;2-异常 + BYTE byDetectorLinkState; //车检器连接状态:0-未连接;1-连接 + BYTE bySDStatus; //SD卡状态 0-活动;1-休眠;2-异常,3-无sd卡 + BYTE byFortifyLevel[MAX_FORTIFY_NUM]; //布防等级,0-无,1-一等级(高),2-二等级(中),3-三等级(低) + BYTE byRes2[116]; //保留 }NET_DVR_DEVICESTATECFG, *LPNET_DVR_DEVICESTATECFG; typedef struct tagNET_DVR_POSTEPOLICECFG { DWORD dwSize; - DWORD dwDistance;//Ȧ,λcmȡֵΧ[0,20000] - DWORD dwLightChan[MAX_SIGNALLIGHT_NUM]; //źŵͨ - BYTE byCapSpeed;//־٣λkm/hȡֵΧ[0,255] - BYTE bySpeedLimit;//ֵλkm/hȡֵΧ[0,255] - BYTE byTrafficDirection;//0-ɶ1-򶫣2-򱱣3-ɱ - BYTE byRes1; // - WORD wLoopPreDist; /*ӳپ λ*/ - WORD wTrigDelay; /*Ӳʱʱ λ*/ - BYTE byRes[124];//ֽ + DWORD dwDistance;//线圈距离,单位cm,取值范围[0,20000] + DWORD dwLightChan[MAX_SIGNALLIGHT_NUM]; //信号灯通道号 + BYTE byCapSpeed;//标志限速,单位km/h,取值范围[0,255] + BYTE bySpeedLimit;//限速值,单位km/h,取值范围[0,255] + BYTE byTrafficDirection;//车流方向,0-由东向西,1-由西向东,2-由南向北,3-由北向南 + BYTE byRes1; //保留 + WORD wLoopPreDist; /*触发延迟距离 ,单位:分米*/ + WORD wTrigDelay; /*触发硬延时时间 ,单位:毫秒*/ + BYTE byRes[124];//保留字节 }NET_DVR_POSTEPOLICECFG, *LPNET_DVR_POSTEPOLICECFG; -//źŵ쳣 +//信号灯异常检测 typedef struct tagNET_DVR_SIGNALLAMP_DETCFG { - DWORD dwSize; //ṹ - //ʱ,yyyymmddhhmmssxxx,e.g.20090810235959999 λΪ + DWORD dwSize; //结构长度 + //绝对时间点,yyyymmddhhmmssxxx,e.g.20090810235959999 最后三位为毫秒数 BYTE byAbsTime[32]; - NET_DVR_IPADDR struAlarmCamIP;//IP - DWORD dwPic1Len; //쳣ͼƬ1 - DWORD dwPic2Len; //쳣ͼƬ2 - char *pPic1Buffer; //ָ ӳͼƬ - char *pPic2Buffer; //ָ źŵ״̬ͼƬ + NET_DVR_IPADDR struAlarmCamIP;//报警摄像机IP + DWORD dwPic1Len; //异常图片1长度 + DWORD dwPic2Len; //异常图片2长度 + char *pPic1Buffer; //数据指针 叠加车道线图片 + char *pPic2Buffer; //数据指针 叠加信号灯状态图片 BYTE byRes[128]; }NET_DVR_SIGNALLAMP_DETCFG, *LPNET_DVR_SIGNALLAMP_DETCFG; typedef struct tagNET_DVR_EXDEVDET_COND { - DWORD dwSize; // ṹС - DWORD dwChannel; //ͨ - BYTE byExternalDevType;// 0-Чֵ1-źŵ,2- - BYTE byRes[63]; // ֽ + DWORD dwSize; // 结构体大小 + DWORD dwChannel; //通道号 + BYTE byExternalDevType;// 0-无效值(保留)1-信号灯,2-闪光灯 + BYTE byRes[63]; // 保留字节 }NET_DVR_EXDEVDET_COND,*LPNET_DVR_EXDEVDET_COND; typedef struct tagNET_DVR_EXDEVDET_CFG { - DWORD dwSize; // ṹС - BYTE byExternalDevStatus;// 0-1-쳣 - BYTE byRes[63];// ֽ + DWORD dwSize; // 结构体大小 + BYTE byExternalDevStatus;// 0-正常1-异常 + BYTE byRes[63];// 保留字节 } NET_DVR_EXDEVDET_CFG,*LPNET_DVR_EXDEVDET_CFG; /***************************** end *********************************************/ -#define IPC_PROTOCOL_NUM 50 //ipc Э +#define IPC_PROTOCOL_NUM 50 //ipc 协议最大个数 -//Э +//协议类型 typedef struct tagNET_DVR_PROTO_TYPE { - DWORD dwType; /*ipcЭֵ*/ - BYTE byDescribe[DESC_LEN]; /*Эֶ*/ + DWORD dwType; /*ipc协议值*/ + BYTE byDescribe[DESC_LEN]; /*协议描述字段*/ }NET_DVR_PROTO_TYPE, *LPNET_DVR_PROTO_TYPE; -//Эб +//协议列表 typedef struct tagNET_DVR_IPC_PROTO_LIST { DWORD dwSize; - DWORD dwProtoNum; /*ЧipcЭĿ*/ - NET_DVR_PROTO_TYPE struProto[IPC_PROTOCOL_NUM]; /*ЧipcЭ*/ + DWORD dwProtoNum; /*有效的ipc协议数目*/ + NET_DVR_PROTO_TYPE struProto[IPC_PROTOCOL_NUM]; /*有效的ipc协议*/ BYTE byRes[8]; }NET_DVR_IPC_PROTO_LIST, *LPNET_DVR_IPC_PROTO_LIST; -//ЭбV41 +//协议列表V41 typedef struct tagNET_DVR_IPC_PROTO_LIST_V41 { DWORD dwSize; - DWORD dwProtoNum; //ЧipcЭĿ - BYTE *pBuffer; //Эб, dwProtoNum NET_DVR_PROTO_TYPEṹ - DWORD dwBufferLen; // + DWORD dwProtoNum; //有效的ipc协议数目 + BYTE *pBuffer; //协议列表缓冲区, dwProtoNum 个NET_DVR_PROTO_TYPE结构 + DWORD dwBufferLen; //缓冲区长度 BYTE byRes[32]; }NET_DVR_IPC_PROTO_LIST_V41, *LPNET_DVR_IPC_PROTO_LIST_V41; typedef struct tagNET_DVR_PTZPOS_INFO { - DWORD dwPanPos; // Pˮƽ - DWORD dwTiltPos; // Tֱ - DWORD dwZoomPos; // Z䱶 + DWORD dwPanPos; // P参数(水平参数) + DWORD dwTiltPos; // T参数(垂直参数) + DWORD dwZoomPos; // Z参数(变倍参数) }NET_DVR_PTZPOS_INFO, *LPNET_DVR_PTZPOS_INFO; -//ʶṹ +//人体特征识别结果结构体 typedef struct tagNET_VCA_HUMAN_FEATURE { - BYTE byGroup; // - BYTE bySex; //Ա, 0-ʾδ֪㷨֧֣,1 C , 2 C Ů, 0xff-㷨֧֣ûʶ - BYTE byEyeGlass; //Ƿ۾ 0-ʾδ֪㷨֧֣,1 C, 2 C۾, 3 Cī,0xff-㷨֧֣ûʶ - //ץͼƬʹ÷ʽbyRes3Ϊ15,byDeviationΪ1,ʾʵͼƬΪ14-16֮ - BYTE byRes3;// 0-ʾδ֪㷨֧֣,0xff-㷨֧֣ûʶ - BYTE byDeviation;//ֵ + BYTE byGroup; //段 + BYTE bySex; //性别, 0-表示“未知”(算法不支持),1 – 男 , 2 – 女, 0xff-算法支持,但是没有识别出来 + BYTE byEyeGlass; //是否戴眼镜 0-表示“未知”(算法不支持),1 –不戴, 2 –戴眼镜, 3 –戴墨镜,0xff-算法支持,但是没有识别出来 + //抓拍图片人脸的使用方式,如byRes3为15,byDeviation为1,表示,实际人脸图片的为14-16之间 + BYTE byRes3;// 0-表示“未知”(算法不支持),0xff-算法支持,但是没有识别出来 + BYTE byDeviation;//误差值 BYTE byRes0; - BYTE byMask; //Ƿ 0-ʾδ֪㷨֧֣,1 C , 2 C , 0xff-㷨֧֣ûʶ - BYTE bySmile; //Ƿ΢Ц 0-ʾδ֪㷨֧֣,1 C ΢Ц, 2 C ΢Ц, 0xff-㷨֧֣ûʶ - BYTE byFaceExpression; /* ,μFACE_EXPRESSION_GROUP_ENUM*/ + BYTE byMask; //是否戴口罩 0-表示“未知”(算法不支持),1 – 不戴, 2 – 戴, 0xff-算法支持,但是没有识别出来 + BYTE bySmile; //是否微笑 0-表示“未知”(算法不支持),1 – 不微笑, 2 – 微笑, 0xff-算法支持,但是没有识别出来 + BYTE byFaceExpression; /* 表情,参见FACE_EXPRESSION_GROUP_ENUM*/ BYTE byRes1; BYTE byRes2; - BYTE byHat; // ñ, 0-֧,1-ñ,2-ñ, 3-ͷ 0xff-unknowʾδ֪,㷨֧δ - BYTE byRes[4]; // + BYTE byHat; // 帽子, 0-不支持,1-不戴帽子,2-戴帽子, 3-头盔 0xff-unknow表示未知,算法支持未检出 + BYTE byRes[4]; //保留 }NET_VCA_HUMAN_FEATURE ,*LPNET_VCA_HUMAN_FEATURE; -//ɫ +//物体颜色属性 typedef struct tagNET_DVR_OBJECT_FEATURE { - BYTE byColorRatel; //ɫƶеռֵ - BYTE byRed; // RGBɫеĺɫ - BYTE byGreen; // RGBɫеɫ - BYTE byBlue; // RGBɫеɫ + BYTE byColorRatel; //颜色在移动物体中的占比阈值 + BYTE byRed; // RGB颜色三分量中的红色 + BYTE byGreen; // RGB颜色三分量中的绿色 + BYTE byBlue; // RGB颜色三分量中的兰色 BYTE byRes[32]; }NET_DVR_OBJECT_FEATURE ,*LPNET_DVR_OBJECT_FEATURE; -// +//组合搜索条件 typedef union tagNET_DVR_ADVANCE_COND_UNION { - BYTE byLen[36]; //峤 - NET_VCA_HUMAN_FEATURE struHumanFeature; // - NET_DVR_OBJECT_FEATURE struObjectFeature; // + BYTE byLen[36]; //联合体长度 + NET_VCA_HUMAN_FEATURE struHumanFeature; //人体属性 + NET_DVR_OBJECT_FEATURE struObjectFeature; //物体属性 }NET_DVR_ADVANCE_COND_UNION,*LPNET_DVR_ADVANCE_COND_UNION; -#define MAX_ALERTLINE_NUM 8 //󾯽 +#define MAX_ALERTLINE_NUM 8 //最大警戒线条数 typedef struct tagNET_DVR_TRAVERSE_PLANE_SEARCHCOND { - NET_VCA_TRAVERSE_PLANE struVcaTraversePlane[MAX_ALERTLINE_NUM/*8*/]; //Խ - DWORD dwPreTime; /*ܱǰʱ λ:*/ - DWORD dwDelayTime; /*ܱӳʱ λ:*/ - NET_DVR_PTZPOS_INFO struPTZPosInfo; //PTZϢ - BYTE byAdvanceType; //Ϸʽ0-ʹţ1-ϣ2-ɫռ - BYTE byRes1[3]; // - NET_DVR_ADVANCE_COND_UNION uAdvanceCond; // - BYTE byRes[5604]; // -}NET_DVR_TRAVERSE_PLANE_SEARCHCOND, *LPNET_DVR_TRAVERSE_PLANE_SEARCHCOND; //Խѯ + NET_VCA_TRAVERSE_PLANE struVcaTraversePlane[MAX_ALERTLINE_NUM/*8*/]; //穿越境界面参数 + DWORD dwPreTime; /*智能报警提前时间 单位:秒*/ + DWORD dwDelayTime; /*智能报警延迟时间 单位:秒*/ + NET_DVR_PTZPOS_INFO struPTZPosInfo; //PTZ坐标信息 + BYTE byAdvanceType; //组合方式,0-不使用组号,1-和人脸属性组合,2-与物体颜色占比组合 + BYTE byRes1[3]; //保留 + NET_DVR_ADVANCE_COND_UNION uAdvanceCond; //组合属性 + BYTE byRes[5604]; //保留 +}NET_DVR_TRAVERSE_PLANE_SEARCHCOND, *LPNET_DVR_TRAVERSE_PLANE_SEARCHCOND; //越界侦测查询条件 -#define MAX_INTRUSIONREGION_NUM 8 // +#define MAX_INTRUSIONREGION_NUM 8 //最大区域数数 typedef struct tagNET_DVR_INTRUSION_SEARCHCOND { - NET_VCA_INTRUSION struVcaIntrusion[MAX_INTRUSIONREGION_NUM/*8*/]; // - DWORD dwPreTime; /*ܱǰʱ λ:*/ - DWORD dwDelayTime; /*ܱӳʱ λ:*/ - NET_DVR_PTZPOS_INFO struPTZPosInfo; //PTZϢ - BYTE byAdvanceType;//Ϸʽ0-ʹţ1-ϣ2-ɫռ - BYTE byRes1[3]; // - NET_DVR_ADVANCE_COND_UNION uAdvanceCond; // - BYTE byRes[5348]; // -} NET_DVR_INTRUSION_SEARCHCOND, *LPNET_DVR_INTRUSION_SEARCHCOND; // + NET_VCA_INTRUSION struVcaIntrusion[MAX_INTRUSIONREGION_NUM/*8*/]; //入侵区域 + DWORD dwPreTime; /*智能报警提前时间 单位:秒*/ + DWORD dwDelayTime; /*智能报警延迟时间 单位:秒*/ + NET_DVR_PTZPOS_INFO struPTZPosInfo; //PTZ坐标信息 + BYTE byAdvanceType;//组合方式,0-不使用组号,1-和人脸属性组合,2-与物体颜色占比组合 + BYTE byRes1[3]; //保留 + NET_DVR_ADVANCE_COND_UNION uAdvanceCond; //组合属性 + BYTE byRes[5348]; //保留 +} NET_DVR_INTRUSION_SEARCHCOND, *LPNET_DVR_INTRUSION_SEARCHCOND; //区域入侵 typedef struct tagNET_DVR_FACEDETECTION_SEARCHCOND { - NET_VCA_POLYGON struFacePolygon; //ʶ - DWORD dwPreTime; /*¼ǰʱ λ:*/ - DWORD dwDelayTime; /*¼ӳʱ λ:*/ - BYTE byRes[5972]; // -}NET_DVR_FACEDETECTION_SEARCHCOND, *LPNET_DVR_FACEDETECTION_SEARCHCOND; // + NET_VCA_POLYGON struFacePolygon; //识别区域 + DWORD dwPreTime; /*智能录像提前时间 单位:秒*/ + DWORD dwDelayTime; /*智能录像延迟时间 单位:秒*/ + BYTE byRes[5972]; //保留 +}NET_DVR_FACEDETECTION_SEARCHCOND, *LPNET_DVR_FACEDETECTION_SEARCHCOND; //人脸检测 typedef union tagNET_DVR_AREA_SMARTSEARCH_COND_UNION { - BYTE byLen[6144]; //ṹ峤 - BYTE byMotionScope[64][96]; // 0-96λʾ64У96*64С飬1-ƶ0-ƶ - NET_DVR_TRAVERSE_PLANE_SEARCHCOND struTraversPlaneCond; //Խ - NET_DVR_INTRUSION_SEARCHCOND struIntrusionCond; // - NET_DVR_FACEDETECTION_SEARCHCOND struFaceSnapCond; // + BYTE byLen[6144]; //结构体长度 + BYTE byMotionScope[64][96]; //侦测区域 0-96位表示64行,共有96*64个小宏块,1-是移动侦测区域,0-非移动侦测区域 + NET_DVR_TRAVERSE_PLANE_SEARCHCOND struTraversPlaneCond; //越界侦测 + NET_DVR_INTRUSION_SEARCHCOND struIntrusionCond; //区域入侵 + NET_DVR_FACEDETECTION_SEARCHCOND struFaceSnapCond; //人脸侦测条件 }NET_DVR_AREA_SMARTSEARCH_COND_UNION, *LPNET_DVR_AREA_SMARTSEARCH_COND_UNION; -// +//智能搜索参数 typedef struct tagNET_DVR_SMART_SEARCH_PARAM { - BYTE byChan; //ͨ - BYTE bySearchCondType; //ܲNET_DVR_AREA_SMARTSEARCH_COND_UNION - /*0-ƶ 1-Խ⣬ 2-, 3- */ - WORD wChan; //ͨţ ֶǶbyChanչʹøֶκbyChanԲʹ - NET_DVR_TIME struStartTime; //¼ʼʱ - NET_DVR_TIME struEndTime; //¼ֹͣʱ - NET_DVR_AREA_SMARTSEARCH_COND_UNION uSmartSearchCond; //ܲ - BYTE bySensitivity; //ƶ,1 >80% 2 40%~80% 3 1%~40% + BYTE byChan; //通道号 + BYTE bySearchCondType; //智能查找联合体NET_DVR_AREA_SMARTSEARCH_COND_UNION的索引 + /*0-移动侦测区域 ,1-越界侦测, 2-区域入侵, 3-人脸侦测 */ + WORD wChan; //通道号, 该字段是对byChan的扩展,使用该字段后byChan可以不再使用 + NET_DVR_TIME struStartTime; //录像开始的时间 + NET_DVR_TIME struEndTime; //录像停止的时间 + NET_DVR_AREA_SMARTSEARCH_COND_UNION uSmartSearchCond; //智能查找条件 + BYTE bySensitivity; //移动侦测搜索灵敏度,1 >80% 2 40%~80% 3 1%~40% BYTE byRes2[11]; }NET_DVR_SMART_SEARCH_PARAM, *LPNET_DVR_SMART_SEARCH_PARAM; typedef struct tagNET_DVR_SMART_SEARCH_PARAM_V40 { - DWORD dwSize; //ṹС - NET_DVR_STREAM_INFO struIDInfo; //ͨϢ - BYTE bySearchCondType; //ܲ 0-, 1-Խ, 2-,3-, 4-Ƽ - BYTE bySensitivity; //̬,1-100 + DWORD dwSize; //结构体大小 + NET_DVR_STREAM_INFO struIDInfo; //通道信息 + BYTE bySearchCondType; //智能查找联合体索引 0-侦测区域, 1-越界侦测, 2-区域入侵,3-人脸侦测, 4-车牌检测 + BYTE bySensitivity; //侦测区域动态分析灵敏度,1-100 BYTE byRes1[2]; NET_DVR_TIME_EX struStartTime; NET_DVR_TIME_EX struEndTime; - NET_DVR_AREA_SMARTSEARCH_COND_UNION uSmartSearchCond; //ܲ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱbyISO8601Ϊ1ʱЧ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱbyISO8601Ϊ1ʱЧ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱbyISO8601Ϊ1ʱЧ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱbyISO8601Ϊ1ʱЧ + NET_DVR_AREA_SMARTSEARCH_COND_UNION uSmartSearchCond; //智能查找条件 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区,byISO8601为1时有效 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区,byISO8601为1时有效 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区,byISO8601为1时有效 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区,byISO8601为1时有效 BYTE byRes2[251]; }NET_DVR_SMART_SEARCH_PARAM_V40,*LPNET_DVR_SMART_SEARCH_PARAM_V40; @@ -22207,266 +22207,266 @@ typedef struct tagNET_DVR_SMART_SEARCH_PARAM_V40 typedef struct tagNET_DVR_SMART_SEARCH_RET { - NET_DVR_TIME struStartTime; //ƶⱨʼʱ - NET_DVR_TIME struEndTime; //¼ֹͣʱ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱ + NET_DVR_TIME struStartTime; //移动侦测报警开始的时间 + NET_DVR_TIME struEndTime; //事件停止的时间 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 BYTE byRes[59]; }NET_DVR_SMART_SEARCH_RET, *LPNET_DVR_SMART_SEARCH_RET; -// IPSAN ļĿ¼ +// IPSAN 文件目录查找 typedef struct tagNET_DVR_IPSAN_SERACH_PARAM { - NET_DVR_IPADDR struIP; // IPSAN IPַ - WORD wPort; // IPSAN ˿ - BYTE byRes[10]; // ֽ + NET_DVR_IPADDR struIP; // IPSAN IP地址 + WORD wPort; // IPSAN 端口 + BYTE byRes[10]; // 保留字节 }NET_DVR_IPSAN_SERACH_PARAM, *LPNET_DVR_IPSAN_SERACH_PARAM; typedef struct tagNET_DVR_IPSAN_SERACH_RET { - BYTE byDirectory[128]; // صļĿ¼ + BYTE byDirectory[128]; // 返回的文件目录 BYTE byRes[20]; }NET_DVR_IPSAN_SERACH_RET, *LPNET_DVR_IPSAN_SERACH_RET; -//DVR豸 +//DVR设备参数 typedef struct { DWORD dwSize; - BYTE sDVRName[NAME_LEN]; //DVR - DWORD dwDVRID; //DVR ID,ң //V1.4(0-99), V1.5(0-255) - DWORD dwRecycleRecord; //Ƿѭ¼,0:; 1: - //²ɸ - BYTE sSerialNumber[SERIALNO_LEN]; //к - DWORD dwSoftwareVersion; //汾,16λ汾,16λǴΰ汾 - DWORD dwSoftwareBuildDate; //,0xYYYYMMDD - DWORD dwDSPSoftwareVersion; //DSP汾,16λ汾,16λǴΰ汾 - DWORD dwDSPSoftwareBuildDate; // DSP,0xYYYYMMDD - DWORD dwPanelVersion; // ǰ汾,16λ汾,16λǴΰ汾 - DWORD dwHardwareVersion; // Ӳ汾,16λ汾,16λǴΰ汾 - BYTE byAlarmInPortNum; //DVR - BYTE byAlarmOutPortNum; //DVR - BYTE byRS232Num; //DVR 232ڸ - BYTE byRS485Num; //DVR 485ڸ - BYTE byNetworkPortNum; //ڸ - BYTE byDiskCtrlNum; //DVR Ӳ̿ - BYTE byDiskNum; //DVR Ӳ̸ - BYTE byDVRType; //DVR, 1:DVR 2:ATM DVR 3:DVS ...... - BYTE byChanNum; //DVR ͨ - BYTE byStartChan; //ʼͨ,DVS-1,DVR - 1 - BYTE byDecordChans; //DVR · - BYTE byVGANum; //VGAڵĸ - BYTE byUSBNum; //USBڵĸ - BYTE byAuxoutNum; //ڵĸ - BYTE byAudioNum; //ڵĸ - BYTE byIPChanNum; //ͨ 8λ8λbyHighIPChanNum - BYTE byZeroChanNum; //ͨ - BYTE bySupport; //λΪ0ʾ֧֣1ʾ֧֣ - //bySupport & 0x1, ʾǷ֧ - //bySupport & 0x2, ʾǷֱ֧ - //bySupport & 0x4, ʾǷ֧ѹȡ - //bySupport & 0x8, ʾǷֶ֧ - //bySupport & 0x10, ʾ֧ԶSADP - //bySupport & 0x20, ʾ֧Raid - //bySupport & 0x40, ʾ֧IPSAN - //bySupport & 0x80, ʾ֧rtp over rtsp - BYTE byEsataUseage; //EsataĬ;0-Ĭϱݣ1-Ĭ¼ - BYTE byIPCPlug; //0-رռ弴ã1-򿪼弴 - BYTE byStorageMode; //0-ģʽ,1-, 2֡ģʽ, 3-Զ - BYTE bySupport1; //λΪ0ʾ֧֣1ʾ֧ - //bySupport1 & 0x1, ʾǷ֧snmp v30 - //bySupport1 & 0x2, ֻ֧طź - //bySupport1 & 0x4, Ƿֲ֧ȼ - //bySupport1 & 0x8, 豸Ƿֲ֧ʱչ - //bySupport1 & 0x10, ʾǷֶ֧33 - //bySupport1 & 0x20, ʾǷ֧rtsp over http - WORD wDevType;//豸ͺ - BYTE byDevTypeName[DEV_TYPE_NAME_LEN];//豸ͺ - BYTE bySupport2; //չλΪ0ʾ֧֣1ʾ֧ - //bySupport2 & 0x1, ʾǷ֧չOSDַ(ն˺ץĻչ) - BYTE byAnalogAlarmInPortNum; //ģⱨ - BYTE byStartAlarmInNo; //ģⱨʼ - BYTE byStartAlarmOutNo; //ģⱨʼ - BYTE byStartIPAlarmInNo; //IPʼ - BYTE byStartIPAlarmOutNo; //IPʼ - BYTE byHighIPChanNum; //ͨ8λ - BYTE byEnableRemotePowerOn;//Ƿ豸ߵ״̬Զ̿ܣ0-ã1- - WORD wDevClass; //豸౸ĸƷߣ0 1-50 DVR51-100 DVS101-150 NVR151-200 IPC65534 ෽豸ͶӦкźֵ.docx - BYTE byRes2[6]; // + BYTE sDVRName[NAME_LEN]; //DVR名称 + DWORD dwDVRID; //DVR ID,用于遥控器 //V1.4(0-99), V1.5(0-255) + DWORD dwRecycleRecord; //是否循环录像,0:不是; 1:是 + //以下不可更改 + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + DWORD dwSoftwareVersion; //软件版本号,高16位是主版本,低16位是次版本 + DWORD dwSoftwareBuildDate; //软件生成日期,0xYYYYMMDD + DWORD dwDSPSoftwareVersion; //DSP软件版本,高16位是主版本,低16位是次版本 + DWORD dwDSPSoftwareBuildDate; // DSP软件生成日期,0xYYYYMMDD + DWORD dwPanelVersion; // 前面板版本,高16位是主版本,低16位是次版本 + DWORD dwHardwareVersion; // 硬件版本,高16位是主版本,低16位是次版本 + BYTE byAlarmInPortNum; //DVR报警输入个数 + BYTE byAlarmOutPortNum; //DVR报警输出个数 + BYTE byRS232Num; //DVR 232串口个数 + BYTE byRS485Num; //DVR 485串口个数 + BYTE byNetworkPortNum; //网络口个数 + BYTE byDiskCtrlNum; //DVR 硬盘控制器个数 + BYTE byDiskNum; //DVR 硬盘个数 + BYTE byDVRType; //DVR类型, 1:DVR 2:ATM DVR 3:DVS ...... + BYTE byChanNum; //DVR 通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 + BYTE byDecordChans; //DVR 解码路数 + BYTE byVGANum; //VGA口的个数 + BYTE byUSBNum; //USB口的个数 + BYTE byAuxoutNum; //辅口的个数 + BYTE byAudioNum; //语音口的个数 + BYTE byIPChanNum; //最大数字通道数 低8位,高8位见byHighIPChanNum + BYTE byZeroChanNum; //零通道编码个数 + BYTE bySupport; //能力,位与结果为0表示不支持,1表示支持, + //bySupport & 0x1, 表示是否支持智能搜索 + //bySupport & 0x2, 表示是否支持备份 + //bySupport & 0x4, 表示是否支持压缩参数能力获取 + //bySupport & 0x8, 表示是否支持多网卡 + //bySupport & 0x10, 表示支持远程SADP + //bySupport & 0x20, 表示支持Raid卡功能 + //bySupport & 0x40, 表示支持IPSAN搜索 + //bySupport & 0x80, 表示支持rtp over rtsp + BYTE byEsataUseage; //Esata的默认用途,0-默认备份,1-默认录像 + BYTE byIPCPlug; //0-关闭即插即用,1-打开即插即用 + BYTE byStorageMode; //0-盘组模式,1-磁盘配额, 2抽帧模式, 3-自动 + BYTE bySupport1; //能力,位与结果为0表示不支持,1表示支持 + //bySupport1 & 0x1, 表示是否支持snmp v30 + //bySupport1 & 0x2, 支持区分回放和下载 + //bySupport1 & 0x4, 是否支持布防优先级 + //bySupport1 & 0x8, 智能设备是否支持布防时间段扩展 + //bySupport1 & 0x10, 表示是否支持多磁盘数(超过33个) + //bySupport1 & 0x20, 表示是否支持rtsp over http + WORD wDevType;//设备型号 + BYTE byDevTypeName[DEV_TYPE_NAME_LEN];//设备型号名称 + BYTE bySupport2; //能力集扩展,位与结果为0表示不支持,1表示支持 + //bySupport2 & 0x1, 表示是否支持扩展的OSD字符叠加(终端和抓拍机扩展区分) + BYTE byAnalogAlarmInPortNum; //模拟报警输入个数 + BYTE byStartAlarmInNo; //模拟报警输入起始号 + BYTE byStartAlarmOutNo; //模拟报警输出起始号 + BYTE byStartIPAlarmInNo; //IP报警输入起始号 + BYTE byStartIPAlarmOutNo; //IP报警输出起始号 + BYTE byHighIPChanNum; //数字通道个数,高8位 + BYTE byEnableRemotePowerOn;//是否启用在设备休眠的状态下远程开机功能,0-不启用,1-启用 + WORD wDevClass; //设备大类备是属于哪个产品线,0 保留,1-50 DVR,51-100 DVS,101-150 NVR,151-200 IPC,65534 其他,具体分类方法见《设备类型对应序列号和类型值.docx》 + BYTE byRes2[6]; //保留 }NET_DVR_DEVICECFG_V40, *LPNET_DVR_DEVICECFG_V40; typedef struct { DWORD dwSize; - BYTE sDVRName[NET_DEV_NAME_LEN]; //DVR - DWORD dwDVRID; //DVR ID,ң //V1.4(0-99), V1.5(0-255) - DWORD dwRecycleRecord; //Ƿѭ¼,0:; 1: - //²ɸ - BYTE sSerialNumber[SERIALNO_LEN]; //к - DWORD dwSoftwareVersion; //汾,16λ汾,16λǴΰ汾 - DWORD dwSoftwareBuildDate; //,0xYYYYMMDD - DWORD dwDSPSoftwareVersion; //DSP汾,16λ汾,16λǴΰ汾 - DWORD dwDSPSoftwareBuildDate; // DSP,0xYYYYMMDD - DWORD dwPanelVersion; // ǰ汾,16λ汾,16λǴΰ汾 - DWORD dwHardwareVersion; // Ӳ汾,16λ汾,16λǴΰ汾 - BYTE byAlarmInPortNum; //DVR - BYTE byAlarmOutPortNum; //DVR - BYTE byRS232Num; //DVR 232ڸ - BYTE byRS485Num; //DVR 485ڸ -- - BYTE byNetworkPortNum; //ڸ - BYTE byDiskCtrlNum; //DVR Ӳ̿ - BYTE byDiskNum; //DVR Ӳ̸ - BYTE byDVRType; //DVR, 1:DVR 2:ATM DVR 3:DVS ......-- - BYTE byChanNum; //DVR ͨ - BYTE byStartChan; //ʼͨ,DVS-1,DVR - 1 - BYTE byDecordChans; //DVR · - BYTE byVGANum; //VGAڵĸ -- - BYTE byUSBNum; //USBڵĸ - BYTE byAuxoutNum; //ڵĸ - BYTE byAudioNum; //ڵĸ - BYTE byIPChanNum; //ͨ -- - BYTE byZeroChanNum; //ͨ - BYTE bySupport; //λΪ0ʾ֧֣1ʾ֧֣ - //bySupport & 0x1, ʾǷ֧ - //bySupport & 0x2, ʾǷֱ֧ - //bySupport & 0x4, ʾǷ֧ѹȡ - //bySupport & 0x8, ʾǷֶ֧ - //bySupport & 0x10, ʾ֧ԶSADP - //bySupport & 0x20, ʾ֧Raid - //bySupport & 0x40, ʾ֧IPSAN - //bySupport & 0x80, ʾ֧rtp over rtsp - BYTE byEsataUseage; //EsataĬ;0-Ĭϱݣ1-Ĭ¼ - BYTE byIPCPlug; //0-رռ弴ã1-򿪼弴 - BYTE byStorageMode; //0-ģʽ,1-,2֡ģʽ - BYTE bySupport1; //λΪ0ʾ֧֣1ʾ֧ - //bySupport1 & 0x1, ʾǷ֧snmp v30 - //bySupport1 & 0x2, ֻ֧طź - //bySupport1 & 0x4, Ƿֲ֧ȼ - //bySupport1 & 0x8, 豸Ƿֲ֧ʱչ - //bySupport1 & 0x10, ʾǷֶ֧33 - //bySupport1 & 0x20, ʾǷ֧rtsp over http - WORD wDevType;//豸ͺչ - BYTE byDevTypeName[NET_DEV_TYPE_NAME_LEN];//豸ͺ - BYTE bySupport2; //չλΪ0ʾ֧֣1ʾ֧ - //bySupport2 & 0x1, ʾǷ֧չOSDַ(ն˺ץĻչ) - BYTE byAnalogAlarmInPortNum; //ģⱨĿ - BYTE byStartAlarmInNo; //ģⱨʼ - BYTE byStartAlarmOutNo; //ģⱨʼ - BYTE byStartIPAlarmInNo; //IPʼ - BYTE byStartIPAlarmOutNo; //IPʼ - BYTE byHighIPChanNum; //ͨ8λ - BYTE byEnableRemotePowerOn;//Ƿ豸ߵ״̬Զ̿ܣ0-ã1- - BYTE byRes[256]; // + BYTE sDVRName[NET_DEV_NAME_LEN]; //DVR名称 + DWORD dwDVRID; //DVR ID,用于遥控器 //V1.4(0-99), V1.5(0-255) + DWORD dwRecycleRecord; //是否循环录像,0:不是; 1:是 + //以下不可更改 + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + DWORD dwSoftwareVersion; //软件版本号,高16位是主版本,低16位是次版本 + DWORD dwSoftwareBuildDate; //软件生成日期,0xYYYYMMDD + DWORD dwDSPSoftwareVersion; //DSP软件版本,高16位是主版本,低16位是次版本 + DWORD dwDSPSoftwareBuildDate; // DSP软件生成日期,0xYYYYMMDD + DWORD dwPanelVersion; // 前面板版本,高16位是主版本,低16位是次版本 + DWORD dwHardwareVersion; // 硬件版本,高16位是主版本,低16位是次版本 + BYTE byAlarmInPortNum; //DVR报警输入个数 + BYTE byAlarmOutPortNum; //DVR报警输出个数 + BYTE byRS232Num; //DVR 232串口个数 + BYTE byRS485Num; //DVR 485串口个数 -- + BYTE byNetworkPortNum; //网络口个数 + BYTE byDiskCtrlNum; //DVR 硬盘控制器个数 + BYTE byDiskNum; //DVR 硬盘个数 + BYTE byDVRType; //DVR类型, 1:DVR 2:ATM DVR 3:DVS ......-- + BYTE byChanNum; //DVR 通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 + BYTE byDecordChans; //DVR 解码路数 + BYTE byVGANum; //VGA口的个数 -- + BYTE byUSBNum; //USB口的个数 + BYTE byAuxoutNum; //辅口的个数 + BYTE byAudioNum; //语音口的个数 + BYTE byIPChanNum; //最大数字通道数 -- + BYTE byZeroChanNum; //零通道编码个数 + BYTE bySupport; //能力,位与结果为0表示不支持,1表示支持, + //bySupport & 0x1, 表示是否支持智能搜索 + //bySupport & 0x2, 表示是否支持备份 + //bySupport & 0x4, 表示是否支持压缩参数能力获取 + //bySupport & 0x8, 表示是否支持多网卡 + //bySupport & 0x10, 表示支持远程SADP + //bySupport & 0x20, 表示支持Raid卡功能 + //bySupport & 0x40, 表示支持IPSAN搜索 + //bySupport & 0x80, 表示支持rtp over rtsp + BYTE byEsataUseage; //Esata的默认用途,0-默认备份,1-默认录像 + BYTE byIPCPlug; //0-关闭即插即用,1-打开即插即用 + BYTE byStorageMode; //0-盘组模式,1-磁盘配额,2抽帧模式 + BYTE bySupport1; //能力,位与结果为0表示不支持,1表示支持 + //bySupport1 & 0x1, 表示是否支持snmp v30 + //bySupport1 & 0x2, 支持区分回放和下载 + //bySupport1 & 0x4, 是否支持布防优先级 + //bySupport1 & 0x8, 智能设备是否支持布防时间段扩展 + //bySupport1 & 0x10, 表示是否支持多磁盘数(超过33个) + //bySupport1 & 0x20, 表示是否支持rtsp over http + WORD wDevType;//设备型号扩展 + BYTE byDevTypeName[NET_DEV_TYPE_NAME_LEN];//设备型号名称 + BYTE bySupport2; //能力集扩展,位与结果为0表示不支持,1表示支持 + //bySupport2 & 0x1, 表示是否支持扩展的OSD字符叠加(终端和抓拍机扩展区分) + BYTE byAnalogAlarmInPortNum; //模拟报警输入数目 + BYTE byStartAlarmInNo; //模拟报警输入起始号 + BYTE byStartAlarmOutNo; //模拟报警输出起始号 + BYTE byStartIPAlarmInNo; //IP报警输入起始号 + BYTE byStartIPAlarmOutNo; //IP报警输出起始号 + BYTE byHighIPChanNum; //数字通道个数,高8位 + BYTE byEnableRemotePowerOn;//是否启用在设备休眠的状态下远程开机功能,0-不启用,1-启用 + BYTE byRes[256]; //保留 }NET_DVR_DEVICECFG_V50, *LPNET_DVR_DEVICECFG_V50; #define MAX_ZEROCHAN_NUM 16 -//ͨѹò +//零通道压缩配置参数 typedef struct tagNET_DVR_ZEROCHANCFG { - DWORD dwSize; //ṹ - BYTE byEnable; //0-ֹͣͨ룬1-ʾͨ - BYTE byRes1[3]; // - DWORD dwVideoBitrate; //Ƶ 0- 1-16K() 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K + DWORD dwSize; //结构长度 + BYTE byEnable; //0-停止零通道编码,1-表示启用零通道编码 + BYTE byRes1[3]; //保留 + DWORD dwVideoBitrate; //视频码率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K // 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K - //λ(31λ)ó1ʾԶ, 0-30λʾֵ(MIN-32K MAX-8192K) - DWORD dwVideoFrameRate; //֡ 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, //V2.014-15, 15-18, 16-22; - BYTE byRes2[32]; // + //最高位(31位)置成1表示是自定义码流, 0-30位表示码流值(MIN-32K MAX-8192K)。 + DWORD dwVideoFrameRate; //帧率 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, //V2.0增加14-15, 15-18, 16-22; + BYTE byRes2[32]; //保留 }NET_DVR_ZEROCHANCFG, *LPNET_DVR_ZEROCHANCFG; -//ͨŲ +//零通道缩放参数 typedef struct tagNET_DVR_ZERO_ZOOMCFG { - DWORD dwSize; //ṹ - NET_VCA_POINT struPoint; //е - BYTE byState; //ڵ״̬0-С1-Ŵ - BYTE byPreviewNumber; //ԤĿ,0-1,1-4,2-9,3-16 òֻ - BYTE byPreviewSeq[MAX_WINDOW_V30];//ͨϢ òֻ - BYTE byRes[30]; // + DWORD dwSize; //结构长度 + NET_VCA_POINT struPoint; //画面中的坐标点 + BYTE byState; //现在的状态,0-缩小,1-放大 + BYTE byPreviewNumber; //预览数目,0-1画面,1-4画面,2-9画面,3-16画面 该参数只读 + BYTE byPreviewSeq[MAX_WINDOW_V30];//画面通道信息 该参数只读 + BYTE byRes[30]; //保留 }NET_DVR_ZERO_ZOOMCFG, *LPNET_DVR_ZERO_ZOOMCFG; #define DESC_LEN_64 64 typedef struct tagNET_DVR_SNMPCFG { - DWORD dwSize; //ṹ - BYTE byEnable; //0-SNMP1-ʾSNMP - BYTE byRes1[3]; // - WORD wVersion; //snmp 汾 v1 = 1, v2 =2, v3 =3豸Ŀǰ֧ v3 - WORD wServerPort; //snmpϢն˿ڣĬ 161 - BYTE byReadCommunity[NAME_LEN]; //ͬ壬31,Ĭ"public" - BYTE byWriteCommunity[NAME_LEN];//дͬ,31 ֽ,Ĭ "private" - BYTE byTrapHostIP [DESC_LEN_64]; //ipַ֧IPV4 IPV6 - WORD wTrapHostPort; // trap˿ + DWORD dwSize; //结构长度 + BYTE byEnable; //0-禁用SNMP,1-表示启用SNMP + BYTE byRes1[3]; //保留 + WORD wVersion; //snmp 版本 v1 = 1, v2 =2, v3 =3,设备目前不支持 v3 + WORD wServerPort; //snmp消息接收端口,默认 161 + BYTE byReadCommunity[NAME_LEN]; //读共同体,最多31,默认"public" + BYTE byWriteCommunity[NAME_LEN];//写共同体,最多31 字节,默认 "private" + BYTE byTrapHostIP [DESC_LEN_64]; //自陷主机ip地址描述,支持IPV4 IPV6和域名描述 + WORD wTrapHostPort; // trap主机端口 BYTE byTrapName[NAME_LEN]; - BYTE byRes2[70]; // + BYTE byRes2[70]; //保留 }NET_DVR_SNMPCFG, *LPNET_DVR_SNMPCFG; typedef struct tagNET_DVR_SNMPv3_USER { - BYTE byUserName[NAME_LEN]; // û - BYTE bySecLevel; // ȫ 0- 1-У 2-ȨУ 3-ȨУ - BYTE byAuthtype; // ֤ 0-MD5֤ 1-SHA֤ 2: none + BYTE byUserName[NAME_LEN]; // 用户名 + BYTE bySecLevel; // 安全级别 0-保留 1-无校验 2-无授权校验 3-授权校验 + BYTE byAuthtype; // 认证类型 0-MD5认证 1-SHA认证 2: none BYTE byPrivtype; // 0: DES; 1: AES; 2: none; BYTE byRes[5]; - BYTE byAuthpass[PASSWD_LEN]; // ֤ - BYTE byPrivpass[PASSWD_LEN]; // + BYTE byAuthpass[PASSWD_LEN]; // 认证密码 + BYTE byPrivpass[PASSWD_LEN]; // 加密密码 }NET_DVR_SNMPv3_USER, *LPNET_DVR_SNMPv3_USER; // snmpv30 typedef struct tagNET_DVR_SNMPCFG_V30 { - DWORD dwSize; //ṹ - BYTE byEnableV1; //0-SNMP V11-ʾSNMP V1 - BYTE byEnableV2; //0-SNMP V21-ʾSNMP V2 - BYTE byEnableV3; //0-SNMP V31-ʾSNMP V3 + DWORD dwSize; //结构长度 + BYTE byEnableV1; //0-禁用SNMP V1,1-表示启用SNMP V1 + BYTE byEnableV2; //0-禁用SNMP V2,1-表示启用SNMP V2 + BYTE byEnableV3; //0-禁用SNMP V3,1-表示启用SNMP V3 BYTE byRes1[3]; - WORD wServerPort; //snmpϢն˿ڣĬ 161 - BYTE byReadCommunity[NAME_LEN]; //ͬ壬31,Ĭ"public" - BYTE byWriteCommunity[NAME_LEN]; //дͬ,31 ֽ,Ĭ "private" - BYTE byTrapHostIP [DESC_LEN_64]; //ipַ֧IPV4 IPV6 - WORD wTrapHostPort; // trap˿ + WORD wServerPort; //snmp消息接收端口,默认 161 + BYTE byReadCommunity[NAME_LEN]; //读共同体,最多31,默认"public" + BYTE byWriteCommunity[NAME_LEN]; //写共同体,最多31 字节,默认 "private" + BYTE byTrapHostIP [DESC_LEN_64]; //自陷主机ip地址描述,支持IPV4 IPV6和域名描述 + WORD wTrapHostPort; // trap主机端口 BYTE byRes2[2]; - NET_DVR_SNMPv3_USER struRWUser; // дû - NET_DVR_SNMPv3_USER struROUser; // ֻû + NET_DVR_SNMPv3_USER struRWUser; // 读写用户 + NET_DVR_SNMPv3_USER struROUser; // 只读用户 BYTE byTrapName[NAME_LEN]; }NET_DVR_SNMPCFG_V30, *LPNET_DVR_SNMPCFG_V30; -#define PROCESSING 0 //ڴ -#define PROCESS_SUCCESS 100 // -#define PROCESS_EXCEPTION 400 //쳣 -#define PROCESS_FAILED 500 //ʧ -#define PROCESS_QUICK_SETUP_PD_COUNT 501 //һ3Ӳ +#define PROCESSING 0 //正在处理 +#define PROCESS_SUCCESS 100 //过程完成 +#define PROCESS_EXCEPTION 400 //过程异常 +#define PROCESS_FAILED 500 //过程失败 +#define PROCESS_QUICK_SETUP_PD_COUNT 501 //一键配置至少3块硬盘 #define SOFTWARE_VERSION_LEN 48 -#define NET_SDK_DEVICE_MODEL_LEN 24 //豸ͺų +#define NET_SDK_DEVICE_MODEL_LEN 24 //设备型号长度 typedef struct tagNET_DVR_SADPINFO { - NET_DVR_IPADDR struIP; // 豸IPַ - WORD wPort; // 豸˿ں - WORD wFactoryType; // 豸 + NET_DVR_IPADDR struIP; // 设备IP地址 + WORD wPort; // 设备端口号 + WORD wFactoryType; // 设备厂家类型 char chSoftwareVersion[SOFTWARE_VERSION_LEN]; - char chSerialNo[16]; // к - WORD wEncCnt; // ͨ - BYTE byMACAddr[MACADDR_LEN]; // MAC ַ - NET_DVR_IPADDR struSubDVRIPMask; // DVR IPַ - NET_DVR_IPADDR struGatewayIpAddr; // - NET_DVR_IPADDR struDnsServer1IpAddr; /* 1IPַ */ - NET_DVR_IPADDR struDnsServer2IpAddr; /* 2IPַ */ + char chSerialNo[16]; // 序列号 + WORD wEncCnt; // 编码通道个数 + BYTE byMACAddr[MACADDR_LEN]; // MAC 地址 + NET_DVR_IPADDR struSubDVRIPMask; // DVR IP地址掩码 + NET_DVR_IPADDR struGatewayIpAddr; // 网关 + NET_DVR_IPADDR struDnsServer1IpAddr; /* 域名服务器1的IP地址 */ + NET_DVR_IPADDR struDnsServer2IpAddr; /* 域名服务器2的IP地址 */ BYTE byDns; BYTE byDhcp; - BYTE szGB28181DevID[DEV_ID_LEN]; //GB28181Эʱ豸IDIPCGB28181Э - BYTE byActivated;//0-Ч1-Ѽ2-δ - BYTE byDeviceModel[NET_SDK_DEVICE_MODEL_LEN/*24*/];//豸ͺ - BYTE byRes[101]; // ֽ + BYTE szGB28181DevID[DEV_ID_LEN]; //GB28181协议接入时的设备ID,用于IPC以GB28181协议接入 + BYTE byActivated;//0-无效,1-已激活,2-未激活 + BYTE byDeviceModel[NET_SDK_DEVICE_MODEL_LEN/*24*/];//设备型号 + BYTE byRes[101]; // 保留字节 }NET_DVR_SADPINFO, *LPNET_DVR_SADPINFO; -#define MAX_SADP_NUM 256 // 豸Ŀ +#define MAX_SADP_NUM 256 // 搜索到设备最大数目 typedef struct tagNET_DVR_SADPINFO_LIST { - DWORD dwSize; // ṹС - WORD wSadpNum; // 豸Ŀ - BYTE byRes[6]; // ֽ - NET_DVR_SADPINFO struSadpInfo[MAX_SADP_NUM]; // + DWORD dwSize; // 结构大小 + WORD wSadpNum; // 搜索到设备数目 + BYTE byRes[6]; // 保留字节 + NET_DVR_SADPINFO struSadpInfo[MAX_SADP_NUM]; // 搜索 }NET_DVR_SADPINFO_LIST, *LPNET_DVR_SADPINFO_LIST; typedef struct tagNET_DVR_SADP_VERIFY @@ -22477,113 +22477,113 @@ typedef struct tagNET_DVR_SADP_VERIFY BYTE byRes[62]; }NET_DVR_SADP_VERIFY, *LPNET_DVR_SADP_VERIFY; -/*******************************ݽӿ begin********************************/ -//ȡ豸Ϣӿڶ -#define DESC_LEN_32 32 //ֳ -#define MAX_NODE_NUM 256 //ڵ +/*******************************备份接口 begin********************************/ +//获取备份设备信息接口定义 +#define DESC_LEN_32 32 //描述字长度 +#define MAX_NODE_NUM 256 //节点个数 typedef struct tagNET_DVR_DESC_NODE { int iValue; - BYTE byDescribe[DESC_LEN_32]; //ֶ - DWORD dwFreeSpace; //ȡбר,λΪM - BYTE byRes[12]; // + BYTE byDescribe[DESC_LEN_32]; //描述字段 + DWORD dwFreeSpace; //获取磁盘列表专用,单位为M + BYTE byRes[12]; //保留 }NET_DVR_DESC_NODE, *LPNET_DVR_DESC_NODE; typedef struct tagNET_DVR_DISKABILITY_LIST { - DWORD dwSize; //ṹ - DWORD dwNodeNum; // - NET_DVR_DESC_NODE struDescNode[MAX_NODE_NUM]; // + DWORD dwSize; //结构长度 + DWORD dwNodeNum; //能力结点个数 + NET_DVR_DESC_NODE struDescNode[MAX_NODE_NUM]; //描述参数 }NET_DVR_DISKABILITY_LIST, *LPNET_DVR_DISKABILITY_LIST; -//ݽб -#define BACKUP_SUCCESS 100 // -#define BACKUP_CHANGE_DEVICE 101 //豸豸 +//备份进度列表 +#define BACKUP_SUCCESS 100 //备份完成 +#define BACKUP_CHANGE_DEVICE 101 //备份设备已满,更换设备继续备份 -#define BACKUP_SEARCH_DEVICE 300 //豸 -#define BACKUP_SEARCH_FILE 301 //¼ļ -#define BACKUP_SEARCH_LOG_FILE 302 //־ļ -#define BACKUP_CHANGE_DISK 303 //ڸ +#define BACKUP_SEARCH_DEVICE 300 //正在搜索备份设备 +#define BACKUP_SEARCH_FILE 301 //正在搜索录像文件 +#define BACKUP_SEARCH_LOG_FILE 302 //正在搜索日志文件 +#define BACKUP_CHANGE_DISK 303 //正在更换光盘 -#define BACKUP_EXCEPTION 400 //쳣 -#define BACKUP_FAIL 500 //ʧ +#define BACKUP_EXCEPTION 400 //备份异常 +#define BACKUP_FAIL 500 //备份失败 -#define BACKUP_TIME_SEG_NO_FILE 501 //ʱ¼ļ -#define BACKUP_NO_RESOURCE 502 //벻Դ -#define BACKUP_DEVICE_LOW_SPACE 503 //豸 -#define BACKUP_DISK_FINALIZED 504 //¼̷ -#define BACKUP_DISK_EXCEPTION 505 //¼쳣 -#define BACKUP_DEVICE_NOT_EXIST 506 //豸 -#define BACKUP_OTHER_BACKUP_WORK 507 //ݲڽ -#define BACKUP_USER_NO_RIGHT 508 //ûûвȨ -#define BACKUP_OPERATE_FAIL 509 //ʧ -#define BACKUP_NO_LOG_FILE 510 //Ӳ־ +#define BACKUP_TIME_SEG_NO_FILE 501 //时间段内无录像文件 +#define BACKUP_NO_RESOURCE 502 //申请不到资源 +#define BACKUP_DEVICE_LOW_SPACE 503 //备份设备容量不足 +#define BACKUP_DISK_FINALIZED 504 //刻录光盘封盘 +#define BACKUP_DISK_EXCEPTION 505 //刻录光盘异常 +#define BACKUP_DEVICE_NOT_EXIST 506 //备份设备不存在 +#define BACKUP_OTHER_BACKUP_WORK 507 //有其他备份操作在进行 +#define BACKUP_USER_NO_RIGHT 508 //用户没有操作权限 +#define BACKUP_OPERATE_FAIL 509 //操作失败 +#define BACKUP_NO_LOG_FILE 510 //硬盘中无日志 -//ݹ̽ӿڶ +//备份过程接口定义 typedef struct tagNET_DVR_BACKUP_NAME_PARAM { - DWORD dwFileNum; //ļ - NET_DVR_FINDDATA_V30 struFileList[MAX_RECORD_FILE_NUM]; //ļб - BYTE byDiskDes[DESC_LEN_32]; //ݴ - BYTE byWithPlayer; //Ƿ񱸷ݲ - BYTE byContinue; /*Ƿ 0 1*/ - BYTE byRes[34]; // + DWORD dwFileNum; //文件个数 + NET_DVR_FINDDATA_V30 struFileList[MAX_RECORD_FILE_NUM]; //文件列表 + BYTE byDiskDes[DESC_LEN_32]; //备份磁盘描述 + BYTE byWithPlayer; //是否备份播放器 + BYTE byContinue; /*是否继续备份 0不继续 1继续*/ + BYTE byRes[34]; //保留 }NET_DVR_BACKUP_NAME_PARAM, *LPNET_DVR_BACKUP_NAME_PARAM; typedef struct tagNET_DVR_BACKUP_TIME_PARAM { - LONG lChannel; //ʱ䱸ݵͨ - NET_DVR_TIME struStartTime; //ݵʼʱ - NET_DVR_TIME struStopTime; //ݵֹʱ - BYTE byDiskDes[DESC_LEN_32]; //ݴ - BYTE byWithPlayer; //Ƿ񱸷ݲ - BYTE byContinue; //Ƿ 0 1 - BYTE byDrawFrame; //0 ֡ 1 ֡ - BYTE byUseBackCfgParam; //ʹñеIJ0-Ч1-(úͨЧ)2- - DWORD dwStreamType; //ͣλʾ - //&0x1-ʾ - //&0x2-ʾ - //&0x4-ʾ - BYTE byRes[28]; // ֽ + LONG lChannel; //按时间备份的通道 + NET_DVR_TIME struStartTime; //备份的起始时间 + NET_DVR_TIME struStopTime; //备份的终止时间 + BYTE byDiskDes[DESC_LEN_32]; //备份磁盘描述 + BYTE byWithPlayer; //是否备份播放器 + BYTE byContinue; //是否继续备份 0不继续 1继续 + BYTE byDrawFrame; //0 不抽帧 1 抽帧 + BYTE byUseBackCfgParam; //使用备份配置中的参数,0-无效,1-启用(启用后,通道号无效),2-不启用 + DWORD dwStreamType; //备份码流类型,按位表示 + //&0x1-表示主码流 + //&0x2-表示子码流 + //&0x4-表示码流三 + BYTE byRes[28]; // 保留字节 }NET_DVR_BACKUP_TIME_PARAM, *LPNET_DVR_BACKUP_TIME_PARAM; /********************************* end *******************************************/ typedef enum _COMPRESSION_ABILITY_TYPE_ { - COMPRESSION_STREAM_ABILITY = 0, //ѹ - MAIN_RESOLUTION_ABILITY = 1, //ѹֱ - SUB_RESOLUTION_ABILITY = 2, //ѹֱ - EVENT_RESOLUTION_ABILITY = 3, //¼ѹֱ - FRAME_ABILITY = 4, //֡ - BITRATE_TYPE_ABILITY = 5, //λ - BITRATE_ABILITY = 6, //λ - THIRD_RESOLUTION_ABILITY = 7, //ѹֱ - STREAM_TYPE_ABILITY = 8, // - PIC_QUALITY_ABILITY = 9, //ͼ - INTERVAL_BPFRAME_ABILITY = 10, //BP֡ - VIDEO_ENC_ABILITY = 11, //Ƶ - AUDIO_ENC_ABILITY = 12, //Ƶ - VIDEO_ENC_COMPLEXITY_ABILITY = 13, //Ƶ븴Ӷ - FORMAT_ABILITY = 14, //װʽ + COMPRESSION_STREAM_ABILITY = 0, //码流压缩类型 + MAIN_RESOLUTION_ABILITY = 1, //主码流压缩分辨率 + SUB_RESOLUTION_ABILITY = 2, //子码流压缩分辨率 + EVENT_RESOLUTION_ABILITY = 3, //事件压缩参数分辨率 + FRAME_ABILITY = 4, //帧率能力 + BITRATE_TYPE_ABILITY = 5, //位率类型能力 + BITRATE_ABILITY = 6, //位率上限 + THIRD_RESOLUTION_ABILITY = 7, //三码流压缩分辨率 + STREAM_TYPE_ABILITY = 8, //码流类型 + PIC_QUALITY_ABILITY = 9, //图像质量 + INTERVAL_BPFRAME_ABILITY = 10, //BP帧间隔 + VIDEO_ENC_ABILITY = 11, //视频编码能力 + AUDIO_ENC_ABILITY = 12, //音频编码能力 + VIDEO_ENC_COMPLEXITY_ABILITY = 13, //视频编码复杂度能力 + FORMAT_ABILITY = 14, //封装格式能力 }COMPRESSION_ABILITY_TYPE; -//б +//能力列表 typedef struct tagNET_DVR_ABILITY_LIST { - DWORD dwAbilityType; // COMPRESSION_ABILITY_TYPE - BYTE byRes[32]; //ֽ - DWORD dwNodeNum; // - NET_DVR_DESC_NODE struDescNode[MAX_NODE_NUM]; // + DWORD dwAbilityType; //能力类型 COMPRESSION_ABILITY_TYPE + BYTE byRes[32]; //保留字节 + DWORD dwNodeNum; //能力结点个数 + NET_DVR_DESC_NODE struDescNode[MAX_NODE_NUM]; //描述参数 }NET_DVR_ABILITY_LIST, *LPNET_DVR_ABILITY_LIST; -#define MAX_ABILITYTYPE_NUM 12 // -// ѹб +#define MAX_ABILITYTYPE_NUM 12 //最大能力项 +// 压缩参数能力列表 typedef struct tagNET_DVR_COMPRESSIONCFG_ABILITY { - DWORD dwSize; //ṹ - DWORD dwAbilityNum; //͸ - NET_DVR_ABILITY_LIST struAbilityNode[MAX_ABILITYTYPE_NUM]; // + DWORD dwSize; //结构长度 + DWORD dwAbilityNum; //能力类型个数 + NET_DVR_ABILITY_LIST struAbilityNode[MAX_ABILITYTYPE_NUM]; //描述参数 }NET_DVR_COMPRESSIONCFG_ABILITY, *LPNET_DVR_COMPRESSIONCFG_ABILITY; /********************************9000RH begin****************************************/ #define SUPPORT_PD_NUM 16 @@ -22615,7 +22615,7 @@ typedef enum tagHD_SUPPORT_TYPE HD_TYPE_SES = 0x20 }HD_SUPPORT_TYPE; -// λʾ λΪ0ʾ֧ 1ʾ֧ +// 按位表示 位为0表示不支持 1表示支持 typedef enum tagSUPPORT_RAID_TYPE { RAID0_ABILITY = 0x0001, @@ -22629,19 +22629,19 @@ typedef enum tagSUPPORT_RAID_TYPE RAID60_ABILITY = 0x0100 }SUPPORT_RAID_TYPE; -// +// 物理磁盘 typedef struct tagNET_DVR_PHY_DISK_INFO { - WORD wPhySlot; // Ӳ̲λ - BYTE byType; // ӲϢ0 ͨ1ȫȱ2-ȱ 3- - BYTE byStatus; // Ӳ״̬ 0- 1- 2-ɾ 3-̶ʧ 4- 5- 6- 7-쳣 8-SMART״̬쳣 9- 10-л,11-SMRӲ̲֧й,0xff- - BYTE byMode[40]; // Ӳ ַ - DWORD dwHCapacity; // 32λ λkb - DWORD dwLCapacity; // 32λ + WORD wPhySlot; // 硬盘槽位 + BYTE byType; // 硬盘信息;0 普通,1全局热备,2-阵列热备 3-阵列盘 + BYTE byStatus; // 硬盘状态; 0-正常 1-降级 2-已删除 3-磁盘丢失 4-下线 5-次正常 6-外来 7-异常 8-SMART状态异常 9-休眠 10-有坏块,11-SMR硬盘不支持阵列功能,0xff-不存在 + BYTE byMode[40]; // 硬盘类型 字符串 + DWORD dwHCapacity; // 磁盘总量高32位 单位kb + DWORD dwLCapacity; // 磁盘总量低32位 BYTE byArrrayName[MAX_NAMELEN]; - WORD wArrayID; // ID - BYTE byArrayInformation; // ǷϢ0 1 - BYTE byRes[101]; // ֽ + WORD wArrayID; // 所属阵列ID + BYTE byArrayInformation; // 是否含有阵列信息:0 否,1是 + BYTE byRes[101]; // 保留字节 }NET_DVR_PHY_DISK_INFO, *LPNET_DVR_PHY_DISK_INFO; typedef struct tagNET_DVR_PHY_DISK_LIST @@ -22653,88 +22653,88 @@ typedef struct tagNET_DVR_PHY_DISK_LIST typedef enum tagBGA_TYPE { - BGA_REBUILD = 0x01, // ؽ - BGA_CONSISTENCY_FIX = 0x02, // һԼ鲢޸ - BGA_CONSISTENCY_CHECK = 0x04, // һԼ - BGA_INIT_QUICK = 0x08, // ʼ() - BGA_INIT_BACK = 0x10, // ʼ(ȫ) - BGA_MIGRATION = 0x20, // Ǩ - BGA_INIT_FORE = 0x40, // ʼ - BGA_COPYBACK = 0x80 // Ǩ + BGA_REBUILD = 0x01, // 重建 + BGA_CONSISTENCY_FIX = 0x02, // 一致性检查并修复 + BGA_CONSISTENCY_CHECK = 0x04, // 一致性检查 + BGA_INIT_QUICK = 0x08, // 初始化(快) + BGA_INIT_BACK = 0x10, // 初始化(完全) + BGA_MIGRATION = 0x20, // 迁移 + BGA_INIT_FORE = 0x40, // 初始化 + BGA_COPYBACK = 0x80 // 回迁 }BGA_TYPE; typedef enum tagBGA_STATE { - BGA_STATE_NONE = 0, // ޺̨ - BGA_STATE_RUNNING, // ̨ - BGA_STATE_ABORTED, // ̨ȡ - BGA_STATE_PAUSED // ̨ͣ + BGA_STATE_NONE = 0, // 无后台任务 + BGA_STATE_RUNNING, // 后台任务正在运行 + BGA_STATE_ABORTED, // 后台任务取消 + BGA_STATE_PAUSED // 后台任务暂停 }BGA_STATE; typedef struct tagNET_DVR_BGA_INFO { - BYTE byBga; // ̨ - BYTE byBgaState; /*ֵ--̨״̬*/ - WORD wBgaPercentage; /*ֵ--ִ̨аٷֱ*/ - BYTE byRes[4]; // ֽ + BYTE byBga; // 后台任务及类型 + BYTE byBgaState; /*函数返回值--后台任务状态*/ + WORD wBgaPercentage; /*函数返回值--后台任务执行百分比*/ + BYTE byRes[4]; // 保留字节 }NET_DVR_BGA_INFO, *LPNET_DVR_BGA_INFO; -// Ϣ +// 阵列信息 typedef struct tagNET_DVR_ARRAY_INFO { - WORD wArrayID; // ID - BYTE byRaidMode; // raidģʽ RAID_MODE - BYTE byStatus; // 0- 1-̶ʧ 2- 3- 4-쳣 5- 6- 7-ɾ 8-SMART״̬쳣 0xff- - DWORD dwHCapacity; // 32λ - DWORD dwLCapacity; // 32λ - DWORD dwHFreeSpace; // ʣռ32λ - DWORD dwLFreeSpace; // ʣռ32λ - BYTE byArrayName[MAX_NAMELEN]; // - BYTE byPDCount; // Ŀ - BYTE bySpareCount; // ȱĿ + WORD wArrayID; // 阵列ID + BYTE byRaidMode; // raid模式 参照RAID_MODE + BYTE byStatus; // 0-在线 1-磁盘丢失 2-下线 3-降级 4-异常 5-次正常 6-外来盘 7-已删除 8-SMART状态异常 0xff-不存在 + DWORD dwHCapacity; // 阵列容量高32位 + DWORD dwLCapacity; // 阵列容量低32位 + DWORD dwHFreeSpace; // 阵列剩余空间高32位 + DWORD dwLFreeSpace; // 阵列剩余空间高32位 + BYTE byArrayName[MAX_NAMELEN]; // 阵列名称 + BYTE byPDCount; // 物理磁盘数目 + BYTE bySpareCount; // 热备数目 BYTE byRes1[2]; - WORD wPDSlots[SUPPORT_PD_NUM]; // - WORD wSparePDSlots[SUPPORT_PD_NUM]; // ȱ - NET_DVR_BGA_INFO struBgaInfo; // ̨״̬ - WORD wPDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; //չ0ʾЧ - WORD wSparePDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; // ȱչ0ʾЧ - BYTE byRes2[48]; // ֽ + WORD wPDSlots[SUPPORT_PD_NUM]; // 物理磁盘索引 + WORD wSparePDSlots[SUPPORT_PD_NUM]; // 热备磁盘索引 + NET_DVR_BGA_INFO struBgaInfo; // 后台任务运行状态 + WORD wPDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; //物理磁盘索引扩展,0表示无效 + WORD wSparePDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; // 热备磁盘索引扩展,0表示无效 + BYTE byRes2[48]; // 保留字节 }NET_DVR_ARRAY_INFO, *LPNET_DVR_ARRAY_INFO; typedef struct tagNET_DVR_ARRAY_LIST { - DWORD dwSize; // ṹС - DWORD dwCount; // и + DWORD dwSize; // 结构体大小 + DWORD dwCount; // 阵列个数 NET_DVR_ARRAY_INFO struArrayInfo[SUPPORT_ARRAY_NUM]; }NET_DVR_ARRAY_LIST, *LPNET_DVR_ARRAY_LIST; -//Ϣ +//虚拟磁盘信息 typedef struct tagNET_DVR_VD_INFO { - WORD wSlot; //̲λ - BYTE byStatus; // ״̬0- 1- 2-ɾ 3-̶ʧ 4- 5- 6- 7-쳣 8-SMART״̬쳣 0xff- - BYTE byRaidMode; // Raid ģʽ RAID_MODE - WORD wArrayID; // ID - BYTE byRepair; // ǷҪ޸ 0 Ҫ 1Ҫ - BYTE byUsage; //LUNʹ÷ʽ 0-IPSAN 1-FCSAN 2-DVR 3-NAS 4-¼ + WORD wSlot; //虚拟磁盘槽位 + BYTE byStatus; // 状态0-正常 1-降级 2-已删除 3-磁盘丢失 4-下线 5-次正常 6-外来 7-异常 8-SMART状态异常 0xff-不存在 + BYTE byRaidMode; // Raid 模式 参照 RAID_MODE + WORD wArrayID; // 所属阵列ID + BYTE byRepair; // 是否需要修复 0 不需要 1需要 + BYTE byUsage; //LUN卷的使用方式 0-IPSAN 1-FCSAN 2-DVR网盘 3-NAS 4-录像卷 BYTE byArrayName[MAX_NAMELEN]; - BYTE byName[MAX_NAMELEN]; // - DWORD dwHCapacity; // 32λ - DWORD dwLCapacity; // 32λ - DWORD dwHFreeSpace; // ʣռ32λ - DWORD dwLFreeSpace; // ʣռ32λ - NET_DVR_BGA_INFO struBgaInfo; // ̨״̬ - DWORD dwBlockSize; //С洢ԪС - NET_DVR_IPADDR struWarrantIP; // ȨDVRIP - char szArrayGroup[NAME_LEN]; //ʹõ飬ԶŸΪʹĬ + BYTE byName[MAX_NAMELEN]; // 虚拟磁盘名名称 + DWORD dwHCapacity; // 虚拟磁盘容量高32位 + DWORD dwLCapacity; // 虚拟磁盘容量低32位 + DWORD dwHFreeSpace; // 虚拟磁盘剩余空间高32位 + DWORD dwLFreeSpace; // 虚拟磁盘剩余空间低32位 + NET_DVR_BGA_INFO struBgaInfo; // 后台运行状态 + DWORD dwBlockSize; //最小存储单元块大小 + NET_DVR_IPADDR struWarrantIP; // 授权的DVR网盘IP + char szArrayGroup[NAME_LEN]; //使用的阵列名称组,以逗号隔开,为空则使用默认阵列 BYTE byRes[20]; }NET_DVR_VD_INFO, *LPNET_DVR_VD_INFO; typedef struct tagNET_DVR_VD_LIST { - DWORD dwSize; // ṹС - DWORD dwCount; // ̸ - NET_DVR_VD_INFO struVDInfo[SUPPORT_VD_NUM]; // + DWORD dwSize; // 结构体大小 + DWORD dwCount; // 虚拟磁盘个数 + NET_DVR_VD_INFO struVDInfo[SUPPORT_VD_NUM]; //虚拟磁盘数组 }NET_DVR_VD_LIST, *LPNET_DVR_VD_LIST; typedef struct tagNET_DVR_ADAPTER_VERSION @@ -22748,96 +22748,96 @@ typedef struct tagNET_DVR_ADAPTER_VERSION typedef struct tagNET_DVR_VD_SLOT { WORD wVDSlot; - BYTE byAlloc; // ǷѾ + BYTE byAlloc; // 是否已经分配 BYTE byRes[5]; - DWORD dwHVDSlotSize; // ̿ռС32λ - DWORD dwLVDSlotSize; // ̿ռС32λ + DWORD dwHVDSlotSize; // 虚拟磁盘空间大小高32位 + DWORD dwLVDSlotSize; // 虚拟磁盘空间大小低32位 }NET_DVR_VD_SLOT, *LPNET_DVR_VD_SLOT; typedef struct tagNET_DVR_ARRAY_SPACE_ALLOC_INFO { BYTE byVDSlotCount; /*current number of slots in DG*/ - BYTE byRes1[3]; // ֽ + BYTE byRes1[3]; // 保留字节 NET_DVR_VD_SLOT struVDSlots[SUPPORT_VD_NUM]; }NET_DVR_ARRAY_SPACE_ALLOC_INFO, *LPNET_DVR_ARRAY_SPACE_ALLOC_INFO; typedef struct tagNET_DVR_RAID_ADAPTER_INFO { - DWORD dwSize; // ṹС - NET_DVR_ADAPTER_VERSION struVersion; // 汾 - BYTE bySlotCount; //λ - BYTE bySupportMigrate; // Ǩ(1-֧ 0-֧) - BYTE bySupportExpand; // (1-֧ 0-֧) - BYTE bySupportRebuild; // Ƿ֧ؽ (1֧ 0-֧) - WORD wSlotSupportType; // λʾ HD_SUPPORT_TYPE - WORD wSupportRaidType; // ֧Raid λʾ - BYTE byAutoRebuild; // 0 Զؽ 1Զؽ - BYTE byRes[27]; // ֽ + DWORD dwSize; // 结构体大小 + NET_DVR_ADAPTER_VERSION struVersion; // 适配器版本号 + BYTE bySlotCount; //适配器槽位数 + BYTE bySupportMigrate; // 迁移(1-支持 0-不支持) + BYTE bySupportExpand; // 扩容 (1-支持 0-不支持) + BYTE bySupportRebuild; // 是否支持重建阵列 (1、支持 0-不支持) + WORD wSlotSupportType; // 按位表示 HD_SUPPORT_TYPE + WORD wSupportRaidType; // 支持Raid 类型 按位表示 + BYTE byAutoRebuild; // 0 不自动重建 1自动重建 可设 + BYTE byRes[27]; // 保留字节 }NET_DVR_RAID_ADAPTER_INFO, *LPNET_DVR_RAID_ADAPTER_INFO; typedef struct tagNET_DVR_OPERATE_ARRAY_PARAM { - //Ƿһ Ϊһ򴴽ʱʱ֮ҪarrayƣҪ - // 豸д - BYTE byRaidMode; // /ǨʱRaid - BYTE byPDCount; // Ŀ - WORD wArrayID; // ǨƻؽʱҪָID - WORD wPDSlots[SUPPORT_PD_NUM];// - BYTE byName[MAX_NAMELEN]; // array - BYTE byInitMode; //ʼʽ + //是否一键创建 如果为一键创建,则创建时时候的之需要array名称,而不需要其他参数 + // 其他参数有设备自行创建 + BYTE byRaidMode; // 创建/迁移时Raid的类型 + BYTE byPDCount; // 物理磁盘数目 + WORD wArrayID; // 迁移或者重建时需要指出阵列ID + WORD wPDSlots[SUPPORT_PD_NUM];// 物理磁盘 + BYTE byName[MAX_NAMELEN]; // array 名称 + BYTE byInitMode; //初始化方式 BYTE byRes1; - WORD wPDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; //Ϣ + WORD wPDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; //物理磁盘信息 BYTE byRes2[2]; }NET_DVR_OPERATE_ARRAY_PARAM, *LPNET_DVR_OPERATE_ARRAY_PARAM; -#define INIT_QUICK 0 /*ٳʼ*/ -#define INIT_FULLFOREGROUND 1 /*ȫʼ(ǰ̨)*/ -#define INIT_FULLBACKGROUND 2 /*ȫʼ(̨)*/ +#define INIT_QUICK 0 /*快速初始化*/ +#define INIT_FULLFOREGROUND 1 /*完全初始化(前台)*/ +#define INIT_FULLBACKGROUND 2 /*完全初始化(后台)*/ typedef struct tagNET_DVR_OPERATE_VD_PARAM { - WORD wArrayID; // ID - BYTE bySlot; // ָλ - BYTE byInitType; // ʱʼ 0 - ٳʼ 1 - ǰ̨ȫʼ 2 - ̨ȫʼ - DWORD dwHCapacity; // ̴С32λ - DWORD dwLCapacity; // ̴С32λ - BYTE byName[MAX_NAMELEN]; // - BYTE byRes2[16]; // ֽ + WORD wArrayID; // 阵列ID + BYTE bySlot; // 创建虚拟磁盘指定槽位 + BYTE byInitType; // 创建虚拟磁盘时初始化类型 0 - 快速初始化 1 - 前台完全初始化 2 - 后台完全初始化 + DWORD dwHCapacity; // 虚拟磁盘大小高32位 + DWORD dwLCapacity; // 虚拟磁盘大小低32位 + BYTE byName[MAX_NAMELEN]; // 虚拟磁盘名称 + BYTE byRes2[16]; // 保留字节 }NET_DVR_OPERATE_VD_PARAM, *LPNET_DVR_OPERATE_VD_PARAM; typedef struct tagNET_DVR_SPARE_DISK_PARAM { - WORD wPDSlot; // ̲λ - WORD wArrayID; // - BYTE bySpareType; // ȱ 1-ȫȱ 2 ָ ΪָеʱҪָеID - BYTE byRes[7]; // ֽ + WORD wPDSlot; // 物理磁盘槽位 + WORD wArrayID; // 所属的阵列 + BYTE bySpareType; // 热备类型 1-全局热备 2 指定阵列 当为指定阵列的时候需要指出所属阵列的ID + BYTE byRes[7]; // 保留字节 }NET_DVR_SPARE_DISK_PARAM, *LPNET_DVR_SPARE_DISK_PARAM; /********************************9000RH End****************************************/ -#define MATRIX_MAXDECSUBSYSTEMCHAN 4//Ƶۺƽ̨ϵͳͨ +#define MATRIX_MAXDECSUBSYSTEMCHAN 4//视频综合平台解码子系统通道号 -//ȡϵͳϢ +//获取解码子系统关联信息 typedef struct tagNET_DVR_DECSUBSYSTEMJIONSTATUS { - BYTE byJoinStatus;//״̬0-ûй1-Ѿ - BYTE byJoinSubSystem;//ϵͳλ - BYTE byJoinDispNum;//ʾͨ - BYTE byJoinSubWindowNum;//Ӵں + BYTE byJoinStatus;//关联状态,0-没有关联,1-已经关联 + BYTE byJoinSubSystem;//所关联子系统槽位号 + BYTE byJoinDispNum;//所关联显示通道号 + BYTE byJoinSubWindowNum;//所关联子窗口号 BYTE byRes[4]; }NET_DVR_DECSUBSYSTEMJIONSTATUS,LPNET_DVR_DECSUBSYSTEMJIONSTATUS; typedef struct tagNET_DVR_SINGLESUBSYSTEMJOININFO { - BYTE bySubSystemType;//ϵͳͣ0-ޣ1-ϵͳ2-ϵͳ3-ϵͳ4-ϵͳ,5-ϵͳ6-ϵͳ - BYTE byConnectStatus;//ϵͳ״̬1-2-ӶϿ - BYTE byMatrixNum;//Ƶۺƽ̨ţϵͳ34ʱ - BYTE bySubSystemNum;//ϵͳλţ0~79ϵͳ34ʱ + BYTE bySubSystemType;//子系统类型,0-无,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分子系统,6-报警子系统 + BYTE byConnectStatus;//级联系统关联状态,1-连接正常,2-连接断开 + BYTE byMatrixNum;//级联视频综合平台号,子系统类型是3或4时可用 + BYTE bySubSystemNum;//级联子系统槽位号,0~79,子系统类型是3或4时可用 NET_DVR_DECSUBSYSTEMJIONSTATUS struDecSub [MATRIX_MAXDECSUBSYSTEMCHAN]; - BYTE byBindStatus;//״̬0-ûа󶨣1-Ѿ󶨣ƴʱõ + BYTE byBindStatus;//绑定状态,0-没有绑定,1-已经绑定(大屏拼接时用到) BYTE byRes[7]; }NET_DVR_SINGLESUBSYSTEMJOININFO,LPNET_DVR_SINGLESUBSYSTEMJOININFO; @@ -22848,34 +22848,34 @@ typedef struct tagNET_DVR_ALLDECSUBSYSTEMJOININFO BYTE byRes[8]; }NET_DVR_ALLDECSUBSYSTEMJOININFO, *LPNET_DVR_ALLDECSUBSYSTEMJOININFO; -//2010-04-13 NAT +//2010-04-13 增加NAT功能相关配置 typedef struct tagNET_DVR_NATASSOCIATECFG { DWORD dwSize; - NET_DVR_NETCFG_V30 struNatIpAddress[2];//NAT IPַ - BYTE byNATEnable;//ǷNATܣ0-ã0- - BYTE byNATCfgMode; //NATģʽ0-ֶ䣬1-Զ + NET_DVR_NETCFG_V30 struNatIpAddress[2];//NAT IP地址 + BYTE byNATEnable;//是否启用NAT功能,0-不启用,非0-启用 + BYTE byNATCfgMode; //NAT配置模式,0-手动分配,1-自动分配 BYTE byRes[62]; }NET_DVR_NATASSOCIATECFG, *LPNET_DVR_NATASSOCIATECFG; -//2010-06-01 Ƶۺƽ̨ +//2010-06-01 视频综合平台报警配置 typedef struct tagNET_DVR_TEMPERATUREALARMCFG { - BYTE byEnableTemperatureAlarm;//ʹ¶ȳޱ0-1- + BYTE byEnableTemperatureAlarm;//使能温度超限报警,0-报警,1-不报警 BYTE byRes1[3]; - int iTemperatureUpLimited; //ȷСλ1234ʾ¶12.34 + int iTemperatureUpLimited; //精确到小数点后两位,如1234表示温度12.34度 int iTemperatureDownLimited; - NET_DVR_HANDLEEXCEPTION_V30 struTempHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ*/ + NET_DVR_HANDLEEXCEPTION_V30 struTempHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ BYTE byRes2[32]; }NET_DVR_TEMPERATUREALARMCFG, *LPNET_DVR_TEMPERATUREALARMCFG; typedef struct tagNET_DVR_BOARDALARMCFG { - BYTE byEnablePullAlarm;//Ȳαʹܣ1-0- + BYTE byEnablePullAlarm;//热插拔报警使能,1-报警,0-不报警 BYTE byRes1[3]; - NET_DVR_HANDLEEXCEPTION_V30 struBoardHandleType; /* ʽ */ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ*/ + NET_DVR_HANDLEEXCEPTION_V30 struBoardHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ BYTE byRes2[32]; }NET_DVR_BOARDALARMCFG, *LPNET_DVR_BOARDALARMCFG; @@ -22885,240 +22885,240 @@ typedef struct tagNET_DVR_VIDEOPLATFORMALARMCFG DWORD dwSize; NET_DVR_TEMPERATUREALARMCFG struTempAlarmCfg; NET_DVR_BOARDALARMCFG struBoardAlarmCfg; - NET_DVR_HANDLEEXCEPTION_V30 struHandleException[MAX_EXCEPTIONNUM];//0-쳣1-ϵͳ쳣2-IPַͻ3-߶ϣ4-Ƿʣ5-쳣6-ǰ쳣 + NET_DVR_HANDLEEXCEPTION_V30 struHandleException[MAX_EXCEPTIONNUM];//0-风扇异常,1-子系统异常,2-IP地址冲突,3-网线断,4-非法访问,5-光纤异常,6-前面板异常 BYTE byRes[32]; }NET_DVR_VIDEOPLATFORMALARMCFG,*LPNET_DVR_VIDEOPLATFORMALARMCFG; //2010-05-17 typedef struct tagNET_DVR_CODESPLITTERASSOCIATE { DWORD dwSize; - NET_DVR_IPADDR struIP; /*IPַ*/ - WORD wPort; //˿ں + NET_DVR_IPADDR struIP; /*编码器IP地址*/ + WORD wPort; //编码器端口号 BYTE byRes1[6]; - BYTE sUserName[NAME_LEN]; /* û32 */ - BYTE sPassword[PASSWD_LEN]; /* 16*/ - BYTE byChan;//ͨ + BYTE sUserName[NAME_LEN]; /* 用户名(32) */ + BYTE sPassword[PASSWD_LEN]; /*密码 (16)*/ + BYTE byChan;//编码器通道号 BYTE byRes2[15]; } NET_DVR_CODESPLITTERASSOCIATE, *LPNET_DVR_CODESPLITTERASSOCIATE; -//2010-06-01 Ƶۺƽ̨ϴṹ +//2010-06-01 视频综合平台报警上传结构 typedef struct tagNET_DVR_MATRIXSUBSYSTEMINFO { - BYTE byMatrixNum;//Ƶۺƽ̨ - BYTE bySubSystemNum;//ϵͳλ + BYTE byMatrixNum;//视频综合平台号 + BYTE bySubSystemNum;//子系统槽位号 BYTE byRes [14]; } NET_DVR_MATRIXSUBSYSTEMINFO, *LPNET_DVR_MATRIXSUBSYSTEMINFO; typedef struct tagNET_DVR_VIDEOPLATFORM_ALRAMINFO { - DWORD dwSize; //ṹС - BYTE byAlarmType; // 0-γӰ壬1-Ӱ,2-¶ȳޱ3-¶ȳޱ4-״̬쳣5-ϵͳ쳣,6-Ƿʣ7-쳣,8-ǰ쳣 - BYTE byBoardNum; //Ӱţ1B10ֶָ֧ΣЧΪ0xff + DWORD dwSize; //结构体大小 + BYTE byAlarmType; // 0-拔出子板,1-插入子板,2-温度超上限报警,3-温度超下限报警,4-风扇状态异常,5-子系统异常,6-非法访问,7-光纤异常报警,8-前面板异常报警 + BYTE byBoardNum; //子板号,从1起,B10不支持该字段,无效,置为0xff BYTE byRes1[2]; - BYTE bySubSystemChan[8]; //Ӱλ,һӰ8ϵͳֱӦIJλţϵͳ쳣ʱbySubSystemChan[0]ʾӦϵͳ - int iTemperature; //¶ȳޱʱã¶ֵ - BYTE byMainboardSeq;//¶ȳޱʱã0-壬1- + BYTE bySubSystemChan[8]; //子板槽位号,一个子板中有8个子系统,其分别对应的槽位号,子系统异常时,bySubSystemChan[0]表示对应子系统序号 + int iTemperature; //温度超限报警时有用,温度值 + BYTE byMainboardSeq;//温度超限报警时有用,0-非主板,1-主板 BYTE byRes2[3]; - BYTE byFanSequence[32];//쳣ȣbyFanSequence[i] = 1ʾi+1쳣byFanSequence[i] = 0ʾi+1 - NET_DVR_MATRIXSUBSYSTEMINFO struInputNote;// 쳣ʱʹã - NET_DVR_MATRIXSUBSYSTEMINFO struOutputNote;//쳣ʱʹã + BYTE byFanSequence[32];//异常风扇,byFanSequence[i] = 1表示风扇i+1异常,byFanSequence[i] = 0表示风扇i+1正常 + NET_DVR_MATRIXSUBSYSTEMINFO struInputNote;// 光纤异常报警时使用,输入结点 + NET_DVR_MATRIXSUBSYSTEMINFO struOutputNote;//光纤异常报警时使用,输出结点 BYTE byRes3[68]; }NET_DVR_VIDEOPLATFORM_ALRAMINFO,*LPNET_DVR_VIDEOPLATFORM_ALRAMINFO; -/***************************ѶDVR begin *****************************/ -#define MAX_INQUEST_PIP_NUM 3 //ͨʾĻлĿ -#define MAX_INQUEST_CDRW_NUM 4 //¼Ŀ -#define MAX_INQUEST_PIP_NUM_EX 16 //Ѷл +/***************************审讯DVR begin *****************************/ +#define MAX_INQUEST_PIP_NUM 3 //单通道显示的画中画数目 +#define MAX_INQUEST_CDRW_NUM 4 //最大刻录机数目 +#define MAX_INQUEST_PIP_NUM_EX 16 //审讯机画中画最大个数 typedef struct { DWORD dwSize; - DWORD dwNum; //¼ - DWORD dwRwSelectPara[MAX_CHANNUM_V30];// Ƿѡиù - DWORD dwModeSelect; //0ʾѭ¼ģʽ 1ʾп¼ģʽ(Ĭģʽ) - BYTE byRes[24]; // - DWORD dwStartCDRW; //DVR Ѿʼ¼ - DWORD dwHdExcp; //Ӳ - DWORD dwInterval; //ʱ10(0)20(1)30(2) - char sLable[64]; // + DWORD dwNum; //刻录机的数量 + DWORD dwRwSelectPara[MAX_CHANNUM_V30];// 是否选中该光驱 + DWORD dwModeSelect; //0表示循环刻录模式 1表示并行刻录模式(默认模式) + BYTE byRes[24]; //保留 + DWORD dwStartCDRW; //DVR 本地已经开始刻录 + DWORD dwHdExcp; //硬盘有异 常 + DWORD dwInterval; //时间间隔,10分钟(0)、20分钟(1)、30分钟(2) + char sLable[64]; //光盘名称 }NET_DVR_INQUEST_CDRW_CFG, *LPNET_DVR_INQUEST_CDRW_CFG; typedef struct { - char sFileName[36]; //ļ - DWORD dwFileLen; //ļ + char sFileName[36]; //文件名 + DWORD dwFileLen; //文件长度 }NET_DVR_INQUEST_FILEINFO, *LPNET_DVR_INQUEST_FILEINFO; typedef struct { - DWORD dwFileNum; // Ҫ¼ɾļһ20 + DWORD dwFileNum; // 需要刻录或者删除的文件数,最多一次20个 NET_DVR_INQUEST_FILEINFO struFileInfo[MAX_RECORD_FILE_NUM]; - //ڱʾ¼ļʱʹ - DWORD dwCDIndex; //¼1:ѡ1ſ¼2:ѡ2ſ¼ 3:3ſ¼,4:4ſ¼,5:п¼ - DWORD bFinalizeDisc; // 0=¼֮󲻷̣1=¼֮ + //下面两个参数在表示刻录的文件时使用 + DWORD dwCDIndex; //刻录机的索引:1:选择1号刻录机;2:选择2号刻录机; 3:3号刻录机,4:4号刻录机,5:所有刻录机 + DWORD bFinalizeDisc; // 0=刻录完之后不封盘;1=刻录完之后封盘 }NET_DVR_INQUEST_FILES, *LPNET_DVR_INQUEST_FILES; typedef struct { - DWORD dwEnable; //¼״̬ǷЧ,0-Ч,1-Ч - DWORD dwStatus; /* dwType=0ʱ - 0-1-޹̻쳣, - dwType=12ʱ - 0-¼1-޹̻쳣 - 2-ѷ(81֧)3-̿ռ䲻㣬 - 4-쳣Ѷֹ(81֧) - dwType=3ʱ - 0-¼1-޹̻쳣 - 2-ѷ(81֧)3-̿ռ䲻 - dwType=4ʱ - 0-¼1-޹̻쳣 - 2-ѷ(81֧)3-̿ռ䲻 - dwType=5ʱ, - 0- 1-޹̻쳣, - 2-ѷ(81֧) - dwType=67ʱ, - 0-¼, 1-޹̻쳣, - 2-ѷ(81֧), 3-̿ռ䲻*/ - DWORD dwVolumn; //,λM - DWORD dwFreeSpace; //ʣ,λM - DWORD dwTimeLeft; // ʣʱ䣬λ - BYTE byCDType; // - BYTE byRes[3]; //ֽ + DWORD dwEnable; //刻录机状态是否有效,0-无效,1-有效 + DWORD dwStatus; /* 当dwType=0时, + 0-光盘正常,1-无光盘或光盘异常, + 当dwType=1或2时, + 0-刻录正常,1-无光盘或光盘异常, + 2-光盘已封盘(81不支持),3-光盘空间不足, + 4-异常导致审讯终止(81不支持) + 当dwType=3时, + 0-刻录正常,1-无光盘或光盘异常, + 2-光盘已封盘(81不支持),3-光盘空间不足 + 当dwType=4时, + 0-刻录正常,1-无光盘或光盘异常, + 2-光盘已封盘(81不支持),3-光盘空间不足 + 当dwType=5时, + 0-光盘正常, 1-无光盘或光盘异常, + 2-光盘已封盘(81不支持) + 当dwType=6或7时, + 0-刻录正常, 1-无光盘或光盘异常, + 2-光盘已封盘(81不支持), 3-光盘空间不足*/ + DWORD dwVolumn; //光盘容量,单位M + DWORD dwFreeSpace; //光盘剩余容量,单位M + DWORD dwTimeLeft; // 光盘剩余时间,单位秒 + BYTE byCDType; // 光盘类型 + BYTE byRes[3]; //保留字节 }NET_DVR_INQUEST_CDRW, *LPNET_DVR_INQUEST_CDRW; typedef struct { -/*״̬0-Ѷʼ -1-Ѷп¼2-Ѷֹͣ -3-¼Ѷļ, -4-(º󱸷ݺͱر) -5- -6-ʼӲ - 7-ָѶ*/ +/*运行状态:0-审讯开始, +1-审讯过程中刻录,2-审讯停止, +3-刻录审讯文件, +4-备份(事后备份和本地备份) +5-空闲 +6-初始化硬盘 + 7-恢复审讯*/ DWORD dwType; - NET_DVR_INQUEST_CDRW strCDRWNum[MAX_INQUEST_CDRW_NUM]; //0ʾ¼1 - NET_DVR_TIME_EX struInquestStartTime; //Ѷʼʱ - BYTE byRes[16]; // + NET_DVR_INQUEST_CDRW strCDRWNum[MAX_INQUEST_CDRW_NUM]; //数组0表示刻录机1 + NET_DVR_TIME_EX struInquestStartTime; //审讯开始的时间点 + BYTE byRes[16]; //保留 }NET_DVR_INQUEST_CDRW_STATUS, *LPNET_DVR_INQUEST_CDRW_STATUS; typedef struct { - BYTE byPipChan; //лʾͨ 0xFFر - BYTE byRes[3]; //ֽ - WORD wTopLeftX; //лx - WORD wTopLeftY; //лY + BYTE byPipChan; //画中画显示的通道 0xFF关闭 + BYTE byRes[3]; //保留字节 + WORD wTopLeftX; //画中画的x坐标 + WORD wTopLeftY; //画中画的Y坐标 }NET_DVR_INQUEST_PIP_PARAM, *LPNET_DVR_INQUEST_PIP_PARAM; typedef struct { - BYTE byBaseChan; //ʾлڵͨ - BYTE byBackChan; //ʾлͨ - BYTE byPIPMode; /*Ƿ, - 0 ǰС - 1 ǰ1С - 2 ǰ2С - 3 ǰ3С + BYTE byBaseChan; //显示画中画所在的通道 + BYTE byBackChan; //显示画中画背景通道 + BYTE byPIPMode; /*是否开启, + 0 当前窗口无小画面 + 1 当前窗口有1个小画面 + 2 当前窗口有2个小画面 + 3 当前窗口有3个小画面 */ - BYTE byRes; //ֽ - NET_DVR_INQUEST_PIP_PARAM strPipPara[MAX_INQUEST_PIP_NUM]; //λõIJ + BYTE byRes; //保留字节 + NET_DVR_INQUEST_PIP_PARAM strPipPara[MAX_INQUEST_PIP_NUM]; //画面位置的参数 }NET_DVR_INQUEST_PIP_STATUS, *LPNET_DVR_INQUEST_PIP_STATUS; -//V40չлչΪ32 +//V40扩展,将画中画个数扩展为32个 typedef struct tagNET_DVR_INQUEST_PIP_PARAM_V40 { - BYTE byPipChan; /*лʾͨ 0xFFر*/ + BYTE byPipChan; /*画中画显示的通道 0xFF关闭*/ BYTE byRes1[3]; - WORD wTopLeftX; /*лx*/ - WORD wTopLeftY; /*лY*/ - WORD wHeight; /*лĸ */ - WORD wWidth; /*лĿ */ + WORD wTopLeftX; /*画中画的x坐标*/ + WORD wTopLeftY; /*画中画的Y坐标*/ + WORD wHeight; /*画中画的高 */ + WORD wWidth; /*画中画的宽 */ BYTE byRes2[32]; }NET_DVR_INQUEST_PIP_PARAM_V40, *LPNET_DVR_INQUEST_PIP_PARAM_V40; typedef struct tagNET_DVR_INQUEST_PIP_STATUS_V40 { NET_DVR_STRUCTHEAD struStructHead; - BYTE byBaseChan; /*ʾлڵͨ*/ - BYTE byBackChan; /*ʾлͨ*/ - BYTE byPIPMode; /*Ƿ, 0 ǰС - 1 ǰ1С - 2 ǰ2С - 3 ǰ3С - 4 ǰ4С - 5 ǰ5С - 6 ǰ6С - 7 ǰ7С - 8 ǰ8С - 9 ǰ9С - 255 ǰڹرԤ*/ - BYTE byPipCount; /*Сĸ*/ - BYTE byPicShowMode; /*ʾģʽ0-л1-2-ƴ*/ - BYTE byRes[31]; /**/ - NET_DVR_INQUEST_PIP_PARAM_V40 strPipPara[MAX_INQUEST_PIP_NUM_EX]; /*λõIJ*/ + BYTE byBaseChan; /*显示画中画所在的通道*/ + BYTE byBackChan; /*显示画中画背景通道*/ + BYTE byPIPMode; /*是否开启, 0 当前窗口无小画面 + 1 当前窗口有1个小画面 + 2 当前窗口有2个小画面 + 3 当前窗口有3个小画面 + 4 当前窗口有4个小画面 + 5 当前窗口有5个小画面 + 6 当前画面有6个小画面 + 7 当前窗口有7个小画面 + 8 当前窗口有8个小画面 + 9 当前窗口有9个小画面 + 255 当前窗口关闭预览画面*/ + BYTE byPipCount; /*小画面的个数*/ + BYTE byPicShowMode; /*画面显示模式,0-画中画,1-画面均分2-画面拼接*/ + BYTE byRes[31]; /*保留*/ + NET_DVR_INQUEST_PIP_PARAM_V40 strPipPara[MAX_INQUEST_PIP_NUM_EX]; /*画面位置的参数*/ }NET_DVR_INQUEST_PIP_STATUS_V40, *LPNET_DVR_INQUEST_PIP_STATUS_V40; typedef struct { - BYTE sSecretKey[16]; /*Կ*/ - BYTE byRes[64]; /*ֽ*/ + BYTE sSecretKey[16]; /*码流加密密钥*/ + BYTE byRes[64]; /*保留字节*/ }NET_DVR_INQUEST_SECRET_INFO, *LPNET_DVR_INQUEST_SECRET_INFO; -/***************************ѶDVR end *****************************/ +/***************************审讯DVR end *****************************/ -/********************************ӿڲṹ(end)*********************************/ -#define MAX_BIGSCREENNUM 100//ƴ +/********************************接口参数结构(end)*********************************/ +#define MAX_BIGSCREENNUM 100//最多大屏拼接数 typedef struct tagNET_DVR_SINGLESCREENCFG { - BYTE byScreenSeq;//Ļţ0xffʾô,64-Tһʾ - BYTE bySubSystemNum;//ϵͳλ,ֵû - BYTE byDispNum;//ϵͳ϶Ӧʾͨţ64-Tиֵʾʾͨ + BYTE byScreenSeq;//屏幕序号,0xff表示不用此屏,64-T解码器第一个表示主屏 + BYTE bySubSystemNum;//解码子系统槽位号,解码器此值没有用 + BYTE byDispNum;//解码子系统上对应显示通道号,64-T解码器中该值表示解码器的显示通道号 BYTE byRes[9]; }NET_DVR_SINGLESCREENCFG, *LPNET_DVR_SINGLESCREENCFG; typedef struct tagNET_DVR_BIGSCREENCFG { DWORD dwSize; - BYTE byEnable;//ƴʹܣ0-ʹܣ1-ʹ - BYTE byModeX;/*ƴģʽ*/ + BYTE byEnable;//大屏拼接使能,0-不使能,1-使能 + BYTE byModeX;/*大屏拼接模式*/ BYTE byModeY; - BYTE byMainDecodeSystem;//ۺƽ̨Ľиֵʾλţ64-Tиֵʾͨ - BYTE byMainDecoderDispChan;//ʾͨţ1.1netra汾netraʾܹͨΪ64-TиֵЧ - BYTE byVideoStandard; //ÿʽͬ 1:NTSC,2:PAL + BYTE byMainDecodeSystem;//综合平台的解码板中该值表示主屏槽位号,64-T解码器中该值表示解码通道号 + BYTE byMainDecoderDispChan;//主屏所用显示通道号,1.1netra版本新增,netra解码器有两个显示通道,都能够作为主屏。64-T中该值无效 + BYTE byVideoStandard; //大屏每个子屏制式相同 1:NTSC,2:PAL BYTE byRes1[2]; - DWORD dwResolution; //ÿֱͬ - //ƴӴĻϢ + DWORD dwResolution; //大屏每个子屏分辨率相同 + //大屏拼接从屏幕信息 NET_DVR_SINGLESCREENCFG struFollowSingleScreen[MAX_BIGSCREENNUM]; - //ʼΪ׼ - WORD wBigScreenX; //ڵǽʼX - WORD wBigScreenY; //ڵǽʼY + //起始坐标必须为基准坐标的整数倍 + WORD wBigScreenX; //大屏在电视墙中起始X坐标 + WORD wBigScreenY; //大屏在电视墙中起始Y坐标 BYTE byRes2[12]; }NET_DVR_BIGSCREENCFG, *LPNET_DVR_BIGSCREENCFG; -#define DECODEPIC_LEFTADJUST 1 /*ͼ*/ -#define DECODEPIC_RIGHTADJUST 2 /*ͼ*/ -#define DECODEPIC_UPADJUST 3 /*ͼ*/ -#define DECODEPIC_DOWNADJUST 4 /*ͼ*/ -#define DECODEPIC_REDUCEADJUST 5 /*ͼС*/ -#define DECODEPIC_FULL_SCREEN_ADJUST 6 /*ͼȫ*/ -#define DECODEPIC_CANCEL_FULL_SCREEN_ADJUST 7 /*ͼȡȫʾ*/ -#define DECODEPIC_AUTOADJUST 8 /* ͼԶ */ -#define DECODEPIC_HEIGHTADJUST 9 /* ͼ߶ȵ */ -#define DECODEPIC_WIDTHADJUST 10 /* ͼȵ */ +#define DECODEPIC_LEFTADJUST 1 /*图像左移*/ +#define DECODEPIC_RIGHTADJUST 2 /*图像右移*/ +#define DECODEPIC_UPADJUST 3 /*图像上移*/ +#define DECODEPIC_DOWNADJUST 4 /*图像下移*/ +#define DECODEPIC_REDUCEADJUST 5 /*图像缩小*/ +#define DECODEPIC_FULL_SCREEN_ADJUST 6 /*图像全屏*/ +#define DECODEPIC_CANCEL_FULL_SCREEN_ADJUST 7 /*图像取消全屏显示*/ +#define DECODEPIC_AUTOADJUST 8 /* 图像自动调整 */ +#define DECODEPIC_HEIGHTADJUST 9 /* 图像高度调整 */ +#define DECODEPIC_WIDTHADJUST 10 /* 图像宽度调整 */ -#define MAX_UNITEDMATRIX_NUM 8//Ƶۺƽ̨ -#define MAX_SUBDOMAIN_NUM 4// +#define MAX_UNITEDMATRIX_NUM 8//级联中最多视频综合平台数量 +#define MAX_SUBDOMAIN_NUM 4//级联中最多子域数量 typedef struct tagNET_DVR_SUBSERVERINFO { - BYTE bySequence;//ţţƵۺƽ̨ƽ̨ţ0ʾ޴ƽ̨\ - BYTE byBelongSubDomain;//ƽ̨Чʾĸ + BYTE bySequence;//序号,对于子域,是子域号,对于视频综合平台,是平台号,0表示无此平台\子域 + BYTE byBelongSubDomain;//对于平台有效,表示属于哪个子域 BYTE byRes1[6]; - DWORD dwMaxIpcNums;//ӵIPC - NET_DVR_IPADDR struSubMatrixIP; /*IPַ*/ - WORD wSubMatrixPort; /*ϵͳ˿ں*/ + DWORD dwMaxIpcNums;//连接的最多IPC数量 + NET_DVR_IPADDR struSubMatrixIP; /*IP地址*/ + WORD wSubMatrixPort; /*子系统端口号*/ BYTE byRes2[6]; }NET_DVR_SUBSERVERINFO, *LPNET_DVR_SUBSERVERINFO; @@ -23126,18 +23126,18 @@ typedef struct tagNET_DVR_UNITEDMATRIXINFO { DWORD dwSize; NET_DVR_SUBSERVERINFO struDomainInfo; - NET_DVR_SUBSERVERINFO struSubDomainInfo[MAX_SUBDOMAIN_NUM];//Ϣ - NET_DVR_SUBSERVERINFO struMatrixInfo[MAX_UNITEDMATRIX_NUM];//Ƶۺƽ̨Ϣ + NET_DVR_SUBSERVERINFO struSubDomainInfo[MAX_SUBDOMAIN_NUM];//子域信息 + NET_DVR_SUBSERVERINFO struMatrixInfo[MAX_UNITEDMATRIX_NUM];//视频综合平台信息 BYTE byRes[32]; }NET_DVR_UNITEDMATRIXINFO, *LPNET_DVR_UNITEDMATRIXINFO; typedef struct tagNET_DVR_REGCALLBACKPARAM { - char sDeviceID[NAME_LEN];//豸ID + char sDeviceID[NAME_LEN];//设备ID串 char sPassword[PASSWD_LEN]; - BYTE sSerialNumber[SERIALNO_LEN]; /* 豸к */ - DWORD dwDeviceType;//豸 - BYTE nStatus;// ״̬0ߣ1ߣ + BYTE sSerialNumber[SERIALNO_LEN]; /* 设备序列号 */ + DWORD dwDeviceType;//设备类型 + BYTE nStatus;// 上下线状态(0下线,1上线) /* net type, 0: unknow; 1: 2G wireless networks; 2: 3G wireless networks; 3: line networks */ BYTE byNetType; BYTE byRes[14]; @@ -23145,32 +23145,32 @@ typedef struct tagNET_DVR_REGCALLBACKPARAM typedef struct tagNET_DVR_LOGONREPONSEPARAM { - //ʱλ, 5ı180ڡĬ15롣 + //心跳时间间隔,单位:秒, 5的倍数,180秒以内。默认是15秒。 WORD wHeartbeatTime; - BYTE byOvertimes;// 豸ʱĬ3 + BYTE byOvertimes;// 设备心跳超时次数,默认是3次 BYTE byRes[13]; }NET_DVR_LOGONREPONSEPARAM, *LPNET_DVR_LOGONREPONSEPARAM; typedef struct tagNET_DVR_PREVIEWPARAM { - BYTE byTransProtol; //Э飬0-TCP, 1-UDP - BYTE byTransMode; ///* ģʽ 0 1*/ - NET_DVR_IPADDR struCuIp; //CUIPַ - WORD wPort;/*CU˿*/ + BYTE byTransProtol; //传输协议,0-TCP, 1-UDP + BYTE byTransMode; ///* 传输码流模式 0-主码流 1-子码流*/ + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ WORD wUdpPort; - BYTE bySupportQos;//ǷQOS,1-ã0- - //ǷNATԤ0-1-(ֻbyTransModeֶ) + BYTE bySupportQos;//是否启用QOS,1-启用,0-不启用 + //是否是NAT预览请求,0-否,1-是(只需byTransMode字段) BYTE byNatRequest; - BYTE byPreviewType;// 0-ͨԤ 1-ʱԤ + BYTE byPreviewType;// 0-普通预览 1-延时预览 BYTE byRes[7]; }NET_DVR_PREVIEWPARAM, *LPNET_DVR_PREVIEWPARAM; typedef struct tagNET_DVR_DEVICENATINFO { - NET_DVR_IPADDR struPuIp; //PUIPַ - WORD wOuterPort;/*PU˿*/ - WORD wInterPort;//PUƵıض˿ - DWORD nSessionID;//CMSsessionID + NET_DVR_IPADDR struPuIp; //PU端外网IP地址 + WORD wOuterPort;/*PU外网端口*/ + WORD wInterPort;//PU发送视频的本地端口 + DWORD nSessionID;//CMS分配的sessionID BYTE byRes[4]; }NET_DVR_DEVICENATINFO, *LPNET_DVR_DEVICENATINFO; @@ -23180,103 +23180,103 @@ typedef struct tagNET_DVR_PREVIEWCALLBACKPARAM LONG lChannel; BYTE nLinkProtocol; BYTE nTransMode; - BYTE byPreviewType; //0-ͨԤ 1-ʱԤ + BYTE byPreviewType; //0-普通预览 1-延时预览 BYTE byRes[5]; - DWORD nSessionID;//CMSsessionID + DWORD nSessionID;//CMS分配的sessionID }NET_DVR_PREVIEWCALLBACKPARAM, *LPNET_DVR_PREVIEWCALLBACKPARAM; -//ط +//回放 typedef struct tagNET_DVR_PLAYBACKREQUESTPARAM { - BYTE byPlayBackMode; /* طģʽ 1 2ʱ */ + BYTE byPlayBackMode; /* 回放下载模式 1-按名字 2-按时间 */ BYTE byRes1[3]; union { - char sFileName [100]; /* طŵļ */ + char sFileName [100]; /* 回放的文件名 */ struct { - LONG lChannel; /*طŵͨ*/ - NET_DVR_TIME struStartTime; /* ʱطŵĿʼʱ */ - NET_DVR_TIME struStopTime; /* ʱطŵĽʱ */ + LONG lChannel; /*回放的通道号*/ + NET_DVR_TIME struStartTime; /* 按时间回放的开始时间 */ + NET_DVR_TIME struStopTime; /* 按时间回放的结束时间 */ BYTE byRes[48]; }struPlayBackbyTime; }playbackmode; - NET_DVR_IPADDR struCuIp; //CUIPַ - WORD wPort;/*CU˿*/ + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ BYTE byRes2[2]; - DWORD dwSessionID;//CMSsessionID, + DWORD dwSessionID;//CMS分配的sessionID,输出参数 BYTE byRes3[16]; }NET_DVR_PLAYBACKREQUESTPARAM, *LPNET_DVR_PLAYBACKREQUESTPARAM; //2010-10-06 typedef struct tagNET_DVR_PLAYBACKCALLBACKPARAM { - BYTE byPlayBackMode; /* طģʽ 1 2ʱ */ + BYTE byPlayBackMode; /* 回放下载模式 1-按名字 2-按时间 */ BYTE byRes1[3]; union { - char sFileName [100]; /* طŵļ */ + char sFileName [100]; /* 回放的文件名 */ struct { - LONG lChannel; /*طŵͨ*/ - NET_DVR_TIME struStartTime; /* ʱطŵĿʼʱ */ - NET_DVR_TIME struStopTime; /* ʱطŵĽʱ */ + LONG lChannel; /*回放的通道号*/ + NET_DVR_TIME struStartTime; /* 按时间回放的开始时间 */ + NET_DVR_TIME struStopTime; /* 按时间回放的结束时间 */ BYTE byRes[48]; }struPlayBackbyTime; }playbackmode; - DWORD nSessionID;//CMSsessionID + DWORD nSessionID;//CMS分配的sessionID BYTE byRes2[44]; }NET_DVR_PLAYBACKCALLBACKPARAM, *LPNET_DVR_PLAYBACKCALLBACKPARAM; typedef struct tagNET_DVR_VOICEREQUESETPARAM { - BYTE nVoiceChannel; //Խͨ + BYTE nVoiceChannel; //对讲通道号 BYTE byRes1[3]; - NET_DVR_IPADDR struCuIp; //CUIPַ - WORD wPort;/*CU˿*/ + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ BYTE byRes2[10]; }NET_DVR_VOICEREQUESTPARAM, *LPNET_DVR_VOICEREQUESTPARAM; typedef struct tagNET_DVR_ALARMSETUPREQUESETPARAM { - NET_DVR_IPADDR struCuIp; //CUIPַ - WORD wPort;/*CU˿*/ + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ BYTE byRes[2]; }NET_DVR_ALARMSETUPREQUESTPARAM, *LPNET_DVR_ALARMSETUPREQUESTPARAM; typedef struct tagNET_DVR_GPSALARMINFO { - BYTE byDeviceID[NAME_LEN];/*豸ID*/ - NET_DVR_TIME_EX struGpsTime; /*GPSϴʱ*/ - DWORD dwLongitude; /* */ - DWORD dwLatitude; /* γ*/ - int iTimeZone; /*ʱ÷ʾ+601+4808-60-4808ֶκGPSTimeһʱ*/ - DWORD dwDirection; /*=ʵʷԶΪλΪ˳ʱ뷽㣩*100*/ - WORD wSatellites; /**/ - WORD wPrecision; /**/ - DWORD dwHeight; /*߶:ףԤ*/ - DWORD dwGPSSeq; /*GPSţGPSʱҪõ*/ - WORD wSpeed;//ٶȣλkm/h - /* direction[0]:'E'or'W'(/), direction[1]:'N'or'S'(γ/γ)*/ + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ + NET_DVR_TIME_EX struGpsTime; /*GPS上传的时间*/ + DWORD dwLongitude; /* 经度*/ + DWORD dwLatitude; /* 纬度*/ + int iTimeZone; /*时区,用分钟数表示,+60代表东1区,+480代表东8区,-60代表西区,-480代表西8区,该字段和GPSTime构成一个完整的时间描述*/ + DWORD dwDirection; /*车辆方向=实际方向(以度为单位,正北方向为,顺时针方向计算)*100*/ + WORD wSatellites; /*卫星数量*/ + WORD wPrecision; /*精度*/ + DWORD dwHeight; /*高度:厘米,预留*/ + DWORD dwGPSSeq; /*GPS序号,GPS补传时要用到*/ + WORD wSpeed;//速度,单位,km/h + /* direction[0]:'E'or'W'(东经/西经), direction[1]:'N'or'S'(北纬/南纬)*/ char sDirection[2]; - BYTE byLocateMode;/*λģʽ(ֵ0)1,λ,2,3,,4,Ч65,Чλ78Чλ*/ + BYTE byLocateMode;/*定位模式(初值0),1,自主定位,2,差分3,估算,4,数据无效,65,有效定位,78,无效定位*/ BYTE byRes[3]; }NET_DVR_GPSALARMINFO, *LPNET_DVR_GPSALARMINFO; -//ͼƬϢϴ +//图片信息上传 typedef struct tagNET_DVR_PICINFO { - DWORD dwSize; //ṹ - BYTE byChanIndex; //ͨ - BYTE byRes1[3]; // - BYTE byDeviceID[NAME_LEN];/*豸ID*/ - BYTE byAbsTime[32]; //ʱ, yyyymmddhhmmssxxx, - DWORD dwPicLen; //ͼƬ + DWORD dwSize; //结构长度 + BYTE byChanIndex; //通道号 + BYTE byRes1[3]; //保留 + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ + BYTE byAbsTime[32]; //绝对时间点, yyyymmddhhmmssxxx, + DWORD dwPicLen; //图片长度 BYTE byRes2[32]; BYTE *pPicBuffer; }NET_DVR_PICTUREINFO, *LPNET_DVR_PICTUREINFO; -//ƽ̨ +//平台参数 typedef struct tagNET_DVR_CMSPARAM { DWORD dwSize; @@ -23287,12 +23287,12 @@ typedef struct tagNET_DVR_CMSPARAM BYTE byPassword[PASSWD_LEN]; NET_DVR_IPADDR struPicServerAddr; WORD wPicServerPort; - WORD wCmsUdpPort;//CMSUDPѯĶ˿ + WORD wCmsUdpPort;//CMS用于UDP外网查询的端口 BYTE byRes2[12]; }NET_DVR_CMSPARAM, *LPNET_DVR_CMSPARAM; -///Ź -#define DIALPASSWD_LEN 32 //볤 +///拨号功能 +#define DIALPASSWD_LEN 32 //拨号密码长度 typedef struct tagNET_DVR_QOSPARAM { @@ -23316,17 +23316,17 @@ typedef struct tagNET_DVR_PPPDPARAM BYTE byRes[25]; }NET_DVR_PPPDPARAM, *LPNET_DVR_PPPDPARAM; -#define MAX_PHONE_NUM 32//볤 +#define MAX_PHONE_NUM 32//最长号码长度 typedef struct tagNET_DVR_DIALPARAM { DWORD dwSize; BYTE bEnable3G; /* 0: disable; 1: enable 3g */ BYTE byDialMethod; /* dial methold: 0: auto dial; 1: manual dial; */ - BYTE bySwitchMethod; /* switch methold: 0: auto switch;13Gȣ2: manual switch to 2G; 3: manual switch to 3G; */ - BYTE byEnaAlarmInDial; /* ʹܱ봥; 0: disable; 1: enable */ + BYTE bySwitchMethod; /* switch methold: 0: auto switch;1:3G优先,2: manual switch to 2G; 3: manual switch to 3G; */ + BYTE byEnaAlarmInDial; /* 使能报警输入触发拨号; 0: disable; 1: enable */ BYTE byRes1[10]; - WORD wOffLineTime; /* auto off line when no connection exist,λӣΧ5~65535 */ + WORD wOffLineTime; /* auto off line when no connection exist,单位:分钟,范围:5~65535分钟 */ NET_DVR_PPPDPARAM struPppdParam; NET_DVR_QOSPARAM struQosParam; BYTE byUimNumber[MAX_PHONE_NUM]; @@ -23335,8 +23335,8 @@ typedef struct tagNET_DVR_DIALPARAM typedef struct tagNET_DVR_DIALREQUEST { - BYTE byConnNum; /**/ - BYTE byNetType; /* ָijĬϲŲʱ˲ûá0Զ1CDMA2EVDO3WCDMA4TD-SCDMA */ + BYTE byConnNum; /*网卡序号*/ + BYTE byNetType; /* 指定获得某个网络的默认拨号参数,设置时此参数没用。0:自动;1:CDMA;2:EVDO;3:WCDMA;4:TD-SCDMA */ BYTE byRes[6]; } NET_DVR_DIALREQUEST, *LPNET_DVR_DIALREQUEST; @@ -23390,60 +23390,60 @@ typedef struct tagNET_DVR_DIALSTATUS BYTE byRes2[16]; }NET_DVR_DIALSTATUS, *LPNET_DVR_DIALSTATUS; -//Ź -#define MAX_ALLOWLIST_NUM 8 // -#define NET_SDK_MAX_ALLOWLIST_NUM_32 32 // +//短信功能 +#define MAX_ALLOWLIST_NUM 8 //最大允许名单数 +#define NET_SDK_MAX_ALLOWLIST_NUM_32 32 //最大允许名单数 -#define HARDDISKFULL_EXCEPTION 0x0 /*Ӳ*/ -#define HARDDISKERROR_EXCEPTION 0x1 /*Ӳ̴*/ -#define ETHERNETBROKEN_EXCEPTION 0x2 /*߶*/ -#define IPADDRCONFLICT_EXCEPTION 0x3 /*IPַͻ*/ -#define ILLEGALACCESS_EXCEPTION 0x4 /*Ƿ*/ -#define VI_EXCEPTION 0x5 /*Ƶź쳣*/ -#define VS_MISMATCH_EXCEPTION 0x6 /*/Ƶʽƥ */ -#define VIDEOCABLELOSE_EXCEPTION 0x7 /*Ƶź*/ -#define AUDIOCABLELOSE_EXCEPTION 0x8 /*Ƶź*/ -#define ALARMIN_EXCEPTION 0x9 /**/ -#define MASKALARM_EXCEPTION 0xa /*ڵ*/ -#define MOTDET_EXCEPTION 0xb /*ƶ*/ -#define RECORDING_EXCEPTION 0xc /*¼쳣*/ -#define WIRELESS_EXCEPTION 0xd /*PIR*/ -#define PIR_EXCEPTION 0xe /*߱*/ -#define CALLHELP_EXCEPTION 0xf /*ȱ*/ +#define HARDDISKFULL_EXCEPTION 0x0 /*硬盘满*/ +#define HARDDISKERROR_EXCEPTION 0x1 /*硬盘错*/ +#define ETHERNETBROKEN_EXCEPTION 0x2 /*网线断*/ +#define IPADDRCONFLICT_EXCEPTION 0x3 /*IP地址冲突*/ +#define ILLEGALACCESS_EXCEPTION 0x4 /*非法访问*/ +#define VI_EXCEPTION 0x5 /*视频信号异常*/ +#define VS_MISMATCH_EXCEPTION 0x6 /*输入/输出视频制式不匹配 */ +#define VIDEOCABLELOSE_EXCEPTION 0x7 /*视频无信号*/ +#define AUDIOCABLELOSE_EXCEPTION 0x8 /*音频无信号*/ +#define ALARMIN_EXCEPTION 0x9 /*报警输入*/ +#define MASKALARM_EXCEPTION 0xa /*遮挡报警*/ +#define MOTDET_EXCEPTION 0xb /*移动侦测*/ +#define RECORDING_EXCEPTION 0xc /*录像异常*/ +#define WIRELESS_EXCEPTION 0xd /*PIR报警*/ +#define PIR_EXCEPTION 0xe /*无线报警*/ +#define CALLHELP_EXCEPTION 0xf /*呼救报警*/ -#define AUDIO_DETECTION_EXCEPTION 0x10 /*Ƶ쳣ⱨ*/ -#define SCENECHANGE_DETECTION_EXCEPTION 0x11 /*ⱨ*/ -#define DEFOCUS_DETECTION_EXCEPTION 0x12 /*齹ⱨ*/ -#define FACE_DETECTION_ENTRANCE_EXCEPTION 0x13 /*ⱨ*/ -#define LINE_DETECTION_ENTRANCE_EXCEPTION 0x14 /*Խⱨ*/ -#define FIELD_DETECTION_ENTRANCE_EXCEPTION 0x15 /*ⱨ*/ -#define REGION_EXITING_EXCEPTION 0x16 /*뿪ⱨ*/ -#define REGION_ENTRANCE_EXCEPTION 0x17 /*򱨾*/ -#define LOITERING_EXCEPTION 0x18 /*Աǻⱨ*/ -#define GROUP_EXCEPTION 0x19 /*Աۼⱨ*/ -#define RAPIDMOVE_EXCEPTION 0x1a /*ƶⱨ*/ -#define PARKING_EXCEPTION 0x1b /*ͣⱨ*/ -#define UNATTENDEDBAGGAGE_EXCEPTION 0x1c /*Ʒⱨ*/ -#define ATTENDEDBAGGAGE_EXCEPTION 0x1d /*Ʒȡⱨ*/ -#define DATATRAFFIC_EXCESS 0x1e /**/ -#define VOLTAGEINSTABLE_EXCEPTION 0x1f /*Դѹ쳣*/ -#define ALL_EXCEPTION 0xff /*¼¼ʽжǷ*/ +#define AUDIO_DETECTION_EXCEPTION 0x10 /*音频异常侦测报警*/ +#define SCENECHANGE_DETECTION_EXCEPTION 0x11 /*场景侦测报警*/ +#define DEFOCUS_DETECTION_EXCEPTION 0x12 /*虚焦侦测报警*/ +#define FACE_DETECTION_ENTRANCE_EXCEPTION 0x13 /*人脸侦测报警*/ +#define LINE_DETECTION_ENTRANCE_EXCEPTION 0x14 /*越界侦测报警*/ +#define FIELD_DETECTION_ENTRANCE_EXCEPTION 0x15 /*区域入侵侦测报警*/ +#define REGION_EXITING_EXCEPTION 0x16 /*离开区域侦测报警*/ +#define REGION_ENTRANCE_EXCEPTION 0x17 /*进入区域报警*/ +#define LOITERING_EXCEPTION 0x18 /*人员徘徊侦测报警*/ +#define GROUP_EXCEPTION 0x19 /*人员聚集侦测报警*/ +#define RAPIDMOVE_EXCEPTION 0x1a /*快速移动侦测报警*/ +#define PARKING_EXCEPTION 0x1b /*停车侦测报警*/ +#define UNATTENDEDBAGGAGE_EXCEPTION 0x1c /*物品遗留侦测报警*/ +#define ATTENDEDBAGGAGE_EXCEPTION 0x1d /*物品拿取侦测报警*/ +#define DATATRAFFIC_EXCESS 0x1e /*流量超额*/ +#define VOLTAGEINSTABLE_EXCEPTION 0x1f /*电源电压异常报警*/ +#define ALL_EXCEPTION 0xff /*所有事件,根据事件联动方式判断是否开启短信联动*/ -#define PHONECFG_RECEIVE_SMS 0x0 /* ֽ֧ձ */ -#define PHONECFG_SMS_CONTROL 0x1 /* ֶ֧ſ */ -#define PHONECFG_CALL_CONTROL 0x2 /* ֺ֧п */ -#define PHONECFG_SMS_REBOOT 0x3 /*ֶ֧*/ -#define PHONECFG_DOOR_CONTROL 0x4 /* ֧Ų*/ -#define PHONECFG_SMS_GET_DAIL_STATUS 0x5 /* ֶ֧Żȡ״̬*/ +#define PHONECFG_RECEIVE_SMS 0x0 /* 支持接收报警短信 */ +#define PHONECFG_SMS_CONTROL 0x1 /* 支持短信控制上下线 */ +#define PHONECFG_CALL_CONTROL 0x2 /* 支持呼叫控制上线 */ +#define PHONECFG_SMS_REBOOT 0x3 /*支持短信重启*/ +#define PHONECFG_DOOR_CONTROL 0x4 /* 支持门操作控制*/ +#define PHONECFG_SMS_GET_DAIL_STATUS 0x5 /* 支持短信获取拨号状态*/ typedef struct tagNET_DVR_PHONECFG { BYTE byAllowList[MAX_PHONE_NUM]; - BYTE byPhonePerssion[32]; /*ֽڱʾǷʹܸúijܣλĺ - PHONECFG_RECEIVE_SMSȶ */ - BYTE byAlarmHandler[32]; /*ֽڱʾǷʹܶij͵Ķŷ*/ + BYTE byPhonePerssion[32]; /*按字节表示是否使能该号码的某功能,具体位代表的含义 + 见PHONECFG_RECEIVE_SMS等定义 */ + BYTE byAlarmHandler[32]; /*按字节表示是否使能对某个报警类型的短信发送*/ BYTE byRes[128]; } NET_DVR_PHONECFG, *LPNET_DVR_PHONECFG; @@ -23459,11 +23459,11 @@ typedef struct tagNET_DVR_SMSRELATIVEPARAM typedef struct tagNET_DVR_PHONECFG_V50 { BYTE byAllowList[MAX_PHONE_NUM]; - BYTE byPhonePerssion[32]; /*ֽڱʾǷʹܸúijܣλĺ - PHONECFG_RECEIVE_SMSȶ */ - BYTE byAlarmHandler[32]; /*ֽڱʾǷʹܶij͵Ķŷ(Žʱò)*/ - BYTE byAcsPassword[16]; /**/ - BYTE byName[NAME_LEN/*32*/]; /**/ + BYTE byPhonePerssion[32]; /*按字节表示是否使能该号码的某功能,具体位代表的含义 + 见PHONECFG_RECEIVE_SMS等定义 */ + BYTE byAlarmHandler[32]; /*按字节表示是否使能对某个报警类型的短信发送(门禁主机暂时用不到)*/ + BYTE byAcsPassword[16]; /*开门命令*/ + BYTE byName[NAME_LEN/*32*/]; /*姓名*/ BYTE byRes[80]; } NET_DVR_PHONECFG_V50, *LPNET_DVR_PHONECFG_V50; @@ -23476,122 +23476,122 @@ typedef struct tagNET_DVR_SMSRELATIVEPARAM_V50 BYTE byRes2[32]; }NET_DVR_SMSRELATIVEPARAM_V50, *LPNET_DVR_SMSRELATIVEPARAM_V50; -#define NET_SDK_MONITOR_ID_LEN 64 //ID +#define NET_SDK_MONITOR_ID_LEN 64 //布防点ID长度 typedef struct tagNET_DVR_ACS_EVENT_COND { DWORD dwSize; - DWORD dwMajor; //ͣο¼ϴ궨壬0-ȫ - DWORD dwMinor; //ͣο¼ϴ궨壬0-ȫ - NET_DVR_TIME struStartTime; //ʼʱ - NET_DVR_TIME struEndTime; //ʱ - BYTE byCardNo[ACS_CARD_NO_LEN]; // - BYTE byName[NAME_LEN]; //ֿ - BYTE byPicEnable; //ǷͼƬ0-ͼƬ1-ͼƬ - BYTE byTimeType; //ʱͣ0-豸ʱ䣨Ĭϣ1-UTCʱ䣨struStartTimestruEndTimeʱ䣩 - BYTE byRes2[2]; // - DWORD dwBeginSerialNo; //ʼˮţΪ0ʱĬȫ - DWORD dwEndSerialNo; //ˮţΪ0ʱĬȫ - DWORD dwIOTChannelNo; //IOTͨţ0-Ч - WORD wInductiveEventType; //¼ͣ0-Чֵμ2.2½ڣͻжϸֵΪ0ֵ󣬱ͨ¼֣ͨԭбͣdwMajordwMinor - BYTE bySearchType; //ʽ0-1-¼ԴʱͨΪƵͨţ2-ID - BYTE byEventAttribute; //¼ԣ0-δ壬1-Ϸ¼2- - char szMonitorID[NET_SDK_MONITOR_ID_LEN/*64*/]; //ID豸кšͨ͡ɣŽ㣺豸к+DOOR+űţ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID - BYTE byRes[140]; // + DWORD dwMajor; //报警主类型,参考事件上传宏定义,0-全部 + DWORD dwMinor; //报警次类型,参考事件上传宏定义,0-全部 + NET_DVR_TIME struStartTime; //开始时间 + NET_DVR_TIME struEndTime; //结束时间 + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byName[NAME_LEN]; //持卡人姓名 + BYTE byPicEnable; //是否带图片,0-不带图片,1-带图片 + BYTE byTimeType; //时间类型:0-设备本地时间(默认),1-UTC时间(struStartTime和struEndTime的时间) + BYTE byRes2[2]; //保留 + DWORD dwBeginSerialNo; //起始流水号(为0时默认全部) + DWORD dwEndSerialNo; //结束流水号(为0时默认全部) + DWORD dwIOTChannelNo; //IOT通道号,0-无效 + WORD wInductiveEventType; //归纳事件类型,0-无效,其他值参见2.2章节,客户端判断该值为非0值后,报警类型通过归纳事件类型区分,否则通过原有报警主次类型(dwMajor、dwMinor)区分 + BYTE bySearchType; //搜索方式:0-保留,1-按事件源搜索(此时通道号为非视频通道号),2-按布防点ID搜索 + BYTE byEventAttribute; //事件属性:0-未定义,1-合法事件,2-其它 + char szMonitorID[NET_SDK_MONITOR_ID_LEN/*64*/]; //布防点ID(由设备序列号、通道类型、编号组成,例如门禁点:设备序列号+“DOOR”+门编号) + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byRes[140]; //保留 }NET_DVR_ACS_EVENT_COND, *LPNET_DVR_ACS_EVENT_COND; typedef struct tagNET_DVR_ACS_EVENT_DETAIL { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ţmacַΪ0Ч - BYTE byCardType; //ͣ1-ͨ2-Ⱥ忨3-ֹ4-Ѳ5-вȿ6-7-8-Ϊ0Ч - BYTE byAllowListNo; //,1-8Ϊ0Ч - BYTE byReportChannel; //ϴͨ1-ϴ2-1ϴ3-2ϴΪ0Ч - BYTE byCardReaderKind; //һ࣬0-Ч1-IC2-֤3-ά,4-ָͷ - DWORD dwCardReaderNo; //ţΪ0Ч - DWORD dwDoorNo; //űţ¥ţΪ0Ч - DWORD dwVerifyNo; //ؿ֤ţΪ0Ч - DWORD dwAlarmInNo; //ţΪ0Ч - DWORD dwAlarmOutNo; //ţΪ0Ч - DWORD dwCaseSensorNo; //¼ - DWORD dwRs485No; //RS485ͨţΪ0Ч - DWORD dwMultiCardGroupNo; //Ⱥ - WORD wAccessChannel; //Աͨ - BYTE byDeviceNo; //豸ţΪ0ЧЧΧ1-255 - BYTE byDistractControlNo;//ֿţΪ0Ч - DWORD dwEmployeeNo; //ţΪ0Ч - WORD wLocalControllerID; //͵ؿţ0-Ž1-64͵ؿ - BYTE byInternetAccess; //ID1-1,2-2,3-1 - BYTE byType; //ͣ0:ʱ,1-24Сʱ,2-ʱ ,3-ڲ4-Կ׷ 5-𾯷 6-ܽ 7-24Сʱ 8-24Сʱ9-24Сʱ𶯷,10-Žŷ11-Žŷ 0xff- - BYTE byMACAddr[MACADDR_LEN]; //ַΪ0Ч - BYTE bySwipeCardType;//ˢͣ0-Ч1-ά - BYTE byEventAttribute; //¼ԣ0-δ壬1-Ϸ֤2- - DWORD dwSerialNo; //¼ˮţΪ0Ч - BYTE byChannelControllerID; //ͨIDΪ0Ч1-ͨ2-ͨ - BYTE byChannelControllerLampID; //ͨưIDΪ0ЧЧΧ1-255 - BYTE byChannelControllerIRAdaptorID; //ͨתӰIDΪ0ЧЧΧ1-255 - BYTE byChannelControllerIREmitterID; //ͨIDΪ0ЧЧΧ1-255 - DWORD dwRecordChannelNum; //¼ͨĿ - char *pRecordChannelData;//¼ͨСΪsizeof(DWORD)* dwRecordChannelNum - BYTE byUserType; //Աͣ0-Ч1-ͨˣˣ2-ÿͣ3-ֹˣ4-Ա - BYTE byCurrentVerifyMode; //ǰ֤ʽ0-Ч1-ߣ2-ˢ+룬3-ˢ4-ˢ룬5-ָƣ6-ָ+룬7-ָƻˢ8-ָ+ˢ9-ָ+ˢ+룬10-ָƻˢ룬11-+ָƣ12-+룬13-+ˢ14-15-+룬16-ָƻ룬 - //17-+ָƣ18-+ָ+룬19-+ָ+ˢ20-++ָƣ21-+22-+ˢ23-ָƻ24-ˢ룬25-ˢ26-ˢָƣ27-ˢָƻ룬28-룬29-++룬 - //30-ˢ+ˢ31-ָƻ룬32-Ĥ33-ָƻˢĤ34-ˢĤ,35-ˢָƻĤ36-ָƻĤ룬37-ˢָƻĤ룬38-ˢĤ룬 - //39-ˢ+Ĥ40-ָ+Ĥ41-+Ĥ42-Ĥ+룬43-ˢ+Ĥ+룬44-+Ĥ+룬45-ˢ++Ĥ46-룬47-ˢ+48-+49-ָ+50-+51-ң52-ң+53-ң - //54-ң򿨣55-ңָƣ56-ң룬57-ң򿨻ָƣ58-ң򿨻59-ң򿨻룬60-ңָƻ61-ңָƻ룬62-ң룬63-ң򿨻ָƻ64-ң򿨻ָƻ룬 - //65-ңָƻ룬66-ң򿨻룬67-ң򿨻ָƻ룬69-ƾ70-ˢƾ71-ƾ72-ˢƾ73-ƾ74-ˢƾ - //75-+ƾ76-ˢ+ƾ77-+ƾ78-+ˢ+ƾ79-+ˢ++ƾ80-ƾ81-+ˢ+ - BYTE byAttendanceStatus; //״̬0-δ,1-ϰ࣬2-°࣬3-ʼϢ4-Ϣ5-ʼӰ࣬6-Ӱ - BYTE byStatusValue; //״ֵ̬ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID豸˵ʹ˹ţԱIDֶΣbyEmployeeNoһҪݣbyEmployeeNoתΪdwEmployeeNoôֶҲҪݣϲƽ̨ͻ˵ȽbyEmployeeNoֶΣֶΪգٿǽdwEmployeeNoֶΣ - BYTE byRes1; // - BYTE byMask; //Ƿ֣0-1-δ֪2-֣3- - BYTE byThermometryUnit; //µλ0-϶ȣĬϣ1-϶ȣ2-ģ - BYTE byIsAbnomalTemperature; //ĿץIJǷ¶쳣1-ǣ0- - float fCurrTemperature; //¶ȣȷСһλ - NET_VCA_POINT struRegionCoordinates; //¶ - WORD wXCoordinate; //x꣬ϽͼƬĹһ꣬Χ0-1000 - WORD wYCoordinate; //y꣬ϽͼƬĹһ꣬Χ0-1000 - WORD wWidth; //ȣΧ0-1000 - WORD wHeight; //߶ȣΧ0-1000 - BYTE byHealthCode; //״̬, 0-, 1-δ, 2-δ, 3-, 4-, 5-, 6-޴Ա, 7-Ϣӿ쳣²ѯʧܣ, 8-ѯ볬ʱ - BYTE byNADCode; //, 0-, 1-δѯ, 2-ԣ, 3-ԣȷ, 4-Чѹ - BYTE byTravelCode; //г̱, 0-, 1-14һֱڵ, 2-14뿪, 3-14ڵ, 4- - BYTE byVaccineStatus; //״̬, 0-, 1-δ, 2-ע, 3- + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号(mac地址),为0无效 + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 + BYTE byAllowListNo; //允许名单单号,1-8,为0无效 + BYTE byReportChannel; //报告上传通道,1-布防上传,2-中心组1上传,3-中心组2上传,为0无效 + BYTE byCardReaderKind; //读卡器属于哪一类,0-无效,1-IC读卡器,2-身份证读卡器,3-二维码读卡器,4-指纹头 + DWORD dwCardReaderNo; //读卡器编号,为0无效 + DWORD dwDoorNo; //门编号(楼层编号),为0无效 + DWORD dwVerifyNo; //多重卡认证序号,为0无效 + DWORD dwAlarmInNo; //报警输入号,为0无效 + DWORD dwAlarmOutNo; //报警输出号,为0无效 + DWORD dwCaseSensorNo; //事件触发器编号 + DWORD dwRs485No; //RS485通道号,为0无效 + DWORD dwMultiCardGroupNo; //群组编号 + WORD wAccessChannel; //人员通道号 + BYTE byDeviceNo; //设备编号,为0无效(有效范围1-255) + BYTE byDistractControlNo;//分控器编号,为0无效 + DWORD dwEmployeeNo; //工号,为0无效 + WORD wLocalControllerID; //就地控制器编号,0-门禁主机,1-64代表就地控制器 + BYTE byInternetAccess; //网口ID:(1-上行网口1,2-上行网口2,3-下行网口1) + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区 0xff-无 + BYTE byMACAddr[MACADDR_LEN]; //物理地址,为0无效 + BYTE bySwipeCardType;//刷卡类型,0-无效,1-二维码 + BYTE byEventAttribute; //事件属性:0-未定义,1-合法认证,2-其它 + DWORD dwSerialNo; //事件流水号,为0无效 + BYTE byChannelControllerID; //通道控制器ID,为0无效,1-主通道控制器,2-从通道控制器 + BYTE byChannelControllerLampID; //通道控制器灯板ID,为0无效(有效范围1-255) + BYTE byChannelControllerIRAdaptorID; //通道控制器红外转接板ID,为0无效(有效范围1-255) + BYTE byChannelControllerIREmitterID; //通道控制器红外对射ID,为0无效(有效范围1-255) + DWORD dwRecordChannelNum; //录像通道数目 + char *pRecordChannelData;//录像通道,大小为sizeof(DWORD)* dwRecordChannelNum + BYTE byUserType; //人员类型:0-无效,1-普通人(主人),2-来宾(访客),3-禁止名单人,4-管理员 + BYTE byCurrentVerifyMode; //读卡器当前验证方式:0-无效,1-休眠,2-刷卡+密码,3-刷卡,4-刷卡或密码,5-指纹,6-指纹+密码,7-指纹或刷卡,8-指纹+刷卡,9-指纹+刷卡+密码,10-人脸或指纹或刷卡或密码,11-人脸+指纹,12-人脸+密码,13-人脸+刷卡,14-人脸,15-工号+密码,16-指纹或密码, + //17-工号+指纹,18-工号+指纹+密码,19-人脸+指纹+刷卡,20-人脸+密码+指纹,21-工号+人脸,22-人脸或人脸+刷卡,23-指纹或人脸,24-刷卡或人脸或密码,25-刷卡或人脸,26-刷卡或人脸或指纹,27-刷卡或指纹或密码,28-人脸或密码,29-工号+人脸+密码, + //30-刷卡或人脸或人脸+刷卡,31-人脸或指纹或密码,32-虹膜,33-人脸或指纹或刷卡或密码或虹膜,34-人脸或刷卡或密码或虹膜,35-刷卡或指纹或人脸或虹膜,36-指纹或人脸或虹膜或密码,37-刷卡或指纹或虹膜或密码,38-刷卡或虹膜或密码, + //39-刷卡+虹膜,40-指纹+虹膜,41-人脸+虹膜,42-虹膜+密码,43-刷卡+虹膜+密码,44-人脸+虹膜+密码,45-刷卡+人脸+虹膜,46-密码,47-刷卡+声音,48-人脸+声音,49-指纹+声音,50-密码+声音,51-遥控器,52-遥控器+人脸,53-遥控器或人脸, + //54-遥控器或卡,55-遥控器或指纹,56-遥控器或密码,57-遥控器或卡或指纹,58-遥控器或卡或人脸,59-遥控器或卡或密码,60-遥控器或指纹或人脸,61-遥控器或指纹或密码,62-遥控器或人脸或密码,63-遥控器或卡或指纹或人脸,64-遥控器或卡或指纹或密码, + //65-遥控器或指纹或人脸或密码,66-遥控器或卡或人脸或密码,67-遥控器或卡或指纹或人脸或密码,69-人脸或掌纹掌静脉,70-刷卡或掌纹掌静脉,71-密码或掌纹掌静脉,72-人脸或刷卡或掌纹掌静脉,73-人脸或密码或掌纹掌静脉,74-人脸或刷卡或密码或掌纹掌静脉, + //75-人脸+掌纹掌静脉,76-刷卡+掌纹掌静脉,77-密码+掌纹掌静脉,78-人脸+刷卡+掌纹掌静脉,79-人脸+刷卡+密码+掌纹掌静脉,80-掌纹掌静脉,81-人脸+刷卡+密码 + BYTE byAttendanceStatus; //考勤状态:0-未定义,1-上班,2-下班,3-开始休息,4-结束休息,5-开始加班,6-结束加班 + BYTE byStatusValue; //考勤状态值 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID)(对于设备来说,如果使用了工号(人员ID)字段,byEmployeeNo一定要传递,如果byEmployeeNo可转换为dwEmployeeNo,那么该字段也要传递;对于上层平台或客户端来说,优先解析byEmployeeNo字段,如该字段为空,再考虑解析dwEmployeeNo字段) + BYTE byRes1; //保留 + BYTE byMask; //是否带口罩:0-保留,1-未知,2-不戴口罩,3-戴口罩 + BYTE byThermometryUnit; //测温单位(0-摄氏度(默认),1-华氏度,2-开尔文) + BYTE byIsAbnomalTemperature; //目标抓拍测温是否温度异常:1-是,0-否 + float fCurrTemperature; //人脸温度(精确到小数点后一位) + NET_VCA_POINT struRegionCoordinates; //人脸温度坐标 + WORD wXCoordinate; //x坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wYCoordinate; //y坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wWidth; //人脸框宽度,范围0-1000 + WORD wHeight; //人脸框高度,范围0-1000 + BYTE byHealthCode; //健康码状态, 0-保留, 1-未请求, 2-未申领, 3-绿码, 4-黄码, 5-红码, 6-无此人员, 7-其他错误信息(如接口异常导致查询失败), 8-查询健康码超时 + BYTE byNADCode; //核酸检测结果, 0-保留, 1-未查询到核酸检测结果, 2-核酸检测阴性(代表正常), 3-核酸检测阳性(代表确诊), 4-核酸检测有效期已过 + BYTE byTravelCode; //行程编码, 0-保留, 1-14天内一直在当地, 2-14天内离开过当地, 3-14天内到过疫区, 4-其他 + BYTE byVaccineStatus; //打疫苗状态, 0-保留, 1-未打疫苗, 2-部分注射疫苗, 3-打过疫苗 BYTE byRes[36]; }NET_DVR_ACS_EVENT_DETAIL, *LPNET_DVR_ACS_EVENT_DETAIL; typedef struct tagNET_DVR_ACS_EVENT_CFG { DWORD dwSize; - DWORD dwMajor; //ͣο궨 - DWORD dwMinor; //ͣο궨 - NET_DVR_TIME struTime; //ʱ - BYTE sNetUser[MAX_NAMELEN];//û - NET_DVR_IPADDR struRemoteHostAddr;//Զַ - NET_DVR_ACS_EVENT_DETAIL struAcsEventInfo; //ϸ - DWORD dwPicDataLen; //ͼƬݴСΪ0DZʾ + DWORD dwMajor; //报警主类型,参考宏定义 + DWORD dwMinor; //报警次类型,参考宏定义 + NET_DVR_TIME struTime; //时间 + BYTE sNetUser[MAX_NAMELEN];//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr;//远程主机地址 + NET_DVR_ACS_EVENT_DETAIL struAcsEventInfo; //详细参数 + DWORD dwPicDataLen; //图片数据大小,不为0是表示后面带数据 char *pPicData; - WORD wInductiveEventType; //¼ͣ0-Чֵμ2.2½ڣͻжϸֵΪ0ֵ󣬱ͨ¼֣ͨԭбͣdwMajordwMinor - BYTE byTimeType; //ʱͣ0-豸ʱ䣨Ĭϣ1-UTCʱ䣨struTimeʱ䣩 + WORD wInductiveEventType; //归纳事件类型,0-无效,其他值参见2.2章节,客户端判断该值为非0值后,报警类型通过归纳事件类型区分,否则通过原有报警主次类型(dwMajor、dwMinor)区分 + BYTE byTimeType; //时间类型:0-设备本地时间(默认),1-UTC时间(struTime的时间) BYTE byRes1; - DWORD dwQRCodeInfoLen; //άϢȣΪ0DZʾ - DWORD dwVisibleLightDataLen; //ȳɼͼƬȣΪ0DZʾ - DWORD dwThermalDataLen; //ȳͼƬȣΪ0DZʾ - char *pQRCodeInfo; //άϢָ - char *pVisibleLightData; //ȳɼͼƬָ - char *pThermalData; //ȳͼƬָ + DWORD dwQRCodeInfoLen; //二维码信息长度,不为0是表示后面带数据 + DWORD dwVisibleLightDataLen; //热成像相机可见光图片长度,不为0是表示后面带数据 + DWORD dwThermalDataLen; //热成像图片长度,不为0是表示后面带数据 + char *pQRCodeInfo; //二维码信息指针 + char *pVisibleLightData; //热成像相机可见光图片指针 + char *pThermalData; //热成像图片指针 BYTE byRes[36]; }NET_DVR_ACS_EVENT_CFG, *LPNET_DVR_ACS_EVENT_CFG; typedef struct tagNET_DVR_SMSLISTINFO { DWORD dwSize; - DWORD dwTotalSmsNum;// + DWORD dwTotalSmsNum;//短信条数 BYTE byRes[8]; BYTE *pSmsParam; - DWORD dwBufLen;//ָ볤ȣ + DWORD dwBufLen;//所分配指针长度,输入参数 }NET_DVR_SMSLISTINFO, *LPNET_DVR_SMSLISTINFO; typedef struct tagNET_DVR_SMSPARAM @@ -23602,14 +23602,14 @@ typedef struct tagNET_DVR_SMSPARAM NET_DVR_TIME_EX struRecvTime; /* sms receive time */ }NET_DVR_SMSPARAM, *LPNET_DVR_SMSPARAM; -#define MAX_SMSCONTENT_LEN 140//ݳ +#define MAX_SMSCONTENT_LEN 140//短信内容长度 typedef struct tagNET_DVR_SMSCONTENT { BYTE byPhoneNum[MAX_PHONE_NUM]; BYTE byMsg[MAX_SMSCONTENT_LEN]; }NET_DVR_SMSCONTENT, *LPNET_DVR_SMSCONTENT; -//pin +//pin码配置 typedef enum { CPIN_READY = 1, @@ -23637,7 +23637,7 @@ typedef enum PUK_VERIFY = 4, PIN_CHANGE = 5 }PIN_CMD; -#define MAX_PIN_LEN 12 //PIN󳤶 +#define MAX_PIN_LEN 12 //PIN码最大长度 typedef struct tagNET_DVR_PINCODEPARAM { DWORD dwSize; @@ -23649,49 +23649,49 @@ typedef struct tagNET_DVR_PINCODEPARAM }NET_DVR_PINCODEPARAM, *LPNET_DVR_PINCODEPARAM; -//ͼƬ +//图片质量 typedef struct { /* 0=CIF, 1=QCIF, 2=D1 3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA*/ WORD wPicSize; - WORD wPicQuality; /* ͼƬϵ 0- 1-Ϻ 2-һ */ - //ץͼͼƬʽ1-ϴģ2-豸ر棬3-ϴͬʱ豸ر + WORD wPicQuality; /* 图片质量系数 0-最好 1-较好 2-一般 */ + //抓图图片处理方式,1-上传中心,2-设备本地保存,3-上传中心同时设备本地保存 BYTE byPicTackleMode; BYTE byRes[11]; }NET_DVR_PUSHJPEGPARA, *LPNET_DVR_PUSHJPEGPARA; -#define COM_PUSHALARM 0x1200 //豸Ϣϴģʽ豸ʹ -#define COM_PUSHALARM_V30 0x1201 //豸Ϣϴv30ģʽ豸ʹ +#define COM_PUSHALARM 0x1200 //设备基本报警信息上传,推模式设备使用 +#define COM_PUSHALARM_V30 0x1201 //设备基本报警信息上传v30,推模式设备使用 typedef struct tagNET_DVR_PUSHALARMINFO { - DWORD dwAlarmType;/*0-ź,1-Ӳ,2-źŶʧ,3ƶ,4Ӳδʽ,5-дӲ̳,6-ڵ,7-ʽƥ, 8-Ƿ*/ - DWORD dwAlarmInputNumber;/*˿*/ - DWORD dwAlarmOutputNumber[MAX_ALARMOUT];/*˿ڣһλΪ1ʾӦһ*/ - DWORD dwAlarmRelateChannel[MAX_CHANNUM];/*¼ͨһλΪ1ʾӦһ·¼, dwAlarmRelateChannel[0]Ӧ1ͨ*/ - DWORD dwChannel[MAX_CHANNUM];/*dwAlarmTypeΪ23,6ʱʾĸͨdwChannel[0]Ӧ1ͨ*/ - DWORD dwDiskNumber[MAX_DISKNUM];/*dwAlarmTypeΪ1,4,5ʱ,ʾĸӲ, dwDiskNumber[0]λӦ1Ӳ*/ - BYTE byDeviceID[NAME_LEN];/*豸ID*/ + DWORD dwAlarmType;/*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问*/ + DWORD dwAlarmInputNumber;/*报警输入端口*/ + DWORD dwAlarmOutputNumber[MAX_ALARMOUT];/*触发的输出端口,哪一位为1表示对应哪一个输出*/ + DWORD dwAlarmRelateChannel[MAX_CHANNUM];/*触发的录像通道,哪一位为1表示对应哪一路录像, dwAlarmRelateChannel[0]对应第1个通道*/ + DWORD dwChannel[MAX_CHANNUM];/*dwAlarmType为2或3,6时,表示哪个通道,dwChannel[0]对应第1个通道*/ + DWORD dwDiskNumber[MAX_DISKNUM];/*dwAlarmType为1,4,5时,表示哪个硬盘, dwDiskNumber[0]位对应第1个硬盘*/ + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ BYTE byRes[4]; }NET_DVR_PUSHALARMINFO, *LPNET_DVR_PUSHALARMINFO; typedef struct { - DWORD dwAlarmType;/*0-ź,1-Ӳ,2-źŶʧ,3ƶ,4Ӳδʽ,5-дӲ̳,6-ڵ,7-ʽƥ, 8-Ƿ, 9-Ƶź쳣10-¼쳣 11- ܳ仯 12-쳣 */ - DWORD dwAlarmInputNumber;/*˿*/ - BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30];/*˿ڣΪ1ʾӦ*/ - BYTE byAlarmRelateChannel[MAX_CHANNUM_V30];/*¼ͨΪ1ʾӦ¼, dwAlarmRelateChannel[0]Ӧ1ͨ*/ - BYTE byChannel[MAX_CHANNUM_V30];/*dwAlarmTypeΪ23,6910ʱʾĸͨdwChannel[0]Ӧ1ͨ*/ - BYTE byDiskNumber[MAX_DISKNUM_V30];/*dwAlarmTypeΪ1,4,5ʱ,ʾĸӲ, dwDiskNumber[0]Ӧ1Ӳ*/ - BYTE byDeviceID[NAME_LEN];/*豸ID*/ + DWORD dwAlarmType;/*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问, 9-视频信号异常,10-录像异常 11- 智能场景变化 12-阵列异常 */ + DWORD dwAlarmInputNumber;/*报警输入端口*/ + BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30];/*触发的输出端口,为1表示对应输出*/ + BYTE byAlarmRelateChannel[MAX_CHANNUM_V30];/*触发的录像通道,为1表示对应录像, dwAlarmRelateChannel[0]对应第1个通道*/ + BYTE byChannel[MAX_CHANNUM_V30];/*dwAlarmType为2或3,6,9,10时,表示哪个通道,dwChannel[0]对应第1个通道*/ + BYTE byDiskNumber[MAX_DISKNUM_V30];/*dwAlarmType为1,4,5时,表示哪个硬盘, dwDiskNumber[0]对应第1个硬盘*/ + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ BYTE byRes[7]; }NET_DVR_PUSHALARMINFO_V30, *LPNET_DVR_PUSHALARMINFO_V30; //2011-04-20 -// +//启动控制 typedef struct tagNET_DVR_MB_AUTOWORKPARA { - /*ǰƷʽ 0: Ԥ, 1: ʱػ, 2: Զػ*/ + /*当前启动控制方式 0: 预留, 1: 延时关机, 2: 自动开关机*/ BYTE byCurPowerCtrlType; BYTE byRes[3]; NET_DVR_SCHEDTIME struWorkTime[MAX_DAYS][2]; @@ -23700,68 +23700,68 @@ typedef struct tagNET_DVR_MB_AUTOWORKPARA typedef struct tagNET_DVR_MB_POWERCTRLPARA { DWORD dwSize; - DWORD dwHaltDelay; /* ػӳʱ,λmin */ - NET_DVR_MB_AUTOWORKPARA struAutoWorkPara;/*ز*/ - BYTE byEnableUnderVoltProtect; /*ǷǷѹ*/ - BYTE byUnderVoltPercent; /*Ƿѹٷֱȣ859095Чֵ*/ + DWORD dwHaltDelay; /* 关机延迟时间,单位min */ + NET_DVR_MB_AUTOWORKPARA struAutoWorkPara;/*启动控制相关参数设置*/ + BYTE byEnableUnderVoltProtect; /*是否开启欠压保护*/ + BYTE byUnderVoltPercent; /*欠压保护百分比,有85、90、95三个有效值*/ BYTE byRes[34]; }NET_DVR_MB_POWERCTRLPARA, *LPNET_DVR_MB_POWERCTRLPARA; -/*ע1ػӳʱ, ѡʱΪ 05ӣ10 20 25 30 35 40 45 50 60 60*2 60*3 60 *4 60*5 60*6 */ +/*注:1)、关机延迟时间, 可选时间为 0,5分钟,10分钟 ,20分钟 25分钟 30分钟 35分钟 40分钟 ,45 分钟 50分钟 ,60分钟 ,60*2分钟 ,60*3 60 *4 60*5 60*6 */ -//Զ +//自动备份 typedef struct tagNET_DVR_MB_AUTOBACKUPPARA { DWORD dwSize; - BYTE byEnableAutoBackup; /* ǷԶ 0 ر 1 */ + BYTE byEnableAutoBackup; /* 是否开启自动备份 0 关闭 ,1 开启 */ BYTE byRes1[3]; - BYTE byBackupChannel[MAX_CHANNUM_V30]; /*Ҫݵͨ*/ - BYTE byBackupDays[MAX_CHANNUM_V30];/**/ - /* ļ - {0,ALL_RECORD_TYPE,ȫ}, - {1,TIMING_REC,ʱ}, - {2,MOTION_DETECT_REC,ƶ }, - {3,ALARM_REC, }, - {4,MANUAL_REC,ֶ¼}*/ + BYTE byBackupChannel[MAX_CHANNUM_V30]; /*需要备份的通道*/ + BYTE byBackupDays[MAX_CHANNUM_V30];/*备份天数*/ + /* 备份文件类型 + {0,ALL_RECORD_TYPE,全部}, + {1,TIMING_REC,定时}, + {2,MOTION_DETECT_REC,移动侦测 }, + {3,ALARM_REC,报警 }, + {4,MANUAL_REC,手动录像}*/ BYTE byBackupFileType[MAX_CHANNUM_V30]; - NET_DVR_SCHEDTIME struBackupTime[MAX_CHANNUM_V30][2]; /* Զʱ*/ - BYTE byRes2[36]; /* ֽ*/ + NET_DVR_SCHEDTIME struBackupTime[MAX_CHANNUM_V30][2]; /* 自动备份时间段*/ + BYTE byRes2[36]; /* 保留字节*/ }NET_DVR_MB_AUTOBACKUPPARA, *LPNET_DVR_MB_AUTOBACKUPPARA; typedef struct tagNET_DVR_MB_GPSPARA { DWORD dwSize; - BYTE byEnableGPS; /*ǷGPS */ - BYTE byGpsInterface;/*gpsսӿ0-rs232, 1-rs485, 2-frontpanel, 3-lcd */ - BYTE bySpeedUnit; /*ٶȵλ0/Сʱ1 Ӣ/Сʱ*/ - BYTE byEnableRetrieve; /* ä(1ã0) */ - int iAdjustTime;/*ʱ*/ - BYTE byEnableAdjustTime;/*ǷGPSУʱ 1-, 0-*/ + BYTE byEnableGPS; /*是否启用GPS */ + BYTE byGpsInterface;/*gps接收接口0-rs232, 1-rs485, 2-frontpanel, 3-lcd */ + BYTE bySpeedUnit; /*速度单位,0:公里/小时,1 :英里/小时*/ + BYTE byEnableRetrieve; /* 盲区补发(1启用,0不启用) */ + int iAdjustTime;/*时区*/ + BYTE byEnableAdjustTime;/*是否启用GPS校时, 1-启用, 0-不启动*/ BYTE byRes1[5]; - WORD wGpsUploadInterval; /* GPSϴ, */ - BYTE byGpsOsdChannel[MAX_CHANNUM_V30];/*OSD ʾÿֽڴһ· */ - DWORD dwSpeedLimit; /* ٱ*/ + WORD wGpsUploadInterval; /* GPS上传间隔, 秒*/ + BYTE byGpsOsdChannel[MAX_CHANNUM_V30];/*OSD 显示,每字节代表一路 */ + DWORD dwSpeedLimit; /* 限速报警*/ NET_DVR_HANDLEEXCEPTION_V30 struGpsAlarm; BYTE byRes2[36]; }NET_DVR_MB_GPSPARA, *LPNET_DVR_MB_GPSPARA; -/*ע1λΪ/Сʱ ʱΧΪ0 ,965Ӣ/Сʱλʱ ٶȷΧΪ0-600*/ +/*注:1)、当单位为公里/小时 时范围为(0 ,965);当采用英里/小时做单位的时候 ,最大速度范围为:0-600*/ #define SENSOR_IN_NUMBER 8 typedef struct tagNET_DVR_MB_SENSORINPARA { DWORD dwSize; - BYTE byTriggerType[SENSOR_IN_NUMBER];/*г״̬شֻú4ֱɲתת0-ߵƽ1-͵ƽ*/ + BYTE byTriggerType[SENSOR_IN_NUMBER];/*行车状态相关触发的联动,只用后4个,分别代表刹车、左转、右转、倒车,0-高电平,1-低电平*/ BYTE byTriggerChannel [SENSOR_IN_NUMBER]; - BYTE byOsdDisplay [MAX_CHANNUM_V30];/*OSDʾ,ÿλһ·*/ + BYTE byOsdDisplay [MAX_CHANNUM_V30];/*OSD显示,每位代表一路*/ BYTE byRes[32]; }NET_DVR_MB_SENSORINPARA, *LPNET_DVR_MB_SENSORINPARA; typedef struct tagNET_DVR_ACCELERATIONCFG { - DWORD dwMaxXAcc; /* Xٶȱֵ ȡֵΪʵֵ10,СΪ0*/ - DWORD dwMaxYAcc; /* Yٶȱֵ ȡֵΪʵֵ10.СΪ0*/ - DWORD dwMaxZAcc; /* Zٶȱֵ ȡֵΪʵֵ10,СΪ0*/ + DWORD dwMaxXAcc; /* X轴加速度报警值 ,该取值为实际数值乘以10,最小为0*/ + DWORD dwMaxYAcc; /* Y轴加速度报警值 ,该取值为实际数值乘以10.最小为0*/ + DWORD dwMaxZAcc; /* Z轴加速度报警值, 该取值为实际数值乘以10,最小为0*/ BYTE byRes[4]; }NET_DVR_ACCELERATIONCFG,*LPNET_DVR_ACCERATIONCFG; @@ -23769,200 +23769,200 @@ typedef struct tagNET_DVR_GSENSORPARA { DWORD dwSize; NET_DVR_ACCELERATIONCFG struAccelerationCfg; - BYTE byModuleSelect;/*ģѡ0/1*/ + BYTE byModuleSelect;/*模块选择:0内置/1外置*/ BYTE byRes1[3]; NET_DVR_HANDLEEXCEPTION_V30 struHandleException; - BYTE byRes2[24]; /*չֽ*/ + BYTE byRes2[24]; /*保留扩展字节*/ }NET_DVR_GSENSORPARA, *LPNET_DVR_GSENSORPARA; typedef struct tagNET_DVR_MB_DOWNLOADSVRPARA { DWORD dwSize; - NET_DVR_IPADDR struDownloadSvrIp; /* Զطַ */ + NET_DVR_IPADDR struDownloadSvrIp; /* 自动下载服务器地址 */ BYTE byRes[64]; }NET_DVR_MB_DOWNLOADSVRPARA,*LPNET_DVR_MB_DOWNLOADSVRPARA; -/* ʶز*/ +/* 车牌识别的相关参数*/ typedef struct tagNET_DVR_PLATERECOG_PARA { DWORD dwSize; - BYTE byPrMode; /* ʶģʽ, ̬ͼ0/̬Ƶ1 */ - BYTE byPrScene; /* ʶij, ٳ0/ٳ1 */ - BYTE byPrDetRect; /* 0:ȫĻ;1: */ - BYTE byPrPicQuality; /* ʶ𷵻صͼƬ, 0:/3: */ - BYTE byPrPicMode;/*ʶ𷵻صͼƬֱ: JPEG_MODE_D1, JPEG_MODE_CIF, JPEG_MODE_QCIF */ - BYTE byPlateOsdDisplay; /* OSDǷʾ 0:ʾ/1:ʾ */ - BYTE byPrProvCharIndex; /* ʶʡ׺ֶӦ */ - BYTE byPrProvCharIndex1; /* ʶ𳣼׺1Ӧ */ - BYTE byPrProvCharIndex2; /* ʶ𳣼׺2Ӧ */ + BYTE byPrMode; /* 车牌识别的模式, 静态图像0/动态视频1 */ + BYTE byPrScene; /* 车牌识别的场景, 低速场景0/高速场景1 */ + BYTE byPrDetRect; /* 0:全屏幕;1:中心区域 */ + BYTE byPrPicQuality; /* 车牌识别返回的图片质量, 0:最低/3:最高 */ + BYTE byPrPicMode;/*车牌识别返回的图片分辨率: JPEG_MODE_D1, JPEG_MODE_CIF, JPEG_MODE_QCIF */ + BYTE byPlateOsdDisplay; /* 车牌OSD是否显示 0:不显示/1:显示 */ + BYTE byPrProvCharIndex; /* 车牌识别省份首汉字对应的索引 */ + BYTE byPrProvCharIndex1; /* 车牌识别常见首汉字1对应的索引 */ + BYTE byPrProvCharIndex2; /* 车牌识别常见首汉字2对应的索引 */ BYTE byRes[7]; }NET_DVR_PLATERECOG_PARA, *LPNET_DVR_PLATERECOG_PARA; -/* ̬ȡ֤ϵͳ,òĽṹ*/ +/* 动态取证系统,限速设置参数的结构*/ typedef struct tagNET_DVR_SPEEDLMT_PARA { - BYTE bStartMaxSpeedLimit; /* */ - BYTE bStartMinSpeedLimit; /* */ + BYTE bStartMaxSpeedLimit; /* 开启高速限制 */ + BYTE bStartMinSpeedLimit; /* 开启低速限制 */ BYTE byRes[6]; - DWORD dwMaxSpeedLimit; /* */ - DWORD dwMinSpeedLimit; /* */ + DWORD dwMaxSpeedLimit; /* 最高限速 */ + DWORD dwMinSpeedLimit; /* 最低限速 */ }NET_DVR_SPEEDLMT_PARA, *LPNET_DVR_SPEEDLMT_PARA; -/* ̬ȡ֤ϵͳ,ƱȶԲĽṹ*/ +/* 动态取证系统,车牌比对参数的结构*/ typedef struct tagNET_DVR_PLATECHECK_PARA { - BYTE bAlarmWhenChecked; /* ɹǷ񱨾 */ - BYTE bInformWhenChecked; /* ɹǷԻʾ */ + BYTE bAlarmWhenChecked; /* 稽查成功是否报警 */ + BYTE bInformWhenChecked; /* 稽查成功是否对话框提示 */ BYTE byRes[6]; - NET_DVR_IPADDR struBlockFtpServer; /* ֹFTPַ */ + NET_DVR_IPADDR struBlockFtpServer; /* 禁止名单FTP服务器地址 */ }NET_DVR_PLATECHECK_PARA, *LPNET_DVR_PLATECHECK_PARA; typedef struct tagNET_DVR_ENFORCESYS_PARA { DWORD dwSize; - NET_DVR_SPEEDLMT_PARA struSpeedLmtPara; /**/ - NET_DVR_PLATECHECK_PARA struPlateCheckPara; /*Ʊȶ*/ - BYTE bySelPeccType; /*ǷѡΥ*/ - BYTE byEnfOptHabit; /*ȡ֤ϰ, 0:ȡ֤;1:̰ȡ֤*/ - /*Ԥ֡ʵģʽ֣ - A ر adjPrevFpsMode=0 - Թ̶֡(25FPS)Ԥ - B ׼ adjPrevFpsMode=1 - Թ̶֡(6FPS)Ԥ - C Ӧ adjPrevFpsMode=2 - GPSٶϢ̬Ԥ֡ʣ - 3ЧGPS£Թ̶֡Ԥ*/ + NET_DVR_SPEEDLMT_PARA struSpeedLmtPara; /*限速设置*/ + NET_DVR_PLATECHECK_PARA struPlateCheckPara; /*车牌比对*/ + BYTE bySelPeccType; /*是否选择违章类型*/ + BYTE byEnfOptHabit; /*取证操作习惯, 0:长按取证;1:短按两次取证*/ + /*预览帧率调节模式分三种: + A 关闭 adjPrevFpsMode=0 + 以固定高帧率(25FPS)预览 + B 标准 adjPrevFpsMode=1 + 以固定低帧率(6FPS)预览 + C 自适应 adjPrevFpsMode=2 + 根据GPS速度信息动态调整预览帧率, + 3秒无有效GPS的情况下,以固定高帧率预览*/ BYTE byAdjPrevFpsMode; BYTE byRes1; - NET_DVR_IPADDR struUploadServerIp; //ϴַ + NET_DVR_IPADDR struUploadServerIp; //上传服务器地址 WORD wUploadServerPort; BYTE byRes2[18]; }NET_DVR_ENFORCESYS_PARA, *LPNET_DVR_ENFORCESYS_PARA; typedef struct tagNET_DVR_PUSHMODEPARAM { - //ֱģʽUDPԤģʽ1-ͬ˿ڶ·2-һ˿һ· + //直连模式下UDP预览模式,1-同端口多路流,2-一端口一路流 BYTE byUdpPreviewMode; - //Խģʽ0-Խ1-תSDKIJɼͲţ + //语音对讲工作模式,0-语音对讲,1-语音转发(SDK不进行语音的采集和播放) BYTE byVoiceWorkMode; BYTE byRes[18]; }NET_DVR_PUSHMODEPARAM, *LPNET_DVR_PUSHMODEPARAM; -#define MAX_ALARMHOST_ALARMIN_NUM 512//籨󱨾 -#define MAX_ALARMHOST_ALARMOUT_NUM 512//籨󱨾 +#define MAX_ALARMHOST_ALARMIN_NUM 512//网络报警主机最大报警输入口数 +#define MAX_ALARMHOST_ALARMOUT_NUM 512//网络报警主机最大报警输出口数 -#define ALARMHOST_MAX_AUDIOOUT_NUM 32//籨 -#define ALARMHOST_MAX_ELECTROLOCK_NUM 32//籨 -#define ALARMHOST_MAX_MOBILEGATE_NUM 32//籨ƶ -#define ALARMHOST_MAX_SIREN_NUM 8 // 󾯺Ŀ -#define MAX_ALARMHOST_SUBSYSTEM 32//ϵͳ -#define ALARMHOST_DETECTOR_SERIAL_LEN 9//̽кų -#define ALARMHOST_DETECTOR_SERIAL_LEN_V50 16 //̽кV50 -#define MAX_DETECTOR_NUM 128//̽ -#define MAX_DETECTOR_NUM_V51 256 //̽ -#define MAX_REPEATER_NUM 16 //м -#define MAX_OUTPUT_MODULE_NUM 64 //ģ -#define MAX_ELECTRIC_LOCK_NUM 64 // +#define ALARMHOST_MAX_AUDIOOUT_NUM 32//网络报警主机最大语音输出数 +#define ALARMHOST_MAX_ELECTROLOCK_NUM 32//网络报警主机最大电锁数 +#define ALARMHOST_MAX_MOBILEGATE_NUM 32//网络报警主机最大移动门数 +#define ALARMHOST_MAX_SIREN_NUM 8 // 最大警号数目 +#define MAX_ALARMHOST_SUBSYSTEM 32//报警主机最大子系统数 +#define ALARMHOST_DETECTOR_SERIAL_LEN 9//报警主机关联探测器序列号长度 +#define ALARMHOST_DETECTOR_SERIAL_LEN_V50 16 //报警主机关联探测器序列号V50长度 +#define MAX_DETECTOR_NUM 128//最大关联探测器数 +#define MAX_DETECTOR_NUM_V51 256 //最大关联探测器数 +#define MAX_REPEATER_NUM 16 //最大中继器数 +#define MAX_OUTPUT_MODULE_NUM 64 //最大输出模块数 +#define MAX_ELECTRIC_LOCK_NUM 64 //最大电锁数量 -// +//传感器类型 typedef enum tagSENSOR_TYPE { - SENSOR_TYPE_NONE = 0, // - SENSOR_TYPE_TEMPERATURE = 1, // ¶ - SENSOR_TYPE_HUMIDITY , // ʪ - SENSOR_TYPE_WINDSPEED, // - SENSOR_TYPE_GAS, // - SENSOR_AC_VOLTAGE, // ѹ - SENSOR_AC_CURRENT, // - SENSOR_DC_VOLTAGE, // ֱѹ - SENSOR_DC_CURRENT, // ֱ - SENSOR_WATER_PRESSURE, // ˮѹ - SENSOR_PRESSURE_TRANSMITTER, // ѹ - SENSOR_FLOW_TRANSMITTER, // - SENSOR_WATER_LEAKAGE, // ©ˮ - SENSOR_INTERGRATED_TEMPERATURE_DETECTOR,//һ廯± - SENSOR_ISOLATION_TEMPERATURE_DETECTOR, //ʽ± - SENSOR_RESIDUAL_CHLORINE, // - SENSOR_TYPE_AC_TERMINAL = 16, // AC - SENSOR_TYPE_AC_SOCKET = 17, // AC - SENSOR_TYPE_HUMITURE, // ʪ - SENSOR_TYPE_FLOW, // - SENSOR_LIQUID_LEVEL, // Һλ - SENSOR_TYPE_ARC, // 绡 - SENSOR_TYPE_UNKNOW = 255 // δ + SENSOR_TYPE_NONE = 0, // 无 + SENSOR_TYPE_TEMPERATURE = 1, // 温度 + SENSOR_TYPE_HUMIDITY , // 湿度 + SENSOR_TYPE_WINDSPEED, // 风速 + SENSOR_TYPE_GAS, // 气体 + SENSOR_AC_VOLTAGE, // 交流电压 + SENSOR_AC_CURRENT, // 交流电流 + SENSOR_DC_VOLTAGE, // 直流电压 + SENSOR_DC_CURRENT, // 直流电流 + SENSOR_WATER_PRESSURE, // 水压 + SENSOR_PRESSURE_TRANSMITTER, // 压力变送器 + SENSOR_FLOW_TRANSMITTER, // 流量变送器 + SENSOR_WATER_LEAKAGE, // 漏水传感器 + SENSOR_INTERGRATED_TEMPERATURE_DETECTOR,//一体化温变 + SENSOR_ISOLATION_TEMPERATURE_DETECTOR, //隔离式温变 + SENSOR_RESIDUAL_CHLORINE, //在线余氯仪 + SENSOR_TYPE_AC_TERMINAL = 16, // AC端子 + SENSOR_TYPE_AC_SOCKET = 17, // AC插座 + SENSOR_TYPE_HUMITURE, // 温湿度 + SENSOR_TYPE_FLOW, // 流量 + SENSOR_LIQUID_LEVEL, // 液位 + SENSOR_TYPE_ARC, // 电弧 + SENSOR_TYPE_UNKNOW = 255 // 未定义 }SENSOR_TYPE; typedef struct tagNET_DVR_SENSOR_INFO { - DWORD dwSize; // ṹС - BYTE byName[NAME_LEN]; // - BYTE byEnable; // Ƿ - BYTE byValid; // ǷЧ (òֻܻȡܸ) - BYTE byType; // ģ SENSOR_TYPE - BYTE byAlarmMode;//ģʽ֣15-HHHH14-HHHL12-HHLL8HLLL0-LLLL1111ϣ1110£1100£1000()0000() - float fMeasureHigh; // - float fMeasureLow; // - float fAlarm1; //1,1-4 - float fAlarm2; //2 - float fAlarm3; //3 - float fAlarm4; //4 - DWORD dwOsdCfg; //ģַӣλʾ0-15ӦƵͨ1-16 - float fSensitive; // ȱʾʵʱֵı仯ȵķΧʱʾʵʱֵ˱仯Ϊûз仯磺Ϊ0.1ʾǰֵ֮0.1ʱΪݷ仯0.1ҪϴΪ1ʾ仯1ʱϱ - BYTE bySensorStandard; //0- 0~20mA1- 0~5V2- 0~2.5Mpa3- 0~1.6Mpa4- 0~5m - BYTE byChan; //ģͨ - BYTE byRes3[114]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byName[NAME_LEN]; // 传感器名称 + BYTE byEnable; // 是否启用 + BYTE byValid; // 是否有效 传感器正常不正常(该参数只能获取不能个配置) + BYTE byType; // 模拟量类型 参照SENSOR_TYPE + BYTE byAlarmMode;//报警模式,五种,15-HHHH、14-HHHL、12-HHLL、8HLLL、0-LLLL,即:1111(上上上上),1110(上上上下),1100(上上下下),1000(上下下下),0000(下下下下) + float fMeasureHigh; // 量程上限 + float fMeasureLow; // 量程下限 + float fAlarm1; //报警限1,报警限1-4 依次增大 + float fAlarm2; //报警限2 + float fAlarm3; //报警限3 + float fAlarm4; //报警限4 + DWORD dwOsdCfg; //模拟量字符叠加,按位表示0-15对应视频通道1-16 + float fSensitive; // 灵敏度表示当实时值的变化超过灵敏度的范围时,则表示实时值发生了变化,否则认为没有发生变化。如:灵敏度为0.1,则表示前后检测的两个值之差大于0.1时,则认为数据发生变化大于0.1,需要上传。如果为1,则表示变化超过1时上报。 + BYTE bySensorStandard; //传感器规格,0- 0~20mA,1- 0~5V,2- 0~2.5Mpa,3- 0~1.6Mpa,4- 0~5m + BYTE byChan; //模拟量通道号 + BYTE byRes3[114]; // 保留字节 }NET_DVR_SENSOR_INFO, *LPNET_DVR_SENSOR_INFO; typedef struct tagNET_DVR_SIREN_PARAM { - DWORD dwSize; // ṹС - BYTE byName[NAME_LEN]; // - WORD wDelay; // ӳ λΪ, Χ 0~5599s 0ʾһֱ + DWORD dwSize; // 结构大小 + BYTE byName[NAME_LEN]; // 名称 + WORD wDelay; // 输出延迟 单位为秒, 范围 0~5599s 0表示一直有输出 BYTE byRes1[2]; - DWORD dwOverallEventJointSirenOn; //ȫ¼¼Ͱλʾbit0-, bit1-ȫּ̽,bit2-ϵ磬bit3-صѹ,bit4-绰ߵ,bit5-쳣,bit6-쳣, bit7-485ߣbit8- WIFIͨŹϣbit9-RFźŸŹ - DWORD dwSubsystemEventJointSirenOn[MAX_ALARMHOST_SUBSYSTEM/*32*/];//ϵͳ¼±ʾϵͳţÿһԪذλʾ¼ͣbit0- - BYTE byRes2[448]; // ֽڡ + DWORD dwOverallEventJointSirenOn; //全局事件联动警号输出开启,事件类型按位表示,bit0-主机防拆, bit1-全局键盘紧急报警,bit2-交流电断电,bit3-电池电压低,bit4-电话线掉线,bit5-有线网络异常,bit6-无线网络异常, bit7-键盘485断线,bit8- WIFI通信故障,bit9-RF信号干扰故障 + DWORD dwSubsystemEventJointSirenOn[MAX_ALARMHOST_SUBSYSTEM/*32*/];//子系统事件联动警号输出开启。数组下标表示子系统号,每一个元素按位表示事件类型,bit0-紧急报警 + BYTE byRes2[448]; // 保留字节   }NET_DVR_SIREN_PARAM, *LPNET_DVR_SIREN_PARAM; typedef struct tagNET_DVR_AIR_CONDITION_PARAM { - DWORD dwSize; // ṹС - BYTE byEnable; // 0--ػ 1-- - BYTE byMode; // յģʽ - BYTE byTemperature; // ¶ȣֵʾ ͨΪ16-30 - BYTE byAirConditionNo; // յ - BYTE byRes[8]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 0--关机 1--开机 + BYTE byMode; // 空调模式 + BYTE byTemperature; // 温度,具体值表示 通常为16-30度 + BYTE byAirConditionNo; // 空调编号 + BYTE byRes[8]; // 保留字节 }NET_DVR_AIR_CONDITION_PARAM, *LPNET_DVR_AIR_CONDITION_PARAM; typedef enum tagDETECTOR_TYPE { - PANIC_BUTTON = 0, // ť - MAGNETIC_CONTACT, // Ŵ - SMOKE_DETECTOR, // ̸̽ - ACTIVE_INFRARED_DETECTOR, // ̽ - PASSIVE_INFRARED_DETECTOR, // ̽ - GLASS_BREAK_DETECTOR, // ̽ - VIBRATION_DETECTOR, // ̽ - DUAL_TECHNOLOGY_PIR_DETECTOR, // ˫̽ - TRIPLE_TECHNOLOGY_PIR_DETECTOR, // ̽ - HUMIDITY_DETECTOR, // ʪ̽ - TEMPERATURE_DETECTOR, // ¸̽ - COMBUSTIBLE_GAS_DETECTOR, // ȼ̽ - DYNAMIC_SWITCH, //涯 - CONTROL_SWITCH, //ƿ - SMART_LOCK, // - WATER_DETECTOR, //ˮ̽ - DISPLACEMENT_DETECTOR, //λ̽ - SINGLE_INFRARED_DETECTOR, //Ŵ̽ - SINGLE_ZONE_MODULE, //ߵģ - CURTAIN_INFRARED_DETECTOR, //Ļ̽19 - UNKNOWN,//δ֪20 - DOORBELL_SWITCH=21, //忪21 - MEDICAL_HELP_BUTTON, //ҽť - OUTDOOR_DUAL_TECH, //˫ + PANIC_BUTTON = 0, // 紧急按钮 + MAGNETIC_CONTACT, // 门磁 + SMOKE_DETECTOR, // 烟感探测器 + ACTIVE_INFRARED_DETECTOR, // 主动红外探测器 + PASSIVE_INFRARED_DETECTOR, // 被动红外探测器 + GLASS_BREAK_DETECTOR, // 玻璃破碎探测器 + VIBRATION_DETECTOR, // 震动探测器 + DUAL_TECHNOLOGY_PIR_DETECTOR, // 双鉴探测器 + TRIPLE_TECHNOLOGY_PIR_DETECTOR, // 三技术探测器 + HUMIDITY_DETECTOR, // 湿度探测器 + TEMPERATURE_DETECTOR, // 温感探测器 + COMBUSTIBLE_GAS_DETECTOR, // 可燃气体探测器 + DYNAMIC_SWITCH, //随动开关 + CONTROL_SWITCH, //控制开关 + SMART_LOCK, //智能锁 + WATER_DETECTOR, //水浸探测器 + DISPLACEMENT_DETECTOR, //位移探测器 + SINGLE_INFRARED_DETECTOR, //单体门磁探测器 + SINGLE_ZONE_MODULE, //无线单防区模块 + CURTAIN_INFRARED_DETECTOR, //幕帘红外人体探测器19 + UNKNOWN,//未知20 + DOORBELL_SWITCH=21, //门铃开关21 + MEDICAL_HELP_BUTTON, //医疗求助按钮 + OUTDOOR_DUAL_TECH, //室外双鉴传感器 - OTHER_DETECTOR = 0xffff // ̽ + OTHER_DETECTOR = 0xffff // 其它探测器 }DETECTOR_TYPE; typedef struct tagNET_DVR_ALARMIN_PARAM @@ -23970,34 +23970,34 @@ typedef struct tagNET_DVR_ALARMIN_PARAM DWORD dwSize; BYTE byName[NAME_LEN]; WORD wDetectorType; // DETECTOR_TYPE - BYTE byType; //ͣ0:ʱ,1-24Сʱ,2-ʱ ,3-ڲ4-Կ׷ 5-𾯷 6-ܽ 7-24Сʱ 8-24Сʱ9-24Сʱ𶯷,10-Žŷ11-Žŷ 12-ʱ13-0xff- - BYTE byUploadAlarmRecoveryReport; //Ƿϴָ棬0-ϴ1-ϴ - DWORD dwParam; // ʱʱ೤ʱ, бʱʱͨ , ÷ʽͨеbySupportAlarmInDelayֶ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];/*ʱʱ*/ - BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // - BYTE byAssociateSirenOut[8]; // 0 ʾ1 ֵΪ1ʾ 0 ʾ - BYTE bySensitivityParam;//Ȳ, 0-10ms1-250ms2-500ms3-750ms - BYTE byArrayBypass;//Ƿ·,0-֧·,1-֧· - BYTE byJointSubSystem; //ϵͳţòֻܻȡ - BYTE byModuleStatus; //ģ״̬ 1- 2- - WORD wModuleAddress; //ģַչģ0~2550xFFFFʾЧ - BYTE byModuleChan; //ģͨţ1ʼֵģ0xFFʾЧ - BYTE byModuleType; //ģͣ1-ط2-3-˫4-85-8·ģ, 6-, 7-1ž͵ؿ8-2ž͵ؿ9-4ž͵ؿ10-8ߡ11-̡12-8ߡ13-չ - WORD wZoneIndex; //ţòֻܻȡ - WORD wInDelay; //ʱ0-255 - WORD wOutDelay; //˳ʱ0-255 - BYTE byAlarmType; // 0-Ч1-2- - BYTE byZoneResistor; //裬λǧŷ 0-Ч 1--2.2 2--3.33--4.74--5.6 5--8.2 0xff-Զ - float fZoneResistorManual;/*ֶ裬1.0-10.0ȷСһλλǧŷbyZoneResistorΪ0xffʱЧ*/ - BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //̽кţֻ - BYTE byZoneSignalType; //źŴ(ֻ)0-߷1-߷ - BYTE byDisableDetectorTypeCfg; //̽Ƿ񲻿䣬0-䣬1- - BYTE byTimeOutRange; // ʱʱ䷶Χ0:1~599s,1:1~65535s - BYTE byAssociateLampOut[8];// 0 ʾ1 ֵΪ1ʾ 0 ʾ - WORD wTimeOut; //ʱʱ䣬 - BYTE byDetectorSignalIntensity; // ̽źǿȣֻ0~100 - BYTE byTimeOutMethod; //ʱʱʽ0-ʱ1-ָʱ - BYTE byRes3[8]; // ֽ + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区 ,12-超时防区,13-紧急防区,0xff-无 + BYTE byUploadAlarmRecoveryReport; //是否上传防区报警恢复报告,0-不上传,1-上传 + DWORD dwParam; // 防区参数 延时防区延时多长时间, 动环报警主机和自助行报警主机的延时时间通过这个参数来设置 , 具体用哪种设置方式通过能力集中的bySupportAlarmInDelay字段来区别 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];/*布防时间时间段*/ + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // 报警输入关联报警输出 + BYTE byAssociateSirenOut[8]; // 警号输出 数组0 表示警号1 值为1表示输出 0 表示不输出 + BYTE bySensitivityParam;//防区灵敏度参数, 0-10ms、1-250ms、2-500ms、3-750ms + BYTE byArrayBypass;//是否加入旁路组,0-不支持组旁路,1-支持组旁路 + BYTE byJointSubSystem; //防区所属的子系统号,该参数只能获取 + BYTE byModuleStatus; //模块状态 1-在线 2-离线 + WORD wModuleAddress; //模块地址,扩展模块从0~255,0xFFFF表示无效 + BYTE byModuleChan; //模块通道号,从1开始,最大值根据模块类型来决定,0xFF表示无效 + BYTE byModuleType; //模块类型,1-本地防区,2-单防区,3-双防区,4-8防区,5-8路模拟量防区, 6-单防区触发器, 7-1门就地控制器、8-2门就地控制器、9-4门就地控制器、10-8防区无线、11-键盘、12-8防区有线、13-扩展防区 + WORD wZoneIndex; //防区号,该参数只能获取 + WORD wInDelay; //进入延时,0-255秒 + WORD wOutDelay; //退出延时,0-255秒 + BYTE byAlarmType; //报警器类型 0-无效,1-常开,2-常闭 + BYTE byZoneResistor; //防区电阻,单位千欧 0-无效 1--2.2 ,2--3.3,3--4.7,4--5.6 , 5--8.2 ,0xff-自定义 + float fZoneResistorManual;/*防区手动电阻,1.0-10.0,精确到小数点后一位,单位千欧,byZoneResistor为0xff时有效*/ + BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //探测器序列号,只读 + BYTE byZoneSignalType; //防区信号传输类型(只读),0-有线防区,1-无线防区 + BYTE byDisableDetectorTypeCfg; //探测是类型是否不可配,0-可配,1-不可配 + BYTE byTimeOutRange; // 超时时间范围,0:1~599s,1:1~65535s + BYTE byAssociateLampOut[8];// 警灯输出 数组0 表示警灯1 值为1表示输出 0 表示不输出 + WORD wTimeOut; //超时时间,秒 + BYTE byDetectorSignalIntensity; // 探测器信号强度(只读),0~100 + BYTE byTimeOutMethod; //超时防区计时方式:0-触发计时,1-恢复计时 + BYTE byRes3[8]; // 保留字节 }NET_DVR_ALARMIN_PARAM, *LPNET_DVR_ALARMIN_PARAM; typedef struct tagNET_DVR_ALARMIN_PARAM_V50 @@ -24005,100 +24005,100 @@ typedef struct tagNET_DVR_ALARMIN_PARAM_V50 DWORD dwSize; BYTE byName[NAME_LEN]; WORD wDetectorType; // DETECTOR_TYPE - BYTE byType; //ͣ0:ʱ,1-24Сʱ,2-ʱ ,3-ڲ4-Կ׷ 5-𾯷 6-ܽ 7-24Сʱ 8-24Сʱ9-24Сʱ𶯷 12-ʱ13-14-ȼ0xff- - BYTE byUploadAlarmRecoveryReport; //Ƿϴָ棬0-ϴ1-ϴ - DWORD dwParam; // ʱʱ೤ʱ, бʱʱͨ , ÷ʽͨеbySupportAlarmInDelayֶ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];/*ʱʱ*/ - BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // - BYTE byAssociateSirenOut[8]; // 0 ʾ1 ֵΪ1ʾ 0 ʾ - BYTE bySensitivityParam;//Ȳ, 0-10ms1-250ms2-500ms3-750ms - BYTE byArrayBypass;//Ƿ·,0-֧·,1-֧· - BYTE byJointSubSystem; //ϵͳţòֻܻȡ - BYTE byModuleStatus; //ģ״̬ 1- 2- - WORD wModuleAddress; //ģַչģ0~2550xFFFFʾЧ - BYTE byModuleChan; //ģͨţ1ʼֵģ0xFFʾЧ - BYTE byModuleType; //ģͣ1-ط2-3-˫4-85-8·ģ, 6-, 7-1ž͵ؿ8-2ž͵ؿ9-4ž͵ؿ10-8ߡ11-̡12-8ߡ13-չ - WORD wZoneIndex; //ţòֻܻȡ - WORD wInDelay; //ʱ0-255 - WORD wOutDelay; //˳ʱ0-255 - BYTE byAlarmType; // 0-Ч1-2- - BYTE byZoneResistor; //裬λǧŷ 0-Ч 1--2.2 2--3.33--4.74--5.6 5--8.2 0xff-Զ - float fZoneResistorManual;/*ֶ裬1.0-10.0ȷСһλλǧŷbyZoneResistorΪ0xffʱЧ*/ - BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN_V50]; //̽кţֻ - BYTE byZoneSignalType; //źŴ(ֻ)0-߷1-߷ - BYTE byDisableDetectorTypeCfg; //̽Ƿ񲻿䣬0-䣬1- - WORD wTimeOut; //ʱʱ䣬 - BYTE byAssociateLampOut[8];// 0 ʾ1 ֵΪ1ʾ 0 ʾ - BYTE byVoiceFileName[32]; //ļ - BYTE byTimeOutRange; // ʱʱ䷶Χ0:1~599s,1:1~65535s - BYTE byDetectorSignalIntensity; // ̽źǿȣֻ0~100 - BYTE byTimeOutMethod; //ʱʱʽ0-ʱ1-ָʱ - BYTE byAssociateFlashLamp;// 0-Ч1-2- - BYTE byStayAwayEnabled;// ʱڼ·ʹ 0-Ч1-ʹܣ2-ʹ - BYTE bySilentModeEnabled;// ģʽʹ 0-Ч1-ʹܣ2-ʹ - BYTE byRelativeChannel[RELATIVE_CHANNEL_LEN];// ͨţ0ʾЧһbyteֽڱʾһͨ - BYTE byDetectorVersion[VERSION_INFO_LEN]; //̽汾ֻ - BYTE byDetectorMAC[MACADDR_LEN]; //̽MACַֻ - BYTE byLinkageAlarmType; //ͣ1-𾯣2-ܣ3-4-Σ5- - BYTE byRes3[465]; // ֽ + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区 ,12-超时防区,13-紧急防区,14-燃气防区,0xff-无 + BYTE byUploadAlarmRecoveryReport; //是否上传防区报警恢复报告,0-不上传,1-上传 + DWORD dwParam; // 防区参数 延时防区延时多长时间, 动环报警主机和自助行报警主机的延时时间通过这个参数来设置 , 具体用哪种设置方式通过能力集中的bySupportAlarmInDelay字段来区别 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];/*布防时间时间段*/ + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // 报警输入关联报警输出 + BYTE byAssociateSirenOut[8]; // 警号输出 数组0 表示警号1 值为1表示输出 0 表示不输出 + BYTE bySensitivityParam;//防区灵敏度参数, 0-10ms、1-250ms、2-500ms、3-750ms + BYTE byArrayBypass;//是否加入旁路组,0-不支持组旁路,1-支持组旁路 + BYTE byJointSubSystem; //防区所属的子系统号,该参数只能获取 + BYTE byModuleStatus; //模块状态 1-在线 2-离线 + WORD wModuleAddress; //模块地址,扩展模块从0~255,0xFFFF表示无效 + BYTE byModuleChan; //模块通道号,从1开始,最大值根据模块类型来决定,0xFF表示无效 + BYTE byModuleType; //模块类型,1-本地防区,2-单防区,3-双防区,4-8防区,5-8路模拟量防区, 6-单防区触发器, 7-1门就地控制器、8-2门就地控制器、9-4门就地控制器、10-8防区无线、11-键盘、12-8防区有线、13-扩展防区 + WORD wZoneIndex; //防区号,该参数只能获取 + WORD wInDelay; //进入延时,0-255秒 + WORD wOutDelay; //退出延时,0-255秒 + BYTE byAlarmType; //报警器类型 0-无效,1-常开,2-常闭 + BYTE byZoneResistor; //防区电阻,单位千欧 0-无效 1--2.2 ,2--3.3,3--4.7,4--5.6 , 5--8.2 ,0xff-自定义 + float fZoneResistorManual;/*防区手动电阻,1.0-10.0,精确到小数点后一位,单位千欧,byZoneResistor为0xff时有效*/ + BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN_V50]; //探测器序列号,只读 + BYTE byZoneSignalType; //防区信号传输类型(只读),0-有线防区,1-无线防区 + BYTE byDisableDetectorTypeCfg; //探测是类型是否不可配,0-可配,1-不可配 + WORD wTimeOut; //超时时间,秒 + BYTE byAssociateLampOut[8];// 警灯输出 数组0 表示警灯1 值为1表示输出 0 表示不输出 + BYTE byVoiceFileName[32]; //语音文件名 + BYTE byTimeOutRange; // 超时时间范围,0:1~599s,1:1~65535s + BYTE byDetectorSignalIntensity; // 探测器信号强度(只读),0~100 + BYTE byTimeOutMethod; //超时防区计时方式:0-触发计时,1-恢复计时 + BYTE byAssociateFlashLamp;// 闪光灯输出 0-无效,1-不输出,2-输出 + BYTE byStayAwayEnabled;// 及时防区在家旁路使能 0-无效,1-不使能,2-使能 + BYTE bySilentModeEnabled;// 静音模式使能 0-无效,1-不使能,2-使能 + BYTE byRelativeChannel[RELATIVE_CHANNEL_LEN];// 关联的通道号,0表示无效,一个byte字节表示一个通道号 + BYTE byDetectorVersion[VERSION_INFO_LEN]; //探测器版本,只读 + BYTE byDetectorMAC[MACADDR_LEN]; //探测器MAC地址,只读 + BYTE byLinkageAlarmType; //关联报警类型:1-火警,2-监管,3-联动,4-屏蔽,5-故障 + BYTE byRes3[465]; // 保留字节 }NET_DVR_ALARMIN_PARAM_V50, *LPNET_DVR_ALARMIN_PARAM_V50; -#define MAX_MAX_ALARMIN_NUM 64 /* ȡ*/ +#define MAX_MAX_ALARMIN_NUM 64 /* 批量获取最大防区数*/ typedef struct tagNET_DVR_MULTI_ALARMIN_COND { DWORD dwSize; - int iZoneNo[MAX_MAX_ALARMIN_NUM]; //,0ʼС0ʾЧ + int iZoneNo[MAX_MAX_ALARMIN_NUM]; //防区号,从0开始,小于0表示无效 BYTE byRes[256]; }NET_DVR_MULTI_ALARMIN_COND, *LPNET_DVR_MULTI_ALARMIN_COND; typedef struct tagNET_DVR_SINGLE_ALARMIN_PARAM { DWORD dwSize; - WORD wZoneNo; //ţòֻܻȡ - BYTE byJointSubSystem; //ϵͳţòֻܻȡ - BYTE byType; //ͣ0:ʱ,1-24Сʱ,2-ʱ ,3-ڲ4-Կ׷ 5-𾯷 6-ܽ 7-24Сʱ 8-24Сʱ9-24Сʱ𶯷,12-ʱ,13-14-ȼ0xff- + WORD wZoneNo; //防区号,该参数只能获取 + BYTE byJointSubSystem; //防区所属的子系统号,该参数只能获取 + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,12-超时防区,13-紧急防区14-燃气防区,0xff-无 BYTE byName[NAME_LEN]; WORD wDetectorType; // DETECTOR_TYPE - WORD wInDelay; //ʱ0-255 - WORD wOutDelay; //˳ʱ0-255 - BYTE byAlarmType; // 0-Ч 1- 1- - BYTE byZoneSignalType; //źŴͣ0-߷1-߷ - BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //̽кţֻ - BYTE byDisableDetectorTypeCfg; //̽Ƿ񲻿䣬0-䣬1- - BYTE byTimeOutRange; // ʱʱ䷶Χ0:1~599s,1:1~65535s - BYTE byDetectorSignalIntensity; // ̽źǿȣֻ0~100 - WORD wTimeOut; //ʱʱ䣬 - BYTE byTimeOutMethod; //ʱʱʽ0-ʱ1-ָʱ - BYTE byAssociateFlashLamp;// 0-Ч1-2- - BYTE byStayAwayEnabled;// ʱڼ·ʹ 0-Ч1-ʹܣ2-ʹ - BYTE bySilentModeEnabled;// ģʽʹ 0-Ч1-ʹܣ2-ʹ - BYTE byRes2[110]; // ֽ + WORD wInDelay; //进入延时,0-255秒 + WORD wOutDelay; //退出延时,0-255秒 + BYTE byAlarmType; //报警器类型 0-无效 1-常开 1-常闭 + BYTE byZoneSignalType; //防区信号传输类型,0-有线防区,1-无线防区 + BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //探测器序列号,只读 + BYTE byDisableDetectorTypeCfg; //探测是类型是否不可配,0-可配,1-不可配 + BYTE byTimeOutRange; // 超时时间范围,0:1~599s,1:1~65535s + BYTE byDetectorSignalIntensity; // 探测器信号强度(只读),0~100 + WORD wTimeOut; //超时时间,秒 + BYTE byTimeOutMethod; //超时防区计时方式:0-触发计时,1-恢复计时 + BYTE byAssociateFlashLamp;// 闪光灯输出 0-无效,1-不输出,2-输出 + BYTE byStayAwayEnabled;// 及时防区在家旁路使能 0-无效,1-不使能,2-使能 + BYTE bySilentModeEnabled;// 静音模式使能 0-无效,1-不使能,2-使能 + BYTE byRes2[110]; // 保留字节 }NET_DVR_SINGLE_ALARMIN_PARAM, *LPNET_DVR_SINGLE_ALARMIN_PARAM; typedef struct tagNET_DVR_SINGLE_ALARMIN_PARAM_V50 { DWORD dwSize; - WORD wZoneNo; //ţòֻܻȡ - BYTE byJointSubSystem; //ϵͳţòֻܻȡ - BYTE byType; //ͣ0:ʱ,1-24Сʱ,2-ʱ ,3-ڲ4-Կ׷ 5-𾯷 6-ܽ 7-24Сʱ 8-24Сʱ9-24Сʱ𶯷,12-ʱ,13-14-ȼ0xff- + WORD wZoneNo; //防区号,该参数只能获取 + BYTE byJointSubSystem; //防区所属的子系统号,该参数只能获取 + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,12-超时防区,13-紧急防区14-燃气防区,0xff-无 BYTE byName[NAME_LEN]; WORD wDetectorType; // DETECTOR_TYPE - WORD wInDelay; //ʱ0-255 - WORD wOutDelay; //˳ʱ0-255 - BYTE byAlarmType; // 0-Ч 1- 1- - BYTE byZoneSignalType; //źŴͣ0-߷1-߷ - BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //̽кţֻ - BYTE byDisableDetectorTypeCfg; //̽Ƿ񲻿䣬0-䣬1- - BYTE byTimeOutRange; // ʱʱ䷶Χ0:1~599s,1:1~65535s - BYTE byDetectorSignalIntensity; // ̽źǿȣֻ0~100 - WORD wTimeOut; //ʱʱ䣬 - BYTE byTimeOutMethod; //ʱʱʽ0-ʱ1-ָʱ - BYTE byAssociateFlashLamp;// 0-Ч1-2- - BYTE byStayAwayEnabled;// ʱڼ·ʹ 0-Ч1-ʹܣ2-ʹ - BYTE bySilentModeEnabled;// ģʽʹ 0-Ч1-ʹܣ2-ʹ + WORD wInDelay; //进入延时,0-255秒 + WORD wOutDelay; //退出延时,0-255秒 + BYTE byAlarmType; //报警器类型 0-无效 1-常开 1-常闭 + BYTE byZoneSignalType; //防区信号传输类型,0-有线防区,1-无线防区 + BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //探测器序列号,只读 + BYTE byDisableDetectorTypeCfg; //探测是类型是否不可配,0-可配,1-不可配 + BYTE byTimeOutRange; // 超时时间范围,0:1~599s,1:1~65535s + BYTE byDetectorSignalIntensity; // 探测器信号强度(只读),0~100 + WORD wTimeOut; //超时时间,秒 + BYTE byTimeOutMethod; //超时防区计时方式:0-触发计时,1-恢复计时 + BYTE byAssociateFlashLamp;// 闪光灯输出 0-无效,1-不输出,2-输出 + BYTE byStayAwayEnabled;// 及时防区在家旁路使能 0-无效,1-不使能,2-使能 + BYTE bySilentModeEnabled;// 静音模式使能 0-无效,1-不使能,2-使能 BYTE byRes3[2]; - BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // - BYTE byRes2[128]; // ֽ + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // 报警输入关联报警输出 + BYTE byRes2[128]; // 保留字节 }NET_DVR_SINGLE_ALARMIN_PARAM_V50, *LPNET_DVR_SINGLE_ALARMIN_PARAM_V50; typedef struct tagNET_DVR_ALARMIN_PARAM_LIST @@ -24117,260 +24117,260 @@ typedef struct tagNET_DVR_ALARMIN_PARAM_LIST_V50 typedef struct tagNET_DVR_ALARMOUT_PARAM { - DWORD dwSize; // ṹС - BYTE byName[NAME_LEN]; // - WORD wDelay; // ӳ λs, Χ0~3599s 0 ʾһֱ - WORD wTriggerIndex; //ţòֻܻȡ - BYTE byAssociateAlarmIn[MAX_ALARMHOST_ALARMIN_NUM]; //ʾŵıͨ ͬʱһ±0ʾ1 0- 1- - BYTE byModuleType; //Ӵͣ1-ش 2-4·3-8· 4-5-32·6-1ž͵ؿ7-2ž͵ؿ8-4ž͵ؿ,9-2·10-̣11-չ - BYTE byModuleStatus; //Ӵ״̬ 1- 2- - WORD wModuleAddress; //Ӵַչģ0~2550xFFFFʾЧ - BYTE byModuleChan; //Ӵͨţ1ʼֵģ0xFFʾЧ - BYTE byWorkMode; //ģʽ1-2-涯 - BYTE byAlarmOutMode; //ģʽ1-ģʽ2-ģʽ - BYTE byTimeOn; //ʱ 1~60s - BYTE byTimeOff; //ʱ 1~60s - BYTE byDurationConstOutputEnable; //̵ʹ - BYTE byRes2[50]; //ֽ + DWORD dwSize; // 结构体大小 + BYTE byName[NAME_LEN]; // 名称 + WORD wDelay; // 输出延迟 单位s, 范围:0~3599s 0 表示一直有输出 + WORD wTriggerIndex; //触发器号,该参数只能获取 + BYTE byAssociateAlarmIn[MAX_ALARMHOST_ALARMIN_NUM]; //表示警号的报警输入通道 (多个报警输入同时触发一个警号输出)数组下标0表示报警输入1,依次类推 0-不跟随 1-跟随 + BYTE byModuleType; //外接触发器类型,1-本地触发器, 2-4路触发器,3-8路触发器 4-单防区触发器,5-32路触发器,6-1门就地控制器、7-2门就地控制器、8-4门就地控制器,9-2路触发器,10-键盘,11-扩展触发器 + BYTE byModuleStatus; //外接触发器状态 1-在线 2-离线 + WORD wModuleAddress; //外接触发器地址,扩展模块从0~255,0xFFFF表示无效 + BYTE byModuleChan; //外接触发器通道号,从1开始,最大值根据模块类型来决定,0xFF表示无效 + BYTE byWorkMode; //工作模式,1-联动,2-随动 + BYTE byAlarmOutMode; //输出模式,1-非脉冲模式,2-脉冲模式 + BYTE byTimeOn; //开时间 1~60s + BYTE byTimeOff; //关时间 1~60s + BYTE byDurationConstOutputEnable; //继电器常开使能 + BYTE byRes2[50]; //保留字节 }NET_DVR_ALARMOUT_PARAM, *LPNET_DVR_ALARMOUT_PARAM; typedef struct tagNET_DVR_ALARMIN_SETUP { - BYTE byAssiciateAlarmIn[MAX_ALARMHOST_ALARMIN_NUM];//ͨ ±0Ӧ1 - BYTE byRes[100];//ֽ + BYTE byAssiciateAlarmIn[MAX_ALARMHOST_ALARMIN_NUM];//报警输入通道 数组下标0对应报警输入口1,依次类推 + BYTE byRes[100];//保留字节 }NET_DVR_ALARMIN_SETUP, *LPNET_DVR_ALARMIN_SETUP; typedef struct tagNET_DVR_ALARMHOST_MAIN_STATUS { DWORD dwSize; - BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//ڲ״̬(֧512ڲѯ)0-Ӧڴڳ״̬1-Ӧڴڲ״̬ - BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM];//ڱ״̬(֧512ڲѯ)0-Ӧڵǰޱ1-Ӧڵǰб - BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM];//״̬(֧512ڲѯ)0-Ӧޱ1-Ӧб - BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; // ·״̬ ±ʾ0Ӧ1 0-ʾû· 1-ʾ· - BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM]; //ϵͳ״̬,0-Ӧϵͳڳ״̬1-Ӧϵͳڲ״̬ - BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM];//ڹ״̬0-Ӧڴ״̬1-Ӧڴڹ״̬ - BYTE byRes[56]; // ֽ + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口布防状态,(最大支持512个报警输入口查询),0-对应报警输入口处于撤防状态,1-对应报警输入口处于布防状态 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口报警状态,(最大支持512个报警输入口查询),0-对应报警输入口当前无报警,1-对应报警输入口当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM];//报警输出口状态,(最大支持512个报警输出口查询),0-对应报警输出口无报警,1-对应报警输出口有报警 + BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; // 旁路状态 数组下标表示0对应报警输入口1 0-表示报警输入口没有旁路 1-表示报警输入口旁路 + BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM]; //子系统布防状态,0-对应子系统处于撤防状态,1-对应子系统处于布防状态 + BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口故障状态,0-对应报警输入口处于正常状态,1-对应报警输入口处于故障状态 + BYTE byRes[56]; // 保留字节 }NET_DVR_ALARMHOST_MAIN_STATUS, *LPNET_DVR_ALARMHOST_MAIN_STATUS; typedef struct tagNET_DVR_ALARMHOST_MAIN_STATUS_V40 { DWORD dwSize; - BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬(֧512ѯ)0-Ӧڳ״̬1-Ӧڲ״̬ - BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬(֧512ѯ)0-Ӧǰޱ1-Ӧǰб - BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //״̬(֧512ѯ)0-Ӧޱ1-Ӧб - BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; //·״̬ ±ʾ0Ӧ1 0-ʾû· 1-ʾ· - BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //ϵͳ״̬,0-Ӧϵͳڳ״̬1-Ӧϵͳڲ״̬ - BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬0-Ӧ״̬1-Ӧڹ״̬ - BYTE byAlarmInMemoryStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬ 0-Ӧǰޱ1-Ӧǰб - BYTE byAlarmInTamperStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬0-Ӧޱ1-Ӧб - BYTE byEnableSubSystem[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //ϵͳ״̬0-Ч1-Ӧϵͳδã2-Ӧϵͳ - BYTE bySubSystemGuardType[MAX_ALARMHOST_SUBSYSTEM]; //ϵͳ״̬0-Ч1-2-ʱ3-ڼҲ - BYTE byRes[448]; //ֽ + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区布防状态,(最大支持512个防区查询),0-对应防区处于撤防状态,1-对应防区处于布防状态 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区报警状态,(最大支持512个防区查询),0-对应防区当前无报警,1-对应防区当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器状态,(最大支持512个触发器查询),0-对应触发器无报警,1-对应触发器有报警 + BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; //旁路状态 数组下标表示0对应防区1 0-表示防区没有旁路 1-表示防区旁路 + BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统布防状态,0-对应子系统处于撤防状态,1-对应子系统处于布防状态 + BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区故障状态,0-对应防区处于正常状态,1-对应防区处于故障状态 + BYTE byAlarmInMemoryStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区报警记忆状态, 0-对应防区当前无报警,1-对应防区当前有报警 + BYTE byAlarmInTamperStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区防拆状态,0-对应防区无报警,1-对应防区有报警 + BYTE byEnableSubSystem[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统启用状态,0-无效,1-对应子系统未启用,2-对应子系统启用 + BYTE bySubSystemGuardType[MAX_ALARMHOST_SUBSYSTEM]; //子系统布放状态,0-无效,1-外出布防,2-即时布防,3-在家布防 + BYTE byRes[448]; //保留字节 }NET_DVR_ALARMHOST_MAIN_STATUS_V40, *LPNET_DVR_ALARMHOST_MAIN_STATUS_V40; typedef struct tagNET_DVR_ALARMHOST_MAIN_STATUS_V51 { DWORD dwSize; - BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬(֧512ѯ)0xff-Ч0-Ӧڳ״̬1-Ӧڲ״̬2-Ӧڲ - BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬״̬(֧512ѯ)0xff-Ч0-Ӧǰޱ1-Ӧǰб - BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //״̬(֧512ѯ)0xff-Ч0-Ӧޱ1-Ӧб2-δ3-ߣ4-쳣 - BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; //·״̬±ʾ0Ӧ10xff-Ч0-ʾû· 1-ʾ· - BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //ϵͳ״̬0xff-Ч0-Ӧϵͳڳ״̬1-Ӧϵͳڲ״̬2-Ӧϵͳڲ - BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬0xff-Ч0-Ӧ״̬1-Ӧڹ״̬ - BYTE byAlarmInMemoryStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬״̬ 0xff-Ч0-Ӧǰޱ1-Ӧǰб - BYTE byAlarmInTamperStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬0xff-Ч0-Ӧޱ1-Ӧб - BYTE byEnableSubSystem[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //ϵͳ״̬0-Ч1-Ӧϵͳδã2-Ӧϵͳ - BYTE bySubSystemGuardType[MAX_ALARMHOST_SUBSYSTEM]; //ϵͳͣ0-Ч1-2-ʱ3-ڼҲ - BYTE bySubSystemAlarm[MAX_ALARMHOST_SUBSYSTEM]; //ϵͳ״̬0-Ч1-2- - BYTE byAlarmOutCharge[MAX_ALARMHOST_ALARMOUT_NUM]; //״̬(֧512ѯ)0-Ч1-2- - BYTE byAlarmOutTamperStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //״̬(֧512ѯ)0-Ч1-2-޷ - BYTE byAlarmInShieldedStatus[MAX_ALARMHOST_ALARMIN_NUM]; //״̬0-Ч1-Σ2- - BYTE byAlarmOutLinkage[MAX_ALARMHOST_ALARMOUT_NUM]; //¼ͣ(֧512ѯ)0-Ч1-2-3-4-ֶ - BYTE byRes[512]; //ֽ + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区布防状态,(最大支持512个防区查询),0xff-无效,0-对应防区处于撤防状态,1-对应防区处于布防状态,2-对应防区处于布防中 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区报警状态(触发状态),(最大支持512个防区查询),0xff-无效,0-对应防区当前无报警,1-对应防区当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器状态,(最大支持512个触发器查询),0xff-无效,0-对应触发器无报警,1-对应触发器有报警,2-未关联,3-离线,4-心跳异常 + BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区旁路状态,数组下标表示0对应防区1,0xff-无效,0-表示防区没有旁路 1-表示防区旁路 + BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统布防状态,0xff-无效,0-对应子系统处于撤防状态,1-对应子系统处于布防状态,2-对应子系统处于布防中 + BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区故障状态,0xff-无效,0-对应防区处于正常状态,1-对应防区处于故障状态 + BYTE byAlarmInMemoryStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区报警记忆状态(报警状态), 0xff-无效,0-对应防区当前无报警,1-对应防区当前有报警 + BYTE byAlarmInTamperStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区防拆状态,0xff-无效,0-对应防区无报警,1-对应防区有报警 + BYTE byEnableSubSystem[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统启用状态,0-无效,1-对应子系统未启用,2-对应子系统启用 + BYTE bySubSystemGuardType[MAX_ALARMHOST_SUBSYSTEM]; //子系统布防类型,0-无效,1-外出布防,2-即时布防,3-在家布防 + BYTE bySubSystemAlarm[MAX_ALARMHOST_SUBSYSTEM]; //子系统报警状态,0-无效,1-正常,2-报警 + BYTE byAlarmOutCharge[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器电量状态,(最大支持512个触发器查询),0-无效,1-正常,2-电量低 + BYTE byAlarmOutTamperStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器防拆状态,(最大支持512个触发器查询),0-无效,1-防拆,2-无防拆 + BYTE byAlarmInShieldedStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区屏蔽状态,0-无效,1-屏蔽,2-非屏蔽 + BYTE byAlarmOutLinkage[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器联动事件类型,(最大支持512个触发器查询),0-无效,1-报警,2-布防,3-撤防,4-手动控制 + BYTE byRes[512]; //保留字节 }NET_DVR_ALARMHOST_MAIN_STATUS_V51, *LPNET_DVR_ALARMHOST_MAIN_STATUS_V51; typedef struct tagNET_DVR_ALARMHOST_OTHER_STATUS { DWORD dwSize; - BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; // ״̬ 0-Ŵޱ״̬1-Ŵб״̬ - BYTE byRes[92]; // ֽ + BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; // 警号输出状态 0-警号处于无报警状态,1-警号处于有报警状态 + BYTE byRes[92]; // 保留字节 }NET_DVR_ALARMHOST_OTHER_STATUS, *LPNET_DVR_ALARMHOST_OTHER_STATUS; typedef struct tagNET_DVR_ALARMHOST_OTHER_STATUS_V50 { DWORD dwSize; - //DS-PEAϵһʽƷ±0Ӧ״̬±1Ӧ״̬,±2ʼӦ״̬ - BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; //״̬0xff-Ч0-Ŵޱ״̬1-Ŵб״̬2-δ3-ߣ4-쳣 - BYTE byDetetorPower[MAX_DETECTOR_NUM]; //̽״̬0xff-ЧֵΪ0-100ĬϵС20ΪǷѹ״̬ - BYTE byDetetorConnection[MAX_DETECTOR_NUM]; //̽״̬0xff-Ч0-ʾδעᣬ1-ʾߣ 2-ʾߣ3-쳣 - BYTE bySirenPower[ALARMHOST_MAX_SIREN_NUM]; //ŵ״̬0-Ч1-2-Ƿѹ - BYTE bySirenTamperStatus[ALARMHOST_MAX_SIREN_NUM]; //ŷ״̬0-Ч1-2-޷ - BYTE byPowerStausEnabled[MAX_DETECTOR_NUM / 8]; //̽״̬ǷЧλʾ0-Ч1-Ч - BYTE byDetetorPowerStatus[MAX_DETECTOR_NUM / 8]; //̽״̬λʾ0-1- - BYTE byDetetorPowerType; //̽ıʾͣ0-յֵʾʹbyDetetorPower ֶΣ1-յ״̬ʾʹbyPowerStausEnabledbyDetetorPowerStatusֶ - BYTE byRes[975]; //ֽ + //对于DS-PEA系列一键式紧急报警产品,数组下标0对应警灯状态,数组下标1对应电锁状态,数组下标2开始对应警号输出状态 + BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; //警号输出状态,0xff-无效,0-警号处于无报警状态,1-警号处于有报警状态,2-未关联,3-离线,4-心跳异常 + BYTE byDetetorPower[MAX_DETECTOR_NUM]; //探测器电量状态,0xff-无效,电量值为0-100,默认电量小于20为欠压状态 + BYTE byDetetorConnection[MAX_DETECTOR_NUM]; //探测器连接状态,0xff-无效,0-表示未注册,1-表示不在线, 2-表示在线,3-心跳异常 + BYTE bySirenPower[ALARMHOST_MAX_SIREN_NUM]; //警号电量状态,0-无效,1-正常,2-欠压 + BYTE bySirenTamperStatus[ALARMHOST_MAX_SIREN_NUM]; //警号防拆状态,0-无效,1-防拆,2-无防拆 + BYTE byPowerStausEnabled[MAX_DETECTOR_NUM / 8]; //探测器电量状态是否有效,按位表示,0-无效,1-有效 + BYTE byDetetorPowerStatus[MAX_DETECTOR_NUM / 8]; //探测器电量状态,按位表示,0-正常,1-电量低 + BYTE byDetetorPowerType; //探测器电量的表示类型,0-按照电量值表示,使用byDetetorPower 字段,1-按照电量状态表示,使用byPowerStausEnabled和byDetetorPowerStatus字段 + BYTE byRes[975]; //保留字节 }NET_DVR_ALARMHOST_OTHER_STATUS_V50, *LPNET_DVR_ALARMHOST_OTHER_STATUS_V50; typedef struct tagNET_DVR_ALARMHOST_OTHER_STATUS_V51 { DWORD dwSize; - //DS-PEAϵһʽƷ±0Ӧ״̬±1Ӧ״̬,±2ʼӦ״̬ - BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; //״̬0xff-Ч0-Ŵޱ״̬1-Ŵб״̬2-δ3- - BYTE byDetetorPower[MAX_DETECTOR_NUM_V51]; //̽0xff-ЧֵΪ0-100ĬϵС20ΪǷѹ״̬byDetetorPowerTypeΪ0ʱЧ - BYTE byDetetorConnection[MAX_DETECTOR_NUM_V51]; //̽״̬0xff-Ч0-ʾδעᣬ1-ʾߣ 2-ʾ - BYTE bySirenPower[ALARMHOST_MAX_SIREN_NUM]; //ŵ״̬0-Ч1-2-Ƿѹ - BYTE bySirenTamperStatus[ALARMHOST_MAX_SIREN_NUM]; //ŷ״̬0-Ч1-2-޷ - BYTE byPowerStausEnabled[MAX_DETECTOR_NUM_V51 / 8]; //̽״̬ǷЧλʾ0-Ч1-Ч - BYTE byDetetorPowerStatus[MAX_DETECTOR_NUM_V51 / 8]; //̽״̬λʾ0-1- - BYTE byDetetorPowerType; //̽ıʾͣ0-յֵʾʹbyDetetorPower ֶΣ1-յ״̬ʾʹbyPowerStausEnabledbyDetetorPowerStatusֶ + //对于DS-PEA系列一键式紧急报警产品,数组下标0对应警灯状态,数组下标1对应电锁状态,数组下标2开始对应警号输出状态 + BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; //警号输出状态,0xff-无效,0-警号处于无报警状态,1-警号处于有报警状态,2-未关联,3-离线 + BYTE byDetetorPower[MAX_DETECTOR_NUM_V51]; //探测器电量,0xff-无效,电量值为0-100,默认电量小于20为欠压状态,byDetetorPowerType为0时有效 + BYTE byDetetorConnection[MAX_DETECTOR_NUM_V51]; //探测器连接状态,0xff-无效,0-表示未注册,1-表示不在线, 2-表示在线 + BYTE bySirenPower[ALARMHOST_MAX_SIREN_NUM]; //警号电量状态,0-无效,1-正常,2-欠压 + BYTE bySirenTamperStatus[ALARMHOST_MAX_SIREN_NUM]; //警号防拆状态,0-无效,1-防拆,2-无防拆 + BYTE byPowerStausEnabled[MAX_DETECTOR_NUM_V51 / 8]; //探测器电量状态是否有效,按位表示,0-无效,1-有效 + BYTE byDetetorPowerStatus[MAX_DETECTOR_NUM_V51 / 8]; //探测器电量状态,按位表示,0-正常,1-电量低 + BYTE byDetetorPowerType; //探测器电量的表示类型,0-按照电量值表示,使用byDetetorPower 字段,1-按照电量状态表示,使用byPowerStausEnabled和byDetetorPowerStatus字段 BYTE byRes2[3]; - BYTE byRepeaterStatus[MAX_REPEATER_NUM]; //м״̬0-Ч1-ߣ2-ߣ3-δ - BYTE byRepeaterTamperStatus[MAX_REPEATER_NUM / 8]; //м״̬λʾ0-Ӧмޱ1-Ӧмб - BYTE byAlarmOutTamperStatus[MAX_ALARMHOST_ALARMOUT_NUM / 8]; //̵״̬λʾ0-Ӧޱ1-Ӧб - BYTE byOutputModuleTamperStatus[MAX_OUTPUT_MODULE_NUM / 8]; //ģ״̬λʾ0-Ӧģޱ1-Ӧģб - BYTE byElectricLockStatus[MAX_ELECTRIC_LOCK_NUM]; //״̬ 0-رգ1 C򿪣Ϊȷԣһ״̬bySirenStatus0λҲҪд - BYTE byRes[274]; //ֽ + BYTE byRepeaterStatus[MAX_REPEATER_NUM]; //中继器状态,0-无效,1-离线,2-在线,3-未关联 + BYTE byRepeaterTamperStatus[MAX_REPEATER_NUM / 8]; //中继器防拆状态,按位表示,0-对应中继器无报警,1-对应中继器有报警 + BYTE byAlarmOutTamperStatus[MAX_ALARMHOST_ALARMOUT_NUM / 8]; //报警输出(继电器)防拆状态,按位表示,0-对应报警输出无报警,1-对应报警输出有报警 + BYTE byOutputModuleTamperStatus[MAX_OUTPUT_MODULE_NUM / 8]; //输出模块防拆状态,按位表示,0-对应输出模块无报警,1-对应输出模块有报警 + BYTE byElectricLockStatus[MAX_ELECTRIC_LOCK_NUM]; //电锁状态 0-关闭,1 –打开,为确保兼容性,第一个电锁的状态在bySirenStatus第0位也需要填写 + BYTE byRes[274]; //保留字节 }NET_DVR_ALARMHOST_OTHER_STATUS_V51, *LPNET_DVR_ALARMHOST_OTHER_STATUS_V51; -//ʹ״̬ +//使能状态配置 typedef struct tagNET_DVR_ALARMHOST_ENABLECFG { DWORD dwSize; - BYTE byAudioOutEnable[ALARMHOST_MAX_AUDIOOUT_NUM];//ʹܣ0-ܣ1-ʹ - BYTE byElectroLockEnable[ALARMHOST_MAX_ELECTROLOCK_NUM];//ʹܣ0-ܣ1-ʹ - BYTE byMobileGateEnable[ALARMHOST_MAX_MOBILEGATE_NUM];//ƶʹܣ0-ܣ1-ʹ - BYTE bySirenEnable[ALARMHOST_MAX_SIREN_NUM];//ʹܣ 0-ܣ1-ʹ - BYTE bySerialPurpose;//;0-ڼ1-PTZ + BYTE byAudioOutEnable[ALARMHOST_MAX_AUDIOOUT_NUM];//语音输出使能,0-禁能,1-使能 + BYTE byElectroLockEnable[ALARMHOST_MAX_ELECTROLOCK_NUM];//电锁使能,0-禁能,1-使能 + BYTE byMobileGateEnable[ALARMHOST_MAX_MOBILEGATE_NUM];//移动门使能,0-禁能,1-使能 + BYTE bySirenEnable[ALARMHOST_MAX_SIREN_NUM];//警号使能, 0-禁能,1-使能 + BYTE bySerialPurpose;//串口用途,0-用于级联报警主机,1-用于PTZ控制 BYTE byRes[63]; }NET_DVR_ALARMHOST_ENABLECFG, *LPNET_DVR_ALARMHOST_ENABLECFG; typedef struct tagNET_DVR_ALARMHOST_ABILITY { - DWORD dwSize; // ṹС - WORD wTotalAlarmInNum; // (), - WORD wLocalAlarmInNum; // ر - WORD wExpandAlarmInNum; // չı - WORD wTotalAlarmOutNum; // 豸ֵ֧ - WORD wLocalAlarmOutNum; // رڸ - WORD wExpandAlarmOutNum; // չı - WORD wTotalRs485Num; // 豸ֵ֧ - WORD wLocalRs485Num; // 485 - WORD wExpandRs485Num; // չ485 - WORD wFullDuplexRs485Num; // ȫ˫485 - WORD wTotalSensorNum; // ģ (豸ֵ֧) - WORD wLocalSensorNum; // ģ - WORD wExpandSensorNum; // չģ - WORD wAudioOutNum; // - WORD wGatewayNum; //Ž - WORD wElectroLockNum; // - WORD wSirenNum; // Ŀ - WORD wSubSystemNum; // ɻϵͳĿ - WORD wNetUserNum; // û - WORD wKeyboardNum; // - WORD wOperatorUserNum; // û - BYTE bySupportDetector;//Ƿֳ֧̽1-֧֣0-֧ - BYTE bySupportSensitivity;//Ƿַ֧ȣ1-֧֣0-֧ - BYTE bySupportArrayBypass;//Ƿ֧·1-֧֣0-֧ - BYTE bySupportAlarmInDelay;//Ƿַ֧ӳ,1-֧֣0-֧ - //bySupportAlarmInDelayΪ1ʱʾͻӦʹNET_DVR_ALARMIN_PARAM еdwParamʱʱ䣬бʹʱʽ; - //bySupportAlarmInDelayΪ0ʱʾͨNET_DVR_ALARMSUBSYSTEMPARAM еwEnterDelay wExitDelay - BYTE bySupportAlarmInType[16];//ֵ֧ķ,0:ʱ,1-24Сʱ,2-ʱ ,3-ڲ4-Կ׷ 5-𾯷 6-ܽ 7-24Сʱ 8-24Сʱ9-24Сʱ𶯷,10-Žŷ11-Žŷ15- - BYTE byTelNum; //ֵ֧绰 - BYTE byCenterGroupNum; // - BYTE byGPRSNum; //GPRS4 - BYTE byNetNum; //4 - BYTE byAudioNum; //Ƶ - BYTE by3GNum; //3Gģ - BYTE byAnalogVideoChanNum; //ģƵͨ - BYTE byDigitalVideoChanNum; //Ƶͨ - BYTE bySubSystemArmType; //ϵͳͣ0-ʾ֧֣1-ʾ֧֡bit0-ͨעСֻ֧ͨмֶεʱСѾСиֶΪ00ʾ֧֣1ʾ֧֡ӿSDKڲݣbit1-ʱbit2-ز - BYTE byPublicSubSystemNum; //ϵͳ - DWORD dwSupport1; //λʾ0ʾ֧֣0ʾ֧ - // bit0: Ƿ֧ϵͳþʱ䣬֧򾯺ʱÿϵͳã֧֣ʱھŲ - // bit1: Ƿ֧¼ - // bit2: Ƿ֧¼ر - // bit3: Ƿ֧ϵͳʹ - // bit4; Ƿַ֧ - // bit5; Ƿ֧ϵͳԶ - // bit6: Ƿ֧־Ϲ - // bit7: Ƿֹ֧״̬ѯ - // bit8: Ƿ֧ϵͳչ - // bit9: Ƿ֧Կ׷ϵͳ - // bit10: Ƿ֧"ʾɹͱ" - // bit11: Ƿֵ֧뵼 - // bit12: Ƿ֧LEDĻ - // bit13: Ƿֹ֧Ϲعϵ - DWORD dwSubSystemEvent; //ϵͳ¼λʾ0ʾ֧֣0ʾ֧,bit0-ʱbit1-˳ʱbit2-bit3-bit4-bit5- - DWORD dwOverallEvent; //ȫ¼λʾ0ʾ֧֣0ʾ֧֣bit0-磬bit1-صѹͣbit2-绰ߵߣbit3-쳣bit4-쳣bit5-Ӳ̹,bit6-3G/4Gź쳣, bit7-ģӣ,bit8-WIFIͨŹϣbit9-RFźŸŹ - DWORD dwFaultType; //豸ֵ֧Ĺͣbit0-ϵ磬bit1-Ƿѹbit2-𿪣bit3-绰ߵߣbit4-̵ߣbit5-ϣbit6-쳣bit7-չ쳣bit8-Ӳ쳣 - BYTE byPublicSubsystemAssociateSubsystemNum; //ϵͳɹϵͳ - BYTE byOverallKeyboard; //ȫ̸ּ - WORD wSafetyCabinSupport; //տλʾ0ʾ֧֣0ʾ֧ - //bit0: Ƿַ֧տģʽ - //bit1: Ƿ֧źŴ - //bit2: Ƿ֧Ļã̽ӳʱ䡢״̬仯Ӧʱ䣩 - //bit3: Ƿֺ֧䴫ã˲ - //bit4: Ƿַ֧ʹóʱʱ - BYTE by485SlotNum; //485λ - BYTE bySubSystemAttributeAbility; // ֵΪ1ֹ1ϵͳرʹ - WORD wKeyboardAddrNum; // ̵ַ - BYTE byAlarmLampNum; //Ŀ - BYTE byRes[117]; // ֽ + DWORD dwSize; // 结构体大小 + WORD wTotalAlarmInNum; // 报警输入口总数(防区),包括级联 + WORD wLocalAlarmInNum; // 本地报警输入口 + WORD wExpandAlarmInNum; // 可扩展的报警输入口 + WORD wTotalAlarmOutNum; // 报警输出口总数 (设备支持的总数) + WORD wLocalAlarmOutNum; // 本地报警输出口个数 + WORD wExpandAlarmOutNum; // 可扩展的报警输出口 + WORD wTotalRs485Num; // 报警输出口总数 (设备支持的总数) + WORD wLocalRs485Num; // 本地485口数 + WORD wExpandRs485Num; // 可扩展的485口数 + WORD wFullDuplexRs485Num; // 全双工的485口数 + WORD wTotalSensorNum; // 模拟量最大个数 (设备支持的总数) + WORD wLocalSensorNum; // 本地模拟量个数 + WORD wExpandSensorNum; // 可扩展的模拟量个数 + WORD wAudioOutNum; //语音输出个数 + WORD wGatewayNum; //门禁个数 + WORD wElectroLockNum; //电锁个数 + WORD wSirenNum; // 主机警号数目 + WORD wSubSystemNum; // 可划分子系统数目 + WORD wNetUserNum; // 网络用户数 + WORD wKeyboardNum; // 键盘数 + WORD wOperatorUserNum; // 操作用户数 + BYTE bySupportDetector;//是否支持常开、常闭探测器,1-支持,0-不支持 + BYTE bySupportSensitivity;//是否支持防区灵敏度,1-支持,0-不支持 + BYTE bySupportArrayBypass;//是否支持组旁路,1-支持,0-不支持 + BYTE bySupportAlarmInDelay;//是否支持防区延迟,1-支持,0-不支持 + //如果bySupportAlarmInDelay为1时,表示客户端应该使用NET_DVR_ALARMIN_PARAM 中的dwParam来设置延时时间,动环报警主机和自助行报警主机使用这种配置延时方式; + //如果bySupportAlarmInDelay为0时,表示通过NET_DVR_ALARMSUBSYSTEMPARAM 中的wEnterDelay 、wExitDelay 来设置 + BYTE bySupportAlarmInType[16];//支持的防区类型,数组0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区15-无 + BYTE byTelNum; //支持电话个数 + BYTE byCenterGroupNum; //中心组个数 + BYTE byGPRSNum; //GPRS中心数,最多4个 + BYTE byNetNum; //网络中心数,最多4个 + BYTE byAudioNum; //音频个数 + BYTE by3GNum; //3G模块个数 + BYTE byAnalogVideoChanNum; //模拟视频通道个数 + BYTE byDigitalVideoChanNum; //数字视频通道个数 + BYTE bySubSystemArmType; //子系统布防类型,0-表示不支持,1-表示支持。bit0-普通布防(注:网络小主机只支持普通布防,在能力集中加这个字段的时候网络小主机已经发布,所以网络小主机中该字段为0,所以用0表示支持,1表示不支持。对外接口中SDK内部会做兼容),bit1-即时布防,bit2-留守布防。 + BYTE byPublicSubSystemNum; //公共子系统个数 + DWORD dwSupport1; //按位表示,结果非0表示支持,0表示不支持 + // bit0: 是否支持子系统内配置警号输出时间,如果支持则警号输出时间在每个子系统内配置,如果不支持,警号时间在警号参数配置里面设置 + // bit1: 是否支持事件触发报警输出开启 + // bit2: 是否支持事件触发报警输出关闭 + // bit3: 是否支持子系统使能 + // bit4; 是否支持防区布防 + // bit5; 是否支持子系统自动布撤防 + // bit6: 是否支持具体故障关联声音输出 + // bit7: 是否支持故障状态查询 + // bit8: 是否支持子系统扩展配置 + // bit9: 是否支持钥匙防区操作子系统 + // bit10: 是否支持"键盘提示成功发送报告"配置 + // bit11: 是否支持导入导出参数配置 + // bit12: 是否支持LED屏幕参数配置 + // bit13: 是否支持故障关联本地故障灯输出 + DWORD dwSubSystemEvent; //子系统事件,按位表示,0表示不支持,非0表示支持,bit0-进入延时,bit1-退出延时,bit2-布防,bit3-撤防,bit4-报警,bit5-消除报警记忆 + DWORD dwOverallEvent; //全局事件,按位表示,0表示不支持,非0表示支持,bit0-交流电掉电,bit1-电池电压低,bit2-电话线掉线,bit3-有线网络异常,bit4-无线网络异常,bit5-硬盘故障,bit6-3G/4G信号异常, bit7-(模块链接)第三方主机掉线,bit8-WIFI通信故障,bit9-RF信号干扰故障 + DWORD dwFaultType; //设备支持的故障类型,bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-主键盘掉线,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常 + BYTE byPublicSubsystemAssociateSubsystemNum; //公共子系统可关联的子系统个数 + BYTE byOverallKeyboard; //全局键盘个数 + WORD wSafetyCabinSupport; //防护舱控制器能力,按位表示,结果非0表示支持,0表示不支持 + //bit0: 是否支持防护舱控制器工作模式配置 + //bit1: 是否支持人信号传感器类型配置 + //bit2: 是否支持幕帘传感器参数配置(探测延迟时间、人状态变化响应时间) + //bit3: 是否支持红外对射传感器参数配置(滤波) + //bit4: 是否支持防护舱使用超时时间配置 + BYTE by485SlotNum; //485虚拟槽位号 + BYTE bySubSystemAttributeAbility; // 值恒为1,禁止1号子系统关闭使能 + WORD wKeyboardAddrNum; // 键盘地址数 + BYTE byAlarmLampNum; //警灯数目 + BYTE byRes[117]; // 保留字节 }NET_DVR_ALARMHOST_ABILITY, *LPNET_DVR_ALARMHOST_ABILITY; -#define MAX_485CHAN 256 //485ͨ -#define MAX_485SLOT 256 //485λ +#define MAX_485CHAN 256 //485通道号 +#define MAX_485SLOT 256 //485槽位号 typedef struct tagNET_DVR_485_SLOT_LIST_INFO { DWORD dwSize; - BYTE byAll; //0-ȫȡ1-ȫȡ + BYTE byAll; //0-不是全部获取,1-全部获取 BYTE byres[3]; - BYTE byIndex[MAX_485SLOT]; //485λ - BYTE byRes[64]; // + BYTE byIndex[MAX_485SLOT]; //485槽位号 + BYTE byRes[64]; //保留 }NET_DVR_485_SLOT_LIST_INFO,* LPNET_DVR_485_SLOT_LIST_INFO; typedef struct tagNET_DVR_485LIST_INFO { DWORD dwSize; - BYTE byAll; //0-ȫȡ1-ȫȡ + BYTE byAll; //0-不是全部获取,1-全部获取 BYTE byres[3]; - BYTE byIndex[MAX_485CHAN]; //485ͨ ±ʾͨţֵ0-ʾʹã1ʾʹ - BYTE byRes[64]; // + BYTE byIndex[MAX_485CHAN]; //485通道号 下标表示通道号,值0-表示不使用,1表示使用 + BYTE byRes[64]; //保留 }NET_DVR_485LIST_INFO,*LPNET_DVR_485LIST_INFO; typedef struct tagNET_DVR_ALARM_RS485CFG { - DWORD dwSize; // ṹС - BYTE sDeviceName[NAME_LEN]; // ǰ豸 - WORD wDeviceType; // ǰ豸,ͨNET_DVR_GetDeviceTypeListȡ - WORD wDeviceProtocol; // ǰ豸Э ͨȡЭбȡ - DWORD dwBaudRate; //(bps)0-501-752-1103-1504-3005-6006-12007-24008-48009-960010-1920011-3840012-5760013-7680014-115.2k - BYTE byDataBit; // мλ0-5λ1-6λ2-7λ3-8λ - BYTE byStopBit; // ֹͣλ0-1λ1-2λ - BYTE byParity; //ǷУ飺0-У飬1-У飬2-żУ - BYTE byFlowcontrol; // Ƿأ0-ޣ1-,2-Ӳ - BYTE byDuplex; // 0 - ˫1- ȫ˫ ֻͨ1ȫ˫ֻǰ˫ - BYTE byWorkMode; // ģʽ 0-̨ 1-͸ͨ,2-ݿأ3-,4-Žȫģ,0xfe-Զ壬0xff- - BYTE byChannel; //485ͨ - BYTE bySerialType; //: 0--485, 1--232 - BYTE byMode; //ģʽ 0-Ӷ 1-ӿͻ 2-չģ 3-Ž 4-ݿ 0xff- - BYTE byOutputDataType; //0-Ч1-ţ2- - BYTE byAddress; //ڵַ - BYTE byStairsOutputDataType; //0-Ч1-¥ţ2-ţbyModeΪݿʱЧ - BYTE byRes[32]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE sDeviceName[NAME_LEN]; // 前端设备名称 + WORD wDeviceType; // 前端设备类型,通过NET_DVR_GetDeviceTypeList获取 + WORD wDeviceProtocol; // 前端设备协议 通过获取协议列表获取 + DWORD dwBaudRate; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200,11-38400,12-57600,13-76800,14-115.2k + BYTE byDataBit; // 数据有几位:0-5位,1-6位,2-7位,3-8位 + BYTE byStopBit; // 停止位:0-1位,1-2位 + BYTE byParity; //是否校验:0-无校验,1-奇校验,2-偶校验 + BYTE byFlowcontrol; // 是否流控:0-无,1-软流控,2-硬流控 + BYTE byDuplex; // 0 - 半双工1- 全双工 只有通道1可以是全双工其他都只能是半双工 + BYTE byWorkMode; // 工作模式 0-控制台 1-透明通道,2-梯控,3-读卡器,4-门禁安全模块,0xfe-自定义,0xff-禁用 + BYTE byChannel; //485通道号 + BYTE bySerialType; //串口类型: 0--485, 1--232 + BYTE byMode; //模式 0-连接读卡器 1-连接客户端 2-连接扩展模块 3-连接门禁主机 4-连接梯控主机 0xff-禁用 + BYTE byOutputDataType; //0-无效,1-输出卡号,2-输出工号 + BYTE byAddress; //串口地址 + BYTE byStairsOutputDataType; //0-无效,1-输出楼层号,2-输出卡号,当byMode为梯控主机时有效 + BYTE byRes[32]; // 保留字节 }NET_DVR_ALARM_RS485CFG, *LPNET_DVR_ALARM_RS485CFG; #define MAX_DEVICE_PROTO_NUM 256 #define MAX_DEVICE_TYPE_NUM 256 -// 485ǰ豸֧Эб +// 485前端设备支持协议列表 typedef struct tagNET_DVR_DEVICE_PROTO_LIST { - DWORD dwSize; // ṹС - DWORD dwProtoNum; // Э - NET_DVR_PROTO_TYPE struProtoType[MAX_DEVICE_PROTO_NUM]; // Э - BYTE byRes[12]; // ֽ + DWORD dwSize; // 结构体大小 + DWORD dwProtoNum; // 协议个数 + NET_DVR_PROTO_TYPE struProtoType[MAX_DEVICE_PROTO_NUM]; // 协议类型 + BYTE byRes[12]; // 保留字节 }NET_DVR_DEVICE_PROTO_LIST, *LPNET_DVR_DEVICE_PROTO_LIST; typedef struct tagNET_DVR_DEVICE_TYPE @@ -24381,8 +24381,8 @@ typedef struct tagNET_DVR_DEVICE_TYPE typedef struct tagNET_DVR_DEVICE_TYPE_LIST { - DWORD dwSize; // ṹС - DWORD dwTypeNum; // ͸ + DWORD dwSize; // 结构体大小 + DWORD dwTypeNum; // 类型个数 NET_DVR_DEVICE_TYPE struDeviceType[MAX_DEVICE_TYPE_NUM]; BYTE byRes[12]; }NET_DVR_DEVICE_TYPE_LIST, *LPNET_DVR_DEVICE_TYPE_LIST; @@ -24390,91 +24390,91 @@ typedef struct tagNET_DVR_DEVICE_TYPE_LIST #define MAX_ALARMHOST_VIDEO_CHAN 64 typedef struct tagNET_DVR_ALARM_DEVICE_USER { - DWORD dwSize; // ṹС - BYTE sUserName[NAME_LEN]; // û - BYTE sPassword[PASSWD_LEN]; // - NET_DVR_IPADDR struUserIP; /* ûIPַ(Ϊ0ʱʾκεַ) */ - BYTE byMACAddr[MACADDR_LEN]; /* ַ */ - BYTE byUserType; // 0-ͨûԱ 1-Աû 2-װԱû 3-û - BYTE byAlarmOnRight; // Ȩ - BYTE byAlarmOffRight; // Ȩ - BYTE byBypassRight; // ·Ȩ - BYTE byOtherRight[MAX_RIGHT]; // Ȩ - // 0 -- ־Ȩ - // 1 -- ػ - // 2 -- Ȩ - // 3 -- ȡȨ - // 4 -- ָĬϲȨ - // 5 -- Ȩ - // 6 -- PTZ Ȩ - // 7 -- ԶȨ - // 8 -- ԶԤ - // 9 -- Զֶ¼ - // 10 -- Զ̻ط - // 11 -- - // 12 -- ǿƲ - // 13 -- · - // 14 -- ӸĸȨ - // 15 -- ģʽ - BYTE byNetPreviewRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // Զ̿Ԥͨλʾͨbit0-channel 11-Ȩޣ0-Ȩ - BYTE byNetRecordRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // Զ̿¼ͨλʾͨbit0-channel 11-Ȩޣ0-Ȩ - BYTE byNetPlaybackRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // Զ̿Իطŵͨλʾͨbit0-channel 11-Ȩޣ0-Ȩ - BYTE byNetPTZRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // Զ̿PTZͨλʾͨbit0-channel 11-Ȩޣ0-Ȩ - //BYTE byPriority; // ȼ0xff-ޣ0--ͣ1--У2-- - //ޣʾ֧ȼã - //ͣĬȨޣԶ̻طţԶ̲鿴־״̬Զ̹ػ/ - //УԶ̨̿Զֶ¼Զ̻طţԽԶԤرݣ/Զ̹ػ/ - //ߣԱ - BYTE sOriginalPassword[PASSWD_LEN]; // ԭʼ - BYTE sKeypadPassword[PASSWD_LEN]; // - BYTE byUserEnabled; // ûǷʹã0-Ч1-2- - BYTE byRes2[135]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE sUserName[NAME_LEN]; // 用户名 + BYTE sPassword[PASSWD_LEN]; // 密码 + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ + BYTE byUserType; // 0-普通用户(操作员) 1-管理员用户 2-安装员用户 3-制造商用户 + BYTE byAlarmOnRight; // 布防权限 + BYTE byAlarmOffRight; // 撤防权限 + BYTE byBypassRight; // 旁路权限 + BYTE byOtherRight[MAX_RIGHT]; // 其他权限 + // 0 -- 日志权限 + // 1 -- 重启关机 + // 2 -- 参数设置权限 + // 3 -- 参数获取权限 + // 4 -- 恢复默认参数权限 + // 5 -- 警号输出权限 + // 6 -- PTZ 控制权限 + // 7 -- 远程升级权限 + // 8 -- 远程预览 + // 9 -- 远程手动录像 + // 10 -- 远程回放 + // 11 -- 消警 + // 12 -- 强制布防 + // 13 -- 永久旁路 + // 14 -- 添加更改个人授权代码 + // 15 -- 调试模式 + BYTE byNetPreviewRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // 远程可以预览的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 + BYTE byNetRecordRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // 远程可以录像的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 + BYTE byNetPlaybackRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // 远程可以回放的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 + BYTE byNetPTZRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // 远程可以PTZ的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 + //BYTE byPriority; // 优先级,0xff-无,0--低,1--中,2--高 + //无(表示不支持优先级的设置) + //低(默认权限:包括远程回放,远程查看日志和状态,远程关机/重启) + //中(包括远程控制云台,远程手动录像,远程回放,语音对讲和远程预览,本地备份,本地/远程关机/重启) + //高(管理员) + BYTE sOriginalPassword[PASSWD_LEN]; // 原始密码 + BYTE sKeypadPassword[PASSWD_LEN]; // 键盘密码 + BYTE byUserEnabled; // 用户是否开启使用:0-无效,1-开启,2-不开启 + BYTE byRes2[135]; // 保留字节 }NET_DVR_ALARM_DEVICE_USER, *LPNET_DVR_ALARM_DEVICE_USER; typedef struct tagNET_DVR_KEYBOARD_USER { - DWORD dwSize; // ṹС - DWORD dwID; // ûID - BYTE byDefanceArea[MAX_ALARMHOST_ALARMIN_NUM]; //Ȩ ±ʾ ֧512 0 - Ȩ 1- Ȩ - BYTE byRes[560]; // ֽ + DWORD dwSize; // 结构体大小 + DWORD dwID; // 键盘用户ID + BYTE byDefanceArea[MAX_ALARMHOST_ALARMIN_NUM]; //防区权限 按数组下标表示 最大支持512个防区 0 - 无权限 1- 有权限 + BYTE byRes[560]; // 保留字节 }NET_DVR_KEYBOARD_USER, *LPNET_DVR_KEYBOARD_USER; typedef struct tagNET_DVR_OPERATE_USER { - DWORD dwSize; // ṹС - BYTE sUserName[NAME_LEN]; // û - BYTE sPassword[PASSWD_LEN]; // - BYTE bySubSystemPermission;/*0-װԱȨ ԱȨޣϵͳ£ 1-޲棬· 2-޳棬· 3-޲棬· - 4-в//棬· 5-г棬· 6-в棬· 7-޲棬· - 8-޲棬· 9-޲棬· 10-в棬· 11-г棬· 1 - 2-в棬·*/ - BYTE byRes[63]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE sUserName[NAME_LEN]; // 用户名 + BYTE sPassword[PASSWD_LEN]; // 密码 + BYTE bySubSystemPermission;/*0-安装员权限 操作员权限(所有子系统)如下: 1-单布防,无布防报告,不能旁路 2-单撤防,无撤防报告,不能旁路 3-布撤防,无布撤防报告,不能旁路 + 4-单布防,有布//防报告,不能旁路 5-单撤防,有撤防报告,不能旁路 6-布撤防,有布撤防报告,不能旁路 7-单布防,无布撤防报告,允许旁路 + 8-单撤防,无布撤防报告,允许旁路 9-布撤防,无布撤防报告,允许旁路 10-单布防,有布防报告,允许旁路 11-单撤防,有撤防报告,允许旁路 1 + 2-布撤防,有布撤防报告,允许旁路*/ + BYTE byRes[63]; // 保留字节 }NET_DVR_OPERATE_USER, *LPNET_DVR_OPERATE_USER; typedef struct tagNET_DVR_GATEWAY_CFG { - DWORD dwSize; // ṹС - BYTE byName[NAME_LEN]; // Ž - BYTE byEnable; // Ƿ - BYTE byLocalEnable; // Ƿ - WORD wDelayTime; // ʱʱ λΪ0-65535 0Ϊһֱ - BYTE byLockWorkMode;//ģʽ0-ͨ1-ϵ - BYTE byRes[31]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byName[NAME_LEN]; // 门禁名称 + BYTE byEnable; // 是否启用 + BYTE byLocalEnable; // 本地是否启用 + WORD wDelayTime; // 开启延时时间 单位为秒0-65535 0为一直开启 + BYTE byLockWorkMode;//电锁工作模式,0-通电启动,1-断电启动 + BYTE byRes[31]; // 保留字节 }NET_DVR_GATEWAY_CFG, *LPNET_DVR_GATEWAY_CFG; typedef struct tagNET_DVR_SENSOR_ALARM { - DWORD dwSize; // ṹС - DWORD dwAbsTime; // ʱϢ OSDʾϢ - BYTE byName[NAME_LEN]; // sensor - BYTE bySensorChannel; // ģͨ - BYTE byType; // ģ - BYTE byAlarmType; // 1-42-33-24-15-16-27-38-4 ͵ǰģʽй - // 統Ϊ1000ʱ,1123ֱ - BYTE byAlarmMode; //ģʽ֣-HHHH-HHHL-HHLLHLLL-LLLL Ϊƽ̶̨жϹ,1111ϣ1110£1100£1000()0000() - float fValue; // ǰģֵ - float fOriginalValue; //ԭʼѹֵСλֵʾǵѹNET_DVR_SENSOR_INFObySensorStandard - BYTE byRes2[28]; // ֽ + DWORD dwSize; // 结构体大小 + DWORD dwAbsTime; // 绝对时标信息 OSD显示信息 + BYTE byName[NAME_LEN]; // sensor 名称 + BYTE bySensorChannel; // 模拟量通道 + BYTE byType; // 模拟量类型 + BYTE byAlarmType; // 1-上4、2-上3、3-上2、4-上1、5-下1、6-下2、7-下3、8-下4 和当前模式有关 + // 例如当为1000时,有上1下1,2,3报警四种报警 + BYTE byAlarmMode; //报警模式,五种,-HHHH、-HHHL、-HHLL、HLLL、-LLLL, 作为平台报警程度判断功能,即:1111(上上上上),1110(上上上下),1100(上上下下),1000(上下下下),0000(下下下下) + float fValue; // 但前模拟量的值 + float fOriginalValue; //原始电流电压值,保留小数点后三位,具体值表示电流还是电压根据NET_DVR_SENSOR_INFO的bySensorStandard类型 + BYTE byRes2[28]; // 保留字节 }NET_DVR_SENSOR_ALARM, *LPNET_DVR_SENSOR_ALARM; #define PROTOCOL_VERTION_LEN 32 @@ -24482,77 +24482,77 @@ typedef struct tagNET_DVR_SENSOR_ALARM typedef struct tagNET_DVR_RS485_PROTOCOL_VERSION { DWORD dwSize; - BYTE byProtocleVersion[PROTOCOL_VERTION_LEN];//RS485Э汾Ϣ + BYTE byProtocleVersion[PROTOCOL_VERTION_LEN];//RS485协议库版本信息 BYTE byRes[128]; }NET_DVR_RS485_PROTOCOL_VERSION, *LPNET_DVR_RS485_PROTOCOL_VESRION; typedef struct { - /*ԤĿǰıû(򣬼)*/ + /*预留,目前报警主机的报警没有类型(布防网络序,监听主机序)*/ DWORD dwAlarmType; - /*0Ӧ1˿*/ + /*数组0对应第1个输入端口*/ BYTE byAlarmInputNumber[MAX_ALARMHOST_ALARMIN_NUM]; BYTE byRes[160]; }NET_DVR_ALARMHOST_ALARMINFO,*LPNET_DVR_ALARMHOST_ALARMINFO; -// ϴ +// 开关量报警上传 typedef struct tagNET_DVR_SWITCH_ALARM { DWORD dwSize; - BYTE byName[NAME_LEN]; // switch - WORD wSwitchChannel; // ͨ, 0-255 - BYTE byAlarmType; // 0--1--·2--·,3-쳣 - BYTE byRes[41]; // ֽ + BYTE byName[NAME_LEN]; // switch 名称 + WORD wSwitchChannel; // 开关量通道, 0-255 + BYTE byAlarmType; // 报警类型 0--正常,1--短路,2--断路,3-异常 + BYTE byRes[41]; // 保留字节 }NET_DVR_SWITCH_ALARM, *LPNET_DVR_SWITCH_ALARM; typedef union tagNET_DVR_ALARMHOST_EXCEPTION_PARAM { - DWORD dwUnionSize[20]; // С + DWORD dwUnionSize[20]; // 联合体大小 }NET_DVR_ALARMHOST_EXCEPTION_PARAM, *LPNET_DVR_ALARMHOST_EXCEPTION_PARAM; typedef struct tagNET_DVR_ALARMHOST_EXCEPTION_ALARM { - DWORD dwSize; // ṹС - // 쳣 1-豸𱨾 2-豸ָ 3-Դ籨 4-Դָ 5-ڲͨŹϱ - // 6-ڲͨŹϺָ 7-绰߶ 8-绰߶߻ָ 9-Լʧܱ 10-Լʧָܺ - // 11Ƿѹ 12صѹָ13-عϣ14-MBUSģߣ15-MBUSģ߻ָ16-̵ߣ - //17-̵߻ָ18-豸ƶ19-豸ƶλ 20-485·ϱ 21-485·Ϻָ - //25-Ӱ1,26-Ӱ1γ, 27-Ӱ2,28-Ӱ2γ + DWORD dwSize; // 结构体大小 + // 异常参数 1-设备防拆报警 2-设备防拆后后恢复正常 3-主电源掉电报警 4-主电源掉电后恢复正常 5-内部通信故障报警 + // 6-内部通信故障后恢复正常 7-电话线断线 8-电话线断线恢复 9-自检失败报警 10-自检失败后恢复正常 + // 11蓄电池欠压 12蓄电池电压恢复正常,13-蓄电池故障;14-MBUS模块掉线;15-MBUS模块掉线恢复;16-键盘掉线; + //17-键盘掉线恢复;18-设备被移动;19-设备被移动复位 20-485外设线路断报警 21-485外设线路断后恢复正常 + //25-子板1插上,26-子板1拔出, 27-子板2插上,28-子板2拔出 DWORD dwExceptionType; - BYTE byRes[36]; // + BYTE byRes[36]; // 保留 }NET_DVR_ALARMHOST_EXCEPTION_ALARM, *LPNET_DVR_ALARMHOST_EXCEPTION_ALARM; -//вŲü÷ʽ -#define MAX_CENTERNUM 4 //G1,G2 G3 G4N1N2N3N4T1T2T3T4 +//自助行拨号参数配置及启用方式配置 +#define MAX_CENTERNUM 4 //G1,G2 G3 G4或者N1,N2,N3,N4或者T1,T2,T3,T4 typedef struct tagNET_DVR_PHONECENTERDIALCFG { BYTE sCenterName[NAME_LEN]; - BYTE byPhoneNum[MAX_PHONE_NUM/*32*/]; //ĺ - BYTE byRepeatCall; //ظŴ1~15 - BYTE byPstnProtocol; //ͨЭ飬0-CID - BYTE byDialDelay; //ʱ150s, 0-150 - BYTE byPstnTransMode; //䷽ʽ0-DTMF 5/S1-DTMF 10/S - BYTE byEnable; //ʹܣ0-رգ1- + BYTE byPhoneNum[MAX_PHONE_NUM/*32*/]; //中心号码 + BYTE byRepeatCall; //重复拨号次数,1~15次 + BYTE byPstnProtocol; //通信协议,0-CID; + BYTE byDialDelay; //拨号延时,最大150s, 0-150 + BYTE byPstnTransMode; //传输方式,0-DTMF 5/S,1-DTMF 10/S; + BYTE byEnable; //使能,0-关闭,1-启用 BYTE byRes1[5]; - BYTE byReceiverId[6]; //ջʶ˺ţ + BYTE byReceiverId[6]; //接收机识别账号; BYTE byRes2[32]; }NET_DVR_PHONECENTERDIALCFG, *LPNET_DVR_PHONECENTERDIALCFG; typedef struct tagNET_DVR_ALARMHOSTDIALCFG { DWORD dwSize; - NET_DVR_PHONECENTERDIALCFG struPhoneCenterParam[MAX_CENTERNUM];//IJ - WORD wReportPeriod; //ԱϴڣСʱֵ֧7죬168Сʱ), Χ1-168 - WORD wFirstReportTime; //豸һԱϴ1~3600 - BYTE byReportValid; //0-òԱϴ 1-òԱϴ + NET_DVR_PHONECENTERDIALCFG struPhoneCenterParam[MAX_CENTERNUM];//主中心参数 + WORD wReportPeriod; //测试报告上传周期,小时,(最大值支持7天,即168小时), 范围;1-168 + WORD wFirstReportTime; //从设备启动到第一条测试报告上传,1~3600分钟 + BYTE byReportValid; //0-不启用测试报告上传 1-启用测试报告上传 BYTE byRes[19]; }NET_DVR_ALARMHOSTDIALCFG, *LPNET_DVR_ALARMHOSTDIALCFG; typedef struct tagNET_DVR_ALARMHOSTDIALSETUPMODE { DWORD dwSize; - BYTE byEnableMode;//÷ʽ0ã1һֱã2:߶ãʱرգ - BYTE byCallType; //ϴķʽ1-ģ2-˫ģ3һһ + BYTE byEnableMode;//启用方式,0:不启用,1:一直启用,2:网线断启用,正常时关闭; + BYTE byCallType; //上传中心方式,1-单中心,2-双中心,3,一报一备 BYTE byRes1[14]; }NET_DVR_ALARMHOSTDIALSETUPMODE, *LPNET_DVR_ALARMHOSTDIALSETUPMODE; @@ -24560,72 +24560,72 @@ typedef struct tagNET_DVR_ALARMHOSTDIALSETUPMODE typedef struct tagNET_DVR_PU_CHAN_INFO { - NET_DVR_IPADDR struIpAddr; // ipַ - WORD wPort; // ˿ - WORD wChannel; // ͨ + NET_DVR_IPADDR struIpAddr; // ip地址 + WORD wPort; // 端口 + WORD wChannel; // 通道 BYTE byRes[24]; // }NET_DVR_PU_CHAN_INFO, *LPNET_DVR_PU_CHAN_INFO; typedef struct tagNET_DVR_PU_CHAN_LIST { - DWORD dwSize; // ṹ - DWORD dwNum; // ǰͨ + DWORD dwSize; // 结构体 + DWORD dwNum; // 前端通道个数 NET_DVR_PU_CHAN_INFO struPuChanInfo[MAX_PU_CHAN_NUM]; }NET_DVR_PU_CHAN_LIST, *LPNET_DVR_PU_CHAN_LIST; -#define MAX_ALARM_CAM_NUM 32 // CAM +#define MAX_ALARM_CAM_NUM 32 // 报警触发CAM最大个数 typedef struct tagNET_DVR_PTZ_CTRL { - BYTE byEnable; // ǷPTZ - BYTE byType; // PTZ Ƶ 1- Ԥõ 2 -Ѳ 3- - BYTE byPtzNo; // ptz ƵԤõ Ѳ - BYTE byRes[5]; // ֽ + BYTE byEnable; // 是否启用PTZ控制 + BYTE byType; // PTZ 控制的类型 1- 预置点 2 -巡航 3- + BYTE byPtzNo; // ptz 控制的预置点 巡航 号 + BYTE byRes[5]; // 保留字节 }NET_DVR_PTZ_CTRL, *LPNET_DVR_PTZ_CTRL; typedef struct tagNET_DVR_ALARM_CAM_INFO { - DWORD dwCamID; // CAMͨ - DWORD dwRecordTime; // ¼ʱ λΪs -1ʾһֱ¼ 0 ʾ¼ - DWORD dwMonID; // CamMonʾ - DWORD dwResidentTime; // Ѳͣʱ䵥λΪs -1ʾһֱͣ 0 ʾͣ - NET_DVR_PTZ_CTRL struPtzCtrl; // PTZϢ - BYTE byAlarmOffMode; // лǽȡģʽ 0-ȡ1-Զȡ2-ֶȡ ȡȡʱȡǽ ԶȡȡʱȴһʱȡǽԼ20 ֶȡûֶͨķʽȡ - BYTE byDevType; // 豸Ϊ豸ʱЧʾܱ豸ȡԴ 1-뿨 2-뿨 - BYTE byDecChan; // ΪͨΪͨ - BYTE byRes[17]; // ֽ + DWORD dwCamID; // 触发的CAM通道操作 + DWORD dwRecordTime; // 触发录像时间 单位为s -1表示一直录像 0 表示不录像 + DWORD dwMonID; // 触发Cam到Mon号显示 + DWORD dwResidentTime; // 轮巡停留时间单位为s -1表示一直停留 0 表示不停留 + NET_DVR_PTZ_CTRL struPtzCtrl; // PTZ控制信息 + BYTE byAlarmOffMode; // 报警切换上墙取消模式 0-立即取消,1-自动取消,2-手动取消 立即取消,报警取消时立即取消解码上墙 自动取消,报警取消时等待一定时间后取消解码上墙,我们约定是20秒 手动取消,用户通过手动的方式取消 + BYTE byDevType; // 当设备为智能设备时,生效表示智能报警设备取流源 1-解码卡 2-编码卡 + BYTE byDecChan; // 当为解码通道为解码通道号 + BYTE byRes[17]; // 保留字节 }NET_DVR_ALARM_CAM_INFO, *LPNET_DVR_ALARM_CAM_INFO; typedef struct tagNET_DVR_ALARM_CAM_CFG { - DWORD dwSize; // ṹС - BYTE byEnable; // ǷñCAM 豸Ĭϲ - BYTE byRes[7]; // ֽ - DWORD dwNum; // CAMĸ ȡǰЧ + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 是否启用报警触发CAM联动 设备默认不启用 + BYTE byRes[7]; // 保留字节 + DWORD dwNum; // 触发CAM联动的个数 即取数组的前几个有效处理 NET_DVR_ALARM_CAM_INFO struAlarmCam[MAX_ALARM_CAM_NUM]; }NET_DVR_ALARM_CAM_CFG, *LPNET_DVR_ALARM_CAM_CFG; -#define MAX_GATEWAY_NUM 8 // Ž +#define MAX_GATEWAY_NUM 8 // 最大门禁个数 typedef struct tagNET_DVR_ALARMHOST_AUDIO_ASSOCIATE_ALARM { DWORD dwSize; - BYTE byEnterDoor[8]; // ±ʾŽţԪֵʾϢ0ʾ 1-8ʾƵ - BYTE byExitDoor[8]; // ±ʾŽţԪֵʾϢ0ʾ 1-8ʾƵ - BYTE byAlarmIn[MAX_ALARMHOST_ALARMIN_NUM/*512*/]; //룬±ʾţԪֵʾϢ0ʾ 1-8ʾƵ + BYTE byEnterDoor[8]; // 下标表示门禁号,元素数值表示关联信息,0表示不关联, 1-8表示关联的音频号 + BYTE byExitDoor[8]; // 下标表示门禁号,元素数值表示关联信息,0表示不关联, 1-8表示关联的音频号 + BYTE byAlarmIn[MAX_ALARMHOST_ALARMIN_NUM/*512*/]; //关联报警输入,下标表示报警输入号,元素数值表示关联信息,0表示不关联, 1-8表示关联的音频号 BYTE byRes[128]; }NET_DVR_ALARMHOST_AUDIO_ASSOCIATE_ALARM, *LPNET_DVR_ALARMHOST_AUDIO_ASSOCIATE_ALARM; -//ϴأϴصչ +//数据上传下载(语音上传下载的扩展) typedef struct tagNET_DVR_UPLOAD_PARAM { DWORD dwSize; - BYTE byUploadType; /*ϴʽ1-ļԵַȡļϴ 2-ӻȡϴ*/ - BYTE byDataType; //ͣ1-Ƶ - BYTE byDataNum; //ݱţ磺ϴòʾţţεˡڵ - BYTE byAudioType; //ʽ0-wave - char sFileName[260]; //ļȫ· - char *lpBuffer; //ݻ - DWORD dwBufferSize; //С + BYTE byUploadType; /*上传方式,1-根据文件名绝对地址读取数据文件上传, 2-从缓冲区读取数据上传*/ + BYTE byDataType; //数据类型:1-音频数据 + BYTE byDataNum; //数据编号,如:上传语音,则该参数表示语音号,增加三条语音号(晕倒、多人、人脸遮挡) + BYTE byAudioType; //语音格式,0-wave + char sFileName[260]; //数据文件的全路径 + char *lpBuffer; //数据缓冲区 + DWORD dwBufferSize; //缓冲区大小 BYTE byRes2[128]; }NET_DVR_UPLOAD_PARAM, *LPNET_DVR_UPLOAD_PARAM; @@ -24633,13 +24633,13 @@ typedef void (CALLBACK *DATADOWNLOAD)(LONG nDownloadHandle, DWORD dwDataType, vo typedef struct tagNET_DVR_ALARMHOST_PARAM { DWORD dwSize; - BYTE byDownType; /*صݱ淽ʽ1-ļԵַݣ 2-ͨصȡ*/ - BYTE byDataType; //ͣ1-Ƶ - BYTE byDataNum; //ݱţ磺òʾţţεˡڵ + BYTE byDownType; /*下载的数据保存方式,1-根据文件名绝对地址保存数据, 2-通过回调函数获取数据*/ + BYTE byDataType; //数据类型:1-音频数据 + BYTE byDataNum; //数据编号,如:下载语音,则该参数表示语音号,增加三条语音号(晕倒、多人、人脸遮挡) BYTE byRes1; - char sFileName[260]; //ļȫ· - DATADOWNLOAD lpDataCallBack; //ʱĻص - void* pUserData; //ûݣڻصд + char sFileName[260]; //数据文件的全路径 + DATADOWNLOAD lpDataCallBack; //下载时的回调函数句柄 + void* pUserData; //用户数据,将在回调函数中传回 BYTE byRes2[128]; }NET_DVR_DOWNLOAD_PARAM, *LPNET_DVR_DOWNLOAD_PARAM; @@ -24647,88 +24647,88 @@ typedef struct tagNET_DVR_ALARMHOST_PARAM typedef struct tagNET_DVR_ALARMHOST_DOWNLOAD_PARAM { DWORD dwSize; - BYTE byDownType; /*صݱ淽ʽ1-ļԵַݣ 2-ͨصȡ*/ - BYTE byDataType; //ͣ1-Ƶ - BYTE byDataNum; //ݱţ磺òʾţţεˡڵ + BYTE byDownType; /*下载的数据保存方式,1-根据文件名绝对地址保存数据, 2-通过回调函数获取数据*/ + BYTE byDataType; //数据类型:1-音频数据 + BYTE byDataNum; //数据编号,如:下载语音,则该参数表示语音号,增加三条语音号(晕倒、多人、人脸遮挡) BYTE byRes1; - char sFileName[260]; //ļȫ· - DATADOWNLOAD lpDataCallBack; //ʱĻص - void* pUserData; //ûݣڻصд + char sFileName[260]; //数据文件的全路径 + DATADOWNLOAD lpDataCallBack; //下载时的回调函数句柄 + void* pUserData; //用户数据,将在回调函数中传回 BYTE byRes2[128]; }NET_DVR_ALARMHOST_DOWNLOAD_PARAM, *LPNET_DVR_ALARMHOST_DOWNLOAD_PARAM; -//LEDĻ +//LED屏幕参数 typedef struct tagNET_DVR_LED_SCREEN_CFG { DWORD dwSize; - BYTE sLEDName[NAME_LEN/*32*/]; // LEDĻ - BYTE byTransMode; // ִֻ֧ͨѶ 1-ͨ - BYTE byProtocolType; // ЭͣӦLEDij - BYTE byLEDColor; // 1-ɫ 2-˫ɫ 3-256Ҷ˫ɫ 4- ȫɫĿǰֻõɫ - BYTE byDataPolarity; // ݼ .0-1- - BYTE byOEPolarity; // 0-Ч 1-Ч - BYTE byScanMode; // 1-1/16, 2-1/8, 3-1/4, 4-1/2, 5-̬ + BYTE sLEDName[NAME_LEN/*32*/]; // LED屏幕名称 + BYTE byTransMode; // 现只支持串口通讯 1-串口通信 + BYTE byProtocolType; // 协议类型,对应LED屏的厂家 + BYTE byLEDColor; // 1-单色, 2-双色, 3-256级灰度双基色, 4- 全彩色(目前只用单色) + BYTE byDataPolarity; // 数据极性 .0-负极,1-正极 + BYTE byOEPolarity; // 0-低有效 1-高有效 + BYTE byScanMode; // 1-1/16, 2-1/8, 3-1/4, 4-1/2, 5-静态 BYTE byRes1[2]; - //ĻȺ͸߶С16*16㣬8 + //屏幕宽度和高度最小是16*16点,间隔是8个点 WORD wLEDWidth; // 16~2048 WORD wLEDHeight; // 16~2048 BYTE byRes2[64]; }NET_DVR_LED_SCREEN_CFG, *LPNET_DVR_LED_SCREEN_CFG; -//LED +//LED屏显内容 #define MAX_CONTENT_LEN 512 typedef struct tagNET_DVR_LED_CONTENT_CFG { DWORD dwSize; - BYTE sLEDContent[MAX_CONTENT_LEN]; // LEDĻʾ - BYTE byContentAct; // 1-̬2-ٴ3-ƶ4-ƶ 5-ƶ 6-ƶ - BYTE byContentSpeed; // 1-241죬24 - BYTE byContentStayTime; // 0-127.5s(0.5s SDKʱ*2ֵ0-255豸ʹõʱ2) + BYTE sLEDContent[MAX_CONTENT_LEN]; // LED屏幕显示内容 + BYTE byContentAct; // 1-静态,2-快速打出,3-向左移动,4-向右移动, 5-向上移动, 6-向下移动 + BYTE byContentSpeed; // 1-24(1最快,24最慢) + BYTE byContentStayTime; // 0-127.5s(精度0.5s, SDK传送时候*2,即传送数值0-255,设备端在使用的时候需除以2) BYTE byRes[33]; }NET_DVR_LED_CONTENT_CFG, *LPNET_DVR_LED_CONTENT_CFG; -//LEDʱػ -#define LED_TIMER_NUM 3 // LEDػʱ -#define TIME_SEGMENT_A_DAY 48 // ʱθһ24СʱСʱһ +//LED定时开关机 +#define LED_TIMER_NUM 3 // LED开机、关机时间组数 +#define TIME_SEGMENT_A_DAY 48 // 时间段个数,一天24小时,半小时一个段 typedef struct tagNET_DVR_SWITCH_TIME { - BYTE byValid; // 鶨ʱʱǷЧʱdzɶõ + BYTE byValid; // 该组定时时间是否有效,时间是成对设置的 BYTE byRes[3]; - NET_DVR_TIME_EX struTimeOn; // ʱ - NET_DVR_TIME_EX struTimeOff; // ػʱ + NET_DVR_TIME_EX struTimeOn; // 开机时间 + NET_DVR_TIME_EX struTimeOff; // 关机时间 }NET_DVR_SWITCH_TIME, *LPNET_DVR_SWITCH_TIME; typedef struct tagNET_DVR_LED_SWITCH_TIME { DWORD dwSize; - NET_DVR_SWITCH_TIME struTimer[LED_TIMER_NUM /*3*/]; //ʱػʱ䣬ṹֻСʱͷЧÿ鿪ʱҪڸĹػʱ䣬ǰһĹػʱҪ磺struTimer[0]Ĺػʱ1000ôstruTimer[0]ĿʱΪ10:00֮ǰ struTimer[1]ĿʱΪ10:00Ժ + NET_DVR_SWITCH_TIME struTimer[LED_TIMER_NUM /*3*/]; //定时开关机时间,结构体中只有小时和分钟两个参数有效,每组开机时间要早于该组的关机时间,但比前一组的关机时间要晚,例如:struTimer[0]的关机时间是10:00那么,struTimer[0]的开机时间须设置为10:00之前, struTimer[1]的开机时间须设置为10::00以后。 BYTE byRes[64]; }NET_DVR_LED_SWITCH_TIME, *LPNET_DVR_LED_SWITCH_TIME; -//ʱȵ +//分时亮度调节 typedef struct tagNET_DVR_LED_BRIGHTNESS_STEP { DWORD dwSize; - BYTE byValid; //ʱȵǷЧ + BYTE byValid; //分时亮度调节是否有效 BYTE byRes1[3]; - BYTE byBrightnessStep[TIME_SEGMENT_A_DAY /*48*/]; //ȫ24СʱΪ48ʱΣÿ30һʱΣ48ֽڱʾÿʱεȼȹ160~15ʾ + BYTE byBrightnessStep[TIME_SEGMENT_A_DAY /*48*/]; //将全天24个小时分为48个时段,每30分钟一个时段,用48个字节表示每个时段的亮度级别,亮度共16级,用0~15表示。 BYTE byRes2[48]; }NET_DVR_LED_BRIGHTNESS_STEP, *LPNET_DVR_LED_BRIGHTNESS_STEP; typedef struct tagNET_DVR_LED_STATUS { DWORD dwSize; - BYTE bySwitchState; //1-״̬ 2-ػ״̬ - BYTE byBrightness; //ֵΧ0-15 + BYTE bySwitchState; //1-开机状态 2-关机状态 + BYTE byBrightness; //亮度值,范围0-15 BYTE byRes[62]; }NET_DVR_LED_STATUS, *LPNET_DVR_LED_STATUS; -//2010-12-28 뿨 begin -//µĽ뿨 -#define MAX_DECODE_CARD_NUM 6 //뿨 -/********************뿨ģʽ궨********************/ +//2010-12-28 高清解码卡能力集 begin +//新的解码卡服务器能力集 +#define MAX_DECODE_CARD_NUM 6 //最多高清解码卡数 +/********************高清解码卡输出模式宏定义********************/ typedef enum _HD_DISPLAY_FORMAT { HD_DISPLAY_FORMAT_INVALID = 0x00000000, @@ -24739,25 +24739,25 @@ typedef enum _HD_DISPLAY_FORMAT HD_DISPLAY_FORMAT_YPbPr = 0x00000010 }HD_DISPLAY_FORMAT,*LPHD_DISPLAY_FORMAT; -/********************뿨ģʽ궨********************/ -typedef struct tagNET_DVR_DECCARD_ABILITY /*뿨*/ +/********************高清解码卡输出模式宏定义********************/ +typedef struct tagNET_DVR_DECCARD_ABILITY /*高清解码卡能力集*/ { - BYTE byCardType; //뿨(0:MD,1:MD+,2:HD) - BYTE byDecNums; //ͨ - BYTE byDispNums; //ʾͨ - BYTE byDecStartIdx; //׸ͨнͨе - BYTE byDispStartIdx; //׸ʾͨʾͨе - BYTE byDispResolution[80]; //ģʽֵ֧ķֱ - BYTE byDispFormat[8]; //ֵ֧ģʽ(HD_DISPLAY_FORMAT) - BYTE byWindowMode[4][8]; //ֵ֧Ĵģʽ(1,2,4,9,16)) + BYTE byCardType; //解码卡类型(0:MD,1:MD+,2:HD) + BYTE byDecNums; //解码通道数 + BYTE byDispNums; //显示通道数 + BYTE byDecStartIdx; //首个解码通道在所有解码通道中的索引 + BYTE byDispStartIdx; //首个显示通道在所有显示通道中的索引 + BYTE byDispResolution[80]; //输出模式支持的分辨率 + BYTE byDispFormat[8]; //支持的输出模式(按HD_DISPLAY_FORMAT) + BYTE byWindowMode[4][8]; //支持的窗口模式(比如1,2,4,9,16)) BYTE byRes[35]; } NET_DVR_DECCARD_ABILITY,*LPNET_DVR_DECCARD_ABILITY; typedef struct tagNET_DVR_DECODESVR_ABILITY { - DWORD dwSize; /* ṹС */ - BYTE byCardNums; /* 뿨 */ - BYTE byStartChan; /* ʼͨ */ + DWORD dwSize; /* 结构体大小 */ + BYTE byCardNums; /* 解码卡数 */ + BYTE byStartChan; /* 起始通道号 */ BYTE byRes1[2]; NET_DVR_DECCARD_ABILITY struDecCardAbility[MAX_DECODE_CARD_NUM]; BYTE byRes2[64]; @@ -24765,17 +24765,17 @@ typedef struct tagNET_DVR_DECODESVR_ABILITY typedef struct tagNET_MATRIX_DEV_CHAN_INFO { - NET_DVR_IPADDR struIP; //DVR IPַ - WORD wDVRPort; //˿ں - BYTE byChannel; //ͨ - BYTE byTransProtocol; //Э0-TCP1-UDP - BYTE byTransMode; //ģʽ 0 1 - BYTE byFactoryType; /*ǰ豸,ͨӿڻȡ*/ - BYTE byUsedSlotNum; //Ƿʹòλţ0-ʹã1-ʹ - BYTE bySlotNum;//λ + NET_DVR_IPADDR struIP; //DVR IP地址 + WORD wDVRPort; //端口号 + BYTE byChannel; //通道号 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byUsedSlotNum; //是否使用槽位号,0-不使用,1-使用 + BYTE bySlotNum;//槽位号 BYTE byRes[68]; - BYTE sUserName[NAME_LEN]; //½ʺ - BYTE sPassword[PASSWD_LEN]; // + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 }NET_MATRIX_DEV_CHAN_INFO,*LPNET_MATRIX_DEV_CHAN_INFO; typedef struct tagNET_MATRIX_PU_STREAM_CFG @@ -24785,11 +24785,11 @@ typedef struct tagNET_MATRIX_PU_STREAM_CFG NET_MATRIX_DEV_CHAN_INFO struDevChanInfo; } NET_MATRIX_PU_STREAM_CFG,LPNET_MATRIX_PU_STREAM_CFG; -/*cameraõԪṹ*/ +/*camera配置单元结构*/ typedef struct tagNET_DVR_MATRIX_CAMERACFG { - DWORD dwGlobalIndex;//ȫֱ - DWORD dwInterIndex;//ֲ + DWORD dwGlobalIndex;//全局编号 + DWORD dwInterIndex;//局部编号 BYTE sCamName[NAME_LEN]; NET_MATRIX_PU_STREAM_CFG struPuStreamCfg; } NET_DVR_MATRIX_CAMERACFG,*LPNET_DVR_MATRIX_CAMERACFG; @@ -24798,27 +24798,27 @@ typedef struct tagNET_DVR_MATRIX_CAMERALIST { DWORD dwSize; BYTE byRes[12]; - DWORD dwCamNum;//CAM + DWORD dwCamNum;//CAM数量 BYTE *pBuffer; - DWORD dwBufLen;//ָ볤ȣ + DWORD dwBufLen;//所分配指针长度,输入参数 } NET_DVR_MATRIX_CAMERALIST,*LPNET_DVR_MATRIX_CAMERALIST; typedef struct tagNET_DVR_DISP_CHAN_INFO { - NET_DVR_IPADDR struIP; /* IPַ */ - WORD wDVRPort; /* ˿ں */ - BYTE byDispChannel; /* ʾͨ */ - BYTE byUsedSlotNum; //Ƿʹòλţ0-ʹã1-ʹ - BYTE bySlotNum;//λ + NET_DVR_IPADDR struIP; /* 解码器 IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byDispChannel; /* 显示通道号 */ + BYTE byUsedSlotNum; //是否使用槽位号,0-使用,1-不使用 + BYTE bySlotNum;//槽位号 BYTE byRes[7]; - BYTE sUserName[NAME_LEN]; /*½ʺ */ - BYTE sPassword[PASSWD_LEN]; /* */ + BYTE sUserName[NAME_LEN]; /*登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /*密码 */ }NET_DVR_DISP_CHAN_INFO,*LPNET_DVR_DISP_CHAN_INFO; -/*monitorõԪṹ*/ +/*monitor配置单元结构*/ typedef struct tagNET_DVR_MATRIX_MONITORCFG { - DWORD dwGlobalIndex;//ȫֱ + DWORD dwGlobalIndex;//全局编号 DWORD dwInterIndex; BYTE sMonName[NAME_LEN]; NET_DVR_DISP_CHAN_INFO struDispChanCfg; @@ -24828,28 +24828,28 @@ typedef struct tagNET_DVR_MATRIX_MONITORLIST { DWORD dwSize; BYTE byRes[12]; - DWORD dwMonNum;//MON + DWORD dwMonNum;//MON数量 BYTE *pBuffer; - DWORD dwBufLen;//ָ볤ȣ + DWORD dwBufLen;//所分配指针长度,输入参数 } NET_DVR_MATRIX_MONITORLIST,*LPNET_DVR_MATRIX_MONITORLIST; -#define MAX_SUBMATRIX_NUM 8//ϵͳ +#define MAX_SUBMATRIX_NUM 8//级联中子最多从系统数量 typedef struct tagNET_DVR_SUBMATRIXINFO { - BYTE byMainMatrix;//Ƿϵͳ1-ǣ0- - BYTE bySubMatrixSequence;//Ƶۺƽ̨ϵͳ - BYTE byLoginType;//עͣ1-ֱ2-DNS3- + BYTE byMainMatrix;//是否是主系统,1-是,0-否 + BYTE bySubMatrixSequence;//级联子视频综合平台系统序号 + BYTE byLoginType;//注册类型,1-直连,2-DNS,3-花生壳 BYTE byRes1[9]; - NET_DVR_IPADDR struSubMatrixIP; /*IPַ޸ģ*/ - WORD wSubMatrixPort; /*ϵͳ˿ںţ޸ģ*/ + NET_DVR_IPADDR struSubMatrixIP; /*IP地址(可修改)*/ + WORD wSubMatrixPort; /*子系统端口号(可修改)*/ BYTE byRes2[6]; - NET_DVR_IPADDR struSubMatrixIPMask; /*IPַ*/ - NET_DVR_IPADDR struGatewayIpAddr; /* صַ */ - BYTE sUserName[NAME_LEN]; /* û ˲ֻܻȡ*/ - BYTE sPassword[PASSWD_LEN]; /* ˲ֻܻȡ*/ - char sDomainName[MAX_DOMAIN_NAME];//(޸) - char sDnsAddress[MAX_DOMAIN_NAME];/*DNSIPַ*/ - BYTE sSerialNumber[SERIALNO_LEN];//кţ˲ֻܻȡ + NET_DVR_IPADDR struSubMatrixIPMask; /*IP地址掩码*/ + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + BYTE sUserName[NAME_LEN]; /* 用户名 (此参数只能获取)*/ + BYTE sPassword[PASSWD_LEN]; /*密码 (此参数只能获取)*/ + char sDomainName[MAX_DOMAIN_NAME];//域名(可修改) + char sDnsAddress[MAX_DOMAIN_NAME];/*DNS域名或IP地址*/ + BYTE sSerialNumber[SERIALNO_LEN];//序列号(此参数只能获取) BYTE byRes3[16]; }NET_DVR_SUBMATRIXINFO, *LPNET_DVR_SUBMATRIXINFO; @@ -24860,12 +24860,12 @@ typedef struct tagNET_DVR_ALLUNITEDMATRIXINFO BYTE byRes2[32]; }NET_DVR_ALLUNITEDMATRIXINFO, *LPNET_DVR_ALLUNITEDMATRIXINFO; -#define MAX_GATEWAYTRUNKNUM 1024 //Ƶۺƽ̨·ɸ +#define MAX_GATEWAYTRUNKNUM 1024 //级联视频综合平台中最大路由干线数 typedef struct tagNET_DVR_MATRIXGATEWAYNOTE { - WORD wTrunkInToOutAbility;//ߴD1ı׼4ʾ֧4D1 - WORD wTrunkOutToInAbility;//ߴD1ı׼4ʾ֧4D1˫ʱõֵ + WORD wTrunkInToOutAbility;//干线带宽,按D1的标准衡量,如4表示支持4个D1 + WORD wTrunkOutToInAbility;//干线带宽,按D1的标准衡量,如4表示支持4个D1,双向光纤时用到此值 BYTE byRes[4]; NET_DVR_MATRIXSUBSYSTEMINFO struInputNote; NET_DVR_MATRIXSUBSYSTEMINFO struOutputNote; @@ -24880,17 +24880,17 @@ typedef struct tagNET_DVR_MATRIXGATEWAYINFO typedef struct tagNET_DVR_MATRIXCODESYSTEMINFO { - BYTE byMatrixNum;//Ƶۺƽ̨ - BYTE bySubSystemNum;//ϵͳλ - BYTE byChan;//ͨ + BYTE byMatrixNum;//视频综合平台号 + BYTE bySubSystemNum;//子系统槽位号 + BYTE byChan;//编码通道 BYTE byRes [13]; }NET_DVR_MATRIXCODESYSTEMINFO,*LPNET_DVR_MATRIXCODESYSTEMINFO; typedef struct tagNET_DVR_MATRIXDECODESYSTEMINFO { - BYTE byMatrixNum;//Ƶۺƽ̨ - BYTE bySubSystemNum;//ϵͳλ - BYTE byDispChan;//ʾͨ - BYTE bySubDispChan;//ʾͨͨ + BYTE byMatrixNum;//视频综合平台号 + BYTE bySubSystemNum;//子系统槽位号 + BYTE byDispChan;//显示通道 + BYTE bySubDispChan;//显示通道子通道号 BYTE byRes [12]; }NET_DVR_MATRIXDECODESYSTEMINFO,*LPNET_DVR_MATRIXDECODESYSTEMINFO; @@ -24918,54 +24918,54 @@ typedef enum { typedef struct tagNET_DVR_MATRIXSWITCHCTRL { - DWORD dwCamId;//ȫֱ - DWORD dwMonId;//ʾȫֱ - BYTE bySubWindowNum;//ʾӦӴں - BYTE bySwitchType;/*лͣ0:л1:л2:ȡ0xff:ʾMONбȫȡ*/ - WORD wAlarmType;//豸ͣ1:2豸 - DWORD dwResidentTime;/* ʾפʱ䣬0xFFFFFFFF ʱ Ϊפʾ*/ - BYTE byVcaDevType;//豸"豸"ʱDEV_TYPE - BYTE byWallNo;//ǽ + DWORD dwCamId;//摄像机全局编号 + DWORD dwMonId;//显示器全局编号 + BYTE bySubWindowNum;//显示器对应子窗口号 + BYTE bySwitchType;/*切换类型,0:正常切换,1:报警触发切换,2:报警取消,0xff:表示此MON上所有报警全部取消*/ + WORD wAlarmType;//报警设备类型,1:报警主机,2:智能设备 + DWORD dwResidentTime;/* 显示驻留时间,0xFFFFFFFF 时 为常驻情况,保持显示*/ + BYTE byVcaDevType;//当报警设备类型是"智能设备"时,按DEV_TYPE类型 + BYTE byWallNo;//墙号 BYTE byRes[18]; }NET_DVR_MATRIXSWITCHCTRL, *LPNET_DVR_MATRIXSWITCHCTRL; typedef struct tagNET_DVR_MATRIXDATABASE { - //ļͣ1-ݿļ2-ݿļ3-ƽ̨ݿļ4-ļ0xffһʧܵݿ + //配置文件类型,1-域数据库配置文件,2-子域数据库配置文件,3-平台数据库配置文件,4-场景配置文件,0xff最后一次失败的数据库语句 DWORD dwDevType; - DWORD dwParam; //ššƽ̨ţļʱֵ - BYTE byFileType;//ļͣ1-sql䣬2-db䣬3-ļ + DWORD dwParam; //参数,代表域号、子域号、平台号,场景配置文件时此值无用 + BYTE byFileType;//文件类型,1-sql语句,2-db语句,3-场景配置文件 BYTE byRes [3]; } NET_DVR_MATRIXDATABASE, *LPNET_DVR_MATRIXDATABASE; typedef struct tagNET_DVR_SUBSYSTEMINFO_V40 { -/*ϵͳͣ1-ϵͳ2-ϵͳ3-ϵͳ4-ϵͳ5-ϵͳ6-ϵͳ7-ϵͳ8-V6ϵͳ - 9-V6ϵͳ10-תϵͳ11-X86ϵͳ12-ϵͳ13-X86ķ壬14- X86ҵ壬15-ƴϵͳ 16-˽ϵͳ17-X86ƴϵͳ18-ͨƴϵͳ19-Ƶϵͳ0-NULL˲ֻܻȡ*/ +/*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-V6解码子系统, + 9-V6子系统,10-转码子系统,11-X86服务器子系统,12-超高清输入子系统,13-X86中心服务板,14- X86业务服务板,15-多相机拼接子系统, 16-网络光纤交换子系统,17-X86拼接子系统,18-普通拼接子系统,19-音频子系统,0-NULL(此参数只能获取)*/ BYTE bySubSystemType; - //ϵͳͨϵͳ485˲ֻܻȡ + //子系统通道数,对于码分子系统,代表485串口数量(此参数只能获取) BYTE byChan; - BYTE byLoginType;//עͣ1-ֱ2-DNS3- - BYTE bySlotNum ;//λţ˲ֻܻȡ + BYTE byLoginType;//注册类型,1-直连,2-DNS,3-花生壳 + BYTE bySlotNum ;//槽位号,此参数只能获取 BYTE byRes1[4]; - NET_DVR_IPADDR struSubSystemIP; /*IPַ޸ģ*/ - NET_DVR_IPADDR struSubSystemIPMask;// - NET_DVR_IPADDR struGatewayIpAddr; /* صַ */ - WORD wSubSystemPort; //ϵͳ˿ںţ޸ģ + NET_DVR_IPADDR struSubSystemIP; /*IP地址(可修改)*/ + NET_DVR_IPADDR struSubSystemIPMask;//子网掩码 + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + WORD wSubSystemPort; //子系统端口号(可修改) BYTE byRes2[6]; - BYTE sUserName[NAME_LEN]; /* û ˲ֻܻȡ*/ - BYTE sPassword[PASSWD_LEN]; /*(޸)*/ - char sDomainName[MAX_DOMAIN_NAME];//(޸) - char sDnsAddress[MAX_DOMAIN_NAME];/*DNSIPַ*/ - BYTE sSerialNumber[SERIALNO_LEN];//кţ˲ֻܻȡ - BYTE byBelongBoard;//Ӱţ1ʼ0xffʾЧ - BYTE byInterfaceType;//ӿͣ0-ͣ1-BNC2-VGA3-HDMI4-DVI5-SDI, 6-FIBER, 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVIӦ10-3GSDI, 11-VGA/DVIӦ12-HDTVI13-HDBaseT14-DP15-DVIT16-TVI,17-VSCREEN,18-miniDP,0xff-Ч - BYTE byInterfaceNums;//ӿڸ0xffʾЧ - BYTE byInterfaceStartNum;//ӿʼţ0xffʾЧ - BYTE byDeviceName[20];//ϵͳ - BYTE byAudioChanNums; //Ƶͨ - BYTE byAudioChanStartNum; //Ƶͨʼ - BYTE byAudioChanType;//Ƶͨͣ0-Ч1-Ƶ룬2-Ƶ + BYTE sUserName[NAME_LEN]; /* 用户名 (此参数只能获取)*/ + BYTE sPassword[PASSWD_LEN]; /*密码(可修改)*/ + char sDomainName[MAX_DOMAIN_NAME];//域名(可修改) + char sDnsAddress[MAX_DOMAIN_NAME];/*DNS域名或IP地址*/ + BYTE sSerialNumber[SERIALNO_LEN];//序列号(此参数只能获取) + BYTE byBelongBoard;//所属子板号,从1开始,0xff表示无效 + BYTE byInterfaceType;//接口类型,0-无类型,1-BNC,2-VGA,3-HDMI,4-DVI,5-SDI, 6-FIBER, 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVI自适应,10-3GSDI, 11-VGA/DVI自适应,12-HDTVI,13-HDBaseT,14-DP,15-DVIT,16-TVI,17-VSCREEN,18-miniDP,0xff-无效 + BYTE byInterfaceNums;//接口个数,0xff表示无效 + BYTE byInterfaceStartNum;//接口起始号,0xff表示无效 + BYTE byDeviceName[20];//子系统名称 + BYTE byAudioChanNums; //音频通道个数 + BYTE byAudioChanStartNum; //音频通道起始号 + BYTE byAudioChanType;//音频通道类型,0-无效,1-音频输入,2-音频输出 BYTE byRes3[33]; }NET_DVR_SUBSYSTEMINFO_V40, *LPNET_DVR_SUBSYSTEMINFO_V40; @@ -24980,72 +24980,72 @@ typedef struct tagNET_DVR_ALLSUBSYSTEMINFO_V40 typedef struct tagNET_DVR_SUBSYSTEM_BASIC_INFO { DWORD dwSize; - /*ϵͳͣ1-ϵͳ2-ϵͳ3-ϵͳ4-ϵͳ5-ϵͳ6-ϵͳ7-ϵͳ8-Fpgaϵͳ9-Fpgaϵͳ10-תϵͳ11-X86ϵͳ12-ϵͳ13-X86ķ壬 14- X86ҵ壬15-ƴϵͳ 16-˽ϵͳ17-X86ƴϵͳ18-ͨƴϵͳ19-źŽϵͳ,0-NULL˲ֻܻȡ*/ + /*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-Fpga解码子系统,9-Fpga子系统,10-转码子系统,11-X86服务器子系统,12-超高清输入子系统,13-X86中心服务板, 14- X86业务服务板,15-多相机拼接子系统, 16-网络光纤交换子系统,17-X86拼接子系统,18-普通拼接子系统,19-信号接入子系统,0-NULL(此参数只能获取)*/ BYTE bySubSystemType; - //ϵͳͨϵͳ485˲ֻܻȡ - BYTE bySubSystemNo;//ϵͳţ˲ֻܻȡ - BYTE byInterfaceType;//ӿͣ0-ͣ1-BNC2-VGA3-HDMI4-DVI5-SDI, 6-FIBER, 7-RGB, 8-YprPb, 9-VGA/HDMI/DVIӦ10-3GSDI, 11-VGA/DVIӦ12-HDTVI13-HDBaseT14-DP15-DVIT0xff-Ч + //子系统通道数,对于码分子系统,代表485串口数量(此参数只能获取) + BYTE bySubSystemNo;//子系统号,此参数只能获取 + BYTE byInterfaceType;//接口类型,0-无类型,1-BNC,2-VGA,3-HDMI,4-DVI,5-SDI, 6-FIBER, 7-RGB, 8-YprPb, 9-VGA/HDMI/DVI自适应,10-3GSDI, 11-VGA/DVI自适应,12-HDTVI,13-HDBaseT,14-DP,15-DVIT,0xff-无效 BYTE byRes1; DWORD dwChan; - NET_DVR_IPADDR struSubSystemIP; /*IPַ޸ģ*/ - NET_DVR_IPADDR struSubSystemIPMask;// - NET_DVR_IPADDR struGatewayIpAddr; /* صַ */ - WORD wSubSystemPort; //ϵͳ˿ںţ޸ģ + NET_DVR_IPADDR struSubSystemIP; /*IP地址(可修改)*/ + NET_DVR_IPADDR struSubSystemIPMask;//子网掩码 + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + WORD wSubSystemPort; //子系统端口号(可修改) BYTE byRes2[6]; - BYTE sSerialNumber[SERIALNO_LEN];//кţ˲ֻܻȡ - BYTE byBelongBoard;//Ӱţ1ʼ0xffʾЧbyBelongBoardHΪ0ʱֶοΪ0xff - BYTE byBelongBoardH; //ӰŸλ + BYTE sSerialNumber[SERIALNO_LEN];//序列号(此参数只能获取) + BYTE byBelongBoard;//所属子板号,从1开始,0xff表示无效,但当byBelongBoardH不为0时该字段可以为0xff + BYTE byBelongBoardH; //所属子板号高位 BYTE byRes3[2]; - BYTE byDeviceName[20];//ϵͳ - DWORD dwStartChanNo;//ʼͨ - BYTE byDevNo; //豸 + BYTE byDeviceName[20];//子系统名称 + DWORD dwStartChanNo;//起始通道号 + BYTE byDevNo; //设备号 BYTE byRes4[63]; }NET_DVR_SUBSYSTEM_BASIC_INFO, *LPNET_DVR_SUBSYSTEM_BASIC_INFO; typedef struct NET_DVR_SUBSYSTEM_BASIC_INFO_RESPONSE { DWORD dwSize; - DWORD dwErrorCode; // - BYTE byDevNo; //豸 - BYTE bySubSystemNo;//ϵͳ + DWORD dwErrorCode; //错误 + BYTE byDevNo; //设备号 + BYTE bySubSystemNo;//子系统号 BYTE byRes[30]; } NET_DVR_SUBSYSTEM_BASIC_INFO_RESPONSE,*LPNET_DVR_SUBSYSTEM_BASIC_INFO_RESPONSE; typedef struct NET_DVR_CAMERA_INFO_RESPONSE { - DWORD dwErrorCode; // - DWORD dwCamId; /*cam ͳһ*/ + DWORD dwErrorCode; //错误 + DWORD dwCamId; /*cam 的统一编号*/ BYTE byRes[4]; } NET_DVR_CAMERA_INFO_RESPONSE,*LPNET_DVR_CAMERA_INFO_RESPONSE; typedef struct NET_DVR_MONITOR_INFO_RESPONSE { - DWORD dwErrorCode; // - DWORD dwMonId; /*mon ͳһ*/ + DWORD dwErrorCode; //错误 + DWORD dwMonId; /*mon 的统一编号*/ BYTE byRes[4]; } NET_DVR_MONITOR_INFO_RESPONSE, *LPNET_DVR_MONITOR_INFO_RESPONSE; typedef struct tagNET_DVR_AUDIO_INFO { DWORD dwSize; - BYTE byAudioChanType;//Ƶͨͣ1-Ƶ룬2-Ƶ + BYTE byAudioChanType;//音频通道类型,1-音频输入,2-音频输出 BYTE byRes1[3]; - DWORD dwAudioNo; //Ƶ(1ֽ豸+1ֽӰ+2ֽƵں) + DWORD dwAudioNo; //音频号(1字节设备号+1字节子板号+2字节音频口号) BYTE byRes2[16]; }NET_DVR_AUDIO_INFO, *LPNET_DVR_AUDIO_INFO; typedef struct tagNET_DVR_SINGLESUBSYSTEMJOININFO_V40 { - /*ϵͳͣ1-ϵͳ2-ϵͳ3-ϵͳ4-ϵͳ5-ϵͳ6-ϵͳ7-ϵͳ8-V6ϵͳ9-V6ϵͳ0-NULL˲ֻܻȡ*/ + /*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-V6解码子系统,9-V6子系统,0-NULL(此参数只能获取)*/ BYTE bySubSystemType; - BYTE byConnectStatus;//ϵͳ״̬1-2-ӶϿ - BYTE byMatrixNum;//Ƶۺƽ̨ţϵͳ34ʱ - BYTE bySubSystemNum;//ϵͳλţ0~79ϵͳ34ʱ + BYTE byConnectStatus;//级联系统关联状态,1-连接正常,2-连接断开 + BYTE byMatrixNum;//级联视频综合平台号,子系统类型是3或4时可用 + BYTE bySubSystemNum;//级联子系统槽位号,0~79,子系统类型是3或4时可用 NET_DVR_DECSUBSYSTEMJIONSTATUS struDecSub [MATRIX_MAXDECSUBSYSTEMCHAN]; - BYTE byBindStatus;//״̬0-ûа󶨣1-Ѿ󶨣ƴʱõ - BYTE bySlotNum ;//λţ˲ֻܻȡ - //ϵͳΪ1ʱã0-δ1-D12-7203-1080 + BYTE byBindStatus;//绑定状态,0-没有绑定,1-已经绑定(大屏拼接时用到) + BYTE bySlotNum ;//槽位号,此参数只能获取 + //子系统类型为1的时可用,0-未关联,1-D1,2-720,3-1080 BYTE byDecodeAbility; BYTE byUsedTrunk; BYTE byRes[64]; @@ -25061,90 +25061,90 @@ typedef struct tagNET_DVR_ALLDECSUBSYSTEMJOININFO_V40 #define MAX_OPTICALFIBER_NUM 16 typedef struct tagNET_DVR_SUBSYSTEM_ABILITY { -/*ϵͳͣ1-ϵͳ2-ϵͳ3-ϵͳ4-ϵͳ5-ϵͳ6-ϵͳ7-ϵͳ8-V6ϵͳ9-V6ϵͳ - 10-תϵͳ11-X86ϵͳ壬 14- X86ҵ壬15-ƴϵͳ 16-˽ϵͳ17-X86ƴϵͳ18-ͨƴϵͳ0-NULL˲0-NULL˲ֻܻȡ*/ +/*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-V6解码子系统,9-V6子系统, + 10-转码子系统,11-X86服务器子系统,板, 14- X86业务服务板,15-多相机拼接子系统, 16-网络光纤交换子系统,17-X86拼接子系统,18-普通拼接子系统,0-NULL(此参数0-NULL(此参数只能获取)*/ BYTE bySubSystemType; - BYTE byChanNum;//ϵͳͨ - BYTE byStartChan;//ϵͳʼͨ - BYTE bySlotNum ;//λ + BYTE byChanNum;//子系统通道数 + BYTE byStartChan;//子系统起始通道数 + BYTE bySlotNum ;//槽位号 BYTE byRes1[4]; union { BYTE byRes[200]; struct { - BYTE byDecode; //ǷǴ빦ܵܰ,1-ǣ0- - BYTE byNeedPreAllocDec; //ǷҪԤԴ1-ǣ0- - BYTE byVACType; //ϵͳͣ0-ͨͣ1-ǿ + BYTE byDecode; //是否是带解码功能的智能板,1-是,0-否 + BYTE byNeedPreAllocDec; //是否需要预分配解码资源,1-是,0-否 + BYTE byVACType; //智能子系统类型,0-普通型,1-增强型 BYTE byRes[197]; }struVACSystemAbility; struct { - BYTE byVGANums;//VGAʾͨ1ʼ - BYTE byBNCNums;//BNCʾͨ9ʼ - BYTE byHDMINums;//HDMIʾͨ25ʼ - BYTE byDVINums;//DVIʾͨ29ʼ - BYTE byLayerNums ;//ƴУʱ֧ͼ - BYTE bySpartan;//Թܣ0-֧֣1-֧ - BYTE byDecType; //ϵͳͣ0-ͨ,1-ǿ(ͨͷʱǰ4ʹԴǿ޴ƣǿɱϵͳ16·D1Դ - //ǿͱΪԴɱãܱͨ) - //2-ܹϵͳ3-תϵͳܺתϵͳڽǽ - BYTE byOutputSwitch;//Ƿ֧HDMI/DVIл0-֧֣1-֧ - BYTE bySDINums;//SDIʾͨ33ʼ + BYTE byVGANums;//VGA显示通道个数(从1开始) + BYTE byBNCNums;//BNC显示通道个数(从9开始) + BYTE byHDMINums;//HDMI显示通道个数(从25开始) + BYTE byDVINums;//DVI显示通道个数(从29开始) + BYTE byLayerNums ;//大屏拼接中,做主屏时所支持图层数 + BYTE bySpartan;//畅显功能,0-不支持,1-支持 + BYTE byDecType; //解码子系统类型,0-普通型,1-增强型(普通型分屏时前4窗口需使用自身资源,增强型无此限制,增强型最多可被其他子系统借16路D1解码资源 + //增强型被大屏关联为子屏后资源可被借用,普通型则不能被借用) + //2-智能关联解码子系统,3-转码关联解码子系统(智能和转码关联子系统不能用于解码上墙) + BYTE byOutputSwitch;//是否支持HDMI/DVI互相切换,0-不支持,1-支持 + BYTE bySDINums;//SDI显示通道个数(从33开始) BYTE byRes1[38]; - BYTE byDecoderType ; //Ƿֶ֧೧룬0-֧֣1-֧ + BYTE byDecoderType ; //解码板是否支持多厂家码流解码,0-不支持,1-支持 BYTE byRes2[152]; }struDecoderSystemAbility; struct { - BYTE byCoderType;//ͣ0-壬1-, 2-ģ - BYTE byOptical;//˻룬0-1- - BYTE byOpticalSubChan; //ÿŵ - BYTE bySupportAVSeparate;//Ƿ֧Ƶ룬0-֧֣1-֧ + BYTE byCoderType;//编码器类型,0-标清,1-高清, 2-模拟高清 + BYTE byOptical;//光端机接入,0-否,1-是 + BYTE byOpticalSubChan; //每个光口信道数 + BYTE bySupportAVSeparate;//是否支持音视频分离,0-不支持,1-支持 BYTE byRes[196]; }struCoderSystemAbility; struct { - WORD wTrunkAbility;//ߴD1ı׼4ʾ֧4D1 - BYTE byOpticalFiberNum;// + WORD wTrunkAbility;//干线带宽,按D1的标准衡量,如4表示支持4个D1 + BYTE byOpticalFiberNum;//光纤条数 BYTE byRes[197]; }struInputSystemAbility; struct { - WORD wTrunkAbility;//ߴD1ı׼4ʾ֧4D1 - BYTE byOpticalFiberNum;// + WORD wTrunkAbility;//干线带宽,按D1的标准衡量,如4表示支持4个D1 + BYTE byOpticalFiberNum;//光纤条数 BYTE byRes[197]; }struOutputSystemAbility; struct { - BYTE by485Num;//ϵͳ485 - BYTE bySlotNum;//ÿ485λ + BYTE by485Num;//码分子系统中485数量 + BYTE bySlotNum;//每个485槽位数 BYTE byRes[198]; }struCodeSpitterSystemAbility; struct { WORD wAlarmInNums; WORD wAlarmOutNums; - /* ʶǷӣ 1ʾӣ Ϊ0 ʾδ */ + /* 标识报警盒是否连接, 1表示已连接, 为0 表示未连接 */ BYTE byAlarmBoxEnable[4][8]; - BYTE bySupportContact; /* Ƶۺƽ̨ڲ0-֧,1-֧ */ + BYTE bySupportContact; /* 视频综合平台内部报警联动,0-不支持,1-支持 */ BYTE byRes[163]; }struAlarmHostSystemAbility; struct { - BYTE byOpticalFiberNum;// + BYTE byOpticalFiberNum;//光纤条数 BYTE byRes1[3]; - //˴D1ı׼4ʾ֧4D1 + //光纤带宽,按D1的标准衡量,如4表示支持4个D1 WORD wTrunkAbility[MAX_OPTICALFIBER_NUM/*16*/]; BYTE byRes2[164]; }struInOutputSystemAbility; struct { - BYTE bySupportRingProtocol; //Ƿֻ֧Э - BYTE bySupportRingNums; //ֻ֧ - BYTE bySupportPortNums; //ֵ֧Ķ˿ + BYTE bySupportRingProtocol; //是否支持环网协议 + BYTE bySupportRingNums; //支持环网数量 + BYTE bySupportPortNums; //支持的端口数量 BYTE byRes[1]; - DWORD dwPortSupportRingProto; //ÿ˿Ƿֻ֧Э飬λ㣬132λֱʾ132˿ڣ0-֧֣1-ʾ֧ + DWORD dwPortSupportRingProto; //每个端口是否支持环网协议,按位算,1~32位分别表示1~32端口,0-不支持,1-表示支持 BYTE byRes2[192]; } struFiberSwitchSystemAbility; }struAbility; @@ -25153,102 +25153,102 @@ typedef struct tagNET_DVR_SUBSYSTEM_ABILITY typedef struct tagNET_DVR_VIDEOPLATFORM_ABILITY_V40 { DWORD dwSize; - BYTE byCodeSubSystemNums;//ϵͳ - BYTE byDecodeSubSystemNums;//ϵͳ - BYTE bySupportNat;//Ƿ֧NAT0-֧֣1-֧ - BYTE byInputSubSystemNums;//ϵͳ - BYTE byOutputSubSystemNums;//ϵͳ - BYTE byCodeSpitterSubSystemNums;//ϵͳ - BYTE byAlarmHostSubSystemNums;//ϵͳ - BYTE bySupportBigScreenNum;//֧ɴĸ - BYTE byVCASubSystemNums;//ϵͳ - BYTE byV6SubSystemNums;//V6ϵͳ - BYTE byV6DecoderSubSystemNums;//V6ϵͳ - BYTE bySupportBigScreenX;/*ƴӵģʽmn*/ + BYTE byCodeSubSystemNums;//编码子系统数量 + BYTE byDecodeSubSystemNums;//解码子系统数量 + BYTE bySupportNat;//是否支持NAT,0-不支持,1-支持 + BYTE byInputSubSystemNums;//级联输入子系统数量 + BYTE byOutputSubSystemNums;//级联输出子系统数量 + BYTE byCodeSpitterSubSystemNums;//码分子系统数量 + BYTE byAlarmHostSubSystemNums;//报警子系统数量 + BYTE bySupportBigScreenNum;//所支持最多组成大屏的个数 + BYTE byVCASubSystemNums;//智能子系统数量 + BYTE byV6SubSystemNums;//V6子系统数量 + BYTE byV6DecoderSubSystemNums;//V6解码子系统数量 + BYTE bySupportBigScreenX;/*大屏拼接的模式:m×n*/ BYTE bySupportBigScreenY; - BYTE bySupportSceneNums;//ֳ֧ģʽĸ - BYTE byVcaSupportChanMode;//ֵ֧ͨʹģʽ0-ʹýͨ1-ʹʾͨͨ - BYTE bySupportScreenNums;//ֵ֧ĴĻ - BYTE bySupportLayerNums;//ֵ֧ͼ0xff-Ч - BYTE byNotSupportPreview;//Ƿ֧Ԥ,1-֧֣0-֧ - BYTE byNotSupportStorage;//Ƿִ֧洢,1-֧֣0-֧ - BYTE byUploadLogoMode;//ϴlogoģʽ0-ϴͨ1-ϴʾͨ + BYTE bySupportSceneNums;//支持场景模式的个数 + BYTE byVcaSupportChanMode;//智能支持的通道使用模式,0-使用解码通道,1-使用显示通道及子通道号 + BYTE bySupportScreenNums;//所支持的大屏的屏幕最大个数 + BYTE bySupportLayerNums;//所支持的图层数,0xff-无效 + BYTE byNotSupportPreview;//是否支持预览,1-不支持,0-支持 + BYTE byNotSupportStorage;//是否支持存储,1-不支持,0-支持 + BYTE byUploadLogoMode;//上传logo模式,0-上传给解码通道,1-上传给显示通道 NET_DVR_SUBSYSTEM_ABILITY struSubSystemAbility[MAX_SUBSYSTEM_NUM_V40]; - BYTE by485Nums;//485ڸ - BYTE by232Nums;//232ڸ - BYTE bySerieStartChan;//ʼͨ - BYTE byScreenMode;//ģʽ0-ɿͻ˷䣬1-豸˷ - BYTE byDevVersion;//豸汾0-B10/B11/B121-B20 - BYTE bySupportBaseMapNums;//ֵ֧ĵͼͼŴ1ʼ - WORD wBaseLengthX;//ÿСĻ׼ֵB20ʹ + BYTE by485Nums;//485串口个数 + BYTE by232Nums;//232串口个数 + BYTE bySerieStartChan;//起始通道 + BYTE byScreenMode;//大屏模式,0-主屏由客户端分配,1-主屏由设备端分配 + BYTE byDevVersion;//设备版本,0-B10/B11/B12,1-B20 + BYTE bySupportBaseMapNums;//所支持的底图数,底图号从1开始 + WORD wBaseLengthX;//每个屏大小的基准值,B20使用 WORD wBaseLengthY; - BYTE bySupportPictureTrans; //Ƿ֧ͼƬԣ0-֧֣1-֧ - BYTE bySupportPreAllocDec; //Ƿ֧ܽԴԤ䣬0-֧֣1-֧ - BYTE bySupportDecAutoManage; //Ƿֽ֧Դ - BYTE byTranDevSubSystemNums; //תϵͳ - BYTE byFiberSwitchNums; //ϵͳ + BYTE bySupportPictureTrans; //是否支持图片回显,0-不支持,1-支持 + BYTE bySupportPreAllocDec; //是否支持智能解码资源预分配,0-不支持,1-支持 + BYTE bySupportDecAutoManage; //是否支持解码资源管理 + BYTE byTranDevSubSystemNums; //转码子系统数量 + BYTE byFiberSwitchNums; //网络光纤子系统数量 BYTE byRes2[625]; }NET_DVR_VIDEOPLATFORM_ABILITY_V40, *LPNET_DVR_VIDEOPLATFORM_ABILITY_V40; typedef struct tagNET_DVR_VIDEOPLATFORM_ABILITY { DWORD dwSize; - BYTE byCodeSubSystemNums;//ϵͳ - BYTE byDecodeSubSystemNums;//ϵͳ - BYTE bySupportNat;//Ƿ֧NAT0-֧֣1-֧ - BYTE byInputSubSystemNums;//ϵͳ - BYTE byOutputSubSystemNums;//ϵͳ - BYTE byCodeSpitterSubSystemNums;//ϵͳ - BYTE byAlarmHostSubSystemNums;//ϵͳ - BYTE bySupportBigScreenNum;//֧ƴ - BYTE byVCASubSystemNums;//ϵͳ + BYTE byCodeSubSystemNums;//编码子系统数量 + BYTE byDecodeSubSystemNums;//解码子系统数量 + BYTE bySupportNat;//是否支持NAT,0-不支持,1-支持 + BYTE byInputSubSystemNums;//级联输入子系统数量 + BYTE byOutputSubSystemNums;//级联输出子系统数量 + BYTE byCodeSpitterSubSystemNums;//码分子系统数量 + BYTE byAlarmHostSubSystemNums;//报警子系统数量 + BYTE bySupportBigScreenNum;//所支持最多大屏拼接数量 + BYTE byVCASubSystemNums;//智能子系统数量 BYTE byRes1[11]; NET_DVR_SUBSYSTEM_ABILITY struSubSystemAbility[MAX_SUBSYSTEM_NUM]; - BYTE by485Nums;//485ڸ - BYTE by232Nums;//485ڸ - BYTE bySerieStartChan;//ʼͨ + BYTE by485Nums;//485串口个数 + BYTE by232Nums;//485串口个数 + BYTE bySerieStartChan;//起始通道 BYTE byRes2[637]; }NET_DVR_VIDEOPLATFORM_ABILITY, *LPNET_DVR_VIDEOPLATFORM_ABILITY; -//ȡӿ +//获取能力集接口 -//ģʽA +//模式A typedef struct tagNET_DVR_HOLIDATE_MODEA { - BYTE byStartMonth; // ʼ 1ʼ - BYTE byStartDay; // ʼ 1ʼ - BYTE byEndMonth; // - BYTE byEndDay; // - BYTE byRes[4]; // ֽ + BYTE byStartMonth; // 开始月 从1开始 + BYTE byStartDay; // 开始日 从1开始 + BYTE byEndMonth; // 结束月 + BYTE byEndDay; // 结束日 + BYTE byRes[4]; // 保留字节 }NET_DVR_HOLIDATE_MODEA, *LPNET_DVR_HOLIDATE_MODEA; typedef struct tagNET_DVR_HOLIDATE_MODEB { - BYTE byStartMonth; // 1ʼ - BYTE byStartWeekNum; // ڼ 1ʼ - BYTE byStartWeekday; // ڼ - BYTE byEndMonth; // 1ʼ - BYTE byEndWeekNum; // ڼ 1ʼ - BYTE byEndWeekday; // ڼ - BYTE byRes[2]; // ֽ + BYTE byStartMonth; // 从1开始 + BYTE byStartWeekNum; // 第几个星期 从1开始 + BYTE byStartWeekday; // 星期几 + BYTE byEndMonth; // 从1开始 + BYTE byEndWeekNum; // 第几个星期 从1开始 + BYTE byEndWeekday; // 星期几 + BYTE byRes[2]; // 保留字节 }NET_DVR_HOLIDATE_MODEB, *LPNET_DVR_HOLIDATE_MODEB; typedef struct tagNET_DVR_HOLIDATE_MODEC { - WORD wStartYear; // - BYTE byStartMon; // - BYTE byStartDay; // - WORD wEndYear; // - BYTE byEndMon; // - BYTE byEndDay; // + WORD wStartYear; // 年 + BYTE byStartMon; // 月 + BYTE byStartDay; // 日 + WORD wEndYear; // 年 + BYTE byEndMon; // 月 + BYTE byEndDay; // 日 }NET_DVR_HOLIDATE_MODEC, *LPNET_DVR_HOLIDATE_MODEC; typedef union tagNET_DVR_HOLIDATE_UNION { - // С 12ֽ + // 联合体大小 12字节 DWORD dwSize[3]; - NET_DVR_HOLIDATE_MODEA struModeA; // ģʽA - NET_DVR_HOLIDATE_MODEB struModeB; // ģʽB - NET_DVR_HOLIDATE_MODEC struModeC; // ģʽC + NET_DVR_HOLIDATE_MODEA struModeA; // 模式A + NET_DVR_HOLIDATE_MODEB struModeB; // 模式B + NET_DVR_HOLIDATE_MODEC struModeC; // 模式C }NET_DVR_HOLIDATE_UNION, *LPNET_DVR_HOLIDATE_UNION; typedef enum tagHOLI_DATE_MODE @@ -25260,153 +25260,153 @@ typedef enum tagHOLI_DATE_MODE typedef struct tagNET_DVR_HOLIDAY_PARAM { - BYTE byEnable; // Ƿ - BYTE byDateMode; // ģʽ 0-ģʽA 1-ģʽB 2-ģʽC - BYTE byRes1[2]; // ֽ - NET_DVR_HOLIDATE_UNION uHolidate; // - BYTE byName[NAME_LEN]; // - BYTE byRes2[20]; // ֽ + BYTE byEnable; // 是否启用 + BYTE byDateMode; // 日期模式 0-模式A 1-模式B 2-模式C + BYTE byRes1[2]; // 保留字节 + NET_DVR_HOLIDATE_UNION uHolidate; // 假日日期 + BYTE byName[NAME_LEN]; // 假日名称 + BYTE byRes2[20]; // 保留字节 }NET_DVR_HOLIDAY_PARAM, *LPNET_DVR_HOLIDAY_PARAM; #define MAX_HOLIDAY_NUM 32 typedef struct tagNET_DVR_HOLIDAY_PARAM_CFG { - DWORD dwSize; // ṹС - NET_DVR_HOLIDAY_PARAM struHolidayParam[MAX_HOLIDAY_NUM]; // ղ - DWORD byRes[40]; // + DWORD dwSize; // 结构体大小 + NET_DVR_HOLIDAY_PARAM struHolidayParam[MAX_HOLIDAY_NUM]; // 假日参数 + DWORD byRes[40]; // 保留参数 }NET_DVR_HOLIDAY_PARAM_CFG, *LPNET_DVR_HOLIDAY_PARAM_CFG; -// ձʽ +// 假日报警处理方式 typedef struct tagNET_DVR_HOLIDAY_HANDLE { - DWORD dwSize; // ṹС - NET_DVR_SCHEDTIME struAlarmTime[MAX_TIMESEGMENT_V30]; // ʱ - BYTE byRes2[240]; // ֽ + DWORD dwSize; // 结构体大小 + NET_DVR_SCHEDTIME struAlarmTime[MAX_TIMESEGMENT_V30]; // 布防时间段 + BYTE byRes2[240]; // 保留字节 }NET_DVR_HOLIDAY_HANDLE, *LPNET_DVR_HOLIDAY_HANDLE; typedef struct tagNET_DVR_HOLIDAY_HANDLE_COND { - DWORD dwSize; // ṹС - DWORD dwChannel; //ͨ - DWORD dwSMDHandleType; //ܼղ 0-Ƶ쳣⣬1-齹⣬2- - BYTE byRes2[32]; // ֽ + DWORD dwSize; // 结构体大小 + DWORD dwChannel; //通道号 + DWORD dwSMDHandleType; //简易智能假日布防类型 0-音频异常侦测,1-虚焦侦测,2-场景变更侦测 + BYTE byRes2[32]; // 保留字节 }NET_DVR_HOLIDAY_HANDLE_COND, *LPNET_DVR_HOLIDAY_HANDLE_COND; typedef struct tagNET_DVR_HOLIDAY_RECORD { DWORD dwSize; - NET_DVR_RECORDDAY struRecDay; // ¼ - NET_DVR_RECORDSCHED struRecordSched[MAX_TIMESEGMENT_V30]; // ¼ʱ - BYTE byRes[20]; // ֽ + NET_DVR_RECORDDAY struRecDay; // 录像参数 + NET_DVR_RECORDSCHED struRecordSched[MAX_TIMESEGMENT_V30]; // 录像时间段 + BYTE byRes[20]; // 保留字节 }NET_DVR_HOLIDAY_RECORD, *LPNET_DVR_HOLIDAY_RECORD; #define MAX_LINK_V30 128 typedef struct tagNET_DVR_ONE_LINK { - NET_DVR_IPADDR struIP; // ͻIP - LONG lChannel; // ͨ - BYTE byRes[32]; // ֽ + NET_DVR_IPADDR struIP; // 客户端IP + LONG lChannel; // 通道号 + BYTE byRes[32]; // 保留字节 }NET_DVR_ONE_LINK, *LPNET_DVR_ONE_LINK; typedef struct tagNET_DVR_LINK_STATUS { - DWORD dwSize; // ṹС - WORD wLinkNum; // ӵĿ - BYTE byRes1[2]; // ֽ - NET_DVR_ONE_LINK struOneLink[MAX_LINK_V30]; // ӵĿͻϢ - BYTE byRes[32]; // ֽ + DWORD dwSize; // 结构体大小 + WORD wLinkNum; // 连接的数目 + BYTE byRes1[2]; // 保留字节 + NET_DVR_ONE_LINK struOneLink[MAX_LINK_V30]; // 连接的客户端信息 + BYTE byRes[32]; // 保留字节 }NET_DVR_LINK_STATUS, *LPNET_DVR_LINK_STATUS; #define MAX_BOND_NUM 2 typedef struct tagNET_DVR_ONE_BONDING { - BYTE byMode; // ģʽ0 - ݴ 1 - ؾ - BYTE byUseDhcp; // Ƿʹdhcp - BYTE byMasterCard; // ָΪ - BYTE byStatus; // BONDING״̬ 0 - 쳣 1- ֻܻȡ - BYTE byBond[MAX_NETWORK_CARD];// byBond[0]== 1 ʾʹeh0 0ʾʹeh0 - NET_DVR_ETHERNET_V30 struEtherNet; // - NET_DVR_IPADDR struGatewayIpAddr; // صַ - BYTE byEnableDNS; //DNSʹ, 0-رգ1- - BYTE byBondMode; //󶨷ʽ, 0-Ч1-ģʽ2-תģʽ3-XORģʽ4-㲥ģʽ5-802.3adģʽ6-T1bģʽ7-⻯ģʽ + BYTE byMode; // 工作模式0 - 网络容错 1 - 负载均衡 + BYTE byUseDhcp; // 是否使能dhcp + BYTE byMasterCard; // 指定哪张网卡为主网卡 + BYTE byStatus; // BONDING的状态 0 - 异常 1-正常 只能获取不能设置 + BYTE byBond[MAX_NETWORK_CARD];// byBond[0]== 1 表示使用eh0 0表示不使用eh0 + NET_DVR_ETHERNET_V30 struEtherNet; // 网卡参数 + NET_DVR_IPADDR struGatewayIpAddr; // 网关地址 + BYTE byEnableDNS; //DNS使能, 0-关闭,1-打开 + BYTE byBondMode; //绑定方式, 0-无效,1-主备模式,2-轮转模式,3-XOR模式,4-广播模式,5-802.3ad模式,6-T1b模式,7-虚拟化模式 BYTE byRes1[2]; - BYTE byBond2[MAX_NETWORK_CARD_EX/*12*/];// byBond2[0]== 1 ʾʹeh4 0ʾʹeh4byBondչ - BYTE byRes[4];// ֽ + BYTE byBond2[MAX_NETWORK_CARD_EX/*12*/];// byBond2[0]== 1 表示使用eh4 0表示不使用eh4,基于byBond扩展 + BYTE byRes[4];// 保留字节 }NET_DVR_ONE_BONDING, *LPNET_DVR_ONE_BONDING; typedef struct tagNET_DVR_NETWORK_BONDING { - DWORD dwSize; // ṹС - BYTE byEnable; // Ƿbonding - BYTE byNum; // Bondingĸ - BYTE byRes1[2]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 是否启用bonding功能 + BYTE byNum; // Bonding网卡的个数 + BYTE byRes1[2]; // 保留字节 NET_DVR_ONE_BONDING struOneBond[MAX_BOND_NUM]; - BYTE byRes2[40]; // ֽ + BYTE byRes2[40]; // 保留字节 }NET_DVR_NETWORK_BONDING, *LPNET_DVR_NETWORK_BONDING; -// +// 磁盘配额 typedef struct tagNET_DVR_DISK_QUOTA { - BYTE byQuotaType; // ,1 - 2-3-ʱ - BYTE byRes1[5]; // ֽ - WORD wStoragePeriod; //¼洢ڣλ죬ΪʱʱЧ - DWORD dwHCapacity; // Ĵ32λ λMB - DWORD dwLCapacity; // Ĵ32λ λMB - DWORD dwHUsedSpace; // ʹõĴ̴С32λ λMB - DWORD dwLUsedSpace; // ʹõĴ̴С32λ λMB - BYTE byQuotaRatio; // Ĵ̱,λ:% - BYTE byRes2[21]; // ֽ + BYTE byQuotaType; // 磁盘配额类型,1 - 按容量 2-按比例,3-按时间 + BYTE byRes1[5]; // 保留字节 + WORD wStoragePeriod; //录像存储周期,单位天,配额类型为按时间时有效 + DWORD dwHCapacity; // 分配的磁盘容量高32位 单位MB + DWORD dwLCapacity; // 分配的磁盘容量低32位 单位MB + DWORD dwHUsedSpace; // 已使用的磁盘大小高32位 单位MB + DWORD dwLUsedSpace; // 已使用的磁盘大小低32位 单位MB + BYTE byQuotaRatio; // 分配的磁盘比例,单位:% + BYTE byRes2[21]; // 保留字节 }NET_DVR_DISK_QUOTA, *LPNET_DVR_DISK_QUOTA; typedef struct tagNET_DVR_DISK_QUOTA_CFG { - DWORD dwSize; // ṹС - NET_DVR_DISK_QUOTA struPicQuota; // ͼƬ - NET_DVR_DISK_QUOTA struRecordQuota; // ¼ - NET_DVR_DISK_QUOTA struAddInfoQuota; // Ϣ (ƴ洢Ŀǰֵ֧ĸϢУȶͼ) - BYTE byRes[12]; //ֽ + DWORD dwSize; // 结构体大小 + NET_DVR_DISK_QUOTA struPicQuota; // 图片配额 + NET_DVR_DISK_QUOTA struRecordQuota; // 录像配额 + NET_DVR_DISK_QUOTA struAddInfoQuota; // 附加信息配额 (用于云存储服务器,目前支持的附加信息有:热度图、客流量) + BYTE byRes[12]; //保留字节 }NET_DVR_DISK_QUOTA_CFG, *LPNET_DVR_DISK_QUOTA_CFG; typedef struct tagNET_DVR_DISK_QUOTA_V60 { - BYTE byQuotaType; // ,1 - 2-3-ʱ - BYTE byRes1[5]; // ֽ - WORD wStoragePeriod; //¼洢ڣλ죬ΪʱʱЧ - DWORD dwHCapacity; // Ĵ32λ λMB - DWORD dwLCapacity; // Ĵ32λ λMB - DWORD dwHUsedSpace; // ʹõĴ̴С32λ λMB - DWORD dwLUsedSpace; // ʹõĴ̴С32λ λMB - BYTE byQuotaRatio; // Ĵ̱,λ:% - BYTE byRes2[23]; // ֽ + BYTE byQuotaType; // 磁盘配额类型,1 - 按容量 2-按比例,3-按时间 + BYTE byRes1[5]; // 保留字节 + WORD wStoragePeriod; //录像存储周期,单位天,配额类型为按时间时有效 + DWORD dwHCapacity; // 分配的磁盘容量高32位 单位MB + DWORD dwLCapacity; // 分配的磁盘容量低32位 单位MB + DWORD dwHUsedSpace; // 已使用的磁盘大小高32位 单位MB + DWORD dwLUsedSpace; // 已使用的磁盘大小低32位 单位MB + BYTE byQuotaRatio; // 分配的磁盘比例,单位:% + BYTE byRes2[23]; // 保留字节 }NET_DVR_DISK_QUOTA_V60, *LPNET_DVR_DISK_QUOTA_V60; typedef struct tagNET_DVR_DISK_QUOTA_CFG_V60 { - DWORD dwSize; // ṹС - NET_DVR_DISK_QUOTA_V60 struPicQuota; // ͼƬ - NET_DVR_DISK_QUOTA_V60 struRecordQuota; // ¼ - NET_DVR_DISK_QUOTA_V60 struAddInfoQuota; // Ϣ (ƴ洢Ŀǰֵ֧ĸϢУȶͼ) - NET_DVR_DISK_QUOTA_V60 struPubInfoFile; // Ϣļٷֱ - BYTE byRes[256]; //ֽֽ + DWORD dwSize; // 结构体大小 + NET_DVR_DISK_QUOTA_V60 struPicQuota; // 图片配额 + NET_DVR_DISK_QUOTA_V60 struRecordQuota; // 录像配额 + NET_DVR_DISK_QUOTA_V60 struAddInfoQuota; // 附加信息配额 (用于云存储服务器,目前支持的附加信息有:热度图、客流量) + NET_DVR_DISK_QUOTA_V60 struPubInfoFile; // 发布信息文件配额百分比 + BYTE byRes[256]; //保留字节字节 }NET_DVR_DISK_QUOTA_CFG_V60, *LPNET_DVR_DISK_QUOTA_CFG_V60; typedef struct tagNET_DVR_TIMING_CAPTURE { - NET_DVR_JPEGPARA struJpegPara; // ʱץͼͼƬ - DWORD dwPicInterval; // ʱץͼʱ,λs 1-1s 2-2s 3-3s 4-4s 5-5s + NET_DVR_JPEGPARA struJpegPara; // 定时抓图图片质量 + DWORD dwPicInterval; // 定时抓图时间间隔,单位s 1-1s 2-2s 3-3s 4-4s 5-5s // 6-10m 7-30m 8-1h 9-12h 10-24h - BYTE byRes[12]; // ֽ + BYTE byRes[12]; // 保留字节 }NET_DVR_TIMING_CAPTURE, *LPNET_DVR_TIMING_CAPTURE; typedef struct tagNET_DVR_REL_CAPTURE_CHAN { - BYTE byChan[16]; // λʾ - BYTE byRes[20]; // ֽ + BYTE byChan[16]; // 按位表示 + BYTE byRes[20]; // 保留字节 }NET_DVR_REL_CAPTURE_CHAN, *LPNET_DVR_REL_CAPTURE_CHAN; #define MAX_PIC_EVENT_NUM 32 @@ -25414,818 +25414,818 @@ typedef struct tagNET_DVR_REL_CAPTURE_CHAN typedef struct tagNET_DVR_REL_CAPTURE_CHAN_V40 { - DWORD dwMaxRelCaptureChanNum; //ɴĹͨ-ֻ - DWORD dwChanNo[MAX_CHANNUM_V40]; //Ĺץͼͨţֵʾý,0xffffffffʾЧ + DWORD dwMaxRelCaptureChanNum; //最大可触发的关联通道数-只读属性 + DWORD dwChanNo[MAX_CHANNUM_V40]; //触发的关联抓图通道号,按值表示,采用紧凑型排列,0xffffffff表示后续无效 BYTE byRes[32]; }NET_DVR_REL_CAPTURE_CHAN_V40, *LPNET_DVR_REL_CAPTURE_CHAN_V40; typedef struct tagNET_DVR_EVENT_CAPTURE_V40 { - NET_DVR_JPEGPARA struJpegPara; // ¼ץͼͼƬ - DWORD dwPicInterval; // ¼ץͼʱ λΪ - NET_DVR_REL_CAPTURE_CHAN_V40 struRelCaptureChan[MAX_PIC_EVENT_NUM]; // ± 0 ƶⴥץͼ 1 Ƶڵץͼ 2 Ƶʧץͼ,3ʾPIRץͼ4ʾ߱ץͼ5ʾȱץͼ,6ʾץͼ - NET_DVR_REL_CAPTURE_CHAN_V40 struAlarmInCapture[MAX_ALARMIN_CAPTURE]; // 봥ץͼ±0 1 - DWORD dwMaxGroupNum; //豸ֵ֧󱨾ÿ16 - BYTE byCapTimes; //ץͼ + NET_DVR_JPEGPARA struJpegPara; // 事件抓图图片质量 + DWORD dwPicInterval; // 事件抓图时间间隔 单位为秒 + NET_DVR_REL_CAPTURE_CHAN_V40 struRelCaptureChan[MAX_PIC_EVENT_NUM]; // 数组下标 0 移动侦测触发抓图 1 视频遮挡触发抓图 2 视频丢失触发抓图,数组3表示PIR报警抓图,数组4表示无线报警抓图,数组5表示呼救报警抓图,数组6表示智能抓图 + NET_DVR_REL_CAPTURE_CHAN_V40 struAlarmInCapture[MAX_ALARMIN_CAPTURE]; // 报警输入触发抓图,下标0 代表报警输入1 依次类推 + DWORD dwMaxGroupNum; //设备支持的最大报警输入组数,每组16个报警输入 + BYTE byCapTimes; //抓图张数 BYTE byRes[59]; }NET_DVR_EVENT_CAPTURE_V40, *LPNET_DVR_EVENT_CAPTURE_V40; typedef struct tagNET_DVR_EVENT_CAPTURE { - NET_DVR_JPEGPARA struJpegPara; // ¼ץͼͼƬ - DWORD dwPicInterval; // ¼ץͼʱ λΪ 1-1s 2-2s 3-3s 4-4s 5-5s + NET_DVR_JPEGPARA struJpegPara; // 事件抓图图片质量 + DWORD dwPicInterval; // 事件抓图时间间隔 单位为秒 1-1s 2-2s 3-3s 4-4s 5-5s // 6-10m 7-30m 8-1h 9-12h 10-24h /* - ± 0 ƶⴥץͼ 1 Ƶڵץͼ2 Ƶʧץͼ,3ʾPIRץͼ - 4ʾ߱ץͼ5ʾȱץͼ,6ʾץͼ,7 ʾץͼ - 8 ʾ-Խץͼ9 ʾץͼ,10ʾץͼ, - 11-,12-뿪,13-ǻ,14-Աۼ,15-˶, - 16-ͣ,17-Ʒ,18-Ʒȡ⡣ + 数组下标 0 移动侦测触发抓图 1 视频遮挡触发抓图,2 视频丢失触发抓图,数组3表示PIR报警抓图, + 数组4表示无线报警抓图,数组5表示呼救报警抓图,数组6表示智能抓图,数组7 表示人脸侦测抓图, + 数组8 表示-越界侦测侦测抓图,数组9 表示区域入侵侦测抓图,数组10表示场景变更侦测抓图, + 数组11-进入区域侦测,数组12-离开区域侦测,数组13-徘徊侦测,数组14-人员聚集侦测,数组15-快速运动侦测, + 数组16-停车侦测,数组17-物品遗留侦测,数组18-物品拿取侦测。 */ NET_DVR_REL_CAPTURE_CHAN struRelCaptureChan[MAX_PIC_EVENT_NUM]; - NET_DVR_REL_CAPTURE_CHAN struAlarmInCapture[MAX_ALARMIN_CAPTURE]; // 봥ץͼ±0 1 - BYTE byCapTimes; //ץͼ + NET_DVR_REL_CAPTURE_CHAN struAlarmInCapture[MAX_ALARMIN_CAPTURE]; // 报警输入触发抓图,下标0 代表报警输入1 依次类推 + BYTE byCapTimes; //抓图张数 BYTE byRes[59]; }NET_DVR_EVENT_CAPTURE, *LPNET_DVR_EVENT_CAPTURE; typedef struct tagNET_DVR_JPEG_CAPTURE_CFG_V40 { - DWORD dwSize; //ṹ峤 + DWORD dwSize; //结构体长度 NET_DVR_TIMING_CAPTURE struTimingCapture; NET_DVR_EVENT_CAPTURE_V40 struEventCapture; - BYTE byStreamType;//ץͼ 0-1- - BYTE byRes3[19]; // ֽ + BYTE byStreamType;//抓图码流类型 0-主码流,1-子码流 + BYTE byRes3[19]; // 保留字节 }NET_DVR_JPEG_CAPTURE_CFG_V40, *LPNET_DVR_JPEG_CAPTURE_CFG_V40; typedef struct tagNET_DVR_JPEG_CAPTURE_CFG { - DWORD dwSize; // ṹС + DWORD dwSize; // 结构体大小 NET_DVR_TIMING_CAPTURE struTimingCapture; NET_DVR_EVENT_CAPTURE struEventCapture; - BYTE byStreamType;//ץͼ 0-1- - BYTE byRes3[19]; // ֽ + BYTE byStreamType;//抓图码流类型 0-主码流,1-子码流 + BYTE byRes3[19]; // 保留字节 }NET_DVR_JPEG_CAPTURE_CFG, *LPNET_DVR_JPEG_CAPTURE_CFG; typedef struct tagNET_DVR_CAPTURE_DAY { - BYTE byAllDayCapture; // Ƿȫץͼ - BYTE byCaptureType; // ץͼͣ0-ʱץͼ1-ƶץͼ2-ץͼ3-ƶ򱨾ץͼ4-ƶͱץͼ6-ܱץͼ,7-ץͼ8-ȫ¼ ,39-߲ץͼ,40-41-,42ҵѯ 43-ŷʾ 44-Ҷȱ + BYTE byAllDayCapture; // 是否全天抓图 + BYTE byCaptureType; // 抓图类型:0-定时抓图,1-移动侦测抓图,2-报警抓图,3-移动侦测或报警抓图,4-移动侦测和报警抓图,6-智能报警抓图,7-智能侦测抓图,8-全部事件 ,39-离线测温抓图,40-防区报警,41-紧急求助,42业务咨询 43-废气排放显示 44-灰度报警 BYTE byRes[2]; }NET_DVR_CAPTURE_DAY, *LPNET_DVR_CAPTURE_DAY; typedef struct tagNET_DVR_CAPTURE_SCHED { - NET_DVR_SCHEDTIME struCaptureTime; // ץͼʱ - BYTE byCaptureType; // ץͼͣ0-ʱץͼ1-ƶץͼ2-ץͼ3-ƶ򱨾ץͼ4-ƶͱץͼ6-ܱץͼ,7-ץͼ8-ȫ¼ ,39-߲ץͼ ,40-41-,42ҵѯ 43-ŷʾ 44-Ҷȱ - BYTE byRes[3]; // ֽ + NET_DVR_SCHEDTIME struCaptureTime; // 抓图时间段 + BYTE byCaptureType; // 抓图类型:0-定时抓图,1-移动侦测抓图,2-报警抓图,3-移动侦测或报警抓图,4-移动侦测和报警抓图,6-智能报警抓图,7-智能侦测抓图,8-全部事件 ,39-离线测温抓图 ,40-防区报警,41-紧急求助,42业务咨询 43-废气排放显示 44-灰度报警 + BYTE byRes[3]; // 保留字节 }NET_DVR_CAPTURE_SCHED, *LPNET_DVR_CAPTURE_SCHED; -// ͨץͼƻ +// 通道抓图计划 typedef struct tagNET_DVR_SCHED_CAPTURECFG { - DWORD dwSize; // ṹ - BYTE byEnable; // Ƿץͼ - BYTE byRes1[3]; // ֽ - NET_DVR_CAPTURE_DAY struCaptureDay[MAX_DAYS]; // ȫץͼƻ - NET_DVR_CAPTURE_SCHED struCaptureSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; // ʱץͼƻ - NET_DVR_CAPTURE_DAY struCaptureHoliday; // ץͼƻ - NET_DVR_CAPTURE_SCHED struHolidaySched[MAX_TIMESEGMENT_V30]; // ʱμץͼƻ - DWORD dwRecorderDuration; // ץͼʱ 0xffffffffʾֵЧ - DWORD dwDelayTime; /* ץͼʱʱ 0- ʱ 1-3룬 2-4룬 3-5룬 4-10룬 5-30룬 6-60룬 7- 120룬8-300*/ - BYTE byRes[36]; // ֽ + DWORD dwSize; // 结构体 + BYTE byEnable; // 是否抓图 + BYTE byRes1[3]; // 保留字节 + NET_DVR_CAPTURE_DAY struCaptureDay[MAX_DAYS]; // 全天抓图计划 + NET_DVR_CAPTURE_SCHED struCaptureSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; // 时间段抓图布防计划 + NET_DVR_CAPTURE_DAY struCaptureHoliday; // 假日抓图计划 + NET_DVR_CAPTURE_SCHED struHolidaySched[MAX_TIMESEGMENT_V30]; // 时间段假日抓图布防计划 + DWORD dwRecorderDuration; // 抓图保存最长时间 0xffffffff表示该值无效 + DWORD dwDelayTime; /* 抓图延时时间 0- 无延时, 1-3秒, 2-4秒, 3-5秒, 4-10秒, 5-30秒, 6-60秒, 7- 120秒,8-300秒*/ + BYTE byRes[36]; // 保留字节 }NET_DVR_SCHED_CAPTURECFG, *LPNET_DVR_SCHED_CAPTURECFG; typedef struct tagNET_DVR_FLOW_TEST_PARAM { - DWORD dwSize; //ṹС - LONG lCardIndex; // - DWORD dwInterval; //豸ϴʱ, λ:100ms - BYTE byRes[8]; //ֽ + DWORD dwSize; //结构大小 + LONG lCardIndex; //网卡索引 + DWORD dwInterval; //设备上传流量时间间隔, 单位:100ms + BYTE byRes[8]; //保留字节 }NET_DVR_FLOW_TEST_PARAM, *LPNET_DVR_FLOW_TEST_PARAM; typedef struct tagNET_DVR_FLOW_INFO { - DWORD dwSize; //ṹС - DWORD dwSendFlowSize; //С,λkbps - DWORD dwRecvFlowSize; //С,λkbps - BYTE byRes[20]; // + DWORD dwSize; //结构大小 + DWORD dwSendFlowSize; //发送流量大小,单位kbps + DWORD dwRecvFlowSize; //接收流量大小,单位kbps + BYTE byRes[20]; //保留 }NET_DVR_FLOW_INFO, *LPNET_DVR_FLOW_INFO; -// ¼ǩ +// 录像标签 #define LABEL_NAME_LEN 40 typedef struct tagNET_DVR_RECORD_LABEL { - DWORD dwSize; // ṹС - NET_DVR_TIME struTimeLabel; // ǩʱ - BYTE byQuickAdd; // Ƿ ʱǩЧ - BYTE byRes1[3]; // ֽ - BYTE sLabelName[LABEL_NAME_LEN]; // ǩ Ϊ40ֽ - BYTE byRes2[40]; // ֽ + DWORD dwSize; // 结构体大小 + NET_DVR_TIME struTimeLabel; // 标签的时间 + BYTE byQuickAdd; // 是否快速添加 快速添加时标签名称无效 + BYTE byRes1[3]; // 保留字节 + BYTE sLabelName[LABEL_NAME_LEN]; // 标签的名称 长度为40字节 + BYTE byRes2[40]; // 保留字节 }NET_DVR_RECORD_LABEL, *LPNET_DVR_RECORD_LABEL; #define LABEL_IDENTIFY_LEN 64 typedef struct tagNET_DVR_LABEL_IDENTIFY { - BYTE sLabelIdentify[LABEL_IDENTIFY_LEN]; // 64ֽڱʶ - BYTE byRes[8]; // ֽ + BYTE sLabelIdentify[LABEL_IDENTIFY_LEN]; // 64字节标识 + BYTE byRes[8]; // 保留字节 }NET_DVR_LABEL_IDENTIFY, *LPNET_DVR_LABEL_IDENTIFY; -#define MAX_DEL_LABEL_IDENTIFY 20// ɾǩʶ +#define MAX_DEL_LABEL_IDENTIFY 20// 删除的最大标签标识个数 typedef struct tagNET_DVR_DEL_LABEL_PARAM { - DWORD dwSize; // ṹС - BYTE byMode; // λʾ,0x01ʾʶɾ + DWORD dwSize; // 结构体大小 + BYTE byMode; // 按位表示,0x01表示按标识删除 BYTE byRes1; - WORD wLabelNum; // ǩĿ - NET_DVR_LABEL_IDENTIFY struIndentify[MAX_DEL_LABEL_IDENTIFY]; // ǩʶ - BYTE byRes2[160]; //ֽ + WORD wLabelNum; // 标签数目 + NET_DVR_LABEL_IDENTIFY struIndentify[MAX_DEL_LABEL_IDENTIFY]; // 标签标识 + BYTE byRes2[160]; //保留字节 }NET_DVR_DEL_LABEL_PARAM, *LPNET_DVR_DEL_LABEL_PARAM; typedef struct tagNET_DVR_MOD_LABEL_PARAM { - NET_DVR_LABEL_IDENTIFY struIndentify; //Ҫ޸ĵıǩʶ + NET_DVR_LABEL_IDENTIFY struIndentify; //要修改的标签标识 BYTE byRes1[24]; - BYTE sLabelName[LABEL_NAME_LEN]; //޸ĺıǩ + BYTE sLabelName[LABEL_NAME_LEN]; //修改后的标签名称 BYTE byRes2[40]; }NET_DVR_MOD_LABEL_PARAM, *LPNET_DVR_MOD_LABEL_PARAM; -// ǩṹ +// 标签搜索结构体 typedef struct tagNET_DVR_FIND_LABEL { - DWORD dwSize; // ṹС - LONG lChannel; // ҵͨ - NET_DVR_TIME struStartTime; // ʼʱ - NET_DVR_TIME struStopTime; // ʱ - BYTE sLabelName[LABEL_NAME_LEN]; // ¼ǩ ǩΪգֹʱбǩ - BYTE byDrawFrame; //0:֡1֡ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱ - BYTE byRes[34]; // ֽ + DWORD dwSize; // 结构体大小 + LONG lChannel; // 查找的通道 + NET_DVR_TIME struStartTime; // 开始时间 + NET_DVR_TIME struStopTime; // 结束时间 + BYTE sLabelName[LABEL_NAME_LEN]; // 录像标签名称 如果标签名称为空,则搜索起止时间所有标签 + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes[34]; // 保留字节 }NET_DVR_FIND_LABEL, *LPNET_DVR_FIND_LABEL; -// ǩϢṹ +// 标签信息结构体 typedef struct tagNET_DVR_FINDLABEL_DATA { - BYTE sLabelName[LABEL_NAME_LEN]; // ǩ - NET_DVR_TIME struTimeLabel; // ǩʱ - NET_DVR_LABEL_IDENTIFY struLabelIdentify; // ǩʶ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱ - char cTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱ - BYTE byRes[29]; // ֽ + BYTE sLabelName[LABEL_NAME_LEN]; // 标签名称 + NET_DVR_TIME struTimeLabel; // 标签时间 + NET_DVR_LABEL_IDENTIFY struLabelIdentify; // 标签标识 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes[29]; // 保留字节 }NET_DVR_FINDLABEL_DATA, *LPNET_DVR_FINDLABEL_DATA; #define CARDNUM_LEN_V30 40 -//ö +//国家枚举 typedef enum _COUNTRY_INDEX_ { - COUNTRY_NONSUPPORT = 0, //0-㷨ⲻ֧ʶ - /* һ235Һ͵ */ - /*ŷ 48Һ͵ ·˹(Cyprus)ŷ޽*/ - COUNTRY_CZE = 1, //Czech Republic ݿ˹͹ - COUNTRY_FRA = 2, //France - COUNTRY_DEU = 3, //Germany ¹ - COUNTRY_ESP = 4, //Spain - COUNTRY_ITA = 5, //Italy - COUNTRY_NLD = 6, //Netherlands - COUNTRY_POL = 7, //Poland - COUNTRY_SVK = 8, //Slovakia ˹工 - COUNTRY_BLR = 9, //Belarus ׶˹ - COUNTRY_MDA = 10, //Moldova Ħ - COUNTRY_RUS = 11, //Russia ˹ - COUNTRY_UKR = 12, //Ukraine ڿ - COUNTRY_BEL = 13, //Belgium ʱ - COUNTRY_BGR = 14, //Bulgaria - COUNTRY_DNK = 15, //Denmark - COUNTRY_FIN = 16, //Finland - COUNTRY_GBR = 17, //United Kingdom Ӣ - COUNTRY_GRC = 18, //Greece ϣ - COUNTRY_HRV = 19, //Croatia ޵ - COUNTRY_HUN = 20, //Hungary - COUNTRY_ISR = 21, //Israel ɫ() - COUNTRY_LUX = 22, //Luxembourg ¬ɭ - COUNTRY_MKD = 23, //Macedonia ٹ͹ - COUNTRY_NOR = 24, //Norway Ų - COUNTRY_PRT = 25, //Portuga - COUNTRY_ROU = 26, //Romania - COUNTRY_SRB = 27, //Serbia ά - COUNTRY_AZE = 28, //Azerbaijan ͹() - COUNTRY_GEO = 29, //Georgia ³() - COUNTRY_KAZ = 30, //Kazakhstan ˹̹() - COUNTRY_LTU = 31, //Lithuania 𹲺͹ - COUNTRY_TKM = 32, //Turkmenistan ˹̹() - COUNTRY_UZB = 33, //Uzbekistan ȱ˹̹() - COUNTRY_LVA = 34, //Latvia ά - COUNTRY_EST = 35, //Estonia ɳ - COUNTRY_ALB = 36, //Albania - COUNTRY_AUT = 37, //Austria µ - COUNTRY_BIH = 38, //Bosnia and Herzegovina ˹Ǻͺά - COUNTRY_IRL = 39, //Ireland - COUNTRY_ISL = 40, //Iceland - COUNTRY_VAT = 41, //Vatican ٸ - COUNTRY_MLT = 42, //Malta - COUNTRY_SWE = 43, //Sweden - COUNTRY_CHE = 44, //Switzerland ʿ - COUNTRY_CYP = 45, //Cyprus ·˹ - COUNTRY_TUR = 46, //Turkey - COUNTRY_SVN = 47, //Slovenia ˹ - COUNTRY_MTG = 48, //Montenegro ɽ͹ - COUNTRY_KOV = 49, //Kosovo - COUNTRY_ADR = 50, //Andorra - COUNTRY_ARM = 51, //Armenia () - COUNTRY_MON = 52, //Monaco Ħɸ - COUNTRY_LIE = 53, //Liechtenstein ֧ʿ - COUNTRY_SMO = 54, //San Marino ʥŵ - COUNTRY_ORN = 55, //Aland () - COUNTRY_RES2 = 56, //ֶ - COUNTRY_RES3 = 57, //ֶ - COUNTRY_RES4 = 58, //ֶ - /* 48 ·˹(Cyprus)ŷ޽*/ - COUNTRY_CHI = 59, //China й - COUNTRY_IBN = 60, //In bahrain - COUNTRY_SKR = 61, //South Korea - COUNTRY_LEB = 62, //Lebanon - COUNTRY_NEP = 63, //Nepal Ჴ - COUNTRY_THA = 64, //Thailand ̩ - COUNTRY_PAK = 65, //Pakistan ͻ˹̹ - COUNTRY_EMI = 66, //The united Arab emirates - COUNTRY_BHU = 67, //Bhutan - COUNTRY_OMA = 68, //Oman - COUNTRY_KOR = 69, //North Korea - COUNTRY_PHI = 70, //The Philippines ɱ - COUNTRY_CAM = 71, //Cambodia կ - COUNTRY_QAT = 72, //Qatar - COUNTRY_KYR = 73, //Kyrgyzstan ˹˹̹ - COUNTRY_MAL = 74, //The maldives - COUNTRY_MLY = 75, //Malaysia - COUNTRY_MOG = 76, //Mongolia ɹ - COUNTRY_ARA = 77, //Saudi Arabia ɳذ - COUNTRY_BRU = 78, //brunei - COUNTRY_LAO = 79, //Laos - COUNTRY_JAP = 80, //Japan ձ - COUNTRY_RES19 = 81, //ֶ - COUNTRY_PAS = 82, //Palestinian state ˹̹ - COUNTRY_TAJ = 83, //Tajikistan ˹̹ - COUNTRY_KUW = 84, //Kuwait - COUNTRY_SYR = 85, //Syria - COUNTRY_IND = 86, //India ӡ - COUNTRY_ISA = 87, //Indonesia ӡ - COUNTRY_AFG = 88, //Afghanistan - COUNTRY_LAN = 89, //Sri Lanka ˹ - COUNTRY_IRQ = 90, //Iraq - COUNTRY_VIE = 91, //Vietnam Խ - COUNTRY_IRA = 92, //Iran - COUNTRY_YEM = 93, //yemen Ҳ - COUNTRY_JOR = 94, //Jordan Լ - COUNTRY_BUR = 95, //Burma - COUNTRY_SIK = 96, //Sikkim - COUNTRY_BAN = 97, //Bangladesh ϼ - COUNTRY_SGA = 98, //Singapore ¼ - COUNTRY_EAT = 99, //East timor 루Ҳϣ - COUNTRY_RES5 = 100, //ֶ - COUNTRY_RES6 = 101, //ֶ - COUNTRY_RES7 = 102, //ֶ - COUNTRY_RES8 = 103, //ֶ - /* 60Һ͵*/ - COUNTRY_EGT = 104, //Egypt - COUNTRY_LIY = 105, //Libya - COUNTRY_SUA = 106, //Sudan յ - COUNTRY_TUN = 107, //Tunisia ͻ˹ - COUNTRY_ALG = 108, //Algeria - COUNTRY_MCC = 109, //Morocco Ħ - COUNTRY_ETH = 110, //Ethiopia - COUNTRY_ERI = 111, //Eritrea - COUNTRY_SDE = 112, //Somalia Democratic - COUNTRY_DJI = 113, //Djibouti - COUNTRY_KEN = 114, //Kenya - COUNTRY_TAI = 115, //Tanzania ̹ɣ - COUNTRY_UGA = 116, //Uganda ڸɴ - COUNTRY_RWA = 117, //Rwanda ¬ - COUNTRY_BUD = 118, //Burundi ¡ - COUNTRY_SEY = 119, //Seychelles - COUNTRY_CHA = 120, //Chad է - COUNTRY_CEA = 121, //Central African з - COUNTRY_CON = 122, //Cameroon ¡ - COUNTRY_EQG = 123, //Equatorial Guinea - COUNTRY_GAB = 124, //Gabon - COUNTRY_TCO = 125, //the Congo չ͹չ - COUNTRY_DRC = 126, //Democratic Republic of the Congo չ͹չ𣩣 - COUNTRY_STP = 127, //Sao Tome and Principe ʥ - COUNTRY_MAN = 128, //Mauritania ë - COUNTRY_WSA = 129, //Western Sahara - COUNTRY_SEL = 130, //Senegal ڼӶ - COUNTRY_TGA = 131, //the Gambia Ա - COUNTRY_MAI = 132, //Mali - COUNTRY_BUF = 133, //Burkina Faso ɷ - COUNTRY_GUI = 134, //Guinea - COUNTRY_GUB = 135, //Guinea-Bissau DZ - COUNTRY_CAV = 136, //Cape Verde ý - COUNTRY_SLE = 137, //Sierra Leone - COUNTRY_LIR = 138, //Liberia - COUNTRY_IVC = 139, //Ivory Coast ص - COUNTRY_GHA = 140, //Ghana - COUNTRY_TGO = 141, //Togo - COUNTRY_BEN = 142, //Benin - COUNTRY_NIG = 143, //Niger ն - COUNTRY_ZAB = 144, //Zambia ޱ - COUNTRY_ANG = 145, //Angola - COUNTRY_ZBE = 146, //Zimbabwe ͲΤ - COUNTRY_MAW = 147, //Malawi ά - COUNTRY_MOQ = 148, //Mozambique Īɣȿ - COUNTRY_BOT = 149, //Botswana - COUNTRY_NAM = 150, //Namibia ױ - COUNTRY_SAF = 151, //South Africa Ϸ - COUNTRY_SWD = 152, //Swaziland ˹ʿ - COUNTRY_LES = 153, //Lesotho - COUNTRY_MAG = 154, //Madagasca ˹ - COUNTRY_UOC = 155, //Union of Comoros Ħ - COUNTRY_MAT = 156, //Mauritius ë˹ - COUNTRY_NGE = 157, //Nigeria - COUNTRY_SSD = 158, //South Sudan յ - COUNTRY_SAH = 159, //Saint Helena ʥãӢʡ - COUNTRY_MYT = 160, //Mayotte Լأʡ - COUNTRY_REN = 161, //Reunion ʡ - COUNTRY_CAI = 162, //Canary Islands Ⱥ - COUNTRY_AZO = 163, //AZORES ٶȺ - COUNTRY_MAD = 164, //Madeira Ⱥ - COUNTRY_RES9 = 165, //ֶ - COUNTRY_RES10 = 166, //ֶ - COUNTRY_RES11 = 167, //ֶ - COUNTRY_RES12 = 168, //ֶ - /* 55Һ͵*/ - COUNTRY_CAD = 169, //Canada ô - COUNTRY_GRE = 170, //Greenland Nuuk ĺ - COUNTRY_PIE = 171, //Pierre and Miquelon ʥƤܿ¡ - COUNTRY_USA = 172, //United States - COUNTRY_BER = 173, //Bermuda ĽӢ - COUNTRY_MEX = 174, //Mexico ī - COUNTRY_GUA = 175, //Guatemala Σ - COUNTRY_BLI = 176, //Belize - COUNTRY_SAR = 177, //El Salvador ߶ - COUNTRY_HOR = 178, //Honduras 鶼˹ - COUNTRY_NIC = 179, //Nicaragua - COUNTRY_COR = 180, //Costa Rica ˹ - COUNTRY_PAN = 181, //Panama - COUNTRY_TBM = 182, //The Bahamas ͹ - COUNTRY_TCI = 183, //The Turks and Caicos Islands ؿ˹ȺͿ˹ȺӢ - COUNTRY_CUB = 184, //Cuba Ű - COUNTRY_JAM = 185, //Jamaica - COUNTRY_CAY = 186, //Cayman Islands ȺӢ - COUNTRY_HAT = 187, //Haiti - COUNTRY_TDO = 188, //The Dominican - COUNTRY_PUR = 189, //Puerto Rico - COUNTRY_VIL = 190, //The United States Virgin IslandsάȺ - COUNTRY_BVI = 191, //The British Virgin Islands ӢάȺ - COUNTRY_ATV = 192, //Anguilla The Valley Ӣ - COUNTRY_ANB = 193, //Antigua and Barbuda ϺͰͲ - COUNTRY_CSM = 194, //Collectivit de Saint-Martin ʥ - COUNTRY_ACY = 195, //Autonomous country ʥι - COUNTRY_SBY = 196, //Saint-Barthlemy ʥ̩׵ - COUNTRY_SKN = 197, //Saint Kitts and Nevis ʥĺά˹ - COUNTRY_MOT = 198, //Montserrat أӢ - COUNTRY_GLP = 199, //Guadeloupe ϵգ - COUNTRY_DOM = 200, //Dominica - COUNTRY_MTE = 201, //Martinique ˣ - COUNTRY_LUC = 202, //St. Lucia ʥ¬ - COUNTRY_SVG = 203, //Saint Vincent and the Grenadines ʥɭغ͸ɶ˹ - COUNTRY_GRD = 204, //Grenada ɴ - COUNTRY_BAR = 205, //Barbados ͰͶ˹ - COUNTRY_TRT = 206, //Trinidad and Tobago Ͷ͸ - COUNTRY_CUR = 207, //Cura?ao һι - COUNTRY_ARB = 208, //Aruba ³ͣһι - COUNTRY_NEA = 209, //Netherlands Antilles ˹ - COUNTRY_COL = 210, //Colombia ױ - COUNTRY_VEN = 211, //Venezuela ί - COUNTRY_GUY = 212, //Guyana - COUNTRY_SUR = 213, //Suriname - COUNTRY_FRN = 214, //Guyane Francaise - COUNTRY_ECU = 215, //Ecuador ϶ - COUNTRY_PER = 216, //Peru ³ - COUNTRY_BOL = 217, //Bolivia ά - COUNTRY_PAR = 218, //Paraguay - COUNTRY_CLE = 219, //Chile - COUNTRY_BRA = 220, //Brazil - COUNTRY_UGY = 221, //Uruguay - COUNTRY_ARG = 222, //Argentina ͢ - COUNTRY_RES13 = 223, //ֶ - COUNTRY_RES14 = 224, //ֶ - COUNTRY_RES15 = 225, //ֶ - COUNTRY_RES16 = 226, //ֶ - /* 25Һ͵ */ - COUNTRY_ATN = 227, //Australien Ĵ - COUNTRY_NED = 228, //Neuseeland - COUNTRY_PNG = 229, //Papua New Guinea Ͳ¼ - COUNTRY_SAN = 230, //Salomonen Ⱥ - COUNTRY_VAU = 231, //Vanuatu Ŭͼ - COUNTRY_NCN = 232, //New Caledonia ¿ǣĺأ - COUNTRY_PAU = 233, //Palau - COUNTRY_FSM = 234, //Federated States of Micronesia ܿ - COUNTRY_MRI = 235, //Marshall Island ܶȺ - COUNTRY_CNM = 236, //Commonwealth of the Northern Mariana Islands Ⱥĺأ - COUNTRY_TEG = 237, //The Territory of Guahan صĺأ - COUNTRY_NUR = 238, //Nauru ³ - COUNTRY_KIB = 239, //Kiribati ˹ - COUNTRY_FID = 240, //Fidschi 쳼Ⱥ - COUNTRY_TNG = 241, //Tonga - COUNTRY_TUV = 242, //Tuvalu ͼ¬ - COUNTRY_WEF = 243, //Wallis et Futuna ˹͸ͼɣĺأ - COUNTRY_TIS = 244, //The Independent State of Samoa Ħ - COUNTRY_EAS = 245, //Eastern Samoa Ħ - COUNTRY_TOE = 246, //Tokelau пͣ - COUNTRY_NUE = 247, //Niue Ŧ - COUNTRY_TCD = 248, //The Cook Islands Ⱥ - COUNTRY_PFP = 249, //Polynsie fran?aiseFrench Polynesia - COUNTRY_PID = 250, //Pitcairn Islands ƤؿȺӢĺأ - COUNTRY_HAW = 251, //Hawaii State ģĺأ - COUNTRY_RES17 = 252, //ֶ - COUNTRY_INVALID = 0xfd, //ֶЧҪʹչֶCRIndex(_CR_INDEX_) - COUNTRY_UNRECOGNIZED = 0xfe, //Unrecognized ޷ʶ - COUNTRY_ALL = 0xff, //ALL ȫ + COUNTRY_NONSUPPORT = 0, //0-算法库不支持牌识国家 + /*五大洲 一共有235国家和地区 */ + /*欧洲 48个国家和地区 其中 塞浦路斯(Cyprus)属于亚欧两洲交界国家*/ + COUNTRY_CZE = 1, //Czech Republic 捷克共和国 + COUNTRY_FRA = 2, //France 法国 + COUNTRY_DEU = 3, //Germany 德国 + COUNTRY_ESP = 4, //Spain 西班牙 + COUNTRY_ITA = 5, //Italy 意大利 + COUNTRY_NLD = 6, //Netherlands 荷兰 + COUNTRY_POL = 7, //Poland 波兰 + COUNTRY_SVK = 8, //Slovakia 斯洛伐克 + COUNTRY_BLR = 9, //Belarus 白俄罗斯 + COUNTRY_MDA = 10, //Moldova 摩尔多瓦 + COUNTRY_RUS = 11, //Russia 俄罗斯 + COUNTRY_UKR = 12, //Ukraine 乌克兰 + COUNTRY_BEL = 13, //Belgium 比利时 + COUNTRY_BGR = 14, //Bulgaria 保加利亚 + COUNTRY_DNK = 15, //Denmark 丹麦 + COUNTRY_FIN = 16, //Finland 芬兰 + COUNTRY_GBR = 17, //United Kingdom 英国 + COUNTRY_GRC = 18, //Greece 希腊 + COUNTRY_HRV = 19, //Croatia 克罗地亚 + COUNTRY_HUN = 20, //Hungary 匈牙利 + COUNTRY_ISR = 21, //Israel 以色列(亚洲) + COUNTRY_LUX = 22, //Luxembourg 卢森堡 + COUNTRY_MKD = 23, //Macedonia 马其顿共和国 + COUNTRY_NOR = 24, //Norway 挪威 + COUNTRY_PRT = 25, //Portuga 葡萄牙 + COUNTRY_ROU = 26, //Romania 罗马尼亚 + COUNTRY_SRB = 27, //Serbia 塞尔维亚 + COUNTRY_AZE = 28, //Azerbaijan 阿塞邦疆共和国(亚洲) + COUNTRY_GEO = 29, //Georgia 格鲁吉亚(亚洲) + COUNTRY_KAZ = 30, //Kazakhstan 哈萨克斯坦(亚洲) + COUNTRY_LTU = 31, //Lithuania 立陶宛共和国 + COUNTRY_TKM = 32, //Turkmenistan 土库曼斯坦(亚洲) + COUNTRY_UZB = 33, //Uzbekistan 乌兹别克斯坦(亚洲) + COUNTRY_LVA = 34, //Latvia 拉脱维亚 + COUNTRY_EST = 35, //Estonia 爱沙尼亚 + COUNTRY_ALB = 36, //Albania 阿尔巴尼亚 + COUNTRY_AUT = 37, //Austria 奥地利 + COUNTRY_BIH = 38, //Bosnia and Herzegovina 波斯尼亚和黑塞哥维那 + COUNTRY_IRL = 39, //Ireland 爱尔兰 + COUNTRY_ISL = 40, //Iceland 冰岛 + COUNTRY_VAT = 41, //Vatican 梵蒂冈 + COUNTRY_MLT = 42, //Malta 马耳他 + COUNTRY_SWE = 43, //Sweden 瑞典 + COUNTRY_CHE = 44, //Switzerland 瑞士 + COUNTRY_CYP = 45, //Cyprus 塞浦路斯 + COUNTRY_TUR = 46, //Turkey 土耳其 + COUNTRY_SVN = 47, //Slovenia 斯洛文尼亚 + COUNTRY_MTG = 48, //Montenegro 黑山共和国 + COUNTRY_KOV = 49, //Kosovo 科索沃 + COUNTRY_ADR = 50, //Andorra 安道尔 + COUNTRY_ARM = 51, //Armenia 亚美尼亚(亚洲) + COUNTRY_MON = 52, //Monaco 摩纳哥 + COUNTRY_LIE = 53, //Liechtenstein 列支敦士登 + COUNTRY_SMO = 54, //San Marino 圣马力诺 + COUNTRY_ORN = 55, //Aland 奥兰(芬兰自治区) + COUNTRY_RES2 = 56, //保留字段 + COUNTRY_RES3 = 57, //保留字段 + COUNTRY_RES4 = 58, //保留字段 + /*亚洲 48个国家 其中 塞浦路斯(Cyprus)属于亚欧两洲交界国家*/ + COUNTRY_CHI = 59, //China 中国 + COUNTRY_IBN = 60, //In bahrain 巴林 + COUNTRY_SKR = 61, //South Korea 韩国 + COUNTRY_LEB = 62, //Lebanon 黎巴嫩 + COUNTRY_NEP = 63, //Nepal 尼泊尔 + COUNTRY_THA = 64, //Thailand 泰国 + COUNTRY_PAK = 65, //Pakistan 巴基斯坦 + COUNTRY_EMI = 66, //The united Arab emirates 阿拉伯联合酋长国 + COUNTRY_BHU = 67, //Bhutan 不丹 + COUNTRY_OMA = 68, //Oman 阿曼 + COUNTRY_KOR = 69, //North Korea 朝鲜 + COUNTRY_PHI = 70, //The Philippines 菲律宾 + COUNTRY_CAM = 71, //Cambodia 柬埔寨 + COUNTRY_QAT = 72, //Qatar 卡塔尔 + COUNTRY_KYR = 73, //Kyrgyzstan 吉尔吉斯斯坦 + COUNTRY_MAL = 74, //The maldives 马尔代夫 + COUNTRY_MLY = 75, //Malaysia 马来西亚 + COUNTRY_MOG = 76, //Mongolia 蒙古 + COUNTRY_ARA = 77, //Saudi Arabia 沙特阿拉伯 + COUNTRY_BRU = 78, //brunei 文莱 + COUNTRY_LAO = 79, //Laos 老挝 + COUNTRY_JAP = 80, //Japan 日本 + COUNTRY_RES19 = 81, //保留字段 + COUNTRY_PAS = 82, //Palestinian state 巴勒斯坦国 + COUNTRY_TAJ = 83, //Tajikistan 塔吉克斯坦 + COUNTRY_KUW = 84, //Kuwait 科威特 + COUNTRY_SYR = 85, //Syria 叙利亚 + COUNTRY_IND = 86, //India 印度 + COUNTRY_ISA = 87, //Indonesia 印度尼西亚 + COUNTRY_AFG = 88, //Afghanistan 阿富汗 + COUNTRY_LAN = 89, //Sri Lanka 斯里兰卡 + COUNTRY_IRQ = 90, //Iraq 伊拉克 + COUNTRY_VIE = 91, //Vietnam 越南 + COUNTRY_IRA = 92, //Iran 伊朗 + COUNTRY_YEM = 93, //yemen 也门 + COUNTRY_JOR = 94, //Jordan 约旦 + COUNTRY_BUR = 95, //Burma 缅甸 + COUNTRY_SIK = 96, //Sikkim 锡金 + COUNTRY_BAN = 97, //Bangladesh 孟加拉国 + COUNTRY_SGA = 98, //Singapore 新加坡 + COUNTRY_EAT = 99, //East timor 东帝汶(已宣布独立,但世界上许多国家不承认) + COUNTRY_RES5 = 100, //保留字段 + COUNTRY_RES6 = 101, //保留字段 + COUNTRY_RES7 = 102, //保留字段 + COUNTRY_RES8 = 103, //保留字段 + /*非洲 60个国家和地区*/ + COUNTRY_EGT = 104, //Egypt 埃及 + COUNTRY_LIY = 105, //Libya 利比亚 + COUNTRY_SUA = 106, //Sudan 苏丹 + COUNTRY_TUN = 107, //Tunisia 突尼斯 + COUNTRY_ALG = 108, //Algeria 阿尔及利亚 + COUNTRY_MCC = 109, //Morocco 摩洛哥 + COUNTRY_ETH = 110, //Ethiopia 埃塞俄比亚 + COUNTRY_ERI = 111, //Eritrea 厄立特里亚 + COUNTRY_SDE = 112, //Somalia Democratic 索马里 + COUNTRY_DJI = 113, //Djibouti 吉布提 + COUNTRY_KEN = 114, //Kenya 肯尼亚 + COUNTRY_TAI = 115, //Tanzania 坦桑尼亚 + COUNTRY_UGA = 116, //Uganda 乌干达 + COUNTRY_RWA = 117, //Rwanda 卢旺达 + COUNTRY_BUD = 118, //Burundi 布隆迪 + COUNTRY_SEY = 119, //Seychelles 塞舌尔 + COUNTRY_CHA = 120, //Chad 乍得 + COUNTRY_CEA = 121, //Central African 中非 + COUNTRY_CON = 122, //Cameroon 喀麦隆 + COUNTRY_EQG = 123, //Equatorial Guinea赤道几内亚 + COUNTRY_GAB = 124, //Gabon 加蓬 + COUNTRY_TCO = 125, //the Congo 刚果共和国(即:刚果(布)) + COUNTRY_DRC = 126, //Democratic Republic of the Congo 刚果民主共和国(即:刚果(金)) + COUNTRY_STP = 127, //Sao Tome and Principe 圣多美和普林西比 + COUNTRY_MAN = 128, //Mauritania 毛里塔尼亚 + COUNTRY_WSA = 129, //Western Sahara 西撒哈拉(撒拉威) + COUNTRY_SEL = 130, //Senegal 塞内加尔 + COUNTRY_TGA = 131, //the Gambia 冈比亚 + COUNTRY_MAI = 132, //Mali 马里 + COUNTRY_BUF = 133, //Burkina Faso 布基纳法索 + COUNTRY_GUI = 134, //Guinea 几内亚 + COUNTRY_GUB = 135, //Guinea-Bissau 几内亚比绍 + COUNTRY_CAV = 136, //Cape Verde 佛得角 + COUNTRY_SLE = 137, //Sierra Leone 塞拉利昂 + COUNTRY_LIR = 138, //Liberia 利比里亚 + COUNTRY_IVC = 139, //Ivory Coast 科特迪瓦 + COUNTRY_GHA = 140, //Ghana 加纳 + COUNTRY_TGO = 141, //Togo 多哥 + COUNTRY_BEN = 142, //Benin 贝宁 + COUNTRY_NIG = 143, //Niger 尼日尔 + COUNTRY_ZAB = 144, //Zambia 赞比亚 + COUNTRY_ANG = 145, //Angola 安哥拉 + COUNTRY_ZBE = 146, //Zimbabwe 津巴布韦 + COUNTRY_MAW = 147, //Malawi 马拉维 + COUNTRY_MOQ = 148, //Mozambique 莫桑比克 + COUNTRY_BOT = 149, //Botswana 博茨瓦纳 + COUNTRY_NAM = 150, //Namibia 纳米比亚 + COUNTRY_SAF = 151, //South Africa 南非 + COUNTRY_SWD = 152, //Swaziland 斯威士兰 + COUNTRY_LES = 153, //Lesotho 莱索托 + COUNTRY_MAG = 154, //Madagasca 马达加斯加 + COUNTRY_UOC = 155, //Union of Comoros 科摩罗 + COUNTRY_MAT = 156, //Mauritius 毛里求斯 + COUNTRY_NGE = 157, //Nigeria 尼日利亚 + COUNTRY_SSD = 158, //South Sudan 南苏丹 + COUNTRY_SAH = 159, //Saint Helena 圣赫勒拿(英国海外省) + COUNTRY_MYT = 160, //Mayotte 马约特(法国海外省) + COUNTRY_REN = 161, //Reunion 留尼旺(法国海外省) + COUNTRY_CAI = 162, //Canary Islands 加那利群岛(西班牙海外领土) + COUNTRY_AZO = 163, //AZORES 亚速尔群岛(北大西洋非洲西海岸(葡萄牙)) + COUNTRY_MAD = 164, //Madeira 马德拉群岛(北大西洋非洲西海岸(葡萄牙)) + COUNTRY_RES9 = 165, //保留字段 + COUNTRY_RES10 = 166, //保留字段 + COUNTRY_RES11 = 167, //保留字段 + COUNTRY_RES12 = 168, //保留字段 + /*美洲 55个国家和地区*/ + COUNTRY_CAD = 169, //Canada 加拿大 + COUNTRY_GRE = 170, //Greenland Nuuk 格陵兰(丹麦王国的海外自治领土) + COUNTRY_PIE = 171, //Pierre and Miquelon 圣皮埃尔和密克隆(法国海外领土) + COUNTRY_USA = 172, //United States 美国 + COUNTRY_BER = 173, //Bermuda 百慕大(英国海外领土) + COUNTRY_MEX = 174, //Mexico 墨西哥 + COUNTRY_GUA = 175, //Guatemala 危地马拉 + COUNTRY_BLI = 176, //Belize 伯利兹 + COUNTRY_SAR = 177, //El Salvador 萨尔瓦多 + COUNTRY_HOR = 178, //Honduras 洪都拉斯 + COUNTRY_NIC = 179, //Nicaragua 尼加拉瓜 + COUNTRY_COR = 180, //Costa Rica 哥斯达黎加 + COUNTRY_PAN = 181, //Panama 巴拿马 + COUNTRY_TBM = 182, //The Bahamas 巴哈马 + COUNTRY_TCI = 183, //The Turks and Caicos Islands 特克斯群岛和凯科斯群岛(英国海外领土) + COUNTRY_CUB = 184, //Cuba 古巴 + COUNTRY_JAM = 185, //Jamaica 牙买加 + COUNTRY_CAY = 186, //Cayman Islands 开曼群岛(英国海外领土) + COUNTRY_HAT = 187, //Haiti 海地 + COUNTRY_TDO = 188, //The Dominican 多米尼加 + COUNTRY_PUR = 189, //Puerto Rico 波多黎各(美国海外领土) + COUNTRY_VIL = 190, //The United States Virgin Islands美属维尔京群岛 + COUNTRY_BVI = 191, //The British Virgin Islands 英属维尔京群岛 + COUNTRY_ATV = 192, //Anguilla The Valley 安圭拉(英国海外领土) + COUNTRY_ANB = 193, //Antigua and Barbuda 安提瓜和巴布达 + COUNTRY_CSM = 194, //Collectivité de Saint-Martin 法属圣马丁(法国海外领土) + COUNTRY_ACY = 195, //Autonomous country 荷属圣马丁(荷兰王国的自治国 ) + COUNTRY_SBY = 196, //Saint-Barthélemy 圣巴泰勒米岛(法国海外领土) + COUNTRY_SKN = 197, //Saint Kitts and Nevis 圣基茨和尼维斯 + COUNTRY_MOT = 198, //Montserrat 蒙特塞拉特(英国海外领土) + COUNTRY_GLP = 199, //Guadeloupe 瓜德罗普(法国海外领土) + COUNTRY_DOM = 200, //Dominica 多米尼克 + COUNTRY_MTE = 201, //Martinique 马提尼克(法国海外领土) + COUNTRY_LUC = 202, //St. Lucia 圣卢西亚 + COUNTRY_SVG = 203, //Saint Vincent and the Grenadines 圣文森特和格林纳丁斯 + COUNTRY_GRD = 204, //Grenada 格林纳达 + COUNTRY_BAR = 205, //Barbados 巴巴多斯 + COUNTRY_TRT = 206, //Trinidad and Tobago 特立尼达和多巴哥 + COUNTRY_CUR = 207, //Cura?ao 库拉索(荷兰王国的一个自治国) + COUNTRY_ARB = 208, //Aruba 阿鲁巴(荷兰王国的一个自治国) + COUNTRY_NEA = 209, //Netherlands Antilles 荷属安的列斯 + COUNTRY_COL = 210, //Colombia 哥伦比亚 + COUNTRY_VEN = 211, //Venezuela 委内瑞拉 + COUNTRY_GUY = 212, //Guyana 圭亚那 + COUNTRY_SUR = 213, //Suriname 苏里南 + COUNTRY_FRN = 214, //Guyane Francaise 法属圭亚那 + COUNTRY_ECU = 215, //Ecuador 厄瓜多尔 + COUNTRY_PER = 216, //Peru 秘鲁 + COUNTRY_BOL = 217, //Bolivia 玻利维亚 + COUNTRY_PAR = 218, //Paraguay 巴拉圭 + COUNTRY_CLE = 219, //Chile 智利 + COUNTRY_BRA = 220, //Brazil 巴西 + COUNTRY_UGY = 221, //Uruguay 乌拉圭 + COUNTRY_ARG = 222, //Argentina 阿根廷 + COUNTRY_RES13 = 223, //保留字段 + COUNTRY_RES14 = 224, //保留字段 + COUNTRY_RES15 = 225, //保留字段 + COUNTRY_RES16 = 226, //保留字段 + /*大洋洲 25个国家和地区 */ + COUNTRY_ATN = 227, //Australien 澳大利亚 + COUNTRY_NED = 228, //Neuseeland 新西兰 + COUNTRY_PNG = 229, //Papua New Guinea 巴布亚新几内亚 + COUNTRY_SAN = 230, //Salomonen 所罗门群岛 + COUNTRY_VAU = 231, //Vanuatu 瓦努阿图 + COUNTRY_NCN = 232, //New Caledonia 新喀里多尼亚(法国的海外属地) + COUNTRY_PAU = 233, //Palau 帕劳 + COUNTRY_FSM = 234, //Federated States of Micronesia 密克罗尼西亚联邦 + COUNTRY_MRI = 235, //Marshall Island 马绍尔群岛 + COUNTRY_CNM = 236, //Commonwealth of the Northern Mariana Islands 北马里亚纳群岛(美国的海外属地) + COUNTRY_TEG = 237, //The Territory of Guahan 关岛(美国的海外属地) + COUNTRY_NUR = 238, //Nauru 瑙鲁 + COUNTRY_KIB = 239, //Kiribati 基里巴斯 + COUNTRY_FID = 240, //Fidschi 斐济群岛 + COUNTRY_TNG = 241, //Tonga 汤加 + COUNTRY_TUV = 242, //Tuvalu 图瓦卢 + COUNTRY_WEF = 243, //Wallis et Futuna 瓦利斯和富图纳(法国的海外属地) + COUNTRY_TIS = 244, //The Independent State of Samoa 萨摩亚 + COUNTRY_EAS = 245, //Eastern Samoa 美属萨摩亚 + COUNTRY_TOE = 246, //Tokelau 托克劳(新西兰) + COUNTRY_NUE = 247, //Niue 纽埃(新西兰) + COUNTRY_TCD = 248, //The Cook Islands 库克群岛(新西兰) + COUNTRY_PFP = 249, //Polynésie fran?aiseFrench Polynesia 法属波利尼西亚 + COUNTRY_PID = 250, //Pitcairn Islands 皮特凯恩群岛(英国的海外属地) + COUNTRY_HAW = 251, //Hawaii State 夏威夷(美国的海外属地) + COUNTRY_RES17 = 252, //保留字段 + COUNTRY_INVALID = 0xfd, //字段无效,需要使用扩展字段CRIndex(_CR_INDEX_) + COUNTRY_UNRECOGNIZED = 0xfe, //Unrecognized 无法识别 + COUNTRY_ALL = 0xff, //ALL 全部 }COUNTRY_INDEX; -// / ö +// 国家 / 区域枚举 typedef enum _CR_INDEX_ { - CR_NONSUPPORT = 0, //0-㷨ⲻ֧ʶ - /* һ235Һ͵ */ - /*ŷ 48Һ͵ ·˹(Cyprus)ŷ޽*/ - CR_CZE = 1, //Czech Republic ݿ˹͹ - CR_FRA = 2, //France - CR_DEU = 3, //Germany ¹ - CR_ESP = 4, //Spain - CR_ITA = 5, //Italy - CR_NLD = 6, //Netherlands - CR_POL = 7, //Poland - CR_SVK = 8, //Slovakia ˹工 - CR_BLR = 9, //Belarus ׶˹ - CR_MDA = 10, //Moldova Ħ - CR_RUS = 11, //Russia ˹ - CR_UKR = 12, //Ukraine ڿ - CR_BEL = 13, //Belgium ʱ - CR_BGR = 14, //Bulgaria - CR_DNK = 15, //Denmark - CR_FIN = 16, //Finland - CR_GBR = 17, //United Kingdom Ӣ - CR_GRC = 18, //Greece ϣ - CR_HRV = 19, //Croatia ޵ - CR_HUN = 20, //Hungary - CR_ISR = 21, //Israel ɫ() - CR_LUX = 22, //Luxembourg ¬ɭ - CR_MKD = 23, //Macedonia ٹ͹ - CR_NOR = 24, //Norway Ų - CR_PRT = 25, //Portuga - CR_ROU = 26, //Romania - CR_SRB = 27, //Serbia ά - CR_AZE = 28, //Azerbaijan ͹() - CR_GEO = 29, //Georgia ³() - CR_KAZ = 30, //Kazakhstan ˹̹() - CR_LTU = 31, //Lithuania 𹲺͹ - CR_TKM = 32, //Turkmenistan ˹̹() - CR_UZB = 33, //Uzbekistan ȱ˹̹() - CR_LVA = 34, //Latvia ά - CR_EST = 35, //Estonia ɳ - CR_ALB = 36, //Albania - CR_AUT = 37, //Austria µ - CR_BIH = 38, //Bosnia and Herzegovina ˹Ǻͺά - CR_IRL = 39, //Ireland - CR_ISL = 40, //Iceland - CR_VAT = 41, //Vatican ٸ - CR_MLT = 42, //Malta - CR_SWE = 43, //Sweden - CR_CHE = 44, //Switzerland ʿ - CR_CYP = 45, //Cyprus ·˹ - CR_TUR = 46, //Turkey - CR_SVN = 47, //Slovenia ˹ - CR_MTG = 48, //Montenegro ɽ͹ - CR_KOV = 49, //Kosovo - CR_ADR = 50, //Andorra - CR_ARM = 51, //Armenia () - CR_MON = 52, //Monaco Ħɸ - CR_LIE = 53, //Liechtenstein ֧ʿ - CR_SMO = 54, //San Marino ʥŵ - CR_ORN = 55, //Aland () - CR_RES2 = 56, //ֶ - CR_RES3 = 57, //ֶ - CR_RES4 = 58, //ֶ - /* 48 ·˹(Cyprus)ŷ޽*/ - CR_CHI = 59, //China й - CR_IBN = 60, //In bahrain - CR_SKR = 61, //South Korea - CR_LEB = 62, //Lebanon - CR_NEP = 63, //Nepal Ჴ - CR_THA = 64, //Thailand ̩ - CR_PAK = 65, //Pakistan ͻ˹̹ - CR_EMI = 66, //The united Arab emirates - CR_BHU = 67, //Bhutan - CR_OMA = 68, //Oman - CR_KOR = 69, //North Korea - CR_PHI = 70, //The Philippines ɱ - CR_CAM = 71, //Cambodia կ - CR_QAT = 72, //Qatar - CR_KYR = 73, //Kyrgyzstan ˹˹̹ - CR_MAL = 74, //The maldives - CR_MLY = 75, //Malaysia - CR_MOG = 76, //Mongolia ɹ - CR_ARA = 77, //Saudi Arabia ɳذ - CR_BRU = 78, //brunei - CR_LAO = 79, //Laos - CR_JAP = 80, //Japan ձ - CR_RES19 = 81, //ֶ - CR_PAS = 82, //Palestinian state ˹̹ - CR_TAJ = 83, //Tajikistan ˹̹ - CR_KUW = 84, //Kuwait - CR_SYR = 85, //Syria - CR_IND = 86, //India ӡ - CR_ISA = 87, //Indonesia ӡ - CR_AFG = 88, //Afghanistan - CR_LAN = 89, //Sri Lanka ˹ - CR_IRQ = 90, //Iraq - CR_VIE = 91, //Vietnam Խ - CR_IRA = 92, //Iran - CR_YEM = 93, //yemen Ҳ - CR_JOR = 94, //Jordan Լ - CR_BUR = 95, //Burma - CR_SIK = 96, //Sikkim - CR_BAN = 97, //Bangladesh ϼ - CR_SGA = 98, //Singapore ¼ - CR_EAT = 99, //East timor 루Ҳϣ - CR_RES5 = 100, //ֶ - CR_RES6 = 101, //ֶ - CR_RES7 = 102, //ֶ - CR_RES8 = 103, //ֶ - /* 60Һ͵*/ - CR_EGT = 104, //Egypt - CR_LIY = 105, //Libya - CR_SUA = 106, //Sudan յ - CR_TUN = 107, //Tunisia ͻ˹ - CR_ALG = 108, //Algeria - CR_MCC = 109, //Morocco Ħ - CR_ETH = 110, //Ethiopia - CR_ERI = 111, //Eritrea - CR_SDE = 112, //Somalia Democratic - CR_DJI = 113, //Djibouti - CR_KEN = 114, //Kenya - CR_TAI = 115, //Tanzania ̹ɣ - CR_UGA = 116, //Uganda ڸɴ - CR_RWA = 117, //Rwanda ¬ - CR_BUD = 118, //Burundi ¡ - CR_SEY = 119, //Seychelles - CR_CHA = 120, //Chad է - CR_CEA = 121, //Central African з - CR_CON = 122, //Cameroon ¡ - CR_EQG = 123, //Equatorial Guinea - CR_GAB = 124, //Gabon - CR_TCO = 125, //the Congo չ͹չ - CR_DRC = 126, //Democratic Republic of the Congo չ͹չ𣩣 - CR_STP = 127, //Sao Tome and Principe ʥ - CR_MAN = 128, //Mauritania ë - CR_WSA = 129, //Western Sahara - CR_SEL = 130, //Senegal ڼӶ - CR_TGA = 131, //the Gambia Ա - CR_MAI = 132, //Mali - CR_BUF = 133, //Burkina Faso ɷ - CR_GUI = 134, //Guinea - CR_GUB = 135, //Guinea-Bissau DZ - CR_CAV = 136, //Cape Verde ý - CR_SLE = 137, //Sierra Leone - CR_LIR = 138, //Liberia - CR_IVC = 139, //Ivory Coast ص - CR_GHA = 140, //Ghana - CR_TGO = 141, //Togo - CR_BEN = 142, //Benin - CR_NIG = 143, //Niger ն - CR_ZAB = 144, //Zambia ޱ - CR_ANG = 145, //Angola - CR_ZBE = 146, //Zimbabwe ͲΤ - CR_MAW = 147, //Malawi ά - CR_MOQ = 148, //Mozambique Īɣȿ - CR_BOT = 149, //Botswana - CR_NAM = 150, //Namibia ױ - CR_SAF = 151, //South Africa Ϸ - CR_SWD = 152, //Swaziland ˹ʿ - CR_LES = 153, //Lesotho - CR_MAG = 154, //Madagasca ˹ - CR_UOC = 155, //Union of Comoros Ħ - CR_MAT = 156, //Mauritius ë˹ - CR_NGE = 157, //Nigeria - CR_SSD = 158, //South Sudan յ - CR_SAH = 159, //Saint Helena ʥãӢʡ - CR_MYT = 160, //Mayotte Լأʡ - CR_REN = 161, //Reunion ʡ - CR_CAI = 162, //Canary Islands Ⱥ - CR_AZO = 163, //AZORES ٶȺ - CR_MAD = 164, //Madeira Ⱥ - CR_RES9 = 165, //ֶ - CR_RES10 = 166, //ֶ - CR_RES11 = 167, //ֶ - CR_RES12 = 168, //ֶ - /* 55Һ͵*/ - CR_CAD = 169, //Canada ô - CR_GRE = 170, //Greenland Nuuk ĺ - CR_PIE = 171, //Pierre and Miquelon ʥƤܿ¡ - CR_USA = 172, //United States - CR_BER = 173, //Bermuda ĽӢ - CR_MEX = 174, //Mexico ī - CR_GUA = 175, //Guatemala Σ - CR_BLI = 176, //Belize - CR_SAR = 177, //El Salvador ߶ - CR_HOR = 178, //Honduras 鶼˹ - CR_NIC = 179, //Nicaragua - CR_COR = 180, //Costa Rica ˹ - CR_PAN = 181, //Panama - CR_TBM = 182, //The Bahamas ͹ - CR_TCI = 183, //The Turks and Caicos Islands ؿ˹ȺͿ˹ȺӢ - CR_CUB = 184, //Cuba Ű - CR_JAM = 185, //Jamaica - CR_CAY = 186, //Cayman Islands ȺӢ - CR_HAT = 187, //Haiti - CR_TDO = 188, //The Dominican - CR_PUR = 189, //Puerto Rico - CR_VIL = 190, //The United States Virgin IslandsάȺ - CR_BVI = 191, //The British Virgin Islands ӢάȺ - CR_ATV = 192, //Anguilla The Valley Ӣ - CR_ANB = 193, //Antigua and Barbuda ϺͰͲ - CR_CSM = 194, //Collectivit de Saint-Martin ʥ - CR_ACY = 195, //Autonomous country ʥι - CR_SBY = 196, //Saint-Barthlemy ʥ̩׵ - CR_SKN = 197, //Saint Kitts and Nevis ʥĺά˹ - CR_MOT = 198, //Montserrat أӢ - CR_GLP = 199, //Guadeloupe ϵգ - CR_DOM = 200, //Dominica - CR_MTE = 201, //Martinique ˣ - CR_LUC = 202, //St. Lucia ʥ¬ - CR_SVG = 203, //Saint Vincent and the Grenadines ʥɭغ͸ɶ˹ - CR_GRD = 204, //Grenada ɴ - CR_BAR = 205, //Barbados ͰͶ˹ - CR_TRT = 206, //Trinidad and Tobago Ͷ͸ - CR_CUR = 207, //Cura?ao һι - CR_ARB = 208, //Aruba ³ͣһι - CR_NEA = 209, //Netherlands Antilles ˹ - CR_COL = 210, //Colombia ױ - CR_VEN = 211, //Venezuela ί - CR_GUY = 212, //Guyana - CR_SUR = 213, //Suriname - CR_FRN = 214, //Guyane Francaise - CR_ECU = 215, //Ecuador ϶ - CR_PER = 216, //Peru ³ - CR_BOL = 217, //Bolivia ά - CR_PAR = 218, //Paraguay - CR_CLE = 219, //Chile - CR_BRA = 220, //Brazil - CR_UGY = 221, //Uruguay - CR_ARG = 222, //Argentina ͢ - CR_RES13 = 223, //ֶ - CR_RES14 = 224, //ֶ - CR_RES15 = 225, //ֶ - CR_RES16 = 226, //ֶ - /* 25Һ͵ */ - CR_ATN = 227, //Australien Ĵ - CR_NED = 228, //Neuseeland - CR_PNG = 229, //Papua New Guinea Ͳ¼ - CR_SAN = 230, //Salomonen Ⱥ - CR_VAU = 231, //Vanuatu Ŭͼ - CR_NCN = 232, //New Caledonia ¿ǣĺأ - CR_PAU = 233, //Palau - CR_FSM = 234, //Federated States of Micronesia ܿ - CR_MRI = 235, //Marshall Island ܶȺ - CR_CNM = 236, //Commonwealth of the Northern Mariana Islands Ⱥĺأ - CR_TEG = 237, //The Territory of Guahan صĺأ - CR_NUR = 238, //Nauru ³ - CR_KIB = 239, //Kiribati ˹ - CR_FID = 240, //Fidschi 쳼Ⱥ - CR_TNG = 241, //Tonga - CR_TUV = 242, //Tuvalu ͼ¬ - CR_WEF = 243, //Wallis et Futuna ˹͸ͼɣĺأ - CR_TIS = 244, //The Independent State of Samoa Ħ - CR_EAS = 245, //Eastern Samoa Ħ - CR_TOE = 246, //Tokelau пͣ - CR_NUE = 247, //Niue Ŧ - CR_TCD = 248, //The Cook Islands Ⱥ - CR_PFP = 249, //Polynsie fran?aiseFrench Polynesia - CR_PID = 250, //Pitcairn Islands ƤؿȺӢĺأ - CR_HAW = 251, //Hawaii State ģĺأ - CR_RES17 = 252, //ֶ - CR_RES18 = 253, //ֶ - CR_UNRECOGNIZED = 0xfe, //Unrecognized ޷ʶ - CR_ALL = 0xff, //ALL ȫ + CR_NONSUPPORT = 0, //0-算法库不支持牌识国家 + /*五大洲 一共有235国家和地区 */ + /*欧洲 48个国家和地区 其中 塞浦路斯(Cyprus)属于亚欧两洲交界国家*/ + CR_CZE = 1, //Czech Republic 捷克共和国 + CR_FRA = 2, //France 法国 + CR_DEU = 3, //Germany 德国 + CR_ESP = 4, //Spain 西班牙 + CR_ITA = 5, //Italy 意大利 + CR_NLD = 6, //Netherlands 荷兰 + CR_POL = 7, //Poland 波兰 + CR_SVK = 8, //Slovakia 斯洛伐克 + CR_BLR = 9, //Belarus 白俄罗斯 + CR_MDA = 10, //Moldova 摩尔多瓦 + CR_RUS = 11, //Russia 俄罗斯 + CR_UKR = 12, //Ukraine 乌克兰 + CR_BEL = 13, //Belgium 比利时 + CR_BGR = 14, //Bulgaria 保加利亚 + CR_DNK = 15, //Denmark 丹麦 + CR_FIN = 16, //Finland 芬兰 + CR_GBR = 17, //United Kingdom 英国 + CR_GRC = 18, //Greece 希腊 + CR_HRV = 19, //Croatia 克罗地亚 + CR_HUN = 20, //Hungary 匈牙利 + CR_ISR = 21, //Israel 以色列(亚洲) + CR_LUX = 22, //Luxembourg 卢森堡 + CR_MKD = 23, //Macedonia 马其顿共和国 + CR_NOR = 24, //Norway 挪威 + CR_PRT = 25, //Portuga 葡萄牙 + CR_ROU = 26, //Romania 罗马尼亚 + CR_SRB = 27, //Serbia 塞尔维亚 + CR_AZE = 28, //Azerbaijan 阿塞邦疆共和国(亚洲) + CR_GEO = 29, //Georgia 格鲁吉亚(亚洲) + CR_KAZ = 30, //Kazakhstan 哈萨克斯坦(亚洲) + CR_LTU = 31, //Lithuania 立陶宛共和国 + CR_TKM = 32, //Turkmenistan 土库曼斯坦(亚洲) + CR_UZB = 33, //Uzbekistan 乌兹别克斯坦(亚洲) + CR_LVA = 34, //Latvia 拉脱维亚 + CR_EST = 35, //Estonia 爱沙尼亚 + CR_ALB = 36, //Albania 阿尔巴尼亚 + CR_AUT = 37, //Austria 奥地利 + CR_BIH = 38, //Bosnia and Herzegovina 波斯尼亚和黑塞哥维那 + CR_IRL = 39, //Ireland 爱尔兰 + CR_ISL = 40, //Iceland 冰岛 + CR_VAT = 41, //Vatican 梵蒂冈 + CR_MLT = 42, //Malta 马耳他 + CR_SWE = 43, //Sweden 瑞典 + CR_CHE = 44, //Switzerland 瑞士 + CR_CYP = 45, //Cyprus 塞浦路斯 + CR_TUR = 46, //Turkey 土耳其 + CR_SVN = 47, //Slovenia 斯洛文尼亚 + CR_MTG = 48, //Montenegro 黑山共和国 + CR_KOV = 49, //Kosovo 科索沃 + CR_ADR = 50, //Andorra 安道尔 + CR_ARM = 51, //Armenia 亚美尼亚(亚洲) + CR_MON = 52, //Monaco 摩纳哥 + CR_LIE = 53, //Liechtenstein 列支敦士登 + CR_SMO = 54, //San Marino 圣马力诺 + CR_ORN = 55, //Aland 奥兰(芬兰自治区) + CR_RES2 = 56, //保留字段 + CR_RES3 = 57, //保留字段 + CR_RES4 = 58, //保留字段 + /*亚洲 48个国家 其中 塞浦路斯(Cyprus)属于亚欧两洲交界国家*/ + CR_CHI = 59, //China 中国 + CR_IBN = 60, //In bahrain 巴林 + CR_SKR = 61, //South Korea 韩国 + CR_LEB = 62, //Lebanon 黎巴嫩 + CR_NEP = 63, //Nepal 尼泊尔 + CR_THA = 64, //Thailand 泰国 + CR_PAK = 65, //Pakistan 巴基斯坦 + CR_EMI = 66, //The united Arab emirates 阿拉伯联合酋长国 + CR_BHU = 67, //Bhutan 不丹 + CR_OMA = 68, //Oman 阿曼 + CR_KOR = 69, //North Korea 朝鲜 + CR_PHI = 70, //The Philippines 菲律宾 + CR_CAM = 71, //Cambodia 柬埔寨 + CR_QAT = 72, //Qatar 卡塔尔 + CR_KYR = 73, //Kyrgyzstan 吉尔吉斯斯坦 + CR_MAL = 74, //The maldives 马尔代夫 + CR_MLY = 75, //Malaysia 马来西亚 + CR_MOG = 76, //Mongolia 蒙古 + CR_ARA = 77, //Saudi Arabia 沙特阿拉伯 + CR_BRU = 78, //brunei 文莱 + CR_LAO = 79, //Laos 老挝 + CR_JAP = 80, //Japan 日本 + CR_RES19 = 81, //保留字段 + CR_PAS = 82, //Palestinian state 巴勒斯坦国 + CR_TAJ = 83, //Tajikistan 塔吉克斯坦 + CR_KUW = 84, //Kuwait 科威特 + CR_SYR = 85, //Syria 叙利亚 + CR_IND = 86, //India 印度 + CR_ISA = 87, //Indonesia 印度尼西亚 + CR_AFG = 88, //Afghanistan 阿富汗 + CR_LAN = 89, //Sri Lanka 斯里兰卡 + CR_IRQ = 90, //Iraq 伊拉克 + CR_VIE = 91, //Vietnam 越南 + CR_IRA = 92, //Iran 伊朗 + CR_YEM = 93, //yemen 也门 + CR_JOR = 94, //Jordan 约旦 + CR_BUR = 95, //Burma 缅甸 + CR_SIK = 96, //Sikkim 锡金 + CR_BAN = 97, //Bangladesh 孟加拉国 + CR_SGA = 98, //Singapore 新加坡 + CR_EAT = 99, //East timor 东帝汶(已宣布独立,但世界上许多国家不承认) + CR_RES5 = 100, //保留字段 + CR_RES6 = 101, //保留字段 + CR_RES7 = 102, //保留字段 + CR_RES8 = 103, //保留字段 + /*非洲 60个国家和地区*/ + CR_EGT = 104, //Egypt 埃及 + CR_LIY = 105, //Libya 利比亚 + CR_SUA = 106, //Sudan 苏丹 + CR_TUN = 107, //Tunisia 突尼斯 + CR_ALG = 108, //Algeria 阿尔及利亚 + CR_MCC = 109, //Morocco 摩洛哥 + CR_ETH = 110, //Ethiopia 埃塞俄比亚 + CR_ERI = 111, //Eritrea 厄立特里亚 + CR_SDE = 112, //Somalia Democratic 索马里 + CR_DJI = 113, //Djibouti 吉布提 + CR_KEN = 114, //Kenya 肯尼亚 + CR_TAI = 115, //Tanzania 坦桑尼亚 + CR_UGA = 116, //Uganda 乌干达 + CR_RWA = 117, //Rwanda 卢旺达 + CR_BUD = 118, //Burundi 布隆迪 + CR_SEY = 119, //Seychelles 塞舌尔 + CR_CHA = 120, //Chad 乍得 + CR_CEA = 121, //Central African 中非 + CR_CON = 122, //Cameroon 喀麦隆 + CR_EQG = 123, //Equatorial Guinea赤道几内亚 + CR_GAB = 124, //Gabon 加蓬 + CR_TCO = 125, //the Congo 刚果共和国(即:刚果(布)) + CR_DRC = 126, //Democratic Republic of the Congo 刚果民主共和国(即:刚果(金)) + CR_STP = 127, //Sao Tome and Principe 圣多美和普林西比 + CR_MAN = 128, //Mauritania 毛里塔尼亚 + CR_WSA = 129, //Western Sahara 西撒哈拉(撒拉威) + CR_SEL = 130, //Senegal 塞内加尔 + CR_TGA = 131, //the Gambia 冈比亚 + CR_MAI = 132, //Mali 马里 + CR_BUF = 133, //Burkina Faso 布基纳法索 + CR_GUI = 134, //Guinea 几内亚 + CR_GUB = 135, //Guinea-Bissau 几内亚比绍 + CR_CAV = 136, //Cape Verde 佛得角 + CR_SLE = 137, //Sierra Leone 塞拉利昂 + CR_LIR = 138, //Liberia 利比里亚 + CR_IVC = 139, //Ivory Coast 科特迪瓦 + CR_GHA = 140, //Ghana 加纳 + CR_TGO = 141, //Togo 多哥 + CR_BEN = 142, //Benin 贝宁 + CR_NIG = 143, //Niger 尼日尔 + CR_ZAB = 144, //Zambia 赞比亚 + CR_ANG = 145, //Angola 安哥拉 + CR_ZBE = 146, //Zimbabwe 津巴布韦 + CR_MAW = 147, //Malawi 马拉维 + CR_MOQ = 148, //Mozambique 莫桑比克 + CR_BOT = 149, //Botswana 博茨瓦纳 + CR_NAM = 150, //Namibia 纳米比亚 + CR_SAF = 151, //South Africa 南非 + CR_SWD = 152, //Swaziland 斯威士兰 + CR_LES = 153, //Lesotho 莱索托 + CR_MAG = 154, //Madagasca 马达加斯加 + CR_UOC = 155, //Union of Comoros 科摩罗 + CR_MAT = 156, //Mauritius 毛里求斯 + CR_NGE = 157, //Nigeria 尼日利亚 + CR_SSD = 158, //South Sudan 南苏丹 + CR_SAH = 159, //Saint Helena 圣赫勒拿(英国海外省) + CR_MYT = 160, //Mayotte 马约特(法国海外省) + CR_REN = 161, //Reunion 留尼旺(法国海外省) + CR_CAI = 162, //Canary Islands 加那利群岛(西班牙海外领土) + CR_AZO = 163, //AZORES 亚速尔群岛(北大西洋非洲西海岸(葡萄牙)) + CR_MAD = 164, //Madeira 马德拉群岛(北大西洋非洲西海岸(葡萄牙)) + CR_RES9 = 165, //保留字段 + CR_RES10 = 166, //保留字段 + CR_RES11 = 167, //保留字段 + CR_RES12 = 168, //保留字段 + /*美洲 55个国家和地区*/ + CR_CAD = 169, //Canada 加拿大 + CR_GRE = 170, //Greenland Nuuk 格陵兰(丹麦王国的海外自治领土) + CR_PIE = 171, //Pierre and Miquelon 圣皮埃尔和密克隆(法国海外领土) + CR_USA = 172, //United States 美国 + CR_BER = 173, //Bermuda 百慕大(英国海外领土) + CR_MEX = 174, //Mexico 墨西哥 + CR_GUA = 175, //Guatemala 危地马拉 + CR_BLI = 176, //Belize 伯利兹 + CR_SAR = 177, //El Salvador 萨尔瓦多 + CR_HOR = 178, //Honduras 洪都拉斯 + CR_NIC = 179, //Nicaragua 尼加拉瓜 + CR_COR = 180, //Costa Rica 哥斯达黎加 + CR_PAN = 181, //Panama 巴拿马 + CR_TBM = 182, //The Bahamas 巴哈马 + CR_TCI = 183, //The Turks and Caicos Islands 特克斯群岛和凯科斯群岛(英国海外领土) + CR_CUB = 184, //Cuba 古巴 + CR_JAM = 185, //Jamaica 牙买加 + CR_CAY = 186, //Cayman Islands 开曼群岛(英国海外领土) + CR_HAT = 187, //Haiti 海地 + CR_TDO = 188, //The Dominican 多米尼加 + CR_PUR = 189, //Puerto Rico 波多黎各(美国海外领土) + CR_VIL = 190, //The United States Virgin Islands美属维尔京群岛 + CR_BVI = 191, //The British Virgin Islands 英属维尔京群岛 + CR_ATV = 192, //Anguilla The Valley 安圭拉(英国海外领土) + CR_ANB = 193, //Antigua and Barbuda 安提瓜和巴布达 + CR_CSM = 194, //Collectivité de Saint-Martin 法属圣马丁(法国海外领土) + CR_ACY = 195, //Autonomous country 荷属圣马丁(荷兰王国的自治国 ) + CR_SBY = 196, //Saint-Barthélemy 圣巴泰勒米岛(法国海外领土) + CR_SKN = 197, //Saint Kitts and Nevis 圣基茨和尼维斯 + CR_MOT = 198, //Montserrat 蒙特塞拉特(英国海外领土) + CR_GLP = 199, //Guadeloupe 瓜德罗普(法国海外领土) + CR_DOM = 200, //Dominica 多米尼克 + CR_MTE = 201, //Martinique 马提尼克(法国海外领土) + CR_LUC = 202, //St. Lucia 圣卢西亚 + CR_SVG = 203, //Saint Vincent and the Grenadines 圣文森特和格林纳丁斯 + CR_GRD = 204, //Grenada 格林纳达 + CR_BAR = 205, //Barbados 巴巴多斯 + CR_TRT = 206, //Trinidad and Tobago 特立尼达和多巴哥 + CR_CUR = 207, //Cura?ao 库拉索(荷兰王国的一个自治国) + CR_ARB = 208, //Aruba 阿鲁巴(荷兰王国的一个自治国) + CR_NEA = 209, //Netherlands Antilles 荷属安的列斯 + CR_COL = 210, //Colombia 哥伦比亚 + CR_VEN = 211, //Venezuela 委内瑞拉 + CR_GUY = 212, //Guyana 圭亚那 + CR_SUR = 213, //Suriname 苏里南 + CR_FRN = 214, //Guyane Francaise 法属圭亚那 + CR_ECU = 215, //Ecuador 厄瓜多尔 + CR_PER = 216, //Peru 秘鲁 + CR_BOL = 217, //Bolivia 玻利维亚 + CR_PAR = 218, //Paraguay 巴拉圭 + CR_CLE = 219, //Chile 智利 + CR_BRA = 220, //Brazil 巴西 + CR_UGY = 221, //Uruguay 乌拉圭 + CR_ARG = 222, //Argentina 阿根廷 + CR_RES13 = 223, //保留字段 + CR_RES14 = 224, //保留字段 + CR_RES15 = 225, //保留字段 + CR_RES16 = 226, //保留字段 + /*大洋洲 25个国家和地区 */ + CR_ATN = 227, //Australien 澳大利亚 + CR_NED = 228, //Neuseeland 新西兰 + CR_PNG = 229, //Papua New Guinea 巴布亚新几内亚 + CR_SAN = 230, //Salomonen 所罗门群岛 + CR_VAU = 231, //Vanuatu 瓦努阿图 + CR_NCN = 232, //New Caledonia 新喀里多尼亚(法国的海外属地) + CR_PAU = 233, //Palau 帕劳 + CR_FSM = 234, //Federated States of Micronesia 密克罗尼西亚联邦 + CR_MRI = 235, //Marshall Island 马绍尔群岛 + CR_CNM = 236, //Commonwealth of the Northern Mariana Islands 北马里亚纳群岛(美国的海外属地) + CR_TEG = 237, //The Territory of Guahan 关岛(美国的海外属地) + CR_NUR = 238, //Nauru 瑙鲁 + CR_KIB = 239, //Kiribati 基里巴斯 + CR_FID = 240, //Fidschi 斐济群岛 + CR_TNG = 241, //Tonga 汤加 + CR_TUV = 242, //Tuvalu 图瓦卢 + CR_WEF = 243, //Wallis et Futuna 瓦利斯和富图纳(法国的海外属地) + CR_TIS = 244, //The Independent State of Samoa 萨摩亚 + CR_EAS = 245, //Eastern Samoa 美属萨摩亚 + CR_TOE = 246, //Tokelau 托克劳(新西兰) + CR_NUE = 247, //Niue 纽埃(新西兰) + CR_TCD = 248, //The Cook Islands 库克群岛(新西兰) + CR_PFP = 249, //Polynésie fran?aiseFrench Polynesia 法属波利尼西亚 + CR_PID = 250, //Pitcairn Islands 皮特凯恩群岛(英国的海外属地) + CR_HAW = 251, //Hawaii State 夏威夷(美国的海外属地) + CR_RES17 = 252, //保留字段 + CR_RES18 = 253, //保留字段 + CR_UNRECOGNIZED = 0xfe, //Unrecognized 无法识别 + CR_ALL = 0xff, //ALL 全部 - // - CR_TAIWAN = 256, //Taiwan(China) ̨壨й + //下面是新增的区域 + CR_TAIWAN = 256, //Taiwan(China) 台湾(中国) }CR_INDEX; -//ö +//阿拉伯联合酋长国区域枚举 typedef enum _EMI_AREA_ { - EMI_AREA_UNKNOWN = 0, //֧ʶ - EMI_AREA_AD, // - EMI_AREA_FJR, // - EMI_AREA_DB, //ϰ - EMI_AREA_RAK, // - EMI_AREA_AM, // - EMI_AREA_SJ, //ɳ - EMI_AREA_UMW, //ķ - EMI_AREA_OTHER = 0xff, //δʶ𣨵豸ָ֧㷨ڻԭδʶ + EMI_AREA_UNKNOWN = 0, //不支持区域识别 + EMI_AREA_AD, //阿布扎比 + EMI_AREA_FJR, //富查伊哈 + EMI_AREA_DB, //迪拜 + EMI_AREA_RAK, //哈伊马角 + EMI_AREA_AM, //阿治曼 + EMI_AREA_SJ, //沙迦 + EMI_AREA_UMW, //乌姆盖万 + EMI_AREA_OTHER = 0xff, //未识别(但是设备支持该算法,由于环境等原因导致未识别) } EMI_AREA; typedef struct tagNET_DVR_FIND_PICTURE_PARAM { - DWORD dwSize; // ṹС - LONG lChannel; // ͨ - /* ҵͼƬ:0ʱץͼ1 ƶץͼ 2 ץͼ - 3 | ƶץͼ 4 & ƶץͼ 6 ֶץͼ , - 9-ͼƬ,10- PIR11- ߱12- ȱ, - 0xa Ԥʱͼ0xd , 0xe Խ⣬0xf ⣬ - 0x10 , 0x11-豸ػطʱͼ, 0x12-, - 0x13-,0x14-뿪,0x15-ǻ, - 0x16-Աۼ,0x17-˶,0x18-ͣ, - 0x19-Ʒ,0x1a-Ʒȡ, 0x1b-, - 0x1c-м,0x1d-ȡ֤¼,0x1e-,0x1f-ƻ, - 0x20-ֻ⣬0x21-Ԥ0x22-±, 0x23, - 0x24Υͣ,0x25-Ŀץ,0x26-߲±,0x2a-, - 0x2b-ʸ,0x2c-Ŀʱ,0x2d-ȫñ,0x2e-ܽץ, - 0x2f-Ŀץ,0x30-ĿץĽģ, 0x31-Ŀ, - 0x32-, 0x33-, 0x34-ҵѯ,0x35-Ƿ̯, - 0x36-ԱܶȣԤ,0x37-ڼ,0x38-쳣, - 0x39-˶, 0x3a-Υͣ, 0x3b-,0x3c-ѹ,0x3d-ռ,0x3e-,0x3f-ͷ,0x40-˼,0x41-·, - 0x42-,0x43-Ũ,0x44-ʩ,0x45-ӵ,0x46-ͨ¹ʼ, 0x47-෽ͣ0x48-ֶ, - 0x49-ֻ,0x4b-˾ʻΪ,0x4c-߼ʻ,0x4d-ɳⱨ, - 0x52-ŶӼ,0x53-ŶӼʱ,0x54-(ֶճԼƽ̨), 0x55-ʱץ, 0x56-ŷʾ, - 0x57-Ҷȱ, 0x58-,0x59-Ա,0x5a-Ա,0x5b-쳣,0x5c-Ա,0x5d-̼,0x5e-,0x5f-, - 0x60-ռӦ,0x61-ռ,0x62-ֹ,0x63-ռרó,0x64-,0x65-ReID,0x66-ͨʱץͼ¼, - 0x67-AIƽ̨¼,0x68-Ũ쳣,0x69-ǿ쳣,0x70-ͨʱץͼ,0x71-¼,0x72-ϹӼ, - 0x73-豸Դ״̬ϱ,0xff- ȫ*/ + DWORD dwSize; // 结构体大小 + LONG lChannel; // 通道号 + /* 查找的图片类型:0定时抓图1 移动侦测抓图 2 报警抓图, + 3 报警 | 移动侦测抓图 4 报警 & 移动侦测抓图 6 手动抓图 , + 9-智能图片,10- PIR报警,11- 无线报警,12- 呼救报警, + 0xa 预览时截图,0xd 人脸侦测, 0xe 越界侦测,0xf 入侵区域侦测, + 0x10 场景变更侦测, 0x11-设备本地回放时截图, 0x12-智能侦测, + 0x13-进入区域侦测,0x14-离开区域侦测,0x15-徘徊侦测, + 0x16-人员聚集侦测,0x17-快速运动侦测,0x18-停车侦测, + 0x19-物品遗留侦测,0x1a-物品拿取侦测, 0x1b-车牌侦测, + 0x1c-混行检测,0x1d-取证事件,0x1e-火点检测,0x1f-防破坏检测, + 0x20-船只检测,0x21-测温预警,0x22-测温报警, 0x23测差报警, + 0x24违停检测,0x25-目标抓拍,0x26-离线测温报警,0x2a-起身检测, + 0x2b-折线攀高,0x2c-目标区域滞留超时,0x2d-安全帽检测,0x2e-周界抓拍, + 0x2f-人体目标抓拍,0x30-目标抓拍建模, 0x31-混合目标检测, + 0x32-防区报警, 0x33-紧急求助, 0x34-业务咨询,0x35-非法摆摊, + 0x36-人员密度(人数预警),0x37-离岗检测,0x38-人数异常检测, + 0x39-剧烈运动检测, 0x3a-违停, 0x3b-逆行,0x3c-压线,0x3d-机占非,0x3e-变道,0x3f-掉头,0x40-行人检测,0x41-路障, + 0x42-抛洒物,0x43-浓雾检测,0x44-施工,0x45-拥堵,0x46-交通事故检测, 0x47-侧方停车,0x48-手动触发报警, + 0x49-玩手机检测,0x4b-司机驾驶行为,0x4c-高级辅助驾驶,0x4d-挖沙船检测报警, + 0x52-排队检测人数,0x53-排队检测时长,0x54-车辆布防(包括手动布防,日常布防以及平台布防), 0x55-定时唤醒抓拍, 0x56-废气排放显示, + 0x57-灰度报警, 0x58-振动侦测,0x59-人员奔跑,0x5a-人员滞留,0x5b-间距异常,0x5c-人员倒地,0x5d-抽烟检测,0x5e-卡口,0x5f-闯禁令, + 0x60-占用应急车道,0x61-大车占道,0x62-禁止名单,0x63-占用专用车道,0x64-烟雾检测,0x65-ReID,0x66-通道定时抓图事件, + 0x67-AI开放平台事件,0x68-甲烷检测浓度异常,0x69-甲烷检测光强异常,0x70-通道定时抓图,0x71-传感器事件,0x72-紫光电子检测, + 0x73-设备电源状态上报,0xff- 全部类型*/ BYTE byFileType; - BYTE byNeedCard; // ǷҪ + BYTE byNeedCard; // 是否需要卡号 /* - 0-1-ģ2-3-壬4-5-ʣ6-7- - 8-9-10-11-ԥ12-ڣ13-14-棬 - 15-16-գ17-ӣ18-ɣ19-ɣ20-21-࣬ - 22-³23-24-£25-26-27-̨28- - 29-أ30-ۣ31-£32-ƣ33-㣬34-0xff-ȫ + 0-保留,1-澳,2-京,3-渝,4-闽,5-甘,6-粤,7-桂, + 8-贵,9-琼,10-冀,11-豫,12-黑,13-鄂,14-湘, + 15-吉,16-苏,17-赣,18-辽,19-蒙,20-宁,21-青, + 22-鲁,23-晋,24-陕,25-沪,26-川,27-台,28-津, + 29-藏,30-港,31-新,32-云,33-浙,34-皖,0xff-全部 */ - BYTE byProvince; //ʡֵ - BYTE byEventType; // ¼ͣ01-ͨ¼2-Υȡ֤3-¼ - BYTE sCardNum[CARDNUM_LEN_V30]; // - NET_DVR_TIME struStartTime;//ͼƬĿʼʱ - NET_DVR_TIME struStopTime;// ͼƬĽʱ - //ITC3.7 - DWORD dwTrafficType; //ͼƬЧ ο VCA_OPERATE _TYPE - DWORD dwVehicleType; // ο VCA_VEHICLE_TYPE - //ΥͲο VCA_ILLEGAL_TYPE ǰָ֧ѡ + BYTE byProvince; //省份索引值 + BYTE byEventType; // 事件类型:0保留,1-交通事件;2-违章取证;3-其他事件 + BYTE sCardNum[CARDNUM_LEN_V30]; // 卡号 + NET_DVR_TIME struStartTime;//查找图片的开始时间 + NET_DVR_TIME struStopTime;// 查找图片的结束时间 + //ITC3.7 新增 + DWORD dwTrafficType; //图片检索生效项 参考 VCA_OPERATE _TYPE + DWORD dwVehicleType; //车辆类型 参考 VCA_VEHICLE_TYPE + //违规检测类型参考 VCA_ILLEGAL_TYPE 当前不支持复选 DWORD dwIllegalType; - BYTE byLaneNo; //(1~99) - BYTE bySubHvtType ;//0-,1-(ֳ֧Ƽʡݼ),2-ǻ,3- - BYTE bySubDriveType; //ʻ - //byFileTypeΪ0x4b-˾ʻΪʱΪ˾ʻΪͣ嶨壺0-1-̡2-Ӵ绰3-ƣͼʻ4-ѡ5-ʻԱ쳣6-δϵȫ7-ī8-˫뷽̡9-뷽̡10-ʻԱ쳣11-ʱʻ12-ʻԱ - //byFileTypeΪ0x4c-߼ʻʱΪ߼ʻͣ嶨壺0-1-ǰײ2-ƫ()3-ƫ()4-5-˷ײ6-ä(Һ)7-ä()8-ä() - BYTE byRes2;//ֽ - char sLicense[MAX_LICENSE_LEN/*16*/]; //ƺ - BYTE byRegion; // ֵ 0-1-ŷ(Europe Region)2-(Russian Region)3-ŷ&˹(EU&CIS), 4-ж(Middle East),0xff- - BYTE byCountry; // ֵգCOUNTRY_INDEX - BYTE byArea; // - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱ + BYTE byLaneNo; //车道号(1~99) + BYTE bySubHvtType ;//0-保留,1-机动车(机动车子类型中支持车牌检索,省份检索),2-非机动车,3-行人 + BYTE bySubDriveType; //驾驶子类型 + //当byFileType为0x4b-司机驾驶行为时,含义为司机驾驶行为类型,具体定义:0-保留、1-抽烟、2-接打电话、3-疲劳驾驶、4-分神提醒、5-驾驶员异常、6-未系安全带、7-红外阻断墨镜、8-双手脱离方向盘、9-单手脱离方向盘、10-驾驶员身份异常、11-超时驾驶、12-驾驶员变更 + //当byFileType为0x4c-高级辅助驾驶时,含义为高级辅助驾驶类型,具体定义:0-保留、1-前向碰撞、2-车道偏离(左)、3-车道偏离(右)、4-车距过近、5-行人防撞、6-盲区检测(右后方)、7-盲区检测(左后方)、8-盲区检测(后方) + BYTE byRes2;//保留字节 + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码 + BYTE byRegion; // 区域索引值 0-保留,1-欧洲(Europe Region),2-俄语区域(Russian Region),3-欧洲&俄罗斯(EU&CIS), 4-中东(Middle East),0xff-所有 + BYTE byCountry; // 国家索引值,参照:COUNTRY_INDEX + BYTE byArea; //地区 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 }NET_DVR_FIND_PICTURE_PARAM, *LPNET_DVR_FIND_PICTURE_PARAM; -//PC NVRļ +//PC NVR的文件搜索条件 typedef struct tagNET_DVR_FIND_FILE_PCNVR { - DWORD dwSize; //ṹС - NET_DVR_IPADDR struIpAddr; //IPַ - WORD wIpPort; //˿ں - BYTE byRes[2]; //ֽ - char sDomainName[MAX_DOMAIN_NAME]; //(ʱû) - char sSerial[SERIALNO_LEN]; //к + DWORD dwSize; //结构体大小 + NET_DVR_IPADDR struIpAddr; //IP地址 + WORD wIpPort; //端口号 + BYTE byRes[2]; //保留字节 + char sDomainName[MAX_DOMAIN_NAME]; //域名(暂时没用) + char sSerial[SERIALNO_LEN]; //序列号 - DWORD lChannel; //ͨ - DWORD dwFileType; //¼ļ0xffȫ0ʱ¼,1-ƶ 2 - //3-|ƶ 4-&ƶ 5- 6-ֶ¼ - DWORD dwIsLocked; //Ƿ 0-ļ,1-ļ, 0xffʾļ - DWORD dwUseCardNo; //Ƿʹÿ - BYTE sCardNumber[CARDNUM_LEN_V30]; // - NET_DVR_TIME struStartTime; //ʼʱ - NET_DVR_TIME struStopTime; //ʱ + DWORD lChannel; //通道号 + DWORD dwFileType; //录象文件类型0xff-全部,0-定时录像,1-移动侦测 ,2-报警触发, + //3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像 + DWORD dwIsLocked; //是否锁定 0-正常文件,1-锁定文件, 0xff表示所有文件 + DWORD dwUseCardNo; //是否使用卡号 + BYTE sCardNumber[CARDNUM_LEN_V30]; //卡号 + NET_DVR_TIME struStartTime; //开始时间 + NET_DVR_TIME struStopTime; //结束时间 }NET_DVR_FILE_COND_PCNVR, *LPNET_DVR_FILE_COND_PCNVR; -//PCNVR¼ļ +//PCNVR的录像搜索结果文件 typedef struct tagNET_DVR_FINDDATA_PCNVR { - char sFileName[100];//ļ - NET_DVR_TIME struStartTime;//ļĿʼʱ - NET_DVR_TIME struStopTime;//ļĽʱ - DWORD dwFileSize;//ļĴС + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 char sCardNum[CARDNUM_LEN_V30]; - BYTE byLocked;//9000豸֧,1ʾļѾ,0ʾļ - BYTE byFileType; //ļ + BYTE byLocked;//9000设备支持,1表示此文件已经被锁定,0表示正常的文件 + BYTE byFileType; //文件类型 BYTE byRes[2]; }NET_DVR_FINDDATA_PCNVR, *LPNET_DVR_FINDDATA_PCNVR; @@ -26234,138 +26234,138 @@ typedef struct tagNET_DVR_FINDDATA_PCNVR typedef struct { - char sFileName[PICTURE_NAME_LEN];//ͼƬ - NET_DVR_TIME struTime;//ͼƬʱ - DWORD dwFileSize;//ͼƬĴС - char sCardNum[CARDNUM_LEN_V30]; // - BYTE byPlateColor ;//οṹ VCA_PLATE_COLOR - BYTE byVehicleLogo;//οṹ VLR_VEHICLE_CLASS - BYTE byEventSearchStatus; //ͼƬʾͬһҽʱ0-ʾûͼƬϢ1-ʾ滹ͼƬϢܹͼƬϢһ״̬Ϊ0ͼƬ - BYTE byRecogResult ;//ʶοṹVTR_RESULT - char sLicense[MAX_LICENSE_LEN/*16*/]; //ƺ + char sFileName[PICTURE_NAME_LEN];//图片名 + NET_DVR_TIME struTime;//图片的时间 + DWORD dwFileSize;//图片的大小 + char sCardNum[CARDNUM_LEN_V30]; //卡号 + BYTE byPlateColor ;//参考结构 VCA_PLATE_COLOR + BYTE byVehicleLogo;//参考结构 VLR_VEHICLE_CLASS + BYTE byEventSearchStatus; //连续图片表示同一查找结果的时候,0-表示后面没有图片信息,1-表示后面还有图片信息。总共图片信息包括最后一张状态为0的图片。 + BYTE byRecogResult ;//识别结果参考结构VTR_RESULT + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码 BYTE byRes[12]; }NET_DVR_FIND_PICTURE,*LPNET_DVR_FIND_PICTURE; -#define MAX_RECORD_PICTURE_NUM 50 // 󱸷ͼƬ +#define MAX_RECORD_PICTURE_NUM 50 // 最大备份图片张数 typedef struct tagNET_DVR_BACKUP_PICTURE_PARAM { - DWORD dwSize; // ṹС + DWORD dwSize; // 结构体大小 DWORD dwPicNum; NET_DVR_FIND_PICTURE struPicture[MAX_RECORD_PICTURE_NUM]; BYTE byDiskDes[DESC_LEN_32]; BYTE byWithPlayer; - BYTE byContinue; /*Ƿ 0 1*/ + BYTE byContinue; /*是否继续备份 0不继续 1继续*/ BYTE byRes[34]; }NET_DVR_BACKUP_PICTURE_PARAM, *LPNET_DVR_BACKUP_PICTURE_PARAM; typedef struct { - DWORD dwSize; //ṹС - DWORD dwChannel; //ͨ - BYTE byCompressType; //ȡѹ1,2,3,¼ - BYTE byRes[15]; // - NET_DVR_COMPRESSIONCFG_V30 struCurrentCfg; //ǰѹ + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + BYTE byCompressType; //待获取的压缩参数类型1,主码流2,子码流3,事件 + BYTE byRes[15]; //保留 + NET_DVR_COMPRESSIONCFG_V30 struCurrentCfg; //当前压缩参数配置 }NET_DVR_COMPRESSION_LIMIT, *LPNET_DVR_COMPRESSION_LIMIT; -#define STEP_READY 0 //׼ -#define STEP_RECV_DATA 1 // -#define STEP_UPGRADE 2 //ϵͳ -#define STEP_BACKUP 3 //ϵͳ -#define STEP_SEARCH 255 //ļ +#define STEP_READY 0 //准备升级 +#define STEP_RECV_DATA 1 //接收升级包数据 +#define STEP_UPGRADE 2 //升级系统 +#define STEP_BACKUP 3 //备份系统 +#define STEP_SEARCH 255 //搜索升级文件 typedef struct tagNET_DVR_VIDEO_EFFECT { - DWORD dwBrightValue; //[0,255] - DWORD dwContrastValue; //Աȶ[0,255] - DWORD dwSaturationValue; //Ͷ[0,255] - DWORD dwHueValue; //ɫ[0,255] - DWORD dwSharpness; //[0,255] - DWORD dwDenoising; //ȥ[0,255] + DWORD dwBrightValue; //亮度[0,255] + DWORD dwContrastValue; //对比度[0,255] + DWORD dwSaturationValue; //饱和度[0,255] + DWORD dwHueValue; //色调[0,255] + DWORD dwSharpness; //锐度[0,255] + DWORD dwDenoising; //去噪[0,255] BYTE byRes[12]; }NET_DVR_VIDEO_EFFECT, *LPNET_DVR_VIDEO_EFFECT; typedef struct tagNET_DVR_VIDEO_INPUT_EFFECT { - DWORD dwSize; //ṹС - WORD wEffectMode; //ģʽ 0-׼ 1- 2- 3- 255-Զ - BYTE byRes1[146]; // - NET_DVR_VIDEO_EFFECT struVideoEffect; //ƵЧ - BYTE byRes2[60]; // + DWORD dwSize; //结构体大小 + WORD wEffectMode; //模式 0-标准 1-室内 2-弱光 3-室外 255-自定义 + BYTE byRes1[146]; //保留 + NET_DVR_VIDEO_EFFECT struVideoEffect; //视频效果参数 + BYTE byRes2[60]; //保留 }NET_DVR_VIDEO_INPUT_EFFECT, *LPNET_DVR_VIDEO_INPUT_EFFECT; typedef struct tagNET_DVR_VIDEOPARA_V40 { - DWORD dwChannel; // ͨ - DWORD dwVideoParamType; // Ƶ 0- 1-Աȶ 2-Ͷ 3-ɫ 4- 5-ȥ - DWORD dwVideoParamValue; //ӦƵֵΧ + DWORD dwChannel; // 通道号 + DWORD dwVideoParamType; // 视频参数类型 0-亮度 1-对比度 2-饱和度 3-色度 4-锐度 5-去噪 + DWORD dwVideoParamValue; //对应的视频参数值,范围依据能力集 BYTE byRes[12]; }NET_DVR_VIDEOPARA_V40, *LPNET_DVR_VIDEOPARA_V40; typedef struct tagNET_DVR_DEFAULT_VIDEO_COND { - DWORD dwSize; // ṹС - DWORD dwChannel; // ͨ - DWORD dwVideoMode; // ģʽ - BYTE byRes[32]; // + DWORD dwSize; // 结构体大小 + DWORD dwChannel; // 通道号 + DWORD dwVideoMode; // 模式 + BYTE byRes[32]; // 保留 }NET_DVR_DEFAULT_VIDEO_COND, *LPNET_DVR_DEFAULT_VIDEO_COND; typedef struct tagNET_DVR_ENCODE_JOINT_PARAM { - DWORD dwSize; // ṹС - BYTE byJointed; // 0 ûй 1 Ѿ - BYTE byDevType; // 豸 1 豸 - BYTE byRes1[2]; // ֽ - NET_DVR_IPADDR struIP; // ıȡ豸IPַ - WORD wPort; // ıȡ豸˿ں - WORD wChannel; // ıȡ豸ͨ - BYTE byRes2[20]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byJointed; // 0 没有关联 1 已经关联 + BYTE byDevType; // 被关联的设备类型 1 代表智能设备 + BYTE byRes1[2]; // 保留字节 + NET_DVR_IPADDR struIP; // 关联的被取流设备IP地址 + WORD wPort; // 关联的被取流设备端口号 + WORD wChannel; // 关联的被取流设备通道号 + BYTE byRes2[20]; // 保留字节 }NET_DVR_ENCODE_JOINT_PARAM, *LPNET_DVR_ENCODE_JOINT_PARAM; typedef struct tagNET_DVR_VCA_CHAN_WORKSTATUS { - BYTE byJointed; // 0-ûй 1-Ѿ + BYTE byJointed; // 0-没有关联 1-已经关联 BYTE byRes1[3]; - NET_DVR_IPADDR struIP; // ȡ豸IPַ - WORD wPort; // ȡ豸˿ں - WORD wChannel; // ȡ豸ͨ - BYTE byVcaChanStatus; // 0 - δ 1 - - BYTE byRes2[19]; // ֽ + NET_DVR_IPADDR struIP; // 关联的取流设备IP地址 + WORD wPort; // 关联的取流设备端口号 + WORD wChannel; // 关联的取流设备通道号 + BYTE byVcaChanStatus; // 0 - 未启用 1 - 启用 + BYTE byRes2[19]; // 保留字节 }NET_DVR_VCA_CHAN_WORKSTATUS, *LPNET_DVR_VCA_CHAN_WORKSTATUS; typedef struct tagNET_DVR_VCA_DEV_WORKSTATUS { - DWORD dwSize; // ṹС - BYTE byDeviceStatus; // 豸״̬0 - 1- - BYTE byCpuLoad; // CPUʹ0-100 ֱʹðٷ + DWORD dwSize; // 结构体大小 + BYTE byDeviceStatus; // 设备的状态0 - 正常工作 1- 不正常工作 + BYTE byCpuLoad; // CPU使用率0-100 分别代表使用百分率 NET_DVR_VCA_CHAN_WORKSTATUS struVcaChanStatus[MAX_VCA_CHAN]; - DWORD dwRes[40]; // ֽ + DWORD dwRes[40]; // 保留字节 }NET_DVR_VCA_DEV_WORKSTATUS, *LPNET_DVR_VCA_DEV_WORKSTATUS; typedef struct tagNET_DVR_VGA_DISP_CHAN_CFG_V40 { DWORD dwSize; - BYTE byAudio; /*ƵǷ*/ - BYTE byAudioWindowIdx; /*ƵӴ*/ - BYTE byVgaResolution; /*ֱʣȡ*/ - BYTE byVedioFormat; /*1:NTSC,2:PAL0-NULL*/ - DWORD dwWindowMode; /*ģʽȡ*/ - BYTE byJoinDecChan[MAX_WINDOWS];/*ӴڹĽͨ*/ - BYTE byEnlargeStatus; /*ǷڷŴ״̬0Ŵ1Ŵ*/ - BYTE byEnlargeSubWindowIndex;//ŴӴں - BYTE byScale; /*ʾģʽ0---ʵʾ1---ʾ( BNC )*/ - /*ֹ壬0-Ƶۺƽ̨ڲʾͨã1-ʾͨ*/ + BYTE byAudio; /*音频是否开启*/ + BYTE byAudioWindowIdx; /*音频开启子窗口*/ + BYTE byVgaResolution; /*分辨率,从能力集获取*/ + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ + DWORD dwWindowMode; /*画面模式,能力集获取*/ + BYTE byJoinDecChan[MAX_WINDOWS];/*各个子窗口关联的解码通道*/ + BYTE byEnlargeStatus; /*是否处于放大状态,0:不放大,1:放大*/ + BYTE byEnlargeSubWindowIndex;//放大的子窗口号 + BYTE byScale; /*显示模式,0---真实显示,1---缩放显示( 针对BNC )*/ + /*区分共用体,0-视频综合平台内部解码器显示通道配置,1-其他解码器显示通道配置*/ BYTE byUnionType; union { BYTE byRes[160]; struct { - /*ӴڶӦͨӦĽϵͳIJλ(Ƶۺƽ̨нϵͳЧ)*/ + /*各个子窗口对应解码通道所对应的解码子系统的槽位号(对于视频综合平台中解码子系统有效)*/ BYTE byJoinDecoderId[MAX_WINDOWS]; - //ʾƵֱʣ1-D1,2-720P,3-1080P豸Ҫݴ//ֱʽнͨķ䣬1ó1080P豸4ͨ - //˽ͨ + //显示窗口所解视频分辨率,1-D1,2-720P,3-1080P,设备端需要根据此//分辨率进行解码通道的分配,如1分屏配置成1080P,则设备会把4个解码通 + //道都分配给此解码通道 BYTE byDecResolution; BYTE byRes[143]; }struVideoPlatform; @@ -26379,7 +26379,7 @@ typedef struct tagNET_DVR_VGA_DISP_CHAN_CFG_V40 typedef struct tagNET_DVR_V6SUBSYSTEMPARAM { - BYTE bySerialTrans;//Ƿ͸0-1- + BYTE bySerialTrans;//是否透传,0-否,1-是 BYTE byRes[35]; }NET_DVR_V6SUBSYSTEMPARAM, *LPNET_DVR_V6SUBSYSTEMPARAM; @@ -26389,460 +26389,460 @@ typedef struct tagNET_DVR_V6SUBSYSTEMPARAM typedef struct tagNET_DVR_CORRECT_DEADPIXEL_PARAM { DWORD dwSize; - DWORD dwCommand; //0-뻵ģʽ1-ӻ㣬2-滵㣬3-˳ - DWORD dwDeadPixelX; //X - DWORD dwDeadPixelY; //Y - BYTE byRes[12]; // + DWORD dwCommand; //命令:0-进入坏点模式,1-添加坏点,2-保存坏点,3-退出坏点 + DWORD dwDeadPixelX; //坏点X坐标 + DWORD dwDeadPixelY; //坏点Y坐标 + BYTE byRes[12]; //保留 }NET_DVR_CORRECT_DEADPIXEL_PARAM, *LPNET_DVR_CORRECT_DEADPIXEL_PARAM; -#define MAX_REDAREA_NUM 6 //̵ +#define MAX_REDAREA_NUM 6 //最大红绿灯区域个数 typedef struct tagNET_DVR_CORRECT_PARAMS { - BYTE byYellowIntervalTime;//ƵƵļʱ䣬λ루s - BYTE byDigTrafficLight;//ǷǽֻͨƵƣ0-ǣ1- + BYTE byYellowIntervalTime;//黄灯的间隔时间,单位是秒(s) + BYTE byDigTrafficLight;//是否是交通数字黄灯,0-不是,1-是 BYTE byRes[2]; }NET_DVR_CORRECT_PARAMS,*LPNET_DVR_CORRECT_PARAMS; typedef struct tagNET_DVR_REDAREACFG { DWORD dwSize; - DWORD dwCorrectEnable; //ǷУܣ0-رգ1- - DWORD dwCorrectLevel; //У1(У)-10(У),ĬΪ5 - DWORD dwAreaNum; //У - NET_VCA_RECT struLaneRect[MAX_REDAREA_NUM]; //У - NET_DVR_CORRECT_PARAMS struCorrectParam[MAX_REDAREA_NUM/*6*/]; //УԺУӦ - BYTE byRes2[8]; // + DWORD dwCorrectEnable; //是否开启校正功能,0-关闭,1-开启 + DWORD dwCorrectLevel; //校正级别,1(校正度最低)-10(校正度最高),默认为5 + DWORD dwAreaNum; //校正区域个数 + NET_VCA_RECT struLaneRect[MAX_REDAREA_NUM]; //校正区域 + NET_DVR_CORRECT_PARAMS struCorrectParam[MAX_REDAREA_NUM/*6*/]; //校正区域属性和校正区域对应 + BYTE byRes2[8]; //保留 }NET_DVR_REDAREACFG, *LPNET_DVR_REDAREACFG; typedef struct tagNET_DVR_HISTORICDATACFG { DWORD dwSize; - DWORD dwTotalNum; //ʷݸ + DWORD dwTotalNum; //历史数据个数 BYTE byRes[16]; }NET_DVR_HISTORICDATACFG, *LPNET_DVR_HISTORICDATACFG; -#define INQUEST_MESSAGE_LEN 44 //ѶصϢ -#define INQUEST_MAX_ROOM_NUM 2 //ѶҸ -#define MAX_RESUME_SEGMENT 2 //֧ͬʱָƬĿ +#define INQUEST_MESSAGE_LEN 44 //审讯重点标记信息长度 +#define INQUEST_MAX_ROOM_NUM 2 //最大审讯室个数 +#define MAX_RESUME_SEGMENT 2 //支持同时恢复的片段数目 typedef struct tagNET_DVR_INQUEST_ROOM { - BYTE byRoomIndex; //Ѷұ - BYTE byFileType; //0-Ѷļ1-ͥϴļ - BYTE byMode; /* 0 ʹг; 0modeֵ 1-Ӱ 2-л1 3-л2 4-˫ 5-1 6-2 7-Ļ1 8-Ļ2 */ - BYTE byQuick; /* ǷΪã 1-ãòflash0-ãòFlash mode 0 Ч*/ - BYTE byRes[20]; // + BYTE byRoomIndex; //审讯室编号 + BYTE byFileType; //0-审讯文件,1-开庭上传文件 + BYTE byMode; /* 0 使用已有常规配置; 非0,按照mode值, 1-电影 2-画中画1 3-画中画2 4-双画面 5-三画面1 6-三画面2 7-四画面1 8-四画面2 */ + BYTE byQuick; /* 是否为快速配置, 1-快速配置(不配置参数到flash),0-常规配置(配置参数到Flash) , 仅在mode 非 0 有效*/ + BYTE byRes[20]; //保留 }NET_DVR_INQUEST_ROOM, *LPNET_DVR_INQUEST_ROOM; typedef struct tagNET_DVR_INQUEST_MESSAGE { - char sMessage[INQUEST_MESSAGE_LEN]; //صϢ - BYTE byRes[46]; // + char sMessage[INQUEST_MESSAGE_LEN]; //重点标记信息 + BYTE byRes[46]; //保留 }NET_DVR_INQUEST_MESSAGE, *LPNET_DVR_INQUEST_MESSAGE; typedef struct tagNET_DVR_INQUEST_SENSOR_DEVICE { - WORD wDeviceType; //ݲɼ豸ͺ:0- 1- 2-ز 3- 4- 5-ء6-ϡ7-ά˹ - WORD wDeviceAddr; //ݲɼ豸ַ - BYTE byRes[28]; // + WORD wDeviceType; //数据采集设备型号:0-无 1-米乐 2-镭彩 3-优力 4-佳盟 5-永控、6-垅上、7-维纳斯达 + WORD wDeviceAddr; //数据采集设备地址 + BYTE byRes[28]; //保留 }NET_DVR_INQUEST_SENSOR_DEVICE, *LPNET_DVR_INQUEST_SENSOR_DEVICE; typedef struct tagNET_DVR_INQUEST_SENSOR_INFO { NET_DVR_INQUEST_SENSOR_DEVICE struSensorDevice[INQUEST_MAX_ROOM_NUM]; - DWORD dwSupportPro; //֧Э,λʾ, °汾չֶ - //0x1: 0x2:ز 0x4: - BYTE byRes[120]; // + DWORD dwSupportPro; //支持协议类型,按位表示, 新版本走能力集,不再扩展此字段 + //0x1:米乐 0x2:镭彩 0x4:优力 + BYTE byRes[120]; //保留 }NET_DVR_INQUEST_SENSOR_INFO, *LPNET_DVR_INQUEST_SENSOR_INFO; typedef struct tagNET_DVR_INQUEST_ROOM_INFO { - char szCDName[NAME_LEN]; //ƣ˫̹һ + char szCDName[NAME_LEN]; //光盘名称,单室双刻光盘名称是一样的 union { - BYTE byBitRate; // byCalcTypeΪ0ʱЧ(0-321-482-643-804-965-128 - //6-1607-1928-2249-25610-32011-38412-448 - //13-51214-64015-76816-896ǰ16ֵ)17-102418-128019-1536 - //20-179221-204822-307223-409624-8192 - BYTE byInquestTime; // byCalcTypeΪ1ʱЧ0-1Сʱ, 1-2Сʱ,2-3Сʱ,3-4Сʱ, 4-6Сʱ,5-8Сʱ,6-10Сʱ,7-12Сʱ - //8-16Сʱ, 9-20Сʱ,10-22Сʱ,11-24Сʱ + BYTE byBitRate; // byCalcType为0时有效,(0-32、1-48、2-64、3-80、4-96、5-128、 + //6-160、7-192、8-224、9-256、10-320、11-384、12-448、 + //13-512、14-640、15-768、16-896前16个值保留)17-1024、18-1280、19-1536、 + //20-1792、21-2048、22-3072、23-4096、24-8192 + BYTE byInquestTime; // byCalcType为1时有效,0-1小时, 1-2小时,2-3小时,3-4小时, 4-6小时,5-8小时,6-10小时,7-12小时 + //8-16小时, 9-20小时,10-22小时,11-24小时 }uCalcMode; - BYTE byCalcType; //¼0- 1-ʱ - BYTE byAutoDelRecord; // ǷԶɾ¼0-ɾʱ¼ 1-ɾ - BYTE byAlarmThreshold; // ֵ - BYTE byInquestChannelResolution; //Ѷֱͨʣ0:720P,1:1080P,2:CIF,3:4CIF,4:WD1,5-VGA - BYTE byAutoOpenTray; //ǷԶ 0-1- - BYTE byCDPrintEnabled; //ָɺǷʹ̷ܹӡ 0- 1- + BYTE byCalcType; //刻录计算类型0-按码率 1-按时间 + BYTE byAutoDelRecord; // 是否自动删除录像,0-不删除,即结束时保存录像 1-删除 + BYTE byAlarmThreshold; // 声音报警阀值 + BYTE byInquestChannelResolution; //审讯通道分辨率,0:720P,1:1080P,2:CIF,3:4CIF,4:WD1,5-VGA + BYTE byAutoOpenTray; //是否自动弹仓 0-否,1-是 + BYTE byCDPrintEnabled; //恢复完成后,是否使能光盘封面打印功能 0-否 1-开启 BYTE byRes[9]; }NET_DVR_INQUEST_ROOM_INFO, *LPNET_DVR_INQUEST_ROOM_INFO; typedef struct tagNET_DVR_INQUEST_SYSTEM_INFO { - DWORD dwRecordMode; //¼ģʽ:1 ˫ģʽ 2 ֿģʽ 3 ˫˫ģʽ޸Ҫ豸 - DWORD dwWorkMode; //ģʽ:0 ׼ģʽ 1 ͨģʽ(Ŀǰֻб׼ģʽ) - DWORD dwResolutionMode; //豸ֱʣ0: 1:D1 2:720P 3:1080PѶôֶΣ - NET_DVR_INQUEST_SENSOR_INFO struSensorInfo; //ʪȴ + DWORD dwRecordMode; //刻录模式:1 单室双刻模式 2 单室轮刻模式 3 双室双刻模式(修改需要重启设备) + DWORD dwWorkMode; //工作模式:0 标准模式 1 通用模式(保留,目前只有标准模式) + DWORD dwResolutionMode; //设备分辨率,0:标清 1:D1 2:720P 3:1080P(高清审讯机不用此字段) + NET_DVR_INQUEST_SENSOR_INFO struSensorInfo; //温湿度传感器配置 NET_DVR_INQUEST_ROOM_INFO struInquestRoomInfo[INQUEST_MAX_ROOM_NUM]; - BYTE byEnableHashCheck; //ǷöԹHASHֵУ 0-壬1-ã2- - BYTE byEnableInitCD; //Ƿóʼ 0-壬1-ã2- - BYTE byCDProcessingMode; //1.ģʽ 2-ģʽ ģʽ¼ɵĹ̹鵵Ͱϣ¼ʧܵḶ́е۽ֱͨмijλõģʽ¼õĹ̴мijλọ́¼ʧܵĹ̷ŵͰ - BYTE byRes[21]; // + BYTE byEnableHashCheck; //是否启用对光盘数据HASH值校验 0-无意义,1-不启用,2-启用 + BYTE byEnableInitCD; //是否启用初始化光盘 0-无意义,1-不启用,2-启用 + BYTE byCDProcessingMode; //1.存盘模式 2-出盘模式 存盘模式:刻录完成的光盘归档到出盘桶上;刻录失败的光盘,机械臂将坏盘直接通过中间的出盘位置弹出。出盘模式:将刻录好的光盘从中间的出盘位置出盘,刻录失败的光盘放到出盘桶里 + BYTE byRes[21]; //保留 }NET_DVR_INQUEST_SYSTEM_INFO, *LPNET_DVR_INQUEST_SYSTEM_INFO; typedef struct _NET_DVR_INQUEST_ALARM_ { DWORD dwSize; - DWORD dwAlarmType; /* 0- 1-̴ 2-Ѷʱ*/ - BYTE byTrayNo; /**/ + DWORD dwAlarmType; /*报警类型 0-光盘满 1-光盘错误 2-审讯超时提醒*/ + BYTE byTrayNo; /*光驱号*/ BYTE byRes[3]; - DWORD dwInquestTime; /*Ѷʱ,dwAlarmType=2ʱЧ,λ:*/ - DWORD dwNotifyChannel; /*Ѷʱ䳬ʱͨ*/ + DWORD dwInquestTime; /*已审讯时间,当dwAlarmType=2时有效,单位:秒*/ + DWORD dwNotifyChannel; /*审讯时间超时提醒通道号*/ BYTE byRes1[244]; }NET_DVR_INQUEST_ALARM, *LPNET_DVR_INQUEST_ALARM; typedef struct _NET_DVR_VIDEO_PARKING_POLE_ALARM_ { - DWORD dwSize; //ṹС - NET_DVR_TIME_V30 struTime; //ʱ - BYTE byParkingNum[32]; //λ - BYTE byAlarmType; //ͣ0-δ֪1-ͷڵ2-ť3-Ƿռñ4-λ״̬仯 - BYTE byVehicleEnterState; //״̬0-δ֪1-룬2-뿪 + DWORD dwSize; //结构体大小 + NET_DVR_TIME_V30 struTime; //触发时间 + BYTE byParkingNum[32]; //车位编号 + BYTE byAlarmType; //报警类型,0-未知,1-镜头遮挡报警,2-按钮报警,3-非法占用报警,4-车位状态变化 + BYTE byVehicleEnterState; //车辆进入状态,0-未知,1-进入,2-离开 BYTE byRes[78]; }NET_DVR_VIDEO_PARKING_POLE_ALARM, *LPNET_DVR_VIDEO_PARKING_POLE_ALARM; typedef struct tagNET_DVR_INQUEST_RESUME_SEGMENT { - NET_DVR_TIME struStartTime; //¼ʼʱ - NET_DVR_TIME struStopTime; //¼ֹʱ - BYTE byRoomIndex; //Ѷұ,1ʼ - BYTE byDriveIndex; //¼,1ʼ - WORD wSegmetSize; //ƬϵĴС, λM - DWORD dwSegmentNo; //ƬڱѶе,1ʼ - BYTE byRes[24]; // + NET_DVR_TIME struStartTime; //事件起始时间 + NET_DVR_TIME struStopTime; //事件终止时间 + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + BYTE byRes[24]; //保留 }NET_DVR_INQUEST_RESUME_SEGMENT, *LPNET_DVR_INQUEST_RESUME_SEGMENT; typedef struct tagNET_DVR_INQUEST_RESUME_EVENT { - DWORD dwResumeNum; //ָ¼ + DWORD dwResumeNum; //需恢复的事件个数 NET_DVR_INQUEST_RESUME_SEGMENT struResumeSegment[MAX_RESUME_SEGMENT]; - BYTE byResumeMode; //ָģʽ0-ָ̻1-˫ָ̻ - BYTE byCDPrintEnbled; //ָɺǷʹ̷ܹӡ 0- 1- - BYTE byRes[198]; // + BYTE byResumeMode; //恢复模式,0-单光盘恢复,1-双光盘恢复 + BYTE byCDPrintEnbled; //恢复完成后,是否使能光盘封面打印功能 0-否 1-开启 + BYTE byRes[198]; //保留 }NET_DVR_INQUEST_RESUME_EVENT, *LPNET_DVR_INQUEST_RESUME_EVENT; typedef struct tagNET_DVR_INQUEST_DEVICE_VERSION { -BYTE byMainVersion; /*汾. - 0 : δ֪ - 1 : 8000ѶDVR - ΰ汾: 1 : 8000HD-S - 2 : 8100ѶDVR - ΰ汾: 1 : Ѷ81SNL - 2 : Ѷ81SH - 3 : Ѷ81SFH - 3 : 8608ѶNVR - ΰ汾: 1 : DS-8608SN-SP +BYTE byMainVersion; /*基线主版本. + 0 : 未知 + 1 : 8000审讯DVR + 次版本: 1 : 8000HD-S + 2 : 8100审讯DVR + 次版本: 1 : 审讯81SNL + 2 : 审讯81SH + 3 : 审讯81SFH + 3 : 8608高清审讯机NVR + 次版本: 1 : DS-8608SN-SP 2 : DS-8608SN-ST */ -BYTE bySubVersion; //ߴΰ汾 -BYTE byUpgradeVersion; //汾,δΪ0 -BYTE byCustomizeVersion; //ư汾,ǶΪ0 -BYTE byRes[60]; // +BYTE bySubVersion; //基线次版本 +BYTE byUpgradeVersion; //升级版本,未升级为0 +BYTE byCustomizeVersion; //定制版本,非定制为0 +BYTE byRes[60]; //保留 }NET_DVR_INQUEST_DEVICE_VERSION, *LPNET_DVR_INQUEST_DEVICE_VERSION; typedef struct tagNET_DVR_DISK_RAID_INFO { - DWORD dwSize; //ṹС - BYTE byEnable; //RaidǷ - BYTE bySleepStatus; //0-Ч 1-ߣ2- - BYTE byRes[34]; //ֽ + DWORD dwSize; //结构体大小 + BYTE byEnable; //磁盘Raid是否禁用 + BYTE bySleepStatus; //0-无效, 1-休眠,2-不休眠 + BYTE byRes[34]; //保留字节 }NET_DVR_DISK_RAID_INFO, *LPNET_DVR_DISK_RAID_INFO; typedef struct tagNET_DVR_SYNCHRONOUS_IPC { - DWORD dwSize; //ṹС - BYTE byEnable; //ǷãΪǰIPCͬ豸 - BYTE byRes[7]; // + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用:为前端IPC同步设备参数 + BYTE byRes[7]; //保留 }NET_DVR_SYNCHRONOUS_IPC, *LPNET_DVR_SYNCHRONOUS_IPC; typedef struct tagNET_DVR_IPC_PASSWD { - DWORD dwSize; //ṹС - char sOldPasswd[PASSWD_LEN]; //IPCľ룬DVRDVR֤ - char sNewPasswd[PASSWD_LEN]; //IPC + DWORD dwSize; //结构体大小 + char sOldPasswd[PASSWD_LEN]; //IPC的旧密码,传给DVR让DVR验证 + char sNewPasswd[PASSWD_LEN]; //IPC的新密码 BYTE byRes[32]; }NET_DVR_IPC_PASSWD, *LPNET_DVR_IPC_PASSWD; -//ͨȡDVR״̬λbps +//通过获取DVR的网络状态:单位bps typedef struct tagNET_DEVICE_NET_USING_INFO { - DWORD dwSize; //ṹС - DWORD dwPreview; //Ԥ - DWORD dwPlayback; //ط - DWORD dwIPCModule; //IPC - DWORD dwNetDiskRW; //̶д + DWORD dwSize; //结构体大小 + DWORD dwPreview; //预览 + DWORD dwPlayback; //回放 + DWORD dwIPCModule; //IPC接入 + DWORD dwNetDiskRW; //网盘读写 BYTE res[32]; }NET_DVR_DEVICE_NET_USING_INFO, *LPNET_DVR_DEVICE_NET_USING_INFO; -//ͨDVRǰIPCIPַ +//通过DVR设置前端IPC的IP地址 typedef struct tagNET_DVR_IPC_NETCFG { - DWORD dwSize; //ṹС - NET_DVR_IPADDR struIP; //IPCIPַ - WORD wPort; //IPCĶ˿ + DWORD dwSize; //结构体大小 + NET_DVR_IPADDR struIP; //IPC的IP地址 + WORD wPort; //IPC的端口 char res[126]; }NET_DVR_IPC_NETCFG, *LPNET_DVR_IPC_NETCFG; -//ʱ +//按时间锁定 typedef struct tagNET_DVR_TIME_LOCK { - DWORD dwSize; //ṹС + DWORD dwSize; //结构体大小 NET_DVR_TIME strBeginTime; NET_DVR_TIME strEndTime; - DWORD dwChannel; //ͨ, 0xffʾͨ - DWORD dwRecordType; //¼: 0xffffffffȫ0ʱ¼1-ƶ⣬23-ƶ⣬4-ƶ⣬5-6-ֶ¼7-¼(ͬļ) - DWORD dwLockDuration; //ʱ,λ,0xffffffffʾ - NET_DVR_TIME_EX strUnlockTimePoint; //ʱЧdwLockDurationΪʱʱ䵽ʱԶ + DWORD dwChannel; //通道号, 0xff表示所有通道 + DWORD dwRecordType; //录像类型: 0xffffffff-全部,0-定时录像,1-移动侦测,2-报警触发,3-报警触发或移动侦测,4-报警触发和移动侦测,5-命令触发,6-手动录像,7-智能录像(同文件查找) + DWORD dwLockDuration; //锁定持续时间,单位秒,0xffffffff表示永久锁定 + NET_DVR_TIME_EX strUnlockTimePoint; //加锁时有效,当dwLockDuration不为永久锁定时,锁定持续的时间到此时间点就自动解锁 BYTE byRes[4]; }NET_DVR_TIME_LOCK, *LPNET_DVR_TIME_LOCK; typedef struct tagNET_DVR_LOCK_RETURN { - DWORD dwSize; //ṹС + DWORD dwSize; //结构体大小 NET_DVR_TIME strBeginTime; NET_DVR_TIME strEndTime; - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ,0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cTimeDifferenceH; //UTCʱСʱ-12 ... +14+ʾ, byISO8601Ϊ1ʱЧ - char cTimeDifferenceM; //UTCʱӣ-30, 30, 45+ʾ, byISO8601Ϊ1ʱЧ + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效,0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区, byISO8601为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 30, 45,+表示东区, byISO8601为1时有效 BYTE byRes[17]; }NET_DVR_LOCK_RETURN, *LPNET_DVR_LOCK_RETURN; //67DVS -//֤ +//证书下载类型 typedef enum { UPGRADE_CERT_FILE = 0, UPLOAD_CERT_FILE = 1, TRIAL_CERT_FILE = 2, CONFIGURATION_FILE = 3, - UPLOAD_RECORD_FILE = 4 , //ϴ¼ļ - SCENE_CONFIGURATION_FILE = 5, //ļϴ - UPLOAD_PICTURE_FILE = 6, //ϴͼƬļ - UPLOAD_VIOLATION_FILE = 7, //ϴΥֵļ - UPLOAD_TG_FILE = 8, //ϴTGTiming GeneratorļT1ԣ - UPLOAD_DATA_TO_DB = 9, //ϴļͼ - UPLOAD_BACKGROUND_PIC = 10, //ϴͼƬ - UPLOAD_CALIBRATION_FILE = 11, //ϴ궨ļ - UPLOAD_TME_FILE = 12, //ϴڹļ + UPLOAD_RECORD_FILE = 4 , //上传录像文件 + SCENE_CONFIGURATION_FILE = 5, //场景配置文件上传 + UPLOAD_PICTURE_FILE = 6, //上传图片文件 + UPLOAD_VIOLATION_FILE = 7, //上传违法字典文件 + UPLOAD_TG_FILE = 8, //上传TG(Timing Generator)文件(用于T1测试) + UPLOAD_DATA_TO_DB = 9, //上传文件到视图库 + UPLOAD_BACKGROUND_PIC = 10, //上传背景图片 + UPLOAD_CALIBRATION_FILE = 11, //上传标定文件 + UPLOAD_TME_FILE = 12, //上传出入口管理文件 - //UPLOAD_TME_FILE = 12, //ϴڹļ + //UPLOAD_TME_FILE = 12, //上传出入口管理文件 UPLOAD_VEHICLE_BLOCKALLOWLIST_FILE = 13, - UPLOAD_PICTURE_TO_CLOUD = 15, //ϴͼƬƴ洢 - UPLOAD_VIDEO_FILE = 16, //ϴƵļ - UPLOAD_SCREEN_FILE = 17, //ϴĻļ - UPLOAD_PUBLISH_MATERIAL = 18, //ϴϢ̬زļ - UPLOAD_PUBLISH_UPGRADE_FILE = 19, //ϴϢļ - UPLOAD_RING_FILE = 20, //ϴļ - UPLOAD_ENCRYPT_CERT = 21, //ϴ֤ - UPLOAD_THERMOMETRIC_FILE = 22, //ϴ±궨ļ - UPLOAD_SUBBRAND_FILE = 23, //ϴƷļ - UPLOAD_LED_CHECK_FILE = 24, //ϴLEDУļ - BATCH_UPLOAD_PICTURE_FILE = 25, //ϴͼƬļ - UPLOAD_EDID_CFG_FILE = 26, //ϴEDIDļ - UPLOAD_PANORAMIC_STITCH = 27,//ϴȫԶƴļ - UPLOAD_BINOCULAR_COUNTING = 28,//ϴֱ - UPLOAD_AUDIO_FILE = 29, //ϴļ - UPLOAD_PUBLISH_THIRD_PARTY_FILE = 30, //ϴļ - UPLOAD_DEEPEYES_BINOCULAR = 31,//ϴTX1˫Ŀ - UPLOAD_CERTIFICATE_BLOCKLIST = 32, //ϴֹ֤ - UPLOAD_HD_CAMERA_CORRECT_TABLE = 33,//ϴ2400W - UPLOAD_FD_DATA = 35,//ݵ - UPLOAD_FACE_DATA = 36,//ͼƬݵ - UPLOAD_FACE_ANALYSIS_DATA = 37,//ͼƬݵ豸ʶͼƬĿ - UPLOAD_FILEVOLUME_DATA = 38,//ϴļļ(ĿǰֻCVRʵ) - IMPORT_DATA_TO_FACELIB = 39,//ݣͼƬ+ͼƬϢ 豸⣩ - UPLOAD_LEFTEYE_4K_CALIBFILE = 40,//ۡ4K궨ڲϴĿ¼ - UPLOAD_SECURITY_CFG_FILE = 41,//ļȫ - UPLOAD_RIGHT_CONTROLLER_AUDIO = 42, //ϴȨ޿Ƶļ - UPLOAD_MODBUS_CFG_FILE = 43, //ModbusЭļ - UPLOAD_NOTICE_VIDEO_DATA = 44, //Ƶ· - UPLOAD_RS485_PROTOCOL_DLL_FILE = 45, //RS485Э鶯̬ļ - UPLOAD_PIC_BY_BUF = 46,//ͼƬ浼ͼƬļ - UPLOAD_CLIENT_CALIBFILE = 47,//ͻ궨ļ(.ptoʽļ) - UPLOAD_HD_CAMERA_CORRECT_TABLE_3200W = 48,//3200W(.calʽļ) - UPLOAD_DOOR_CONTENT = 49, //ϴԪſϵϢ - UPLOAD_ASR_CONTROL_FILE = 50, //ʶļϴ - UPLOAD_APP_FILE = 51,//ϴHEOP APPļ - UPLOAD_AI_ALGORITHM_MODEL = 52, //AIƽ̨ϴ㷨ģ͵豸 - UPLOAD_PUBLISH_PROGRAM_THUMBNAIL = 53, //ϴϢĿͼ - UPLOAD_PUBLISH_TEMPLATE_THUMBNAIL = 54, //ϴϢģͼ - UPLOAD_AI_PICTURE = 55,//AIƽ̨ͼƬ·ͼƬΪƸʽ - UPLOAD_OFFLINE_CAPTURE_INFO = 56, //߲ɼûб - UPLOAD_FONT_TYPE_DLL_FILE = 57, //⵼ - UPLOAD_CLIENT_CALIBFILE_FILE = 58, //ͻ궨ļ(.ptoʽļ,ͨ) - UPLOAD_HD_CAMERA_CORRECT_TABLE_3200W_FILE = 59, //3200W(.calʽļ,ͨ) - IMPORT_DATA_TO_HBDLIB = 60, /*ݵ⣨ͼƬ+ͼƬϢ 豸⣩*/ - UPLOAD_SCENE_FILE = 61, //볡ļ - UPLOAD_RATIOSTITCHING_FILE = 62, // 뱶ƴļ - UPLOAD_LENS_PARAM_FILE = 63, // 뾵ͷļ - UPLOAD_CUSTOMAUDIO_FILE = 64, //ԶƵزļ - UPLOAD_VIDEOWALL_MATERIAL_FILE = 65 //ǽزļ + UPLOAD_PICTURE_TO_CLOUD = 15, //上传图片到云存储 + UPLOAD_VIDEO_FILE = 16, //上传视频文件 + UPLOAD_SCREEN_FILE = 17, //上传屏幕服务器文件 + UPLOAD_PUBLISH_MATERIAL = 18, //上传信息发布静态素材文件 + UPLOAD_PUBLISH_UPGRADE_FILE = 19, //上传信息发升级文件 + UPLOAD_RING_FILE = 20, //上传铃音文件 + UPLOAD_ENCRYPT_CERT = 21, //上传加密证书 + UPLOAD_THERMOMETRIC_FILE = 22, //上传测温标定文件 + UPLOAD_SUBBRAND_FILE = 23, //上传车辆子品牌文件 + UPLOAD_LED_CHECK_FILE = 24, //上传LED校正文件 + BATCH_UPLOAD_PICTURE_FILE = 25, //批量上传图片文件 + UPLOAD_EDID_CFG_FILE = 26, //上传EDID配置文件 + UPLOAD_PANORAMIC_STITCH = 27,//上传全景自动拼接配置文件 + UPLOAD_BINOCULAR_COUNTING = 28,//上传垂直客流矫正表 + UPLOAD_AUDIO_FILE = 29, //上传语音文件 + UPLOAD_PUBLISH_THIRD_PARTY_FILE = 30, //上传第三方文件 + UPLOAD_DEEPEYES_BINOCULAR = 31,//上传TX1双目矫正表 + UPLOAD_CERTIFICATE_BLOCKLIST = 32, //上传身份证禁止名单 + UPLOAD_HD_CAMERA_CORRECT_TABLE = 33,//上传2400W矫正表 + UPLOAD_FD_DATA = 35,//导入人脸数据到人脸库 + UPLOAD_FACE_DATA = 36,//导入人脸图片数据到人脸库 + UPLOAD_FACE_ANALYSIS_DATA = 37,//导入图片数据到设备识别图片目标 + UPLOAD_FILEVOLUME_DATA = 38,//上传文件卷数据文件(目前只有CVR中实现) + IMPORT_DATA_TO_FACELIB = 39,//导入人脸数据(人脸图片+图片附件信息 到设备人脸库) + UPLOAD_LEFTEYE_4K_CALIBFILE = 40,//左眼、4K相机标定内参数据上传(针对三目教育录播相机) + UPLOAD_SECURITY_CFG_FILE = 41,//配置文件安全导入 + UPLOAD_RIGHT_CONTROLLER_AUDIO = 42, //上传权限控制器音频文件 + UPLOAD_MODBUS_CFG_FILE = 43, //导入Modbus协议配置文件 + UPLOAD_NOTICE_VIDEO_DATA = 44, //公告视频下发 + UPLOAD_RS485_PROTOCOL_DLL_FILE = 45, //导入RS485协议动态库文件 + UPLOAD_PIC_BY_BUF = 46,//按图片缓存导入图片文件 + UPLOAD_CLIENT_CALIBFILE = 47,//客户标定文件导入(.pto格式文件) + UPLOAD_HD_CAMERA_CORRECT_TABLE_3200W = 48,//3200W矫正表(.cal格式文件) + UPLOAD_DOOR_CONTENT = 49, //上传单元门口联系人信息 + UPLOAD_ASR_CONTROL_FILE = 50, //语音识别控制文件上传 + UPLOAD_APP_FILE = 51,//上传HEOP APP文件 + UPLOAD_AI_ALGORITHM_MODEL = 52, //AI开放平台,主动上传算法模型到设备 + UPLOAD_PUBLISH_PROGRAM_THUMBNAIL = 53, //上传信息发布节目缩略图 + UPLOAD_PUBLISH_TEMPLATE_THUMBNAIL = 54, //上传信息发布模板缩略图 + UPLOAD_AI_PICTURE = 55,//AI开放平台,图片任务,下发图片为二进制格式 + UPLOAD_OFFLINE_CAPTURE_INFO = 56, //离线采集用户列表导入 + UPLOAD_FONT_TYPE_DLL_FILE = 57, //字体库导入 + UPLOAD_CLIENT_CALIBFILE_FILE = 58, //客户标定文件导入(.pto格式文件,带通道) + UPLOAD_HD_CAMERA_CORRECT_TABLE_3200W_FILE = 59, //3200W矫正表(.cal格式文件,带通道) + IMPORT_DATA_TO_HBDLIB = 60, /*导入人体数据到人体库(人体图片+图片附件信息 到设备人体库)*/ + UPLOAD_SCENE_FILE = 61, //导入场景文件 + UPLOAD_RATIOSTITCHING_FILE = 62, // 导入倍率拼接文件 + UPLOAD_LENS_PARAM_FILE = 63, // 导入镜头参数文件 + UPLOAD_CUSTOMAUDIO_FILE = 64, //导入自定义音频素材文件 + UPLOAD_VIDEOWALL_MATERIAL_FILE = 65 //导入电视墙窗口素材文件 }NET_SDK_UPLOAD_TYPE; typedef enum { - NET_SDK_DOWNLOAD_CERT = 0, //֤ - NET_SDK_DOWNLOAD_IPC_CFG_FILE = 1,//IPCļ - NET_SDK_DOWNLOAD_BASELINE_SCENE_PIC = 2, //ػ׼ͼƬ - NET_SDK_DOWNLOAD_VQD_ALARM_PIC = 3, //VQDͼƬ - NET_SDK_DOWNLOAD_CONFIGURATION_FILE = 4, //ļ - NET_SDK_DOWNLOAD_SCENE_CONFIGURATION_FILE = 5, //سļ - NET_SDK_DOWNLOAD_FILE_FORM_DB = 6, //ͼ - // NET_SDK_DOWNLOAD_TME_FILE = 7 //سڹļ + NET_SDK_DOWNLOAD_CERT = 0, //下载证书 + NET_SDK_DOWNLOAD_IPC_CFG_FILE = 1,//下载IPC配置文件 + NET_SDK_DOWNLOAD_BASELINE_SCENE_PIC = 2, //下载基准场景图片 + NET_SDK_DOWNLOAD_VQD_ALARM_PIC = 3, //下载VQD报警图片 + NET_SDK_DOWNLOAD_CONFIGURATION_FILE = 4, //下载配置文件 + NET_SDK_DOWNLOAD_SCENE_CONFIGURATION_FILE = 5, //下载场景配置文件 + NET_SDK_DOWNLOAD_FILE_FORM_DB = 6, //从视图库中下载 + // NET_SDK_DOWNLOAD_TME_FILE = 7 //下载出入口管理文件 - NET_SDK_DOWNLOAD_TME_FILE = 7, //سڹļ - NET_SDK_DOWNLOAD_VEHICLE_BLOCKALLOWLIST_FILE = 8, //ļ - NET_SDK_DOWNLOAD_GUID_FILE = 9, //GUIDļ - NET_SDK_DOWNLOAD_FILE_FORM_CLOUD = 10, //ƴ洢ͼƬ - NET_SDK_DOWNLOAD_PICTURE = 11, //ͼƬ - NET_SDK_DOWNLOAD_VIDEO = 12, //Ƶ - NET_DVR_DOWNLOAD_SCREEN_FILE = 13, //Ļļ - NET_SDK_DOWNLOAD_PUBLISH_MATERIAL = 14, //Ϣ̬زļ - NET_SDK_DOWNLOAD_THERMOMETRIC_FILE = 15,//ز±궨ļ - NET_SDK_DOWNLOAD_LED_CHECK_FILE = 16,//LEDУļ - NET_SDK_DOWNLOAD_VEHICLE_INFORMATION = 17,//Ϣ - NET_SDK_DOWNLOAD_CERTIFICATE_BLOCKLIST_TEMPLET = 18, //ֹ֤ģ - NET_SDK_DOWNLOAD_LOG_FILE = 19, //־ - NET_SDK_DOWNLOAD_FILEVOLUME_DATA = 20,//ļļĿǰֻCVR豸֧֣ - NET_SDK_DOWNLOAD_FD_DATA = 21,//ָ - NET_SDK_DOWNLOAD_SECURITY_CFG_FILE = 22,//ļȫ - NET_SDK_DOWNLOAD_PUBLISH_SCHEDULE = 23, //ճ̵ - NET_SDK_DOWNLOAD_RIGHT_CONTROLLER_AUDIO = 24, //Ȩ޿Ƶļ - NET_SDK_DOWNLOAD_MODBUS_CFG_FILE = 25, //ModbusЭļ - NET_SDK_DOWNLOAD_RS485_PROTOCOL_DLL_FILE = 26, //RS485Э鶯̬ļ - NET_SDK_DOWNLOAD_CLUSTER_MAINTENANCE_LOG = 27, //Ⱥά־ - NET_SDK_DOWNLOAD_SQL_ARCHIVE_FILE = 28, //鵵ݿ¼ - NET_SDK_DOWNLOAD_SUBWIND_STREAM = 29,//Ӵ - NET_SDK_DOWNLOAD_DEVTYPE_CALIBFILE = 30,//ͺű궨ļ(.calʽļ) - NET_SDK_DOWNLOAD_HD_CAMERA_CORRECT_TABLE = 31,// 2400W/3200W(.calʽļ) - NET_SDK_DOWNLOAD_CLIENT_CALIBFILE = 32,//ͻ궨ļ(.ptoʽļ) - NET_SDK_DOWNLOAD_FOUE_CAMERAS_PICTURES = 33,//ͨͼƬ(.tarʽļ) - NET_SDK_DOWNLOAD_DOOR_CONTENT = 34, //ſϵϢ - NET_SDK_DOWNLOAD_PUBLISH_MATERIAL_THUMBNAIL = 35, //Ϣ̬زͼ - NET_SDK_DOWNLOAD_PUBLISH_PROGRAM_THUMBNAIL = 36, //ϢĿͼ - NET_SDK_DOWNLOAD_PUBLISH_TEMPLATE_THUMBNAIL = 37, //Ϣģͼ - NET_SDK_DOWNLOAD_DARK_FIGHTER_X_CORRECT_TABLE_MAIN = 38,//ڹļ() - NET_SDK_DOWNLOAD_DARK_FIGHTER_X_CORRECT_TABLE_BACKUP = 39,//ڹļݷ - NET_SDK_DOWNLOAD_OFFLINE_CAPTURE_INFO_TEMPLATE = 40, //زɼûбģ - NET_SDK_DOWNLOAD_CAPTURE_DATA = 41, //߲ɼ - NET_SDK_DOWNLOAD_HD_CAMERA_CORRECT_TABLE_FILE = 42, // 2400W/3200W(.calʽļ, ͨ) - NET_SDK_DOWNLOAD_CLIENT_CALIBFILE_FILE = 43, //ͻ궨ļ(.ptoʽļ, ͨ) - NET_SDK_DOWNLOAD_FOUR_CAMERAS_PICTURES_FILE = 44, //ͨͼƬ(.tarʽļ, ͨ) - NET_SDK_DOWNLOAD_SCENE_FILE = 45, //ļ - NET_SDK_DOWNLOAD_OPEN_SOURCE_CERT = 46, //ԴϹ֤ - NET_SDK_DOWNLOAD_RATIOSTITCHING_FILE = 47, //ƴļ - NET_SDK_DOWNLOAD_LENS_PARAM_FILE = 48, // ͷļ - NET_SDK_DOWNLOAD_SELECT_DEVTYPE_CALIBFILE = 49, //ָͺű궨ļ(.calʽļ) - NET_SDK_DOWNLOAD_VIDEOWALL_MATERIAL_FILE = 50, //ǽزļ + NET_SDK_DOWNLOAD_TME_FILE = 7, //下载出入口管理文件 + NET_SDK_DOWNLOAD_VEHICLE_BLOCKALLOWLIST_FILE = 8, //下载名单配置文件 + NET_SDK_DOWNLOAD_GUID_FILE = 9, //下载GUID文件 + NET_SDK_DOWNLOAD_FILE_FORM_CLOUD = 10, //从云存储下载图片 + NET_SDK_DOWNLOAD_PICTURE = 11, //下载图片 + NET_SDK_DOWNLOAD_VIDEO = 12, //下载视频 + NET_DVR_DOWNLOAD_SCREEN_FILE = 13, //下载屏幕服务器文件 + NET_SDK_DOWNLOAD_PUBLISH_MATERIAL = 14, //下载信息发布静态素材文件 + NET_SDK_DOWNLOAD_THERMOMETRIC_FILE = 15,//下载测温标定文件 + NET_SDK_DOWNLOAD_LED_CHECK_FILE = 16,//下载LED校正文件 + NET_SDK_DOWNLOAD_VEHICLE_INFORMATION = 17,//车辆信息导出 + NET_SDK_DOWNLOAD_CERTIFICATE_BLOCKLIST_TEMPLET = 18, //下载身份证禁止名单模板 + NET_SDK_DOWNLOAD_LOG_FILE = 19, //日志导出 + NET_SDK_DOWNLOAD_FILEVOLUME_DATA = 20,//下载文件卷数据文件(目前只有CVR设备支持) + NET_SDK_DOWNLOAD_FD_DATA = 21,//导出指定人脸库的数据 + NET_SDK_DOWNLOAD_SECURITY_CFG_FILE = 22,//配置文件安全导出 + NET_SDK_DOWNLOAD_PUBLISH_SCHEDULE = 23, //日程导出 + NET_SDK_DOWNLOAD_RIGHT_CONTROLLER_AUDIO = 24, //下载权限控制器音频文件 + NET_SDK_DOWNLOAD_MODBUS_CFG_FILE = 25, //导出Modbus协议配置文件 + NET_SDK_DOWNLOAD_RS485_PROTOCOL_DLL_FILE = 26, //导出RS485协议动态库文件 + NET_SDK_DOWNLOAD_CLUSTER_MAINTENANCE_LOG = 27, //集群维护日志导出 + NET_SDK_DOWNLOAD_SQL_ARCHIVE_FILE = 28, //归档数据库记录导出 + NET_SDK_DOWNLOAD_SUBWIND_STREAM = 29,//导出子窗口码流 + NET_SDK_DOWNLOAD_DEVTYPE_CALIBFILE = 30,//型号标定文件导出(.cal格式文件) + NET_SDK_DOWNLOAD_HD_CAMERA_CORRECT_TABLE = 31,// 2400W/3200W矫正表导出(.cal格式文件) + NET_SDK_DOWNLOAD_CLIENT_CALIBFILE = 32,//客户标定文件导出(.pto格式文件) + NET_SDK_DOWNLOAD_FOUE_CAMERAS_PICTURES = 33,//四通道图片包导出(.tar格式文件) + NET_SDK_DOWNLOAD_DOOR_CONTENT = 34, //下载门口联系人信息 + NET_SDK_DOWNLOAD_PUBLISH_MATERIAL_THUMBNAIL = 35, //下载信息发布静态素材缩略图 + NET_SDK_DOWNLOAD_PUBLISH_PROGRAM_THUMBNAIL = 36, //下载信息发布节目缩略图 + NET_SDK_DOWNLOAD_PUBLISH_TEMPLATE_THUMBNAIL = 37, //下载信息发布模板缩略图 + NET_SDK_DOWNLOAD_DARK_FIGHTER_X_CORRECT_TABLE_MAIN = 38,//黑光矫正表文件(主分区) + NET_SDK_DOWNLOAD_DARK_FIGHTER_X_CORRECT_TABLE_BACKUP = 39,//黑光矫正表文件(备份分区) + NET_SDK_DOWNLOAD_OFFLINE_CAPTURE_INFO_TEMPLATE = 40, //下载采集用户列表模板 + NET_SDK_DOWNLOAD_CAPTURE_DATA = 41, //下载离线采集数据 + NET_SDK_DOWNLOAD_HD_CAMERA_CORRECT_TABLE_FILE = 42, // 2400W/3200W矫正表导出(.cal格式文件, 带通道) + NET_SDK_DOWNLOAD_CLIENT_CALIBFILE_FILE = 43, //客户标定文件导出(.pto格式文件, 带通道) + NET_SDK_DOWNLOAD_FOUR_CAMERAS_PICTURES_FILE = 44, //四通道图片包导出(.tar格式文件, 带通道) + NET_SDK_DOWNLOAD_SCENE_FILE = 45, //导出场景文件 + NET_SDK_DOWNLOAD_OPEN_SOURCE_CERT = 46, //导出开源合规证书 + NET_SDK_DOWNLOAD_RATIOSTITCHING_FILE = 47, //导出倍率拼接文件 + NET_SDK_DOWNLOAD_LENS_PARAM_FILE = 48, // 导出镜头参数文件 + NET_SDK_DOWNLOAD_SELECT_DEVTYPE_CALIBFILE = 49, //导出指定型号标定文件(.cal格式文件) + NET_SDK_DOWNLOAD_VIDEOWALL_MATERIAL_FILE = 50, //导出电视墙窗口素材文件 }NET_SDK_DOWNLOAD_TYPE; -//״̬ +//下载状态 typedef enum { - NET_SDK_DOWNLOAD_STATUS_SUCCESS = 1, //سɹ - NET_SDK_DOWNLOAD_STATUS_PROCESSING, // - NET_SDK_DOWNLOAD_STATUS_FAILED, //ʧ - NET_SDK_DOWNLOAD_STATUS_UNKOWN_ERROR, //δ֪ - NET_SDK_DOWNLOAD_STATUS_RESOURCE, //ڴ治 - NET_SDK_DOWNLOAD_STATUS_GUIDFILE_EXPORT_FAIL //GUIDļʧ + NET_SDK_DOWNLOAD_STATUS_SUCCESS = 1, //下载成功 + NET_SDK_DOWNLOAD_STATUS_PROCESSING, //正在下载 + NET_SDK_DOWNLOAD_STATUS_FAILED, //下载失败 + NET_SDK_DOWNLOAD_STATUS_UNKOWN_ERROR, //未知错误 + NET_SDK_DOWNLOAD_STATUS_RESOURCE, //内存不足 + NET_SDK_DOWNLOAD_STATUS_GUIDFILE_EXPORT_FAIL //GUID文件导出失败 }NET_SDK_DOWNLOAD_STATUS; -//ؿ +//下载控制命令类型 typedef enum tagNET_SDK_DOWNLOAD_CONTROL_TYPE_ENUM { ENUM_DOWNLOAD_CONTROL_ERR = -1, - ENUM_DOWNLOAD_CONTROL_QOS = 1 // + ENUM_DOWNLOAD_CONTROL_QOS = 1 //流控 }NET_SDK_DOWNLOAD_CONTROL_TYPE_ENUM; typedef struct tagNET_DVR_PANORAMIC_STITCH_UPLOAD { DWORD dwSize; - DWORD dwChannel;// ͨ + DWORD dwChannel;// 通道号 BYTE byRes[128]; }NET_DVR_PANORAMIC_STITCH_UPLOAD, *LPNET_DVR_PANORAMIC_STITCH_UPLOAD; typedef struct NET_DVR_FD_DATA_COND { DWORD dwSize; - char szFDID[NET_SDK_MAX_FDID_LEN/*256*/]; //ID - char szCheckCode[NET_SDK_CHECK_CODE_LEN/*128*/]; //У - BYTE byCover;//Ƿ񸲸ʽ 0-1- - char szLoginPassword[PASSWD_LEN/*16*/]; //¼ + char szFDID[NET_SDK_MAX_FDID_LEN/*256*/]; //人脸库ID + char szCheckCode[NET_SDK_CHECK_CODE_LEN/*128*/]; //校验码 + BYTE byCover;//是否覆盖式导入 0-否,1-是 + char szLoginPassword[PASSWD_LEN/*16*/]; //登录密码 BYTE byRes[111]; }NET_DVR_FD_DATA_COND, *LPNET_DVR_FD_DATA_COND; typedef struct NET_DVR_UPLOAD_FACE_DATA { DWORD dwSize; - char szFDID[NET_SDK_MAX_FDID_LEN/*256*/]; //ID - BYTE byFDLibType; //0-;1-ֹ2- + char szFDID[NET_SDK_MAX_FDID_LEN/*256*/]; //人脸库ID + BYTE byFDLibType; //人脸库类型0-保留;1-禁止名单;2-允许名单 BYTE byRes1[3]; - char szCustomInfo[NET_SDK_FDPIC_CUSTOM_INFO_LEN/*96*/]; //ͼƬԶϢ + char szCustomInfo[NET_SDK_FDPIC_CUSTOM_INFO_LEN/*96*/]; //人脸库图片自定义信息 BYTE byRes[512]; }NET_DVR_UPLOAD_FACE_DATA, *LPNET_DVR_UPLOAD_FACE_DATA; typedef struct NET_DVR_UPLOAD_FACE_DATA_OUT { - char szPicID[NET_SDK_MAX_PICID_LEN/*256*/]; //ͼƬID + char szPicID[NET_SDK_MAX_PICID_LEN/*256*/]; //图片ID BYTE byRes[128]; }NET_DVR_UPLOAD_FACE_DATA_OUT, *LPNET_DVR_UPLOAD_FACE_DATA_OUT; typedef struct NET_DVR_UPLOAD_FACE_ANALYSIS_DATA_OUT { DWORD dwSize; - DWORD dwPID;//ͼƬID - DWORD dwFaceAnalysisNum;//ʶ - NET_VCA_RECT struVcaRect[NET_DVR_MAX_FACE_ANALYSIS_NUM]; //ʶĿ꣬ + DWORD dwPID;//图片ID + DWORD dwFaceAnalysisNum;//识别出的人脸区域个数 + NET_VCA_RECT struVcaRect[NET_DVR_MAX_FACE_ANALYSIS_NUM]; //识别出来的人脸目标,紧凑排列 BYTE byRes[128]; }NET_DVR_UPLOAD_FACE_ANALYSIS_DATA_OUT, *LPNET_DVR_UPLOAD_FACE_ANALYSIS_DATA_OUT; typedef struct NET_DVR_SECURITY_CFG_FILE_COND { DWORD dwSize; - char szSecretKey[NET_SDK_SECRETKEY_LEN/*128*/];//УԿ + char szSecretKey[NET_SDK_SECRETKEY_LEN/*128*/];//校验密钥 BYTE byRes[128]; }NET_DVR_SECURITY_CFG_FILE_COND, *LPNET_DVR_SECURITY_CFG_FILE_COND; typedef struct tagNET_DVR_DOWNLOAD_CLUSTER_MAINTENANCE_LOG_PARAM_ { DWORD dwSize; - BYTE byType; //־ͣ0-ȫ1-2-Ĭ + BYTE byType; //日志类型,0-全部,1-精简,2-默认 BYTE byRes[255]; }NET_DVR_DOWNLOAD_CLUSTER_MAINTENANCE_LOG_PARAM, *LPNET_DVR_DOWNLOAD_CLUSTER_MAINTENANCE_LOG_PARAM; typedef struct tagNET_DVR_BONJOUR_CFG { - DWORD dwSize; // ṹС - BYTE byEnableBonjour; // Bonjourʹ 0 1ر + DWORD dwSize; // 结构体大小 + BYTE byEnableBonjour; // Bonjour使能 0 :开启 1:关闭 BYTE byRes1[3]; - BYTE byFriendlyName[MAX_DOMAIN_NAME]; // + BYTE byFriendlyName[MAX_DOMAIN_NAME]; // 服务名 BYTE byRes2[128]; }NET_DVR_BONJOUR_CFG, *LPNET_DVR_BONJOUR_CFG; typedef struct tagNET_DVR_SOCKS_CFG { - DWORD dwSize; // ṹС - BYTE byEnableSocks; // ʹ 0ر 1 - BYTE byVersion; // SOCKS汾 4SOCKS4 5SOCKS5 - WORD wProxyPort; // ˿ڣĬ1080 - BYTE byProxyaddr[MAX_DOMAIN_NAME]; // IPַ - BYTE byUserName[MAX_DOMAIN_NAME]; // û SOCKS - BYTE byPassword[NAME_LEN]; // SOCKS5 - BYTE byLocalAddr[MAX_LOCAL_ADDR_LEN]; //ʹsocksΣʽΪ"ip/netmask;ip/netmask;" + DWORD dwSize; // 结构体大小 + BYTE byEnableSocks; // 使能 0:关闭 1:开启 + BYTE byVersion; // SOCKS版本 4:SOCKS4 5:SOCKS5 + WORD wProxyPort; // 代理端口,默认1080 + BYTE byProxyaddr[MAX_DOMAIN_NAME]; // 代理IP地址,可以是域名 + BYTE byUserName[MAX_DOMAIN_NAME]; // 用户名 SOCKS才用 + BYTE byPassword[NAME_LEN]; // 密码SOCKS5才用 + BYTE byLocalAddr[MAX_LOCAL_ADDR_LEN]; //不使用socks代理的网段,格式为"ip/netmask;ip/netmask;…" BYTE byRes[128]; }NET_DVR_SOCKS_CFG, *LPNET_DVR_SOCKS_CFG; @@ -26851,11 +26851,11 @@ typedef struct tagNET_DVR_SOCKS_CFG typedef struct tagNET_DVR_QOS_CFG { DWORD dwSize; - BYTE byManageDscp; // ݵDSCPֵ [0-63] - BYTE byAlarmDscp; // ݵDSCPֵ [0-63] - BYTE byVideoDscp; // ƵݵDSCPֵ [0-63]byFlagΪ0ʱʾƵ - BYTE byAudioDscp; // ƵݵDSCPֵ [0-63]byFlagΪ1ʱЧ - BYTE byFlag; // 0Ƶһ1Ƶֿ + BYTE byManageDscp; // 管理数据的DSCP值 [0-63] + BYTE byAlarmDscp; // 报警数据的DSCP值 [0-63] + BYTE byVideoDscp; // 视频数据的DSCP值 [0-63],byFlag为0时,表示音视频 + BYTE byAudioDscp; // 音频数据的DSCP值 [0-63],byFlag为1时有效 + BYTE byFlag; // 0:音视频合一,1:音视频分开 BYTE byEnable; BYTE byRes[126]; }NET_DVR_QOS_CFG, *LPNET_DVR_QOS_CFG; @@ -26863,19 +26863,19 @@ typedef struct tagNET_DVR_QOS_CFG typedef struct tagNET_DVR_HTTPS_CFG { DWORD dwSize; - WORD wHttpsPort; // HTTPS˿ - BYTE byEnable; // ʹ 0ر 1 + WORD wHttpsPort; // HTTPS端口 + BYTE byEnable; // 使能 0:关闭 1:开启 BYTE byRes[125]; }NET_DVR_HTTPS_CFG, *LPNET_DVR_HTTPS_CFG; -//֤ +//证书相关 typedef struct tagNET_DVR_CERT_NAME { - BYTE byCountry[MAX_COUNTRY_NAME_LEN]; //Ҵ CN - BYTE byState[MAX_DOMAIN_NAME]; //޻ʡ - BYTE byLocality[MAX_DOMAIN_NAME]; // - BYTE byOrganization[MAX_DOMAIN_NAME]; //֯ - BYTE byUnit[MAX_DOMAIN_NAME]; //λ + BYTE byCountry[MAX_COUNTRY_NAME_LEN]; //国家代号 CN等 + BYTE byState[MAX_DOMAIN_NAME]; //洲或省 + BYTE byLocality[MAX_DOMAIN_NAME]; //地区 + BYTE byOrganization[MAX_DOMAIN_NAME]; //组织 + BYTE byUnit[MAX_DOMAIN_NAME]; //单位 BYTE byCommonName[MAX_DOMAIN_NAME]; BYTE byEmail[MAX_DOMAIN_NAME]; BYTE byRes[128]; @@ -26884,11 +26884,11 @@ typedef struct tagNET_DVR_CERT_NAME typedef struct tagNET_DVR_CERT_ADDITION_PARAM { DWORD dwSize; - char csCustomID[64]; //ûԶID + char csCustomID[64]; //用户自定义ID BYTE byRes1[2]; - BYTE byCertificateMode;//wCertTypeΪ1-CertificateʱЧ0-ǩ֤飬1-֤˽Կʽ - BYTE byPrivateKeyMode;// byCertificateModeΪ1-֤˽ԿʽʱЧ 0-key 1-PKCS#12 - BYTE byPassword[64]; //룬PrivateKeyModeΪ0ʱΪ˽Կ룬Ϊ1ʱΪPKCS#12 + BYTE byCertificateMode;//wCertType为1-Certificate时有效,0-自签名证书,1-证书和私钥方式 + BYTE byPrivateKeyMode;// byCertificateMode为1-证书和私钥方式时有效 0-独立key 1-PKCS#12 + BYTE byPassword[64]; //密码,当PrivateKeyMode为0时为私钥的密码,为1时为PKCS#12的密码 BYTE byRes[128]; }NET_DVR_CERT_ADDITION_PARAM, *LPNET_DVR_CERT_ADDITION_PARAM; @@ -26896,89 +26896,89 @@ typedef struct tagNET_DVR_CERT_ADDITION_PARAM typedef struct tagNET_DVR_CERT_PARAM { DWORD dwSize; - WORD wCertFunc; //֤࣬0-802.1x(ӦWIFI֤),1-HTTPS, 3-ieee802.1x(ӦLAN֤) - WORD wCertType; //֤ͣ0-CA1-Certificate,2-˽Կļ - BYTE byFileType; //֤ļͣ0-PEM,1-PFX - BYTE byRes1[2];//ֽ - BYTE byAddition;//Ƿʹøӽṹ壬0-ʹ;1-ʹ - NET_DVR_CERT_ADDITION_PARAM * pStruAdditionParam;//Ϣṹָ + WORD wCertFunc; //证书种类,0-802.1x(应用于WIFI接入证书),1-HTTPS, 3-ieee802.1x(应用于有线LAN接入认证) + WORD wCertType; //证书类型,0-CA,1-Certificate,2-私钥文件 + BYTE byFileType; //证书文件类型,0-PEM,1-PFX + BYTE byRes1[2];//保留字节 + BYTE byAddition;//是否使用附加结构体,0-不使用;1-使用 + NET_DVR_CERT_ADDITION_PARAM * pStruAdditionParam;//附加信息结构体指针 BYTE byRes[28]; }NET_DVR_CERT_PARAM, *LPNET_DVR_CERT_PARAM; -#define UPLOAD_CERTIFICATE 1 //ϴ֤ +#define UPLOAD_CERTIFICATE 1 //上传证书 typedef struct tagNET_DVR_CERT_INFO { DWORD dwSize; - NET_DVR_CERT_PARAM struCertParam; //֤ - DWORD dwValidDays; //ЧΪǩʱЧ - BYTE byPasswd[NAME_LEN]; //˽Կ - NET_DVR_CERT_NAME struCertName; // ֤ - NET_DVR_CERT_NAME struIssuerName; // ֤鷢ƣǩ֤ϢȡʱЧ - NET_DVR_TIME_EX struBeginTime; //֤鴴ʱ䣨ǩ֤ϢȡʱЧ - NET_DVR_TIME_EX struEndTime; //ֹ֤ʱ䣨ǩ֤ϢȡʱЧ - BYTE serialNumber[NAME_LEN]; //֤ʶ루ǩ֤ϢȡʱЧ + NET_DVR_CERT_PARAM struCertParam; //证书参数 + DWORD dwValidDays; //有效天数,类型为自签名时有效 + BYTE byPasswd[NAME_LEN]; //私钥密码 + NET_DVR_CERT_NAME struCertName; // 证书名称 + NET_DVR_CERT_NAME struIssuerName; // 证书发行者名称(自签名证书信息获取时有效) + NET_DVR_TIME_EX struBeginTime; //证书创建时间(自签名证书信息获取时有效) + NET_DVR_TIME_EX struEndTime; //证书截止时间(自签名证书信息获取时有效) + BYTE serialNumber[NAME_LEN]; //证书标识码(自签名证书信息获取时有效) BYTE byVersion; - BYTE byKeyAlgorithm; // 0-RSA 1-DSA - BYTE byKeyLen; //ܳ 0-512 1-1024 2-2048 - BYTE bySignatureAlgorithm; //ǩ㷨ͣǩ֤ϢȡʱЧ + BYTE byKeyAlgorithm; //加密类型 0-RSA 1-DSA + BYTE byKeyLen; //加密长度 0-512 1-1024、 2-2048 + BYTE bySignatureAlgorithm; //签名算法类型(自签名证书信息获取时有效) BYTE byRes[128]; }NET_DVR_CERT_INFO, *LPNET_DVR_CERT_INFO; //channel record status -//***ͨ¼״̬*****// +//***通道录像状态*****// typedef struct tagNET_DVR_CHANS_RECORD_STATUS { - BYTE byValid; //ǷЧ - /*(ֻ)¼:0: ¼1¼ 2- - 3- 4-Ƶ 5-δ 6-浵 7-ش - 8-û 9-δ֤,10-浵к¼ 11-¼شк¼ 12-token֤ʧ*/ + BYTE byValid; //是否有效 + /*(只读)录像类型:0: 不在录像;1:在录像 2-空闲 + 3-无连接 4-无输入视频 5-未加载 6-存档中 7-回传中 + 8-用户名或密码错 9-未验证,10-存档中和录像中 11-录像回传中和录像中 12-token认证失败*/ BYTE byRecord; - WORD wChannelNO; //ͨ - DWORD dwRelatedHD; // - BYTE byOffLineRecord; //¼ 0-ر 1- - BYTE byRes[7]; //ֽ + WORD wChannelNO; //通道号 + DWORD dwRelatedHD; //关联磁盘 + BYTE byOffLineRecord; //断网录像功能 0-关闭 1-开启 + BYTE byRes[7]; //保留字节 }NET_DVR_CHANS_RECORD_STATUS, *LPNET_DVR_CHANS_RECORD_STATUS; typedef struct tagNET_DVR_IP_ALARM_GROUP_NUM { DWORD dwSize; - DWORD dwIPAlarmInGroup; //IPͨ - DWORD dwIPAlarmInNum; //IPͨ - DWORD dwIPAlarmOutGroup; //IPͨ - DWORD dwIPAlarmOutNum; //IPͨ + DWORD dwIPAlarmInGroup; //IP通道报警输入组数 + DWORD dwIPAlarmInNum; //IP通道报警输入个数 + DWORD dwIPAlarmOutGroup; //IP通道报警输出组数 + DWORD dwIPAlarmOutNum; //IP通道报警输出个数 BYTE byRes[64]; }NET_DVR_IP_ALARM_GROUP_NUM, *LPNET_DVR_IP_ALARM_GROUP_NUM; //****NVR end***// typedef struct tagNET_DVR_CHAN_GROUP_RECORD_STATUS { - DWORD dwSize; //ṹС - NET_DVR_CHANS_RECORD_STATUS struChanStatus[MAX_CHANNUM_V30]; //һ64 + DWORD dwSize; //结构体大小 + NET_DVR_CHANS_RECORD_STATUS struChanStatus[MAX_CHANNUM_V30]; //一组64个 }NET_DVR_CHAN_GROUP_RECORD_STATUS, *LPNET_DVR_CHAN_GROUP_RECORD_STATUS; typedef struct tagNET_DVR_RECTCFG { - WORD wXCoordinate; /*ϽʼX*/ - WORD wYCoordinate; /*ϽY*/ - WORD wWidth; /*ο*/ - WORD wHeight; /*θ߶*/ + WORD wXCoordinate; /*矩形左上角起始点X坐标*/ + WORD wYCoordinate; /*矩形左上角Y坐标*/ + WORD wWidth; /*矩形宽度*/ + WORD wHeight; /*矩形高度*/ }NET_DVR_RECTCFG, *LPNET_DVR_RECTCFG; -/*Ϣ*/ +/*窗口信息*/ typedef struct tagNET_DVR_WINCFG { DWORD dwSize; BYTE byVaild; - BYTE byInputIdx; /*Դ*/ - BYTE byLayerIdx; /*ͼ㣬0Ϊײ*/ - BYTE byTransparency; //͸ȣ0100 - NET_DVR_RECTCFG struWin;//ĿĴ(ʾǽ) - WORD wScreenHeight;// - WORD wScreenWidth;// + BYTE byInputIdx; /*输入源索引*/ + BYTE byLayerIdx; /*图层,0为最底层*/ + BYTE byTransparency; //透明度,0~100 + NET_DVR_RECTCFG struWin;//目的窗口(相对显示墙) + WORD wScreenHeight;//大屏高 + WORD wScreenWidth;//大屏宽 BYTE byRes[20]; }NET_DVR_WINCFG, *LPNET_DVR_WINCFG; @@ -26994,60 +26994,60 @@ typedef struct tagNET_DVR_ALLWINCFG typedef struct tagNET_DVR_SCREENZOOM { DWORD dwSize; - DWORD dwScreenNum;// + DWORD dwScreenNum;//大屏号 NET_DVR_POINT_FRAME struPointFrame; - BYTE byLayer;//ͼ + BYTE byLayer;//图层号 BYTE byRes[11]; }NET_DVR_SCREENZOOM, *LPNET_DVR_SCREENZOOM; //2011-04-18 -/*Ϣ,99991ʼ */ +/*摄像机信息,最多9999个,从1开始 */ typedef struct tagNET_MATRIX_CAMERAINFO { - DWORD dwGlobalCamId; /* camȫֱ*/ - BYTE sCamName[NAME_LEN]; /*cam*/ - DWORD dwMatrixId; /*camӦı*/ - DWORD dwLocCamId; /*camӦڲ*/ - BYTE byValid; /*ǷЧ0-1-*/ - BYTE byPtzCtrl; /* Ƿɿأ0-1-*/ - BYTE byUseType; //*ʹͣ0-Ϊʹã1-BNC2-SP3,3-V6ˣ4-*/ - BYTE byUsedByTrunk;//ǰʹ״̬0-ûбʹã1-ʹ - BYTE byTrunkReq; /*ֱ,D1Ϊλ1 - 1D12- 2D1ΪʹʱָǸߵĴ*/ + DWORD dwGlobalCamId; /* cam的全局编号*/ + BYTE sCamName[NAME_LEN]; /*cam的名称*/ + DWORD dwMatrixId; /*cam对应矩阵的编号*/ + DWORD dwLocCamId; /*cam对应矩阵的内部编号*/ + BYTE byValid; /*是否有效,0-否,1-是*/ + BYTE byPtzCtrl; /* 是否可控,0-否,1-是*/ + BYTE byUseType; //*使用类型,0-不作为干线使用,1-BNC,2-SP3,3-V6光纤,4-其他光纤*/ + BYTE byUsedByTrunk;//当前使用状态,0-没有被使用,1-被干线使用 + BYTE byTrunkReq; /*摄像机分辨率,以D1为单位:1 - 1个D1,2- 2个D1,作为干线使用时,指的是干线的带宽*/ BYTE byRes1[3]; - NET_DVR_TIME struInstallTime;//װʱ - BYTE sPurpose[NAME_LEN];/*;*/ + NET_DVR_TIME struInstallTime;//安装时间 + BYTE sPurpose[NAME_LEN];/*用途描述*/ BYTE byRes2[20]; }NET_MATRIX_CAMERAINFO, *LPNET_MATRIX_CAMERAINFO; -/*ʾϢ2048*/ +/*显示器信息,最多2048个*/ typedef struct tagNET_MATRIX_MONITORINFO { - DWORD dwGloalMonId; /*mon ͳһ*/ + DWORD dwGloalMonId; /*mon 的统一编号*/ BYTE sMonName[NAME_LEN]; - DWORD dwMatrixId; /*monھı*/ - DWORD dwLocalMonId; /*monڲ*/ - BYTE byValid; /*ǷЧ0-1-*/ - BYTE byTrunkType; /*ʹͣ0-Ϊʹã1-BNC2-SP3,3-V6ˣ4-*/ - BYTE byUsedByTrunk;//ǰʹ״̬0-ûбʹã1-ʹ - BYTE byTrunkReq; /*ֱ, D1Ϊλ1- 1D12- 2D1ΪʹʱָǸߵĴ*/ - NET_DVR_TIME struInstallTime;//װʱ - BYTE sPurpose[NAME_LEN];/*;*/ + DWORD dwMatrixId; /*mon所在矩阵的编号*/ + DWORD dwLocalMonId; /*mon的内部编号*/ + BYTE byValid; /*是否有效,0-否,1-是*/ + BYTE byTrunkType; /*使用类型,0-不作为干线使用,1-BNC,2-SP3,3-V6光纤,4-其他光纤*/ + BYTE byUsedByTrunk;//当前使用状态,0-没有被使用,1-被干线使用 + BYTE byTrunkReq; /*分辨率, 以D1为单位:1- 1个D1,2- 2个D1,作为干线使用时,指的是干线的带宽*/ + NET_DVR_TIME struInstallTime;//安装时间 + BYTE sPurpose[NAME_LEN];/*用途描述*/ BYTE byRes[20]; }NET_MATRIX_MONITORINFO, *LPNET_MATRIX_MONITORINFO; typedef struct tagNET_MATRIX_DIGITALMATRIX { - NET_DVR_IPADDR struAddress; /*豸Ϊ豸ʱIPϢ*/ + NET_DVR_IPADDR struAddress; /*设备为数字设备时的IP信息*/ WORD wPort; - BYTE byNicNum; /*0 - eth0, 1 - eth1, ˫ͨż󶨵*/ + BYTE byNicNum; /*0 - eth0, 1 - eth1, 考虑双网口如何通信加入绑定的网口*/ BYTE byRes[69]; }NET_MATRIX_DIGITALMATRIX, *LPNET_MATRIX_DIGITALMATRIX; typedef struct tagNET_MATRIX_ANALOGMATRIX { - BYTE bySerPortNum; /*ӵĴں 0xff-ͨ*/ - BYTE byMatrixSerPortType;/* صĴģļ̿(Э)ӻͨſڣЭ飩 0 --- ЭͨѶ 1 --- ͨѶ*/ + BYTE bySerPortNum; /*连接的串口号 0xff-环通接入*/ + BYTE byMatrixSerPortType;/* 矩阵接入网关的串口与模拟矩阵的键盘口(键盘协议)连接还是与矩阵通信口(矩阵协议)连接 ,0 --- 矩阵协议通讯口 1 --- 键盘通讯口*/ BYTE byRes1[2]; - NET_DVR_SINGLE_RS232 struRS232; //232ڲ ͨʱ˲Ч + NET_DVR_SINGLE_RS232 struRS232; //232串口参数 环通接入时此参数无效 BYTE byRes2[200]; }NET_MATRIX_ANALOGMATRIX, *LPNET_MATRIX_ANALOGMATRIX; @@ -27056,23 +27056,23 @@ typedef union tagNET_MATRIX_UNION NET_MATRIX_DIGITALMATRIX struDigitalMatrix; NET_MATRIX_ANALOGMATRIX struAnalogMatrix; }NET_MATRIX_UNION, *LPNET_MATRIX_UNION; -/*Ϣ20*/ +/*矩阵配置信息,最多20个*/ typedef struct tagNET_MATRIX_MATRIXINFO { DWORD dwSize; - DWORD dwMatrixId; /**/ + DWORD dwMatrixId; /*矩阵编号*/ BYTE sDevName[NAME_LEN]; - BYTE byCtrlType; /*ָͨѶʽǴͨ, ͨ*/ - BYTE byProtocolType;/*ͨſЭ*/ - BYTE byRes1[6]; /*Ԥ*/ + BYTE byCtrlType; /*指通讯方式是串口通信, 还是网络通信*/ + BYTE byProtocolType;/*设置通信控制协议*/ + BYTE byRes1[6]; /*预留*/ NET_MATRIX_UNION struMatrixUnion; - DWORD dwMaxPortsIn; /**/ - DWORD dwMaxPortsOut;/**/ - BYTE sUserName[NAME_LEN]; /*¼û*/ - BYTE sPassword[PASSWD_LEN]; /*¼*/ - NET_DVR_TIME struInstallTime;//װʱ - BYTE sPurpose[NAME_LEN];/*;*/ - BYTE byRes2[20]; /*Ԥ*/ + DWORD dwMaxPortsIn; /*矩阵输入数*/ + DWORD dwMaxPortsOut;/*矩阵输出数*/ + BYTE sUserName[NAME_LEN]; /*登录用户名*/ + BYTE sPassword[PASSWD_LEN]; /*登录密码*/ + NET_DVR_TIME struInstallTime;//安装时间 + BYTE sPurpose[NAME_LEN];/*用途描述*/ + BYTE byRes2[20]; /*预留*/ }NET_MATRIX_MATRIXINFO, *LPNET_MATRIX_MATRIXINFO; @@ -27080,59 +27080,59 @@ typedef struct tagNET_DVR_MATRIXLIST { DWORD dwSize; BYTE byRes[12]; - DWORD dwMatrixNum;//豸صľ - BYTE *pBuffer;//Ϣ - DWORD dwBufLen;//ָ볤ȣ + DWORD dwMatrixNum;//设备返回的矩阵数量 + BYTE *pBuffer;//矩阵信息缓冲区 + DWORD dwBufLen;//所分配指针长度,输入参数 }NET_DVR_MATRIXLIST,*LPNET_DVR_MATRIXLIST; -/*Ϣ*/ +/*串口配置信息*/ typedef struct tagNET_MATRIX_UARTPARAM { DWORD dwSize; BYTE byPortName[NAME_LEN]; - WORD wUserId; /*ûţ豸ΪʱһûȨ޹*/ - BYTE byPortType; /*ͣ0-RS232/1-RS485/2-RS422*/ - BYTE byFuncType; /*ӵ豸0-У1-̣2-͸ͨ(485ڲó͸ͨ),3-ģ*/ - BYTE byProtocolType; /*ֵ֧Э, Ӽ豸ʱҪϢ,ȡ֧Эıż*/ + WORD wUserId; /*用户编号,当连接设备为键盘时,绑定一个用户,用于权限管理*/ + BYTE byPortType; /*串口类型,三种0-RS232/1-RS485/2-RS422*/ + BYTE byFuncType; /*串口连接的设备的类型0-空闲,1-键盘,2-用作透明通道(485串口不可配置成透明通道),3-模拟矩阵*/ + BYTE byProtocolType; /*串口支持的协议类型, 当连接键盘设备时需要该信息,获取键盘支持协议的编号及描述符*/ BYTE byBaudRate; BYTE byDataBits; - BYTE byStopBits; /*ֹͣλ*/ - BYTE byParity; /*У*/ - BYTE byFlowCtrl; /*أأ*/ - BYTE byRes[22]; /*Ԥ*/ + BYTE byStopBits; /*停止位*/ + BYTE byParity; /*校验*/ + BYTE byFlowCtrl; /*流控,软件流控,无流控*/ + BYTE byRes[22]; /*预留*/ }NET_MATRIX_UARTPARAM, *LPNET_MATRIX_UARTPARAM; -//256û1256 +//最多256个用户,1~256 typedef struct tagNET_MATRIX_USERPARAM { DWORD dwSize; BYTE sUserName[NAME_LEN]; BYTE sPassword[PASSWD_LEN/*16*/]; - BYTE byRole;/*ûɫ:0-Ա,1-ԱֻһϵͳԱ255Ա*/ - BYTE byLevel; /*ͳһڲ,1- 255*/ + BYTE byRole;/*用户角色:0-管理员,1-操作员;只有一个系统管理员,255个操作员*/ + BYTE byLevel; /*统一级别,用于操作级别管理,1- 255*/ BYTE byRes[18]; }NET_MATRIX_USERPARAM, *LPNET_MATRIX_USERPARAM; -//255Դ +//最多255个资源组 typedef struct tagNET_MATRIX_RESOURSEGROUPPARAM { DWORD dwSize; BYTE byGroupName[NAME_LEN]; - BYTE byGroupType;/*0-CAM飬1-ʾMON*/ + BYTE byGroupType;/*0-摄像机CAM组,1-显示器MON组*/ BYTE byRes1; WORD wMemNum; DWORD dwGlobalId[512]; BYTE byRes2[20]; }NET_MATRIX_RESOURCEGROUPPARAM,*LPNET_MATRIX_RESOURSEGROUPPARAM; -//255û +//最多255个用户组 typedef struct tagNET_MATRIX_USERGROUPPARAM { DWORD dwSize; BYTE sGroupName[NAME_LEN]; - WORD wUserMember[255]; /*ûԱ*/ - WORD wResorceGroupMember[255]; /*ԴԱ*/ - BYTE byPermission[32];//Ȩޣ0-ptzȨޡлȨޡѯȨ + WORD wUserMember[255]; /*包含的用户成员*/ + WORD wResorceGroupMember[255]; /*包含的资源组成员*/ + BYTE byPermission[32];//权限,数组0-ptz权限、切换权限、查询权限 BYTE byRes[20]; } NET_MATRIX_USERGROUPPARAM, *LPNET_MATRIX_USERGROUPPARAM; @@ -27143,11 +27143,11 @@ typedef struct tagNET_MATRIX_TRUNKPARAM BYTE sTrunkName[NAME_LEN]; DWORD dwSrcMonId; DWORD dwDstCamId; - BYTE byTrunkType; /*ʹ 1-BNC2-SP3˸壬3-SP3D1 4-V6ˣ5-*/ - BYTE byAbility; /*ʾ˵ĴԴ伸·*/ - BYTE bySubChan; /*Թ˸߶ԣʾͨ*/ - BYTE byLevel; /* ߼ 1-255*/ - WORD wReserveUserID; //ԤûID 1~256 0ʾͷԤ + BYTE byTrunkType; /*使用类型 1-BNC,2-SP3光纤高清,3-SP3光纤D1, 4-V6光纤,5-其他光纤*/ + BYTE byAbility; /*表示光纤的带宽,可以传输几路*/ + BYTE bySubChan; /*针对光纤干线而言,表示子通道号*/ + BYTE byLevel; /* 干线级别 1-255*/ + WORD wReserveUserID; //预留的用户ID: 1~256 ,0表示释放预留 BYTE byRes[18]; } NET_MATRIX_TRUNKPARAM, *LPNET_MATRIX_TRUNKPARAM; @@ -27155,231 +27155,231 @@ typedef struct tagNET_DVR_MATRIX_TRUNKLIST { DWORD dwSize; BYTE byRes[12]; - DWORD dwTrunkNum;//豸صĸ - BYTE *pBuffer;//Ϣ - DWORD dwBufLen;//ָ볤ȣ + DWORD dwTrunkNum;//设备返回的干线数量 + BYTE *pBuffer;//干线信息缓冲区 + DWORD dwBufLen;//所分配指针长度,输入参数 }NET_DVR_MATRIX_TRUNKLIST,*LPNET_DVR_MATRIX_TRUNKLIST; -#define MATRIX_PROTOCOL_NUM 20 //ֵ֧Э -#define KEYBOARD_PROTOCOL_NUM 20 //ֵ֧Э +#define MATRIX_PROTOCOL_NUM 20 //支持的最大矩阵协议数 +#define KEYBOARD_PROTOCOL_NUM 20 //支持的最大键盘协议数 typedef struct tagNET_DVR_PROTO_TYPE_EX { - WORD wType; /*ipcЭֵ*/ - WORD wCommunitionType; /*0ģ 1 2ģ⡢*/ - BYTE byDescribe[DESC_LEN]; /*Эֶ*/ + WORD wType; /*ipc协议值*/ + WORD wCommunitionType; /*0:模拟 1:数字 2:兼容模拟、数字*/ + BYTE byDescribe[DESC_LEN]; /*协议描述字段*/ }NET_DVR_PROTO_TYPE_EX, LPNET_DVR_PROTO_TYPE_EX; typedef struct tagNET_DVR_MATRIXMANAGE_ABIILITY { DWORD dwSize; - DWORD dwMaxCameraNum;//Camera - DWORD dwMaxMonitorNum;//ʾ - WORD wMaxMatrixNum;// - WORD wMaxSerialNum;// - WORD wMaxUser;//û - WORD wMaxResourceArrayNum;//Դ - WORD wMaxUserArrayNum;//û - WORD wMaxTrunkNum;// - BYTE nStartUserNum;//ʼû - BYTE nStartUserGroupNum;//ʼû - BYTE nStartResourceGroupNum;//ʼԴ - BYTE nStartSerialNum;//ʼں - DWORD dwMatrixProtoNum; /*ЧľЭĿ0ʼ*/ - NET_DVR_PROTO_TYPE_EX struMatrixProto[MATRIX_PROTOCOL_NUM];/*Эб*/ - DWORD dwKeyBoardProtoNum; /*ЧļЭĿ0ʼ*/ - NET_DVR_PROTO_TYPE_EX struKeyBoardProto[KEYBOARD_PROTOCOL_NUM];/*Эб*/ - BYTE byDelMonitorLongCfg; //Ƿ֧ɾmonitor - BYTE byDelCamonitorLongCfg;//Ƿ֧ɾcamera - BYTE byAudioSwitchContorl;//Ƿ֧Ƶؿ + DWORD dwMaxCameraNum;//最大Camera数量 + DWORD dwMaxMonitorNum;//最大显示器数量 + WORD wMaxMatrixNum;//最大矩阵数量 + WORD wMaxSerialNum;//串口数量 + WORD wMaxUser;//最大用户数 + WORD wMaxResourceArrayNum;//最大资源组数 + WORD wMaxUserArrayNum;//最大用户组数 + WORD wMaxTrunkNum;//最大干线数 + BYTE nStartUserNum;//起始用户号 + BYTE nStartUserGroupNum;//起始用户组号 + BYTE nStartResourceGroupNum;//起始资源组号 + BYTE nStartSerialNum;//起始串口号 + DWORD dwMatrixProtoNum; /*有效的矩阵协议数目,从0开始*/ + NET_DVR_PROTO_TYPE_EX struMatrixProto[MATRIX_PROTOCOL_NUM];/*最大协议列表长度*/ + DWORD dwKeyBoardProtoNum; /*有效的键盘协议数目,从0开始*/ + NET_DVR_PROTO_TYPE_EX struKeyBoardProto[KEYBOARD_PROTOCOL_NUM];/*最大协议列表长度*/ + BYTE byDelMonitorLongCfg; //是否支持删除monitor长连接配置 + BYTE byDelCamonitorLongCfg;//是否支持删除camera长连接配置 + BYTE byAudioSwitchContorl;//是否支持音频开关控制 BYTE byRes[29]; } NET_DVR_MATRIXMANAGE_ABILITY, *LPNET_DVR_MATRIXMANAGE_ABILITY; -//ĿץĹ() +//目标抓拍规则(单条) typedef struct tagNET_VCA_SINGLE_FACESNAPCFG { - BYTE byActive; //Ƿ񼤻0-1- - /********* IPC5.1.7 Begin 2014-03-21***********/ - //ԶROIʹ - BYTE byAutoROIEnable;//0-ر,1- - BYTE byRes[2]; // - /********* IPC5.1.7 End 2014-03-21***********/ - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_VCA_POLYGON struVcaPolygon; //Ŀʶ + BYTE byActive; //是否激活规则:0-否,1-是 + /********* IPC5.1.7 新增参数 Begin 2014-03-21***********/ + //人脸自动ROI开关使能 + BYTE byAutoROIEnable;//0-关闭,1-开启 + BYTE byRes[2]; //保留 + /********* IPC5.1.7 新增参数 End 2014-03-21***********/ + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_VCA_POLYGON struVcaPolygon; //目标识别区域 }NET_VCA_SINGLE_FACESNAPCFG, *LPNET_VCA_SINGLE_FACESNAPCFG; -//ĿץĹ +//目标抓拍规则参数 typedef struct tagNET_VCA_FACESNAPCFG { DWORD dwSize; - BYTE bySnapTime; //ĿץĴ0-10 - BYTE bySnapInterval; //ץļλ֡ - BYTE bySnapThreshold; //ץֵ0-100 - BYTE byGenerateRate; //Ŀٶ,Χ[1, 5] - BYTE bySensitive; //ĿȣΧ[1, 5] - BYTE byReferenceBright; //2012-3-27ο[0,100] - BYTE byMatchType; //2012-5-3ȶԱģʽ0-Ŀʧ󱨾1-ʵʱ - BYTE byMatchThreshold; //2012-5-3ʵʱȶֵ0~100 - NET_DVR_JPEGPARA struPictureParam; //ͼƬṹ - NET_VCA_SINGLE_FACESNAPCFG struRule[MAX_RULE_NUM]; //ĿץĹ - //ع̳ʱ䣨ֽڣ - WORD wFaceExposureMinDuration;//Χ(1~3600룬Ĭ60)ЧԶģʽ - //عģʽ - BYTE byFaceExposureMode;//1-رգ2-0-Զжϣ - BYTE byBackgroundPic;//ͼϴʹ 0-Ĭֵ1-ֹ - DWORD dwValidFaceTime; //Ч̳ʱ䣬λ - DWORD dwUploadInterval; //Ŀץͳϴʱ䣬λ룬Ĭ900 - DWORD dwFaceFilteringTime;//ͣʱ,Ĭ5룬Χ0-100롣0ʾ - BYTE bySceneID; //,Ŀǰ֧1~40ΪЧ - BYTE byInvalCapFilterEnable;//ЧץĹʹܣ0Ϊرգ1ΪĬΪ0 - BYTE byInvalCapFilterThreshold;//ЧץĹֵ0~100byInvalCapFilterEnableΪ1ʱЧ + BYTE bySnapTime; //单个目标人脸的抓拍次数0-10 + BYTE bySnapInterval; //抓拍间隔,单位:帧 + BYTE bySnapThreshold; //抓拍阈值,0-100 + BYTE byGenerateRate; //目标生成速度,范围[1, 5] + BYTE bySensitive; //目标检测灵敏度,范围[1, 5] + BYTE byReferenceBright; //2012-3-27参考亮度[0,100] + BYTE byMatchType; //2012-5-3比对报警模式,0-目标消失后报警,1-实时报警 + BYTE byMatchThreshold; //2012-5-3实时比对阈值,0~100 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_SINGLE_FACESNAPCFG struRule[MAX_RULE_NUM]; //目标抓拍规则 + //人脸曝光最短持续时间(两个字节) + WORD wFaceExposureMinDuration;//范围(1~3600秒,默认60)生效于自动模式下 + //人脸曝光模式 + BYTE byFaceExposureMode;//1-关闭,2-开启,0-自动(根据人脸判断) + BYTE byBackgroundPic;//背景图上传使能 0-默认值(开启),1-禁止 + DWORD dwValidFaceTime; //有效人脸最短持续时间,单位:秒 + DWORD dwUploadInterval; //目标抓拍统计数据上传间隔时间,单位:秒,默认900秒 + DWORD dwFaceFilteringTime;//人脸停留时间过滤,默认5秒,范围0-100秒。0秒表示不过滤 + BYTE bySceneID; //场景号,目前支持1~4场景,0为无效 + BYTE byInvalCapFilterEnable;//无效抓拍过滤使能,0为关闭,1为开启,默认为0 + BYTE byInvalCapFilterThreshold;//无效抓拍过滤阈值,0~100,当byInvalCapFilterEnable为1时生效 BYTE byRes2[81]; }NET_VCA_FACESNAPCFG, *LPNET_VCA_FACESNAPCFG; typedef struct tagNET_DVR_FIRMWARE_VERSION_IFNO { - DWORD dwSize;//ṹС - char szFirmwareVersion[LEN_PROPERTY/*128*/]; //ذ汾 ֻ + DWORD dwSize;//结构体大小 + char szFirmwareVersion[LEN_PROPERTY/*128*/]; //主控版本属性 只读 BYTE byRes2[128]; }NET_DVR_FIRMWARE_VERSION_IFNO, *LPNET_DVR_FIRMWARE_VERSION_IFNO; -// +//人脸表情 typedef enum tagFACE_EXPRESSION_GROUP_ENUM { - ENUM_EXPRESSION_GROUP_SURPRISED = 1, // - ENUM_EXPRESSION_GROUP_PANIC = 2, // - ENUM_EXPRESSION_GROUP_DISGUUSTED = 3, // - ENUM_EXPRESSION_GROUP_HAPPY = 4, // - ENUM_EXPRESSION_GROUP_SAD = 5, //ѹ - ENUM_EXPRESSION_GROUP_ANGRY = 6, //ŭ - ENUM_EXPRESSION_GROUP_POKER = 7, // - ENUM_EXPRESSION_GROUP_ALL = 0xfe, //ȫ - ENUM_EXPRESSION_GROUP_UNKNOW = 0xff //δ֪,㷨֧δ + ENUM_EXPRESSION_GROUP_SURPRISED = 1, //惊讶 + ENUM_EXPRESSION_GROUP_PANIC = 2, //害怕 + ENUM_EXPRESSION_GROUP_DISGUUSTED = 3, //厌恶 + ENUM_EXPRESSION_GROUP_HAPPY = 4, //高兴 + ENUM_EXPRESSION_GROUP_SAD = 5, //难过 + ENUM_EXPRESSION_GROUP_ANGRY = 6, //愤怒 + ENUM_EXPRESSION_GROUP_POKER = 7, //中性 + ENUM_EXPRESSION_GROUP_ALL = 0xfe, //全部 + ENUM_EXPRESSION_GROUP_UNKNOW = 0xff //未知,算法支持未检出 }FACE_EXPRESSION_GROUP_ENUM; typedef struct tagNET_DVR_LLI_PARAM { - float fSec;//[0.000000,60.000000] - BYTE byDegree;//:γ[0,90] [0,180] - BYTE byMinute;//[0,59] + float fSec;//秒[0.000000,60.000000] + BYTE byDegree;//度:纬度[0,90] 经度[0,180] + BYTE byMinute;//分[0,59] BYTE byRes[6]; }NET_DVR_LLI_PARAM, *LPNET_DVR_LLI_PARAM; typedef struct tagNET_DVR_LLPOS_PARAM { - BYTE byLatitudeType;//γͣ0-γ1-γ - BYTE byLongitudeType;//ͣ0-1- + BYTE byLatitudeType;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType;//经度类型,0-东经,1-西经 BYTE byRes1[2]; - NET_DVR_LLI_PARAM struLatitude; /*γ*/ - NET_DVR_LLI_PARAM struLongitude; /**/ + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ BYTE byRes[16]; }NET_DVR_LLPOS_PARAM, *LPNET_DVR_LLPOS_PARAM; -//ĿץĸϢṹ +//目标抓拍附加信息结构体 typedef struct tagNET_VCA_FACESNAP_ADDINFO { - //ο,ΪСͼ(ͷ) + //人脸矩形框,该坐标为人脸小图(头肩照)中人脸的坐标 NET_VCA_RECT struFacePicRect; - int iSwingAngle;//ת, -90~90 - int iTiltAngle;//, -90~90 - DWORD dwPupilDistance;//ͫ,ΧΪСֵΪ10,ֵΪǰֱʿ/1.6 - BYTE byBlockingState;//Ŀڵ״̬ 0-ʾδ֪㷨֧֣,1~ڵ,2~˲ʱڵ3~ڵ4~ڵ - BYTE byFaceSnapThermometryEnabled;//ĿץIJʹ 1- 0-ر - BYTE byIsAbnomalTemperature;//ĿץIJǷ¶쳣 1- 0- - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) - NET_DVR_TIME_EX struEnterTime; // ץ½ʱ - NET_DVR_TIME_EX struExitTime; // ץ뿪ʱ - float fFaceTemperature; // ¶ȣ - 20.0~150.0棬ȷС1λ0xffff65535ʾЧ¶ֵʱأ - float fAlarmTemperature;// ±ֵȷС1λ - DWORD dwThermalPicLen;//ȳͼƬ - BYTE *pThermalPicBuff;// ȳͼƬָ - BYTE szCustomChanID[65];// Զ岼ͨ string max.len = 64 - BYTE byRes1[3];// ֽ - NET_DVR_LLPOS_PARAM struLLPos;//豸γλϢ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pEventNotificationAlertBuff; //BuffӦEventNotificationAlert JSON Block("eventType": "faceCapture") + int iSwingAngle;//旋转角, -90~90度 + int iTiltAngle;//俯仰角, -90~90度 + DWORD dwPupilDistance;//瞳距,范围为:最小值为10像素,最大值为当前分辨率宽度/1.6 + BYTE byBlockingState;//目标遮挡状态, 0-表示“未知”(算法不支持),1~无遮挡,2~瞬时轻度遮挡,3~持续轻度遮挡,4~严重遮挡 + BYTE byFaceSnapThermometryEnabled;//目标抓拍测温使能 1-开启 0-关闭 + BYTE byIsAbnomalTemperature;//目标抓拍测温是否温度异常 1-是 0-否 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + NET_DVR_TIME_EX struEnterTime; // 最佳抓拍下进入时间 + NET_DVR_TIME_EX struExitTime; // 最佳抓拍下离开时间 + float fFaceTemperature; // 人脸温度( - 20.0℃~150.0℃,精确到小数点后1位。其中0xffff(65535)表示无效,开启隐藏温度值功能时返回) + float fAlarmTemperature;// 测温报警警阈值(精确到小数点后1位) + DWORD dwThermalPicLen;//热成像图片长度 + BYTE *pThermalPicBuff;// 热成像图片指针 + BYTE szCustomChanID[65];// 自定义布防点通道号 string max.len = 64 + BYTE byRes1[3];// 保留字节 + NET_DVR_LLPOS_PARAM struLLPos;//设备经纬度位置信息 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pEventNotificationAlertBuff; //其Buff对应EventNotificationAlert JSON Block("eventType": "faceCapture") #else - char* pEventNotificationAlertBuff; //BuffӦEventNotificationAlert JSON Block("eventType": "faceCapture") + char* pEventNotificationAlertBuff; //其Buff对应EventNotificationAlert JSON Block("eventType": "faceCapture") BYTE byRes2[4]; #endif - DWORD dwEventNotificationAlertLen;//ȶӦEventNotificationAlert JSON Block("eventType": "faceCapture")ݳ - BYTE byRes[340];// ֽ + DWORD dwEventNotificationAlertLen;//长度对应EventNotificationAlert JSON Block("eventType": "faceCapture")数据长度 + BYTE byRes[340];// 保留字节 }NET_VCA_FACESNAP_ADDINFO, *LPNET_VCA_FACESNAP_ADDINFO; -//ĿץĽ +//目标抓拍结果 typedef struct tagNET_VCA_FACESNAP_RESULT { - DWORD dwSize; // ṹС - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - DWORD dwFacePicID; //ͼID - DWORD dwFaceScore; //,0-100. 0xffʾδ֪ - NET_VCA_TARGET_INFO struTargetInfo;//ĿϢ - NET_VCA_RECT struRect; //ͼ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - DWORD dwFacePicLen; //ͼijȣΪ0ʾûͼƬ0ʾͼƬ - DWORD dwBackgroundPicLen; //ͼijȣΪ0ʾûͼƬ0ʾͼƬ() - BYTE bySmart; //IDS豸0(Ĭֵ)Smart Functiom Return 1 - BYTE byAlarmEndMark;//0-1-ǣֶνIDֶʹãʾIDӦ±ҪṩNVRʹãжϱȡʶͼƬУߵͼƬ - BYTE byRepeatTimes; //ظ0- - BYTE byUploadEventDataType;//ͼƬݳʽ0-ݣ1-URL - NET_VCA_HUMAN_FEATURE struFeature; // - float fStayDuration; //ͣʱ(λ: ) - char sStorageIP[16]; //洢IPַ - WORD wStoragePort; //洢˿ں - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - /*ͼͼƬȼ0-͵,1-е,2-ߵ, - Ŀץֻԭе - ԭеĿץʵ֣ĿȷһĿץлȡõͼЧһͼ֣ĿץֻѾץɵͼƬʹͼ㷨ͼۣҪϢзͳһı׼ͼƬЧ*/ + DWORD dwSize; // 结构大小 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + DWORD dwFacePicID; //人脸图ID + DWORD dwFaceScore; //人脸评分,0-100. 0xff表示未知 + NET_VCA_TARGET_INFO struTargetInfo;//报警目标信息 + NET_VCA_RECT struRect; //人脸子图区域 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwFacePicLen; //人脸子图的长度,为0表示没有图片,大于0表示有图片 + DWORD dwBackgroundPicLen; //背景图的长度,为0表示没有图片,大于0表示有图片(保留) + BYTE bySmart; //IDS设备返回0(默认值),Smart Functiom Return 1 + BYTE byAlarmEndMark;//报警结束标记0-保留,1-结束标记(该字段结合人脸ID字段使用,表示该ID对应的下报警结束,主要提供给NVR使用,用于判断报警结束,提取识别图片数据中,清晰度最高的图片) + BYTE byRepeatTimes; //重复报警次数,0-无意义 + BYTE byUploadEventDataType;//人脸图片数据长传方式:0-二进制数据,1-URL + NET_VCA_HUMAN_FEATURE struFeature; //人体属性 + float fStayDuration; //停留画面中时间(单位: 秒) + char sStorageIP[16]; //存储服务IP地址 + WORD wStoragePort; //存储服务端口号 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + /*人脸子图图片质量评估等级,0-低等质量,1-中等质量,2-高等质量, + 新增目标抓拍质量评分机制与原有的人脸评分区别: + 原有的人脸评分是在目标抓拍中实现,目的是确保一次目标抓拍中获取最好的图像效果,是一个相对图像质量的评分;新增目标抓拍质量评分机制是针对已经抓拍完成的人脸图片,使用图像算法对图像中人脸,人眼,肩宽等相对重要的信息进行分析,按照统一的标准对人脸图片效果质量进行评分*/ BYTE byFacePicQuality; - BYTE byUIDLen; // ϴıʶ - BYTE byLivenessDetectionStatus;// ״̬0-1-δ֪(ʧ)2-3-4-δ - /*ϢʶλǷNET_VCA_FACESNAP_ADDINFOṹ壩,0-޸Ϣ, 1-иϢ*/ + BYTE byUIDLen; // 上传报警的标识长度 + BYTE byLivenessDetectionStatus;// 活体检测状态:0-保留,1-未知(检测失败),2-非真人人脸,3-真人人脸,4-未开启活体检测 + /*附加信息标识位(即是否有NET_VCA_FACESNAP_ADDINFO结构体),0-无附加信息, 1-有附加信息。*/ BYTE byAddInfo; - BYTE *pUIDBuffer; //ʶָ - //Ϣָ,ָNET_VCA_FACESNAP_ADDINFOṹ + BYTE *pUIDBuffer; //标识指针 + //附加信息指针,指向NET_VCA_FACESNAP_ADDINFO结构体 BYTE *pAddInfoBuffer; - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,byTimeDiffFlagΪ1ʱЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾbyTimeDiffFlagΪ1ʱЧ*/ - BYTE byBrokenNetHttp; //־λ0-شݣ1-ش - BYTE* pBuffer1; //ͼͼƬ - BYTE* pBuffer2; //ͼͼƬݣͨұͼӿڿԻȡͼ + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 + BYTE* pBuffer1; //人脸子图的图片数据 + BYTE* pBuffer2; //背景图的图片数据(保留,通过查找背景图接口可以获取背景图) }NET_VCA_FACESNAP_RESULT, *LPNET_VCA_FACESNAP_RESULT; typedef struct tagNET_VCA_SUB_PROCIMG_V50 { - DWORD dwImageLen; //ͼƬݳ - DWORD dwFaceScore; //,0-100 - NET_VCA_RECT struVcaRect; //ͼ - NET_VCA_POINT struLeftEyePoint; //λ - NET_VCA_POINT struRightEyePoint; //λ - BYTE byDistance; //ۼ + DWORD dwImageLen; //图片数据长度 + DWORD dwFaceScore; //人脸评分,0-100 + NET_VCA_RECT struVcaRect; //人脸子图区域 + NET_VCA_POINT struLeftEyePoint; //左眼位置 + NET_VCA_POINT struRightEyePoint; //右眼位置 + BYTE byDistance; //两眼间距 BYTE bySex; BYTE byRes1; BYTE byEyeGlass; - NET_VCA_RECT struPosRect; //λ - BYTE byRes[20]; // - BYTE *pImage; //ͼƬ + NET_VCA_RECT struPosRect; //人脸位置区域 + BYTE byRes[20]; //保留 + BYTE *pImage; //图片数据 }NET_VCA_SUB_PROCIMG_V50, *LPNET_VCA_SUB_PROCIMG_V50; typedef struct tagNET_DVR_FACE_DETECTION { - DWORD dwSize; //ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - DWORD dwBackgroundPicLen; //ͼijȣΪ0ʾûͼƬ0ʾͼƬ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - NET_VCA_RECT struFacePic[MAX_FACE_PIC_NUM/*30*/];//ͼ - BYTE byFacePicNum;//ͼ - BYTE byUploadEventDataType;//ͼƬݳʽ0-ݣ1-URL - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,byTimeDiffFlagΪ1ʱЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾbyTimeDiffFlagΪ1ʱЧ*/ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + DWORD dwBackgroundPicLen; //背景图的长度,为0表示没有图片,大于0表示有图片 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + NET_VCA_RECT struFacePic[MAX_FACE_PIC_NUM/*30*/];//人脸子图区域 + BYTE byFacePicNum;//子图数量 + BYTE byUploadEventDataType;//图片数据长传方式:0-二进制数据,1-URL + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ BYTE byRes[249]; - BYTE* pBackgroundPicpBuffer; //ͼͼƬ + BYTE* pBackgroundPicpBuffer; //背景图的图片数据 }NET_DVR_FACE_DETECTION,*LPNET_DVR_FACE_DETECTION; typedef struct tagNET_DVR_UPGRADE_PARAM @@ -27402,434 +27402,434 @@ typedef struct tagNET_DVR_UPGRADE_PARAM typedef struct tagNET_VCA_FD_PROCIMG_RESULT_V50 { - DWORD dwSize; //ṹС - DWORD dwImageId; //ͼID - BYTE byRes[20]; // - DWORD dwSubImageNum; //ͼ - NET_VCA_SUB_PROCIMG_V50 struProcImg[MAX_TARGET_NUM]; //ͼϢ + DWORD dwSize; //结构大小 + DWORD dwImageId; //大图ID + BYTE byRes[20]; //保留 + DWORD dwSubImageNum; //人脸子图张数 + NET_VCA_SUB_PROCIMG_V50 struProcImg[MAX_TARGET_NUM]; //单张子图信息 }NET_VCA_FD_PROCIMG_RESULT_V50, *LPNET_VCA_FD_PROCIMG_RESULT_V50; -//齹 +//虚焦侦测结果 typedef struct tagNET_DVR_DEFOCUS_ALARM { - DWORD dwSize; /*ṹ*/ - NET_VCA_DEV_INFO struDevInfo;/*豸Ϣ*/ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byRes1[2]; //ֽ - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,byTimeDiffFlagΪ1ʱЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾbyTimeDiffFlagΪ1ʱЧ*/ - BYTE byRes[49]; // ֽ + DWORD dwSize; /*结构长度*/ + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes1[2]; //保留字节 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes[49]; // 保留字节 }NET_DVR_DEFOCUS_ALARM, *LPNET_DVR_DEFOCUS_ALARM; -// +//大雾侦测结果 typedef struct tagNET_DVR_DENSEFOGDETECTION_ALARM { - DWORD dwSize; /*ṹ*/ - NET_VCA_DEV_INFO struDevInfo;/*豸Ϣ*/ - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - BYTE byFogLevel; //ĵȼ0-~ 1-~ 2-~Ũ 3-Ũ - BYTE byRes[259]; // ֽ + DWORD dwSize; /*结构长度*/ + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byFogLevel; //雾的等级,0-无雾~薄雾 ,1-薄雾~中雾, 2-大雾~浓雾, 3-浓雾及以上 + BYTE byRes[259]; // 保留字节 }NET_DVR_DENSEFOGDETECTION_ALARM, *LPNET_DVR_DENSEFOGDETECTION_ALARM; typedef struct tagNET_DVR_AUDIOEXCEPTION_ALARM { - DWORD dwSize; /*ṹ*/ - BYTE byAlarmType;//ͣ1-Ƶ쳣2-Ƶͻ䣨ǿ3-ǿ4-Ƶʧ + DWORD dwSize; /*结构长度*/ + BYTE byAlarmType;//报警类型,1-音频输入异常,2-音频输入突变(声强陡升),3-声强陡降,4-音频丢失 BYTE byRes1; - WORD wAudioDecibel;//ǿȣƵͻʱõ - NET_VCA_DEV_INFO struDevInfo;/*豸Ϣ*/ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byRes[62]; // ֽ + WORD wAudioDecibel;//声音强度(音频输入突变时用到) + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes[62]; // 保留字节 }NET_DVR_AUDIOEXCEPTION_ALARM, *LPNET_DVR_AUDIOEXCEPTION_ALARM; typedef struct tagNET_BUTTON_DOWN_EXCEPTION_ALARM { - DWORD dwSize; /*ṹ*/ - NET_VCA_DEV_INFO struDevInfo;/*豸Ϣ*/ - BYTE byRes[64]; // ֽ + DWORD dwSize; /*结构长度*/ + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + BYTE byRes[64]; // 保留字节 }NET_BUTTON_DOWN_EXCEPTION_ALARM, *LPNET_BUTTON_DOWN_EXCEPTION_ALARM; typedef struct tagNET_VCA_FD_IMAGE_CFG { - DWORD dwWidth; //Ҷͼݿ - DWORD dwHeight; //Ҷͼ߶ - DWORD dwImageLen; //Ҷͼݳ - BYTE byRes[20]; // - BYTE *pImage; //Ҷͼ + DWORD dwWidth; //灰度图像数据宽度 + DWORD dwHeight; //灰度图像高度 + DWORD dwImageLen; //灰度图像数据长度 + BYTE byRes[20]; //保留 + BYTE *pImage; //灰度图像数据 }NET_VCA_FD_IMAGE_CFG, *LPNET_VCA_FD_IMAGE_CFG; typedef struct tagNET_VCA_FD_PROCIMG_CFG { - DWORD dwSize; //ṹС - BYTE byEnable; //Ƿ񼤻; - BYTE bySensitivity; //ȣ[0,5] - BYTE byRes1[22]; //ֽ - NET_VCA_SIZE_FILTER struSizeFilter; //ߴ - NET_VCA_POLYGON struPolygon; // - NET_VCA_FD_IMAGE_CFG struFDImage; //ͼƬϢ - BYTE byRes2[20]; // + DWORD dwSize; //结构大小 + BYTE byEnable; //是否激活规则; + BYTE bySensitivity; //检测灵敏度,[0,5] + BYTE byRes1[22]; //保留字节 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_VCA_POLYGON struPolygon; //多边形 + NET_VCA_FD_IMAGE_CFG struFDImage; //图片信息 + BYTE byRes2[20]; //保留 }NET_VCA_FD_PROCIMG_CFG, *LPNET_VCA_FD_PROCIMG_CFG; typedef struct tagNET_VCA_SUB_PROCIMG { - DWORD dwImageLen; //ͼƬݳ - DWORD dwFaceScore; //,0-100 - NET_VCA_RECT struVcaRect; //ͼ - BYTE byRes[20]; // - BYTE *pImage; //ͼƬ + DWORD dwImageLen; //图片数据长度 + DWORD dwFaceScore; //人脸评分,0-100 + NET_VCA_RECT struVcaRect; //人脸子图区域 + BYTE byRes[20]; //保留 + BYTE *pImage; //图片数据 }NET_VCA_SUB_PROCIMG, *LPNET_VCA_SUB_PROCIMG; typedef struct tagNET_VCA_FD_PROCIMG_RESULT { - DWORD dwSize; //ṹС - DWORD dwImageId; //ͼID - BYTE byRes[20]; // - DWORD dwSubImageNum; //ͼ - NET_VCA_SUB_PROCIMG struProcImg[MAX_TARGET_NUM]; //ͼϢ + DWORD dwSize; //结构大小 + DWORD dwImageId; //大图ID + BYTE byRes[20]; //保留 + DWORD dwSubImageNum; //人脸子图张数 + NET_VCA_SUB_PROCIMG struProcImg[MAX_TARGET_NUM]; //单张子图信息 }NET_VCA_FD_PROCIMG_RESULT, *LPNET_VCA_FD_PROCIMG_RESULT; typedef struct tagNET_VCA_PICMODEL_RESULT { - DWORD dwImageLen; //ͼƬݳ - DWORD dwModelLen; //ģݳ - BYTE byRes[20]; // - BYTE *pImage; //ͼƬָ - BYTE *pModel; //ģָ + DWORD dwImageLen; //图片数据长度 + DWORD dwModelLen; //模型数据长度 + BYTE byRes[20]; //保留 + BYTE *pImage; //人脸图片数据指针 + BYTE *pModel; //模型数据指针 }NET_VCA_PICMODEL_RESULT, *LPNET_VCA_PICMODEL_RESULT; typedef struct tagNET_VCA_REGISTER_PIC { - DWORD dwImageID; //ͼID - DWORD dwFaceScore; //,0-100 - NET_VCA_RECT struVcaRect; //ͼ - BYTE byRes[20]; // + DWORD dwImageID; //大图ID + DWORD dwFaceScore; //人脸评分,0-100 + NET_VCA_RECT struVcaRect; //人脸子图区域 + BYTE byRes[20]; //保留 }NET_VCA_REGISTER_PIC, *LPNET_VCA_REGISTER_PIC; -#define MAX_HUMAN_PICTURE_NUM 10 //Ƭ -#define MAX_HUMAN_BIRTHDATE_LEN 10 //³ +#define MAX_HUMAN_PICTURE_NUM 10 //最大照片数 +#define MAX_HUMAN_BIRTHDATE_LEN 10 //最大出生年月长度 typedef struct tagNET_DVR_AREAINFOCFG { - WORD wNationalityID; // - WORD wProvinceID; //ʡ - WORD wCityID; // - WORD wCountyID; // + WORD wNationalityID; //国籍 + WORD wProvinceID; //省 + WORD wCityID; //市 + WORD wCountyID; //县 /* - if (dwCode != 0) dwCode ֵ ȫʡݳб.txt - else dwCode ֵ PROVINCE_CITY_IDX + if (dwCode != 0) dwCode 赋值参照 “全国各省份城市列表.txt” + else dwCode 赋值解析参照 PROVINCE_CITY_IDX */ DWORD dwCode; }NET_DVR_AREAINFOCFG, *LPNET_DVR_AREAINFOCFG; typedef struct tagNET_VCA_HUMAN_ATTRIBUTE { - BYTE bySex; //Ա0-У1-Ů0xff-δ֪ - BYTE byCertificateType; //֤ͣ0-֤1-֤2-֤3-գ4-0xff-δ֪ - BYTE byBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //£磺201106 - BYTE byName[NAME_LEN]; // - NET_DVR_AREAINFOCFG struNativePlace; // - BYTE byCertificateNumber[NAME_LEN]; //֤ + BYTE bySex; //性别:0-男,1-女,0xff-未知 + BYTE byCertificateType; //证件类型:0-身份证,1-警官证,2-特种证,3-护照,4-其他,0xff-未知 + BYTE byBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //出生年月,如:201106 + BYTE byName[NAME_LEN]; //姓名 + NET_DVR_AREAINFOCFG struNativePlace; //籍贯参数 + BYTE byCertificateNumber[NAME_LEN]; //证件号 /* - dwPersonInfoExtendLen && pPersonInfoExtend ӦURL(/ISAPI/System/Video/inputs/channels//faceContrast/personInfoExtend)ʾ PersonInfoExtendList XML Block - ڣƽ̨Ĺʱ򣬵pictureݵԶϢ豸ƥ䱨ЯΪƥϢһϴƽ̨Ĺƥ䣻 + dwPersonInfoExtendLen && pPersonInfoExtend 对应URL(/ISAPI/System/Video/inputs/channels//faceContrast/personInfoExtend)表示的 PersonInfoExtendList XML Block + 意义所在:平台中心管理的时候,导入picture数据的自定义信息,在设备检测匹配报警后,携带作为匹配信息一并上传;平台中心管理匹配; */ - DWORD dwPersonInfoExtendLen;// ԱǩϢչ - BYTE *pPersonInfoExtend; //ԱǩϢչϢ - BYTE byGroup;//紫0xffʾδ֪ - BYTE byRes2[3]; //ֽ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - BYTE* pThermalData;//ȳͼƬָ + DWORD dwPersonInfoExtendLen;// 人员标签信息扩展长度 + BYTE *pPersonInfoExtend; //人员标签信息扩展信息 + BYTE byGroup;//如传入0xff表示未知 + BYTE byRes2[3]; //保留字节 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE* pThermalData;//热成像图片指针 #else - BYTE* pThermalData;//ȳͼƬָ - BYTE byRes3[4];//ֽ + BYTE* pThermalData;//热成像图片指针 + BYTE byRes3[4];//保留字节 #endif }NET_VCA_HUMAN_ATTRIBUTE, *LPNET_VCA_HUMAN_ATTRIBUTE; typedef struct tagNET_VCA_HUMANATTRIBUTE_COND { - BYTE bySex; //Ա0-ã1-У2-Ů - BYTE byCertificateType; //֤ͣ0-ã1-֤2-֤ - BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ʼ£磺201106 - BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ֹ£201106 - BYTE byName[NAME_LEN]; // - NET_DVR_AREAINFOCFG struNativePlace; // - BYTE byCertificateNumber[NAME_LEN]; //֤ + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byCertificateType; //证件类型:0-不启用,1-身份证,2-警官证 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byName[NAME_LEN]; //姓名 + NET_DVR_AREAINFOCFG struNativePlace; //籍贯参数 + BYTE byCertificateNumber[NAME_LEN]; //证件号 BYTE byRes[20]; }NET_VCA_HUMANATTRIBUTE_COND, *LPNET_VCA_HUMANATTRIBUTE_COND; typedef struct tagNET_VCA_BLOCKLIST_INFO { - DWORD dwSize; //ṹС - DWORD dwRegisterID; //עIDţֻ - DWORD dwGroupNo; // - BYTE byType; //־0-ȫ1-2-ֹ - BYTE byLevel; //ֹȼ0-ȫ1-ͣ2-У3- - BYTE byRes1[2]; // - NET_VCA_HUMAN_ATTRIBUTE struAttribute; //ԱϢ - BYTE byRemark[NAME_LEN]; //עϢ - DWORD dwFDDescriptionLen;//ݳ - BYTE *pFDDescriptionBuffer;//ָ - DWORD dwFCAdditionInfoLen;//ץĿ⸽Ϣ - BYTE *pFCAdditionInfoBuffer;//ץĿ⸽Ϣָ루FCAdditionInfoаPTZꡢGPSϢ - DWORD dwThermalDataLen;//ȳͼƬȣȶ¼ϱ֧ + DWORD dwSize; //结构大小 + DWORD dwRegisterID; //名单注册ID号(只读) + DWORD dwGroupNo; //分组号 + BYTE byType; //名单标志:0-全部,1-允许名单,2-禁止名单 + BYTE byLevel; //禁止名单等级,0-全部,1-低,2-中,3-高 + BYTE byRes1[2]; //保留 + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRemark[NAME_LEN]; //备注信息 + DWORD dwFDDescriptionLen;//人脸库描述数据长度 + BYTE *pFDDescriptionBuffer;//人脸库描述数据指针 + DWORD dwFCAdditionInfoLen;//抓拍库附加信息长度 + BYTE *pFCAdditionInfoBuffer;//抓拍库附加信息数据指针(FCAdditionInfo中包含相机PTZ坐标、GPS信息) + DWORD dwThermalDataLen;//热成像图片长度,仅人脸比对事件上报支持 }NET_VCA_BLOCKLIST_INFO, *LPNET_VCA_BLOCKLIST_INFO; typedef struct tagNET_VCA_BLOCKLIST_PARA { - DWORD dwSize; //ṹС - NET_VCA_BLOCKLIST_INFO struBlockListInfo; //ֹ - DWORD dwRegisterPicNum; //ֹͼ - NET_VCA_PICMODEL_RESULT struRegisterPic[MAX_HUMAN_PICTURE_NUM]; //ֹͼƬϢ - BYTE byRes[40]; // + DWORD dwSize; //结构大小 + NET_VCA_BLOCKLIST_INFO struBlockListInfo; //禁止名单基本参数 + DWORD dwRegisterPicNum; //禁止名单图个数 + NET_VCA_PICMODEL_RESULT struRegisterPic[MAX_HUMAN_PICTURE_NUM]; //禁止名单图片信息 + BYTE byRes[40]; //保留 }NET_VCA_BLOCKLIST_PARA, *LPNET_VCA_BLOCKLIST_PARA; typedef struct tagNET_VCA_BLOCKLIST_COND { - LONG lChannel; //ͨ - DWORD dwGroupNo; // - BYTE byType; //־0-ȫ1-2-ֹ - BYTE byLevel; //ֹȼ0-ȫ1-ͣ2-У3- - BYTE byRes1[2]; // - NET_VCA_HUMAN_ATTRIBUTE struAttribute; //ԱϢ + LONG lChannel; //通道号 + DWORD dwGroupNo; //分组号 + BYTE byType; //名单标志:0-全部,1-允许名单,2-禁止名单 + BYTE byLevel; //禁止名单等级,0-全部,1-低,2-中,3-高 + BYTE byRes1[2]; //保留 + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 BYTE byRes[20]; }NET_VCA_BLOCKLIST_COND, *LPNET_VCA_BLOCKLIST_COND; typedef struct tagNET_VCA_BLOCKLIST_PIC { - DWORD dwSize; //ṹС - DWORD dwFacePicNum; //ͼ - BYTE byRes[20]; // - NET_VCA_PICMODEL_RESULT struBlockListPic[MAX_HUMAN_PICTURE_NUM]; //ƬϢ + DWORD dwSize; //结构大小 + DWORD dwFacePicNum; //人脸图个数 + BYTE byRes[20]; //保留 + NET_VCA_PICMODEL_RESULT struBlockListPic[MAX_HUMAN_PICTURE_NUM]; //单张照片信息 }NET_VCA_BLOCKLIST_PIC, *LPNET_VCA_BLOCKLIST_PIC; typedef struct tagNET_VCA_FIND_PICTURECOND { - LONG lChannel;//ͨ - NET_DVR_TIME struStartTime;//ʼʱ - NET_DVR_TIME struStopTime;//ʱ - BYTE byRes[12]; // + LONG lChannel;//通道号 + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 + BYTE byRes[12]; //保留 }NET_VCA_FIND_PICTURECOND, *LPNET_VCA_FIND_PICTURECOND; -#define MAX_FACE_PIC_LEN 6144 //ͼƬݳ +#define MAX_FACE_PIC_LEN 6144 //最大人脸图片数据长度 typedef struct tagNET_VCA_SUB_SNAPPIC_DATA { - DWORD dwFacePicID; //ͼID - DWORD dwFacePicLen; //ͼݳ - NET_DVR_TIME struSnapTime; //ץʱ - DWORD dwSimilarity; //ƶ - BYTE byRes[16]; // - char sPicBuf[MAX_FACE_PIC_LEN]; //ͼƬ + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + NET_DVR_TIME struSnapTime; //抓拍时间 + DWORD dwSimilarity; //相似度 + BYTE byRes[16]; //保留 + char sPicBuf[MAX_FACE_PIC_LEN]; //图片数据 }NET_VCA_SUB_SNAPPIC_DATA, *LPNET_VCA_SUB_SNAPPIC_DATA; typedef struct tagNET_VCA_ADVANCE_FIND { - DWORD dwFacePicID; //ͼƬID + DWORD dwFacePicID; //人脸图片ID BYTE byRes[36]; }NET_VCA_ADVANCE_FIND, *LPNET_VCA_ADVANCE_FIND; typedef struct tagNET_VCA_NORMAL_FIND { - DWORD dwImageID; //ͼID - DWORD dwFaceScore; // - NET_VCA_RECT struVcaRect; //ͼ + DWORD dwImageID; //大图ID + DWORD dwFaceScore; //人脸评分 + NET_VCA_RECT struVcaRect; //人脸子图区域 BYTE byRes[20]; }NET_VCA_NORMAL_FIND, *LPNET_VCA_NORMAL_FIND; typedef union tagNET_VCA_FIND_SNAPPIC_UNION { - NET_VCA_NORMAL_FIND struNormalFind; //ͨ - NET_VCA_ADVANCE_FIND struAdvanceFind; //߼ + NET_VCA_NORMAL_FIND struNormalFind; //普通检索 + NET_VCA_ADVANCE_FIND struAdvanceFind; //高级检索 }NET_VCA_FIND_SNAPPIC_UNION, *LPNET_VCA_FIND_SNAPPIC_UNION; typedef enum _VCA_FIND_SNAPPIC_TYPE_ { - VCA_NORMAL_FIND = 0x00000000, //ͨ - VCA_ADVANCE_FIND = 0x00000001 //߼ + VCA_NORMAL_FIND = 0x00000000, //普通检索 + VCA_ADVANCE_FIND = 0x00000001 //高级检索 }VCA_FIND_SNAPPIC_TYPE; typedef struct tagNET_VCA_FIND_PICTURECOND_ADVANCE { - LONG lChannel;//ͨ - NET_DVR_TIME struStartTime;//ʼʱ - NET_DVR_TIME struStopTime;//ʱ - BYTE byThreshold; //ֵ0-100 - BYTE byRes[23]; // - VCA_FIND_SNAPPIC_TYPE dwFindType;//ͣVCA_FIND_SNAPPIC_TYPE - NET_VCA_FIND_SNAPPIC_UNION uFindParam; // + LONG lChannel;//通道号 + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 + BYTE byThreshold; //阈值,0-100 + BYTE byRes[23]; //保留 + VCA_FIND_SNAPPIC_TYPE dwFindType;//检索类型,详见VCA_FIND_SNAPPIC_TYPE + NET_VCA_FIND_SNAPPIC_UNION uFindParam; //检索参数 }NET_VCA_FIND_PICTURECOND_ADVANCE, *LPNET_VCA_FIND_PICTURECOND_ADVANCE; typedef struct tagNET_VCA_FACESNAP_INFO_ALARM { - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - DWORD dwSnapFacePicID; //ץͼID - DWORD dwSnapFacePicLen; //ץͼijȣΪ0ʾûͼƬ0ʾͼƬ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - BYTE byFaceScore; //ָ֣ͼ,0-100 - BYTE bySex;//Ա0-δ֪1-У2-Ů,0xff-㷨֧֣ûʶ - BYTE byGlasses;//Ƿ۾0-δ֪1-ǣ2-,3-ī, 0xff-㷨֧֣ûʶ + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + DWORD dwSnapFacePicID; //抓拍人脸图ID + DWORD dwSnapFacePicLen; //抓拍人脸子图的长度,为0表示没有图片,大于0表示有图片 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + BYTE byFaceScore; //人脸评分,指人脸子图的质量的评分,0-100 + BYTE bySex;//性别,0-未知,1-男,2-女,0xff-算法支持,但是没有识别出来 + BYTE byGlasses;//是否带眼镜,0-未知,1-是,2-否,3-戴墨镜, 0xff-算法支持,但是没有识别出来 /* - ʶĶηΧ[byRes1-byAgeDeviation,byRes1+byAgeDeviation] + 识别人脸的段范围[byRes1-byAgeDeviation,byRes1+byAgeDeviation] */ - BYTE byRes1;//0-ʾδ֪㷨֧֣,0xff-㷨֧֣ûʶ - BYTE byDeviation;//ֵ - BYTE byGroup;//0xffʾδ֪ - /*ͼͼƬȼ0-͵,1-е,2-ߵ, - 㷨ͼͼƬ,̬ͨȡڵȿӰĿʶܵۺĽ*/ + BYTE byRes1;//0-表示“未知”(算法不支持),0xff-算法支持,但是没有识别出来 + BYTE byDeviation;//误差值 + BYTE byGroup;//若传入0xff表示未知 + /*人脸子图图片质量评估等级,0-低等质量,1-中等质量,2-高等质量, + 该质量评估算法仅针对人脸子图单张图片,具体是通过姿态、清晰度、遮挡情况、光照情况等可影响目标识别性能的因素综合评估的结果*/ BYTE byFacePicQuality; BYTE byRes; - DWORD dwUIDLen; // ϴıʶ - BYTE *pUIDBuffer; //ʶָ - float fStayDuration; //ͣʱ(λ: ) - BYTE *pBuffer1; //ץͼͼƬ + DWORD dwUIDLen; // 上传报警的标识长度 + BYTE *pUIDBuffer; //标识指针 + float fStayDuration; //停留画面中时间(单位: 秒) + BYTE *pBuffer1; //抓拍人脸子图的图片数据 }NET_VCA_FACESNAP_INFO_ALARM, *LPNET_VCA_FACESNAP_INFO_ALARM; typedef struct tagNET_VCA_BLOCKLIST_INFO_ALARM { - NET_VCA_BLOCKLIST_INFO struBlockListInfo; //ֹϢ - DWORD dwBlockListPicLen; //ֹͼijȣΪ0ʾûͼƬ0ʾͼƬ - DWORD dwFDIDLen;// ID - BYTE *pFDID; //Idָ - DWORD dwPIDLen;// ͼƬID - BYTE *pPID; //ͼƬIDָ - WORD wThresholdValue; //ֵ[0,100] - BYTE byIsNoSaveFDPicture;//0-ͼƬ,1-ͼƬ, ˵ͼƬ߽ģʱԭͼʱ,ֶη1,ʱͼƬٷ - BYTE byRealTimeContrast;//Ƿʵʱ 0-ʵʱ 1-ʵʱ - BYTE *pBuffer1; //ֹͼͼƬ + NET_VCA_BLOCKLIST_INFO struBlockListInfo; //禁止名单基本信息 + DWORD dwBlockListPicLen; //禁止名单人脸子图的长度,为0表示没有图片,大于0表示有图片 + DWORD dwFDIDLen;// 人脸库ID长度 + BYTE *pFDID; //人脸库Id指针 + DWORD dwPIDLen;// 人脸库图片ID长度 + BYTE *pPID; //人脸库图片ID指针 + WORD wThresholdValue; //人脸库阈值[0,100] + BYTE byIsNoSaveFDPicture;//0-保存人脸库图片,1-不保存人脸库图片, 若开启了导入图片或者建模时不保存原图功能时,该字段返回1,此时人脸库图片将不再返回 + BYTE byRealTimeContrast;//是否实时报警 0-实时 1-非实时 + BYTE *pBuffer1; //禁止名单人脸子图的图片数据 }NET_VCA_BLOCKLIST_INFO_ALARM, *LPNET_VCA_BLOCKLIST_INFO_ALARM; typedef struct tagNET_VCA_FACESNAP_MATCH_ALARM { - DWORD dwSize; // ṹС - float fSimilarity; //ƶȣ[0.001,1] - NET_VCA_FACESNAP_INFO_ALARM struSnapInfo; //ץϢ - NET_VCA_BLOCKLIST_INFO_ALARM struBlockListInfo; //ֹϢ - char sStorageIP[16]; //洢IPַ - WORD wStoragePort; //洢˿ں - BYTE byMatchPicNum; //ƥͼƬ0-豸ֵĬ0豸ֵΪ0ʱʾûƥͼƬϢ - BYTE byPicTransType;//ͼƬݴ䷽ʽ: 0-ƣ1-url - DWORD dwSnapPicLen;//豸ʶץͼƬ - BYTE *pSnapPicBuffer;//豸ʶץͼƬָ - NET_VCA_RECT struRegion;//Ŀ߽豸ʶץͼƬУͼ - DWORD dwModelDataLen;//ģݳ - BYTE *pModelDataBuffer;// ģָ - BYTE byModelingStatus;// ģ״̬ - BYTE byLivenessDetectionStatus;//״̬0-1-δ֪ʧܣ2-3-4-δ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,0xffЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾ0xffЧ*/ - BYTE byMask; //ץͼǷ֣0-1-δ֪2-֣3- - BYTE bySmile; //ץͼǷ΢Ц0-1-δ֪2-΢Ц3-΢Ц - BYTE byContrastStatus; //ȶԽ0-1-ȶԳɹ2-ȶʧ - BYTE byBrokenNetHttp; //־λ0-شݣ1-ش + DWORD dwSize; // 结构大小 + float fSimilarity; //相似度,[0.001,1] + NET_VCA_FACESNAP_INFO_ALARM struSnapInfo; //抓拍信息 + NET_VCA_BLOCKLIST_INFO_ALARM struBlockListInfo; //禁止名单信息 + char sStorageIP[16]; //存储服务IP地址 + WORD wStoragePort; //存储服务端口号 + BYTE byMatchPicNum; //匹配图片的数量,0-保留(老设备这个值默认0,新设备这个值为0时表示后续没有匹配的图片信息) + BYTE byPicTransType;//图片数据传输方式: 0-二进制;1-url + DWORD dwSnapPicLen;//设备识别抓拍图片长度 + BYTE *pSnapPicBuffer;//设备识别抓拍图片指针 + NET_VCA_RECT struRegion;//目标边界框,设备识别抓拍图片中,人脸子图坐标 + DWORD dwModelDataLen;//建模数据长度 + BYTE *pModelDataBuffer;// 建模数据指针 + BYTE byModelingStatus;// 建模状态 + BYTE byLivenessDetectionStatus;//活体检测状态:0-保留,1-未知(检测失败),2-非真人人脸,3-真人人脸,4-未开启活体检测 + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,0xff无效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,0xff无效*/ + BYTE byMask; //抓拍图是否戴口罩,0-保留,1-未知,2-不戴口罩,3-戴口罩 + BYTE bySmile; //抓拍图是否微笑,0-保留,1-未知,2-不微笑,3-微笑 + BYTE byContrastStatus; //比对结果,0-保留,1-比对成功,2-比对失败 + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 }NET_VCA_FACESNAP_MATCH_ALARM, *LPNET_VCA_FACESNAP_MATCH_ALARM; typedef struct tagNET_VCA_BLOCKLIST_INFO_ALARM_LOG { - NET_VCA_BLOCKLIST_INFO struBlockListInfo; //ֹϢ - DWORD dwBlockListPicID; //ֹͼIDڲͼƬ - BYTE byRes[20]; // ֽ + NET_VCA_BLOCKLIST_INFO struBlockListInfo; //禁止名单基本信息 + DWORD dwBlockListPicID; //禁止名单人脸子图ID,用于查找图片 + BYTE byRes[20]; // 保留字节 }NET_VCA_BLOCKLIST_INFO_ALARM_LOG, *LPNET_VCA_BLOCKLIST_INFO_ALARM_LOG; typedef struct tagNET_VCA_FACESNAP_INFO_ALARM_LOG { - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - DWORD dwSnapFacePicID; //ץͼID - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - BYTE byRes[20]; // ֽ + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + DWORD dwSnapFacePicID; //抓拍人脸图ID + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + BYTE byRes[20]; // 保留字节 }NET_VCA_FACESNAP_INFO_ALARM_LOG, *LPNET_VCA_FACESNAP_INFO_ALARM_LOG; typedef struct tagNET_VCA_FACESNAP_MATCH_ALARM_LOG { - DWORD dwSize; // ṹС - float fSimilarity; //ƶȣ[0.001,1] - NET_VCA_FACESNAP_INFO_ALARM_LOG struSnapInfoLog; //ץϢ - NET_VCA_BLOCKLIST_INFO_ALARM_LOG struBlockListInfoLog; //ֹϢ - BYTE byRes[60]; // ֽ + DWORD dwSize; // 结构大小 + float fSimilarity; //相似度,[0.001,1] + NET_VCA_FACESNAP_INFO_ALARM_LOG struSnapInfoLog; //抓拍信息 + NET_VCA_BLOCKLIST_INFO_ALARM_LOG struBlockListInfoLog; //禁止名单信息 + BYTE byRes[60]; // 保留字节 }NET_VCA_FACESNAP_MATCH_ALARM_LOG, *LPNET_VCA_FACESNAP_MATCH_ALARM_LOG; typedef struct tagNET_VCA_FACEMATCH_PICCOND { - DWORD dwSize; // ṹС - DWORD dwSnapFaceID; //ץͼID - DWORD dwBlockListID; //ƥĽֹID - DWORD dwBlockListFaceID; //ȶԵĽֹͼID - BYTE byRes[20]; // ֽ + DWORD dwSize; // 结构大小 + DWORD dwSnapFaceID; //抓拍人脸子图ID + DWORD dwBlockListID; //匹配的禁止名单ID + DWORD dwBlockListFaceID; //比对的禁止名单人脸子图ID + BYTE byRes[20]; // 保留字节 }NET_VCA_FACEMATCH_PICCOND, *LPNET_VCA_FACEMATCH_PICCOND; typedef struct tagNET_VCA_FACEMATCH_PICTURE { - DWORD dwSize; // ṹС - DWORD dwSnapFaceLen; //ץͼ - DWORD dwBlockListFaceLen; //ȶԵĽֹͼ - BYTE byRes[20]; //ֽ - BYTE *pSnapFace; //ץͼͼƬ - BYTE *pBlockListFace; //ȶԵĽֹͼ + DWORD dwSize; // 结构大小 + DWORD dwSnapFaceLen; //抓拍人脸子图长度 + DWORD dwBlockListFaceLen; //比对的禁止名单人脸子图长度 + BYTE byRes[20]; //保留字节 + BYTE *pSnapFace; //抓拍人脸子图的图片数据 + BYTE *pBlockListFace; //比对的禁止名单人脸子图数据 }NET_VCA_FACEMATCH_PICTURE, *LPNET_VCA_FACEMATCH_PICTURE; typedef struct tagNET_VCA_BLOCKLIST_FASTREGISTER_PARA { - DWORD dwSize; //ṹС - NET_VCA_BLOCKLIST_INFO struBlockListInfo; //ֹ - DWORD dwImageLen; //ͼݳ - BYTE byRes[124]; // - BYTE *pImage; //ͼ + DWORD dwSize; //结构大小 + NET_VCA_BLOCKLIST_INFO struBlockListInfo; //禁止名单基本参数 + DWORD dwImageLen; //图像数据长度 + BYTE byRes[124]; //保留 + BYTE *pImage; //图像数据 }NET_VCA_BLOCKLIST_FASTREGISTER_PARA, *LPNET_VCA_BLOCKLIST_FASTREGISTER_PARA; -/*******PJ01C20170209084¼NVSܿĿר******/ -//֡ͳƽϴ +/*******PJ01C20170209084超脑录播NVS软件功能开发定制项目专用******/ +//单帧画面人数统计结果上传 typedef struct tagNET_DVR_FRAMES_PEOPLE_COUNTING { - DWORD dwSize; // ṹС - NET_VCA_DEV_INFO struDevInfo;//ǰ豸Ϣ - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; // ʱ - DWORD dwPeopleCountingNum; //еͳ - DWORD dwPicLen; //豸ʶץĵȫͼƬݳ - BYTE *pPicBuffer; //豸ʶץĵȫͼƬָ - BYTE byRes[512]; // ֽ + DWORD dwSize; // 结构体大小 + NET_VCA_DEV_INFO struDevInfo;//前端设备信息 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; // 绝对时标 + DWORD dwPeopleCountingNum; //画面中的人数统计数量 + DWORD dwPicLen; //设备识别抓拍的全景图片数据长度 + BYTE *pPicBuffer; //设备识别抓拍的全景图片数据指针 + BYTE byRes[512]; // 保留字节 }NET_DVR_FRAMES_PEOPLE_COUNTING, *LPNET_DVR_FRAMES_PEOPLE_COUNTING; -/*******PJ01C20170209084¼NVSܿĿר******/ +/*******PJ01C20170209084超脑录播NVS软件功能开发定制项目专用******/ -// +//单个分区配置 typedef struct tagNET_VCA_SINGLE_PATH { - BYTE byActive; // Ƿ,0-,1- - BYTE byType; //0-洢ץģ1-洢ֹȶԱ2-洢ץĺͽֹȶԱ0xff-Ч - BYTE bySaveAlarmPic; //ǷڱıͼƬ0-1- - BYTE byRes1[5]; // - DWORD dwDiskDriver; //̷ţ0ʼ - DWORD dwLeftSpace; //ԤλΪG - BYTE byRes2[8]; // + BYTE byActive; // 是否可用,0-否,1-是 + BYTE byType; //0-存储抓拍,1-存储禁止名单比对报警,2-存储抓拍和禁止名单比对报警,0xff-无效 + BYTE bySaveAlarmPic; //是否用于保存断网的报警图片,0-否,1-是 + BYTE byRes1[5]; //保留 + DWORD dwDiskDriver; //盘符号,从0开始 + DWORD dwLeftSpace; //预留容量(单位为G) + BYTE byRes2[8]; //保留 }NET_VCA_SINGLE_PATH, *LPNET_VCA_SINGLE_PATH; -//洢· +//存储路径设置 typedef struct tagNET_VCA_SAVE_PATH_CFG { - DWORD dwSize; //ṹС - NET_VCA_SINGLE_PATH struPathInfo[MAX_DISKNUM_V30]; // - BYTE byRes[40]; // + DWORD dwSize; //结构大小 + NET_VCA_SINGLE_PATH struPathInfo[MAX_DISKNUM_V30]; //单个分区 + BYTE byRes[40]; //保留 }NET_VCA_SAVE_PATH_CFG, *LPNET_VCA_SAVE_PATH_CFG; typedef struct tagNET_DVR_DEV_ACCESS_CFG { DWORD dwSize; - NET_DVR_IPADDR struIP; //豸IPַ - WORD wDevicePort; //˿ں - BYTE byEnable; //Ƿã0-1- - BYTE byRes1; // - BYTE sUserName[NAME_LEN]; //豸ĵ¼ʺ - BYTE sPassword[PASSWD_LEN]; //豸ĵ¼ + NET_DVR_IPADDR struIP; //接入设备的IP地址 + WORD wDevicePort; //端口号 + BYTE byEnable; //是否启用,0-否,1-是 + BYTE byRes1; //保留 + BYTE sUserName[NAME_LEN]; //接入设备的登录帐号 + BYTE sPassword[PASSWD_LEN]; //接入设备的登录密码 BYTE byRes2[60]; }NET_DVR_DEV_ACCESS_CFG,*LPNET_DVR_DEV_ACCESS_CFG; -/********************************Ŀʶ end****************************/ -//ֱ +/********************************智能目标识别 end****************************/ +//分辨率 #define MAKE_RESOLUTION(_interlace_, _width_, _height_, _fps_) \ (((_interlace_)<<28) \ |((((_width_)>>3)&0x1ff)<<19)| \ @@ -27875,66 +27875,66 @@ typedef struct tagNET_DVR_DEV_ACCESS_CFG -//ʾָͨģʽ -#define MAX_WINDOWS_NUM 12 //ָģʽ +//显示通道画面分割模式 +#define MAX_WINDOWS_NUM 12 //画面分割模式的数量 #define MAX_SUPPORT_RES 32 #define MAX_DISPNUM_V41 32 -#define MAX_SDI_RES 16 //SDIʾֱַ֧ͨ +#define MAX_SDI_RES 16 //SDI显示通道最大支持分辨率数 typedef struct tagNET_DVR_DISPWINDOWMODE { - BYTE byDispChanType;//ʾͨͣ0-BNC, 1-VGA, 2-HDMI, 3-DVI 4-SDI - BYTE byDispChanSeq;//ʾͨ,1ʼVGAʾڼVGA + BYTE byDispChanType;//显示通道类型:0-BNC, 1-VGA, 2-HDMI, 3-DVI 4-SDI + BYTE byDispChanSeq;//显示通道序号,从1开始,如果类型是VGA,则表示第几个VGA BYTE byRes[2]; BYTE byDispMode[MAX_WINDOWS_NUM/*12*/]; }NET_DVR_DISPWINDOWMODE, *LPNET_DVR_DISPWINDOWMODE; typedef struct tagNET_DVR_DISPINFO { - BYTE byChanNums;//ͨ - BYTE byStartChan;//ʼͨ + BYTE byChanNums;//通道个数 + BYTE byStartChan;//起始通道 BYTE byRes[2]; - DWORD dwSupportResolution[MAX_SUPPORT_RES/*32*/];//ֱַ֧ + DWORD dwSupportResolution[MAX_SUPPORT_RES/*32*/];//支持分辨率 }NET_DVR_DISPINFO, *LPNET_DVR_DISPINFO; -//ƴϢ +//大屏拼接信息 typedef struct tagNET_DVR_SCREENINFO { - BYTE bySupportBigScreenNums;//ƴ - BYTE byStartBigScreenNum;//ƴʼ - BYTE byMaxScreenX;//ƴģʽ + BYTE bySupportBigScreenNums;//最多大屏拼接数量 + BYTE byStartBigScreenNum;//大屏拼接起始号 + BYTE byMaxScreenX;//大屏拼接模式 BYTE byMaxScreenY; BYTE byRes[8]; }NET_DVR_SCREENINFO, *LPNET_DVR_SCREENINFO; typedef struct tagNET_DVR_SDI_INFO { - BYTE byChanNums;//ͨ - BYTE byStartChan;//ʼͨ + BYTE byChanNums;//通道个数 + BYTE byStartChan;//起始通道 BYTE byRes[2]; - DWORD dwSupportResolution[MAX_SDI_RES/*16*/];//ֱַ֧ + DWORD dwSupportResolution[MAX_SDI_RES/*16*/];//支持分辨率 }NET_DVR_SDI_INFO,*LPNET_DVR_SDI_INFO; typedef struct tagNET_DVR_MATRIX_ABILITY_V41 { DWORD dwSize; - BYTE byDspNums;//DSP - BYTE byDecChanNums;//ͨ - BYTE byStartChan;//ʼͨ + BYTE byDspNums;//DSP个数 + BYTE byDecChanNums;//解码通道数 + BYTE byStartChan;//起始解码通道 BYTE byRes1[5]; - NET_DVR_DISPINFO struVgaInfo;//VGAʾͨϢ - NET_DVR_DISPINFO struBncInfo;//BNCʾͨϢ - NET_DVR_DISPINFO struHdmiInfo;//HDMIʾͨϢ - NET_DVR_DISPINFO struDviInfo;//DVIʾͨϢ + NET_DVR_DISPINFO struVgaInfo;//VGA显示通道信息 + NET_DVR_DISPINFO struBncInfo;//BNC显示通道信息 + NET_DVR_DISPINFO struHdmiInfo;//HDMI显示通道信息 + NET_DVR_DISPINFO struDviInfo;//DVI显示通道信息 NET_DVR_DISPWINDOWMODE struDispMode[MAX_DISPNUM_V41/*32*/]; NET_DVR_SCREENINFO struBigScreenInfo; - BYTE bySupportAutoReboot; //Ƿ֧Զ0-֧֣1-֧ + BYTE bySupportAutoReboot; //是否支持自动重启,0-不支持,1-支持 BYTE byRes2[3]; - NET_DVR_SDI_INFO struSDIInfo;//SDIʾͨϢ + NET_DVR_SDI_INFO struSDIInfo;//SDI显示通道信息 BYTE byRes3[48]; } NET_DVR_MATRIX_ABILITY_V41, *LPNET_DVR_MATRIX_ABILITY_V41; -//ʾͨ +//显示通道配置 #define MAX_WINDOWS 16 #define MAX_WINDOWS_V41 36 @@ -27948,12 +27948,12 @@ typedef union tagNET_DVR_VIDEO_PLATFORM BYTE byRes[160]; struct { - /*ӴڶӦͨӦĽϵͳIJλ(Ƶۺƽ̨нϵͳЧ)*/ - //ۺƽ̨֧ԶԴ˲Ҫ + /*各个子窗口对应解码通道所对应的解码子系统的槽位号(对于视频综合平台中解码子系统有效)*/ + //如果综合平台支持自动分配解码资源,此参数不需要填充 BYTE byJoinDecoderId[MAX_WINDOWS_V41]; - //ʾƵֱʣ1-D1,2-720P,3-1080P豸Ҫݴ˷ֱʽнͨķ䣬1ó1080P豸4ͨ˽ͨ + //显示窗口所解视频分辨率,1-D1,2-720P,3-1080P,设备端需要根据此分辨率进行解码通道的分配,如1分屏配置成1080P,则设备会把4个解码通道都分配给此解码通道 BYTE byDecResolution[MAX_WINDOWS_V41]; - NET_DVR_RECTCFG struPosition; //ʾͨڵǽλ + NET_DVR_RECTCFG struPosition; //显示通道在电视墙中位置 BYTE byRes[80]; }struVideoPlatform; struct @@ -27966,130 +27966,130 @@ typedef union tagNET_DVR_VIDEO_PLATFORM typedef struct tagNET_DVR_MATRIX_VOUTCFG { DWORD dwSize; - BYTE byAudio; /*ƵǷ*/ - BYTE byAudioWindowIdx; /*ƵӴ*/ - BYTE byDispChanType; /*ʾͨͣ0-BNC1-VGA2-HDMI3-DVI4-YPbPr(뿨DECODER_SERVERר)*/ - BYTE byVedioFormat; /*1:NTSC,2:PAL0-NULL*/ - DWORD dwResolution;//ֱ - DWORD dwWindowMode; /*ģʽȡ*/ - BYTE byJoinDecChan[MAX_WINDOWS_V41];/*ӴڹĽͨ,豸ֽ֧ԴԶʱ˲*/ - BYTE byEnlargeStatus; /*ǷڷŴ״̬0Ŵ1Ŵ*/ - BYTE byEnlargeSubWindowIndex;//ŴӴں - BYTE byScale; /*ʾģʽ0---ʵʾ1---ʾ( BNC )*/ - BYTE byUnionType;/*ֹ,0-Ƶۺƽ̨ڲʾͨã1-ʾͨ*/ + BYTE byAudio; /*音频是否开启*/ + BYTE byAudioWindowIdx; /*音频开启子窗口*/ + BYTE byDispChanType; /*显示通道类型:0-BNC,1-VGA,2-HDMI,3-DVI,4-YPbPr(解码卡服务器DECODER_SERVER专用)*/ + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ + DWORD dwResolution;//分辨率 + DWORD dwWindowMode; /*画面模式,能力集获取*/ + BYTE byJoinDecChan[MAX_WINDOWS_V41];/*各个子窗口关联的解码通道,设备支持解码资源自动分配时此参数不用填充*/ + BYTE byEnlargeStatus; /*是否处于放大状态,0:不放大,1:放大*/ + BYTE byEnlargeSubWindowIndex;//放大的子窗口号 + BYTE byScale; /*显示模式,0---真实显示,1---缩放显示( 针对BNC )*/ + BYTE byUnionType;/*区分共用体,0-视频综合平台内部解码器显示通道配置,1-其他解码器显示通道配置*/ NET_DVR_VIDEO_PLATFORM struDiff; - DWORD dwDispChanNum; //ʾţ˲ȫȡʱЧ - WORD wLEDWidth; //LEDֱʿ0ΪЧ - WORD wLEDHeight; //LEDֱʸߣ0ΪЧ - BYTE byEnableVideoEffect; //ʾЧʹܣ 0-ʹܣ !0-ʹ - BYTE byRes[3]; //ֶ - NET_DVR_VIDEOEFFECT struVideoEffect; //ʾЧ + DWORD dwDispChanNum; //显示输出号,此参数在全部获取时有效 + WORD wLEDWidth; //LED分辨率宽,0为无效 + WORD wLEDHeight; //LED分辨率高,0为无效 + BYTE byEnableVideoEffect; //显示效果使能, 0-不使能, !0-使能 + BYTE byRes[3]; //保留字段 + NET_DVR_VIDEOEFFECT struVideoEffect; //显示效果 BYTE byRes2[60]; }NET_DVR_MATRIX_VOUTCFG,*LPNET_DVR_MATRIX_VOUTCFG; -/*豸״̬*/ +/*解码器设备状态*/ typedef struct tagNET_DVR_DISP_CHAN_STATUS_V41 { - BYTE byDispStatus; /*ʾ״̬0δʾ1ʾ*/ - BYTE byBVGA; /*0-BNC1-VGA 2-HDMI3-DVI4-SDI 0xff-Ч*/ - BYTE byVideoFormat; /*Ƶʽ1:NTSC,2:PAL,0-NON*/ - BYTE byWindowMode; /*ģʽ*/ - BYTE byJoinDecChan[MAX_WINDOWS_V41]; /*ӻĽͨ*/ - BYTE byFpsDisp[MAX_WINDOWS_V41]; /*ÿӻʾ֡*/ - BYTE byScreenMode; /*Ļģʽ0-ͨ 1-*/ + BYTE byDispStatus; /*显示状态:0:未显示,1:启动显示*/ + BYTE byBVGA; /*0-BNC,1-VGA, 2-HDMI,3-DVI,4-SDI 0xff-无效*/ + BYTE byVideoFormat; /*视频制式,1:NTSC,2:PAL,0-NON*/ + BYTE byWindowMode; /*画面模式*/ + BYTE byJoinDecChan[MAX_WINDOWS_V41]; /*各个子画面关联的解码通道*/ + BYTE byFpsDisp[MAX_WINDOWS_V41]; /*每个子画面的显示帧率*/ + BYTE byScreenMode; /*屏幕模式0-普通 1-大屏*/ BYTE byRes1[3]; - DWORD dwDispChan; /*ȡȫʾͨ״̬ʱЧʱ0*/ + DWORD dwDispChan; /*获取全部显示通道状态时有效,设置时可填0*/ BYTE byRes2[24]; }NET_DVR_DISP_CHAN_STATUS_V41, *LPNET_DVR_DISP_CHAN_STATUS_V41; -/*豸״̬*/ +/*解码器设备状态*/ typedef struct tagNET_DVR_DECODER_WORK_STATUS_V41 { DWORD dwSize; - NET_DVR_MATRIX_CHAN_STATUS struDecChanStatus[32]; /*ͨ״̬*/ - /*ʾͨ״̬*/ + NET_DVR_MATRIX_CHAN_STATUS struDecChanStatus[32]; /*解码通道状态*/ + /*显示通道状态*/ NET_DVR_DISP_CHAN_STATUS_V41 struDispChanStatus[MAX_DISPNUM_V41/*32*/]; - BYTE byAlarmInStatus[32]; /*״̬*/ - BYTE byAlarmOutStatus[32]; /*״̬*/ - BYTE byAudioInChanStatus; /*Խ״̬*/ + BYTE byAlarmInStatus[32]; /*报警输入状态*/ + BYTE byAlarmOutStatus[32]; /*报警输出状态*/ + BYTE byAudioInChanStatus; /*语音对讲状态*/ BYTE byRes[127]; }NET_DVR_DECODER_WORK_STATUS_V41,*LPNET_DVR_DECODER_WORK_STATUS_V41; -/*******************************ļط-Զ̻ط*******************************/ +/*******************************文件回放-远程回放设置*******************************/ typedef struct tagNET_DVR_MATRIX_DEC_REMOTE_PLAY_V41 { DWORD dwSize; - NET_DVR_IPADDR struIP; /* DVR IPַ */ - WORD wDVRPort; /* ˿ں */ - BYTE byChannel; /* ͨ */ + NET_DVR_IPADDR struIP; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byChannel; /* 通道号 */ BYTE byReserve; - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - DWORD dwPlayMode; /* 0ļ 1ʱ*/ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwPlayMode; /* 0-按文件 1-按时间*/ NET_DVR_TIME StartTime; NET_DVR_TIME StopTime; char sFileName[128]; - BYTE byRes[64]; /**/ + BYTE byRes[64]; /*保留*/ }NET_DVR_MATRIX_DEC_REMOTE_PLAY_V41, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_V41; #define MAX_BIGSCREENNUM_SCENE 100 #define MAX_LAYERNUMS 32 -//ʾͨýṹ +//显示通道配置结构 typedef struct tagNET_DVR_RECTCFG_SCENE { - WORD wXCoordinate; /*ϽʼX*/ - WORD wYCoordinate; /*ϽY*/ - WORD wWidth; /*ο*/ - WORD wHeight; /*θ߶*/ + WORD wXCoordinate; /*矩形左上角起始点X坐标*/ + WORD wYCoordinate; /*矩形左上角Y坐标*/ + WORD wWidth; /*矩形宽度*/ + WORD wHeight; /*矩形高度*/ }NET_DVR_RECTCFG_SCENE, *LPNET_DVR_RECTCFGSCENE; typedef struct tagNET_DVR_SCENEDISPCFG { - BYTE byEnable;//Ƿã0-ã1- - BYTE bySoltNum;//λ + BYTE byEnable;//是否启用,0-不启用,1-启用 + BYTE bySoltNum;//槽位号 BYTE byRes1[2]; BYTE byDispChanNum; - BYTE byAudio; /*ƵǷ,0-1-*/ - BYTE byAudioWindowIdx; /*ƵӴ*/ - BYTE byVedioFormat; /*1:NTSC,2:PAL0-NULL*/ - BYTE byWindowMode; /*ģʽȡ*/ - BYTE byEnlargeStatus; /*ǷڷŴ״̬0Ŵ1Ŵ*/ - BYTE byEnlargeSubWindowIndex;//ŴӴں - BYTE byScale; /*ʾģʽ0-ʵʾ1-ʾ( BNC )*/ - DWORD dwResolution;//ֱ - BYTE byJoinDecChan[MAX_WINDOWS_V41];/*ӴڹĽͨ*/ - BYTE byJoinDecoderId[MAX_WINDOWS_V41];/*λ*/ - //ʾƵֱʣ1-D1,2-720P,3-1080P豸Ҫݴ//ֱʽнͨķ䣬1ó1080P豸4ͨ˽ͨ + BYTE byAudio; /*音频是否开启,0-否,1-是*/ + BYTE byAudioWindowIdx; /*音频开启子窗口*/ + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ + BYTE byWindowMode; /*画面模式,从能力集获取*/ + BYTE byEnlargeStatus; /*是否处于放大状态,0:不放大,1:放大*/ + BYTE byEnlargeSubWindowIndex;//放大的子窗口号 + BYTE byScale; /*显示模式,0-真实显示,1-缩放显示( 针对BNC )*/ + DWORD dwResolution;//分辨率 + BYTE byJoinDecChan[MAX_WINDOWS_V41];/*各个子窗口关联的解码通道*/ + BYTE byJoinDecoderId[MAX_WINDOWS_V41];/*槽位号*/ + //显示窗口所解视频分辨率,1-D1,2-720P,3-1080P,设备端需要根据此//分辨率进行解码通道的分配,如1分屏配置成1080P,则设备会把4个解码通道都分配给此解码通道 BYTE byDecResolution[MAX_WINDOWS_V41]; - BYTE byRow;//ڵе - BYTE byColumn;//ڵе + BYTE byRow;//大屏所在的行的序号 + BYTE byColumn;//大屏所在的列的序号 BYTE byRes2[5]; - NET_DVR_RECTCFG struDisp; //ǽʾλ + NET_DVR_RECTCFG struDisp; //电视墙显示位置 } NET_DVR_SCENEDISPCFG,*LPNET_DVR_SCENEDISPCFG; typedef struct tagDEV_CHAN_INFO_SCENE { - NET_DVR_IPADDR struIP; /* DVR IPַ */ - WORD wDVRPort; /* ˿ں */ - BYTE byChannel; /* ͨţ9000豸IPC룬ͨŴ33ʼ */ - BYTE byTransProtocol; /* Э0-TCP1-UDP 2-MCAST3-RTP*/ - BYTE byTransMode; /* ģʽ 0 1*/ - BYTE byFactoryType; /*ǰ豸*/ - BYTE byDeviceType; //豸ͣ1-IPC2- ENCODER + NET_DVR_IPADDR struIP; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byChannel; /* 通道号,对于9000等设备的IPC接入,通道号从33开始 */ + BYTE byTransProtocol; /* 传输协议类型0-TCP,1-UDP ,2-MCAST,3-RTP*/ + BYTE byTransMode; /* 传输码流模式 0-主码流 1-子码流*/ + BYTE byFactoryType; /*前端设备厂家类型*/ + BYTE byDeviceType; //设备类型,1-IPC,2- ENCODER BYTE byRes[5]; - BYTE sUserName[NAME_LEN]; /* ½ʺ */ - BYTE sPassword[PASSWD_LEN]; /* */ + BYTE sUserName[NAME_LEN]; /* 布防主机登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /* 布防主机密码 */ } NET_DVR_DEV_CHAN_INFO_SCENE,*LPNET_DVR_DEV_CHAN_INFO_SCENE; -/*ý*/ +/*流媒体服务器基本配置*/ typedef struct tagSTREAM_MEDIA_SERVER_CFG_SCENE { - BYTE byValid; /*Ƿýȡ,0ʾЧ*/ + BYTE byValid; /*是否启用流媒体服务器取流,0表示无效*/ BYTE byRes1[3]; - NET_DVR_IPADDR struDevIP; /*ýַ*/ - WORD wDevPort; /*ý˿*/ - BYTE byTransmitType; /*Э0-TCP1-UDP */ + NET_DVR_IPADDR struDevIP; /*流媒体服务器地址*/ + WORD wDevPort; /*流媒体服务器端口*/ + BYTE byTransmitType; /*传输协议类型0-TCP,1-UDP */ BYTE byRes2[5]; }NET_DVR_STREAM_MEDIA_SERVER_CFG_SCENE,*LPNET_DVR_STREAM_MEDIA_SERVER_CFG_SCENE; @@ -28101,30 +28101,30 @@ typedef struct tagPU_STREAM_CFG_SCENE typedef struct tagNET_DVR_CYC_SUR_CHAN_ELE_SCENE { - BYTE byEnable; /* Ƿ 0 1*/ + BYTE byEnable; /* 是否启用 0-否 1-启用*/ BYTE byRes[3]; NET_DVR_STREAM_MEDIA_SERVER_CFG_SCENE struStreamMediaSvrCfg; - NET_DVR_DEV_CHAN_INFO_SCENE struDecChanInfo; /*ѲͨϢ*/ + NET_DVR_DEV_CHAN_INFO_SCENE struDecChanInfo; /*轮巡解码通道信息*/ }NET_DVR_CYC_SUR_CHAN_ELE_SCENE,*LPNET_DVR_CYC_SUR_CHAN_ELE_SCENE; -//Ѳṹ +//轮巡解码结构 typedef struct tagNET_DVR_MATRIX_LOOP_DECINFO_SCENE { - WORD wPoolTime; /*ѯ*/ + WORD wPoolTime; /*轮询间隔*/ BYTE byRes1[2]; NET_DVR_CYC_SUR_CHAN_ELE_SCENE struChanArray[MAX_CYCLE_CHAN/*16*/]; BYTE byRes2[4]; } NET_DVR_MATRIX_LOOP_DECINFO_SCENE,*LPNET_DVR_MATRIX_LOOP_DECINFO_SCENE; -//ͨýṹ +//单个解码通道配置结构体 typedef struct tagNET_DVR_DECODECHANCFG_SCENE/*struct size : 2064*/ { - BYTE byDecodeEnable;//ͣ־0-ֹͣ1-ö̬룬2-Ѳ - BYTE bySlotNum;//λ + BYTE byDecodeEnable;//解码起停标志,0-停止,1-启用动态解码,2-启用轮巡解码 + BYTE bySlotNum;//槽位号 BYTE byDecChan; - BYTE byJointAllDecodeChan; //Ƿͨ 0-1- - BYTE byJointSlotNum; //IJλţIJλţ - BYTE byJointChanNum; //ͨţͨţ + BYTE byJointAllDecodeChan; //是否关联解码通道 0-不关联,1-关联 + BYTE byJointSlotNum; //关联的槽位号(解码板的槽位号) + BYTE byJointChanNum; //关联的通道号(解码板通道号) BYTE byRes[2]; union { @@ -28135,9 +28135,9 @@ typedef struct tagNET_DVR_DECODECHANCFG_SCENE/*struct size : 2064*/ typedef struct tagNET_DVR_BIGSCREENCFG_SCENE { - BYTE byAllValid; /*ʹܱ־ */ - BYTE byAssociateBaseMap;//ĵͼţ0 - BYTE byEnableSpartan;//ʹܣ1-0- + BYTE byAllValid; /*漫游使能标志 */ + BYTE byAssociateBaseMap;//关联的底图序号,0代表不关联 + BYTE byEnableSpartan;//大屏畅显使能,1-开,0-关 BYTE byRes; NET_DVR_WINCFG struWinCfg[MAX_LAYERNUMS]; NET_DVR_BIGSCREENCFG struBigScreen; @@ -28147,14 +28147,14 @@ typedef struct tagNET_DVR_MATRIX_SCENECFG { DWORD dwSize; BYTE sSceneName[NAME_LEN]; - BYTE byBigScreenNums;//ĸֵͨȡ + BYTE byBigScreenNums;//大屏的个数,最大值通过能力集获取 BYTE byRes1[3]; - WORD wDecChanNums;//нͨĸ - WORD wDispChanNums;//ʾͨĸ + WORD wDecChanNums;//场景中解码通道的个数 + WORD wDispChanNums;//场景中显示通道的个数 BYTE byRes2[12]; - BYTE *pBigScreenBuffer;//û, byBigScreenNumssizeof(NET_DVR_BIGSCREENCFG_SCENE) - BYTE *pDecChanBuffer;//ͨû, wDecChanNumssizeof(NET_DVR_DECODECHANCFG_SCENE) - BYTE *pDispChanBuffer;//ʾͨû, wDispChanNumssizeof(NET_DVR_SCENEDISPCFG) + BYTE *pBigScreenBuffer;//大屏配置缓冲区, byBigScreenNums×sizeof(NET_DVR_BIGSCREENCFG_SCENE) + BYTE *pDecChanBuffer;//解码通道配置缓冲区, wDecChanNums×sizeof(NET_DVR_DECODECHANCFG_SCENE) + BYTE *pDispChanBuffer;//显示通道配置缓冲区, wDispChanNums×sizeof(NET_DVR_SCENEDISPCFG) }NET_DVR_MATRIX_SCENECFG, *LPNET_DVR_MATRIX_SCENECFG; @@ -28162,55 +28162,55 @@ typedef struct tagNET_DVR_MATRIX_SCENECFG typedef struct tagNET_DVR_BIGSCREENASSOCIATECFG { DWORD dwSize; - BYTE byEnableBaseMap;//ʹܵͼʾ - BYTE byAssociateBaseMap;//ĵͼţ0 - BYTE byEnableSpartan;//ʹܣ1-0- + BYTE byEnableBaseMap;//使能底图显示 + BYTE byAssociateBaseMap;//关联的底图序号,0代表不关联 + BYTE byEnableSpartan;//大屏畅显使能,1-开,0-关 BYTE byRes[21]; } NET_DVR_BIGSCREENASSOCIATECFG, *LPNET_DVR_BIGSCREENASSOCIATECFG; -/**************************************************************/ -#define MAX_WIN_COUNT 224 //ֵ֧󿪴 +/*******************************窗口设置*******************************/ +#define MAX_WIN_COUNT 224 //支持的最大开窗数 typedef struct tagNET_DVR_SCREEN_WINCFG { DWORD dwSize; BYTE byVaild; - BYTE byInputType; //CAM_MDOE - WORD wInputIdx; /*Դ*/ - DWORD dwLayerIdx; /*ͼ㣬0Ϊײ*/ - NET_DVR_RECTCFG struWin; //ĿĴ(ʾǽ) - BYTE byWndIndex; //ں - BYTE byCBD; //0-ޣ1-2- - BYTE bySubWnd; //0ǣ1 + BYTE byInputType; //见CAM_MDOE + WORD wInputIdx; /*输入源索引*/ + DWORD dwLayerIdx; /*图层,0为最底层*/ + NET_DVR_RECTCFG struWin; //目的窗口(相对显示墙) + BYTE byWndIndex; //窗口号 + BYTE byCBD; //0-无,1-带背景,2-不带背景 + BYTE bySubWnd; //0不是,1是 BYTE byRes1; - DWORD dwDeviceIndex;//豸 + DWORD dwDeviceIndex;//设备序号 BYTE byRes2[16]; }NET_DVR_SCREEN_WINCFG, *LPNET_DVR_SCREEN_WINCFG; typedef struct tagNET_DVR_WINLIST { DWORD dwSize; - WORD wScreenSeq; //豸 + WORD wScreenSeq; //设备序号 BYTE byRes[10]; - DWORD dwWinNum; //豸صĴ - BYTE *pBuffer; //ϢΪ224*sizeof(NET_DVR_WINCFG) - DWORD dwBufLen; //ָ볤 + DWORD dwWinNum; //设备返回的窗口数量 + BYTE *pBuffer; //窗口信息缓冲区,最大为224*sizeof(NET_DVR_WINCFG) + DWORD dwBufLen; //所分配指针长度 }NET_DVR_WINLIST,*LPNET_DVR_WINLIST; -#define MAX_LAYOUT_COUNT 16 //󲼾 +#define MAX_LAYOUT_COUNT 16 //最大布局数 typedef struct tagNET_DVR_LAYOUTCFG { DWORD dwSize; - BYTE byValid; //ǷЧ + BYTE byValid; //布局是否有效 BYTE byRes1[3]; - BYTE byLayoutName[NAME_LEN/*32*/]; // - NET_DVR_SCREEN_WINCFG struWinCfg[MAX_WIN_COUNT/*224*/]; //ڴڲ + BYTE byLayoutName[NAME_LEN/*32*/]; //布局名称 + NET_DVR_SCREEN_WINCFG struWinCfg[MAX_WIN_COUNT/*224*/]; //布局内窗口参数 BYTE byRes2[16]; }NET_DVR_LAYOUTCFG, *LPNET_DVR_LAYOUTCFG; typedef struct tagNET_DVR_LAYOUT_LIST { DWORD dwSize; - NET_DVR_LAYOUTCFG struLayoutInfo[MAX_LAYOUT_COUNT/*16*/]; //в + NET_DVR_LAYOUTCFG struLayoutInfo[MAX_LAYOUT_COUNT/*16*/]; //所有布局 BYTE byRes[4]; }NET_DVR_LAYOUT_LIST, *LPNET_DVR_LAYOUT_LIST; @@ -28219,7 +28219,7 @@ typedef struct tagNET_DVR_LAYOUT_LIST typedef enum tagNET_DVR_CAM_MODE { - NET_DVR_UNKNOW = 0,//Ч + NET_DVR_UNKNOW = 0,//无效 NET_DVR_CAM_BNC, NET_DVR_CAM_VGA, NET_DVR_CAM_DVI, @@ -28232,125 +28232,125 @@ typedef enum tagNET_DVR_CAM_MODE NET_DVR_CAM_USB, NET_DVR_CAM_SDI, NET_DVR_CAM_HDI, - NET_DVR_CAM_DP, //Ƶۺƽ̨ + NET_DVR_CAM_DP, //此类型视频综合平台不返回 NET_DVR_CAM_HDTVI, - NET_DVR_CAM_JOINT, //ƴźԴ + NET_DVR_CAM_JOINT, //拼接信号源 NET_DVR_CAM_HDBASET, - NET_DVR_CAM_DVIT, //DVI˫·Ƶۺƽ̨ - NET_DVR_CAM_FUSION, //IPCƴ - NET_DVR_CAM_VSCREEN, // - NET_DVR_CAM_FIBER, // + NET_DVR_CAM_DVIT, //DVI双链路,此类型视频综合平台不返回 + NET_DVR_CAM_FUSION, //多IPC拼接 + NET_DVR_CAM_VSCREEN, //虚拟屏 + NET_DVR_CAM_FIBER, //光纤 NET_DVR_CAM_3GSDI, //3G-SDI - NET_DVR_CAM_DISTRIBUTED_IP, //ֲʽԴ - NET_DVR_CAM_JONIT_X86,// x86ƴϵͳƴͨ - NET_DVR_CAM_TVI, //TVIźԴ + NET_DVR_CAM_DISTRIBUTED_IP, //分布式网络源 + NET_DVR_CAM_JONIT_X86,// x86拼接子系统的拼接通道 + NET_DVR_CAM_TVI, //TVI信号源 }NET_DVR_CAM_MODE; typedef struct tagNET_DVR_INPUTSTREAMCFG { DWORD dwSize ; BYTE byValid; - BYTE byCamMode; //źԴͣNET_DVR_CAM_MODE - WORD wInputNo; //źԴ0-224 - BYTE sCamName[NAME_LEN] ; //źԴ - NET_DVR_VIDEOEFFECT struVideoEffect; //Ƶ - NET_DVR_PU_STREAM_CFG struPuStream; //ipʱʹ - WORD wBoardNum ; //źԴڵİ忨 - WORD wInputIdxOnBoard; //źԴڰ忨ϵλ - DWORD dwResolution;//ֱ - BYTE byVideoFormat;//ƵʽVIDEO_STANDARD - BYTE byStatus; //źԴ״̬0-ֶЧ 1-ź 2-ź 3-쳣 - BYTE sGroupName[NAME_LEN/*32*/]; //źԴ - BYTE byJointMatrix; // 0- 1- + BYTE byCamMode; //信号输入源类型,见NET_DVR_CAM_MODE + WORD wInputNo; //信号源序号0-224 + BYTE sCamName[NAME_LEN] ; //信号输入源名称 + NET_DVR_VIDEOEFFECT struVideoEffect; //视频参数 + NET_DVR_PU_STREAM_CFG struPuStream; //ip输入时使用 + WORD wBoardNum ; //信号源所在的板卡号 + WORD wInputIdxOnBoard; //信号源在板卡上的位置 + DWORD dwResolution;//分辨率 + BYTE byVideoFormat;//视频制式,见VIDEO_STANDARD + BYTE byStatus; //信号源状态,0-字段无效 1-有信号 2-无信号 3-异常 + BYTE sGroupName[NAME_LEN/*32*/]; //网络信号源分组 组名 + BYTE byJointMatrix; // 关联矩阵 ,0-不关联 1-关联 BYTE byRes; }NET_DVR_INPUTSTREAMCFG, *LPNET_DVR_INPUTSTREAMCFG; typedef struct tagNET_DVR_INPUTSTREAM_LIST { DWORD dwSize; - NET_DVR_INPUTSTREAMCFG struInputStreamInfo[MAX_CAM_COUNT]; //źԴ + NET_DVR_INPUTSTREAMCFG struInputStreamInfo[MAX_CAM_COUNT]; //所有信号源 BYTE byRes[4]; }NET_DVR_INPUTSTREAM_LIST, *LPNET_DVR_INPUTSTREAM_LIST; -/**************************************************************/ -/*ͨ*/ +/*******************************输出参数配置*******************************/ +/*输出通道管理*/ typedef struct tagNET_DVR_OUTPUTPARAM { DWORD dwSize; - BYTE byMonMode; /*ģʽ,1-BNC,2-VGA,3-DVI,4-HDMI*/ + BYTE byMonMode; /*输出连接模式,1-BNC,2-VGA,3-DVI,4-HDMI*/ BYTE byRes1[3]; - DWORD dwResolution; /*ֱʣȡֵ֧Ľ*/ - NET_DVR_VIDEOEFFECT struVideoEffect; /*ͨƵ*/ + DWORD dwResolution; /*分辨率,根据能力集获取所支持的进行设置*/ + NET_DVR_VIDEOEFFECT struVideoEffect; /*输出通道视频参数配置*/ BYTE byRes2[32]; }NET_DVR_OUTPUTPARAM, *LPNET_DVR_OUTPUTPARAM; typedef struct tagNET_DVR_OUTPUTCFG { DWORD dwSize; - BYTE byScreenLayX; //- - BYTE byScreenLayY; //- - WORD wOutputChanNum; //ͨ0ʾ豸ֵ֧ͨȡֵʾʵͨ + BYTE byScreenLayX; //大屏布局-横坐标 + BYTE byScreenLayY; //大屏布局-纵坐标 + WORD wOutputChanNum; //输出通道个数,0表示设备支持的最大输出通道个数,最大个数从能力集获取,其他值表示实际输出通道个数 BYTE byRes1[4]; - NET_DVR_OUTPUTPARAM struOutputParam; /*ͨƵ*/ - BYTE sWallName[16]; //ǽ + NET_DVR_OUTPUTPARAM struOutputParam; /*输出通道视频参数配置*/ + BYTE sWallName[16]; //电视墙名称 BYTE byRes2[8]; }NET_DVR_OUTPUTCFG, *LPNET_DVR_OUTPUTCFG; -/**************************************************************/ -#define SCREEN_PROTOCOL_NUM 20 //ֵ֧Э -// +/*******************************能力集*******************************/ +#define SCREEN_PROTOCOL_NUM 20 //支持的最大大屏控制器协议数 +//多屏服务器能力集 typedef struct tagNET_DVR_SCREENSERVER_ABILITY { - DWORD dwSize; /*ṹ*/ - BYTE byIsSupportScreenNum; /*ִ֧Ŀ*/ - BYTE bySerialNums; //ڸ + DWORD dwSize; /*结构长度*/ + BYTE byIsSupportScreenNum; /*所支持大屏控制器的数目*/ + BYTE bySerialNums; //串口个数 BYTE byMaxInputNums; BYTE byMaxLayoutNums; BYTE byMaxWinNums; BYTE byRes1[19]; - BYTE byMaxScreenLayX;//- - BYTE byMaxScreenLayY;//- - WORD wMatrixProtoNum; /*ЧĴЭĿ*/ - NET_DVR_PROTO_TYPE struScreenProto[SCREEN_PROTOCOL_NUM];/*Эб*/ + BYTE byMaxScreenLayX;//大屏布局-最大横坐标大屏数 + BYTE byMaxScreenLayY;//大屏布局-最大纵坐标大屏数 + WORD wMatrixProtoNum; /*有效的大屏协议数目*/ + NET_DVR_PROTO_TYPE struScreenProto[SCREEN_PROTOCOL_NUM];/*最大协议列表*/ BYTE byRes2[24]; }NET_DVR_SCREENSERVER_ABILITY, *LPNET_DVR_SCREENSERVER_ABILITY; -// +//多屏控制器能力集 typedef struct tagNET_DVR_SCREENCONTROL_ABILITY { - DWORD dwSize; /*ṹ*/ - BYTE byLayoutNum; /* ָ*/ - BYTE byWinNum; /*Ļڸ*/ - BYTE byOsdNum; /*OSD*/ - BYTE byLogoNum; /*Logo*/ - BYTE byInputStreamNum; //Դ ---豸֧ͨԴԴ - BYTE byOutputChanNum; //ͨ---豸֧ͨ - BYTE byCamGroupNum; /**/ - BYTE byPlanNum; /*Ԥ*/ + DWORD dwSize; /*结构长度*/ + BYTE byLayoutNum; /* 布局个数*/ + BYTE byWinNum; /*屏幕窗口个数*/ + BYTE byOsdNum; /*OSD个数*/ + BYTE byLogoNum; /*Logo个数*/ + BYTE byInputStreamNum; //输入源个数 ---设备支持最大输入通道个数(包括本地输入源和网络输入源) + BYTE byOutputChanNum; //输出通道个数---设备支持最大输出通道个数 + BYTE byCamGroupNum; /*分组个数*/ + BYTE byPlanNum; /*预案个数*/ BYTE byRes1[5]; - BYTE byIsSupportPlayBack; /*Ƿֻ֧ط*/ - BYTE byMatrixInputNum; //֧ - BYTE byMatrixOutputNum; //֧ - NET_DVR_DISPINFO struVgaInfo;//VGAϢ - NET_DVR_DISPINFO struBncInfo;//BNCϢ - NET_DVR_DISPINFO struHdmiInfo;//HDMIϢ - NET_DVR_DISPINFO struDviInfo;//DVIϢ - BYTE byMaxUserNums;//֧û - BYTE byPicSpan; //ͼȣһŵͼɸǵĻ - WORD wDVCSDevNum; //ֲʽ豸 - WORD wNetSignalNum; //Դ - WORD wBaseCoordinateX;//׼ + BYTE byIsSupportPlayBack; /*是否支持回放*/ + BYTE byMatrixInputNum; //支持输入矩阵最大个数 + BYTE byMatrixOutputNum; //支持输出矩阵最大个数 + NET_DVR_DISPINFO struVgaInfo;//VGA输出信息 + NET_DVR_DISPINFO struBncInfo;//BNC输出信息 + NET_DVR_DISPINFO struHdmiInfo;//HDMI输出信息 + NET_DVR_DISPINFO struDviInfo;//DVI输出信息 + BYTE byMaxUserNums;//支持用户数 + BYTE byPicSpan; //底图跨度,一张底图最多可覆盖的屏幕数 + WORD wDVCSDevNum; //分布式大屏控制器最大设备数 + WORD wNetSignalNum; //最大网络输入源个数 + WORD wBaseCoordinateX;//基准坐标 WORD wBaseCoordinateY; - BYTE byExternalMatrixNum; //Ӿ + BYTE byExternalMatrixNum; //最大外接矩阵个数 BYTE byRes2[49]; }NET_DVR_SCREENCONTROL_ABILITY, *LPNET_DVR_SCREENCONTROL_ABILITY; -/*******************************ź״̬*******************************/ +/*******************************输入信号状态*******************************/ typedef struct tagNET_DVR_ANALOGINPUTSTATUS { - DWORD dwLostFrame; /*Ƶ붪֡*/ - BYTE byHaveSignal; /*ǷƵź*/ - BYTE byVideoFormat; /*Ƶʽ1NTSC,2PAL,0*/ + DWORD dwLostFrame; /*视频输入丢帧数*/ + BYTE byHaveSignal; /*是否有视频信号输入*/ + BYTE byVideoFormat; /*视频制式,1:NTSC,2:PAL,0:无*/ BYTE byRes[46]; } NET_DVR_ANALOGINPUTSTATUS, *LPNET_DVR_ANALOGINPUTSTATUS; @@ -28362,8 +28362,8 @@ typedef union tagNET_DVR_INPUTSTATUS_UNION typedef struct tagNET_DVR_INPUTSTATUS { - WORD wInputNo; /*źԴ*/ - BYTE byInputType; //NET_DVR_CAM_MODE + WORD wInputNo; /*信号源序号*/ + BYTE byInputType; //见NET_DVR_CAM_MODE BYTE byRes1[9]; NET_DVR_INPUTSTATUS_UNION struStatusUnion; BYTE byRes2[16]; @@ -28373,43 +28373,43 @@ typedef struct tagNET_DVR_SCREENINPUTSTATUS { DWORD dwSize; BYTE byRes[12]; - DWORD dwNums; //豸صԴ״̬ - BYTE *pBuffer; // - DWORD dwBufLen; //ָ볤ȣ + DWORD dwNums; //设备返回的输入源状态的数量 + BYTE *pBuffer; //缓冲区 + DWORD dwBufLen; //所分配指针长度,输入参数 }NET_DVR_SCREENINPUTSTATUS,*LPNET_DVR_SCREENINPUTSTATUS; typedef struct tagNET_DVR_SCREENALARMCFG { DWORD dwSize; - BYTE byAlarmType; //ͣ1-Ӱγ2-Ӱ룬3-ϵͳ״̬쳣4-ϵͳָָ 5-Դ쳣 6-¶ȱ 7-FPGA汾ƥ 8-Ԥʼ 9-Ԥ 10- 11-IPַͻ12-쳣 - BYTE byBoardType; // 1- 2- 3-壬4-壬Ϊ1236ʱʹ - BYTE bySubException; //쳣ʱ쳣 1- ֱı 2-˿͸ı3-ֱʴ4-ֱʸı䵼½Դ㣬رոԴӦڡ5-ֱʸı䣬ѿű1/88Χ6-ֱʻָ,7-ֱʸı䵼,豸رմ + BYTE byAlarmType; //报警类型,1-子板拔出,2-子板插入,3-子系统状态异常,4-子系统恢复恢复 5-输入源异常 6-温度报警 7-FPGA版本不匹配 8-预案开始 9-预案结束 10-解码板断网 11-解码板IP地址冲突,12-风扇异常 + BYTE byBoardType; // 1-输入板 2-输出板 ,3-主板,4-背板,报警类型为1,2,3,6的时候使用 + BYTE bySubException; //输入异常时具体子异常 1- 分辨率正常改变 2-输入端口类型改变3-分辨率错误4-分辨率改变导致解码资源不足,关闭该输入源对应窗口。5-分辨率改变,导致已开窗的缩放比例不在1/8到8倍范围。6-分辨率恢复正常,7-分辨率改变导致输出板数据量超限,设备关闭窗口 BYTE byRes1; - WORD wStartInputNum; // 쳣Դ쳣㣩 - WORD wEndInputNum; // 쳣Դ쳣յ㣩 + WORD wStartInputNum; // 异常输入源(异常起点) + WORD wEndInputNum; // 异常输入源(异常终点) BYTE byRes2[16]; }NET_DVR_SCREENALARMCFG, *LPNET_DVR_SCREENALARMCFG; typedef struct tagNET_DVR_MATRIX_CFG { - BYTE byValid; //жǷģǷЧ - BYTE byCommandProtocol; //ģָ4֣ - BYTE byScreenType; // + BYTE byValid; //判断是否是模拟矩阵(是否有效) + BYTE byCommandProtocol; //模拟矩阵的指令(4种) + BYTE byScreenType; //保留 BYTE byRes1; - BYTE byScreenToMatrix[32]; //ģĻĶӦϵ + BYTE byScreenToMatrix[32]; //模拟矩阵的输出与屏幕的对应关系 BYTE byRes2[4]; }NET_DVR_MATRIX_CFG, *LPNET_DVR_MATRIX_CFG; typedef struct tagNET_DVR_DIGITALSCREEN { - NET_DVR_IPADDR struAddress;/*豸Ϊ豸ʱIPϢ*/ - WORD wPort; //ͨ - BYTE byRes[26]; // + NET_DVR_IPADDR struAddress;/*设备为数字设备时的IP信息*/ + WORD wPort; //通道号 + BYTE byRes[26]; //保留 }NET_DVR_DIGITALSCREEN, *LPNET_DVR_DIGITALSCREEN; typedef struct tagNET_DVR_ANALOGSCREEN { - BYTE byDevSerPortNum; /*豸Ĵں*/ - BYTE byScreenSerPort; /*ӴĴں*/ + BYTE byDevSerPortNum; /*连接设备的串口号*/ + BYTE byScreenSerPort; /*连接大屏的串口号*/ BYTE byRes[130]; NET_DVR_MATRIX_CFG struMatrixCfg; }NET_DVR_ANALOGSCREEN, *LPNET_DVR_ANALOGSCREEN; @@ -28422,47 +28422,47 @@ typedef union tagNET_DVR_SCREEN_UNION typedef struct tagNET_DVR_SCREEN_SCREENINFO { DWORD dwSize; - BYTE byValid; //ǷЧ - BYTE nLinkMode; //ӷʽ0-ڣ1- - BYTE byDeviceType; //豸ͺţȡ - BYTE byScreenLayX; //- - BYTE byScreenLayY; //- + BYTE byValid; //是否有效 + BYTE nLinkMode; //连接方式,0-串口,1-网口 + BYTE byDeviceType; //设备型号,能力集获取 + BYTE byScreenLayX; //大屏布局-横坐标 + BYTE byScreenLayY; //大屏布局-纵坐标 BYTE byRes1[3]; - BYTE sUserName[NAME_LEN]; /*¼û*/ - BYTE sPassword[PASSWD_LEN]; /*¼*/ - BYTE sDevName[NAME_LEN]; /*豸*/ + BYTE sUserName[NAME_LEN]; /*登录用户名*/ + BYTE sPassword[PASSWD_LEN]; /*登录密码*/ + BYTE sDevName[NAME_LEN]; /*设备名称*/ NET_DVR_SCREEN_UNION struScreenUnion; - BYTE byInputNum; // Դ - BYTE byOutputNum; // Դ - BYTE byCBDNum; //CBD + BYTE byInputNum; // 输入源个数 + BYTE byOutputNum; // 输出源个数 + BYTE byCBDNum; //CBD个数 BYTE byRes2[29]; } NET_DVR_SCREEN_SCREENINFO, *LPNET_DVR_SCREEN_SCREENINFO; -/*******************************ͼϴ*******************************/ +/*******************************底图上传*******************************/ typedef struct tagNET_DVR_BASEMAP_CFG { - BYTE byScreenIndex; //Ļ - BYTE byMapNum; /*ָ˶ٿ */ + BYTE byScreenIndex; //屏幕的序号 + BYTE byMapNum; /*被分割成了多少块 */ BYTE res[2]; - WORD wSourWidth; /* ԭͼƬĿ */ - WORD wSourHeight; /* ԭͼƬĸ߶ */ + WORD wSourWidth; /* 原图片的宽度 */ + WORD wSourHeight; /* 原图片的高度 */ }NET_DVR_BASEMAP_CFG, LPNET_DVR_BASEMAP_CFG; typedef struct tagNET_DVR_PICCFG { - DWORD dwSize; //С - BYTE byUseType; //1-ͼ2-GIFͼƬ3-CADͼƬ 4-ͼƬ - BYTE bySequence;// - BYTE byOverlayEnabled; //ͼƬʹܣǷϴͼƬͼƬӲ 1-Ӳ0- + DWORD dwSize; //大小 + BYTE byUseType; //1-底图,2-GIF图片,3-CAD图片 4-输出口图片 + BYTE bySequence;//序号 + BYTE byOverlayEnabled; //图片叠加使能,是否在上传图片包含图片叠加参数 1-包含叠加参数,0-不包含 BYTE byRes[1]; - NET_DVR_BASEMAP_CFG struBasemapCfg; //ͼԺ豸Ч - BYTE sPicName[NAME_LEN];//ͼƬ - DWORD dwVideoWall; //ǽţ1ֽǽţں̶ֵΪ1ɣ+1ֽͨͨţ+2ֽڴںţ - BYTE byFlash; //ͼƬ˸ʹܣ1-˸0-˸ - BYTE byTranslucent; //ͼƬ͸ʹܣ1-͸0-͸ - BYTE byShowEnabled; //ͼƬʾʹܣ1-ʾ0- - BYTE byPictureType; //ͼƬͣ1-bmp2-jpg3-png + NET_DVR_BASEMAP_CFG struBasemapCfg; //底图参数对合码器设备无效 + BYTE sPicName[NAME_LEN];//图片名称 + DWORD dwVideoWall; //墙号(1字节墙号(对于合码器,该值固定为1即可)+1字节通道输出(合码通道号)+2字节窗口号) + BYTE byFlash; //图片闪烁使能,1-闪烁,0-不闪烁 + BYTE byTranslucent; //图片半透明使能,1-半透明,0-不半透明 + BYTE byShowEnabled; //图片显示使能,1-显示,0-隐藏 + BYTE byPictureType; //图片类型,1-bmp,2-jpg,3-png,…… BYTE byRes2[24]; }NET_DVR_PICTURECFG, *LPNET_DVR_PICTURECFG; @@ -28471,45 +28471,45 @@ typedef struct tagNET_DVR_PICCFG typedef struct tagNET_DVR_OSDCFG { DWORD dwSize; - BYTE byValid; /*ǷЧ 0Ч 1Ч*/ - BYTE byDispMode; //ʾģʽ1-͸2-͸3-ģʽ - BYTE byFontColorY; /*ɫY,0-255*/ - BYTE byFontColorU; /*ɫU,0-255*/ - BYTE byFontColorV; /*ɫV,0-255*/ - BYTE byBackColorY; /*ɫY,0-255*/ - BYTE byBackColorU; /*ɫU,0-255*/ - BYTE byBackColorV; /*ɫV,0-255*/ - WORD wXCoordinate; /*OSDĻϽλx*/ - WORD wYCoordinate; /*OSDĻϽλy*/ - WORD wWidth; /*OSD*/ - WORD wHeight; /*OSD߶*/ - DWORD dwCharCnt; /*ַĸ*/ - WORD wOSDChar[MAX_OSDCHAR_NUM]; /*OSDַ*/ + BYTE byValid; /*是否有效 0无效 1有效*/ + BYTE byDispMode; //显示模式,1-透明,2-半透明,3-覆盖三种模式 + BYTE byFontColorY; /*字体颜色Y,0-255*/ + BYTE byFontColorU; /*字体颜色U,0-255*/ + BYTE byFontColorV; /*字体颜色V,0-255*/ + BYTE byBackColorY; /*背景颜色Y,0-255*/ + BYTE byBackColorU; /*背景颜色U,0-255*/ + BYTE byBackColorV; /*背景颜色V,0-255*/ + WORD wXCoordinate; /*OSD在屏幕左上角位置x*/ + WORD wYCoordinate; /*OSD在屏幕左上角位置y*/ + WORD wWidth; /*OSD宽度*/ + WORD wHeight; /*OSD高度*/ + DWORD dwCharCnt; /*字符的个数*/ + WORD wOSDChar[MAX_OSDCHAR_NUM]; /*OSD字符内容*/ BYTE byRes[32]; }NET_DVR_OSDCFG, *LPNET_DVR_OSDCFG; -/*******************************ȡϢ*******************************/ +/*******************************获取串口信息*******************************/ typedef struct tagNET_DVR_SERIAL_CONTROL { DWORD dwSize ; - BYTE bySerialNum; // ڸ + BYTE bySerialNum; // 串口个数 BYTE byRes1[3]; BYTE bySerial[32]; BYTE byRes2[32]; }NET_DVR_SERIAL_CONTROL, *LPNET_DVR_SERIAL_CONTROL; -/*******************************Ļ*******************************/ -//ĻԴ +/*******************************屏幕控制*******************************/ +//屏幕输入源控制 typedef enum tagINPUT_INTERFACE_TYPE { INTERFACE_VGA = 0, - INTERFACE_SVIDEO, // 2046NL֧֣2046NH֧ + INTERFACE_SVIDEO, // 2046NL不支持,2046NH支持 INTERFACE_YPBPR, INTERFACE_DVI , INTERFACE_BNC , - INTERFACE_DVI_LOOP,//(ͨ) 2046NH֧֣2046NL֧ - INTERFACE_BNC_LOOP, //(ͨ) 2046NH֧֣2046NL.֧ + INTERFACE_DVI_LOOP,//(环通) 2046NH不支持,2046NL支持 + INTERFACE_BNC_LOOP, //(环通) 2046NH不支持,2046NL.支持 INTERFACE_HDMI, INTERFACE_IP, INTERFACE_USB, @@ -28519,62 +28519,62 @@ typedef enum tagINPUT_INTERFACE_TYPE }INPUT_INTERFACE_TYPE; typedef struct tagNET_DVR_INPUT_INTERFACE_CTRL { - BYTE byInputSourceType; //INPUT_INTERFACE_TYPE + BYTE byInputSourceType; //见INPUT_INTERFACE_TYPE BYTE byRes[15]; }NET_DVR_INPUT_INTERFACE_CTRL, *LPNET_DVR_INPUT_INTERFACE_CTRL; -//ʾԪɫ +//显示单元颜色控制 typedef struct tagNET_DVR_DISPLAY_COLOR_CTRL { - BYTE byColorType; //1- 2-Աȶ 3-Ͷ 4- - char byScale; //-1 0+1ֵ + BYTE byColorType; //1-亮度 2-对比度 3-饱和度 4-清晰度 + char byScale; //-1 、0、+1三个值 BYTE byRes[14]; }NET_DVR_DISPLAY_COLOR_CTRL, *LPNET_DVR_DISPLAY_COLOR_CTRL; -//ʾԪλÿ +//显示单元位置控制 typedef struct tagNET_DVR_DISPLAY_POSITION_CTRL { - BYTE byPositionType; //1-ˮƽλ 2-ֱλã - char byScale; //-1 0+1ֵ + BYTE byPositionType; //1-水平位置 2-垂直位置, + char byScale; //-1 、0、+1三个值 BYTE byRes[14]; }NET_DVR_DISPLAY_POSITION_CTRL, *LPNET_DVR_DISPLAY_POSITION_CTRL; -/*******************************ĻV41*******************************/ +/*******************************屏幕控制V41*******************************/ typedef struct tagNET_DVR_RECTCFG_EX { - DWORD dwXCoordinate; /*ϽʼX*/ - DWORD dwYCoordinate; /*ϽY*/ - DWORD dwWidth; /*ο*/ - DWORD dwHeight; /*θ߶*/ + DWORD dwXCoordinate; /*矩形左上角起始点X坐标*/ + DWORD dwYCoordinate; /*矩形左上角Y坐标*/ + DWORD dwWidth; /*矩形宽度*/ + DWORD dwHeight; /*矩形高度*/ BYTE byRes[4]; }NET_DVR_RECTCFG_EX, *LPNET_DVR_RECTCFG_EX; -/*******************************Ԥ*******************************/ -#define MAX_PLAN_ACTION_NUM 32 //Ԥ -#define DAYS_A_WEEK 7 //һ7 -#define MAX_PLAN_COUNT 16 //Ԥ +/*******************************预案管理*******************************/ +#define MAX_PLAN_ACTION_NUM 32 //预案动作个数 +#define DAYS_A_WEEK 7 //一周7天 +#define MAX_PLAN_COUNT 16 //预案个数 typedef enum { - NET_DVR_SWITCH_LAYOUT = 1, // л Ĭ - NET_DVR_SCREEN_POWER_OFF, // رմĻʾ - NET_DVR_SCREEN_POWER_ON, // 򿪴Ļʾ - NET_DVR_SWITCH_BASEMAP //ͼл + NET_DVR_SWITCH_LAYOUT = 1, // 布局切换 默认 + NET_DVR_SCREEN_POWER_OFF, // 关闭大屏幕显示 + NET_DVR_SCREEN_POWER_ON, // 打开大屏幕显示 + NET_DVR_SWITCH_BASEMAP //底图切换 }NET_DVR_PLAN_OPERATE_TYPE; -/*ԤϢ*/ +/*预案项信息*/ typedef struct tagNET_DVR_PLAN_INFO { - BYTE byValid; // ǷЧ - BYTE byType; // NET_DVR_PLAN_OPERATE_TYPE - WORD wLayoutNo; // ֺ - BYTE byScreenStyle; //Ļͺţػã1ǵ2Ǹ - BYTE byBaseMapType; //ͼͣ1-ͼƬͼ2-ͼͼлʱЧ + BYTE byValid; // 该项是否有效 + BYTE byType; // 见定义NET_DVR_PLAN_OPERATE_TYPE + WORD wLayoutNo; // 布局号 + BYTE byScreenStyle; //屏幕型号,开关机所用,1是低亮,2是高亮 + BYTE byBaseMapType; //底图类型,1-图片底图,2-超高清输入底图,底图切换时有效 BYTE byRes1[2]; - DWORD dwDelayTime; // һʱ, λ - DWORD dwSerialNo; //ںţĻʱʹ - DWORD dwBaseMapWndNo; //ͼںţͼлʱЧ - DWORD dwBaseMapNo; //ͼţͼлʱЧͼΪ1ʱ˲ΪͼƬţͼΪ2ʱ˲Ϊϵͳţ1ֽ豸+1ֽӰ+2ֽʾţ + DWORD dwDelayTime; // 一个项的运行时间, 单位秒 + DWORD dwSerialNo; //串口号,屏幕控制时使用 + DWORD dwBaseMapWndNo; //底图窗口号,底图切换时有效 + DWORD dwBaseMapNo; //底图号,底图切换时有效;底图类型为1时,此参数为图片序号,底图类型为2时此参数为超高清输入子系统输入号(1字节设备号+1字节子板号+2字节显示输入序号) BYTE byRes2[20]; } NET_DVR_PLAN_INFO, *LPNET_DVR_PLAN_INFO; @@ -28584,77 +28584,77 @@ typedef struct tagNET_DVR_CYCLE_TIME BYTE byRes[3]; NET_DVR_TIME_EX struTime; }NET_DVR_CYCLE_TIME, *LPNET_DVR_CYCLE_TIME; -/*Ԥ*/ +/*预案管理*/ typedef struct tagNET_DVR_PLAN_CFG { DWORD dwSize; - BYTE byValid; // ԤǷЧ - BYTE byWorkMode; // Ԥģʽ 1ʾֶ2Զ3Ԥѭ - BYTE byWallNo; //ǽţ1ʼ - BYTE byPlanNo; //ԤţȡԤбʱЧ0-Ч֧ - BYTE byPlanName[NAME_LEN/*32*/]; //Ԥ - NET_DVR_TIME_EX struTime; // ģʽΪԶʱʹ - NET_DVR_CYCLE_TIME struTimeCycle[DAYS_A_WEEK/*7*/]; /*ѭʱ䣬Ϊһڣꡢ¡ʹá磺struTimeCycle[0]еbyValidֵ1ʾִиԤȡֵΪ[0,6]0죬1һԴ*/ - DWORD dwWorkCount; // Ԥִд - NET_DVR_PLAN_INFO strPlanEntry[MAX_PLAN_ACTION_NUM/*32*/]; // Ԥִе - DWORD dwPlanNo; //4ֽԤţͻͳһʹ4ֽڵԤţֽڵԤŲʹ + BYTE byValid; // 该预案是否有效 + BYTE byWorkMode; // 预案工作模式 1表示手动,2自动,3预案循环 + BYTE byWallNo; //电视墙号,从1开始 + BYTE byPlanNo; //预案号,获取预案列表时有效,0-无效或不支持 + BYTE byPlanName[NAME_LEN/*32*/]; //预案名称 + NET_DVR_TIME_EX struTime; // 工作模式为自动时使用 + NET_DVR_CYCLE_TIME struTimeCycle[DAYS_A_WEEK/*7*/]; /*循环时间,周期为一个星期,年、月、日三个参数不使用。如:struTimeCycle[0]中的byValid的值是1,表示星期天执行该预案。星期取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推*/ + DWORD dwWorkCount; // 预案内容执行次数 + NET_DVR_PLAN_INFO strPlanEntry[MAX_PLAN_ACTION_NUM/*32*/]; // 预案执行的内容 + DWORD dwPlanNo; //4字节预案号,客户端统一使用4字节的预案号,单字节的预案号不再使用 BYTE byRes2[60]; }NET_DVR_PLAN_CFG, *LPNET_DVR_PLAN_CFG; -/*******************************ȡ豸״̬*******************************/ -/*Ԥб*/ +/*******************************获取设备状态*******************************/ +/*预案列表*/ typedef struct tagNET_DVR_PLAN_LIST { DWORD dwSize; - DWORD dwPlanNums; //豸źԴ - BYTE *pBuffer; //ָdwInputSignalNumsNET_DVR_PLAN_CFGṹСĻ - BYTE byWallNo; //ǽţ1ʼ + DWORD dwPlanNums; //设备输入信号源数量 + BYTE *pBuffer; //指向dwInputSignalNums个NET_DVR_PLAN_CFG结构大小的缓冲区 + BYTE byWallNo; //墙号,从1开始 BYTE byRes1[2]; - DWORD dwBufLen; //仺ȣڵdwInputSignalNumsNET_DVR_PLAN_CFGṹС + DWORD dwBufLen; //所分配缓冲区长度,输入参数(大于等于dwInputSignalNums个NET_DVR_PLAN_CFG结构大小) BYTE byRes2[64]; } NET_DVR_PLAN_LIST,*LPNET_DVR_PLAN_LIST; -/*******************************Ԥ*******************************/ -//ýṹΪͨÿƽṹ +/*******************************预案控制*******************************/ +//该结构体可作为通用控制结构体 typedef struct tagNET_DVR_CONTROL_PARAM { DWORD dwSize; - BYTE sDeviceID[NAME_LEN]; //豸豸ID - WORD wChan; //ͨ - BYTE byIndex; //ȷʾʲô + BYTE sDeviceID[NAME_LEN]; //被控设备的设备ID + WORD wChan; //被控通道 + BYTE byIndex; //控制索引,根据命令确定具体表示什么索引 BYTE byRes1; DWORD dwControlParam; - BYTE byMandatoryAlarm; //1-ʹ 0-ʹ + BYTE byMandatoryAlarm; //1-使能 0-不使能 BYTE byRes2; - WORD wZoneIndex; // - BYTE byOperatorCode[16]; //ؿ - DWORD dwPlanNo; //4ֽԤţͻͳһʹ4ֽڵԤţֽڵԤŲʹ + WORD wZoneIndex; //防区号 + BYTE byOperatorCode[16]; //回控码 + DWORD dwPlanNo; //4字节预案号,客户端统一使用4字节的预案号,单字节的预案号不再使用 BYTE byRes3[8]; }NET_DVR_CONTROL_PARAM, *LPNET_DVR_CONTROL_PARAM; -/*******************************ȡ豸״̬*******************************/ +/*******************************获取设备状态*******************************/ typedef struct tagNET_DVR_DEVICE_RUN_STATUS { DWORD dwSize; - DWORD dwMemoryTotal; //ڴλKbyte - DWORD dwMemoryUsage; //ڴʹλKbyte - BYTE byCPUUsage; //CPUʹʣ0-100 - BYTE byMainFrameTemp; //¶ȣλ϶ - BYTE byBackPanelTemp; //¶ȣλ϶ + DWORD dwMemoryTotal; //内存总量,单位Kbyte + DWORD dwMemoryUsage; //内存使用量,单位Kbyte + BYTE byCPUUsage; //CPU使用率,0-100 + BYTE byMainFrameTemp; //机箱温度,单位:摄氏度 + BYTE byBackPanelTemp; //背板温度,单位:摄氏度 BYTE byRes1; - BYTE byLeftDecResource[32]; //ʣԴԽD1ֱԴΪλbyLeftDecResource[i],ʾλiʣԴ0xffʾЧǽûӣ - float fNetworkFlow; //λKB/sһСλ + BYTE byLeftDecResource[32]; //各解码板剩余解码资源,以解D1分辨率资源为单位,byLeftDecResource[i],表示槽位号i解码板剩余资源,0xff表示无效(非解码板或没插板子) + float fNetworkFlow; //网络流量,单位:KB/s,归一化处理,保留小数点后两位 BYTE byRes2[88]; }NET_DVR_DEVICE_RUN_STATUS, *LPNET_DVR_DEVICE_RUN_STATUS; -// 91ϵHD-SDIDVR Ϣ +// 91系列HD-SDI高清DVR 相机信息 typedef struct tagNET_DVR_ACCESS_CAMERA_INFO { DWORD dwSize; - char sCameraInfo[32]; // ǰϢ - BYTE byInterfaceType; // ǰ˽ӿͣ1:VGA, 2:HDMI, 3:YPbPr 4:SDI 5:FC + char sCameraInfo[32]; // 前端相机信息 + BYTE byInterfaceType; // 前端接入接口类型,1:VGA, 2:HDMI, 3:YPbPr 4:SDI 5:FC BYTE byRes1[3]; DWORD dwChannel; BYTE byRes[24]; @@ -28662,120 +28662,120 @@ typedef struct tagNET_DVR_ACCESS_CAMERA_INFO typedef struct tagNET_DVR_AUDIO_INPUT_PARAM { - BYTE byAudioInputType; //Ƶͣ0-mic in1-line in + BYTE byAudioInputType; //音频输入类型,0-mic in,1-line in BYTE byVolume; //volume,[0-100] - BYTE byEnableNoiseFilter; //Ƿ-أ- + BYTE byEnableNoiseFilter; //是否开启声音过滤-关,-开 BYTE byres[5]; }NET_DVR_AUDIO_INPUT_PARAM, *LPNET_DVR_AUDIO_INPUT_PARAM; typedef struct tagNET_DVR_CAMERA_DEHAZE_CFG { DWORD dwSize; - BYTE byDehazeMode; //0-ã1-Զģʽ2- - BYTE byLevel; //ȼ0-100 + BYTE byDehazeMode; //0-不启用,1-自动模式,2-开 + BYTE byLevel; //等级,0-100 BYTE byRes[6]; }NET_DVR_CAMERA_DEHAZE_CFG, *LPNET_DVR_CAMERA_DEHAZE_CFG; typedef struct tagNET_DVR_INPUT_SIGNAL_LIST { DWORD dwSize; - DWORD dwInputSignalNums; //豸źԴ - BYTE *pBuffer; //ָdwInputSignalNumsNET_DVR_INPUTSTREAMCFGṹСĻ + DWORD dwInputSignalNums; //设备输入信号源数量 + BYTE *pBuffer; //指向dwInputSignalNums个NET_DVR_INPUTSTREAMCFG结构大小的缓冲区 BYTE byRes1[3]; - DWORD dwBufLen; //仺ȣڵdwInputSignalNumsNET_DVR_INPUTSTREAMCFGṹС + DWORD dwBufLen; //所分配缓冲区长度,输入参数(大于等于dwInputSignalNums个NET_DVR_INPUTSTREAMCFG结构大小) BYTE byRes2[64]; } NET_DVR_INPUT_SIGNAL_LIST,*LPNET_DVR_INPUT_SIGNAL_LIST; -// ȫ״̬ -#define PULL_DISK_SUCCESS 1 // ȫ̳ɹ -#define PULL_DISK_FAIL 2 // ȫʧ -#define PULL_DISK_PROCESSING 3 // ֹͣ -#define PULL_DISK_NO_ARRAY 4 // в -#define PULL_DISK_NOT_SUPPORT 5 // ְ֧ȫ +// 安全拔盘状态 +#define PULL_DISK_SUCCESS 1 // 安全拔盘成功 +#define PULL_DISK_FAIL 2 // 安全拔盘失败 +#define PULL_DISK_PROCESSING 3 // 正在停止阵列 +#define PULL_DISK_NO_ARRAY 4 // 阵列不存在 +#define PULL_DISK_NOT_SUPPORT 5 // 不支持安全拔盘 -// ɨ״̬ -#define SCAN_RAID_SUC 1 // ɨгɹ -#define SCAN_RAID_FAIL 2 // ɨʧ -#define SCAN_RAID_PROCESSING 3 // ɨ -#define SCAN_RAID_NOT_SUPPORT 4 // ֧ɨ +// 扫描阵列状态 +#define SCAN_RAID_SUC 1 // 扫描阵列成功 +#define SCAN_RAID_FAIL 2 // 扫描阵列失败 +#define SCAN_RAID_PROCESSING 3 // 正在扫描阵列 +#define SCAN_RAID_NOT_SUPPORT 4 // 不支持阵列扫描 -// ǰ״̬ -#define SET_CAMERA_TYPE_SUCCESS 1 // ɹ -#define SET_CAMERA_TYPE_FAIL 2 // ʧ -#define SET_CAMERA_TYPE_PROCESSING 3 // ڴ +// 设置前端相机类型状态 +#define SET_CAMERA_TYPE_SUCCESS 1 // 成功 +#define SET_CAMERA_TYPE_FAIL 2 // 失败 +#define SET_CAMERA_TYPE_PROCESSING 3 // 正在处理 //9000 2.2 typedef struct tagNET_DVR_RECORD_TIME_SPAN_INQUIRY { - DWORD dwSize; //ṹС - BYTE byType; //0 Ƶ¼, 1ͼƬͨ¼, 2ANRͨ¼, 3֡ͨ¼ - BYTE byRes[63]; // + DWORD dwSize; //结构体大小 + BYTE byType; //0 正常音视频录像, 1图片通道录像, 2ANR通道录像, 3抽帧通道录像 + BYTE byRes[63]; //保留 }NET_DVR_RECORD_TIME_SPAN_INQUIRY, *LPNET_DVR_RECORD_TIME_SPAN_INQUIRY; typedef struct tagNET_DVR_RECORD_TIME_SPAN { - DWORD dwSize; //ṹС - NET_DVR_TIME strBeginTime; //ʼʱ - NET_DVR_TIME strEndTime; //ʱ - BYTE byType; //0 Ƶ¼, 1ͼƬͨ¼, 2ANRͨ¼, 3֡ͨ¼ - BYTE byRes[35]; // + DWORD dwSize; //结构体大小 + NET_DVR_TIME strBeginTime; //开始时间 + NET_DVR_TIME strEndTime; //结束时间 + BYTE byType; //0 正常音视频录像, 1图片通道录像, 2ANR通道录像, 3抽帧通道录像 + BYTE byRes[35]; //保留 }NET_DVR_RECORD_TIME_SPAN, *LPNET_DVR_RECORD_TIME_SPAN; typedef struct tagNET_DVR_DRAWFRAME_DISK_QUOTA_CFG { - DWORD dwSize; //ṹС - BYTE byPicQuota; //ͼƬٷֱ [0%, 30%] - BYTE byRecordQuota; //ͨ¼ٷֱ [20%, 40%] - BYTE byDrawFrameRecordQuota; //֡¼ٷֱ [30%, 80%] - BYTE byRes[61]; //ֽ + DWORD dwSize; //结构体大小 + BYTE byPicQuota; //图片百分比 [0%, 30%] + BYTE byRecordQuota; //普通录像百分比 [20%, 40%] + BYTE byDrawFrameRecordQuota; //抽帧录像百分比 [30%, 80%] + BYTE byRes[61]; //保留字节 }NET_DVR_DRAWFRAME_DISK_QUOTA_CFG, *LPNET_DVR_DRAWFRAME_DISK_QUOTA_CFG; typedef struct tagNET_DVR_NAT_PORT { - WORD wEnable; //ö˿Ƿʹӳ - WORD wExtPort; //ӳⲿ˿ں - BYTE byRes[12]; // + WORD wEnable; //该端口是否使能映射 + WORD wExtPort; //映射的外部端口号 + BYTE byRes[12]; //保留 }NET_DVR_NAT_PORT, *LPNET_DVR_NAT_PORT; typedef struct tagNET_DVR_NAT_CFG { - DWORD dwSize; //ṹС - WORD wEnableUpnp; //UPNPǷ - WORD wEnableNat; //UPNP˿ӳ䣨NATǷ(wEnableUpnpһ) - NET_DVR_IPADDR struIpAddr; //NAT·LAN IPַ - NET_DVR_NAT_PORT struHttpPort; //web server http˿ӳ - NET_DVR_NAT_PORT struCmdPort; //˿ӳ(8000) - NET_DVR_NAT_PORT struRtspPort; //rtsp˿ӳ - BYTE byFriendName[64]; // - BYTE byNatType; //UPNP˿ӳͣ0-ֶ1-Զ - BYTE byRes1[3]; // - NET_DVR_NAT_PORT struHttpsPort; //https˿ӳ - NET_DVR_NAT_PORT struSDKOverTLSPort; //SDKOverTLS˿ӳ - NET_DVR_NAT_PORT struRtspsPort; //Rtsps˿ӳ - BYTE byres[44]; // + DWORD dwSize; //结构体大小 + WORD wEnableUpnp; //UPNP功能是否启用 + WORD wEnableNat; //UPNP端口映射(NAT)功能是否启用(保留,与wEnableUpnp保持一致) + NET_DVR_IPADDR struIpAddr; //NAT路由器LAN IP地址 + NET_DVR_NAT_PORT struHttpPort; //web server http端口映射配置 + NET_DVR_NAT_PORT struCmdPort; //命令端口映射配置(8000) + NET_DVR_NAT_PORT struRtspPort; //rtsp端口映射配置 + BYTE byFriendName[64]; //服务名 + BYTE byNatType; //UPNP端口映射类型,0-手动,1-自动 + BYTE byRes1[3]; //保留 + NET_DVR_NAT_PORT struHttpsPort; //https端口映射配置 + NET_DVR_NAT_PORT struSDKOverTLSPort; //SDKOverTLS端口映射配置 + NET_DVR_NAT_PORT struRtspsPort; //Rtsps端口映射配置 + BYTE byres[44]; //保留 }NET_DVR_NAT_CFG, *LPNET_DVR_NAT_CFG; typedef struct { - DWORD dwEnabled; //ö˿Ƿʹӳ - WORD wInternalPort; //ӳǰĶ˿ - WORD wExternalPort; //ӳĶ˿ - DWORD dwStatus; /*˿ӳ״̬ - 0 δЧ - 1 δЧӳԴ˿ĿĶ˿һ - 2 δЧ: ӳ˿ںѱʹ - 3 Ч + DWORD dwEnabled; //该端口是否被使能映射 + WORD wInternalPort; //映射前的端口 + WORD wExternalPort; //映射后的端口 + DWORD dwStatus; /*端口映射状态 + 0 未生效 + 1 未生效:映射源端口与目的端口需一致 + 2 未生效: 映射端口号已被使用 + 3 生效 */ - NET_DVR_IPADDR struNatExternalIp; //ӳⲿַ - NET_DVR_IPADDR struNatInternalIp; //NAT·LAN IPַ - BYTE byRes[16]; // + NET_DVR_IPADDR struNatExternalIp; //映射后的外部地址 + NET_DVR_IPADDR struNatInternalIp; //NAT路由器LAN IP地址 + BYTE byRes[16]; //保留 }NET_DVR_UPNP_PORT_STATE, *LPNET_DVR_UPNP_PORT_STATE; typedef struct { - NET_DVR_UPNP_PORT_STATE strUpnpPort[UPNP_PORT_NUM]; //˿ӳ״̬,0 web server˿ 1 ˿ 2 rtsp˿ - BYTE byRes[200]; // + NET_DVR_UPNP_PORT_STATE strUpnpPort[UPNP_PORT_NUM]; //端口映射状态,数组0 web server端口 数组1 管理端口 数组2 rtsp端口 + BYTE byRes[200]; //保留 }NET_DVR_UPNP_NAT_STATE, *LPNET_DVR_UPNP_NAT_STATE; typedef struct tagNET_DVR_PLAYCOND @@ -28783,181 +28783,181 @@ typedef struct tagNET_DVR_PLAYCOND DWORD dwChannel; NET_DVR_TIME struStartTime; NET_DVR_TIME struStopTime; - BYTE byDrawFrame; //0:֡1֡ - BYTE byStreamType ; //ͣ0- 1- 2- + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byStreamType ; //码流类型,0-主码流 1-子码流 2-码流三 BYTE byStreamID[STREAM_ID_LEN]; - BYTE byCourseFile; //γļ0-1- - BYTE byDownload; //Ƿ 0-1- - BYTE byOptimalStreamType; //Ƿͻط 0-1-ǣ˫豸ijһʱڵ¼ļָͲͬ򷵻ʵ͵¼ - BYTE byVODFileType; // ¼ļļʽ 0-PSʽ1-3GPʽ - BYTE byRes[26]; // + BYTE byCourseFile; //课程文件0-否,1-是 + BYTE byDownload; //是否下载 0-否,1-是 + BYTE byOptimalStreamType; //是否按最优码流类型回放 0-否,1-是(对于双码流设备,某一段时间内的录像文件与指定码流类型不同,则返回实际码流类型的录像) + BYTE byVODFileType; // 下载录像文件,文件格式 0-PS码流格式,1-3GP格式 + BYTE byRes[26]; //保留 }NET_DVR_PLAYCOND, *LPNET_DVR_PLAYCOND; typedef struct tagNET_DVR_ATMFINDINFO { - BYTE byTransactionType; // 0-ȫ1-ѯ 2-ȡ 3- 4-޸룬5-תˣ 6-޿ѯ 7-޿ 8-̳ 9-̿ 10-Զ - BYTE byRes[3] ; // - DWORD dwTransationAmount ; //׽ ; + BYTE byTransactionType; //交易类型 0-全部,1-查询, 2-取款, 3-存款, 4-修改密码,5-转账, 6-无卡查询 7-无卡存款, 8-吞钞 9-吞卡 10-自定义 + BYTE byRes[3] ; //保留 + DWORD dwTransationAmount ; //交易金额 ; } NET_DVR_ATMFINDINFO, *LPNET_DVR_ATMFINDINFO ; typedef union tagNET_DVR_SPECIAL_FINDINFO_UNION { BYTE byLenth[8] ; - NET_DVR_ATMFINDINFO struATMFindInfo; //ATMѯ + NET_DVR_ATMFINDINFO struATMFindInfo; //ATM查询 }NET_DVR_SPECIAL_FINDINFO_UNION, *LPNET_DVR_SPECIAL_FINDINFO_UNION; typedef struct tagNET_DVR_FILECOND_V40 { LONG lChannel; - DWORD dwFileType;/*¼ļ0xff-ȫ0-ʱ¼1-ƶ⣬2-3-ƶ⣬4-ƶ⣬5-6-ֶ¼ - 7-¼10-PIR11-߱12-ȱ13-ȫ¼14-ܽͨ¼15-Խ⣬16-֣17-쳣18-⣬19-⣨Խ|||쳣|⣩ - 20-⣬ 21-ź22-ش23-Ǩ¼24-ڵ25-pos¼26-, 27-뿪,28-ǻ,29-Աۼ,30-˶,31-ͣ,32-Ʒ,33-Ʒȡ, - 34-⣬35-ƻ⣬36-ֻ⣬37-Ԥ,38-±,39-ܶŹ40-⣬41-˯⣬42-²43-߲±,44-45-,46-ҵѯ,47-,48-ʸ,49-Ŀʱ50-ܼ⣬51-⣬52-Ŀץ, 53-Ƿ̯, 54-Ŀʶ, - 55-˶56-ڼ⣬57-58-仯59-Υͣ, 60-,61-ѹ,62-ռ,63-,64-ͷ,65-˼,66-·,67-,68-Ũ,69-ʩ,70-ӵ,71-ͨ¹ʼ, 72-෽ͣ73-ֶ,74-ͨΥ£75-ɳⱨ 76-ŷʾ 77-Ҷȱ,78-, - 79-,80-ͨʱ¼¼,81-AIƽ̨¼,82-¼,83-ϹӼ,84-豸Դ״̬ϱ + DWORD dwFileType;/*不带卡号录象文件类型0xff-全部,0-定时录像,1-移动侦测,2-报警触发,3-报警触发或移动侦测,4-报警触发和移动侦测,5-命令触发,6-手动录像, + 7-智能录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件,15-越界侦测,16-区域入侵,17-声音异常,18-场景变更侦测,19-智能侦测(越界侦测|区域入侵|人脸侦测|声音异常|场景变更侦测), + 20-人脸侦测, 21-信号量,22-回传,23-回迁录像,24-遮挡,25-pos录像,26-进入区域侦测, 27-离开区域侦测,28-徘徊侦测,29-人员聚集侦测,30-快速运动侦测,31-停车侦测,32-物品遗留侦测,33-物品拿取侦测, + 34-火点侦测,35-防破坏检测,36-船只检测,37-测温预警,38-测温报警,39-打架斗殴报警,40-起身检测,41-瞌睡检测,42-温差报警,43-离线测温报警,44-防区报警,45-紧急求助,46-业务咨询,47-起身检测,48-折线攀高,49-目标区域滞留超时,50-奔跑检测,51-滞留检测,52-目标抓拍, 53-非法摆摊, 54-目标识别, + 55-剧烈运动,56-离岗检测,57-起立,58-人数变化,59-违停, 60-逆行,61-压线,62-机占非,63-变道,64-掉头,65-行人检测,66-路障,67-抛洒物,68-浓雾检测,69-施工,70-拥堵,71-交通事故检测, 72-侧方停车,73-手动触发报警,74-交通违章,75-挖沙船检测报警 76-废气排放显示 77-灰度报警,78-振动侦测, + 79-烟雾检测,80-通道定时录像事件,81-AI开放平台事件,82-传感器事件,83-紫光电子检测,84-设备电源状态上报 */ DWORD dwIsLocked; - DWORD dwUseCardNo;//ǷATMϢвѯ0-ATMϢ1-׿Ųѯ2-Ͳѯ3-׽ѯ4-šͼ׽ϲѯ 5-γƲңʱűʾγ + DWORD dwUseCardNo;//是否带ATM信息进行查询:0-不带ATM信息,1-按交易卡号查询,2-按交易类型查询,3-按交易金额查询,4-按卡号、交易类型及交易金额的组合查询 5-按课程名称查找,此时卡号表示课程名称 BYTE sCardNumber[CARDNUM_LEN_OUT]; NET_DVR_TIME struStartTime; NET_DVR_TIME struStopTime; - BYTE byDrawFrame; //0:֡1֡ - BYTE byFindType; //0:ѯͨ1ѯ浵 - BYTE byQuickSearch; //0:ͨѯ1٣ѯ - BYTE bySpecialFindInfoType ; //רвѯ 0-Ч 1-ATMѯ - DWORD dwVolumeNum; //浵 - BYTE byWorkingDeviceGUID[GUID_LEN]; //GUIDͨȡN+1õ - NET_DVR_SPECIAL_FINDINFO_UNION uSpecialFindInfo ; //רвѯ - BYTE byStreamType; //0-ͬһʱֻһ¼ȼ˳Ϊ1-2-3-254-˫(ȷ¼û¼ʱ¼) - BYTE byAudioFile; //Ƶļ 0-Ƶļ1-Ƶļ - BYTE byRes2[30]; // + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byFindType; //0:查询普通卷,1:查询存档卷 + BYTE byQuickSearch; //0:普通查询,1:快速(日历)查询 + BYTE bySpecialFindInfoType ; //专有查询条件类型 0-无效, 1-带ATM查询条件 + DWORD dwVolumeNum; //存档卷号 + BYTE byWorkingDeviceGUID[GUID_LEN]; //工作机GUID,通过获取N+1得到 + NET_DVR_SPECIAL_FINDINFO_UNION uSpecialFindInfo ; //专有查询条件 + BYTE byStreamType; //0-同一个时间段只返回一种录像,优先级顺序为:主码流、子码流、三码流,1-子码流,2-三码流,3-主码流,254-双码流搜索(优先返回主码流录像,没有主码流录像时返回子码流录像) + BYTE byAudioFile; //音频文件 0-非音频文件,1-音频文件 + BYTE byRes2[30]; //保留 }NET_DVR_FILECOND_V40, *LPNET_DVR_FILECOND_V40; -//¼ļṹV50 +//录像文件查找条件结构V50 typedef struct tagNET_DVR_FILECOND_V50 { - NET_DVR_STREAM_INFO struStreamID; //IDͨ - NET_DVR_TIME_SEARCH_COND struStartTime; //ʼʱ - NET_DVR_TIME_SEARCH_COND struStopTime; //ʱ - BYTE byFindType; //0-ѯͨ1-ѯ浵 2-ѯN+1¼ļ - BYTE byDrawFrame; //Ƿ֡ 0-֡ 1-֡ - BYTE byQuickSearch; //0-ͨѯ1-٣ѯ - BYTE byStreamType; //0-1-2-30xff-ȫ - DWORD dwFileType; // ļ - DWORD dwVolumeNum; //浵ţbyFindTypeΪ1ʱЧ - BYTE byIsLocked; //Ƿ 0-ļ,1-ļ, 0xffʾļ - BYTE byNeedCard; //ǷҪѯ0-Ҫ 1-Ҫ - BYTE byOnlyAudioFile; //Ƶļ 0-Ƶļ 1-Ƶļ - BYTE bySpecialFindInfoType; //0-Ч 1-ATMѯ - char szCardNum[32]; //ţbyNeedCardΪ1ʱЧ - char szWorkingDeviceGUID[16]; //GUIDͨȡN+1õbyFindTypeΪ2ʱЧ - NET_DVR_SPECIAL_FINDINFO_UNION uSpecialFindInfo; //רвѯ - DWORD dwTimeout; //ҳʱʱ䣨ָNET_DVR_FindNextFile_V30/NET_DVR_FindNextFile_V40/NET_DVR_FindNextFile_V50ӿڵijʱʱ䷵أλ룬дĬΪ0ʱӿΪǰһ ;Чֵ0, [5000 C 15000] + NET_DVR_STREAM_INFO struStreamID; //流ID或通道号 + NET_DVR_TIME_SEARCH_COND struStartTime; //开始时间 + NET_DVR_TIME_SEARCH_COND struStopTime; //结束时间 + BYTE byFindType; //0-查询普通卷,1-查询存档卷 2-查询N+1录像文件 + BYTE byDrawFrame; //是否抽帧 0-不抽帧 1-抽帧 + BYTE byQuickSearch; //0-普通查询,1-快速(日历)查询 + BYTE byStreamType; //0-主码流,1-子码流,2-3码流,0xff-全部 + DWORD dwFileType; // 文件类型 + DWORD dwVolumeNum; //存档卷号,byFindType为1时有效 + BYTE byIsLocked; //是否锁定 0-正常文件,1-锁定文件, 0xff表示所有文件 + BYTE byNeedCard; //是否需要查询卡,0-不需要 1-需要 + BYTE byOnlyAudioFile; //音频文件 0-视频文件 1-音频文件 + BYTE bySpecialFindInfoType; //0-无效, 1-带ATM查询条件 + char szCardNum[32]; //卡号,byNeedCard为1时有效 + char szWorkingDeviceGUID[16]; //工作机GUID,通过获取N+1得到,byFindType为2时有效 + NET_DVR_SPECIAL_FINDINFO_UNION uSpecialFindInfo; //专有查询条件联合体 + DWORD dwTimeout; //查找超时时间(指定NET_DVR_FindNextFile_V30/NET_DVR_FindNextFile_V40/NET_DVR_FindNextFile_V50接口的超时时间返回);单位:毫秒,不填写(默认为0时),接口行为跟以前一样 ;有效值:0, [5000 – 15000] BYTE byRes[252]; }NET_DVR_FILECOND_V50, *LPNET_DVR_FILECOND_V50; typedef struct { - BYTE sAESKey[16]; /*Կ*/ - BYTE byRes[64]; /*ֽ*/ + BYTE sAESKey[16]; /*码流加密密钥*/ + BYTE byRes[64]; /*保留字节*/ }NET_DVR_AES_KEY_INFO, *LPNET_DVR_AES_KEY_INFO; typedef struct { - NET_DVR_IPADDR struIP; //IPַ - BYTE byRes[128]; // + NET_DVR_IPADDR struIP; //IP地址 + BYTE byRes[128]; //保留 }NET_DVR_POE_CFG, *LPNET_DVR_POE_CFG; -#define MAX_PRO_PATH 256 //Э· +#define MAX_PRO_PATH 256 //最大协议路径长度 typedef struct { - DWORD dwSize; //ṹС - DWORD dwEnabled; //ǷøЭ0 1 - char sProtocalName[DESC_LEN]; //ԶЭ, 16λ - BYTE byRes1[64]; //,Эչ - DWORD dwEnableSubStream; //Ƿ0 1 + DWORD dwSize; //结构体大小 + DWORD dwEnabled; //是否启用该协议0 不启用 1 启用 + char sProtocalName[DESC_LEN]; //自定义协议名称, 16位 + BYTE byRes1[64]; //保留,用于协议名称扩展 + DWORD dwEnableSubStream; //子码流是否启用0 不启用 1 启用 - BYTE byMainProType; //Э 1 RTSP - BYTE byMainTransType; // 0Auto 1udp 2rtp over rtsp - WORD wMainPort; //˿ - char sMainPath[MAX_PRO_PATH]; //· + BYTE byMainProType; //主码流协议类型 1 RTSP + BYTE byMainTransType; //主码流传输类型 0:Auto 1:udp 2:rtp over rtsp + WORD wMainPort; //主码流端口 + char sMainPath[MAX_PRO_PATH]; //主码流路径 - BYTE bySubProType; //Э 1 RTSP - BYTE bySubTransType; // 0Auto 1udp 2rtp over rtsp - WORD wSubPort; //˿ - char sSubPath[MAX_PRO_PATH]; //· + BYTE bySubProType; //子码流协议类型 1 RTSP + BYTE bySubTransType; //子码流传输类型 0:Auto 1:udp 2:rtp over rtsp + WORD wSubPort; //子码流端口 + char sSubPath[MAX_PRO_PATH]; //子码流路径 - BYTE byRes2[200]; // + BYTE byRes2[200]; //保留 }NET_DVR_CUSTOM_PROTOCAL, *LPNET_DVR_CUSTOM_PROTOCAL; -//B10֧PSIA豸 -//ѭǽṹ壨ʵʱ +//B10能支持PSIA设备 +//循环上墙结构体(实时) typedef struct { - DWORD dwEnable; /* Ƿ 0 1*/ - BYTE byType; //豸 0: DEV_SDK 1:DEV_DAHUA 2:DEV_EHOME 3:DEV_OTHERES - BYTE byRes[3]; // + DWORD dwEnable; /* 是否启用 0-否 1-启用*/ + BYTE byType; //设备类型 0: DEV_SDK 1:DEV_DAHUA 2:DEV_EHOME 3:DEV_OTHERES + BYTE byRes[3]; //保留 NET_DVR_STREAM_MEDIA_SERVER_CFG streamMediaServerCfg; - NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* ѭͨϢ */ - BYTE sRtspUrl[128];//ַ + NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* 轮循解码通道信息 */ + BYTE sRtspUrl[128];//流地址 }NET_DVR_MATRIX_CHAN_INFO_EX,*LPNET_DVR_MATRIX_CHAN_INFO_EX; typedef struct { DWORD dwSize; - DWORD dwPoolTime; /*ѯ*/ + DWORD dwPoolTime; /*轮询间隔*/ NET_DVR_MATRIX_CHAN_INFO_EX struchanConInfo[MAX_CYCLE_CHAN_V30]; BYTE byRes[16]; }NET_DVR_MATRIX_LOOP_DECINFO_EX,*LPNET_DVR_MATRIX_LOOP_DECINFO_EX; -//ʵʱԤǽṹ +//实时预览上墙结构体 typedef struct { DWORD dwSize; - BYTE byType; //豸 0: DEV_SDK 1:DEV_DAHUA 2:DEV_EHOME 3:DEV_OTHERES - BYTE byRes[3]; // + BYTE byType; //设备类型 0: DEV_SDK 1:DEV_DAHUA 2:DEV_EHOME 3:DEV_OTHERES + BYTE byRes[3]; //保留 NET_DVR_STREAM_MEDIA_SERVER_CFG struStreamMediaSvrCfg; NET_DVR_DEV_CHAN_INFO struDevChanInfo; - BYTE sRtspUrl[128];//ַ + BYTE sRtspUrl[128];//流地址 }NET_DVR_PU_STREAM_CFG_EX,*LPNET_DVR_PU_STREAM_CFG_EX; typedef struct tagNET_DVR_MATRIX_TRUNKCFG { - DWORD dwGlobalIndex; // - DWORD dwInterIndex; //ȫֱ + DWORD dwGlobalIndex; //主键 + DWORD dwInterIndex; //本地全局编号 BYTE sTrunkName[NAME_LEN]; - BYTE byType; //豸1-bnc, 2-SP3, 3-V6 - BYTE byDir; //߷ 1-2- - BYTE byAbility; //D1 - BYTE bySubsys; //ϵͳID - BYTE byChan; //ͨID - BYTE byRes[255]; //Ԥ + BYTE byType; //设备类型1-bnc, 2-SP3, 3-V6 + BYTE byDir; //干线方向 1-输入2-输出 + BYTE byAbility; //干线能力,D1衡量 + BYTE bySubsys; //子系统ID + BYTE byChan; //通道ID + BYTE byRes[255]; //预留 } NET_DVR_MATRIX_TRUNKCFG,*LPNET_DVR_MATRIX_TRUNKCFG; typedef struct tagNET_DVR_DECSUBSYSTEMJIONSTATUS_V41 { - BYTE byJoinStatus;//״̬0-ûй1-ѾֶͨжϱԼϵͳ2-ռãbyDecodeAbility1ʱЧ3-4- - BYTE byJoinSubSystem;// ռõϵͳλ - BYTE byJoinDispNum;// ռõʾͨ - BYTE byJoinSubWindowNum;// ռõӴں - BYTE byDecodeAbility; //ͨĵǰ0-δ1-D12-7203-1080 + BYTE byJoinStatus;//关联状态,0-没有关联,1-已经关联,通过其他字段判断被自己关联或被其他子系统关联,2-被占用,byDecodeAbility大于1时有效,3-被大屏主屏关联,4-被大屏子屏关联 + BYTE byJoinSubSystem;// 所关联或占用的子系统槽位号 + BYTE byJoinDispNum;// 所关联或占用的显示通道号 + BYTE byJoinSubWindowNum;// 所关联或占用的子窗口号 + BYTE byDecodeAbility; //解码通道的当前解码能力,0-未关联,1-D1,2-720,3-1080 BYTE byRes[15]; }NET_DVR_DECSUBSYSTEMJIONSTATUS_V41,LPNET_DVR_DECSUBSYSTEMJIONSTATUS_V41; typedef struct tagNET_DVR_SINGLESUBSYSTEMJOININFO_V41 { - /*ϵͳͣ1-ϵͳ2-ϵͳ3-ϵͳ4-ϵͳ5-ϵͳ6-ϵͳ7-ϵͳ8-V6ϵͳ9-V6ϵͳ0-NULL˲ֻܻȡ*/ + /*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-V6解码子系统,9-V6子系统,0-NULL(此参数只能获取)*/ BYTE bySubSystemType; - BYTE byConnectStatus;//ϵͳ״̬1-2-ӶϿ - BYTE byMatrixNum;//Ƶۺƽ̨ţϵͳ34ʱ - BYTE bySubSystemNum;//ϵͳλţϵͳ34ʱ + BYTE byConnectStatus;//级联系统关联状态,1-连接正常,2-连接断开 + BYTE byMatrixNum;//级联视频综合平台号,子系统类型是3或4时可用 + BYTE bySubSystemNum;//级联子系统槽位号,子系统类型是3或4时可用 NET_DVR_DECSUBSYSTEMJIONSTATUS_V41 struSubSystem[MAX_DECODECHANNUM]; - BYTE byBindStatus;//״̬0-ûа󶨣1-Ѿ󶨣ƴʱõ - BYTE bySlotNum ;//λţ˲ֻܻȡ - BYTE byUsedTrunk;//Ƿ񱻸ʹã0-δʹã1-ʹ + BYTE byBindStatus;//绑定状态,0-没有绑定,1-已经绑定(大屏拼接时用到) + BYTE bySlotNum ;//槽位号,此参数只能获取 + BYTE byUsedTrunk;//是否被干线使用,0-未被使用,1-被使用 BYTE byRes[65]; }NET_DVR_SINGLESUBSYSTEMJOININFO_V41,LPNET_DVR_SINGLESUBSYSTEMJOININFO_V41; @@ -28968,34 +28968,34 @@ typedef struct tagNET_DVR_ALLDECSUBSYSTEMJOININFO_V41 BYTE byRes[48]; }NET_DVR_ALLDECSUBSYSTEMJOININFO_V41,*LPNET_DVR_ALLDECSUBSYSTEMJOININFO_V41; -//////////ϵͳ///////////// -#define MAX_ALARMHOSTKEYBOARD 64 //籨 +//////////子系统配置///////////// +#define MAX_ALARMHOSTKEYBOARD 64 //网络报警主机最大键盘数 typedef struct tagNET_DVR_PUBLIC_SUB_SYSTEM { - //ϵͳţλʾbit0ʾùϵͳϵͳ1. + //关联子系统号,按位表示,bit0表示该公共子系统关联子系统1. DWORD dwJointSubSystem; BYTE byRes[16]; }NET_DVR_PUBLIC_SUB_SYSTEM, *LPNET_DVR_PUBLIC_SUB_SYSTEM; typedef struct tagNET_DVR_NOAMAL_SUB_SYSTEM { - //ʾЩϵͳλʾbit0 ʾϵͳ.ϵͳ1 + //表示被哪些公共子系统关联,按位表示,bit0 表示,该子系统.被关联到公共子系统1 DWORD dwBeJoinedSubSystem; BYTE byRes[16]; }NET_DVR_NOAMAL_SUB_SYSTEM, *LPNET_DVR_NOAMAL_SUB_SYSTEM; typedef union tagNET_DVR_JOINT_SUB_SYSTEM { - // byPublicAttributeEnableΪ0ʱʹøñ + // byPublicAttributeEnable为0时使用该变量 NET_DVR_NOAMAL_SUB_SYSTEM struNormalSubSystem; - //byPublicAttributeEnableΪ1ʱʹøñ + //byPublicAttributeEnable为1时使用该变量 NET_DVR_PUBLIC_SUB_SYSTEM struPublicSubSystem; BYTE byRes[20]; }NET_DVR_JOINT_SUB_SYSTEM,*LPNET_DVR_JOINT_SUB_SYSTEM; -#define MAX_SUBSYSTEM_ID_LEN 16 //ϵͳID󳤶 +#define MAX_SUBSYSTEM_ID_LEN 16 //子系统ID最大长度 -//////////GPRS///////////// +//////////GPRS参数配置///////////// #define ACCOUNTNUM_LEN 6 #define ACCOUNTNUM_LEN_32 32 #define ACCOUNTNUM_LEN_V40 9 @@ -29006,68 +29006,68 @@ typedef union tagNET_DVR_JOINT_SUB_SYSTEM typedef struct tagNET_DVR_ALARMSUBSYSTEMPARAM { DWORD dwSize; - WORD wEnterDelay; //ʱ,λ:, Χ10-150 бʱʱ NET_DVR_ALARMIN_PARAM еdwParamʱʱ - //÷ʽͨеbySupportAlarmInDelayֶ - WORD wExitDelay;//˳ʱ,λ:룬 Χ10-300 - BYTE byHostageReport; //Юֱ棬0 1ʹ - BYTE bySubsystemEnable; //ϵͳʹ - BYTE byKeyToneOfArmOrDisarm; // ɹͲǷʾ0-̲ʾ 1-ʾ - BYTE byKeyToneOfManualTestReport; //ɹͲԱǷʾ0-̲ʾ 1-ʾ - WORD wDelayTime; //ʱdwSupport1еbit0λΪ1ʱʹøòþʱ䡣bit0Ϊ0ʱʹNET_DVR_SIREN_PARAMеwDelayþʱ - BYTE byEnableAlarmInDelay;//0--(ʹϵͳʱ),1--(ʹ÷ʱ)Ĭϲ - BYTE byPublicAttributeEnable; //ǷΪϵͳ + WORD wEnterDelay; //进入延时,单位:秒, 范围:10-150 动环报警主机和自助行报警主机的延时时间在 NET_DVR_ALARMIN_PARAM 中的dwParam来设置延时时间 + //具体用哪种设置方式通过能力集中的bySupportAlarmInDelay字段来区别 + WORD wExitDelay;//退出延时,单位:秒, 范围10-300 + BYTE byHostageReport; //挟持报告,0禁能 1使能 + BYTE bySubsystemEnable; //子系统使能 + BYTE byKeyToneOfArmOrDisarm; // 成功发送布撤防报告是否键盘提示,0-键盘不提示 1-键盘输出提示音 + BYTE byKeyToneOfManualTestReport; //成功发送测试报告是否键盘提示,0-键盘不提示 1-键盘输出提示音 + WORD wDelayTime; //警号输出延时,当能力集中dwSupport1中的bit0位为1时,使用该参数设置警号输出时间。bit0为0时,使用NET_DVR_SIREN_PARAM中的wDelay参数设置警号输出时间 + BYTE byEnableAlarmInDelay;//0--不启用(使用子系统延时),1--启用(使用防区延时),默认不启用 + BYTE byPublicAttributeEnable; //是否为公共子系统 NET_DVR_JOINT_SUB_SYSTEM struJointSubSystem; - BYTE byKeyZoneArm; //Ƿ֧Կ׷ϵͳв - BYTE byKeyZoneArmReport; //Ƿ֧Կ׷ϵͳʱͲ - BYTE byKeyZoneDisarm; //Ƿ֧Կ׷ϵͳг - BYTE byKeyZoneDisarmReport; //Ƿ֧Կ׷ϵͳгʱͳ - BYTE bySubSystemID[MAX_SUBSYSTEM_ID_LEN]; //ϵͳID - BYTE byKeyZoneArmReportEnable; //Կ׷ϴʹ 0- 1-ʹ - BYTE byKeyZoneArmEnable; //Կ׷ʹܣ 0 - 1-ʹ - BYTE byOneKeySetupAlarmEnable; //һʹ - BYTE bySingleZoneSetupAlarmEnable; //ʹ - BYTE byCenterType; //0-Ч, 1-˺(6),2-չ˺(9) - BYTE sCenterAccount[ACCOUNTNUM_LEN/*6*/]; //ʺ - BYTE sCenterAccountV40[ACCOUNTNUM_LEN_32/*32*/]; //˺V40,ʹôֶʱsCenterAccountЧ - BYTE byRes2[565]; // ֽ + BYTE byKeyZoneArm; //是否支持钥匙防区对子系统进行布防操作 + BYTE byKeyZoneArmReport; //是否支持钥匙防区对子系统布防时发送布防报告 + BYTE byKeyZoneDisarm; //是否支持钥匙防区对子系统进行撤防操作 + BYTE byKeyZoneDisarmReport; //是否支持钥匙防区对子系统进行撤防操作时发送撤防报告 + BYTE bySubSystemID[MAX_SUBSYSTEM_ID_LEN]; //子系统ID + BYTE byKeyZoneArmReportEnable; //钥匙防区上传布防报告使能 0-禁能 1-使能 + BYTE byKeyZoneArmEnable; //钥匙防区使能, 0 -禁能 1-使能 + BYTE byOneKeySetupAlarmEnable; //一键布防使能 + BYTE bySingleZoneSetupAlarmEnable; //单防区布撤防使能 + BYTE byCenterType; //0-无效, 1-中心账号(长度6),2-扩展的中心账号(长度9) + BYTE sCenterAccount[ACCOUNTNUM_LEN/*6*/]; //中心帐号 + BYTE sCenterAccountV40[ACCOUNTNUM_LEN_32/*32*/]; //中心账号V40,使用此字段时sCenterAccount无效 + BYTE byRes2[565]; // 保留字节 }NET_DVR_ALARMSUBSYSTEMPARAM, *LPNET_DVR_ALARMSUBSYSTEMPARAM; typedef struct tagNET_DVR_REMIND_TIME//8 { - BYTE byEnable;//Ƿñ 0-ã1- + BYTE byEnable;//是否启用本次提醒 0-不启用,1-启用 BYTE byHour;//0~24 BYTE byMinute;//0~60 BYTE bySecond;//0~60 }NET_DVR_REMIND_TIME,*LPNET_DVR_REMIND_TIME; -//ϵͳչ +//子系统参数配置扩展 #define MAX_KEYBOARD_USER_NUM 256 typedef struct tagNET_DVR_SUBSYSTEM_PARAM_EX { DWORD dwSize; - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/]; //ʱ - BYTE byAlarmInAdvance; // ǰʾʱ0~45 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/]; //布撤防时间 + BYTE byAlarmInAdvance; // 布撤防提前提示时间0~45分 BYTE byRes1[3]; - BYTE byJointAlarmIn[MAX_ALARMHOST_ALARMIN_NUM / 8];//λʾϵͳıͨţ0-룬1- - BYTE byJointKeyboard[MAX_ALARMHOSTKEYBOARD/*64*/ / 8];//λʾֵ֧ļ̺ţ0-룬1- - BYTE byJointOpetaterUser[MAX_KEYBOARD_USER_NUM/8];//λʾbit0ʾ̲û1 0- 1- - NET_DVR_REMIND_TIME struAlarmRemindTime[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/];//MAX_TIMESEGMENT_V30ʾÿ֧8 - BYTE byJointNetUser[NET_SDK_MAX_NET_USER_NUM / 8];//ûλʾbit0ʾû10- 1- - BYTE byRes2[280]; // ֽ + BYTE byJointAlarmIn[MAX_ALARMHOST_ALARMIN_NUM / 8];//按位,表示子系统关联的报警输入通道号,0-不加入,1-加入 + BYTE byJointKeyboard[MAX_ALARMHOSTKEYBOARD/*64*/ / 8];//按位,表示支持的键盘号,0-不加入,1-加入 + BYTE byJointOpetaterUser[MAX_KEYBOARD_USER_NUM/8];//按位表示,bit0表示键盘操作用户1 ,0-不关联 1-关联 + NET_DVR_REMIND_TIME struAlarmRemindTime[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/];//MAX_TIMESEGMENT_V30表示每天最多支持8个提醒 + BYTE byJointNetUser[NET_SDK_MAX_NET_USER_NUM / 8];//关联网络用户(按位表示,bit0表示网络用户1;0-不关联 1-关联) + BYTE byRes2[280]; // 保留字节 }NET_DVR_SUBSYSTEM_PARAM_EX, *LPNET_DVR_SUBSYSTEM_PARAM_EX; typedef struct tagNET_DVR_ALARMHOST_PRINTER_CFG { DWORD dwSize; - BYTE byPrinterEnable; //Ƿôӡ - BYTE byPrintTime; //Ƿӡʱ - BYTE byFaultDetect; //Ƿӡ + BYTE byPrinterEnable; //是否启用打印机 + BYTE byPrintTime; //是否打印时间 + BYTE byFaultDetect; //是否检测打印机故障 BYTE byRes1; - DWORD dwAlarmInfo; //Ϣλʾbit0-bit1-ָbit2-bit-3Юֱ - DWORD dwDeviceInfo; //豸Ϣλʾbit0-ϵ硢bit1-ϵָbit2-Ƿѹbit3-Ƿѹָbit4-绰߶ߡbit5-绰߶߻ָbit6-Ա桢bit7-bit8-ָbit9-485豸ߡbit10-485豸߻ָbit11-쳣bit12-ָbit13-쳣bit14-ָbit15-չ쳣bit17-չ߻ָbit17-Ӳ̹ϡbit18-Ӳ̹ϻָbit19- - DWORD dwOperateInfo; //Ϣλʾbit0-bit1-bit2-bit3-·bit4-·ָbit5-̡bit6-˳̡bit7-λ - BYTE byRes2[256]; // ֽ + DWORD dwAlarmInfo; //报警信息,按位表示。bit0-防区报警,bit1-防区报警恢复,bit2-紧急报警,bit-3挟持报警 + DWORD dwDeviceInfo; //设备信息,按位表示。bit0-交流电断电、bit1-交流电断电恢复,bit2-蓄电池欠压、bit3-蓄电池欠压恢复,bit4-电话线断线、bit5-电话线断线恢复,bit6-测试报告、bit7-防拆、bit8-防拆恢复、bit9-485设备掉线、bit10-485设备掉线恢复、bit11-无线网络异常、bit12-无线网络恢复正常、bit13-有线网络异常、bit14-有线网络恢复正常、bit15-扩展总线异常、bit17-扩展总线恢复正常、bit17-硬盘故障、bit18-硬盘故障恢复、bit19-键盘锁定 + DWORD dwOperateInfo; //操作信息,按位表示。bit0-布防、bit1-撤防、bit2-消警、bit3-旁路、bit4-旁路恢复、bit5-进入编程、bit6-退出编程、bit7-主机复位 + BYTE byRes2[256]; // 保留字节 }NET_DVR_ALARMHOST_PRINTER_CFG, *LPNET_DVR_ALARMHOST_PRINTER_CFG; typedef struct tagNET_DVR_ALARMHOST_NETPARAM @@ -29075,41 +29075,41 @@ typedef struct tagNET_DVR_ALARMHOST_NETPARAM DWORD dwSize; NET_DVR_IPADDR struIP; WORD wPort; - BYTE byAddressType; //0 - , 1 - ipv4/ipv6ַ2 - + BYTE byAddressType; //0 - 无意义, 1 - ipv4/ipv6地址,2 - 域名 BYTE byRes1[1]; - BYTE byDomainName[MAX_DOMAIN_NAME/*64*/]; //GPRSáʱֶξЧ + BYTE byDomainName[MAX_DOMAIN_NAME/*64*/]; //域名,GPRS参数配置、网络参数配置时该字段均有效 BYTE byReportProtocol; //1-private 2-NAL2300, 3-Ehome - BYTE byDevID[ACCOUNTNUM_LEN_32/*32*/]; //ЭΪNAL2300ʱЧ - BYTE byRes2[7]; //GPRSڹ̶ķϽеģԲҪϢԤһЩֶ + BYTE byDevID[ACCOUNTNUM_LEN_32/*32*/]; //协议为NAL2300时有效 + BYTE byRes2[7]; //GPRS的域名解析是在固定的服务器上进行的,所以不需要给解析服务器的信息预留一些字段 }NET_DVR_ALARMHOST_NETPARAM, *LPNET_DVR_ALARMHOST_NETPARAM; typedef struct tagNET_DVR_REGISTER_RS485CFG { - DWORD dwSize; // ṹС - WORD wDeviceProtocol; // ǰ豸Э ͨȡЭбȡ + DWORD dwSize; // 结构体大小 + WORD wDeviceProtocol; // 前端设备协议 通过获取协议列表获取 BYTE byRes[2]; - DWORD dwBaudRate; //(bps)0-501-752-1103-1504-3005-6006-12007-24008-48009-960010-1920011-3840012-5760013-7680014-115.2k - BYTE byRes1[124]; // ֽ + DWORD dwBaudRate; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200,11-38400,12-57600,13-76800,14-115.2k + BYTE byRes1[124]; // 保留字节 }NET_DVR_REGISTER_RS485CFG, *LPNET_DVR_REGISTER_RS485CFG; typedef struct tagNET_DVR_ALARMHOST_WIRELESS_NETWORK_CFG { DWORD dwSize; - NET_DVR_ALARMHOST_NETPARAM struNetCenter[MAX_CENTERNUM]; // GPRSز + NET_DVR_ALARMHOST_NETPARAM struNetCenter[MAX_CENTERNUM]; //中心 GPRS网络相关参数的配置 BYTE byAPNName[APN_NAME_LEN/*32*/]; BYTE byAPNUserName[APN_USERNAME_LEN/*24*/]; BYTE byAPNPassWord[APN_USERPASSWORD_LEN/*16*/]; - BYTE byReconnTime; //ʱ䣬ʧЧʱ䣬10Ϊλ,ȡֵΧ1-30 - BYTE byOverTime; //ʱʱ䣬OverTimeʱûյЧΧ1-254λ30 - BYTE byDetectLinkTime; // //̽·Ƿ񻹱֣Χ1-30λ10s + BYTE byReconnTime; //重连时间,连接失效后启用重连的时间,10秒为单位,取值范围1-30 + BYTE byOverTime; //超时时间,超过OverTime时间没有收到有效数据则重连,范围1-254,单位30秒 + BYTE byDetectLinkTime; // //探测链路是否还保持,范围1-30,单位10s BYTE byRes1; - BYTE bySIMNum[NAME_LEN/*32*/]; //SIMţֻţ - NET_DVR_IPADDR struSIMIP; //½IPַֻܻȡ + BYTE bySIMNum[NAME_LEN/*32*/]; //SIM卡号(手机号) + NET_DVR_IPADDR struSIMIP; //登陆网络后网络给分配的IP地址,只能获取 BYTE byRes2[64]; }NET_DVR_ALARMHOST_WIRELESS_NETWORK_CFG, *LPNET_DVR_ALARMHOST_WIRELESS_NETWORK_CFG; -/////////////////////// +//////////网络参数配置///////////// typedef struct tagNET_DVR_ALARMHOST_NETCFG { DWORD dwSize; @@ -29117,615 +29117,615 @@ typedef struct tagNET_DVR_ALARMHOST_NETCFG BYTE byRes1[32]; }NET_DVR_ALARMHOST_NETCFG, *LPNET_DVR_ALARMHOST_NETCFG; -//////////ľϴʽ///////////// +//////////积木上传方式///////////// #define MAX_REPORTCHAN_NUM 4 #define MAX_CENTERGROUP_NUM 16 typedef struct tagNET_DVR_ALARMHOST_REPORTCENTER_CFG { DWORD dwSize; - BYTE byValid; //Ƿ - BYTE byRes[3]; //1 - BYTE byChanAlarmMode[MAX_REPORTCHAN_NUM/*4*/]; //鱨ͨ 1-T12-T2 3-N1 4-N25-G1 6-G2 - BYTE byDealFailCenter[MAX_CENTERGROUP_NUM/*16*/]; //ָ鷢ʧܱ棬±ʾĸ飬0-ѡ1-ѡ - BYTE byDataType; //1- 2-DZ 3- - BYTE byRes2[15]; //2 + BYTE byValid; //是否启用 + BYTE byRes[3]; //保留1 + BYTE byChanAlarmMode[MAX_REPORTCHAN_NUM/*4*/]; //中心组报警通道, 1-T1、2-T2、 3-N1、 4-N2、5-G1、 6-G2 + BYTE byDealFailCenter[MAX_CENTERGROUP_NUM/*16*/]; //向指定中心组发送失败报告,用数组下标表示是哪个中心组,0-不选择、1-选择 + BYTE byDataType; //1-报警数据 2-非报警数据 3-所有数据 + BYTE byRes2[15]; //保留2 }NET_DVR_ALARMHOST_REPORTCENTER_CFG, *LPNET_DVR_ALARMHOST_REPORTCENTER_CFG; -#define MAX_EVENT_NUM 32//籨¼ +#define MAX_EVENT_NUM 32//网络报警主机最大事件数 typedef struct tagNET_DVR_ALARMHOST_REPORT_CENTER_CFG_V40 { DWORD dwSize; - BYTE byValid; //Ƿ - BYTE byDataType; //1-б 2-зDZ 3-ݣ4-棬5-Ƿ - BYTE byRes[2]; //1 - BYTE byChanAlarmMode[MAX_REPORTCHAN_NUM/*4*/]; //鱨ͨ 1-T12-T2 3-N1 4-N25-G1 6-G27-N3 8-N49-CMK-4G10-CMK-NET(豸֧3GG1G2ʾ3Gģ飬֧֣ʾGPRSģ飬һ豸3GģGPRSģֻһ) - BYTE byDealFailCenter[MAX_CENTERGROUP_NUM/*16*/]; //ָ鷢ʧܱ棬±ʾĸ飬0-ѡ1-ѡ - BYTE byZoneReport[MAX_ALARMHOST_ALARMIN_NUM]; //ͣ0-ϴ1-ϴ - BYTE byNonZoneReport[MAX_EVENT_NUM]; //Ƿ, ÿһԪرʾһ¼ͣ0-ϴ1-ϴbyNonZoneReport[0]- byNonZoneReport[1]-ϵͳ״̬ byNonZoneReport[2]-ȡ byNonZoneReport[3]-Ա byNonZoneReport[4]- byNonZoneReport[5]- byNonZoneReport[6]-Юֱ byNonZoneReport[7]-ָ byNonZoneReport[8]-· byNonZoneReport[9]-·ָ档byNonZoneReport[10]-̽״̬棨ߡߣbyNonZoneReport[11]-̽״̬棨ѹǷѹbyNonZoneReport[12]-Ƶ - BYTE byAlarmNetCard[MAX_REPORTCHAN_NUM/*4*/]; //鱨ģ0-11-22-չ1,3-չ2ͨΪN1N2N3N4ʱЧ - BYTE byRes2[252]; //2 + BYTE byValid; //是否启用 + BYTE byDataType; //1-所有报警数据 2-所有非报警数据 3-所有数据,4-防区报警报告,5-非防区报警报告 + BYTE byRes[2]; //保留1 + BYTE byChanAlarmMode[MAX_REPORTCHAN_NUM/*4*/]; //中心组报警通道, 1-T1、2-T2、 3-N1、 4-N2、5-G1、 6-G2、7-N3、 8-N4、9-CMK-4G、10-CMK-NET(如果设备支持3G,G1,G2表示3G模块,如果不支持,表示GPRS模块,一款设备中3G模块和GPRS模块只会出现一种) + BYTE byDealFailCenter[MAX_CENTERGROUP_NUM/*16*/]; //向指定中心组发送失败报告,用数组下标表示是哪个中心组,0-不选择、1-选择 + BYTE byZoneReport[MAX_ALARMHOST_ALARMIN_NUM]; //防区报告类型,0-不上传,1-上传 + BYTE byNonZoneReport[MAX_EVENT_NUM]; //非防区报警报告, 每一个元素表示一种事件类型,0-不上传,1-上传,byNonZoneReport[0]-软防区报告 byNonZoneReport[1]-系统状态报告 byNonZoneReport[2]-取消报告 byNonZoneReport[3]-测试报告 byNonZoneReport[4]-布防报告 byNonZoneReport[5]-撤防报告 byNonZoneReport[6]-挟持报告 byNonZoneReport[7]-报警恢复报告 byNonZoneReport[8]-旁路报告 byNonZoneReport[9]-旁路恢复报告。byNonZoneReport[10]-探测器连接状态报告(上线、离线)。byNonZoneReport[11]-探测器电量状态报告(电压正常、欠压)byNonZoneReport[12]-视频报警报告 + BYTE byAlarmNetCard[MAX_REPORTCHAN_NUM/*4*/]; //中心组报警网卡中心,0-主网卡中心1,1-主网卡中心2,2-扩展网卡中心1,3-扩展网卡中心2(报警通道为N1、N2、N3、N4时有效) + BYTE byRes2[252]; //保留2 }NET_DVR_ALARMHOST_REPORT_CENTER_CFG_V40, *LPNET_DVR_ALARMHOST_REPORT_CENTER_CFG_V40; -//////////״̬ϴ///////////// +//////////防护舱状态上传///////////// typedef struct tagNET_DVR_ALARMHOST_SAFETYCABINSTATE { DWORD dwSize; - BYTE byEnterButton; //Űť״̬ 0- 1-ť - BYTE byExitButton; //Űť״̬ 0- 1-ť - BYTE byDoorState; //״̬ 0-Źر 1-Ŵ - BYTE byLockState; //״̬ 0- 1- - BYTE byUrgencyButton; //ť״̬ 0- 1-ť - BYTE byManState; //״̬ 0-û 1- - BYTE byAbnormal; //쳣״̬ 0- 1-쳣(ʹóʱϴ쳣) - BYTE byLightState; //ƹ״̬ 0- 1- - BYTE byFanState; //״̬ 0-أ1- - BYTE byFollow; //β״̬ 0-β棬1-β - BYTE byFighting; //״̬ 0-޴򶷣1-д - BYTE byFaint; //ε״̬ 0-ε1-ε - BYTE byManyPerson; //״̬ 0-޶˽գ1-˽ - BYTE byRes[59]; // + BYTE byEnterButton; //进门按钮状态 0-不按下 1-按钮按下 + BYTE byExitButton; //出门按钮状态 0-不按下 1-按钮按下 + BYTE byDoorState; //门状态 0-门关闭 1-门打开 + BYTE byLockState; //锁状态 0-锁关 1-锁开 + BYTE byUrgencyButton; //紧急按钮状态 0-不按下 1-按钮按下 + BYTE byManState; //人状态 0-没人 1-有人 + BYTE byAbnormal; //异常状态 0-正常 1-异常(防护舱使用超时上传异常) + BYTE byLightState; //灯光状态 0-关 ,1-开 + BYTE byFanState; //风扇状态 0-关,1-开 + BYTE byFollow; //尾随进入状态 0-无尾随,1-有尾随 + BYTE byFighting; //打斗状态 0-无打斗,1-有打斗 + BYTE byFaint; //晕倒状态 0-无晕倒,1-有人晕倒 + BYTE byManyPerson; //多人状态 0-无多人进舱,1-多人进舱 + BYTE byRes[59]; //保留 }NET_DVR_ALARMHOST_SAFETYCABINSTATE,*LPNET_DVR_ALARMHOST_SAFETYCABINSTATE; -/////////ڣ״̬ϴ///////////// +/////////警号输出口,警号状态上传///////////// typedef struct tagNET_DVR_ALARMHOST_ALARMOUTSTATUS { DWORD dwSize; - BYTE byName[32]; //ƻ򾯺 - BYTE byAlarmType; //1-״̬ 2-״̬ - WORD wChan; //DZ״ֵ̬ķΧΪ0-511Ǿ״̬Χ1-8ֻ1 - BYTE byAlarmStatus; //״̬ 0-ޱ 1-б + BYTE byName[32]; //报警输出口名称或警号名称 + BYTE byAlarmType; //1-报警输出口状态, 2-警号状态 + WORD wChan; //如果是报警输出口状态,该值的范围为0-511;如果是警号状态,范围1-8(防护舱只有1个警号输出) + BYTE byAlarmStatus; //报警状态 0-无报警 1-有报警 BYTE byRes[32]; }NET_DVR_ALARMHOST_ALARMOUTSTATUS,*LPNET_DVR_ALARMHOST_ALARMOUTSTATUS; -//////////ϴ///////////// +//////////语音上传下载///////////// typedef struct tagNET_DVR_AUDIO_PARAM { DWORD dwSize; - BYTE byAudioFormat; //Ƶʽ1-G7112-G722 + BYTE byAudioFormat; //音频格式,1-G711,2-G722 BYTE byRes1; WORD wChannels; // number of channels (i.e. mono, stereo...) - DWORD dwSamplesPerSec; // - BYTE byRes2[20]; // - DWORD dwAudioSize; //ƵȴСѹĴС + DWORD dwSamplesPerSec; //采样率 + BYTE byRes2[20]; //保留 + DWORD dwAudioSize; //音频长度大小,压缩后的大小 }NET_DVR_AUDIO_PARAM,*LPNET_DVR_AUDIO_PARAM; -//ԤV40ӿ +//预览V40接口 typedef struct tagNET_DVR_PREVIEWINFO { - LONG lChannel;//ͨ - DWORD dwStreamType; // ͣ0-1-2-33-4, 4-5,5-6,7-7,8-8,9-9,10-10 - DWORD dwLinkMode;// 0TCPʽ,1UDPʽ,2ಥʽ,3 - RTPʽ4-RTP/RTSP,5-RSTP/HTTP ,6- HRUDPɿ䣩 ,7-RTSP/HTTPS,8-NPQ,9-RTSP/CNHTTPS - HWND hPlayWnd;//Ŵڵľ,ΪNULLʾͼ - DWORD bBlocked; //0-ȡ, 1-ȡ, SDKڲconnectʧܽ5sijʱܹ,ʺѯȡ. - DWORD bPassbackRecord; //0-¼ش,1¼ش - BYTE byPreviewMode;//Ԥģʽ0-Ԥ1-ӳԤ - BYTE byStreamID[STREAM_ID_LEN/*32*/];//IDlChannelΪ0xffffffffʱô˲ - BYTE byProtoType; //ӦòȡЭ飬0-˽Э飬1-RTSPЭ,2-SRTPܣӦ˽ṹdwLinkMode ֶΣ֧·ʽ, Ϊ1ʾudp䷽ʽTLSܣSRTPܣΪ2ʾಥ䷽ʽTLSܣSRTPܣ + LONG lChannel;//通道号 + DWORD dwStreamType; // 码流类型,0-主码流,1-子码流,2-码流3,3-码流4, 4-码流5,5-码流6,7-码流7,8-码流8,9-码流9,10-码流10 + DWORD dwLinkMode;// 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP ,6- HRUDP(可靠传输) ,7-RTSP/HTTPS,8-NPQ,9-RTSP/CNHTTPS + HWND hPlayWnd;//播放窗口的句柄,为NULL表示不播放图象 + DWORD bBlocked; //0-非阻塞取流, 1-阻塞取流, 如果阻塞SDK内部connect失败将会有5s的超时才能够返回,不适合于轮询取流操作. + DWORD bPassbackRecord; //0-不启用录像回传,1启用录像回传 + BYTE byPreviewMode;//预览模式,0-正常预览,1-延迟预览 + BYTE byStreamID[STREAM_ID_LEN/*32*/];//流ID,lChannel为0xffffffff时启用此参数 + BYTE byProtoType; //应用层取流协议,0-私有协议,1-RTSP协议,2-SRTP码流加密(对应此结构体中dwLinkMode 字段,支持如下方式, 为1,表示udp传输方式,信令走TLS加密,码流走SRTP加密,为2,表示多播传输方式,信令走TLS加密,码流走SRTP加密) BYTE byRes1; - BYTE byVideoCodingType; //ݱ 0-ͨñ 1-ȳ̽ԭʼݣ¶ݵļϢͨȥ㣬ԭʼʵ¶ֵ - DWORD dwDisplayBufNum; //ſⲥŻ󻺳֡Χ1-500ʱĬΪ1 - BYTE byNPQMode; //NPQֱģʽǹý 0-ֱ 1-ý - BYTE byRecvMetaData; //Ƿmetadataݣ豸Ƿָ֧ùͨGET /ISAPI/System/capabilities DeviceCap.SysCap.isSupportMetadataǷΪtrue - BYTE byDataType; //ͣ0-ݣ1-Ƶ - BYTE byReconnect; //·ơ0-Ч1-2-رȫNET_DVR_SetReconnectáò0ʱ·ʵЧԸòΪ׼ + BYTE byVideoCodingType; //码流数据编解码类型 0-通用编码数据 1-热成像探测器产生的原始数据(温度数据的加密信息,通过去加密运算,将原始数据算出真实的温度值) + DWORD dwDisplayBufNum; //播放库播放缓冲区最大缓冲帧数,范围1-50,置0时默认为1 + BYTE byNPQMode; //NPQ是直连模式,还是过流媒体 0-直连 1-过流媒体 + BYTE byRecvMetaData; //是否接收metadata数据,设备是否支持该功能通过GET /ISAPI/System/capabilities 中DeviceCap.SysCap.isSupportMetadata是否存在且为true + BYTE byDataType; //数据类型,0-码流数据,1-音频数据 + BYTE byReconnect; //单路重连控制。0-无效,1-开启重连,2-关闭重连。全局重连参数由NET_DVR_SetReconnect配置。该参数非0时,此路实际生效以该参数为准。 BYTE byRes[212]; }NET_DVR_PREVIEWINFO, *LPNET_DVR_PREVIEWINFO; -//ö +//连接类型枚举 typedef enum _NET_DVR_LINK_KIND_ { - ENUM_LINK_PREVIEW = 1, //Ԥ - ENUM_LINK_PLAYBACK, //طţ - ENUM_LINK_VOICEPLAY //Խ/ת + ENUM_LINK_PREVIEW = 1, //预览 + ENUM_LINK_PLAYBACK, //回放,下载 + ENUM_LINK_VOICEPLAY //语音对讲/转发 }NET_DVR_LINK_KIND; -//ӵַṹ壬RTSPȡʱһ˿ͨŵ +//连接地址结构体,RTSP取流时存在一个句柄创建多个端口通信的情况 typedef struct tagNET_DVR_LINK_ADDR { - NET_DVR_IPADDR_UNION uLocalIP; //IPַ - WORD wLocalPort[10]; //ض˿ں - BYTE byLocalPortNum; //ض˿ + NET_DVR_IPADDR_UNION uLocalIP; //本地IP地址 + WORD wLocalPort[10]; //本地端口号 + BYTE byLocalPortNum; //本地端口数 BYTE byRes1[3]; - NET_DVR_IPADDR_UNION uDevIP; //豸IPַ - WORD wDevPort[10]; //豸˿ں - BYTE byDevPortNum; //豸˿ + NET_DVR_IPADDR_UNION uDevIP; //设备IP地址 + WORD wDevPort[10]; //设备端口号 + BYTE byDevPortNum; //设备端口数 BYTE byRes2[3]; BYTE byRes[80]; }NET_DVR_LINK_ADDR, *LPNET_DVR_LINK_ADDR; -//豸ȡ +//中心智能设备取流 typedef struct tagNET_DVR_PREVIEWINFO_SPECIAL { - char sURL[1024]; //ȡURLӦ/ISAPI/SDT/Management/Region/IDصȡURL豸صURLϷҪûڵ㣬ûϢdeviceUserdevicePasswordڵ - DWORD dwLinkMode;// 0TCPʽ,1UDPʽ,2ಥʽ,3 - RTPʽ4-RTP/RTSP,5-RSTP/HTTP - HWND hPlayWnd;//Ŵڵľ,ΪNULLʾͼ - DWORD bBlocked; //0-ȡ, 1-ȡ, SDKڲconnectʧܽ5sijʱܹ,ʺѯȡ. - DWORD dwDisplayBufNum; //ſⲥŻ󻺳֡Χ1-500ʱĬΪ1 + char sURL[1024]; //取流URL,对应/ISAPI/SDT/Management/Region/ID返回的取流URL,部分设备返回的URL不合法,需要增加用户名密码节点,其中用户名和密码信息来自deviceUser和devicePassword节点 + DWORD dwLinkMode;// 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP + HWND hPlayWnd;//播放窗口的句柄,为NULL表示不播放图象 + DWORD bBlocked; //0-非阻塞取流, 1-阻塞取流, 如果阻塞SDK内部connect失败将会有5s的超时才能够返回,不适合于轮询取流操作. + DWORD dwDisplayBufNum; //播放库播放缓冲区最大缓冲帧数,范围1-50,置0时默认为1 BYTE byRes[64]; }NET_DVR_PREVIEWINFO_SPECIAL, *LPNET_DVR_PREVIEWINFO_SPECIAL; -//¼ +//事件触发报警输出 typedef struct tagNET_DVR_TRIGGER_EVENT { DWORD dwSize; - DWORD dwOverallEventTriggerAlarmoutOn; //ȫ¼λbit0-磬bit1-صѹͣbit2-绰ߵߣbit3-쳣bit4-쳣 ,bit5-Ӳ̹, bit6-3G/4Gź쳣, bit7-ģӣ bit8- WIFIͨŹϣbit9-RFźŸŹ - DWORD dwOverallEventTriggerAlarmoutOff; //ȫ¼λbit0-磬bit1-صѹͣbit2-绰ߵߣbit3-쳣bit4-쳣 ,bit5-Ӳ̹, bit6-3G/4Gź쳣, bit7-ģӣ bit8- WIFIͨŹϣbit9-RFźŸŹ - DWORD dwSubSystemEventTriggerAlarmoutOn[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //ϵͳ¼,dwSubSystemEvent[0]ʾϵͳ1dwSubSystemEvent[2]ʾϵͳ2ϵͳȡwSubSystemÿϵͳ¼λʾbit0-ʱbit1-˳ʱbit2-bit3-bit4-bit5-,bit6-ָ,bit7-,bit8-ָ - DWORD dwSubSystemEventTriggerAlarmoutOff[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //ϵͳ¼ر,wSubSystemEvent[0]ʾϵͳ1dwSubSystemEvent[2]ʾϵͳ2ϵͳȡwSubSystemÿϵͳ¼λʾbit0-ʱbit1-˳ʱbit2-bit3-bit4-bit5-,bit6-ָ,bit7-,bit8-ָ + DWORD dwOverallEventTriggerAlarmoutOn; //全局事件触发报警输出开启,按位或,bit0-交流电掉电,bit1-电池电压低,bit2-电话线掉线,bit3-有线网络异常,bit4-无线网络异常 ,bit5-硬盘故障, bit6-3G/4G信号异常, bit7-(模块链接)第三方主机掉线 ,bit8- WIFI通信故障,bit9-RF信号干扰故障 + DWORD dwOverallEventTriggerAlarmoutOff; //全局事件触发报警输出开启,按位或,bit0-交流电掉电,bit1-电池电压低,bit2-电话线掉线,bit3-有线网络异常,bit4-无线网络异常 ,bit5-硬盘故障, bit6-3G/4G信号异常, bit7-(模块链接)第三方主机掉线 ,bit8- WIFI通信故障,bit9-RF信号干扰故障 + DWORD dwSubSystemEventTriggerAlarmoutOn[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统事件触发报警输出开启,dwSubSystemEvent[0]表示子系统1,dwSubSystemEvent[2]表示子系统2,具体的子系统个数从能力集获取(wSubSystem),每个子系统的事件按位表示,bit0-进入延时,bit1-退出延时,bit2-布防,bit3-撤防,bit4-报警,bit5-消除报警记忆,bit6-报警恢复,bit7-防区防拆,bit8-防区防拆恢复 + DWORD dwSubSystemEventTriggerAlarmoutOff[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统事件触发报警输出关闭,wSubSystemEvent[0]表示子系统1,dwSubSystemEvent[2]表示子系统2,具体的子系统个数从能力集获取(wSubSystem),每个子系统的事件按位表示,bit0-进入延时,bit1-退出延时,bit2-布防,bit3-撤防,bit4-报警,bit5-消除报警记忆,bit6-报警恢复,bit7-防区防拆,bit8-防区防拆恢复 BYTE byRes[128]; }NET_DVR_TRIGGER_EVENT, *LPNET_DVR_TRIGGER_EVENT; -//ϴ +//故障处理配置 typedef struct tagNET_DVR_ALARMHOST_FAULT_CFG { DWORD dwSize; - DWORD dwCheckFault; //Ƿϣbit0-ϵ磬bit1-Ƿѹbit2-𿪣bit3-绰ߵߣbit4-485豸쳣bit5-ϣbit6-쳣bit7-չ쳣bit8-Ӳ쳣bit9- FPGAϣbit10- ģ, bit11-չ쳣bit12-WIFIͨŹϣbit13-RFźŸŹϣֵ֧Ĺʹȡ - DWORD dwOverallFaultJointLED; //Ϲȫָּʾ bit0-ϵ磬bit1-Ƿѹbit2-𿪣bit3-绰ߵߣbit4-485豸쳣bit5-ϣbit6-쳣bit7-չ쳣bit8-Ӳ쳣ֵ֧Ĺʹȡ - DWORD dwOverallFaultJointSound; //Ϲȫּ bit0-ϵ磬bit1-Ƿѹbit2-𿪣bit3-绰ߵߣbit4-485豸쳣bit5-ϣbit6-쳣bit7-չ쳣bit8-Ӳ쳣ֵ֧Ĺʹȡ - DWORD dwSubSystemFaultJointLED[MAX_ALARMHOST_SUBSYSTEM]; /*ϹϵͳָʾdwSubSystemFaultJointLED[0]ʾϵͳ1ĹϢdwSubSystemFaultJointLED[0]ÿһλʾһйϣbit0-ϵ磬bit1-Ƿѹbit2-𿪣bit3-绰ߵߣbit4-485豸쳣bit5-ϣbit6-쳣bit7-չ쳣bit8-Ӳ쳣; dwSubSystemFaultJointLED[1]ʾϵͳ2Դ*/ - DWORD dwSubSystemFaultJointSound[MAX_ALARMHOST_SUBSYSTEM];/*ϹϵͳڼdwSubSystemFaultJointLED[0]ʾϵͳ1ĹϢdwSubSystemFaultJointSound [0]ÿһλʾһйϣbit0-ϵ磬bit1-Ƿѹbit2-𿪣bit3-绰ߵߣbit4-485豸쳣bit5-ϣbit6-쳣bit7-չ쳣bit8-Ӳ쳣; dwSubSystemFaultJointSound [1]ʾϵͳ2Դ*/ - DWORD dwFaultJointFaultLight;//Ϲϵ + DWORD dwCheckFault; //是否检测故障,bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常,bit9- FPGA故障,bit10- 模拟量故障, bit11-防区扩展板异常,bit12-WIFI通信故障,bit13-RF信号干扰故障,具体支持的故障类型从能力集获取 + DWORD dwOverallFaultJointLED; //故障关联全局键盘指示灯输出 bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常,具体支持的故障类型从能力集获取 + DWORD dwOverallFaultJointSound; //故障关联全局键盘声音输出 bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常,具体支持的故障类型从能力集获取 + DWORD dwSubSystemFaultJointLED[MAX_ALARMHOST_SUBSYSTEM]; /*故障关联子系统键盘指示灯输出,dwSubSystemFaultJointLED[0]表示子系统1的关联信息。dwSubSystemFaultJointLED[0]的每一位表示一中故障,bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常; dwSubSystemFaultJointLED[1]表示子系统2,以此类推*/ + DWORD dwSubSystemFaultJointSound[MAX_ALARMHOST_SUBSYSTEM];/*故障关联子系统键盘声音输出(声音在键盘上输出)dwSubSystemFaultJointLED[0]表示子系统1的关联信息。dwSubSystemFaultJointSound [0]的每一位表示一中故障,bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常; dwSubSystemFaultJointSound [1]表示子系统2,以此类推*/ + DWORD dwFaultJointFaultLight;//故障关联故障灯输出 BYTE byRes[60]; }NET_DVR_ALARMHOST_FAULT_CFG, *LPNET_DVR_ALARMHOST_FAULT_CFG; typedef struct tagNET_DVR_LIST_INFO { DWORD dwSize; - BYTE byIndex; //ϵͳţ0xffʾϵͳ - BYTE byRes[63]; // + BYTE byIndex; //子系统号,0xff表示所有子系统 + BYTE byRes[63]; //保留 }NET_DVR_LIST_INFO, *LPNET_DVR_LIST_INFO; #define CID_CODE_LEN 4 #define DEV_SERIAL_LEN 9 typedef enum tagNET_DVR_ALARMHOST_REPORT_TYPE { - NET_DVR_DEFENCE_ALARM = 1, // - NET_DVR_VIDEO_ALARM, //Ƶ - NET_DVR_VIRTUAL_DEFENCE_ALARM, // - NET_DVR_HOSTAGE_ALARM, //Юֱ - NET_DVR_KNOCK_DOWN_ALARM, //𱨾 - NET_DVR_OPERATE_ALARM, // - NET_DVR_OHTER_ABNORMAL_ALARM //쳣 + NET_DVR_DEFENCE_ALARM = 1, //防区报警 + NET_DVR_VIDEO_ALARM, //视频报警 + NET_DVR_VIRTUAL_DEFENCE_ALARM, //软防区报警 + NET_DVR_HOSTAGE_ALARM, //挟持报警 + NET_DVR_KNOCK_DOWN_ALARM, //防拆报警 + NET_DVR_OPERATE_ALARM, //操作报告 + NET_DVR_OHTER_ABNORMAL_ALARM //异常报告 }NET_DVR_ALARMHOST_REPORT_TYPE; typedef enum tagNET_DVR_ALARMHOST_CID_MAIN_TYPE { - CID_ENTER = 1000, /*Ļ*/ - CID_EXIT = 3000 /*ָĻ*/ + CID_ENTER = 1000, /*触发报告的基数*/ + CID_EXIT = 3000 /*恢复报告的基数*/ }NET_DVR_ALARMHOST_CID_MAIN_TYPE; typedef enum tagNET_DVR_ALARMHOST_CID_MINOR_TYPE { - CID_MEDICAL_ALARM = 100, /*Ȼ*/ - CID_ALARM = 103, /**/ - CID_FIRE_ALARM = 110, /**/ - CID_ABDUCT_REPORT = 121, /*Юֱ*/ - CID_SILENT_24 = 122, /*24Сʱ*/ - CID_AUDIO_24 = 123, /*24Сʱ*/ - CID_AUXILIARY_24 = 124, /*24Сʱ*/ - CID_SHOCK_24 = 125, /*24Сʱ*/ - CID_OVERTIME_ALARM = 126, /*ʱ*/ - CID_EMERGENCE_CALL_HELP = 129, /**/ - CID_BURGLARY_ALARM = 130, /*Ա*/ - CID_PERIMETER_ALARM = 131, /*ܽ*/ - CID_INNET_ALARM = 132, /*ڲ*/ - CID_ENTER_EXIT = 134, /**/ - CID_DEVICE_OPEN = 137, /*豸*/ - CID_ZONE_BUS_BREAK = 141, /*߿·*/ - CID_ZONE_BUS_SHORT = 142, /*߶·*/ - CID_MOTION_ALARM = 148, /*ƶ*/ - CID_GAS_LEAKAGE = 151, /*ȼй©*/ - CID_ZONE_EARLY_WARNING = 207, /*Ԥ*/ - CID_AC_LOSS = 301, /**/ - CID_LOW_BATT_VOL = 302, /*صѹ*/ - CID_DEV_RESET = 305, /*λ*/ - CID_MBUS_MODEL_FAULT = 333, /*չģ*/ - CID_PRINTER_FAIL = 336, /*ӡ*/ - CID_LOW_EXPANDER_VOL = 338, /*չģѹ*/ - CID_EXPANDER_OPEN = 341, /*չģ鱻*/ - CID_EXPANDER_AC_POWER_DOWN = 342, /*չģ齻*/ - CID_WIRELESS_REPEATER_TAMPERED = 343, /*м𴥷*/ - CID_WIRELESS_SIREN_TAMPERED = 344, /*߾ŷ𴥷*/ - CID_WIRELESS_SIREN_DISCONNECTED = 345, /*߾ŵ*/ - CID_LINE_LOSS = 354, /*绰ͨѶʧ*/ - CID_BUS_LOSS = 382, /*չģ*/ - CID_DETECTOR_OPEN = 383, /*Ӧ*/ - CID_ZONE_OPEN_CIRCUIT = 386, /*·*/ - CID_ZONE_SHORT_CIRCUIT = 387, /*·*/ - CID_GUARD = 401, /**/ - CID_GUARD_AUTO = 403, /*Զ*/ - CID_CANCEL_ARM = 406, /**/ - CID_GUARD_IMME = 408, /*ʱ*/ - CID_KEY_ZONE_GUARD = 409, /*Կ׷*/ - CID_GUARD_STAY = 441, /*ز*/ - CID_FORCED_ARM = 442, /*ǿƲ*/ - CID_AUTOCTRL_TRIG = 443, /*ʱ/ش*/ - CID_ONETOUCH_AWAY_ARMING = 444, /*һ*/ - CID_ONETOUCH_STAY_ARMING = 445, /*һز*/ - CID_CARD_ARMING_OR_DISARMING = 446, /*ˢ*/ - CID_LATE_TO_DISARM = 452, /*ٵ*/ - CID_AUTOGUARD_FAIL = 455, /*Զʧ*/ - CID_AOPEN_TRIG_FAIL = 460, /*ʱʧ*/ - CID_ACLOSE_TRIG_FAIL = 461, /*ʱرմʧ*/ - CID_AUTOUNGUARD_FAIL = 462, /*Զʧ*/ - CID_BYPASS = 570, /*·¼*/ - CID_GROUP_BYPASS = 574, /*·*/ - CID_MANUAL_TEST_RPT = 601, /*ֶԱ*/ - CID_AUTO_TEST_RPT = 602, /*ʱԱ*/ - CID_PHONE_CONNET_TEST = 617, /*绰·*/ - CID_ENTER_PROG = 627, /**/ - CID_EXIT_PROG = 628, /*˳*/ - CID_FIELD_DETECTION = 759, /**/ - CID_LINE_DETECTION = 773, /*籨*/ - CID_PIR_ALARM = 774, /*PIR*/ - CID_SOUND_INTENSITY_RISE = 775, /*ǿ*/ - CID_SOUND_INTENSITY_DROP = 776, /*ǿ*/ - CID_AUDIO_INPUT_EXCEPTION = 777, /*Ƶ쳣*/ - CID_SOFT_INSTAND = 810, /**/ - CID_SOFT_FIRE = 811, /**/ - CID_SOFT_MOBS = 812, /*˾mobster*/ - CID_KEYPAD_LOCKED = 862, /**/ - CID_ABSENCE_ALARM = 863, /*ֵ*/ - CID_KEY_FAIL = 910, /*̵*/ - CID_TRIGGER_FAIL = 911, /*ϴ*/ - CID_GPK_FAIL = 912, /*GP/K*/ - CID_MODULE_FAIL = 913, /*MN/K*/ - CID_WIRELESS_DETECTOR_FAIL = 914, /*̽*/ - CID_WIRELESS_DETECTOR_BATTERY_LOW = 915,/*̽Ƿѹ/ָ*/ - CID_EXPANDER_DISCONNECT = 916, /*չģ*/ - CID_WIRELESS_REPEATER_DISCONNECT = 917, /*м*/ - CID_RADAR_TRANS_FAULT = 918, /*״ź쳣*/ - CID_WIRELESS_SIREN_LOW_BATTERY = 919, /*߾ŵ*/ - CID_WRIE_LESS_NET = 920, /**/ - CID_SIM_FAULT = 921, /*SIM*/ - CID_WIFI_ABNORMAL = 922, /*WIFIͨ쳣/ָ*/ - CID_RF_ABNORMAL = 923, /*RFź쳣/ָ*/ - CID_DATE_TRAFFIC_OVERFLOW = 924, /**/ - CID_IPADDR_CONFLICT = 930, /*IPͻ*/ - CID_ETHERNET_BROKEN = 931, /*߶*/ - CID_GROUP_OUT_RP = 932, /*ͨѶʧ*/ - CID_GROUP_IN_RP = 933, /*ͨͨѶʧ*/ - CID_MOTION_DECTECT = 940, /*ƶⱨʼ/*/ - CID_MASK_ALARM = 941, /*ڵʼ/*/ - CID_VI_LOST = 942, /*Ƶʧʼ/*/ - CID_VS_MISMATCH = 943, /*/Ƶʽƥ*/ - CID_VI_EXCEPTION = 944, /*Ƶ쳣/ָ*/ - CID_HD_FULL = 945, /*Ӳ/ָ*/ - CID_HD_ERROR = 946, /*Ӳ̴/ָ*/ - CID_PIC_SEND_FAILED = 947, /*ͼƬϴʧ*/ - CID_KEY_LOCKED = 948, /**/ - CID_NETWORK_CAMERA_DISCONNECT = 949, /*IPCϿ*/ - CID_DUTY_CHECKING = 960, /*ֵز*/ - CID_POST_RESPONSE = 961, /*ֵӦ*/ - CID_ZONE_BUS_SEARCH = 970, /**/ - CID_ZONE_BUS_REGIST = 971, /*ע*/ - CID_GUARD_DELAY_OP = 972, /*Զʱ*/ - CID_GUARD_SINGLE = 973, /**/ - CID_SINGLE_ZONE_CLEARED = 974, /**/ - CID_ZONE_ASSOCIATED_DETECTOR = 975, /*/ɾ̽*/ - CID_ZONE_CONSULTING = 976, /*ҵѯ*/ - CID_EXPANDER_DELETED = 977, /*ɾչģ*/ - CID_WIRELESS_REPEATER_DELETED = 978, /*ɾм*/ - CID_WIRELESS_SIREN_DELETED = 979, /*ɾ߾*/ + CID_MEDICAL_ALARM = 100, /*救护报警*/ + CID_ALARM = 103, /*报警*/ + CID_FIRE_ALARM = 110, /*火警*/ + CID_ABDUCT_REPORT = 121, /*挟持报告*/ + CID_SILENT_24 = 122, /*24小时无声*/ + CID_AUDIO_24 = 123, /*24小时有声*/ + CID_AUXILIARY_24 = 124, /*24小时辅助*/ + CID_SHOCK_24 = 125, /*24小时震动*/ + CID_OVERTIME_ALARM = 126, /*超时报警*/ + CID_EMERGENCE_CALL_HELP = 129, /*紧急报警求助*/ + CID_BURGLARY_ALARM = 130, /*盗窃报警*/ + CID_PERIMETER_ALARM = 131, /*周界*/ + CID_INNET_ALARM = 132, /*内部防区*/ + CID_ENTER_EXIT = 134, /*出入*/ + CID_DEVICE_OPEN = 137, /*设备防拆*/ + CID_ZONE_BUS_BREAK = 141, /*总线开路*/ + CID_ZONE_BUS_SHORT = 142, /*总线短路*/ + CID_MOTION_ALARM = 148, /*移动报警*/ + CID_GAS_LEAKAGE = 151, /*燃气泄漏*/ + CID_ZONE_EARLY_WARNING = 207, /*防区预警*/ + CID_AC_LOSS = 301, /*交流掉电*/ + CID_LOW_BATT_VOL = 302, /*蓄电池电压低*/ + CID_DEV_RESET = 305, /*主机复位*/ + CID_MBUS_MODEL_FAULT = 333, /*扩展模块故障*/ + CID_PRINTER_FAIL = 336, /*打印机掉线*/ + CID_LOW_EXPANDER_VOL = 338, /*扩展模块电压低*/ + CID_EXPANDER_OPEN = 341, /*扩展模块被拆*/ + CID_EXPANDER_AC_POWER_DOWN = 342, /*扩展模块交流电掉电*/ + CID_WIRELESS_REPEATER_TAMPERED = 343, /*无线中继器防拆触发*/ + CID_WIRELESS_SIREN_TAMPERED = 344, /*无线警号防拆触发*/ + CID_WIRELESS_SIREN_DISCONNECTED = 345, /*无线警号掉线*/ + CID_LINE_LOSS = 354, /*电话线通讯失败*/ + CID_BUS_LOSS = 382, /*扩展总线模块掉线*/ + CID_DETECTOR_OPEN = 383, /*防区感应器被拆*/ + CID_ZONE_OPEN_CIRCUIT = 386, /*防区开路提醒*/ + CID_ZONE_SHORT_CIRCUIT = 387, /*防区短路提醒*/ + CID_GUARD = 401, /*布防撤防*/ + CID_GUARD_AUTO = 403, /*自动布撤防*/ + CID_CANCEL_ARM = 406, /*消警*/ + CID_GUARD_IMME = 408, /*即时布撤防*/ + CID_KEY_ZONE_GUARD = 409, /*钥匙防区布撤防*/ + CID_GUARD_STAY = 441, /*留守布撤防*/ + CID_FORCED_ARM = 442, /*强制布防*/ + CID_AUTOCTRL_TRIG = 443, /*定时开/关触发器*/ + CID_ONETOUCH_AWAY_ARMING = 444, /*一键外出布防*/ + CID_ONETOUCH_STAY_ARMING = 445, /*一键留守布防*/ + CID_CARD_ARMING_OR_DISARMING = 446, /*刷卡布撤防*/ + CID_LATE_TO_DISARM = 452, /*迟到撤防*/ + CID_AUTOGUARD_FAIL = 455, /*自动布防失败*/ + CID_AOPEN_TRIG_FAIL = 460, /*定时开启触发器失败*/ + CID_ACLOSE_TRIG_FAIL = 461, /*定时关闭触发器失败*/ + CID_AUTOUNGUARD_FAIL = 462, /*自动撤防失败*/ + CID_BYPASS = 570, /*旁路事件*/ + CID_GROUP_BYPASS = 574, /*组旁路*/ + CID_MANUAL_TEST_RPT = 601, /*手动测试报告*/ + CID_AUTO_TEST_RPT = 602, /*定时测试报告*/ + CID_PHONE_CONNET_TEST = 617, /*电话链路测试*/ + CID_ENTER_PROG = 627, /*进入编程*/ + CID_EXIT_PROG = 628, /*退出编程*/ + CID_FIELD_DETECTION = 759, /*区域入侵*/ + CID_LINE_DETECTION = 773, /*跨界报警*/ + CID_PIR_ALARM = 774, /*PIR报警*/ + CID_SOUND_INTENSITY_RISE = 775, /*声强陡升报警*/ + CID_SOUND_INTENSITY_DROP = 776, /*声强陡降报警*/ + CID_AUDIO_INPUT_EXCEPTION = 777, /*音频输入异常报警*/ + CID_SOFT_INSTAND = 810, /*软防区紧急报警*/ + CID_SOFT_FIRE = 811, /*软防区火警*/ + CID_SOFT_MOBS = 812, /*软防区匪警mobster*/ + CID_KEYPAD_LOCKED = 862, /*键盘锁定*/ + CID_ABSENCE_ALARM = 863, /*值守离岗*/ + CID_KEY_FAIL = 910, /*键盘掉线*/ + CID_TRIGGER_FAIL = 911, /*键盘总线上触发器掉线*/ + CID_GPK_FAIL = 912, /*键盘总线上GP/K掉线*/ + CID_MODULE_FAIL = 913, /*键盘总线上MN/K掉线*/ + CID_WIRELESS_DETECTOR_FAIL = 914, /*无线探测器掉线*/ + CID_WIRELESS_DETECTOR_BATTERY_LOW = 915,/*无线探测器欠压/电量恢复正常*/ + CID_EXPANDER_DISCONNECT = 916, /*扩展模块掉线*/ + CID_WIRELESS_REPEATER_DISCONNECT = 917, /*无线中继器掉线*/ + CID_RADAR_TRANS_FAULT = 918, /*雷达信号异常*/ + CID_WIRELESS_SIREN_LOW_BATTERY = 919, /*无线警号电量低*/ + CID_WRIE_LESS_NET = 920, /*无线网络故障*/ + CID_SIM_FAULT = 921, /*SIM卡故障*/ + CID_WIFI_ABNORMAL = 922, /*WIFI通信异常/恢复正常*/ + CID_RF_ABNORMAL = 923, /*RF信号异常/恢复正常*/ + CID_DATE_TRAFFIC_OVERFLOW = 924, /*流量超额*/ + CID_IPADDR_CONFLICT = 930, /*IP冲突*/ + CID_ETHERNET_BROKEN = 931, /*网线断*/ + CID_GROUP_OUT_RP = 932, /*组间通讯失败*/ + CID_GROUP_IN_RP = 933, /*通道通讯失败*/ + CID_MOTION_DECTECT = 940, /*移动侦测报警开始/结束*/ + CID_MASK_ALARM = 941, /*遮挡报警开始/结束*/ + CID_VI_LOST = 942, /*视频丢失开始/结束*/ + CID_VS_MISMATCH = 943, /*输入/输出视频制式不匹配*/ + CID_VI_EXCEPTION = 944, /*视频输入异常/恢复正常*/ + CID_HD_FULL = 945, /*硬盘满/恢复正常*/ + CID_HD_ERROR = 946, /*硬盘错/恢复正常*/ + CID_PIC_SEND_FAILED = 947, /*图片上传失败*/ + CID_KEY_LOCKED = 948, /*键盘锁定*/ + CID_NETWORK_CAMERA_DISCONNECT = 949, /*IPC断开连接*/ + CID_DUTY_CHECKING = 960, /*值守查岗*/ + CID_POST_RESPONSE = 961, /*值守应答*/ + CID_ZONE_BUS_SEARCH = 970, /*总线搜索*/ + CID_ZONE_BUS_REGIST = 971, /*总线注册*/ + CID_GUARD_DELAY_OP = 972, /*自动布撤防延时操作*/ + CID_GUARD_SINGLE = 973, /*单防区布撤防*/ + CID_SINGLE_ZONE_CLEARED = 974, /*单防区消警*/ + CID_ZONE_ASSOCIATED_DETECTOR = 975, /*防区添加/删除探测器*/ + CID_ZONE_CONSULTING = 976, /*业务咨询*/ + CID_EXPANDER_DELETED = 977, /*删除扩展模块*/ + CID_WIRELESS_REPEATER_DELETED = 978, /*删除无线中继器*/ + CID_WIRELESS_SIREN_DELETED = 979, /*删除无线警号*/ }NET_DVR_ALARMHOST_CID_MINOR_TYPE; typedef enum tagNET_DVR_ALARMHOST_CID_ALL_MINOR_TYPE { - CID_TYPE_MEDICAL_ALARM = 1100, /*˾Ȼ*/ - CID_TYPE_MEDICAL_ALARM_RESET = 3100, /*˾Ȼָ*/ - CID_TYPE_ALARM = 1103, /*ʱ*/ - CID_TYPE_ALARM_RESET = 3103, /*ʱָ*/ - CID_TYPE_FIRE_ALARM = 1110, /*𾯱*/ - CID_TYPE_FIRE_ALARM_RESET = 3110, /*𾯱ָ*/ - CID_TYPE_ABDUCT_REPORT = 1121, /*Юֱ*/ - CID_TYPE_SILENT_24 = 1122, /*24Сʱ*/ - CID_TYPE_SILENT_24_RESET = 3122, /*24Сʱָ*/ - CID_TYPE_AUDIO_24 = 1123, /*24Сʱ*/ - CID_TYPE_AUDIO_24_RESET = 3123, /*24Сʱָ*/ - CID_TYPE_AUXILIARY_24 = 1124, /*24Сʱ*/ - CID_TYPE_AUXILIARY_24_RESET = 3124, /*24Сʱָ*/ - CID_TYPE_SHOCK_24 = 1125, /*24Сʱ𶯱*/ - CID_TYPE_SHOCK_24_RESET = 3125, /*24Сʱ𶯱ָ*/ - CID_TYPE_TIMEOUT = 1126, /*ʱ*/ - CID_TYPE_TIMEOUT_RESET = 3126, /*ʱָ*/ - CID_TYPE_EMERGENCE_CALL_HELP = 1129, /**/ - CID_TYPE_EMERGENCE_CALL_HELP_RESET = 3129, /*ָ*/ - CID_TYPE_BURGLARY_ALARM = 1130, /*Ա*/ - CID_TYPE_BURGLARY_ALARM_RESET = 3130, /*Աָ*/ - CID_TYPE_PERIMETER_ALARM = 1131, /*ܽ籨*/ - CID_TYPE_PERIMETER_ALARM_RESET = 3131, /*ܽ籨ָ*/ - CID_TYPE_INNET_ALARM = 1132, /*ڲʱ*/ - CID_TYPE_INNET_ALARM_RESET = 3132, /*ڲʱָ*/ - CID_TYPE_ENTER_EXIT = 1134, /*ʱ*/ - CID_TYPE_ENTER_EXIT_RESET = 3134, /*ʱָ*/ - CID_TYPE_DEVICE_OPEN = 1137, /*豸𱨾*/ - CID_TYPE_DEVICE_OPEN_RESET = 3137, /*豸𱨾ָ*/ - CID_TYPE_ZONE_BUS_BREAK = 1141, /*߿·*/ - CID_TYPE_ZONE_BUS_BREAK_RESET = 3141, /*߿·ָ*/ - CID_TYPE_ZONE_BUS_SHORT = 1142, /*߶·*/ - CID_TYPE_ZONE_BUS_SHORT_RESET = 3142, /*߶·ָ*/ - CID_TYPE_MOTION_ALARM = 1148, /*豸ƶ*/ - CID_TYPE_MOTION_ALARM_RESET = 3148, /*豸ƶָ*/ - CID_TYPE_GAS_LEAKAGE_ALARM = 1151, /*ȼй©*/ - CID_TYPE_GAS_LEAKAGE_ALARM_RESET = 3151, /*ȼй©ָ*/ - CID_TYPE_ZONE_EARLY_WARNING = 1207, /*Ԥ*/ - CID_TYPE_ZONE_EARLY_WARNING_RESET = 3207, /*Ԥָ*/ - CID_TYPE_AC_LOSS = 1301, /**/ - CID_TYPE_AC_LOSS_RESET = 3301, /*ָ*/ - CID_TYPE_LOW_BATT_VOL = 1302, /*صѹ*/ - CID_TYPE_LOW_BATT_VOL_NORMAL = 3302, /*صѹ*/ - CID_TYPE_DEV_RESET = 1305, /*λ*/ - CID_TYPE_MBUS_MODEL_FAULT = 1333, /*չģ*/ - CID_TYPE_MBUS_MODEL_RESET = 3333, /*չģָ*/ - CID_TYPE_PRINTER_OFF = 1336, /*ӡ*/ - CID_TYPE_PRINTER_ON = 3336, /*ӡָ*/ - CID_TYPE_EXTEND_MODULE_VOL_LOW = 1338, /*չģѹ*/ - CID_TYPE_EXTEND_MODULE_VOL_NORMAL = 3338, /*չģѹ*/ - CID_TYPE_EXTEND_MODULE_REMOVE = 1341, /*չģ𴥷*/ - CID_TYPE_EXTEND_MODULE_RECOVER = 3341, /*չģָ*/ - CID_TYPE_EXTEND_MODULE_AC_LOSS = 1342, /*չģ齻*/ - CID_TYPE_EXTEND_MODULE_AC_LOSS_RESET = 3342, /*չģ齻ָ*/ - CID_TYPE_WIRELESS_REPEATER_TAMPER = 1343, /*м𴥷*/ - CID_TYPE_WIRELESS_REPEATER_RESTORE = 3343, /*мָ*/ - CID_TYPE_WIRELESS_SIREN_TAMPER = 1344, /*߾ŷ𴥷*/ - CID_TYPE_WIRELESS_SIREN_RESTORE = 3344, /*߾ŷָ*/ - CID_TYPE_WIRELESS_SIREN_DISCONNECT = 1345, /*߾ŵ*/ - CID_TYPE_WIRELESS_SIREN_CONNECT = 3345, /*߾ŵ߻ָ*/ - CID_TYPE_LINE_LOSS = 1354, /*绰߶Ͽ*/ - CID_TYPE_LINE_LOSS_RESET = 3354, /*绰*/ - CID_TYPE_BUS_LOSS = 1382, /*չģ*/ - CID_TYPE_BUS_LOSS_RESET = 3382, /*չģ߻ָ*/ - CID_TYPE_SENSOR_TAMPER = 1383, /*Ӧ*/ - CID_TYPE_SENSOR_TAMPER_RESET = 3383, /*Ӧָ*/ - CID_TYPE_ZONE_OPEN_CIRCUIT_ALARM = 1386, /*·*/ - CID_TYPE_ZONE_SHORT_CIRCUIT_ALARM = 1387, /*·*/ - CID_TYPE_DISARM = 1401, /**/ - CID_TYPE_ARM = 3401, /**/ - CID_TYPE_DISARM_AUTO = 1403, /*Զ*/ - CID_TYPE_ARM_AUTO = 3403, /*Զ*/ - CID_TYPE_CANCEL_ARM = 1406, /**/ - CID_TYPE_ARM_IMME = 3408, /*ʱ*/ - CID_TYPE_KEY_ZONE_ARM = 1409, /*Կ׷*/ - CID_TYPE_KEY_ZONE_DISARM = 3409, /*Կ׷*/ - CID_TYPE_GUARD_STAY = 3441, /*ز*/ - CID_TYPE_FORCED_ARM = 3442, /*ǿƲ*/ - CID_TYPE_AUTOCTRL_TRIG_ON = 1443, /*ʱ*/ - CID_TYPE_AUTOCTRL_TRIG_OFF = 3443, /*ʱش*/ - CID_TYPE_LATE_TO_DISARM = 1452, /*ٵ*/ - CID_TYPE_AUTOGUARD_FAIL = 1455, /*Զʧ*/ - CID_TYPE_AOPEN_TRIG_FAIL = 1460, /*ʱʧ*/ - CID_TYPE_ACLOSE_TRIG_FAIL = 1461, /*ʱرմʧ*/ - CID_TYPE_AUTOUNGUARD_FAIL = 1462, /*Զʧ*/ - CID_TYPE_BYPASS = 1570, /*·*/ - CID_TYPE_BYPASS_RESET = 3570, /*·ָ*/ - CID_TYPE_GROUP_BYPASS = 1574, /*ϵͳ·*/ - CID_TYPE_GROUP_BYPASS_RESET = 3574, /*ϵͳ·ָ*/ - CID_TYPE_MANUAL_TEST_RPT = 1601, /*ֶԱ*/ - CID_TYPE_AUTO_TEST_RPT = 1602, /*ʱԱ*/ - CID_TYPE_LINE_TEST = 1617, /*绰·*/ - CID_TYPE_ENTER_PROG = 1627, /**/ - CID_TYPE_EXIT_PROG = 1628, /*˳*/ - CID_TYPE_FIELD_DETECTION = 1759, /**/ - CID_TYPE_FIELD_DETECTION_RESET = 3759, /*ָֻ*/ - CID_TYPE_LINE_DETECTION = 1773, /*籨*/ - CID_TYPE_LINE_DETECTION_RESET = 3773, /*籨ָ*/ - CID_TYPE_PIR_ALARM = 1774, /*PIR*/ - CID_TYPE_PIR_ALARM_RESET = 3774, /*PIRָ*/ - CID_TYPE_SOUND_INTENSITY_RISE = 1775, /*ǿ*/ - CID_TYPE_SOUND_INTENSITY_RISE_RESET = 3775, /*ǿָ*/ - CID_TYPE_SOUND_INTENSITY_DROP = 1776, /*ǿ*/ - CID_TYPE_SOUND_INTENSITY_DROP_RESET = 3776, /*ǿָ*/ - CID_TYPE_AUDIO_INPUT_EXCEPTION = 1777, /*Ƶ쳣*/ - CID_TYPE_AUDIO_INPUT_EXCEPTION_RESET = 3777, /*Ƶ쳣ָ*/ - CID_TYPE_SOFT_INSTAND = 1810, /**/ - CID_TYPE_SOFT_FIRE = 1811, /**/ - CID_TYPE_SOFT_MOBS = 1812, /*˾*/ - CID_TYPE_KEYPAD_LOCK = 1862, /**/ - CID_TYPE_KEYPAD_UNLOCK = 3862, /*̽*/ - CID_TYPE_ABSENCE_ALARM = 1863, /*ֵ*/ - CID_TYPE_KEY_FAIL = 1910, /*̵*/ - CID_TYPE_KEY_RESET = 3910, /*ָ̻*/ - CID_TYPE_TRIGGER_FAIL = 1911, /*ϴ*/ - CID_TYPE_TRIGGER_RESET = 3911, /*ϴָ*/ - CID_TYPE_GPK_FAIL = 1912, /*GP/K*/ - CID_TYPE_GPK_RESET = 3912, /*GP/Kָ*/ - CID_TYPE_MODULE_FAIL = 1913, /*MN/K*/ - CID_TYPE_MODULE_RESET = 3913, /*MN/Kָ*/ - CID_TYPE_WIRELESS_DETECTOR_FAIL = 1914, /*̽*/ - CID_TYPE_WIRELESS_DETECTOR_RESET = 3914, /*̽߻ָ*/ - CID_TYPE_WIRELESS_DETECTOR_BATTERY_LOW = 1915, /*̽ѹ*/ - CID_TYPE_WIRELESS_DETECTOR_BATTERY_NORMAL = 3915, /*̽ѹ*/ - CID_TYPE_EXTEND_MODULE_LOSS = 1916, /*չģ*/ - CID_TYPE_EXTEND_MODULE_LOSS_RESET = 3916, /*չģ߻ָ*/ - CID_TYPE_WIRELESS_REPEATER_DISCONNECT = 1917, /*м*/ - CID_TYPE_WIRELESS_REPEATER_CONNECT = 3917, /*м߻ָ*/ - CID_TYPE_RADAR_TRANS_FAULT = 1918, /*״ź쳣*/ - CID_TYPE_RADAR_TRANS_RESET = 3918, /*״ź쳣ָ*/ - CID_TYPE_WRIELESS_SIREN_LOW_BATTERY = 1919, /*߾ŵ*/ - CID_TYPE_NORMAL_WRIELESS_SIREN_BATTERY = 3919, /*߾ŵ*/ - CID_TYPE_WRIELESS_NET_FAULT = 1920, /**/ - CID_TYPE_WRIELESS_NET_RESET = 3920, /*ϻָ*/ - CID_TYPE_SIM_FAULT = 1921, /*SIM쳣*/ - CID_TYPE_SIM_RESET = 3921, /*SIM쳣ָ*/ - CID_TYPE_WIFI_ABNORMAL = 1922, /*WIFIͨ쳣*/ - CID_TYPE_WIFI_NORMAL = 3922, /*WIFIͨŻָ*/ - CID_TYPE_RF_ABNORMAL = 1923, /*RFź쳣*/ - CID_TYPE_RF_NORMAL = 3923, /*RFź*/ - CID_TYPE_DATE_TRAFFIC_OVERFLOW = 1924, /**/ - CID_TYPE_IPADDR_CONFLICT = 1930, /*IPͻ*/ - CID_TYPE_IPADDR_NORMAL = 3930, /*IP*/ - CID_TYPE_ETHERNET_BROKEN = 1931, /**/ - CID_TYPE_ETHERNET_NORMAL = 3931, /*ϻָ*/ - CID_TYPE_MOTION_DECTECT_START = 1940, /*ƶⱨʼ*/ - CID_TYPE_MOTION_DECTECT_STOP = 3940, /*ƶⱨ*/ - CID_TYPE_MASK_ALARM_START = 1941, /*ڵʼ*/ - CID_TYPE_MASK_ALARM_STOP = 3941, /*ڵ*/ - CID_TYPE_VI_LOST_START = 1942, /*ƵźŶʧ*/ - CID_TYPE_VI_LOST_STOP = 3942, /*ƵźŻָ*/ - CID_TYPE_VS_MISMATCH = 1943, /*/Ƶʽƥ*/ - CID_TYPE_VS_MATCH = 3943, /*/Ƶʽָ*/ - CID_TYPE_VI_EXCEPTION = 1944, /*Ƶ쳣*/ - CID_TYPE_VI_NORMAL = 3944, /*Ƶָ*/ - CID_TYPE_HD_FULL = 1945, /*Ӳ*/ - CID_TYPE_HD_FREE = 3945, /*Ӳ̿*/ - CID_TYPE_HD_ERROR = 1946, /*Ӳ쳣*/ - CID_TYPE_HD_RESET = 3946, /*Ӳָ̻*/ - CID_TYPE_PIC_SEND_FAILED = 1947, /*ͼƬϴʧ*/ - CID_TYPE_SENDING_EMAIL_FAILED = 1948, /*ʼʧ*/ - CID_TYPE_NETWORK_CAMERA_DISCONNECT = 1949, /*IPCϿ*/ - CID_TYPE_NETWORK_CAMERA_CONNECT = 3949, /*IPCָ*/ - CID_TYPE_DUTY_CHECKING = 1960, /*ֵز*/ - CID_TYPE_POST_RESPONSE = 1961, /*ֵӦ*/ - CID_TYPE_ZONE_BUS_SEARCH = 1970, /**/ - CID_TYPE_ZONE_BUS_REGIST = 1971, /*ע*/ - CID_TYPE_GUARD_SINGLE_ARM = 1973, /**/ - CID_TYPE_GUARD_SINGLE_DISARM = 3973, /**/ - CID_TYPE_SINGLE_ZONE_ALARM_CLEARED = 1974, /**/ - CID_TYPE_ZONE_ASSOCIATED_DETECTOR_DEL = 1975, /*ɾ̽*/ - CID_TYPE_ZONE_ASSOCIATED_DETECTOR_ADD = 3975, /*̽*/ - CID_TYPE_ZONE_CONSULT = 1976, /*ҵѯ*/ - CID_TYPE_ZONE_CONSULT_STOP = 3976, /*ҵѯ*/ - CID_TYPE_EXTEND_MODULE_DEL = 1977, /*ɾչģ*/ - CID_TYPE_EXTEND_MODULE_ADD = 3977, /*չģ*/ - CID_TYPE_WIRELESS_REPEATER_DEL = 1978, /*ɾм*/ - CID_TYPE_WIRELESS_REPEATER_ADD = 3978, /*м*/ - CID_TYPE_WIRELESS_SIREN_DEL = 1979, /*ɾ߾*/ - CID_TYPE_WIRELESS_SIREN_ADD = 3979 /*߾*/ + CID_TYPE_MEDICAL_ALARM = 1100, /*个人救护报警*/ + CID_TYPE_MEDICAL_ALARM_RESET = 3100, /*个人救护报警恢复*/ + CID_TYPE_ALARM = 1103, /*即时报警*/ + CID_TYPE_ALARM_RESET = 3103, /*即时报警恢复*/ + CID_TYPE_FIRE_ALARM = 1110, /*火警报警*/ + CID_TYPE_FIRE_ALARM_RESET = 3110, /*火警报警恢复*/ + CID_TYPE_ABDUCT_REPORT = 1121, /*挟持报告*/ + CID_TYPE_SILENT_24 = 1122, /*24小时无声报警*/ + CID_TYPE_SILENT_24_RESET = 3122, /*24小时无声报警恢复*/ + CID_TYPE_AUDIO_24 = 1123, /*24小时有声报警*/ + CID_TYPE_AUDIO_24_RESET = 3123, /*24小时有声报警恢复*/ + CID_TYPE_AUXILIARY_24 = 1124, /*24小时辅助报警*/ + CID_TYPE_AUXILIARY_24_RESET = 3124, /*24小时辅助报警恢复*/ + CID_TYPE_SHOCK_24 = 1125, /*24小时震动报警*/ + CID_TYPE_SHOCK_24_RESET = 3125, /*24小时震动报警恢复*/ + CID_TYPE_TIMEOUT = 1126, /*超时报警*/ + CID_TYPE_TIMEOUT_RESET = 3126, /*超时报警恢复*/ + CID_TYPE_EMERGENCE_CALL_HELP = 1129, /*紧急求助报警*/ + CID_TYPE_EMERGENCE_CALL_HELP_RESET = 3129, /*紧急求助报警恢复*/ + CID_TYPE_BURGLARY_ALARM = 1130, /*盗窃报警*/ + CID_TYPE_BURGLARY_ALARM_RESET = 3130, /*盗窃报警恢复*/ + CID_TYPE_PERIMETER_ALARM = 1131, /*周界报警*/ + CID_TYPE_PERIMETER_ALARM_RESET = 3131, /*周界报警恢复*/ + CID_TYPE_INNET_ALARM = 1132, /*内部延时报警*/ + CID_TYPE_INNET_ALARM_RESET = 3132, /*内部延时报警恢复*/ + CID_TYPE_ENTER_EXIT = 1134, /*延时报警*/ + CID_TYPE_ENTER_EXIT_RESET = 3134, /*延时报警恢复*/ + CID_TYPE_DEVICE_OPEN = 1137, /*设备防拆报警*/ + CID_TYPE_DEVICE_OPEN_RESET = 3137, /*设备防拆报警恢复*/ + CID_TYPE_ZONE_BUS_BREAK = 1141, /*总线开路报警*/ + CID_TYPE_ZONE_BUS_BREAK_RESET = 3141, /*总线开路报警恢复*/ + CID_TYPE_ZONE_BUS_SHORT = 1142, /*总线短路报警*/ + CID_TYPE_ZONE_BUS_SHORT_RESET = 3142, /*总线短路报警恢复*/ + CID_TYPE_MOTION_ALARM = 1148, /*设备移动报警*/ + CID_TYPE_MOTION_ALARM_RESET = 3148, /*设备移动报警恢复*/ + CID_TYPE_GAS_LEAKAGE_ALARM = 1151, /*燃气泄漏报警*/ + CID_TYPE_GAS_LEAKAGE_ALARM_RESET = 3151, /*燃气泄漏报警恢复*/ + CID_TYPE_ZONE_EARLY_WARNING = 1207, /*防区预警*/ + CID_TYPE_ZONE_EARLY_WARNING_RESET = 3207, /*防区预警恢复*/ + CID_TYPE_AC_LOSS = 1301, /*交流电掉电*/ + CID_TYPE_AC_LOSS_RESET = 3301, /*交流电恢复*/ + CID_TYPE_LOW_BATT_VOL = 1302, /*蓄电池电压低*/ + CID_TYPE_LOW_BATT_VOL_NORMAL = 3302, /*蓄电池电压正常*/ + CID_TYPE_DEV_RESET = 1305, /*主机复位*/ + CID_TYPE_MBUS_MODEL_FAULT = 1333, /*扩展模块故障*/ + CID_TYPE_MBUS_MODEL_RESET = 3333, /*扩展模块恢复*/ + CID_TYPE_PRINTER_OFF = 1336, /*打印机掉线*/ + CID_TYPE_PRINTER_ON = 3336, /*打印机恢复*/ + CID_TYPE_EXTEND_MODULE_VOL_LOW = 1338, /*扩展模块电压低*/ + CID_TYPE_EXTEND_MODULE_VOL_NORMAL = 3338, /*扩展模块电压正常*/ + CID_TYPE_EXTEND_MODULE_REMOVE = 1341, /*扩展模块防拆触发*/ + CID_TYPE_EXTEND_MODULE_RECOVER = 3341, /*扩展模块防拆恢复*/ + CID_TYPE_EXTEND_MODULE_AC_LOSS = 1342, /*扩展模块交流电掉电*/ + CID_TYPE_EXTEND_MODULE_AC_LOSS_RESET = 3342, /*扩展模块交流电恢复*/ + CID_TYPE_WIRELESS_REPEATER_TAMPER = 1343, /*无线中继器防拆触发*/ + CID_TYPE_WIRELESS_REPEATER_RESTORE = 3343, /*无线中继器防拆恢复*/ + CID_TYPE_WIRELESS_SIREN_TAMPER = 1344, /*无线警号防拆触发*/ + CID_TYPE_WIRELESS_SIREN_RESTORE = 3344, /*无线警号防拆恢复*/ + CID_TYPE_WIRELESS_SIREN_DISCONNECT = 1345, /*无线警号掉线*/ + CID_TYPE_WIRELESS_SIREN_CONNECT = 3345, /*无线警号掉线恢复*/ + CID_TYPE_LINE_LOSS = 1354, /*电话线断开*/ + CID_TYPE_LINE_LOSS_RESET = 3354, /*电话线连接*/ + CID_TYPE_BUS_LOSS = 1382, /*扩展总线模块掉线*/ + CID_TYPE_BUS_LOSS_RESET = 3382, /*扩展总线模块掉线恢复*/ + CID_TYPE_SENSOR_TAMPER = 1383, /*防区感应器防拆*/ + CID_TYPE_SENSOR_TAMPER_RESET = 3383, /*防区感应器防拆恢复*/ + CID_TYPE_ZONE_OPEN_CIRCUIT_ALARM = 1386, /*防区开路提醒*/ + CID_TYPE_ZONE_SHORT_CIRCUIT_ALARM = 1387, /*防区短路提醒*/ + CID_TYPE_DISARM = 1401, /*撤防*/ + CID_TYPE_ARM = 3401, /*外出布防*/ + CID_TYPE_DISARM_AUTO = 1403, /*自动撤防*/ + CID_TYPE_ARM_AUTO = 3403, /*自动布防*/ + CID_TYPE_CANCEL_ARM = 1406, /*消警*/ + CID_TYPE_ARM_IMME = 3408, /*即时布防*/ + CID_TYPE_KEY_ZONE_ARM = 1409, /*钥匙防区撤防*/ + CID_TYPE_KEY_ZONE_DISARM = 3409, /*钥匙防区布防*/ + CID_TYPE_GUARD_STAY = 3441, /*留守布防*/ + CID_TYPE_FORCED_ARM = 3442, /*强制布防*/ + CID_TYPE_AUTOCTRL_TRIG_ON = 1443, /*定时开触发器*/ + CID_TYPE_AUTOCTRL_TRIG_OFF = 3443, /*定时关触发器*/ + CID_TYPE_LATE_TO_DISARM = 1452, /*迟到撤防*/ + CID_TYPE_AUTOGUARD_FAIL = 1455, /*自动布撤防失败*/ + CID_TYPE_AOPEN_TRIG_FAIL = 1460, /*定时开启触发器失败*/ + CID_TYPE_ACLOSE_TRIG_FAIL = 1461, /*定时关闭触发器失败*/ + CID_TYPE_AUTOUNGUARD_FAIL = 1462, /*自动撤防失败*/ + CID_TYPE_BYPASS = 1570, /*旁路*/ + CID_TYPE_BYPASS_RESET = 3570, /*旁路恢复*/ + CID_TYPE_GROUP_BYPASS = 1574, /*子系统组旁路*/ + CID_TYPE_GROUP_BYPASS_RESET = 3574, /*子系统组旁路恢复*/ + CID_TYPE_MANUAL_TEST_RPT = 1601, /*手动测试报告*/ + CID_TYPE_AUTO_TEST_RPT = 1602, /*定时测试报告*/ + CID_TYPE_LINE_TEST = 1617, /*电话链路测试*/ + CID_TYPE_ENTER_PROG = 1627, /*进入编程*/ + CID_TYPE_EXIT_PROG = 1628, /*退出编程*/ + CID_TYPE_FIELD_DETECTION = 1759, /*区域入侵*/ + CID_TYPE_FIELD_DETECTION_RESET = 3759, /*区域入侵恢复*/ + CID_TYPE_LINE_DETECTION = 1773, /*跨界报警*/ + CID_TYPE_LINE_DETECTION_RESET = 3773, /*跨界报警恢复*/ + CID_TYPE_PIR_ALARM = 1774, /*PIR报警*/ + CID_TYPE_PIR_ALARM_RESET = 3774, /*PIR报警恢复*/ + CID_TYPE_SOUND_INTENSITY_RISE = 1775, /*声强陡升报警*/ + CID_TYPE_SOUND_INTENSITY_RISE_RESET = 3775, /*声强陡升报警恢复*/ + CID_TYPE_SOUND_INTENSITY_DROP = 1776, /*声强陡降报警*/ + CID_TYPE_SOUND_INTENSITY_DROP_RESET = 3776, /*声强陡降报警恢复*/ + CID_TYPE_AUDIO_INPUT_EXCEPTION = 1777, /*音频输入异常报警*/ + CID_TYPE_AUDIO_INPUT_EXCEPTION_RESET = 3777, /*音频输入异常报警恢复*/ + CID_TYPE_SOFT_INSTAND = 1810, /*软防区紧急报警*/ + CID_TYPE_SOFT_FIRE = 1811, /*软防区火警*/ + CID_TYPE_SOFT_MOBS = 1812, /*软防区匪警*/ + CID_TYPE_KEYPAD_LOCK = 1862, /*键盘锁定*/ + CID_TYPE_KEYPAD_UNLOCK = 3862, /*键盘解锁*/ + CID_TYPE_ABSENCE_ALARM = 1863, /*值守离岗*/ + CID_TYPE_KEY_FAIL = 1910, /*键盘掉线*/ + CID_TYPE_KEY_RESET = 3910, /*键盘恢复*/ + CID_TYPE_TRIGGER_FAIL = 1911, /*键盘总线上触发器掉线*/ + CID_TYPE_TRIGGER_RESET = 3911, /*键盘总线上触发器恢复*/ + CID_TYPE_GPK_FAIL = 1912, /*键盘总线上GP/K掉线*/ + CID_TYPE_GPK_RESET = 3912, /*键盘总线上GP/K恢复*/ + CID_TYPE_MODULE_FAIL = 1913, /*键盘总线上MN/K掉线*/ + CID_TYPE_MODULE_RESET = 3913, /*键盘总线上MN/K恢复*/ + CID_TYPE_WIRELESS_DETECTOR_FAIL = 1914, /*无线探测器掉线*/ + CID_TYPE_WIRELESS_DETECTOR_RESET = 3914, /*无线探测器掉线恢复*/ + CID_TYPE_WIRELESS_DETECTOR_BATTERY_LOW = 1915, /*无线探测器电压低*/ + CID_TYPE_WIRELESS_DETECTOR_BATTERY_NORMAL = 3915, /*无线探测器电压正常*/ + CID_TYPE_EXTEND_MODULE_LOSS = 1916, /*扩展模块掉线*/ + CID_TYPE_EXTEND_MODULE_LOSS_RESET = 3916, /*扩展模块掉线恢复*/ + CID_TYPE_WIRELESS_REPEATER_DISCONNECT = 1917, /*无线中继器掉线*/ + CID_TYPE_WIRELESS_REPEATER_CONNECT = 3917, /*无线中继器掉线恢复*/ + CID_TYPE_RADAR_TRANS_FAULT = 1918, /*雷达信号异常*/ + CID_TYPE_RADAR_TRANS_RESET = 3918, /*雷达信号异常恢复*/ + CID_TYPE_WRIELESS_SIREN_LOW_BATTERY = 1919, /*无线警号电量低*/ + CID_TYPE_NORMAL_WRIELESS_SIREN_BATTERY = 3919, /*无线警号电量正常*/ + CID_TYPE_WRIELESS_NET_FAULT = 1920, /*无线网络故障*/ + CID_TYPE_WRIELESS_NET_RESET = 3920, /*无线网络故障恢复*/ + CID_TYPE_SIM_FAULT = 1921, /*SIM卡异常*/ + CID_TYPE_SIM_RESET = 3921, /*SIM卡异常恢复*/ + CID_TYPE_WIFI_ABNORMAL = 1922, /*WIFI通信异常*/ + CID_TYPE_WIFI_NORMAL = 3922, /*WIFI通信恢复正常*/ + CID_TYPE_RF_ABNORMAL = 1923, /*RF信号异常*/ + CID_TYPE_RF_NORMAL = 3923, /*RF信号正常*/ + CID_TYPE_DATE_TRAFFIC_OVERFLOW = 1924, /*流量超额*/ + CID_TYPE_IPADDR_CONFLICT = 1930, /*IP冲突*/ + CID_TYPE_IPADDR_NORMAL = 3930, /*IP正常*/ + CID_TYPE_ETHERNET_BROKEN = 1931, /*有线网络故障*/ + CID_TYPE_ETHERNET_NORMAL = 3931, /*有线网络故障恢复*/ + CID_TYPE_MOTION_DECTECT_START = 1940, /*移动侦测报警开始*/ + CID_TYPE_MOTION_DECTECT_STOP = 3940, /*移动侦测报警结束*/ + CID_TYPE_MASK_ALARM_START = 1941, /*遮挡报警开始*/ + CID_TYPE_MASK_ALARM_STOP = 3941, /*遮挡报警结束*/ + CID_TYPE_VI_LOST_START = 1942, /*视频信号丢失*/ + CID_TYPE_VI_LOST_STOP = 3942, /*视频信号恢复*/ + CID_TYPE_VS_MISMATCH = 1943, /*输入/输出视频制式不匹配*/ + CID_TYPE_VS_MATCH = 3943, /*输入/输出视频制式恢复正常*/ + CID_TYPE_VI_EXCEPTION = 1944, /*视频输入异常*/ + CID_TYPE_VI_NORMAL = 3944, /*视频输入恢复正常*/ + CID_TYPE_HD_FULL = 1945, /*硬盘满*/ + CID_TYPE_HD_FREE = 3945, /*硬盘空闲*/ + CID_TYPE_HD_ERROR = 1946, /*硬盘异常*/ + CID_TYPE_HD_RESET = 3946, /*硬盘恢复正常*/ + CID_TYPE_PIC_SEND_FAILED = 1947, /*图片上传失败*/ + CID_TYPE_SENDING_EMAIL_FAILED = 1948, /*邮件发送失败*/ + CID_TYPE_NETWORK_CAMERA_DISCONNECT = 1949, /*IPC断开连接*/ + CID_TYPE_NETWORK_CAMERA_CONNECT = 3949, /*IPC恢复连接*/ + CID_TYPE_DUTY_CHECKING = 1960, /*值守查岗*/ + CID_TYPE_POST_RESPONSE = 1961, /*值守应答*/ + CID_TYPE_ZONE_BUS_SEARCH = 1970, /*总线搜索*/ + CID_TYPE_ZONE_BUS_REGIST = 1971, /*总线注册*/ + CID_TYPE_GUARD_SINGLE_ARM = 1973, /*单防区撤防*/ + CID_TYPE_GUARD_SINGLE_DISARM = 3973, /*单防区布防*/ + CID_TYPE_SINGLE_ZONE_ALARM_CLEARED = 1974, /*单防区消警*/ + CID_TYPE_ZONE_ASSOCIATED_DETECTOR_DEL = 1975, /*删除探测器*/ + CID_TYPE_ZONE_ASSOCIATED_DETECTOR_ADD = 3975, /*添加探测器*/ + CID_TYPE_ZONE_CONSULT = 1976, /*业务咨询*/ + CID_TYPE_ZONE_CONSULT_STOP = 3976, /*业务咨询结束*/ + CID_TYPE_EXTEND_MODULE_DEL = 1977, /*删除扩展模块*/ + CID_TYPE_EXTEND_MODULE_ADD = 3977, /*添加扩展模块*/ + CID_TYPE_WIRELESS_REPEATER_DEL = 1978, /*删除无线中继器*/ + CID_TYPE_WIRELESS_REPEATER_ADD = 3978, /*添加无线中继器*/ + CID_TYPE_WIRELESS_SIREN_DEL = 1979, /*删除无线警号*/ + CID_TYPE_WIRELESS_SIREN_ADD = 3979 /*添加无线警号*/ }NET_DVR_ALARMHOST_CID_ALL_MINOR_TYPE; typedef struct tagNET_DVR_CID_ALARM { DWORD dwSize; - BYTE sCIDCode[CID_CODE_LEN/*4*/]; //CID¼ - BYTE sCIDDescribe[NAME_LEN/*32*/]; //CID¼ - NET_DVR_TIME_EX struTriggerTime; //ʱ - NET_DVR_TIME_EX struUploadTime; //ϴʱ - BYTE sCenterAccount[ACCOUNTNUM_LEN/*6*/]; //ʺ - BYTE byReportType; //NET_DVR_ALARMHOST_REPORT_TYPE - BYTE byUserType; //ûͣ0-û 1-û,2-ֻû,3-ϵͳû - BYTE sUserName[NAME_LEN/*32*/]; //ûû - WORD wKeyUserNo; //û 0xFFFFʾЧ - BYTE byKeypadNo; //̺ 0xFFʾЧ - BYTE bySubSysNo; //ϵͳ 0xFFʾЧ - WORD wDefenceNo; // 0xFFFFʾЧ - BYTE byVideoChanNo; //Ƶͨ 0ʾЧʾ豸ԴĬƵͨ - BYTE byDiskNo; //Ӳ̺ 0xFFʾЧ - WORD wModuleAddr; //ģַ 0xFFFFʾЧ - BYTE byCenterType; //0-Ч, 1-˺(6),2-չ˺(9) - BYTE byRelativeChannel; //ӵƵͨţ0ʾЧֽڱʾͨ - BYTE sCenterAccountV40[ACCOUNTNUM_LEN_32/*32*/]; //˺V40,ʹôֶʱsCenterAccountЧ - BYTE byDevSerialNo[DEV_SERIAL_LEN]; /*Ʒк*/ - BYTE byRepeaterNo; //мţΪ0Ч - WORD wRemoteCtrllerUserNo; //ңûţΪ0Ч - DWORD dwIOTChannelNo; //IOTͨ - BYTE standardCIDcode; //׼CID + BYTE sCIDCode[CID_CODE_LEN/*4*/]; //CID事件号 + BYTE sCIDDescribe[NAME_LEN/*32*/]; //CID事件名 + NET_DVR_TIME_EX struTriggerTime; //触发报警的时间点 + NET_DVR_TIME_EX struUploadTime; //上传报警的时间点 + BYTE sCenterAccount[ACCOUNTNUM_LEN/*6*/]; //中心帐号 + BYTE byReportType; //见定义NET_DVR_ALARMHOST_REPORT_TYPE + BYTE byUserType; //用户类型,0-网络用户 1-键盘用户,2-手机用户,3-系统用户 + BYTE sUserName[NAME_LEN/*32*/]; //网络用户用户名 + WORD wKeyUserNo; //键盘用户号 0xFFFF表示无效 + BYTE byKeypadNo; //键盘号 0xFF表示无效 + BYTE bySubSysNo; //子系统号 0xFF表示无效 + WORD wDefenceNo; //防区号 0xFFFF表示无效 + BYTE byVideoChanNo; //视频通道号 0表示无效,表示设备自带的默认视频通道号 + BYTE byDiskNo; //硬盘号 0xFF表示无效 + WORD wModuleAddr; //模块地址 0xFFFF表示无效 + BYTE byCenterType; //0-无效, 1-中心账号(长度6),2-扩展的中心账号(长度9) + BYTE byRelativeChannel; //外接的视频通道号,0表示无效,字节表示通道号 + BYTE sCenterAccountV40[ACCOUNTNUM_LEN_32/*32*/]; //中心账号V40,使用此字段时sCenterAccount无效 + BYTE byDevSerialNo[DEV_SERIAL_LEN]; /*产品序列号*/ + BYTE byRepeaterNo; //中继器号,为0无效 + WORD wRemoteCtrllerUserNo; //遥控器用户号,为0无效 + DWORD dwIOTChannelNo; //IOT通道号 + BYTE standardCIDcode; //标准CID码 BYTE byRes2[11]; }NET_DVR_CID_ALARM, *LPNET_DVR_CID_ALARM; typedef struct tagNET_DVR_ALARMHOST_MODULE_CFG { DWORD dwSize; - BYTE byModuleType; //1-2- 3- - BYTE byZoneType; //ͣ1-ط2-3-˫4-85-8·ģ6-0xffʾòЧ - BYTE byTriggerType; //ͣ1-ش 2-4·3-8·4-0xffʾòЧ + BYTE byModuleType; //1-防区,2-触发器 3-防区触发器 + BYTE byZoneType; //防区类型,1-本地防区,2-单防区,3-双防区,4-8防区,5-8路模拟量防区,6-单防区触发器,0xff表示该参数无效 + BYTE byTriggerType; //触发器类型,1-本地触发器, 2-4路触发器,3-8路触发器,4-单防区触发器,0xff表示该参数无效 BYTE byRes1[1]; - char sModelInfo[MODULE_INFO_LEN]; //ģϢ - char sDeviceVersionInfo[VERSION_INFO_LEN]; /* 汾Ϣ*/ + char sModelInfo[MODULE_INFO_LEN]; //模块信息 + char sDeviceVersionInfo[VERSION_INFO_LEN]; /* 版本信息*/ BYTE byRes[188]; } NET_DVR_ALARMHOST_MODULE_CFG, *LPNET_DVR_ALARMHOST_MODULE_CFG; -#define MAX_DECODE_CARD_SUPPORTDISPNUMS 8//ÿ뿨ֵ֧ʾͨ +#define MAX_DECODE_CARD_SUPPORTDISPNUMS 8//每个解码卡最多支持的显示通道数 #define MAX_SUPPORT_RES 32 -typedef struct tagNET_DVR_DECCARD_ABILITY_V41 /*뿨*/ +typedef struct tagNET_DVR_DECCARD_ABILITY_V41 /*高清解码卡能力集*/ { - BYTE byCardType; //뿨(0:MD,1:MD+,2:HD) - BYTE byDecNums; //ͨ - BYTE byDispNums; //ʾͨ - BYTE byDecStartIdx; //׸ͨнͨе - BYTE byDispStartIdx; //׸ʾͨʾͨе + BYTE byCardType; //解码卡类型(0:MD,1:MD+,2:HD) + BYTE byDecNums; //解码通道数 + BYTE byDispNums; //显示通道数 + BYTE byDecStartIdx; //首个解码通道在所有解码通道中的索引 + BYTE byDispStartIdx; //首个显示通道在所有显示通道中的索引 BYTE byRes1[3]; - DWORD dwVgaSupportResolution[MAX_SUPPORT_RES/*32*/];//ֵ֧ķֱ - DWORD dwHdmiSupportResolution[MAX_SUPPORT_RES/*32*/];//ֵ֧ķֱ - DWORD dwDviSupportResolution[MAX_SUPPORT_RES/*32*/];//ֵ֧ķֱ - DWORD dwYpbprSupportResolution[MAX_SUPPORT_RES/*32*/];//ֵ֧ķֱ - BYTE byDispFormat[MAX_DECODE_CARD_SUPPORTDISPNUMS]; //ֵ֧ģʽ(HD_DISPLAY_FORMATеö) - BYTE byWindowMode[MAX_DECODE_CARD_SUPPORTDISPNUMS][12]; //ֵ֧Ĵģʽ(1,2,4,9,16)) + DWORD dwVgaSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwHdmiSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwDviSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwYpbprSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + BYTE byDispFormat[MAX_DECODE_CARD_SUPPORTDISPNUMS]; //支持的输出模式(按HD_DISPLAY_FORMAT中的枚举) + BYTE byWindowMode[MAX_DECODE_CARD_SUPPORTDISPNUMS][12]; //支持的窗口模式(比如1,2,4,9,16)) BYTE byRes2[36]; } NET_DVR_DECCARD_ABILITY_V41,*LPNET_DVR_DECCARD_ABILITY_V41; -#define MAX_DECODE_CARD_NUM 6 //뿨 +#define MAX_DECODE_CARD_NUM 6 //最多高清解码卡数 typedef struct tagNET_DVR_DECODESVR_ABILITY_V41 { - DWORD dwSize; /* ṹС */ - BYTE byCardNums; /* 뿨 */ - BYTE byStartChan; /* ʼͨ */ + DWORD dwSize; /* 结构体大小 */ + BYTE byCardNums; /* 解码卡数 */ + BYTE byStartChan; /* 起始通道号 */ BYTE byRes1[2]; NET_DVR_DECCARD_ABILITY_V41 struDecCardAbility[MAX_DECODE_CARD_NUM]; BYTE byRes2[64]; }NET_DVR_DECODESVR_ABILITY_V41, *LPNET_DVR_DECODESVR_ABILITY_V41; -// ¼״̬ +// 流录像状态 typedef struct tagNET_DVR_STREAM_RECORD_STATUS { DWORD dwSize; - BYTE byRecord; //(ֻ)¼, 0¼1¼ 2- - //3- 4-Ƶ 5-δ 6-浵 - //7-ش 8-û 9-δ֤ - //10-浵к¼ 11-¼شк¼12-token֤ʧ - //13-ǰ¼ƻ 14-ͨ쳣ͨ״̬ 15-Ӳ - //16-Ӳ̴ 17-Ӳ - BYTE byOffLineRecord; //¼ 0-ر 1- - BYTE byRes1[2]; //ֽ - DWORD dwRelatedHD; // - BYTE byRes2[8]; //ֽ + BYTE byRecord; //(只读)录像类型, 0:不在录像,1:在录像 2-空闲 + //3-无连接 4-无输入视频 5-未加载 6-存档中 + //7-回传中 8-用户名或密码错 9-未验证 + //10-存档中和录像中 11-录像回传中和录像中12-token认证失败 + //13-当前条件不满足录像计划条件 14-通道接入异常(见通道状态) 15-硬盘满 + //16-硬盘错 17-无硬盘 + BYTE byOffLineRecord; //断网录像功能 0-关闭 1-开启 + BYTE byRes1[2]; //保留字节 + DWORD dwRelatedHD; //关联磁盘 + BYTE byRes2[8]; //保留字节 }NET_DVR_STREAM_RECORD_STATUS, *LPNET_DVR_STREAM_RECORD_STATUS; #define CHAN_NO_LEN 24 typedef struct tagNET_DVR_DIRECT_CONNECT_CHAN_INFO { - BYTE byEnable; //Ƿ - BYTE byProType; //Эͣ0-˽Э(default), (Ҫ豸ȡ) - BYTE byZeroChan; //Ƿͨ,0-ǣ1- - BYTE byPriority; //ȼ - BYTE sUserName[NAME_LEN]; //û - BYTE sPassword[PASSWD_LEN]; // - BYTE byDomain[MAX_DOMAIN_NAME]; //豸 - NET_DVR_IPADDR struIP; //IPַ - WORD wDVRPort; //˿ں - BYTE byStreamType; //:0; 1 - BYTE byOnline; //ֻ0- 1- - DWORD dwChannel; //ͨ - BYTE byTransProtocol; //Эͣ0-TCP1-UDP2-ಥ - BYTE byLocalBackUp; //ر: 0-CVRرݣ1-CVRر--طʱһ¼һڴ浵رݣ - WORD wDirectLastTime; //ʱ - BYTE byChanNo[CHAN_NO_LEN]; //ͨ--VAGȡ + BYTE byEnable; //是否启用 + BYTE byProType; //协议类型,0-私有协议(default), (需要从设备获取能力) + BYTE byZeroChan; //是否是零通道,0-不是,1-是 + BYTE byPriority; //优先级 + BYTE sUserName[NAME_LEN]; //用户名 + BYTE sPassword[PASSWD_LEN]; //密码 + BYTE byDomain[MAX_DOMAIN_NAME]; //设备域名 + NET_DVR_IPADDR struIP; //IP地址 + WORD wDVRPort; //端口号 + BYTE byStreamType; //主码流:0; 子码流:1 + BYTE byOnline; //只读,0-不在线 1-在线 + DWORD dwChannel; //通道号 + BYTE byTransProtocol; //协议类型,0-TCP,1-UDP,2-多播 + BYTE byLocalBackUp; //本地备份: 0-不启用CVR本地备份,1-启用CVR本地备份--即回放时的流一份在录像卷,一份在存档卷(本地备份) + WORD wDirectLastTime; //导播持续时间 + BYTE byChanNo[CHAN_NO_LEN]; //通道编号--用于VAG取流 }NET_DVR_DIRECT_CONNECT_CHAN_INFO, *LPNET_DVR_DIRECT_CONNECT_CHAN_INFO; typedef struct tagNET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 { - BYTE byEnable; //Ƿ - BYTE byProType; //Эͣ0-˽Э(default), 1-Э飬2-, 3- (Ҫ豸ȡ) - BYTE byZeroChan; //Ƿͨ,0-ǣ1- - BYTE byRes1; //ֶΣ0 - BYTE sUserName[NAME_LEN]; //û - BYTE sPassword[PASSWD_LEN]; // - BYTE byAddress[MAX_DOMAIN_NAME]; //ǰIP,Ҫ豸 ʽΪĸ'.'Ϊ,ΪIPַ - WORD wDVRPort; //˿ں - BYTE byStreamType; //:0; 1 - BYTE byOnline; //ֻ0- 1- - DWORD dwChannel; //ͨ - BYTE byTransProtocol; //Эͣ0-TCP1-UDP 2-ಥ - BYTE byLocalBackUp; //رݣ0-CVRرݣ1-CVRر--¼ʱһ¼һڴ浵رݣ - BYTE byRes2[2]; //ֶΣ0 - BYTE byVAGChanNo[MAX_VAG_CHANNO_LEN]; //ЭΪVAGʱӦVAGͨ + BYTE byEnable; //是否启用 + BYTE byProType; //协议类型,0-私有协议(default), 1-松下协议,2-索尼, 3-大华 (需要从设备获取能力) + BYTE byZeroChan; //是否是零通道,0-不是,1-是 + BYTE byRes1; //保留字段,置0 + BYTE sUserName[NAME_LEN]; //用户名 + BYTE sPassword[PASSWD_LEN]; //密码 + BYTE byAddress[MAX_DOMAIN_NAME]; //前端IP或者域名,需要设备 解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + WORD wDVRPort; //端口号 + BYTE byStreamType; //主码流:0; 子码流:1 + BYTE byOnline; //只读,0-不在线 1-在线 + DWORD dwChannel; //通道号 + BYTE byTransProtocol; //传输协议类型,0-TCP,1-UDP 2-多播 + BYTE byLocalBackUp; //本地备份,0-不启用CVR本地备份,1-启用CVR本地备份--即录像时的流一份在录像卷,一份在存档卷(本地备份) + BYTE byRes2[2]; //保留字段,置0 + BYTE byVAGChanNo[MAX_VAG_CHANNO_LEN]; //协议类型为VAG时,对应的VAG通道编号 BYTE byRes[340]; }NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40, *LPNET_DVR_DIRECT_CONNECT_CHAN_INFO_V40; @@ -29734,88 +29734,88 @@ typedef struct tagNET_DVR_PU_STREAM_URL_CFG { BYTE byEnable; BYTE byRes[3]; - BYTE byStreamMediaIP[64];//ýIP - WORD wStreamMediaPort; //ý˿ - BYTE byTransmitType; //ý崫Э 0- TCP 1- UDP + BYTE byStreamMediaIP[64];//流媒体IP + WORD wStreamMediaPort; //流媒体端口 + BYTE byTransmitType; //流媒体传输协议 0- TCP 1- UDP BYTE byRes1[33]; - BYTE byDevIP[64]; //豸IP - WORD wDevPort; //豸˿ - BYTE byChannel; //ͨ - BYTE byTransMode; //ģʽ 0- 1- + BYTE byDevIP[64]; //设备IP + WORD wDevPort; //设备端口 + BYTE byChannel; //通道号 + BYTE byTransMode; //传输模式 0-主码流 1- 子码流 BYTE byProType; - // 0-˽ 1- 2- 3-ɳ 4-ɫǼ NET_DVR_GetIPCProtoListӿڻȡ - //VQDýֻ֧ 01ʽֱ֧ 01234 - BYTE byTransProtocol; //Э0-TCP, 1-UDP, 2-ಥʽ, 3-RTP + //厂家类型 0-私有 1-大华 2-汉邦 3-郎驰 4-蓝色星际 NET_DVR_GetIPCProtoList接口获取 + //VQD流媒体下只支持 0,1方式;直连支持 0,1,2,3,4 + BYTE byTransProtocol; //传输协议类型0-TCP, 1-UDP, 2-多播方式, 3-RTP BYTE byRes3[2]; - BYTE sUserName[NAME_LEN]; //豸½û - BYTE sPassWord[PASSWD_LEN]; // 豸½ - BYTE byRes2[28]; //Ԥ + BYTE sUserName[NAME_LEN]; //设备登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // 设备登陆密码 + BYTE byRes2[28]; //预留 }NET_DVR_PU_STREAM_URL_CFG, *LPNET_DVR_PU_STREAM_URL_CFG; typedef struct tagNET_DVR_PU_STREAM_URL_CFG_V40 { BYTE byEnable; BYTE byRes[3]; - BYTE byStreamMediaIP[64];//ýIP - WORD wStreamMediaPort; //ý˿ - BYTE byTransmitType; //ý崫Э 0- TCP 1- UDP + BYTE byStreamMediaIP[64];//流媒体IP + WORD wStreamMediaPort; //流媒体端口 + BYTE byTransmitType; //流媒体传输协议 0- TCP 1- UDP BYTE byRes1; - BYTE byDevIP[64]; //豸IP - WORD wDevPort; //豸˿ - BYTE byChannel; //ͨ - BYTE byTransMode; //ģʽ 0- 1- + BYTE byDevIP[64]; //设备IP + WORD wDevPort; //设备端口 + BYTE byChannel; //通道号 + BYTE byTransMode; //传输模式 0-主码流 1- 子码流 BYTE byProType; - // 0- 1- 2- 3-ɳ 4-ɫǼ NET_DVR_GetIPCProtoListӿڻȡ - //VQDýֻ֧ 01ʽֱ֧ 01234 - BYTE byTransProtocol; //Э0-TCP, 1-UDP 2-ಥʽ + //厂家类型 0-海康 1-大华 2-汉邦 3-郎驰 4-蓝色星际 NET_DVR_GetIPCProtoList接口获取 + //VQD流媒体下只支持 0,1方式;直连支持 0,1,2,3,4 + BYTE byTransProtocol; //传输协议类型0-TCP, 1-UDP 2-多播方式 BYTE byRes3[2]; - BYTE sUserName[NAME_LEN]; //豸½û - BYTE sPassWord[PASSWD_LEN]; // 豸½ - BYTE byRes2[308]; //Ԥ + BYTE sUserName[NAME_LEN]; //设备登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // 设备登陆密码 + BYTE byRes2[308]; //预留 }NET_DVR_PU_STREAM_URL_CFG_V40, *LPNET_DVR_PU_STREAM_URL_CFG_V40; typedef struct tagNET_DVR_STREAM_URL_V40 { BYTE byEnable; - BYTE byStreamType; // - BYTE byLocalBackUp; //Ƿ񱾵ر + BYTE byStreamType; //主子码流 + BYTE byLocalBackUp; //是否本地备份 BYTE byRes; - BYTE strURL[URL_LEN_V40]; //ýURLԼ - DWORD dwProtocalType; //IPCЭֵͨȡIPCЭбõ - BYTE sUserName[NAME_LEN]; //豸½û - BYTE sPassWord[PASSWD_LEN]; // 豸½ - BYTE byAddress[MAX_DOMAIN_NAME]; //ԴIP,Ҫ ʽΪĸ'.'Ϊ,ΪIPַ - WORD wIPPort; //ԴӦĶ˿ں - WORD wChanNo; //Դ豸IPͨ - BYTE byVAGChanNo[MAX_VAG_CHANNO_LEN]; //Դͨ,VAG + BYTE strURL[URL_LEN_V40]; //流媒体URL,可以级联 + DWORD dwProtocalType; //IPC协议类型值,可以通过获取IPC协议列表得到 + BYTE sUserName[NAME_LEN]; //设备登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // 设备登陆密码 + BYTE byAddress[MAX_DOMAIN_NAME]; //流来源IP或者域名,需要解析 解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + WORD wIPPort; //流来源对应的端口号 + WORD wChanNo; //流来源设备IP通道号 + BYTE byVAGChanNo[MAX_VAG_CHANNO_LEN]; //流来源通道编号,用于VAG功能 BYTE byRes1[88]; }NET_DVR_STREAM_URL_V40, *LPNET_DVR_STREAM_URL_V40; typedef union tagNET_DVR_STREAM_TYPE_UNION { - NET_DVR_DIRECT_CONNECT_CHAN_INFO struChanInfo; //IPͨϢ ֵΪ0 - NET_DVR_PU_STREAM_URL struStreamUrl; //ͨý嵽urlȡֵΪ4 - NET_DVR_PU_STREAM_URL_CFG struStreamUrlCfg; //ͨý嵽ָ豸ȡֵΪ6 + NET_DVR_DIRECT_CONNECT_CHAN_INFO struChanInfo; //IP通道信息 类型值为0 + NET_DVR_PU_STREAM_URL struStreamUrl; //通过流媒体到url取流,类型值为4 + NET_DVR_PU_STREAM_URL_CFG struStreamUrlCfg; //通过流媒体到指定布防设备上取流,类型值为6 }NET_DVR_STREAM_TYPE_UNION, *LPNET_DVR_STREAM_TYPE_UNION; typedef union tagNET_DVR_STREAM_TYPE_V40_UNION { - NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 struChanInfo; //IPͨϢֵΪ0 - NET_DVR_PU_STREAM_URL struPuStreamUrl; //ͨý嵽urlȡֵΪ4 - NET_DVR_PU_STREAM_URL_CFG_V40 struStreamUrlCfg; //ͨý嵽urlȡֵΪ6 - NET_DVR_RTSP_PROTOCAL_CFG struRtspCfg; //ɱ׼RTSPȡ ֵ7 - NET_DVR_STREAM_URL_V40 struStreamUrlV40; //ͨý壨ּ֧ʽԴȡֵΪ8 + NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 struChanInfo; //IP通道信息,类型值为0 + NET_DVR_PU_STREAM_URL struPuStreamUrl; //通过流媒体到url取流,类型值为4 + NET_DVR_PU_STREAM_URL_CFG_V40 struStreamUrlCfg; //通过流媒体到组合url取流,类型值为6 + NET_DVR_RTSP_PROTOCAL_CFG struRtspCfg; //由标准RTSP接入取流 类型值7 + NET_DVR_STREAM_URL_V40 struStreamUrlV40; //通过流媒体(支持级联方式)向流来源取流,类型值为8 }NET_DVR_STREAM_TYPE_V40_UNION, *LPNET_DVR_STREAM_TYPE_V40_UNION; typedef struct tagNET_DVR_STREAM_MODE_TYPE { - BYTE byGetStreamType; //ȡʽ0-ֱӴ豸ȡ1-ýȡ2-ͨIPServeripַȡ, 3.ͨIPServerҵ豸ͨýȥ豸 4-ͨýURLȥȡ - BYTE byRes[3]; // ֽ - NET_DVR_STREAM_TYPE_UNION uGetStream; // ͬȡʽṹ + BYTE byGetStreamType; //取流方式,0-直接从设备取流,1-从流媒体取流、2-通过IPServer获得ip地址后取流, 3.通过IPServer找到设备,再通过流媒体去设备的流 4-通过流媒体由URL去取流 + BYTE byRes[3]; // 保留字节 + NET_DVR_STREAM_TYPE_UNION uGetStream; // 不同取流方式结构体 }NET_DVR_STREAM_MODE_TYPE, *LPNET_DVR_STREAM_MODE_TYPE; -// ԴϢ +// 流来源信息 typedef struct tagNET_DVR_STREAM_SRC_INFO { DWORD dwSize; @@ -29825,56 +29825,56 @@ typedef struct tagNET_DVR_STREAM_SRC_INFO typedef struct tagNET_DVR_STREAM_SRC_INFO_V40 { DWORD dwSize; - BYTE byGetStreamType; //ȡʽ0-ֱӴ豸ȡ1-ýȡ2-ͨIPServeripַȡ, 3.ͨIPServerҵ豸ͨýȥ豸 4-ͨýURLȥȡ 6-ͨý嵽ָ豸ȡ - BYTE byRes1[3]; // ֽ - NET_DVR_STREAM_TYPE_V40_UNION uGetStream; // ͬȡʽṹ - BYTE byMonitorName[128];/*ƣ֧ģСдĸ֣»ߵȷַʽݵ¼صbyCharEncodeTypeֶжϣ - ĿǰCVRӢİ汾һвͬѡCVRҪ󲼷ΪgbkӢİ汾CVRҪ󲼷Ϊiso8859-1硰A¥_1*/ - BYTE byRes[384]; // ֽ + BYTE byGetStreamType; //取流方式,0-直接从设备取流,1-从流媒体取流、2-通过IPServer获得ip地址后取流, 3.通过IPServer找到设备,再通过流媒体去设备的流 4-通过流媒体由URL去取流 6-通过流媒体到指定监控设备上取流 + BYTE byRes1[3]; // 保留字节 + NET_DVR_STREAM_TYPE_V40_UNION uGetStream; // 不同取流方式结构体 + BYTE byMonitorName[128];/*布防点名称(支持中文,大小写字母,数字,下划线等非特殊字符,编码格式根据登录返回的byCharEncodeType字段判断, + 目前CVR中英文版本不一样,有不同选择,中文CVR要求布防点名称为gbk,英文版本CVR要求布防点名称为iso8859-1,如“A号楼_布防点1”)*/ + BYTE byRes[384]; // 保留字节 }NET_DVR_STREAM_SRC_INFO_V40,*LPNET_DVR_STREAM_SRC_INFO_V40; -// ¼Ϣ +// 流录像信息 typedef struct { DWORD dwSize; NET_DVR_RECORD_V30 struRecordInfo; }NET_DVR_STREAM_RECORD_INFO, *LPNET_DVR_STREAM_RECORD_INFO; -// IDʱμ +// 按流ID对时间段加锁 typedef struct tagNET_DVR_STREAM_TIME_LOCK { - DWORD dwSize; // ṹС - NET_DVR_TIME strBeginTime; // ʼʱ - NET_DVR_TIME strEndTime; // ʱ - NET_DVR_STREAM_INFO struStreamInfo; // Ϣ - DWORD dwRecordType; // ¼: 0xffffffffȫʱ¼-ƶ⣬-ƶ⣬-ƶ⣬--ֶ¼-¼(ͬļ) - DWORD dwLockDuration; // ʱ,λ룬0xffffffffʾ - NET_DVR_TIME_EX strUnlockTimePoint; // ʱЧdwLockDurationΪʱʱ䵽ʱԶ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ,0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cTimeDifferenceH; //UTCʱСʱ-12 ... +14+ʾ, byISO8601Ϊ1ʱЧ - char cTimeDifferenceM; //UTCʱӣ-30, 30, 45+ʾ, byISO8601Ϊ1ʱЧ + DWORD dwSize; // 结构体大小 + NET_DVR_TIME strBeginTime; // 开始时间 + NET_DVR_TIME strEndTime; // 结束时间 + NET_DVR_STREAM_INFO struStreamInfo; // 流信息 + DWORD dwRecordType; // 录像类型: 0xffffffff-全部,-定时录像,-移动侦测,-报警触发,-报警触发或移动侦测,-报警触发和移动侦测,-命令触发,-手动录像,-智能录像(同文件查找) + DWORD dwLockDuration; // 锁定持续时间,单位秒,0xffffffff表示永久锁定 + NET_DVR_TIME_EX strUnlockTimePoint; // 加锁时有效,当dwLockDuration不为永久锁定时,锁定持续的时间到此时间点就自动解锁 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效,0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区, byISO8601为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 30, 45,+表示东区, byISO8601为1时有效 BYTE byRes[1]; }NET_DVR_STREAM_TIME_LOCK, *LPNET_DVR_STREAM_TIME_LOCK; -//طų֡ӿ ʼ֡ NET_DVR_START_DRAWFRAMEӦĿƽṹ +//回放抽帧接口 开始抽帧命令 NET_DVR_START_DRAWFRAME,对应的控制结构体 typedef struct tagNET_DVR_VOD_DRAWFRAME_PARA { NET_DVR_TIME_EX struTime; /* - dwDrawTypeֻ豸֧ѡԳ֡ʱЧ֡ʽУ - 0ֻI֡ - 11/2 Pֻ֡svc֧֣ - 23/4P֡ ֻsvc֧֣ - 31/2 I֡(ֻI֡ÿ2I֡һ) - 41/4 I(ֻI֡ÿ4I֡һ) - 51/8 I֡(ֻI֡ÿ8I֡һ) + dwDrawType只有设备支持选择性抽帧时,参数才有效果,抽帧方式有: + 0:只传I帧 + 1:丢1/2 P帧(只有svc码流支持) + 2:丢3/4P帧 (只有svc码流支持) + 3:传1/2 I帧(只传I帧,且每2个I帧传一个。) + 4:传1/4 I振(只传I帧,且每4个I帧传一个。) + 5:传1/8 I帧(只传I帧,且每8个I帧传一个。) */ DWORD dwDrawType; BYTE byRes[128]; }NET_DVR_VOD_DRAWFRAME_PARA, *LPNET_DVR_VOD_DRAWFRAME_PARA; -// ID+ʱطŽṹ +// 按ID+时间回放结构体 typedef struct tagNET_DVR_VOD_PARA { DWORD dwSize; @@ -29882,16 +29882,16 @@ typedef struct tagNET_DVR_VOD_PARA NET_DVR_TIME struBeginTime; NET_DVR_TIME struEndTime; HWND hWnd; - BYTE byDrawFrame; //0:֡1֡ - BYTE byVolumeType; //0-ͨ¼ 1-浵 - BYTE byVolumeNum; //ţĿǰָ浵 - BYTE byStreamType; // 0- 1-2-3-ʱӰ - DWORD dwFileIndex; //浵ϵ¼ļ浵¼ʱصֵ - BYTE byAudioFile; //Ƶļ0-1- - BYTE byCourseFile; //γļ0-1- - BYTE byDownload; //Ƿ 0-1- - BYTE byOptimalStreamType; //Ƿͻط 0-1-ǣ˫豸ijһʱڵ¼ļָͲͬ򷵻ʵ͵¼ - BYTE byUseAsyn; //0-ʹͬIO1-ʹ첽IO + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byVolumeType; //0-普通录像卷 1-存档卷 + BYTE byVolumeNum; //卷号,目前指存档卷号 + BYTE byStreamType; //码流类型 0-主码流, 1-子码流,2-码流三,3-延时摄影码流 + DWORD dwFileIndex; //存档卷上的录像文件索引,搜索存档卷录像时返回的值 + BYTE byAudioFile; //音频文件0-否,1-是 + BYTE byCourseFile; //课程文件0-否,1-是 + BYTE byDownload; //是否下载 0-否,1-是 + BYTE byOptimalStreamType; //是否按最优码流类型回放 0-否,1-是(对于双码流设备,某一段时间内的录像文件与指定码流类型不同,则返回实际码流类型的录像) + BYTE byUseAsyn; //0-使用同步IO,1-使用异步IO BYTE byRes2[19]; }NET_DVR_VOD_PARA, *LPNET_DVR_VOD_PARA; @@ -29902,29 +29902,29 @@ typedef struct tagNET_DVR_VOD_PARA_V50 NET_DVR_TIME_V50 struBeginTime; NET_DVR_TIME_V50 struEndTime; HWND hWnd; - BYTE byDrawFrame; //0:֡1֡ - BYTE byVolumeType; //0-ͨ¼ 1-浵 - BYTE byVolumeNum; //ţĿǰָ浵 - BYTE byStreamType; // 0- 1-2-3-ʱӰ - DWORD dwFileIndex; //浵ϵ¼ļ浵¼ʱصֵ - BYTE byAudioFile; //طƵļ0-طƵļ1-طƵļ - BYTE byCourseFile; //طſγļ0-1- - BYTE byPlayMode; //ŷʽ0-ţ1- - BYTE byLinkMode; //ӷʽ0-TCP1-AdaptiveUDP 2-AdaptiveUDP ת - BYTE byDownload; //Ƿ 0-1- - BYTE byOptimalStreamType; //Ƿͻط 0-1-ǣ˫豸ijһʱڵ¼ļָͲͬ򷵻ʵ͵¼ - BYTE byDisplayBufNum; //òŻ֡Ϊ0ʱĬΪ3֡hWndΪʱЧ - BYTE byNPQMode; //NPQֱģʽǹý 0-ֱ 1-ý - BYTE sUserName[NAME_LEN/*32*/]; //֤û - BYTE sPassword[PASSWD_LEN/*16*/]; //֤ - BYTE byRemoteFile; //طԶļ0-1- - BYTE byUseAsyn; //0-ʹͬIO1-ʹ첽IO + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byVolumeType; //0-普通录像卷 1-存档卷 + BYTE byVolumeNum; //卷号,目前指存档卷号 + BYTE byStreamType; //码流类型 0-主码流, 1-子码流,2-码流三,3-延时摄影码流 + DWORD dwFileIndex; //存档卷上的录像文件索引,搜索存档卷录像时返回的值 + BYTE byAudioFile; //回放音频文件,0-不回放音频文件,1-仅回放音频文件 + BYTE byCourseFile; //回放课程文件0-否,1-是 + BYTE byPlayMode; //播放方式0-正放,1-倒放 + BYTE byLinkMode; //连接方式0-TCP,1-AdaptiveUDP 2-AdaptiveUDP 转码 + BYTE byDownload; //是否下载 0-否,1-是 + BYTE byOptimalStreamType; //是否按最优码流类型回放 0-否,1-是(对于双码流设备,某一段时间内的录像文件与指定码流类型不同,则返回实际码流类型的录像) + BYTE byDisplayBufNum; //设置播放缓冲帧数,当为0时,默认为3帧,hWnd不为空时有效 + BYTE byNPQMode; //NPQ是直连模式,还是过流媒体 0-直连 1-过流媒体 + BYTE sUserName[NAME_LEN/*32*/]; //二次认证用户名 + BYTE sPassword[PASSWD_LEN/*16*/]; //二次认证密码 + BYTE byRemoteFile; //回放远程文件0-否,1-是 + BYTE byUseAsyn; //0-使用同步IO,1-使用异步IO BYTE byRes2[201]; - BYTE byHls; //HLSطţ0-1- - char* pSavedFileName; //ʱ¼ļ·byDownloadΪ1ʱЧȳ256ᱻض + BYTE byHls; //HLS回放,0-否,1-是 + char* pSavedFileName; //下载时,保存的录像文件路径,byDownload为1时有效,长度超过256将会被截断 }NET_DVR_VOD_PARA_V50, *LPNET_DVR_VOD_PARA_V50; -// ֶ¼ +// 手动录像 typedef struct tagNET_DVR_MANUAL_RECORD_PARA { NET_DVR_STREAM_INFO struStreamInfo; @@ -29933,636 +29933,636 @@ typedef struct tagNET_DVR_MANUAL_RECORD_PARA }NET_DVR_MANUAL_RECORD_PARA, *LPNET_DVR_MANUAL_RECORD_PARA; -// CABACѹѡ20%ֻģͨ +// CABAC码流压缩性能选项,开启可提高20%,只有模拟通道可以用 typedef struct tagNET_DVR_STREAM_CABAC { - DWORD dwSize; //ṹС - BYTE byCabacEnable; //ѹѡֵ0 1 - BYTE byRes1[31]; // + DWORD dwSize; //结构体大小 + BYTE byCabacEnable; //码流压缩性能选项值0 不提升 1 提升 + BYTE byRes1[31]; //保留 }NET_DVR_STREAM_CABAC, *LPNET_DVR_STREAM_CABAC; -#define MAX_IOSPEED_GROUP_NUM 4 //IO -#define MAX_IOOUT_NUM 4 //IOڸ -#define MAX_IOIN_NUM 8 //IOڸ -#define MAX_RELAY_NUM 12 //̵豸 2013-11-04 -#define MAX_VEHICLE_TYPE_NUM 8 //Ϣܿ2013-11-04 -#define MAX_IOIN_NUMEX 10 //IOڸ(չ) -#define MAX_ITC_LANE_NUM 6 //󳵵 -#define MAX_LANEAREA_NUM 2 // -#define ITC_MAX_POLYGON_POINT_NUM 20 //֧20Ķ -#define MAX_ITC_SERIALCHECK_NUM 8 //У͸ -#define MAX_LIGHT_NUM 6 //ͨ -#define MAX_VIDEO_INTERVAL_NUM 2 //ץļ -#define MAX_VIDEO_DETECT_LIGHT_NUM 12 //Ƶ -#define MAX_CALIB_RECOG_NUM 2 //궨 -#define MAX_RS485_NUM 12 //485֧ -#define MAX_MOBILE_POLYGON_NUM 3 //ƶ֧ʶ -#define MAX_MOBILE_DETECTLINE_NUM 3 //ƶ֧Υ߸ -#define MAX_IOOUT_K_NUM 8 //KϵIOڸ +#define MAX_IOSPEED_GROUP_NUM 4 //IO测速组个数 +#define MAX_IOOUT_NUM 4 //最大IO输出口个数 +#define MAX_IOIN_NUM 8 //最大IO输入口个数 +#define MAX_RELAY_NUM 12 //继电器控制设备最大数 2013-11-04 +#define MAX_VEHICLE_TYPE_NUM 8 //车辆信息管控最大数2013-11-04 +#define MAX_IOIN_NUMEX 10 //最大IO输入口个数(扩展) +#define MAX_ITC_LANE_NUM 6 //最大车道个数 +#define MAX_LANEAREA_NUM 2 //单车道最大区域个数 +#define ITC_MAX_POLYGON_POINT_NUM 20 //检测区域最多支持20个点的多边形 +#define MAX_ITC_SERIALCHECK_NUM 8 //串口校验类型个数 +#define MAX_LIGHT_NUM 6 //最大交通灯数 +#define MAX_VIDEO_INTERVAL_NUM 2 //最大抓拍间隔数 +#define MAX_VIDEO_DETECT_LIGHT_NUM 12 //视频检测的最大检测区域 +#define MAX_CALIB_RECOG_NUM 2 //标定区域个数 +#define MAX_RS485_NUM 12 //485口最大支持数 +#define MAX_MOBILE_POLYGON_NUM 3 //移动布防支持最大牌识区域个数 +#define MAX_MOBILE_DETECTLINE_NUM 3 //移动布防支持最大违规检测线个数 +#define MAX_IOOUT_K_NUM 8 //K系列最大IO输出口个数 -//IOڲ3.1汾֮ +//IO输出口参数(3.1版本(含)之后) typedef struct tagNET_ITC_IOOUT_PARAM { DWORD dwSize; - BYTE byDefaultStatus;//IOĬ״̬0-͵ƽ1-ߵƽ - BYTE byIOOutStatus;//IOЧʱ״̬0-͵ƽ1-ߵƽ2- - BYTE byMode; //ƹʽ,λʾ0-ʾ1-ʾbit0-Ƶbit1-ڣbit2-Υ - BYTE byIOWorkMode;//IOڹģʽ0-ƣ1-ƫ, 2- - DWORD dwTimeDelay;//IOЧʱ䣬λus - WORD wAheadTime;//IOǰʱ䣬λus - BYTE byFreqMulti; //ƵֵΧ[1,15] - BYTE byDutyRate; //ռձȣ[0,40%] - BYTE byDetectBrightness;/*Զʹ0-⣻1-*/ - BYTE byBrightnessThreld;/*ʹֵΧ[0,100],ֵ*/ - BYTE byFlashLightEnable; //ʱʹ:0-;1- - BYTE byStartHour; //ʼʱ-Сʱ,ȡֵΧ0-23 - BYTE byStartMinute; //ʼʱ-,ȡֵΧ0-59 - BYTE byEndHour; //ʱ-Сʱ,ȡֵΧ0-23 - BYTE byEndMinute; //ʱ-,ȡֵΧ0-59 - BYTE byAutoPlateBrightness;// Զʹ 0- 1- - BYTE byIncrBrightEnable;//Ƿģʽģʽ£ - BYTE byIncrBrightPercent;//ٷֱȣ0~100%ģʽЧ - WORD wIncrBrightTime;//ʱ,λΪ루ģʽЧ - BYTE byBrightness;//ֵ0~100ģʽ£ - BYTE byEnvironBright;//նֵ0~100ģʽЧòֻնֵֵͻøֵΪοȥӦֵ - WORD wDelayCaptureTime;//ʱץʱ1~1000msģʽЧ + BYTE byDefaultStatus;//IO默认状态:0-低电平,1-高电平 + BYTE byIOOutStatus;//IO起效时状态:0-低电平,1-高电平,2-脉冲 + BYTE byMode; //闪光灯工作方式,按位表示,0-表示工作,1-表示不工作,bit0-视频,bit1-卡口,bit2-违章 + BYTE byIOWorkMode;//IO输出口工作模式:0-闪光灯,1-偏振镜, 2-常亮灯 + DWORD dwTimeDelay;//IO有效持续时间,单位us + WORD wAheadTime;//输出IO提前时间,单位us + BYTE byFreqMulti; //倍频,数值范围[1,15] + BYTE byDutyRate; //占空比,[0,40%] + BYTE byDetectBrightness;/*自动检测亮度使能闪光灯0-不检测;1-检测*/ + BYTE byBrightnessThreld;/*使能闪光灯亮度阈值,范围[0,100],高于阈值闪*/ + BYTE byFlashLightEnable; //设置闪光灯时间使能:0-关;1-开 + BYTE byStartHour; //开始时间-小时,取值范围0-23 + BYTE byStartMinute; //开始时间-分,取值范围0-59 + BYTE byEndHour; //结束时间-小时,取值范围0-23 + BYTE byEndMinute; //结束时间-分,取值范围0-59 + BYTE byAutoPlateBrightness;// 车牌亮度自动使能闪光灯 0-不启用 1-启用 + BYTE byIncrBrightEnable;//是否启用增亮模式(常亮灯模式下) + BYTE byIncrBrightPercent;//增量百分比,0~100%(启用增亮模式下生效) + WORD wIncrBrightTime;//增亮时间,单位为毫秒(启用增亮模式下生效) + BYTE byBrightness;//亮度值;0~100(常亮灯模式下) + BYTE byEnvironBright;//环境照度值;0~100(闪光灯模式下生效,该参数只读)环境照度值代表着闪光灯所处环境的亮度值,客户可以拿该值作为参考,去配置相应的亮度阈值。 + WORD wDelayCaptureTime;//延时抓拍时间1~1000ms(启用增亮模式下生效) }NET_ITC_IOOUT_PARAM, *LPNET_ITC_IOOUT_PARAM; typedef enum _ITC_TRIGGERMODE_TYPE_ { - ITC_POST_IOSPEED_TYPE = 0x1, //IO٣ڣ - ITC_POST_SINGLEIO_TYPE = 0x2, //IOڣ - ITC_POST_RS485_TYPE = 0x4, //RS485ڣ - ITC_POST_RS485_RADAR_TYPE = 0x8, //RS485״ﴥڣ - ITC_POST_VIRTUALCOIL_TYPE = 0x10, //Ȧڣ - ITC_POST_HVT_TYPE_V50 = 0x20, //пƵV50 - ITC_POST_MPR_TYPE = 0x40, //֡ʶ()(Ver3.7) - ITC_POST_PRS_TYPE = 0x80, //Ƶⴥ - ITC_EPOLICE_IO_TRAFFICLIGHTS_TYPE = 0x100, //IO̵ƣ羯 - ITC_EPOLICE_RS485_TYPE = 0x200, //RS485羯羯 - ITC_POST_HVT_TYPE = 0x400, //пƵڣ - ITC_PE_RS485_TYPE = 0x10000, //RS485ʽ羯ʽ羯 - ITC_VIDEO_EPOLICE_TYPE = 0x20000, //Ƶ羯ʽ羯 - ITC_VIA_VIRTUALCOIL_TYPE = 0x40000, //VIA - ITC_POST_IMT_TYPE = 0x80000, //ǻ۲ - IPC_POST_HVT_TYPE = 0x100000, //IPCֵ֧HVT - ITC_POST_MOBILE_TYPE = 0x200000, //ƶͨģʽ - ITC_REDLIGHT_PEDESTRIAN_TYPE = 0x400000, //˴ƴ - ITC_NOCOMITY_PEDESTRIAN_TYPE = 0x800000 //˴ + ITC_POST_IOSPEED_TYPE = 0x1, //IO测速(卡口) + ITC_POST_SINGLEIO_TYPE = 0x2, //单IO触发(卡口) + ITC_POST_RS485_TYPE = 0x4, //RS485车检器触发(卡口) + ITC_POST_RS485_RADAR_TYPE = 0x8, //RS485雷达触发(卡口) + ITC_POST_VIRTUALCOIL_TYPE = 0x10, //虚拟线圈触发(卡口) + ITC_POST_HVT_TYPE_V50 = 0x20, //混行卡口视频触发V50 + ITC_POST_MPR_TYPE = 0x40, //多帧识别(卡口)(Ver3.7) + ITC_POST_PRS_TYPE = 0x80, //视频检测触发配置 + ITC_EPOLICE_IO_TRAFFICLIGHTS_TYPE = 0x100, //IO红绿灯(电警) + ITC_EPOLICE_RS485_TYPE = 0x200, //RS485车检器电警触发(电警) + ITC_POST_HVT_TYPE = 0x400, //混行卡口视频触发(卡口) + ITC_PE_RS485_TYPE = 0x10000, //RS485车检器卡式电警触发(卡式电警) + ITC_VIDEO_EPOLICE_TYPE = 0x20000, //视频电警触发(卡式电警) + ITC_VIA_VIRTUALCOIL_TYPE = 0x40000, //VIA触发配置 + ITC_POST_IMT_TYPE = 0x80000, //智慧布防配置 + IPC_POST_HVT_TYPE = 0x100000, //IPC支持的HVT + ITC_POST_MOBILE_TYPE = 0x200000, //移动交通触发模式 + ITC_REDLIGHT_PEDESTRIAN_TYPE = 0x400000, //行人闯红灯触发 + ITC_NOCOMITY_PEDESTRIAN_TYPE = 0x800000 //不礼让行人触发 }ITC_TRIGGERMODE_TYPE; -//ӿڵӦpOutBuf +//能力集接口的输出参数,对应pOutBuf参数 typedef struct tagNET_ITC_TRIGGERMODE_ABILITY { DWORD dwSize; - DWORD dwTriggerType; //ͣλʾITC_TRIGGERMODE_ABILITY壬Ͳͬ˴صĴҲͬ + DWORD dwTriggerType; //触发类型,按位表示,定义ITC_TRIGGERMODE_ABILITY定义,根据输入的能力类型不同,此处返回的触发类型也不同 BYTE byRes[16]; }NET_ITC_TRIGGERMODE_ABILITY, *LPNET_ITC_TRIGGERMODE_ABILITY; typedef struct tagNET_ITC_INTERVAL_PARAM { - BYTE byIntervalType; //ͣĬϰʱ䣩0-ʱЧ,1-Ч + BYTE byIntervalType; //间隔类型(默认按时间),0-时间起效,1-距离起效 BYTE byRes1[3]; - WORD wInterval[MAX_INTERVAL_NUM];//ļʱ䣨λmsļ루λףbyIntervalTypeΪ0ʱʾʱ䣬byIntervalTypeΪ1ʱʾ + WORD wInterval[MAX_INTERVAL_NUM];//连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 BYTE byRes[8]; }NET_ITC_INTERVAL_PARAM, *LPNET_ITC_INTERVAL_PARAM; -//ʶ +//牌识参数 typedef struct tagNET_ITC_PLATE_RECOG_PARAM { - BYTE byDefaultCHN[MAX_CHJC_NUM]; /*豸ʡݵĺּд*/ - BYTE byEnable; //Ƿøʶ0-1- + BYTE byDefaultCHN[MAX_CHJC_NUM]; /*设备运行省份的汉字简写*/ + BYTE byEnable; //是否启用该区域牌识,0-否,1-是 DWORD dwRecogMode; - /*ʶͣ - bit0-ʶ0-ʶ1-ʶ(βʶ) - bit1-ʶСʶ0-Сʶ1-ʶ - bit2-ɫʶ0-óɫʶڱʶСʶʱֹã1-ɫʶ - bit3-ũóʶ0-ũóʶ1-ũóʶ - bit4-ģʶ0-ģʶ1-ģʶ - bit5-֡λ򳡶λ0-֡λ1-λ - bit6-֡ʶʶ0-֡ʶ1-ʶ - bit7-ϻ죺0-죬1- - bit8-Ħгʶ0-Ħгʶ1-Ħгʶ; - bit9-ģʽ0-羯/֡1-ڣ - bit10-΢Сƣ0-ã1-΢Сʶ(6080) - bit11-ȫ⣺0-ã1-ðȫ - bit12-񺽳ʶ: 0-ã1-񺽳ʶ - bit13-ƹб: 0-ã1-бPRS - bit14-ʶ: 0-ã1-ʶPRS - bit15-⣺0-ã1- - bit16-Ʊ공⣺0-ã1-ûƱ공 - bit17-ΣƷ⣺0-ã1-ΣƷ - bit18-ʹݳʶ0-ã1-ʹݳʶ - bit19-Ʒʶ0-ã1-óƷʶ - bit20-绰ʶ0-ã1- - bit21-ʶ0-ã1- + /*识别的类型, + bit0-背向识别:0-正向车牌识别,1-背向识别(尾牌识别) ; + bit1-大车牌识别或小车牌识别:0-小车牌识别,1-大车牌识别 ; + bit2-车身颜色识别:0-不采用车身颜色识别,在背向识别或小车牌识别时禁止启用,1-车身颜色识别; + bit3-农用车识别:0-不采用农用车识别,1-农用车识别; + bit4-模糊识别:0-不采用模糊识别,1-模糊识别; + bit5-帧定位或场定位:0-帧定位,1-场定位; + bit6-帧识别或场识别:0-帧识别,1-场识别; + bit7-晚上或白天:0-白天,1-晚上 + bit8-摩托车识别:0-不采用摩托车识别,1-摩托车识别; + bit9-场景模式:0-电警/多帧,1-卡口; + bit10-微小车牌:0-不启用,1-启用微小车牌识别(像素60~80) + bit11-安全带检测:0-不启用,1-启用安全带检测 + bit12-民航车牌识别: 0-不启用,1-开启民航车牌识别 + bit13-车牌过渡倾斜处理: 0-不启用,1-开启过渡倾斜处理(PRS) + bit14-超大车牌识别: 0-不启用,1-开启超大车牌识别(PRS) + bit15-遮阳板检测:0-不启用,1-启用遮阳板检测 + bit16-黄标车检测:0-不启用,1-启用黄标车检测 + bit17-危险品车辆检测:0-不启用,1-启用危险品车辆检测 + bit18-使馆车牌识别:0-不启用,1-启用使馆车牌识别 + bit19-车辆子品牌识别:0-不启用,1-启用车辆子品牌识别 + bit20-打电话识别:0-不启用,1-启用 + bit21-车窗悬挂物识别:0-不启用,1-启用 */ - BYTE byVehicleLogoRecog;//ʶ 0-ã1- + BYTE byVehicleLogoRecog;//车标识别 0-不启用,1-启用 /* - 0-1-ģ2-3-壬4-5-ʣ6-7-8-9-10-11-ԥ - 12-ڣ13-14-棬15-16-գ17-ӣ18-ɣ19-ɣ20-21-࣬22-³ - 23-24-£25-26-27-̨28-29-أ30-ۣ31-£32-ƣ33-㣬 - 34-0xff-ȫ + 0-保留,1-澳,2-京,3-渝,4-闽,5-甘,6-粤,7-桂,8-贵,9-琼,10-冀,11-豫, + 12-黑,13-鄂,14-湘,15-吉,16-苏,17-赣,18-辽,19-蒙,20-宁,21-青,22-鲁, + 23-晋,24-陕,25-沪,26-川,27-台,28-津,29-藏,30-港,31-新,32-云,33-浙, + 34-皖,0xff-全部 */ - BYTE byProvince;//ʡֵ - BYTE byRegion;// ֵ 0-1-ŷޣ2-, 3-ŷ&˹(EU&CIS),4-ж(Middle East) - BYTE byCountry;//öCOUNTRY_INDEX(֧֡COUNTRY_ALL = 0xff,//ALL ȫ) - WORD wPlatePixelWidthMin;//ʶСֵλأǰƼΧ[130,500] - WORD wPlatePixelWidthMax;//ʶֵλأǰƼΧ[130,500] + BYTE byProvince;//省份索引值 + BYTE byRegion;// 区域索引值 0-保留,1-欧洲,2-俄语区域, 3-欧洲&俄罗斯(EU&CIS),4-中东(Middle East) + BYTE byCountry;//国家索引,参照枚举COUNTRY_INDEX(不支持“COUNTRY_ALL = 0xff,//ALL 全部”) + WORD wPlatePixelWidthMin;//车牌像素识别宽度最小值(单位是像素)当前推荐范围[130,500] + WORD wPlatePixelWidthMax;//车牌像素识别宽度最大值(单位是像素)当前推荐范围[130,500] BYTE byRes[24]; }NET_ITC_PLATE_RECOG_PARAM, *LPNET_ITC_PLATE_RECOG_PARAM; -//ͽṹ +//多边型结构体 typedef struct tagNET_ITC_POLYGON { - DWORD dwPointNum; //Ч ڵ33һΪЧ߽ΪЧ - NET_VCA_POINT struPos[ITC_MAX_POLYGON_POINT_NUM]; //α߽,20 + DWORD dwPointNum; //有效点 大于等于3,若是3点在一条线上认为是无效区域,线交叉认为是无效区域 + NET_VCA_POINT struPos[ITC_MAX_POLYGON_POINT_NUM]; //多边形边界点,最多20个 }NET_ITC_POLYGON, *LPNET_ITC_POLYGON; typedef struct tagNET_ITC_PLATE_RECOG_REGION_PARAM { - BYTE byMode; //ͣ0-Σ1- + BYTE byMode; //区域类型,0-矩形,1-多边形 BYTE byRes1[3]; union { - NET_VCA_RECT struRect; // - NET_ITC_POLYGON struPolygon; // + NET_VCA_RECT struRect; //矩形区域 + NET_ITC_POLYGON struPolygon; //多边形区域 }uRegion; - BYTE byRes[16]; // + BYTE byRes[16]; //保留 }NET_ITC_PLATE_RECOG_REGION_PARAM, *LPNET_ITC_PLATE_RECOG_REGION_PARAM; -//IOٲ +//单组IO测速参数 typedef struct tagNET_ITC_SINGLE_IOSPEED_PARAM { - BYTE byEnable; //Ƿã0-ã1- - BYTE byTrigCoil1; //һȦIO0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 - BYTE byCoil1IOStatus;//һȦIO״̬0-½أĬϣ1-أ2-غ½أ3-ߵƽ4-͵ƽ - BYTE byTrigCoil2; //ڶȦIO0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 - BYTE byCoil2IOStatus;//ڶȦIO״̬0-½أĬϣ1-أ2-غ½أ3-ߵƽ4-͵ƽ - BYTE byRelatedDriveWay;//ij - BYTE byTimeOut;//ʱʱ䣨Ĭ10λs - BYTE byRelatedIOOutEx;//0λʾIO1Դƣ0-1- ֹ֧8(byRelatedIOOutֶ) - DWORD dwDistance;//Ȧ루Ĭ1000,λ - BYTE byCapSpeed;//ٶȣĬ30λkm/h - BYTE bySpeedLimit;//ֵĬ60λkm/h - BYTE bySpeedCapEn; //Ƿóץģ0-1- - BYTE bySnapTimes1; //Ȧ1ץĴĬϲץģ0-ץģ0-Ĵ5 - BYTE bySnapTimes2; //Ȧ2ץĴĬ10-ץģ0-Ĵ5 - BYTE byBigCarSpeedLimit; //󳵳ֵ - BYTE byBigCarSignSpeed;//־()λkm/h(3.7Ver) - BYTE byIntervalType; //ͣĬϰʱ䣩0-ʱЧ,1-Ч - WORD wInterval1[MAX_INTERVAL_NUM];//Ȧ1ļʱ䣨λmsļ루λףbyIntervalTypeΪ0ʱʾʱ䣬byIntervalTypeΪ1ʱʾ - WORD wInterval2[MAX_INTERVAL_NUM];//Ȧ2ļʱ䣨λmsļ루λףbyIntervalTypeΪ0ʱʾʱ䣬byIntervalTypeΪ1ʱʾ - BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //IO(ͬʱ)0ʾIO11ʾIO2Դƣ0-1- - BYTE byFlashMode; //˸ģʽ0-ͬʱ1- - BYTE byLaneType; //ͣ0-δá1-ٹ·2-п·0xff-· - BYTE byCarSignSpeed;//־٣λkm/h(3.7Ver) - BYTE byUseageType; //;ͣITC_LANE_USEAGE_TYPE - NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //ʶ(ʶ1һ) - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byTrigCoil1; //第一线圈关联IO,0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 + BYTE byCoil1IOStatus;//第一线圈IO输入口状态,0-下降沿(默认),1-上升沿,2-上升沿和下降沿,3-高电平,4-低电平 + BYTE byTrigCoil2; //第二线圈关联IO,0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 + BYTE byCoil2IOStatus;//第二线圈IO输入口状态,0-下降沿(默认),1-上升沿,2-上升沿和下降沿,3-高电平,4-低电平 + BYTE byRelatedDriveWay;//关联的车道号 + BYTE byTimeOut;//超时时间(默认10),单位s + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + DWORD dwDistance;//线圈距离(默认1000),单位:厘米 + BYTE byCapSpeed;//起拍速度(默认30),单位km/h + BYTE bySpeedLimit;//限速值(默认60),单位km/h + BYTE bySpeedCapEn; //是否启用超速抓拍,0-否,1-是 + BYTE bySnapTimes1; //线圈1抓拍次数(默认不抓拍),0-不抓拍,非0-连拍次数,最大5次 + BYTE bySnapTimes2; //线圈2抓拍次数(默认1),0-不抓拍,非0-连拍次数,最大5次 + BYTE byBigCarSpeedLimit; //大车车速限制值 + BYTE byBigCarSignSpeed;//标志限速(大车),单位km/h(3.7Ver) + BYTE byIntervalType; //间隔类型(默认按时间),0-时间起效,1-距离起效 + WORD wInterval1[MAX_INTERVAL_NUM];//线圈1连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + WORD wInterval2[MAX_INTERVAL_NUM];//线圈2连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口(可以同时关联多个),数组0表示IO输出口1,数组1表示IO输出口2,以此类推,0-不关联,1-关联 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byLaneType; //车道类型,0-未配置、1-高速公路、2-城市快速路、0xff-其他道路 + BYTE byCarSignSpeed;//标志限速,单位km/h(3.7Ver) + BYTE byUseageType; //车道用途类型,详见ITC_LANE_USEAGE_TYPE + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //牌识参数(可用牌识区域1个,保留一个) + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; - BYTE byLowSpeedLimit; //С޵ֵλkm/h - BYTE byBigCarLowSpeedLimit; //޵ֵλkm/h - BYTE byLowSpeedCapEn; //Ƿõץģ0-1- - BYTE byEmergencyCapEn; //ǷӦץģ0-1- + BYTE byLowSpeedLimit; //小车限底速值,单位km/h + BYTE byBigCarLowSpeedLimit; //大车限底速值,单位km/h + BYTE byLowSpeedCapEn; //是否启用低速抓拍,0-否,1-是 + BYTE byEmergencyCapEn; //是否启用应急车道抓拍,0-否,1-是 BYTE byRes[27]; }NET_ITC_SINGLE_IOSPEED_PARAM, *LPNET_ITC_SINGLE_IOSPEED_PARAM; -//IOٲ +//卡口IO测速参数 typedef struct tagNET_ITC_POST_IOSPEED_PARAM { - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_SINGLE_IOSPEED_PARAM struSingleIOSpeed[MAX_IOSPEED_GROUP_NUM]; //IO + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_SINGLE_IOSPEED_PARAM struSingleIOSpeed[MAX_IOSPEED_GROUP_NUM]; //单个IO测速组参数 BYTE byRes[32]; }NET_ITC_POST_IOSPEED_PARAM, *LPNET_ITC_POST_IOSPEED_PARAM; -//IO +//单IO参数 typedef struct tagNET_ITC_SINGLEIO_PARAM { - BYTE byDefaultStatus;//IOĬ״̬0-͵ƽ1-ߵƽ - BYTE byRelatedDriveWay;//ij - BYTE bySnapTimes; //ץĴĬ10-ץģ0-Ĵ5 - BYTE byRelatedIOOutEx;//0λʾIO1Դƣ0-1- ֹ֧8(byRelatedIOOutֶ) - NET_ITC_INTERVAL_PARAM struInterval; //ץļ - BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //IOڣͬʱ - BYTE byFlashMode; //˸ģʽ0-ͬʱ1- - BYTE byEnable;//IOʹܱ־0-ã1- (Remark:֧ bySupport&0x20ʾǷֵ֧IOIOʹ ʱЧ) - BYTE byUseageType; //;ͣITC_LANE_USEAGE_TYPE - BYTE byEmergencyCapEn; //ǷӦץģ0-1- - NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //ʶ + BYTE byDefaultStatus;//IO触发默认状态:0-低电平,1-高电平 + BYTE byRelatedDriveWay;//关联的车道号 + BYTE bySnapTimes; //抓拍次数(默认1),0-不抓拍,非0-连拍次数,最大5 + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + NET_ITC_INTERVAL_PARAM struInterval; //抓拍间隔参数 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byEnable;//单IO使能标志0-不启用,1-启用 (Remark:在能力返回支持 bySupport&0x20,表示是否支持单IO触发界面IO使能配置 时生效) + BYTE byUseageType; //车道用途类型,详见ITC_LANE_USEAGE_TYPE + BYTE byEmergencyCapEn; //是否启用应急车道抓拍,0-否,1-是 + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //牌识参数 BYTE byRes[24]; }NET_ITC_SINGLEIO_PARAM, *LPNET_ITC_SINGLEIO_PARAM; -//IO +//单IO触发参数 typedef struct tagNET_ITC_POST_SINGLEIO_PARAM { - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_SINGLEIO_PARAM struSingleIO[MAX_IOIN_NUMEX]; //IO + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_SINGLEIO_PARAM struSingleIO[MAX_IOIN_NUMEX]; //单个IO触发参数 }NET_ITC_POST_SINGLEIO_PARAM, *LPNET_ITC_POST_SINGLEIO_PARAM; typedef struct tagNET_ITC_LANE_PARAM { - BYTE byEnable; //Ƿøó0-ã1- - BYTE byRelatedDriveWay;//ij - WORD wDistance; //Ȧ룬ٶ - WORD wTrigDelayTime; //ӳʱ䣨Ĭ200λ - BYTE byTrigDelayDistance; //ӳپ루Ĭ0λ - BYTE bySpeedCapEn; //Ƿóץģ0-1- - BYTE bySignSpeed;//־٣λkm/h - BYTE bySpeedLimit;//ֵλkm/h - BYTE bySnapTimes; //ץĴĬ10-ץģ0-Ĵ5 - BYTE byOverlayDriveWay; //OSDӵij - NET_ITC_INTERVAL_PARAM struInterval; //ץļ - BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //IOڣͬʱ - BYTE byFlashMode; //˸ģʽ0-ͬʱ1- - BYTE byCartSignSpeed;//־()λkm/h - BYTE byCartSpeedLimit;//ֵ󳵣λkm/h - BYTE byRelatedIOOutEx;//0λʾIO1Դƣ0-1- ֹ֧8(byRelatedIOOutֶ) - NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //ʶ - BYTE byLaneType; //ͣ0-δá1-ٹ·2-п·0xff-· - BYTE byUseageType; //;ͣITC_LANE_USEAGE_TYPE - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + BYTE byEnable; //是否启用该车道,0-不启用,1-启用 + BYTE byRelatedDriveWay;//关联的车道号 + WORD wDistance; //线圈距离,计算速度 + WORD wTrigDelayTime; //触发延迟时间(默认200),单位:毫秒 + BYTE byTrigDelayDistance; //触发延迟距离(默认0),单位:分米 + BYTE bySpeedCapEn; //是否启用超速抓拍,0-否,1-是 + BYTE bySignSpeed;//标志限速,单位km/h + BYTE bySpeedLimit;//限速值,单位km/h + BYTE bySnapTimes; //抓拍次数(默认1),0-不抓拍,非0-连拍次数,最大5 + BYTE byOverlayDriveWay; //OSD叠加的车道号 + NET_ITC_INTERVAL_PARAM struInterval; //抓拍间隔参数 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byCartSignSpeed;//标志限速(大车),单位km/h + BYTE byCartSpeedLimit;//限速值(大车),单位km/h + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //车道牌识参数 + BYTE byLaneType; //车道类型,0-未配置、1-高速公路、2-城市快速路、0xff-其他道路 + BYTE byUseageType; //车道用途类型,详见ITC_LANE_USEAGE_TYPE + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; - BYTE byLowSpeedLimit; //С޵ֵλkm/h - BYTE byBigCarLowSpeedLimit; //޵ֵλkm/h - BYTE byLowSpeedCapEn; //Ƿõץģ0-1- - BYTE byEmergencyCapEn; //ǷӦץģ0-1- + BYTE byLowSpeedLimit; //小车限底速值,单位km/h + BYTE byBigCarLowSpeedLimit; //大车限底速值,单位km/h + BYTE byLowSpeedCapEn; //是否启用低速抓拍,0-否,1-是 + BYTE byEmergencyCapEn; //是否启用应急车道抓拍,0-否,1-是 BYTE byRes[9]; }NET_ITC_LANE_PARAM, *LPNET_ITC_LANE_PARAM; -//RS485 +//卡口RS485车检器触发参数 typedef struct tagNET_ITC_POST_RS485_PARAM { - BYTE byRelatedLaneNum;//ij - BYTE byTriggerSpareMode; //ģʽ0-Ĭϣ1-Ȧģʽ,2-ڻϳģʽ - BYTE byFaultToleranceTime;//ݴʱ(λ:)ڼ⳵Ƿʱ + BYTE byRelatedLaneNum;//关联的车道个数 + BYTE byTriggerSpareMode; //触发备用模式,0-默认,1-卡口虚拟线圈模式,2-卡口混合车道模式 + BYTE byFaultToleranceTime;//容错时间(单位:分钟),用于检测车检器是否正常的最大时间 BYTE byRes1; - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //ij + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //关联的车道参数 BYTE byRes[32]; }NET_ITC_POST_RS485_PARAM, *LPNET_ITC_POST_RS485_PARAM; typedef struct tagNET_ITC_RADAR_PARAM { - BYTE byRadarType; //״ͣ0-״,1-״2-άǣ3-΢4,״IOչ(˲ڿȦпڽʹãRS485״ﲻʹ),0xff- - BYTE byLevelAngle; //ˮƽɽǶ,ĬΪ25(090) - WORD wRadarSensitivity; //״ - WORD wRadarSpeedValidTime;//״ٶЧʱ(0~2000] ,0ʾ֧ + BYTE byRadarType; //雷达类型,0-无雷达,1-安道雷雷达,2-奥利维亚,3-川速微波4,雷达接IO扩展盒(此参数在卡口虚拟线圈、混行卡口界面中使用,卡口RS485雷达不使用),0xff-其它类型 + BYTE byLevelAngle; //与水平线所成角度,默认为25°(0到90度) + WORD wRadarSensitivity; //雷达灵敏度 + WORD wRadarSpeedValidTime;//雷达速度有效时间(0~2000] ,0表示不支持 BYTE byRes1[2]; - float fLineCorrectParam;//Խ[0.0~2.0] - int iConstCorrectParam;//[-100~100] + float fLineCorrectParam;//线性矫正参数[0.0~2.0] + int iConstCorrectParam;//常量矫正参数[-100~100] BYTE byRes2[8]; }NET_ITC_RADAR_PARAM, *LPNET_ITC_RADAR_PARAM; -typedef struct tagNET_ITC_RS485_ACCESS_INFO_COND //ṹ +typedef struct tagNET_ITC_RS485_ACCESS_INFO_COND //条件结构 { DWORD dwSize; DWORD dwChannel; DWORD dwTriggerModeType; - BYTE byAssociateRS485No;//RS485 15 (Ψһֵ) - // BYTE byModeType; //0Ԥ1״23źŵƼ + BYTE byAssociateRS485No;//关联的RS485号 1~5 (唯一值) + // BYTE byModeType; //0~预留,1~雷达,2~车检器,3~信号灯检测器 BYTE byRes[15]; }NET_ITC_RS485_ACCESS_INFO_COND,*LPNET_ITC_RS485_ACCESS_INFO_COND; typedef struct tagNET_ITC_RADAR_INFO_PARAM { NET_ITC_RADAR_PARAM struRadarParam;//24 - BYTE byAssociateLaneNo;//ij199 (ֵڲͬRS485ظ) + BYTE byAssociateLaneNo;//关联的车道号1~99 (这个值可以在不同RS485口重复) BYTE byRes[103]; }NET_ITC_RADAR_INFO_PARAM, *LPNET_ITC_RADAR_INFO_PARAM; typedef union tagNET_ITC_ACCESS_DEVINFO_PARAM_UNION { BYTE uLen[128]; - NET_ITC_RADAR_INFO_PARAM struRadarInfoParam;//״ + NET_ITC_RADAR_INFO_PARAM struRadarInfoParam;//雷达参数配置 }NET_ITC_ACCESS_DEVINFO_PARAM_UNION, *LPNET_ITC_ACCESS_DEVINFO_PARAM_UNION; -typedef struct tagNET_ITC_RS485_ACCESS_CFG //144 ýṹ +typedef struct tagNET_ITC_RS485_ACCESS_CFG //144 配置结构 { DWORD dwSize; - BYTE byModeType;//0Ԥbit1״bit2bit3źŵƼ + BYTE byModeType;//0~预留,bit1~雷达,bit2~车检器,bit3~信号灯检测器 BYTE byRes[3]; NET_ITC_ACCESS_DEVINFO_PARAM_UNION uITCAccessDevinfoParam; //64 BYTE byRes1[12]; }NET_ITC_RS485_ACCESS_CFG,*LPNET_ITC_RS485_ACCESS_CFG; -//2013-07-09 ״չ +//2013-07-09 雷达关联车道扩展 typedef struct tagNET_ITC_RS485_ACCESS_INFO { DWORD dwSize; - NET_ITC_RADAR_PARAM struRadar[MAX_ITC_LANE_NUM];//೵״Ϣ - //ʾֵ֧ĬΪ0ʾ мּ֧ + NET_ITC_RADAR_PARAM struRadar[MAX_ITC_LANE_NUM];//多车道雷达信息 + //根据能力集开发显示,不支持的默认为0,不显示 (有几个车道支持几个) BYTE byRes[20]; }NET_ITC_RS485_ACCESS_INFO, *LPNET_ITC_RS485_ACCESS_INFO; -//RS485״ﴥ +//卡口RS485雷达触发参数 typedef struct tagNET_ITC_POST_RS485_RADAR_PARAM { - BYTE byRelatedLaneNum;//ij + BYTE byRelatedLaneNum;//关联的车道个数 BYTE byRes1[3]; - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //ij - NET_ITC_RADAR_PARAM struRadar; //״ + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //关联的车道参数 + NET_ITC_RADAR_PARAM struRadar; //雷达参数 BYTE byRes[32]; }NET_ITC_POST_RS485_RADAR_PARAM, *LPNET_ITC_POST_RS485_RADAR_PARAM; typedef struct tagNET_ITC_VTLANE_PARAM { - BYTE byRelatedDriveWay;//ij - BYTE bySpeedCapEn; //Ƿóץģ0-1- - BYTE bySignSpeed;//־٣λkm/h - BYTE bySpeedLimit;//ֵλkm/h - BYTE bySnapTimes; //ץĴĬ10-ץģ0-Ĵ5 - BYTE byBigCarSignSpeed;///*󳵱־٣λkm/h*/ - BYTE byBigCarSpeedLimit;/*ֵλkm/h*/ - BYTE byRelatedIOOutEx;//0λʾIO1Դƣ0-1- ֹ֧8(byRelatedIOOutֶ) - NET_ITC_INTERVAL_PARAM struInterval; //ץļ - BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //IOڣͬʱ - BYTE byFlashMode; //˸ģʽ0-ͬʱ1- - BYTE byLowSpeedLimit;/*޵٣λkm/h*/ - BYTE byBigCarLowSpeedLimit; /*޵٣λkm/h*/ - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + BYTE byRelatedDriveWay;//关联的车道号 + BYTE bySpeedCapEn; //是否启用超速抓拍,0-否,1-是 + BYTE bySignSpeed;//标志限速,单位km/h + BYTE bySpeedLimit;//限速值,单位km/h + BYTE bySnapTimes; //抓拍次数(默认1),0-不抓拍,非0-连拍次数,最大5 + BYTE byBigCarSignSpeed;///*大车标志限速,单位km/h*/ + BYTE byBigCarSpeedLimit;/*大车限速值,单位km/h*/ + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + NET_ITC_INTERVAL_PARAM struInterval; //抓拍间隔参数 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byLowSpeedLimit;/*限低速,单位km/h*/ + BYTE byBigCarLowSpeedLimit; /*大车限低速,单位km/h*/ + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; - NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //ʶ - NET_VCA_LINE struLine; // + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //车道牌识参数 + NET_VCA_LINE struLine; //车道线 }NET_ITC_VTLANE_PARAM, *LPNET_ITC_VTLANE_PARAM; typedef struct tagNET_ITC_VTCOIL_INFO { - NET_VCA_RECT struLaneRect; /*Ȧ*/ - BYTE byTrigFlag; //־0-ͷ1-β2-ͷ/β - BYTE byTrigSensitive; //ȣ1-100 - BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //IO(ͬʱ)0ʾIO11ʾIO2Դƣ0-1- - BYTE byFlashMode; //˸ģʽ0-ͬʱ1- - BYTE byLaneType; //ͣ0-δá1-ٹ·2-п·0xff-· - BYTE byEnableRadar; //Ƿ״٣0-1- - NET_ITC_VTLANE_PARAM struLane; //ij - //;ͣITC_LANE_USEAGE_TYPEʹ18(3.7Ver) + NET_VCA_RECT struLaneRect; /*虚拟线圈区域*/ + BYTE byTrigFlag; //触发标志,0-车头触发;1-车尾触发;2-车头/车尾都触发 + BYTE byTrigSensitive; //触发灵敏度,1-100 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口(可以同时关联多个),数组0表示IO输出口1,数组1表示IO输出口2,以此类推,0-不关联,1-关联 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byLaneType; //车道类型,0-未配置、1-高速公路、2-城市快速路、0xff-其他道路 + BYTE byEnableRadar; //是否启用雷达测速,0-否,1-是 + NET_ITC_VTLANE_PARAM struLane; //关联的车道参数 + //车道用途类型,详见ITC_LANE_USEAGE_TYPE,使用1和8两种类型(3.7Ver) BYTE byUseageType; - //ʻITC_LANE_CAR_DRIVE_DIRECT(3.7Ver) + //车辆行驶方向,详见ITC_LANE_CAR_DRIVE_DIRECT(3.7Ver) BYTE byCarDriveDirect; BYTE byRes[30]; }NET_ITC_VTCOIL_INFO, *LPNET_ITC_VTCOIL_INFO; -//Ȧ +//卡口虚拟线圈触发参数 typedef struct tagNET_ITC_POST_VTCOIL_PARAM { - BYTE byRelatedLaneNum;//ij - BYTE byIsDisplay; //ƵǷʾȦ0-ʾ1-ʾ - BYTE byLoopPos; //䴥ȦƫĬ10 - BYTE byPolarLenType; /*ƫͣ0ƫ񾵣1ʩ͵ƫ񾵡*/ - BYTE byDayAuxLightMode; /*츨ģʽ0޸1LED2*/ - BYTE byVideoLaneNO; //ƵοȵIJο - BYTE byVideoLowTh; /*ƵοȵֵʼֵĬ40*/ - BYTE byVideoHighTh; /*ƵοȸֵʼֵĬ55*/ - BYTE byRecordMode; //¼־0-¼1-¼ - BYTE bySnapMode;//ץģʽ0-Ƶģʽ1-ģʽ - /*ٷʽ0-٣0x1-״٣0x2-Ƶ*/ + BYTE byRelatedLaneNum;//关联的车道个数 + BYTE byIsDisplay; //视频中是否显示虚拟线圈,0-不显示,1-显示 + BYTE byLoopPos; //晚间触发线圈的偏向(默认10) + BYTE byPolarLenType; /*偏振镜类型,0:不加偏振镜;1:加施耐德偏振镜。*/ + BYTE byDayAuxLightMode; /*白天辅助照明模式,0:无辅助照明;1:LED灯照明;2:闪光灯照明*/ + BYTE byVideoLaneNO; //视频参考亮度的参考车道号 + BYTE byVideoLowTh; /*视频参考亮度低阈值初始化值(默认40)*/ + BYTE byVideoHighTh; /*视频参考亮度高阈值初始化值(默认55)*/ + BYTE byRecordMode; //录像标志:0-不录像,1-录像 + BYTE bySnapMode;//抓拍模式:0-频闪模式;1-爆闪模式 + /*测速方式:0-不测速,0x1-雷达测速,0x2-视频测速*/ BYTE bySpeedDetector; BYTE byRes2; - WORD wResolutionX;/* 豸ǰֱʿ*/ - WORD wResolutionY;/* 豸ǰֱʸ*/ - DWORD dwDayInitExp; /*Ƶعʱijʼֵ2000*/ - DWORD dwDayMaxExp; /*Ƶعʱֵ20000*/ - DWORD dwNightExp; /*Ƶعʱֵ3000*/ - DWORD dwSnapExp; /*ץعʱ*/ - BYTE byDayInitGain; /*Ƶijʼֵ200*/ - BYTE byDayMaxGain; /*Ƶֵ400*/ - BYTE byNightGain; /*Ƶ*/ - BYTE bySnapGain; /*ץ*/ - DWORD dwSceneMode; //ģʽ SCENE_MODE - NET_DVR_GEOGLOCATION struGeogLocation; //ַλ(Ĭ㽭) - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_VTCOIL_INFO struVtCoil[MAX_VL_NUM]; //Ȧ - NET_ITC_RADAR_PARAM struRadar; //״ - NET_VCA_LINE struLine; //ҳ - //ΥͣλʾITC_VIOLATION_DETECT_TYPE0-ã1-(3.7Ver) + WORD wResolutionX;/* 设备当前分辨率宽*/ + WORD wResolutionY;/* 设备当前分辨率高*/ + DWORD dwDayInitExp; /*视频白天曝光时间的初始值2000*/ + DWORD dwDayMaxExp; /*视频白天曝光时间的最大值20000*/ + DWORD dwNightExp; /*晚间视频曝光时间的设置值3000*/ + DWORD dwSnapExp; /*抓拍曝光时间*/ + BYTE byDayInitGain; /*视频白天增益的初始值200*/ + BYTE byDayMaxGain; /*视频白天增益的最大值400*/ + BYTE byNightGain; /*晚间视频增益*/ + BYTE bySnapGain; /*抓拍增益*/ + DWORD dwSceneMode; //场景模式, 详见SCENE_MODE + NET_DVR_GEOGLOCATION struGeogLocation; //地址位置(默认浙江) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_VTCOIL_INFO struVtCoil[MAX_VL_NUM]; //虚拟线圈参数 + NET_ITC_RADAR_PARAM struRadar; //雷达参数 + NET_VCA_LINE struLine; //右车道线 + //违规检测类型,按位表示,详见ITC_VIOLATION_DETECT_TYPE,0-不启用,1-启用(3.7Ver) DWORD dwVioDetectType; - BYTE byDebugMode; /*ģʽ0-ã1-*/ + BYTE byDebugMode; /*调试模式,0-不启用,1-启用*/ BYTE byRes[11]; }NET_ITC_POST_VTCOIL_PARAM, *LPNET_ITC_POST_VTCOIL_PARAM; -//IO̵Ʋ +//单组IO红绿灯参数 typedef struct tagNET_ITC_SINGLE_IOTL_PARAM { - BYTE byEnable; //Ƿã0-ã1- - BYTE byLightIO; //̵IO0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 - BYTE byTrafficLight; //̵Ч״̬0-ߵƽƣ͵ƽ̵ƣ1-ߵƽ̵ƣ͵ƽ - BYTE byTrigIO;//IOţ0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 - BYTE byTrigIOStatus;//IOڵ״̬Ĭ00-½أ1-أ2-غ½أ3-ߵƽ4-͵ƽ - BYTE byRelatedDriveWay;//ij - BYTE byRecordEnable;//¼־0-¼1-¼ - BYTE byRecordType;//¼ͣ0-Ԥ¼1-ʱ¼ - BYTE byPreRecordTime;//¼ƬԤ¼ʱ䣨Ĭ0λ - BYTE byRecordDelayTime;//¼Ƭʱʱ䣨Ĭ0λ - BYTE byRecordTimeOut;//¼ʱʱ䣨룩 - BYTE byRedSnapTimes; //ץĴ0-ץģ0-Ĵ5 - BYTE byGreenSnapTimes; //̵ץĴ0-ץģ0-Ĵ5 - BYTE byRelatedIOOutEx;//0λʾIO1Դƣ0-1- ֹ֧8(byRelatedIOOutֶ) + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byLightIO; //红绿灯IO,0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 + BYTE byTrafficLight; //红绿灯有效状态0-高电平红灯,低电平绿灯;1-高电平绿灯,低电平红灯 + BYTE byTrigIO;//触发的IO号,0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 + BYTE byTrigIOStatus;//触发IO口的状态(默认0),0-下降沿,1-上升沿,2-上升沿和下降沿,3-高电平,4-低电平 + BYTE byRelatedDriveWay;//关联的车道号 + BYTE byRecordEnable;//闯红灯周期录像标志,0-不录像,1-录像 + BYTE byRecordType;//闯红灯录像类型,0-预录,1-延时录像 + BYTE byPreRecordTime;//闯红灯录像片段预录时间(默认0),单位:秒 + BYTE byRecordDelayTime;//闯红灯录像片段延时时间(默认0),单位:秒 + BYTE byRecordTimeOut;//闯红灯周期录像超时时间(秒) + BYTE byRedSnapTimes; //红灯抓拍次数,0-不抓拍,非0-连拍次数,最大5次 + BYTE byGreenSnapTimes; //绿灯抓拍次数,0-不抓拍,非0-连拍次数,最大5次 + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) BYTE byRes1; - BYTE byIntervalType; //ͣĬϰʱ䣩0-ʱЧ,1-Ч - WORD wRedInterval[MAX_INTERVAL_NUM];//ļʱ䣨λmsļ루λףbyIntervalTypeΪ0ʱʾʱ䣬byIntervalTypeΪ1ʱʾ - WORD wGreenInterval[MAX_INTERVAL_NUM];//̵ļʱ䣨λmsļ루λףbyIntervalTypeΪ0ʱʾʱ䣬byIntervalTypeΪ1ʱʾ - BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //IOڣͬʱ - BYTE byFlashMode; //˸ģʽ0-ͬʱ1- + BYTE byIntervalType; //间隔类型(默认按时间),0-时间起效,1-距离起效 + WORD wRedInterval[MAX_INTERVAL_NUM];//红灯连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + WORD wGreenInterval[MAX_INTERVAL_NUM];//绿灯连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 BYTE byRes2[3]; - NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //ʶ + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //牌识区域参数 BYTE byRes[32]; }NET_ITC_SINGLE_IOTL_PARAM, *LPNET_ITC_SINGLE_IOTL_PARAM; -//羯IO̵Ʋ +//电警IO红绿灯参数 typedef struct tagNET_ITC_EPOLICE_IOTL_PARAM { - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_SINGLE_IOTL_PARAM struSingleIOTL[MAX_IOSPEED_GROUP_NUM]; //IO̵Ʋ + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_SINGLE_IOTL_PARAM struSingleIOTL[MAX_IOSPEED_GROUP_NUM]; //单组IO红绿灯参数 BYTE byRes[32]; }NET_ITC_EPOLICE_IOTL_PARAM, *LPNET_ITC_EPOLICE_IOTL_PARAM; typedef enum _ITC_SERIAL_PROTOCOL_ { - ITC_PROTOCOL_UNKNOW = 0, /*δ֪*/ - ITC_SINGLE_COIL_PROTOCOL_MODE1 = 1, /*ȦЭģʽ1ʾΪ_1_1_1_1뿪뿪ʱץģ뿪ʶϴ3ųͼƬͳƽ*/ - ITC_DOUBLE_COIL_PROTOCOL_MODE1 = 2, /*˫ȦЭģʽ1ʾΪ˫_1_1_2_11뿪1뿪2ץģ뿪1ʶϴ3ųͼƬͳƽĬϣ*/ - ITC_DOUBLE_COIL_PROTOCOL_MODE2 = 3, /*˫ȦЭģʽ2ʾΪ˫_1_2_2_1뿪1뿪2뿪2ʱץģ뿪1ʶϴ3ųͼƬͳƽ*/ - ITC_DOUBLE_COIL_PROTOCOL_MODE3 = 4, /*˫ȦЭģʽ3ʾΪ˫_2_1_2_12뿪1뿪2ʱץģ뿪1ʶϴ3ųͼƬͳƽ*/ - ITC_DOUBLE_COIL_PROTOCOL_MODE4 = 5, /*˫ȦЭģʽ4ʾΪ˫/_2_2_2_12뿪2뿪2ʱץģ뿪1ʶϴ3ųͼƬͳƽ*/ - ITC_DOUBLE_COIL_PROTOCOL_MODE5 = 6, /*˫ȦЭģʽ5ʾΪ˫/_2_2_2_22뿪2뿪2ʱץģ2뿪1ʶϴ3ųͼƬŶȸߵijƽĬϣ*/ - ITC_DOUBLE_COIL_PROTOCOL_MODE6 = 7, /*˫ȦЭģʽ6ʾΪ˫/_1_2_2_21뿪2뿪2ʱץģ1뿪1ʶϴ3ųͼƬŶȸߵijƽ*/ - ITC_DOUBLE_COIL_PROTOCOL_MODE7 = 8, /*˫ȦЭģʽ7ʾΪ˫_1_1_2_11뿪1뿪2ʱץģ뿪1ʶϴͼƬ뿪1Ƶ1뿪1뿪2ʱͳƽ*/ - ITC_DOUBLE_COIL_PROTOCOL_MODE8 = 9, /*˫ȦЭģʽ8ʾΪ˫_1_1_2_21뿪1뿪2ʱץģ1뿪1ʶϴͼƬ뿪1Ƶ1뿪1뿪2ʱŶȸߵijƽĬϣ*/ - ITC_SINGLE_COIL_PROTOCOL_MODE2 = 10, /*ȦЭģʽ2ʾΪ_1_1_1_2뿪뿪ʱץģ뿪ʶϴͼƬ뿪Ƶ뿪뿪ʱŶȸߵijƽĬϣ*/ - ITC_OTHER_PROTOCOL = 0xff /*Э(demoã3.3֮汾demoͿؼִֵ֧)*/ + ITC_PROTOCOL_UNKNOW = 0, /*未知*/ + ITC_SINGLE_COIL_PROTOCOL_MODE1 = 1, /*单线圈车检器协议模式1(显示为:单_进1_出1_延1_1),到达、离开、离开延时抓拍,离开牌识,上传3张车辆图片和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE1 = 2, /*双线圈车检器协议模式1(显示为:双_进1_出1_出2_1),到达1、离开1、离开2抓拍,离开1牌识,上传3张车辆图片和车牌结果(默认)*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE2 = 3, /*双线圈车检器协议模式2(显示为:双_出1_出2_延2_1),离开1、离开2、离开2延时抓拍,离开1牌识,上传3张车辆图片和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE3 = 4, /*双线圈车检器协议模式3(显示为:双_进2_出1_延2_1),进入2、离开1、离开2延时抓拍,离开1牌识,上传3张车辆图片和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE4 = 5, /*双线圈车检器协议模式4(显示为:双/三_进2_出2_延2_1),到达2、离开2、离开2延时抓拍,离开1牌识,上传3张车辆图片和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE5 = 6, /*双线圈车检器协议模式5(显示为:双/三_进2_出2_延2_2),到达2、离开2、离开2延时抓拍,到达2、离开1均牌识,上传3张车辆图片和置信度高的车牌结果(默认)*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE6 = 7, /*双线圈车检器协议模式6(显示为:双/三_进1_出2_延2_2),到达1、离开2、离开2延时抓拍,到达1、离开1均牌识,上传3张车辆图片和置信度高的车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE7 = 8, /*双线圈车检器协议模式7(显示为:双_进1_出1_延2_1),到达1、离开1、离开2延时抓拍,离开1牌识,上传车辆图片(卡口离开1,闯红灯到达1、离开1、离开2延时)和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE8 = 9, /*双线圈车检器协议模式8(显示为:双_进1_出1_延2_2),到达1、离开1、离开2延时抓拍,到达1、离开1均牌识,上传车辆图片(卡口离开1,闯红灯到达1、离开1、离开2延时)和置信度高的车牌结果(默认)*/ + ITC_SINGLE_COIL_PROTOCOL_MODE2 = 10, /*单线圈车检器协议模式2(显示为:单_进1_出1_延1_2),到达、离开、离开延时抓拍,到达、离开均牌识,上传车辆图片(卡口离开,闯红灯到达、离开、离开延时)和置信度高的车牌结果(默认)*/ + ITC_OTHER_PROTOCOL = 0xff /*其它车检器协议(用于老demo参数配置,3.3之后版本关联的demo和控件均不支持此值)*/ }ITC_SERIAL_PROTOCOL; -//߼ץ +//正常过车逻辑抓拍类型 typedef enum _ITC_NORMAL_PASS_SERIAL_PROTOCOL_ { - ITC_NORMAL_PASS_SERIAL_UNKNOW = 0, //δ֪ - ITC_NORMAL_PASS_PROTOCOL_MODE1 = 1, //Ȧ뿪ץģʶϴĬϣ - ITC_NORMAL_PASS_PROTOCOL_MODE2 =2, //Ȧ뿪ץģʶϴ뿪ͼƬŶȸߵijƽ - ITC_NORMAL_PASS_PROTOCOL_MODE3 =3, //˫Ȧ뿪1ץģʶϴĬϣ - ITC_NORMAL_PASS_PROTOCOL_MODE4 =4, //˫Ȧ1뿪1ץģʶϴ뿪1ͼƬŶȸߵijƽ - ITC_NORMAL_PASS_PROTOCOL_MODE5 =5, //˫Ȧ2뿪1ץģʶϴ뿪1ͼƬŶȸߵijƽ + ITC_NORMAL_PASS_SERIAL_UNKNOW = 0, //未知 + ITC_NORMAL_PASS_PROTOCOL_MODE1 = 1, //单线圈,离开抓拍,牌识上传(默认) + ITC_NORMAL_PASS_PROTOCOL_MODE2 =2, //单线圈,到达、离开抓拍,均牌识,仅上传离开车辆图片和置信度高的车牌结果 + ITC_NORMAL_PASS_PROTOCOL_MODE3 =3, //双线圈,离开1抓拍,牌识上传(默认) + ITC_NORMAL_PASS_PROTOCOL_MODE4 =4, //双线圈,到达1、离开1抓拍,均牌识,仅上传离开1车辆图片和置信度高的车牌结果 + ITC_NORMAL_PASS_PROTOCOL_MODE5 =5, //双线圈,到达2、离开1抓拍,均牌识,仅上传离开1车辆图片和置信度高的车牌结果 }ITC_NORMAL_PASS_SERIAL_PROTOCOL; -//Υ߼ץ +//逆行违规逻辑抓拍类型 typedef enum _ITC_INVERSE_SERIAL_PROTOCOL_ { - ITC_INVERSE_SERIAL_UNKNOW = 0, //δ֪ - ITC_INVERSE_PROTOCOL_MODE1 = 1, //ץ - ITC_INVERSE_PROTOCOL_MODE2 =2, //1ץ2š뿪2ץģ1žʶϴ3ųͼƬŶȸߵijƽ - ITC_INVERSE_PROTOCOL_MODE3 =3, //1뿪2ץģ1ʶϴ2ųͼƬͳƽ + ITC_INVERSE_SERIAL_UNKNOW = 0, //未知 + ITC_INVERSE_PROTOCOL_MODE1 = 1, //不抓拍 + ITC_INVERSE_PROTOCOL_MODE2 =2, //到达1连抓2张、离开2抓拍,到达1两张均牌识,上传3张车辆图片和置信度高的车牌结果 + ITC_INVERSE_PROTOCOL_MODE3 =3, //到达1、离开2抓拍,到达1牌识,上传2张车辆图片和车牌结果 }ITC_INVERSE_SERIAL_PROTOCOL; -//Υ߼ץ +//超速违规逻辑抓拍类型 typedef enum _ITC_SPEED_SERIAL_PROTOCOL_ { - ITC_SPEED_SERIAL_UNKNOW = 0, //δ֪ - ITC_SPEED_PROTOCOL_MODE1 = 1, //ץ - ITC_SPEED_PROTOCOL_MODE2 =2, //˫/Ȧ뿪1뿪2뿪2ʱץģ뿪1ʶϴͼƬ뿪1뿪1뿪2뿪2ʱͳƽ - ITC_SPEED_PROTOCOL_MODE3 =3, //˫/Ȧ뿪1뿪2뿪2ʱץģ뿪1ʶϴͼƬ뿪1뿪1뿪2ͳƽ + ITC_SPEED_SERIAL_UNKNOW = 0, //未知 + ITC_SPEED_PROTOCOL_MODE1 = 1, //不抓拍 + ITC_SPEED_PROTOCOL_MODE2 =2, //双/三线圈,离开1,离开2,离开2延时抓拍,离开1牌识,上传车辆图片(卡口离开1,超速离开1、离开2、离开2延时)和车牌结果 + ITC_SPEED_PROTOCOL_MODE3 =3, //双/三线圈,离开1,离开2,离开2延时抓拍,离开1牌识,上传车辆图片(卡口离开1,超速离开1、离开2)和车牌结果 }ITC_SPEED_SERIAL_PROTOCOL; -// +//车检器参数 typedef struct tagNET_ITC_SERIAL_INFO { - BYTE bySerialProtocol; //ЭͣITC_SERIAL_PROTOCOL - BYTE byIntervalType; //ͣĬϰʱ䣩0-ʱЧ,1-Ч - WORD wInterval;//ļʱ䣨λmsļ루λףbyIntervalTypeΪ0ʱʾʱ䣬byIntervalTypeΪ1ʱʾ - BYTE byNormalPassProtocol; //ץЭͣITC_NORMAL_PASS_SERIAL_PROTOCOL - BYTE byInverseProtocol; //ץЭͣITC_INVERSE_SERIAL_PROTOCOL - BYTE bySpeedProtocol; //ץЭͣITC_SPEED_SERIAL_PROTOCOL + BYTE bySerialProtocol; //车检器协议类型,详见ITC_SERIAL_PROTOCOL + BYTE byIntervalType; //间隔类型(默认按时间),0-时间起效,1-距离起效 + WORD wInterval;//连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + BYTE byNormalPassProtocol; //正常过车抓拍协议类型,详见ITC_NORMAL_PASS_SERIAL_PROTOCOL + BYTE byInverseProtocol; //逆行抓拍协议类型,详见ITC_INVERSE_SERIAL_PROTOCOL + BYTE bySpeedProtocol; //超速抓拍协议类型,详见ITC_SPEED_SERIAL_PROTOCOL BYTE byRes[9]; }NET_ITC_SERIAL_INFO, *LPNET_ITC_SERIAL_INFO; typedef struct tagNET_ITC_EPOLICE_LANE_PARAM { - BYTE byEnable; //Ƿøó0-ã1- - BYTE byRelatedDriveWay;//ij - WORD wDistance; //Ȧ룬λ - BYTE byRecordEnable;//¼־0-¼1-¼ - BYTE byRecordType;//¼ͣ0-Ԥ¼1-ʱ¼ - BYTE byPreRecordTime;//¼ƬԤ¼ʱ䣨Ĭ0λ - BYTE byRecordDelayTime;//¼Ƭʱʱ䣨Ĭ0λ - BYTE byRecordTimeOut;//¼ʱʱ䣨룩 - BYTE bySignSpeed;//־(ʽ羯ģʽЧ)λkm/h - BYTE bySpeedLimit;//ֵ(ʽ羯ģʽЧ)λkm/h - BYTE byOverlayDriveWay; //OSDӵij - NET_ITC_SERIAL_INFO struSerialInfo; // - BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //IOڣͬʱ - BYTE byFlashMode; //˸ģʽ0-ͬʱ1- - BYTE bySerialType; //ͣ0-˽г1-˽OEM2- - BYTE byRelatedIOOutEx;//0λʾIO1Դƣ0-1- ֹ֧8(byRelatedIOOutֶ) - BYTE bySnapPicPreRecord; //ץͼƬԤ¼ʱ㣻0-ĬֵڶͼƬ1-һͼƬ2-ڶͼƬ3-ͼƬ - NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //ʶ - BYTE byBigCarSignSpeed; ///*󳵱־٣λkm/h*/ - BYTE byBigCarSpeedLimit;/*ֵλkm/h*/ - BYTE byRedTrafficLightChan;//ͨţ116̵Ƽ - BYTE byYellowTrafficLightChan;//Ƶͨţ116̵Ƽ - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + BYTE byEnable; //是否启用该车道,0-不启用,1-启用 + BYTE byRelatedDriveWay;//关联的车道号 + WORD wDistance; //线圈距离,单位厘米 + BYTE byRecordEnable;//闯红灯周期录像标志,0-不录像,1-录像 + BYTE byRecordType;//闯红灯录像类型,0-预录,1-延时录像 + BYTE byPreRecordTime;//闯红灯录像片段预录时间(默认0),单位:秒 + BYTE byRecordDelayTime;//闯红灯录像片段延时时间(默认0),单位:秒 + BYTE byRecordTimeOut;//闯红灯周期录像超时时间(秒) + BYTE bySignSpeed;//标志限速(卡式电警模式有效),单位km/h + BYTE bySpeedLimit;//限速值(卡式电警模式有效),单位km/h + BYTE byOverlayDriveWay; //OSD叠加的车道号 + NET_ITC_SERIAL_INFO struSerialInfo; //车检器参数 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE bySerialType; //车检器类型,0-私有车检器,1-私有OEM车检器,2-其他车检器 + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + BYTE bySnapPicPreRecord; //抓拍图片预录时间点;0-默认值(第二张图片),1-第一张图片,2-第二张图片,3-第三张图片 + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //车道牌识参数 + BYTE byBigCarSignSpeed; ///*大车标志限速,单位km/h*/ + BYTE byBigCarSpeedLimit;/*大车限速值,单位km/h*/ + BYTE byRedTrafficLightChan;//红灯通道号:1~16(红绿灯检测器) + BYTE byYellowTrafficLightChan;//黄灯通道号:1~16(红绿灯检测器) + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; BYTE byRes3[11]; }NET_ITC_EPOLICE_LANE_PARAM, *LPNET_ITC_EPOLICE_LANE_PARAM; -//羯/ʽ羯RS485 +//电警/卡式电警RS485车检器触发参数 typedef struct tagNET_ITC_EPOLICE_RS485_PARAM { - BYTE byRelatedLaneNum;//ij - BYTE byTrafficLightSignalSrc;//ͨźԴ 0 1̵Ƽ + BYTE byRelatedLaneNum;//关联的车道个数 + BYTE byTrafficLightSignalSrc;//交通灯信号来源 0~车检器 1~红绿灯检测器 BYTE byRes1[2]; - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_EPOLICE_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //ij + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_EPOLICE_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //关联的车道参数 BYTE byRes[32]; }NET_ITC_EPOLICE_RS485_PARAM, *LPNET_ITC_EPOLICE_RS485_PARAM; -//Բṹ +//车道属性参数结构 typedef struct tagNET_ITC_LANE_LOGIC_PARAM { - BYTE byUseageType; //;ͣITC_LANE_USEAGE_TYPE - BYTE byDirectionType; //ͣITC_LANE_DIRECTION_TYPE - BYTE byCarDriveDirect; //ʻITC_LANE_CAR_DRIVE_DIRECT - BYTE byRes[33]; // + BYTE byUseageType; //车道用途类型,详见ITC_LANE_USEAGE_TYPE + BYTE byDirectionType; //车道方向类型,详见ITC_LANE_DIRECTION_TYPE + BYTE byCarDriveDirect; //车辆行驶方向,详见ITC_LANE_CAR_DRIVE_DIRECT + BYTE byRes[33]; //保留 }NET_ITC_LANE_LOGIC_PARAM, *LPNET_ITC_LANE_LOGIC_PARAM; -//Ƶ羯߽ṹ +//视频电警线结构 typedef struct tagNET_ITC_LINE { - NET_VCA_LINE struLine; //߲ - BYTE byLineType; //ͣITC_LINE_TYPE + NET_VCA_LINE struLine; //线参数 + BYTE byLineType; //线类型,详见ITC_LINE_TYPE BYTE byRes[7]; }NET_ITC_LINE, *LPNET_ITC_LINE; typedef struct tagNET_ITC_SNAPMODE_PARAM { - BYTE byVehicleCapMode;//ץģʽ0-Ƶģʽ1-ģʽ - BYTE byNoVehicleCapMode;//ǻץģʽ0-Ƶģʽ1-ģʽ - BYTE byPasserCapMode;//ץģʽ0-Ƶģʽ1-ģʽ + BYTE byVehicleCapMode;//机动车抓拍模式,0-频闪模式;1-爆闪模式 + BYTE byNoVehicleCapMode;//非机动车抓拍模式,0-频闪模式;1-爆闪模式 + BYTE byPasserCapMode;//行人抓拍模式,0-频闪模式;1-爆闪模式 BYTE byRes[29]; }NET_ITC_SNAPMODE_PARAM, *LPNET_ITC_SNAPMODE_PARAM; //size = 128 typedef struct tagNET_ITC_HVT_EC_PARAM { - DWORD dwCapShutter; //ץĿ0~65535 - WORD wCapGain; //ץ0100 + DWORD dwCapShutter; //抓拍快门0~65535 + WORD wCapGain; //抓拍增益0~100 BYTE byRes[2]; - DWORD dwDayTimeVideoShutter; //عʱֵ - WORD wDayTimeVideoGain; //ֵ - WORD wNightVideoGain; //ֵ - DWORD wNightVideoShutter; //عʱֵ + DWORD dwDayTimeVideoShutter; //白天曝光时间最大值 + WORD wDayTimeVideoGain; //白天增益最大值 + WORD wNightVideoGain; //晚上增益最大值 + DWORD wNightVideoShutter; //晚上曝光时间最大值 BYTE byRes1[108]; }NET_ITC_HVT_EC_PARAM, *LPNET_ITC_HVT_EC_PARAM; typedef struct tagNET_ITC_LANE_HVT_PARAM { - BYTE byLaneNO; //ij 1~255ڵӺϴ - BYTE bySignSpeed; //־٣λkm/h 0255 70 - BYTE bySpeedLimit; //ֵλkm/h 0255 80 ʵЧ - BYTE byBigCarSignSpeed;///*󳵱־٣λkm/h*/ - BYTE byBigCarSpeedLimit;/*ֵλkm/h*/ - BYTE bySpeedCapEn; //Ƿóץģ0-1- - BYTE byCaptureCount;//ץ15() - BYTE byRelatedIOOut; /*IO(ͬʱ)λʾIOڣ0λʾIO1Դƣ0-1-*/ - BYTE byFlashMode; /*˸ģʽ0-ͬʱ1-*/ - BYTE byEnableRadar; //Ƿ״٣0-1- - BYTE byChangeLaneEnable; //Υ±ץʹܣ0-رգ1- - BYTE byChangeLaneCapNo; //Υ±ץ2-3 - DWORD dwCapTarget; //ץ bit0 ʾ bit1 ʾǻ bit2 ʾ 0ʾѡ 1ʾѡ - NET_ITC_INTERVAL_PARAM struInterval; //ץļ + BYTE byLaneNO; //关联的车道号 1~255(用于叠加和上传) + BYTE bySignSpeed; //标志限速,单位km/h 0~255 70 + BYTE bySpeedLimit; //限速值,单位km/h 0~255 80 实际起效 + BYTE byBigCarSignSpeed;///*大车标志限速,单位km/h*/ + BYTE byBigCarSpeedLimit;/*大车限速值,单位km/h*/ + BYTE bySpeedCapEn; //是否启用超速抓拍,0-否,1-是 + BYTE byCaptureCount;//抓拍张数1~5(正常) + BYTE byRelatedIOOut; /*关联的IO输出口(可以同时关联多个),按位表示IO输出口,第0位表示IO输出口1,以此类推,0-不关联,1-关联*/ + BYTE byFlashMode; /*闪光灯闪烁模式,0-同时闪,1-轮流闪*/ + BYTE byEnableRadar; //是否启用雷达测速,0-否,1-是 + BYTE byChangeLaneEnable; //违章变道抓拍使能,0-关闭,1-开启 + BYTE byChangeLaneCapNo; //违章变道抓拍张数2-3 + DWORD dwCapTarget; //抓拍类型 bit0 表示机动车 bit1 表示非机动车 bit2 表示行人 0~表示不选择 1~表示选择 + NET_ITC_INTERVAL_PARAM struInterval; //抓拍间隔参数 BYTE byRes3[24]; - NET_ITC_LANE_LOGIC_PARAM struLane; //ԣbyUseageTypebyCarDriveDirect - NET_ITC_LINE struLeftLaneLine; //󳵵ߣΪߡʵߡߺ˫ - NET_ITC_LINE struRightLaneLine; //ҳߣΪߡʵߡߺ˫ - NET_ITC_POLYGON struPlateRecog; //ʶ - NET_ITC_POLYGON struTraceArea; //Ƶ - NET_VCA_LINE struForwardTrigLine; //򴥷ߣһ߶ΣĶ˵λãĿǰֻ֧ˮƽãӿڰ߶ε˵㱣档һΪѴλã - NET_VCA_LINE struBackwardTrigLine; //򴥷ߣһ߶ΣĶ˵λãĿǰֻ֧ˮƽãӿڰ߶ε˵㱣棨һΪѴλã - NET_VCA_LINE struLeftTrigLine; //ߴߣһ߶ΣĶ˵λãĿǰֱִֻ֧ãӿڰ߶ε˵㱣棨һΪ߽복Ѵλã - NET_VCA_LINE struRightTrigLine; //ұߴߣһ߶ΣĶ˵λãĿǰֱִֻ֧ãӿڰ߶ε˵㱣棨һΪұ߽복Ѵλã + NET_ITC_LANE_LOGIC_PARAM struLane; //车道属性,用byUseageType和byCarDriveDirect + NET_ITC_LINE struLeftLaneLine; //左车道线,线类型为虚线、实线、单黄线和双黄线 + NET_ITC_LINE struRightLaneLine; //右车道线,线类型为虚线、实线、单黄线和双黄线 + NET_ITC_POLYGON struPlateRecog; //牌识区域参数 + NET_ITC_POLYGON struTraceArea; //视频触发焦点区域 + NET_VCA_LINE struForwardTrigLine; //正向触发线:一条线段,关心端点位置,目前只支持水平配置,接口按线段的两个端点保存。(一般配置为正向车辆的最佳触发位置) + NET_VCA_LINE struBackwardTrigLine; //背向触发线:一条线段,关心端点位置,目前只支持水平配置,接口按线段的两个端点保存(一般配置为背向车辆的最佳触发位置) + NET_VCA_LINE struLeftTrigLine; //左边触发线:一条线段,关心端点位置,目前只支持垂直配置,接口按线段的两个端点保存(一般配置为从左边进入车辆的最佳触发位置) + NET_VCA_LINE struRightTrigLine; //右边触发线:一条线段,关心端点位置,目前只支持垂直配置,接口按线段的两个端点保存(一般配置为从右边进入车辆的最佳触发位置) BYTE byRes4[60]; }NET_ITC_LANE_HVT_PARAM, *LPNET_ITC_LANE_HVT_PARAM; typedef struct tagNET_ITC_POST_HVT_PARAM { - BYTE byLaneNum;//ʶij1-6 - BYTE bySceneMode;//0-δ֪1-·2-С - BYTE byRoadExpBright;//·ȣƵع֮һ޻ʱݴֵƵع - BYTE byPlateExpBright;//ȣƵع֮һлͨʶ𵽳ʱݴֵƵع - NET_ITC_POLYGON struDetectArea; //Ƶ - NET_ITC_SNAPMODE_PARAM struCapMode;//ץģʽ - NET_ITC_HVT_EC_PARAM struEcParam; //عƲ - NET_ITC_LANE_HVT_PARAM struLaneParam[MAX_ITC_LANE_NUM]; // - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_DVR_GEOGLOCATION struGeogLocation; //ַλãĬ㽭 + BYTE byLaneNum;//识别的车道个数,1-6 + BYTE bySceneMode;//0-未知1-城区道路;2-小区出入口 + BYTE byRoadExpBright;//路面期望亮度(视频曝光参数调整的依据之一。在无机动车时,依据此亮度期望值,调整视频曝光参数) + BYTE byPlateExpBright;//车牌期望亮度(视频曝光参数调整的依据之一。在有机动车通过并识别到车牌时,依据此亮度期望值,对视频曝光参数调整) + NET_ITC_POLYGON struDetectArea; //视频检测区域 + NET_ITC_SNAPMODE_PARAM struCapMode;//抓拍模式 + NET_ITC_HVT_EC_PARAM struEcParam; //曝光控制参数 + NET_ITC_LANE_HVT_PARAM struLaneParam[MAX_ITC_LANE_NUM]; //单车道属性 + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_DVR_GEOGLOCATION struGeogLocation; //地址位置(默认浙江) BYTE byRes[324]; }NET_ITC_POST_HVT_PARAM, *LPNET_ITC_POST_HVT_PARAM; -/*************************MPRģʽ begin 2013-12-07****************/ +/*************************MPR触发模式 begin 2013-12-07****************/ typedef struct tagNET_ITC_LANE_MPR_PARAM { BYTE byLaneNO; @@ -30571,22 +30571,22 @@ typedef struct tagNET_ITC_LANE_MPR_PARAM BYTE uLen[4]; struct { - BYTE byIONo;//IO[1, byIoInNum+1] С1ʼֵݽӿNET_DVR_SNAP_ABILITYֶbyIoInNum - BYTE byTriggerType;//0-½أ1- + BYTE byIONo;//IO号[1, byIoInNum+1] 最小从1开始,最大值根据接口能力返回NET_DVR_SNAP_ABILITY的字段byIoInNum + BYTE byTriggerType;//0-下降沿,1-上升沿 BYTE byRes1[2]; - }struIO;//IOģʽЧ + }struIO;//IO模式下生效 struct { - BYTE byRelateChan;//ͨ[1,16] + BYTE byRelateChan;//关联车检器通道号[1,16] BYTE byRes2[3]; }struRS485; }uTssParamInfo; - BYTE byCarDriveDirect; //ʻ ITC_LANE_CAR_DRIVE_DIRECT + BYTE byCarDriveDirect; //车辆行驶方向 ITC_LANE_CAR_DRIVE_DIRECT BYTE byRes[58]; - NET_ITC_LINE struLaneLine;// - NET_ITC_POLYGON struPlateRecog;//ʶ - //ͣοITC_RELA_LANE_DIRECTION_TYPEtypedef struct tagNET_ITS_PICTURE_INFO - //òΪŶӦȷΨһԡ + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_POLYGON struPlateRecog;//牌识区域 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPEtypedef struct tagNET_ITS_PICTURE_INFO + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; BYTE byRes1[255]; }NET_ITC_LANE_MPR_PARAM,*LPNET_ITC_LANE_MPR_PARAM; @@ -30595,60 +30595,60 @@ typedef struct tagNET_ITC_POST_MPR_PARAM { BYTE byEnable; BYTE byLaneNum; - BYTE bySourceType;//0-MPRƵ,1-IOظȦ,2-RS485Ĵź - BYTE byPicUploadType;//ͼƬϴͣ0~ȫϴ1-ϴ2-ϴ - BYTE byRoadType;//ģʽѡ 0-ڣ1-е·2-Զ壬3-룬4-, 5-ΰ(ģʽ¿Լ⳵Ƚϻûгߵij) + BYTE bySourceType;//0-MPR触发(视频触发),1-关联IO触发(地感线圈),2-关联RS485的触发信号 + BYTE byPicUploadType;//图片上传类型,0~全部上传,1-正向上传,2-背向上传 + BYTE byRoadType;//模式选择 0-出入口,1-城市道路,2-自定义,3-报警输入,4-卡口, 5-治安布防(该模式下可以检测车辆比较混乱且没有车道线的场景) BYTE byRes2; - WORD wCustomDelayTime;//Զץʱʱ䣨byRoadTypeΪ "Զ"ʱЧΧ[0,15000]ms + WORD wCustomDelayTime;//自定义抓拍延时时间(在byRoadType为 "自定义"的时候生效),范围在[0,15000]ms BYTE byRes[56]; - NET_ITC_LINE struLaneBoundaryLine;//߽ߣ߽߳ߣ - NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//ʶ 40 + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最左边车道的左边界线) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 40 NET_ITC_LANE_MPR_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; - char szSceneName[NAME_LEN/*32*/]; // - NET_VCA_LINE struSnapLine;//ץߣļ跽ʽΪװЧ4.5NET_DVR_CAMERA_SETUPCFGṹbyErectMethodֶΪ1ʱ + char szSceneName[NAME_LEN/*32*/]; //场景名称 + NET_VCA_LINE struSnapLine;//抓拍线,在相机的架设方式为侧装,配置这个参数生效(即4.5中NET_DVR_CAMERA_SETUPCFG结构体中byErectMethod字段为1时 ) BYTE byRes1[392]; }NET_ITC_POST_MPR_PARAM,*LPNET_ITC_POST_MPR_PARAM; -/*************************MPRģʽ end 2013-12-07****************/ +/*************************MPR触发模式 end 2013-12-07****************/ typedef struct tagNET_DVR_VIA_LANE_PARAM { - BYTE byLaneNO; // - BYTE byRes[63]; // - NET_ITC_LANE_LOGIC_PARAM struLogicParam; //Բ - NET_ITC_LINE struLaneLine;// - NET_ITC_POLYGON struPlateRecog;//ʶ - BYTE byRes1[300]; // + BYTE byLaneNO; //关联车道号 + BYTE byRes[63]; //保留 + NET_ITC_LANE_LOGIC_PARAM struLogicParam; //车道属性参数 + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_POLYGON struPlateRecog;//牌识区域 + BYTE byRes1[300]; //保留 } NET_DVR_VIA_LANE_PARAM,*LPNET_DVR_VIA_LANE_PARAM; typedef struct tagNET_DVR_VIA_VTCOIL_PARAM { - BYTE byEnable; //ʹ 0- 1- - BYTE byLaneNum; // - BYTE byRes[62]; // - NET_ITC_LINE struLaneBoundaryLine;//߽ߣ߽߳ߣ + BYTE byEnable; //使能 0-不开启 1-开启 + BYTE byLaneNum; //车道数 + BYTE byRes[62]; //保留 + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最左边车道的左边界线) NET_DVR_VIA_LANE_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; - NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//ʶ - BYTE byRes1[624];// + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 + BYTE byRes1[624];//保留 }NET_DVR_VIA_VTCOIL_PARAM,*LPNET_DVR_VIA_VTCOIL_PARAM; -//ӿ +//配置条件接口 typedef struct tagNET_DVR_TRIGGER_COND { - DWORD dwSize; //ṹС - DWORD dwChannel; //ͨ - DWORD dwTriggerMode;//ʽο ITC_TRIGGERMODE_TYPE - BYTE byDetSceneID;//ⳡ[1,4], IPCĬ0 - BYTE byRes[63]; // + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + DWORD dwTriggerMode;//触发方式,参考 ITC_TRIGGERMODE_TYPE + BYTE byDetSceneID;//检测场景号[1,4], IPC默认是0 + BYTE byRes[63]; //保留留 }NET_DVR_TRIGGER_COND,*LPNET_DVR_TRIGGER_COND; typedef struct tagNET_ITC_LANE_IMT_PARAM { - BYTE byLaneNO;//ӳ - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + BYTE byLaneNO;//叠加车道号 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; BYTE byRes[146]; - NET_ITC_LINE struLaneLine;// + NET_ITC_LINE struLaneLine;//车道线 BYTE byRes1[256]; }NET_ITC_LANE_IMT_PARAM,*LPNET_ITC_LANE_IMT_PARAM; @@ -30656,10 +30656,10 @@ typedef struct tagNET_ITC_POST_IMT_PARAM { BYTE byEnable; BYTE byLaneNum; - BYTE bySnapMode; //ץͣ0~1~ + BYTE bySnapMode; //抓拍类型;0~机动车,1~机非人 BYTE byRes[61]; - NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//ʶ - NET_ITC_LINE struLaneBoundaryLine;//߽ߣұ߳ı߽ߣ + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最右边车道的边界线) NET_ITC_LANE_IMT_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; BYTE byRes1[1584]; }NET_ITC_POST_IMT_PARAM,*LPNET_ITC_POST_IMT_PARAM; @@ -30672,24 +30672,24 @@ typedef struct tagNET_ITC_LANE_PRS_PARAM BYTE uLen[4]; struct { - BYTE byIONo;//IO[1,4] - BYTE byTriggerType;//0-½أ1- + BYTE byIONo;//IO号[1,4] + BYTE byTriggerType;//0-下降沿,1-上升沿 BYTE byRes1[2]; - }struIO;//IOģʽЧ + }struIO;//IO模式下生效 struct { - BYTE byRelateChan;//ͨ[1,16] + BYTE byRelateChan;//关联车检器通道号[1,16] BYTE byRes2[3]; }struRS485; }uTssParamInfo; BYTE byRes[59]; - NET_ITC_LINE struLaneLine;// - NET_ITC_POLYGON struPlateRecog;//ʶ - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_POLYGON struPlateRecog;//牌识区域 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; BYTE byRes2[3]; - NET_ITC_LINE struTrigLine;// + NET_ITC_LINE struTrigLine;//触发线 BYTE byRes1[228]; }NET_ITC_LANE_PRS_PARAM,*LPNET_ITC_LANE_PRS_PARAM; @@ -30698,14 +30698,14 @@ typedef struct tagNET_ITC_POST_PRS_PARAM { BYTE byEnable; BYTE byLaneNum; - BYTE bySourceType;//0-Ƶ,1-IOظȦ,2-RS485Ĵź - BYTE bySnapMode;//0-ȫͼ1-ȫͼ+д - BYTE byCapMode;//bySourceTypeΪ0Ƶʱʹã0-Ƶģʽ1-ģʽ - BYTE byNoPlatCarCap;//Ƿ޳ץ 0- 1- - BYTE bySceneMode;//ģʽ:0-ͨڳ1-շվģʽ(ͣʱϳ)2-ͣڳ(ҹϰ) + BYTE bySourceType;//0-视频检测,1-关联IO触发(地感线圈),2-关联RS485的触发信号 + BYTE bySnapMode;//0-全景图,1-全景图+特写 + BYTE byCapMode;//bySourceType为0视频检测时使用,0-频闪模式;1-爆闪模式 + BYTE byNoPlatCarCap;//是否启用无车牌抓拍 0-不启用 1-启用 + BYTE bySceneMode;//场景模式:0-普通出入口场景、1-收费站模式场景(车辆停留时间较长)、2-地下停车场出入口场景(白天黑夜均较暗) BYTE byRes[57]; - NET_ITC_LINE struLaneBoundaryLine;//߽ߣ߽߳ߣ - NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//ʶ 40 + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最左边车道的左边界线) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 40 NET_ITC_LANE_PRS_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; BYTE byRes1[440]; }NET_ITC_POST_PRS_PARAM,*LPNET_ITC_POST_PRS_PARAM; @@ -30713,161 +30713,161 @@ typedef struct tagNET_ITC_POST_PRS_PARAM typedef struct tagNET_IPC_LANE_HVT_PARAM { BYTE byLaneNO; - BYTE byCarDriveDirect; //ʻ ITC_LANE_CAR_DRIVE_DIRECT + BYTE byCarDriveDirect; //车辆行驶方向 ITC_LANE_CAR_DRIVE_DIRECT BYTE byRes[62]; - NET_ITC_LINE struLaneLine;// - NET_ITC_POLYGON struPlateRecog;//ʶ + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_POLYGON struPlateRecog;//牌识区域 BYTE byRes1[256]; } NET_IPC_LANE_HVT_PARAM,*LPNET_IPC_LANE_HVT_PARAM; typedef struct _NET_ITC_PARKING_DETECTION_ { - BYTE byEnable; //Ƿã0-ã1- - BYTE byRes; //ֽ - WORD wDuration;//ʱλs - WORD wAlarmIntervalTime;//ϴʱλs - BYTE byRes1[58]; //ֽ + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byRes; //保留字节 + WORD wDuration;//检测时间间隔,单位:s + WORD wAlarmIntervalTime;//上传时间间隔,单位:s + BYTE byRes1[58]; //保留字节 }NET_ITC_PARKING_DETECTION, *LPNET_ITC_PARKING_DETECTION; typedef struct tagNET_IPC_POST_HVT_PARAM { BYTE byEnable; BYTE byLaneNum; - BYTE byEnhancedMode; //ǿģʽ0-ã1- - BYTE byPicRecognition; //ͼƬʶ0-ã1- + BYTE byEnhancedMode; //增强模式,0-不启用,1-启用 + BYTE byPicRecognition; //车辆报警图片二次识别,0-不启用,1-启用 BYTE byRes[60]; - NET_ITC_LINE struLaneBoundaryLine;//߽ߣ߽߳ߣ - NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//ʶ 40 + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最左边车道的左边界线) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 40 NET_IPC_LANE_HVT_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; - char szSceneName[NAME_LEN/*32*/]; // - NET_VCA_LINE struSnapLine;//ץߣץļ跽ʽΪװЧ4.5NET_DVR_CAMERA_SETUPCFGṹbyErectMethodֶΪ1ʱ - NET_ITC_PARKING_DETECTION struParkingDetection; //ͣ + char szSceneName[NAME_LEN/*32*/]; //场景名称 + NET_VCA_LINE struSnapLine;//抓拍线,抓在相机的架设方式为侧装,配置这个参数生效(即4.5中NET_DVR_CAMERA_SETUPCFG结构体中byErectMethod字段为1时 ) + NET_ITC_PARKING_DETECTION struParkingDetection; //停车检测参数 BYTE byRes1[328]; } NET_IPC_POST_HVT_PARAM,*LPNET_IPC_POST_HVT_PARAM; -//ץĻ4.0 +//抓拍机4.0新增 typedef struct tagNET_ITC_LANE_HVT_PARAM_V50 { - BYTE byLaneNO; //ij1255(ڵӺϴ) - BYTE byFlashMode; //˸ģʽ0-ͬʱ1- - BYTE bySignSpeed; //С־޸٣λkm/h - BYTE bySpeedLimit; //С޸ֵλkm/h - BYTE bySignLowSpeed; //С־޵٣λkm/h - BYTE byLowSpeedLimit; //С޵ֵλkm/h - BYTE byBigCarSignSpeed; //󳵱־޸٣λkm/h½棩 - BYTE byBigCarSpeedLimit; //޸ֵλkm/h½棩 - BYTE byBigCarSignLowSpeed; //󳵱־޵٣λkm/h - BYTE byBigCarLowSpeedLimit; //޵ֵλkm/h - BYTE bySnapTimes; //ץ1~3 - BYTE byDriveLineSnapTime;// ѹץ 1~3 - BYTE byHighSpeedSnapTime;// ץ1~3 - BYTE byLowSpeedSnapTime;// ץ1~3 - BYTE byBanSnapTime;// Υץ 1~3 - BYTE byReverseSnapTime;//ץ 1~3 - BYTE byRelatedDriveWay; //ţƥ䳵 - BYTE byLaneType; //ͣ0-δá1-ٹ·2-п·0xff-· - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪbyRelatedDriveWayӦȷΨһԡ + BYTE byLaneNO; //关联的车道号1~255(用于叠加和上传) + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE bySignSpeed; //小车标志限高速,单位km/h + BYTE bySpeedLimit; //小车限高速值,单位km/h + BYTE bySignLowSpeed; //小车标志限底速,单位km/h + BYTE byLowSpeedLimit; //小车限底速值,单位km/h + BYTE byBigCarSignSpeed; //大车标志限高速,单位km/h(新交规) + BYTE byBigCarSpeedLimit; //大车限高速值,单位km/h(新交规) + BYTE byBigCarSignLowSpeed; //大车标志限底速,单位km/h + BYTE byBigCarLowSpeedLimit; //大车限底速值,单位km/h + BYTE bySnapTimes; //卡口抓拍张数,1~3 + BYTE byDriveLineSnapTime;// 压线抓拍张数 1~3 + BYTE byHighSpeedSnapTime;// 超高速抓拍张数1~3 + BYTE byLowSpeedSnapTime;// 超低速抓拍张数1~3 + BYTE byBanSnapTime;// 违反禁令抓拍张数 1~3 + BYTE byReverseSnapTime;//逆行抓拍张数 1~3 + BYTE byRelatedDriveWay; //关联车道号,用于匹配车检器 + BYTE byLaneType; //车道类型,0-未配置、1-高速公路、2-城市快速路、0xff-其他道路 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号byRelatedDriveWay对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; BYTE byRes1[27]; - BYTE byChangeLaneEnable; //Υ±ץʹܣ0-رգ1- - BYTE byChangeLaneCapNo; //Υ±ץ2-3 - //ĿǰʹõһģԺܻչΪ೵ֱ - //, λʾ,0-,1-òο ITC_VIOLATION_DETECT_TYPE + BYTE byChangeLaneEnable; //违章变道抓拍使能,0-关闭,1-开启 + BYTE byChangeLaneCapNo; //违章变道抓拍张数2-3 + //目前仅使用第一个车道的,以后可能会扩展为多车道分别配置 + //类型, 按位表示,0-不启用,1-启用参考 ITC_VIOLATION_DETECT_TYPE DWORD dwVioDetectType; - DWORD dwRelatedIOOut; //IO(ͬʱ)λʾIOڣ0λʾIO1Դƣ0-1- - NET_ITC_LINE struTrigLine; //ߣĿǰʹõһģԺܻչΪ೵ֱ - NET_ITC_LINE struLineLeft; //󳵵 - NET_ITC_POLYGON struPlateRecog; //ʶ - NET_ITC_LANE_LOGIC_PARAM struLane; //ԣbyUseageTypebyCarDriveDirect - NET_ITC_INTERVAL_PARAM struInterval;//ץļ20byte + DWORD dwRelatedIOOut; //关联的IO输出口(可以同时关联多个),按位表示IO输出口,第0位表示IO输出口1,以此类推,0-不关联,1-关联 + NET_ITC_LINE struTrigLine; //触发线,目前仅使用第一个车道的,以后可能会扩展为多车道分别配置 + NET_ITC_LINE struLineLeft; //左车道线 + NET_ITC_POLYGON struPlateRecog; //牌识区域 + NET_ITC_LANE_LOGIC_PARAM struLane; //车道属性,用byUseageType和byCarDriveDirect + NET_ITC_INTERVAL_PARAM struInterval;//抓拍间隔参数(20byte) BYTE byRes2[280]; }NET_ITC_LANE_HVT_PARAM_V50, *LPNET_ITC_LANE_HVT_PARAM_V50; typedef struct tagNET_ITC_POST_HVT_PARAM_V50 { - BYTE byLaneNum; //ʶij1-6 - BYTE byCapType; //ץͣ0-ǡˣĬϣ1- - BYTE byCapMode; //ץķʽ0-Ƶ֡1-ץģ2-ģʽ - BYTE bySecneMode; //ģʽ0-·Ĭϣ1-Сڣ2-ٹ· - BYTE bySpeedMode; //ģʽ0-޲٣1-״٣2-Ƶ - BYTE byLineRuleEffect; //Ч,ÿһλһ,0-Ч;1-Чbit0-󴥷;bit1-Ҵ;bit2-Ƶ + BYTE byLaneNum; //识别的车道个数,1-6 + BYTE byCapType; //抓拍类型,0-机、非、人(默认),1-机动车 + BYTE byCapMode; //抓拍方式,0-视频抽帧,1-打断抓拍,2-混合模式, + BYTE bySecneMode; //场景模式,0-城区道路(默认),1-小区出入口,2-高速公路 + BYTE bySpeedMode; //测速模式,0-无测速,1-雷达测速,2-视频测速 + BYTE byLineRuleEffect; //触发规则线有效性,每一位代表一条触发线,0-无效;1-有效。bit0-左触发线;bit1-右触发线;bit2-视频检测区域 BYTE byRes1[78]; - NET_ITC_LINE struLeftTrigLine; //󴥷(һֱ) - NET_ITC_LINE struRigtTrigLine; //Ҵ(һֱ) - NET_ITC_LINE struLaneBoundaryLine; //߽ߣұ߳ҳߣ - NET_ITC_POLYGON struDetectArea; //Ƶ - NET_DVR_GEOGLOCATION struGeogLocation; //λãĬ㽭ʡʱ - NET_ITC_LANE_HVT_PARAM_V50 struLaneParam[MAX_ITC_LANE_NUM/*6*/]; // - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ + NET_ITC_LINE struLeftTrigLine; //左触发线(一条垂直线) + NET_ITC_LINE struRigtTrigLine; //右触发线(一条垂直线) + NET_ITC_LINE struLaneBoundaryLine; //车道边界线(最右边车道的右车道线) + NET_ITC_POLYGON struDetectArea; //视频检测区域 + NET_DVR_GEOGLOCATION struGeogLocation; //地理位置(默认浙江省)计算时区 + NET_ITC_LANE_HVT_PARAM_V50 struLaneParam[MAX_ITC_LANE_NUM/*6*/]; //单车道属性 + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 BYTE byRes2[260]; } NET_ITC_POST_HVT_PARAM_V50, *LPNET_ITC_POST_HVT_PARAM_V50; -// +//车道参数 typedef struct tagNET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM { - BYTE byRelatedDriveWay;//ij - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + BYTE byRelatedDriveWay;//关联的车道号 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; - BYTE byPedestriansNum;//ֵΧ1-100Ĭֵ1 - BYTE byVehicleSpeed;//ٶֵΧ0-100Ĭֵ0 - DWORD dwVehicleInterval; //ֵΧ0-65536Ĭֵ0 - BYTE byPedesDetRule; //˼򣻴˼ʻ 0~ 1~ҡ + BYTE byPedestriansNum;//行人数量阈值:范围1-100,默认值1 + BYTE byVehicleSpeed;//车辆速度阈值:范围0-100,默认值0 + DWORD dwVehicleInterval; //跟车检测阈值:范围0-65536,默认值0 + BYTE byPedesDetRule; //行人检测规则;代表行人检测区域中行人行驶方向; 0~向左, 1~向右。 BYTE byRes[3]; - NET_ITC_LINE struLaneLine;// - NET_ITC_LINE struStopLine;//ֹͣ - NET_ITC_POLYGON struPlateRecog; //ʶ + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_LINE struStopLine;//停止线 + NET_ITC_POLYGON struPlateRecog; //牌识区域 BYTE byRes1[280]; } NET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM, *LPNET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM; -//˲ +//不礼让行人参数 typedef struct tagNET_ITC_NOCOMITY_PEDESTRIAN_PARAM { - BYTE byEnable; //ʹ - BYTE byLaneNum;// Χ1-3Ĭֵ3 + BYTE byEnable; //使能 + BYTE byLaneNum;// 关联车道总数:范围1-3,默认值3 BYTE byRes[74]; - NET_ITC_LINE struLaneBoundaryLine;//ұ߽ - NET_ITC_LINE struTriggerLine;//˴ - NET_ITC_POLYGON struPedesDetRecog;//˼ - NET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; // - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ + NET_ITC_LINE struLaneBoundaryLine;//车道右边界线 + NET_ITC_LINE struTriggerLine;//不礼让行人触发线 + NET_ITC_POLYGON struPedesDetRecog;//行人检测区域 + NET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; //车道参数 + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 BYTE byRes1[400]; }NET_ITC_NOCOMITY_PEDESTRIAN_PARAM, *LPNET_ITC_NOCOMITY_PEDESTRIAN_PARAM; -//IOźŵƲ +//单个IO接入信号灯参数 typedef struct tagNET_ITC_SINGLE_IO_LIGHT_PARAM { - BYTE byLightType; //ͨƵ,0-ת,1-ֱе,2-ת - BYTE byRelatedIO; //IOں - BYTE byRedLightState; //Ƶƽ״̬0-ߵƽƣ1-͵ƽ + BYTE byLightType; //交通灯导向类型,0-左转灯,1-直行灯,2-右转灯 + BYTE byRelatedIO; //关联的IO口号 + BYTE byRedLightState; //红灯电平状态,0-高电平红灯,1-低电平红灯 BYTE byRes[17]; }NET_ITC_SINGLE_IO_LIGHT_PARAM, *LPNET_ITC_SINGLE_IO_LIGHT_PARAM; -//IOźŵƲ +//IO接入信号灯参数 typedef struct tagNET_ITC_IO_LIGHT_PARAM { - NET_ITC_SINGLE_IO_LIGHT_PARAM struIOLight[MAX_LIGHT_NUM]; //IOźŵƲ + NET_ITC_SINGLE_IO_LIGHT_PARAM struIOLight[MAX_LIGHT_NUM]; //单个IO接入信号灯参数 BYTE byRes[8]; }NET_ITC_IO_LIGHT_PARAM, *LPNET_ITC_IO_LIGHT_PARAM; -//485źŵƲ +//单个485接入信号灯参数 typedef struct tagNET_ITC_SINGLE_RS485_LIGHT_PARAM { - BYTE byLightType; //ͨƵͣ0-תƣ1-ֱеƣ2-ת - BYTE byRelatedLightChan; //ĺ̵Ƽͨ - BYTE byInputLight; //źŵͣ0-Ӻƣ1-̵ - BYTE byRelatedYLightChan; //ĻƵƼͨ + BYTE byLightType; //交通灯导向类型,0-左转灯,1-直行灯,2-右转灯 + BYTE byRelatedLightChan; //关联的红绿灯检测器通道号 + BYTE byInputLight; //接入的信号灯类型,0-接红灯,1-接绿灯 + BYTE byRelatedYLightChan; //关联的黄灯检测器通道号 BYTE byRes[16]; }NET_ITC_SINGLE_RS485_LIGHT_PARAM, *LPNET_ITC_SINGLE_RS485_LIGHT_PARAM; -//485źŵƲ +//485接入信号灯参数 typedef struct tagNET_ITC_RS485_LIGHT_PARAM { - NET_ITC_SINGLE_RS485_LIGHT_PARAM struRS485Light[MAX_LIGHT_NUM]; //485źŵƲ + NET_ITC_SINGLE_RS485_LIGHT_PARAM struRS485Light[MAX_LIGHT_NUM]; //单个485接入信号灯参数 BYTE byRes[8]; }NET_ITC_RS485_LIGHT_PARAM, *LPNET_ITC_RS485_LIGHT_PARAM; @@ -30879,71 +30879,71 @@ typedef struct tagNET_POS_PARAM WORD wBottom; }NET_POS_PARAM, *LPNET_POS_PARAM; -//Ƶ⽻ͨźŵƲṹ +//单组视频检测交通信号灯参数结构 typedef struct tagNET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM { - BYTE byLightNum; //ͨƸ - BYTE byStraightLight; //Ƿֱб־ƣ0- 1- - BYTE byLeftLight; //Ƿת־ƣ0-1- - BYTE byRightLight; //Ƿת־ƣ0-1- - BYTE byRedLight;//Ƿкƣ0-1- - BYTE byGreenLight; //Ƿ̵ƣ0-1- - BYTE byYellowLight; //ǷлƵƣ0-1- - BYTE byYellowLightTime;//ȡֵΧ010sITC3.7Ver - NET_POS_PARAM struLightRect; //ͨ + BYTE byLightNum; //交通灯个数 + BYTE byStraightLight; //是否有直行标志灯,0-否 ,1-是 + BYTE byLeftLight; //是否有左转标志灯,0-否,1-是 + BYTE byRightLight; //是否有右转标志灯,0-否,1-是 + BYTE byRedLight;//是否有红灯,0-否,1-是 + BYTE byGreenLight; //是否有绿灯,0-否,1-是 + BYTE byYellowLight; //是否有黄灯,0-否,1-是 + BYTE byYellowLightTime;//取值范围(0~10s)(ITC3.7Ver) + NET_POS_PARAM struLightRect; //交通灯区域 BYTE byRes[24]; }NET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM, *LPNET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM; -//Ƶ⽻ͨźŵƲṹ(12⣬488ֽ) +//视频检测交通信号灯参数结构(最大可有12个区域检测,488字节) typedef struct tagNET_ITC_VIDEO_DETECT_LIGHT_PARAM { - NET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM struTrafficLight[MAX_VIDEO_DETECT_LIGHT_NUM]; //ƵźŵƲ + NET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM struTrafficLight[MAX_VIDEO_DETECT_LIGHT_NUM]; //单个视频检测信号灯参数 BYTE byRes[8]; }NET_ITC_VIDEO_DETECT_LIGHT_PARAM, *LPNET_ITC_VIDEO_DETECT_LIGHT_PARAM; -//ͨźŵƽ +//交通信号灯接入参数 typedef union tagNET_ITC_LIGHT_ACCESSPARAM_UNION { DWORD uLen[122]; - NET_ITC_IO_LIGHT_PARAM struIOLight; //IOźŵƲ - NET_ITC_RS485_LIGHT_PARAM struRS485Light; //485źŵƲ - NET_ITC_VIDEO_DETECT_LIGHT_PARAM struVideoDelectLight; //ƵźŵƲ + NET_ITC_IO_LIGHT_PARAM struIOLight; //IO接入信号灯参数 + NET_ITC_RS485_LIGHT_PARAM struRS485Light; //485接入信号灯参数 + NET_ITC_VIDEO_DETECT_LIGHT_PARAM struVideoDelectLight; //视频检测信号灯参数 }NET_ITC_LIGHT_ACCESSPARAM_UNION, *LPNET_ITC_LIGHT_ACCESSPARAM_UNION; -//ͨźŵƲṹ +//交通信号灯参数结构 typedef struct tagNET_ITC_TRAFFIC_LIGHT_PARAM { - BYTE bySource; //ͨźŵƽԴ0-IO룬1-RS485 + BYTE bySource; //交通信号灯接入源,0-IO接入,1-RS485接入 BYTE byRes1[3]; - NET_ITC_LIGHT_ACCESSPARAM_UNION struLightAccess;//źŵƽ + NET_ITC_LIGHT_ACCESSPARAM_UNION struLightAccess;//信号灯接入参数 BYTE byRes[32]; }NET_ITC_TRAFFIC_LIGHT_PARAM, *LPNET_ITC_TRAFFIC_LIGHT_PARAM; -//Υ߲ṹ +//违规检测线参数结构 typedef struct tagNET_ITC_VIOLATION_DETECT_LINE { - NET_ITC_LINE struLaneLine; //߲ - NET_ITC_LINE struStopLine; //ֹ߲ͣ - NET_ITC_LINE struRedLightLine; //ƴ߲ - NET_ITC_LINE struCancelLine; //ֱдλȡ - NET_ITC_LINE struWaitLine; //ֹ߲ͣ + NET_ITC_LINE struLaneLine; //车道线参数 + NET_ITC_LINE struStopLine; //停止线参数 + NET_ITC_LINE struRedLightLine; //闯红灯触发线参数 + NET_ITC_LINE struCancelLine; //直行触发位置取消线 + NET_ITC_LINE struWaitLine; //待行区停止线参数 NET_ITC_LINE struRes[8]; }NET_ITC_VIOLATION_DETECT_LINE, *LPNET_ITC_VIOLATION_DETECT_LINE; -//˴Ʋ +//行人闯红灯参数 typedef struct tagNET_ITC_REDLIGHT_PEDESTRIAN_PARAM { - BYTE byEnable; //ʹ - BYTE bySnapNumTimes; //ץ1-3Ĭ3 - BYTE byPedesDir; //˷0~1~2~˫ - BYTE byDelayTime; //ʱʱ1-5s - BYTE byStackTargetEnble;//Ŀ򣨼ץĵһͼƬϿסƵˣ0~ӣ1~ - BYTE byCalibRecogCtrl;//궨ƣ0~Ƴ궨1~ӱ궨 + BYTE byEnable; //使能 + BYTE bySnapNumTimes; //抓拍张数:1-3,默认3张 + BYTE byPedesDir; //行人方向:0~正向,1~背向,2~双向 + BYTE byDelayTime; //延时时间1-5s + BYTE byStackTargetEnble;//叠加目标框(即抓拍第一张图片上框住闯红灯的行人),0~不叠加,1~叠加 + BYTE byCalibRecogCtrl;//标定区域控制;0~移除标定区域,1~添加标定区域 BYTE byRes1[2]; - NET_ITC_TRAFFIC_LIGHT_PARAM struTrafficLight; //ͨźŵƲ - NET_ITC_LINE struStopLine;//ֹͣ - NET_ITC_POLYGON struCalibRecog[MAX_CALIB_RECOG_NUM/*2*/];//궨 + NET_ITC_TRAFFIC_LIGHT_PARAM struTrafficLight; //交通信号灯参数 + NET_ITC_LINE struStopLine;//停止线 + NET_ITC_POLYGON struCalibRecog[MAX_CALIB_RECOG_NUM/*2*/];//标定区域 BYTE byRes[440]; }NET_ITC_REDLIGHT_PEDESTRIAN_PARAM, *LPNET_ITC_REDLIGHT_PEDESTRIAN_PARAM; @@ -30951,408 +30951,408 @@ typedef struct tagNET_ITC_REDLIGHT_PEDESTRIAN_PARAM typedef struct tagNET_ITC_POST_MOBILE_PARAM { BYTE byEnable; - BYTE bySceneMode;//ģʽ 0-ٹ· 1-е· - /*ץ - bit0-,bit1-ռ,bit2-ѹӲ· + BYTE bySceneMode;//场景模式 0-高速公路 1-城市道路 + /*抓拍类型 + bit0-卡口,bit1-大车占道,bit2-压硬路肩 */ - WORD wExpressWayCapType;//ٹ· - /*ץ - bit0-,bit1-ռ,bit2-ռרó + WORD wExpressWayCapType;//高速公路 + /*抓拍类型 + bit0-卡口,bit1-机占非,bit2-占用专用车道 */ - WORD wUrbanRoadCapType;//е· - BYTE byCapNum;//ץ [2,3] - BYTE byRecordEnable;//Υ¼ʹ 0-رգ1- - DWORD dwPreRecordTime;//¼Ԥ¼ʱ(s) - DWORD dwOverRecordTime;//¼ʱʱ(s) - NET_ITC_LANE_LOGIC_PARAM struLane; // - NET_ITC_POLYGON struPolygon[MAX_MOBILE_POLYGON_NUM/*3*/]; //ʶ - NET_ITC_VIOLATION_DETECT_LINE struLine[MAX_MOBILE_DETECTLINE_NUM/*3*/]; //Υ - NET_ITC_LINE struLaneBoundaryLine; //߽ߣұ߳ҳߣ - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_INTERVAL_PARAM struInterval;//ץļ20byte + WORD wUrbanRoadCapType;//城市道路 + BYTE byCapNum;//抓拍张数 [2,3] + BYTE byRecordEnable;//违章录像使能 0-关闭,1-开启 + DWORD dwPreRecordTime;//录像预录时间(s) + DWORD dwOverRecordTime;//录像超时时间(s) + NET_ITC_LANE_LOGIC_PARAM struLane; //车道属性 + NET_ITC_POLYGON struPolygon[MAX_MOBILE_POLYGON_NUM/*3*/]; //牌识区域参数 + NET_ITC_VIOLATION_DETECT_LINE struLine[MAX_MOBILE_DETECTLINE_NUM/*3*/]; //违规检测线 + NET_ITC_LINE struLaneBoundaryLine; //车道边界线(最右边车道的右车道线) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_INTERVAL_PARAM struInterval;//抓拍间隔参数(20byte) BYTE byRes[256]; }NET_ITC_POST_MOBILE_PARAM,*LPNET_ITC_POST_MOBILE_PARAM; typedef union tagNET_ITC_TRIGGER_PARAM_UNION { - DWORD uLen[1070]; // - NET_ITC_POST_IOSPEED_PARAM struIOSpeed; //ڣIOٲ - NET_ITC_POST_SINGLEIO_PARAM struSingleIO; //ڣIO - NET_ITC_POST_RS485_PARAM struPostRs485; //ڣRS485 - NET_ITC_POST_RS485_RADAR_PARAM struPostRadar; //ڣRS485״ - NET_ITC_POST_VTCOIL_PARAM struVtCoil; //ڣȦ - NET_ITC_POST_HVT_PARAM struHvt; //ڣпڲ - NET_ITC_EPOLICE_IOTL_PARAM struIOTL; //羯IO̵Ʋ - NET_ITC_EPOLICE_RS485_PARAM struEpoliceRs485; //羯RS485 - NET_ITC_EPOLICE_RS485_PARAM struPERs485; //ʽ羯RS485 - NET_ITC_POST_MPR_PARAM struPostMpr; //֡ⴥMPR - NET_DVR_VIA_VTCOIL_PARAM struViaVtCoil; //(VIA)Ƶ - NET_ITC_POST_IMT_PARAM struPostImt;//ǻ۲ - NET_ITC_POST_PRS_PARAM struPostPrs;//Ƶⴥ - NET_IPC_POST_HVT_PARAM struIpcHvt;//(IPC) пڲ - NET_ITC_POST_HVT_PARAM_V50 struHvtV50; /*ڣпڲV50*/ - NET_ITC_POST_MOBILE_PARAM struPostMobile;// ƶͨģʽ - NET_ITC_NOCOMITY_PEDESTRIAN_PARAM struNoComityPed;//˲ - NET_ITC_REDLIGHT_PEDESTRIAN_PARAM struRedLightPed;//˴Ʋ + DWORD uLen[1070]; //参数 + NET_ITC_POST_IOSPEED_PARAM struIOSpeed; //(卡口)IO测速参数 + NET_ITC_POST_SINGLEIO_PARAM struSingleIO; //(卡口)单IO参数 + NET_ITC_POST_RS485_PARAM struPostRs485; //(卡口)RS485车检器参数 + NET_ITC_POST_RS485_RADAR_PARAM struPostRadar; //(卡口)RS485雷达参数 + NET_ITC_POST_VTCOIL_PARAM struVtCoil; //(卡口)虚拟线圈参数 + NET_ITC_POST_HVT_PARAM struHvt; //(卡口)混行卡口参数 + NET_ITC_EPOLICE_IOTL_PARAM struIOTL; //(电警)IO红绿灯参数 + NET_ITC_EPOLICE_RS485_PARAM struEpoliceRs485; //(电警)RS485车检器触发参数 + NET_ITC_EPOLICE_RS485_PARAM struPERs485; //(卡式电警)RS485车检器触发参数 + NET_ITC_POST_MPR_PARAM struPostMpr; //多帧检测触发(MPR) + NET_DVR_VIA_VTCOIL_PARAM struViaVtCoil; //(VIA)视频检测参数 + NET_ITC_POST_IMT_PARAM struPostImt;//智慧布防触发 + NET_ITC_POST_PRS_PARAM struPostPrs;//视频检测触发 + NET_IPC_POST_HVT_PARAM struIpcHvt;//(IPC) 混行卡口参数 + NET_ITC_POST_HVT_PARAM_V50 struHvtV50; /*(卡口)混行卡口参数V50*/ + NET_ITC_POST_MOBILE_PARAM struPostMobile;// 移动交通触发模式 + NET_ITC_NOCOMITY_PEDESTRIAN_PARAM struNoComityPed;//不礼让行人参数 + NET_ITC_REDLIGHT_PEDESTRIAN_PARAM struRedLightPed;//行人闯红灯参数 }NET_ITC_TRIGGER_PARAM_UNION, *LPNET_ITC_TRIGGER_PARAM_UNION; -//ṹ +//单个触发参数结构 typedef struct tagNET_ITC_SINGLE_TRIGGERCFG { - BYTE byEnable; //Ƿøôģʽ0-1- + BYTE byEnable; //是否启用该触发模式,0-否,1-是 BYTE byRes1[3]; - DWORD dwTriggerType; //ͣITC_TRIGGERMODE_TYPE - NET_ITC_TRIGGER_PARAM_UNION uTriggerParam; // + DWORD dwTriggerType; //触发类型,详见ITC_TRIGGERMODE_TYPE + NET_ITC_TRIGGER_PARAM_UNION uTriggerParam; //触发参数 BYTE byRes[64]; }NET_ITC_SINGLE_TRIGGERCFG, *LPNET_ITC_SINGLE_TRIGGERCFG; -//ṹ +//触发参数结构 typedef struct tagNET_ITC_TRIGGERCFG { - DWORD dwSize; //ṹ - NET_ITC_SINGLE_TRIGGERCFG struTriggerParam; // + DWORD dwSize; //结构长度 + NET_ITC_SINGLE_TRIGGERCFG struTriggerParam; //单个触发参数 BYTE byRes[32]; }NET_ITC_TRIGGERCFG, *LPNET_ITC_TRIGGERCFG; -//Υͺ궨 +//违规检测类型宏定义 typedef enum _ITC_VIOLATION_DETECT_TYPE_ { - ITC_VIOLATION_POST = 0x01, //ץ - ITC_VIOLATION_DRIVELINE = 0x02,//ѹץ - ITC_VIOLATION_REVERSE = 0x04,//ץ - ITC_VIOLATION_REDLIGHT = 0x08,//ץ - ITC_VIOLATION_DIRECTION = 0x10,//ʻץ - ITC_VIOLATION_INTERSECTION_CONGEST = 0x20,//·ץ - ITC_VIOLATION_NONDRIVEWAY = 0x40, //ռץ - ITC_VIOLATION_CHANGELANE = 0x80, //Υ - ITC_VIOLATION_BAN = 0x100, //Υ - ITC_VIOLATION_INTERSECTION_PARK=0x200,//Խ - ITC_VIOLATION_GREEN_PARK=0x400,//̵ͣ - ITC_VIOLATION_HIGH_SPEED = 0x800, /**/ - ITC_VIOLATION_LOW_SPEED = 0x1000, /**/ - ITC_VIOLATION_EMERGENCY = 0x2000, /*ռӦ*/ - ITC_VIOLATION_TURN_AROUND = 0x8000,/*Υͷ*/ - ITC_VIOLATION_CONGESTION = 0x10000 /*ӵ*/ + ITC_VIOLATION_POST = 0x01, //卡口抓拍 + ITC_VIOLATION_DRIVELINE = 0x02,//压车道线抓拍 + ITC_VIOLATION_REVERSE = 0x04,//逆行抓拍 + ITC_VIOLATION_REDLIGHT = 0x08,//闯红灯抓拍 + ITC_VIOLATION_DIRECTION = 0x10,//不按导向行驶抓拍 + ITC_VIOLATION_INTERSECTION_CONGEST = 0x20,//路口滞留抓拍 + ITC_VIOLATION_NONDRIVEWAY = 0x40, //机占非抓拍 + ITC_VIOLATION_CHANGELANE = 0x80, //违法变道 + ITC_VIOLATION_BAN = 0x100, //违法禁令 + ITC_VIOLATION_INTERSECTION_PARK=0x200,//红灯越线 + ITC_VIOLATION_GREEN_PARK=0x400,//绿灯停车 + ITC_VIOLATION_HIGH_SPEED = 0x800, /*超速*/ + ITC_VIOLATION_LOW_SPEED = 0x1000, /*低速*/ + ITC_VIOLATION_EMERGENCY = 0x2000, /*占用应急车道*/ + ITC_VIOLATION_TURN_AROUND = 0x8000,/*违法掉头*/ + ITC_VIOLATION_CONGESTION = 0x10000 /*拥堵*/ }ITC_VIOLATION_DETECT_TYPE; -//Υṹ +//违规检测参数结构 typedef struct tagNET_ITC_VIOLATION_DETECT_PARAM { - DWORD dwVioDetectType; //Υ, λʾ, ITC_VIOLATION_DETECT_TYPE ,0-,1- - BYTE byDriveLineSnapTimes; //ѹץ,2-3 - BYTE byReverseSnapTimes; //ץ,2-3 - WORD wStayTime; //ռͣʱ䣨ʱץģλs - BYTE byNonDriveSnapTimes;//ռץ2-3 - BYTE byChangeLaneTimes;//Υץ 2-3 - BYTE bybanTimes;//Υץ2-3 - BYTE byDriveLineSnapSen;// ѹ(0~100)(3.7Ver) - WORD wSnapPosFixPixel; //2,3ץλСƫ(ΥźŵʱЧ)λأ Ľ - BYTE bySpeedTimes;//Υץ2-3(3.8Ver) - BYTE byTurnAroundEnable;//Υµͷʹ 0~ر 1~ - BYTE byThirdPlateRecogTime;//ʶʱ 0~180s - BYTE byPostSnapTimes;//ץ,1-2 + DWORD dwVioDetectType; //违规检测类型, 按位表示, 详见ITC_VIOLATION_DETECT_TYPE ,0-不启用,1-启用 + BYTE byDriveLineSnapTimes; //压车道线抓拍张数,2-3 + BYTE byReverseSnapTimes; //逆行抓拍,2-3 + WORD wStayTime; //机占非停留时间(该时间后抓拍),单位s + BYTE byNonDriveSnapTimes;//机占非抓拍张数2-3 + BYTE byChangeLaneTimes;//违法变道抓拍张数 2-3 + BYTE bybanTimes;//违法禁令抓拍张数2-3 + BYTE byDriveLineSnapSen;// 压线灵敏度(0~100)(3.7Ver) + WORD wSnapPosFixPixel; //第2,3张抓拍位置最小偏移(违反信号灯时起效)(单位:像素) 命名需改进 + BYTE bySpeedTimes;//违法超速抓拍张数2-3(3.8Ver) + BYTE byTurnAroundEnable;//违章掉头使能 0~关闭 1~开启 + BYTE byThirdPlateRecogTime;//第三张牌识时间 0~180s + BYTE byPostSnapTimes;//卡口抓拍张数,1-2张 BYTE byRes1[18]; - WORD wStopLineDis; //羯2ΥͼƬֹͣߵ̾룬[0,300]λ() + WORD wStopLineDis; //电警第2张违规图片与停止线的最短距离,[0,300]单位(像素) BYTE byRes[14]; }NET_ITC_VIOLATION_DETECT_PARAM, *LPNET_ITC_VIOLATION_DETECT_PARAM; -//Ͷ +//关联车道方向类型定义 typedef enum _ITC_RELA_LANE_DIRECTION_TYPE_ { - ITC_RELA_LANE_DIRECTION_UNKNOW = 0, // - ITC_RELA_LANE_EAST_WEST = 1, //Ӷ - ITC_RELA_LANE_WEST_EAST = 2, // - ITC_RELA_LANE_SOUTH_NORTH = 3, // - ITC_RELA_LANE_NORTH_SOUTH = 4, //ӱ - ITC_RELA_LANE_EASTSOUTH_WESTNORTH = 5, //Ӷ - ITC_RELA_LANE_WESTNORTH_EASTSOUTH = 6, // - ITC_RELA_LANE_EASTNORTH_WESTSOUTH = 7, //Ӷ - ITC_RELA_LANE_WESTSOUTH_EASTNORTH = 8 //򶫱 + ITC_RELA_LANE_DIRECTION_UNKNOW = 0, //其它 + ITC_RELA_LANE_EAST_WEST = 1, //从东向西 + ITC_RELA_LANE_WEST_EAST = 2, //从西向东 + ITC_RELA_LANE_SOUTH_NORTH = 3, //从南向北 + ITC_RELA_LANE_NORTH_SOUTH = 4, //从北向南 + ITC_RELA_LANE_EASTSOUTH_WESTNORTH = 5, //从东南向西北 + ITC_RELA_LANE_WESTNORTH_EASTSOUTH = 6, //从西北向东南 + ITC_RELA_LANE_EASTNORTH_WESTSOUTH = 7, //从东北向西南 + ITC_RELA_LANE_WESTSOUTH_EASTNORTH = 8 //从西南向东北 } ITC_RELA_LANE_DIRECTION_TYPE; -//;Ͷ +//车道用途类型定义 typedef enum _ITC_LANE_USEAGE_TYPE_ { - ITC_LANE_USEAGE_UNKNOW = 0, //δ֪ - ITC_LANE_CARRIAGEWAY = 1, // - ITC_LANE_BUS = 2, //רõ - ITC_LANE_FAST = 3, //쳵 - ITC_LANE_SLOW = 4, // - ITC_LANE_MOTOR = 5, //Ħг - ITC_LANE_NONMOTOR = 6, //ǻ - ITC_LANE_REVERSE_LANE = 7, //򳵵 - ITC_LANE_BAN_TRUCKS = 8, // ֹ - ITC_LANE_MIX = 9, //ϳ - ITC_LANE_EMERGENCY = 10, //Ӧ - ITC_LANE_BAN_LEFT = 11, // 󳵵 - ITC_LANE_BAN_RIGHT = 12 // ҳ + ITC_LANE_USEAGE_UNKNOW = 0, //未知 + ITC_LANE_CARRIAGEWAY = 1, //正常车道 + ITC_LANE_BUS = 2, //公交车专用道 + ITC_LANE_FAST = 3, //快车道 + ITC_LANE_SLOW = 4, //慢车道 + ITC_LANE_MOTOR = 5, //摩托车道 + ITC_LANE_NONMOTOR = 6, //非机动车道 + ITC_LANE_REVERSE_LANE = 7, //反向车道 + ITC_LANE_BAN_TRUCKS = 8, // 禁止货车车道 + ITC_LANE_MIX = 9, //混合车道 + ITC_LANE_EMERGENCY = 10, //应急车道 + ITC_LANE_BAN_LEFT = 11, // 禁左车道 + ITC_LANE_BAN_RIGHT = 12 // 禁右车道 }ITC_LANE_USEAGE_TYPE; -//Ͷ +//车道方向类型定义 typedef enum _ITC_LANE_DIRECTION_TYPE_ { - ITC_LANE_DIRECTION_UNKNOW = 0, //δ֪ - ITC_LANE_LEFT = 1, //ת - ITC_LANE_STRAIGHT = 2, //ֱ - ITC_LANE_LEFT_STRAIGHT = 3, //ת+ֱ - ITC_LANE_RIGHT = 4, //ת - ITC_LANE_LEFT_RIGHT = 5, //ת+ת - ITC_LANE_RIGHT_STRAIGHT = 6, //ת+ֱ - ITC_LANE_LEFT_RIGHT_STRAIGHT = 7, //ת+ת+ֱ - ITC_LANE_LEFT_WAIT = 9, //ת - ITC_LANE_STRAIGHT_WAIT = 10, //ֱд - ITC_LANE_FORWARD = 11, //ʻ - ITC_LANE_BACKWARD = 12, //ʻ - ITC_LANE_BOTHWAY = 13, //˫ʻ - ITC_LANE_STRAIGHT_WAIT_RIGHT = 14 //ֱд + ת + ITC_LANE_DIRECTION_UNKNOW = 0, //未知 + ITC_LANE_LEFT = 1, //左转 + ITC_LANE_STRAIGHT = 2, //直行 + ITC_LANE_LEFT_STRAIGHT = 3, //左转+直行 + ITC_LANE_RIGHT = 4, //右转 + ITC_LANE_LEFT_RIGHT = 5, //左转+右转 + ITC_LANE_RIGHT_STRAIGHT = 6, //右转+直行 + ITC_LANE_LEFT_RIGHT_STRAIGHT = 7, //左转+右转+直行 + ITC_LANE_LEFT_WAIT = 9, //左转待行 + ITC_LANE_STRAIGHT_WAIT = 10, //直行待行 + ITC_LANE_FORWARD = 11, //正向行驶 + ITC_LANE_BACKWARD = 12, //背向行驶 + ITC_LANE_BOTHWAY = 13, //双向行驶 + ITC_LANE_STRAIGHT_WAIT_RIGHT = 14 //直行待行 + 右转 }ITC_LANE_DIRECTION_TYPE; -//ʻͶ +//车辆行驶方向类型定义 typedef enum _ITC_LANE_CAR_DRIVE_DIRECT_ { - ITC_LANE_DRIVE_UNKNOW = 0, //δ֪ - ITC_LANE_DRIVE_UP_TO_DOWN = 1, //ʻ() - ITC_LANE_DRIVE_DOWN_TO_UP = 2 //ʻ() + ITC_LANE_DRIVE_UNKNOW = 0, //未知 + ITC_LANE_DRIVE_UP_TO_DOWN = 1, //从上往下行驶(下行) + ITC_LANE_DRIVE_DOWN_TO_UP = 2 //从下往上行驶(上行) }ITC_LANE_CAR_DRIVE_DIRECT; -//Ͷ +//线类型定义 typedef enum _ITC_LINE_TYPE_ { - ITC_LINT_UNKNOW = 0, //δ֪ - ITC_LINE_WHITE = 1, //İʵ - ITC_LINE_STOP = 2, //ֹͣ - ITC_LINE_SINGLE_YELLOW = 3, // - ITC_LINE_DOUBLE_YELLOW = 4, //˫ - ITC_LINE_GUARD_RAIL = 5, //л - ITC_LINE_NO_CROSS = 6, //޷Խij - ITC_LINE_DOTTED = 7 // + ITC_LINT_UNKNOW = 0, //未知 + ITC_LINE_WHITE = 1, //车道间的白实线 + ITC_LINE_STOP = 2, //车道停止线 + ITC_LINE_SINGLE_YELLOW = 3, //单黄线 + ITC_LINE_DOUBLE_YELLOW = 4, //双黄线 + ITC_LINE_GUARD_RAIL = 5, //车道线上有护栏 + ITC_LINE_NO_CROSS = 6, //车辆无法跨越的车道线 + ITC_LINE_DOTTED = 7 //虚线 }ITC_LINE_TYPE; -//Ƶ羯ṹ +//单个车道视频电警触发参数结构 typedef struct tagNET_ITC_LANE_VIDEO_EPOLICE_PARAM { - BYTE byLaneNO; //ij - BYTE bySensitivity; //Ȧȣ[1,100] - BYTE byEnableRadar;//״0-ã1- - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + BYTE byLaneNO; //关联的车道号 + BYTE bySensitivity; //线圈灵敏度,[1,100] + BYTE byEnableRadar;//启用雷达测试0-不启用,1-启用 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; - NET_ITC_LANE_LOGIC_PARAM struLane; // - NET_ITC_VIOLATION_DETECT_PARAM struVioDetect; //Υ - NET_ITC_VIOLATION_DETECT_LINE struLine; //Υ - NET_ITC_POLYGON struPlateRecog; //ʶ - BYTE byRecordEnable;//¼־0-¼1-¼ - BYTE byRecordType;//¼ͣ0-Ԥ¼1-ʱ¼ - BYTE byPreRecordTime;//¼ƬԤ¼ʱ䣨Ĭ0λ - BYTE byRecordDelayTime;//¼Ƭʱʱ䣨Ĭ0λ - BYTE byRecordTimeOut;//¼ʱʱ䣨룩 - BYTE byCarSpeedLimit; //ֵλkm/h - BYTE byCarSignSpeed;//־٣λkm/h - BYTE bySnapPicPreRecord; //ץͼƬԤ¼ʱ㣻0-ĬֵڶͼƬ1-һͼƬ2-ڶͼƬ3-ͼƬ - NET_ITC_INTERVAL_PARAM struInterval;//ץļ20byte + NET_ITC_LANE_LOGIC_PARAM struLane; //车道参数 + NET_ITC_VIOLATION_DETECT_PARAM struVioDetect; //违规检测参数 + NET_ITC_VIOLATION_DETECT_LINE struLine; //违规检测线 + NET_ITC_POLYGON struPlateRecog; //牌识区域参数 + BYTE byRecordEnable;//闯红灯周期录像标志,0-不录像,1-录像 + BYTE byRecordType;//闯红灯录像类型,0-预录,1-延时录像 + BYTE byPreRecordTime;//闯红灯录像片段预录时间(默认0),单位:秒 + BYTE byRecordDelayTime;//闯红灯录像片段延时时间(默认0),单位:秒 + BYTE byRecordTimeOut;//闯红灯周期录像超时时间(秒) + BYTE byCarSpeedLimit; //车速限制值,单位km/h + BYTE byCarSignSpeed;//标志限速,单位km/h + BYTE bySnapPicPreRecord; //抓拍图片预录时间点;0-默认值(第二张图片),1-第一张图片,2-第二张图片,3-第三张图片 + NET_ITC_INTERVAL_PARAM struInterval;//抓拍间隔参数(20byte) BYTE byRes[36]; }NET_ITC_LANE_VIDEO_EPOLICE_PARAM, *LPNET_ITC_LANE_VIDEO_EPOLICE_PARAM; -//Ƶ羯ṹ +//视频电警触发参数结构 typedef struct tagNET_ITC_VIDEO_EPOLICE_PARAM { - BYTE byEnable; //Ƿã0-ã1- - BYTE byLaneNum; //ʶij - BYTE byLogicJudge;//Υж߼ֵΪ0-1- + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byLaneNum; //识别的车道个数 + BYTE byLogicJudge;//闯红灯违规判断逻辑,设置值为:0-按方向,1-按车道 BYTE byRes1; - NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //ʶ - NET_ITC_TRAFFIC_LIGHT_PARAM struTrafficLight; //ͨźŵƲ - NET_ITC_LANE_VIDEO_EPOLICE_PARAM struLaneParam[MAX_ITC_LANE_NUM]; // - NET_ITC_LINE struLaneBoundaryLine; //߽ߣұ߳ı߽ߣ - NET_ITC_LINE struLeftLine; //תֽ - NET_ITC_LINE struRightLine; //תֽ - NET_ITC_LINE struTopZebraLine; //ϲ - NET_ITC_LINE struBotZebraLine; //² + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_TRAFFIC_LIGHT_PARAM struTrafficLight; //交通信号灯参数 + NET_ITC_LANE_VIDEO_EPOLICE_PARAM struLaneParam[MAX_ITC_LANE_NUM]; //单车道参数 + NET_ITC_LINE struLaneBoundaryLine; //车道边界线(最右边车道的边界线) + NET_ITC_LINE struLeftLine; //左转弯分界线 + NET_ITC_LINE struRightLine; //右转弯分界线 + NET_ITC_LINE struTopZebraLine; //上部斑马线 + NET_ITC_LINE struBotZebraLine; //下部斑马线 BYTE byRes[32]; }NET_ITC_VIDEO_EPOLICE_PARAM, *LPNET_ITC_VIDEO_EPOLICE_PARAM; typedef union tagNET_ITC_VIDEO_TRIGGER_PARAM_UNION { DWORD uLen[1150]; - NET_ITC_VIDEO_EPOLICE_PARAM struVideoEP; //Ƶ羯 + NET_ITC_VIDEO_EPOLICE_PARAM struVideoEP; //视频电警参数 }NET_ITC_VIDEO_TRIGGER_PARAM_UNION, *LPNET_ITC_VIDEO_TRIGGER_PARAM_UNION; typedef struct tagNET_ITC_VIDEO_TRIGGER_PARAM { DWORD dwSize; - DWORD dwMode; //ģʽITC_TRIGGERMODE_TYPE - NET_ITC_VIDEO_TRIGGER_PARAM_UNION uVideoTrigger; //ģʽ + DWORD dwMode; //触发模式,详见ITC_TRIGGERMODE_TYPE + NET_ITC_VIDEO_TRIGGER_PARAM_UNION uVideoTrigger; //触发模式参数 BYTE byRes[32]; }NET_ITC_VIDEO_TRIGGER_PARAM, *LPNET_ITC_VIDEO_TRIGGER_PARAM; typedef struct tagNET_DVR_STATUS_DETECTCFG { - DWORD dwSize; //ṹ - BYTE byEnableTrigIODetect; //IO״̬⣬1-ǣ0- - BYTE byEnableFlashOutDetect; //ͬ״̬⣬1-ǣ0- - BYTE byEnableRS485Detect; //RS485״̬⣬1-ǣ0- - BYTE byEnableTrafficLightDetect;//ͨ״̬⣬1-ǣ0- + DWORD dwSize; //结构长度 + BYTE byEnableTrigIODetect; //开启触发IO状态检测,1-是,0-否 + BYTE byEnableFlashOutDetect; //开启同步输出状态检测,1-是,0-否 + BYTE byEnableRS485Detect; //开启RS485接收状态检测,1-是,0-否 + BYTE byEnableTrafficLightDetect;//开启交通灯状态检测,1-是,0-否 BYTE byRes[28]; }NET_DVR_STATUS_DETECTCFG, *LPNET_DVR_STATUS_DETECTCFG; typedef enum _ITC_STATUS_DETECT_TYPE_ { - ITC_STATUS_DETECT_NULL = 0, //δ֪ - ITC_STATUS_DETECT_TRIGGERIO, //IO - ITC_STATUS_DETECT_FLASHOUT, //ͬ + ITC_STATUS_DETECT_NULL = 0, //未知 + ITC_STATUS_DETECT_TRIGGERIO, //触发IO + ITC_STATUS_DETECT_FLASHOUT, //同步输出 ITC_STATUS_DETECT_RS485, //RS485 - ITC_STATUS_DETECT_TRIGGERTYPE, //ͣ - ITC_STATUS_DETECT_TRAFFICLIGHT_COLOR, //ͨƣɫ - ITC_STATUS_DETECT_TRAFFICLIGHT_TURN //ͨƣת + ITC_STATUS_DETECT_TRIGGERTYPE, //触发类型(保留) + ITC_STATUS_DETECT_TRAFFICLIGHT_COLOR, //交通灯(区分颜色) + ITC_STATUS_DETECT_TRAFFICLIGHT_TURN //交通灯(区分转向) }ITC_STATUS_DETECT_TYPE; typedef struct tagNET_ITC_TRIGGERIO_INFO { - BYTE byTriggerIOIndex[MAX_IOIN_NUM]; //IO + BYTE byTriggerIOIndex[MAX_IOIN_NUM]; //触发IO号 BYTE byRes[40]; }NET_ITC_TRIGGERIO_INFO, *LPNET_ITC_TRIGGERIO_INFO; typedef struct tagNET_ITC_FLASHOUT_INFO { - BYTE byFlashOutIndex[MAX_IOOUT_K_NUM]; //ͬ + BYTE byFlashOutIndex[MAX_IOOUT_K_NUM]; //同步输出号 BYTE byRes[40]; }NET_ITC_FLASHOUT_INFO, *LPNET_ITC_FLASHOUT_INFO; typedef struct tagNET_ITC_SERIAL_CHECKINFO { - BYTE bySerialIndex[MAX_ITC_SERIALCHECK_NUM]; //485У0-Ч,1-Ч, bySerialIndex[0]ʾȷͷ, bySerialIndex[1]ʾȷβ + BYTE bySerialIndex[MAX_ITC_SERIALCHECK_NUM]; //485串口校验结果,0-无效,1-有效, bySerialIndex[0]表示正确的头, bySerialIndex[1]表示正确的尾 BYTE byRes[40]; }NET_ITC_SERIAL_CHECKINFO, *LPNET_ITC_SERIAL_CHECKINFO; typedef struct tagNET_ITC_TRIGGERTYPE_INFO { - BYTE byTrigTypeIndex; //ֵ + BYTE byTrigTypeIndex; //触发类型值 BYTE byRes[47]; }NET_ITC_TRIGGERTYPE_INFO, *LPNET_ITC_TRIGGERTYPE_INFO; -//Ƶ羯 +//视频电警 typedef struct tagNET_ITC_TRAFFIC_LIGHT_COLOR { - BYTE byLeftLight;//תƣ0 ʾЧ1Ϊ 2Ϊ̵ 3 Ƶ 4ƶ - BYTE byRightLight; //תƣ0 ʾЧ1Ϊ 2Ϊ̵ 3 Ƶ 4ƶ - BYTE byStraightLight; //ֱеƣ0 ʾЧ1Ϊ 2Ϊ̵ 3 Ƶ 4ƶ + BYTE byLeftLight;//左转灯,0 表示无效,1为红灯 2为绿灯 3 黄灯 4灯都不亮 + BYTE byRightLight; //右转灯,0 表示无效,1为红灯 2为绿灯 3 黄灯 4灯都不亮 + BYTE byStraightLight; //直行灯,0 表示无效,1为红灯 2为绿灯 3 黄灯 4灯都不亮 BYTE byRes[45]; }NET_ITC_TRAFFIC_LIGHT_COLOR, *LPNET_ITC_TRAFFIC_LIGHT_COLOR; -//Ƶ羯 +//非视频电警 typedef struct tagNET_ITC_TRAFFIC_LIGHT_TURN { - BYTE byLightType[MAX_ITC_LANE_NUM];// 0 ʾЧ1Ϊ 2Ϊ̵ 3 Ƶ 4ƶ + BYTE byLightType[MAX_ITC_LANE_NUM];// 0 表示无效,1为红灯 2为绿灯 3 黄灯 4灯都不亮 BYTE byRes[42]; } NET_ITC_TRAFFIC_LIGHT_TURN, *LPNET_ITC_TRAFFIC_LIGHT_TURN; typedef union tagNET_ITC_STATUS_UNION { - BYTE uLen[48]; // - NET_ITC_TRIGGERIO_INFO struTrigIO; //IOں - NET_ITC_FLASHOUT_INFO struFlashOut; //ͬ - NET_ITC_SERIAL_CHECKINFO struSerial; // - NET_ITC_TRIGGERTYPE_INFO struTrigType; //ͣ - NET_ITC_TRAFFIC_LIGHT_COLOR struTrafficLightColor; //ͨƣɫӦITC_STATUS_DETECT_TRAFFICLIGHT_COLOR - NET_ITC_TRAFFIC_LIGHT_TURN struTrafficLightTurn;//ͨƣת򣩶ӦITC_STATUS_DETECT_TRAFFICLIGHT_TURN + BYTE uLen[48]; //参数 + NET_ITC_TRIGGERIO_INFO struTrigIO; //触发IO口号 + NET_ITC_FLASHOUT_INFO struFlashOut; //同步输出 + NET_ITC_SERIAL_CHECKINFO struSerial; //串口 + NET_ITC_TRIGGERTYPE_INFO struTrigType; //触发类型(保留) + NET_ITC_TRAFFIC_LIGHT_COLOR struTrafficLightColor; //交通灯(区分颜色)对应类型ITC_STATUS_DETECT_TRAFFICLIGHT_COLOR + NET_ITC_TRAFFIC_LIGHT_TURN struTrafficLightTurn;//交通灯(区分转向)对应类型ITC_STATUS_DETECT_TRAFFICLIGHT_TURN }NET_ITC_STATUS_UNION, *LPNET_ITC_STATUS_UNION; typedef struct tagNET_ITC_STATUS_DETECT_RESULT { - ITC_STATUS_DETECT_TYPE dwStatusType;//״̬ͣITC_STATUS_DETECT_TYPE - NET_ITC_STATUS_UNION uStatusParam; //״̬ - DWORD dwHoldTime; //ʱ䣨λms + ITC_STATUS_DETECT_TYPE dwStatusType;//状态检测类型,详见ITC_STATUS_DETECT_TYPE + NET_ITC_STATUS_UNION uStatusParam; //状态检测结果 + DWORD dwHoldTime; //灯亮持续时间(保留),单位:ms BYTE byRes[32]; }NET_ITC_STATUS_DETECT_RESULT, *LPNET_ITC_STATUS_DETECT_RESULT; typedef struct tagNET_DVR_SETUPALARM_PARAM { DWORD dwSize; - BYTE byLevel; //ȼ0-һȼߣ1-ȼУ2-ȼͣ - BYTE byAlarmInfoType; //ϴϢͣץĻ֧֣0-ϱϢNET_DVR_PLATE_RESULT1-±Ϣ(NET_ITS_PLATE_RESULT)2012-9-28 - BYTE byRetAlarmTypeV40; //0--NET_DVR_ALARMINFO_V30NET_DVR_ALARMINFO, 1--豸֧NET_DVR_ALARMINFO_V40򷵻NET_DVR_ALARMINFO_V40֧򷵻NET_DVR_ALARMINFO_V30NET_DVR_ALARMINFO - BYTE byRetDevInfoVersion; //CVRϴϢصṹ汾 0-COMM_ALARM_DEVICE 1-COMM_ALARM_DEVICE_V40 - BYTE byRetVQDAlarmType; //VQDϴͣ0-ϴNET_DVR_VQD_DIAGNOSE_INFO1-ϴNET_DVR_VQD_ALARM - //1-ʾⱨչ(INTER_FACE_DETECTION),0-ʾԭֽ֧ṹ(INTER_FACESNAP_RESULT) + BYTE byLevel; //布防优先级,0-一等级(高),1-二等级(中),2-三等级(低) + BYTE byAlarmInfoType; //上传报警信息类型(抓拍机支持),0-老报警信息(NET_DVR_PLATE_RESULT),1-新报警信息(NET_ITS_PLATE_RESULT)2012-9-28 + BYTE byRetAlarmTypeV40; //0--返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO, 1--设备支持NET_DVR_ALARMINFO_V40则返回NET_DVR_ALARMINFO_V40,不支持则返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO + BYTE byRetDevInfoVersion; //CVR上传报警信息回调结构体版本号 0-COMM_ALARM_DEVICE, 1-COMM_ALARM_DEVICE_V40 + BYTE byRetVQDAlarmType; //VQD报警上传类型,0-上传报报警NET_DVR_VQD_DIAGNOSE_INFO,1-上传报警NET_DVR_VQD_ALARM + //1-表示人脸侦测报警扩展(INTER_FACE_DETECTION),0-表示原先支持结构(INTER_FACESNAP_RESULT) BYTE byFaceAlarmDetection; - //Bit0- ʾǷϴͼƬ: 0-ϴ1-ϴ - //Bit1- ʾϴȷϻƣ0-1- - //Bit6- ʾ״ⱨ(eventType:radarDetection)Ƿʵʱϴ0-1-webʵʱʾ״Ŀ꣩ + //Bit0- 表示二级布防是否上传图片: 0-上传,1-不上传 + //Bit1- 表示开启数据上传确认机制;0-不开启,1-开启 + //Bit6- 表示雷达检测报警(eventType:radarDetection)是否开启实时上传;0-不开启,1-开启(用于web插件实时显示雷达目标) BYTE bySupport; - // - //bit0-Ƽ⣨IPC 0-1- - //bit1-ͳƣIPC 0-1- - //bit2-ȶͼͳƣIPC 0-1- - //bit3-ĿץģIPC 0-1- - //bit4-ԱȣIPC 0-1- + //断网续传类型 + //bit0-车牌检测(IPC) (0-不续传,1-续传) + //bit1-客流统计(IPC) (0-不续传,1-续传) + //bit2-热度图统计(IPC) (0-不续传,1-续传) + //bit3-目标抓拍(IPC) (0-不续传,1-续传) + //bit4-人脸对比(IPC) (0-不续传,1-续传) BYTE byBrokenNetHttp; - WORD wTaskNo; // (ϴNET_DVR_VEHICLE_RECOG_RESULTеֶdwTaskNoӦ ͬʱ ·ṹ NET_DVR_VEHICLE_RECOG_CONDеֶdwTaskNoӦ) - BYTE byDeployType; //ͣ0-ͻ˲1-ʵʱ - BYTE bySubScription; //ģλʾδIJϱ //ռλ - //Bit7-ƶ˳Ƿͼ0-ͼ(V30ϱ)1-ͼ(V40ϱ) + WORD wTaskNo; //任务处理号 和 (上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段dwTaskNo对应 同时 下发任务结构 NET_DVR_VEHICLE_RECOG_COND中的字段dwTaskNo对应) + BYTE byDeployType; //布防类型:0-客户端布防,1-实时布防 + BYTE bySubScription; //订阅,按位表示,未开启订阅不上报 //占位 + //Bit7-移动侦测人车分类是否传图;0-不传图(V30上报),1-传图(V40上报) BYTE byRes1[2]; - BYTE byAlarmTypeURL;//bit0-ʾĿץıϴINTER_FACESNAP_RESULT0-ʾƴ䣬1-ʾURL䣨豸ֵ֧£豸֧ݾ屨ж,ͬʱ豸Ҫ֧URLط񣬵ǰǡƴ洢 - //bit1-ʾEVENT_JSONͼƬݳͣ0-ʾƴ䣬1-ʾURL䣨豸ֵ֧£豸֧ݾ屨жϣ - //bit2 - ȶ(ΪCOMM_SNAP_MATCH_ALARM)ͼƬϴͣ0 - ƴ䣬1 - URL - //bit3 - 쳣Ϊ(ΪCOMM_ALARM_RULE)ͼƬϴͣ0 - ƴ䣬1 - URL䣬ֶ豸Ƿ֧֣ӦӲڵǷ񷵻Ϊtrue + BYTE byAlarmTypeURL;//bit0-表示目标抓拍报警上传(INTER_FACESNAP_RESULT);0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断,同时设备需要支持URL的相关服务,当前是”云存储“) + //bit1-表示EVENT_JSON中图片数据长传类型;0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断) + //bit2 - 人脸比对(报警类型为COMM_SNAP_MATCH_ALARM)中图片数据上传类型:0 - 二进制传输,1 - URL传输 + //bit3 - 异常行为检测(报警类型为COMM_ALARM_RULE)中图片数据上传类型:0 - 二进制传输,1 - URL传输,本字段设备是否支持,对应软硬件能力集中节点是否返回且为true BYTE byCustomCtrl; - //Bit0- ʾָ֧ʻͼϴ: 0-ϴ,1-ϴ - //bit1-ʾAIOP¼ͨCOMM_VCA_ALARM͸ISAPIϴ 0-ϴ͸ISAPI1-ϴ͸ISAPI - //bit2 - ʾ쳣Ϊʶ¼ͨ͸ISAPIϴ 0 - ϴ͸ISAPI1 - ϴ͸ISAPI - //bit3-ʾ̻¼̻¼¼⣩ͨCOMM_VCA_ALARM͸ISAPIϴ 0-ϴ͸ISAPI1-ϴ͸ISAPI - //bit4-ʾƶ˳౨ͼwifi/4Gȴ͵ijҪͼΪ1ʱbySubScriptionbit7ЧΪ0ʱbySubScriptionӰ죩 + //Bit0- 表示支持副驾驶人脸子图上传: 0-不上传,1-上传; + //bit1-表示AIOP相关事件通过COMM_VCA_ALARM透传ISAPI报文上传 0-不上传透传ISAPI报警,1-上传透传ISAPI报警 + //bit2 - 表示异常行为识别相关事件通过透传ISAPI报文上传 0 - 不上传透传ISAPI报警,1 - 上传透传ISAPI报警 + //bit3-表示烟火检测相关事件(包括烟火检测事件,火点检测事件,烟雾检测)通过COMM_VCA_ALARM透传ISAPI报文上传 0-不上传透传ISAPI报警,1-上传透传ISAPI报警 + //bit4-表示移动侦测人车分类报警不带图(wifi/4G等带宽低的场景,不要传图。置为1时,bySubScription的bit7无效,置为0时,对bySubScription无影响) }NET_DVR_SETUPALARM_PARAM, *LPNET_DVR_SETUPALARM_PARAM; typedef struct tagNET_DVR_SETUPALARM_PARAM_V50 { DWORD dwSize; - BYTE byLevel; //ȼ0-һȼߣ1-ȼУ2-ȼͣ - BYTE byAlarmInfoType; //ϴϢͣץĻ֧֣0-ϱϢNET_DVR_PLATE_RESULT1-±Ϣ(NET_ITS_PLATE_RESULT)2012-9-28 - BYTE byRetAlarmTypeV40; //0--NET_DVR_ALARMINFO_V30NET_DVR_ALARMINFO, 1--豸֧NET_DVR_ALARMINFO_V40򷵻NET_DVR_ALARMINFO_V40֧򷵻NET_DVR_ALARMINFO_V30NET_DVR_ALARMINFO - BYTE byRetDevInfoVersion; //CVRϴϢصṹ汾 0-COMM_ALARM_DEVICE 1-COMM_ALARM_DEVICE_V40 - BYTE byRetVQDAlarmType; //VQDϴͣ0-ϴNET_DVR_VQD_DIAGNOSE_INFO1-ϴNET_DVR_VQD_ALARM - //1-ʾⱨչ(INTER_FACE_DETECTION),0-ʾԭֽ֧ṹ(INTER_FACESNAP_RESULT) + BYTE byLevel; //布防优先级,0-一等级(高),1-二等级(中),2-三等级(低) + BYTE byAlarmInfoType; //上传报警信息类型(抓拍机支持),0-老报警信息(NET_DVR_PLATE_RESULT),1-新报警信息(NET_ITS_PLATE_RESULT)2012-9-28 + BYTE byRetAlarmTypeV40; //0--返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO, 1--设备支持NET_DVR_ALARMINFO_V40则返回NET_DVR_ALARMINFO_V40,不支持则返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO + BYTE byRetDevInfoVersion; //CVR上传报警信息回调结构体版本号 0-COMM_ALARM_DEVICE, 1-COMM_ALARM_DEVICE_V40 + BYTE byRetVQDAlarmType; //VQD报警上传类型,0-上传报报警NET_DVR_VQD_DIAGNOSE_INFO,1-上传报警NET_DVR_VQD_ALARM + //1-表示人脸侦测报警扩展(INTER_FACE_DETECTION),0-表示原先支持结构(INTER_FACESNAP_RESULT) BYTE byFaceAlarmDetection; - //Bit0- ʾǷϴͼƬ: 0-ϴ1-ϴ - //Bit1- ʾϴȷϻƣ0-1- - //Bit6- ʾ״ⱨ(eventType:radarDetection)Ƿʵʱϴ0-1-webʵʱʾ״Ŀ켣 + //Bit0- 表示二级布防是否上传图片: 0-上传,1-不上传 + //Bit1- 表示开启数据上传确认机制;0-不开启,1-开启 + //Bit6- 表示雷达检测报警(eventType:radarDetection)是否开启实时上传;0-不开启,1-开启(用于web插件实时显示雷达目标轨迹) BYTE bySupport; - // - //bit0-Ƽ⣨IPC 0-1- - //bit1-ͳƣIPC 0-1- - //bit2-ȶͼͳƣIPC 0-1- - //bit3-ĿץģIPC 0-1- - //bit4-ԱȣIPC 0-1- - //bit5-JSON͸IPC 0-1- - //bit6-ȶͼԱͣʱͳϴ¼0-1- - //bit7-ȶͼͳϴ¼ȷϻƣ0-1- + //断网续传类型 + //bit0-车牌检测(IPC) (0-不续传,1-续传) + //bit1-客流统计(IPC) (0-不续传,1-续传) + //bit2-热度图统计(IPC) (0-不续传,1-续传) + //bit3-目标抓拍(IPC) (0-不续传,1-续传) + //bit4-人脸对比(IPC) (0-不续传,1-续传) + //bit5-JSON报警透传(IPC) (0-不续传,1-续传) + //bit6-热度图按人员停留时间统计数据上传事件(0-不续传,1-续传) + //bit7-热度图按人数统计数据上传事件的确认机制(0-不续传,1-续传) BYTE byBrokenNetHttp; - WORD wTaskNo; // (ϴNET_DVR_VEHICLE_RECOG_RESULTеֶdwTaskNoӦ ͬʱ ·ṹ NET_DVR_VEHICLE_RECOG_CONDеֶdwTaskNoӦ) - BYTE byDeployType; //ͣ0-ͻ˲1-ʵʱ - BYTE bySubScription; //ģλʾδIJϱ //ռλBit7-ƶ˳Ƿͼ0-ͼ(V30ϱ)1-ͼ(V40ϱ) - //ӦV60汾 - //bit0-AID¼(COMM_ALARM_AID_V41) 0-1- - //bit1-TFS¼COMM_ALARM_TFS 0-1- - //bit2-TPSͳƹ¼COMM_ALARM_TPS_STATISTICS 0-1- - //bit3-쳣Ϊ(COMM_ALARM_RULE) 0-1- + WORD wTaskNo; //任务处理号 和 (上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段dwTaskNo对应 同时 下发任务结构 NET_DVR_VEHICLE_RECOG_COND中的字段dwTaskNo对应) + BYTE byDeployType; //布防类型:0-客户端布防,1-实时布防 + BYTE bySubScription; //订阅,按位表示,未开启订阅不上报 //占位Bit7-移动侦测人车分类是否传图;0-不传图(V30上报),1-传图(V40上报) + //断网续传响应类型V60版本 + //bit0-AID事件(COMM_ALARM_AID_V41) (0-不续传,1-续传) + //bit1-TFS事件(COMM_ALARM_TFS) (0-不续传,1-续传) + //bit2-TPS统计过车事件(COMM_ALARM_TPS_STATISTICS) (0-不续传,1-续传) + //bit3-异常行为检测(COMM_ALARM_RULE) (0-不续传,1-续传) BYTE byBrokenNetHttpV60; BYTE byRes1; - BYTE byAlarmTypeURL;//bit0-ʾĿץıϴINTER_FACESNAP_RESULT0-ʾƴ䣬1-ʾURL䣨豸ֵ֧£豸֧ݾ屨ж,ͬʱ豸Ҫ֧URLط񣬵ǰǡƴ洢 - //bit1-ʾEVENT_JSONͼƬݳͣ0-ʾƴ䣬1-ʾURL䣨豸ֵ֧£豸֧ݾ屨жϣ - //bit2 - ȶ(ΪCOMM_SNAP_MATCH_ALARM)ͼƬϴͣ0 - ƴ䣬1 - URL - //bit3 - 쳣Ϊ(ΪCOMM_ALARM_RULE)ͼƬϴͣ0 - ƴ䣬1 - URL䣬ֶ豸Ƿ֧֣ӦӲڵǷ񷵻Ϊtrue + BYTE byAlarmTypeURL;//bit0-表示目标抓拍报警上传(INTER_FACESNAP_RESULT);0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断,同时设备需要支持URL的相关服务,当前是”云存储“) + //bit1-表示EVENT_JSON中图片数据长传类型;0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断) + //bit2 - 人脸比对(报警类型为COMM_SNAP_MATCH_ALARM)中图片数据上传类型:0 - 二进制传输,1 - URL传输 + //bit3 - 异常行为检测(报警类型为COMM_ALARM_RULE)中图片数据上传类型:0 - 二进制传输,1 - URL传输,本字段设备是否支持,对应软硬件能力集中节点是否返回且为true BYTE byCustomCtrl; - //Bit0- ʾָ֧ʻͼϴ: 0-ϴ,1-ϴ - //bit1-ʾAIOP¼ͨCOMM_VCA_ALARM͸ISAPIϴ 0-ϴ͸ISAPI1-ϴ͸ISAPI - //bit2 - ʾ쳣Ϊʶ¼ͨ͸ISAPIϴ 0 - ϴ͸ISAPI1 - ϴ͸ISAPI - //bit3-ʾ̻¼̻¼¼⣩ͨCOMM_VCA_ALARM͸ISAPIϴ 0-ϴ͸ISAPI1-ϴ͸ISAPI - //bit4-ʾƶ˳౨ͼwifi/4Gȴ͵ijҪͼΪ1ʱbySubScriptionbit7ЧΪ0ʱbySubScriptionӰ죩 - BYTE byChildDeviceFlag;//Ƿ豸͸0-1- - BYTE byTimeOutCount;//ʱ0ʾ6ΣʾʵʴС6ʱáSDKڲÿ5sһǷʱ6ζ30sʱֵʾʱʱ5s * byTimeOutCount + //Bit0- 表示支持副驾驶人脸子图上传: 0-不上传,1-上传; + //bit1-表示AIOP相关事件通过COMM_VCA_ALARM透传ISAPI报文上传 0-不上传透传ISAPI报警,1-上传透传ISAPI报警 + //bit2 - 表示异常行为识别相关事件通过透传ISAPI报文上传 0 - 不上传透传ISAPI报警,1 - 上传透传ISAPI报警 + //bit3-表示烟火检测相关事件(包括烟火检测事件,火点检测事件,烟雾检测)通过COMM_VCA_ALARM透传ISAPI报文上传 0-不上传透传ISAPI报警,1-上传透传ISAPI报警 + //bit4-表示移动侦测人车分类报警不带图(wifi/4G等带宽低的场景,不要传图。置为1时,bySubScription的bit7无效,置为0时,对bySubScription无影响) + BYTE byChildDeviceFlag;//是否订阅子设备透传报警:0-否,1-是 + BYTE byTimeOutCount;//超时计数,0表示6次,其它表示实际次数,小于6时不建议设置。SDK内部每5s检测一次是否超时,6次意味着30s超时,如设置其它值则表示超时时间是5s * byTimeOutCount BYTE byRes4[126]; }NET_DVR_SETUPALARM_PARAM_V50, *LPNET_DVR_SETUPALARM_PARAM_V50; @@ -31360,604 +31360,604 @@ typedef struct tagNET_ITC_VIDEO_TRIGGER_COND { DWORD dwSize; DWORD dwChannel; - DWORD dwTriggerMode; //ƵģʽͣITC_TRIGGERMODE_TYPE + DWORD dwTriggerMode; //视频触发模式类型,详见ITC_TRIGGERMODE_TYPE BYTE byRes[16]; }NET_ITC_VIDEO_TRIGGER_COND, *LPNET_ITC_VIDEO_TRIGGER_COND; -//ṹ +//条件结构 typedef struct tagNET_ITC_FTP_TYPE_COND { - DWORD dwChannel;//ͨ - BYTE byWorkMode; // 0-FTP1(FTP)1-FTP2(FTP) + DWORD dwChannel;//通道号 + BYTE byWorkMode; // 0-FTP1(主FTP),1-FTP2(备FTP) BYTE byRes[7]; }NET_ITC_FTP_TYPE_COND, *LPNET_ITC_FTP_TYPE_COND; -//ýṹ +//配置结构 typedef struct tagNET_ITC_FTP_CFG { DWORD dwSize; - BYTE byEnable; /*Ƿftpϴܣ0-1-*/ - BYTE byAddressType; //0-ʵipv4 ipv6ַ 1- - // unionServerʹʵʵַ - WORD wFTPPort; /*˿*/ + BYTE byEnable; /*是否启动ftp上传功能,0-否,1-是*/ + BYTE byAddressType; //0-实际ipv4 ipv6地址 1-域名 + // 控制unionServer是使用实际地址还是域名 + WORD wFTPPort; /*端口*/ union { struct { - BYTE szDomain[MAX_DOMAIN_NAME];//ַ + BYTE szDomain[MAX_DOMAIN_NAME];//服务器地址,域名 BYTE byRes1[80]; }struDomain; struct { - NET_DVR_IPADDR struIp;/*IPַ*/ //IPv4 IPv6ַ, 144ֽ + NET_DVR_IPADDR struIp;/*IP地址*/ //IPv4 IPv6地址, 144字节 } struAddrIP; - }unionServer; //ʹṹͨbyAddressTypeֶαʾIPַ 64 - BYTE szUserName[NAME_LEN]; /*û*/ - BYTE szPassWORD[PASSWD_LEN]; /**/ - BYTE byRes4; // 0-FTP1(FTP)1-FTP2(FTP) - BYTE byDirLevel; /*0 = ʹĿ¼ṹֱӱڸĿ¼, - 1 = ʹ1Ŀ¼,2=ʹ2Ŀ¼, - 3 = ʹ3Ŀ¼,4=ʹ4Ŀ¼*/ - BYTE byIsFilterCarPic;/*СͼǷϴ0-ϴ,1-ϴ*/ - BYTE byUploadDataType;//0-ȫ1-ڣ2-Υ (FTPʱĬѡȫ˫FTPʱֿ֧ڣΥµѡ) - NET_DVR_PICTURE_NAME struPicNameRule;/* ͼƬ */ - BYTE byTopDirMode; /*һĿ¼, 0x1 = ʹ豸, - 0x2 = ʹ豸,0x3 =ʹ豸ipַ - 0x4=ʹʾ,0x5=ʹʱ(), - 0x6=ʹʱ(),0x7=Υ,0x8=,0x9=ص, - 0xa=ͨ,0xb=ͨ,0xc=0xff=Զ*/ - BYTE bySubDirMode; /*Ŀ¼, 0x1 =ʹ豸, - 0x2 = ʹ豸,0x3 =ʹ豸ipַ - 0x4=ʹʾ,0x5=ʹʱ(), - 0x6=ʹʱ(),0x7=Υ,0x8=,0x9=ص, - 0xa=ͨ,0xb=ͨ,0xc=0xff=Զ*/ - BYTE byThreeDirMode; /*Ŀ¼, 0x1 = ʹ豸, - 0x2 = ʹ豸,0x3 =ʹ豸ipַ - 0x4=ʹʾ,0x5=ʹʱ(), - 0x6=ʹʱ(),0x7=Υ,0x8=,0x9=ص, - 0xa=ͨ,0xb=ͨ,0xc=0xff=Զ*/ - BYTE byFourDirMode; /*ļĿ¼, 0x1 =ʹ豸, - 0x2 = ʹ豸,0x3 =ʹ豸ipַ - 0x4=ʹʾ,0x5=ʹʱ(), - 0x6=ʹʱ(),0x7=Υ,0x8=,0x9=ص, - 0xa=ͨ,0xb=ͨ,0xc=0xff=Զ*/ - /*ͼƬԶ PICNAME_ITEM_CUSTOM ʱ Ч*/ - BYTE szPicNameCustom[MAX_CUSTOMDIR_LEN];// (3.7Ver Ч) - BYTE szTopCustomDir[MAX_CUSTOMDIR_LEN]; /*ԶһĿ¼*/ - BYTE szSubCustomDir[MAX_CUSTOMDIR_LEN];/*ԶĿ¼*/ - BYTE szThreeCustomDir[MAX_CUSTOMDIR_LEN]; /*ԶĿ¼*/ - BYTE szFourCustomDir[MAX_CUSTOMDIR_LEN]; /*ԶļĿ¼*/ - BYTE byRes3[900]; //12չԤ ֧͸ + }unionServer; //使用联合体结构,通过byAddressType字段表示是IP地址还是域名 64 + BYTE szUserName[NAME_LEN]; /*用户名*/ + BYTE szPassWORD[PASSWD_LEN]; /*密码*/ + BYTE byRes4; // 0-FTP1(主FTP),1-FTP2(备FTP) + BYTE byDirLevel; /*0 = 不使用目录结构,直接保存在根目录, + 1 = 使用1级目录,2=使用2级目录, + 3 = 使用3级目录,4=使用4级目录*/ + BYTE byIsFilterCarPic;/*车牌小图是否上传,0-上传,1-不上传*/ + BYTE byUploadDataType;//0-全部,1-卡口,2-违章 (单FTP时默认选择全部,双FTP时支持卡口,违章的选择) + NET_DVR_PICTURE_NAME struPicNameRule;/* 图片命名规则 */ + BYTE byTopDirMode; /*一级目录, 0x1 = 使用设备名, + 0x2 = 使用设备号,0x3 =使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月), + 0x6=使用时间(年月日),0x7=违规类型,0x8=方向,0x9=地点, + 0xa=通道名,0xb=通道号,0xc=车道号0xff=自定义*/ + BYTE bySubDirMode; /*二级目录, 0x1 =使用设备名, + 0x2 = 使用设备号,0x3 =使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月), + 0x6=使用时间(年月日),0x7=违规类型,0x8=方向,0x9=地点, + 0xa=通道名,0xb=通道号,0xc=车道号0xff=自定义*/ + BYTE byThreeDirMode; /*三级目录, 0x1 = 使用设备名, + 0x2 = 使用设备号,0x3 =使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月), + 0x6=使用时间(年月日),0x7=违规类型,0x8=方向,0x9=地点, + 0xa=通道名,0xb=通道号,0xc=车道号0xff=自定义*/ + BYTE byFourDirMode; /*四级目录, 0x1 =使用设备名, + 0x2 = 使用设备号,0x3 =使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月), + 0x6=使用时间(年月日),0x7=违规类型,0x8=方向,0x9=地点, + 0xa=通道名,0xb=通道号,0xc=车道号0xff=自定义*/ + /*图片命名自定义 当PICNAME_ITEM_CUSTOM 时 生效*/ + BYTE szPicNameCustom[MAX_CUSTOMDIR_LEN];// (3.7Ver 生效) + BYTE szTopCustomDir[MAX_CUSTOMDIR_LEN]; /*自定义一级目录*/ + BYTE szSubCustomDir[MAX_CUSTOMDIR_LEN];/*自定义二级目录*/ + BYTE szThreeCustomDir[MAX_CUSTOMDIR_LEN]; /*自定义三级目录*/ + BYTE szFourCustomDir[MAX_CUSTOMDIR_LEN]; /*自定义四级目录*/ + BYTE byRes3[900]; //满足12级扩展预留 支持透传 }NET_ITC_FTP_CFG, *LPNET_ITC_FTP_CFG; typedef struct tagNET_DVR_LATITUDE_PARAM { - BYTE byDegree;//[0,179] - BYTE byMinute;//[0,59] - BYTE bySec;//[0,59] + BYTE byDegree;//度[0,179] + BYTE byMinute;//分[0,59] + BYTE bySec;//秒[0,59] BYTE byRes; }NET_DVR_LATITUDE_PARAM, *LPNET_DVR_LATITUDE_PARAM; typedef struct tagNET_DVR_LONGITUDE_PARAM { - BYTE byDegree;//[0,179] - BYTE byMinute;//[0,59] - BYTE bySec;//[0,59] + BYTE byDegree;//度[0,179] + BYTE byMinute;//分[0,59] + BYTE bySec;//秒[0,59] BYTE byRes; }NET_DVR_LONGITUDE_PARAM, *LPNET_DVR_LONGITUDE_PARAM; typedef struct tagNET_DVR_GPS_DATACFG { DWORD dwSize; - BYTE byGpsDataMode;//GPSݻȡ 0-Զ1-ֶ - BYTE byLongitudeType;// 0-1- - BYTE byLatitudeType;//γ 0-γ1-γ + BYTE byGpsDataMode;//GPS数据获取 0-自动,1-手动 + BYTE byLongitudeType;//经度 0-东经,1-西经 + BYTE byLatitudeType;//纬度 0-南纬,1-北纬 BYTE byRes; - NET_DVR_LATITUDE_PARAM struLatitude; /*γ*/ - NET_DVR_LONGITUDE_PARAM struLongitude; /**/ + NET_DVR_LATITUDE_PARAM struLatitude; /*纬度*/ + NET_DVR_LONGITUDE_PARAM struLongitude; /*经度*/ BYTE byRes1[128]; }NET_DVR_GPS_DATACFG,*LPNET_DVR_GPS_DATACFG; typedef enum _VCA_DATABASE_TYPE_ { - DATABASE_NULL = 0, //δ֪ - DATABASE_SNAP, //ץݿ - DATABASE_FACE //ݿ + DATABASE_NULL = 0, //未知 + DATABASE_SNAP, //抓拍数据库 + DATABASE_FACE //人脸数据库 }VCA_DATABASE_TYPE; typedef struct tagNET_VCA_DATABASE_PARAM { DWORD dwSize; - DWORD dwDataBaseID; //ݿID豸ɣʱЧ޸ĺɾʱЧ - DWORD dwDataBaseType; //ݿͣVCA_DATABASE_TYPE - BYTE byDataBaseName[NAME_LEN]; //ݿ - BYTE byAttribute[64]; //ݿ + DWORD dwDataBaseID; //数据库ID(设备生成,添加时无效,修改和删除时有效) + DWORD dwDataBaseType; //数据库类型,见VCA_DATABASE_TYPE + BYTE byDataBaseName[NAME_LEN]; //数据库名称 + BYTE byAttribute[64]; //数据库属性 BYTE byRes[20]; }NET_VCA_DATABASE_PARAM, *LPNET_VCA_DATABASE_PARAM; typedef struct tagNET_VCA_FIND_DATABASE_COND { - DWORD dwDataBaseType; //ݿͣVCA_DATABASE_TYPE - BYTE byRes[12]; // + DWORD dwDataBaseType; //数据库类型,详见VCA_DATABASE_TYPE + BYTE byRes[12]; //保留 }NET_VCA_FIND_DATABASE_COND, *LPNET_VCA_FIND_DATABASE_COND; typedef struct tagNET_VCA_DELETE_DATABASE_COND { DWORD dwSize; - DWORD dwDataBaseType; //ݿͣVCA_DATABASE_TYPE - DWORD dwDataBaseID; //ݿID - BYTE byRes[64]; // + DWORD dwDataBaseType; //数据库类型,见VCA_DATABASE_TYPE + DWORD dwDataBaseID; //数据库ID + BYTE byRes[64]; //保留 }NET_VCA_DELETE_DATABASE_COND, *LPNET_VCA_DELETE_DATABASE_COND; typedef struct tagNET_VCA_INQUIRE_SNAPDB_COND { - DWORD dwChannel;//ͨ - NET_DVR_TIME struStartTime;//ʼʱ - NET_DVR_TIME struStopTime;//ʱ - BYTE bySex; //Ա0-ã1-У2-Ů - BYTE byRes1[3]; // - BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ʼ£磺201106 - BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ֹ£201106 - BYTE byAttribute1[NAME_LEN]; //1 - BYTE byAttribute2[NAME_LEN]; //2 - BYTE byRes[12]; // + DWORD dwChannel;//通道号 + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byRes1[3]; //保留 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byAttribute1[NAME_LEN]; //属性1 + BYTE byAttribute2[NAME_LEN]; //属性2 + BYTE byRes[12]; //保留 }NET_VCA_INQUIRE_SNAPDB_COND, *LPNET_VCA_INQUIRE_SNAPDB_COND; typedef struct tagNET_VCA_INQUIRE_SNAPRECORD_RESULT { - DWORD dwSize; //ṹС - DWORD dwDataBaseID; //ݿID - DWORD dwRecordID; //¼ID - NET_DVR_TIME struSnapTime; //ץʱ - BYTE bySex; //Ա0-ã1-У2-Ů - BYTE byRes1[3]; // - BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ʼ£磺201106 - BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ֹ£201106 - BYTE byAttribute1[NAME_LEN]; //1 - BYTE byAttribute2[NAME_LEN]; //2 - DWORD dwFacePicID; //ͼID - DWORD dwFacePicLen; //ͼݳ - BYTE byRes[80]; // - BYTE *pFacePic; //ͼ + DWORD dwSize; //结构体大小 + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + NET_DVR_TIME struSnapTime; //抓拍时间 + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byRes1[3]; //保留 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byAttribute1[NAME_LEN]; //属性1 + BYTE byAttribute2[NAME_LEN]; //属性2 + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + BYTE byRes[80]; //保留 + BYTE *pFacePic; //人脸图数据 }NET_VCA_INQUIRE_SNAPRECORD_RESULT, *LPNET_VCA_INQUIRE_SNAPRECORD_RESULT; typedef union tagNET_VCA_DELETE_SNAPRECORD_COND_UNION { - NET_VCA_INQUIRE_SNAPDB_COND struAttribute; //ԱϢɾ - DWORD dwRecordID; //¼IDɾ + NET_VCA_INQUIRE_SNAPDB_COND struAttribute; //人员信息(批量删除) + DWORD dwRecordID; //记录ID(单条删除) }NET_VCA_DELETE_SNAPRECORD_COND_UNION, *LPNET_VCA_DELETE_SNAPRECORD_COND_UNION; typedef enum _VCA_DELETE_RECORD_TYPE_ { - DELETE_RECORD_SINGLE = 0, //ɾ - DELETE_RECORD_BATCH //ɾ + DELETE_RECORD_SINGLE = 0, //单条删除 + DELETE_RECORD_BATCH //批量删除 }VCA_DELETE_RECORD_TYPE; typedef struct tagNET_VCA_DELETE_SNAPRECORD_COND { - VCA_DELETE_RECORD_TYPE dwDeleteType; //ɾ¼ - NET_VCA_DELETE_SNAPRECORD_COND_UNION uDeleteCond; //ɾ - BYTE byRes[40]; // + VCA_DELETE_RECORD_TYPE dwDeleteType; //删除记录类型 + NET_VCA_DELETE_SNAPRECORD_COND_UNION uDeleteCond; //删除参数 + BYTE byRes[40]; //保留 }NET_VCA_DELETE_SNAPRECORD_COND, *LPNET_VCA_DELETE_SNAPRECORD_COND; typedef enum _VCA_SEARCH_DATABASE_TYPE_ { - VCA_NORMAL_SEARCH_DATABASE = 0x00000000, //ͨ - VCA_ADVANCE_SEARCH_DATABASE = 0x00000001 //߼ + VCA_NORMAL_SEARCH_DATABASE = 0x00000000, //普通检索 + VCA_ADVANCE_SEARCH_DATABASE = 0x00000001 //高级检索 }VCA_SEARCH_DATABASE_TYPE; typedef struct tagNET_VCA_ADVANCE_SEARCH_DATABASE_COND { - DWORD dwDataBaseType; //ݿͣVCA_DATABASE_TYPE - DWORD dwDataBaseID; //ݿID - DWORD dwFacePicID; //ͼƬID + DWORD dwDataBaseType; //数据库类型,详见VCA_DATABASE_TYPE + DWORD dwDataBaseID; //数据库ID + DWORD dwFacePicID; //人脸图片ID BYTE byRes[36]; }NET_VCA_ADVANCE_SEARCH_DATABASE_COND, *LPNET_VCA_ADVANCE_SEARCH_DATABASE_COND; typedef union tagNET_VCA_SEARCH_DATABASE_COND_UNION { DWORD uLen[25]; - NET_VCA_REGISTER_PIC struNormalFind; //ͨ - NET_VCA_ADVANCE_SEARCH_DATABASE_COND struAdvanceFind; //߼ + NET_VCA_REGISTER_PIC struNormalFind; //普通检索 + NET_VCA_ADVANCE_SEARCH_DATABASE_COND struAdvanceFind; //高级检索 }NET_VCA_SEARCH_DATABASE_COND_UNION, *LPNET_VCA_SEARCH_DATABASE_COND_UNION; typedef struct tagNET_VCA_SEARCH_DATABASE_PARAM { - DWORD dwSearchType; //ͣVCA_SEARCH_DATABASE_TYPE - NET_VCA_SEARCH_DATABASE_COND_UNION uSearchCond; // + DWORD dwSearchType; //检索类型,详见VCA_SEARCH_DATABASE_TYPE + NET_VCA_SEARCH_DATABASE_COND_UNION uSearchCond; //检索参数 BYTE byRes[16]; }NET_VCA_SEARCH_DATABASE_PARAM, *LPNET_VCA_SEARCH_DATABASE_PARAM; typedef struct tagNET_VCA_SEARCH_SNAPDB_COND { - DWORD dwChannel; //ͨ - DWORD dwDataBaseID; //ݿID - NET_DVR_TIME struStartTime;//ʼʱ - NET_DVR_TIME struStopTime;//ʱ - BYTE bySex; //Ա0-ã1-У2-Ů - BYTE byRes1[3]; // - BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ʼ£磺201106 - BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ֹ£201106 - BYTE byAttribute1[NAME_LEN]; //1 - BYTE byAttribute2[NAME_LEN]; //2 - NET_VCA_SEARCH_DATABASE_PARAM struSearchParam; // - DWORD dwMaxSearchNum; // - WORD wThreshold; //ֵ0-100 - BYTE byRes[78]; // + DWORD dwChannel; //通道 + DWORD dwDataBaseID; //数据库ID + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byRes1[3]; //保留 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byAttribute1[NAME_LEN]; //属性1 + BYTE byAttribute2[NAME_LEN]; //属性2 + NET_VCA_SEARCH_DATABASE_PARAM struSearchParam; //检索参数 + DWORD dwMaxSearchNum; //最大检索条数 + WORD wThreshold; //阈值,0-100 + BYTE byRes[78]; //保留 }NET_VCA_SEARCH_SNAPDB_COND, *LPNET_VCA_SEARCH_SNAPDB_COND; typedef struct tagNET_VCA_SEARCH_SNAPRECORD_RESULT { - DWORD dwSize; //ṹС - DWORD dwDataBaseID; //ݿID - DWORD dwRecordID; //¼ID - NET_DVR_TIME struSnapTime;//ץʱ - BYTE bySex; //Ա0-ã1-У2-Ů - BYTE byRes1[3]; // - BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ʼ£磺201106 - BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //ֹ£201106 - BYTE byAttribute1[NAME_LEN]; //1 - BYTE byAttribute2[NAME_LEN]; //2 - float fSimilarity; //ƶȣ[0.001,1] - DWORD dwFacePicID; //ͼID - DWORD dwFacePicLen; //ͼݳ - BYTE byRes[80]; // - BYTE *pFacePic; //ͼ + DWORD dwSize; //结构体大小 + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + NET_DVR_TIME struSnapTime;//抓拍时间 + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byRes1[3]; //保留 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byAttribute1[NAME_LEN]; //属性1 + BYTE byAttribute2[NAME_LEN]; //属性2 + float fSimilarity; //相似度,[0.001,1] + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + BYTE byRes[80]; //保留 + BYTE *pFacePic; //人脸图数据 }NET_VCA_SEARCH_SNAPRECORD_RESULT, *LPNET_VCA_SEARCH_SNAPRECORD_RESULT; typedef struct tagNET_VCA_DATARECORD_INFO { - DWORD dwSize; //ṹС - DWORD dwRecordID; //¼IDʱЧ޸ʱЧ - NET_VCA_HUMAN_ATTRIBUTE struAttribute; //ԱϢ - NET_VCA_REGISTER_PIC struRegisterPic; //ԱͼƬϢ - BYTE byRemark1[NAME_LEN]; //עϢ1 - BYTE byRemark2[64]; //עϢ2 - BYTE byRes[32]; // + DWORD dwSize; //结构体大小 + DWORD dwRecordID; //记录ID,添加时无效,修改时有效 + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + NET_VCA_REGISTER_PIC struRegisterPic; //人员图片信息 + BYTE byRemark1[NAME_LEN]; //备注信息1 + BYTE byRemark2[64]; //备注信息2 + BYTE byRes[32]; //保留 }NET_VCA_DATARECORD_INFO, *LPNET_VCA_DATARECORD_INFO; typedef struct tagNET_VCA_FAST_DATARECORD_INFO { - DWORD dwSize; //ṹС - NET_VCA_HUMAN_ATTRIBUTE struAttribute; //ԱϢ - BYTE byRemark1[NAME_LEN]; //עϢ1 - BYTE byRemark2[64]; //עϢ2 - DWORD dwImageLen; //ͼݳ - BYTE byRes[80]; // - BYTE *pImage; //ͼ + DWORD dwSize; //结构体大小 + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRemark1[NAME_LEN]; //备注信息1 + BYTE byRemark2[64]; //备注信息2 + DWORD dwImageLen; //图像数据长度 + BYTE byRes[80]; //保留 + BYTE *pImage; //图像数据 }NET_VCA_FAST_DATARECORD_INFO, *LPNET_VCA_FAST_DATARECORD_INFO; typedef struct tagNET_VCA_INQUIRE_DATARECORD_RESULT { - DWORD dwSize; //ṹС - DWORD dwDataBaseID; //ݿID - DWORD dwRecordID; //¼ID - NET_VCA_HUMAN_ATTRIBUTE struAttribute; //ԱϢ - BYTE byRemark1[NAME_LEN]; //עϢ1 - BYTE byRemark2[64]; //עϢ2 - DWORD dwFacePicID; //ͼID - DWORD dwFacePicLen; //ͼݳ - BYTE byRes[80]; // - BYTE *pFacePic; //ͼ + DWORD dwSize; //结构体大小 + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRemark1[NAME_LEN]; //备注信息1 + BYTE byRemark2[64]; //备注信息2 + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + BYTE byRes[80]; //保留 + BYTE *pFacePic; //人脸图数据 }NET_VCA_INQUIRE_DATARECORD_RESULT, *LPNET_VCA_INQUIRE_DATARECORD_RESULT; typedef struct tagNET_VCA_SEARCH_DATARECORD_RESULT { - DWORD dwSize; //ṹС - DWORD dwDataBaseID; //ݿID - DWORD dwRecordID; //¼ID - NET_VCA_HUMAN_ATTRIBUTE struAttribute; //ԱϢ - BYTE byRemark1[NAME_LEN]; //עϢ1 - BYTE byRemark2[64]; //עϢ2 - float fSimilarity; //ƶȣ[0.001,1] - DWORD dwFacePicID; //ͼID - DWORD dwFacePicLen; //ͼݳ - BYTE byRes[80]; // - BYTE *pFacePic; //ͼ + DWORD dwSize; //结构体大小 + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRemark1[NAME_LEN]; //备注信息1 + BYTE byRemark2[64]; //备注信息2 + float fSimilarity; //相似度,[0.001,1] + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + BYTE byRes[80]; //保留 + BYTE *pFacePic; //人脸图数据 }NET_VCA_SEARCH_DATARECORD_RESULT, *LPNET_VCA_SEARCH_DATARECORD_RESULT; typedef struct tagNET_VCA_DATARECORD_COND { - DWORD dwDataBaseID; //ݿID - NET_VCA_HUMANATTRIBUTE_COND struAttribute; //ԱϢ - BYTE byRes[80]; // + DWORD dwDataBaseID; //数据库ID + NET_VCA_HUMANATTRIBUTE_COND struAttribute; //人员信息 + BYTE byRes[80]; //保留 }NET_VCA_DATARECORD_COND, *LPNET_VCA_DATARECORD_COND; typedef union tagNET_VCA_DELETE_RECORD_COND_UNION { - NET_VCA_HUMANATTRIBUTE_COND struAttribute; //ԱϢɾ - DWORD dwRecordID; //¼IDɾ + NET_VCA_HUMANATTRIBUTE_COND struAttribute; //人员信息(批量删除) + DWORD dwRecordID; //记录ID(单条删除) }NET_VCA_DELETE_RECORD_COND_UNION, *LPNET_VCA_DELETE_RECORD_COND_UNION; typedef struct tagNET_VCA_DELETE_RECORD_COND { - VCA_DELETE_RECORD_TYPE dwDeleteType; //ɾ¼ - NET_VCA_DELETE_RECORD_COND_UNION uDeleteCond; //ɾ - BYTE byRes[40]; // + VCA_DELETE_RECORD_TYPE dwDeleteType; //删除记录类型 + NET_VCA_DELETE_RECORD_COND_UNION uDeleteCond; //删除参数 + BYTE byRes[40]; //保留 }NET_VCA_DELETE_RECORD_COND, *LPNET_VCA_DELETE_RECORD_COND; typedef struct tagNET_VCA_SEARCH_FACEDB_COND { - DWORD dwDataBaseID; //ݿID - NET_VCA_HUMANATTRIBUTE_COND struAttribute; //ԱϢ - NET_VCA_SEARCH_DATABASE_PARAM struSearchParam; // - DWORD dwMaxSearchNum; // - WORD wThreshold; //ֵ0-100 - BYTE byRes[78]; // + DWORD dwDataBaseID; //数据库ID + NET_VCA_HUMANATTRIBUTE_COND struAttribute; //人员信息 + NET_VCA_SEARCH_DATABASE_PARAM struSearchParam; //检索参数 + DWORD dwMaxSearchNum; //最大检索条数 + WORD wThreshold; //阈值,0-100 + BYTE byRes[78]; //保留 }NET_VCA_SEARCH_FACEDB_COND, *LPNET_VCA_SEARCH_FACEDB_COND; typedef struct tagNET_VCA_FIND_MATCHPIC_COND { DWORD dwSize; - DWORD dwDataBaseType; //ݿͣVCA_DATABASE_TYPE - DWORD dwDataBaseID; //ݿID - DWORD dwRecordID; //¼ID - BYTE byRes[64]; // + DWORD dwDataBaseType; //数据库类型,见VCA_DATABASE_TYPE + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + BYTE byRes[64]; //保留 }NET_VCA_FIND_MATCHPIC_COND, *LPNET_VCA_FIND_MATCHPIC_COND; typedef struct tagNET_VCA_FIND_MATCHPIC_RESULT { DWORD dwSize; - DWORD dwDataBaseType; //ݿͣVCA_DATABASE_TYPE - DWORD dwDataBaseID; //ݿID - DWORD dwRecordID; //¼ID - DWORD dwPicLen; //ͼƬ - BYTE byRes[64]; // - BYTE *pPicBuffer; //ͼƬָ + DWORD dwDataBaseType; //数据库类型,见VCA_DATABASE_TYPE + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + DWORD dwPicLen; //图片长度 + BYTE byRes[64]; //保留 + BYTE *pPicBuffer; //图片数据指针 }NET_VCA_FIND_MATCHPIC_RESULT, *LPNET_VCA_FIND_MATCHPIC_RESULT; typedef struct tagNET_DVR_REMOTECONTROL_ALARM_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ - WORD wDealyTime; //ӳʱ䣬λs + DWORD dwChannel; //通道号 + WORD wDealyTime; //延迟时间,单位s BYTE byRes[30]; }NET_DVR_REMOTECONTROL_ALARM_PARAM, *LPNET_DVR_REMOTECONTROL_ALARM_PARAM; typedef struct tagNET_DVR_REMOTECONTROL_STUDY_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ + DWORD dwChannel; //通道号 BYTE byRes[16]; }NET_DVR_REMOTECONTROL_STUDY_PARAM, *LPNET_DVR_REMOTECONTROL_STUDY_PARAM; typedef struct tagNET_DVR_WIRELESS_ALARM_STUDY_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byIndex; //߱ţ1-8 + DWORD dwChannel; //通道号 + BYTE byIndex; //无线报警序号,1-8 BYTE byRes[15]; }NET_DVR_WIRELESS_ALARM_STUDY_PARAM, *LPNET_DVR_WIRELESS_ALARM_STUDY_PARAM; -#define MAX_AUX_ALARM_NUM 8 // -#define MAX_WIRELESS_ALARM_NUM 8 //߱ +#define MAX_AUX_ALARM_NUM 8 //最大辅助报警个数 +#define MAX_WIRELESS_ALARM_NUM 8 //最大无线报警个数 typedef enum _IPC_AUX_ALARM_TYPE_ { - IPC_AUXALARM_UNKNOW = 0, //δ֪ - IPC_AUXALARM_PIR = 1, //PIR - IPC_AUXALARM_WIRELESS = 2, //߱ - IPC_AUXALARM_CALLHELP = 3 //ȱ + IPC_AUXALARM_UNKNOW = 0, //未知 + IPC_AUXALARM_PIR = 1, //PIR报警 + IPC_AUXALARM_WIRELESS = 2, //无线报警 + IPC_AUXALARM_CALLHELP = 3 //呼救报警 }IPC_AUX_ALARM_TYPE; typedef struct tagNET_DVR_AUDIO_LIMIT_ALARM_CFG { DWORD dwSize; - BYTE byEnable;//ʹ + BYTE byEnable;//使能 BYTE byRes1[3]; - DWORD dwDecibelLimit; //ֱ澯ֵ - NET_DVR_HANDLEEXCEPTION_V30 struHandleException; //쳣ʽ + DWORD dwDecibelLimit; //分贝告警阀值 + NET_DVR_HANDLEEXCEPTION_V30 struHandleException; //异常处理方式 BYTE byRes2[24]; }NET_IPC_AUDIO_LIMIT_ALARM_CFG,*LPNET_IPC_AUDIO_LIMIT_ALARM_CFG; typedef struct tagNET_DVR_BUTTON_DOWN_ALARM_CFG { DWORD dwSize; - BYTE byEnable;//ʹ + BYTE byEnable;//使能 BYTE byRes1[3]; - NET_DVR_HANDLEEXCEPTION_V30 struHandleException; //쳣ʽ + NET_DVR_HANDLEEXCEPTION_V30 struHandleException; //异常处理方式 BYTE byRes2[24]; }NET_IPC_BUTTON_DOWN_ALARM_CFG,*LPNET_IPC_BUTTON_DOWN_ALARM_CFG; typedef struct tagNET_IPC_PIR_ALARMCFG { - BYTE byAlarmName[NAME_LEN]; /* */ - BYTE byAlarmHandle; /* Ƿ 0- 1-*/ + BYTE byAlarmName[NAME_LEN]; /* 报警名称 */ + BYTE byAlarmHandle; /* 是否处理 0-不处理 1-处理*/ BYTE byRes1[3]; - NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* ʽ */ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 BYTE byRes[64]; }NET_IPC_PIR_ALARMCFG, *LPNET_IPC_PIR_ALARMCFG; typedef struct tagNET_IPC_PIR_ALARMCFG_EX { - BYTE byAlarmName[NAME_LEN]; /* */ - BYTE byAlarmHandle; /* Ƿ 0- 1-*/ + BYTE byAlarmName[NAME_LEN]; /* 报警名称 */ + BYTE byAlarmHandle; /* 是否处理 0-不处理 1-处理*/ BYTE byRes1[3]; - NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* ʽ */ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; BYTE byRes[1464]; }NET_IPC_PIR_ALARMCFG_EX, *LPNET_IPC_PIR_ALARMCFG_EX; -//ȱ +//呼救报警 typedef struct tagNET_IPC_CALLHELP_ALARMCFG { - BYTE byAlarmHandle; /* Ƿ 0- 1-*/ + BYTE byAlarmHandle; /* 是否处理 0-不处理 1-处理*/ BYTE byRes1[3]; - NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* ʽ */ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 BYTE byRes[64]; }NET_IPC_CALLHELP_ALARMCFG, *LPNET_IPC_CALLHELP_ALARMCFG; typedef struct tagNET_IPC_SINGLE_WIRELESS_ALARMCFG { - BYTE byAlarmName[NAME_LEN]; /* */ - BYTE byAlarmHandle; /* Ƿ 0- 1-*/ - BYTE byID; //߱ID1-8 + BYTE byAlarmName[NAME_LEN]; /* 报警名称 */ + BYTE byAlarmHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byID; //无线报警ID,1-8 BYTE byRes1[2]; - NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* ʽ */ - BYTE byRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ,Ϊ1ʾͨ + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 BYTE byRes[32]; }NET_IPC_SINGLE_WIRELESS_ALARMCFG, *LPNET_IPC_SINGLE_WIRELESS_ALARMCFG; typedef struct tagNET_IPC_WIRELESS_ALARMCFG { - NET_IPC_SINGLE_WIRELESS_ALARMCFG struWirelessAlarm[MAX_WIRELESS_ALARM_NUM]; //߱ + NET_IPC_SINGLE_WIRELESS_ALARMCFG struWirelessAlarm[MAX_WIRELESS_ALARM_NUM]; //单个无线报警参数 BYTE byRes[32]; }NET_IPC_WIRELESS_ALARMCFG, *LPNET_IPC_WIRELESS_ALARMCFG; typedef union tagNET_IPC_AUX_ALARMCFG_UNION { DWORD uLen[472]; - NET_IPC_PIR_ALARMCFG_EX struPIRAlarm; //PIR - NET_IPC_WIRELESS_ALARMCFG struWirelessAlarm; //߱ - NET_IPC_CALLHELP_ALARMCFG struCallHelpAlarm; //ȱ + NET_IPC_PIR_ALARMCFG_EX struPIRAlarm; //PIR报警参数 + NET_IPC_WIRELESS_ALARMCFG struWirelessAlarm; //无线报警参数 + NET_IPC_CALLHELP_ALARMCFG struCallHelpAlarm; //呼救报警参数 }NET_IPC_AUX_ALARMCFG_UNION, *LPNET_IPC_AUX_ALARMCFG_UNION; typedef struct tagNET_IPC_SINGLE_AUX_ALARMCFG { - BYTE byAlarmType; //ͣIPC_AUX_ALARM_TYPE + BYTE byAlarmType; //报警器类型,详见IPC_AUX_ALARM_TYPE BYTE byRes1[3]; - NET_IPC_AUX_ALARMCFG_UNION uAlarm; // + NET_IPC_AUX_ALARMCFG_UNION uAlarm; //报警参数 BYTE byRes[16]; }NET_IPC_SINGLE_AUX_ALARMCFG, *LPNET_IPC_SINGLE_AUX_ALARMCFG; typedef struct tagNET_IPC_AUX_ALARMCFG { DWORD dwSize; - NET_IPC_SINGLE_AUX_ALARMCFG struAlarm[MAX_AUX_ALARM_NUM]; // + NET_IPC_SINGLE_AUX_ALARMCFG struAlarm[MAX_AUX_ALARM_NUM]; //报警参数 BYTE byRes[64]; }NET_IPC_AUX_ALARMCFG, *LPNET_IPC_AUX_ALARMCFG; typedef union tagNET_IPC_AUXALARM_UPLOAD_UNION { DWORD uLen[66]; - NET_IPC_PIR_ALARMCFG struPIRAlarm; //PIR - NET_IPC_SINGLE_WIRELESS_ALARMCFG struWirelessAlarm; //߱ - NET_IPC_CALLHELP_ALARMCFG struCallHelpAlarm; //ȱ + NET_IPC_PIR_ALARMCFG struPIRAlarm; //PIR报警参数 + NET_IPC_SINGLE_WIRELESS_ALARMCFG struWirelessAlarm; //无线报警参数 + NET_IPC_CALLHELP_ALARMCFG struCallHelpAlarm; //呼救报警参数 }NET_IPC_AUXALARM_UPLOAD_UNION, *LPNET_IPC_AUXALARM_UPLOAD_UNION; typedef struct tagNET_IPC_AUXALARM_RESULT { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byAlarmType; //ͣIPC_AUX_ALARM_TYPE + DWORD dwChannel; //通道号 + BYTE byAlarmType; //报警器类型,详见IPC_AUX_ALARM_TYPE BYTE byRes1[3]; - NET_IPC_AUXALARM_UPLOAD_UNION struAuxAlarm; // - BYTE byDeviceID[NAME_LEN];/*豸ID*/ + NET_IPC_AUXALARM_UPLOAD_UNION struAuxAlarm; //报警结果参数 + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ BYTE byRes[32]; }NET_IPC_AUXALARM_RESULT, *LPNET_IPC_AUXALARM_RESULT; typedef struct tagNET_DVR_PREVIEW_DISPLAYCFG { - DWORD dwSize; // ṹС - BYTE byCorrectMode; //Уģʽ0-У1-оƬУ - BYTE byMountType; //װͣ0-1-棬2-ǽ + DWORD dwSize; // 结构体大小 + BYTE byCorrectMode; //校正模式,0-软件校正,1-芯片校正 + BYTE byMountType; //安装类型,0-吸顶,1-桌面,2-墙面 /* - 0-ģʽ1+ȫ+3PTZ (ԭзʵʱģʽһ) - 1-ģʽ2+4PTZ(ԭʵʱģʽһ) - 2-ģʽ3()+()+3PTZ - 3-ģʽ4ȫչ(+) - 4-ģʽ54PTZ - 5-ģʽ6ۣ - 6-ģʽ7: γȫչģʽ - 7-ģʽ8: 4PTZںģʽ + 0-模式1:鱼眼+全景+3PTZ (与原有非实时模式一致); + 1-模式2:鱼眼+4PTZ(与原有实时模式一致); + 2-模式3:鱼眼(主)+鱼眼(子)+3PTZ; + 3-模式4:全景展开(主码流+子码流); + 4-模式5:4PTZ; + 5-模式6:鱼眼; + 6-模式7: 经纬度全景展开模式; + 7-模式8: 4PTZ融合模式; */ - BYTE byRealTimeOutput; //ʵʱ0 -ã1- + BYTE byRealTimeOutput; //实时输出,0 -不启用,1- 启用 BYTE byRes[61]; }NET_DVR_PREVIEW_DISPLAYCFG, *LPNET_DVR_PREVIEW_DISPLAYCFG; typedef struct tagNET_DVR_REMOTECONTROL_PTZ_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ - DWORD dwPTZCommand; //PTZ - NET_VCA_POINT struVcaPoint; //Ԥ - DWORD dwSpeed; //ƵٶȣȡֵΧ[0,7] - DWORD dwStop; //ֹͣʼ0-ʼ1-ֹͣ + DWORD dwChannel; //通道号 + DWORD dwPTZCommand; //PTZ控制命令 + NET_VCA_POINT struVcaPoint; //预览界面点坐标 + DWORD dwSpeed; //控制的速度,取值范围[0,7] + DWORD dwStop; //停止动作或开始动作:0-开始;1-停止 BYTE byRes[32]; }NET_DVR_REMOTECONTROL_PTZ_PARAM, *LPNET_DVR_REMOTECONTROL_PTZ_PARAM; typedef struct tagNET_DVR_PRESET_POINT_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ - DWORD dwPTZPresetCmd; //Ԥõ - NET_VCA_POINT struVcaPoint; //Ԥ - DWORD dwPresetIndex; //Ԥõţ1ʼ֧255Ԥõ - WORD wZoomCoordinate;///<Ԥõ㴰Zoomֵ + DWORD dwChannel; //通道号 + DWORD dwPTZPresetCmd; //预置点控制命令 + NET_VCA_POINT struVcaPoint; //预览界面点坐标 + DWORD dwPresetIndex; //预置点的序号(从1开始),最多支持255个预置点 + WORD wZoomCoordinate;///<预置点窗口Zoom值 BYTE byRes[30]; }NET_DVR_PRESET_POINT_PARAM, *LPNET_DVR_PRESET_POINT_PARAM; typedef struct tagNET_DVR_PTZ_CRUISE_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ - DWORD dwPTZCruiseCmd; //Ѳ - NET_VCA_POINT struVcaPoint; //Ԥ - WORD wCruiseRoute; //Ѳ·֧32·Ŵ1ʼ - WORD wCruisePoint; //Ѳ㣬֧32㣨Ŵ1ʼ - WORD wInput; //ͬѲʱֵͬԤõ(255)ʱ(255)ٶ(40) - WORD wZoomCoordinate;///<Ԥõ㴰Zoomֵ + DWORD dwChannel; //通道号 + DWORD dwPTZCruiseCmd; //巡航控制命令 + NET_VCA_POINT struVcaPoint; //预览界面点坐标 + WORD wCruiseRoute; //巡航路径,最多支持32条路径(序号从1开始) + WORD wCruisePoint; //巡航点,最多支持32个点(序号从1开始) + WORD wInput; //不同巡航命令时的值不同,预置点(最大255)、时间(最大255)、速度(最大40) + WORD wZoomCoordinate;///<预置点窗口Zoom值 BYTE byRes[32]; }NET_DVR_PTZ_CRUISE_PARAM, *LPNET_DVR_PTZ_CRUISE_PARAM; typedef struct tagNET_DVR_WPS_PARAM { DWORD dwSize; - BYTE byEnableWps; //WPS0-1- + BYTE byEnableWps; //启用WPS,0-否,1-是 BYTE byRes[31]; }NET_DVR_WPS_PARAM, *LPNET_DVR_WPS_PARAM; typedef struct tagNET_DVR_PIN_PARAM { DWORD dwSize; - BYTE byPIN[8]; //PIN + BYTE byPIN[8]; //PIN码 BYTE byRes[32]; }NET_DVR_PIN_PARAM, *LPNET_DVR_PIN_PARAM; typedef struct tagNET_DVR_WPS_CONNECT_PARAM_ { DWORD dwSize; - BYTE byConnectType; //WPSӷʽ0-PBC,1-AP PIN + BYTE byConnectType; //WPS连接方式,0-PBC,1-AP PIN BYTE byRes1[3]; - BYTE byPIN[8]; //PIN(WPSӷʽΪAP PINʱЧ) - BYTE byEssid[IW_ESSID_MAX_SIZE]; //essid(WPSӷʽΪAP PINʱЧ) + BYTE byPIN[8]; //PIN码(WPS连接方式为AP PIN时有效) + BYTE byEssid[IW_ESSID_MAX_SIZE]; //essid(WPS连接方式为AP PIN时有效) BYTE byRes[32]; }NET_DVR_WPS_CONNECT_PARAM, *LPNET_DVR_WPS_CONNECT_PARAM; typedef struct tagNET_DVR_DECODER_JOINT_PARAM { - DWORD dwSize; // ṹС - BYTE byJointed; // 0 ûй 1 Ѿ - BYTE byRes1[3]; // ֽ - NET_DVR_IPADDR struIP; // IPַ - WORD wPort; // Ķ˿ں - WORD wChannel; // Ľͨ - BYTE sDeviceName[NAME_LEN]; //豸 - BYTE sChanName[NAME_LEN]; //Ľͨ - BYTE byRes2[32]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byJointed; // 0 没有关联 1 已经关联 + BYTE byRes1[3]; // 保留字节 + NET_DVR_IPADDR struIP; // 被关联解码器的IP地址 + WORD wPort; // 被关联解码器的端口号 + WORD wChannel; // 被关联解码器的解码通道号 + BYTE sDeviceName[NAME_LEN]; //被关联解码器的设备名称 + BYTE sChanName[NAME_LEN]; //被关联解码器的解码通道名称 + BYTE byRes2[32]; // 保留字节 }NET_DVR_DECODER_JOINT_PARAM, *LPNET_DVR_DECODER_JOINT_PARAM; typedef struct tagNET_DVR_PIC_VIEW_PARAM { DWORD dwSize; - NET_DVR_IPADDR struCuIp; //CUIPַ - WORD wPort;/*CU˿*/ - BYTE bySourceIndex; //źԴͨ + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ + BYTE bySourceIndex; //信号源通道号 BYTE byRes[29]; }NET_DVR_PIC_VIEW_PARAM, *LPNET_DVR_PIC_VIEW_PARAM; #define DVCS_DEVICEID_LEN 16 -//2012-03-13ͼƬעϢص +//2012-03-13图片回显注册消息回调 typedef struct tagNET_DVR_PICVIEW_CALLBACKPARAM { DWORD dwUserID; BYTE sDeviceID[DVCS_DEVICEID_LEN]; - LONG nPicViewHandle; //Ծ - WORD wSignalIndex; //źԴ - WORD wHeadLen; //ļͷ ˽еļͷ40 - BYTE byHeadBuf[100]; //ļͷ + LONG nPicViewHandle; //回显句柄 + WORD wSignalIndex; //信号源索引 + WORD wHeadLen; //文件头长度 私有的码流文件头都是40 + BYTE byHeadBuf[100]; //文件头 BYTE byRes2[32]; }NET_DVR_PICVIEW_CALLBACKPARAM, *LPNET_DVR_PICVIEW_CALLBACKPARAM; @@ -31966,11 +31966,11 @@ typedef struct tagNET_DVR_PICVIEW_CALLBACKPARAM typedef struct tagNET_DVR_DEVICEID_INFO { DWORD dwSize; - DWORD dwDeviceIndex; //豸 - BYTE byWallNo; //ǽţ1ʼ + DWORD dwDeviceIndex; //设备序号 + BYTE byWallNo; //墙号,从1开始 BYTE byRes1[27]; - DWORD dwChan; //ͨ - DWORD dwInputSignalIndex; //źԴʽʹ + DWORD dwChan; //通道号 + DWORD dwInputSignalIndex; //信号源索引,集中式大屏控制器使用 BYTE byRes2[60]; }NET_DVR_DEVICEID_INFO, *LPNET_DVR_DEVICEID_INFO; @@ -31978,51 +31978,51 @@ typedef struct tagNET_DVR_DEVICEID_INFO typedef struct tagNET_DVR_SINGLE_NETPARAM { DWORD dwSize; - BYTE byUseDhcp; //ǷDHCP 0xff-Ч 0- 1- + BYTE byUseDhcp; //是否启用DHCP 0xff-无效 0-不启用 1-启用 BYTE byRes1[3]; - NET_DVR_IPADDR struDevIP; // 豸IPַ - NET_DVR_IPADDR struSubnetMask; // 豸 - NET_DVR_IPADDR struGateway; // 豸 - WORD wDevPort; // 豸˿ں - BYTE byMACAddr[MACADDR_LEN]; // MAC ַ(ֻܻȡ) + NET_DVR_IPADDR struDevIP; // 设备IP地址 + NET_DVR_IPADDR struSubnetMask; // 设备子网掩码 + NET_DVR_IPADDR struGateway; // 设备网关 + WORD wDevPort; // 设备端口号 + BYTE byMACAddr[MACADDR_LEN]; // MAC 地址(只能获取) BYTE byRes2[16]; } NET_DVR_SINGLE_NETPARAM, *LPNET_DVR_SINGLE_NETPARAM; typedef struct tagNET_DVR_CHAN_INFO { DWORD dwSize; - BYTE byValid; //0-Ч 1-Ч + BYTE byValid; //0-无效 1-有效 BYTE byRes1[3]; - BYTE sChanName[NAME_LEN]; //ͨ - NET_DVR_COLOR struVideoColor; //źԴɫ - WORD wResolutionX; //ǰֱ--- - WORD wResolutionY; //ǰֱ--- + BYTE sChanName[NAME_LEN]; //通道名称 + NET_DVR_COLOR struVideoColor; //信号源颜色 + WORD wResolutionX; //当前分辨率---宽 + WORD wResolutionY; //当前分辨率---高 BYTE byRes2[40]; } NET_DVR_CHAN_INFO, *LPNET_DVR_CHAN_INFO; -//豸Ϣ +//编码子设备信息 typedef struct tagNET_DVR_CODEDEV_INFO { - NET_DVR_CHAN_INFO struChanInfo[MAX_CHANNUM/*16*/];/*豸ͨϢ*/ + NET_DVR_CHAN_INFO struChanInfo[MAX_CHANNUM/*16*/];/*设备通道信息*/ } NET_DVR_CODEDEV_INFO, *LPNET_DVR_CODEDEV_INFO; -//豸Ϣ +//解码子设备信息 typedef struct tagNET_DVR_DECODEDEV_INFO { BYTE byRes[1408]; } NET_DVR_DECODEDEV_INFO, *LPNET_DVR_DECODEDEV_INFO; -//źԴϢ +//网络信号源信息 typedef struct tagNET_DVR_NETSIGNAL_INFO { DWORD dwSize; - BYTE byDevName[NAME_LEN/*32*/];//źԴ + BYTE byDevName[NAME_LEN/*32*/];//网络信号源名称 NET_DVR_PU_STREAM_CFG struPuStream; - BYTE byValid; //ǷЧ0-ЧɾʱΪ0 1-ЧӺ޸ʱΪ1/ - BYTE byRes1[3]; // - BYTE sGroupName[NAME_LEN/*32*/];//źԴźԴ - WORD wResolutionX; //ǰֱ--- - WORD wResolutionY; //ǰֱ--- + BYTE byValid; //是否有效,0-无效,删除时设为0 1-有效,添加和修改时设为1/ + BYTE byRes1[3]; //保留 + BYTE sGroupName[NAME_LEN/*32*/];//网络信号源所在组的组名,网络信号源根据这个组名来分类 + WORD wResolutionX; //当前分辨率---宽 + WORD wResolutionY; //当前分辨率---高 BYTE byRes2[24]; }NET_DVR_NETSIGNAL_INFO, *LPNET_DVR_NETSIGNAL_INFO; @@ -32034,127 +32034,127 @@ typedef struct tagNET_DVR_NETSIGNALDEV_INFO typedef union tagNET_DVR_DIFFDEV_INFO { - NET_DVR_CODEDEV_INFO struCodeDevInfo; //豸Ϣ - NET_DVR_DECODEDEV_INFO struDecodeDevInfo; //豸Ϣ - NET_DVR_NETSIGNALDEV_INFO struNetSignalInfo; //źԴϢ + NET_DVR_CODEDEV_INFO struCodeDevInfo; //编码设备信息 + NET_DVR_DECODEDEV_INFO struDecodeDevInfo; //解码设备信息 + NET_DVR_NETSIGNALDEV_INFO struNetSignalInfo; //网络信号源信息 } NET_DVR_DIFFDEV_INFO, *LPNET_DVR_DIFFDEV_INFO; -/*ע豸Ϣ*/ +/*注册设备信息*/ typedef enum tagNET_DVCS_DEVICE_TYPE { - NET_DVR_BNC_PROC = 1, /* BNC */ - NET_DVR_RGB_PROC, /* RGB */ - NET_DVR_STP_PROC, /* ת봦 */ - NET_DVR_DISP_PROC, /* ʾ */ - NET_DVR_NETSIGNAL, //źԴ - NET_DVR_SDI_PROC, //SDI - NET_DVR_BIW_PROC, //8·BNC - NET_DVR_DON_PROC, //ʾ - NET_DVR_TVI_PROC, //TVI - NET_DVR_DI2_PROC, //2·DVI봦 - NET_DVR_DO2_PROC, //2·DVI豸 - NET_DVR_UHDI_PROC, //DP/HDMI 1·4K豸 - NET_DVR_YI2_PROC, //·YPbPr - NET_DVR_HI2_PROC, // HDMIڵ(2·) - NET_DVR_VI2_PROC, // VGAڵ(2·) - NET_DVR_SI2_PROC, // SDIڵ(2·) - NET_DVR_HO2_PROC, // HDMIڵ(2·) - NET_DVR_S24G_PROC, // C20Nרǧ׽(24·) - NET_DVR_S24X_PROC // C20Nר׽(24·) + NET_DVR_BNC_PROC = 1, /* BNC处理器 */ + NET_DVR_RGB_PROC, /* RGB处理器 */ + NET_DVR_STP_PROC, /* 转码处理器 */ + NET_DVR_DISP_PROC, /* 显示处理器 */ + NET_DVR_NETSIGNAL, //网络信号源 + NET_DVR_SDI_PROC, //SDI处理器 + NET_DVR_BIW_PROC, //8路BNC处理器 + NET_DVR_DON_PROC, //显示处理器 + NET_DVR_TVI_PROC, //TVI处理器 + NET_DVR_DI2_PROC, //2路DVI输入处理器 + NET_DVR_DO2_PROC, //2路DVI输出设备 + NET_DVR_UHDI_PROC, //DP/HDMI 1路4K超高清输入设备 + NET_DVR_YI2_PROC, //两路YPbPr输入板 + NET_DVR_HI2_PROC, // HDMI输入节点(2路) + NET_DVR_VI2_PROC, // VGA输入节点(2路) + NET_DVR_SI2_PROC, // SDI输入节点(2路) + NET_DVR_HO2_PROC, // HDMI输出节点(2路) + NET_DVR_S24G_PROC, // C20N专用千兆交换机(24路) + NET_DVR_S24X_PROC // C20N专用万兆交换机(24路) }NET_DVCS_DEVICE_TYPE; typedef struct tagNET_DVR_SINGLE_DEV_INFO { DWORD dwSize; - DWORD dwSoftVersion; /*豸汾(ֻܻȡ) 8λΪ汾ţθ8λΪΰ汾ţ16λΪ޸汾*/ - DWORD dwSoftwareBuildDate; //汾Build, 0xYYYYMMDD - BYTE byUseInSys; /*Ƿϵͳʹ*/ - BYTE byDevStatus; /*豸ǰ״̬0-ߣ1-(ֻܻȡ)*/ - BYTE byDeviceType; /*豸(ֻܻȡ) DEVICE_TYPE*/ + DWORD dwSoftVersion; /*设备软件版本号(只能获取) 最高8位为主版本号,次高8位为次版本号,低16位为修复版本号*/ + DWORD dwSoftwareBuildDate; //版本编译日期Build, 0xYYYYMMDD + BYTE byUseInSys; /*是否在系统中使用*/ + BYTE byDevStatus; /*设备当前状态,0-下线,1-上线(只能获取)*/ + BYTE byDeviceType; /*设备类型(只能获取) 见DEVICE_TYPE*/ BYTE byRes1[17]; - BYTE sDevName[NAME_LEN]; /*豸*/ - NET_DVR_SINGLE_NETPARAM struEtherNet[MAX_ETHERNET]; /*豸*/ - BYTE sSerialNumber[SERIALNO_LEN]; /*豸к*/ - NET_DVR_DIFFDEV_INFO struSubDevInfo; /*豸Ϣ*/ - DWORD dwDeviceIndex; //豸ţC20NY10豸ȫֱ - DWORD dwSubBoardNo; //ֲʽ豸ӰţC20NY10豸ȫֱţ1ʼΪ0ʱֶЧӰĬΪ1 - BYTE bySubSysNo; //ֲʽ豸ӰϵϵͳţӰȫ֣1ʼΪ0ʱֶЧϵͳĬΪ1 + BYTE sDevName[NAME_LEN]; /*设备名称*/ + NET_DVR_SINGLE_NETPARAM struEtherNet[MAX_ETHERNET]; /*设备网络参数*/ + BYTE sSerialNumber[SERIALNO_LEN]; /*设备序列号*/ + NET_DVR_DIFFDEV_INFO struSubDevInfo; /*设备信息*/ + DWORD dwDeviceIndex; //设备序号,相对于C20N或Y10等设备的全局编号 + DWORD dwSubBoardNo; //分布式设备所属的子板编号,相对于C20N或Y10等设备的全局编号,从1开始,为0时该字段无效,子板编号默认为1 + BYTE bySubSysNo; //分布式设备所属的子板上的子系统编号,相对于子板全局,从1开始,为0时该字段无效,子系统号默认为1 BYTE byRes3[3]; - WORD wStartAudioTalkChanNo; //ֲʽ豸Խʼͨ - WORD wAudioTalkChanNum; //ֲʽ豸Խͨŵ + WORD wStartAudioTalkChanNo; //分布式设备上语音对讲的起始通道号 + WORD wAudioTalkChanNum; //分布式设备上语音对讲通道号的数量 BYTE byRes2[36]; } NET_DVR_SINGLE_DEV_INFO, *LPNET_DVR_SINGLE_DEV_INFO; typedef struct tagNET_DVR_DEVLIST { DWORD dwSize; - DWORD dwDevNums;//豸صķֲʽ豸 + DWORD dwDevNums;//设备返回的分布式子设备数量 BYTE *pBuffer; BYTE byRes1[3]; - DWORD dwBufLen;//ָ볤ȣ + DWORD dwBufLen;//所分配指针长度,输入参数 BYTE byRes2[64]; } NET_DVR_DEVLIST,*LPNET_DVR_DEVLIST; typedef struct tagNET_DVR_DEV_BASE_INFO { DWORD dwSize; - BYTE byEnable; /*Ƿϵͳʹ*/ - BYTE byDeviceType; /*豸(ֻܻȡ)*/ + BYTE byEnable; /*是否在系统中使用*/ + BYTE byDeviceType; /*设备类型(只能获取)*/ BYTE byRes1[2]; - BYTE sDevName[NAME_LEN]; /*豸*/ + BYTE sDevName[NAME_LEN]; /*设备名称*/ BYTE byRes2[24]; } NET_DVR_DEV_BASE_INFO,*LPNET_DVR_DEV_BASE_INFO; -/*Ϣ*/ +/*网络配置信息*/ typedef struct tagNET_DVR_NETPARAM { DWORD dwSize; - NET_DVR_SINGLE_NETPARAM struEtherNet[MAX_ETHERNET];//̫ + NET_DVR_SINGLE_NETPARAM struEtherNet[MAX_ETHERNET];//以太网口 BYTE byRes[64]; } NET_DVR_NETPARAM, *LPNET_DVR_NETPARAM; -// Ļ豸ϵ(16ֽ) +// 绑定屏幕和设备关系(16个字节) typedef struct tagNET_DVR_DISP_SCREEN { DWORD dwSize; - WORD wScreenID; // ĻID, IDŴ1ʼ - BYTE byWallNo; // ǽ - BYTE byRes1; // 1 - DWORD dwDeviceIndex; // 豸 - BYTE byRes2[16]; // 2 + WORD wScreenID; // 屏幕ID号, ID号从1开始 + BYTE byWallNo; // 电视墙号 + BYTE byRes1; // 保留1 + DWORD dwDeviceIndex; // 输出设备序号 + BYTE byRes2[16]; // 保留2 }NET_DVR_DISP_SCREEN, *LPNET_DVR_DISP_SCREEN; -// Ļ +// 屏幕控制 typedef struct tagNET_DVR_TEXTSHOW { DWORD dwSize; - BYTE byShowText;//Ƿʾ֣1-ʾ֣0-ʾ + BYTE byShowText;//是否显示文字,1-显示文字,0-不显示文字 BYTE byRes[35]; }NET_DVR_TEXTSHOW, *LPNET_DVR_TEXTSHOW; typedef struct tagNET_DVR_SCREENLIST { DWORD dwSize; - BYTE byWallNo; //ǽţ1ʼ + BYTE byWallNo; //电视墙号,从1开始 BYTE byRes[11]; - DWORD dwScreenNums;//豸صӳʾ + DWORD dwScreenNums;//设备返回的映射显示屏数量 BYTE *pBuffer; - DWORD dwBufLen;//ָ볤ȣ + DWORD dwBufLen;//所分配指针长度,输入参数 } NET_DVR_SCREENLIST,*LPNET_DVR_SCREENLIST; typedef struct tagNET_DVR_OPERATE_DEVICE { DWORD dwSize; - DWORD dwSubCommand; //豸1-豸ʼ2-ֹͣ - DWORD dwDeviceIndex;//豸 + DWORD dwSubCommand; //设置设备的命令,1-设备开始升级,2-停止升级 + DWORD dwDeviceIndex;//设备序号 BYTE byRes[44]; }NET_DVR_OPERATE_DEVICE, *LPNET_DVR_OPERATE_DEVICE; -//豸 +//设备升级 typedef struct tagNET_DVR_UPGRADE_STATE { DWORD dwProgress; // 0-100 - BYTE byState; //ȣ1- 2- 3-ʧ + BYTE byState; //升级进度:1-升级完成 2-正在升级 3-升级失败 BYTE byRes2[31]; }NET_DVR_UPGRADE_STATE, *LPNET_DVR_UPGRADE_STATE; typedef void (CALLBACK *DVCS_UPGRADESTATE_CB)(LONG nUpgradeHandle, BYTE *pBuffer, DWORD dwBufSize, void* pUser); @@ -32170,59 +32170,59 @@ typedef enum typedef struct tagNET_DVR_START_PIC_VIEW_INFO { DWORD dwSize; - DWORD dwSignalIndex; //źԴţòڴ豸ֵΪ0 - DWORD dwDeviceIndex;//豸 + DWORD dwSignalIndex; //信号源序号,该参数用于大屏控制器,其他设备该值设为0 + DWORD dwDeviceIndex;//设备序号 BYTE byRes1[12]; - BYTE byChanIndex; //ͨ + BYTE byChanIndex; //通道号 BYTE byRes2[3]; - //Ƶۺƽ̨Բ - DWORD dwScreenNum; //ţ㿪ʼ - DWORD dwLayer; //ͼţ㿪ʼ - DWORD dwResolution;//Էֱ,1-QCIF,2-CIF,3-D1 - BYTE byFrame;//֡ʣλ֡/ - BYTE bySupportStreamView; //ͻǷ֧ԣ0-֧֣1-֧ + //视频综合平台回显参数 + DWORD dwScreenNum; //大屏序号:从零开始 + DWORD dwLayer; //图层号:从零开始 + DWORD dwResolution;//回显分辨率,1-QCIF,2-CIF,3-D1 + BYTE byFrame;//帧率,单位:帧/秒 + BYTE bySupportStreamView; //客户端是否支持码流回显,0-不支持,1-支持 BYTE byRes3[14]; }NET_DVR_START_PIC_VIEW_INFO, *LPNET_DVR_START_PIC_VIEW_INFO; typedef struct tagNET_DVR_DVCS_STATE_ALARM { DWORD dwSize; - BYTE byAlarmType; // ,1-豸ߣ2-豸 3- 4- 5-Ա½ 6-Ԥʼ,7-Ԥ8-ֱʱ仯9-ͼиʧܣ10-豸Դ㣬11-¶쳣 12-ڴСźԴֱʲ*/ - BYTE byDeviceType; // 豸 NET_DVCS_DEVICE_TYPE */ - BYTE byWallNo; // ǽţ1ʼ 0ʾЧ - BYTE byDeviceChanIndex; // 豸ͨţ0ʾЧֵʾͨ - DWORD dwDeviceIndex; // 豸ţ 0ʾЧ - WORD wResolutionX; // ֱ- 0ʾЧ - WORD wResolutionY; // ֱ- 0ʾЧ - WORD wTemperature; // 豸¶ λ϶, 0ʾЧ + BYTE byAlarmType; // 报警类型,1-设备上线,2-设备离线 3-服务器上线 4-服务器离线 5-管理员登陆 6-预案开始,7-预案结束,8-分辨率变化,9-图像切割失败,10-设备资源不足,11-温度异常 12-窗口大小与信号源分辨率不符合*/ + BYTE byDeviceType; // 设备类型 见定义NET_DVCS_DEVICE_TYPE */ + BYTE byWallNo; // 墙号,从1开始, 0表示无效 + BYTE byDeviceChanIndex; // 设备通道号,0表示无效,其他值表示通道号 + DWORD dwDeviceIndex; // 设备序号, 0表示无效 + WORD wResolutionX; // 分辨率-宽 0表示无效 + WORD wResolutionY; // 分辨率-高 0表示无效 + WORD wTemperature; // 设备温度 单位:摄氏度, 0表示无效 BYTE byRes[86]; }NET_DVR_DVCS_STATE_ALARM, *LPNET_DVR_DVCS_STATE_ALARM; typedef struct tagNET_DVR_PIC_ADJUST { DWORD dwSize; - BYTE bySubCommand; //궨DECODEPIC_LEFTADJUST - BYTE byScale; //ֵ - BYTE byPictureProportion; //ͼű 0-Ч 1-4:3, 2-16:9 + BYTE bySubCommand; //见宏定义DECODEPIC_LEFTADJUST等 + BYTE byScale; //调整的量值 + BYTE byPictureProportion; //图像缩放比例 0-无效 1-4:3, 2-16:9 BYTE byRes[29]; }NET_DVR_PIC_ADJUST, *LPNET_DVR_PIC_ADJUST; typedef struct tagNET_DVR_PICTURE_PARAM { DWORD dwSize; - BYTE byControlCommand; //л1-ʾ2-أ3-ȫɾGIFͼƬ - BYTE byUseType; //ͼƬͣ1-OSD 2-ͼ3-GIF - BYTE byWallNo; //ǽǽţ1ʼ - BYTE byPictureNo; //ͼƬ + BYTE byControlCommand; //切换命令,1-显示,2-隐藏,3-全部删除(针对GIF图片 ) + BYTE byUseType; //图片类型,1-OSD 2-底图,3-GIF + BYTE byWallNo; //电视墙墙号,从1开始 + BYTE byPictureNo; //图片序号 BYTE byRes[64]; }NET_DVR_PICTURE_PARAM, *LPNET_DVR_PICTURE_PARAM; -// 76SP豸POEͨӷʽ +// 76SP设备POE通道添加方式配置 typedef struct tagNET_DVR_POE_CHANNEL_ADD_MODE { - DWORD dwSize; //ṹС - BYTE byAddMode; //ӷʽ 0: 弴 1: ֶ - BYTE byRes1[127]; // + DWORD dwSize; //结构体大小 + BYTE byAddMode; //添加方式 0: 即插即用 1: 手动添加 + BYTE byRes1[127]; //保留 }NET_DVR_POE_CHANNEL_ADD_MODE, *LPNET_DVR_POE_CHANNEL_ADD_MODE; #define MAX_ESATA_NUM 16 @@ -32231,8 +32231,8 @@ typedef struct tagNET_DVR_POE_CHANNEL_ADD_MODE typedef struct tagNET_DVR_ESATA_MINISAS_USAGE { DWORD dwSize; - BYTE byESATAUsage[MAX_ESATA_NUM]; // ʾڼeSATA0Ĭϱ 1Ĭ¼ - BYTE byMiniSASUsage[MAX_MINISAS_NUM]; // ʾڼminiSAS0Ĭϱ 1Ĭ¼ + BYTE byESATAUsage[MAX_ESATA_NUM]; // 数组索引表示第几个eSATA,0:默认备份 1:默认录像 + BYTE byMiniSASUsage[MAX_MINISAS_NUM]; // 数组索引表示第几个miniSAS,0:默认备份 1:默认录像 BYTE byRes[32]; }NET_DVR_ESATA_MINISAS_USAGE, *LPNET_DVR_ESATA_MINISAS_USAGE; @@ -32241,564 +32241,564 @@ typedef struct tagNET_DVR_ESATA_MINISAS_USAGE typedef struct tagNET_DVR_BACKUP_LOG_PARAM { DWORD dwSize; - BYTE byDiskDesc[DESC_LEN_32]; //ݴ - BYTE byHardDisk[MAX_DISK_NUM]; //豸ݵӲ̺ţݼȡǰ - BYTE byBackupHardDiskNum; //豸ݵӲ̸ - BYTE byContinue; //Ƿݣ0-1- - BYTE byAllLogBackUp ; /*Ƿȫݣ0-̺űݣ1-־Ϊ1ʱ豸ݵĴ̺źӲ̸Ч*/ + BYTE byDiskDesc[DESC_LEN_32]; //备份磁盘描述 + BYTE byHardDisk[MAX_DISK_NUM]; //需备份的硬盘号,备份几个取前几个 + BYTE byBackupHardDiskNum; //需备份的硬盘个数 + BYTE byContinue; //是否继续备份,0-不继续,1-继续 + BYTE byAllLogBackUp ; /*是否全部备份,0-按磁盘号备份,1-备份所有日志,当为1时,需备份的磁盘号和硬盘个数无效*/ BYTE byRes[29]; }NET_DVR_BACKUP_LOG_PARAM, *LPNET_DVR_BACKUP_LOG_PARAM; typedef struct tagNET_DVR_DIGITAL_CHANNEL_STATE { DWORD dwSize; - BYTE byDigitalAudioChanTalkState[MAX_CHANNUM_V30]; //ʾͨĶԽ״̬ 0-δʹã1-ʹ, 0xffЧ - BYTE byDigitalChanState[MAX_CHANNUM_V30]; /*ͨ״̬ byDigitalChanErrState[0] - ʾһֵͨʾ״̬룬NET_SDK_DIGITAL_CHANNEL_STATUSԴƣ0ʾЧ*/ - BYTE byDigitalAudioChanTalkStateEx[MAX_CHANNUM_V30*3]; //ʾͨĶԽ״̬ӵMAX_CHANNUM_V30+1 MAX_CHANNUM_V30*4 0-δʹã1-ʹ, 0xffЧ - BYTE byDigitalChanStateEx[MAX_CHANNUM_V30*3]; /*ͨ״̬ byDigitalChanErrStateEx[0]ʾڴӵMAX_CHANNUM_V30+1ֵͨʾ״̬룬NET_SDK_DIGITAL_CHANNEL_STATUSԴƣ0ʾЧ*/ - BYTE byAnalogChanState[MAX_ANALOG_CHANNUM];//ʾģͨǷ,0-,1- + BYTE byDigitalAudioChanTalkState[MAX_CHANNUM_V30]; //表示数字语音通道的对讲状态 0-未使用,1-使用中, 0xff无效 + BYTE byDigitalChanState[MAX_CHANNUM_V30]; /*数字通道的连接状态 byDigitalChanErrState[0] + 表示第一个数字通道,具体值表示状态码,祥见NET_SDK_DIGITAL_CHANNEL_STATUS,以此类推,0表示无效*/ + BYTE byDigitalAudioChanTalkStateEx[MAX_CHANNUM_V30*3]; //表示数字语音通道的对讲状态,从第MAX_CHANNUM_V30+1 到第MAX_CHANNUM_V30*4个, 0-未使用,1-使用中, 0xff无效 + BYTE byDigitalChanStateEx[MAX_CHANNUM_V30*3]; /*数字通道的连接状态 byDigitalChanErrStateEx[0]表示第从第MAX_CHANNUM_V30+1个个数字通道,具体值表示状态码,祥见NET_SDK_DIGITAL_CHANNEL_STATUS,以此类推,0表示无效*/ + BYTE byAnalogChanState[MAX_ANALOG_CHANNUM];//表示模拟通道是否启用,0-禁用,1-启用 BYTE byRes[32]; }NET_DVR_DIGITAL_CHANNEL_STATE, *LPNET_DVR_DIGITAL_CHANNEL_STATE; -//ͨ״̬ +//数字通道状态 typedef enum { - NET_SDK_DC_STATUS_CONNECTED = 1, // - NET_SDK_DC_STATUS_CONNECTING, // - NET_SDK_DC_STATUS_BAND_WIDTH_EXCEED, //ϵͳ - NET_SDK_DC_STATUS_DOMAIN_ERROR, // - NET_SDK_DC_STATUS_CHANNEL_ERROR, //ͨŴ - NET_SDK_DC_STATUS_ACCOUNT_ERROR, //û - NET_SDK_DC_STATUS_STREAM_TYPE_NOT_SUPPORT, //Ͳ֧ - NET_SDK_DC_STATUS_CONFLICT_WITH_DVR, //豸IPַͻ - NET_SDK_DC_STATUS_CONFLICT_WITH_IPC, //IPC IPַͻ - NET_SDK_DC_STATUS_NETWORK_UNREACHBALE, //粻ɴ - NET_SDK_DC_STATUS_IPC_NOT_EXIST, //IPͨδ - NET_SDK_DC_STATUS_IPC_EXCEPTION, //IPͨ쳣 - NET_SDK_DC_STATUS_OTHER_ERROR, // - NET_SDK_DC_STATUS_RESOLUTION_NOT_SUPPORT, //IPCֱʲ֧ - NET_SDK_DC_STATUS_IPC_LAN_ERR = 15, //IPCNVRԲƥ - NET_SDK_DC_STATUS_USER_LOCKED = 16, //û - NET_SDK_DC_STATUS_NOT_ACTIVATED = 17, //豸δ - NET_SDK_DC_STATUS_USER_NOT_EXIST = 18, //û - NET_SDK_DC_STATUS_IPC_UNREGISTERED = 19, //IPͨӦ豸δע(GB28181Э) - NET_SDK_DC_STATUS_POE_PORT_DETECTING = 20, //POEͨ - NET_SDK_DC_STATUS_RESOURCE_EXCEED = 21, /* IPCֱʣʳ*/ - NET_SDK_DC_STATUS_NEED_TO_REPAIR = 22, /* Ҫ*/ - NET_SDK_DC_STATUS_ACTIVATING = 23, /* IPCڼ */ - NET_SDK_DC_STATUS_TOKEN_AUTHENTCATE_FAILED = 24 /* token֤ʧ */ + NET_SDK_DC_STATUS_CONNECTED = 1, //已连接 + NET_SDK_DC_STATUS_CONNECTING, //正在连接 + NET_SDK_DC_STATUS_BAND_WIDTH_EXCEED, //超过系统带宽 + NET_SDK_DC_STATUS_DOMAIN_ERROR, //域名错误 + NET_SDK_DC_STATUS_CHANNEL_ERROR, //通道号错误 + NET_SDK_DC_STATUS_ACCOUNT_ERROR, //用户名或密码错误 + NET_SDK_DC_STATUS_STREAM_TYPE_NOT_SUPPORT, //流类型不支持 + NET_SDK_DC_STATUS_CONFLICT_WITH_DVR, //和设备IP地址冲突 + NET_SDK_DC_STATUS_CONFLICT_WITH_IPC, //和IPC IP地址冲突 + NET_SDK_DC_STATUS_NETWORK_UNREACHBALE, //网络不可达 + NET_SDK_DC_STATUS_IPC_NOT_EXIST, //IP通道未接入 + NET_SDK_DC_STATUS_IPC_EXCEPTION, //IP通道异常 + NET_SDK_DC_STATUS_OTHER_ERROR, //其他错误 + NET_SDK_DC_STATUS_RESOLUTION_NOT_SUPPORT, //IPC分辨率不支持 + NET_SDK_DC_STATUS_IPC_LAN_ERR = 15, //IPC语言与NVR语言不匹配 + NET_SDK_DC_STATUS_USER_LOCKED = 16, //用户被锁定 + NET_SDK_DC_STATUS_NOT_ACTIVATED = 17, //设备未激活 + NET_SDK_DC_STATUS_USER_NOT_EXIST = 18, //用户不存在 + NET_SDK_DC_STATUS_IPC_UNREGISTERED = 19, //IP通道对应设备未注册(GB28181协议接入) + NET_SDK_DC_STATUS_POE_PORT_DETECTING = 20, //POE通道检测中 + NET_SDK_DC_STATUS_RESOURCE_EXCEED = 21, /* IPC分辨率,码率超过限制*/ + NET_SDK_DC_STATUS_NEED_TO_REPAIR = 22, /* 子码流断连,需要重连*/ + NET_SDK_DC_STATUS_ACTIVATING = 23, /* IPC正在激活 */ + NET_SDK_DC_STATUS_TOKEN_AUTHENTCATE_FAILED = 24 /* token认证失败 */ }NET_SDK_DIGITAL_CHANNEL_STATUS; /*************************************ITS****************************/ -#define VERSION_LEN 32 //汾 -#define MAX_OVERLAP_ITEM_NUM 50 //ַ -#define ITS_MAX_DEVICE_NUM 32 //豸 +#define VERSION_LEN 32 //版本长度 +#define MAX_OVERLAP_ITEM_NUM 50 //最大字符叠加种数 +#define ITS_MAX_DEVICE_NUM 32 //最大设备个数 -//ն˻Ϣ +//终端基本信息 typedef struct tagNET_ITS_BASEINFO { DWORD dwSize; - BYTE byMainVer[VERSION_LEN]; // 㷨̰汾 - BYTE byMprVer[VERSION_LEN]; // ֡ʶ汾 - BYTE byBvtVer[VERSION_LEN]; // Ƶ汾 - BYTE byLptVer[VERSION_LEN]; // Ƶ汾 - BYTE byTvdVer[VERSION_LEN]; // Υ¼汾 - BYTE byTldVer[VERSION_LEN]; // źŵƼ汾 - BYTE byRes[252]; // Ԥֶ + BYTE byMainVer[VERSION_LEN]; // 算法主流程版本 + BYTE byMprVer[VERSION_LEN]; // 多帧识别库版本 + BYTE byBvtVer[VERSION_LEN]; // 背向视频库版本 + BYTE byLptVer[VERSION_LEN]; // 视频库版本 + BYTE byTvdVer[VERSION_LEN]; // 违章检测库版本 + BYTE byTldVer[VERSION_LEN]; // 信号灯检测库版本 + BYTE byRes[252]; // 预留字段 }NET_ITS_BASEINFO,*LPNET_ITS_BASEINFO; -//ͼƬϳɲ +//图片合成参数 typedef struct tagNET_ITS_IMGMERGE_CFG { DWORD dwSize; - BYTE byIsMerge; //ǷҪϳɣ0ϳɣ1ϳɣ - BYTE byCloseupProportion;//дͼ 1-ԭʼֱʴС2-ΪԭʼֱԴ(18) + BYTE byIsMerge; //是否需要合成(0:不合成;1:合成) + BYTE byCloseupProportion;//特写图比例 1-原始分辨率大小,2-宽高为原始分辨率两倍,以此类推(1~8) BYTE byRes1[2]; - DWORD dwOneMergeType; //ץĵͼϳɷʽܻȡдͼ + DWORD dwOneMergeType; //抓拍单张图合成方式(可能会截取特写图) /************************************************************************/ - /* 201 ͼƬкϳ,ϳɺͼƬΪͼ1,Ϊ2 */ - /* 202 ͼƬкϳ,ϳɺͼƬΪͼ2,Ϊ1 */ - /* 203 ºϳɣдϱ. */ - /* 204 ºϳɣд±. */ - /* 205 Һϳɣдұߡ */ - /* 206 Һϳɣд */ - /* 207 Ʒֺϳɣдͼϱ */ - /* 208 Ʒֺϳɣдͼ± */ - /* 209 Σ1Ϊд */ - /* 210 Σұ1Ϊд */ - /* 301 ͼƬкϳ,ϳɺͼƬΪͼ1,Ϊ3 */ - /* 302 ͼƬкϳ,ϳɺͼƬΪͼ3,Ϊ1 */ - /* 303 ͼƬȡһд,ͼƬ;ͼƬ""ͺϳ, - д;ϳɺͼƬΪͼ2,Ϊ2 */ - /* 304 ͼƬȡһд,ͼƬ;ͼƬ""ͺϳ, - д;ϳɺͼƬΪͼ1,Ϊ1 */ - /* 305 ͼƬȡһд,ͼƬ;ͼƬ""ͺϳ, - д;ϳɺͼƬΪͼ2,Ϊ2 */ - /* 306 ͼƬȡһд,ͼƬ;ͼƬ""ͺϳ, - д;ѹͼƬֱ,ϳɺͼƬΪͼ1,Ϊ1 */ - /* 307 ͼƬ"Ʒ"кϳ */ - /* 308 ͼƬ"Ʒ"кϳ */ - /* 309 ͼƬȡһд,ͼƬ;ͼƬ""ͺϳ, - д;ϳɺͼƬΪͼ2,Ϊ2 */ - /* 310 ͼƬȡһд,ͼƬ;ͼƬ""ͺϳ, - д;ϳɺͼƬΪͼ1,Ϊ1 */ - /* 311 ͼƬȡһд,ͼƬ;ͼƬ""ͺϳ, - д;ϳɺͼƬΪͼ2,Ϊ2 */ - /* 312 ͼƬȡһд,ͼƬ;ͼƬ""ͺϳ, - д;ѹͼƬֱ,ϳɺͼƬΪͼ1,Ϊ1 */ + /* 201 两张图片上下排列合成,合成后图片宽为单张图的1倍,高为2倍 */ + /* 202 两张图片左右排列合成,合成后图片宽为单张图的2倍,高为1倍 */ + /* 203 上下合成,特写在最上边. */ + /* 204 上下合成,特写在最下边. */ + /* 205 左右合成,特写在最右边。 */ + /* 206 左右合成,特写在最左边 */ + /* 207 品字合成,特写图在上边 */ + /* 208 倒品字合成,特写图在下边 */ + /* 209 唱字形,左边1张为特写 */ + /* 210 反唱字形,右边1张为特写 */ + /* 301 三张图片上下排列合成,合成后图片宽为单张图的1倍,高为3倍 */ + /* 302 三张图片左右排列合成,合成后图片宽为单张图的3倍,高为1倍 */ + /* 303 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在右下;合成后图片宽为单张图的2倍,高为2倍 */ + /* 304 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在右下;合成后图片宽为单张图的1倍,高为1倍 */ + /* 305 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在左上;合成后图片宽为单张图的2倍,高为2倍 */ + /* 306 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在左上;压缩图片分辨率,合成后图片宽为单张图的1倍,高为1倍 */ + /* 307 三张图片"品"字型排列合成 */ + /* 308 三张图片倒"品"字型排列合成 */ + /* 309 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在左下;合成后图片宽为单张图的2倍,高为2倍 */ + /* 310 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在左下;合成后图片宽为单张图的1倍,高为1倍 */ + /* 311 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在右上;合成后图片宽为单张图的2倍,高为2倍 */ + /* 312 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在右上;压缩图片分辨率,合成后图片宽为单张图的1倍,高为1倍 */ - /* 313 ͼƬȡһдͼƬ - ͼƬ"һ"ͺϳɣ - ˳Ϊдͼͼͼͼ */ - /* 314 ͼƬȡһдͼƬ - ͼƬ"һ"ͺϳɣ - ˳Ϊͼдͼͼͼ */ - /* 315 ͼƬȡһдͼƬ - ͼƬ"һ"ͺϳɣ - ˳Ϊͼͼдͼͼ */ - /* 316 ͼƬȡһдͼƬ - ͼƬ"һ"ͺϳɣ - ˳Ϊͼͼͼдͼ */ - /* 317 ͼƬȡһдͼƬ - ͼƬ"1"ͺϳɣ - ˳Ϊдͼͼͼͼ */ - /* 318 ͼƬȡһдͼƬ - ͼƬ"1"ͺϳɣ - ˳Ϊͼдͼͼͼ */ - /* 319 ͼƬȡһдͼƬ - ͼƬ"1"ͺϳɣ - ˳Ϊͼͼдͼͼ */ - /* 320 ͼƬȡһдͼƬ - ͼƬ"1"ͺϳɣ - ˳Ϊͼͼͼдͼ */ + /* 313 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片横"一"字型合成, + 顺序为:特写图、场景图、场景图、场景图 */ + /* 314 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片横"一"字型合成, + 顺序为:场景图、特写图、场景图、场景图 */ + /* 315 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片横"一"字型合成, + 顺序为:场景图、场景图、特写图、场景图 */ + /* 316 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片横"一"字型合成, + 顺序为:场景图、场景图、场景图、特写图 */ + /* 317 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片竖"1"字型合成, + 顺序为:特写图、场景图、场景图、场景图 */ + /* 318 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片竖"1"字型合成, + 顺序为:场景图、特写图、场景图、场景图 */ + /* 319 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片竖"1"字型合成, + 顺序为:场景图、场景图、特写图、场景图 */ + /* 320 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片竖"1"字型合成, + 顺序为:场景图、场景图、场景图、特写图 */ /************************************************************************/ - DWORD dwTwoMergeType; //ץͼϳɷʽ - DWORD dwThreeMergeType; //ץͼϳɷʽ - DWORD dwJpegQuality; //ѹ0~100 - DWORD dwCloseupIndex; //дͼץĵڼ - DWORD dwMerageMaxSize; //ϳͼƬС,300-10240(λKB) - WORD wCloseupDeviation; // дͼƫ(50~ͼƬ߶)λ: + DWORD dwTwoMergeType; //抓拍两张图合成方式 + DWORD dwThreeMergeType; //抓拍三张图合成方式 + DWORD dwJpegQuality; //压缩质量(0~100) + DWORD dwCloseupIndex; //特写图抓拍第几张 + DWORD dwMerageMaxSize; //合成图片大小的上限,300-10240(单位KB) + WORD wCloseupDeviation; // 特写图偏移量(50~图片高度),单位:像素 BYTE byRes[30]; }NET_ITS_IMGMERGE_CFG,*LPNET_ITS_IMGMERGE_CFG; -//ͨ +//交通数据主机 typedef struct tagNET_ITS_TRAFFIC_DATA_HOST { - NET_DVR_IPADDR struHostAddr; // ԶIP - WORD wHostPort; // ԶPort + NET_DVR_IPADDR struHostAddr; // 远程主机IP + WORD wHostPort; // 远程主机Port BYTE byRes1[2]; - DWORD dwDataType; // ϴԶͣ£λʾ - BYTE bySuspendUpload; // Ƿͣϴ0-ϴ1-ͣϴ - BYTE byUploadStrategy; // ϴԣ0-ϴ1-ͨʱϴ - WORD wUploadInterval; // ϴʱ䣨ms1~2000òֻʷЧ - DWORD dwUploadTimeOut; //ϴʱʱ + DWORD dwDataType; // 上传远程主机的数据类型(定义见下),按位表示 + BYTE bySuspendUpload; // 是否暂停数据上传:0-正常上传;1-暂停上传 + BYTE byUploadStrategy; // 上传策略:0-最新数据优先上传;1-按照通行时间上传 + WORD wUploadInterval; // 上传间隔时间(ms,1~2000),该参数只对历史数据有效 + DWORD dwUploadTimeOut; //上传超时时间 BYTE byRes[24]; }NET_ITS_TRAFFIC_DATA_HOST,*LPNET_ITS_TRAFFIC_DATA_HOST; -//ϴ +//数据上传参数 typedef struct tagNET_ITS_UPLOAD_CFG { DWORD dwSize; - NET_ITS_TRAFFIC_DATA_HOST struRemoteDataHost1; //սͨ1 - NET_ITS_TRAFFIC_DATA_HOST struRemoteDataHost2; //սͨ2 + NET_ITS_TRAFFIC_DATA_HOST struRemoteDataHost1; //接收交通数据主机1 + NET_ITS_TRAFFIC_DATA_HOST struRemoteDataHost2; //接收交通数据主机2 }NET_ITS_UPLOAD_CFG,*LPNET_ITS_UPLOAD_CFG; typedef struct tagNET_DVR_SYSTEM_TIME { - WORD wYear; // - WORD wMonth; // - WORD wDay; // - WORD wHour; //ʱ - WORD wMinute; // - WORD wSecond; // - WORD wMilliSec; // + WORD wYear; //年 + WORD wMonth; //月 + WORD wDay; //日 + WORD wHour; //时 + WORD wMinute; //分 + WORD wSecond; //秒 + WORD wMilliSec; //毫秒 BYTE byRes[2]; }NET_DVR_SYSTEM_TIME, *LPNET_DVR_SYSTEM_TIME; -//ͨ״̬Ϣ +//交通数据主机状态信息 typedef struct tagNET_ITS_TRAFFIC_DATA_INFO { - DWORD dwDataQuantity; // - DWORD dwDataRsendQuantity; //δҪϴͨģ - NET_DVR_SYSTEM_TIME struStartTime; //δݵʱ - NET_DVR_SYSTEM_TIME struEndTime; //δݵʱ - NET_DVR_IPADDR struDataHost; //սͨ + DWORD dwDataQuantity; //数据总量 + DWORD dwDataRsendQuantity; //未发送数量(需要上传交通数据主机的) + NET_DVR_SYSTEM_TIME struStartTime; //未发送数据的最早时间 + NET_DVR_SYSTEM_TIME struEndTime; //未发送数据的最晚时间 + NET_DVR_IPADDR struDataHost; //接收交通数据主机 }NET_ITS_TRAFFIC_DATA_INFO, *LPNET_ITS_TRAFFIC_DATA_INFO; -//ն˹״̬ +//终端工作状态 typedef struct tagNET_ITS_WORKSTATE { DWORD dwSize ; - BYTE byDevName[NAME_LEN]; // 豸 - DWORD dwRunTime; // ϵͳʱ䣬λs - NET_ITS_TRAFFIC_DATA_INFO struTrafficDataInfo[2]; //̨֧ϴõ - DWORD dwMemoryUsage; // ڴռʣڴռΪ30%˴30 - DWORD dwCpuUsage; // cpuռʣcpuռΪ30%˴30 - DWORD dwDevTemperature; // ¶ - DWORD dwDeviceStatic; // 豸״̬,0-,1-CPUռ̫,85%,2-Ӳ,紮 - NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //Ӳ״̬ - NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V30]; //ͨ״̬ - BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //ڵ״̬,0-ûб,1-б - BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //˿ڵ״̬,0-û,1-б - DWORD dwLocalDisplay; //ʾ״̬,0-,1- - BYTE byAudioInChanStatus[8]; //ʾͨ״̬ 0-δʹã1-ʹУ0ʾ1ͨ - BYTE byRes[36]; // + BYTE byDevName[NAME_LEN]; // 设备名称 + DWORD dwRunTime; // 系统运行时间,单位s + NET_ITS_TRAFFIC_DATA_INFO struTrafficDataInfo[2]; //支持两台主机(数据上传配置的主机) + DWORD dwMemoryUsage; // 内存占用率(如果内存占用率为30%,此处填30) + DWORD dwCpuUsage; // cpu占用率(如果cpu占用率为30%,此处填30) + DWORD dwDevTemperature; // 本机温度 + DWORD dwDeviceStatic; // 设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 + NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //硬盘状态 + NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V30]; //通道的状态 + BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //报警输入口的状态,0-没有报警,1-有报警 + BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //报警输出端口的状态,0-没有输出,1-有报警输出 + DWORD dwLocalDisplay; //本地显示状态,0-正常,1-不正常 + BYTE byAudioInChanStatus[8]; //表示语音通道的状态 0-未使用,1-使用中,数组0表示第1个语音通道 + BYTE byRes[36]; //保留 }NET_ITS_WORKSTATE, *LPNET_ITS_WORKSTATE; -//ڽͨûȡ +//出入口交通配置获取参数 typedef struct tagNET_ITS_ECT_WORKSTATE_COMMAND { DWORD dwSize; DWORD dwChannel; - BYTE byRes[256]; // + BYTE byRes[256]; //保留 }NET_ITS_ECT_WORKSTATE_COMMAND, *LPNET_ITS_ECT_WORKSTATE_COMMAND; typedef struct tagNET_ITS_ECTWORKSTATE { DWORD dwSize ; - BYTE byDevName[NAME_LEN]; // 豸 - DWORD dwRunTime; // ϵͳʱ䣬λs - NET_ITS_TRAFFIC_DATA_INFO struTrafficDataInfo[2]; //̨֧ϴõ - DWORD dwMemoryUsage; // ڴռʣڴռΪ30%˴30 - DWORD dwCpuUsage; // cpuռʣcpuռΪ30%˴30 - DWORD dwDevTemperature; // ¶ - DWORD dwDeviceStatic; // 豸״̬,0-,1-CPUռ̫,85%,2-Ӳ,紮 - NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //Ӳ״̬ - BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //ڵ״̬,0-ûб,1-б - BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //˿ڵ״̬,0-û,1-б - DWORD dwLocalDisplay; //ʾ״̬,0-,1- - BYTE byRes[256]; // + BYTE byDevName[NAME_LEN]; // 设备名称 + DWORD dwRunTime; // 系统运行时间,单位s + NET_ITS_TRAFFIC_DATA_INFO struTrafficDataInfo[2]; //支持两台主机(数据上传配置的主机) + DWORD dwMemoryUsage; // 内存占用率(如果内存占用率为30%,此处填30) + DWORD dwCpuUsage; // cpu占用率(如果cpu占用率为30%,此处填30) + DWORD dwDevTemperature; // 本机温度 + DWORD dwDeviceStatic; // 设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 + NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //硬盘状态 + BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //报警输入口的状态,0-没有报警,1-有报警 + BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //报警输出端口的状态,0-没有输出,1-有报警输出 + DWORD dwLocalDisplay; //本地显示状态,0-正常,1-不正常 + BYTE byRes[256]; //保留 }NET_ITS_ECTWORKSTATE, *LPNET_ITS_ECTWORKSTATE; -// ͼƬϢ +// 图片信息(后续会加入码流) typedef struct tagNET_ITS_PICTURE_INFO { - DWORD dwDataLen; //ýݳ - // 0:ͼ;1:ͼ;2:ϳͼ; 3:дͼ;4:ֱͼ;5:;6:ͼ(ʻ);7:ͼ(ʻ)ͼ;8-ǻ;9-;10-ԭʼ;11-Ŀͼ;12-ʻͼ ;13-ʻͼ;14-ͼСͼ 16-γͼ - //15 - ԶͼƬ(ûԼϴΥͼƬ) 16-γͼ + DWORD dwDataLen; //媒体数据长度 + // 0:(主)车牌图;1:车辆图;2:合成图; 3:特写图;4:二直图;5:码流;6:人脸子图(主驾驶);7:人脸子图(副驾驶)成图;8-非机动车;9-行人;10-称重原始裸数据;11-目标图;12-主驾驶室图 ;13-副驾驶室图;14-人脸图抠小图 16-次车牌图 + //15 - 自定义图片(用户自己上传进行违法检测的图片) 16-次车牌图 BYTE byType; - // 0-ֱϴ; 1-ƴ洢URL(3.7Ver)ԭȵͼƬݱURLݣͼƬȱURL + // 0-数据直接上传; 1-云存储服务器URL(3.7Ver)原先的图片数据变成URL数据,图片长度变成URL长度 BYTE byDataType; - BYTE byCloseUpType;//дͼͣ0-,1-ǻ,2- - BYTE byPicRecogMode; //ͼƬʶ0-ʶ1-ʶ(βʶ) - DWORD dwRedLightTime; //ĺʱ s - BYTE byAbsTime[32]; //ʱ,yyyymmddhhmmssxxx,e.g.20090810235959999 λΪ - NET_VCA_RECT struPlateRect; //λ,byTypeΪ8-ǻ;9-ʱʾ - NET_VCA_RECT struPlateRecgRect; //ʶ꣬ͼƬΪ12-ʻͼ13-ʻͼǣΪʻԱ - BYTE *pBuffer; //ָ - DWORD dwUTCTime;//UTCʱ䶨 - BYTE byCompatibleAblity; //ֶ 0ʾЧ1ʾЧ; bit0-ʾdwUTCTimeֶЧ - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,byTimeDiffFlagΪ1ʱЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾbyTimeDiffFlagΪ1ʱЧ*/ - BYTE byRes2[4]; // + BYTE byCloseUpType;//特写图类型,0-保留,1-非机动车,2-行人 + BYTE byPicRecogMode; //图片背向识别:0-正向车牌识别,1-背向识别(尾牌识别) ; + DWORD dwRedLightTime; //经过的红灯时间 (s) + BYTE byAbsTime[32]; //绝对时间点,yyyymmddhhmmssxxx,e.g.20090810235959999 最后三位为毫秒数 + NET_VCA_RECT struPlateRect; //车牌位置,当byType为8-非机动车;9-行人时,表示人体坐标 + NET_VCA_RECT struPlateRecgRect; //牌识区域坐标,当图片类型为12-主驾驶室图13-副驾驶室图是,该坐标为驾驶员坐标 + BYTE *pBuffer; //数据指针 + DWORD dwUTCTime;//UTC时间定义 + BYTE byCompatibleAblity; //兼容能力字段 0表示无效,1表示有效; bit0-表示dwUTCTime字段有效 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes2[4]; //保留 }NET_ITS_PICTURE_INFO, *LPNET_ITS_PICTURE_INFO; typedef struct tagNET_ITS_ILLEGAL_INFO { - BYTE byIllegalInfo[MAX_ILLEGAL_LEN/*64*/];// ΥϢַʽ + BYTE byIllegalInfo[MAX_ILLEGAL_LEN/*64*/];// 违章类型信息(字符格式) BYTE byRes[256]; }NET_ITS_ILLEGAL_INFO,*LPNET_ITS_ILLEGAL_INFO; -// +// 检测结果 typedef struct tagNET_ITS_PLATE_RESULT { - DWORD dwSize; //ṹ - DWORD dwMatchNo; //ƥ,(,,)ƥ - BYTE byGroupNum; //ͼƬһץĵһͼƬʱƥݣ - BYTE byPicNo; //ĵͼƬţյͼƬ󣬱ʾ;ճʱͼƬʱҪɾ - BYTE bySecondCam; //ǷڶץģԶץĵԶǰץĵĺĿлõ - BYTE byFeaturePicNo; //Ƶ羯ȡڼͼΪдͼ,0xff-ʾȡ - BYTE byDriveChan; // - BYTE byVehicleType; //ͣοVTR_RESULT - BYTE byDetSceneID;//ⳡ[1,4], IPCĬ0 - //ԣλʾ0- ޸(ͨ)bit1- Ʊ공(ı־)bit2- ΣƷֵ0- 1- - //ýڵѲʹ,ʹbyYellowLabelCarbyDangerousVehiclesжǷƱ공ΣƷ + DWORD dwSize; //结构长度 + DWORD dwMatchNo; //匹配序号,由(车辆序号,数据类型,车道号)组成匹配码 + BYTE byGroupNum; //图片组数量(一辆过车相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据) + BYTE byPicNo; //连拍的图片序号(接收到图片组数量后,表示接收完成;接收超时不足图片组数量时,根据需要保留或删除) + BYTE bySecondCam; //是否第二相机抓拍(如远近景抓拍的远景相机,或前后抓拍的后相机,特殊项目中会用到) + BYTE byFeaturePicNo; //闯红灯电警,取第几张图作为特写图,0xff-表示不取 + BYTE byDriveChan; //触发车道号 + BYTE byVehicleType; //车辆类型,参考VTR_RESULT + BYTE byDetSceneID;//检测场景号[1,4], IPC默认是0 + //车辆属性,按位表示,0- 无附加属性(普通车),bit1- 黄标车(类似年检的标志),bit2- 危险品车辆,值:0- 否,1- 是 + //该节点已不再使用,使用下面的byYellowLabelCar和byDangerousVehicles判断是否黄标车和危险品车 BYTE byVehicleAttribute; - WORD wIllegalType; //ΥͲù궨 - BYTE byIllegalSubType[8]; //Υ - BYTE byPostPicNo; //ΥʱȡڼͼƬΪͼ,0xff-ʾȡ - //ͨ(Чͨź豸ϴͨһ£ں˺ ͨһ) + WORD wIllegalType; //违章类型采用国标定义 + BYTE byIllegalSubType[8]; //违章子类型 + BYTE byPostPicNo; //违章时取第几张图片作为卡口图,0xff-表示不取 + //通道号(有效,报警通道号和所在设备上传报警通道号一致,在后端和所接入的 通道号一致) BYTE byChanIndex; - WORD wSpeedLimit; //ޣʱЧ - BYTE byChanIndexEx; //byChanIndexEx*256+byChanIndexʾʵͨš - /*λ־,0~Ϊͨʶ𱨾, - 1~Ϊλò(ͨPUT /ISAPI/Traffic/channels//vehiclePositionControl?format=json) - 2~Ϊܲ(Ԥõ㼰GPS)(ͨPUT /ISAPI/Traffic/channels//vehicleMonitor//startTask, - unarmedVehicleDetectionEnableĿ공ʹܣΪtrueʱֻϱⱨ޳ܲ˸ֶȡֵΪ02) - 3~Ϊֶ(/ISAPI/Traffic/channels//manualVehicleMonitor?format=json) - 4~Ϊճ(ó)ͨǷ֧ճ, - (ͨ/ISAPI/Traffic/channels//vehicleDetect/capabilitiesisSupportDailyVehicleMonitorж,ճʱ,豸ϱANPRʵʱϱvehicleMonitor) - ظֶΪͨ + WORD wSpeedLimit; //限速上限(超速时有效) + BYTE byChanIndexEx; //byChanIndexEx*256+byChanIndex表示真实通道号。 + /*车辆方位布防标志,0~为普通车牌识别报警, + 1~为车辆位置布防触发报警(即通过PUT /ISAPI/Traffic/channels//vehiclePositionControl?format=json触发)。 + 2~为车辆智能布防触发报警(包含多预置点及GPS车辆布防)(即通过PUT /ISAPI/Traffic/channels//vehicleMonitor//startTask触发, + 但在unarmedVehicleDetectionEnable(非目标车辆检测使能)为true时,只上报车辆检测报警,无车辆智能布防报警,因此该字段取值为0,而不是2)。 + 3~为手动车辆布防触发报警(/ISAPI/Traffic/channels//manualVehicleMonitor?format=json) + 4~为日常布防(复用车辆检测配置)可通过车辆检测能力中区分是否支持日常车辆布防, + (即通过/ISAPI/Traffic/channels//vehicleDetect/capabilities中isSupportDailyVehicleMonitor判断,日常车辆布防时,设备不仅会上报ANPR报警还会实时上报vehicleMonitor车辆布防报警) + 若不返回该字段则代表为普通车辆检测 */ BYTE byVehiclePositionControl; - NET_DVR_PLATE_INFO struPlateInfo; //Ϣṹ - NET_DVR_VEHICLE_INFO struVehicleInfo; //Ϣ - BYTE byMonitoringSiteID[48]; //ʾ - BYTE byDeviceID[48]; //豸 - BYTE byDir; //ʾ1-У򣩣2-()3-˫4-ɶ5-,6-򶫣7-ɱϣ8- - BYTE byDetectType; //ⷽʽ,1-ظд2-Ƶ3-֡ʶ4-״ﴥ - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byDir; //显示方向,1-上行(反向),2-下行(正向),3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其它 + BYTE byDetectType; //检测方式,1-地感触发,2-视频触发,3-多帧识别,4-雷达触发 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; - BYTE byCarDirectionType; //ʻķ0ʾ£1ʾϣʵʳʻ֣,2ʾδ֪ - //wIllegalTypeΪʱʹøòwIllegalTypeΪֵʱwIllegalTypeΪ׼òЧ - DWORD dwCustomIllegalType; //ΥͶ(ûԶ) - /*Ϊ0~ָʽʱΪϵΥͣwIllegalTypedwCustomIllegalTypeЧֵΥ롣 - Ϊ1~ַʽʱpIllegalInfoBufЧϵΥͣwIllegalTypedwCustomIllegalTypeȻֵΥ*/ - BYTE* pIllegalInfoBuf; //ΥַϢṹָ룻ָNET_ITS_ILLEGAL_INFO - BYTE byIllegalFromatType; //ΥϢʽͣ 0~ָʽ 1~ַʽ - BYTE byPendant;// 0-ʾδ֪,1-2- - BYTE byDataAnalysis; //0-δ, 1-ѷ - BYTE byYellowLabelCar; //0-ʾδ֪, 1-ǻƱ공,2-Ʊ공 - BYTE byDangerousVehicles; //0-ʾδ֪, 1-ΣƷ,2-ΣƷ - //ֶΰPilotַΪʻCopilotַΪʻ - BYTE byPilotSafebelt;//0-ʾδ֪,1-ϵȫ,2-ϵȫ - BYTE byCopilotSafebelt;//0-ʾδ֪,1-ϵȫ,2-ϵȫ - BYTE byPilotSunVisor;//0-ʾδ֪,1-,2- - BYTE byCopilotSunVisor;//0-ʾδ֪, 1-,2- - BYTE byPilotCall;// 0-ʾδ֪, 1-绰,2-绰 - //0-բ1-δբ (רʷƥǷբɹı־)byAlarmDataTypeΪ0-ʵʱʱ 0-δբ 1-բ + BYTE byCarDirectionType; //车辆具体行驶的方向,0表示从上往下,1表示从下往上(根据实际车辆的行驶方向来的区分),2表示未知 + //当wIllegalType参数为空时,使用该参数。若wIllegalType参数为有值时,以wIllegalType参数为准,该参数无效。 + DWORD dwCustomIllegalType; //违章类型定义(用户自定义) + /*为0~数字格式时,为老的违章类型,wIllegalType、dwCustomIllegalType参数生效,赋值国标违法代码。 + 为1~字符格式时,pIllegalInfoBuf参数生效。老的违章类型,wIllegalType、dwCustomIllegalType参数依然赋值国标违法代码*/ + BYTE* pIllegalInfoBuf; //违法代码字符信息结构体指针;指向NET_ITS_ILLEGAL_INFO + BYTE byIllegalFromatType; //违章信息格式类型; 0~数字格式, 1~字符格式 + BYTE byPendant;// 0-表示未知,1-车窗有悬挂物,2-车窗无悬挂物 + BYTE byDataAnalysis; //0-数据未分析, 1-数据已分析 + BYTE byYellowLabelCar; //0-表示未知, 1-非黄标车,2-黄标车 + BYTE byDangerousVehicles; //0-表示未知, 1-非危险品车,2-危险品车 + //以下字段包含Pilot字符均为主驾驶,含Copilot字符均为副驾驶 + BYTE byPilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byCopilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byPilotSunVisor;//0-表示未知,1-不打开遮阳板,2-打开遮阳板 + BYTE byCopilotSunVisor;//0-表示未知, 1-不打开遮阳板,2-打开遮阳板 + BYTE byPilotCall;// 0-表示未知, 1-不打电话,2-打电话 + //0-开闸,1-未开闸 (专用于历史数据中相机根据名单匹配后,是否开闸成功的标志);当byAlarmDataType为0-实时数据时 0-未开闸 1-开闸 BYTE byBarrierGateCtrlType; - BYTE byAlarmDataType;//0-ʵʱݣ1-ʷ - NET_DVR_TIME_V30 struSnapFirstPicTime;//˵ʱ(ms)ץĵһͼƬʱ䣩 - DWORD dwIllegalTime;//Υʱ䣨ms = ץһͼƬʱ - ץĵһͼƬʱ - DWORD dwPicNum; //ͼƬpicGroupNumͬϢͼƬͼƬϢstruVehicleInfoEx - NET_ITS_PICTURE_INFO struPicInfo[6]; //ͼƬϢ,Żص6ͼ + BYTE byAlarmDataType;//0-实时数据,1-历史数据 + NET_DVR_TIME_V30 struSnapFirstPicTime;//端点时间(ms)(抓拍第一张图片的时间) + DWORD dwIllegalTime;//违法持续时间(ms) = 抓拍最后一张图片的时间 - 抓拍第一张图片的时间 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[6]; //图片信息,单张回调,最多6张图,由序号区分 }NET_ITS_PLATE_RESULT, *LPNET_ITS_PLATE_RESULT; -//ڳץϴ +//出入口车辆抓拍数据上传 typedef struct tagNET_ITS_GATE_VEHICLE { - DWORD dwSize; //ṹ - DWORD dwMatchNo; //ƥ,(,,)ƥ Ĭ0 - BYTE byGroupNum; //ͼƬһץĵһͼƬʱƥݣĬ 1 ץͼƬ ƺʱ - BYTE byPicNo; //ĵͼƬϴͼƬţյͼƬ󣬱ʾɡ - //ճʱͼƬʱҪɾ - BYTE bySecondCam; //ǷڶץģԶץĵԶǰץĵĺĿлõʾǰץͼƬ - BYTE byRes; //ΪԤ - WORD wLaneid; //132ţԾ - BYTE byCamLaneId; //Ӧ116õijţԾͬ - BYTE byRes1; // - BYTE byAlarmReason[MAX_ALARMREASON_LEN]; //Զ屨 ĬΪ - WORD wBackList; //ΪǷ񱨾 0 ʾΪ 1 ʾֹ - WORD wSpeedLimit; //ޣʱЧkm/h - DWORD dwChanIndex; //ͨ - NET_DVR_PLATE_INFO struPlateInfo; //Ϣṹ - NET_DVR_VEHICLE_INFO struVehicleInfo; //Ϣ ٶ - BYTE byMonitoringSiteID[MAX_ID_LEN]; //ʾ - BYTE byDeviceID[MAX_ID_LEN]; //豸 - BYTE byDir; //ʾ0- 1 볡2 - BYTE byDetectType; //ⷽʽ, 0- 1-ظд2-Ƶ3-֡ʶ4-״ﴥ + DWORD dwSize; //结构长度 + DWORD dwMatchNo; //匹配序号,由(车辆序号,数据类型,车道号)组成匹配码 默认0 + BYTE byGroupNum; //图片组数量(一辆过车相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据)默认 1 抓拍类型下图片数据 控制后续接收延时操作 + BYTE byPicNo; //连拍的图片组上传图片序号(接收到图片组数量后,表示接收完成。 + //接收超时不足图片组数量时,根据需要保留或删除) + BYTE bySecondCam; //是否第二相机抓拍(如远近景抓拍的远景相机,或前后抓拍的后相机,特殊项目中会用到)标示前后相机抓拍图片 + BYTE byRes; //标记为预留 + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃) + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + BYTE byRes1; //保留 + BYTE byAlarmReason[MAX_ALARMREASON_LEN]; //自定义报警类型 默认为中文 + WORD wBackList; //标记为是否报警数据 0 表示为正常过车数据 1 表示禁止名单 + WORD wSpeedLimit; //限速上限(超速时有效)km/h + DWORD dwChanIndex; //通道号 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 含速度 + BYTE byMonitoringSiteID[MAX_ID_LEN]; //显示点编号 + BYTE byDeviceID[MAX_ID_LEN]; //设备编号 + BYTE byDir; //显示方向,0-其它 1 入场,2 出场 + BYTE byDetectType; //检测方式, 0-其他 1-地感触发,2-视频触发,3-多帧识别,4-雷达触发 BYTE byRes2[2]; - BYTE byCardNo[MAX_ID_LEN]; // - DWORD dwPicNum; //ͼƬpicGroupNumͬϢͼƬͼƬϢstruVehicleInfoEx - NET_ITS_PICTURE_INFO struPicInfo[4]; //ͼƬϢ,Żص4ͼ - //2013-11-19 ڳץϴʽ - BYTE bySwipeTime[MAX_TIME_LEN];//ˢʱ ʱʽΪyyyymmddhh24missfff + BYTE byCardNo[MAX_ID_LEN]; // 卡号 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[4]; //图片信息,单张回调,最多4张图,由序号区分 + //2013-11-19 出入口车辆抓拍数据上传(监听方式)新增参数 + BYTE bySwipeTime[MAX_TIME_LEN];//增加刷卡时间 时间格式为yyyymmddhh24missfff BYTE byRes3[224]; }NET_ITS_GATE_VEHICLE, *LPNET_ITS_GATE_VEHICLE; -//Ŀʶ +//出入口目标识别 typedef struct tagNET_ITS_GATE_FACE { - DWORD dwSize; //ṹ峤 - BYTE byGroupNum; //ͼƬһץĵһͼƬʱƥݣ - BYTE byPicNo; //ĵͼƬţյͼƬ󣬱ʾɡ - //ճʱͼƬʱҪɾ - BYTE byFeaturePicNo; //ץʱȡڼͼΪдͼ,0xff-ʾȡ - BYTE byRes; // - WORD wLaneid; //132ţԾ - BYTE byCamLaneId; //Ӧ116õijţԾͬ - BYTE byDir; //ʾ0- 1 볡 2 - DWORD dwChanIndex; //ͨ - BYTE byMonitoringSiteID[MAX_ID_LEN]; //ʾ - BYTE byDeviceID[MAX_ID_LEN]; //豸 - NET_VCA_FACESNAP_RESULT struFaceInfo; //Ŀץ - BYTE byRes2[256]; //Ԥ + DWORD dwSize; //结构体长度 + BYTE byGroupNum; //图片组数量(一个行人相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据) + BYTE byPicNo; //连拍的图片序号(接收到图片组数量后,表示接收完成。 + //接收超时不足图片组数量时,根据需要保留或删除) + BYTE byFeaturePicNo; //连抓时取第几张图作为特写图,0xff-表示不取 + BYTE byRes; //保留 + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃) + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + BYTE byDir; //显示方向,0-其他 1 入场, 2 出场 + DWORD dwChanIndex; //通道号 + BYTE byMonitoringSiteID[MAX_ID_LEN]; //显示点编号 + BYTE byDeviceID[MAX_ID_LEN]; //设备编号 + NET_VCA_FACESNAP_RESULT struFaceInfo; //目标抓拍数据 + BYTE byRes2[256]; //预留 }NET_ITS_GATE_FACE, *LPNET_ITS_GATE_FACE; -//ͣϴ +//停车场数据上传 typedef struct _tagNET_ITS_PARK_VEHICLE_ { - DWORD dwSize; //ṹ - BYTE byGroupNum; //ͼƬѯץĵͼƬ - BYTE byPicNo; //ĵͼƬϴͼƬţյͼƬ󣬱ʾ - //ճʱͼƬʱҪɾ - BYTE byLocationNum; //ͼƬijλ - BYTE byParkError; //ͣ쳣0- 1 쳣 - BYTE byParkingNo[MAX_PARKNO_LEN];//λ - BYTE byLocationStatus; //λ״̬0-޳1г - BYTE bylogicalLaneNum;//߼λţ0-3һܹ4λ 0ߣ3ұߣ - WORD wUpLoadType;//λʾ0~Ѳϴ1~仯ϴ - BYTE byRes1[4]; //ֽ - DWORD dwChanIndex; //ͨͨ - NET_DVR_PLATE_INFO struPlateInfo; //Ϣṹ - NET_DVR_VEHICLE_INFO struVehicleInfo; //Ϣ - BYTE byMonitoringSiteID[MAX_ID_LEN]; //ʾ - BYTE byDeviceID[MAX_ID_LEN]; //豸 - DWORD dwPicNum; //ͼƬpicGroupNumͬϢͼƬ - //ͼƬϢstruVehicleInfoEx - NET_ITS_PICTURE_INFO struPicInfo[2]; //ͼƬϢ,Żص2ͼ + DWORD dwSize; //结构长度 + BYTE byGroupNum; //图片组数量(单次轮询抓拍的图片数量) + BYTE byPicNo; //连拍的图片组上传图片序号(接收到图片组数量后,表示接收完成 + //接收超时不足图片组数量时,根据需要保留或删除) + BYTE byLocationNum; //单张图片所管理的车位数 + BYTE byParkError; //停车异常,0-正常 1 异常 + BYTE byParkingNo[MAX_PARKNO_LEN];//车位编号 + BYTE byLocationStatus; //车位车辆状态,0-无车,1有车 + BYTE bylogicalLaneNum;//逻辑车位号,0-3,一个相机最大能管4个车位 (0代表最左边,3代表最右边) + WORD wUpLoadType;//第零位表示:0~轮巡上传、1~变化上传 + BYTE byRes1[4]; //保留字节 + DWORD dwChanIndex; //通道号数字通道 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE byMonitoringSiteID[MAX_ID_LEN]; //显示点编号 + BYTE byDeviceID[MAX_ID_LEN]; //设备编号 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量 + //,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[2]; //图片信息,单张回调,最多2张图,由序号区分 BYTE byRes2[256]; }NET_ITS_PARK_VEHICLE, *LPNET_ITS_PARK_VEHICLE; -//ͨȡ֤ +//交通取证报警 typedef struct tagNET_DVR_TFS_ALARM { - DWORD dwSize; //ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - DWORD dwIllegalType; //Υͣù궨壬dwIllegalTypeֵΪ0xffffffffʱʹbyIllegalCode - DWORD dwIllegalDuration; //Υʱ䣨λ룩 = ץһͼƬʱ - ץĵһͼƬʱ - BYTE byMonitoringSiteID[MONITORSITE_ID_LEN];//ʾţ·ڱšڲţ - BYTE byDeviceID[DEVICE_ID_LEN]; //豸 - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - NET_DVR_SCENE_INFO struSceneInfo; //Ϣ - NET_DVR_TIME_EX struBeginRecTime; //¼ʼʱ - NET_DVR_TIME_EX struEndRecTime; //¼ʱ - NET_DVR_AID_INFO struAIDInfo; //ͨ¼Ϣ - NET_DVR_PLATE_INFO struPlateInfo; //Ϣ - NET_DVR_VEHICLE_INFO struVehicleInfo; //Ϣ - DWORD dwPicNum; //ͼƬ - NET_ITS_PICTURE_INFO struPicInfo[8]; //ͼƬϢ8 - BYTE bySpecificVehicleType; //峵 οʶVTR_RESULT - BYTE byLaneNo; // - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - NET_DVR_TIME_V30 struTime;//ֶλǰʱ䡣 - DWORD dwSerialNo;//ţ - BYTE byVehicleAttribute;//ԣλʾ0- ޸(ͨ)bit1- Ʊ공(ı־)bit2- ΣƷֵ0- 1- - BYTE byPilotSafebelt;//0-ʾδ֪,1-ϵȫ,2-ϵȫ - BYTE byCopilotSafebelt;//0-ʾδ֪,1-ϵȫ,2-ϵȫ - BYTE byPilotSunVisor;//0-ʾδ֪,1-,2- - BYTE byCopilotSunVisor;//0-ʾδ֪, 1-,2- - BYTE byPilotCall;// 0-ʾδ֪, 1-绰,2-绰 - BYTE byRes2[2]; // - BYTE byIllegalCode[ILLEGAL_LEN/*32*/];//ΥչdwIllegalTypeֵΪ0xffffffffʹֵ - WORD wCountry; // ֵ,öCOUNTRY_INDEX - BYTE byRegion; //ֵ,0-1-ŷ(Europe Region)2-(Russian Region)3-ŷ&˹(EU&CIS) , 4-жMiddle East0xff- - BYTE byCrossLine;//Ƿѹͣ෽ͣ0-ʾδ֪1-ѹߣ2-ѹ - BYTE byParkingSerialNO[SERIAL_NO_LEN/*16*/];//λ - BYTE byCrossSpaces;//Ƿ粴λͣ෽ͣ0-ʾδ֪1-δ粴λͣ2-粴λͣ - BYTE byAngledParking;//Ƿбͣ෽ͣ, 0-ʾδ֪1-δбͣ2-бͣ - BYTE byAlarmValidity;//ŶȣʻʻŶȣΧ0-100ŶԽߣ¼ʵԽ - BYTE byDoorsStatus;//״̬ 0-Źر 1-ſ - DWORD dwXmlLen;//XMLϢ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pXmlBuf; // XMLϢָ,XMLӦEventNotificationAlert XML Block + DWORD dwSize; //结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + DWORD dwIllegalType; //违章类型,采用国标定义,当dwIllegalType值为0xffffffff时使用byIllegalCode + DWORD dwIllegalDuration; //违法持续时间(单位:秒) = 抓拍最后一张图片的时间 - 抓拍第一张图片的时间 + BYTE byMonitoringSiteID[MONITORSITE_ID_LEN];//显示点编号(路口编号、内部编号) + BYTE byDeviceID[DEVICE_ID_LEN]; //设备编号 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + NET_DVR_SCENE_INFO struSceneInfo; //场景信息 + NET_DVR_TIME_EX struBeginRecTime; //录像开始时间 + NET_DVR_TIME_EX struEndRecTime; //录像结束时间 + NET_DVR_AID_INFO struAIDInfo; //交通事件信息 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + DWORD dwPicNum; //图片数量 + NET_ITS_PICTURE_INFO struPicInfo[8]; //图片信息,最多8张 + BYTE bySpecificVehicleType; //具体车辆种类 参考识别结果类型VTR_RESULT + BYTE byLaneNo; //关联车道号 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + NET_DVR_TIME_V30 struTime;//手动定位,当前时间。 + DWORD dwSerialNo;//序号; + BYTE byVehicleAttribute;//车辆属性,按位表示,0- 无附加属性(普通车),bit1- 黄标车(类似年检的标志),bit2- 危险品车辆,值:0- 否,1- 是 + BYTE byPilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byCopilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byPilotSunVisor;//0-表示未知,1-不打开遮阳板,2-打开遮阳板 + BYTE byCopilotSunVisor;//0-表示未知, 1-不打开遮阳板,2-打开遮阳板 + BYTE byPilotCall;// 0-表示未知, 1-不打电话,2-打电话 + BYTE byRes2[2]; //保留 + BYTE byIllegalCode[ILLEGAL_LEN/*32*/];//违法代码扩展,当dwIllegalType值为0xffffffff;使用这个值 + WORD wCountry; // 国家索引值,参照枚举COUNTRY_INDEX + BYTE byRegion; //区域索引值,0-保留,1-欧洲(Europe Region),2-俄语区域(Russian Region),3-欧洲&俄罗斯(EU&CIS) , 4-中东(Middle East),0xff-所有 + BYTE byCrossLine;//是否压线停车(侧方停车),0-表示未知,1-不压线,2-压线 + BYTE byParkingSerialNO[SERIAL_NO_LEN/*16*/];//泊车位编号 + BYTE byCrossSpaces;//是否跨泊车位停车(侧方停车),0-表示未知,1-未跨泊车位停车,2-跨泊车位停车 + BYTE byAngledParking;//是否倾斜停车(侧方停车), 0-表示未知,1-未倾斜停车,2-倾斜停车 + BYTE byAlarmValidity;//报警置信度,可以输出驶入驶出的置信度,范围0-100;置信度越高,事件真实性越高 + BYTE byDoorsStatus;//车门状态 0-车门关闭 1-车门开启 + DWORD dwXmlLen;//XML报警信息长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block #else - char* pXmlBuf; // XMLϢָ,XMLӦEventNotificationAlert XML Block + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block BYTE byRes3[4]; #endif - BYTE byVehicleHeadTailStatus;//ͷβ״̬ 0- 1-ͷ 2-β - BYTE byBrokenNetHttp; //־λ0-شݣ1-ش - BYTE byRes[30]; // + BYTE byVehicleHeadTailStatus;//车头车尾状态 0-保留 1-车头 2-车尾 + BYTE byBrokenNetHttp; //断网续传标志位,0-不重传数据,1-重传数据 + BYTE byRes[30]; //保留 }NET_DVR_TFS_ALARM,*LPNET_DVR_TFS_ALARM; typedef struct tagNET_DVR_SOFTWARE_SERVICE_CFG { - DWORD dwSize;//ṹС - BYTE byThirdStreamEnabled; //Ƿã0-1- - BYTE bySubStreamEnabled; //Ƿã0-1- + DWORD dwSize;//结构体大小 + BYTE byThirdStreamEnabled; //是否开启三码流配置:0-否,1-是 + BYTE bySubStreamEnabled; //是否开启子码流配置:0-否,1-是 BYTE byRes[254]; }NET_DVR_SOFTWARE_SERVICE_CFG, *LPNET_DVR_SOFTWARE_SERVICE_CFG; typedef struct tagNET_ITS_ECT_BLOCKLIST { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE bylogicalLaneNo;//߼ + DWORD dwChannel; //通道号 + BYTE bylogicalLaneNo;//逻辑车道号 BYTE byRes1[3]; - BYTE byLaneName[NAME_LEN];// 32 - NET_DVR_PLATE_INFO struPlateInfo; //Ϣṹ - BYTE byRes2[256]; // ֽ + BYTE byLaneName[NAME_LEN];//车道名称 32 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + BYTE byRes2[256]; // 保留字节 }NET_ITS_ECT_BLOCKLIST, *LPNET_ITS_ECT_BLOCKLIST; -//IPCͨ +//IPC通道参数配置 typedef struct tagNET_ITS_IPC_CHAN_CFG { DWORD dwSize; - BYTE byCameraType; //࣬0-1-Ȧ2-Ƶ,3-һ - BYTE byRes1[3]; // - BYTE byMonitoringSiteID[48]; //ʾ - BYTE byDeviceID[48]; //豸 - BYTE byDirectionNo; //ʾ,0-,1-,2-,3-˫,4-ɶ,5-,6-,7-ɱ,8- - BYTE byMonitorInfo[48]; //ʾϢ - BYTE byRes2[15]; // + BYTE byCameraType; //相机种类,0-布防用相机;1-线圈触发相机;2-视频分析用相机,3-一体机 + BYTE byRes1[3]; //保留 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byDirectionNo; //显示方向编号,0-无,1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其他 + BYTE byMonitorInfo[48]; //显示点信息描述 + BYTE byRes2[15]; //保留 }NET_ITS_IPC_CHAN_CFG, *LPNET_ITS_IPC_CHAN_CFG; -//豸Ϣ +//单个设备信息 typedef struct tagNET_ITS_SINGLE_DEVICE_INFO { - DWORD dwDeviceType; //豸ͣ0-նˣ1-2-ƣ3-4-Ȧ15-Ȧ26-Ȧ37-̵Ƽ8- - //9-״10-բ11-ڿƻ(Ʊ)12-LEDʾ13-Զ14-15-ɨǹ - //16-Ʊݴӡ17-ڵ(յ) , 18- - DWORD dwDirID; // - DWORD dwLaneID; // - DWORD dwDeviceState; //豸״̬ 0 0 쳣ο豸쳣 - BYTE byDeviceName[32]; //豸 - BYTE byDeviceID[48]; //豸ţһкţõַ - NET_DVR_TIME_V30 struTriggerTime;//ʱ - BYTE byRelateChan; //ͨţ1~8 AC1~4 AC1~2 + DWORD dwDeviceType; //设备类型:0-终端,1-相机,2-补光灯,3-车检器,4-线圈1,5-线圈2,6-线圈3,7-红绿灯检测器,8-机柜, + //9-雷达,10-道闸,11-出入口控制机(票箱),12-LED显示屏,13-远距离读卡器,14-近距离读卡器,15-红外扫描枪, + //16-票据打印机,17-节点管理器(诱导服务器相关) , 18-机柜检测仪 + DWORD dwDirID; //方向编号 + DWORD dwLaneID; //车道编号 + DWORD dwDeviceState; //设备状态 0正常 非0 异常(参考设备异常代码表) + BYTE byDeviceName[32]; //设备名称 + BYTE byDeviceID[48]; //设备编号,一般用序列号,车检器用地址 + NET_DVR_TIME_V30 struTriggerTime;//触发时间 + BYTE byRelateChan; //关联通道号(传感器是1~8 AC端子1~4 AC插座1~2) BYTE byRes[3]; }NET_ITS_SINGLE_DEVICE_INFO,*LPNET_ITS_SINGLE_DEVICE_INFO; -//·Ϣ +//路口信息 typedef struct tagNET_ITS_ROADINFO { DWORD dwSize; - DWORD dwChannel; //ͨ,0xffffffffʾնˣʾӦ - BYTE byTriggerMode; // 0:Ȧ; 1:Ƶ + DWORD dwChannel; //通道号,0xffffffff表示终端,其它表示对应的相机 + BYTE byTriggerMode; // 0:线圈触发; 1:视频触发 BYTE byRes1[3]; - DWORD dwDeviceNum; //ʵ豸 - BYTE byMonitoringSiteID[48]; //ʾ - BYTE byRoadInfo[48]; //ʾϢ + DWORD dwDeviceNum; //实际设备个数 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byRoadInfo[48]; //显示点信息 NET_ITS_SINGLE_DEVICE_INFO struSingleDevice[ITS_MAX_DEVICE_NUM]; BYTE byRes[16]; }NET_ITS_ROADINFO,*LPNET_ITS_ROADINFO; -//·Ϣ +//单个车道路况信息 typedef struct tagNET_ITS_TRAFFIC_DRIVE_CHAN { - BYTE byDriveChan; // - BYTE byRes1[3]; // Ԥ - WORD wCarFlux; // - WORD wPasserbyFlux; // - WORD wShayFlux; //ֳ - float fAverOccpancy; //ƽռʰٷֱ - WORD wAverSpeed; //ƽ(km/h) - WORD wAverCarDis; //ƽ(λ) - BYTE byRes2[16]; // Ԥ + BYTE byDriveChan; //车道号 + BYTE byRes1[3]; // 预留 + WORD wCarFlux; //汽车流量数 + WORD wPasserbyFlux; //行人流量数 + WORD wShayFlux; //二轮车流量数 + float fAverOccpancy; //平均车道占有率百分比 + WORD wAverSpeed; //平均车速(km/h) + WORD wAverCarDis; //平均车距(单位待定) + BYTE byRes2[16]; // 预留 }NET_ITS_TRAFFIC_DRIVE_CHAN,*LPNET_ITS_TRAFFIC_DRIVE_CHAN; typedef struct tagNET_ITS_TRAFFIC_COLLECT { - DWORD dwSize; //ṹС - BYTE byMonitoringSiteID[48]; //ʾ - BYTE byDeviceID[48]; //豸 - BYTE byLaneNum; // - BYTE byDir; //ʾ - BYTE byDetectType; //ⷽʽ1-ظȦ2-Ƶ3֡ʶ4״ﴥ - BYTE byRes1; //Ԥ - DWORD dwChannel; //ͨ - NET_DVR_SYSTEM_TIME struStartTime; //ͳƿʼʱ - DWORD dwSamplePeriod; //ͳʱ,λ - NET_ITS_TRAFFIC_DRIVE_CHAN struDriveChan[6]; //ͨ,ÿ֧6 - BYTE byRes2[24]; //Ԥ + DWORD dwSize; //结构大小 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byLaneNum; //车道总数 + BYTE byDir; //显示方向 + BYTE byDetectType; //检测方式1-地感线圈、2-视频触发、3、多帧识别、4雷达触发 + BYTE byRes1; //预留 + DWORD dwChannel; //通道号 + NET_DVR_SYSTEM_TIME struStartTime; //统计开始时间 + DWORD dwSamplePeriod; //统计时间,单位秒 + NET_ITS_TRAFFIC_DRIVE_CHAN struDriveChan[6]; //交通流量数据,每个相机支持6个车道 + BYTE byRes2[24]; //预留 }NET_ITS_TRAFFIC_COLLECT,*LPNET_ITS_TRAFFIC_COLLECT; typedef struct tagNET_ITS_OVERLAPCFG_COND { DWORD dwSize; DWORD dwChannel; - DWORD dwConfigMode; //ģʽ0-նˣ1-ǰ(ֱǰ˻ն˽ǰ) - BYTE byPicModeType;//0-ʾСͼ(ͼ)1-ʾͼ(ϳͼ) + DWORD dwConfigMode; //配置模式,0-终端,1-前端(直连前端或终端接前端) + BYTE byPicModeType;//0-表示小图(独立图),1-表示大图(合成图) /* - 0ʾ ץMPRģʽ֡ץ IPCʹã - 1 ʾ ץ HVT ģʽ쿨IPCʹã + 0表示关联 抓拍MPR模式(多帧触发抓拍 IPC使用) + 1 表示关联 抓拍 HVT 模式(混卡IPC使用) */ BYTE byRelateType; BYTE byRes[14]; @@ -32806,163 +32806,163 @@ typedef struct tagNET_ITS_OVERLAPCFG_COND typedef enum ITS_OVERLAP_ITEM_TYPE { - OVERLAP_ITEM_NULL = 0, //0-δ֪ - OVERLAP_ITEM_SITE, //1-ص - OVERLAP_ITEM_ROADNUM, //2-·ڱ - OVERLAP_ITEM_INSTRUMENTNUM, //3-豸 - OVERLAP_ITEM_DIRECTION, //4- - OVERLAP_ITEM_DIRECTIONDESC, //5- - OVERLAP_ITEM_LANENUM, //6- - OVERLAP_ITEM_LANEDES, //7- - OVERLAP_ITEM_CAPTIME, //8-ץʱ() - OVERLAP_ITEM_CAPTIME_MILLSECOND, //9-ץʱ() - OVERLAP_ITEM_PLATENUM, //10-ƺ - OVERLAP_ITEM_CARCOLOR, //11-ɫ - OVERLAP_ITEM_CARTYPE, //12- - OVERLAP_ITEM_CARBRAND, //13-Ʒ - OVERLAP_ITEM_CARSPEED, //14-ٶ - OVERLAP_ITEM_SPEEDLIMIT, //15-ٱ־ - OVERLAP_ITEM_CARLENGTH, //16-1~99m - OVERLAP_ITEM_ILLEGALNUM, //17-Υ(ΥӦûõģӦֱӵΥϢ١١Сơռѹߵ) - OVERLAP_ITEM_MONITOR_INFO, //18-ʾϢ - OVERLAP_ITEM_ILLEGALDES, //19-ΥΪ - OVERLAP_ITEM_OVERSPEED_PERCENT, //20-ٱ - OVERLAP_ITEM_RED_STARTTIME, //21-ƿʼʱ - OVERLAP_ITEM_RED_STOPTIME, //22-ƽʱ - OVERLAP_ITEM_RED_DURATION, //23-ʱ - OVERLAP_ITEM_SECUNITY_CODE, //24-α - OVERLAP_ITEM_CAP_CODE, //25-ץı - OVERLAP_ITEM_SEATBELT, //26-ȫ - OVERLAP_ITEM_MONITOR_ID, //27-ʾ - OVERLAP_ITEM_SUN_VISOR, //28- - OVERLAP_ITEM_LANE_DIRECTION, //29-ʻ - OVERLAP_ITEM_LICENSE_PLATE_COLOR, // 30-ɫ - OVERLAP_ITEM_SCENE_NUMBER, //31- - OVERLAP_ITEM_SCENE_NAME, //32- - OVERLAP_ITEM_YELLOW_SIGN_CAR, //33-Ʊ공 - OVERLAP_ITEM_DANGEROUS_CAR, //34-ΣƷ - OVERLAP_ITEM_CAR_SUBBRAND, //35-Ʒ - OVERLAP_ITEM_CAR_DIRECTION, //36- - OVERLAP_ITEM_PENDANT, //37- - OVERLAP_ITEM_CALL, //38-绰 - OVERLAP_ITEM_CAR_VALIDITY, //39-Ŷ - OVERLAP_ITEM_CAR_COUNTRY, //40- - OVERLAP_ITEM_CAR_PLATE_TYPE, //41-ͣοö - OVERLAP_ITEM_CAR_PLATE_SIZE, //42-Ƴߴ - OVERLAP_ITEM_CAR_PLATE_COLOR, //43-ɫ - OVERLAP_ITEM_CAR_PLATE_CATEGORY, //44-ƸϢ - OVERLAP_ITEM_ACCIDENT, //45-ͨ¹ - OVERLAP_ITEM_SMOKING, //46- - OVERLAP_ITEM_HELMET, //47-ͷ - OVERLAP_ITEM_MANNED, //48- - OVERLAP_ITEM_HUMAN, //49- - OVERLAP_ITEM_PLAYMOBILEPHONE, //50-ֻ - OVERLAP_ITEM_ADR //51- ADRƣ ŷ޹ҳеĻ˫ƣҪʾڶƺţADRƵʾ + OVERLAP_ITEM_NULL = 0, //0-未知 + OVERLAP_ITEM_SITE, //1-地点 + OVERLAP_ITEM_ROADNUM, //2-路口编号 + OVERLAP_ITEM_INSTRUMENTNUM, //3-设备编号 + OVERLAP_ITEM_DIRECTION, //4-方向编号 + OVERLAP_ITEM_DIRECTIONDESC, //5-方向 + OVERLAP_ITEM_LANENUM, //6-车道号 + OVERLAP_ITEM_LANEDES, //7-车道 + OVERLAP_ITEM_CAPTIME, //8-抓拍时间(不带毫秒) + OVERLAP_ITEM_CAPTIME_MILLSECOND, //9-抓拍时间(带毫秒) + OVERLAP_ITEM_PLATENUM, //10-车牌号 + OVERLAP_ITEM_CARCOLOR, //11-车身颜色 + OVERLAP_ITEM_CARTYPE, //12-车辆类型 + OVERLAP_ITEM_CARBRAND, //13-车辆品牌 + OVERLAP_ITEM_CARSPEED, //14-车辆速度 + OVERLAP_ITEM_SPEEDLIMIT, //15-限速标志 + OVERLAP_ITEM_CARLENGTH, //16-车辆长度1~99m + OVERLAP_ITEM_ILLEGALNUM, //17-违法代码(违法代码叠加应该没用的,应该直接叠加违法信息,比如正常、低速、超速、逆行、闯红灯、占道、压黄线等) + OVERLAP_ITEM_MONITOR_INFO, //18-显示点信息 + OVERLAP_ITEM_ILLEGALDES, //19-违法行为 + OVERLAP_ITEM_OVERSPEED_PERCENT, //20-超速比 + OVERLAP_ITEM_RED_STARTTIME, //21-红灯开始时间 + OVERLAP_ITEM_RED_STOPTIME, //22-红灯结束时间 + OVERLAP_ITEM_RED_DURATION, //23-红灯已亮时间 + OVERLAP_ITEM_SECUNITY_CODE, //24-防伪码 + OVERLAP_ITEM_CAP_CODE, //25-抓拍编号 + OVERLAP_ITEM_SEATBELT, //26-安全带 + OVERLAP_ITEM_MONITOR_ID, //27-显示点编号 + OVERLAP_ITEM_SUN_VISOR, //28-遮阳板 + OVERLAP_ITEM_LANE_DIRECTION, //29-车道行驶方向 + OVERLAP_ITEM_LICENSE_PLATE_COLOR, // 30-车牌颜色 + OVERLAP_ITEM_SCENE_NUMBER, //31-场景编号 + OVERLAP_ITEM_SCENE_NAME, //32-场景名称 + OVERLAP_ITEM_YELLOW_SIGN_CAR, //33-黄标车 + OVERLAP_ITEM_DANGEROUS_CAR, //34-危险品车 + OVERLAP_ITEM_CAR_SUBBRAND, //35-车辆子品牌 + OVERLAP_ITEM_CAR_DIRECTION, //36-车辆方向 + OVERLAP_ITEM_PENDANT, //37-车窗悬挂物 + OVERLAP_ITEM_CALL, //38-打电话 + OVERLAP_ITEM_CAR_VALIDITY, //39-置信度 + OVERLAP_ITEM_CAR_COUNTRY, //40-国家 + OVERLAP_ITEM_CAR_PLATE_TYPE, //41-车牌类型,参考车牌类型枚举 + OVERLAP_ITEM_CAR_PLATE_SIZE, //42-车牌尺寸 + OVERLAP_ITEM_CAR_PLATE_COLOR, //43-车牌颜色 + OVERLAP_ITEM_CAR_PLATE_CATEGORY, //44-车牌附加信息 + OVERLAP_ITEM_ACCIDENT, //45-交通事故 + OVERLAP_ITEM_SMOKING, //46-吸烟 + OVERLAP_ITEM_HELMET, //47-戴头盔 + OVERLAP_ITEM_MANNED, //48-载人 + OVERLAP_ITEM_HUMAN, //49-人体属性 + OVERLAP_ITEM_PLAYMOBILEPHONE, //50-玩手机 + OVERLAP_ITEM_ADR //51- ADR车牌: 欧洲国家车辆有的会挂双牌,需要显示第二个车牌号,用ADR车牌叠加项表示 }ITS_OVERLAP_ITEM_TYPE; -//ַÿһϢṹ +//字符叠加每一条信息结构体 typedef struct tagNET_ITS_OVERLAP_SINGLE_ITEM_PARAM { - BYTE byRes1[2]; // - BYTE byItemType; //ͣOVERLAP_ITEM_TYPE - BYTE byChangeLineNum; //Ļ[0-10](Ĭ0) - BYTE bySpaceNum; //Ŀո[0-255](Ĭ0) + BYTE byRes1[2]; // 保留 + BYTE byItemType; //类型,详见OVERLAP_ITEM_TYPE + BYTE byChangeLineNum; //叠加项后的换行数[0-10](默认0) + BYTE bySpaceNum; //叠加项后的空格数[0-255](默认0) BYTE byRes2[2]; - BYTE byEnablePos; //Ƿʾ - WORD wStartPosTop; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - WORD wStartPosLeft; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) + BYTE byEnablePos; //是否启用坐标显示 + WORD wStartPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) BYTE byRes[8]; }NET_ITS_OVERLAP_SINGLE_ITEM_PARAM, *LPNET_ITS_OVERLAP_SINGLE_ITEM_PARAM; typedef struct tagNET_ITS_OVERLAP_ITEM_PARAM { - NET_ITS_OVERLAP_SINGLE_ITEM_PARAM struSingleItem[MAX_OVERLAP_ITEM_NUM]; //ַ - DWORD dwLinePercent; //аٷֱ(0-100),(Ĭ100) - DWORD dwItemsStlye; //ӷʽ0-,1-(ĬϺ) - WORD wStartPosTop; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - WORD wStartPosLeft; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - WORD wCharStyle; //,0-1-κ(Ĭ) - WORD wCharSize; //ַС,0--16x16,1--32x32,2-48x48,3--64x64 (Ĭ),8x128(Ver3.7) - WORD wCharInterval; //ַ࣬[016]赥λ(Ĭ) + NET_ITS_OVERLAP_SINGLE_ITEM_PARAM struSingleItem[MAX_OVERLAP_ITEM_NUM]; //单条字符参数 + DWORD dwLinePercent; //叠加行百分比(0-100),(默认100) + DWORD dwItemsStlye; //叠加方式:0-横排,1-竖排(默认横排) + WORD wStartPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wCharStyle; //字体类型,0-宋体1-魏体(默认) + WORD wCharSize; //字符大小,0--16x16,1--32x32,2-48x48,3--64x64 (默认),8x128(Ver3.7) + WORD wCharInterval; //字符间距,[0~16],可设单位:像素(默认) BYTE byRes1[2]; - DWORD dwForeClorRGB; //ǰɫRGBֵbit0-1:(B) bit2-3:(G) bit4-5:(G) (Ĭx00FFFFFF-) - DWORD dwBackClorRGB; //ɫRGBֵ,ֻͼƬЧbit0-1:(B) bit2-3:(G) bit4-5:(G) (Ĭx00000000-) - BYTE byColorAdapt; //ɫǷӦ0-1- - //(Ver3.7 ) - // ʹ 0-, 1-㣨ϸעͣٶ,ֵ 3λ0 + DWORD dwForeClorRGB; //前景色的RGB值bit0-1:(B) bit2-3:(G) bit4-5:(G) (默认x00FFFFFF-白) + DWORD dwBackClorRGB; //背景色的RGB值,只对图片外叠加有效bit0-1:(B) bit2-3:(G) bit4-5:(G) (默认x00000000-黑) + BYTE byColorAdapt; //颜色是否自适应0-否1-是 + //(Ver3.7 新增) + // 参数补零使能 0-补零, 1-不补零(详细注释)速度,限速值 不足3位补0 BYTE byParamFillZeroEnble; - BYTE byPlateLeftCornerEnable;// СͼϽʹ 0-, 1- + BYTE byPlateLeftCornerEnable;// 车牌小图叠加左上角使能 0-不叠加, 1-叠加 BYTE byRes2; - WORD wStartSPicPosTop; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - WORD wStartSPicPosLeft; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - //OSDλ 0-ͼƬ,1-ͼƬϱԵ,2-ͼƬ±ԵϳͼרõϱԵ⣩V3.7 + WORD wStartSPicPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartSPicPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + //OSD叠加位置 0-图片内,1-图片上边缘,2-图片下边缘(合成图专用的是上边缘外)(V3.7) BYTE byOsdLocate; BYTE byRes[23]; }NET_ITS_OVERLAP_ITEM_PARAM, *LPNET_ITS_OVERLAP_ITEM_PARAM; -//Ϣ +//叠加项具体信息 typedef struct tagNET_ITS_OVERLAP_INFO_PARAM { - BYTE bySite[128]; //ص - BYTE byRoadNum[32]; //·ڱ - BYTE byInstrumentNum[32]; //豸 - BYTE byDirection[32]; // - BYTE byDirectionDesc[32]; // - BYTE byLaneDes[32]; // - BYTE byRes1[32]; // - BYTE byMonitoringSite1[44]; //ʾ1Ϣ - BYTE byMonitoringSite2[32]; //ʾ2Ϣ - BYTE byRes[64]; // + BYTE bySite[128]; //地点描述 + BYTE byRoadNum[32]; //路口编号 + BYTE byInstrumentNum[32]; //设备编号 + BYTE byDirection[32]; //方向编号 + BYTE byDirectionDesc[32]; //方向描述 + BYTE byLaneDes[32]; //车道描述 + BYTE byRes1[32]; //保留 + BYTE byMonitoringSite1[44]; //显示点1信息 + BYTE byMonitoringSite2[32]; //显示点2信息 + BYTE byRes[64]; //保留 }NET_ITS_OVERLAP_INFO_PARAM, *LPNET_ITS_OVERLAP_INFO_PARAM; typedef struct tagNET_ITS_OVERLAP_CFG { DWORD dwSize; - BYTE byEnable; //Ƿã0-ã1- + BYTE byEnable; //是否启用,0-不启用,1-启用 BYTE byRes1[3]; - NET_ITS_OVERLAP_ITEM_PARAM struOverLapItem; //ַ - NET_ITS_OVERLAP_INFO_PARAM struOverLapInfo; //ַϢ + NET_ITS_OVERLAP_ITEM_PARAM struOverLapItem; //字符串参数 + NET_ITS_OVERLAP_INFO_PARAM struOverLapInfo; //字符串内容信息 BYTE byRes[32]; }NET_ITS_OVERLAP_CFG, *LPNET_ITS_OVERLAP_CFG; -//ַÿһϢṹ +//字符叠加每一条信息结构体 typedef struct tagNET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50 { - BYTE byRes1[2]; // - BYTE byItemType; //ͣOVERLAP_ITEM_TYPE - BYTE byChangeLineNum; //Ļ[0-10](Ĭ0) - BYTE bySpaceNum; //Ŀո[0-255](Ĭ0) + BYTE byRes1[2]; // 保留 + BYTE byItemType; //类型,详见OVERLAP_ITEM_TYPE + BYTE byChangeLineNum; //叠加项后的换行数[0-10](默认0) + BYTE bySpaceNum; //叠加项后的空格数[0-255](默认0) BYTE byRes2[2]; - BYTE byEnablePos; //Ƿʾ - WORD wStartPosTop; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - WORD wStartPosLeft; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - //ԶͣbyItemTypeӦɽbyItemTypeԶơԶΪգĬbyItemTypeе + BYTE byEnablePos; //是否启用坐标显示 + WORD wStartPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + //自定义类型;与byItemType参数对应。可将byItemType参数类型自定义名称。若自定义内容为空,便默认以byItemType参数中的类型命名。 BYTE byItemTypeCustom[32]; BYTE byRes[8]; }NET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50, *LPNET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50; typedef struct tagNET_ITS_OVERLAP_ITEM_PARAM_V50 { - NET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50 struSingleItem[MAX_OVERLAP_ITEM_NUM]; //ַ - DWORD dwLinePercent; //аٷֱ(0-100),(Ĭ100) - DWORD dwItemsStlye; //ӷʽ0-,1-(ĬϺ) - WORD wStartPosTop; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - WORD wStartPosLeft; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - WORD wCharStyle; //,0-1-κ(Ĭ) - WORD wCharSize; //ַС,0--16x16,1--32x32,2-48x48,3--64x64 (Ĭ),8x128(Ver3.7) - WORD wCharInterval; //ַ࣬[016]赥λ(Ĭ) + NET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50 struSingleItem[MAX_OVERLAP_ITEM_NUM]; //单条字符参数 + DWORD dwLinePercent; //叠加行百分比(0-100),(默认100) + DWORD dwItemsStlye; //叠加方式:0-横排,1-竖排(默认横排) + WORD wStartPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wCharStyle; //字体类型,0-宋体1-魏体(默认) + WORD wCharSize; //字符大小,0--16x16,1--32x32,2-48x48,3--64x64 (默认),8x128(Ver3.7) + WORD wCharInterval; //字符间距,[0~16],可设单位:像素(默认) BYTE byRes1[2]; - DWORD dwForeClorRGB; //ǰɫRGBֵbit0-1:(B) bit2-3:(G) bit4-5:(G) (Ĭx00FFFFFF-) - DWORD dwBackClorRGB; //ɫRGBֵ,ֻͼƬЧbit0-1:(B) bit2-3:(G) bit4-5:(G) (Ĭx00000000-) - BYTE byColorAdapt; //ɫǷӦ0-1- - //(Ver3.7 ) - // ʹ 0-, 1-㣨ϸעͣٶ,ֵ 3λ0 + DWORD dwForeClorRGB; //前景色的RGB值bit0-1:(B) bit2-3:(G) bit4-5:(G) (默认x00FFFFFF-白) + DWORD dwBackClorRGB; //背景色的RGB值,只对图片外叠加有效bit0-1:(B) bit2-3:(G) bit4-5:(G) (默认x00000000-黑) + BYTE byColorAdapt; //颜色是否自适应0-否1-是 + //(Ver3.7 新增) + // 参数补零使能 0-补零, 1-不补零(详细注释)速度,限速值 不足3位补0 BYTE byParamFillZeroEnble; - BYTE byPlateLeftCornerEnable;// СͼϽʹ 0-, 1- + BYTE byPlateLeftCornerEnable;// 车牌小图叠加左上角使能 0-不叠加, 1-叠加 BYTE byRes2; - WORD wStartSPicPosTop; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - WORD wStartSPicPosLeft; //ʼ,ֻͼƬڲЧ[0~2448](Ĭ0) - //OSDλ 0-ͼƬ,1-ͼƬϱԵ,2-ͼƬ±ԵϳͼרõϱԵ⣩V3.7 + WORD wStartSPicPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartSPicPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + //OSD叠加位置 0-图片内,1-图片上边缘,2-图片下边缘(合成图专用的是上边缘外)(V3.7) BYTE byOsdLocate; BYTE byRes[63]; }NET_ITS_OVERLAP_ITEM_PARAM_V50, *LPNET_ITS_OVERLAP_ITEM_PARAM_V50; @@ -32970,127 +32970,127 @@ typedef struct tagNET_ITS_OVERLAP_ITEM_PARAM_V50 typedef struct tagNET_ITS_OVERLAP_CFG_V50 { DWORD dwSize; - BYTE byEnable; //Ƿã0-ã1- + BYTE byEnable; //是否启用,0-不启用,1-启用 BYTE byRes1[3]; - NET_ITS_OVERLAP_ITEM_PARAM_V50 struOverLapItemV50; //ַ - NET_ITS_OVERLAP_INFO_PARAM struOverLapInfo; //ַϢ + NET_ITS_OVERLAP_ITEM_PARAM_V50 struOverLapItemV50; //字符串参数 + NET_ITS_OVERLAP_INFO_PARAM struOverLapInfo; //字符串内容信息 BYTE byRes[120]; }NET_ITS_OVERLAP_CFG_V50, *LPNET_ITS_OVERLAP_CFG_V50; -#define MAX_PTZCRUISE_POINT_NUM 32 //֧32Ѳ +#define MAX_PTZCRUISE_POINT_NUM 32 //最大支持32个巡航点 -//ԤõϢ +//预置点信息 typedef struct tagNET_DVR_PRESET_INFO { DWORD dwSize; - DWORD dwPresetNum; //Ԥõ - DWORD dwGroupNum; // + DWORD dwPresetNum; //预置点个数 + DWORD dwGroupNum; //组数 BYTE byRes[8]; }NET_DVR_PRESET_INFO, *LPNET_DVR_PRESET_INFO; -// +//输入参数 typedef struct tagNET_DVR_PRESET_COND { DWORD dwSize; DWORD dwChannel; - DWORD dwGroupNO; // + DWORD dwGroupNO; //组号 BYTE byRes[8]; }NET_DVR_PRESET_COND, *LPNET_DVR_PRESET_COND; -// +//输出参数 typedef struct tagNET_DVR_PRESETCFG { DWORD dwSize; - DWORD dwPresetIndex; //Ԥõ - NET_VCA_POINT struVcaPoint; //Ԥõ - WORD wZoomCoordinate; ///<Ԥõ㴰Zoomֵ + DWORD dwPresetIndex; //预置点序号 + NET_VCA_POINT struVcaPoint; //预置点坐标 + WORD wZoomCoordinate; ///<预置点窗口Zoom值 BYTE byRes[30]; }NET_DVR_PRESETCFG, *LPNET_DVR_PRESETCFG; -//ȡѲ·Ŀ +//获取巡航路径的数目 typedef struct tagNET_DVR_PTZCRUISE_INFO { DWORD dwSize; - DWORD dwPtzCruiseNum; //· - DWORD dwGroupNum; // + DWORD dwPtzCruiseNum; //路径个数 + DWORD dwGroupNum; //组数 BYTE byRes[8]; }NET_DVR_PTZCRUISE_INFO, *LPNET_DVR_PTZCRUISE_INFO; -// +//输入参数: typedef struct tagNET_DVR_PTZCRUISE_COND { DWORD dwSize; DWORD dwChannel; - DWORD dwGroupNO; // + DWORD dwGroupNO; //组号 BYTE byRes[8]; }NET_DVR_PTZCRUISE_COND, *LPNET_DVR_PTZCRUISE_COND; -// +//输出参数 typedef struct tagNET_DVR_PTZCRUISE_POINTCFG { DWORD dwSize; - DWORD dwPresetIndex; //Ԥõ - NET_VCA_POINT struVcaPoint; //Ԥõ - BYTE byDwell; //ͣʱ - BYTE bySpeed; //ٶ - WORD wZoomCoordinate;///<Ԥõ㴰Zoomֵ + DWORD dwPresetIndex; //预置点序号 + NET_VCA_POINT struVcaPoint; //预置点坐标 + BYTE byDwell; //停留时间 + BYTE bySpeed; //速度 + WORD wZoomCoordinate;///<预置点窗口Zoom值 BYTE byRes[28]; }NET_DVR_PTZCRUISE_POINTCFG, *LPNET_DVR_PTZCRUISE_POINTCFG; typedef struct tagNET_DVR_PTZCRUISECFG { DWORD dwSize; - DWORD dwCruiseRoute; //Ѳ· - NET_DVR_PTZCRUISE_POINTCFG struCruisePoint[MAX_PTZCRUISE_POINT_NUM]; //֧32Ѳ + DWORD dwCruiseRoute; //巡航路径序号 + NET_DVR_PTZCRUISE_POINTCFG struCruisePoint[MAX_PTZCRUISE_POINT_NUM]; //最大支持32个巡航点 BYTE byRes[32]; }NET_DVR_PTZCRUISECFG, *LPNET_DVR_PTZCRUISECFG; -//ģʽṹ +//模式结构 typedef struct tagNET_DVR_MOTION_TRACK_CFG { DWORD dwSize; - BYTE byEnableTrack; //ã0-1- + BYTE byEnableTrack; //启用,0-否,1-是 BYTE byRes[63]; }NET_DVR_MOTION_TRACK_CFG, *LPNET_DVR_MOTION_TRACK_CFG; -//һĶʱƻ +//一天的定时计划 typedef struct tagNET_DVR_DAY_SCHEDULE { - BYTE byWorkMode ; //0-ȫ쿪1-ȫأ2-ʱ + BYTE byWorkMode ; //0-全天开,1-全天关,2-定时 BYTE byRes1[3] ; - NET_DVR_SCHEDTIME struTime[MAX_TIMESEGMENT_V30/*8*/]; //ʱ - BYTE byRes2[8]; // + NET_DVR_SCHEDTIME struTime[MAX_TIMESEGMENT_V30/*8*/]; //时间段 + BYTE byRes2[8]; //保留 }NET_DVR_DAY_SCHEDULE ,*LPNET_DVR_DAY_SCHEDULE; -//ʱܲṹ +//定时智能参数结构 typedef struct tagNET_DVR_SCHEDULE_AUTO_TRACK_CFG { - DWORD dwSize; //ṹ - BYTE byEnableTrack; //ã0- 1- + DWORD dwSize; //结构长度 + BYTE byEnableTrack; //启用:0- 否,1- 是 BYTE byRes1[3] ; - NET_DVR_DAY_SCHEDULE struSchedule[MAX_DAYS/*7*/]; //ʱʱΣ8ʱڵʱ䣬Ĭ϶ʱܹر + NET_DVR_DAY_SCHEDULE struSchedule[MAX_DAYS/*7*/]; //定时智能时间段,不在这8个时间段内的时间,默认定时智能关闭 BYTE byRes2[128]; }NET_DVR_SCHEDULE_AUTO_TRACK_CFG,*LPNET_DVR_SCHEDULE_AUTO_TRACK_CFG; typedef struct tagNET_DVR_I_FRAME { - DWORD dwSize; //ṹ - BYTE sStreamID[STREAM_ID_LEN/*32*/] ; //ID - DWORD dwChan; //ͨ - BYTE byStreamType; //0-1-2-33-44-5 + DWORD dwSize; //结构长度 + BYTE sStreamID[STREAM_ID_LEN/*32*/] ; //流ID + DWORD dwChan; //被控通道号 + BYTE byStreamType; //0-主码流,1-子码流,2-码流3,3-码流4,4-码流5 BYTE byRes[63]; } NET_DVR_I_FRAME, *LPNET_DVR_I_FRAME; typedef struct tagNET_DVR_REBOOT_TIME { - BYTE byDate; //ڼ1-7һ - BYTE byHour; //ʱ - BYTE byMinute; // + BYTE byDate; //星期几,1-7代表星期一到星期日 + BYTE byHour; //时 + BYTE byMinute; //分 BYTE byRes1; - BYTE byRebootMode; //0-1-˲ֻܻȡã - BYTE byDisabled; // 0- 1- - BYTE byRes[10]; // + BYTE byRebootMode; //0-按周重启,1-按月重启(此参数只能获取,不能设置) + BYTE byDisabled; // 0-启用 1-禁用 + BYTE byRes[10]; //保留 }NET_DVR_REBOOT_TIME,*LPNET_DVR_REBOOT_TIME; typedef struct tagNET_DVR_AUTO_REBOOT_CFG @@ -33099,66 +33099,66 @@ typedef struct tagNET_DVR_AUTO_REBOOT_CFG NET_DVR_REBOOT_TIME struRebootTime; }NET_DVR_AUTO_REBOOT_CFG,*LPNET_DVR_AUTO_REBOOT_CFG; -#define NET_DVR_GPS_FINDING 0 //ڲ -#define NET_DVR_GPS_RECV 1 // -#define NET_DVR_GPS_OVER 2 //ҽ -#define NET_DVR_GPS_EXCEPTION 3 //쳣 +#define NET_DVR_GPS_FINDING 0 //正在查找 +#define NET_DVR_GPS_RECV 1 //接收数据 +#define NET_DVR_GPS_OVER 2 //查找结束 +#define NET_DVR_GPS_EXCEPTION 3 //接收异常 typedef struct tagNET_DVR_MENU_OUTPUT_MODE { DWORD dwSize; - BYTE byMenuOutputMode; //ͬԴ豸0-Auto 1-CVBS 2-HDMI 3-VGA ͬԴ豸0-Auto 1-CVBS 2-HDMI/VGA + BYTE byMenuOutputMode; //非同源设备:0-Auto 1-主CVBS 2-HDMI 3-VGA 同源设备:0-Auto 1-主CVBS 2-HDMI/VGA BYTE byRes[63]; }NET_DVR_MENU_OUTPUT_MODE, *LPNET_DVR_MENU_OUTPUT_MODE; typedef struct tagNET_DVR_MB_IPADDR { - NET_DVR_IPADDR struIP; //IPַ - WORD wPort; //˿ں + NET_DVR_IPADDR struIP; //IP地址 + WORD wPort; //端口号 BYTE byRes[2]; }NET_DVR_MB_IPADDR,*LPNET_DVR_MB_IPADDR; typedef struct tagNET_DVR_MB_WVSPARA { NET_DVR_MB_IPADDR struWVSAddr; - BYTE byPuid[NAME_LEN]; //豸id - BYTE byPassword[PASSWD_LEN]; // + BYTE byPuid[NAME_LEN]; //设备id + BYTE byPassword[PASSWD_LEN]; //密码 BYTE byRes[8]; }NET_DVR_MB_WVSPARA, *LPNET_DVR_MB_WVSPARA; typedef struct tagNET_DVR_MB_EHOMEPARA { NET_DVR_MB_IPADDR struEHomeAddr; - BYTE byPuid[NAME_LEN]; //豸id + BYTE byPuid[NAME_LEN]; //设备id }NET_DVR_MB_EHOMEPARA, *LPNET_DVR_MB_EHOMEPARA; typedef struct tagNET_DVR_MB_PLATFORMPARA { DWORD dwSize; - BYTE byNetEnvironment;/*绷,0-wireless,1-3G,2-wLan,3-lan*/ - BYTE byCurPlatForm; /*< ǰƽ̨0 - WVS, 1 - E, 2 - ģʽ */ + BYTE byNetEnvironment;/*网络环境,0-wireless,1-3G,2-wLan,3-lan*/ + BYTE byCurPlatForm; /*< 当前平台0 - WVS, 1 - E家, 2 - 推模式 */ BYTE byRes1[2]; - NET_DVR_MB_WVSPARA struWVSPara; /*ƽ̨(ƽ̨)*/ - NET_DVR_MB_EHOMEPARA struMbEHpara;/*Eƽ̨ƽ̨豸 */ + NET_DVR_MB_WVSPARA struWVSPara; /*车载平台(平台登入)*/ + NET_DVR_MB_EHOMEPARA struMbEHpara;/*E家平台车载平台不设置设备登入密码 */ BYTE byRes2[64]; }NET_DVR_MB_PLATFORMPARA, *LPNET_DVR_MB_PLATFORMPARA; typedef struct tagNET_DVR_MB_GPS_STATUS { - BYTE byGPSModule; /*gpsģ, 0: , 1: */ - BYTE byPositionStatus; /*gpsλ״̬, 0: λʧ, 1: λɹ*/ - BYTE bySignalStrength; /*źǿ, 0: , 1: , 2: ǿ*/ + BYTE byGPSModule; /*gps模块, 0: 不存在, 1: 正常*/ + BYTE byPositionStatus; /*gps定位状态, 0: 定位失败, 1: 定位成功*/ + BYTE bySignalStrength; /*信号强度, 0: 弱, 1: 正常, 2: 强*/ BYTE byres[5]; }NET_DVR_MB_GPS_STATUS, *LPNET_DVR_MB_GPS_STATUS; typedef struct tagNET_DVR_MB_GSENSOR_STATUS { - BYTE byGsensorModule; /*g-sensorģ, 0: not exist, 1: , 2: */ - BYTE byCurAccX[10]; /*ǰXٶ*/ - BYTE byCurAccY[10]; /*ǰYٶ*/ - BYTE byCurAccZ[10]; /*ǰZٶ*/ - BYTE byRefAccX[10]; /* Xٶȱ궨ֵ*/ - BYTE byRefAccY[10]; /* Yٶȱ궨ֵ*/ - BYTE byRefAccZ[10]; /* Zٶȱ궨ֵ*/ + BYTE byGsensorModule; /*g-sensor模块, 0: not exist, 1: 内置, 2: 外置*/ + BYTE byCurAccX[10]; /*当前X轴加速度*/ + BYTE byCurAccY[10]; /*当前Y轴加速度*/ + BYTE byCurAccZ[10]; /*当前Z轴加速度*/ + BYTE byRefAccX[10]; /* X轴加速度标定值*/ + BYTE byRefAccY[10]; /* Y轴加速度标定值*/ + BYTE byRefAccZ[10]; /* Z轴加速度标定值*/ BYTE byres[3]; }NET_DVR_MB_GSENSOR_STATUS, *LPNET_DVR_MB_GSENSOR_STATUS; @@ -33167,49 +33167,49 @@ typedef struct tagNET_DVR_MB_GSENSOR_STATUS typedef struct tagNET_DVR_MB_WIFI_STATUS { - BYTE byEnableWiFi; /* , 0 , 1 */ - BYTE byWiFiConnectStatus; /* WIFI״̬, 0: ʧ, 1: ӳɹ 2: ģ*/ - BYTE bySignalStrength; /* źǿ, 0 , 1 , 2 ǿ */ - BYTE byIPaddress[IP_ADDR_LEN]; /*WIFI 豸 ip*/ - BYTE byEssid[IW_ESSID_MAX_SIZE]; /*߽essid*/ + BYTE byEnableWiFi; /* 无线, 0 关, 1 开 */ + BYTE byWiFiConnectStatus; /* WIFI状态, 0: 连接失败, 1: 连接成功 2: 无模块*/ + BYTE bySignalStrength; /* 信号强度, 0 弱, 1 正常, 2 强 */ + BYTE byIPaddress[IP_ADDR_LEN]; /*WIFI 设备 ip*/ + BYTE byEssid[IW_ESSID_MAX_SIZE]; /*无线接入点essid*/ BYTE byres[5]; }NET_DVR_MB_WIFI_STATUS,*LPNET_DVR_MB_WIFI_STATUS; typedef struct tagNET_DVR_MB_PLATFORM_STATUS { - BYTE byCurPlat; /*ǰƽ̨, 0: wvs, 1: ivms, 2: ģʽ(net_3g_sdk)*/ - BYTE byLoginStatus; /*login ״̬, 0: login failed, 1: login success*/ - BYTE byExceptionInfo; /*쳣Ϣ*/ + BYTE byCurPlat; /*当前平台, 0: wvs, 1: ivms, 2: 推模式(net_3g_sdk)*/ + BYTE byLoginStatus; /*login 状态, 0: login failed, 1: login success*/ + BYTE byExceptionInfo; /*异常信息*/ /* WVS :exception info: - 0: ӷʧ - 1: ע - 2: û - 3: עᳬʱ - 4: ʱ - 5: עɹ + 0: 连接服务器失败 + 1: 注册中 + 2: 用户名密码错误 + 3: 注册超时 + 4: 心跳超时 + 5: 注册成功 iVMS :exception info: - 0δע - 1ע - 2עӳ - 3עᳬʱ - 4ʱûж - 5ע - 6 CMSע豸Ѿ޶̨ - 7 CMSעͨѾ޶ͨ - 8豸WEBû - 9CMSWEBͨʧ - 10¼δ֪ - 11עɹ - ģʽ :exception info: - 0δע - 1: ע - 2: ظע - 3: עʧ - 4: IP仯 - 5: עɹ - 6: ûע - 7: ʱ + 0未注册 + 1注册中 + 2注册连接出错 + 3注册超时 + 4长时间没有心跳,连接中断 + 5重新注册 + 6 CMS中注册设备数量已经超过限定的台数 + 7 CMS中注册通道数量已经超过限定通道数 + 8设备在WEB管理中心中没有配置 + 9CMS和WEB管理中心通信失败 + 10登录未知错误 + 11注册成功 + 推模式 :exception info: + 0未注册 + 1: 注册中 + 2: 重复注册 + 3: 注册连接失败 + 4: 服务器IP变化 + 5: 注册成功 + 6: 用户注销 + 7: 心跳超时 */ BYTE byres[5]; }NET_DVR_MB_PLATFORM_STATUS, *LPNET_DVR_MB_PLATFORM_STATUS; @@ -33217,7 +33217,7 @@ typedef struct tagNET_DVR_MB_PLATFORM_STATUS typedef struct tagNET_DVR_MB_MOBILEDEV_STATUS { - DWORD dwSize; /*ṹС*/ + DWORD dwSize; /*结构大小*/ union { NET_DVR_MB_GPS_STATUS struGPSStatus; @@ -33232,127 +33232,127 @@ typedef struct tagNET_DVR_MB_MOBILEDEV_STATUS #define NET_DVR_WIFI_STATUS 2 #define NET_DVR_PLATFORM_STATUS 3 -//GPSϢṹ +//GPS点信息结构 typedef struct tagNET_DVR_GPS_INFO { - /* γΪS*100 */ - BYTE byDirection[2]; /*direction[0]0or1(/), direction[1]:0or1(γ/γ) */ - BYTE bySvs; /* satellite vehicles(ֵ0)Чλ */ - BYTE byLocateMode; /* λģʽ(ֵ0)NMEA0183 3.00汾0=λ1=֣2=㣬3=Ч */ - WORD wHDOP; /* ˮƽӣGPSȷȣ0.5-99.96ڶλȸߣ20趪洢dz10Ժ */ - WORD wHeight; /* ߶ */ - DWORD dwLatitude; /*γlatitude = ʵʶ*3600*100+ʵʷ*60*100+ʵ*100 */ - DWORD dwLongitude; /*longitude =ʵʶ*3600*100+ʵʷ*60*100+ʵ*100 */ - DWORD dwVehicleSpeed; /* mobile speed =ʵٶ*100000 ʵʵλkph*/ - DWORD dwVehicleDirection; /* mobile direction= ʵʷ*100ʵֵǷǣΪ0ȣ˳ʱ */ - BYTE byRes[8]; // -}NET_DVR_GPS_INFO,*LPNET_DVR_GPS_INFO; //32ֽ + /* 经纬度为S*100 */ + BYTE byDirection[2]; /*direction[0]0or1(东经/西经), direction[1]:0or1(北纬/南纬) */ + BYTE bySvs; /* satellite vehicles(初值0):有效定位星数 */ + BYTE byLocateMode; /* 定位模式(初值0):仅NMEA0183 3.00版本输出,0=自主定位,1=差分,2=估算,3=数据无效 */ + WORD wHDOP; /* 水平精度因子,度量GPS精确度,0.5-99.9,6以内定位精度高,20以上需丢弃,这里存储的是乘以10以后的整数 */ + WORD wHeight; /* 高度 */ + DWORD dwLatitude; /*纬度latitude = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwLongitude; /*经度longitude =实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwVehicleSpeed; /* mobile speed =实际速度*100000 实际单位kph*/ + DWORD dwVehicleDirection; /* mobile direction= 实际方向*100,实际数值是方向角,正北为0度,顺时针 */ + BYTE byRes[8]; // 保留 +}NET_DVR_GPS_INFO,*LPNET_DVR_GPS_INFO; //32字节 -//GPS״̬ϴ +//GPS状态上传 typedef struct _NET_DVR_GPS_STATUS_ALARM_ { DWORD dwSize; - NET_DVR_TIME_V30 struGPSTime; //GPS ʱ䣬ñʱ - NET_DVR_GPS_INFO struGPSInfo; //GPS - BYTE byRetransFlag; //0- GPS Ϊʵʱ1- GPS Ϊش - BYTE byNeedsResponse; //Ӧǣ0Ӧ1Ӧ - BYTE byType;//ϱ 0-˻ - BYTE byBatteryRemaining;//ʣ-1--100; -1ʾ - int iRollAngle;//Ƕ,Χ-pi - +pi,ʵֵ*100 - int iPitchAngle;//ͷǶ,Χ-pi - +pi,ʵֵ*100 - WORD wRelativeHeight;//Ը߶ȣλ - WORD wVerticalSpeed;//ֱٶȣλ/Сʱ - BYTE byRes2[160]; // + NET_DVR_TIME_V30 struGPSTime; //GPS 采样时间,采用本地时间 + NET_DVR_GPS_INFO struGPSInfo; //GPS坐标点 + BYTE byRetransFlag; //0-本条 GPS 为实时包;1-本条 GPS 为重传包 + BYTE byNeedsResponse; //回应标记,0:不需回应包,1:需回应包 + BYTE byType;//上报类型 0-无人机 + BYTE byBatteryRemaining;//剩余电量:-1--100; -1表示出错 + int iRollAngle;//俯仰角度,范围-pi - +pi,实际值*100 + int iPitchAngle;//机头朝向角度,范围-pi - +pi,实际值*100 + WORD wRelativeHeight;//相对高度,单位:厘米 + WORD wVerticalSpeed;//垂直速度,单位:厘米/小时 + BYTE byRes2[160]; //保留 }NET_DVR_GPS_STATUS_ALARM, *LPNET_DVR_GPS_STATUS_ALARM; -//GPSʱ +//GPS关联时间 typedef struct tagNTE_DVR_GPS_DATA { - NET_DVR_GPS_INFO struGPSInfo; //GPS - NET_DVR_TIME struTime; //GPSӦʱ㣬UTCʱ - BYTE byRes[12]; // + NET_DVR_GPS_INFO struGPSInfo; //GPS坐标点 + NET_DVR_TIME struTime; //GPS坐标对应的时间点,UTC时间 + BYTE byRes[12]; // 保留 }NET_DVR_GPS_DATA,*LPNET_DVR_GPS_DATA; -//GPSṹ +//GPS查找条件结构 typedef struct tagNET_DVR_GET_GPS_DATA_PAPAM { - DWORD dwCmdType; //0-ʱβGPS,1-ʱGPS + DWORD dwCmdType; //0-按时间段查找GPS数据,1-按时间点查找GPS数据 union { struct { - NET_DVR_TIME struBeginTime; //GPSݲʼʱ - NET_DVR_TIME struEndTime; //GPSݲҽʱ - DWORD dwInterval; //GPSʱλ - BYTE byRes[76]; // + NET_DVR_TIME struBeginTime; //GPS数据查找起始时间 + NET_DVR_TIME struEndTime; //GPS数据查找结束时间 + DWORD dwInterval; //GPS点时间间隔,单位秒 + BYTE byRes[76]; // 保留 }TimeSeg; struct { - NET_DVR_TIME struTimePoint; //GPSݲʼʱ䵥λ - BYTE byRes[104]; // + NET_DVR_TIME struTimePoint; //GPS数据查找起始时间单位秒 + BYTE byRes[104]; // 保留 }TimePoint; }GpsDataParam; }NET_DVR_GET_GPS_DATA_PARAM,*LPNET_DVR_GET_GPS_DATA_PARAM; -#define NET_SDK_MAX_CARD_LEN 32 //󿨺ų +#define NET_SDK_MAX_CARD_LEN 32 //最大卡号长度 -//ǩϢϴ +//标签信息上传 typedef struct _NET_DVR_TAG_INFO_ALARM_ { DWORD dwSize; - BYTE byCardNo[NET_SDK_MAX_CARD_LEN/*32*/]; // - int iRssi;//źǿ,Χ-100 - +100 - BYTE byIndexCode[64];//ƽ̨index code,൱豸 - NET_DVR_TIME_V30 struAcquisitionTime;//ȡʱ - BYTE byRFIDInfo[32]; //ƬID - BYTE byRFIDInfoLen; //ƬID - BYTE byVoltageLow; //1ʾ͵ѹ0ʾ - BYTE byAlarmFlag; //(֪ͨƽ̨)ǷҪ1Ҫ0Ҫ - BYTE byDirection; //0ʾ,1ʾ,2ʾ,3-255 - BYTE byRes[48]; // + BYTE byCardNo[NET_SDK_MAX_CARD_LEN/*32*/]; //卡号 + int iRssi;//接收信号强度,范围-100 - +100 + BYTE byIndexCode[64];//平台index code,相当于设备编号 + NET_DVR_TIME_V30 struAcquisitionTime;//获取时间 + BYTE byRFIDInfo[32]; //卡片ID + BYTE byRFIDInfoLen; //卡片ID长度 + BYTE byVoltageLow; //1表示低电压,0表示正常 + BYTE byAlarmFlag; //(通知平台服务器)是否需要报警,1需要,0不需要 + BYTE byDirection; //0表示忽略,1表示入,2表示出,3-255保留 + BYTE byRes[48]; //保留 }NET_DVR_TAG_INFO_ALARM, *LPNET_DVR_TAG_INFO_ALARM; typedef struct tagNET_DVR_SDKLOCAL_CFG { - BYTE byEnableAbilityParse; //ʹ,0-ʹ,1-ʹ,Ĭϲʹ - BYTE byVoiceComMode; //Խģʽ0-ʹöԽ⣨Ĭϣ1-ʹwindows apiģʽ - BYTE byLoginWithSimXml; //¼ʱʹģ,0-ʹ,1-ʹ,Ĭϲʹ + BYTE byEnableAbilityParse; //使用能力集解析库,0-不使用,1-使用,默认不使用 + BYTE byVoiceComMode; //对讲模式,0-使用对讲库(默认),1-使用windows api模式 + BYTE byLoginWithSimXml; //登录时使用模拟能力,0-不使用,1-使用,默认不使用 BYTE byCompatibleType; BYTE byRes[380]; - BYTE byProtectKey[128]; //ĬΪ0 + BYTE byProtectKey[128]; //默认设置为0 }NET_DVR_SDKLOCAL_CFG, *LPNET_DVR_SDKLOCAL_CFG; typedef struct tagNET_DVR_LOCAL_ABILITY_PARSE_CFG { - BYTE byEnableAbilityParse; //ʹ,0-ʹ,1-ʹ,Ĭϲʹ + BYTE byEnableAbilityParse; //使用能力集解析库,0-不使用,1-使用,默认不使用 BYTE byRes[127]; }NET_DVR_LOCAL_ABILITY_PARSE_CFG, *LPNET_DVR_LOCAL_ABILITY_PARSE_CFG; typedef struct tagNET_DVR_LOCAL_TALK_MODE_CFG { - BYTE byTalkMode; //Խģʽ0-ʹöԽ⣨Ĭϣ1-ʹwindows apiģʽ + BYTE byTalkMode; //对讲模式,0-使用对讲库(默认),1-使用windows api模式 BYTE byRes[127]; }NET_DVR_LOCAL_TALK_MODE_CFG, *LPNET_DVR_LOCAL_TALK_MODE_CFG; typedef struct tagNET_DVR_LOCAL_PROTECT_KEY_CFG { - BYTE byProtectKey[128]; //ĬΪ0 + BYTE byProtectKey[128]; //默认设置为0 BYTE byRes[128]; }NET_DVR_LOCAL_PROTECT_KEY_CFG, *LPNET_DVR_LOCAL_PROTECT_KEY_CFG; typedef struct tagNET_DVR_SIMXML_LOGIN { - BYTE byLoginWithSimXml; //¼ʱʹģУṹֶ,0-ʹ,1-ʹ + BYTE byLoginWithSimXml; //登录时使用模拟能力校正结构体能力字段,0-不使用,1-使用 BYTE byRes[127]; }NET_DVR_SIMXML_LOGIN, *LPNET_DVR_SIMXML_LOGIN; -//صò +//报警回调配置参数 typedef struct -{ /*JSON͸COMM_VCA_ALARMJSONʽ - 0~JSONʽο4.1.4; - 1~JSONʽο4.1.5 +{ /*控制JSON透传报警(即COMM_VCA_ALARM)的JSON格式。 + 0~新JSON格式,参考4.1.4; + 1~旧JSON格式,参考4.1.5 */ BYTE byVcaAlarmJsonType; BYTE byRes[63]; @@ -33360,93 +33360,93 @@ typedef struct typedef enum tagNET_SDK_LOCAL_CFG_TYPE { - NET_SDK_LOCAL_CFG_TYPE_TCP_PORT_BIND = 0, //TCP˿ڰãӦṹNET_DVR_LOCAL_TCP_PORT_BIND_CFG - NET_SDK_LOCAL_CFG_TYPE_UDP_PORT_BIND, //UDP˿ڰãӦṹNET_DVR_LOCAL_UDP_PORT_BIND_CFG - NET_SDK_LOCAL_CFG_TYPE_MEM_POOL, //ڴرãӦṹNET_DVR_LOCAL_MEM_POOL_CFG - NET_SDK_LOCAL_CFG_TYPE_MODULE_RECV_TIMEOUT, //ģóʱʱ䣬ӦṹNET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG - NET_SDK_LOCAL_CFG_TYPE_ABILITY_PARSE, //Ƿʹ⣬ӦṹNET_DVR_LOCAL_ABILITY_PARSE_CFG - NET_SDK_LOCAL_CFG_TYPE_TALK_MODE, //ԽģʽӦṹNET_DVR_LOCAL_TALK_MODE_CFG - NET_SDK_LOCAL_CFG_TYPE_PROTECT_KEY, //ԿãӦṹNET_DVR_LOCAL_PROTECT_KEY_CFG - NET_SDK_LOCAL_CFG_TYPE_CFG_VERSION, //ڲ԰汾ͷ豸˼NET_DVR_LOCAL_MEM_POOL_CFG, ֻòʱá - NET_SDK_LOCAL_CFG_TYPE_RTSP_PARAMS, //rtspãڽṹNET_DVR_RTSP_PARAMS_CFG - NET_SDK_LOCAL_CFG_TYPE_SIMXML_LOGIN, //ڵ¼ʱʹģsupportֶ, ӦṹNET_DVR_SIMXML_LOGIN - NET_SDK_LOCAL_CFG_TYPE_CHECK_DEV, //ʱ - NET_SDK_LOCAL_CFG_TYPE_SECURITY, //SDKΰȫã - NET_SDK_LOCAL_CFG_TYPE_EZVIZLIB_PATH, //өʯͨſַ - NET_SDK_LOCAL_CFG_TYPE_CHAR_ENCODE, //13.ַشص - NET_SDK_LOCAL_CFG_TYPE_PROXYS, //ûȡ - NET_DVR_LOCAL_CFG_TYPE_LOG, //־ NET_DVR_LOCAL_LOG_CFG - NET_DVR_LOCAL_CFG_TYPE_STREAM_CALLBACK, //ص NET_DVR_LOCAL_STREAM_CALLBACK_CFG - NET_DVR_LOCAL_CFG_TYPE_GENERAL, //ͨò NET_DVR_LOCAL_GENERAL_CFG - NET_DVR_LOCAL_CFG_TYPE_PTZ, //PTZǷ豸 - NET_DVR_LOCAL_CFG_MESSAGE_CALLBACK_V51, //V51صر,ӦṹΪNET_DVR_MESSAGE_CALLBACK_PARAM_V51 (NET_DVR_SetDVRMessageCallBack_V51ϰ汾Ч) - NET_SDK_LOCAL_CFG_CERTIFICATION, //ú֤صIJӦṹṹNET_DVR_LOCAL_CERTIFICATION - NET_SDK_LOCAL_CFG_PORT_MULTIPLEX, //˿ڸãӦṹNET_DVR_LOCAL_PORT_MULTI_CFG - NET_SDK_LOCAL_CFG_ASYNC, //첽ãӦṹNET_DVR_LOCAL_ASYNC_CFG + NET_SDK_LOCAL_CFG_TYPE_TCP_PORT_BIND = 0, //本地TCP端口绑定配置,对应结构体NET_DVR_LOCAL_TCP_PORT_BIND_CFG + NET_SDK_LOCAL_CFG_TYPE_UDP_PORT_BIND, //本地UDP端口绑定配置,对应结构体NET_DVR_LOCAL_UDP_PORT_BIND_CFG + NET_SDK_LOCAL_CFG_TYPE_MEM_POOL, //内存池本地配置,对应结构体NET_DVR_LOCAL_MEM_POOL_CFG + NET_SDK_LOCAL_CFG_TYPE_MODULE_RECV_TIMEOUT, //按模块配置超时时间,对应结构体NET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG + NET_SDK_LOCAL_CFG_TYPE_ABILITY_PARSE, //是否使用能力集解析库,对应结构体NET_DVR_LOCAL_ABILITY_PARSE_CFG + NET_SDK_LOCAL_CFG_TYPE_TALK_MODE, //对讲模式,对应结构体NET_DVR_LOCAL_TALK_MODE_CFG + NET_SDK_LOCAL_CFG_TYPE_PROTECT_KEY, //密钥设置,对应结构体NET_DVR_LOCAL_PROTECT_KEY_CFG + NET_SDK_LOCAL_CFG_TYPE_CFG_VERSION, //用于测试版本头的设备端兼容情NET_DVR_LOCAL_MEM_POOL_CFG况, 只有在设置参数时才起作用。 + NET_SDK_LOCAL_CFG_TYPE_RTSP_PARAMS, //rtsp参数配置,对于结构体NET_DVR_RTSP_PARAMS_CFG + NET_SDK_LOCAL_CFG_TYPE_SIMXML_LOGIN, //在登录时使用模拟能力补充support字段, 对应结构NET_DVR_SIMXML_LOGIN + NET_SDK_LOCAL_CFG_TYPE_CHECK_DEV, //心跳交互间隔时间 + NET_SDK_LOCAL_CFG_TYPE_SECURITY, //SDK本次安全配置, + NET_SDK_LOCAL_CFG_TYPE_EZVIZLIB_PATH, //配置萤石云通信库地址, + NET_SDK_LOCAL_CFG_TYPE_CHAR_ENCODE, //13.配置字符编码相关处理回调 + NET_SDK_LOCAL_CFG_TYPE_PROXYS, //设置获取代 + NET_DVR_LOCAL_CFG_TYPE_LOG, //日志参数配置 NET_DVR_LOCAL_LOG_CFG + NET_DVR_LOCAL_CFG_TYPE_STREAM_CALLBACK, //码流回调参数配置 NET_DVR_LOCAL_STREAM_CALLBACK_CFG + NET_DVR_LOCAL_CFG_TYPE_GENERAL, //通用参数配置 NET_DVR_LOCAL_GENERAL_CFG + NET_DVR_LOCAL_CFG_TYPE_PTZ, //PTZ是否接收设备返回配置 + NET_DVR_LOCAL_CFG_MESSAGE_CALLBACK_V51, //报警V51回调相关本地配置,对应结构体为NET_DVR_MESSAGE_CALLBACK_PARAM_V51 。(仅对NET_DVR_SetDVRMessageCallBack_V51以上版本有效) + NET_SDK_LOCAL_CFG_CERTIFICATION, //配置和证书相关的参数,对应结构体结构体NET_DVR_LOCAL_CERTIFICATION + NET_SDK_LOCAL_CFG_PORT_MULTIPLEX, //端口复用,对应结构体NET_DVR_LOCAL_PORT_MULTI_CFG + NET_SDK_LOCAL_CFG_ASYNC, //异步配置,对应结构体NET_DVR_LOCAL_ASYNC_CFG NET_SDK_P2P_LOGIN_2C, NET_SDK_P2P_LOGIN_2B, NET_SDK_P2P_LOGOUT, - NET_SDK_AUDIOCAST_CFG //ù㲥 ,ӦṹNET_LOCAL_AUDIOCAST_CFG + NET_SDK_AUDIOCAST_CFG //配置广播采样率 ,对应结构体NET_LOCAL_AUDIOCAST_CFG }NET_SDK_LOCAL_CFG_TYPE; typedef enum tagNET_SDK_EXCEPTION_CALLBACK_TYPE { - NET_SDK_EXCEPTION_CALLBACK_BY_POOL = 0, //̳ͨ߳쳣ص - NET_SDK_EXCEPTION_CALLBACK_DIRECTLY = 1, //ֱ쳣صϲ + NET_SDK_EXCEPTION_CALLBACK_BY_POOL = 0, //通过线程池异常回调 + NET_SDK_EXCEPTION_CALLBACK_DIRECTLY = 1, //直接异常回调给上层 }NET_SDK_EXCEPTION_CALLBACK_TYPE; typedef struct tagNET_DVR_LOCAL_GENERAL_CFG { - BYTE byExceptionCbDirectly; //0-̳ͨ߳쳣ص1-ֱ쳣صϲ - BYTE byNotSplitRecordFile; //طźԤб浽¼ļƬ 0-ĬƬ1-Ƭ - BYTE byResumeUpgradeEnable; //ʹܣ0-رգĬϣ1- - BYTE byAlarmJsonPictureSeparate; //JSON͸ݺͼƬǷ룬0-룬1-루COMM_ISAPI_ALARMصأ - BYTE byRes[4]; // - UINT64 i64FileSize; //λByte - DWORD dwResumeUpgradeTimeout; //ʱʱ䣬λ - BYTE byAlarmReconnectMode; //0-߳Ĭϣ 1-̳߳ - BYTE byStdXmlBufferSize; //ISAPI͸ջС1-1M -Ĭ - BYTE byMultiplexing; //0-ͨӣTLSӣرն·ã1-ͨӣTLSӣ· - BYTE byFastUpgrade; //0-1- - BYTE byAlarmPrealloc; //0-Ԥ䡣ֵΪԤС64λ - BYTE bChangeEventIPToDomain; //0-תĬΪIP 1-ת¼豸,ڲ¼ʱϱƽ̨ʱIPǷת - BYTE byRes1[230]; //Ԥ + BYTE byExceptionCbDirectly; //0-通过线程池异常回调,1-直接异常回调给上层 + BYTE byNotSplitRecordFile; //回放和预览中保存到本地录像文件不切片 0-默认切片,1-不切片 + BYTE byResumeUpgradeEnable; //断网续传升级使能,0-关闭(默认),1-开启 + BYTE byAlarmJsonPictureSeparate; //控制JSON透传报警数据和图片是否分离,0-不分离,1-分离(分离后走COMM_ISAPI_ALARM回调返回) + BYTE byRes[4]; //保留 + UINT64 i64FileSize; //单位:Byte + DWORD dwResumeUpgradeTimeout; //断网续传重连超时时间,单位毫秒 + BYTE byAlarmReconnectMode; //0-独立线程重连(默认) 1-线程池重连 + BYTE byStdXmlBufferSize; //设置ISAPI透传接收缓冲区大小,1-1M 其他-默认 + BYTE byMultiplexing; //0-普通链接(非TLS链接)关闭多路复用,1-普通链接(非TLS链接)开启多路复用 + BYTE byFastUpgrade; //0-正常升级,1-快速升级 + BYTE byAlarmPrealloc; //0-不预分配。其他值为预分配大小,最大64,单位兆 + BYTE bChangeEventIPToDomain; //0-不转换(默认为IP) 1-转换成域名,仅对域名登录的设备,在布防后,有事件推送时,上报给平台时IP定义是否发生转换 + BYTE byRes1[230]; //预留 }NET_DVR_LOCAL_GENERAL_CFG, *LPNET_DVR_LOCAL_GENERAL_CFG; typedef struct tagNET_SDK_P2P_SERVER_2C { - BYTE byPlatformType; //0- 1- 2-test2 + BYTE byPlatformType; //0-国内 1-国外 2-test2 BYTE byRes1[3]; char *pAppID; //APP ID - char *pAuthAddr; //֤IPַ - char *pPlatformAddr; //ƽ̨IPַ - char *pUserName; //˺ - char *pPassword; // + char *pAuthAddr; //认证服务器IP地址 + char *pPlatformAddr; //平台服务IP地址 + char *pUserName; //账号 + char *pPassword; //密码 BYTE byRes[40]; } NET_SDK_P2P_SERVER_2C, *LPNET_DVR_P2P_SERVER_2C; typedef struct tagNET_SDK_P2P_SERVER_2B { - BYTE byPlatformType; //0- 1- 2-test2 + BYTE byPlatformType; //0-国内 1-国外 2-test2 BYTE byRes1[3]; char *pAppID; //APP ID - char *pAuthAddr; //֤IPַ - char *pPlatformAddr; //ƽ̨IPַ + char *pAuthAddr; //认证服务器IP地址 + char *pPlatformAddr; //平台服务IP地址 char *pToken; //Token BYTE byRes[44]; } NET_SDK_P2P_SERVER_2B, *LPNET_DVR_P2P_SERVER_2B; typedef struct tagNET_DVR_LOCAL_ASYNC_CFG { - BOOL bEnable; //첽ʹܣtrue- + BOOL bEnable; //异步配置使能,true-开启 BYTE byRes[60]; }NET_DVR_LOCAL_ASYNC_CFG, *LPNET_DVR_LOCAL_ASYNC_CFG; typedef struct tagNET_DVR_LOCAL_STREAM_CALLBACK_CFG { - BYTE byPlayBackEndFlag; //0-صطŽǣ1-صطŽ - BYTE byPlayBackNewPos; //0-صǣ1-ص - BYTE byRes[254]; // + BYTE byPlayBackEndFlag; //0-不回调回放结束标记,1-回调回放结束标记 + BYTE byPlayBackNewPos; //0-不回调新码流标记,1-回调新码流标记 + BYTE byRes[254]; //保留 }NET_DVR_LOCAL_STREAM_CALLBACK_CFG, *LPNET_DVR_LOCAL_STREAM_CALLBACK_CFG; typedef void(CALLBACK *LOGCALLBACK)(char *pContent, unsigned int dwInputLen, int wLogLevel, void *pData); @@ -33454,12 +33454,12 @@ typedef void(CALLBACK *LOGCALLBACK)(char *pContent, unsigned int dwInputLen, int typedef struct tagNET_DVR_LOCAL_LOG_CFG { WORD wSDKLogNum; - LOGCALLBACK fnCB; //־ص - void *pUserData; //ûָ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - BYTE byRes[238]; // + LOGCALLBACK fnCB; //日志回调 + void *pUserData; //用户指针 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE byRes[238]; //保留 #else - BYTE byRes[246]; // + BYTE byRes[246]; //保留 #endif }NET_DVR_LOCAL_LOG_CFG, *LPNET_DVR_LOCAL_LOG_CFG; @@ -33473,70 +33473,70 @@ typedef struct tagNET_DVR_LOCAL_BYTE_ENCODE_CONVERT typedef struct tagNET_DVR_LOCAL_SECURITY { - BYTE bySecurityLevel;//˽Эͨģʽ //0-ģʽĬϣеSDK¼Эͨ1-ȫģʽMD5, RSAMD5¼У2-ȫģʽRSARSA¼У + BYTE bySecurityLevel;//私有协议通信模式, //0-兼容模式(默认),允许所有的SDK登录协议通过,1-安全模式(MD5), 允许RSA和MD5登录,开启校验2-安全模式(RSA)RSA登录,开启校验 BYTE byRes[255]; }NET_DVR_LOCAL_SECURITY, *LPNET_DVR_LOCAL_SECURITY; typedef struct tagNET_DVR_LOCAL_CHECK_DEV { - DWORD dwCheckOnlineTimeout; //Ѳʱλms СֵΪ30sֵ120sΪ0ʱʾĬֵ(120s) - DWORD dwCheckOnlineNetFailMax; //ԭʧܵۼӴֵSDKŻصû쳣Ϊ0ʱʾʹĬֵ1 + DWORD dwCheckOnlineTimeout; //巡检时间间隔,单位ms 最小值为30s,最大值120s。为0时,表示用默认值(120s) + DWORD dwCheckOnlineNetFailMax; //由于网络原因失败的最大累加次数;超过该值SDK才回调用户异常,为0时,表示使用默认值1 BYTE byRes[256]; }NET_DVR_LOCAL_CHECK_DEV,*LPNET_DVR_LOCAL_CHECK_DEV; typedef struct tagNET_DVR_LOCAL_PTZ_CFG { - BYTE byWithoutRecv; //0-豸أ1-豸 + BYTE byWithoutRecv; //0-接收设备返回,1-不接收设备返回 BYTE byRes[63]; }NET_DVR_LOCAL_PTZ_CFG, *LPNET_DVR_LOCAL_PTZ_CFG; typedef struct tagNET_DVR_LOCAL_CFG_VERSION { - BYTE byVersion; //汾Ϣ - BYTE byRes[63]; // + BYTE byVersion; //版本信息 + BYTE byRes[63]; //保留 }NET_DVR_LOCAL_CFG_VERSION, *LPNET_DVR_LOCAL_CFG_VERSION; typedef struct tagNET_DVR_LOCAL_TCP_PORT_BIND_CFG { - WORD wLocalBindTcpMinPort; //ذTcpС˿ - WORD wLocalBindTcpMaxPort; //ذTcp˿ - BYTE byRes[60]; // + WORD wLocalBindTcpMinPort; //本地绑定Tcp最小端口 + WORD wLocalBindTcpMaxPort; //本地绑定Tcp最大端口 + BYTE byRes[60]; //保留 }NET_DVR_LOCAL_TCP_PORT_BIND_CFG, *LPNET_DVR_LOCAL_TCP_PORT_BIND_CFG; typedef struct tagNET_DVR_LOCAL_UDP_PORT_BIND_CFG { - WORD wLocalBindUdpMinPort; //ذUdpС˿ - WORD wLocalBindUdpMaxPort; //ذUdp˿ - BYTE byRes[60]; // + WORD wLocalBindUdpMinPort; //本地绑定Udp最小端口 + WORD wLocalBindUdpMaxPort; //本地绑定Udp最大端口 + BYTE byRes[60]; //保留 }NET_DVR_LOCAL_UDP_PORT_BIND_CFG, *LPNET_DVR_LOCAL_UDP_PORT_BIND_CFG; typedef struct tagNET_DVR_LOCAL_MEM_POOL_CFG { - DWORD dwAlarmMaxBlockNum; //ģڴϵͳڴ飨blockÿblockΪ64MB, ϵͳ룬0ʾ - DWORD dwAlarmReleaseInterval; //ģڴͷŵļλ룬Ϊ0ʾͷ - DWORD dwObjectReleaseInterval; //ģڴͷŵļλ룬Ϊ0ʾͷ - BYTE byRes[508]; // + DWORD dwAlarmMaxBlockNum; //报警模块内存池最多向系统申请的内存块(block)个数,每个block为64MB, 超过这个上限则不向系统申请,0表示无上限 + DWORD dwAlarmReleaseInterval; //报警模块空闲内存释放的间隔,单位秒,为0表示不释放 + DWORD dwObjectReleaseInterval; //对象申请模块空闲内存释放的间隔,单位秒,为0表示不释放 + BYTE byRes[508]; //保留 }NET_DVR_LOCAL_MEM_POOL_CFG, *LPNET_DVR_LOCAL_MEM_POOL_CFG; typedef struct tagNET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG { - DWORD dwPreviewTime; //Ԥģ鳬ʱʱ - DWORD dwAlarmTime; //ģ鳬ʱʱ - DWORD dwVodTime; //طģ鳬ʱʱ - DWORD dwElse; //ģ - BYTE byRes[512]; // + DWORD dwPreviewTime; //预览模块超时时间 + DWORD dwAlarmTime; //报警模块超时时间 + DWORD dwVodTime; //回放模块超时时间 + DWORD dwElse; //其他模块 + BYTE byRes[512]; //保留 }NET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG, *LPNET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG; -#define MAX_CERTIFICATE_ISSUER_LEN 64 //֤䷢߳ -#define MAX_CERTIFICATE_VALIDITY_LEN 128 //֤Чʱ䳤 -#define MAX_CERTIFICATE_SUBJECT_LEN 64 //֤߳ +#define MAX_CERTIFICATE_ISSUER_LEN 64 //证书颁发者长度 +#define MAX_CERTIFICATE_VALIDITY_LEN 128 //证书有效时间长度 +#define MAX_CERTIFICATE_SUBJECT_LEN 64 //证书持有者长度 typedef struct tagNET_DVR_CETTIFICATE_INFO { DWORD dwSize; - char szIssuer[MAX_CERTIFICATE_ISSUER_LEN]; //֤䷢ - char szSubject[MAX_CERTIFICATE_SUBJECT_LEN]; //֤ + char szIssuer[MAX_CERTIFICATE_ISSUER_LEN]; //证书颁发者 + char szSubject[MAX_CERTIFICATE_SUBJECT_LEN]; //证书持有者 NET_DVR_TIME struStartTime; NET_DVR_TIME struEndTime; BYTE byRes1[1024]; @@ -33544,7 +33544,7 @@ typedef struct tagNET_DVR_CETTIFICATE_INFO typedef BOOL(CALLBACK *fnCertVerifyResultCallBack) (DWORD uiResult, LPNET_DVR_CETTIFICATE_INFO lpCertificateInfo, char *pUserData); -#define MAX_FILE_PATH_LEN 256 //ļ· +#define MAX_FILE_PATH_LEN 256 //文件路径长度 typedef struct tagNET_DVR_LOCAL_CERTIFICATION { char szLoadPath[MAX_FILE_PATH_LEN]; @@ -33555,101 +33555,101 @@ typedef struct tagNET_DVR_LOCAL_CERTIFICATION typedef struct tagNET_DVR_LOCAL_PORT_MULTI_CFG { - BOOL bEnable; //˿ڸʹܣtrue- + BOOL bEnable; //端口复用使能,true-开启 BYTE byRes[60]; }NET_DVR_LOCAL_PORT_MULTI_CFG, *LPNET_DVR_LOCAL_PORT_MULTI_CFG; typedef struct tagNET_DVR_RTSP_PARAMS_CFG { - DWORD dwMaxBuffRoomNum; //rtp over udp򿪱ٵ󻺳0ΪЧʹĬֵ20 - //һڴΪ10Kһ㣬Խ࣬ԽǿԽãʱҲԽ - BYTE byUseSort; //Ƿrtp over udp 0- 1- + DWORD dwMaxBuffRoomNum; //rtp over udp排序开辟的最大缓冲区个数,0为无效,使用默认值20 + //一个缓冲区开辟内存为10K多一点,缓冲区个数越多,处理乱序的能力则越强,流畅性越好,延时也越大 + BYTE byUseSort; //是否开启rtp over udp排序, 0-不开启 1-开启 BYTE byRes[123]; }NET_DVR_RTSP_PARAMS_CFG, *LPNET_DVR_RTSP_PARAMS_CFG; typedef struct tagNET_DVR_OPTICAL_CHANNEL_BIND { - WORD wChannelIndex; //ں(0-7) - WORD wSubChannel; //ͨţȡֵΧȡ - BYTE byBind; //0-󶨻󶨣1- + WORD wChannelIndex; //光口号(0-7) + WORD wSubChannel; //光口子通道号,取值范围从能力集获取 + BYTE byBind; //0-不绑定或清除绑定,1-绑定 BYTE byRes[3]; }NET_DVR_OPTICAL_CHANNEL_BIND,*LPNET_DVR_OPTICAL_CHANNEL_BIND; typedef struct tagNET_DVR_OPTICAL_CHANNEL_CFG { DWORD dwSize; - NET_DVR_OPTICAL_CHANNEL_BIND struBindVideo;//Ƶ - NET_DVR_OPTICAL_CHANNEL_BIND struBindAudio;//Ƶ - BYTE byRes[16]; // + NET_DVR_OPTICAL_CHANNEL_BIND struBindVideo;//视频绑定 + NET_DVR_OPTICAL_CHANNEL_BIND struBindAudio;//音频绑定 + BYTE byRes[16]; //保留 }NET_DVR_OPTICAL_CHANNEL_CFG,*LPNET_DVR_OPTICAL_CHANNEL_CFG; typedef struct tagNET_DVR_OPTICAL_INFO { DWORD dwSize; - BYTE bySlotNum;//ϵͳλ - BYTE byChannel; //ͨ + BYTE bySlotNum;//编码子系统槽位号 + BYTE byChannel; //编码通道号 BYTE byRes[18]; }NET_DVR_OPTICAL_INFO,*LPNET_DVR_OPTICAL_INFO; -//Ƶл +//音频切换 typedef struct tagNET_DVR_AUDIO_SURCHAN_CFG { DWORD dwSize; - BYTE byStatus; //ƵǷ1-0- + BYTE byStatus; //音频是否开启,1-开,0-关 BYTE byRes1[3]; - //²byStatus == 1ʱЧ - DWORD dwSubWinNum; //Ӵں - DWORD dwSurChanNum; /*ͨ */ - NET_DVR_IPADDR struIpaddr; /*ַͨ */ - WORD wPort; /*ͨ˿ */ + //以下参数当byStatus == 1时有效 + DWORD dwSubWinNum; //关联的子窗口号 + DWORD dwSurChanNum; /*布防通道号 */ + NET_DVR_IPADDR struIpaddr; /*布防通道地址 */ + WORD wPort; /*布防通道端口 */ BYTE byRes2[14]; }NET_DVR_AUDIO_SURCHAN_CFG, *LPNET_DVR_AUDIO_SURCHAN_CFG; -//˿ھۺ -#define MAX_ETHERNET_PORT_NUM 8//ÿ·˿ +//端口聚合 +#define MAX_ETHERNET_PORT_NUM 8//每条链路最大端口数 typedef struct tagNET_DVR_ETHERNET_CHANNEL_INFO { DWORD dwSize; BYTE byConverge[MAX_ETHERNET_PORT_NUM]; - //byConverge[i] = jʾi˿ڼ뵽j·jȡֵΪ1-8,j=0ʾƳ + //byConverge[i] = j表示将第i个端口加入到第j条链路,j的取值为1-8,j=0表示移除 BYTE byRes[32]; }NET_DVR_ETHERNET_CHANNEL_INFO,*LPNET_DVR_ETHERNET_CHANNEL_INFO; -// +//畅显 typedef struct tagNET_DVR_SPARTAN_INFO { DWORD dwSize; - BYTE bySpartanStatus; //0-Թأ1-Կ + BYTE bySpartanStatus; //0-畅显关,1-畅显开 BYTE byRes[31]; }NET_DVR_SPARTAN_INFO,*LPNET_DVR_SPARTAN_INFO; typedef struct tagNET_DVR_IPADDR_FILTERCFG { DWORD dwSize; - BYTE byEnable; //IPַˣ0-1- - BYTE byFilterType; //ͣ0-ã1- + BYTE byEnable; //启用IP地址过滤,0-否,1-是 + BYTE byFilterType; //过滤类型,0-禁用,1-允许 BYTE byRes[18]; - BYTE byIPAddr[1024]; //IPַϢʽ192.168.1.2;192.168.1.3 + BYTE byIPAddr[1024]; //IP地址信息,格式192.168.1.2;192.168.1.3 }NET_DVR_IPADDR_FILTERCFG, *LPNET_DVR_IPADDR_FILTERCFG; typedef struct tagNET_DVR_LOGO_OVERLAYCFG { DWORD dwSize; - BYTE byEnable; //Ƿã0-1- + BYTE byEnable; //是否启用,0-否,1-是 BYTE byRes1[3]; - DWORD dwCoordinateX; //ͼƬʾX - DWORD dwCoordinateY; //ͼƬʾY - WORD wPicWidth; //ͼƬ - WORD wPicHeight; //ͼƬ - BYTE byLogoName[16];//Logo + DWORD dwCoordinateX; //图片显示区域X坐标 + DWORD dwCoordinateY; //图片显示区域Y坐标 + WORD wPicWidth; //图片宽 + WORD wPicHeight; //图片高 + BYTE byLogoName[16];//Logo名称 }NET_DVR_LOGO_OVERLAYCFG,*LPNET_DVR_LOGO_OVERLAYCFG; typedef struct tagNET_DVR_INVALID_DISK_PARAM { NET_DVR_STRUCTHEAD struStructHead; - DWORD dwDiskNo; // ̺ - BYTE byDelAll; // 0-ɾdwDiskNo 1-ɾȫЧ + DWORD dwDiskNo; // 磁盘号 + BYTE byDelAll; // 0-删除dwDiskNo 1-删除全部无效磁盘 BYTE byres[31]; }NET_DVR_INVALID_DISK_PARAM, *LPNET_DVR_INVALID_DISK_PARAM; @@ -33657,137 +33657,137 @@ typedef struct tagNET_DVR_INVALID_DISK_PARAM typedef struct tagNET_DVR_INVALID_MOUNT_DISK_PARAM { NET_DVR_STRUCTHEAD struStructHead; - DWORD dwDiskNo; // ̺ + DWORD dwDiskNo; // 磁盘号 BYTE byres[32]; }NET_DVR_MOUNT_DISK_PARAM, *LPNET_DVR_MOUNT_DISK_PARAM; -// ӻص +// 长连接回调类型 typedef enum { - NET_SDK_CALLBACK_TYPE_STATUS = 0, // ص״ֵ̬ - NET_SDK_CALLBACK_TYPE_PROGRESS, // صֵ - NET_SDK_CALLBACK_TYPE_DATA // ص + NET_SDK_CALLBACK_TYPE_STATUS = 0, // 回调状态值 + NET_SDK_CALLBACK_TYPE_PROGRESS, // 回调进度值 + NET_SDK_CALLBACK_TYPE_DATA // 回调数据内容 }NET_SDK_CALLBACK_TYPE; -// صΪNET_SDK_CALLBACK_TYPE_STATUSʱ״ֵ̬ +// 回调类型为NET_SDK_CALLBACK_TYPE_STATUS时的状态值 typedef enum { - NET_SDK_CALLBACK_STATUS_SUCCESS = 1000, // ɹ - NET_SDK_CALLBACK_STATUS_PROCESSING, // - NET_SDK_CALLBACK_STATUS_FAILED, // ʧ - NET_SDK_CALLBACK_STATUS_EXCEPTION, // 쳣 - NET_SDK_CALLBACK_STATUS_LANGUAGE_MISMATCH, //IPCļ룩Բƥ - NET_SDK_CALLBACK_STATUS_DEV_TYPE_MISMATCH, //IPCļ룩豸Ͳƥ - NET_DVR_CALLBACK_STATUS_SEND_WAIT, // ͵ȴ + NET_SDK_CALLBACK_STATUS_SUCCESS = 1000, // 成功 + NET_SDK_CALLBACK_STATUS_PROCESSING, // 处理中 + NET_SDK_CALLBACK_STATUS_FAILED, // 失败 + NET_SDK_CALLBACK_STATUS_EXCEPTION, // 异常 + NET_SDK_CALLBACK_STATUS_LANGUAGE_MISMATCH, //(IPC配置文件导入)语言不匹配 + NET_SDK_CALLBACK_STATUS_DEV_TYPE_MISMATCH, //(IPC配置文件导入)设备类型不匹配 + NET_DVR_CALLBACK_STATUS_SEND_WAIT, // 发送等待 }NET_SDK_CALLBACK_STATUS_NORMAL; -//һͨ״̬ -#define NET_SDK_OKC_STATUS_SUCCESS 1000 //һóɹ -#define NET_SDK_OKC_STATUS_FAILED 1002 //һʧ +//一键配置通用状态 +#define NET_SDK_OKC_STATUS_SUCCESS 1000 //一键配置成功 +#define NET_SDK_OKC_STATUS_FAILED 1002 //一键配置失败 -//һCVR״̬ -#define NET_SDK_OKC_STATUS_START_CONFIG 1003 //ʼ -#define NET_SDK_OKC_CHECK_HD 1004 // -#define NET_SDK_OKC_INIT_HD 1005 //ʼ -#define NET_SDK_OKC_CREATE_RAID_OR_SINGLE_DISK 1006 //лߵģʽ -#define NET_SDK_OKC_INIT_CVR_SERVICE 1007 //ʼCVR -#define NET_SDK_OKC_CREATE_RECORD_VOLUME 1008 //¼ +//一键配置CVR状态 +#define NET_SDK_OKC_STATUS_START_CONFIG 1003 //开始配置 +#define NET_SDK_OKC_CHECK_HD 1004 //检测磁盘 +#define NET_SDK_OKC_INIT_HD 1005 //初始化磁盘 +#define NET_SDK_OKC_CREATE_RAID_OR_SINGLE_DISK 1006 //创建阵列或者单盘模式 +#define NET_SDK_OKC_INIT_CVR_SERVICE 1007 //初始化CVR服务 +#define NET_SDK_OKC_CREATE_RECORD_VOLUME 1008 //创建录像卷 -//Ϊһʧܵ״̬롪part1 -#define NET_SDK_OKC_ERR_LOAD_CONF_FAILED 1009 //ļʧ -#define NET_SDK_OKC_ERR_NOT_SUPPORT_RAID_LEVLE 1010 //ִ֧͵raid -#define NET_SDK_OKC_ERR_CONFIGURATION_CONFLICT 1011 //ϵͳѾraid洢 -#define NET_SDK_OKC_ERR_GET_DISK_INFO_FAILED 1012 //ȡϢʧ -#define NET_SDK_OKC_ERR_CHECK_DISK_FAILED 1013 //ʧ -#define NET_SDK_OKC_ERR_INIT_DISK_FAILED 1014 //ʼʧ -#define NET_SDK_OKC_ERR_DISK_CAPACITY_SMALL 1015 // -#define NET_SDK_OKC_ERR_BOTH_SV_NS 1016 //ͬʱSV̺NS -#define NET_SDK_OKC_ERR_CREATE_RAID_FAILED 1017 //raidʧ -#define NET_SDK_OKC_ERR_GET_RAID_FAILED 1018 //ȡraidʧ -#define NET_SDK_OKC_ERR_CREATE_SPARE_FAILED 1019 //ȱʧ -#define NET_SDK_OKC_ERR_CREATE_STORAGE_POOL_FAILED 1020 //洢ʧ -#define NET_SDK_OKC_ERR_GET_POOL_INFO_FAILED 1021 //ȡ洢Ϣʧ -#define NET_SDK_OKC_ERR_CREATE_LUN_FAILED 1022 //lunʧ -#define NET_SDK_OKC_ERR_GET_LUN_INFO_FAILED 1023 //ȡlunϢʧ -#define NET_SDK_OKC_ERR_CREATE_BACKUP_FAILED 1024 //Ԥʧ -#define NET_SDK_OKC_ERR_GET_BACKUP_FAILED 1025 //ȡԤʧ -#define NET_SDK_OKC_ERR_CREATE_PRIVATE_LUN_FAILED 1026 //˽оʧ -#define NET_SDK_OKC_ERR_CREATE_RV_FAILED 1027 //¼ʧ -#define NET_SDK_OKC_ERR_CREATE_ARCH_RV_FAILED 1028 //浵ʧ -#define NET_SDK_OKC_ERR_START_CVR_SERVICE_FAILED 1029 //CVRʧ +//以下为一键配置失败的状态码——part1 +#define NET_SDK_OKC_ERR_LOAD_CONF_FAILED 1009 //加载配置文件失败 +#define NET_SDK_OKC_ERR_NOT_SUPPORT_RAID_LEVLE 1010 //不支持此种类型的raid +#define NET_SDK_OKC_ERR_CONFIGURATION_CONFLICT 1011 //系统已经存在raid或存储池 +#define NET_SDK_OKC_ERR_GET_DISK_INFO_FAILED 1012 //获取磁盘信息失败 +#define NET_SDK_OKC_ERR_CHECK_DISK_FAILED 1013 //检测磁盘失败 +#define NET_SDK_OKC_ERR_INIT_DISK_FAILED 1014 //初始化磁盘失败 +#define NET_SDK_OKC_ERR_DISK_CAPACITY_SMALL 1015 //磁盘总容量不足 +#define NET_SDK_OKC_ERR_BOTH_SV_NS 1016 //同时存在SV盘和NS盘 +#define NET_SDK_OKC_ERR_CREATE_RAID_FAILED 1017 //创建raid失败 +#define NET_SDK_OKC_ERR_GET_RAID_FAILED 1018 //获取raid失败 +#define NET_SDK_OKC_ERR_CREATE_SPARE_FAILED 1019 //创建热备盘失败 +#define NET_SDK_OKC_ERR_CREATE_STORAGE_POOL_FAILED 1020 //创建存储池失败 +#define NET_SDK_OKC_ERR_GET_POOL_INFO_FAILED 1021 //获取存储池信息失败 +#define NET_SDK_OKC_ERR_CREATE_LUN_FAILED 1022 //创建lun卷失败 +#define NET_SDK_OKC_ERR_GET_LUN_INFO_FAILED 1023 //获取lun信息失败 +#define NET_SDK_OKC_ERR_CREATE_BACKUP_FAILED 1024 //创建预留卷失败 +#define NET_SDK_OKC_ERR_GET_BACKUP_FAILED 1025 //获取预留卷失败 +#define NET_SDK_OKC_ERR_CREATE_PRIVATE_LUN_FAILED 1026 //创建私有卷失败 +#define NET_SDK_OKC_ERR_CREATE_RV_FAILED 1027 //创建录像卷失败 +#define NET_SDK_OKC_ERR_CREATE_ARCH_RV_FAILED 1028 //创建存档卷失败 +#define NET_SDK_OKC_ERR_START_CVR_SERVICE_FAILED 1029 //开启CVR服务失败 -//һSAN״̬ -#define NET_SDK_OKC_CREATING_ARRAY 1030 //н׶ -#define NET_SDK_OKC_CREATING_STORAGE_POOL 1031 //洢ؽ׶ -#define NET_SDK_OKC_CREATING_LUN_VOL 1032 //߼׶ -#define NET_SDK_OKC_CREATING_ISCSI 1033 //ISCSI׶ -#define NET_SDK_OKC_ERR_HOT_SPARE_CONFICT 1034 //Ѵȱ -#define NET_SDK_OKC_ERR_STORAGE_POOL_CONFICT 1035 //Ѵڴ洢 -#define NET_SDK_OKC_ERR_RAID_CONFLICT 1036 //ϵͳѾ -#define NET_SDK_OKC_ERR_OPEN_ISCSI_FAILED 1037 //ISCSIʧ -#define NET_SDK_OKC_ERR_DEVICE_NOSUPPORT_SAN 1038 //豸֧san +//一键配置SAN状态 +#define NET_SDK_OKC_CREATING_ARRAY 1030 //创建阵列阶段 +#define NET_SDK_OKC_CREATING_STORAGE_POOL 1031 //创建存储池阶段 +#define NET_SDK_OKC_CREATING_LUN_VOL 1032 //创建逻辑卷阶段 +#define NET_SDK_OKC_CREATING_ISCSI 1033 //创建ISCSI阶段 +#define NET_SDK_OKC_ERR_HOT_SPARE_CONFICT 1034 //已存在热备盘 +#define NET_SDK_OKC_ERR_STORAGE_POOL_CONFICT 1035 //已存在存储池 +#define NET_SDK_OKC_ERR_RAID_CONFLICT 1036 //系统已经存在阵列 +#define NET_SDK_OKC_ERR_OPEN_ISCSI_FAILED 1037 //开启ISCSI失败 +#define NET_SDK_OKC_ERR_DEVICE_NOSUPPORT_SAN 1038 //设备不支持san -//Ϊһʧܵ״̬롪part2 -#define NET_SDK_OKC_ERR_SAPRE_NUM_EXCEED 1101 //ȱ̸ -#define NET_SDK_OKC_ERR_CREATE_PIC_VOLUME_FAILED 1102 //ͼƬʧ +//以下为一键配置失败的状态码——part2 +#define NET_SDK_OKC_ERR_SAPRE_NUM_EXCEED 1101 //热备盘个数过多 +#define NET_SDK_OKC_ERR_CREATE_PIC_VOLUME_FAILED 1102 //创建图片卷失败 typedef enum { - NET_SDK_GET_NEXT_STATUS_SUCCESS = 1000, // ɹȡݣͻ˴걾ݺҪٴεNET_DVR_RemoteConfigGetNextȡһ - NET_SDK_GET_NETX_STATUS_NEED_WAIT, // ȴ豸ݣNET_DVR_RemoteConfigGetNext - NET_SDK_GET_NEXT_STATUS_FINISH, // ȫȡ꣬ʱͻ˿ɵNET_DVR_StopRemoteConfig - NET_SDK_GET_NEXT_STATUS_FAILED, // 쳣ͻ˿ɵNET_DVR_StopRemoteConfig + NET_SDK_GET_NEXT_STATUS_SUCCESS = 1000, // 成功读取到数据,客户端处理完本次数据后需要再次调用NET_DVR_RemoteConfigGetNext获取下一条数据 + NET_SDK_GET_NETX_STATUS_NEED_WAIT, // 需等待设备发送数据,继续调用NET_DVR_RemoteConfigGetNext函数 + NET_SDK_GET_NEXT_STATUS_FINISH, // 数据全部取完,此时客户端可调用NET_DVR_StopRemoteConfig结束长连接 + NET_SDK_GET_NEXT_STATUS_FAILED, // 出现异常,客户端可调用NET_DVR_StopRemoteConfig结束长连接 }NET_SDK_GET_NEXT_STATUS; -// ûSendwithRecvӿʱӿڷص״̬ +// 用户调用SendwithRecv接口时,接口返回的状态 typedef enum { - NET_SDK_CONFIG_STATUS_SUCCESS = 1000, // ɹȡݣͻ˴걾ݺҪٴεNET_DVR_SendWithRecvRemoteConfigȡһ - NET_SDK_CONFIG_STATUS_NEEDWAIT, // õȴͻ˿NET_DVR_SendWithRecvRemoteConfig - NET_SDK_CONFIG_STATUS_FINISH, // ȫȡ꣬ʱͻ˿ɵNET_DVR_StopRemoteConfig - NET_SDK_CONFIG_STATUS_FAILED, // ʧܣͻ˿NET_DVR_SendWithRecvRemoteConfig·һ - NET_SDK_CONFIG_STATUS_EXCEPTION, // 쳣ʱͻ˿ɵNET_DVR_StopRemoteConfig + NET_SDK_CONFIG_STATUS_SUCCESS = 1000, // 成功读取到数据,客户端处理完本次数据后需要再次调用NET_DVR_SendWithRecvRemoteConfig获取下一条数据 + NET_SDK_CONFIG_STATUS_NEEDWAIT, // 配置等待,客户端可重新NET_DVR_SendWithRecvRemoteConfig + NET_SDK_CONFIG_STATUS_FINISH, // 数据全部取完,此时客户端可调用NET_DVR_StopRemoteConfig结束 + NET_SDK_CONFIG_STATUS_FAILED, // 配置失败,客户端可重新NET_DVR_SendWithRecvRemoteConfig下发下一条 + NET_SDK_CONFIG_STATUS_EXCEPTION, // 配置异常,此时客户端可调用NET_DVR_StopRemoteConfig结束 }NET_SDK_SENDWITHRECV_STATUS; -//ļ +//导入配置文件错误码 typedef enum tagNET_SDK_IPC_CFG_FILE_ERR_CODE { - NET_SDK_IPC_CFG_FILE_NO_ERR = 0, /* û */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_CHANNEL_INVALID = 1, /* ͨIDǷ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_CHANNEL_DUPLICATE, /* ͨIDظ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_INVALID, /* ͨIPǷ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_DUPLICATE, /* ͨIPظ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_CONFLICT_WITH_LOCAL, /* ͨIP뱾IPͻ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_PROTOCOL_INVALID, /* Э */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_PORT_INVALID, /* ˿ڴ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_DEVICE_CHANNEL_ERR, /* 豸ͨŴ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_USER_NAME_ERR, /* ûǷַ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_PASSWD_ERR, /* 뺬Ƿַ */ - NET_SDK_IPC_CFG_FILE_ERR_CODE_TRANSPORT_PROTOCOL_INVALID /*Э*/ + NET_SDK_IPC_CFG_FILE_NO_ERR = 0, /* 没出错 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_CHANNEL_INVALID = 1, /* 通道ID非法 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_CHANNEL_DUPLICATE, /* 通道ID重复 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_INVALID, /* 通道IP或域名非法 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_DUPLICATE, /* 通道IP或域名重复 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_CONFLICT_WITH_LOCAL, /* 通道IP与本地IP冲突 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_PROTOCOL_INVALID, /* 协议错误 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_PORT_INVALID, /* 管理端口错误 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_DEVICE_CHANNEL_ERR, /* 设备通道号错误 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_USER_NAME_ERR, /* 用户名含非法字符 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_PASSWD_ERR, /* 密码含非法字符 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_TRANSPORT_PROTOCOL_INVALID /*传输协议错误*/ }NET_SDK_IPC_CFG_FILE_ERR_CODE; -//IPC +//IPC升级错误码 typedef enum { - NET_SDK_UPGRADE_IPC_INVALID = 0, //Чͨδѡͨ - NET_SDK_UPGRADE_IPC_SUCCESS, //ɹ - NET_SDK_UPGRADE_IPC_OFFLINE, //IPC - NET_SDK_UPGRADE_IPC_NOT_SUPPORT, //IPC֧ - NET_SDK_UPGRADE_IPC_LANGUAGE_MISMATCH, //Բƥ - NET_SDK_UPGRADE_IPC_WRITE_FLASH_FAILED, //дflshʧ - NET_SDK_UPGRADE_IPC_OTHER_ERROR // + NET_SDK_UPGRADE_IPC_INVALID = 0, //无效通道或未选择该通道升级 + NET_SDK_UPGRADE_IPC_SUCCESS, //升级成功 + NET_SDK_UPGRADE_IPC_OFFLINE, //IPC不在线 + NET_SDK_UPGRADE_IPC_NOT_SUPPORT, //IPC不支持升级命令 + NET_SDK_UPGRADE_IPC_LANGUAGE_MISMATCH, //语言不匹配 + NET_SDK_UPGRADE_IPC_WRITE_FLASH_FAILED, //写flsh失败 + NET_SDK_UPGRADE_IPC_OTHER_ERROR //其他错误 }NET_SDK_UPGRADE_IPC_ERR_CODE; typedef enum { - NET_SDK_REMOTE_CONFIG_STATUS_SUCCESS = 1001,//¼һɹ - NET_SDK_REMOTE_CONFIG_STATUS_FAILED, //¼һʧ - NET_SDK_REMOTE_CONFIG_STATUS_PROCESSING //¼һڻȡ + NET_SDK_REMOTE_CONFIG_STATUS_SUCCESS = 1001,//录播主机一键发布成功 + NET_SDK_REMOTE_CONFIG_STATUS_FAILED, //录播主机一键发布失败 + NET_SDK_REMOTE_CONFIG_STATUS_PROCESSING //录播主机一键发布正在获取 }NET_SDK_REMOTE_CONFIG_STATUS; -#define MAX_CODE_CARD_SUPPORTDISPNUMS 8//ÿ뿨ֵ֧ʾͨ +#define MAX_CODE_CARD_SUPPORTDISPNUMS 8//每个编码卡最多支持的显示通道数 #define MAX_SUPPORT_RES 32 typedef enum _BOARD_TYPE @@ -33846,29 +33846,29 @@ typedef enum _BOARD_TYPE UNKNOWN_BOARD_TYPE =0xffffffff, }BOARD_TYPE; -typedef struct tagNET_DVR_CODECARD_ABILITY /*뿨*/ +typedef struct tagNET_DVR_CODECARD_ABILITY /*高清编码卡能力集*/ { - BYTE byCardType; //뿨(BOARD_TYPEеö) - BYTE byCodeNums; //ͨ - BYTE byDispNums; //ʾͨ - BYTE byCodeStartIdx; //׸ͨбͨе - BYTE byDispStartIdx; //׸ʾͨʾͨе + BYTE byCardType; //编码卡类型(按BOARD_TYPE中的枚举) + BYTE byCodeNums; //编码通道数 + BYTE byDispNums; //显示通道数 + BYTE byCodeStartIdx; //首个编码通道在所有编码通道中的索引 + BYTE byDispStartIdx; //首个显示通道在所有显示通道中的索引 BYTE byRes1[3]; - DWORD dwVgaSupportResolution[MAX_SUPPORT_RES/*32*/];//ֵ֧ķֱ - DWORD dwHdmiSupportResolution[MAX_SUPPORT_RES/*32*/];//ֵ֧ķֱ - DWORD dwDviSupportResolution[MAX_SUPPORT_RES/*32*/];//ֵ֧ķֱ - DWORD dwYpbprSupportResolution[MAX_SUPPORT_RES/*32*/];//ֵ֧ķֱ - BYTE byDispFormat[MAX_CODE_CARD_SUPPORTDISPNUMS]; //ֵ֧ģʽ(HD_DISPLAY_FORMATеö) - BYTE byWindowMode[MAX_CODE_CARD_SUPPORTDISPNUMS][12]; //ֵ֧Ĵģʽ(1,2,4,9,16)) + DWORD dwVgaSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwHdmiSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwDviSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwYpbprSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + BYTE byDispFormat[MAX_CODE_CARD_SUPPORTDISPNUMS]; //支持的输出模式(按HD_DISPLAY_FORMAT中的枚举) + BYTE byWindowMode[MAX_CODE_CARD_SUPPORTDISPNUMS][12]; //支持的窗口模式(比如1,2,4,9,16)) BYTE byRes2[36]; }NET_DVR_CODECARD_ABILITY,*LPNET_DVR_CODECARD_ABILITY; -#define MAX_CODE_CARD_NUM 8 //뿨 +#define MAX_CODE_CARD_NUM 8 //最多高清编码卡数 typedef struct tagNET_DVR_CODESVR_ABILITY { - DWORD dwSize; /* ṹС */ - BYTE byCardNums; /* 뿨 */ - BYTE byStartChan; /* ʼͨ */ + DWORD dwSize; /* 结构体大小 */ + BYTE byCardNums; /* 编码卡数 */ + BYTE byStartChan; /* 起始通道号 */ BYTE byRes1[2]; NET_DVR_CODECARD_ABILITY struCodeCardAbility[MAX_CODE_CARD_NUM]; BYTE byRes2[64]; @@ -33877,73 +33877,73 @@ typedef struct tagNET_DVR_CODESVR_ABILITY typedef struct tagNET_DVR_CODER_SERVER_OUTPUT_CFG { DWORD dwSize; - BYTE byDispChanType; /*ʾͨͣ0-BNC1-VGA2-HDMI3-DVI*/ //˲ֻܻȡ - BYTE byVedioFormat; /*1:NTSC,2:PAL0-NULL*/ + BYTE byDispChanType; /*显示通道类型:0-BNC,1-VGA,2-HDMI,3-DVI*/ //此参数只能获取 + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ BYTE byRes1[2]; - DWORD dwResolution; //ֱ - DWORD dwWindowMode; /*ģʽ֧ģʽȡ*/ + DWORD dwResolution; //分辨率 + DWORD dwWindowMode; /*画面模式,支持模式从能力集获取*/ BYTE byRes2[64]; }NET_DVR_CODER_SERVER_OUTPUT_CFG,*LPNET_DVR_CODER_SERVER_OUTPUT_CFG; typedef struct tagNET_DVR_DISPLAY_START_INFO { DWORD dwSize; - DWORD dwDisplayChan; //ʾͨ - DWORD dwCodeChan; //ͨ - DWORD dwWinNum; //ںţ1 - BYTE byEnableAudio; //Ƶ0-أ1- + DWORD dwDisplayChan; //显示通道号 + DWORD dwCodeChan; //编码通道号 + DWORD dwWinNum; //窗口号,从1起 + BYTE byEnableAudio; //开启音频,0-关,1-开 BYTE byRes[31]; }NET_DVR_DISPLAY_START_INFO,*LPNET_DVR_DISPLAY_START_INFO; typedef struct tagNET_DVR_CODER_WINDOW_INFO { DWORD dwSize; - DWORD dwDisplayChan;//ʾͨ - DWORD dwWinNum; //ںţ1ʼ + DWORD dwDisplayChan;//显示通道号 + DWORD dwWinNum; //窗口号,从1开始 BYTE byRes[16]; }NET_DVR_CODER_WINDOW_INFO,*LPNET_DVR_CODER_WINDOW_INFO; typedef struct tagNET_DVR_WINDOW_STATUS { - DWORD dwSize; //ṹС - DWORD dwCodeChan; /*ͨ*/ - BYTE byDisplay; /*Ƿ0-1-*/ - BYTE byAudio; /*ƵǷ,0-1-*/ + DWORD dwSize; //结构大小 + DWORD dwCodeChan; /*编码通道号*/ + BYTE byDisplay; /*是否输出,0-否,1-是*/ + BYTE byAudio; /*音频是否开启,0-否,1-是*/ BYTE byRes[30]; }NET_DVR_WINDOW_STATUS,*LPNET_DVR_WINDOW_STATUS; typedef struct tagNET_DVR_RECORD_LOCK_PERCENTAGE { - DWORD dwSize; //ṹС - BYTE byPercentage; //ٷֱȣȡֵΧ[0,100] - BYTE byRes[31]; // + DWORD dwSize; //结构体大小 + BYTE byPercentage; //百分比,取值范围[0,100] + BYTE byRes[31]; //保留 }NET_DVR_RECORD_LOCK_PERCENTAGE, *LPNET_DVR_RECORD_LOCK_PERCENTAGE; typedef struct tagNET_DVR_UPDATE_RECORD_INFO { - DWORD dwSize; //ṹС - NET_DVR_STREAM_INFO struStreasmInfo; //ID - DWORD dwBeginTime; //¼ܵĿʼʱ - DWORD dwEndTime; //¼ܵĽʱ - BYTE byRes[32]; // + DWORD dwSize; //结构体大小 + NET_DVR_STREAM_INFO struStreasmInfo; //流ID + DWORD dwBeginTime; //录像总的开始时间 + DWORD dwEndTime; //录像总的结束时间 + BYTE byRes[32]; //保留 }NET_DVR_UPDATE_RECORD_INFO, *LPNET_DVR_UPDATE_RECORD_INFO; typedef struct tagNET_DVR_CMD_TRIGGER_PERIOD_RECORD_PARA { NET_DVR_STREAM_INFO struStreamInfo; - DWORD dwCmdType; //ⲿ - DWORD dwRecordTimeLen; //¼ʱ䣬λ - BYTE byEventID[MAX_EVENTID_LEN]; //¼IDΪϢ - DWORD dwLockDuration; //ʱ䣬λ룬0xffffffff- 0- - BYTE byBackUp; //Ƿ浵0-浵1-浵 - BYTE byPreRecord; //ǷԤ¼0-Ԥ¼1-Ԥ¼ + DWORD dwCmdType; //外部触发类型 + DWORD dwRecordTimeLen; //录像持续时间,单位:秒 + BYTE byEventID[MAX_EVENTID_LEN]; //事件ID,作为附加信息 + DWORD dwLockDuration; //锁定持续时间,单位:秒,0xffffffff- 永久锁定,0- 不锁 + BYTE byBackUp; //是否存档,0-不存档,1-存档 + BYTE byPreRecord; //是否预录,0-不预录,1-预录 BYTE byRes[122]; }NET_DVR_CMD_TRIGGER_PERIOD_RECORD_PARA, *LPNET_DVR_CMD_TRIGGER_PERIOD_RECORD_PARA; typedef struct tagNET_DVR_LOCK_FILE_BY_NAME_PARA { - BYTE byFileName[NAME_LEN]; // ¼ļЭֻ32ļ - DWORD dwLockDuration; // ʱ,λ룬0xffffffffʾ + BYTE byFileName[NAME_LEN]; // 录像文件名,老协议只传32个文件名 + DWORD dwLockDuration; // 锁定持续时间,单位秒,0xffffffff表示永久锁定 BYTE byRes[512]; }NET_DVR_LOCK_FILE_BY_NAME_PARA, *LPNET_DVR_LOCK_FILE_BY_NAME_PARA; @@ -33952,7 +33952,7 @@ typedef struct tagNET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND { DWORD dwSize; NET_DVR_STREAM_INFO struStreamInfo; - DWORD dwStreamType; //ͣ0-1-2-¼ͣ3-3ԶͨGET /ISAPI/Streaming/channels//customStreamȡǰͨѾӵԶIDԶΪ6~10ֵ6~10 + DWORD dwStreamType; //码流类型,0-主码流,1-子码流,2-事件类型,3-码流3,……(自定义码流类型需通过GET /ISAPI/Streaming/channels//customStream获取当前通道已经添加的所有自定义码流ID。自定义码流为6~10,其索引值就是6~10) BYTE byRes[32]; }NET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND, *LPNET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND; @@ -33960,41 +33960,41 @@ typedef struct tagNET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND typedef struct tagNET_DVR_MULTI_STREAM_COMPRESSIONCFG { DWORD dwSize; - DWORD dwStreamType; //ͣ0-1-2-¼ͣ3-3 - NET_DVR_COMPRESSION_INFO_V30 struStreamPara; //ѹ - DWORD dwResolution; //ֱС255ʱbyResolutionһ£255ʱԸֶηֵжϡ + DWORD dwStreamType; //码流类型,0-主码流,1-子码流,2-事件类型,3-码流3,…… + NET_DVR_COMPRESSION_INFO_V30 struStreamPara; //码流压缩参数 + DWORD dwResolution; //当分辨率索引小于255时和byResolution保持一致,大于255时以该字段返回索引值判断。 BYTE byRes[76]; }NET_DVR_MULTI_STREAM_COMPRESSIONCFG, *LPNET_DVR_MULTI_STREAM_COMPRESSIONCFG; typedef struct tagNET_DVR_PUSHALARMINFO_V40 { - DWORD dwAlarmType; /*0-ź,1-Ӳ,2-źŶʧ,3ƶ,4Ӳδʽ,5-дӲ̳,6-ڵ,7-ʽƥ, 8-Ƿ, 9-Ƶź쳣10-¼쳣 11- ܳ仯 12-쳣 */ + DWORD dwAlarmType; /*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问, 9-视频信号异常,10-录像异常 11- 智能场景变化 12-阵列异常 */ union { BYTE byRes[300]; struct { - DWORD dwAlarmInputNumber; /*λ,0λӦ0˿,dwAlarmTypeΪ0ʱҪ*/ - BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30]; /*λ,0λӦ0˿, */ - BYTE byAlarmRelateChannel[MAX_CHANNUM_V30]; /*λ,0λӦ0ͨ*/ + DWORD dwAlarmInputNumber; /*按位,第0位对应第0个输入端口,dwAlarmType为0时需要设置*/ + BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30]; /*按位,第0位对应第0个输出端口, */ + BYTE byAlarmRelateChannel[MAX_CHANNUM_V30]; /*按位,第0位对应第0个通道*/ BYTE byRes1[97]; - BYTE byDeviceID[NAME_LEN]; /*豸ID*/ + BYTE byDeviceID[NAME_LEN]; /*设备的ID串*/ BYTE byRes2[7]; }struIOAlarm; struct { - BYTE byStreamID[STREAM_ID_LEN]; // IDϢ + BYTE byStreamID[STREAM_ID_LEN]; // ID信息 BYTE byRes1[132]; - BYTE byChannel[MAX_CHANNUM_V30]; /*λ,0x2ʾ1ͨ1λӦ1ͨ(ͨ1ʼ)dwAlarmTypeΪ23, 6910ʱҪ, */ + BYTE byChannel[MAX_CHANNUM_V30]; /*按位,0x2表示第1通道,第1位对应第1个通道(从通道1开始),dwAlarmType为2或3, 6,9,10时需要设置, */ BYTE byRes2[33]; - BYTE byDeviceID[NAME_LEN]; /*豸ID*/ + BYTE byDeviceID[NAME_LEN]; /*设备的ID串*/ BYTE byRes3[7]; }struStreamIDorChannel; struct { BYTE byRes1[228]; - BYTE byDiskNumber[MAX_DISKNUM_V30]; /*λ,0λӦ0Ӳ,dwAlarmTypeΪ1,4,5ʱҪ*/ - BYTE byDeviceID[NAME_LEN]; /*豸ID*/ + BYTE byDiskNumber[MAX_DISKNUM_V30]; /*按位,第0位对应第0个硬盘,dwAlarmType为1,4,5时需要设置*/ + BYTE byDeviceID[NAME_LEN]; /*设备的ID串*/ BYTE byRes2[7]; }struDiskAlarm; }uAlarmInfo; @@ -34003,123 +34003,123 @@ typedef struct tagNET_DVR_PUSHALARMINFO_V40 typedef struct tagNET_DVR_RECORD_PACK { NET_DVR_STRUCTHEAD struStruceHead; - DWORD dwPackageInterval; // ʱ ʱ䵥λ - BYTE byRes[32]; // + DWORD dwPackageInterval; // 打包时间间隔 ,时间单位:分钟 + BYTE byRes[32]; // 保留 }NET_DVR_RECORD_PACK,*LPNET_DVR_RECORD_PACK; -#define NET_DVR_FIND_NAS_DIRECTORY 6161 //NASĿ¼ -#define NET_DVR_NAS_FINDING 0 //ڲ -#define NET_DVR_NAS_RECV 1 // -#define NET_DVR_NAS_OVER 2 //ҽ -#define NET_DVR_NAS_EXCEPTION 3 //쳣 +#define NET_DVR_FIND_NAS_DIRECTORY 6161 //查找NAS目录 +#define NET_DVR_NAS_FINDING 0 //正在查找 +#define NET_DVR_NAS_RECV 1 //接收数据 +#define NET_DVR_NAS_OVER 2 //查找结束 +#define NET_DVR_NAS_EXCEPTION 3 //接收异常 typedef struct tagNET_DVR_NET_DISK_SERACH_PARAM { - NET_DVR_IPADDR struIP; // IPַ - WORD wPort; // IP˿ - BYTE byRes[10]; // ֽ + NET_DVR_IPADDR struIP; // IP地址 + WORD wPort; // IP端口 + BYTE byRes[10]; // 保留字节 }NET_DVR_NET_DISK_SERACH_PARAM, *LPNET_DVR_NET_DISK_SERACH_PARAM; typedef struct tagNET_DVR_NET_DISK_SERACH_RET { - BYTE byDirectory[128]; // صļĿ¼ + BYTE byDirectory[128]; // 返回的文件目录 BYTE byRes[20]; }NET_DVR_NET_DISK_SERACH_RET, *LPNET_DVR_NET_DISK_SERACH_RET; typedef struct tagNET_DVR_WD1_CFG { NET_DVR_STRUCTHEAD struStruceHead; - BYTE byWD1Enable; //WD1ʹܿ 0 ر 1 - BYTE byRes[31]; // + BYTE byWD1Enable; //WD1使能开关 0 关闭 1 开启 + BYTE byRes[31]; //保留 }NET_DVR_WD1_CFG, *LPNET_DVR_WD1_CFG; typedef struct tagNET_DVR_FTPCFG_V40 { NET_DVR_STRUCTHEAD struStruceHead; - BYTE byEnableFTP; /*Ƿftpϴܣ0-1-*/ - BYTE byProtocolType; /*Э 0-FTP1-SFTP*/ - WORD wFTPPort; /*˿*/ + BYTE byEnableFTP; /*是否启动ftp上传功能,0-否,1-是*/ + BYTE byProtocolType; /*协议类型 0-FTP,1-SFTP*/ + WORD wFTPPort; /*端口*/ union { struct { - BYTE szDomain[64]; //ַʹIPv4 IPv6 + BYTE szDomain[64]; //服务器地址,可以使IPv4 IPv6或是域名 BYTE byRes1[80]; }struDomain; struct { - NET_DVR_IPADDR struIp; /*IPַ:IPv4 IPv6ַ, 144ֽ*/ + NET_DVR_IPADDR struIp; /*IP地址:IPv4 IPv6地址, 144字节*/ }struAddrIP; - }unionServer; //ʹṹֹIPַ - BYTE szUserName[32]; /*û*/ - BYTE szPassWORD[16]; /**/ - BYTE szTopCustomDir[64]; /*ԶһĿ¼*/ - BYTE szSubCustomDir[64]; /*ԶĿ¼*/ - BYTE byDirLevel; /*0 = ʹĿ¼ṹֱӱڸĿ¼, 1 = ʹ1Ŀ¼,2=ʹ2Ŀ¼*/ - BYTE byTopDirMode; /* һĿ¼0x1 = ʹ豸,0x2 = ʹ豸,0x3 = ʹ豸ipַ - 0x4=ʹʾ,0x5=ʹʱ(),0x6-ʹԶ ,0x7=Υ,0x8=,0x9=ص*/ - BYTE bySubDirMode; /*Ŀ¼0x1=ʹͨ,0x2=ʹͨ 0x3=ʹʱ(), - 0x4=ʹó,0x5-ʹԶ, 0x6=Υ,0x7=,0x8=ص,0x9 = λ*/ - BYTE byType; /* 0-1-*/ - BYTE byEnableAnony; /* 0- 1*/ - BYTE byAddresType; /*0 ʹIPV4IPV6 1- ʹ*/ - BYTE byFTPPicType; //0-1-ͣץͼƬ - BYTE byPicArchivingInterval; //ͼƬ鵵[1~30],0ʾر - NET_DVR_PICTURE_NAME_EX struPicNameRule; /* ͼƬ: - byFTPPicType ==1ʱ,ڵͣץͼƬ*/ - BYTE byPicNameRuleType; //ͼƬͣ0~Ĭͣ1~ͼƬǰ׺(struPicNameRuleеbyPicNamePrefixֶ) - BYTE byRes[203]; /**/ + }unionServer; //使用联合体结构,防止既是IP地址又是域名的情况 + BYTE szUserName[32]; /*用户名*/ + BYTE szPassWORD[16]; /*密码*/ + BYTE szTopCustomDir[64]; /*自定义一级目录*/ + BYTE szSubCustomDir[64]; /*自定义二级目录*/ + BYTE byDirLevel; /*0 = 不使用目录结构,直接保存在根目录, 1 = 使用1级目录,2=使用2级目录*/ + BYTE byTopDirMode; /* 一级目录,0x1 = 使用设备名,0x2 = 使用设备号,0x3 = 使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月),0x6-使用自定义 ,0x7=违规类型,0x8=方向,0x9=地点*/ + BYTE bySubDirMode; /*二级目录,0x1=使用通道名,0x2=使用通道号 0x3=使用时间(年月日), + 0x4=使用车道号,0x5-使用自定义, 0x6=违规类型,0x7=方向,0x8=地点,0x9 = 车位编号*/ + BYTE byType; /* 0-主服务器,1-备服务器*/ + BYTE byEnableAnony; /*启用匿名 0-否 1是*/ + BYTE byAddresType; /*0 使用IPV4、IPV6 1- 使用域名*/ + BYTE byFTPPicType; //0-保留,1-停车场抓拍图片命名规则 + BYTE byPicArchivingInterval; //图片归档间隔[1~30],0表示关闭 + NET_DVR_PICTURE_NAME_EX struPicNameRule; /* 图片命名规则: + byFTPPicType ==1的时候,自数组内的命名规则是停车场抓拍图片命名规则*/ + BYTE byPicNameRuleType; //图片命令规则类型;0~默认类型,1~图片前缀名定义(启用struPicNameRule中的byPicNamePrefix字段) + BYTE byRes[203]; /*保留*/ }NET_DVR_FTPCFG_V40, *LPNET_DVR_FTPCFG_V40; typedef struct tagNET_DVR_FTP_TYPE { - BYTE byType; // 0-1- + BYTE byType; // 0-主服务器,1-备服务器 BYTE byRes[3]; }NET_DVR_FTP_TYPE, *LPNET_DVR_FTP_TYPE; -//FTPԲṹ +//FTP服务器测试参数结构体 typedef struct { DWORD dwSize; - BYTE byEnableFTP; /*Ƿftpϴܣ0-1-*/ - BYTE byProtocolType; /*Э 0-FTP1-SFTP*/ - WORD wFTPPort; /*˿*/ + BYTE byEnableFTP; /*是否启动ftp上传功能,0-否,1-是*/ + BYTE byProtocolType; /*协议类型 0-FTP,1-SFTP*/ + WORD wFTPPort; /*端口*/ union { BYTE byRes[144]; struct { - BYTE szDomain[MAX_DOMAIN_NAME]; //ַʹIPv4 IPv6 + BYTE szDomain[MAX_DOMAIN_NAME]; //服务器地址,可以使IPv4 IPv6或是域名 BYTE byRes1[80]; }struDomain; struct { - NET_DVR_IPADDR struIp; /*IPַ:IPv4 IPv6ַ, 144ֽ*/ + NET_DVR_IPADDR struIp; /*IP地址:IPv4 IPv6地址, 144字节*/ }struAddrIP; - }unionServer; //ʹṹֹIPַ + }unionServer; //使用联合体结构,防止既是IP地址又是域名的情况 - BYTE szUserName[NAME_LEN]; /*û*/ - BYTE szPassWORD[PASSWD_LEN]; /**/ - BYTE szTopCustomDir[MAX_CUSTOM_DIR]; /*ԶһĿ¼*/ - BYTE szSubCustomDir[MAX_CUSTOM_DIR]; /*ԶĿ¼*/ - BYTE byDirLevel; /*0 = ʹĿ¼ṹֱӱڸĿ¼, 1 = ʹ1Ŀ¼,2=ʹ2Ŀ¼*/ - BYTE byTopDirMode; /* һĿ¼0x1 = ʹ豸,0x2 = ʹ豸,0x3 = ʹ豸ipַ - 0x4=ʹʾ,0x5=ʹʱ(),0x6-ʹԶ ,0x7=Υ, - 0x8=,0x9=ص*/ - BYTE bySubDirMode; /*Ŀ¼0x1=ʹͨ,0x2=ʹͨ 0x3=ʹʱ(), - 0x4=ʹó,0x5-ʹԶ, 0x6=Υ,0x7=,0x8=ص, - 0x9 = λ*/ - BYTE byType; /* 0-1-*/ - BYTE byEnableAnony; /* 0- 1*/ - BYTE byAddresType; /*0 ʹIPV4IPV6 1- ʹ*/ + BYTE szUserName[NAME_LEN]; /*用户名*/ + BYTE szPassWORD[PASSWD_LEN]; /*密码*/ + BYTE szTopCustomDir[MAX_CUSTOM_DIR]; /*自定义一级目录*/ + BYTE szSubCustomDir[MAX_CUSTOM_DIR]; /*自定义二级目录*/ + BYTE byDirLevel; /*0 = 不使用目录结构,直接保存在根目录, 1 = 使用1级目录,2=使用2级目录*/ + BYTE byTopDirMode; /* 一级目录,0x1 = 使用设备名,0x2 = 使用设备号,0x3 = 使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月),0x6-使用自定义 ,0x7=违规类型, + 0x8=方向,0x9=地点*/ + BYTE bySubDirMode; /*二级目录,0x1=使用通道名,0x2=使用通道号 0x3=使用时间(年月日), + 0x4=使用车道号,0x5-使用自定义, 0x6=违规类型,0x7=方向,0x8=地点, + 0x9 = 车位编号*/ + BYTE byType; /* 0-主服务器,1-备服务器*/ + BYTE byEnableAnony; /*启用匿名 0-否 1是*/ + BYTE byAddresType; /*0 使用IPV4、IPV6 1- 使用域名*/ BYTE byRes2[198]; }NET_DVR_FTP_SERVER_TEST_PARA, *LPNET_DVR_FTP_SERVER_TEST_PARA; -#define NET_SDK_ACCESS_KEY_LEN 64 //볤 -#define NET_SDK_SECRET_KEY_LEN 64 //볤 +#define NET_SDK_ACCESS_KEY_LEN 64 //访问密码长度 +#define NET_SDK_SECRET_KEY_LEN 64 //加密密码长度 -//Խṹ +//服务器测试结构体 typedef struct tagNET_DVR_SERVER_TEST_PARA { DWORD dwSize; @@ -34128,79 +34128,79 @@ typedef struct tagNET_DVR_SERVER_TEST_PARA BYTE byRes[740]; struct { - NET_DVR_NTPPARA struNtpPara; /*NTPԲ80ֽ*/ + NET_DVR_NTPPARA struNtpPara; /*NTP服务器测试参数80字节*/ BYTE byRes1[660]; }struNtpPara; struct { - NET_DVR_SINGLE_NET_DISK_INFO_V40 struNasPara; /*NASԲ480ֽ*/ + NET_DVR_SINGLE_NET_DISK_INFO_V40 struNasPara; /*NAS服务器测试参数480字节*/ BYTE byRes1[260]; }struNasPara; struct { - NET_DVR_FTP_SERVER_TEST_PARA struFtpPara; /*FTPԲ528ֽ*/ + NET_DVR_FTP_SERVER_TEST_PARA struFtpPara; /*FTP服务器测试参数528字节*/ BYTE byRes1[212]; }struFtpPara; struct { - NET_DVR_EMAILCFG_V30 struEmailPara; /*EmailԲ660ֽ*/ + NET_DVR_EMAILCFG_V30 struEmailPara; /*Email服务器测试参数660字节*/ BYTE byRes1[80]; }struEmailPara; struct { - NET_DVR_IPADDR struIp; /*IPͻԲ24ֽ*/ + NET_DVR_IPADDR struIp; /*IP冲突测试参数24字节*/ BYTE byRes1[716]; }struIpPara; struct { NET_DVR_IPADDR struIPAdder; - WORD wPort; //˿ں + WORD wPort; //端口号 BYTE byRes2[2]; - char szUser[CLOUD_NAME_LEN/*48*/]; //û - char szPassword[CLOUD_PASSWD_LEN/*48*/]; // - NET_DVR_POOLPARAM struPoolInfo[16];// 0ʾͼƬݳأ1ʾΥͼƬݳأ2ʾݳأIPC/D - BYTE byProtocolType;//ƴ洢Э汾0- 1.0汾1- 2.0汾 + char szUser[CLOUD_NAME_LEN/*48*/]; //用户名 + char szPassword[CLOUD_PASSWD_LEN/*48*/]; // 密码 + NET_DVR_POOLPARAM struPoolInfo[16];// 数组0表示卡口图片数据池,数组1表示违章图片数据池,数组2表示车辆侦测数据池(IPC/D) + BYTE byProtocolType;//云存储协议版本,0- 1.0版本,1- 2.0版本 BYTE byRes3[3]; - char szAccessKey[NET_SDK_ACCESS_KEY_LEN/*64*/]; // - char szSecretKey[NET_SDK_SECRET_KEY_LEN/*64*/]; // + char szAccessKey[NET_SDK_ACCESS_KEY_LEN/*64*/]; //访问密码 + char szSecretKey[NET_SDK_SECRET_KEY_LEN/*64*/]; //加密密码 BYTE byRes1[354]; }struCloudStoragePara; struct { BYTE byPhoneNum[MAX_PHONE_NUM/*32*/]; BYTE byRes1[708]; - }struPhoneNumPara;//Ų + }struPhoneNumPara;//短信测试 }unionServerPara; BYTE byRes2[800]; }NET_DVR_SERVER_TEST_PARA, *LPNET_DVR_SERVER_TEST_PARA; -typedef struct tagNET_DVR_GOP_INFO //ȡGOPϢṹ,ʱʹ +typedef struct tagNET_DVR_GOP_INFO //获取GOP索引信息结构体,建立连接时使用 { - DWORD dwSize; //ṹС - LONG lChannel; //ͨ - NET_DVR_TIME_EX struStartTime; //ʼʱ - NET_DVR_TIME_EX struEndTime; //ʱ - BYTE byRes[256]; // ֽ + DWORD dwSize; //结构体大小 + LONG lChannel; //通道号 + NET_DVR_TIME_EX struStartTime; //开始时间 + NET_DVR_TIME_EX struEndTime; //结束时间 + BYTE byRes[256]; // 保留字节 }NET_DVR_GOP_INFO, *LPNET_DVR_GOP_INFO; typedef struct tagNET_DVR_GOP_INFO_RET { - NET_DVR_TIME_V30 struGopTime; //GopϢʱ - DWORD dwDuration; //Ϣʱ - DWORD dwDataSize; //ָpBufС + NET_DVR_TIME_V30 struGopTime; //Gop信息时间点 + DWORD dwDuration; //信息持续时间 + DWORD dwDataSize; //指针pBuf大小 BYTE byRes[128]; - char* pBuf;//GopϢ + char* pBuf;//Gop信息块 }NET_DVR_GOP_INFO_RET, *LPNET_DVR_GOP_INFO_RET; -typedef struct tagNET_DVR_GOP_INFO_PASSBACK //Ϣ +typedef struct tagNET_DVR_GOP_INFO_PASSBACK //智能数据信息回填 { - DWORD dwSize; //ṹС - NET_DVR_TIME_V30 struTime; //ʼʱ,ΪԪʱʾĿʼʱ䣬ΪͼʱʾͼƬʱ - DWORD dwDuration; //Ϣʱ䣬ΪԪʱЧ - DWORD dwMetaDataSize; //ԴĴС - DWORD dwPicDataSize; //ͼƬݴС - char* pMetaDataBuffer; //Ԫݻ - char* pPicDataBuf; //ͼƬ + DWORD dwSize; //结构体大小 + NET_DVR_TIME_V30 struTime; //开始时间,当数据类型为智能元数据时,表示的开始时间,当为缩略图时,表示的是图片时间 + DWORD dwDuration; //信息持续时间,仅当数据类型为智能元数据时有效 + DWORD dwMetaDataSize; //数据源的大小 + DWORD dwPicDataSize; //图片数据大小 + char* pMetaDataBuffer; //智能元数据缓冲区 + char* pPicDataBuf; //图片缓冲区 BYTE byRes[32]; }NET_DVR_GOP_INFO_PASSBACK, *LPNET_DVR_GOP_INFO_PASSBACK; @@ -34209,187 +34209,187 @@ typedef struct tagNET_DVR_SINGLEWALLPARAM DWORD dwSize; BYTE byEnable; BYTE byRes1[3]; - DWORD dwWallNum;//ǽ - //Ϊ׼128128Ⱥ͸߶ֵãΪ׼ֵ + DWORD dwWallNum;//电视墙输出号 + //坐标须为基准坐标的整数倍(128×128),宽度和高度值不用设置,即为基准值 NET_DVR_RECTCFG struRectCfg; BYTE byRes2[36]; }NET_DVR_SINGLEWALLPARAM, *LPNET_DVR_SINGLEWALLPARAM; -/*Ϣ*/ +/*窗口信息*/ typedef struct tagNET_DVR_WALLWINCFG { DWORD dwSize; BYTE byEnable; BYTE byRes1[7]; - DWORD dwWinNum;//ں - DWORD dwLayerIndex;//Ӧͼ - NET_DVR_RECTCFG struWinPosition;//ĿĴ(ʾǽ) - DWORD dwDeviceIndex;//ֲʽ豸 - WORD wInputIndex;//źԴ + DWORD dwWinNum;//窗口号 + DWORD dwLayerIndex;//窗口相对应的图层号 + NET_DVR_RECTCFG struWinPosition;//目的窗口(相对显示墙) + DWORD dwDeviceIndex;//分布式大屏控制器设备序号 + WORD wInputIndex;//输入信号源 BYTE byRes2[14]; }NET_DVR_WALLWINCFG, *LPNET_DVR_WALLWINCFG; typedef struct tagNET_DVR_WALL_INDEX { DWORD dwSize; - BYTE byWallNo; //ǽţ1ʼ - BYTE bySceneNo; // + BYTE byWallNo; //电视墙序号,从1开始 + BYTE bySceneNo; //场景序号 BYTE byRes1[2]; - DWORD dwDeviceID; //ֲʽ豸ID - DWORD dwWindowNo; ///źԴ + DWORD dwDeviceID; //分布式子设备ID + DWORD dwWindowNo; //窗口序号/信号源序号 BYTE byRes2[32]; }NET_DVR_WALL_INDEX, *LPNET_DVR_WALL_INDEX; typedef struct tagNET_DVR_WALLWINPARAM { DWORD dwSize; - BYTE byTransparency; //ʹ͸ȣ0-أ0- - BYTE byWinMode;//ڷģʽȡ - BYTE byEnableSpartan;//ʹܣ0-أ1- - BYTE byDecResource; //ΪڷĽԴ1-D1,2-720P,3-1080P - BYTE byWndShowMode; //ʾģʽ0-ֶβã1-Ӵģʽ2-Ӵȫģʽ - BYTE byEnabledFeature; //Ƿóд0-ã!0- - BYTE byFeatureMode; //дģʽóдʱЧ0-Ч1-1+5ģʽ + BYTE byTransparency; //使能透明度,0-关,非0-开 + BYTE byWinMode;//窗口分屏模式,能力集获取 + BYTE byEnableSpartan;//畅显使能,0-关,1-开 + BYTE byDecResource; //为窗口分配的解码资源,1-D1,2-720P,3-1080P + BYTE byWndShowMode; //窗口显示模式,0-此字段不用,1-子窗口模式,2-子窗口全屏模式 + BYTE byEnabledFeature; //是否启用场景特写,0-不启用,!0-启用 + BYTE byFeatureMode; //特写模式,启用场景特写时有效,0-无效,1-“1+5”模式 BYTE byRes1; - DWORD dwAmplifyingSubWndNo; //ȫӴںţ1ֽǽ+1ֽӴں+2ֽڴںţ - //byWndShowModeΪ2ʱЧʾǰȫʾӴ - BYTE byWndTopKeep; //ö֣0-֣1- - BYTE byWndOpenKeep; //ڴ򿪱֣0-֣1- + DWORD dwAmplifyingSubWndNo; //全屏子窗口号(1字节墙号+1字节子窗口号+2字节窗口号) + //当byWndShowMode为2时有效,表示当前全屏显示的子窗口 + BYTE byWndTopKeep; //窗口置顶保持,0-不保持,1-保持 + BYTE byWndOpenKeep; //窗口打开保持,0-不保持,1-保持 BYTE byRes[22]; }NET_DVR_WALLWINPARAM, *LPNET_DVR_WALLWINPARAM; typedef struct tagNET_DVR_WALLSCENECFG { DWORD dwSize; - BYTE sSceneName[NAME_LEN]; // - BYTE byEnable; //ǷЧ0-Ч1-Ч - BYTE bySceneIndex; //ţֻܻȡȡгʱʹøò + BYTE sSceneName[NAME_LEN]; //场景名称 + BYTE byEnable; //场景是否有效,0-无效,1-有效 + BYTE bySceneIndex; //场景号,只能获取。获取所有场景时使用该参数 BYTE byRes [78]; }NET_DVR_WALLSCENECFG, *LPNET_DVR_WALLSCENECFG; typedef struct tagNET_DVR_WALLWIN_INFO { DWORD dwSize; - DWORD dwWinNum; //ں - DWORD dwSubWinNum;//Ӵں - DWORD dwWallNo; //ǽ + DWORD dwWinNum; //窗口号 + DWORD dwSubWinNum;//子窗口号 + DWORD dwWallNo; //墙号 BYTE byRes[12]; }NET_DVR_WALLWIN_INFO,*LPNET_DVR_WALLWIN_INFO; typedef struct tagNET_DVR_WALL_WIN_STATUS { DWORD dwSize ; - BYTE byDecodeStatus; /*ǰ״̬:0:δ,1 :*/ - BYTE byStreamType; /**/ - BYTE byPacketType; /*ʽ*/ - BYTE byFpsDecV; /*Ƶ֡*/ - BYTE byFpsDecA; /*Ƶ֡*/ + BYTE byDecodeStatus; /*当前解码状态:0:未启动,1 :已启动*/ + BYTE byStreamType; /*码流类型*/ + BYTE byPacketType; /*打包方式*/ + BYTE byFpsDecV; /*视频解码帧率*/ + BYTE byFpsDecA; /*音频解码帧率*/ BYTE byRes1[7]; - DWORD dwDecodedV; /*Ƶ֡*/ - DWORD dwDecodedA; /*Ƶ֡*/ - WORD wImgW; /*ǰԴͼС*/ + DWORD dwDecodedV; /*解码的视频帧*/ + DWORD dwDecodedA; /*解码的音频帧*/ + WORD wImgW; /*当前码流源的图像大小*/ WORD wImgH; - BYTE byStreamMode ; //Դ(˲Ƶۺƽ̨Ч)1-磬2-ۺƽ̨ڲϵͳ3-Ļ0xff-Ч + BYTE byStreamMode ; //码流源(此参数对视频综合平台有效):1-网络,2-综合平台内部编码子系统,3-屏幕服务器,0xff-无效 BYTE byRes2[31]; }NET_DVR_WALL_WIN_STATUS, *LPNET_DVR_WALL_WIN_STATUS; typedef struct tagNET_DVR_WININDEX_INFO { - DWORD dwWinIndex; //ں - DWORD dwSubWinIndex;//Ӵں - BYTE byType ;//Դͣ1-룬2- - BYTE byWallNo ; //ǽ + DWORD dwWinIndex; //窗口号 + DWORD dwSubWinIndex;//子窗口号 + BYTE byType ;//资源类型,1-解码,2-回显 + BYTE byWallNo ; //墙号 BYTE byRes[6]; }NET_DVR_WININDEX_INFO, *LPNET_DVR_WININDEX_INFO; typedef struct tagNET_DVR_ASSOCIATEDDEV_CHAN_INFO { DWORD dwSize ; - BYTE sAddress[MAX_DOMAIN_NAME];//ipַ - WORD wDVRPort; /* ˿ں */ - WORD wChannel; /* ͨ */ - BYTE sUserName[NAME_LEN]; /* ½ʺ */ - BYTE sPassword[PASSWD_LEN]; /* */ + BYTE sAddress[MAX_DOMAIN_NAME];//ip地址,或是域名 + WORD wDVRPort; /* 端口号 */ + WORD wChannel; /* 通道号 */ + BYTE sUserName[NAME_LEN]; /* 布防主机登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /* 布防主机密码 */ BYTE byRes[24]; }NET_DVR_ASSOCIATEDDEV_CHAN_INFO,*LPNET_DVR_ASSOCIATEDDEV_CHAN_INFO; typedef struct tagNET_DVR_WALLOUTPUTPARAM { DWORD dwSize; - DWORD dwResolution; //ֱ + DWORD dwResolution; //分辨率 NET_DVR_VIDEOEFFECT struRes; - BYTE byVideoFormat; //ƵʽVIDEO_STANDARD - BYTE byDisplayMode;/*ģʽ,1-BNC2-VGA3-HDMI4-DVI5-SDI, 6-FIBER, 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVIӦ0xff-Ч*/ - BYTE byBackgroundColor; //ɫ0-Чֱ֧ɫ1-죬2-̣3-4-ƣ5-ϣ6-࣬7-ڣ8-ף0xff-Զ - BYTE byUseEDIDResolution; //ǷʹEDIDֱʣ0-ʹã1-ʹ - WORD wLEDWidth; //LEDֱʿ - WORD wLEDHeight; //LEDֱʸ - NET_DVR_RGB_COLOR struBackColor;//ɫbyBackgroundColorΪ0xffʱЧ - BYTE byLinkStatus;//״̬0-Ч,1-ʾ,2-δʾ + BYTE byVideoFormat; //视频制式,见VIDEO_STANDARD + BYTE byDisplayMode;/*输出连接模式,1-BNC,2-VGA,3-HDMI,4-DVI,5-SDI, 6-FIBER, 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVI自适应,0xff-无效*/ + BYTE byBackgroundColor; //背景色,0-无效,不支持背景色,1-红,2-绿,3-蓝,4-黄,5-紫,6-青,7-黑,8-白,0xff-自定义 + BYTE byUseEDIDResolution; //是否使用EDID分辨率,0-不使用,1-使用 + WORD wLEDWidth; //LED屏输出分辨率宽 + WORD wLEDHeight; //LED屏输出分辨率高 + NET_DVR_RGB_COLOR struBackColor;//背景色,byBackgroundColor为0xff时有效 + BYTE byLinkStatus;//输出口连接状态,0-无效,1-接入显示器,2-未接入显示器 BYTE byRes2[51]; }NET_DVR_WALLOUTPUTPARAM, *LPNET_DVR_WALLOUTPUTPARAM; -#define MAX_UNITEDMATRIX_NUM 8 //Ƶۺƽ̨ +#define MAX_UNITEDMATRIX_NUM 8 //级联中最多视频综合平台数量 typedef struct NET_DVR_SUBMATRIXSYSTEMINFO { - //ƽ̨ţ0ʾ޴ƽ̨ + //平台号,0表示无此平台 DWORD dwSequence; - BYTE sAddress[MAX_DOMAIN_NAME];//ipַ - WORD wSubMatrixPort; /*ϵͳ˿ں*/ + BYTE sAddress[MAX_DOMAIN_NAME];//ip地址,或是域名 + WORD wSubMatrixPort; /*子系统端口号*/ BYTE byRes1[6]; - BYTE sUserName[NAME_LEN]; /*û*/ - BYTE sPassword[PASSWD_LEN]; /* */ + BYTE sUserName[NAME_LEN]; /*用户名*/ + BYTE sPassword[PASSWD_LEN]; /*密码 */ BYTE byRes2[36]; }NET_DVR_SUBMATRIXSYSTEMINFO,*LPNET_DVR_SUBMATRIXSYSTEMINFO; typedef struct tagNET_DVR_UNITEDMATRIXSYSTEMINFO { DWORD dwSize; - //Ƶۺƽ̨Ϣ + //视频综合平台信息 NET_DVR_SUBMATRIXSYSTEMINFO struMatrixInfo[MAX_UNITEDMATRIX_NUM]; BYTE byRes[32]; }NET_DVR_UNITEDMATRIXSYSTEMINFO,*LPNET_DVR_UNITEDMATRIXSYSTEMINFO; typedef struct tagNET_DVR_SUBSTREAM_SWITCH_CFG { - BYTE byAutoSwitchEnable; //Զл0 - ã1 - + BYTE byAutoSwitchEnable; //子码流自动切换,0 - 不启用,1 - 启用 BYTE byRes1[3]; - WORD wSubWndWidth; //Ӵڿ趨ֵbyAutoSwitchEnableΪ1ʱЧ - WORD wSubWndHeight; //Ӵڸ߶趨ֵbyAutoSwitchEnableΪ1ʱЧ + WORD wSubWndWidth; //子窗口宽度设定值,byAutoSwitchEnable为1时有效 + WORD wSubWndHeight; //子窗口高度设定值,byAutoSwitchEnable为1时有效 }NET_DVR_SUBSTREAM_SWITCH_CFG, *LPNET_DVR_SUBSTREAM_SWITCH_CFG; typedef struct tagNET_DVR_WALL_CFG { DWORD dwSize; - BYTE byTransparency;//͸,0-100,0Ϊ͸ - BYTE byWinStaticMode; //ڽֹͣʾģʽ1-(֮ǰǺɫ)2-ʾһ֡ͼ - BYTE byStreamFailedMode; //ȡʧʾģʽ1-Ƶźš2-ʾһ֡ͼ3-쳣4- - BYTE byEnabledOverlayLogo; //ʱǷLOGOʾû0-ӣ!0- - NET_DVR_SUBSTREAM_SWITCH_CFG struSubStreamSwitch; //л - BYTE byLEDShowMode; //LEDʾģʽ0-ͨģʽ1-ƽģʽ - BYTE byLowLatencyMode; //ʱģʽ0-ͨģʽ1-ʱģʽ + BYTE byTransparency;//透明度,0-100,0为不透明 + BYTE byWinStaticMode; //窗口解码停止显示模式,1-清屏(之前的清屏后是黑色),2-显示最后一帧图像 + BYTE byStreamFailedMode; //取流失败显示模式,1-“无网络视频信号”,2-显示最后一帧图像,3-连接异常,4-清屏 + BYTE byEnabledOverlayLogo; //解码能力不足时是否叠加LOGO以提示用户,0-不叠加,!0-叠加 + NET_DVR_SUBSTREAM_SWITCH_CFG struSubStreamSwitch; //子码流切换 + BYTE byLEDShowMode; //LED窗口显示模式,0-普通模式,1-平铺模式 + BYTE byLowLatencyMode; //低延时模式,0-普通模式,1-低延时模式 BYTE byRes[50]; }NET_DVR_WALL_CFG, *LPNET_DVR_WALL_CFG; typedef struct tagNET_DVR_LEDDISPLAYINFO { DWORD dwSize; - BYTE byAddressType; //0-ʵipv4 ipv6ַ 1- + BYTE byAddressType; //0-实际ipv4 ipv6地址 1-域名 BYTE byRes1[3]; - // unionServerʹʵʵַ + // 控制unionServer是使用实际地址还是域名 union { struct { - BYTE szDomain[MAX_DOMAIN_NAME/*64*/];//ַ + BYTE szDomain[MAX_DOMAIN_NAME/*64*/];//服务器地址,域名 BYTE byRes1[80]; }struDomain; struct { - NET_DVR_IPADDR struIp;/*IPַ*/ //IPv4 IPv6ַ, 144ֽ + NET_DVR_IPADDR struIp;/*IP地址*/ //IPv4 IPv6地址, 144字节 } struAddrIP; - }unionServer; //ʹṹͨbyAddressTypeֶαʾIPַ 64 + }unionServer; //使用联合体结构,通过byAddressType字段表示是IP地址还是域名 64 char szDisplayInfo[MAX_LEDDISPLAYINFO_LEN/*1024*/]; BYTE byRes[128]; }NET_DVR_LEDDISPLAYINFO,*LPNET_DVR_LEDDISPLAYINFO; @@ -34398,79 +34398,79 @@ typedef struct tagNET_DVR_LEDDISPLAYINFO typedef struct tagNET_DVR_LOW_LIGHT_CFG { DWORD dwSize; - BYTE byLowLightLimt; /* նȵӿ: 0-أ1- */ + BYTE byLowLightLimt; /* 低照度电子快门: 0-关,1-开 */ BYTE byLowLightLimtLevel; - /*0-أ1-*22-*33-*44-*65-*86-*127-*16 - 8-*249-*3210-*4811-*6412-*9613-*12814-*256 - 15-*512, 16-*1.25, 17-*1.5 */ + /*球机0-关,1-慢快门*2,2-慢快门*3,3-慢快门*4,4-慢快门*6,5-慢快门*8,6-慢快门*12,7-慢快门*16, + 8-慢快门*24,9-慢快门*32,10-慢快门*48,11-慢快门*64,12-慢快门*96,13-慢快门*128,14-慢快门*256, + 15-慢快门*512, 16-慢快门*1.25, 17-慢快门*1.5 */ BYTE byRes[66]; }NET_DVR_LOW_LIGHT_CFG, *LPNET_DVR_LOW_LIGHT_CFG; typedef struct tagNET_DVR_FOCUSMODE_CFG { DWORD dwSize; - BYTE byFocusMode; /* ۽ģʽ0-Զ1-ֶ2-Զ */ - BYTE byAutoFocusMode; /* Զ۽ģʽ0-أ1-ģʽA2-ģʽB3-ģʽAB4-ģʽC Զ۽ģʽҪھ۽ģʽΪԶʱʾ*/ - WORD wMinFocusDistance; /* С۽룬λCM, 0-Զ0xffff-Զ */ - BYTE byZoomSpeedLevel; /* 䱶ٶȣΪʵȡֵ1-3 */ - BYTE byFocusSpeedLevel; /* ۽ٶȣΪʵȡֵ1-3 */ - BYTE byOpticalZoom; /* ѧ䱶0-255 */ - BYTE byDigtitalZoom; /* ֱ䱶0-255 */ - float fOpticalZoomLevel; /* ѧ䱶(ֵ) [1,32], С0.5 ڲ豸ʱ*1000 */ - DWORD dwFocusPos;/* dwFocusPos focusֵ۽ֵΧΪ[0x1000,0xC000]ֵsonyֵʹֵΪ˶ͳһ֤ͬľͷfocusֵתΧ (ֶ۽ģʽӦ)*/ - BYTE byFocusDefinitionDisplay;// ۽ʾ0~ʾ1~ʾ, ʾǰͷĿֵڰͻʹץܹﵽЧԽԽȷΧΪ0~100.0000 - BYTE byFocusSensitivity; //۽ȣΧ[0,2]۽ģʽΪԶԶʱЧ + BYTE byFocusMode; /* 聚焦模式,0-自动,1-手动,2-半自动 */ + BYTE byAutoFocusMode; /* 自动聚焦模式,0-关,1-模式A,2-模式B,3-模式AB,4-模式C 自动聚焦模式,需要在聚焦模式为自动时才显示*/ + WORD wMinFocusDistance; /* 最小聚焦距离,单位CM, 0-自动,0xffff-无穷远 */ + BYTE byZoomSpeedLevel; /* 变倍速度,为实际取值,1-3 */ + BYTE byFocusSpeedLevel; /* 聚焦速度,为实际取值,1-3 */ + BYTE byOpticalZoom; /* 光学变倍,0-255 */ + BYTE byDigtitalZoom; /* 数字变倍,0-255 */ + float fOpticalZoomLevel; /* 光学变倍(倍率值) [1,32], 最小间隔0.5 ,内部设备交互的时候*1000 */ + DWORD dwFocusPos;/* dwFocusPos 是focus值(聚焦值),范围为[0x1000,0xC000],这个值是sony坐标值,使用这个值是为了对外统一,保证不同的镜头对外focus值都转换在这个范围内 (手动聚焦模式下下应用)*/ + BYTE byFocusDefinitionDisplay;// 聚焦清晰度显示,0~不显示,1~显示, 开启会在码流上显示当前镜头目标的清晰度值,用于帮助客户调焦使相机抓拍能够达到最清晰的效果,该清晰度越大代表着越清晰,清晰度范围为:0~100.0000 + BYTE byFocusSensitivity; //聚焦灵敏度,范围[0,2],聚焦模式为自动、半自动时生效 BYTE byRes1[2]; - DWORD dwRelativeFocusPos;//focusֵ16λʾ۽ֵ0~400016λǰ۽ֵȡʱ¶ֵ + DWORD dwRelativeFocusPos;//相对focus值,其低16位表示聚焦值,0~4000;高16位代表当前聚焦值获取时的温度值 BYTE byRes[48]; }NET_DVR_FOCUSMODE_CFG, *LPNET_DVR_FOCUSMODE_CFG; typedef struct tagNET_DVR_INFRARE_CFG { DWORD dwSize; - BYTE byIrControlMode; /* -ģʽ0-Զ1-ֶ */ - BYTE byIrBrightness; /* -ȣ0-100 */ - BYTE byIrSensitivity; /* -ȣ0-100 */ - BYTE byIrTrigMode; /* ģʽ 0-о1- ԶģʽЧ*/ - BYTE byIrBrightnessLimit;/* ֵΪ80ʾǵǰƵΪԭȸԶԼֵ80% ԶģʽЧ*/ + BYTE byIrControlMode; /* 红外球机配置-控制模式:0-自动,1-手动 */ + BYTE byIrBrightness; /* 红外球机配置-红外亮度:0-100 */ + BYTE byIrSensitivity; /* 红外球机配置-红外灯灵敏度:0-100 */ + BYTE byIrTrigMode; /* 触发模式 0-机芯触发,1-光敏触发 自动模式下生效*/ + BYTE byIrBrightnessLimit;/* 亮度限制 如果此值为80,表示的意义是当前红外灯的亮度为原先根据自动策略计算出的亮度值×80% 自动模式下生效*/ BYTE byRes[63]; }NET_DVR_INFRARE_CFG, *LPNET_DVR_INFRARE_CFG; typedef struct tagNET_DVR_AEMODECFG { DWORD dwSize; - int iIrisSet; /* ȦΪʵȡֵ*100ֵ0- */ - int iGainSet; /* 棬عⲹΪʵȡֵ*100ֵпǸֵ */ - int iGainLimit;/* ƣعⲹΪʵȡֵ*100ֵпǸֵ */ - int iExposureCompensate; /* عⲹΪʵȡֵ*100ֵ105010.5dB, -750-7.5dB */ - BYTE byExposureModeSet; /* عģʽ,0-ֶģʽ1-Զع⣬2-Ȧȣ3-ȣ4- */ - BYTE byShutterSet; /* ţ0-أ1-Զx12-Զx23-Զx44-Զx85-Զx166-Զx327-Զx648-Զx1289-1/110-1/2 - 11-1/312-1/413-1/614-1/815-1/1216-1/1517-1/2518-1/3019-1/5020-1/6021-1/75 - 22-1/9023-1/10024-1/12025-1/12526-1/15027-1/18028-1/20029-1/21530-1/25031-1/300 - 32-1/35033-1/42534-1/50035-1/60036-1/72537-1/100038-1/125039-1500,40-1/175041-1/2000 - 42-1/250043-3000,44-1/350045-1/400046-1/600047-1/1000048-1/3000049-1/100000,50-1/175 - 51-1/19552-1/22553-1/230 */ - BYTE byImageStabilizeLevel; /* ȼ: 0-3 */ - BYTE byCameraIrCorrect; /* У: 0-Զ1-2, */ - BYTE byHighSensitivity; /* : 0-أ1- */ - BYTE byInitializeLens; /* ʼͷ: 0-أ1- */ - BYTE byChromaSuppress; /* ɫ :0-255*/ - BYTE byMaxShutterSet; //ֵ;ֵbyShutterSetͬ(Զع⡢ȦģʽЧ) - BYTE byMinShutterSet; //Сֵ;ֵbyShutterSetͬ(Զع⡢ȦģʽЧ) - BYTE byMaxIrisSet; //Ȧֵ(Զع⡢ģʽ) [0,100] ; - BYTE byMinIrisSet; //СȦֵ(Զع⡢ģʽ) [0,100] ; - BYTE byExposureLevel;//عȼعģʽΪԶȦȡЧȼ1-5 Ĭ4ϰ汾SDK豸ʱֽΪ0ֽΪ0ʱҲĬΪعȼΪ1 + int iIrisSet; /* 光圈,为实际取值*100的值,0-关 */ + int iGainSet; /* 快球增益,曝光补偿,为实际取值*100的值,有可能是负值 */ + int iGainLimit;/* 增益限制,曝光补偿,为实际取值*100的值,有可能是负值 */ + int iExposureCompensate; /* 曝光补偿,为实际取值*100的值,比如1050代表10.5dB, -750代表-7.5dB */ + BYTE byExposureModeSet; /* 球机的曝光模式,0-手动模式,1-自动曝光,2-光圈优先,3-快门优先,4-增益优先 */ + BYTE byShutterSet; /* 快门,0-关,1-自动x1,2-自动x2,3-自动x4,4-自动x8,5-自动x16,6-自动x32,7-自动x64,8-自动x128,9-1/1,10-1/2, + 11-1/3,12-1/4,13-1/6,14-1/8,15-1/12,16-1/15,17-1/25,18-1/30,19-1/50,20-1/60,21-1/75, + 22-1/90,23-1/100,24-1/120,25-1/125,26-1/150,27-1/180,28-1/200,29-1/215,30-1/250,31-1/300, + 32-1/350,33-1/425,34-1/500,35-1/600,36-1/725,37-1/1000,38-1/1250,39-1500,40-1/1750,41-1/2000, + 42-1/2500,43-3000,44-1/3500,45-1/4000,46-1/6000,47-1/10000,48-1/30000,49-1/100000,50-1/175, + 51-1/195,52-1/225,53-1/230 */ + BYTE byImageStabilizeLevel; /* 防抖动等级: 0-3 */ + BYTE byCameraIrCorrect; /* 红外校正: 0-自动,1-开,2,关 */ + BYTE byHighSensitivity; /* 高灵敏度设置: 0-关,1-开 */ + BYTE byInitializeLens; /* 初始化镜头: 0-关,1-开 */ + BYTE byChromaSuppress; /* 色彩抑制 :0-255*/ + BYTE byMaxShutterSet; //最大快门值;索引值与byShutterSet相同(在自动曝光、光圈优先模式下生效) + BYTE byMinShutterSet; //最小快门值;索引值与byShutterSet相同(在自动曝光、光圈优先模式下生效) + BYTE byMaxIrisSet; //最大光圈限制值(自动曝光、快门优先模式) [0,100] ; + BYTE byMinIrisSet; //最小光圈限制值(自动曝光、快门优先模式) [0,100] ; + BYTE byExposureLevel;//曝光等级(曝光模式为自动、光圈优先、快门优先情况有效),等级1-5 默认4,兼容老版本SDK配置新设备时,保留字节为0的情况,所以这个字节为0时,也默认为曝光等级为1 BYTE byRes[60]; }NET_DVR_AEMODECFG, *LPNET_DVR_AEMODECFG; typedef struct tagNET_DVR_FLASH_CFG { DWORD dwSize; - DWORD dwChan;//ͨ - DWORD dwInNumbers;// - DWORD dwOutNumbers;//뿪 - DWORD dwStartTime;//ʼʱ - DWORD dwEndTime;//ʱ + DWORD dwChan;//通道号 + DWORD dwInNumbers;//进入人数 + DWORD dwOutNumbers;//离开人数 + DWORD dwStartTime;//开始时间秒数 + DWORD dwEndTime;//结束时间秒数 DWORD dwEhomeFlag;// DWORD dwAlarmFlag;// BYTE byRes[1024]; @@ -34479,17 +34479,17 @@ typedef struct tagNET_DVR_FLASH_CFG typedef struct tagNET_DVR_EXTERNAL_MATRIX_CFG { DWORD dwSize; - BYTE byValid; // ЧʱΪãЧʱΪɾ + BYTE byValid; // 有效时为设置,无效时为删除 BYTE byRes1[3]; - BYTE sMatrixName[NAME_LEN/*32*/]; // - DWORD dwMatrixID; // IDţֻܻȡ - WORD wMatrixInputChanNum; // ͨĿ - WORD wMatrixOutputChanNum; // ͨĿ - WORD wMatrixOutputChanRef[MAX_CAM_COUNT]; //// 豸;İ󶨹ϵ±ʾ豸ͨţԪصֵʾͨţ - //Ԫֵ0 ʾ󶨾ͨԪֵΪ0ʱʾ󶨣ĻΪĻź;İ󶨹ϵ - BYTE byMatrixChanType;// ͨ1-BNC2-VGA3-RGB4-DVI - BYTE byMatrixProtocol; // Э1ZT1.02.ZT2.03.Extron4.Creator - BYTE byMatrixType; //1-ģ2-־ + BYTE sMatrixName[NAME_LEN/*32*/]; // 矩阵的名称 + DWORD dwMatrixID; // 矩阵的ID号,只能获取 + WORD wMatrixInputChanNum; // 矩阵的输入通道数目 + WORD wMatrixOutputChanNum; // 矩阵的输出通道数目 + WORD wMatrixOutputChanRef[MAX_CAM_COUNT]; //// 设备输入和矩阵输出的绑定关系,数组下标表示控制器设备输入通道号,元素的值表示矩阵的输出通道号, + //元素值大于0 表示绑定矩阵输出通道,元素值为0时表示不绑定,屏幕服务器为屏幕索引号和矩阵输出的绑定关系 + BYTE byMatrixChanType;// 矩阵的通道类型1-BNC、2-VGA、3-RGB、4-DVI + BYTE byMatrixProtocol; // 矩阵所用协议1、ZT1.0、2.ZT2.0、3.Extron、4.Creator + BYTE byMatrixType; //1-模拟矩阵,2-数字矩阵 BYTE byRes2; NET_MATRIX_UNION struMatrixUnion; BYTE byRes3[128]; @@ -34498,17 +34498,17 @@ typedef struct tagNET_DVR_EXTERNAL_MATRIX_CFG typedef struct tagNET_DVR_EXTERNAL_MATRIX_CFG_V50 { DWORD dwSize; - BYTE byValid; // ЧʱΪãЧʱΪɾ + BYTE byValid; // 有效时为设置,无效时为删除 BYTE byRes1[3]; - BYTE sMatrixName[NAME_LEN/*32*/]; // - DWORD dwMatrixID; // IDţֻܻȡ - WORD wMatrixInputChanNum; // ͨĿ - WORD wMatrixOutputChanNum; // ͨĿ - WORD wMatrixOutputChanRef[MAX_CAM_COUNT_V50]; //// 豸;İ󶨹ϵ±ʾ豸ͨţԪصֵʾͨţ - //Ԫֵ0 ʾ󶨾ͨԪֵΪ0ʱʾ󶨣ĻΪĻź;İ󶨹ϵ - BYTE byMatrixChanType;// ͨ1-BNC2-VGA3-RGB4-DVI - BYTE byMatrixProtocol; // Э1ZT1.02.ZT2.03.Extron4.Creator - BYTE byMatrixType; //1-ģ2-־ + BYTE sMatrixName[NAME_LEN/*32*/]; // 矩阵的名称 + DWORD dwMatrixID; // 矩阵的ID号,只能获取 + WORD wMatrixInputChanNum; // 矩阵的输入通道数目 + WORD wMatrixOutputChanNum; // 矩阵的输出通道数目 + WORD wMatrixOutputChanRef[MAX_CAM_COUNT_V50]; //// 设备输入和矩阵输出的绑定关系,数组下标表示控制器设备输入通道号,元素的值表示矩阵的输出通道号, + //元素值大于0 表示绑定矩阵输出通道,元素值为0时表示不绑定,屏幕服务器为屏幕索引号和矩阵输出的绑定关系 + BYTE byMatrixChanType;// 矩阵的通道类型1-BNC、2-VGA、3-RGB、4-DVI + BYTE byMatrixProtocol; // 矩阵所用协议1、ZT1.0、2.ZT2.0、3.Extron、4.Creator + BYTE byMatrixType; //1-模拟矩阵,2-数字矩阵 BYTE byRes2; NET_MATRIX_UNION struMatrixUnion; BYTE byRes3[128]; @@ -34521,131 +34521,131 @@ typedef struct tagNET_DVR_ASSOCIATE_INPUT_PARAM { BYTE byEnable; BYTE byRes1[3]; - DWORD dwDeviceIndex;//ֲʽ豸 - WORD wInputIndex;//źԴ + DWORD dwDeviceIndex;//分布式大屏控制器设备序号 + WORD wInputIndex;//输入信号源 BYTE byRes2[18]; }NET_DVR_ASSOCIATE_INPUT_PARAM, *LPNET_DVR_ASSOCIATE_INPUT_PARAM; typedef struct tagNET_DVR_ASSOCIATE_OUTPUT_PARAM { BYTE byEnable; - BYTE byWallNo; //ǽţ1ʼ + BYTE byWallNo; //墙号,从1开始 BYTE byRes1[2]; - DWORD dwOutputIndex; //ʾ + DWORD dwOutputIndex; //输出显示屏的序号 BYTE byRes2[20]; }NET_DVR_ASSOCIATE_OUTPUT_PARAM,*LPNET_DVR_ASSOCIATE_OUTPUT_PARAM; typedef struct tagNET_DVR_VCS_USER_INFO { DWORD dwSize; - BYTE sUserName[NAME_LEN]; // û16ֽ - BYTE sPassWord[PASSWD_LEN]; // - NET_DVR_IPADDR struUserIP; // ûIPַ(Ϊ0ʱʾκεַ) - BYTE byMacAddr[MACADDR_LEN]; // ַ - BYTE byPriority; // ȼ1-Ա2-Ա ԱκȨޣԱû"û"Ȩ + BYTE sUserName[NAME_LEN]; // 用户名,最大16字节 + BYTE sPassWord[PASSWD_LEN]; // 密码 + NET_DVR_IPADDR struUserIP; // 用户IP地址(为0时表示允许任何地址) + BYTE byMacAddr[MACADDR_LEN]; // 物理地址 + BYTE byPriority; // 优先级,1-管理员,2-操作员 ,管理员具有任何权限,操作员没有"管理用户"的权限 BYTE byRes1; - DWORD dwRight;/*Զ̲Ȩޣλʾ0-֧֣1-֧֣32λȨ*/ - //bit0-ȡû - //bit1-ʾ - //bit2-ڹ - //bit3-źԴ - //bit4-ֹ - //bit5-Ԥ - //bit6-ͼ - //bit7-OSD - //bit8-Ȩ - //bit9- - //bit10-Զ - //bit11-ָĬ - //bit12-뵼ļ - //bit13-־ѯ - //bit14-Զ - //bit15-Ļ + DWORD dwRight;/*远程操作权限,按位表示,0-不支持,1-支持,各32位代表的权限类型*/ + //bit0-获取设置基本参数 + //bit1-显示屏管理 + //bit2-窗口管理 + //bit3-信号源管理 + //bit4-布局管理 + //bit5-预案管理 + //bit6-底图管理 + //bit7-OSD管理 + //bit8-回显权限 + //bit9-报警布防 + //bit10-远程升级 + //bit11-恢复默认设置 + //bit12-导入导出配置配置文件 + //bit13-日志查询 + //bit14-远程重启 + //bit15-屏幕区域管理 NET_DVR_ASSOCIATE_INPUT_PARAM struInputParam[MAX_INPUTNUMS/*1024*/]; NET_DVR_ASSOCIATE_OUTPUT_PARAM struOutputParam[MAX_OUTPUTNUMS/*256*/]; - NET_DVR_RECTCFG_EX struManageRegion; //Ļ - BYTE byWallNo; //Ļǽţֵֻ֧ǽ豸ֶЧ + NET_DVR_RECTCFG_EX struManageRegion; //屏幕管理区域 + BYTE byWallNo; //开启屏幕管理区域的墙号,对只支持单墙的设备,此字段无效 BYTE byRes2[3]; - BYTE sLoginPassword[PASSWD_LEN/*16*/]; /* ½*/ + BYTE sLoginPassword[PASSWD_LEN/*16*/]; /* 登陆密码*/ BYTE byRes[88];} NET_DVR_VCS_USER_INFO, *LPNET_DVR_VCS_USER_INFO; typedef struct tagNET_DVR_STREAM_MEDIA_SERVER_CFG_V41 { - BYTE byValid; //Ƿã0-1- + BYTE byValid; //是否启用,0-否,1-是 BYTE byRes1[3]; - BYTE byAddress[MAX_DOMAIN_NAME]; //IP - WORD wDevPort; /*ý˿*/ - BYTE byTransmitType; /*Э 0-TCP1-UDP*/ + BYTE byAddress[MAX_DOMAIN_NAME]; //IP或者域名 + WORD wDevPort; /*流媒体服务器端口*/ + BYTE byTransmitType; /*传输协议类型 0-TCP,1-UDP*/ BYTE byRes2[69]; }NET_DVR_STREAM_MEDIA_SERVER_CFG_V41,*LPNET_DVR_STREAM_MEDIA_SERVER_CFG_V41; -//豸ͨϢ +//设备通道信息 typedef struct tagNET_DVR_DEV_CHAN_INFO_V41 { - BYTE byAddress[MAX_DOMAIN_NAME]; //豸 - WORD wDVRPort; //˿ں - BYTE byChannel; //ͨ - BYTE byTransProtocol; //Э0-TCP1-UDP - BYTE byTransMode; //ģʽ 0 1 - BYTE byFactoryType; /*ǰ豸,ͨӿڻȡ*/ - BYTE byDeviceType; //豸(Ƶۺƽ̨ܰʹ)1-ʱƵۺƽ̨byVcaSupportChanModeֶʹýͨʾͨ2- - BYTE byDispChan;//ʾͨ,ʹ - BYTE bySubDispChan;//ʾͨͨţʱʹ - BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500wʹãݸòԴ - BYTE byUseZeroChan; //Ƿʹͨ0-1- + BYTE byAddress[MAX_DOMAIN_NAME]; //设备域名 + WORD wDVRPort; //端口号 + BYTE byChannel; //通道号 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byDeviceType; //设备类型(视频综合平台智能板使用),1-解码器(此时根据视频综合平台能力集中byVcaSupportChanMode字段来决定是使用解码通道还是显示通道),2-编码器 + BYTE byDispChan;//显示通道号,智能配置使用 + BYTE bySubDispChan;//显示通道子通道号,智能配置时使用 + BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500w大屏控制器使用,大屏控制器会根据该参数分配解码资源 + BYTE byUseZeroChan; //是否使用零通道,0-否,1-是 BYTE byRes; - BYTE sUserName[NAME_LEN]; //½ʺ - BYTE sPassword[PASSWD_LEN]; // + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 }NET_DVR_DEV_CHAN_INFO_V41,*LPNET_DVR_DEV_CHAN_INFO_V41; typedef struct tagNET_DVR_DEV_CHAN_INFO_EX { - BYTE byChanType; //ͨͣ0-ͨͨ,1-ͨ,2-ID3-Դ4-ͨ5-ƴͨ6-Ļ7-ֲʽԴ8-ںͨ9-Դ - BYTE byStreamId[STREAM_ID_LEN]; //IDbyChanType=29ʱֶָipcID + BYTE byChanType; //通道类型,0-普通通道,1-零通道,2-流ID,3-本地输入源,4-虚拟屏服务器通道,5-拼接通道,6-屏幕服务器,7-分布式网络源,8-多相机融合通道,9-网络输入源 + BYTE byStreamId[STREAM_ID_LEN]; //流ID,当byChanType=2、9时,该字段用于指定流或者网络ipc的ID号 BYTE byRes1[3]; - DWORD dwChannel; //ͨţͨΪͨͨͨԴͨƴͨĻֲʽԴʱֶ + DWORD dwChannel; //通道号,通道类型为普通通道,零通道,本地输入源,虚拟屏服务器通道,拼接通道,屏幕服务器,分布式网络源时填此字段 BYTE byRes2[24]; - BYTE byAddress[MAX_DOMAIN_NAME]; //豸 - WORD wDVRPort; //˿ں - BYTE byChannel; //ͨ,dwChannelΪ0ʱֶЧ - BYTE byTransProtocol; //Э0-TCP1-UDP - BYTE byTransMode; //ģʽ 0 1 - BYTE byFactoryType; /*ǰ豸,ͨӿڻȡ*/ - BYTE byDeviceType; //豸(Ƶۺƽ̨ܰʹ)1-ʱƵۺƽ̨byVcaSupportChanModeֶʹýͨʾͨ2- - BYTE byDispChan;//ʾͨ,ʹ - BYTE bySubDispChan;//ʾͨͨţʱʹ - BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500wʹãݸòԴ + BYTE byAddress[MAX_DOMAIN_NAME]; //设备域名 + WORD wDVRPort; //端口号 + BYTE byChannel; //通道号,dwChannel不为0时此字段无效 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byDeviceType; //设备类型(视频综合平台智能板使用),1-解码器(此时根据视频综合平台能力集中byVcaSupportChanMode字段来决定是使用解码通道还是显示通道),2-编码器 + BYTE byDispChan;//显示通道号,智能配置使用 + BYTE bySubDispChan;//显示通道子通道号,智能配置时使用 + BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500w大屏控制器使用,大屏控制器会根据该参数分配解码资源 BYTE byRes[2]; - BYTE sUserName[NAME_LEN]; //½ʺ - BYTE sPassword[PASSWD_LEN]; // + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 }NET_DVR_DEV_CHAN_INFO_EX,*LPNET_DVR_DEV_CHAN_INFO_EX; typedef struct tagNET_DVR_STREAM_MEDIA_SERVER { - BYTE byValid; //Ƿã0-1- + BYTE byValid; //是否启用,0-否,1-是 BYTE byRes1[3]; - BYTE byAddress[MAX_DOMAIN_NAME]; //IP - WORD wDevPort; /*ý˿*/ - BYTE byTransmitType; /*Э 0-TCP1-UDP*/ + BYTE byAddress[MAX_DOMAIN_NAME]; //IP或者域名 + WORD wDevPort; /*流媒体服务器端口*/ + BYTE byTransmitType; /*传输协议类型 0-TCP,1-UDP*/ BYTE byRes2[5]; }NET_DVR_STREAM_MEDIA_SERVER,*LPNET_DVR_STREAM_MEDIA_SERVER; typedef struct tagNET_DVR_DEV_DDNS_INFO { - BYTE byDevAddress[MAX_DOMAIN_NAME]; //(IPServerhiDDNSʱкŻ߱) - BYTE byTransProtocol; //Э0-TCP1-UDP, 2-MCAST - BYTE byTransMode; //ģʽ 0 1 - BYTE byDdnsType; //ͣ0-IPServer 1Dyndns 2PeanutHull()3- NO-IP, 4- hiDDNS + BYTE byDevAddress[MAX_DOMAIN_NAME]; //域名(IPServer或hiDDNS时可填序列号或者别名) + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP, 2-MCAST + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byDdnsType; //域名服务器类型,0-IPServer 1-Dyndns 2-PeanutHull(花生壳),3- NO-IP, 4- hiDDNS BYTE byRes1; - BYTE byDdnsAddress[MAX_DOMAIN_NAME]; //DDNSַ - WORD wDdnsPort; //DDNS˿ں - BYTE byChanType; //0-ͨͨ,1-ͨ,2-ID - BYTE byFactoryType; //ǰ豸,ͨӿڻȡ - DWORD dwChannel; //ͨ - BYTE byStreamId[STREAM_ID_LEN]; //ID - BYTE sUserName[NAME_LEN]; //½ʺ - BYTE sPassword[PASSWD_LEN]; // - WORD wDevPort; //ǰ豸ͨŶ˿ + BYTE byDdnsAddress[MAX_DOMAIN_NAME]; //DDNS服务器地址 + WORD wDdnsPort; //DDNS服务器端口号 + BYTE byChanType; //0-普通通道,1-零通道,2-流ID + BYTE byFactoryType; //前端设备厂家类型,通过接口获取 + DWORD dwChannel; //通道号 + BYTE byStreamId[STREAM_ID_LEN]; //流ID + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 + WORD wDevPort; //前端设备通信端口 BYTE byRes2[2]; }NET_DVR_DEV_DDNS_INFO,*LPNET_DVR_DEV_DDNS_INFO; @@ -34656,7 +34656,7 @@ typedef struct tagNET_DVR_DEC_STREAM_DEV_EX }NET_DVR_DEC_STREAM_DEV_EX,*LPNET_DVR_DEC_STREAM_DEV_EX; -//DDNSʽȡ +//DDNS方式取流 typedef struct tagNET_DVR_DEC_DDNS_DEV { NET_DVR_DEV_DDNS_INFO struDdnsInfo; @@ -34674,63 +34674,63 @@ typedef union tagNET_DVR_DEC_STREAM_MODE typedef struct tagNET_DVR_PU_STREAM_CFG_V41 { DWORD dwSize; - BYTE byStreamMode;/*ȡģʽ0-Ч1-ͨIPȡ2-ͨURLȡ,3-̬ͨ豸ȡ*/ - BYTE byStreamEncrypt; //Ƿܴ,0-֧,1-֧ + BYTE byStreamMode;/*取流模式,0-无效,1-通过IP或域名取流,2-通过URL取流,3-通过动态域名解析向设备取流*/ + BYTE byStreamEncrypt; //是否进行码流加密处理,0-不支持,1-支持 BYTE byRes1[2]; - NET_DVR_DEC_STREAM_MODE uDecStreamMode;//ȡϢ - DWORD dwDecDelayTime;//ʱʱ䣬λ - BYTE sStreamPassword[STREAM_PASSWD_LEN]; //,Ϣ + NET_DVR_DEC_STREAM_MODE uDecStreamMode;//取流信息 + DWORD dwDecDelayTime;//解码延时时间,单位:毫秒 + BYTE sStreamPassword[STREAM_PASSWD_LEN]; //码流加密密码,需敏感信息加密 BYTE byRes2[48]; }NET_DVR_PU_STREAM_CFG_V41,*LPNET_DVR_PU_STREAM_CFG_V41; typedef struct tagNET_DVR_MATRIX_CHAN_INFO_V41 { - BYTE byEnable; //Ƿã0-1- - BYTE byStreamMode;/*ȡģʽ0-Ч1-ͨIPȡ2-ͨURLȡ,3-̬ͨ豸ȡ*/ + BYTE byEnable; //是否启用,0-否,1-是 + BYTE byStreamMode;/*取流模式,0-无效,1-通过IP或域名取流,2-通过URL取流,3-通过动态域名解析向设备取流*/ BYTE byRes[2]; - NET_DVR_DEC_STREAM_MODE uDecStreamMode;//ȡϢ + NET_DVR_DEC_STREAM_MODE uDecStreamMode;//取流信息 }NET_DVR_MATRIX_CHAN_INFO_V41,*LPNET_DVR_MATRIX_CHAN_INFO_V41; typedef struct tagNET_DVR_MATRIX_LOOP_DECINFO_V41 { DWORD dwSize; - DWORD dwPoolTime; /*Ѳ*/ + DWORD dwPoolTime; /*轮巡间隔*/ NET_DVR_MATRIX_CHAN_INFO_V41 struchanConInfo[MAX_CYCLE_CHAN_V30]; - BYTE byStreamEncrypt; //Ƿܴ,0-֧,1-֧ + BYTE byStreamEncrypt; //是否进行码流加密处理,0-不支持,1-支持 BYTE byRes[3]; - BYTE sStreamPassword[STREAM_PASSWD_LEN]; //,Ϣ + BYTE sStreamPassword[STREAM_PASSWD_LEN]; //码流加密密码,需敏感信息加密 }NET_DVR_MATRIX_LOOP_DECINFO_V41, *LPNET_DVR_MATRIX_LOOP_DECINFO_V41; typedef struct tagNET_DVR_MATRIX_DEC_CHAN_INFO_V41 { DWORD dwSize; - BYTE byStreamMode;/*ȡģʽ0-Ч1-ͨIPȡ2-ͨURLȡ,3-̬ͨ豸ȡ*/ + BYTE byStreamMode;/*取流模式,0-无效,1-通过IP或域名取流,2-通过URL取流,3-通过动态域名解析向设备取流*/ BYTE byRes1[3]; - NET_DVR_DEC_STREAM_MODE uDecStreamMode;//ȡϢ - DWORD dwPlayMode; /* 0-̬ 1ѭ 2ʱط 3ļط */ - NET_DVR_TIME StartTime; /* ʱطſʼʱ */ - NET_DVR_TIME StopTime; /* ʱطֹͣʱ */ - BYTE sFileName[128]; /* ļطļ */ - DWORD dwGetStreamMode; /*ȡģʽ:1-2-*/ + NET_DVR_DEC_STREAM_MODE uDecStreamMode;//取流信息 + DWORD dwPlayMode; /* 0-动态解码 1-循环解码 2-按时间回放 3-按文件回放 */ + NET_DVR_TIME StartTime; /* 按时间回放开始时间 */ + NET_DVR_TIME StopTime; /* 按时间回放停止时间 */ + BYTE sFileName[128]; /* 按文件回放文件名 */ + DWORD dwGetStreamMode; /*取流模式:1-主动,2-被动*/ NET_DVR_MATRIX_PASSIVEMODE struPassiveMode; BYTE byRes2[32]; }NET_DVR_MATRIX_DEC_CHAN_INFO_V41,*LPNET_DVR_MATRIX_DEC_CHAN_INFO_V41; typedef struct tagNet_DVR_IP_ADDRESS { - BYTE byDevAddress[MAX_DOMAIN_NAME]; /*豸IPַ*/ - WORD wDevPort; //豸˿ + BYTE byDevAddress[MAX_DOMAIN_NAME]; /*设备IP地址*/ + WORD wDevPort; //设备端口 BYTE byres[134]; }NET_DVR_IP_ADDRESS, *LPNET_DVR_IP_ADDRESS; typedef struct tagNet_DVR_DDNS_ADDRESS { - BYTE byDevAddress[MAX_DOMAIN_NAME]; /*DDNS*/ - BYTE byDevDdns[MAX_DOMAIN_NAME]; /*豸ַ*/ - BYTE byDdnsType; //ͣ0-IPServer 1Dyndns 2PeanutHull()//3- NO-IP, 4- hiDDNS + BYTE byDevAddress[MAX_DOMAIN_NAME]; /*DDNS域名*/ + BYTE byDevDdns[MAX_DOMAIN_NAME]; /*设备地址*/ + BYTE byDdnsType; //域名服务器类型,0-IPServer 1-Dyndns 2-PeanutHull(花生壳),//3- NO-IP, 4- hiDDNS BYTE byRes1[3]; - WORD wDevPort; //豸˿ - WORD wDdnsPort; //˿ + WORD wDevPort; //设备端口 + WORD wDdnsPort; //域名服务器端口 BYTE byres[64]; }NET_DVR_DDNS_ADDRESS, *LPNET_DVR_DDNS_ADDRESS; @@ -34743,15 +34743,15 @@ typedef struct tagNet_DVR_PLAY_BACK_BY_TIME typedef struct tagNet_DVR_MATRIX_DEC_REMOTE_PLAY_EX { DWORD dwSize; - DWORD dwDecChannel; //ͨ - BYTE byAddressType; //豸ַͣ0-IP1-DDNS - BYTE byChannelType; //ͨͣ0-ͨͨ1-ͨ2-ID + DWORD dwDecChannel; //解码通道号 + BYTE byAddressType; //设备地址类型,0-IP,1-DDNS + BYTE byChannelType; //通道类型,0-普通通道,1-零通道,2-流ID BYTE byres[2]; - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - DWORD dwChannel; /* 豸ͨ */ - BYTE byStreamId[STREAM_ID_LEN]; //ID,˲ͨΪIDʱЧ - DWORD dwPlayMode; /* 0ļ 1ʱ*/ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwChannel; /* 设备通道号 */ + BYTE byStreamId[STREAM_ID_LEN]; //流ID,此参数在通道类型为流ID时有效 + DWORD dwPlayMode; /* 0-按文件 1-按时间*/ union { BYTE byRes[200]; @@ -34762,70 +34762,70 @@ typedef struct tagNet_DVR_MATRIX_DEC_REMOTE_PLAY_EX union { BYTE byRes[128]; - NET_DVR_PLAY_BACK_BY_TIME struPlayBackByTime; //ʱطʱļϢ - char sFileName[128]; //ļطʱļϢ + NET_DVR_PLAY_BACK_BY_TIME struPlayBackByTime; //按时间回放时文件信息 + char sFileName[128]; //按文件名回放时文件信息 }unionPlayBackInfo; }NET_DVR_MATRIX_DEC_REMOTE_PLAY_EX, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_EX; typedef struct tagNET_DVR_MATRIX_DEC_REMOTE_PLAY_V50 { DWORD dwSize; - DWORD dwDecChannel; //ͨ - BYTE byAddressType; //豸ַͣ0-IP1-DDNS2-URL - BYTE byChannelType; //ͨͣ0-ͨͨ1-ͨ2-ID - BYTE byStreamEncrypt; //Ƿܴ,0-֧,1-֧ + DWORD dwDecChannel; //解码通道号 + BYTE byAddressType; //设备地址类型,0-IP,1-DDNS,2-URL + BYTE byChannelType; //通道类型,0-普通通道,1-零通道,2-流ID + BYTE byStreamEncrypt; //是否进行码流加密处理,0-不支持,1-支持 BYTE byRes1[1]; - BYTE sUserName[NAME_LEN]; /* û */ - BYTE sPassword[PASSWD_LEN]; /* */ - DWORD dwChannel; /* 豸ͨ */ - BYTE byStreamId[STREAM_ID_LEN]; //ID,˲ͨΪIDʱЧ - DWORD dwPlayMode; /* 0ļ 1ʱ*/ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwChannel; /* 设备通道号 */ + BYTE byStreamId[STREAM_ID_LEN]; //流ID,此参数在通道类型为流ID时有效 + DWORD dwPlayMode; /* 0-按文件 1-按时间*/ union { BYTE byRes[200]; - NET_DVR_IP_ADDRESS struIpAddr; //IPַbyAddressTypeΪ0ʱЧ - NET_DVR_DDNS_ADDRESS struDdnsAddr; //DDNSַbyAddressTypeΪ1ʱЧ + NET_DVR_IP_ADDRESS struIpAddr; //IP地址,byAddressType为0时有效 + NET_DVR_DDNS_ADDRESS struDdnsAddr; //DDNS地址,byAddressType为1时有效 }unionAddr; union { BYTE byRes[128]; - NET_DVR_PLAY_BACK_BY_TIME struPlayBackByTime; //ʱطʱļϢ - BYTE sFileName[128]; //ļطʱļϢ + NET_DVR_PLAY_BACK_BY_TIME struPlayBackByTime; //按时间回放时文件信息 + BYTE sFileName[128]; //按文件名回放时文件信息 }unionPlayBackInfo; - NET_DVR_PU_STREAM_URL struURL; //ȡURLbyAddressTypeΪ2ʱЧ - BYTE sStreamPassword[STREAM_PASSWD_LEN]; //,Ϣ + NET_DVR_PU_STREAM_URL struURL; //取流URL,byAddressType为2时有效 + BYTE sStreamPassword[STREAM_PASSWD_LEN]; //码流加密密码,需敏感信息加密 BYTE byRes2[116]; }NET_DVR_MATRIX_DEC_REMOTE_PLAY_V50, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_V50; typedef struct tagNET_DVR_DISPLAY_EFFECT_CFG { DWORD dwSize; - NET_DVR_COLOR struColor; //ʾز/ + NET_DVR_COLOR struColor; //显示相关参数/ BYTE byRes[32]; }NET_DVR_DISPLAY_EFFECT_CFG,*LPNET_DVR_DISPLAY_EFFECT_CFG; -//ȡ״̬ +//获取干线状态 typedef struct tagNET_DVR_TRUNK_USE_STATE { DWORD dwSize; - DWORD dwTrunkID; //ID - WORD wReserveUserID; //ԤûID 1~256 0ʾͷԤ - BYTE byStatus; //1-У2-ռã3- */ + DWORD dwTrunkID; //干线ID + WORD wReserveUserID; //预留的用户ID: 1~256 ,0表示释放预留 + BYTE byStatus; //1-空闲,2-占用,3-复用 */ BYTE byRes1; - BYTE byUserId[256]; //±ʾûIDţԪصֵʾǷʹøߡ磺byUserID[0] ֵΪ1ʾûIDΪ0ûʹãbyUserID[0] ֵΪ0ʾûIDΪ0ûûʹ + BYTE byUserId[256]; //数组下标表示用户ID号,数组元素的值表示是否使用干线。如:byUserID[0] 的值为1,表示用户ID为0的用户正在使用,byUserID[0] 的值为0表示用户ID为0的用户没有使用这条干线 BYTE byRes2[64]; }NET_DVR_TRUNK_USE_STATE, *LPNET_DVR_TRUNK_USE_STATE; -//PTZƲ +//PTZ控制参数 typedef struct tagNET_DVR_PTZ_CTRL_INFO { DWORD dwSize; - DWORD dwCtrlDelayTime; //PTZƳʱ䣬ָPTZƺdwCtrlDelayTimeʱڣͬͼûЧλ + DWORD dwCtrlDelayTime; //PTZ控制持续时间,指PTZ控制后在dwCtrlDelayTime时间内,其他同级别或低级别用户对其操作无效。单位:秒 BYTE byRes[64]; }NET_DVR_PTZ_CTRL_INFO, *LPNET_DVR_PTZ_CTRL_INFO; -//ʾ· +//显示路径 #define MAX_MATRIX_CASCADE 32 typedef struct tagNET_DVR_MATRIX_ROUTE_INFO { @@ -34834,59 +34834,59 @@ typedef struct tagNET_DVR_MATRIX_ROUTE_INFO DWORD dwMonNo; DWORD dwSubWin; DWORD dwUserId; - DWORD dwTrunkId[MAX_MATRIX_CASCADE/*32*/];//trunkIdԱӦ132CAM˿ʼtrunkId[0]ʾһtrunkId[1]ʾڶ, trunkId[i] = 0 ʾ޸ - BYTE byRes[64]; /* Ԥ */ + DWORD dwTrunkId[MAX_MATRIX_CASCADE/*32*/];//trunkId成员对应级联级数从1到32,从CAM端开始,trunkId[0]表示第一级级联,trunkId[1]表示第二级级联, trunkId[i] = 0 表示无干线 + BYTE byRes[64]; /* 预留 */ }NET_DVR_MATRIX_ROUTE_INFO, *LPNET_DVR_MATRIX_ROUTE_INFO; -//ȡPTZ״̬ +//获取PTZ状态 typedef struct tagNET_DVR_PTZ_STATUS { DWORD dwSize; - DWORD dwUserID; //1~2560 ʾû - DWORD dwStatus; // PTZ״̬0-ֹͣ1- - DWORD dwRestTime; //ʣʱ + DWORD dwUserID; //1~256,0 表示无用户 + DWORD dwStatus; // PTZ控制状态0-停止、1-运行 + DWORD dwRestTime; //剩余时间 BYTE byRes[64]; }NET_DVR_PTZ_STATUS, *LPNET_DVR_PTZ_STATUS; typedef struct tagNET_DVR_SAFETYCABIN_WORK_MODE { DWORD dwSize; - BYTE byWorkMode; //ģʽ0-ų1-ų - BYTE byFaintToUnlock; //εһʱⲿԿ0-1- - BYTE byOvertimeToUnlock; //ʹóʱⲿťǷԿ0-1- + BYTE byWorkMode; //工作模式,0-无人门常开,1-无人门常锁 + BYTE byFaintToUnlock; //晕倒报警一定时间后外部可以开锁:0-否,1-是 + BYTE byOvertimeToUnlock; //使用超时后外部按钮是否可以开锁:0-否,1-是 BYTE byRes[13]; }NET_DVR_SAFETYCABIN_WORK_MODE,*LPNET_DVR_SAFETYCABIN_WORK_MODE; typedef struct tagNET_DVR_SAFETYCABIN_PERSON_SIGNAL_CFG { DWORD dwSize; - BYTE bySensorType; //ͣ0-ͣ1-Ļ - BYTE bySensitivity; //жȣΧ0-100% - BYTE byDevUseTimeout; //ʹóʱʱ䣬λ,Χ5-30Ĭϳʱ15min,ʱͨͨϴ + BYTE bySensorType; //传感器类型,0-红外对射型,1-幕帘传感器 + BYTE bySensitivity; //传感器敏感度,范围:0-100% + BYTE byDevUseTimeout; //防护舱使用超时时间,单位:分,范围:5-30,默认超时15min,超时后通过布防通道上传报警 BYTE byRes1; - WORD wCurtainDelayTime; //Ļ̽ʱʱ䣬λ룬Χ0-10 - WORD wCurtainResponseTime; //Ļ״̬仯Ӧʱ䣬λ룬Χ0-300 - WORD wFaintToEmergencyTime; //ε澯Чʱ䣬λ룬Χ10-300 - BYTE byFollowDetectorSensitivity; //βȣΧ0-100% - BYTE byManyPersonSensitivity; //˼ȣΧ0-100% - BYTE byRes2[28]; // + WORD wCurtainDelayTime; //幕帘传感器探测延时时间,单位:秒,范围:0-10 + WORD wCurtainResponseTime; //幕帘人状态变化控制器响应时间,单位:秒,范围:0-300 + WORD wFaintToEmergencyTime; //晕倒告警生效时间,单位:秒,范围:10-300 + BYTE byFollowDetectorSensitivity; //尾随检测灵敏度,范围:0-100% + BYTE byManyPersonSensitivity; //多人检测灵敏度,范围:0-100% + BYTE byRes2[28]; //保留 }NET_DVR_SAFETYCABIN_PERSON_SIGNAL_CFG,*LPNET_DVR_SAFETYCABIN_PERSON_SIGNAL_CFG; typedef struct tagNET_DVR_ETHERNET_IPV6_COND { DWORD dwSize; - BYTE byMACAddr[MACADDR_LEN]; //ַ - BYTE byRes[64]; // + BYTE byMACAddr[MACADDR_LEN]; //网卡的物理地址 + BYTE byRes[64]; //保留 }NET_DVR_ETHERNET_IPV6_COND,*LPNET_DVR_ETHERNET_IPV6_COND; typedef struct tagNET_DVR_ETHERNET_IPV6_CFG { DWORD dwSize; - BYTE byState; //IPv6״̬0-·ɷ䣬1-Զ + BYTE byState; //IPv6状态,0-路由分配,1-自动设置 BYTE byRes1[3]; - BYTE byIPv6[MAX_IPV6_LEN]; //IPv6ַ - BYTE byRes[64]; // + BYTE byIPv6[MAX_IPV6_LEN]; //IPv6地址 + BYTE byRes[64]; //保留 }NET_DVR_ETHERNET_IPV6_CFG,*LPNET_DVR_ETHERNET_IPV6_CFG; typedef struct @@ -34901,363 +34901,363 @@ typedef struct typedef struct { - NET_DVR_DAYTIME struStartTime; //ʼʱ - NET_DVR_DAYTIME struStopTime; //ʱ + NET_DVR_DAYTIME struStartTime; //开始时间 + NET_DVR_DAYTIME struStopTime; //结束时间 }NET_DVR_SCHEDULE_DAYTIME, *LPNET_DVR_SCHEDULE_DAYTIME; typedef struct { - BYTE byObjectSize;//ռȲ(0~100) - BYTE byMotionSensitive; /*ƶ, 0 - 5,ԽԽ,0xffر*/ + BYTE byObjectSize;//占比参数(0~100) + BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭*/ BYTE byRes[6]; }NET_DVR_DNMODE, *LPNET_DVR_DNMODE; typedef struct { - BYTE byAreaNo;//(IPC- 1~8) + BYTE byAreaNo;//区域编号(IPC- 1~8) BYTE byRes[3]; - NET_VCA_RECT struRect;//Ϣ() size = 16; - NET_DVR_DNMODE struDayNightDisable;//رģʽ - NET_DVR_DNMODE struDayModeParam;//ģʽ - NET_DVR_DNMODE struNightModeParam;//ҹģʽ + NET_VCA_RECT struRect;//单个区域的坐标信息(矩形) size = 16; + NET_DVR_DNMODE struDayNightDisable;//关闭模式 + NET_DVR_DNMODE struDayModeParam;//白天模式 + NET_DVR_DNMODE struNightModeParam;//夜晚模式 BYTE byRes1[8]; }NET_DVR_MOTION_MULTI_AREAPARAM, *LPNET_DVR_MOTION_MULTI_AREAPARAM; typedef struct { - BYTE byDayNightCtrl;//ҹ 0~ر,1~Զл,2~ʱл(ĬϹر) - BYTE byAllMotionSensitive; /*ƶ, 0 - 5,ԽԽ,0xffرգȫȷΧ*/ + BYTE byDayNightCtrl;//日夜控制 0~关闭,1~自动切换,2~定时切换(默认关闭) + BYTE byAllMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭,全部区域的灵敏度范围*/ BYTE byRes[2];// - NET_DVR_SCHEDULE_DAYTIME struScheduleTime;//лʱ 16 - NET_DVR_MOTION_MULTI_AREAPARAM struMotionMultiAreaParam[MAX_MULTI_AREA_NUM];//֧24 + NET_DVR_SCHEDULE_DAYTIME struScheduleTime;//切换时间 16 + NET_DVR_MOTION_MULTI_AREAPARAM struMotionMultiAreaParam[MAX_MULTI_AREA_NUM];//最大支持24个区域 BYTE byRes1[60]; }NET_DVR_MOTION_MULTI_AREA,*LPNET_DVR_MOTION_MULTI_AREA; //1328 typedef struct { - BYTE byMotionScope[64][96]; /*,0-96λ,ʾ64,96*64С,ĿǰЧ22*18,Ϊ1ʾƶ,0-ʾ*/ - BYTE byMotionSensitive; /*ƶ, 0 - 5,ԽԽ,0xffر*/ + BYTE byMotionScope[64][96]; /*侦测区域,0-96位,表示64行,共有96*64个小宏块,目前有效的是22*18,为1表示是移动侦测区域,0-表示不是*/ + BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭*/ BYTE byRes[3]; }NET_DVR_MOTION_SINGLE_AREA, *LPNET_DVR_MOTION_SINGLE_AREA; typedef struct { - NET_DVR_MOTION_SINGLE_AREA struMotionSingleArea; //ͨģʽµĵ - NET_DVR_MOTION_MULTI_AREA struMotionMultiArea; //רģʽµĶ + NET_DVR_MOTION_SINGLE_AREA struMotionSingleArea; //普通模式下的单区域设 + NET_DVR_MOTION_MULTI_AREA struMotionMultiArea; //专家模式下的多区域设置 }NET_DVR_MOTION_MODE_PARAM, *LPNET_DVR_MOTION_MODE_PARAM; typedef struct { - NET_DVR_MOTION_MODE_PARAM struMotionMode; //(5.1.0) - BYTE byEnableHandleMotion; /* Ƿƶ 0 1*/ - BYTE byEnableDisplay; /*ƶʾ0-1-*/ - BYTE byConfigurationMode; //0~ͨ,1~ר(5.1.0) - BYTE byKeyingEnable; //üƶ 0-ã1- - /* 쳣ʽ */ - DWORD dwHandleType; //쳣,쳣ʽ"" - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - /*0x1000: ץͼϴ*/ - DWORD dwMaxRelAlarmOutChanNum ; //ıֻ֧ͨ - DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //ʵʴıţֵʾ,ýУ±0 - dwRelAlarmOut -1Чм0xffffffff,Ч - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ*/ - /*¼ͨ*/ - DWORD dwMaxRecordChanNum; //豸ֵ֧¼ͨ-ֻ - DWORD dwRelRecordChan[MAX_CHANNUM_V40]; /* ʵʴ¼ֵͨʾ,ýУ±0 - dwRelRecordChan -1Чм0xffffffff,Ч*/ - BYTE byDiscardFalseAlarm; //ȥ 0-Ч1-ã2- - BYTE byRes[127]; //ֽ + NET_DVR_MOTION_MODE_PARAM struMotionMode; //(5.1.0新增) + BYTE byEnableHandleMotion; /* 是否处理移动侦测 0-否 1-是*/ + BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/ + BYTE byConfigurationMode; //0~普通,1~专家(5.1.0新增) + BYTE byKeyingEnable; //启用键控移动侦测 0-不启用,1-启用 + /* 异常处理方式 */ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x1000: 抓图上传到云*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //实际触发的报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + /*触发的录像通道*/ + DWORD dwMaxRecordChanNum; //设备支持的最大关联录像通道数-只读 + DWORD dwRelRecordChan[MAX_CHANNUM_V40]; /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - dwRelRecordChan -1有效,如果中间遇到0xffffffff,则后续无效*/ + BYTE byDiscardFalseAlarm; //启用去误报 0-无效,1-不启用,2-启用 + BYTE byRes[127]; //保留字节 }NET_DVR_MOTION_V40,*LPNET_DVR_MOTION_V40; typedef struct { - DWORD dwEnableHideAlarm; /* Ƿڵ0-1-ȣ2-ȣ3-*/ - WORD wHideAlarmAreaTopLeftX; /* ڵx */ - WORD wHideAlarmAreaTopLeftY; /* ڵy */ - WORD wHideAlarmAreaWidth; /* ڵĿ */ - WORD wHideAlarmAreaHeight; /*ڵĸ*/ - /* źŶʧ */ - DWORD dwHandleType; //쳣,쳣ʽ"" - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - /*0x1000:ץͼϴ*/ - DWORD dwMaxRelAlarmOutChanNum ; //ıֻ֧ͨ - DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; /*ţֵʾ,ýУ±0 - dwRelAlarmOut -1Чм0xffffffff,Ч*/ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ*/ - BYTE byRes[64]; // -}NET_DVR_HIDEALARM_V40,*LPNET_DVR_HIDEALARM_V40; //ڵ + DWORD dwEnableHideAlarm; /* 是否启动遮挡报警,0-否,1-低灵敏度,2-中灵敏度,3-高灵敏度*/ + WORD wHideAlarmAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAlarmAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAlarmAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAlarmAreaHeight; /*遮挡区域的高*/ + /* 信号丢失触发报警输出 */ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x1000:抓图上传到云*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; /*触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效*/ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + BYTE byRes[64]; //保留 +}NET_DVR_HIDEALARM_V40,*LPNET_DVR_HIDEALARM_V40; //遮挡报警 typedef struct { - DWORD dwEnableVILostAlarm; /* ǷźŶʧ ,0-,1-*/ - /* źŶʧ */ - DWORD dwHandleType; //쳣,쳣ʽ"" - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - /*0x1000:ץͼϴ*/ - DWORD dwMaxRelAlarmOutChanNum ; //ıֻ֧ͨ - DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; /*ţֵʾ,ýУ±0 - dwRelAlarmOut -1Чм0xffffffff,Ч*/ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ*/ - BYTE byVILostAlarmThreshold; /*źŶʧֵֵֵΪźŶʧȡֵ0-99*/ - BYTE byRes[63]; // -}NET_DVR_VILOST_V40,*LPNET_DVR_VILOST_V40; //źŶʧ + DWORD dwEnableVILostAlarm; /* 是否启动信号丢失报警 ,0-否,1-是*/ + /* 信号丢失触发报警输出 */ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x1000:抓图上传到云*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; /*触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效*/ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + BYTE byVILostAlarmThreshold; /*信号丢失报警阈值,当值低于阈值,认为信号丢失,取值0-99*/ + BYTE byRes[63]; //保留 +}NET_DVR_VILOST_V40,*LPNET_DVR_VILOST_V40; //信号丢失报警 typedef struct { - NET_DVR_COLOR struColor[MAX_TIMESEGMENT_V30];/*ͼ(һЧ)*/ - NET_DVR_SCHEDTIME struHandleTime[MAX_TIMESEGMENT_V30];/*ʱ()*/ + NET_DVR_COLOR struColor[MAX_TIMESEGMENT_V30];/*图象参数(第一个有效,其他三个保留)*/ + NET_DVR_SCHEDTIME struHandleTime[MAX_TIMESEGMENT_V30];/*处理时间段(保留)*/ }NET_DVR_VICOLOR, *LPNET_DVR_VICOLOR; typedef struct { DWORD dwSize; BYTE sChanName[NAME_LEN]; - DWORD dwVideoFormat; /* ֻ Ƶʽ 1-NTSC 2-PAL */ - NET_DVR_VICOLOR struViColor;// ͼʱ - //ʾͨ - DWORD dwShowChanName; // ԤͼǷʾͨ,0-ʾ,1-ʾ - WORD wShowNameTopLeftX; /* ͨʾλõx */ - WORD wShowNameTopLeftY; /* ͨʾλõy */ - //˽ڵ - DWORD dwEnableHide; /* Ƿڵ ,0-,1-*/ + DWORD dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL */ + NET_DVR_VICOLOR struViColor;// 图像参数按时间段设置 + //显示通道名 + DWORD dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示 + WORD wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */ + WORD wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */ + //隐私遮挡 + DWORD dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/ NET_DVR_SHELTER struShelter[MAX_SHELTERNUM]; //OSD - DWORD dwShowOsd;// ԤͼǷʾOSD,0-ʾ,1-ʾ - WORD wOSDTopLeftX; /* OSDx */ - WORD wOSDTopLeftY; /* OSDy */ - BYTE byOSDType; /* OSD(Ҫոʽ) */ - /* 0: XXXX-XX-XX */ - /* 1: XX-XX-XXXX */ - /* 2: XXXXXXXX */ - /* 3: XXXXXXXX */ - /* 4: XX-XX-XXXX */ - /* 5: XXXXXXXX */ - /*6: xx/xx/xxxx(//) */ - /*7: xxxx/xx/xx(//) */ - /*8: xx/xx/xxxx(//)*/ - BYTE byDispWeek; /* Ƿʾ */ - BYTE byOSDAttrib; /* OSD:͸˸ */ - /* 0: ʾOSD */ - /* 1: ͸˸ */ - /* 2: ͸˸ */ - /* 3: ͸˸ */ - /* 4: ͸˸ */ - BYTE byHourOSDType; /* OSDСʱ:0-24Сʱ,1-12Сʱ */ - BYTE byFontSize; //16*16()/8*16(Ӣ)1-32*32()/16*32(Ӣ)2-64*64()/32*64(Ӣ) 3-48*48()/24*48(Ӣ) 4-24*24()/12*24(Ӣ) 5-96*96()/48*96(Ӣ) 6-128*128()/64*128(Ӣ) 7-80*80()/40*80(Ӣ) 8-112*112()/56*112(Ӣ) 0xff-Ӧ(adaptive) - BYTE byOSDColorType; //0-Ĭϣڰף1-Զ壻2- - /*뷽ʽѡģʽʱԷֱ½ǡ½ַӡ - ½ - ֧6ַӣͨNET_DVR_SET_SHOWSTRING_V30/ NET_DVR_GET_SHOWSTRING_V30ַӽӿڣӦNET_DVR_SHOWSTRINGINFOṹеĵ05±ֵַķʽΪµϵķʽ - ½ - ֧2ַӣͨNET_DVR_SET_SHOWSTRING_V3/ NET_DVR_GET_SHOWSTRING_V30ַӽӿڣӦNET_DVR_SHOWSTRINGINFOṹеĵ6͵7±ֵַķʽΪµϵķʽ + DWORD dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示 + WORD wOSDTopLeftX; /* OSD的x坐标 */ + WORD wOSDTopLeftY; /* 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年 */ + /*6: xx/xx/xxxx(月/日/年) */ + /*7: xxxx/xx/xx(年/月/日) */ + /*8: xx/xx/xxxx(日/月/年)*/ + BYTE byDispWeek; /* 是否显示星期 */ + BYTE byOSDAttrib; /* OSD属性:透明,闪烁 */ + /* 0: 不显示OSD */ + /* 1: 透明,闪烁 */ + /* 2: 透明,不闪烁 */ + /* 3: 不透明,闪烁 */ + /* 4: 不透明,不闪烁 */ + BYTE byHourOSDType; /* OSD小时制:0-24小时制,1-12小时制 */ + BYTE byFontSize; //16*16(中)/8*16(英),1-32*32(中)/16*32(英),2-64*64(中)/32*64(英) 3-48*48(中)/24*48(英) 4-24*24(中)/12*24(英) 5-96*96(中)/48*96(英) 6-128*128(中)/64*128(英) 7-80*80(中)/40*80(英) 8-112*112(中)/56*112(英) 0xff-自适应(adaptive) + BYTE byOSDColorType; //0-默认(黑白);1-自定义;2-勾边 + /*当对齐方式选择国标模式时,可以分别对右下角、左下角两个区域做字符叠加。 + 右下角区域: + 共支持6行字符叠加,可以通过NET_DVR_SET_SHOWSTRING_V30/ NET_DVR_GET_SHOWSTRING_V30字符叠加接口,对应NET_DVR_SHOWSTRINGINFO结构体数组中的第0至第5个下标的值。叠加字符的方式为从下到上的方式。 + 左下角区域: + 共支持2行字符叠加,可以通过NET_DVR_SET_SHOWSTRING_V3/ NET_DVR_GET_SHOWSTRING_V30字符叠加接口,对应NET_DVR_SHOWSTRINGINFO结构体数组中的第6和第7个下标的值。叠加字符的方式为从下到上的方式。 */ - BYTE byAlignment;//뷽ʽ 0-Ӧ1-Ҷ, 2-룬3-ģʽ4-ȫҶ(ַʱԼOSDַ)5-ȫ(ַʱԼOSDַ) - BYTE byOSDMilliSecondEnable;//Ƶʱֺ֧룻0~, 1- - NET_DVR_VILOST_V40 struVILost; //ƵźŶʧ֧飩 - NET_DVR_VILOST_V40 struAULost; /*ƵźŶʧ֧飩*/ - NET_DVR_MOTION_V40 struMotion; //ƶⱨ֧飩 - NET_DVR_HIDEALARM_V40 struHideAlarm; //ڵ֧飩 - NET_DVR_RGB_COLOR struOsdColor;//OSDɫ - DWORD dwBoundary; //ֵ߽룬ҶԼģʽıֵ߽0-ʾĬֵλ;ڹģʽ£λ޸ΪַΧǣ0,1,2 - NET_DVR_RGB_COLOR struOsdBkColor; //ԶOSDɫ - BYTE byOSDBkColorMode; //OSDɫģʽ0-Ĭϣ1-ԶOSDɫ - BYTE byUpDownBoundary; //Сֵ߽ѡλΪַΧǣ0,1,2,ģʽЧbyAlignment=3ֶЧͨdwBoundaryб߽ã.byAlignment3£ byUpDownBoundary/byLeftRightBoundaryóɹdwBoundaryֵЧ - BYTE byLeftRightBoundary; //Сֵ߽ѡλΪַΧǣ0,1,2, ģʽЧbyAlignment=3ֶЧͨdwBoundaryб߽ã.byAlignment3£ byUpDownBoundary/byLeftRightBoundaryóɹdwBoundaryֵЧ - BYTE byAngleEnabled;//OSDǷӸϢ,0~, 1- - WORD wTiltAngleTopLeftX; /* Ϣʾλõx */ - WORD wTiltAngleTopLeftY; /* Ϣʾλõy */ + BYTE byAlignment;//对齐方式 0-自适应,1-右对齐, 2-左对齐,3-国标模式,4-全部右对齐(包含叠加字符、时间以及标题等所有OSD字符),5-全部左对齐(包含叠加字符、时间以及标题等所有OSD字符) + BYTE byOSDMilliSecondEnable;//视频叠加时间支持毫秒;0~不叠加, 1-叠加 + NET_DVR_VILOST_V40 struVILost; //视频信号丢失报警(支持组) + NET_DVR_VILOST_V40 struAULost; /*音频信号丢失报警(支持组)*/ + NET_DVR_MOTION_V40 struMotion; //移动侦测报警(支持组) + NET_DVR_HIDEALARM_V40 struHideAlarm; //遮挡报警(支持组) + NET_DVR_RGB_COLOR struOsdColor;//OSD颜色 + DWORD dwBoundary; //边界值,左对齐,右对齐以及国标模式的边界值,0-表示默认值,单位:像素;在国标模式下,单位修改为字符个数(范围是,0,1,2) + NET_DVR_RGB_COLOR struOsdBkColor; //自定义OSD背景色 + BYTE byOSDBkColorMode; //OSD背景色模式,0-默认,1-自定义OSD背景色 + BYTE byUpDownBoundary; //上下最小边界值选项,单位为字符个数(范围是,0,1,2),国标模式下无效。byAlignment=3该字段无效,通过dwBoundary进行边界配置,.byAlignment不等于3的情况下, byUpDownBoundary/byLeftRightBoundary配置成功后,dwBoundary值将不生效 + BYTE byLeftRightBoundary; //左右最小边界值选项,单位为字符个数(范围是,0,1,2), 国标模式下无效。byAlignment=3该字段无效,通过dwBoundary进行边界配置,.byAlignment不等于3的情况下, byUpDownBoundary/byLeftRightBoundary配置成功后,dwBoundary值将不生效 + BYTE byAngleEnabled;//OSD是否叠加俯仰角信息,0~不叠加, 1-叠加 + WORD wTiltAngleTopLeftX; /* 俯仰角信息显示位置的x坐标 */ + WORD wTiltAngleTopLeftY; /* 俯仰角信息显示位置的y坐标 */ BYTE byRes[108]; }NET_DVR_PICCFG_V40,*LPNET_DVR_PICCFG_V40; typedef struct // { DWORD dwSize; - BYTE byWorkType;// 0-Ӧ, 1-ʱģʽ + BYTE byWorkType;// 0-自适应, 1-定时模式 BYTE byRes[3]; - //ʱģʽ - NET_DVR_SCHEDULE_DAYTIME struDayNightScheduleTime;//ҹʱлģʽ(ʱ) - NET_DVR_CAMERAPARAMCFG_EX struSelfAdaptiveParam; //Ӧ - NET_DVR_CAMERAPARAMCFG_EX struDayIspAdvanceParam;// - NET_DVR_CAMERAPARAMCFG_EX struNightIspAdvanceParam;//ҹ + //定时模式参数 + NET_DVR_SCHEDULE_DAYTIME struDayNightScheduleTime;//日夜定时切换模式(白天时间) + NET_DVR_CAMERAPARAMCFG_EX struSelfAdaptiveParam; //自适应参数 + NET_DVR_CAMERAPARAMCFG_EX struDayIspAdvanceParam;//白天参数 + NET_DVR_CAMERAPARAMCFG_EX struNightIspAdvanceParam;//夜晚参数 BYTE byRes1[512]; }NET_DVR_ISP_CAMERAPARAMCFG,*LPNET_DVR_ISP_CAMERAPARAMCFG; typedef struct { DWORD dwSize; - BYTE byIrLampServer;// 0ã1 - BYTE bytelnetServer;//telnet 0ã1 - BYTE byABFServer;//ABF 0ã1 - BYTE byEnableLEDStatus;//״ָ̬ʾƿ 0ã1 - BYTE byEnableAutoDefog;//Զ 0ã1 - BYTE byEnableSupplementLight;//ƿ0-ã1- - BYTE byEnableDeicing;// 0-رգ1- - BYTE byEnableVisibleMovementPower;// ɼоԴ 0-رգ1- - BYTE byEnableThermalMovementPower;// ȳоԴ 0-رգ1- - BYTE byEnablePtzPower;// ̨Դ 0-رգ1- - BYTE byPowerSavingControl;// ͹IJ 0- 1-ģʽ 2-͹ģʽ ͹ģʽ ɼоԴȳоԴ̨ԴЧ - BYTE byCaptureWithSupplimentLightEnabled;//ץIJʹ 0-رգ1- + BYTE byIrLampServer;//红外灯设置 0~禁用,1~启用 + BYTE bytelnetServer;//telnet设置 0~禁用,1~启用 + BYTE byABFServer;//ABF设置 0~启用,1~禁用 + BYTE byEnableLEDStatus;//状态指示灯控制 0~禁用,1~启用 + BYTE byEnableAutoDefog;//自动除雾控制 0~启用,1~禁用 + BYTE byEnableSupplementLight;//补光灯控制0-启用,1-禁用 + BYTE byEnableDeicing;//除冰功能 0-关闭,1-开启 + BYTE byEnableVisibleMovementPower;// 可见光机芯电源开关 0-关闭,1-开启 + BYTE byEnableThermalMovementPower;// 热成像机芯电源开关 0-关闭,1-开启 + BYTE byEnablePtzPower;// 云台电源开关 0-关闭,1-开启 + BYTE byPowerSavingControl;// 低功耗策略 0-保留 1-休眠模式 2-低功耗模式 低功耗模式下 可见光机芯电源、热成像机芯电源、云台电源控制生效 + BYTE byCaptureWithSupplimentLightEnabled;//启用抓拍补光使能 0-关闭,1-开启 BYTE byRes[244]; }NET_DVR_DEVSERVER_CFG,*LPNET_DVR_DEVSERVER_CFG; typedef struct tagNET_DVR_GBT28181_ACCESS_CFG { DWORD dwSize; - BYTE byEnable;//28181Эʹ 0-ر 1- - BYTE byTransProtocol;//Э:0-UDP1-TCPĬ0-UDP - WORD wLocalSipPort;//1024-65535(IPC豸) - char szServerID[MAX_SERVERID_LEN];//ID64ַֽ - char szServerDomain[MAX_SIPSERVER_ADDRESS_LEN] ;// - char szSipServerAddress[MAX_SIPSERVER_ADDRESS_LEN] ;// SIPַ֧IPַ - WORD wServerSipPort;//SIP˿ڣ1024-65535 - BYTE byProtocolVersion;//Э汾 0-GB/T28181-2011(֧UDP),1-GB/T28181-2015(֧TCP,UDP),2-GB/T28181-2016 - BYTE byTCPConnectMod; //TCPģʽʹTCPЭʱЧ0-Ч1-ģʽ2-ģʽ - char szSipUserName[MAX_SERVERNAME_LEN];//SIPûƣ64ַֽ(SIPնIPCʱʹ) - char szSipAuthenticateID[MAX_AUTHENTICATEID_LEN];//SIPû֤ID64ַֽ - char szSipAuthenticatePasswd[MAX_AUTHENTICATEPASSWD_LEN];//SIPû֤룺32ַֽ(IPC豸עᵽSIPʱʹ) - DWORD dwRegisterValid;//עЧڣλ룬Ĭ3600 - BYTE byHeartbeatInterval;//λ룬Ĭ10룻 - BYTE byMaxHeartbeatTimeOut;//ʱĬ3Σ - BYTE byStreamType;// ȡ0123 - BYTE byDeviceStatus; //豸Ƿ״̬0-1-ߣ2- - DWORD dwRegisterInterval;//ע:עʧܺٴעʱ,Χ60-600sĬ60s - DWORD dwAutoAllocChannelID ; //ǷԶͨID,λʾ0Ϊֶã1ΪԶ䣬bit1-ԶͨID,bit2-Զ䱨ͨ,bit3-ԶͨID - char szDeviceDomain[MAX_SIPSERVER_ADDRESS_LEN] ;// 豸 + BYTE byEnable;//28181协议使能 0-关闭 1-开启 + BYTE byTransProtocol;//传输协议:0-UDP、1-TCP、默认0-UDP + WORD wLocalSipPort;//1024-65535(IPC设备端) + char szServerID[MAX_SERVERID_LEN];//服务器ID:64字节字符串,仅限数字 + char szServerDomain[MAX_SIPSERVER_ADDRESS_LEN] ;// 服务器域 + char szSipServerAddress[MAX_SIPSERVER_ADDRESS_LEN] ;// SIP服务器地址支持域名和IP地址 + WORD wServerSipPort;//服务器SIP端口:1024-65535 + BYTE byProtocolVersion;//协议版本 0-GB/T28181-2011(仅支持UDP),1-GB/T28181-2015(支持TCP,UDP),2-GB/T28181-2016 + BYTE byTCPConnectMod; //TCP连接模式,使用TCP传输协议时有效,0-无效,1-主动模式,2-被动模式 + char szSipUserName[MAX_SERVERNAME_LEN];//SIP用户名称:64字节字符串(第三方SIP终端请求IPC服务时使用) + char szSipAuthenticateID[MAX_AUTHENTICATEID_LEN];//SIP用户认证ID:64字节字符串 + char szSipAuthenticatePasswd[MAX_AUTHENTICATEPASSWD_LEN];//SIP用户认证密码:32字节字符串(IPC设备注册到SIP服务器时使用) + DWORD dwRegisterValid;//注册有效期:单位秒,默认3600; + BYTE byHeartbeatInterval;//心跳间隔:单位秒,默认10秒; + BYTE byMaxHeartbeatTimeOut;//最大心跳超时次数:默认3次; + BYTE byStreamType;// 取流类型0~主码流,1~子码流,2~3码流 + BYTE byDeviceStatus; //设备是否在线状态,0-保留,1-在线,2-离线 + DWORD dwRegisterInterval;//注册间隔:注册失败后再次注册的时间间隔,范围60-600s,默认60s + DWORD dwAutoAllocChannelID ; //是否自动分配通道ID,按位表示,0为手动配置,1为自动分配,bit1-自动分配编码通道ID,bit2-自动分配报警输入通道,bit3-自动分配解码通道ID + char szDeviceDomain[MAX_SIPSERVER_ADDRESS_LEN] ;// 设备域 BYTE byRes4[116]; }NET_DVR_GBT28181_ACCESS_CFG,*LPNET_DVR_GBT28181_ACCESS_CFG; -//GBT28181Э豸ͨ +//GBT28181协议的设备编码通道配置 typedef struct tagNET_DVR_GBT28181_CHANINFO_CFG { DWORD dwSize; - char szVideoChannelNumID[MAX_COMPRESSIONID_LEN];//豸ƵͨID64ַֽ + char szVideoChannelNumID[MAX_COMPRESSIONID_LEN];//设备视频通道编码ID:64字节字符串,仅限数字 BYTE byRes[256]; }NET_DVR_GBT28181_CHANINFO_CFG,*LPNET_DVR_GBT28181_CHANINFO_CFG; -//GBT28181Эıͨ ṹ +//GBT28181协议的报警输入通道配置 条件结构 typedef struct tagNET_DVR_ALARMIN_INFO { NET_DVR_STREAM_INFO struStreamInfo; - DWORD dwAlarmInChannel;//ͨ - BYTE byRes[32]; // + DWORD dwAlarmInChannel;//报警输入通道号 + BYTE byRes[32]; //保留 }NET_DVR_ALARMIN_INFO, *LPNET_DVR_ALARMIN_INFO; -//GBT28181Эıͨ ýṹ +//GBT28181协议的报警输入通道配置 配置结构 typedef struct tagNET_DVR_GBT28181_ALARMINCFG { DWORD dwSize; - char szAlarmInNumID[MAX_COMPRESSIONID_LEN];//豸IDÿһ·벻ͬ20ַֽ + char szAlarmInNumID[MAX_COMPRESSIONID_LEN];//设备报警输入编码ID(每一路报警输入不同):20字节字符串,仅限数字 BYTE byRes[256]; }NET_DVR_GBT28181_ALARMINCFG,*LPNET_DVR_GBT28181_ALARMINCFG; typedef struct tagNET_DVR_CAMERA_SETUPCFG { DWORD dwSize; - WORD wSetupHeight; //߶[0,20]λ - BYTE byLensType; //ͷͣ0-δ֪,1-8mm,2-12mm,3-16mm,4-25mm,5-35mm,6-50mm,7-4mm,8-6mm - BYTE bySetupHeightUnit;// ߶ȵλ0M,1~CM - DWORD dwSceneDis; //ͼ±Եλ֮ˮƽ룬λ - float fPitchAngle;//Ƕ[-180, 180], - float fInclineAngle;//бǶ[-180,180] - float fRotateAngle;//תǶ[-180,180] - WORD wVideoDetCoefficient; //Ƶϵ[0,300](3.6) - BYTE byErectMethod; //跽ʽ0-װ1-װ(3.6) - BYTE byCameraViewAngle;//װҰǶ(0-ֱ1-бĬ0-ֱ) - DWORD dwHorizontalDistance;//ˮƽ룺Χ1-1000Ĭ30λcmעǶΪбʱЧ - BYTE byDetailLensType;//Χ1-100Ĭ28λ0.1mm + WORD wSetupHeight; //架设高度[0,20],单位:米 + BYTE byLensType; //镜头焦距类型,0-未知,1-8mm,2-12mm,3-16mm,4-25mm,5-35mm,6-50mm,7-4mm,8-6mm + BYTE bySetupHeightUnit;// 架设高度单位0~M,1~CM + DWORD dwSceneDis; //图像下边缘位置与相机之间的水平距离,单位:厘米 + float fPitchAngle;//相机俯仰角度[-180°, 180°], + float fInclineAngle;//相机倾斜角度[-180°,180°] + float fRotateAngle;//相机旋转角度[-180°,180°] + WORD wVideoDetCoefficient; //视频测试系数[0,300](3.6新增) + BYTE byErectMethod; //架设方式0-正装,1-侧装(3.6新增) + BYTE byCameraViewAngle;//摄像机安装视野角度(0-垂直,1-倾斜,默认0-垂直) + DWORD dwHorizontalDistance;//摄像机与出入口水平距离:范围1-1000,默认30,单位cm,注意摄像机角度为倾斜时该项有效 + BYTE byDetailLensType;//范围1-100,默认28,单位0.1mm BYTE byRes[3]; - float fHorFieldAngle; //ˮƽӳǽǶ[0, 360]ץĻ - float fVerFieldAngle; //ֱӳǽǶ[0, 360]ץĻ,ӥ۷Χ-90-90 - float fLableSetupHeight; //ǩĸ߶[0,100]λ - float fMaxViewRadius;//Ӱ뾶,0~10000.00ףĬ5000. + float fHorFieldAngle; //相机水平视场角角度[0°, 360°](抓拍机) + float fVerFieldAngle; //相机垂直视场角角度[0°, 360°](抓拍机),鹰眼范围-90°-90° + float fLableSetupHeight; //标签到架设相机的高度[0,100],单位:米 + float fMaxViewRadius;//最大可视半径,0~10000.00米,默认5000米. BYTE byRes1[16]; }NET_DVR_CAMERA_SETUPCFG, *LPNET_DVR_CAMERA_SETUPCFG; -//ֹڶβṹ +//起止日期段参数结构体 typedef struct tagNET_DVR_SCHEDDATE { - BYTE byStartMonth; //ʼ£ - BYTE byStartDay; //ʼգ - BYTE byStopMonth; //£ - BYTE byStopDay; //գ + BYTE byStartMonth; //起始(月) + BYTE byStartDay; //起始(日) + BYTE byStopMonth; //结束(月) + BYTE byStopDay; //结束(日) }NET_DVR_SCHEDDATE,*LPNET_DVR_SCHEDDATE; -//ʱ +//时控输出参数 typedef struct tagNET_DVR_OUTPUT_SCHEDULE { - NET_DVR_SCHEDTIME struTime; //ʱ - BYTE byState; //0Cر, 1C - BYTE byRes[11]; // + NET_DVR_SCHEDTIME struTime; //时间段 + BYTE byState; //0–关闭, 1–开启 + BYTE byRes[11]; //保留 } NET_DVR_OUTPUT_SCHEDULE ,*LPNET_DVR_OUTPUT_SCHEDULE; -//ʱ +//单条时控输出规则参数 typedef struct tagNET_DVR_ONE_OUTPUT_SCHEDULE_RULE { - BYTE byEnable; //Ƿù,0-,1- - BYTE byRes1[3]; // - NET_DVR_SCHEDDATE struDate; // - NET_DVR_OUTPUT_SCHEDULE struOutputSchedule[MAX_TIMESEGMENT_V30]; //֧8ʱεʱ - BYTE byRes2[16]; // + BYTE byEnable; //是否启用规则,0-否,1-是 + BYTE byRes1[3]; //保留 + NET_DVR_SCHEDDATE struDate; //日期区段 + NET_DVR_OUTPUT_SCHEDULE struOutputSchedule[MAX_TIMESEGMENT_V30]; //最多支持8个时间段的时控输出 + BYTE byRes2[16]; //保留 }NET_DVR_ONE_OUTPUT_SCHEDULE_RULE,*LPNET_DVR_ONE_OUTPUT_SCHEDULE_RULE; -//ʱ +//时控输出规则参数 typedef struct tagNET_DVR_OUTPUT_SCHEDULE_RULECFG { - DWORD dwSize; //ṹС - NET_DVR_ONE_OUTPUT_SCHEDULE_RULE struOutputRule[MAX_RULE_NUM]; //֧8εĹ - BYTE byRes[64]; // + DWORD dwSize; //结构体大小 + NET_DVR_ONE_OUTPUT_SCHEDULE_RULE struOutputRule[MAX_RULE_NUM]; //最多支持8个日期区段的规则配置 + BYTE byRes[64]; //保留 }NET_DVR_OUTPUT_SCHEDULE_RULECFG,*LPNET_DVR_OUTPUT_SCHEDULE_RULECFG; -//ͨͳƱ +//交通统计报警参数 typedef struct tagNET_DVR_TPS_ALARMCFG { DWORD dwSize; - BYTE byEnable; //ǷýͨͳƱϴ + BYTE byEnable; //是否启用交通统计报警上传 BYTE byRes1[3]; // - DWORD dwInterval;//ͳƼʱ䣨λӣ + DWORD dwInterval;//统计间隔时间(单位:分钟) BYTE byRes[248]; }NET_DVR_TPS_ALARMCFG, *LPNET_DVR_TPS_ALARMCFG; typedef struct tagNET_DVR_DOWNLOAD_ALARM_RECORD_COND { DWORD dwSize; - WORD wAlarmRecordID; //¼ID(ڲѯ¼񣬽byResultTypeΪ2ʱЧ) + WORD wAlarmRecordID; //报警录像ID(用于查询录像,仅当byResultType为2时有效) BYTE byRes[130]; }NET_DVR_DOWNLOAD_ALARM_RECORD_COND, *LPNET_DVR_DOWNLOAD_ALARM_RECORD_COND; typedef struct tagNET_DVR_CABINET_AlARM_PARAMCFG { char sCabinetName[NAME_LEN]; - BYTE byAssociateIO;//1-40xff 1-4ʾIOͨţ0xffʾ - BYTE byCabinetState;//0~͵ƽ,1~ߵƽ - BYTE byAlarmIntervalTime;//ȡֵΧ1-60λ + BYTE byAssociateIO;//1-4,0xff, 其中1-4表示具体的IO通道号,0xff表示不启用 + BYTE byCabinetState;//0~低电平,1~高电平 + BYTE byAlarmIntervalTime;//取值范围1-60,单位:秒 BYTE byRes1[25]; }NET_DVR_CABINET_AlARM_PARAMCFG, *LPNET_DVR_CABINET_AlARM_PARAMCFG; typedef struct tagNET_DVR_CABINET_CFG { DWORD dwSize; - BYTE byEnable;//0~ã1 + BYTE byEnable;//0~不启用,1~启用 BYTE byRes[3]; NET_DVR_CABINET_AlARM_PARAMCFG struCabinetCfg[MAX_CABINET_COUNT]; BYTE byRes1[84]; @@ -35265,98 +35265,98 @@ typedef struct tagNET_DVR_CABINET_CFG typedef struct tagNET_ITS_GATE_LANE_CFG { - BYTE byGateSiteID[MAX_ID_LEN]; //ڱ - BYTE byGateInfo[MAX_ID_LEN]; //Ϣ - BYTE byLaneName[NAME_LEN]; // - BYTE byValid; //Ƿ 0 ʾδã1ʾ - BYTE byCamLaneId; //Ӧ116õijţԾͬ - WORD wLaneid; //132ţԾ ߼ - BYTE byRelativeIoNum; //߼Źڱ - BYTE byDirection; //; 0 - 1 볡 2 3 ˫ - BYTE byLprMode; //ʶ0 ȫ1 ֹ2 - BYTE byCardMode; //Ƭ0 ȫ1 ֹ2 - BYTE byGateLaneMode;//ڷģʽ 0-ȫ 1-ֻʶƥ2 ֻˢƥ// 3-ʶƬһƥ 4-ʶҿƬͬʱƥ 5-ȫ - //2013-11-19 - BYTE byCharge;//Ƿշ 0-շѣ1-շ - BYTE byChargeMode;//շ 0-շѣ1-շ + BYTE byGateSiteID[MAX_ID_LEN]; //出入口编号 + BYTE byGateInfo[MAX_ID_LEN]; //出入口信息描述 + BYTE byLaneName[NAME_LEN]; //车道名称 + BYTE byValid; //是否启用 0 表示未启用,1表示启用 + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃 逻辑车道) + BYTE byRelativeIoNum; //逻辑车道号关联的输出口编号 + BYTE byDirection; //方向编号; 0 -其他 1 入场 2 出场 3 双向 + BYTE byLprMode; //牌识放行配置0 全部进1 除禁止名单进2 允许名单进 + BYTE byCardMode; //卡片放行配置0 全部进1 除禁止名单进2 允许名单进 + BYTE byGateLaneMode;//出入口放行配置模式 0-全部进 1-只有牌识匹配放行2 只有刷卡匹配放//行 3-牌识或卡片有一个匹配则放行 4-牌识且卡片同时匹配则放行 5-全不进 + //2013-11-19 新增参数 + BYTE byCharge;//是否收费 0-不收费,1-收费 + BYTE byChargeMode;//收费类型 0-车牌收费,1-卡号收费 BYTE byRes1; - BYTE byLedRelativeIndex[MAX_INDEX_LED];//LED (1~255) У0ʾЧ - BYTE byGateRelativeIndex;//ڿƻ - BYTE byFarRrRelativeIndex;// Զ - BYTE byRes[82]; //Ԥ + BYTE byLedRelativeIndex[MAX_INDEX_LED];//LED 索引 (1~255) 紧凑排列,0表示无效,不解析后面的数据 + BYTE byGateRelativeIndex;//出入口控制机相对索引 + BYTE byFarRrRelativeIndex;// 远距离读卡器相对索引 + BYTE byRes[82]; //预留 }NET_ITS_GATE_LANE_CFG, *LPNET_ITS_GATE_LANE_CFG; typedef struct tagNET_ITS_IPC_CHAN_LANE_CFG { DWORD dwSize; - BYTE byIpcType; //0-ޣ1-ץģ2-Ŀץģ3-Ƶ + BYTE byIpcType; //0-无,1-车牌抓拍,2-目标抓拍,3-视频安防相机 BYTE byRes[135]; - NET_ITS_GATE_LANE_CFG struGateLane[4]; //ýṹ + NET_ITS_GATE_LANE_CFG struGateLane[4]; //车道配置结构体 }NET_ITS_IPC_CHAN_LANE_CFG, *LPNET_ITS_IPC_CHAN_LANE_CFG; -//豸Զ̿ +//设备远程控制 typedef struct tagNET_ITS_REMOTE_COMMAND { - WORD wLaneid; //132ţԾ - BYTE byCamLaneId; //Ӧ116õijţԾͬ - BYTE byRes; //Ԥ - DWORD dwCode; // 0x0 բ 0x1 բչ + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃) + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + BYTE byRes; //预留 + DWORD dwCode; //命令码 0x0 开闸 0x1 关闸,其它待扩展 BYTE byRes1[128]; }NET_ITS_REMOTE_COMMAND,*LPNET_ITS_REMOTE_COMMAND; typedef struct tagNET_ITS_REMOTE_CONTROL_ { DWORD dwSize; - NET_ITS_REMOTE_COMMAND struRemoteCommand; //Զṹ + NET_ITS_REMOTE_COMMAND struRemoteCommand; //远程命令结构 }NET_ITS_REMOTE_CONTROL,*LPNET_ITS_REMOTE_CONTROL; -//ӻȡͨ״̬ +//长连接获取通道状态 typedef struct tagNET_ITS_ECT_CHANNELSTATE { DWORD dwSize; - BYTE byRecordStatic; //ͨǷ¼,0-¼,1-¼ - BYTE bySignalStatic; //ӵź״̬,0-,1-źŶʧ - BYTE byHardwareStatic;//ͨӲ״̬,0-,1-쳣,DSP - BYTE byChannelArmState; //IPCIJ״̬ - DWORD dwChannel; //ͨ - DWORD dwBitRate;//ʵ - DWORD dwLinkNum;//ͻӵĸ - NET_DVR_IPADDR struClientIP[MAX_LINK];//ͻ˵IPַ - DWORD dwIPLinkNum;//ͨΪIP룬ôʾIP뵱ǰ - BYTE byExceedMaxLink; // Ƿ񳬳128· 0 - δ, 1- - BYTE byRes[139]; // ֽ + BYTE byRecordStatic; //通道是否在录像,0-不录像,1-录像 + BYTE bySignalStatic; //连接的信号状态,0-正常,1-信号丢失 + BYTE byHardwareStatic;//通道硬件状态,0-正常,1-异常,例如DSP死掉 + BYTE byChannelArmState; //接入IPC的布防状态 + DWORD dwChannel; //通道号 + DWORD dwBitRate;//实际码率 + DWORD dwLinkNum;//客户端连接的个数 + NET_DVR_IPADDR struClientIP[MAX_LINK];//客户端的IP地址 + DWORD dwIPLinkNum;//如果该通道为IP接入,那么表示IP接入当前的连接数 + BYTE byExceedMaxLink; // 是否超出了128路连接数 0 - 未超出, 1-超出 + BYTE byRes[139]; // 保留字节 }NET_ITS_ECT_CHANNELSTATE, *LPNET_ITS_ECT_CHANNELSTATE; -//ӵ +//外接灯 typedef struct tagNET_DVR_PARK_EXTERNAL_SUBINFO { - BYTE byEnable; //0 1 - BYTE byFlicker;//0 ˸ 1 ˸ - BYTE byIOState;//0 ͵ƽ 1 ߵƽ (õЧ) - BYTE byLampColor;// 0- 1- 2- 3- 4- 5-Ʒ 6- 7-ɫ (õЧ) + BYTE byEnable; //0 ~ 不开启 1 ~ 开启 + BYTE byFlicker;//0 ~ 不闪烁 1 ~ 闪烁 + BYTE byIOState;//0 ~ 低电平 1 ~ 高电平 (外置灯起效) + BYTE byLampColor;// 0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (内置灯起效) BYTE byRes[4]; }NET_DVR_PARK_EXTERNAL_SUBINFO, *LPNET_DVR_PARK_EXTERNAL_SUBINFO; typedef struct tagNET_DVR_PARK_INLAY_SUBINFO { - BYTE byEnable; //0 1 - BYTE byFlicker;//0˸ 1 ˸ - BYTE byLampColor;//0- 1- 2- 3- 4- 5-Ʒ 6- 7-ɫ (õЧ) + BYTE byEnable; //0~不开启 1 ~开启 + BYTE byFlicker;//0~不闪烁 1 ~闪烁 + BYTE byLampColor;//0-灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (内置灯起效) BYTE byRes[21]; }NET_DVR_PARK_INLAY_SUBINFO, *LPNET_DVR_PARK_INLAY_SUBINFO; typedef struct tagNET_DVR_PARKINFO { - NET_DVR_PARK_EXTERNAL_SUBINFO struNormalParkIOState;//гioƽ״̬ - NET_DVR_PARK_EXTERNAL_SUBINFO struNormalNoParkIOState;//޳ioƽ״̬ - NET_DVR_PARK_EXTERNAL_SUBINFO struSpecialParkIOState;//⳵λгioƽ״̬ - NET_DVR_PARK_EXTERNAL_SUBINFO struSpecialNoParkIOState;//⳵λ޳ioƽ״̬ + NET_DVR_PARK_EXTERNAL_SUBINFO struNormalParkIOState;//有车io电平状态 + NET_DVR_PARK_EXTERNAL_SUBINFO struNormalNoParkIOState;//无车io电平状态 + NET_DVR_PARK_EXTERNAL_SUBINFO struSpecialParkIOState;//特殊车位有车io电平状态 + NET_DVR_PARK_EXTERNAL_SUBINFO struSpecialNoParkIOState;//特殊车位无车io电平状态 BYTE byRes[32]; }NET_DVR_PARKINFO, *LPNET_DVR_PARKINFO; typedef struct tagNET_DVR_EXTERNAL_LAMP_CTRL_MODE { - NET_DVR_PARKINFO struParkInfo[MAX_PARKING_NUM];/*ӵƵ³λϢһͨ4λ (ҳλ 03)*/ + NET_DVR_PARKINFO struParkInfo[MAX_PARKING_NUM];/*外接灯的情况下车位信息,一个通道最大4个车位 (从左到右车位 数组0~3)*/ BYTE byRes[32]; }NET_DVR_EXTERNAL_LAMP_CTRL_MODE, *LPNET_DVR_EXTERNAL_LAMP_CTRL_MODE; @@ -35368,106 +35368,106 @@ typedef struct tagNET_DVR_INLAY_LAMP_CTRL_MODE typedef struct tagNET_DVR_LAMP_INFO //8 { - BYTE byEnable; //0 1 - BYTE byFlicker;//0~˸ 1 ˸(λָʾ˸) - BYTE byLampColor;//0- 1- 2- 3- 4- 5-Ʒ 6- 7-ɫ (λָʾɫ) + BYTE byEnable; //0~不开启 1 ~开启 + BYTE byFlicker;//0~不闪烁 1 ~闪烁(车位指示灯闪烁) + BYTE byLampColor;//0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (车位指示灯颜色) BYTE byRes[5]; }NET_DVR_LAMP_INFO, *LPNET_DVR_LAMP_INFO; -//õģʽ +//内置外置灯模式 typedef struct tagNET_DVR_PARKLAMP_CTRL_MODE//size == 72 { - //λ״̬ 0޳1г2ѹ(ȼ), 3⳵λ + //车位状态 0代表无车,1代表有车,2代表压线(优先级最高), 3特殊车位 NET_DVR_LAMP_INFO struLampInfo[MAX_PARKING_STATUS/*8*/]; - //λƣ0-õ, 1-õ1, 2-õ2, 3-õ3 + //关联车位灯(0-内置灯, 1-外置灯1, 2-外置灯2, 3-外置灯3) BYTE byLampType; BYTE byRes[7]; }NET_DVR_PARKLAMP_CTRL_MODE, *LPNET_DVR_PARKLAMP_CTRL_MODE; typedef struct tagNET_DVR_LAMP_PARAM //4 { - BYTE byEnable; //0 1 - BYTE byFlicker;//0~˸ 1 ˸ - BYTE byLampColor;//0- 1- 2- 3- 4- 5-Ʒ 6- 7-ɫ + BYTE byEnable; //0~不开启 1 ~开启 + BYTE byFlicker;//0~不闪烁 1 ~闪烁 + BYTE byLampColor;//0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 BYTE byRes[3]; }NET_DVR_LAMP_PARAM, *LPNET_DVR_LAMP_PARAM; -//õģʽ +//内置外置灯模式 typedef struct tagNET_DVR_EXTERNAL_PARKLAMP //size == 56 { - //λ״̬ 0޳1г2ѹ(ȼ), 3⳵λ + //车位状态 0代表无车,1代表有车,2代表压线(优先级最高), 3特殊车位 NET_DVR_LAMP_PARAM struLampParam[MAX_PARKING_STATUS/*8*/]; - //λƣ0-õ, 1-õ1, 2-õ2, 3-õ3 + //关联车位灯(0-内置灯, 1-外置灯1, 2-外置灯2, 3-外置灯3) BYTE byLampType; BYTE byRes[7]; }NET_DVR_EXTERNAL_PARKLAMP, *LPNET_DVR_EXTERNAL_PARKLAMP; -/*õƼõģʽ õƿƽṹϢ */ +/*内置灯加外置灯模式下 内置灯控制结构子信息 */ typedef struct tagNET_DVR_BUILTIN_PARKLAMP { - BYTE byEnable; //0 1 - BYTE byFlicker; //0~˸ 1 ˸ - BYTE byLampColor; //0- 1- 2- 3- 4- 5-Ʒ 6- 7-ɫ (õЧ) + BYTE byEnable; //0~不开启 1 ~开启 + BYTE byFlicker; //0~不闪烁 1 ~闪烁 + BYTE byLampColor; //0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (内置灯起效) BYTE byRes[5]; }NET_DVR_BUILTIN_PARKLAMP, *LPNET_DVR_BUILTIN_PARKLAMP; -/* Ͽģʽṹ */ +/* 混合控制模式结构 */ typedef struct tagNET_DVR_MIXLAMP_CTRL_MODE { - NET_DVR_EXTERNAL_PARKLAMP struExternalParkLamp[MAX_PARKING_NUM/*4*/];//õ ճλŽ֣һͨ4λ (ҳλ 03) - NET_DVR_BUILTIN_PARKLAMP struBuiltInParkLamp[MAX_PARKING_STATUS/*8*/];//õ ճλ״̬֣λ״̬ 0޳1г2ѹ(ȼ), 3⳵λ + NET_DVR_EXTERNAL_PARKLAMP struExternalParkLamp[MAX_PARKING_NUM/*4*/];//外置灯 按照车位号进行区分,一个通道最大4个车位 (从左到右车位 数组0~3) + NET_DVR_BUILTIN_PARKLAMP struBuiltInParkLamp[MAX_PARKING_STATUS/*8*/];//内置灯 按照车位状态区分,车位状态 0代表无车,1代表有车,2代表压线(优先级最高), 3特殊车位 }NET_DVR_MIXLAMP_CTRL_MODE, *LPNET_DVR_MIXLAMP_CTRL_MODE; -/* ӵƿģʽṹ */ -typedef struct tagNET_DVR_SINGLELAMP_CTRL_MODE //õģʽDzֳλϢʾǰλ״̬Уȼõ״̬ѹ>⳵λ>޳״̬ +/* 单控外接灯控制模式结构 */ +typedef struct tagNET_DVR_SINGLELAMP_CTRL_MODE //单外置灯模式是不区分车位信息,显示当前车位状态中,等级最好的状态(压线>特殊车位>有无车状态) { - NET_DVR_PARK_EXTERNAL_SUBINFO struExternLampStateCtrl[MAX_PARKING_STATUS/*4*/];//õ ճλŽ֣һͨ4λ (ҳλ 03) - BYTE byLampType; /* 1-õ12-õ23-õ3*/ + NET_DVR_PARK_EXTERNAL_SUBINFO struExternLampStateCtrl[MAX_PARKING_STATUS/*4*/];//外置灯 按照车位号进行区分,一个通道最大4个车位 (从左到右车位 数组0~3) + BYTE byLampType; /* 1-外置灯1,2-外置灯2,3-外置灯3*/ BYTE byRes[23]; }NET_DVR_SINGLELAMP_CTRL_MODE, *LPNET_DVR_SINGLELAMP_CTRL_MODE; typedef union tagNET_DVR_LAMP_CTRL_MODE_UNION { BYTE uLen[288]; - NET_DVR_INLAY_LAMP_CTRL_MODE struInlayLampCtrlMode;/*õƿģʽṹ*/ - NET_DVR_EXTERNAL_LAMP_CTRL_MODE struExternalLampCtrlMode;/*ӵƿģʽṹ*/ - NET_DVR_PARKLAMP_CTRL_MODE struParkLampCtrlMode[MAX_PARKING_NUM/*4*/];/*õģʽһͨ4λ (ҳλ 03) ģʽΪõƵʱЧ*/ - //λõƣϿģʽõģʽģʽõƲΪõʹãõģʽ£õΪõʹã - //Ͽģʽ£õʾǰʾλ״̬Уȼߵijλ״̬(ѹ>⳵λ>޳״̬)Ƶ״̬ + NET_DVR_INLAY_LAMP_CTRL_MODE struInlayLampCtrlMode;/*内置灯控制模式结构*/ + NET_DVR_EXTERNAL_LAMP_CTRL_MODE struExternalLampCtrlMode;/*外接灯控制模式结构*/ + NET_DVR_PARKLAMP_CTRL_MODE struParkLampCtrlMode[MAX_PARKING_NUM/*4*/];/*内置外置灯模式,一个通道最大4个车位 (从左到右车位 数组0~3) 当模式为内外置灯的时候生效*/ + //车位检测相机内外置灯,混合控制模式(区分与上面内外置灯模式,该模式下内置灯不作为外置灯使用(内置外置灯模式下,内置灯作为外置灯使用)); + //混合控制模式下,内置灯显示当前显示车位状态中,优先级最高的车位状态(压线>特殊车位>有无车状态)关联灯的状态 NET_DVR_MIXLAMP_CTRL_MODE struMixLampCtrlMode; - //õģʽDzֳλϢʾǰλ״̬Уȼõ״̬ѹ>⳵λ>޳״̬ + //单外置灯模式是不区分车位信息,显示当前车位状态中,等级最好的状态(压线>特殊车位>有无车状态) NET_DVR_SINGLELAMP_CTRL_MODE struSingleExternalLampCtrlMode; -}NET_DVR_LAMP_CTRL_MODE_UNION, *LPNET_DVR_LAMP_CTRL_MODE_UNION;/*ƿģʽ*/ +}NET_DVR_LAMP_CTRL_MODE_UNION, *LPNET_DVR_LAMP_CTRL_MODE_UNION;/*灯控制模式联合体*/ typedef struct tagNET_DVR_LAMP_CTRL_INFO { DWORD dwSize; - BYTE byLampCtrlMode;/*صģʽ1õ,2ӵ,3õ,4ϵģʽõֻȼָʾ),5-õģʽ*/ - BYTE byCtrlChannelIndex;/*ͨ(33~48)*/ + BYTE byLampCtrlMode;/*控灯模式:1代表内置灯,2代表外接灯,3代表内外置灯,4代表混合灯模式(内置灯只做高优先级指示灯),5-代表单外置灯模式*/ + BYTE byCtrlChannelIndex;/*交替控制通道号(33~48)*/ BYTE byRes[2]; - NET_DVR_LAMP_CTRL_MODE_UNION uLampCtrlMode;/*ƿģʽ*/ + NET_DVR_LAMP_CTRL_MODE_UNION uLampCtrlMode;/*灯控制模式联合体*/ BYTE byRes2[32]; }NET_DVR_LAMP_CTRL_INFO, *LPNET_DVR_LAMP_CTRL_INFO; -//λãĬ϶normal +//车位属性配置(默认都是normal) typedef struct tagNET_DVR_PARKSPACE_INFO { - BYTE byParkSpaceAttribute; //0~ͨλ 1⳵λ + BYTE byParkSpaceAttribute; //0~普通车位 1~特殊车位 BYTE byRes[23]; }NET_DVR_PARKSPACE_INFO, *LPNET_DVR_PARKSPACE_INFO; typedef struct tagNET_DVR_PARKSPACE_ATTRIBUTE { DWORD dwSize; - NET_DVR_PARKSPACE_INFO struParkSpaceInfo[MAX_PARKING_NUM];//һͨ4λ (ҳλ 03) + NET_DVR_PARKSPACE_INFO struParkSpaceInfo[MAX_PARKING_NUM];//一个通道最大4个车位 (从左到右车位 数组0~3) BYTE byRes[64]; }NET_DVR_PARKSPACE_ATTRIBUTE, *LPNET_DVR_PARKSPACE_ATTRIBUTE; -//ָʾ +//指示灯外控 typedef struct tagNET_DVR_LAMP_STATE { - BYTE byFlicker;//0~˸ 1 ˸ - BYTE byParkingIndex;//λ13 + BYTE byFlicker;//0~不闪烁 1 ~闪烁 + BYTE byParkingIndex;//车位号1~3 BYTE byRes1[2]; DWORD dwIONo;//1~IO1;2~IO2;4~IO3; BYTE byRes2[8]; @@ -35476,364 +35476,364 @@ typedef struct tagNET_DVR_LAMP_STATE typedef struct tagNET_DVR_LAMP_EXTERNAL_CFG { DWORD dwSize; - BYTE byEnable; //ʹ 0 1 + BYTE byEnable; //外控使能 0~不启用 1~启用 BYTE byRes1[3]; - NET_DVR_LAMP_STATE struLampStateCtrl;//ָʾ + NET_DVR_LAMP_STATE struLampStateCtrl;//指示灯外控 BYTE byRes2[32]; }NET_DVR_LAMP_EXTERNAL_CFG, *LPNET_DVR_LAMP_EXTERNAL_CFG; -//λǿץͼ һͨijλ +//车位强制抓图 一个通道最多四车位 typedef struct tagNET_DVR_COMPEL_CAPTURE { DWORD dwSize; - BYTE byParkIndex;/*λŴ 0-ʾǰмλϴͼƬ1,2,3,4*/ + BYTE byParkIndex;/*车位序号从左到右 (0-表示当前有几个车位,就上传几张图片)1,2,3,4*/ BYTE byRes[63]; }NET_DVR_COMPEL_CAPTURE, *LPNET_DVR_COMPEL_CAPTURE; -//رṹ +//外控报警结构 typedef struct tagNET_DVR_EXTERNAL_CONTROL_ALARM { DWORD dwSize; DWORD dwChannelNo; - NET_DVR_LAMP_STATE struLampStateCtrl;//ָʾ״̬ - NET_DVR_TIME struExternalBeginTime;/*ؿʼʱ*/ + NET_DVR_LAMP_STATE struLampStateCtrl;//指示灯外控状态 + NET_DVR_TIME struExternalBeginTime;/*外控开始时间*/ BYTE byRes1[64]; }NET_DVR_EXTERNAL_CONTROL_ALARM, *LPNET_DVR_EXTERNAL_CONTROL_ALARM; -/* 豸 */ +/* 设备类型 */ typedef enum tagEXTERNAL_DEVICES_TYPE { - DEVICES_TYPE_RES1 = 0, //1 - DEVICES_TYPE_FAR_SCR = 1, //Զ - DEVICES_TYPE_ENTRANCE_CONTROL = 2, //ڿƻ - DEVICES_TYPE_WJ_LED_DEV = 3, //LED - DEVICES_TYPE_NJ_LED_DEV = 4, //ڽLED - DEVICES_TYPE_VEH_DETECT_DEV = 5, //豸 - DEVICES_TYPE_DZ_DEV = 6, //բ - DEVICES_TYPE_PX_SCR_DEV = 7, //Ʊ - DEVICES_TYPE_KJ_SCR_DEV = 8, // - DEVICES_TYPE_FKJ_DEV = 9, // - DEVICES_TYPE_SKJ_DEV = 10, //տ - DEVICES_TYPE_HDD_DEV = 11, //Ӳ( 1G) - DEVICES_TYPE_DZ_LOCK = 12, //բբ״̬0ʾδբ1ʾբ - DEVICES_TYPE_PAPER_PRINTER = 13, //ֽƱӡ - DEVICES_TYPE_PAPER_SCANNERS = 14, //ֽƱɨ - DEVICES_TYPE_IPC_ALARM = 15 //IPC״̬ + DEVICES_TYPE_RES1 = 0, //保留1 + DEVICES_TYPE_FAR_SCR = 1, //远距离读卡器 + DEVICES_TYPE_ENTRANCE_CONTROL = 2, //出入口控制机 + DEVICES_TYPE_WJ_LED_DEV = 3, //外接LED + DEVICES_TYPE_NJ_LED_DEV = 4, //内接LED + DEVICES_TYPE_VEH_DETECT_DEV = 5, //车检器设备 + DEVICES_TYPE_DZ_DEV = 6, //道闸 + DEVICES_TYPE_PX_SCR_DEV = 7, //票箱读卡器 + DEVICES_TYPE_KJ_SCR_DEV = 8, //卡机读卡器 + DEVICES_TYPE_FKJ_DEV = 9, //发卡机 + DEVICES_TYPE_SKJ_DEV = 10, //收卡机 + DEVICES_TYPE_HDD_DEV = 11, //硬盘(裸盘 1G) + DEVICES_TYPE_DZ_LOCK = 12, //道闸锁闸状态,0表示未锁闸,1表示锁闸 + DEVICES_TYPE_PAPER_PRINTER = 13, //纸票打印机 + DEVICES_TYPE_PAPER_SCANNERS = 14, //纸票扫描仪 + DEVICES_TYPE_IPC_ALARM = 15 //IPC布防状态 }EXTERNAL_DEVICES_TYPE; -/* 豸״̬ */ +/* 设备状态 */ typedef enum tagEXTERNAL_DEVICES_STATUS { - /* ͨ豸״̬ 0~19*/ - DEVICES_STATUS_NORMAL = 0, //״̬ - DEVICES_STATUS_ABNORMAL = 1, //״̬쳣 + /* 通用设备状态码 0~19*/ + DEVICES_STATUS_NORMAL = 0, //状态正常 + DEVICES_STATUS_ABNORMAL = 1, //状态异常 - /* 豸״̬ 20~39*/ - DEVICES_STATUS_TOO_LESS_CARD = 20, //ٿ - DEVICES_STATUS_NO_CARD = 21, //޿ - DEVICES_STATUS_SENDCARD_ERROR = 22, //Ԥ - DEVICES_STATUS_CARD_BLOCKED = 23, //¿ - DEVICES_STATUS_CARD_FULL = 24, //ղֿ + /* 发卡机设备状态码 20~39*/ + DEVICES_STATUS_TOO_LESS_CARD = 20, //发卡机少卡 + DEVICES_STATUS_NO_CARD = 21, //发卡机无卡 + DEVICES_STATUS_SENDCARD_ERROR = 22, //预发卡错误 + DEVICES_STATUS_CARD_BLOCKED = 23, //堵卡 + DEVICES_STATUS_CARD_FULL = 24, //回收仓卡满 - /* բ豸״̬ 40~60*/ - DEVICES_STATUS_OPENING = 40, //բڿ - DEVICES_STATUS_CLOSING = 41, //բڹ - DEVICES_STATUS_OPENED = 42, //բλ - DEVICES_STATUS_CLOSED = 43, //բصλ - DEVICES_STATUS_NOSIGNAL = 44, //բź - DEVICES_STATUS_LOCK= 45, //բ + /* 道闸设备状态码 40~60*/ + DEVICES_STATUS_OPENING = 40, //道闸正在开 + DEVICES_STATUS_CLOSING = 41, //道闸正在关 + DEVICES_STATUS_OPENED = 42, //道闸开到位 + DEVICES_STATUS_CLOSED = 43, //道闸关到位 + DEVICES_STATUS_NOSIGNAL = 44, //道闸无信号 + DEVICES_STATUS_LOCK= 45, //锁闸 - /* ֽƱӡ״̬ 61~90*/ - PP_STATUS_OFFLINE = 61, //ѻ - PP_STATUS_PRINT_HEADER_UP, // ӡͷ̧ - PP_STATUS_FEED_BUTTON_FEEDING, //ýֽֽ - PP_STATUS_ONLINE_WAITING, //ȴ - PP_STATUS_FEED_BUTTON_ENABLE, //ֽʹΪ - PP_STATUS_JAMR_PAPER_ERROR, //ֽ - PP_STATUS_CUT_PAPER_ERROR, //е - PP_STATUS_AUTO_FEED_ERROR, //Զֽ - PP_STATUS_EXIT_RECOVERY_ERROR, //пɻָ - PP_STATUS_EXIT_AUTO_RECOVERY_ERROR, //пԶָ - PP_STATUS_PULL_PAPER_ERROR, //ֽ - PP_STATUS_LESS_PAPER , //ֽ - PP_STATUS_NO_PAPER, //ֽ - PP_STATUS_PRINT_FAIL, //ӡʧ - PP_STATUS_PRINTING, //ڴӡ + /* 纸票打印机状态 61~90*/ + PP_STATUS_OFFLINE = 61, //脱机 + PP_STATUS_PRINT_HEADER_UP, // 打印头抬起 + PP_STATUS_FEED_BUTTON_FEEDING, //正在用进纸键进纸 + PP_STATUS_ONLINE_WAITING, //联机等待 + PP_STATUS_FEED_BUTTON_ENABLE, //按键进纸使能为开 + PP_STATUS_JAMR_PAPER_ERROR, //卡纸错误 + PP_STATUS_CUT_PAPER_ERROR, //切刀错误 + PP_STATUS_AUTO_FEED_ERROR, //自动上纸错误 + PP_STATUS_EXIT_RECOVERY_ERROR, //有可恢复错误 + PP_STATUS_EXIT_AUTO_RECOVERY_ERROR, //有可自动恢复错误 + PP_STATUS_PULL_PAPER_ERROR, //拉纸错误 + PP_STATUS_LESS_PAPER , //纸将尽 + PP_STATUS_NO_PAPER, //无纸 + PP_STATUS_PRINT_FAIL, //打印失败 + PP_STATUS_PRINTING, //正在打印 }EXTERNAL_DEVICES_STATUS; -/* 豸 */ +/* 外接设备控制类型 */ typedef enum tagEXTERNAL_DEVICESCTRL_TYPE { - DEVICES_CTRL_RES = 0, //Ԥ(ȥ־) - DEVICES_CTRL_REMOTE = 1, //ңƣǰΪբʱ֧ͨңբ + DEVICES_CTRL_RES = 0, //预留(不去区分具体控制类型) + DEVICES_CTRL_REMOTE = 1, //遥控器控制,当前仅外设为道闸时支持通过遥控器开闸 }EXTERNAL_DEVICESCTRL_TYPE; typedef struct tagNET_DVR_GATE_ALARMINFO { DWORD dwSize; - //0x1Ƿ뱨 - //0x2բʱδر - //0x3ѹȦʱ - //0x4޿ - //0x5ٿ - //0x6쳣 + //0x1车辆非法侵入报警 + //0x2道闸超时未关报警 + //0x3车辆压线圈超时报警 + //0x4发卡报警(无卡) + //0x5发卡报警(少卡) + //0x6发卡报警(发卡异常) BYTE byAlarmType; - BYTE byExternalDevType;//豸(EXTERNAL_DEVICES_TYPE) - BYTE byExternalDevStatus;//豸(EXTERNAL_DEVICES_STATUS) - BYTE byExternalDevCtrlType;//豸(EXTERNAL_DEVICESCTRL_TYPE) - NET_DVR_TIME_V30 struAlarmTime;//ʱ + BYTE byExternalDevType;//外接设备类型(EXTERNAL_DEVICES_TYPE) + BYTE byExternalDevStatus;//外接设备类型(EXTERNAL_DEVICES_STATUS) + BYTE byExternalDevCtrlType;//外接设备控制类型(EXTERNAL_DEVICESCTRL_TYPE) + NET_DVR_TIME_V30 struAlarmTime;//报警时间 union { BYTE uLen[128]; struct { - char sLicense[MAX_LICENSE_LEN/*16*/];//ƺ - /*0- 1-̶2-ʱ3-Ԥ4-쳵5-Ȩ*/ + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + /*车辆类型0-保留 1-固定车,2-临时车,3-预订车,4-联检车,5-授权车*/ BYTE byVehicleType; BYTE byRes1[111]; - }struVehicleInfo;//struAlarmTypeΪ(0x1Ƿ뱨) + }struVehicleInfo;//当struAlarmType为(0x1车辆非法侵入报警) }uAlarmInfo; - BYTE byRes2[64]; //Ԥ + BYTE byRes2[64]; //预留 }NET_DVR_GATE_ALARMINFO, *LPNET_DVR_GATE_ALARMINFO; typedef struct tagNET_DVR_ALARMWIRELESSINFO { - BYTE byDeviceID[NAME_LEN]; //豸ID - float fDataTraffic; /* ,λMB,Сλ*/ - BYTE bySignalIntensity; /* źǿȣ0~100*/ + BYTE byDeviceID[NAME_LEN]; //设备ID + float fDataTraffic; /* 已用流量,单位:MB,小数点后两位*/ + BYTE bySignalIntensity; /* 信号强度,0~100*/ BYTE byRes[127]; }NET_DVR_ALARMWIRELESSINFO, *LPNET_DVR_ALARMWIRELESSINFO; typedef struct tagNET_DVR_VOLTAGE { - int iPhaseAVol; //Aѹ - int iPhaseBVol; //Bѹ - int iPhaseCVol; //Cѹ - int iAveragePhaseVol; //ѹƽֵ + int iPhaseAVol; //A相电压 + int iPhaseBVol; //B相电压 + int iPhaseCVol; //C相电压 + int iAveragePhaseVol; //相电压平均值 }NET_DVR_VOLTAGE, *LPNET_DVR_VOLTAGE; typedef struct _tagNET_DVR_LINE_VOLTAGE { - int iLineVolAB; //ABߵѹ - int iLineVolBC; //BCߵѹ - int iLineVolCA; //CAߵѹ - int iAverageLineVol; //ߵѹƽֵ + int iLineVolAB; //AB线电压 + int iLineVolBC; //BC线电压 + int iLineVolCA; //CA线电压 + int iAverageLineVol; //线电压平均值 } NET_DVR_LINE_VOLTAGE,*LPNET_DVR_LINE_VOLTAGE; -// +//电流 typedef struct tagNET_DVR_CURRENT { - int iPhaseACurrent; //A - int iPhaseBCurrent; //B - int iPhaseCCurrent; //C + int iPhaseACurrent; //A相电流 + int iPhaseBCurrent; //B相电流 + int iPhaseCCurrent; //C相电流 BYTE byRes[4]; }NET_DVR_CURRENT, *LPNET_DVR_CURRENT; -// +//功率 typedef struct tagNET_DVR_POWER { - int iPhaseAPower; //A๦ - int iPhaseBPower; //B๦ - int iPhaseCPower; //C๦ - int iSysTotalPower; //ϵͳܹ + int iPhaseAPower; //A相功率 + int iPhaseBPower; //B相功率 + int iPhaseCPower; //C相功率 + int iSysTotalPower; //系统总功率 }NET_DVR_POWER, *LPNET_DVR_POWER; -// +//功率因数 typedef struct tagNET_DVR_POWER_FACTOR { - int iPhaseAPowerFactor; //A๦ - int iPhaseBPowerFactor; //B๦ - int iPhaseCPowerFactor; //C๦ - int iTotalPowerFactor; //ܹ + int iPhaseAPowerFactor; //A相功率因数 + int iPhaseBPowerFactor; //B相功率因数 + int iPhaseCPowerFactor; //C相功率因数 + int iTotalPowerFactor; //总功率因数 }NET_DVR_POWER_FACTOR, *LPNET_DVR_POWER_FACTOR; -//Ƶ +//频率 typedef struct tagNET_DVR_FREQUENCY { - int iPhaseAFrequency; //AƵ - int iPhaseBFrequency; //BƵ - int iPhaseCFrequency; //CƵ + int iPhaseAFrequency; //A相频率 + int iPhaseBFrequency; //B相频率 + int iPhaseCFrequency; //C相频率 BYTE byRes[4]; }NET_DVR_FREQUENCY, *LPNET_DVR_FREQUENCY; -// +//负载率 typedef struct tagNET_DVR_LOAD_FACTOR { - int iPhaseALoadFactor; //Aฺ - int iPhaseBLoadFactor; //Bฺ - int iPhaseCLoadFactor; //Cฺ + int iPhaseALoadFactor; //A相负载率 + int iPhaseBLoadFactor; //B相负载率 + int iPhaseCLoadFactor; //C相负载率 BYTE byRes[4]; } NET_DVR_LOAD_FACTOR, *LPNET_DVR_LOAD_FACTOR; -//UPS״̬ +//UPS状态 typedef struct tagNET_DVR_ALARMHOST_UPS_STATE { - NET_DVR_VOLTAGE struInputVoltage; //ѹ - NET_DVR_VOLTAGE struBypassVoltage; //·ѹ - NET_DVR_VOLTAGE struOutputVoltage; //ѹ - int iRectifierVol; //ѹ - int iInverterVol; //ѹ + NET_DVR_VOLTAGE struInputVoltage; //输入电压 + NET_DVR_VOLTAGE struBypassVoltage; //旁路电压 + NET_DVR_VOLTAGE struOutputVoltage; //输出电压 + int iRectifierVol; //整流器电压 + int iInverterVol; //逆变器电压 - NET_DVR_CURRENT struInputCurrent; // - NET_DVR_CURRENT struBypassCurrent; //· - NET_DVR_CURRENT struOutputCurrent; // - int iInverterCurrent; // + NET_DVR_CURRENT struInputCurrent; //输入电流 + NET_DVR_CURRENT struBypassCurrent; //旁路电流 + NET_DVR_CURRENT struOutputCurrent; //输出电流 + int iInverterCurrent; //逆变器电流 - NET_DVR_FREQUENCY struInputFrequency; //Ƶ - NET_DVR_FREQUENCY struBypassFrequency; //·Ƶ - NET_DVR_FREQUENCY struOutputFrequency; //Ƶ - int iInverterFre; //Ƶ + NET_DVR_FREQUENCY struInputFrequency; //输入频率 + NET_DVR_FREQUENCY struBypassFrequency; //旁路频率 + NET_DVR_FREQUENCY struOutputFrequency; //输出频率 + int iInverterFre; //逆变器频率 - NET_DVR_POWER struInputPower; //빦 - NET_DVR_POWER struBypassPower; //· - NET_DVR_POWER struOutputPower; // - NET_DVR_POWER struComplexPower; // + NET_DVR_POWER struInputPower; //输入功率 + NET_DVR_POWER struBypassPower; //旁路功率 + NET_DVR_POWER struOutputPower; //输出功率 + NET_DVR_POWER struComplexPower; //复功率 - int iNormalPower; //ƹ - int iPowerFacter; // + int iNormalPower; //标称功率 + int iPowerFacter; //功率因数 - NET_DVR_LOAD_FACTOR struBatteryLoadFactor; //ظ - int iBatteryEstimated; //رʱ(min) - int iBatteryTemperature; //¶ - int iBatteryVoltage; //صѹ + NET_DVR_LOAD_FACTOR struBatteryLoadFactor; //电池负载率 + int iBatteryEstimated; //电池备份时间(min) + int iBatteryTemperature; //电池温度 + int iBatteryVoltage; //电池电压 - BYTE byRectifierState; //״̬/*1 2쳣*/ - BYTE byInverterState; //״̬/*1 2쳣*/ - BYTE byChargeState; //״̬/*1 2쳣*/ - BYTE byBatteryState; //״̬/*1 2쳣*/ - BYTE byAutoBypassState; //Զ·״̬/*1 2쳣*/ + BYTE byRectifierState; //整流器运行状态/*1正常 2异常*/ + BYTE byInverterState; //逆变器运行状态/*1正常 2异常*/ + BYTE byChargeState; //充电器运行状态/*1正常 2异常*/ + BYTE byBatteryState; //电池运行状态/*1正常 2异常*/ + BYTE byAutoBypassState; //自动旁路状态/*1正常 2异常*/ BYTE byRes2[247]; } NET_DVR_ALARMHOST_UPS_STATE, *LPNET_DVR_ALARMHOST_UPS_STATE; -//صԴ״̬ +//开关电源状态 typedef struct tagNET_DVR_ALARMHOST_SWITCH_POWER_STATE { - NET_DVR_VOLTAGE struACVoltage; //ѹ - int iDCConvertVoltage; //DCתѹ - NET_DVR_CURRENT struACCurrent; // - int iTotalCurrent; //ܵ - int iBattery1Temperature; //1¶ - int iBattery2Temperature; //2¶ - int iBattery1Current; //1 - int iBattery2Current; //2 - int iBattery3Current; //3 - int iBattery4Current; //4 - int iBatteryTestVoltage; //زԵѹ - int iRectifierOutputVoltage; //ģѹ - int iRectifierOutputCurrent; //ģ - int iDCOutputVoltage; //ֱѹ + NET_DVR_VOLTAGE struACVoltage; //交流电压 + int iDCConvertVoltage; //DC转换器电压 + NET_DVR_CURRENT struACCurrent; //交流电流 + int iTotalCurrent; //负载总电流 + int iBattery1Temperature; //电池1温度 + int iBattery2Temperature; //电池2温度 + int iBattery1Current; //电池1电流 + int iBattery2Current; //电池2电流 + int iBattery3Current; //电池3电流 + int iBattery4Current; //电池4电流 + int iBatteryTestVoltage; //电池测试电压 + int iRectifierOutputVoltage; //整流模块输出电压 + int iRectifierOutputCurrent; //整流模块输出电流 + int iDCOutputVoltage; //直流输出电压 BYTE byRes[432]; } NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_STATE, *LPNET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_STATE; -//̽״̬ +//气体探测器状态 typedef struct tagNET_DVR_ALARMHOST_GAS_DETECTOR_STATE { - int iSF6; //SF6λppm - int iFlow; //ml/min - int iTemperature; //¶ȣλ϶ - int iO2; //λ% - int iHumidity; //ʪȣλ% + int iSF6; //SF6,单位ppm + int iFlow; //流量,ml/min + int iTemperature; //温度,单位摄氏度 + int iO2; //氧气,单位% + int iHumidity; //湿度,单位% BYTE byRes[492]; } NET_DVR_ALARMHOST_GAS_DETECTOR_STATE, *LPNET_DVR_ALARMHOST_GAS_DETECTOR_STATE; -//ʪȴ״̬ +//温湿度传感器状态 typedef struct tagNET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE { - int iTemperature; //¶ȣλ϶ - int iHumidity; //ʪȣλ% + int iTemperature; //温度,单位摄氏度 + int iHumidity; //湿度,单位% BYTE byRes[504]; } NET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE, *LPNET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE; -//յ״̬ +//空调状态 typedef struct tagNET_DVR_ALARMHOST_AIRCONDITION_STATE { - int iTemperature; //¶ȣλ϶ - int iHumidity; //ʪȣλ% - BYTE byRunState; //״̬ 1-2-ͣ + int iTemperature; //温度,单位摄氏度 + int iHumidity; //湿度,单位% + BYTE byRunState; //运行状态 1-正常,2-停机 BYTE byRes[503]; } NET_DVR_ALARMHOST_AIRCONDITION_STATE, *LPNET_DVR_ALARMHOST_AIRCONDITION_STATE; -//״̬ +//电量表状态 typedef struct tagNET_DVR_ALARMHOST_ELECTRICITY_STATE { - int iDCVoltage; //ֱѹ - int iDCCurrent; //ֱ - NET_DVR_VOLTAGE struPhaseVoltage; //ѹ - NET_DVR_LINE_VOLTAGE struLineVoltage; //ߵѹ - NET_DVR_CURRENT struCurrent[4]; //struCurrent[0]ʾ1·, Դ - int iAverageCurrent; //ƽ - int iNeutralCurrent; //ߵ - NET_DVR_POWER struActivePower[4]; //й struActivePower[0]ʾһ·йʣԴ - NET_DVR_POWER struReactivePower[4]; //޹ struReactivePower[0]ʾһ·޹ʣԴ - NET_DVR_POWER struApparentPower[4]; //ڹ struApprentPower[0]ʾһ·ڹʣԴ - NET_DVR_POWER_FACTOR struPowerFactor[4]; //struPowerFactor[0]ʾһ·Դ - NET_DVR_FREQUENCY struFrequency; //Ƶ + int iDCVoltage; //直流电压 + int iDCCurrent; //直流电流 + NET_DVR_VOLTAGE struPhaseVoltage; //相电压 + NET_DVR_LINE_VOLTAGE struLineVoltage; //线电压 + NET_DVR_CURRENT struCurrent[4]; //电流,struCurrent[0]表示第1路, 以此类推 + int iAverageCurrent; //平均电流 + int iNeutralCurrent; //中线电流 + NET_DVR_POWER struActivePower[4]; //有功功率 struActivePower[0]表示第一路有功功率,以此类推 + NET_DVR_POWER struReactivePower[4]; //无功功率 struReactivePower[0]表示第一路无功功率,以此类推 + NET_DVR_POWER struApparentPower[4]; //视在功率 struApprentPower[0]表示第一路视在功率,以此类推 + NET_DVR_POWER_FACTOR struPowerFactor[4]; //功率因数,struPowerFactor[0]表示第一路功率因数,以此类推 + NET_DVR_FREQUENCY struFrequency; //频率 BYTE byRes[128]; }NET_DVR_ALARMHOST_ELECTRICITY_STATE, *LPNET_DVR_ALARMHOST_ELECTRICITY_STATE; -//Ա״̬ +//变电器温显表状态 typedef struct tagNET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE { - int iPhaseATemperature; //A¶ - int iPhaseBTemperature; //B¶ - int iPhaseCTemperature; //C¶ - int iPhaseDTemperature; //D¶ + int iPhaseATemperature; //A相温度 + int iPhaseBTemperature; //B相温度 + int iPhaseCTemperature; //C相温度 + int iPhaseDTemperature; //D相温度 BYTE byRes[496]; }NET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE, *LPNET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE; -//ˮλ +//水位传感器 typedef struct tagNET_DVR_ALARMHOST_WATERLEVEL_SENSOR { - LONG iWaterLevel; //ˮλ + LONG iWaterLevel; //水位 BYTE byRes[508]; }NET_DVR_ALARMHOST_WATERLEVEL_SENSOR, *LPNET_DVR_ALARMHOST_WATERLEVEL_SENSOR; -//ﳾ +//扬尘噪声传感器 typedef struct tagNET_DVR_ALARMHOST_DUSTNOISE_SENSOR { - LONG iDust; //ﳾ - LONG iNoise; // + LONG iDust; //扬尘 + LONG iNoise; //噪声 LONG iPM25; //PM2.5 BYTE byRes[500]; }NET_DVR_ALARMHOST_DUSTNOISE_SENSOR, *LPNET_DVR_ALARMHOST_DUSTNOISE_SENSOR; -//ɼ +//环境采集仪 typedef struct tagNET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER { - LONG iAmmoniaNitrogen; // + LONG iAmmoniaNitrogen; //氨氮 LONG iCOD; //COD LONG iPH; //PH - LONG iOxygen; // - LONG iSulfurDioxide; // - LONG iSoot; //̳ - LONG iFluoride; // - LONG iPollutedWater; //ˮ - LONG iTotalPhosphorus; // - LONG iExhaust; // - LONG iNitrogenOxides; // - LONG iFlueGasTemperature;//¶ - LONG iFlueGasPressure; //ѹ - LONG iDustThickness; /*۳Ũ*/ - LONG iAirCleanLevel; /*ྻȵȼ*/ - LONG iPm10Thickness; /*PM10Ũ*/ + LONG iOxygen; //氧气 + LONG iSulfurDioxide; //二氧化硫 + LONG iSoot; //烟尘 + LONG iFluoride; //氟化物 + LONG iPollutedWater; //污水 + LONG iTotalPhosphorus; //总磷 + LONG iExhaust; //废气 + LONG iNitrogenOxides; //氮氧化物 + LONG iFlueGasTemperature;//烟气温度 + LONG iFlueGasPressure; //烟气压力 + LONG iDustThickness; /*粉尘浓度*/ + LONG iAirCleanLevel; /*空气洁净度等级*/ + LONG iPm10Thickness; /*PM10浓度*/ BYTE byRes[448]; }NET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER, *LPNET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER; -//ٴ״̬ +//风速传感器状态 typedef struct { - int iWindSpeed; /**/ + int iWindSpeed; /*风速*/ BYTE byRes[508]; }NET_DVR_WIND_SPEED_STATE, *LPNET_DVR_WIND_SPEED_STATE; -//ͨչģ״̬48·ÿλʾ1·0ʾأ1ʾ +//通用扩展输出模块状态(48路,每位表示1路,0表示关,1表示开) typedef struct { BYTE byOutPutState1; /*output1-8*/ @@ -35845,205 +35845,205 @@ typedef struct BYTE Res[506]; }NET_DVR_GENERATE_OUTPUT_STATE, *LPNET_DVR_GENERATE_OUTPUT_STATE; -//ˮ״̬ +//浸水传感器状态 typedef struct { - int iWaterLogVal; /* й¶λã100*/ - int iLeakResist1; /*һ·©ˮ*/ - int iTotolResist1; /*һ·ܵ*/ - int iLeakResist2; /*ڶ·©ˮ*/ - int iTotolResist2; /*ڶ·ܵ*/ - BYTE byWaterLogAlarm; /* й©12澯*/ - BYTE byLeakAlarm1; /*һ·©ˮ澯12澯*/ - BYTE byFaultAlarm1; /*һ·ϸ澯12澯*/ - BYTE byLeakAlarm2; /*ڶ·©ˮ澯12澯*/ - BYTE byFaultAlarm2; /*ڶ·ϸ澯12澯*/ + int iWaterLogVal; /* 泄露位置,100倍*/ + int iLeakResist1; /*第一路漏水电阻*/ + int iTotolResist1; /*第一路总电阻*/ + int iLeakResist2; /*第二路漏水电阻*/ + int iTotolResist2; /*第二路总电阻*/ + BYTE byWaterLogAlarm; /* 泄漏报警1:正常,2:告警*/ + BYTE byLeakAlarm1; /*第一路漏水告警1:正常,2:告警*/ + BYTE byFaultAlarm1; /*第一路故障告警1:正常,2:告警*/ + BYTE byLeakAlarm2; /*第二路漏水告警1:正常,2:告警*/ + BYTE byFaultAlarm2; /*第二路故障告警1:正常,2:告警*/ BYTE byRes[487]; }NET_DVR_SOAK_STATE, *LPNET_DVR_SOAK_STATE; -//̫ܿ״̬ +//太阳能控制器状态 typedef struct { - int iChangerVolInput; /*豸ѹ*/ - int iChangerCurInput; /*豸*/ - int iChangerPwInput; /*豸빦*/ - int iChangerVolOutput; /*豸ѹ*/ - int iChangerCurOutput; /*豸*/ - int iChangerPwOutput; /*豸*/ - int iDischangerVolOutput; /*ŵ豸ѹ*/ - int iDischangerCurOutput; /*ŵ豸*/ - int iDischangerPwOutput; /*ŵ豸*/ - int iDevTemperatrue; /*豸¶*/ - BYTE byBatteryVolState; /*صѹ״̬12쳣*/ - BYTE byBatteryTmpState; /*¶״̬12쳣*/ - BYTE byChangerVolInputState; /*豸ѹ״̬12쳣*/ - BYTE byChangerRunState; /*豸״̬12*/ - BYTE byChangerChgState; /*豸״̬12쳣*/ - BYTE byBatteryVolFlt; /*صѹ12澯*/ - BYTE byBatteryTmpFlt; /*¶쳣12澯*/ - BYTE byBatteryResistanceFlt; /*쳣12澯*/ - BYTE byVolRcgFlt; /*ѹʶ12澯*/ - BYTE byChangerVolInputFlt; /*豸ѹ쳣12澯*/ - BYTE byChangerMosShort; /*MOSܶ·12澯*/ - BYTE byChangerAntiOrMosShort; /*MOSܶ·12澯*/ - BYTE byChangerAntiShort; /*MOSܶ·12澯*/ - BYTE byInputOverCur; /*12澯*/ - BYTE byLoadOverCur; /*ع12澯*/ - BYTE byLoadShort; /*ض·12澯*/ - BYTE byLoadMosShort; /*MOSܶ·12澯*/ - BYTE byChangerFlt; /*豸12澯*/ + int iChangerVolInput; /*充电设备输入电压*/ + int iChangerCurInput; /*充电设备输入电流*/ + int iChangerPwInput; /*充电设备输入功率*/ + int iChangerVolOutput; /*充电设备输出电压*/ + int iChangerCurOutput; /*充电设备输出电流*/ + int iChangerPwOutput; /*充电设备输出功率*/ + int iDischangerVolOutput; /*放电设备输出电压*/ + int iDischangerCurOutput; /*放电设备输出电流*/ + int iDischangerPwOutput; /*放电设备输出功率*/ + int iDevTemperatrue; /*设备内温度*/ + BYTE byBatteryVolState; /*蓄电池电压状态1:正常,2:异常*/ + BYTE byBatteryTmpState; /*蓄电池温度状态1:正常,2:异常*/ + BYTE byChangerVolInputState; /*充电设备输入电压状态1:正常,2:异常*/ + BYTE byChangerRunState; /*充电设备运行状态1:正常,2:待机*/ + BYTE byChangerChgState; /*充电设备充电状态1:正常,2:异常*/ + BYTE byBatteryVolFlt; /*蓄电池电压故障1:正常,2:告警*/ + BYTE byBatteryTmpFlt; /*蓄电池温度异常1:正常,2:告警*/ + BYTE byBatteryResistanceFlt; /*蓄电池内阻异常1:正常,2:告警*/ + BYTE byVolRcgFlt; /*额定电压识别错误1:正常,2:告警*/ + BYTE byChangerVolInputFlt; /*充电设备输入电压异常1:正常,2:告警*/ + BYTE byChangerMosShort; /*充电MOS管短路1:正常,2:告警*/ + BYTE byChangerAntiOrMosShort; /*充电或防反MOS管短路1:正常,2:告警*/ + BYTE byChangerAntiShort; /*防反MOS管短路1:正常,2:告警*/ + BYTE byInputOverCur; /*输入过流1:正常,2:告警*/ + BYTE byLoadOverCur; /*负载过流1:正常,2:告警*/ + BYTE byLoadShort; /*负载短路1:正常,2:告警*/ + BYTE byLoadMosShort; /*负载MOS管短路1:正常,2:告警*/ + BYTE byChangerFlt; /*充电设备故障1:正常,2:告警*/ BYTE byRes[454]; }NET_DVR_SOLAR_POWER_STATE, *LPNET_DVR_SOLAR_POWER_STATE; -//SF6״̬ +//SF6报警主机状态 typedef struct { - int iSf6Thick1; /*һSF6Ũ*/ - int iO2Thick1; /*һŨ*/ - int iTemprature1; /*һ¶*/ - int iHumidity1; /*һʪ*/ - int iSf6Thick2; /*ڶSF6Ũ*/ - int iO2Thick2; /*ڶŨ*/ - int iTemprature2; /*ڶ¶*/ - int iHumidity2; /*ʪ*/ - int iSf6Thick3; /*SF6Ũ*/ - int iO2Thick3; /*Ũ*/ - int iTemprature3; /*¶*/ - int iHumidity3; /*ʪ*/ - int iSf6Thick4; /*ĵSF6Ũ*/ - int iO2Thick4; /*ĵŨ*/ - int iTemprature4; /*ĵ¶*/ - int iHumidity4; /*ĵʪ*/ - int iSf6Thick5; /*SF6Ũ*/ - int iO2Thick5; /*Ũ*/ - int iTemprature5; /*¶*/ - int iHumidity5; /*ʪ*/ - int iSf6Thick6; /*SF6Ũ*/ - int iO2Thick6; /*Ũ*/ - int iTemprature6; /*¶*/ - int iHumidity6; /*ʪ*/ - int iSf6Thick7; /*ߵSF6Ũ*/ - int iO2Thick7; /*ߵŨ*/ - int iTemprature7; /*ߵ¶*/ - int iHumidity7; /*ߵʪ*/ - int iSf6Thick8; /*ڰ˵SF6Ũ*/ - int iO2Thick8; /*ڰ˵Ũ*/ - int iTemprature8; /*ڰ˵¶*/ - int iHumidity8; /*ڰ˵ʪ*/ - int iSf6Thick9; /*ھŵSF6Ũ*/ - int iO2Thick9; /*ھŵŨ*/ - int iTemprature9; /*ھŵ¶*/ - int iHumidity9; /*ھŵʪ*/ - int iSf6Thick10; /*ʮSF6Ũ*/ - int iO2Thick10; /*ʮŨ*/ - int iTemprature10; /*ʮ¶*/ - int iHumidity10; /*ʮʪ*/ - int iSf6Thick11; /*ʮһSF6Ũ*/ - int iO2Thick11; /*ʮһŨ*/ - int iTemprature11; /*ʮһ¶*/ - int iHumidity11; /*ʮһʪ*/ - int iSf6Thick12; /*ʮSF6Ũ*/ - int iO2Thick12; /*ʮŨ*/ - int iTemprature12; /*ʮ¶*/ - int iHumidity12; /*ʮʪ*/ - BYTE byFanState1; /*״̬1 1У2ֹͣ*/ - BYTE byFanState2; /*״̬2 1У2ֹͣ*/ - BYTE byFanState3; /*״̬3 1У2ֹͣ*/ - BYTE byFanState4; /*״̬4 1У2ֹͣ*/ - BYTE byFanState5; /*״̬5 1У2ֹͣ*/ - BYTE byFanState6; /*״̬6 1У2ֹͣ*/ - BYTE byFanState7; /*״̬7 1У2ֹͣ*/ - BYTE byFanState8; /*״̬8 1У2ֹͣ*/ - BYTE byFanState9; /*״̬9 1У2ֹͣ*/ - BYTE byFanState10; /*״̬10 1У2ֹͣ*/ - BYTE byFanState11; /*״̬11 1У2ֹͣ*/ - BYTE byFanState12; /*״̬12 1У2ֹͣ*/ + int iSf6Thick1; /*第一点SF6浓度*/ + int iO2Thick1; /*第一点氧气浓度*/ + int iTemprature1; /*第一点温度*/ + int iHumidity1; /*第一点湿度*/ + int iSf6Thick2; /*第二点SF6浓度*/ + int iO2Thick2; /*第二点氧气浓度*/ + int iTemprature2; /*第二点温度*/ + int iHumidity2; /*第三点湿度*/ + int iSf6Thick3; /*第三点SF6浓度*/ + int iO2Thick3; /*第三点氧气浓度*/ + int iTemprature3; /*第三点温度*/ + int iHumidity3; /*第三点湿度*/ + int iSf6Thick4; /*第四点SF6浓度*/ + int iO2Thick4; /*第四点氧气浓度*/ + int iTemprature4; /*第四点温度*/ + int iHumidity4; /*第四点湿度*/ + int iSf6Thick5; /*第五点SF6浓度*/ + int iO2Thick5; /*第五点氧气浓度*/ + int iTemprature5; /*第五点温度*/ + int iHumidity5; /*第五点湿度*/ + int iSf6Thick6; /*第六点SF6浓度*/ + int iO2Thick6; /*第六点氧气浓度*/ + int iTemprature6; /*第六点温度*/ + int iHumidity6; /*第六点湿度*/ + int iSf6Thick7; /*第七点SF6浓度*/ + int iO2Thick7; /*第七点氧气浓度*/ + int iTemprature7; /*第七点温度*/ + int iHumidity7; /*第七点湿度*/ + int iSf6Thick8; /*第八点SF6浓度*/ + int iO2Thick8; /*第八点氧气浓度*/ + int iTemprature8; /*第八点温度*/ + int iHumidity8; /*第八点湿度*/ + int iSf6Thick9; /*第九点SF6浓度*/ + int iO2Thick9; /*第九点氧气浓度*/ + int iTemprature9; /*第九点温度*/ + int iHumidity9; /*第九点湿度*/ + int iSf6Thick10; /*第十点SF6浓度*/ + int iO2Thick10; /*第十点氧气浓度*/ + int iTemprature10; /*第十点温度*/ + int iHumidity10; /*第十点湿度*/ + int iSf6Thick11; /*第十一点SF6浓度*/ + int iO2Thick11; /*第十一点氧气浓度*/ + int iTemprature11; /*第十一点温度*/ + int iHumidity11; /*第十一点湿度*/ + int iSf6Thick12; /*第十二点SF6浓度*/ + int iO2Thick12; /*第十二点氧气浓度*/ + int iTemprature12; /*第十二点温度*/ + int iHumidity12; /*第十二点湿度*/ + BYTE byFanState1; /*风机状态1 1:运行,2:停止*/ + BYTE byFanState2; /*风机状态2 1:运行,2:停止*/ + BYTE byFanState3; /*风机状态3 1:运行,2:停止*/ + BYTE byFanState4; /*风机状态4 1:运行,2:停止*/ + BYTE byFanState5; /*风机状态5 1:运行,2:停止*/ + BYTE byFanState6; /*风机状态6 1:运行,2:停止*/ + BYTE byFanState7; /*风机状态7 1:运行,2:停止*/ + BYTE byFanState8; /*风机状态8 1:运行,2:停止*/ + BYTE byFanState9; /*风机状态9 1:运行,2:停止*/ + BYTE byFanState10; /*风机状态10 1:运行,2:停止*/ + BYTE byFanState11; /*风机状态11 1:运行,2:停止*/ + BYTE byFanState12; /*风机状态12 1:运行,2:停止*/ BYTE byRes[308]; }NET_DVR_SF6_ALARMHOST_STATE, *LPNET_DVR_SF6_ALARMHOST_STATE; -//״̬ +//称重仪状态 typedef struct { - int iWeight; /*ֵ,1000*/ + int iWeight; /*称重值,1000倍*/ BYTE byRes[508]; }NET_DVR_WEIGHT_STATE, *LPNET_DVR_WEIGHT_STATE; -//ɼϵͳ״̬ +//气象采集系统状态 typedef struct { - int iAirTemperature; /* ¶*/ - DWORD dwAirHumidity; /* ʪ*/ - DWORD dwWindSpeed; /* */ - DWORD dwWindDirection; /* */ - DWORD dwIlluminationIntensity; /* ǿ*/ - DWORD dwCO2; /* co2Ũ*/ - DWORD dwPM25; /* PM2.5Ũ*/ - DWORD dwAirPressure; /* ѹ*/ - int iSoilTemperature; /* ¶*/ - DWORD dwSoilHumidity; /* ʪ*/ - DWORD dwRainFall; /**/ - BYTE byIsRainSnow; /* ѩ1-ѩ2-ѩ*/ + int iAirTemperature; /* 空气温度*/ + DWORD dwAirHumidity; /* 空气湿度*/ + DWORD dwWindSpeed; /* 风速*/ + DWORD dwWindDirection; /* 风向*/ + DWORD dwIlluminationIntensity; /* 光照强度*/ + DWORD dwCO2; /* co2浓度*/ + DWORD dwPM25; /* PM2.5浓度*/ + DWORD dwAirPressure; /* 大气压力*/ + int iSoilTemperature; /* 土壤温度*/ + DWORD dwSoilHumidity; /* 土壤湿度*/ + DWORD dwRainFall; /*降雨量*/ + BYTE byIsRainSnow; /* 雨雪情况,1-无雨雪,2-有雨雪*/ BYTE byRes[467]; }NET_DVR_WEATHER_STATION_STATE, *LPNET_DVR_WEATHER_STATION_STATE; -//ˮʾ״̬ +//水质显示仪状态 typedef struct { - DWORD dwTurbidity; /* Ƕֵ*/ - DWORD dwChlorine; /* ֵ*/ - DWORD dwPH; /* PH ֵ*/ + DWORD dwTurbidity; /* 浊度值*/ + DWORD dwChlorine; /* 余氯值*/ + DWORD dwPH; /* PH 值*/ BYTE byRes[500]; }NET_DVR_WATER_QLT_STATE, *LPNET_DVR_WATER_QLT_STATE; -//ȼʾϵͳ״̬ +//燃气显示系统状态 typedef struct { - int iNatrualGasThick; /* ȻŨ*/ + int iNatrualGasThick; /* 天然气浓度*/ BYTE byRes[508]; }NET_DVR_FUEL_GAS_DETE_STATE, *LPNET_DVR_FUEL_GAS_DETE_STATE; -//豸 +//消防主机设备 typedef struct tagNET_DVR_FIRE_ALARM_STATUS { - BYTE byFireAlarm[MAX_FIRE_ALARM_ZONE][MAX_FIRE_ALARM_POINT_ZONE]; //״̬λ1-2-澯 - BYTE byRes[128]; //λ + BYTE byFireAlarm[MAX_FIRE_ALARM_ZONE][MAX_FIRE_ALARM_POINT_ZONE]; //火点状态参数位,1-正常,2-告警 + BYTE byRes[128]; //保留位 }NET_DVR_FIRE_ALARM_STATUS, *LPNET_DVR_FIRE_ALARM_STATUS; typedef union tagNET_DVR_EXTERNAL_DEVICE_STATE_UNION { - NET_DVR_ALARMHOST_UPS_STATE struUpsState; //UPS״̬ - NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_STATE struSwitchPowerState;//صԴ״̬ - NET_DVR_ALARMHOST_GAS_DETECTOR_STATE struGasDetectorState;//ϵͳ״̬ - NET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE struTempHumiSensorState;//ʪȴ״̬ - NET_DVR_ALARMHOST_AIRCONDITION_STATE struAirConditionState;//յ״̬ - NET_DVR_ALARMHOST_ELECTRICITY_STATE struElectricityState;//״̬ - NET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE struTransformerTempState; //״̬ - NET_DVR_ALARMHOST_WATERLEVEL_SENSOR struWaterLevelSensor;//ˮλ - NET_DVR_ALARMHOST_DUSTNOISE_SENSOR struDustNoiseSensor;//ﳾ - NET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER struEnvironmentLogger;//ɼ - NET_DVR_WIND_SPEED_STATE struWindSpeedState; //ٴ״̬ - NET_DVR_GENERATE_OUTPUT_STATE struGenerateOutputState; //ͨչģ״̬48·ÿλʾ1· - NET_DVR_SOAK_STATE struSoakState; //ˮ״̬ - NET_DVR_SOLAR_POWER_STATE struSolarPowerState; //̫ܿ״̬ - NET_DVR_SF6_ALARMHOST_STATE struSF6AlarmHostState; //SF6״̬ - NET_DVR_WEIGHT_STATE struWeightState; //״̬ - NET_DVR_WEATHER_STATION_STATE struWeatherStationState; //ɼϵͳ״̬ - NET_DVR_WATER_QLT_STATE struWaterQltState; //ˮʾ״̬ - NET_DVR_FUEL_GAS_DETE_STATE struFuelGasDeteState; //ȼʾϵͳ״̬ - NET_DVR_FIRE_ALARM_STATUS struFireAlarmStatus; //豸״̬ + NET_DVR_ALARMHOST_UPS_STATE struUpsState; //UPS状态 + NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_STATE struSwitchPowerState;//开关电源状态 + NET_DVR_ALARMHOST_GAS_DETECTOR_STATE struGasDetectorState;//气体检测系统状态 + NET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE struTempHumiSensorState;//温湿度传感器状态 + NET_DVR_ALARMHOST_AIRCONDITION_STATE struAirConditionState;//空调状态 + NET_DVR_ALARMHOST_ELECTRICITY_STATE struElectricityState;//电量表状态 + NET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE struTransformerTempState; //变电器状态 + NET_DVR_ALARMHOST_WATERLEVEL_SENSOR struWaterLevelSensor;//水位传感器 + NET_DVR_ALARMHOST_DUSTNOISE_SENSOR struDustNoiseSensor;//扬尘噪声传感器 + NET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER struEnvironmentLogger;//环境采集仪 + NET_DVR_WIND_SPEED_STATE struWindSpeedState; //风速传感器状态 + NET_DVR_GENERATE_OUTPUT_STATE struGenerateOutputState; //通用扩展输出模块状态(48路,每位表示1路) + NET_DVR_SOAK_STATE struSoakState; //浸水传感器状态 + NET_DVR_SOLAR_POWER_STATE struSolarPowerState; //太阳能控制器状态 + NET_DVR_SF6_ALARMHOST_STATE struSF6AlarmHostState; //SF6报警主机状态 + NET_DVR_WEIGHT_STATE struWeightState; //称重仪状态 + NET_DVR_WEATHER_STATION_STATE struWeatherStationState; //气象采集系统状态 + NET_DVR_WATER_QLT_STATE struWaterQltState; //水质显示仪状态 + NET_DVR_FUEL_GAS_DETE_STATE struFuelGasDeteState; //燃气显示系统状态 + NET_DVR_FIRE_ALARM_STATUS struFireAlarmStatus; //消防主机设备状态 BYTE byRes[512]; } NET_DVR_EXTERNAL_DEVICE_STATE_UNION, *LPNET_DVR_EXTERNAL_DEVICE_STATE_UNION; typedef struct tagNET_DVR_ALARMHOST_EXTERNAL_DEVICE_STATE { DWORD dwSize; - BYTE byDevType; //1-UPS2-صԴ3-ϵͳ4-ʪȴ5-յ6-7-״̬, 8-ˮλ9-ﳾ10-ɼǡ11-ٴ״̬12-ͨչģ״̬13-ˮ״̬14-̫ܿ״̬15-SF6״̬16-״̬17-ɼϵͳ״̬18-ˮʼ״̬19-ȼʾϵͳ״̬20-״̬ + BYTE byDevType; //1-UPS,2-开关电源,3-气体检测系统,4-温湿度传感器,5-空调,6-电量表,7-变电器状态, 8-水位传感器、9-扬尘噪声传感器、10-环境采集仪、11-风速传感器状态、12-通用扩展输出模块状态、13-浸水传感器状态、14-太阳能控制器状态、15-SF6报警主机状态、16-称重仪状态、17-气象采集系统状态、18-水质检测仪状态、19-燃气显示系统状态、20-消防主机状态 BYTE byRes1[3]; NET_DVR_EXTERNAL_DEVICE_STATE_UNION struDevState; BYTE byRes2[32]; } NET_DVR_ALARMHOST_EXTERNAL_DEVICE_STATE, *LPNET_DVR_ALARMHOST_EXTERNAL_DEVICE_STATE; -//ͨչģƣ48·ÿλʾ1· +//通用扩展输出模块控制(48路,每位表示1路) typedef struct { DWORD dwSize; @@ -36053,32 +36053,32 @@ typedef struct BYTE byOutPutState4; /*output25-32*/ BYTE byOutPutState5; /*output33-40*/ BYTE byOutPutState6; /*output41-48*/ - BYTE byOperateType; //ͣ0-Ч1-2- + BYTE byOperateType; //操作类型,0-无效,1-开,2-关 BYTE Res[65]; }NET_DVR_GENERATE_OUTPUT_CTRL, *LPNET_DVR_GENERATE_OUTPUT_CTRL; -//UPSֵ +//UPS报警限值 typedef struct tagNET_DVR_ALARMHOST_UPS_LIMIT_VALUE { - int iInputVolHigh; //Խѹֵ(ֵ) - int iInputVolLow; //Խѹֵ(ֵ) - int iInputFreHigh; //ԽƵֵ(ֵ) - int iInputFreLow; //ԽƵֵ(ֵ) - int iOutputVolHigh; //Խѹֵ(ֵ) - int iOutputVolLow; //Խѹֵ(ֵ) - int iBatteryVoltageLow; //ص͵ѹֵ - int iBatterySurplus; //غʱ ֵ - int iBatteryTemperatureHigh;//¶ȸֵ - BYTE byRes[64]; // + int iInputVolHigh; //越限输入电压值(高值) + int iInputVolLow; //越限输入电压值(低值) + int iInputFreHigh; //越限输入频率值(高值) + int iInputFreLow; //越限输入频率值(低值) + int iOutputVolHigh; //越界输出电压值(高值) + int iOutputVolLow; //越界输出电压值(低值) + int iBatteryVoltageLow; //电池低电压限值 + int iBatterySurplus; //电池后备时间低 限值 + int iBatteryTemperatureHigh;//电池温度高限值 + BYTE byRes[64]; //保留 }NET_DVR_ALARMHOST_UPS_LIMIT_VALUE, *LPNET_DVR_ALARMHOST_UPS_LIMIT_VALUE; -//ʪȴֵ +//温湿度传感器限值 typedef struct tagNET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_LIMIT_VALUE { - int iTemperatureHighLimit; //¶ȸֵλ϶ - int iTemperatureLowLimit; //¶ȵֵλ϶ - int iHumidityHighLimit; //ʪȸֵλ% - int iHumidityLowLimit; //ʪȵֵλ% + int iTemperatureHighLimit; //温度高限值,单位摄氏度 + int iTemperatureLowLimit; //温度低限值,单位摄氏度 + int iHumidityHighLimit; //湿度高限值,单位% + int iHumidityLowLimit; //湿度低限值,单位% BYTE byRes[84]; } NET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_LIMIT_VALUE, *LPNET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_LIMIT_VALUE; @@ -36091,86 +36091,86 @@ typedef union tagNET_DVR_EXTERNAL_DEVICE_LIMIT_VALUE_UNION typedef struct tagNET_DVR_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE { DWORD dwSize; - BYTE byDevType; //1-UPS2-ʪȴ + BYTE byDevType; //1-UPS,2-温湿度传感器 BYTE byRes1[3]; NET_DVR_EXTERNAL_DEVICE_LIMIT_VALUE_UNION struAlarmValue; BYTE byRes2[32]; }NET_DVR_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE, *LPNET_DVR_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE; -#define ALARMHOST_ALARMOUT_NUM 64 // -#define MAX_OSD_UNIT_LEN 8 //OSDλ +#define ALARMHOST_ALARMOUT_NUM 64 //触发器个数 +#define MAX_OSD_UNIT_LEN 8 //OSD单位长度 typedef struct tagNET_DVR_ALARMHOST_SENSOR_JOINT_CFG { DWORD dwSize; - BYTE bySensorJointAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM/*512*/];//ģ0-1- - BYTE bySensorJointSiren[ALARMHOST_MAX_SIREN_NUM/*8*/];//ģ - BYTE bySensorAlarmTypeJointAlarmOut[ALARMHOST_ALARMOUT_NUM/*64*/];//ģֶbySensorJointAlarmOutչ±ʾţԪصֵλʾͣͼ""Ĺϵֵ壺1bit0-1bit1-2bit2-3bit3-4bit4- - BYTE bySesorAlarmTypeJointSiren[ALARMHOST_MAX_SIREN_NUM]; //ģţֶbySensorJointSirenչ±ʾţԪصֵλʾͣͼ""Ĺϵֵ壺bit0-1bit1-2bit2-3bit3-4bit4- - BYTE byChan; //ͨ + BYTE bySensorJointAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM/*512*/];//模拟量联动触发器,0-不联动,1-联动 + BYTE bySensorJointSiren[ALARMHOST_MAX_SIREN_NUM/*8*/];//模拟量联动警号 + BYTE bySensorAlarmTypeJointAlarmOut[ALARMHOST_ALARMOUT_NUM/*64*/];//模拟量按类型联动触发器,该字段是bySensorJointAlarmOut的扩展。数组下标表示触发器号,数组元素的值按位表示报警类型,各个类型间是"或"的关系。类型值定义:1bit0-限1;bit1-限2;bit2-限3;bit3-限4;bit4-故障 + BYTE bySesorAlarmTypeJointSiren[ALARMHOST_MAX_SIREN_NUM]; //模拟量按类型联动警号,该字段是bySensorJointSiren的扩展。数组下标表示警号序号,数组元素的值按位表示报警类型,各个类型间是"或"的关系。类型值定义:bit0-限1;bit1-限2;bit2-限3;bit3-限4;bit4-故障 + BYTE byChan; //通道号 BYTE byRes[55]; }NET_DVR_ALARMHOST_SENSOR_JOINT_CFG, *LPNET_DVR_ALARMHOST_SENSOR_JOINT_CFG; -//UPSϢϴ +//UPS报警信息上传 typedef struct tagNET_DVR_ALARMHOST_UPS_ALARMINFO { - BYTE byAlarmType;/*ͣ1.AѹԽ 2.BѹԽ 3.CѹԽ 4.AѹԽ5.BѹԽ 6.CѹԽ7.AƵԽ 8.BƵԽ9.CƵԽ10.ѹԽޱ 11.ر 12.صѹͱ 13.غʱ䳬ͱ 14.¶ȳ߱ 15.رձ 16.Զ· 17.ϱ 18.ϱ 19.ϱ 20.عϱ 21.Զ·ϱ */ - BYTE byChanNo; //485ͨţ1ʼ - BYTE bySlotNo; //485λ - BYTE byRes1; // - int iAlarmValue;//ֵ - BYTE byRes2[64]; // + BYTE byAlarmType;/*报警类型:1.A相输入电压越限 2.B相输入电压越限 3.C相输入电压越限 4.A相输出电压越限5.B相输出电压越限 6.C相输出电压越限7.A相输入频率越限 8.B相输入频率越限9.C相输入频率越限10.整流器电压越限报警 11.过载报警 12.电池电压低报警 13.电池后备时间超低报警 14.电池温度超高报警 15.逆变器关闭报警 16.自动旁路开报警 17.整流器故障报警 18.逆变器故障报警 19.充电器故障报警 20.电池故障报警 21.自动旁路故障报警 */ + BYTE byChanNo; //485通道号,从1开始 + BYTE bySlotNo; //485虚拟槽位号 + BYTE byRes1; //保留 + int iAlarmValue;//报警值 + BYTE byRes2[64]; //保留 }NET_DVR_ALARMHOST_UPS_ALARMINFO, *LPNET_DVR_ALARMHOST_UPS_ALARMINFO; -//صԴϴ +//开关电源报警上传 typedef struct tagNET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO { - BYTE byAlarmType; /*ͣ1-زʧ 2-AC-DCתϣ3-/ѹAB/AԽޣ4-/ѹBC/BԽޣ5-/ѹCA/CԽޣ6-AԽޣ7-BԽޣ8-CԽޣ9ģϣ10-ȹϣ11-ֱѹԽ*/ - BYTE byChanNo; //485ͨţ1ʼ - BYTE bySlotNo; //485λ + BYTE byAlarmType; /*报警类型:1-电池测试失败 2-AC-DC转换器故障,3-输入线/相电压AB/A越限,4-输入线/相电压BC/B越限,5-输入线/相电压CA/C越限,6-输出电流A越限,7-输出电流B越限,8-输出电流C越限,9整流模块故障,10-风扇故障,11-直流电压越限*/ + BYTE byChanNo; //485通道号,从1开始 + BYTE bySlotNo; //485虚拟槽位号 BYTE byRes1; - int iAlarmValue; //ֵ + int iAlarmValue; //报警值 BYTE byRes2[64]; }NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO, *LPNET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO; -//ϵͳ +//气体检测系统报警 typedef struct tagNET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO { - BYTE byAlarmType; /*ͣ1- SF6庬쳣2-쳣3-¶ֵ쳣4-ʪֵ쳣5-*/ - BYTE byChanNo; //485ͨţ1ʼ - BYTE bySlotNo; //485λ + BYTE byAlarmType; /*报警类型:1- SF6气体含量异常,2-氧气含量异常,3-温度值异常,4-湿度值异常,5-流量*/ + BYTE byChanNo; //485通道号,从1开始 + BYTE bySlotNo; //485虚拟槽位号 BYTE byRes1; - int iAlarmValue; //ֵ + int iAlarmValue; //报警值 BYTE byRes2[64]; }NET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO, *LPNET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO; -//ʪȴ +//温湿度传感器报警 typedef struct tagNET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO { - BYTE byAlarmType; //1-¶쳣2-ʪ쳣 - BYTE byChanNo; //485ͨ - BYTE bySlotNo; //485λ + BYTE byAlarmType; //1-温度异常,2-湿度异常 + BYTE byChanNo; //485通道号 + BYTE bySlotNo; //485槽位号 BYTE byRes1; - int iAlarmValue; //ֵ + int iAlarmValue; //报警值 BYTE byRes2[64]; } NET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO, *LPNET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO; typedef union tagNET_DVR_485_DEVICE_ALARM_UNION { - NET_DVR_ALARMHOST_UPS_ALARMINFO struUPSAlarm; //UPS - NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO struSwitchPowerAlarm; //صԴ - NET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO struGasDetectSystemAlarm; //ϵͳ - NET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO struTempHumiditySensorAlarm; //ʪȴ + NET_DVR_ALARMHOST_UPS_ALARMINFO struUPSAlarm; //UPS报警 + NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO struSwitchPowerAlarm; //开关电源报警 + NET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO struGasDetectSystemAlarm; //气体检测系统报警 + NET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO struTempHumiditySensorAlarm; //温湿度传感器报警 BYTE byRes[72]; } NET_DVR_485_DEVICE_ALARM_UNION, *LPNET_DVR_485_DEVICE_ALARM_UNION; -//485豸Ϣ +//485外接设备报警信息 typedef struct tagNET_DVR_485_EXTERNAL_DEVICE_ALARMINFO { DWORD dwSize; - BYTE byAlarmType; //1-UPS2-صԴ3-ϵͳ4-ʪȴ + BYTE byAlarmType; //1-UPS报警,2-开关电源报警,3-气体检测系统报警,4-温湿度传感器报警 BYTE byRes1[3]; NET_DVR_485_DEVICE_ALARM_UNION struAlarmInfo; BYTE byRes2[16]; @@ -36178,162 +36178,162 @@ typedef struct tagNET_DVR_485_EXTERNAL_DEVICE_ALARMINFO typedef struct tagNET_DVR_ALARMHOST_RS485_SLOT_CFG { - DWORD dwSize; // ṹС - BYTE sDeviceName[NAME_LEN]; // ǰ豸 - WORD wDeviceType; // ǰ豸ALARM_FRONT_DEVICE _TYPE - WORD wDeviceProtocol; // ǰ豸Э ͨȡЭбȡ - WORD wAddress; //豸ַ - BYTE byChannel; //485ͨ - BYTE bySlotChan; //λ - BYTE byRes[60]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE sDeviceName[NAME_LEN]; // 前端设备名称 + WORD wDeviceType; // 前端设备类型ALARM_FRONT_DEVICE _TYPE + WORD wDeviceProtocol; // 前端设备协议 通过获取协议列表获取 + WORD wAddress; //设备地址 + BYTE byChannel; //485通道号 + BYTE bySlotChan; //槽位号 + BYTE byRes[60]; // 保留字节 }NET_DVR_ALARMHOST_RS485_SLOT_CFG, *LPNET_DVR_ALARMHOST_RS485_SLOT_CFG; -//ģʽ +//走廊模式 typedef struct tagNET_DVR_CORRIDOR_MODE { DWORD dwSize; - BYTE byEnableCorridorMode; //Ƿģʽ 0ã 1 - BYTE byMirrorMode; //ʽ0 ر;1 ;2 ;3 м + BYTE byEnableCorridorMode; //是否启用走廊模式 0~不启用, 1~启用 + BYTE byMirrorMode; //镜像方式,0 关闭;1 左右;2 上下;3 中间 BYTE byRes[126]; }NET_DVR_CORRIDOR_MODE, *LPNET_DVR_CORRIDOR_MODE; -// +//人脸侦测 typedef struct tagNET_DVR_DETECT_FACE { DWORD dwSize; - BYTE byEnableDetectFace; //Ƿ 0ã 1 - BYTE byDetectSensitive; // 10ȼ 110 - BYTE byEnableDisplay; /*ƶʾ0-1-*/ + BYTE byEnableDetectFace; //是否启用 0~不启用, 1~启用 + BYTE byDetectSensitive; //灵敏度 10个等级 1~10 + BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/ BYTE byRes; - NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*ʽ*/ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ */ - DWORD dwMaxRelRecordChanNum; //¼ͨ ֻ֧ - DWORD dwRelRecordChanNum; //¼ͨ ʵ֧ - DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* ¼ͨ*/ - NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //ղʱ - WORD wDuration; //ʱ 5s + NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*处理方式*/ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间 */ + DWORD dwMaxRelRecordChanNum; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum; //报警触发的录象通道数 实际支持数 + DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* 报警触发的录象通道*/ + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //假日布防时间 + WORD wDuration; //报警持续时间 5s 能力集 BYTE byRes1[30]; }NET_DVR_DETECT_FACE, *LPNET_DVR_DETECT_FACE; typedef struct tagNET_DVR_MUL_STREAM_CHANNEL_GROUP { - DWORD dwSize; // ṹС - DWORD dwGroup ; // - NET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND struMultiStreamCfg; // + DWORD dwSize; // 结构体大小 + DWORD dwGroup ; //组号 + NET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND struMultiStreamCfg; //多码流配置 BYTE byRes[64] ; }NET_DVR_MUL_STREAM_CHANNEL_GROUP,*LPNET_DVR_MUL_STREAM_CHANNEL_GROUP; typedef struct tagNET_DVR_CHANNEL_GROUP { - DWORD dwSize; // ṹС - DWORD dwChannel; //ͨ - DWORD dwGroup; // - BYTE byID; //豸ID + DWORD dwSize; // 结构体大小 + DWORD dwChannel; //通道号 + DWORD dwGroup; //组号 + BYTE byID; //设备区域设置ID BYTE byRes1[3]; - DWORD dwPositionNo; //λ,IPC0IPDǴ1ʼ + DWORD dwPositionNo; //场景位置索引号,IPC是0,IPD是从1开始 BYTE byRes[56]; }NET_DVR_CHANNEL_GROUP, *LPNET_DVR_CHANNEL_GROUP; typedef struct tagNET_DVR_TIME_DETECTION { - NET_DVR_SCHEDTIME struSchedTime; //ʱ - BYTE byDetSceneID;//ⳡ[1,4],IPCĬ0 + NET_DVR_SCHEDTIME struSchedTime; //时间 + BYTE byDetSceneID;//检测场景号[1,4],IPC默认是0 BYTE byRes[15]; }NET_DVR_TIME_DETECTION,*LPNET_DVR_TIME_DETECTION; -//ץĴģʽֹ֧ʱκϴ +//抓拍触发模式支持关联布防时间段和上传中心条件 typedef struct tagNET_DVR_GUARD_COND { DWORD dwSize; - DWORD dwChannel; //ͨ + DWORD dwChannel; //通道号 /* - 0ʾЧ - 1ʾ ץVIAģʽƵץ IPCʹã; - 2 ʾ ץ HVT ģʽ 쿨IPCʹã + 0表示无效, + 1表示关联 抓拍VIA模式(视频触发抓拍 IPC使用); + 2 表示关联 抓拍 HVT 模式 (混卡IPC使用) */ BYTE byRelateType; - BYTE byGroupNo; // + BYTE byGroupNo; //组号 BYTE byRes[62]; }NET_DVR_GUARD_COND,*LPNET_DVR_GUARD_COND; -//ץĴģʽֹ֧ʱκϴ +//抓拍触发模式支持关联布防时间段和上传中心 typedef struct tagNET_DVR_GUARD_CFG { DWORD dwSize; - //ʱ + //布防时间 NET_DVR_TIME_DETECTION struAlarmSched[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/]; - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ - DWORD dwMaxRelRecordChanNum ; //¼ͨ ֻ֧ - DWORD dwRelRecordChanNum ; //ʵʴ¼ͨ - DWORD dwRelRecordChan[MAX_CHANNUM_V30]; //¼ͨ(0xffff ffffʾЧ - NET_DVR_TIME_DETECTION struHolidayTime[MAX_TIMESEGMENT_V30]; //ղʱ - BYTE byDirection;//0-1-ȫ2-3- + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //本组内实际触发的录象通道数 + DWORD dwRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道(0xffff ffff表示后续无效) + NET_DVR_TIME_DETECTION struHolidayTime[MAX_TIMESEGMENT_V30]; //假日布防时间 + BYTE byDirection;//触发方向:0-保留;1-全部;2-正向;3-反向 BYTE byRes[87]; }NET_DVR_GUARD_CFG,*LPNET_DVR_GUARD_CFG; -//ץͼƬչṹ +//抓拍图片参数配置扩展条件结构 typedef struct tagNET_DVR_SNAPINFO_COND_ { DWORD dwSize; DWORD dwChan; /* - 0 ʾ ץMPRģʽ֡ץ IPCʹã - 1 ʾ ץ HVT ģʽ쿨IPCʹã + 0 表示关联 抓拍MPR模式(多帧触发抓拍 IPC使用) + 1 表示关联 抓拍 HVT 模式(混卡IPC使用) */ BYTE byRelateType; - BYTE byRes[63]; // + BYTE byRes[63]; //保留 }NET_DVR_SNAPINFO_COND, *LPNET_DVR_SNAPINFO_COND; -//ץͼƬ +//抓拍图片参数配置 typedef struct tagNET_DVR_SNAPINFOCFG { DWORD dwSize; - BYTE byCurPicType;//0-ʾͼƬ1-ʾͼƬС - BYTE byPicQuality;//ͼƬ[1,100] + BYTE byCurPicType;//0-表示的图片质量,1-表示图片大小 + BYTE byPicQuality;//图片质量[1,100] BYTE byRes1[2]; - DWORD dwPicSize;//ͼƬС[64k,2048k] + DWORD dwPicSize;//图片大小[64k,2048k] BYTE byRes2[128]; }NET_DVR_SNAPINFOCFG,*LPNET_DVR_SNAPINFOCFG; -//ptzٷʽ +//ptz跟踪方式 typedef enum _PTZ_TRACK_MODE_ { - PTZ_TRACK_MODE_ALWAYS = 1, //һֱ - PTZ_TRACK_MODE_BYTIME = 2, //ָʱ - PTZ_TRACK_MODE_NEXT = 3, //һĿ + PTZ_TRACK_MODE_ALWAYS = 1, //一直 + PTZ_TRACK_MODE_BYTIME = 2, //指定时间 + PTZ_TRACK_MODE_NEXT = 3, //下一目标 }PTZ_TRACK_MODE; -//ptz +//ptz参数 typedef struct _NET_DVR_PTZ_TRACK_PARAM_ { - DWORD dwSize; //ṹС - BYTE byTrackMode; //ʽ,οPTZ_TRACK_MODE - BYTE byLinkageTarget; //Ŀ0-Ĭ,1-1,2-2.. - BYTE byAutoTrackEnable;//ʹ 0-Զ1-Զرգǹ豸֧Զرչܣڴչ - BYTE byRes1; // - DWORD dwTrackTime; //ʱ䣬 - //ģʽΪPTZ_TRACK_MODE_ALWAYSֶЧ - //ģʽΪPTZ_TRACK MODE_BYTIMEʱΧ[1,60]Ĭ10 - //ģʽΪPTZ_TRACK MODE_NEXTʱΧ[1,10]Ĭ2 - BYTE byRes2[256]; // + DWORD dwSize; //结构体大小 + BYTE byTrackMode; //方式,参考PTZ_TRACK_MODE + BYTE byLinkageTarget; //联动目标0-默认,1-球机1,2-球机2…..依次类推 + BYTE byAutoTrackEnable;//使能 0-自动开启,1-自动关闭(枪球设备才支持自动关闭功能,故在此特殊扩展) + BYTE byRes1; //保留 + DWORD dwTrackTime; //时间, + //当模式为PTZ_TRACK_MODE_ALWAYS,此字段无效 + //当模式为PTZ_TRACK MODE_BYTIME时,范围[1,60],默认10秒 + //当模式为PTZ_TRACK MODE_NEXT时,范围[1,10],默认2秒 + BYTE byRes2[256]; //保留 }NET_DVR_PTZ_TRACK_PARAM,*LPNET_DVR_PTZ_TRACK_PARAM; typedef struct tagNET_VCA_TRAVERSE_PLANEPARAM { DWORD dwSize; - BYTE byEnable;//ʹ - BYTE byEnableDualVca;// ֧ܺ 0-ã1- - BYTE byEnableHumanMisinfoFilter;// ȥ 0-ã1- - BYTE byEnableVehicleMisinfoFilter;// óȥ 0-ã1- - NET_VCA_TRAVERSE_PLANE struAlertParam[MAX_ALERTLINE_NUM]; //߲ + BYTE byEnable;//使能 + BYTE byEnableDualVca;// 启用支持智能后检索 0-不启用,1-启用 + BYTE byEnableHumanMisinfoFilter;// 启用人体去误报 0-不启用,1-启用 + BYTE byEnableVehicleMisinfoFilter;// 启用车辆去误报 0-不启用,1-启用 + NET_VCA_TRAVERSE_PLANE struAlertParam[MAX_ALERTLINE_NUM]; //警戒线参数 NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ - DWORD dwMaxRelRecordChanNum ; //¼ͨ ֻ֧ - DWORD dwRelRecordChanNum ; //¼ͨ ʵֵ֧ - DWORD byRelRecordChan[MAX_CHANNUM_V30];//¼ͨ - NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //ղʱ + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD byRelRecordChan[MAX_CHANNUM_V30];//触发录像的通道号 + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //假日布防时间 BYTE byRes2[100]; }NET_VCA_TRAVERSE_PLANE_DETECTION, *LPNET_VCA_TRAVERSE_PLANE_DETECTION; @@ -36341,17 +36341,17 @@ typedef struct tagNET_VCA_TRAVERSE_PLANEPARAM typedef struct tagNET_VCA_FIELDDETECION { DWORD dwSize; - BYTE byEnable; //ʹܣǷ - BYTE byEnableDualVca;// ֧ܺ 0-ã1- - BYTE byEnableHumanMisinfoFilter;// ȥ 0-ã1- - BYTE byEnableVehicleMisinfoFilter;// óȥ 0-ã1- - NET_VCA_INTRUSION struIntrusion[MAX_INTRUSIONREGION_NUM];//ÿIJ - NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //ʱ - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ - DWORD dwMaxRelRecordChanNum ; //¼ͨ ֻ֧ - DWORD dwRelRecordChanNum ; //¼ͨ ʵֵ֧ - DWORD byRelRecordChan[MAX_CHANNUM_V30];//¼ͨ - NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30/*8*/]; //ղʱ + BYTE byEnable; //使能,是否开启 + BYTE byEnableDualVca;// 启用支持智能后检索 0-不启用,1-启用 + BYTE byEnableHumanMisinfoFilter;// 启用人体去误报 0-不启用,1-启用 + BYTE byEnableVehicleMisinfoFilter;// 启用车辆去误报 0-不启用,1-启用 + NET_VCA_INTRUSION struIntrusion[MAX_INTRUSIONREGION_NUM];//每个区域的参数设置 + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //布防时间 + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD byRelRecordChan[MAX_CHANNUM_V30];//触发录像通道 + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30/*8*/]; //假日布防时间 BYTE byRes2[100]; }NET_VCA_FIELDDETECION, *LPNET_VCA_FIELDDETECION; @@ -36359,307 +36359,307 @@ typedef struct tagNET_DVR_ROI_DETECT_NUM { DWORD dwSize; DWORD dwGroup; - DWORD dwStreamType; //ͣ0-1-2-¼ͣ3-3 - DWORD dwRoiFixNum; //̶ȷٴλȡ - DWORD dwRoiFixID[MAX_ROIDETECT_NUM];//IPC֧4֧24 - BYTE szFixRoiName[MAX_ROIDETECT_NUM][NAME_LEN];//̶ROI - DWORD dwRoiTrackNum; //Զȷٴλȡ - DWORD dwRoiTrackID[MAX_ROIDETECT_NUM];//IPC֧4֧24 + DWORD dwStreamType; //码流类型,0-主码流,1-子码流,2-事件类型,3-码流3,…… + DWORD dwRoiFixNum; //固定区域总数,确定后续再次获取的组号 + DWORD dwRoiFixID[MAX_ROIDETECT_NUM];//IPC现在支持4个,球机现在支持24个 + BYTE szFixRoiName[MAX_ROIDETECT_NUM][NAME_LEN];//固定ROI区域名称 + DWORD dwRoiTrackNum; //自动区域总数,确定后续再次获取的组号 + DWORD dwRoiTrackID[MAX_ROIDETECT_NUM];//IPC现在支持4个,球机现在支持24个 BYTE byRes[320]; }NET_DVR_ROI_DETECT_NUM, *LPNET_DVR_ROI_DETECT_NUM; typedef enum _DETECT_ROI_TYPE_ { - DETECT_FIX_ROI = 0, //ROI̶ - DETECT_TRACK_ROI = 1 //ROI Զ + DETECT_FIX_ROI = 0, //检测ROI固定区域 + DETECT_TRACK_ROI = 1 //检测ROI 自动区域 }DETECT_ROI_TYPE; -// +//条件参数 typedef struct tagNET_DVR_ROI_DETECT_COND { DWORD dwSize; - DWORD dwRoiID; // һPTZ֧4 - NET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND struMultiStreamCfg; // - BYTE byRoiDetectType; // DECTECT_ROI_TYPE ֵ - BYTE byRoiDetectTrackType;//̶ʱֶЧʱ1⣨IPC,2ƶ,3- + DWORD dwRoiID; //区域检测号 一个PTZ支持4个 + NET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND struMultiStreamCfg; //多码流配置 + BYTE byRoiDetectType; // DECTECT_ROI_TYPE 的值 + BYTE byRoiDetectTrackType;//固定区域时,该字段无效;区域时,1~人脸侦测(IPC),2~移动物体,3-车牌 BYTE byRes[30]; }NET_DVR_ROI_DETECT_COND,*LPNET_DVR_ROI_DETECT_COND; -//ò -//ROI̶ģʽ 빦 +//配置参数 +//ROI固定区域模式 区域编码功能 typedef struct tagNET_DVR_ROI_FIX_RECT_CFG { - BYTE byEnableFixRoi; // ROI̶ģʽ Ƿ 0ã 1 - BYTE byImageQualityLevel; //ͼȼ 16 + BYTE byEnableFixRoi; // ROI固定区域模式 是否启用 0~不启用, 1~启用 + BYTE byImageQualityLevel; //图像质量提升等级 1~6 BYTE byRes[2]; BYTE szFixRoiName[NAME_LEN]; - NET_VCA_RECT struRoiRect; //ROI + NET_VCA_RECT struRoiRect; //ROI区域 BYTE byRes1[468]; }NET_DVR_ROI_FIX_RECT_CFG, *LPNET_DVR_ROI_FIX_RECT_CFG; -//ROIԶģʽ 빦 +//ROI自动模式 区域编码功能 typedef struct tagNET_DVR_ROI_TRACK_RECT_CFG { - BYTE byEnableTrackRoi; // ROIԶģʽ Ƿ 0ã 1 - BYTE byImageQualityLevel; //ͼȼ 16 - BYTE byModeType;// 0 ~ , 1ģʽ(ƶ;ֹ), 2~ƶ(ƶ), 3- + BYTE byEnableTrackRoi; // ROI自动模式 是否启用 0~不启用, 1~启用 + BYTE byImageQualityLevel; //图像质量提升等级 1~6 + BYTE byModeType;// 0 ~ 无, 1~人脸模式(移动和静止的物体), 2~移动物体(移动的物体), 3-车牌 BYTE byRes[509]; }NET_DVR_ROI_TRACK_RECT_CFG, *LPNET_DVR_ROI_TRACK_RECT_CFG; typedef union tagNET_DVR_ROI_DETECT_UNION { DWORD uLen[128]; - NET_DVR_ROI_FIX_RECT_CFG strRoiFixRectCfg;//̶ģʽ - NET_DVR_ROI_TRACK_RECT_CFG strRoiTrackRectCfg;//Զģʽ + NET_DVR_ROI_FIX_RECT_CFG strRoiFixRectCfg;//固定区域模式 + NET_DVR_ROI_TRACK_RECT_CFG strRoiTrackRectCfg;//自动模式 }NET_DVR_ROI_DETECT_UNION,*LPNET_DVR_ROI_DETECT_UNION; typedef struct tagNET_DVR_ROI_DETECT_CFG { DWORD dwSize; //560 - DWORD dwStreamType; //ͣ0-1-2-¼ͣ3-3 - BYTE byRoiDetectType; // DECTECT_ROI_TYPE ֵ + DWORD dwStreamType; //码流类型,0-主码流,1-子码流,2-事件类型,3-码流3,…… + BYTE byRoiDetectType; // DECTECT_ROI_TYPE 的值 BYTE byRes[3]; - NET_DVR_ROI_DETECT_UNION uRoiDetectInfo; //ROI + NET_DVR_ROI_DETECT_UNION uRoiDetectInfo; //ROI检测区域 BYTE byRes1[36]; }NET_DVR_ROI_DETECT_CFG, *LPNET_DVR_ROI_DETECT_CFG; -//齹 +//虚焦侦测 typedef struct tagNET_VCA_DEFOCUSPARAM { DWORD dwSize; - BYTE byEnable;//ʹ - BYTE bySensitiveLevel;// 1-100Ĭ50ԽߣԽױ + BYTE byEnable;//使能 + BYTE bySensitiveLevel;// 1-100,默认50,灵敏度越高,越容易报警 BYTE byRes1[2]; - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 BYTE byRes2[24]; }NET_VCA_DEFOCUSPARAM,*LPNET_VCA_DEFOCUSPARAM; typedef struct tagNET_PTZ_INFO_EX { - float fPan;//Pֵ ȷС3λ Χ[0,360.000] - float fTilt; //Zֵ ȷС3λ Χ[-90.000,90.000] - float fVisibleZoom;//ɼzoom ȷС1λ ᳬ[010000.0] - DWORD dwVisibleFocus;//ɼfocus[0,65535] - float fThermalZoom;//ȳzoom ȷС1λ ᳬ[010000.0] - DWORD dwThermalFocus;//ȳfocus[0,65535] + float fPan;//P值 精确到小数点后3位 范围[0,360.000] + float fTilt; //Z值 精确到小数点后3位 范围[-90.000,90.000] + float fVisibleZoom;//可见光zoom 精确到小数点后1位 不会超过[0,10000.0] + DWORD dwVisibleFocus;//可见光focus[0,65535] + float fThermalZoom;//热成像zoom 精确到小数点后1位 不会超过[0,10000.0] + DWORD dwThermalFocus;//热成像focus[0,65535] }NET_PTZ_INFO_EX, *LPNET_PTZ_INFO_EX; //IPC5.1.0 typedef struct tagNET_DVR_PRESET_NAME { DWORD dwSize; - WORD wPresetNum; //Ԥõ - BYTE byRes1[2]; //ֽڶ + WORD wPresetNum; //预置点编号 + BYTE byRes1[2]; //字节对齐 char byName[NAME_LEN]; - WORD wPanPos;//ˮƽ ȡݴ360Ĭϼȥ360 - WORD wTiltPos;//ֱ ȡݴ360Ĭϼȥ360 - WORD wZoomPos;//䱶ȡݴ360Ĭϼȥ360 + WORD wPanPos;//水平参数 如果获取到的数据大于360默认减去360 + WORD wTiltPos;//垂直参数 如果获取到的数据大于360默认减去360 + WORD wZoomPos;//变倍参数如果获取到的数据大于360默认减去360 BYTE byRes2; - BYTE byPTZPosExEnable; /*ǷPTZչ0~ãPTZֵwPanPoswTiltPoswZoomPosΪ׼1~ãPTZֵstruPtzPosExΪ׼*/ - NET_PTZ_INFO_EX struPtzPosEx;// ptzչ(ָ֧߾PTZֵ) + BYTE byPTZPosExEnable; /*是否启用PTZ坐标扩展,0~不启用,PTZ坐标值以wPanPos、wTiltPos、wZoomPos为准。1~启用,PTZ坐标值以struPtzPosEx为准*/ + NET_PTZ_INFO_EX struPtzPosEx;// ptz坐标扩展(支持高精度PTZ值) BYTE byRes[32]; }NET_DVR_PRESET_NAME, *LPNET_DVR_PRESET_NAME; typedef struct { - NET_DVR_SCHEDTIME struSchedTime; //ʱ - WORD wAction; ///< ʱ嶯 - WORD wActionNum; ///< ⶯ӱţԤõ㣬Ѳҹл + NET_DVR_SCHEDTIME struSchedTime; //时间 + WORD wAction; ///< 定时动作具体动作 + WORD wActionNum; ///< 特殊动作子编号,如预置点,巡航,花样,报警输出,日夜切换, BYTE byres[12]; }NET_DVR_SCHEDTASK,* LPNET_DVR_SCHEDTASK; -//ʱ +//定时任务 typedef struct tagNET_DVR_TIME_TASK { DWORD dwSize; - BYTE byTaskEnable; ///< ʹ 1-0- - BYTE byRes[3]; ///< ֽڶ - NET_DVR_SCHEDTASK struTask[MAX_DAYS][MAX_SCH_TASKS_NUM]; ///< 7죬ÿ10ʱ - DWORD dwParkTime; ///< ʱ 5s-720s + BYTE byTaskEnable; ///< 使能 1-开,0-关 + BYTE byRes[3]; ///< 字节对齐 + NET_DVR_SCHEDTASK struTask[MAX_DAYS][MAX_SCH_TASKS_NUM]; ///< 7天,每天10时间段 + DWORD dwParkTime; ///< 守望时间 5s-720s BYTE byRes1[64]; }NET_DVR_TIME_TASK,*LPNET_DVR_TIME_TASK; -//ṹ +//条件结构体 typedef struct tagNET_DVR_CHANNEL_INDEX { - DWORD dwSize; // ṹС - DWORD dwChannel ; //ͨ - DWORD dwIndex ; // + DWORD dwSize; // 结构体大小 + DWORD dwChannel ; //通道号 + DWORD dwIndex ; //索引号 BYTE byRes[64] ; }NET_DVR_CHANNEL_INDEX, *LPNET_DVR_CHANNEL_INDEX; typedef struct tagNET_DVR_AUDIO_NAME { - DWORD dwSize; // ṹС - char cName[NAME_LEN] ; // + DWORD dwSize; // 结构体大小 + char cName[NAME_LEN] ; //名称 BYTE byRes[64]; }NET_DVR_AUDIO_NAME, *LPNET_DVR_AUDIO_NAME; -//¼豸 +//登录设备参数 typedef struct tagNET_DVR_LOGIN_DEVICE_PARAM_ { - DWORD dwSize; //ṹС - BYTE byMobileDev; //豸, 0- ƶ豸, 1 - ƶ豸 - BYTE byRes[63]; // + DWORD dwSize; //结构体大小 + BYTE byMobileDev; //设备种类, 0- 非移动设备, 1 - 移动设备 + BYTE byRes[63]; //保留 }NET_DVR_LOGIN_DEVICE_PARAM, *LPNET_DVR_LOGIN_DEVICE_PARAM; typedef enum RECV_DATA_TYPE { - ENUM_RECV_ERRCODE = 0x0, //ش + ENUM_RECV_ERRCODE = 0x0, //返回错误码 } RECV_DATA_TYPE; -//ģʽ +//码流输出模式 typedef enum tagFISHEYE_STREAM_OUTPUT_MODE_ { - FISHEYE_STREAM_MODE_FISHEYE = 1, //ģʽ - FISHEYE_STREAM_MODE_PTZ = 2, //PTZģʽ - FISHEYE_STREAM_MODE_PANORAMA = 3 //ȫģʽ + FISHEYE_STREAM_MODE_FISHEYE = 1, //鱼眼模式 + FISHEYE_STREAM_MODE_PTZ = 2, //PTZ模式 + FISHEYE_STREAM_MODE_PANORAMA = 3 //全景模式 }FISHEYE_STREAM_OUTPUT_MODE; -//صö +//回调数据类型枚举 typedef enum _CALLBACK_TYPE_DATA_ENUM_ { - ENUM_FISHEYE_STREAM_STATUS = 1, //״̬ - ENUM_FISHEYE_PTZPOS = 2, //ptzͨǰģʽµ - ENUM_FISHEYE_REALTIME_OUTPUT = 3 //ʵʱģʽ + ENUM_FISHEYE_STREAM_STATUS = 1, //鱼眼码流输出状态 + ENUM_FISHEYE_PTZPOS = 2, //ptz通道当前所处鱼眼模式下的坐标 + ENUM_FISHEYE_REALTIME_OUTPUT = 3 //实时输出模式 }CALLBACK_TYPE_DATA_ENUM; -//״̬ +//鱼眼码流状态 typedef struct tagNET_DVR_FISHEYE_STREAM_STATUS_ { - DWORD dwSize; //ṹС - BYTE byStreamMode; //ģʽμFISHEYE_STREAM_OUTPUT_MODE - BYTE byRes[63]; // + DWORD dwSize; //结构体大小 + BYTE byStreamMode; //码流输出模式,参见FISHEYE_STREAM_OUTPUT_MODE + BYTE byRes[63]; //保留 }NET_DVR_FISHEYE_STREAM_STATUS,*LPNET_DVR_FISHEYE_STREAM_STATUS; -//ӻصݽṹ +//长连接回调数据结构体 typedef struct tagNET_DVR_CALLBACK_TYPE_DATA { - DWORD dwChannel; //ͨ - DWORD dwDataType; //μCALLBACK_TYPE_DATA_ENUM - DWORD dwDataLen; //ݳ - BYTE* pData; //ݣdwTypeDataΪ ENUM_FISHEYE_STREAM_STATUSӦΪNET_DVR_FISHEYE_STREAM_STATUS - BYTE byRes[64]; // + DWORD dwChannel; //通道号 + DWORD dwDataType; //参见CALLBACK_TYPE_DATA_ENUM + DWORD dwDataLen; //数据长度 + BYTE* pData; //数据,当dwTypeData为 ENUM_FISHEYE_STREAM_STATUS,其对应为NET_DVR_FISHEYE_STREAM_STATUS + BYTE byRes[64]; //保留 }NET_DVR_CALLBACK_TYPE_DATA,*LPNET_DVR_CALLBACK_TYPE_DATA; -//ptz϶ +//鱼眼ptz拖动参数 typedef struct tagNET_DVR_DRAG_POS_PARAM { - DWORD dwChannel; //ͨ - DWORD dwPtzChannel; //dwChannelָͨģʽΪFISHEYE_STREAM_MODE_FISHEYEģʽʱֵΪ϶ptzͨdwChannelͨģʽΪʱΪ0 - NET_VCA_POINT struToPoint; //϶ҪתĿ㣬ĿλԤϽ - NET_VCA_POINT struOriPoint; //϶ʼ,˵Ϊ϶ʼʱָԤϽǵλ - BYTE byRes[56]; // + DWORD dwChannel; //通道号 + DWORD dwPtzChannel; //当dwChannel所指通道模式为FISHEYE_STREAM_MODE_FISHEYE(鱼眼模式时),此值为其拖动所联动的ptz通道。当dwChannel通道模式为非鱼眼时,置为0即可 + NET_VCA_POINT struToPoint; //拖动画面要跳转到的目标点,目标点位置相对于预览画面的左上角 + NET_VCA_POINT struOriPoint; //拖动操作起始点,此点为当次拖动操作开始时,鼠标指针相对于预览画面左上角的位置 + BYTE byRes[56]; //保留 }NET_DVR_DRAG_POS_PARAM,*LPNET_DVR_DRAG_POS_PARAM; -//ƽ̨ѯϷ״̬ +//平台查询诊断服务器的状态 typedef struct tagNET_DVR_QUERY_STATUS { DWORD dwSize; - BYTE byCpuLoad; //CPUԴռ, ȡֵΧ0-100 - BYTE byMemLoad; //MemoryԴռȡֵΧ0-100 - WORD wAbility; //Ϸ0 - WORD wRemainAbility;//ϷʣȡֵΧ 0 ʣ಼ĸ - WORD wTotalPlanNum; //64ƻ> - WORD wCurPlanNum; //ǰƻ 64ƻ> - BYTE byRes[62]; // + BYTE byCpuLoad; //CPU资源占用情况, 取值范围:0-100 + BYTE byMemLoad; //Memory资源占用情况,取值范围:0-100 + WORD wAbility; //诊断服务器能力集,大于0 + WORD wRemainAbility;//诊断服务器剩余能力,取值范围:大于 0 剩余布防点的个数 + WORD wTotalPlanNum; //最多64个计划> + WORD wCurPlanNum; //当前计划数 最多64个计划> + BYTE byRes[62]; //保留 }NET_DVR_QUERY_STATUS, *LPNET_DVR_QUERY_STATUS; typedef struct tagNET_DVR_MONITOR_VQDCFG { DWORD dwSize; - BYTE byEnable; //Ƿ - BYTE byDevType; //豸ͣ0-̨豸1-̨豸 - BYTE bySignalPoint; //źŶʧֵ0-100 - BYTE byBlurPoint; //ͼģֵ0-100 - BYTE byLumaPoint; //ͼֵ0-100 - BYTE byChromaPoint; //ͼƫɫֵ0-100 - BYTE bySnowPoint; //ŷֵ0-100 - BYTE byStreakPoint; //Ƹŷֵ0-100 - BYTE byFreezePoint; //涳ֵᷧ0-100 - BYTE byPTZPoint; //̨ʧطֵ0-100 - BYTE byMonitorDel; //ɾ 0-ɾ 1-ɾ - BYTE byContrastThreshold; //Աȶ쳣ֵ0-100 - BYTE byMonoThreshold; //ڰͼֵ0-100 - BYTE byShakeThreshold; //Ƶֵ0-100 - BYTE byFlashThreshold; //Ƶֵ0-100 - BYTE byCoverThreshold; //Ƶڵֵ0-100 - BYTE bySceneThreshold; //ֵ0-100 - BYTE byDarkThreshold; //ͼֵ0-100 + BYTE byEnable; //是否启用 + BYTE byDevType; //设备类型:0-非云台设备,1-带云台设备 + BYTE bySignalPoint; //信号丢失阀值,0-100 + BYTE byBlurPoint; //图像模糊阀值,0-100 + BYTE byLumaPoint; //图像过亮阀值,0-100 + BYTE byChromaPoint; //图像偏色阀值,0-100 + BYTE bySnowPoint; //噪声干扰阀值,0-100 + BYTE byStreakPoint; //条纹干扰阀值,0-100 + BYTE byFreezePoint; //画面冻结阀值,0-100 + BYTE byPTZPoint; //云台失控阀值,0-100 + BYTE byMonitorDel; //布防点删除 0-不删除, 1-删除 + BYTE byContrastThreshold; //对比度异常阈值,0-100 + BYTE byMonoThreshold; //黑白图像阈值,0-100 + BYTE byShakeThreshold; //视频抖动阈值,0-100 + BYTE byFlashThreshold; //视频剧变阈值,0-100 + BYTE byCoverThreshold; //视频遮挡阈值,0-100 + BYTE bySceneThreshold; //场景变更阈值,0-100 + BYTE byDarkThreshold; //图像过暗阈值,0-100 BYTE byRes[46]; }NET_DVR_MONITOR_VQDCFG, *LPNET_DVR_MONITOR_VQDCFG; -//Ͻ +//诊断结果 typedef struct tagNET_DVR_DIAGNOSIS_UPLOAD { DWORD dwSize; - char sStreamID[STREAM_ID_LEN]; ///< IDС32ֽ - char sMonitorIP[64]; ///< ip - DWORD dwChanIndex; ///< ͨ - DWORD dwWidth; ///< ͼ - DWORD dwHeight; ///< ͼ߶ - NET_DVR_TIME struCheckTime; ///< ʱ(ϲںʱֶ)ʽ2012-08-06 13:00:00 - BYTE byResult; ///0-δ 1- 2-쳣 3-¼ʧ 4-ȡ쳣 - BYTE bySignalResult; ///< Ƶʧ 0-δ 1- 2-쳣 - BYTE byBlurResult; ///< ͼģ0-δ 1- 2-쳣 - BYTE byLumaResult; ///< ͼ0-δ 1- 2-쳣 - BYTE byChromaResult; ///< ƫɫ0-δ 1- 2-쳣 - BYTE bySnowResult; ///< ż0-δ 1- 2-쳣 - BYTE byStreakResult; ///< Ƹż0-δ 1- 2-쳣 - BYTE byFreezeResult; ///< 涳0-δ 1- 2-쳣 - BYTE byPTZResult; ///< ̨0-δ 1- 2-쳣 - BYTE byContrastResult; //Աȶ쳣0-δ⣬1-2-쳣 - BYTE byMonoResult; //ڰͼ0-δ⣬1-2-쳣 - BYTE byShakeResult; //Ƶ0-δ⣬1-2-쳣 - char sSNapShotURL[256]; ///<ͼƬURLַ - BYTE byFlashResult; //Ƶ0-δ⣬1-2-쳣 - BYTE byCoverResult; //Ƶڵ0-δ⣬1-2-쳣 - BYTE bySceneResult; //0-δ⣬1-2-쳣 - BYTE byDarkResult; //ͼ0-δ⣬1-2-쳣 - BYTE byStreamType; //ͣ0-Ч1-δ֪2-ͣ3-ǹ + char sStreamID[STREAM_ID_LEN]; ///< 流ID,长度小于32个字节 + char sMonitorIP[64]; ///< 布防点ip + DWORD dwChanIndex; ///< 布防点通道号 + DWORD dwWidth; ///< 图像宽度 + DWORD dwHeight; ///< 图像高度 + NET_DVR_TIME struCheckTime; ///< 检测时间(合并日期和时间字段),格式:2012-08-06 13:00:00 + BYTE byResult; ///0-未检测 1-正常 2-异常 3-登录失败 4-取流异常 + BYTE bySignalResult; ///< 视频丢失检测结果 0-未检测 1-正常 2-异常 + BYTE byBlurResult; ///< 图像模糊检测结果,0-未检测 1-正常 2-异常 + BYTE byLumaResult; ///< 图像过亮检测结果,0-未检测 1-正常 2-异常 + BYTE byChromaResult; ///< 偏色检测结果,0-未检测 1-正常 2-异常 + BYTE bySnowResult; ///< 噪声干扰检测结果,0-未检测 1-正常 2-异常 + BYTE byStreakResult; ///< 条纹干扰检测结果,0-未检测 1-正常 2-异常 + BYTE byFreezeResult; ///< 画面冻结检测结果,0-未检测 1-正常 2-异常 + BYTE byPTZResult; ///< 云台检测结果,0-未检测 1-正常 2-异常 + BYTE byContrastResult; //对比度异常检测结果,0-未检测,1-正常,2-异常 + BYTE byMonoResult; //黑白图像检测结果,0-未检测,1-正常,2-异常 + BYTE byShakeResult; //视频抖动检测结果,0-未检测,1-正常,2-异常 + char sSNapShotURL[256]; ///<图片URL地址 + BYTE byFlashResult; //视频剧变检测结果,0-未检测,1-正常,2-异常 + BYTE byCoverResult; //视频遮挡检测结果,0-未检测,1-正常,2-异常 + BYTE bySceneResult; //场景变更检测结果,0-未检测,1-正常,2-异常 + BYTE byDarkResult; //图像过暗检测结果,0-未检测,1-正常,2-异常 + BYTE byStreamType; //码流类型,0-无效,1-未知,2-国标类型,3-非国标类型 BYTE byRes2[59]; }NET_DVR_DIAGNOSIS_UPLOAD, *LPNET_DVR_DIAGNOSIS_UPLOAD; -typedef struct tagNET_DVR_DOWN_LOAD_REQUEST ///< ݽṹƽ̨͵Ϸ +typedef struct tagNET_DVR_DOWN_LOAD_REQUEST ///< 这个数据结构是平台发送到诊断服务器的 { NET_DVR_STREAM_INFO struStreamInfo; - char sSnapShotURL[256]; ///< ץͼURLС256ֽ + char sSnapShotURL[256]; ///< 诊断抓图URL,长度小于256个字节 BYTE byRes[32]; }NET_DVR_DOWN_LOAD_REQUEST, *LPNET_DVR_DOWN_LOAD_REQUEST; -typedef struct tagNET_DVR_VQD_RESULT_INFO ///< ݽṹϷظƽ̨ +typedef struct tagNET_DVR_VQD_RESULT_INFO ///< 这个数据结构是诊断服务器返回给平台的 { DWORD dwSize; - char sStreamID[32]; ///֣1->*/ + BYTE byCaseSensitive;/*是否区分大小写,0->不区分,1->区分*/ BYTE byRes1[7]; - NET_DVR_GENERIC_START struTransactionStart;/*׿ʼ*/ - NET_DVR_GENERIC_END struTransactionEnd;/*׽*/ - NET_DVR_GENERIC_DATA_CFG struLineDeli;/*м*/ - NET_DVR_IGNORE_STRING struIgnoreString[MAX_IGNORE_STRING_NUM];/*ַĿǰΪ4*/ - BYTE byRes[40]; // + NET_DVR_GENERIC_START struTransactionStart;/*交易开始*/ + NET_DVR_GENERIC_END struTransactionEnd;/*交易结束*/ + NET_DVR_GENERIC_DATA_CFG struLineDeli;/*行间隔符*/ + NET_DVR_IGNORE_STRING struIgnoreString[MAX_IGNORE_STRING_NUM];/*忽略字符串,目前为4个*/ + BYTE byRes[40]; //保留 }NET_DVR_POS_GENERIC, *LPNET_DVR_GENERIC; typedef struct { - DWORD dwPosAddr; //posַ + DWORD dwPosAddr; //pos地址编号 BYTE byRes[948]; }NET_DVR_POS_AVE, *LPNET_DVR_AVE; #define SERIAL_NUM_LEN 8 typedef struct tagNET_DVR_POS_NUCLEUS/*size 952byte*/ { - char szEmployeeNo[SERIAL_NUM_LEN];//Աţ1עe - char szTerminalNo[SERIAL_NUM_LEN];// Posţ1עt - char szShiftNo[SERIAL_NUM_LEN]; //ְࣨעs + char szEmployeeNo[SERIAL_NUM_LEN];//员工编号,如1(备注:标题e) + char szTerminalNo[SERIAL_NUM_LEN];// Pos机编号,如1(备注:标题t) + char szShiftNo[SERIAL_NUM_LEN]; //轮班(备注:标题s) BYTE byRes[928]; }NET_DVR_POS_NUCLEUS, *LPNET_DVR_POS_NUCLEUS; typedef union _NET_DVR_POS_PROTOCOL_UNION { - BYTE byLenth[952]; //ڱʾ峤ȣʵ + BYTE byLenth[952]; //用于表示联合体长度,无实际意义 NET_DVR_POS_GENERIC struGeneric; NET_DVR_POS_AVE struAve; NET_DVR_POS_NUCLEUS struNUCLEUS; }NET_DVR_POS_PROTOCOL_UNION,*LPNET_DVR_POS_PROTOCOL_UNION; -typedef enum tagNET_DVR_CHARSET_ENUM //뷽ʽ +typedef enum tagNET_DVR_CHARSET_ENUM //编码方式 { ENUM_UTF8 =0, ENUM_GB2312, @@ -37700,26 +37700,26 @@ typedef enum tagNET_DVR_CHARSET_ENUM // typedef struct { DWORD dwSize; - BYTE byEnable; //ʹ - BYTE byCharSetType; //뷽ʽ0-UTF-8,1-GB2312 - BYTE byRes1; // - BYTE byProtocolType;//Эͣ1->generic textЭ(universal Protocol), 2->AVE VSI-ADD 3->AVE Vnet,4-EPSON(账posЭ), 5-NUCLEUS - //6- GilbarcoöӦṹNET_DVR_POS_GENERIC,7- NCRöӦṹNET_DVR_POS_GENERIC - NET_DVR_POS_PROTOCOL_UNION uPosProtocol; //POSЭ - BYTE byRes[32]; // + BYTE byEnable; //规则使能 + BYTE byCharSetType; //编码方式0-UTF-8,1-GB2312 + BYTE byRes1; //保留 + BYTE byProtocolType;//协议类型,1->generic text协议(universal Protocol), 2->AVE VSI-ADD 3->AVE Vnet,4-EPSON(该类型无需处理pos协议参数), 5-NUCLEUS + //6- Gilbarco(配置对应结构体NET_DVR_POS_GENERIC),7- NCR(配置对应结构体NET_DVR_POS_GENERIC) + NET_DVR_POS_PROTOCOL_UNION uPosProtocol; //POS协议 + BYTE byRes[32]; //保留 }NET_DVR_POS_FILTER_CFG, *LPNET_DVR_POS_FILTER_CFG; -typedef struct tagNET_DVR_NET_SNIFF /*ṹ 312byte*/ +typedef struct tagNET_DVR_NET_SNIFF /*网络侦听结构体 312byte*/ { - BYTE byEnableSourcePort; //ǷöԴ˿ڹ 0-ã1- - BYTE byEnableDestAddr; //ǷöĿIPַй 0-ã1- - BYTE byEnableDestPort; //ǷöĿַĶ˿ںŽй - BYTE byRes1; // - BYTE bySourceIpAddr[MAX_DOMAIN_NAME]; //Դַ - BYTE byDestinationIpAddr[MAX_DOMAIN_NAME]; //ݷĿַ - WORD wSourcePort; //Դ˿ں - WORD wDestinationPort; //ݷĿ˿ں - BYTE byRes[16]; // + BYTE byEnableSourcePort; //是否启用对数据源端口过滤 0-不启用,1-启用 + BYTE byEnableDestAddr; //是否启用对目标IP地址进行过滤 0-不启用,1-启用 + BYTE byEnableDestPort; //是否启用对目标地址的端口号进行过滤 + BYTE byRes1; //保留 + BYTE bySourceIpAddr[MAX_DOMAIN_NAME]; //数据源地址 + BYTE byDestinationIpAddr[MAX_DOMAIN_NAME]; //数据发送目标地址 + WORD wSourcePort; //数据源端口号 + WORD wDestinationPort; //数据发送目标端口号 + BYTE byRes[16]; //保留 }NET_DVR_NET_SNIFF, *LPNET_DVR_NET_SNIFF; typedef struct @@ -37728,87 +37728,87 @@ typedef struct BYTE byRes[2]; }NET_DVR_NET_RECEIVE, *LPNET_DVR_NET_RECEIVE; -typedef struct tagNET_DVR_MONITOR_INFO /**/ +typedef struct tagNET_DVR_MONITOR_INFO /*监听*/ { - WORD wPort; //˿ں + WORD wPort; //监听端口号 BYTE byRes1[2]; - NET_DVR_IPADDR struRestrictRemoteIP;//Զ̷IP + NET_DVR_IPADDR struRestrictRemoteIP;//保留限制远程访问IP BYTE byRes[164]; }NET_DVR_MONITOR_INFO, *LPNET_DVR_MONITOR_INFO; typedef union tagNET_DVR_POS_CONNECTMODE_UNION { - BYTE byLen[312]; //峤ȣʵ - NET_DVR_NET_RECEIVE struNetRecv; //ģʽ - NET_DVR_MONITOR_INFO struTcpMonitor; //ģʽ - NET_DVR_SINGLE_RS232 struRS232; //ڷʽ - NET_DVR_MONITOR_INFO struUdpMonitor; //-UDPģʽ - NET_DVR_NET_SNIFF struSniff; //ģʽ - NET_DVR_ADDRESS struMcast; //ಥģʽ - NET_DVR_USB_RS232 struUSBRS232; //USBתڷʽ + BYTE byLen[312]; //联合体长度,无实际意义 + NET_DVR_NET_RECEIVE struNetRecv; //网络接受模式 + NET_DVR_MONITOR_INFO struTcpMonitor; //网络监听模式 + NET_DVR_SINGLE_RS232 struRS232; //串口方式 + NET_DVR_MONITOR_INFO struUdpMonitor; //网络监听-UDP模式 + NET_DVR_NET_SNIFF struSniff; //网络侦听模式 + NET_DVR_ADDRESS struMcast; //多播模式 + NET_DVR_USB_RS232 struUSBRS232; //USB转串口方式 }NET_DVR_POS_CONNECTMODE_UNION, *LPNET_DVR_POS_CONNECTMODE_UNION; -//DVRPOSӷʽýṹ +//DVR与POS连接方式配置结构体 typedef struct tagNET_DVR_CONNECT_POS_CFG { - DWORD dwSize; //ṹС - BYTE byConnectMode; //ģʽ:0->(TCP),1->,2->ڽ3-UDP,4-,5-ಥ - BYTE byRes1[3]; // - NET_DVR_POS_CONNECTMODE_UNION uPosConnMode; //ģʽ + DWORD dwSize; //结构体大小 + BYTE byConnectMode; //连接模式:0->网络监听(TCP),1->网络接受,2->串口接收3-网络监听(UDP),4-网络侦听,5-多播 + BYTE byRes1[3]; //保留 + NET_DVR_POS_CONNECTMODE_UNION uPosConnMode; //连接模式配置 BYTE byRes[64]; }NET_DVR_CONNECT_POS_CFG, *LPNET_DVR_CONNECT_POS_CFG; typedef struct tagNET_DVR_CHAN_FILTER_CFG { - DWORD dwSize; //ṹС - BYTE byFilterID; //POS˹ID - BYTE byFontSize; //ֺŴС0-- 8*16 1--16*32 2--32*64 - BYTE byShowPosInfo; //ǷposϢ - BYTE byOverlayMode; //ӷʽ0-1-ҳ + DWORD dwSize; //结构体大小 + BYTE byFilterID; //POS过滤规则ID + BYTE byFontSize; //字号大小,0-- 8*16 1--16*32 2--32*64 + BYTE byShowPosInfo; //码流中是否叠加pos信息 + BYTE byOverlayMode; //叠加方式,0-滚屏,1-翻页 DWORD dwDelayTime; /*delay time(5-3600s)*/ NET_DVR_POS_OSD_REGION struOsdPosInfo; /*overlay osd rect info*/ - NET_DVR_RGB_COLOR struOsdColor; //OSDɫ + NET_DVR_RGB_COLOR struOsdColor; //OSD颜色 NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ - //쳣ʽбŰ󶨣Ϊ0ʱʾıŷΧΪ1-64Ϊ1ʱʾıŷΧΪ65-128 ڽУ0xffffffffʾ ǰļںıЧ - DWORD dwMaxRelRecordChanNum ; //¼ֻ֧ͨ - DWORD dwRelRecordChanNum ; //ڹ¼ͨ - DWORD dwRelRecordChan[MAX_CHANNUM_V30];//¼ͨ - //¼ͨŰ󶨣Ϊ0ʱʾͨŷΧΪ1-64Ϊ1ʱʾͨŷΧΪ65-128 ڽУ0xffffffffʾںĹͨЧ - DWORD dwTimeOut; /*time Out(5-3600s)*/ //ݳʱָڶ೤ʱղPOSݼжһݰĽ - BYTE byRes[60]; // + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + //异常处理方式中报警输出号与组号绑定,即组号为0时,表示关联的报警输出号范围为1-64,当组号为1时,表示关联的报警输出号范围为65-128, 且是组内紧凑排列,如果遇到0xffffffff表示本组 当前的及组内后续的报警出号无效 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //本组内关联的录象通道数 + DWORD dwRelRecordChan[MAX_CHANNUM_V30];//触发录像通道 + //关联的录像通道号与组号绑定,即组号为0时,表示关联的通道号范围为1-64,当组号为1时,表示关联的通道号范围为65-128, 且是组内紧凑排列,如果遇到0xffffffff表示本组内后续的关联通道号无效 + DWORD dwTimeOut; /*time Out(5-3600s)*/ //数据超时指在多长时间接收不到POS数据即判定一次数据包的结束。 + BYTE byRes[60]; //保留 }NET_DVR_CHAN_FILTER_CFG, *LPNET_DVR_CHAN_FILTER_CFG; -#define MAX_LAN_ENCODE_LEN 32 //Աʽ󳤶 +#define MAX_LAN_ENCODE_LEN 32 //语言编码格式最大长度 typedef struct tagNET_DVR_DEVICE_LAN_ENCODE { DWORD dwSize; - BYTE byLanEncode[MAX_LAN_ENCODE_LEN]; //豸Աʽ + BYTE byLanEncode[MAX_LAN_ENCODE_LEN]; //设备语言编码格式 BYTE byRes[28]; }NET_DVR_DEVICE_LAN_ENCODE, *LPNET_DVR_DEVICE_LAN_ENCODE; typedef struct tagNET_DVR_SCENECHANGE_DETECTION { DWORD dwSize; - BYTE byEnable; //ʹܣǷ 0~,1~ - BYTE bySensitiveLevel;// 1-100Ĭ50ԽߣԽױ + BYTE byEnable; //使能,是否开启 0~不开启,1~开启 + BYTE bySensitiveLevel;// 1-100,默认50,灵敏度越高,越容易报警 BYTE byRes1[2]; NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ - DWORD dwMaxRelRecordChanNum ; //¼ͨ ֻ֧ - DWORD dwRelRecordChanNum ; //¼ͨ ʵֵ֧ - DWORD dwRelRecordChan[MAX_CHANNUM_V30];//¼ͨ - //¼ֽͨڵͨţʼֵ 0xffffffff + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD dwRelRecordChan[MAX_CHANNUM_V30];//触发录像通道 + //报警触发的录象通道(四字节的通道号,初始值是 0xffffffff) BYTE byRes2[128]; }NET_DVR_SCENECHANGE_DETECTION,*LPNET_DVR_SCENECHANGE_DETECTION; typedef struct tagNET_DVR_SCENECHANGE_DETECTION_RESULT { - DWORD dwSize; // ṹС - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byRes[126]; // ֽ + DWORD dwSize; // 结构大小 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes[126]; // 保留字节 }NET_DVR_SCENECHANGE_DETECTION_RESULT,*LPNET_DVR_SCENECHANGE_DETECTION_RESULT; typedef enum @@ -37819,11 +37819,11 @@ typedef enum MAX_TYPE }MODULE_TYPE; -//λϢ +//车位信息 typedef struct tagNET_DVR_PARK_INFO { - char sPlateNo[MAX_PlATE_NO_LEN]; //ƺ - char sParkIndex[MAX_PlATE_NO_LEN]; //λ + char sPlateNo[MAX_PlATE_NO_LEN]; //车牌号码 + char sParkIndex[MAX_PlATE_NO_LEN]; //车位编号 BYTE byRes[64]; }NET_DVR_PARK_INFO, *LPNET_DVR_PARK_INFO; @@ -37832,28 +37832,28 @@ typedef struct tagNET_DVR_CROSSLINE_ALARM { DWORD dwSize; NET_VCA_DEV_INFO struDevInfo; - NET_DVR_TIME_EX struTriggerTime;/*ʱ*/ - NET_DVR_PARK_INFO struParkInfo; //λϢ + NET_DVR_TIME_EX struTriggerTime;/*触发时间*/ + NET_DVR_PARK_INFO struParkInfo; //车位信息 BYTE byRes1[128]; }NET_DVR_CROSSLINE_ALARM, *LPNET_DVR_CROSSLINE_ALARM; typedef struct tagNET_DVR_STREAM_SRC_CFG { DWORD dwSize; - NET_DVR_STREAM_INFO struStreamID; //Ϣ - NET_DVR_STREAM_SRC_INFO struStreamSrcInfo; //ԴϢ + NET_DVR_STREAM_INFO struStreamID; //流信息 + NET_DVR_STREAM_SRC_INFO struStreamSrcInfo; //流源信息 }NET_DVR_STREAM_SRC_CFG,*LPNET_DVR_STREAM_SRC_CFG; typedef struct tagNET_DVR_ENCODEINFO { - BYTE byFormatType; //װͣ1-2-RTPװ3-PSװ4-TSװ5-˽У6-FLV7-ASF8-3GP, 9-RTP+PS꣺GB281810xff-Ч - BYTE byVideoEncType;//Ƶͣ0-˽2641-׼h2642-׼mpeg47-M-JPEG0xff-Ч - WORD wWidth; //ͼ - WORD wHeight; //ͼ߶ + BYTE byFormatType; //封装类型,1-裸流,2-RTP封装,3-PS封装,4-TS封装,5-私有,6-FLV,7-ASF,8-3GP, 9-RTP+PS(国标:GB28181),0xff-无效 + BYTE byVideoEncType;//视频编码类型,0-私有264,1-标准h264,2-标准mpeg4,7-M-JPEG,0xff-无效 + WORD wWidth; //图像宽度 + WORD wHeight; //图像高度 BYTE byRes1[2]; - DWORD dwVideoBitrate; //Ƶ,λKbps - DWORD dwVideoFrameRate; //֡ʣ200ʾС1֡/״ֵ̬ʾʵֵ֡,200-1/2,201-1/4,202-1/8,203-1/16 - BYTE byAudioEncType;//Ƶͣ0-G7221-G711_U2-G711_A5-MPEG2,6-G7267-AAC,0xff-Ч + DWORD dwVideoBitrate; //视频码率,单位Kbps + DWORD dwVideoFrameRate; //帧率,200起表示小于1帧/秒的状态,其余值表示实际帧率值,200-1/2,201-1/4,202-1/8,203-1/16 + BYTE byAudioEncType;//音频编码类型,0-G722,1-G711_U,2-G711_A,5-MPEG2,6-G726,7-AAC,0xff-无效 BYTE byRes2[15]; }NET_DVR_ENCODEINFO, *LPNET_DVR_ENCODEINFO; @@ -37861,34 +37861,34 @@ typedef struct tagNET_DVR_ENCODEINFO typedef struct tagNET_DVR_TRANSSTATUS { DWORD dwSize; - NET_DVR_STREAM_INFO struStreamInfo;//IDתͨϢ - BYTE byMode;//תģʽ1-ת룬2-ת - BYTE byLinkNums;// - BYTE byPassiveTransMode; //תģʽ0-Ч1-ʵʱ2-ļ + NET_DVR_STREAM_INFO struStreamInfo;//流ID、转码通道信息 + BYTE byMode;//转码模式,1-主动转码,2-被动转码 + BYTE byLinkNums;//连接数 + BYTE byPassiveTransMode; //被动转码模式,0-无效,1-实时流,2-文件流 BYTE byRes; - NET_DVR_ADDRESS struDstIPInfo[MAX_LINK];//Ŀתipַ - BYTE byTransResource;//ʹõתԴD1 + NET_DVR_ADDRESS struDstIPInfo[MAX_LINK];//目标转码ip地址 + BYTE byTransResource;//所使用的转码资源数,按D1计算 BYTE byRes1[15]; - NET_DVR_ENCODEINFO struSrcEncodeInfo;//ԴϢ - NET_DVR_ENCODEINFO struDstEncodeInfo[MAX_LINK /*6*/];//ĿϢ + NET_DVR_ENCODEINFO struSrcEncodeInfo;//源编码信息 + NET_DVR_ENCODEINFO struDstEncodeInfo[MAX_LINK /*6*/];//目标编码信息 BYTE byRes2[36]; }NET_DVR_TRANSSTATUS, *LPNET_DVR_TRANSSTATUS; typedef struct tagNET_DVR_TRANSDEVICE_STATUS { DWORD dwSize; - DWORD dwTotalResource;//ȫתԴD1Ϊλ - DWORD dwIdleResource;//ʣתԴD1Ϊλ - BYTE byCpuLoad;//CPU + DWORD dwTotalResource;//全部转码资源,以D1为单位计算 + DWORD dwIdleResource;//剩余转码资源,以D1为单位计算 + BYTE byCpuLoad;//CPU利用率 BYTE byRes[67]; }NET_DVR_TRANSDEVICE_STATUS, *LPNET_DVR_TRANSDEVICE_STATUS; typedef struct tagNET_DVR_DEV_WORK_MODE { DWORD dwSize; - BYTE byWorkMode; //1-ͨģʽ2-IDģʽ - BYTE byDisplayMode; //0-ͨ1- - BYTE byEnableVcaDec; //Ƿܽ룬0-ã0- + BYTE byWorkMode; //1-通道模式,2-流ID模式 + BYTE byDisplayMode; //0-普通,1-畅显 + BYTE byEnableVcaDec; //是否启用智能解码,0-不启用,非0-启用 BYTE byRes[61]; }NET_DVR_DEV_WORK_MODE,*LPNET_DVR_DEV_WORK_MODE; @@ -37896,32 +37896,32 @@ typedef struct tagNET_DVR_DEV_WORK_MODE typedef struct tagNET_DVR_PASSIVETRANSINFO { DWORD dwSize; - BYTE byStreamType;// ͣ0-1- - BYTE byLinkMode;// 0TCPʽ,1UDPʽ - BYTE byPassiveTransMode; //תģʽ1-ʵʱ2-ļ + BYTE byStreamType;// 码流类型,0-主码流,1-子码流 + BYTE byLinkMode;// 0:TCP方式,1:UDP方式(保留) + BYTE byPassiveTransMode; //被动转码模式,1-实时流,2-文件流 BYTE byRes1[5]; - BYTE byDataType;//ͣ1-SDP2-ͷ + BYTE byDataType;//缓冲区类型,1-SDP,2-码流头 BYTE byRes2; - WORD wDataLength;//ݳ - char *pBuffer;// - BYTE byRes3[32]; // + WORD wDataLength;//数据长度 + char *pBuffer;//缓冲区 + BYTE byRes3[32]; // 保留 }NET_DVR_PASSIVETRANSINFO, *LPNET_DVR_PASSIVETRANSINFO; typedef struct tagNET_DVR_BASEMAP_CONTROL_CFG { DWORD dwSize; - BYTE byEnable; //Ƿʾ1-ʾ0- - BYTE byBaseMapType; //ͼͣ1-ͼƬͼ2-ͼ3-ͼѵ - BYTE byBaseMapCircleNo; //ͼѵţbyBaseMapTypeΪ3ʱЧ + BYTE byEnable; //是否显示,1-显示,0-隐藏 + BYTE byBaseMapType; //底图类型,1-图片底图,2-超高清输入底图,3-底图轮训 + BYTE byBaseMapCircleNo; //底图轮训参数编号,byBaseMapType为3时有效 BYTE byRes1; - DWORD dwBaseMapNo; //ͼţͼΪ1ʱ˲ΪͼƬţͼΪ2ʱ˲Ϊϵͳںţ1ֽھ+1ֽӰ+1ֽں+1ֽڱ + DWORD dwBaseMapNo; //底图号;底图类型为1时,此参数为图片序号,底图类型为2时此参数为超高清输入子系统输入口号(1字节矩阵号+1字节子板号+1字节输入口号+1字节保留) BYTE byRes2[64]; }NET_DVR_BASEMAP_CONTROL_CFG,*LPNET_DVR_BASEMAP_CONTROL_CFG; typedef struct tagNET_DVR_VIRTUAL_SCREEN_CFG { DWORD dwSize; - DWORD dwResolution; //ֱʣMAKE_RESOLUTION궨ֵӵǽȡֵ֧ķֱֵ + DWORD dwResolution; //分辨率,MAKE_RESOLUTION宏定义的值,从电视墙能力获取支持的分辨率值 BYTE byRes[64]; }NET_DVR_VIRTUAL_SCREEN_CFG, *LPNET_DVR_VIRTUAL_SCREEN_CFG; @@ -37929,132 +37929,132 @@ typedef struct tagNET_DVR_BASEMAP_WINCFG { DWORD dwSize; BYTE byEnable; - BYTE byWndOperateMode; //ڲģʽ0-ͳһ꣬1-ֱ + BYTE byWndOperateMode; //窗口操作模式,0-统一坐标,1-分辨率坐标 BYTE byRes1[6]; - NET_DVR_RECTCFG_EX struWinPosition;//ĿĴ(ʾǽ),ͼڵʼʹСǻ׼ - NET_DVR_RECTCFG_EX struResolution; //ĿĴڷֱ꣬ȡ򰴷ֱЧ - DWORD dwXCoordinate; //LEDϽX꣨ͳһ꣩ȡ򰴷ֱЧ - DWORD dwYCoordinate; //LEDϽY꣨ͳһ꣩ȡ򰴷ֱЧ + NET_DVR_RECTCFG_EX struWinPosition;//目的窗口(相对显示墙),底图窗口的起始坐标和大小必须是基准坐标的整数倍 + NET_DVR_RECTCFG_EX struResolution; //目的窗口分辨率坐标,获取或按分辨率坐标设置有效 + DWORD dwXCoordinate; //LED区域左上角X坐标(统一坐标),获取或按分辨率坐标设置有效 + DWORD dwYCoordinate; //LED区域左上角Y坐标(统一坐标),获取或按分辨率坐标设置有效 BYTE byRes2[36]; }NET_DVR_BASEMAP_WINCFG, *LPNET_DVR_BASEMAP_WINCFG; typedef struct tagNET_DVR_BASEMAP_PIC_INFO { DWORD dwSize; - BYTE sPicName[NAME_LEN];//ͼƬ - BYTE byUsed; //ǷѴڣ0-ڣ1- + BYTE sPicName[NAME_LEN];//图片名称 + BYTE byUsed; //是否已存在,0-不存在,1-存在 BYTE byRes[31]; }NET_DVR_BASEMAP_PIC_INFO,*LPNET_DVR_BASEMAP_PIC_INFO; typedef struct tagNET_DVR_MATRIX_LOGO_INFO { DWORD dwSize; - DWORD dwLogoSize;//LOGOСBMPļͷͼƬСޣ100KߺͿ32ı + DWORD dwLogoSize;//LOGO大小,包括BMP的文件头,图片大小超限,限100K,高和宽须是32的倍数 BYTE byRes[32]; }NET_DVR_MATRIX_LOGO_INFO,*LPNET_DVR_MATRIX_LOGO_INFO; typedef struct tagNET_DVR_MATRIX_LOGO_CFG { DWORD dwSize; - BYTE byExist; //logoǷڣ0-ڣ1-ڣ˲ֻܻȡ + BYTE byExist; //logo是否存在,0-不存在,1-存在(此参数只能获取) BYTE byRes1[3]; - DWORD dwLogoSize;//LOGOСBMPļͷ(˲ֻܻȡ) - BYTE byLogoName[NAME_LEN]; //logo - DWORD dwLogoNo; //logoţȡlogoϢʱЧ + DWORD dwLogoSize;//LOGO大小,包括BMP的文件头(此参数只能获取) + BYTE byLogoName[NAME_LEN]; //logo名称 + DWORD dwLogoNo; //logo编号(获取所有logo信息时有效) BYTE byRes2[28]; }NET_DVR_MATRIX_LOGO_CFG,*LPNET_DVR_MATRIX_LOGO_CFG; typedef struct tagNET_DVR_WIN_LOGO_CFG { DWORD dwSize; - DWORD dwLogoNo; //logo - BYTE byEnable; //logoǷʾ1-ʾ0- + DWORD dwLogoNo; //logo号 + BYTE byEnable; //logo是否显示,1-显示,0-隐藏 BYTE byRes1[3]; - DWORD dwCoordinateX; //ͼƬʾX - DWORD dwCoordinateY; //ͼƬʾY - BYTE byFlash; //Ƿ˸1-˸0-˸ - BYTE byTranslucent; //Ƿ͸1-͸0-͸ - BYTE byRes2[34]; // + DWORD dwCoordinateX; //图片显示区域X坐标 + DWORD dwCoordinateY; //图片显示区域Y坐标 + BYTE byFlash; //是否闪烁1-闪烁,0-不闪烁 + BYTE byTranslucent; //是否半透明1-半透明,0-不半透明 + BYTE byRes2[34]; //保留 }NET_DVR_WIN_LOGO_CFG,*LPNET_DVR_WIN_LOGO_CFG; typedef struct tagNET_DVR_BIG_SCREEN_AUDIO_CFG { DWORD dwSize; - DWORD dwWinIndex; //ںţ1ʼ0ʾͼ - BYTE byEnable; //ǷƵ1-Ƶ0-رƵ + DWORD dwWinIndex; //窗口号,从1开始,0表示底图 + BYTE byEnable; //是否打开音频,1-打开音频,0-关闭音频 BYTE byRes[31]; }NET_DVR_BIG_SCREEN_AUDIO_CFG, *LPNET_DVR_BIG_SCREEN_AUDIO_CFG; typedef struct tagNET_DVR_WIN_ZOOM_STATUS { DWORD dwSize; - BYTE byZoomStatus; //0-״̬1-Ŵ״̬ + BYTE byZoomStatus; //0-正常状态,1-放大状态 BYTE byRes1[3]; - NET_DVR_POINT_FRAME struPointFrame; //Ŵ򣬵byZoomStatusΪ1ʱЧ + NET_DVR_POINT_FRAME struPointFrame; //放大区域,当byZoomStatus为1时有效 BYTE byRes2[32]; }NET_DVR_WIN_ZOOM_STATUS,NET_DVR_WIN_ZOOM_STATUS; typedef struct tagNET_DVR_RESUME_INITRACKPOS_CFG { - DWORD dwSize; // ṹС - DWORD dwChannel;; // ͨ - BYTE byRes[16]; // ֽ + DWORD dwSize; // 结构大小 + DWORD dwChannel;; // 通道号 + BYTE byRes[16]; // 保留字节 }NET_DVR_RESUME_INITRACKPOS_CFG,*LPNET_DVR_RESUME_INITRACKPOS_CFG; typedef struct tagNet_DVR_TEST_SELFCHECK_RESULT { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE bySelfCheckStatus; //Լ״ֵ̬ 0-δʼ1-ɹ2-ʧܣ3-Լ - BYTE byRes[23]; //ֽ + DWORD dwChannel; //通道号 + BYTE bySelfCheckStatus; //自检状态值 0-未开始,1-成功,2-失败,3-自检中 + BYTE byRes[23]; //保留字节 }NET_DVR_TEST_SELFCHECK_RESULT, *LPNET_DVR_TEST_SELECHECK_RESULT; typedef struct tagNET_DVR_TEST_COMMAND { DWORD dwSize; - DWORD dwChannel; //ͨ + DWORD dwChannel; //通道号 BYTE byTestCommand[MAX_TEST_COMMAND_NUM]; - //0-ʾԣ 1-ʾ - //±0 ϻԳ - //±1 ƽģʽ - //±2 ICRϻԣ0ʾرգ1ʾbit0 ϣ0000_0001(ֻѲϻ)0000_0101ͬʱѲICRϻ0000_0100ֻICRϻ - //±3 -ptԽ״̬0ʾԽδ1ʾԽ - //±4 ɨԳ0ʾرգ1ʾ - //±5 У0ʾرգ1ʾ - WORD wICRIntervalTime;//icrʱ䣨byTestCommand ±2ڵֵΪ1ʱICRؼʱ䣬λ룩 - BYTE byElectronicCompassState;//״̬أ 0- 1- + //0-表示不开启测试, 1-表示开启测试 + //数组下标0 开启老化测试程序 + //数组下标1 红外灯进入测试模式 + //数组下标2 ICR老化测试,0表示关闭,1表示开启,可以与bit0 组合,如0000_0001(只开启巡航老化)、0000_0101(同时开启巡航和ICR老化)、0000_0100(只开启ICR老化) + //数组下标3 -球机pt自矫正功能状态,0表示球机自矫正功能未清除,1表示球机自矫正功能已清除 + //数组下标4 花样扫描测试程序,0表示关闭,1表示开启 + //数组下标5 电子罗盘校正程序,0表示关闭,1表示开启 + WORD wICRIntervalTime;//icr间隔时间(byTestCommand 数组下表2内的值为1时,ICR开关间隔时间,单位秒) + BYTE byElectronicCompassState;//罗盘状态返回, 0-正常, 1-不正常 BYTE byRes1[1]; - float fDeviceTem; //豸о¶ȣȷ0.001 - BYTE byTemp[9]; //ڶ豸 ±0-ȫ 1-4ȫ14sensor 5-8ȫ24sensor,Ŀǰӥȫ - BYTE byRes[3]; //ֽ + float fDeviceTem; //设备机芯温度,精确度0.001 + BYTE byTemp[9]; //用于多个温敏设备, 下标0-全景的温敏, 标1-4:全景1的4个sensor的温敏, 标5-8:全景2的4个sensor的温敏,目前用于鹰眼全景 + BYTE byRes[3]; //保留字节 }NET_DVR_TEST_COMMAND, *LPNET_DVR_TEST_COMMAND; typedef struct tagNET_DVR_AGING_TRICK_SCAN { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byAging; // ʾõIJ Ϊϻǰ߻ϻ󹤾ߣ 0-ϻǰ1-ϻ - BYTE byWriteReadEnalbe; //дָʹܣ0-öָ 1-дָ - BYTE byRes[126]; //ֽ + DWORD dwChannel; //通道号 + BYTE byAging; // 表示设置的参数 为老化前工具还是老化后工具, 0-老化前、1-老化后 + BYTE byWriteReadEnalbe; //读写指令使能,0-设置读指令, 1-设置写指令 + BYTE byRes[126]; //保留字节 }NET_DVR_AGING_TRICK_SCAN, *LPNET_DVR_AGING_TRICK_SCAN; -#define IPC_PARAM_AGING_TRICK_SCAN 0x00000001 //ɨ +#define IPC_PARAM_AGING_TRICK_SCAN 0x00000001 //清除花样扫描参数设置 typedef struct tagNET_DVR_IPC_PARAM_TYPE { DWORD dwSize; - DWORD dwParamType; //ͣλʾ - // #define IPC_PARAM_AGING_TRICK_SCAN 0x00000001 //ɨ + DWORD dwParamType; //参数类型,按位表示 + // #define IPC_PARAM_AGING_TRICK_SCAN 0x00000001 //清除花样扫描参数设置 BYTE byRes[32]; }NET_DVR_IPC_PARAM_TYPE, *LPNET_DVR_IPC_PARAM_TYPE; typedef struct tagNET_DVR_ECCENTRIC_CORRECT_STATE { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byEccentricCorrectState; // ƫĽ״̬0-Уʧܡ1-Уɹ2-У - BYTE byRes[127]; //ֽ + DWORD dwChannel; //通道号 + BYTE byEccentricCorrectState; // 偏心矫正状态,0-校正失败、1-校正成功、2-校正中 + BYTE byRes[127]; //保留字节 }NET_DVR_ECCENTRIC_CORRECT_STATE, *LPNET_DVR_ECCENTRIC_CORRECT_STATE; @@ -38063,223 +38063,223 @@ typedef struct tagNET_DVR_ECCENTRIC_CORRECT_STATE typedef struct tagNET_DVR_TEST_DEVMODULE_CFG { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byDevFanModuleType[MAX_DEVMODULE_NUM]; //Ե豸 - // 0-,1- - // bit0-Է1 - // bit1-Է2 - BYTE byDevHeaterModuleType[MAX_DEVMODULE_NUM]; //Ե豸 - // 0-,1- - // bit0-Լ1 - // bit1-Լ2 - BYTE byRes[22]; //ֽ + DWORD dwChannel; //通道号 + BYTE byDevFanModuleType[MAX_DEVMODULE_NUM]; //测试的设备类型 + // 0-不开启测试,1-开启测试 + // bit0-测试风扇1 + // bit1-测试风扇2 + BYTE byDevHeaterModuleType[MAX_DEVMODULE_NUM]; //测试的设备类型 + // 0-不开启测试,1-开启测试 + // bit0-测试加热器1 + // bit1-测试加热器2 + BYTE byRes[22]; //保留字节 }NET_DVR_TEST_DEVMODULE_CFG, *LPNET_DVR_TEST_DEVMODULE_CFG; -// +//出入口条件 typedef struct tagNET_DVR_BARRIERGATE_COND { - BYTE byLaneNo;//ţ0-ʾЧֵ(豸ҪЧֵж),1-1 + BYTE byLaneNo;//车道号(0-表示无效值(设备需要做有效值判断),1-车道1) BYTE byRes[3]; }NET_DVR_BARRIERGATE_COND,*LPNET_DVR_BARRIERGATE_COND; typedef struct tagNET_DVR_VEHICLE_CONTROL { - BYTE byGateOperateType;//0-޲,1-բ + BYTE byGateOperateType;//0-无操作,1-开道闸 BYTE byRes1 ; - WORD wAlarmOperateType;//0-޲,bit0-̵ bit1-ϴ bit3-澯ϴɸѡ(0-ʾأ1-ʾ) + WORD wAlarmOperateType;//0-无操作,bit0-继电器输出报警 bit1-布防上传报警 bit3-告警主机上传(可复选)(0-表示关,1-表示开) BYTE byRes2[8]; }NET_DVR_VEHICLE_CONTROL,*LPNET_DVR_VEHICLE_CONTROL; typedef struct tagNET_DVR_RELAY_PARAM { - BYTE byAccessDevInfo;//0-豸1-բ2-صբ3-ͣբ4-źš5- + BYTE byAccessDevInfo;//0-不接入设备,1-开道闸、2-关道闸、3-停道闸、4-报警信号、5-常亮灯 BYTE byRes[3]; }NET_DVR_RELAY_PARAM,*LPNET_DVR_RELAY_PARAM; -// +//出入口配置 typedef struct tagNET_DVR_ENTRANCE_CFG { DWORD dwSize; - BYTE byEnable ;// ʹ0-ʾرգ1-ʾ - BYTE byBarrierGateCtrlMode;//0-Զƣ1-ƽ̨ⲿ + BYTE byEnable ;// 使能0-表示关闭,1-表示打开 + BYTE byBarrierGateCtrlMode;//0-相机自动控制,1-平台外部控制 BYTE byRes1[2]; - DWORD dwRelateTriggerMode;//ģʽ οITC_TRIGGERMODE_TYPE - /*0x00: ƥ*/ - /*0x01: ƥ䣨ɫ*/ - /*0x02: ƥ䣨ɫ*/ - /*0x04: ƥ*/ - DWORD dwMatchContent; //쳣,쳣ʽ"" - NET_DVR_RELAY_PARAM struRelayRelateInfo[MAX_RELAY_NUM/*12*/];//̵Ϣ(һ̵ֻܿһ豸) 0ʾ̵1 1ʾ̵2 12 - BYTE byGateSingleIO[MAX_IOIN_NUM/*8*/]; //IOIO0ʾIO11ʾIO2 ; ֵĺ壨0-ޣ1-բλ2-բصλ3- - //Ϣܿ - //0ʾʱõģʽ - //1-ֹģʽ, - //2-ģʽ - NET_DVR_VEHICLE_CONTROL struVehicleCtrl[MAX_VEHICLE_TYPE_NUM/*8*/];//Ϣܿ - BYTE byNotCloseCarFollow;//øբʹܣ0~Ϊã1~ - BYTE byParkingDetectEnabled;//פʹܣ0~Ϊã1~ - BYTE byParkingDetectJudgeTime;//פжʱ䣬λ + DWORD dwRelateTriggerMode;//关联触发模式 参考ITC_TRIGGERMODE_TYPE + /*0x00: 不做匹配*/ + /*0x01: 车牌匹配(带车牌颜色)*/ + /*0x02: 车牌匹配(不带车牌颜色)*/ + /*0x04: 卡号匹配*/ + DWORD dwMatchContent; //异常处理,异常处理方式的"或"结果 + NET_DVR_RELAY_PARAM struRelayRelateInfo[MAX_RELAY_NUM/*12*/];//继电器关联配置信息(一个继电器只能控制一个接入设备) 数组0表示继电器1 数组1表示继电器2 依次类推 12 + BYTE byGateSingleIO[MAX_IOIN_NUM/*8*/]; //单个IO触发参数,单个IO触发参数,数组0表示IO1,数组1表示IO2,依次类推 ; 具体数组值的含义(0-无,1-道闸开到位,2-道闸关到位,3-消防报警) + //车辆信息管控 + //数组0表示临时车辆配置的模式 + //数组1-禁止名单车辆的模式, + //数组2-允许名单车辆的模式 + NET_DVR_VEHICLE_CONTROL struVehicleCtrl[MAX_VEHICLE_TYPE_NUM/*8*/];//车辆信息管控 + BYTE byNotCloseCarFollow;//启用跟车不落闸使能,0~为不启用,1~启用 + BYTE byParkingDetectEnabled;//启用驻车检测使能,0~为不启用,1~启用 + BYTE byParkingDetectJudgeTime;//驻车检测判断时间,单位秒 BYTE byRes2[61]; }NET_DVR_ENTRANCE_CFG,*LPNET_DVR_ENTRANCE_CFG; -////////////////////////////ڲ end/////////////////////////////// +////////////////////////////出入口参数配置 end/////////////////////////////// -// բ +// 道闸控制 typedef struct tagNET_DVR_BARRIERGATE_CFG { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byLaneNo; //բţ0-ʾЧֵ(豸ҪЧֵж),1-բ1 + DWORD dwChannel; //通道号 + BYTE byLaneNo; //道闸号(0-表示无效值(设备需要做有效值判断),1-道闸1) /* - ϵƽ̨֧byUnlockֶΣֶνֵΪ0ͨ0-رյբ,1-բ,2-ֹͣբеκһֲԿɽн - ƽ̨֧byUnlockֶΣbyUnlockֶθֵΪ14~բнbyUnlockֶθֵΪ1󣬡0-رյբ,1-բ,2-ֹͣբڽ + 若老的平台不支持byUnlock字段,该字段将赋值为0,通过“0-关闭道闸,1-开启道闸,2-停止道闸”中的任何一种操作皆可进行解锁。 + 若新平台支持byUnlock字段,需byUnlock字段赋值为1,并结合4~解锁道闸来进行解锁。byUnlock字段赋值为1后,“0-关闭道闸,1-开启道闸,2-停止道闸”操作将不可用于解锁。 */ - BYTE byBarrierGateCtrl;//0-رյբ,1-բ,2-ֹͣբ 3-բ,4~բ - BYTE byEntranceNo;//ڱ [1,8] - BYTE byUnlock;//ýʹܣ0~Ϊã1~ + BYTE byBarrierGateCtrl;//0-关闭道闸,1-开启道闸,2-停止道闸 3-锁定道闸,4~解锁道闸 + BYTE byEntranceNo;//出入口编号 [1,8] + BYTE byUnlock;//启用解锁使能,0~为不启用,1~启用 BYTE byRes[12]; }NET_DVR_BARRIERGATE_CFG, *LPNET_DVR_BARRIERGATE_CFG; -//ͬ +//出入口名单的数据同步 typedef struct tagNET_DVR_VEHICLE_CONTROL_LIST_INFO { DWORD dwSize; - DWORD dwChannel;//ͨ0xff - ȫͨITC Ĭ1 - DWORD dwDataIndex;//ˮţƽ̨άΨһֵͻ˲ʱ򣬸ֵЧֵҪͬ - char sLicense[MAX_LICENSE_LEN]; //ƺ - BYTE byListType;//ԣ0-1-ֹ - BYTE byPlateType; // - BYTE byPlateColor; //ɫ + DWORD dwChannel;//通道号0xff - 全部通道(ITC 默认是1) + DWORD dwDataIndex;//数据流水号(平台维护的数据唯一值,客户端操作的时候,该值不会起效。该值主要用于数据增量同步) + char sLicense[MAX_LICENSE_LEN]; //车牌号码 + BYTE byListType;//名单属性(名单)0-允许名单,1-禁止名单 + BYTE byPlateType; //车牌类型 + BYTE byPlateColor; //车牌颜色 BYTE byRes[21]; - char sCardNo[MAX_CARDNO_LEN]; // - NET_DVR_TIME_V30 struStartTime;//Чʼʱ - NET_DVR_TIME_V30 struStopTime;//Чʱ - //ƽ̨ͬˮŲظ£ͬͬijһ¼ˣڴ棬02014-03-03 + char sCardNo[MAX_CARDNO_LEN]; // 卡号 + NET_DVR_TIME_V30 struStartTime;//有效开始时间 + NET_DVR_TIME_V30 struStopTime;//有效结束时间 + //操作数(平台同步表流水号不会重复,用于增量更新,代表同步到同步表的某一条记录了,存在相机内存,重启后会清0)2014-03-03 char sOperateIndex[MAX_OPERATE_INDEX_LEN]; - BYTE byRes1[224]; // ֽ + BYTE byRes1[224]; // 保留字节 } NET_DVR_VEHICLE_CONTROL_LIST_INFO,*LPNET_DVR_VEHICLE_CONTROL_LIST_INFO; -//ȫȡӿ ӻȡ +//数据全部获取接口 (长连接获取) typedef struct tagNET_DVR_VEHICLE_CONTROL_COND { - DWORD dwChannel;//ͨ0xffffffff - ȫͨITC Ĭ1 - DWORD dwOperateType;//ͣVCA_OPERATE _TYPEɸѡ - char sLicense[MAX_LICENSE_LEN];//ƺ - char sCardNo[MAX_CARDNO_LEN]; // - BYTE byListType;//0-1-ֹ0xff-ȫ + DWORD dwChannel;//通道号0xffffffff - 全部通道(ITC 默认是1) + DWORD dwOperateType;//操作类型,参照VCA_OPERATE _TYPE。(可复选) + char sLicense[MAX_LICENSE_LEN];//车牌号码 + char sCardNo[MAX_CARDNO_LEN]; // 卡号 + BYTE byListType;//名单属性0-允许名单,1-禁止名单,0xff-全部 //2014-02-25 BYTE byRes1[3]; - DWORD dwDataIndex;//ˮ + DWORD dwDataIndex;//数据流水号 BYTE byRes[116]; }NET_DVR_VEHICLE_CONTROL_COND,*LPNET_DVR_VEHICLE_CONTROL_COND; -//Ҫͬ +//名单数据需要同步报警 typedef struct { DWORD dwSize; - DWORD dwDataIndex;//ˮţֵ豸ǰյݵһˮ,ƽ̨ͬʱһˮſʼͬ - char sOperateIndex[MAX_OPERATE_INDEX_LEN]; //ƽ̨ͬˮŲظ£ͬͬijһ¼ˣڴ棬0 2014-03-03 + DWORD dwDataIndex;//数据流水号(这个值返回设备当前接收到的数据的最后一个数据流水号,平台同步的时候从下一个流水号开始同步) + char sOperateIndex[MAX_OPERATE_INDEX_LEN]; //操作数(平台同步表流水号不会重复,用于增量更新,代表同步到同步表的某一条记录了,存在相机内存,重启后会清0) 2014-03-03 BYTE byRes[32]; }NET_DVR_VEHICLE_CONTROL_LIST_DSALARM, *LPNET_DVR_VEHICLE_CONTROL_LIST_DSALARM; -// +//车辆报警 typedef struct tagNET_DVR_VEHICLE_CONTROL_ALARM { DWORD dwSize; - BYTE byListType; //0-1-ֹ2-ʱ - BYTE byPlateType; // - BYTE byPlateColor; //ɫ + BYTE byListType; //名单属性0-允许名单,1-禁止名单,2-临时名单 + BYTE byPlateType; //车牌类型 + BYTE byPlateColor; //车牌颜色 BYTE byRes1; - char sLicense[MAX_LICENSE_LEN];//ƺ - char sCardNo[MAX_CARDNO_LEN]; // - NET_DVR_TIME_V30 struAlarmTime; //ʱ - DWORD dwChannel; //豸ͨţֱIPCΪipcͨţDVR\nvr,ΪDVR\NVRͨ - DWORD dwPicDataLen; //ͼƬݴС0ʾͼƬΪ0DZʾͼƬ - BYTE byPicType; //ͼƬͣ0-JPEG - BYTE byPicTransType; //ͼƬݴ䷽ʽ: 0-ƣ1-url + char sLicense[MAX_LICENSE_LEN];//车牌号码 + char sCardNo[MAX_CARDNO_LEN]; // 卡号 + NET_DVR_TIME_V30 struAlarmTime; //报警时间 + DWORD dwChannel; //设备通道号,如果直连的是IPC,则为ipc通道号;如果连的DVR\nvr,则为DVR\NVR的通道号 + DWORD dwPicDataLen; //图片数据大小,0表示无图片,不为0是表示后面带图片数据 + BYTE byPicType; //图片类型,0-JPEG + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url BYTE byRes3[2]; char *pPicData; BYTE byRes2[48]; }NET_DVR_VEHICLE_CONTROL_ALARM,*LPNET_DVR_VEHICLE_CONTROL_ALARM; -// +//消防报警 typedef struct tagNET_DVR_FIRE_ALARM { DWORD dwSize; - NET_DVR_TIME_V30 struAlarmTime;//ʱ + NET_DVR_TIME_V30 struAlarmTime;//报警时间 BYTE byRes[128]; }NET_DVR_FIRE_ALARM,*LPNET_DVR_FIRE_ALARM; -//豸ƽֹݿϢ +//清除设备车牌禁止名单数据库信息 typedef struct { DWORD dwSize; - DWORD dwDelType;//ɾͣɾͣVCA_OPERATE _TYPEɸѡ - char sLicense[16]; //ƺ - char sCardNo[48]; // - BYTE byPlateType; // - BYTE byPlateColor; //ɫ - BYTE byOperateType; //ɾ(0-ɾ,0xff-ɾȫ) + DWORD dwDelType;//删除条件类型,删除条件类型,参照VCA_OPERATE _TYPE。(可复选) + char sLicense[16]; //车牌号码 + char sCardNo[48]; // 卡号 + BYTE byPlateType; //车牌类型 + BYTE byPlateColor; //车牌颜色 + BYTE byOperateType; //删除操作类型(0-条件删除,0xff-删除全部) //2014-02-25 - BYTE byListType;//0-1-ֹ 2014-03-03 - DWORD dwDataIndex;//ˮ - //ƽ̨ͬˮŲظ£ͬͬijһ¼ˣڴ棬02014-03-03 + BYTE byListType;//名单属性0-允许名单,1-禁止名单 2014-03-03 + DWORD dwDataIndex;//数据流水号 + //操作数(平台同步表流水号不会重复,用于增量更新,代表同步到同步表的某一条记录了,存在相机内存,重启后会清0)2014-03-03 char sOperateIndex[MAX_OPERATE_INDEX_LEN]; BYTE byRes[24]; } NET_DVR_VEHICLE_CONTROL_DELINFO, *LPNET_DVR_VEHICLE_CONTROL_DELINFO; -//ƹ +//常亮灯功能 typedef struct tagNET_DVR_GATELAMP_INFO { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byLaneNo; //բţ0-ʾЧֵ(豸ҪЧֵж),1-բ1 - BYTE byBrightlampCtrl;//0-رճƣ1- + DWORD dwChannel; //通道号 + BYTE byLaneNo; //道闸号(0-表示无效值(设备需要做有效值判断),1-道闸1) + BYTE byBrightlampCtrl;//0-关闭常亮灯,1-开启常亮灯 BYTE byRes[14]; }NET_DVR_GATELAMP_INFO,*LPNET_DVR_GATELAMP_INFO; -//SDI1.0 -#define MATRIX_MAX_OUTPUT_NUM 256 //ͨ +//SDI矩阵1.0 +#define MATRIX_MAX_OUTPUT_NUM 256 //矩阵最大输出通道个数 typedef struct tagNET_DVR_MATRIX_BASE_CFG { DWORD dwSize; - DWORD dwValidInputNum; //Чͨ - DWORD dwValidOutputNum; //Чͨ + DWORD dwValidInputNum; //有效的输入通道数 + DWORD dwValidOutputNum; //有效的输出通道数 BYTE byRes[64]; }NET_DVR_MATRIX_BASE_CFG, *LPNET_DVR_MATRIX_BASE_CFG; typedef struct tagNET_DVR_MATRIX_SWITCH_INFO { DWORD dwSize; - DWORD dwInputChan; //ͨţΪ0ʾȡָĹϵ - DWORD dwOutputChan; //Ҫлͨ, (ĻΪĻ(1ֽ豸+1ֽڱ+2ֽĻ)), 0xffffffffʾл - DWORD dwMatrixID; //ID + DWORD dwInputChan; //输入通道号,为0表示取消和指定输出的关联关系 + DWORD dwOutputChan; //要切换到的输出通道号, (屏幕服务器为屏幕索引号(1字节设备号+1字节保留+2字节屏幕索引号)), 0xffffffff表示切换到所有输出 + DWORD dwMatrixID; //矩阵ID号 BYTE byRes[28]; }NET_DVR_MATRIX_SWITCH_INFO, *LPNET_DVR_MATRIX_SWITCH_INFO; typedef struct tagNET_DVR_IO_RELATION_INFO { DWORD dwSize; - DWORD dwIORelation[MATRIX_MAX_OUTPUT_NUM]; //ͨͨ, dwIORelation[i] = jʾͨ(i + 1)ͨj, - //dwIORelation[i] = 0ʾͨi + 1δͨ + DWORD dwIORelation[MATRIX_MAX_OUTPUT_NUM]; //输出通道关联的输入通道, dwIORelation[i] = j表示输出通道(i + 1)和输入通道j关联, + //dwIORelation[i] = 0表示输出通道i + 1未关联输入通道 BYTE byRes[256]; }NET_DVR_IO_RELATION_INFO, *LPNET_DVR_IO_RELATION_INFO; -//ӿ +//批量接口配置 typedef struct tagNET_DVR_EXTERNAL_DEVCOND { DWORD dwSize; - BYTE byExternalDevTpye;//0-()1-Զͷ豸2-ڿƻ3-led 0xff-ȫϢӻȡʱʹã - BYTE byRelativeIndex;//0-()(ڽ) Χ 1~8 LedΧǣ1255 0xff-ȫϢӻȡʱʹã - // BYTE byLaneID;// ߼ + BYTE byExternalDevTpye;//0-其他(保留),1-远距离读头设备,2-出入口控制机,3-led屏 0xff-全部信息(长连接获取时使用) + BYTE byRelativeIndex;//0-其他(保留),索引(相对于接入类型) 范围 1~8 Led的相对索引范围是(1~255) 0xff-全部信息(长连接获取时使用) + // BYTE byLaneID;// 逻辑车道号 BYTE byRes[30]; }NET_DVR_EXTERNAL_DEVCOND,*LPNET_DVR_EXTERNAL_DEVCOND; typedef struct tagNET_DVR_EXTERNAL_DEVCFG { DWORD dwSize; - BYTE byExternalDevTpye;//0-1-Զͷ豸2-ڿƻ3-led + BYTE byExternalDevTpye;//0-其他,1-远距离读头设备,2-出入口控制机,3-led屏 BYTE byRes2[3]; char sDevName[MAX_DEVNAME_LEN]; union @@ -38287,117 +38287,117 @@ typedef struct tagNET_DVR_EXTERNAL_DEVCFG BYTE byUnionLen[656]; struct { - NET_DVR_IPADDR struDevIP;//DEV IPַ 144 - WORD wDevPort;//豸˿ + NET_DVR_IPADDR struDevIP;//DEV IP地址 144 + WORD wDevPort;//设备端口 BYTE byRes[510]; - }struRrReader;//Զͷ豸 + }struRrReader;//远距离读头设备 struct { - BYTE byRs485No; //RS485(豸һñſظͲһñŻ) - BYTE byDevCtrlCode;//ַ豸(1-255) - BYTE byAutoIssuedData;//ǷԶ·Ƭ 0-Զ·1-Զ· - BYTE byOfflineDetEnable;//߼ 0-رգ1- - BYTE byDetCycle;//ڣ060 λ s + BYTE byRs485No; //RS485编号(外接设备类型一样,该编号可以重复;类型不一样,该编号互斥) + BYTE byDevCtrlCode;//拨码地址,用于区分设备(1-255) + BYTE byAutoIssuedData;//是否自动下发卡片数据 0-不自动下发,1-自动下发 + BYTE byOfflineDetEnable;//离线检测 0-关闭,1-开启 + BYTE byDetCycle;//检测周期(0~60 单位 s) BYTE byRes[651]; - }struGateway;//ڿƻ + }struGateway;//出入口控制机 struct { - BYTE byExternalMode;//0-RS485,1- + BYTE byExternalMode;//0-RS485,1-网络 BYTE byRes[3]; - NET_DVR_IPADDR struDevIP;//DEV IPַ 144 (byExternalMode == 1 ʱЧ) - WORD wDevPort;//豸˿(byExternalMode == 1 ʱЧ) - BYTE byRs485No; //RS485(豸һñſظͲһñŻ) - BYTE byDevCtrlCode;//ַ豸(1-255) - //ledͨƿʾģͬĿƿֵ֧ʾʽͬ - BYTE byCtrlCardType;//ƿ 0-(Чֵ) 1- EQ2013 - BYTE byLedScreenType;// 0-ɫ 1-˫ɫ - BYTE byLedScreenUse;//;0- 1-λ 2-ʾ 3-շ - BYTE byLedDisplayMode;//Ļʾʽ: 1 "ʾ", 2 "" ,3 "" ,4 "", 5 "" - char sLedCustomInfo[MAX_LED_INFO];//ĻʾϢ - //ledɿƿƵģledԸĿʵʹøСʱҪն֪ͨƿĿǰʹõ - DWORD dwLedScreenH;//ʾɸ߶ҪLED - DWORD dwLedScreenW;//ʾɿҪLED + NET_DVR_IPADDR struDevIP;//DEV IP地址 144 (在byExternalMode == 1 时生效) + WORD wDevPort;//设备端口(在byExternalMode == 1 时生效) + BYTE byRs485No; //RS485编号(外接设备类型一样,该编号可以重复;类型不一样,该编号互斥) + BYTE byDevCtrlCode;//拨码地址,用于区分设备(1-255) + //led屏通过控制卡控制显示的,不同的控制卡类型支持的显示方式不同 + BYTE byCtrlCardType;//控制卡类型 0-保留(无效值) 1- EQ2013 + BYTE byLedScreenType;//屏类型 0-单色屏 1-双色屏 + BYTE byLedScreenUse;//屏用途0-其它 1-区位屏 2-提示屏 3-收费屏 + BYTE byLedDisplayMode;//屏幕字体显示方式: 1 "立即显示", 2 "左移" ,3 "右移" ,4 "上移", 5 "下移" + char sLedCustomInfo[MAX_LED_INFO];//屏幕字体显示信息 + //led屏是由控制卡控制的,led屏可以根据项目实际使用更换大小,此时需要终端通知控制卡目前使用的屏宽和屏高 + DWORD dwLedScreenH;//显示屏组成高度上需要的LED点数 + DWORD dwLedScreenW;//显示屏组成宽度上需要的LED点数 BYTE byRes1[236]; - }struLed;//led - }uExternalDevInfo; //byExternalMode ֵĸЧ + }struLed;//led屏 + }uExternalDevInfo; //由byExternalMode 值来决定哪个有效 BYTE byRes[128]; }NET_DVR_EXTERNAL_DEVCFG, *LPNET_DVR_EXTERNAL_DEVCFG; -//ӻȡ -typedef struct tagNET_DVR_EXTERNAL_DEVSTATUS//Զͷ豸 +//长连接获取配置 +typedef struct tagNET_DVR_EXTERNAL_DEVSTATUS//远距离读头设备 { DWORD dwSize; - char sDevName[MAX_DEVNAME_LEN];//豸 - BYTE byExternalDevTpye;//0-()1-Զͷ豸2-ڿƻ3-led 0xff-ȫϢӻȡʱʹã - BYTE byRelativeIndex;//0-()(ڽ) Χ 1~8 0xff-ȫϢӻȡʱʹã - BYTE byOnline;//0-ߣ1- + char sDevName[MAX_DEVNAME_LEN];//设备名称 + BYTE byExternalDevTpye;//0-其他(保留),1-远距离读头设备,2-出入口控制机,3-led屏 0xff-全部信息(长连接获取时使用) + BYTE byRelativeIndex;//0-其他(保留),相对索引(相对于接入类型能) 范围 1~8 0xff-全部信息(长连接获取时使用) + BYTE byOnline;//0-不在线,1-在线 BYTE byRes[125]; }NET_DVR_EXTERNAL_DEVSTATUS,*LPNET_DVR_EXTERNAL_DEVSTATUS; -//ն˳ڼ +//终端出入口检测配置 typedef struct tagNET_DVR_ENTRANCEDET_CFG { - DWORD dwSize; //ṹ - //߼⿪ʱ⵽豸ߣնƥ俨ƬϢ͵բָڿƻɳڿƻƥƵբ - BYTE byOfflineDetEnable;//߼ 0-رգ1- - BYTE byDetCycle;//ڣ060 λ s - BYTE byDevCtrlCode;//ڿƻַ豸(1-255) + DWORD dwSize; //结构长度 + //离线检测开启时,如果检测到设备在线,则由终端匹配卡片信息,并发送道闸控制指令给出入口控制机;否则由出入口控制机自身匹配控制道闸 + BYTE byOfflineDetEnable;//离线检测 0-关闭,1-开启 + BYTE byDetCycle;//检测周期(0~60 单位 s) + BYTE byDevCtrlCode;//出入口控制机拨码地址,用于区分设备(1-255) BYTE byRes[61]; }NET_DVR_ENTRANCEDET_CFG,*LPNET_DVR_ENTRANCEDET_CFG; -//ն˳ڿ(ƽӿ ·ƬϢ) +//终端出入口控制(控制接口 下发卡片信息) typedef struct tagNET_DVR_ENTRANCEDEV_COMMAND { - DWORD dwSize; //ṹ - BYTE byDevCtrlCode;//ڿƻַ豸(1-255) - BYTE byManualIssuedData;//ֶ· 0-رգ1- + DWORD dwSize; //结构长度 + BYTE byDevCtrlCode;//出入口控制机拨码地址,用于区分设备(1-255) + BYTE byManualIssuedData;//手动数据下发 0-关闭,1-开启 BYTE byRes[62]; }NET_DVR_ENTRANCEDEV_COMMAND,*LPNET_DVR_ENTRANCEDEV_COMMAND; -//ն˳ڿ(ƽӿ ·ƬϢ) +//终端出入口控制(控制接口 清空下发卡片信息) typedef struct tagNET_DVR_ENISSUED_DATADEL { - DWORD dwSize; //ṹ - BYTE byDevCtrlCode;//ڿƻַ豸(1-255) + DWORD dwSize; //结构长度 + BYTE byDevCtrlCode;//出入口控制机拨码地址,用于区分设备(1-255) BYTE byRes[27]; }NET_DVR_ENISSUED_DATADEL,*LPNET_DVR_ENISSUED_DATADEL; -//ڹշϸʽ +//出入口过车收费明细(监听方式) typedef struct _tagNET_ITS_PASSVEHICLE_COST_ITEM { - DWORD dwSize; //ṹ - DWORD dwPassVehicleID; //ݵĹ - BYTE byIntime[MAX_TIME_LEN]; //볡ʱʽΪyyyymmddhh24missfff - BYTE byOuttime[MAX_TIME_LEN]; //ʱʽΪyyyymmddhh24missfff - BYTE byCardNo[MAX_CARD_LEN]; // - BYTE byPlateInfo[MAX_LICENSE_LEN]; //ƺ - float fPayCost; //շѽ(λԪ) - BYTE byOperatorName[MAX_OPERATORNAME_LEN]; //Ա - BYTE byVehicleType; // 0-Сͳ 2 ͳ - BYTE byRes1[3]; //Ԥֶ1 - DWORD dwPayRuleID; // շѹˮ - DWORD dwFreeRuleID; // ˮ - BYTE byRes2[256]; // Ԥֶ2 + DWORD dwSize; //结构长度 + DWORD dwPassVehicleID; //过车序号与出入口数据的过车序号相关联 + BYTE byIntime[MAX_TIME_LEN]; //入场时间格式为yyyymmddhh24missfff + BYTE byOuttime[MAX_TIME_LEN]; //出场时间格式为yyyymmddhh24missfff + BYTE byCardNo[MAX_CARD_LEN]; //卡号 + BYTE byPlateInfo[MAX_LICENSE_LEN]; //车牌号码 + float fPayCost; //收费金额(单位元) + BYTE byOperatorName[MAX_OPERATORNAME_LEN]; //操作人员名称 + BYTE byVehicleType; //车辆类型 0-小型车 2 大型车 + BYTE byRes1[3]; //预留字段1 + DWORD dwPayRuleID; // 收费规则流水号 + DWORD dwFreeRuleID; // 减免规则流水号 + BYTE byRes2[256]; // 预留字段2 }NET_ITS_PASSVEHICLE_COST_ITEM, *LPNET_ITS_PASSVEHICLE_COST_ITEM; -//ڽӰݣʽ +//出入口交接班数据(监听方式) typedef struct _tagNET_ITS_HANDOVER_INFO { - DWORD dwSize; //ṹ - BYTE byOperatorName[MAX_OPERATORNAME_LEN]; //Ա - BYTE byOperatorCard[MAX_CARD_LEN]; //Ա - BYTE byStartTime[MAX_TIME_LEN];//ϰʱʽyyyymmddhh24miss - BYTE byEndTime[MAX_TIME_LEN]; //°ʱʽyyyymmddhh24miss - float fTotal_Pay; //ϰڼܵշѽ(λԪ) - DWORD dwTotal_Records; //ϰڼܵĹշѵļ¼ - BYTE byRes[64]; //Ԥ + DWORD dwSize; //结构长度 + BYTE byOperatorName[MAX_OPERATORNAME_LEN]; //操作人员名称 + BYTE byOperatorCard[MAX_CARD_LEN]; //操作人员卡号 + BYTE byStartTime[MAX_TIME_LEN];//上班时间格式形如yyyymmddhh24miss + BYTE byEndTime[MAX_TIME_LEN]; //下班时间格式形如yyyymmddhh24miss + float fTotal_Pay; //本次上班期间总的收费金额(单位元) + DWORD dwTotal_Records; //本次上班期间总的过车收费的记录条数 + BYTE byRes[64]; //预留 }NET_ITS_HANDOVER_INFO, *LPNET_ITS_HANDOVER_INFO; typedef struct tagNET_DVR_CURTRIGGERMODE //(3.7Ver) { DWORD dwSize; - DWORD dwTriggerType; //ͣITC_TRIGGERMODE_TYPE + DWORD dwTriggerType; //触发类型,详见ITC_TRIGGERMODE_TYPE BYTE byRes[24]; }NET_DVR_CURTRIGGERMODE, *LPNET_DVR_CURTRIGGERMODE; @@ -38405,88 +38405,88 @@ typedef struct tagNET_DVR_CURTRIGGERMODE //(3.7Ver) typedef struct tagNET_DVR_TEMP_HUMI { - DWORD dwSize; // ݳ && 汾ںչ - DWORD dwChannel; // ͨţĬ1 - int iHumidity; // ʪȣ֣val/1000С֣val%1000 - int iTemp; // ¶ȣ֣val/1000С֣val%100 - BYTE byRes[8]; // ֽ + DWORD dwSize; // 内容长度 && 版本(用于后期扩展) + DWORD dwChannel; // 通道号,默认1 + int iHumidity; // 湿度,整数部分:val/1000,小数部分:val%1000 + int iTemp; // 温度,整数部分:val/1000,小数部分:val%100 + BYTE byRes[8]; // 保留字节 }NET_DVR_TEMP_HUMI, *LPNET_DVR_TEMP_HUMI; typedef struct tagNET_DVR_ALARMSOUNDMODE_CFG { - DWORD dwSize; // ݳ && 汾ںչ - DWORD dwChannel; // ͨţĬ1 - DWORD dwSoundMode; // ģʽ: 0ģʽ1ģʽ2ģʽ - BYTE byRes[12]; // ֽ + DWORD dwSize; // 内容长度 && 版本(用于后期扩展) + DWORD dwChannel; // 通道号,默认1 + DWORD dwSoundMode; // 报警模式: 0提醒模式;1警报模式;2静音模式 + BYTE byRes[12]; // 保留字节 }NET_DVR_ALARMSOUNDMODE_CFG, *LPNET_DVR_ALARMSOUNDMODE_CFG; typedef struct tagNET_DVR_SECURITYMODE { - DWORD dwSize;// ݳ && 汾ںչ - DWORD dwChannel; // ͨţĬ1 - DWORD dwMode; // ȫģʽ: 1ãܣ2ã - char szRandCode[6]; //豸"֤" - BYTE byRes[6]; // ֽ + DWORD dwSize;// 内容长度 && 版本(用于后期扩展) + DWORD dwChannel; // 通道号,默认1 + DWORD dwMode; // 安全模式: 1启用,码流加密;2不启用,码流不加密 + char szRandCode[6]; //设备出厂的"随机验证码" + BYTE byRes[6]; // 保留字节 }NET_DVR_SECURITYMODE, *LPNET_DVR_SECURITYMODE; typedef struct tagNET_DVR_MOBILE_CAPTUREPIC_CFG { DWORD dwSize; - BYTE byPreviewFpsAdjMode; /* Ԥ֡ʵģʽ:0-ڣ׼֡Ԥ,1-׼֡Ԥ,2-GPSٶȽ֡ʵ */ - BYTE bySelPeccType; /* ǷѡΥ */ - BYTE byOptHabit; /* ȡ֤ϰ, 0:ȡ֤;1:̰ȡ֤ */ - BYTE byEnablePeccRec; /* 1: ʹΥ¼ץȡ, 0: ֹΥ¼ץȡ */ - BYTE byPicSize; /*0=CIF,1=QCIF,2=D1,3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6-VGA7-XVGA8-HD900p9-HD108010-2560*192011-1600*30412-2048*153613-2448*2048,14-2448*120015-2448*80016-XGA(1024*768)17-SXGA(1280*1024),18-WD1(960*576/960*480),19-1080i */ - BYTE byPicQuality; /* ͼƬϵ 0- 1-Ϻ 2-һ */ + BYTE byPreviewFpsAdjMode; /* 预览帧率调节模式:0-不调节,标准帧率预览,1-标准低帧率预览,2-根据GPS速度进行帧率调节 */ + BYTE bySelPeccType; /* 是否选择违章类型 */ + BYTE byOptHabit; /* 取证操作习惯, 0:长按取证;1:短按两次取证 */ + BYTE byEnablePeccRec; /* 1: 使能违章录像抓取, 0: 禁止违章录像抓取 */ + BYTE byPicSize; /*0=CIF,1=QCIF,2=D1,3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6-VGA,7-XVGA,8-HD900p,9-HD1080,10-2560*1920,11-1600*304,12-2048*1536,13-2448*2048,14-2448*1200,15-2448*800,16-XGA(1024*768),17-SXGA(1280*1024),18-WD1(960*576/960*480),19-1080i */ + BYTE byPicQuality; /* 图片质量系数 0-最好 1-较好 2-一般 */ BYTE byRes[62]; }NET_DVR_MOBILE_CAPTUREPIC_CFG,*LPNET_DVR_MOBILE_CAPTUREPIC_CFG; typedef struct tagNET_DVR_CMS_PARAM { DWORD dwSize; - NET_DVR_IPADDR struAddr; // ƽ̨IP - WORD wServerPort; // ƽ̨˿ڣ - BYTE bySeverProtocolType; //ƽ̨Э 1-˽У2-Ehome - BYTE byStatus; //豸עᵽƽ̨״̬1-δעᣬ2-ע - BYTE sDeviceId[NAME_LEN/*32*/]; //豸IDƽ̨ṩ - char sPassWord[PASSWD_LEN]; // - /********* IPC5.1.7 Begin 2014-03-21***********/ - BYTE sPlatformEhomeVersion[NAME_LEN];//ƽ̨EHOMEЭ汾 - /********* IPC5.1.7 end 2014-03-21***********/ - BYTE byNetWork; //ͣ0- 壬1-Զ2-ȣ3-磬4-3G磨磩5-16-2 - BYTE byAddressType; //0 - , 1 - ipv4/ipv6ַ2 - - BYTE byProtocolVersion; //Э汾 0 - , 1 C v2.02 C v4.0,3-v2.6 + NET_DVR_IPADDR struAddr; // 平台服务器IP + WORD wServerPort; // 平台服务器侦听端口, + BYTE bySeverProtocolType; //平台协议类型 1-私有,2-Ehome + BYTE byStatus; //设备注册到该平台的状态,1-未注册,2-已注册 + BYTE sDeviceId[NAME_LEN/*32*/]; //设备ID,由平台提供 + char sPassWord[PASSWD_LEN]; //密码 + /********* IPC5.1.7 新增参数 Begin 2014-03-21***********/ + BYTE sPlatformEhomeVersion[NAME_LEN];//平台EHOME协议版本 + /********* IPC5.1.7 新增参数 end 2014-03-21***********/ + BYTE byNetWork; //网络类型:0- 无意义,1-自动,2-有线网络优先,3-有线网络,4-3G网络(无线网络),5-有线网络1,6-有线网络2 + BYTE byAddressType; //0 - 无意义, 1 - ipv4/ipv6地址,2 - 域名 + BYTE byProtocolVersion; //协议版本 0 - 无意义, 1 – v2.0,2 – v4.0,3-v2.6 BYTE byRes1; - BYTE sDomainName[MAX_DOMAIN_NAME/*64*/]; //ƽ̨byAddressTypeΪ2ʱЧ - BYTE byEnable; //0-رգ1- - BYTE byRes[139]; // ֽ + BYTE sDomainName[MAX_DOMAIN_NAME/*64*/]; //平台服务器域名,byAddressType为2时有效 + BYTE byEnable; //0-关闭,1-开启 + BYTE byRes[139]; // 保留字节 }NET_DVR_CMS_PARAM, *LPNET_DVR_CMS_PARAM; -//ṹ +//条件结构 typedef struct tagNET_DVR_HEATMAP_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byDetSceneID;//ⳡ[1],ǰ֧1, IPCĬ0 + DWORD dwChannel; //通道号 + BYTE byDetSceneID;//检测场景号[1],球机当前支持1个场景, IPC默认是0 BYTE byRes[63]; }NET_DVR_HEATMAP_COND, *LPNET_DVR_HEATMAP_COND; typedef struct tagNET_DVR_HEATMAP_PARAM { - BYTE byTargetTrackEnable;//Ŀ꣺0-رգ1-Ĭ0-ر - BYTE bySensitivity; //ȲΧ1-100Ĭ50 - BYTE byBackgroundUpdateRate;//ٶȣΧ1-100Ĭ50 - BYTE bySceneChangeLevel;//仯ȼΧ1-100Ĭ50 - BYTE byMinTargetSize;//СĿߴ磺Χ1-100Ĭ50 + BYTE byTargetTrackEnable;//目标:0-关闭,1-开启,默认0-关闭 + BYTE bySensitivity; //灵敏度参数,范围1-100,默认50 + BYTE byBackgroundUpdateRate;//背景更新速度:范围1-100,默认50 + BYTE bySceneChangeLevel;//场景变化等级:范围1-100,默认50 + BYTE byMinTargetSize;//最小目标尺寸:范围1-100,默认50 /* - 0- ĬϴͣCOMM_UPLOAD_HEATMAP_RESULT - 1- ϴͣCOMM_UPLOAD_HEATMAP_RESULT_PDC COMM_UPLOAD_HEATMAP_RESULT_DURATION + 0- 默认上传类型:COMM_UPLOAD_HEATMAP_RESULT; + 1- 上传类型:COMM_UPLOAD_HEATMAP_RESULT_PDC 和 COMM_UPLOAD_HEATMAP_RESULT_DURATION; */ BYTE byUploadHeatMapResultType; BYTE byDayReport; BYTE byWeekReport; - float fConfidence;//Ŷ[0.00,100.00] + float fConfidence;//置信度[0.00,100.00] BYTE byMonthReport; BYTE byYearReport; BYTE byRes[6]; @@ -38494,76 +38494,76 @@ typedef struct tagNET_DVR_HEATMAP_PARAM #define MAX_HEATMAPREGION_NUM 8 -//ȶͼýṹ +//热度图检测配置结构 typedef struct tagNET_DVR_HEATMAP_CFG { DWORD dwSize; - BYTE byEnable; //ʹܣǷ + BYTE byEnable; //使能,是否开启 BYTE byRes[3]; - NET_VCA_POLYGON struRegion[MAX_HEATMAPREGION_NUM/*8*/];//Χ + NET_VCA_POLYGON struRegion[MAX_HEATMAPREGION_NUM/*8*/];//区域范围 NET_DVR_HEATMAP_PARAM struHeatMap ; - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ - //ʱ + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + //布防时间 NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/]; BYTE byRes1[512]; }NET_DVR_HEATMAP_CFG, *LPNET_DVR_HEATMAP_CFG; -//ȶͼϴ +//热度图报警上传 typedef struct tagNET_DVR_HEATMAP_RESULT { DWORD dwSize; - NET_VCA_DEV_INFO struDevInfo;/*豸Ϣ*/ - NET_DVR_TIME_EX struStartTime;/*ʼʱ*/ - NET_DVR_TIME_EX struEndTime;/*ʱ*/ - DWORD dwMaxHeatMapValue;//ȶֵ - DWORD dwMinHeatMapValue;//Сȶֵ - DWORD dwTimeHeatMapValue;// (ʱȶֵ)ƽȶֵ - WORD wArrayLine;//ͼƬصֵ - WORD wArrayColumn;//ͼƬصֵ ֵΪ0ʱصֵڴϢڣ - BYTE* pBuffer; //ȶͼƬصϢ - BYTE byDetSceneID;//ⳡ[1],ǰ֧1, IPCĬ0 - BYTE byBrokenNetHttp; //־λ0-شݣ1-ش - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cStartTimeDifferenceH; /*ʼʱUTCʱСʱ-12 ... +14+ʾ*/ - char cStartTimeDifferenceM; /*ʼʱUTCʱӣ-30, 30, 45+ʾ*/ - char cStopTimeDifferenceH; /*ʱUTCʱСʱ-12 ... +14 +ʾ*/ - char cStopTimeDifferenceM; /*ʱUTCʱӣ-30, 30, 45+ʾ*/ - BYTE byArrayUnitType; //ԪͣϢÿصݵͣ1-byte2-short,4-int + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + NET_DVR_TIME_EX struStartTime;/*开始时间*/ + NET_DVR_TIME_EX struEndTime;/*结束时间*/ + DWORD dwMaxHeatMapValue;//最大热度值 + DWORD dwMinHeatMapValue;//最小热度值 + DWORD dwTimeHeatMapValue;// (时间热度值)平均热度值 + WORD wArrayLine;//图片像素点行值 + WORD wArrayColumn;//图片像素点列值 (当行列值为0的时候,像素点值内存信息不存在) + BYTE* pBuffer; //热度图片像素点数据信息 + BYTE byDetSceneID;//检测场景号[1],球机当前支持1个场景, IPC默认是0 + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cStartTimeDifferenceH; /*开始时间与UTC的时差(小时),-12 ... +14,+表示东区*/ + char cStartTimeDifferenceM; /*开始时间与UTC的时差(分钟),-30, 30, 45,+表示东区*/ + char cStopTimeDifferenceH; /*结束时间与UTC的时差(小时),-12 ... +14, +表示东区*/ + char cStopTimeDifferenceM; /*结束时间与UTC的时差(分钟),-30, 30, 45,+表示东区*/ + BYTE byArrayUnitType; //矩阵单元数据类型(矩阵信息中每个像素点数据的数据类型),1-byte,2-short,4-int BYTE byRes1[2]; - DWORD dwTotalTime;//ͣʱܺͣλ룬Աͣʱ䱨ʱϴ + DWORD dwTotalTime;//停留时间总和,单位秒,按人员停留时间报警时上传 BYTE byRes[112]; }NET_DVR_HEATMAP_RESULT,*LPNET_DVR_HEATMAP_RESULT; -//ȶͼ ṹ +//热度图报警查找 条件结构体 typedef struct tagNET_DVR_HEATMAP_QUERY_COND { DWORD dwSize; - DWORD dwChannel ;//ͨ - NET_DVR_TIME_EX struStartTime;/*ʼʱ*/ - NET_DVR_TIME_EX struEndTime;/*ʱ*/ - BYTE byReportType;//0-Чֵ1-ձ2-ܱ3-±4-걨 - BYTE byDetSceneID;//ⳡ[1],ǰ֧1, IPCĬ0 - BYTE byHeatMapInfoType;//0~ȡռȶͼƬʽ1~ȡռȶȾϢʽ2~ȡռȶͼƬͿռȶȾϢ - BYTE byStatisticalModel;//ͳģʽ 0s-Ĭϣ1-ͣʱ䣬2-ͳƣ + DWORD dwChannel ;//通道号 + NET_DVR_TIME_EX struStartTime;/*开始时间*/ + NET_DVR_TIME_EX struEndTime;/*结束时间*/ + BYTE byReportType;//0-无效值,1-日报表,2-周报表,3-月报表,4-年报表 + BYTE byDetSceneID;//检测场景号[1],球机当前支持1个场景, IPC默认是0 + BYTE byHeatMapInfoType;//0~获取空间热度图片方式,1~获取空间热度矩阵信息方式,2~获取空间热度图片和空间热度矩阵信息 + BYTE byStatisticalModel;//统计模式 0s-保留(默认),1-停留时间,2-按人数统计) BYTE byRes[124]; }NET_DVR_HEATMAP_QUERY_COND,*LPNET_DVR_HEATMAP_QUERY_COND; -//ȶͼ +//热度图报警查找 typedef struct tagNET_DVR_HEATMAP_INFO { DWORD dwSize; - NET_DVR_TIME_EX struStartTime;/*ʼʱ*/ - NET_DVR_TIME_EX struEndTime; /*ʱ*/ - DWORD dwHeatMapPicLen; /*ռȶͼƬ(ͼƬʱ򣬸ֶΪ0ûͼƬʱ򣬸ֶΪ0)*/ - BYTE* pBuffer; //ȶͼƬϢ - DWORD dwTimeHeatMapValue ; //ʱȶֵ(пȶͼʱ,ֶβҪֵ) - DWORD dwHeatMapMaxValue;//ȶȵԱʱ(s)(ռȶͼʱЧ) - DWORD dwHeatMapMinValue;//ȶȵԱʱ(s) (ռȶͼʱЧ) - WORD wArrayLine;//ͼƬصֵ ϴȶȾϢʱЧ - WORD wArrayColumn;//ͼƬصֵ ֵΪ0ʱصֵڴϢڣϴȶȾϢʱЧ - BYTE* pArrayBuffer;//ȶȾϢݵ͸ϢΪwArrayLine* wArrayColumn*ԪͳȣbyArrayUnitTypeΪ1ʾΪintͣҪ4ֽڣ - BYTE byArrayUnitType;//ԪͣϢÿصݵͣ0~byte1~int(豸зؾϢʱЧ) + NET_DVR_TIME_EX struStartTime;/*间隔开始时间*/ + NET_DVR_TIME_EX struEndTime; /*间隔结束时间*/ + DWORD dwHeatMapPicLen; /*空间热度图片长度(当含有图片的时候,该字段为非0,没有图片的时候,该字段为0)*/ + BYTE* pBuffer; //热度图片数据信息 + DWORD dwTimeHeatMapValue ; //时间热度值(含有空热度图的时候,该字段不需要传值) + DWORD dwHeatMapMaxValue;//检测区域最高热度点人员活动时间(s)(空间热度图时有效) + DWORD dwHeatMapMinValue;//检测区域最低热度点人员活动时间(s) (空间热度图时有效) + WORD wArrayLine;//图片像素点行值 (上传热度矩阵信息时生效) + WORD wArrayColumn;//图片像素点列值 (当行列值为0的时候,像素点值内存信息不存在)(上传热度矩阵信息时生效) + BYTE* pArrayBuffer;//热度矩阵数据信息(矩阵数据的透传,信息长度为wArrayLine* wArrayColumn*单元数据类型长度(例如byArrayUnitType为1表示为int型,这里就要乘以4个字节)) + BYTE byArrayUnitType;//矩阵单元数据类型(矩阵信息中每个像素点数据的数据类型),0~byte,1~int;(当设备有返回矩阵信息时生效) BYTE byRes[107]; }NET_DVR_HEATMAP_INFO,*LPNET_DVR_HEATMAP_INFO; @@ -38571,94 +38571,94 @@ typedef struct tagNET_DVR_HEATMAP_INFO typedef struct tagNET_DVR_PDC_QUERY_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - NET_DVR_TIME_EX struStartTime; //ʼʱ - NET_DVR_TIME_EX struEndTime; //ʱ - BYTE byReportType; //0-Чֵ1-ձ2-ܱ3-±4-걨 - BYTE byEnableProgramStatistics; //Ƿ񰴽Ŀͳƣ0-1- - BYTE byTriggerPeopleCountingData;//ͳݵʹ, 0-1- - BYTE byMultiChannelSearch;//ͨѯʹ, 0-1-ǣpSearchChannel dwSearchChannelNumЧ - DWORD dwPlayScheduleNo; //Ŀͳʱճ̺ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱ + DWORD dwChannel; //通道号 + NET_DVR_TIME_EX struStartTime; //开始时间 + NET_DVR_TIME_EX struEndTime; //结束时间 + BYTE byReportType; //0-无效值,1-日报表,2-周报表,3-月报表,4-年报表 + BYTE byEnableProgramStatistics; //是否按节目统计,0-否,1-是 + BYTE byTriggerPeopleCountingData;//触发客流统计数据的使能, 0-否,1-是 + BYTE byMultiChannelSearch;//多通道查询使能, 0-否,1-是(pSearchChannel 、dwSearchChannelNum有效) + DWORD dwPlayScheduleNo; //按节目统计时关联的日程号 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 BYTE byRes1[3]; - DWORD dwSearchChannelNum; //ѯͨĿ - char* pSearchChannel; //ѯͨţСΪsizeof(DWORD)* dwSearchChannelNum - BYTE byChild;//ֻͯ, 0-1- - BYTE byMinTimeInterva;// Сʱ,0-Ч1-15, 2-30, 3һСʱ, 4-, 5-, 6- - BYTE byStatisticType;//ͳͣ0-Чֵ1-2-뿪3-ȫ,4-뿪ظ,5-(Ҫ·ֵ֧),0-Чֵʾͳ͵ѯ൱ڱֽڡȫʾͳΪ뿪 - BYTE byFaceExpression;//μFACE_EXPRESSION_GROUP_ENUM - BYTE byGender;//Ա1-У2-Ů3-ȫ0xff-㷨֧֣ûʶ - BYTE byMask;//Ƿ 0-ʾδ֪㷨֧֣1-2-3-ȫ0xff-㷨ֵ֧ģûʶ - BYTE byGroup;// - BYTE byGlasses; /*Ƿ۾0-δ֪1-ǣ2-3-ī, 4 - ȫ, 0xff-㷨֧֣ûʶ*/ + DWORD dwSearchChannelNum; //查询通道数目 + char* pSearchChannel; //查询通道号,大小为sizeof(DWORD)* dwSearchChannelNum + BYTE byChild;//只检测儿童, 0-否,1-是 + BYTE byMinTimeInterva;// 最小时间间隔,0-无效,1-15分钟, 2-30分钟, 3一小时, 4-天, 5-周, 6-月 + BYTE byStatisticType;//统计类型,0-无效值,1-进入人数,2-离开人数,3-全部,4-进入离开重复人数,5-人脸属性(需要下发具体支持的人脸属性),0-无效值表示不进行统计类型的条件查询,相当于保留字节。全部表示统计类型为进入和离开(不包括经过)。 + BYTE byFaceExpression;//参见FACE_EXPRESSION_GROUP_ENUM + BYTE byGender;//性别,1-男,2-女,3-全部,0xff-算法支持,但是没有识别出来 + BYTE byMask;//是否戴口罩 0-表示“未知”(算法不支持),1-不戴,2-戴,3-全部,0xff-算法支持的,但是没有识别出来 + BYTE byGroup;//段 + BYTE byGlasses; /*是否带眼镜,0-未知,1-是,2-否,3-戴墨镜, 4 - 全部, 0xff-算法支持,但是没有识别出来*/ BYTE byRes[96]; }NET_DVR_PDC_QUERY_COND, *LPNET_DVR_PDC_QUERY_COND; typedef struct tagNET_DVR_PROGRAM_INFO { - DWORD dwProgramNo; //Ŀ - BYTE sProgramName[NAME_LEN]; //Ŀ + DWORD dwProgramNo; //节目编号 + BYTE sProgramName[NAME_LEN]; //节目名称 BYTE byRes[16]; }NET_DVR_PROGRAM_INFO, *LPNET_DVR_PROGRAM_INFO; typedef struct tagNET_DVR_POSINFO_OVERLAY { DWORD dwSize; - BYTE byEnable;// PosϢӣ0-ӣ1- - BYTE byBackpackEnanble;//ǷӱϢǷӣ0-ӣ1- - BYTE bySexEnanble;//ǷԱϢǷӣ0-ӣ1- - BYTE byCarryEnanble;//ǷණϢǷӣ0-ӣ1- - BYTE byRideEnanble;//ǷﳵϢǷӣ0-ӣ1- - BYTE byMaskEnanble;//ǷӴϢǷӣ0-ӣ1- - BYTE byHatEnanble;//ǷӴñϢǷӣ0-ӣ1- - BYTE bySleeveEnanble;//Ƿӳ0-ӣ1- - BYTE byPantsTypeEnanble;//ǷӿϢǷӣ0-ӣ1- - BYTE byHairEnanble;//Ƿӳ̷ϢǷӣ0-ӣ1- - BYTE byGlassesEnanble;//ǷӴ۾ϢǷӣ0-ӣ1- - BYTE byResEnanble;//ǷϢǷӣ0-ӣ1- - BYTE byHeightEnanble;//ǷϢǷӣ0-ӣ1- + BYTE byEnable;// Pos信息叠加,0-不叠加,1-叠加 + BYTE byBackpackEnanble;//是否叠加背包信息是否叠加,0-不叠加,1-叠加 + BYTE bySexEnanble;//是否叠加性别信息是否叠加,0-不叠加,1-叠加 + BYTE byCarryEnanble;//是否叠加拎东西信息是否叠加,0-不叠加,1-叠加 + BYTE byRideEnanble;//是否叠加骑车信息是否叠加,0-不叠加,1-叠加 + BYTE byMaskEnanble;//是否叠加带口罩信息是否叠加,0-不叠加,1-叠加 + BYTE byHatEnanble;//是否叠加戴帽子信息是否叠加,0-不叠加,1-叠加 + BYTE bySleeveEnanble;//是否叠加长短袖情况,0-不叠加,1-叠加 + BYTE byPantsTypeEnanble;//是否叠加裤子属性信息是否叠加,0-不叠加,1-叠加 + BYTE byHairEnanble;//是否叠加长短发信息是否叠加,0-不叠加,1-叠加 + BYTE byGlassesEnanble;//是否叠加戴眼镜信息是否叠加,0-不叠加,1-叠加 + BYTE byResEnanble;//是否叠加信息是否叠加,0-不叠加,1-叠加 + BYTE byHeightEnanble;//是否叠加身高信息是否叠加,0-不叠加,1-叠加 BYTE byRes[511]; }NET_DVR_POSINFO_OVERLAY, *LPNET_DVR_POSINFO_OVERLAY; typedef struct tagNET_DVR_PDC_RESULT { DWORD dwSize; - NET_DVR_TIME_EX struStartTime;/*ʼʱ*/ - NET_DVR_TIME_EX struEndTime;/*ʱ*/ - DWORD dwEnterNum; // - DWORD dwLeaveNum; //뿪 - NET_DVR_PROGRAM_INFO struProgramInfo; //ĿϢ - DWORD dwPeoplePassing; // - BYTE byRes1[8]; //ֽ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱ - BYTE byRes3[3]; //ֽ - DWORD dwDuplicatePeople; // ظ - DWORD dwExpressionUnknown; //δ֪ - DWORD dwPokerFace; // - DWORD dwHappy; // - DWORD dwSurprised; //龪 - DWORD dwDisgusted; // - DWORD dwSad; //ѹ - DWORD dwAngry; //ŭ - DWORD dwContemptuous; // - DWORD dwPanic; //麦 - DWORD dwGenderUnknown; //Աδ֪ - DWORD dwFemale; //ԱŮ - DWORD dwMale; //Ա - DWORD dwMaskUnknown; //δ֪ - DWORD dwMaskYes; // - DWORD dwMaskNo; // - DWORD dwGlassUnknown; //۾δ֪ - DWORD dwGlassYes; //۾ - DWORD dwGlassNo; //۾ - DWORD dwSunglasses; //ī + NET_DVR_TIME_EX struStartTime;/*开始时间*/ + NET_DVR_TIME_EX struEndTime;/*结束时间*/ + DWORD dwEnterNum; //进入人数 + DWORD dwLeaveNum; //离开人数 + NET_DVR_PROGRAM_INFO struProgramInfo; //节目信息 + DWORD dwPeoplePassing; //经过人数 + BYTE byRes1[8]; //保留字节 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes3[3]; //保留字节 + DWORD dwDuplicatePeople; // 重复人数 + DWORD dwExpressionUnknown; //表情未知 + DWORD dwPokerFace; //表情中性 + DWORD dwHappy; //表情高兴 + DWORD dwSurprised; //表情惊讶 + DWORD dwDisgusted; //表情厌恶 + DWORD dwSad; //表情难过 + DWORD dwAngry; //表情愤怒 + DWORD dwContemptuous; //表情轻蔑 + DWORD dwPanic; //表情害怕 + DWORD dwGenderUnknown; //性别未知 + DWORD dwFemale; //性别女 + DWORD dwMale; //性别男 + DWORD dwMaskUnknown; //面具未知 + DWORD dwMaskYes; //戴面具 + DWORD dwMaskNo; //不戴面具 + DWORD dwGlassUnknown; //眼镜未知 + DWORD dwGlassYes; //戴眼镜 + DWORD dwGlassNo; //不戴眼镜 + DWORD dwSunglasses; //墨镜 BYTE byRes[104]; }NET_DVR_PDC_RESULT, *LPNET_DVR_PDC_RESULT; @@ -38666,447 +38666,447 @@ typedef struct tagNET_DVR_PDC_RESULT typedef struct tagNET_DVR_MOBILE_PLATE_RECOGCFG { DWORD dwSize; - BYTE byDefaultCHN[MAX_CHJC_NUM]; /*豸ʡݵĺּд 3 */ - BYTE byTimeOsd;// ʱϢ 0 - ӣ 1- - BYTE byRecogResultOsd;//ʶ 0 - ӣ 1- - BYTE byRecogHint;//ʶɹʾ 0 - ʾ 1- ʾ - BYTE byRecogDir;//ʶ 0: , 1: - BYTE byRecogEnv;//ʶ𻷾 0: , 1: - BYTE byRecogPlateType;//0-Сʶ1-ʶ - BYTE byUploadPlate;//Ƿϴ 0 -ϴ 1-ϴ + BYTE byDefaultCHN[MAX_CHJC_NUM]; /*设备运行省份的汉字简写 3 */ + BYTE byTimeOsd;// 时间信息叠加 0 - 不叠加, 1- 叠加 + BYTE byRecogResultOsd;//识别结果叠加 0 - 不叠加, 1- 叠加 + BYTE byRecogHint;//识别成功提示 0 - 不提示, 1- 提示 + BYTE byRecogDir;//识别方向 0: 正向, 1: 背向 + BYTE byRecogEnv;//识别环境 0: 白天, 1: 晚上 + BYTE byRecogPlateType;//0-小车牌识别,1-大车牌识别 + BYTE byUploadPlate;//是否上传车牌 0 -不上传, 1-上传 BYTE byRes[62]; }NET_DVR_MOBILE_PLATE_RECOGCFG,*LPNET_DVR_MOBILE_PLATE_RECOGCFG; typedef struct tagNET_DVR_MOBILE_RADAR_CFG { DWORD dwSize; - BYTE byEnableRadar; /* 0:״ 1:״ */ - BYTE byEnableAlarm; /* 0: 1: */ - WORD wOverSpeed; /* ΧΪ20~250 */ - BYTE bySpeedUnits; /* 0:/Сʱ 1:Ӣ/Сʱ */ - BYTE bydirection; /* 0:״복 1:״복 */ - BYTE byMeasureMode; /* 0:̬ (״״̬) 1:̬ (״״̬)*/ - BYTE byTargetType; /* 0:(״ٳ) 1:(״ٳ)*/ - BYTE bySensitivity; /* [0,100] */ - BYTE byCaptureNum; /* ץ[0,255] */ - BYTE byUploadPlate; /*ǷϴץͼƬ 0-ϴ1-ϴ*/ + BYTE byEnableRadar; /* 0:不开启雷达 1:开启雷达 */ + BYTE byEnableAlarm; /* 0:不开启报警 1:开启报警 */ + WORD wOverSpeed; /* 范围为20~250 */ + BYTE bySpeedUnits; /* 0:公里/小时 1:英里/小时 */ + BYTE bydirection; /* 0:反向(雷达与车相向) 1:正向(雷达与车反向) */ + BYTE byMeasureMode; /* 0:静态 (雷达状态) 1:动态 (雷达状态)*/ + BYTE byTargetType; /* 0:最快(雷达测速车辆最快) 1:最近(雷达测速车辆最近)*/ + BYTE bySensitivity; /* 灵敏度[0,100] */ + BYTE byCaptureNum; /* 抓拍张数[0,255] */ + BYTE byUploadPlate; /*是否上传超速抓拍图片 0-不上传,1-上传*/ BYTE byRes[61]; }NET_DVR_MOBILE_RADAR_CFG,*LPNET_DVR_MOBILE_RADAR_CFG; typedef struct tagNET_DVR_MOBILE_LOCALPLATECHK_CFG { DWORD dwSize; - BYTE byCheck; /* Ƿнֹ 0-飬1-*/ - BYTE byCheckAlarm;/* ɹ 0-1-*/ - BYTE byCheckHint; /* ɹʾ (ʾ) 0-ʾ1-ʾ*/ - BYTE byUploadUnlicensedCar; /*ǷϴǷϢ 0-ϴ1-ϴ*/ + BYTE byCheck; /* 稽查任务是否进行禁止名单稽查 0-稽查,1-不稽查*/ + BYTE byCheckAlarm;/* 稽查成功报警 0-不报警,1-报警*/ + BYTE byCheckHint; /* 稽查成功提示 (软件提示) 0-不提示,1-提示*/ + BYTE byUploadUnlicensedCar; /*是否上传非法车信息 0-不上传,1-上传*/ BYTE byRes[64]; }NET_DVR_MOBILE_LOCALPLATECHK_CFG,*LPNET_DVR_MOBILE_LOCALPLATECHK_CFG; typedef struct tagNET_DVR_VEHICLE_CHECK { DWORD dwSize; - DWORD dwChannel;//ͨ0xff - ȫͨĬ1,һͨ - NET_DVR_PLATE_INFO struPlateInfo; //Ϣ - WORD wIllegalType; //ΥͲù궨 ο + DWORD dwChannel;//通道号0xff - 全部通道(默认是1,代表一个通道) + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息 + WORD wIllegalType; //违章类型采用国标定义 (参考附件) BYTE byRes[2]; - char sIllegalTypeInfo[128];// ΥϢ128 - NET_DVR_TIME_V30 struIllegalTime;//Υʱ - BYTE byIllegalVehicleNum;//Υ + char sIllegalTypeInfo[128];// 违规类型信息(128) + NET_DVR_TIME_V30 struIllegalTime;//违规时间 + BYTE byIllegalVehicleNum;//车辆违法次数 BYTE byRes1[3]; - char sCustomInfo[64];//ԶϢ - BYTE byRes2[128]; // ֽ + char sCustomInfo[64];//自定义信息 + BYTE byRes2[128]; // 保留字节 }NET_DVR_VEHICLE_CHECK,*LPNET_DVR_VEHICLE_CHECK; typedef enum _LONG_CFG_SEND_DATA_TYPE_ENUM_ { - ENUM_DVR_VEHICLE_CHECK = 1, //ֹݻ - ENUM_MSC_SEND_DATA = 2, //Ļ - ENUM_ACS_SEND_DATA = 3, //Ž - ENUM_TME_CARD_SEND_DATA = 4, //ͣ(ڿƻ)Ƭ - ENUM_TME_VEHICLE_SEND_DATA = 5, //ͣ(ڿƻ) - ENUM_DVR_DEBUG_CMD = 6, //Ϣ - ENUM_DVR_SCREEN_CTRL_CMD =7, //Ļ - ENUM_CVR_PASSBACK_SEND_DATA = 8, //CVRȡشִ - ENUM_ACS_INTELLIGENT_IDENTITY_DATA = 9, //ʶն - ENUM_VIDEO_INTERCOM_SEND_DATA = 10, //ӶԽ - ENUM_SEND_JSON_DATA = 11 //͸JSON + ENUM_DVR_VEHICLE_CHECK = 1, //禁止名单车辆数据稽查类型 + ENUM_MSC_SEND_DATA = 2, //屏幕控制器数据类型 + ENUM_ACS_SEND_DATA = 3, //门禁主机数据类型 + ENUM_TME_CARD_SEND_DATA = 4, //停车场(出入口控制机)卡片数据类型 + ENUM_TME_VEHICLE_SEND_DATA = 5, //停车场(出入口控制机)车辆数据类型 + ENUM_DVR_DEBUG_CMD = 6, //调试命令信息 + ENUM_DVR_SCREEN_CTRL_CMD =7, //屏幕互动命令类型 + ENUM_CVR_PASSBACK_SEND_DATA = 8, //CVR获取布防点回传任务可执行性 + ENUM_ACS_INTELLIGENT_IDENTITY_DATA = 9, //智能识别终端数据类型 + ENUM_VIDEO_INTERCOM_SEND_DATA = 10, //可视对讲数据类型 + ENUM_SEND_JSON_DATA = 11 //透传JSON数据 }LONG_CFG_SEND_DATA_TYPE_ENUM; typedef enum _LONG_CFG_RECV_DATA_TYPE_ENUM_ { - ENUM_DVR_ERROR_CODE = 1, // - ENUM_MSC_RECV_DATA=2, //Ļ - ENUM_ACS_RECV_DATA=3 //Ž + ENUM_DVR_ERROR_CODE = 1, //错误码 + ENUM_MSC_RECV_DATA=2, //屏幕控制器数据类型 + ENUM_ACS_RECV_DATA=3 //门禁主机数据类型 }LONG_CFG_RECV_DATA_TYPE_ENUM; typedef struct tagNET_DVR_WIPER_CONTINUEWORK_PARAM { - BYTE byWorkTimeInterval;//ʱλ룩[2s~60s] + BYTE byWorkTimeInterval;//工作时间间隔(单位:秒)[2s~60s] BYTE byRes[3]; - DWORD dwContinueWorkTime;//ʱ䣨λ룩[2min~24h]ʾӵλ + DWORD dwContinueWorkTime;//持续工作时间(单位:秒)[2min~24h]界面显示按分钟单位 BYTE byRes1[8]; }NET_DVR_WIPER_CONTINUEWORK_PARAM,*LPNET_DVR_WIPER_CONTINUEWORK_PARAM; typedef union tagNET_DVR_WIPERMODE_PARAM_UNION { BYTE uLen[16]; - //byWiperWorkMode = 1ʱЧ + //当byWiperWorkMode = 1时生效 NET_DVR_WIPER_CONTINUEWORK_PARAM struWiperContinueWorkParam; }NET_DVR_WIPERMODE_PARAM_UNION,*LPNET_DVR_WIPERMODE_PARAM_UNION; typedef struct tagNET_DVR_WIPERINFO_CFG { DWORD dwSize; - //ˢģʽ - //0-ģʽ1-ģʽýṹNET_DVR_ROTATE_OPERATE_PARAM2-ģʽ0xff-ر + //雨刷工作模式 + //0-单次模式,1-持续模式(针对配置结构NET_DVR_ROTATE_OPERATE_PARAM),2-智能模式,0xff-关闭 BYTE byWiperWorkMode; BYTE byRes1; - WORD wSensitivity;// + WORD wSensitivity;//降雨灵敏度 BYTE byRes[20]; NET_DVR_WIPERMODE_PARAM_UNION ustruWiperModeParam; }NET_DVR_WIPERINFO_CFG,*LPNET_DVR_WIPERINFO_CFG; -//ԶԽ +//保存自动对焦参数 typedef struct tagNET_DVR_AUTOFOCUS_TESTCFG { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byRes[24]; // ֽ + DWORD dwChannel; //通道号 + BYTE byRes[24]; // 保留字节 }NET_DVR_AUTOFOCUS_TESTCFG,*LPNET_DVR_AUTOFOCUS_TESTCFG; typedef struct tagNET_DVR_VIDEO_OUT_CFG { - BYTE byDisplayMode; //ʾģʽ1-׼2-ɫ3-ůɫ0xff-Զ - BYTE byBrightnessLevel; // ֵ0-100 - BYTE byContrastLevel; // Աȶ0-100 - BYTE bySharpnessLevel; // 0-100 - BYTE bySaturationLevel; // Ͷ0-100 - BYTE byHueLevel; // ɫ0-100 - BYTE byImageMode; // ͼģʽ0-ģʽ1-ҹģʽ12-ҹģʽ23-ҹģʽ34-ģʽ15-ģʽ26-ģʽ3 - BYTE byRes[5]; // + BYTE byDisplayMode; //显示模式,1-标准,2-冷色,3-暖色,0xff-自定义 + BYTE byBrightnessLevel; // 亮度值0-100 + BYTE byContrastLevel; // 对比度0-100 + BYTE bySharpnessLevel; // 锐度0-100 + BYTE bySaturationLevel; // 饱和度0-100 + BYTE byHueLevel; // 色调0-100 + BYTE byImageMode; // 图像模式,0-正常模式,1-夜模式1,2-夜模式2,3-夜模式3,4-日照模式1,5-日照模式2,6-日照模式3 + BYTE byRes[5]; // 保留 }NET_DVR_VIDEO_OUT_CFG, *LPNET_DVR_VIDEO_OUT_CFG; -//ɫ +//色温 typedef struct tagNET_DVR_COLOR_TEMPERATURE_CFG { - BYTE byRed; //ɫ 0-100 - BYTE byGreen; //ɫ 0-100 - BYTE byBlue; //ɫ0-100 - BYTE byRedOffset; //ɫƫƣ0-100 - BYTE byGreenOffset; //ɫƫƣ0-100 - BYTE byBlueOffset; //ɫƫƣ0-100 + BYTE byRed; //红色, 0-100 + BYTE byGreen; //绿色, 0-100 + BYTE byBlue; //蓝色,0-100 + BYTE byRedOffset; //红色偏移,0-100 + BYTE byGreenOffset; //绿色偏移,0-100 + BYTE byBlueOffset; //蓝色偏移,0-100 BYTE byRes[6]; }NET_DVR_COLOR_TEMPERATURE_CFG, *LPNET_DVR_COLOR_TEMPERATURE_CFG; typedef struct tagNET_DVR_ADC_CFG { - BYTE byGainR; //R 0-100 - BYTE byGainG; //G0-100 - BYTE byGainB; //B0-100 - BYTE byOffsetR; //ƫR0-100 - BYTE byOffsetG; //ƫG0-100 - BYTE byOffsetB; //ƫB0-100 + BYTE byGainR; //增益R, 0-100 + BYTE byGainG; //增益G,0-100 + BYTE byGainB; //增益B,0-100 + BYTE byOffsetR; //偏移量R,0-100 + BYTE byOffsetG; //偏移量G,0-100 + BYTE byOffsetB; //偏移量B,0-100 BYTE byRes[6]; }NET_DVR_ADC_CFG, *LPNET_DVR_ADC_CFG; typedef struct tagNET_DVR_SCREEN_EDGE_CFG { - BYTE byEnable; //ǷĻԵ 0- 1- - BYTE byLeftEdge; //Ե0-100 - BYTE byRightEdge; //ұԵ0-100 - BYTE byTopEdge; //ϱԵ0-100 - BYTE byLowerEdge; //±Ե0-100 + BYTE byEnable; //是否启用屏幕边缘 0-不启用 1-启用 + BYTE byLeftEdge; //左边缘,0-100 + BYTE byRightEdge; //右边缘,0-100 + BYTE byTopEdge; //上边缘,0-100 + BYTE byLowerEdge; //下边缘,0-100 BYTE byRes[7]; }NET_DVR_SCREEN_EDGE_CFG, *LPNET_DVR_SCREEN_EDGE_CFG; typedef struct tagNET_DVR_SCREEN_DISPLAY_CFG { DWORD dwSize; - BYTE byCfgType; /*õIJͣȡʱ˲Ч0-Ч1-2-Ƶ3-ɫ²4-ADC5-ĻԵ*/ - BYTE byBackLight; // 0~100 + BYTE byCfgType; /*设置的参数类型,获取时此参数无效,0-无效,1-背光参数,2-视频参数,3-色温参数,4-ADC参数,5-屏幕边缘参数*/ + BYTE byBackLight; //背光 0~100 BYTE byRes1[2]; - NET_DVR_VIDEO_OUT_CFG struVideoOutCfg; //Ƶģʽ - NET_DVR_COLOR_TEMPERATURE_CFG struColorTempCfg; //ɫ² - NET_DVR_ADC_CFG struAdcCfg; //ADC - NET_DVR_SCREEN_EDGE_CFG struScreenEdgeCfg; //ĻԵ + NET_DVR_VIDEO_OUT_CFG struVideoOutCfg; //视频参数(画面模式) + NET_DVR_COLOR_TEMPERATURE_CFG struColorTempCfg; //色温参数 + NET_DVR_ADC_CFG struAdcCfg; //ADC参数 + NET_DVR_SCREEN_EDGE_CFG struScreenEdgeCfg; //屏幕边缘参数 BYTE byRes[32]; }NET_DVR_SCREEN_DISPLAY_CFG, *LPNET_DVR_SCREEN_DISPLAY_CFG; -//ģң +//模拟遥控类型 typedef enum tagNET_DVR_SCREEN_REMOTE_CTRL_TYPE { - REMOTE_CTRL_POWERSUPPLY_OPEN = 1,//1-Դ - REMOTE_CTRL_POWERSUPPLY_CLOSE = 2,//2-Դ - REMOTE_CTRL_SIGNALSOURCE,//3-źԴ - REMOTE_CTRL_MENU,//4-˵ - REMOTE_CTRL_DETERMINATION,//5-ȷ - REMOTE_CTRL_ON,//6- - REMOTE_CTRL_UNDER,//7- - REMOTE_CTRL_LEFT,//8- - REMOTE_CTRL_RIGHT,//9- + REMOTE_CTRL_POWERSUPPLY_OPEN = 1,//1-电源开 + REMOTE_CTRL_POWERSUPPLY_CLOSE = 2,//2-电源关 + REMOTE_CTRL_SIGNALSOURCE,//3-信号源 + REMOTE_CTRL_MENU,//4-菜单 + REMOTE_CTRL_DETERMINATION,//5-确定 + REMOTE_CTRL_ON,//6-上 + REMOTE_CTRL_UNDER,//7-下 + REMOTE_CTRL_LEFT,//8-左 + REMOTE_CTRL_RIGHT,//9-右 REMOTE_CTRL_INFO,//10-INFO - REMOTE_CTRL_RETURN,// 11-һ - REMOTE_CTRL_NUM, //12-ּ + REMOTE_CTRL_RETURN,// 11-返回上一层 + REMOTE_CTRL_NUM, //12-数字键盘 }SCREEN_REMOTE_CTRL_TYPE; -//ģңذ +//模拟遥控按键 typedef struct tagNET_DVR_SIMULATE_SCREEN_REMOTE_CTRL { DWORD dwSize; - BYTE byControlType; //1-Դ2-Դأ3-źԴ4-˵5-ȷ6-ϣ7-£8-9-, 10-INFO, 11-һ,12-ְ,13-һ尴 - BYTE byControlParam; //Ϊ12ʱʾֵ0-9ʱ˲Ч + BYTE byControlType; //1-电源开,2-电源关,3-信号源,4-菜单,5-确定,6-上,7-下,8-左,9-右, 10-INFO, 11-返回上一层,12-数字按键,13-开关一体按键 + BYTE byControlParam; //操作参数,操作类型为12时,表示按键值(0-9),其他操作时此参数无效 BYTE byRes[14]; }NET_DVR_SIMULATE_SCREEN_REMOTE_CTRL,*LPNET_DVR_SIMULATE_SCREEN_REMOTE_CTRL; -//ĻźԴ +//屏幕信号源配置 typedef struct tagNET_DVR_SCREEN_SIGNAL_CFG { DWORD dwSize; - BYTE bySignalSourceType; //Դö NET_DVR_CAM_MODE - BYTE byNoSignalPic; //źŻģʽ1-2-3-LOGO + BYTE bySignalSourceType; //输入源索引,见枚举 NET_DVR_CAM_MODE + BYTE byNoSignalPic; //无信号画面模式,1-蓝屏,2-黑屏,3-LOGO画面 BYTE byRes[14]; }NET_DVR_SCREEN_SIGNAL_CFG, *LPNET_DVR_SCREEN_SIGNAL_CFG; -//Ļƴ +//屏幕拼接配置 typedef struct tagNET_DVRSCREEN_SPLICE_CFG { DWORD dwSize; - BYTE bySpliceIndex; //ƴţ0ûƴӣֵʾƴšƴ0101~020244bySpliceIndexͬҷ0. - BYTE bySpliceX; //Ļƴеλ - BYTE bySpliceY; //Ļƴеλ - BYTE byWidth; //ƴӹģĻΪλ - BYTE byHeight; //ƴӹģߣĻΪλ + BYTE bySpliceIndex; //自拼接屏号,0就是没有拼接,其他值表示自拼接屏的屏号。例如拼接0101~0202这4块屏,则这4块屏的bySpliceIndex必须相同,且非0. + BYTE bySpliceX; //屏幕在自拼接屏中的行位置 + BYTE bySpliceY; //屏幕在自拼接屏中的列位置 + BYTE byWidth; //拼接规模宽,以屏幕为单位 + BYTE byHeight; //拼接规模高,以屏幕为单位 BYTE byRes[11]; }NET_DVR_SCREEN_SPLICE_CFG, *LPNET_DVR_SCREEN_SPLICE_CFG; -//ȹʽ +//风扇工作方式配置 typedef struct tagNET_DVR_SCREEN_FAN_WORK_MODE_CFG { DWORD dwSize; - BYTE byWorkMode; //1-2-Զ - BYTE byTemperatureLimitValue; //ȿ¶ȷֵģʽΪԶʱòЧ + BYTE byWorkMode; //1-常开,2-自动 + BYTE byTemperatureLimitValue; //风扇开启的温度阀值,工作模式为自动时该参数有效。 BYTE byRes[14]; }NET_DVR_SCREEN_FAN_WORK_MODE_CFG, *LPNET_DVR_SCREEN_FAN_WORK_MODE_CFG; -//VGAź +//VGA信号配置 typedef struct tagNET_DVR_SCREEN_VGA_CFG { DWORD dwSize; - BYTE byEnableAutoAdjust; //ǷԶ0-1-ǣԶʱ²Ч - BYTE byHorizontalPosition; //ˮƽλ 0-100 - BYTE byVerticalPosition; //ֱλ 0-100 - BYTE byClock; //ʱ 0-100 - BYTE byPhase; //λ0-100 + BYTE byEnableAutoAdjust; //是否自动调整,0-否,1-是,当自动调整启用时以下参数无效 + BYTE byHorizontalPosition; //水平位置 0-100 + BYTE byVerticalPosition; //垂直位置 0-100 + BYTE byClock; //时钟 ,0-100 + BYTE byPhase; //相位,0-100 BYTE byRes[11]; }NET_DVR_SCREEN_VGA_CFG, *LPNET_DVR_SCREEN_VGA_CFG; -//Ļ˵ +//屏幕菜单配置 typedef struct tagNET_DVR_SCREEN_MENU_CFG { DWORD dwSize; - BYTE byMenuLanguage; //ԣ1-ģ2-Ӣ - BYTE byTransparency; //͸ 0-͸1-ͣ2-У3- - BYTE byDuration; //ʱ䣬0-1-5룬2-15룬3-30 + BYTE byMenuLanguage; //语言,1-中文,2-英文 + BYTE byTransparency; //透明度 0-不透明,1-低,2-中,3-高 + BYTE byDuration; //持续时间,0-常开,1-5秒,2-15秒,3-30秒 BYTE byRes[13]; }NET_DVR_SCREEN_MENU_CFG, *LPNET_DVR_SCREEN_MENU_CFG; -//л +//画中画 typedef struct tagNET_DVR_PIP_CFG { DWORD dwSize; - BYTE byEnable; //Ƿûл 0- 1- - BYTE bySubWindowSource; //ӻźԴοöNET_DVR_CAM_MODE - BYTE bySubWindowBorderColor; //ӻ߿ɫ 1-ɫ2-ɫ + BYTE byEnable; //是否启用画中画 0-不启用 1-启用 + BYTE bySubWindowSource; //子画面信号源,参考枚举NET_DVR_CAM_MODE + BYTE bySubWindowBorderColor; //子画面边框颜色, 1-蓝色,2-黑色 BYTE byRes1; - NET_DVR_RECTCFG struPosition; //ӻλãĻܴСΪ100*100 + NET_DVR_RECTCFG struPosition; //子画面位置,屏幕总大小为100*100 BYTE byRes2[12]; }NET_DVR_PIP_CFG, *LPNET_DVR_PIP_CFG; -//͸ +//透雾配置 typedef struct tagNET_DVR_DEFOG_LCD { DWORD dwSize; - BYTE byDefogEnable; //͸أ0~رգ1~ - BYTE byDefogModel; //͸ģʽ0~Զȥ1~ֶȥ - BYTE byDefogLevel; //͸ǿȵȼ1-7ȼĬϵȼΪ4ȼ1Ϊ0.5ȼ2Ϊ0.55ȼ3Ϊ0.60ȼ4Ϊ0.65ȼ5Ϊ0.70ȼ6Ϊ0.75ȼ7Ϊ0.80ȥģʽΪֶȥʱȥǿȵȼ + BYTE byDefogEnable; //开启透雾开关,0~关闭,1~开启 + BYTE byDefogModel; //透雾模式,0~自动去雾,1~手动去雾 + BYTE byDefogLevel; //透雾强度等级,1-7个等级,默认等级为4。等级1为0.5;等级2为0.55;等级3为0.60;等级4为0.65;等级5为0.70;等级6为0.75;等级7为0.80。(去雾模式为手动去雾时,可配置去雾强度等级) BYTE byRes[33]; }NET_DVR_DEFOG_LCD,*LPNET_DVR_DEFOG_LCD; -//Ļάǽ +//屏幕维墙 typedef struct tagNET_DVR_SCREEN_WALL_CFG { DWORD dwSize; - BYTE byEnable; //״̬ء0-Ϊرգ1-Ϊ + BYTE byEnable; //状态开关。0-为关闭;1-为开启 BYTE byRes[35]; }NET_DVR_SCREEN_WALL_CFG, *LPNET_DVR_SCREEN_WALL_CFG; -//Ļλ +//屏幕位置 typedef struct tagNET_DVR_SCREEN_POS_CFG { DWORD dwSize; - BYTE byScreenRowNum;//Ļкš - BYTE byScreenColNum;//Ļкš + BYTE byScreenRowNum;//屏幕行号。 + BYTE byScreenColNum;//屏幕列号。 BYTE byRes[34]; }NET_DVR_SCREEN_POS_CFG, *LPNET_DVR_SCREEN_POS_CFG; typedef struct tagNET_DVR_VIDEO_AUDIOIN_CFG { - DWORD dwSize; //ṹij - DWORD dwChanNo; //Ƶͨţ ú󣬱󶨵ԽͨΪͨƵԴ - BYTE byEnable; //ǷԽΪƵԴ 0- 1- - BYTE byRes[31]; // + DWORD dwSize; //结构体的长度 + DWORD dwChanNo; //视音频通道号, 绑定且启用后,被绑定的语音对讲通道则作为该通道的音频源 + BYTE byEnable; //是否启用语音对讲作为音频输入源 0-不启用 1-启用 + BYTE byRes[31]; //保留 }NET_DVR_VIDEO_AUDIOIN_CFG, *LPNET_DVR_VIDEO_AUDIOIN_CFG; typedef struct _NET_DVR_VCA_DETION_CFG { DWORD dwSize; - BYTE byEnable;//ʹ + BYTE byEnable;//使能 BYTE byRes1[3]; NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; - NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //쳣ʽ - DWORD dwMaxRelRecordChanNum ; //¼ͨ ֻ֧ - DWORD dwRelRecordChanNum ; //¼ͨ ʵֵ֧ - DWORD dwRelRecordChan[MAX_CHANNUM_V30/*64*/];//¼ͨ + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD dwRelRecordChan[MAX_CHANNUM_V30/*64*/];//触发录像通道号 BYTE byEnablePreset[MAX_CHANNUM_V30]; BYTE byPresetNo[MAX_CHANNUM_V30]; BYTE byEnableCruise[MAX_CHANNUM_V30]; BYTE byCruiseNo[MAX_CHANNUM_V30]; BYTE byEnablePtzTrack[MAX_CHANNUM_V30]; BYTE byPTZTrack[MAX_CHANNUM_V30]; - NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30/*8*/]; //ղʱ + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30/*8*/]; //假日布防时间 BYTE byRes[224];; }NET_DVR_VCA_DETION_CFG, *LPNET_DVR_VCA_DETION_CFG; typedef struct tagNET_DVR_VCA_DETECTION_CFG_V40 { - DWORD dwSize; //ṹС - BYTE byEnable;//ʹ + DWORD dwSize; //结构体大小 + BYTE byEnable;//使能 BYTE byRes1[3]; NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; - DWORD dwHandleType; //쳣,쳣ʽ"" - /*0x00: Ӧ*/ - /*0x01: ʾϾ*/ - /*0x02: */ - /*0x04: ϴ*/ - /*0x08: */ - /*0x10: JPRGץͼϴEmail*/ - /*0x20: ⱨ*/ - /*0x40: ӵͼ(ĿǰֻPCNVR֧)*/ - /*0x200: ץͼϴFTP*/ - DWORD dwMaxRelAlarmOutChanNum ; //ıֻ֧ͨ - DWORD dwRelAlarmOut[MAX_ALARMOUT_V40/*4128*/]; //* ʵʴıţֵʾ,ýУ±0ʼ˳ȡ0xffffffffЧ*/ - /*¼ͨ*/ - DWORD dwMaxRecordChanNum; //豸ֵ֧¼ͨ-ֻ - DWORD dwRelRecordChan[MAX_CHANNUM_V40/*512*/]; /* ʵʴ¼ֵͨʾ,ýУ±0ʼ˳ȡ0xffffffff,Ч*/ - DWORD dwEnablePresetChanNum; //ǰԤõĿ - NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40/*512*/]; //õԤõϢdwEnablePresetChanNumΪ0ʱ±0-(dwEnablePresetChanNum -1)ЧΪ0ʱʾδԤõ - BYTE byRes2[516]; /**/ - DWORD dwEnableCruiseChanNum; //ǰѲͨĿ - NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40/*512*/]; //ѲͨϢdwEnableCruiseChanNumΪ0ʱ±0-( dwEnableCruiseChanNum -1)ЧΪ0ʱʾδѲ - DWORD dwEnablePtzTrackChanNum; //ǰ̨ͨĿ - NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40/*512*/]; //̨ͨϢdwEnablePtzTrackChanNumΪ0ʱ±0-(dwEnablePresetChanNum -1)ЧΪ0ʱʾδ̨켣 - NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //ղʱ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40/*4128*/]; //* 实际触发的报警输出号,按值表示,采用紧凑型排列,从下标0开始顺序读取,如果遇到0xffffffff则后续无效*/ + /*触发的录像通道*/ + DWORD dwMaxRecordChanNum; //设备支持的最大关联录像通道数-只读 + DWORD dwRelRecordChan[MAX_CHANNUM_V40/*512*/]; /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0开始顺序读取,如果遇到0xffffffff,则后续无效*/ + DWORD dwEnablePresetChanNum; //当前已启用预置点的数目 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40/*512*/]; //启用的预置点信息,当dwEnablePresetChanNum不为0时,数组下标0-(dwEnablePresetChanNum -1)有效,当为0时,表示未启用预置点 + BYTE byRes2[516]; /*保留*/ + DWORD dwEnableCruiseChanNum; //当前已启用巡航的通道数目 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40/*512*/]; //启用巡航功能通道的信息,当dwEnableCruiseChanNum不为0时,数组下标0-( dwEnableCruiseChanNum -1)有效,当为0时,表示未启用巡航 + DWORD dwEnablePtzTrackChanNum; //当前已启云台通道数目 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40/*512*/]; //调用云台的通道信息,当dwEnablePtzTrackChanNum不为0时,数组下标0-(dwEnablePresetChanNum -1)有效,当为0时,表示未启用云台轨迹 + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //假日布防时间 BYTE byRes[224]; }NET_DVR_VCA_DETECTION_CFG_V40, *LPNET_DVR_VCA_DETECTION_CFG_V40; typedef struct tagNET_DVR_CLOUD_STORAGE_CFG { - DWORD dwSize; //ṹС; - BYTE byEnableCS; //ƴ洢 0-ر 1- - BYTE byRes[511]; // + DWORD dwSize; //结构体大小; + BYTE byEnableCS; //开启云存储服务 0-关闭 1-开启 + BYTE byRes[511]; //保留 } NET_DVR_CLOUD_STORAGE_CFG, *LPNET_DVR_CLOUD_STORAGE_CFG; typedef struct tagNET_DVR_CHANS_RECORD_STATUS_CFG { - DWORD dwSize ; //ṹС - BYTE byValid; //ǷЧ - /*(ֻ)¼ͣ0: ¼1¼ 2- - 3- 4-Ƶ 5-δ 6-浵 7-ش - 8-û 9-δ֤,10-浵к¼ 11-¼شк¼*/ + DWORD dwSize ; //结构体大小 + BYTE byValid; //是否有效 + /*(只读)录像类型,0: 不在录像;1:在录像 2-空闲 + 3-无连接 4-无输入视频 5-未加载 6-存档中 7-回传中 + 8-用户名或密码错 9-未验证,10-存档中和录像中 11-录像回传中和录像中*/ BYTE byRecord; - DWORD dwRelatedHD; // - BYTE byOffLineRecord; //¼ 0-ر 1- - BYTE byRes[63]; //ֽ + DWORD dwRelatedHD; //关联磁盘 + BYTE byOffLineRecord; //断网录像功能 0-关闭 1-开启 + BYTE byRes[63]; //保留字节 }NET_DVR_CHAN_RECORD_STATUS_CFG, *LPNET_DVR_CHAN_RECORD_STATUS_CFG; #define MAX_CAMERAID_LEN 64 typedef struct tagNET_DVR_UPLOAD_RECORD_INFO { DWORD dwSize; - DWORD dwRecordType; //¼ 0- ʱ¼1- ƶ¼2- ¼3- ƶ¼4- ƶ¼ 5- 6- ֶ¼7- 𶯱8- 9- ܱ10- ش¼ + DWORD dwRecordType; //录像类型 0- 定时录像,1- 移动侦测录像,2- 报警录像,3- 报警或移动侦测录像,4- 报警和移动侦测录像, 5- 命令触发,6- 手动录像,7- 震动报警,8- 环境触发报警,9- 智能报警,10- 回传录像 BYTE sCameraID[MAX_CAMERAID_LEN]; //camera id; - NET_DVR_TIME_EX struStartTime; //¼ʼʱ - NET_DVR_TIME_EX struStopTime; //¼ʱ - DWORD dwStoragePoolID; //洢ID - BYTE byFormatType ; //װͣ1-2-RTPװ3-PSװ4-TSװ5-˽У6-FLV7-ASF8-3GP9-RTP+PS꣺GB281810xff-Ч - BYTE byVideoEncType ; //Ƶͣ0-˽2641-׼h2642-׼mpeg47-M-JPEG8-MPEG20xfe- ԶԴһ£0xff-Ч - BYTE byAudioEncType; //Ƶͣ0-G7221-G711_U2-G711_A5-MP2L26-G7267-AAC0xfe- ԶԴһ£0xff-Ч - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱ + NET_DVR_TIME_EX struStartTime; //录像开始时间 + NET_DVR_TIME_EX struStopTime; //录像结束时间 + DWORD dwStoragePoolID; //存储池ID + BYTE byFormatType ; //封装类型:1-裸流,2-RTP封装,3-PS封装,4-TS封装,5-私有,6-FLV,7-ASF,8-3GP,9-RTP+PS(国标:GB28181),0xff-无效 + BYTE byVideoEncType ; //视频编码类型:0-私有264,1-标准h264,2-标准mpeg4,7-M-JPEG,8-MPEG2,0xfe- 自动(和源一致),0xff-无效 + BYTE byAudioEncType; //音频编码类型:0-G722,1-G711_U,2-G711_A,5-MP2L2,6-G726,7-AAC,0xfe- 自动(和源一致),0xff-无效 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 BYTE byRes[120]; }NET_DVR_UPLOAD_RECORD_INFO,*LPNET_DVR_UPLOAD_RECORD_INFO; -//Ʋ ṹ +//补光灯参数配置 条件结构体 typedef struct tagNET_DVR_IOOUT_COND { DWORD dwSize; - BYTE bySyncOutputNo;//ͬ(0-F1,1-F2,2-F3) + BYTE bySyncOutputNo;//同步输出号(0-F1,1-F2,2-F3) BYTE byRes[63]; }NET_DVR_IOOUT_COND,*LPNET_DVR_IOOUT_COND; -//Ʋ +//补光灯参数配置 typedef struct tagNET_DVR_IOOUT_CFG { DWORD dwSize; - BYTE byWorkMode;// 0-,1-Ƶ(Ĭ) + BYTE byWorkMode;// 0-报警输出,1-频闪灯(默认) BYTE byRes1[3]; union { BYTE byUnionLen[128]; struct { - BYTE byDefaultState;//Ĭ״̬ 0-͵ƽ(Ĭ)1-ߵƽ - BYTE byWorkState;//Ч״̬ 0-͵ƽ(Ĭ),1-ߵƽ,2- - BYTE byFreqMulti;//ƵֵΧ[1,15] - BYTE byDutyRatio;//ռձȣ[0,40%] + BYTE byDefaultState;//默认状态 0-低电平(默认),1-高电平 + BYTE byWorkState;//生效状态 0-低电平(默认),1-高电平,2-脉冲 + BYTE byFreqMulti;//倍频,数值范围[1,15] + BYTE byDutyRatio;//占空比,[0,40%] BYTE byRes[3]; - BYTE byFlashLightEnable; //ʱʹ:0-;1- - NET_DVR_SCHEDTIME struFlashLightTime;//ʱ + BYTE byFlashLightEnable; //设置闪光灯时间使能:0-关;1-开 + NET_DVR_SCHEDTIME struFlashLightTime;//启用闪光灯时间 BYTE byRes1[116]; - }struStrobeLamp; // Ƶ ʱЧ + }struStrobeLamp; // 频闪灯 时有效 }uWorkModeInfo; BYTE byRes2[128]; }NET_DVR_IOOUT_CFG,*LPNET_DVR_IOOUT_CFG; -//źŵͬ +//信号灯同步参数 typedef struct tagNET_DVR_SIGNAL_SYNCCFG { DWORD dwSize; - WORD wPhase;//λ(0~360) - BYTE byLineLock;//Դͬ 0-1- + WORD wPhase;//相位(0~360) + BYTE byLineLock;//电源同步 0-否,1-是 BYTE byRes[125]; }NET_DVR_SIGNAL_SYNCCFG,*LPNET_DVR_SIGNAL_SYNCCFG; -// өʯEZVIZṹ +// 萤石EZVIZ接入参数结构体 typedef struct { DWORD dwSize; - BYTE byEnable;// EZVIZ 0ã1 - /********* IPC5.1.7 Begin 2014-03-21***********/ - BYTE byDeviceStatus; //豸Ƿ״̬0-1-ߣ2- - BYTE byAllowRedirect; //Ƿض,0-,1-,2-,0ʾֲ,SDK豸 - BYTE byDomainName[MAX_DOMAIN_NAME]; //ַ + BYTE byEnable;// 启用EZVIZ接入 0~禁用,1~启用 + /********* IPC5.1.7 新增参数 Begin 2014-03-21***********/ + BYTE byDeviceStatus; //设备是否在线状态,0-保留,1-在线,2-离线 + BYTE byAllowRedirect; //是否允许重定向,0-保留,1-是,2-否,0表示保持不变,兼容老SDK接新设备的情况 + BYTE byDomainName[MAX_DOMAIN_NAME]; //域名服务器地址 BYTE byRes1; - BYTE byVerificationCode[NET_SDK_MAX_VERIFICATION_CODE_LEN/*32*/];//өʯ֤ - BYTE byNetMode; //ģʽ0-壬1-Զ2-ȣ3-(Ĭ)4- - BYTE byOfflineStatus; //豸߾״̬: 0-1-өʯע֤ЧֶΪֻҵDeviceStatusΪ2ʱЧ - BYTE byEnableTiming;// EZVIZУʱ 0ã1 + BYTE byVerificationCode[NET_SDK_MAX_VERIFICATION_CODE_LEN/*32*/];//萤石云验证码 + BYTE byNetMode; //网络模式,0-无意义,1-自动,2-有线网络优先,3-有线网络(默认),4-无线网络 + BYTE byOfflineStatus; //设备离线具体状态: 0-保留,1-萤石注册验证码无效。该字段为只读,且当DeviceStatus为2时生效。 + BYTE byEnableTiming;// 启用EZVIZ校时 0~禁用,1~启用 BYTE byRes2; - BYTE byOperateCode[NET_SDK_MAX_OPERATE_CODE_LEN]; //룬û豸ʱʹ + BYTE byOperateCode[NET_SDK_MAX_OPERATE_CODE_LEN]; //操作码,用户绑定设备时使用 BYTE byRes[344]; }NET_DVR_EZVIZ_ACCESS_CFG,*LPNET_DVR_EZVIZ_ACCESS_CFG; @@ -39114,27 +39114,27 @@ typedef struct tagNET_DVR_ALARM_RELATE_COND { DWORD dwSize; /* - 0ʾƶ⣬ - 1ʾƵڵ - 2ʾƵʧ - 3ʾPIR - 4ʾ߱ - 5ʾȱ - 6ʾץͼ - 7ʾ⣬ - 8ʾԽ⣬ - 9ʾ⣬ - 10ʾ⣬ - 11 ʾ쳣⣬ - 0xff ʾ + 0表示移动侦测, + 1表示视频遮挡, + 2表示视频丢失, + 3表示PIR报警, + 4表示无线报警, + 5表示呼救报警, + 6表示智能抓图, + 7表示人脸侦测, + 8表示越界侦测侦测, + 9表示区域入侵侦测, + 10表示场景变更侦测, + 11 表示异常侦测, + 0xff 表示报警输入 */ BYTE byAlarmType; - // 0-Ч,1-ץͼϴFTP,2-JpegץͼϴEmail + //联动动作 0-无效,1-抓图上传FTP,2-Jpeg抓图上传Email BYTE byRelateActType; BYTE byRes[2]; - //ŻͨŻ߱ - //(byAlarmType ==0xffʱ,dwChannelʾDZ) - //(byAlarmType ==4ʱ,dwChannelʾ߱) + //报警输入号或者通道号或者无线编号 + //(当byAlarmType ==0xff时,dwChannel表示的是报警输入号) + //(当byAlarmType ==4时,dwChannel表示的是无线编号) DWORD dwChannel; BYTE byRes1[64]; }NET_DVR_ALARM_RELATE_COND,*LPNET_DVR_ALARM_RELATE_COND; @@ -39142,8 +39142,8 @@ typedef struct tagNET_DVR_ALARM_RELATE_COND typedef struct tagNET_DVR_ALARM_RELATE_CFG { DWORD dwSize; - DWORD dwMaxRelateChanNum ; //ıֻ֧ͨ - //dwRelateChanijʼֵ0xffffffff;дʵʵͨ; + DWORD dwMaxRelateChanNum ; //触发的报警关联通道数(只读)最大支持数量 + //dwRelateChan的初始值是0xffffffff;数组内填写是实际的通道号; DWORD dwRelateChan[MAX_CHANNUM_V40/*512*/]; BYTE byRes1[256]; }NET_DVR_ALARM_RELATE_CFG,*LPNET_DVR_ALARM_RELATE_CFG; @@ -39151,111 +39151,111 @@ typedef struct tagNET_DVR_ALARM_RELATE_CFG typedef struct tagNET_DVR_PTZ_BASICPARAMCFG { DWORD dwSize; - BYTE byProportionalPan; //ñ䱶 0-1- - BYTE byPresetFreezing; //ԤõƵ 0-1- - BYTE byPresetSpeed;//Ԥõٶȵȼ 1--8Ĭ4 - BYTE byKeyboardCtrlSpeed;//ֿٶȵȼ0-,1-,2- - BYTE byAutoScanSpeed;//ɨٶȵȼ1--40Ĭ28 - BYTE byZoomingSpeed;//䱶ٶȣ1--3Ĭ3 - BYTE byManualControlSpeed;//ֿٶģʽ0-ݣ1-ˣ2-ǻ3-4-Ӧ - BYTE byPTZMotionTrack;//˶̨ 0-Ĭϣ1-ر + BYTE byProportionalPan; //启用比例变倍配置 0-否,1-是 + BYTE byPresetFreezing; //启用预置点视频冻结 0-否,1-是 + BYTE byPresetSpeed;//预置点速度等级 1--8,默认4 + BYTE byKeyboardCtrlSpeed;//手控速度等级0-低,1-中,2-高 + BYTE byAutoScanSpeed;//扫描速度等级:1--40,默认28 + BYTE byZoomingSpeed;//变倍速度:1--3,默认3 + BYTE byManualControlSpeed;//手控速度模式:0-兼容,1-行人,2-非机动车,3-机动车,4-自适应 + BYTE byPTZMotionTrack;//启用运动(锁定云台操作) 0-默认(开启),1-关闭 BYTE byRes[124]; }NET_DVR_PTZ_BASICPARAMCFG,*LPNET_DVR_PTZ_BASICPARAMCFG; typedef struct tagNET_DVR_PTZ_OSDCFG { DWORD dwSize; - BYTE byZoomStatus; //ͷʾ1-2롢2-5롢3-10롢0xff-ء0-Ĭ2 - BYTE byPtStatus; //λʾ1-2롢2-5롢3-10롢0xff-ء0-Ĭ2 - BYTE byPresetStatus;//Ԥõʾ1-2롢2-5롢3-10롢0xff-ء0-Ĭ2 - BYTE byPositionDisplayFormat;//λʾʽ 0-PTʾ( P179|T-02)1-շλʾ(SE123|T-02) + BYTE byZoomStatus; //镜头倍数显示:1-2秒、2-5秒、3-10秒、0xff-常关、0-常开,默认2秒 + BYTE byPtStatus; //方位角显示:1-2秒、2-5秒、3-10秒、0xff-常关、0-常开,默认2秒 + BYTE byPresetStatus;//预置点标题显示:1-2秒、2-5秒、3-10秒、0xff-常关、0-常开,默认2秒 + BYTE byPositionDisplayFormat;//方位角显示格式 0-按照PT显示(例 P179|T-02),1-按照方位显示(SE123|T-02) BYTE byRes[124]; }NET_DVR_PTZ_OSDCFG,*LPNET_DVR_PTZ_OSDCFG; typedef struct tagNET_DVR_PTZ_POWEROFFMEMCFG { DWORD dwSize; - BYTE byResumeTimePoint; //ģʽOxff-á1-30롢2-60롢3-300롢4-600룬Ĭ30 + BYTE byResumeTimePoint; //掉电记忆模式:Oxff-禁用、1-30秒、2-60秒、3-300秒、4-600秒,默认30秒 BYTE byRes[127]; }NET_DVR_PTZ_POWEROFFMEMCFG,*LPNET_DVR_PTZ_POWEROFFMEMCFG; typedef struct tagNET_DVR_PTZ_LIMITCOND { DWORD dwSize; - DWORD dwChan; //ͨ - BYTE byLimitMode; //λģʽ 0-1-λ2-ɨλ + DWORD dwChan; //通道号 + BYTE byLimitMode; //限位模式 0-保留,1-键控限位,2-扫描限位 BYTE byRes[63]; }NET_DVR_PTZ_LIMITCOND, *LPNET_DVR_PTZ_LIMITCOND; typedef struct tagNET_DVR_PTZ_LIMITCFG { DWORD dwSize; - BYTE byEnable;//ʹܣ0-1- - BYTE byLimitStatus; //λ״̬ 0-δλ1-λɱ༭ + BYTE byEnable;//启用使能,0-否,1-是 + BYTE byLimitStatus; //限位状态 0-未限位,1-已限位(不可编辑) BYTE byRes[122]; }NET_DVR_PTZ_LIMITCFG,*LPNET_DVR_PTZ_LIMITCFG; typedef struct tagNET_DVR_PTZ_LIMITCTRL { DWORD dwSize; - DWORD dwChan;//ͨ - BYTE byLimitMode; //λģʽ 0-1-λ2-ɨλ - BYTE byWorkMode ;//0-ã1- + DWORD dwChan;//通道号 + BYTE byLimitMode; //限位模式 0-保留,1-键控限位,2-扫描限位 + BYTE byWorkMode ;//0-设置,1-清除 BYTE byRes[122]; }NET_DVR_PTZ_LIMITCTRL,*LPNET_DVR_PTZ_LIMITCTRL; typedef struct tagNET_DVR_PTZ_LOCKCFG { DWORD dwSize; - BYTE byWorkMode ;//̨ 0-1- + BYTE byWorkMode ;//云台锁定控制 0-解锁,1-锁定 BYTE byRes[123]; }NET_DVR_PTZ_LOCKCFG,*LPNET_DVR_PTZ_LOCKCFG; typedef struct tagNET_DVR_PTZLOCKINFO_COND { DWORD dwSize; - DWORD dwChannel ;//ͨ + DWORD dwChannel ;//通道号 BYTE byRes[64]; }NET_DVR_PTZLOCKINFO_COND,*LPNET_DVR_PTZLOCKINFO_COND; typedef struct tagNET_DVR_PTZLOCKINFO { DWORD dwSize; - DWORD dwRemainingSec ;//ʣ - BYTE byRes[128]; //ֽ + DWORD dwRemainingSec ;//剩余秒数 + BYTE byRes[128]; //保留字节 }NET_DVR_PTZLOCKINFO, *LPNET_DVR_PTZLOCKINFO; typedef struct tagNET_DVR_CRUISEPOINT_COND { DWORD dwSize; - DWORD dwChan;//ͨ - WORD wRouteNo;//Ѳ· + DWORD dwChan;//通道号 + WORD wRouteNo;//巡航路径号 BYTE byRes[30]; }NET_DVR_CRUISEPOINT_COND,*LPNET_DVR_CRUISEPOINT_COND; typedef struct { - WORD wPresetNo; //Ԥõ - WORD wDwell; //ͣʱ - BYTE bySpeed; //ٶ - BYTE bySupport256PresetNo;//֮ǰ 256ԤõǷЧ + WORD wPresetNo; //预置点 + WORD wDwell; //停留时间 + BYTE bySpeed; //速度 + BYTE bySupport256PresetNo;//兼容之前的 第256号预置点是否生效 BYTE byRes[6]; }NET_DVR_CRUISEPOINT_PARAM,*LPNET_DVR_CRUISEPOINT_PARAM; typedef struct { DWORD dwSize; - // ֧128Ѳ + // 最大支持128个巡航点 NET_DVR_CRUISEPOINT_PARAM struCruisePoint[MAX_CRUISE_POINT_NUM]; - BYTE Res[64]; // + BYTE Res[64]; //保留 }NET_DVR_CRUISEPOINT_V40, *LPNET_DVR_CRUISEPOINT_V40; typedef struct { DWORD dwSize; - // ֧256Ѳ + // 最大支持256个巡航点 NET_DVR_CRUISEPOINT_PARAM struCruisePoint[MAX_CRUISEPOINT_NUM_V50]; - BYTE Res[64]; // + BYTE Res[64]; //保留 }NET_DVR_CRUISEPOINT_V50, *LPNET_DVR_CRUISEPOINT_V50; @@ -39292,25 +39292,25 @@ typedef struct tagNET_DVR_TEST_VERSION_HEAD_V2 BYTE byRes2[31]; }NET_DVR_TEST_VERSION_HEAD_V2, *LPNET_DVR_TEST_VERSION_HEAD_V2; -#define MAX_DISPLAY_NUM 512 //ʾ -#define MAX_LEDCONTENT_NUM 512 //LEDַ󳤶 -#define MAX_PPT_CHAN 128 //PPT +#define MAX_DISPLAY_NUM 512 //最大显示输出个数 +#define MAX_LEDCONTENT_NUM 512 //虚拟LED字符串最大长度 +#define MAX_PPT_CHAN 128 //PPT长度 typedef struct tagNET_DVR_VIDEOWALLDISPLAYMODE { DWORD dwSize; - BYTE byEnable;//ʹ + BYTE byEnable;//使能 BYTE byRes1[3]; - NET_DVR_RECTCFG_EX struRect;//귶Χݻ׼ֵ֧ƴģʽ - BYTE sName[NAME_LEN]; //ǽ + NET_DVR_RECTCFG_EX struRect;//坐标范围,依据基准坐标计算出支持的拼控模式 + BYTE sName[NAME_LEN]; //电视墙名称 BYTE byRes2[100]; }NET_DVR_VIDEOWALLDISPLAYMODE, *LPNET_DVR_VIDEOWALLDISPLAYMODE; typedef struct tagNET_DVR_DISPLAYPARAM { - DWORD dwDisplayNo;//ʾ - BYTE byDispChanType;/*ģʽ,1-BNC2-VGA3-HDMI4-DVI5-SDI, 6-FIBER, \ - 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVIӦ10-3GSDI,11-VGA/DVIӦ12-HDBaseT,13-HDTVI, 14-TVI0xff-Ч*/ + DWORD dwDisplayNo;//显示输出号 + BYTE byDispChanType;/*输出连接模式,1-BNC,2-VGA,3-HDMI,4-DVI,5-SDI, 6-FIBER, \ + 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVI自适应,10-3GSDI,11-VGA/DVI自适应,12-HDBaseT,13-HDTVI, 14-TVI,0xff-无效*/ BYTE byRes[11]; }NET_DVR_DISPLAYPARAM,*LPNET_DVR_DISPLAYPARAM; @@ -39326,207 +39326,207 @@ typedef struct tagNET_DVR_VIDEOWALLDISPLAYPOSITION { DWORD dwSize; BYTE byEnable; - BYTE byCoordinateType;//͡0-׼꣬1-ʵ + BYTE byCoordinateType;//坐标类型。0-基准坐标,1-实际坐标 BYTE byRes1[2]; - //ǽ,1ֽǽţֽڣں豸Ϊͨţ+3ֽڱ + //墙号,1字节墙号(高字节,对于合码器设备,为合码通道号)+3字节保留 DWORD dwVideoWallNo; - DWORD dwDisplayNo;//ʾ - //Ϊ׼1920*1920Ⱥ͸߶ֵãΪ׼ֵ + DWORD dwDisplayNo;//显示输出号 + //坐标须为基准坐标的整数倍(1920*1920),宽度和高度值不用设置,即为基准值 NET_DVR_RECTCFG_EX struRectCfg; BYTE byRes2[64]; }NET_DVR_VIDEOWALLDISPLAYPOSITION,*LPNET_DVR_VIDEOWALLDISPLAYPOSITION; -/*Ϣ*/ +/*窗口信息*/ typedef struct tagNET_DVR_VIDEOWALLWINDOWPOSITION { DWORD dwSize; - BYTE byEnable; //ʹ,0-ʹܣ1-ʹ - BYTE byWndOperateMode; //ڲģʽ0-ͳһ꣬1-ֱ + BYTE byEnable; //窗口使能,0-不使能,1-使能 + BYTE byWndOperateMode; //窗口操作模式,0-统一坐标,1-分辨率坐标 BYTE byRes1[6]; - DWORD dwWindowNo;//ں - DWORD dwLayerIndex;//Ӧͼţͼŵöö - NET_DVR_RECTCFG_EX struRect; //ĿĴͳһ(ʾǽ)ȡͳһʱЧ - NET_DVR_RECTCFG_EX struResolution; //ĿĴڷֱ꣬ȡ򰴷ֱЧ - DWORD dwXCoordinate; //LEDϽX꣨ͳһ꣩ȡ򰴷ֱЧ - DWORD dwYCoordinate; //LEDϽY꣨ͳһ꣩ȡ򰴷ֱЧ + DWORD dwWindowNo;//窗口号 + DWORD dwLayerIndex;//窗口相对应的图层号,图层号到最大即置顶,置顶操作 + NET_DVR_RECTCFG_EX struRect; //目的窗口统一坐标(相对显示墙),获取或按统一坐标设置时有效 + NET_DVR_RECTCFG_EX struResolution; //目的窗口分辨率坐标,获取或按分辨率坐标设置有效 + DWORD dwXCoordinate; //LED区域左上角X坐标(统一坐标),获取或按分辨率坐标设置有效 + DWORD dwYCoordinate; //LED区域左上角Y坐标(统一坐标),获取或按分辨率坐标设置有效 BYTE byRes2[36]; }NET_DVR_VIDEOWALLWINDOWPOSITION,*LPNET_DVR_VIDEOWALLWINDOWPOSITION; typedef struct tagNET_DVR_VIDEO_WALL_INFO { DWORD dwSize; - //ںţ1ֽǽţں豸Ϊͨţ+1ֽڱ+2ֽڴں + //窗口号:1字节墙号(对于合码器设备,为合码通道号)+1字节保留+2字节窗口号 DWORD dwWindowNo; - DWORD dwSceneNo;// - DWORD dwDestWallNo; //Ŀǽ - DWORD dwDestSceneNo;//Ŀij + DWORD dwSceneNo;//场景号 + DWORD dwDestWallNo; //目的墙号 + DWORD dwDestSceneNo;//目的场景号 BYTE byRes[12]; }NET_DVR_VIDEO_WALL_INFO,*LPNET_DVR_VIDEO_WALL_INFO; typedef struct tagNET_DVR_VIRTUALLED_PARAM { DWORD dwSize; - BYTE byEnable; //ʹ - BYTE byDispMode; //ʾģʽ1-͸2-͸3- - BYTE byWndOperateMode; //ڲģʽ0-ͳһ꣬1-ֱ - BYTE byType; //LEDͣ0-ı1-ʱ - BYTE byDirection; //LED0-ˮƽ1-ֱ - BYTE byTimeType; //ʱͣbyTypeΪ1ʱЧ0-Ч1-ֻʾʱ䣬2-ʾںʱ - BYTE byDateFormat; //ʾʽbyTimeTypeΪ2ʱЧ - //0-Ч1-XXXX-XX-XX()2-XX-XX-XXXX()3-XX-XX-XXXX()4-XXXXXXXXգ5-XXXXXXXX꣬6-XXXXXXXX - BYTE byTimeFormat; //ʱʾʽbyTimeTypeΪʱЧ - //0-Ч1-H:MM:SS2-HH:MM:SS - NET_DVR_RGB_COLOR struContentColor; //ɫ - NET_DVR_RGB_COLOR struBackColor; //ɫ + BYTE byEnable; //使能 + BYTE byDispMode; //显示模式,1-透明,2-半透明,3-覆盖 + BYTE byWndOperateMode; //窗口操作模式,0-统一坐标,1-分辨率坐标 + BYTE byType; //虚拟LED类型,0-文本,1-时间 + BYTE byDirection; //虚拟LED方向,0-水平方向,1-垂直方向 + BYTE byTimeType; //时间类型,byType为1时有效,0-无效,1-只显示时间,2-显示日期和时间 + BYTE byDateFormat; //日期显示格式,byTimeType为2时有效 + //0-无效,1-XXXX-XX-XX(年月日),2-XX-XX-XXXX(月日年),3-XX-XX-XXXX(日月年),4-XXXX年XX月XX日,5-XX月XX日XXXX年,6-XX日XX月XXXX年 + BYTE byTimeFormat; //时间显示格式,byTimeType不为零时有效 + //0-无效,1-H:MM:SS,2-HH:MM:SS + NET_DVR_RGB_COLOR struContentColor; //字体颜色 + NET_DVR_RGB_COLOR struBackColor; //背景颜色 NET_DVR_RECTCFG_EX struRect; - DWORD dwContentNum; //ıݳȣbyTypeΪ0ʱЧ - BYTE byLedContent[MAX_LEDCONTENT_NUM/*512*/]; //ıݣbyTypeΪ0ʱЧ - BYTE byMoveMode; //ƶģʽ1-ͨ2-ƽ3-ֹ - BYTE byFontSize; //С1-12-23-4 - BYTE byMoveDirection; //ƶ0-Ĭϣң1-ң2-ҵ3-ϵ£4-µϣ̬LEDʱЧ - BYTE byMoveSpeed; //ƶٶȣ1-ٶ12-ٶ2̬LEDʱЧ - NET_DVR_RECTCFG_EX struResolution; //ĿĴڷֱ꣬ȡ򰴷ֱЧ - DWORD dwXCoordinate; //LEDϽX꣨ͳһ꣩ȡ򰴷ֱЧ - DWORD dwYCoordinate; //LEDϽY꣨ͳһ꣩ȡ򰴷ֱЧ - BYTE byHourFormat; //ʱʽbyTimeTypeΪʱЧ0-Ч1-12Сʱƣ2-24Сʱ - BYTE byAMFormat; //AMʽbyHourFormatΪ1ʱЧ0-Ч1-AM2- - BYTE byPMFormat; //PMʽbyHourFormatΪ1ʱЧ0-Ч1-PM2- - BYTE byAlignmentX; //ˮƽ뷽ʽbyDirectionΪ0ʱЧ0-Ч1-룬2-ж룬3-Ҷ - BYTE byAlignmentY; //ֱ뷽ʽbyDirectionΪ1ʱЧ0-Ч1-˶룬2-ж룬3-׶˶ - BYTE byFontType; //ͣ0-Ĭϣ1-壬2-壬3-壬255-Զ + DWORD dwContentNum; //文本内容长度,byType为0时有效 + BYTE byLedContent[MAX_LEDCONTENT_NUM/*512*/]; //文本内容,byType为0时有效 + BYTE byMoveMode; //移动模式,1-普通;2-平滑;3-静止 + BYTE byFontSize; //字体大小,1-1倍,2-2倍,3-4倍 + BYTE byMoveDirection; //移动方向,0-默认(从左到右),1-从左到右,2-从右到左,3-从上到下,4-从下到上,动态虚拟LED时有效 + BYTE byMoveSpeed; //移动速度,1-速度1,2-速度2,动态虚拟LED时有效 + NET_DVR_RECTCFG_EX struResolution; //目的窗口分辨率坐标,获取或按分辨率坐标设置有效 + DWORD dwXCoordinate; //LED区域左上角X坐标(统一坐标),获取或按分辨率坐标设置有效 + DWORD dwYCoordinate; //LED区域左上角Y坐标(统一坐标),获取或按分辨率坐标设置有效 + BYTE byHourFormat; //时间制式,byTimeType不为零时有效,0-无效,1-12小时制,2-24小时制 + BYTE byAMFormat; //AM格式,byHourFormat为1时有效,0-无效,1-AM,2-上午 + BYTE byPMFormat; //PM格式,byHourFormat为1时有效,0-无效,1-PM,2-下午 + BYTE byAlignmentX; //水平对齐方式,byDirection为0时有效,0-无效,1-左对齐,2-居中对齐,3-右对齐 + BYTE byAlignmentY; //垂直对齐方式,byDirection为1时有效,0-无效,1-顶端对齐,2-居中对齐,3-底端对齐 + BYTE byFontType; //字体类型,0-默认,1-宋体,2-黑体,3-楷体,255-自定义 BYTE byRes2[90]; }NET_DVR_VIRTUALLED_PARAM,*LPNET_DVR_VIRTUALLED_PARAM; typedef struct tagNET_DVR_IMAGE_CUT_MODE { DWORD dwSize; - BYTE byCutMode; //ͼиģʽ1-4:3,2-16:9 + BYTE byCutMode; //图像切割模式,1-4:3,2-16:9 BYTE byRes[31]; }NET_DVR_IMAGE_CUT_MODE,*LPNET_DVR_IMAGE_CUT_MODE; typedef struct tagNET_DVR_USING_SERIALPORT { DWORD dwSize ; - DWORD dwSerialPort; //ǰʹôں - BYTE byProtocolType; //Эͣ1-LCD-S1 , 2-LCD-S2 , 3-LCD-L1 4-LCD-DLP 5-LCD-S3 , 6-LCD-D207-LCD-L2,8-LCD-Z19-LCD-D20/D,10-LCD-D20/S,11-LCD-D20/P,12-LCD-D20/T,13-LCD-D20/F,14-LCD-D20/DF,15-LCD-D20/FS,16-LCD-D20/FP,17-LCD-D20/FT,18-LCD-D5022,19-LCD-D5032,20-LCD-D5042+ + DWORD dwSerialPort; //当前使用串口号 + BYTE byProtocolType; //串口协议类型,1-LCD-S1 , 2-LCD-S2 , 3-LCD-L1 , 4-LCD-DLP, 5-LCD-S3 , 6-LCD-D20,7-LCD-L2,8-LCD-Z1,9-LCD-D20/D,10-LCD-D20/S,11-LCD-D20/P,12-LCD-D20/T,13-LCD-D20/F,14-LCD-D20/DF,15-LCD-D20/FS,16-LCD-D20/FP,17-LCD-D20/FT,18-LCD-D5022,19-LCD-D5032,20-LCD-D5042+ BYTE byRes[31]; }NET_DVR_USING_SERIALPORT,*LPNET_DVR_USING_SERIALPORT; typedef struct tagNET_DVR_VIDEOWALLSCENECFG { DWORD dwSize; - BYTE sSceneName[NAME_LEN];// - BYTE byEnable;//ǷЧ 1-Ч0-Ч - BYTE bySceneIndex; //ţֻܻȡȡгʱʹøò + BYTE sSceneName[NAME_LEN];//场景名称 + BYTE byEnable;//场景是否有效 1-有效,0-无效 + BYTE bySceneIndex; //场景号,只能获取。获取所有场景时使用该参数 BYTE byRes [78]; }NET_DVR_VIDEOWALLSCENECFG, *LPNET_DVR_VIDEOWALLSCENECFG; typedef struct tagNET_DVR_SCENE_CONTROL_INFO { DWORD dwSize; - NET_DVR_VIDEO_WALL_INFO struVideoWallInfo; //ǽϢ - DWORD dwCmd; //1-ģʽлҪлǵǰ򲻽л2-ʼ˳գǵǰͬʱԵǰ3-ǿлǷǵǰǿл4-浱ǰģʽij 5-ɾ ,6- + NET_DVR_VIDEO_WALL_INFO struVideoWallInfo; //电视墙信息 + DWORD dwCmd; //场景控制命令,1-场景模式切换(如果要切换的是当前场景,则不进行切换),2-初始化场景(将此场景的配置清空,如果是当前场景,则同时对当前场景进行清屏操作),3-强制切换(无论是否是当前场景,强制切换),4-保存当前模式到某场景 5-删除场景 ,6-场景复制 BYTE byRes[4]; }NET_DVR_SCENE_CONTROL_INFO, *LPNET_DVR_SCENE_CONTROL_INFO; typedef struct tagNET_DVR_SHOW_CONTROL_INFO { DWORD dwSize; - DWORD dwDisplayNo; //ʾںţ0xffffffffʾڽв - BYTE byEnable; //ʹʾ0-ʾ1-ʾ - BYTE byChanType; //ʾͨͣ1-ʾͨţ2- + DWORD dwDisplayNo; //显示输出口号,0xffffffff表示对所用输出口进行操作 + BYTE byEnable; //使能显示,0-不显示,1-显示 + BYTE byChanType; //显示的通道类型,1-显示通道号,2-虚拟屏号 BYTE byRes1[2]; - DWORD dwWallNo; //ǽţ1ֽǽţλ+3ֽڱʾĻʱЧ + DWORD dwWallNo; //墙号,1字节墙号(高位)+3字节保留,显示屏幕序号时有效 BYTE byRes2[56]; }NET_DVR_SHOW_CONTROL_INFO,*LPNET_DVR_SHOW_CONTROL_INFO; typedef struct tagNET_DVR_BUF_INFO { - void* pBuf; //ָ - DWORD nLen; // + void* pBuf; //缓冲区指针 + DWORD nLen; //缓冲区长度 }NET_DVR_BUF_INFO, *LPNET_DVR_BUF_INFO; typedef struct tagNET_DVR_IN_PARAM { - NET_DVR_BUF_INFO struCondBuf; // - NET_DVR_BUF_INFO struInParamBuf; // - DWORD dwRecvTimeout; //ݳʱʱ䣬λms,0ýӿĬϳʱ + NET_DVR_BUF_INFO struCondBuf; //条件缓冲区 + NET_DVR_BUF_INFO struInParamBuf; //参数缓冲区 + DWORD dwRecvTimeout; //接收数据超时时间,单位:ms,置0采用接口默认超时 BYTE byRes[32]; }NET_DVR_IN_PARAM,LPNET_DVR_IN_PARAM; typedef struct tagNET_DVR_OUT_PARAM { - NET_DVR_BUF_INFO struOutBuf; // - void* lpStatusList; //״̬ + NET_DVR_BUF_INFO struOutBuf; //输出参数缓冲区 + void* lpStatusList; //状态缓冲区 BYTE byRes[32]; }NET_DVR_OUT_PARAM,LPNET_DVR_OUT_PARAM; typedef struct tagNET_DVR_AUDIO_CHAN_INFO { DWORD dwSize; - DWORD dwChannel; //Ƶͨϣ1ֽ豸+1ֽӰ+2ֽƵͨţ + DWORD dwChannel; //音频通道号组合(1字节设备号+1字节子板号+2字节音频通道号) BYTE byRes[48]; }NET_DVR_AUDIO_CHAN_INFO, *LPNET_DVR_AUDIO_CHAN_INFO; typedef struct tagNET_DVR_AUDIO_CHAN_CFG { DWORD dwSize; - BYTE sChanName[NAME_LEN]; //Ƶͨ - BYTE byEnable; //ƵǷ 0-أ 1- - BYTE byAudioSwitchType; //Ƶлʽ1-ǰԴʽ2-ڽԴʽ + BYTE sChanName[NAME_LEN]; //音频通道名称 + BYTE byEnable; //音频是否开启, 0-关, 1-开 + BYTE byAudioSwitchType; //音频切换方式,1-按前端源方式,2-按窗口解码源方式 BYTE byRes[2]; - NET_DVR_PU_STREAM_CFG_V41 struAudioSrcInfo; //ƵԴϢ byAudioSwitchTypeΪ1ʱЧ - DWORD dwWindowNo; //Ӵںţ1ֽǽ+1ֽӴں+2ֽڴںţbyAudioSwitchTypeΪ2ʱЧ + NET_DVR_PU_STREAM_CFG_V41 struAudioSrcInfo; //音频源信息 byAudioSwitchType为1时有效 + DWORD dwWindowNo; //子窗口号(1字节墙号+1字节子窗口号+2字节窗口号),byAudioSwitchType为2时有效 BYTE byRes2[28]; }NET_DVR_AUDIO_CHAN_CFG, *LPNET_DVR_AUDIO_CHAN_CFG; -#define MAX_SUBBOARD_NUM 42 //ʽ豸Ŀ -#define MAX_SINGLE_BOARD_EXCEPTION_NUM 16 //󲢷쳣 +#define MAX_SUBBOARD_NUM 42 //集中式大屏设备板数目 +#define MAX_SINGLE_BOARD_EXCEPTION_NUM 16 //单板最大并发异常数 typedef struct tagNET_DVR_MAINBOARD_SERIAL_CFG { DWORD dwSize; - BYTE bySerialWorkMode; //ڹģʽ1-RS484,2-RS232 - BYTE byFunType; //ڹܣ1-̿ƣ2-Ļƣ3-͸ͨģʽ 4-PTZ 5- 6-̨ - BYTE byDataBit;// мλ 05λ16λ27λ38λ; - BYTE byStopBit;// ֹͣλ 01λ12λ; - DWORD dwBaudRate;//0501752110315043005600612007240084800996001019200 11384001257600137680014115.2k; - BYTE byParity;// У 0У飬1У飬2żУ; - BYTE byFlowcontrol;// 0ޣ1,2-Ӳ - WORD wProtocol;//Э飬ͬڹܶӦЭ鲻һ - BYTE byVariable ; //Ƿɱ䣬1-ɱ 2-ɱ ֻȡ - BYTE byGateWayEnable; //Ƿأ0-أ!0 + BYTE bySerialWorkMode; //串口工作模式,1-RS484,2-RS232 + BYTE byFunType; //串口功能,1-键盘控制,2-屏幕控制,3-透明通道模式 4-PTZ控制 5-矩阵控制 6-控制台 + BYTE byDataBit;// 数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit;// 停止位 0-1位,1-2位; + DWORD dwBaudRate;//波特率0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byParity;// 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol;// 0-无,1-软流控,2-硬流控 + WORD wProtocol;//串口协议,不同串口功能对应串口协议不一样 + BYTE byVariable ; //串口是否可变,1-不可变 2-可变 (只获取) + BYTE byGateWayEnable; //是否用于网关,0-不用于网关,!0用于网关 BYTE byRes[30]; }NET_DVR_MAINBOARD_SERIAL_CFG, *LPNET_DVR_MAINBOARD_SERIAL_CFG; typedef struct tagNET_DVR_SUBBOARD_INFO { DWORD dwSize; - BYTE byBoardType; //ͣ0-壬1-DVI-I룬2-YPbPr룬3-BNC룬4-SDI룬 5-DVI˫·룬 6-ͨ룬 7-DVI-I 8-SDI, 9-ǿͽ룬10-DP룬11-HDTVI룬12-HDBaseT13-HDMI룬14-HDBaseT15-DVI-T룬16-HDMI17-HDMI-HD ,18-HDMI-UHD , 19-DP_UHD,0xff-δ֪ //ͣ0-壬1-DVI-I룬2-YPbPr룬3-BNC룬4-SDI룬 5-DVI˫·룬 6-ͨ룬 7-DVI-I 8-SDI, 9-ǿͽ룬10-DP룬11-HDTVI룬12-HDBaseT13-HDMI룬14-HDBaseT15-DVI-T룬16-HDMI17-HDMI-HD ,18-HDMI-UHD , 19-DP_UHD,0xff-δ֪ - BYTE byInterfaceNum; //ӿ - BYTE byStatus; //״̬0-쳣 1- - BYTE bySyncStatus; // ͬ״̬0-δͬ 1-ͬ - DWORD dwSlotNo; //ڲλ + BYTE byBoardType; //类型,0-主板,1-DVI-I输入,2-YPbPr输入,3-BNC输入,4-SDI输入, 5-DVI双链路输入, 6-普通解码板输入, 7-DVI-I输出, 8-SDI输出, 9-增强型解码板输入,10-DP输入,11-HDTVI输入,12-HDBaseT输出,13-HDMI输入,14-HDBaseT,15-DVI-T输入,16-HDMI输出,17-HDMI-HD输入 ,18-HDMI-UHD输入 , 19-DP_UHD输入,0xff-未知类型 //类型,0-主板,1-DVI-I输入,2-YPbPr输入,3-BNC输入,4-SDI输入, 5-DVI双链路输入, 6-普通解码板输入, 7-DVI-I输出, 8-SDI输出, 9-增强型解码板输入,10-DP输入,11-HDTVI输入,12-HDBaseT输出,13-HDMI输入,14-HDBaseT,15-DVI-T输入,16-HDMI输出,17-HDMI-HD输入 ,18-HDMI-UHD输入 , 19-DP_UHD输入,0xff-未知类型 + BYTE byInterfaceNum; //接口数 + BYTE byStatus; //状态,0-异常, 1-正常 + BYTE bySyncStatus; // 超高清板同步状态,0-未启用同步, 1-启用同步 + DWORD dwSlotNo; //所在槽位号 BYTE byRes2[32]; }NET_DVR_SUBBOARD_INFO, *LPNET_DVR_SUBBOARD_INFO; typedef struct tagNET_DVR_DEVICE_SUBBOARD_INFO { DWORD dwSize; - BYTE byBackBoardType; //ͣ 1-4U 2-8U 3-13U, 0xff-δ֪ - BYTE bySoltNum; //λĿ - BYTE byBoardNum; //ЧĿ + BYTE byBackBoardType; //背板类型, 1-4U, 2-8U, 3-13U, 0xff-未知类型 + BYTE bySoltNum; //槽位数目 + BYTE byBoardNum; //有效数目 BYTE byRes1[1]; - NET_DVR_SUBBOARD_INFO struSubBoadInfo[MAX_SUBBOARD_NUM]; //ǰbyBoardNumЧ + NET_DVR_SUBBOARD_INFO struSubBoadInfo[MAX_SUBBOARD_NUM]; //前byBoardNum项有效 BYTE byRes2[32]; }NET_DVR_DEVICE_SUBBOARD_INFO, *LPNET_DVR_DEVICE_SUBBOARD_INFO; typedef struct tagNET_DVR_DEVICE_BOARD_EXCEPINFO { DWORD dwSize; - BYTE byExceptNum; //쳣 + BYTE byExceptNum; //异常项数 BYTE byRes1[3]; - BYTE byMajor[MAX_SINGLE_BOARD_EXCEPTION_NUM]; // - WORD wMinor[MAX_SINGLE_BOARD_EXCEPTION_NUM]; // + BYTE byMajor[MAX_SINGLE_BOARD_EXCEPTION_NUM]; //主类型 + WORD wMinor[MAX_SINGLE_BOARD_EXCEPTION_NUM]; //次类型 BYTE byRes2[32]; }NET_DVR_DEVICE_BOARD_EXCEPINFO, *LPNET_DVR_DEVICE_BOARD_EXCEPINFO; @@ -39534,70 +39534,70 @@ typedef struct tagNET_DVR_DEVICE_BOARD_EXCEPINFO typedef struct tagNET_DVR_LINEARSCAN { DWORD dwSize; - DWORD dwChan; //ͨ - BYTE byLinearScanType; //λͣ0-,1-߽,2-ұ߽ + DWORD dwChan; //通道号 + BYTE byLinearScanType; //限位类型,0-保留,1-左边界设置,2-右边界设置 BYTE byRes[63]; }NET_DVR_LINEARSCAN, *LPNET_DVR_LINEARSCAN; -//Ϣ +//码流附加信息 typedef struct tagNET_DVR_STREAM_ATTACHINFO_CFG { - DWORD dwSize; //ṹС - BYTE byStreamWithVca; //еϢɹк0-,1- - BYTE byRes[127]; // + DWORD dwSize; //结构体大小 + BYTE byStreamWithVca; //码流中叠加智能信息,可供进行后检索。0-不叠加,1-叠加 + BYTE byRes[127]; //保留 }NET_DVR_STREAM_ATTACHINFO_CFG,*LPNET_DVR_STREAM_ATTACHINFO_CFG; typedef struct tagNET_DVR_SUBSYSTEM_NETCFG { DWORD dwSize; - BYTE byDefaultRoute; //Ĭ·ɣ0ʾstruEtherNet[0]1ʾstruEtherNet[1] - BYTE byNetworkCardNum; //豸ʵʿõĿ - BYTE byRes1[2]; // - NET_DVR_ETHERNET_MULTI struEtherNet [MAX_NETWORK_CARD]; //̫ + BYTE byDefaultRoute; //默认路由,0表示struEtherNet[0],1表示struEtherNet[1] + BYTE byNetworkCardNum; //设备实际可配置的网卡数目 + BYTE byRes1[2]; //保留 + NET_DVR_ETHERNET_MULTI struEtherNet [MAX_NETWORK_CARD]; //以太网口 BYTE byRes2[128]; }NET_DVR_SUBSYSTEM_NETCFG, *LPNET_DVR_SUBSYSTEM_NETCFG; -// +//配置清除 typedef struct tagNET_DVR_CLEARCTRL { DWORD dwSize; - DWORD dwChan;//ͨ - BYTE byAllPreset; //еԤõ㣺0-,1- - BYTE byAllPatrols; //еѲ·0-,1- - BYTE byAllPatterms; //еĻɨ裺0-,1- - BYTE byAllPrivacyMasks; //е˽飺0-,1- - BYTE byAllPTZLimited; //еλã0-,1- - BYTE byAllScheduledTasks; //еĶʱ0-,1- - BYTE byAllParkAction; //е0-,1- + DWORD dwChan;//通道号 + BYTE byAllPreset; //清除所有的预置点:0-否,1-是 + BYTE byAllPatrols; //清除所有的巡航路径:0-否,1-是 + BYTE byAllPatterms; //清除所有的花样扫描:0-否,1-是 + BYTE byAllPrivacyMasks; //清除所有的隐私块:0-否,1-是 + BYTE byAllPTZLimited; //清除所有的限位设置:0-否,1-是 + BYTE byAllScheduledTasks; //清除所有的定时任务:0-否,1-是 + BYTE byAllParkAction; //清除所有的守望:0-否,1-是 BYTE byRes[125]; }NET_DVR_CLEARCTRL, *LPNET_DVR_CLEARCTRL; -//̨Ϣ +//云台优先配置信息 typedef struct tagNET_DVR_PTZ_PRIORITIZECFG { DWORD dwSize; - BYTE byPTZPrioritize; //̨ȣ0-Rs4851-磬Ĭ + BYTE byPTZPrioritize; //云台优先:0-Rs485,1-网络,默认网络 BYTE byRes[3]; - DWORD dwDelay; //ʱ2---200 + DWORD dwDelay; //延时:2---200秒 BYTE byRes1[124]; }NET_DVR_PTZ_PRIORITIZECFG, *LPNET_DVR_PTZ_PRIORITIZECFG; -//㷽λǿ +//零方位角控制 typedef struct tagNET_DVR_INITIALPOSITIONCTRL { DWORD dwSize; - DWORD dwChan;//ͨ - BYTE byWorkMode ;//0-ã1- + DWORD dwChan;//通道号 + BYTE byWorkMode ;//0-设置,1-清除 BYTE byRes[127]; }NET_DVR_INITIALPOSITIONCTRL,*LPNET_DVR_INITIALPOSITIONCTRL; -//˽ڱβ +//隐私遮蔽参数 typedef struct tagNET_DVR_PRIVACY_MASKS_COND { DWORD dwSize; - DWORD dwChan; //ͨ - BYTE byRegionalID; //ID 124 - //ɾǰIDӦ˽ڱϢ 0-1-ɾ WriteOnly + DWORD dwChan; //通道号 + BYTE byRegionalID; //区域ID号 1~24 + //删除当前ID对应的隐私遮蔽信息 0-保留,1-删除 (WriteOnly) BYTE byDelPrivacyMaskCfg; BYTE byRes[62]; }NET_DVR_PRIVACY_MASKS_COND, *LPNET_DVR_PRIVACY_MASKS_COND; @@ -39605,294 +39605,294 @@ typedef struct tagNET_DVR_PRIVACY_MASKS_COND typedef struct tagNET_DVR_PRIVACY_MASKS_CFG { DWORD dwSize; - BYTE byEnable;//Ƿ 0-1- - //˽ڱòǷʾ 0-1- ReadOnly + BYTE byEnable;//是否启用 0-否,1-是 + //隐私遮蔽区域配置参数是否显示 0-否,1-是 (ReadOnly) BYTE byPrivacyMaskCfgEnable; - BYTE byColorType; //0-,1-ҡ2-졢3-̡4-5-ȡ6-ơ0xff- - BYTE byActiveZoomRatio;//αʣ1--100 - char sPrivacyMaskName[NAME_LEN/*32*/];//ڵƣֻʹ16ֽ - NET_VCA_POLYGON struRegion;//Χ - //ǰǷЧ 0-1- ԵϢ͵µĶϢ + BYTE byColorType; //0-保留,1-灰、2-红、3-绿、4-蓝、5-橙、6-黄、0xff-马赛克 + BYTE byActiveZoomRatio;//屏蔽倍率:1--100 + char sPrivacyMaskName[NAME_LEN/*32*/];//遮挡区域名称,只使用16个字节 + NET_VCA_POLYGON struRegion;//区域范围 + //当前区域坐标是否有效 0-否,1-是 (针对单个区域设置区域坐标信息,和单场景下的多区域设置区域坐标信息) BYTE byCurrentRegionEnable; - //ǰʹֶ 0- byActiveZoomRatio ;1- fActiveZoomRatio(֧ڵcurActiveZoomRatioType) + //当前倍率使用字段 0- byActiveZoomRatio ;1- fActiveZoomRatio(支持能力节点curActiveZoomRatioType) BYTE byCurZoomRatio ; BYTE byRes[2]; - float fActiveZoomRatio; //α(ȷС1λ)[1.0-100.0] + float fActiveZoomRatio; //屏蔽倍率(精确到小数点1位):[1.0-100.0] BYTE byRes1[120]; }NET_DVR_PRIVACY_MASKS_CFG, *LPNET_DVR_PRIVACY_MASKS_CFG; -//ȫʹ +//全局使能 typedef struct tagNET_DVR_PRIVACY_MASKS_ENABLECFG { DWORD dwSize; - BYTE byEnable;//ʹܣ0-1- + BYTE byEnable;//启用使能,0-否,1-是 BYTE byRes[127]; }NET_DVR_PRIVACY_MASKS_ENABLECFG,*LPNET_DVR_PRIVACY_MASKS_ENABLECFG; -//˶Ϣ +//智能运动配置信息 typedef struct tagNET_DVR_SMARTTRACKCFG { DWORD dwSize; - BYTE byEnable;//ʹ 0-1- + BYTE byEnable;//启动使能 0-否,1-是 BYTE byRes[3]; - DWORD dwDuration;//ʱ䣺0--300룬Ĭ300 + DWORD dwDuration;//持续时间:0--300秒,默认300秒 BYTE byRes1[124]; }NET_DVR_SMARTTRACKCFG,*LPNET_DVR_SMARTTRACKCFG; -// +//倍率 typedef struct tagNET_DVR_ZOOMRATIOCTRL { DWORD dwSize; - DWORD dwChan;//ͨ + DWORD dwChan;//通道号 BYTE byRes[128]; }NET_DVR_ZOOMRATIOCTRL,*LPNET_DVR_ZOOMRATIOCTRL; -//뿪Ϣ +//拨码开关信息 typedef struct tagNET_DVR_DIAL_SWITCH_CFG { DWORD dwSize; - DWORD dwSwitchState;//ſ״̬ + DWORD dwSwitchState;//拨号开关状态 BYTE byRes[28]; }NET_DVR_DIAL_SWITCH_CFG,*LPNET_DVR_DIAL_SWITCH_CFG; -typedef struct tagNET_ALARM_RECORDFILE_LOSS //¼ʧӽṹ +typedef struct tagNET_ALARM_RECORDFILE_LOSS //录像丢失报警子结构 { - NET_DVR_TIME_EX struInspectStart; //Ѳ쿪ʼʱ - NET_DVR_TIME_EX struInspectEnd; //Ѳʱ - NET_DVR_IPADDR struIP; //¼ʧӦͨIPַ - DWORD dwChanNo; //ͨ - DWORD dwIDIndex; //ID - BYTE sName[STREAM_ID_LEN]; // - NET_DVR_TIME_EX struLossStartTime; //¼ʧʼʱ - NET_DVR_TIME_EX struLossEndTime; //¼ʧʱ - DWORD dwLostNum; //¼ʧ 0xffffffffʾȫʧ + NET_DVR_TIME_EX struInspectStart; //巡检开始时间 + NET_DVR_TIME_EX struInspectEnd; //巡检结束时间 + NET_DVR_IPADDR struIP; //录像丢失对应通道的IP地址 + DWORD dwChanNo; //通道号 + DWORD dwIDIndex; //编码器ID + BYTE sName[STREAM_ID_LEN]; //编码器名称 + NET_DVR_TIME_EX struLossStartTime; //录像丢失开始时间 + NET_DVR_TIME_EX struLossEndTime; //录像丢失结束时间 + DWORD dwLostNum; //录像丢失个数 0xffffffff表示全部丢失 BYTE byRes[240]; } NET_ALARM_RECORDFILE_LOSS, *LPNET_ALARM_RECORDFILE_LOSS; -typedef struct tagNET_ALARM_STREAM_EXCEPTION //ȡ쳣 ӽṹ +typedef struct tagNET_ALARM_STREAM_EXCEPTION //取流异常报警 子结构 { - NET_DVR_IPADDR struIP; //Ƶ쳣ͨIPַ - DWORD dwChanNo; //ͨ - DWORD dwIDIndex; //ID - BYTE sName[STREAM_ID_LEN]; // - BYTE byExceptionCase; //쳣ԭ0-д쳣 1-쳣 - BYTE byRes[307]; // + NET_DVR_IPADDR struIP; //发生视频异常通道的IP地址 + DWORD dwChanNo; //通道号 + DWORD dwIDIndex; //编码器ID + BYTE sName[STREAM_ID_LEN]; //编码器名称 + BYTE byExceptionCase; //异常原因,0-数据写入异常 1-网络接收异常 + BYTE byRes[307]; //保留 } NET_ALARM_STREAM_EXCEPTION, *LPNET_ALARM_STREAM_EXCEPTION; -typedef struct tagNET_ALARM_RESOURCE_USAGE //Դʹñ ӽṹ +typedef struct tagNET_ALARM_RESOURCE_USAGE //资源使用报警 子结构 { - BYTE byLevel; //ʹس̶ȵ 0-1-һ澯 2-澯 3-澯 - BYTE byRes[491]; // + BYTE byLevel; //使用情况,严重程度递增: 0-正常,1-一级告警上限 2-二级告警上限 3-三级告警上限 + BYTE byRes[491]; //保留 }NET_ALARM_RESOURCE_USAGE, *LPNET_ALARM_RESOURCE_USAGE; -typedef struct tagNET_ALARM_RECORD_EXCEPTION //¼쳣 ӽṹ +typedef struct tagNET_ALARM_RECORD_EXCEPTION //录像异常报警 子结构 { - BYTE byReason; //쳣ԭ 0-¼ 1-¼쳣 2-޿lun - BYTE byRes1[3]; // + BYTE byReason; //异常原因 0-录像卷满 1-录像卷异常 2-无可用lun卷 + BYTE byRes1[3]; //保留 BYTE sVolumeName[MAX_VOLUMENAME_LEN]; - DWORD dwVolumeID; //¼IDӲ̺ţ - BYTE byRes[452]; // + DWORD dwVolumeID; //录像卷ID(硬盘号) + BYTE byRes[452]; //保留 }NET_ALARM_RECORD_EXCEPTION, *LPNET_ALARM_RECORD_EXCEPTION; -typedef union tagNET_ALARM_CVR_SUBINFO_UNION //CVRӽṹ +typedef union tagNET_ALARM_CVR_SUBINFO_UNION //CVR报警子结构 { - BYTE byLen[492]; //峤 - NET_ALARM_RECORDFILE_LOSS struRecordLost; //¼ʧ - NET_ALARM_STREAM_EXCEPTION struStreamException; //ȡ쳣 - NET_ALARM_RESOURCE_USAGE struResourceUsage; //Դʹ - NET_ALARM_RECORD_EXCEPTION struRecordException; //¼쳣 + BYTE byLen[492]; //联合体长度 + NET_ALARM_RECORDFILE_LOSS struRecordLost; //录像丢失 + NET_ALARM_STREAM_EXCEPTION struStreamException; //取流异常 + NET_ALARM_RESOURCE_USAGE struResourceUsage; //资源使用 + NET_ALARM_RECORD_EXCEPTION struRecordException; //录像异常 }NET_ALARM_CVR_SUBINFO_UNION, *LPNET_ALARM_CVR_SUBINFO_UNION; -#define MAX_VARIABLE_DATA_NUM 65535 //ɱݸ +#define MAX_VARIABLE_DATA_NUM 65535 //最大可变数据个数 typedef struct tagNET_DVR_ALARMINFO_DEV_V40 { - DWORD dwAlarmType; // 0-(ͨ)ź1-˽о𻵣2- NVR˳3-״̬쳣4-ϵͳʱ쳣5-¼ʣͣ6-(ͨ)ƶⱨ - //7-(ͨ)ڵ; 8-¼ʧ; 9-Ƶʵʱʾ; 10-Դʹʸ澯; 11- CVRԶ޸쳣 12-¼쳣 + DWORD dwAlarmType; //报警子类型 0-编码器(通道)信号量报警;1-私有卷二损坏;2- NVR服务退出;3-编码器状态异常;4-系统时钟异常;5-录像卷剩余容量过低;6-编码器(通道)移动侦测报警; + //7-编码器(通道)遮挡报警; 8-录像丢失报警; 9-视频实时显示报警; 10-资源使用率告警; 11- CVR自动修复异常, 12-录像异常 NET_DVR_TIME struTime; - NET_ALARM_CVR_SUBINFO_UNION uSubAlarmInfo; //Ϣӽṹ Ϊ8,9,10,11,12ʱЧ + NET_ALARM_CVR_SUBINFO_UNION uSubAlarmInfo; //报警信息子结构 报警类型为8,9,10,11,12时该联合体有效 BYTE byRes[256]; - DWORD dwNumber; //ɱݸ - WORD *pNO; //Ϊ0367ʱܻͨţΪ5ʱܻд̺šɱʾֵΧΪ0~65535 + DWORD dwNumber; //可变数据个数 + WORD *pNO; //当类型为0、3、6、7时,可能会有通道号;当类型为5时,可能会有磁盘号。可表示的值范围为0~65535 }NET_DVR_ALARMINFO_DEV_V40, *LPNET_DVR_ALARMINFO_DEV_V40; -typedef struct tagNET_DVR_CONTROL_START_CFG //һʼϢ +typedef struct tagNET_DVR_CONTROL_START_CFG //一键开始控制信息 { - BYTE byUseDefine; //ʹԶ壬 0-ʹĬϣ1-ʹԶ + BYTE byUseDefine; //使用自定义, 0-使用默认,1-使用自定义 BYTE byRes1; - WORD wCourseIndex; //γ + WORD wCourseIndex; //课程索引 BYTE byRes[128]; }NET_DVR_CONTROL_START_CFG, *LPNET_DVR_CONTROL_START_CFG; -typedef struct tagNET_DVR_CONTROL_DELAY_CFG//һӳ¼Ϣ +typedef struct tagNET_DVR_CONTROL_DELAY_CFG//一键延长录像控制信息 { - BYTE byUseDefine; //ʹԶ壬 0-ʹĬϣ1-ʹԶ + BYTE byUseDefine; //使用自定义, 0-使用默认,1-使用自定义 BYTE byRes1; - WORD wDelayTime; //¼ӳʱ<¼ʱԴΪ׼>λs + WORD wDelayTime; //录像延长时间<继续录像时间以此为准>,单位s BYTE byRes[128]; }NET_DVR_CONTROL_DELAY_CFG, *LPNET_DVR_CONTROL_DELAY_CFG; -typedef union tagNET_DVR_CONTROL_INFO_UNION //Ϣ +typedef union tagNET_DVR_CONTROL_INFO_UNION //控制信息联合体 { - BYTE byLen[132]; //峤 - NET_DVR_CONTROL_START_CFG struStartCfg; //һʼ - NET_DVR_CONTROL_DELAY_CFG struDelayCfg; //һӳ + BYTE byLen[132]; //联合体长度 + NET_DVR_CONTROL_START_CFG struStartCfg; //一键开始 + NET_DVR_CONTROL_DELAY_CFG struDelayCfg; //一键延迟 }NET_DVR_CONTROL_INFO_UNION, *LPNET_DVR_CONTROL_INFO_UNION; typedef struct tagNET_DVR_RECORDING_CONTROL_CFG_ { - DWORD dwSize; //ṹС - WORD wCmdType; //ͣ0-һʼ1-һ2-һͣ3-һָ4-һӳ,5-һʼ 6-һֹͣ - BYTE byRes1 [2]; // - NET_DVR_CONTROL_INFO_UNION struControlInfo; //ϢʹýϿ - BYTE byRes[256]; // + DWORD dwSize; //结构体大小 + WORD wCmdType; //控制命令类型,0-一键开始,1-一键结束,2-一键暂停,3-一键恢复,4-一键延长,5-一键开始屏蔽 6-一键停止屏蔽 + BYTE byRes1 [2]; //保留 + NET_DVR_CONTROL_INFO_UNION struControlInfo; //控制信息,具体使用结合控制命令类型 + BYTE byRes[256]; //保留 }NET_DVR_RECORDING_CONTROL_CFG, *LPNET_DVR_RECORDING_CONTROL_CFG; typedef struct tagNET_DVR_RECORDING_HOST_CFG { - DWORD dwSize; //ṹС - DWORD dwOneKeyDelayTime; //һӳʱ ¼¼ʱ λ S - BYTE byDirectedMode; //ģʽ0-Զ1ֶ2-Զ - BYTE byClassroomType; //ͣ0-Ч1-ң2-ӽ - BYTE byCourseDataStorageEnabled;//ͳǷ洢Ӳ, 0-洢1-洢 - BYTE byElectronicEnlargeMode;//ǷʹõӷŴ󵼲, 0-ʹã1-ʹ - BYTE byRes[124]; // + DWORD dwSize; //结构体大小 + DWORD dwOneKeyDelayTime; //一键本地延迟时间 录像继续录的时间 单位 S + BYTE byDirectedMode; //导播模式,0-自动导播,1手动导播,2-半自动导播 + BYTE byClassroomType; //教室类型,0-无效,1-主教室,2-从教室 + BYTE byCourseDataStorageEnabled;//课堂数据统计是否存储在硬盘, 0-不存储,1-存储 + BYTE byElectronicEnlargeMode;//是否使用电子放大导播, 0-不使用,1-使用 + BYTE byRes[124]; //保留 }NET_DVR_RECORDING_HOST_CFG, *LPNET_DVR_RECORDING_HOST_CFG; typedef struct tagNET_DVR_STATISTIC_DATA_COND { DWORD dwSize; - DWORD dwTypeTarget; //ͳƶͣTARGET_TYPE - NET_DVR_TIME struStartTime;//ʼͳʱ - NET_DVR_TIME struStopTime;//ͳʱ + DWORD dwTypeTarget; //统计对象类型,详见TARGET_TYPE + NET_DVR_TIME struStartTime;//开始统计时间 + NET_DVR_TIME struStopTime;//结束统计时间 BYTE byRes[280]; }NET_DVR_STATISTIC_DATA_COND, *LPNET_DVR_STATISTIC_DATA_COND; typedef struct tagNET_DVR_STATISTIC_DATA_CFG { DWORD dwSize; - DWORD dwTypeTarget; //ͳƶͣTARGET_TYPE - NET_DVR_TIME struStartTime;//¼ʼʱ - NET_DVR_TIME struStopTime;//¼ʱ + DWORD dwTypeTarget; //统计对象类型,详见TARGET_TYPE + NET_DVR_TIME struStartTime;//事件开始时间 + NET_DVR_TIME struStopTime;//事件结束时间 BYTE byRes[300]; }NET_DVR_STATISTIC_DATA_CFG, *LPNET_DVR_STATISTIC_DATA_CFG; //typedef enum //{ -// NET_SDK_ALL_TARGET = 0, //ͳж -// NET_SDK_PPT_TARGET_ALARM, //PPT -// NET_SDK_PPT_TARGET_VIEW, //PPTͼ -// NET_SDK_STU_SINGLE_ALARM, //ѧ -// NET_SDK_STU_SINGLE_VIEW, //ѧͼ -// NET_SDK_SUT_MULT_ALARM, //ѧ -// NET_SDK_STU_MULT_VIEW, //ѧͼ -// NET_SDK_STU_TEACHER_VIEW, //ʦͼ -// NET_SDK_TEA_UP_DOWN_ALARM, //ʦ½̨ -// NET_SDK_TEA_START_VIEW, //ʦڿͼ -// NET_SDK_BLA_WRITE_ALARM, //д鱨 -// NET_SDK_BLA_WRITE_VIEW, //дͼ -// NET_SDK_TEA_FULL_VIEW, //ʦȫͼ -// NET_SDK_TEA_START_ALARM, //ʦʼڿα -// NET_SDK_TEA_WALK_ALARM, //ʦ߶ -// NET_SDK_TEA_LEFT_ALARM, //ʦ뿪 -// NET_SDK_TEA_RUN_ALARM, //ʦܱ -// NET_SDK_TEA_MULT_ALARM //ʦ˱ +// NET_SDK_ALL_TARGET = 0, //统计所有对象 +// NET_SDK_PPT_TARGET_ALARM, //PPT报警 +// NET_SDK_PPT_TARGET_VIEW, //PPT视图 +// NET_SDK_STU_SINGLE_ALARM, //单个学生报警 +// NET_SDK_STU_SINGLE_VIEW, //单个学生视图 +// NET_SDK_SUT_MULT_ALARM, //多个学生报警 +// NET_SDK_STU_MULT_VIEW, //多个学生视图 +// NET_SDK_STU_TEACHER_VIEW, //师生互动视图 +// NET_SDK_TEA_UP_DOWN_ALARM, //教师上下讲台 +// NET_SDK_TEA_START_VIEW, //教师授课视图 +// NET_SDK_BLA_WRITE_ALARM, //书写板书报警 +// NET_SDK_BLA_WRITE_VIEW, //书写板书视图 +// NET_SDK_TEA_FULL_VIEW, //教师全景视图 +// NET_SDK_TEA_START_ALARM, //教师开始授课报警 +// NET_SDK_TEA_WALK_ALARM, //教师走动报警 +// NET_SDK_TEA_LEFT_ALARM, //教师离开报警 +// NET_SDK_TEA_RUN_ALARM, //教师奔跑报警 +// NET_SDK_TEA_MULT_ALARM //教师多人报警 //}TARGET_TYPE; typedef struct tagNET_DVR_AUTO_TRACK_CFG { - DWORD dwSize; //ṹС + DWORD dwSize; //结构体大小 NET_DVR_DIRECT_CONNECT_CHAN_INFO struSDIInfo[MAX_CHANNUM_V30] ; - //SDIͨ豸ʵʵʽģͨǰʹIPͨ - BYTE byCameraType[MAX_CHANNUM_V30]; //ֵͨͣΪ 0-壬1-ʦ۽2-ѧ۽3-ʦȫ4-ѧȫ5-ý壬6-ʦλ,7-ѧλ,8-鶨λ,9-, 0xff-δ - BYTE byRes[64]; // + //SDI通道,设备端实际的流返回形式是模拟通道,而控制前端使用IP通道。 + BYTE byCameraType[MAX_CHANNUM_V30]; //通道接入的相机类型,值为 0-无意义,1-老师聚焦,2-学生聚焦,3-老师全景,4-学生全景,5-多媒体,6-教师定位,7-学生定位,8-板书定位,9-板书相机, 0xff-未接入 + BYTE byRes[64]; //保留 }NET_DVR_AUTO_TRACK_CFG, *LPNET_DVR_AUTO_TRACK_CFG; typedef struct tagNET_DVR_PUBLISH_FTP_CFG { - BYTE byProtocolType; //Э 0-FTP1-SFTP - BYTE byRes1; // - WORD wFTPPort; //˿ - BYTE byAddress[MAX_DOMAIN_NAME]; //IP,Ҫ豸 - //ʽΪĸ'.'Ϊ,ΪIPַ - BYTE szUserName[NAME_LEN/*32*/]; //û<> - BYTE szPassWord[PASSWD_LEN/*16*/]; //<> - BYTE szCustomDir[128]; //Ŀ¼,֧Ŀ¼ṹ - BYTE byRes[12]; // + BYTE byProtocolType; //协议类型 0-FTP,1-SFTP + BYTE byRes1; //保留 + WORD wFTPPort; //端口 + BYTE byAddress[MAX_DOMAIN_NAME]; //IP或者域名,需要设备解析 + //解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + BYTE szUserName[NAME_LEN/*32*/]; //用户名<加密> + BYTE szPassWord[PASSWD_LEN/*16*/]; //密码<加密> + BYTE szCustomDir[128]; //发布目录,支持目录结构 + BYTE byRes[12]; //保留 } NET_DVR_PUBLISH_FTP_CFG, *LPNET_DVR_PUBLISH_FTP_CFG; typedef struct tagNET_DVR_PUBLISH_HTTP_CFG { - BYTE strUrl[256]; //URLַϢ + BYTE strUrl[256]; //发布的URL地址信息 }NET_DVR_PUBLISH_HTTP_CFG, *LPNET_DVR_PUBLISH_HTTP_CFG; typedef struct tagNET_DVR_PUBLISH_FTP_CFG_DIR { - BYTE byProtocolType; //Э 0-FTP1-SFTP - BYTE byRes1; // - WORD wFTPPort; //˿ - BYTE byAddress[MAX_DOMAIN_NAME]; //IP,Ҫ豸 - //ʽΪĸ'.'Ϊ,ΪIPַ - BYTE szUserName[NAME_LEN/*32*/]; //û<> - BYTE szPassWord[PASSWD_LEN/*16*/]; //<> - BYTE byDirLevel; /*0 = ʹĿ¼ṹֱӱڸĿ¼,1 = ʹ1Ŀ¼,2=ʹ2Ŀ¼*/ - BYTE byTopDirMode; /* һĿ¼0x1 = ʹ豸,0x2 = ʹ豸,0x3 = ʹ豸ipַ 0xff=ʹԶ*/ - BYTE bySubDirMode; /*Ŀ¼0x1=ʹͨ,0x2=ʹͨţ0x3=ʹÿγƣ0x4-ʹڿڣ0xff-ʹԶ*/ + BYTE byProtocolType; //协议类型 0-FTP,1-SFTP + BYTE byRes1; //保留 + WORD wFTPPort; //端口 + BYTE byAddress[MAX_DOMAIN_NAME]; //IP或者域名,需要设备解析 + //解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + BYTE szUserName[NAME_LEN/*32*/]; //用户名<加密> + BYTE szPassWord[PASSWD_LEN/*16*/]; //密码<加密> + BYTE byDirLevel; /*0 = 不使用目录结构,直接保存在根目录,1 = 使用1级目录,2=使用2级目录*/ + BYTE byTopDirMode; /* 一级目录,0x1 = 使用设备名,0x2 = 使用设备号,0x3 = 使用设备ip地址 0xff=使用自定义*/ + BYTE bySubDirMode; /*二级目录,0x1=使用通道名称,0x2=使用通道号,0x3=使用课程名称,0x4-使用授课日期,0xff-使用自定义*/ BYTE byRes2; - BYTE byTopCustomDir[MAX_CUSTOMDIR_LEN/*32*/];/*ԶһĿ¼*/ - BYTE bySubCustomDir[MAX_CUSTOMDIR_LEN/*32*/];/*ԶĿ¼*/ - BYTE byRes[72]; // + BYTE byTopCustomDir[MAX_CUSTOMDIR_LEN/*32*/];/*自定义一级目录*/ + BYTE bySubCustomDir[MAX_CUSTOMDIR_LEN/*32*/];/*自定义二级目录*/ + BYTE byRes[72]; //保留 }NET_DVR_PUBLISH_FTP_CFG_DIR, *LPNET_DVR_PUBLISH_FTP_CFG_DIR; typedef union tagNET_DVR_PUBLISH_ADD_UNION { - BYTE byLen[256]; //峤 - NET_DVR_PUBLISH_HTTP_CFG struHttpCfg; //httpַϢ - NET_DVR_PUBLISH_FTP_CFG struFtpCfg; //ftpַϢ - NET_DVR_PUBLISH_FTP_CFG_DIR struDirFtpCfg; //Ŀ¼ʽFTP + BYTE byLen[256]; //联合体长度 + NET_DVR_PUBLISH_HTTP_CFG struHttpCfg; //http地址信息 + NET_DVR_PUBLISH_FTP_CFG struFtpCfg; //ftp地址信息 + NET_DVR_PUBLISH_FTP_CFG_DIR struDirFtpCfg; //按目录方式的FTP }NET_DVR_PUBLISH_ADD_UNION, *LPNET_DVR_PUBLISH_ADD_UNION; -typedef struct tagNET_DVR_CHAN_RECORD_PUBLISH_INFO //ͨ¼񷢲Ϣ +typedef struct tagNET_DVR_CHAN_RECORD_PUBLISH_INFO //通道录像发布信息 { - BYTE byPublish; //Ƿ񷢲0- 1- + BYTE byPublish; //是否发布,0-不发布, 1-发布 BYTE byRes1[3]; - DWORD dwStreamType; //һͣλʾ - //&0x1-ʾ - //&0x2-ʾ - //&0x4-ʾ - BYTE byRes[12]; // + DWORD dwStreamType; //一键发布码流类型,按位表示 + //&0x1-表示主码流 + //&0x2-表示子码流 + //&0x4-表示码流三 + BYTE byRes[12]; //保留 }NET_DVR_RECORD_PUBLISH_INFO,*LPNET_DVR_RECORD_PUBLISH_INFO; typedef struct tagNET_DVR_PUBLISH_CFG { - DWORD dwSize; //ṹС - BYTE byPublishType; //ʽ0-http,1-ftp,2-Dir FTP - BYTE byRes1[3]; // - NET_DVR_PUBLISH_ADD_UNION struPublishAddr; //һַϢ - NET_DVR_RECORD_PUBLISH_INFO struChanPublish[MAX_CHANNUM_V30]; //ͨ¼񷢲Ϣ struChanPublis[0]ʾͨ1Ӧ¼񷢲Ϣ - NET_DVR_RECORD_PUBLISH_INFO struDirectChanPublish; //ͨ¼񷢲Ϣ - BYTE byUploadTime; //Ƿʱftpϴ 0-壬1-2- - BYTE byTimerMode; //0-壬1-αʱϴһڿε¼2-ʱ㷽ʽϴǰ24Сʱ¼ - BYTE byUploadStartHour; //ʱ䶨ʱϴʼʱ ʱ - BYTE byUoploadStartMin; //ʱ䶨ʱϴ ʼʱ - BYTE byRes[1020]; // + DWORD dwSize; //结构体大小 + BYTE byPublishType; //发布方式,0-http,1-ftp,2-Dir FTP + BYTE byRes1[3]; //保留 + NET_DVR_PUBLISH_ADD_UNION struPublishAddr; //一键发布地址信息 + NET_DVR_RECORD_PUBLISH_INFO struChanPublish[MAX_CHANNUM_V30]; //通道录像发布信息 struChanPublis[0]表示通道1对应录像发布信息 + NET_DVR_RECORD_PUBLISH_INFO struDirectChanPublish; //导播通道录像发布信息 + BYTE byUploadTime; //是否启动定时ftp上传功能 0-无意义,1-不启动,2-启用 + BYTE byTimerMode; //0-无意义,1-按课表定时上传最近一节课的录像,2-按时间点方式上传前24小时录像 + BYTE byUploadStartHour; //按时间定时上传起始时间 时 + BYTE byUoploadStartMin; //按时间定时上传 开始时间 分 + BYTE byRes[1020]; //保留 }NET_DVR_PUBLISH_CFG, *LPNET_DVR_PUBLISH_CFG; typedef struct tagNET_DVR_ONEKEY_PUBLISH_CFG { - DWORD dwSize; //ṹС - BYTE byUseDefine; //ʹԶ 0-ʹĬϷϢ1-ʹԶ巢Ϣ + DWORD dwSize; //结构体大小 + BYTE byUseDefine; //使用自定义 0-使用默认发布配置信息,1-使用自定义发布配置信息 BYTE byRes1[3]; - NET_DVR_RECORD_PUBLISH_INFO struChanPublish[MAX_CHANNUM_V30]; //ͨ¼񷢲Ϣ struChanPublis[0]ʾͨ1Ӧ¼񷢲Ϣ - NET_DVR_RECORD_PUBLISH_INFO struDirectChanPublish; //ͨ¼񷢲Ϣ - NET_DVR_TIME_EX struStartTime; //γ̿ʼʱ - NET_DVR_TIME_EX struEndTime; //γ̽ʱ - BYTE bySchedulePublish; //Ƿ񰴿α0α1α - BYTE sFileName[COURSE_NAME_LEN/*32*/]; //ļ + NET_DVR_RECORD_PUBLISH_INFO struChanPublish[MAX_CHANNUM_V30]; //通道录像发布信息 struChanPublis[0]表示通道1对应录像发布信息 + NET_DVR_RECORD_PUBLISH_INFO struDirectChanPublish; //导播通道录像发布信息 + NET_DVR_TIME_EX struStartTime; //课程开始时间 + NET_DVR_TIME_EX struEndTime; //课程结束时间 + BYTE bySchedulePublish; //是否按课表发布,0不按课表发布1按课表发布 + BYTE sFileName[COURSE_NAME_LEN/*32*/]; //发布文件名称 BYTE byRes[31]; }NET_DVR_ONEKEY_PUBLISH_CFG,*LPNET_DVR_ONEKEY_PUBLISH_CFG; @@ -39902,51 +39902,51 @@ typedef struct tagNET_DVR_COURSE_RECORDING_INFO char sCourseName[COURSE_NAME_LEN/*32*/]; char sInstructorName[INSTRUCTOR_NAME_LEN/*16*/]; char sCourseDescription[COURSE_DESCRIPTION_LEN /*256*/]; - BYTE byIndex; //γ + BYTE byIndex; //课程索引 BYTE byRes[15]; }NET_DVR_COURSE_RECORDING_INFO, *LPNET_DVR_COURSE_RECORDING_INFO; typedef struct tagNET_DVR_EACH_LESSON_INFO_ { - NET_DVR_SCHEDTIME struSchedTime ; //γֹʱ - WORD wCourseIndex ; //γ - WORD wSessionIndex ; //ڴ - BYTE byRes[4] ; // + NET_DVR_SCHEDTIME struSchedTime ; //课程起止时间 + WORD wCourseIndex ; //课程索引 + WORD wSessionIndex ; //节次 + BYTE byRes[4] ; //保留 }NET_DVR_EACH_LESSON_INFO,*LPNET_DVR_EACH_LESSON_INFO ; -// ¼״̬ -typedef struct tagNET_DVR_CURRICULUM_CFG //αƻ +// 流录像状态 +typedef struct tagNET_DVR_CURRICULUM_CFG //课表计划 按年月日配置 { - DWORD dwSize ; //ṹС - NET_DVR_EACH_LESSON_INFO struLessonInfo[MAX_TIMESEGMENT_V40/*16*/] ; //ÿڿϢ - BYTE byRes[256] ; // + DWORD dwSize ; //结构体大小 + NET_DVR_EACH_LESSON_INFO struLessonInfo[MAX_TIMESEGMENT_V40/*16*/] ; //每节课信息 + BYTE byRes[256] ; //保留 }NET_DVR_CURRICULUM_CFG, *LPNET_DVR_CURRICULUM_CFG; typedef struct tagNET_DVR_DATE_ { - WORD wYear; // - BYTE byMonth; // - BYTE byDay; // + WORD wYear; //年 + BYTE byMonth; //月 + BYTE byDay; //日 }NET_DVR_DATE,*LPNET_DVR_DATE; typedef struct _NET_DVR_PPT_DETECT_CFG_ { DWORD dwSize ; - BYTE byEnablePPTDetect; //ǷPPT - BYTE byPptDetLevel; // - BYTE byEnablePartScreen; //Ƿò + BYTE byEnablePPTDetect; //是否启用PPT检测 + BYTE byPptDetLevel; //灵敏度 + BYTE byEnablePartScreen; //是否配置部分区域 BYTE byRes1; - WORD wX; // + WORD wX; //区域坐标 WORD wY; WORD wWidth; WORD wHeight; - DWORD dwChangePixelNum;//صֵ[0,1000](ps : һͼжڱ仯) + DWORD dwChangePixelNum;//像素点检测阈值[0,1000](ps : 一幅图像有多少像素在变化) BYTE byRes[28]; }NET_DVR_PPT_DETECT_CFG,*LPNET_DVR_PPT_DETECT_CFG; typedef struct _NET_DVR_SCREEN_SWITCH_ { DWORD dwSize; - BYTE byRes[64]; // + BYTE byRes[64]; //保留 }NET_DVR_SCREEN_SWITCH, *LPNET_DVR_SCREEN_SWITCH; typedef struct _NET_DVR_PPT_CHANNEL_CFG_ @@ -39958,450 +39958,450 @@ typedef struct _NET_DVR_PPT_CHANNEL_CFG_ typedef struct tagNET_DVR_BACKUP_RECORD_INFO { - BYTE byEnable; //Ƿ + BYTE byEnable; //是否启用 BYTE byRes[11]; - //ͣλʾ - //&0x1-ʾ - //&0x2-ʾ - //&0x4-ʾ + //备份码流类型,按位表示 + //&0x1-表示主码流 + //&0x2-表示子码流 + //&0x4-表示码流三 DWORD dwStreamType; }NET_DVR_BACKUP_RECORD_INFO, *LPNET_DVR_BACKUP_RECORD_INFO; typedef struct tagNET_DVR_BACKUP_RECORD_PARAM { DWORD dwSize ; - NET_DVR_BACKUP_RECORD_INFO struChanBackUp[MAX_CHANNUM_V30/*64*/]; //Ҫݵͨ,±ӦӦͨ - NET_DVR_BACKUP_RECORD_INFO struDirectedChanBackUp; //ͨϢ - BYTE byRes[256]; // ֽ + NET_DVR_BACKUP_RECORD_INFO struChanBackUp[MAX_CHANNUM_V30/*64*/]; //需要备份的通道,数组下标对应相应的通道号 + NET_DVR_BACKUP_RECORD_INFO struDirectedChanBackUp; //导播通道备份信息 + BYTE byRes[256]; // 保留字节 }NET_DVR_BACKUP_RECORD_PARAM, *LPNET_DVR_BACKUP_RECORD_PARAM; -//ڻ +//室内机编号 typedef struct tagNET_DVR_INDOOR_UNIT_DEVICEID { - SHORT wFloorNumber; // - WORD wRoomNumber; // - WORD wDevIndex; //ڻţ0-10 - BYTE byRes[122]; // + SHORT wFloorNumber; //层号 + WORD wRoomNumber; //房间号 + WORD wDevIndex; //室内机编号,0-10 + BYTE byRes[122]; //保留 }NET_DVR_INDOOR_UNIT_DEVICEID,*LPNET_DVR_INDOOR_UNIT_DEVICEID; -//ſڻ +//门口机编号 typedef struct tagNET_DVR_OUTDOOR_UNIT_DEVICEID { - WORD wPeriod; //ں, Χ[0,9] - WORD wBuildingNumber; //¥ - WORD wUnitNumber; //Ԫ - SHORT wFloorNumber; // - WORD wDevIndex; //ſڻţÿһſڻΨһ0ʼ - BYTE byRes[118]; // + WORD wPeriod; //期号, 范围[0,9] + WORD wBuildingNumber; //楼号 + WORD wUnitNumber; //单元号 + SHORT wFloorNumber; //层号 + WORD wDevIndex; //门口机序号,每一层中门口机的序号唯一,从0开始 + BYTE byRes[118]; //保留 }NET_DVR_OUTDOOR_UNIT_DEVICEID,*LPNET_DVR_OUTDOOR_UNIT_DEVICEID; -//Χǽ +//围墙机编号 typedef struct tagNET_DVR_OUTDOOR_FENCE_DEVICEID { - WORD wPeriod; //ں, Χ[0,9] - WORD wDevIndex; //ΧǽţÿһſڻΨһ0ʼ - BYTE byRes[124]; // + WORD wPeriod; //期号, 范围[0,9] + WORD wDevIndex; //围墙机序号,每一层中门口机的序号唯一,从0开始 + BYTE byRes[124]; //保留 }NET_DVR_OUTDOOR_FENCE_DEVICEID,*LPNET_DVR_OUTDOOR_FENCE_DEVICEID; -// +//管理机编号 typedef struct tagNET_DVR_MANAGE_UNIT_DEVICEID { - WORD wPeriod; //ںţΧ[0,9] - WORD wDevIndex; //ţÿһйΨһ,0ʼ - BYTE byRes[124]; // + WORD wPeriod; //期号,范围[0,9] + WORD wDevIndex; //管理机序号,每一期中管理机的序号唯一,从0开始 + BYTE byRes[124]; //保留 }NET_DVR_MANAGE_UNIT_DEVICEID,*LPNET_DVR_MANAGE_UNIT_DEVICEID; -//ӶԽ豸 +//可视对讲设备编号联合体 typedef union tagNET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION { - BYTE byLen[128] ; //С - NET_DVR_INDOOR_UNIT_DEVICEID struIndoorUnit; //ڻ - NET_DVR_OUTDOOR_UNIT_DEVICEID struOutdoorUnit; //ſڻ/Ž豸 - NET_DVR_MANAGE_UNIT_DEVICEID struManageUnit; // - NET_DVR_OUTDOOR_FENCE_DEVICEID struFenceUnit; //Χǽ - NET_DVR_OUTDOOR_UNIT_DEVICEID struVillaOutdoorUnit; //ſڻ - NET_DVR_OUTDOOR_UNIT_DEVICEID struAgainConfirmUnit; //ȷϻ + BYTE byLen[128] ; //联合体大小 + NET_DVR_INDOOR_UNIT_DEVICEID struIndoorUnit; //室内机 + NET_DVR_OUTDOOR_UNIT_DEVICEID struOutdoorUnit; //门口机/门禁智能设备 + NET_DVR_MANAGE_UNIT_DEVICEID struManageUnit; //管理机 + NET_DVR_OUTDOOR_FENCE_DEVICEID struFenceUnit; //围墙机 + NET_DVR_OUTDOOR_UNIT_DEVICEID struVillaOutdoorUnit; //别墅门口机 + NET_DVR_OUTDOOR_UNIT_DEVICEID struAgainConfirmUnit; //二次确认机 }NET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION,*LPNET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION; -//豸Ųṹ +//设备编号参数结构体 typedef struct tagNET_DVR_VIDEO_INTERCOM_DEVICEID_CFG { - DWORD dwSize; //ṹС - BYTE byUnitType; //豸ͣ1-ſڻ2- 4-Χǽ,5-ſڻ6-ȷϻ7-Ž豸,8-4200ͻ, 9-APP,10-նˣ11-IPC豸12-豸,13-ģڻ - BYTE byIsAutoReg; //ǷԶעᣬ0-1- - BYTE byRes1[2]; // - NET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION uVideoIntercomUnit; //ȡֵοbyUnitType - BYTE byRes2[128]; // + DWORD dwSize; //结构体大小 + BYTE byUnitType; //设备类型,1-门口机,2-管理机 4-围墙机,5-别墅门口机,6-二次确认机,7-门禁智能设备,8-4200客户端, 9-APP,10-交互终端,11-IPC设备,12-解码器设备,13-模拟室内机 + BYTE byIsAutoReg; //是否自动注册,0-否,1-是 + BYTE byRes1[2]; //保留 + NET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION uVideoIntercomUnit; //取值参考byUnitType + BYTE byRes2[128]; //保留 }NET_DVR_VIDEO_INTERCOM_DEVICEID_CFG,*LPNET_DVR_VIDEO_INTERCOM_DEVICEID_CFG; -//Ȩ +//权限密码类型 typedef enum tagPRIVILEGE_PASSWORD_TYPE_ENUM { - ENUM_PRIVILEGE_PASSWORD_ENGINEERING = 1, // - ENUM_PRIVILEGE_PASSWORD_SETUPALARM = 2, /// - ENUM_PRIVILEGE_PASSWORD_HOUSEHOLDER_UNLOCK = 3, // - ENUM_PRIVILEGE_PASSWORD_ANTI_HIJACKING = 4, //ٳ - ENUM_PRIVILEGE_PASSWORD_PUBLIC1 = 5, //1 - ENUM_PRIVILEGE_PASSWORD_PUBLIC2 = 6, //2 - ENUM_PRIVILEGE_PASSWORD_PUBLIC3 = 7, //3 - ENUM_PRIVILEGE_PASSWORD_SENDCARD = 8// + ENUM_PRIVILEGE_PASSWORD_ENGINEERING = 1, //工程密码 + ENUM_PRIVILEGE_PASSWORD_SETUPALARM = 2, //布/撤防密码 + ENUM_PRIVILEGE_PASSWORD_HOUSEHOLDER_UNLOCK = 3, //户主开锁密码 + ENUM_PRIVILEGE_PASSWORD_ANTI_HIJACKING = 4, //防劫持密码 + ENUM_PRIVILEGE_PASSWORD_PUBLIC1 = 5, //公共密码1 + ENUM_PRIVILEGE_PASSWORD_PUBLIC2 = 6, //公共密码2 + ENUM_PRIVILEGE_PASSWORD_PUBLIC3 = 7, //公共密码3 + ENUM_PRIVILEGE_PASSWORD_SENDCARD = 8//发卡密码 }PRIVILEGE_PASSWORD_TYPE_ENUM; -//ȨϢ +//权限密码信息 typedef struct tagNET_DVR_PRIVILEGE_PASSWORD_CFG { - DWORD dwSize; //ṹС - BYTE byPwdType; //ͣοPRIVILEGE_PASSWORD_TYPE_ENUM - BYTE byRes1[3]; // - BYTE byOldPassword[PASSWD_LEN]; // - BYTE byNewPassword[PASSWD_LEN]; // - BYTE byRes2[128]; // + DWORD dwSize; //结构体大小 + BYTE byPwdType; //密码类型,参考PRIVILEGE_PASSWORD_TYPE_ENUM + BYTE byRes1[3]; //保留 + BYTE byOldPassword[PASSWD_LEN]; //旧密码 + BYTE byNewPassword[PASSWD_LEN]; //新密码 + BYTE byRes2[128]; //保留 }NET_DVR_PRIVILEGE_PASSWORD_CFG,*LPNET_DVR_PRIVILEGE_PASSWORD_CFG; -//ڻʱ +//室内机操作时间配置 typedef struct tagNET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG { - DWORD dwMaxMonitoringTime; //ʾʱ䣬Χ[10,60] - DWORD dwMaxRingTime; //ʱ䣬Χ[15,60] - DWORD dwCallForwardingTime; //תƳʱʱ䣬Χ[0,20] - DWORD dwRingDurationTime; //峬ʱʱ䣬Χ[30,60]룬Ĭ30 - BYTE byRes[112];// + DWORD dwMaxMonitoringTime; //最大显示时间,范围[10,60]秒 + DWORD dwMaxRingTime; //最大振铃时间,范围[15,60]秒 + DWORD dwCallForwardingTime; //呼叫转移超时时间,范围[0,20]秒 + DWORD dwRingDurationTime; //响铃超时时间,范围[30,60]秒,默认30秒 + BYTE byRes[112];//保留 }NET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG,*LPNET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG; -//ʱ +//室外机操作时间配置 typedef struct tagNET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG { - DWORD dwMaxMessageTime; //ʱ䣬Χ[30,60] - DWORD dwMaxTalkTime; //ͨʱ䣬Χ[90,120] - BYTE byRes[120]; // + DWORD dwMaxMessageTime; //最大留言时间,范围[30,60]秒 + DWORD dwMaxTalkTime; //最大通话时间,范围[90,120]秒 + BYTE byRes[120]; //保留 }NET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG,*LPNET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG; -//ʱ +//管理机操作时间配置 typedef struct tagNET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG { - DWORD dwMaxMonitoringTime; //ʾʱ䣬Χ[10,60] - DWORD dwMaxRingTime; //ʱ䣬Χ[15,60] - DWORD dwMaxTalkTime; //ͨʱ䣬λs - BYTE byRes[116]; // + DWORD dwMaxMonitoringTime; //最大显示时间,范围[10,60]秒 + DWORD dwMaxRingTime; //最大振铃时间,范围[15,60]秒 + DWORD dwMaxTalkTime; //最大通话时间,单位s + BYTE byRes[116]; //保留 }NET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG,*LPNET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG; -//ӶԽʱ +//可视对讲操作时间联合体 typedef union tagNET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION { - BYTE byLen[128]; //С - NET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG struIndoorUnit; //ڻ - NET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG struOutdoorUnit; //ſڻ/Χǽ/ſڻ/ȷϻ - NET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG struManageUnit; // + BYTE byLen[128]; //联合体大小 + NET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG struIndoorUnit; //室内机 + NET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG struOutdoorUnit; //门口机/围墙机/别墅门口机/二次确认机 + NET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG struManageUnit; //管理机 }NET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION,*LPNET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION; -//ӶԽʱ +//可视对讲操作时间配置 typedef struct tagNET_DVR_VIDEO_INTERCOM_OPERATION_TIME_CFG { - DWORD dwSize; //ṹС - BYTE byUnitType; //豸ͣ1-ſڻ2-3-ڻ4-Χǽ5-ſڻ6-ȷϻ - BYTE byRes1[3]; // - NET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION uVideoIntercomUnit; //ȡֵοbyUnitType - BYTE byRes2[128]; // + DWORD dwSize; //结构体大小 + BYTE byUnitType; //设备类型,1-门口机,2-管理机,3-室内机,4-围墙机,5-别墅门口机,6-二次确认机 + BYTE byRes1[3]; //保留 + NET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION uVideoIntercomUnit; //取值参考byUnitType + BYTE byRes2[128]; //保留 }NET_DVR_VIDEO_INTERCOM_OPERATION_TIME_CFG,*LPNET_DVR_VIDEO_INTERCOM_OPERATION_TIME_CFG; -//ڻ豸 +//室内机关联的网络设备 typedef struct tagNET_DVR_INDOOR_UNIT_RELATEDEV { - NET_DVR_IPADDR struOutdoorUnit; //ſڻIP - NET_DVR_IPADDR struManageUnit; //IP - NET_DVR_IPADDR struSIPServer; //SIPIP - NET_DVR_IPADDR struAgainUnit; //ȷϻIP - BYTE byOutDoorType; //ſڻͣ01-Ԫſڻ2-ſڻ - BYTE byOutInConnectMode; //ſڻڷֻģʽ1-ſڻڷֻͬһ,2-ſڻڷֻͬ - BYTE byIndoorConnectMode; //ڷֻģʽ1-ͨ2-ͨ + NET_DVR_IPADDR struOutdoorUnit; //主门口机IP + NET_DVR_IPADDR struManageUnit; //管理机IP + NET_DVR_IPADDR struSIPServer; //SIP服务器IP + NET_DVR_IPADDR struAgainUnit; //二次确认机IP + BYTE byOutDoorType; //主门口机类型,0保留,1-主单元门口机,2-主别墅门口机 + BYTE byOutInConnectMode; //门口机与室内分机组网模式:1-门口机与室内分机同一局域网,2-门口机与室内分机不同局域网; + BYTE byIndoorConnectMode; //室内主机与室内分机组网模式:1-通过无线网卡、2-通过有线网卡; BYTE byRes1; - NET_DVR_IPADDR struIndoorUnit; //IP - BYTE byManageCenterID[32]; //׼sipģʽʹãID֧֣ĸ@. - BYTE byRes[268]; // + NET_DVR_IPADDR struIndoorUnit; //室内主机IP + BYTE byManageCenterID[32]; //标准sip模式下使用,管理中心ID,支持数字,字母,@和. + BYTE byRes[268]; //保留 }NET_DVR_INDOOR_UNIT_RELATEDEV,*LPNET_DVR_INDOOR_UNIT_RELATEDEV; -//ſڻ豸 +//门口机相关联的网络设备 typedef struct tagNET_DVR_OUTDOOR_UNIT_RELATEDEV { - NET_DVR_IPADDR struMainOutdoorUnit; //ſڻIPſڻʱЧ - NET_DVR_IPADDR struManageUnit; //IP - NET_DVR_IPADDR struSIPServer; //SIPIPſڻʱЧ - BYTE byManageCenterID[32]; //׼sipģʽʹãID֧֣ĸ@. - BYTE byRes[560]; // + NET_DVR_IPADDR struMainOutdoorUnit; //主门口机IP,副门口机时有效 + NET_DVR_IPADDR struManageUnit; //管理机IP + NET_DVR_IPADDR struSIPServer; //SIP服务器IP,副门口机时无效 + BYTE byManageCenterID[32]; //标准sip模式下使用,管理中心ID,支持数字,字母,@和. + BYTE byRes[560]; //保留 }NET_DVR_OUTDOOR_UNIT_RELATEDEV,*LPNET_DVR_OUTDOOR_UNIT_RELATEDEV; -//ȷϻ豸 +//二次确认机相关联的网络设备 typedef struct tagNET_DVR_AGAIN_RELATEDEV { - NET_DVR_IPADDR struSIPServer; //SIPIP - NET_DVR_IPADDR struCenterAddr; //ƽ̨IP - WORD wCenterPort; //ƽ̨˿ + NET_DVR_IPADDR struSIPServer; //SIP服务器IP + NET_DVR_IPADDR struCenterAddr; //中心平台IP + WORD wCenterPort; //中心平台端口 BYTE byRes1[2]; - NET_DVR_IPADDR struIndoorUnit; //IP - NET_DVR_IPADDR struAgainAddr; //ȷϻIPȷϻøֶΣ - BYTE byRes[444];// + NET_DVR_IPADDR struIndoorUnit; //室内主机IP + NET_DVR_IPADDR struAgainAddr; //主二次确认机IP(副二次确认机配置该字段) + BYTE byRes[444];//保留 }NET_DVR_AGAIN_RELATEDEV,*LPNET_DVR_AGAIN_RELATEDEV; -//豸 +//管理机相关联的网络设备 typedef struct tagNET_DVR_MANAGE_UNIT_RELATEDEV { - NET_DVR_IPADDR struSIPServer; //SIPIP - BYTE byRes[880]; // + NET_DVR_IPADDR struSIPServer; //SIP服务器IP + BYTE byRes[880]; //保留 }NET_DVR_MANAGE_UNIT_RELATEDEV,*LPNET_DVR_MANAGE_UNIT_RELATEDEV; -//ӶԽ豸ṹ +//可视对讲关联网络设备参数结构体 typedef union tagNET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION { - DWORD dwRes[256] ; //С - NET_DVR_INDOOR_UNIT_RELATEDEV struIndoorUnit; //ڻ - NET_DVR_OUTDOOR_UNIT_RELATEDEV struMainOutdoorUnit; //ſڻ/Χǽ/Ž豸 - NET_DVR_MANAGE_UNIT_RELATEDEV struManageUnit; // - NET_DVR_OUTDOOR_UNIT_RELATEDEV struVillaUnit; //ſڻ - NET_DVR_AGAIN_RELATEDEV struAgainUnit; //ȷϻ + DWORD dwRes[256] ; //联合体大小 + NET_DVR_INDOOR_UNIT_RELATEDEV struIndoorUnit; //室内机 + NET_DVR_OUTDOOR_UNIT_RELATEDEV struMainOutdoorUnit; //门口机/围墙机/门禁智能设备 + NET_DVR_MANAGE_UNIT_RELATEDEV struManageUnit; //管理机 + NET_DVR_OUTDOOR_UNIT_RELATEDEV struVillaUnit; //别墅门口机 + NET_DVR_AGAIN_RELATEDEV struAgainUnit; //二次确认机 }NET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION,*LPNET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION; -//豸ṹ +//关联网络设备参数结构体 typedef struct tagNET_DVR_VIDEO_INTERCOM_RELATEDEV_CFG { - DWORD dwSize; //ṹС - BYTE byUnitType; //豸ͣ1-ſڻ2-3-ڻ4-Χǽ5-ſڻ6-ȷϻ7-Ž豸 - BYTE byRes1[3]; // - NET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION uVideoIntercomUnit; //ȡֵοbyUnitType - BYTE byRes2[128]; // + DWORD dwSize; //结构体大小 + BYTE byUnitType; //设备类型,1-门口机,2-管理机,3-室内机,4-围墙机,5-别墅门口机,6-二次确认机,7-门禁智能设备 + BYTE byRes1[3]; //保留 + NET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION uVideoIntercomUnit; //取值参考byUnitType + BYTE byRes2[128]; //保留 }NET_DVR_VIDEO_INTERCOM_RELATEDEV_CFG,*LPNET_DVR_VIDEO_INTERCOM_RELATEDEV_CFG; typedef struct tagNET_DVR_CONTROL_GATEWAY { - DWORD dwSize; //ṹС - DWORD dwGatewayIndex; //Žţ1ʼ - BYTE byCommand; //0-رգ1-򿪣2-ͨ״̬3-ָͨ״̬ - BYTE byLockType; //ͣ0-ͨǰĬ϶Ϊ0,1- - WORD wLockID; //ID1ʼԶ̿ſڻʱ0ʾſڻϽӵ1ʾӿϽӵ - BYTE byControlSrc[NAME_LEN]; //ԴϢ - BYTE byControlType; //ͣ1-ʾ2-ͨ + DWORD dwSize; //结构体大小 + DWORD dwGatewayIndex; //门禁序号,从1开始 + BYTE byCommand; //操作命令,0-关闭,1-打开,2-常开(通道状态),3-恢复(普通状态) + BYTE byLockType; //锁类型,0-普通(以前默认都为0),1-智能锁 + WORD wLockID; //锁ID,从1开始(远程开门口机锁时,0表示门口机本机控制器上接的锁、1表示外接控制器上接的锁) + BYTE byControlSrc[NAME_LEN]; //操作发起源信息 + BYTE byControlType; //开锁类型,1-显示,2-通话 BYTE byRes3[3]; - BYTE byPassword[PASSWD_LEN]; //룬byLockTypeΪʱЧ - BYTE byRes2[108]; // + BYTE byPassword[PASSWD_LEN]; //锁密码,当byLockType为智能锁时有效 + BYTE byRes2[108]; //保留 }NET_DVR_CONTROL_GATEWAY,*LPNET_DVR_CONTROL_GATEWAY; -//ͼƬϢṹ +//公告图片信息结构体 typedef struct tagNET_DVR_NOTICE_PIC { - BYTE* pPicData; //ͼƬָ - DWORD dwPicDataLen; //ͼƬݳ - BYTE byRes[32]; // + BYTE* pPicData; //图片指针 + DWORD dwPicDataLen; //图片数据长度 + BYTE byRes[32]; //保留 }NET_DVR_NOTICE_PIC,*LPNET_DVR_NOTICE_PIC; -// +//公告数据 typedef struct tagNET_DVR_NOTICE_DATA { - DWORD dwSize; //ṹС - NET_DVR_TIME_EX struTime; //ʱ - BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; // - BYTE byNoticeTheme[MAX_NOTICE_THEME_LEN];// - BYTE byNoticeDetail[MAX_NOTICE_DETAIL_LEN]; // - BYTE byLevel; //ȼ1-Ϣ2-ҵϢ3-Ϣ;4-֪ͨϢ - BYTE byPicNum; //ͼƬ - BYTE byRes1[2]; // - NET_DVR_NOTICE_PIC struNoticePic[MAX_NOTICE_PIC_NUM]; //ͼƬ - BYTE byRes2[128]; // + DWORD dwSize; //结构体大小 + NET_DVR_TIME_EX struTime; //公告时间 + BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; //公告编号 + BYTE byNoticeTheme[MAX_NOTICE_THEME_LEN];//公告主题 + BYTE byNoticeDetail[MAX_NOTICE_DETAIL_LEN]; //公告详情 + BYTE byLevel; //公告等级,1-广告类信息;2-物业信息;3-报警类信息;4-通知类信息 + BYTE byPicNum; //公告图片数量 + BYTE byRes1[2]; //保留 + NET_DVR_NOTICE_PIC struNoticePic[MAX_NOTICE_PIC_NUM]; //公告图片 + BYTE byRes2[128]; //保留 }NET_DVR_NOTICE_DATA,*LPNET_DVR_NOTICE_DATA; -//Ȩ֤ +//操作权限验证参数 typedef struct tagNET_DVR_OPERATION_AUTH { - DWORD dwSize; //ṹС - BYTE byPassword[PASSWD_LEN]; //֤ - BYTE byRes[128]; // + DWORD dwSize; //结构体大小 + BYTE byPassword[PASSWD_LEN]; //验证密码 + BYTE byRes[128]; //保留 }NET_DVR_OPERATION_AUTH,*LPNET_DVR_OPERATION_AUTH; -// +//开锁类型 typedef enum tagUNLOCK_TYPE_ENUM { - ENUM_UNLOCK_PASSWORD = 1, //뿪 - ENUM_UNLOCK_HIJACKING = 2, //ٳֿ - ENUM_UNLOCK_CARD = 3, //ˢ - ENUM_UNLOCK_HOUSEHOLDER = 4, // - ENUM_UNLOCK_CENTER_PLATFORM = 5, //ƽ̨ - ENUM_UNLOCK_BLUETOOTH = 6, // - ENUM_UNLOCK_QR_CODE = 7, //ά뿪 - ENUM_UNLOCK_FACE = 8, // - ENUM_UNLOCK_FINGERPRINT = 9, //ָƿ - ENUM_UNLOCK_DYNAMIC_CODE = 10, //̬Ȩ뿪 - ENUM_UNLOCK_PERSON_VERIFY = 11, //֤ - ENUM_UNLOCK_QR_CODE_V002 = 12, //V002汾ά뿪 - ENUM_UNLOCK_BLUETOOTH_V002 = 13, //V002汾 - ENUM_UNLOCK_PUBLIC = 14, //뿪 - ENUM_UNLOCK__BUTT = 0xff //ѯʱʹ + ENUM_UNLOCK_PASSWORD = 1, //密码开锁 + ENUM_UNLOCK_HIJACKING = 2, //劫持开锁 + ENUM_UNLOCK_CARD = 3, //刷卡开锁 + ENUM_UNLOCK_HOUSEHOLDER = 4, //户主开锁 + ENUM_UNLOCK_CENTER_PLATFORM = 5, //中心平台开锁 + ENUM_UNLOCK_BLUETOOTH = 6, //蓝牙开锁 + ENUM_UNLOCK_QR_CODE = 7, //二维码开锁 + ENUM_UNLOCK_FACE = 8, //人脸开锁 + ENUM_UNLOCK_FINGERPRINT = 9, //指纹开锁 + ENUM_UNLOCK_DYNAMIC_CODE = 10, //动态权限码开锁 + ENUM_UNLOCK_PERSON_VERIFY = 11, //人证开锁 + ENUM_UNLOCK_QR_CODE_V002 = 12, //V002版本二维码开锁 + ENUM_UNLOCK_BLUETOOTH_V002 = 13, //V002版本蓝牙开锁 + ENUM_UNLOCK_PUBLIC = 14, //公共密码开锁 + ENUM_UNLOCK__BUTT = 0xff //查询时使用 }UNLOCK_TYPE_ENUM; -//ͣͲƷȷϣ˶ûʹãʹõDETECTOR_TYPE +//防区类型,和产品线确认,此定义没有使用,使用的是DETECTOR_TYPE // typedef enum tagALARM_ZONE_TYPE_ENUM // { -// ENUM_ALARM_ZONE_SMOKE = 1, //̸ -// ENUM_ALARM_ZONE_GAS = 2, //ú -// ENUM_ALARM_ZONE_INFRARED = 3, // -// ENUM_ALARM_ZONE_MAGNETIC = 4, //Ŵ -// ENUM_ALARM_ZONE_MANUAL = 5 //ֶ +// ENUM_ALARM_ZONE_SMOKE = 1, //烟感 +// ENUM_ALARM_ZONE_GAS = 2, //煤气 +// ENUM_ALARM_ZONE_INFRARED = 3, //红外 +// ENUM_ALARM_ZONE_MAGNETIC = 4, //门磁 +// ENUM_ALARM_ZONE_MANUAL = 5 //手动 // }ALARM_ZONE_TYPE_ENUM; -//¼ +//开锁记录 typedef struct tagNET_DVR_UNLOCK_RECORD_INFO { - BYTE byUnlockType; //ʽοUNLOCK_TYPE_ENUM - BYTE byRes1[3]; // - BYTE byControlSrc[NAME_LEN]; //ԴϢˢʱΪţʱΪөʯAPP˺ţά뿪ʱΪÿ͵ֻţΪ豸 - DWORD dwPicDataLen; //ͼƬݳ - BYTE* pImage; //ͼƬָ - DWORD dwCardUserID; //ֿID - SHORT nFloorNumber;//ˢʱЧΪ¥ - WORD wRoomNumber; //ԴϢˢʱЧΪţ - WORD wLockID; //ſڻ0-ʾϽӵ1-ʾӿϽӵ + BYTE byUnlockType; //开锁方式,参考UNLOCK_TYPE_ENUM + BYTE byRes1[3]; //保留 + BYTE byControlSrc[NAME_LEN]; //操作发起源信息,刷卡开锁时为卡号,蓝牙开锁时为萤石的APP账号,二维码开锁时为访客的手机号,其余情况下为设备编号 + DWORD dwPicDataLen; //图片数据长度 + BYTE* pImage; //图片指针 + DWORD dwCardUserID; //持卡人ID + SHORT nFloorNumber;//刷卡开锁时有效,为楼层号 + WORD wRoomNumber; //操作发起源附加信息,刷卡开锁时有效,为房间号, + WORD wLockID; //(对于门口机,0-表示本机控制器上接的锁、1-表示外接控制器上接的锁) BYTE byRes2[2]; - BYTE byLockName[LOCK_NAME_LEN]; //ˢʱЧƣӦŲ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID - BYTE byMask; //Ƿ֣0-1-δ֪2-δ֣3- - BYTE byRes[135]; // + BYTE byLockName[LOCK_NAME_LEN]; //刷卡开锁时有效,锁名称,对应门参数配置中门名称 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byMask; //是否带口罩:0-保留,1-未知,2-未戴口罩,3-戴口罩 + BYTE byRes[135]; //保留 }NET_DVR_UNLOCK_RECORD_INFO,*LPNET_DVR_UNLOCK_RECORD_INFO; -//ϢĶִ +//公告信息阅读回执 typedef struct tagNET_DVR_NOTICEDATA_RECEIPT_INFO { - BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; // - BYTE byRes[224]; // + BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; //公告编号 + BYTE byRes[224]; //保留 }NET_DVR_NOTICEDATA_RECEIPT_INFO,*LPNET_DVR_NOTICEDATA_RECEIPT_INFO; -//֤¼豸δʵ֣ +//认证记录(设备未实现) typedef struct tagNET_DVR_AUTH_INFO { - BYTE byAuthResult; //֤0-Ч1-֤ɹ2-֤ʧ - BYTE byAuthType; //֤ʽ0-Ч1-ָƣ2-, 3-룬4-ٳ֣5-ˢ,6-,7-ƽ̨,8-,9-ά,10-̬,11-֤ - BYTE byRes1[2]; // - BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; // - DWORD dwPicDataLen; //ͼƬݳȣ֤ʽbyAuthTypeΪʱЧ - BYTE* pImage; //ͼƬָ루֤ʽbyAuthTypeΪʱЧ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN/*32*/]; //ţԱID - BYTE byRes[180]; // + BYTE byAuthResult; //认证结果:0-无效,1-认证成功,2-认证失败 + BYTE byAuthType; //认证方式:0-无效,1-指纹,2-人脸, 3-密码,4-劫持,5-刷卡,6-户主,7-中心平台,8-蓝牙,9-二维码,10-动态密码,11-人证 + BYTE byRes1[2]; //保留 + BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; //卡号 + DWORD dwPicDataLen; //图片数据长度(当认证方式byAuthType为人脸时有效) + BYTE* pImage; //图片指针(当认证方式byAuthType为人脸时有效) + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN/*32*/]; //工号(人员ID + BYTE byRes[180]; //保留 }NET_DVR_AUTH_INFO, *LPNET_DVR_AUTH_INFO; -//Ϣϴ +//车牌信息上传 typedef struct tagNET_DVR_UPLOAD_PLATE_INFO { - char sLicense[MAX_LICENSE_LEN]; //ƺ - BYTE byColor; //ɫοṹVCA_PLATE_COLOR - BYTE byRes[239]; // + char sLicense[MAX_LICENSE_LEN]; //车牌号码 + BYTE byColor; //车牌颜色,参考结构VCA_PLATE_COLOR + BYTE byRes[239]; //保留 }NET_DVR_UPLOAD_PLATE_INFO, *LPNET_DVR_UPLOAD_PLATE_INFO; typedef struct tagNET_DVR_SEND_CARD_INFO { - BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; // - BYTE byRes[224]; // + BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; //卡号 + BYTE byRes[224]; //保留 }NET_DVR_SEND_CARD_INFO, *LPNET_DVR_SEND_CARD_INFO; -//Ŵ״̬ϱ +//门磁状态上报 typedef struct tagNET_DVR_MAGNETIC_DOOR_STATUS { - BYTE byMagneticDoorStatus; //Ŵ״̬ 1- 2-ر - BYTE byRes[255]; // + BYTE byMagneticDoorStatus; //门磁状态 1-打开 2-关闭 + BYTE byRes[255]; //保留 } NET_DVR_MAGNETIC_DOOR_STATUS, *LPNET_DVR_MAGNETIC_DOOR_STATUS; -//ӶԽ¼¼Ϣ +//可视对讲事件记录信息联合体 typedef union tagNET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON { - BYTE byLen[256]; //С - NET_DVR_UNLOCK_RECORD_INFO struUnlockRecord; //¼ - NET_DVR_NOTICEDATA_RECEIPT_INFO struNoticedataReceipt; //ϢĶִ - NET_DVR_AUTH_INFO struAuthInfo; //֤¼豸δʵ֣ - NET_DVR_UPLOAD_PLATE_INFO struUploadPlateInfo; //Ϣϴ - NET_DVR_SEND_CARD_INFO struSendCardInfo; //ſڻ,Ӧ豸ڷ״̬ˢʱϴ¼ - NET_DVR_MAGNETIC_DOOR_STATUS struMagneticDoorStatus; //Ŵ״̬ + BYTE byLen[256]; //联合体大小 + NET_DVR_UNLOCK_RECORD_INFO struUnlockRecord; //开锁记录 + NET_DVR_NOTICEDATA_RECEIPT_INFO struNoticedataReceipt; //公告信息阅读回执 + NET_DVR_AUTH_INFO struAuthInfo; //认证记录(设备未实现) + NET_DVR_UPLOAD_PLATE_INFO struUploadPlateInfo; //车牌信息上传 + NET_DVR_SEND_CARD_INFO struSendCardInfo; //门口机发卡,对应设备处于发卡状态,刷卡时上传该事件 + NET_DVR_MAGNETIC_DOOR_STATUS struMagneticDoorStatus; //门磁状态 }NET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON,*LPNET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON; -//ӶԽ¼¼ +//可视对讲事件记录 typedef struct tagNET_DVR_VIDEO_INTERCOM_EVENT { - DWORD dwSize; //ṹС - NET_DVR_TIME_EX struTime; //ʱ - BYTE byDevNumber[MAX_DEV_NUMBER_LEN]; //豸 - BYTE byEventType; //¼Ϣͣ1-¼2-ϢĶִ3-֤¼4-Ϣϴ5Ƿˢ¼6-ſڻ¼(ҪſڻܣˢʱŻϴ¼)7-ּ¼8-Ŵ״̬¼ - BYTE byPicTransType; //ͼƬݴ䷽ʽ: 0-ƣ1-url - BYTE byRes1[2]; // - NET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON uEventInfo; //¼ϢݲοbyEventTypeȡֵ - DWORD dwIOTChannelNo; //IOTͨ - BYTE byRes2[252]; // + DWORD dwSize; //结构体大小 + NET_DVR_TIME_EX struTime; //时间 + BYTE byDevNumber[MAX_DEV_NUMBER_LEN]; //设备编号 + BYTE byEventType; //事件信息类型,1-开锁记录,2-公告信息阅读回执,3-认证记录,4-车牌信息上传,5非法卡刷卡事件,6-门口机发卡记录(需要启动门口机发卡功能,刷卡时才会上传该事件),7-口罩检测事件,8-门磁状态记录 + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + BYTE byRes1[2]; //保留 + NET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON uEventInfo; //事件信息,具体内容参考byEventType取值 + DWORD dwIOTChannelNo; //IOT通道号 + BYTE byRes2[252]; //保留 }NET_DVR_VIDEO_INTERCOM_EVENT,*LPNET_DVR_VIDEO_INTERCOM_EVENT; -//Ϣ +//防区报警信息 typedef struct tagNET_DVR_ZONE_ALARM_INFO { - BYTE byZoneName[NAME_LEN]; // - DWORD dwZonendex; // - BYTE byZoneType; //ͣοDETECTOR_TYPE - BYTE byRes[219]; // + BYTE byZoneName[NAME_LEN]; //防区名称 + DWORD dwZonendex; //防区号 + BYTE byZoneType; //防区类型,参考DETECTOR_TYPE + BYTE byRes[219]; //保留 }NET_DVR_ZONE_ALARM_INFO,*LPNET_DVR_ZONE_ALARM_INFO; -//Ϣ +//锁报警信息 typedef struct tagNET_DVR_LOCK_ALARM_INFO { - DWORD dwLockID; //ID0ʼ - BYTE byRes[252]; //ֽ + DWORD dwLockID; //锁ID,从0开始 + BYTE byRes[252]; //保留字节 }NET_DVR_LOCK_ALARM_INFO, *LPNET_DVR_LOCK_ALARM_INFO; typedef union tagNET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION { - BYTE byLen[256]; //С - NET_DVR_ZONE_ALARM_INFO struZoneAlarm; // - NET_DVR_LOCK_ALARM_INFO struLockAlarm; //Ϣ + BYTE byLen[256]; //联合体大小 + NET_DVR_ZONE_ALARM_INFO struZoneAlarm; //防区报警 + NET_DVR_LOCK_ALARM_INFO struLockAlarm; //锁报警信息 }NET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION,*LPNET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION; -//ӶԽϢ +//可视对讲报警信息联合体 typedef struct tagNET_DVR_VIDEO_INTERCOM_ALARM { - DWORD dwSize; //ṹС - NET_DVR_TIME_EX struTime; //ʱ - BYTE byDevNumber[MAX_DEV_NUMBER_LEN]; //豸 - BYTE byAlarmType; //ͣ1-2-𱨾3-ٳֱ4-뿪ʧܱ,5-û6-û 7-SOS 8-ͨԽ9-ٳָƱ 10-ٳ뱨11-ű12-13-㱨 ,14-ֹ,15- - //16-Žȫģ𱨾17-豸ʼԽ18-豸ֹͣԽ, 19-ȡSOS ,20-δֱ 21-뱨 22-ָ 23-Ŵű򿪣24-䱨25-ȡ䱨26-ҩѣ27-±28-ȡҩ - BYTE byRes1[3]; // - NET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION uAlarmInfo; //ϢݲοֶbyAlarmTypeȡֵ - WORD wLockID; //0-ʾſڻϽӵ1-ʾӿϽӵΪ56ʱЧ - BYTE byRes3[2]; // - DWORD dwIOTChannelNo; //IOTͨ - BYTE byRes2[248]; // + DWORD dwSize; //结构体大小 + NET_DVR_TIME_EX struTime; //报警时间 + BYTE byDevNumber[MAX_DEV_NUMBER_LEN]; //设备编号 + BYTE byAlarmType; //报警类型,1-防区报警,2-防拆报警,3-劫持报警,4-多次密码开锁失败报警,5-门没开,6-门没关 7-SOS 、8-通话对讲,9-智能锁劫持指纹报警, 10-智能锁劫持密码报警,11-智能锁撬门报警,12-智能锁门锁锁定报警,13-智能锁电量不足报警 ,14-禁止名单报警,15-智能锁掉线 + //,16-门禁安全模块防拆报警,17-设备开始对讲,18-设备停止对讲, 19-取消SOS ,20-未佩戴口罩报警 21-消防输入报警 22-消防输入恢复 23-门磁被外力打开,24-卫生间报警,25-取消卫生间报警,26-换药提醒,27-人脸测温报警,28-取消换药提醒 + BYTE byRes1[3]; //保留 + NET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION uAlarmInfo; //报警信息,具体内容参考字段byAlarmType取值 + WORD wLockID; //(0-表示门口机本机控制器上接的锁、1-表示外接控制器上接的锁)(报警类型为5和6时有效) + BYTE byRes3[2]; //保留 + DWORD dwIOTChannelNo; //IOT通道号 + BYTE byRes2[248]; //保留 }NET_DVR_VIDEO_INTERCOM_ALARM,*LPNET_DVR_VIDEO_INTERCOM_ALARM; typedef struct tagNET_DVR_PEOPLE_REGION { - BYTE byID;//ID - BYTE byNumber;//еԱ 0-ʾûԱ - BYTE byDressType;//װ 0-δ֪1-ۡ2-¡3-Ʒ + BYTE byID;//区域ID + BYTE byNumber;//区域中的人员数量 0-表示区域中没有人员 + BYTE byDressType;//着装类型 0-未知,1-法袍、2-徽章、3-制服 BYTE byRes; NET_VCA_RECT struRegion; - DWORD dwPicLen;//ͼƬ (0ʾûг) - char* pPicBuffer;//ͼƬ - BYTE byRes1[24];//(Ԥչ) + DWORD dwPicLen;//检测图片长度 (0表示没有长度) + char* pPicBuffer;//具体的图片数据 + BYTE byRes1[24];//保留(预留后期扩展区域属性) }NET_DVR_PEOPLE_REGION,*LPNET_DVR_PEOPLE_REGION; typedef struct tagNET_DVR_PEOPLE_DETECTION_RESULT { DWORD dwSize; - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo;//ǰ豸Ϣ + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo;//前端设备信息 NET_DVR_PEOPLE_REGION struPeopleRegion[MAX_PEOPLE_DETECTION_NUM/*8*/]; - /*Աⱨ - 0- δ֪ - 1- ѶڴܶŹ - 2- ѶԱ˯ⱨ - 3- ѶԱⱨ - 4- Ա⣩ + /*人员检测报警类型 + (0- 未知, + (1- 审讯室内打架斗殴报警 + (2- 审讯人员瞌睡检测报警 + (3- 被审讯人员起身检测报警 + (4- 审判人员检测) */ BYTE byPeopleAlarmType; BYTE byRes[255]; @@ -40409,65 +40409,65 @@ typedef struct tagNET_DVR_PEOPLE_DETECTION_RESULT typedef struct tagNET_DVR_SUPPLEMENTLIGHT { - BYTE byEnable;//ʹ 0-أ1- - BYTE byMode;//ģʽ 0-Զ1-ʱ - BYTE byHighBeamBrightness;//Զ[0,10] - BYTE byLowBeamBrightness;//[0,10] - NET_DVR_SCHEDULE_DAYTIME struSchedTime;//ʱʱ - WORD wFilteringTime;//ʱ(s)[0,120] - BYTE byBrightness;//[0,10]ָ֧òʱ byHighBeamBrightnessbyLowBeamBrightnessЧ - BYTE bySensitivity;//[0,7],Ĭ4byModeΪԶʱЧ - BYTE byBrightnessRegulatMode;// ȵģʽ0-ֶ1-ԶΪԶʱbyBrightnessЧ - BYTE byMaxBrightness;//ȣȵģʽΪԶʱЧ[0,100]Ĭ50 + BYTE byEnable;//使能 0-关,1-开 + BYTE byMode;//补光灯模式 0-自动,1-定时 + BYTE byHighBeamBrightness;//远光灯亮度[0,10] + BYTE byLowBeamBrightness;//近光灯亮度[0,10] + NET_DVR_SCHEDULE_DAYTIME struSchedTime;//定时时间段 + WORD wFilteringTime;//过滤时间(s)[0,120] + BYTE byBrightness;//补光灯亮度[0,10](当支持该参数时, byHighBeamBrightness、byLowBeamBrightness不生效) + BYTE bySensitivity;//补光灯灵敏度[0,7],默认4(当byMode为自动时生效) + BYTE byBrightnessRegulatMode;// 亮度调节模式,0-手动,1-自动(当为自动时byBrightness不生效) + BYTE byMaxBrightness;//补光灯最大亮度(仅亮度调节模式为自动时生效),[0,100],默认50 BYTE byRes[58]; }NET_DVR_SUPPLEMENTLIGHT,*LPNET_DVR_SUPPLEMENTLIGHT; typedef struct tagNET_DVR_EXTERNALDEVICE { - DWORD dwSize;//ṹС - NET_DVR_SUPPLEMENTLIGHT struSupplementLight;//ƽṹϢ + DWORD dwSize;//结构体大小 + NET_DVR_SUPPLEMENTLIGHT struSupplementLight;//补光灯结构信息 BYTE byRes[512]; }NET_DVR_EXTERNALDEVICE,*LPNET_DVR_EXTERNALDEVICE; typedef struct tagNET_DVR_TEMPERATURE_TRIGGER_COND { - DWORD dwSize;//ṹС - DWORD dwChan;//ͨ - DWORD dwPreset;//Ԥõ + DWORD dwSize;//结构体大小 + DWORD dwChan;//通道号 + DWORD dwPreset;//预置点号 BYTE byRes[256]; }NET_DVR_TEMPERATURE_TRIGGER_COND, *LPNET_DVR_TEMPERATURE_TRIGGER_COND; -//(֧֣ʵ֣豸ڲ) +//(球机支持,软件实现,补光灯是设计在设备内部的) typedef struct tagNET_DVR_BUILTIN_SUPPLEMENTLIGHT { - DWORD dwSize;//ṹС - BYTE byMode;//ģʽ 0-ʱ1-2-رգ3-Զǹ㷨ʶ - BYTE byBrightnessLimit;//[0,100] - BYTE bySupplementLightMode;//,0~׹ģʽ,1~ģʽ - BYTE byMixedLightRegulatMode;//ϲȵģʽ,0~Զ,1~ֶ,bySupplementLightMode = 1ʱЧ - BYTE byLrLightBrightness;//ȿ[0,100],byMixedLightRegulatMode = 1ʱЧ - BYTE byHighLrLightBrightness;// Զ[0,100],byMixedLightRegulatMode = 1ʱЧ - BYTE byHighBrightnessLimit;// Զ׹[0,100],byMixedLightRegulatMode = 1ʱЧ - BYTE byLowLrLightBrightness;// [0,100],byMixedLightRegulatMode = 1ʱЧ - NET_DVR_SCHEDULE_DAYTIME struSchedTime;//ʱʱ - BYTE byLowBrightnessLimit;//׹[0,100],byMixedLightRegulatMode = 1ʱЧ - BYTE byWhiteLightBrightness;// ׹ - BYTE byIrLightbrightnessLimit;//, - BYTE byWhiteLightbrightnessLimit;//,׹ + DWORD dwSize;//结构体大小 + BYTE byMode;//补光灯模式 0-定时,1-开启,2-关闭,3-自动(非光敏,算法画面识别) + BYTE byBrightnessLimit;//亮度限制[0,100] + BYTE bySupplementLightMode;//补光灯类型,0~白光模式,1~混合模式 + BYTE byMixedLightRegulatMode;//混合补光灯亮度调节模式,0~自动,1~手动,当bySupplementLightMode = 1时生效 + BYTE byLrLightBrightness;//红外亮度控制[0,100],当byMixedLightRegulatMode = 1时生效。 + BYTE byHighLrLightBrightness;// 远光红外光亮度配置[0,100],当byMixedLightRegulatMode = 1时生效 + BYTE byHighBrightnessLimit;// 远光白光亮度配置[0,100],当byMixedLightRegulatMode = 1时生效 + BYTE byLowLrLightBrightness;// 近光红外光亮度配置[0,100],当byMixedLightRegulatMode = 1时生效 + NET_DVR_SCHEDULE_DAYTIME struSchedTime;//定时时间段 + BYTE byLowBrightnessLimit;//近光白光亮度配置[0,100],当byMixedLightRegulatMode = 1时生效 + BYTE byWhiteLightBrightness;// 白光灯亮度 + BYTE byIrLightbrightnessLimit;//混光球机,红外亮度限制 + BYTE byWhiteLightbrightnessLimit;//混光球机,白光亮度限制 BYTE byRes1[252]; }NET_DVR_BUILTIN_SUPPLEMENTLIGHT,*LPNET_DVR_BUILTIN_SUPPLEMENTLIGHT; typedef struct tagNET_DVR_OIS_CFG { - DWORD dwSize;//ṹС - BYTE byMode; //Ƿѧ0-رգ1-ͨ2-ר - BYTE byOISLevel; //ѧȼ0-ͣ1-У2- - BYTE byOISSensitivity;//ѧȣ0-ͣ1-У2- + DWORD dwSize;//结构体大小 + BYTE byMode; //是否光学防抖:0-关闭,1-普通,2-专家 + BYTE byOISLevel; //光学防抖等级,0-低,1-中,2-高 + BYTE byOISSensitivity;//光学防抖灵敏度,0-低,1-中,2-高 BYTE byRes[125]; }NET_DVR_OIS_CFG, *LPNET_DVR_OIS_CFG; typedef struct tagNET_DVR_MACFILTER_CFG { - DWORD dwSize;//ṹС - BYTE byEnabled; //ǷMACַˣ0-1- - BYTE byPermissionType; //MACַͣ0-ֹ1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否开启MAC地址过滤:0-否,1-是 + BYTE byPermissionType; //MAC地址过滤类型,0-禁止,1-允许 BYTE byRes1[2]; BYTE szMacAddress[MAC_ADDRESS_NUM][MACADDR_LEN]; BYTE byRes[128]; @@ -40475,18 +40475,18 @@ typedef struct tagNET_DVR_MACFILTER_CFG typedef struct tagNET_DVR_EAGLEFOCUSING_SENCE { - BYTE byRuleType;//ͣ0- - BYTE bySceneID;//ID0- 1DZʾ1,2ʾ2 - WORD wRate;//ʣ50-100 - NET_VCA_POLYGON struRegion;// Χ - BYTE bySpotNum;//ڱ궨ȡٸб궨3-5Ĭ3 + BYTE byRuleType;//规则类型,0-线 + BYTE bySceneID;//场景ID,0-保留, 1是表示场景1,2表示场景2,其余依次类推 + WORD wRate;//倍率,50-100 + NET_VCA_POLYGON struRegion;// 区域范围 + BYTE bySpotNum;//在标定线上取多少个点进行标定,3-5,默认3 BYTE byRes[127]; }NET_DVR_EAGLEFOCUSING_SENCE, *LPNET_DVR_EAGLEFOCUSING_SENCE; typedef struct tagNET_DVR_EAGLEFOCUSING_CALCFG { DWORD dwSize; - BYTE byEnabled;//Ƿ궨0-ֹ궨1-ʼ궨ýڵʱЧȡʱЧ + BYTE byEnabled;//是否开启标定:0-中止标定,1-开始标定(该节点设置时有效,获取时无效) BYTE byRes1[3]; NET_DVR_EAGLEFOCUSING_SENCE struEagleFoucsing[MAX_SENCE_NUM/*16*/]; BYTE byRes[512]; @@ -40495,26 +40495,26 @@ typedef struct tagNET_DVR_EAGLEFOCUSING_CALCFG typedef struct tagNET_DVR_EAGLEFOCUSING_CTRL { DWORD dwSize; - BYTE byEnable;//ʹܣ0-رӥӾ۽1-ӥӾ۽ - BYTE byHeightCompensationEnable;//߶Ȳʹ - BYTE byHeightCompensationValue;//߶Ȳֵ, Χ1-5,Ĭ3,һֵ0.5 + BYTE byEnable;//使能:0-关闭鹰视聚焦,1-开启鹰视聚焦 + BYTE byHeightCompensationEnable;//高度补偿使能 + BYTE byHeightCompensationValue;//高度补偿值, 范围1-5,默认3,一个值代表0.5米 BYTE byRes[509]; }NET_DVR_EAGLEFOCUSING_CTRL, *LPNET_DVR_EAGLEFOCUSING_CTRL; typedef struct tagNET_DVR_SMARTCALIBRATION_REGION { - BYTE byRuleID;// + BYTE byRuleID;//规则编号 BYTE byMode;//0-default Mode,1-pix Mode,2-actual Mode - BYTE byStrategy;//˲ 0-area(),1-widthHeight() () - BYTE byPriority;//ȼ 0-Ĭֵ, 1-ͣ2-У3- - NET_VCA_POLYGON struMaxTargetSize;//Ŀߴ - NET_VCA_POLYGON struMinTargetSize;//СĿߴ + BYTE byStrategy;//过滤策略 0-area(面积),1-widthHeight(宽高) () + BYTE byPriority;//优先级 0-默认值, 1-低,2-中,3-高 + NET_VCA_POLYGON struMaxTargetSize;//最大目标尺寸 + NET_VCA_POLYGON struMinTargetSize;//最小目标尺寸 }NET_DVR_SMARTCALIBRATION_REGION, *LPNET_DVR_SMARTCALIBRATION_REGION; #define RULE_REGION_MAX 128 typedef struct tagNET_DVR_SMARTCALIBRATION_CFG { - DWORD dwSize;//ṹС + DWORD dwSize;//结构体大小 /* SmartType: 0-linedetection, 1-fielddetection, @@ -40526,7 +40526,7 @@ typedef struct tagNET_DVR_SMARTCALIBRATION_CFG 7-unattendedBaggage, 8-attendedBaggage */ - BYTE bySmartType;// + BYTE bySmartType;//智能类型 BYTE byRes[3]; NET_DVR_SMARTCALIBRATION_REGION strRegion[RULE_REGION_MAX/*128*/]; BYTE byRes1[128]; @@ -40534,7 +40534,7 @@ typedef struct tagNET_DVR_SMARTCALIBRATION_CFG typedef struct tagNET_DVR_SMARTCALIBRATION_COND { - DWORD dwSize;//ṹС + DWORD dwSize;//结构体大小 /* SmartType: 0-linedetection, 1-fielddetection, @@ -40546,15 +40546,15 @@ typedef struct tagNET_DVR_SMARTCALIBRATION_COND 7-unattendedBaggage, 8-attendedBaggage */ - BYTE bySmartType;// + BYTE bySmartType;//智能类型 BYTE byRes[3]; - DWORD dwChannel;//ͨ + DWORD dwChannel;//通道号 BYTE byRes1[128]; }NET_DVR_SMARTCALIBRATION_COND, *LPNET_DVR_SMARTCALIBRATION_COND; typedef struct tagNET_DVR_SMARTCALIBRATION_REGION_CFG { - DWORD dwSize;//ṹС + DWORD dwSize;//结构体大小 NET_DVR_SMARTCALIBRATION_REGION strRegion[RULE_REGION_MAX/*128*/]; BYTE byRes1[128]; }NET_DVR_SMARTCALIBRATION_REGION_CFG, *LPNET_DVR_SMARTCALIBRATION_REGION_CFG; @@ -40563,31 +40563,31 @@ typedef struct tagNET_DVR_SMARTCALIBRATION_REGION_CFG typedef struct tagNET_DVR_OSD_BATTERY_POWER_CFG { DWORD dwSize; - NET_VCA_POINT struOSDBatteryPower;//ͳʾOSDʾϽ - BYTE byOSDBatteryPower;//صOSDʾʹ, 0-1- + NET_VCA_POINT struOSDBatteryPower;//客流统计显示OSD显示左上角坐标 + BYTE byOSDBatteryPower;//电池电量OSD叠加显示使能, 0-否,1-是 BYTE byRes[63]; }NET_DVR_OSD_BATTERY_POWER_CFG, *LPNET_DVR_OSD_BATTERY_POWER_CFG; -#define CARD_PARAM_CARD_VALID 0x00000001 //ǷЧ -#define CARD_PARAM_VALID 0x00000002 //Чڲ -#define CARD_PARAM_CARD_TYPE 0x00000004 //Ͳ -#define CARD_PARAM_DOOR_RIGHT 0x00000008 //Ȩ޲ -#define CARD_PARAM_LEADER_CARD 0x00000010 //׿ -#define CARD_PARAM_SWIPE_NUM 0x00000020 //ˢ -#define CARD_PARAM_GROUP 0x00000040 //Ⱥ -#define CARD_PARAM_PASSWORD 0x00000080 // -#define CARD_PARAM_RIGHT_PLAN 0x00000100 //Ȩ޼ƻ -#define CARD_PARAM_SWIPED_NUM 0x00000200 //ˢ +#define CARD_PARAM_CARD_VALID 0x00000001 //卡是否有效参数 +#define CARD_PARAM_VALID 0x00000002 //有效期参数 +#define CARD_PARAM_CARD_TYPE 0x00000004 //卡类型参数 +#define CARD_PARAM_DOOR_RIGHT 0x00000008 //门权限参数 +#define CARD_PARAM_LEADER_CARD 0x00000010 //首卡参数 +#define CARD_PARAM_SWIPE_NUM 0x00000020 //最大刷卡次数参数 +#define CARD_PARAM_GROUP 0x00000040 //所属群组参数 +#define CARD_PARAM_PASSWORD 0x00000080 //卡密码参数 +#define CARD_PARAM_RIGHT_PLAN 0x00000100 //卡权限计划参数 +#define CARD_PARAM_SWIPED_NUM 0x00000200 //已刷卡次数 typedef struct tagNET_DVR_VALID_PERIOD_CFG { - BYTE byEnable; //ʹЧڣ0-ʹܣ1ʹ - BYTE byBeginTimeFlag; //Ƿʼʱı־0-ƣ1- - BYTE byEnableTimeFlag; //Ƿֹʱı־0-ƣ1- - BYTE byTimeDurationNo; //Ч,0ʼʱͨSDKøƿʱֻҪЧɣԼ - NET_DVR_TIME_EX struBeginTime; //Чʼʱ - NET_DVR_TIME_EX struEndTime; //Чڽʱ - BYTE byTimeType; //ʱͣ0-豸ʱ䣨Ĭϣ1-UTCʱ䣨struBeginTimestruEndTimeֶЧ + BYTE byEnable; //使能有效期,0-不使能,1使能 + BYTE byBeginTimeFlag; //是否限制起始时间的标志,0-不限制,1-限制 + BYTE byEnableTimeFlag; //是否限制终止时间的标志,0-不限制,1-限制 + BYTE byTimeDurationNo; //有效期索引,从0开始(时间段通过SDK设置给锁,后续在制卡时,只需要传递有效期索引即可,以减少数据量) + NET_DVR_TIME_EX struBeginTime; //有效期起始时间 + NET_DVR_TIME_EX struEndTime; //有效期结束时间 + BYTE byTimeType; //时间类型:0-设备本地时间(默认),1-UTC时间(对于struBeginTime,struEndTime字段有效) BYTE byRes2[31]; }NET_DVR_VALID_PERIOD_CFG, *LPNET_DVR_VALID_PERIOD_CFG; @@ -40595,363 +40595,363 @@ typedef struct tagNET_DVR_CARD_CFG { DWORD dwSize; DWORD dwModifyParamType; - // Ҫ޸ĵĿÿʱЧλʾÿλһֲ1ΪҪ޸ģ0Ϊ޸ - // #define CARD_PARAM_CARD_VALID 0x00000001 //ǷЧ - // #define CARD_PARAM_VALID 0x00000002 //Чڲ - // #define CARD_PARAM_CARD_TYPE 0x00000004 //Ͳ - // #define CARD_PARAM_DOOR_RIGHT 0x00000008 //Ȩ޲ - // #define CARD_PARAM_LEADER_CARD 0x00000010 //׿ - // #define CARD_PARAM_SWIPE_NUM 0x00000020 //ˢ - // #define CARD_PARAM_GROUP 0x00000040 //Ⱥ - // #define CARD_PARAM_PASSWORD 0x00000080 // - // #define CARD_PARAM_RIGHT_PLAN 0x00000100 //Ȩ޼ƻ - // #define CARD_PARAM_SWIPED_NUM 0x00000200 //ˢ - BYTE byCardNo[ACS_CARD_NO_LEN]; // - BYTE byCardValid; //ǷЧ0-Ч1-ЧɾʱΪ0ɾȡʱֶʼΪ1 - BYTE byCardType; //ͣ1-ͨ2-Ⱥ忨3-ֹ4-Ѳ5-вȿ6-7-8-Ĭͨ - BYTE byLeaderCard; //ǷΪ׿1-ǣ0- + // 需要修改的卡参数,设置卡参数时有效,按位表示,每位代表一种参数,1为需要修改,0为不修改 + // #define CARD_PARAM_CARD_VALID 0x00000001 //卡是否有效参数 + // #define CARD_PARAM_VALID 0x00000002 //有效期参数 + // #define CARD_PARAM_CARD_TYPE 0x00000004 //卡类型参数 + // #define CARD_PARAM_DOOR_RIGHT 0x00000008 //门权限参数 + // #define CARD_PARAM_LEADER_CARD 0x00000010 //首卡参数 + // #define CARD_PARAM_SWIPE_NUM 0x00000020 //最大刷卡次数参数 + // #define CARD_PARAM_GROUP 0x00000040 //所属群组参数 + // #define CARD_PARAM_PASSWORD 0x00000080 //卡密码参数 + // #define CARD_PARAM_RIGHT_PLAN 0x00000100 //卡权限计划参数 + // #define CARD_PARAM_SWIPED_NUM 0x00000200 //已刷卡次数 + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byCardValid; //卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1) + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,默认普通卡 + BYTE byLeaderCard; //是否为首卡,1-是,0-否 BYTE byRes1; - DWORD dwDoorRight; //Ȩޣλʾ1ΪȨޣ0ΪȨޣӵλλʾ1-NǷȨ - NET_DVR_VALID_PERIOD_CFG struValid; //Чڲ - DWORD dwBelongGroup; //Ⱥ飬λʾ1-ڣ0-ڣӵλλʾǷȺ1-N - BYTE byCardPassword[CARD_PASSWORD_LEN]; // - BYTE byCardRightPlan[MAX_DOOR_NUM][MAX_CARD_RIGHT_PLAN_NUM]; //Ȩ޼ƻȡֵΪƻģţͬŲͬƻģȨ޻ķʽ - DWORD dwMaxSwipeTime; //ˢ0Ϊ޴ - DWORD dwSwipeTime; //ˢ - WORD wRoomNumber; // - SHORT wFloorNumber; // + DWORD dwDoorRight; //门权限,按位表示,1为有权限,0为无权限,从低位到高位表示对门1-N是否有权限 + NET_DVR_VALID_PERIOD_CFG struValid; //有效期参数 + DWORD dwBelongGroup; //所属群组,按位表示,1-属于,0-不属于,从低位到高位表示是否从属群组1-N + BYTE byCardPassword[CARD_PASSWORD_LEN]; //卡密码 + BYTE byCardRightPlan[MAX_DOOR_NUM][MAX_CARD_RIGHT_PLAN_NUM]; //卡权限计划,取值为计划模板编号,同个门不同计划模板采用权限或的方式处理 + DWORD dwMaxSwipeTime; //最大刷卡次数,0为无次数限制 + DWORD dwSwipeTime; //已刷卡次数 + WORD wRoomNumber; //房间号 + SHORT wFloorNumber; //层号 BYTE byRes2[20]; }NET_DVR_CARD_CFG, *LPNET_DVR_CARD_CFG; typedef struct _NET_DVR_CARD_CFG_COND { DWORD dwSize; - DWORD dwCardNum; //ûȡȡʱΪ0xffffffffʾȡпϢ - BYTE byCheckCardNo; //豸ǷпУ飬0-У飬1-У + DWORD dwCardNum; //设置或获取卡数量,获取时置为0xffffffff表示获取所有卡信息 + BYTE byCheckCardNo; //设备是否进行卡号校验,0-不校验,1-校验 BYTE byRes1[3]; - WORD wLocalControllerID; //͵ؿţʾ͵ؿ·߿0Ž + WORD wLocalControllerID; //就地控制器序号,表示往就地控制器下发离线卡参数,0代表是门禁主机 BYTE byRes2[2]; - DWORD dwLockID; //ID + DWORD dwLockID; //锁ID BYTE byRes3[20]; }NET_DVR_CARD_CFG_COND, *LPNET_DVR_CARD_CFG_COND; typedef struct _NET_DVR_CARD_CFG_SEND_DATA { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; // - DWORD dwCardUserId; //ֿID + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + DWORD dwCardUserId; //持卡人ID BYTE byRes[12]; }NET_DVR_CARD_CFG_SEND_DATA, *LPNET_DVR_CARD_CFG_SEND_DATA; -typedef struct tagNET_DVR_CARD_USER_INFO_CFG /*Ӧýṹ*/ +typedef struct tagNET_DVR_CARD_USER_INFO_CFG /*对应配置结构体*/ { DWORD dwSize; - BYTE sUsername[NAME_LEN]; /* û*/ - BYTE byAssociateNetUser; //û - BYTE byRes2[255]; //byRes2[0]--籨û + BYTE sUsername[NAME_LEN]; /* 用户名*/ + BYTE byAssociateNetUser; //关联的网络用户编号 + BYTE byRes2[255]; //byRes2[0]--网络报警主机用作用户号 }NET_DVR_CARD_USER_INFO_CFG, *LPNET_DVR_CARD_USER_INFO_CFG; -#define ACS_PARAM_DOOR_STATUS_WEEK_PLAN 0x00000001 //״̬ܼƻ -#define ACS_PARAM_VERIFY_WEEK_PALN 0x00000002 //ܼƻ -#define ACS_PARAM_CARD_RIGHT_WEEK_PLAN 0x00000004 //Ȩܼƻ -#define ACS_PARAM_DOOR_STATUS_HOLIDAY_PLAN 0x00000008 //״̬ռƻ -#define ACS_PARAM_VERIFY_HOLIDAY_PALN 0x00000010 //ռƻ -#define ACS_PARAM_CARD_RIGHT_HOLIDAY_PLAN 0x00000020 //Ȩ޼ռƻ -#define ACS_PARAM_DOOR_STATUS_HOLIDAY_GROUP 0x00000040 //״̬ -#define ACS_PARAM_VERIFY_HOLIDAY_GROUP 0x00000080 //֤ʽ -#define ACS_PARAM_CARD_RIGHT_HOLIDAY_GROUP 0x00000100 //Ȩ޼ -#define ACS_PARAM_DOOR_STATUS_PLAN_TEMPLATE 0x00000200 //״̬ƻģ -#define ACS_PARAM_VERIFY_PALN_TEMPLATE 0x00000400 //֤ʽƻģ -#define ACS_PARAM_CARD_RIGHT_PALN_TEMPLATE 0x00000800 //Ȩ޼ƻģ -#define ACS_PARAM_CARD 0x00001000 // -#define ACS_PARAM_GROUP 0x00002000 //Ⱥ -#define ACS_PARAM_ANTI_SNEAK_CFG 0x00004000 //DZز -#define ACS_PAPAM_EVENT_CARD_LINKAGE 0x00008000 //¼ -#define ACS_PAPAM_CARD_PASSWD_CFG 0x00010000 //뿪ʹܲ -#define ACS_PARAM_PERSON_STATISTICS_CFG 0x00020000 //ͳƲ -#define ACS_PARAM_BLOCKLIST_PICTURE 0x00040000 //ֹͼƬ -#define ACS_PARAM_ID_BLOCKLIST 0x00080000 //ֹ֤ -#define ACS_PARAM_EXAM_INFO 0x00100000 //Ϣ -#define ACS_PARAM_EXAMINEE_INFO 0x00200000 //Ϣ -#define ACS_PARAM_FAILED_FACE_INFO 0x00400000 //豸ģʧܼ¼ +#define ACS_PARAM_DOOR_STATUS_WEEK_PLAN 0x00000001 //门状态周计划参数 +#define ACS_PARAM_VERIFY_WEEK_PALN 0x00000002 //读卡器周计划参数 +#define ACS_PARAM_CARD_RIGHT_WEEK_PLAN 0x00000004 //卡权限周计划参数 +#define ACS_PARAM_DOOR_STATUS_HOLIDAY_PLAN 0x00000008 //门状态假日计划参数 +#define ACS_PARAM_VERIFY_HOLIDAY_PALN 0x00000010 //读卡器假日计划参数 +#define ACS_PARAM_CARD_RIGHT_HOLIDAY_PLAN 0x00000020 //卡权限假日计划参数 +#define ACS_PARAM_DOOR_STATUS_HOLIDAY_GROUP 0x00000040 //门状态假日组参数 +#define ACS_PARAM_VERIFY_HOLIDAY_GROUP 0x00000080 //读卡器验证方式假日组参数 +#define ACS_PARAM_CARD_RIGHT_HOLIDAY_GROUP 0x00000100 //卡权限假日组参数 +#define ACS_PARAM_DOOR_STATUS_PLAN_TEMPLATE 0x00000200 //门状态计划模板参数 +#define ACS_PARAM_VERIFY_PALN_TEMPLATE 0x00000400 //读卡器验证方式计划模板参数 +#define ACS_PARAM_CARD_RIGHT_PALN_TEMPLATE 0x00000800 //卡权限计划模板参数 +#define ACS_PARAM_CARD 0x00001000 //卡参数 +#define ACS_PARAM_GROUP 0x00002000 //群组参数 +#define ACS_PARAM_ANTI_SNEAK_CFG 0x00004000 //反潜回参数 +#define ACS_PAPAM_EVENT_CARD_LINKAGE 0x00008000 //事件及卡号联动参数 +#define ACS_PAPAM_CARD_PASSWD_CFG 0x00010000 //密码开门使能参数 +#define ACS_PARAM_PERSON_STATISTICS_CFG 0x00020000 //人数统计参数 +#define ACS_PARAM_BLOCKLIST_PICTURE 0x00040000 //禁止名单图片参数 +#define ACS_PARAM_ID_BLOCKLIST 0x00080000 //身份证禁止名单参数 +#define ACS_PARAM_EXAM_INFO 0x00100000 //考试信息参数 +#define ACS_PARAM_EXAMINEE_INFO 0x00200000 //考生信息参数 +#define ACS_PARAM_FAILED_FACE_INFO 0x00400000 //升级设备人脸建模失败记录 typedef struct tagNET_DVR_ACS_PARAM_TYPE { DWORD dwSize; - DWORD dwParamType; //ͣλʾ - //#define ACS_PARAM_DOOR_STATUS_WEEK_PLAN 0x00000001 //״̬ܼƻ - //#define ACS_PARAM_VERIFY_WEEK_PALN 0x00000002 //ܼƻ - //#define ACS_PARAM_CARD_RIGHT_WEEK_PLAN 0x00000004 //Ȩܼƻ - //#define ACS_PARAM_DOOR_STATUS_HOLIDAY_PLAN 0x00000008 //״̬ռƻ - //#define ACS_PARAM_VERIFY_HOLIDAY_PALN 0x00000010 //ռƻ - //#define ACS_PARAM_CARD_RIGHT_HOLIDAY_PLAN 0x00000020 //Ȩ޼ռƻ - //#define ACS_PARAM_DOOR_STATUS_HOLIDAY_GROUP 0x00000040 //״̬ - //#define ACS_PARAM_VERIFY_HOLIDAY_GROUP 0x00000080 //֤ʽ - //#define ACS_PARAM_CARD_RIGHT_HOLIDAY_GROUP 0x00000100 //Ȩ޼ - //#define ACS_PARAM_DOOR_STATUS_PLAN_TEMPLATE 0x00000200 //״̬ƻģ - //#define ACS_PARAM_VERIFY_PALN_TEMPLATE 0x00000400 //֤ʽƻģ - //#define ACS_PARAM_CARD_RIGHT_PALN_TEMPLATE 0x00000800 //Ȩ޼ƻģ - //#define ACS_PARAM_CARD 0x00001000 // - //#define ACS_PARAM_GROUP 0x00002000 //Ⱥ - //#define ACS_PARAM_ANTI_SNEAK_CFG 0x00004000 //DZز - //#define ACS_PAPAM_EVENT_CARD_LINKAGE 0x00008000 //¼ - //#define ACS_PAPAM_CARD_PASSWD_CFG 0x00010000 //뿪ʹܲ - //#define ACS_PARAM_PERSON_STATISTICS_CFG 0x00020000 //ͳƲ - //#define ACS_PARAM_BLOCKLIST_PICTURE 0x00040000 //ֹͼƬ - //#define ACS_PARAM_ID_BLOCKLIST 0x00080000 //ֹ֤ - //#define ACS_PARAM_EXAM_INFO 0x00100000 //Ϣ - //#define ACS_PARAM_EXAMINEE_INFO 0x00200000 //Ϣ - //#define ACS_PARAM_FAILED_FACE_INFO 0x00400000 //豸ģʧܼ¼ - WORD wLocalControllerID; //͵ؿ[1,64],0Ž + DWORD dwParamType; //参数类型,按位表示 + //#define ACS_PARAM_DOOR_STATUS_WEEK_PLAN 0x00000001 //门状态周计划参数 + //#define ACS_PARAM_VERIFY_WEEK_PALN 0x00000002 //读卡器周计划参数 + //#define ACS_PARAM_CARD_RIGHT_WEEK_PLAN 0x00000004 //卡权限周计划参数 + //#define ACS_PARAM_DOOR_STATUS_HOLIDAY_PLAN 0x00000008 //门状态假日计划参数 + //#define ACS_PARAM_VERIFY_HOLIDAY_PALN 0x00000010 //读卡器假日计划参数 + //#define ACS_PARAM_CARD_RIGHT_HOLIDAY_PLAN 0x00000020 //卡权限假日计划参数 + //#define ACS_PARAM_DOOR_STATUS_HOLIDAY_GROUP 0x00000040 //门状态假日组参数 + //#define ACS_PARAM_VERIFY_HOLIDAY_GROUP 0x00000080 //读卡器验证方式假日组参数 + //#define ACS_PARAM_CARD_RIGHT_HOLIDAY_GROUP 0x00000100 //卡权限假日组参数 + //#define ACS_PARAM_DOOR_STATUS_PLAN_TEMPLATE 0x00000200 //门状态计划模板参数 + //#define ACS_PARAM_VERIFY_PALN_TEMPLATE 0x00000400 //读卡器验证方式计划模板参数 + //#define ACS_PARAM_CARD_RIGHT_PALN_TEMPLATE 0x00000800 //卡权限计划模板参数 + //#define ACS_PARAM_CARD 0x00001000 //卡参数 + //#define ACS_PARAM_GROUP 0x00002000 //群组参数 + //#define ACS_PARAM_ANTI_SNEAK_CFG 0x00004000 //反潜回参数 + //#define ACS_PAPAM_EVENT_CARD_LINKAGE 0x00008000 //事件及卡号联动参数 + //#define ACS_PAPAM_CARD_PASSWD_CFG 0x00010000 //密码开门使能参数 + //#define ACS_PARAM_PERSON_STATISTICS_CFG 0x00020000 //人数统计参数 + //#define ACS_PARAM_BLOCKLIST_PICTURE 0x00040000 //禁止名单图片参数 + //#define ACS_PARAM_ID_BLOCKLIST 0x00080000 //身份证禁止名单参数 + //#define ACS_PARAM_EXAM_INFO 0x00100000 //考试信息参数 + //#define ACS_PARAM_EXAMINEE_INFO 0x00200000 //考生信息参数 + //#define ACS_PARAM_FAILED_FACE_INFO 0x00400000 //升级设备人脸建模失败记录 + WORD wLocalControllerID; //就地控制器序号[1,64],0代表门禁主机 BYTE byRes[30]; }NET_DVR_ACS_PARAM_TYPE, *LPNET_DVR_ACS_PARAM_TYPE; typedef struct tagNET_DVR_VIDEO_INTERCOM_IOIN_CFG { - DWORD dwSize; // ṹС - BYTE byIOUseType; //;0-ã1-Űť2-״̬0xff-Զ - BYTE byRes[63]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byIOUseType; //用途,0-禁用,1-开门按钮,2-门状态,0xff-自定义 + BYTE byRes[63]; // 保留字节 }NET_DVR_VIDEO_INTERCOM_IOIN_CFG, *LPNET_DVR_VIDEO_INTERCOM_IOIN_CFG; typedef struct tagNET_DVR_VIDEO_INTERCOM_IOOUT_CFG { - DWORD dwSize; // ṹС - BYTE byIOUseType; //;0-ã1-0xff-Զ - BYTE byRes[63]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byIOUseType; //用途,0-禁用,1-电锁,0xff-自定义 + BYTE byRes[63]; // 保留字节 }NET_DVR_VIDEO_INTERCOM_IOOUT_CFG, *LPNET_DVR_VIDEO_INTERCOM_IOOUT_CFG; typedef struct tagNET_DVR_ELEVATORCONTROL_CFG { - DWORD dwSize; // ṹС - BYTE byEnable; //Ƿݿأ0-1- - BYTE byRes1; // - BYTE byInterfaceType; //ӿͣ0-ޣ1-RS485,2- - BYTE byRS485Protocol; //RS485Эͣ0-δ֪1-˽У0xff-Զ壬byInterfaceTypeȡֵΪ1ʱЧ - BYTE byNetworkType; //Эͣ0-δ֪1-˽У0xff-Զ壬byInterfaceTypeȡֵΪ2ʱЧ - BYTE byRes[63]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byEnable; //是否启用梯控,0-否,1-是 + BYTE byRes1; //保留 + BYTE byInterfaceType; //接口类型,0-无,1-RS485,2-网口 + BYTE byRS485Protocol; //RS485协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为1时有效 + BYTE byNetworkType; //网口协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为2时有效 + BYTE byRes[63]; // 保留字节 }NET_DVR_ELEVATORCONTROL_CFG, *LPNET_DVR_ELEVATORCONTROL_CFG; typedef struct tagNET_DVR_ELEVATORCONTROL_CFG_V40 { - DWORD dwSize; // ṹС - BYTE byEnable; //Ƿݿأ0-1- - BYTE byRes1; // - BYTE byInterfaceType; //ӿͣ0-ޣ1-RS485,2- - BYTE byRS485Protocol; //RS485Эͣ0-δ֪1-˽У0xff-Զ壬byInterfaceTypeȡֵΪ1ʱЧ - BYTE byNetworkType; //Эͣ0-δ֪1-˽У0xff-Զ壬byInterfaceTypeȡֵΪ2ʱЧ - BYTE byRes2; // - WORD wServerPort; //ݿط˿ںţЭΪ1-˽ ʱЧ - NET_DVR_IPADDR struServerIP; //ݿطIPЭΪ1-˽ ʱЧ - BYTE byRes[256]; // ֽ + DWORD dwSize; // 结构体大小 + BYTE byEnable; //是否启用梯控,0-否,1-是 + BYTE byRes1; //保留 + BYTE byInterfaceType; //接口类型,0-无,1-RS485,2-网口 + BYTE byRS485Protocol; //RS485协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为1时有效 + BYTE byNetworkType; //网口协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为2时有效 + BYTE byRes2; //保留 + WORD wServerPort; //梯控服务器端口号,当网卡协议类型为1-私有 时有效 + NET_DVR_IPADDR struServerIP; //梯控服务器IP,当网卡协议类型为1-私有 时有效 + BYTE byRes[256]; // 保留字节 }NET_DVR_ELEVATORCONTROL_CFG_V40, *LPNET_DVR_ELEVATORCONTROL_CFG_V40; typedef struct tagNET_DVR_ELEVATORCONTROL_CFG_V50 { - DWORD dwSize; //ṹС - BYTE byEnable; //Ƿݿأ0-1- - BYTE byNegativeFloor; //¥ - BYTE byInterfaceType; //ӿͣ0-ޣ1-RS485,2- - BYTE byRS485Protocol; //RS485Эͣ0-δ֪1-˽У0xff-Զ壬byInterfaceTypeȡֵΪ1ʱЧ - BYTE byNetworkType; //Эͣ0-δ֪1-˽У0xff-Զ壬byInterfaceTypeȡֵΪ2ʱЧ - BYTE byElevatorControlType; //ݿͣ0-Ч1-DS-K22012-DS-K22100xff-Զ - WORD wServerPort; //ݿط˿ںţЭΪ1-˽ ʱЧ - NET_DVR_IPADDR struServerIP; //ݿطIPЭΪ1-˽ ʱЧ - BYTE sUserName[NET_DVR_LOGIN_USERNAME_MAX_LEN]; //ûЭΪ1-˽ ʱЧֻãܻȡ - BYTE sPassword[NET_DVR_LOGIN_PASSWD_MAX_LEN]; //룬ЭΪ1-˽ ʱЧֻãܻȡ - BYTE byRes[256]; //ֽ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用梯控,0-否,1-是 + BYTE byNegativeFloor; //负楼层层数 + BYTE byInterfaceType; //接口类型,0-无,1-RS485,2-网口 + BYTE byRS485Protocol; //RS485协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为1时有效 + BYTE byNetworkType; //网口协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为2时有效 + BYTE byElevatorControlType; //梯控器类型:0-无效,1-DS-K2201,2-DS-K2210,0xff-自定义 + WORD wServerPort; //梯控服务器端口号,当网卡协议类型为1-私有 时有效 + NET_DVR_IPADDR struServerIP; //梯控服务器IP,当网卡协议类型为1-私有 时有效 + BYTE sUserName[NET_DVR_LOGIN_USERNAME_MAX_LEN]; //用户名,当网卡协议类型为1-私有 时有效(只能设置,不能获取) + BYTE sPassword[NET_DVR_LOGIN_PASSWD_MAX_LEN]; //密码,当网卡协议类型为1-私有 时有效(只能设置,不能获取) + BYTE byRes[256]; //保留字节 }NET_DVR_ELEVATORCONTROL_CFG_V50, *LPNET_DVR_ELEVATORCONTROL_CFG_V50; typedef struct tagNET_DVR_ROOM_CUSTOM_COND { DWORD dwSize; - DWORD dwRoomNumber; //ĿʱЧ + DWORD dwRoomNumber; //房间数目(设置时有效) BYTE byRes[128]; }NET_DVR_ROOM_CUSTOM_COND, *LPNET_DVR_ROOM_CUSTOM_COND; typedef struct tagNET_DVR_ROOM_CUSTOM_CFG { DWORD dwSize; - DWORD dwFormerRoomNo; //ԭ - DWORD dwCustomRoomNo; //Զ + DWORD dwFormerRoomNo; //原房间号 + DWORD dwCustomRoomNo; //自定义序号 BYTE byRes[128]; }NET_DVR_ROOM_CUSTOM_CFG, *LPNET_DVR_ROOM_CUSTOM_CFG; typedef struct tagNET_DVR_ROOM_CUSTOM_STATUS { DWORD dwSize; - DWORD dwFormerRoomNo; //ԭ - BYTE byStatus; //·״̬0-Ч1-ʧܣ2-У3-ɹ + DWORD dwFormerRoomNo; //原房间号 + BYTE byStatus; //下发状态:0-无效,1-失败,2-处理中,3-成功 BYTE byRes[127]; }NET_DVR_ROOM_CUSTOM_STATUS, *LPNET_DVR_ROOM_CUSTOM_STATUS; typedef struct tagNET_DVR_VIDEOINTERCOM_STREAM { DWORD dwSize; - BYTE byVisDevID[MAX_NAMELEN]; // ӶԽ豸ţţ豸ΪIPCʱȫΪ0 - BYTE byDeviceName[NAME_LEN]; //豸 - BYTE bySourceType; //ƵԴͣ0壬1-IPC2-DVR/DVS/NVR3-ſڻ4-Χǽ5-ȷϻ - BYTE byRes[255]; // + BYTE byVisDevID[MAX_NAMELEN]; // 可视对讲设备编号,即长号,设备类型为IPC时全部为0 + BYTE byDeviceName[NAME_LEN]; //设备名称 + BYTE bySourceType; //视频源类型,0无意义,1-IPC、2-DVR/DVS/NVR、3-门口机、4-围墙机、5-二次确认机 + BYTE byRes[255]; //保留 }NET_DVR_VIDEOINTERCOM_STREAM, LPNET_DVR_VIDEOINTERCOM_STREAM; -#define UNLOCK_PASSWORD_LEN 8 //볤 -#define LOCAL_CONTROLLER_NAME_LEN 32//͵ؿƳ +#define UNLOCK_PASSWORD_LEN 8 //解除密码长度 +#define LOCAL_CONTROLLER_NAME_LEN 32//就地控制器名称长度 typedef struct tagNET_DVR_DOOR_CFG { DWORD dwSize; - BYTE byDoorName[DOOR_NAME_LEN]; // - BYTE byMagneticType; //Ŵͣ0-գ1- - BYTE byOpenButtonType; //Űťͣ0-գ1- - BYTE byOpenDuration; //ųʱ䣬1-255s¥̵ʱ䣩 - BYTE byAccessibleOpenDuration; //Ⱥ忨ųʱ䣬1-255s - BYTE byMagneticAlarmTimeout; //Ŵżⳬʱʱ䣬0-255s0ʾ - BYTE byEnableDoorLock; //ǷñŻ0-1- - BYTE byEnableLeaderCard; //Ƿ׿ܣ0-1- - BYTE byLeaderCardMode; //׿ģʽ0-׿ܣ1-׿ģʽ2-׿Ȩģʽʹ˴ֶΣbyEnableLeaderCardЧ - DWORD dwLeaderCardOpenDuration; //׿ʱ䣬1-1440min - BYTE byStressPassword[STRESS_PASSWORD_LEN]; //в - BYTE bySuperPassword[SUPER_PASSWORD_LEN]; // - BYTE byUnlockPassword[UNLOCK_PASSWORD_LEN]; //NET_DVR_LOCAL_CONTROLLER_STATUS - BYTE byUseLocalController; //ֻǷھ͵ؿϣ0-1- + BYTE byDoorName[DOOR_NAME_LEN]; //门名称 + BYTE byMagneticType; //门磁类型,0-常闭,1-常开 + BYTE byOpenButtonType; //开门按钮类型,0-常闭,1-常开 + BYTE byOpenDuration; //开门持续时间,1-255s(楼层继电器动作时间) + BYTE byAccessibleOpenDuration; //特殊群体卡开门持续时间,1-255s + BYTE byMagneticAlarmTimeout; //门磁检测超时报警时间,0-255s,0表示不报警 + BYTE byEnableDoorLock; //是否启用闭门回锁,0-否,1-是 + BYTE byEnableLeaderCard; //是否启用首卡常开功能,0-否,1-是 + BYTE byLeaderCardMode; //首卡模式,0-不启用首卡功能,1-首卡常开模式,2-首卡授权模式(使用了此字段,则byEnableLeaderCard无效) + DWORD dwLeaderCardOpenDuration; //首卡常开持续时间,1-1440min + BYTE byStressPassword[STRESS_PASSWORD_LEN]; //胁迫密码 + BYTE bySuperPassword[SUPER_PASSWORD_LEN]; //超级密码 + BYTE byUnlockPassword[UNLOCK_PASSWORD_LEN]; //解除码NET_DVR_LOCAL_CONTROLLER_STATUS + BYTE byUseLocalController; //只读,是否连接在就地控制器上,0-否,1-是 BYTE byRes1; - WORD wLocalControllerID; //ֻ͵ؿţ1-64,0δע - WORD wLocalControllerDoorNumber; //ֻ͵ؿűţ1-4,0δע - WORD wLocalControllerStatus; //ֻ͵ؿ״̬0-ߣ1-ߣ2-·1ϵRS48513-·1ϵRS48524-·2ϵRS48515-·2ϵRS48526-·3ϵRS48517-·3ϵRS48528-·4ϵRS48519-·4ϵRS4852ֻ - BYTE byLockInputCheck; //Ƿ(1ֽڣ0ã1ãĬϲ) - BYTE byLockInputType; //(1ֽڣ0գ1Ĭϳ) - BYTE byDoorTerminalMode; //ضӹģʽ(1ֽڣ0̣1ͨĬϷ) - BYTE byOpenButton; //ǷÿŰť(1ֽڣ0ǣ1Ĭ) - BYTE byLadderControlDelayTime; //ݿطÿӳʱ䣬1-255min + WORD wLocalControllerID; //只读,就地控制器序号,1-64,0代表未注册 + WORD wLocalControllerDoorNumber; //只读,就地控制器的门编号,1-4,0代表未注册 + WORD wLocalControllerStatus; //只读,就地控制器在线状态:0-离线,1-网络在线,2-环路1上的RS485串口1,3-环路1上的RS485串口2,4-环路2上的RS485串口1,5-环路2上的RS485串口2,6-环路3上的RS485串口1,7-环路3上的RS485串口2,8-环路4上的RS485串口1,9-环路4上的RS485串口2(只读) + BYTE byLockInputCheck; //是否启用门锁输入检测(1字节,0不启用,1启用,默认不启用) + BYTE byLockInputType; //门锁输入类型(1字节,0常闭,1常开,默认常闭) + BYTE byDoorTerminalMode; //门相关端子工作模式(1字节,0防剪防短,1普通,默认防剪防短) + BYTE byOpenButton; //是否启用开门按钮(1字节,0是,1否,默认是) + BYTE byLadderControlDelayTime; //梯控访客延迟时间,1-255min BYTE byRes2[43]; }NET_DVR_DOOR_CFG, *LPNET_DVR_DOOR_CFG; typedef struct tagNET_DVR_VIS_DEV_INFO { DWORD dwSize; - BYTE szDevNumber[MAX_DEV_NUMBER_LEN]; //豸 - BYTE byRes[64]; // + BYTE szDevNumber[MAX_DEV_NUMBER_LEN]; //设备编号 + BYTE byRes[64]; //保留 }NET_DVR_VIS_DEV_INFO,*LPNET_DVR_VIS_DEV_INFO; typedef struct tagNET_DVR_VIS_REGISTER_INFO { DWORD dwSize; DWORD dwID; //ID - BYTE szDevNumber[MAX_DEV_NUMBER_LEN]; //豸 - BYTE byMACAddr[MACADDR_LEN]; //macַ - BYTE byRes1[2]; // - BYTE sSerialNumber[SERIALNO_LEN]; //豸к - NET_DVR_IPADDR struDevIP; //豸IPַ - NET_DVR_TIME_EX struRegisterTime; //עʱ - BYTE byRegisterType; //עͣ0-1-ſڻ2-3-ڻ4-Χǽ5-ſڻ6-ȷϻ7-8700ͻˡ8-4200ͻ - BYTE byRes[127]; // + BYTE szDevNumber[MAX_DEV_NUMBER_LEN]; //设备编号 + BYTE byMACAddr[MACADDR_LEN]; //mac地址 + BYTE byRes1[2]; //保留 + BYTE sSerialNumber[SERIALNO_LEN]; //设备序列号 + NET_DVR_IPADDR struDevIP; //设备IP地址 + NET_DVR_TIME_EX struRegisterTime; //注册时间 + BYTE byRegisterType; //注册类型,0-保留、1-门口机,2-管理机、3-室内机、4-围墙机、5-别墅门口机、6-二次确认机、7-8700客户端、8-4200客户端 + BYTE byRes[127]; //保留 }NET_DVR_VIS_REGISTER_INFO,*LPNET_DVR_VIS_REGISTER_INFO; typedef struct tagNET_DVR_CALLER_INFO { - DWORD dwSize; //ṹС - WORD wBuildingNo; //¥ - SHORT wFloorNo; // - BYTE byZoneNo; //ں - BYTE byUnitNo; //Ԫ - BYTE byDevNo; //豸 - BYTE byDevType; //豸ͣ1-ſڻ2-3-ڻ4-Χǽ5-ſڻ6-ȷϻ7-8700ͻˣ8-4200ͻˣ9-APP, 10- 11-VOIPͻˣ12-IPC豸 - BYTE byLockNum;//0-ϵ߼ߣֵ-ʵ - BYTE byHighDevNo; // 豸Ÿ8λ,֧1-9999ķΧ - BYTE byRes1[2]; // - BYTE byVoipNo[16]; // VOIPͻ˺ byDevTypeΪ11ʱЧ - BYTE byRes[80]; // + DWORD dwSize; //结构体大小 + WORD wBuildingNo; //楼号 + SHORT wFloorNo; //层号 + BYTE byZoneNo; //期号 + BYTE byUnitNo; //单元号 + BYTE byDevNo; //设备编号 + BYTE byDevType; //设备类型,1-门口机,2-管理机,3-室内机,4-围墙机,5-别墅门口机,6-二次确认机,7-8700客户端,8-4200客户端,9-APP, 10- 门铃机,11-VOIP客户端,12-布防点IPC设备 + BYTE byLockNum;//锁数量0-按照老的逻辑走,其他值-代表实际锁的数量 + BYTE byHighDevNo; // 设备编号高8位,用于支持1-9999的范围 + BYTE byRes1[2]; // 保留 + BYTE byVoipNo[16]; // VOIP客户端号码 byDevType:为11时有效 + BYTE byRes[80]; // 保留 }NET_DVR_CALLER_INFO,*LPNET_DVR_CALLER_INFO; typedef struct tagNET_DVR_CALL_STATUS { - DWORD dwSize; //ṹС - BYTE byCallStatus; //ȡͨ״̬1-޺С2-塢3-ͨ + DWORD dwSize; //结构体大小 + BYTE byCallStatus; //获取通话状态,1-无呼叫、2-响铃、3-正在通话 BYTE byRes[127]; }NET_DVR_CALL_STATUS, *LPNET_DVR_CALL_STATUS; -#define MAX_SERVER_DEVICE_NUMBER 16 //豸 +#define MAX_SERVER_DEVICE_NUMBER 16 //最大设备数量 typedef struct tagNET_DVR_SERVER_DEVICE_CFG { - BYTE byDeviceName[NAME_LEN]; //豸 - BYTE byDeviceType; ////豸ͣ1-ſڻ2-3-ڻ - BYTE byDeviceID; //ſڻ - BYTE byLockNum; //0-ϵ߼ߣֵ-ʵ - BYTE byRes[5]; // + BYTE byDeviceName[NAME_LEN]; //设备名称 + BYTE byDeviceType; ////设备类型,1-门口机,2-管理机,3-室内机 + BYTE byDeviceID; //门口机编号 + BYTE byLockNum; //锁数量0-按照老的逻辑走,其他值-代表实际锁的数量 + BYTE byRes[5]; //保留 }NET_DVR_SERVER_DEVICE_CFG,*LPNET_DVR_SERVER_DEVICE_CFG; typedef struct tagNET_DVR_SERVER_DEVICE_INFO { - DWORD dwSize; //ṹС - DWORD dwDeviceNum; //豸 - NET_DVR_SERVER_DEVICE_CFG struDeviceCfg[MAX_SERVER_DEVICE_NUMBER]; //豸Ϣ - BYTE byRes[200]; // + DWORD dwSize; //结构体大小 + DWORD dwDeviceNum; //设备数 + NET_DVR_SERVER_DEVICE_CFG struDeviceCfg[MAX_SERVER_DEVICE_NUMBER]; //设备信息 + BYTE byRes[200]; //保留 }NET_DVR_SERVER_DEVICE_INFO,*LPNET_DVR_SERVER_DEVICE_INFO; typedef struct tagNET_DVR_VIDEO_CALL_PARAM { DWORD dwSize; - DWORD dwCmdType; // 0-У1-ȡκУ2-κ 3-ܾ 4-峬ʱ 5-ͨ6-豸ͨУ7-ͻͨУ8ڻ - WORD wPeriod; //ں, Χ[0,9] - WORD wBuildingNumber; //¥ - WORD wUnitNumber; //Ԫ - SHORT wFloorNumber; // - WORD wRoomNumber; // - WORD wDevIndex; //豸 - BYTE byUnitType; //豸ͣ1-ſڻ2-3-ڻ4-Χǽ5-ſڻ6-ȷϻ7-8700ͻˣ8-4200ͻˣ9-APP - BYTE byRes[115]; // + DWORD dwCmdType; //信令类型 0-请求呼叫,1-取消本次呼叫,2-接听本次呼叫 3-拒绝本地来电呼叫 4-被叫响铃超时 5-结束本次通话,6-设备正在通话中,7-客户端正在通话中,8室内机不在线 + WORD wPeriod; //期号, 范围[0,9] + WORD wBuildingNumber; //楼号 + WORD wUnitNumber; //单元号 + SHORT wFloorNumber; //层号 + WORD wRoomNumber; //房间号 + WORD wDevIndex; //设备编号 + BYTE byUnitType; //设备类型,1-门口机,2-管理机,3-室内机,4-围墙机,5-别墅门口机,6-二次确认机,7-8700客户端,8-4200客户端,9-APP + BYTE byRes[115]; //保留 }NET_DVR_VIDEO_CALL_PARAM,*LPNET_DVR_VIDEO_CALL_PARAM; -#define MAX_SCREEN_ADDRESS_LEN 16 //󳤶 -#define MAX_DAY_TIME_POINT 8 //ÿʱ -#define MAX_TIME_POINT 16 //ÿʱ +#define MAX_SCREEN_ADDRESS_LEN 16 //特征码最大长度 +#define MAX_DAY_TIME_POINT 8 //每天最大时间点个数 +#define MAX_TIME_POINT 16 //每年最大时间点个数 typedef struct tagNET_DVR_DEV_IP_INFO { - BYTE byUserName[NAME_LEN]; //û - BYTE byPassWord[PASSWD_LEN]; // - NET_DVR_IPADDR struIPAddr; //IPַ - WORD wPort; //˿ں + BYTE byUserName[NAME_LEN]; //用户名 + BYTE byPassWord[PASSWD_LEN]; //密码 + NET_DVR_IPADDR struIPAddr; //IP地址 + WORD wPort; //端口号 BYTE byRes[24]; }NET_DVR_DEV_IP_INFO, *LPNET_DVR_DEV_IP_INFO; typedef union tagNET_DVR_SCREEN_BASE_INFO { - BYTE byScreenAddress[MAX_SCREEN_ADDRESS_LEN]; //Ļ룬豸ӷʽΪ0ʱЧ - NET_DVR_DEV_IP_INFO struIPInfo; //ĻipַϢ + BYTE byScreenAddress[MAX_SCREEN_ADDRESS_LEN]; //屏幕特征码,设备添加方式为0时有效 + NET_DVR_DEV_IP_INFO struIPInfo; //屏幕ip地址信息 BYTE byRes[100]; }NET_DVR_SCREEN_BASE_INFO,*LPNET_DVR_SCREEN_BASE_INFO; typedef struct tagNET_DVR_SCREEN_INDEX_CFG { DWORD dwSize; - BYTE byEnbale; //ʹܣ0-ʹܣ1-ʹ - BYTE byDevAddType; //豸ӷʽ0-(Ļʹôͨ)1-IPַ(Ļʹͨ) + BYTE byEnbale; //使能,0-不使能,1-使能 + BYTE byDevAddType; //设备添加方式,0-按特征码(服务器和屏幕使用串口通信),1-按IP地址(服务器和屏幕使用网络通信) BYTE byRes1[2]; - NET_DVR_SCREEN_BASE_INFO struScreenBaseInfo; //Ļ豸Ϣ + NET_DVR_SCREEN_BASE_INFO struScreenBaseInfo; //屏幕设备基本信息 BYTE byRes[32]; }NET_DVR_SCREEN_INDEX_CFG,*LPNET_DVR_SCREEN_INDEX_CFG; -//ģң +//模拟遥控器参数 typedef struct tagNET_DVR_SIMULATE_REMOTE_CTRL { - BYTE byControlType; //1-Դ2-Դأ3-źԴ4-˵5-ȷ6-ϣ7-£8-9-, 10-INFO, 11-һ,12-ְ - BYTE byControlParam; //Ϊ12ʱʾֵ(0-9)ʱ˲Ч + BYTE byControlType; //1-电源开,2-电源关,3-信号源,4-菜单,5-确定,6-上,7-下,8-左,9-右, 10-INFO, 11-返回上一层,12-数字按键 + BYTE byControlParam; //操作参数,操作类型为12时,表示按键值(0-9),其他操作时此参数无效 BYTE byRes[14]; }NET_DVR_SIMULATE_REMOTE_CTRL, *LPNET_DVR_SIMULATE_REMOTE_CTRL; -//Ļάǽ +//屏幕维墙参数 typedef struct tagNET_DVR_SCREEN_WALL_CTRL { - BYTE byEnable; //״̬ء0-Ϊرգ1-Ϊ + BYTE byEnable; //状态开关。0-为关闭;1-为开启 BYTE byRes[15]; }NET_DVR_SCREEN_WALL_CTRL, *LPNET_DVR_SCREEN_WALL_CTRL; -//Ŵԭ +//区域放大还原参数 typedef struct tagNET_DVR_AREA_ZOOM_CFG { - BYTE byCmd; //Ŵԭָ1-Ŵ2-ԭ + BYTE byCmd; //区域放大还原指令,1-放大,2-还原 BYTE byRes[3]; - NET_DVR_RECTCFG struArea; //ҪŴ1920*1920ΪĻܴСԭʱ˲Ч + NET_DVR_RECTCFG struArea; //需要放大的区域,以1920*1920作为屏幕总大小,还原时此参数无效 }NET_DVR_AREA_ZOOM_CFG, *LPNET_DVR_AREA_ZOOM_CFG; typedef union tagNET_DVR_SCREEN_CONTROL_PARAM @@ -40959,17 +40959,17 @@ typedef union tagNET_DVR_SCREEN_CONTROL_PARAM NET_DVR_INPUT_INTERFACE_CTRL struInputCtrl; NET_DVR_DISPLAY_COLOR_CTRL struDisplayCtrl; NET_DVR_DISPLAY_POSITION_CTRL struPositionCtrl; - NET_DVR_SIMULATE_REMOTE_CTRL struSimulateRemoteCrtl; //ģңذ - NET_DVR_SCREEN_WALL_CTRL struScreenWallCtrl; //Ļάǽ - NET_DVR_AREA_ZOOM_CFG struZoomArea; //Ŵԭ + NET_DVR_SIMULATE_REMOTE_CTRL struSimulateRemoteCrtl; //模拟遥控按键 + NET_DVR_SCREEN_WALL_CTRL struScreenWallCtrl; //屏幕维墙参数 + NET_DVR_AREA_ZOOM_CFG struZoomArea; //区域放大还原参数 BYTE byRes[16]; }NET_DVR_SCREEN_CONTROL_PARAM, *LPNET_DVR_SCREEN_CONTROL_PARAM; typedef struct tagNET_DVR_SCREEN_CONTROL { DWORD dwSize; - DWORD dwCommand ; /* Ʒ 1- 2- 3-ĻԴѡ 4-ʾԪɫ 5-ʾԪλÿ*/ - BYTE byProtocol; //Э,1:LCD-S1,2:LCD-S2 + DWORD dwCommand ; /* 控制方法 1-开 2-关 3-屏幕输入源选择 4-显示单元颜色控制 5-显示单元位置控制*/ + BYTE byProtocol; //串口协议类型,1:LCD-S1,2:LCD-S2 BYTE byRes1[3]; NET_DVR_SCREEN_CONTROL_PARAM struControlParam; BYTE byRes2[52]; @@ -40978,331 +40978,331 @@ typedef struct tagNET_DVR_SCREEN_CONTROL typedef struct tagNET_DVR_SCREEN_CONTROL_V41 { DWORD dwSize; - BYTE bySerialNo; //ں + BYTE bySerialNo; //串口号 BYTE byRes[2]; - BYTE byProtocol; // Э 1-LCD-S1,2-LCD-S2,3-LCD-L1,4-LCD-DLP,5-LCD-S3,6-LCD-D207-LCD-L2,8-LCD-Z1 + BYTE byProtocol; // 串口协议类型 1-LCD-S1,2-LCD-S2,3-LCD-L1,4-LCD-DLP,5-LCD-S3,6-LCD-D20,7-LCD-L2,8-LCD-Z1, //9-LCD-D20/D,10-LCD-D20/S,11-LCD-D20/P,12-LCD-D20/T,13-LCD-D20/F,14-LCD-D20/DF,15-LCD-D20/FS, - //16-LCD-D20/FP,17-LCD-D20/FT,18-LCD-D5022,19-LCD-D5032,20-LCD-D5042+,21-LCD-D20/Z 0xff-ЧʹԤȰ󶨵Э - DWORD dwCommand ; /* Ʒ 1- 2- 3-ĻԴѡ 4-ʾԪɫ 5-ʾԪλÿƣ6-ģңذ,7-ʾĻ״̬, - 8-ʾĻ루ʼΪ0,0߾Ϊ0xffffffff, 9-Ļάǽ,10-ָĻĬϲ11-ʾIPʼΪ0,0߾Ϊ0xffffffff,12-ĻUSB 13-Ŵԭ*/ + //16-LCD-D20/FP,17-LCD-D20/FT,18-LCD-D5022,19-LCD-D5032,20-LCD-D5042+,21-LCD-D20/Z 0xff-无效,使用预先绑定的协议类型 + DWORD dwCommand ; /* 控制方法 1-开 2-关 3-屏幕输入源选择 4-显示单元颜色控制 5-显示单元位置控制,6-模拟遥控按键,7-显示屏幕状态, + 8-显示屏幕特征码(此命令矩形区域起始坐标设为(0,0),宽高均设为0xffffffff), 9-屏幕维墙,10-恢复屏幕默认参数,11-显示IP(此命令矩形区域起始坐标设为(0,0),宽高均设为0xffffffff),12-屏幕USB升级 13-区域放大还原*/ NET_DVR_SCREEN_CONTROL_PARAM struControlParam; - BYTE byWallNo; // ǽ - BYTE byDevNo; //豸 - BYTE bySubboardNo; //Ӱ + BYTE byWallNo; // 电视墙号 + BYTE byDevNo; //设备号 + BYTE bySubboardNo; //子板号 BYTE byRes1; - NET_DVR_RECTCFG_EX struRect;//м㣬׼ + NET_DVR_RECTCFG_EX struRect;//根据坐标进行计算,基准坐标 BYTE byRes2[28]; }NET_DVR_SCREEN_CONTROL_V41, *LPNET_DVR_SCREEN_CONTROL_V41; typedef struct tagNET_DVR_MSC_SPLICE_CFG { DWORD dwSize; - BYTE bySpliceNo; //ƴ - BYTE byWallNo; //ǽ - BYTE byEnable; //Ƿʹܣ0-1- + BYTE bySpliceNo; //拼接屏号 + BYTE byWallNo; //电视墙号 + BYTE byEnable; //是否使能,0-否,1-是 BYTE byRes1[1]; - NET_DVR_RECTCFG_EX struRectCfg; //Ҫƴӵ򣬻ȡʱ˲0 + NET_DVR_RECTCFG_EX struRectCfg; //需要进行拼接的区域,获取的时候此参数填0 BYTE byRes2[32]; }NET_DVR_MSC_SPLICE_CFG,*LPNET_DVR_MSC_SPLICE_CFG; typedef struct tagNET_DVR_MSC_SCREEN_INTERFACE_CFG { DWORD dwSize; - BYTE byInterfaceType; //Դö INPUT_INTERFACE_TYPE - BYTE byNoSignalPic; //źŻģʽ1-2-3-LOGO + BYTE byInterfaceType; //输入源索引,见枚举 INPUT_INTERFACE_TYPE + BYTE byNoSignalPic; //无信号画面模式,1-蓝屏,2-黑屏,3-LOGO画面 BYTE byRes[30]; }NET_DVR_MSC_SCREEN_INTERFACE_CFG,*LPNET_DVR_MSC_SCREEN_INTERFACE_CFG; -// +//背光参数 typedef struct tagNET_DVR_MSC_SCREEN_BACKLIGHT_CFG { DWORD dwSize; - BYTE byBacklight; //⣬0-100 + BYTE byBacklight; //背光,0-100 BYTE byRes[15]; }NET_DVR_MSC_SCREEN_BACKLIGHT_CFG,*LPNET_DVR_MSC_SCREEN_BACKLIGHT_CFG; -//л +//画中画参数 typedef struct tagNET_DVR_MSC_SCREEN_PIP_CFG { DWORD dwSize; - BYTE byEnable; //Ƿûл 0- 1- - BYTE bySubWindowSource; //ӻźԴοöINPUT_INTERFACE_TYPE - BYTE bySubWindowBorderColor; //ӻ߿ɫ 1-ɫ2-ɫ + BYTE byEnable; //是否启用画中画 0-不启用 1-启用 + BYTE bySubWindowSource; //子画面信号源,参考枚举INPUT_INTERFACE_TYPE + BYTE bySubWindowBorderColor; //子画面边框颜色, 1-蓝色,2-黑色 BYTE byRes1; - NET_DVR_RECTCFG_EX struPosition; //ӻλãĻܴСΪ1920*1920 + NET_DVR_RECTCFG_EX struPosition; //子画面位置,屏幕总大小为1920*1920 BYTE byRes2[16]; }NET_DVR_MSC_SCREEN_PIP_CFG,*LPNET_DVR_MSC_SCREEN_PIP_CFG; typedef struct tagNET_DVR_SCREEN_WORK_STATE { DWORD dwSize; - BYTE byFanStatus;//״̬0-أ1- - BYTE byFanExceptionStatus; //쳣״̬0-֧֣1-2-쳣 + BYTE byFanStatus;//风扇状态,0-关,1-开 + BYTE byFanExceptionStatus; //风扇异常状态,0-不支持,1-正常,2-异常 BYTE byRes1[2]; - DWORD dwWorkingHours; //ۻʱλСʱ - BYTE byVersion[VERSION_LEN];//汾 - int iTemperature; //忨¶ȣȷλλ϶ - BYTE byTempState; //忨¶״̬0-֧֣1-2-쳣 + DWORD dwWorkingHours; //累积工作时长,单位:小时 + BYTE byVersion[VERSION_LEN];//软件版本号 + int iTemperature; //板卡温度,精确到个位,单位:摄氏度 + BYTE byTempState; //板卡温度状态,0-不支持,1-正常,2-异常 BYTE byRes[31]; }NET_DVR_SCREEN_WORK_STATE,*LPNET_DVR_SCREEN_WORK_STATE; -//logo +//开机logo参数 typedef struct tagNET_DVR_BOOT_LOGO_CFG { DWORD dwSize; - BYTE byEnable; //Ƿʾlogo,0-ʾ1-ʾ + BYTE byEnable; //开机是否显示logo,0-不显示,1-显示 BYTE byRes[31]; }NET_DVR_BOOT_LOGO_CFG,*LPNET_DVR_BOOT_LOGO_CFG; -//Ƶ +//音频参数 typedef struct tagNET_DVR_LCD_AUDIO_CFG { DWORD dwSize; - BYTE byMute; //Ƿ0-1- - BYTE byVolume; //С0-100 - char byBalance; //ƽ⣬-50-+50 + BYTE byMute; //是否静音,0-否,1-是 + BYTE byVolume; //音量大小,0-100 + char byBalance; //声道平衡,-50-+50 BYTE byRes[33]; }NET_DVR_LCD_AUDIO_CFG, *LPNET_DVR_LCD_AUDIO_CFG; -//Ļ +//屏幕参数联合体 typedef union tagNET_DVR_MSC_SCREEN_PARAM { - NET_DVR_MSC_SCREEN_INTERFACE_CFG struInterfaceCfg; //Դ - NET_DVR_SCREEN_FAN_WORK_MODE_CFG struFanWorkMode; //ȹģʽ - NET_DVR_SCREEN_VGA_CFG struVgaCfg; //VGAźŲ - NET_DVR_SCREEN_MENU_CFG struMenuCfg; //Ļ˵ - NET_DVR_VIDEO_OUT_CFG struOutEffectCfg; //ʾЧ - NET_DVR_COLOR_TEMPERATURE_CFG struColorTemperatureCfg; //ɫ² - NET_DVR_ADC_CFG struAdcCfg; //ADC - NET_DVR_SCREEN_EDGE_CFG struScreenEdgeCfg; //ĻԵ - NET_DVR_MSC_SCREEN_BACKLIGHT_CFG struBacklight; // - NET_DVR_MSC_SCREEN_PIP_CFG struPicInPicCfg; //л - NET_DVR_DEFOG_LCD struDefog; //ȥ - NET_DVR_SCREEN_WORK_STATE struWorkState; //Ļ״̬ - NET_DVR_BOOT_LOGO_CFG struBootLogoCfg; //ʼʾlogo - NET_DVR_LCD_AUDIO_CFG struAudioCfg; //Ƶ + NET_DVR_MSC_SCREEN_INTERFACE_CFG struInterfaceCfg; //输入源参数 + NET_DVR_SCREEN_FAN_WORK_MODE_CFG struFanWorkMode; //风扇工作模式参数 + NET_DVR_SCREEN_VGA_CFG struVgaCfg; //VGA信号参数 + NET_DVR_SCREEN_MENU_CFG struMenuCfg; //屏幕菜单参数 + NET_DVR_VIDEO_OUT_CFG struOutEffectCfg; //显示效果参数 + NET_DVR_COLOR_TEMPERATURE_CFG struColorTemperatureCfg; //色温参数 + NET_DVR_ADC_CFG struAdcCfg; //ADC参数 + NET_DVR_SCREEN_EDGE_CFG struScreenEdgeCfg; //屏幕边缘参数 + NET_DVR_MSC_SCREEN_BACKLIGHT_CFG struBacklight; //背光参数 + NET_DVR_MSC_SCREEN_PIP_CFG struPicInPicCfg; //画中画参数 + NET_DVR_DEFOG_LCD struDefog; //去雾参数 + NET_DVR_SCREEN_WORK_STATE struWorkState; //屏幕工作状态 + NET_DVR_BOOT_LOGO_CFG struBootLogoCfg; //开始显示logo参数 + NET_DVR_LCD_AUDIO_CFG struAudioCfg; //音频参数 BYTE byRes[256]; }NET_DVR_MSC_SCREEN_PARAM,*LPNET_DVR_MSC_SCREEN_PARAM; typedef struct tagNET_DVR_MSC_SCREEN_PARAM_CFG { DWORD dwSize; - BYTE byParamType; //ͣ1-Դ2-ȹģʽ3-VGAźŲ4-Ļ˵5-ʾЧ6-ɫ²7-ADC8-ĻԵ9-10-л11-͸12-Ļ״ֻ̬ܻȡ13-LOGOǷʾ 14-Ƶ + BYTE byParamType; //参数类型,1-输入源参数,2-风扇工作模式参数,3-VGA信号参数,4-屏幕菜单参数,5-显示效果参数,6-色温参数,7-ADC参数,8-屏幕边缘参数,9-背光参数,10-画中画参数,11-透雾参数,12-屏幕工作状态(只能获取),13-开机LOGO是否显示参数 14-音频参数 BYTE byRes1[3]; - NET_DVR_MSC_SCREEN_PARAM struParam; //Ļ + NET_DVR_MSC_SCREEN_PARAM struParam; //屏幕参数 BYTE byRes2[32]; }NET_DVR_MSC_SCREEN_PARAM_CFG,*LPNET_DVR_MSC_SCREEN_PARAM_CFG; typedef struct tagNET_DVR_MSC_SCREEN_REMOTE_CFG { DWORD dwSize; - BYTE byWallNo; //ǽ + BYTE byWallNo; //电视墙号 BYTE byRes1[3]; - NET_DVR_RECTCFG_EX struRectCfg; //Ļ - NET_DVR_MSC_SCREEN_PARAM_CFG struScreenParam; //õĻ + NET_DVR_RECTCFG_EX struRectCfg; //屏幕区域 + NET_DVR_MSC_SCREEN_PARAM_CFG struScreenParam; //配置的屏幕参数 BYTE byRes2[32]; }NET_DVR_MSC_SCREEN_REMOTE_CFG,*LPNET_DVR_MSC_SCREEN_REMOTE_CFG; typedef struct tagNET_DVR_MSC_SCREEN_PARAM_COND { DWORD dwSize; - BYTE byWallNo; //ǽ - BYTE byParamType; //ͣ1-Դ2-ȹģʽ3-VGAźŲ4-Ļ˵5-ʾЧ6-ɫ²7-ADC8-ĻԵ9-10-л11-͸12-Ļ״ֻ̬ܻȡ13-LOGOǷʾ 14-Ƶ + BYTE byWallNo; //电视墙号 + BYTE byParamType; //参数类型,1-输入源参数,2-风扇工作模式参数,3-VGA信号参数,4-屏幕菜单参数,5-显示效果参数,6-色温参数,7-ADC参数,8-屏幕边缘参数,9-背光参数,10-画中画参数,11-透雾参数,12-屏幕工作状态(只能获取),13-开机LOGO是否显示参数 14-音频参数 BYTE byRes1[2]; - NET_DVR_RECTCFG_EX struRectCfg; //Ļ + NET_DVR_RECTCFG_EX struRectCfg; //屏幕区域 BYTE byRes2[32]; }NET_DVR_MSC_SCREEN_PARAM_COND,*LPNET_DVR_MSC_SCREEN_PARAM_COND; typedef struct tagNET_DVR_SWITCH_DAY_TIME { - BYTE byEnable; //Ƿøʱ,0-ã1- - BYTE bySwitchType; //ػͣ0-ػ1- + BYTE byEnable; //是否启用该时间点,0-不启用,1-启用 + BYTE bySwitchType; //开关机类型,0-关机,1-开机 BYTE byRes1[2]; - NET_DVR_DAYTIME struTimePoint; //ػʱ + NET_DVR_DAYTIME struTimePoint; //开关机时间点 BYTE byRes2[8]; }NET_DVR_SWITCH_DAY_TIME,*LPNET_DVR_SWITCH_DAY_TIME; typedef struct tagNET_DVR_SWITCH_TIME_POINT { - BYTE byEnable; //Ƿøʱ,0-ã1- - BYTE bySwitchType; //ػͣ0-ػ1- + BYTE byEnable; //是否启用该时间点,0-不启用,1-启用 + BYTE bySwitchType; //开关机类型,0-关机,1-开机 BYTE byRes1[2]; - NET_DVR_SYSTEM_TIME struTimePoint; //ػʱ + NET_DVR_SYSTEM_TIME struTimePoint; //开关机时间点 BYTE byRes2[16]; }NET_DVR_SWITCH_TIME_POINT,*LPNET_DVR_SWITCH_TIME_POINT; typedef struct tagNET_DVR_TIME_SWITCH_CFG { DWORD dwSize; - NET_DVR_SWITCH_DAY_TIME struSwitchDayTime[MAX_DAYS][MAX_DAY_TIME_POINT]; //ܿػƻ - NET_DVR_SWITCH_TIME_POINT struSwitchTimePoint[MAX_TIME_POINT]; //ʱ㿪ػ + NET_DVR_SWITCH_DAY_TIME struSwitchDayTime[MAX_DAYS][MAX_DAY_TIME_POINT]; //周开关机计划 + NET_DVR_SWITCH_TIME_POINT struSwitchTimePoint[MAX_TIME_POINT]; //按时间点开关机参数 BYTE byRes1[3]; - BYTE byEnable;//Ƿöʱػ,0-ã1- + BYTE byEnable;//是否启用定时开关机,0-不启用,1-启用 BYTE byRes[60]; }NET_DVR_TIME_SWITCH_CFG,*LPNET_DVR_TIME_SWITCH_CFG; typedef struct tagNET_DVR_VIDEO_WALL_AREA { DWORD dwSize; - BYTE byWallNo; //ǽ + BYTE byWallNo; //电视墙号 BYTE byRes1[3]; - NET_DVR_RECTCFG_EX struRect; //ĻΧ + NET_DVR_RECTCFG_EX struRect; //屏幕范围 BYTE byRes2[32]; }NET_DVR_VIDEO_WALL_AREA, *LPNET_DVR_VIDEO_WALL_AREA; typedef struct tagNET_DVR_DELAY_TIME { DWORD dwSize; - DWORD dwDelayTime; //ʱʱ䣬0-3000λms + DWORD dwDelayTime; //延时时间,0-3000,单位:ms BYTE byRes[32]; }NET_DVR_DELAY_TIME,*LPNET_DVR_DELAY_TIME; -//˫Ŀ궨 +//双目标定类型 typedef enum _BV_CALIBRATION_TYPE_ENUM_ { - ENUM_BV_CALIBRATION_NONE = 0, //δ궨 - ENUM_BV_CALIBRATION_DIRECT = 1, //˫Ŀֱӱ궨 - ENUM_BV_CALIBRATION_SAMPLE = 2, //˫Ŀ궨 + ENUM_BV_CALIBRATION_NONE = 0, //未标定 + ENUM_BV_CALIBRATION_DIRECT = 1, //双目直接标定 + ENUM_BV_CALIBRATION_SAMPLE = 2, //双目样本标定 } BV_CALIBRATION_TYPE_ENUM; -//궨 +//样本标定点 typedef struct tagNET_DVR_BV_SAMPLE_CALIB_POINT { - BYTE byCalibPtID; //궨IDΧ[1,5]ʾ˵˫Ŀ궨е - BYTE byRes1[3]; // - NET_VCA_POINT struPoint; //궨 - BYTE byRes2[16]; // + BYTE byCalibPtID; //标定点ID,范围[1,5]。表示此点在双目标定过程中的序号 + BYTE byRes1[3]; //保留 + NET_VCA_POINT struPoint; //标定点坐标 + BYTE byRes2[16]; //保留 }NET_DVR_BV_SAMPLE_CALIB_POINT,*LPET_DVR_BV_SAMPLE_CALIB_POINT; -//ʼ궨 +//开始样本标定输入参数 typedef struct tagNET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM { - DWORD dwCameraHeight; //߶ȣλcm - DWORD dwHumanHeight; //ߣλcm - BYTE byRes[248]; // + DWORD dwCameraHeight; //摄像机高度,单位cm + DWORD dwHumanHeight; //人体身高,单位cm + BYTE byRes[248]; //保留 }NET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM,*LPNET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM; -//궨 +//设置样本标定输入参数 typedef struct tagNET_DVR_BV_SAMPLE_CALIB_SET_PARAM { - NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPoint; //궨㡣Աֱߣضʱ˵ʾߵе㡣 - BYTE byRes[228]; // + NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPoint; //标定点。即当人员保持直立行走,人脸出现在特定画面区域中时,此点表示对象两眼连线的中点。 + BYTE byRes[228]; //保留 }NET_DVR_BV_SAMPLE_CALIB_SET_PARAM,*LPNET_DVR_BV_SAMPLE_CALIB_SET_PARAM; -//궨 +//结束样本标定输入参数 typedef struct tagNET_DVR_BV_SAMPLE_CALIB_END_PARAM { - BYTE byRes[256]; // + BYTE byRes[256]; //保留 }NET_DVR_BV_SAMPLE_CALIB_END_PARAM,*LPNET_DVR_BV_SAMPLE_CALIB_END_PARAM; -//궨 +//样本标定输入参数联合体 typedef union tagNET_DVR_BV_SAMPLE_CALIB_PARAM_UNION { - BYTE byRes[256]; // - NET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM struCalibBegin; //ʼ궨 - NET_DVR_BV_SAMPLE_CALIB_SET_PARAM struCalibSet; //ñ궨 - NET_DVR_BV_SAMPLE_CALIB_END_PARAM struCalibEnd; //궨 + BYTE byRes[256]; //保留 + NET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM struCalibBegin; //开始标定输入参数 + NET_DVR_BV_SAMPLE_CALIB_SET_PARAM struCalibSet; //设置标定输入参数 + NET_DVR_BV_SAMPLE_CALIB_END_PARAM struCalibEnd; //结束标定输入参数 }NET_DVR_BV_SAMPLE_CALIB_PARAM_UNION,*LPNET_DVR_BV_SAMPLE_CALIB_PARAM_UNION; -//궨ö +//样本标定命令枚举 typedef enum _BV_SAMPLE_CALIB_CMD_ENUM { - ENUM_BV_SAMPLE_CALIB_BEGIN = 1, //ʼ궨 - ENUM_BV_SAMPLE_CALIB_SETTING = 2, //ò - ENUM_BV_SAMPLE_CALIB_END = 3 //궨 + ENUM_BV_SAMPLE_CALIB_BEGIN = 1, //开始标定 + ENUM_BV_SAMPLE_CALIB_SETTING = 2, //设置参数 + ENUM_BV_SAMPLE_CALIB_END = 3 //结束标定 }BV_SAMPLE_CALIB_CMD_ENUM; -//궨ṹ +//样本标定结构体 typedef struct tagNET_DVR_BV_SAMPLE_CALIBRATION { - DWORD dwSize; //ṹС - DWORD dwChannel; //ͨ - BYTE byCommand; //궨μBV_SAMPLE_CALIB_CMD _ENUM - BYTE byRes1[3]; // - NET_DVR_BV_SAMPLE_CALIB_PARAM_UNION uCalibParam; //궨ȡֵֶbyCommand - BYTE byRes2[256] ; // + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + BYTE byCommand; //标定命令,参见BV_SAMPLE_CALIB_CMD _ENUM + BYTE byRes1[3]; //保留 + NET_DVR_BV_SAMPLE_CALIB_PARAM_UNION uCalibParam; //标定输入参数,取值依赖于字段byCommand + BYTE byRes2[256] ; //保留 }NET_DVR_BV_SAMPLE_CALIBRATION,*LPNET_DVR_BV_SAMPLE_CALIBRATION; -//˫Ŀ궨Ϣ +//双目样本标定信息 typedef struct tagNET_DVR_BV_SAMPLE_CALIB_CFG { - DWORD dwSize; //ṹС - DWORD dwCameraHeight; //߶ȣλcm - float fPitchAngle; //ӽǶ[0, 60], - float fInclineAngle; //бǶ[-20,20] - NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPoint[MAX_SAMPLE_NUM]; //궨 - NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPointEx[MAX_SAMPLE_NUM_EX/*7*/]; //궨չ - BYTE byRes[60]; // + DWORD dwSize; //结构体大小 + DWORD dwCameraHeight; //摄像机高度,单位cm + float fPitchAngle; //摄像机俯视角度[0°, 60°], + float fInclineAngle; //摄像机倾斜角度[-20°,20°] + NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPoint[MAX_SAMPLE_NUM]; //标定点组 + NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPointEx[MAX_SAMPLE_NUM_EX/*7*/]; //标定点组扩展 + BYTE byRes[60]; //保留 }NET_DVR_BV_SAMPLE_CALIB_CFG,*LPNET_DVR_BV_SAMPLE_CALIB_CFG; -//˫ĿͼУṹ +//双目图像校正参数结构体 typedef struct tagNET_DVR_BINOC_RECTIFY_PARAM { - float fCamInternalMatrix[3][3]; //ڲξ󣬰༰ - float fDistCoeffs[8]; //ͷϵ - float fRotateMatrix[3][3]; //Уת - float fProjectMatrix[3][4]; //УͶӰ - BYTE byRes[64]; // + float fCamInternalMatrix[3][3]; //相机内参矩阵,包括焦距及主点坐标 + float fDistCoeffs[8]; //镜头畸变系数 + float fRotateMatrix[3][3]; //校正后的旋转矩阵 + float fProjectMatrix[3][4]; //校正后的投影矩阵 + BYTE byRes[64]; //保留 }NET_DVR_BINOC_RECTIFY_PARAM, *LPNET_DVR_BINOC_RECTIFY_PARAM; -//У +//左右相机校正参数 typedef struct _tagNET_DVR_BV_CORRECT_PARAM { - DWORD dwSize; //ṹС - float fReprojectMatrix[4][4]; //ͶӰ - NET_DVR_BINOC_RECTIFY_PARAM struLCamParam; //У - NET_DVR_BINOC_RECTIFY_PARAM struRCamParam; //У - BYTE byLensType; //ͷͣ0-δ֪,1-8mm,2-12mm,3-16mm,4-25mm,5-35mm,6-50mm,7-4mm,8-6mm,9-2.0mm,10-2.8mm,11-4.3mm - BYTE byRes1[3]; // - /*RotateMatrix ˫Ŀ궨ת, - TransMatrixƽƾ, - RotateMatrixTransMatrixλùϵ*/ - float fRotateMatrix[3][3]; //ת - float fTransMatrix[3]; //ƽƾ - DWORD dwOriImgWidth; //ԭʼ궨ͼĿ1920*1080ֱʵͼΪ1920 - DWORD dwOriImgHeight; //ԭʼ궨ͼĸߣ1920*1080ֱʵͼΪ1080 - BYTE byRes[196]; // + DWORD dwSize; //结构大小 + float fReprojectMatrix[4][4]; //重投影矩阵 + NET_DVR_BINOC_RECTIFY_PARAM struLCamParam; //左相机校正参数 + NET_DVR_BINOC_RECTIFY_PARAM struRCamParam; //右相机校正参数 + BYTE byLensType; //镜头焦距类型,0-未知,1-8mm,2-12mm,3-16mm,4-25mm,5-35mm,6-50mm,7-4mm,8-6mm,9-2.0mm,10-2.8mm,11-4.3mm + BYTE byRes1[3]; //保留 + /*RotateMatrix 是双目标定后左相机相对于右相机的旋转矩阵, + TransMatrix是平移矩阵, + RotateMatrix和TransMatrix联合起来描述的是左相机相对于右相机的位置关系*/ + float fRotateMatrix[3][3]; //旋转矩阵 + float fTransMatrix[3]; //平移矩阵 + DWORD dwOriImgWidth; //原始标定图像的宽(如果是1920*1080分辨率的图像,则为1920) + DWORD dwOriImgHeight; //原始标定图像的高(如果是1920*1080分辨率的图像,则为1080) + BYTE byRes[196]; //保留 } NET_DVR_BV_CORRECT_PARAM,*LPNET_DVR_BV_CORRECT_PARAM; -//Ƶ +//输出视频类型 typedef struct tagNET_DVR_OUTPUT_VIDEO_TYPE { - DWORD dwSize; //ṹС - BYTE byType; //Ƶͣ1-ƴͼ2-ͼ - BYTE byRes[63]; // + DWORD dwSize; //结构大小 + BYTE byType; //输出视频类型,1-拼接图,2-深度图 + BYTE byRes[63]; //保留 }NET_DVR_OUTPUT_VIDEO_TYPE,*LPNET_DVR_OUTPUT_VIDEO_TYPE; -#define MAX_CHECK_485CHAN 64 //485Լ豸ͨŸ +#define MAX_CHECK_485CHAN 64 //485自检设备通道号个数 typedef struct tagNET_DVR_DEVICE_SELF_CHECK_STATE { DWORD dwSize; - DWORD dwRS485Chan[MAX_CHECK_485CHAN];//RS485ͨͨţֵʾͨţλʾλ - DWORD dwSensorChan[4];//ģЧͨţλʾ - BYTE byRes[32]; // ֽ + DWORD dwRS485Chan[MAX_CHECK_485CHAN];//RS485通断情况有问题的通道号,值表示通道号,位表示槽位号 + DWORD dwSensorChan[4];//模拟量无效的通道号,按位表示 + BYTE byRes[32]; // 保留字节 }NET_DVR_DEVICE_SELF_CHECK_STATE, *LPNET_DVR_DEVICE_SELF_CHECK_STATE; -//ȫȡֵ +//设置完全获取出厂值 typedef struct tagNET_DVR_COMPLETE_RESTORE_INFO_ { - DWORD dwSize ; //ṹ峤 - DWORD dwChannel; //ͨ + DWORD dwSize ; //结构体长度 + DWORD dwChannel; //通道号 BYTE byRes[64]; }NET_DVR_COMPLETE_RESTORE_INFO, *LPNET_DVR_COMPLETE_RESTORE_INFO; typedef struct tagNET_DVR_UPLOAD_PICTURE_INFO { DWORD dwSize; - DWORD dwChannel; //ͼƬӦͨ - BYTE byPictureType;//ͼƬʽ,0-bmp1-jpeg2-PNG 3-SWF 4-GIF + DWORD dwChannel; //图片对应的通道号 + BYTE byPictureType;//图片格式,0-bmp,1-jpeg,2-PNG 3-SWF 4-GIF BYTE byRes1[3]; - NET_DVR_TIME_V30 struTime; //ͼƬʱ - char* sPictureBuffer;//ͼƬ - DWORD dwPictureLength;//ͼƬ - DWORD dwPicMangeNo; //ͼƬ - BYTE sPicName[NAME_LEN]; //ͼƬ - BYTE byUseType; //ͼƬʹͣ0-ͼƬ 1-logoͼƬ + NET_DVR_TIME_V30 struTime; //图片生成时间 + char* sPictureBuffer;//图片缓冲区 + DWORD dwPictureLength;//图片长度 + DWORD dwPicMangeNo; //图片管理号 + BYTE sPicName[NAME_LEN]; //图片名称 + BYTE byUseType; //图片使用类型:0-屏保图片 1-开机logo图片 BYTE byRes[91]; }NET_DVR_UPLOAD_PICTURE_INFO,*LPNET_DVR_UPLOAD_PICTURE_INFO; @@ -41316,103 +41316,103 @@ typedef struct tagNET_DVR_UPLOAD_FILE_RET typedef struct tagNET_DVR_FACE_EXTRA_INFO { - NET_VCA_RECT struVcaRect[MAX_FACE_PIC_NUM]; //ͼϢ + NET_VCA_RECT struVcaRect[MAX_FACE_PIC_NUM]; //人脸子图坐标信息 BYTE byRes[64]; }NET_DVR_FACE_EXTRA_INFO, *LPNET_DVR_FACE_EXTRA_INFO; typedef union tagNET_DVR_PIC_EXTRA_INFO_UNION { - BYTE byUnionLen[544]; //峤ȣʵ - NET_DVR_FACE_EXTRA_INFO struFaceExtraInfo; //Ϣ + BYTE byUnionLen[544]; //联合体长度,无实际意义 + NET_DVR_FACE_EXTRA_INFO struFaceExtraInfo; //人脸侦测信息 }NET_DVR_PIC_EXTRA_INFO_UNION, *LPNET_DVR_PIC_EXTRA_INFO_UNION; -typedef struct tagNET_DVR_FIND_PICTURE_V40 //ҽṹ +typedef struct tagNET_DVR_FIND_PICTURE_V40 //查找结果结构体 { - char sFileName[PICTURE_NAME_LEN];//ͼƬ - NET_DVR_TIME struTime;//ͼƬʱ - DWORD dwFileSize;//ͼƬĴС - char sCardNum[CARDNUM_LEN_V30]; // - BYTE byPlateColor ;//οṹ VCA_PLATE_COLOR - BYTE byVehicleLogo;//οṹ VLR_VEHICLE_CLASS - BYTE byFileType ; //ļͣ :0ʱץͼ1 ƶץͼ 2 ץͼ3 | ƶץͼ 4 & ƶץͼ 6 ֶץͼ ,9-ͼƬ,10- PIR11- ߱12- ȱ, 0xa Ԥʱͼ0xd , 0xe Խ⣬0xf ⣬0x10 , 0x11-豸ػطʱͼ, 0x12-, 0x32-, 0x33-, 0x34-ҵѯ - BYTE byRecogResult ;//ʶοṹVTR_RESULT - char sLicense[MAX_LICENSE_LEN/*16*/]; //ƺ - BYTE byEventSearchStatus; //ͼƬʾͬһҽʱ0-ʾûͼƬϢ1-ʾ滹ͼƬϢܹͼƬϢһ״̬Ϊ0ͼƬ - BYTE byRes1[2]; // ֽ - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) - float fFaceSnapTemperature; // Ŀץ¶ϢȷС1λ ( + 100 * 10 ȡ䣩λ̶Ϊ϶ȣ棩byFileTypeΪ0x25-ץʱЧ¸ֶΪ0ֵ - BYTE byRes[68]; // ֽ - NET_DVR_PIC_EXTRA_INFO_UNION uPicExtraInfo; //ͼƬϢ + char sFileName[PICTURE_NAME_LEN];//图片名 + NET_DVR_TIME struTime;//图片的时间 + DWORD dwFileSize;//图片的大小 + char sCardNum[CARDNUM_LEN_V30]; //卡号 + BYTE byPlateColor ;//参考结构 VCA_PLATE_COLOR + BYTE byVehicleLogo;//参考结构 VLR_VEHICLE_CLASS + BYTE byFileType ; //文件类型, :0定时抓图1 移动侦测抓图 2 报警抓图3 报警 | 移动侦测抓图 4 报警 & 移动侦测抓图 6 手动抓图 ,9-智能图片,10- PIR报警,11- 无线报警,12- 呼救报警, 0xa 预览时截图,0xd 人脸侦测, 0xe 越界侦测,0xf 入侵区域侦测,0x10 场景变更侦测, 0x11-设备本地回放时截图, 0x12-智能侦测, 0x32-防区报警, 0x33-紧急求助, 0x34-业务咨询 + BYTE byRecogResult ;//识别结果参考结构VTR_RESULT + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码 + BYTE byEventSearchStatus; //连续图片表示同一查找结果的时候,0-表示后面没有图片信息,1-表示后面还有图片信息。总共图片信息包括最后一张状态为0的图片。 + BYTE byRes1[2]; // 保留字节 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + float fFaceSnapTemperature; // 目标抓拍温度信息,精确到小数点后1位 ,(浮点数 + 100) * 10 取正数传输),单位固定为摄氏度(℃)。当byFileType为0x25-人脸抓拍时有效,其余情况下该字段为0值 + BYTE byRes[68]; // 保留字节 + NET_DVR_PIC_EXTRA_INFO_UNION uPicExtraInfo; //图片附件信息 }NET_DVR_FIND_PICTURE_V40,*LPNET_DVR_FIND_PICTURE_V40; -typedef struct tagNET_DVR_FIND_PICTURE_V50 //ҽṹ +typedef struct tagNET_DVR_FIND_PICTURE_V50 //查找结果结构体 { - char sFileName[PICTURE_NAME_LEN];//ͼƬ - NET_DVR_TIME struTime;//ͼƬʱ - DWORD dwFileSize;//ͼƬĴС - char sCardNum[CARDNUM_LEN_V30]; // - BYTE byPlateColor;//οṹ VCA_PLATE_COLOR - BYTE byVehicleLogo;//οṹ VLR_VEHICLE_CLASS - BYTE byFileType; //ļͣ :0ʱץͼ1 ƶץͼ 2 ץͼ3 | ƶץͼ 4 & ƶץͼ 6 ֶץͼ ,9-ͼƬ,10- PIR11- ߱12- ȱ,\ - 0xa Ԥʱͼ0xd , 0xe Խ⣬0xf ⣬0x10 , 0x11-豸ػطʱͼ, 0x12-, 0x70-ͨʱץͼ - BYTE byRecogResult;//ʶοṹVTR_RESULT - char sLicense[MAX_LICENSE_LEN/*16*/]; //ƺ - BYTE byEventSearchStatus; //ͼƬʾͬһҽʱ0-ʾûͼƬϢ1-ʾ滹ͼƬϢܹͼƬϢһ״̬Ϊ0ͼƬ - NET_DVR_ADDRESS struAddr; //ͼƬڵĵַϢͼƬʱõ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cTimeDifferenceH; //UTCʱСʱ-12 ... +14 - char cTimeDifferenceM; //UTCʱӣ-30,0, 30, 45 - BYTE byRes[253]; // ֽ - NET_DVR_PIC_EXTRA_INFO_UNION uPicExtraInfo; //ͼƬϢ + char sFileName[PICTURE_NAME_LEN];//图片名 + NET_DVR_TIME struTime;//图片的时间 + DWORD dwFileSize;//图片的大小 + char sCardNum[CARDNUM_LEN_V30]; //卡号 + BYTE byPlateColor;//参考结构 VCA_PLATE_COLOR + BYTE byVehicleLogo;//参考结构 VLR_VEHICLE_CLASS + BYTE byFileType; //文件类型, :0定时抓图1 移动侦测抓图 2 报警抓图3 报警 | 移动侦测抓图 4 报警 & 移动侦测抓图 6 手动抓图 ,9-智能图片,10- PIR报警,11- 无线报警,12- 呼救报警,\ + 0xa 预览时截图,0xd 人脸侦测, 0xe 越界侦测,0xf 入侵区域侦测,0x10 场景变更侦测, 0x11-设备本地回放时截图, 0x12-智能侦测, 0x70-通道定时抓图 + BYTE byRecogResult;//识别结果参考结构VTR_RESULT + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码 + BYTE byEventSearchStatus; //连续图片表示同一查找结果的时候,0-表示后面没有图片信息,1-表示后面还有图片信息。总共图片信息包括最后一张状态为0的图片。 + NET_DVR_ADDRESS struAddr; //图片所在的地址信息,图片下载时用到 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14 + char cTimeDifferenceM; //与UTC的时差(分钟),-30,0, 30, 45 + BYTE byRes[253]; // 保留字节 + NET_DVR_PIC_EXTRA_INFO_UNION uPicExtraInfo; //图片附件信息 }NET_DVR_FIND_PICTURE_V50, *LPNET_DVR_FIND_PICTURE_V50; typedef struct tagNET_DVR_THUMBNAILS_COND { - DWORD dwSize; // ṹС - NET_DVR_STREAM_INFO struStreamInfo; //Ϣ - BYTE bySearchDataType; // 0-I֡ݣCVR һ·£1s28I֡1-ͼƬ - BYTE byRes[3]; // ֽ - NET_DVR_TIME_V30 struStartTime; //ҿʼʱ - NET_DVR_TIME_V30 struStopTime; // ҽʱ - DWORD dwIntervalTime; //ʱ䣬λ룬Χ0~24*60*60ҽʱڲҿʼʱ䣬0ֵЧ - BYTE byRes1[512]; // ֽ + DWORD dwSize; // 结构体大小 + NET_DVR_STREAM_INFO struStreamInfo; //流信息 + BYTE bySearchDataType; // 查找数据类型 0-I帧数据(CVR 一路的情况下,1s最多28个I帧),1-图片数据 + BYTE byRes[3]; // 保留字节 + NET_DVR_TIME_V30 struStartTime; //查找开始时间 + NET_DVR_TIME_V30 struStopTime; // 查找结束时间 + DWORD dwIntervalTime; //间隔时间,单位秒,范围:0~24*60*60,若查找结束时间等于查找开始时间,则填0,填其他值无效 + BYTE byRes1[512]; // 保留字节 }NET_DVR_THUMBNAILS_COND, *LPNET_DVR_THUMBNAILS_COND; -typedef struct tagNET_DVR_THUMBNAILS_RESULT //ҽṹ +typedef struct tagNET_DVR_THUMBNAILS_RESULT //查找结果结构体 { - BYTE byResultDataType; // ҽ0-I֡ݣCVR һ·£1s28I֡1-ϵͳͷݣ 2-ͼƬ - BYTE byIFrameType; // I֡ͣ0-֡1-οֻ֡벥ſ⣬DzҪתΪͼƬʾ - BYTE byRes1[2]; // ֽ - NET_DVR_TIME_SEARCH struTime; //ʱ - BYTE byRes[252]; // ֽ - DWORD dwFileSize; //ݴС - char* pBuffer; //Ϣ(ͺṹNET_DVR_THUMBNAILS_RESULT ֶ byResultDataType ֵ) + BYTE byResultDataType; // 查找结果数据类型0-I帧数据(CVR 一路的情况下,1s最多28个I帧),1-系统头数据, 2-图片数据 + BYTE byIFrameType; // I帧类型,0-数据帧,1-参考帧(本数据只需送入播放库,但是不需要转为图片显示) + BYTE byRes1[2]; // 保留字节 + NET_DVR_TIME_SEARCH struTime; //数据时间 + BYTE byRes[252]; // 保留字节 + DWORD dwFileSize; //数据大小 + char* pBuffer; //数据信息(数据类型和条件结构体中NET_DVR_THUMBNAILS_RESULT 的字段 byResultDataType 值相关) }NET_DVR_THUMBNAILS_RESULT, *LPNET_DVR_THUMBNAILS_RESULT; typedef struct tagNET_DVR_REGIONENTRANCE_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1-100] + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] /* - Ŀֶ֧꣬ѡ嶨Ϊ - 0~Ŀ꣨ʾĿ꣬Ŀ궼м⣩ - 0x01 ~ ˣ - 0x02 ~ - 0x04 ~ - ֶֶ֧ѡλȡֵ3ʾ1+2. + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. */ BYTE byDetectionTarget; - BYTE byAlarmConfidence; // Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRecordConfidence; // ¼Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRes[60]; // + BYTE byAlarmConfidence; // 报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; // 录像置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRes[60]; //保留 }NET_DVR_REGIONENTRANCE_REGION, *LPNET_DVR_REGIONENTRANCE_REGION; typedef struct tagNET_DVR_REGION_ENTRANCE_DETECTION { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- - BYTE byEnableHumanMisinfoFilter;// ȥ 0-ã1- - BYTE byEnableVehicleMisinfoFilter;// óȥ 0-ã1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byEnableHumanMisinfoFilter;// 启用人体去误报 0-不启用,1-启用 + BYTE byEnableVehicleMisinfoFilter;// 启用车辆去误报 0-不启用,1-启用 BYTE byRes1[1]; NET_DVR_REGIONENTRANCE_REGION struRegion[MAX_REGION_NUM]; BYTE byRes2[128]; @@ -41421,83 +41421,83 @@ typedef struct tagNET_DVR_REGION_ENTRANCE_DETECTION typedef struct tagNET_DVR_SMART_REGION_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - DWORD dwRegion; //ID + DWORD dwChannel; //通道号 + DWORD dwRegion; //区域ID号 }NET_DVR_SMART_REGION_COND, *LPNET_DVR_SMART_REGION_COND; typedef struct tagNET_DVR_ENTRANCE_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1-100] + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] BYTE byDetectionTarget; - BYTE byAlarmConfidence; //Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRecordConfidence; //¼Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRes[60]; // + BYTE byAlarmConfidence; //报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; //录像置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRes[60]; //保留 }NET_DVR_ENTRANCE_REGION, *LPNET_DVR_ENTRANCE_REGION; typedef struct tagNET_DVR_DENSEFOGDETECTION_CFG { DWORD dwSize; - BYTE byEnable;//ʹ - BYTE bySensitivity; //ȲΧ[0,100] + BYTE byEnable;//使能 + BYTE bySensitivity; //灵敏度参数,范围[0,100] BYTE byRes[258]; }NET_DVR_DENSEFOGDETECTION_CFG, *LPNET_DVR_DENSEFOGDETECTION_CFG; typedef struct tagNET_DVR_EVENT_TRIGGER { - DWORD dwSize;//ṹС - NET_DVR_HANDLEEXCEPTION_V41 struHandleException; //쳣ʽ - DWORD dwRelRecordChan[MAX_CHANNUM_V40]; //ʵʴ¼ֵͨʾýУ±0ʼ˳ȡм0xffffffffЧ - NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //õԤõϢ - NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //ѲͨϢ - NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //̨ͨϢ - BYTE byDirection;//0-1-ȫ2-3- + DWORD dwSize;//结构体大小 + NET_DVR_HANDLEEXCEPTION_V41 struHandleException; //异常处理方式 + DWORD dwRelRecordChan[MAX_CHANNUM_V40]; //实际触发录像通道,按值表示,采用紧凑型排列,从下标0开始顺序读取,中间遇到0xffffffff则后续无效。 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //启用的预置点信息 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //启用巡航功能通道的信息 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //调用云台的通道信息 + BYTE byDirection;//触发方向:0-保留;1-全部;2-正向;3-反向 BYTE byRes2[255]; }NET_DVR_EVENT_TRIGGER,*LPNET_DVR_EVENT_TRIGGER; typedef struct tagNET_DVR_EVENT_SCHEDULE { - DWORD dwSize;//ṹС - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ*/ - NET_DVR_SCHEDTIME struHolidayAlarmTime[MAX_TIMESEGMENT_V30]; /*ղʱ*/ - BYTE bySceneID[MAX_DAYS][MAX_TIMESEGMENT_V30];//,Ŀǰ֧1~40ΪЧó벼ʱÿʱһһӦ + DWORD dwSize;//结构体大小 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + NET_DVR_SCHEDTIME struHolidayAlarmTime[MAX_TIMESEGMENT_V30]; /*假日布防时间*/ + BYTE bySceneID[MAX_DAYS][MAX_TIMESEGMENT_V30];//场景号,目前支持1~4场景,0为无效。该场景号与布防时间中每个时间段一一对应。 BYTE byRes[72]; }NET_DVR_EVENT_SCHEDULE,*LPNET_DVR_EVENT_SCHEDULE; typedef struct tagNET_DVR_ANR_ARMING_HOST { DWORD dwSize;//sizeof(NET_DVR_ANR_ ARMING_HOST) - NET_DVR_IPADDR struANRArmingHostIpAddr; //IPַ - WORD wANRAlarmHostPort; //˿ں - BYTE byANRAlarmType;//ͣ 0-SDK˽жӣ1-ehome - BYTE byConfirmMechanismEnabled;// ǷȷϻƷʽӣ0-1-ûп 2- - BYTE byRes[512]; //ֽ + NET_DVR_IPADDR struANRArmingHostIpAddr; //断网续传的主机IP地址 + WORD wANRAlarmHostPort; //断网续传的主机布防端口号 + BYTE byANRAlarmType;//断网续传连接类型, 0-SDK私有断网续传连接,1-ehome断网续传连接 + BYTE byConfirmMechanismEnabled;// 是否开启确认机制方式布防连接,0-保留,1-没有开启 2-开启 + BYTE byRes[512]; //保留字节 }NET_DVR_ANR_ARMING_HOST, *LPNET_DVR_ANR_ARMING_HOST; typedef struct tagNET_DVR_REGIONEXITING_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1-100] + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] /* - Ŀֶ֧꣬ѡ嶨Ϊ - 0~Ŀ꣨ʾĿ꣬Ŀ궼м⣩ - 0x01 ~ ˣ - 0x02 ~ - 0x04 ~ - ֶֶ֧ѡλȡֵ3ʾ1+2. + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. */ BYTE byDetectionTarget; - BYTE byAlarmConfidence; //Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRecordConfidence; //¼Ŷ, 0-,1-ϵ,2-ϸ,3- - BYTE byRes[60]; // + BYTE byAlarmConfidence; //报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; //录像置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRes[60]; //保留 }NET_DVR_REGIONEXITING_REGION, *LPNET_DVR_REGIONEXITING_REGION; typedef struct tagNET_DVR_REGION_EXITING_DETECTION { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- - BYTE byEnableHumanMisinfoFilter;// ȥ 0-ã1- - BYTE byEnableVehicleMisinfoFilter;// óȥ 0-ã1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byEnableHumanMisinfoFilter;// 启用人体去误报 0-不启用,1-启用 + BYTE byEnableVehicleMisinfoFilter;// 启用车辆去误报 0-不启用,1-启用 BYTE byRes1[1]; NET_DVR_REGIONEXITING_REGION struRegion[MAX_REGION_NUM]; BYTE byRes2[128]; @@ -41505,16 +41505,16 @@ typedef struct tagNET_DVR_REGION_EXITING_DETECTION typedef struct tagNET_DVR_LOITERING_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1-100] - BYTE byTimeThreshold; //ʱֵΧ[0-10]λs - BYTE byRes[62]; // + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byTimeThreshold; //时间阈值,范围[0-10],单位:s + BYTE byRes[62]; //保留 }NET_DVR_LOITERING_REGION, *LPNET_DVR_LOITERING_REGION; typedef struct tagNET_DVR_LOITERING_DETECTION { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 BYTE byRes1[3]; NET_DVR_LOITERING_REGION struRegion[MAX_REGION_NUM]; BYTE byRes2[128]; @@ -41522,14 +41522,14 @@ typedef struct tagNET_DVR_LOITERING_DETECTION typedef struct tagNET_DVR_GROUPDETECTION_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE byObjectOccup; //ռȣΧ[1-100] - BYTE bySensitivityLevel; //ȣΧ1-100Ĭ65 - BYTE byDurationTime; //ʱ䣬Χ1-600룬Ĭ3 - BYTE byFilterTime; //ʱ䣬Χ1-10ӣʾڴʱڲٴ - BYTE byMinTriggerNumber; //ʹΧ2-50ˣĬ5 - BYTE byLinkageTime; //ʱ䣬Χ5-30룬Ĭ5루ǹתλúͣʱ䣬òǹǷͬһ˻¼Բͬ - BYTE byRes[58]; // + NET_VCA_POLYGON struRegion;//区域范围 + BYTE byObjectOccup; //占比,范围[1-100] + BYTE bySensitivityLevel; //灵敏度,范围1-100,默认65 + BYTE byDurationTime; //持续时间,范围1-600秒,默认3秒 + BYTE byFilterTime; //过滤时间,范围1-10分钟(表示,触发报警后,在此时间内不再触发报警) + BYTE byMinTriggerNumber; //最低触发人数,范围2-50人,默认5人 + BYTE byLinkageTime; //联动球机检测时间,范围5-30秒,默认5秒(枪机触发后,联动球机转到触发报警的位置后停留的时间,该配置不区分枪机球机是否同一个账户登录,可以不同) + BYTE byRes[58]; //保留 }NET_DVR_GROUPDETECTION_REGION, *LPNET_DVR_GROUPDETECTION_REGION; typedef struct tagNET_DVR_POS_HIDDEN_INFORMATION { @@ -41540,7 +41540,7 @@ typedef struct tagNET_DVR_POS_HIDDEN_INFORMATION typedef struct tagNET_DVR_HIDDEN_INFORMATION_CFG { DWORD dwSize; - BYTE byFuncType;//0-Pos + BYTE byFuncType;//0-Pos功能 BYTE Res1[3]; NET_DVR_POS_HIDDEN_INFORMATION struPosInfo; BYTE byRes[1024]; @@ -41548,8 +41548,8 @@ typedef struct tagNET_DVR_HIDDEN_INFORMATION_CFG typedef struct tagNET_DVR_GROUP_DETECTION { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 BYTE byRes1[3]; NET_DVR_GROUPDETECTION_REGION struRegion[MAX_REGION_NUM]; BYTE byRes2[128]; @@ -41557,24 +41557,24 @@ typedef struct tagNET_DVR_GROUP_DETECTION typedef struct tagNET_DVR_RAPIDMOVE_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1-100] + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] /* - Ŀֶ֧꣬ѡ嶨Ϊ - 0~Ŀ꣨ʾĿ꣬Ŀ궼м⣩ - 0x01 ~ ˣ - 0x02 ~ - 0x04 ~ - ֶֶ֧ѡλȡֵ3ʾ1+2. + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. */ BYTE byDetectionTarget; - BYTE byRes[62]; // + BYTE byRes[62]; //保留 }NET_DVR_RAPIDMOVE_REGION, *LPNET_DVR_RAPIDMOVE_REGION; typedef struct tagNET_DVR_RAPIDMOVE_DETECTION { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 BYTE byRes1[3]; NET_DVR_RAPIDMOVE_REGION struRegion[MAX_REGION_NUM]; BYTE byRes2[128]; @@ -41582,16 +41582,16 @@ typedef struct tagNET_DVR_RAPIDMOVE_DETECTION typedef struct tagNET_DVR_PARKING_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1-100] - BYTE byTimeThreshold; //ʱֵΧ[0-10]λs - BYTE byRes[62]; // + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byTimeThreshold; //时间阈值,范围[0-10],单位:s + BYTE byRes[62]; //保留 }NET_DVR_PARKING_REGION, *LPNET_DVR_PARKING_REGION; typedef struct tagNET_DVR_PARKING_DETECTION { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 BYTE byRes1[3]; NET_DVR_PARKING_REGION struRegion[MAX_REGION_NUM]; BYTE byRes2[128]; @@ -41599,18 +41599,18 @@ typedef struct tagNET_DVR_PARKING_DETECTION typedef struct tagNET_DVR_UNATTENDED_BAGGAGE_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1-100] - BYTE byTimeThreshold; //ʱֵΧ[0-10]λs - WORD wTimeThreshold;//ʱֵΧ[5-3600], λs - BYTE byTimeThresholdMode;//(ֻдֶΣڼ)0-ֶbyTimeThresholdЧ1-ֶwTimeThresholdЧ - BYTE byRes[59]; // + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byTimeThreshold; //时间阈值,范围[0-10],单位:s + WORD wTimeThreshold;//时间阈值,范围[5-3600], 单位:s + BYTE byTimeThresholdMode;//(只写字段,用于兼容区域)0-字段byTimeThreshold生效,1-字段wTimeThreshold生效 + BYTE byRes[59]; //保留留 }NET_DVR_UNATTENDED_BAGGAGE_REGION, *LPNET_DVR_UNATTENDED_BAGGAGE_REGION; typedef struct tagNET_DVR_UNATTENDED_BAGGAGE_DETECTION { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 BYTE byRes1[3]; NET_DVR_UNATTENDED_BAGGAGE_REGION struRegion[MAX_REGION_NUM]; BYTE byRes2[128]; @@ -41618,18 +41618,18 @@ typedef struct tagNET_DVR_UNATTENDED_BAGGAGE_DETECTION typedef struct tagNET_DVR_ATTENDED_BAGGAGE_REGION { - NET_VCA_POLYGON struRegion;//Χ - BYTE bySensitivity; //ȲΧ[1-100] - BYTE byTimeThreshold; //ʱֵΧ[0-10]λs - WORD wTimeThreshold;//ʱֵΧ[5-3600], λs - BYTE byTimeThresholdMode;//(ֻдֶΣڼ)0-ֶbyTimeThresholdЧ1-ֶwTimeThresholdЧ - BYTE byRes[59]; // + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byTimeThreshold; //时间阈值,范围[0-10],单位:s + WORD wTimeThreshold;//时间阈值,范围[5-3600], 单位:s + BYTE byTimeThresholdMode;//(只写字段,用于兼容区域)0-字段byTimeThreshold生效,1-字段wTimeThreshold生效 + BYTE byRes[59]; //保留 }NET_DVR_ATTENDED_BAGGAGE_REGION, *LPNET_DVR_ATTENDED_BAGGAGE_REGION; typedef struct tagNET_DVR_ATTENDED_BAGGAGE_DETECTION { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 BYTE byRes1[3]; NET_DVR_ATTENDED_BAGGAGE_REGION struRegion[MAX_REGION_NUM]; BYTE byRes2[128]; @@ -41638,18 +41638,18 @@ typedef struct tagNET_DVR_ATTENDED_BAGGAGE_DETECTION typedef struct tagNET_DVR_REGION_CLIP_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - DWORD dwStreamType; //ͣ0- 1- 2- + DWORD dwChannel; //通道号 + DWORD dwStreamType; //码流类型:0- 主码流,1- 子码流,2- 第三码流 BYTE byRes[8]; }NET_DVR_REGION_CLIP_COND, *LPNET_DVR_REGION_CLIP_COND; typedef struct tagNET_DVR_REGION_CLIP_CFG { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 BYTE byRes1[3]; - WORD wResolutionWidth; //ֱʵij - WORD wResolutionHeight; //ֱʵĿ + WORD wResolutionWidth; //分辨率的长 + WORD wResolutionHeight; //分辨率的宽 NET_VCA_POLYGON struRegion[MAX_REGION_NUM]; BYTE byRes2[64]; }NET_DVR_REGION_CLIP_CFG, *LPNET_DVR_REGION_CLIP_CFG; @@ -41657,850 +41657,850 @@ typedef struct tagNET_DVR_REGION_CLIP_CFG #define MAX_DIALNUM_LENGTH 32 typedef struct tagNET_DVR_WIRELESSDIAL_CFG { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿ߲ţ0-1- - BYTE byDialMode; // 0-ԶAuto1-ֶManualĬԶֶģʽ¿òżƻʱ䡢ֶ - BYTE byNetworkMode; //0-Զ1-4Gȣ2-3Gȣ3-ֶл2G4-ֶл3G5-ֶл4G6- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否启用无线拨号:0-否,1- 是 + BYTE byDialMode; // 0-自动(Auto)、1-手动(Manual),默认自动,手动模式下可设置拨号计划、下线时间、手动拨号 + BYTE byNetworkMode; //0-自动,1-4G优先,2-3G优先,3-手动切换2G,4-手动切换3G,5-手动切换4G,6-有线优先 BYTE byRes1; - BYTE byDialNum[MAX_DIALNUM_LENGTH]; //ź - BYTE byUserName[NAME_LEN]; //û - BYTE byPassword[NAME_LEN]; // + BYTE byDialNum[MAX_DIALNUM_LENGTH]; //拨号号码 + BYTE byUserName[NAME_LEN]; //用户名 + BYTE byPassword[NAME_LEN]; //密码 BYTE byAPNName[NAME_LEN]; //APN - BYTE byUIMCardNum[NAME_LEN]; //ֻ - BYTE byVerifProtocol; // 0-ԶAuto1-CHAP2-PAP + BYTE byUIMCardNum[NAME_LEN]; //手机号码 + BYTE byVerifProtocol; // 0-自动(Auto),1-CHAP,2-PAP BYTE byRes2; WORD wMTU; //MTU - DWORD dwOffineTime; //ʱ䣬30-65535λ룬ֶģʽЧ - BYTE byNetAPN[NAME_LEN]; //˽רAPNֶ - BYTE byEnabled4G; //Ƿ4Gܣ0-1- - BYTE byEnabledDNS; //ǷDNSܣ0-1- + DWORD dwOffineTime; //下线时间,30-65535,单位秒,手动模式下有效 + BYTE byNetAPN[NAME_LEN]; //私有专网APN字段配置 + BYTE byEnabled4G; //是否开启4G功能:0-否,1- 是 + BYTE byEnabledDNS; //是否开启DNS功能:0-否,1- 是 BYTE byRes3[30]; }NET_DVR_WIRELESSDIAL_CFG, *LPNET_DVR_WIRELESSDIAL_CFG; typedef struct tagNET_DVR_WIRELESSDIAL_SCHEDULE { - DWORD dwSize;//ṹС - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*ʱ*/ - NET_DVR_SCHEDTIME struHolidayAlarmTime[MAX_TIMESEGMENT_V30]; //ղʱ + DWORD dwSize;//结构体大小 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + NET_DVR_SCHEDTIME struHolidayAlarmTime[MAX_TIMESEGMENT_V30]; //假日布防时间段 BYTE byRes[128]; }NET_DVR_WIRELESSDIAL_SCHEDULE,*LPNET_DVR_WIRELESSDIAL_SCHEDULE; #define MAX_LENGTH_32 32 typedef struct tagNET_DVR_WIRELESSDIAL_STATUS { - DWORD dwSize;//ṹС - BYTE byRealtimeMode[MAX_LENGTH_32]; //ʵʱģʽ(CDMA 1xEVDOHYBRIDGSMGPRSEDGEWCDMAHSDPAHSUPAHSPATDSCDMATD-LTEFDD-LTE) - BYTE byUIMStatus[MAX_LENGTH_32]; /*UIM״̬(UNKNOWN-δ֪,VALID-Ч,NOVALID-Ч,ROAM-,NOEXIST-, - WRONGPINCODE-PIN,NONETWORKSERVICE-, - ONLYSUPPORTEMERGENCYCALL-ֽ֧УPINCODELOCKEDPIN*/ - DWORD dwSignalQuality; //ź1-5 - BYTE byDialStatus[MAX_LENGTH_32]; /*״̬(disconnect-ŶϿ,dialing-ڲ,success-ųɹ,shmError-쳣, - certificationFailure-֤ʧ,invalidDialingCharacters-ַЧ, - networkTimeout C糬ʱ,wirelessModemErrorģ,SIMError---SIM,,networkError-unknown Cδ֪)*/ - NET_DVR_IPADDR struIpAddr; //IPַ - NET_DVR_IPADDR struIPMask; //ַ - NET_DVR_IPADDR struGatewayIPMask; //صַ - NET_DVR_IPADDR struDnsServerIpAddr; //DNSַ + DWORD dwSize;//结构体大小 + BYTE byRealtimeMode[MAX_LENGTH_32]; //实时模式(CDMA 1x、EVDO、HYBRID、GSM、GPRS、EDGE、WCDMA、HSDPA、HSUPA、HSPA、TDSCDMA、TD-LTE、FDD-LTE) + BYTE byUIMStatus[MAX_LENGTH_32]; /*UIM状态(UNKNOWN-未知,VALID-有效,NOVALID-无效,ROAM-漫游,NOEXIST-不存在, + WRONGPINCODE-PIN码错误,NONETWORKSERVICE-无网络服务, + ONLYSUPPORTEMERGENCYCALL-网络仅支持紧急呼叫,PINCODELOCKED—PIN码锁定*/ + DWORD dwSignalQuality; //信号质量,1-5 + BYTE byDialStatus[MAX_LENGTH_32]; /*拨号状态码(disconnect-拨号断开,dialing-正在拨号,success-拨号成功,shmError-拨号异常, + certificationFailure-认证失败,invalidDialingCharacters-拨号字符无效, + networkTimeout –网络超时,wirelessModemError—无线模块错误,SIMError---SIM卡错误,,networkError-网络错误,unknown –未知错误)*/ + NET_DVR_IPADDR struIpAddr; //IP地址 + NET_DVR_IPADDR struIPMask; //掩码地址 + NET_DVR_IPADDR struGatewayIPMask; //网关地址 + NET_DVR_IPADDR struDnsServerIpAddr; //DNS地址 BYTE byRes[256]; }NET_DVR_WIRELESSDIAL_STATUS,*LPNET_DVR_WIRELESSDIAL_STATUS; typedef struct tagNET_DVR_WIRELESSDIAL_CONNECT { - DWORD dwSize;//ṹС - DWORD dwInterface; //ţ1,2 - BYTE byEnableConnect; //Ƿ0-1- + DWORD dwSize;//结构体大小 + DWORD dwInterface; //网卡编号,1,2…… + BYTE byEnableConnect; //是否连网,0-断网,1-连网 BYTE byRes[255]; }NET_DVR_WIRELESSDIAL_CONNECT_PARAM,*LPNET_DVR_WIRELESSDIAL_CONNECT_PARAM; typedef struct tagNET_DVR_LITESTORAGE { - DWORD dwSize;//ṹС - BYTE byEnable; /*ʹ 0-,1-*/ - BYTE byStorageTime;/*洢ʱ 1-30 Ĭ7*/ - BYTE byLevel; //ȼ0-Чֵ1-ͣ2-(Ĭ)3-ߣ + DWORD dwSize;//结构体大小 + BYTE byEnable; /*使能 0-不启用,1-启用*/ + BYTE byStorageTime;/*存储时间 1-30 默认7天*/ + BYTE byLevel; //等级参数,0-无效值(保留),1-低,2-中(默认),3-高; BYTE byRes; - float fCapacity;//SD¼ռ䣬ֻ - BYTE byDefLowStorageTime;// ģʽƼ ֻ - BYTE byDefMediumStorageTime; // ģʽƼ ֻ - BYTE byDefHighStorageTime; // ģʽƼ ֻ + float fCapacity;//可用SD卡录像空间,只读 + BYTE byDefLowStorageTime;// 低模式下推荐天数 只读 + BYTE byDefMediumStorageTime; // 中模式下推荐天数 只读 + BYTE byDefHighStorageTime; // 高模式下推荐天数 只读 BYTE byRes1[61]; }NET_DVR_LITESTORAGE,*LPNET_DVR_LITESTORAGE; typedef struct tagNET_DVR_CALIBRATION { - DWORD dwSize;//ṹС - NET_VCA_POLYGON struRegion;//궨 + DWORD dwSize;//结构体大小 + NET_VCA_POLYGON struRegion;//标定区域 BYTE byRes[64]; }NET_DVR_CALIBRATION,*LPNET_DVR_CALIBRATION; typedef struct tagNET_DVR_STD_CONFIG { - void* lpCondBuffer; //[in](ṹʽ),ͨŵ.ΪNULL - DWORD dwCondSize; //[in] lpCondBufferָڴС - void* lpInBuffer; //[in](ṹʽ),ʱΪNULLȡʱΪNULL - DWORD dwInSize; //[in] lpInBufferָڴС - void* lpOutBuffer; //[out](ṹʽ),ȡʱΪNULL,ʱΪNULL - DWORD dwOutSize; //[in] lpOutBufferָڴС - void* lpStatusBuffer; //[out]ص״̬(XMLʽ),ȡɹʱḳֵ,Ҫ,NULL - DWORD dwStatusSize; //[in] lpStatusBufferָڴС - void* lpXmlBuffer; //[in/out]byDataType = 1ʱЧ,xmlʽ - DWORD dwXmlSize; //[in/out]lpXmlBufferָڴС,ȡʱͬʱΪȡɹ޸ĻʵʳȣʱʾʵʳȣڴС - BYTE byDataType; //[in]/,0-ʹýṹlpInBuffer/lpOutBufferЧ,1-ʹXMLlpXmlBufferЧ + void* lpCondBuffer; //[in]条件参数(结构体格式),例如通道号等.可以为NULL + DWORD dwCondSize; //[in] lpCondBuffer指向的内存大小 + void* lpInBuffer; //[in]输入参数(结构体格式),设置时不为NULL,获取时为NULL + DWORD dwInSize; //[in] lpInBuffer指向的内存大小 + void* lpOutBuffer; //[out]输出参数(结构体格式),获取时不为NULL,设置时为NULL + DWORD dwOutSize; //[in] lpOutBuffer指向的内存大小 + void* lpStatusBuffer; //[out]返回的状态参数(XML格式),获取成功时不会赋值,如果不需要,可以置NULL + DWORD dwStatusSize; //[in] lpStatusBuffer指向的内存大小 + void* lpXmlBuffer; //[in/out]byDataType = 1时有效,xml格式数据 + DWORD dwXmlSize; //[in/out]lpXmlBuffer指向的内存大小,获取时同时作为输入和输出参数,获取成功后会修改会实际长度,设置时表示实际长度,而不是整个内存大小 + BYTE byDataType; //[in]输入/输出参数类型,0-使用结构体类型lpInBuffer/lpOutBuffer有效,1-使用XML类型lpXmlBuffer有效 BYTE byRes[23]; }NET_DVR_STD_CONFIG,*LPNET_DVR_STD_CONFIG; typedef struct DWORDtagNET_DVR_STD_ABILITY { - void* lpCondBuffer; //[in](ָʽ),ͨŵ.ΪNULL - DWORD dwCondSize; //[in] dwCondSizeָڴС - void* lpOutBuffer; //[out](XMLʽ),ΪNULL - DWORD dwOutSize; //[in] lpOutBufferָڴС - void* lpStatusBuffer; //[out]ص״̬(XMLʽ),ȡɹʱḳֵ,Ҫ,NULL - DWORD dwStatusSize; //[in] lpStatusBufferָڴС - DWORD dwRetSize; //[out]ȡݳ(lpOutBufferlpStatusBufferָʵݳ) - BYTE byRes[32]; //ֽ + void* lpCondBuffer; //[in]条件参数(码字格式),例如通道号等.可以为NULL + DWORD dwCondSize; //[in] dwCondSize指向的内存大小 + void* lpOutBuffer; //[out]输出参数(XML格式),不为NULL + DWORD dwOutSize; //[in] lpOutBuffer指向的内存大小 + void* lpStatusBuffer; //[out]返回的状态参数(XML格式),获取成功时不会赋值,如果不需要,可以置NULL + DWORD dwStatusSize; //[in] lpStatusBuffer指向的内存大小 + DWORD dwRetSize; //[out]获取到的数据长度(lpOutBuffer或者lpStatusBuffer指向的实际数据长度) + BYTE byRes[32]; //保留字节 }NET_DVR_STD_ABILITY,*LPNET_DVR_STD_ABILITY; typedef struct tagNET_DVR_STD_CONTROL { - void* lpCondBuffer; //[in](ָʽ),ͨŵ.ΪNULL - DWORD dwCondSize; //[in] dwCondSizeָڴС - void* lpStatusBuffer; //[out]ص״̬(XMLʽ),ȡɹʱḳֵ,Ҫ,NULL - DWORD dwStatusSize; //[in] lpStatusBufferָڴС - void* lpXmlBuffer; //[in/out]byDataType = 1ʱЧ,xmlʽ - DWORD dwXmlSize; //[in/out]lpXmlBufferָڴС,ȡʱͬʱΪȡɹ޸ĻʵʳȣʱʾʵʳȣڴС - BYTE byDataType; //[in]/,0-ʹýṹlpCondBufferЧ,1-ʹXMLlpXmlBufferЧ + void* lpCondBuffer; //[in]条件参数(码字格式),例如通道号等.可以为NULL + DWORD dwCondSize; //[in] dwCondSize指向的内存大小 + void* lpStatusBuffer; //[out]返回的状态参数(XML格式),获取成功时不会赋值,如果不需要,可以置NULL + DWORD dwStatusSize; //[in] lpStatusBuffer指向的内存大小 + void* lpXmlBuffer; //[in/out]byDataType = 1时有效,xml格式数据 + DWORD dwXmlSize; //[in/out]lpXmlBuffer指向的内存大小,获取时同时作为输入和输出参数,获取成功后会修改会实际长度,设置时表示实际长度,而不是整个内存大小 + BYTE byDataType; //[in]输入/输出参数类型,0-使用结构体类型lpCondBuffer有效,1-使用XML类型lpXmlBuffer有效 BYTE byRes[55]; }NET_DVR_STD_CONTROL, *LPNET_DVR_STD_CONTROL; -#define MAX_FILE_PATH_LEN 256 //ļ· +#define MAX_FILE_PATH_LEN 256 //文件路径长度 typedef struct tagNET_DVR_MIME_UNIT { - //ʽ + //格式如下 //Content-Disposition: form-data; name="upload"; filename="C:\Users\test\Desktop\11.txt" //Content-Type: text/plain - char szContentType[32]; //ӦContent-Type - char szName[MAX_FILE_PATH_LEN]; //Ӧnameֶ - char szFilename[MAX_FILE_PATH_LEN]; //Ӧfilenameֶ - DWORD dwContentLen; //ContentijȣС512K - char* pContent; //ָ - BYTE bySelfRead; // 0-紫ļ 1-ڲȡݣͨszFilename··ʱֶЧȡʱЧ + char szContentType[32]; //对应Content-Type + char szName[MAX_FILE_PATH_LEN]; //对应name字段 + char szFilename[MAX_FILE_PATH_LEN]; //对应filename字段 + DWORD dwContentLen; //Content的长度,大小限制512K以内 + char* pContent; //数据指针 + BYTE bySelfRead; // 0-外界传入文件 1-内部读取数据(通过szFilename传递完整路径),下发数据时该字段生效,获取数据时无效 BYTE byRes[15]; }NET_DVR_MIME_UNIT, *LPNET_DVR_MIME_UNIT; typedef struct tagNET_DVR_MIME_DATA { - BYTE byContentType; //ļ 0-Ч, 1-json, 2-bmp - BYTE byRes1[3]; // - void *lpContent; //ļݣָΪգʾļ - DWORD dwContentSize; //ļݴССΪ512k - char sContentID[32]; //ʽContent-IDͷֵISAPIضڵֵһһӦ - BYTE byRes[512]; // + BYTE byContentType; //文件类型 0-无效, 1-json, 2-bmp + BYTE byRes1[3]; //保留 + void *lpContent; //文件内容,如果指针为空,表示无文件 + DWORD dwContentSize; //文件内容大小,大小限制为512k以内 + char sContentID[32]; //表单格式中Content-ID头域的值,与ISAPI报文中特定节点值一一对应 + BYTE byRes[512]; //保留 }NET_DVR_MIME_DATA, *LPNET_DVR_MIME_DATA; typedef struct tagNET_DVR_XML_CONFIG_INPUT { - DWORD dwSize; //ṹС - void* lpRequestUrl; //ַʽ - DWORD dwRequestUrlLen; //ȣַ - void* lpInBuffer; //XMLʽ - DWORD dwInBufferSize; //С - DWORD dwRecvTimeOut; //ճʱʱ䣬λms0ʹĬϳʱ5s - BYTE byForceEncrpt; //ǷǿƼܣ0-1- - BYTE byNumOfMultiPart; //0-ЧֵʾķֶθʱlpInBufferNET_DVR_MIME_UNITṹָ룬ֵṹ - BYTE byMIMEType; //0-Ч1-ʾʹNET_DVR_MIME_UNITṹ壬2-ʾʹNET_DVR_MIME_DATAṹ壬ֶνbyNumOfMultiPartЧʱЧ + DWORD dwSize; //结构体大小 + void* lpRequestUrl; //请求信令,字符串格式 + DWORD dwRequestUrlLen; //请求信令长度,字符串长度 + void* lpInBuffer; //输入参数缓冲区,XML格式 + DWORD dwInBufferSize; //输入参数缓冲区大小 + DWORD dwRecvTimeOut; //接收超时时间,单位:ms,填0则使用默认超时5s + BYTE byForceEncrpt; //是否强制加密,0-否,1-是 + BYTE byNumOfMultiPart; //0-无效,其他值表示报文分段个数,非零时lpInBuffer传入的是NET_DVR_MIME_UNIT结构体数组的指针,该值即代表结构体个数 + BYTE byMIMEType; //0-无效,1-表示使用NET_DVR_MIME_UNIT结构体,2-表示使用NET_DVR_MIME_DATA结构体,该字段仅在byNumOfMultiPart有效时生效 BYTE byRes1; - DWORD dwSendTimeOut; //ͳʱʱ䣬λms0ʹĬϳʱ5s + DWORD dwSendTimeOut; //发送超时时间,单位:ms,填0则使用默认超时5s BYTE byRes[24]; }NET_DVR_XML_CONFIG_INPUT, *LPNET_DVR_XML_CONFIG_INPUT; typedef struct tagNET_DVR_XML_CONFIG_OUTPUT { - DWORD dwSize; //ṹС - void* lpOutBuffer; //XMLʽ - DWORD dwOutBufferSize; //С(ڴС) - DWORD dwReturnedXMLSize; //ʵXMLݴС - void* lpStatusBuffer; //ص״̬(XMLʽ),ȡɹʱḳֵ,Ҫ,NULL - DWORD dwStatusSize; //״̬С(ڴС) -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - void* lpDataBuffer; //byNumOfMultiPart>0ʱϱĽṹʹã͸ݣͨNET_DVR_MIME_UNITdwContentLenƫƷ + DWORD dwSize; //结构体大小 + void* lpOutBuffer; //输出参数缓冲区,XML格式 + DWORD dwOutBufferSize; //输出参数缓冲区大小(内存大小) + DWORD dwReturnedXMLSize; //实际输出的XML内容大小 + void* lpStatusBuffer; //返回的状态参数(XML格式),获取命令成功时不会赋值,如果不需要,可以置NULL + DWORD dwStatusSize; //状态缓冲区大小(内存大小) +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + void* lpDataBuffer; //当byNumOfMultiPart>0时,配合报文结构体使用,存放透传数据内容,通过NET_DVR_MIME_UNIT的dwContentLen偏移访问 #else - void* lpDataBuffer; //byNumOfMultiPart>0ʱϱĽṹʹã͸ݣͨNET_DVR_MIME_UNITdwContentLenƫƷ + void* lpDataBuffer; //当byNumOfMultiPart>0时,配合报文结构体使用,存放透传数据内容,通过NET_DVR_MIME_UNIT的dwContentLen偏移访问 BYTE byRes2[4]; #endif - BYTE byNumOfMultiPart; //0-Ч ֵʾķֶθʱlpInBufferNET_DVR_MIME_UNITṹָ룬ֵṹ + BYTE byNumOfMultiPart; //0-无效。 其他值表示报文分段个数,非零时lpInBuffer传入的是NET_DVR_MIME_UNIT结构体数组的指针,该值即代表结构体个数。 BYTE byRes[23]; }NET_DVR_XML_CONFIG_OUTPUT, *LPNET_DVR_XML_CONFIG_OUTPUT; typedef struct tagNET_DVR_FORM_DATA_CFG { - DWORD dwSize; //ṹС - void *lpBuffer; //ݻָNET_DVR_MIME_DATAṹ - DWORD dwBufferSize; //ݻС - BYTE byNumOfMultiPart; // 0-ЧֵʾķֶθʱlpBufferNET_DVR_MIME_DATAṹָ룬ֵṹΪ3 - BYTE byRes[67]; // + DWORD dwSize; //结构体大小 + void *lpBuffer; //数据缓冲区,指向NET_DVR_MIME_DATA结构体数组 + DWORD dwBufferSize; //数据缓冲区大小 + BYTE byNumOfMultiPart; // 0-无效,其他值表示报文分段个数,非零时lpBuffer传入的是NET_DVR_MIME_DATA结构体数组的指针,该值即代表结构体个数,限制最多为3个 + BYTE byRes[67]; //保留 }NET_DVR_FORM_DATA_CFG, *LPNET_DVR_FORM_DATA_CFG; typedef struct tagNET_DVR_JSON_DATA_CFG { - DWORD dwSize; //ṹС - void *lpJsonData; //JSON - DWORD dwJsonDataSize; //JSONĴС - void *lpPicData; //ͼƬ - DWORD dwPicDataSize; //ͼƬݴС - DWORD dwInfraredFacePicSize; //ͼƬݴС0ʱͼƬ(JSONΪResponseStatusJSONʱֶ壻Inbound DataJSONûinfraredFaceURLʱֶҪ϶ͼƬݣ - void* lpInfraredFacePicBuffer; //ͼƬݻ - BYTE byRes[248]; // + DWORD dwSize; //结构体大小 + void *lpJsonData; //JSON报文 + DWORD dwJsonDataSize; //JSON报文大小 + void *lpPicData; //图片内容 + DWORD dwPicDataSize; //图片内容大小 + DWORD dwInfraredFacePicSize; //红外人脸图片数据大小,等于0时,代表无人脸图片数据(当JSON报文为当ResponseStatus(JSON)报文时,该字段无意义;当Inbound Data(JSON)报文中没有infraredFaceURL时,该字段需要带上二进制图片内容) + void* lpInfraredFacePicBuffer; //红外人脸图片数据缓存 + BYTE byRes[248]; //保留 }NET_DVR_JSON_DATA_CFG, *LPNET_DVR_JSON_DATA_CFG; typedef struct tagNET_DVR_SIMPLE_DAYTIME { - BYTE byHour; //ʱ - BYTE byMinute; // - BYTE bySecond; // + BYTE byHour; //时 + BYTE byMinute; //分 + BYTE bySecond; //秒 BYTE byRes; }NET_DVR_SIMPLE_DAYTIME, *LPNET_DVR_SIMPLE_DAYTIME; typedef struct tagNET_DVR_TIME_SEGMENT { - NET_DVR_SIMPLE_DAYTIME struBeginTime; //ʼʱ - NET_DVR_SIMPLE_DAYTIME struEndTime; //ʱ + NET_DVR_SIMPLE_DAYTIME struBeginTime; //开始时间点 + NET_DVR_SIMPLE_DAYTIME struEndTime; //结束时间点 }NET_DVR_TIME_SEGMENT, *LPNET_DVR_TIME_SEGMENT; typedef struct tagNET_DVR_SINGLE_PLAN_SEGMENT { - BYTE byEnable; //Ƿʹܣ1-ʹܣ0-ʹ - BYTE byDoorStatus; //״̬ģʽݿģʽ0-Ч1-ߣ2-״̬ɣ3-״̬ã4-ͨ״̬״̬ƻʹã - BYTE byVerifyMode; //֤ʽ0-Ч1-ˢ2-ˢ+(֤ʽƻʹ)3-ˢ,4-ˢ(֤ʽƻʹ), 5-ָƣ6-ָ+룬7-ָƻˢ8-ָ+ˢ9-ָ+ˢ+루Ⱥ˳򣩣10-ָƻˢ룬11-+ָƣ - //12-+룬13-+ˢ14-15-+룬16-ָƻ룬17-+ָƣ18-+ָ+룬19-+ָ+ˢ20-++ָƣ21-+22-+ˢ,23-ָƻ24-ˢ룬25-ˢ,26-ˢָ, - //27-ˢָƻ,28-,29-++,30-ˢ+ˢ31-ָƻ룬32-Ĥ33-ָƻˢĤ34-ˢĤ36-ָƻĤ룬37-ˢָƻĤ - //38-ˢĤ룬39-ˢ+Ĥ40-ָ+Ĥ41-+Ĥ42-Ĥ+룬43-ˢ+Ĥ+룬44-+Ĥ+룬45-ˢ++Ĥ46-룬47-ˢ+48-+49-ָ+50-+51-ң52-ң+53-ң - //54-ң򿨣55-ңָƣ56-ң룬57-ң򿨻ָƣ58-ң򿨻59-ң򿨻룬60-ңָƻ61-ңָƻ룬62-ң룬63-ң򿨻ָƻ64-ң򿨻ָƻ - //65-ңָƻ룬66-ң򿨻룬67-ң򿨻ָƻ + BYTE byEnable; //是否使能,1-使能,0-不使能 + BYTE byDoorStatus; //门状态模式(梯控模式),0-无效,1-休眠,2-常开状态(自由),3-常闭状态(禁用),4-普通状态(门状态计划使用) + BYTE byVerifyMode; //验证方式,0-无效,1-刷卡,2-刷卡+密码(读卡器验证方式计划使用),3-刷卡,4-刷卡或密码(读卡器验证方式计划使用), 5-指纹,6-指纹+密码,7-指纹或刷卡,8-指纹+刷卡,9-指纹+刷卡+密码(无先后顺序),10-人脸或指纹或刷卡或密码,11-人脸+指纹, + //12-人脸+密码,13-人脸+刷卡,14-人脸,15-工号+密码,16-指纹或密码,17-工号+指纹,18-工号+指纹+密码,19-人脸+指纹+刷卡,20-人脸+密码+指纹,21-工号+人脸,22-人脸或人脸+刷卡,23-指纹或人脸,24-刷卡或人脸或密码,25-刷卡或人脸,26-刷卡或人脸或指纹, + //27-刷卡或指纹或密码,28-人脸或密码,29-工号+人脸+密码,30-刷卡或人脸或人脸+刷卡,31-人脸或指纹或密码,32-虹膜,33-人脸或指纹或刷卡或密码或虹膜,34-人脸或刷卡或密码或虹膜,36-指纹或人脸或虹膜或密码,37-刷卡或指纹或虹膜或密码 + //38-刷卡或虹膜或密码,39-刷卡+虹膜,40-指纹+虹膜,41-人脸+虹膜,42-虹膜+密码,43-刷卡+虹膜+密码,44-人脸+虹膜+密码,45-刷卡+人脸+虹膜,46-密码,47-刷卡+声音,48-人脸+声音,49-指纹+声音,50-密码+声音,51-遥控器,52-遥控器+人脸,53-遥控器或人脸 + //54-遥控器或卡,55-遥控器或指纹,56-遥控器或密码,57-遥控器或卡或指纹,58-遥控器或卡或人脸,59-遥控器或卡或密码,60-遥控器或指纹或人脸,61-遥控器或指纹或密码,62-遥控器或人脸或密码,63-遥控器或卡或指纹或人脸,64-遥控器或卡或指纹或密码 + //65-遥控器或指纹或人脸或密码,66-遥控器或卡或人脸或密码,67-遥控器或卡或指纹或人脸或密码 BYTE byRes[5]; - NET_DVR_TIME_SEGMENT struTimeSegment; //ʱβ + NET_DVR_TIME_SEGMENT struTimeSegment; //时间段参数 }NET_DVR_SINGLE_PLAN_SEGMENT, *LPNET_DVR_SINGLE_PLAN_SEGMENT; typedef struct tagNET_DVR_WEEK_PLAN_CFG { DWORD dwSize; - BYTE byEnable; //Ƿʹܣ1-ʹܣ0-ʹ + BYTE byEnable; //是否使能,1-使能,0-不使能 BYTE byRes1[3]; - NET_DVR_SINGLE_PLAN_SEGMENT struPlanCfg[MAX_DAYS][MAX_TIMESEGMENT_V30]; //ܼƻ + NET_DVR_SINGLE_PLAN_SEGMENT struPlanCfg[MAX_DAYS][MAX_TIMESEGMENT_V30]; //周计划参数 BYTE byRes2[16]; }NET_DVR_WEEK_PLAN_CFG, *LPNET_DVR_WEEK_PLAN_CFG; typedef struct tagNET_DVR_HOLIDAY_PLAN_CFG { DWORD dwSize; - BYTE byEnable; //Ƿʹܣ1-ʹܣ0-ʹ + BYTE byEnable; //是否使能,1-使能,0-不使能 BYTE byRes1[3]; - NET_DVR_DATE struBeginDate; //տʼ - NET_DVR_DATE struEndDate; //ս - NET_DVR_SINGLE_PLAN_SEGMENT struPlanCfg[MAX_TIMESEGMENT_V30]; //ʱβ + NET_DVR_DATE struBeginDate; //假日开始日期 + NET_DVR_DATE struEndDate; //假日结束日期 + NET_DVR_SINGLE_PLAN_SEGMENT struPlanCfg[MAX_TIMESEGMENT_V30]; //时间段参数 BYTE byRes2[16]; }NET_DVR_HOLIDAY_PLAN_CFG, *LPNET_DVR_HOLIDAY_PLAN_CFG; typedef struct tagNET_DVR_HOLIDAY_PLAN_COND { DWORD dwSize; - DWORD dwHolidayPlanNumber; //ռƻ - WORD wLocalControllerID; //͵ؿ[1,64] + DWORD dwHolidayPlanNumber; //假日计划编号 + WORD wLocalControllerID; //就地控制器序号[1,64] BYTE byRes[106]; }NET_DVR_HOLIDAY_PLAN_COND, *LPNET_DVR_HOLIDAY_PLAN_COND; typedef struct tagNET_DVR_WEEK_PLAN_COND { DWORD dwSize; - DWORD dwWeekPlanNumber; //ܼƻ - WORD wLocalControllerID; //͵ؿ[1,64] + DWORD dwWeekPlanNumber; //周计划编号 + WORD wLocalControllerID; //就地控制器序号[1,64] BYTE byRes[106]; }NET_DVR_WEEK_PLAN_COND, *LPNET_DVR_WEEK_PLAN_COND; typedef struct tagNET_DVR_HOLIDAY_GROUP_CFG { DWORD dwSize; - BYTE byEnable; //Ƿã1-ã0- + BYTE byEnable; //是否启用,1-启用,0-不启用 BYTE byRes1[3]; - BYTE byGroupName[HOLIDAY_GROUP_NAME_LEN]; // - DWORD dwHolidayPlanNo[MAX_HOLIDAY_PLAN_NUM]; //ռƻţǰ䣬0Ч + BYTE byGroupName[HOLIDAY_GROUP_NAME_LEN]; //假日组名称 + DWORD dwHolidayPlanNo[MAX_HOLIDAY_PLAN_NUM]; //假日计划编号,就前填充,遇0无效 BYTE byRes2[32]; }NET_DVR_HOLIDAY_GROUP_CFG, *LPNET_DVR_HOLIDAY_GROUP_CFG; typedef struct tagNET_DVR_HOLIDAY_GROUP_COND { DWORD dwSize; - DWORD dwHolidayGroupNumber; // - WORD wLocalControllerID; //͵ؿ[1,64] + DWORD dwHolidayGroupNumber; //假日组编号 + WORD wLocalControllerID; //就地控制器序号[1,64] BYTE byRes[106]; }NET_DVR_HOLIDAY_GROUP_COND, *LPNET_DVR_HOLIDAY_GROUP_COND; typedef struct tagNET_DVR_PLAN_TEMPLATE { DWORD dwSize; - BYTE byEnable; //Ƿã1-ã0- + BYTE byEnable; //是否启用,1-启用,0-不启用 BYTE byRes1[3]; - BYTE byTemplateName[TEMPLATE_NAME_LEN]; //ģ - DWORD dwWeekPlanNo; //ܼƻţ0ΪЧ - DWORD dwHolidayGroupNo[MAX_HOLIDAY_GROUP_NUM]; //ţǰ䣬0Ч + BYTE byTemplateName[TEMPLATE_NAME_LEN]; //模板名称 + DWORD dwWeekPlanNo; //周计划编号,0为无效 + DWORD dwHolidayGroupNo[MAX_HOLIDAY_GROUP_NUM]; //假日组编号,就前填充,遇0无效 BYTE byRes2[32]; }NET_DVR_PLAN_TEMPLATE, *LPNET_DVR_PLAN_TEMPLATE; typedef struct tagNET_DVR_PLAN_TEMPLATE_COND { DWORD dwSize; - DWORD dwPlanTemplateNumber; //ƻģţ1ʼֵŽȡ - WORD wLocalControllerID; //͵ؿ[1,64]0Ч + DWORD dwPlanTemplateNumber; //计划模板编号,从1开始,最大值从门禁能力集获取 + WORD wLocalControllerID; //就地控制器序号[1,64],0无效 BYTE byRes[106]; }NET_DVR_PLAN_TEMPLATE_COND, *LPNET_DVR_PLAN_TEMPLATE_COND; typedef struct tagNET_DVR_DOOR_STATUS_PLAN { DWORD dwSize; - DWORD dwTemplateNo; //ƻģţΪ0ʾȡָĬ״̬ͨ״̬ + DWORD dwTemplateNo; //计划模板编号,为0表示取消关联,恢复默认状态(普通状态) BYTE byRes[64]; }NET_DVR_DOOR_STATUS_PLAN, *LPNET_DVR_DOOR_STATUS_PLAN; typedef struct tagNET_DVR_CARD_READER_PLAN { DWORD dwSize; - DWORD dwTemplateNo; //ƻģţΪ0ʾȡָĬ״̬ˢţ + DWORD dwTemplateNo; //计划模板编号,为0表示取消关联,恢复默认状态(刷卡开门) BYTE byRes[64]; }NET_DVR_CARD_READER_PLAN, *LPNET_DVR_CARD_READER_PLAN; typedef struct _tagNET_DVR_GROUP_CFG { DWORD dwSize; - BYTE byEnable; //Ƿã0-ã1- + BYTE byEnable; //是否启用,0-不启用,1-启用 BYTE byRes1[3]; - NET_DVR_VALID_PERIOD_CFG struValidPeriodCfg; //ȺЧڲ - BYTE byGroupName[GROUP_NAME_LEN]; //Ⱥ + NET_DVR_VALID_PERIOD_CFG struValidPeriodCfg; //群组有效期参数 + BYTE byGroupName[GROUP_NAME_LEN]; //群组名称 BYTE byRes2[32]; }NET_DVR_GROUP_CFG, *LPNET_DVR_GROUP_CFG; typedef struct tagNET_DVR_GROUP_COMBINATION_INFO { - BYTE byEnable; //ǷøȺ - BYTE byMemberNum; //ˢԱ - BYTE bySequenceNo; //Ⱥˢ + BYTE byEnable; //是否启用该群组组合 + BYTE byMemberNum; //刷卡成员数量 + BYTE bySequenceNo; //群组刷卡次序号 BYTE byRes; - DWORD dwGroupNo; //Ⱥ,0xffffffffʾԶ̿ţ0xfffffffeʾ + DWORD dwGroupNo; //群组编号,0xffffffff表示远程开门,0xfffffffe表示超级密码 }NET_DVR_GROUP_COMBINATION_INFO, *LPNET_DVR_GROUP_COMBINATION_INFO; typedef struct tagNET_DVR_MULTI_CARD_GROUP_CFG { - BYTE byEnable; //Ƿøöؿ0-ã1- - BYTE byEnableOfflineVerifyMode; //Ƿʱ֤ʽԶ̿ţ + BYTE byEnable; //是否启用该多重卡组参数,0-不启用,1-启用 + BYTE byEnableOfflineVerifyMode; //是否启用主机离线时验证方式(超级密码代替远程开门) BYTE byRes1[2]; - DWORD dwTemplateNo; //öؿܵļƻģ - NET_DVR_GROUP_COMBINATION_INFO struGroupCombination[GROUP_COMBINATION_NUM]; //Ⱥϲ + DWORD dwTemplateNo; //启用多重卡功能的计划模板编号 + NET_DVR_GROUP_COMBINATION_INFO struGroupCombination[GROUP_COMBINATION_NUM]; //群组组合参数 }NET_DVR_MULTI_CARD_GROUP_CFG, *LPNET_DVR_MULTI_CARD_GROUP_CFG; typedef struct tagNET_DVR_MULTI_CARD_CFG { DWORD dwSize; - BYTE byEnable; //Ƿöؿܣ0-ã1- - BYTE bySwipeIntervalTimeout; //ˢʱʱ䣬1-255sĬ10s + BYTE byEnable; //是否启用多重卡功能,0-不启用,1-启用 + BYTE bySwipeIntervalTimeout; //刷卡间隔超时时间,1-255s,默认10s BYTE byRes1[2]; - NET_DVR_MULTI_CARD_GROUP_CFG struGroupCfg[MULTI_CARD_GROUP_NUM]; //Ⱥˢ + NET_DVR_MULTI_CARD_GROUP_CFG struGroupCfg[MULTI_CARD_GROUP_NUM]; //群组刷卡参数 BYTE byRes2[32]; }NET_DVR_MULTI_CARD_CFG, *LPNET_DVR_MULTI_CARD_CFG; typedef struct tagNET_DVR_GROUP_COMBINATION_INFO_V50 { - BYTE byEnable; //ǷøȺ - BYTE byMemberNum; //ˢԱ - BYTE bySequenceNo; //Ⱥˢ + BYTE byEnable; //是否启用该群组组合 + BYTE byMemberNum; //刷卡成员数量 + BYTE bySequenceNo; //群组刷卡次序号 BYTE byRes; - DWORD dwGroupNo; //Ⱥ,0xffffffffʾԶ̿ţ0xfffffffeʾ + DWORD dwGroupNo; //群组编号,0xffffffff表示远程开门,0xfffffffe表示超级密码 }NET_DVR_GROUP_COMBINATION_INFO_V50, *LPNET_DVR_GROUP_COMBINATION_INFO_V50; typedef struct tagNET_DVR_MULTI_CARD_GROUP_CFG_V50 { - BYTE byEnable; //Ƿøöؿ0-ã1- - BYTE byEnableOfflineVerifyMode; //Ƿʱ֤ʽԶ̿ţ1-ã0- + BYTE byEnable; //是否启用该多重卡组参数,0-不启用,1-启用 + BYTE byEnableOfflineVerifyMode; //是否启用主机离线时验证方式(超级密码代替远程开门),1-启用,0-不启用 BYTE byRes1[2]; - DWORD dwTemplateNo; //öؿܵļƻģ - NET_DVR_GROUP_COMBINATION_INFO_V50 struGroupCombination[GROUP_COMBINATION_NUM]; //Ⱥϲ + DWORD dwTemplateNo; //启用多重卡功能的计划模板编号 + NET_DVR_GROUP_COMBINATION_INFO_V50 struGroupCombination[GROUP_COMBINATION_NUM]; //群组组合参数 }NET_DVR_MULTI_CARD_GROUP_CFG_V50, *LPNET_DVR_MULTI_CARD_GROUP_CFG_V50; typedef struct tagNET_DVR_MULTI_CARD_CFG_V50 { DWORD dwSize; - BYTE byEnable; //Ƿöؿܣ0-ã1- - BYTE bySwipeIntervalTimeout; //ˢʱʱ䣬1-255sĬ10s + BYTE byEnable; //是否启用多重卡功能,0-不启用,1-启用 + BYTE bySwipeIntervalTimeout; //刷卡间隔超时时间,1-255s,默认10s BYTE byRes1[2]; - NET_DVR_MULTI_CARD_GROUP_CFG_V50 struGroupCfg[NET_SDK_MULTI_CARD_GROUP_NUM_20]; //Ⱥˢ + NET_DVR_MULTI_CARD_GROUP_CFG_V50 struGroupCfg[NET_SDK_MULTI_CARD_GROUP_NUM_20]; //群组刷卡参数 BYTE byRes2[32]; }NET_DVR_MULTI_CARD_CFG_V50, *LPNET_DVR_MULTI_CARD_CFG_V50; -//2014-12-03 T1״̬ṹ +//2014-12-03 T1测试状态结构体 typedef struct { - DWORD dwSize;//ṹС - WORD wPort; //˿ں - //(豸ͨ˿ڿƣ˿ں豸˹̶ϲ㲻ãʼsocketӣT1ݣXMLʽ) - //0- ر(ر豸̣߳ͷŶ˿)1- (豸ڲ߳) + DWORD dwSize;//结构体大小 + WORD wPort; //端口号 + //(设备通过端口控制(端口号设备端固定,上层不做配置),开始单独socket连接,单独交互T1测试内容,走XML格式) + //0- 关闭(关闭设备的连接线程,释放端口),1- 开启(设备内部单独起连接线程) BYTE byPortState; - BYTE byRes[61]; // + BYTE byRes[61]; //保留 }NET_DVR_T1TEST_PARAMCFG,*LPNET_DVR_T1TEST_PARAMCFG; -#define CARD_PARAM_CARD_VALID 0x00000001 //ǷЧ -#define CARD_PARAM_VALID 0x00000002 //Чڲ -#define CARD_PARAM_CARD_TYPE 0x00000004 //Ͳ -#define CARD_PARAM_DOOR_RIGHT 0x00000008 //Ȩ޲ -#define CARD_PARAM_LEADER_CARD 0x00000010 //׿ -#define CARD_PARAM_SWIPE_NUM 0x00000020 //ˢ -#define CARD_PARAM_GROUP 0x00000040 //Ⱥ -#define CARD_PARAM_PASSWORD 0x00000080 // -#define CARD_PARAM_RIGHT_PLAN 0x00000100 //Ȩ޼ƻ -#define CARD_PARAM_SWIPED_NUM 0x00000200 //ˢ -#define CARD_PARAM_EMPLOYEE_NO 0x00000400 // -#define CARD_PARAM_NAME 0x00000800 // -#define CARD_PARAM_DEPARTMENT_NO 0x00001000 //ű -#define CARD_SCHEDULE_PLAN_NO 0x00002000 //Űƻ -#define CARD_SCHEDULE_PLAN_TYPE 0x00004000 //Űƻ -#define CARD_ROOM_NUMBER 0x00008000 // -#define CARD_SIM_NO 0x00010000 //SIMţֻţ -#define CARD_FLOOR_NUMBER 0x00020000 //¥ -#define CARD_USER_TYPE 0x00040000 //û +#define CARD_PARAM_CARD_VALID 0x00000001 //卡是否有效参数 +#define CARD_PARAM_VALID 0x00000002 //有效期参数 +#define CARD_PARAM_CARD_TYPE 0x00000004 //卡类型参数 +#define CARD_PARAM_DOOR_RIGHT 0x00000008 //门权限参数 +#define CARD_PARAM_LEADER_CARD 0x00000010 //首卡参数 +#define CARD_PARAM_SWIPE_NUM 0x00000020 //最大刷卡次数参数 +#define CARD_PARAM_GROUP 0x00000040 //所属群组参数 +#define CARD_PARAM_PASSWORD 0x00000080 //卡密码参数 +#define CARD_PARAM_RIGHT_PLAN 0x00000100 //卡权限计划参数 +#define CARD_PARAM_SWIPED_NUM 0x00000200 //已刷卡次数 +#define CARD_PARAM_EMPLOYEE_NO 0x00000400 //工号 +#define CARD_PARAM_NAME 0x00000800 //姓名 +#define CARD_PARAM_DEPARTMENT_NO 0x00001000 //部门编号 +#define CARD_SCHEDULE_PLAN_NO 0x00002000 //排班计划编号 +#define CARD_SCHEDULE_PLAN_TYPE 0x00004000 //排班计划类型 +#define CARD_ROOM_NUMBER 0x00008000 //房间号 +#define CARD_SIM_NO 0x00010000 //SIM卡号(手机号) +#define CARD_FLOOR_NUMBER 0x00020000 //楼层号 +#define CARD_USER_TYPE 0x00040000 //用户类型 typedef struct tagNET_DVR_ANTI_SNEAK_CFG { DWORD dwSize; - BYTE byEnable; //ʹܷDZعܣ1-ʹܣ0-ʹ + BYTE byEnable; //使能反潜回功能,1-使能,0-不使能 BYTE byRes1[3]; - DWORD dwStartCardReaderNo; //DZʼ + DWORD dwStartCardReaderNo; //反潜回起始读卡器编号 BYTE byRes2[64]; }NET_DVR_ANTI_SNEAK_CFG, *LPNET_DVR_ANTI_SNEAK_CFG; typedef struct tagNET_DVR_CARD_READER_ANTI_SNEAK_CFG { DWORD dwSize; - BYTE byEnable; //Ƿ뷴DZ·1-룬0- + BYTE byEnable; //是否加入反潜回路径,1-加入,0-不加入 BYTE byRes1[3]; - DWORD dwFollowUpCardReader[MAX_SNEAK_PATH_NODE]; //ţΪ0ʾעʼ + DWORD dwFollowUpCardReader[MAX_SNEAK_PATH_NODE]; //后续读卡器编号,为0表示不关注起始读卡器编号 BYTE byRes2[32]; }NET_DVR_CARD_READER_ANTI_SNEAK_CFG, *LPNET_DVR_CARD_READER_ANTI_SNEAK_CFG; typedef struct tagNET_DVR_PHONE_DOOR_RIGHT_CFG { DWORD dwSize; - BYTE byOpenRight[MAX_DOOR_NUM_256]; //ʾ,ǷпȨޣ-Ȩޣ-Ȩ - BYTE byCloseRight[MAX_DOOR_NUM_256]; //ʾ,ǷйȨޣ-Ȩޣ-Ȩ - BYTE byNormalOpenRight[MAX_DOOR_NUM_256]; //ʾ,ǷгȨޣ-Ȩޣ-Ȩ - BYTE byNormalCloseRight[MAX_DOOR_NUM_256]; //ʾ,ǷгȨޣ-Ȩޣ-Ȩ - BYTE byArmRight[MAX_ALARMHOST_ALARMIN_NUM]; //ʾ,ǷвȨޣ-Ȩޣ-Ȩ - BYTE byDisarmRight[MAX_ALARMHOST_ALARMIN_NUM]; //ʾ,ǷгȨޣ-Ȩޣ-Ȩ - BYTE byRes[256]; // + BYTE byOpenRight[MAX_DOOR_NUM_256]; //按数组表示,是否有开门权限,-无权限,-有权限 + BYTE byCloseRight[MAX_DOOR_NUM_256]; //按数组表示,是否有关门权限,-无权限,-有权限 + BYTE byNormalOpenRight[MAX_DOOR_NUM_256]; //按数组表示,是否有常开权限,-无权限,-有权限 + BYTE byNormalCloseRight[MAX_DOOR_NUM_256]; //按数组表示,是否有常闭权限,-无权限,-有权限 + BYTE byArmRight[MAX_ALARMHOST_ALARMIN_NUM]; //按数组表示,是否有布防权限,-无权限,-有权限 + BYTE byDisarmRight[MAX_ALARMHOST_ALARMIN_NUM]; //按数组表示,是否有撤防权限,-无权限,-有权限 + BYTE byRes[256]; //保留 }NET_DVR_PHONE_DOOR_RIGHT_CFG,*LPNET_DVR_PHONE_DOOR_RIGHT_CFG; typedef struct tagNET_DVR_MULTI_DOOR_INTERLOCK_CFG { DWORD dwSize; - BYTE byEnable; //ǷöŻܣ1-ã0- + BYTE byEnable; //是否启用多门互锁功能,1-启用,0-不启用 BYTE byRes1[3]; - DWORD dwMultiDoorGroup[MAX_MULTI_DOOR_INTERLOCK_GROUP][MAX_INTER_LOCK_DOOR_NUM]; //ŻȡֵΪű + DWORD dwMultiDoorGroup[MAX_MULTI_DOOR_INTERLOCK_GROUP][MAX_INTER_LOCK_DOOR_NUM]; //多门互锁组参数,取值为门编号 BYTE byRes2[64]; }NET_DVR_MULTI_DOOR_INTERLOCK_CFG, *LPNET_DVR_MULTI_DOOR_INTERLOCK_CFG; typedef struct tagNET_DVR_CARD_READER_CFG { DWORD dwSize; - BYTE byEnable; //Ƿʹܣ1-ʹܣ0-ʹ - BYTE byCardReaderType; //ͣ1-DS-K110XM/MK/C/CK2-DS-K192AM/AMP3-DS-K192BM/BMP4-DS-K182AM/AMP5-DS-K182BM/BMP6-DS-K182AMF/ACF7-Τ485,8- DS-K1101M/MK9- DS-K1101C/CK10- DS-K1102M/MK/M-A - //11- DS-K1102C/CK12- DS-K1103M/MK13- DS-K1103C/CK14- DS-K1104M/MK15- DS-K1104C/CK16- DS-K1102S/SK/S-A17- DS-K1102G/GK18- DS-K1100S-B19- DS-K1102EM/EMK20- DS-K1102E/EK - //21- DS-K1200EF22- DS-K1200MF23- DS-K1200CF24- DS-K1300EF25- DS-K1300MF26- DS-K1300CF27- DS-K1105E28- DS-K1105M29- DS-K1105C30- DS-K182AMF31- DS-K196AMF32-DS-K194AMP - //33-DS-K1T200EF/EF-C/MF/MF-C/CF/CF-C,34-DS-K1T300EF/EF-C/MF/MF-C/CF/CF-C35-DS-K1T105E/E-C/M/M-C/C/C-C36-DS-K1T803F/MF/SF/EF37-DS-K1A801F/MF/SF/EF,38-DS-K1107M/MK,39-DS-K1107E/EK, + BYTE byEnable; //是否使能,1-使能,0-不使能 + BYTE byCardReaderType; //读卡器类型,1-DS-K110XM/MK/C/CK,2-DS-K192AM/AMP,3-DS-K192BM/BMP,4-DS-K182AM/AMP,5-DS-K182BM/BMP,6-DS-K182AMF/ACF,7-韦根或485不在线,8- DS-K1101M/MK,9- DS-K1101C/CK,10- DS-K1102M/MK/M-A + //11- DS-K1102C/CK,12- DS-K1103M/MK,13- DS-K1103C/CK,14- DS-K1104M/MK,15- DS-K1104C/CK,16- DS-K1102S/SK/S-A,17- DS-K1102G/GK,18- DS-K1100S-B,19- DS-K1102EM/EMK,20- DS-K1102E/EK, + //21- DS-K1200EF,22- DS-K1200MF,23- DS-K1200CF,24- DS-K1300EF,25- DS-K1300MF,26- DS-K1300CF,27- DS-K1105E,28- DS-K1105M,29- DS-K1105C,30- DS-K182AMF,31- DS-K196AMF,32-DS-K194AMP + //33-DS-K1T200EF/EF-C/MF/MF-C/CF/CF-C,34-DS-K1T300EF/EF-C/MF/MF-C/CF/CF-C,35-DS-K1T105E/E-C/M/M-C/C/C-C,36-DS-K1T803F/MF/SF/EF,37-DS-K1A801F/MF/SF/EF,38-DS-K1107M/MK,39-DS-K1107E/EK, //40-DS-K1107S/SK,41-DS-K1108M/MK,42-DS-K1108E/EK,43-DS-K1108S/SK,44-DS-K1200F,45-DS-K1S110-I,46-DS-K1T200M-PG/PGC,47-DS-K1T200M-PZ/PZC,48-DS-K1109H - BYTE byOkLedPolarity; //OK LEDԣ0-1- - BYTE byErrorLedPolarity; //Error LEDԣ0-1- - BYTE byBuzzerPolarity; //ԣ0-1- - BYTE bySwipeInterval; //ظˢʱ䣬λ - BYTE byPressTimeout; //ʱʱ䣬λ - BYTE byEnableFailAlarm; //Ƿöʧܳα0-ã1- - BYTE byMaxReadCardFailNum; //ʧܴ - BYTE byEnableTamperCheck; //Ƿַ֧⣬0-disable 1-enable - BYTE byOfflineCheckTime; //߼ʱ λ - BYTE byFingerPrintCheckLevel; //ָʶȼ1-1/10ʣ2-1/100ʣ3-1/1000ʣ4-1/10000ʣ5-1/100000ʣ6-1/1000000ʣ7-1/10000000ʣ8-1/100000000ʣ9-3/100ʣ10-3/1000ʣ11-3/10000ʣ12-3/100000ʣ13-3/1000000ʣ14-3/10000000ʣ15-3/100000000ʣ16-Automatic Normal,17-Automatic Secure,18-Automatic More Secure - BYTE byUseLocalController; //ֻǷھ͵ؿϣ0-1- + BYTE byOkLedPolarity; //OK LED极性,0-阴极,1-阳极 + BYTE byErrorLedPolarity; //Error LED极性,0-阴极,1-阳极 + BYTE byBuzzerPolarity; //蜂鸣器极性,0-阴极,1-阳极 + BYTE bySwipeInterval; //重复刷卡间隔时间,单位:秒 + BYTE byPressTimeout; //按键超时时间,单位:秒 + BYTE byEnableFailAlarm; //是否启用读卡失败超次报警,0-不启用,1-启用 + BYTE byMaxReadCardFailNum; //最大读卡失败次数 + BYTE byEnableTamperCheck; //是否支持防拆检测,0-disable ,1-enable + BYTE byOfflineCheckTime; //掉线检测时间 单位秒 + BYTE byFingerPrintCheckLevel; //指纹识别等级,1-1/10误认率,2-1/100误认率,3-1/1000误认率,4-1/10000误认率,5-1/100000误认率,6-1/1000000误认率,7-1/10000000误认率,8-1/100000000误认率,9-3/100误认率,10-3/1000误认率,11-3/10000误认率,12-3/100000误认率,13-3/1000000误认率,14-3/10000000误认率,15-3/100000000误认率,16-Automatic Normal,17-Automatic Secure,18-Automatic More Secure + BYTE byUseLocalController; //只读,是否连接在就地控制器上,0-否,1-是 BYTE byRes1; - WORD wLocalControllerID; //ֻ͵ؿţ1-64,0δע - WORD wLocalControllerReaderID; //ֻ͵ؿĶID0δע - WORD wCardReaderChannel; //ֻͨͨţ0Τߣ1-RS485A,2-RS485B + WORD wLocalControllerID; //只读,就地控制器序号,1-64,0代表未注册 + WORD wLocalControllerReaderID; //只读,就地控制器的读卡器ID,0代表未注册 + WORD wCardReaderChannel; //只读,读卡器通信通道号,0韦根或离线,1-RS485A,2-RS485B BYTE byRes[16]; }NET_DVR_CARD_READER_CFG, *LPNET_DVR_CARD_READER_CFG; typedef struct tagNET_DVR_CARD_READER_CFG_V50 { DWORD dwSize; - BYTE byEnable; //Ƿʹܣ1-ʹܣ0-ʹ - BYTE byCardReaderType; //ͣ1-DS-K110XM/MK/C/CK2-DS-K192AM/AMP3-DS-K192BM/BMP4-DS-K182AM/AMP5-DS-K182BM/BMP6-DS-K182AMF/ACF7-Τ485ߣ8- DS-K1101M/MK9- DS-K1101C/CK10- DS-K1102M/MK/M-A11- DS-K1102C/CK12- DS-K1103M/MK13- DS-K1103C/CK14- DS-K1104M/MK15- DS-K1104C/CK16- DS-K1102S/SK/S-A17- DS-K1102G/GK18- DS-K1100S-B19- DS-K1102EM/EMK20- DS-K1102E/EK21- DS-K1200EF22- DS-K1200MF23- DS-K1200CF24- DS-K1300EF25- DS-K1300MF26- DS-K1300CF27- DS-K1105E28- DS-K1105M29- DS-K1105C30- DS-K182AMF31- DS-K196AMF32-DS-K194AMP33-DS-K1T200EF/EF-C/MF/MF-C/CF/CF-C,34-DS-K1T300EF/EF-C/MF/MF-C/CF/CF-C35-DS-K1T105E/E-C/M/M-C/C/C-C,36-DS-K1T803F/F-M/F-S/F-E,37-DS-K1A801F/F-M/F-S/F-E,38-DS-K1107M/MK,39-DS-K1107E/EK,40-DS-K1107S/SK,41-DS-K1108M/MK,42-DS-K1108E/EK,43-DS-K1108S/SK,44-DS-K1200F,45-DS-K1S110-I,46-DS-K1T200M-PG/PGC,47-DS-K1T200M-PZ/PZC,48-DS-K1109H - BYTE byOkLedPolarity; //OK LEDԣ0-1- - BYTE byErrorLedPolarity; //Error LEDԣ0-1- - BYTE byBuzzerPolarity; //ԣ0-1- - BYTE bySwipeInterval; //ظˢʱ䣬λ - BYTE byPressTimeout; //ʱʱ䣬λ - BYTE byEnableFailAlarm; //Ƿöʧܳα0-ã1- - BYTE byMaxReadCardFailNum; //ʧܴ - BYTE byEnableTamperCheck; //Ƿַ֧⣬0-disable 1-enable - BYTE byOfflineCheckTime; //߼ʱ λ - BYTE byFingerPrintCheckLevel; //ָʶȼ1-1/10ʣ2-1/100ʣ3-1/1000ʣ4-1/10000ʣ5-1/100000ʣ6-1/1000000ʣ7-1/10000000ʣ8-1/100000000ʣ9-3/100ʣ10-3/1000ʣ11-3/10000ʣ12-3/100000ʣ13-3/1000000ʣ14-3/10000000ʣ15-3/100000000ʣ16-Automatic Normal,17-Automatic Secure,18-Automatic More SecureĿǰŽ֧֣ - BYTE byUseLocalController; //ֻǷھ͵ؿϣ0-1- + BYTE byEnable; //是否使能,1-使能,0-不使能 + BYTE byCardReaderType; //读卡器类型,1-DS-K110XM/MK/C/CK,2-DS-K192AM/AMP,3-DS-K192BM/BMP,4-DS-K182AM/AMP,5-DS-K182BM/BMP,6-DS-K182AMF/ACF,7-韦根或485不在线,8- DS-K1101M/MK,9- DS-K1101C/CK,10- DS-K1102M/MK/M-A,11- DS-K1102C/CK,12- DS-K1103M/MK,13- DS-K1103C/CK,14- DS-K1104M/MK,15- DS-K1104C/CK,16- DS-K1102S/SK/S-A,17- DS-K1102G/GK,18- DS-K1100S-B,19- DS-K1102EM/EMK,20- DS-K1102E/EK,21- DS-K1200EF,22- DS-K1200MF,23- DS-K1200CF,24- DS-K1300EF,25- DS-K1300MF,26- DS-K1300CF,27- DS-K1105E,28- DS-K1105M,29- DS-K1105C,30- DS-K182AMF,31- DS-K196AMF,32-DS-K194AMP,33-DS-K1T200EF/EF-C/MF/MF-C/CF/CF-C,34-DS-K1T300EF/EF-C/MF/MF-C/CF/CF-C,35-DS-K1T105E/E-C/M/M-C/C/C-C,36-DS-K1T803F/F-M/F-S/F-E,37-DS-K1A801F/F-M/F-S/F-E,38-DS-K1107M/MK,39-DS-K1107E/EK,40-DS-K1107S/SK,41-DS-K1108M/MK,42-DS-K1108E/EK,43-DS-K1108S/SK,44-DS-K1200F,45-DS-K1S110-I,46-DS-K1T200M-PG/PGC,47-DS-K1T200M-PZ/PZC,48-DS-K1109H + BYTE byOkLedPolarity; //OK LED极性,0-阴极,1-阳极 + BYTE byErrorLedPolarity; //Error LED极性,0-阴极,1-阳极 + BYTE byBuzzerPolarity; //蜂鸣器极性,0-阴极,1-阳极 + BYTE bySwipeInterval; //重复刷卡间隔时间,单位:秒 + BYTE byPressTimeout; //按键超时时间,单位:秒 + BYTE byEnableFailAlarm; //是否启用读卡失败超次报警,0-不启用,1-启用 + BYTE byMaxReadCardFailNum; //最大读卡失败次数 + BYTE byEnableTamperCheck; //是否支持防拆检测,0-disable ,1-enable + BYTE byOfflineCheckTime; //掉线检测时间 单位秒 + BYTE byFingerPrintCheckLevel; //指纹识别等级,1-1/10误认率,2-1/100误认率,3-1/1000误认率,4-1/10000误认率,5-1/100000误认率,6-1/1000000误认率,7-1/10000000误认率,8-1/100000000误认率,9-3/100误认率,10-3/1000误认率,11-3/10000误认率,12-3/100000误认率,13-3/1000000误认率,14-3/10000000误认率,15-3/100000000误认率,16-Automatic Normal,17-Automatic Secure,18-Automatic More Secure(目前门禁不支持) + BYTE byUseLocalController; //只读,是否连接在就地控制器上,0-否,1-是 BYTE byRes1; - WORD wLocalControllerID; //ֻ͵ؿ, byUseLocalController=1ʱЧ1-64,0δע - WORD wLocalControllerReaderID; //ֻ͵ؿĶIDbyUseLocalController=1ʱЧ0δע - WORD wCardReaderChannel; //ֻͨͨţbyUseLocalController=1ʱЧ0Τߣ1-RS485A,2-RS485B - BYTE byFingerPrintImageQuality; //ָͼ0-Ч1-(V1)2-е(V1)3-(V1)4-(V1)5-(V2)6-е(V2)7-(V2)8-(V2) - BYTE byFingerPrintContrastTimeOut; //ָƶԱȳʱʱ䣬0-ЧΧ1-20:1s-20s0xff-޴ - BYTE byFingerPrintRecogizeInterval; //ָʶ0-ЧΧ1-10:1s-10s0xff-ӳ - BYTE byFingerPrintMatchFastMode; //ָƥģʽ0-ЧΧ1-5:ģʽ1-ģʽ50xff-Զ - BYTE byFingerPrintModuleSensitive; //ָģȣ0-ЧΧ1-8ȼ1-ȼ8 - BYTE byFingerPrintModuleLightCondition; //ָģ0-Ч1-⣬2- - BYTE byFaceMatchThresholdN; //ȶԷֵΧ0-100 - BYTE byFaceQuality; //Χ0-100 - BYTE byFaceRecogizeTimeOut; //Ŀʶʱʱ䣬Χ1-201s-20s0xff-޴ - BYTE byFaceRecogizeInterval; //ʶ0-ЧΧ1-101s-10s0xff-ӳ - WORD wCardReaderFunction; //ֻ࣬λʾ1λ-ָƣڶλ-λ-ָλ-Ĥλ-λ-ƾλ- - BYTE byCardReaderDescription[CARD_READER_DESCRIPTION]; // - WORD wFaceImageSensitometry; //ֻͼعȣΧ0-65535 - BYTE byLivingBodyDetect; //˼⣬0-Ч1-ã2- - BYTE byFaceMatchThreshold1; //1:1ƥ䷧ֵΧ0-100 - WORD wBuzzerTime; //ʱ䣬Χ0s-5999s0- - BYTE byFaceMatch1SecurityLevel; //1:1ʶȫȼ0-Ч1-һ㣬2-ǿ3-ǿ - BYTE byFaceMatchNSecurityLevel; //1:Nʶȫȼ0-Ч1-һ㣬2-ǿ3-ǿ - BYTE byEnvirMode;//Ŀʶ𻷾ģʽ0-Ч1-ڣ2- - BYTE byLiveDetLevelSet;//ֵȼã0-Ч1-ͣ2-У3-ߣ - BYTE byLiveDetAntiAttackCntLimit;// 0-Ч1-255Σͻˡ豸ͳһƣƣ - BYTE byEnableLiveDetAntiAttack;//ʹܣ0-Ч1-ã2- - BYTE bySupportDelFPByID;//ֻǷְָ֧IDɾָƣ0-Ч1-֧֣2-֧ - BYTE byFaceContrastMotionDetLevel;//ȶʱƶ⼶0-Ч1-ͣ2-У3-ߣ0xff- - BYTE byDayFaceMatchThresholdN; //1:Nƥ䷧ֵΧ0-100 - BYTE byNightFaceMatchThresholdN; //ҹ1:Nƥ䷧ֵΧ0-100 - BYTE byFaceRecogizeEnable; //Ŀʶʹܣ0-Ч1-2-ر - BYTE byBlockListMatchThreshold; //ֹƥ䷧ֵΧ0-100 + WORD wLocalControllerID; //只读,就地控制器序号, byUseLocalController=1时有效,1-64,0代表未注册 + WORD wLocalControllerReaderID; //只读,就地控制器的读卡器ID,byUseLocalController=1时有效,0代表未注册 + WORD wCardReaderChannel; //只读,读卡器通信通道号,byUseLocalController=1时有效,0韦根或离线,1-RS485A,2-RS485B + BYTE byFingerPrintImageQuality; //指纹图像质量,0-无效,1-低质量(V1),2-中等质量(V1),3-高质量(V1),4-最高质量(V1),5-低质量(V2),6-中等质量(V2),7-高质量(V2),8-最高质量(V2) + BYTE byFingerPrintContrastTimeOut; //指纹对比超时时间,0-无效,范围1-20代表:1s-20s,0xff-无限大 + BYTE byFingerPrintRecogizeInterval; //指纹连续识别间隔,0-无效,范围1-10代表:1s-10s,0xff-无延迟 + BYTE byFingerPrintMatchFastMode; //指纹匹配快速模式,0-无效,范围1-5代表:快速模式1-快速模式5,0xff-自动 + BYTE byFingerPrintModuleSensitive; //指纹模组灵敏度,0-无效,范围1-8代表:灵敏度级别1-灵敏度级别8 + BYTE byFingerPrintModuleLightCondition; //指纹模组光线条件,0-无效,1-室外,2-室内 + BYTE byFaceMatchThresholdN; //人脸比对阀值,范围0-100 + BYTE byFaceQuality; //人脸质量,范围0-100 + BYTE byFaceRecogizeTimeOut; //目标识别超时时间,范围1-20代表:1s-20s,0xff-无限大 + BYTE byFaceRecogizeInterval; //人脸连续识别间隔,0-无效,范围1-10代表:1s-10s,0xff-无延迟 + WORD wCardReaderFunction; //只读,读卡器种类,按位表示:第1位-指纹,第二位-人脸,第三位-指静脉,第四位-虹膜,第五位-声音,第六位-掌纹掌静脉,第七位-卡 + BYTE byCardReaderDescription[CARD_READER_DESCRIPTION]; //读卡器描述 + WORD wFaceImageSensitometry; //只读,人脸图像曝光度,范围0-65535 + BYTE byLivingBodyDetect; //真人检测,0-无效,1-不启用,2-启用 + BYTE byFaceMatchThreshold1; //人脸1:1匹配阀值,范围0-100 + WORD wBuzzerTime; //蜂鸣时间,范围0s-5999s(0-代表长鸣) + BYTE byFaceMatch1SecurityLevel; //人脸1:1识别安全等级,0-无效,1-一般,2-较强,3-极强 + BYTE byFaceMatchNSecurityLevel; //人脸1:N识别安全等级,0-无效,1-一般,2-较强,3-极强 + BYTE byEnvirMode;//目标识别环境模式,0-无效,1-室内,2-其他; + BYTE byLiveDetLevelSet;//活体检测阈值等级设置,0-无效,1-低,2-中,3-高; + BYTE byLiveDetAntiAttackCntLimit;//活体检测防攻击次数, 0-无效,1-255次(客户端、设备统一次数限制,根据能力级限制); + BYTE byEnableLiveDetAntiAttack;//活体检测防攻击使能,0-无效,1-不启用,2-启用 + BYTE bySupportDelFPByID;//只读,读卡器是否支持按手指ID删除指纹,0-无效,1-不支持,2-支持 + BYTE byFaceContrastMotionDetLevel;//人脸比对时移动侦测级别,0-无效,1-低,2-中,3-高,0xff-禁用 + BYTE byDayFaceMatchThresholdN; //白天人脸1:N匹配阀值,范围0-100 + BYTE byNightFaceMatchThresholdN; //夜晚人脸1:N匹配阀值,范围0-100 + BYTE byFaceRecogizeEnable; //目标识别使能:0-无效,1-开启,2-关闭 + BYTE byBlockListMatchThreshold; //禁止名单匹配阀值,范围0-100 BYTE byRes3; - BYTE byDefaultVerifyMode; //ֻĬ֤ʽĬϣ1-ߣ2-ˢ+룬3-ˢ4-ˢ룬5-ָƣ6-ָ+룬7-ָƻˢ8-ָ+ˢ9-ָ+ˢ+룬10-ָƻˢ룬11-+ָƣ12-+룬13-+ˢ14-15-+룬16-ָƻ룬17-+ָƣ18-+ָ+룬19-+ָ+ˢ20-++ָƣ21-+22-+ˢ23-ָƻ24-ˢ룬25-ˢ26-ˢָƣ27-ˢָƻ - DWORD dwFingerPrintCapacity;//ָֻ - DWORD dwFingerPrintNum;//ֻѴָ - BYTE byEnableFingerPrintNum;//ָֻʹܣ0-ʹܣ1-ʹܣֻеֶΪ1-ʹʱdwFingerPrintCapacitydwFingerPrintNumЧ - BYTE byEnableReverseCardNo; //ŷתʹ 0-ʹ1-ʹ + BYTE byDefaultVerifyMode; //只读,读卡器默认验证方式(出厂默认),1-休眠,2-刷卡+密码,3-刷卡,4-刷卡或密码,5-指纹,6-指纹+密码,7-指纹或刷卡,8-指纹+刷卡,9-指纹+刷卡+密码,10-人脸或指纹或刷卡或密码,11-人脸+指纹,12-人脸+密码,13-人脸+刷卡,14-人脸,15-工号+密码,16-指纹或密码,17-工号+指纹,18-工号+指纹+密码,19-人脸+指纹+刷卡,20-人脸+密码+指纹,21-工号+人脸,22-人脸或人脸+刷卡,23-指纹或人脸,24-刷卡或人脸或密码,25-刷卡或人脸,26-刷卡或人脸或指纹,27-刷卡或指纹或密码 + DWORD dwFingerPrintCapacity;//只读,指纹容量 + DWORD dwFingerPrintNum;//只读,已存在指纹数量 + BYTE byEnableFingerPrintNum;//只读,指纹容量使能:0-不使能,1-使能(只有当该字段为1-使能时,dwFingerPrintCapacity和dwFingerPrintNum才有效) + BYTE byEnableReverseCardNo; //卡号翻转使能 0-不使能1-使能 BYTE byRes2[2]; - DWORD dwIndependSwipeIntervals;//Ա֤ÿ˵ظ֤ + DWORD dwIndependSwipeIntervals;//人员认证间隔(每个人单独计算间隔,区别于重复认证间隔); BYTE byRes[224]; }NET_DVR_CARD_READER_CFG_V50, *LPNET_DVR_CARD_READER_CFG_V50; typedef struct tagNET_DVR_FAILED_FACE_COND { DWORD dwSize; - BYTE byRes[128]; // + BYTE byRes[128]; //保留 }NET_DVR_FAILED_FACE_COND, *LPNET_DVR_FAILED_FACE_COND; typedef struct tagNET_DVR_FAILED_FACE_INFO { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - BYTE byErrorCode; //ģʧϸ,0-Ч1-ȡļʧܣ2-ļʧܣ3-ڴ治㣬4-עʧܣ5-ۼ̫С6-Ȩ޲ + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byErrorCode; //建模失败详细错误,0-无效,1-读取文件失败,2-打开文件失败,3-内存不足,4-注册人脸失败,5-眼间距太小,6-卡权限不存在 BYTE byRes1[3]; - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) BYTE byRes[92]; }NET_DVR_FAILED_FACE_INFO, *LPNET_DVR_FAILED_FACE_INFO; typedef struct tagNET_DVR_FACE_PARAM_COND { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀţʱòɲã - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //ĶǷЧ0-Ч1-Чʱòɲã - DWORD dwFaceNum; //ûȡȡʱΪ0xffffffffʾȡϢ - BYTE byFaceID; //ţЧֵΧΪ1-2 0xffʾÿʱòɲã - BYTE byRes[127]; // + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号(设置时该参数可不设置) + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //人脸的读卡器是否有效,0-无效,1-有效(设置时该参数可不设置) + DWORD dwFaceNum; //设置或获取人脸数量,获取时置为0xffffffff表示获取所有人脸信息 + BYTE byFaceID; //人脸编号,有效值范围为1-2 0xff表示该卡所有人脸(设置时该参数可不设置) + BYTE byRes[127]; //保留 }NET_DVR_FACE_PARAM_COND, *LPNET_DVR_FACE_PARAM_COND; typedef struct tagNET_DVR_FACE_PARAM_CFG { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - DWORD dwFaceLen; //ݳ豸˷صļܺ - char* pFaceBuffer; //ָ - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //Ҫ·Ķʾӵλλʾ0-·ö1-·ö - BYTE byFaceID; //ţЧֵΧΪ1-2 - BYTE byFaceDataType; //ͣ0-ģ壨Ĭϣ1-ͼƬ + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + DWORD dwFaceLen; //人脸数据长度,设备端返回的即加密后的数据 + char* pFaceBuffer; //人脸数据指针 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //需要下发人脸的读卡器,按数组表示,从低位到高位表示,0-不下发该读卡器,1-下发到该读卡器 + BYTE byFaceID; //人脸编号,有效值范围为1-2 + BYTE byFaceDataType; //人脸数据类型:0-模板(默认),1-图片 BYTE byRes[126]; }NET_DVR_FACE_PARAM_CFG, *LPNET_DVR_FACE_PARAM_CFG; typedef struct tagNET_DVR_FACE_PARAM_STATUS { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //״ֽ̬ڱʾ0-ʧܣ1-ɹ2-Ի3-ڴ()4-Ѵڸ5-ǷID - //,6-㷨ģʧܣ7-δ·Ȩޣ8-δ壨9-ۼСС10-ͼƬݳС1KB11-ͼƬʽpng/jpg/bmp,12-ͼƬޣ13-ͼƬޣ14-ͼƬϢУʧܣ15-ͼƬʧܣ16-ʧܣ17-ʧ - BYTE byErrorMsg[ERROR_MSG_LEN]; //·ϢbyCardReaderRecvStatusΪ4ʱʾѴӦĿ - DWORD dwCardReaderNo; //ƶţ·󷵻 - BYTE byTotalStatus; //·ܵ״̬0-ǰδж1-ж(ָŽеĶ·ˣܳɹ) - BYTE byFaceID; //ţЧֵΧΪ1-2 + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //人脸读卡器状态,按字节表示,0-失败,1-成功,2-重试或人脸质量差,3-内存已满(人脸数据满),4-已存在该人脸,5-非法人脸ID + //,6-算法建模失败,7-未下发卡权限,8-未定义(保留),9-人眼间距小距小,10-图片数据长度小于1KB,11-图片格式不符(png/jpg/bmp),12-图片像素数量超过上限,13-图片像素数量低于下限,14-图片信息校验失败,15-图片解码失败,16-人脸检测失败,17-人脸评分失败 + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为4时,表示已存在人脸对应的卡号 + DWORD dwCardReaderNo; //纹读卡器编号,可用于下发错误返回 + BYTE byTotalStatus; //下发总的状态,0-当前人脸未下完所有读卡器,1-已下完所有读卡器(这里的所有指的是门禁主机往所有的读卡器下发了,不管成功与否) + BYTE byFaceID; //人脸编号,有效值范围为1-2 BYTE byRes[130]; }NET_DVR_FACE_PARAM_STATUS, *LPNET_DVR_FACE_PARAM_STATUS; typedef struct tagNET_DVR_FACE_PARAM_BYCARD { - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //ĶϢʾ - BYTE byFaceID[MAX_FACE_NUM]; //Ҫɾţ±ֵ꣬ʾ0-ɾ1-ɾ - BYTE byRes1[42]; // + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //人脸的读卡器信息,按数组表示 + BYTE byFaceID[MAX_FACE_NUM]; //需要删除的人脸编号,按数组下标,值表示0-不删除,1-删除该人脸 + BYTE byRes1[42]; //保留 }NET_DVR_FACE_PARAM_BYCARD, *LPNET_DVR_FACE_PARAM_BYCARD; typedef struct tagNET_DVR_FACE_PARAM_BYREADER { - DWORD dwCardReaderNo; //ֵʾ - BYTE byClearAllCard; //ǷɾпϢ0-ɾϢ1-ɾпϢ - BYTE byRes1[3]; // - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - BYTE byRes[548]; // + DWORD dwCardReaderNo; //按值表示,人脸读卡器编号 + BYTE byClearAllCard; //是否删除所有卡的人脸信息,0-按卡号删除人脸信息,1-删除所有卡的人脸信息 + BYTE byRes1[3]; //保留 + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byRes[548]; //保留 }NET_DVR_FACE_PARAM_BYREADER, *LPNET_DVR_FACE_PARAM_BYREADER; typedef union tagNET_DVR_DEL_FACE_PARAM_MODE { - BYTE uLen[588]; //峤 - NET_DVR_FACE_PARAM_BYCARD struByCard; //ŵķʽɾ - NET_DVR_FACE_PARAM_BYREADER struByReader; //ķʽɾ + BYTE uLen[588]; //联合体长度 + NET_DVR_FACE_PARAM_BYCARD struByCard; //按卡号的方式删除 + NET_DVR_FACE_PARAM_BYREADER struByReader; //按读卡器的方式删除 }NET_DVR_DEL_FACE_PARAM_MODE, *LPNET_DVR_DEL_FACE_PARAM_MODE; typedef struct tagNET_DVR_FACE_PARAM_CTRL { DWORD dwSize; - BYTE byMode; //ɾʽ0-ŷʽɾ1-ɾ - BYTE byRes1[3]; // - NET_DVR_DEL_FACE_PARAM_MODE struProcessMode; //ʽ - BYTE byRes[64]; // + BYTE byMode; //删除方式,0-按卡号方式删除,1-按读卡器删除 + BYTE byRes1[3]; //保留 + NET_DVR_DEL_FACE_PARAM_MODE struProcessMode; //处理方式 + BYTE byRes[64]; //保留 }NET_DVR_FACE_PARAM_CTRL, *LPNET_DVR_FACE_PARAM_CTRL; typedef struct tagNET_DVR_LOCAL_CONTROLLER_STATUS_COND { DWORD dwSize; - WORD wLocalControllerID; //͵ؿ(ֿ),Ϊ0ʾ + WORD wLocalControllerID; //就地控制器序号(分控器序号),为0表示所有 BYTE byRes[306]; }NET_DVR_LOCAL_CONTROLLER_STATUS_COND, *LPNET_DVR_LOCAL_CONTROLLER_STATUS_COND; typedef struct tagNET_DVR_LOCAL_CONTROLLER_STATUS { DWORD dwSize; - WORD wLocalControllerID; //͵ؿ(ֿ) - BYTE byLocalAntiDismantleStatus; //͵ؿ״̬0-رգ1- - BYTE byPowerSupplyStatus; //豸״̬1-繩磬2-ع - WORD wBatteryVoltage; //صѹֵʵֵ10λ - BYTE byBatteryLowVoltage; //Ƿڵѹ״̬0-1- - BYTE byFireAlarm; //0-1-̽ӱ2-Ͽ - BYTE bySerialNumber[SERIALNO_LEN]; //豸к - BYTE byMagneticStatus[MAX_DOOR_NUM];// Ŵ״̬0رգ12ƻ·3ƻ·4쳣 - BYTE byDoorLockStatus[MAX_DOOR_NUM]; //״̬0رգ12ƻ·3ƻ·4쳣 - BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM]; //״̬0-ߣ1- - WORD wLocalControllerStatus; //ֻ͵ؿ״̬(ֿ״̬)0-ߣ1-ߣ2-·1ϵRS48513-·1ϵRS48524-·2ϵRS48515-·2ϵRS48526-·3ϵRS48517-·3ϵRS48528-·4ϵRS48519-·4ϵRS4852ֻ + WORD wLocalControllerID; //就地控制器序号(分控器序号) + BYTE byLocalAntiDismantleStatus; //就地控制器防拆状态,0-关闭,1-开启 + BYTE byPowerSupplyStatus; //设备供电状态,1-交流电供电,2-蓄电池供电 + WORD wBatteryVoltage; //蓄电池电压值,实际值乘10,单位:伏特 + BYTE byBatteryLowVoltage; //蓄电池是否处于低压状态,0-否,1-是 + BYTE byFireAlarm; //消防报警,0-正常,1-短接报警,2-断开报警 + BYTE bySerialNumber[SERIALNO_LEN]; //设备序列号 + BYTE byMagneticStatus[MAX_DOOR_NUM];// 门磁状态:0正常关闭,1正常开启,2破坏短路报警,3破坏断路报警,4异常报警 + BYTE byDoorLockStatus[MAX_DOOR_NUM]; //门锁状态,0正常关闭,1正常开启,2破坏短路报警,3破坏断路报警,4异常报警 + BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM]; //读卡器在线状态,0-不在线,1-在线 + WORD wLocalControllerStatus; //只读,就地控制器在线状态(分控器在线状态):0-离线,1-网络在线,2-环路1上的RS485串口1,3-环路1上的RS485串口2,4-环路2上的RS485串口1,5-环路2上的RS485串口2,6-环路3上的RS485串口1,7-环路3上的RS485串口2,8-环路4上的RS485串口1,9-环路4上的RS485串口2(只读) BYTE byRes2[122]; }NET_DVR_LOCAL_CONTROLLER_STATUS, *LPNET_DVR_LOCAL_CONTROLLER_STATUS; typedef struct tagNET_DVR_ONLINE_LOCAL_CONTROLLER_CFG { DWORD dwSize; - BYTE byLocalControllerName[LOCAL_CONTROLLER_NAME_LEN]; //͵ؿ - WORD wLocalControllerID; //͵ؿ - WORD wDevPort; // 豸˿ں - NET_DVR_IPADDR struDevIP; // 豸IPַ - NET_DVR_IPADDR struSubnetMask; // 豸 - NET_DVR_IPADDR struGateway; // 豸 - BYTE bySearchProgress; //ȣ0ʾδʼ100ʾͬ - BYTE byEffectData;//ǷΪЧ,0ʾЧ1ʾ豸ֻȣΪ + BYTE byLocalControllerName[LOCAL_CONTROLLER_NAME_LEN]; //就地控制器名称 + WORD wLocalControllerID; //就地控制器序号 + WORD wDevPort; // 设备端口号 + NET_DVR_IPADDR struDevIP; // 设备IP地址 + NET_DVR_IPADDR struSubnetMask; // 设备子网掩码 + NET_DVR_IPADDR struGateway; // 设备网关 + BYTE bySearchProgress; //搜索进度,0表示未开始,100表示同步完成 + BYTE byEffectData;//是否为有效数据,0表示有效,1表示设备只返回搜索进度,作为心跳包 BYTE byRes[302]; }NET_DVR_ONLINE_LOCAL_CONTROLLER_CFG, *LPNET_DVR_ONLINE_LOCAL_CONTROLLER_CFG; typedef struct tagNET_DVR_ACS_WORK_STATUS { DWORD dwSize; - BYTE byDoorLockStatus[MAX_DOOR_NUM]; //״̬0-أ1- - BYTE byDoorStatus[MAX_DOOR_NUM]; //״̬1-ߣ2-״̬3-״̬4-ͨ״̬ - BYTE byMagneticStatus[MAX_DOOR_NUM]; //Ŵ״̬0-պϣ1- - BYTE byCaseStatus[MAX_CASE_SENSOR_NUM]; ////¼״̬0-룬1- - WORD wBatteryVoltage; //صѹֵʵֵ10λ - BYTE byBatteryLowVoltage; //Ƿڵѹ״̬0-1- - BYTE byPowerSupplyStatus; //豸״̬1-繩磬2-ع - BYTE byMultiDoorInterlockStatus; //Ż״̬0-رգ1- - BYTE byAntiSneakStatus; //DZ״̬0-رգ1- - BYTE byHostAntiDismantleStatus; //״̬0-رգ1- - BYTE byIndicatorLightStatus; //ָʾ״̬0-ߣ1- - BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM]; //״̬0-ߣ1- - BYTE byCardReaderAntiDismantleStatus[MAX_CARD_READER_NUM]; //״̬0-رգ1- - BYTE byCardReaderVerifyMode[MAX_CARD_READER_NUM]; //ǰ֤ʽ1-ˢ2-ˢ+룬3-ˢ4-ˢ - BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//ڲ״̬0-Ӧڴڳ״̬1-Ӧڴڲ״̬ - BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //ڱ״̬0-Ӧڵǰޱ1-Ӧڵǰб - BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //״̬0-Ӧޱ1-Ӧб - DWORD dwCardNum; //ӵĿ + BYTE byDoorLockStatus[MAX_DOOR_NUM]; //门锁状态,0-关,1-开 + BYTE byDoorStatus[MAX_DOOR_NUM]; //门状态,1-休眠,2-常开状态,3-常闭状态,4-普通状态 + BYTE byMagneticStatus[MAX_DOOR_NUM]; //门磁状态,0-闭合,1-开启 + BYTE byCaseStatus[MAX_CASE_SENSOR_NUM]; ////事件触发器状态,0-无输入,1-有输入 + WORD wBatteryVoltage; //蓄电池电压值,实际值乘10,单位:伏特 + BYTE byBatteryLowVoltage; //蓄电池是否处于低压状态,0-否,1-是 + BYTE byPowerSupplyStatus; //设备供电状态,1-交流电供电,2-蓄电池供电 + BYTE byMultiDoorInterlockStatus; //多门互锁状态,0-关闭,1-开启 + BYTE byAntiSneakStatus; //反潜回状态,0-关闭,1-开启 + BYTE byHostAntiDismantleStatus; //主机防拆状态,0-关闭,1-开启 + BYTE byIndicatorLightStatus; //指示灯状态,0-掉线,1-在线 + BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM]; //读卡器在线状态,0-不在线,1-在线 + BYTE byCardReaderAntiDismantleStatus[MAX_CARD_READER_NUM]; //读卡器防拆状态,0-关闭,1-开启 + BYTE byCardReaderVerifyMode[MAX_CARD_READER_NUM]; //读卡器当前验证方式,1-刷卡,2-刷卡+密码,3-刷卡,4-刷卡或密码 + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口布防状态,0-对应报警输入口处于撤防状态,1-对应报警输入口处于布防状态 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //报警输入口报警状态,0-对应报警输入口当前无报警,1-对应报警输入口当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //报警输出口状态,0-对应报警输出口无报警,1-对应报警输出口有报警 + DWORD dwCardNum; //已添加的卡数量 BYTE byRes2[32]; }NET_DVR_ACS_WORK_STATUS, *LPNET_DVR_ACS_WORK_STATUS; typedef struct tagNET_DVR_ACS_WORK_STATUS_V50 { DWORD dwSize; - BYTE byDoorLockStatus[MAX_DOOR_NUM_256]; //״̬(̵״̬)0-أ1-2-·3-·4-쳣 - BYTE byDoorStatus[MAX_DOOR_NUM_256]; //״̬(¥״̬)1-ߣ2-״̬()3-״̬()4-ͨ״̬(ܿ) - BYTE byMagneticStatus[MAX_DOOR_NUM_256]; //Ŵ״̬0-أ1-2-·3-·4-쳣 - BYTE byCaseStatus[MAX_CASE_SENSOR_NUM]; //¼״̬0-룬1- - WORD wBatteryVoltage; //صѹֵʵֵ10λ - BYTE byBatteryLowVoltage; //Ƿڵѹ״̬0-1- - BYTE byPowerSupplyStatus; //豸״̬1-繩磬2-ع - BYTE byMultiDoorInterlockStatus; //Ż״̬0-رգ1- - BYTE byAntiSneakStatus; //DZ״̬0-رգ1- - BYTE byHostAntiDismantleStatus; //״̬0-رգ1- - BYTE byIndicatorLightStatus; //ָʾ״̬0-ߣ1- - BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM_512]; //״̬0-ߣ1- - BYTE byCardReaderAntiDismantleStatus[MAX_CARD_READER_NUM_512]; //״̬0-رգ1- - BYTE byCardReaderVerifyMode[MAX_CARD_READER_NUM_512]; //ǰ֤ʽ1-ߣ2-ˢ+룬3-ˢ4-ˢ - BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//ڲ״̬0-Ӧڴڳ״̬1-Ӧڴڲ״̬ - BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //λʾڱ״̬0-Ӧڵǰޱ1-Ӧڵǰб - BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //λʾ״̬0-Ӧޱ1-Ӧб - DWORD dwCardNum; //ӵĿ - BYTE byFireAlarmStatus; //״̬ʾ0-1-·2-Ͽ - BYTE byBatteryChargeStatus; //س״̬0-Ч1-У2-δ - BYTE byMasterChannelControllerStatus; //ͨ״̬0-Ч1-ߣ2- - BYTE bySlaveChannelControllerStatus; //ͨ״̬0-Ч1-ߣ2- - BYTE byAntiSneakServerStatus; //DZط״̬0-Ч1-δã2-3-Ͽ + BYTE byDoorLockStatus[MAX_DOOR_NUM_256]; //门锁状态(继电器开合状态),0-正常关,1-正常开,2-短路报警,3-断路报警,4-异常报警 + BYTE byDoorStatus[MAX_DOOR_NUM_256]; //门状态(楼层状态),1-休眠,2-常开状态(自由),3-常闭状态(禁用),4-普通状态(受控) + BYTE byMagneticStatus[MAX_DOOR_NUM_256]; //门磁状态,0-正常关,1-正常开,2-短路报警,3-断路报警,4-异常报警 + BYTE byCaseStatus[MAX_CASE_SENSOR_NUM]; //事件触发器状态,0-无输入,1-有输入 + WORD wBatteryVoltage; //蓄电池电压值,实际值乘10,单位:伏特 + BYTE byBatteryLowVoltage; //蓄电池是否处于低压状态,0-否,1-是 + BYTE byPowerSupplyStatus; //设备供电状态,1-交流电供电,2-蓄电池供电 + BYTE byMultiDoorInterlockStatus; //多门互锁状态,0-关闭,1-开启 + BYTE byAntiSneakStatus; //反潜回状态,0-关闭,1-开启 + BYTE byHostAntiDismantleStatus; //主机防拆状态,0-关闭,1-开启 + BYTE byIndicatorLightStatus; //指示灯状态,0-掉线,1-在线 + BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM_512]; //读卡器在线状态,0-不在线,1-在线 + BYTE byCardReaderAntiDismantleStatus[MAX_CARD_READER_NUM_512]; //读卡器防拆状态,0-关闭,1-开启 + BYTE byCardReaderVerifyMode[MAX_CARD_READER_NUM_512]; //读卡器当前验证方式,1-休眠,2-刷卡+密码,3-刷卡,4-刷卡或密码 + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口布防状态,0-对应报警输入口处于撤防状态,1-对应报警输入口处于布防状态 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //按位表示报警输入口报警状态,0-对应报警输入口当前无报警,1-对应报警输入口当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //按位表示报警输出口状态,0-对应报警输出口无报警,1-对应报警输出口有报警 + DWORD dwCardNum; //已添加的卡数量 + BYTE byFireAlarmStatus; //消防报警状态显示:0-正常、1-短路报警、2-断开报警 + BYTE byBatteryChargeStatus; //电池充电状态:0-无效;1-充电中;2-未充电 + BYTE byMasterChannelControllerStatus; //主通道控制器在线状态:0-无效;1-不在线;2-在线 + BYTE bySlaveChannelControllerStatus; //从通道控制器在线状态:0-无效;1-不在线;2-在线 + BYTE byAntiSneakServerStatus; //反潜回服务器状态:0-无效,1-未启用,2-正常,3-断开 BYTE byRes3[3]; - DWORD dwAllowFaceNum; //ӵͨжϣ - DWORD dwBlockFaceNum; //ӵĽֹͨжϣ + DWORD dwAllowFaceNum; //已添加的允许名单人脸数量(通过能力集判断) + DWORD dwBlockFaceNum; //已添加的禁止名单人脸数量(通过能力集判断) BYTE byRes2[108]; }NET_DVR_ACS_WORK_STATUS_V50, *LPNET_DVR_ACS_WORK_STATUS_V50; typedef struct tagNET_DVR_CASE_SENSOR_CFG { DWORD dwSize; - BYTE byHostBuzzer; //0-1- + BYTE byHostBuzzer; //触发主机蜂鸣器,0-不触发,1-触发 BYTE byRes1[3]; - BYTE byCardReaderBuzzer[MAX_CARD_READER_NUM]; //1-0- - BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; //ı1-0- - BYTE byDoorOpen[MAX_DOOR_NUM]; //1-NŴ򿪣0-1-򿪣 - BYTE byDoorClose[MAX_DOOR_NUM]; //1-NŹرգ0-1-رգ + BYTE byCardReaderBuzzer[MAX_CARD_READER_NUM]; //触发读卡器蜂鸣器,1-触发,0-不触发 + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; //关联触发的报警输出,1-关联,0-不关联 + BYTE byDoorOpen[MAX_DOOR_NUM]; //对门1-N关联门打开,0-不关联,1-关联(即打开) + BYTE byDoorClose[MAX_DOOR_NUM]; //对门1-N关联门关闭,0-不关联,1-关联(即关闭) BYTE byRes2[64]; }NET_DVR_CASE_SENSOR_CFG, *LPNET_DVR_CASE_SENSOR_CFG; typedef enum _ENUM_UPGRADE_TYPE { - ENUM_UPGRADE_DVR = 0, //ͨ豸 - ENUM_UPGRADE_ADAPTER = 1, //DVR - ENUM_UPGRADE_VCALIB = 2, //ܿ - ENUM_UPGRADE_OPTICAL = 3, //˻ - ENUM_UPGRADE_ACS = 4, //Žϵͳ - ENUM_UPGRADE_AUXILIARY_DEV = 5,//豸 - ENUM_UPGRADE_LED = 6, //LEDͿͽտ - ENUM_UPGRADE_INTELLIGENT = 7, //豸 - ENUM_UPGRADE_CUSTOM = 8 //ԶURL ISAPI½Ч + ENUM_UPGRADE_DVR = 0, //普通设备升级 + ENUM_UPGRADE_ADAPTER = 1, //DVR适配器升级 + ENUM_UPGRADE_VCALIB = 2, //智能库升级 + ENUM_UPGRADE_OPTICAL = 3, //光端机升级 + ENUM_UPGRADE_ACS = 4, //门禁系统升级 + ENUM_UPGRADE_AUXILIARY_DEV = 5,//辅助设备升级 + ENUM_UPGRADE_LED = 6, //LED发送卡和接收卡升级 + ENUM_UPGRADE_INTELLIGENT = 7, //中心智能设备升级 + ENUM_UPGRADE_CUSTOM = 8 //自定义URL ISAPI登陆有效 }ENUM_UPGRADE_TYPE; typedef struct tagNET_DVR_ACS_EVENT_INFO { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ţΪ0Ч - BYTE byCardType; //ͣ1-ͨ2-Ⱥ忨3-ֹ4-Ѳ5-вȿ6-7-8-Ϊ0Ч - BYTE byAllowListNo; //,1-8Ϊ0Ч - BYTE byReportChannel; //ϴͨ1-ϴ2-1ϴ3-2ϴΪ0Ч - BYTE byCardReaderKind; //һ࣬0-Ч1-IC2-֤3-ά,4-ָͷ - DWORD dwCardReaderNo; //ţΪ0Ч - DWORD dwDoorNo; //ű(¥)Ϊ0Чӵ豸ΪԱͨ豸ʱ1Ϊ2Ϊ - DWORD dwVerifyNo; //ؿ֤ţΪ0Ч - DWORD dwAlarmInNo; //ţΪ0Ч - DWORD dwAlarmOutNo; //ţΪ0Ч - DWORD dwCaseSensorNo; //¼ - DWORD dwRs485No; //RS485ͨţΪ0Ч - DWORD dwMultiCardGroupNo; //Ⱥ - WORD wAccessChannel; //Աͨ - BYTE byDeviceNo; //豸ţΪ0Ч - BYTE byDistractControlNo;//ֿţΪ0Ч - DWORD dwEmployeeNo; //ţΪ0Ч - WORD wLocalControllerID; //͵ؿţ0-Ž1-64͵ؿ - BYTE byInternetAccess; //ID1-1,2-2,3-1 - BYTE byType; //ͣ0:ʱ,1-24Сʱ,2-ʱ ,3-ڲ4-Կ׷ 5-𾯷 6-ܽ 7-24Сʱ 8-24Сʱ9-24Сʱ𶯷,10-Žŷ11-Žŷ 0xff- - BYTE byMACAddr[MACADDR_LEN]; //ַΪ0Ч - BYTE bySwipeCardType;//ˢͣ0-Ч1-ά - BYTE byMask; //Ƿ֣0-1-δ֪2-֣3- - DWORD dwSerialNo; //¼ˮţΪ0Ч - BYTE byChannelControllerID; //ͨIDΪ0Ч1-ͨ2-ͨ - BYTE byChannelControllerLampID; //ͨưIDΪ0ЧЧΧ1-255 - BYTE byChannelControllerIRAdaptorID; //ͨתӰIDΪ0ЧЧΧ1-255 - BYTE byChannelControllerIREmitterID; //ͨIDΪ0ЧЧΧ1-255 - BYTE byHelmet;//ѡǷȫñ0-1-δ֪2-ȫ, 3-ȫñ + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号,为0无效 + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 + BYTE byAllowListNo; //允许名单单号,1-8,为0无效 + BYTE byReportChannel; //报告上传通道,1-布防上传,2-中心组1上传,3-中心组2上传,为0无效 + BYTE byCardReaderKind; //读卡器属于哪一类,0-无效,1-IC读卡器,2-身份证读卡器,3-二维码读卡器,4-指纹头 + DWORD dwCardReaderNo; //读卡器编号,为0无效 + DWORD dwDoorNo; //门编号(楼层编号),为0无效(当接的设备为人员通道设备时,门1为进方向,门2为出方向) + DWORD dwVerifyNo; //多重卡认证序号,为0无效 + DWORD dwAlarmInNo; //报警输入号,为0无效 + DWORD dwAlarmOutNo; //报警输出号,为0无效 + DWORD dwCaseSensorNo; //事件触发器编号 + DWORD dwRs485No; //RS485通道号,为0无效 + DWORD dwMultiCardGroupNo; //群组编号 + WORD wAccessChannel; //人员通道号 + BYTE byDeviceNo; //设备编号,为0无效 + BYTE byDistractControlNo;//分控器编号,为0无效 + DWORD dwEmployeeNo; //工号,为0无效 + WORD wLocalControllerID; //就地控制器编号,0-门禁主机,1-64代表就地控制器 + BYTE byInternetAccess; //网口ID:(1-上行网口1,2-上行网口2,3-下行网口1) + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区 0xff-无 + BYTE byMACAddr[MACADDR_LEN]; //物理地址,为0无效 + BYTE bySwipeCardType;//刷卡类型,0-无效,1-二维码 + BYTE byMask; //是否带口罩:0-保留,1-未知,2-不戴口罩,3-戴口罩 + DWORD dwSerialNo; //事件流水号,为0无效 + BYTE byChannelControllerID; //通道控制器ID,为0无效,1-主通道控制器,2-从通道控制器 + BYTE byChannelControllerLampID; //通道控制器灯板ID,为0无效(有效范围1-255) + BYTE byChannelControllerIRAdaptorID; //通道控制器红外转接板ID,为0无效(有效范围1-255) + BYTE byChannelControllerIREmitterID; //通道控制器红外对射ID,为0无效(有效范围1-255) + BYTE byHelmet;//可选,是否戴安全帽:0-保留,1-未知,2-不戴安全, 3-戴安全帽 BYTE byRes[3]; }NET_DVR_ACS_EVENT_INFO, *LPNET_DVR_ACS_EVENT_INFO; typedef struct tagNET_DVR_ACS_EVENT_INFO_EXTEND { - DWORD dwFrontSerialNo; //¼ˮţΪ0ЧֶΪ0ƽ̨dwSerialNoжǷʧ¼ֶβΪ0ƽ̨ݸֶκdwSerialNoֶιͬжǷʧ¼ҪڽĺdwSerialNo - BYTE byUserType; //Աͣ0-Ч1-ͨˣˣ2-ÿͣ3-ֹˣ4-Ա - BYTE byCurrentVerifyMode; //ǰ֤ʽ0-Ч1-ߣ2-ˢ+룬3-ˢ4-ˢ룬5-ָƣ6-ָ+룬7-ָƻˢ8-ָ+ˢ9-ָ+ˢ+룬10-ָƻˢ룬11-+ָƣ12-+룬 - //13-+ˢ14-15-+룬16-ָƻ룬17-+ָƣ18-+ָ+룬19-+ָ+ˢ20-++ָƣ21-+22-+ˢ23-ָƻ24-ˢ룬 - //25-ˢ26-ˢָƣ27-ˢָƻ룬28-룬29-++룬30-ˢ+ˢ31-ָƻ룬32-Ĥ33-ָƻˢĤ - //34-ˢĤ35-ˢָƻĤ36-ָƻĤ룬37-ˢָƻĤ룬38-ˢĤ룬39-ˢ+Ĥ40-ָ+Ĥ41-+Ĥ42-Ĥ+룬 - //43-ˢ+Ĥ+룬44-+Ĥ+룬45-ˢ++Ĥ46-룬47-ˢ+48-+49-ָ+50-+51-ң52-ң+53-ң54-ң򿨣55-ңָƣ - //56-ң룬57-ң򿨻ָƣ58-ң򿨻59-ң򿨻룬60-ңָƻ61-ңָƻ룬62-ң룬63-ң򿨻ָƻ - //64-ң򿨻ָƻ룬65-ңָƻ룬66-ң򿨻룬67-ң򿨻ָƻ룬69-ƾ70-ˢƾ71-ƾ - //72-ˢƾ73-ƾ74-ˢƾ75-+ƾ76-ˢ+ƾ77-+ƾ78-+ˢ+ƾ - //79-+ˢ++ƾ,80-ƾ,81-+ˢ+ - BYTE byCurrentEvent; //ǷΪʵʱ¼0-Ч1-ǣʵʱ¼2-¼ - BYTE byPurePwdVerifyEnable; //豸Ƿִ֧֤ 0-֧֣1-֧ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID豸˵ʹ˹ţԱIDֶΣbyEmployeeNoһҪݣbyEmployeeNoתΪdwEmployeeNoôֶҲҪݣϲƽ̨ͻ˵ȽbyEmployeeNoֶΣֶΪգٿǽdwEmployeeNoֶΣ - BYTE byAttendanceStatus; //״̬0-δ,1-ϰ࣬2-°࣬3-ʼϢ4-Ϣ5-ʼӰ࣬6-Ӱ - BYTE byStatusValue; //״ֵ̬ + DWORD dwFrontSerialNo; //事件流水号,为0无效(若该字段为0,平台根据dwSerialNo判断是否丢失事件;若该字段不为0,平台根据该字段和dwSerialNo字段共同判断是否丢失事件)(主要用于解决报警订阅后导致dwSerialNo不连续的情况) + BYTE byUserType; //人员类型:0-无效,1-普通人(主人),2-来宾(访客),3-禁止名单人,4-管理员 + BYTE byCurrentVerifyMode; //读卡器当前验证方式:0-无效,1-休眠,2-刷卡+密码,3-刷卡,4-刷卡或密码,5-指纹,6-指纹+密码,7-指纹或刷卡,8-指纹+刷卡,9-指纹+刷卡+密码,10-人脸或指纹或刷卡或密码,11-人脸+指纹,12-人脸+密码, + //13-人脸+刷卡,14-人脸,15-工号+密码,16-指纹或密码,17-工号+指纹,18-工号+指纹+密码,19-人脸+指纹+刷卡,20-人脸+密码+指纹,21-工号+人脸,22-人脸或人脸+刷卡,23-指纹或人脸,24-刷卡或人脸或密码, + //25-刷卡或人脸,26-刷卡或人脸或指纹,27-刷卡或指纹或密码,28-人脸或密码,29-工号+人脸+密码,30-刷卡或人脸或人脸+刷卡,31-人脸或指纹或密码,32-虹膜,33-人脸或指纹或刷卡或密码或虹膜, + //34-人脸或刷卡或密码或虹膜,35-刷卡或指纹或人脸或虹膜,36-指纹或人脸或虹膜或密码,37-刷卡或指纹或虹膜或密码,38-刷卡或虹膜或密码,39-刷卡+虹膜,40-指纹+虹膜,41-人脸+虹膜,42-虹膜+密码, + //43-刷卡+虹膜+密码,44-人脸+虹膜+密码,45-刷卡+人脸+虹膜,46-密码,47-刷卡+声音,48-人脸+声音,49-指纹+声音,50-密码+声音,51-遥控器,52-遥控器+人脸,53-遥控器或人脸,54-遥控器或卡,55-遥控器或指纹, + //56-遥控器或密码,57-遥控器或卡或指纹,58-遥控器或卡或人脸,59-遥控器或卡或密码,60-遥控器或指纹或人脸,61-遥控器或指纹或密码,62-遥控器或人脸或密码,63-遥控器或卡或指纹或人脸, + //64-遥控器或卡或指纹或密码,65-遥控器或指纹或人脸或密码,66-遥控器或卡或人脸或密码,67-遥控器或卡或指纹或人脸或密码,69-人脸或掌纹掌静脉,70-刷卡或掌纹掌静脉,71-密码或掌纹掌静脉, + //72-人脸或刷卡或掌纹掌静脉,73-人脸或密码或掌纹掌静脉,74-人脸或刷卡或密码或掌纹掌静脉,75-人脸+掌纹掌静脉,76-刷卡+掌纹掌静脉,77-密码+掌纹掌静脉,78-人脸+刷卡+掌纹掌静脉, + //79-人脸+刷卡+密码+掌纹掌静脉,80-掌纹掌静脉,81-人脸+刷卡+密码 + BYTE byCurrentEvent; //是否为实时事件:0-无效,1-是(实时事件),2-否(离线事件) + BYTE byPurePwdVerifyEnable; //设备是否支持纯密码认证, 0-不支持,1-支持 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID)(对于设备来说,如果使用了工号(人员ID)字段,byEmployeeNo一定要传递,如果byEmployeeNo可转换为dwEmployeeNo,那么该字段也要传递;对于上层平台或客户端来说,优先解析byEmployeeNo字段,如该字段为空,再考虑解析dwEmployeeNo字段) + BYTE byAttendanceStatus; //考勤状态:0-未定义,1-上班,2-下班,3-开始休息,4-结束休息,5-开始加班,6-结束加班 + BYTE byStatusValue; //考勤状态值 BYTE byRes2[2]; - BYTE byUUID[NET_SDK_UUID_LEN/*36*/]; //UUIDֶνڶԽөʯƽ̨вŻʹã - BYTE byDeviceName[NET_DEV_NAME_LEN]; //豸к + BYTE byUUID[NET_SDK_UUID_LEN/*36*/]; //UUID(该字段仅在对接萤石平台过程中才会使用) + BYTE byDeviceName[NET_DEV_NAME_LEN]; //设备序列号 BYTE byRes[24]; }NET_DVR_ACS_EVENT_INFO_EXTEND, *LPNET_DVR_ACS_EVENT_INFO_EXTEND; -//չṹϢV20 +//扩展结构体信息V20 typedef struct tagNET_DVR_ACS_EVENT_INFO_EXTEND_V20 { - BYTE byRemoteCheck; //ǷҪԶ̺飨0-Ч1-ҪĬϣ2-Ҫ - BYTE byThermometryUnit; //µλ0-϶ȣĬϣ1-϶ȣ2-ģ - BYTE byIsAbnomalTemperature; //ĿץIJǷ¶쳣1-ǣ0- + BYTE byRemoteCheck; //是否需要远程核验(0-无效,1-不需要(默认),2-需要) + BYTE byThermometryUnit; //测温单位(0-摄氏度(默认),1-华氏度,2-开尔文) + BYTE byIsAbnomalTemperature; //目标抓拍测温是否温度异常:1-是,0-否 BYTE byRes2; - float fCurrTemperature; //¶ȣȷСһλ - NET_VCA_POINT struRegionCoordinates; //¶ - DWORD dwQRCodeInfoLen; //άϢȣΪ0DZʾ - DWORD dwVisibleLightDataLen; //ȳɼͼƬȣΪ0DZʾ - DWORD dwThermalDataLen; //ȳͼƬȣΪ0DZʾ - char *pQRCodeInfo; //άϢָ - char *pVisibleLightData; //ȳɼͼƬָ - char *pThermalData; //ȳͼƬָ - BYTE byAttendanceLabel[64]; //Զ - WORD wXCoordinate; //x꣬ϽͼƬĹһ꣬Χ0-1000 - WORD wYCoordinate; //y꣬ϽͼƬĹһ꣬Χ0-1000 - WORD wWidth; //ȣΧ0-1000 - WORD wHeight; //߶ȣΧ0-1000 - BYTE byHealthCode; //״̬, 0-, 1-δ, 2-δ, 3-, 4-, 5-, 6-޴Ա, 7-Ϣӿ쳣²ѯʧܣ, 8-ѯ볬ʱ - BYTE byNADCode; //, 0-, 1-δѯ, 2-ԣ, 3-ԣȷ, 4-Чѹ - BYTE byTravelCode; //г̱, 0-, 1-14һֱڵ, 2-14뿪, 3-14ڵ, 4- - BYTE byVaccineStatus; //״̬, 0-, 1-δ, 2-ע, 3- + float fCurrTemperature; //人脸温度(精确到小数点后一位) + NET_VCA_POINT struRegionCoordinates; //人脸温度坐标 + DWORD dwQRCodeInfoLen; //二维码信息长度,不为0是表示后面带数据 + DWORD dwVisibleLightDataLen; //热成像相机可见光图片长度,不为0是表示后面带数据 + DWORD dwThermalDataLen; //热成像图片长度,不为0是表示后面带数据 + char *pQRCodeInfo; //二维码信息指针 + char *pVisibleLightData; //热成像相机可见光图片指针 + char *pThermalData; //热成像图片指针 + BYTE byAttendanceLabel[64]; //考勤自定义名称 + WORD wXCoordinate; //x坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wYCoordinate; //y坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wWidth; //人脸框宽度,范围0-1000 + WORD wHeight; //人脸框高度,范围0-1000 + BYTE byHealthCode; //健康码状态, 0-保留, 1-未请求, 2-未申领, 3-绿码, 4-黄码, 5-红码, 6-无此人员, 7-其他错误信息(如接口异常导致查询失败), 8-查询健康码超时 + BYTE byNADCode; //核酸检测结果, 0-保留, 1-未查询到核酸检测结果, 2-核酸检测阴性(代表正常), 3-核酸检测阳性(代表确诊), 4-核酸检测有效期已过 + BYTE byTravelCode; //行程编码, 0-保留, 1-14天内一直在当地, 2-14天内离开过当地, 3-14天内到过疫区, 4-其他 + BYTE byVaccineStatus; //打疫苗状态, 0-保留, 1-未打疫苗, 2-部分注射疫苗, 3-打过疫苗 BYTE byRes[948]; }NET_DVR_ACS_EVENT_INFO_EXTEND_V20, *LPNET_DVR_ACS_EVENT_INFO_EXTEND_V20; typedef struct tagNET_DVR_ACS_ALARM_INFO { DWORD dwSize; - DWORD dwMajor; //ͣο궨 - DWORD dwMinor; //ͣο궨 - NET_DVR_TIME struTime; //ʱ - BYTE sNetUser[MAX_NAMELEN] ;//û - NET_DVR_IPADDR struRemoteHostAddr ;//Զַ - NET_DVR_ACS_EVENT_INFO struAcsEventInfo; //ϸ - DWORD dwPicDataLen; //ͼƬݴСΪ0DZʾ + DWORD dwMajor; //报警主类型,参考宏定义 + DWORD dwMinor; //报警次类型,参考宏定义 + NET_DVR_TIME struTime; //时间 + BYTE sNetUser[MAX_NAMELEN] ;//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr ;//远程主机地址 + NET_DVR_ACS_EVENT_INFO struAcsEventInfo; //详细参数 + DWORD dwPicDataLen; //图片数据大小,不为0是表示后面带数据 char *pPicData; - WORD wInductiveEventType; //¼ͣ0-ЧͻжϸֵΪ0ֵ󣬱ͨ¼֣ͨԭбͣdwMajordwMinor - BYTE byPicTransType; //ͼƬݴ䷽ʽ: 0-ƣ1-url - BYTE byRes1; //ֽ - DWORD dwIOTChannelNo; //IOTͨ - char *pAcsEventInfoExtend; //byAcsEventInfoExtendΪ1ʱʾָһNET_DVR_ACS_EVENT_INFO_EXTENDṹ - BYTE byAcsEventInfoExtend; //pAcsEventInfoExtendǷЧ0-Ч1-Ч - BYTE byTimeType; //ʱͣ0-豸ʱ䣬1-UTCʱ䣨struTimeʱ䣩 - BYTE byRes2; //ֽ - BYTE byAcsEventInfoExtendV20; //pAcsEventInfoExtendV20ǷЧ0-Ч1-Ч - char *pAcsEventInfoExtendV20; //byAcsEventInfoExtendV20Ϊ1ʱʾָһNET_DVR_ACS_EVENT_INFO_EXTEND_V20ṹ + WORD wInductiveEventType; //归纳事件类型,0-无效,客户端判断该值为非0值后,报警类型通过归纳事件类型区分,否则通过原有报警主次类型(dwMajor、dwMinor)区分 + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + BYTE byRes1; //保留字节 + DWORD dwIOTChannelNo; //IOT通道号 + char *pAcsEventInfoExtend; //byAcsEventInfoExtend为1时,表示指向一个NET_DVR_ACS_EVENT_INFO_EXTEND结构体 + BYTE byAcsEventInfoExtend; //pAcsEventInfoExtend是否有效:0-无效,1-有效 + BYTE byTimeType; //时间类型:0-设备本地时间,1-UTC时间(struTime的时间) + BYTE byRes2; //保留字节 + BYTE byAcsEventInfoExtendV20; //pAcsEventInfoExtendV20是否有效:0-无效,1-有效 + char *pAcsEventInfoExtendV20; //byAcsEventInfoExtendV20为1时,表示指向一个NET_DVR_ACS_EVENT_INFO_EXTEND_V20结构体 BYTE byRes[4]; }NET_DVR_ACS_ALARM_INFO, *LPNET_DVR_ACS_ALARM_INFO; @@ -42509,102 +42509,102 @@ typedef struct tagNET_DVR_ACS_ALARM_INFO typedef struct tagNET_DVR_AUDIO_ACTIVATION_CFG { DWORD dwSize; - BYTE byEnable; //Ƿ + BYTE byEnable; //是否启用 BYTE byRes1[3]; - DWORD dwChanNo; //Ƶͨ - BYTE bySensitivity; // 1-100Խߣʾϵ͵ʹܸƵ뼤ܣԽͣʾҪϸߵʹܸƵļ - BYTE byPriority; //ȼ 0-ȼ01-ȼ1 ֵԽ󼶱Խ - WORD wDelayTime; //лӳʱ䣬λs, ʱԶصԤõ1ӦĻ - BYTE byRes2; // - BYTE byEnablePreset; //ǷԤõ - WORD wPreset; //Ԥõ - WORD wBase; /*׼*/ + DWORD dwChanNo; //语音激励的视频通道号 + BYTE bySensitivity; //灵敏度 1-100,灵敏度越高,表示较低的音量就能使能该音频输入激励功能;灵敏度越低,表示需要较高的音量才能使能该音频输入的激励功能 + BYTE byPriority; //优先级 0-优先级0,1-优先级1, 值越大级别越高 + WORD wDelayTime; //语音激励结束画面切换延迟时间,单位s, 超时后自动回到预置点1对应的画面 + BYTE byRes2; //保留 + BYTE byEnablePreset; //是否启用预置点 + WORD wPreset; //预置点 + WORD wBase; /*基准点编号*/ BYTE byRes3[2]; - BYTE byVoChanNo[JUDGE_MAX_VIDEOOUT_NUM]; //ǷƵڡֵ0ʾ1-ʾ±ʾͨ˳£0-VGA1,1-VGA2, 2-VGA3,3-VGA4,4-VGA5~10,5-HDMI1,6-HDMI2 - BYTE byRes[255]; // + BYTE byVoChanNo[JUDGE_MAX_VIDEOOUT_NUM]; //语音激励是否输出到视频输出口。值0表示不输出,1-表示输出。下标表示通道顺序如下:0-VGA1,1-VGA2, 2-VGA3,3-VGA4,4-VGA5~10,5-HDMI1,6-HDMI2 + BYTE byRes[255]; //保留 }NET_DVR_AUDIO_ACTIVATION_CFG,*LPNET_DVR_AUDIO_ACTIVATION_CFG; typedef struct tagNET_DVR_INFRARED_OUTPUT_CTRL_CFG { - DWORD dwSize; //ṹС - BYTE byIROutPort; //1-12-2 - BYTE byIRCmdIndex; //ѧӦ - BYTE byRes[254]; // + DWORD dwSize; //结构体大小 + BYTE byIROutPort; //红外输出索引,1-红外输出口1,2-红外输出口2 + BYTE byIRCmdIndex; //红外学码命令对应的索引; + BYTE byRes[254]; //保留 }NET_DVR_INFRARED_OUTPUT_CTRL_CFG, *LPNET_DVR_INFRARED_OUTPUT_CTRL_CFG; -#define MAX_IR_CMD_NAME_LEN 32 //Ƴ -#define MAX_IR_CMD_NUM 32 // +#define MAX_IR_CMD_NAME_LEN 32 //红外输出命令名称长度 +#define MAX_IR_CMD_NUM 32 //红外命令个数 -typedef struct tagNET_DVR_INFRARED_CMD_INFO //Ϣ +typedef struct tagNET_DVR_INFRARED_CMD_INFO //红外命令名称信息 { - char sCmdName[MAX_IR_CMD_NAME_LEN]; // - BYTE byRes[8]; // + char sCmdName[MAX_IR_CMD_NAME_LEN]; //红外命令名称 + BYTE byRes[8]; //保留 } NET_DVR_INFRARED_CMD_INFO,*LPNET_DVR_INFRARED_CMD_INFO; typedef struct tagNET_DVR_INFRARED_LEARN_CODE_CFG_ { - DWORD dwSize; //ṹС - BYTE sIROutName[MAX_IR_CMD_NAME_LEN]; // - NET_DVR_INFRARED_CMD_INFO struIRCmdInfo[MAX_IR_CMD_NUM]; //Ϣ + DWORD dwSize; //结构体大小 + BYTE sIROutName[MAX_IR_CMD_NAME_LEN]; //红外输出口名称 + NET_DVR_INFRARED_CMD_INFO struIRCmdInfo[MAX_IR_CMD_NUM]; //红外命令子信息 BYTE byRes[256]; } NET_DVR_INFRARED_CMD_NAME_CFG,*LPNET_DVR_INFRARED_CMD_NAME_CFG; typedef enum tagIR_LEARN_SEND_DATA_TYPE_ENUM { - ENUM_SENDDATA = 0x0, // - ENUM_SEND_LEARN_IR_CMD_START, //ͺѧ - ENUM_SEND_LEARN_IR_CMD_END = 0x2 //ѧ + ENUM_SENDDATA = 0x0, //发送数据 + ENUM_SEND_LEARN_IR_CMD_START, //发送红外学码 + ENUM_SEND_LEARN_IR_CMD_END = 0x2 //红外学码结束 }IR_LEARN_SEND_DATA_TYPE_ENUM; typedef struct tagNET_DVR_INFRARED_LEARN_INFO { - DWORD dwSize; //ṹС - BYTE byIROutPort; //1-12-2 - BYTE byIRCmdIndex; //ѧӦ - BYTE byRes[30]; // + DWORD dwSize; //结构体大小 + BYTE byIROutPort; //红外输出索引,1-红外输出口1,2-红外输出口2 + BYTE byIRCmdIndex; //红外学码命令对应的索引 + BYTE byRes[30]; //保留 } NET_DVR_INFRARED_LEARN_INFO, *LPNET_DVR_INFRARED_LEARN_INFO; typedef struct tagNET_DVR_INFRARED_LEARN_END { - DWORD dwSize; //ṹС - BYTE bySaveLearnInfo; //ѧϢ0-棬1- + DWORD dwSize; //结构体大小 + BYTE bySaveLearnInfo; //保存学码信息,0-保存,1-不保存 BYTE byRes[255]; } NET_DVR_INFRARED_LEARN_END,*LPNET_DVR_INFRARED_LEARN_END; -#define MAX_VIDEOIN_TYPE_NUM 10 //ֵ֧ƵԴ +#define MAX_VIDEOIN_TYPE_NUM 10 //最大支持的视频输入源类型 typedef struct tagNET_DVR_VIDEOIN_TYPE_INFO { - WORD wInType; //Դ 0-SDI,1-VGA, 2-HDMI,3-IP,4-PIP - WORD wInNum; //ֵ֧ - WORD wStartNo; //Ӧʼ + WORD wInType; //输入源类型 0-SDI,1-VGA, 2-HDMI,3-IP,4-PIP + WORD wInNum; //支持的输入个数 + WORD wStartNo; //输入对应的起始号 BYTE byRes[6]; }NET_DVR_VIDEOIN_TYPE_INFO, *LPNET_DVR_VIDEOIN_TYPE_INFO; typedef struct tagNET_DVR_TRIAL_SYSTEM_INFO { - DWORD dwSize ; //ṹС - BYTE byVideoInTypeNum ; //ƵԴ͸ + DWORD dwSize ; //结构体大小 + BYTE byVideoInTypeNum ; //视频输入源类型个数 BYTE byRes1[3]; - NET_DVR_VIDEOIN_TYPE_INFO struVideoIn[MAX_VIDEOIN_TYPE_NUM] ; //ƵԴ - BYTE byRes[512 ] ; // + NET_DVR_VIDEOIN_TYPE_INFO struVideoIn[MAX_VIDEOIN_TYPE_NUM] ; //视频输入源 + BYTE byRes[512 ] ; //保留 } NET_DVR_TRIAL_SYSTEM_INFO, *LPNET_DVR_TRIAL_SYSTEM_INFO; typedef struct tagNET_DVR_CASE_INFO { - DWORD dwSize; //ṹС - BYTE byCaseNo[CASE_NO_LEN]; // - BYTE byCaseName[CASE_NAME_LEN]; //ƣ - BYTE byLitigant1[LITIGANT_LEN]; //1 - BYTE byLitigant2[LITIGANT_LEN]; //2 - BYTE byChiefJudge[CHIEF_JUDGE_LEN];//г - BYTE byCaseType; //ͣ1-°2-°3- sCaseTypeCustomЧ - BYTE byShowCaseInfoTime; /* Ϣʾʱ,λ, ȡֵΧ1~30*/ - BYTE byRes1[2]; // - char sCaseTypeCustom[NET_SDK_CASETYPE_LEN/*32*/];//Զ尸 - BYTE byRes[220]; // + DWORD dwSize; //结构体大小 + BYTE byCaseNo[CASE_NO_LEN]; //案件编号 + BYTE byCaseName[CASE_NAME_LEN]; //案件名称; + BYTE byLitigant1[LITIGANT_LEN]; //当事人1; + BYTE byLitigant2[LITIGANT_LEN]; //当事人2; + BYTE byChiefJudge[CHIEF_JUDGE_LEN];//审判长 + BYTE byCaseType; //案件类型;1-刑事案件、2-民事案件、3- sCaseTypeCustom生效 + BYTE byShowCaseInfoTime; /* 案件信息显示时间,单位秒, 取值范围1~30*/ + BYTE byRes1[2]; //保留 + char sCaseTypeCustom[NET_SDK_CASETYPE_LEN/*32*/];//自定义案件类型 + BYTE byRes[220]; //保留 }NET_DVR_CASE_INFO, *LPNET_DVR_CASE_INFO; #define MICROPHONE_NUM 16 @@ -42618,281 +42618,281 @@ typedef struct tagNET_DVR_CASE_INFO typedef struct _NET_DVR_REMOTE_PLAY_ { DWORD dwSize; - BYTE byFileName[FILE_NAME_LEN]; //Ҫŵļ - BYTE byVideoOut[7]; // + BYTE byFileName[FILE_NAME_LEN]; //需要播放的文件名称 + BYTE byVideoOut[7]; //播放输出口 BYTE byRes1[5]; - BYTE byType; // 0-壬1-ʼţ2-ֹͣ - BYTE byRes[31]; // + BYTE byType; // 0-无意义,1-开始播放,2-停止播放 + BYTE byRes[31]; //保留 }NET_DVR_REMOTE_PLAY, *LPNET_DVR_REMOTE_PLAY; typedef struct _NET_DVR_TRIAL_MICROPHONE_STATUS { DWORD dwSize ; - BYTE byMicrophoneStatus [MICROPHONE_NUM];//˷״̬±ʾ˷0-磬1- - BYTE byRes[32] ; // + BYTE byMicrophoneStatus [MICROPHONE_NUM];//麦克风状态下标表示麦克风号0-供电,1-不供电 + BYTE byRes[32] ; //保留 }NET_DVR_TRIAL_MICROPHONE_STATUS, *LPNET_DVR_TRIAL_MICROPHONE_STATUS; typedef struct _NET_DVR_TRIAL_HOST_STATUS { DWORD dwSize ; - DWORD dwFanSpeed [FAN_NUM];//ת - WORD wMainBoardTemp[MAIN_BOARD]; //¶ - BYTE byFpgaTempWarn [FPGA_NUM]; //0-¶ޱ״̬1-FPGA¶ȱ״̬λ1-ڱ״̬ 0-ޱ״̬ - BYTE byRes[32] ; // + DWORD dwFanSpeed [FAN_NUM];//风扇转速 + WORD wMainBoardTemp[MAIN_BOARD]; //主板温度 + BYTE byFpgaTempWarn [FPGA_NUM]; //数组0-主板温度暂无报警状态,数组1-FPGA温度报警状态位,1-处于报警状态 0-处于无报警状态 + BYTE byRes[32] ; //保留 }NET_DVR_TRIAL_HOST_STATUS, *LPNET_DVR_TRIAL_HOST_STATUS; typedef struct _NET_DVR_LOCAL_INPUT_INFO_ { DWORD dwSize; - BYTE byChannelName[NAME_LEN] ; //ͨ - BYTE byRes[32] ; // + BYTE byChannelName[NAME_LEN] ; //通道名称 + BYTE byRes[32] ; //保留 }NET_DVR_LOCAL_INPUT_INFO, *LPNET_DVR_LOCAL_INPUT_INFO; typedef struct tagNET_DVR_LAMP_STATUS { - BYTE byEnable; //Ƿ + BYTE byEnable; //是否启用 BYTE byRes1[3]; - BYTE byLampName[LAMP_NAME]; //Lamp ƣ34ΪLamp156Ϊlamp2 - BYTE byLampState1[LAMP_STATE_NAME]; //״̬1Ӧƣ - BYTE byLampState2[LAMP_STATE_NAME]; //״̬2Ӧ - BYTE byLampState3[LAMP_STATE_NAME]; //״̬3Ӧ + BYTE byLampName[LAMP_NAME]; //Lamp 名称,报警输出3、4口为Lamp1。报警5、6输出口为lamp2。 + BYTE byLampState1[LAMP_STATE_NAME]; //状态1对应名称, + BYTE byLampState2[LAMP_STATE_NAME]; //状态2对应名称 + BYTE byLampState3[LAMP_STATE_NAME]; //状态3对应名称 BYTE byRes[32]; }NET_DVR_LAMP_STATUS,*LPNET_DVR_LAMP_STATUS; typedef struct _NET_DVR_LAMP_OUT { DWORD dwSize; - NET_DVR_LAMP_STATUS struLampInfo[2]; //0-ʾlamp1,1lamp2 - BYTE byRes[256]; // + NET_DVR_LAMP_STATUS struLampInfo[2]; //数组0-表示lamp1,数组1表述lamp2 + BYTE byRes[256]; //保留 }NET_DVR_LAMP_OUT, *LPNET_DVR_LAMP_OUT; typedef struct _NET_DVR_LAMP_CONTROL { DWORD dwSize ; - BYTE byLampNo ; //LampţӦLamp± - BYTE byLampStateNo ; //Lamp״̬ 0-壬1-״̬1, 2-״̬2 3-״̬3 ӦLAMP״̬ - BYTE byRes[14] ; // + BYTE byLampNo ; //Lamp编号,对应配置Lamp数组下标 + BYTE byLampStateNo ; //Lamp状态编号 0-无意义,1-状态1, 2-状态2, 3-状态3 对应LAMP输出口配置状态 + BYTE byRes[14] ; //保留 }NET_DVR_LAMP_CONTROL, *LPNET_DVR_LAMP_CONTROL; -//ʵʱϢ +//实时信息 typedef struct tagNET_DVR_TPS_PARAM { - BYTE byStart; // ʼ - BYTE byCMD; // ţ01-ָ02-뿪ָ03-ӵ״ָ̬(Ϊ03ʱֻbyLaneStatebyQueueLenЧ)04-Ȧ״̬Ϊ04ʱwLoopStatewStateMaskЧʾbyLane϶ȦĹ״̬ - WORD wSpaceHeadway; //ͷ࣬ - WORD wDeviceID; // 豸ID - WORD wDataLen; // ݳ - BYTE byLane; // Ӧ - BYTE bySpeed; // Ӧ٣KM/H - BYTE byLaneState; // ״̬0-״̬1-ͨ2-ӵ3- - BYTE byQueueLen; // ״̬Ŷӳȣ50ף - WORD wLoopState; //Ȧ״̬ڼλʾȦ״̬״̬1-0-뿪ȦŴӾͷɽԶûڽʱȽţٽȦţȦΨһġ - WORD wStateMask; //Ȧ״̬룬λΪ1ӦwLoopState״̬λЧΪ0ʾЧ - DWORD dwDownwardFlow; //ǰ ϵ³ - DWORD dwUpwardFlow; //ǰ µϳ - BYTE byJamLevel; //ӵµȼbyLaneStateΪ3ʱЧ1-ȣ2-жȣ3-ض - BYTE byVehicleDirection; //0-δ֪1-϶£2-¶ - BYTE byJamFlow; //ӵÿһϱһۼƳϢ - BYTE byChannelizationLane; //ţʾ仯һΪ·ڳĿ - BYTE byVehicleType; //ʶ0- δ֪1- ͳ()2- ()3- γ(С)4- ǻ - BYTE byRes1[5]; // - WORD wTimeHeadway; // ͷʱ࣬ + BYTE byStart; // 开始码 + BYTE byCMD; // 命令号,01-进入指令,02-离开指令,03-拥堵状态指令(为03时,只有byLaneState和byQueueLen有效),04-多线圈状态(为04时,wLoopState和wStateMask有效,表示byLane车道上多个线圈的过车状态) + WORD wSpaceHeadway; //车头间距,以米来计算 + WORD wDeviceID; // 设备ID + WORD wDataLen; // 数据长度 + BYTE byLane; // 对应车道号 + BYTE bySpeed; // 对应车速(KM/H) + BYTE byLaneState; // 车道状态;0-无状态,1-畅通,2-拥挤,3-堵塞 + BYTE byQueueLen; // 堵塞状态下排队长度(比如50米) + WORD wLoopState; //线圈状态,第几位表示几号线圈状态。状态1-到达,0-离开,线圈编号从镜头由近到远依次增大,用户在解析时优先解析车道号,再解析线圈号,单个车道的线圈号是唯一的。 + WORD wStateMask; //线圈状态掩码,掩码位为1对应wLoopState状态位有效,为0表示无效 + DWORD dwDownwardFlow; //当前车道 从上到下车流量 + DWORD dwUpwardFlow; //当前车道 从下到上车流量 + BYTE byJamLevel; //拥堵等级,当byLaneState为3时有效,1-轻度,2-中度,3-重度 + BYTE byVehicleDirection; //0-未知,1-由上而下,2-由下而上 + BYTE byJamFlow; //拥堵新增流量,每新增一辆车就上报一次累计车辆的信息 + BYTE byChannelizationLane; //渠化车道号(渠化表示,车道数量变化的情况,一般为路口车道的数目) + BYTE byVehicleType; //车型识别:0- 未知,1- 客车(大型),2- 货车(大型),3- 轿车(小型),4- 非机动车 + BYTE byRes1[5]; //保留 + WORD wTimeHeadway; // 车头时距,以秒计算 }NET_DVR_TPS_PARAM, *LPNET_DVR_TPS_PARAM; -//TPSʵʱϴ +//TPS实时过车数据上传 typedef struct tagNET_DVR_TPS_REAL_TIME_INFO { - DWORD dwSize; // ṹС - DWORD dwChan;//ͨ - NET_DVR_TIME_V30 struTime; //ʱ - NET_DVR_TPS_PARAM struTPSRealTimeInfo;// ͨͳϢ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ + DWORD dwSize; // 结构体大小 + DWORD dwChan;//通道号 + NET_DVR_TIME_V30 struTime; //检测时间 + NET_DVR_TPS_PARAM struTPSRealTimeInfo;// 交通参数统计信息 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 BYTE* pAddInfoBuffer; #else - /*Ϣָ,ָNET_DVR_TPS_ADDINFOṹ*/ + /*附加信息指针,指向NET_DVR_TPS_ADDINFO结构体*/ BYTE* pAddInfoBuffer; BYTE byRes2[4]; #endif - /*ϢʶǷNET_DVR_TPS_ADDINFOṹ壩,0-޸Ϣ, 1-иϢ*/ + /*附加信息标识(即是否有NET_DVR_TPS_ADDINFO结构体),0-无附加信息, 1-有附加信息。*/ BYTE byAddInfoFlag; - BYTE byRes1[3]; // - DWORD dwDeviceIDEx; // 豸IDչ - BYTE byRes[8]; // + BYTE byRes1[3]; // 保留 + DWORD dwDeviceIDEx; // 设备ID扩展 + BYTE byRes[8]; // 保留 }NET_DVR_TPS_REAL_TIME_INFO, *LPNET_DVR_TPS_REAL_TIME_INFO; -//ͳϢ +//统计信息 typedef struct tagNET_DVR_TPS_LANE_PARAM { - BYTE byLane; // Ӧ - BYTE bySpeed; // ƽٶ - WORD wArrivalFlow; // - DWORD dwLightVehicle; // Сͳ - DWORD dwMidVehicle; // ͳ - DWORD dwHeavyVehicle; // ͳ - DWORD dwTimeHeadway; // ͷʱ࣬ - DWORD dwSpaceHeadway; // ͷ࣬ - float fSpaceOccupyRation; // ռռʣٷֱȼ,*1000 - float fTimeOccupyRation; // ʱռʣٷֱȼ,*1000 - BYTE byStoppingTimes; //ƽͣ - BYTE byQueueLen; // ״̬Ŷӳȣ50ף - BYTE byFlag; //ϴʶ0-ʾT1ʱͳƽ,1-ʾT2ʱͳ - BYTE byVehicelNum; // - WORD wDelay; //ƽ - BYTE byRes1[6]; // - DWORD dwNonMotor; // ǻ + BYTE byLane; // 对应车道号 + BYTE bySpeed; // 车道过车平均速度 + WORD wArrivalFlow; //到达流量 + DWORD dwLightVehicle; // 小型车数量 + DWORD dwMidVehicle; // 中型车数量 + DWORD dwHeavyVehicle; // 重型车数量 + DWORD dwTimeHeadway; // 车头时距,以秒计算 + DWORD dwSpaceHeadway; // 车头间距,以米来计算 + float fSpaceOccupyRation; // 空间占有率,百分比计算,浮点数*1000 + float fTimeOccupyRation; // 时间占有率,百分比计算,浮点数*1000 + BYTE byStoppingTimes; //平均停车次数 + BYTE byQueueLen; // 堵塞状态下排队长度(比如50米) + BYTE byFlag; //上传标识,0-表示T1时间的统计结果,1-表示T2时间的统计 + BYTE byVehicelNum; //区域车辆数 + WORD wDelay; //平均延误 + BYTE byRes1[6]; // 保留 + DWORD dwNonMotor; // 非机动车数量 }NET_DVR_TPS_LANE_PARAM, *LPNET_DVR_TPS_LANE_PARAM; typedef struct tagNET_DVR_PANORAMA_LINKAGE { DWORD dwSize; - BYTE byEnable;//0-رգ1- + BYTE byEnable;//0-关闭,1-开启 BYTE byRes[127]; }NET_DVR_PANORAMA_LINKAGE, *LPNET_DVR_PANORAMA_LINKAGE; -// ͨͳϢ +// 交通参数统计信息 typedef struct tagNET_DVR_TPS_STATISTICS_PARAM { - BYTE byStart; // ʼ - BYTE byCMD; // ţ 08-ʱָ - BYTE byRes[2]; // Ԥֽ - WORD wDeviceID; // 豸ID - WORD wDataLen; // ݳ - BYTE byTotalLaneNum; // Ч + BYTE byStart; // 开始码 + BYTE byCMD; // 命令号, 08-定时成组数据指令 + BYTE byRes[2]; // 预留字节 + WORD wDeviceID; // 设备ID + WORD wDataLen; // 数据长度 + BYTE byTotalLaneNum; // 有效车道总数 BYTE byRes2[3]; - DWORD dwDeviceIDEx; // 豸IDչ + DWORD dwDeviceIDEx; // 设备ID扩展 BYTE byRes1[8]; - NET_DVR_TIME_V30 struStartTime; //ͳƿʼʱ - DWORD dwSamplePeriod; //ͳʱ,λ + NET_DVR_TIME_V30 struStartTime; //统计开始时间 + DWORD dwSamplePeriod; //统计时间,单位秒 NET_DVR_TPS_LANE_PARAM struLaneParam[MAX_TPS_RULE/*8*/]; }NET_DVR_TPS_STATISTICS_PARAM, *LPNET_DVR_TPS_STATISTICS_PARAM; -//TPSͳƹϴ +//TPS统计过车数据上传 typedef struct tagNET_DVR_TPS_STATISTICS_INFO { - DWORD dwSize; // ṹС - DWORD dwChan ;//ͨ - NET_DVR_TPS_STATISTICS_PARAM struTPSStatisticsInfo;// ͨͳϢ - DWORD dwJsonLen;//JsonϢ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ + DWORD dwSize; // 结构体大小 + DWORD dwChan ;//通道号 + NET_DVR_TPS_STATISTICS_PARAM struTPSStatisticsInfo;// 交通参数统计信息 + DWORD dwJsonLen;//Json报警信息长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 BYTE* pJsonBuf; #else - // JsonϢָ,JSONӦEventNotificationAlert Json Block + // Json报警信息指针,其JSON对应到EventNotificationAlert Json Block BYTE* pJsonBuf; BYTE byRes2[4]; #endif - BYTE byJsonInfoFlag; //ǷJson͸ݣ0-ޣ1- - BYTE byBrokenNetHttp; //־λ0-شݣ1-ش - BYTE byRes[114]; // + BYTE byJsonInfoFlag; //是否有Json透传数据,0-无,1-有 + BYTE byBrokenNetHttp; //断网续传标志位,0-不重传数据,1-重传数据 + BYTE byRes[114]; //保留 }NET_DVR_TPS_STATISTICS_INFO, *LPNET_DVR_TPS_STATISTICS_INFO; -#define DPC_CORRECT 1 //У -#define DPC_CORRECT_CANCEL 2 //ȡУ -#define DPC_CROSS_DISPALY_OPEN 3 //ʮֲʾ -#define DPC_CROSS_DISPALY_CLOSE 4 //ʮֲʾر -#define DPC_POINT 5 //У -#define DPC_UP 6 //Уƫ -#define DPC_DOWN 7 //Уƫ -#define DPC_RIGHT 8 //Уƫ -#define DPC_LEFT 9 //Уƫ -#define DPC_ALL_CORRECT 10 //лУ -#define DPC_SAVE 11 //㱣 +#define DPC_CORRECT 1 //校正 +#define DPC_CORRECT_CANCEL 2 //取消校正 +#define DPC_CROSS_DISPALY_OPEN 3 //坏点检测十字叉显示开启 +#define DPC_CROSS_DISPALY_CLOSE 4 //坏点检测十字叉显示关闭 +#define DPC_POINT 5 //坏点校正坐标 +#define DPC_UP 6 //坏点校正坐标点向上偏移 +#define DPC_DOWN 7 //坏点校正坐标点向下偏移 +#define DPC_RIGHT 8 //坏点校正坐标点向右偏移 +#define DPC_LEFT 9 //坏点校正坐标点向左偏移 +#define DPC_ALL_CORRECT 10 //所有坏点校正 +#define DPC_SAVE 11 //坏点保存 typedef struct tagNET_DVR_DPC_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ - WORD wCtrlType ;//ο궨 + DWORD dwChannel; //通道号 + WORD wCtrlType ;//参考宏定义 /* - ֶУĬΪֶУģʽʹwCtrlTypeͽֶУ - ԶУ豸ԶУٽֶУʱwCtrlTypestruPointЧ + 手动校正:默认为手动校正模式,使用wCtrlType操作类型进行手动校正。 + 自动校正:设备将自动进行校正,无需再进行手动校正,此时wCtrlType、struPoint参数无效。 */ - BYTE byDPCMode;//Уģʽ0-ֶУ1-ԶУ + BYTE byDPCMode;//坏点校正模式:0-手动校正,1-自动校正 BYTE byRes; - NET_VCA_POINT struPoint; /*ͼƽ꣬һ0-1*/ + NET_VCA_POINT struPoint; /*输入的图像平面坐标,归一化到0-1*/ BYTE byRes1[64]; }NET_DVR_DPC_PARAM, *LPNET_DVR_DPC_PARAM; -//ǾУ(FFC)ֶģʽ +//非均匀性校正(FFC)手动模式 typedef struct tagNET_DVR_FFC_MANUAL_INFO { DWORD dwSize; - DWORD dwChannel; //ͨ + DWORD dwChannel; //通道号 BYTE byRes[64]; }NET_DVR_FFC_MANUAL_INFO, *LPNET_DVR_FFC_MANUAL_INFO; -//ǾУ(FFC) +//非均匀性校正(FFC)背景补偿 typedef struct tagNET_DVR_FFC_BACKCOMP_INFO { DWORD dwSize; - DWORD dwChannel; //ͨ + DWORD dwChannel; //通道号 BYTE byRes[64]; }NET_DVR_FFC_BACKCOMP_INFO, *LPNET_DVR_FFC_BACKCOMP_INFO; -//洢״̬ +//存储服务器开关状态 typedef struct tagNET_DVR_STORAGE_SERVER_SWITCH_CFG { DWORD dwSize; - /*洢ͼƬأλʾ0-رգ1- - 0-ƶץͼ(ݲ֧) - 1-ץͼ(ݲ֧) - + /*存储图片开关;按位表示,0-关闭,1-开启 + 数组0-移动侦测抓图(暂不支持) + 数组1-报警抓图(暂不支持) + …… */ BYTE byPicEnable[MAX_PIC_SWITCH_STORAGE_SERVER]; - /*洢Ϣأλʾ0-رգ1- - 0-ȶͼ(ݲ֧) - 1-(ݲ֧) - + /*存储附加信息开关;按位表示,0-关闭,1-开启 + 数组0-热度图(暂不支持) + 数组1-客流量(暂不支持) + …… */ BYTE byAddInfoEnable[MAX_INFO_SWITCH_STORAGE_SERVER]; BYTE byRes[324]; } NET_DVR_STORAGE_SERVER_SWITCH_CFG, *LPNET_DVR_STORAGE_SERVER_SWITCH_CFG; -//ǿֹͣȡ֤ +//强制停止取证 typedef struct tagNET_DVR_FORCESTOP_FORENSICS_CFG { DWORD dwSize; - DWORD dwChannel; //ͨ + DWORD dwChannel; //通道号 BYTE byRes[64]; }NET_DVR_FORCESTOP_FORENSICS_CFG, *LPNET_DVR_FORCESTOP_FORENSICS_CFG; typedef struct tagNET_DVR_DEC_VCA_ALARM { DWORD dwSize; - DWORD dwDisplayNo; //ܱʾͨ - BYTE bySubWinNo; //ܱӴں + DWORD dwDisplayNo; //产生智能报警的显示通道号 + BYTE bySubWinNo; //产生智能报警的子窗口号 BYTE byRes1[3]; - NET_DVR_TIME_V30 struTime; //ʱ - NET_DVR_PU_STREAM_CFG_V41 struSourceInfo; //ԴϢ - BYTE *byAlarmPic; //ͼƬ - DWORD dwAlarmPicSize; //ͼƬСλֽ + NET_DVR_TIME_V30 struTime; //产生报警时间 + NET_DVR_PU_STREAM_CFG_V41 struSourceInfo; //码流源信息 + BYTE *byAlarmPic; //报警图片缓冲区 + DWORD dwAlarmPicSize; //报警图片大小,单位:字节 BYTE byRes2[64]; }NET_DVR_DEC_VCA_ALARM, *LPNET_DVR_DEC_VCA_ALARM; typedef struct tagNET_DVR_DEC_VCA_ALARM_LOGO { - BYTE byEnableLogo; //Ƿܱlogo0-ӣ0- - BYTE byFlash; //Ƿ˸0-˸0-˸ - WORD wFlashTime; //˸ʱ䣬λ룬ȡֵΧӽȡ - DWORD dwLogoX; //logo X꣬봰ܴС1920*1920 - DWORD dwLogoY; //logo Y + BYTE byEnableLogo; //是否叠加智能报警logo,0-不叠加,非0-叠加 + BYTE byFlash; //是否闪烁,0-不闪烁,非0-闪烁 + WORD wFlashTime; //闪烁时间,单位:秒,取值范围从解码器能力集获取 + DWORD dwLogoX; //logo X坐标,解码窗口总大小:1920*1920 + DWORD dwLogoY; //logo Y坐标 BYTE byRes[32]; }NET_DVR_DEC_VCA_ALARM_LOGO, *LPNET_DVR_DEC_VCA_ALARM_LOGO; typedef struct tagNET_DVR_DEC_VCA_ALARM_PIC { - BYTE byUploadPic; //ܱʱǷϴͼƬ0-ϴ0-ϴ - BYTE byOverlayTargetInfo; //ͼƬǷĿϢ0-ӣ0- - BYTE byOverlayRuleInfo; //ͼƬǷܹϢ0-ӣ0- - BYTE byPicQuality; //ͼƬϵ 0- 1-Ϻ 2-һ - /*ͼƬС ͨȡ - 0-CIF 1-QCIF 2-D1 3-UXGA(1600x1200), 4-SVGA(800x600),5-HD720p(1280x720) - 6-VGA 7-XVGA 8-HD900p 9-HD1080 10-2560*1920 - 11-1600*304 12-2048*1536 13-2448*2048, 14-2448*1200 15-2448*800 - 16-XGA(1024*768), 17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080i, 20-576*576 + BYTE byUploadPic; //智能报警时是否上传报警图片,0-不上传,非0-上传 + BYTE byOverlayTargetInfo; //报警图片是否叠加目标信息,0-不叠加,非0-叠加 + BYTE byOverlayRuleInfo; //报警图片是否叠加智能规则信息,0-不叠加,非0-叠加 + BYTE byPicQuality; //图片质量系数 0-最好 1-较好 2-一般 + /*图片大小 可以通过能力集获取 + 0-CIF, 1-QCIF, 2-D1, 3-UXGA(1600x1200), 4-SVGA(800x600),5-HD720p(1280x720), + 6-VGA, 7-XVGA, 8-HD900p, 9-HD1080, 10-2560*1920, + 11-1600*304, 12-2048*1536, 13-2448*2048, 14-2448*1200, 15-2448*800, + 16-XGA(1024*768), 17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080i, 20-576*576, 21-1536*1536, 22-1920*1920, 23-320*240, 24-720*720, 25-1024*768, - 26-1280*1280, 27-1600*600, 28-2048*768, 0xff-Auto(ʹõǰֱ)*/ + 26-1280*1280, 27-1600*600, 28-2048*768, 0xff-Auto(使用当前码流分辨率)*/ BYTE byPicSize; BYTE byRes[27]; }NET_DVR_DEC_VCA_ALARM_PIC, *LPNET_DVR_DEC_VCA_ALARM_PIC; @@ -42900,72 +42900,72 @@ typedef struct tagNET_DVR_DEC_VCA_ALARM_PIC typedef struct tagNET_DVR_DEC_VCA_ALARM_CFG { DWORD dwSize; - NET_DVR_DEC_VCA_ALARM_LOGO struAlarmLogo; //ܱlogoӲ - NET_DVR_DEC_VCA_ALARM_PIC struAlarmPic; //ܱͼƬ + NET_DVR_DEC_VCA_ALARM_LOGO struAlarmLogo; //智能报警logo叠加参数 + NET_DVR_DEC_VCA_ALARM_PIC struAlarmPic; //智能报警图片参数 BYTE byRes[64]; }NET_DVR_VCA_ALARM_CFG, *LPNET_DVR_DEC_VCA_ALARM_CFG; -#define MAX_OSD_LEN 64 //OSD +#define MAX_OSD_LEN 64 //输出口OSD长度 typedef struct tagNET_DVR_OUTPUT_PIC_INFO { DWORD dwSize; - BYTE sPicName[NAME_LEN];//ͼƬ - BYTE byUsed; //ǷѴڣ0-ڣ1- + BYTE sPicName[NAME_LEN];//图片名称 + BYTE byUsed; //是否已存在,0-不存在,1-存在 BYTE byRes[31]; }NET_DVR_OUTPUT_PIC_INFO,*LPNET_DVR_OUTPUT_PIC_INFO; typedef struct tagNET_DVR_OUTPUT_PIC_CFG { DWORD dwSize; - DWORD dwOutputPicNo; //ͼƬ - BYTE byEnable; //logoǷʾ1-ʾ0- + DWORD dwOutputPicNo; //图片序号 + BYTE byEnable; //logo是否显示,1-显示,0-隐藏 BYTE byRes1[3]; - NET_DVR_RECTCFG_EX struRect;//logoλãڷΧܴСΪ1920*1920 - BYTE byFlash; //Ƿ˸1-˸0-˸ - BYTE byTranslucent; //Ƿ͸1-͸0-͸ - BYTE byRes2[2]; // - DWORD dwOutputPicWinNo; //ͼƬںţ1ֽ豸+1ֽں+2ֽͼƬںţ,ȡȫʱЧ + NET_DVR_RECTCFG_EX struRect;//logo位置,输出口范围总大小为1920*1920 + BYTE byFlash; //是否闪烁1-闪烁,0-不闪烁 + BYTE byTranslucent; //是否半透明1-半透明,0-不半透明 + BYTE byRes2[2]; //保留 + DWORD dwOutputPicWinNo; //输出口图片窗口号(1字节设备号+1字节输出口号+2字节输出口图片窗口号),获取全部时有效 BYTE byRes3[28]; }NET_DVR_OUTPUT_PIC_CFG,*LPNET_DVR_OUTPUT_PIC_CFG; typedef struct tagNET_DVR_OUTPUT_OSD_CFG { DWORD dwSize; - BYTE byEnable; //OSDǷʾ0-ʾ1-ʾ - BYTE byFontSize; //С1-2-У3-С - BYTE byOSDColor; //OSDɫã0-Ĭϣ 1-ڣ2-ף3-죬4-̣5- + BYTE byEnable; //OSD是否显示,0-不显示,1-显示 + BYTE byFontSize; //字体大小,1-大,2-中,3-小 + BYTE byOSDColor; //OSD颜色配置,0-默认, 1-黑,2-白,3-红,4-绿,5-蓝 BYTE byRes1[1]; - BYTE byOsdContent[MAX_OSD_LEN]; //OSD - NET_DVR_RECTCFG_EX struRect;//OSDλãڷΧܴСΪ1920*1920 - DWORD dwOsdWinNo; //OSDںţ1ֽ豸+1ֽں+2ֽOSDںţȡʱЧ - BYTE byRes2[32]; // + BYTE byOsdContent[MAX_OSD_LEN]; //OSD内容 + NET_DVR_RECTCFG_EX struRect;//OSD位置,输出口范围总大小为1920*1920 + DWORD dwOsdWinNo; //输出口OSD窗口号(1字节设备号+1字节输出口号+2字节OSD窗口号),获取所有时有效 + BYTE byRes2[32]; //保留 }NET_DVR_OUTPUT_OSD_CFG,*LPNET_DVR_OUTPUT_OSD_CFG; typedef struct tagNET_DVR_CHAN_RELATION_RESOURCE { DWORD dwSize; - DWORD dwDisplayChan; //ʾͨţ1ֽ豸+1ֽڱ+2ֽʾͨţ - BYTE byRelateAudio; //ǷӴƵ + DWORD dwDisplayChan; //显示通道号(1字节设备号+1字节保留+2字节显示通道号) + BYTE byRelateAudio; //是否关联子窗口音频 BYTE byRes1[3]; - DWORD dwSubWinNo; //ƵӴںţ1ֽڵǽ+1ֽӴں+2ֽڴںţ - DWORD dwChannel; //ͨţȡȫʱЧ + DWORD dwSubWinNo; //关联音频的子窗口号(1字节电视墙号+1字节子窗口号+2字节窗口号) + DWORD dwChannel; //编码通道号,获取全部时有效 BYTE byRes2[32]; }NET_DVR_CHAN_RELATION_RESOURCE, *LPNET_DVR_CHAN_RELATION_RESOURCE; typedef struct tagNET_DVR_ALARM_CHAN_ABLITITY { DWORD dwSize; - BYTE bySensorChan[64];//ģͨ ±ʾͨ 0-ʾ֧֣1-ʾ֧ - BYTE byAlarmInChan[64];//ͨ ±ʾͨ 0-ʾ֧֣1-ʾ֧ - BYTE byAlarmOutChan[64];//ͨ ±ʾͨ 0-ʾ֧֣1-ʾ֧ - BYTE by485Chan[64];//485ͨ ±ʾͨ 0-ʾ֧֣1-ʾ֧ + BYTE bySensorChan[64];//模拟量通道 下标表示通道号 0-表示不支持,1-表示支持 + BYTE byAlarmInChan[64];//报警输入通道 下标表示通道号 0-表示不支持,1-表示支持 + BYTE byAlarmOutChan[64];//报警输出通道 下标表示通道号 0-表示不支持,1-表示支持 + BYTE by485Chan[64];//485通道 下标表示通道号 0-表示不支持,1-表示支持 BYTE byRes[128]; }NET_DVR_ALARM_CHAN_ABLITITY, *LPNET_DVR_ALARM_CHAN_ABLITITY; typedef struct { DWORD dwSize; - BYTE byOutScale[8];//±ʾںţ0-ʾ֧֣1-ʾ12V2-ʾ24V + BYTE byOutScale[8];//下标表示主辅口号,0-表示不支持,1-表示12V,2-表示24V BYTE byRes[16]; }NET_DVR_OUT_SCALE_CFG, *LPNET_DVR_OUT_SCALE_CFG; @@ -42974,53 +42974,53 @@ typedef struct tagNET_DVR_MONITOR_LOCATION_COND DWORD dwSize; DWORD dwChan; /* - 0 ʾ ץMPRģʽ֡ץ IPCʹã - 1 ʾ ץ HVT ģʽ쿨IPCʹã + 0 表示关联 抓拍MPR模式(多帧触发抓拍 IPC使用) + 1 表示关联 抓拍 HVT 模式(混卡IPC使用) */ BYTE byRelateType; - BYTE byRes[63]; // + BYTE byRes[63]; //保留 }NET_DVR_MONITOR_LOCATION_COND, *LPNET_DVR_MONITOR_LOCATION_COND; typedef struct tagNET_DVR_MONITOR_LOCATION_CFG { DWORD dwSize; - BYTE byMonitoringSiteID[MAX_ID_LEN/*48*/]; //ʾ - BYTE byDeviceID[MAX_ID_LEN/*48*/]; //豸 - BYTE byDirectionNo; //ʾ,0-,1-,2-,3-˫,4-ɶ,5-,6-,7-ɱ,8- - BYTE byRes1[3]; // - BYTE byMonitorInfo[MONITORSITE_ID_LEN/*48*/]; //ʾϢ - BYTE byRes[128]; // + BYTE byMonitoringSiteID[MAX_ID_LEN/*48*/]; //显示点编号 + BYTE byDeviceID[MAX_ID_LEN/*48*/]; //设备编号 + BYTE byDirectionNo; //显示方向编号,0-无,1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其他 + BYTE byRes1[3]; //保留 + BYTE byMonitorInfo[MONITORSITE_ID_LEN/*48*/]; //显示点信息描述 + BYTE byRes[128]; //保留 }NET_DVR_MONITOR_LOCATION_CFG, *LPNET_DVR_MONITOR_LOCATION_CFG; typedef struct tagNET_DVR_REMOTECONTROL_COND { - DWORD dwSize; //ṹС - DWORD dwChannel; //ͨ + DWORD dwSize; //结构大小 + DWORD dwChannel; //通道号 BYTE byRes[64]; }NET_DVR_REMOTECONTROL_COND, *LPNET_DVR_REMOTECONTROL_COND; typedef struct tagNET_DVR_REMOTECONTROL_STATUS_ { - DWORD dwSize; //ṹС - BYTE byAlarmStatus;//״̬0-,1-,2- + DWORD dwSize; //结构大小 + BYTE byAlarmStatus;//布防状态,0-保留,1-撤防,2-布防 BYTE byRes[3]; - WORD wAlarmDealyTime;//ӳʱ䣬λs - WORD wDisAlarmDealyTime;//ӳʱ䣬λs + WORD wAlarmDealyTime;//布防延迟时间,单位s + WORD wDisAlarmDealyTime;//撤防延迟时间,单位s BYTE byRes1[64]; } NET_DVR_REMOTECONTROL_STATUS, *LPNET_DVR_REMOTECONTROL_STATUS; typedef struct tagNET_DVR_SECURITY_CFG { DWORD dwSize; - BYTE byCommuMode;//˽Эͨģʽ0-ģʽ1-ȫģʽ + BYTE byCommuMode;//私有协议通信模式,0-兼容模式,1-安全模式 BYTE byRes1[2]; - BYTE byWebAuthentication; //web֤ 0-digest1-basic2-digest/basic;Ĭbasic֤ - BYTE byRtspAuthentication; //rtsp֤ 0-disable1-basic2-digest3-digest/basic;Ĭbasic֤ - BYTE byTelnetServer; //telnet 0ã1 - BYTE bySSHServer; //SSH 0(Ĭ)1 - BYTE byIllegalLoginLock; //½, 0-ãĬϣ1- - BYTE byStreamEncryption; // 0-ܣ1- - BYTE byAntiAttack; //Ƿܣ0- ã1-(socketʱ5sر) + BYTE byWebAuthentication; //web认证配置 0-digest、1-basic、2-digest/basic;默认basic认证 + BYTE byRtspAuthentication; //rtsp认证配置 0-disable、1-basic、2-digest、3-digest/basic;默认basic认证 + BYTE byTelnetServer; //telnet设置 0~禁用,1~启用 + BYTE bySSHServer; //SSH设置 0~禁用(默认),1~启用 + BYTE byIllegalLoginLock; //开启登陆锁定, 0-启用(默认),1-禁用 + BYTE byStreamEncryption; //码流加密 0-不加密,1-加密 + BYTE byAntiAttack; //是否开启防攻击功能,0- 不启用,1-启用(socket延时5s关闭) BYTE byRes[26]; }NET_DVR_SECURITY_CFG,*LPNET_DVR_SECURITY_CFG; @@ -43028,26 +43028,26 @@ typedef struct tagNET_DVR_PASSWORD_MANAGE_CFG { DWORD dwSize; BYTE byRes[3]; - BYTE byLockCount; //ӦûIPĴ¼󣬶Ըû0-ֵΪĴ ĬΪ01ʾ¼1Ժû - DWORD dwLockTime; //ʱ䣬ʾʱ䣬λ롣Ϊ0byLockCountΪ0ʱdwLockTimeЧ - BYTE byRes1[128]; //4ֽڶ + BYTE byLockCount; //对应用户名或IP被几次连续的错误密码登录后,对该用户进行锁定,0-不锁定,其他值为锁定的次数。 默认为0,例如1表示错误登录1次以后就锁定该用户名。 + DWORD dwLockTime; //锁定时间,表示错误后锁定的时间,单位:秒。不能为0,byLockCount不为0时,dwLockTime才有效 + BYTE byRes1[128]; //4字节对齐 } NET_DVR_PASSWORD_MANAGE_CFG,*LPNET_DVR_PASSWORD_MANAGE_CFG; typedef struct tagNET_DVR_UNLOCK_INFO { DWORD dwSize; - BYTE byUnlockType; //0-Ч 1-IP2-IP - BYTE byIPVersion; //1-IPV42-IPV6byUnlockTypeΪ1ʱòЧ + BYTE byUnlockType; //0-无效, 1-按IP解锁,2-解锁所有IP + BYTE byIPVersion; //1-IPV4,2-IPV6,当byUnlockType为1时,该参数有效 BYTE byRes1[2]; - NET_DVR_IPADDR struIPAddr; //IPַ + NET_DVR_IPADDR struIPAddr; //IP地址 BYTE byRes[64]; } NET_DVR_UNLOCK_INFO,*LPNET_DVR_UNLOCK_INFO; typedef struct tagNET_DVR_LOCKED_INFO { DWORD dwSize; - BYTE byIPType; //IP 0-Ч1-IPV42-IPV6 + BYTE byIPType; //IP类型 0-无效,1-IPV4,2-IPV6 BYTE byRes1[3]; NET_DVR_IPADDR struIPAddress; BYTE byRes[20]; @@ -43057,301 +43057,301 @@ typedef struct tagNET_DVR_LOCKED_INFO typedef struct tagNET_DVR_VEHICLE_PARA { BYTE sLicense[MAX_LICENSE_LEN]; - /*ֵ - 0-㷨ⲻ֧ʶң1-ݿ˹͹(CZ - Czech Republic)2-(FRA - France) - 3-¹(DE - Germany),4-(E - Spain), 5-(IT - Italy)6-(NL - Netherlands)7-(PL - Poland)8-˹工(SVK - Slovakia), 9-׶˹(BY - Belorussia), 10-Ħ(MDA - Moldova)11-˹(RU - Russia)12-ڿ(UA - Ukraine), - 169-ô(Canada), 172-(US), 227-Ĵ(Australia), 0xfe-޷ʶ + /*国家索引值 + 0-算法库不支持牌识国家,1-捷克共和国(CZ - Czech Republic),2-法国(FRA - France), + 3-德国(DE - Germany),4-西班牙(E - Spain), 5-意大利(IT - Italy),6-荷兰(NL - Netherlands),7-波兰(PL - Poland),8-斯洛伐克(SVK - Slovakia), 9-白俄罗斯(BY - Belorussia), 10-摩尔多瓦(MDA - Moldova),11-俄罗斯(RU - Russia),12-乌克兰(UA - Ukraine), + 169-加拿大(Canada), 172-美国(US), 227-澳大利亚(Australia), 0xfe-无法识别 */ - BYTE byCountry; // ֵ + BYTE byCountry; // 国家索引值 BYTE byRes[239]; }NET_DVR_VEHICLE_PARA, *LPNET_DVR_VEHICLE_PARA; typedef struct tagNET_DVR_FACE_PIC_DATA_INFO { - DWORD dwImageLen; //ͼƬС - NET_VCA_RECT struVcaRect; //ͼڴͼеλãһ - DWORD dwFaceScore; //ƶȣȡֵΧ0-100 - BYTE byVcaRectOnly; //Ƿֻϴ꣺0-1- + DWORD dwImageLen; //图片大小 + NET_VCA_RECT struVcaRect; //子图在大图中的坐标位置,归一化坐标 + DWORD dwFaceScore; //相似度,取值范围0-100 + BYTE byVcaRectOnly; //是否只上传坐标:0-否;1-是 BYTE byRes1[3]; - DWORD dwPID; //ͼƬID - DWORD dwFaceSearchNum;// - NET_VCA_RECT struMultiVcaRect[NET_DVR_MAX_FACE_SEARCH_NUM];//ͼڴͼеλãһ, byVcaRectOnly=1ʱã + DWORD dwPID; //图片ID + DWORD dwFaceSearchNum;// 搜索人脸区域个数 + NET_VCA_RECT struMultiVcaRect[NET_DVR_MAX_FACE_SEARCH_NUM];//(多个)子图在大图中的坐标位置,归一化坐标, byVcaRectOnly=1时启用,紧凑排列 BYTE byRes[136]; - BYTE *pImage; //ͼƬҪΪjpgʽ + BYTE *pImage; //其中图片要求为jpg格式 }NET_DVR_FACE_PIC_DATA_INFO, *LPNET_DVR_FACE_PIC_DATA_INFO; typedef struct tagNET_DVR_BEHAVIOUR_COND { - DWORD dwSearchType; // - //&0x1 - Խ - //&0x2 - - //&0x4 - Ʒ - //&0x8 - Ʒȡ - //&0x10 - - //&0x20 - 뿪 - //&0x40 - Ƿͣ - //&0x80 - ǻ - //&0x100 -Աۼ - //&0x200 - ƶ - //&0x400 - ڼ - //&0x800 - 仯 - //&0x1000 - ˶ - //&0x2000 - Ա - //&0x4000 - Ա - //&0x8000 - Ա - //&0x10000 C̬Ʒ - //&0x20000 C ֻ - BYTE byHumanMisinfo;// ֻȡϢ 0-1- - BYTE byRes[251]; // + DWORD dwSearchType; //搜索类型 + //&0x1 - 穿越警戒线 + //&0x2 - 区域入侵 + //&0x4 - 物品遗留 + //&0x8 - 物品拿取 + //&0x10 - 进入区域 + //&0x20 - 离开区域 + //&0x40 - 非法停车 + //&0x80 - 徘徊 + //&0x100 -人员聚集 + //&0x200 - 快速移动 + //&0x400 - 离岗检测 + //&0x800 - 人数变化 + //&0x1000 - 剧烈运动 + //&0x2000 - 人员奔跑 + //&0x4000 - 人员倒地 + //&0x8000 - 人员滞留 + //&0x10000 –态势分析 + //&0x20000 – 玩手机 + BYTE byHumanMisinfo;// 只获取人体误报信息 0-否,1-是 + BYTE byRes[251]; //保留 }NET_DVR_BEHAVIOUR_COND, *LPNET_DVR_BEHAVIOUR_COND; typedef union tagNET_DVR_SMARTSEARCH_PIC_UNION { - BYTE byLen[256]; //峤 - NET_DVR_VEHICLE_PARA struVehiclePara; //Ϣ - NET_VCA_HUMAN_FEATURE struHumaFeature; // - NET_DVR_FACE_PIC_DATA_INFO struHumaPic; //ͼϢѯԶͼƬͼͼܣ - NET_DVR_BEHAVIOUR_COND struBehaviourCond; //쳣Ϊ + BYTE byLen[256]; //联合体长度 + NET_DVR_VEHICLE_PARA struVehiclePara; //车辆检测信息 + NET_VCA_HUMAN_FEATURE struHumaFeature; //人脸属性 + NET_DVR_FACE_PIC_DATA_INFO struHumaPic; //根据人脸子图信息查询(用于远程图片的以图索图功能) + NET_DVR_BEHAVIOUR_COND struBehaviourCond; //异常行为检测搜索条件 }NET_DVR_SMARTSEARCH_PIC_UNION,*LPNET_DVR_SMARTSEARCH_PIC_UNION; -typedef struct tagNET_DVR_SMART_SEARCH_PIC_PARA //ͼƬṹ size 344 +typedef struct tagNET_DVR_SMART_SEARCH_PIC_PARA //智能图片搜索结构体 size 344 { - DWORD dwChanNo; //ͨ - DWORD byStreamID[STREAM_ID_LEN] ; //IDϢdwChanNoȣȼϸߣbyStreamIDΪʱʹIDΪյʹdwChanNoֶ - NET_DVR_TIME_EX struStartTime; //¼ʼʱ - NET_DVR_TIME_EX struEndTime; //¼ֹͣʱ - WORD wSearchType; //ܲ 0- 1-ԣ 2-ͼͼ 3-쳣Ϊ + DWORD dwChanNo; //通道号 + DWORD byStreamID[STREAM_ID_LEN] ; //流ID信息,与dwChanNo相比,优先级较高,即当byStreamID不为空时,则使用流ID,为空的情况下使用dwChanNo字段 + NET_DVR_TIME_EX struStartTime; //录像开始的时间 + NET_DVR_TIME_EX struEndTime; //录像停止的时间 + WORD wSearchType; //智能查找类型 0-车辆检索 ,1-人脸属性, 2-以图索图 ,3-异常行为检测 BYTE byRes1[2]; - NET_DVR_SMARTSEARCH_PIC_UNION uSmartSearchCond; //ܲ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱ + NET_DVR_SMARTSEARCH_PIC_UNION uSmartSearchCond; //智能查找条件 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 BYTE byRes[59]; }NET_DVR_SMART_SEARCH_PIC_PARA, *LPNET_DVR_SMART_SEARCH_PIC_PARA; -//ʶ +//人体特征识别结果 typedef struct tagNET_DVR_FACE_SUB_PIC_INFO { - DWORD dwSimilarity; //ƶ 0-100 - NET_VCA_RECT struVcaRect; //򣬹һ - BYTE byRes2[236]; // + DWORD dwSimilarity; //相似度 0-100 + NET_VCA_RECT struVcaRect; //人脸区域,归一化坐标 + BYTE byRes2[236]; //保留 }NET_DVR_FACE_SUB_PIC_INFO ,*LPNET_DVR_FACE_SUB_PIC_INFO; typedef struct tagNET_DVR_BEHAVIOR_INFO { NET_VCA_RECT struVcaRect; - WORD wPeopleNum; //ͼƬͣNET_DVR_SMART_SEARCH_PIC_RET wPicTypeΪ̬ƷʱЧ - BYTE byRes2[238]; // + WORD wPeopleNum; //区域人数,仅图片类型(NET_DVR_SMART_SEARCH_PIC_RET 中wPicType)为态势分析时有效 + BYTE byRes2[238]; //保留 }NET_DVR_BEHAVIOR_INFO ,*LPNET_DVR_BEHAVIOR_INFO; typedef union tagNET_DVR_PIC_FEATURE_UNION { - BYTE byLen[256]; //峤 - NET_DVR_PLATE_INFO struPlateInfo; //Ϣ - NET_DVR_FACE_SUB_PIC_INFO struFaceSubInfo; //ͼϢ - NET_DVR_BEHAVIOR_INFO struBehavior; //쳣ΪӦͼϢ + BYTE byLen[256]; //联合体长度 + NET_DVR_PLATE_INFO struPlateInfo; //车辆检索信息 + NET_DVR_FACE_SUB_PIC_INFO struFaceSubInfo; //人脸子图信息 + NET_DVR_BEHAVIOR_INFO struBehavior; //异常行为检测对应的子图信息 }NET_DVR_PIC_FEATURE_UNION,*LPNET_DVR_PIC_FEATURE_UNION; typedef struct tagNET_DVR_SMART_SEARCH_PIC_RET { - char sFileName[PICTURE_NAME_LEN];//ļ - NET_DVR_TIME_EX struTime; //ͼƬץͼʱ - DWORD dwFileSize; //ļĴС - WORD wPicType; //ͼƬ 0- 1-ԣ 2-ͼͼ 3-Խߣ4-֣ 5-Ʒ 6-Ʒȡ 7- 8-뿪 9-Ƿͣ10-ǻ11-Աۼ12-ƶ,13-Աܣ14-˶15-Աأ16-쳣17-ڼ⣬18-Ա19-̬Ʒ 20-ֻ - BYTE byRes1[2]; // - NET_DVR_PIC_FEATURE_UNION uPicFeature; //ͼƬ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cTimeDifferenceH; //UTCʱСʱ-12 ... +14 ʾʱ - char cTimeDifferenceM; //UTCʱӣ-30, 0, 30, 45ʾʱ + char sFileName[PICTURE_NAME_LEN];//文件名 + NET_DVR_TIME_EX struTime; //图片的抓图时间 + DWORD dwFileSize; //文件的大小 + WORD wPicType; //图片类型 0-车辆检索 ,1-人脸属性, 2-以图索图 ,3-穿越警戒线,4-区域入侵, 5-物品遗留, 6-物品拿取, 7-进入区域, 8-离开区域, 9-非法停车,10-徘徊,11-人员聚集,12-快速移动,13-人员奔跑,14-剧烈运动,15-人员倒地,16-人数异常,17-离岗检测,18-人员滞留,19-态势分析 20-玩手机 + BYTE byRes1[2]; //保留 + NET_DVR_PIC_FEATURE_UNION uPicFeature; //图片属性 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 BYTE byRes[29]; }NET_DVR_SMART_SEARCH_PIC_RET, *LPNET_DVR_SMART_SEARCH_PIC_RET; typedef struct tagNET_DVR_T1TEST_SEND_DATA_BUZZER { - BYTE byHearSound; //Ƿ 0-δ1- - BYTE byRes[31]; // + BYTE byHearSound; //是否听到声音 0-未听到,1-听到 + BYTE byRes[31]; //保留 }NET_DVR_T1TEST_SEND_DATA_BUZZER,*LPNET_DVR_T1TEST_SEND_DATA_BUZZER; typedef union NET_DVR_T1TEST_DATA_UNION { BYTE byUnionLen[32]; - NET_DVR_T1TEST_SEND_DATA_BUZZER struBuzzer; // - NET_DVR_TIME_V30 struCurTime; //ǰPCʱ + NET_DVR_T1TEST_SEND_DATA_BUZZER struBuzzer; //蜂鸣器 + NET_DVR_TIME_V30 struCurTime; //当前PC机时间 }NET_DVR_T1TEST_DATA_UNION,*LPNET_DVR_T1TEST_DATA_UNION; typedef struct tagNET_DVR_T1TEST_SEND_DATA { - DWORD dwSize; //ṹС - BYTE byDataType; // 0-1-pcʱ + DWORD dwSize; //结构体大小 + BYTE byDataType; //数据类型 0-蜂鸣器,1-pc本地时间 BYTE byRes1[3]; - NET_DVR_T1TEST_DATA_UNION uSendData; //͵ + NET_DVR_T1TEST_DATA_UNION uSendData; //发送的数据内容 BYTE byRes[64]; }NET_DVR_T1TEST_SEND_DATA,*LPNET_DVR_T1TEST_SEND_DATA; -typedef struct tagNET_DVR_PIC_MODEL_CFG //ͼģ +typedef struct tagNET_DVR_PIC_MODEL_CFG //图像建模参数配置 { - DWORD dwSize; //ṹС - BYTE byEnable; //Ƿ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用 BYTE byRes[63]; }NET_DVR_PIC_MODEL_CFG, *LPNET_DVR_PIC_MODEL_CFG; -typedef struct tagNET_DVR_MOUSE_EVENT_PARAM //Ϣ +typedef struct tagNET_DVR_MOUSE_EVENT_PARAM //鼠标信息配置 { - DWORD dwSize; //ṹС - BYTE byMouseEvent; //¼ͣ 0-1-˫2-Ҽ3-Ϲ4-¹ - BYTE byRes1[3]; // - NET_VCA_POINT struPoint; //λ꣬һ - BYTE byRes[64]; // + DWORD dwSize; //结构体大小 + BYTE byMouseEvent; //鼠标事件类型, 0-鼠标左键单击,1-鼠标左键双击,2-鼠标右键,3-滚轮上滚,4-滚轮下滚 + BYTE byRes1[3]; //保留 + NET_VCA_POINT struPoint; //鼠标点位置坐标,归一化处理 + BYTE byRes[64]; //保留 }NET_DVR_MOUSE_EVENT_PARAM, *LPNET_DVR_MOUSE_EVENT_PARAM; typedef struct tagNET_DVR_AUTO_LIMIT_WAVE_CFG { - BYTE byFBCEnable; //FBC 0-1- - BYTE byMode; //ģʽ, 0-, 1-ͨ,2- - BYTE byFilterQValue; //Ӧ˲QֵλOct, 0-1/40,1-1/10, ĬֵΪ1/40 Oct - BYTE byStaticFilterNum; //̬˲ȡֵΧ0-12 + BYTE byFBCEnable; //FBC开关 0-不开启,1-开启 + BYTE byMode; //模式, 0-快速, 1-普通,2-慢速 + BYTE byFilterQValue; //自适应滤波器Q值,单位Oct, 0-1/40,1-1/10, 默认值为1/40 Oct + BYTE byStaticFilterNum; //静态滤波器数量,取值范围0-12 BYTE byRes[16]; }NET_DVR_AUTO_LIMIT_WAVE_CFG,*LPNET_DVR_AUTO_LIMIT_WAVE_CFG; typedef struct _NET_DVR_DSP_PARAMETER_CFG { - BYTE byFBCEnable; //FBC 0-1- - BYTE byVolume; // ȡֵΧ0~255 + BYTE byFBCEnable; //FBC开关 0-不开启,1-开启 + BYTE byVolume; //输入音量 取值范围0~255 BYTE byRes[22]; }NET_DVR_DSP_PARAMETER_CFG, *LPNET_DVR_DSP_PARAMETER_CFG; typedef struct tagNET_DVR_MIX_AUDIOIN_CFG { - DWORD dwSize; //ṹС - DWORD dwHighPassFilter; //ͨ˲ ȡֵΧ 0-127, Ϊ׼ - DWORD dwNoiseMargin; //ޣȡֵΧ 0-127, Ϊ׼ - NET_DVR_AUTO_LIMIT_WAVE_CFG struLimitWave; //Զ޲ƲƵԴΪmacInʱЧ - NET_DVR_DSP_PARAMETER_CFG struDSPParameter; //źŴоƬ + DWORD dwSize; //结构体大小 + DWORD dwHighPassFilter; //高通滤波器 取值范围 0-127, 具体索引代表含义以能力集为准 + DWORD dwNoiseMargin; //噪声门限,取值范围 0-127, 具体索引代表含义以能力集为准 + NET_DVR_AUTO_LIMIT_WAVE_CFG struLimitWave; //自动限波控制参数,当音频输入源为macIn时有效 + NET_DVR_DSP_PARAMETER_CFG struDSPParameter; //数字信号处理芯片参数 BYTE byRes[40]; }NET_DVR_MIX_AUDIOIN_CFG,*LPNET_DVR_MIX_AUDIOIN_CFG; typedef struct tagNET_DVR_MIX_AUDIOOUT_CFG { - DWORD dwSize; //ṹС - BYTE byModulatorEnbale; //Ƿλ - BYTE byPostFilter; //Post Filterأ0-رգ1-ĬϿ - BYTE byLimitPressure; //ѹ޿ 0-رգ1-ĬϿ - BYTE byRes1; // - WORD wModulatorValue; //λ ȡֵΧ 0-127, Ϊ׼Ĭ10 - WORD wTriggerTime; //ѹ޴ʱ䣬ȡֵΧ 0-127, Ϊ׼ - WORD wFreeTime; //ѹͷʱ䣬ȡֵΧ 0-127, Ϊ׼ - BYTE byCompressThreshold; //ѹ 0-1X,1-2X,2-4X,3-8X Xʾ2Xʾ2 - BYTE byCompressMode; //ѹʽ0-Ӳѹ1-ѹĬΪӲѹ - BYTE byCompressRate; //ѹ - BYTE byRecoveryGain; //ظ 0-1X,1-2X,2-4X,3-8X - BYTE byOutputGain; // 0 ~100ֵ - BYTE byOutputMute; //0-رգ1- - int iOutputGainEx; //չֵΪŴ󣬸ֵΪС - BYTE bySoundQualityHanding; //ʴ0-رգ1- + DWORD dwSize; //结构体大小 + BYTE byModulatorEnbale; //是否启用相位调制器 + BYTE byPostFilter; //Post Filter开关,0-关闭,1-开启,默认开启 + BYTE byLimitPressure; //输出压限开关 0-关闭,1-开启,默认开启 + BYTE byRes1; //保留 + WORD wModulatorValue; //相位调制量 取值范围 0-127, 具体索引代表含义以能力集为准,默认10 + WORD wTriggerTime; //压限触发时间,取值范围 0-127, 具体索引代表含义以能力集为准 + WORD wFreeTime; //压限释放时间,取值范围 0-127, 具体索引代表含义以能力集为准 + BYTE byCompressThreshold; //压缩门限 0-1X,1-2X,2-4X,3-8X X表示倍,比如2X表示2倍 + BYTE byCompressMode; //压缩方式,0-硬压缩,1-软压缩,默认为硬压缩 + BYTE byCompressRate; //压缩率 + BYTE byRecoveryGain; //回复增益 0-1X,1-2X,2-4X,3-8X + BYTE byOutputGain; //输出增益 0 ~100(负值) + BYTE byOutputMute; //输出静音,0-关闭,1-开启 + int iOutputGainEx; //输出增益扩展,返回正值为放大,负值为缩小 + BYTE bySoundQualityHanding; //音质处理,0-关闭,1-开启 BYTE byRes[55]; }NET_DVR_MIX_AUDIOOUT_CFG,*LPNET_DVR_MIX_AUDIOOUT_CFG; -#define MAX_AUDIOOUT_PRO_TYPE 8 //Ƶʽ +#define MAX_AUDIOOUT_PRO_TYPE 8 //音频输出处理方式 typedef struct tagNET_DVR_VOLUME_CFG { - DWORD dwSize; //ṹС - WORD wVolume[MAX_AUDIOOUT_PRO_TYPE]; //С ȡֵΧ 0-127, Ϊ׼ - BYTE byPhantomPowerSupply; //ǷʹûԴ(ƵͨΪMICʱЧ)0-壬1-磬2- - BYTE byEnableAEC; //ǷȫֵĻ,0-ã1- - WORD wTalkVolume; //ֶ֧Խ豸ԽʱС - BYTE byEnableFBC[MAX_AUDIOOUT_PRO_TYPE]; //ǷFBC(Х),0-ã1- - WORD wVolumeEx[MAX_AUDIOOUT_PRO_TYPE]; //Сչ ȡֵΧ 0-127, Ϊ׼ - BYTE byRes[4]; // + DWORD dwSize; //结构体大小 + WORD wVolume[MAX_AUDIOOUT_PRO_TYPE]; //音量大小 取值范围 0-127, 具体索引代表含义以能力集为准 + BYTE byPhantomPowerSupply; //是否使用幻象电源供电(音频输入通道为MIC时有效),0-无意义,1-不供电,2-供电 + BYTE byEnableAEC; //是否启用全局的回声消除,0-不启用,1-启用 + WORD wTalkVolume; //支持对讲的设备,对讲时音量大小 + BYTE byEnableFBC[MAX_AUDIOOUT_PRO_TYPE]; //是否启用FBC(啸叫抑制),0-不启用,1-启用 + WORD wVolumeEx[MAX_AUDIOOUT_PRO_TYPE]; //音量大小扩展 取值范围 0-127, 具体索引代表含义以能力集为准 + BYTE byRes[4]; //保留 }NET_DVR_VOLUME_CFG,*LPNET_DVR_VOLUME_CFG; -typedef struct tagNET_DVR_VIDEOOUT_RESOLUTION_CFG //Ƶڷֱ +typedef struct tagNET_DVR_VIDEOOUT_RESOLUTION_CFG //视频输出口分辨率配置 { - DWORD dwSize; //ṹС - BYTE byResolution; //ֱ 0-1024x768, 1-1280x720, 2-1280x1024, 3-1680x1050, 4-1920x1080, 5-3840*2160 + DWORD dwSize; //结构体大小 + BYTE byResolution; //分辨率 0-1024x768, 1-1280x720, 2-1280x1024, 3-1680x1050, 4-1920x1080, 5-3840*2160 BYTE byRes[63]; }NET_DVR_VIDEOOUT_RESOLUTION_CFG, *LPNET_DVR_VIDEOOUT_RESOLUTION_CFG; typedef struct tagNET_DVR_ADDR_DOMAIN_INFO { - BYTE szDomainAddr[MAX_DOMAIN_NAME]; /* IPַ,Ҫ豸,ʽΪĸ'.'Ϊ,ΪIPַ */ + BYTE szDomainAddr[MAX_DOMAIN_NAME]; /* 主机IP地址或者域名,需要设备解析,解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 */ WORD wPort; BYTE byRes[2]; }NET_DVR_ADDR_DOMAIN_INFO,*LPNET_DVR_ADDR_DOMAIN_INFO; -#define MAX_CENTERNUM_V40 6 //ĵַ +#define MAX_CENTERNUM_V40 6 //报警中心地址个数 -// +//报警中心网络配置 typedef struct tagNET_DVR_ALARMCENTER_NETCFG { DWORD dwSize; - BYTE byAuxiliaryAlarmAddr[MAX_DOMAIN_NAME]; /* IPַ,Ҫ豸,ʽΪĸС.Ϊ,ΪIPַ */ - WORD wAuxiliaryAlarmPort; /* ˿ں */ - NET_DVR_ADDR_DOMAIN_INFO struHostAddr[MAX_CENTERNUM_V40]; //ĵַϢ + BYTE byAuxiliaryAlarmAddr[MAX_DOMAIN_NAME]; /* 辅报警主机IP地址或者域名,需要设备解析,解析方式为有字母存在且有’.’则认为是域名,否则为IP地址 */ + WORD wAuxiliaryAlarmPort; /* 辅报警主机端口号 */ + NET_DVR_ADDR_DOMAIN_INFO struHostAddr[MAX_CENTERNUM_V40]; //报警中心地址信息 BYTE byRes[172]; }NET_DVR_ALARMCENTER_NETCFG, *LPNET_DVR_ALARMCENTER_NETCFG; -//ṹ +//报警联动参数结构 typedef struct tagNET_DVR_ALARM_LINKAGE_PARAM { DWORD dwSize; - WORD wChanRec; //¼NVRͨλʾλʾͨ1λʾͨ16λֵ0-¼1-¼ + WORD wChanRec; //联动录像的NVR通道,按位表示,例如最低位表示通道1,最高位表示通道16,二进制位的值:0-不录像,1-录像 BYTE byRes1[2]; - WORD wRecTime[MAX_LINKAGE_CHAN_NUM]; //¼ʱ䣬ֽڱʾbyRecTime[0]ʾͨ1¼ʱ䣬byRecTime[15]ʾͨ16¼ʱ - WORD wChanPic; //ץͼNVRͨλʾλʾͨ1λʾͨ16λֵ0-ץͼ1-ץͼ + WORD wRecTime[MAX_LINKAGE_CHAN_NUM]; //录像的时间,按字节表示,例如byRecTime[0]表示通道1的录像时间,byRecTime[15]表示通道16的录像时间 + WORD wChanPic; //联动抓图的NVR通道,按位表示,例如最低位表示通道1,最高位表示通道16,二进制位的值:0-不抓图,1-抓图 BYTE byRes2[2]; - BYTE byPicNum[MAX_LINKAGE_CHAN_NUM]; //ץͼĸֽڱʾbyPicNum[0]ʾͨ1ץͼbyPicNum[15]ʾͨ16ץͼ - BYTE byTriggerEnabled[ALARMHOST_ALARMOUT_NUM];//0-1- - BYTE bySensorJointAlarmOut[ALARMHOST_ALARMOUT_NUM];//ңֵֵΪbyTriggerEnabled䡣±ʾţԪصֵλʾͣͼ""Ĺϵֵ壺1bit0-1bit1-2bit2-3bit3-4bit4- - BYTE byRes3[128]; // + BYTE byPicNum[MAX_LINKAGE_CHAN_NUM]; //抓图的个数,按字节表示,例如byPicNum[0]表示通道1的抓图个数,byPicNum[15]表示通道16的抓图个数 + BYTE byTriggerEnabled[ALARMHOST_ALARMOUT_NUM];//变量联动触发器,0-不联动,1-联动 + BYTE bySensorJointAlarmOut[ALARMHOST_ALARMOUT_NUM];//遥信值按类型联动触发器,该值为byTriggerEnabled的扩充。数组下标表示触发器号,数组元素的值按位表示报警类型,各个类型间是"或"的关系。类型值定义:1bit0-限1;bit1-限2;bit2-限3;bit3-限4;bit4-故障 + BYTE byRes3[128]; //保留 }NET_DVR_ALARM_LINKAGE_PARAM, *LPNET_DVR_ALARM_LINKAGE_PARAM; -//״Աϴ ץĻ4.0 +//雷达调试报警上传 抓拍机4.0新增 typedef struct tagNET_DVR_ALARM_RADARINFO { DWORD dwSize; - DWORD dwRadarTriggerTimeSecond;//״ﴥʱ䣬 - DWORD dwRadarTriggerTimeMSecond;//״ﴥʱ䣬 - DWORD dwVedioTriggerTimeSecond;//Ƶʱ䣬 - DWORD dwVedioTriggerTimeMSecond;//Ƶʱ䣬 - DWORD dwVedioRadarDiffTimeMSecond;//״Ƶʱ - DWORD dwRadarSpeed;//״ٶ + DWORD dwRadarTriggerTimeSecond;//雷达触发时间,秒 + DWORD dwRadarTriggerTimeMSecond;//雷达触发时间,毫秒 + DWORD dwVedioTriggerTimeSecond;//视频触发时间,秒 + DWORD dwVedioTriggerTimeMSecond;//视频触发时间,毫秒 + DWORD dwVedioRadarDiffTimeMSecond;//雷达视频触发时间差,毫秒 + DWORD dwRadarSpeed;//雷达速度 BYTE byRes[16]; } NET_DVR_ALARM_RADARINFO, *LPNET_DVR_ALARM_RADARINFO; -#define MAX_FINGER_PRINT_LEN 768 //ָƳ +#define MAX_FINGER_PRINT_LEN 768 //最大指纹长度 typedef struct tagNET_DVR_FINGER_PRINT_CFG { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - DWORD dwFingerPrintLen; //ָݳ - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //Ҫ·ָƵĶʾ0-·ö1-·ö - BYTE byFingerPrintID; //ָţЧֵΧΪ1-10 - BYTE byFingerType; //ָ 0-ָͨƣ1-вָ + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + DWORD dwFingerPrintLen; //指纹数据长度 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //需要下发指纹的读卡器,按数组表示,0-不下发该读卡器,1-下发到该读卡器 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹 BYTE byRes1[30]; - BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //ָ + BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //指纹数据内容 BYTE byRes[64]; }NET_DVR_FINGER_PRINT_CFG,*LPNET_DVR_FINGER_PRINT_CFG; typedef struct tagNET_DVR_FINGER_PRINT_STATUS { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //ָƶ״ֽ̬ڱʾ0-ʧܣ1-ɹ2-ָģ鲻ߣ3-Իָ4-ڴ5-Ѵڸָƣ6-ѴڸָID7-ǷָID8-ָģ - BYTE byFingerPrintID; //ָţЧֵΧΪ1-10 - BYTE byFingerType; //ָ 0-ָͨƣ1-вָ - BYTE byTotalStatus; //·ܵ״̬0-ǰָδж1-ж(ָŽеĶ·ˣܳɹ) + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //指纹读卡器状态,按字节表示,0-失败,1-成功,2-该指纹模组不在线,3-重试或指纹质量差,4-内存已满,5-已存在该指纹,6-已存在该指纹ID,7-非法指纹ID,8-该指纹模组无需配置 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹 + BYTE byTotalStatus; //下发总的状态,0-当前指纹未下完所有读卡器,1-已下完所有读卡器(这里的所有指的是门禁主机往所有的读卡器下发了,不管成功与否) BYTE byRes1; - BYTE byErrorMsg[ERROR_MSG_LEN]; //·ϢbyCardReaderRecvStatusΪ5ʱʾѴָƶӦĿ - DWORD dwCardReaderNo; //0ʾϢbyErrMsgЧֵbyErrMsgӦĶţʲô鿴byCardReaderRecvStatusӦŵֵ0ʱʾ޴Ϣ + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为5时,表示已存在指纹对应的卡号 + DWORD dwCardReaderNo; //非0表示错误信息byErrMsg有效,其值代表byErrMsg对应的读卡器编号(具体什么错误查看byCardReaderRecvStatus对应编号的值)。0时表示无错误信息 BYTE byRes[24]; }NET_DVR_FINGER_PRINT_STATUS,*LPNET_DVR_FINGER_PRINT_STATUS; @@ -43359,646 +43359,646 @@ typedef struct tagNET_DVR_FINGER_PRINT_STATUS typedef struct tagNET_DVR_FINGER_PRINT_INFO_COND { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //ָƵĶϢʾ - DWORD dwFingerPrintNum; //ûȡȡʱΪ0xffffffffʾȡпϢ - BYTE byFingerPrintID; //ָţЧֵΧΪ-10 0xffʾÿָ - BYTE byCallbackMode; //豸صʽ0-豸ж˷Χ1-ʱ˲Ҳ - BYTE byRes1[26]; // + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //指纹的读卡器信息,按数组表示 + DWORD dwFingerPrintNum; //设置或获取卡数量,获取时置为0xffffffff表示获取所有卡信息 + BYTE byFingerPrintID; //手指编号,有效值范围为-10 0xff表示该卡所有指纹 + BYTE byCallbackMode; //设备回调方式,0-设备所有读卡器下完了范围,1-在时间段内下了部分也返回 + BYTE byRes1[26]; //保留 }NET_DVR_FINGER_PRINT_INFO_COND,*LPNET_DVR_FINGER_PRINT_INFO_COND; typedef struct tagNET_DVR_FINGER_PRINT_CFG_V50 { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - DWORD dwFingerPrintLen; //ָݳ - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //Ҫ·ָƵĶʾӵλλʾ0-·ö1-·ö - BYTE byFingerPrintID; //ָţЧֵΧΪ1-10 - BYTE byFingerType; //ָ 0-ָͨƣ1-вָƣ2-Ѳָƣ3-ָƣ4-ָ + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + DWORD dwFingerPrintLen; //指纹数据长度 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //需要下发指纹的读卡器,按数组表示,从低位到高位表示,0-不下发该读卡器,1-下发到该读卡器 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹,2-巡更指纹,3-超级指纹,4-解除指纹 BYTE byRes1[30]; - BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //ָ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID - BYTE byLeaderFP[MAX_DOOR_NUM_256]; //Ƿ״֤ܣֽڱʾ0-״֤ܣ1-״֤ + BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //指纹数据内容 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byLeaderFP[MAX_DOOR_NUM_256]; //对门是否有首次认证功能(按字节表示):0-无首次认证功能,1-有首次认证功能 BYTE byRes[128]; }NET_DVR_FINGER_PRINT_CFG_V50, *LPNET_DVR_FINGER_PRINT_CFG_V50; typedef struct tagNET_DVR_FINGER_PRINT_STATUS_V50 { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //ָƶ״ֽ̬ڱʾ0-ʧܣ1-ɹ2-ָģ鲻ߣ3-Իָ4-ڴ5-Ѵڸָƣ6-ѴڸָID7-ǷָID8-ָģã10-ָƶ汾ͣ޷ֹ֧ţ - BYTE byFingerPrintID; //ָţЧֵΧΪ1-10 - BYTE byFingerType; //ָ 0-ָͨƣ1-вָƣ2-Ѳָƣ3-ָƣ4-ָ - BYTE byTotalStatus; //·ܵ״̬0-ǰָδж1-ж(ָŽеĶ·ˣܳɹ) - BYTE byRecvStatus; //״̬0-ɹ1-ָŴ2-ָʹ3-Ŵ󣨿Ź񲻷豸Ҫ󣩣4-ָδŻ򿨺ţŻ򿨺ֶΪգ5-Ųڣ6-ָݳΪ07-Ŵ8-Ŵ - BYTE byErrorMsg[ERROR_MSG_LEN]; //·ϢbyCardReaderRecvStatusΪ5ʱʾѴָƶӦĿ - DWORD dwCardReaderNo; //byCardReaderRecvStatusΪ5ʱʾѴָƶӦָƶţ·󷵻ء0ʱʾ޴Ϣ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID - BYTE byErrorEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //·ϢbyCardReaderRecvStatusΪ5ʱʾѴָƶӦĹţԱID + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //指纹读卡器状态,按字节表示,0-失败,1-成功,2-该指纹模组不在线,3-重试或指纹质量差,4-内存已满,5-已存在该指纹,6-已存在该指纹ID,7-非法指纹ID,8-该指纹模组无需配置,10-指纹读卡器版本过低(无法支持工号) + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹,2-巡更指纹,3-超级指纹,4-解除指纹 + BYTE byTotalStatus; //下发总的状态,0-当前指纹未下完所有读卡器,1-已下完所有读卡器(这里的所有指的是门禁主机往所有的读卡器下发了,不管成功与否) + BYTE byRecvStatus; //主机错误状态:0-成功,1-手指编号错误,2-指纹类型错误,3-卡号错误(卡号规格不符合设备要求),4-指纹未关联工号或卡号(工号或卡号字段为空),5-工号不存在,6-指纹数据长度为0,7-读卡器编号错误,8-工号错误 + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为5时,表示已存在指纹对应的卡号 + DWORD dwCardReaderNo; //当byCardReaderRecvStatus为5时,表示已存在指纹对应的指纹读卡器编号,可用于下发错误返回。0时表示无错误信息 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byErrorEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //下发错误信息,当byCardReaderRecvStatus为5时,表示已存在指纹对应的工号(人员ID) BYTE byRes[128]; }NET_DVR_FINGER_PRINT_STATUS_V50, *LPNET_DVR_FINGER_PRINT_STATUS_V50; typedef struct tagNET_DVR_FINGER_PRINT_INFO_COND_V50 { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿţֶλȡʱЧʱЧ - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //ָƵĶǷЧ0-Ч1-Ч - DWORD dwFingerPrintNum; //ûָȡʱΪ0xffffffffʾȡָϢ - BYTE byFingerPrintID; //ָţЧֵΧΪ1-10 0xffʾÿָ - BYTE byCallbackMode; //豸صʽ0-豸ж˷أ1-ʱ˲Ҳ - BYTE byRes2[2]; // - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID - BYTE byRes1[128]; // + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号(该字段获取时有效,设置时无效) + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //指纹的读卡器是否有效,0-无效,1-有效 + DWORD dwFingerPrintNum; //设置或获指纹数量,获取时置为0xffffffff表示获取所有指纹信息 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 0xff表示该卡所有指纹 + BYTE byCallbackMode; //设备回调方式,0-设备所有读卡器下完了返回,1-在时间段内下了部分也返回 + BYTE byRes2[2]; //保留 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byRes1[128]; //保留 }NET_DVR_FINGER_PRINT_INFO_COND_V50, *LPNET_DVR_FINGER_PRINT_INFO_COND_V50; typedef struct tagNET_DVR_FINGER_PRINT_BYCARD { - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //ָƵĶϢʾ - BYTE byFingerPrintID[MAX_FINGER_PRINT_NUM/*10*/]; //ҪȡָϢ±ֵ꣬ʾ0-ɾ1-ɾָ - BYTE byRes1[34]; // + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //指纹的读卡器信息,按数组表示 + BYTE byFingerPrintID[MAX_FINGER_PRINT_NUM/*10*/]; //需要获取的指纹信息,按数组下标,值表示0-不删除,1-删除该指纹 + BYTE byRes1[34]; //保留 }NET_DVR_FINGER_PRINT_BYCARD,*LPNET_DVR_FINGER_PRINT_BYCARD; typedef struct tagNET_DVR_FINGER_PRINT_BYREADER { - DWORD dwCardReaderNo; //ֵʾָƶ - BYTE byClearAllCard; //ǷɾпָϢ0-ɾָϢ1-ɾпָϢ - BYTE byRes1[3]; // - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - BYTE byRes[548]; // + DWORD dwCardReaderNo; //按值表示,指纹读卡器编号 + BYTE byClearAllCard; //是否删除所有卡的指纹信息,0-按卡号删除指纹信息,1-删除所有卡的指纹信息 + BYTE byRes1[3]; //保留 + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byRes[548]; //保留 }NET_DVR_FINGER_PRINT_BYREADER,*LPNET_DVR_FINGER_PRINT_BYREADER; typedef union tagNET_DVR_DEL_FINGER_PRINT_MODE { - BYTE uLen[588]; //峤 - NET_DVR_FINGER_PRINT_BYCARD struByCard; //ŵķʽɾ - NET_DVR_FINGER_PRINT_BYREADER struByReader; //ķʽɾ + BYTE uLen[588]; //联合体长度 + NET_DVR_FINGER_PRINT_BYCARD struByCard; //按卡号的方式删除 + NET_DVR_FINGER_PRINT_BYREADER struByReader; //按读卡器的方式删除 }NET_DVR_DEL_FINGER_PRINT_MODE,*LPNET_DVR_DEL_FINGER_PRINT_MODE; typedef struct tagNET_DVR_FINGER_PRINT_INFO_CTRL { DWORD dwSize; - BYTE byMode; //ɾʽ0-ŷʽɾ1-ɾ - BYTE byRes1[3]; // - NET_DVR_DEL_FINGER_PRINT_MODE struProcessMode; //ʽ - BYTE byRes[64]; // + BYTE byMode; //删除方式,0-按卡号方式删除,1-按读卡器删除 + BYTE byRes1[3]; //保留 + NET_DVR_DEL_FINGER_PRINT_MODE struProcessMode; //处理方式 + BYTE byRes[64]; //保留 }NET_DVR_FINGER_PRINT_INFO_CTRL,*LPNET_DVR_FINGER_PRINT_INFO_CTRL; typedef struct tagNET_DVR_FINGER_PRINT_BYCARD_V50 { - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //ָƵĶϢλʾ - BYTE byFingerPrintID[MAX_FINGER_PRINT_NUM/*10*/]; //Ҫɾָţ±ֵ꣬ʾ0-ɾ1-ɾָ + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //指纹的读卡器信息,按位表示 + BYTE byFingerPrintID[MAX_FINGER_PRINT_NUM/*10*/]; //需要删除的手指编号,按数组下标,值表示0-不删除,1-删除该指纹 BYTE byRes1[2]; - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) }NET_DVR_FINGER_PRINT_BYCARD_V50, *LPNET_DVR_FINGER_PRINT_BYCARD_V50; typedef struct tagNET_DVR_FINGER_PRINT_BYREADER_V50 { - DWORD dwCardReaderNo; //ֵʾָƶ - BYTE byClearAllCard; //ǷɾпָϢ0-ţԱIDɾָϢ1-ɾпԱIDָϢ - BYTE byRes1[3]; // - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID - BYTE byRes[516]; // + DWORD dwCardReaderNo; //按值表示,指纹读卡器编号 + BYTE byClearAllCard; //是否删除所有卡的指纹信息,0-按卡号(人员ID)删除指纹信息,1-删除所有卡(人员ID)的指纹信息 + BYTE byRes1[3]; //保留 + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byRes[516]; //保留 }NET_DVR_FINGER_PRINT_BYREADER_V50, *LPNET_DVR_FINGER_PRINT_BYREADER_V50; typedef union tagNET_DVR_DEL_FINGER_PRINT_MODE_V50 { - BYTE uLen[588]; //峤 - NET_DVR_FINGER_PRINT_BYCARD_V50 struByCard; //ţԱIDķʽɾ - NET_DVR_FINGER_PRINT_BYREADER_V50 struByReader; //ķʽɾ + BYTE uLen[588]; //联合体长度 + NET_DVR_FINGER_PRINT_BYCARD_V50 struByCard; //按卡号(人员ID)的方式删除 + NET_DVR_FINGER_PRINT_BYREADER_V50 struByReader; //按读卡器的方式删除 }NET_DVR_DEL_FINGER_PRINT_MODE_V50, *LPNET_DVR_DEL_FINGER_PRINT_MODE_V50; typedef struct tagNET_DVR_FINGER_PRINT_INFO_CTRL_V50 { DWORD dwSize; - BYTE byMode; //ɾʽ0-ţԱIDʽɾ1-ɾ - BYTE byRes1[3]; // - NET_DVR_DEL_FINGER_PRINT_MODE_V50 struProcessMode; //ʽ - BYTE byRes[64]; // + BYTE byMode; //删除方式,0-按卡号(人员ID)方式删除,1-按读卡器删除 + BYTE byRes1[3]; //保留 + NET_DVR_DEL_FINGER_PRINT_MODE_V50 struProcessMode; //处理方式 + BYTE byRes[64]; //保留 }NET_DVR_FINGER_PRINT_INFO_CTRL_V50, *LPNET_DVR_FINGER_PRINT_INFO_CTRL_V50; typedef struct tagNET_DVR_FINGER_PRINT_INFO_STATUS_V50 { DWORD dwSize; - DWORD dwCardReaderNo; //ֵʾָƶ - BYTE byStatus; //״̬0-Ч1-У2-ɾʧܣ3-ɹ - BYTE byRes[63]; // + DWORD dwCardReaderNo; //按值表示,指纹读卡器编号 + BYTE byStatus; //状态:0-无效,1-处理中,2-删除失败,3-成功 + BYTE byRes[63]; //保留 }NET_DVR_FINGER_PRINT_INFO_STATUS_V50, *LPNET_DVR_FINGER_PRINT_INFO_STATUS_V50; typedef enum _ACS_DEV_SUBEVENT_ENUM_ { - EVENT_ACS_HOST_ANTI_DISMANTLE = 0, //𱨾 - EVENT_ACS_OFFLINE_ECENT_NEARLY_FULL, //¼90% - EVENT_ACS_NET_BROKEN, //Ͽ - EVENT_ACS_NET_RESUME , //ָ - EVENT_ACS_LOW_BATTERY, //صѹ - EVENT_ACS_BATTERY_RESUME, //صѹָ - EVENT_ACS_AC_OFF, //ϵ - EVENT_ACS_AC_RESUME, //ָ - EVENT_ACS_SD_CARD_FULL, //SD洢 - EVENT_ACS_LINKAGE_CAPTURE_PIC, //ץ¼ - EVENT_ACS_IMAGE_QUALITY_LOW, //ͼʵ - EVENT_ACS_FINGER_PRINT_QUALITY_LOW, //ָͼʵ - EVENT_ACS_BATTERY_ELECTRIC_LOW, //صѹ(豸ʹ) - EVENT_ACS_BATTERY_ELECTRIC_RESUME, //صѹָ(豸ʹ) - EVENT_ACS_FIRE_IMPORT_SHORT_CIRCUIT, //· - EVENT_ACS_FIRE_IMPORT_BROKEN_CIRCUIT, //· - EVENT_ACS_FIRE_IMPORT_RESUME, //ָ - EVENT_ACS_MASTER_RS485_LOOPNODE_BROKEN, //RS485·ڵϿ - EVENT_ACS_MASTER_RS485_LOOPNODE_RESUME, //RS485·ڵָ - EVENT_ACS_LOCAL_CONTROL_OFFLINE, //͵ؿ - EVENT_ACS_LOCAL_CONTROL_RESUME, //͵ؿ߻ָ - EVENT_ACS_LOCAL_DOWNSIDE_RS485_LOOPNODE_BROKEN, //͵RS485·Ͽ - EVENT_ACS_LOCAL_DOWNSIDE_RS485_LOOPNODE_RESUME, //͵RS485·ָ - EVENT_ACS_DISTRACT_CONTROLLER_ONLINE, //ֿ - EVENT_ACS_DISTRACT_CONTROLLER_OFFLINE, //ֿ - EVENT_ACS_FIRE_BUTTON_TRIGGER, //ť - EVENT_ACS_FIRE_BUTTON_RESUME, //ťָ - EVENT_ACS_MAINTENANCE_BUTTON_TRIGGER, //άť - EVENT_ACS_MAINTENANCE_BUTTON_RESUME, //άťָ - EVENT_ACS_EMERGENCY_BUTTON_TRIGGER, //ť - EVENT_ACS_EMERGENCY_BUTTON_RESUME, //ťָ + EVENT_ACS_HOST_ANTI_DISMANTLE = 0, //主机防拆报警 + EVENT_ACS_OFFLINE_ECENT_NEARLY_FULL, //离线事件满90%报警 + EVENT_ACS_NET_BROKEN, //网络断开 + EVENT_ACS_NET_RESUME , //网络恢复 + EVENT_ACS_LOW_BATTERY, //蓄电池电压低 + EVENT_ACS_BATTERY_RESUME, //蓄电池电压恢复正常 + EVENT_ACS_AC_OFF, //交流电断电 + EVENT_ACS_AC_RESUME, //交流电恢复 + EVENT_ACS_SD_CARD_FULL, //SD卡存储满报警 + EVENT_ACS_LINKAGE_CAPTURE_PIC, //联动抓拍事件报警 + EVENT_ACS_IMAGE_QUALITY_LOW, //人脸图像画质低 + EVENT_ACS_FINGER_PRINT_QUALITY_LOW, //指纹图像画质低 + EVENT_ACS_BATTERY_ELECTRIC_LOW, //电池电压低(仅人脸设备使用) + EVENT_ACS_BATTERY_ELECTRIC_RESUME, //电池电压恢复正常(仅人脸设备使用) + EVENT_ACS_FIRE_IMPORT_SHORT_CIRCUIT, //消防输入短路报警 + EVENT_ACS_FIRE_IMPORT_BROKEN_CIRCUIT, //消防输入断路报警 + EVENT_ACS_FIRE_IMPORT_RESUME, //消防输入恢复 + EVENT_ACS_MASTER_RS485_LOOPNODE_BROKEN, //主控RS485环路节点断开 + EVENT_ACS_MASTER_RS485_LOOPNODE_RESUME, //主控RS485环路节点恢复 + EVENT_ACS_LOCAL_CONTROL_OFFLINE, //就地控制器掉线 + EVENT_ACS_LOCAL_CONTROL_RESUME, //就地控制器掉线恢复 + EVENT_ACS_LOCAL_DOWNSIDE_RS485_LOOPNODE_BROKEN, //就地下行RS485环路断开 + EVENT_ACS_LOCAL_DOWNSIDE_RS485_LOOPNODE_RESUME, //就地下行RS485环路恢复 + EVENT_ACS_DISTRACT_CONTROLLER_ONLINE, //分控器在线 + EVENT_ACS_DISTRACT_CONTROLLER_OFFLINE, //分控器离线 + EVENT_ACS_FIRE_BUTTON_TRIGGER, //消防按钮触发 + EVENT_ACS_FIRE_BUTTON_RESUME, //消防按钮恢复 + EVENT_ACS_MAINTENANCE_BUTTON_TRIGGER, //维护按钮触发 + EVENT_ACS_MAINTENANCE_BUTTON_RESUME, //维护按钮恢复 + EVENT_ACS_EMERGENCY_BUTTON_TRIGGER, //紧急按钮触发 + EVENT_ACS_EMERGENCY_BUTTON_RESUME, //紧急按钮恢复 EVENT_ACS_RES, - EVENT_ACS_SUBMARINEBACK_COMM_BREAK, //뷴DZطͨŶϿ - EVENT_ACS_SUBMARINEBACK_COMM_RESUME, //뷴DZطͨŻָ - EVENT_ACS_REMOTE_ACTUAL_GUARD, //Զʵʱ - EVENT_ACS_REMOTE_ACTUAL_UNGUARD, //Զʵʱ - EVENT_ACS_MOTOR_SENSOR_EXCEPTION, //򴫸쳣 - EVENT_ACS_CAN_BUS_EXCEPTION, //CAN쳣 - EVENT_ACS_CAN_BUS_RESUME, //CAN߻ָ - EVENT_ACS_GATE_TEMPERATURE_OVERRUN, //բǻ¶ȳ - EVENT_ACS_IR_EMITTER_EXCEPTION, //쳣 - EVENT_ACS_IR_EMITTER_RESUME, //ָ - EVENT_ACS_LAMP_BOARD_COMM_EXCEPTION, //ưͨ쳣 - EVENT_ACS_LAMP_BOARD_COMM_RESUME, //ưͨŻָ - EVENT_ACS_IR_ADAPTOR_BOARD_COMM_EXCEPTION, //תӰͨ쳣 - EVENT_ACS_IR_ADAPTOR_BOARD_COMM_RESUME, //תӰͨŻָ - EVENT_ACS_CHANNEL_CONTROLLER_DESMANTLE_ALARM, //ͨ𱨾 - EVENT_ACS_CHANNEL_CONTROLLER_DESMANTLE_RESUME, //ͨ𱨾ָ - EVENT_ACS_CHANNEL_CONTROLLER_FIRE_IMPORT_ALARM, //ͨ뱨 - EVENT_ACS_CHANNEL_CONTROLLER_FIRE_IMPORT_RESUME, //ͨ뱨ָ - EVENT_ACS_STAY_EVENT, //¼ - EVENT_ACS_LEGAL_EVENT_NEARLY_FULL, //ߺϷ¼90% - EVENT_ACS_FIRE_IMPORT_ALARM = 52, //뱨 - EVENT_ACS_NOMASK_ALARM, //δֱ - EVENT_ACS_FIREMATRIX_EVENT, //¼ϴ - EVENT_ACS_HEALTH_INFO_ABNORMAL_LOCK, //Ϣ쳣 - EVENT_ACS_HEALTH_INFO_ABNORMAL_UNLOCK, //Ϣ쳣 - EVENT_ACS_IPC_EVENT, //IPC¼ϴ - EVENT_ACS_OPTIONAL_BOARD_OFFLINE, //ѡ - EVENT_ACS_OPTIONAL_BOARD_RESUME //ѡ߻ָ + EVENT_ACS_SUBMARINEBACK_COMM_BREAK, //与反潜回服务器通信断开 + EVENT_ACS_SUBMARINEBACK_COMM_RESUME, //与反潜回服务器通信恢复 + EVENT_ACS_REMOTE_ACTUAL_GUARD, //远程实时布防 + EVENT_ACS_REMOTE_ACTUAL_UNGUARD, //远程实时撤防 + EVENT_ACS_MOTOR_SENSOR_EXCEPTION, //电机或传感器异常 + EVENT_ACS_CAN_BUS_EXCEPTION, //CAN总线异常 + EVENT_ACS_CAN_BUS_RESUME, //CAN总线恢复 + EVENT_ACS_GATE_TEMPERATURE_OVERRUN, //闸机腔体温度超限 + EVENT_ACS_IR_EMITTER_EXCEPTION, //红外对射异常 + EVENT_ACS_IR_EMITTER_RESUME, //红外对射恢复 + EVENT_ACS_LAMP_BOARD_COMM_EXCEPTION, //灯板通信异常 + EVENT_ACS_LAMP_BOARD_COMM_RESUME, //灯板通信恢复 + EVENT_ACS_IR_ADAPTOR_BOARD_COMM_EXCEPTION, //红外转接板通信异常 + EVENT_ACS_IR_ADAPTOR_BOARD_COMM_RESUME, //红外转接板通信恢复 + EVENT_ACS_CHANNEL_CONTROLLER_DESMANTLE_ALARM, //通道控制器防拆报警 + EVENT_ACS_CHANNEL_CONTROLLER_DESMANTLE_RESUME, //通道控制器防拆报警恢复 + EVENT_ACS_CHANNEL_CONTROLLER_FIRE_IMPORT_ALARM, //通道控制器消防输入报警 + EVENT_ACS_CHANNEL_CONTROLLER_FIRE_IMPORT_RESUME, //通道控制器消防输入报警恢复 + EVENT_ACS_STAY_EVENT, //逗留事件 + EVENT_ACS_LEGAL_EVENT_NEARLY_FULL, //离线合法事件满90%报警 + EVENT_ACS_FIRE_IMPORT_ALARM = 52, //消防输入报警 + EVENT_ACS_NOMASK_ALARM, //未带口罩报警 + EVENT_ACS_FIREMATRIX_EVENT, //消防矩阵事件上传 + EVENT_ACS_HEALTH_INFO_ABNORMAL_LOCK, //健康信息异常锁定 + EVENT_ACS_HEALTH_INFO_ABNORMAL_UNLOCK, //健康信息异常解锁 + EVENT_ACS_IPC_EVENT, //IPC事件上传 + EVENT_ACS_OPTIONAL_BOARD_OFFLINE, //选配板掉线 + EVENT_ACS_OPTIONAL_BOARD_RESUME //选配板掉线恢复 }ACS_DEV_SUBEVENT_ENUM; typedef enum _ACS_ALARM_SUBEVENT_ENUM_ { - EVENT_ACS_ALARMIN_SHORT_CIRCUIT = 0, //· - EVENT_ACS_ALARMIN_BROKEN_CIRCUIT, //· - EVENT_ACS_ALARMIN_EXCEPTION, //쳣 - EVENT_ACS_ALARMIN_RESUME, //ָ - EVENT_ACS_CASE_SENSOR_ALARM, //¼뱨 - EVENT_ACS_CASE_SENSOR_RESUME //¼ָ + EVENT_ACS_ALARMIN_SHORT_CIRCUIT = 0, //防区短路报警 + EVENT_ACS_ALARMIN_BROKEN_CIRCUIT, //防区断路报警 + EVENT_ACS_ALARMIN_EXCEPTION, //防区异常报警 + EVENT_ACS_ALARMIN_RESUME, //防区报警恢复 + EVENT_ACS_CASE_SENSOR_ALARM, //事件输入报警 + EVENT_ACS_CASE_SENSOR_RESUME //事件输入恢复 }ACS_ALARM_SUBEVENT_ENUM; typedef enum _ACS_DOOR_SUBEVENT_ENUM_ { - EVENT_ACS_LEADER_CARD_OPEN_BEGIN = 0, //׿ſʼ - EVENT_ACS_LEADER_CARD_OPEN_END, //׿Ž - EVENT_ACS_ALWAYS_OPEN_BEGIN , //״̬ʼ - EVENT_ACS_ALWAYS_OPEN_END, //״̬ - EVENT_ACS_ALWAYS_CLOSE_BEGIN, //״̬ʼ - EVENT_ACS_ALWAYS_CLOSE_END, //״̬ - EVENT_ACS_LOCK_OPEN, // - EVENT_ACS_LOCK_CLOSE, //ر - EVENT_ACS_DOOR_BUTTON_PRESS, //Űť - EVENT_ACS_DOOR_BUTTON_RELEASE, //Űťſ - EVENT_ACS_DOOR_OPEN_NORMAL, //ţŴţ - EVENT_ACS_DOOR_CLOSE_NORMAL , //ţŴţ - EVENT_ACS_DOOR_OPEN_ABNORMAL, //쳣򿪣Ŵţ - EVENT_ACS_DOOR_OPEN_TIMEOUT, //Ŵ򿪳ʱŴţ - EVENT_ACS_REMOTE_OPEN_DOOR, //Զ̿ - EVENT_ACS_REMOTE_CLOSE_DOOR, //Զ̹ - EVENT_ACS_REMOTE_ALWAYS_OPEN, //Զ̳ - EVENT_ACS_REMOTE_ALWAYS_CLOSE, //Զ̳ - EVENT_ACS_NOT_BELONG_MULTI_GROUP, //ڶ֤Ⱥ - EVENT_ACS_INVALID_MULTI_VERIFY_PERIOD, //ڶ֤ʱ - EVENT_ACS_MULTI_VERIFY_SUPER_RIGHT_FAIL, //֤ģʽ֤ʧ - EVENT_ACS_MULTI_VERIFY_REMOTE_RIGHT_FAIL, //֤ģʽԶ֤ʧ - EVENT_ACS_MULTI_VERIFY_SUCCESS, //֤ɹ - EVENT_ACS_MULTI_VERIFY_NEED_REMOTE_OPEN, //ض֤ҪԶ̿ - EVENT_ACS_MULTI_VERIFY_SUPERPASSWD_VERIFY_SUCCESS, //֤֤ɹ¼ - EVENT_ACS_MULTI_VERIFY_REPEAT_VERIFY_FAIL, //֤ظ֤ʧ - EVENT_ACS_MULTI_VERIFY_TIMEOUT, //֤ʱʧ - EVENT_ACS_REMOTE_CAPTURE_PIC, //Զץ - EVENT_ACS_DOORBELL_RINGING, // - EVENT_ACS_SECURITY_MODULE_DESMANTLE_ALARM, //ſذȫģ𱨾 - EVENT_ACS_CALL_CENTER, //¼ - EVENT_ACS_FIRSTCARD_AUTHORIZE_BEGIN, //׿Ȩʼ - EVENT_ACS_FIRSTCARD_AUTHORIZE_END, //׿Ȩ - EVENT_ACS_DOORLOCK_INPUT_SHORT_CIRCUIT, //· - EVENT_ACS_DOORLOCK_INPUT_BROKEN_CIRCUIT, //· - EVENT_ACS_DOORLOCK_INPUT_EXCEPTION, //쳣 - EVENT_ACS_DOORCONTACT_INPUT_SHORT_CIRCUIT, //Ŵ· - EVENT_ACS_DOORCONTACT_INPUT_BROKEN_CIRCUIT, //Ŵ· - EVENT_ACS_DOORCONTACT_INPUT_EXCEPTION, //Ŵ쳣 - EVENT_ACS_OPENBUTTON_INPUT_SHORT_CIRCUIT, //Űť· - EVENT_ACS_OPENBUTTON_INPUT_BROKEN_CIRCUIT, //Űť· - EVENT_ACS_OPENBUTTON_INPUT_EXCEPTION, //Űť쳣 - EVENT_ACS_DOORLOCK_OPEN_EXCEPTION, //쳣 - EVENT_ACS_DOORLOCK_OPEN_TIMEOUT, //򿪳ʱ - EVENT_ACS_FIRSTCARD_OPEN_WITHOUT_AUTHORIZE, //׿δȨʧ - EVENT_ACS_CALL_LADDER_RELAY_BREAK, //ݼ̵Ͽ - EVENT_ACS_CALL_LADDER_RELAY_CLOSE, //ݼ̵պ - EVENT_ACS_AUTO_KEY_RELAY_BREAK, //Զ̵Ͽ - EVENT_ACS_AUTO_KEY_RELAY_CLOSE, //Զ̵պ - EVENT_ACS_KEY_CONTROL_RELAY_BREAK, //ݿؼ̵Ͽ - EVENT_ACS_KEY_CONTROL_RELAY_CLOSE, //ݿؼ̵պ - EVENT_ACS_REMOTE_VISITOR_CALL_LADDER, //ÿͺ - EVENT_ACS_REMOTE_HOUSEHOLD_CALL_LADDER, //ס - EVENT_ACS_LEGAL_MESSAGE, //Ϸ - EVENT_ACS_ILLEGAL_MESSAGE, //Ƿ - EVENT_ACS_TRAILING, //βͨ - EVENT_ACS_REVERSE_ACCESS, // - EVENT_ACS_FORCE_ACCESS, //ײ - EVENT_ACS_CLIMBING_OVER_GATE, //Խ - EVENT_ACS_PASSING_TIMEOUT, //ͨгʱ - EVENT_ACS_INTRUSION_ALARM, //󴳱 - EVENT_ACS_FREE_GATE_PASS_NOT_AUTH, //բͨʱδ֤ͨ - EVENT_ACS_DROP_ARM_BLOCK, //ڱ۱赲 - EVENT_ACS_DROP_ARM_BLOCK_RESUME, //ڱ赲 - EVENT_ACS_REMOTE_CONTROL_CLOSE_DOOR, //ң - EVENT_ACS_REMOTE_CONTROL_OPEN_DOOR, //ң - EVENT_ACS_REMOTE_CONTROL_ALWAYS_OPEN_DOOR //ң + EVENT_ACS_LEADER_CARD_OPEN_BEGIN = 0, //首卡开门开始 + EVENT_ACS_LEADER_CARD_OPEN_END, //首卡开门结束 + EVENT_ACS_ALWAYS_OPEN_BEGIN , //常开状态开始 + EVENT_ACS_ALWAYS_OPEN_END, //常开状态结束 + EVENT_ACS_ALWAYS_CLOSE_BEGIN, //常关状态开始 + EVENT_ACS_ALWAYS_CLOSE_END, //常关状态结束 + EVENT_ACS_LOCK_OPEN, //门锁打开 + EVENT_ACS_LOCK_CLOSE, //门锁关闭 + EVENT_ACS_DOOR_BUTTON_PRESS, //开门按钮按下 + EVENT_ACS_DOOR_BUTTON_RELEASE, //开门按钮放开 + EVENT_ACS_DOOR_OPEN_NORMAL, //正常开门(门磁) + EVENT_ACS_DOOR_CLOSE_NORMAL , //正常关门(门磁) + EVENT_ACS_DOOR_OPEN_ABNORMAL, //门异常打开(门磁) + EVENT_ACS_DOOR_OPEN_TIMEOUT, //门打开超时(门磁) + EVENT_ACS_REMOTE_OPEN_DOOR, //远程开门 + EVENT_ACS_REMOTE_CLOSE_DOOR, //远程关门 + EVENT_ACS_REMOTE_ALWAYS_OPEN, //远程常开 + EVENT_ACS_REMOTE_ALWAYS_CLOSE, //远程常关 + EVENT_ACS_NOT_BELONG_MULTI_GROUP, //卡不属于多重认证群组 + EVENT_ACS_INVALID_MULTI_VERIFY_PERIOD, //卡不在多重认证时间段内 + EVENT_ACS_MULTI_VERIFY_SUPER_RIGHT_FAIL, //多重认证模式超级密码认证失败 + EVENT_ACS_MULTI_VERIFY_REMOTE_RIGHT_FAIL, //多重认证模式远程认证失败 + EVENT_ACS_MULTI_VERIFY_SUCCESS, //多重认证成功 + EVENT_ACS_MULTI_VERIFY_NEED_REMOTE_OPEN, //多重多重认证需要远程开门 + EVENT_ACS_MULTI_VERIFY_SUPERPASSWD_VERIFY_SUCCESS, //多重认证超级密码认证成功事件 + EVENT_ACS_MULTI_VERIFY_REPEAT_VERIFY_FAIL, //多重认证重复认证失败 + EVENT_ACS_MULTI_VERIFY_TIMEOUT, //多重认证超时失败 + EVENT_ACS_REMOTE_CAPTURE_PIC, //远程抓拍 + EVENT_ACS_DOORBELL_RINGING, //门铃响 + EVENT_ACS_SECURITY_MODULE_DESMANTLE_ALARM, //门控安全模块防拆报警 + EVENT_ACS_CALL_CENTER, //呼叫中心事件 + EVENT_ACS_FIRSTCARD_AUTHORIZE_BEGIN, //首卡授权开始 + EVENT_ACS_FIRSTCARD_AUTHORIZE_END, //首卡授权结束 + EVENT_ACS_DOORLOCK_INPUT_SHORT_CIRCUIT, //门锁输入短路报警 + EVENT_ACS_DOORLOCK_INPUT_BROKEN_CIRCUIT, //门锁输入断路报警 + EVENT_ACS_DOORLOCK_INPUT_EXCEPTION, //门锁输入异常报警 + EVENT_ACS_DOORCONTACT_INPUT_SHORT_CIRCUIT, //门磁输入短路报警 + EVENT_ACS_DOORCONTACT_INPUT_BROKEN_CIRCUIT, //门磁输入断路报警 + EVENT_ACS_DOORCONTACT_INPUT_EXCEPTION, //门磁输入异常报警 + EVENT_ACS_OPENBUTTON_INPUT_SHORT_CIRCUIT, //开门按钮输入短路报警 + EVENT_ACS_OPENBUTTON_INPUT_BROKEN_CIRCUIT, //开门按钮输入断路报警 + EVENT_ACS_OPENBUTTON_INPUT_EXCEPTION, //开门按钮输入异常报警 + EVENT_ACS_DOORLOCK_OPEN_EXCEPTION, //门锁异常打开 + EVENT_ACS_DOORLOCK_OPEN_TIMEOUT, //门锁打开超时 + EVENT_ACS_FIRSTCARD_OPEN_WITHOUT_AUTHORIZE, //首卡未授权开门失败 + EVENT_ACS_CALL_LADDER_RELAY_BREAK, //呼梯继电器断开 + EVENT_ACS_CALL_LADDER_RELAY_CLOSE, //呼梯继电器闭合 + EVENT_ACS_AUTO_KEY_RELAY_BREAK, //自动按键继电器断开 + EVENT_ACS_AUTO_KEY_RELAY_CLOSE, //自动按键继电器闭合 + EVENT_ACS_KEY_CONTROL_RELAY_BREAK, //按键梯控继电器断开 + EVENT_ACS_KEY_CONTROL_RELAY_CLOSE, //按键梯控继电器闭合 + EVENT_ACS_REMOTE_VISITOR_CALL_LADDER, //访客呼梯 + EVENT_ACS_REMOTE_HOUSEHOLD_CALL_LADDER, //住户呼梯 + EVENT_ACS_LEGAL_MESSAGE, //合法短信 + EVENT_ACS_ILLEGAL_MESSAGE, //非法短信 + EVENT_ACS_TRAILING, //尾随通行 + EVENT_ACS_REVERSE_ACCESS, //反向闯入 + EVENT_ACS_FORCE_ACCESS, //外力冲撞 + EVENT_ACS_CLIMBING_OVER_GATE, //翻越 + EVENT_ACS_PASSING_TIMEOUT, //通行超时 + EVENT_ACS_INTRUSION_ALARM, //误闯报警 + EVENT_ACS_FREE_GATE_PASS_NOT_AUTH, //闸机自由通行时未认证通过 + EVENT_ACS_DROP_ARM_BLOCK, //摆臂被阻挡 + EVENT_ACS_DROP_ARM_BLOCK_RESUME, //摆臂阻挡消除 + EVENT_ACS_REMOTE_CONTROL_CLOSE_DOOR, //遥控器关门 + EVENT_ACS_REMOTE_CONTROL_OPEN_DOOR, //遥控器开门 + EVENT_ACS_REMOTE_CONTROL_ALWAYS_OPEN_DOOR //遥控器常开门 }ACS_DOOR_SUBEVENT_ENUM; typedef enum _ACS_CARD_READER_SUBEVENT_ENUM_ { - EVENT_ACS_STRESS_ALARM = 0, //вȱ - EVENT_ACS_CARD_READER_DESMANTLE_ALARM, //𱨾 - EVENT_ACS_LEGAL_CARD_PASS, //Ϸ֤ͨ - EVENT_ACS_CARD_AND_PSW_PASS, //ˢ֤ͨ - EVENT_ACS_CARD_AND_PSW_FAIL, //ˢ֤ʧ - EVENT_ACS_CARD_AND_PSW_TIMEOUT, //ˢ֤ʱ - EVENT_ACS_CARD_MAX_AUTHENTICATE_FAIL, //֤ʧܳ - EVENT_ACS_CARD_NO_RIGHT, //δȨ - EVENT_ACS_CARD_INVALID_PERIOD, //ǰʱЧ - EVENT_ACS_CARD_OUT_OF_DATE, //Ź - EVENT_ACS_INVALID_CARD, //޴˿ - EVENT_ACS_ANTI_SNEAK_FAIL, //DZ֤ʧ - EVENT_ACS_INTERLOCK_DOOR_NOT_CLOSE, //δر - EVENT_ACS_FINGERPRINT_COMPARE_PASS, //ָƱȶͨ - EVENT_ACS_FINGERPRINT_COMPARE_FAIL, //ָƱȶʧ - EVENT_ACS_CARD_FINGERPRINT_VERIFY_PASS, //ˢָ֤ͨ - EVENT_ACS_CARD_FINGERPRINT_VERIFY_FAIL, //ˢָ֤ʧ - EVENT_ACS_CARD_FINGERPRINT_VERIFY_TIMEOUT, //ˢָ֤ʱ - EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_PASS, //ˢָƼ֤ͨ - EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_FAIL, //ˢָƼ֤ʧ - EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_TIMEOUT, //ˢָƼ֤ʱ - EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_PASS, //ָƼ֤ͨ - EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_FAIL, //ָƼ֤ʧ - EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_TIMEOUT, //ָƼ֤ʱ - EVENT_ACS_FINGERPRINT_INEXISTENCE, //ָƲ - EVENT_ACS_FACE_VERIFY_PASS, //֤ͨ - EVENT_ACS_FACE_VERIFY_FAIL, //֤ʧ - EVENT_ACS_FACE_AND_FP_VERIFY_PASS, //ָ֤ͨ - EVENT_ACS_FACE_AND_FP_VERIFY_FAIL, //ָ֤ʧ - EVENT_ACS_FACE_AND_FP_VERIFY_TIMEOUT, //ָ֤ʱ - EVENT_ACS_FACE_AND_PW_VERIFY_PASS, //֤ͨ - EVENT_ACS_FACE_AND_PW_VERIFY_FAIL, //֤ʧ - EVENT_ACS_FACE_AND_PW_VERIFY_TIMEOUT, //֤ʱ - EVENT_ACS_FACE_AND_CARD_VERIFY_PASS, //ˢ֤ͨ - EVENT_ACS_FACE_AND_CARD_VERIFY_FAIL, //ˢ֤ʧ - EVENT_ACS_FACE_AND_CARD_VERIFY_TIMEOUT, //ˢ֤ʱ - EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_PASS, //ָ֤ͨ - EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_FAIL, //ָ֤ʧ - EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_TIMEOUT, //ָ֤ʱ - EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_PASS, //ˢָ֤ͨ - EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_FAIL, //ˢָ֤ʧ - EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_TIMEOUT, //ˢָ֤ʱ - EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_PASS, //żָ֤ͨ - EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_FAIL, //żָ֤ʧ - EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_TIMEOUT, //żָ֤ʱ - EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_PASS, //żָƼ֤ͨ - EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_FAIL, //żָƼ֤ʧ - EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_TIMEOUT, //żָƼ֤ʱ - EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_PASS, //ż֤ͨ - EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_FAIL, //ż֤ʧ - EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_TIMEOUT, //ż֤ʱ - EVENT_ACS_FACE_RECOGNIZE_FAIL, //Ŀʶʧ - EVENT_ACS_EMPLOYEENO_AND_PW_PASS, //ż֤ͨ - EVENT_ACS_EMPLOYEENO_AND_PW_FAIL, //ż֤ʧ - EVENT_ACS_EMPLOYEENO_AND_PW_TIMEOUT, //ż֤ʱ - EVENT_ACS_HUMAN_DETECT_FAIL, //˼ʧ - EVENT_ACS_PEOPLE_AND_ID_CARD_COMPARE_PASS, //֤ȶͨ - EVENT_ACS_PEOPLE_AND_ID_CARD_COMPARE_FAIL, //֤ȶʧ - EVENT_ACS_DOOR_OPEN_OR_DORMANT_FAIL, //״̬ջ״̬֤ʧ - EVENT_ACS_AUTH_PLAN_DORMANT_FAIL, //֤ƻģʽ֤ʧ - EVENT_ACS_CARD_ENCRYPT_VERIFY_FAIL, //Уʧ - EVENT_ACS_SUBMARINEBACK_REPLY_FAIL, //DZطӦʧ - EVENT_ACS_PASSWORD_MISMATCH, //벻ƥ - EVENT_ACS_EMPLOYEE_NO_NOT_EXIST, //Ų - EVENT_ACS_COMBINED_VERIFY_PASS, //֤ͨ - EVENT_ACS_COMBINED_VERIFY_TIMEOUT, //֤ʱ - EVENT_ACS_VERIFY_MODE_MISMATCH, //֤ʽƥ - EVENT_ACS_PSW_ERROR_OVER_TIMES, //֤ 67 - EVENT_ACS_PSW_VERIFY_PASS, //֤ͨ - EVENT_ACS_PSW_VERIFY_FAIL, //֤ʧ - EVENT_ACS_ORCODE_VERIFY_PASS, //ά֤ͨ - EVENT_ACS_ORCODE_VERIFY_FAIL, //ά֤ʧ - EVENT_ACS_HOUSEHOLDER_AUTHORIZE_PASS, //Ȩ֤ͨ - EVENT_ACS_BLUETOOTH_VERIFY_PASS, //֤ͨ - EVENT_ACS_BLUETOOTH_VERIFY_FAIL, //֤ʧ 74 - EVENT_ACS_INFORMAL_M1_CARD_VERIFY_FAIL, //M1֤ʧ - EVENT_ACS_CPU_CARD_ENCRYPT_VERIFY_FAIL, //CPUУʧ - EVENT_ACS_NFC_DISABLE_VERIFY_FAIL, //NFCܹر֤ʧ - EVENT_ACS_EM_CARD_RECOGNIZE_NOT_ENABLED, //EMʶδ - EVENT_ACS_M1_CARD_RECOGNIZE_NOT_ENABLED, //M1ʶδ - EVENT_ACS_CPU_CARD_RECOGNIZE_NOT_ENABLED, //CPUʶδ - EVENT_ACS_ID_CARD_RECOGNIZE_NOT_ENABLED, //֤ʶδ - EVENT_ACS_CARD_SET_SECRET_KEY_FAIL, //װԿʧ - EVENT_ACS_DESFIRE_CARD_ENCRYPT_VERIFY_FAIL, //DesfireУʧ - EVENT_ACS_DESFIRE_CARD_RECOGNIZE_NOT_ENABLED, //Desfireʶδ - EVENT_ACS_IRIS_VERIFY_PASS, //Ĥ֤ͨ - EVENT_ACS_IRIS_VERIFY_FAIL, //Ĥ֤ʧ - EVENT_ACS_IRIS_BIOASSAY_FAIL, //Ĥʧ - EVENT_ACS_FELICA_CARD_RECOGNIZE_NOT_ENABLED, //Felicaʶδ - EVENT_ACS_ORCODE_RECOGNIZE_PASS, //άʶɹά¼κ֤ - EVENT_ACS_VP_ANTI_SPOOFING_FAIL, //ƻʧ - EVENT_ACS_VP_VERIFY_FAIL, //֤ʧ - EVENT_ACS_ESD_OK, //ESDϸ - EVENT_ACS_ESD_NOT_OK_OPEN_DOOR, //ESDϸ񵫿 - EVENT_ACS_ESD_NOT_OK, //ESDϸ񲻿 - EVENT_ACS_ESD_OVERTIME, //ESDⳬʱ - EVENT_ACS_SOCIAL_SECURITY_CARD_VERIFY_CONTRAST_SUCCESS, //籣֤Աȳɹ - EVENT_ACS_SOCIAL_SECURITY_CARD_VERIFY_CONTRAST_FAIL, //籣֤Աʧ - EVENT_ACS_PP_AND_PV_VERIFY_SUCCESS, //ƾ֤ɹ - EVENT_ACS_PP_AND_PV_VERIFY_FAIL //ƾ֤ʧ + EVENT_ACS_STRESS_ALARM = 0, //胁迫报警 + EVENT_ACS_CARD_READER_DESMANTLE_ALARM, //读卡器防拆报警 + EVENT_ACS_LEGAL_CARD_PASS, //合法卡认证通过 + EVENT_ACS_CARD_AND_PSW_PASS, //刷卡加密码认证通过 + EVENT_ACS_CARD_AND_PSW_FAIL, //刷卡加密码认证失败 + EVENT_ACS_CARD_AND_PSW_TIMEOUT, //刷卡加密码认证超时 + EVENT_ACS_CARD_MAX_AUTHENTICATE_FAIL, //读卡器认证失败超次 + EVENT_ACS_CARD_NO_RIGHT, //卡未分配权限 + EVENT_ACS_CARD_INVALID_PERIOD, //卡当前时段无效 + EVENT_ACS_CARD_OUT_OF_DATE, //卡号过期 + EVENT_ACS_INVALID_CARD, //无此卡号 + EVENT_ACS_ANTI_SNEAK_FAIL, //反潜回认证失败 + EVENT_ACS_INTERLOCK_DOOR_NOT_CLOSE, //互锁门未关闭 + EVENT_ACS_FINGERPRINT_COMPARE_PASS, //指纹比对通过 + EVENT_ACS_FINGERPRINT_COMPARE_FAIL, //指纹比对失败 + EVENT_ACS_CARD_FINGERPRINT_VERIFY_PASS, //刷卡加指纹认证通过 + EVENT_ACS_CARD_FINGERPRINT_VERIFY_FAIL, //刷卡加指纹认证失败 + EVENT_ACS_CARD_FINGERPRINT_VERIFY_TIMEOUT, //刷卡加指纹认证超时 + EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_PASS, //刷卡加指纹加密码认证通过 + EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_FAIL, //刷卡加指纹加密码认证失败 + EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_TIMEOUT, //刷卡加指纹加密码认证超时 + EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_PASS, //指纹加密码认证通过 + EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_FAIL, //指纹加密码认证失败 + EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_TIMEOUT, //指纹加密码认证超时 + EVENT_ACS_FINGERPRINT_INEXISTENCE, //指纹不存在 + EVENT_ACS_FACE_VERIFY_PASS, //人脸认证通过 + EVENT_ACS_FACE_VERIFY_FAIL, //人脸认证失败 + EVENT_ACS_FACE_AND_FP_VERIFY_PASS, //人脸加指纹认证通过 + EVENT_ACS_FACE_AND_FP_VERIFY_FAIL, //人脸加指纹认证失败 + EVENT_ACS_FACE_AND_FP_VERIFY_TIMEOUT, //人脸加指纹认证超时 + EVENT_ACS_FACE_AND_PW_VERIFY_PASS, //人脸加密码认证通过 + EVENT_ACS_FACE_AND_PW_VERIFY_FAIL, //人脸加密码认证失败 + EVENT_ACS_FACE_AND_PW_VERIFY_TIMEOUT, //人脸加密码认证超时 + EVENT_ACS_FACE_AND_CARD_VERIFY_PASS, //人脸加刷卡认证通过 + EVENT_ACS_FACE_AND_CARD_VERIFY_FAIL, //人脸加刷卡认证失败 + EVENT_ACS_FACE_AND_CARD_VERIFY_TIMEOUT, //人脸加刷卡认证超时 + EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_PASS, //人脸加密码加指纹认证通过 + EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_FAIL, //人脸加密码加指纹认证失败 + EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_TIMEOUT, //人脸加密码加指纹认证超时 + EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_PASS, //人脸加刷卡加指纹认证通过 + EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_FAIL, //人脸加刷卡加指纹认证失败 + EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_TIMEOUT, //人脸加刷卡加指纹认证超时 + EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_PASS, //工号加指纹认证通过 + EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_FAIL, //工号加指纹认证失败 + EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_TIMEOUT, //工号加指纹认证超时 + EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_PASS, //工号加指纹加密码认证通过 + EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_FAIL, //工号加指纹加密码认证失败 + EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_TIMEOUT, //工号加指纹加密码认证超时 + EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_PASS, //工号加人脸认证通过 + EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_FAIL, //工号加人脸认证失败 + EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_TIMEOUT, //工号加人脸认证超时 + EVENT_ACS_FACE_RECOGNIZE_FAIL, //目标识别失败 + EVENT_ACS_EMPLOYEENO_AND_PW_PASS, //工号加密码认证通过 + EVENT_ACS_EMPLOYEENO_AND_PW_FAIL, //工号加密码认证失败 + EVENT_ACS_EMPLOYEENO_AND_PW_TIMEOUT, //工号加密码认证超时 + EVENT_ACS_HUMAN_DETECT_FAIL, //真人检测失败 + EVENT_ACS_PEOPLE_AND_ID_CARD_COMPARE_PASS, //人证比对通过 + EVENT_ACS_PEOPLE_AND_ID_CARD_COMPARE_FAIL, //人证比对失败 + EVENT_ACS_DOOR_OPEN_OR_DORMANT_FAIL, //门状态常闭或休眠状态认证失败 + EVENT_ACS_AUTH_PLAN_DORMANT_FAIL, //认证计划休眠模式认证失败 + EVENT_ACS_CARD_ENCRYPT_VERIFY_FAIL, //卡加密校验失败 + EVENT_ACS_SUBMARINEBACK_REPLY_FAIL, //反潜回服务器应答失败 + EVENT_ACS_PASSWORD_MISMATCH, //密码不匹配 + EVENT_ACS_EMPLOYEE_NO_NOT_EXIST, //工号不存在 + EVENT_ACS_COMBINED_VERIFY_PASS, //组合认证通过 + EVENT_ACS_COMBINED_VERIFY_TIMEOUT, //组合认证超时 + EVENT_ACS_VERIFY_MODE_MISMATCH, //认证方式不匹配 + EVENT_ACS_PSW_ERROR_OVER_TIMES, //密码认证超次 67 + EVENT_ACS_PSW_VERIFY_PASS, //密码认证通过 + EVENT_ACS_PSW_VERIFY_FAIL, //密码认证失败 + EVENT_ACS_ORCODE_VERIFY_PASS, //二维码认证通过 + EVENT_ACS_ORCODE_VERIFY_FAIL, //二维码认证失败 + EVENT_ACS_HOUSEHOLDER_AUTHORIZE_PASS, //户主授权认证通过 + EVENT_ACS_BLUETOOTH_VERIFY_PASS, //蓝牙认证通过 + EVENT_ACS_BLUETOOTH_VERIFY_FAIL, //蓝牙认证失败 74 + EVENT_ACS_INFORMAL_M1_CARD_VERIFY_FAIL, //非正规M1卡认证失败 + EVENT_ACS_CPU_CARD_ENCRYPT_VERIFY_FAIL, //CPU卡加密校验失败 + EVENT_ACS_NFC_DISABLE_VERIFY_FAIL, //NFC功能关闭验证失败 + EVENT_ACS_EM_CARD_RECOGNIZE_NOT_ENABLED, //EM卡识别未启用 + EVENT_ACS_M1_CARD_RECOGNIZE_NOT_ENABLED, //M1卡识别未启用 + EVENT_ACS_CPU_CARD_RECOGNIZE_NOT_ENABLED, //CPU卡识别未启用 + EVENT_ACS_ID_CARD_RECOGNIZE_NOT_ENABLED, //身份证识别未启用 + EVENT_ACS_CARD_SET_SECRET_KEY_FAIL, //卡灌装密钥失败 + EVENT_ACS_DESFIRE_CARD_ENCRYPT_VERIFY_FAIL, //Desfire卡加密校验失败 + EVENT_ACS_DESFIRE_CARD_RECOGNIZE_NOT_ENABLED, //Desfire卡识别未启用 + EVENT_ACS_IRIS_VERIFY_PASS, //虹膜认证通过 + EVENT_ACS_IRIS_VERIFY_FAIL, //虹膜认证失败 + EVENT_ACS_IRIS_BIOASSAY_FAIL, //虹膜活体检测失败 + EVENT_ACS_FELICA_CARD_RECOGNIZE_NOT_ENABLED, //Felica卡识别未启用 + EVENT_ACS_ORCODE_RECOGNIZE_PASS, //二维码识别成功(纯二维码事件,不带任何认证) + EVENT_ACS_VP_ANTI_SPOOFING_FAIL, //声纹活体检测失败 + EVENT_ACS_VP_VERIFY_FAIL, //声纹认证失败 + EVENT_ACS_ESD_OK, //ESD合格开门 + EVENT_ACS_ESD_NOT_OK_OPEN_DOOR, //ESD不合格但开门 + EVENT_ACS_ESD_NOT_OK, //ESD不合格不开门 + EVENT_ACS_ESD_OVERTIME, //ESD检测超时 + EVENT_ACS_SOCIAL_SECURITY_CARD_VERIFY_CONTRAST_SUCCESS, //社保卡认证对比成功 + EVENT_ACS_SOCIAL_SECURITY_CARD_VERIFY_CONTRAST_FAIL, //社保卡认证对比失败 + EVENT_ACS_PP_AND_PV_VERIFY_SUCCESS, //掌纹掌静脉认证成功 + EVENT_ACS_PP_AND_PV_VERIFY_FAIL //掌纹掌静脉认证失败 }ACS_CARD_READER_SUBEVENT_ENUM; typedef struct tagNET_DVR_EVENT_LINKAGE_INFO { - WORD wMainEventType; //¼ͣ0-豸¼1-¼2-¼3-¼ - WORD wSubEventType; //¼ + WORD wMainEventType; //事件主类型,0-设备事件,1-报警输入事件,2-门事件,3-读卡器事件 + WORD wSubEventType; //事件次类型 BYTE byRes[28]; }NET_DVR_EVENT_LINKAGE_INFO,*LPNET_DVR_EVENT_LINKAGE_INFO; typedef union tagNET_DVR_EVETN_CARD_LINKAGE_UNION { - BYTE byCardNo[ACS_CARD_NO_LEN]; // - NET_DVR_EVENT_LINKAGE_INFO struEventLinkage; //¼ʱ - BYTE byMACAddr[MACADDR_LEN]; //MACַ - BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //ţԱID + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + NET_DVR_EVENT_LINKAGE_INFO struEventLinkage; //事件联动时参数 + BYTE byMACAddr[MACADDR_LEN]; //物理MAC地址 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) }NET_DVR_EVETN_CARD_LINKAGE_UNION,*LPNET_DVR_EVETN_CARD_LINKAGE_UNION; typedef struct tagNET_DVR_EVENT_CARD_LINKAGE_CFG { - DWORD dwSize; //ṹС - BYTE byProMode; //ʽ0-¼1- + DWORD dwSize; //结构体大小 + BYTE byProMode; //联动方式,0-事件,1-卡号 BYTE byRes1[3]; - DWORD dwEventSourceID; //¼ԴIDΪ豸¼ʱЧ ¼ʱΪű;Ϊ¼ʱΪID;Ϊ¼ʱΪID¼ID - NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //ʽ - BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //ıţʾΪ0ʾΪ1ʾ - BYTE byRes2[32]; // - BYTE byOpenDoor[MAX_DOOR_NUM_256]; //ʾ,Ƿţ0-1- - BYTE byCloseDoor[MAX_DOOR_NUM_256]; //ʾ,Ƿţ0-1- - BYTE byNormalOpen[MAX_DOOR_NUM_256]; //ʾ,Ƿ0-1- - BYTE byNormalClose[MAX_DOOR_NUM_256]; //ʾ,Ƿأ0-1- - BYTE byMainDevBuzzer; // 0-1- - BYTE byCapturePic; //Ƿץģ0-ץģ1-ץ - BYTE byRecordVideo; //Ƿ¼0-¼1-¼ - BYTE byRes3[29]; // - BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //ʾ0-1- - BYTE byRes[128]; // + DWORD dwEventSourceID; //事件源ID,当主类型为设备事件时无效, 当主类型是门事件时为门编号;当主类型为读卡器事件时,为读卡器ID;当为报警输入事件时为防区报警输入ID或事件报警输入ID + NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //联动方式参数 + BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //关联的报警输出号,按数组表示,为0表示不关联,为1表示关联 + BYTE byRes2[32]; //保留 + BYTE byOpenDoor[MAX_DOOR_NUM_256]; //按数组表示,是否联动开门,0-不联动,1-联动 + BYTE byCloseDoor[MAX_DOOR_NUM_256]; //按数组表示,是否联动关门,0-不联动,1-联动 + BYTE byNormalOpen[MAX_DOOR_NUM_256]; //按数组表示,是否联动常开,0-不联动,1-联动 + BYTE byNormalClose[MAX_DOOR_NUM_256]; //按数组表示,是否联动常关,0-不联动,1-联动 + BYTE byMainDevBuzzer; //主机蜂鸣器 0-不联动,1-联动输出 + BYTE byCapturePic; //是否联动抓拍,0-不联动抓拍,1-联动抓拍 + BYTE byRecordVideo; //是否联动录像,0-不联动录像,1-联动录像 + BYTE byRes3[29]; //保留 + BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //联动读卡器蜂鸣器,按数组表示,0-不联动,1-联动 + BYTE byRes[128]; //保留 }NET_DVR_EVENT_CARD_LINKAGE_CFG,*LPNET_DVR_EVENT_CARD_LINKAGE_CFG; typedef struct tagNET_DVR_EVENT_LINKAGE_CARD_CFG_V50 { - DWORD dwSize; //ṹС - BYTE byProMode; //ʽ0-¼1-, 2-MACַ + DWORD dwSize; //结构体大小 + BYTE byProMode; //联动方式,0-事件,1-卡号, 2-MAC地址 BYTE byRes1[3]; - DWORD dwEventSourceID; //¼ԴIDΪ豸¼ʱЧ ¼ʱΪű;Ϊ¼ʱΪID;Ϊ¼ʱΪID¼ID0xffffffffʾȫ - NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //ʽ - BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //ıţλʾΪ0ʾΪ1ʾ - BYTE byRes2[32]; // - BYTE byOpenDoor[MAX_DOOR_NUM_256]; //λʾ,Ƿţ0-1- - BYTE byCloseDoor[MAX_DOOR_NUM_256]; //λʾ,Ƿţ0-1- - BYTE byNormalOpen[MAX_DOOR_NUM_256]; //λʾ,Ƿ0-1- - BYTE byNormalClose[MAX_DOOR_NUM_256]; //λʾ,Ƿأ0-1- - BYTE byMainDevBuzzer; // 0-1- - BYTE byCapturePic; //Ƿץģ0-ץģ1-ץ - BYTE byRecordVideo; //Ƿ¼0-¼1-¼ - BYTE byRes3[29]; // - BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //λʾ0-1- - BYTE byAlarmOutClose[MAX_ALARMHOST_ALARMOUT_NUM]; //رգֽڱʾΪ0ʾΪ1ʾ - BYTE byAlarmInSetup[MAX_ALARMHOST_ALARMIN_NUM]; //ֽڱʾΪ0ʾΪ1ʾ - BYTE byAlarmInClose[MAX_ALARMHOST_ALARMIN_NUM]; //ֽڱʾΪ0ʾΪ1ʾ - BYTE byRes[500]; // + DWORD dwEventSourceID; //事件源ID,当主类型为设备事件时无效, 当主类型是门事件时为门编号;当主类型为读卡器事件时,为读卡器ID;当为报警输入事件时为防区报警输入ID或事件报警输入ID。0xffffffff表示联动全部 + NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //联动方式参数 + BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //关联的报警输出号,按位表示,为0表示不关联,为1表示关联 + BYTE byRes2[32]; //保留 + BYTE byOpenDoor[MAX_DOOR_NUM_256]; //按位表示,是否联动开门,0-不联动,1-联动 + BYTE byCloseDoor[MAX_DOOR_NUM_256]; //按位表示,是否联动关门,0-不联动,1-联动 + BYTE byNormalOpen[MAX_DOOR_NUM_256]; //按位表示,是否联动常开,0-不联动,1-联动 + BYTE byNormalClose[MAX_DOOR_NUM_256]; //按位表示,是否联动常关,0-不联动,1-联动 + BYTE byMainDevBuzzer; //主机蜂鸣器 0-不联动,1-联动输出 + BYTE byCapturePic; //是否联动抓拍,0-不联动抓拍,1-联动抓拍 + BYTE byRecordVideo; //是否联动录像,0-不联动录像,1-联动录像 + BYTE byRes3[29]; //保留 + BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //联动读卡器蜂鸣器,按位表示,0-不联动,1-联动 + BYTE byAlarmOutClose[MAX_ALARMHOST_ALARMOUT_NUM]; //关联报警输出关闭,按字节表示,为0表示不关联,为1表示关联 + BYTE byAlarmInSetup[MAX_ALARMHOST_ALARMIN_NUM]; //关联防区布防,按字节表示,为0表示不关联,为1表示关联 + BYTE byAlarmInClose[MAX_ALARMHOST_ALARMIN_NUM]; //关联防区撤防,按字节表示,为0表示不关联,为1表示关联 + BYTE byRes[500]; //保留 }NET_DVR_EVENT_CARD_LINKAGE_CFG_V50, *LPNET_DVR_EVENT_CARD_LINKAGE_CFG_V50; typedef struct tagNET_DVR_EVENT_LINKAGE_CARD_CFG_V51 { - DWORD dwSize; //ṹС - BYTE byProMode; //ʽ0-¼1-ţ2-MACַ3-ţԱID + DWORD dwSize; //结构体大小 + BYTE byProMode; //联动方式,0-事件,1-卡号,2-MAC地址,3-工号(人员ID) BYTE byRes1[3]; - DWORD dwEventSourceID; //¼ԴIDΪ豸¼ʱЧ ¼ʱΪű;Ϊ¼ʱΪID;Ϊ¼ʱΪID¼ID0xffffffffʾȫ - NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //ʽ - BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //ıţλʾΪ0ʾΪ1ʾ - BYTE byRes2[32]; // - BYTE byOpenDoor[MAX_DOOR_NUM_256]; //λʾ,Ƿţ0-1- - BYTE byCloseDoor[MAX_DOOR_NUM_256]; //λʾ,Ƿţ0-1- - BYTE byNormalOpen[MAX_DOOR_NUM_256]; //λʾ,Ƿ0-1- - BYTE byNormalClose[MAX_DOOR_NUM_256]; //λʾ,Ƿأ0-1- - BYTE byMainDevBuzzer; // 0-1- - BYTE byCapturePic; //Ƿץģ0-ץģ1-ץ - BYTE byRecordVideo; //Ƿ¼0-¼1-¼ - BYTE byMainDevStopBuzzer; //ֹͣ 0-1- - WORD wAudioDisplayID; //ID0-ĿǰΧ1-32 - BYTE byAudioDisplayMode; //ģʽ0-رգ1-βţ2-ѭ - BYTE byRes3[25]; // - BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //λʾ0-1- - BYTE byAlarmOutClose[MAX_ALARMHOST_ALARMOUT_NUM]; //رգֽڱʾΪ0ʾΪ1ʾ - BYTE byAlarmInSetup[MAX_ALARMHOST_ALARMIN_NUM]; //ֽڱʾΪ0ʾΪ1ʾ - BYTE byAlarmInClose[MAX_ALARMHOST_ALARMIN_NUM]; //ֽڱʾΪ0ʾΪ1ʾ - BYTE byReaderStopBuzzer[MAX_CARD_READER_NUM_512]; //ֹֽͣڱʾ0-1- - BYTE byRes[512]; // + DWORD dwEventSourceID; //事件源ID,当主类型为设备事件时无效, 当主类型是门事件时为门编号;当主类型为读卡器事件时,为读卡器ID;当为报警输入事件时为防区报警输入ID或事件报警输入ID。0xffffffff表示联动全部 + NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //联动方式参数 + BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //关联的报警输出号,按位表示,为0表示不关联,为1表示关联 + BYTE byRes2[32]; //保留 + BYTE byOpenDoor[MAX_DOOR_NUM_256]; //按位表示,是否联动开门,0-不联动,1-联动 + BYTE byCloseDoor[MAX_DOOR_NUM_256]; //按位表示,是否联动关门,0-不联动,1-联动 + BYTE byNormalOpen[MAX_DOOR_NUM_256]; //按位表示,是否联动常开,0-不联动,1-联动 + BYTE byNormalClose[MAX_DOOR_NUM_256]; //按位表示,是否联动常关,0-不联动,1-联动 + BYTE byMainDevBuzzer; //主机蜂鸣器 0-不联动,1-联动输出 + BYTE byCapturePic; //是否联动抓拍,0-不联动抓拍,1-联动抓拍 + BYTE byRecordVideo; //是否联动录像,0-不联动录像,1-联动录像 + BYTE byMainDevStopBuzzer; //主机停止蜂鸣 0-不联动,1-联动输出 + WORD wAudioDisplayID; //联动语音播放ID:0-不联动,目前范围1-32 + BYTE byAudioDisplayMode; //联动语音播放模式:0-关闭,1-单次播放,2-循环播放 + BYTE byRes3[25]; //保留 + BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //联动读卡器蜂鸣器,按位表示,0-不联动,1-联动 + BYTE byAlarmOutClose[MAX_ALARMHOST_ALARMOUT_NUM]; //关联报警输出关闭,按字节表示,为0表示不关联,为1表示关联 + BYTE byAlarmInSetup[MAX_ALARMHOST_ALARMIN_NUM]; //关联防区布防,按字节表示,为0表示不关联,为1表示关联 + BYTE byAlarmInClose[MAX_ALARMHOST_ALARMIN_NUM]; //关联防区撤防,按字节表示,为0表示不关联,为1表示关联 + BYTE byReaderStopBuzzer[MAX_CARD_READER_NUM_512]; //联动读卡器停止蜂鸣,按字节表示,0-不联动,1-联动 + BYTE byRes[512]; //保留 }NET_DVR_EVENT_CARD_LINKAGE_CFG_V51, *LPNET_DVR_EVENT_CARD_LINKAGE_CFG_V51; typedef struct tagNET_DVR_EVENT_CARD_LINKAGE_COND { DWORD dwSize; - DWORD dwEventID; //¼ID - WORD wLocalControllerID; //͵ؿ[1,64] + DWORD dwEventID; //事件ID + WORD wLocalControllerID; //就地控制器序号[1,64] BYTE byRes[106]; }NET_DVR_EVENT_CARD_LINKAGE_COND, *LPNET_DVR_EVENT_CARD_LINKAGE_COND; typedef struct tagNET_DVR_RIGHT_CONTROLLER_AUDIO_PARAM { DWORD dwSize; - DWORD dwFileSize; //ļСλֽڣϴƵļʱЧƵļʱЧ - DWORD dwAudioID; //ƵID0xffffffffϴ/ȫƵļĿǰ豸֧ȫϴ/أֵ֧ƵIDϴ/أ + DWORD dwFileSize; //文件大小,单位:字节(上传音频文件时有效,下载音频文件时无效) + DWORD dwAudioID; //音频ID(0xffffffff代表上传/下载全部音频文件,目前设备仅支持全量上传/下载,不支持单个音频ID上传/下载) BYTE byRes[256]; }NET_DVR_RIGHT_CONTROLLER_AUDIO_PARAM, *LPNET_DVR_RIGHT_CONTROLLER_AUDIO_PARAM; -//ͻ궨ļṹ +//客户标定文件结构体 typedef struct tagNET_DVR_CLIENT_CALIBFILE_PARAM { DWORD dwSize; - DWORD dwFileLen; //ļС - BYTE byChannel; //ͨ - BYTE byFileType; //0-3200W궨ļ,1-800W궨ļ + DWORD dwFileLen; //文件大小 + BYTE byChannel; //通道号 + BYTE byFileType; //0-3200W标定文件,1-800W标定文件 BYTE byRes[22]; }NET_DVR_CLIENT_CALIBFILE_PARAM, *LPNET_DVR_CLIENT_CALIBFILE_PARAM; typedef struct tagNET_DVR_RATIOSTITCHING_PARAM { DWORD dwSize; - DWORD dwFileLen; //ļС - BYTE byChannel;// senorƴӺͨ + DWORD dwFileLen; //文件大小 + BYTE byChannel;// 多个senor拼接后通道号 BYTE byRes[23]; }NET_DVR_RATIOSTITCHING_PARAM, *LPNET_DVR_RATIOSTITCHING_PARAM; -//ǽزļ +//电视墙素材文件 typedef struct tagNET_DVR_VIDEOWALL_MATERIAL_COND { DWORD dwSize; - BYTE byWallNo; //ǽǽţ1ʼ - BYTE byWindowType; //ͣ0-ͼĴ,1-Ļ - BYTE byFileType; //ļͣ0-ͼƬ - BYTE byRes1; //ֽ - DWORD dwWindowNo; //ڱţ1ʼ - DWORD dwMaterialNo; //زıţ1ʼ + BYTE byWallNo; //电视墙墙号,从1开始 + BYTE byWindowType; //窗口类型,0-图文窗口,1-字幕窗口 + BYTE byFileType; //文件类型,0-图片 + BYTE byRes1; //保留字节 + DWORD dwWindowNo; //窗口编号,从1开始 + DWORD dwMaterialNo; //素材编号,从1开始 BYTE byRes[32]; }NET_DVR_VIDEOWALL_MATERIAL_COND, *LPNET_DVR_VIDEOWALL_MATERIAL_COND; -//3200Wṹ +//3200W矫正表结构体 typedef struct tagNET_DVR_CORRECT_TABLE_3200W_PARAM { DWORD dwSize; - DWORD dwFileLen; //ļС - BYTE byChannel; //ͨ - BYTE byFileType; //0-3200W궨ļ,1-800W궨ļ + DWORD dwFileLen; //文件大小 + BYTE byChannel; //通道号 + BYTE byFileType; //0-3200W标定文件,1-800W标定文件 BYTE byRes[22]; }NET_DVR_CORRECT_TABLE_3200W_PARAM, *LPNET_DVR_CORRECT_TABLE_3200W_PARAM; -//ͨץͼļṹ +//四通道抓图文件结构体 typedef struct tagNET_DVR_FOUR_CAMERAS_PICTURES { DWORD dwSize; - DWORD dwFileLen; //ļС - BYTE byChannel; //ͨ + DWORD dwFileLen; //文件大小 + BYTE byChannel; //通道号 BYTE byRes[23]; }NET_DVR_FOUR_CAMERAS_PICTURES, *LPNET_DVR_FOUR_CAMERAS_PICTURES; -// ָͺű궨ļṹ +// 导出指定型号标定文件结构体 typedef struct tagNET_DVR_DEVTYPE_CALIBFILE_PARAM { DWORD dwSize; - DWORD dwFileLen; //ļ - BYTE byChannel; //ͨ - BYTE byFileType; //0-3200W궨ļ,1-800W궨ļ + DWORD dwFileLen; //文件长度 + BYTE byChannel; //通道号 + BYTE byFileType; //0-3200W标定文件,1-800W标定文件 BYTE byRes[22]; }NET_DVR_DEVTYPE_CALIBFILE_PARAM, *LPNET_DVR_DEVTYPE_CALIBFILE_PARAM; typedef struct tagNET_DVR_ANTI_SNEAK_HOST_INFO { - NET_DVR_ADDRESS struDVRIP; //IPַ - BYTE byIsStartAddr; //ǷΪʼַ0-1- - BYTE byHostNo; //ţ1-8Ҫڶ˳ - BYTE byRes[34]; // + NET_DVR_ADDRESS struDVRIP; //主机IP地址 + BYTE byIsStartAddr; //是否为开始地址,0-否,1-是 + BYTE byHostNo; //主机编号,1-8,主要用于读卡器顺序设置 + BYTE byRes[34]; //保留 }NET_DVR_ANTI_SNEAK_HOST_INFO,*LPNET_DVR_ANTI_SNEAK_HOST_INFO; typedef struct tagNET_DVR_ANTI_SNEAK_HOST_READER_INFO { - BYTE byAntiSnealHostNo; //DZ - BYTE byRes[5]; // - WORD wFollowUpCardReader; //÷DZµĶ + BYTE byAntiSnealHostNo; //反潜回主机编号 + BYTE byRes[5]; //保留 + WORD wFollowUpCardReader; //该反潜回主机下的读卡器编号 }NET_DVR_ANTI_SNEAK_HOST_READER_INFO, *LPNET_DVR_ANTI_SNEAK_HOST_READER_INFO; typedef struct tagNET_DVR_ANTI_SNEAK_MULTI_HOST_CFG { DWORD dwSize; - BYTE byEnable; //Ƿ뷴DZ·1-룬0- + BYTE byEnable; //是否加入反潜回路径,1-加入,0-不加入 BYTE byRes1[3]; - NET_DVR_ANTI_SNEAK_HOST_INFO struSneakHost[MAX_SNEAK_PATH_NODE]; //ַϢ - NET_DVR_ANTI_SNEAK_HOST_READER_INFO struStartReader; //ʼ ȫΪ0ʱʾעĸʼ + NET_DVR_ANTI_SNEAK_HOST_INFO struSneakHost[MAX_SNEAK_PATH_NODE]; //后续主机地址信息 + NET_DVR_ANTI_SNEAK_HOST_READER_INFO struStartReader; //起始读卡器编号 当该内容全为0时,表示不关注从哪个读卡器开始 BYTE byRes2[128]; }NET_DVR_ANTI_SNEAK_MULTI_HOST_CFG, *LPNET_DVR_ANTI_SNEAK_MULTI_HOST_CFG; typedef struct tagNET_DVR_ANTI_SNEAK_READER_CFG { - BYTE byEnable; //Ƿ뷴DZ·1-룬0- - BYTE byAntiSnealHostNo; //DZ - WORD wReaderID; //ID - NET_DVR_ANTI_SNEAK_HOST_READER_INFO struSneakReaderInfo[MAX_SNEAK_PATH_NODE]; // + BYTE byEnable; //是否加入反潜回路径,1-加入,0-不加入 + BYTE byAntiSnealHostNo; //反潜回主机编号 + WORD wReaderID; //读卡器ID + NET_DVR_ANTI_SNEAK_HOST_READER_INFO struSneakReaderInfo[MAX_SNEAK_PATH_NODE]; //后续主机读卡器编号 BYTE byRes2[8]; }NET_DVR_ANTI_SNEAK_READER_CFG, *LPNET_DVR_ANTI_SNEAK_READER_CFG; typedef struct tagNET_DVR_ANTI_SNEAK_MULTI_HOST_READERS_CFG { DWORD dwSize; - NET_DVR_ANTI_SNEAK_READER_CFG struReaderCfg[MAX_READER_ROUTE_NUM]; //Ϣ + NET_DVR_ANTI_SNEAK_READER_CFG struReaderCfg[MAX_READER_ROUTE_NUM]; //读卡器信息 BYTE byRes[128]; }NET_DVR_ANTI_SNEAK_MULTI_HOST_READERS_CFG, *LPNET_DVR_ANTI_SNEAK_MULTI_HOST_READERS_CFG; typedef struct tagNET_DVR_ACS_CFG { - DWORD dwSize; //ṹС - BYTE byRS485Backup; //ǷRS485ͨűݹܣ0-ã1- - BYTE byShowCapPic; //ǷʾץͼƬ 0-ʾ1-ʾ - BYTE byShowCardNo; //Ƿʾţ0-ʾ1-ʾ - BYTE byShowUserInfo; //ǷʾûϢ0-ʾ1-ʾ - BYTE byOverlayUserInfo;//ǷûϢ0-ӣ1- - BYTE byVoicePrompt; //Ƿʾ0-ã1- - BYTE byUploadCapPic; //ץǷϴͼƬ0-ϴ1-ϴ - BYTE bySaveCapPic; //Ƿ񱣴ץͼƬ0-棬1- - BYTE byInputCardNo; //ǷǷ뿨ţ0-1- - BYTE byEnableWifi; //Ƿwifi0-1- - BYTE byEnable3G4G; //3G4Gʹܣ0-ʹܣ1-ʹ - BYTE byProtocol;//ͨЭͣ0-˽Э飨Ĭϣ1-OSDPЭ + DWORD dwSize; //结构体大小 + BYTE byRS485Backup; //是否启用下行RS485通信备份功能,0-不启用,1-启用 + BYTE byShowCapPic; //是否显示抓拍图片, 0-不显示,1-显示 + BYTE byShowCardNo; //是否显示卡号,0-不显示,1-显示 + BYTE byShowUserInfo; //是否显示用户信息,0-不显示,1-显示 + BYTE byOverlayUserInfo;//是否叠加用户信息,0-不叠加,1-叠加 + BYTE byVoicePrompt; //是否启用语音提示,0-不启用,1-启用 + BYTE byUploadCapPic; //联动抓拍是否上传图片,0-不上传,1-上传 + BYTE bySaveCapPic; //是否保存抓拍图片,0-不保存,1-保存 + BYTE byInputCardNo; //是否是否允许按键输入卡号,0-不允许,1-允许 + BYTE byEnableWifi; //是否启动wifi,0-不启动,1-启动 + BYTE byEnable3G4G; //3G4G使能,0-不使能,1-使能 + BYTE byProtocol;//读卡器通信协议类型,0-私有协议(默认),1-OSDP协议 BYTE byRes[500]; }NET_DVR_ACS_CFG, *LPNET_DVR_ACS_CFG; typedef struct tagNET_DVR_PLATFORM_VERIFY_CFG { DWORD dwSize; - DWORD dwDoorNo; //ű - BYTE byResultType; //֤ͣ0Ƿ1Ϸ + DWORD dwDoorNo; //门编号 + BYTE byResultType; //认证结果类型,0:非法,1:合法 BYTE byRes1[3]; - BYTE byScreenDisplay[MAX_SCREEN_DISPLAY_LEN]; //LEDĻʾʾ֤Ϣ - BYTE byRes[300]; // ֽ + BYTE byScreenDisplay[MAX_SCREEN_DISPLAY_LEN]; //LED屏幕显示,用于显示认证相关信息 + BYTE byRes[300]; // 保留字节 }NET_DVR_PLATFORM_VERIFY_CFG, *LPNET_DVR_PLATFORM_VERIFY_CFG; typedef struct tagNET_DVR_PERSON_STATISTICS_CFG { DWORD dwSize; - BYTE byEnableStatistics; //Ƿͳƣ01 - BYTE byEnableOfflineStatistics; //Ƿͳƣ01 - BYTE byCountSignalStatisticalStandard; //źͳƱ׼0Ч1ͨͳƣ2֤ͳ + BYTE byEnableStatistics; //是否开启人数统计,0:不开启;1:开启; + BYTE byEnableOfflineStatistics; //是否开启离线人数统计,0:不开启;1:开启; + BYTE byCountSignalStatisticalStandard; //计数信号统计标准,0:无效;1:红外检测通行统计;2:认证数量统计 BYTE byRes[605]; }NET_DVR_PERSON_STATISTICS_CFG, *LPNET_DVR_PERSON_STATISTICS_CFG; typedef struct tagNET_DVR_ACS_SCREEN_DISPLAY_CFG { DWORD dwSize; - DWORD dwFontSize; //С[1,10] - DWORD dwRowSpacing; //м࣬λص㣻 - DWORD dwColumnSpacing; //м࣬λص㣻 - DWORD dwFirstRowPosition; //ʼλĻһֿ飬00 11/8: 22/8 33/8 44/8 55/8 66/8: 77/8 - BYTE byDegree; //ַʾǶȣ0-0ȣ1-90ȣţ - BYTE byScreenType; //Ļͣ0-DC48270RS043_01T1-DC80480B070_03T + DWORD dwFontSize; //字体大小,[1,10]; + DWORD dwRowSpacing; //行间距,单位:像素点; + DWORD dwColumnSpacing; //列间距,单位:像素点; + DWORD dwFirstRowPosition; //起始行位置在屏幕哪一个分块,0:0、 1:1/8:、 2:2/8、 3:3/8、 4:4/8、 5:5/8、 6:6/8:、 7:7/8; + BYTE byDegree; //字符显示方向角度,0-0度(正常),1-90度(侧着); + BYTE byScreenType; //屏幕类型,0-DC48270RS043_01T,1-DC80480B070_03T; BYTE byRes[306]; }NET_DVR_ACS_SCREEN_DISPLAY_CFG, *LPNET_DVR_ACS_SCREEN_DISPLAY_CFG; typedef struct tagNET_DVR_GATE_TIME_CFG { DWORD dwSize; - DWORD dwHoldOnALarmTime; //ʱ䣬λms - DWORD dwHoldOnGateOpenTime; //բյرǰִ״̬ʱ䣬λms - DWORD dwPostponeIntrusionAlarmTime; //ƳٴƭΪʱ䣬λms - DWORD dwNoLaneAccessTimeLimitTime; //ͨյЧ֤ͨźţͨгʱʱ䣬λs - DWORD dwSafetyZoneStayTime; //ͨյЧ֤ͨźţ˿͵ﰲȫͨʱʱ䣬λs - BYTE byIRTriggerTimeoutTime; //ⴥʱʱ䣬λ루0-255 + DWORD dwHoldOnALarmTime; //延续报警器蜂鸣时间,单位ms + DWORD dwHoldOnGateOpenTime; //闸门收到关闭命令前继续保持打开状态时间,单位ms + DWORD dwPostponeIntrusionAlarmTime; //推迟触发闯入欺骗行为报警时间,单位ms + DWORD dwNoLaneAccessTimeLimitTime; //通道收到有效通行认证信号,但无人通行超时报警时间,单位s + DWORD dwSafetyZoneStayTime; //通道收到有效通行认证信号,乘客到达安全区后滞留通道超时报警时间,单位s + BYTE byIRTriggerTimeoutTime; //红外触发超时时间,单位:秒(0-255) BYTE byRes[299]; }NET_DVR_GATE_TIME_CFG, *LPNET_DVR_GATE_TIME_CFG; @@ -44006,22 +44006,22 @@ typedef struct tagNET_DVR_GATE_TIME_CFG typedef struct tagNET_DVR_CARD_PASSWD_CFG { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; // - BYTE byCardPassword[CARD_PASSWORD_LEN]; // - DWORD dwErrorCode; //ȡ뿪ʹ÷صĴ룬ɹΪ0ʧܷش - BYTE byCardValid; //ǷЧ0-Ч1-ЧɾʱΪ0ɾȡʱֶʼΪ1 + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byCardPassword[CARD_PASSWORD_LEN]; //卡密码 + DWORD dwErrorCode; //获取卡密码开门使能配置返回的错误码,成功为0,失败返回错误码 + BYTE byCardValid; //卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1) BYTE byRes2[23]; }NET_DVR_CARD_PASSWD_CFG, *LPNET_DVR_CARD_PASSWD_CFG; typedef struct tagNET_DVR_CARD_PASSWD_STATUS { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; // - DWORD dwErrorCode; //Ϳ뿪ʹ÷صĴ룬ɹΪ0ʧܷش + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + DWORD dwErrorCode; //发送卡密码开门使能配置返回的错误码,成功为0,失败返回错误码 BYTE byRes2[24]; }NET_DVR_CARD_PASSWD_STATUS, *LPNET_DVR_CARD_PASSWD_STATUS; -//ṹ +//条件结构 typedef struct tagNET_DVR_VEHICLE_RECOG_COND { DWORD dwSize; @@ -44029,244 +44029,244 @@ typedef struct tagNET_DVR_VEHICLE_RECOG_COND BYTE byRes[64]; } NET_DVR_VEHICLE_RECOG_COND, *LPNET_DVR_VEHICLE_RECOG_COND; -//ṹ +//参数结构 typedef struct tagNET_DVR_VEHICLE_RECOG_CFG { DWORD dwSize; - //ˮ ͣϴNET_DVR_VEHICLE_RECOG_RESULTеֶsDataIndexӦ + //数据流水号 和(上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段sDataIndex对应) char sDataIndex[DATA_INDEX_LEN]; - // (ϴNET_DVR_VEHICLE_RECOG_RESULTеֶdwTaskNoӦ) + //任务处理号 和 (上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段dwTaskNo对应) WORD wTaskNo; BYTE byRes1[2]; - NET_VCA_RECT struPlateRect;//λ - char sLicense[MAX_LICENSE_LEN/*16*/];//ƺ + NET_VCA_RECT struPlateRect;//车牌位置 + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 /* - ͼƬʶ - bit0-ʶ0-ʶ1-ʶ - bit1-ʶ0-ʶ1-ʶ - bit2-ɫʶ0-ʶ1-ʶ - bit3-Ʒʶ0-ʶ1-ʶ - bit4-ڵʶ(ʻ)0-ʶ1-ʶ - bit5-ȫʶ(ʻ)0-ʶ1-ʶ - bit6-ڵʶ(ʻ)0-ʶ1-ʶ - bit7-ȫʶ(ʻ)0-ʶ1-ʶ - bit8-ͼƬʹܣ0-ʶ1-ʶ - bit9-ϴͼƬʹ(ͨSDK)0-ʶ1-ʶ - bit10-ϴͼƬʹ(ͨURL)0-ʶ1-ʶ - bit11-Ʊ공0-ʶ1-ʶ - bit12-ֻ0-ʶ1-ʶ - bit13-Ҽ0-ʶ1-ʶ - bit14-ΣƷ: 0-ʶ1-ʶ - bit15-촰վ˼: 0-ʶ1-ʶ + 车辆图片二次识别操作 + bit0-车牌识别:0-不启用识别,1-启用识别; + bit1-车辆类型识别:0-不启用识别,1-启用识别; + bit2-车身颜色识别:0-不启用识别,1-启用识别; + bit3-车辆品牌识别:0-不启用识别,1-启用识别; + bit4-遮挡板识别(主驾驶):0-不启用识别,1-启用识别; + bit5-安全带识别(主驾驶):0-不启用识别,1-启用识别; + bit6-遮挡板识别(副驾驶):0-不启用识别,1-启用识别; + bit7-安全带识别(副驾驶):0-不启用识别,1-启用识别; + bit8-车辆图片叠加使能:0-不启用识别,1-启用识别; + bit9-上传车辆图片使能(通过SDK):0-不启用识别,1-启用识别; + bit10-上传车辆图片使能(通过URL):0-不启用识别,1-启用识别; + bit11-黄标车:0-不启用识别,1-启用识别; + bit12-打手机:0-不启用识别,1-启用识别; + bit13-挂件:0-不启用识别,1-启用识别; + bit14-危险品车: 0-不启用识别,1-启用识别; + bit15-车辆天窗站人检测: 0-不启用识别,1-启用识别; */ DWORD dwRecogOperate; /* - ͼƬϴ - bit0-ͼƬ0-ϴ1-ϴ - bit1-ͼƬ0-ϴ1-ϴ - bit2-ͼ(ʻ)0-ϴ1-ϴ - bit3-ͼ(ʻ)0-ϴ1-ϴ - bit4-ȫͼ(ʻ)0-ϴ1-ϴ - bit5-ȫͼ(ʻ)0-ϴ1-ϴ + 车辆图片数据上传 + bit0-车牌图片:0-不上传,1-上传; + bit1-车辆图片:0-不上传,1-上传; + bit2-人脸子图(主驾驶):0-不上传,1-上传; + bit3-人脸子图(副驾驶):0-不上传,1-上传; + bit4-安全带子图(主驾驶):0-不上传,1-上传; + bit5-安全带子图(副驾驶):0-不上传,1-上传; */ DWORD dwDataUploadType; - DWORD dwPostID;//ID - NET_DVR_TIME_V30 struPostTime;//ʱ - DWORD dwJsonLen; //Json͸ݳ - BYTE *pJsonBuffer;//Jsonָ,ο4.2.4Jsonݸʽ + DWORD dwPostID;//卡口ID。 + NET_DVR_TIME_V30 struPostTime;//过车时间 + DWORD dwJsonLen; //Json透传数据长度 + BYTE *pJsonBuffer;//Json数据指针,参考4.2.4Json数据格式 BYTE byRes[107]; - BYTE byPicDataType;//ͼƬͣ0-ͼƬݣ1-URL - //ͼƬ - //byPicDataType == 0ʱ򣬸ֶڵЧͼƬڽṹ - //byPicDataType == 1ʱָͼƬURLϢ + BYTE byPicDataType;//图片数据类型,0-图片数据,1-URL + //图片数据 + //当byPicDataType == 0的时候,该字段内的数据无效,图片数据在结构体后面 + //当byPicDataType == 1的时候,是指定的图片的URL信息 char sPicDataPath[256]; }NET_DVR_VEHICLE_RECOG_CFG, *LPNET_DVR_VEHICLE_RECOG_CFG; typedef struct tagNET_DVR_VEHICLERECOG_TASK_RESULT { DWORD dwSize; - //豸ˮ,ÿύ豸Ψһˮŷظϲ㡣 + //设备数据流水号,每次提交任务,设备会自行生成唯一的流水号返回给上层。 char sDevDataIndex[MAX_DEV_DATAINDEX_LEN/*64*/]; BYTE byRes[256]; }NET_DVR_VEHICLERECOG_TASK_RESULT, *LPNET_DVR_VEHICLERECOG_TASK_RESULT; -//ṹ +//条件结构 typedef struct tagNET_DVR_VEHICLE_RECOG_TASK_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - char sDataIndex[DATA_INDEX_LEN];//ˮ ȫ0ʱʾȡȫ - WORD wTaskNo;// ֵΪ0ʱʾȫ + DWORD dwChannel; //通道号 + char sDataIndex[DATA_INDEX_LEN];//数据流水号 全0的时候表示获取全部 + WORD wTaskNo;//任务处理号 值为0的时候表示全部任务 /* - ״̬ - bit0-״̬0-ѯ1-ѯ - bit1-ִе0-ѯ1-ѯ - bit2-ȴе0-ѯ1-ѯ + 任务状态 + bit0-完成状态的任务:0-不查询,1-查询; + bit1-执行中的任务:0-不查询,1-查询; + bit2-等待中的任务:0-不查询,1-查询; */ BYTE byTask; BYTE byRes1; - //豸ˮŲѯ,ÿύ豸Ψһˮš + //设备数据流水号查询,每次提交任务,设备会自行生成唯一的流水号。 char sDevDataIndex[MAX_DEV_DATAINDEX_LEN/*64*/]; BYTE byRes[60]; }NET_DVR_VEHICLE_RECOG_TASK_COND, *LPNET_DVR_VEHICLE_RECOG_TASK_COND; -//ṹ +//参数结构 typedef struct tagNET_DVR_VEHICLE_RECOG_TASK_INFO { DWORD dwSize; - DWORD dwChannel; //ͨ - char sDataIndex[DATA_INDEX_LEN];//ˮ - WORD wTaskNo;// - WORD wTaskProgress;//ִнȣʵʽ*1000 - BYTE byTaskState;//״̬0-ȴУ1-ִУ2- + DWORD dwChannel; //通道号 + char sDataIndex[DATA_INDEX_LEN];//数据流水号 + WORD wTaskNo;//任务处理号 + WORD wTaskProgress;//任务执行进度(实际进度*1000) + BYTE byTaskState;//任务状态,0-等待中,1-执行中,2-完成 BYTE byRes1[3]; /* - ͼƬʶ - bit0-ʶ0-ʶ1-ʶ - bit1-ʶ0-ʶ1-ʶ - bit2-ɫʶ0-ʶ1-ʶ - bit3-Ʒʶ0-ʶ1-ʶ - bit4-ڵʶ(ʻ)0-ʶ1-ʶ - bit5-ȫʶ(ʻ)0-ʶ1-ʶ - bit6-ڵʶ(ʻ)0-ʶ1-ʶ - bit7-ȫʶ(ʻ)0-ʶ1-ʶ - bit8-ͼƬʹܣ0-ʶ1-ʶ - bit9-ϴͼƬʹ(ͨSDK)0-ʶ1-ʶ - bit10-ϴͼƬʹ(ͨURL)0-ʶ1-ʶ - bit11-Ʊ공0-ʶ1-ʶ - bit12-ֻ0-ʶ1-ʶ - bit13-Ҽ0-ʶ1-ʶ - bit14-ΣƷ: 0-ʶ1-ʶ - bit15-촰վ˼: 0-ʶ1-ʶ + 车辆图片二次识别操作 + bit0-车牌识别:0-不启用识别,1-启用识别; + bit1-车辆类型识别:0-不启用识别,1-启用识别; + bit2-车身颜色识别:0-不启用识别,1-启用识别; + bit3-车辆品牌识别:0-不启用识别,1-启用识别; + bit4-遮挡板识别(主驾驶):0-不启用识别,1-启用识别; + bit5-安全带识别(主驾驶):0-不启用识别,1-启用识别; + bit6-遮挡板识别(副驾驶):0-不启用识别,1-启用识别; + bit7-安全带识别(副驾驶):0-不启用识别,1-启用识别; + bit8-车辆图片叠加使能:0-不启用识别,1-启用识别; + bit9-上传车辆图片使能(通过SDK):0-不启用识别,1-启用识别; + bit10-上传车辆图片使能(通过URL):0-不启用识别,1-启用识别; + bit11-黄标车:0-不启用识别,1-启用识别; + bit12-打手机:0-不启用识别,1-启用识别; + bit13-挂件:0-不启用识别,1-启用识别; + bit14-危险品车: 0-不启用识别,1-启用识别; + bit15-车辆天窗站人检测: 0-不启用识别,1-启用识别; */ DWORD dwRecogOperate; - DWORD dwPostID;//ID - NET_DVR_TIME_V30 struPostTime;//ʱ - DWORD dwJsonLen; //Json͸ݳȣԤJSONݲʵ֣ - BYTE *pJsonBuffer;//Jsonָ, ԤJSONݲʵ֣ + DWORD dwPostID;//卡口ID。 + NET_DVR_TIME_V30 struPostTime;//过车时间 + DWORD dwJsonLen; //Json透传数据长度(预留,JSON内容暂不实现) + BYTE *pJsonBuffer;//Json数据指针, (预留,JSON内容暂不实现) BYTE byRes[104]; }NET_DVR_VEHICLE_RECOG_TASK_INFO, *LPNET_DVR_VEHICLE_RECOG_TASK_INFO; typedef struct tagNET_DVR_VEHICLE_RECOG_RESULT { - DWORD dwSize; //ṹ - //ˮ ͣύNET_DVR_VEHICLE_RECOG_CFGеֶsDataIndexӦ + DWORD dwSize; //结构 + //数据流水号 和(任务提交NET_DVR_VEHICLE_RECOG_CFG中的字段sDataIndex对应) char sDataIndex[DATA_INDEX_LEN]; - // (ύNET_DVR_VEHICLE_RECOG_CFGеֶwTaskNoӦ) + //任务处理号 和 (任务提交NET_DVR_VEHICLE_RECOG_CFG中的字段wTaskNo对应) WORD wTaskNo; BYTE byRes[2]; - NET_VCA_RECT struPlateRect;//λ - char sLicense[MAX_LICENSE_LEN/*16*/];//ƺ - BYTE byVehicleType; //ͣοVTR_RESULT - BYTE byColorDepth; //ɫdzο 0-ɫ1-dzɫ - BYTE byColor; //ɫ, οVCR_CLR_CLASS - BYTE byVehicleLogoRecog; //Ʒ - BYTE byVehicleSubLogoRecog; //Ʒ - BYTE byPilotSafebelt;//0-ʾδ֪,1-ϵȫ,2-ϵȫ - BYTE byCopilotSafebelt;//0-ʾδ֪,1-ϵȫ,2-ϵȫ - BYTE byPilotSunVisor;//0-ʾδ֪,1-,2- - BYTE byCopilotSunVisor;//0-ʾδ֪, 1-,2- - BYTE byVehicleModel;// οĵ Ʒ - WORD wVehicleLogoRecog; //Ʒƣο"Ʒ.xlsx" + NET_VCA_RECT struPlateRect;//车牌位置 + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + BYTE byVehicleType; //车辆类型,参考VTR_RESULT + BYTE byColorDepth; //车身颜色深浅,参考 0-深色,1-浅色 + BYTE byColor; //车身颜色, 参考VCR_CLR_CLASS + BYTE byVehicleLogoRecog; //车辆主品牌 + BYTE byVehicleSubLogoRecog; //车辆子品牌 + BYTE byPilotSafebelt;//0-表示未知,1-不系安全带,2-系安全带 + BYTE byCopilotSafebelt;//0-表示未知,1-不系安全带,2-系安全带 + BYTE byPilotSunVisor;//0-表示未知,1-不打开遮阳板,2-打开遮阳板 + BYTE byCopilotSunVisor;//0-表示未知, 1-不打开遮阳板,2-打开遮阳板 + BYTE byVehicleModel;// 参考文档 车辆子品牌年款 + WORD wVehicleLogoRecog; //车辆主品牌,参考"车辆主品牌.xlsx" BYTE byRes1[251]; - // 0-ֱϴ; 1-ƴ洢URLԭȵͼƬݱURLݣͼƬȱURL + // 0-数据直接上传; 1-云存储服务器URL原先的图片数据变成URL数据,图片长度变成URL长度 BYTE byDataType; /* - ϴͼƬϢ: - bit0-ͼ0-ϴ1-ϴ - bit1-ͼ0-ϴ1-ϴ - bit2-ͼ(ʻ)0-ϴ1-ϴ - bit3-ͼ(ʻ)0-ϴ1-ϴ - bit4-ȫʶ(ʻ)0-ϴ1-ϴ - bit5-ȫʶ(ʻ)0-ϴ1-ϴ + 上传图片类型信息: + bit0-车辆图:0-不上传,1-上传; + bit1-车牌图:0-不上传,1-上传; + bit2-人脸子图(主驾驶):0-不上传,1-上传; + bit3-人脸子图(副驾驶):0-不上传,1-上传; + bit4-安全带识别(主驾驶):0-不上传,1-上传; + bit5-安全带识别(副驾驶):0-不上传,1-上传; */ - DWORD dwPicType; //0:ͼƬϢ;: ͼ;:ͼ; - BYTE *pVehicleBuffer; //ͼƬָ - DWORD dwVehicleBufferLen ;// ͼƬݳ - BYTE *pPlateBuffer; //ͼƬָ - DWORD dwPlateBufferLen ;// ͼƬݳ - BYTE *pPilotFaceBuffer; //ͼ(ʻ)ͼƬָ - DWORD dwPilotFaceBufferLen ;// ͼ(ʻ)ͼƬݳ - BYTE *pCopilotFaceBuffer; //ͼ(ʻ)ͼƬָ - DWORD dwCopilotFaceBufferLen ;// ͼ(ʻ)ͼƬݳ - BYTE *pPilotSafebeltBuffer; //ȫʶ(ʻ)ͼƬָ - DWORD dwPilotSafebeltBufferLen ;// ȫʶ(ʻ)ͼƬݳ - BYTE *pCopilotSafebeltBuffer;// ȫʶ(ʻ)ͼƬָ - DWORD dwCopilotSafebeltBufferLen ;// ȫʶ(ʻ)ͼƬݳ - NET_VCA_RECT struVehicleRect ;// - NET_VCA_RECT struPilotRect ;//ʻ - NET_VCA_RECT struCopilotRect ;//ʻ - BYTE *pJsonBuffer;//Jsonָ,οJSONݸʽ - DWORD dwJsonBufferLen;// Jsonݳ - DWORD dwPostID;//ID - NET_DVR_TIME_V30 struPostTime;//ʱ + DWORD dwPicType; //0:无图片信息;: 车辆图;:车牌图; + BYTE *pVehicleBuffer; //车辆图片数据指针 + DWORD dwVehicleBufferLen ;// 车辆图片数据长度 + BYTE *pPlateBuffer; //车牌图片数据指针 + DWORD dwPlateBufferLen ;// 车牌图片数据长度 + BYTE *pPilotFaceBuffer; //人脸子图(主驾驶)图片数据指针 + DWORD dwPilotFaceBufferLen ;// 人脸子图(主驾驶)图片数据长度 + BYTE *pCopilotFaceBuffer; //人脸子图(副驾驶)图片数据指针 + DWORD dwCopilotFaceBufferLen ;// 人脸子图(副驾驶)图片数据长度 + BYTE *pPilotSafebeltBuffer; //安全带识别(主驾驶)图片数据指针 + DWORD dwPilotSafebeltBufferLen ;// 安全带识别(主驾驶)图片数据长度 + BYTE *pCopilotSafebeltBuffer;// 安全带识别(副驾驶)图片数据指针 + DWORD dwCopilotSafebeltBufferLen ;// 安全带识别(副驾驶)图片数据长度 + NET_VCA_RECT struVehicleRect ;//车身矩形坐标 + NET_VCA_RECT struPilotRect ;//主驾驶矩形坐标 + NET_VCA_RECT struCopilotRect ;//副驾驶矩形坐标 + BYTE *pJsonBuffer;//Json数据指针,参考JSON数据格式 + DWORD dwJsonBufferLen;// Json数据长度 + DWORD dwPostID;//卡口ID + NET_DVR_TIME_V30 struPostTime;//过车时间 BYTE Res2[56]; }NET_DVR_VEHICLE_RECOG_RESULT, *LPNET_DVR_VEHICLE_RECOG_RESULT; -#define MAX_ZONE_LINKAGE_CHAN_NUM 4 /* ͨ*/ +#define MAX_ZONE_LINKAGE_CHAN_NUM 4 /* 防区关联最大通道数*/ typedef struct tagNET_DVR_CENTER_SERVER_CFG_ { DWORD dwSize; - BYTE byAddressType; //0 - ipv4/ipv6ַ1 - + BYTE byAddressType; //0 - ipv4/ipv6地址,1 - 域名 BYTE byRes1; - WORD wServerPort; //˿ + WORD wServerPort; //服务器端口 union { struct { BYTE szDomain[MAX_DOMAIN_NAME]; BYTE byRes2[80]; - }struDomain; // + }struDomain; //服务器域名 struct { NET_DVR_IPADDR struIp; - }struAddrIP; //IPַ - }unionServer;//ʹṹͨbyAddressTypeֶαʾIPַ - WORD wInterval; //ʱ,0-30s + }struAddrIP; //IP地址 + }unionServer;//使用联合体结构,通过byAddressType字段表示是IP地址还是域名 + WORD wInterval; //报警间隔时间,0-30s BYTE byRes3[514]; }NET_DVR_CENTER_SERVER_CFG,*LPNET_DVR_CENTER_SERVER_CFG; typedef struct tagNET_DVR_SINGLE_CHANNEL_LINKAGE_CFG_ { - BYTE byDDNSType; //ͣ0 - Ч1 - IPServer(˽DNS)2 - hiDDNS + BYTE byDDNSType; //域名服务器类型:0 - 无效,1 - IPServer(私有DNS),2 - hiDDNS BYTE byRes1; - WORD wDDNSPort; //˿ں - BYTE byServerAddr[MAX_DOMAIN_NAME]; //ַ - BYTE byDevName[MAX_DOMAIN_NAME]; //豸 - BYTE byDevSerialNum[SERIALNO_LEN]; //豸к - BYTE byAddressType; //0 - ipv4/ipv6ַ1 - + WORD wDDNSPort; //域名服务器端口号 + BYTE byServerAddr[MAX_DOMAIN_NAME]; //域名服务器地址 + BYTE byDevName[MAX_DOMAIN_NAME]; //设备名称 + BYTE byDevSerialNum[SERIALNO_LEN]; //设备序列号 + BYTE byAddressType; //0 - ipv4/ipv6地址,1 - 域名 BYTE byRes2; - WORD wDevPort; //豸˿ں + WORD wDevPort; //设备端口号 union { struct { BYTE szDomain[MAX_DOMAIN_NAME]; BYTE byRes2[80]; - }struDomain; // + }struDomain; //域名 struct { NET_DVR_IPADDR struIp; - }struAddrIP; //IPַ - }unionDevAddr;//ʹṹͨbyAddressTypeֶαʾIPַ - BYTE sUserName[NAME_LEN/*32*/]; //û - BYTE sPassword[PASSWD_LEN/*16*/];// - DWORD dwChannel; //ͨ + }struAddrIP; //IP地址 + }unionDevAddr;//使用联合体结构,通过byAddressType字段表示是IP地址还是域名 + BYTE sUserName[NAME_LEN/*32*/]; //用户名 + BYTE sPassword[PASSWD_LEN/*16*/];//密码 + DWORD dwChannel; //联动通道号 BYTE byRes3[32]; }NET_DVR_SINGLE_CHANNEL_LINKAGE_CFG,*LPNET_DVR_SINGLE_CHANNEL_LINKAGE_CFG; typedef struct tagNET_DVR_REGION_CHANNEL_LINKAGE_CFG_ { DWORD dwSize; - NET_DVR_SINGLE_CHANNEL_LINKAGE_CFG struLinkChannels[MAX_ZONE_LINKAGE_CHAN_NUM]; // ÿԹĸƵͨ + NET_DVR_SINGLE_CHANNEL_LINKAGE_CFG struLinkChannels[MAX_ZONE_LINKAGE_CHAN_NUM]; // 每个防区可以关联四个视频通道 BYTE byRes[64]; }NET_DVR_ZONE_CHANNEL_LINKAGE_CFG,*LPNET_DVR_ZONE_CHANNEL_LINKAGE_CFG; typedef struct tagNET_DVR_SINGLE_ASSOCIATED_CHAN_CFG { - BYTE byDevSerialNo[SERIALNO_LEN]; //豸к - DWORD dwChannel; //ͨ + BYTE byDevSerialNo[SERIALNO_LEN]; //设备序列号 + DWORD dwChannel; //联动通道号 BYTE byRes[64]; }NET_DVR_SINGLE_ASSOCIATED_CHAN_CFG, *LPNET_DVR_SINGLE_ASSOCIATED_CHAN_CFG; @@ -44288,356 +44288,356 @@ typedef struct tagNET_DVR_ALARMIN_ASSOCIATED_CHAN_CFG_LIST_ typedef struct tagNET_DVR_LCD_ALARM { DWORD dwSize; - DWORD dwScreenID; //Ļ - BYTE byOnOffLine; //ĻǷߣ0-ߣ1-ߣĻʱṹЧ - BYTE byTempState; //忨¶״̬0-1-쳣 - BYTE byFanState; //״̬0-أ1- - BYTE byFanException; //쳣״̬0-֧ 1-2-쳣 - BYTE byTemperature; //Ļ忨¶ȣλ϶ + DWORD dwScreenID; //屏幕索引号 + BYTE byOnOffLine; //屏幕是否在线,0-离线,1-在线,当屏幕离线时,本结构后续参数无效 + BYTE byTempState; //板卡温度状态,0-正常,1-异常 + BYTE byFanState; //风扇状态,0-关,1-开 + BYTE byFanException; //风扇异常状态,0-不支持 1-正常,2-异常 + BYTE byTemperature; //屏幕板卡温度,单位:摄氏度 BYTE byRes[27]; }NET_DVR_LCD_ALARM, *LPNET_DVR_LCD_ALARM; -//ϴϢ +//传感器上传信息 typedef struct tagNET_DVR_SENSOR_INFO_UPLOAD { DWORD dwSize; NET_DVR_TIME_V30 struTime; - char szSensorName[MAX_SENSORNAME_LEN]; // - char szSensorChan[MAX_SENSORCHAN_LEN]; //ͨ - BYTE byReboot; //֮ǰǷһĺĵһݴ־0-ʾû1-й - BYTE byPowerSupply;//Ƿ 0-ڹ磬1-ڹ - BYTE byStatusType;//豸״̬:0:1쳣2 - BYTE bySensorType;//οöSENSOR_TYPE - float fVoltageValue;//ѹֵ ȷ0.001 - float fCurrentValue;//ֵȷ0.001 - float fActualValue;//ģźתֵȷ0.001 - char szDescription[MAX_DESCRIPTION_LEN /* 32*/]; //Ϣ;豸״̬byStatusTypeΪ0ʱЧ + char szSensorName[MAX_SENSORNAME_LEN]; //传感器名称 + char szSensorChan[MAX_SENSORCHAN_LEN]; //传感器通道 + BYTE byReboot; //之前是否重启过(一般是重启的后的第一条数据带有这个标志)0-表示没有重启,1-有过重启 + BYTE byPowerSupply;//是否正常供电 0-不在供电,1-正在供电 + BYTE byStatusType;//设备状态:0:正常、1:异常、2、报警 + BYTE bySensorType;//参考传感器枚举类型SENSOR_TYPE + float fVoltageValue;//电压值; 精确到0.001 + float fCurrentValue;//电流值;精确到0.001 + float fActualValue;//模拟信号转换后的数值;精确到0.001 + char szDescription[MAX_DESCRIPTION_LEN /* 32*/]; //描述信息;当设备状态(byStatusType)为非0时生效。 BYTE byRes1[128]; }NET_DVR_SENSOR_INFO_UPLOAD,*LPNET_DVR_SENSOR_INFO_UPLOAD; -//ץͼƬϴ +//抓拍图片上传 typedef struct tagNET_DVR_CAPTURE_UPLOAD { DWORD dwSize; NET_DVR_TIME_V30 struTime; - DWORD dwChannel;//ͨ + DWORD dwChannel;//通道号 char szDevName[MAX_DEVNAME_LEN_EX]; - DWORD dwPicLen;//ͼƬ - BYTE *pBuffer; //ͼƬָ + DWORD dwPicLen;//图片长度 + BYTE *pBuffer; //图片数据指针 BYTE byRes[124]; }NET_DVR_CAPTURE_UPLOAD,*LPNET_DVR_CAPTURE_UPLOAD; -//ȫλϴ +//全景联动到位上传 typedef struct tagNET_DVR_PANORAMIC_LINKAGE { DWORD dwSize; - DWORD dwChannel;//ͨ - BYTE byType;//ͼƬͣ0-壬1-ȫλͼƬ + DWORD dwChannel;//通道号 + BYTE byType;//图片类型,0-无意义,1-全景联动到位图片 BYTE byRes1[3]; - BYTE byMACAddr[MACADDR_LEN]; //macַ + BYTE byMACAddr[MACADDR_LEN]; //mac地址 BYTE byRes2[2]; - NET_DVR_IPADDR struDevIP; //豸IPַ - DWORD dwPicLen;//ȫλץͼƬ - char *pPicBuff; //ȫλץͼƬָ + NET_DVR_IPADDR struDevIP; //设备IP地址 + DWORD dwPicLen;//全景联动到位抓拍图片长度 + char *pPicBuff; //全景联动到位抓拍图片指针 BYTE byRes[128]; }NET_DVR_PANORAMIC_LINKAGE, *LPNET_DVR_PANORAMIC_LINKAGE; -#define MAX_MASK_AREA_NUM 8 // +#define MAX_MASK_AREA_NUM 8 //马赛克区域个数 -typedef struct tagNET_DVR_AREA_MASK_CFG // +typedef struct tagNET_DVR_AREA_MASK_CFG //区域马赛克 { - DWORD dwSize; //ṹС - BYTE byEnable;//Ƿ 0-1- - BYTE byMaskThick; //˺ 0-룬1-룬2-룬СΪ8*816*1632*32ĬΪ - BYTE byAutoMask;//ǷԶ 0-1- + DWORD dwSize; //结构体大小 + BYTE byEnable;//是否启用马赛克 0-否,1-是 + BYTE byMaskThick; //马赛克厚度 0-薄码,1-中码,2-厚码,薄码的区块大小为8*8,中码16*16,厚码32*32。默认为中码 + BYTE byAutoMask;//是否启用自动马赛克 0-否,1-是 BYTE byRes1; - NET_VCA_RECT struRegion[MAX_MASK_AREA_NUM];//Χ + NET_VCA_RECT struRegion[MAX_MASK_AREA_NUM];//马赛克区域范围 BYTE byRes[64]; }NET_DVR_AREA_MASK_CFG, *LPNET_DVR_AREA_MASK_CFG; -typedef struct tagNET_DVR_AUDIO_DIACRITICAL_CFG //Ƶ +typedef struct tagNET_DVR_AUDIO_DIACRITICAL_CFG //音频变音 { - DWORD dwSize; //ṹС - BYTE byEnable; //Ƿñ 0-ã1- - char byBassValue; //ߵֵΧΪ-12-12 ֵԽԽϸ֮ԽС0-ʾ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用变音 0-不启用,1-启用 + char byBassValue; //高低音值,范围为-12-12 值越大声音越细,反之越小,0-表示不变音 BYTE byRes[62]; }NET_DVR_AUDIO_DIACRITICAL_CFG, *LPNET_DVR_AUDIO_DIACRITICAL_CFG; typedef struct tagNET_DVR_RESOLUTION_SWITCH { DWORD dwSize; - BYTE byResolutionType;//0-all,1-20:9,2-20:6,3-ԭʼģʽ + BYTE byResolutionType;//0-all,1-20:9,2-20:6,3-原始码流模式 BYTE byRes[127]; }NET_DVR_RESOLUTION_SWITCH, *LPNET_DVR_RESOLUTION_SWITCH; -typedef struct tagNET_DVR_WIFI_DHCP_ADDR_CFG //wifiģʽDHCPΧ +typedef struct tagNET_DVR_WIFI_DHCP_ADDR_CFG //wifi模式下DHCP范围配置 { DWORD dwSize; - NET_DVR_IPADDR struStartAddr; //ʼIPַ - NET_DVR_IPADDR struEndAddr; //IPַ + NET_DVR_IPADDR struStartAddr; //开始IP地址 + NET_DVR_IPADDR struEndAddr; //结束IP地址 BYTE byRes[256]; }NET_DVR_WIFI_DHCP_ADDR_CFG, *LPNET_DVR_WIFI_DHCP_ADDR_CFG; -typedef struct tagNET_DVR_WIFI_CLIENT_INFO //Ƶ +typedef struct tagNET_DVR_WIFI_CLIENT_INFO //音频变音 { DWORD dwSize; - NET_DVR_IPADDR struAddress; //IPַ + NET_DVR_IPADDR struAddress; //IP地址 BYTE byMACAddr [MACADDR_LEN]; - WORD wConnSpeed; //ٶ λKB - BYTE byRSSIValue; //յźǿȣȡֵΪֵʱֵΧΪ0~-110dbm,ֵԽ󣬴źԽǿ - BYTE byRes1; // - WORD wBandwidth; // λKB + WORD wConnSpeed; //连接速度 单位KB + BYTE byRSSIValue; //接收到的信号强度,取值为负值,传输时不带赋值,范围为0~-110dbm,值越大,代表信号越强 + BYTE byRes1; //保留 + WORD wBandwidth; //网络带宽 单位KB BYTE byRes[32]; }NET_DVR_WIFI_CLIENT_INFO, *LPNET_DVR_WIFI_CLIENT_INFO; -typedef struct tagNET_DVR_MULTISTREAM_RELATION_CHAN_CFG //ͨ +typedef struct tagNET_DVR_MULTISTREAM_RELATION_CHAN_CFG //多码流关联通道 { - DWORD dwSize; //ṹС - DWORD dwChannel; //ıͨ + DWORD dwSize; //结构体大小 + DWORD dwChannel; //关联的编码通道号 BYTE byRes[64]; }NET_DVR_MULTISTREAM_RELATION_CHAN_CFG, *LPNET_DVR_MULTISTREAM_RELATION_CHAN_CFG; typedef struct { - BYTE byPort; //˿ - BYTE byMasterSlaveProperty; //˿ 1- 2- - BYTE byPortEthernetType; //˿ͣ1-׶˿ڣ2-ǧ׶˿ + BYTE byPort; //端口 + BYTE byMasterSlaveProperty; //端口主从属性 1-主 2-从 + BYTE byPortEthernetType; //端口类型,1-百兆端口,2-千兆端口 BYTE byRes[9]; }NET_DVR_RING_PORT_PROPERTY, *LPNET_DVR_RING_PORT_PROPERTY; typedef struct { DWORD dwSize; - BYTE byEnable; //Ƿã 0-ã !0- - BYTE byProtoType; //Эͣ 1-˻Э(˽)2-ۺƽ̨Э飨˽У3-G8032Э飨У - BYTE byBandWidth; //ͣ1-ף2-ǧ - BYTE byRes1; //ֶ - NET_DVR_RING_PORT_PROPERTY struRingPort[PER_RING_PORT_NUM]; //˿ - BYTE byRes2[60]; //ֶ + BYTE byEnable; //是否启用, 0-不启用, !0-启用 + BYTE byProtoType; //协议类型, 1-光端机组网协议(私有),2-综合平台组网协议(私有),3-G8032协议(公有) + BYTE byBandWidth; //环网带宽类型,1-百兆,2-千兆 + BYTE byRes1; //保留字段 + NET_DVR_RING_PORT_PROPERTY struRingPort[PER_RING_PORT_NUM]; //环网端口 + BYTE byRes2[60]; //保留字段 }NET_DVR_NS_RING_CFG, *LPNET_DVR_NS_RING_CFG; typedef struct // { - DWORD dwSize; //ṹС - BYTE byStatus; //״̬1- 2-Ͽ - BYTE byMasterSlaveProperty ; //˰ 1- 2- - BYTE byRes[62]; //ֶ + DWORD dwSize; //结构体大小 + BYTE byStatus; //环网状态,1-正常 2-断开 + BYTE byMasterSlaveProperty ; //光纤板主从属性 1-主 2-从 + BYTE byRes[62]; //保留字段 } NET_DVR_NS_RING_STATUS, *LPNET_DVR_NS_RING_STATUS; -//ⱨ +//火点检测报警 typedef struct tagNET_DVR_FIREDETECTION_ALARM { - DWORD dwSize; //ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 WORD wPanPos; WORD wTiltPos; WORD wZoomPos; - BYTE byPicTransType; //ͼƬݴ䷽ʽ: 0-ƣ1-url + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url BYTE byRes1; - DWORD dwPicDataLen;//ץͼƬ - BYTE *pBuffer; //ָ - NET_VCA_RECT struRect;// - NET_VCA_POINT struPoint ;//¶ȵ - WORD wFireMaxTemperature ;//¶[300~4000] - WORD wTargetDistance ;//Ŀ[100m ~ 10000m] - BYTE byStrategyType;//ͣ0~ⱨ1~Эͬ2~ϵͳ3~ָ㱨4~ָ - BYTE byAlarmSubType;//͡0~ⱨ1~ⱨ2~̻𱨾 - /*ǷPTZչ - 0~ãPTZֵwPanPoswTiltPoswZoomPosΪ׼ - 1~ãPTZֵstruPtzPosExΪ׼PTZ践ءstruPtzPosExֵתΪwPanPoswTiltPoswZoomPosֵ + DWORD dwPicDataLen;//报警抓拍图片长度 + BYTE *pBuffer; //数据指针 + NET_VCA_RECT struRect;//火点框 + NET_VCA_POINT struPoint ;//火点框内最高温度点坐标 + WORD wFireMaxTemperature ;//火点最高温度[300℃~4000℃] + WORD wTargetDistance ;//目标距离[100m ~ 10000m] + BYTE byStrategyType;//策略类型;0~任意报警,1~协同报警,2~多系统报警,3~指定火点报警,4~指定烟雾报警 + BYTE byAlarmSubType;//报警子类型。0~火点检测报警,1~烟雾检测报警,2~烟火报警 + /*是否启用PTZ坐标扩展, + 0~不启用,PTZ坐标值以wPanPos、wTiltPos、wZoomPos为准。 + 1~启用,PTZ坐标值以struPtzPosEx为准。但是新老PTZ都需返回。struPtzPosEx的值需转化为wPanPos、wTiltPos、wZoomPos值。 */ BYTE byPTZPosExEnable; BYTE byRes2; - NET_PTZ_INFO struPtzPosEx;// ptzչ(ָ֧߾PTZֵȷСλ) - DWORD dwVisiblePicLen;//ɼͼƬ - BYTE *pVisiblePicBuf; //ɼͼƬָ - // pSmokeBufbyAlarmSubTypeΪ1ⱨ2̻𱨾ʱЧ - BYTE *pSmokeBuf; //ⱨָ룬ָһNET_DVR_SMOKEDETECTION_ALARMṹ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx + NET_PTZ_INFO struPtzPosEx;// ptz坐标扩展(支持高精度PTZ值,精确到小数点后三位) + DWORD dwVisiblePicLen;//可见光图片长度 + BYTE *pVisiblePicBuf; //可见光图片数据指针 + // pSmokeBuf参数当byAlarmSubType报警子类型为1(烟雾检测报警)、2(烟火报警)时生效。 + BYTE *pSmokeBuf; //烟雾检测报警数据指针,指向一个NET_DVR_SMOKEDETECTION_ALARM结构体 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 BYTE byRes3; - BYTE byFireScanWaitMode; //ɨȴģʽ 0-Զ 1-ֶ - DWORD dwVisibleChannel; //ɼͨͨ - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,byTimeDiffFlagΪ1ʱЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾbyTimeDiffFlagΪ1ʱЧ*/ + BYTE byFireScanWaitMode; //火点扫描等待模式 0-自动 1-手动 + DWORD dwVisibleChannel; //可见光通道通道号 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ BYTE byRes[49]; } NET_DVR_FIREDETECTION_ALARM,*LPNET_DVR_FIREDETECTION_ALARM; -// +//火点检测配置 typedef struct tagNET_DVR_SMOKEDETECTION_CFG { - BYTE byEnable;//ʹ - BYTE bySensitivity; //: 1~100Ĭ50 - BYTE byPatrolSensitivity; //Ѳ: 1~100Ĭ50 - BYTE byDoubleCheckSensitivity; //ι: 1~100Ĭ50 + BYTE byEnable;//使能 + BYTE bySensitivity; //检测灵敏度: 1~100默认50 + BYTE byPatrolSensitivity; //巡航检测灵敏度: 1~100默认50 + BYTE byDoubleCheckSensitivity; //二次过滤灵敏度: 1~100默认50 BYTE byRes[56]; }NET_DVR_SMOKEDETECTION_CFG, *LPNET_DVR_SMOKEDETECTION_CFG; typedef struct tagNET_DVR_ALARMSTRATEGY_PARAM { - BYTE byStrategyType;//ͣ0~ⱨ1~Эͬ2~ϵͳ, 3~ָ㱨4~ָ + BYTE byStrategyType;//策略类型;0~任意报警,1~协同报警,2~多系统报警, 3~指定火点报警,4~指定烟雾报警 BYTE byRes[15]; }NET_DVR_ALARMSTRATEGY_PARAM, *LPNET_DVR_ALARMSTRATEGY_PARAM; typedef struct tagNET_DVR_FIREDETECTION_CFG { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- - BYTE bySensitivity; //: 1~100Ĭ5s - BYTE byFireComfirmTime;//ֻȴʱ: 0-120 Ĭ5s - BYTE byFireRegionOverlay;//ӻ: 0- 1- - BYTE byDetectionMode;// ģʽ0~б1~֡⡣ - BYTE byFireFocusMode;//۽ģʽ0~Զģʽ,1~ Ѳģʽ - BYTE byFireZoomMode;//ѧ䱶ģʽ0~ΪԶģʽ1~Ϊֶģʽ - BYTE byFirezoomLevel;//ѧ䱶ʣ1~100ѧ䱶ģʽΪֶģʽʱЧ - BYTE bySmokeFireEnabled; //̻ʹܣ0ã1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE bySensitivity; //检测灵敏度: 1~100默认5s + BYTE byFireComfirmTime;//发现火点等待时间: 0-120秒 默认5s + BYTE byFireRegionOverlay;//码流叠加火点框: 0- 否,1- 是 + BYTE byDetectionMode;// 火点检测模式:0~二次判别,1~单帧检测。 + BYTE byFireFocusMode;//火点聚焦模式:0~自动模式,1~ 巡航模式。 + BYTE byFireZoomMode;//火点光学变倍模式:0~为自动模式,1~为手动模式。 + BYTE byFirezoomLevel;//火点光学变倍倍率,1~100。当光学变倍模式为手动模式时生效 + BYTE bySmokeFireEnabled; //烟火检测总使能:0—不启用,1-启用 /* - ֶȴʹܣΪ1ʱ󣬻ȴʱbyFireComfirmTimeЧ - 󣬵豸ֻʱ̨һֱͣڷֻλãͨɨõȴģʽɨ衣 - ֶȴʹΪ0ʱ豸ΪԶȴģʽģʽ¿ɸbyFireComfirmTimeֶõĵȴʱлȴõȴʱ豸Զлɨ衣 + 火点手动等待使能,为1时代表开启。开启后,火点等待时间参数byFireComfirmTime无效。 + 开启后,当设备发现火点时,云台一直停留在发现火点位置,可通过继续火点扫描命令解除该等待模式,继续火点扫描。 + 当火点手动等待使能为0时,设备为自动等待模式,该模式下可根据byFireComfirmTime字段所配置的等待时间进行火点等待,超过该等待时间后设备自动进行火点扫描。 */ - BYTE byFireManualWaitEnabled;// ֶȴʹܣ0~ΪԶȴģʽ1~ֶȴģʽ - BYTE byCancelRepeatedAlarmEnabled;// ȡظʹ 0-ر 1- - BYTE byApplicationSceneMode;//Ӧóģʽ0-1-ɭַ, 2-ոȼ,3-Ƹߵ, 4-ڻܽ - DWORD dwInstallationHeight;// װ߶ - BYTE byFireSourceDetection;// ģʽ 0-̬ 1-ģʽ - BYTE bySmokeAuxiliaryDetectionEnabled;// жʹ,ģʽǶбʱЧ 0- 1- - BYTE byverificationSensitivity; //ȷȣΧ1~100sĬ50s - BYTE byFireAlgorithmMode; //㷨ģʽ0Ч1ģʽʶ-patternRecognition,:2ѧϰ-machineLearning - BYTE byAgriculturalMachineryFilterEnabled; //ũģʹܣ0ã1 - BYTE byWaterReflectionEnabled; //ˮⷴģʹ, 0ã1 - BYTE byPatrolSensitivity; //Ѳ Ի⣩, Χ1~100sĬ50s + BYTE byFireManualWaitEnabled;// 火点手动等待使能,0~为自动等待模式,1~手动等待模式 + BYTE byCancelRepeatedAlarmEnabled;// 取消重复报警使能 0-关闭 1-开启 + BYTE byApplicationSceneMode;//应用场景模式:0-保留,1-森林防火, 2-秸秆燃烧,3-城市制高点, 4-室内或周界 + DWORD dwInstallationHeight;// 安装高度 + BYTE byFireSourceDetection;// 火点搜索模式 0-动态火点 1-吸烟模式 + BYTE bySmokeAuxiliaryDetectionEnabled;// 烟雾辅助判断启用使能,检测模式是二次判别时生效 0-否 1-是 + BYTE byverificationSensitivity; //二次确认灵敏度,范围1~100s,默认50s + BYTE byFireAlgorithmMode; //火点算法模式,0:无效,1:模式识别-patternRecognition,:2:机器学习-machineLearning + BYTE byAgriculturalMachineryFilterEnabled; //农机过滤模块使能,0:不启用,1:启用 + BYTE byWaterReflectionEnabled; //水面阳光反射模块使能, 0:不启用,1:启用 + BYTE byPatrolSensitivity; //巡航检测灵敏度 (针对火点检测), 范围1~100s,默认50s BYTE byRes[33]; - NET_DVR_ALARMSTRATEGY_PARAM struAlarmStrategy;// - NET_DVR_SMOKEDETECTION_CFG struSmokeCfg;// + NET_DVR_ALARMSTRATEGY_PARAM struAlarmStrategy;//报警策略 + NET_DVR_SMOKEDETECTION_CFG struSmokeCfg;//烟雾检测配置 }NET_DVR_FIREDETECTION_CFG,*LPNET_DVR_FIREDETECTION_CFG; typedef struct tagNET_DVR_THERMALPOWER_PARAM { - DWORD dwSize;//ṹС - BYTE byPowerSwitch;//ʹܣ1Ϊ0Ϊر + DWORD dwSize;//结构体大小 + BYTE byPowerSwitch;//开关使能,1为开启,0为关闭 BYTE byRes[123]; }NET_DVR_THERMALPOWER_PARAM, *LPNET_DVR_THERMALPOWER_PARAM; typedef struct tagNET_DVR_PTZABSOLUTEEX_CFG { - DWORD dwSize;//ṹС - NET_PTZ_INFO struPTZCtrl;//豸PTZFϢ - DWORD dwFocalLen;//෶Χ0-100000MM - float fHorizontalSpeed;//ˮƽתٶȣ0.01-1000.00/S - float fVerticalSpeed;//ֱתٶȣ0.01-1000.00/S - /*ͷ䱶ͣabsoluteZoom:ͨ䱶ãѡΪʱstruPTZCtrlеfZoomЧfocalLen:ͨãѡΪʱdwFocalLenЧ*/ - BYTE byZoomType;// ͷ䱶0~ absoluteZoom1~ focalLen + DWORD dwSize;//结构体大小 + NET_PTZ_INFO struPTZCtrl;//设备PTZF信息 + DWORD dwFocalLen;//焦距范围:0-100000MM + float fHorizontalSpeed;//水平转动速度:0.01-1000.00度/S + float fVerticalSpeed;//垂直转动速度:0.01-1000.00度/S + /*镜头变倍配置类型;absoluteZoom:通过变倍参数进行配置,选择为该类型时struPTZCtrl中的fZoom参数生效。focalLen:通过焦距参数进行配置,选择为该类型时,dwFocalLen参数生效。*/ + BYTE byZoomType;// 镜头变倍配置类型0~ absoluteZoom,1~ focalLen BYTE byRes[123]; }NET_DVR_PTZABSOLUTEEX_CFG, *LPNET_DVR_PTZABSOLUTEEX_CFG; -#define MAX_PLAYLIST_NUM 50 //󲥷бĿ -#define MAX_PLAYPLAN_NUM 50 //󲥷żƻĿ +#define MAX_PLAYLIST_NUM 50 //最大播放列表数目 +#define MAX_PLAYPLAN_NUM 50 //最大播放计划数目 #define MAX_LEN_256 256 -#define MAX_GROUP_RECORD_NUM 10 //¼ +#define MAX_GROUP_RECORD_NUM 10 //最大记录个数 typedef struct tagNET_DVR_AREA_MONITOR_COND { DWORD dwSize; - DWORD dwAreaID; //ID - DWORD dwMonitorID; //ǰʼȡIJţ1ʼ - BYTE byIsNeedGroup; //ǷѯϢ + DWORD dwAreaID; //区域ID + DWORD dwMonitorID; //当前开始获取的布防点编号,从1开始 + BYTE byIsNeedGroup; //是否查询关联分组信息 BYTE byRes [127]; }NET_DVR_AREA_MONITOR_COND,*LPNET_DVR_AREA_MONITOR_COND; typedef struct tagNET_DVR_DEL_MONITOR_COND { DWORD dwSize; - BYTE byDelType; //ɾͣ0-ɾָв㣬1-ɾָָ - DWORD dwAreaID; //ID - DWORD dwMonitorID; //IDbyDelTypeΪ0ʱЧbyDelTypeΪ1ʱЧ1ʼ + BYTE byDelType; //删除类型,0-删除指定区域的所有布防点,1-删除指定区域的指定布防点 + DWORD dwAreaID; //区域ID + DWORD dwMonitorID; //布防点ID(当byDelType为0时无效,当byDelType为1时有效),从1开始 BYTE byRes[64]; }NET_DVR_DEL_MONITOR_COND,*LPNET_DVR_DEL_MONITOR_COND; typedef struct tagNET_DVR_BLOCKLIST_ALARM_COND { - DWORD dwSize; //ṹС - BYTE byType; //־- ȫ- - ֹ - BYTE byRes1[3]; // - DWORD dwFaceID; //ID - DWORD dwMaxSnapNum; //ץ0-ʾ + DWORD dwSize; //结构体大小 + BYTE byType; //名单标志:- 全部,- 允许名单,- 禁止名单 + BYTE byRes1[3]; //保留 + DWORD dwFaceID; //人脸名单ID + DWORD dwMaxSnapNum; //最大抓拍张数,0-表示不限制 BYTE byRes[256]; }NET_DVR_BLOCKLIST_ALARM_COND, *LPNET_DVR_BLOCKLIST_ALARM_COND; typedef struct tagNET_DVR_STORAGE_RESOURCE_COND { - DWORD dwSize; //ṹС - DWORD dwStorageID; //ӵǰſʼȡʣԴ1ʼ + DWORD dwSize; //结构体大小 + DWORD dwStorageID; //从当前编号开始获取剩余资源,从1开始 BYTE byRes[64]; }NET_DVR_STORAGE_RESOURCE_COND, *LPNET_DVR_STORAGE_RESOURCE_COND; typedef struct tagNET_DVR_BLOCKLIST_ALARM_RECORD { - DWORD dwSize; //ṹС - DWORD dwSnapFacePicID; //ץID - DWORD dwRegisterID; //עIDţֻ - DWORD dwGroupNo; // + DWORD dwSize; //结构体大小 + DWORD dwSnapFacePicID; //抓拍人脸ID + DWORD dwRegisterID; //名单注册ID号(只读) + DWORD dwGroupNo; //分组号 BYTE byRes[128]; }NET_DVR_BLOCKLIST_ALARM_RECORD, *LPNET_DVR_BLOCKLIST_ALARM_RECORD; -typedef struct tagNET_DVR_BLOCKLIST_GROUP_INFO //Ϣ +typedef struct tagNET_DVR_BLOCKLIST_GROUP_INFO //名单分组信息 { - DWORD dwSize; //ṹС - DWORD dwGroupID; //ţȡʱЧʱЧ1ʼ - DWORD dwGroupNo; // - BYTE byGroupType; //ͣ0-ֹ飬1- + DWORD dwSize; //结构体大小 + DWORD dwGroupID; //分组编号(获取时有效,添加时无效),从1开始 + DWORD dwGroupNo; //名单分组号 + BYTE byGroupType; //分组类型,0-禁止名单分组,1-允许名单分组 BYTE byRes1; - WORD wThreshold; //ֵȡֵΧΪ0-1000 - DWORD dwListNum; // - BYTE szGroupName[NAME_LEN]; // + WORD wThreshold; //报警阈值,取值范围为0-1000 + DWORD dwListNum; //分组名单数 + BYTE szGroupName[NAME_LEN]; //分组名称 BYTE szRemark[MAX_LEN_256]; - BYTE byStorageAddr[MAX_DOMAIN_NAME]; //洢IPַϢ - WORD wStoragePort; //洢IPӦĶ˿ں + BYTE byStorageAddr[MAX_DOMAIN_NAME]; //存储IP地址信息 + WORD wStoragePort; //存储IP对应的端口号 BYTE byRes[126]; }NET_DVR_BLOCKLIST_GROUP_INFO, *LPNET_DVR_BLOCKLIST_GROUP_INFO; typedef struct tagNET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD { - DWORD dwSize; //ṹС - DWORD dwGroupRecordID; //¼ID޸ĺͲѯʱЧʱЧ1ʼ - DWORD dwGroupNo; // - DWORD dwFaceDBID; //ID - DWORD dwFaceRecordID; //¼ID - BYTE byAlarmLevel; //ȼ0-high,1-medium,2-low - BYTE byRes1[3]; // - NET_DVR_ADDR_DOMAIN_INFO struStorageAddr; //洢IPַϢ + DWORD dwSize; //结构体大小 + DWORD dwGroupRecordID; //分组记录ID,修改和查询时有效,增加时无效,从1开始 + DWORD dwGroupNo; //名单分组号 + DWORD dwFaceDBID; //人脸库ID + DWORD dwFaceRecordID; //人脸记录ID + BYTE byAlarmLevel; //报警等级,0-high,1-medium,2-low + BYTE byRes1[3]; //保留 + NET_DVR_ADDR_DOMAIN_INFO struStorageAddr; //存储IP地址信息 BYTE byRes[256]; }NET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD,*LPNET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD; typedef struct tagNET_DVR_BLOCKLIST_GROUP_RECORD_COND { - DWORD dwSize; //ṹС - DWORD dwRecordID; //ӵǰſʼȡ1ʼ + DWORD dwSize; //结构体大小 + DWORD dwRecordID; //从当前编号开始获取,从1开始 BYTE byRes[64]; }NET_DVR_BLOCKLIST_GROUP_RECORD_COND, *LPNET_DVR_BLOCKLIST_GROUP_RECORD_COND; -typedef struct tagNET_DVR_BLOCKLIST_GROUP_RECORD_CFG //¼Ϣ +typedef struct tagNET_DVR_BLOCKLIST_GROUP_RECORD_CFG //名单分组记录信息 { - DWORD dwSize; //ṹС - DWORD dwRecordNum; //¼ܸ - NET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD struRecord[MAX_GROUP_RECORD_NUM]; //¼ + DWORD dwSize; //结构体大小 + DWORD dwRecordNum; //记录总个数 + NET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD struRecord[MAX_GROUP_RECORD_NUM]; //记录参数 BYTE byRes[256]; }NET_DVR_BLOCKLIST_GROUP_RECORD_CFG,*LPNET_DVR_BLOCKLIST_GROUP_RECORD_CFG; -typedef struct tagNET_DVR_BLOCKLIST_GROUP_CFG //¼Ϣ +typedef struct tagNET_DVR_BLOCKLIST_GROUP_CFG //名单分组记录信息 { - DWORD dwSize; //ṹС - DWORD dwGroupNum; //ܸ - NET_DVR_BLOCKLIST_GROUP_INFO struGroup[MAX_GROUP_RECORD_NUM]; //¼ + DWORD dwSize; //结构体大小 + DWORD dwGroupNum; //分组总个数 + NET_DVR_BLOCKLIST_GROUP_INFO struGroup[MAX_GROUP_RECORD_NUM]; //记录参数 BYTE byRes[256]; }NET_DVR_BLOCKLIST_GROUP_CFG,*LPNET_DVR_BLOCKLIST_GROUP_CFG; typedef struct tagNET_DVR_BLOCKLIST_GROUP_COND { - DWORD dwSize; //ṹС - DWORD dwGroupID; //ӵǰſʼȡ1ʼ + DWORD dwSize; //结构体大小 + DWORD dwGroupID; //从当前编号开始获取,从1开始 BYTE byRes[64]; }NET_DVR_BLOCKLIST_GROUP_COND, *LPNET_DVR_BLOCKLIST_GROUP_COND; @@ -44645,170 +44645,170 @@ typedef struct tagNET_DVR_BLOCKLIST_GROUP_COND typedef struct tagNET_DVR_SENSOR_VALUE { - float fMinValue; //Сֵȷ0.001Ϊ0xfffffffffʾѯ - float fMaxValue; //ֵȷ0.001Ϊ0xfffffffffʾѯ + float fMinValue; //最小值;精确到0.001,若为0xfffffffff表示查询所有 + float fMaxValue; //最大值;精确到0.001,若为0xfffffffff表示查询所有 BYTE byRes[8]; }NET_DVR_SENSOR_VALUE, *LPNET_DVR_SENSOR_VALUE; -typedef struct tagNET_DVR_HISTORICAL_QUERY_PARAM //ʷݲѯӽṹ +typedef struct tagNET_DVR_HISTORICAL_QUERY_PARAM //历史数据查询条件子结构 { - NET_DVR_TIME_V30 struStartTime;//ʼʱ - NET_DVR_TIME_V30 struEndTime;//ʱ - NET_DVR_SENSOR_VALUE struVoltageValue; //ѹ; λ - NET_DVR_SENSOR_VALUE struCurrentValue; //; λ - NET_DVR_SENSOR_VALUE struTemperatureValue;//¶Ȳλ϶ - NET_DVR_SENSOR_VALUE struHumidityValue;//ʪȲ - BYTE bySwitchStatus;//ͨ״̬ 0~δͨ磬1~ͨ磬0xffѯ - BYTE bySensorStatus; //״̬ 0-1-쳣2-0xffѯ + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + NET_DVR_SENSOR_VALUE struVoltageValue; //电压参数; 单位伏特 + NET_DVR_SENSOR_VALUE struCurrentValue; //电流参数; 单位毫安 + NET_DVR_SENSOR_VALUE struTemperatureValue;//温度参数,单位摄氏度 + NET_DVR_SENSOR_VALUE struHumidityValue;//湿度参数 + BYTE bySwitchStatus;//通电状态, 0~未通电,1~通电,0xff查询所有 + BYTE bySensorStatus; //传感器状态; 0-正常、1-异常、2-报警;0xff查询所有 BYTE byRes[66]; }NET_DVR_HISTORICAL_QUERY_PARAM, *LPNET_DVR_HISTORICAL_QUERY_PARAM; -typedef struct tagNET_DVR_SENSOR_COND //ṹ +typedef struct tagNET_DVR_SENSOR_COND //条件结构 { DWORD dwSize; - BYTE byQueryType; //ѯʽ0~ʵʱݲѯ1~ʷݲѯ - BYTE byDeviceType; //豸;0~δ֪,1~ģ, 2~ϵ,3~ϵ0xffʾѯ - BYTE byDeviceID; //豸IDAnalog(ģ)Χ1-8Terminal(ϵ)Χ1-4Socket(ϵ)Χ1-20xffʾѯ + BYTE byQueryType; //查询方式;0~实时数据查询,1~历史数据查询 + BYTE byDeviceType; //设备类型;0~未知,1~模拟量传感器, 2~上电端子,3~上电插座,0xff表示查询所有 + BYTE byDeviceID; //设备ID;Analog(模拟量传感器)范围:1-8、Terminal(上电端子)范围:1-4、Socket(上电插座)范围:1-2,0xff表示查询所有 BYTE byRes1; - // INTER_HISTORICAL_QUERY_PARAMӽṹbyQueryTypeΪ1ʱЧ - NET_DVR_HISTORICAL_QUERY_PARAM struHistoricalQueryParam; //ʷݲѯ + // INTER_HISTORICAL_QUERY_PARAM子结构,在byQueryType为1时生效 + NET_DVR_HISTORICAL_QUERY_PARAM struHistoricalQueryParam; //历史数据查询参数 BYTE byRes[64]; }NET_DVR_SENSOR_COND,*LPNET_DVR_SENSOR_COND; -typedef struct tagNET_DVR_SENSOR_CFG//ýṹ +typedef struct tagNET_DVR_SENSOR_CFG//配置结构 { DWORD dwSize; - BYTE byEnable; //ǰѯĴǷʹܣ0-ʹܣ1-ʹܣ - BYTE byDeviceType; //豸;0~δ֪,1~ģ, 2~ϵ,3~ϵ - BYTE byDeviceID; //豸IDAnalog(ģ)Χ1-8Terminal(ϵ)Χ1-4Socket(ϵ)Χ1-2 + BYTE byEnable; //当前查询的传感器是否使能,0-不使能,1-使能; + BYTE byDeviceType; //设备类型;0~未知,1~模拟量传感器, 2~上电端子,3~上电插座 + BYTE byDeviceID; //设备ID;Analog(模拟量传感器)范围:1-8、Terminal(上电端子)范围:1-4、Socket(上电插座)范围:1-2 BYTE byRes1; - NET_DVR_TIME_V30 struTime;//ʱ - BYTE byIsFirst; //Ƿһ(Ƿ)0-, 1-ǣ - BYTE byIsSwitchOn; //Ƿͨ磬0-, 1-ǣ - BYTE bySensorStatus; //״̬ 0-1-쳣2- - BYTE bySensorType; //ͣ SENSOR_TYPE - float fVoltage; //ѹλأȷ0.001Ϊ0xffʾЧֵ - float fCurrent; //λȷ0.001Ϊ0xffʾЧֵ - float fTemperatureValue;//¶ֵλ϶ȣȷ0.001Ϊ0xffʾЧֵ - float fHumidityValue;//ʪֵȷ0.001Ϊ0xffʾЧֵ - BYTE bySensorName[SENSORNAME_LEN/*32*/]; // - BYTE byDescription[MAX_SENSORDESCR_LEN/*64*/]; //ݵϢstatusTypeΪʱdescriptionΪ - float fActualValue; //ģźתֵȷ0.0001 - BYTE byUnit[SENSORUNIT_LEN/*32*/]; //λַ + NET_DVR_TIME_V30 struTime;//时间 + BYTE byIsFirst; //是否是启动后第一条数据(检测是否有重启),0-否, 1-是; + BYTE byIsSwitchOn; //是否通电,0-否, 1-是; + BYTE bySensorStatus; //传感器状态; 0-正常、1-异常、2-报警; + BYTE bySensorType; //传感器类型;参照 SENSOR_TYPE + float fVoltage; //电压;单位伏特,精确到0.001。若为0xff表示无效值 + float fCurrent; //电流;单位毫安,精确到0.001。若为0xff表示无效值 + float fTemperatureValue;//温度值;单位摄氏度,精确到0.001。若为0xff表示无效值 + float fHumidityValue;//湿度值,精确到0.001。若为0xff表示无效值 + BYTE bySensorName[SENSORNAME_LEN/*32*/]; //传感器名称 + BYTE byDescription[MAX_SENSORDESCR_LEN/*64*/]; //传感器数据的描述信息,statusType为正常时,description可以为空 + float fActualValue; //模拟信号转换后的数值;精确到0.0001 + BYTE byUnit[SENSORUNIT_LEN/*32*/]; //单位字符串 BYTE byRes[220]; }NET_DVR_SENSOR_CFG,*LPNET_DVR_SENSOR_CFG; typedef struct tagNET_DVR_SENSOR_SWITCH_COND { - DWORD dwSize;//ṹС - BYTE byDeviceType; //豸;0~δ֪, 1~ϵTerminal,2~ϵSocket - BYTE byDeviceID; //豸IDTerminal(ϵ)Χ1-4Socket(ϵ)Χ1-2 - BYTE bySwitch; //أ0-ϵ, 1-ϵ磬2- + DWORD dwSize;//结构体大小 + BYTE byDeviceType; //设备类型;0~未知, 1~上电端子Terminal,2~上电插座Socket + BYTE byDeviceID; //设备ID;Terminal(上电端子)范围:1-4、Socket(上电插座)范围:1-2 + BYTE bySwitch; //开关,0-断电, 1-上电,2-重启 BYTE byRes[125]; }NET_DVR_SENSOR_SWITCH_COND,*LPNET_DVR_SENSOR_SWITCH_COND; typedef struct tagNET_DVR_GB28181_SERVICE_CFG { - DWORD dwSize; //ṹС - BYTE byServerID[DEV_ID_LEN]; //SIPID - WORD wPort; //SIP˿ں - BYTE byRes1[2]; // + DWORD dwSize; //结构体大小 + BYTE byServerID[DEV_ID_LEN]; //SIP服务器ID; + WORD wPort; //SIP服务器端口号 + BYTE byRes1[2]; //保留 BYTE byAuthPasswd[PASSWD_LEN]; - DWORD dwRegisterValid; //ڣλ룬Ĭϣ3600 - BYTE byMaxHeartbeatTimeOut; //ʱĬϣ3 - BYTE byAutoAddIpc; //ǷԶipc,0-ã1- - BYTE byAuthPasswdEx[MAX_PASSWD_LEN_EX]; //չΪ64λʱbyAuthPasswdExΪǿգ˲ЧbyAuthPasswdЧȡʱbyAuthPasswdExbyAuthPasswd - BYTE byRes[190]; // + DWORD dwRegisterValid; //存活期周期,单位:秒,默认:3600 + BYTE byMaxHeartbeatTimeOut; //最大心跳超时次数,默认:3次 + BYTE byAutoAddIpc; //是否启用自动添加ipc,0-不启用,1-启用 + BYTE byAuthPasswdEx[MAX_PASSWD_LEN_EX]; //密码扩展为64位,设置时,byAuthPasswdEx为非空,此参数有效,byAuthPasswd无效,获取时,byAuthPasswdEx和byAuthPasswd都返回 + BYTE byRes[190]; //保留 }NET_DVR_GB28181_SERVICE_CFG,*LPNET_DVR_GB28181_SERVICE_CFG; typedef struct tagNET_DVR_ACTIVATECFG { - DWORD dwSize; //ṹС - BYTE sPassword[PASSWD_LEN]; //ʼ + DWORD dwSize; //结构体大小 + BYTE sPassword[PASSWD_LEN]; //初始密码 BYTE byLoginMode; //0-Private 1-ISAPI - BYTE byHttps; //0-ʹhttps1-ʹhttps + BYTE byHttps; //0-不使用https,1-使用https BYTE byRes[106]; }NET_DVR_ACTIVATECFG,*LPNET_DVR_ACTIVATECFG; typedef struct tagNET_DVR_IPDEVICE_ACTIVATE_CFG { - DWORD dwSize; //ṹС - BYTE byMode; //0-ͨ1-ַ - BYTE bySelfDefinePassword;//ǷԶ,0-,1-,2-,ΪIPCԶ - BYTE sPassword[PASSWD_LEN];//Զ - BYTE sUserName[NAME_LEN];//û + DWORD dwSize; //结构体大小 + BYTE byMode; //0-按通道激活,1-按地址激活 + BYTE bySelfDefinePassword;//是否自定义密码,0-否,1-是,2-是,且为IPC的自定义密码 + BYTE sPassword[PASSWD_LEN];//自定义密码 + BYTE sUserName[NAME_LEN];//用户名 BYTE byRes[78]; union { - BYTE byLen[512];//unionС + BYTE byLen[512];//union大小 struct { - DWORD dwChannelNo;//ͨ + DWORD dwChannelNo;//通道号 BYTE byRes[508]; - }struChannelInfo;//ͨϢ + }struChannelInfo;//通道信息 struct { - NET_DVR_IPADDR struIp;//IPַ - WORD wPort;//˿ں - BYTE sProtocolDesc[DESC_LEN];//Э - BYTE byMacAddr[MACADDR_LEN];//macַ + NET_DVR_IPADDR struIp;//IP地址 + WORD wPort;//端口号 + BYTE sProtocolDesc[DESC_LEN];//协议类型 + BYTE byMacAddr[MACADDR_LEN];//mac地址 BYTE byRes[344]; - }struAddrInfo;//IPַNET_DVR_SADPINFO - }unActivateDeviceInfo;//ʹṹͨbyModeֶαʾǰͨǰַ + }struAddrInfo;//IP地址,来自NET_DVR_SADPINFO + }unActivateDeviceInfo;//使用联合体结构,通过byMode字段表示是按通道还是按地址 }NET_DVR_IPDEVICE_ACTIVATE_CFG,*LPNET_DVR_IPDEVICE_ACTIVATE_CFG; typedef struct tagNET_DVR_DIGITAL_CHANNEL_SECURITY_STATUS_ { DWORD dwSize; - BYTE byDigitalChanPasswordStatus[MAX_CHANNUM_V30*4];//0-,1-IPCδ2-룬3-ǿ4-ǿУ5-ǿǿ;byDigitalChanPasswordStatus[0]ʾһͨ + BYTE byDigitalChanPasswordStatus[MAX_CHANNUM_V30*4];//0-保留,1-IPC未激活,2-风险密码,3-密码强度弱,4-密码强度中,5-密码强度强;byDigitalChanPasswordStatus[0]表示第一个数字通道 BYTE byRes[1140]; }NET_DVR_DIGITAL_CHANNEL_SECURITY_STATUS, *LPNET_DVR_DIGITAL_CHANNEL_SECURITY_STATUS; typedef struct tagNET_DVR_CAMERACHAN_SERIALCFG { DWORD dwSize; - DWORD dwBaudRate; //(bps)0-501-752-1103-1504-3005-6006-12007-24008-48009-960010-1920011-3840012-5760013-7680014-115.2k - BYTE byDataBit; //мλ0-5λ1-6λ2-7λ3-8λ - BYTE byStopBit; //ֹͣλ0-1λ1-2λ - BYTE byParity; //ǷУ飺0-У飬1-У飬2-żУ - BYTE byFlowcontrol;// Ƿأ0-ޣ1-,2-Ӳ - WORD wPTZProtocol; //Эֵͣ + DWORD dwBaudRate; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200,11-38400,12-57600,13-76800,14-115.2k + BYTE byDataBit; //数据有几位:0-5位,1-6位,2-7位,3-8位 + BYTE byStopBit; //停止位:0-1位,1-2位 + BYTE byParity; //是否校验:0-无校验,1-奇校验,2-偶校验 + BYTE byFlowcontrol;// 是否流控:0-无,1-软流控,2-硬流控 + WORD wPTZProtocol; //控球协议类型,索引值 BYTE byRes1[6]; - DWORD dwSerialPort; //ں,λΪ0ʾǰ崮ڣλΪ1ʾ崮 - BYTE bySerialAddress; //ڵַ0~255 + DWORD dwSerialPort; //串口号,最高位为0,表示前面板串口,最高位为1,表示后面板串口 + BYTE bySerialAddress; //串口地址0~255 BYTE byRes[15]; }NET_DVR_CAMERACHAN_SERIALCFG, *LPNET_DVR_CAMERACHAN_SERIALCFG; -#define MAX_MATRIX_SUBBOARD_NUM 16 //ۺƽ̨Ӱ -#define MAX_MATRIX_SUBBOARD_NUM_V51 32 //ۺƽ̨Ӱ -#define MAX_BOARD_SUBSYSTEM_NUM 12 //ÿӰϵͳ +#define MAX_MATRIX_SUBBOARD_NUM 16 //综合平台最大子板数 +#define MAX_MATRIX_SUBBOARD_NUM_V51 32 //综合平台最大子板数 +#define MAX_BOARD_SUBSYSTEM_NUM 12 //每个子板最大系统数 typedef struct tagNET_DVR_SUBSYSTEM_STATUS { - /*ϵͳͣ1-ϵͳ2-ϵͳ3-ϵͳ4-ϵͳ5-ϵͳ6-ϵͳ7-ϵͳ8-Fpgaϵͳ9-Fpgaϵͳ10-תϵͳ - 11-X86ϵͳ12-ϵͳ13-X86ķ壬 14- X86ҵ 15-ƴϵͳ16-˽ϵͳ17-X86ƴϵͳ18-ͨƴϵͳ19-Ƶϵͳ0-NULL*/ + /*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-Fpga解码子系统,9-Fpga子系统,10-转码子系统, + 11-X86服务器子系统,12-超高清输入子系统,13-X86中心服务板, 14- X86业务服务板 ,15-多相机拼接子系统,16-网络光纤交换子系统,17-X86拼接子系统,18-普通拼接子系统,19-音频子系统,0-NULL*/ BYTE bySubSystemType; - BYTE bySubSystemNo; //ϵͳţӰϵı - BYTE byOnlineStatus; //״̬ 1- 2- + BYTE bySubSystemNo; //子系统号,即所在子板上的编号 + BYTE byOnlineStatus; //网络连接状态, 1-在线 2-不在线 BYTE byRes[49]; }NET_DVR_SUBSYSTEM_STATUS, *LPNET_DVR_SUBSYSTEM_STATUS; typedef struct tagNET_DVR_MATRIX_SUBBOARD { - BYTE byBoardNo; //Ӱ - BYTE byPcieConnectStatus; //pcie״̬ 1- 2-Ͽ + BYTE byBoardNo; //子板号 + BYTE byPcieConnectStatus; //pcie连接状态, 1-连接 2-断开 BYTE byRes[2]; - DWORD dwHardwareVersion; //ӰӲ汾 - DWORD dwPcieBandwidth; //pcie Link - DWORD dwTemperature; //Ӱ¶ λ϶ - NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //ϵͳ״̬ + DWORD dwHardwareVersion; //子板硬件版本 + DWORD dwPcieBandwidth; //pcie Link 带宽 + DWORD dwTemperature; //子板温度 单位:摄氏度 + NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //子系统状态 BYTE byRes2[16]; }NET_DVR_MATRIX_SUBBOARD, *LPNET_DVR_MATRIX_SUBBOARD; typedef struct tagNET_DVR_MATRIX_STATUS { DWORD dwSize; - BYTE byMainFrameType; // 1-18U(V1.0) 2-18U 3-14U 4-11U 5-8U 6-7U 7-5U - BYTE bySoltNum; //λ - BYTE byBoardNum; //Ӱ + BYTE byMainFrameType; //机箱类型 1-18U机箱(V1.0) 2-18U机箱 3-14U机箱 4-11U机箱 5-8U机箱 6-7U机箱 7-5U机箱 + BYTE bySoltNum; //槽位数 + BYTE byBoardNum; //子板数 BYTE byRes; NET_DVR_MATRIX_SUBBOARD struMatrixSubboard[MAX_MATRIX_SUBBOARD_NUM]; BYTE byRes2[48]; @@ -44817,78 +44817,78 @@ typedef struct tagNET_DVR_MATRIX_STATUS typedef struct tagNET_DVR_MATRIX_SUBBOARD_V50 { - BYTE byBoardNo; //Ӱ - BYTE byPcieConnectStatus; //pcie״̬ 1- 2-Ͽ + BYTE byBoardNo; //子板号 + BYTE byPcieConnectStatus; //pcie连接状态, 1-连接 2-断开 BYTE byRes; - BYTE byTemperatureAlarm; //¶ȱ0-ֶЧ1-¶2-¶ȳޱ3-¶ȳޱ - DWORD dwHardwareVersion; //ӰӲ汾 - DWORD dwPcieBandwidth; //pcie Link - DWORD dwTemperature; //Ӱ¶ λ϶ - NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //ϵͳ״̬ - BYTE bySubboardModel[32]; //Ӱͺ + BYTE byTemperatureAlarm; //温度报警,0-此字段无效,1-温度正常,2-温度超上限报警,3-温度超下限报警 + DWORD dwHardwareVersion; //子板硬件版本 + DWORD dwPcieBandwidth; //pcie Link 带宽 + DWORD dwTemperature; //子板温度 单位:摄氏度 + NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //子系统状态 + BYTE bySubboardModel[32]; //子板型号 BYTE byRes1[32]; }NET_DVR_MATRIX_SUBBOARD_V50, *LPNET_DVR_MATRIX_SUBBOARD_V50; typedef struct tagNET_DVR_MATRIX_STATUS_V50 { DWORD dwSize; - BYTE byMainFrameType; // 1-18U(V1.0) 2-18U 3-14U 4-11U 5-8U 6-7U 7-5U - BYTE bySoltNum; //λ - BYTE byBoardNum; //Ӱ - BYTE byLCDPanelStatus; //Һ״̬1-2-쳣 + BYTE byMainFrameType; //机箱类型 1-18U机箱(V1.0) 2-18U机箱 3-14U机箱 4-11U机箱 5-8U机箱 6-7U机箱 7-5U机箱 + BYTE bySoltNum; //槽位数 + BYTE byBoardNum; //子板数 + BYTE byLCDPanelStatus; //液晶面板连接状态,1-正常,2-异常 NET_DVR_MATRIX_SUBBOARD_V50 struMatrixSubboard[MAX_MATRIX_SUBBOARD_NUM]; - DWORD dwFanSequence; //ȱţλʾλʹã0xffffff04ʾΪ1ķȣӦȱλʱdwFanConnectStatusdwFanOperationStatusĶӦλЧΪ޴˱ŵķ - DWORD dwFanConnectStatus; //״̬λʾλʹã0xffffff00ʾΪ1ķ0xffffff04ʾΪ1ķ쳣 - DWORD dwFanOperationStatus; //״̬λʾλʹã0xffffff00ʾΪ1ķ״̬0xffffff04ʾΪ1ķ쳣 - BYTE byDeviceModel[32]; //豸ͺ - BYTE byPowerNums; //Դ - BYTE byMainBoardNums; // - BYTE byHotStandbyMode; // byMainBoardNumsΪ2ʱ0-M1λ1-M2λ + DWORD dwFanSequence; //风扇编号,按位表示,最低位不使用,例如0xffffff04表示编号为1的风扇,当对应风扇被置位时,dwFanConnectStatus和dwFanOperationStatus的对应位才有效,否则认为无此编号的风扇 + DWORD dwFanConnectStatus; //风扇连接状态,按位表示,最低位不使用,例如0xffffff00表示编号为1的风扇连接正常,0xffffff04表示编号为1的风扇连接异常 + DWORD dwFanOperationStatus; //风扇运行状态,按位表示,最低位不使用,例如0xffffff00表示编号为1的风扇运行状态正常,0xffffff04表示编号为1的风扇运行异常 + BYTE byDeviceModel[32]; //设备型号 + BYTE byPowerNums; //电源数量 + BYTE byMainBoardNums; //主控数量 + BYTE byHotStandbyMode; // byMainBoardNums为2时,0-工作在M1槽位,1-工作在M2槽位 BYTE byRes[29]; }NET_DVR_MATRIX_STATUS_V50, *LPNET_DVR_MATRIX_STATUS_V50; typedef struct tagNET_DVR_MATRIX_SUBBOARD_V51 { - BYTE byBoardNo; //Ӱ - BYTE byPcieConnectStatus; //pcie״̬1-ӣ2-Ͽ + BYTE byBoardNo; //子板号 + BYTE byPcieConnectStatus; //pcie连接状态,1-连接,2-断开 BYTE byRes1; - BYTE byTemperatureAlarm; //¶ȱ0-ֶЧ1-¶2-¶ȳޱ3-¶ȳޱ - DWORD dwHardwareVersion; //ӰӲ汾 - DWORD dwPcieBandwidth; //pcie Link - DWORD dwTemperature; //Ӱ¶ȣλ϶ - NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //ϵͳ״̬ - BYTE bySubboardModel[32]; //Ӱͺ + BYTE byTemperatureAlarm; //温度报警,0-此字段无效,1-温度正常,2-温度超上限报警,3-温度超下限报警 + DWORD dwHardwareVersion; //子板硬件版本 + DWORD dwPcieBandwidth; //pcie Link带宽 + DWORD dwTemperature; //子板温度,单位:摄氏度 + NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //子系统状态 + BYTE bySubboardModel[32]; //子板型号 BYTE byRes2[128]; }NET_DVR_MATRIX_SUBBOARD_V51, *LPNET_DVR_MATRIX_SUBBOARD_V51; typedef struct tagNET_DVR_MATRIX_STATUS_V51 { DWORD dwSize; - BYTE byMainFrameType; // 1-18U䣨V1.02-18U䣬3-14U䣬4-11U䣬5-8U䣬6-7U - BYTE bySoltNum; //λ - BYTE byBoardNum; //Ӱ - BYTE byLCDPanelStatus; //Һ״̬1-2-쳣 + BYTE byMainFrameType; //机箱类型 1-18U机箱(V1.0),2-18U机箱,3-14U机箱,4-11U机箱,5-8U机箱,6-7U机箱 + BYTE bySoltNum; //槽位数 + BYTE byBoardNum; //子板数 + BYTE byLCDPanelStatus; //液晶面板连接状态,1-正常,2-异常 NET_DVR_MATRIX_SUBBOARD_V51 struMatrixSubboard[MAX_MATRIX_SUBBOARD_NUM_V51]; - DWORD dwFanSequence; //ȱţλʾ0x00000001ʾ豸ֻһȣΪ10x00000101ʾ豸ȣŷֱΪ19ӦȱűλʱdwFanConnectStatusdwFanOperationStatusĶӦλЧΪ޴˱ŵķ - DWORD dwFanConnectStatus; //״̬λʾ0x00000001ʾΪ1ķ״̬쳣0x00000101ʾΪ19ķ״̬쳣 - DWORD dwFanOperationStatus; //״̬λʾ0x00000001ʾΪ1ķ״̬쳣0x00000101ʾΪ19ķ״̬쳣 - BYTE byDeviceModel[32]; //豸ͺ - BYTE byFanSpeed[32]; //ת٣ֽڱʾbyFanSpeed[0]ʾΪ1ķȵת٣תٵȼΧΪ[1,3] - BYTE byMainMemUsed; //ڴʹʣλٷֱ - BYTE byMainCpuUsed; //CPUʹʣλٷֱ - BYTE byNetwordUsed; //ʹʣλٷֱ + DWORD dwFanSequence; //风扇编号,按位表示,例如0x00000001表示设备只有一个风扇,编号为1,0x00000101表示设备有两个风扇,编号分别为1和9,当对应风扇编号被置位时,dwFanConnectStatus和dwFanOperationStatus的对应位才有效,否则认为无此编号的风扇 + DWORD dwFanConnectStatus; //风扇连接状态,按位表示,例如0x00000001表示编号为1的风扇连接状态异常,0x00000101表示编号为1和9的风扇连接状态均异常 + DWORD dwFanOperationStatus; //风扇运行状态,按位表示,例如0x00000001表示编号为1的风扇运行状态异常,0x00000101表示编号为1和9的风扇运行状态均异常 + BYTE byDeviceModel[32]; //设备型号 + BYTE byFanSpeed[32]; //风扇转速,按字节表示,例如byFanSpeed[0]表示编号为1的风扇的转速,转速等级范围为[1,3] + BYTE byMainMemUsed; //主控内存使用率,单位:百分比 + BYTE byMainCpuUsed; //主控CPU使用率,单位:百分比 + BYTE byNetwordUsed; //交换板网络使用率,单位:百分比 BYTE byRes1; - DWORD dwMainSoftwareVer; //汾 - BYTE byPowerNums; //Դ - BYTE byMainBoardNums; // - BYTE byHotStandbyMode; // byMainBoardNumsΪ2ʱ0-M1λ1-M2λ + DWORD dwMainSoftwareVer; //主控软件版本 + BYTE byPowerNums; //电源数量 + BYTE byMainBoardNums; //主控数量 + BYTE byHotStandbyMode; // byMainBoardNums为2时,0-工作在M1槽位,1-工作在M2槽位 BYTE byRes2[125]; }NET_DVR_MATRIX_STATUS_V51, *LPNET_DVR_MATRIX_STATUS_V51; typedef struct _NET_DVR_SUBWIND_INFO { DWORD dwSize; - DWORD dwSubWndNo; //Ӵں + DWORD dwSubWndNo; //子窗口号 BYTE byRes[8]; } NET_DVR_SUBWIND_INFO, *LPNET_DVR_SUBWIND_INFO; @@ -44896,241 +44896,241 @@ typedef struct _NET_DVR_SUBWIND_INFO typedef struct tagNET_DVR_FUSION_SCALE { DWORD dwSize; - WORD wWidth; //ͼںϿ(ͼĿ) - WORD wHeight; //ͼںϸ(ͼĿ) + WORD wWidth; //图像融合宽(横向图像数目) + WORD wHeight; //图像融合高(纵向图像数目) BYTE byRes[32]; }NET_DVR_FUSION_SCALE, *LPNET_DVR_FUSION_SCALE; typedef struct tagNET_DVR_FUSION_CFG { DWORD dwSize; - BYTE byFusion; //Ƿںϣ0-δںϻȡںϣ0-ں - BYTE byUseHistoryMap; //Ƿʹʷںӳ0-ʹã0-ʹ + BYTE byFusion; //是否融合,0-未融合或取消融合,非0-融合 + BYTE byUseHistoryMap; //是否使用历史融合映射表,0-不使用,非0-使用 BYTE byRes[30]; }NET_DVR_FUSION_CFG, *LPNET_DVR_FUSION_CFG; typedef struct tagNET_DVR_MULTIFUNCTION_SERIALCFG { DWORD dwSize ; - BYTE byVariable ; //Ƿɱ䣬1-ɱ 2-ɱ ֻȡ - BYTE bySerialWorkMode; //ģʽ1-RS485, 2-RS232ֻڿɱ£޸Ĺģʽ - BYTE byFunType; //ڹܣ 1-̿ƣ2-Ļƣ3-͸ͨģʽ 4-PTZ 5- 6-̨ - BYTE byDataBit;// λ 05λ16λ27λ38λ; - BYTE byStopBit;// ֹͣλ 01λ12λ; - BYTE byParity;// У 0У飬1У飬2żУ; - BYTE byFlowcontrol;// 0ޣ1,2-Ӳ + BYTE byVariable ; //串口是否可变,1-不可变 2-可变 (只获取) + BYTE bySerialWorkMode; //工作模式,1-RS485, 2-RS232(只在可变情况下,修改工作模式) + BYTE byFunType; //串口功能, 1-键盘控制,2-屏幕控制,3-透明通道模式 4-PTZ控制 5-矩阵控制 6-控制台 + BYTE byDataBit;// 数据位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit;// 停止位 0-1位,1-2位; + BYTE byParity;// 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol;// 0-无,1-软流控,2-硬流控 BYTE byRes1 ; - DWORD dwBaudRate;//0501752110315043005600612007240084800996001019200 11384001257600137680014115.2k; - WORD wProtocol; //Э ͬڹܶӦЭ鲻һ + DWORD dwBaudRate;//波特率0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + WORD wProtocol; //串口协议 不同串口功能对应串口协议不一样 BYTE byRes[34]; }NET_DVR_MULTIFUNCTION_SERIALCFG, *LPNET_DVR_MULTIFUNCTION_SERIALCFG; typedef struct tagNET_DVR_PTZ_3D_SPEED_CONTROL { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byPSpeed; // Xٶ ȡֵ164 - BYTE byTSpeed; // Yٶ ȡֵ164 - BYTE byZSpeed; // Zٶ - BYTE byPDirect; // P 1- 2- - BYTE byTDirect; // T 1-ϣ 2- - BYTE byZDirect; //Z 1-ZOOM+, 2-ZOOM- - BYTE byRes[18]; //ֽ + DWORD dwChannel; //通道号 + BYTE byPSpeed; // X轴控制速度 (取值1-64) + BYTE byTSpeed; // Y轴控制速度 (取值1-64) + BYTE byZSpeed; // Z速度 + BYTE byPDirect; // P方向, 1-左, 2-右 + BYTE byTDirect; // T方向, 1-上, 2-下 + BYTE byZDirect; //Z方向, 1-ZOOM+, 2-ZOOM- + BYTE byRes[18]; //保留字节 }NET_DVR_PTZ_3D_SPEED_CONTROL, *LPNET_DVR_PTZ_3D_SPEED_CONTROL; -//SensorϢ +//Sensor信息 typedef struct tagNET_DVR_SENSOR_PARAM { BYTE bySensorType;//SensorType:0-CCD,1-CMOS BYTE byRes[31]; - float fHorWidth;//ˮƽ ȷСλ *10000 - float fVerWidth;//ֱ ȷСλ *10000 - float fFold;//zoom=1ûʱĽ ȷСλ *100 + float fHorWidth;//水平宽度 精确到小数点后两位 *10000 + float fVerWidth;//垂直宽度 精确到小数点后两位 *10000 + float fFold;//zoom=1没变时的焦距 精确到小数点后两位 *100 }NET_DVR_SENSOR_PARAM,*LPNET_DVR_SENSOR_PARAM; -//תϢ +//转向流量信息 typedef struct tagNET_DVR_TURN_DIRECTION_PARAM { - BYTE byLine;//ת߱ - BYTE byStatus;//ת״̬0-δ֪1-룬2-뿪 + BYTE byLine;//转向线编号 + BYTE byStatus;//转向线状态,0-未知,1-进入,2-离开 BYTE byRes[38]; }NET_DVR_TURN_DIRECTION_PARAM, *LPNET_DVR_TURN_DIRECTION_PARAM; -//ֹͣϢ +//停止线信息 typedef struct tagNET_DVR_STOP_LINE_PARAM { - BYTE byStatus;//ֹͣ״̬0-δ֪1-룬2-뿪 + BYTE byStatus;//停止线状态,0-未知,1-进入,2-离开 BYTE byRes[39]; }NET_DVR_STOP_LINE_PARAM, *LPNET_DVR_STOP_LINE_PARAM; -//TPSϢ +//TPS附加信息 typedef struct tagNET_DVR_TPS_ADDINFO { - NET_DVR_LLPOS_PARAM struFirstLLPos;//һľγλϢ(byLaneState=3byQueueLen>0ʱŷ) - NET_DVR_LLPOS_PARAM struLastLLPos;//һľγλϢ(byLaneState=3byQueueLen>0ʱŷ) - char sLicense[MAX_LICENSE_LEN/*16*/];//ƺ - NET_DVR_TURN_DIRECTION_PARAM struTurnDirection;//תϢ - NET_DVR_STOP_LINE_PARAM struStopLine;//ֹͣϢ + NET_DVR_LLPOS_PARAM struFirstLLPos;//车流量第一辆车的经纬度位置信息(byLaneState=3且byQueueLen>0时才返回) + NET_DVR_LLPOS_PARAM struLastLLPos;//车流量最后一辆车的经纬度位置信息(byLaneState=3且byQueueLen>0时才返回) + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号 + NET_DVR_TURN_DIRECTION_PARAM struTurnDirection;//转向流量信息 + NET_DVR_STOP_LINE_PARAM struStopLine;//停止线信息 BYTE byRes[884]; }NET_DVR_TPS_ADDINFO, *LPNET_DVR_TPS_ADDINFO; -//Ϣ +//车辆附加信息 typedef struct tagNET_DVR_VEHICLE_ADDINFO { - NET_DVR_LLPOS_PARAM struLLPos;//ǰγλϢ - char sVehicleNo[LEN_64]; /*ϴijΨһʶ,󳤶Ϊ64*/ - BYTE byVehicleMonitorTaskID[64];//ܲID,64λַ,ʱϲ·豸,ϲȷIDΨһ - BYTE byUUID[LEN_64]; //ͨΨһʶ,64λַ,豸ȷΨһԣڿͬһץ,vehicleMonitormanualVehicleMonitordailyVehicleMonitorеlinkageANPRUUIDй + NET_DVR_LLPOS_PARAM struLLPos;//车辆当前经纬度位置信息 + char sVehicleNo[LEN_64]; /*上传的车辆唯一标识,最大长度为64*/ + BYTE byVehicleMonitorTaskID[64];//车辆智能布防任务ID,64位字符串,创建任务时由上层下发给设备,上层确保ID唯一性 + BYTE byUUID[LEN_64]; //通用唯一识别码,64位字符串,设备确保唯一性,用于跨服务器关联同一次抓拍,vehicleMonitor,manualVehicleMonitor,dailyVehicleMonitor报警中的linkageANPRUUID有关 BYTE byRes[832]; }NET_DVR_VEHICLE_ADDINFO, *LPNET_DVR_VEHICLE_ADDINFO; -// +//烟雾报警 typedef struct tagNET_DVR_SMOKEDETECTION_ALARM { - NET_PTZ_INFO struPTZPos;//ɼ豸PTZFλ - NET_PTZ_INFO struThermalPTZPos;//ȳ豸PTZFλ - NET_DVR_LLPOS_PARAM struLLPos;//豸γλ - NET_VCA_RECT struSmokePos;//λ + NET_PTZ_INFO struPTZPos;//可见光设备PTZF位置 + NET_PTZ_INFO struThermalPTZPos;//热成像设备PTZF位置 + NET_DVR_LLPOS_PARAM struLLPos;//设备经纬度位置 + NET_VCA_RECT struSmokePos;//画面中烟雾区域位置 BYTE byRes[256]; }NET_DVR_SMOKEDETECTION_ALARM, *LPNET_DVR_SMOKEDETECTION_ALARM; -//λϢ +//球机位置信息 typedef struct { - float fPanPos;//ˮƽȷС1λ - float fTiltPos;//ֱȷС1λ - float fZoomPos;//䱶ȷС1λ + float fPanPos;//水平参数,精确到小数点后1位 + float fTiltPos;//垂直参数,精确到小数点后1位 + float fZoomPos;//变倍参数,精确到小数点后1位 BYTE byRes[16] ; }NET_DVR_PTZPOS_PARAM, *LPNET_DVR_PTZPOS_PARAM; -//GISϢϴ +//GIS信息上传 typedef struct tagNET_DVR_GIS_UPLOADINFO { - DWORD dwSize;//ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo;//ǰ豸 - float fAzimuth;//̵ķλϢλ[0.00,360.00) - BYTE byLatitudeType ;//γͣ0-γ1-γ - BYTE byLongitudeType ;// ͣ0-ȣ1- + DWORD dwSize;//结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo;//前端设备 + float fAzimuth;//电子罗盘的方位信息;方位角[0.00°,360.00°) + BYTE byLatitudeType ;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType ;// 经度类型,0-东度,1-西度 BYTE byRes1[2] ; - NET_DVR_LLI_PARAM struLatitude; /*γ*/ - NET_DVR_LLI_PARAM struLongitude; /**/ - float fHorizontalValue;//ˮƽӳǣȷСλ - float fVerticalValue;//ֱӳǣȷСλ - float fVisibleRadius;//ǰӰ뾶ȷСλ - float fMaxViewRadius;//Ӱ뾶ȷС0λԤ - NET_DVR_SENSOR_PARAM struSensorParam;//SensorϢ - NET_DVR_PTZPOS_PARAM struPtzPos; //ptz + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ + float fHorizontalValue;//水平视场角,精确到小数点后面两位 + float fVerticalValue;//垂直视场角,精确到小数点后面两位 + float fVisibleRadius;//当前可视半径,精确到小数点后面两位 + float fMaxViewRadius;//最大可视半径,精确到小数点后面0位(预留处理) + NET_DVR_SENSOR_PARAM struSensorParam;//Sensor信息 + NET_DVR_PTZPOS_PARAM struPtzPos; //ptz坐标 BYTE byRes[256]; }NET_DVR_GIS_UPLOADINFO,*LPNET_DVR_GIS_UPLOADINFO; -//ƻϢϴ +//防破坏报警信息上传 typedef struct tagNET_DVR_VANDALPROOF_ALARM { - DWORD dwSize;//ṹС - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo;//ǰ豸 + DWORD dwSize;//结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo;//前端设备 BYTE byRes[256]; }NET_DVR_VANDALPROOF_ALARM,*LPNET_DVR_VANDALPROOF_ALARM; -//в +//集中布防参数配置 typedef struct tagNET_DVR_CENTRALIZEDCTRL_CFG { - DWORD dwSize;//ṹС - BYTE byEnable;//0-1-ʼ - BYTE byLatitudeType ;//γͣ0-γ1-γ - BYTE byLongitudeType ;// ͣ0-1- + DWORD dwSize;//结构体大小 + BYTE byEnable;//0-结束,1-开始 + BYTE byLatitudeType ;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType ;// 经度类型,0-东经,1-西经 BYTE byRes1; - NET_DVR_LLI_PARAM struLatitude; /*γ*/ - NET_DVR_LLI_PARAM struLongitude; /**/ - DWORD dwTimeOut;//ʱʱ [60s, 6*60*60s] - BYTE byControlType;//вʽ 0-ǿƲ1-ǿƲ + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ + DWORD dwTimeOut;//超时时间 [60s, 6*60*60s] + BYTE byControlType;//集中布防方式 0-强制布防,1-非强制布防 BYTE byRes[127]; }NET_DVR_CENTRALIZEDCTRL_CFG,*LPNET_DVR_CENTRALIZEDCTRL_CFG; -//GISϢ +//球机的GIS信息数据 typedef struct tagNET_DVR_GIS_INFO { - DWORD dwSize;//ṹС - float fAzimuth;//̵ķλϢλ[0.00,360.00) - float fHorizontalValue;//ˮƽӳǣȷСλ - float fVerticalValue;//ֱӳǣȷСλ - float fVisibleRadius;//ǰӰ뾶ȷСλ - float fMaxViewRadius;//Ӱ뾶ȷС0λԤ - BYTE byLatitudeType ;//γͣ0-γ1-γ - BYTE byLongitudeType ;// ͣ0-1- - BYTE byPTZPosExEnable;//ǷPTZչ0~ãPTZֵstruPtzPos Ϊ׼1~ãPTZֵstruPtzPosExΪ׼ + DWORD dwSize;//结构体大小 + float fAzimuth;//电子罗盘的方位信息;方位角[0.00°,360.00°) + float fHorizontalValue;//水平视场角,精确到小数点后面两位 + float fVerticalValue;//垂直视场角,精确到小数点后面两位 + float fVisibleRadius;//当前可视半径,精确到小数点后面两位 + float fMaxViewRadius;//最大可视半径,精确到小数点后面0位(预留处理) + BYTE byLatitudeType ;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType ;// 经度类型,0-东经,1-西经 + BYTE byPTZPosExEnable;//是否启用PTZ坐标扩展,0~不启用,PTZ坐标值以struPtzPos 为准。1~启用,PTZ坐标值以struPtzPosEx为准。 BYTE byRes1; - NET_DVR_LLI_PARAM struLatitude; /*γ*/ - NET_DVR_LLI_PARAM struLongitude; /**/ - NET_DVR_PTZPOS_PARAM struPtzPos; //ptz - NET_DVR_SENSOR_PARAM struSensorParam;//SensorϢ - NET_PTZ_INFO struPtzPosEx;// ptzչ(ָ֧߾PTZֵȷСλ) - float fMinHorizontalValue;//СˮƽӳǣȷСλ0.0-360.00 - float fMaxHorizontalValue;//ˮƽӳǣȷСλ0.0-360.00 - float fMinVerticalValue;//СֱӳǣȷСλ0.0-360.00 - float fMaxVerticalValue;//ֱӳǣȷСλ0.0-360.00 + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ + NET_DVR_PTZPOS_PARAM struPtzPos; //ptz坐标 + NET_DVR_SENSOR_PARAM struSensorParam;//Sensor信息 + NET_PTZ_INFO struPtzPosEx;// ptz坐标扩展(支持高精度PTZ值,精确到小数点后三位) + float fMinHorizontalValue;//最小水平视场角,精确到小数点后面两位;0.0-360.00 + float fMaxHorizontalValue;//最大水平视场角,精确到小数点后面两位;0.0-360.00 + float fMinVerticalValue;//最小垂直视场角,精确到小数点后面两位;0.0-360.00 + float fMaxVerticalValue;//最大垂直视场角,精确到小数点后面两位;0.0-360.00 BYTE byRes[220]; }NET_DVR_GIS_INFO,*LPNET_DVR_GIS_INFO; -//豸Ѳģʽ +//设备巡航模式 typedef struct tagNET_DVR_CRUISE_PARAM { - DWORD dwSize;//ṹС - BYTE byCruiseMode;// Ѳģʽ0~1~Ԥõ + DWORD dwSize;//结构体大小 + BYTE byCruiseMode;// 巡航模式,0~连续,1~预置点 BYTE byRes[123]; }NET_DVR_CRUISE_PARAM, *LPNET_DVR_CRUISE_PARAM; -//ȡ豸ʪϢṹ +//获取设备环境温湿度信息结构体 typedef struct tagNET_DVR_TEMP_HUMI_INFO { DWORD dwSize; - NET_DVR_TIME_V30 struCurrentTime; // ǰʱ - float fTemperature;//豸¶ȣȷСλ-273 C 1000϶ȣ - float fHumidity;// 豸ʪȣȷСλλΪ% + NET_DVR_TIME_V30 struCurrentTime; // 当前时间 + float fTemperature;//设备环境温度,精确到小数点后两位,(-273 – 1000摄氏度) + float fHumidity;// 设备环境湿度,精确到小数点后两位。单位为:% BYTE byRes[256]; }NET_DVR_TEMP_HUMI_INFO, *LPNET_DVR_TEMP_HUMI_INFO; typedef struct tagNET_SDK_POINT_THERMOMETRY { - float fPointTemperature;/*µǰ¶, 궨Ϊ0-ʱЧȷСһλ(-40-1000),+100*10 */ - NET_VCA_POINT struPoint;//꣨궨Ϊ㡱ʱЧ + float fPointTemperature;/*点测温当前温度, 当标定为0-点时生效。精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + NET_VCA_POINT struPoint;//点测温坐标(当规则标定类型为“点”的时候生效) BYTE byRes[20]; }NET_SDK_POINT_THERMOMETRY, *LPNET_SDK_POINT_THERMOMETRY; typedef struct tagNET_SDK_REGION_THERMOMETRY { - float fMaxTemperature;//¶,ȷСһλ(-40-1000),+100*10 */ - float fMinTemperature;//¶,ȷСһλ(-40-1000),+100*10 */ - float fAverageTemperature;//ƽ¶,ȷСһλ(-40-1000),+100*10 */ - float fTemperatureDiff;//²,ȷСһλ(-40-1000),+100*10 */ - NET_VCA_POLYGON struRegion;//ߣ궨Ϊ򡱻ߡߡʱЧ + float fMaxTemperature;//最高温度,精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + float fMinTemperature;//最低温度,精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + float fAverageTemperature;//平均温度,精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + float fTemperatureDiff;//温差,精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + NET_VCA_POLYGON struRegion;//区域、线(当规则标定类型为“框”或者“线”的时候生效) BYTE byRes[20]; }NET_SDK_REGION_THERMOMETRY, *LPNET_SDK_REGION_THERMOMETRY; typedef struct tagNET_SDK_MANUALTHERM_RULE { - BYTE byRuleID;//ID 0-ʾЧ1ʼ listڲжЧԣ - BYTE byEnable;//Ƿ + BYTE byRuleID;//规则ID 0-表示无效,从1开始 (list内部判断数据有效性) + BYTE byEnable;//是否启用 BYTE byRes1[2]; - char szRuleName[NAME_LEN/*32*/];// - BYTE byRuleCalibType;//궨 0-㣬1-2- + char szRuleName[NAME_LEN/*32*/];//规则名称 + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2-线 BYTE byRes2[3]; - NET_SDK_POINT_THERMOMETRY struPointTherm;//£궨Ϊ0-ʱЧ - NET_SDK_REGION_THERMOMETRY struRegionTherm; //£궨Ϊ1-2-ʱЧ + NET_SDK_POINT_THERMOMETRY struPointTherm;//点测温,当标定为0-点时生效 + NET_SDK_REGION_THERMOMETRY struRegionTherm; //区域测温,当标定为1-框、2-线时生效。 BYTE byRes[512]; }NET_SDK_MANUALTHERM_RULE, *LPNET_SDK_MANUALTHERM_RULE; typedef struct tagNET_SDK_MANUAL_THERMOMETRY { - DWORD dwSize;//ṹС - DWORD dwChannel;//ͨ - DWORD dwRelativeTime; // ʱֻ꣨ - DWORD dwAbsTime; // ʱֻ꣨ - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) - BYTE byDataType;//״̬:0-У1-ʼ2-ֻ + DWORD dwSize;//结构体大小 + DWORD dwChannel;//通道号 + DWORD dwRelativeTime; // 相对时标(只读) + DWORD dwAbsTime; // 绝对时标(只读) + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + BYTE byDataType;//数据状态类型:0-检测中,1-开始,2-结束(只读) BYTE byRes1[6]; NET_SDK_MANUALTHERM_RULE struRuleInfo; BYTE byRes[512]; @@ -45139,173 +45139,173 @@ typedef struct tagNET_SDK_MANUAL_THERMOMETRY typedef struct tagNET_SDK_MANUALTHERM_BASICPARAM { DWORD dwSize; - WORD wDistance;//(m)[0, 10000] - BYTE byDistanceUnit;//뵥λ: 0-ףm1-Ӣߣfeet,2-(centimeter) - BYTE byRes1[1]; // - float fEmissivity;//( ȷСλ)[0.01, 1.00](ı) - BYTE byRes[64]; // + WORD wDistance;//距离(m)[0, 10000] + BYTE byDistanceUnit;//距离单位: 0-米(m),1-英尺(feet),2-厘米(centimeter) + BYTE byRes1[1]; //保留 + float fEmissivity;//发射率(发射率 精确到小数点后两位)[0.01, 1.00](即:物体向外辐射能量的本领) + BYTE byRes[64]; //保留 }NET_SDK_MANUALTHERM_BASICPARAM, *LPNET_SDK_MANUALTHERM_BASICPARAM; typedef struct tagNET_SDK_FIRESHIELDMASK_REGION { DWORD dwSize; - BYTE byMaskID;//ID1~24 - BYTE byEnabled;// ʹܣ0~ã1~ - BYTE byShieldZoom;//αʣ0~32δڵڸֵĹѧ䱶 - BYTE byMaskType;//ɫͣ0-ɫ1-ɫ2-ɫ3-ɫ4-ɫ5-ɫ6-͸7-͸8- - BYTE byRegionType;//ͣԤ0-ı - BYTE byShowEnabled; //ʾʹܣòΪֻʹΪfalseϲ㲻ʾϢTrueΪʾϢ - BYTE byRes1[2]; // - char szMaskName[NAME_LEN/*32*/];//α - NET_VCA_POLYGON struRegion;// - BYTE byRes[32]; // + BYTE byMaskID;//区域ID,1~24 + BYTE byEnabled;// 单个火点屏蔽区域使能,0~不启用,1~启用 + BYTE byShieldZoom;//屏蔽倍率,0~32倍。屏蔽大于等于该值的光学变倍。 + BYTE byMaskType;//屏蔽区域颜色类型,0-灰色,1-红色,2-黄色,3-蓝色,4-橙色,5-绿色,6-透明,7-半透明,8-马赛克 + BYTE byRegionType;//区域类型(预留)0-四边形 + BYTE byShowEnabled; //区域显示使能,该参数为只读,若该使能为false则上层不显示该区域相关信息。True为显示该区域相关信息 + BYTE byRes1[2]; //保留 + char szMaskName[NAME_LEN/*32*/];//屏蔽标题 + NET_VCA_POLYGON struRegion;//屏蔽区域 + BYTE byRes[32]; //保留 }NET_SDK_FIRESHIELDMASK_REGION, *LPNET_SDK_FIRESHIELDMASK_REGION; #define MAX_FIRESHIELDMASK_REGION 24 typedef struct tagNET_SDK_FIRESHIELDMASK_CFG { DWORD dwSize; - BYTE byEnabled;// ʹܣ0~ã1~ - BYTE byShieldAreaTransparency;//͸ 0-͸ 1-͸ 2-͸ - BYTE byDisplayShieldAreaEnabled;//ʹ - BYTE byRes1[1]; // - NET_SDK_FIRESHIELDMASK_REGION struMaskRegion[MAX_FIRESHIELDMASK_REGION/*24*/];// - BYTE byRes[256]; // + BYTE byEnabled;// 火点区域屏蔽使能,0~不启用,1~启用 + BYTE byShieldAreaTransparency;//屏蔽区域透明度 0-不透明 1-透明 2-半透明 + BYTE byDisplayShieldAreaEnabled;//码流叠加屏蔽区域使能 + BYTE byRes1[1]; //保留 + NET_SDK_FIRESHIELDMASK_REGION struMaskRegion[MAX_FIRESHIELDMASK_REGION/*24*/];//火点屏蔽区域 + BYTE byRes[256]; //保留 }NET_SDK_FIRESHIELDMASK_CFG, *LPNET_SDK_FIRESHIELDMASK_CFG; typedef struct tagNET_SDK_SMOKESHIELDMASK_REGION { DWORD dwSize; - BYTE byMaskID;//ID1~24 - BYTE byEnabled;// ʹܣ0~ã1~ - BYTE byShieldZoom;//αʣ0~32δڵڸֵĹѧ䱶 - BYTE byMaskType;//ɫͣ0-ɫ1-ɫ2-ɫ3-ɫ4-ɫ5-ɫ6-͸7-͸8- - BYTE byRegionType;//ͣԤ0-ı - BYTE byShowEnabled;// ʾʹܣòΪֻʹΪfalseϲ㲻ʾϢTrueΪʾϢ - BYTE byRes1[2]; // - char szMaskName[NAME_LEN/*32*/];//α - NET_VCA_POLYGON struRegion;// - BYTE byRes[32]; // + BYTE byMaskID;//区域ID,1~24 + BYTE byEnabled;// 单个烟雾屏蔽区域使能,0~不启用,1~启用 + BYTE byShieldZoom;//屏蔽倍率,0~32倍。屏蔽大于等于该值的光学变倍。 + BYTE byMaskType;//屏蔽区域颜色类型,0-灰色,1-红色,2-黄色,3-蓝色,4-橙色,5-绿色,6-透明,7-半透明,8-马赛克 + BYTE byRegionType;//区域类型(预留)0-四边形 + BYTE byShowEnabled;// 区域显示使能,该参数为只读,若该使能为false则上层不显示该区域相关信息。True为显示该区域相关信息 + BYTE byRes1[2]; //保留 + char szMaskName[NAME_LEN/*32*/];//屏蔽标题 + NET_VCA_POLYGON struRegion;//屏蔽区域 + BYTE byRes[32]; //保留 }NET_SDK_SMOKESHIELDMASK_REGION, *LPNET_SDK_SMOKESHIELDMASK_REGION; #define MAX_SMOKESHIELDMASK_REGION 24 typedef struct tagNET_SDK_SMOKESHIELDMASK_CFG { DWORD dwSize; - BYTE byEnabled;// ʹܣ0~ã1~ - BYTE byShieldAreaTransparency;//͸ 0-͸ 1-͸ 2-͸ - BYTE byDisplayShieldAreaEnabled;//ʹ - BYTE byRes1[1]; // - NET_SDK_SMOKESHIELDMASK_REGION struMaskRegion[MAX_SMOKESHIELDMASK_REGION/*24*/];// - BYTE byRes[256]; // + BYTE byEnabled;// 烟雾区域屏蔽使能,0~不启用,1~启用 + BYTE byShieldAreaTransparency;//屏蔽区域透明度 0-不透明 1-透明 2-半透明 + BYTE byDisplayShieldAreaEnabled;//码流叠加屏蔽区域使能 + BYTE byRes1[1]; //保留 + NET_SDK_SMOKESHIELDMASK_REGION struMaskRegion[MAX_SMOKESHIELDMASK_REGION/*24*/];//烟雾屏蔽区域 + BYTE byRes[256]; //保留 }NET_SDK_SMOKESHIELDMASK_CFG, *LPNET_SDK_SMOKESHIELDMASK_CFG; typedef struct tagNET_SDK_AREASCAN_CFG { DWORD dwSize; - BYTE byScanState;//ɨ赱ǰ״̬0Ϊδã1ΪãòΪֻ - BYTE byRes[259]; // + BYTE byScanState;//区域扫描当前设置状态,0为未设置,1为已设置(该参数为只读) + BYTE byRes[259]; //保留 }NET_SDK_AREASCAN_CFG, *LPNET_SDK_AREASCAN_CFG; typedef struct tagNET_SDK_FIRESHIELDMASK_COND { DWORD dwSize; - DWORD dwChannel;//ͨ - BYTE byRegionID;//ID1~24. - BYTE byRes[127]; // + DWORD dwChannel;//通道号 + BYTE byRegionID;//区域ID,1~24. + BYTE byRes[127]; //保留 }NET_SDK_FIRESHIELDMASK_COND, *LPNET_SDK_FIRESHIELDMASK_COND; typedef struct tagNET_SDK_SMOKESHIELDMASK_COND { DWORD dwSize; - DWORD dwChannel;//ͨ - BYTE byRegionID;//ID1~24. - BYTE byRes[127]; // + DWORD dwChannel;//通道号 + BYTE byRegionID;//区域ID,1~24. + BYTE byRes[127]; //保留 }NET_SDK_SMOKESHIELDMASK_COND, *LPNET_SDK_SMOKESHIELDMASK_COND; -//̹ƻ +//子罗盘关联防破坏参数 typedef struct tagNET_DVR_VANDALPROOFALARM_CFG { - DWORD dwSize;//ṹС - BYTE bySensitivity;//[1,100] (֧ãֵԽ״ֵԽСԽѴ) - BYTE byUploadEnabled;//÷ƻϴʹ 0-ã1- - BYTE byVoiceWarningEnabled;//÷ƻʾʹ 0-ã1- - BYTE byEnable;// üƻ 0-رգ1-ʼ + DWORD dwSize;//结构体大小 + BYTE bySensitivity;//灵敏度[1,100] (支持灵敏度配置,灵敏度值大,越容易触发,值越小,越难触发) + BYTE byUploadEnabled;//启用防破坏报警上传使能 0-不启用,1-启用 + BYTE byVoiceWarningEnabled;//启用防破坏报警语音提示使能 0-不启用,1-启用 + BYTE byEnable;// 启用检测防破坏报警 0-关闭,1-开始 BYTE byRes[124]; }NET_DVR_VANDALPROOFALARM_CFG,*LPNET_DVR_VANDALPROOFALARM_CFG; typedef struct tagNET_DVR_AZIMUTHINFO { - DWORD dwSize;//ṹС - float fDegree;//λǶ(ȷСλ) - BYTE byAzimuth; //λϢ 0-,1-,2-,3-,4-,5-,6-,7- + DWORD dwSize;//结构体大小 + float fDegree;//方位角度数(精确到小数点后两位) + BYTE byAzimuth; //方位角信息 0-东北,1-西北,2-东南,3-西南,4-东,5-西,6-南,7-北 BYTE byRes[127]; }NET_DVR_AZIMUTHINFO,*LPNET_DVR_AZIMUTHINFO; -//ָ̽ṹ +//电子罗盘矫正、指向正北控制条件结构 typedef struct tagNET_DVR_COMPASS_COND { - DWORD dwSize;//ṹС - DWORD dwChannel;//ͨ + DWORD dwSize;//结构体大小 + DWORD dwChannel;//通道号 BYTE byRes[128]; }NET_DVR_COMPASS_COND,*LPNET_DVR_COMPASS_COND; typedef struct tagNET_DVR_POSITION_CFG { - DWORD dwSize;//ṹС - BYTE bySoftWorkMode;//ģʽ 0-Զ1-ֶ + DWORD dwSize;//结构体大小 + BYTE bySoftWorkMode;//工作模式 0-自动,1-手动 BYTE byRes[127]; }NET_DVR_POSITION_CFG,*LPNET_DVR_POSITION_CFG; typedef struct tagNET_DVR_STREAMING_COND { - DWORD dwSize;//ṹС - DWORD dwChannel;//ͨ - BYTE byStreamType;//0-1-2-3 + DWORD dwSize;//结构体大小 + DWORD dwChannel;//通道号 + BYTE byStreamType;//码流类型0-主码流,1-子码流,2-码流3 BYTE byRes[127]; }NET_DVR_STREAMING_COND,*LPNET_DVR_STREAMING_COND; -//Ƕλ +//卫星定位参数配置 typedef struct tagNET_DVR_SATELLITETIME_CFG { - DWORD dwSize;//ṹС - BYTE byEnable;//ǶλУʱʹ 0-1- + DWORD dwSize;//结构体大小 + BYTE byEnable;//卫星定位校时使能 0-不开启,1-开启 BYTE byRes; - WORD wTimeInterval;//Уʱʱ(s) + WORD wTimeInterval;//校时时间间隔(s) BYTE byRes1[124]; }NET_DVR_SATELLITETIME_CFG,*LPNET_DVR_SATELLITETIME_CFG; -#define MAX_SIGNAL_JOINT_NUM 64 //ƴӹģ +#define MAX_SIGNAL_JOINT_NUM 64 //最大的拼接规模 typedef struct tagNET_DVR_SIGNAL_JOINT_CFG { DWORD dwSize; - BYTE sCamName[NAME_LEN] ; //ƴӺźԴ - BYTE byEnable; //ʹܣ0-ʹ !0-ʹ - BYTE byCamMode ; //ƴӺźԴͣNET_DVR_CAM_JOINT - BYTE byRows ; //ƴ - BYTE byColumns ; //ƴ - DWORD dwSignalNo[MAX_SIGNAL_JOINT_NUM]; //źԴ,ǰbyRows* byColumnsЧ - DWORD dwJointNo; //ƴӱţȡЧ - DWORD dwSignalNoJoint; //ƴӺźԴţȡЧ + BYTE sCamName[NAME_LEN] ; //拼接后信号源名称 + BYTE byEnable; //使能,0-不使能 !0-使能 + BYTE byCamMode ; //拼接后信号源类型,NET_DVR_CAM_JOINT + BYTE byRows ; //拼接行数 + BYTE byColumns ; //拼接列数 + DWORD dwSignalNo[MAX_SIGNAL_JOINT_NUM]; //信号源号,前byRows* byColumns项有效 + DWORD dwJointNo; //拼接编号(获取有效) + DWORD dwSignalNoJoint; //拼接后的信号源号(获取有效) BYTE byRes[64]; } NET_DVR_SIGNAL_JOINT_CFG, *LPNET_DVR_SIGNAL_JOINT_CFG; typedef struct tagNET_DVR_SIGNAL_CUTPARAM { DWORD dwSize; - DWORD dwSignalNo; //źԴ - DWORD dwCutTop; //Ϸüֵ,0ԭ - DWORD dwCutBottom; //·üֵ,0ԭ - DWORD dwCutLeft; //߲üֵ,0ԭ - DWORD dwCutRight; //ұ߲üֵ,0ԭ + DWORD dwSignalNo; //信号源号 + DWORD dwCutTop; //上方裁剪像素值,0代表还原 + DWORD dwCutBottom; //下方裁剪像素值,0代表还原 + DWORD dwCutLeft; //左边裁剪像素值,0代表还原 + DWORD dwCutRight; //右边裁剪像素值,0代表还原 BYTE byRes2[32]; } NET_DVR_SIGNAL_CUTPARAM, *LPNET_DVR_SIGNAL_CUTPARAM; typedef struct tagNET_DVR_WALL_RELATION_CFG { DWORD dwSize; - BYTE byEnable; // 0- !0- - BYTE byRealWallNo ; //ǽ + BYTE byEnable; //关联, 0-不关联 !0-关联 + BYTE byRealWallNo ; //物理墙号 BYTE byRes[14] ; }NET_DVR_WALL_RELATION_CFG, *LPNET_DVR_WALL_RELATION_CFG; @@ -45314,37 +45314,37 @@ typedef struct tagNET_DVR_INPUTSTREAMCFG_V40 { DWORD dwSize ; BYTE byValid ; // - BYTE byCamMode ;//NET_DVR_CAM_MODE - WORD wInputNo ; //źԴ + BYTE byCamMode ;//见NET_DVR_CAM_MODE + WORD wInputNo ; //信号源序号 BYTE sCamName[NAME_LEN] ; - NET_DVR_VIDEOEFFECT struVideoEffect ;//Ƶ - NET_DVR_PU_STREAM_CFG struPuStream ; //ipʱʹ - WORD wBoardNum ; //źԴڵİ忨ţֻܻȡ - WORD wInputIdxOnBoard ; //źԴڰ忨ϵλãֻܻȡ - DWORD dwResolution ;//ֱ - BYTE byVideoFormat ;//ƵʽVIDEO_STANDARD - BYTE byStatus; //źԴ״̬0-ֶЧ 1-ź 2-ź 3-쳣 - BYTE sGroupName[NAME_LEN/*32*/]; //źԴ - BYTE byJointMatrix ; //0- 1-źԴΪNET_DVR_CAM_BNCNET_DVR_CAM_VGANET_DVR_CAM_DVINET_DVR_CAM_HDMI,еһʱòЧ - BYTE byJointNo ; //ƴźԴƴӱ(ֻܻȡ) - BYTE byColorMode; //ɫģʽ 0-Զ 1- 2-ͨ 3-ͣΪԶʱʹstruVideoEffect - BYTE byScreenServer; //Ļ0-1- - BYTE byDevNo; //豸 + NET_DVR_VIDEOEFFECT struVideoEffect ;//视频参数 + NET_DVR_PU_STREAM_CFG struPuStream ; //ip输入时使用 + WORD wBoardNum ; //信号源所在的板卡号,只能获取 + WORD wInputIdxOnBoard ; //信号源在板卡上的位置,只能获取 + DWORD dwResolution ;//分辨率 + BYTE byVideoFormat ;//视频制式,见VIDEO_STANDARD + BYTE byStatus; //信号源状态,0-字段无效 1-有信号 2-无信号 3-异常 + BYTE sGroupName[NAME_LEN/*32*/]; //网络信号源分组 组名 + BYTE byJointMatrix ; //关联矩阵,0-不关联 1-关联,当输入信号源为NET_DVR_CAM_BNC,NET_DVR_CAM_VGA,NET_DVR_CAM_DVI,NET_DVR_CAM_HDMI,中的一种时,该参数有效。 + BYTE byJointNo ; //拼接信号源的拼接编号(只能获取) + BYTE byColorMode; //色彩模式, 0-自定义 1-锐利 2-普通 3-柔和,当为自定义时,使用struVideoEffect设置 + BYTE byScreenServer; //关联屏幕服务器,0-不联,1-关联 + BYTE byDevNo; //设备号 BYTE byRes1; - DWORD dwInputSignalNo; //źԴţ£ - BYTE byVideoEnctype; //Ƶͣ0-Ĭϣ1-Smart264 - BYTE byAudioEnctype; //Ƶ࣬0-Ĭϣ1-AUDIO_G711_A2-AUDIO_G711_U3- AUDIO_G722_1 - BYTE byWallStatus; //źԴǽ״̬0-Ч 1-ǽ 2- ǽ + DWORD dwInputSignalNo; //输入信号源编号(新) + BYTE byVideoEnctype; //视频编码类型,0-默认,1-Smart264 + BYTE byAudioEnctype; //音频编码类,0-默认,1-AUDIO_G711_A,2-AUDIO_G711_U,3- AUDIO_G722_1 + BYTE byWallStatus; //信号源上墙状态,0-无效 1-有上墙 2- 无上墙 BYTE byRes[117]; }NET_DVR_INPUTSTREAMCFG_V40, *LPNET_DVR_INPUTSTREAMCFG_V40 ; typedef struct tagNET_DVR_AUDIO_CONTROL_INFO { DWORD dwSize; - DWORD dwMonId;//ʾȫֱ - BYTE bySubWindowNum;//ʾӦӴں - BYTE byWallNo; //ǽ - BYTE byEnable; //Ƶأ0-أ1- + DWORD dwMonId;//显示器全局编号 + BYTE bySubWindowNum;//显示器对应子窗口号 + BYTE byWallNo; //墙号 + BYTE byEnable; //音频开关,0-关,1-开 BYTE byRes[13]; }NET_DVR_AUDIO_CONTROL_INFO,*LPNET_DVR_AUDIO_CONTROL_INFO; @@ -45353,156 +45353,156 @@ typedef struct tagNET_DVR_AUDIO_CONTROL_INFO typedef struct tagNET_DVR_INPUTSTREAM_PTZCFG_PARAM { DWORD dwSize; - WORD wPTZProtocol; //Эֵͣ + WORD wPTZProtocol; //控球协议类型,索引值 BYTE byRes[34]; }NET_DVR_INPUTSTREAM_PTZCFG_PARAM, *LPNET_DVR_INPUTSTREAM_PTZCFG_PARAM; -//·Ͷ ա2016γ1133.xlsx +//公路货车轴型定义 参照《2016治超分类1133.xlsx》 typedef enum { - AXLE_TYPE_UNKNOWN = 0x0000, //δ֪ - //2 - AXLE_TYPE_2AXLE_12 = 0x0200, //2ػ - //3 - AXLE_TYPE_3AXLE_122_1 = 0x0300, //3ҳг - AXLE_TYPE_3AXLE_122_2, //3½г - AXLE_TYPE_3AXLE_15, //3ػ - AXLE_TYPE_3AXLE_112, //3ػ - //4 - AXLE_TYPE_4AXLE_125_1 = 0x0400, //4ҳг - AXLE_TYPE_4AXLE_152, //4ҳг - AXLE_TYPE_4AXLE_125_2, //4½г - AXLE_TYPE_4AXLE_1222, //4ȫг - AXLE_TYPE_4AXLE_115, //4ػ - //5 - AXLE_TYPE_5AXLE_155_1 = 0x0500, //5ҳг - AXLE_TYPE_5AXLE_1125_1, //5ҳг - AXLE_TYPE_5AXLE_155_2, //5г - AXLE_TYPE_5AXLE_1125_2, //5г - AXLE_TYPE_5AXLE_129, //5г - AXLE_TYPE_5AXLE_1522, //5ȫг - AXLE_TYPE_5AXLE_11222, //5ȫг - //6 - AXLE_TYPE_6AXLE_159_1 = 0x0600, //6ҳг - AXLE_TYPE_6AXLE_159_2, //6ҳг - AXLE_TYPE_6AXLE_1155_1, //6ҳг - AXLE_TYPE_6AXLE_1155_2, //6ҳг - AXLE_TYPE_6AXLE_159_3, //6г - AXLE_TYPE_6AXLE_159_4, //6г - AXLE_TYPE_6AXLE_1129, //6г - AXLE_TYPE_6AXLE_11522_1, //6ȫҳ - AXLE_TYPE_6AXLE_11522_2, //6ȫҳ + AXLE_TYPE_UNKNOWN = 0x0000, //未知 + //2轴 + AXLE_TYPE_2AXLE_12 = 0x0200, //2轴载货汽车 + //3轴 + AXLE_TYPE_3AXLE_122_1 = 0x0300, //3轴中置轴挂车列车 + AXLE_TYPE_3AXLE_122_2, //3轴铰接列车 + AXLE_TYPE_3AXLE_15, //3轴载货汽车 + AXLE_TYPE_3AXLE_112, //3轴载货汽车 + //4轴 + AXLE_TYPE_4AXLE_125_1 = 0x0400, //4轴中置轴挂车列车 + AXLE_TYPE_4AXLE_152, //4轴中置轴挂车列车 + AXLE_TYPE_4AXLE_125_2, //4轴铰接列车 + AXLE_TYPE_4AXLE_1222, //4轴全挂汽车列车 + AXLE_TYPE_4AXLE_115, //4轴载货汽车 + //5轴 + AXLE_TYPE_5AXLE_155_1 = 0x0500, //5轴中置轴挂车列车 + AXLE_TYPE_5AXLE_1125_1, //5轴中置轴挂车列车 + AXLE_TYPE_5AXLE_155_2, //5轴铰链列车 + AXLE_TYPE_5AXLE_1125_2, //5轴铰链列车 + AXLE_TYPE_5AXLE_129, //5轴铰链列车 + AXLE_TYPE_5AXLE_1522, //5轴全挂汽车列车 + AXLE_TYPE_5AXLE_11222, //5轴全挂汽车列车 + //6轴 + AXLE_TYPE_6AXLE_159_1 = 0x0600, //6轴中置轴挂车列车 + AXLE_TYPE_6AXLE_159_2, //6轴中置轴挂车列车 + AXLE_TYPE_6AXLE_1155_1, //6轴中置轴挂车列车 + AXLE_TYPE_6AXLE_1155_2, //6轴中置轴挂车列车 + AXLE_TYPE_6AXLE_159_3, //6轴铰链列车 + AXLE_TYPE_6AXLE_159_4, //6轴铰链列车 + AXLE_TYPE_6AXLE_1129, //6轴铰链列车 + AXLE_TYPE_6AXLE_11522_1, //6轴全挂车 + AXLE_TYPE_6AXLE_11522_2, //6轴全挂车 }TRUCK_AXLE_MODEL; -//շѹ·ͨзѳͷ +//收费公路车辆通行费车型分类 typedef enum _TOOLWAY_VEHICLE_TYPE { - TOOLWAY_RESULT_OTHER = 0, //δ֪ - TOOLWAY_PASSENGER_VEHICLE_CLASS_1_MINI = 1, //1ͳ΢ - TOOLWAY_PASSENGER_VEHICLE_CLASS_1_SMALL = 2, //1ͳС - TOOLWAY_PASSENGER_VEHICLE_CLASS_2_MIDDLE = 3, //2ͳ - TOOLWAY_PASSENGER_VEHICLE_CLASS_2_TRAILER = 4, //2ͳóг - TOOLWAY_PASSENGER_VEHICLE_CLASS_3_LARGR = 5, //3ͳ - TOOLWAY_PASSENGER_VEHICLE_CLASS_4_LARGR = 6, //4ͳ - TOOLWAY_GOODS_VEHICLE_CLASS_1 = 7, //12 - TOOLWAY_GOODS_VEHICLE_CLASS_2 = 8, //22 - TOOLWAY_GOODS_VEHICLE_CLASS_3 = 9, //33 - TOOLWAY_GOODS_VEHICLE_CLASS_4 = 10, //44 - TOOLWAY_GOODS_VEHICLE_CLASS_5 = 11, //55 - TOOLWAY_GOODS_VEHICLE_CLASS_6 = 12, //66 - TOOLWAY_MOTOR_VEHICLE_CLASS_1 = 13, //1ҵ2 - TOOLWAY_MOTOR_VEHICLE_CLASS_2 = 14, //2ҵ2 - TOOLWAY_MOTOR_VEHICLE_CLASS_3 = 15, //3ҵ3 - TOOLWAY_MOTOR_VEHICLE_CLASS_4 = 16, //4ҵ4 - TOOLWAY_MOTOR_VEHICLE_CLASS_5 = 17, //5ҵ5 - TOOLWAY_MOTOR_VEHICLE_CLASS_6 = 18 //6ҵڵ6 + TOOLWAY_RESULT_OTHER = 0, //未知 + TOOLWAY_PASSENGER_VEHICLE_CLASS_1_MINI = 1, //1类客车微型 + TOOLWAY_PASSENGER_VEHICLE_CLASS_1_SMALL = 2, //1类客车小型 + TOOLWAY_PASSENGER_VEHICLE_CLASS_2_MIDDLE = 3, //2类客车中型 + TOOLWAY_PASSENGER_VEHICLE_CLASS_2_TRAILER = 4, //2类客车乘用车列车 + TOOLWAY_PASSENGER_VEHICLE_CLASS_3_LARGR = 5, //3类客车大型 + TOOLWAY_PASSENGER_VEHICLE_CLASS_4_LARGR = 6, //4类客车大型 + TOOLWAY_GOODS_VEHICLE_CLASS_1 = 7, //1类货车2轴 + TOOLWAY_GOODS_VEHICLE_CLASS_2 = 8, //2类货车2轴 + TOOLWAY_GOODS_VEHICLE_CLASS_3 = 9, //3类货车3轴 + TOOLWAY_GOODS_VEHICLE_CLASS_4 = 10, //4类货车4轴 + TOOLWAY_GOODS_VEHICLE_CLASS_5 = 11, //5类货车5轴 + TOOLWAY_GOODS_VEHICLE_CLASS_6 = 12, //6类货车6轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_1 = 13, //1类作业车2轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_2 = 14, //2类作业车2轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_3 = 15, //3类作业车3轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_4 = 16, //4类作业车4轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_5 = 17, //5类作业车5轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_6 = 18 //6类作业车大于等于6轴 }TOOLWAY_VEHICLE_TYPE; -// +//车辆称重 typedef struct tagNET_DVR_VEHICLE_WEIGHT_RESULT_ { - BYTE byIsOverWeight; //Ƿ - BYTE byAxleNum; // - WORD wAxleModel; //ο enum TRUCK_AXLE_MODEL,Ըͽĸ - float fOverWeight; //()ʵֵ1000䣨ʵֵȷСλ - float fWeight; //()ʵֵ1000䣨ʵֵȷСλ - float fLimitWeight; //()ʵֵ1000䣨ʵֵȷСλ - float fAxleLen; //()ʵֵ100䣨ʵֵȷСλ - char sDevDescInfo[MAX_DEVDESC_LEN/*64*/]; //豸Ϣ - WORD wAxleWeight[MAX_TRUCK_AXLE_NUM/*10*/]; //λǧˣkgiԪرʾi - WORD wAxleDistance[MAX_TRUCK_AXLE_NUM/*10*/]; //࣬λ(mm).iԪرʾi͵i+1ļ - DWORD dwLength; //λcm - DWORD dwWidth; //λcm - DWORD dwHeight; //ߣλcm - BYTE byTollwayVehicleType; //շѹ·ͣοTOOLWAY_VEHICLE_TYPE - BYTE byRes2[11]; //Ԥ + BYTE byIsOverWeight; //是否超限 + BYTE byAxleNum; //轴数 + WORD wAxleModel; //参考 enum TRUCK_AXLE_MODEL,可以根据类型解析出轴的个数 + float fOverWeight; //超限重量(吨),实际值扩大1000倍传输(实际值精确到小数点后三位) + float fWeight; //车身重量(吨),实际值扩大1000倍传输(实际值精确到小数点后三位) + float fLimitWeight; //限制重量(吨),实际值扩大1000倍传输(实际值精确到小数点后三位) + float fAxleLen; //轴距(米),实际值扩大100倍传输(实际值精确到小数点后两位) + char sDevDescInfo[MAX_DEVDESC_LEN/*64*/]; //设备描述信息 + WORD wAxleWeight[MAX_TRUCK_AXLE_NUM/*10*/]; //车轴重量,单位千克(kg)第i个元素表示第i个轴重 + WORD wAxleDistance[MAX_TRUCK_AXLE_NUM/*10*/]; //车轴间距,单位毫米(mm).第i个元素表示第i轴和第i+1轴的间距 + DWORD dwLength; //车长,单位cm + DWORD dwWidth; //车宽,单位cm + DWORD dwHeight; //车高,单位cm + BYTE byTollwayVehicleType; //收费公路车型,参考TOOLWAY_VEHICLE_TYPE + BYTE byRes2[11]; //预留 }NET_DVR_VEHICLE_WEIGHT_RESULT, *LPNET_DVR_VEHICLE_WEIGHT_RESULT; -// Ƽ +// 车牌检测结果 typedef struct tagNET_DVR_PLATE_RESULT_V50 { - DWORD dwSize; //ṹ - DWORD dwMatchNo; //ƥ,(,,)ƥ - BYTE byGroupNum; //ͼƬһץĵһͼƬʱƥݣ - BYTE byPicNo; //ĵͼƬţյͼƬ󣬱ʾ;ճʱͼƬʱҪɾ - BYTE bySecondCam; //ǷڶץģԶץĵԶǰץĵĺĿлõ - BYTE byFeaturePicNo; //Ƶ羯ȡڼͼΪдͼ,0xff-ʾȡ - BYTE byDriveChan; // - BYTE byVehicleType; //ͣοVTR_RESULT - BYTE byDetSceneID;//ⳡ[1,4], IPCĬ0 - //ԣλʾ0- ޸(ͨ)bit1- Ʊ공(ı־)bit2- ΣƷֵ0- 1- - //ýڵѲʹ,ʹbyYellowLabelCarbyDangerousVehiclesжǷƱ공ΣƷ + DWORD dwSize; //结构长度 + DWORD dwMatchNo; //匹配序号,由(车辆序号,数据类型,车道号)组成匹配码 + BYTE byGroupNum; //图片组数量(一辆过车相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据) + BYTE byPicNo; //连拍的图片序号(接收到图片组数量后,表示接收完成;接收超时不足图片组数量时,根据需要保留或删除) + BYTE bySecondCam; //是否第二相机抓拍(如远近景抓拍的远景相机,或前后抓拍的后相机,特殊项目中会用到) + BYTE byFeaturePicNo; //闯红灯电警,取第几张图作为特写图,0xff-表示不取 + BYTE byDriveChan; //触发车道号 + BYTE byVehicleType; //车辆类型,参考VTR_RESULT + BYTE byDetSceneID;//检测场景号[1,4], IPC默认是0 + //车辆属性,按位表示,0- 无附加属性(普通车),bit1- 黄标车(类似年检的标志),bit2- 危险品车辆,值:0- 否,1- 是 + //该节点已不再使用,使用下面的byYellowLabelCar和byDangerousVehicles判断是否黄标车和危险品车 BYTE byVehicleAttribute; - WORD wIllegalType; //ΥͲù궨 - BYTE byIllegalSubType[8]; //Υ - BYTE byPostPicNo; //ΥʱȡڼͼƬΪͼ,0xff-ʾȡ - BYTE byChanIndex; //ͨţ - WORD wSpeedLimit; //ޣʱЧ - BYTE byChanIndexEx; //byChanIndexEx*256+byChanIndexʾʵͨš - BYTE byVehiclePositionControl; /*λò־,0~Ϊͨʶ𱨾,1~Ϊλò - (ͨPUT /ISAPI/Traffic/channels//vehiclePositionControl?format=json)*/ - NET_DVR_PLATE_INFO struPlateInfo; //Ϣṹ - NET_DVR_VEHICLE_INFO struVehicleInfo; //Ϣ - BYTE byMonitoringSiteID[48]; //ʾ - BYTE byDeviceID[48]; //豸 - BYTE byDir; //ʾ1-У򣩣2-()3-˫4-ɶ5-,6-򶫣7-ɱϣ8- - BYTE byDetectType; //ⷽʽ,1-ظд2-Ƶ3-֡ʶ4-״ﴥ - //ͣοITC_RELA_LANE_DIRECTION_TYPE - //òΪŶӦȷΨһԡ + WORD wIllegalType; //违章类型采用国标定义 + BYTE byIllegalSubType[8]; //违章子类型 + BYTE byPostPicNo; //违章时取第几张图片作为卡口图,0xff-表示不取 + BYTE byChanIndex; //通道号(保留) + WORD wSpeedLimit; //限速上限(超速时有效) + BYTE byChanIndexEx; //byChanIndexEx*256+byChanIndex表示真实通道号。 + BYTE byVehiclePositionControl; /*车辆位置布防标志,0~为普通车牌识别报警,1~为车辆位置布防触发报警 + (即通过PUT /ISAPI/Traffic/channels//vehiclePositionControl?format=json触发)*/ + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byDir; //显示方向,1-上行(反向),2-下行(正向),3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其它 + BYTE byDetectType; //检测方式,1-地感触发,2-视频触发,3-多帧识别,4-雷达触发 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 BYTE byRelaLaneDirectionType; - BYTE byCarDirectionType; //ʻķ0ʾ£1ʾϣʵʳʻ֣,2ʾδ֪ - //wIllegalTypeΪʱʹøòwIllegalTypeΪֵʱwIllegalTypeΪ׼òЧ - DWORD dwCustomIllegalType; //ΥͶ(ûԶ) - /*Ϊ0~ָʽʱΪϵΥͣwIllegalTypedwCustomIllegalTypeЧֵΥ롣 - Ϊ1~ַʽʱpIllegalInfoBufЧϵΥͣwIllegalTypedwCustomIllegalTypeȻֵΥ*/ - BYTE* pIllegalInfoBuf; //ΥַϢṹָ룻ָNET_ITS_ILLEGAL_INFO - BYTE byIllegalFromatType; //ΥϢʽͣ 0~ָʽ 1~ַʽ - BYTE byPendant;// 0-ʾδ֪,1-2- - BYTE byDataAnalysis; //0-δ, 1-ѷ - BYTE byYellowLabelCar; //0-ʾδ֪, 1-ǻƱ공,2-Ʊ공 - BYTE byDangerousVehicles; //0-ʾδ֪, 1-ΣƷ,2-ΣƷ - //ֶΰPilotַΪʻCopilotַΪʻ - BYTE byPilotSafebelt;//0-ʾδ֪,1-ϵȫ,2-ϵȫ - BYTE byCopilotSafebelt;//0-ʾδ֪,1-ϵȫ,2-ϵȫ - BYTE byPilotSunVisor;//0-ʾδ֪,1-,2- - BYTE byCopilotSunVisor;//0-ʾδ֪, 1-,2- - BYTE byPilotCall;// 0-ʾδ֪, 1-绰,2-绰 - //0-բ1-δբ (רʷƥǷբɹı־) + BYTE byCarDirectionType; //车辆具体行驶的方向,0表示从上往下,1表示从下往上(根据实际车辆的行驶方向来的区分),2表示未知 + //当wIllegalType参数为空时,使用该参数。若wIllegalType参数为有值时,以wIllegalType参数为准,该参数无效。 + DWORD dwCustomIllegalType; //违章类型定义(用户自定义) + /*为0~数字格式时,为老的违章类型,wIllegalType、dwCustomIllegalType参数生效,赋值国标违法代码。 + 为1~字符格式时,pIllegalInfoBuf参数生效。老的违章类型,wIllegalType、dwCustomIllegalType参数依然赋值国标违法代码*/ + BYTE* pIllegalInfoBuf; //违法代码字符信息结构体指针;指向NET_ITS_ILLEGAL_INFO + BYTE byIllegalFromatType; //违章信息格式类型; 0~数字格式, 1~字符格式 + BYTE byPendant;// 0-表示未知,1-车窗有悬挂物,2-车窗无悬挂物 + BYTE byDataAnalysis; //0-数据未分析, 1-数据已分析 + BYTE byYellowLabelCar; //0-表示未知, 1-非黄标车,2-黄标车 + BYTE byDangerousVehicles; //0-表示未知, 1-非危险品车,2-危险品车 + //以下字段包含Pilot字符均为主驾驶,含Copilot字符均为副驾驶 + BYTE byPilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byCopilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byPilotSunVisor;//0-表示未知,1-不打开遮阳板,2-打开遮阳板 + BYTE byCopilotSunVisor;//0-表示未知, 1-不打开遮阳板,2-打开遮阳板 + BYTE byPilotCall;// 0-表示未知, 1-不打电话,2-打电话 + //0-开闸,1-未开闸 (专用于历史数据中相机根据名单匹配后,是否开闸成功的标志) BYTE byBarrierGateCtrlType; - BYTE byAlarmDataType;//0-ʵʱݣ1-ʷ - NET_DVR_TIME_V30 struSnapFirstPicTime;//˵ʱ(ms)ץĵһͼƬʱ䣩 - DWORD dwIllegalTime;//Υʱ䣨ms = ץһͼƬʱ - ץĵһͼƬʱ - DWORD dwPicNum; //ͼƬpicGroupNumͬϢͼƬͼƬϢstruVehicleInfoEx - NET_ITS_PICTURE_INFO struPicInfo[6]; //ͼƬϢ,Żص6ͼ - NET_DVR_VEHICLE_WEIGHT_RESULT struWeightResult; // - BYTE byRes[256]; //Ԥ + BYTE byAlarmDataType;//0-实时数据,1-历史数据 + NET_DVR_TIME_V30 struSnapFirstPicTime;//端点时间(ms)(抓拍第一张图片的时间) + DWORD dwIllegalTime;//违法持续时间(ms) = 抓拍最后一张图片的时间 - 抓拍第一张图片的时间 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[6]; //图片信息,单张回调,最多6张图,由序号区分 + NET_DVR_VEHICLE_WEIGHT_RESULT struWeightResult; //车辆称重 + BYTE byRes[256]; //预留 }NET_DVR_PLATE_RESULT_V50, *LPNET_DVR_PLATE_RESULT_V50; typedef struct _NET_DVR_NORMAL_SCHEDTIME_ { NET_DVR_SCHEDTIME struTime; - BYTE byAlarmType;//0-1-ز2-ʱ + BYTE byAlarmType;//0-外出布防,1-留守布防,2-即时布防 BYTE byRes[3]; }NET_DVR_NORMAL_SCHEDTIME,*LPNET_DVR_NORMAL_SCHEDTIME; @@ -45510,9 +45510,9 @@ typedef struct tagNET_DVR_SUBSYSTEM_ALARM { DWORD dwSize; NET_DVR_NORMAL_SCHEDTIME struNormalSchedtime[MAX_DAYS][MAX_TIMESEGMENT_V30]; - //ճƻʱ - BYTE byNormalSchedTimeOn; //ճƻǷ - BYTE byMandatoryAlarm;//0-ǿƲ1-ǿƲ ָǷΪ· + //日常计划布防时间段 + BYTE byNormalSchedTimeOn; //日常计划是否启用 + BYTE byMandatoryAlarm;//0-非强制布防,1-强制布防 指当防区有问题是是否为旁路布防 BYTE byRes[254]; }NET_DVR_SUBSYSTEM_ALARM,*LPNET_DVR_SUBSYSTEM_ALARM; @@ -45522,76 +45522,76 @@ typedef struct tagNET_DVR_SUBSYSTEM_ALARM typedef struct _NET_DVR_ALARM_PHONECFG { DWORD dwSize; - BYTE byEnable;//Ƿ 0-ã1- + BYTE byEnable;//是否启用 0-不启用,1-启用 BYTE byRes1[3]; BYTE byPhoneNumber[MAX_PHONE_NUM/*32*/]; - DWORD dwArmRight; //Ȩޣλbit0Ϊ1ʾϵͳ1вȨޣ - DWORD dwDisArmRight; //Ȩޣλbit0Ϊ1ʾϵͳ1гȨޣ - DWORD dwClearAlarmRight; //Ȩޣλbit0Ϊ1ʾϵͳ1Ȩޣ - BYTE byZoneReport[MAX_ALARMHOST_ALARMIN_NUM/*512*/]; //ͣ0-ϴ1-ϴ - DWORD dwNonZoneReport; //Ƿ bit0- bit1-ϵͳ״̬ bit2-ȡ bit3-Ա,bit4- bit5- bit6-Юֱ bit7-ָ bit8-· bit9-·ָ,bit10-̽״̬棨ߡߣ,bit11-̽״̬棨ѹǷѹ,bit12-Ƶ - BYTE byIntervalTime; //0-0s,1-10s,2-30s,3-1min,4-5min,5-10min,6-Զ壨1~5999s + DWORD dwArmRight; //布防权限,按位,bit0为1表示对子系统1有布防权限,依此类推 + DWORD dwDisArmRight; //撤防权限,按位,bit0为1表示对子系统1有撤防权限,依此类推 + DWORD dwClearAlarmRight; //消警权限,按位,bit0为1表示对子系统1有消警权限,依此类推 + BYTE byZoneReport[MAX_ALARMHOST_ALARMIN_NUM/*512*/]; //防区报告类型,0-不上传,1-上传 + DWORD dwNonZoneReport; //非防区报警报告 bit0-软防区报告 bit1-系统状态报告 bit2-取消报告 bit3-测试报告,bit4-布防报告 bit5-撤防报告 bit6-挟持报告 bit7-报警恢复报告 bit8-旁路报告 bit9-旁路恢复报告,bit10-探测器连接状态报告(上线、离线),bit11-探测器电量状态报告(电压正常、欠压),bit12-视频报警报告 + BYTE byIntervalTime; //0-0s,1-10s,2-30s,3-1min,4-5min,5-10min,6-自定义(1~5999s) BYTE byRes2; - WORD wDefineIntervalTime; //byIntervalTimeΪ6ʱЧԶʱ䣨1~5999s + WORD wDefineIntervalTime; //当byIntervalTime为6时有效,自定义时间(1~5999s) BYTE byRes3[128]; }NET_DVR_ALARM_PHONECFG, *LPNET_DVR_ALARM_PHONECFG; typedef struct tagNET_DVR_MODULE_INFO { DWORD dwSize; - BYTE byModuleType; //Ӵͣ1-̣2-3- 4-ģ + BYTE byModuleType; //外接触发器类型,1-键盘,2-触发器,3-防区 ,4-网络模块 BYTE byKeyBoardType; //1-LCD,2-LED - BYTE byTriggerType; // 1-ش 2-4·3-8·4-5-32· - BYTE byZoneType; //ͣ1-ط2-3-˫4-85-8·ģ, 6- - WORD wModuleAddress; //Ӵַչģ0~2550xFFFFʾЧ - BYTE byRes2[2]; // - char sModelInfo[32]; //ģϢ - char sDeviceVersionInfo[32]; //汾Ϣ - BYTE byRes[128]; // + BYTE byTriggerType; // 1-本地触发器, 2-4路触发器,3-8路触发器,4-单防区触发器,5-32路触发器 + BYTE byZoneType; //防区类型,1-本地防区,2-单防区,3-双防区,4-8防区,5-8路模拟量防区, 6-单防区触发器 + WORD wModuleAddress; //外接触发器地址,扩展模块从0~255,0xFFFF表示无效 + BYTE byRes2[2]; //保留 + char sModelInfo[32]; //模块信息 + char sDeviceVersionInfo[32]; //版本信息 + BYTE byRes[128]; //保留 }NET_DVR_MODULE_INFO,*LPNET_DVR_MODULE_INFO; typedef struct tagNET_DVR_ALARMHOST_DETECTOR_INFO { DWORD dwSize; - BYTE byDetectorSerialNo[16]; //̽к - DWORD dwAlarmIn; // - WORD wDetectorType; // ̽ͣDETECTOR_TYPE - BYTE byRes[126]; // + BYTE byDetectorSerialNo[16]; //探测器序列号 + DWORD dwAlarmIn; //防区号 + WORD wDetectorType; // 探测器类型,DETECTOR_TYPE + BYTE byRes[126]; //保留 }NET_DVR_ALARMHOST_DETECTOR_INFO, *LPNET_DVR_ALARMHOST_DETECTOR_INFO; typedef struct tagNET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40 { - BYTE byEnable;// 0- 1- + BYTE byEnable;// 0- 否,1- 是 BYTE byRes1[3]; NET_DVR_SCHEDDATE struDate; NET_DVR_OUTPUT_SCHEDULE struOutputSchedule[MAX_TIMESEGMENT_V30/*8*/]; - BYTE byTriggerIndex[MAX_ALARMHOST_ALARMOUT_NUM];//±ʾţֵ0-ã1- + BYTE byTriggerIndex[MAX_ALARMHOST_ALARMOUT_NUM];//下标表示触发器号,值0-不启用,1-启用 BYTE byRes2[64]; }NET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40,*LPNET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40; -//ʱ +//时控输出规则参数 typedef struct tagNET_DVR_OUTPUT_SCHEDULE_RULECFG_V40 { - DWORD dwSize; //ṹС - NET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40 struOutputRule[MAX_RULE_NUM/*8*/]; //֧8εĹãڶʱ/شֻҪʹһξͿ - BYTE byRes[64]; // + DWORD dwSize; //结构体大小 + NET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40 struOutputRule[MAX_RULE_NUM/*8*/]; //最多支持8个日期区段的规则配置,对于定时开/关触发器只需要使用一个日期区段就可以了 + BYTE byRes[64]; //保留 }NET_DVR_OUTPUT_SCHEDULE_RULECFG_V40,*LPNET_DVR_OUTPUT_SCHEDULE_RULECFG_V40; -//ʱ +//单个时控输出规则配置 typedef struct tagNET_DVR_ONE_OUTPUT_SCH_RULECFG_V40 { DWORD dwSize; NET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40 struOutputRule; - BYTE byRes[256]; // + BYTE byRes[256]; //保留 }NET_DVR_ONE_OUTPUT_SCH_RULECFG_V40,*LPNET_DVR_ONE_OUTPUT_SCH_RULECFG_V40; typedef struct tagNET_DVR_ALARM_CAPTRUE_CFG { DWORD dwSize; - BYTE byBeforeAlarmPic; //Ӧֱ¿ñǰͼƬ4CIF10ţ2CIF20ţCIF40ţQCIF80ţWD1:10,XVGA:10,720P:10,1080P:10 - BYTE byAfterAlarmPic; //Ӧֱ¿ñͼƬ 4CIF10ţ2CIF20ţCIF40ţQCIF80ţWD1:10,XVGA:10,720P:10,1080P:10 - WORD wInterval; //ʱ λs - BYTE byResolution; //ͼƬֱ1-CIF2-2CIF3-4CIF4-QCIF5-WD16-VGA,7-XVGA8-720P9-1080P - BYTE byRes[63]; // ֽ + BYTE byBeforeAlarmPic; //对应分辨率下可设置报警前图片最大数4CIF:10张,2CIF:20张,CIF:40张,QCIF:80张;WD1:10张,XVGA:10张,720P:10张,1080P:10张 + BYTE byAfterAlarmPic; //对应分辨率下可设置报警后图片最大数 4CIF:10张,2CIF:20张,CIF:40张,QCIF:80张;WD1:10张,XVGA:10张,720P:10张,1080P:10张 + WORD wInterval; //间隔时间 单位s + BYTE byResolution; //图片分辨率1-CIF,2-2CIF,3-4CIF,4-QCIF,5-WD1,6-VGA,7-XVGA,8-720P,9-1080P + BYTE byRes[63]; // 保留字节 }NET_DVR_ALARM_CAPTRUE_CFG, *LPNET_DVR_ALARM_CAPTRUE_CFG; #define PRIOR_SCHEDTIME 30 @@ -45601,25 +45601,25 @@ typedef struct _NET_DVR_PRIOR_SCHEDTIME_ DWORD dwSize; NET_DVR_SCHEDDATE struData; NET_DVR_NORMAL_SCHEDTIME struOneDayTime[8]; - BYTE byEnable; //Ƿ 0-ã1- + BYTE byEnable; //是否启用 0-不启用,1-启用 BYTE byRes1[3]; - BYTE bySubSystem[32];//ϵͳ±ʾϵͳ 0-֧֣1-֧ - BYTE byMandatoryAlarm;//0-ǿƲ1-ǿƲ ָǷΪ· + BYTE bySubSystem[32];//子系统,下标表示子系统号 0-不支持,1-支持 + BYTE byMandatoryAlarm;//0-非强制布防,1-强制布防 指当防区有问题是是否为旁路布防 BYTE byRes[63]; }NET_DVR_PRIOR_SCHEDTIME,*LPNET_DVR_PRIOR_SCHEDTIME; typedef struct tagNET_DVR_TAMPER_ALARMIN_PARAM { DWORD dwSize; - BYTE byTamperType; // 0-,1-2- - BYTE byUploadAlarmRecoveryReport; //Ƿϴָ棬0-ϴ1-ϴ + BYTE byTamperType; // 0-无,1-常开,2-常闭 + BYTE byUploadAlarmRecoveryReport; //是否上传防区报警恢复报告,0-不上传,1-上传 BYTE byRes1[2]; - BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // BYTE byAssociateSirenOut[8]; // 0 ʾ1 ֵΪ1ʾ 0 ʾ - BYTE byAssociateSirenOut[8]; // 0 ʾ1 ֵΪ1ʾ 0 ʾ - BYTE byTamperResistor; //裬λǧŷ 0-Ч 1-2.2 2--3.3, 3-4.7 4-5.6 5-8.2 0xff-Զ + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; //防区关联触发器 BYTE byAssociateSirenOut[8]; //警号输出 数组0 表示警号1 值为1表示输出 0 表示不输出 + BYTE byAssociateSirenOut[8]; //警号输出 数组0 表示警号1 值为1表示输出 0 表示不输出 + BYTE byTamperResistor; //防拆电阻,单位千欧 , 0-无效 1-2.2 ,2--3.3, 3-4.7 ,4-5.6 , 5-8.2 ,0xff-自定义 BYTE byRes2[3]; - float fTamperResistorManual;/*ֶ裬1.0-10.0ȷСһλλǧŷbyTamperResistorΪ0xffʱЧ*/ - BYTE byRes3[36]; // ֽ + float fTamperResistorManual;/*防拆手动电阻,1.0-10.0,精确到小数点后一位,单位千欧,byTamperResistor为0xff时有效*/ + BYTE byRes3[36]; // 保留字节 }NET_DVR_TAMPER_ALARMIN_PARAM, *LPNET_DVR_TAMPER_ALARMIN_PARAM; @@ -45627,21 +45627,21 @@ typedef struct tagNET_DVR_REMOTECONTROLLER_PERMISSION_CFG { DWORD dwSize; BYTE byEnable; - BYTE byAssociateNetUser;//û - WORD wRemoteCtrllerID;//ң 1ʼ - BYTE sDevSn[16];/*Ʒк*/ - BYTE byArmRight; /*0-޲Ȩޣ1-вȨ*/ - BYTE byDisArmRight; /*0-޳Ȩޣ1-гȨ*/ - BYTE byArmReportRight; /*0-޴Ȩޣ1-дȨ*/ - BYTE byDisArmReportRight;/*0-ϴȨޣ1-ϴȨ*/ - BYTE byClearAlarmRight; /*0-Ȩޣ1-Ȩ*/ - BYTE bySubSystemID; /* 豸(ң)ϵͳ,1~8 */ - BYTE byKeyboardAddr; /* ռ̵ĵַ,ʱ */ - BYTE byEnableDel; //ɾңû0-ɾ1-ɾ - BYTE byAlwaysOpenRight; /*Ƿ0-Ч1-2-*/ - BYTE byOpeningDirection; /*ŷ0-Ч1-ŷ2-ŷ*/ + BYTE byAssociateNetUser;//关联的网络用户编号 + WORD wRemoteCtrllerID;//遥控器号 从1开始 + BYTE sDevSn[16];/*产品序列号*/ + BYTE byArmRight; /*0-无布防权限,1-有布防权限*/ + BYTE byDisArmRight; /*0-无撤防权限,1-有撤防权限*/ + BYTE byArmReportRight; /*0-无传布防报告权限,1-有传布防报告权限*/ + BYTE byDisArmReportRight;/*0-无上传撤防报告权限,1-有上传撤防报告权限*/ + BYTE byClearAlarmRight; /*0-无消警权限,1-有消警权限*/ + BYTE bySubSystemID; /* 设备(遥控器)子系统号,1~8 */ + BYTE byKeyboardAddr; /* 接收键盘的地址,在配对时设置 */ + BYTE byEnableDel; //删除遥控器用户,0-禁用删除,1-启用删除 + BYTE byAlwaysOpenRight; /*是否允许常开:0-无效,1-不允许,2-允许*/ + BYTE byOpeningDirection; /*开门方向:0-无效,1-进门方向,2-出门方向*/ BYTE byRes3[2]; - BYTE byName[NAME_LEN]; //ң + BYTE byName[NAME_LEN]; //遥控器名称 BYTE byRes2[28]; }NET_DVR_REMOTECONTROLLER_PERMISSION_CFG, *LPNET_DVR_REMOTECONTROLLER_PERMISSION_CFG; @@ -45649,9 +45649,9 @@ typedef struct tagNET_DVR_REMOTECONTROLLER_PERMISSION_CFG typedef struct tagNET_DVR_KEYBOARD_CFG { DWORD dwSize; - BYTE byEnableLock; //Ƿü,0--, 1-- - BYTE byErrorTimes; //ụ̂ - WORD wLockTime; //ʱ䣬λ + BYTE byEnableLock; //是否启用键盘锁定,0--不启用, 1--启用 + BYTE byErrorTimes; //输入键盘用户密码错误次数(锁定键盘) + WORD wLockTime; //锁定键盘时间,单位秒 BYTE byRes[128]; }NET_DVR_KEYBOARD_CFG, *LPNET_DVR_KEYBOARD_CFG; @@ -45659,42 +45659,42 @@ typedef struct tagNET_DVR_KEYBOARD_CFG typedef struct tagNET_DVR_ALARMHOST_WIRELESS_BUSINESS_COND { DWORD dwSize; - BYTE byCommOperatorNum[NAME_LEN/*32*/];//ͨӪ̺ - BYTE byQueryCode[16];//ҵѯ - BYTE byBusinessType;//ҵ 0-ѣ1- + BYTE byCommOperatorNum[NAME_LEN/*32*/];//通信运营商号码 + BYTE byQueryCode[16];//业务查询代码 + BYTE byBusinessType;//业务类型 0-话费,1-流量 BYTE byRes[35]; }NET_DVR_ALARMHOST_WIRELESS_BUSINESS_COND, *LPNET_DVR_ALARMHOST_WIRELESS_BUSINESS_COND; typedef struct tagNET_DVR_ALARMHOST_WIRELESS_BUSINESS_INFO { DWORD dwSize; - BYTE by3GBusiness[1024];//3GҵͨŲѯ + BYTE by3GBusiness[1024];//3G业务通过短信查询 BYTE byRes[32]; }NET_DVR_ALARMHOST_WIRELESS_BUSINESS_INFO, *LPNET_DVR_ALARMHOST_WIRELESS_BUSINESS_INFO; typedef struct tagNET_DVR_PREVIEW_DELAY_CFG { DWORD dwSize; - WORD wdelayTime;//ӳԤʱ䣬λ + WORD wdelayTime;//延迟预览时间,单位:秒 BYTE byRes[130]; }NET_DVR_PREVIEW_DELAY_CFG, *LPNET_DVR_PREVIEW_DELAY_CFG; typedef struct tagNET_DVR_AUXILIARY_DEV_UPGRADE_PARAM { DWORD dwSize; - DWORD dwDevNo; //豸 - BYTE byDevType; //豸 0-,1-о,2-ģ,3-· 4-5-RS485չģ飬6-¿ģ飬7-ģ,8-ڹģ + DWORD dwDevNo; //设备号 + BYTE byDevType; //升级设备类型 0-键盘,1-机芯,2-网络模块,3-路由器 ,4-防区,5-RS485无线扩展模块,6-温控模块,7-电锁模块,8-网口供电模块 BYTE byRes[131]; }NET_DVR_AUXILIARY_DEV_UPGRADE_PARAM,*LPNET_DVR_AUXILIARY_DEV_UPGRADE_PARAM; typedef struct tagNET_DVR_CALL_ROOM_CFG { DWORD dwSize; - SHORT nFloorNumber; // - WORD wRoomNumber; // - BYTE byManageCenter; //Ƿй + SHORT nFloorNumber; //层号 + WORD wRoomNumber; //房间号 + BYTE byManageCenter; //是否呼叫管理中心 BYTE byRes1[3]; - BYTE byCalledName[64]; //׼sipģʽЧû, ֧֡ĸ@͡. + BYTE byCalledName[64]; //标准sip模式下有效,被叫用户名, 支持数字、字母、“@”和“.” BYTE byRes[60]; }NET_DVR_CALL_ROOM_CFG,*LPNET_DVR_CALL_ROOM_CFG; @@ -45704,575 +45704,575 @@ typedef struct tagNET_DVR_VIDEO_CALL_COND BYTE byRes[128]; }NET_DVR_VIDEO_CALL_COND,*LPNET_DVR_VIDEO_CALL_COND; -//ѶϢ +//审讯案件信息 typedef struct tagNET_DVR_INQUEST_CASE_INFO { DWORD dwSize; - BYTE sCaseNo[INQUEST_CASE_NO_LEN]; // - BYTE sCaseName[INQUEST_CASE_NAME_LEN]; //ƣ - BYTE sCustomInfo1[CUSTOM_INFO_LEN]; //ԶϢ1 - BYTE sCustomInfo2[CUSTOM_INFO_LEN]; //ԶϢ2 - BYTE sCustomInfo3[CUSTOM_INFO_LEN]; //ԶϢ3 - BYTE byShowCaseInfoTime; /* Ϣʾʱ,λ, ȡֵΧ1~60*/ - BYTE byShowCaseInfo; //ʼǷʾϢ0-ʾ1-ʾ - BYTE byPosition; //ʾλã0-ϣ1- - BYTE byRes1; // - BYTE byCustomInfo4[CUSTOM_INFO_LEN]; //ԶϢ4ʱֶЧ - BYTE byCustomInfo5[CUSTOM_INFO_LEN]; //ԶϢ5ʱֶЧ - BYTE byRes[128]; // + BYTE sCaseNo[INQUEST_CASE_NO_LEN]; //案件编号 + BYTE sCaseName[INQUEST_CASE_NAME_LEN]; //案件名称; + BYTE sCustomInfo1[CUSTOM_INFO_LEN]; //自定义信息1; + BYTE sCustomInfo2[CUSTOM_INFO_LEN]; //自定义信息2; + BYTE sCustomInfo3[CUSTOM_INFO_LEN]; //自定义信息3 + BYTE byShowCaseInfoTime; /* 案件信息显示时间,单位秒, 取值范围1~60秒*/ + BYTE byShowCaseInfo; //案件开始是否显示案件信息,0-不显示,1-显示 + BYTE byPosition; //案件显示位置,0-左上,1-左下 + BYTE byRes1; //保留 + BYTE byCustomInfo4[CUSTOM_INFO_LEN]; //自定义信息4,案件编号有内容时该字段无效 + BYTE byCustomInfo5[CUSTOM_INFO_LEN]; //自定义信息5,案件名称有内容时该字段无效 + BYTE byRes[128]; //保留 }NET_DVR_INQUEST_CASE_INFO, *LPNET_DVR_INQUEST_CASE_INFO; typedef struct tagNET_DVR_CASE_INFO_CTRL_PARA { DWORD dwSize; - DWORD dwChannel;//Ѷͨ - BYTE byShowCaseInfoTime; //ʾʱ + DWORD dwChannel;//审讯通道号 + BYTE byShowCaseInfoTime; //显示持续时间 BYTE byRes[131]; }NET_DVR_CASE_INFO_CTRL_PARAM, *LPNET_DVR_CASE_INFO_CTRL_PARA; typedef struct tagNET_DVR_INQUEST_USER_RIGHT_CFG { DWORD dwSize; - /*0: Ѷ¼ɾȨ*/ - BYTE byLocalRight[MAX_RIGHT]; /* Ȩ */ - /*0: ԶƵԤȨ*/ - BYTE byRemoteRight[MAX_RIGHT];/* ԶȨ */ - BYTE byNetAudioRight[MAX_CHANNUM_V40]; /* ԶƵԤȨޣ±ʾֵͨʾȨޣ0-Ȩޣ1-Ȩ*/ - BYTE byRes[512*9]; //9Ȩ޿չ + /*数组0: 审讯记录删除权限*/ + BYTE byLocalRight[MAX_RIGHT]; /* 本地权限 */ + /*数组0: 远程音频预览权限*/ + BYTE byRemoteRight[MAX_RIGHT];/* 远程权限 */ + BYTE byNetAudioRight[MAX_CHANNUM_V40]; /* 远程音频预览权限,数组下标表示通道,值表示有无权限,0-无权限,1-有权限*/ + BYTE byRes[512*9]; //保留9种权限可扩展 }NET_DVR_INQUEST_USER_RIGHT_CFG, *LPNET_DVR_INQUEST_USER_RIGHT_CFG; typedef struct tagNET_DVR_INQUEST_MIX_AUDIOIN_CFG { DWORD dwSize; - BYTE byEnable; //Ƿû0-ã1- - BYTE byRes1[3]; // - DWORD dwMixCnt; /*ͨ*/ - BYTE bySrcChan[MAX_MIX_CHAN_NUM]; /*±ʾͨţģͨIPͨ,ֵ0ʾ죬ֵ1ʾ*/ - BYTE byLineIn[MAX_LINE_IN_CHAN_NUM]; /*±ʾLine Inͨ,ֵ0ʾ죬ֵ1ʾ*/ - BYTE byMic[MAX_MIC_CHAN_NUM]; /*±ʾMicͨ,ֵ0ʾ죬ֵ1ʾ*/ - BYTE byMixAudioDelay; //ӳ٣λ֡Χ0-63 - BYTE byRes2[127]; // + BYTE byEnable; //是否启用混音,0-不启用,1-启用 + BYTE byRes1[3]; //保留 + DWORD dwMixCnt; /*混音的通道数*/ + BYTE bySrcChan[MAX_MIX_CHAN_NUM]; /*数组下标表示混音通道号(模拟通道、IP通道),数值0表示不混,数值1表示混入*/ + BYTE byLineIn[MAX_LINE_IN_CHAN_NUM]; /*数组下标表示混入Line In通道号,数值0表示不混,数值1表示混入*/ + BYTE byMic[MAX_MIC_CHAN_NUM]; /*数组下标表示混入Mic通道号,数值0表示不混,数值1表示混入*/ + BYTE byMixAudioDelay; //混音延迟,单位:帧,范围0-63 + BYTE byRes2[127]; //保留 }NET_DVR_INQUEST_MIX_AUDIOIN_CFG, *LPNET_DVR_INQUEST_MIX_AUDIOIN_CFG; typedef struct tagNET_DVR_FACECAPTURE_STATISTICS_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - NET_DVR_TIME_EX struStartTime; //ʼʱ - BYTE byReportType; //ͳƱͣ1-ձ2-ܱ3-±4-걨 - BYTE byStatType; //ͳƣBit0-ΣBit1-ԱBit2- - BYTE byEnableProgramStatistics; //Ƿ񰴽Ŀͳƣ0-1- + DWORD dwChannel; //通道号 + NET_DVR_TIME_EX struStartTime; //开始时间 + BYTE byReportType; //统计报表类型:1-日报表,2-周报表,3-月报表,4-年报表 + BYTE byStatType; //数据类型统计:Bit0-段,Bit1-性别,Bit2-人数 + BYTE byEnableProgramStatistics; //是否按节目统计,0-否,1-是 BYTE byRes1; - DWORD dwPlayScheduleNo; //Ŀͳʱճ̺ + DWORD dwPlayScheduleNo; //按节目统计时关联的日程号 BYTE byRes[120]; }NET_DVR_FACECAPTURE_STATISTICS_COND,*LPNET_DVR_FACECAPTURE_STATISTICS_COND; typedef struct tagNET_DVR_FILECOND_MEDICAL { - LONG lChannel;//ͨ - DWORD dwFileType;//¼ļ - //ţ0xffȫ0ʱ¼,1-ƶ 23-|ƶ 4-&ƶ 5- 6-ֶ¼,7-¼10-PIR11-߱12-ȱ13-ȫ¼14-ܽͨ¼ - //ţ0xffȫ0ʱ¼1-ƶ⣬2ӽ345-6ֶ¼7𶯱8-9-ܱ10-PIR11-߱12-ȱ13-ȫ¼14-ܽͨ¼ - DWORD dwIsLocked;//Ƿ 0-ļ,1-ļ, 0xffʾļ - DWORD dwUseCardNo;//Ƿʹÿ - BYTE sCardNumber[32];// - NET_DVR_TIME_SEARCH_COND struStartTime;//ʼʱ - NET_DVR_TIME_SEARCH_COND struStopTime;//ʱ + LONG lChannel;//通道号 + DWORD dwFileType;//录象文件类型 + //不带卡号,0xff-全部,0-定时录像,1-移动侦测 ,2-报警触发,3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像,7-智能录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件 + //带卡号,0xff-全部,0-定时录像,1-移动侦测,2-接近报警,3-出钞报警,4-进钞报警,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件 + DWORD dwIsLocked;//是否锁定 0-正常文件,1-锁定文件, 0xff表示所有文件 + DWORD dwUseCardNo;//是否使用卡号 + BYTE sCardNumber[32];//卡号 + NET_DVR_TIME_SEARCH_COND struStartTime;//开始时间 + NET_DVR_TIME_SEARCH_COND struStopTime;//结束时间 char szPatientID[64]; - DWORD dwBigFileType; // 0ΪͨƬ1Ϊļ + DWORD dwBigFileType; // 0为普通片段搜索,1为大文件搜索 BYTE byRes[252]; }NET_DVR_FILECOND_MEDICAL, *LPNET_DVR_FILECOND_MEDICAL; typedef struct tagNET_DVR_FIND_PICTURE_MEDICAL_PARAM { - DWORD dwSize; // ṹС - LONG lChannel; // ͨ - /* ҵͼƬ:0ʱץͼ1 ƶץͼ 2 ץͼ - 3 | ƶץͼ 4 & ƶץͼ 6 ֶץͼ , - 9-ͼƬ,10- PIR11- ߱12- ȱ, - 0xa Ԥʱͼ0xd , 0xe Խ⣬0xf ⣬ - 0x10 , 0x11-豸ػطʱͼ, 0x12-, - 0x13-,0x14-뿪,0x15-ǻ, - 0x16-Աۼ,0x17-˶,0x18-ͣ, - 0x19-Ʒ,0x1a-Ʒȡ, 0x1b-, - 0x1c-м,0x1d-ȡ֤¼,0x1e-,0x1f-ƻ, - 0x20-ֻ⣬0x21-Ԥ0x22-±, 0x23, 0x24Υͣ,0x25-Ŀץ,0x26-߲±,0x2a-,0x2b-ʸ,0x2c-Ŀʱ,0x2d-ȫñ,0x2e-ܽץ,0x2f-Ŀץ,0x30-ץĽģ, 0x31-Ŀ,0x32-, 0x33-, 0x34-ҵѯ,0x35-Ƿ̯,0xff- ȫ*/ + DWORD dwSize; // 结构体大小 + LONG lChannel; // 通道号 + /* 查找的图片类型:0定时抓图1 移动侦测抓图 2 报警抓图, + 3 报警 | 移动侦测抓图 4 报警 & 移动侦测抓图 6 手动抓图 , + 9-智能图片,10- PIR报警,11- 无线报警,12- 呼救报警, + 0xa 预览时截图,0xd 人脸侦测, 0xe 越界侦测,0xf 入侵区域侦测, + 0x10 场景变更侦测, 0x11-设备本地回放时截图, 0x12-智能侦测, + 0x13-进入区域侦测,0x14-离开区域侦测,0x15-徘徊侦测, + 0x16-人员聚集侦测,0x17-快速运动侦测,0x18-停车侦测, + 0x19-物品遗留侦测,0x1a-物品拿取侦测, 0x1b-车牌侦测, + 0x1c-混行检测,0x1d-取证事件,0x1e-火点检测,0x1f-防破坏检测, + 0x20-船只检测,0x21-测温预警,0x22-测温报警, 0x23测差报警, 0x24违停检测,0x25-目标抓拍,0x26-离线测温报警,0x2a-起身检测,0x2b-折线攀高,0x2c-目标区域滞留超时,0x2d-安全帽检测,0x2e-周界抓拍,0x2f-人体目标抓拍,0x30-人脸抓拍建模, 0x31-混合目标检测,0x32-防区报警, 0x33-紧急求助, 0x34-业务咨询,0x35-非法摆摊,0xff- 全部类型*/ BYTE byFileType; - BYTE byNeedCard; // ǷҪ + BYTE byNeedCard; // 是否需要卡号 /* - 0-1-ģ2-3-壬4-5-ʣ6-7- - 8-9-10-11-ԥ12-ڣ13-14-棬 - 15-16-գ17-ӣ18-ɣ19-ɣ20-21-࣬ - 22-³23-24-£25-26-27-̨28- - 29-أ30-ۣ31-£32-ƣ33-㣬34-0xff-ȫ + 0-保留,1-澳,2-京,3-渝,4-闽,5-甘,6-粤,7-桂, + 8-贵,9-琼,10-冀,11-豫,12-黑,13-鄂,14-湘, + 15-吉,16-苏,17-赣,18-辽,19-蒙,20-宁,21-青, + 22-鲁,23-晋,24-陕,25-沪,26-川,27-台,28-津, + 29-藏,30-港,31-新,32-云,33-浙,34-皖,0xff-全部 */ - BYTE byProvince; //ʡֵ - BYTE byRes1; //ҽǷҪ󷵻Ϣ0-أ1- - NET_DVR_TIME struStartTime;//ͼƬĿʼʱ - NET_DVR_TIME struStopTime;// ͼƬĽʱ + BYTE byProvince; //省份索引值 + BYTE byRes1; //查找结果中是否要求返回人脸坐标信息,0-不返回,1-返回 + NET_DVR_TIME struStartTime;//查找图片的开始时间 + NET_DVR_TIME struStopTime;// 查找图片的结束时间 char szPatientID[64]; BYTE byRes[256]; }NET_DVR_FIND_PICTURE_MEDICAL_PARAM, *LPNET_DVR_FIND_PICTURE_MEDICAL_PARAM; typedef struct tagNET_DVR_SEXGROUP_PARAM_ { - DWORD dwMale;//У - DWORD dwFemale;//Ů + DWORD dwMale;//男(人数) + DWORD dwFemale;//女(人数) BYTE byRes[64]; }NET_DVR_SEXGROUP_PARAM,*LPNET_DVR_SEXGROUP_PARAM; typedef struct tagNET_DVR_FACECAPTURE_STATISTICS_RESULT_ { DWORD dwSize; - NET_DVR_TIME_EX struStartTime;/*ʼʱ*/ - NET_DVR_TIME_EX struEndTime;/*ʱ*/ - BYTE byStatType;//ͳƣBit0-ЧBit1-ԱЧBit2-Ч + NET_DVR_TIME_EX struStartTime;/*间隔开始时间*/ + NET_DVR_TIME_EX struEndTime;/*间隔结束时间*/ + BYTE byStatType;//数据类型统计:Bit0-段有效,Bit1-性别有效,Bit2-人数有效 BYTE byRes[7]; - DWORD dwPeopleNum;//ͳ + DWORD dwPeopleNum;//人数统计 BYTE byRes2[80]; - NET_DVR_SEXGROUP_PARAM struSexGroupParam;//Աͳ - NET_DVR_PROGRAM_INFO struProgramInfo; //ĿϢ + NET_DVR_SEXGROUP_PARAM struSexGroupParam;//性别人数统计 + NET_DVR_PROGRAM_INFO struProgramInfo; //节目信息 BYTE byRes1[76]; }NET_DVR_FACECAPTURE_STATISTICS_RESULT,*LPNET_DVR_FACECAPTURE_STATISTICS_RESULT; -//ȡͨṹ +//获取交通数据条件结构 typedef struct tagNET_DVR_TRAFFIC_DATA_QUERY_COND_ { DWORD dwSize; /* - Bit0-ͨЧ - Bit1-ʱЧ - Bit2-ƺЧ - Bit3-Ч - Bit4-ɫЧ - Bit5-ɫЧ - Bit6-Ч - Bit7-ƷЧ - Bit8-Ч - Bit9-ʾЧ - Bit10-ٶЧ - Bit11-ٶЧ - Bit12-Ч - Bit13-ʽЧ - Bit14-Υȡ֤Ч - Bit15-¼Ч - Bit16-ȡ֤Ч + Bit0-通道有效 + Bit1-时间有效 + Bit2-车牌号有效 + Bit3-车牌类型有效 + Bit4-车牌颜色有效 + Bit5-车身颜色有效 + Bit6-车辆类型有效 + Bit7-车辆品牌有效 + Bit8-车道号有效 + Bit9-显示方向有效 + Bit10-最低速度有效 + Bit11-最高速度有效 + Bit12-数据类型有效 + Bit13-布防方式类型有效 + Bit14-违法取证有效 + Bit15-事件类型有效 + Bit16-取证类型有效 */ - DWORD dwQueryCond;//ѯ 0ʾЧ1ʾЧ - DWORD dwChannel;//Ĭ1[1~32]bit0ʾͨ1bit31ʾͨ32 - NET_DVR_TIME_V30 struStartTime;//ʼʱ - NET_DVR_TIME_V30 struEndTime;//ʱ - char sLicense[MAX_LICENSE_LEN/*16*/];//(豸֧ģѯ, GB2312) + DWORD dwQueryCond;//查询条件 0表示无效,1表示有效 + DWORD dwChannel;//默认是1([1~32],bit0表示通道1,依次类推bit31表示通道32) + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + char sLicense[MAX_LICENSE_LEN/*16*/];//(设备支持模糊查询, GB2312编码) /* - Bit0-δ֪ - Bit1-׼óֳ - Bit2-02ʽó - Bit3-侯 - Bit4- - Bit5-ó˫β - Bit6-ʹݳ - Bit7-ũó - Bit8-Ħг + Bit0-未知(其他) + Bit1-标准民用车与特种车 + Bit2-02式民用车牌 + Bit3-武警车 + Bit4-警车 + Bit5-民用车双行尾牌 + Bit6-使馆车牌 + Bit7-农用车 + Bit8-摩托车 */ - DWORD dwPlateType;//ְ֧ͣλʾԸѡ + DWORD dwPlateType;//车牌类型(支持按位表示,可以复选) /* - Bit0-δ֪ - Bit1-ɫ - Bit2-ɫ - Bit3-ɫ - Bit4-ɫ - Bit5-ɫ + Bit0-未知(其他) + Bit1-黄色 + Bit2-白色 + Bit3-黑色 + Bit4-绿色 + Bit5-蓝色 */ - DWORD dwPlateColor;//ɫְ֧λʾԸѡ + DWORD dwPlateColor;//车牌颜色(支持按位表示,可以复选) /* - Bit0-δ֪ - Bit1-ɫ - Bit2-ɫ - Bit3-ɫ - Bit4-ɫ - Bit5-ɫ - Bit6-ɫ - Bit7-ɫ - Bit8-ɫ - Bit9-ɫ - Bit10-ɫ - Bit11-ɫ - Bit12-ɫ - Bit13-ɫ + Bit0-未知(其他) + Bit1-白色 + Bit2-银色 + Bit3-灰色 + Bit4-黑色 + Bit5-红色 + Bit6-深蓝色 + Bit7-蓝色 + Bit8-黄色 + Bit9-绿色 + Bit10-棕色 + Bit11-粉色 + Bit12-紫色 + Bit13-深灰色 */ - DWORD dwVehicleColor;//ɫְ֧λʾԸѡ + DWORD dwVehicleColor;//车身颜色(支持按位表示,可以复选) /* - Bit0-δ֪ - Bit1-ͳ - Bit2- - Bit3-γ - Bit4- - Bit5-С - Bit6- - Bit7-ֳ - Bit8-ֳ + Bit0-未知(其他) + Bit1-客车 + Bit2-大货车 + Bit3-轿车 + Bit4-面包车 + Bit5-小货车 + Bit6-行人 + Bit7-二轮车 + Bit8-三轮车 Bit9-SUV/MPV - Bit10-Ϳͳ + Bit10-中型客车 */ - DWORD dwVehicleType;//ְ֧ͣλʾԸѡ + DWORD dwVehicleType;//车辆类型(支持按位表示,可以复选) /** - Bit0- - Bit1- - Bit2- - Bit3- - Bit4- - Bit5-ѹ - Bit6- - Bit7-· - Bit8-ռ - Bit9-Υ - Bit10- - Bit11-Υ - Bit12-·ͣ - Bit13-̵ͣ - Bit14-δ - Bit15-Υͣ - Bit16-Υµͷ - Bit17-ռӦ - Bit18-δϵȫ + Bit0-其他(保留) + Bit1-低速 + Bit2-超速 + Bit3-逆行 + Bit4-闯红灯 + Bit5-压车道线 + Bit6-不按导向 + Bit7-路口滞留 + Bit8-机占非 + Bit9-违法变道 + Bit10-不按车道 + Bit11-违反禁令 + Bit12-路口停车 + Bit13-绿灯停车 + Bit14-未礼让行人 + Bit15-违章停车 + Bit16-违章掉头 + Bit17-占用应急车道 + Bit18-未系安全带 */ DWORD dwIllegalType; /** - Bit0- - Bit1-ӵ - Bit2-ͣ - Bit3- - Bit4- - Bit5- - Bit6- - Bit7-ѹ - Bit8-ֹ - Bit9- - Bit10- - Bit11-ͷ - Bit12-ռ - Bit13- + Bit0-其他(保留) + Bit1-拥堵 + Bit2-停车 + Bit3-逆行 + Bit4-行人 + Bit5-抛洒物 + Bit6-烟雾 + Bit7-压线 + Bit8-禁止名单 + Bit9-超速 + Bit10-变道 + Bit11-掉头 + Bit12-机占非 + Bit13-加塞 */ DWORD dwEventType; /** - Bit0- - Bit1-й·Υͣ - Bit2-ٹ·Υͣ - Bit3-ѹ - Bit4- - Bit5-Υ - Bit6-ռ + Bit0-其他(保留) + Bit1-城市公路违法停车 + Bit2-高速公路违法停车 + Bit3-压线 + Bit4-逆行 + Bit5-违法变道 + Bit6-机占非 */ DWORD dwForensiceType; - WORD wVehicleLogoRecog; //Ʒƣο"Ʒ.xlsx" ѡ - BYTE byLaneNo;//ţ0~255,0ų ʾ δ֪ - BYTE byDirection;//ʾ1-У2-У3-˫4-ɶ5-,6-򶫣7-ɱ - WORD wMinSpeed;//ٶȣ0~999λkm/h - WORD wMaxSpeed;//ٶȣ0~999λkm/h - BYTE byDataType;// 0-ݣ1-Υݣ2-ͨ¼3-ȡ֤ ѡ - BYTE byExecuteCtrl;// 0-1-ֹ0xff- + WORD wVehicleLogoRecog; //车辆主品牌,参考"车辆主品牌.xlsx" (仅单选) + BYTE byLaneNo;//车道号(0~255,0号车道 表示 车道号未知) + BYTE byDirection;//显示方向,1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南 + WORD wMinSpeed;//最低速度(0~999)单位km/h + WORD wMaxSpeed;//最高速度(0~999)单位km/h + BYTE byDataType;//数据类型 0-卡口数据,1-违法数据,2-交通事件,3-取证数据 (仅单选) + BYTE byExecuteCtrl;//布防 0-允许名单,1-禁止名单,0xff-其他 BYTE byRes[254]; }NET_DVR_TRAFFIC_DATA_QUERY_COND,*LPNET_DVR_TRAFFIC_DATA_QUERY_COND; -//ͨͼƬӽṹ +//交通图片参数子结构 typedef struct tagNET_DVR_TRAFFIC_PICTURE_PARAM_ { - NET_DVR_TIME_V30 struRelativeTime; //ץʱ - NET_DVR_TIME_V30 struAbsTime; //ץľʱ + NET_DVR_TIME_V30 struRelativeTime; //抓拍相对时标 + NET_DVR_TIME_V30 struAbsTime; //抓拍绝对时标 char szPicName[PICTURE_NAME_LEN/*64*/]; - BYTE byPicType;//ͼƬ 0-ͼ1-ץԭͼ2-ϳͼ3-дͼ + BYTE byPicType;//图片类型 0-车牌图,1-抓拍原图,2-合成图,3-特写图 BYTE byRes[63]; }NET_DVR_TRAFFIC_PICTURE_PARAM,*LPNET_DVR_TRAFFIC_PICTURE_PARAM; -//ͨݽṹ +//交通数据结构体 typedef struct tagNET_DVR_TRAFFIC_DATA_QUERY_RESULT_ { DWORD dwSize; - DWORD dwChannel;//Ĭ1[1~32] + DWORD dwChannel;//默认是1([1~32]) char sLicense[MAX_LICENSE_LEN/*16*/]; /* - Bit0-δ֪ - Bit1-׼óֳ - Bit2-02ʽó - Bit3-侯 - Bit4- - Bit5-ó˫β - Bit6-ʹݳ - Bit7-ũó - Bit8-Ħг + Bit0-未知(其他) + Bit1-标准民用车与特种车 + Bit2-02式民用车牌 + Bit3-武警车 + Bit4-警车 + Bit5-民用车双行尾牌 + Bit6-使馆车牌 + Bit7-农用车 + Bit8-摩托车 */ - DWORD dwPlateType;// + DWORD dwPlateType;//车牌类型 /* - Bit0-δ֪ - Bit1-ɫ - Bit2-ɫ - Bit3-ɫ - Bit4-ɫ - Bit5-ɫ + Bit0-未知(其他) + Bit1-黄色 + Bit2-白色 + Bit3-黑色 + Bit4-绿色 + Bit5-蓝色 */ - DWORD dwPlateColor;//ɫ + DWORD dwPlateColor;//车牌颜色 /* - Bit0-δ֪ - Bit1-ɫ - Bit2-ɫ - Bit3-ɫ - Bit4-ɫ - Bit5-ɫ - Bit6-ɫ - Bit7-ɫ - Bit8-ɫ - Bit9-ɫ - Bit10-ɫ - Bit11-ɫ - Bit12-ɫ - Bit13-ɫ + Bit0-未知(其他) + Bit1-白色 + Bit2-银色 + Bit3-灰色 + Bit4-黑色 + Bit5-红色 + Bit6-深蓝色 + Bit7-蓝色 + Bit8-黄色 + Bit9-绿色 + Bit10-棕色 + Bit11-粉色 + Bit12-紫色 + Bit13-深灰色 */ - DWORD dwVehicleColor;//ɫ + DWORD dwVehicleColor;//车身颜色 /* - Bit0-δ֪ - Bit1-ͳ - Bit2- - Bit3-γ - Bit4- - Bit5-С - Bit6- - Bit7-ֳ - Bit8-ֳ + Bit0-未知(其他) + Bit1-客车 + Bit2-大货车 + Bit3-轿车 + Bit4-面包车 + Bit5-小货车 + Bit6-行人 + Bit7-二轮车 + Bit8-三轮车 Bit9-SUV/MPV - Bit10-Ϳͳ - Bit11- - Bit12-ǻ - Bit13-Сͽγ - Bit14-΢ͽγ - Bit15-Ƥ - Bit16-װ俨 - Bit17-΢忨 - Bit18- - Bit19-̳ - Bit20-͹޳ - Bit21-賵 - Bit22-ƽϳ - Bit23-γ - Bit24-γ - Bit25- - Bit26-СͿͳ + Bit10-中型客车 + Bit11-机动车 + Bit12-非机动车 + Bit13-小型轿车 + Bit14-微型轿车 + Bit15-皮卡车 + Bit16-集装箱卡车 + Bit17-微卡,栏板卡 + Bit18-渣土车 + Bit19-吊车,工程车 + Bit20-油罐车 + Bit21-混凝土搅拌车 + Bit22-平板拖车 + Bit23-两厢轿车 + Bit24-三厢轿车 + Bit25-轿跑 + Bit26-小型客车 */ - DWORD dwVehicleType;// + DWORD dwVehicleType;//车辆类型 /** - Bit0- - Bit1- - Bit2- - Bit3- - Bit4- - Bit5-ѹ - Bit6- - Bit7-· - Bit8-ռ - Bit9-Υ - Bit10- - Bit11-Υ - Bit12-·ͣ - Bit13-̵ͣ - Bit14-δ - Bit15-Υͣ - Bit16-Υµͷ - Bit17-ռӦ - Bit18-δϵȫ + Bit0-其他(保留) + Bit1-低速 + Bit2-超速 + Bit3-逆行 + Bit4-闯红灯 + Bit5-压车道线 + Bit6-不按导向 + Bit7-路口滞留 + Bit8-机占非 + Bit9-违法变道 + Bit10-不按车道 + Bit11-违反禁令 + Bit12-路口停车 + Bit13-绿灯停车 + Bit14-未礼让行人 + Bit15-违章停车 + Bit16-违章掉头 + Bit17-占用应急车道 + Bit18-未系安全带 */ DWORD dwIllegalType; /** - Bit0- - Bit1-ӵ - Bit2-ͣ - Bit3- - Bit4- - Bit5- - Bit6- - Bit7-ѹ - Bit8-ֹ - Bit9- - Bit10- - Bit11-ͷ - Bit12-ռ - Bit13- + Bit0-其他(保留) + Bit1-拥堵 + Bit2-停车 + Bit3-逆行 + Bit4-行人 + Bit5-抛洒物 + Bit6-烟雾 + Bit7-压线 + Bit8-禁止名单 + Bit9-超速 + Bit10-变道 + Bit11-掉头 + Bit12-机占非 + Bit13-加塞 */ DWORD dwEventType; /** - Bit0- - Bit1-й·Υͣ - Bit2-ٹ·Υͣ - Bit3-ѹ - Bit4- - Bit5-Υ - Bit6-ռ + Bit0-其他(保留) + Bit1-城市公路违法停车 + Bit2-高速公路违法停车 + Bit3-压线 + Bit4-逆行 + Bit5-违法变道 + Bit6-机占非 */ DWORD dwForensiceType; - WORD wVehicleLogoRecog; //Ʒƣο"Ʒ.xlsx" - BYTE byLaneNo;//ţ0~255,0ų ʾ δ֪ - BYTE byDirection;//ʾ1-У2-У3-˫4-ɶ5-,6-򶫣7-ɱ - WORD wSpeed;//ٶȣ0~999λkm/h - BYTE byDataType;//: 0- 1-Υ 2-¼ 3-ȡ֤ + WORD wVehicleLogoRecog; //车辆主品牌,参考"车辆主品牌.xlsx" + BYTE byLaneNo;//车道号(0~255,0号车道 表示 车道号未知) + BYTE byDirection;//显示方向,1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南 + WORD wSpeed;//速度(0~999)单位km/h + BYTE byDataType;//数据类型: 0-卡口 1-违法 2-事件 3-取证 BYTE byRes[253]; NET_DVR_TRAFFIC_PICTURE_PARAM struTrafficPic[MAX_TRAFFIC_PICTURE_NUM/*8*/]; }NET_DVR_TRAFFIC_DATA_QUERY_RESULT,*LPNET_DVR_TRAFFIC_DATA_QUERY_RESULT; -//ӻȡͨṹ +//长连接获取交通流量条件结构 typedef struct tagNET_DVR_TRAFFIC_FLOW_QUERY_COND_ { DWORD dwSize; /** - Bit0-ͨЧ - Bit1-ʱЧ - Bit2-Ч + Bit0-通道有效 + Bit1-时间有效 + Bit2-车道号有效 */ - DWORD dwQueryCond;//ѯ 0- - DWORD dwChannel;//Ĭ1[1~32]bit0ʾͨ1bit31ʾͨ32 - DWORD dwResChan[10];//Ԥչͨ - NET_DVR_TIME_V30 struStartTime;//ʼʱ - NET_DVR_TIME_V30 struEndTime;//ʱ - BYTE byLaneNo;//ţ0~255,0ų ʾ δ֪ + DWORD dwQueryCond;//查询条件 0-无条件 + DWORD dwChannel;//默认是1([1~32],bit0表示通道1,依次类推bit31表示通道32) + DWORD dwResChan[10];//预留可扩展的通道号 + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + BYTE byLaneNo;//车道号(0~255,0号车道 表示 车道号未知) BYTE byRes[255]; }NET_DVR_TRAFFIC_FLOW_QUERY_COND,*LPNET_DVR_TRAFFIC_FLOW_QUERY_COND; -//ӻȡͨṹ +//长连接获取交通流量结构 typedef struct tagNET_DVR_TRAFFIC_FLOW_QUERY_RESULT_ { DWORD dwSize; - NET_DVR_TIME_V30 struStartTime;//ʼʱ - NET_DVR_TIME_V30 struEndTime;//ʱ - DWORD dwChannel;//Ĭ1[1~32] - DWORD dwFlow;// - BYTE byLaneNo;//ţ0~255,0ų ʾ δ֪ + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + DWORD dwChannel;//默认是1([1~32]) + DWORD dwFlow;//车流量 + BYTE byLaneNo;//车道号(0~255,0号车道 表示 车道号未知) BYTE byRes[511]; }NET_DVR_TRAFFIC_FLOW_QUERY_RESULT,*LPNET_DVR_TRAFFIC_FLOW_QUERY_RESULT; -//ͼƬ +//图片参数 typedef struct tagNET_DVR_PIC_INFO { - BYTE byPicType; //ͼƬͣ0-jpg - BYTE byRes1[3]; // - DWORD dwPicWidth; //ͼƬ - DWORD dwPicHeight; //ͼƬ߶ - DWORD dwPicDataLen; //ͼƬݴС - char* byPicDataBuff; //ͼƬݻ - BYTE byRes2[32]; // + BYTE byPicType; //图片类型,0-jpg + BYTE byRes1[3]; //保留 + DWORD dwPicWidth; //图片宽度 + DWORD dwPicHeight; //图片高度 + DWORD dwPicDataLen; //图片数据大小 + char* byPicDataBuff; //图片数据缓冲区 + BYTE byRes2[32]; //保留 }NET_DVR_PIC_INFO,*LPNET_DVR_PIC_INFO; typedef struct tagNET_DVR_VCA_RULE_COLOR_CFG { - DWORD dwSize;//ṹС - BYTE byEnable; //Ƿã 0-ã1- - BYTE byRuleID; //ĹID - BYTE byColorBlockNo; //ɫţ1ʼ - BYTE byRes1; // - NET_DVR_PIC_INFO struPicInfo; //ͼƬɫϢ + DWORD dwSize;//结构体大小 + BYTE byEnable; //规则是否启用, 0-不启用,1-启用 + BYTE byRuleID; //关联的规则ID + BYTE byColorBlockNo; //颜色块序号,从1开始 + BYTE byRes1; //保留 + NET_DVR_PIC_INFO struPicInfo; //图片颜色信息 BYTE byRes[64]; }NET_DVR_VCA_RULE_COLOR_CFG,*LPNET_DVR_VCA_RULE_COLOR_CFG; typedef struct tagNET_DVR_VCA_RULE_COLOR_COND { - DWORD dwSize;//ṹС - DWORD dwChannel; //ͨ - BYTE byRuleID; //ĹID 0ʾ + DWORD dwSize;//结构体大小 + DWORD dwChannel; //通道号 + BYTE byRuleID; //关联的规则ID 0表示不关联 BYTE byRes[127]; }NET_DVR_VCA_RULE_COLOR_COND,*LPNET_DVR_VCA_RULE_COLOR_COND; -//LLDP +//LLDP参数 typedef struct tagNET_DVR_LLDP_PORT_CFG { - BYTE byCardNo; // - BYTE byPortNo; //˿ں - BYTE byEnabledTx; //ʹܷlldp0-ʹܣ1-ʹ - BYTE byEnabledRx; //ʹܽlldp0-ʹܣ1-ʹ + BYTE byCardNo; //卡号 + BYTE byPortNo; //端口号 + BYTE byEnabledTx; //使能发送lldp包,0-不使能,1-使能 + BYTE byEnabledRx; //使能接收lldp包,0-不使能,1-使能 BYTE byRes[12]; }NET_DVR_LLDP_PORT_CFG, *LPNET_DVR_LLDP_PORT_CFG; typedef struct tagNET_DVR_LLDP_CFG { DWORD dwSize; - BYTE byEnabled; //ʹLLDPܣ0-ʹܣ1-ʹ + BYTE byEnabled; //使能LLDP功能,0-不使能,1-使能 BYTE byRes1[3]; - DWORD dwHoldTime; //ʱ䣬λ - DWORD dwReiniTime; //³ʼʱ䣬λ - DWORD dwPacketTime; //ʱ䣬λ - NET_DVR_LLDP_PORT_CFG struLLDPPortCfg[MAX_PORT_NUM]; //˿LLDP + DWORD dwHoldTime; //保持时间,单位:秒 + DWORD dwReiniTime; //重新初始化时间,单位:秒 + DWORD dwPacketTime; //打包时间,单位:秒 + NET_DVR_LLDP_PORT_CFG struLLDPPortCfg[MAX_PORT_NUM]; //各端口LLDP参数 BYTE byRes2[32]; }NET_DVR_LLDP_CFG, *LPNET_DVR_LLDP_CFG; -//շϢ +//光纤收发器基本信息 typedef struct tagNET_DVR_CARD_PORT_INFO { - DWORD dwPortNo; //˿ںţ0-Ч - BYTE byPortName[NAME_LEN]; //˿ - BYTE byWorkMode; //ģʽ1-ACCESS2-TRUNK3-HYPRID - BYTE byBandWidth; //1-100M2-1G3-10G - BYTE byPortType; //˿ͣ1-ڣ2-ڣ3-縴ÿ + DWORD dwPortNo; //端口号,0-无效 + BYTE byPortName[NAME_LEN]; //端口名 + BYTE byWorkMode; //工作模式,1-ACCESS,2-TRUNK,3-HYPRID + BYTE byBandWidth; //带宽,1-100M,2-1G,3-10G + BYTE byPortType; //端口类型,1-电口,2-光口,3-光电复用口 BYTE byRes[13]; }NET_DVR_CARD_PORT_INFO, *LPNET_DVR_CARD_PORT_INFO; typedef struct tagNET_DVR_NETMGR_CARD_INFO { - BYTE byTypeName[NAME_LEN]; //ͺ - BYTE bySerialNo[SERIALNO_LEN]; //к - BYTE bySoftwareVersion[VERSION_LEN]; //汾 - NET_DVR_IPADDR struIPAddr; //IPַ - DWORD dwSlotNo; //ܿλţλ - BYTE byStructureType; //ṹͣ1-2U2-4U + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySerialNo[SERIALNO_LEN]; //序列号 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + NET_DVR_IPADDR struIPAddr; //IP地址 + DWORD dwSlotNo; //网管卡槽位号(主槽位) + BYTE byStructureType; //结构类型,1-2U,2-4U BYTE byRes1[3]; - NET_DVR_CARD_PORT_INFO struNetPortInfo[MAX_SINGLE_CARD_PORT_NO]; //Ϣ + NET_DVR_CARD_PORT_INFO struNetPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各网口信息 BYTE byRes2[32]; }NET_DVR_NETMGR_CARD_INFO, *LPNET_DVR_NETMGR_CARD_INFO; typedef struct tagNET_DVR_FUNC_CARD_INFO { - DWORD dwCardNo; //ţ1ʼ - BYTE byTypeName[NAME_LEN]; //ͺ - BYTE bySerialNo[SERIALNO_LEN]; //к - BYTE bySoftwareVersion[VERSION_LEN]; //汾 - DWORD dwMainSlot; //λ1ʼ - BYTE byStructureType; //ṹͣ1-2U2-4U + DWORD dwCardNo; //卡号,从1开始 + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySerialNo[SERIALNO_LEN]; //序列号 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + DWORD dwMainSlot; //主槽位,从1开始 + BYTE byStructureType; //结构类型,1-2U,2-4U BYTE byRes1[3]; - NET_DVR_CARD_PORT_INFO struFuncPortInfo[MAX_SINGLE_CARD_PORT_NO]; //˿ڲ + NET_DVR_CARD_PORT_INFO struFuncPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各端口参数 BYTE byRes2[32]; }NET_DVR_FUNC_CARD_INFO, *LPNET_DVR_FUNC_CARD_INFO; typedef struct tagNET_DVR_FIBER_CONVERT_BASIC { DWORD dwSize; - BYTE byPowerType; //Դͣ1-Դ2-˫Դ + BYTE byPowerType; //电源类型,1-单电源,2-双电源 BYTE byRes1[3]; - DWORD dwSlotNum; //ܿλţλ - NET_DVR_NETMGR_CARD_INFO struNetCardInfo; //ܿϢ - NET_DVR_FUNC_CARD_INFO struFuncCardInfo[MAX_FUNC_CARD_NUM]; //ܿϢ + DWORD dwSlotNum; //网管卡槽位号(主槽位) + NET_DVR_NETMGR_CARD_INFO struNetCardInfo; //网管卡信息 + NET_DVR_FUNC_CARD_INFO struFuncCardInfo[MAX_FUNC_CARD_NUM]; //功能卡信息 BYTE byRes2[64]; }NET_DVR_FIBER_CONVERT_BASIC, *LPNET_DVR_FIBER_CONVERT_BASIC; -//շ״̬Ϣ +//光纤收发器工作状态信息 typedef struct tagNET_DVR_CARD_PORT_STATE { - BYTE byValid; //ǷЧ0-Ч1-Ч - BYTE byPortType; //˿ͣ1-ڣ2-ڣ3-縴ÿ - BYTE byLinkState; //״̬0-δӣ1- + BYTE byValid; //是否有效,0-无效,1-有效 + BYTE byPortType; //端口类型,1-电口,2-光口,3-光电复用口 + BYTE byLinkState; //连接状态,0-未连接,1-已连接 BYTE byRes1; - DWORD dwSendBytes; //͵ֽ - DWORD dwRecvBytes; //ݰ - DWORD dwRecvLostPackets; //ն - DWORD dwRecvCrcErrPackets; //CRCУ - DWORD dwRecvFragmentPackets; //ƬͻֽڰȾС64ֽڣ + DWORD dwSendBytes; //发送的字节数 + DWORD dwRecvBytes; //接收数据包数 + DWORD dwRecvLostPackets; //接收丢包数 + DWORD dwRecvCrcErrPackets; //接收CRC校验错误包数 + DWORD dwRecvFragmentPackets; //接收碎片、冲突及过短字节包数(包长度均小于64字节) BYTE byRes2[16]; }NET_DVR_CARD_PORT_STATE, *LPNET_DVR_CARD_PORT_STATE; typedef struct tagNET_DVR_NET_CARD_STATE { - NET_DVR_CARD_PORT_STATE struNetPortState[MAX_SINGLE_CARD_PORT_NO]; //˿״̬ + NET_DVR_CARD_PORT_STATE struNetPortState[MAX_SINGLE_CARD_PORT_NO]; //各端口状态 BYTE byRes[64]; }NET_DVR_NET_CARD_STATE, *LPNET_DVR_NET_CARD_STATE; typedef struct tagNET_DVR_FUNC_CARD_STATE { - BYTE byEnabled; //˽ṹǷЧ0-Ч1-Ч + BYTE byEnabled; //此结构是否有效,0-无效,1-有效 BYTE byRes1[3]; - DWORD dwCardNo; // + DWORD dwCardNo; //卡号 NET_DVR_CARD_PORT_STATE struFuncCardPortState[MAX_SINGLE_CARD_PORT_NO]; BYTE byRes[32]; }NET_DVR_FUNC_CARD_STATE, *LPNET_DVR_FUNC_CARD_STATE; @@ -46280,184 +46280,184 @@ typedef struct tagNET_DVR_FUNC_CARD_STATE typedef struct tagNET_DVR_FIBER_CONVERT_STATE { DWORD dwSize; - NET_DVR_NET_CARD_STATE struNetCardState; //ܿ״̬ - NET_DVR_FUNC_CARD_STATE struFuncCardState[MAX_FUNC_CARD_NUM]; //ܿ״̬ + NET_DVR_NET_CARD_STATE struNetCardState; //网管卡状态 + NET_DVR_FUNC_CARD_STATE struFuncCardState[MAX_FUNC_CARD_NUM]; //功能卡状态 BYTE byRes[32]; }NET_DVR_FIBER_CONVERT_STATE, *LPNET_DVR_FIBER_CONVERT_STATE; -//Զշ1.0 Ϣ +//远端网管收发器1.0 基本信息 typedef struct tagNET_DVR_NETMGR_CARD_INFO_V50 { - BYTE byMainSlotNo; //ܿλţλ + BYTE byMainSlotNo; //网管卡槽位号(主槽位) BYTE byRes1[3]; - BYTE byTypeName[NAME_LEN]; //ͺ - BYTE bySerialNo[SERIALNO_LEN]; //к - BYTE bySoftwareVersion[VERSION_LEN]; //汾 - BYTE byHardwareVersion[VERSION_LEN]; //Ӳ汾 - NET_DVR_IPADDR struIPAddr; //IPַ - NET_DVR_IPADDR struMask; // - NET_DVR_IPADDR struGateway; //Ĭ - BYTE byMacAddr[6]; //MACַ - BYTE bySlotNums; //λ - BYTE byStructureType; //ṹͣ1-2U2-4U - NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //˿Ϣ + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySerialNo[SERIALNO_LEN]; //序列号 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + BYTE byHardwareVersion[VERSION_LEN]; //硬件版本 + NET_DVR_IPADDR struIPAddr; //IP地址 + NET_DVR_IPADDR struMask; //子网掩码 + NET_DVR_IPADDR struGateway; //默认网关 + BYTE byMacAddr[6]; //MAC地址 + BYTE bySlotNums; //槽位数 + BYTE byStructureType; //结构类型,1-2U,2-4U + NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各端口信息 BYTE byRes2[64]; }NET_DVR_NETMGR_CARD_INFO_V50, *LPNET_DVR_NETMGR_CARD_INFO_V50; typedef struct tagNET_DVR_FUNC_CARD_INFO_V50 { - BYTE byCardNo; //տ - BYTE byMainSlotNo; //տλţλ + BYTE byCardNo; //接收卡卡号 + BYTE byMainSlotNo; //接收卡槽位号(主槽位) BYTE byRes1[2]; - BYTE byTypeName[NAME_LEN]; //ͺ - BYTE bySerialNo[SERIALNO_LEN]; //к - BYTE bySoftwareVersion[VERSION_LEN]; //汾 - BYTE byIsVerMismatch; //汾ܿбش洢汾Ƿһ£0-ƥ䣬!0-ƥ + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySerialNo[SERIALNO_LEN]; //序列号 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + BYTE byIsVerMismatch; //软件版本与网管卡中本地存储的软件版本是否一致,0-匹配,!0-不匹配 BYTE byRes2[3]; - BYTE byNewestSoftwareVersion[VERSION_LEN]; //µ汾汾ƥʱЧ - BYTE byHardwareVersion[VERSION_LEN]; //Ӳ汾 - BYTE bySlotNums; //λ - BYTE byStructureType; //ṹͣ1-2U2-4U + BYTE byNewestSoftwareVersion[VERSION_LEN]; //最新的软件版本,版本不匹配时有效 + BYTE byHardwareVersion[VERSION_LEN]; //硬件版本 + BYTE bySlotNums; //槽位数 + BYTE byStructureType; //结构类型,1-2U,2-4U BYTE byRes3[2]; - NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //˿Ϣ + NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各端口信息 BYTE byRes4[64]; }NET_DVR_FUNC_CARD_INFO_V50, *LPNET_DVR_FUNC_CARD_INFO_V50; typedef struct tagNET_DVR_REMOTE_SEND_CARD_INFO_V50 { - BYTE byCardNo; //ţͻӵĽտĿ - BYTE byMainSlotNo; //λţͻӵĽտλ + BYTE byCardNo; //卡号,发送机连接的接收卡的卡号 + BYTE byMainSlotNo; //槽位号,发送机连接的接收卡的主槽位号 BYTE byRes1[2]; - BYTE byTypeName[NAME_LEN]; //ͺ - BYTE bySoftwareVersion[VERSION_LEN]; //汾 - BYTE byIsVerMismatch; //汾ܿбش洢汾Ƿһ£0-ƥ䣬!0-ƥ + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + BYTE byIsVerMismatch; //软件版本与网管卡中本地存储的软件版本是否一致,0-匹配,!0-不匹配 BYTE byRes2[3]; - BYTE byNewestSoftwareVersion[VERSION_LEN]; //µ汾汾ƥʱЧ - BYTE byHardwareVersion[VERSION_LEN]; //Ӳ汾 - NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //˿Ϣ + BYTE byNewestSoftwareVersion[VERSION_LEN]; //最新的软件版本,版本不匹配时有效 + BYTE byHardwareVersion[VERSION_LEN]; //硬件版本 + NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各端口信息 BYTE byRes3[64]; }NET_DVR_REMOTE_SEND_CARD_INFO_V50, *LPNET_DVR_REMOTE_SEND_CARD_INFO_V50; typedef struct tagNET_DVR_FIBER_CONVERT_BASIC_V50 { DWORD dwSize; - BYTE byPowerType; //Դͣ1-Դ2-˫Դ + BYTE byPowerType; //电源类型,1-单电源,2-双电源 BYTE byRes1[3]; - DWORD dwSlotNum; //ܲλ - NET_DVR_NETMGR_CARD_INFO_V50 struNetCardInfo; //ܿϢ - NET_DVR_FUNC_CARD_INFO_V50 struFuncCardInfo[MAX_FUNC_CARD_NUM]; //տϢ - NET_DVR_REMOTE_SEND_CARD_INFO_V50 struRemoteSendCardInfo[MAX_FUNC_CARD_NUM]; //ͻϢ + DWORD dwSlotNum; //机箱总槽位数 + NET_DVR_NETMGR_CARD_INFO_V50 struNetCardInfo; //网管卡信息 + NET_DVR_FUNC_CARD_INFO_V50 struFuncCardInfo[MAX_FUNC_CARD_NUM]; //接收卡信息 + NET_DVR_REMOTE_SEND_CARD_INFO_V50 struRemoteSendCardInfo[MAX_FUNC_CARD_NUM]; //发送机信息 BYTE byRes2[64]; }NET_DVR_FIBER_CONVERT_BASIC_V50, *LPNET_DVR_FIBER_CONVERT_BASIC_V50; -//Զշ1.0 ״̬Ϣ +//远端网管收发器1.0 状态信息 typedef struct tagNET_DVR_CARD_PORT_STATE_V50 { - BYTE byPortNo; //˿ںţ1ʼ - BYTE byPortType; //˿ͣ1-ڣ2-ڣ3-縴ÿ - BYTE byLinkState; //״̬0-δӣ1- - BYTE byPortSpeed; //0-Ч1-Զ2-100M3-1000M4-10G - BYTE byPortDuplexMode; //˿˫ģʽ0-Ч1-Զ2-ȫ˫3-˫ + BYTE byPortNo; //端口号,从1开始 + BYTE byPortType; //端口类型,1-电口,2-光口,3-光电复用口 + BYTE byLinkState; //连接状态,0-未连接,1-已连接 + BYTE byPortSpeed; //带宽,0-无效,1-自动,2-100M,3-1000M,4-10G + BYTE byPortDuplexMode; //端口双工模式,0-无效,1-自动,2-全双工,3-半双工 BYTE byRes1[3]; - BYTE byPortName[NAME_LEN]; //˿ - DWORD dwSendBytes; //͵ֽ - DWORD dwSendByteSpeed; //ֽʣλbps - DWORD dwSendPackets; //͵ֽ - DWORD dwSendPacketSpeed; //ʣλ/ - DWORD dwRecvBytes; //յֽ - DWORD dwRecvByteSpeed; //ֽʣλbps - DWORD dwRecvPackets; //յİ - DWORD dwRecvPacketSpeed; //հʣλ/ - DWORD dwRecvLostPackets; //ն - DWORD dwRecvCrcErrPackets; //CRCУ - DWORD dwRecvFragmentPackets; //ƬͻֽڰȾС64ֽڣ + BYTE byPortName[NAME_LEN]; //端口名称 + DWORD dwSendBytes; //发送的字节数 + DWORD dwSendByteSpeed; //发送字节速率,单位:bps + DWORD dwSendPackets; //发送的字节数 + DWORD dwSendPacketSpeed; //发包速率,单位:个/秒 + DWORD dwRecvBytes; //接收的字节数 + DWORD dwRecvByteSpeed; //接收字节速率,单位:bps + DWORD dwRecvPackets; //接收的包数 + DWORD dwRecvPacketSpeed; //收包速率,单位:个/秒 + DWORD dwRecvLostPackets; //接收丢包数 + DWORD dwRecvCrcErrPackets; //接收CRC校验错误包数 + DWORD dwRecvFragmentPackets; //接收碎片、冲突及过短字节包数(包长度均小于64字节) BYTE byRes2[48]; }NET_DVR_CARD_PORT_STATE_V50, *LPNET_DVR_CARD_PORT_STATE_V50; typedef struct tagNET_DVR_NET_CARD_STATE_V50 { - BYTE byMainSlotNo; //ܿλ + BYTE byMainSlotNo; //网管卡主槽位号 BYTE byRes1[3]; - NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //ܿ˿״̬ + NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //网管卡端口状态 BYTE byRes2[344]; }NET_DVR_NET_CARD_STATE_V50, *LPNET_DVR_NET_CARD_STATE_V50; typedef struct tagNET_DVR_FUNC_CARD_STATE_V50 { - BYTE byCardNo; //տ - BYTE byMainSlotNo; //տλ + BYTE byCardNo; //接收卡卡号 + BYTE byMainSlotNo; //接收卡主槽位号 BYTE byRes1[2]; - NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //տ˿״̬ + NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //接收卡端口状态 BYTE byRes2[64]; }NET_DVR_FUNC_CARD_STATE_V50, *LPNET_DVR_FUNC_CARD_STATE_V50; typedef struct tagNET_DVR_REMOTE_SEND_CARD_STATE_V50 { - BYTE byCardNo; //ͻӵĽտĿ - BYTE byMainSlotNo; //ͻӵĽտλ + BYTE byCardNo; //发送机连接的接收卡的卡号 + BYTE byMainSlotNo; //发送机连接的接收卡的主槽位号 BYTE byRes1[2]; - NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //տ˿״̬ + NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //接收卡端口状态 BYTE byRes[64]; }NET_DVR_REMOTE_SEND_CARD_STATE_V50, *LPNET_DVR_REMOTE_SEND_CARD_STATE_V50; typedef struct tagNET_DVR_FIBER_CONVERT_STATE_V50 { DWORD dwSize; - NET_DVR_NET_CARD_STATE_V50 struNetCardState; //ܿ״̬ - NET_DVR_FUNC_CARD_STATE_V50 struFuncCardState[MAX_FUNC_CARD_NUM]; //տ״̬ - NET_DVR_REMOTE_SEND_CARD_STATE_V50 struRemoteSendCardState[MAX_FUNC_CARD_NUM]; //ͻ״̬ + NET_DVR_NET_CARD_STATE_V50 struNetCardState; //网管卡状态 + NET_DVR_FUNC_CARD_STATE_V50 struFuncCardState[MAX_FUNC_CARD_NUM]; //接收卡状态 + NET_DVR_REMOTE_SEND_CARD_STATE_V50 struRemoteSendCardState[MAX_FUNC_CARD_NUM]; //发送机状态 BYTE byRes[64]; }NET_DVR_FIBER_CONVERT_STATE_V50, *LPNET_DVR_FIBER_CONVERT_STATE_V50; -//շϢ +//光纤收发器拓扑信息 typedef struct tagNET_DVR_FC_PORT_TOPOLOGY { - DWORD dwPortNo; //˿ںţ0-Ч0Ϊܿ˿ں - BYTE byPortType; //˿ͣ1-ڣ2-ڣ3-縴ÿ - BYTE byLocalWorkMode; //عģʽ1-ACCESS2-TRUNK3-HYPRID - BYTE byLocalBandWidth; //ش1-100M2-1G3-10G + DWORD dwPortNo; //端口号,0-无效,非0为功能卡端口号 + BYTE byPortType; //端口类型,1-电口,2-光口,3-光电复用口 + BYTE byLocalWorkMode; //本地工作模式,1-ACCESS,2-TRUNK,3-HYPRID + BYTE byLocalBandWidth; //本地带宽,1-100M,2-1G,3-10G BYTE byRes1[1]; - BYTE byPeerTypeName[NAME_LEN]; //Զ豸 - BYTE byPeerMac[MACADDR_LEN]; //ԶMACַ - DWORD dwPeerPortNo; //Զ˶˿ں - BYTE byPeerWorkMode; //Զ˹ģʽ1-ACCESS2-TRUNK3-HYPRID - BYTE byPeerBandWidth; //Զ˴1-100M2-1G3-10G + BYTE byPeerTypeName[NAME_LEN]; //对端设备类型名称 + BYTE byPeerMac[MACADDR_LEN]; //对端MAC地址 + DWORD dwPeerPortNo; //对端端口号 + BYTE byPeerWorkMode; //对端工作模式,1-ACCESS,2-TRUNK,3-HYPRID + BYTE byPeerBandWidth; //对端带宽,1-100M,2-1G,3-10G BYTE byRes2[30]; }NET_DVR_FC_PORT_TOPOLOGY, *LPNET_DVR_FC_PORT_TOPOLOGY; typedef struct tagNET_DVR_FC_CARD_TOPOLOGY { - BYTE byEnable; //˽ṹǷЧ0-Ч0-Ч + BYTE byEnable; //此结构体是否有效,0-无效,非0-有效 BYTE byRes1[3]; - DWORD dwCardNo; //ţ0-ܿ0-ܿ - DWORD dwSlotNum; //ռõIJλ - BYTE byTypeName[NAME_LEN]; // - BYTE byLocalMac[MACADDR_LEN]; //MACַ - NET_DVR_FC_PORT_TOPOLOGY struFCPortTopology[MAX_SINGLE_CARD_PORT_NO]; //˿Ϣ + DWORD dwCardNo; //卡号,0-网管卡,大于0-功能卡 + DWORD dwSlotNum; //卡占用的槽位数 + BYTE byTypeName[NAME_LEN]; //卡类型名称 + BYTE byLocalMac[MACADDR_LEN]; //本地MAC地址 + NET_DVR_FC_PORT_TOPOLOGY struFCPortTopology[MAX_SINGLE_CARD_PORT_NO]; //各端口拓扑信息 BYTE byRes[32]; }NET_DVR_FC_CARD_TOPOLOGY, *LPNET_DVR_FC_CARD_TOPOLOGY; typedef struct tagNET_DVR_FIBER_CONVERT_TOPOLOGY { DWORD dwSize; - NET_DVR_FC_CARD_TOPOLOGY struFCCardTopology[MAX_FC_CARD_NUM]; //Ϣ + NET_DVR_FC_CARD_TOPOLOGY struFCCardTopology[MAX_FC_CARD_NUM]; //各卡拓扑信息 BYTE byRes[64]; }NET_DVR_FIBER_CONVERT_TOPOLOGY, *LPNET_DVR_FIBER_CONVERT_TOPOLOGY; -//շ˿עϢ +//光纤收发器端口注释信息 typedef struct tagNET_DVR_FC_COND { DWORD dwSize; - DWORD dwSlotNo; //λ - DWORD dwPortNo; //˿ں + DWORD dwSlotNo; //槽位号 + DWORD dwPortNo; //端口号 BYTE byRes[32]; }NET_DVR_FC_COND, *LPNET_DVR_FC_COND; typedef struct tagNET_DVR_FC_PORT_REMARKS { DWORD dwSize; - BYTE byLocalRemarks[MAX_REMARKS_LEN]; //ض˿עϢ - BYTE byPeerRemarks[MAX_REMARKS_LEN]; //Զ˶˿עϢ + BYTE byLocalRemarks[MAX_REMARKS_LEN]; //本地端口注释信息 + BYTE byPeerRemarks[MAX_REMARKS_LEN]; //对端端口注释信息 BYTE byRes[32]; }NET_DVR_FC_PORT_REMARKS, *LPNET_DVR_FC_PORT_REMARKS; @@ -46466,11 +46466,11 @@ typedef enum _EN_FIBER_CONVERT_ALARM FC_OPTICAL_PORT_LOST = 1, FC_ELECTRICAL_PORT_LOST, FC_FUNC_CARD_LOST, - FC_CARD_DISCONNECTED, //߸澯 - FC_MAX_TEMP_LIMITED, //¶ȳ޸澯 - FC_MIN_TEMP_LIMITED, //¶ȳ޸澯 - FC_MAX_VOLTAGE_LIMITED, //ѹ޸澯 - FC_MIN_VOLTAGE_LIMITED, //ѹ޸澯 + FC_CARD_DISCONNECTED, //卡断线告警 + FC_MAX_TEMP_LIMITED, //温度超上限告警 + FC_MIN_TEMP_LIMITED, //温度超下限告警 + FC_MAX_VOLTAGE_LIMITED, //电压超上限告警 + FC_MIN_VOLTAGE_LIMITED, //电压超下限告警 }EN_FIBER_CONVERT_ALARM; typedef enum _EN_FIBER_CONVERT_NOTIFICATION @@ -46478,112 +46478,112 @@ typedef enum _EN_FIBER_CONVERT_NOTIFICATION FC_OPTICAL_PORT_CONNECTED = 1, FC_ELECTRICAL_PORT_CONNECTED, FC_FUNC_CARD_INSERT, - FC_CARD_CONNECTED, //֪ͨ - FC_TEMP_RECOVERY, //¶Ȼָ֪ͨ - FC_VOLTAGE_RECOVERY, //ѹָ֪ͨ + FC_CARD_CONNECTED, //卡上线通知 + FC_TEMP_RECOVERY, //温度恢复通知 + FC_VOLTAGE_RECOVERY, //电压恢复通知 }EN_FIBER_CONVERT_NOTIFICATION; typedef struct tagNET_DVR_FIBER_CONVERT_ALARM { DWORD dwSize; - DWORD dwEventType; //¼ͣ1-澯2-֪ͨ - DWORD dwEvent; //¼澯ʱοöFIBER_CONVERT_ALARM֪ͨʱοöFIBER_CONVERT_NOTIFICATION - BYTE bySlotNum; //λţΪͻʱλΪ÷ͻӵĽտIJλţ澯֪ͨʱЧ - BYTE byCardType; //ͣ0-Ч1-ܿ2-տ3-ͻ4- - BYTE byPortNo; //˿ںţ1ʼ澯֪ͨʱЧ - BYTE byCurTemperature; //¼¶ȣ¶ȸ澯֪ͨʱЧλ϶ - WORD wCurVoltage; //¼ĵѹʵʵѹ*10ѹ澯֪ͨʱЧλ + DWORD dwEventType; //事件类型,1-告警,2-通知 + DWORD dwEvent; //具体事件,告警时参考枚举FIBER_CONVERT_ALARM,通知时参考枚举FIBER_CONVERT_NOTIFICATION + BYTE bySlotNum; //槽位号,当卡类型为发送机时,槽位号为该发送机连接的接收卡的槽位号,机箱告警及通知时无效 + BYTE byCardType; //卡类型,0-无效,1-网管卡,2-接收卡,3-发送机,4-机箱 + BYTE byPortNo; //端口号,从1开始,机箱告警及通知时无效 + BYTE byCurTemperature; //触发事件的温度,温度告警及通知时有效,单位:摄氏度 + WORD wCurVoltage; //触发事件的电压(实际电压*10),电压告警及通知时有效,单位:伏特 BYTE byRes1[30]; }NET_DVR_FIBER_CONVERT_ALARM, *LPNET_DVR_FIBER_CONVERT_ALARM; -//澯¼ϴ +//交换机告警事件上传 typedef enum _EN_SWITCH_CONVERT_ALARM { SC_OPTICAL_PORT_LOST = 1, SC_NETWORK_PORT_LOST, - SC_WIRELESS_SPEED_UP_EXCEPTION,//쳣 - SC_WIRELESS_SHUTDOWN, //ӶϿ¼ - SC_DEVICE_POE_MAX, //POE-MAX澯 - SC_PORT_POE_POWER_OFF, //˿POE澯 + SC_WIRELESS_SPEED_UP_EXCEPTION,//无线上行速率异常 + SC_WIRELESS_SHUTDOWN, //无线连接断开事件 + SC_DEVICE_POE_MAX, //POE-MAX告警 + SC_PORT_POE_POWER_OFF, //端口POE掉电告警 }EN_SWITCH_CONVERT_ALARM; typedef enum _EN_SWICH_CONVERT_NOTIFICATION { SC_OPTICAL_PORT_CONNECTED = 1, SC_NETWORK_PORT_CONNECTED, - SC_DEVICE_POE_MAX_RECOVERY, //POE-MAX澯ָ - SC_PORT_POE_POWER_ON, //˿POEϵ֪ͨ - SC_WIRELESS_CONNECTED, //¼ + SC_DEVICE_POE_MAX_RECOVERY, //POE-MAX告警恢复 + SC_PORT_POE_POWER_ON, //端口POE上电通知 + SC_WIRELESS_CONNECTED, //无线连接事件 }EN_SWITCH_CONVERT_NOTIFICATION; typedef struct tagNET_DVR_SWITCH_CONVERT_ALARM { DWORD dwSize; - BYTE byPortNo; //ӿ1ʼʾ8λ - BYTE byPortNoEx; //ӿ255ʱֶαʾĸ8λ + BYTE byPortNo; //接口索引,从1开始,表示索引低8位 + BYTE byPortNoEx; //接口索引,索引大于255时,该字段表示索引的高8位 BYTE byRes1[2]; - DWORD dwEventType; //¼ͣ1-澯2-֪ͨ - DWORD dwEvent; //¼澯ʱοöEN_SWITCH_CONVERT_ALARM֪ͨʱοöEN_SWITCH_CONVERT_NOTIFICATION + DWORD dwEventType; //事件类型,1-告警,2-通知 + DWORD dwEvent; //具体事件,告警时参考枚举EN_SWITCH_CONVERT_ALARM,通知时参考枚举EN_SWITCH_CONVERT_NOTIFICATION BYTE byRes2[32]; }NET_DVR_SWITCH_CONVERT_ALARM, *LPNET_DVR_SWITCH_CONVERT_ALARM; typedef struct tagNET_DVR_SWITCH_LAMP_CFG { - DWORD dwSize;//ṹС - BYTE byEnable; //Ƿã 0-ã1- - BYTE byTriggerMode; // 1-2-δ - BYTE byUploadPic; //0-ϴͼƬ1-ϴͼƬ - BYTE byRes1; // - DWORD dwTimeInterval; //ʱΧ[0,3600]λ - NET_DVR_HANDLEEXCEPTION_V30 struHandleType;//ʽ - BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //¼ͨ1ʾͨ0ʾ - NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//ʱ + DWORD dwSize;//结构体大小 + BYTE byEnable; //规则是否启用, 0-不启用,1-启用 + BYTE byTriggerMode; // 1-持续触发,2-单次触发 + BYTE byUploadPic; //0-不上传图片,1-上传图片 + BYTE byRes1; //保留 + DWORD dwTimeInterval; //持续触发报警时间间隔,范围[0,3600],单位:秒 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType;//处理方式 + BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //报警触发的录象通道:1表示触发该通道;0表示不触发 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//检测时间 BYTE byRes[256]; }NET_DVR_SWITCH_LAMP_CFG,*LPNET_DVR_SWITCH_LAMP_CFG; typedef struct tagNET_DVR_SWITCH_LAMP_ALARM { - DWORD dwSize;//ṹС - NET_VCA_DEV_INFO struDevInfo; //豸Ϣ - NET_DVR_TIME_EX struTime; //ʱ - BYTE byLampStatus; //ص״̬0-ѹر 1-Ѵ - BYTE byRes1[3]; // - DWORD dwPicDataLen; //ͼƬݳȣ0ʾͼƬϴ - char* pPicData; //ͼƬ + DWORD dwSize;//结构体大小 + NET_VCA_DEV_INFO struDevInfo; //设备信息 + NET_DVR_TIME_EX struTime; //报警时间 + BYTE byLampStatus; //开关灯状态,0-已关闭 1-已打开 + BYTE byRes1[3]; //保留 + DWORD dwPicDataLen; //图片数据长度,非0表示有图片上传 + char* pPicData; //图片数据 BYTE byRes[64]; }NET_DVR_SWITCH_LAMP_ALARM,*LPNET_DVR_SWITCH_LAMP_ALARM; -//ռ +//防护舱级联配置 typedef struct tagNET_DVR_RS485_CASCADE_CFG { DWORD dwSize; - BYTE byDevAddr; //豸ַ0-1-15Ϊӻ + BYTE byDevAddr; //设备地址,0-主机,1-15为从机 BYTE byRes[131]; }NET_DVR_RS485_CASCADE_CFG,*LPNET_DVR_RS485_CASCADE_CFG; -//˽йؼϢϴ +//私有关键信息上传配置 typedef struct tagNET_DVR_PRIVATE_PROTOCOL_CFG { DWORD dwSize; - NET_DVR_IPADDR struIP; //ϢϴIPַ - WORD wPort;//ϢϴĶ˿ں - BYTE byEnable;//ʹ, 0-1-ã2- + NET_DVR_IPADDR struIP; //消息上传的IP地址 + WORD wPort;//消息上传的端口号 + BYTE byEnable;//使能, 0-保留,1-不启用,2-启用 BYTE byRes; - DWORD dwInterval;//Ϣϴ(0-ʱƣ豸Ϊ׼; >=0,Ϊλʱ) - BYTE byServerType;// 0-ޣ1- - BYTE byEcryptedSMSEnable;//0-ܣ1- - BYTE byAlgorithm;//㷨0-ޣ1-RSA - BYTE byAcauisitionMode;//ɼģʽ0-Ϣ1-Ϣ2-Ϣ+Ϣ - DWORD dwDistanceLimit;//ƣλm - BYTE byPKModeEnable;//PKģʽʹ, 0-1-ã2- - BYTE byMACAddrReductionEnable;//MACַԭʹ, 0-1-ã2- + DWORD dwInterval;//消息上传间隔(0-无时间间隔限制,以设备为准; >=0,以秒为单位的时间间隔) + BYTE byServerType;//服务类型 0-无,1-公安 + BYTE byEcryptedSMSEnable;//0-不加密,1-加密 + BYTE byAlgorithm;//加密算法,0-无,1-RSA + BYTE byAcauisitionMode;//采集模式,0-基本信息,1-虚拟身份信息,2-基本信息+虚拟身份信息 + DWORD dwDistanceLimit;//距离限制,单位:m + BYTE byPKModeEnable;//PK模式使能, 0-保留,1-不启用,2-启用 + BYTE byMACAddrReductionEnable;//MAC地址还原使能, 0-保留,1-不启用,2-启用 BYTE byRes1[214]; char szIndexCode[MAX_INDEX_CODE_LEN]; - DWORD dwSecretKeyLen;//Կ - char szSecretKey[MAX_SECRETKEY_LEN/*512*/];//Կ + DWORD dwSecretKeyLen;//秘钥长度 + char szSecretKey[MAX_SECRETKEY_LEN/*512*/];//秘钥 }NET_DVR_PRIVATE_PROTOCOL_CFG,*LPNET_DVR_PRIVATE_PROTOCOL_CFG; -// +//调试命令 typedef struct tagNET_DVR_DEBUG_CMD { DWORD dwSize; @@ -46591,7 +46591,7 @@ typedef struct tagNET_DVR_DEBUG_CMD BYTE byRes[400]; }NET_DVR_DEBUG_CMD,*LPNET_DVR_DEBUG_CMD; -//Ϣ +//调试信息 typedef struct tagNET_DVR_DEBUG_INFO { DWORD dwSize; @@ -46601,19 +46601,19 @@ typedef struct tagNET_DVR_DEBUG_INFO -#define MAX_SSID_LEN 32 //SSIDų -#define MAX_WS_PASSWD_LEN 64 //볤 +#define MAX_SSID_LEN 32 //SSID号长度 +#define MAX_WS_PASSWD_LEN 64 //密码长度 typedef struct tagNET_DVR_WIRELESSSERVER { - DWORD dwSize;//ṹС - BYTE byWLanShare;//WLanȵʹ 0-رգ1-ʹ - BYTE byBroadcastSSID;//SSID㲥ʹ 0-رգ1-ʹ - BYTE bySecurityMode;//ȫģʽ 0- not-encrypted1-WPA2-WPA2(ʱֻ֧2) - BYTE byAlgorithmType; //ģʽ 1-TKIP2-AES - char szSSID[MAX_SSID_LEN/*32*/];//SSIDϢ + DWORD dwSize;//结构体大小 + BYTE byWLanShare;//WLan热点使能 0-关闭,1-使能 + BYTE byBroadcastSSID;//SSID广播使能 0-关闭,1-使能 + BYTE bySecurityMode;//安全模式 0- not-encrypted,1-WPA,2-WPA2(暂时只支持2) + BYTE byAlgorithmType; //加密模式 1-TKIP,2-AES + char szSSID[MAX_SSID_LEN/*32*/];//SSID号信息 char szPassWord[MAX_WS_PASSWD_LEN/*64*/]; - BYTE byDefaultPassword;//ǷĬ 0-1- - BYTE byWifiApModeType;//WlanAPȵģʽ0-رգ1-2-Զ + BYTE byDefaultPassword;//是否是默认密码 0-否,1-是 + BYTE byWifiApModeType;//启用WlanAP热点模式,0-关闭,1-开启,2-自动 BYTE byRes[254]; }NET_DVR_WIRELESSSERVER,*LPNET_DVR_WIRELESSSERVER; @@ -46627,11 +46627,11 @@ typedef struct tagNET_DVR_CONNECTDEV_COND typedef struct tagNET_DVR_CONNECTDEV_CFG { DWORD dwSize; - BYTE byID;//к + BYTE byID;//序列号 BYTE byRes[1]; - BYTE byMACAddr[MACADDR_LEN/*6*/]; // ַ - NET_DVR_IPADDR struDVRIP;//豸IP - NET_DVR_TIME struConnectTime;//ʱ + BYTE byMACAddr[MACADDR_LEN/*6*/]; // 物理地址 + NET_DVR_IPADDR struDVRIP;//设备IP + NET_DVR_TIME struConnectTime;//接入时间 BYTE byRes1[256]; }NET_DVR_CONNECTDEV_CFG,*LPNET_DVR_CONNECTDEV_CFG; @@ -46639,119 +46639,119 @@ typedef struct tagNET_DVR_GIS_SERVER_INFO { BYTE byUserName[NAME_LEN]; BYTE byPassword[PASSWD_LEN]; - NET_DVR_IPADDR struServerIP; //GISIPַ - WORD wPort; //GIS˿ + NET_DVR_IPADDR struServerIP; //GIS服务器IP地址 + WORD wPort; //GIS服务器端口 BYTE byRes[30]; }NET_DVR_GIS_SERVER_INFO, *LPNET_DVR_GIS_SERVER_INFO; typedef struct tagNET_DVR_BASEMAP_CONTROL_CFG_V40 { DWORD dwSize; - BYTE byEnable; //Ƿʾ1-ʾ0- - BYTE byBaseMapType; //ͼͣ1-ͼƬͼ2-ͼ3-GISͼ + BYTE byEnable; //是否显示,1-显示,0-隐藏 + BYTE byBaseMapType; //底图类型,1-图片底图,2-超高清输入底图,3-GIS底图 BYTE byRes1[2]; - DWORD dwBaseMapNo; //ͼţͼΪ1ʱ˲ΪͼƬţͼΪ2ʱ˲Ϊϵͳںţ1ֽھ+1ֽӰ+1ֽں+1ֽڱ - NET_DVR_GIS_SERVER_INFO struGisServer; //GISϢ,ͼΪGISͼʱЧ + DWORD dwBaseMapNo; //底图号;底图类型为1时,此参数为图片序号,底图类型为2时此参数为超高清输入子系统输入口号(1字节矩阵号+1字节子板号+1字节输入口号+1字节保留) + NET_DVR_GIS_SERVER_INFO struGisServer; //GIS服务器信息,当底图类型为GIS底图时有效 BYTE byRes2[64]; }NET_DVR_BASEMAP_CONTROL_CFG_V40,*LPNET_DVR_BASEMAP_CONTROL_CFG_V40; typedef struct tagNET_DVR_VIDEO_IMG_DB_CFG { - DWORD dwSize; //NET_DVR_VIDEO_IMG_DB_CFGṹС - INT64 i64Capacity; //ͼλλMB - INT64 i64UsedSpace; //ֻÿռ䣬λλMB - INT64 i64AvailableSpace; //ֻÿռ䣬λλMB - BYTE byRes[256]; // + DWORD dwSize; //NET_DVR_VIDEO_IMG_DB_CFG结构体大小 + INT64 i64Capacity; //视图库总容量,低位,单位:MB + INT64 i64UsedSpace; //只读,已用空间,低位,单位:MB + INT64 i64AvailableSpace; //只读,可用空间,低位,单位:MB + BYTE byRes[256]; //保留 }NET_DVR_VIDEO_IMG_DB_CFG, *LPNET_DVR_VIDEO_IMG_DB_CFG; typedef struct tagNET_DVR_FILE_QUERY_INFO { - DWORD dwSize; //NET_DVR_FILE_QUERY_INFOṹС - INT64 i64FileLen; //ļС - BYTE byRes[256]; // + DWORD dwSize; //NET_DVR_FILE_QUERY_INFO结构体大小 + INT64 i64FileLen; //文件大小 + BYTE byRes[256]; //保留 }NET_DVR_FILE_QUERY_INFO, *LPNET_DVR_FILE_QUERY_INFO; typedef struct tagNET_DVR_FILE_INFO_IN { - char szFileID[MAX_FILE_ID_LEN]; //ϴ֮豸ļID + char szFileID[MAX_FILE_ID_LEN]; //上传之后,设备分配的文件ID BYTE byRes[256]; }NET_DVR_FILE_INFO_IN, *LPNET_DVR_FILE_INFO_IN; typedef struct tagNET_DOWNLOAD_CB_INFO { - DWORD dwType; //, 0-Ϣ,1-ͼƬϢ(ƴ洢),2-ͼƬϢ(ƴ洢) - BYTE *pData; //ָ - DWORD dwDataLen; //ݳ - void* pFileInfo; //ļϢṹ(ƴ洢ʱЧ) - DWORD dwFileInfoLen; //ļϢṹ峤(ƴ洢ʱЧ) - BYTE byRes[120]; // + DWORD dwType; //类型, 0-数据信息,1-单个图片信息(云存储批量下载),2-图片总体信息(云存储批量下载) + BYTE *pData; //数据指针 + DWORD dwDataLen; //数据长度 + void* pFileInfo; //文件信息结构体(云存储批量下载时有效) + DWORD dwFileInfoLen; //文件信息结构体长度(云存储批量下载时有效) + BYTE byRes[120]; //保留 }NET_DOWNLOAD_CB_INFO, *LPNET_DOWNLOAD_CB_INFO; typedef BOOL (*DOWNLOAD_DATA_CB)( LONG lHandle, NET_DOWNLOAD_CB_INFO *pCBInfo, void *pUserData); typedef struct tagNET_DVR_DOWNLOAD_CB_PARAM { - DOWNLOAD_DATA_CB fnDownloadDataCB; //ݻص - void *pUserData; //û, fnPreviewDataCBص - INT64 i64Offset; //ļƫڶϵ + DOWNLOAD_DATA_CB fnDownloadDataCB; //下载数据回调函数 + void *pUserData; //用户参数, 在fnPreviewDataCB回调出来 + INT64 i64Offset; //下载文件的偏移量,用于断点续传 BYTE byRes[256]; }NET_DVR_DOWNLOAD_CB_PARAM, *LPNET_DVR_DOWNLOAD_CB_PARAM; typedef struct tagNET_DVR_UPLOAD_DB_IN { - INT64 i64FileLen; //ϴļҪļȣļԲ - BYTE byContinueUpload; //0-ļϴ1-ļļ + INT64 i64FileLen; //上传新文件,需要给出文件长度,文件续传可以不给 + BYTE byContinueUpload; //0-新文件上传,1-老文件续传,文件名必须给出 BYTE byRes[255]; }NET_DVR_UPLOAD_DB_IN, *LPNET_DVR_UPLOAD_DB_IN; typedef struct tagNET_DVR_UPLOAD_DB_OUT { - char szFileID[MAX_FILE_ID_LEN]; //ϴ֮豸ļID + char szFileID[MAX_FILE_ID_LEN]; //上传之后,设备分配的文件ID BYTE byRes[256]; }NET_DVR_UPLOAD_DB_OUT, *LPNET_DVR_UPLOAD_DB_OUT; typedef struct tagNET_DVR_SEND_PARAM_IN { - BYTE *pSendData; //͵Ļ,PicURL == 1 ʱڴд洢 URL ַ,byUploadModeling == 1 ʱڴд洢 ģbase64 - DWORD dwSendDataLen; //ݳ,PicURL == 1 ʱ򣬱ʾ URL ַij,byUploadModeling == 1 ʱ򣬱ʾΪģbase64ļܳ - NET_DVR_TIME_V30 struTime; //ͼƬʱ - BYTE byPicType; //ͼƬʽ,1-jpg,2-bmp,3-png,4-SWF,5-GIF - BYTE byPicURL; //ͼƬݲURLʽ 0-ͼƬݣ1-ͼƬURLʽ - /*Ƿϴģݣ - 0- ͼƬݷʽ(pSendDataָͼƬ, dwPicDataLenΪͼƬݳ) - 1- ֱϴģ(pSendDataָģbase64, dwPicDataLenΪģbase64ļܳ) - עģݲbase64ܷʽ,ѡΪģϴbyPicURL 衣 - /ISAPI/Intelligent/channels//faceContrast/capabilitiesзisSupportUploadModelingڵʱ֧ϴģ. */ + BYTE *pSendData; //发送的缓冲区,PicURL == 1 的时候,内存中存储的是 URL 字符串,byUploadModeling == 1 的时候,内存中存储的是 建模base64加密数据 + DWORD dwSendDataLen; //发送数据长度,PicURL == 1 的时候,表示的 URL 字符串的长度,byUploadModeling == 1 的时候,表示为建模数据base64后的加密长度 + NET_DVR_TIME_V30 struTime; //图片时间 + BYTE byPicType; //图片格式,1-jpg,2-bmp,3-png,4-SWF,5-GIF + BYTE byPicURL; //图片数据采用URL方式 0-二进制图片数据,1-图片数据走URL方式 + /*是否上传建模数据; + 0- 二进制图片数据方式(pSendData指向二进制图片数据, dwPicDataLen为图片二进制数据长度), + 1- 直接上传建模数据(pSendData指向建模base64加密数据, dwPicDataLen为建模数据base64后的加密长度)。 + 注:建模数据采用base64加密方式,选择为建模数据上传后,byPicURL 无需。 + 当”/ISAPI/Intelligent/channels//faceContrast/capabilities”能力中返回isSupportUploadModeling能力节点时,支持上传建模数据. */ BYTE byUploadModeling; BYTE byRes1; - DWORD dwPicMangeNo; //ͼƬ - BYTE sPicName[NAME_LEN]; //ͼƬ - DWORD dwPicDisplayTime; //ͼƬʱλ - BYTE *pSendAppendData; //ͼƬĸϢӦFaceAppendData XML - DWORD dwSendAppendDataLen; //ͼƬĸϢݳ FaceAppendData XMLijȣ + DWORD dwPicMangeNo; //图片管理号 + BYTE sPicName[NAME_LEN]; //图片名称 + DWORD dwPicDisplayTime; //图片播放时长,单位秒 + BYTE *pSendAppendData; //发送图片的附加信息缓冲区,对应FaceAppendData 的XML描述; + DWORD dwSendAppendDataLen; //发送图片的附加信息数据长度 FaceAppendData XML的长度; BYTE byRes[192]; }NET_DVR_SEND_PARAM_IN, *LPNET_DVR_SEND_PARAM_IN; typedef struct tagNET_DVR_DOWNLOAD_QOS { - DWORD dwMaxSpeed; //ٶȣλkbps + DWORD dwMaxSpeed; //流控最大速度,单位kbps BYTE byRes[256]; }NET_DVR_DOWNLOAD_QOS, *LPNET_DVR_DOWNLOAD_QOS; -#define NET_SDK_MAX_FILE_NAME 100 //ļ +#define NET_SDK_MAX_FILE_NAME 100 //最大文件名称 typedef struct tagNET_DVR_UPLOAD_FILEVOLUME_PRARAM_ { DWORD dwSize; - BYTE byFileType; //ļ 0-¼1-Ƶ - BYTE byFileVolnumeID; //ļIDͨNET_DVR_GET_HDVOLUME_CFG ȡ - BYTE byArchive; //0-鵵1-鵵 + BYTE byFileType; //文件类型 0-录像,1-音频 + BYTE byFileVolnumeID; //文件卷ID(可以通过NET_DVR_GET_HDVOLUME_CFG 获取) + BYTE byArchive; //0-不归档,1-归档 BYTE byRes1; - DWORD dwFileSize; //ļС - char szFileName[NET_SDK_MAX_FILE_NAME/*100*/]; //ļ + DWORD dwFileSize; //文件大小 + char szFileName[NET_SDK_MAX_FILE_NAME/*100*/]; //文件名称 BYTE byRes[300]; }NET_DVR_UPLOAD_FILEVOLUME_PRARAM, *LPNET_DVR_UPLOAD_FILEVOLUME_PRARAM; @@ -46760,74 +46760,74 @@ typedef struct tagNET_DVR_DOWNLOAD_FILEVOLUME_PARAM_ DWORD dwSize; BYTE sUrl[MAX_UPLOADFILE_URL_LEN/*240*/]; //url BYTE byRes[248]; - DOWNLOAD_DATA_CB fnDownloadDataCB; //ݻص - void *pUserData; //û, fnPreviewDataCBص + DOWNLOAD_DATA_CB fnDownloadDataCB; //下载数据回调函数 + void *pUserData; //用户参数, 在fnPreviewDataCB回调出来 }NET_DVR_DOWNLOAD_FILEVOLUME_PARAM, *LPNET_DVR_DOWNLOAD_FILEVOLUME_PARAM; -//Ӱģʽ +//电影模式参数 typedef struct tagNET_DVR_FILM_MODE_CFG { - DWORD dwSize; //ṹС - BYTE byScreenType; //ͣ0-棬1-棬2-л - BYTE byRes[255]; // + DWORD dwSize; //结构体大小 + BYTE byScreenType; //画面类型,0-单画面,1-两画面,2-画中画 + BYTE byRes[255]; //保留 }NET_DVR_FILM_MODE_CFG, *LPNET_DVR_FILM_MODE_CFG; -// +//导播策略配置 typedef struct tagNET_DVR_DIRECTED_STRATEGY_CFG { - DWORD dwSize; //ṹС - BYTE byDirectedStrategyType; //ͣ0-̬ԣ1-Ʒ,2-Ʒ12,3-Ʒ13 - BYTE byRes[255]; // + DWORD dwSize; //结构体大小 + BYTE byDirectedStrategyType; //导播策略类型,0-常态导播策略,1-精品导播策略,2-精品导播1替2,3-精品导播策略1替3 + BYTE byRes[255]; //保留 }NET_DVR_DIRECTED_STRATEGY_CFG, *LPNET_DVR_DIRECTED_STRATEGY_CFG; -//߿ӽṹ +//边框子结构 typedef struct NET_DVR_FRAME { - BYTE byFrameWide; /*߿ȺϷȡֵΧΪ[0,14]ֻȡżֵ*/ - BYTE byRed; /*߿ɫΪRGB ģʽRGBֱӦλ*/ + BYTE byFrameWide; /*边框宽度合法取值范围为[0,14],并且只能取偶数值*/ + BYTE byRed; /*边框颜色为RGB 模式,R,G,B,分别对应位于如下*/ BYTE byGreen; BYTE byBlue; BYTE byRes[256]; }NET_DVR_FRAME, *LPNET_DVR_FRAME; -//û߿ +//配置画面边框 typedef struct tagNET_DVR_FRAME_CFG { - DWORD dwSize; //ṹС - NET_DVR_FRAME struTopFrame; //ϱ߿ - NET_DVR_FRAME struBottomFrame;//±߿ - NET_DVR_FRAME struLeftFrame; //߿ - NET_DVR_FRAME struRightFrame; //ұ߿ - BYTE byFrameEnable; //ӱ߿0-1-ӱ߿ - BYTE byRes[256]; // + DWORD dwSize; //结构体大小 + NET_DVR_FRAME struTopFrame; //上边框 + NET_DVR_FRAME struBottomFrame;//下边框 + NET_DVR_FRAME struLeftFrame; //左边框 + NET_DVR_FRAME struRightFrame; //右边框 + BYTE byFrameEnable; //叠加边框0-不叠加1-叠加边框 + BYTE byRes[256]; //保留 }NET_DVR_FRAME_CFG, *LPNET_DVR_FRAME_CFG; -//û߿ +//配置画面边框条件 typedef struct tagNET_DVR_FRAME_COND { DWORD dwSize; - DWORD dwPicNo;// + DWORD dwPicNo;//画面编号 BYTE byRes[256]; }NET_DVR_FRAME_COND, *LPNET_DVR_FRAME_COND; -//ƵŻ +//音频优化参数 typedef struct tagNET_DVR_AUDIO_EFFECTIVE_CFG { - DWORD dwSize; //ṹС - DWORD dwCheckDelay; //ʱӣλs0ʾԶŻ - BYTE byThreshold; //ֵ[0,100] - BYTE byVolumePercent;// [0,100] - BYTE byPriority; //ȼ[0100] + DWORD dwSize; //结构体大小 + DWORD dwCheckDelay; //检测时延,单位s,0表示不自动优化 + BYTE byThreshold; //阈值[0,100] + BYTE byVolumePercent;//音量 [0,100] + BYTE byPriority; //等级,[0,100] BYTE byRes[301]; }NET_DVR_AUDIO_EFFECTIVE_CFG, *LPNET_DVR_AUDIO_EFFECTIVE_CFG; -//¼Ƶ +//录制视频参数 typedef struct tagNET_DVR_RECORD_VIDEO_CFG { - DWORD dwSize; //ṹС - BYTE byExportType; //ֵ0-MP4 1-AVI - BYTE byRes[255]; //ֽ + DWORD dwSize; //结构体大小 + BYTE byExportType; //阈值0-MP4 1-AVI + BYTE byRes[255]; //保留字节 } NET_DVR_RECORD_VIDEO_CFG, *LPNET_DVR_RECORD_VIDEO_CFG; //RTMP Cond @@ -46835,149 +46835,149 @@ typedef struct tagNET_DVR_RTMP_COND { DWORD dwSize; DWORD dwChannel; - BYTE byStreamType; //ͣ1-2-3- + BYTE byStreamType; //码流类型,1-主码流,2-子码流,3-码流三 BYTE byRes[303]; }NET_DVR_RTMP_COND, *LPNET_DVR_RTMP_COND; //RTMP Cfg typedef struct tagNET_DVR_RTMP_CFG { - DWORD dwSize; //ṹС - BYTE byEnable; //ǷRTMP0-ã1- + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用RTMP,0-不启用,1-启用 BYTE byRes1[3]; - DWORD dwPacketLen; //RTMP + DWORD dwPacketLen; //RTMP包长 char szURL[RTMP_URL_LEN]; //RTMP URL - BYTE byRes[256]; //ֽ + BYTE byRes[256]; //保留字节 }NET_DVR_RTMP_CFG, *LPNET_DVR_RTMP_CFG; -//ļ +//文件发布 typedef struct tagNET_DVR_RECORDING_PUBLISH_FILE_CFG { - DWORD dwSize; //ṹС - BYTE byFileID[MAX_ID_LEN_128/*128*/]; //ļID - NET_DVR_TIME_EX struStartTime; //γ̿ʼʱ - NET_DVR_TIME_EX struEndTime; //γ̽ʱ - BYTE byCmdType; // 1--ʼ 2--ȡ - BYTE byFileType; //ļ 0 1ʱγ 2ֶγ + DWORD dwSize; //结构体大小 + BYTE byFileID[MAX_ID_LEN_128/*128*/]; //发布文件ID + NET_DVR_TIME_EX struStartTime; //课程开始时间 + NET_DVR_TIME_EX struEndTime; //课程结束时间 + BYTE byCmdType; //发布命令类型 1--开始发布 2--取消发布 + BYTE byFileType; //发布文件类型 0—保留 1—定时课程 2—手动课程 BYTE byRes[254]; }NET_DVR_RECORDING_PUBLISH_FILE_CFG, *LPNET_DVR_RECORDING_PUBLISH_FILE_CFG; -//ļ +//文件发布进度条件 typedef struct tagNET_DVR_PUBLISH_PROGRESS_COND { DWORD dwSize; DWORD dwChannel; - BYTE byFileID[MAX_ID_LEN_128/*128*/]; //ļID + BYTE byFileID[MAX_ID_LEN_128/*128*/]; //发布文件ID BYTE byRes[256]; }NET_DVR_PUBLISH_PROGRESS_COND, *LPNET_DVR_PUBLISH_PROGRESS_COND; -//ļȲ +//文件发布进度参数 typedef struct tagNET_DVR_PUBLISH_PROGRESS_CFG { - DWORD dwSize; //ṹС - BYTE byPublishPercent; //ٷֱ 0-100 - BYTE byPublishStatus; //״̬ 0-ɹ 1--ڷ 2--ȴ 3-FTP 4--ûҵļ 5--ʧܣ + DWORD dwSize; //结构体大小 + BYTE byPublishPercent; //发布百分比 0-100 + BYTE byPublishStatus; //发布状态 0-发布成功 1--正在发布 2--等待发布 3-连不上FTP 4--没有找到此文件 5--发布失败(其他错误) BYTE byRes[302]; }NET_DVR_PUBLISH_PROGRESS_CFG, *LPNET_DVR_PUBLISH_PROGRESS_CFG; -//ɾͼеļ +//删除视图库中的文件 typedef struct tagNET_DVR_BACKGROUND_PIC_COND { DWORD dwSize; - char szFileID[MAX_ID_LEN_128/*128*/]; //ϴ֮豸ļID, ָͼƬ + char szFileID[MAX_ID_LEN_128/*128*/]; //上传之后,设备分配的文件ID, 指背景图片名 BYTE byRes[256]; }NET_DVR_BACKGROUND_PIC_COND, *LPNET_DVR_BACKGROUND_PIC_COND; -//ѯͼƬļ +//查询背景图片文件 typedef struct tagNET_DVR_BACKGROUND_PIC_CFG { - DWORD dwSize; //ṹС - DWORD dwPicSize; //ͼƬС - DWORD dwPicType; //ͼƬͣYUV:0 JPEG:1 - WORD wPicWidth; //ͼƬ - WORD wPicHeight; //ͼƬ - BYTE byPicName[MAX_PIC_NAME_LEN/*128*/]; //ͼƬ + DWORD dwSize; //结构体大小 + DWORD dwPicSize; //背景图片大小 + DWORD dwPicType; //图片类型,YUV:0 JPEG:1 + WORD wPicWidth; //图片宽 + WORD wPicHeight; //图片高 + BYTE byPicName[MAX_PIC_NAME_LEN/*128*/]; //图片名称 BYTE byRes[128]; }NET_DVR_BACKGROUND_PIC_CFG,*LPNET_DVR_BACKGROUND_PIC_CFG; typedef struct tagNET_DVR_BACKGROUND_PIC_INFO { - DWORD dwSize; //ṹС - BYTE byEnable; //ǷñͼƬӣ0-1- + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用背景图片叠加,0-否,1-是 BYTE byRes1[3]; BYTE byPicID[MAX_ID_LEN_128/*128*/]; - BYTE byRes[300]; // + BYTE byRes[300]; //保留 }NET_DVR_BACKGROUND_PIC_INFO,*LPNET_DVR_BACKGROUND_PIC_INFO; -//ϴͼƬļ +//上传背景图片文件 typedef struct tagNET_DVR_BACKGROUND_PIC_PRARAM { DWORD dwSize; - DWORD dwChannel; //ͨ - DWORD dwPicSize; //ͼƬС - WORD wPicWidth; //ͼƬ - WORD wPicHeight; //ͼƬ - char szPicName[MAX_PIC_NAME_LEN/*128*/]; //ͼƬ - BYTE byPicType; //ͼƬͣYUV:0 JPEG:1 + DWORD dwChannel; //导播通道 + DWORD dwPicSize; //背景图片大小 + WORD wPicWidth; //图片宽 + WORD wPicHeight; //图片高 + char szPicName[MAX_PIC_NAME_LEN/*128*/]; //图片名称 + BYTE byPicType; //图片类型,YUV:0 JPEG:1 BYTE byRes[303]; }NET_DVR_BACKGROUND_PIC_PRARAM,*LPNET_DVR_BACKGROUND_PIC_PRARAM; -//͹ +//低功耗配置 typedef struct tagNET_DVR_LOWPOWER { - DWORD dwSize;//ṹС - BYTE byMode;//ģʽ 0-ֶ1-ʱ - BYTE byEnabled;//ֶģʽµʹܿ 0-رգ1- + DWORD dwSize;//结构体大小 + BYTE byMode;//补光灯模式 0-手动,1-定时 + BYTE byEnabled;//手动模式下的使能开关 0-关闭,1-开启 BYTE byRes[6]; - NET_DVR_SCHEDULE_DAYTIME struSchedTime;//ʱʱ + NET_DVR_SCHEDULE_DAYTIME struSchedTime;//定时时间段 BYTE byRes1[256]; }NET_DVR_LOWPOWER,*LPNET_DVR_LOWPOWER; typedef struct tagNET_DVR_POINT { - DWORD dwX; //X - DWORD dwY; //Y + DWORD dwX; //X轴坐标 + DWORD dwY; //Y坐标 }NET_DVR_POINT, *LPNET_DVR_POINT; -//䱶 +//变倍联动配置 typedef struct tagNET_DVR_ZOOMLINKAGE { - DWORD dwSize;//ṹС - BYTE byEnable;//ʹ 0-أ1- + DWORD dwSize;//结构体大小 + BYTE byEnable;//使能 0-关,1-开 BYTE byRes[255]; }NET_DVR_ZOOMLINKAGE,*LPNET_DVR_ZOOMLINKAGE; typedef struct tagNET_DVR_ONLINEUPGRADE_STATUS { DWORD dwSize; - BYTE byUpgradeStatus;//0-δʼ,1-,2-ɹ,3-Բƥ,4-дfalshʧ,5-Ͳƥ,6-汾ƥ,7-粻ɴ,8-, - //9-ȡļ,10-ûҵļ,11-ļд,12-豸ڴ治,0xff-δ֪ - BYTE byProgress; //,0~100 + BYTE byUpgradeStatus;//0-未开始升级,1-正在升级,2-升级成功,3-包语言不匹配,4-写falsh失败,5-包类型不匹配,6-包版本不匹配,7-网络不可达,8-升级服务器出错, + //9-读取升级包文件出错,10-没有找到升级文件,11-升级文件有错,12-设备内存不足,0xff-未知错误 + BYTE byProgress; //升级进度,0~100 BYTE byRes[250]; }NET_DVR_ONLINEUPGRADE_STATUS,*LPNET_DVR_ONLINEUPGRADE_STATUS; typedef struct tagNET_DVR_FIRMWARECODE_COND { DWORD dwSize; - DWORD dwStartIndex; //ʼ - DWORD dwMaxNum; //32 + DWORD dwStartIndex; //起始索引号 + DWORD dwMaxNum; //单次最大个数,32 BYTE byRes[52]; }NET_DVR_FIRMWARECODE_COND,*LPNET_DVR_FIRMWARECODE_COND; typedef struct tagNET_DVR_FIRMWARECODE { WORD wIndex; - WORD wCodeLen; //ʶ볤ȣϲӦÿʱһжϣֶδ128뱨ʾû¹/ͻ˰汾 - BYTE byCode[MAX_IDCODE_LEN];//ʶ - BYTE byVersion[MAX_VERSIIN_LEN];//汾 + WORD wCodeLen; //识别码长度,上层应用开发的时候做一个判断,如果本字段大于128,请报错,提示用户更新工具/客户端版本 + BYTE byCode[MAX_IDCODE_LEN];//识别码 + BYTE byVersion[MAX_VERSIIN_LEN];//版本 BYTE byRes[12]; }NET_DVR_FIRMWARECODE,*LPNET_DVR_FIRMWARECODE; typedef struct tagNET_DVR_FIRMWARECODE_LIST { DWORD dwSize; - DWORD dwValidCodeNum; //Ч + DWORD dwValidCodeNum; //有效个数 NET_DVR_FIRMWARECODE struCode[MAX_IDCODE_NUM]; BYTE byRes[64]; }NET_DVR_FIRMWARECODE_LIST,*LPNET_DVR_FIRMWARECODE_LIST; @@ -46985,23 +46985,23 @@ typedef struct tagNET_DVR_FIRMWARECODE_LIST typedef struct tagNET_DVR_ONLINEUPGRADE_SERVER { DWORD dwSize; - BYTE byConnectStatus; //0-δ,1- + BYTE byConnectStatus; //0-未连接,1-已连接 BYTE byRes[1019]; }NET_DVR_ONLINEUPGRADE_SERVER,*LPNET_DVR_ONLINEUPGRADE_SERVER; typedef struct tagNET_DVR_ONLINEUPGRADE_VERSION_COND { DWORD dwSize; - BYTE byCheckFromSvr; //ǷҪӷ⣬0-Ҫ豸ԼĽ;1-Ҫ豸ἴʱӷǷ°汾 + BYTE byCheckFromSvr; //是否需要从服务器检测,0-不需要,仅返回设备周期性检查的结果;1-需要,设备会即时连接服务器检测是否有新版本 BYTE byRes[59]; }NET_DVR_ONLINEUPGRADE_VERSION_COND,*LPNET_DVR_ONLINEUPGRADE_VERSION_COND; typedef struct tagNET_DVR_ONLINEUPGRADE_VERSION_RET { DWORD dwSize; - BYTE byNewVersionAvailable; //Ƿ°汾,0-,1- - BYTE byNewVersion[MAX_VERSIIN_LEN]; //°汾İ汾 - BYTE byChangeLog[SDK_LEN_2048]; //°汾µ + BYTE byNewVersionAvailable; //是否有新版本,0-否,1-是 + BYTE byNewVersion[MAX_VERSIIN_LEN]; //新版本的版本号 + BYTE byChangeLog[SDK_LEN_2048]; //新版本更新的内容 BYTE byRes[971]; }NET_DVR_ONLINEUPGRADE_VERSION_RET,*LPNET_DVR_ONLINEUPGRADE_VERSION_RET; @@ -47016,141 +47016,141 @@ typedef struct tagNET_DVR_RECOMMEN_VERSION_COND typedef struct tagNET_DVR_RECOMMEN_VERSION_RET { DWORD dwSize; - BYTE byRecommenUpgrade; //Ƽ,0-,1- + BYTE byRecommenUpgrade; //推荐升级,0-否,1-是 BYTE byRes[123]; }NET_DVR_RECOMMEN_VERSION_RET,*LPNET_DVR_RECOMMEN_VERSION_RET; -//ʪ +//温湿度配置 typedef struct tagNET_DVR_THSCREEN { - DWORD dwSize;//ṹС - BYTE byEnable;//öʱʹ - BYTE byTHOSDDisplay;//ʪʾOSDʾǷ, 0-1- - BYTE byRes[2]; // ֽ - NET_VCA_POINT struTHOSDPoint;//ʪʾOSDʾϽ - BYTE byTimingMode;//Уʱģʽ 0-ֶ1-Զ + DWORD dwSize;//结构体大小 + BYTE byEnable;//启用定时使能 + BYTE byTHOSDDisplay;//温湿度显示OSD显示是否启用, 0-否,1-是 + BYTE byRes[2]; // 保留字节 + NET_VCA_POINT struTHOSDPoint;//温湿度显示OSD显示左上角坐标 + BYTE byTimingMode;//校时模式 0-手动,1-自动 BYTE byRes1; - WORD wInterval;//Уʱʱģʽ£ʱ[1,10080]m + WORD wInterval;//校时定时模式下,间隔时间设置[1,10080]m BYTE byRes2[254]; }NET_DVR_THSCREEN,*LPNET_DVR_THSCREEN; typedef struct tagNET_DVR_SENSOR_ADJUSTMENT { - DWORD dwSize;//ṹС - BYTE byType;//ģʽ0-£1-ң2-ת3-ͼӳǣ4-RGB, 5-, 6-RGB_Ex - BYTE bySensorNo;//Sensor [1,8] + DWORD dwSize;//结构体大小 + BYTE byType;//调整模式:0-上下,1-左右,2-旋转,3-图像视场角,4-RGB调整, 5-亮度, 6-RGB_Ex调整 + BYTE bySensorNo;//Sensor 号[1,8] BYTE byRes[2]; - int iAdjustMentRange;// [-100,100] תʱ[-30,30] ͼӳ[-10,10] - BYTE byR;//RGBRɫΧ0-100 - BYTE byG;//RGBGɫΧ0-100 - BYTE byB;//RGBBɫΧ0-100 - BYTE byRgbType;//RGBͣ0-1-ģʽ2-ֶģʽ - BYTE byBrightness;//ȣΧ0-100,Ĭֵ50 + int iAdjustMentRange;//调整幅度 [-100,100] 旋转的时候[-30,30] 图像视场角[-10,10] + BYTE byR;//RGB参数,R(红色),范围0-100 + BYTE byG;//RGB参数,G(绿色),范围0-100 + BYTE byB;//RGB参数,B(蓝色),范围0-100 + BYTE byRgbType;//RGB类型,0-保留,1-产线模式,2-手动模式 + BYTE byBrightness;//亮度,范围0-100,默认值50 BYTE byRes1[3]; - WORD wRex;//RGB(չ)RɫΧ0-2048 - WORD wGex;//RGB(չ)GɫΧ0-2048 - WORD wBex;//RGB(չ)BɫΧ0-2048 + WORD wRex;//RGB参数(扩展),R(红色),范围0-2048 + WORD wGex;//RGB参数(扩展),G(绿色),范围0-2048 + WORD wBex;//RGB参数(扩展),B(蓝色),范围0-2048 BYTE byRes2[114]; }NET_DVR_SENSOR_ADJUSTMENT,*LPNET_DVR_SENSOR_ADJUSTMENT; typedef struct tagNET_DVR_SENSOR_ADJUSTMENT_INFO { - DWORD dwSize;//ṹС - int iPan;//ֵ - int iTilt;//ֵ - int iRotation;//תֵ - int iFieldAngle;//ͼӳֵ - BYTE byR;//RGBRɫΧ0-100 - BYTE byG;//RGBGɫΧ0-100 - BYTE byB;//RGBBɫΧ0-100 - BYTE byRgbType;//RGBͣ0-1-ģʽ2-ֶģʽ - BYTE byBrightness;//ȣΧ0-100,Ĭֵ50 + DWORD dwSize;//结构体大小 + int iPan;//左右值 + int iTilt;//上下值 + int iRotation;//旋转值 + int iFieldAngle;//图像视场角值 + BYTE byR;//RGB参数,R(红色),范围0-100 + BYTE byG;//RGB参数,G(绿色),范围0-100 + BYTE byB;//RGB参数,B(蓝色),范围0-100 + BYTE byRgbType;//RGB类型,0-保留,1-产线模式,2-手动模式 + BYTE byBrightness;//亮度,范围0-100,默认值50 BYTE byRes[3]; - WORD wRex;//RGB(չ)RɫΧ0-2048 - WORD wGex;//RGB(չ)GɫΧ0-2048 - WORD wBex;//RGB(չ)BɫΧ0-2048 + WORD wRex;//RGB参数(扩展),R(红色),范围0-2048 + WORD wGex;//RGB参数(扩展),G(绿色),范围0-2048 + WORD wBex;//RGB参数(扩展),B(蓝色),范围0-2048 BYTE byRes1[114]; }NET_DVR_SENSOR_ADJUSTMENT_INFO,*LPNET_DVR_SENSOR_ADJUSTMENT_INFO; typedef struct tagNET_DVR_SENSOR_RESET { - DWORD dwSize;//ṹС - BYTE bySensorNo;//Sensor[1,8];Sensor NoΪ0ʱ򣬱ʾȫ±ʾ + DWORD dwSize;//结构体大小 + BYTE bySensorNo;//Sensor号[1,8];当Sensor No为0的时候,表示全部清除;其他情况下表示单个清除 BYTE byRes[127]; }NET_DVR_SENSOR_RESET,*LPNET_DVR_SENSOR_RESET; typedef struct tagNET_DVR_PANORAMAIMAGE { - DWORD dwSize;//ṹС - BYTE byFusionMode;//ģʽ0-ԭʼͼ1-ȫͼ - BYTE byPreviewMode;//ģʽ1-Ŀ꣬2-̶ʾ + DWORD dwSize;//结构体大小 + BYTE byFusionMode;//模式:0-原始图像,1-全景图像 + BYTE byPreviewMode;//模式:1-目标,2-固定显示 BYTE byRes[126]; }NET_DVR_PANORAMAIMAGE,*LPNET_DVR_PANORAMAIMAGE; typedef struct tagNET_DVR_RELOCATE_INFO { - DWORD dwSize;//ṹС - BYTE byTakeOverAddr[MAX_DOMAIN_NAME/*64*/]; //ӹ豸ĵַ - WORD wPort ; //豸˿ں - BYTE byRes[254] ; // + DWORD dwSize;//结构体大小 + BYTE byTakeOverAddr[MAX_DOMAIN_NAME/*64*/]; //接管设备的地址 + WORD wPort ; //设备端口号 + BYTE byRes[254] ; //保留 }NET_DVR_RELOCATE_INFO, *LPNET_DVR_RELOCATE_INFO; typedef struct tagNET_DVR_CONFERENCE_REGION { DWORD dwSize; - BYTE byEnabled; //Ƿû0-1- + BYTE byEnabled; //是否启用会议区域,0-否,1-是 BYTE byRes1[3]; - NET_DVR_POINT struRegion[RECT_POINT_NUM]; //򣬾ΣʼΪ½ǣ˳ʱ뷽 - DWORD dwOutputWidth; //ڻ׼ֻܻȡ - DWORD dwOutputHeight; //ڻ׼ߣֻܻȡ + NET_DVR_POINT struRegion[RECT_POINT_NUM]; //会议区域,矩形,起始点为左下角,顺时针方向 + DWORD dwOutputWidth; //单输出口基准宽,只能获取 + DWORD dwOutputHeight; //单输出口基准高,只能获取 BYTE byRes2[32]; }NET_DVR_CONFERENCE_REGION, *LPNET_DVR_CONFERENCE_REGION; typedef struct tagNET_DVR_TERMINAL_CALL_CFG { DWORD dwSize; - BYTE byAnswerType; //Ӧʽ1-Զ2-Զܽӣ3-ֶ - BYTE byProtocolType; //ʹõЭͣ1-SIP2-H232 - BYTE byTransmissionProtocol; //Эͣ0-Ч1-TCP2-UDP + BYTE byAnswerType; //会议呼叫响应方式,1-自动接听,2-自动拒接,3-手动接听 + BYTE byProtocolType; //使用的协议类型,1-SIP,2-H232 + BYTE byTransmissionProtocol; //传输协议类型,0-无效,1-TCP,2-UDP BYTE byRes[29]; }NET_DVR_TERMINAL_CALL_CFG, *LPNET_DVR_TERMINAL_CALL_CFG; typedef struct tagNET_DVR_TERMINAL_CALL_INFO { BYTE byTermianlURL[MAX_URL_LEN]; - DWORD dwCallRate;//ʣΧΪ32~6144λKbps () + DWORD dwCallRate;//呼叫速率,范围为:32~6144,单位Kbps (连接速率) BYTE byRes[124]; }NET_DVR_TERMINAL_CALL_INFO, *LPNET_DVR_TERMINAL_CALL_INFO; typedef struct tagNET_DVR_TERMINAL_AUDIO_CTRL { - BYTE byMute; //Ƿ0-1- - BYTE byVolume; //ǾʱЧ1-100 - BYTE byAudioInputDisabled; //ֹƵ룬0-Ƶ룬1-ֹƵ - BYTE byAudioInputVolume; //ƵƵʱЧ1-100 + BYTE byMute; //是否静音,0-否,1-是 + BYTE byVolume; //音量,非静音时有效,1-100 + BYTE byAudioInputDisabled; //禁止音频输入,0-允许音频输入,1-禁止音频输入 + BYTE byAudioInputVolume; //音频输入音量,允许音频输入时有效,1-100 BYTE byRes[636]; }NET_DVR_TERMINAL_AUDIO_CTRL, *LPNET_DVR_TERMINAL_AUDIO_CTRL; typedef struct tagNET_DVR_HOWLING_SUPPRESSION { - BYTE byEnabled; //ǷʹХ - BYTE byHsSensibility; //Х - BYTE byHsMode; //Хģʽ0-Ĭϣ1-٣2- + BYTE byEnabled; //是否使能啸叫抑制 + BYTE byHsSensibility; //啸叫抑制灵敏度 + BYTE byHsMode; //啸叫抑制模式,0-默认,1-慢速,2-快速 BYTE byRes1; - DWORD dwHsTime; //Хʱ䣬λms + DWORD dwHsTime; //啸叫抑制时间,单位:ms BYTE byRes2[16]; }NET_DVR_HOWLING_SUPPRESSION, *LPNET_DVR_HOWLING_SUPPRESSION; typedef struct tagNET_DVR_TERMINAL_INPUT_AUDIO { - DWORD dwChannel; //ͨ - BYTE byGainType; //ͣ1-棬2-ģ,3- - BYTE byEnableSimulate; //Ƿģ棬0-1- - BYTE byVolumeSimulate; //ģʱЧ1-100 - BYTE byEnableDigital; //Ƿ棬0-1- - BYTE byVolumeDigital; //ʱЧ1-100 + DWORD dwChannel; //通道号 + BYTE byGainType; //增益类型,1-数字增益,2-模拟增益,3-两者 + BYTE byEnableSimulate; //是否启用模拟增益,0-否,1-是 + BYTE byVolumeSimulate; //模拟音量,启用时有效,1-100 + BYTE byEnableDigital; //是否启用数字增益,0-否,1-是 + BYTE byVolumeDigital; //数字音量,启用时有效,1-100 BYTE byRes1[3]; - NET_DVR_HOWLING_SUPPRESSION struHsParam; //ХƲ + NET_DVR_HOWLING_SUPPRESSION struHsParam; //啸叫抑制参数 BYTE byRes[604]; }NET_DVR_TERMINAL_INPUT_AUDIO, *LPNET_DVR_TERMINAL_INPUT_AUDIO; @@ -47166,17 +47166,17 @@ typedef union tagNET_DVR_TERMINAL_DETAIL_CTRL_PARAM typedef struct tagNET_DVR_TERMINAL_CTRL_PARAM { DWORD dwSize; - BYTE byOperateType; //ͣ1-2-ܽӣ3-У4-Ƶڣ5-Ҷϣ6-˫7-˫ + BYTE byOperateType; //操作类型,1-接听,2-拒接,3-呼叫,4-音频调节,5-挂断,6-双流开,7-双流关 BYTE byRes1[3]; - NET_DVR_TERMINAL_DETAIL_CTRL_PARAM struCtrlParam; //Ʋ + NET_DVR_TERMINAL_DETAIL_CTRL_PARAM struCtrlParam; //具体控制参数 BYTE byRes2[32]; }NET_DVR_TERMINAL_CTRL_PARAM, *LPNET_DVR_TERMINAL_CTRL_PARAM; typedef struct tagNET_DVR_POS_INFO_OVERLAY { DWORD dwSize; - BYTE byPosInfoOverlayEnable;// PosϢӿƣ0-ӣ1- - BYTE byOverlayType;//0-ӽ뿪1-ӽ롢뿪PASSID߶ + BYTE byPosInfoOverlayEnable;// Pos信息码流叠加控制,0-不叠加,1-叠加 + BYTE byOverlayType;//0-叠加进入和离开,1-叠加进入、离开、PASS、ID、高度 BYTE byRes[126]; }NET_DVR_POS_INFO_OVERLAY, *LPNET_DVR_POS_INFO_OVERLAY; @@ -47184,480 +47184,480 @@ typedef struct tagNET_DVR_POS_INFO_OVERLAY typedef struct tagNET_DVR_CAMERA_WORK_MODE { DWORD dwSize; - BYTE byWorkMode;//ģʽ0-ģʽ1-궨ģʽ - BYTE byPreviewImageMode;//Ԥͼģʽ0-ͼ1-ͼ2-ҵͼ + BYTE byWorkMode;//工作模式,0-正常模式,1-工厂标定模式 + BYTE byPreviewImageMode;//预览图像模式,0-左眼图像,1-右眼图像,2-左右叠加图像 BYTE byRes[126]; }NET_DVR_CAMERA_WORK_MODE, *LPNET_DVR_CAMERA_WORK_MODE; typedef struct tagNET_DVR_VCA_VERSION_LIST { - DWORD dwSize; //ṹ峤 - NET_DVR_VCA_VERSION struVcaVersion[NET_SDK_VERSION_LIST_LEN/*64*/];//㷨汾Ϣ + DWORD dwSize; //结构体长度 + NET_DVR_VCA_VERSION struVcaVersion[NET_SDK_VERSION_LIST_LEN/*64*/];//算法库版本信息 BYTE byRes[128]; }NET_DVR_VCA_VERSION_LIST, *LPNET_DVR_VCA_VERSION_LIST; typedef struct tagNET_DVR_SETUP_CALIB_COND { DWORD dwSize; - BYTE byCalibrateType;//궨ͣ0-δб궨1-Զ궨2-ֶ궨,3-ܱ궨 + BYTE byCalibrateType;//标定类型,0-未进行标定,1-自动标定,2-手动标定,3-智能标定 BYTE byRes1[3]; - float fTiltAngle;//,λȣĬֵ0ǷΧ0-180,byCalibrateTypeΪ2ʱЧ - float fHeelAngle;//б,λȣбĬֵ0бǷΧ-90-90,byCalibrateTypeΪ2ʱЧ - float fHeight;//߶ȣ߶ȵλף߶Ĭֵ300ף߶ȷΧ200-500,byCalibrateTypeΪ2ʱЧ - NET_VCA_POLYGON struAutoCalibPolygon;//Զ궨򣬵byCalibrateTypeΪ1ʱЧ - BYTE byIntelligentType;//궨ͣ0- 1-2-ԣ3-쳣Ϊ⣻ֻڱ궨ʱNET_DVR_SETUP_CALIB_RESULTصݲЧ + float fTiltAngle;//俯仰角,单位:度;俯仰角默认值:0;俯仰角范围:0-180度,当byCalibrateType为2时有效 + float fHeelAngle;//倾斜角,单位:度;倾斜角默认值:0;倾斜角范围:-90-90度,当byCalibrateType为2时有效 + float fHeight;//高度,高度单位:厘米;高度默认值300厘米:高度范围:200-500厘米,当byCalibrateType为2时有效 + NET_VCA_POLYGON struAutoCalibPolygon;//自动标定区域,当byCalibrateType为1时有效 + BYTE byIntelligentType;//标定的智能类型,0-保留, 1-客流,2-人体属性,3-异常行为检测;只有在标定客流时NET_DVR_SETUP_CALIB_RESULT返回的数据才有效 BYTE byRes[127]; }NET_DVR_SETUP_CALIB_COND, *LPNET_DVR_SETUP_CALIB_COND; typedef struct tagNET_DVR_SETUP_CALIB_RESULT { DWORD dwSize; - BYTE byCalibrateType;//궨ͣ0-δб궨1-Զ궨2-ֶ궨,3-ܱ궨 + BYTE byCalibrateType;//标定类型,0-未进行标定,1-自动标定,2-手动标定,3-智能标定 BYTE byRes1[3]; - float fTiltAngle;//,λȣĬֵ0ǷΧ0-180,byCalibrateTypeΪ2ʱЧ - float fHeelAngle;//б,λȣбĬֵ0бǷΧ-90-90,byCalibrateTypeΪ2ʱЧ - float fHeight;//߶ȣ߶ȵλף߶Ĭֵ300ף߶ȷΧ200-500,byCalibrateTypeΪ2ʱЧ - NET_VCA_POLYGON struCountPolygon;// - NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 뷽 - NET_VCA_LINE struLine;// + float fTiltAngle;//俯仰角,单位:度;俯仰角默认值:0;俯仰角范围:0-180度,当byCalibrateType为2时有效 + float fHeelAngle;//倾斜角,单位:度;倾斜角默认值:0;倾斜角范围:-90-90度,当byCalibrateType为2时有效 + float fHeight;//高度,高度单位:厘米;高度默认值300厘米:高度范围:200-500厘米,当byCalibrateType为2时有效 + NET_VCA_POLYGON struCountPolygon;//计数区域 + NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 流量进入方向 + NET_VCA_LINE struLine;//检测线 BYTE byRes[128]; }NET_DVR_SETUP_CALIB_RESULT, *LPNET_DVR_SETUP_CALIB_RESULT; typedef struct tagNET_DVR_CALL_QUERY_COND { DWORD dwSize; - BYTE bySearchID[MAX_SEARCH_ID_LEN]; //ʶ - NET_DVR_TIME struStartTime; //ʼʱ - NET_DVR_TIME struEndTime; //ʱ - BYTE byCallType; //ͣ1-ѽӣ2-δӣ3-Ѳ4- + BYTE bySearchID[MAX_SEARCH_ID_LEN]; //搜索标识符 + NET_DVR_TIME struStartTime; //搜索起始时间 + NET_DVR_TIME struEndTime; //搜索结束时间 + BYTE byCallType; //呼叫类型,1-已接,2-未接,3-已拨,4-所有类型 BYTE byRes1[3]; - DWORD dwMaxResults; //β෵ظ - DWORD dwSearchPos; //ʼ + DWORD dwMaxResults; //本次查找最多返回个数 + DWORD dwSearchPos; //查找起始索引 BYTE byRes2[32]; }NET_DVR_CALL_QUERY_COND, *LPNET_DVR_CALL_QUERY_COND; typedef struct tagNET_DVR_CALL_QUERY_SINGLE { DWORD dwSize; - BYTE byCallType; //ͣ1-ѽӣ2-δӣ3-Ѳ + BYTE byCallType; //呼叫类型,1-已接,2-未接,3-已拨 BYTE byRes1[3]; - BYTE byTerminalName[TERMINAL_NAME_LEN]; //ն - BYTE byAddressURL[MAX_URL_LEN]; //ԶURLַ - NET_DVR_TIME struStartTime; //пʼʱ - NET_DVR_TIME struEndTime; //нʱ + BYTE byTerminalName[TERMINAL_NAME_LEN]; //终端名 + BYTE byAddressURL[MAX_URL_LEN]; //对端URL地址 + NET_DVR_TIME struStartTime; //呼叫开始时间 + NET_DVR_TIME struEndTime; //呼叫结束时间 BYTE byRes2[32]; }NET_DVR_CALL_QUERY_SINGLE, *LPNET_DVR_CALL_QUERY_SINGLE; typedef enum tagCALL_QUERY_RESULT_STATUS { - CALL_QUERY_RESULT_OK = 0, //ɹѯ - CALL_QUERY_RESULT_FAIL, //ѯʧܣδ֪ - CALL_QUERY_RESULT_MORE, //ɹѯ иûз - CALL_QUERY_RESULT_NOMATCH, //ûвѯƥ - CALL_QUERY_RESULT_PARAMERROR, //ѯ - CALL_QUERY_RESULT_INVALIDTIME, //ѯʱЧ - CALL_QUERY_RESULT_TIMEOUT, //ѯʱ + CALL_QUERY_RESULT_OK = 0, //成功查询所有 + CALL_QUERY_RESULT_FAIL, //查询失败,未知错误 + CALL_QUERY_RESULT_MORE, //成功查询 还有更多没有返回 + CALL_QUERY_RESULT_NOMATCH, //没有查询到匹配的 + CALL_QUERY_RESULT_PARAMERROR, //查询条件参数错误 + CALL_QUERY_RESULT_INVALIDTIME, //查询条件时间无效 + CALL_QUERY_RESULT_TIMEOUT, //查询超时 }CALL_QUERY_RESULT_STATUS; typedef struct tagNET_DVR_CALL_QUERY_RESULT { DWORD dwSize; - BYTE bySearchID[MAX_SEARCH_ID_LEN]; //ʶ - BYTE byStatus; //ѯ״̬ οCALL_QUERY_RESULT_STATUSṹ - BYTE byRes[3]; // - DWORD dwCount; //ʵʲѯĽ - BYTE *pResults; //ݣdwCountNET_DVR_CALL_QUERY_SINGLE,ҪԤȷڴ + BYTE bySearchID[MAX_SEARCH_ID_LEN]; //搜索标识符 + BYTE byStatus; //查询状态 参考CALL_QUERY_RESULT_STATUS结构体 + BYTE byRes[3]; //保留 + DWORD dwCount; //实际查询到的结果个数 + BYTE *pResults; //结果内容,dwCount个NET_DVR_CALL_QUERY_SINGLE,需要调用者预先分屏好内存 BYTE byRes2[32]; }NET_DVR_CALL_QUERY_RESULT, *LPNET_DVR_CALL_QUERY_RESULT; typedef struct tagNET_DVR_CONFERENCE_CALL_INFO { - BYTE byConferenceID[MAX_ID_LEN]; //ID - BYTE byConferenceName[NAME_LEN]; // - NET_DVR_TIME struStartTime; //鿪ʼʱ - NET_DVR_TIME struEndTime; //ʱ + BYTE byConferenceID[MAX_ID_LEN]; //会议ID + BYTE byConferenceName[NAME_LEN]; //会议名称 + NET_DVR_TIME struStartTime; //会议开始时间 + NET_DVR_TIME struEndTime; //会议结束时间 BYTE byRes[512]; }NET_DVR_CONFERENCE_CALL_INFO, *LPNET_DVR_CONFERENCE_CALL_INFO; typedef union tagNET_DVR_CALL_INFO { BYTE byRes[640]; - NET_DVR_TERMINAL_CALL_INFO struTerminalCallInfo; //ն˵ԵϢ - NET_DVR_CONFERENCE_CALL_INFO struConferenceCallInfo; //Ϣ + NET_DVR_TERMINAL_CALL_INFO struTerminalCallInfo; //终端点对点呼叫信息 + NET_DVR_CONFERENCE_CALL_INFO struConferenceCallInfo; //会议呼叫信息 }NET_DVR_CALL_INFO, *LPNET_DVR_CALL_INFO; typedef struct tagNET_DVR_CONFERENCE_CALL_ALARM { DWORD dwSize; - BYTE byAlarmType; //ͣ1-У 2-״̬л3-ն - BYTE byCallType; //ͣΪ1ʱЧ1-ն˵ԵУ2- - BYTE byAutoAnswer; //ǷԶ0-1- - BYTE byCallStatusSwitch; //״̬лͣΪ2ʱЧ1-ʼУ2-гɹ3-н4-Զ˹Ҷ - NET_DVR_CALL_INFO struCallInfo; //Ϣ + BYTE byAlarmType; //报警类型,1-会议呼叫, 2-呼叫状态切换,3-终端提问 + BYTE byCallType; //呼叫类型,报警类型为1时有效,1-终端点对点呼叫,2-会议呼叫 + BYTE byAutoAnswer; //是否已自动接听,0-否,1-是 + BYTE byCallStatusSwitch; //呼叫状态切换类型,当报警类型为2时有效,1-开始呼叫,2-呼叫成功,3-呼叫结束,4-对端挂断 + NET_DVR_CALL_INFO struCallInfo; //呼叫信息 BYTE byRes2[32]; }NET_DVR_CONFERENCE_CALL_ALARM, *LPNET_DVR_CONFERENCE_CALL_ALARM; typedef struct tagNET_DVR_TERMINAL_INPUT_CFG { DWORD dwSize; - DWORD dwInputNo; //ΪƵڱ - BYTE byStreamType;//ͣ0-1-2- + DWORD dwInputNo; //作为视频会议输入的输入口编号 + BYTE byStreamType;//码流类型:0-主码流,1-子码流,2-三码流 BYTE byRes[31]; }NET_DVR_TERMINAL_INPUT_CFG, *LPNET_DVR_TERMINAL_INPUT_CFG; typedef struct tagNET_DVR_AUDIO_STATUS { - BYTE byMute; //Ƿ0-1- - BYTE byVolume; //1-100ǾʱЧ - BYTE byAudioInputDisabled; //Ƶ룬0-1- - BYTE byAudioInputVolume; //Ƶ1-100ƵʱЧ + BYTE byMute; //是否静音,0-否,1-是 + BYTE byVolume; //会议音量,1-100,非静音时有效 + BYTE byAudioInputDisabled; //禁用音频输入,0-否,1-是 + BYTE byAudioInputVolume; //音频输入音量,1-100,允许音频输入时有效 BYTE byRes[32]; }NET_DVR_AUDIO_STATUS, *LPNET_DVR_AUDIO_STATUS; typedef struct tagNET_DVR_TERMINAL_CONFERENCE_STATUS { DWORD dwSize; - BYTE byConferenceState; //״̬0-У1-æµУ2-У3- - BYTE byConferenceType; //ͣ1-Ե㣬2-MCU - BYTE byDualStreamEnabled; //Ƿ˫0-δ1- - BYTE byMicPowerEnabled; //˷ԴǷ0-δ1- - DWORD dwInputNo; //ʹõƵں - NET_DVR_CALL_INFO struCallInfo; //Ϣ - NET_DVR_AUDIO_STATUS struAudioStatus; //Ƶ״̬ + BYTE byConferenceState; //会议状态,0-空闲,1-忙碌(会议中),2-呼叫中,3-被呼叫中 + BYTE byConferenceType; //会议类型,1-点对点,2-MCU发起会议 + BYTE byDualStreamEnabled; //是否开启双流,0-未开启,1-开启 + BYTE byMicPowerEnabled; //麦克风电源是否开启,0-未开启,1-开启 + DWORD dwInputNo; //使用的音频输入口号 + NET_DVR_CALL_INFO struCallInfo; //会议信息 + NET_DVR_AUDIO_STATUS struAudioStatus; //音频相关状态 BYTE byRes2[32]; }NET_DVR_TERMINAL_CONFERENCE_STATUS, *LPNET_DVR_TERMINAL_CONFERENCE_STATUS; -//նעGKϢ +//终端注册GK信息 typedef struct tagNET_DVR_TERMINAL_GK_CFG { DWORD dwSize; - BYTE byEnable; //Ƿ - BYTE byRegisterState; //ע״̬0-δעᣬ1-עᣬֻ + BYTE byEnable; //是否启用 + BYTE byRegisterState; //注册状态,0-未注册,1-已注册,只读 BYTE byRes1[2]; NET_DVR_IPADDR struGKIP; //GK IP - WORD wGKPort; //GK˿ں + WORD wGKPort; //GK端口号 BYTE byRes2[2]; - BYTE byRegisterName[REGISTER_NAME_LEN]; //նעᵽGK - BYTE byPassword[PASSWD_LEN]; //նעᵽGK + BYTE byRegisterName[REGISTER_NAME_LEN]; //终端注册到GK的名字 + BYTE byPassword[PASSWD_LEN]; //终端注册到GK的密码 BYTE byRes3[16]; }NET_DVR_TERMINAL_GK_CFG, *LPNET_DVR_TERMINAL_GK_CFG; -//οز +//解码器漫游开关参数 typedef struct tagNET_DVR_WIN_ROAM_SWITCH_CFG { DWORD dwSize; - BYTE byEnableRoam; //ǷΣ0-񣬷0- + BYTE byEnableRoam; //是否允许窗口漫游,0-否,非0-是 BYTE byRes[31]; }NET_DVR_WIN_ROAM_SWITCH_CFG,*LPNET_DVR_WIN_ROAM_SWITCH_CFG; typedef struct tagNET_DVR_LED_OUTPUT_CFG { DWORD dwSize; - BYTE byEnableZoom; //Ƿţ0-1- - BYTE byAutoCutBlackEdge; //ǷԶüڱߣ0-1- + BYTE byEnableZoom; //是否缩放,0-否,1-是 + BYTE byAutoCutBlackEdge; //是否自动裁剪黑边,0-否,1-是 BYTE byRes1[2]; - WORD wLEDWidth; //ֱʿ - WORD wLEDHeight; //ֱʸ - DWORD dwRefreshRate; //ˢƵ - DWORD dwInputNO; //ͨ + WORD wLEDWidth; //分辨率宽 + WORD wLEDHeight; //分辨率高 + DWORD dwRefreshRate; //刷新频率 + DWORD dwInputNO; //关联的输入通道号 BYTE byRes2[32]; }NET_DVR_LED_OUTPUT_CFG, *LPNET_DVR_LED_OUTPUT_CFG; typedef struct tagNET_DVR_LED_OUTPUT_PORT_CFG { DWORD dwSize; - BYTE byEnabled; //Ƿʹܣ0-1- + BYTE byEnabled; //是否使能,0-否,1-是 BYTE byRes1[3]; - DWORD dwPortNum; //Ķ˿ڸ - DWORD dwPortNo[MAX_OUTPUT_PORT_NUM]; //Ķ˿ں + DWORD dwPortNum; //包含的端口个数 + DWORD dwPortNo[MAX_OUTPUT_PORT_NUM]; //包含的端口号 BYTE byRes2[64]; }NET_DVR_LED_OUTPUT_PORT_CFG, *LPNET_DVR_LED_OUTPUT_PORT_CFG; typedef struct tagNET_DVR_LINE_COLUMN_INFO { - WORD wLine; //к - WORD wColumn; //к + WORD wLine; //行号 + WORD wColumn; //列号 }NET_DVR_LINE_COLUMN_INFO, *LPNET_DVR_LINE_COLUMN_INFO; typedef struct tagNET_DVR_LED_DISPLAY_AREA { DWORD dwSize; - NET_DVR_LINE_COLUMN_INFO struLCInfo; //ʾʼλ(տк) - WORD wWidth; //տ - WORD wHeight; //տ - WORD wRecvCardWidth; //տȴСΪ0ʹö˿ڲнտС - WORD wRecvCardHeigt; //տ߶ȴСΪ0ʹö˿ڲнտС + NET_DVR_LINE_COLUMN_INFO struLCInfo; //显示区域的起始位置(接收卡行列号) + WORD wWidth; //横向接收卡数 + WORD wHeight; //竖向接收卡数 + WORD wRecvCardWidth; //接收卡宽度大小,为0则使用端口参数中接收卡大小参数 + WORD wRecvCardHeigt; //接收卡高度大小,为0则使用端口参数中接收卡大小参数 BYTE byRes[32]; }NET_DVR_LED_DISPLAY_AREA, *LPNET_DVR_LED_DISPLAY_AREA; typedef struct tagNET_DVR_LED_RECV_CARD_INFO { - NET_DVR_LINE_COLUMN_INFO struPos; //տλ - WORD wRecvCardWidth; //տȴС - WORD wRecvCardHeigt; //տ߶ȴС + NET_DVR_LINE_COLUMN_INFO struPos; //接收卡位置 + WORD wRecvCardWidth; //接收卡宽度大小 + WORD wRecvCardHeigt; //接收卡高度大小 }NET_DVR_LED_RECV_CARD_INFO, *LPNET_DVR_LED_RECV_CARD_INFO; typedef struct tagNET_DVR_LED_PORT_BACKUP { - BYTE byEnabled; //Ƿö˿ڱݣ0-1- - BYTE byPortMode; //˿ģʽ1-ڣ2-ݿ + BYTE byEnabled; //是否启用端口备份,0-否,1-是 + BYTE byPortMode; //端口模式,1-主口,2-备份口 BYTE byRes1[2]; - DWORD dwPairPort; //Զ˿ںţ˿Ϊʱ˲Ϊݿڶ˿ںţ˿Ϊݿʱ˲Ϊڶ˿ں + DWORD dwPairPort; //配对端口号,当端口为主口时,此参数为备份口端口号,当端口为备份口时,此参数为主口端口号 BYTE byRes2[16]; }NET_DVR_LED_PORT_BACKUP, *LPNET_DVR_LED_PORT_BACKUP; typedef struct tagNET_DVR_LED_PORT_CFG { DWORD dwSize; - BYTE byEnabled; //Ƿøö˿ڣ0-1- + BYTE byEnabled; //是否启用该端口,0-否,1-是 BYTE byRes1[3]; - NET_DVR_LED_PORT_BACKUP struLedPortBackup; //˿ڱݲ - DWORD dwRecvCardNum; //˿ӵĽտ - NET_DVR_LED_RECV_CARD_INFO struRecvCard[MAX_SINGLE_PORT_RECVCARD_NUM]; //տϢ - DWORD dwPortNo; //˿ںţȡж˿ڲʱЧ + NET_DVR_LED_PORT_BACKUP struLedPortBackup; //端口备份参数 + DWORD dwRecvCardNum; //本端口连接的接收卡数 + NET_DVR_LED_RECV_CARD_INFO struRecvCard[MAX_SINGLE_PORT_RECVCARD_NUM]; //各接收卡的信息 + DWORD dwPortNo; //端口号,获取所有端口参数时有效 BYTE byRes2[64]; }NET_DVR_LED_PORT_CFG, *LPNET_DVR_LED_PORT_CFG; typedef struct tagNET_DVR_LED_DISPLAY_CFG { DWORD dwSize; - NET_DVR_COLOR_TEMPERATURE_CFG struColorTemp; //ɫ² - NET_DVR_VIDEO_OUT_CFG struVoutCfg; //ʾЧ + NET_DVR_COLOR_TEMPERATURE_CFG struColorTemp; //色温参数 + NET_DVR_VIDEO_OUT_CFG struVoutCfg; //显示效果参数 BYTE byRes[32]; }NET_DVR_LED_DISPLAY_CFG, *LPNET_DVR_LED_DISPLAY_CFG; typedef struct tagNET_DVR_LED_TEST_SIGNAL_CFG { DWORD dwSize; - BYTE byEnabled; //Ƿòźţ0-ã1- - BYTE bySignalType; //źͣ1-2-ƣ3-״4-5-ˮƽʹֱҽ壬6-̣0xff-Զɫ + BYTE byEnabled; //是否启用测试信号,0-不启用,1-启用 + BYTE bySignalType; //测试信号类型,1-彩条,2-波纹,3-格状彩条,4-方格,5-水平和垂直灰阶联合体,6-棋盘,0xff-自定义颜色 BYTE byRes1[2]; - NET_DVR_RGB_COLOR struSignalColor; //źɫźΪ0xffʱЧ + NET_DVR_RGB_COLOR struSignalColor; //测试信号颜色,测试信号类型为0xff时有效 BYTE byRes[32]; }NET_DVR_LED_TEST_SIGNAL_CFG, *LPNET_DVR_LED_TEST_SIGNAL_CFG; typedef struct tagNET_DVR_LED_NOSIGNAL_CFG { DWORD dwSize; - BYTE byNoSignalMode; //źʾģʽ1-2-ʾLOGO3-ʾԶͼƬ + BYTE byNoSignalMode; //无信号显示模式,1-黑屏,2-显示厂家LOGO,3-显示自定义图片 BYTE byRes[63]; }NET_DVR_LED_NOSIGNAL_CFG, *LPNET_DVR_LED_NOSIGNAL_CFG; typedef struct tagNET_DVR_LED_INPUT_CFG { DWORD dwSize; - DWORD dwResolutionWidth; //ֱʿֻ - DWORD dwResolutionHeight; //ֱʸߣֻ - DWORD dwRefreshRate; //źˢƵʣֻ - NET_DVR_SCREEN_VGA_CFG struVgaCfg; //VGAźŵVGAʱɵ + DWORD dwResolutionWidth; //输入分辨率宽,只读 + DWORD dwResolutionHeight; //输入分辨率高,只读 + DWORD dwRefreshRate; //输入信号刷新频率,只读 + NET_DVR_SCREEN_VGA_CFG struVgaCfg; //VGA信号调整参数,VGA输入时可调 BYTE byRes[32]; }NET_DVR_LED_INPUT_CFG, *LPNET_DVR_LED_INPUT_CFG; typedef struct tagNET_DVR_LED_RECV_CARD_CFG_COND { DWORD dwSize; - DWORD dwOutputNo; // - NET_DVR_LINE_COLUMN_INFO struPosStart; //տʼλ - NET_DVR_LINE_COLUMN_INFO struPosEnd; //տλ + DWORD dwOutputNo; //输出编号 + NET_DVR_LINE_COLUMN_INFO struPosStart; //接收卡起始位置 + NET_DVR_LINE_COLUMN_INFO struPosEnd; //接收卡结束位置 BYTE byRes[32]; }NET_DVR_LED_RECV_CARD_CFG_COND, *LPNET_DVR_LED_RECV_CARD_CFG_COND; typedef struct tagNET_DVR_LED_GAMMA_CFG_COND { DWORD dwSize; - DWORD dwOutputNo; //; - NET_DVR_LINE_COLUMN_INFO struPosStart; //տʼλ - NET_DVR_LINE_COLUMN_INFO struPosEnd; //տλ - BYTE byGammaType; //GammaͣGammaʱЧ0-RGBGamma1-ɫGamma2-ɫGamma3-ɫGamma + DWORD dwOutputNo; //输出编号; + NET_DVR_LINE_COLUMN_INFO struPosStart; //接收卡起始位置 + NET_DVR_LINE_COLUMN_INFO struPosEnd; //接收卡结束位置 + BYTE byGammaType; //Gamma表类型,Gamma表配置时有效,0-RGB混合Gamma表,1-红色Gamma表,2-绿色Gamma表,3-蓝色Gamma表 BYTE byRes[31]; }NET_DVR_LED_GAMMA_CFG_COND, *LPNET_DVR_LED_GAMMA_CFG_COND; typedef struct tagNET_DVR_LED_GAMMA_CFG { DWORD dwSize; - WORD wGammaValue[MAX_GAMMA_X_VALUE]; //GAMMAYȡֵÿԪȡֵ0-65535ԶģʽʱЧ - BYTE byGammaModel; //GAMMAģʽ0-Զģʽ1-ҹģʽ12-ҹģʽ23-ģʽ4-ģʽ15-ģʽ2 + WORD wGammaValue[MAX_GAMMA_X_VALUE]; //GAMMA表Y取值,每个元素取值0-65535,自定义模式时有效 + BYTE byGammaModel; //GAMMA表模式,0-自定义模式,1-夜模式1,2-夜模式2,3-正常模式,4-日照模式1,5-日照模式2 BYTE byRes[127]; }NET_DVR_LED_GAMMA_CFG, *LPNET_DVR_LED_GAMMA_CFG; typedef struct tagNET_DVR_LED_CLOCK_CFG { - DWORD dwDclkRate; //ʱdclkƵʣʵֵ10λMHzʵֵΧ1.0-31.3 - DWORD dwGclkRate; //ˢʱgclkƵʣʵֵ10λMHzʵֵΧ1.0-31.3 - DWORD dwGclkCountNum; //300ns gclkֵ - BYTE byDclkDutyRatio; //dclkʱռձȣȡֵ255075 - BYTE byDclkPhase; //dclkλȡֵ0,1,2,3 - BYTE byGclkNum; //ˢ1ҪЧgclk0-255 + DWORD dwDclkRate; //传输时钟dclk频率,实际值乘10,单位:MHz,实际值范围1.0-31.3 + DWORD dwGclkRate; //刷新时钟gclk频率,实际值乘10,单位:MHz,实际值范围1.0-31.3 + DWORD dwGclkCountNum; //300ns gclk计数值 + BYTE byDclkDutyRatio; //dclk时钟占空比,取值:25,50,75 + BYTE byDclkPhase; //dclk相位,取值:0,1,2,3 + BYTE byGclkNum; //刷新1行需要的有效gclk个数,0-255 BYTE byRes[17]; }NET_DVR_LED_CLOCK_CFG, *LPNET_DVR_LED_CLOCK_CFG; typedef struct tagNET_DVR_LED_RECV_CFG { DWORD dwSize; - NET_DVR_LED_CLOCK_CFG struClockCfg; //ʱز - BYTE byGrayLevel; //Ҷȵȼȡֵ1314 - BYTE byRefreshRate; //ˢ±ʣȡֵ1-6 - BYTE byLineScanNum; //ɨ0-255 - BYTE byRefreshCompleteGrayNum; //ˢҽ0-255 - DWORD dwHBlank; //ʱ䣬λgclkʱӸȡֵ1-65535 - DWORD dwAfterglowCtrl; //Ϳƽʱ䣬λgclkʱӸȡֵ1-65535 - DWORD dwLineFeedTime; //ʱ䣬λgclkʱӸȡֵ1-65535 + NET_DVR_LED_CLOCK_CFG struClockCfg; //时钟相关参数 + BYTE byGrayLevel; //灰度等级,取值13,14 + BYTE byRefreshRate; //刷新倍率,取值1-6 + BYTE byLineScanNum; //行扫数,0-255 + BYTE byRefreshCompleteGrayNum; //刷新完整灰阶数,0-255 + DWORD dwHBlank; //行消隐时间,单位:gclk时钟个数,取值1-65535 + DWORD dwAfterglowCtrl; //余晖控制结束时间,单位:gclk时钟个数,取值1-65535 + DWORD dwLineFeedTime; //换行时间,单位:gclk时钟个数,取值1-65535 BYTE byRes[128]; }NET_DVR_LED_RECV_CFG, *LPNET_DVR_LED_RECV_CFG; typedef struct tagNET_DVR_LED_REGISTOR_VALUE { - BYTE byChip1High; //оƬ1ֽ - BYTE byChip1Low; //оƬ1ֽ - BYTE byChip2High; //оƬ2ֽ - BYTE byChip2Low; //оƬ2ֽ - BYTE byChip3High; //оƬ3ֽ - BYTE byChip3Low; //оƬ3ֽ - BYTE byChip4High; //оƬ4ֽ - BYTE byChip4Low; //оƬ4ֽ - BYTE byChip5High; //оƬ5ֽ - BYTE byChip5Low; //оƬ5ֽ - BYTE byChip6High; //оƬ6ֽ - BYTE byChip6Low; //оƬ6ֽ + BYTE byChip1High; //芯片1高字节 + BYTE byChip1Low; //芯片1低字节 + BYTE byChip2High; //芯片2高字节 + BYTE byChip2Low; //芯片2低字节 + BYTE byChip3High; //芯片3高字节 + BYTE byChip3Low; //芯片3低字节 + BYTE byChip4High; //芯片4高字节 + BYTE byChip4Low; //芯片4低字节 + BYTE byChip5High; //芯片5高字节 + BYTE byChip5Low; //芯片5低字节 + BYTE byChip6High; //芯片6高字节 + BYTE byChip6Low; //芯片6低字节 BYTE byRes[4]; }NET_DVR_LED_REGISTOR_VALUE, *LPNET_DVR_LED_REGISTOR_VALUE; typedef struct tagNET_DVR_LED_RECV_REGISTOR { - BYTE byEliminateGhostShadowLevel; //¹Ӱȼ0-5 - BYTE byEliminateShadowy; //һɨƫȼ0-15 - BYTE byGrayEqualize1; //ͻƫɫ10-3 - BYTE byGrayEqualize2; //ͻƫɫ20-15 - BYTE byEnableGrayUniformity; //ͻҾǷ0-أ1- - BYTE byDisableHGrayStripes; //ͻҺǷ0-أ1- - BYTE byGhostShadowEnhancedMode1; //¹Ӱǿģʽ1Ƿ0-أ1- - BYTE byGhostShadowEnhancedMode2; //¹Ӱǿģʽ2Ƿ0-أ1- - BYTE byClearBadPoint; //ȥʹܣ0-ʹܣ1-ʹ - BYTE byEnableSelfDefineRegistor; //ǷԶĴֵ0-1- + BYTE byEliminateGhostShadowLevel; //下鬼影消除等级,0-5 + BYTE byEliminateShadowy; //第一扫偏暗消除等级,0-15 + BYTE byGrayEqualize1; //低灰偏色补偿1,0-3 + BYTE byGrayEqualize2; //低灰偏色补偿2,0-15 + BYTE byEnableGrayUniformity; //低灰均匀性提升是否开启,0-关,1-开 + BYTE byDisableHGrayStripes; //低灰横条纹消除是否开启,0-关,1-开 + BYTE byGhostShadowEnhancedMode1; //下鬼影消除增强模式1是否开启,0-关,1-开 + BYTE byGhostShadowEnhancedMode2; //下鬼影消除增强模式2是否开启,0-关,1-开 + BYTE byClearBadPoint; //去除坏点使能,0-非使能,1-使能 + BYTE byEnableSelfDefineRegistor; //是否启用自定义寄存器值,0-否,1-是 BYTE byRes1[2]; - NET_DVR_LED_REGISTOR_VALUE struRegistorValue; //ԶĴ - BYTE byEnabledExGradientOptimition; //Żأ0-رգ!0- - BYTE byDummyGClockCycle; //Dummy GClockڣŻʱЧλgclk - BYTE byDummyGClockHighTime; //Dummy GClockߵƽʱ䣬ŻʱЧλ8ns - BYTE byFirstGClockExtendedTime; //һGClockչʱ䣬ŻʱЧλ8ns + NET_DVR_LED_REGISTOR_VALUE struRegistorValue; //自定义寄存器参数 + BYTE byEnabledExGradientOptimition; //渐变过度优化开关,0-关闭,!0-开启 + BYTE byDummyGClockCycle; //Dummy GClock周期,开启渐变过度优化时有效,单位:个gclk + BYTE byDummyGClockHighTime; //Dummy GClock高电平时间,开启渐变过度优化时有效,单位:8ns + BYTE byFirstGClockExtendedTime; //第一个GClock展宽时间,开启渐变过度优化时有效,单位:8ns BYTE byRes[28]; }NET_DVR_LED_RECV_REGISTOR, *LPNET_DVR_LED_RECV_REGISTOR; typedef struct tagNET_DVR_LED_RECV_ADVANCED_CFG { DWORD dwSize; - NET_DVR_LED_RECV_REGISTOR struFirstRegistor; //һտ߼ԶĴֵΪоƬĴֵ - NET_DVR_LED_RECV_REGISTOR struSecondRegistor; //ڶտ߼ԶĴֵΪоƬĴֵ - NET_DVR_LED_RECV_REGISTOR struThirdRegistor; //տ߼ԶĴֵΪоƬĴֵ + NET_DVR_LED_RECV_REGISTOR struFirstRegistor; //第一组接收卡高级参数,自定义寄存器值为红芯片寄存器值 + NET_DVR_LED_RECV_REGISTOR struSecondRegistor; //第二组接收卡高级参数,自定义寄存器值为绿芯片寄存器值 + NET_DVR_LED_RECV_REGISTOR struThirdRegistor; //第三组接收卡高级参数,自定义寄存器值为蓝芯片寄存器值 BYTE byRes2[64]; }NET_DVR_LED_RECV_ADVANCED_CFG,*LPNET_DVR_LED_RECV_ADVANCED_CFG; typedef struct tagNET_DVR_LED_CHECK_COND { DWORD dwSize; - DWORD dwOutputNo; // - NET_DVR_LINE_COLUMN_INFO struPosStart; //տʼλ - BYTE byStartPosType; //ʼλͣ0-ʹýտʼλã1-ʹλ + DWORD dwOutputNo; //输入编号 + NET_DVR_LINE_COLUMN_INFO struPosStart; //接收卡起始位置 + BYTE byStartPosType; //起始位置类型,0-使用接收卡起始位置,1-使用坐标位置 BYTE byRes1[3]; - DWORD dwXCoordinate; /*ϽʼX*/ - DWORD dwYCoordinate; /*ϽY*/ - DWORD dwWidth; /**/ - DWORD dwHeight; /*߶*/ + DWORD dwXCoordinate; /*矩形左上角起始点X坐标*/ + DWORD dwYCoordinate; /*矩形左上角Y坐标*/ + DWORD dwWidth; /*区域宽度*/ + DWORD dwHeight; /*区域高度*/ BYTE byRes[8]; }NET_DVR_LED_CHECK_COND, *LPNET_DVR_LED_CHECK_COND; -//ѯʽ +//查询方式 enum ADDR_QUERY_TYPE { - QUERYSVR_BY_COUNTRYID = 0, //ұŲѯַ - QUERYSVR_BY_SERVERTYPE = 1, // - QUERYDEV_BY_NICKNAME_DDNS = 2, //dzƴhiDDNSϲѯ豸Ϣ - QUERYDEV_BY_SERIAL_DDNS = 3, //кŴhiDDNSϲѯ豸Ϣ - CHECKDEV_BY_NICKNAME_DDNS = 4,//dzƴhiDDNS豸Ϣ - CHECKDEV_BY_SERIAL_DDNS = 5, //кŴhiDDNS豸Ϣ - QUERYDEV_BY_NICKNAME_IPSERVER = 6, //dzƴIPServerϲѯ豸Ϣ - QUERYDEV_BY_SERIAL_IPSERVER = 7 //dzƴIPServerϲѯ豸Ϣ + QUERYSVR_BY_COUNTRYID = 0, //按国家编号查询服务器地址 + QUERYSVR_BY_SERVERTYPE = 1, //保留 + QUERYDEV_BY_NICKNAME_DDNS = 2, //按昵称从hiDDNS上查询设备信息 + QUERYDEV_BY_SERIAL_DDNS = 3, //按序列号从hiDDNS上查询设备信息 + CHECKDEV_BY_NICKNAME_DDNS = 4,//按昵称从hiDDNS诊断设备信息 + CHECKDEV_BY_SERIAL_DDNS = 5, //按序列号从hiDDNS诊断设备信息 + QUERYDEV_BY_NICKNAME_IPSERVER = 6, //按昵称从IPServer上查询设备信息 + QUERYDEV_BY_SERIAL_IPSERVER = 7 //按昵称从IPServer上查询设备信息 }; #define CLIENT_VERSION_LEN 64 -//ұŲѯṹ +//按国家编号查询的条件结构体 typedef struct tagNET_DVR_QUERY_COUNTRYID_COND { - WORD wCountryID; //ұ,ȡֵһ - char szSvrAddr[MAX_DOMAIN_NAME];//ַ,ʾȥĸϲѯĿϢ - char szClientVersion[CLIENT_VERSION_LEN];//ͻ˰汾Ϣ,:iVMS4500 V4.0.0.0 build20150112 + WORD wCountryID; //国家编号,取值详见附件一 + char szSvrAddr[MAX_DOMAIN_NAME];//服务器地址,表示去哪个服务器上查询目标服务器的信息 + char szClientVersion[CLIENT_VERSION_LEN];//客户端版本信息,例如:iVMS4500 V4.0.0.0 build20150112 BYTE byRes[382]; }NET_DVR_QUERY_COUNTRYID_COND,*LPNET_DVR_QUERY_COUNTRYID_COND; -//ұŲѯķؽṹ +//按国家编号查询的返回结构体 typedef struct tagNET_DVR_QUERY_COUNTRYID_RET { - char szResolveSvrAddr[MAX_DOMAIN_NAME];//ַ(豸ע) - char szAlarmSvrAddr[MAX_DOMAIN_NAME];//ַ + char szResolveSvrAddr[MAX_DOMAIN_NAME];//解析服务器地址(即设备注册服务器) + char szAlarmSvrAddr[MAX_DOMAIN_NAME];//报警服务器地址 BYTE byRes[1024]; }NET_DVR_QUERY_COUNTRYID_RET,*LPNET_DVR_QUERY_COUNTRYID_RET; -//Ͳѯṹ +//按服务器类型查询的条件结构体 typedef struct tagNET_DVR_QUERY_SERVERTYPE_COND { - WORD wSvrType; //, 6-ֻͷ - char szSvrAddr[MAX_DOMAIN_NAME];//ַ,ʾȥĸϲѯĿϢ - char szClientVersion[CLIENT_VERSION_LEN];//ͻ˰汾Ϣ + WORD wSvrType; //服务器类型, 6-手机推送服务器 + char szSvrAddr[MAX_DOMAIN_NAME];//服务器地址,表示去哪个服务器上查询目标服务器的信息 + char szClientVersion[CLIENT_VERSION_LEN];//客户端版本信息 BYTE byRes[382]; }NET_DVR_QUERY_SERVERTYPE_COND, *LPNET_DVR_QUERY_SERVERTYPE_COND; -//Ͳѯķؽṹ +//按服务器类型查询的返回结构体 typedef struct tagNET_DVR_QUERY_SERVERTYPE_RET { - char szSvrAddr[MAX_DOMAIN_NAME]; //ַ - WORD wSvrPort; //˿ + char szSvrAddr[MAX_DOMAIN_NAME]; //服务器地址 + WORD wSvrPort; //服务器端口 BYTE byRes[446]; }NET_DVR_QUERY_SERVERTYPE_RET, *LPNET_DVR_QUERY_SERVERTYPE_RET; -//hiDDNSϲѯϵṹ +//从hiDDNS上查询或诊断的条件结构体 typedef struct tagNET_DVR_QUERY_DDNS_COND { - char szResolveSvrAddr[MAX_DOMAIN_NAME];//ַ - char szDevNickName[MAX_DOMAIN_NAME]; //豸ڽϵı - char szDevSerial[SERIALNO_LEN]; //豸к - char szClientVersion[CLIENT_VERSION_LEN];//ͻ˰汾Ϣ,:iVMS4500 V4.0.0.0 build20150112 - BYTE byRes[272]; // + char szResolveSvrAddr[MAX_DOMAIN_NAME];//解析服务器地址 + char szDevNickName[MAX_DOMAIN_NAME]; //设备在解析服务器上的别名 + char szDevSerial[SERIALNO_LEN]; //设备序列号 + char szClientVersion[CLIENT_VERSION_LEN];//客户端版本信息,例如:iVMS4500 V4.0.0.0 build20150112 + BYTE byRes[272]; //保留 }NET_DVR_QUERY_DDNS_COND,*LPNET_DVR_QUERY_DDNS_COND; -//hiDDNSϲѯصĽṹ +//从hiDDNS上查询返回的结构体 typedef struct tagNET_DVR_QUERY_DDNS_RET { - char szDevIP[SDK_MAX_IP_LEN]; //豸IPַ - WORD wCmdPort; //ƶ˿ڣSDKӶ˿ڣ - WORD wHttpPort; //http˿ + char szDevIP[SDK_MAX_IP_LEN]; //设备IP地址 + WORD wCmdPort; //控制端口(SDK连接端口) + WORD wHttpPort; //http端口 BYTE byRes[460]; }NET_DVR_QUERY_DDNS_RET,*LPNET_DVR_QUERY_DDNS_RET; -//hiDDNSϷصĽṹ +//从hiDDNS上诊断返回的结构体 typedef struct tagNET_DVR_CHECK_DDNS_RET { - BYTE byDevStatus; //豸״̬,0-,1-Ҳ,2-豸,3-豸ڵǰ + BYTE byDevStatus; //设备状态,0-正常,1-找不到,2-设备不在线,3-设备不在当前区域 BYTE byRes1; - NET_DVR_QUERY_DDNS_RET struQueryRet; //ַϢ - WORD wRegionID; //ǰ豸ע[1,2,3̫,4й,5ŷ,6] + NET_DVR_QUERY_DDNS_RET struQueryRet; //地址信息 + WORD wRegionID; //当前设备注册区域编号[1美国,2南美,3亚太,4中国,5欧洲,6其它] BYTE byRes2[508]; }NET_DVR_CHECK_DDNS_RET,*LPNET_DVR_CHECK_DDNS_RET; -//IPServerϲѯṹ +//从IPServer上查询的条件结构体 typedef struct tagNET_DVR_QUERY_IPSERVER_COND { - char szResolveSvrAddr[MAX_DOMAIN_NAME];//ַ - WORD wResolveSvrPort; //˿ - char szDevNickName[MAX_DOMAIN_NAME]; //豸ڽϵı - char szDevSerial[SERIALNO_LEN]; //豸к - BYTE byRes[334]; // + char szResolveSvrAddr[MAX_DOMAIN_NAME];//解析服务器地址 + WORD wResolveSvrPort; //解析服务器端口 + char szDevNickName[MAX_DOMAIN_NAME]; //设备在解析服务器上的别名 + char szDevSerial[SERIALNO_LEN]; //设备序列号 + BYTE byRes[334]; //保留 }NET_DVR_QUERY_IPSERVER_COND,*LPNET_DVR_QUERY_IPSERVER_COND; -//IPServerϲѯصĽṹ +//从IPServer上查询返回的结构体 typedef struct tagNET_DVR_QUERY_IPSERVER_RET { - char szDevIP[SDK_MAX_IP_LEN]; //豸IPַ - WORD wCmdPort; //ƶ˿ڣSDKӶ˿ڣ + char szDevIP[SDK_MAX_IP_LEN]; //设备IP地址 + WORD wCmdPort; //控制端口(SDK连接端口) BYTE byRes[462]; }NET_DVR_QUERY_IPSERVER_RET,*LPNET_DVR_QUERY_IPSERVER_RET; @@ -47670,43 +47670,43 @@ typedef struct tagNET_DVR_CURRENT_VALID_PORT typedef struct tagNET_DVR_AUDIO_CHANNEL { - DWORD dwChannelNum; //ͨ - BYTE byres[32]; // + DWORD dwChannelNum; //通道号 + BYTE byres[32]; //保留 }NET_DVR_AUDIO_CHANNEL, *LPNET_DVR_AUDIO_CHANNEL; -//ṹ +//码流加密条件结构 typedef struct tagNET_DVR_STREAMENCRYPTION_COND { - DWORD dwSize; //ṹС - DWORD dwChan; //Ԥͨ + DWORD dwSize; //结构体大小 + DWORD dwChan; //预览通道号 BYTE byRes[128]; }NET_DVR_STREAMENCRYPTION_COND, *LPNET_DVR_STREAMENCRYPTION_COND; -//Ϣṹ +//码流加密信息结构 typedef struct tagNET_DVR_STREAMENCRYPTION_CFG { - DWORD dwSize; //ṹС - BYTE byEnable; //ܣ0~رգ1~ + DWORD dwSize; //结构体大小 + BYTE byEnable; //启用码流加密,0~关闭,1~开启 BYTE byRes[255]; }NET_DVR_STREAMENCRYPTION_CFG, *LPNET_DVR_STREAMENCRYPTION_CFG; -//У׼GPSγȲ +//校准的GPS经纬度参数 typedef struct tagNET_DVR_REVISE_GPS_CFG { - DWORD dwSize; //ṹС - BYTE byLatitudeType ;//γͣ0-γ1-γ - BYTE byLongitudeType ;// ͣ0-ȣ1- - BYTE byMode ;//ģʽ 0-Ĭϣ1-Զ2-ֶ + DWORD dwSize; //结构体大小 + BYTE byLatitudeType ;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType ;// 经度类型,0-东度,1-西度 + BYTE byMode ;//模式 0-默认,1-自动,2-手动 BYTE byRes; - NET_DVR_LLI_PARAM struLatitude; /*γ*/ - NET_DVR_LLI_PARAM struLongitude; /**/ + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ BYTE byRes1[300]; }NET_DVR_REVISE_GPS_CFG, *LPNET_DVR_REVISE_GPS_CFG; typedef struct tagNET_DVR_PDC_RECOMMEND { DWORD dwSize; - WORD wWidth;//Ƽֵ[0, 1000] + WORD wWidth;//推荐宽度值[0, 1000] BYTE byRes[126]; }NET_DVR_PDC_RECOMMEND,*LPNET_DVR_PDC_RECOMMEND; @@ -47714,339 +47714,339 @@ typedef struct tagNET_DVR_FLASHSTORAGE_REMOVE { DWORD dwSize; DWORD dwChannel; - BYTE byPDCRemoveEnable;//ʹ 0-1- + BYTE byPDCRemoveEnable;//清除客流数据使能 0-不清除,1-清除 BYTE byRes[127]; }NET_DVR_FLASHSTORAGE_REMOVE,*LPNET_DVR_FLASHSTORAGE_REMOVE; -/********************************DS-TME4XXƻ Begin****************************/ +/********************************DS-TME4XX控制机开发 Begin****************************/ typedef struct tagNET_DVR_PARKING_CARD { DWORD dwSize; - DWORD dwChannel;//Ĭ1ݶͨ豸 - char szCardNo[MAX_CARDNO_LEN/*48*/];// - BYTE byCardType;//Ƭ 0-ʱ1-̶ - BYTE byCardStatus;//Ƭ״̬ 0-1-ʧ2-ע - BYTE byChargeRuleID;//շѹID - BYTE byDelete;//Ƿɾ 0-ɾ1-ɾ - NET_DVR_TIME_V30 struStartTime;//Чʼʱ - NET_DVR_TIME_V30 struEndTime;//Чʱ + DWORD dwChannel;//默认是1(后续兼容多通道设备) + char szCardNo[MAX_CARDNO_LEN/*48*/];//卡号 + BYTE byCardType;//卡片类型 0-临时卡,1-固定卡 + BYTE byCardStatus;//卡片状态 0-正常,1-挂失,2-注销 + BYTE byChargeRuleID;//收费规则ID + BYTE byDelete;//是否删除 0-不删除,1-删除 + NET_DVR_TIME_V30 struStartTime;//有效开始时间 + NET_DVR_TIME_V30 struEndTime;//有效结束时间 BYTE byRes[128]; }NET_DVR_PARKING_CARD,*LPNET_DVR_PARKING_CARD; -//ڿƬϢϴ +//出入口卡片信息上传 typedef struct tagNET_DVR_GATE_CARDINFO { DWORD dwSize; NET_VCA_DEV_INFO struDevInfo; - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - char szCardNo[MAX_CARDNO_LEN/*48*/];// - char szPassVehicleID[MAX_VEHICLE_ID_LEN];//Ψһʶ - char szInVehicleID[MAX_VEHICLE_ID_LEN];//ʱΨһʶ - NET_DVR_TIME_V30 struSwipeTime;//ˢʱ - NET_DVR_TIME_V30 struCardTime;//Ƭʱ䣬볡ʱдʱ䣬ֻԳƱã0ʾ볡ʱ - BYTE byLetPass;//ڷзʽ 0-(CardType == ֽƱ)Ҫշѣ1-У2-շѷ - BYTE byCardType;// 0-̶1-ʱ2-ֽƱ + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + char szCardNo[MAX_CARDNO_LEN/*48*/];//卡号 + char szPassVehicleID[MAX_VEHICLE_ID_LEN];//唯一标识 + char szInVehicleID[MAX_VEHICLE_ID_LEN];//出口时的入口唯一标识 + NET_DVR_TIME_V30 struSwipeTime;//刷卡时间 + NET_DVR_TIME_V30 struCardTime;//卡片存的时间,即入场时写入的时间,只对出口票箱有用,0表示无入场时间 + BYTE byLetPass;//出入口放行方式 0-不放行(当CardType == 纸票)需要收费,1-放行,2-中心收费放行 + BYTE byCardType;//卡类型 0-固定卡,1-临时卡,2-纸票 BYTE byRes[126]; }NET_DVR_GATE_CARDINFO, *LPNET_DVR_GATE_CARDINFO; -//̨ҵϴ +//月台作业数据上传 typedef struct _tagNET_LOADING_DOCK_OPERATEINFO_ { - DWORD dwSize; //ṹ - BYTE byAbsTime[32]; //ʱ,yyyymmddhhmmssxxx,e.g.20090810235959999 λΪ - BYTE byParkingNo[MAX_PARKNO_LEN/*16*/];//λ - DWORD dwIndex; // - char sLicense[MAX_LICENSE_LEN/*16*/]; //ƺ,עжСҲ복ƺ룬Сֺͳƺмÿոָ - BYTE byCurrentWorkerNumber;//ǰҵ - BYTE byCurrentGoodsLoadingRate;//ǰװ 0- 1- 2- 3- 4- - BYTE byDoorsStatus;//״̬ 0-Źر 1-ſ - BYTE byRes1; //ֽ - DWORD dwBackPicDataLength;//ͼƬ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64)) //win64linux64ָΪ8ֽ - BYTE *pBackPicDataBuffer; //ͼƬָ + DWORD dwSize; //结构长度 + BYTE byAbsTime[32]; //绝对时间点,yyyymmddhhmmssxxx,e.g.20090810235959999 最后三位为毫秒数 + BYTE byParkingNo[MAX_PARKNO_LEN/*16*/];//车位编号 + DWORD dwIndex; //车辆序号 + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码,注:中东车牌需求把小字也纳入车牌号码,小字和车牌号中间用空格分隔 + BYTE byCurrentWorkerNumber;//当前作业人数 + BYTE byCurrentGoodsLoadingRate;//当前货物装载率 0-空 1-少 2-中 3-多 4-满 + BYTE byDoorsStatus;//车门状态 0-车门关闭 1-车门开启 + BYTE byRes1; //保留字节 + DWORD dwBackPicDataLength;//背景图片长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64)) //win64及linux64下指针为8字节 + BYTE *pBackPicDataBuffer; //背景图片数据指针 #else - BYTE* pBackPicDataBuffer; // ͼƬָ + BYTE* pBackPicDataBuffer; // 背景图片数据指针 BYTE byRes2[4]; #endif - DWORD dwChannel; //ͨţ0-֧֣ϵ豸֧ͨŷأ + DWORD dwChannel; //通道号,0-不支持(存在老的设备不支持通道号返回) BYTE byRes[508]; }NET_LOADING_DOCK_OPERATEINFO, *LPNET_LOADING_DOCK_OPERATEINFO; -//ڸϢϴ(COMM_GATE_CHARGEINFO_UPLOAD) +//出入口付费信息上传(COMM_GATE_CHARGEINFO_UPLOAD) typedef struct tagNET_DVR_GATE_CHARGEINFO { DWORD dwSize; NET_VCA_DEV_INFO struDevInfo; - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - char sLicense[MAX_LICENSE_LEN]; // + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + char sLicense[MAX_LICENSE_LEN]; //车牌 char szCardNo[48]; NET_DVR_TIME_V30 struEntranceTime; NET_DVR_TIME_V30 struDepartureTime; - char szDepartureID[32]; //Ψһʾ - char szEntranceID[32]; //볡Ψһʾ - DWORD dwTotalCost; //ʵշѽ*100 - char szOperateName[32]; //ѻΪ"offline" - BYTE byChargeRuleId; //շѹcenterId - BYTE byVehicleType;//ͣ0-1-Сͳ2-ͳ - BYTE byRes[127];//Ԥ + char szDepartureID[32]; //出场唯一过车标示 + char szEntranceID[32]; //入场唯一过车标示 + DWORD dwTotalCost; //实际收费金额*100 + char szOperateName[32]; //脱机下为"offline" + BYTE byChargeRuleId; //收费规则centerId + BYTE byVehicleType;//车辆类型,0-其他车辆,1-小型车,2-大型车 + BYTE byRes[127];//预留 }NET_DVR_GATE_CHARGEINFO,*LPNET_DVR_GATE_CHARGEINFO; -//ͣͣƽṹ +//停车场停车卡控制结构体 typedef struct tagNET_DVR_PARKING_CARD_CTRL_PARAM { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byCardType;//Ƭ 0-ʱ - BYTE byDeleteALL;//Ƿȫɾ 0-ɾ1-ɾ + DWORD dwChannel; //通道号 + BYTE byCardType;//卡片类型 0-临时卡 + BYTE byDeleteALL;//是否全部删除 0-不删除,1-删除 BYTE byRes[62]; }NET_DVR_PARKING_CARD_CTRL_PARAM,*LPNET_DVR_PARKING_CARD_CTRL_PARAM; -//TMEץͼϴ +//TME车辆抓图上传 typedef struct tagNET_DVR_TME_VEHICLE_RESULT_ { DWORD dwSize; - WORD wLaneid; //132ţԾ - BYTE byCamLaneId; //Ӧ116õijţԾͬ - BYTE byRes1; // - DWORD dwChanIndex; //ͨ - NET_DVR_PLATE_INFO struPlateInfo; //Ϣṹ - NET_DVR_VEHICLE_INFO struVehicleInfo; //Ϣ - BYTE byMonitoringSiteID[48]; //ʾ - BYTE byDeviceID[48]; //豸 - BYTE byDir; //ʾ0- 1 볡2 + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃) + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + BYTE byRes1; //保留 + DWORD dwChanIndex; //通道号 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byDir; //显示方向,0-其它 1 入场,2 出场 BYTE byRes2; - WORD wBackList; //ΪǷ񱨾 0 ʾΪ 1 ʾֹ - DWORD dwPicNum; //ͼƬpicGroupNumͬϢͼƬͼƬϢstruVehicleInfoEx - NET_ITS_PICTURE_INFO struPicInfo[4]; //ͼƬϢ,ݶ4ͼ - BYTE byPassVehicleID[32]; //ΨһID - BYTE byCardNo[48]; // - BYTE bySwipeTime[32];//ˢʱ ʱʽΪyyyymmddhh24missfff - DWORD dwCharge; //շѽ ֣ - BYTE byHistory; //Ƿʷ 0- 1- - BYTE byLetPass; //ǷѷУ0-δУ1- 2-δ֪ + WORD wBackList; //标记为是否报警数据 0 表示为正常过车数据 1 表示禁止名单 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[4]; //图片信息,暂定最多4张图 + BYTE byPassVehicleID[32]; //车辆唯一ID + BYTE byCardNo[48]; // 卡号 + BYTE bySwipeTime[32];//增加刷卡时间 时间格式为yyyymmddhh24missfff + DWORD dwCharge; //收费金额 (分) + BYTE byHistory; //是否是历史数据 0-否 1-是 + BYTE byLetPass; //是否已放行,0-未放行,1-放行 2-未知 BYTE byRes3[186]; } NET_DVR_TME_VEHICLE_RESULT, *LPNET_DVR_TME_VEHICLE_RESULT; -//شŹעϢ +//地磁管理器注册消息 typedef struct tagNET_DVR_MVMRegisterInfo_ { - DWORD dwSize; //ṹС - char sDetectorID[16]; //ID - char sManagerID[16]; //ID - char sSim[20]; //Ϣ - DWORD dwLocalIP; //IPv4ַdwLocalIP=0x01020304,IPַΪ1.2.3.4 - DWORD dwLocalIPMask; //룬ʽͬdwLocalIP - DWORD dwLocalGateway; //أʽͬdwLocalIP - DWORD dwDstIP; //ĿIPʽͬdwLocalIP - BYTE byMACAddr[6]; //macַ - WORD wLocalPort; //ض˿ - WORD wFirmwareYear; //汾 - BYTE byFirmwareMonth; //汾· - BYTE byFirmwareDay; //汾 - BYTE byMajorVersion; //汾Сǰ - BYTE byMinorVersion; //汾С + DWORD dwSize; //结构体大小 + char sDetectorID[16]; //检测器ID + char sManagerID[16]; //管理器ID + char sSim[20]; //卡号信息 + DWORD dwLocalIP; //本地IPv4地址,例如dwLocalIP=0x01020304,则IP地址为1.2.3.4 + DWORD dwLocalIPMask; //本地网络子网掩码,格式同dwLocalIP + DWORD dwLocalGateway; //本地网关,格式同dwLocalIP + DWORD dwDstIP; //目标IP,格式同dwLocalIP + BYTE byMACAddr[6]; //本地mac地址 + WORD wLocalPort; //本地端口 + WORD wFirmwareYear; //软件版本年份 + BYTE byFirmwareMonth; //软件版本月份 + BYTE byFirmwareDay; //软件版本日 + BYTE byMajorVersion; //版本小数点前 + BYTE byMinorVersion; //版本小数点后 BYTE byRes[170]; }NET_DVR_MVMRegisterInfo, *LPNET_DVR_MVMRegisterInfo; -//ش״̬Ϣ +//地磁状态信息 typedef struct tagNET_DVR_SingleMagneticStatus_ { - DWORD dwSize; //ṹС - char sDetectorID[16]; //ID - char sManagerID[16]; //ID - char sParkNum[16]; //λ - NET_DVR_TIME_V30 struDetectorTime; //ʱ - DWORD dwRssi; //źǿȣʵֵΧ-137~0dbm˴ûзţΪʵֵľֵ - BYTE byParkinglotState; //λ״̬0-޳1-г - BYTE byBatteryState; //״̬0-100%1-75%2-50%3-25%4-С5% - BYTE byDeviceState; //豸״̬ 0-1- - BYTE byCMD; //0-λ仯1- + DWORD dwSize; //结构体大小 + char sDetectorID[16]; //检测器ID + char sManagerID[16]; //管理器ID + char sParkNum[16]; //车位编号 + NET_DVR_TIME_V30 struDetectorTime; //检测时间 + DWORD dwRssi; //接收信号强度,实际值范围-137~0dbm,此处没有符号,为实际值的绝对值 + BYTE byParkinglotState; //车位状态,0-无车,1-有车 + BYTE byBatteryState; //电池状态,0-100%,1-75%,2-50%,3-25%,4-小于5% + BYTE byDeviceState; //设备状态 0-正常,1-故障 + BYTE byCMD; //0-车位变化报警,1-检测器心跳报警 BYTE byRes[184]; }NET_DVR_SingleMagneticStatus, *LPNET_DVR_SingleMagneticStatus; -//Ϣͬ +//车辆信息同步 typedef struct tagNET_DVR_PARKING_VEHICLE { DWORD dwSize; - DWORD dwChannel;//Ĭ1ݶͨ豸 - char szLicense[MAX_LICENSE_LEN/*16*/];//ƺ - char szRelateCardNo[MAX_CARDNO_LEN/*48*/];// - NET_DVR_TIME_V30 struStartTime;//Чʼʱ - NET_DVR_TIME_V30 struEndTime;//Чʱ - BYTE byVehicleType;//ͣ0-1-Сͳ2-ͳ - BYTE byPlateColor;//ɫο VCA_PLATE_COLOR + DWORD dwChannel;//默认是1(后续兼容多通道设备) + char szLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + char szRelateCardNo[MAX_CARDNO_LEN/*48*/];//关联卡号 + NET_DVR_TIME_V30 struStartTime;//有效开始时间 + NET_DVR_TIME_V30 struEndTime;//有效结束时间 + BYTE byVehicleType;//车辆类型:0-其他车辆,1-小型车,2-大型车 + BYTE byPlateColor;//车牌颜色,参考 VCA_PLATE_COLOR BYTE byRes[126]; }NET_DVR_PARKING_VEHICLE,*LPNET_DVR_PARKING_VEHICLE; -//ɷѽϢ +//缴费金额信息 typedef struct tagNET_DVR_CHARGEACCOUNT_CFG { - DWORD dwSize;//ṹС - float fAccount;//ʵշѽ + DWORD dwSize;//结构体大小 + float fAccount;//实际收费金额 BYTE byRes[128]; }NET_DVR_CHARGEACCOUNT_CFG,*LPNET_DVR_CHARGEACCOUNT_CFG; -//ͣƱ豸ǶȲ +//停车场票箱从属设备多角度参数配置 typedef struct tagNET_DVR_PXMULTICTRL_CFG { - DWORD dwSize;//ṹС - DWORD dwMultiChansWaitTime;//Ƕץƥʱ䣨1~300s - BYTE byMultiChansCapEnabled;//ǷöǶץ 0-1- + DWORD dwSize;//结构体大小 + DWORD dwMultiChansWaitTime;//多角度抓拍匹配时间(1~300s) + BYTE byMultiChansCapEnabled;//是否启用多角度抓拍 0-否,1-是 BYTE byRes[127]; }NET_DVR_PXMULTICTRL_CFG,*LPNET_DVR_PXMULTICTRL_CFG; -//ͣƱѻ² +//停车场票箱脱机下参数配置 typedef struct tagNET_DVR_PXOFFLINE_CFG { - DWORD dwSize;//ṹС - BYTE byEnabled;//ǷƱѻģʽ0- 1- - BYTE byChargeEnabled;//Ƿѻշ 0-1- - BYTE byAlarmEnabled;//Ƿѻ 0-1- - BYTE byRecordSource;//¼ 0-ʶ 1- - DWORD dwTimeWait;//Ʊѻģʽǰĵȴʱ䣨1-300룩 + DWORD dwSize;//结构体大小 + BYTE byEnabled;//是否启用票箱脱机模式:0-不启用 1-启用 + BYTE byChargeEnabled;//是否脱机收费 0-否,1-是 + BYTE byAlarmEnabled;//是否启用脱机报警 0-否,1-是 + BYTE byRecordSource;//记录产生依据 0-牌识 1-读卡 + DWORD dwTimeWait;//票箱进入脱机模式前的等待时间(1-300秒) /** - realeaseMode&(0x1<<0) ̶ - realeaseMode&(0x1<<1) ̶ - realeaseMode&(0x1<<2) ʱ - realeaseMode&(0x1<<3) ʱ - realeaseMode&(0x1<<4) ޳Ʒ - realeaseMode&(0x1<<5) ̶Զ - realeaseMode&(0x1<<6) ʱԶ + realeaseMode&(0x1<<0) 固定车放行 + realeaseMode&(0x1<<1) 固定卡放行 + realeaseMode&(0x1<<2) 临时车放行 + realeaseMode&(0x1<<3) 临时卡放行 + realeaseMode&(0x1<<4) 无车牌放行 + realeaseMode&(0x1<<5) 固定车若免费则自动放行 + realeaseMode&(0x1<<6) 临时车若免费则自动放行 */ - DWORD dwRealeaseMode; //зʽλʾ - BYTE byVehCardmatch;//һ 0-1- - BYTE bySingleInSingleOut;// 0-1- + DWORD dwRealeaseMode; //放行方式,按位表示 + BYTE byVehCardmatch;//车卡一致 0-否,1-是 + BYTE bySingleInSingleOut;//单进单出 0-否,1-是 BYTE byRes[126]; }NET_DVR_PXOFFLINE_CFG,*LPNET_DVR_PXOFFLINE_CFG; typedef struct tagNET_DVR_PARKINGSAPCE_CFG { - DWORD dwSize;//ṹС - DWORD dwTotalParkingLot;//ͣλ - DWORD dwCurrParkingLot;//ǰʣͣλ + DWORD dwSize;//结构体大小 + DWORD dwTotalParkingLot;//总停车位数 + DWORD dwCurrParkingLot;//当前剩余停车位数 BYTE byRes[128]; }NET_DVR_PARKINGSAPCE_CFG,*LPNET_DVR_PARKINGSAPCE_CFG; typedef struct tagNET_DVR_PAPERCHARGEINFO_CFG { - DWORD dwSize;//ṹС - char szBarCode[LEN_16];//루16λַ - char szLicense[MAX_LICENSE_LEN]; //ƺ - char szVehicleInTime[LEN_32];//볡ʱ䣨32λַ YYYY-MM-DD HH:MM:SS - char szPaymentTime[LEN_32];//ɷʱ䣨32λַ YYYY-MM-DD HH:MM:SS - float fPaymentAmount;//ɷѽ - DWORD dwPaymentOutFailureTime;//ɷѳʧЧʱ䣨DWORD - BYTE byVehicleOutEnabled; //Ƿ: 0- 1- + DWORD dwSize;//结构体大小 + char szBarCode[LEN_16];//条形码(16位字符串) + char szLicense[MAX_LICENSE_LEN]; //车牌号码 + char szVehicleInTime[LEN_32];//入场时间(32位字符串 YYYY-MM-DD HH:MM:SS) + char szPaymentTime[LEN_32];//缴费时间(32位字符串 YYYY-MM-DD HH:MM:SS) + float fPaymentAmount;//缴费金额 + DWORD dwPaymentOutFailureTime;//缴费出场失效时间(DWORD) + BYTE byVehicleOutEnabled; //是否出场: 0- 否,1- 是 BYTE byRes[128]; }NET_DVR_PAPERCHARGEINFO_CFG,*LPNET_DVR_PAPERCHARGEINFO_CFG; -//ͣƱ +//停车场票箱参数 typedef struct tagNET_DVR_ILLEGALCARDFILTERING_CFG { - DWORD dwSize;//ṹС - char sLEDDefaultInfo[MAX_LED_INFO_LEN/*512*/]; // LEDĬʾ - BYTE byillegalCardFilteringEnabled;//÷Ƿ,0~ã1~ - BYTE bySendCardSensingCoilEnabled;//ǷظȦ - BYTE byWiegendSensingCoilEnabled;//Զ뿨ǷظȦ - BYTE byGateSwitchEnabled; //ǷеբϢ - BYTE byVerifyKeyWriteCardEnabled;//Ƿ֤Կд - BYTE byNoplateTakeCardEnabled;// Ƿ޳ȡƾݷ + DWORD dwSize;//结构体大小 + char sLEDDefaultInfo[MAX_LED_INFO_LEN/*512*/]; // LED默认显示内容 + BYTE byillegalCardFilteringEnabled;//启用非法卡过滤,0~不启用,1~启用 + BYTE bySendCardSensingCoilEnabled;//发卡机是否关联地感线圈 + BYTE byWiegendSensingCoilEnabled;//远距离卡是否关联地感线圈 + BYTE byGateSwitchEnabled; //是否有道闸开关信息 + BYTE byVerifyKeyWriteCardEnabled;//是否验证密钥和写卡 + BYTE byNoplateTakeCardEnabled;// 是否启用无车牌取凭据放行 BYTE byRes[126]; }NET_DVR_ILLEGALCARDFILTERING_CFG,*LPNET_DVR_ILLEGALCARDFILTERING_CFG; -//ͣڳշѹṹ +//停车场出入口车卡收费规则规则条件结构 typedef struct tagNET_DVR_TME_CHARGERULE_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - char szCardNo[32];// + DWORD dwChannel; //通道号 + char szCardNo[32];//卡号 BYTE byRes[128]; }NET_DVR_TME_CHARGERULE_COND, *LPNET_DVR_TME_CHARGERULE_COND; -//LEDĻʾ +//LED屏幕显示参数 typedef struct tagNET_DVR_LEDDISPLAY_CFG { - DWORD dwSize;//ṹС - char sDisplayInfo[MAX_LED_INFO_LEN/*512*/]; // LEDʾ - BYTE byDisplayMode;//ʾʽ:0~,1~,2~ʾ - BYTE bySpeedType;//ٶ:0~,1~,2~ - BYTE byShowPlateEnable;//ʾʹܣ0~رգ1~ + DWORD dwSize;//结构体大小 + char sDisplayInfo[MAX_LED_INFO_LEN/*512*/]; // LED显示内容 + BYTE byDisplayMode;//显示方式:0~左移,1~右移,2~立即显示 + BYTE bySpeedType;//速度类型:0~快,1~中,2~慢 + BYTE byShowPlateEnable;//显示车牌使能,0~关闭,1~启用 BYTE byRes1; - DWORD dwShowTime;//ʾʱ1~60 + DWORD dwShowTime;//显示时长,1~60秒 BYTE byRes[128]; }NET_DVR_LEDDISPLAY_CFG,*LPNET_DVR_LEDDISPLAY_CFG; -//Ʋ +//语音播报控制参数 typedef struct tagNET_DVR_VOICEBROADCAST_CFG { - DWORD dwSize;//ṹС - char sInfo[MAX_VOICE_INFO_LEN/*128*/]; // - BYTE byBroadcastNum;// 1~10 - BYTE byIntervalTime;// ʱ,1~5s + DWORD dwSize;//结构体大小 + char sInfo[MAX_VOICE_INFO_LEN/*128*/]; //语音播报内容 + BYTE byBroadcastNum;// 语音播报次数, 1~10次 + BYTE byIntervalTime;// 语音播报间隔时间,1~5s BYTE byRes[126]; }NET_DVR_VOICEBROADCAST_CFG,*LPNET_DVR_VOICEBROADCAST_CFG; -//ֽƱӡʽ +//纸票打印格式参数 typedef struct tagNET_DVR_PAPERPRINTFORMAT_CFG { - DWORD dwSize;//ṹС - char sTitleInfo[MAX_LITLE_INFO_LEN/*64*/]; //ֽƱ - char sCustomInfo[MAX_CUSTOM_INFO_LEN/*64*/]; //ֽƱԶϢ - char sPhoneNum[MAX_PHONE_NUM_LEN/*16*/];//ϵ绰 - BYTE byPrintInTimeEnabled; //Ƿӡ볡ʱ + DWORD dwSize;//结构体大小 + char sTitleInfo[MAX_LITLE_INFO_LEN/*64*/]; //纸票标题内容 + char sCustomInfo[MAX_CUSTOM_INFO_LEN/*64*/]; //纸票自定义信息内容 + char sPhoneNum[MAX_PHONE_NUM_LEN/*16*/];//联系电话 + BYTE byPrintInTimeEnabled; //是否打印入场时间 BYTE byRes[127]; }NET_DVR_PAPERPRINTFORMAT_CFG,*LPNET_DVR_PAPERPRINTFORMAT_CFG; -//բʱ +//智能锁闸时间段 typedef struct tagNET_DVR_LOCKGATE_TIME_CFG { - char sBeginTime[LEN_32];//ʼʱ䣨32λַ HH:MM:SS - char sEndTime[LEN_32];//ʱ䣨32λַ HH:MM:SS + char sBeginTime[LEN_32];//开始时间(32位字符串 HH:MM:SS) + char sEndTime[LEN_32];//结束时间(32位字符串 HH:MM:SS) BYTE byRes[64]; }NET_DVR_LOCKGATE_TIME_CFG,*LPNET_DVR_LOCKGATE_TIME_CFG; -//բ +//智能锁闸参数 typedef struct tagNET_DVR_LOCKGATE_CFG { - DWORD dwSize;//ṹС - NET_DVR_LOCKGATE_TIME_CFG struTime[LOCKGATE_TIME_NUM]; //բʱ + DWORD dwSize;//结构体大小 + NET_DVR_LOCKGATE_TIME_CFG struTime[LOCKGATE_TIME_NUM]; //智能锁闸时间段 BYTE byRes[128]; }NET_DVR_LOCKGATE_CFG,*LPNET_DVR_LOCKGATE_CFG; -//ͬ״̬ +//数据同步状态 typedef struct NET_DVR_PARKING_DATASTATE_INFO { DWORD dwSize; - char szAppSerialNum [MAX_APP_SERIALNUM_LEN/*32*/];//Ӧк, ǰӵӦ - DWORD dwParkingNum; //ǰͣ - DWORD dwUpdataSerialNum; //к; µкš + char szAppSerialNum [MAX_APP_SERIALNUM_LEN/*32*/];//应用序列号, 代表当前所连接的应用 + DWORD dwParkingNum; //当前停车场号 + DWORD dwUpdataSerialNum; //更新序列号; 代表最后更新的序列号。 BYTE byRes[256]; } NET_DVR_PARKING_DATASTATE_INFO,*LPNET_DVR_PARKING_DATASTATE_INFO; -//EPTZ +//联动EPTZ参数 typedef struct tagNET_DVR_EPTZ_CFG { DWORD dwSize; - BYTE byEnableEPTZ; //ǷEPTZ, 0-ã1 - + BYTE byEnableEPTZ; //是否启用EPTZ, 0-不启用,1 -启用 BYTE byRes[503]; }NET_DVR_EPTZ_CFG, *LPNET_DVR_EPTZ_CFG; -//ĵ +//中心点参数 typedef struct tagNET_DVR_CENTER_POINT_CFG { DWORD dwSize; - NET_VCA_POLYGON struRegion;//Χ + NET_VCA_POLYGON struRegion;//区域范围 BYTE byRes[512]; }NET_DVR_CENTER_POINT_CFG, *LPNET_DVR_CENTER_POINT_CFG; -/********************************DS-TME4XXƻ End****************************/ +/********************************DS-TME4XX控制机开发 End****************************/ -/********************************IPC FF Start****************************/ +/********************************IPC FF车牌 Start****************************/ typedef struct tagNET_DVR_FTPUPLOAD_PARAM { char szRuleTypeItem[MAX_SINGLE_FTPPICNAME_LEN/*20*/]; @@ -48055,239 +48055,239 @@ typedef struct tagNET_DVR_FTPUPLOAD_PARAM }NET_DVR_FTPUPLOAD_PARAM, *LPNET_DVR_FTPUPLOAD_PARAM; //char szRuleTypeItem[MAX_SINGLE_FTPPICNAME_LEN/*20*/]; -//ǹ̶ַ capture_time,plate_No,alarm_type,camera_name -//±ʾȺ˳ +//里面内容是固定字符串 capture_time,plate_No,alarm_type,camera_name +//数组下标表示先后顺序 //char szCameraName[MAX_CAMNAME_LEN/*32*/]; -//szRuleTypeItemֶαʾΪ camera_name +//依赖于szRuleTypeItem中字段表示内容为 camera_name 的情况 typedef struct tagNET_DVR_FTPUPLOADCFG { DWORD dwSize; - BYTE byEventType; //¼ͣ0-Ĭϣ1- - BYTE byMode; //ͼƬģʽ0-Ĭϣ1-Զ + BYTE byEventType; //事件类型,0-默认,1-车辆检测 + BYTE byMode; //图片命名模式,0-默认,1-自定义 BYTE byRes[62]; NET_DVR_FTPUPLOAD_PARAM struCustomVehicle[MAX_FTPNAME_NUM/*12*/]; BYTE byRes1[1024] ; }NET_DVR_FTPUPLOADCFG, *LPNET_DVR_FTPUPLOADCFG; -/********************************IPC FF End****************************/ +/********************************IPC FF车牌 End****************************/ -//Ϣն +//信息发布终端升级 typedef struct tagNET_DVR_PUBLISH_UPGRADE_COND { DWORD dwSize; - DWORD dwUpgradeType; //ͣ1-ն2-ն - DWORD dwTerminalNum; //ն˸ʽնʱЧ - DWORD *pTerminalNo; //Ҫն˺ţնʱЧ - DWORD dwGroupNo; //նţնʱЧ + DWORD dwUpgradeType; //升级类型,1-按终端升级,2-按终端组升级 + DWORD dwTerminalNum; //升级的终端格式,按终端升级时有效 + DWORD *pTerminalNo; //需要升级的终端号,按终端升级时有效 + DWORD dwGroupNo; //终端组号,按终端组升级时有效 BYTE byRes[32]; }NET_DVR_PUBLISH_UPGRADE_COND, *LPNET_DVR_PUBLISH_UPGRADE_COND; -//WEPԿ +//WEP加密密钥 typedef struct tagNET_DVR_WEP_KEY_CFG { - char csWEPKey[WEP_KEY_MAX_SIZE/*32*/];//Կ + char csWEPKey[WEP_KEY_MAX_SIZE/*32*/];//加密密钥, BYTE byRes[64]; }NET_DVR_WEP_KEY_CFG, *LPNET_DVR_WEP_KEY_CFG; typedef struct tagNET_DVR_SUB_UPGRADE_PROGRESS { - DWORD dwTerminalNo; //ն˺ - DWORD dwProgress; //նȣ0-100101ʾն쳣,,102-ն˽ѹʧܣ103-汾ƥ䣬104-ļ105-Ƿǩ + DWORD dwTerminalNo; //终端号 + DWORD dwProgress; //终端升级进度,0-100,101表示此终端升级出现异常,,102-终端解压失败,103-升级包版本不匹配,104-非升级文件,105-非法签名升级包 }NET_DVR_SUB_UPGRADE_PROGRESS, *LPNET_DVR_SUB_UPGRADE_PROGRESS; typedef struct tagNET_DVR_UPGRADE_PROGRESS_RESULT { DWORD dwSize; - DWORD dwMainProgress; //ȣ0-100 - DWORD dwSubProgressNum; //ӽȸ - LPNET_DVR_SUB_UPGRADE_PROGRESS lpStruSubProgress; //նӽȣdwSubProgressNumNET_DVR_SUB_UPGRADE_PROGRESS + DWORD dwMainProgress; //主进度,0-100 + DWORD dwSubProgressNum; //子进度个数 + LPNET_DVR_SUB_UPGRADE_PROGRESS lpStruSubProgress; //各终端升级的子进度,dwSubProgressNum个NET_DVR_SUB_UPGRADE_PROGRESS内容 BYTE byRes[32]; }NET_DVR_UPGRADE_PROGRESS_RESULT, *LPNET_DVR_UPGRADE_PROGRESS_RESULT; -//Ϣճ̷ +//信息发布服务器日程发布进度 typedef struct tagNET_DVR_SCHEDULE_PROGRESS_COND { DWORD dwSize; - DWORD dwScheduleNo; //ճ̺ - BYTE byProgressType; //ȡĽͣ1-ȡȣ2-ն˻ȡȣ3-֯ȡ + DWORD dwScheduleNo; //日程号 + BYTE byProgressType; //获取的进度类型,1-按组获取进度,2-按终端获取进度,3-按组织获取进度 BYTE byRes1[3]; - DWORD dwGroupNo; //նŻ֯Ϊ13ʱЧ - DWORD dwTerminalNo; //ն˺ţΪ2ʱЧ + DWORD dwGroupNo; //终端组号或组织,进度类型为1,3时有效 + DWORD dwTerminalNo; //终端号,进度类型为2时有效 BYTE byRes2[32]; }NET_DVR_SCHEDULE_PROGRESS_COND, *LPNET_DVR_SCHEDULE_PROGRESS_COND; typedef struct tagNET_DVR_SUB_SCHEDULE_PROGRESS { - DWORD dwTerminalNo; //ն˺ - DWORD dwProgress; //նճ̷ȣ0-100101ʾնճ̷쳣,102ʾն˴洢ռ䲻,103-ն˲ߣ104-ն˾ܾ105-նж + DWORD dwTerminalNo; //终端号 + DWORD dwProgress; //终端日程发布进度,0-100,101表示此终端日程发布出现异常,102表示此终端存储空间不足,103-终端不在线,104-终端拒绝,105-服务器和终端网络中断 }NET_DVR_SUB_SCHEDULE_PROGRESS, *LPNET_DVR_SUB_SCHEDULE_PROGRESS; typedef struct tagNET_DVR_SCHEDULE_PROGRESS_RESULT { DWORD dwSize; - DWORD dwMainProgress; //ȣ0-100ȡʱΪճ̷ȣն˻ȡʱΪնճ̷ - DWORD dwSubProgressNum; //ӽȸȡʱЧʾ¸ն˽ȸ - LPNET_DVR_SUB_SCHEDULE_PROGRESS lpStruSubProgress; //նճ̷ӽȣȡʱЧdwSubProgressNumNET_DVR_SUB_SCHEDULE_PROGRESS + DWORD dwMainProgress; //主进度,0-100,按组获取进度时为整组日程发布进度,按终端获取进度时为单个终端日程发布进度 + DWORD dwSubProgressNum; //子进度个数,按组获取时有效,表示组下各终端进度个数 + LPNET_DVR_SUB_SCHEDULE_PROGRESS lpStruSubProgress; //各终端日程发布的子进度,按组获取时有效,dwSubProgressNum个NET_DVR_SUB_SCHEDULE_PROGRESS内容 BYTE byRes[32]; }NET_DVR_SCHEDULE_PROGRESS_RESULT, *LPNET_DVR_SCHEDULE_PROGRESS_RESULT; -//Ϣ岥 +//信息发布插播进度 typedef struct tagNET_DVR_INSERTPLAY_PROGRESS_COND { DWORD dwSize; - BYTE byInsertType; //岥ͣ1-زģ2-Ŀ + BYTE byInsertType; //插播类型,1-素材,2-节目 BYTE byRes3[3]; - DWORD dwInsertNo; //岥زģΪزıţ岥ǽĿΪĿ - BYTE byProgressType; //ȡĽͣ1-ȡȣ2-ն˻ȡ + DWORD dwInsertNo; //如果插播类型是素材,为素材编号,如果插播类型是节目,为节目编号 + BYTE byProgressType; //获取的进度类型,1-按组获取进度,2-按终端获取进度 BYTE byRes1[3]; - DWORD dwGroupNo; //նţΪ1ʱЧ - DWORD dwTerminalNo; //ն˺ţΪ2ʱЧ + DWORD dwGroupNo; //终端组号,进度类型为1时有效 + DWORD dwTerminalNo; //终端号,进度类型为2时有效 BYTE byRes2[32]; }NET_DVR_INSERTPLAY_PROGRESS_COND, *LPNET_DVR_INSERTPLAY_PROGRESS_COND; typedef struct tagNET_DVR_SUB_INSERTPLAY_PROGRESS { - DWORD dwTerminalNo; //ն˺ - DWORD dwProgress; //ն˲岥ȣ0-100101ʾն˲岥쳣,102ʾն˴洢ռ䲻,103ʾȡ岥,104岥زı滻 + DWORD dwTerminalNo; //终端号 + DWORD dwProgress; //终端插播进度,0-100,101表示此终端插播出现异常,102表示此终端存储空间不足,103表示取消插播,104插播素材被替换 }NET_DVR_SUB_INSERTPLAY_PROGRESS, *LPNET_DVR_SUB_INSERTPLAY_PROGRESS; typedef struct tagNET_DVR_INSERTPLAY_PROGRESS_RESULT { DWORD dwSize; - DWORD dwMainProgress; //ȣ0-100ȡʱΪ岥ȣն˻ȡʱΪն˲岥 - DWORD dwSubProgressNum; //ӽȸȡʱЧʾ¸ն˽ȸ - LPNET_DVR_SUB_INSERTPLAY_PROGRESS lpStruSubProgress; //ն˲岥ӽȣȡʱЧdwSubProgressNumNET_DVR_SUB_INSERTPLAY_PROGRESS + DWORD dwMainProgress; //主进度,0-100,按组获取进度时为整组插播进度,按终端获取进度时为单个终端插播进度 + DWORD dwSubProgressNum; //子进度个数,按组获取时有效,表示组下各终端进度个数 + LPNET_DVR_SUB_INSERTPLAY_PROGRESS lpStruSubProgress; //各终端插播的子进度,按组获取时有效,dwSubProgressNum个NET_DVR_SUB_INSERTPLAY_PROGRESS内容 BYTE byRes[32]; }NET_DVR_INSERTPLAY_PROGRESS_RESULT, *LPNET_DVR_INSERTPLAY_PROGRESS_RESULT; -//WEP +//WEP参数 typedef struct tagNET_DVR_WEP_CFG { - BYTE byAuthenticationType;//֤ͣ0~֤1~Կ2~Զ֤ - BYTE byDefaultTransmitKeyIndex;//ĬϴԿ1~4ӦstruEncryptionKeyCfgԿĸ + BYTE byAuthenticationType;//身份验证类型;0~开启验证;1~共享密钥;2~自动验证 + BYTE byDefaultTransmitKeyIndex;//默认传输密钥个数,1~4个。对应到struEncryptionKeyCfg加密密钥的个数。 /* - Ϊ64λԿʱASCIIԿַΪ5 - Ϊ128λԿʱASCIIԿַΪ13 + 当为64位密钥时,ASCII码密钥字符长度为5个。 + 当为128位密钥时,ASCII码密钥字符长度为13个。 */ - BYTE byWepKeyLenType;//Կͣ0~ 64λԿ1~ 128λԿ - BYTE byKeyType;// Կͣ0~ ASCII룬1~ 16ơ - NET_DVR_WEP_KEY_CFG struWEPKeyCfg[WEP_KEY_MAX_NUM/*4*/];// WEPԿ֧4 + BYTE byWepKeyLenType;//密钥类型;0~ 64位密钥,1~ 128位密钥。 + BYTE byKeyType;// 密钥类型;0~ ASCII码,1~ 16进制。 + NET_DVR_WEP_KEY_CFG struWEPKeyCfg[WEP_KEY_MAX_NUM/*4*/];// WEP加密密钥,最大支持4个。 BYTE byRes[128]; }NET_DVR_WEP_CFG, *LPNET_DVR_WEP_CFG; -//WPA +//WPA参数 typedef struct tagNET_DVR_WPA_CFG { - BYTE byAlgorithmType; //㷨ͣ0~TKIP, 1~AES, 2~TKIP/AES - BYTE byWPAKeyLen;// WPAԿȣΪ8~63ӦcsSharedKeyַ - BYTE byDefaultPassword;//ǷĬWPAԿ + BYTE byAlgorithmType; //算法类型;0~TKIP, 1~AES, 2~TKIP/AES + BYTE byWPAKeyLen;// WPA共享密钥长度,区间为8~63,对应到csSharedKey参数的字符长度 + BYTE byDefaultPassword;//是否启用默认WPA密钥 BYTE byRes1; - char csSharedKey[WPA_KEY_MAX_SIZE/*64*/];//WPAԿ,Ϊ8-63ASCIIַ + char csSharedKey[WPA_KEY_MAX_SIZE/*64*/];//WPA共享密钥,为8-63个ASCII字符 BYTE byRes[128]; }NET_DVR_WPA_CFG, *LPNET_DVR_WPA_CFG; typedef struct tagNET_DVR_WIRELESS_SECURITY_CFG { - BYTE bySecurityMode; //ȫģʽ0~,1~WEP,2~WPA-personal, 3~WPA2-personal - NET_DVR_WEP_CFG struWEPCfg; //ȫģʽѡΪWEPʱЧ - NET_DVR_WPA_CFG struWPACfg; //ȫģʽѡΪWPA-personalWPA2-personalʱЧ + BYTE bySecurityMode; //安全模式;0~禁用,1~WEP,2~WPA-personal, 3~WPA2-personal + NET_DVR_WEP_CFG struWEPCfg; //当安全模式选择为WEP时生效。 + NET_DVR_WPA_CFG struWPACfg; //当安全模式选择为WPA-personal、WPA2-personal时生效。 BYTE byRes[256]; } NET_DVR_WIRELESS_SECURITY_CFG,*LPNET_DVR_WIRELESS_SECURITY_CFG; -//wifiȵ() +//wifi热点参数配置(完整版) typedef struct tagNET_DVR_WIRELESSSERVER_FULLVERSION_CFG { - DWORD dwSize;//ṹС - BYTE byWifiAPEnabled; //ǷAP0-1- - BYTE byBroadcastEnabled; // Ƿù㲥0-1- - BYTE byWlanShareEnabled; //Ƿù0-1- - BYTE byDHCPEnabled; //ǷDHCP0-1- + DWORD dwSize;//结构体大小 + BYTE byWifiAPEnabled; //是否启用无线AP:0-否,1- 是 + BYTE byBroadcastEnabled; // 是否启用广播,0-否,1-是 + BYTE byWlanShareEnabled; //是否启用共享,0-否,1-是 + BYTE byDHCPEnabled; //是否启用DHCP,0-否,1-是 BYTE bySSID[IW_ESSID_MAX_SIZE]; //SSID BYTE byRes1[11]; - BYTE byIPType; //IPַͣ0-IPv4,1-IPv6 - NET_DVR_IPADDR struIPAddr; //IPַ - NET_DVR_IPADDR struIPMask; //ַ - NET_DVR_IPADDR struGatewayIPMask; //صַ - NET_DVR_IPADDR struStartIPAddrPool; //IPʼַ - NET_DVR_IPADDR struEndIPAddrPool; // IPνַ - NET_DVR_IPADDR struDNSServerIpAddr[MAX_DNS_SERVER_NUM]; //DNSַ - NET_DVR_WIRELESS_SECURITY_CFG struWirelessSecurityCfg;//߰ȫܲ + BYTE byIPType; //IP地址类型,0-IPv4,1-IPv6 + NET_DVR_IPADDR struIPAddr; //IP地址 + NET_DVR_IPADDR struIPMask; //掩码地址 + NET_DVR_IPADDR struGatewayIPMask; //网关地址 + NET_DVR_IPADDR struStartIPAddrPool; //IP段起始地址 + NET_DVR_IPADDR struEndIPAddrPool; // IP段结束地址 + NET_DVR_IPADDR struDNSServerIpAddr[MAX_DNS_SERVER_NUM]; //DNS地址 + NET_DVR_WIRELESS_SECURITY_CFG struWirelessSecurityCfg;//无线安全加密参数 BYTE byRes[256]; }NET_DVR_WIRELESSSERVER_FULLVERSION_CFG, *LPNET_DVR_WIRELESSSERVER_FULLVERSION_CFG; typedef struct tagNET_DVR_OPTICAL_DEV_CHAN_INFO { - DWORD dwChannel; //ͨţ0ΪЧ + DWORD dwChannel; //通道号,0为无效 BYTE byChannelName[NAME_LEN]; - BYTE bySignal; //Ƿźţ0-ޣ1-Уֻ - BYTE bySignalType; //źԴͣ1-壬2-壬źʱЧֻ + BYTE bySignal; //是否有信号,0-无,1-有,只读 + BYTE bySignalType; //信号源类型,1-标清,2-高清,有信号时有效,只读 BYTE byRes[10]; }NET_DVR_OPTICAL_DEV_CHAN_INFO, *LPNET_DVR_OPTICAL_DEV_CHAN_INFO; typedef struct tagNET_DVR_OPTICAL_DEV_NODE { - BYTE byValid; //ǷЧ0-Ч1-Ч + BYTE byValid; //是否有效,0-无效,1-有效 BYTE byRes1[3]; - DWORD dwDevNo; //˻ - BYTE byDevName[NAME_LEN]; //ڵ˻ - BYTE byDevID[MAX_ID_LEN]; //˻ID豸Ψһʶֻ + DWORD dwDevNo; //光端机号 + BYTE byDevName[NAME_LEN]; //节点光端机名称 + BYTE byDevID[MAX_ID_LEN]; //光端机物理ID,设备唯一标识,只读 NET_DVR_OPTICAL_DEV_CHAN_INFO struChannel[MAX_CHANNUM]; BYTE byRes2[32]; }NET_DVR_OPTICAL_DEV_NODE, *LPNET_DVR_OPTICAL_DEV_NODE; -#define MAX_OPTICAL_DEV_NODE 32 //ڵ˻ +#define MAX_OPTICAL_DEV_NODE 32 //最多节点光端机数 typedef struct tagNET_DVR_OPTICAL_PORT_INFO { DWORD dwSize; - BYTE byValid; //ǷźŽ룬0-ޣ1-Уֻ - BYTE byLinkType; //·ͣ1-2-ֻ - BYTE byPortWorkMode; //˿ڹģʽ0-Ч1-ڣ2-ڣ·ΪʱЧֻ + BYTE byValid; //是否有信号接入,0-无,1-有,只读 + BYTE byLinkType; //链路类型,1-环网,2-链网,只读 + BYTE byPortWorkMode; //端口工作模式,0-无效,1-主口,2-辅口,当链路类型为环网时有效,只读 BYTE byRes1[1]; - DWORD dwPairPort; //Թںţ·ΪʱЧʱ˲Ϊںţʱ˲Ϊں - NET_DVR_OPTICAL_DEV_NODE struDevInfo[MAX_OPTICAL_DEV_NODE]; //ڵ˻豸Ϣ + DWORD dwPairPort; //配对光口号,链路类型为环网时有效,主口时此参数为辅口号,辅口时,此参数为主口号 + NET_DVR_OPTICAL_DEV_NODE struDevInfo[MAX_OPTICAL_DEV_NODE]; //节点光端机设备信息 BYTE byRes2[32]; }NET_DVR_OPTICAL_PORT_INFO, *LPNET_DVR_OPTICAL_PORT_INFO; typedef struct tagNET_DVR_OPTICAL_CHAN_RELATE_CFG { DWORD dwSize; - BYTE byEnable; //Ƿ˻룬0-񣬷0- + BYTE byEnable; //是否关联光端机输入,0-否,非0-是 BYTE byRes1[3]; - DWORD dwDevNo; //˻ - DWORD dwOpticalPort; //ں - BYTE byDevID[MAX_ID_LEN]; //˻ID - DWORD dwInputChanNo; //˻ͨ + DWORD dwDevNo; //光端机号 + DWORD dwOpticalPort; //光口号 + BYTE byDevID[MAX_ID_LEN]; //光端机物理ID + DWORD dwInputChanNo; //光端机输入通道号 BYTE byRes2[64]; }NET_DVR_OPTICAL_CHAN_RELATE_CFG, *LPNET_DVR_OPTICAL_CHAN_RELATE_CFG; typedef struct tagNET_DVR_START_FILE_TO_CLOUD_COND { DWORD dwSize; - BYTE aCameraID[MAX_CAMERAID_LEN]; //ID - DWORD dwPoolID; //洢ID - DWORD dwRepPoolID; //ID - WORD wReplication; // + BYTE aCameraID[MAX_CAMERAID_LEN]; //编码器ID + DWORD dwPoolID; //存储池ID + DWORD dwRepPoolID; //冗余池ID + WORD wReplication; //冗余份数 BYTE byRes [178]; }NET_DVR_START_FILE_TO_CLOUD_COND,*LPNET_DVR_START_FILE_TO_CLOUD_COND; typedef struct tagNET_DVR_START_PICTURE_FROM_CLOUD_COND { DWORD dwSize; - BYTE aCameraID[MAX_CAMERAID_LEN]; //ID - NET_DVR_TIME_V30 struBeginTime; //ʼʱ - NET_DVR_TIME_V30 struEndTime; //ʱ - DWORD dwPicType; //ͼƬͣλʾ + BYTE aCameraID[MAX_CAMERAID_LEN]; //编码器ID + NET_DVR_TIME_V30 struBeginTime; //开始时间 + NET_DVR_TIME_V30 struEndTime; //结束时间 + DWORD dwPicType; //图片类型,按位表示 //bit0-JPG //bit1-BMP //bit2-PNG BYTE byRes1[3]; - BYTE byZoomType; //0-,1-,2-С,3-ֱ + BYTE byZoomType; //0-不缩放,1-按比例,2-按大小,3-按分辨率 union { BYTE uLen[32]; @@ -48303,416 +48303,416 @@ typedef struct tagNET_DVR_START_PICTURE_FROM_CLOUD_COND { DWORD dwWidth; DWORD dwHeight; - }struResolution; //Ŀֱ + }struResolution; //目标分辨率 }uZoomParam; - DOWNLOAD_DATA_CB fnDownloadFileCallBack; //ݻص - void* pUser; //ûָ + DOWNLOAD_DATA_CB fnDownloadFileCallBack; //数据回调函数 + void* pUser; //用户数据指针 BYTE byRes [372]; }NET_DVR_START_PICTURE_FROM_CLOUD_COND,*LPNET_DVR_START_PICTURE_FROM_CLOUD_COND; typedef struct tagNET_DVR_START_PICTURE_FROM_CLOUD_RET { DWORD dwSize; - DWORD dwFileCount; //ļ + DWORD dwFileCount; //文件数量 BYTE byRes[120]; }NET_DVR_START_PICTURE_FROM_CLOUD_RET,*LPNET_DVR_START_PICTURE_FROM_CLOUD_RET; typedef struct { DWORD dwSize; - NET_DVR_TIME_V30 struTime; //ͼƬʱ - DWORD dwPicLen; //ͼƬ - BYTE byPicType; //ͼƬʽ,1-jpg,2-bmp,3-png + NET_DVR_TIME_V30 struTime; //图片时间 + DWORD dwPicLen; //图片长度 + BYTE byPicType; //图片格式,1-jpg,2-bmp,3-png BYTE byRes[107]; }NET_DVR_PICTURE_FROM_CLOUD_RET,*LPNET_DVR_PICTURE_FROM_CLOUD_RET; typedef struct tagNET_DVR_ACS_EXTERNAL_DEV_CFG { DWORD dwSize; - BYTE byIDCardUpMode; //֤Ϣϱ0ϴ18λ֤ţ1ϴȫϢ + BYTE byIDCardUpMode; //身份证信息上报,0:上传18位身份证号;1:上传全部信息 BYTE byRes1; - BYTE byCardVerifyMode; //ˢ֤ģʽ0Զ֤1ͻƽ̨֤2ˢ - BYTE byACSDevType; //豸ͺţ1֤2IC3ά4ָƶ5ַ+ά6տ7ַ8ָͷ9ģ飻10֤豸 - BYTE byDoorMode; //ųͣ0ţ1ţ + BYTE byCardVerifyMode; //刷卡认证模式,0:远程中心认证;1:客户端平台认证;2:刷卡开门 + BYTE byACSDevType; //设备型号,1:身份证读卡器,2:IC读卡器,3:二维码读卡器,4:指纹读卡器,5:字符屏+二维码读卡器,6:收卡器,7:字符屏,8:指纹头,9:语音模块;10:人证设备 + BYTE byDoorMode; //门出入类型,0:进门,1:出门; BYTE byRes2; - WORD wDevDetailType; //ľ豸ͺţ0-iDR2101-IDM102-˽֤Ķ + WORD wDevDetailType; //外设的具体设备型号,0-iDR210,1-IDM10,2-私有身份证阅读器 BYTE byRes[300]; }NET_DVR_ACS_EXTERNAL_DEV_CFG, *LPNET_DVR_ACS_EXTERNAL_DEV_CFG; typedef struct tagNET_DVR_PERSONNEL_CHANNEL_CFG { DWORD dwSize; - BYTE byInMode; //ģʽ0ܿأ1ֹ2ɣ - BYTE byOutMode; //ģʽ0ܿأ1ֹ2ɣ - BYTE byWorkMode; //ģʽ01ά2գ3 + BYTE byInMode; //进门模式,0受控;1禁止;2自由; + BYTE byOutMode; //出门模式,0受控;1禁止;2自由; + BYTE byWorkMode; //工作模式,0紧急;1维护;2常闭;3常开; BYTE byRes[301]; }NET_DVR_PERSONNEL_CHANNEL_CFG, *LPNET_DVR_PERSONNEL_CHANNEL_CFG; -#define MAX_ID_NUM_LEN 32 //֤ų -#define MAX_ID_NAME_LEN 128 // -#define MAX_ID_ADDR_LEN 280 //סַ -#define MAX_ID_ISSUING_AUTHORITY_LEN 128 //ǩس +#define MAX_ID_NUM_LEN 32 //最大身份证号长度 +#define MAX_ID_NAME_LEN 128 //最大姓名长度 +#define MAX_ID_ADDR_LEN 280 //最大住址长度 +#define MAX_ID_ISSUING_AUTHORITY_LEN 128 //最大签发机关长度 -//֤Ϣ +//身份证信息 typedef struct tagNET_DVR_ID_CARD_INFO { - DWORD dwSize; //ṹ - BYTE byName[MAX_ID_NAME_LEN]; // - NET_DVR_DATE struBirth; // - BYTE byAddr[MAX_ID_ADDR_LEN]; //סַ - BYTE byIDNum[MAX_ID_NUM_LEN]; //֤ - BYTE byIssuingAuthority[MAX_ID_ISSUING_AUTHORITY_LEN]; //ǩ - NET_DVR_DATE struStartDate; //Чʼ - NET_DVR_DATE struEndDate; //Чֹ - BYTE byTermOfValidity; //ǷЧ 0-1-ǣЧֹЧ - BYTE bySex; //Ա1-У2-Ů + DWORD dwSize; //结构长度 + BYTE byName[MAX_ID_NAME_LEN]; //姓名 + NET_DVR_DATE struBirth; //出生日期 + BYTE byAddr[MAX_ID_ADDR_LEN]; //住址 + BYTE byIDNum[MAX_ID_NUM_LEN]; //身份证号码 + BYTE byIssuingAuthority[MAX_ID_ISSUING_AUTHORITY_LEN]; //签发机关 + NET_DVR_DATE struStartDate; //有效开始日期 + NET_DVR_DATE struEndDate; //有效截止日期 + BYTE byTermOfValidity; //是否长期有效, 0-否,1-是(有效截止日期无效) + BYTE bySex; //性别,1-男,2-女 BYTE byNation; BYTE byRes[101]; }NET_DVR_ID_CARD_INFO, *LPNET_DVR_ID_CARD_INFO; -//֤Ϣ +//身份证信息报警 typedef struct tagNET_DVR_ID_CARD_INFO_ALARM { - DWORD dwSize; //ṹ - NET_DVR_ID_CARD_INFO struIDCardCfg ;//֤Ϣ - DWORD dwMajor; //ͣο궨 - DWORD dwMinor; //ͣο궨 - NET_DVR_TIME_V30 struSwipeTime; //ʱ - BYTE byNetUser[MAX_NAMELEN] ;//û - NET_DVR_IPADDR struRemoteHostAddr ;//Զַ - DWORD dwCardReaderNo; //ţΪ0Ч - DWORD dwDoorNo; //űţΪ0Ч - DWORD dwPicDataLen; //ͼƬݴСΪ0DZʾ + DWORD dwSize; //结构长度 + NET_DVR_ID_CARD_INFO struIDCardCfg ;//身份证信息 + DWORD dwMajor; //报警主类型,参考宏定义 + DWORD dwMinor; //报警次类型,参考宏定义 + NET_DVR_TIME_V30 struSwipeTime; //时间 + BYTE byNetUser[MAX_NAMELEN] ;//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr ;//远程主机地址 + DWORD dwCardReaderNo; //读卡器编号,为0无效 + DWORD dwDoorNo; //门编号,为0无效 + DWORD dwPicDataLen; //图片数据大小,不为0是表示后面带数据 char *pPicData; - BYTE byCardType; //ͣ1-ͨ2-Ⱥ忨3-ֹ4-Ѳ5-вȿ6-7-8-Ϊ0Ч - BYTE byDeviceNo; // 豸ţΪ0ʱЧЧΧ1-255 - BYTE byMask; //Ƿ֣0-1-δ֪2-֣3- - BYTE byCurrentEvent; //ǷΪʵʱ¼0-Ч1-ǣʵʱ¼2-¼ - DWORD dwFingerPrintDataLen; // ָݴСΪ0DZʾ + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 + BYTE byDeviceNo; // 设备编号,为0时无效(有效范围1-255) + BYTE byMask; //是否带口罩:0-保留,1-未知,2-不戴口罩,3-戴口罩 + BYTE byCurrentEvent; //是否为实时事件:0-无效,1-是(实时事件),2-否(离线事件) + DWORD dwFingerPrintDataLen; // 指纹数据大小,不为0是表示后面带数据 char *pFingerPrintData; - DWORD dwCapturePicDataLen; // ץͼƬݴСΪ0DZʾ + DWORD dwCapturePicDataLen; // 抓拍图片数据大小,不为0是表示后面带数据 char *pCapturePicData; - DWORD dwCertificatePicDataLen; //֤ץͼƬݴСΪ0DZʾ + DWORD dwCertificatePicDataLen; //证件抓拍图片数据大小,不为0是表示后面带数据 char *pCertificatePicData; - BYTE byCardReaderKind; //һ࣬0-Ч1-IC2-֤3-ά,4-ָͷ - BYTE byHelmet;//ѡǷȫñ0-1-δ֪2-ȫ, 3-ȫñ + BYTE byCardReaderKind; //读卡器属于哪一类,0-无效,1-IC读卡器,2-身份证读卡器,3-二维码读卡器,4-指纹头 + BYTE byHelmet;//可选,是否戴安全帽:0-保留,1-未知,2-不戴安全, 3-戴安全帽 BYTE byRes3; - BYTE byIDCardInfoExtend; //pIDCardInfoExtendǷЧ0-Ч1-Ч - char *pIDCardInfoExtend; //byIDCardInfoExtendΪ1ʱʾָһNET_DVR_ID_CARD_INFO_EXTENDṹ - DWORD dwSerialNo; //¼ˮţΪ0Ч + BYTE byIDCardInfoExtend; //pIDCardInfoExtend是否有效:0-无效,1-有效 + char *pIDCardInfoExtend; //byIDCardInfoExtend为1时,表示指向一个NET_DVR_ID_CARD_INFO_EXTEND结构体 + DWORD dwSerialNo; //事件流水号,为0无效 BYTE byRes[168]; }NET_DVR_ID_CARD_INFO_ALARM, *LPNET_DVR_ID_CARD_INFO_ALARM; -//չṹϢ +//扩展结构体信息 typedef struct tagNET_DVR_ID_CARD_INFO_EXTEND { - BYTE byRemoteCheck; //ǷҪԶ̺飨0-Ч1-ҪĬϣ2-Ҫ - BYTE byThermometryUnit; //µλ0-϶ȣĬϣ1-϶ȣ2-ģ - BYTE byIsAbnomalTemperature; //ĿץIJǷ¶쳣1-ǣ0- + BYTE byRemoteCheck; //是否需要远程核验(0-无效,1-不需要(默认),2-需要) + BYTE byThermometryUnit; //测温单位(0-摄氏度(默认),1-华氏度,2-开尔文) + BYTE byIsAbnomalTemperature; //目标抓拍测温是否温度异常:1-是,0-否 BYTE byRes2; - float fCurrTemperature; //¶ȣȷСһλ - NET_VCA_POINT struRegionCoordinates; //¶ - DWORD dwQRCodeInfoLen; //άϢȣΪ0DZʾ - DWORD dwVisibleLightDataLen; //ȳɼͼƬȣΪ0DZʾ - DWORD dwThermalDataLen; //ȳͼƬȣΪ0DZʾ - char *pQRCodeInfo; //άϢָ - char *pVisibleLightData; //ȳɼͼƬָ - char *pThermalData; //ȳͼƬָ - WORD wXCoordinate; //x꣬ϽͼƬĹһ꣬Χ0-1000 - WORD wYCoordinate; //y꣬ϽͼƬĹһ꣬Χ0-1000 - WORD wWidth; //ȣΧ0-1000 - WORD wHeight; //߶ȣΧ0-1000 - BYTE byHealthCode; //״̬, 0-, 1-δ, 2-δ, 3-, 4-, 5-, 6-޴Ա, 7-Ϣӿ쳣²ѯʧܣ, 8-ѯ볬ʱ - BYTE byNADCode; //, 0-, 1-δѯ, 2-ԣ, 3-ԣȷ, 4-Чѹ - BYTE byTravelCode; //г̱, 0-, 1-14һֱڵ, 2-14뿪, 3-14ڵ, 4- - BYTE byVaccineStatus; //״̬, 0-, 1-δ, 2-ע, 3- + float fCurrTemperature; //人脸温度(精确到小数点后一位) + NET_VCA_POINT struRegionCoordinates; //人脸温度坐标 + DWORD dwQRCodeInfoLen; //二维码信息长度,不为0是表示后面带数据 + DWORD dwVisibleLightDataLen; //热成像相机可见光图片长度,不为0是表示后面带数据 + DWORD dwThermalDataLen; //热成像图片长度,不为0是表示后面带数据 + char *pQRCodeInfo; //二维码信息指针 + char *pVisibleLightData; //热成像相机可见光图片指针 + char *pThermalData; //热成像图片指针 + WORD wXCoordinate; //x坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wYCoordinate; //y坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wWidth; //人脸框宽度,范围0-1000 + WORD wHeight; //人脸框高度,范围0-1000 + BYTE byHealthCode; //健康码状态, 0-保留, 1-未请求, 2-未申领, 3-绿码, 4-黄码, 5-红码, 6-无此人员, 7-其他错误信息(如接口异常导致查询失败), 8-查询健康码超时 + BYTE byNADCode; //核酸检测结果, 0-保留, 1-未查询到核酸检测结果, 2-核酸检测阴性(代表正常), 3-核酸检测阳性(代表确诊), 4-核酸检测有效期已过 + BYTE byTravelCode; //行程编码, 0-保留, 1-14天内一直在当地, 2-14天内离开过当地, 3-14天内到过疫区, 4-其他 + BYTE byVaccineStatus; //打疫苗状态, 0-保留, 1-未打疫苗, 2-部分注射疫苗, 3-打过疫苗 BYTE byRes[1012]; }NET_DVR_ID_CARD_INFO_EXTEND, *LPNET_DVR_ID_CARD_INFO_EXTEND; -//֤Ϣֹṹ +//身份证信息禁止名单条件结构 typedef struct tagNET_DVR_ID_CARD_BLOCKLIST_COND { DWORD dwSize; - BYTE byRes[256]; // + BYTE byRes[256]; //保留 }NET_DVR_ID_CARD_BLOCKLIST_COND, *LPNET_DVR_ID_CARD_BLOCKLIST_COND; -//֤Ϣֹ +//身份证信息禁止名单参数 typedef struct tagNET_DVR_ID_CARD_BLOCKLIST_CFG { DWORD dwSize; - NET_DVR_ID_CARD_INFO struIDCardCfg; // ֤Ϣ - DWORD dwFingerPrintDataLen; // ָ֤ݴСΪ0DZʾ + NET_DVR_ID_CARD_INFO struIDCardCfg; // 身份证信息 + DWORD dwFingerPrintDataLen; // 身份证指纹数据大小,不为0是表示后面带数据 char *pFingerPrintData; - DWORD dwPicDataLen; // ֤ͼƬݴСΪ0DZʾ + DWORD dwPicDataLen; // 身份证图片数据大小,不为0是表示后面带数据 char *pPicData; BYTE byRes[128]; }NET_DVR_ID_CARD_BLOCKLIST_CFG, *LPNET_DVR_ID_CARD_BLOCKLIST_CFG; -//A =ĸַ [a..z, A..Z]N = ַ [0..9]S = ַ [<]B= +//A =字母字符 [a..z, A..Z],N = 数字字符 [0..9],S = 特殊字符 [‘<’],B=二进制数据 typedef struct tagNET_DVR_PASSPORT_INFO { - DWORD dwSize; //ṹ - BYTE byOCR; //0-ӻݣ1- OCRʶݣ - BYTE byRes1[3]; // - BYTE byType[MAX_PASSPORT_TYPE_LEN]; //֤ͣAS - BYTE byCountryIssue[MAX_PASSPORT_INFO_LEN]; //ǩǩAS - BYTE byName[MAX_PASSPORT_NAME_LEN]; //AS - BYTE byPassportNo[MAX_PASSPORT_NUM_LEN]; //֤룬ANS - BYTE byNationality[MAX_NATIONALITY_LEN]; // AS - NET_DVR_DATE struBirth; // - NET_DVR_DATE struExpireDate; //Чֹ - BYTE bySex; //Ա1-У2-Ů - BYTE byRes2[35]; // - BYTE byLocalName[MAX_PASSPORT_INFO_LEN]; //B - BYTE byNumber[MAX_PASSPORT_INFO_LEN]; //˺룬ANS - BYTE byPlaceOfBirth[MAX_PASSPORT_INFO_LEN]; //أB - BYTE byAddr[MAX_PASSPORT_INFO_LEN]; //ַANSB - BYTE byPhone[MAX_PASSPORT_INFO_LEN]; //绰NS - BYTE byJob[MAX_PASSPORT_INFO_LEN]; //ְҵB - BYTE byTitle[MAX_PASSPORT_INFO_LEN]; //ְΣB - BYTE byResume[MAX_PASSPORT_INFO_LEN]; //B - BYTE byOtherNumber[MAX_PASSPORT_INFO_LEN]; //֤룬ANSB - BYTE byMonitoring[MAX_PASSPORT_MONITOR_LEN]; //໤ϢB + DWORD dwSize; //结构长度 + BYTE byOCR; //0-电子护照数据,1- OCR识别数据, + BYTE byRes1[3]; //保留 + BYTE byType[MAX_PASSPORT_TYPE_LEN]; //证件类型,数据类型A,S + BYTE byCountryIssue[MAX_PASSPORT_INFO_LEN]; //签发国或签发机构,数据类型A,S + BYTE byName[MAX_PASSPORT_NAME_LEN]; //姓名,数据类型A,S + BYTE byPassportNo[MAX_PASSPORT_NUM_LEN]; //证件号码,数据类型A,N,S + BYTE byNationality[MAX_NATIONALITY_LEN]; //国籍 ,数据类型A,S + NET_DVR_DATE struBirth; //出生日期 + NET_DVR_DATE struExpireDate; //有效截止日期 + BYTE bySex; //性别,1-男,2-女 + BYTE byRes2[35]; //保留 + BYTE byLocalName[MAX_PASSPORT_INFO_LEN]; //本国姓名,数据类型B + BYTE byNumber[MAX_PASSPORT_INFO_LEN]; //个人号码,数据类型A,N,S + BYTE byPlaceOfBirth[MAX_PASSPORT_INFO_LEN]; //出生地,数据类型B + BYTE byAddr[MAX_PASSPORT_INFO_LEN]; //地址,数据类型A,N,S,B + BYTE byPhone[MAX_PASSPORT_INFO_LEN]; //电话,数据类型N,S + BYTE byJob[MAX_PASSPORT_INFO_LEN]; //职业,数据类型B + BYTE byTitle[MAX_PASSPORT_INFO_LEN]; //职衔,数据类型B + BYTE byResume[MAX_PASSPORT_INFO_LEN]; //简历,数据类型B + BYTE byOtherNumber[MAX_PASSPORT_INFO_LEN]; //其他旅行证件号码,数据类型A,N,S,B + BYTE byMonitoring[MAX_PASSPORT_MONITOR_LEN]; //监护信息,数据类型B BYTE byRes[128]; }NET_DVR_PASSPORT_INFO, *LPNET_DVR_PASSPORT_INFO; -//Ϣϴ +//护照信息上传 typedef struct tagNET_DVR_PASSPORT_ALARM { - DWORD dwSize; //ṹ - DWORD dwMajor; //ͣο궨 - DWORD dwMinor; //ͣο궨 - NET_DVR_TIME_V30 struSwipeTime; //ʱ - BYTE byNetUser[MAX_NAMELEN];//û - NET_DVR_IPADDR struRemoteHostAddr;//Զַ - DWORD dwCardReaderNo; //ţΪ0Ч - BYTE byCardType; //ͣ1-ͨ2-Ⱥ忨3-ֹ4-Ѳ5-вȿ6-7-8-Ϊ0Ч + DWORD dwSize; //结构长度 + DWORD dwMajor; //报警主类型,参考宏定义 + DWORD dwMinor; //报警次类型,参考宏定义 + NET_DVR_TIME_V30 struSwipeTime; //时间 + BYTE byNetUser[MAX_NAMELEN];//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr;//远程主机地址 + DWORD dwCardReaderNo; //读卡器编号,为0无效 + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 BYTE byRes2[11]; - NET_DVR_PASSPORT_INFO struPassportInfo;//Ϣ - DWORD dwFaceDataLen; //ݴСΪ0DZʾ + NET_DVR_PASSPORT_INFO struPassportInfo;//护照信息 + DWORD dwFaceDataLen; //人脸数据大小,不为0是表示后面带数据 char *pFaceData; - DWORD dwPicDataLen; //֤ͼƬݴСΪ0DZʾ - char *pPicData; // [ISO/IEC 10918-1] ʽĹ֤ͼ - DWORD dwCapturePicDataLen; //ץͼƬݴСΪ0DZʾ + DWORD dwPicDataLen; //公民证件图片数据大小,不为0是表示后面带数据 + char *pPicData; //按照 [ISO/IEC 10918-1] 格式化的公民证件图像 + DWORD dwCapturePicDataLen; //抓拍图片数据大小,不为0是表示后面带数据 char *pCapturePicData; BYTE byRes[128]; }NET_DVR_PASSPORT_ALARM, *LPNET_DVR_PASSPORT_ALARM; typedef struct tagNET_DVR_PASSNUM_INFO_ALARM { - DWORD dwSize; //ṹ - DWORD dwAccessChannel; //Աͨ - NET_DVR_TIME_V30 struSwipeTime; //ʱ - BYTE byNetUser[MAX_NAMELEN] ;//û - NET_DVR_IPADDR struRemoteHostAddr ;//Զַ - DWORD dwEntryTimes; //Ա - DWORD dwExitTimes; //Ա - DWORD dwTotalTimes; //Աܴ + DWORD dwSize; //结构长度 + DWORD dwAccessChannel; //人员通道号 + NET_DVR_TIME_V30 struSwipeTime; //时间 + BYTE byNetUser[MAX_NAMELEN] ;//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr ;//远程主机地址 + DWORD dwEntryTimes; //人员入次数; + DWORD dwExitTimes; //人员出次数; + DWORD dwTotalTimes; //人员出入总次数; BYTE byRes[300]; }NET_DVR_PASSNUM_INFO_ALARM, *LPNET_DVR_PASSNUM_INFO_ALARM; typedef struct tagNET_DVR_UPLOAD_VIDEO_INFO { DWORD dwSize; - DWORD dwVideoMangeNo; //Ƶ - BYTE byVideoType; //Ƶʽ 0-AVI 1-WMV 2-MP4 3-FLV 3-VOD 4-MKV 5-RMVB - BYTE byRes1[3]; // - BYTE sVideoName[NAME_LEN]; //Ƶ - NET_DVR_TIME_V30 struTime; //ͼƬϴʱ + DWORD dwVideoMangeNo; //视频管理号 + BYTE byVideoType; //视频格式 0-AVI 1-WMV 2-MP4 3-FLV 3-VOD 4-MKV 5-RMVB + BYTE byRes1[3]; //保留 + BYTE sVideoName[NAME_LEN]; //视频名称 + NET_DVR_TIME_V30 struTime; //图片上传时间 BYTE byRes[132]; } NET_DVR_UPLOAD_VIDEO_INFO, *LPNET_DVR_UPLOAD_VIDEO_INFO; typedef struct tagNET_DVR_DEVICE_FILE_INFO { DWORD dwSize; - BYTE sFileName[NAME_LEN]; //ļ - DWORD dwManageNo; //(ֻܻȡ) - NET_DVR_TIME_EX struTime; //ĵϴʱ - BYTE byUsed; //ǷѴڣ0-ڣ1- ֻܻȡ + BYTE sFileName[NAME_LEN]; //文件名称 + DWORD dwManageNo; //(只能获取) + NET_DVR_TIME_EX struTime; //文档上传时间 + BYTE byUsed; //是否已存在,0-不存在,1-存在 (只能获取) BYTE byRes[127]; } NET_DVR_DEVICE_FILE_INFO, *LPNET_DVR_DEVICE_FILE_INFO; typedef struct tagNET_DVR_PLAY_ITEM { DWORD dwSize; - BYTE byItemType; //ͣ1-ͼƬ 2-Ƶ 3-б - BYTE byRes[3]; // - DWORD dwPlayManageNo; //Ź - DWORD dwPlayPicTime; //ͼƬʱ䣬λ, (ΪͼƬЧ) + BYTE byItemType; //播放项类型,1-图片 2-视频 3-播放列表 + BYTE byRes[3]; //保留 + DWORD dwPlayManageNo; //播放管理号 + DWORD dwPlayPicTime; //播放图片时间,单位秒, (类型为图片有效) BYTE byRes2[64]; } NET_DVR_PLAY_ITEM, *LPNET_DVR_PLAY_ITEM; typedef struct tagNET_DVR_DEVICE_PLAYLIST { DWORD dwSize; - BYTE byEnable; //ǷЧ 0-Ч !0-Ч - BYTE byPlayType; //ģʽ1-ѭ - BYTE byVaildItemNum; //Ч + BYTE byEnable; //是否有效, 0-无效 !0-有效 + BYTE byPlayType; //播放模式,1-循环播放 + BYTE byVaildItemNum; //有效播放项数量 BYTE byRes[1]; - NET_DVR_PLAY_ITEM struPlayItem[PLAYLIST_ITEM_NUM]; //ǰbyVaildItemNumЧ - BYTE byPlaylistName[PLAYLIST_NAME_LEN]; //б - DWORD dwPlaylistNo; //бţȡЧ + NET_DVR_PLAY_ITEM struPlayItem[PLAYLIST_ITEM_NUM]; //播放项,前byVaildItemNum有效 + BYTE byPlaylistName[PLAYLIST_NAME_LEN]; //播放列表名称 + DWORD dwPlaylistNo; //播放列表号(获取有效) BYTE byRes2[128]; } NET_DVR_DEVICE_PLAYLIST, *LPNET_DVR_DEVICE_PLAYLIST; typedef struct tagNET_DVR_PLAYLIST_ITEM_CTRL { DWORD dwSize; - BYTE byCtrlType; //ͣ 1-Ӳ 2-ɾ 3-ƶλ - BYTE byPlayIndex; //ţ 1ʼ - NET_DVR_PLAY_ITEM struPlayItem; // - BYTE byNewPlayIndex; //²ţ0Ч + BYTE byCtrlType; //操作类型, 1-添加播放项 2-删除播放项 3-移动播放项位置 + BYTE byPlayIndex; //播放序号, 从1开始 + NET_DVR_PLAY_ITEM struPlayItem; //播放项 + BYTE byNewPlayIndex; //新播放序号,0无效 BYTE byRes[63]; }NET_DVR_PLAYLIST_ITEM_CTRL, *LPNET_DVR_PLAYLIST_ITEM_CTRL; typedef struct tagNET_DVR_PLAN_ITEM { - NET_DVR_PLAY_ITEM struPlanPlayItem; // - NET_DVR_TIME_SEGMENT struTimeSegment; //ʱβ + NET_DVR_PLAY_ITEM struPlanPlayItem; //播放项 + NET_DVR_TIME_SEGMENT struTimeSegment; //时间段参数 BYTE byRes[16]; } NET_DVR_PLAN_ITEM, *LPNET_DVR_PLAN_ITEM; typedef struct tagNET_DVR_PLAYPLAN_CFG { DWORD dwSize; - BYTE byEnable; //Ƿʹ, 0-ʹ !0-ʹ - BYTE byPlanMode; //ƻģʽ1-ܼƻ 2-ռƻ + BYTE byEnable; //是否使能, 0-不使能 !0-使能 + BYTE byPlanMode; //计划模式,1-周计划 2-日计划 BYTE byRes[2]; NET_DVR_PLAN_ITEM struPlanItem[MAX_DAYS][MAX_TIMESEGMENT_V30]; - DWORD dwPlayPlanNo; //żƻţȡʱЧ - BYTE byPlayPlanName[NAME_LEN]; //żƻ + DWORD dwPlayPlanNo; //播放计划号(获取时有效) + BYTE byPlayPlanName[NAME_LEN]; //播放计划名称 BYTE byRes2[32]; } NET_DVR_PLAYPLAN_CFG, *LPNET_DVR_PLAYPLAN_CFG; typedef struct tagNET_DVR_WINDOW_PLAYPLAN_CFG { DWORD dwSize; - BYTE byEnable; //Ƿòżƻ 0- !0- + BYTE byEnable; //是否启用播放计划, 0-不启用 !0-启用 BYTE byRes[3]; - DWORD dwPlayPlanNo; //żƻ + DWORD dwPlayPlanNo; //播放计划号 BYTE byRes2[32]; } NET_DVR_WINDOW_PLAYPLAN_CFG, *LPNET_DVR_WINDOW_PLAYPLAN_CFG; typedef struct tagNET_DVR_DEV_PLAYCTRL { DWORD dwSize; - BYTE byControlType; //ͣ1-Ƶ2-Ƶأ3-ֹͣţ4-ͣţָ + BYTE byControlType; //控制类型,1-音频开,2-音频关,3-停止播放,4-暂停播放,恢复播放 BYTE byRes[131]; } NET_DVR_DEV_PLAYCTRL, *LPNET_DVR_DEV_PLAYCTRL; typedef union tagNET_DVR_PLAYITEM_INFO { - struct // + struct //单独播放 { - DWORD dwPlayItem; // - BYTE byPlayItemName[NAME_LEN]; // + DWORD dwPlayItem; //播放项 + BYTE byPlayItemName[NAME_LEN]; //播放项名称 BYTE byRes2[8]; } struPlayItem; - struct //б + struct //播放列表 { - DWORD dwPlaylistNo; //б - BYTE byPlaylistName[NAME_LEN]; //б - WORD wPlayIndex; //λ - BYTE byPlayType; //бڲ 1-ͼƬ 2-Ƶ + DWORD dwPlaylistNo; //播放列表号 + BYTE byPlaylistName[NAME_LEN]; //播放列表名称 + WORD wPlayIndex; //播放位置 + BYTE byPlayType; //播放列表中正在播放类型 1-图片 2-视频 BYTE byRes[3]; - DWORD dwPlayItem; // - BYTE byPlayItemName[NAME_LEN]; // + DWORD dwPlayItem; //播放项 + BYTE byPlayItemName[NAME_LEN]; //播放项名称 BYTE byRes2[16]; } struPlaylistItem; - struct //żƻ + struct //播放计划项 { - DWORD dwPlayPlanNo; //żƻ - NET_DVR_TIME_SEGMENT struTime; //ڲʱ - BYTE byPlayType; //żƻڲ 1-ͼƬ 2-Ƶ 3-б + DWORD dwPlayPlanNo; //播放计划号 + NET_DVR_TIME_SEGMENT struTime; //正在播放时间段 + BYTE byPlayType; //播放计划正在播放类型 1-图片 2-视频 3-播放列表 BYTE byRes[3]; - DWORD dwPlaylistNo; //б - BYTE byPlaylistName[NAME_LEN]; //б - DWORD dwPlayItem; // - BYTE byPlayItemName[NAME_LEN]; // - WORD wPlayIndex; //λ + DWORD dwPlaylistNo; //播放列表号 + BYTE byPlaylistName[NAME_LEN]; //播放列表名称 + DWORD dwPlayItem; //播放项 + BYTE byPlayItemName[NAME_LEN]; //播放项名称 + WORD wPlayIndex; //播放位置 BYTE byRes2[18]; } struPlayPlanItem; }NET_DVR_PLAYITEM_INFO, *LPNET_DVR_PLAYITEM_INFO; typedef struct tagNET_DVR_PLAYING_INFO { DWORD dwSize; - BYTE byPlayWay; //ŷʽ 1- 2-б 3-żƻ 4-̬ 5-岥 - BYTE byCurPlayType; //ڲزͣ 1-ͼƬ 2-Ƶ̬ͽ岥ʱЧ - BYTE byPlayState; //״̬1-ڲţ2-ֹͣ3-ͣ - BYTE byAudioState; //Ƶ״̬0-أ1- - NET_DVR_PLAYITEM_INFO struPlayItemInfo; //Ϣ + BYTE byPlayWay; //播放方式, 1-单项播放 2-播放列表 3-播放计划 4-动态解码 5-紧急插播 + BYTE byCurPlayType; //正在播放素材类型, 1-图片 2-视频,动态解码和紧急插播时无效 + BYTE byPlayState; //播放状态,1-正在播放,2-播放停止,3-播放暂停 + BYTE byAudioState; //音频开关状态,0-关,1-开 + NET_DVR_PLAYITEM_INFO struPlayItemInfo; //播放项信息 BYTE byRes2[16]; } NET_DVR_PLAYING_INFO, *LPNET_DVR_PLAYING_INFO; -typedef struct tagNET_DVR_ONLINEUSER_COND //ṹ +typedef struct tagNET_DVR_ONLINEUSER_COND //条件结构 { DWORD dwSize; - DWORD dwChannel;//ͨţǰĬ1 + DWORD dwChannel;//通道号(前端默认是1) BYTE byRes [128]; }NET_DVR_ONLINEUSER_COND,*LPNET_DVR_ONLINEUSER_COND; -typedef struct tagNET_DVR_ONLINEUSER_CFG //ýṹ +typedef struct tagNET_DVR_ONLINEUSER_CFG //配置结构 { DWORD dwSize; - BYTE byID;//ûк - BYTE byUserType;//û 0-ͨû1-Ա2-û - BYTE byDataType;//״̬:0-У1-ʼ2- + BYTE byID;//用户序列号 + BYTE byUserType;//用户类型 0-普通用户,1-操作员,2-超级用户 + BYTE byDataType;//数据状态类型:0-检测中,1-开始,2-结束 BYTE byRes; - NET_DVR_IPADDR struIpAddr;//IPַ - NET_DVR_TIME_V30 struLoginTime;//½ʱ - char szUserName[NAME_LEN/*32*/];//û + NET_DVR_IPADDR struIpAddr;//IP地址 + NET_DVR_TIME_V30 struLoginTime;//登陆时间 + char szUserName[NAME_LEN/*32*/];//用户名 BYTE byRes1[128]; }NET_DVR_ONLINEUSER_CFG,*LPNET_DVR_ONLINEUSER_CFG; -//洢״̬ +//存储健康状态 typedef struct tagNET_DVR_STORAGE_DETECTION { - DWORD dwSize;//ṹС - BYTE byHealthState;//״̬0-ã1-2-𻵣3-δ֪ - BYTE bySDCardState;//SDcard״̬ 0-ߣ1-,2-δ֪,3- - WORD wAbnormalPowerLoss;//쳣 - WORD wBadBlocks;// - BYTE byRemainingLife; //SDʣ; 0~100% + DWORD dwSize;//结构体大小 + BYTE byHealthState;//健康状态0-良好,1-差,2-损坏,3-未知 + BYTE bySDCardState;//SDcard状态 0-掉线,1-上线,2-未知,3-已锁定 + WORD wAbnormalPowerLoss;//异常掉电数 + WORD wBadBlocks;//坏块数 + BYTE byRemainingLife; //SD卡剩余寿命; 0~100% BYTE byRes[125]; }NET_DVR_STORAGE_DETECTION,*LPNET_DVR_STORAGE_DETECTION; -//洢ܼⱨϴ +//存储智能检测报警上传 typedef struct tagNET_DVR_STORAGE_DETECTION_ALARM { DWORD dwSize; - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - DWORD dwCardID; //ID - WORD wAbnormalPowerLoss;//쳣 - WORD wBadBlocks;// - BYTE byHealthState;//״̬0-ã1-2-𻵣3-δ֪ + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwCardID; //卡ID + WORD wAbnormalPowerLoss;//异常掉电数 + WORD wBadBlocks;//坏块数 + BYTE byHealthState;//健康状态0-良好,1-差,2-损坏,3-未知 BYTE byRes1[3]; - float fResidualLife; //SD Ԥʣ + float fResidualLife; //SD卡 预计剩余寿命 BYTE byRes[118]; }NET_DVR_STORAGE_DETECTION_ALARM,*LPNET_DVR_STORAGE_DETECTION_ALARM; -//洢Ķд +//存储侦测的读写锁配置 typedef struct tagNET_DVR_STORAGE_RWLOCK { - DWORD dwSize;//ṹС - BYTE byEnabled;//ʹ 0-رգ1- + DWORD dwSize;//结构体大小 + BYTE byEnabled;//使能 0-关闭,1-开启 BYTE byRes[3]; - char szPassWD[PASSWD_LEN/*16*/]; //д - char szOriginalPassWD[PASSWD_LEN/*16*/]; //ԭʼ + char szPassWD[PASSWD_LEN/*16*/]; //读写锁新密码 + char szOriginalPassWD[PASSWD_LEN/*16*/]; //原始密码 BYTE byRes1[128]; }NET_DVR_STORAGE_RWLOCK,*LPNET_DVR_STORAGE_RWLOCK; -//洢Ľ +//存储侦测的解锁配置 typedef struct tagNET_DVR_STORAGE_UNLOCK { - DWORD dwSize;//ṹС - char szPassWD[PASSWD_LEN/*16*/]; // + DWORD dwSize;//结构体大小 + char szPassWD[PASSWD_LEN/*16*/]; //密码 BYTE byRes1[128]; }NET_DVR_STORAGE_UNLOCK,*LPNET_DVR_STORAGE_UNLOCK; typedef struct tagNET_DVR_PTZTRACKSTATUS { - DWORD dwSize;//ṹС - BYTE byID;//豸ID (ֶbyLinkageType0ʱЧ) - BYTE byLinkageType;//0-1-豸 + DWORD dwSize;//结构体大小 + BYTE byID;//联动设备的ID (字段byLinkageType非0的时候生效) + BYTE byLinkageType;//联动动作0-不联动,1-联动球机设备 BYTE byRes[254]; }NET_DVR_PTZTRACKSTATUS,*LPNET_DVR_PTZTRACKSTATUS; @@ -48720,10 +48720,10 @@ typedef struct tagNET_DVR_PTZTRACKSTATUS typedef struct tagNET_DVR_SOCKS_PROXY_PARA { - BYTE byIP[129]; //ַ - BYTE byAuthType; //֤ʽʱȲʹøֶ - WORD wPort; //˿ - BYTE byRes2[64]; //Ҫʹ֤ʽȻҪһЩֽڣһЩ + BYTE byIP[129]; //代理服务器地址 + BYTE byAuthType; //认证方式,暂时先不使用该字段 + WORD wPort; //代理服务器端口 + BYTE byRes2[64]; //如果要使用认证方式,必然需要一些保留字节,先留一些 }NET_DVR_SOCKS_PROXY_PARA, *LPNET_DVR_SOCKS_PROXY_PARA; typedef struct tagNET_DVR_SOCKS_PROXYS @@ -48733,32 +48733,32 @@ typedef struct tagNET_DVR_SOCKS_PROXYS typedef struct tagNET_DVR_GET_FIGURE_COND { - DWORD dwLength; //ṹ - DWORD dwChannel; //ͨ - NET_DVR_TIME_V30 struTimePoint; //ʱ - BYTE byID[STREAM_ID_LEN/*32*/]; //ID + DWORD dwLength; //结构长度 + DWORD dwChannel; //通道 + NET_DVR_TIME_V30 struTimePoint; //时间点 + BYTE byID[STREAM_ID_LEN/*32*/]; //ID数据 BYTE byRes[32]; }NET_DVR_GET_FIGURE_COND, *LPNET_DVR_GET_FIGURE_COND; typedef struct tagNET_DVR_FIGURE_INFO { - DWORD dwPicLen; //ͼƬ - char *pPicBuf; //ͼƬ + DWORD dwPicLen; //图片长度 + char *pPicBuf; //图片数据 }NET_DVR_FIGURE_INFO, *LPNET_DVR_FIGURE_INFO; -//ֶ +//手动测距参数 typedef struct tagNET_DVR_MANUALRANGING_CFG { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿֶࣺ0- 1- + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否开启手动测距:0- 否,1- 是 BYTE byRes[127]; }NET_DVR_MANUALRANGING_CFG,*LPNET_DVR_MANUALRANGING_CFG; typedef struct tagNET_DVR_VIDEO_INTERCOM_ALARM_CFG { - DWORD dwSize; //ṹС - BYTE byDoorNotCloseAlarm; //Ƿϴδر0-ϴ1-ϴ - BYTE byRes[603]; // + DWORD dwSize; //结构体大小 + BYTE byDoorNotCloseAlarm; //是否上传门未关报警,0-不上传,1-上传 + BYTE byRes[603]; //保留 }NET_DVR_VIDEO_INTERCOM_ALARM_CFG, *LPNET_DVR_VIDEO_INTERCOM_ALARM_CFG; typedef struct tagNET_DVR_PACKET_INFO_EX @@ -48775,388 +48775,388 @@ typedef struct tagNET_DVR_PACKET_INFO_EX DWORD dwSecond; //second DWORD dwMillisecond; //millisecond DWORD dwFrameNum; //frame num - DWORD dwFrameRate; //frame rate,֡С0ʱ0x80000002:ʾ1/2֡ʣͬ0x80000010Ϊ1/16֡ - DWORD dwFlag; //flag E֡ + DWORD dwFrameRate; //frame rate,当帧率小于0时,0x80000002:表示1/2帧率,同理可推0x80000010为1/16帧率 + DWORD dwFlag; //flag E帧标记 DWORD dwFilePos; //file pos - DWORD dwPacketType; //Packet type:0 -file head1 -video I frame2- video B frame 3- video P frame 10- audio packet 11- private packet + DWORD dwPacketType; //Packet type:0 -file head,1 -video I frame,2- video B frame, 3- video P frame, 10- audio packet, 11- private packet DWORD dwPacketSize; //packet size unsigned char* pPacketBuffer; //packet buffer BYTE byRes1[4]; - DWORD dwPacketMode; //ʽ:0-1-FU_Aʽ + DWORD dwPacketMode; //打包方式:0-保留,1-FU_A打包方式 BYTE byRes2[16]; - DWORD dwReserved[6]; //reserved[0] ʾ˽ - //reserved[1] ʾ˽ݵַλ - //reserved[2] ʾ˽ݵַλ - //reserved[3] ʾ˽ݳ - //reserved[4] ˽֡/ʱ\ʱ - //reserved[5].һbitλǷΪP֡P1ΪP0; lizhonghu 20150203 + DWORD dwReserved[6]; //reserved[0] 表示私有数据类型 + //reserved[1] 表示私有裸数据地址高位 + //reserved[2] 表示私有裸数据地址低位 + //reserved[3] 表示私有裸数据长度 + //reserved[4] 私有帧/包的时间间隔\时间戳 + //reserved[5].一bit位标记是否为深P帧,深P:1,不为深P:0; lizhonghu 20150203 }NET_DVR_PACKET_INFO_EX, *LPNET_DVR_PACKET_INFO_EX; typedef BOOL(CALLBACK * DEV_WORK_STATE_CB)(void* pUserdata, int iUserID, LPNET_DVR_WORKSTATE_V40 lpWorkState); typedef struct tagNetDVRCheckDevState { - DWORD dwTimeout; //ʱ豸״̬λmsΪ0ʱʾʹĬֵ(30000)СֵΪ1000 + DWORD dwTimeout; //定时检测设备工作状态,单位ms,为0时,表示使用默认值(30000)。最小值为1000 DEV_WORK_STATE_CB fnStateCB; void* pUserData; BYTE byRes[60]; }NET_DVR_CHECK_DEV_STATE,*LPNET_DVR_CHECK_DEV_STATE; -#define COURSE_NAME_LEN_128 128 //γ -#define INSTRUCTOR_NAME_LEN_64 64 //ڿνʦ -#define MAX_UUID_LEN 64 //ֶγUUID +#define COURSE_NAME_LEN_128 128 //课程名称 +#define INSTRUCTOR_NAME_LEN_64 64 //授课教师 +#define MAX_UUID_LEN 64 //手动课程UUID -//ȡṹ +//获取条件结构体 typedef struct tagNET_DVR_COURSE_LIST_COND { DWORD dwSize; - NET_DVR_TIME_V30 struStartTime; //γ̿ʼʱ - NET_DVR_TIME_V30 struEndTime; //γ̽ʱ - BYTE byCourseName[COURSE_NAME_LEN_128]; //γ - BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; //ڿʦ - BYTE byCourseType; //αͣ0-ȫ1-ֶ + NET_DVR_TIME_V30 struStartTime; //课程开始时间 + NET_DVR_TIME_V30 struEndTime; //课程结束时间 + BYTE byCourseName[COURSE_NAME_LEN_128]; //课程名称 + BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; //授课老师 + BYTE byCourseType; //课表类型,0-全部,1-手动 BYTE byRes[603]; }NET_DVR_COURSE_LIST_COND,*LPNET_DVR_COURSE_LIST_COND; typedef struct tagNET_DVR_COURSE_CFG { DWORD dwSize; - NET_DVR_TIME_V30 struStartTime; //γ̿ʼʱ - NET_DVR_TIME_V30 struEndTime; //γ̿ʼʱ + NET_DVR_TIME_V30 struStartTime; //课程开始时间 + NET_DVR_TIME_V30 struEndTime; //课程开始时间 BYTE byCourseName[COURSE_NAME_LEN_128]; BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; BYTE byCourseDescription[COURSE_DESCRIPTION_LEN /*256*/]; - BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //ֶαUUID - BYTE byCourseType;//αͣ0-ȫ1-ֶα + BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //手动课表UUID + BYTE byCourseType;//课表类型,0-全部,1-手动课表 BYTE byRes[303]; }NET_DVR_COURSE_CFG, *LPNET_DVR_COURSE_CFG; typedef struct tagNET_DVR_RECORD_STATUS { - DWORD dwSize; //ṹС - BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //ֶαUUID - BYTE byRecordStatus; //¼״̬0-ͣ1-,2-¼3- - BYTE byRes1[3]; //ֽ - DWORD dwRecordingTime; //¼ʱλ룬Ϊ12*60*60 - BYTE byRes[596]; //ֽ + DWORD dwSize; //结构体大小 + BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //手动课表UUID + BYTE byRecordStatus; //录播状态,0-暂停,1-屏蔽,2-正在录像,3-空闲 + BYTE byRes1[3]; //保留字节 + DWORD dwRecordingTime; //已录制时长,单位:秒,最大为12*60*60 + BYTE byRes[596]; //保留字节 }NET_DVR_RECORD_STATUS, *LPNET_DVR_RECORD_STATUS; typedef struct tagNET_DVR_MANUAL_CURRICULUM_CFG { - DWORD dwSize; //ṹС - BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //ֶαUUID - BYTE byCourseName[COURSE_NAME_LEN_128]; //γ - BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; //ڿʦ + DWORD dwSize; //结构体大小 + BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //手动课表UUID + BYTE byCourseName[COURSE_NAME_LEN_128]; //课程名称 + BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; //授课老师 BYTE byCourseDescription[COURSE_DESCRIPTION_LEN /*256*/]; - BYTE byCmdType; //0-ʼ¼ 1- 2-ͣ 3-,4-ʼΣ5- - BYTE byRes[303]; //ֽ + BYTE byCmdType; //命令,0-开始录像 1-结束 2-暂停 3-继续,4-开始屏蔽,5-结束屏蔽 + BYTE byRes[303]; //保留字节 }NET_DVR_MANUAL_CURRICULUM_CFG, *LPNET_DVR_MANUAL_CURRICULUM_CFG; typedef struct tagNET_DVR_IMAGE_DIFF_DETECTION_CFG { - DWORD dwSize; //ṹС - NET_VCA_POLYGON struRegion; //Χ - BYTE byEnabled; //Ƿã0-ã1- - BYTE byThreshold; //ֵ[0,100] - BYTE bySensitivity; // [0,100] - BYTE byVideoInputType; //Ƶͣ0-Զ1-HDMI2-VGA - BYTE byRes[300]; //ֽ + DWORD dwSize; //结构体大小 + NET_VCA_POLYGON struRegion; //区域范围 + BYTE byEnabled; //是否启用,0-不启用,1-启用 + BYTE byThreshold; //阈值[0,100] + BYTE bySensitivity; //灵敏度 [0,100] + BYTE byVideoInputType; //视频输入口类型,0-自动,1-HDMI,2-VGA + BYTE byRes[300]; //保留字节 }NET_DVR_IMAGE_DIFF_DETECTION_CFG, *LPNET_DVR_IMAGE_DIFF_DETECTION_CFG; typedef struct tagNET_DVR_RECORDING_PUBLISH_FILE_COND { DWORD dwSize; DWORD dwChannel; - BYTE byFileID[MAX_ID_LEN_128/*128*/]; //ļID + BYTE byFileID[MAX_ID_LEN_128/*128*/]; //发布文件ID BYTE byRes[300]; }NET_DVR_RECORDING_PUBLISH_FILE_COND, *LPNET_DVR_RECORDING_PUBLISH_FILE_COND; typedef struct tagNET_DVR_RECORDING_PUBLISH_FILE_INFO { DWORD dwSize; - NET_DVR_TIME_V30 struStartTime; //γ̿ʼʱ - NET_DVR_TIME_V30 struEndTime; //γ̿ʼʱ + NET_DVR_TIME_V30 struStartTime; //课程开始时间 + NET_DVR_TIME_V30 struEndTime; //课程开始时间 BYTE byCourseName[COURSE_NAME_LEN_128]; BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; BYTE byCourseDescription[COURSE_DESCRIPTION_LEN /*256*/]; - BYTE byRes[300]; //ֽ + BYTE byRes[300]; //保留字节 }NET_DVR_RECORDING_PUBLISH_FILE_INFO, *LPNET_DVR_RECORDING_PUBLISH_FILE_INFO; -//Ļ +//屏幕控制 typedef struct tagNET_DVR_SCREEN_POINT { - WORD wX; //X - WORD wY; //Y + WORD wX; //X坐标 + WORD wY; //Y坐标 }NET_DVR_SCREEN_POINT,*LPNET_DVR_SCREEN_POINT; typedef struct tagNET_DVR_MOUSE_PARAM { - BYTE byMouseEvent; //¼1-£2-ɿ3-Ҽ£4-Ҽɿ - //5-ƶ6-7-˫8-Ҽ9-ְ£ - //10-ɿ11-£12- + BYTE byMouseEvent; //鼠标事件,1-鼠标左键按下,2-鼠标左键松开,3-鼠标右键按下,4-鼠标右键松开, + //5-鼠标移动,6-鼠标左键单击,7-鼠标左键双击,8-鼠标右键单击,9-滚轮按下, + //10-滚轮松开,11-滚轮向下,12-滚轮向上 BYTE byRes1[3]; - NET_DVR_SCREEN_POINT struMousePoint; //Ϣ + NET_DVR_SCREEN_POINT struMousePoint; //鼠标坐标信息 BYTE byRes2[8]; }NET_DVR_MOUSE_PARAM, *LPNET_DVR_MOUSE_PARAM; typedef struct tagNET_DVR_MARK_PARAM { - BYTE byMarkEvent; //ע¼1-ע2-ע3-±ע״̬ - BYTE byMarkTool; //עߣ0-Ч1-ʣ2-Ƥע¼Ϊ1ʱЧ - BYTE byLineWidth; //ϸ0-Ч1-ϸ2-У3-֣ע¼Ϊ1ʱЧ - BYTE byMouseEvent; //¼ע¼Ϊ1ʱЧ0-Ч1-£2-ɿ3-ƶ - NET_DVR_RGB_COLOR struColor; //עɫעΪʱЧ - NET_DVR_SCREEN_POINT struPoint; //עϢ + BYTE byMarkEvent; //标注事件,1-正常标注,2-标注结束,3-更新标注工具状态 + BYTE byMarkTool; //标注工具,0-无效,1-画笔,2-橡皮擦,标注事件为1时有效 + BYTE byLineWidth; //线条粗细,0-无效,1-细,2-中,3-粗,标注事件为1时有效 + BYTE byMouseEvent; //鼠标事件,标注事件为1时有效,0-无效,1-鼠标左键按下,2-鼠标左键松开,3-鼠标移动 + NET_DVR_RGB_COLOR struColor; //标注颜色,标注工具为画笔时有效 + NET_DVR_SCREEN_POINT struPoint; //标注坐标信息 BYTE byRes[4]; }NET_DVR_MARK_PARAM, *LPNET_DVR_MARK_PARAM; typedef struct tagNET_DVR_KEYBOARD_PARM { - DWORD dwKeyValue; //ʹASCIIеֵⰴȷ + DWORD dwKeyValue; //符号使用ASCII表中的值,特殊按键待确定 BYTE byRes[12]; }NET_DVR_KEYBOARD_PARAM, *LPNET_DVR_KEYBOARD_PARAM; typedef struct tagNET_DVR_PPT_PARAM { - BYTE byPPTAction; //PPT1-򿪷ӳ2-ֹͣӳ3-һ4-һ - //5-һҳ6-һҳ7-Xҳ8-ʿ9-ʹأ10-ƶ + BYTE byPPTAction; //PPT动作,1-打开放映,2-停止放映,3-上一个动画,4-下一个动画, + //5-上一页,6-下一页,7-跳到X页,8-激光笔开,9-激光笔关,10-激光笔移动 BYTE byRes1[3]; - NET_DVR_SCREEN_POINT struPoint; //ϢPPTΪ10ʱЧ - DWORD dwPPTNo; //PPTҳPPTΪ7ʱЧ + NET_DVR_SCREEN_POINT struPoint; //激光笔坐标信息,PPT动作为10时有效 + DWORD dwPPTNo; //PPT页码数,PPT动作为7时有效 BYTE byRes2[4]; }NET_DVR_PPT_PARAM, *LPNET_DVR_PPT_PARAM; typedef struct tagNET_DVR_REMOTE_CTRL_PARAM { - BYTE byRemoteCtrlCmd; //Զ̿1-лöڣ2-رĻǰڣ3-ļ4-رļ5-ɾļ6-ػ7-ʾ棬8- + BYTE byRemoteCtrlCmd; //远程控制命令,1-切换置顶窗口,2-关闭屏幕当前窗口,3-打开文件,4-关闭文件,5-删除文件,6-关机,7-显示桌面,8-表扬 BYTE byRes1[3]; - DWORD dwCtrlParam; //byRemoteCtrlCmdΪ345ʱʾļbyRemoteCtrlCmdΪ8ʱʾͣ0-Ч1- + DWORD dwCtrlParam; //操作参数,当byRemoteCtrlCmd为3、4、5时,表示操作的文件索引;当byRemoteCtrlCmd为8时表示表扬类型,0-无效,1-表扬 BYTE byRes2[8]; }NET_DVR_REMOTE_CTRL_PARAM, *LPNET_DVR_REMOTE_CTRL_PARAM; typedef struct tagNET_DVR_SPOTLIGHT_PARAM { - BYTE byCmd; //۹0-رվ۹ƣ1-۹ƣ2-۹λƶ + BYTE byCmd; //聚光灯命令,0-关闭聚光灯,1-开启聚光灯,2-聚光灯位置移动 BYTE byRes1[3]; - NET_DVR_SCREEN_POINT struPoint; //۹ĵ꣬۹λƶʱЧ - DWORD dwRadius; //۹ư뾶 + NET_DVR_SCREEN_POINT struPoint; //聚光灯中心点坐标,聚光灯位置移动时有效 + DWORD dwRadius; //聚光灯半径 BYTE byRes2[4]; } NET_DVR_SPOTLIGHT_PARAM, *LPNET_DVR_SPOTLIGHT_PARAM; typedef struct tagNET_DVR_TOUCHPAD_PARAM { - BYTE byMouseEvent; //¼1-£2-ɿ3-Ҽ£4-Ҽɿ - //5-ƶ6-7-˫8-Ҽ9-ְ£ - //10-ɿ11-£12- + BYTE byMouseEvent; //鼠标事件,1-鼠标左键按下,2-鼠标左键松开,3-鼠标右键按下,4-鼠标右键松开, + //5-鼠标移动,6-鼠标左键单击,7-鼠标左键双击,8-鼠标右键单击,9-滚轮按下, + //10-滚轮松开,11-滚轮向下,12-滚轮向上 BYTE byRes1[3]; - int iXDisplacement; //XλƣʾƶʾƶƶʱЧ - int iYDisplacement; //YλƣʾƶʾƶƶʱЧ + int iXDisplacement; //X轴位移,正数表示向右移动,负数表示向左移动,鼠标移动时有效 + int iYDisplacement; //Y轴位移,正数表示向上移动,负数表示向下移动,鼠标移动时有效 BYTE byRes2[4]; }NET_DVR_TOUCHPAD_PARAM, *LPNET_DVR_TOUCHPAD_PARAM; typedef struct tagNET_DVR_MEDIA_LIST_PARAM { - BYTE byOperateCmd; //1-ʾͼƬزģ2-ʾƵزģ3-ʾpptزģ4-رնýļ + BYTE byOperateCmd; //操作命令,1-显示图片素材,2-显示视频素材,3-显示ppt素材,4-关闭多媒体文件夹 BYTE byRes[15]; }NET_DVR_MEDIA_LIST_PARAM, *LPNET_DVR_MEDIA_LIST_PARAM; typedef union tagNET_DVR_SCREEN_CTRL_PARAM { - NET_DVR_MOUSE_PARAM struMouseParam; //Ϊ1ʱЧ - NET_DVR_MARK_PARAM struMarkParam; //עΪ2ʱЧ - NET_DVR_KEYBOARD_PARAM struKeyboardInfo; //̲Ϊ3ʱЧ - NET_DVR_PPT_PARAM struPPTParam; //PPTΪ4ʱЧ - NET_DVR_REMOTE_CTRL_PARAM struRemoteCtrlParam; //Զ̲Ϊ5ʱЧ - NET_DVR_SPOTLIGHT_PARAM struSpotLight; //۹ƲΪ6ʱЧ - NET_DVR_TOUCHPAD_PARAM struTouchPadParam; //Ϊ7ʱЧ - NET_DVR_MEDIA_LIST_PARAM struMediaListParam; //ýΪ8ʱЧ + NET_DVR_MOUSE_PARAM struMouseParam; //鼠标参数,命令类型为1时有效 + NET_DVR_MARK_PARAM struMarkParam; //标注参数,命令类型为2时有效 + NET_DVR_KEYBOARD_PARAM struKeyboardInfo; //键盘参数,命令类型为3时有效 + NET_DVR_PPT_PARAM struPPTParam; //PPT参数,命令类型为4时有效 + NET_DVR_REMOTE_CTRL_PARAM struRemoteCtrlParam; //远程操作参数,命令类型为5时有效 + NET_DVR_SPOTLIGHT_PARAM struSpotLight; //聚光灯参数,命令类型为6时有效 + NET_DVR_TOUCHPAD_PARAM struTouchPadParam; //触摸板参数,命令参数为7时有效 + NET_DVR_MEDIA_LIST_PARAM struMediaListParam; //多媒体参数,命令类型为8时有效 BYTE byRes[16]; }NET_DVR_SCREEN_CTRL_PARAM, *LPNET_DVR_SCREEN_CTRL_PARAM; typedef struct tagNET_DVR_SCREEN_CTRL_CMD { DWORD dwSize; - BYTE byCmdType; //ͣ1-꣬2-ע3-̣4-PPT5-Զ̲6-۹ƣ7-ذ壬8-ʾý + BYTE byCmdType; //命令类型,1-鼠标,2-标注,3-键盘,4-PPT,5-远程操作,6-聚光灯,7-触控板,8-显示多媒体材料 BYTE byRes1[3]; - NET_DVR_SCREEN_CTRL_PARAM struScreenCtrlParam; //ĻƲ + NET_DVR_SCREEN_CTRL_PARAM struScreenCtrlParam; //屏幕控制参数 }NET_DVR_SCREEN_CTRL_CMD, *LPNET_DVR_SCREEN_CTRL_CMD; typedef struct tagNET_DVR_FILE_RESPONSE_PARAM { - BYTE byFileState; //ļ״̬1-ļڣ2-ļʧܣ3-ļɹ + BYTE byFileState; //文件操作状态,1-文件不存在,2-打开文件失败,3-打开文件成功 BYTE byRes1[3]; - DWORD dwErrorFileIndex; //ļļֵ + DWORD dwErrorFileIndex; //文件操作的文件索引值 BYTE byRes2[24]; } NET_DVR_FILE_RESPONSE_PARAM, *LPNET_DVR_FILE_RESPONSE_PARAM; typedef struct tagNET_DVR_PPT_RESPONSE_PARAM { - BYTE byCurrentState; //ǰPPT״̬1 - ڷӳ2 - ӳֹͣ3 - PPTѹرգ4 - pptܱԤͼʧܣ5 - 򿪷ӳɹ6 - 򿪷ӳʧܣ7 - pptΪգ8 - ͼʧܣ9 - ͼɳɹ + BYTE byCurrentState; //当前PPT状态,1 - 正在放映,2 - 放映停止,3 - PPT已关闭,4 - ppt受保护或生产预览图失败,5 - 打开放映成功,6 - 打开放映失败,7 - ppt内容为空,8 - 缩略图生成失败,9 - 缩略图生成成功 BYTE byRes1[3]; - DWORD dwCurrentPage; //PPTҳPPT״̬Ϊ1,7,8ʱЧ - DWORD dwFileIndex; //PPTļֵ - DWORD dwTotalPageNum; //PPTҳPPT״̬Ϊ5ʱЧ + DWORD dwCurrentPage; //PPT的页数,PPT状态为1,7,8时有效 + DWORD dwFileIndex; //PPT文件索引值 + DWORD dwTotalPageNum; //PPT总页数,PPT状态为5时有效 BYTE byRes2[16]; }NET_DVR_PPT_RESPONSE_PARAM, *LPNET_DVR_PPT_RESPONSE_PARAM; typedef union tagNET_DVR_SCREEN_RESPONSE_PARAM { BYTE byRes[32]; - NET_DVR_PPT_RESPONSE_PARAM struPPTParam; //PPT - NET_DVR_FILE_RESPONSE_PARAM struFileParam; //ļӦ + NET_DVR_PPT_RESPONSE_PARAM struPPTParam; //PPT参数 + NET_DVR_FILE_RESPONSE_PARAM struFileParam; //文件操作响应参数 }NET_DVR_SCREEN_RESPONSE_PARAM,*LPNET_DVR_SCREEN_RESPONSE_PARAM; typedef struct tagNET_DVR_SCREEN_RESPONSE_CMD { DWORD dwSize; - BYTE byResponseCmd; //ĻӦͣ1-PPT2-ļ + BYTE byResponseCmd; //屏幕响应命令类型,1-PPT,2-文件操作 BYTE byRes1[3]; - NET_DVR_SCREEN_RESPONSE_PARAM struResonseParam; //ĻӦ + NET_DVR_SCREEN_RESPONSE_PARAM struResonseParam; //屏幕响应参数 BYTE byRes2[16]; }NET_DVR_SCREEN_RESPONSE_CMD, *LPNET_DVR_SCREEN_RESPONSE_CMD; typedef struct tagNET_DVR_SCREEN_FILE_COND { DWORD dwSize; - BYTE byFileType; //ļͣ1-ͼƬ2-Ƶ3-ĵ0xff-ļ + BYTE byFileType; //文件类型,1-图片,2-视频,3-文档,0xff-所有文件类型 BYTE byRes[127]; }NET_DVR_SCREEN_FILE_COND, *LPNET_DVR_SCREEN_FILE_COND; typedef struct tagNET_DVR_SCREEN_FILE_INFO { DWORD dwSize; - DWORD dwFileIndex; //ļȫΨһ - BYTE byFileType; //ļͣ1-ͼƬ2-Ƶ3-ĵ4- - BYTE byPictureFormat; //ͼƬʽļΪͼƬʱЧ1-bmp,2-jpeg,3-png,4-swf,5-gif - BYTE byVideoFormat; //ƵʽļΪƵʱЧ1-avi,2-wmv,3-mp4,4-flv,5-vod,6-mkv,7-rmvb - BYTE byDocumentFormat; //ĵʽ0-ppt1-txt2-doc3-xlsļΪ3ʱЧ - BYTE byFileName[NET_SDK_MAX_FILE_PATH]; //Ļļ - DWORD dwFileSize; //ļСλֽ - DWORD dwPPTPage; //pptҳֵȡѴ򿪵PPTļϢʱЧ - BYTE byOtherFileFormat[8]; //͵ļĸʽ.dat.dllȣļΪ4ʱЧ + DWORD dwFileIndex; //文件索引,全局唯一 + BYTE byFileType; //文件类型,1-图片,2-视频,3-文档,4-其他 + BYTE byPictureFormat; //图片格式,文件类型为图片时有效,1-bmp,2-jpeg,3-png,4-swf,5-gif + BYTE byVideoFormat; //视频格式,文件类型为视频时有效,1-avi,2-wmv,3-mp4,4-flv,5-vod,6-mkv,7-rmvb + BYTE byDocumentFormat; //文档格式,0-ppt,1-txt,2-doc,3-xls,文件类型为3时有效 + BYTE byFileName[NET_SDK_MAX_FILE_PATH]; //屏幕文件名 + DWORD dwFileSize; //文件大小,单位:字节 + DWORD dwPPTPage; //ppt页码值,仅当获取已打开的PPT文件信息时有效 + BYTE byOtherFileFormat[8]; //其他类型的文件的格式(例如.dat、.dll等),文件类型为4时有效 BYTE byRes1[56]; }NET_DVR_SCREEN_FILE_INFO, *LPNET_DVR_SCREEN_FILE_INFO; typedef struct tagNET_DVR_SCREEN_CONFIG { DWORD dwSize; - BYTE byVolume; //0-100 - BYTE byContrast; //Աȶȣ0-100 - BYTE byBrightness; //ȣ0-100 - BYTE byScreenShowEnabled; //Ļʾ0-أ0- - BYTE byScreenLocked; //Ļ0-0- - BYTE byBlackScreenEnabled; //Ļ0-ȡ0- + BYTE byVolume; //音量,0-100 + BYTE byContrast; //对比度,0-100 + BYTE byBrightness; //亮度,0-100 + BYTE byScreenShowEnabled; //开启屏幕显示,0-关,非0-开 + BYTE byScreenLocked; //锁定屏幕,0-解锁,非0-锁定 + BYTE byBlackScreenEnabled; //屏幕黑屏,0-取消黑屏,非0-黑屏 BYTE byRes[30]; }NET_DVR_SCREEN_CONFIG, *LPNET_DVR_SCREEN_CONFIG; typedef struct tagNET_DVR_SCREEM_FILE_UPLOAD_PARAM { DWORD dwSize; - BYTE byFileType; //ļͣ1-ͼƬ2-Ƶ3-ĵ4- - BYTE byPictureFormat; //ͼƬʽ1-BMP2-JPEG3-PNG4-SWF5-GIFļΪ1ʱЧ - BYTE byVideoFormat; //Ƶʽ1-AVI2-WMV3-MP44-FLV5-VOD6-MKV7-RMVBļΪ2ʱЧ - BYTE byDocumentFormat; //ĵʽ0-ppt1-txt2-doc3-xlsļΪ3ʱЧ - BYTE byFileName[NET_SDK_MAX_FILE_PATH]; //ļ - BYTE byOtherFileFormat[8]; //͵ļĸʽ.dat.dllȣļΪ4ʱЧ + BYTE byFileType; //文件类型,1-图片,2-视频,3-文档,4-其他 + BYTE byPictureFormat; //图片格式,1-BMP,2-JPEG,3-PNG,4-SWF,5-GIF,文件类型为1时有效 + BYTE byVideoFormat; //视频格式,1-AVI,2-WMV,3-MP4,4-FLV,5-VOD,6-MKV,7-RMVB,文件类型为2时有效 + BYTE byDocumentFormat; //文档格式,0-ppt,1-txt,2-doc,3-xls,文件类型为3时有效 + BYTE byFileName[NET_SDK_MAX_FILE_PATH]; //文件名称 + BYTE byOtherFileFormat[8]; //其他类型的文件的格式(例如.dat、.dll等),文件类型为4时有效 BYTE byRes1[56]; }NET_DVR_SCREEM_FILE_UPLOAD_PARAM, *LPNET_DVR_SCREEM_FILE_UPLOAD_PARAM; typedef struct tagNET_DVR_SCREEM_FILE_DOWNLOAD_PARAM { DWORD dwSize; - DWORD dwFileIndex; //ļ - DWORD dwPPTPageNo; //PPTҳͼƬʱЧΪ0ʾPPTֵʾPPTҳֵ + DWORD dwFileIndex; //文件索引 + DWORD dwPPTPageNo; //下载PPT页面图片时有效,为0表示下载PPT本身,其他值表示PPT页码值 BYTE byRes2[64]; }NET_DVR_SCREEM_FILE_DOWNLOAD_PARAM, *LPNET_DVR_SCREEM_FILE_DOWNLOAD_PARAM; typedef struct tagNET_DVR_TV_SCREEN_COND { - DWORD dwSize;//ṹ - DWORD dwChannel;//ͨ - WORD wTVScreenNo;// 0-ȫ - BYTE byRes[62]; // + DWORD dwSize;//结构长度 + DWORD dwChannel;//通道号 + WORD wTVScreenNo;//导播屏编号 0-全部导播屏 + BYTE byRes[62]; //保留 }NET_DVR_TV_SCREEN_COND, *LPNET_DVR_TV_SCREEN_COND; typedef struct tagNET_DVR_TV_SCREEN_CFG { - DWORD dwSize;//ṹ - DWORD dwPicStayTime;//ͣʱ 0~255s - BYTE byRes[256]; // + DWORD dwSize;//结构长度 + DWORD dwPicStayTime;//画面停留时间 (0~255s) + BYTE byRes[256]; //保留 }NET_DVR_TV_SCREEN_CFG, *LPNET_DVR_TV_SCREEN_CFG; -//ȡ豸ץȡͼƬ͸Ϣṹ +//获取设备抓取图片和附加信息结构体 typedef struct tagNET_DVR_BV_CALIB_COND { - DWORD dwSize; //ṹ - DWORD dwChannels; //ͨ - BYTE byRes[300]; // + DWORD dwSize; //结构长度 + DWORD dwChannels; //通道号 + BYTE byRes[300]; //保留 }NET_DVR_BV_CALIB_COND, *LPNET_DVR_BV_CALIB_COND; typedef struct tagNET_DVR_BV_CALIB_PIC { - DWORD dwSize; //ṹ + DWORD dwSize; //结构长度 DWORD dwPicID; - DWORD dwPicLen1;//ͼƬ1 - DWORD dwPicLen2;//ͼƬ2 - char* pPicBuffer1;//ͼƬ - char* pPicBuffer2;//ͼƬ - BYTE byRes[600]; // + DWORD dwPicLen1;//图片1长度 + DWORD dwPicLen2;//图片2长度 + char* pPicBuffer1;//图片缓存 + char* pPicBuffer2;//图片缓存 + BYTE byRes[600]; //保留 }NET_DVR_BV_CALIB_PIC, *LPNET_DVR_BV_CALIB_PIC; -//ȡ˫Ŀα궨 +//获取双目外参标定结果 typedef struct tagNET_DVR_BV_CALIB_PARAM { DWORD dwPicID; - NET_VCA_POINT struPoint;//ü - BYTE byRes[32]; // + NET_VCA_POINT struPoint;//眉心坐标 + BYTE byRes[32]; //保留 }NET_DVR_BV_CALIB_PARAM, *LPNET_DVR_BV_CALIB_PARAM; typedef struct tagNET_DVR_BV_CALIB_INFO { - DWORD dwSize; //ṹ - DWORD dwBVCalibNumber; // + DWORD dwSize; //结构长度 + DWORD dwBVCalibNumber; //样本个数 NET_DVR_BV_CALIB_PARAM struBVCalibParam[12]; - DWORD dwHumanHeight; //ʵߣλcm - DWORD dwChannel; //ͨ - BYTE byRes[300]; // + DWORD dwHumanHeight; //人体真实身高,单位cm + DWORD dwChannel; //通道号 + BYTE byRes[300]; //保留 }NET_DVR_BV_CALIB_INFO, *LPNET_DVR_BV_CALIB_INFO; typedef struct tagNET_DVR_BV_CALIB_RESULT { - DWORD dwSize; //ṹ - DWORD dwCameraHeight; //߶ȣλcm - float fPitchAngle; //ӽǶ[0, 60], + 360* 1000 - float fInclineAngle; //бǶ[-20,20] + 360 * 1000 - BYTE byRes[300]; // + DWORD dwSize; //结构长度 + DWORD dwCameraHeight; //摄像机高度,单位cm + float fPitchAngle; //摄像机俯视角度[0°, 60°], (浮点数 + 360)* 1000 + float fInclineAngle; //摄像机斜角度[-20°,20°],(浮点数 + 360) * 1000 + BYTE byRes[300]; //保留 }NET_DVR_BV_CALIB_RESULT, *LPNET_DVR_BV_CALIB_RESULT; -//ȡ˫Ŀ߶Ƚ +//获取双目高度矫正数据 typedef struct tagNET_DVR_BV_HCORRECTION_COND { - DWORD dwSize; //ṹ - DWORD dwChannels; //ͨ + DWORD dwSize; //结构长度 + DWORD dwChannels; //通道号 DWORD dwPicID; - BYTE byRes[300]; // + BYTE byRes[300]; //保留 }NET_DVR_BV_HCORRECTION_COND, *LPNET_DVR_BV_HCORRECTION_COND; typedef struct tagNET_DVR_BV_HCORRECTION_CFG { - DWORD dwSize; //ṹ - DWORD dwHumanHeight; //ʵߣλcm - BYTE byRes[300]; // + DWORD dwSize; //结构长度 + DWORD dwHumanHeight; //人体真实身高,单位cm + BYTE byRes[300]; //保留 }NET_DVR_BV_HCORRECTION_CFG, *LPNET_DVR_BV_HCORRECTION_CFG; -// +//语音参数配置 typedef struct tagNET_DVR_TMEVOICE_CFG { - DWORD dwSize;//ṹС - BYTE byVoiceSpeed;// 0~100 - BYTE byVoicePitch; // 0~100 - BYTE byVoiceVolum; //0~100 - BYTE byVoicePlateEnable;//ʹ ,0~رգ1~ - /*ࣻ + DWORD dwSize;//结构体大小 + BYTE byVoiceSpeed;//语速 0~100 + BYTE byVoicePitch; //语调 0~100 + BYTE byVoiceVolum; //音量0~100 + BYTE byVoicePlateEnable;//车牌语音播报使能 ,0~关闭,1~启用 + /*声音种类; 3 = Xiaoyan (female, Chinese) 51 = Jiu Xu (male, Chinese) 52 = Duo Xu (male, Chinese) @@ -49164,113 +49164,113 @@ typedef struct tagNET_DVR_TMEVOICE_CFG 54 = Donald Duck (male, Chinese) 55 = Baby Xu (child, Chinese) */ - DWORD dwVoiceRole; // - char sInfo[MAX_TMEVOICE_LEN/*64*/]; //ݣѹȦݣ - char sFileName[MAX_TMEVOICE_LEN/*64*/]; //ļ + DWORD dwVoiceRole; //声音种类 + char sInfo[MAX_TMEVOICE_LEN/*64*/]; //语音播报内容(出入口压线圈播报的语音内容) + char sFileName[MAX_TMEVOICE_LEN/*64*/]; //语音文件名 BYTE byRes[64]; }NET_DVR_TMEVOICE_CFG,*LPNET_DVR_TMEVOICE_CFG; -// +//输入板参数配置 typedef struct tagNET_DVR_INPUT_BOARD_CFG { DWORD dwSize; - DWORD dwSlotNo; //λ - BYTE byFullFrameEnable; //Ƿȫ֡ʳԣ0-1- - BYTE byRes[3]; //ֽڶ - BYTE byRes1[64]; // + DWORD dwSlotNo; //输入板槽位号 + BYTE byFullFrameEnable; //是否开启全帧率畅显,0-不开启,1-开启 + BYTE byRes[3]; //四字节对齐 + BYTE byRes1[64]; //保留 }NET_DVR_INPUT_BOARD_CFG, *LPNET_DVR_INPUT_BOARD_CFG; typedef struct tagNET_DVR_INPUT_BOARD_CFG_LIST { DWORD dwSize; - NET_DVR_INPUT_BOARD_CFG struBoardList[MAX_NUM_INPUT_BOARD]; //Ϣб + NET_DVR_INPUT_BOARD_CFG struBoardList[MAX_NUM_INPUT_BOARD]; //输入板配置信息列表 }NET_DVR_INPUT_BOARD_CFG_LIST, *LPNET_DVR_INPUT_BOARD_CFG_LIST; -/******************************ȫƵϢȫ begin******************************************/ -//ȡ豸Ϣṹ +/******************************安全防范视频布防联网信息安全 begin******************************************/ +//获取加密设备信息条件结构体 typedef struct _NET_DVR_ENCRYPT_DEVICE_COND { - DWORD dwSize; //ṹС - DWORD dwChannel; //ͨ - BYTE byAlgorithm; //㷨0-1-RSA,2-SM2 - BYTE byModelLen; //ģ0-1-1024λ,2-2048λ,3-256λ - BYTE byCERTSaveLocation; //֤鱣λã豸صѡ0-1-оƬ(ͨUSB豸),2-豸 + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + BYTE byAlgorithm; //加密算法,0-保留,1-RSA,2-SM2 + BYTE byModelLen; //模长,0-保留,1-1024位,2-2048位,3-256位 + BYTE byCERTSaveLocation; //证书保存位置,根据设备返回的能力集来选择,0-保留,1-加密芯片中(通过USB插入设备),2-设备中 BYTE byRes[29]; }NET_DVR_ENCRYPT_DEVICE_COND, *LPNET_DVR_ENCRYPT_DEVICE_COND; -//ȡ豸Ϣṹ +//获取加密设备信息结构体 typedef struct _NET_DVR_ENCRYPT_DEVICE_INFO { - DWORD dwSize; //ṹС - BYTE byAlgorithm; //㷨0-1-RSA,2-SM2 - BYTE byModelLen; //ģ0-1-1024λ,2-2048λ,3-256λ - BYTE byRes1[30]; // - DWORD dwPublicKeyLen; //Կ - char szPublicKey[MAX_PUBLIC_KEY_LEN]; //Կ - char szChipSerialNumber[CHIP_SERIALNO_LEN]; //оƬк - char szDeviceID[ENCRYPT_DEV_ID_LEN]; //豸ID + DWORD dwSize; //结构体大小 + BYTE byAlgorithm; //加密算法,0-保留,1-RSA,2-SM2 + BYTE byModelLen; //模长,0-保留,1-1024位,2-2048位,3-256位 + BYTE byRes1[30]; //保留 + DWORD dwPublicKeyLen; //公钥长度 + char szPublicKey[MAX_PUBLIC_KEY_LEN]; //公钥 + char szChipSerialNumber[CHIP_SERIALNO_LEN]; //芯片序列号 + char szDeviceID[ENCRYPT_DEV_ID_LEN]; //设备ID BYTE byRes2[128]; }NET_DVR_ENCRYPT_DEVICE_INFO, *LPNET_DVR_ENCRYPT_DEVICE_INFO; -//֤ṹ +//加密证书参数结构体 typedef struct _NET_DVR_ENCRYPT_CERT_PARAM { DWORD dwSize; - WORD wCertType; //֤ͣ0-CA֤飬1-ǩ֤,2-֤飬3- SM2Կ - BYTE byRes1[2]; // - DWORD dwCertLen; //֤鳤 + WORD wCertType; //证书类型,0-CA根证书,1-签名证书,2-加密证书,3- SM2加密密钥对 + BYTE byRes1[2]; //保留 + DWORD dwCertLen; //证书长度 BYTE byRes2[32]; - char* pCertBuf; //֤黺 + char* pCertBuf; //证书缓冲区 }NET_DVR_ENCRYPT_CERT_PARAM, *LPNET_DVR_ENCRYPT_CERT_PARAM; -/******************************ȫƵϢȫ end******************************************/ -#define MAX_RING_NAME_LEN_128 128 //Ƴ +/******************************安全防范视频布防联网信息安全 end******************************************/ +#define MAX_RING_NAME_LEN_128 128 //铃音名称长度 typedef struct tagNET_DVR_RING_UPLOAD_CFG { DWORD dwSize; - DWORD dwRingID; //ţ[1,8] - BYTE byRingName[MAX_RING_NAME_LEN_128/*128*/]; // - DWORD dwRingSize; //ļС - BYTE byRingType; //ͣ0-wav + DWORD dwRingID; //铃音序号,[1,8] + BYTE byRingName[MAX_RING_NAME_LEN_128/*128*/]; //铃音名称 + DWORD dwRingSize; //文件大小 + BYTE byRingType; //铃音类型,0-wav BYTE byRes[363]; }NET_DVR_RING_UPLOAD_CFG,*LPNET_DVR_RING_UPLOAD_CFG; typedef struct tagNET_DVR_RING_SEARCH_COND { DWORD dwSize; - DWORD dwRingID; //ţɵʽңô˲Ϊ0ʾŲ + DWORD dwRingID; //铃音序号,傻瓜式查找,不设置此参数(设为0)表示无视序号查找 BYTE byRes[300]; }NET_DVR_RING_SEARCH_COND,*LPNET_DVR_RING_SEARCH_COND; typedef struct tagNET_DVR_RING_SEARCH_CFG { DWORD dwSize; - DWORD dwRingID; //ţ[1,8] - BYTE byRingName[MAX_RING_NAME_LEN_128/*128*/]; // - DWORD dwRingSize; //ļС - BYTE byRingType; //ͣ0-wav + DWORD dwRingID; //铃音序号,[1,8] + BYTE byRingName[MAX_RING_NAME_LEN_128/*128*/]; //铃音名称 + DWORD dwRingSize; //文件大小 + BYTE byRingType; //铃音类型,0-wav BYTE byRes[303]; }NET_DVR_RING_SEARCH_CFG,*LPNET_DVR_RING_SEARCH_CFG; -// +//报警控制 typedef struct tagNET_DVR_ALARMCTRL_CFG { DWORD dwSize; - BYTE byListenPicUploadEnabled;//ͼƬϴʹ + BYTE byListenPicUploadEnabled;//监听图片上传使能 BYTE byRes [259]; }NET_DVR_ALARMCTRL_CFG,*LPNET_DVR_ALARMCTRL_CFG; typedef struct tagNET_DVR_VEHICLEFLOW_COND { DWORD dwSize; - DWORD dwChannel;//ͨ - BYTE byLane;//ţ1~6,0Ϊг + DWORD dwChannel;//通道号 + BYTE byLane;//车道号,1~6车道,0为所有车道。 BYTE byRes1[3]; - NET_DVR_TIME_V30 struStartTime;//ʼʱ - NET_DVR_TIME_V30 struEndTime;//ʱ + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 BYTE byRes[256]; }NET_DVR_VEHICLEFLOW_COND, *LPNET_DVR_VEHICLEFLOW_COND; typedef struct tagNET_DVR_VEHICLEFLOW_INFO { - DWORD dwVehicleFlowValue;//Ϊһʱڵ + DWORD dwVehicleFlowValue;//为一个时间段内的流量 BYTE byRes[64]; }NET_DVR_VEHICLEFLOW_INFO, *LPNET_DVR_VEHICLEFLOW_INFO; @@ -49281,133 +49281,133 @@ typedef struct tagNET_DVR_VEHICLEFLOW_CFG BYTE byRes[512]; }NET_DVR_VEHICLEFLOW_CFG, *LPNET_DVR_VEHICLEFLOW_CFG; -//ṹ +//条件结构体 typedef struct tagNET_DVR_IPADDR_FILTER_COND { DWORD dwSize; - DWORD dwChannel;//ͨ + DWORD dwChannel;//通道号 BYTE byRes[64]; }NET_DVR_IPADDR_FILTER_COND, *LPNET_DVR_IPADDR_FILTER_COND; typedef struct tagNET_DVR_TEMPHUMSENSOR { - DWORD dwSize;//ṹ峤 - BYTE byEnable;//ʹ 0-أ1- - BYTE byCtrlMode;//ģʽ 0-¶ֵƣ1-ʪֵƣ2-ʪֵ - BYTE byTemperatureValue;//¶ֵ0~100϶,ģʽΪ02ʱЧ - BYTE byHumidityValue;//ʪֵ0~100ģʽΪ12ʱЧ - BYTE byFanSwitch;//ȿأ0-أ1- - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) + DWORD dwSize;//结构体长度 + BYTE byEnable;//使能 0-关,1-开 + BYTE byCtrlMode;//控制模式 0-温度阈值控制,1-湿度阈值控制,2-温湿度阈值控制 + BYTE byTemperatureValue;//温度阈值,0~100摄氏度,当控制模式为0或者2时生效 + BYTE byHumidityValue;//湿度阈值,0~100,当控制模式为1或者2时生效 + BYTE byFanSwitch;//风扇开关,0-关,1-开 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K)。 BYTE byRes[62]; }NET_DVR_TEMPHUMSENSOR, *LPNET_DVR_TEMPHUMSENSOR; -//״ +//雷达测速配置 typedef struct tagNET_DVR_POSTRADARSPEED_CFG { - DWORD dwSize;//ṹС - BYTE byLaneType; //·ͣ0~δ,1~ٹ·,2~п·,0xff~· + DWORD dwSize;//结构体大小 + BYTE byLaneType; //道路类型;0~未配置,1~高速公路,2~城市快速路,0xff~其他道路 BYTE byRes1[3]; - DWORD dwInterval; //ץļλms - DWORD dwSignSpeed;//־(С)λkm/h - DWORD dwSpeedLimit;//ֵ(С)λkm/h - DWORD dwBigCarSignSpeed;//־()λkm/h - DWORD dwBigCarSpeedLimit;//ֵ󳵣λkm/h - DWORD dwLowSpeedLimit;// С޵٣λkm/h - DWORD dwBigCarLowSpeedLimit;// ޵٣λkm/h - BYTE byCheckPostEnabled; //ÿץ - BYTE byOverSpeedEnabled; //óץ + DWORD dwInterval; //超速抓拍间隔,单位:ms + DWORD dwSignSpeed;//标志限速(小车),单位km/h + DWORD dwSpeedLimit;//限速值(小车),单位km/h + DWORD dwBigCarSignSpeed;//标志限速(大车),单位km/h + DWORD dwBigCarSpeedLimit;//限速值(大车),单位km/h + DWORD dwLowSpeedLimit;// 小车限低速,单位km/h + DWORD dwBigCarLowSpeedLimit;// 大车限低速,单位km/h + BYTE byCheckPostEnabled; //启用卡口抓拍 + BYTE byOverSpeedEnabled; //启用超速抓拍 BYTE byRes[246]; }NET_DVR_POSTRADARSPEED_CFG, *LPNET_DVR_POSTRADARSPEED_CFG; -//״ +//雷达参数配置 typedef struct tagNET_DVR_POSTRADARPARAM_CFG { - DWORD dwSize;//ṹС - BYTE bySoftWareVersion[32];//汾 ֻ - BYTE byID; //ں - BYTE byWorkMode; //ģʽ0~,1~ͷ,2~β,3~Ѳ߳β,4~˫,0xff~ - BYTE bySpeedType; //ٶȸʽ0~ֽ,1~˫ֽ,2~ֽ,0xff~ - BYTE byDirectionFilter; //ˣ0~,1~,2~ȥ - DWORD dwAngleCorrect;//Ƕ[0,70] - DWORD dwSensitivity;// [11,240] - DWORD dwSpeedLowLimit;// [1,150km/h] - DWORD dwTrigDistance;// [0,40m] + DWORD dwSize;//结构体大小 + BYTE bySoftWareVersion[32];//软件版本号 只读参数 + BYTE byID; //串口号 + BYTE byWorkMode; //工作模式,0~持续,1~触头,2~触尾,3~巡逻车触尾,4~双触,0xff~其他 + BYTE bySpeedType; //速度格式,0~单字节,1~双字节,2~四字节,0xff~其他 + BYTE byDirectionFilter; //方向过滤,0~不过滤,1~输出来向,2~输出去向 + DWORD dwAngleCorrect;//角度修正[0,70] + DWORD dwSensitivity;// 灵敏度[11,240] + DWORD dwSpeedLowLimit;// 测速下限[1,150km/h] + DWORD dwTrigDistance;// 触发距离[0,40m] BYTE byRes[256]; }NET_DVR_POSTRADARPARAM_CFG, *LPNET_DVR_POSTRADARPARAM_CFG; typedef struct tagNET_DVR_CLOUD_URL_COND { DWORD dwSize; - BYTE byType; //0-1- OneDrive 2-GoogleDrive 3-DropBox + BYTE byType; //云类型0-保留,1- OneDrive 2-GoogleDrive 3-DropBox BYTE byRes[63]; }NET_DVR_CLOUD_URL_COND, *LPNET_DVR_CLOUD_URL_COND; typedef struct tagNET_DVR_CLOUD_URL { DWORD dwSize; - char szURL[256]; //ƴ洢URL + char szURL[256]; //云存储URL BYTE byRes[256]; }NET_DVR_CLOUD_URL, *LPNET_DVR_CLOUD_URL; typedef struct tagNET_DVR_CLOUD_CFG { DWORD dwSize; - BYTE byEnable; //0-1- - BYTE byType; //0-1- OneDrive 2-GoogleDrive 3-DropBox - BYTE byStatus; //״ֻ̬ 0- 1- 2- + BYTE byEnable; //0-不开启,1-开启 + BYTE byType; //云类型0-保留,1- OneDrive 2-GoogleDrive 3-DropBox + BYTE byStatus; //状态,只读 0-保留 1-在线 2-不在线 BYTE byRes1; - char szAuthCode[CODE_LEN]; //Ȩ - char szAlias[ALIAS_LEN]; //ֻ - INT64 i64TotalCapability; //ֻλMB - INT64 i64UsedSpace; //ֻλMB + char szAuthCode[CODE_LEN]; //授权码 + char szAlias[ALIAS_LEN]; //别名,只读 + INT64 i64TotalCapability; //总容量,只读,单位:MB + INT64 i64UsedSpace; //已用容量,只读,单位:MB BYTE byRes2[256]; }NET_DVR_CLOUD_CFG, *LPNET_DVR_CLOUD_CFG; typedef struct tagNET_DVR_CLOUD_UPLOADSTRATEGY_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - BYTE byRes[254]; //ΪʹID + DWORD dwChannel; //通道号 + BYTE byRes[254]; //为将来使用流ID做保留 }NET_DVR_CLOUD_UPLOADSTRATEGY_COND, *LPNET_DVR_CLOUD_UPLOADSTRATEGY_COND; typedef struct tagNET_DVR_CLOUD_UPLOADSTRATEGY { DWORD dwSize; - BYTE byStrategyType; //0-壬1-¼2-ͼƬ + BYTE byStrategyType; //策略类型0-无意义,1-录像,2-图片 BYTE byRes1[3]; - DWORD dwRecordType; //byStrategyType Ϊ1ʱЧλʾ - /*0x00: */ - /*0x01: ȫ¼*/ - /*0x02: ƶ*/ - /*0x04: ź*/ - /*0x08: */ + DWORD dwRecordType; //策略类型byStrategyType 为1时有效,按位表示 + /*0x00: 无意义*/ + /*0x01: 全部事件*/ + /*0x02: 移动侦测*/ + /*0x04: 信号量报警类型*/ + /*0x08: 智能类型*/ BYTE byRes[256]; }NET_DVR_CLOUD_UPLOADSTRATEGY, *LPNET_DVR_CLOUD_UPLOADSTRATEGY; -//¼Լ +//录像完整性检查条件参数 typedef struct tagNET_DVR_RECORD_CHECK_COND { DWORD dwSize; NET_DVR_STREAM_INFO struStreamInfo; - BYTE byCheckType; //ⷽʽ,0--¼Ƿ,1--¼Ƿ&ȱʧ¼ֹʱ + BYTE byCheckType; //检测方式,0--录像是否完整,1--录像是否完整&缺失录像的起止时间 BYTE byRes1[3]; - NET_DVR_TIME_EX struBeginTime; //¼Ŀʼʱ - NET_DVR_TIME_EX struEndTime; //¼Ľʱ + NET_DVR_TIME_EX struBeginTime; //检测录像的开始时间 + NET_DVR_TIME_EX struEndTime; //检测录像的结束时间 BYTE byRes[128]; }NET_DVR_RECORD_CHECK_COND, *LPNET_DVR_RECORD_CHECK_COND; -//¼Լ +//录像完整性检查结果 typedef struct tagNET_DVR_RECORD_CHECK_RET { DWORD dwSize; - BYTE byRecordNotComplete; //¼Ƿ0--,1-- + BYTE byRecordNotComplete; //录像是否完整,0--完整,1--不完整 BYTE byRes1[3]; - NET_DVR_TIME_EX struBeginTime; //ȱʧ¼Ŀʼʱ䣬byCheckTypebyRecordNotCompleteֵΪ1ʱЧ - NET_DVR_TIME_EX struEndTime; //ȱʧ¼Ľʱ䣬byCheckTypebyRecordNotCompleteֵΪ1ʱЧ + NET_DVR_TIME_EX struBeginTime; //缺失录像的开始时间,byCheckType、byRecordNotComplete值都为1时有效 + NET_DVR_TIME_EX struEndTime; //缺失录像的结束时间,byCheckType、byRecordNotComplete值都为1时有效 BYTE byRes[128]; }NET_DVR_RECORD_CHECK_RET, *LPNET_DVR_RECORD_CHECK_RET; -//ֶش +//添加手动回传任务条件 typedef struct tagNET_DVR_ADD_RECORD_PASSBACK_MANUAL_COND { DWORD dwSize; @@ -49415,393 +49415,393 @@ typedef struct tagNET_DVR_ADD_RECORD_PASSBACK_MANUAL_COND BYTE byRes[128]; }NET_DVR_ADD_RECORD_PASSBACK_MANUAL_COND, *LPNET_DVR_ADD_RECORD_PASSBACK_MANUAL_COND; -//ֶش +//添加手动回传任务参数 typedef struct tagNET_DVR_ADD_RECORD_PASSBACK_MANUAL_CFG { DWORD dwSize; - NET_DVR_TIME_EX struBeginTime; //ش¼ʼʱ - NET_DVR_TIME_EX struEndTime; //ش¼ʱ - BYTE byISO8601; //Ƿ8601ʱʽʱֶǷЧ0-ʱЧʱΪ豸ʱ 1-ʱЧ - char cStartTimeDifferenceH; //ʼʱUTCʱСʱ-12 ... +14 ʾʱbyISO8601Ϊ1ʱЧ - char cStartTimeDifferenceM; //ʼʱUTCʱӣ-30, 0, 30, 45ʾʱbyISO8601Ϊ1ʱЧ - char cStopTimeDifferenceH; //ʱUTCʱСʱ-12 ... +14ʾʱbyISO8601Ϊ1ʱЧ - char cStopTimeDifferenceM; //ʱUTCʱӣ-30, 0, 30, 45ʾʱbyISO8601Ϊ1ʱЧ + NET_DVR_TIME_EX struBeginTime; //回传的录像开始时间 + NET_DVR_TIME_EX struEndTime; //回传的录像结束时间 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区,byISO8601为1时有效 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区,byISO8601为1时有效 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区,byISO8601为1时有效 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区,byISO8601为1时有效 BYTE byRes[123]; }NET_DVR_ADD_RECORD_PASSBACK_MANUAL_CFG, *LPNET_DVR_ADD_RECORD_PASSBACK_MANUAL_CFG; -//ش +//回传任务参数 typedef struct tagNET_DVR_RECORD_PASSBACK_TASK_CFG { DWORD dwSize; - DWORD dwTaskID; //ID + DWORD dwTaskID; //任务ID BYTE byRes[160]; }NET_DVR_RECORD_PASSBACK_TASK_CFG, *LPNET_DVR_RECORD_PASSBACK_TASK_CFG; -//ȡֶش +//获取所有手动回传任务条件参数 typedef struct tagNET_DVR_RECORD_PASSBACK_MANUAL_COND { DWORD dwSize; - BYTE byType; //ȡʽ,0--ȡȫʣ1--IDȡʣ, 2--ȡȫ3--IDȡ4IDȡ - BYTE byTimeSegmentQuety; //Ƿʱ䷶Χѯ0-ã1- - BYTE byRes1[2]; // - NET_DVR_STREAM_INFO struStreamInfo; //idϢ72ֽڣIDȡʣʱЧ - NET_DVR_TIME_EX struBeginTime; //ѯʼʱ䣬byTimeSegmentQuetyʱЧ - NET_DVR_TIME_EX struEndTime; //ѯʱ䣬byTimeSegmentQuetyʱЧ - DWORD dwTaskID; //ID, byType4ʱЧ - BYTE byRes[108]; // + BYTE byType; //获取方式,0--获取全部剩余任务,1--根据流ID获取剩余任务, 2--获取全部任务,3--根据流ID获取任务,4—根据任务ID获取任务 + BYTE byTimeSegmentQuety; //是否启用时间范围查询,0-不启用,1-启用 + BYTE byRes1[2]; //保留 + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节),根据流ID获取剩余任务时有效 + NET_DVR_TIME_EX struBeginTime; //查询开始时间,byTimeSegmentQuety启用时有效 + NET_DVR_TIME_EX struEndTime; //查询结束时间,byTimeSegmentQuety启用时有效 + DWORD dwTaskID; //任务ID, byType等于4时有效 + BYTE byRes[108]; //保留 }NET_DVR_RECORD_PASSBACK_MANUAL_COND, *LPNET_DVR_RECORD_PASSBACK_MANUAL_COND; -//ȡֶش +//获取所有手动回传任务参数 typedef struct tagNET_DVR_RECORD_PASSBACK_MANUAL_TASK_RET { DWORD dwSize; - NET_DVR_STREAM_INFO struStreamInfo; //idϢ72ֽڣIDȡʣʱЧ - DWORD dwTaskID; //ID - NET_DVR_TIME_EX struStartTime; //ش¼ʼʱ - NET_DVR_TIME_EX struStopTime; //ش¼ʱ - BYTE byTaskStatus; //״̬0--δִУ1--ͣУ2--ִ, 3--ش, 4--شʧ, 5--ִгɹֻش˲¼, 6--ִгɹǰ¼ + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节),根据流ID获取剩余任务时有效 + DWORD dwTaskID; //任务ID + NET_DVR_TIME_EX struStartTime; //回传的录像开始时间 + NET_DVR_TIME_EX struStopTime; //回传的录像结束时间 + BYTE byTaskStatus; //任务状态,0--未执行,1--暂停中,2--已执行, 3--回传中, 4--回传失败, 5--执行成功,但只回传了部分录像, 6--执行成功,但前端无录像 BYTE byRes1[3]; - NET_DVR_TIME_EX struExecuteStartTime;//ʵִпʼʱ䣬byTaskStatusΪ12Ч - NET_DVR_TIME_EX struExecuteStopTime;//ʵִнʱ䣬byTaskStatusΪ2Ч - BYTE byRes[128]; // + NET_DVR_TIME_EX struExecuteStartTime;//任务实际执行开始时间,byTaskStatus为1和2有效 + NET_DVR_TIME_EX struExecuteStopTime;//任务实际执行结束时间,byTaskStatus为2有效 + BYTE byRes[128]; //保留 }NET_DVR_RECORD_PASSBACK_MANUAL_TASK_RET, *LPNET_DVR_RECORD_PASSBACK_MANUAL_TASK_RET; -//ֶش +//控制手动回传任务参数 typedef struct tagNET_DVR_RECORD_PASSBACK_MANUAL_CTRL { DWORD dwSize; - BYTE byControlType; //Ʒʽ,0--ֶͣ1--ֶָ - BYTE byRes[131]; // + BYTE byControlType; //控制方式,0--暂停所有手动任务,1--恢复所有手动任务 + BYTE byRes[131]; //保留 }NET_DVR_RECORD_PASSBACK_MANUAL_CTRL, *LPNET_DVR_RECORD_PASSBACK_MANUAL_CTRL; -//ɾֶش +//删除手动回传任务条件 typedef struct tagNET_DVR_DEL_RECORD_PASSBACK_MANUAL_COND { DWORD dwSize; - BYTE byDelType; //ɾʽ,0--IDɾ1--IDɾ2--ɾȫ - BYTE byRes[131]; // + BYTE byDelType; //删除方式,0--根据任务ID删除,1--根据流ID删除任务,2--删除全部任务 + BYTE byRes[131]; //保留 }NET_DVR_DEL_RECORD_PASSBACK_MANUAL_COND, *LPNET_DVR_DEL_RECORD_PASSBACK_MANUAL_COND; -//ɾֶش +//删除手动回传任务参数 typedef struct tagNET_DVR_DEL_RECORD_PASSBACK_MANUAL_CFG { DWORD dwSize; - DWORD dwTaskID; //ֶشIDIDɾʱЧ - NET_DVR_STREAM_INFO struStreamInfo; //idϢ72ֽڣIDɾʱЧ - BYTE byRes[128]; // + DWORD dwTaskID; //手动回传任务ID,根据任务ID删除任务时有效 + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节),根据流ID删除任务时有效 + BYTE byRes[128]; //保留 }NET_DVR_DEL_RECORD_PASSBACK_MANUAL_CFG, *LPNET_DVR_DEL_RECORD_PASSBACK_MANUAL_CFG; typedef struct tagNET_DVR_PASSBACK_DAY { - BYTE byAllDay; //Ƿȫش - BYTE byRes[3]; // + BYTE byAllDay; //是否启用全天回传 + BYTE byRes[3]; //保留 }NET_DVR_PASSBACK_DAY, *LPNET_DVR_PASSBACK_DAY; typedef struct tagNET_DVR_PASSBACK_SCHED { - NET_DVR_SCHEDTIME struPassBackTime; //شʱΣʼʱ-ʱ - BYTE byRes[4]; // + NET_DVR_SCHEDTIME struPassBackTime; //回传任务时间段,开始时间-结束时间 + BYTE byRes[4]; //保留 }NET_DVR_PASSBACK_SCHED, *LPNET_DVR_PASSBACK_SCHED; -//¼شƻ +//录像回传计划参数 typedef struct tagNET_DVR_RECORD_PASSBACK_SCH_CFG_ { DWORD dwSize; - BYTE byEnable; //Ƿã0--ã1-- - BYTE byPassBackWeek; //Ƿܻش0--1--ǣֵΪ1ʱstruPassBackDaystruPassBackSchedЧ - BYTE byRes1[2]; // - NET_DVR_PASSBACK_DAY struPassBackDay[MAX_DAYS]; //ȫشƻ - NET_DVR_PASSBACK_SCHED struPassBackSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //ʱλشƻ - BYTE byRes[128]; // + BYTE byEnable; //是否启用,0--不启用,1--启用 + BYTE byPassBackWeek; //是否按周回传,0--否,1--是,值为1时struPassBackDay、struPassBackSched无效 + BYTE byRes1[2]; //保留 + NET_DVR_PASSBACK_DAY struPassBackDay[MAX_DAYS]; //全天回传计划 + NET_DVR_PASSBACK_SCHED struPassBackSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //时间段回传计划 + BYTE byRes[128]; //保留 }NET_DVR_RECORD_PASSBACK_SCH_CFG, *LPNET_DVR_RECORD_PASSBACK_SCH_CFG; -//شʷ¼ƻ +//回传历史录像计划参数 typedef struct tagNET_DVR_RECORD_PASSBACK_HISTORY_PLAN_CFG_ { - DWORD dwSize; //汾ͷ - BYTE byEnable; //Ƿã0--ã1-- - BYTE byRes1[3]; // - NET_DVR_PASSBACK_DAY struPassBackDay[MAX_DAYS]; //ȫشƻ - NET_DVR_PASSBACK_SCHED struPassBackSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //ʱλشƻ - BYTE byRes[256]; // + DWORD dwSize; //版本头 + BYTE byEnable; //是否启用,0--不启用,1--启用 + BYTE byRes1[3]; //保留 + NET_DVR_PASSBACK_DAY struPassBackDay[MAX_DAYS]; //全天回传计划 + NET_DVR_PASSBACK_SCHED struPassBackSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //时间段回传计划 + BYTE byRes[256]; //保留 }NET_DVR_RECORD_PASSBACK_HISTORY_PLAN_CFG, *LPNET_DVR_RECORD_PASSBACK_HISTORY_PLAN_CFG; -//¼ +//录像卷参数 typedef struct tagNET_DVR_DEV_STORAGE_CFG { DWORD dwSize; - DWORD dwCapacityTotal; //豸洢(CVRʾ¼)(ֻ)λMB - DWORD dwFreeSpaceTotal; //豸洢(CVRʾ¼)ʣܿռ(ֻ)λMB - DWORD dwLockedRecordSpace; //豸Ѽ¼洢(CVRʾ¼)(ֻ)λMB - DWORD dwUnLockedSpace; //豸δ洢(CVRʾ¼)(ֻ),δ¼ʣ洢ռ䣬λMB - BYTE byRes[512]; // + DWORD dwCapacityTotal; //设备存储(CVR表示录像卷)总容量(只读),单位MB + DWORD dwFreeSpaceTotal; //设备存储(CVR表示录像卷)剩余总空间(只读),单位MB + DWORD dwLockedRecordSpace; //设备已加锁录像存储(CVR表示录像卷)总容量(只读),单位MB + DWORD dwUnLockedSpace; //设备未加锁存储(CVR表示录像卷)总容量(只读),包含未加锁录像和剩余存储空间,单位MB + BYTE byRes[512]; //保留 }NET_DVR_DEV_STORAGE_CFG, *LPNET_DVR_DEV_STORAGE_CFG; -//һCVRV50 +//一键配置CVR(V50) typedef struct tagNET_DVR_ONE_KEY_CFG_V50 { - DWORD dwSize;//ṹС - BYTE byRaidType; //RAIDͣ0-raid5,1-raid6,2-raid95Vraid,3-ģʽraid - BYTE bySpareRaidProportion; //ọ̇̄raidУı,0--0:1,1--1:1,2--1:2,3--1:3,4--1:4,5--1:5,6--1:6,7--6:1,8--5:1,9--4:1,10--3:1,11--2:1 - BYTE byPicQuota; //ͼƬΧ0~100 + DWORD dwSize;//结构体大小 + BYTE byRaidType; //RAID类型:0-raid5,1-raid6,2-raid95(Vraid),3-单盘模式,即不创建raid + BYTE bySpareRaidProportion; //热备盘:raid(阵列)的比例,0--(0:1),1--(1:1),2--(1:2),3--(1:3),4--(1:4),5--(1:5),6--(1:6),7--(6:1),8--(5:1),9--(4:1),10--(3:1),11--(2:1) + BYTE byPicQuota; //图片卷比例:范围0~100 BYTE byRes[257]; }NET_DVR_ONE_KEY_CFG_V50, *LPNET_DVR_ONE_KEY_CFG_V50; typedef struct tagNET_DVR_ONE_KEY_RESULT_V51 { - DWORD dwState; //״ֵ̬ע״ֵ̬ - BYTE byProgress; //ȣ0~100 + DWORD dwState; //状态值,详见备注的状态值 + BYTE byProgress; //操作进度,0~100 BYTE byRes[259]; }NET_DVR_ONE_KEY_RESULT_V51, *LPNET_DVR_ONE_KEY_RESULT_V51; typedef struct tagNET_DVR_ONE_KEY_CFG_SAN_V50 { - DWORD dwSize;//ṹС - BYTE byRaidType; //RAIDͣ0-raid5,1-raid6 - BYTE bySpareRaidProportion; //ọ̇̄raidУı,0--0:1,1--1:1,2--1:2,3--1:3,4--1:4,5--1:5,6--1:6,7--6:1,8--5:1,9--4:1,10--3:1,11--2:1 + DWORD dwSize;//结构体大小 + BYTE byRaidType; //RAID类型:0-raid5,1-raid6 + BYTE bySpareRaidProportion; //热备盘:raid(阵列)的比例,0--(0:1),1--(1:1),2--(1:2),3--(1:3),4--(1:4),5--(1:5),6--(1:6),7--(6:1),8--(5:1),9--(4:1),10--(3:1),11--(2:1) BYTE byRes[254]; }NET_DVR_ONE_KEY_CFG_SAN_V50, *LPNET_DVR_ONE_KEY_CFG_SAN_V50; typedef struct tagNET_DVR_REC_PASSBACK_BASIC_CFG { - DWORD dwSize;//ṹС - DWORD dwStartTime; //ⴰڿʼʱ䣨λӣ - DWORD dwStopTime; //ⴰڽʱ䣨λӣ - WORD wMaxTotalConcurrenceNum; //ش·,ԵDZ·ǻش - WORD wMaxDvrConcurrenceNum; //̨DVRشͨ - DWORD dwSyncSpeed; //شʣλMbpsΪ12Mbps - DWORD dwRecordType; //¼: 0xffffffffȫ0ʱ1-ƶ,20xff- + DWORD dwSize;//结构体大小 + DWORD dwStartTime; //检测窗口开始时间(单位:分钟) + DWORD dwStopTime; //检测窗口结束时间(单位:分钟) + WORD wMaxTotalConcurrenceNum; //并发回传路数上限,针对的是编码器路数,不是回传任务条数 + WORD wMaxDvrConcurrenceNum; //单台DVR并发回传通道数上限 + DWORD dwSyncSpeed; //回传速率(单位Mbps,上限为12Mbps) + DWORD dwRecordType; //录像类型: 0xffffffff-全部,0-定时,1-移动侦测,2-报警,0xff-其他 BYTE byRes[248]; }NET_DVR_REC_PASSBACK_BASIC_CFG, *LPNET_DVR_REC_PASSBACK_BASIC_CFG; -//豸ӵû +//设备连接的用户参数 typedef struct tagNET_DVR_ONLINE_USER_INFO_ { DWORD dwSize; - WORD wOnlineUserCount; //¼豸û - BYTE byRes[514]; // + WORD wOnlineUserCount; //登录设备的用户数 + BYTE byRes[514]; //保留 }NET_DVR_ONLINE_USER_INFO, *LPNET_DVR_ONLINE_USER_INFO; -//ѯ¼ܴС +//查询录像总大小条件参数 typedef struct tagNET_DVR_RECORD_SEGMENT_COND_ { DWORD dwSize; NET_DVR_STREAM_INFO struStreanInfo; - NET_DVR_TIME_EX struStartTime; //ʼʱ - NET_DVR_TIME_EX struStopTime; //ʱ - BYTE byRes[256]; // + NET_DVR_TIME_EX struStartTime; //开始时间 + NET_DVR_TIME_EX struStopTime; //结束时间 + BYTE byRes[256]; //保留 }NET_DVR_RECORD_SEGMENT_COND, *LPNET_DVR_RECORD_SEGMENT_COND; -//ѯ¼ܴСز +//查询录像总大小返回参数 typedef struct tagNET_DVR_RECORD_SEGMENT_RET_ { DWORD dwSize; - DWORD dwRecordTotalSize; //¼ܴСλMB - BYTE byRes[256]; // + DWORD dwRecordTotalSize; //录像总大小,单位MB + BYTE byRes[256]; //保留 }NET_DVR_RECORD_SEGMENT_RET, *LPNET_DVR_RECORD_SEGMENT_RET; typedef struct tagNET_DVR_ACCESSORY_CARD_INFO { DWORD dwSize; - BYTE szAccessoryCardInfo[MAX_ACCESSORY_CARD/*256*/];//(ܰƴذ)ͺϢ + BYTE szAccessoryCardInfo[MAX_ACCESSORY_CARD/*256*/];//配件板(智能板和拼控板)型号信息 BYTE byRes[512]; }NET_DVR_ACCESSORY_CARD_INFO, *LPNET_DVR_ACCESSORY_CARD_INFO; -//ѯϢṹ +//查询信息条件结构体 typedef struct tagNET_DVR_SEARCH_INFO_COND { DWORD dwSize; - BYTE byCommand; //ѯ0-ˣ1- + BYTE byCommand; //查询条件,0-个人,1-所有 BYTE byRes1[3]; - DWORD dwEmployeeNo; //ţѯΪ0-ʱЧ - BYTE byName[NAME_LEN]; //ѯΪ0-ʱЧ - NET_DVR_TIME_V30 struStartTime; //ʼʱ - NET_DVR_TIME_V30 struEndTime; //ʱ - BYTE byRes[128]; // + DWORD dwEmployeeNo; //工号(查询条件配置为0-个人时有效) + BYTE byName[NAME_LEN]; //姓名(查询条件配置为0-个人时有效) + NET_DVR_TIME_V30 struStartTime; //开始时间 + NET_DVR_TIME_V30 struEndTime; //结束时间 + BYTE byRes[128]; //保留 }NET_DVR_SEARCH_INFO_COND, *LPNET_DVR_SEARCH_INFO_COND; -//ȡŰϢ +//获取排班信息 typedef struct tagNET_DVR_SCHEDULE_CHOICE { - BYTE byScheduleType; //ͣ0-Űࡢ1-ͨࡢ2-ʱ - BYTE byScheduleNo; //α - BYTE byRes[14]; // + BYTE byScheduleType; //班次类型,0-不排班、1-普通班、2-工时班 + BYTE byScheduleNo; //班次编号 + BYTE byRes[14]; //保留 }NET_DVR_SCHEDULE_CHOICE, *LPNET_DVR_SCHEDULE_CHOICE; // B20 V1.5 typedef struct tagNET_DVR_DISPINPUT_CFG { DWORD dwSize; - DWORD dwDispInputNo; //ʾ - DWORD dwEDIDFileNo; //EDIDļ + DWORD dwDispInputNo; //显示输入号 + DWORD dwEDIDFileNo; //关联的EDID文件编号 BYTE byRes[32]; }NET_DVR_DISPINPUT_CFG, *LPNET_DVR_DISPINPUT_CFG; -//Űƻṹ +//排班计划结构体 typedef struct tagNET_DVR_SCHEDULE_PLAN { DWORD dwSize; - BYTE bySchedulePlanNo; //Űƻ,ʼΧ - BYTE bySchedulePlanType; //Űƻͣ0-ˡ1- - BYTE byEnable; //ʹ + BYTE bySchedulePlanNo; //排班计划编号,起始范围根据能力集返回 + BYTE bySchedulePlanType; //排班计划类型,0-个人、1-部门 + BYTE byEnable; //使能 BYTE byRes1; - NET_DVR_SCHEDULE_CHOICE struScheduleChoice[DAYS_A_WEEK]; //ѡ - NET_DVR_TIME_V30 struStartTime; //ʼʱ - NET_DVR_TIME_V30 struEndTime; //ʱ - BYTE byHolidayNo; // - BYTE byRes[63]; // + NET_DVR_SCHEDULE_CHOICE struScheduleChoice[DAYS_A_WEEK]; //班次选择 + NET_DVR_TIME_V30 struStartTime; //开始时间 + NET_DVR_TIME_V30 struEndTime; //结束时间 + BYTE byHolidayNo; //假日组编号 + BYTE byRes[63]; //保留 }NET_DVR_SCHEDULE_PLAN, *LPNET_DVR_SCHEDULE_PLAN; typedef struct tagNET_DVR_DISPINPUT_CFG_LIST { DWORD dwSize; - DWORD dwDispInputNum; //صNET_DVR_DISPINPUT_CFGṹĸ - LPNET_DVR_DISPINPUT_CFG lpstruBuffer; //ָ - DWORD dwBufferSize; //С + DWORD dwDispInputNum; //返回的NET_DVR_DISPINPUT_CFG结构的个数 + LPNET_DVR_DISPINPUT_CFG lpstruBuffer; //缓冲区指针 + DWORD dwBufferSize; //缓冲区大小 BYTE byRes[32]; }NET_DVR_DISPINPUT_CFG_LIST, *LPNET_DVR_DISPINPUT_CFG_LIST; -//ȡŰϢ +//获取排班信息 typedef struct tagNET_DVR_SCHEDULE_INFO_CFG { DWORD dwSize; - DWORD dwEmployeeNo; // - BYTE byName[NAME_LEN]; // - BYTE byDepartmentName[NAME_LEN]; // - NET_DVR_SCHEDULE_PLAN struSchedulePlan; //Űƻ - BYTE byRes[128]; // + DWORD dwEmployeeNo; //工号 + BYTE byName[NAME_LEN]; //姓名 + BYTE byDepartmentName[NAME_LEN]; //部门名称 + NET_DVR_SCHEDULE_PLAN struSchedulePlan; //排班计划 + BYTE byRes[128]; //保留 }NET_DVR_SCHEDULE_INFO_CFG, *LPNET_DVR_SCHEDULE_INFO_CFG; -//ȡڻϢ +//获取考勤汇总信息 typedef struct tagNET_DVR_ATTENDANCE_SUMMARY_CFG { DWORD dwSize; - DWORD dwEmployeeNo; // - BYTE byName[NAME_LEN]; // - BYTE byDepartmentName[NAME_LEN]; // - DWORD dwWorkStandard; //׼ʱ䣨ӣ - DWORD dwWorkActual; //ʵʹʱ䣨ӣ - DWORD dwLateTimes; //ٵ - DWORD dwLateMinutes;//ٵۼʱ䣨ӣ - DWORD dwLeaveEarlyTimes; //˴ - DWORD dwLeaveEarlyMinutes; //ۼʱ䣨ӣ - DWORD dwOvertimeStandard; //׼Ӱʱ䣨ӣ - DWORD dwOvertimeActual; //ʵʼӰʱ䣨ӣ - DWORD dwAttendanceStandard; //׼죩 - DWORD dwAttendanceActual; //ʵʳ죩 - DWORD dwAbsentDays; //죩 - BYTE byRes[128]; // + DWORD dwEmployeeNo; //工号 + BYTE byName[NAME_LEN]; //姓名 + BYTE byDepartmentName[NAME_LEN]; //部门名称 + DWORD dwWorkStandard; //标准工作时间(分钟) + DWORD dwWorkActual; //实际工作时间(分钟) + DWORD dwLateTimes; //迟到次数 + DWORD dwLateMinutes;//迟到累计时间(分钟) + DWORD dwLeaveEarlyTimes; //早退次数 + DWORD dwLeaveEarlyMinutes; //早退累计时间(分钟) + DWORD dwOvertimeStandard; //标准加班时间(分钟) + DWORD dwOvertimeActual; //实际加班时间(分钟) + DWORD dwAttendanceStandard; //标准出勤天数(天) + DWORD dwAttendanceActual; //实际出勤天数(天) + DWORD dwAbsentDays; //旷工天数(天) + BYTE byRes[128]; //保留 }NET_DVR_ATTENDANCE_SUMMARY_CFG, *LPNET_DVR_ATTENDANCE_SUMMARY_CFG; -//ȡڼ¼Ϣ +//获取考勤记录信息 typedef struct tagNET_DVR_ATTENDANCE_RECORD_CFG { DWORD dwSize; - DWORD dwEmployeeNo; // - BYTE byName[NAME_LEN]; // - BYTE byDepartmentName[NAME_LEN]; // - NET_DVR_TIME_V30 struAttendanceTime; //ʱ - BYTE byRes[128]; // + DWORD dwEmployeeNo; //工号 + BYTE byName[NAME_LEN]; //姓名 + BYTE byDepartmentName[NAME_LEN]; //部门名称 + NET_DVR_TIME_V30 struAttendanceTime; //考勤时间 + BYTE byRes[128]; //保留 }NET_DVR_ATTENDANCE_RECORD_CFG, *LPNET_DVR_ATTENDANCE_RECORD_CFG; -//ʱϢ +//考勤时间段信息 typedef struct tagNET_DVR_ATTENDANCE_TIME { - NET_DVR_TIME_V30 struOnDutyTime; //ϰʱ - NET_DVR_TIME_V30 struOffDutyTime; //°ʱ + NET_DVR_TIME_V30 struOnDutyTime; //上班时间 + NET_DVR_TIME_V30 struOffDutyTime; //下班时间 }NET_DVR_ATTENDANCE_TIME, *LPNET_DVR_ATTENDANCE_TIME; -//ȡ쳣ͳϢ +//获取异常统计信息 typedef struct tagNET_DVR_ABNORMAL_CFG { DWORD dwSize; - DWORD dwEmployeeNo; // - BYTE byName[NAME_LEN]; // - BYTE byDepartmentName[NAME_LEN]; // - NET_DVR_ATTENDANCE_TIME struAttendanceTime[ABNORMAL_INFO_NUM]; //쳣ʱ - DWORD dwLateMinutes; //ٵʱ䣨ӣ - DWORD dwLeaveEarlyMinutes; //ʱ䣨ӣ - DWORD dwAbsenceMinutes; //ȱʱ䣨ӣ - DWORD dwTotalMinutes; //ϼʱ䣨ӣ - BYTE byRes[128]; // + DWORD dwEmployeeNo; //工号 + BYTE byName[NAME_LEN]; //姓名 + BYTE byDepartmentName[NAME_LEN]; //部门名称 + NET_DVR_ATTENDANCE_TIME struAttendanceTime[ABNORMAL_INFO_NUM]; //异常时间段 + DWORD dwLateMinutes; //迟到时间(分钟) + DWORD dwLeaveEarlyMinutes; //早退时间(分钟) + DWORD dwAbsenceMinutes; //缺勤时间(分钟) + DWORD dwTotalMinutes; //合计时间(分钟) + BYTE byRes[128]; //保留 }NET_DVR_ABNORMAL_CFG, *LPNET_DVR_ABNORMAL_CFG; typedef struct tagNET_DVR_CARD_CFG_V50 { DWORD dwSize; DWORD dwModifyParamType; - // Ҫ޸ĵĿÿʱЧλʾÿλһֲ1ΪҪ޸ģ0Ϊ޸ - // #define CARD_PARAM_CARD_VALID 0x00000001 //ǷЧ - // #define CARD_PARAM_VALID 0x00000002 //Чڲ - // #define CARD_PARAM_CARD_TYPE 0x00000004 //Ͳ - // #define CARD_PARAM_DOOR_RIGHT 0x00000008 //Ȩ޲ - // #define CARD_PARAM_LEADER_CARD 0x00000010 //׿ - // #define CARD_PARAM_SWIPE_NUM 0x00000020 //ˢ - // #define CARD_PARAM_GROUP 0x00000040 //Ⱥ - // #define CARD_PARAM_PASSWORD 0x00000080 // - // #define CARD_PARAM_RIGHT_PLAN 0x00000100 //Ȩ޼ƻ - // #define CARD_PARAM_SWIPED_NUM 0x00000200 //ˢ - // #define CARD_PARAM_EMPLOYEE_NO 0x00000400 // - // #define CARD_PARAM_NAME 0x00000800 // - // #define CARD_PARAM_DEPARTMENT_NO 0x00001000 //ű - // #define CARD_SCHEDULE_PLAN_NO 0x00002000 //Űƻ - // #define CARD_SCHEDULE_PLAN_TYPE 0x00004000 //Űƻ - // #define CARD_ROOM_NUMBER 0x00008000 // - // #define CARD_SIM_NO 0x00010000 //SIMţֻţ - // #define CARD_FLOOR_NUMBER 0x00020000 //¥ - // #define CARD_USER_TYPE 0x00040000 //û - BYTE byCardNo[ACS_CARD_NO_LEN]; // - BYTE byCardValid; //ǷЧ0-Ч1-ЧɾʱΪ0ɾȡʱֶʼΪ1 - BYTE byCardType; //ͣ1-ͨ2-Ⱥ忨3-ֹ4-Ѳ5-вȿ6-7-8-9-Ա10-Ӧ11-ӦȨʱȨޣܿţ12-ESDȫ쿨13-ESD쿨14-ESD쿨15-ESDּ쿨Ĭͨ - BYTE byLeaderCard; //ǷΪ׿1-ǣ0- - BYTE byUserType; // 0 C ͨû1 - Աû; - BYTE byDoorRight[MAX_DOOR_NUM_256]; //Ȩ(¥ȨޡȨ)λʾ1ΪȨޣ0ΪȨޣӵλλʾţ1-NǷȨ - NET_DVR_VALID_PERIOD_CFG struValid; //Чڲ - BYTE byBelongGroup[MAX_GROUP_NUM_128]; //Ⱥ飬ֽڱʾ1-ڣ0- - BYTE byCardPassword[CARD_PASSWORD_LEN]; // - WORD wCardRightPlan[MAX_DOOR_NUM_256][MAX_CARD_RIGHT_PLAN_NUM]; //Ȩ޼ƻȡֵΪƻģţͬţͬƻģȨ޻ķʽ - DWORD dwMaxSwipeTime; //ˢ0Ϊ޴ƣ - DWORD dwSwipeTime; //ˢ - WORD wRoomNumber; // - SHORT wFloorNumber; // - DWORD dwEmployeeNo; //ţûID - BYTE byName[NAME_LEN]; // - WORD wDepartmentNo; //ű - WORD wSchedulePlanNo; //Űƻ - BYTE bySchedulePlanType; //Űƻͣ0-塢1-ˡ2- - BYTE byRightType; //·Ȩͣ0-ͨȨޡ1-άȨޡ2-ȨޣӶԽ豸άȨšţ⿨ţˢЧڲȨޣţөʯAPP˺ţͨȨһ£ + // 需要修改的卡参数,设置卡参数时有效,按位表示,每位代表一种参数,1为需要修改,0为不修改 + // #define CARD_PARAM_CARD_VALID 0x00000001 //卡是否有效参数 + // #define CARD_PARAM_VALID 0x00000002 //有效期参数 + // #define CARD_PARAM_CARD_TYPE 0x00000004 //卡类型参数 + // #define CARD_PARAM_DOOR_RIGHT 0x00000008 //门权限参数 + // #define CARD_PARAM_LEADER_CARD 0x00000010 //首卡参数 + // #define CARD_PARAM_SWIPE_NUM 0x00000020 //最大刷卡次数参数 + // #define CARD_PARAM_GROUP 0x00000040 //所属群组参数 + // #define CARD_PARAM_PASSWORD 0x00000080 //卡密码参数 + // #define CARD_PARAM_RIGHT_PLAN 0x00000100 //卡权限计划参数 + // #define CARD_PARAM_SWIPED_NUM 0x00000200 //已刷卡次数 + // #define CARD_PARAM_EMPLOYEE_NO 0x00000400 //工号 + // #define CARD_PARAM_NAME 0x00000800 //姓名 + // #define CARD_PARAM_DEPARTMENT_NO 0x00001000 //部门编号 + // #define CARD_SCHEDULE_PLAN_NO 0x00002000 //排班计划编号 + // #define CARD_SCHEDULE_PLAN_TYPE 0x00004000 //排班计划类型 + // #define CARD_ROOM_NUMBER 0x00008000 //房间号 + // #define CARD_SIM_NO 0x00010000 //SIM卡号(手机号) + // #define CARD_FLOOR_NUMBER 0x00020000 //楼层号 + // #define CARD_USER_TYPE 0x00040000 //用户类型 + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byCardValid; //卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1) + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,9-员工卡,10-应急卡,11-应急管理卡(用于授权临时卡权限,本身不能开门),12-ESD全检卡,13-ESD免检卡,14-ESD足检卡,15-ESD手检卡,默认普通卡 + BYTE byLeaderCard; //是否为首卡,1-是,0-否 + BYTE byUserType; // 0 – 普通用户1 - 管理员用户; + BYTE byDoorRight[MAX_DOOR_NUM_256]; //门权限(楼层权限、锁权限),按位表示,1为有权限,0为无权限,从低位到高位表示对门(锁)1-N是否有权限 + NET_DVR_VALID_PERIOD_CFG struValid; //有效期参数 + BYTE byBelongGroup[MAX_GROUP_NUM_128]; //所属群组,按字节表示,1-属于,0-不属于 + BYTE byCardPassword[CARD_PASSWORD_LEN]; //卡密码 + WORD wCardRightPlan[MAX_DOOR_NUM_256][MAX_CARD_RIGHT_PLAN_NUM]; //卡权限计划,取值为计划模板编号,同个门(锁)不同计划模板采用权限或的方式处理 + DWORD dwMaxSwipeTime; //最大刷卡次数,0为无次数限制(开锁次数) + DWORD dwSwipeTime; //已刷卡次数 + WORD wRoomNumber; //房间号 + SHORT wFloorNumber; //层号 + DWORD dwEmployeeNo; //工号(用户ID) + BYTE byName[NAME_LEN]; //姓名 + WORD wDepartmentNo; //部门编号 + WORD wSchedulePlanNo; //排班计划编号 + BYTE bySchedulePlanType; //排班计划类型:0-无意义、1-个人、2-部门 + BYTE byRightType; //下发权限类型:0-普通发卡权限、1-二维码权限、2-蓝牙权限(可视对讲设备二维码权限配置项:房间号、卡号(虚拟卡号)、最大刷卡次数(开锁次数)、有效期参数;蓝牙权限:卡号(萤石APP账号)、其他参数配置与普通发卡权限一致) BYTE byRes2[2]; - DWORD dwLockID; //ID - BYTE byLockCode[MAX_LOCK_CODE_LEN]; // - BYTE byRoomCode[MAX_DOOR_CODE_LEN]; // - //λʾ0-Ȩޣ1-Ȩ - //0λʾ籨 - //1λʾʾ - //2λʾƿͿ - //3λʾͨ - //4λʾ - //5λʾѲ - DWORD dwCardRight; //Ȩ - DWORD dwPlanTemplate; //ƻģ(ÿ)ʱǷãλʾ0--ã1- - DWORD dwCardUserId; //ֿID - BYTE byCardModelType; //0-գ1- M1 S502- M1 S703- FM1208 CPU4- FM1216 CPU5-CPU6-֤7- NFC + DWORD dwLockID; //锁ID + BYTE byLockCode[MAX_LOCK_CODE_LEN]; //锁代码 + BYTE byRoomCode[MAX_DOOR_CODE_LEN]; //房间代码 + //按位表示,0-无权限,1-有权限 + //第0位表示:弱电报警 + //第1位表示:开门提示音 + //第2位表示:限制客卡 + //第3位表示:通道 + //第4位表示:反锁开门 + //第5位表示:巡更功能 + DWORD dwCardRight; //卡权限 + DWORD dwPlanTemplate; //计划模板(每天)各时间段是否启用,按位表示,0--不启用,1-启用 + DWORD dwCardUserId; //持卡人ID + BYTE byCardModelType; //0-空,1- M1 S50,2- M1 S70,3- FM1208 CPU卡,4- FM1216 CPU卡,5-国密CPU卡,6-身份证,7- NFC BYTE byRes3[51]; - BYTE bySIMNum[NAME_LEN/*32*/]; //SIMţֻţ + BYTE bySIMNum[NAME_LEN/*32*/]; //SIM卡号(手机号) }NET_DVR_CARD_CFG_V50, *LPNET_DVR_CARD_CFG_V50; typedef struct tagNET_DVR_CAPTURE_FINGERPRINT_COND { DWORD dwSize; - BYTE byFingerPrintPicType; //ͼƬͣ0- - BYTE byFingerNo; //ָţΧ1-10 + BYTE byFingerPrintPicType; //图片类型:0-无意义 + BYTE byFingerNo; //手指编号,范围1-10 BYTE byRes[126]; }NET_DVR_CAPTURE_FINGERPRINT_COND, *LPNET_DVR_CAPTURE_FINGERPRINT_COND; typedef struct tagNET_DVR_CAPTURE_FINGERPRINT_CFG { DWORD dwSize; - DWORD dwFingerPrintDataSize; //ָݴС - BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //ָ - DWORD dwFingerPrintPicSize; //ָͼƬС0ʱָͼƬ - char* pFingerPrintPicBuffer; //ָͼƬ - BYTE byFingerNo; //ָţΧ1-10 - BYTE byFingerPrintQuality; //ָΧ1-100 + DWORD dwFingerPrintDataSize; //指纹数据大小 + BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //指纹数据内容 + DWORD dwFingerPrintPicSize; //指纹图片大小,等于0时,代表无指纹图片数据 + char* pFingerPrintPicBuffer; //指纹图片缓存 + BYTE byFingerNo; //手指编号,范围1-10 + BYTE byFingerPrintQuality; //指纹质量,范围1-100 BYTE byRes[62]; }NET_DVR_CAPTURE_FINGERPRINT_CFG, *LPNET_DVR_CAPTURE_FINGERPRINT_CFG; @@ -49813,177 +49813,177 @@ typedef struct tagNET_DVR_CAPTURE_FACE_COND typedef struct tagNET_DVR_FACE_FEATURE { - NET_VCA_RECT struFace; //ͼ - NET_VCA_POINT struLeftEye; // - NET_VCA_POINT struRightEye; // - NET_VCA_POINT struLeftMouth; // - NET_VCA_POINT struRightMouth; // ұ - NET_VCA_POINT struNoseTip; // + NET_VCA_RECT struFace; //人脸子图区域 + NET_VCA_POINT struLeftEye; // 左眼坐标 + NET_VCA_POINT struRightEye; // 右眼坐标 + NET_VCA_POINT struLeftMouth; // 嘴左边坐标 + NET_VCA_POINT struRightMouth; // 嘴右边坐标 + NET_VCA_POINT struNoseTip; // 鼻子坐标 }NET_DVR_FACE_FEATURE, *LPNET_DVR_FACE_FEATURE; typedef struct tagNET_DVR_CAPTURE_FACE_CFG { DWORD dwSize; - DWORD dwFaceTemplate1Size; //ģ1ݴС0ʱģ1 - char* pFaceTemplate1Buffer; //ģ1ݻ棨2.5k - DWORD dwFaceTemplate2Size; //ģ2ݴС0ʱģ2 - char* pFaceTemplate2Buffer; //ģ2ݻ棨2.5K - DWORD dwFacePicSize; //ͼƬݴС0ʱͼƬ - char* pFacePicBuffer; //ͼƬݻ - BYTE byFaceQuality1; //Χ1-100 - BYTE byFaceQuality2; //Χ1-100 - BYTE byCaptureProgress; //ɼȣĿǰֵֻֽ0-δɼ100-ɼֻڽΪ100ʱŽϢ - BYTE byFacePicQuality; //ͼƬ - DWORD dwInfraredFacePicSize; //ͼƬݴС0ʱͼƬ - char* pInfraredFacePicBuffer; //ͼƬݻ - BYTE byInfraredFacePicQuality; //ͼƬ + DWORD dwFaceTemplate1Size; //人脸模板1数据大小,等于0时,代表无人脸模板1数据 + char* pFaceTemplate1Buffer; //人脸模板1数据缓存(不大于2.5k) + DWORD dwFaceTemplate2Size; //人脸模板2数据大小,等于0时,代表无人脸模板2数据 + char* pFaceTemplate2Buffer; //人脸模板2数据缓存(不大于2.5K) + DWORD dwFacePicSize; //人脸图片数据大小,等于0时,代表无人脸图片数据 + char* pFacePicBuffer; //人脸图片数据缓存 + BYTE byFaceQuality1; //人脸质量,范围1-100 + BYTE byFaceQuality2; //人脸质量,范围1-100 + BYTE byCaptureProgress; //采集进度,目前只有两种进度值:0-未采集到人脸,100-采集到人脸(只有在进度为100时,才解析人脸信息) + BYTE byFacePicQuality; //人脸图片中人脸质量 + DWORD dwInfraredFacePicSize; //红外人脸图片数据大小,等于0时,代表无人脸图片数据 + char* pInfraredFacePicBuffer; //红外人脸图片数据缓存 + BYTE byInfraredFacePicQuality; //红外人脸图片中人脸质量 BYTE byRes1[3]; - NET_DVR_FACE_FEATURE struFeature; //ͼϢ + NET_DVR_FACE_FEATURE struFeature; //人脸抠图特征信息 BYTE byRes[56]; }NET_DVR_CAPTURE_FACE_CFG, *LPNET_DVR_CAPTURE_FACE_CFG; -//ѯֶشִ +//查询手动回传任务可执行性条件参数 typedef struct tagNET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_SEND { DWORD dwSize; - NET_DVR_STREAM_INFO struStreamInfo; //idϢ72ֽڣ - BYTE byRes[128]; // + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节) + BYTE byRes[128]; //保留 }NET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_SEND, *LPNET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_SEND; -//ѯֶشִ +//查询手动回传任务可执行性条件参数 typedef struct tagNET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_RET { DWORD dwSize; - NET_DVR_STREAM_INFO struStreamInfo; //idϢ72ֽڣ - BYTE byExecutable; //0-ش1-ִлش - BYTE byUnexecutableReason; //شԭ, 0-ҪŶӣ1-ӣ2-IDڣ3-CVR쳣4-Ƶ, 5-û, 6-ǰ豸, 7-ԭ - BYTE byRes[254]; // + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节) + BYTE byExecutable; //0-不可立即回传,1-可立即执行回传 + BYTE byUnexecutableReason; //不可立即回传原因, 0-需要排队,1-编码器无连接,2-流ID不存在,3-CVR异常,4-无输入视频, 5-编码器用户名或密码错, 6-前端设备不兼容, 7-其他原因 + BYTE byRes[254]; //保留 }NET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_RET, *LPNET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_RET; typedef struct tagNET_DVR_STREAM_MEDIA_CFG { DWORD dwSize; BYTE sUrl[MAX_URL_LEN]; - NET_DVR_IPADDR struDMSIP; /* dms IPַ */ - WORD wDMSPort; /*dms ˿ں */ + NET_DVR_IPADDR struDMSIP; /* dms IP地址 */ + WORD wDMSPort; /*dms 端口号 */ BYTE byRes1[2]; - DWORD dwDomainID; /*IDֶ֧ƽ̨*/ - BYTE byRes[360]; // + DWORD dwDomainID; /*域ID,用来支持多网域,由平台管理*/ + BYTE byRes[360]; //保留 }NET_DVR_STREAM_MEDIA_CFG, *LPNET_DVR_STREAM_MEDIA_CFG; -//ֻⵥ +//船只检测单个区域配置 typedef struct tagNET_DVR_SHIPSDETECTION_REGION_CFG { BYTE byRuleID; - BYTE byEnable; //ʹ - BYTE bySensitivity; //ȲΧ[1,100] - BYTE byFrameOverlayEnabled;//ƵǷӼ + BYTE byEnable; //使能 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byFrameOverlayEnabled;//视频是否叠加检测框 BYTE byRes[36]; - NET_ITC_POLYGON struPolygon; // - NET_VCA_LINE struTriggerLine; // + NET_ITC_POLYGON struPolygon; //触发区域 + NET_VCA_LINE struTriggerLine; //触发线 }NET_DVR_SHIPSDETECTION_REGION_CFG, *LPNET_DVR_SHIPSDETECTION_REGION_CFG; typedef struct tagNET_DVR_SHIPSDETECTION_CFG { DWORD dwSize; - BYTE byEnable;//ʹ + BYTE byEnable;//使能 BYTE byRes1[3]; - float fLookDownUpAngle;//豸ǶȣȷСһλ - float fHorizontalHeight;//豸ˮƽ߶ȣȷСһλ - NET_DVR_SHIPSDETECTION_REGION_CFG struShipsDetectionRegion[MAX_SHIPSDETE_REGION_NUM];//ֻⵥ + float fLookDownUpAngle;//设备俯仰角度,精确到小数点后一位 + float fHorizontalHeight;//设备水平高度,精确到小数点后一位 + NET_DVR_SHIPSDETECTION_REGION_CFG struShipsDetectionRegion[MAX_SHIPSDETE_REGION_NUM];//船只检测单个区域配置 BYTE byRes[256]; }NET_DVR_SHIPSDETECTION_CFG, *LPNET_DVR_SHIPSDETECTION_CFG; typedef struct tagNET_DVR_TEMPERATURE_COLOR { /* - ѡ0~±ʱֶЧ,ڸ¶ֵʱнɫע - ѡ1~±ʱ, ֶЧ,ڸ¶ֵʱнɫע - ѡ2~䱨ʱֶЧ¶ڸ¶ʱнɫע - ѡ3~±ʱֶЧ¶Ȳڸ¶ʱнɫע - ѡ4~ΪޱֶͣЧرձ*/ - BYTE byType;//±ɫͣ0~ޱͣرգ1~±ͣ2~±ͣ3~䱨ͣ4~± + 选择0~高温报警类型时,字段生效,当高于该温度值时,会有进行颜色标注, + 选择1~低温报警类型时, 字段生效,当低于该温度值时,会有进行颜色标注。 + 选择2~区间报警类型时,字段生效,当在温度在该温度区间时,会有进行颜色标注。 + 选择3~保温报警类型时,字段生效,当温度不在该温度区间时,会有进行颜色标注。 + 选择4~为无报警类型,字段生效,关闭报警,*/ + BYTE byType;//测温报警颜色控制类型,0~无报警类型(关闭),1~高温报警类型,2~低温报警类型,3~区间报警类型,4~保温报警类型 BYTE byRes1[3]; - int iHighTemperature;//ֵ-273~10000 - int iLowTemperature;//ֵ-273~10000 + int iHighTemperature;//高温值,-273~10000 + int iLowTemperature;//低温值,-273~10000 BYTE byRes[8]; }NET_DVR_TEMPERATURE_COLOR, *LPNET_DVR_TEMPERATURE_COLOR; typedef struct tagNET_DVR_THERMOMETRY_BASICPARAM { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿʹܣ0- 1- - BYTE byStreamOverlay; //¶Ϣ0- 1- - BYTE byPictureOverlay;//ץͼ¶Ϣ0- 1- - BYTE byThermometryRange;//·Χ: 0-Ĭֵ,1-(-20~150),2-(0~550)϶Ϊλ㣩,3-(϶:0-650棻¶:32-1200H),4-϶: -40-150棩,5-(϶: 0~1200)϶Ϊλ㣬ݲµλ趨ͬ·Χʾ6-(϶: -20-120,7-(϶:20~350), 8-(϶:20~45),9-(϶:30~45),0xff-Զ - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) - BYTE byThermometryCurve;//ģʽʾʽ0-رգ1-ģʽ1¶ģʽ2-ģʽ2¶ģʽ - BYTE byFireImageModea;//ͼģʽ0-1-ڰģʽ2-̽ģʽ3-ģʽ(ֶ0Ŀǰ֮ǰӿڲ) - BYTE byShowTempStripEnable;//ʾ¶ʹܣ0- 1- - float fEmissivity;//( ȷСλ)[0.01, 1.00](ı) - BYTE byDistanceUnit;//뵥λ: 0-ףm1-Ӣߣfeet,2-(centimeter) - BYTE byEnviroHumidity;//ʪȣȡֵΧ0~100% + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byStreamOverlay; //码流叠加温度信息:0- 否,1- 是 + BYTE byPictureOverlay;//抓图叠加温度信息:0- 否,1- 是 + BYTE byThermometryRange;//测温范围: 0-默认值,1-(-20~150),2-(0~550)(这里以摄氏度为单位计算),3-(摄氏度:0-650℃;华氏温度:32-1200℉),4-(摄氏度: -40-150℃),5-(摄氏度: 0~1200℃)(这里以摄氏度为单位计算,根据测温单位设定不同测温范围的显示),6-(摄氏度: -20-120℃,7-(摄氏度:20~350℃), 8-(摄氏度:20~45),9-(摄氏度:30~45),0xff-自动 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K)。 + BYTE byThermometryCurve;//测温曲线模式显示方式,0-关闭,1-模式1(横向温度趋势线模式),2-模式2(纵向温度趋势线模式) + BYTE byFireImageModea;//消防图像模式,0-保留,1-黑白模式,2-热探测模式,3-火场模式(字段0目前保留,避免与之前接口不兼容) + BYTE byShowTempStripEnable;//显示温度条使能:0- 否,1- 是 + float fEmissivity;//发射率(发射率 精确到小数点后两位)[0.01, 1.00](即:物体向外辐射能量的本领) + BYTE byDistanceUnit;//距离单位: 0-米(m),1-英尺(feet),2-厘米(centimeter) + BYTE byEnviroHumidity;//环境相对湿度,取值范围:0~100% BYTE byRes2[2]; - NET_DVR_TEMPERATURE_COLOR struTempColor;//±ɫ - int iEnviroTemperature;//¶ȣȡֵΧ-273~10000϶ - int iCorrectionVolume;//ȡֵΧ-100~100 - /* bit0-ĵ£0-ʾ1-ʾ - bit1-ߵ£0-ʾ1-ʾ - bit2-͵£0-ʾ1-ʾ + NET_DVR_TEMPERATURE_COLOR struTempColor;//测温报警颜色 + int iEnviroTemperature;//环境温度,取值范围:-273~10000摄氏度 + int iCorrectionVolume;//测温修正量,取值范围:-100~100 + /* bit0-中心点测温:0-不显示,1-显示; + bit1-最高点测温:0-不显示,1-显示; + bit2-最低点测温:0-不显示,1-显示; */ - BYTE bySpecialPointThermType;// µʾ - BYTE byReflectiveEnabled;//¶ʹܣ0- 1- - WORD wDistance;//(m)[0, 10000] - float fReflectiveTemperature;//¶ ȷСһλ - float fAlert;//Ԥ¶ֵ-100.0-1000.0ȣȷСһλ - float fAlarm;//¶ֵ-100.0-1000.0ȣȷСһλ - float fThermalOpticalTransmittance;// ѧ͸, ȷС3λΧ0.001-1.000Ĭ1.000 - float fExternalOpticsWindowCorrection;//ⲿѧ¶ȣĬֵ20棬ΧΪ-40.0~80.0棬ʵʾλԽʾΪ׼ - BYTE byDisplayMaxTemperatureEnabled;// ʾ 0-ʾ 1-ʾ - BYTE byDisplayMinTemperatureEnabled;// ʾ 0-ʾ 1-ʾ - BYTE byDisplayAverageTemperatureEnabled;// ʾƽ 0-ʾ 1-ʾ - BYTE byThermometryInfoDisplayposition;// Ϣʾλ 0- 1- 2-ĻϽ - DWORD dwAlertFilteringTime;//¶Ԥȴʱ,λ - DWORD dwAlarmFilteringTime;//¶ȱȴʱ,λ - BYTE byemissivityMode; // 1-ֲڣ2-ϴֲڣ3-Ϲ⻬, 4-⻬, 0xff-Զ - BYTE bydisplayTemperatureInOpticalChannelEnabled;//ɼʾ¶Ϣʹܣ0-ã1 - BYTE byDisplayCentreTemperatureEnabled;// ʾĵ¶ 0-ʾ 1-ʾ + BYTE bySpecialPointThermType;// 特殊测温点显示 + BYTE byReflectiveEnabled;//反射温度使能:0- 否,1- 是 + WORD wDistance;//距离(m)[0, 10000] + float fReflectiveTemperature;//反射温度 精确到小数后一位 + float fAlert;//预警温度阈值,-100.0-1000.0度(精确到小数点后一位) + float fAlarm;//报警温度阈值,-100.0-1000.0度(精确到小数点后一位) + float fThermalOpticalTransmittance;// 光学透过率, 精确到小数点后3位,范围0.001-1.000,默认1.000 + float fExternalOpticsWindowCorrection;//外部光学温度,默认值20℃,范围为-40.0~80.0℃,实际显示单位以界面显示为准 + BYTE byDisplayMaxTemperatureEnabled;// 显示最高温 0-不显示 1-显示 + BYTE byDisplayMinTemperatureEnabled;// 显示最低温 0-不显示 1-显示 + BYTE byDisplayAverageTemperatureEnabled;// 显示平均温 0-不显示 1-显示 + BYTE byThermometryInfoDisplayposition;// 测温信息显示位置 0-保留 1-规则 2-屏幕左上角 + DWORD dwAlertFilteringTime;//温度预警等待时间,单位秒 + DWORD dwAlarmFilteringTime;//温度报警等待时间,单位秒 + BYTE byemissivityMode; //发射率配置类型 1-粗糙,2-较粗糙,3-较光滑, 4-光滑, 0xff-自定义 + BYTE bydisplayTemperatureInOpticalChannelEnabled;//可见光显示温度信息使能,0-不启用,1启用 + BYTE byDisplayCentreTemperatureEnabled;// 显示中心点温度 0-不显示 1-显示 BYTE byRes[49]; }NET_DVR_THERMOMETRY_BASICPARAM, *LPNET_DVR_THERMOMETRY_BASICPARAM; typedef struct tagNET_DVR_THERMOMETRY_COND { - DWORD dwSize;//ṹС + DWORD dwSize;//结构体大小 DWORD dwChannel; - WORD wPresetNo;//0- + WORD wPresetNo;//0-保留 BYTE byRes[62]; }NET_DVR_THERMOMETRY_COND, *LPNET_DVR_THERMOMETRY_COND; typedef struct tagNET_DVR_THERMOMETRY_PRESETINFO_PARAM { - BYTE byEnabled; //Ƿʹܣ0- 1- - BYTE byRuleID;//ID 0-ʾЧ1ʼ listڲжЧԣ - WORD wDistance;//(m)[0, 10000] - float fEmissivity;//( ȷСλ)[0.01, 1.00](ı) - BYTE byDistanceUnit;//뵥λ: 0-ףm1-Ӣߣfeet,2-(centimeter) + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRuleID;//规则ID 0-表示无效,从1开始 (list内部判断数据有效性) + WORD wDistance;//距离(m)[0, 10000] + float fEmissivity;//发射率(发射率 精确到小数点后两位)[0.01, 1.00](即:物体向外辐射能量的本领) + BYTE byDistanceUnit;//距离单位: 0-米(m),1-英尺(feet),2-厘米(centimeter) BYTE byRes[2]; - BYTE byReflectiveEnabled;//¶ʹܣ0- 1- - float fReflectiveTemperature;//¶ ȷС2λ - char szRuleName[NAME_LEN/*32*/];// - BYTE byemissivityMode; // 1-ֲڣ2-ϴֲڣ3-Ϲ⻬, 4-⻬, 0xff-Զ + BYTE byReflectiveEnabled;//反射温度使能:0- 否,1- 是 + float fReflectiveTemperature;//反射温度 精确到小数后2位 + char szRuleName[NAME_LEN/*32*/];//规则名称 + BYTE byemissivityMode; //发射率配置类型 1-粗糙,2-较粗糙,3-较光滑, 4-光滑, 0xff-自定义 BYTE byRes1[62]; - BYTE byRuleCalibType;//궨 0-㣬1-2- - NET_VCA_POINT struPoint;//꣨궨Ϊ""ʱЧ - NET_VCA_POLYGON struRegion;//ߣ궨Ϊ""""ʱЧ + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2-线 + NET_VCA_POINT struPoint;//点测温坐标(当规则标定类型为"点"的时候生效) + NET_VCA_POLYGON struRegion;//区域、线(当规则标定类型为"框"或者"线"的时候生效) }NET_DVR_THERMOMETRY_PRESETINFO_PARAM, *LPNET_DVR_THERMOMETRY_PRESETINFO_PARAM; typedef struct tagNET_DVR_THERMOMETRY_PRESETINFO { - DWORD dwSize;//ṹС - WORD wPresetNo;//0- + DWORD dwSize;//结构体大小 + WORD wPresetNo;//0-保留 BYTE byRes[2]; NET_DVR_THERMOMETRY_PRESETINFO_PARAM struPresetInfo[MAX_THERMOMETRY_REGION_NUM/*40*/]; }NET_DVR_THERMOMETRY_PRESETINFO, *LPNET_DVR_THERMOMETRY_PRESETINFO; @@ -49992,19 +49992,19 @@ typedef struct tagNET_DVR_THERMOMETRY_PRESETINFO typedef struct tagNET_DVR_BASE_STATION_INFO_ALARM { DWORD dwSize; - DWORD dwChannel;//ͨ - char sNetBarWaCode[16];// - char sCollectionEquipmentID[24];//ɼ豸 - char sMCC[4];//ƶ - char sMNC[4];//ƶ - char sLAC[36];//λ - char sCI[36];//Сʶ - char sBSCI[36];//վʶ - char sBCCH[36];//㲥ŵ - char sLEV[36];//ձƽ - char sCollectionEquipmentLongitude[12];//ɼ豸 - char sCollectionEquipmentLatitude[12];//ɼ豸γ - char sCaptureTime[20];//ɼʱ ʱʽyyyy-MM-dd hh:mm:ss + DWORD dwChannel;//通道号 + char sNetBarWaCode[16];//场所编号 + char sCollectionEquipmentID[24];//采集设备编号 + char sMCC[4];//移动国家码 + char sMNC[4];//移动网络码 + char sLAC[36];//位置区码 + char sCI[36];//小区识别码 + char sBSCI[36];//基站识别码 + char sBCCH[36];//公共广播信道 + char sLEV[36];//接收报告电平 + char sCollectionEquipmentLongitude[12];//采集设备经度 + char sCollectionEquipmentLatitude[12];//采集设备纬度 + char sCaptureTime[20];//采集时间 时间格式yyyy-MM-dd hh:mm:ss BYTE byRes[256]; }NET_DVR_BASE_STATION_INFO_ALARM, *LPNET_DVR_BASE_STATION_INFO_ALARM; @@ -50012,21 +50012,21 @@ typedef struct tagNET_DVR_BASE_STATION_INFO_ALARM typedef struct tagNET_DVR_THERMOMETRY_ALARMRULE_PARAM { BYTE byEnable; - BYTE byRuleID;//ID - BYTE byRule;//¶ȱȽϷʽ 0-´,1-С,2-´,3-С,4-ƽ´,5-ƽС,6-²,7-²С + BYTE byRuleID;//规则ID + BYTE byRule;//报警温度比较方式 0-高温大于,1-高温小于,2-低温大于,3-低温小于,4-平均温大于,5-平均温小于,6-温差大于,7-温差小于 BYTE byRes; - char szRuleName[NAME_LEN];// - float fAlert;//Ԥ¶ - float fAlarm;//¶ - float fThreshold;//¶ - DWORD dwAlertFilteringTime;//¶Ԥȴʱ,λ - DWORD dwAlarmFilteringTime;//¶ȱȴʱ,λ + char szRuleName[NAME_LEN];//规则名称 + float fAlert;//预警温度 + float fAlarm;//报警温度 + float fThreshold;//门限温度 + DWORD dwAlertFilteringTime;//温度预警等待时间,单位秒 + DWORD dwAlarmFilteringTime;//温度报警等待时间,单位秒 BYTE byRes1[56]; }NET_DVR_THERMOMETRY_ALARMRULE_PARAM, *LPNET_DVR_THERMOMETRY_ALARMRULE_PARAM; typedef struct tagNET_DVR_THERMOMETRY_ALARMRULE { - DWORD dwSize;//ṹС + DWORD dwSize;//结构体大小 NET_DVR_THERMOMETRY_ALARMRULE_PARAM struThermometryAlarmRuleParam[THERMOMETRY_ALARMRULE_NUM]; BYTE byRes[128]; }NET_DVR_THERMOMETRY_ALARMRULE, *LPNET_DVR_THERMOMETRY_ALARMRULE; @@ -50035,456 +50035,456 @@ typedef struct tagNET_DVR_THERMOMETRY_ALARMRULE typedef struct tagNET_DVR_THERMOMETRY_DIFFCOMPARISON_PARAM { BYTE byEnable; - BYTE byRuleID;//ID,0-ʾЧΧֵ1ʼ + BYTE byRuleID;//规则ID,0-表示无效,范围值从1开始 BYTE byAlarmID1; BYTE byAlarmID2; - BYTE byRule;//¶ȱȽϷʽ0-´,1-С,2-´,3-С,4-ƽ´,5-ƽС,6-²,7-²С + BYTE byRule;//报警温度比较方式0-高温大于,1-高温小于,2-低温大于,3-低温小于,4-平均温大于,5-平均温小于,6-温差大于,7-温差小于 BYTE byRes[3]; - float fTemperatureDiff;//²ֵ - DWORD dwAlarmFilteringTime;//¶ȱȴʱ,λ + float fTemperatureDiff;//温差值 + DWORD dwAlarmFilteringTime;//温度报警等待时间,单位秒 BYTE byRes1[28]; }NET_DVR_THERMOMETRY_DIFFCOMPARISON_PARAM, *LPNET_DVR_THERMOMETRY_DIFFCOMPARISON_PARAM; typedef struct tagNET_DVR_THERMOMETRY_DIFFCOMPARISON { - DWORD dwSize;//ṹС + DWORD dwSize;//结构体大小 NET_DVR_THERMOMETRY_DIFFCOMPARISON_PARAM struDiffComparison[MAX_THERMOMETRY_DIFFCOMPARISON_NUM/*8*/]; BYTE byRes[64]; }NET_DVR_THERMOMETRY_DIFFCOMPARISON, *LPNET_DVR_THERMOMETRY_DIFFCOMPARISON; -//ʵʱ¶ȼṹ +//实时温度检测条件结构 typedef struct tagNET_DVR_REALTIME_THERMOMETRY_COND { DWORD dwSize; - DWORD dwChan;//ͨţ1ʼ0xffffffffȡȫͨ - BYTE byRuleID; //ID 0-ȡȫ򣬾ID1ʼ + DWORD dwChan;//通道号,从1开始,0xffffffff代表获取全部通道 + BYTE byRuleID; //规则ID 0-代表获取全部规则,具体规则ID从1开始 /* - 1-ʱģʽ豸ÿһϴݵ¡ºƽ¶ֵ² - 2-²ģʽһһ»»ƽ»²ֵ²ڵ2϶ȣϴ¡ºƽ¶ֵڵһСʱ²ֵС2϶ȣϴ¡¡ƽº²ֵ + 1-定时模式:设备每隔一秒上传各个规则测温数据的最高温、最低温和平均温度值、温差 + 2-温差模式:若上一秒与下一秒的最高温或者最低温或者平均温或者温差值的温差大于等于2摄氏度,则上传最高温、最低温和平均温度值。若大于等于一个小时温差值均小于2摄氏度,则上传最高温、最低温、平均温和温差值 */ - BYTE byMode; //ģʽ 0-Ϊ豸1-ʱģʽ2-²ģʽ - WORD wInterval; //ϴ²ģʽ֧֣1~3600S0Ĭ3600Sϴһ - float fTemperatureDiff;//² - BYTE byRes[56]; // + BYTE byMode; //长连接模式, 0-保留(为兼容老设备),1-定时模式,2-温差模式 + WORD wInterval; //上传间隔,仅温差模式支持,1~3600S,填0则默认3600S上传一次 + float fTemperatureDiff;//温差 + BYTE byRes[56]; //保留 }NET_DVR_REALTIME_THERMOMETRY_COND, *LPNET_DVR_REALTIME_THERMOMETRY_COND; typedef struct tagNET_DVR_POINT_THERM_CFG { - float fTemperature;//ǰ¶ - NET_VCA_POINT struPoint;//꣨궨ΪʱЧ + float fTemperature;//当前温度 + NET_VCA_POINT struPoint;//点测温坐标(当规则标定类型为点的时候生效) BYTE byRes[120]; }NET_DVR_POINT_THERM_CFG, *LPNET_DVR_POINT_THERM_CFG; typedef struct tagNET_DVR_LINEPOLYGON_THERM_CFG { - float fMaxTemperature;// - float fMinTemperature;// - float fAverageTemperature;//ƽ - float fTemperatureDiff;//² - NET_VCA_POLYGON struRegion;//򣨵궨Ϊ/ߵʱЧ + float fMaxTemperature;//最高温 + float fMinTemperature;//最低温 + float fAverageTemperature;//平均温 + float fTemperatureDiff;//温差 + NET_VCA_POLYGON struRegion;//区域(当规则标定类型为框/线的时候生效) BYTE byRes[32]; }NET_DVR_LINEPOLYGON_THERM_CFG, *LPNET_DVR_LINEPOLYGON_THERM_CFG; typedef struct tagNET_DVR_THERMOMETRY_UPLOAD { DWORD dwSize; - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - char szRuleName[NAME_LEN/*32*/];// - BYTE byRuleID;//ID - BYTE byRuleCalibType;//궨 0-㣬1-2- - WORD wPresetNo; //Ԥõ + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + char szRuleName[NAME_LEN/*32*/];//规则名称 + BYTE byRuleID;//规则ID号 + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2-线 + WORD wPresetNo; //预置点号 NET_DVR_POINT_THERM_CFG struPointThermCfg; NET_DVR_LINEPOLYGON_THERM_CFG struLinePolygonThermCfg; - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) - BYTE byDataType;//״̬:0-У1-ʼ2- + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + BYTE byDataType;//数据状态类型:0-检测中,1-开始,2-结束 BYTE byRes1; /* - bit0-ĵ£0-֧֣1-֧֣ - bit1-ߵ£0-֧֣1-֧֣ - bit2-͵£0-֧֣1-֧֣ + bit0-中心点测温:0-不支持,1-支持; + bit1-最高点测温:0-不支持,1-支持; + bit2-最低点测温:0-不支持,1-支持; */ - BYTE bySpecialPointThermType;// Ƿ֧ - float fCenterPointTemperature;//ĵ¶,ȷСһλ(-40-1500),+100*10 bySpecialPointThermTypeжǷ֧ĵ㣩 - float fHighestPointTemperature;//ߵ¶,ȷСһλ(-40-1500),+100*10bySpecialPointThermTypeжǷ֧ߵ㣩 - float fLowestPointTemperature;//͵¶,ȷСһλ(-40-1500),+100*10bySpecialPointThermTypeжǷ֧͵㣩 - NET_VCA_POINT struHighestPoint;//ߡ¶λ꣨궨ΪߡʱЧ - NET_VCA_POINT struLowestPoint;//ߡ¶λ꣨궨ΪߡʱЧ - BYTE byIsFreezedata;//Ƿݶ 0- 1- - BYTE byFaceSnapThermometryEnabled;//ĿץIJʹ 1- 0-ر + BYTE bySpecialPointThermType;// 是否支持特殊点测温 + float fCenterPointTemperature;//中心点温度,精确到小数点后一位(-40-1500),(浮点数+100)*10 (由bySpecialPointThermType判断是否支持中心点) + float fHighestPointTemperature;//最高点温度,精确到小数点后一位(-40-1500),(浮点数+100)*10(由bySpecialPointThermType判断是否支持最高点) + float fLowestPointTemperature;//最低点温度,精确到小数点后一位(-40-1500),(浮点数+100)*10(由bySpecialPointThermType判断是否支持最低点) + NET_VCA_POINT struHighestPoint;//线、框测温最高温度位置坐标(当规则标定类型为线、框的时候生效) + NET_VCA_POINT struLowestPoint;//线、框测温最低温度位置坐标(当规则标定类型为线、框的时候生效) + BYTE byIsFreezedata;//是否数据冻结 0-否 1-是 + BYTE byFaceSnapThermometryEnabled;//目标抓拍测温使能 1-开启 0-关闭 BYTE byRes2[2]; - DWORD dwChan; //ͨţѯͨΪ0xffffffffʱֶЧ - NET_VCA_RECT struFaceRect; //ͼ - DWORD dwTimestamp;//DSPʱ + DWORD dwChan; //通道号,查询条件中通道号为0xffffffff时该字段生效 + NET_VCA_RECT struFaceRect; //人脸子图区域 + DWORD dwTimestamp;//DSP时间戳 BYTE byRes[68]; }NET_DVR_THERMOMETRY_UPLOAD, *LPNET_DVR_THERMOMETRY_UPLOAD; -//¶ȱ¶Ⱥ¶ȱȽϱ +//温度报警(检测温度和配置温度比较报警) typedef struct tagNET_DVR_THERMOMETRY_ALARM { DWORD dwSize; - DWORD dwChannel;//ͨ - BYTE byRuleID;//ID - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) - WORD wPresetNo; //Ԥõ - NET_PTZ_INFO struPtzInfo;//ptzϢ - BYTE byAlarmLevel;//0-Ԥ 1- - BYTE byAlarmType;/* 0-¶ 1-¶ 2-ƽ¶ 3-² 4-¶ͻ 5-¶ͻ*/ - BYTE byAlarmRule;//0-ڣ1-С - BYTE byRuleCalibType;//궨 0-㣬1-2 - NET_VCA_POINT struPoint;//꣨궨ΪʱЧ - NET_VCA_POLYGON struRegion;//򣨵궨ΪʱЧ - float fRuleTemperature;/*ù¶,ȷСһλ(-40-1000),+100 */ - float fCurrTemperature;/*ǰ¶,ȷСһλ(-40-1000),+100 */ - DWORD dwPicLen;//ɼͼƬ - DWORD dwThermalPicLen;//ȳͼƬ - DWORD dwThermalInfoLen;//ȳ񸽼Ϣ - char* pPicBuff; ///ɼͼƬָ - char* pThermalPicBuff;// ȳͼƬָ - char* pThermalInfoBuff; //ȳ񸽼Ϣָ - NET_VCA_POINT struHighestPoint;//ߡ¶λ꣨궨ΪߡʱЧ - float fToleranceTemperature;/* ݲ¶,ȷСһλ(-40-1000),+100 */ - DWORD dwAlertFilteringTime;//¶Ԥȴʱ λ ΧΪ0-200룬ĬΪ0 - DWORD dwAlarmFilteringTime;//¶ȱȴʱ λ ΧΪ0-200룬ĬΪ0 - DWORD dwTemperatureSuddenChangeCycle;//¶ͻ¼ڣλ - float fTemperatureSuddenChangeValue;//¶ͻֵ,ȷСһλ(0) - BYTE byPicTransType; //ͼƬݴ䷽ʽ: 0-ƣ1-url + DWORD dwChannel;//通道号 + BYTE byRuleID;//规则ID + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + WORD wPresetNo; //预置点号 + NET_PTZ_INFO struPtzInfo;//ptz坐标信息 + BYTE byAlarmLevel;//0-预警 1-报警 + BYTE byAlarmType;/*报警类型 0-最高温度 1-最低温度 2-平均温度 3-温差 4-温度突升 5-温度突降*/ + BYTE byAlarmRule;//0-大于,1-小于 + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2线 + NET_VCA_POINT struPoint;//点测温坐标(当规则标定类型为点的时候生效) + NET_VCA_POLYGON struRegion;//区域(当规则标定类型为框的时候生效) + float fRuleTemperature;/*配置规则温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + float fCurrTemperature;/*当前温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + DWORD dwPicLen;//可见光图片长度 + DWORD dwThermalPicLen;//热成像图片长度 + DWORD dwThermalInfoLen;//热成像附加信息长度 + char* pPicBuff; ///可见光图片指针 + char* pThermalPicBuff;// 热成像图片指针 + char* pThermalInfoBuff; //热成像附加信息指针 + NET_VCA_POINT struHighestPoint;//线、框测温最高温度位置坐标(当规则标定类型为线、框的时候生效) + float fToleranceTemperature;/* 容差温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + DWORD dwAlertFilteringTime;//温度预警等待时间 单位秒 范围为0-200秒,默认为0秒 + DWORD dwAlarmFilteringTime;//温度报警等待时间 单位秒 范围为0-200秒,默认为0秒 + DWORD dwTemperatureSuddenChangeCycle;//温度突变记录周期,单位秒 + float fTemperatureSuddenChangeValue;//温度突变值,精确到小数点后一位(大于0) + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url BYTE byRes1[3]; - DWORD dwVisibleChannel; //ɼͨͨ - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - float fAlarmRuleTemperature;/* TMAù¶,ȷСһλ(-40-1000),+100 */ + DWORD dwVisibleChannel; //可见光通道通道号 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + float fAlarmRuleTemperature;/* TMA测温配置规则温度,精确到小数点后一位(-40-1000),(浮点数+100) */ BYTE byRes[20]; }NET_DVR_THERMOMETRY_ALARM, *LPNET_DVR_THERMOMETRY_ALARM; -//² +//温差报警 typedef struct tagNET_DVR_THERMOMETRY_DIFF_ALARM { DWORD dwSize; - DWORD dwChannel;//ͨ - BYTE byAlarmID1;//AlarmID1 - BYTE byAlarmID2;//AlarmID2 - WORD wPresetNo; //Ԥõ - BYTE byAlarmLevel;//0-Ԥ 1- - BYTE byAlarmType;/* 0-¶ 1-¶ 2-ƽ¶*/ - BYTE byAlarmRule;//0-ڣ1-С - BYTE byRuleCalibType;//궨 0-㣬1-2 - NET_VCA_POINT struPoint[2];//꣨궨ΪʱЧ±0AlarmID1±1AlarmID2. - NET_VCA_POLYGON struRegion[2];//򣨵궨ΪʱЧ±0AlarmID1±1AlarmID2. - float fRuleTemperatureDiff;/*ù²,ȷСһλ(-40-1000)*/ - float fCurTemperatureDiff;/*ǰ²,ȷСһλ(-40-1000),+100 */ - NET_PTZ_INFO struPtzInfo;//ptzϢ - DWORD dwPicLen;//ɼͼƬ - DWORD dwThermalPicLen;//ȳͼƬ - DWORD dwThermalInfoLen;//ȳ񸽼Ϣ - char* pPicBuff; ///ɼͼƬָ - char* pThermalPicBuff;// ȳͼƬָ - char* pThermalInfoBuff; //ȳ񸽼Ϣָ - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) - BYTE byPicTransType; //ͼƬݴ䷽ʽ: 0-ƣ1-url + DWORD dwChannel;//通道号 + BYTE byAlarmID1;//规则AlarmID1 + BYTE byAlarmID2;//规则AlarmID2 + WORD wPresetNo; //预置点号 + BYTE byAlarmLevel;//0-预警 1-报警 + BYTE byAlarmType;/*报警类型 0-最高温度 1-最低温度 2-平均温度*/ + BYTE byAlarmRule;//0-大于,1-小于 + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2线 + NET_VCA_POINT struPoint[2];//点测温坐标(当规则标定类型为点的时候生效)数组下标0代表着AlarmID1,数组下标1代表着AlarmID2. + NET_VCA_POLYGON struRegion[2];//区域(当规则标定类型为框的时候生效)数组下标0代表着AlarmID1,数组下标1代表着AlarmID2. + float fRuleTemperatureDiff;/*配置规则温差,精确到小数点后一位(-40-1000))*/ + float fCurTemperatureDiff;/*当前温差,精确到小数点后一位(-40-1000),(浮点数+100) */ + NET_PTZ_INFO struPtzInfo;//ptz坐标信息 + DWORD dwPicLen;//可见光图片长度 + DWORD dwThermalPicLen;//热成像图片长度 + DWORD dwThermalInfoLen;//热成像附加信息长度 + char* pPicBuff; ///可见光图片指针 + char* pThermalPicBuff;// 热成像图片指针 + char* pThermalInfoBuff; //热成像附加信息指针 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url BYTE byRes1[2]; - float fToleranceTemperature;/*ݲ¶,ȷСһλ(-40-1000),+100 */ - DWORD dwAlarmFilteringTime;//¶ȱȴʱ λ ΧΪ0-200룬ĬΪ0 - DWORD dwVisibleChannel; //ɼͨͨ + float fToleranceTemperature;/*容差温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + DWORD dwAlarmFilteringTime;//温度报警等待时间 单位秒 范围为0-200秒,默认为0秒 + DWORD dwVisibleChannel; //可见光通道通道号 BYTE byRes[48]; }NET_DVR_THERMOMETRY_DIFF_ALARM, *LPNET_DVR_THERMOMETRY_DIFF_ALARM; -typedef struct //ṹ +typedef struct //条件结构 { DWORD dwSize; - DWORD dwChannel;//ͨţǰĬ1 + DWORD dwChannel;//通道号(前端默认是1) BYTE byRes[128]; }NET_DVR_SHIPSCOUNT_COND, *LPNET_DVR_SHIPSCOUNT_COND; -//ȡֻϢṹ +//获取船只计数信息结构 typedef struct tagNET_DVR_SHIPSCOUNT_CFG { DWORD dwSize; - DWORD dwUpShipsCount; //дֻ - DWORD dwDownShipsCount; //дֻ - DWORD dwLeftShipsCount; //дֻ - DWORD dwRightShipsCount; //дֻ - DWORD dwTotalCount;//ֻܼ - DWORD dwRelativeTime; //豸ʼʱ - DWORD dwAbsTime; //豸ʼľʱ - BYTE byDataType;//״̬:0-У1-ʼ2- + DWORD dwUpShipsCount; //上行船只数 + DWORD dwDownShipsCount; //下行船只数 + DWORD dwLeftShipsCount; //左行船只数 + DWORD dwRightShipsCount; //右行船只数 + DWORD dwTotalCount;//船只总计数 + DWORD dwRelativeTime; //设备侧计数开始计数的相对时标 + DWORD dwAbsTime; //设备侧计数开始计数的绝对时标 + BYTE byDataType;//数据状态类型:0-检测中,1-开始,2-结束 BYTE byRes[255]; }NET_DVR_SHIPSCOUNT_CFG, *LPNET_DVR_SHIPSCOUNT_CFG; -//ֻϢ +//船只信息 typedef struct tagNET_DVR_SHIPSINFO { - float fShipsLength; //ֻȣ1~1000.0mȷСһλ - float fShipsHeight; //ֻ߶ȣ1~1000.0mȷСһλ - float fShipsWidth; //ֻȣ1~1000.0mȷСһλ - float fShipsSpeed; //ֻٶȣ1~1000.0m/sȷСһλ - BYTE byShipsDirection;//ֻ0~up,1~down,2~left,3~right - BYTE byShipsDetState;//ֻ״̬0~Խߣ1~ͷ⣬2~β - BYTE byTriggerLineID;//ID + float fShipsLength; //船只长度;1~1000.0m,精确到小数点后一位 + float fShipsHeight; //船只高度;1~1000.0m,精确到小数点后一位 + float fShipsWidth; //船只宽度;1~1000.0m,精确到小数点后一位 + float fShipsSpeed; //船只速度;1~1000.0m/s,精确到小数点后一位 + BYTE byShipsDirection;//船只方向;0~up,1~down,2~left,3~right + BYTE byShipsDetState;//船只检测状态;0~正跨越检测线,1~船头检测,2~船尾检测 + BYTE byTriggerLineID;//检测线ID BYTE byRes[61]; - NET_VCA_POLYGON struShipsRect; //ֻ򣬹һֵڴͼɼͼȳͼ)ķֱ + NET_VCA_POLYGON struShipsRect; //船只区域,归一化值,相对于大图(可见光图、热成像图)的分辨率 } NET_DVR_SHIPSINFO, *LPNET_DVR_SHIPSINFO; -//ֻץͼϢ +//船只抓图信息 typedef struct tagNET_DVR_SHIPIMAGE_INFO { - DWORD dwShipImageLen;//ֻץͼƬݳ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pXmlBuf; //ֻץͼƬָ + DWORD dwShipImageLen;//船只抓拍图片二进制数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pXmlBuf; //船只抓拍图片二进制数据指针 #else - char* pXmlBuf; //ֻץͼƬָ + char* pXmlBuf; //船只抓拍图片二进制数据指针 BYTE byRes[4]; #endif }NET_DVR_SHIPIMAGE_INFO, *LPNET_DVR_SHIPIMAGE_INFO; -//ֻⱨϴ +//船只检测报警上传 typedef struct tagNET_DVR_SHIPSDETECTION_ALARM { DWORD dwSize; - NET_VCA_DEV_INFO struDevInfo; //豸Ϣ - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - BYTE byShipsNum; //ֻ(ԽߵĴֻ) - BYTE byShipsNumHead;//ֻ(ͷ⴬ֻ) - BYTE byShipsNumEnd; //ֻ(β⴬ֻ) - BYTE byPicTransType; //ͼƬݴ䷽ʽ: 0-ƣ1-url - NET_DVR_SHIPSINFO struShipInfo[MAX_SHIPS_NUM/*20*/];//ֻϢ֧20 - DWORD dwPicLen;//ɼͼƬ - DWORD dwThermalPicLen;//ȳͼƬ - BYTE* pPicBuffer; //ɼͼƬָ - BYTE* pThermalPicBuffer; //ȳͼƬָ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byTimeDiffFlag; /*ʱֶǷЧ 0-ʱЧ 1-ʱЧ */ - char cTimeDifferenceH; /*UTCʱСʱ-12 ... +14 +ʾ,byTimeDiffFlagΪ1ʱЧ*/ - char cTimeDifferenceM; /*UTCʱӣ-30, 30, 45 +ʾbyTimeDiffFlagΪ1ʱЧ*/ - BYTE bySID;//ID + NET_VCA_DEV_INFO struDevInfo; //设备信息 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byShipsNum; //船只数;(正跨越检测线的船只数) + BYTE byShipsNumHead;//船只数;(船头检测船只数) + BYTE byShipsNumEnd; //船只数;(船尾检测船只数) + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + NET_DVR_SHIPSINFO struShipInfo[MAX_SHIPS_NUM/*20*/];//船只信息;最大支持20艘 + DWORD dwPicLen;//可见光图片长度 + DWORD dwThermalPicLen;//热成像图片长度 + BYTE* pPicBuffer; //可见光图片数据指针 + BYTE* pThermalPicBuffer; //热成像图片数据指针 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE bySID;//场景ID BYTE byRes1[2]; - char szSceneName[NAME_LEN];//ƣ32ַ + char szSceneName[NAME_LEN];//场景名称,不超过32字符 BYTE byRes[132]; - DWORD dwXmlLen;//XML͸ݳ, EventNotificationAlert XML Blockݳ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pXmlBuf; // XMLϢָ,XMLӦEventNotificationAlert XML Block + DWORD dwXmlLen;//XML透传数据长度, 即EventNotificationAlert XML Block的数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block #else - char* pXmlBuf; // XMLϢָ,XMLӦEventNotificationAlert XML Block + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block BYTE byRes2[4]; #endif - NET_DVR_SHIPIMAGE_INFO struShipImageInfo[MAX_SHIPIMAGE_NUM/*6*/];//ֻץͼƬϢ,±Ϊ0ʱΪһŴֻץͼƬԴƣ֧6ͼƬ + NET_DVR_SHIPIMAGE_INFO struShipImageInfo[MAX_SHIPIMAGE_NUM/*6*/];//船只抓拍图片信息,数组下标为0时代表为第一张船只抓拍图片,以此类推;最大支持6张图片。 }NET_DVR_SHIPSDETECTION_ALARM, *LPNET_DVR_SHIPSDETECTION_ALARM; typedef struct tagNET_DVR_THERMAL_PIP { - DWORD dwSize;//ṹС - BYTE byEnable;//Ƿ - BYTE byPipMode;// лģʽ0~ģʽ1~ںģʽ2-ͨģʽ - BYTE byOverlapType;//ͣѡлģʽЧ0~ɼȳͼƬ1~ȳӿɼͼƬ - BYTE byTransparency;//͸ 0~100 - NET_VCA_POLYGON struPipRegion;//лλ - BYTE byImageFusionRatio;//ͼںϱ,ںģʽЧ 0-100 Ĭ75 - BYTE byBorderFusionRatio;//Եںϱ,ںģʽЧ 0-100 Ĭ100 + DWORD dwSize;//结构体大小 + BYTE byEnable;//是否启用 + BYTE byPipMode;// 画中画模式,0~叠加模式,1~融合模式,2-普通模式 + BYTE byOverlapType;//叠加类型,选择画中画叠加模式后生效。0~可见光叠加热成像图片,1~热成像叠加可见光图片 + BYTE byTransparency;//透明度 0~100 + NET_VCA_POLYGON struPipRegion;//画中画区域位置 + BYTE byImageFusionRatio;//图像融合比例,融合模式下生效 0-100 默认75 + BYTE byBorderFusionRatio;//边缘融合比例,融合模式下生效 0-100 默认100 BYTE byRes1[2]; - float fDistance;//ںϾ,ںģʽЧ,Χ0.1-4.0 + float fDistance;//融合距离,融合模式下生效,范围0.1-4.0米 BYTE byRes[632]; }NET_DVR_THERMAL_PIP, *LPNET_DVR_THERMAL_PIP; typedef struct tagNET_DVR_RULESLINE_CFG { - NET_DVR_RGB_COLOR struRGB;// RGBRɫGɫBɫ Χ0-255 + NET_DVR_RGB_COLOR struRGB;// RGB参数:R(红色),G(绿色),B(蓝色) 范围0-255 BYTE byRes[128]; }NET_DVR_RULESLINE_CFG, *LPNET_DVR_RULESLINE_CFG; typedef struct tagNET_DVR_THERMAL_INTELRULE_DISPLAY { - DWORD dwSize;//ṹС + DWORD dwSize;//结构体大小 /* - fontSizeType:ΪСſݸñԼԤڵĿȶ̬ıĴСʽΪ屶ֵ/8*(0.01*Ԥڿ) - Ӧ£ - 0~8ʣС - 1~12ʣ׼ - 2~16ʣ - 3~20ʣ - 4~24ʣش + fontSizeType:为字体大小倍率索引,播放库会根据该倍率以及预览窗口的宽度动态改变字体的大小。公式为:具体倍率值/8*(0.01*预览窗口宽度) + 倍率索引对应如下: + 0~8倍率(小) + 1~12倍率(标准) + 2~16倍率(大) + 3~20倍率(超大) + 4~24倍率(特大) */ BYTE byFontSizeType; BYTE byRes1[3]; - NET_DVR_RULESLINE_CFG struNormalRulesLineCfg;//Բ - NET_DVR_RULESLINE_CFG struAlertRulesLineCfg;//ԤԲ - NET_DVR_RULESLINE_CFG struAlarmRulesLineCfg;//Բ + NET_DVR_RULESLINE_CFG struNormalRulesLineCfg;//正常规则线相关属性参数 + NET_DVR_RULESLINE_CFG struAlertRulesLineCfg;//预警规则线相关属性参数 + NET_DVR_RULESLINE_CFG struAlarmRulesLineCfg;//报警规则线相关属性参数 BYTE byRes[640]; }NET_DVR_THERMAL_INTELRULE_DISPLAY, *LPNET_DVR_THERMAL_INTELRULE_DISPLAY; typedef struct tagNET_DVR_BAREDATAOVERLAY_CFG { DWORD dwSize; - BYTE byEnable;//ʹ - BYTE byIntervalTime;// ϴʱã1 2 3 4 5.λΪ룬ĬΪ3 + BYTE byEnable;//使能 + BYTE byIntervalTime;// 上传的时间间隔可配置:1 2 3 4 5.单位为秒,默认为3秒 BYTE byRes[258]; }NET_DVR_BAREDATAOVERLAY_CFG, *LPNET_DVR_BAREDATAOVERLAY_CFG; -//ṹ +//测温联动条件结构 typedef struct tagNET_DVR_THERMOMETRY_TRIGGER_COND { - DWORD dwSize;//ṹС - DWORD dwChan;//ͨ - DWORD dwPreset;//ԤõţĿǰ֧,踳ֵ + DWORD dwSize;//结构体大小 + DWORD dwChan;//通道号 + DWORD dwPreset;//预置点号(目前不支持,无需赋值) BYTE byRes[256]; }NET_DVR_THERMOMETRY_TRIGGER_COND, *LPNET_DVR_THERMOMETRY_TRIGGER_COND; -//ֶ +//手动除冰 typedef struct tagNET_DVR_MANUALDEICING_CFG { - DWORD dwSize;//ṹС - BYTE byEnabled; //Ƿֶ 0~رգ1~ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否启用手动除冰 ,0~关闭,1~启用 BYTE byRes[127]; }NET_DVR_MANUALDEICING_CFG, *LPNET_DVR_MANUALDEICING_CFG; -//СLED +//小间距LED控制器 typedef struct tagNET_DVR_INPUT_SOURCE_TEXT_COND { DWORD dwSize; - DWORD dwInputSourceNo; //Դ - DWORD dwTextNo; //ı + DWORD dwInputSourceNo; //输入源编号 + DWORD dwTextNo; //文本编号 BYTE byRes[32]; }NET_DVR_INPUT_SOURCE_TEXT_COND, *LPNET_DVR_INPUT_SOURCE_TEXT_COND; typedef struct tagNET_DVR_INPUT_SOURCE_TEXT { DWORD dwSize; - DWORD dwTextNo; //ı - BYTE byEnable; //Ƿʹܣ0-ʹܣ1-ʹ - BYTE byFontSize; //С - BYTE byBkGroudMode; //ģʽ1-͸2- + DWORD dwTextNo; //文本编号 + BYTE byEnable; //是否使能,0-不使能,1-使能 + BYTE byFontSize; //字体大小 + BYTE byBkGroudMode; //背景模式,1-透明,2-覆盖 BYTE byRes[1]; - DWORD dwXPosition; //ַʾλõϽX꣬Դ - DWORD dwYPosition; //ַʾλõϽY꣬Դ - NET_DVR_RGB_COLOR struForegroudColor; //ַǰɫ - NET_DVR_RGB_COLOR struBackgroudColor; //ַɫ - BYTE byTextContent[MAX_LEN_TEXT_CONTENT]; //ַ + DWORD dwXPosition; //字符显示位置的左上角X坐标,输入源相对坐标 + DWORD dwYPosition; //字符显示位置的左上角Y坐标,输入源相对坐标 + NET_DVR_RGB_COLOR struForegroudColor; //字符前景色 + NET_DVR_RGB_COLOR struBackgroudColor; //字符背景色 + BYTE byTextContent[MAX_LEN_TEXT_CONTENT]; //字符内容 BYTE byRes1[64]; }NET_DVR_INPUT_SOURCE_TEXT, *LPNET_DVR_INPUT_SOURCE_TEXT; typedef struct tagNET_DVR_INPUT_SOURCE_TEXT_LIST { DWORD dwSize; - NET_DVR_INPUT_SOURCE_TEXT struTextList[MAX_NUM_INPUT_SOURCE_TEXT]; //ıб + NET_DVR_INPUT_SOURCE_TEXT struTextList[MAX_NUM_INPUT_SOURCE_TEXT]; //文本列表 BYTE byRes[64]; }NET_DVR_INPUT_SOURCE_TEXT_LIST, *LPNET_DVR_INPUT_SOURCE_TEXT_LIST; typedef struct tagNET_DVR_INPUT_SOURCE_RESOLUTION { DWORD dwSize; - DWORD dwInputSignalNo; //Դ - BYTE byEnabled; //ԶֱǷʹ + DWORD dwInputSignalNo; //输入源编号 + BYTE byEnabled; //自定义分辨率是否使能 BYTE byRes; - WORD wImageWidth; //ͼ - WORD wImageHeight; //ͼ߶ - WORD wRefreshRate; //ˢƵ - BYTE byColorDepth; //ɫȣ32λ16λ8λֿѡ - BYTE byScanType; //ɨͣ1-ɨ裬2-ɨ + WORD wImageWidth; //图像宽度 + WORD wImageHeight; //图像高度 + WORD wRefreshRate; //刷新频率 + BYTE byColorDepth; //颜色深度,32位、16位、8位三种可选 + BYTE byScanType; //扫描类型,1-逐行扫描,2-间隔扫描 BYTE byRes1[62]; }NET_DVR_INPUT_SOURCE_RESOLUTION, *LPNET_DVR_INPUT_SOURCE_RESOLUTION; typedef struct tagNET_DVR_INPUT_SOURCE_RESOLUTION_LIST { DWORD dwSize; - DWORD dwInputSignalCnt; //豸źԴ - LPNET_DVR_INPUT_SOURCE_RESOLUTION lpstruBuffer; //ָ - DWORD dwBufferSize; //С + DWORD dwInputSignalCnt; //设备输入信号源数量 + LPNET_DVR_INPUT_SOURCE_RESOLUTION lpstruBuffer; //缓冲区指针 + DWORD dwBufferSize; //缓冲区大小 BYTE byRes[32]; }NET_DVR_INPUT_SOURCE_RESOLUTION_LIST, *LPNET_DVR_INPUT_SOURCE_RESOLUTION_LIST; typedef struct tagNET_DVR_LED_AREA_COND { DWORD dwSize; - DWORD dwVideoWallNo; //ǽ - DWORD dwLEDAreaNo; //LED + DWORD dwVideoWallNo; //电视墙编号 + DWORD dwLEDAreaNo; //LED区域编号 BYTE byRes[32]; }NET_DVR_LED_AREA_COND, *LPNET_DVR_LED_AREA_COND; typedef struct tagNET_DVR_LED_AREA_INFO { DWORD dwSize; - DWORD dwLEDAreaNo; //LED - NET_DVR_RECTCFG_EX struRect; // - DWORD dwaOutputNo[MAX_NUM_OUTPUT_CHANNEL]; //б - BYTE byAreaType; //ͣ0-LED1-LCD + DWORD dwLEDAreaNo; //LED区域编号 + NET_DVR_RECTCFG_EX struRect; //矩形区域 + DWORD dwaOutputNo[MAX_NUM_OUTPUT_CHANNEL]; //输出口列表 + BYTE byAreaType; //区域类型,0-LED区域,1-LCD区域 BYTE byRes[31]; }NET_DVR_LED_AREA_INFO, *LPNET_DVR_LED_AREA_INFO; typedef struct tagNET_DVR_LED_AREA_INFO_LIST { DWORD dwSize; - DWORD dwLEDAreaNum; //LED - LPNET_DVR_LED_AREA_INFO lpstruBuffer; //ָ - DWORD dwBufferSize; //С + DWORD dwLEDAreaNum; //LED区域数量 + LPNET_DVR_LED_AREA_INFO lpstruBuffer; //缓冲区指针 + DWORD dwBufferSize; //缓冲区大小 BYTE byRes[32]; }NET_DVR_LED_AREA_INFO_LIST, *LPNET_DVR_LED_AREA_INFO_LIST; -//еȴ +//呼叫等待参数 typedef struct tagNET_DVR_CALL_WAITTING_CFG { - DWORD dwSize; //ṹС - BYTE byEnable; //Ƿúеȴ, 0--ã1-- + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用呼叫等待, 0--不启用,1--启用 BYTE byRes1; - WORD wWaitTime;//еȴʱ䣬λ - WORD wCalledWaitTime;/*λ룬еȴʱ*/ + WORD wWaitTime;//呼叫等待时间,单位秒 + WORD wCalledWaitTime;/*单位秒,被呼叫等待时间*/ BYTE byRes[510]; }NET_DVR_CALL_WAITTING_CFG, *LPNET_DVR_CALL_WAITTING_CFG; -//Ʋ +//警灯参数 typedef struct tagNET_DVR_ALARM_LAMP_CFG { - DWORD dwSize; //ṹС - BYTE byEnable; //Ƿþƶʱ˸, 0--ã1-- + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用警灯定时闪烁, 0--不启用,1--启用 BYTE byRes1; - WORD wFlashDuration;//ƶʱ˸ʱ䣬λ - WORD wFlashIntervalTime;//˸ʱ䣬λ + WORD wFlashDuration;//警灯定时闪烁持续时间,单位秒 + WORD wFlashIntervalTime;//警灯闪烁间隔时间,单位秒 BYTE byRes[510]; }NET_DVR_ALARM_LAMP_CFG, *LPNET_DVR_ALARM_LAMP_CFG; -//ʾ +//语音提示参数 typedef struct tagNET_DVR_VOICE_PROMPTION_CFG { - DWORD dwSize; //ṹС - BYTE byEnable; //Ƿʾ, 0--ã1-- + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用语音提示, 0--不启用,1--启用 BYTE byRes1[3]; - BYTE byCenterBusyFile[NAME_LEN];//ķæʾļ - BYTE byRefusedFile[NAME_LEN];//ܾʾļ - BYTE byHangUpFile[NAME_LEN];//Խʾļ - BYTE byCallWaittingFile[NAME_LEN];//еȺļ - BYTE byConsultWaittingFile[NAME_LEN];//ҵѯȺļ - BYTE byWelcomeFile[NAME_LEN];//ӭʾļ - BYTE byFarewellFile[NAME_LEN];//ļ - BYTE byCalledVoicePromptName[NAME_LEN];//ʾ + BYTE byCenterBusyFile[NAME_LEN];//中心繁忙提示语音文件名 + BYTE byRefusedFile[NAME_LEN];//拒绝提示语音文件名 + BYTE byHangUpFile[NAME_LEN];//对讲结束提示语音文件名 + BYTE byCallWaittingFile[NAME_LEN];//呼叫等候音文件名 + BYTE byConsultWaittingFile[NAME_LEN];//业务咨询等候音文件名 + BYTE byWelcomeFile[NAME_LEN];//欢迎提示语音文件名 + BYTE byFarewellFile[NAME_LEN];//欢送语音文件 + BYTE byCalledVoicePromptName[NAME_LEN];//被呼叫语音提示名 BYTE byRes[384]; }NET_DVR_VOICE_PROMPTION_CFG, *LPNET_DVR_VOICE_PROMPTION_CFG; -// +//紧急报警处理 typedef struct tagNET_DVR_EMERGENCE_ALARM_RSP_CTRL_CFG { - DWORD dwSize; //ṹС - BYTE byCommand; //0--centerbusy1--refuse - BYTE byType; //ͣ01ҵѯ + DWORD dwSize; //结构体大小 + BYTE byCommand; //控制命令,0--centerbusy,1--refuse + BYTE byType; //处理类型,0—紧急报警,1—业务咨询 BYTE byRes[510]; }NET_DVR_EMERGENCE_ALARM_RSP_CTRL_CFG, *LPNET_DVR_EMERGENCE_ALARM_RSP_CTRL_CFG; -///////////*_V50///////////// +///////////*网络参数配置_V50///////////// typedef struct _tagNET_DVR_ALARMHOST_NETPARAM_V50 { DWORD dwSize; NET_DVR_IPADDR struIP; WORD wPort; - BYTE byAddressType; //0 - , 1 - ipv4/ipv6ַ2 - - BYTE byEnable; //ʹܣ0-ã1- - BYTE byDomainName[MAX_DOMAIN_NAME/*64*/]; //GPRSáʱֶξЧ + BYTE byAddressType; //0 - 无意义, 1 - ipv4/ipv6地址,2 - 域名 + BYTE byEnable; //使能,0-不启用,1-启用 + BYTE byDomainName[MAX_DOMAIN_NAME/*64*/]; //域名,GPRS参数配置、网络参数配置时该字段均有效 BYTE byReportProtocol; //1-private 2-NAL2300, 3-Ehome - BYTE byDevID[ACCOUNTNUM_LEN_32/*32*/]; //ЭΪNAL2300ʱЧ - BYTE byProtocolVersion; //EHomeЭ汾0-,1Cv2.02Cv4.03-v5.0 + BYTE byDevID[ACCOUNTNUM_LEN_32/*32*/]; //协议为NAL2300时有效 + BYTE byProtocolVersion; //EHome协议版本,0-无意义,1–v2.0,2–v4.0,3-v5.0 BYTE byRes1[3]; - BYTE byEHomeKey[NET_SDK_EHOME_KEY_LEN]; //EHome KeyEHome 5.0汾 - BYTE byRes2[28]; //GPRSڹ̶ķϽеģԲҪϢԤһЩֶ + BYTE byEHomeKey[NET_SDK_EHOME_KEY_LEN]; //EHome Key(用于EHome 5.0版本) + BYTE byRes2[28]; //GPRS的域名解析是在固定的服务器上进行的,所以不需要给解析服务器的信息预留一些字段 } NET_DVR_ALARMHOST_NETPARAM_V50, *LPNET_DVR_ALARMHOST_NETPARAM_V50; typedef struct _tagNET_DVR_ALARMHOST_NETCFG_V50 @@ -50493,46 +50493,46 @@ typedef struct _tagNET_DVR_ALARMHOST_NETCFG_V50 NET_DVR_ALARMHOST_NETPARAM_V50 struNetCenter[MAX_CENTERNUM]; BYTE byRes1[128]; } NET_DVR_ALARMHOST_NETCFG_V50, *LPNET_DVR_ALARMHOST_NETCFG_V50; -//Ŀװʽ +//目标封装格式类型 typedef enum tagSTREAM_TYPE{ - STREAM_PS = 0x1, //PSļ㣬Ҫڴ洢Ҳڴ - STREAM_3GPP = 0x2, //3GPPļ㣬ڴ洢 + STREAM_PS = 0x1, //PS文件层,主要用于存储,也可用于传输 + STREAM_3GPP = 0x2, //3GPP文件层,用于存储 }STREAM_TYPE; typedef enum tagNET_SDK_INIT_CFG_TYPE { - NET_SDK_INIT_CFG_TYPE_CHECK_MODULE_COM = 0, //ӶԱļ - NET_SDK_INIT_CFG_ABILITY = 1, //sdkֵ֧ҵ - NET_SDK_INIT_CFG_SDK_PATH = 2, //HCNetSDKĿ¼ - NET_SDK_INIT_CFG_LIBEAY_PATH = 3, //OpenSSLlibeay32.dll/libcrypto.so/libcrypto.dylib· - NET_SDK_INIT_CFG_SSLEAY_PATH = 4, //OpenSSLssleay32.dll/libssl.so/libssl.dylib· - NET_SDK_INIT_CFG_MORE_MAX = 5 //Ƿִ֧·½Ԥ + NET_SDK_INIT_CFG_TYPE_CHECK_MODULE_COM = 0, //增加对必须库的检查 + NET_SDK_INIT_CFG_ABILITY = 1, //sdk支持的业务的能力集 + NET_SDK_INIT_CFG_SDK_PATH = 2, //设置HCNetSDK库所在目录 + NET_SDK_INIT_CFG_LIBEAY_PATH = 3, //设置OpenSSL的libeay32.dll/libcrypto.so/libcrypto.dylib所在路径 + NET_SDK_INIT_CFG_SSLEAY_PATH = 4, //设置OpenSSL的ssleay32.dll/libssl.so/libssl.dylib所在路径 + NET_SDK_INIT_CFG_MORE_MAX = 5 //设置是否支持大路数登陆预览 }NET_SDK_INIT_CFG_TYPE; typedef struct tagNET_DVR_INIT_CHECK_MODULE_COM { - BYTE byEnable; //ñ 0-ã1- + BYTE byEnable; //启用必须库检查机制 0-不启用,1-启用 BYTE byRes[255]; }NET_DVR_INIT_CHECK_MODULE_COM, *LPNET_DVR_INIT_CHECK_MODULE_COM; -//SDKֵ֧· +//SDK支持的最大路数能力集 typedef enum _INIT_CFG_MAX_NUM { - INIT_CFG_NUM_2048 = 2048, // 2048· - INIT_CFG_NUM_5120 = 5120, //5120· - INIT_CFG_NUM_10240 = 10240, // 10240· - INIT_CFG_NUM_15360 = 15360, // 15360· - INIT_CFG_NUM_20480 = 20480, // 20480· + INIT_CFG_NUM_2048 = 2048, // 2048路 + INIT_CFG_NUM_5120 = 5120, //5120路 + INIT_CFG_NUM_10240 = 10240, // 10240路 + INIT_CFG_NUM_15360 = 15360, // 15360路 + INIT_CFG_NUM_20480 = 20480, // 20480路 }INIT_CFG_MAX_NUM; typedef struct tagNET_DVR_INIT_CFG_ABILITY { - INIT_CFG_MAX_NUM enumMaxLoginUsersNum; //עû - INIT_CFG_MAX_NUM enumMaxAlarmNum; //ĸ澯· + INIT_CFG_MAX_NUM enumMaxLoginUsersNum; //最多允许的注册用户个数。 + INIT_CFG_MAX_NUM enumMaxAlarmNum; //最大的告警路数 BYTE byRes[64]; }NET_DVR_INIT_CFG_ABILITY, *LPNET_DVR_INIT_CFG_ABILITY; typedef struct tagNET_DVR_LOCAL_SDK_PATH { - char sPath[NET_SDK_MAX_FILE_PATH];//ַ + char sPath[NET_SDK_MAX_FILE_PATH];//组件库地址 BYTE byRes[128]; }NET_DVR_LOCAL_SDK_PATH, *LPNET_DVR_LOCAL_SDK_PATH; @@ -50544,282 +50544,282 @@ typedef struct tagNET_DVR_SDKMEMPOOL_CFG typedef struct tagNET_DVR_RES_INFO { - DWORD dwImageWidth; //ͼ - DWORD dwImageHeight; //ͼ߶ + DWORD dwImageWidth; //图像宽度 + DWORD dwImageHeight; //图像高度 }NET_DVR_RES_INFO, *LPNET_DVR_RES_INFO; typedef struct tagNET_DVR_VS_INPUT_CHAN_INIT { DWORD dwSize; - DWORD dwVSInputChan; //ͨ - DWORD dwResNums; //ֱʵĸ - NET_DVR_RES_INFO struResList[MAX_RES_NUM_ONE_VS_INPUT_CHAN]; //ֱб + DWORD dwVSInputChan; //虚拟屏输入通道号 + DWORD dwResNums; //分辨率的个数 + NET_DVR_RES_INFO struResList[MAX_RES_NUM_ONE_VS_INPUT_CHAN]; //分辨率列表 BYTE byRes[32]; }NET_DVR_VS_INPUT_CHAN_INIT, *LPNET_DVR_VS_INPUT_CHAN_INIT; typedef struct tagNET_DVR_VS_INPUT_CHAN_INIT_LIST { DWORD dwSize; - NET_DVR_VS_INPUT_CHAN_INIT struChanList[MAX_VS_INPUT_CHAN_NUM]; //ͨб + NET_DVR_VS_INPUT_CHAN_INIT struChanList[MAX_VS_INPUT_CHAN_NUM]; //通道列表 BYTE byRes[32]; }NET_DVR_VS_INPUT_CHAN_INIT_LIST, *LPNET_DVR_VS_INPUT_CHAN_INIT_LIST; typedef struct tagNET_DVR_VS_INPUT_CHAN_CFG { DWORD dwSize; - DWORD dwVSInputChan; //ͨ - NET_DVR_RES_INFO struResolutin; //ֱ + DWORD dwVSInputChan; //虚拟屏输入通道号 + NET_DVR_RES_INFO struResolutin; //分辨率 BYTE byRes[64]; }NET_DVR_VS_INPUT_CHAN_CFG, *LPNET_DVR_VS_INPUT_CHAN_CFG; typedef struct tagNET_DVR_VS_NETSRC_CFG { DWORD dwSize; - DWORD dwVSInputChan; //ͨ - BYTE byDispUrl[MAX_URL_LEN]; //ʾURL - BYTE byEnabled; //ǷURL + DWORD dwVSInputChan; //虚拟屏输入通道号 + BYTE byDispUrl[MAX_URL_LEN]; //显示URL + BYTE byEnabled; //是否启用URL BYTE byRes[127]; }NET_DVR_VS_NETSRC_CFG, *LPNET_DVR_VS_NETSRC_CFG; typedef struct tagNET_DVR_EDID_FILE_INFO { DWORD dwSize; - DWORD dwEDIDFileNo; //EDIDļţ1ʼ - BYTE byFileName[FILE_NAME_LEN]; //EDIDļ + DWORD dwEDIDFileNo; //EDID文件编号,从1开始 + BYTE byFileName[FILE_NAME_LEN]; //EDID文件名称 BYTE byRes[32]; }NET_DVR_EDID_FILE_INFO, *LPNET_DVR_EDID_FILE_INFO; typedef struct tagNET_DVR_EDID_FILE_INFO_LIST { DWORD dwSize; - DWORD dwEDIDFileNum; //صNET_DVR_EDID_FILE_INFO - LPNET_DVR_EDID_FILE_INFO lpstruBuffer; //ָ - DWORD dwBufferSize; //С + DWORD dwEDIDFileNum; //返回的NET_DVR_EDID_FILE_INFO个数 + LPNET_DVR_EDID_FILE_INFO lpstruBuffer; //缓冲区指针 + DWORD dwBufferSize; //缓冲区大小 BYTE byRes[32]; }NET_DVR_EDID_FILE_INFO_LIST, *LPNET_DVR_EDID_FILE_INFO_LIST; -//ӴڽOSD +//子窗口解码OSD typedef struct tagNET_DVR_OSD_INFO { - BYTE byEnabled; //Ƿʹܣ-ʹܣ-ʹ - BYTE byEnabledFlash; //Ƿ˸-˸-˸ - BYTE byFontSize; //С1-2-У3-С - BYTE byTransparent; //͸ȣȡֵΧ0-100 - NET_DVR_RGB_COLOR struColor; //ɫ - WORD wCoordinateX; //OSDϽX - WORD wCoordinateY; //OSDϽY - BYTE byContent[MAX_LEN_OSD_CONTENT]; //OSDϢ + BYTE byEnabled; //是否使能,零-不使能,非零-使能 + BYTE byEnabledFlash; //是否闪烁,零-不闪烁,非零-闪烁 + BYTE byFontSize; //字体大小,1-大,2-中,3-小 + BYTE byTransparent; //透明度,取值范围0-100 + NET_DVR_RGB_COLOR struColor; //字体颜色 + WORD wCoordinateX; //OSD左上角X坐标 + WORD wCoordinateY; //OSD左上角Y坐标 + BYTE byContent[MAX_LEN_OSD_CONTENT]; //OSD信息 BYTE byRes[32]; }NET_DVR_OSD_INFO, *LPNET_DVR_OSD_INFO; typedef struct tagNET_DVR_SUBWND_DECODE_OSD { DWORD dwSize; - DWORD dwSubWndNo; //Ӵںţ4ֽϷʽ - DWORD dwOSDNums; //ӴõOSDϢĸ - NET_DVR_OSD_INFO struOSDList[MAX_NUM_OSD_ONE_SUBWND]; //OSDϢб + DWORD dwSubWndNo; //子窗口号(4字节组合方式) + DWORD dwOSDNums; //该子窗口配置的OSD信息的个数 + NET_DVR_OSD_INFO struOSDList[MAX_NUM_OSD_ONE_SUBWND]; //OSD信息列表 BYTE byRes[32]; }NET_DVR_SUBWND_DECODE_OSD, *LPNET_DVR_SUBWND_DECODE_OSD; typedef struct tagNET_DVR_SUBWND_DECODE_OSD_LIST { DWORD dwSize; - NET_DVR_SUBWND_DECODE_OSD struSubWndList[MAX_NUM_SPLIT_WND]; //ӴڵĽOSD + NET_DVR_SUBWND_DECODE_OSD struSubWndList[MAX_NUM_SPLIT_WND]; //所有子窗口的解码OSD BYTE byRes[32]; }NET_DVR_SUBWND_DECODE_OSD_LIST, *LPNET_DVR_SUBWND_DECODE_OSD_LIST; typedef struct tagNET_DVR_DECODE_CHANNEL_OSD { DWORD dwSize; - NET_DVR_OSD_INFO struOSDInfo[MAX_NUM_OSD]; //OSDϢб + NET_DVR_OSD_INFO struOSDInfo[MAX_NUM_OSD]; //OSD信息列表 BYTE byRes[32]; }NET_DVR_DECODE_CHANNEL_OSD, *LPNET_DVR_DECODE_CHANNEL_OSD; -//ȳܻò +//热成像智能互斥配置参数 typedef struct tagNET_DVR_THERMINTELL_PARAM { - DWORD dwSize;//ṹС - BYTE byIntellType; //ܹԴ,0~+쳣Ϊ(Ĭ)1~ֻ⣬2~,3~л, 4~£5-+̻⣬6-+ 7-Ϊ 8- + DWORD dwSize;//结构体大小 + BYTE byIntellType; //智能功能资源配置类型,0~测温+异常行为检测(默认),1~船只检测,2~火点检测,3~画中画功能, 4~人脸测温,5-测温+烟火检测,6-测温+火点检测 7-行为分析 8-测温 BYTE byRes[127]; }NET_DVR_THERMINTELL_PARAM, *LPNET_DVR_THERMINTELL_PARAM; typedef struct tagNET_DVR_FACE_THERMOMETRY_ALARM { DWORD dwSize; - DWORD dwChannel;//ͨ - BYTE byRuleID; //¹ID:1-40 + DWORD dwChannel;//通道号 + BYTE byRuleID; //人脸测温规则ID:1-40 BYTE byRes1[3]; - BYTE byRuleName[NAME_LEN]; // - DWORD dwRelativeTime; //ʱ - DWORD dwAbsTime; //ʱ - BYTE byFaceDetectionState;//״̬0~δ⵽1~Ѽ⵽ - BYTE byThermometryUnit;//µλ: 0-϶ȣ棩1-϶ȣH2-(K) - BYTE byAlarmRule;//0-´ڣ1-С + BYTE byRuleName[NAME_LEN]; //规则名称 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byFaceDetectionState;//人脸检测状态;0~未检测到人脸,1~已检测到人脸 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + BYTE byAlarmRule;//报警规则;0-最高温大于,1-最高温小于 BYTE byRes2[1]; - float fAlarmTemperature;//¶ȣ-20.0~120.0棬ȷС1λ - float fRuleTemperature;// ñ¶ȣ-20.0~60.0棬ȷС1λ - DWORD dwVisibleLightImageLen;// ɼͼƬ - BYTE *pVisibleLightImage; //ɼͼƬָ - DWORD dwFaceImageLen;// ͼ - BYTE *pFaceImage; //ͼָ - NET_VCA_RECT struFaceRegion;//Ŀ߽豸ʶץͼƬУͼ - float fMinTemperature;// ¶ȣ-20.0~120.0棬ȷС1λ - float fAverageTemperature;//ƽ£-20.0~120.0棬ȷС1λ - NET_VCA_POINT struMinTemperaturePoint; //¶λ - NET_VCA_POINT struMaxTemperaturePoint;//¶λ + float fAlarmTemperature;//触发报警温度(-20.0~120.0℃,精确到小数点后1位) + float fRuleTemperature;// 规则配置报警温度(-20.0~60.0℃,精确到小数点后1位) + DWORD dwVisibleLightImageLen;// 可见光图片长度 + BYTE *pVisibleLightImage; //可见光图片指针 + DWORD dwFaceImageLen;// 人脸子图长度 + BYTE *pFaceImage; //人脸子图指针 + NET_VCA_RECT struFaceRegion;//人脸目标边界框,设备识别抓拍图片中,人脸子图坐标 + float fMinTemperature;// 最低温度(-20.0~120.0℃,精确到小数点后1位) + float fAverageTemperature;//平均温(-20.0~120.0℃,精确到小数点后1位) + NET_VCA_POINT struMinTemperaturePoint; //最低温度位置坐标 + NET_VCA_POINT struMaxTemperaturePoint;//最高温度位置坐标 BYTE byRes[720]; }NET_DVR_FACE_THERMOMETRY_ALARM, *LPNET_DVR_FACE_THERMOMETRY_ALARM; -//GUIDļ +//导出GUID文件 typedef struct tagNET_DVR_GUID_FILE_EXPORT { DWORD dwSize; - char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/]; //û¼ + char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/]; //用户登录密码 BYTE byRes[128]; }NET_DVR_GUID_FILE_EXPORT, *LPNET_DVR_GUID_FILE_EXPORT; -//û¼У +//用户登录密码校验 typedef struct tagNET_DVR_LOGIN_PASSWORDCFG { DWORD dwSize; - char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/]; //û¼ + char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/]; //用户登录密码 BYTE byRes[256]; }NET_DVR_LOGIN_PASSWORDCFG, *LPNET_DVR_LOGIN_PASSWORDCFG; -//ȫ +//单个安全问题配置 typedef struct tagNET_DVR_SINGLE_SECURITY_QUESTION_CFG { DWORD dwSize; - DWORD dwId;//ţȫţֻ - char sAnswer[NET_SDK_MAX_ANSWER_LEN/*256*/];//𰸣ȡʱֻ - BYTE byMark;// 0-δ 1- + DWORD dwId;//序号(安全问题序号,只读) + char sAnswer[NET_SDK_MAX_ANSWER_LEN/*256*/];//答案(获取时只读) + BYTE byMark;//标记 0-未设置 1-已设置 BYTE byRes[127]; }NET_DVR_SINGLE_SECURITY_QUESTION_CFG, *LPNET_DVR_SINGLE_SECURITY_QUESTION_CFG; -//ȫ +//安全问题配置 typedef struct tagNET_DVR_SECURITY_QUESTION_CFG { DWORD dwSize; - NET_DVR_SINGLE_SECURITY_QUESTION_CFG struSecurityQuestion[NET_SDK_MAX_QUESTION_LIST_LEN/*32*/];//ȫб - char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/];//Աû¼ + NET_DVR_SINGLE_SECURITY_QUESTION_CFG struSecurityQuestion[NET_SDK_MAX_QUESTION_LIST_LEN/*32*/];//安全问题列表 + char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/];//管理员用户登录密码 BYTE byRes[512]; }NET_DVR_SECURITY_QUESTION_CFG, *LPNET_DVR_SECURITY_QUESTION_CFG; typedef struct tagNET_DVR_ALARMIN_TRIGGER_COND { DWORD dwSize; - DWORD dwChannel; //ͨţ1ʼ - DWORD dwAlarmInNo;//ţ0ʼ + DWORD dwChannel; //通道号,从1开始 + DWORD dwAlarmInNo;//防区号,从0开始 BYTE byRes[256]; }NET_DVR_ALARMIN_TRIGGER_COND, *LPNET_DVR_ALARMIN_TRIGGER_COND; typedef struct tagNET_DVR_FACELIB_GUARD_COND { DWORD dwSize; - DWORD dwChannel; //ͨ - char szFDID[68];//ID + DWORD dwChannel; //通道号 + char szFDID[68];//人脸库的ID BYTE byRes[128]; }NET_DVR_FACELIB_GUARD_COND, *LPNET_DVR_FACELIB_GUARD_COND; typedef struct tagNET_DVR_GUID_FILE_STATUS_INFO { DWORD dwSize; - BYTE byLockStatus; //0δ1 - BYTE byPasswd; //0:1ȷע:ֵδʱЧ - BYTE byRetryNum; //ʣೢԴע:ֵδʱЧ + BYTE byLockStatus; //0:未锁定,1:锁定 + BYTE byPasswd; //0:密码错误,1:密码正确。注:该值未锁定时有效。 + BYTE byRetryNum; //剩余尝试次数。注:该值未锁定时有效 BYTE byRes1; - DWORD dwLockTime; //ʣʱ䣺λ롣ע:ֵʱЧ + DWORD dwLockTime; //剩余锁定时间:单位秒。注:该值锁定时有效 BYTE byRes[128]; }NET_DVR_GUID_FILE_STATUS_INFO, *LPNET_DVR_GUID_FILE_STATUS_INFO; -//ģʽ +//测温模式配置 typedef struct tagNET_DVR_THERMOMETRY_MODE { - DWORD dwSize;//ṹС - BYTE byMode;//ģʽ0~ͨģʽ1~רģʽ - BYTE byThermometryROIEnabled; //ROIʹ 0- 1- 2-ڻݿǣ + DWORD dwSize;//结构体大小 + BYTE byMode;//测温模式,0~普通模式,1~专家模式 + BYTE byThermometryROIEnabled; //测温ROI使能 0-保留 1-不开启 2-开启(基于互斥兼容考虑) BYTE byRes[62]; }NET_DVR_THERMOMETRY_MODE, *LPNET_DVR_THERMOMETRY_MODE; -//ȳ㷨汾ȡ +//热成像相关算法库版本获取 typedef struct tagNET_DVR_THERMAL_ALGINFO { - DWORD dwSize;//ṹС - char sThermometryAlgName[NET_SDK_MAX_THERMOMETRYALGNAME/*128*/];//㷨汾 - char sShipsAlgName[NET_SDK_MAX_SHIPSALGNAME /*128*/];//ֻ㷨汾 - char sFireAlgName[NET_SDK_MAX_FIRESALGNAME /*128*/];//㷨汾 + DWORD dwSize;//结构体大小 + char sThermometryAlgName[NET_SDK_MAX_THERMOMETRYALGNAME/*128*/];//测温算法库版本名称 + char sShipsAlgName[NET_SDK_MAX_SHIPSALGNAME /*128*/];//船只算法库版本名称 + char sFireAlgName[NET_SDK_MAX_FIRESALGNAME /*128*/];//火点检测算法库版本名称 BYTE byRes[768]; }NET_DVR_THERMAL_ALGINFO, *LPNET_DVR_THERMAL_ALGINFO; -// +//电流锁定配置 typedef struct tagNET_DVR_CURRENT_LOCK { - DWORD dwSize;//ṹС - BYTE byCurrentLock;//ֱ̨0~1~ȫ2~3/43~ + DWORD dwSize;//结构体大小 + BYTE byCurrentLock;//云台垂直电机锁定电流,0~不锁定,1~全流锁定,2~3/4流锁定,3~半流锁定 BYTE byRes[255]; }NET_DVR_CURRENT_LOCK, *LPNET_DVR_CURRENT_LOCK; -//ȶԱ͸ʽ +//脸比对报警(数据透传方式) typedef struct tagNET_VCA_FACESNAP_RAWDATA_ALARM_ { - DWORD dwSize; //ṹС - DWORD dwRelativeTime; // ʱ - DWORD dwAbsTime; // ʱ - NET_VCA_DEV_INFO struDevInfo; //ǰ豸Ϣ - DWORD dwJsonDataLen; //jsonݶϢ0-ûݣ0ʾݣṹŵjsonݳȣ - BYTE* pJsonBuff;// jsonָ - BYTE byRes[256]; // ֽ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwJsonDataLen; //json数据定义信息,0-没有数据,非0表示有数据(即结构体后跟着的json数据长度) + BYTE* pJsonBuff;// json数据指针 + BYTE byRes[256]; // 保留字节 }NET_VCA_FACESNAP_RAWDATA_ALARM, *LPNET_VCA_FACESNAP_RAWDATA_ALARM; -//߼У +//高级校正参数 typedef struct tagNET_DVR_ADVANCE_SCREEN_CHECK_PARAM { - BYTE byDelFullScreenGamut; /*Ƿɾɫ,0-,1-ǣbyOperateType Ϊ3-ɾУʱЧ*/ - BYTE byDelLightPanelGamut; /*Ƿɾưɫ,0-,1-ǣbyOperateType Ϊ3-ɾУʱЧ*/ - BYTE byDelLightPanelWhiteBalance; /*Ƿɾưƽ,0-,1-ǣbyOperateType Ϊ3-ɾУʱЧ*/ + BYTE byDelFullScreenGamut; /*是否删除整屏色域参数,0-否,1-是,byOperateType 为3-删除校正数据时有效*/ + BYTE byDelLightPanelGamut; /*是否删除灯板色域参数,0-否,1-是,byOperateType 为3-删除校正数据时有效*/ + BYTE byDelLightPanelWhiteBalance; /*是否删除灯板白平衡参数,0-否,1-是,byOperateType 为3-删除校正数据时有效*/ BYTE byRes[13]; }NET_DVR_ADVANCE_SCREEN_CHECK_PARAM, *LPNET_DVR_ADVANCE_SCREEN_CHECK_PARAM; -//LEDĻУ +//LED屏幕校正参数 typedef struct tagNET_SDK_LED_SCREEN_CHECK_PARAM { DWORD dwSize; - BYTE byOperateType; //ͣ1-дУݣ2-УԤ3-ɾУݣ4-ԭʼݣ5-УԭʼԤ - BYTE byIsRGBSynChk; //RGBǷͬ0-֧֣!0-֧֣byOperateTypeΪ12ʱЧ - BYTE byScreenCheckType; //ĻУ,0-ͨУ,1-߼У + BYTE byOperateType; //操作类型,1-写入校正数据,2-校正预览,3-删除校正数据,4-加载原始数据,5-校正原始数据预览 + BYTE byIsRGBSynChk; //RGB是否同步调整,0-不支持,!0-支持,byOperateType为1、2时有效 + BYTE byScreenCheckType; //屏幕校正类型,0-普通校正,1-高级校正 BYTE byRes1; - WORD wRgbPermil; //RGBͬǧֱȣbyOperateTypeΪ12byIsRGBSynChkʱЧ - WORD wRedPermil; //ɫǧֱȣbyOperateTypeΪ12byIsRGBSynChkΪʱЧ - WORD wGreenPermil; //ɫǧֱȣbyOperateTypeΪ12byIsRGBSynChkΪʱЧ - WORD wBluePermil; //ɫǧֱȣbyOperateTypeΪ12byIsRGBSynChkΪʱЧ - DWORD dwRectCount; // - NET_DVR_RECTCFG_EX struRectList[MAX_SCREEN_AREA_NUM]; //б˳ - NET_DVR_ADVANCE_SCREEN_CHECK_PARAM struAdvanceScreenCheckParam;//߼У,byScreenCheckTypeΪ1ʱЧ + WORD wRgbPermil; //RGB同步调整的千分比,byOperateType为1、2且byIsRGBSynChk非零时有效 + WORD wRedPermil; //红色调整的千分比,byOperateType为1、2且byIsRGBSynChk为零时有效 + WORD wGreenPermil; //绿色调整的千分比,byOperateType为1、2且byIsRGBSynChk为零时有效 + WORD wBluePermil; //蓝色调整的千分比,byOperateType为1、2且byIsRGBSynChk为零时有效 + DWORD dwRectCount; //矩形区域的数量 + NET_DVR_RECTCFG_EX struRectList[MAX_SCREEN_AREA_NUM]; //矩形区域列表,顺序存放 + NET_DVR_ADVANCE_SCREEN_CHECK_PARAM struAdvanceScreenCheckParam;//高级校正参数,仅byScreenCheckType为1时生效 BYTE byRes2[48]; }NET_SDK_LED_SCREEN_CHECK_PARAM, *LPNET_SDK_LED_SCREEN_CHECK_PARAM; -//LEDĻУӦ +//LED屏幕校正响应数据 typedef struct tagNET_SDK_SCREEN_CHECK_RESPONSE_DATA { DWORD dwSize; - BYTE byDataType; //ͣ1-ȣȣ2-״̬ - BYTE byOperateType; //ͣ1-дУݣ2-УԤ3-ɾУ - BYTE byProgress; //ȣbyDataTypeΪ1ʱЧ0-100 - BYTE byStatus; //״̬byDataTypeΪ2ʱЧ1-LEDĻУʧܣ2-LEDĻӦĽտڣ3-Уʧܣԭʼ쳣 - //4-ĻͺŲ֧У5-豸æУ6-豸ڴ治 - NET_DVR_RECTCFG_EX struRect; //LEDĻbyDataTypeΪ2ʱЧ + BYTE byDataType; //数据类型,1-进度(整体进度),2-状态 + BYTE byOperateType; //操作类型,1-写入校正数据,2-校正预览,3-删除校正数据 + BYTE byProgress; //进度,byDataType为1时有效,0-100 + BYTE byStatus; //状态,byDataType为2时有效,1-LED屏幕区域校正失败,2-LED屏幕区域对应的接收卡不存在,3-加载校正数据失败(原始数据异常) + //4-该屏幕型号不支持校正,5-设备忙(正在校正),6-设备内存不足 + NET_DVR_RECTCFG_EX struRect; //LED屏幕区域,byDataType为2时有效 BYTE byRes[64]; }NET_SDK_SCREEN_CHECK_RESPONSE_DATA, *LPNET_SDK_SCREEN_CHECK_RESPONSE_DATA; typedef struct tagNET_DVR_PLAY_BY_NAME_PARA { - char szFileName[100]; //طļ - BYTE byDownload; //Ƿ 0-1- + char szFileName[100]; //回放文件名 + BYTE byDownload; //是否下载 0-否,1-是 BYTE byRes1[127]; - HWND hWnd; //طŵĴھΪգSDKյݣʾ - NET_DVR_ADDRESS struAddr; //ļڼȺCSַϢϢļʱ᷵ - //Ϊձʾ¼ַ + HWND hWnd; //回放的窗口句柄,若置为空,SDK仍能收到码流数据,但不解码显示 + NET_DVR_ADDRESS struAddr; //文件所在集群中CS地址信息,该信息文件查找时会返回 + //如果为空表示本登录地址 BYTE byRes2[256]; }NET_DVR_PLAY_BY_NAME_PARA, *LPNET_DVR_PLAY_BY_NAME_PARA; @@ -50837,284 +50837,284 @@ typedef struct tagNET_DVR_PLAYBCK_BYTIME_COND_PCNVR HWND hWnd; }NET_DVR_PLAYBCK_BYTIME_COND_PCNVR, *LPNET_DVR_PLAYBCK_BYTIME_COND_PCNVR; -//ļؼȺ¼ļ +//按文件名下载集群录像文件 typedef struct tagNET_DVR_DOWNLOAD_BY_NAME_COND { - char *pFileName; //طļ\0100ֽ - char *pSavedFileName;//ļλ - NET_DVR_ADDRESS struAddr; //ļڼȺCSַϢϢļʱ᷵ - //Ϊձʾ¼ַ + char *pFileName; //回放文件名,包含\0,最大100字节 + char *pSavedFileName;//文件保存位置 + NET_DVR_ADDRESS struAddr; //文件所在集群中CS地址信息,该信息文件查找时会返回 + //如果为空表示本登录地址 BYTE byRes[256]; }NET_DVR_DOWNLOAD_BY_NAME_COND, *LPNET_DVR_DOWNLOAD_BY_NAME_COND; -typedef struct tagNET_DVR_PIC_PARAM //ҽṹ +typedef struct tagNET_DVR_PIC_PARAM //查找结果结构体 { - char *pDVRFileName; //ͼƬ\064ֽ - char *pSavedFileBuf; //ͼƬĻڴⲿͷ - DWORD dwBufLen; //С - DWORD *lpdwRetLen; //ʵյݳָ룬ΪNULL - NET_DVR_ADDRESS struAddr; //ͼƬڵĵַϢͼƬʱ᷵ - BYTE byRes[256]; //ֽ + char *pDVRFileName; //图片名,包含\0,最大64字节 + char *pSavedFileBuf; //保存图片的缓冲区,内存外部申请释放 + DWORD dwBufLen; //缓冲区大小 + DWORD *lpdwRetLen; //实际收到的数据长度指针,不能为NULL + NET_DVR_ADDRESS struAddr; //图片所在的地址信息,图片查找时会返回 + BYTE byRes[256]; //保留字节 }NET_DVR_PIC_PARAM, *LPNET_DVR_PIC_PARAM; -#define NET_SDK_MAX_INDENTITY_KEY_LEN 64 // +#define NET_SDK_MAX_INDENTITY_KEY_LEN 64 //交互操作口令长度 -// +//导入人脸数据条件 typedef struct tagNET_DVR_FACELIB_COND { DWORD dwSize; - char szFDID[NET_SDK_MAX_FDID_LEN/*256*/];//ID - BYTE byConcurrent;//豸 0-1-ʼ - BYTE byCover;//Ƿ񸲸ʽ 0-1- - BYTE byCustomFaceLibID;//FDIDǷԶ壬0-ǣ1-ǣ - /*/ISAPI/Intelligent/channels//faceContrast/capabilitiesзisSupportNoSaveUploadPictureڵʱ - Dzģʽ£ֲ֧ϴԭͼIJ:ϴɹͼƬ豸ģɹ󣬻Ὣϴԭͼɾ - עò޷벢ͬʱС*/ - BYTE byPictureSaveMode;//ϴԭͼģʽ0-棬1-; - BYTE byIdentityKey[NET_SDK_MAX_INDENTITY_KEY_LEN/*64*/];// + char szFDID[NET_SDK_MAX_FDID_LEN/*256*/];//人脸库ID + BYTE byConcurrent;//设备并发处理 0-不开启,1-开始 + BYTE byCover;//是否覆盖式导入 0-否,1-是 + BYTE byCustomFaceLibID;//FDID是否是自定义,0-不是,1-是; + /*当”/ISAPI/Intelligent/channels//faceContrast/capabilities”能力中返回isSupportNoSaveUploadPicture能力节点时, + 代表非并发处理模式下,支持不保存上传原图的操作:当上传成功图片并设备建模成功后,会将上传的原图进行删除。 + 注:该操作无法与并发处理同时进行。*/ + BYTE byPictureSaveMode;//上传原图保存模式,0-保存,1-不保存; + BYTE byIdentityKey[NET_SDK_MAX_INDENTITY_KEY_LEN/*64*/];//交互操作口令 BYTE byRes[60]; }NET_DVR_FACELIB_COND, *LPNET_DVR_FACELIB_COND; -// +//导入人体数据条件 typedef struct tagNET_DVR_HBDLIB_COND { DWORD dwSize; - char szHBDID[NET_SDK_MAX_HBDID_LEN/*256*/];//ID - BYTE byConcurrent;//豸 0-1-ʼ - BYTE byCover;//Ƿ񸲸ʽ 0-1- - BYTE byCustomHBDID;// HBDIDǷԶ壬0-ǣ1-ǣ + char szHBDID[NET_SDK_MAX_HBDID_LEN/*256*/];//人体库ID + BYTE byConcurrent;//设备并发处理 0-不开启,1-开始 + BYTE byCover;//是否覆盖式导入 0-否,1-是 + BYTE byCustomHBDID;// HBDID是否是自定义,0-不是,1-是; BYTE byRes[125]; }NET_DVR_HBDLIB_COND, *LPNET_DVR_HBDLIB_COND; typedef struct tagNET_DVR_EXPORT_PUBLISH_SCHEDULE { - DWORD dwScheduleID;// ճ - DOWNLOAD_DATA_CB fnDownloadFileCallBack; //ݻص - void* pUser; //ûָ + DWORD dwScheduleID;// 日程索引 + DOWNLOAD_DATA_CB fnDownloadFileCallBack; //数据回调函数 + void* pUser; //用户数据指针 BYTE byRes[32]; }NET_DVR_EXPORT_PUBLISH_SCHEDULE, *LPNET_DVR_EXPORT_PUBLISH_SCHEDULE; typedef struct tagNET_DVR_GBT28181_AUDIO_OUTPUT_COND { DWORD dwSize; - DWORD dwAudioChannel;//Խͨ + DWORD dwAudioChannel;//语音对讲通道号 BYTE byRes[128]; }NET_DVR_GBT28181_AUDIO_OUTPUT_COND, *LPNET_DVR_GBT28181_AUDIO_OUTPUT_COND; -//GBT28181Эͨ ýṹ +//GBT28181协议的语音输出通道配置 配置结构 typedef struct tagNET_DVR_GBT28181_AUDIO_OUTPUT_CFG { DWORD dwSize; - char szAudioOutNumID[MAX_COMPRESSIONID_LEN];//豸ID + char szAudioOutNumID[MAX_COMPRESSIONID_LEN];//设备语音输出编码ID BYTE byRes[256]; }NET_DVR_GBT28181_AUDIO_OUTPUT_CFG, *LPNET_DVR_GBT28181_AUDIO_OUTPUT_CFG; typedef struct tagNET_DVR_NOTICE_VIDEO_DATA { DWORD dwSize; - DWORD dwFileSize; //ļСλֽ - BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; // + DWORD dwFileSize; //文件大小,单位:字节 + BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; //公告编号 BYTE byRes[2016]; }NET_DVR_NOTICE_VIDEO_DATA, *LPNET_DVR_NOTICE_VIDEO_DATA; typedef struct tagNET_DVR_NOTICE_VIDEO_DATA_COND { DWORD dwSize; - BYTE byRes[256]; // + BYTE byRes[256]; //保留 }NET_DVR_NOTICE_VIDEO_DATA_COND, *LPNET_DVR_NOTICE_VIDEO_DATA_COND; typedef struct tagNET_DVR_NOTICE_VIDEO_DATA_CFG { DWORD dwSize; - DWORD dwDataLen; //ݳ - char* pDataBuffer; //ָ - BYTE byDataType; //ͣ0-Ч1-ṹݣNET_DVR_NOTICE_VIDEO_DATA2-Ƶ + DWORD dwDataLen; //数据长度 + char* pDataBuffer; //数据指针 + BYTE byDataType; //数据类型:0-无效,1-结构体数据(NET_DVR_NOTICE_VIDEO_DATA),2-视频数据 BYTE byRes[63]; }NET_DVR_NOTICE_VIDEO_DATA_CFG, *LPNET_DVR_NOTICE_VIDEO_DATA_CFG; typedef struct tagNET_DVR_UPGRADE_FIRMWARE_INFO { - DWORD dwMagicNumber; /* ħֶΣ̶ֵ0x484b5753 */ - DWORD dwCheckSum; /* ļͷУ */ - DWORD dwHeadLen; /* ļͷ */ - DWORD dwFileNums; /* ļ */ - DWORD dwLanguage; /* ԣ1-ӢĻԣ2- */ - DWORD dwDeviceClassID; /* 1 C DS9000 DVR */ - DWORD dwOemCode; /* 1 C private */ - BYTE byUpgradeVersion; /* 汾: 0xFE - жflash, ram, DSP ram */ - BYTE byResFeature[15]; /* ֶ */ + DWORD dwMagicNumber; /* 魔术字段,固定值0x484b5753 */ + DWORD dwCheckSum; /* 文件头校验和 */ + DWORD dwHeadLen; /* 文件头长度 */ + DWORD dwFileNums; /* 文件个数 */ + DWORD dwLanguage; /* 语言,1-英文或多语言,2-中文 */ + DWORD dwDeviceClassID; /* 1 – DS9000 DVR */ + DWORD dwOemCode; /* 1 – private */ + BYTE byUpgradeVersion; /* 升级版本: 0xFE - 需判断flash, ram, DSP ram 的容量*/ + BYTE byResFeature[15]; /* 保留字段 */ BYTE byFlashSize; /* 0 - do not need check; 1 - 16M; 2 - 32M; 3 - 64M */ BYTE byRamSize; /* 0 - do not need check; 1 - 128M; 2 - 256M; 3 - 512M; 4 - 1024M*/ BYTE byDspRamSize; /* 0 - do not need check; 1 - 64M; 2 - 128M; 3 - 256M */ - BYTE byRes[17]; /* */ + BYTE byRes[17]; /* 保留 */ }NET_DVR_UPGRADE_FIRMWARE_INFO, *LPNET_DVR_UPGRADE_FIRMWARE_INFO; typedef struct tagNET_DVR_SCHEDULE_FILE_RET { DWORD dwSize; - char szFileName[32]; //ļ - DWORD dwFileLen; //ļ + char szFileName[32]; //文件名 + DWORD dwFileLen; //文件长度 BYTE byRes[64]; }NET_DVR_SCHEDULE_FILE_RET, *LPNET_DVR_SCHEDULE_FILE_RET; -#define NET_SDK_MAX_EXAM_ROUND_NO 64 //Գα󳤶 -#define NET_SDK_MAX_EXAM_NO 64 //Ա󳤶 -#define NET_SDK_MAX_EXAM_SUBJECT 64 //ԿĿ󳤶 -#define NET_SDK_MAX_TEACHER_NO 64 //࿼ʦ󳤶 -#define NET_SDK_MAX_TEACHER_NAME 64 //࿼ʦ󳤶 -#define NET_SDK_MAX_EXAMINEE_NO 64 //󳤶 -#define NET_SDK_MAX_ADMISSION_TICKET 64 //׼֤󳤶 +#define NET_SDK_MAX_EXAM_ROUND_NO 64 //考试场次编号最大长度 +#define NET_SDK_MAX_EXAM_NO 64 //考试编号最大长度 +#define NET_SDK_MAX_EXAM_SUBJECT 64 //考试科目最大长度 +#define NET_SDK_MAX_TEACHER_NO 64 //监考老师编号最大长度 +#define NET_SDK_MAX_TEACHER_NAME 64 //监考老师姓名最大长度 +#define NET_SDK_MAX_EXAMINEE_NO 64 //考生编号最大长度 +#define NET_SDK_MAX_ADMISSION_TICKET 64 //准考证号最大长度 typedef struct tagNET_DVR_EXAM_INFO_COND { DWORD dwSize; - DWORD dwExamNumber; //ϢĿ + DWORD dwExamNumber; //考试信息数目 BYTE byRes[128]; }NET_DVR_EXAM_INFO_COND, *LPNET_DVR_EXAM_INFO_COND; typedef struct tagNET_DVR_EXAM_INFO_CFG { DWORD dwSize; - BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //Գαţijþ忼ԣ - BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //Աţijοԣೡԣ - BYTE byExamSubject[NET_SDK_MAX_EXAM_SUBJECT/*64*/]; //ԿĿ - BYTE byTeacherNo[NET_SDK_MAX_TEACHER_NO/*64*/]; //࿼ʦ - BYTE byTeacherName[NET_SDK_MAX_TEACHER_NAME/*64*/]; //࿼ʦ - NET_DVR_TIME struStartTime; //Կʼʱ - NET_DVR_TIME struEndTime; //Խʱ - BYTE byExamInfoValid; //ϢǷЧ0-Ч1-ЧڿԳαɾϢֶΪ0ʱɾ + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //考试编号(某次考试,包含多场考试) + BYTE byExamSubject[NET_SDK_MAX_EXAM_SUBJECT/*64*/]; //考试科目 + BYTE byTeacherNo[NET_SDK_MAX_TEACHER_NO/*64*/]; //监考老师编号 + BYTE byTeacherName[NET_SDK_MAX_TEACHER_NAME/*64*/]; //监考老师姓名 + NET_DVR_TIME struStartTime; //考试开始时间 + NET_DVR_TIME struEndTime; //考试结束时间 + BYTE byExamInfoValid; //考试信息是否有效:0-无效,1-有效(用于考试场次编号删除考试信息,该字段为0时代表删除) BYTE byRes[127]; }NET_DVR_EXAM_INFO_CFG, *LPNET_DVR_EXAM_INFO_CFG; typedef struct tagNET_DVR_EXAM_INFO_STATUS { DWORD dwSize; - BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //Գαţijþ忼ԣ - BYTE byStatus; //·״̬0-Ч1-ʧܣ2-ɹÿԳ·Ƿɹ + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byStatus; //下发状态:0-无效,1-失败,2-成功(代表该考试场次下发是否成功) BYTE byRes[127]; }NET_DVR_EXAM_INFO_STATUS, *LPNET_DVR_EXAM_INFO_STATUS; typedef struct tagNET_DVR_EXAMINEE_INFO_COND { DWORD dwSize; - DWORD dwExamineeNumber; //ϢĿ + DWORD dwExamineeNumber; //考生信息数目 BYTE byRes[128]; }NET_DVR_EXAMINEE_INFO_COND, *LPNET_DVR_EXAMINEE_INFO_COND; typedef struct tagNET_DVR_EXAMINEE_INFO_CFG { DWORD dwSize; - BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; // - BYTE byAdmissionTicket[NET_SDK_MAX_ADMISSION_TICKET/*64*/]; //׼֤ - BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //Գαţijþ忼ԣ - BYTE byName[NAME_LEN/*32*/]; // - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - BYTE bySex; //Ա0-Ч1-У2-Ů - BYTE byExamineeInfoValid; //ϢǷЧ0-Ч1-ЧڿźͿԳαɾϢֶΪ0ʱɾ + BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; //考生编号 + BYTE byAdmissionTicket[NET_SDK_MAX_ADMISSION_TICKET/*64*/]; //准考证号 + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE byCardNo[ACS_CARD_NO_LEN]; //考生关联的卡号 + BYTE bySex; //性别:0-无效,1-男,2-女 + BYTE byExamineeInfoValid; //考生信息是否有效:0-无效,1-有效(用于考生编号和考试场次编号删除考生信息,该字段为0时代表删除) BYTE byRes[126]; }NET_DVR_EXAMINEE_INFO_CFG, *LPNET_DVR_EXAMINEE_INFO_CFG; typedef struct tagNET_DVR_EXAMINEE_INFO_STATUS { DWORD dwSize; - BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; // - BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //Գαţijþ忼ԣ - BYTE byStatus; //·״̬0-Ч1-ʧܣ2-ɹÿϢ·Ƿɹ + BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; //考生编号 + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byStatus; //下发状态:0-无效,1-失败,2-成功(代表该考生信息下发是否成功) BYTE byRes[127]; }NET_DVR_EXAMINEE_INFO_STATUS, *LPNET_DVR_EXAMINEE_INFO_STATUS; typedef struct tagNET_DVR_EXAM_COMPARE_RESULT_COND { DWORD dwSize; - BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //Գαţijþ忼ԣ - BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //Աţijοԣೡԣ - NET_DVR_TIME struStartTime; //ʼʱ - NET_DVR_TIME struEndTime; //ʱ + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //考试编号(某次考试,包含多场考试) + NET_DVR_TIME struStartTime; //开始时间 + NET_DVR_TIME struEndTime; //结束时间 BYTE byRes[512]; }NET_DVR_EXAM_COMPARE_RESULT_COND, *LPNET_DVR_EXAM_COMPARE_RESULT_COND; typedef struct tagNET_DVR_EXAM_COMPARE_RESULT_CFG { DWORD dwSize; - NET_DVR_TIME struTime; //ʱ - BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; // - BYTE byAdmissionTicket[NET_SDK_MAX_ADMISSION_TICKET/*64*/]; //׼֤ - BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //Աţijοԣೡԣ - BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //Գαţijþ忼ԣ - BYTE byName[NAME_LEN/*32*/]; // - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - DWORD dwPicDataLen; //ȶץͼƬݴСΪ0DZʾ - char *pPicData; //ȶץͼƬָ + NET_DVR_TIME struTime; //时间 + BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; //考生编号 + BYTE byAdmissionTicket[NET_SDK_MAX_ADMISSION_TICKET/*64*/]; //准考证号 + BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //考试编号(某次考试,包含多场考试) + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE byCardNo[ACS_CARD_NO_LEN]; //考生关联的卡号 + DWORD dwPicDataLen; //比对抓拍图片数据大小,不为0是表示后面带数据 + char *pPicData; //比对抓拍图片指针 BYTE byRes[256]; }NET_DVR_EXAM_COMPARE_RESULT_CFG, *LPNET_DVR_EXAM_COMPARE_RESULT_CFG; typedef struct tagNET_DVR_BLOCKLIST_PICTURE_COND { DWORD dwSize; - DWORD dwPictureNum; //ͼƬ + DWORD dwPictureNum; //图片数量 BYTE byRes[128]; }NET_DVR_BLOCKLIST_PICTURE_COND, *LPNET_DVR_BLOCKLIST_PICTURE_COND; typedef struct tagNET_DVR_BLOCKLIST_PICTURE_STATUS { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; // - BYTE byStatus; //״̬0-Ч1-У2-ϴʧܣ3-ɹ + BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; //卡号 + BYTE byStatus; //状态:0-无效,,1-处理中,2-上传失败,3-成功 BYTE byRes[63]; }NET_DVR_BLOCKLIST_PICTURE_STATUS, *LPNET_DVR_BLOCKLIST_PICTURE_STATUS; typedef struct tagNET_DVR_BLOCKLIST_PICTURE_CFG { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; // - BYTE byName[NAME_LEN/*32*/]; // - BYTE bySex; //Ա0-Ч1-У2-Ů - BYTE byPictureValid; //ֹͼƬǷЧ0-Ч1-ЧڰɾֹͼƬֶΪ0ʱɾɾʱݽֹͼƬ + BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; //卡号 + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE bySex; //性别:0-无效,1-男,2-女 + BYTE byPictureValid; //禁止名单图片是否有效:0-无效,1-有效(用于按卡号删除禁止名单图片,该字段为0时代表删除,删除时不传递禁止名单图片) BYTE byRes1[2]; - DWORD dwPictureLen; //ֹͼƬȣͼƬС1M - char* pPictureBuffer; //ֹͼƬָ + DWORD dwPictureLen; //禁止名单图片长度(图片大小不超过1M) + char* pPictureBuffer; //禁止名单图片指针 BYTE byRes[128]; }NET_DVR_BLOCKLIST_PICTURE_CFG, *LPNET_DVR_BLOCKLIST_PICTURE_CFG; typedef struct tagNET_DVR_UPLOAD_ID_BLOCKLIST_COND { DWORD dwSize; - DWORD dwBlockListNum; //ֹ + DWORD dwBlockListNum; //禁止名单数量 BYTE byRes[128]; }NET_DVR_UPLOAD_ID_BLOCKLIST_COND, *LPNET_DVR_UPLOAD_ID_BLOCKLIST_COND; typedef struct tagNET_DVR_UPLOAD_ID_BLOCKLIST_CFG { DWORD dwSize; - NET_DVR_ID_CARD_INFO struIDCardCfg;//֤Ϣýṹ֤ΪֶΪѡ - BYTE byBlockListValid; //ֹ֤ǷЧ0-Ч1-Чڰ֤ɾֶֹ֤Ϊ0ʱɾ + NET_DVR_ID_CARD_INFO struIDCardCfg;//身份证信息(该结构体中姓名和身份证号码为必填项,其他字段为选填项) + BYTE byBlockListValid; //身份证禁止名单是否有效:0-无效,1-有效(用于按身份证号码删除身份证禁止名单,该字段为0时代表删除) BYTE byRes[127]; }NET_DVR_UPLOAD_ID_BLOCKLIST_CFG, *LPNET_DVR_UPLOAD_ID_BLOCKLIST_CFG; typedef struct tagNET_DVR_UPLOAD_ID_BLOCKLIST_STATUS { DWORD dwSize; - BYTE byIDNum[MAX_ID_NUM_LEN]; //֤ - BYTE byStatus; //״̬0-Ч1-У2-ϴʧܣ3-ɹ + BYTE byIDNum[MAX_ID_NUM_LEN]; //身份证号码 + BYTE byStatus; //状态:0-无效,1-处理中,2-上传失败,3-成功 BYTE byRes[63]; }NET_DVR_UPLOAD_ID_BLOCKLIST_STATUS, *LPNET_DVR_UPLOAD_ID_BLOCKLIST_STATUS; typedef struct tagNET_DVR_ALARM_ISAPI_INFO { - char * pAlarmData; // - DWORD dwAlarmDataLen; // ݳ + char * pAlarmData; // 报警数据 + DWORD dwAlarmDataLen; // 报警数据长度 BYTE byDataType; // 0-invalid,1-xml,2-json - BYTE byPicturesNumber; // ͼƬ + BYTE byPicturesNumber; // 图片数量 BYTE byRes[2]; - void * pPicPackData; // ͼƬ䳤 + void * pPicPackData; // 图片变长部分 BYTE byRes1[32]; }NET_DVR_ALARM_ISAPI_INFO, *LPNET_DVR_ALARM_ISAPI_INFO; typedef struct tagNET_DVR_ALARM_ISAPI_PICDATA { DWORD dwPicLen; - BYTE byPicType; //ͼƬʽ: 1-jpg, 2-wav, 3-mp4 + BYTE byPicType; //图片格式: 1-jpg, 2-wav, 3-mp4 BYTE byRes[3]; char szFilename[MAX_FILE_PATH_LEN]; BYTE *pPicData; @@ -51122,47 +51122,47 @@ typedef struct tagNET_DVR_ALARM_ISAPI_PICDATA typedef struct tagNET_DVR_FORMAT_HDD { - DWORD dwSize;//ṹ峤 - DWORD dwDiskNo;//Ӳ̺ţ0ʼ0xffʾӲЧֻӲ̣ - NET_DVR_IPADDR struLocateIP;//Ӳ豸IPӦӲ̹V50лȡszHDLocateIPϢ + DWORD dwSize;//结构体长度 + DWORD dwDiskNo;//硬盘号,从0开始,0xff表示对所有硬盘有效(不包括只读硬盘) + NET_DVR_IPADDR struLocateIP;//该硬盘所在设备的IP(对应硬盘管理参数V50中获取到的szHDLocateIP信息) BYTE byRes[16]; }NET_DVR_FORMAT_HDD, *LPNET_DVR_FORMAT_HDD; typedef struct tagNET_DVR_CHECK_FACE_PICTURE_COND { DWORD dwSize; - DWORD dwPictureNum; //ͼƬ - BYTE byCheckTemplate; //0-УͼƬǷϷĬϣ1-УͼƬͽģǷƥ + DWORD dwPictureNum; //图片数量 + BYTE byCheckTemplate; //0-校验图片是否合法(默认),1-校验图片和建模数据是否匹配 BYTE byRes[127]; }NET_DVR_CHECK_FACE_PICTURE_COND, *LPNET_DVR_CHECK_FACE_PICTURE_COND; typedef struct tagNET_DVR_CHECK_FACE_PICTURE_CFG { DWORD dwSize; - DWORD dwPictureNo; //ͼƬ - DWORD dwPictureLen; //ͼƬȣͼƬС200k - char* pPictureBuffer; //ͼƬָ - DWORD dwFaceTemplateLen; //ģݳ - char* pFaceTemplateBuffer; //ģָ + DWORD dwPictureNo; //图片编号 + DWORD dwPictureLen; //图片长度(图片大小不超过200k) + char* pPictureBuffer; //图片指针 + DWORD dwFaceTemplateLen; //人脸建模数据长度 + char* pFaceTemplateBuffer; //人脸建模数据指针 BYTE byRes[248]; }NET_DVR_CHECK_FACE_PICTURE_CFG, *LPNET_DVR_CHECK_FACE_PICTURE_CFG; typedef struct tagNET_DVR_CHECK_FACE_PICTURE_STATUS { DWORD dwSize; - DWORD dwPictureNo; //ͼƬ - BYTE byCheckStatus; //У0-Ч1-ģɹ2-ģʧܣ3-ģͨѶ쳣4-ͼ5-ϣ6-£7-ƫ8-ƫң9-˳ʱת - //10 - ʱת11-ۼС12-ģƥ䣬13-ģ岻ƥ,14- + DWORD dwPictureNo; //图片编号 + BYTE byCheckStatus; //校验结果:0-无效,1-建模成功,2-建模失败,3-人脸模块通讯异常,4-图像无人脸,5-人脸朝上,6-人脸朝下,7-人脸偏左,8-人脸偏右,9-人脸顺时旋转, + //10 - 人脸逆时旋转,11-人眼间距小,12-人脸和模板匹配,13-人脸和模板不匹配,14-传输数据有误 BYTE byRes[127]; }NET_DVR_CHECK_FACE_PICTURE_STATUS, *LPNET_DVR_CHECK_FACE_PICTURE_STATUS; typedef struct tagNET_SDK_NPQ_STATE_SINGLE { - DWORD dwRttUs; //rttλus - DWORD dwRealRttUs; //ʵʱrttλus - DWORD dwBitRate; //ʣλbps - BYTE byLossFraction; //ʣλ1/256 - BYTE byLossFraction2; //ָ֮Ķʣֻڽն˻ȡλ1/256 + DWORD dwRttUs; //rtt,单位us + DWORD dwRealRttUs; //实时rtt,单位us + DWORD dwBitRate; //码率,单位bps + BYTE byLossFraction; //丢包率,单位1/256 + BYTE byLossFraction2; //经过恢复之后的丢包率,只能在接收端获取,单位1/256 BYTE byRes[126]; }NET_SDK_NPQ_STATE_SINGLE, *LPNET_SDK_NPQ_STATE_SINGLE; @@ -51170,63 +51170,63 @@ typedef struct tagNET_SDK_NPQ_STATE_SINGLE typedef struct tagNET_SDK_NPQ_STATE { DWORD dwSize; - NET_SDK_NPQ_STATE_SINGLE struAudioState; //Ƶ״̬ - NET_SDK_NPQ_STATE_SINGLE struVideoState; //Ƶ״̬ + NET_SDK_NPQ_STATE_SINGLE struAudioState; //音频传输状态 + NET_SDK_NPQ_STATE_SINGLE struVideoState; //视频传输状态 BYTE byRes[256]; }NET_SDK_NPQ_STATE, *LPNET_SDK_NPQ_STATE; typedef struct tagNET_SDK_NPQ_NOTIFY_PARAM { - LONG iVersion; //ṹ汾Ժ - DWORD dwBitRate; // λbps - BOOL bHaveBitrate; //ֶǷЧ־ - BOOL bHaveForceIframe; //ǿIֶ֡ǷЧ־ - BOOL bForceIframe; //ǿI֡ - BOOL bHaveScale; //scaleֶǷЧ־,طʱֶЧ,ͨSDKŽӿʵ - float fScale; //scaleϢ 1248,طʱֶЧ,ͨSDKŽӿʵ + LONG iVersion; //结构体版本,用于以后兼容 + DWORD dwBitRate; //码率 单位bps + BOOL bHaveBitrate; //码率字段是否有效标志 + BOOL bHaveForceIframe; //强制I帧字段是否有效标志 + BOOL bForceIframe; //强制I帧 + BOOL bHaveScale; //scale字段是否有效标志,回放时此字段无效,请通过SDK快放接口实现 + float fScale; //scale信息 1、2、4、8,回放时此字段无效,请通过SDK快放接口实现 BYTE res[240]; }NET_SDK_NPQ_NOTIFY_PARAM, *LPNET_SDK_NPQ_NOTIFY_PARAM; -//Ϣѯṹ +//报警信息查询条件结构体 typedef struct tagNET_DVR_ALARM_SEARCH_COND { DWORD dwSize; - NET_DVR_TIME_SEARCH_COND strStartTime; //ʼʱ,ʱΪͨʱɸѡ - NET_DVR_TIME_SEARCH_COND strStopTime; //ʱ, ʱΪͨʱɸѡ + NET_DVR_TIME_SEARCH_COND strStartTime; //开始时间,时间为空则代表不通过时间筛选。 + NET_DVR_TIME_SEARCH_COND strStopTime; //结束时间, 时间为空则代表不通过时间筛选。 /* - ֵֶ뱨ͬĿǰ֧֣ - COMM_VCA_ALARM 0x4993 ܼⱨ - COMM_UPLOAD_FACESNAP_RESULT 0x1112 Ŀʶϴ - COMM_SNAP_MATCH_ALAR 0x2902 ȶԽϴ + 报警命令,该字段值与报警布防类型相同,目前支持: + COMM_VCA_ALARM 0x4993 智能检测报警 + COMM_UPLOAD_FACESNAP_RESULT 0x1112 目标识别结果上传 + COMM_SNAP_MATCH_ALAR 0x2902 人脸比对结果上传 */ - DWORD dwAlarmComm; //Ϊбˡ - char sAlarmUID[64]; //UIDʶϴʱ豸صUIDʶ64ֽڵijȣʹʱ䣨ȷ룩漴ķʽɣ,ΪUID - WORD wEventType;//¼ͣdwAlarmCommΪCOMM_VCA_ALARM 0x4993 ܼⱨЧ0-ʾ¼,1-Ŀ⣨mixedTargetDetection,2-Ŀ⣨radarVideoDetection - WORD wSubEventType;//¼ͣ0-ʾ¼ֵwEventTypeȡֵ仯仯μ - BYTE bySupport; // - BYTE byNoBoundary; //Ƿ񲻴boundary0-1-ǣdwAlarmCommΪܼⱨʱЧΪ1ʱ¼ΪCOMM_ISAPI_ALARM + DWORD dwAlarmComm; //若该命令为空这代表不进行报警命令过滤。 + char sAlarmUID[64]; //UID标识(上传报警时设备返回的UID标识,64字节的长度,可以使用时间(精确到毫秒)加上随即数的方式组成),为空则代表不区分UID + WORD wEventType;//事件类型,仅dwAlarmComm为COMM_VCA_ALARM 0x4993 智能检测报警有效,0-表示所有事件,1-混合目标检测(mixedTargetDetection),2-雷视目标检测(radarVideoDetection) + WORD wSubEventType;//子事件类型,0-表示所有子事件,其余值根据wEventType的取值变化而变化,具体参见能力集。 + BYTE bySupport; //保留 + BYTE byNoBoundary; //是否不带boundary,0-否,1-是,仅dwAlarmComm为智能检测报警时有效,当设置为1时输出事件类型为COMM_ISAPI_ALARM BYTE byRes[122]; }NET_DVR_ALARM_SEARCH_COND, *LPNET_DVR_ALARM_SEARCH_COND; -//Ϣѯṹ +//报警信息查询结果结构体 typedef struct tagNET_DVR_ALARM_SEARCH_RESULT { DWORD dwSize; /* - ֵֶ뱨ͬĿǰ֧֣ - COMM_VCA_ALARM 0x4993 ܼⱨ - COMM_UPLOAD_FACESNAP_RESULT 0x1112 Ŀʶϴ - COMM_SNAP_MATCH_ALARM 0x2902 ȶԽϴ - COMM_ISAPI_ALARM 0x6009 ISAPI + 报警命令,该字段值与报警布防类型相同,目前支持: + COMM_VCA_ALARM 0x4993 智能检测报警 + COMM_UPLOAD_FACESNAP_RESULT 0x1112 目标识别结果上传 + COMM_SNAP_MATCH_ALARM 0x2902 人脸比对结果上传 + COMM_ISAPI_ALARM 0x6009 ISAPI报警 */ DWORD dwAlarmComm; /* - Ϣֵֶ뱨ϢͬĿǰ֧֣ - COMM_VCA_ALARMʱñϢΪJSON - COMM_UPLOAD_FACESNAP_RESULTʱñϢΪNET_VCA_FACESNAP_RESULT - COMM_SNAP_MATCH_ALARMʱñϢΪNET_VCA_FACESNAP_MATCH_ALARM - COMM_ISAPI_ALARMʱñϢΪNET_DVR_ALARM_ISAPI_INFO + 报警信息,该字段值与报警信息相同,目前支持: + 当COMM_VCA_ALARM时,该报警信息为JSON报文 + 当COMM_UPLOAD_FACESNAP_RESULT时,该报警信息为NET_VCA_FACESNAP_RESULT + 当COMM_SNAP_MATCH_ALARM时,该报警信息为NET_VCA_FACESNAP_MATCH_ALARM + 当COMM_ISAPI_ALARM时,该报警信息为NET_DVR_ALARM_ISAPI_INFO */ - DWORD dwAlarmLen;//ϢpAlarmInfoָָݳ + DWORD dwAlarmLen;//报警信息,即pAlarmInfo指针指向的数据长度 char *pAlarmInfo; NET_DVR_ALARMER struAlarmer; BYTE byRes[128]; @@ -51235,199 +51235,199 @@ typedef struct tagNET_DVR_ALARM_SEARCH_RESULT typedef struct tagNET_DVR_FACE_AND_TEMPLATE_COND { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀţʱòã - DWORD dwFaceNum; //ûȡȡʱΪ0xffffffffʾȡϢ - BYTE byRes[128]; // + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号(设置时该参数不设置) + DWORD dwFaceNum; //设置或获取人脸数量,获取时置为0xffffffff表示获取所有人脸信息 + BYTE byRes[128]; //保留 }NET_DVR_FACE_AND_TEMPLATE_COND, *LPNET_DVR_FACE_AND_TEMPLATE_COND; typedef struct tagNET_DVR_FACE_AND_TEMPLATE_CFG { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - DWORD dwFaceLen; //ͼƬȣͼƬС200k - char* pFaceBuffer; //ͼƬָ - DWORD dwFaceTemplateLen; //ģݳ - char* pFaceTemplateBuffer; //ģָ + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + DWORD dwFaceLen; //人脸图片长度(图片大小不超过200k) + char* pFaceBuffer; //人脸图片指针 + DWORD dwFaceTemplateLen; //人脸建模数据长度 + char* pFaceTemplateBuffer; //人脸建模数据指针 BYTE byRes[116]; }NET_DVR_FACE_AND_TEMPLATE_CFG, *LPNET_DVR_FACE_AND_TEMPLATE_CFG; typedef struct tagNET_DVR_FACE_AND_TEMPLATE_STATUS { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - BYTE byRecvStatus;//·״ֽ̬ڱʾ0-ʧܣ1-ɹ2-ڴ + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byRecvStatus;//人脸下发状态,按字节表示,0-失败,1-成功,2-内存已满(人脸数据满) BYTE byRes[131]; }NET_DVR_FACE_AND_TEMPLATE_STATUS, *LPNET_DVR_FACE_AND_TEMPLATE_STATUS; typedef struct tagNET_DVR_SINGLE_HEATMAP_RESULT_PDC { - DWORD dwMaxHeatMapValue;//ȶֵ - DWORD dwMinHeatMapValue;//Сȶֵ - DWORD dwTimeHeatMapValue;// (ʱȶֵ)ƽȶֵ - WORD wArrayLine;//ͼƬصֵ - WORD wArrayColumn;//ͼƬصֵ ֵΪ0ʱصֵڴϢڣ - BYTE* pBuffer; //ȶͼƬصϢ + DWORD dwMaxHeatMapValue;//最大热度值 + DWORD dwMinHeatMapValue;//最小热度值 + DWORD dwTimeHeatMapValue;// (时间热度值)平均热度值 + WORD wArrayLine;//图片像素点行值 + WORD wArrayColumn;//图片像素点列值 (当行列值为0的时候,像素点值内存信息不存在) + BYTE* pBuffer; //热度图片像素点数据信息 BYTE byRes[32]; }NET_DVR_SINGLE_HEATMAP_RESULT_PDC, *LPNET_DVR_SINGLE_HEATMAP_RESULT_PDC; -//ȶͼϴ +//热度图报警上传 typedef struct tagNET_DVR_HEATMAP_RESULT_PDC { DWORD dwSize; - NET_DVR_TIME_EX struStartTime;/*ʼʱ*/ - NET_DVR_TIME_EX struEndTime;/*ʱ*/ - NET_VCA_DEV_INFO struDevInfo;/*豸Ϣ*/ - WORD wDevInfoIvmsChannelEx; //NET_VCA_DEV_INFObyIvmsChannelܱͬʾֵϿͻbyIvmsChannelܼݣ255¿ͻ˰汾ʹwDevInfoIvmsChannelEx - BYTE byBrokenNetHttp; //־λ0-شݣ1-ش - BYTE byArrayUnitType;//ԪͣϢÿصݵͣ,1-byte, 2-short,4- int + NET_DVR_TIME_EX struStartTime;/*开始时间*/ + NET_DVR_TIME_EX struEndTime;/*结束时间*/ + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 + BYTE byArrayUnitType;//矩阵单元数据类型(矩阵信息中每个像素点数据的数据类型),1-byte, 2-short,4- int /* - struSingleHeatMap[0]:ʾͳеĻͣȶֵ - struSingleHeatMap[1]:ʾͳеĻ뿪ȶֵ + struSingleHeatMap[0]:表示按人数统计中的画面中停留人数的热度值; + struSingleHeatMap[1]:表示按人数统计中的画面中离开人数的热度值; */ NET_DVR_SINGLE_HEATMAP_RESULT_PDC struSingleHeatMap[2]; - WORD wCurNumber;//ǰ - WORD wLeaveNumber;//뿪 - #if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pEventNotificationAlertBuff; //BuffӦEventNotificationAlert JSON Block("eventType": "heatmap") + WORD wCurNumber;//当前人数 + WORD wLeaveNumber;//离开人数 + #if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pEventNotificationAlertBuff; //其Buff对应EventNotificationAlert JSON Block("eventType": "heatmap") #else - char* pEventNotificationAlertBuff; //BuffӦEventNotificationAlert JSON Block("eventType": "heatmap") + char* pEventNotificationAlertBuff; //其Buff对应EventNotificationAlert JSON Block("eventType": "heatmap") BYTE byRes2[4]; #endif - DWORD dwEventNotificationAlertLen;//ȶӦEventNotificationAlert JSON Block("eventType": "heatmap")ݳ + DWORD dwEventNotificationAlertLen;//长度对应EventNotificationAlert JSON Block("eventType": "heatmap")数据长度 BYTE byRes1[48]; }NET_DVR_HEATMAP_RESULT_PDC, *LPNET_DVR_HEATMAP_RESULT_PDC; -//豸֧AIƽ̨룬ϴƵ +//设备支持AI开放平台接入,上传视频检测数据 typedef struct _NET_AIOP_VIDEO_HEAD_ { DWORD dwSize; //dwSize = sizeof(NET_AIOP_VIDEO_HEAD) - DWORD dwChannel; //豸ͨͨţ - NET_DVR_SYSTEM_TIME struTime; //ʱ - char szTaskID[64]; //ƵIDƵɷ - DWORD dwAIOPDataSize; //ӦAIOPDdataݳ - DWORD dwPictureSize; //ӦͼƬ - char szMPID[64]; //ģͰIDƥAIOPļݽͨURI(GET /ISAPI/Intelligent/AIOpenPlatform/algorithmModel/management?format=json)ȡǰ豸صģͰlabel descriptionϢ - BYTE *pBufferAIOPData; //AIOPDdata - BYTE *pBufferPicture;//ӦͼƬ - BYTE byPictureMode;//ͼƬݴģʽ 0-ƣ1-人ƴ洢2-豸ش洢byPictureModeΪ0ʱpBufferPictureΪݣ - //byPictureModeΪ1ʱpBufferPictureΪ人URL,byPictureModeΪ2ʱpBufferPictureΪ豸ش洢URLͼƬʱҪHTTPЭ豸֤ǻ豸û֤ - BYTE byCompressedDotMatrixMode;//ѹĵͼģʽ 0-ƣ1-人ƴ洢byCompressedDotMatrixModeΪ0ʱpCompressedDotMatrixBuffΪݣbyCompressedDotMatrixModeΪ1ʱpCompressedDotMatrixBuffΪ人URL - BYTE byRes2[2];//ֽ - DWORD dwPresetIndex; //Ԥõ - DWORD dwAddInfoPictureSize; //ӦĸͼƬ - BYTE *pAddInfoPictureBuffer;//ӦĸͼƬ(ȳ˫ͨ豸ýڵʾDZͨͼƬ) -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pFacePicBuff; //СͼͼƬָ + DWORD dwChannel; //设备分析通道的通道号; + NET_DVR_SYSTEM_TIME struTime; //时间 + char szTaskID[64]; //视频任务ID,来自于视频任务派发 + DWORD dwAIOPDataSize; //对应AIOPDdata数据长度 + DWORD dwPictureSize; //对应分析图片长度 + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析;可以通过URI(GET /ISAPI/Intelligent/AIOpenPlatform/algorithmModel/management?format=json)获取当前设备加载的模型包的label description信息; + BYTE *pBufferAIOPData; //AIOPDdata数据 + BYTE *pBufferPicture;//对应分析图片数据 + BYTE byPictureMode;//图片数据传输模式 0-二进制,1-武汉云云存储,2-设备本地存储,当byPictureMode为0时pBufferPicture为二进制数据, + //当byPictureMode为1时pBufferPicture为武汉云URL,当byPictureMode为2时pBufferPicture为设备本地存储URL(下载图片的时候,需要基于HTTP协议做设备的认证处理,是基于设备的用户名和密码认证) + BYTE byCompressedDotMatrixMode;//压缩后的点阵图传输模式 0-二进制,1-武汉云云存储,当byCompressedDotMatrixMode为0时pCompressedDotMatrixBuff为二进制数据,当byCompressedDotMatrixMode为1时pCompressedDotMatrixBuff为武汉云URL + BYTE byRes2[2];//保留字节 + DWORD dwPresetIndex; //预置点序号 + DWORD dwAddInfoPictureSize; //对应分析的附加图片长度 + BYTE *pAddInfoPictureBuffer;//对应分析的附加图片数据(对于热成像双通道设备,该节点表示非报警通道的图片) +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pFacePicBuff; //人脸小图图片指针 #else - char* pFacePicBuff; //СͼͼƬָ + char* pFacePicBuff; //人脸小图图片指针 BYTE byRes3[4]; #endif - DWORD dwFacePicBuffLen;//ȶӦpFacePicBuffݳ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pComparisonPicBuff; //׿ȶͼͼƬָ + DWORD dwFacePicBuffLen;//长度对应pFacePicBuff数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pComparisonPicBuff; //底库比对图图片指针 #else - char* pComparisonPicBuff; //׿ȶͼͼƬָ + char* pComparisonPicBuff; //底库比对图图片指针 BYTE byRes4[4]; #endif - DWORD dwComparisonPicBuffLen;//ȶӦpComparisonPicBuffݳ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pCompressedDotMatrixBuff; //ѹĵͼϢָ + DWORD dwComparisonPicBuffLen;//长度对应pComparisonPicBuff数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 #else - char* pCompressedDotMatrixBuff; //ѹĵͼϢָ + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 BYTE byRes5[4]; #endif - DWORD dwCompressedDotMatrixBuffLen; //ȶӦpCompressedDotMatrixBuffݳ + DWORD dwCompressedDotMatrixBuffLen; //长度对应pCompressedDotMatrixBuff数据长度 BYTE byRes[132]; }NET_AIOP_VIDEO_HEAD, *LPNET_AIOP_VIDEO_HEAD; -//豸֧AIƽ̨룬ϴͼƬ +//设备支持AI开放平台接入,上传图片检测数据 typedef struct _NET_AIOP_PICTURE_HEAD_ { DWORD dwSize; //dwSize = sizeof(NET_AIOP_PICTURE_HEAD) - NET_DVR_SYSTEM_TIME struTime; //ʱ - char szPID[64]; //͸·ͼƬIDͼƬɷ - DWORD dwAIOPDataSize; //ӦAIOPDdataݳ - BYTE byStatus; //״ֵ̬0-ɹ1-ͼƬС - BYTE byPictureMode;//ͼƬݴģʽ(dwPictureSize>0ʱЧ) 0-ƣ1-人ƴ洢byPictureModeΪ0ʱpBufferPictureΪݣbyPictureModeΪ1ʱpBufferPictureΪ人URL - BYTE byCompressedDotMatrixMode;// /ѹĵͼģʽ 0-ƣ1-人ƴ洢byCompressedDotMatrixModeΪ0ʱpCompressedDotMatrixBuffΪݣbyCompressedDotMatrixModeΪ1ʱpCompressedDotMatrixBuffΪ人URL + NET_DVR_SYSTEM_TIME struTime; //时间 + char szPID[64]; //透传下发的图片ID,来自于图片任务派发 + DWORD dwAIOPDataSize; //对应AIOPDdata数据长度 + BYTE byStatus; //状态值:0-成功,1-图片大小错误 + BYTE byPictureMode;//图片数据传输模式(当dwPictureSize>0时有效) 0-二进制,1-武汉云云存储,当byPictureMode为0时pBufferPicture为二进制数据,当byPictureMode为1时pBufferPicture为武汉云URL + BYTE byCompressedDotMatrixMode;// /压缩后的点阵图传输模式 0-二进制,1-武汉云云存储,当byCompressedDotMatrixMode为0时pCompressedDotMatrixBuff为二进制数据,当byCompressedDotMatrixMode为1时pCompressedDotMatrixBuff为武汉云URL BYTE byRes1[1]; - char szMPID[64]; //ģͰIDƥAIOPļݽ - BYTE *pBufferAIOPData;//AIOPDdata - DWORD dwPresetIndex; //Ԥõ - DWORD dwPictureSize; //ͼƬURL -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - BYTE *pBufferPicture;//ӦͼƬݻURL + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析; + BYTE *pBufferAIOPData;//AIOPDdata数据 + DWORD dwPresetIndex; //预置点序号 + DWORD dwPictureSize; //图片或URL长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE *pBufferPicture;//对应分析图片数据或URL #else - BYTE *pBufferPicture;//ӦͼƬݻURL + BYTE *pBufferPicture;//对应分析图片数据或URL BYTE byRes2[4]; #endif - char szTaskID[64]; //ID, ͼƬϱЯֶ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pCompressedDotMatrixBuff; //ѹĵͼϢָ + char szTaskID[64]; //任务ID, 数据中心图片任务分析结果上报携带此字段 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 #else - char* pCompressedDotMatrixBuff; //ѹĵͼϢָ + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 BYTE byRes5[4]; #endif - DWORD dwCompressedDotMatrixBuffLen; //ȶӦpCompressedDotMatrixBuffݳ + DWORD dwCompressedDotMatrixBuffLen; //长度对应pCompressedDotMatrixBuff数据长度 BYTE byRes[92]; }NET_AIOP_PICTURE_HEAD, *LPNET_AIOP_PICTURE_HEAD; -#define MAX_FILE_NAME_LEN 100 //ļ +#define MAX_FILE_NAME_LEN 100 //最大文件名长 typedef struct tagNET_DVR_DOOR_FILE_UPLOAD_PARAM { DWORD dwSize; - DWORD dwFileSize; //ļСλֽ - BYTE byFileName[MAX_FILE_NAME_LEN]; //ļ + DWORD dwFileSize; //文件大小,单位:字节 + BYTE byFileName[MAX_FILE_NAME_LEN]; //文件名称 BYTE byRes1[256]; }NET_DVR_DOOR_FILE_UPLOAD_PARAM, *LPNET_DVR_DOOR_FILE_UPLOAD_PARAM; -#define AUDIO_FILE_NAME_LEN 32 //ƵļƳ -//ϴƵļ +#define AUDIO_FILE_NAME_LEN 32 //音频文件名称长度 +//上传音频控制文件 typedef struct tagNET_DVR_TRANS_AUDIO_INFO { - DWORD dwSize; //ṹС - char sAudioName[AUDIO_FILE_NAME_LEN]; //Ƶļ - BYTE byAudioFormat; //Ƶݸʽ0-wav + DWORD dwSize; //结构体大小 + char sAudioName[AUDIO_FILE_NAME_LEN]; //音频文件名称 + BYTE byAudioFormat; //音频数据格式:0-wav BYTE byRes[127]; }NET_DVR_TRANS_AUDIO_INFO,*LPNET_DVR_TRANS_AUDIO_INFO; typedef struct _NET_AIOP_POLLING_VIDEO_HEAD_ { DWORD dwSize; //dwSize = sizeof(NET_AIOP_POLLING_VIDEO_HEAD) - DWORD dwChannel; //豸ͨͨ(SDKЭ) - NET_DVR_SYSTEM_TIME struTime; //ʱ - char szTaskID[64]; //ѯץͼIDѯץͼɷ - DWORD dwAIOPDataSize; //ӦAIOPDdataݳ - DWORD dwPictureSize; //ӦͼƬ - char szMPID[64]; //ģͰIDƥAIOPļݽ - BYTE *pBufferAIOPData;//AIOPDdata - BYTE *pBufferPicture;//ӦͼƬ - BYTE byPictureMode;//ͼƬݴģʽ 0-ƣ1-人ƴ洢byPictureModeΪ0ʱpBufferPictureΪݣbyPictureModeΪ1ʱpBufferPictureΪ人URL - BYTE byCompressedDotMatrixMode;// /ѹĵͼģʽ 0-ƣ1-人ƴ洢byCompressedDotMatrixModeΪ0ʱpCompressedDotMatrixBuffΪݣbyCompressedDotMatrixModeΪ1ʱpCompressedDotMatrixBuffΪ人URL - BYTE byRes2[2];//ֽ - DWORD dwPresetIndex; //Ԥõ -#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pCompressedDotMatrixBuff; //ѹĵͼϢָ + DWORD dwChannel; //设备分析通道的通道号(走SDK协议); + NET_DVR_SYSTEM_TIME struTime; //时间 + char szTaskID[64]; //轮询抓图任务ID,来自于轮询抓图任务派发 + DWORD dwAIOPDataSize; //对应AIOPDdata数据长度 + DWORD dwPictureSize; //对应分析图片长度 + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析; + BYTE *pBufferAIOPData;//AIOPDdata数据 + BYTE *pBufferPicture;//对应分析图片数据 + BYTE byPictureMode;//图片数据传输模式 0-二进制,1-武汉云云存储,当byPictureMode为0时pBufferPicture为二进制数据,当byPictureMode为1时pBufferPicture为武汉云URL + BYTE byCompressedDotMatrixMode;// /压缩后的点阵图传输模式 0-二进制,1-武汉云云存储,当byCompressedDotMatrixMode为0时pCompressedDotMatrixBuff为二进制数据,当byCompressedDotMatrixMode为1时pCompressedDotMatrixBuff为武汉云URL + BYTE byRes2[2];//保留字节 + DWORD dwPresetIndex; //预置点序号 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 #else - char* pCompressedDotMatrixBuff; //ѹĵͼϢָ + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 BYTE byRes5[4]; #endif - DWORD dwCompressedDotMatrixBuffLen; //ȶӦpCompressedDotMatrixBuffݳ + DWORD dwCompressedDotMatrixBuffLen; //长度对应pCompressedDotMatrixBuff数据长度 BYTE byRes[164]; } NET_AIOP_POLLING_VIDEO_HEAD, *LPNET_AIOP_POLLING_VIDEO_HEAD; typedef struct _NET_AIOP_HISTORY_VIDEO_HEAD_ { DWORD dwSize; //dwSize = sizeof(_NET_AIOP_HISTORY_VIDEO_HEAD_) - DWORD dwChannel; //豸ͨͨ(SDKЭ) - NET_DVR_SYSTEM_TIME struTime; //ʱ - char szTaskID[64]; //ʷƵIDƵɷ - DWORD dwAIOPDataSize; //AIOP dataݳ - DWORD dwPictureSize; //ӦͼƬ - char szMPID[64]; //ģͰIDƥAIOPļݽͨURI(GET /ISAPI/Intelligent/AIOpenPlatform/algorithmModel/management?format=json)ȡǰ豸صģͰlabel descriptionϢ - BYTE *pBufferAIOPData;//AIOPDdata - BYTE *pBufferPicture;//ӦͼƬ - BYTE byPictureMode;//ͼƬݴģʽ 0-ƣ1-人ƴ洢byPictureModeΪ0ʱpBufferPictureΪݣbyPictureModeΪ1ʱpBufferPictureΪ人URL + DWORD dwChannel; //设备分析通道的通道号(走SDK协议); + NET_DVR_SYSTEM_TIME struTime; //时间 + char szTaskID[64]; //历史视频任务ID,来自于视频任务派发 + DWORD dwAIOPDataSize; //AIOP data数据长度 + DWORD dwPictureSize; //对应分析图片长度 + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析;可以通过URI(GET /ISAPI/Intelligent/AIOpenPlatform/algorithmModel/management?format=json)获取当前设备加载的模型包的label description信息; + BYTE *pBufferAIOPData;//AIOPDdata数据 + BYTE *pBufferPicture;//对应分析图片数据 + BYTE byPictureMode;//图片数据传输模式 0-二进制,1-武汉云云存储,当byPictureMode为0时pBufferPicture为二进制数据,当byPictureMode为1时pBufferPicture为武汉云URL BYTE byRes[183]; }NET_AIOP_HISTORY_VIDEO_HEAD, *LPNET_AIOP_HISTORY_VIDEO_HEAD; @@ -51435,46 +51435,46 @@ typedef struct _NET_AIOP_HISTORY_VIDEO_HEAD_ typedef struct _NET_AIOP_POLLING_SNAP_HEAD_ { DWORD dwSize; //dwSize = sizeof(NET_AIOP_POLLING_SNAP_HEAD) - DWORD dwChannel; //豸ͨͨ(SDKЭ) - NET_DVR_SYSTEM_TIME struTime; //ʱ - char szTaskID[64]; //ѯץͼIDѯץͼɷ - DWORD dwAIOPDataSize; //ӦAIOPDdataݳ - DWORD dwPictureSize; //ӦͼƬ - char szMPID[64]; //ģͰIDƥAIOPļݽ - BYTE *pBufferAIOPData;//AIOPDdata - BYTE *pBufferPicture;//ͼƬ - BYTE byPictureMode;//ͼƬݴģʽ 0-ƣ1-人ƴ洢byPictureModeΪ0ʱpBufferPictureΪݣbyPictureModeΪ1ʱpBufferPictureΪ人URL - BYTE byCompressedDotMatrixMode;// /ѹĵͼģʽ 0-ƣ1-人ƴ洢byCompressedDotMatrixModeΪ0ʱpCompressedDotMatrixBuffΪݣbyCompressedDotMatrixModeΪ1ʱpCompressedDotMatrixBuffΪ人URL - BYTE byRes2[2];//ֽ - DWORD dwPresetIndex; //Ԥõ - DWORD dwAddInfoPictureSize; //ӦĸͼƬ - BYTE *pAddInfoPictureBuffer;//ӦĸͼƬ(ȳ˫ͨ豸ýڵʾDZͨͼƬ) - #if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64linux64ָΪ8ֽ - char* pCompressedDotMatrixBuff; //ѹĵͼϢָ + DWORD dwChannel; //设备分析通道的通道号(走SDK协议); + NET_DVR_SYSTEM_TIME struTime; //时间 + char szTaskID[64]; //轮询抓图任务ID,来自于轮询抓图任务派发 + DWORD dwAIOPDataSize; //对应AIOPDdata数据长度 + DWORD dwPictureSize; //对应分析图片长度 + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析; + BYTE *pBufferAIOPData;//AIOPDdata数据 + BYTE *pBufferPicture;//分析图片数据 + BYTE byPictureMode;//图片数据传输模式 0-二进制,1-武汉云云存储,当byPictureMode为0时pBufferPicture为二进制数据,当byPictureMode为1时pBufferPicture为武汉云URL + BYTE byCompressedDotMatrixMode;// /压缩后的点阵图传输模式 0-二进制,1-武汉云云存储,当byCompressedDotMatrixMode为0时pCompressedDotMatrixBuff为二进制数据,当byCompressedDotMatrixMode为1时pCompressedDotMatrixBuff为武汉云URL + BYTE byRes2[2];//保留字节 + DWORD dwPresetIndex; //预置点序号 + DWORD dwAddInfoPictureSize; //对应分析的附加图片长度 + BYTE *pAddInfoPictureBuffer;//对应分析的附加图片数据(对于热成像双通道设备,该节点表示非报警通道的图片) + #if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 #else - char* pCompressedDotMatrixBuff; //ѹĵͼϢָ + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 BYTE byRes5[4]; #endif - DWORD dwCompressedDotMatrixBuffLen; //ȶӦpCompressedDotMatrixBuffݳ + DWORD dwCompressedDotMatrixBuffLen; //长度对应pCompressedDotMatrixBuff数据长度 BYTE byRes[156]; } NET_AIOP_POLLING_SNAP_HEAD, *LPNET_AIOP_POLLING_SNAP_HEAD; typedef struct tagNET_DVR_AI_ALGORITHM_MODEL { DWORD dwSize; - DWORD dwDescribeLength; //{AlgorithmModel} ļ - char* pDescribeBuffer; //{AlgorithmModel}ļ - BYTE byRes1[3];//ֽڣʹֽڶ - DWORD dwLicenseKeyLength; //licenseKeyļ - char* pLicenseKeyBuffer; //licenseKeyļ + DWORD dwDescribeLength; //{AlgorithmModel} 文件长度 + char* pDescribeBuffer; //{AlgorithmModel}文件 + BYTE byRes1[3];//保留字节,使四字节对齐 + DWORD dwLicenseKeyLength; //licenseKey文件长度 + char* pLicenseKeyBuffer; //licenseKey文件 BYTE byRes[120]; }NET_DVR_AI_ALGORITHM_MODEL, *LPNET_DVR_AI_ALGORITHM_MODEL; typedef struct tagNET_DVR_AI_PICTUR_UPLOAD { DWORD dwSize; - char szTaskID[64]; //id󳤶 = 64,ҵƽ̨ͳһά - char szPID[64]; //ͼƬid󳤶 = 64ҵƽ̨ͳһά + char szTaskID[64]; //任务id,最大长度 = 64,业务平台统一维护管理 + char szPID[64]; //图片id,最大长度 = 64,业务平台统一维护管理 BYTE byRes[128]; }NET_DVR_AI_PICTUR_UPLOAD, *LPNET_DVR_AI_PICTUR_UPLOAD; @@ -51496,13 +51496,13 @@ typedef struct _NET_DVR_CARD_RECORD DWORD dwSwipeTimes; DWORD dwEmployeeNo; BYTE byName[NAME_LEN]; - //λʾ0-Ȩޣ1-Ȩ - //0λʾ籨 - //1λʾʾ - //2λʾƿͿ - //3λʾͨ - //4λʾ - //5λʾѲ + //按位表示,0-无权限,1-有权限 + //第0位表示:弱电报警 + //第1位表示:开门提示音 + //第2位表示:限制客卡 + //第3位表示:通道 + //第4位表示:反锁开门 + //第5位表示:巡更功能 DWORD dwCardRight; BYTE byRes[256]; }NET_DVR_CARD_RECORD, *LPNET_DVR_CARD_RECORD; @@ -51510,14 +51510,14 @@ typedef struct _NET_DVR_CARD_RECORD typedef struct _NET_DVR_CARD_COND { DWORD dwSize; - DWORD dwCardNum; //ûȡȡʱΪ0xffffffffʾȡпϢ + DWORD dwCardNum; //设置或获取卡数量,获取时置为0xffffffff表示获取所有卡信息 BYTE byRes[64]; }NET_DVR_CARD_COND, *LPNET_DVR_CARD_COND; typedef struct _NET_DVR_CARD_SEND_DATA { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; // + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 BYTE byRes[16]; }NET_DVR_CARD_SEND_DATA, *LPNET_DVR_CARD_SEND_DATA; @@ -51526,62 +51526,62 @@ typedef struct _NET_DVR_CARD_STATUS DWORD dwSize; BYTE byCardNo[ACS_CARD_NO_LEN]; DWORD dwErrorCode; - BYTE byStatus; // ״̬0-ʧܣ1-ɹ + BYTE byStatus; // 状态:0-失败,1-成功 BYTE byRes[23]; }NET_DVR_CARD_STATUS, *LPNET_DVR_CARD_STATUS; typedef struct _NET_DVR_FACE_RECORD { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - DWORD dwFaceLen; //ݳ - BYTE* pFaceBuffer; //ָ + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + DWORD dwFaceLen; //人脸数据长度 + BYTE* pFaceBuffer; //人脸数据指针 BYTE byRes[128]; }NET_DVR_FACE_RECORD, *LPNET_DVR_FACE_RECORD; typedef struct _NET_DVR_FACE_STATUS { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀ - BYTE byErrorMsg[ERROR_MSG_LEN]; //·ϢbyCardReaderRecvStatusΪ4ʱʾѴӦĿ - DWORD dwReaderNo; //ţ·󷵻 - BYTE byRecvStatus; //״ֽ̬ڱʾ0-ʧܣ1-ɹ2-Ի3-ڴ()4-Ѵڸ5-ǷID - //,6-㷨ģʧܣ7-δ·Ȩޣ8-δ壨9-ۼСС10-ͼƬݳС1KB11-ͼƬʽpng/jpg/bmp,12-ͼƬޣ13-ͼƬޣ14-ͼƬϢУʧܣ15-ͼƬʧܣ16-ʧܣ17-ʧ + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为4时,表示已存在人脸对应的卡号 + DWORD dwReaderNo; //人脸读卡器编号,可用于下发错误返回 + BYTE byRecvStatus; //人脸读卡器状态,按字节表示,0-失败,1-成功,2-重试或人脸质量差,3-内存已满(人脸数据满),4-已存在该人脸,5-非法人脸ID + //,6-算法建模失败,7-未下发卡权限,8-未定义(保留),9-人眼间距小距小,10-图片数据长度小于1KB,11-图片格式不符(png/jpg/bmp),12-图片像素数量超过上限,13-图片像素数量低于下限,14-图片信息校验失败,15-图片解码失败,16-人脸检测失败,17-人脸评分失败 BYTE byRes[131]; }NET_DVR_FACE_STATUS, *LPNET_DVR_FACE_STATUS; typedef struct _NET_DVR_FACE_COND { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //Ŀţʱòɲã - DWORD dwFaceNum; // ûȡȡʱΪ0xffffffffʾȡϢ - DWORD dwEnableReaderNo; // - BYTE byRes[124]; // + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号(设置时该参数可不设置) + DWORD dwFaceNum; // 设置或获取人脸数量,获取时置为0xffffffff表示获取所有人脸信息 + DWORD dwEnableReaderNo; // 人脸读卡器编号 + BYTE byRes[124]; // 保留 }NET_DVR_FACE_COND, *LPNET_DVR_FACE_COND; typedef struct _NET_DVR_FINGERPRINT_RECORD { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - DWORD dwFingerPrintLen; //ָݳ - DWORD dwEnableReaderNo; //Ҫ·ָƵĶ - BYTE byFingerPrintID; //ָţЧֵΧΪ1-10 - BYTE byFingerType; //ָ 0-ָͨƣ1-вָ + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + DWORD dwFingerPrintLen; //指纹数据长度 + DWORD dwEnableReaderNo; //需要下发指纹的读卡器编号 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹 BYTE byRes1[30]; - BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //ָ + BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //指纹数据内容 BYTE byRes[96]; }NET_DVR_FINGERPRINT_RECORD, *LPNET_DVR_FINGERPRINT_RECORD; typedef struct _NET_DVR_FINGERPRINT_STATUS { DWORD dwSize; - BYTE byCardNo[ACS_CARD_NO_LEN]; //ָƹĿ - BYTE byCardReaderRecvStatus; //ָƶ״ֽ̬ڱʾ0-ʧܣ1-ɹ2-ָģ鲻ߣ3-Իָ4-ڴ5-Ѵڸָƣ6-ѴڸָID7-ǷָID8-ָģ - BYTE byFingerPrintID; //ָţЧֵΧΪ1-10 - BYTE byFingerType; //ָ 0-ָͨƣ1-вָ - BYTE byRecvStatus; //״̬0-ɹ1-ָŴ2-ָʹ3-Ŵ󣨿Ź񲻷豸Ҫ󣩣4-ָδŻ򿨺ţŻ򿨺ֶΪգ5-Ųڣ6-ָݳΪ07-Ŵ8-Ŵ - BYTE byErrorMsg[ERROR_MSG_LEN]; //·ϢbyCardReaderRecvStatusΪ5ʱʾѴָƶӦĿ - DWORD dwCardReaderNo; //byCardReaderRecvStatusΪ5ʱʾѴָƶӦָƶţ·󷵻ء0ʱʾ޴Ϣ + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byCardReaderRecvStatus; //指纹读卡器状态,按字节表示,0-失败,1-成功,2-该指纹模组不在线,3-重试或指纹质量差,4-内存已满,5-已存在该指纹,6-已存在该指纹ID,7-非法指纹ID,8-该指纹模组无需配置 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹 + BYTE byRecvStatus; //主机错误状态:0-成功,1-手指编号错误,2-指纹类型错误,3-卡号错误(卡号规格不符合设备要求),4-指纹未关联工号或卡号(工号或卡号字段为空),5-工号不存在,6-指纹数据长度为0,7-读卡器编号错误,8-工号错误 + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为5时,表示已存在指纹对应的卡号 + DWORD dwCardReaderNo; //当byCardReaderRecvStatus为5时,表示已存在指纹对应的指纹读卡器编号,可用于下发错误返回。0时表示无错误信息 BYTE byRes[20]; }NET_DVR_FINGERPRINT_STATUS, *LPNET_DVR_FINGERPRINT_STATUS; @@ -51598,7 +51598,7 @@ typedef struct tagNET_DVR_FINGERPRINT_COND typedef struct tagNET_DVR_CAPTURE_DATA_COND { DWORD dwSize; - char szPassword[128]; //Կַ + char szPassword[128]; //秘钥,字符串 BYTE byRes[128]; }NET_DVR_CAPTURE_DATA_COND, *LPNET_DVR_CAPTURE_DATA_COND; @@ -51606,21 +51606,21 @@ typedef struct tagNET_DVR_CAPTURE_DATA_COND #define EZVIZ_DEVICEID_LEN 32 typedef struct tagNET_DVR_EZVIZ_USER_LOGIN_INFO { - char sEzvizServerAddress[NET_DVR_DEV_ADDRESS_MAX_LEN]; //Ʒַ - WORD wPort; //Ʒ˿ + char sEzvizServerAddress[NET_DVR_DEV_ADDRESS_MAX_LEN]; //云服务器地址 + WORD wPort; //云服务器端口 BYTE byLogin; BYTE byRes1[1]; - char sClassSession[EZVIZ_CLASSSESSION_LEN]; //ClassSession, һַÿͨʱҪ͸ - char sDeviceID[EZVIZ_DEVICEID_LEN]; //豸ID ɷ + char sClassSession[EZVIZ_CLASSSESSION_LEN]; //ClassSession, 服务器分配的一个字符串,每次通信时需要发送给服务器 + char sDeviceID[EZVIZ_DEVICEID_LEN]; //设备ID, 由服务器分配的 BYTE byRes2[128]; }NET_DVR_EZVIZ_USER_LOGIN_INFO, *LPNET_DVR_EZVIZ_USER_LOGIN_INFO; typedef struct tagNET_DVR_PLAYBACKCTRL_V60 { DWORD dwSize; - BYTE byUUID[64]; //زUUIDűβΨһʶ - NET_DVR_TIME_V50 struTime; //ʱṹ塣 - BYTE Res[64]; //ֽ + BYTE byUUID[64]; //流控操作UUID,代表着本次操作唯一标识 + NET_DVR_TIME_V50 struTime; //时间参数结构体。 + BYTE Res[64]; //保留字节 }NET_DVR_PLAYBACKCTRL_V60, *LPNET_DVR_PLAYBACKCTRL_V60; @@ -51634,47 +51634,47 @@ typedef struct tagNET_DVR_PLAYBACKCTRL_V60 #define EZVIZ_APPID_LEN 64 typedef struct tagNET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO { - char sEzvizServerAddress[NET_DVR_DEV_ADDRESS_MAX_LEN]; //Ʒַ + char sEzvizServerAddress[NET_DVR_DEV_ADDRESS_MAX_LEN]; //云服务器地址 BYTE byRes1[3]; - WORD wPort; //Ʒ˿ + WORD wPort; //云服务器端口 BYTE byRes2[2]; char sUrl[EZVIZ_REQURL_LEN]; - char sAccessToken[EZVIZ_ACCESSTOKEN_LEN]; //accessToken, һַÿͨʱҪ͸ - char sDeviceID[EZVIZ_DEVICEID_LEN]; //豸ID ɷ - char sClientType[EZVIZ_CLIENTTYPE_LEN]; //ͻ: 0: PC-ؼ 1: ios 2: android - char sFeatureCode[EZVIZ_FEATURECODE_LEN]; //Ӳ - char sOsVersion[EZVIZ_OSVERSION_LEN]; //նϵͳ汾, : IOS 7.0.4, Android 2.3. - char sNetType[EZVIZ_NETTYPE_LEN]; //, UNKNOWN GPRS EDGE UMTS HSDPA HSUPA HSPA CDMAEVDO_0 EVDO_A EVDO_B 1xRTT IDEN WIFI - char sSdkVersion[EZVIZ_SDKVERSION_LEN]; //Sdk汾, v.1.0.20140720.45xx - char sAppID[EZVIZ_APPID_LEN]; //AppIDiosϱBundleIDAndroidϱ + char sAccessToken[EZVIZ_ACCESSTOKEN_LEN]; //accessToken, 服务器分配的一个字符串,每次通信时需要发送给服务器 + char sDeviceID[EZVIZ_DEVICEID_LEN]; //设备ID, 由服务器分配的 + char sClientType[EZVIZ_CLIENTTYPE_LEN]; //客户端类型: 0: PC-控件 1: ios 2: android + char sFeatureCode[EZVIZ_FEATURECODE_LEN]; //硬件特征码 + char sOsVersion[EZVIZ_OSVERSION_LEN]; //终端系统版本, 例如: IOS 7.0.4, Android 2.3. + char sNetType[EZVIZ_NETTYPE_LEN]; //网络类型, UNKNOWN GPRS EDGE UMTS HSDPA HSUPA HSPA CDMAEVDO_0 EVDO_A EVDO_B 1xRTT IDEN WIFI + char sSdkVersion[EZVIZ_SDKVERSION_LEN]; //Sdk版本号, v.1.0.20140720.45xx + char sAppID[EZVIZ_APPID_LEN]; //AppID,ios上报BundleID,Android上报包名 BYTE byRes3[512]; }NET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO, *LPNET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO; -#define MAX_ERROR_MSG_LEN 256 //󱨾Ϣ -//쳣 +#define MAX_ERROR_MSG_LEN 256 //最大报警错误描述信息 +//报警异常类型 typedef enum tagALARM_EXCEPTION_ERROR_ENUM { - ENUM_AEE_PARAM_ERROR = 1, // - ENUM_AEE_LENS_ERROR = 2, //Ȳƥڲṹ - ENUM_AEE_PIC_LENS_ERROR = 3, //ͼƬȲƥ - ENUM_AEE_DEVID_LENS_ERROR = 4, //DeviceIDȲƥ - ENUM_AEE_NEW_ALLOC_ERROR = 5, //ڴʧ - ENUM_AEE_JSON_FORMAT_ERROR = 6, //JOSNʽ - ENUM_AEE_XML_FORMAT_ERROR = 7, //XMLʽ - ENUM_AEE_BINARY_PIC_ERROR = 8, //ͼƬݴ쳣 - ENUM_AEE_PIC_NUM_ERROR = 9, //ͳͼƬ쳣 - ENUM_AEE_GET_BOUNDARY_ERROR = 10, //ȡboundary쳣 - ENUM_AEE_BOUNDARY_NUM_ERROR = 11, //ȡboundaryĿ쳣 + ENUM_AEE_PARAM_ERROR = 1, //参数错误 + ENUM_AEE_LENS_ERROR = 2, //长度不匹配内部结构体 + ENUM_AEE_PIC_LENS_ERROR = 3, //带图片长度不匹配 + ENUM_AEE_DEVID_LENS_ERROR = 4, //DeviceID长度不匹配 + ENUM_AEE_NEW_ALLOC_ERROR = 5, //申请内存失败 + ENUM_AEE_JSON_FORMAT_ERROR = 6, //JOSN格式错误 + ENUM_AEE_XML_FORMAT_ERROR = 7, //XML格式错误 + ENUM_AEE_BINARY_PIC_ERROR = 8, //二进制图片数据处理异常 + ENUM_AEE_PIC_NUM_ERROR = 9, //统计图片数据异常 + ENUM_AEE_GET_BOUNDARY_ERROR = 10, //提取boundary数据异常 + ENUM_AEE_BOUNDARY_NUM_ERROR = 11, //提取boundary数目异常 }ALARM_EXCEPTION_ERROR_ENUM; -//쳣ṹ +//报警异常结构体 typedef struct tagNET_ALARM_EXCEPTION { - DWORD dwAlarmType; // - BYTE byExceptionType; //쳣,μ ALARM_EXCEPTION_ERROR_ENUM + DWORD dwAlarmType; //报警类型 + BYTE byExceptionType; //报警异常类型,参见 ALARM_EXCEPTION_ERROR_ENUM BYTE byRes[3]; // - char szErrMsg[MAX_ERROR_MSG_LEN]; //Ϣ + char szErrMsg[MAX_ERROR_MSG_LEN]; //错误信息描述 BYTE byRes1[248]; // }NET_ALARM_EXCEPTION, *LPNET_ALARM_EXCEPTION; @@ -51700,67 +51700,67 @@ enum ADDITIONAL_LIB typedef struct tagNET_DVR_AUTOTEST_CFG_HEAD { DWORD dwSize; - DWORD dwInfoType; //1ʾƵԣ3ʾԽ + DWORD dwInfoType; //1表示视频测试,3表示语音对讲测试 DWORD dwRetResult; - DWORD dwDataBodySize; //ĽṹݴС - void* lpDataBody; //Ľṹ + DWORD dwDataBodySize; //后面的结构体内容大小 + void* lpDataBody; //后面的结构体 BYTE byRes[32]; }NET_DVR_AUTOTEST_CFG_HEAD,*LPNET_DVR_AUTOTEST_CFG_HEAD; -//ƵԽṹ +//视频测试结构体如下 typedef struct tagNET_DVR_AUTOTEST_VIDEO_CFG { - DWORD dwSplitScreenNums; //֧149 - DWORD dwVoCh; //Ĭд1 - DWORD dwInterface; //1ʾCVBS2ʾHDMI3ʾVGA4ʾHDMI + DWORD dwSplitScreenNums; //分屏数,支持1、4、9 + DWORD dwVoCh; //默认填写1 + DWORD dwInterface; //1表示CVBS、2表示HDMI、3表示VGA、4表示辅口HDMI }NET_DVR_AUTOTEST_VIDEO_CFG,*LPNET_DVR_AUTOTEST_VIDEO_CFG; -//ƵԽṹ +//音频测试结构体如下 typedef struct tagNET_DVR_AUTOTEST_AUDIO_CFG { - DWORD dwVoCh; //Ĭд2 - DWORD dwOpen; //10 + DWORD dwVoCh; //默认填写2 + DWORD dwOpen; //1开启,0不开启 }NET_DVR_AUTOTEST_AUDIO_CFG, *LPNET_DVR_AUTOTEST_AUDIO_CFG; typedef struct tagNET_LOCAL_AUDIOCAST_PARAM { - BYTE byAudioBitRate; //Ƶ ο BITRATE_ENCODE_INDEX - BYTE byAudioSamplingRate; //Ƶ 0-Ĭϣ1-16kHZ2-32kHZ3-48kHZ, 4- 44.1kHZ,5-8kHZ + BYTE byAudioBitRate; //音频码率 参考 BITRATE_ENCODE_INDEX + BYTE byAudioSamplingRate; //音频采样率 0-默认,1-16kHZ,2-32kHZ,3-48kHZ, 4- 44.1kHZ,5-8kHZ BYTE byRes[30]; }NET_LOCAL_AUDIOCAST_PARAM, *LPNET_LOCAL_AUDIOCAST_PARAM; typedef struct tagNET_LOCAL_AUDIOCAST_CFG { - NET_LOCAL_AUDIOCAST_PARAM struAudioCastParam[MAX_AUDIOCAST_CFG_TYPE]; //13Ԫطֱʾ MP3MPEG2AAC㲥ãӦԪزΪĬϲ͹㲥 + NET_LOCAL_AUDIOCAST_PARAM struAudioCastParam[MAX_AUDIOCAST_CFG_TYPE]; //第1到3个元素分别表示: MP3、MPEG2、AAC广播参数的配置,对应元素不填则为默认参数。其余编码类型广播参数不可配置 BYTE byRes[64]; }NET_LOCAL_AUDIOCAST_CFG, *LPNET_LOCAL_AUDIOCAST_CFG; -//NVR͸豸ͷ +//NVR透传子设备报警头 typedef struct _tagNET_DVR_CHILD_DEVICE_HEAD_ { - BYTE szChildDeviceID[32]; //豸ID - DWORD dwChannel; /*豸ͨ*/ - NET_DVR_TIME_V50 struTime; /* NVRеʱ*/ - BYTE byRes[4]; /*ֶ*/ + BYTE szChildDeviceID[32]; //子设备ID + DWORD dwChannel; /*子设备通道号*/ + NET_DVR_TIME_V50 struTime; /* NVR中的时间*/ + BYTE byRes[4]; /*保留字段*/ }NET_DVR_CHILD_DEVICE_HEAD, *LPNET_DVR_CHILD_DEVICE_HEAD; -//NVR͸豸ݽṹ +//NVR透传子设备报警数据结构体 typedef struct tagNET_DVR_CHILD_DEVICE_ALARM { - NET_DVR_CHILD_DEVICE_HEAD struChildDevHead; //NVR͸豸ͷ - DWORD dwCommand; // ԭʼ - DWORD dwAlarmLen; // ݳ - void* pAlarmInfo; // Ϣݱͽ - BYTE byRes[256]; // + NET_DVR_CHILD_DEVICE_HEAD struChildDevHead; //NVR透传子设备报警头 + DWORD dwCommand; // 原始报警类型 + DWORD dwAlarmLen; // 报警数据长度 + void* pAlarmInfo; // 报警信息。根据报警类型解析该内容 + BYTE byRes[256]; // 保留 }NET_DVR_CHILD_DEVICE_ALARM, *LPNET_DVR_CHILD_DEVICE_ALARM; #if ((defined __linux__) || (defined _WIN64)) -typedef struct _NET_DVR_AUDIOENCInfo /* Ϣ */ +typedef struct _NET_DVR_AUDIOENCInfo /* 信息 */ { - DWORD in_frame_size; /* һ֡ݴС(BYTES)GetInfoParam */ - int reserved[16]; /* */ + DWORD in_frame_size; /* 输入一帧数据大小(BYTES),由GetInfoParam函数返回 */ + int reserved[16]; /* 保留 */ } NET_DVR_AUDIOENC_INFO; -/* ģʽ */ +/* 编码模式 */ typedef enum _ENUM_AUDIO_ENC_MODE { AMR_MR475_ = 0, /* 4.75 kb/s */ @@ -51772,66 +51772,66 @@ typedef enum _ENUM_AUDIO_ENC_MODE AMR_MR102_, /* 10.2 kb/s */ AMR_MR122_, /* 12.2 kb/s */ - AMR_MRDTX_, /* ֡ */ + AMR_MRDTX_, /* 静音帧 */ AMR_N_MODES_ }ENUM_AUDIO_ENC_MODE; -// Ƶ +// 音频编码 typedef struct _NET_DVR_AUDIOENC_PROCESS_PARAM_ { - unsigned char *in_buf; /* buf */ - unsigned char *out_buf; /* buf */ - DWORD out_frame_size; /* һ֡BYTE */ + unsigned char *in_buf; /* 输入buf */ + unsigned char *out_buf; /* 输出buf */ + DWORD out_frame_size; /* 编码一帧后的BYTE数 */ - int g726enc_reset; /* ÿ */ - int g711_type; /* g711,0 - U law, 1- A law */ - ENUM_AUDIO_ENC_MODE enc_mode; /* ƵģʽAMR */ - int reserved[16]; /* */ + int g726enc_reset; /* 重置开关 */ + int g711_type; /* g711编码类型,0 - U law, 1- A law */ + ENUM_AUDIO_ENC_MODE enc_mode; /* 音频编码模式,AMR编码配置 */ + int reserved[16]; /* 保留 */ }NET_DVR_AUDIOENC_PROCESS_PARAM; -typedef struct _NET_DVR_AUDIODECInfo /* Ϣ */ +typedef struct _NET_DVR_AUDIODECInfo /* 信息 */ { - int nchans; /* */ - int sample_rate; /* */ - int aacdec_profile; /* õĿ */ - int reserved[16]; /* */ + int nchans; /* 声道数 */ + int sample_rate; /* 采样率 */ + int aacdec_profile; /* 编码用的框架 */ + int reserved[16]; /* 保留 */ } NET_DVR_AUDIODEC_INFO; -// Ƶ +// 音频解码 typedef struct _NET_DVR_AUDIODEC_PROCESS_PARAM { - unsigned char *in_buf; /* buf */ - unsigned char *out_buf; /* buf */ - DWORD in_data_size; /* in_bufbyte */ - DWORD proc_data_size; /* ⴦in_bufݴСbytes */ - DWORD out_frame_size; /* һ֡BYTE */ - NET_DVR_AUDIODEC_INFO dec_info; /* Ϣ */ + unsigned char *in_buf; /* 输入数据buf */ + unsigned char *out_buf; /* 输出数据buf */ + DWORD in_data_size; /* 输入in_buf内数据byte数 */ + DWORD proc_data_size; /* 输出解码库处理in_buf中数据大小bytes */ + DWORD out_frame_size; /* 解码一帧后数据BYTE数 */ + NET_DVR_AUDIODEC_INFO dec_info; /* 输出解码信息 */ - int g726dec_reset; /* ÿ */ - int g711_type; /* g711,0 - U law, 1- A law */ - int reserved[16]; /* */ + int g726dec_reset; /* 重置开关 */ + int g711_type; /* g711编码类型,0 - U law, 1- A law */ + int reserved[16]; /* 保留 */ } NET_DVR_AUDIODEC_PROCESS_PARAM; -const unsigned int G726_EBCIN_DECOUT_SIZE = 640; // G726һ֡һ֡ĴС +const unsigned int G726_EBCIN_DECOUT_SIZE = 640; // G726库编码输入一帧及解码输出一帧的大小(定长) #if (defined __x86_64__) -const unsigned int G726_ENC_OUT_SIZE = 160; // G726һ֡С -const unsigned int G726_DEC_IN_SIZE = 200; // G726һ֡볤ȣ +const unsigned int G726_ENC_OUT_SIZE = 160; // G726库输入一帧编码输出大小(定长) +const unsigned int G726_DEC_IN_SIZE = 200; // G726库输入一帧到解码长度(定长) #else // if (defined __i386__) -const unsigned int G726_ENC_OUT_SIZE = 80; // G726һ֡С -const unsigned int G726_DEC_IN_SIZE = 80; // G726һ֡볤ȣ +const unsigned int G726_ENC_OUT_SIZE = 80; // G726库输入一帧编码输出大小(定长) +const unsigned int G726_DEC_IN_SIZE = 80; // G726库输入一帧到解码长度(定长) #endif // (defined __x86_64__) #endif // (defined __linux__) -/********************************SDKӿں*********************************/ +/********************************SDK接口函数声明*********************************/ NET_DVR_API BOOL __stdcall NET_DVR_Init(); NET_DVR_API BOOL __stdcall NET_DVR_Cleanup(); -//NET_DVR_SetDVRMessageչ +//NET_DVR_SetDVRMessage的扩展 #ifdef _WIN32 NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessage(UINT nMessage,HWND hWnd); NET_DVR_API BOOL __stdcall NET_DVR_SetExceptionCallBack_V30(UINT nMessage, HWND hWnd, void (CALLBACK* fExceptionCallBack)(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser), void *pUser); #elif defined(__linux__) || defined(__APPLE__) NET_DVR_API BOOL __stdcall NET_DVR_SetExceptionCallBack_V30(UINT reserved1, void* reserved2, void (CALLBACK* fExceptionCallBack)(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser), void *pUser); -/*Linuxר */ +/*Linux专有 */ #if defined(__linux__) NET_DVR_API BOOL NET_DVR_DrawAreaInit(INITINFO InitInfo, DWORD iUseSDL = 1); NET_DVR_API BOOL NET_DVR_DrawAreaRelease(); @@ -51875,7 +51875,7 @@ NET_DVR_API BOOL __stdcall NET_DVR_GetDVRIPByResolveSvr(char *sServerIP, WORD wS NET_DVR_API BOOL __stdcall NET_DVR_GetDVRIPByResolveSvr_EX(char *sServerIP, WORD wServerPort, BYTE *sDVRName, WORD wDVRNameLen, BYTE *sDVRSerialNumber, WORD wDVRSerialLen, char* sGetIP, DWORD *dwPort); NET_DVR_API BOOL __stdcall NET_DVR_GetDVRNAMEByResolveSvr(char const *sServerIP, WORD wServerPort, char const *sIP, char *sDVRName); -//Ԥؽӿ +//预览相关接口 NET_DVR_API LONG __stdcall NET_DVR_PlayDirect(char *sDVRIP, char *sUserName, char *sPassword, \ LPNET_DVR_CLIENTINFO lpClientInfo, void(CALLBACK *fRealDataCallBack_V30) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser) = NULL, void* pUser = NULL, BOOL bBlocked = FALSE); NET_DVR_API LONG __stdcall NET_DVR_RealPlay(LONG lUserID,LPNET_DVR_CLIENTINFO lpClientInfo); @@ -51902,11 +51902,11 @@ NET_DVR_API BOOL __stdcall NET_DVR_SetTransparentDataCallBack(LONG lRealHandle, NET_DVR_API BOOL __stdcall NET_DVR_CapturePicture(LONG lRealHandle,char *sPicFileName);//bmp NET_DVR_API BOOL __stdcall NET_DVR_SetCapturePictureMode(DWORD dwCaptureMode); -//̬I֡ -NET_DVR_API BOOL __stdcall NET_DVR_MakeKeyFrame(LONG lUserID, LONG lChannel);// -NET_DVR_API BOOL __stdcall NET_DVR_MakeKeyFrameSub(LONG lUserID, LONG lChannel);// +//动态生成I帧 +NET_DVR_API BOOL __stdcall NET_DVR_MakeKeyFrame(LONG lUserID, LONG lChannel);//主码流 +NET_DVR_API BOOL __stdcall NET_DVR_MakeKeyFrameSub(LONG lUserID, LONG lChannel);//子码流 -//̨ؽӿ +//云台控制相关接口 NET_DVR_API BOOL __stdcall NET_DVR_PTZControl(LONG lRealHandle,DWORD dwPTZCommand,DWORD dwStop); NET_DVR_API BOOL __stdcall NET_DVR_PTZControl_Other(LONG lUserID,LONG lChannel,DWORD dwPTZCommand,DWORD dwStop); NET_DVR_API BOOL __stdcall NET_DVR_TransPTZ(LONG lRealHandle,char *pPTZCodeBuf,DWORD dwBufSize); @@ -51928,7 +51928,7 @@ NET_DVR_API BOOL __stdcall NET_DVR_PTZControlWithSpeed_EX(LONG lRealHandle, DWOR NET_DVR_API BOOL __stdcall NET_DVR_GetPTZCruise(LONG lUserID,LONG lChannel,LONG lCruiseRoute, LPNET_DVR_CRUISE_RET lpCruiseRet); -//ļط +//文件查找与回放 NET_DVR_API LONG __stdcall NET_DVR_FindFile(LONG lUserID,LONG lChannel,DWORD dwFileType, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime); NET_DVR_API LONG __stdcall NET_DVR_FindNextFile(LONG lFindHandle,LPNET_DVR_FIND_DATA lpFindData); NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_Card(LONG lFindHandle, LPNET_DVR_FINDDATA_CARD lpFindData); @@ -51966,7 +51966,7 @@ NET_DVR_API BOOL __stdcall NET_DVR_StopGetFile(LONG lFileHandle); NET_DVR_API int __stdcall NET_DVR_GetDownloadPos(LONG lFileHandle); NET_DVR_API int __stdcall NET_DVR_GetPlayBackPos(LONG lPlayHandle); -// +//升级 NET_DVR_API LONG __stdcall NET_DVR_AdapterUpgrade(LONG lUserID, char *sFileName); NET_DVR_API LONG __stdcall NET_DVR_Upgrade(LONG lUserID, char *sFileName); NET_DVR_API LONG __stdcall NET_DVR_VcalibUpgrade(LONG lUserID, LONG lChannel, char const *sFileName); @@ -51974,28 +51974,28 @@ NET_DVR_API int __stdcall NET_DVR_GetUpgradeState(LONG lUpgradeHandle); NET_DVR_API int __stdcall NET_DVR_GetUpgradeProgress(LONG lUpgradeHandle); NET_DVR_API BOOL __stdcall NET_DVR_CloseUpgradeHandle(LONG lUpgradeHandle); NET_DVR_API BOOL __stdcall NET_DVR_SetNetworkEnvironment(DWORD dwEnvironmentLevel); -//Զ̸ʽӲ +//远程格式化硬盘 NET_DVR_API LONG __stdcall NET_DVR_FormatDisk(LONG lUserID,LONG lDiskNumber); NET_DVR_API LONG __stdcall NET_DVR_FormatDisk_V50(LONG lUserID, NET_DVR_FORMAT_HDD *lpStruHddFormatCond); NET_DVR_API BOOL __stdcall NET_DVR_GetFormatProgress(LONG lFormatHandle, LONG *pCurrentFormatDisk,LONG *pCurrentDiskPos,LONG *pFormatStatic); NET_DVR_API BOOL __stdcall NET_DVR_CloseFormatHandle(LONG lFormatHandle); -// +//报警 NET_DVR_API LONG __stdcall NET_DVR_SetupAlarmChan(LONG lUserID); NET_DVR_API BOOL __stdcall NET_DVR_CloseAlarmChan(LONG lAlarmHandle); NET_DVR_API LONG __stdcall NET_DVR_SetupAlarmChan_V30(LONG lUserID); NET_DVR_API BOOL __stdcall NET_DVR_CloseAlarmChan_V30(LONG lAlarmHandle); -//Խ +//语音对讲 NET_DVR_API LONG __stdcall NET_DVR_StartVoiceCom(LONG lUserID, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, DWORD dwUser), DWORD dwUser); NET_DVR_API LONG __stdcall NET_DVR_StartVoiceCom_V30(LONG lUserID, DWORD dwVoiceChan, BOOL bNeedCBNoEncData, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, void* pUser), void* pUser); NET_DVR_API BOOL __stdcall NET_DVR_SetVoiceComClientVolume(LONG lVoiceComHandle, WORD wVolume); NET_DVR_API BOOL __stdcall NET_DVR_StopVoiceCom(LONG lVoiceComHandle); -//ת +//语音转发 NET_DVR_API LONG __stdcall NET_DVR_StartVoiceCom_MR(LONG lUserID, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, DWORD dwUser), DWORD dwUser); NET_DVR_API LONG __stdcall NET_DVR_StartVoiceCom_MR_V30(LONG lUserID, DWORD dwVoiceChan, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, void* pUser), void* pUser); NET_DVR_API BOOL __stdcall NET_DVR_VoiceComSendData(LONG lVoiceComHandle, char *pSendBuf, DWORD dwBufSize); NET_DVR_API BOOL __stdcall NET_DVR_GetCurrentAudioCompress(LONG lUserID, LPNET_DVR_COMPRESSION_AUDIO lpCompressAudio); NET_DVR_API BOOL __stdcall NET_DVR_GetCurrentAudioCompress_V50(LONG lUserID, LPNET_DVR_AUDIO_CHANNEL lpAudioChannel, LPNET_DVR_COMPRESSION_AUDIO lpCompressAudio); -//㲥 +//语音广播 NET_DVR_API BOOL __stdcall NET_DVR_ClientAudioStart(); NET_DVR_API BOOL __stdcall NET_DVR_ClientAudioStart_V30(void(CALLBACK *fVoiceDataCallBack)(char *pRecvDataBuffer, DWORD dwBufSize, void * pUser), void *pUser); NET_DVR_API BOOL __stdcall NET_DVR_ClientAudioStop(); @@ -52003,9 +52003,9 @@ NET_DVR_API BOOL __stdcall NET_DVR_AddDVR(LONG lUserID); NET_DVR_API LONG __stdcall NET_DVR_AddDVR_V30(LONG lUserID, DWORD dwVoiceChan); NET_DVR_API BOOL __stdcall NET_DVR_DelDVR(LONG lUserID); NET_DVR_API BOOL __stdcall NET_DVR_DelDVR_V30(LONG lVoiceHandle); -//͸ͨ +//透明通道设置 NET_DVR_API LONG __stdcall NET_DVR_SerialStart(LONG lUserID,LONG lSerialPort,void(CALLBACK *fSerialDataCallBack)(LONG lSerialHandle,char *pRecvDataBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser); -//485Ϊ͸ͨʱҪָͨţΪͬͨ485ÿԲͬ(粨) +//485作为透明通道时,需要指明通道号,因为不同通道号485的设置可以不同(比如波特率) NET_DVR_API LONG __stdcall NET_DVR_SerialStart_V40(LONG lUserID,void* lpInBuffer, LONG dwInBufferSize, void(CALLBACK *fSerialDataCallBack)(LONG lSerialHandle, LONG lCHannel, char *pRecvDataBuffer, DWORD dwBufSize, void* pUser), void* pUser); NET_DVR_API BOOL __stdcall NET_DVR_SerialSend(LONG lSerialHandle, LONG lChannel, char *pSendBuf,DWORD dwBufSize); NET_DVR_API BOOL __stdcall NET_DVR_SerialStop(LONG lSerialHandle); @@ -52029,17 +52029,17 @@ NET_DVR_API BOOL __stdcall NET_DVR_EncodeG722Frame(void *handle, NET_DVR_AUDIOEN NET_DVR_API void __stdcall NET_DVR_ReleaseG722Decoder(void *pDecHandle); NET_DVR_API void __stdcall NET_DVR_ReleaseG722Encoder(void *pEncodeHandle); -// +//解码 NET_DVR_API void* __stdcall NET_DVR_InitG726Decoder(void** pDecMoudle); NET_DVR_API void __stdcall NET_DVR_ReleaseG726Decoder(void *pDecHandle); NET_DVR_API BOOL __stdcall NET_DVR_DecodeG726Frame(void *pDecMoudle, BYTE* pInBuffer, BYTE* pOutBuffer, BYTE byReset); -// +//编码 NET_DVR_API void* __stdcall NET_DVR_InitG726Encoder(void** pEncMoudle); NET_DVR_API BOOL __stdcall NET_DVR_EncodeG726Frame(void *pEncMoudle, BYTE* pInBuffer, BYTE* pOutBuffer, BYTE byReset); NET_DVR_API void __stdcall NET_DVR_ReleaseG726Encoder(void *pEncHandle); -//Զ̿Ʊʾ +//远程控制本地显示 NET_DVR_API BOOL __stdcall NET_DVR_ClickKey(LONG lUserID, LONG lKeyIndex); NET_DVR_API BOOL __stdcall NET_DVR_DoorBellControl(LONG lUserID); @@ -52049,10 +52049,10 @@ NET_DVR_API BOOL __stdcall NET_DVR_PlayBackByNameLocDisplay(LONG lUserID, char * NET_DVR_API BOOL __stdcall NET_DVR_PlayBackByTimeLocDisplay(LONG lUserID, LONG lChannel, NET_DVR_TIME const *lpStartTime, NET_DVR_TIME const *lpStopTime); NET_DVR_API BOOL __stdcall NET_DVR_StopLocDisplayPlay(LONG lUserID); NET_DVR_API BOOL __stdcall NET_DVR_PlayControlLocDisplay(LONG lUserID, DWORD dwControlCode); -//Զ̿豸ֶ¼ +//远程控制设备端手动录像 NET_DVR_API BOOL __stdcall NET_DVR_StartDVRRecord(LONG lUserID,LONG lChannel,LONG lRecordType); NET_DVR_API BOOL __stdcall NET_DVR_StopDVRRecord(LONG lUserID,LONG lChannel); -//뿨 +//解码卡 NET_DVR_API BOOL __stdcall NET_DVR_InitDevice_Card(long *pDeviceTotalChan); NET_DVR_API BOOL __stdcall NET_DVR_ReleaseDevice_Card(); NET_DVR_API BOOL __stdcall NET_DVR_InitDDraw_Card(HWND hParent,COLORREF colorKey); @@ -52136,13 +52136,13 @@ NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDecChanStatus(LONG lUserID, DWORD dw NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetVideoStandard(LONG lUserID, DWORD dwDecChanNum, LPDWORD lpdwVideoStandard); NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetVideoStandard(LONG lUserID, DWORD dwDecChanNum, DWORD dwVideoStandard); -//2007-12-22 ֽ֧ӿ +//2007-12-22 增加支持接口 NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetTranInfo(LONG lUserID, LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG lpTranInfo); NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetTranInfo(LONG lUserID, LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG lpTranInfo); NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetRemotePlay(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_REMOTE_PLAY lpInter); NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetRemotePlayControl(LONG lUserID, DWORD dwDecChanNum, DWORD dwControlCode, DWORD dwInValue, DWORD *LPOutValue); NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetRemotePlayStatus(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS lpOuter); -//2009-4-13 +//2009-4-13 新增 NET_DVR_API BOOL __stdcall NET_DVR_MatrixStartDynamic_V30(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_PU_STREAM_CFG lpDynamicInfo); NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetLoopDecChanInfo_V30(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO_V30 lpInter); NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetLoopDecChanInfo_V30(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO_V30 lpInter); @@ -52156,15 +52156,15 @@ NET_DVR_API LONG __stdcall NET_DVR_MatrixStartPassiveDecode(LONG lUserID, DWORD NET_DVR_API BOOL __stdcall NET_DVR_MatrixSendData(LONG lPassiveHandle, char *pSendBuf, DWORD dwBufSize); NET_DVR_API BOOL __stdcall NET_DVR_MatrixStopPassiveDecode(LONG lPassiveHandle); NET_DVR_API BOOL __stdcall NET_DVR_UploadLogo(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_DISP_LOGOCFG lpDispLogoCfg, char *sLogoBuffer); -#define NET_DVR_SHOWLOGO 1 /*ʾLOGO*/ -#define NET_DVR_HIDELOGO 2 /*LOGO*/ +#define NET_DVR_SHOWLOGO 1 /*显示LOGO*/ +#define NET_DVR_HIDELOGO 2 /*隐藏LOGO*/ NET_DVR_API BOOL __stdcall NET_DVR_LogoSwitch(LONG lUserID, DWORD dwDecChan, DWORD dwLogoSwitch); NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDeviceStatus(LONG lUserID, LPNET_DVR_DECODER_WORK_STATUS lpDecoderCfg); -#define DISP_CMD_ENLARGE_WINDOW 1 /*ʾͨŴij*/ -#define DISP_CMD_RENEW_WINDOW 2 /*ʾͨڻԭ*/ -#define DISP_CMD_OPENAUDIO 3 /*ʾͨƵ*/ -#define DISP_CMD_CLOSEAUDIO 4 /*ʾͨرƵ*/ +#define DISP_CMD_ENLARGE_WINDOW 1 /*显示通道放大某个窗口*/ +#define DISP_CMD_RENEW_WINDOW 2 /*显示通道窗口还原*/ +#define DISP_CMD_OPENAUDIO 3 /*显示通道打开音频*/ +#define DISP_CMD_CLOSEAUDIO 4 /*显示通道关闭音频*/ NET_DVR_API BOOL __stdcall NET_DVR_MatrixDiaplayControl(LONG lUserID, DWORD dwDispChanNum, DWORD dwDispChanCmd, DWORD dwCmdParam); NET_DVR_API BOOL __stdcall NET_DVR_MatrixPassiveDecodeControl(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_PASSIVEDECODE_CONTROL lpInter); @@ -52175,16 +52175,16 @@ NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetDecChanCfg(LONG lUserID, DWORD dwDec NET_DVR_API LONG __stdcall NET_DVR_PlayBackByTime_NEW(LONG lUserID, LONG lChannel, NET_DVR_TIME const *lpStartTime, NET_DVR_TIME const *lpStopTime, LONG lLongitude, LONG lLatitude, HWND hWnd); NET_DVR_API BOOL __stdcall NET_DVR_RefreshPlay(LONG lPlayHandle); -//ָĬֵ +//恢复默认值 NET_DVR_API BOOL __stdcall NET_DVR_RestoreConfig(LONG lUserID); -// +//保存参数 NET_DVR_API BOOL __stdcall NET_DVR_SaveConfig(LONG lUserID); -// +//重启 NET_DVR_API BOOL __stdcall NET_DVR_RebootDVR(LONG lUserID); -//رDVR +//关闭DVR NET_DVR_API BOOL __stdcall NET_DVR_ShutDownDVR(LONG lUserID); -// begin +//参数配置 begin NET_DVR_API BOOL __stdcall NET_DVR_GetDVRConfig(LONG lUserID, DWORD dwCommand,LONG lChannel, LPVOID lpOutBuffer, DWORD dwOutBufferSize, LPDWORD lpBytesReturned); NET_DVR_API BOOL __stdcall NET_DVR_SetDVRConfig(LONG lUserID, DWORD dwCommand,LONG lChannel, LPVOID lpInBuffer, DWORD dwInBufferSize); NET_DVR_API BOOL __stdcall NET_DVR_GetDVRWorkState_V30(LONG lUserID, LPNET_DVR_WORKSTATE_V30 lpWorkState); @@ -52202,11 +52202,11 @@ NET_DVR_API BOOL __stdcall NET_DVR_GetAlarmOut_V30(LONG lUserID, LPNET_DVR_ALARM NET_DVR_API BOOL __stdcall NET_DVR_GetAlarmOut(LONG lUserID, LPNET_DVR_ALARMOUTSTATUS lpAlarmOutState); NET_DVR_API BOOL __stdcall NET_DVR_SetAlarmOut(LONG lUserID, LONG lAlarmOutPort,LONG lAlarmOutStatic); -//Ƶ +//视频参数调节 NET_DVR_API BOOL __stdcall NET_DVR_ClientSetVideoEffect(LONG lRealHandle,DWORD dwBrightValue,DWORD dwContrastValue, DWORD dwSaturationValue,DWORD dwHueValue); NET_DVR_API BOOL __stdcall NET_DVR_ClientGetVideoEffect(LONG lRealHandle,DWORD *pBrightValue,DWORD *pContrastValue, DWORD *pSaturationValue,DWORD *pHueValue); -//ļ +//配置文件 NET_DVR_API BOOL __stdcall NET_DVR_GetConfigFile(LONG lUserID, char *sFileName); NET_DVR_API BOOL __stdcall NET_DVR_SetConfigFile(LONG lUserID, char *sFileName); NET_DVR_API BOOL __stdcall NET_DVR_GetConfigFile_V30(LONG lUserID, char *sOutBuffer, DWORD dwOutSize, DWORD *pReturnSize); @@ -52214,14 +52214,14 @@ NET_DVR_API BOOL __stdcall NET_DVR_GetConfigFile_V30(LONG lUserID, char *sOutBuf NET_DVR_API BOOL __stdcall NET_DVR_GetConfigFile_EX(LONG lUserID, char *sOutBuffer, DWORD dwOutSize); NET_DVR_API BOOL __stdcall NET_DVR_SetConfigFile_EX(LONG lUserID, char *sInBuffer, DWORD dwInSize); -//־ļдӿ +//启用日志文件写入接口 NET_DVR_API BOOL __stdcall NET_DVR_SetLogToFile(DWORD nLogLevel = 0, char * strLogDir = NULL, BOOL bAutoDel = TRUE); NET_DVR_API BOOL __stdcall NET_DVR_GetSDKState(LPNET_DVR_SDKSTATE pSDKState); NET_DVR_API BOOL __stdcall NET_DVR_GetSDKAbility(LPNET_DVR_SDKABL pSDKAbl); NET_DVR_API BOOL __stdcall NET_DVR_GetPTZProtocol(LONG lUserID, NET_DVR_PTZCFG *pPtzcfg); NET_DVR_API BOOL __stdcall NET_DVR_GetPTZCtrl_Other(LONG iUserID, LONG iChannel); NET_DVR_API BOOL __stdcall NET_DVR_GetPTZCtrl(LONG iRealHandle); -//ǰ +//前面板锁定 NET_DVR_API BOOL __stdcall NET_DVR_LockPanel(LONG lUserID); NET_DVR_API BOOL __stdcall NET_DVR_UnLockPanel(LONG lUserID); NET_DVR_API BOOL __stdcall NET_DVR_StartPanelKey(LONG lUserID); @@ -52230,7 +52230,7 @@ NET_DVR_API BOOL __stdcall NET_DVR_StopPanelKey(LONG lUserID); NET_DVR_API BOOL __stdcall NET_DVR_SetRtspConfig(LONG lUserID, DWORD dwCommand, LPNET_DVR_RTSPCFG lpInBuffer, DWORD dwInBufferSize); NET_DVR_API BOOL __stdcall NET_DVR_GetRtspConfig(LONG lUserID, DWORD dwCommand, LPNET_DVR_RTSPCFG lpOutBuffer, DWORD dwOutBufferSize); -//ȡ +//能力集获取 NET_DVR_API BOOL __stdcall NET_DVR_GetDeviceAbility(LONG lUserID, DWORD dwAbilityType, char* pInBuf, DWORD dwInLength, char* pOutBuf, DWORD dwOutLength); NET_DVR_API BOOL __stdcall NET_DVR_SetSimAbilityPath(char * szSimAbilityPath, char *szSDCard); NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSubSystemInfo(LONG lUserID, LPNET_DVR_ALLSUBSYSTEMINFO lpInter); @@ -52238,23 +52238,23 @@ NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetSubSystemInfo(LONG lUserID, LPNET_DV NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetCodeSplitter(LONG lUserID, DWORD dwCodeChan, LPNET_DVR_CODESPLITTERINFO lpInter); NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetCodeSplitter(LONG lUserID, DWORD dwCodeChan, LPNET_DVR_CODESPLITTERINFO lpInter); -// -///ȡؼ +//智能 +//设置/获取参数关键字 NET_DVR_API BOOL __stdcall NET_DVR_SetBehaviorParamKey(LONG lUserID, LONG lChannel, DWORD dwParameterKey,int nValue); NET_DVR_API BOOL __stdcall NET_DVR_GetBehaviorParamKey(LONG lUserID, LONG lChannel, DWORD dwParameterKey,int *pValue); -//ȡ/쳣ΪĿӽӿ +//获取/设置异常行为检测目标叠加接口 NET_DVR_API BOOL __stdcall NET_DVR_GetVCADrawMode(LONG lUserID, LONG lChannel, LPNET_VCA_DRAW_MODE lpDrawMode); NET_DVR_API BOOL __stdcall NET_DVR_SetVCADrawMode(LONG lUserID, LONG lChannel, LPNET_VCA_DRAW_MODE lpDrawMode); -//ģʽýӿ +//球机模式设置接口 NET_DVR_API BOOL __stdcall NET_DVR_SetTrackMode(LONG lUserID, LONG lChannel, LPNET_DVR_TRACK_MODE lpTrackMode); NET_DVR_API BOOL __stdcall NET_DVR_GetTrackMode(LONG lUserID, LONG lChannel, LPNET_DVR_TRACK_MODE lpTrackMode); -//ܿ +//重启智能库 NET_DVR_API BOOL __stdcall NET_VCA_RestartLib(LONG lUserID, LONG lChannel); NET_DVR_API BOOL __stdcall NET_DVR_SaveRealData_V30(LONG lRealHandle, DWORD dwTransType, char *sFileName); @@ -52277,17 +52277,17 @@ NET_DVR_API LONG __stdcall NET_DVR_FindFileByEvent_V50(LONG lUserID, LPNET_DVR_S NET_DVR_API LONG __stdcall NET_DVR_FindNextEvent(LONG lSearchHandle, LPNET_DVR_SEARCH_EVENT_RET lpSearchEventRet); NET_DVR_API LONG __stdcall NET_DVR_FindNextEvent_V40(LONG lSearchHandle, LPNET_DVR_SEARCH_EVENT_RET_V40 lpSearchEventRet); NET_DVR_API LONG __stdcall NET_DVR_FindNextEvent_V50(LONG lFindHandle, LPNET_DVR_SEARCH_EVENT_RET_V50 lpSearchEventRet); -//ֹͣ NET_DVR_FindClose +//停止采用 NET_DVR_FindClose NET_DVR_API LONG __stdcall NET_DVR_FindPDCInfo(LONG lUserID, LONG lChannel, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime); NET_DVR_API LONG __stdcall NET_DVR_FindNextPDCInfo(LONG lFindHandle,LPNET_DVR_PDC_QUERY lpFindData); NET_DVR_API BOOL __stdcall NET_DVR_FindPDCClose(LONG lFindHandle); -// 궨У -#define NET_DVR_PDC_VERIFY_CALIBRATION 1 //ֵΪ1ΪPDC궨У pdcֵΪNET_VCA_POINT ֵΪ NET_VCA_RECTṹ -#define NET_DVR_VERIFY_BEHAVIOR_CALIBRATION 2 // 쳣Ϊ궨У -#define NET_DVR_VERIFY_ITS_CALIBRATION 3 // ܽͨ궨У -#define NET_DVR_VERIFY_BV_CALIBRATION 5 //˫Ŀ궨У +// 标定校验 +#define NET_DVR_PDC_VERIFY_CALIBRATION 1 //当值为1是为PDC标定校验 pdc传入值为NET_VCA_POINT 传出值为 NET_VCA_RECT结构 +#define NET_DVR_VERIFY_BEHAVIOR_CALIBRATION 2 // 异常行为检测标定线校验 +#define NET_DVR_VERIFY_ITS_CALIBRATION 3 // 智能交通标定校验 +#define NET_DVR_VERIFY_BV_CALIBRATION 5 //双目标定校验 NET_DVR_API BOOL __stdcall NET_DVR_VerifyCalibration(LONG lUserID, DWORD dwCommand, LONG lChannel, LPVOID lpInBuffer, DWORD dwInBufferSize, LPVOID lpOuterBuffer, DWORD dwOuterBufferSize); NET_DVR_API BOOL __stdcall NET_DVR_ResetCounter(LONG lUserID,LONG lChannel); @@ -52314,7 +52314,7 @@ NET_DVR_API LONG __stdcall NET_DVR_SmartSearch_V40(LONG lUserID, LPNET_DVR_SMAR NET_DVR_API LONG __stdcall NET_DVR_SearchNextInfo(LONG lSearchHandle, LPNET_DVR_SMART_SEARCH_RET lpSmartSearchRet); NET_DVR_API BOOL __stdcall NET_DVR_StopSearch(LONG lSearchHandle); -// IP San ļĿ¼ +// IP San 文件目录查找 NET_DVR_API LONG __stdcall NET_DVR_FindIpSanDirectory(LONG lUserID, LPNET_DVR_IPSAN_SERACH_PARAM lpIpsanSearchParam); NET_DVR_API LONG __stdcall NET_DVR_FindNextDirectory(LONG lFindHandle, LPNET_DVR_IPSAN_SERACH_RET lpFindData); NET_DVR_API BOOL __stdcall NET_DVR_FindDirectoryClose(LONG lFindHandle); @@ -52507,7 +52507,7 @@ NET_DVR_API BOOL __stdcall NET_DVR_SetValidIP(DWORD dwIPIndex, BOOL bEnableBind NET_DVR_API BOOL __stdcall NET_DVR_GetLocalIPv6(BYTE strIP[16][16], DWORD *pValidNum, BOOL *pEnableBind); NET_DVR_API BOOL __stdcall NET_DVR_SetValidIPv6(DWORD dwIPIndex, BOOL bEnableBind); NET_DVR_API BOOL __stdcall NET_DVR_GetVcaDevWorkState(LONG lUserID, LPNET_DVR_VCA_DEV_WORKSTATUS lpWorkState); -NET_DVR_API BOOL __stdcall NET_DVR_SetRecvTimeOut(DWORD nRecvTimeOut = 5000); //С3000 +NET_DVR_API BOOL __stdcall NET_DVR_SetRecvTimeOut(DWORD nRecvTimeOut = 5000); //最小3000毫秒 NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDisplayCfg_V40(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_VGA_DISP_CHAN_CFG_V40 lpDisplayCfg); NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetDisplayCfg_V40(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_VGA_DISP_CHAN_CFG_V40 lpDisplayCfg); NET_DVR_API BOOL __stdcall NET_DVR_ShutterCompensation(LONG lUserID); diff --git a/dependency/x86/third_party/hikvision_sdk/v6.1.11.5/lib/libcrypto.so.3 b/dependency/x86/third_party/hikvision_sdk/v6.1.11.5/lib/libcrypto.so.3 deleted file mode 100644 index 05841200f9e410f3a8415a0c14e14a180e66f88f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5654664 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 z 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

  • -2$d|4Ggh z1iz>3A`88Qz$a{#g@x|blU!;4$hb#AjuU7N;!1elr;2CP2A@H1Sa=T&h$CSsx&)+V`C&90;lWyIU zn$Hb8q}#!#sd=2>G374sZ`C|*aJ|39;H%YoeBcl7lvjkDT8HzURwKWBqRMHE}t<82n{5j|aS7xflG} zgq+6*uGb#~U$a||4}ovhd4iv<#>c^rsO=`fzka%xvA@*e@j@B?Zd4|uK`?*$+Fr<}(JuGb#~@1y3Af}d3L z#K0H*E!Q6h&psr#n*<+qP`Y(rYCfMTw}aQHd7R*S{Vwpg)H*%j_x>ff>jl^A_kn-( zw;Ue?U#I2?fp=Bo!{8Z*ZS!#ak@2UB0Q}fut_4=LQosx39F7SRwq`SeN zQC@CnDI$H2oUq{qQq{UbdIKJt`w>;BX{ z_4@7Lf2#d;gD+6?6oc#ad%*Sjz2JKNK5)JMAows#fBE?oT(3V2uGb$2e^vw?{HIVCfgX{GdgX{JCz~`!Yg5Y}nA#lC^Ft}cS6kM-A27YZr zx&An~UVjo?uiyDcYM!sDd0gOn{cdo*{$g;weh;`_zZd+PMsoc=aJ~K@_#pLo41sS} zkFPNJE6U^GLABi^xZYoDeQG{>f9>FUf1TiZe_h}?jn(-EuJ^YXT<@<3T<@oP z{5iGVFu2~|D7fC=7`WcwIJn;5B>0t0ZmO1Fa_=yr}VzXM#a#|f_2lL05J^Ou6_^?1Scddk4{dVJt| zJ(b`$sP$BXuij~wd4lWp#K84>>cI7S;^2Bc_27EE?XT41qSuoFuGixN*Xzj!zfJA0 z8@%KbdHxiE>+{D8uFs!JaJ`-&xL!{cxL!{PT(74ZT%SL6;FTxj`BM+B*OLU->#_Wu znzLSy6-AKF>-B`e^?D-U zW7PQ*1$Qh_*B@|w{v^RG)pf>pI5qzR`uYR@_EdHK0oUtsg6s8Ufa~+81ibwzb^QU? z>+yo?^^}3@_4vT`dMd&7`BMe{^KEi}L*Vb;A-x)W+3nJ6!S(uM;ClUa;ClUWaJ~L| za6R5~B=tDz^;^O9`fcEP{TbkT{Vs65{%r8p`uYZ5_N%(Sf$Q_r3!d9feZB^ttGp6? zNP9Ux2>#U3bB)gjg504Dj%0(%s;C{YBt<{l(yV{UzXf{T^_={!(x~z6@QhzY<)pKLoDV zUk$F;9|qU!kAUB;ueadYmIvki3AjF=li+Ww^V4=T_4qbATix%0_snq^^E<%xdYs^T zJsIHoye$E5+*F>orQmu!UU0phGVoHBj}N@6fy}28T;~%8*ZI_f>-EII^?K^S^?Ksq zdOh{vIv>Ze)Z?`uYQI*{<&Qz;!-J@SD_i#(E+(e|?>_ zf$Qs}9b8{09pHMMPH?@>3~-%W3Ap}z>H*j5ECtu=^n&YkmVuY+>lL`;u*|a(T;~}E z|3c*%1#f4U*YjHNSCq%V=RbX^ahvh(H>pUI*q#oa_qw>Dm39i?f0j}5S z0@v%z2G{F!gX?t`f$RH|67ZEdG6xU%Lj$Gz!1eko!S(us;ClU4;ClTbaJ~L&a6LW( zuGb$0*Xxgi>-E=z>-8tW_4+L*Q;+XVef(z8@N87UEunBc7yA67J=(^7K7_` zmVoPZdcgHMOTqQ|Tm`Pr=McDFXEnH9XBb?sGYam_l3(Ae1=r8NV&FaB>>(e&r}27l z{k+L~D)l%{QQNhF>+{eKeqf&5uH!WB1i$bKd0ol?*EzVs=k}2~6oKm;ioq8wmFw|< z>;3hCzoX`_1lRi;1fTh}oWBbE1Gn6-5V+p22zcyj_4QkD+a1#Dz;~(faqx51c#C=- zU^UJHi{+piZw0?Vjdy^bQsbTAjnsHI__U)}8Cxm_@0sH;+ym}xlx?^dd`DyHKJcB* zqzA$GSfz)+FFG#Q69(U|JPQ6yJ2_7byzfalPaM47BF87eSD%vOt?GG(&R>tWgNItk zd7R*umeO6|ube5}4L-&uy%_wb*3v!TL)u99f-g}X0{>kd-!Qm7zESXUb$nys9h%7P z#=$RE$1w@sxw#x~Z7A=%b)Ne8+QIelb%O6v$JYg}kFOhCAFpC?eSAIOdb}6>q&mJn zaD9A(;QIK6z?Z4x8wS_MHwvzgZwy=?U#ohar}G?sOrE!PaD9B8;J>Kj>jEFDj;|a1 z0d;(f!AGd$>jBrt*9)$XuMfO`dwHG&!S(SCf$QTH2G_?o3a-b;z;8T5ozLL<_$I;i z@wKYwkvjj*>TzlZ*T>fhu8*$^TpwQ#ctjmvFStIwKJXHC9S(xeQpYz0{((BaVeqHb z@r{D(;~N9l$2SiCoI1WqaD9BOO;WE9`gqyF_3?Fr>+vq|`Re$(!S(Si2G_^e13pC^ zUoW^mzCLh$e1qWn_(s7C-K852Sm+-%#!YpT9tk4}vdJ`x^rPWR+Y`82r}N z(&OOO5jlSnykCuUYqQimPb`vd2lp?P?gW2$iF6nEyf3A@!FB${;5vT~xX#}T{>(RW zejoVv%cKXvpHm(J|54=-24AW6Hwv!vkAds_t=7~$8-Fj?V+Vg)xf6U%RE~Fnr++Km z4SvZw>BZnbtd{Np*ZF(Fb^bnZoqrH~<_~iI5crGhrH8?9Rvrbvq*jiPf#0U~Hx91z zPlD_G9k$f`v!9)4p%*83*>ln}z$4*OW4sGIJ0d+BysSpL8$7a1dJ(wg8|lU1*(;=% zps$tg0gud)>n{bjESBTF;Mtp`mw}i4DBTAh*(|*h-13w3Ab9pWxkheP;1!n33=e^S zacf`0tHJjv4}*6eEyqW|=WcCf%o7Fgy;gcH_=hp+G4P4orPqOPT`fHhzD13%2cNf5 zj!%OBxn8=Zb?W&Utd(vBpB9yF18=rPx*dFi%E1BNYKI)}1n<5|dItFJZ>77y`~NIG z8+@Re-wpnwT2B%9gKB&+_*LJ_`AfjxQ8|0S_jEbaIPRt3!#2x#yx@a>kX{B}u}-=V z{KO{dmEh&-{0xHs)j*!-Rp866m*;H=e4t;Q|KL-O$nA!~tCdH3;iGtf+XlLY8 z3tp!@2LAl7a-KSL^>bx$@H6V9QFk8d{kro(-V{c(dgKO(&d{7p5! z82n!4CEzFO2dJc z&q=QbANhjxB=|S4OShc$V9NR5H6Yyz?tDqQ4gAVKW&U>X;}^^0>j2NaK)MtB_DiH^ zfDhQx!&sjS+`3tMHu$}pq`SdesCkOO=f&jsV(_LLrI&zD8hMGa9uIg(c`5jrH_7o{ z@OMT?F9VO=DBTA>_j>7-;QflE2f^>ZL3$N%a?!$$8@7qi&I258hpQ61@5bIo{GX_59BtD%}eH zX#Y!%<8A~0NVy$+bhaGt0KayCbSL;-ebxC7e%=zf9vArZrP8y(tu3Ux!DoFU^DF`% zbU<#m82l{dCEz39k>8K@fDb)i{X7!*_O{Z!;LF~Z^OS*aTqxZKp1wkQC3yWe(u3gN zt(IN|zGJQQ5cr=7>DAzGq{;P%!JD?09sxfvU(OQ+f4i0Z{8bA+_bll#@CQ1``Rl;H zR-b3%;QN}$dFsJCH1-G2tbUr5UHIRqX*D!m%Kt@1GVnB#JMEqH%5e+*o2HxB;BF*#2?xZZ9O zTyNLbKJ~a1G?2&94*t7x2l$|da=a6KU?b@n;C?mU1%ACcuZqCW{YUOsG5D9tOTgQo zl;b_%9ZpFv1;0s+_kvejF&Uaq_Z{7K~=@Y%{s!RILVg1@S~47^IY5Bx3V zmEa-eLGT62tH3`}9s>VFc{TV#bmDhr=RUQN1pu7%zi}E=5cIEZp zyOk%w_bIp7Q_r72m0Q7&DYt<)d{CZmPVmZ?q?dp@UX|_v&q}m6&f8M(rOLhF3--$K zW#Fy%N%w)@wO@KA_=j!JHntlCZ`4kD75H%FA@JMOb|c^!YJa2PdVg!d`>6ejf$ROP z1K0Z-2iN;s53ct&39k3oa?XQB9{TGQdVj6pdVd|@Z?0751Nad8ImWyh;I1_3F7Qe1 zq-TTgSMCNM-d>LPfa~>@fzMeZ*XaWv_=23L68w4PLGbaf%JJ3U*S#q{4F0k5I&i%{ zONZ3_eQV`9t>70dmh;=dEni8ugI~2ox)Z#tMtTN#`>&-|OTZ(w z>ND!~3;xw5(yPHUdP}bb4=S(fmOB3#4jF`9dYQ>jUXQ@cUPEH0G%SpPeV?4}mXI^H+mE zIo4s!69!+bJOX||c@(_sU2>jUaNWnj$F%BhY_}eKa+>rc_=wihEf=QdnY~6n-?4-1 z-U0sZ+@8jEo!~>}Nq2#ttHx)8>+x>zKh^jW@JH{x#@Mb0e5UeJ@aL3!!QW6`2L8Ts zANUu_E5Vm54}yQMyb64)@(}nQkGz&k0g1Mi_c4t|C5dT_V$ zB=~UU7H8^tb*FMG_(bIn@Ttn3;Lj@00H3Ga1^$`xZ15Gz-QYheF9P4Aycj&Gyac@Y zee$@Jfsa@21E0D3QsaEC1aE#!dJw$de(6=$}JbAo>v2uTfqk_cYyB>%Jn$G|4^O*e#T33 zybHXY@@()<%H80-l$U_pUX$~C!0pOQ!JW#z;JuWWfnTBA2VS5&1b&C|F!(s-QSiyi zW8me=n!zihTu>1 zlkNrA>!<=Rnk&~60{{CSIZrkC=M$ty!M`6Ty%zlPN2J$-Pnam((jzs`kJNgc;5R)c z#}|Wt^QiO^@MiPmewBh(%#!1M;KM4USAtJ|N_rT4yP78oKJR0>-CFPumDhoPt~?GN zQJw@}rQC8!YHr^tw}Ed|ZU^6~+zGxdK|;bZQv`FJHUTX z?gal$xeL5rc{cb_f!p7b9szF_k{$&g zr92MaYmr=kJ@^3SmP=FfAFSL8ev@)L_+82!;FFbSfKOBI0)Iid8~i=xMc|()F9H8r zxd;45xme~I1n;Ok1b&h7YVZNdBjDF7kAja@ZplbJUUi4%*8!~H zRShQ_=amiI+DN(`yi~aZJf_?Up50i^lK~!5?gFj($>ul29;3Y@oeieaNohio` zqo+wP0k^98J>V9VTPb*1GdYhJyiTpB47}`+T&E8_a!h(9c-=|qL2!#zZnp}&M2!!D zSN$mGsRl1;E$0b?*Qxv?;Ewt7_vWJDWq-^0Yr(6g%JDJuO>%r4c*!a0aqz0m((Az; zYQK``F*)9nnR@=0G?n{n1&_3pZUc9y?b^Z1&XD6B;Eop3o#17yq-UV3 z2A{9S7lAKQUJBl?LeAp_U#`ZNfp1b?1^$hiCj`Djjjskjpu84*-qUhDG4R7`d>weh zW%4*$vQl%t{wX<+6}+h$Zv$_mJOg~Ln#Toxo*JJGo}t_WK6s^Erx*Mt<(1%Ns;>gC zea~flK8=DGDz629VuRdnJ@}lEoF@rBOO3bpPR&z~cYr^y#%F`;@ow-cHQocR$CrYC zpvG5%A5!ZNf`6&Thr#vu2>2Q`z7AZkCl0<@jkotn&1X>La^tu-z{{6PcY<3~?*`B4 zI>?x(7`(4?4|qT2Uhr(?KJYx{A@Hgma=T&hx0FZ0L&|HxTd4n!DF$AuybgSu`g?In z@Po=NeN%I8(Oa(54&Gk51H7AZ7kGy9Z16ngMc_9mF9sj3yafDC<)z?W+*^J;uGxSl5ruIGt>zoq7>1=sV$!1X+J;Ge2_>cN*OPlD@tESII8 z4=dDo8@Qgw4zA~Mfd8Q8$pGJ}+y$=Z$p+t}#utI>d5XdHJSE_V)jVGChU)JPmVviY z9t79ptH8Ue@nLX1J_4Sl#>c>~R2~PfdjA3AI#v%}@`3auc-ec>t*+GL8wpFdfoCt4 zZU?t~A>9Ff_!@cLaD%rRB)t^8t@0pv2jvm)F3RKJlht-@m#6O6Y~?QSDauR0XDE+? zmn@b0TMHgh9s_rLEyve^S1FH!M{4BwdT`4((v#rXE2UemNZsG6sB|m1W3_Y}ctp7! zykw0W?*PwUE8PiR^{w;_a7V3l7kJeM>Dk~b)baIzKdHPDe68{@_^rz8z&9$l_Djv} zSLGSt+m#oC?^Ip}zDs!s{14@|;D0Mmf}d1ga%Ji|J^Au+g z+Xl<|Bj78pl^zGbtw6eMKhmU`A)aV z+ z$wuihlgpp5l3r(W`IA)A<0hB?6TS3$llPKjyiS_Dx5+JM{(JuSF}c;`eNApNx%^6+ ze5c*y@+(Nv9VRzlSDhx8f5}0P&oFsE({^1ZztZH{CLdsOx5?#SB$n?iGI_RXe6h)M zOkQGg`Ii>tJ3S`9+BCk@ft*@;rHu-3i z7n!`oliy+TQj?qSi@YWuV;Wy(^06lOnfxx3SDM^o@}SA@HhGoF z$C*52@_S5PZSwIZ51ag6lSfQG!Q@es-)Hh#lgppvl<$n0{C?B;I+M%qaLISZO)j6A zO0PHhB-1=elgsa*sduXTRk{b1j|AyflY33`*i8Pg$?Yb8#N-Z>KWcKP$)}h+!{m>d z+-35|O`dJ?Crs`(d6~(JOg`1*#U`I-@)DDmo7`ja=_W5V`3#eLP5z|G%S=AgPR7^;JeclKLjpR~r3L>YGwuX7q!pr_(u6YV-rCw^CnX^jA>docbc8??rtJ z>a&ghBI@ZWOCrPQyHekhdWX?>p#DtiZARaQdU|S-uo!&{>gg#-qW+|SZVjoYry_|u zqd&G&^z;-YQET)Esi&tNiHOnfrJkO0B&v;m2lez+BT;4aTd1d}x`|4o-#~qP>dTCN z4fXU?BT;Jf%c!TP7>N?2UraqcwMY~h{U_AZQ;I~k(a)!zo=PM#jD9Zl^b{iDF#4CN zr>71Ho6$c@Jw0VeSd4xa_4HIBQU4F^|1|0y)YlpPBh+`HzSig`Qs0&Oh|!Ou{(S1I zjsAA()2XjA`jOOkqrTGUhf;q5^<_psnEDH;FE#ps)H|s!G5Ra0?@oP@(f6YMBI>h^ z{vzrxrar^yyHekSdWX?>p#Bo-ZARaQdb*WQSd6{}^>hoLs6SyGf9mPhJyB=$$99OG zZrKyHMt_icx>Zj^jD9cmS=3h>{SNBsmOW8r^joN>TlGYx(Qlx>FZE?czlM6cHBXcp z{W9w5mON2n^oyydTk%AZ(SJfc-GV2wjeb7$bnBhSF#5UF(=B(xVe~Ik-=BJ$(LYN) z-Fhc1Mn8*sy5&yPA2*Ia_1VjyJN3ELR~h|C z>hq|tH2R^`UqgMF(GRA65cQ=-KahGi^(97s1@-yV7a4so>IYMwZS)sWe=YSHM&FhC z0_q(`-+}r<>TO2fhI+d7O<0V+1@&~xo2Wl#9DnNRRyR>+^vAY~o^EjywMKuCdb+hu zM2vnf^>j;{s5bf?)YGkOqRQyEP*1n8iAtm2Kt0{MCd!O{4fS-(nkY5;Wz^HHYNEvG z7gJBSsEHz@|AczFHBDq2{e0@_mNb!J^mD1FThWBW=wGIO6!kWvf0lZ>^-Nfdeirp~ z%bBP@Y8-#+OQ^3i`bVh0jrv-npGf`f)JKed9QAilUv2caQ-3G*RYpIO`Z3g38vRh} z$5LNr^n_pJDV}sUJ_h!{|Fu ze=qemqi;h!-TEagM&E*Zy5&pMCynDzJ>BXh>Wuzao#^QnFHvjs2dSr9yF|q3_fk){ zbct%C-$6ay$|b6dehc+<3zw)g`VG|6ty`kZ=+{vH5cQ=-zl?gig-ete{bK6r)-6$F z^q){qw`_@Qqn}Sb-Kr%rjD9Zlbc>d782!uCKSsUH=%1yYZpjiBqn|}R-HIjZj~K_F z`ZDV4jQ$bor&3>Q^b@I{Mt#KS$5CHSeYMfwPW^Q1tBigm^)sliH2R^`KS_O=(GRA6 zCiSJF7jOSR_2RB*Qe?Zw;;!gFP`nxD?w)k}ce%@xtsZJPYPq<%I#lyY6pFMS^q?uIGHD3 z=q~R+TD)6q(!Xm`OR@dME$_C(KM<#E+#?RtsFh73Vqk+q%ju)W_Dt(ckz2&wUH=l7 zc(hHrKrF7AT3m-=;^PMk7IU4d9hDd%CP?dCM&lFLihuw6;s5?iy+0?bSx(mI#yMF- ztT|aDTIK~lsuv%XQ@+2!zQ(lWw1xF)3y-HQOymXH9?lDNJee0rKajTYNZP`G(iZN` z%ewJ!qr9wJPBzL5G!}fgCSglk_0eedGLm9}tyPN10>DY-#TK&&?~ z#G0E~o13{cH*mxzE@OT9ep^oIvlxG;->0W0Wyg>{3qVUpbjc^G@l3#+17)Vzii; zUhksUIhhA@GLPqE{+_n*P};(iA|yF}%1N<~@dp};>D5PAPSHnLPUU3Q%hkxVMHn4( z0+VRj#>Wh@(T9k^Vk0z|mLrmBE0VFBlc5vHbp8}pJXt0_ASd80%L#a@@&ZMXyg+eX zPQWEvhiJ1!Te8op&o?+f=t$<`=Ej*ed-u4u)diTw#*>0tXYj#=lGS`SO#dK>#xOw6b?6Qg`E{0t> zK%`c)+bYhFnmr=-dNFCsR^pryZ^b;B$7&MdeJ8|RwwirbF_-x8wWe(tGl*ri64tVl z@oq7lJts3>vq!u>ShGXCK3=okp6jp8^{ex#px=~qTiWza4MbFn%fw60m&WTZ%W}GG z&GrA7>;E;UW^c3HipG|lntkGJ%X4$P|CrnT*PN+!C&f$7)a~?U>h5#J%hWyeI>)~( z$G_D$sz-A(Be`OcU(uX35&IJ3?Q(lgmvvn>$@k^@cjwfsvHAbVsab0in`xd?^LsOK zTx<4=*IUKAtYVvO#5=9I-FJ8YLmu(}YUAtto8-20YS!6uGiz$T6|dLS)Yx+ZeQTD9 zQ>G>-@OZYMynu0rh{u%}Y0cbQ^R0NKZO;ol6%pr6=HA3!aaaBCWdzO-I@`p(;lJ-c zl-B8(+h2FXu$&unhUE;;8R4!NT;nePE#mIJ-F@UI_tfo?M&hd0eVuqh>u~!grQ6*8 z+;n@sf3vz21)7P6yLhyVYk@enjjyffacP17%5=AXe7d!uqR$lZOv+ucAl)KnDd_&U zTRe8ezX~gQ_l&m|3oQr~h#3Qu((O6^208wl8t3@)tvUYdTNVT!uPq2X7%K=&s4EDJ zjk^OA>fM1`lkSQO4lS?zcm1$`|Et$Wc|rS+>*EpQg0cU9dVQoT=jpDG@^XvUNAVbt zmq_D+E3S*;BAI)jfjAfby+n$Oqd28a*T=$&g%+#DbX^w@jlSZc*>Qk)mEJRLp}0oU zzF9`n#YK^>h~i?Gw(x+sF4n}wOurl36R$eb=3COWxNTE$^`i`T+QpSHvtC>j z`E#qf7S0vd!u-HO`fjeSY9W8x8UQneYEAze`PimvsgH zwFUki`8A1V1>!=PFRow(6&;%wbYEN0eMf$mWPX?9?k@Y>UH0Z@#_}_N$oC)2_y1kk zWm#dDp9}my6!`b%i%aZ~ik9Ld_lvjb=N5GTp`iQT{4PiHyPVJ;`BQ%8M*Wd%3cKw3 z_apN&BlLm!nPPMFaYHKFHXl;aBRxN}CO>msewSnUUH;LtY{}2uRFGL)keMjVtS!vk z=k_mm`_~j^u6Nh$a};L&E^h6_n`Jc-YhmWkH8tY(nwsU}^{$#_bRQxX>d4JZh|P&N zKjdcaEfg1fabYj?|D02^+%Dfus}b-1DMwsx3;ofYnib;B&itA#@6Lf1~^c2ja8DS0()w<_?Tcce(?&q-TgP zf4UAWAFJGw1gqmQhT&8^f_Tyj|pdh4v%J%u88aGj6C_+U#(S*#Jv(ig zv8?G8W#Y4%e~>L}P-Fj~wpoL${z3MvK`s4*I+oWoaEqI=@}n)Lys>Ifk=PT9J2R39 z(28gkw~8+l4;P&*AsYIcf?aLNG@hd~}HI%xhu8OEOV&KhL*4{~J< z>gXSIrPxbHqClJis|IDz*Pq2<*w;*)6?Cf6)n?hnY>v%L8Y%& zy91@-@!-vH2RyDq|Eiqw0}U$a<~={qEMMGB{r6S+f9EPqmuR{?i%Yz?66*`Hyb|a5 zo8|b$6I8!=LhTp#tRncd8Pmj-L7WZ+fhppqRoso*3dHrwUJ$r5-GNuG|JnU>`7v>g zDQ{x2y!!8@??j$|HQoOTEvRVsx%dV~e)&;LVOs9N+(5f0GsKrPrXI71OHtaigmJ}N zM&AMvr(6N>IGxrqu#d9aOcqJawlf(}C zZxokie?fXifw;4Gt(u-rgXyKfze3z07^h+~-~WA1U?!dUh5loO-4F8ikI{lAw#=V; zjQ(eYiRX%EvjyUcUNI%TsDNHA>Lfnqko)aQe=~Ysu!z2MBgPa4+7||Hbrc51W)}t~ zl!#lwGVzY`M1#q@=(bRNCCXiXT%<~0NHZ?;jRS?&z_6A%S>jV@vG{t3TYNpFNIXrr zGM$!fkN33i8#lIUOm&(SPJW%vI#)qpn57^v%3A1en_lR@CEc2ML#%{}%I2Yjr%=d3l=OCR)HFb^iD;kSWo4M&$ z^`yyNF+Dv=kDBiF?r!RNW>a|{Z4~jTBX2&PCOsiCJ>5A~ARZJBW545L{yn?M{?|^i z$?u3Q(!+Z4IsbW@Wr@>FY&+k-Jm0^rz`tI6CMocLf9Ngosbp1+O?*&6_w^Lq{IQkd zW;B1*GQ<3_0{?d7YliCcmAfV`?%Gz0b48pQW32xkM%u5_oU5k&dhOpcMDN#sahgob zn{@uaTY$r_A7lG`|HV17?<%n_^ZUio%ND0zu85j0LIvdPJ=QM1HXtt3w>sSwV>4cZucxiNr%ii}%D;MbHr27m9-B$^$FXDWs6M&rrhQaT z4H~qX>Ue$q8B{qReDFKfryDokMKyZv+<&O@KKf`c)%mZ!`Zd)JZ@qPd>bHp#U!Zy= z61kab@)ut$quTz@KOL$1Klj{+R0S7YFpg?`-@YTM9>40U9IC&M9BD{ZzHZ$RDo^j; zw@_XG_S=6^t>3k)H`UQU|Flx=xc~m=sNRpo9-z8CGxG+ji`uojiptu!aZ9S_SFIXK zbP`SM$-GVFFI)nzZd@FrD@CQZ_)E`9ms̕Yu219y-l0GROgnJy+ZZt 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 z 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 SE723fx|@(UVj*GM+7h_!yWW^b^^C(z*(uF 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

    QLjb?Eb3N9f%5aOjl%kr^q!SE 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%0De>;%mTvxI)o|2T8%7= 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 (5EmbCtOn%Vjips~=2) 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

    ^F&6i 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 z%0A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%0AR!#oo@wS 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�UHNlQ741Y)A6~)eYF&Y2E$nqox z-i*o<_OP4Km9}7qjv10st(V!agW0A+4(MUhgkK%4zabpKu0j;<3Q>+Nj!SuC^n2r4 z-pX5)>r2ngK+pE2`w_=vs2p_P%0c(7d<-hDxwxxH;7RR&qYPGKLae)1Qmkn%ezf*O z4kU(QZcYE_ial!j$K))$4v9Vec(euA;u+|rFgHfa*G7jd7Ja2WG#QkdfKqqJ=|(D5 zJCRD&E+kPG<<z)> zAQ;&zt;N2Iyy&;0$e|QP_NtvTx3{Act}W|WjB=be+N!(QMf^iFNu!TI)$SaePmjUs zqh2fuzMfWnd6xhcI;10%)f^gHGz`_X*n?r|`a;)L_3<6SmEV!}Aa!TrhvE{BmZQSO z>h(aye!@w#TAHsNrHm;z(ctT$XtEjI4b6Jy>7ATk*);T~ zS~{-NUt+pF7dD83=yrSz{8rOF__n^$3oY&vU7{r)2>i$i2cIfGX6#O zg}F?vX|G1dL0EKCHscH?MgvtPMq~3iG8&*cie{1(`v<=NslVT_@2_2fPkaaOe1CxR zV{hJYa`O4Ht$}R*uId#W06RJ5{Mg-(-O>56M}C9CpL%5Mb(`whvD#4^^wiiDM0zW&iG$R_#` zk^^Oz;Xv6?!4sv?uZOMGCDxjfoV6t_>-Gs-PlO9rm$a-O8ZLOY6er4-6s!r4Z9~$K zaMni9kTeWA!dah`SZ$>^=M@=B3SLHrJxZ(>O2=+ThSA}yO(g}}O0!-K%i*5c;jH&c zanNgt^-S1$$+T2zwUrb+!;>p5?)J}S+6Ei7lFqF0;I6jre>hOPCcDJWz~!HaAvMEr0pTDV|+ zXe{wTQ*jWrsTZYJPiRx?OG#e0N7(A{_Nu=$t2->GmZDdEXlhJ}wL0t$Rf+X-i4IkX z0yrj&q0q4^$?61Ao8nl7b*zvfO!B%tO0CBdy$Th4jDf;%;egcaQUP#$*m|+V1rUZR z?DXno_G)}d!G==pRY}&`5Rsx-uvZ}kkQsEWO0AYeuSyF(!a!lT&{STj0GJ=Po+)tw z3|lXURV+$$tny0=)`wLrO0qVBs7*a15-0#7Lx}c>D~xU^RstD+sL6)r2@ zg?bg*v0jCCp(i2!Ck_o4yiwA!X?V$#>%s*e zmbAPx48*;{1)C5n#ldHxQXDr6y%f{221N&Gx+8~}imx6AT!cf+eU(jx$^ychWo-lE-;FHjlf=6~vLW zgb{#z9_t9RLKYX$h0JUocZ~~KT{RrLG>^!+w7RDP-_g8~4&elc!PrF^j9nDGn=T!U zU6jGtMH!4;l)>i~h9)jGn=Zpc7P48$hQnz~Eo8Hh%|bTo+`^peZ3@4x zt>1aJ2i`aSS)N(DZuYwe@t&yE_>mLCn|OEBiWjWwcz;xCyzrsWdpy&2-;SZnc&}7y z{P(Bt`#0V-m3Q66&-1>i)c8q*2H(LmZ&zMAFUWhSQsXy1@cL=Io9fl2+n?e6RH^Yx zt)Fh;nYj1=_A3*4Z&hl1!k60)=3Q1def^>*c%M~j{Haqn-^Md@Upx5pLf&(g8h_}S z8>77YYW9+QuH^k!sqxA|hn>SSb!%S#^Ci3&D>dG^ZSteME9;>%_pIT4S*h{6U%ucS zp1GTQ)Y2n(k5+2@#If7zc(>N;d%U}n_iLrbTYuRwiD&X2eAjNj;k{d_@k_5C+|9eV z=3TPKZoH2xHU7zwPko1H_I~}JU!NxTbfv`KJ~aM)-re=`gRxtAe^+Y!rI~+=@=V`` z2d+Gx_j;wq-@NbbQ+U_c#0l4r;(cGK@mYg6m-5Wtto)N!@E)+#_^*D~-@&`V@>fn7 z#{0oi<9XkEcLUD^&i%{ma^4%38b5T*WoPp)v8E>cOHPJah?n9VqHpOblyS!(?9yZipgyUjKoJ8M7QZFP$Yr5gd)c99>yVq@~dj72iPhRrQ zwWn9TpBi6&={}eL^}@bkf39o4eRb8$-BRQC?f%iqA$2G2x&JAn_nPpf%l1!=FRU7J z(EC@uF#b2=+KPU9_hUz;##gNT=ia-myzThX-E)`3FFfGn)cCTKPI!D}=jzf!ubKVH zl0&XNCpEt5;|<5%ed*)p?lbk2Q*Ye2cy4N(cjxiUX5O90JM>cHIDdIU!BJxd?)>Hd za=V_tK>Umy`;jFY=S!cLD-a0w3 zZS_T+<;|zv-b`l@S(j9Yz9XE1;ee#f}_jLz^F1o11z)g_(fMF`?IjH@SiPM?8b zF*Y-;HIlOo?-nHA4D6ChE_fcRdw0jFMT!1|u3H_zYoGYc%W|5tb%&!bKJ$#6joD#q zEp}Xo{xY;+ReK>{G8A;iTaKOIF&w#uV8b-ta#iQ5@Ypz#O7RsmUO+JGlf#jZJGJr2 z$G+QwcM;gjMu9!B6a33L3s${6m|Lw`y-aP@o$Ar6|1$sCVWnBmmt<{Yoz2`p&3cKI zJ$@)T3R~~RCy#yi`LGoyLwE@hE?7&-bL0g3sU>5vzy6HyQ;N^xv+;rgImiT%Ew9E~ z3hZ)|3G5LgdpPSY-MAiIn)PHj>tpVsW^DjKqsGN&UX;@!Fodlw@tGw#FJk+L-7zrW z#YMOvo`3;6tnrr1Iv+0?yB0~M_+ma6uPhuK$gbjmw-?y`_TbPp7)8TbJ%WSoZ4-wM z;P7}!)<>+gom;M1>%BN^792`+VEASOLz2K@eaTqt$iFBImEy~HxI=jTA%g+ADzC?T z4eX1%IIIt6+4>3zI5dZ|`nm6#MbW|Ov+)&&cgt~J>IMy zed{#3Bv3Q@hP8bS7BJhm@G(&+nuM;nM@v6#|2yP2!+4`aiKs1+T_4BQXk%)X6 zg?Pe3T$aVo0fuNILLL)wPG>pZz3!xm zm@=-2W?^;0MqHHh+)mhtGdg<{Hll3jY{W)?8`0_7h%-9v|JX)=A=-$k9vg8+XZe`V zVI#_D7S<$e#CbW-?}Uvg>3lC?Bd~tn85{AUzm0gtwGkzqegCnI07JA9b38VJv+C!t z5%@{nRXJ@58*xs~3p-&WCUPI*XP2e_|uR5N*T)kBykz zSx(PLTuFCeg}|1*9r2-}9&B^VfSBh-Najjn@Z6U1vU{z8(gpiYAE57aeK zm1m{!2a;R?R_b~IDGtESDYn*%ZFn)GI>~FT_%Ojcvt#n71y7pJbs{%&xK7`ym0Bxy z0R;e^uC-P(Q>RSQJEwbEYoD2o`ON{RS0aGV4ZM@DnRfAsL1M<$xmLgCfQ{!2tBS)~ zF|8)esI1kUOjG93ol_636?Y0spp}caI+4b`3nJ{*tymBJg_44Ym>AO%~X{&d= zyn4*;&dDo(-%|}^3lq!DQvDszF4;5PSIz*^J=4$nZO`KW_H()aWc|J9U3dNcZ=7|D zh4lX?>+dj*#p0alF2F(fU}(JMkog^1&I+81Ze-&$8gChk<+x6!@s@)5eR#bfQ!3X& zt*}!pK8(em8m`l;EXrA&>v0y@j0Ep`oFzuD{$pZ6E~|K1kYh3O;b4}P1vwY$n1z{t z=<56DKf70AS^hjTaYkm#TMjj=bFNdJ$(b!biSI+!vN%@ASj(y5lSLehbE&Qy46;P$5Nfyz#P`?1W%`T2RvQA8}y`a20fkdeb7r@#S42t z&t1kVdR)c>y*>xM&1QKo-6wh-K+jpsJLq8TY!l$c!tf!fczJ>!IJr0G>S@a8hFy<`p!bcy(7e4RW zpCu@K?&6>Dsec0aHY!UwlS;WIk{gwOF{9QZaWgA_iU z9a7-qZieg)$esZ<2!y>%I|N9i>L#`bggG)n)zv)$ZVM1T*&|TZr4!`9r&|REKCkqt zTjT>@@{WP<2l(7A1BH*v0l>G#f$u%Dl_26n>3a(BIU5HKd`5T8{(-`$`v(dib`jW| zqq|%pq`-&H>W%_7G0VHLtsv}W+E*YhYWd8@0&}NWK5ix`d`9|`EuVU40^fgS`rM6% zB-8hvqr89*8xS7T_w-JiKKgkMe4l0d*jY7w+@Hu``rO?Jflq9o*^cnQ=h!~1_yxX< zwvP^@fzK;_pVRia+Y?E)Z>s|zY@cjfxVEozr)?iyPe*w_%l5IeYWujWkL#XeORNs|Ap;yH#L%M-}{d8!uDaa!(;oN*=gHHZ`gs)qrASh zkGnK#`?wd9(e|004}ni?pV|8Gz~|ULZg=d^_R+02@Oh>0bJ{+4DB!-BDf-eCn)|@#ok-^;^(cWBa&+lF{}h_Dep%M-T=@u0RDpb@&WuXw<}v#x%tOB24HTwUSQdkakQ_o4Idy}@6!aU%cehl*{-*jHEnZmTB-4y09+bK-L4_)Y< zkm|dk!aU%cFD00Ve5>~PDIRms(ZHq(%b{*M7o^g!NZVFn9>@t_HZYIM3EwkdV})r+ zJ1fkAy1BK&G}KMMfK=3-zPZ9Y!&Cv7NBK4{5txR$6K@figERb&#oOItk-B%ae4C9H zse4z;x7luyx^>EAk9UoHn@ty~dsoZ1*?KX2?^^jb8!(3NT`S+5FI4b%y?mR^7~y+o z<$K`vV@6=RBNW}q{TRP*)OJKm-oL^5%|r1^M00*K&i|KRJzf{D9>O0y?)Zm~+{vkV zry5^V;3OIO3FNUG_$x@BB;)%_NIkz9=QdY!2WK%JXVv4AibJ21Eu9}Wf^Y$kbiRZ~ zI$yyfov-P`;mlO?|MICg75H?Va~p3t0!z>MNljZ`4f8PGZGC-v#9OL5SH)Wn#>NM;gbUusE7^F< z1neBeCm;N7YkcOmzV2@z=`dJcR`AsD_~c3NwvgU;AfNW=Q*ov=i)@ypR++!w#G9Jc zf5N7by7h6Vbw7C>#jb?*o_!_L{twUBnggqlR`h5JgZG9hq8I2x& zI!-KRt6L6b!gKMH>@Ba9@Sx{yeOti$1ne0}3FZUuTun*7lehJ~2ChdP3Y)H71m(R0 z+2>yHJ91A9XnD1GF>lg^DR>8&kAuSk%=yj7#rWoWXNrOJ-{@KuRj?6 z2+WN->U11p>|olrrJI-{Z8P|)?0nq8bmUm@#buNSQ*iMrxEpy0W(6;%pl=Z#-vW=L zzm$e4-Y5an4iBaykA))yO#6UoWoLUS&L18xEaRX_bd{KPBrx3uwnrA6j+2JHn4aIg zS$!U-q#;O-T0J!CxQ8|@+}n}y#V@H->`)hMr5OzB<`(;IfM+kBd0?XJq68Ryh zPa05HZR^_x{Tg)?WJ+Yg5!CbRx4cGB(QXo`%m?1N@DfmGQWQWu1kRpz5flgko^OF) z9DPkI8X{7&zz2LQ9{uE8NwkB&ZH{EXI9~>6ox+rcOwfRO$QMZg4&>x ziZp7_?9LY)P>uEjyd>>^1?*A#G3E(S!5&5)&mJ&2a^Eyi;YtG3r#zri`#S;Z7Jxdt zvnvEiog*ycC{8LDKz%9!>PKLE^wAKiBuPD~(FK)S=4wCl38+T7B1R#$eYQ z*r#2H69)D@Ks>#(+t0v0oiGNw(!jEdKqAS&PUj|-fjHg3hVj9SkAb}ypU!ZYKFh$C zclJ7%?s@~;>A}=7uv>v?d8h4XU^^3-?n(p8E&|ge16z)rE5{c27}y{_zVR`zv+)@Y zLH#TP8}7tr2t9#;FtE?Kpe79L`v5iEiI2KJeRE!dR?mR$rANd}f4nggnjfvv)a zJU#|?IzH*)_*Aug!>9)J$5z8W%c-}Xf@%SBI5N(T{jfw-PlH2#6@Vv zbvaWU%_Q&A<5Gf|gg1$Z*UmYe^q4r>wR&mBbsUo{+DTq#kxryIGtW|*5^f(C;T`>ycWjM1CMc`L1~s|T#qfulq7j+ z9?OB66aE+?UMI}y4X0jX4rl~;5|!&^#aAWyR!I(($BUZjb)XROsEA*ZXlKji7~OnbS$_v!xm1-mo_wolEj$Jnjo>PIxYe zcy-E=G>^Z+m-_>*Gx&Udz!jzxzqC&*vj#?6ig79q58&szXrNRDD}L+~vkfl62S!gy z@q=P#DKbz>g6#_I8`D%^F@fhmXh<=BiOPfcWof-?Ak;$+JjU*o{D}0Pak6Fg8NVX6 zcKGYj(8Py$uvgB)`)~v~_H3|QgCzzQ4!yf2em_%+^T!8VDa-Q)Tqnc%1Fn+6!U5OF z^0EO}$neww*T?De23#G33kF&nYcH;rv&dg?&LVeI^UfWqCca~&v&i3hV;4E)r{1!Y zyrZ9c-*8_Kx2zAxFW(>HS$v=M^&-#u=E;lWd3I;|sf%5q<+q2Y?A!kBNjHWp93h0$ z4Ce#!Qu?)&@42ZXG7n&*)x{&3{fQP13ZVaS@ACwczS z5bpfxMTcFS6S5YJ5z6wDtoV@mm%eso$SNDJHMf83fFCtPZaon-=WES>{Pl)k-TUU3 z_e9NwLTM{1LazcQ9CE^Ka&l-Q)`_6!l=I}{Lmw}a(-g;>!&`UU{lh;z?30_u798ky zzjan=`yJ<&{~^)+Gwwh0(jPbd=AcCPAAPInoPDn>{B5H9uWkQD!>cEZ2gT|BuaCXq z%!9xB!AY`}vu=zwU(3(f#ayu6R$*wRePn;$4p|l+*29;XkbZ zrcdRNdsp~3f9rsA<*a*G_@BJ~&3om@d$;>vn|s1xa`L?^{6Btl^0vEq0KO~ySB<@9 zFF6PQKN$U@Ox<5UDXsfcq5BOub+tZS|LbumJbpyWb900BdOWY3Mcs%v{+Bno2ZuNE z;PA$II5@l-P2^jT5%k0*)N`6}OrqBGHIT3R{3oV(iyT)7*MG#}m52amC)KR;*TH*q&YO@C3&!oi^Q zJcoxf`aLZiWr2i}GNc27){J-q29Za>H$Z}#amab0oZ+5I&G)5__oecn_Vjx7fceyV z_3-pmYIb@Jpwt9a><8uCaEzX=O|i*CKiX5;YxnI3spy zq_o`O+cK%?Et8twGO6hZlA4Ynsp$xknvP(H2f@LLU{5ooXh*&4O6eVrFZYoTQqy}! zYI^TTP46A4>AfR0y?3Oh_pZy+yP>9cuTtQ5Fm~N3z2g!8g=vyUYI^TTP46A4>AfR0 zy?3Oh_m0%`-gSF=H(YzyJDf*u2YQG4dL3ucWY@T-eLJ_|eD>WcXMMzPKa%gM8G*_Y z=gxEfYRY`KN|Twxs2Gi+n%;X>{zie5)5?pAU~d}m<;P%NdBOwY9Wo9}zhab$g~T{9 z#VQNAG%5JjB==Z%Cy9r!m!V!tlgYaKh#u}p*IvQviGZGs4Fxn2rU3*-a<|I&nTe@9v%Y3_1Ly39(1%?b=k+Sz5a_iO zu$NL5I>|dXtt5JsdXW6KW0FM6IY=JRSE8<+xeVxmf0M!FRl=XN)}6WxDE+RM3vZV$ zC*ACDCTetVcF6TQTevGi?^}tMv&1OpLZY$W5@R6dez!+Oiw=iRmQwOxM|;}xEm>1# z2P(5+jqF^?Uli9rq||XoS{=UHit7)oHv3nc|Md2t?(B*^;4O6LRv3#=#@dxl!86lI*cyWIlDxFp+ykB)MB%fSx;C`ff>vsJ#r z3O9Ly*4vhFbblac88K@P)wE{iEcmh~|CC70-7a->W2FuA)+^f0-H zOY|_A;}Q*%-GHgx9nl!nM+T@JBU)3{6sR2D7Hoox7^taQA(0huS_0AX6)a|z<#XX6 zp=0=`t!O+_0}O`R7z%`%Dre81H~ZpC=ZB7l9oD)b3fZBii!YsZ$$6Jw3N4}Bakwzl zkddbIE}wnL>|KYM>?E=d=4?OG&oGSv6^daR1KWgY4Eh*`Bt@Dlz9MVyiX5eIwx1Yms4$mgJ)-)GtmA9? zhv)q4PY`q}|ELH>K2$rjzGkmLbjTn=Q#M6hEqdP61ab8h&ea?*rgITh}va&{rLo2p0U>_du;NFSAxT19+F zWcEHPC$p2tI+(MY%E_Fp!-jIMrE(HdUhGBXbaWgvnFn?YT~}$pLqn0x&~}8raORG2 zn8OHR^-$1(Y0Jic$g)7#A#+}%ED9UVTBO6-=ptbdJJw?Bz7Yw7m7rTjBn*+RJ6l_% z40R~pig*(ujGR5jTN!TlafoIQO0dgzZe0>Xc3oxni~kp~V^^v29kTz%*a*hFo!(6e z3G}|CgampcNpLp?S;_7W#aq!H31Xr$YOsM675cie-yH9;E~$$IDDY{&KQREwNLnU* z{0*nfXRUo~ti<4^x1ff0-1yZ2eqiI;>;6Pnsddpj&TnR;yrizjzA$L*@KgWzQaM%QkU(wtpw zb35xnG1ilO%U;{py^w`y#l01=Pfx6Wi7T28dyNLV>_;`wjYU&CV8IO0Yz=p_+&LP?5GJo#Hy@npo#y+E7+_ixe3v^>ee6c>SI`D5C(KP& z2RxAM;Jet_?4z~p!%Wk0d3SZyyMdgWuxx5h-HEvtExK!3HU`iu!DD%s7fw!wrZF_r z9jfKntoa8Uw}V`JbGoak>I+m(vhP{*4qjmHomaJ2VCDCbAyhl*YY5wcws*EKXNi?_ z@c73BJOo*LDiYMaJ6QWsl!r-I903SouF!y4JKFKpxE14^E+j1;(TApx6>jwQLzj>3 z9D>J3^oWo?tn70}Zzg?f(H7il*r_rxtfs0naFtmFb5Fjjra5al*FsM3=U?~y_S(^b zXs~lR*Gmq08pv6zP@pM^93;6*WCSvXi*mViM;UmJ0ed_WwcCy8w$oK!aO~di{NzDN z@^NP9x=n@jJgrB0plir_C?J1g{h~v)efU#qMQr&~+l@adV6;U>p#U0(EJemAf-@4q zIf>xBL~wx{3|6za{o}{qr4%d*MI*{en|)C>5e_a!M;8;>l@lah=gD&GmxNT0*7MyO zBZY}zQ6d;h1k0RYG@>1DvnQR1VT0{89rxZNDN1o0Wo+8xL5VsLTb=`X|&)kp8 z^$4|kd8@Ls`by>a{Vd^_>H>B|Yrw=qZyn-I1uGcmCa2|Z8YGnY^_M#+GS zL3Nc8w4M~ciO<4{mpKtmw40lymxr@~$FzZ?*}y2bffPBO%LXo!25Pl|n2N_k6i!NV ziS6_FVUdcNiR{`6mgUihjDnyg z{6-&hL84#Vr${kuYMNHU)c`_e(o;;DxJ8-(1}pv{7>vIH7(AsI9Eq@<3v6_xbCacS z4ib7U))%l%791ViOUk}Sq#^aZvY&hj9aw;EbzBTjUkEEq%_bMNR~rZIl@4aRYNGvZ zW#W!XFhOGm6ZKbw?I`F*1(MbGH6--dX6YHKJ)R@3Y&=By0yh*Qcng?|aHbRjFes(t zvcX1x3D(GQlVyY)_vj-KN@&kn zh7K9pLo#V*^}&HEXvYGhM(A*&G<~AzUFF?~2LymN`>}6r0TA@X8^IXx5vTd=Eu0Bu z4uUF9B{z_g-##jU45|PiZz~`p5Vqd}-FJXa0#ZGvz|{cztOPAAGXC)X>)!<$ISUuE z9@&aD62u(B!$Xpz;sTUaFl(iAQiWu=NizTuVTvF?2`~UQH{% z=pY~H+`}uRa|h2y=ib-O9geWQyW6>x(VmTjo*&V3iAF?&Wq&myIt};P{`N9>{B+&F zsevvq)e(XOaJ|=s02(dUMjJ0jqa1LE{NE9_>p)jTQ!H#B5_*I^R2Gfp38>mJMeXv9 z&r!+_0#igy^bRenuxOUkB}-+Yz2*_=@=XrH$QEk#CynVLuW3|v)cU!;{ka~UfCl2*PEVf#_geT8LjR(?QKsu34brw}Vw z9XwP)q(zLNO}F(yLd~jV$V0NW>Y$eOFJ)L1fB9FW*$K1JtSI2W-)9mn#PWSK=~R={ zsYw)&<$0QPq)B>Mk|<7Xc5MqAb$x@fJ;hbXM=7ShbS&JNsCa&iK7nXdeACnw(i3@@ z1FwtI>vcc>yKa-s4qBpYaDqivEfs1@Mh{MKAzCW6YT00#6FdV%)IcYAo)b*K^~ZnP z6vhUmE^t!Yg4J5Ud^zO88pqn?&x9yA+~1Sw?%(WQ6SlA9h4@7C80zT0cQT&o9;2 zs^*qyG%!)RT`|$VPAhx+5>)mbt!yj8_A{WXoX<(F>oTeOHP7cm=Irwoh2X`Z(r&$~r-FX?lyEwU& z8<>0kp}D_H>)ng>PSJYzW4+rz_ccyzuxF0cYs_Gqefu7wBT_X+X`fuSgij!%ZjK>J za@Q64+U$~x(d=|>_6~&Yg>JKhlc(K{Na)!NU&MiB`FT=o!dw)iCNB99if_s5p=Nr@ z=WBAweU@Lx%j#X;MRv~QP3AzH7;%k0_gq}UMW6c&EpztE727Eg40&ZU;UM4?R zltfHQ%pfi%_D&?vHJaxP=AoZx1Z8F)SY=&xDAMith+U44SjGYI_YpVX3wN2oYnDo9 z-u)3eQ>C5x0Ac%C(6uuuQ|OWGOfg&{hldVnU+2-ao5V$&XdkZC*0I{_wc0WhE9#Zd|CTw2J^WVJdZ8XLSor1R*I00w|?ea9LpoTaG~#o$!l zXNQ){775Huu&OJFaIoHp!A#9E8l%0KWMR;x-LOXdz(V`} z2c$;_utzs(kH)b_L){*w_<_@r&|7JY2Y38r`x(1M!ukB*hwN0LeU8?sNjiDxA*&mi0D)aaR?u?Z#;_ShxI6 zX>-CQ*{K@P+@R^ddulOzDf4|5@qd4gCS3o8?`by(M3K9mlMHC!1Ct(-&%f z-6kUhz0IE1^e%iLGMVZFJ)R>zkd2NRAIN7HzG+sVdOz0l&hIcNP`HtBQTMDlF<|#D z!hS1J!B8i?hM13f-M!!<>;<=bJtgb`w*~pNFgMD$#^m2_^Ow9Z-Y0)+s@ek;TwAo0 zf%CSCt3tm7`|ICy$d|t_WE*5VP_Yll-OOD#mKNRFPA;;iH;PQXbRoumEE}nv^ajHA z{h;gE4@zFyj=0}!C-*cmJNLj*?I#b*@z<}U;aQy@N!dJSm#s!gp1n@E;!ij=C63Gh$jg}Tae3BW~<}h3)&*rprt@y zO{9u{F%Athg4f(9;CBP1zQcPc(C!Jq1;lbi>?zEV+liAmvlAH2 z!7|#5(8^-3UrhEZ29_N*|nsN>9~Fmm_Td(5*DZOfN%1&yB3~x<@(jeEPLO z;EIWM>pjBUk6F+6w4TdZ&sW@fE(O&i_?NJrVqq@AdRn>%Utoz`b)(aV?`Yfa&P3ba*S0@E*uDjH1tz5rTaeJx4o}E5wZmpAon~IXTe`T2 z&77;v{F2QaovE29n>mjTSB*dwsF>!?*0objkIej*wsIg_nWe29!dBLS?%SDz z*~&KA9IAp77KXg>i@Zw8Wxa7xSHO^ppS8c%9zP$oU!=7^j<9{HTYHMr*oK6jTcvio zif#5S_ocq(w1Nwx!G)o^<(Ei>6MljUne*aavs|FR5BdGWUj@Gq+n%RwpU$@51Kn4C zzst7A(#I=bh>q2vLyjl9^$~ijIg8>jn`~VC1!i#kg?~Ik0nb@@2Q#?En+@6znc|U5 z#j8#6S;#;f*`Gc4<7~7h6cw1EwtVgGLj2nTLY%YksH6tlO@qaz!BLqS%rOnV2VfHX zc9`NrP4Q=#>et;4_>*j1UU?{k-8x5AHh7ra40nUsYLi-lr!GF$AC}7!V7_k)mq-g0 zXC;{HHpS*>vEzM0+wZ}6qKLy-Ks{rX|zNO4wm zH$Z%7?|7?G!QUJy+1GXeO3FaWpxS$cB{+xeTea~j*(0=n-QpUQR)ly<7> zVF4CHq@m=M)Vn5Q+TNDe0hL30K4y)olTaI(8h9##XyLKXhK0pr*8ebBz_xZ zs!=ygr<-)WCUJoyC4@QCsXskzB(~#E(wnQMqc@LgZ>kZt$GN>pnRTv4Lhsqp@KSOw zRhm`xgW^Xt1E%Ic<+toBwc;_Xc$HTC4OaX(=)N!=L|l!7z5aP%&idP=Chi% zi#DM1ZT24bNS@|Y6}WaVRG=olz?J{&HZ5W;mTacL$>cI6MeyNpEudbb+IxFMmN7ss z>2h007`vc~_uk^r)3K~Z%~T6I=KSlgCg~1nvV)muYRbQ)scxsK{STC;I16@@yB~i9 z6Tlz8;+L%++28F>8N~;G0I**sC$*E7BW(W=bOk#__Lm`{XALKHnT^`)>}_IOn%GG7 zC(;Oz5Kymw6IlyE0SN>yXg%qRjl_PjDV-_P!zg`B~=8@0#0% z>q}Yn5Nd1fq$^nUes0w%w)=8ceZ5pI+g!lQaaU4b_%8T1XRL}-RTayDoRhQNeJQ;E zp_1q8n36Scv;B#kFKScw{85l8XH$D?Q`6W~AX8IQ*%W_$i#`x=)F_s0 zL6a~)wC5D0+4;9~ths{+WpiDge?HAtx$h&OE(TQi9~8yA<#>VUJP$;Rkj~;=2A{4C z(y0^Bau=$g3_FJW8tD&ThPePEi`0%c=lzuITck8zhCN&_T|R#*x;$39d=bL-?tsFe zo4oBj8wtG&v>$Eu3$4P%px*QB-l%AFH3S)-b`;v@YR%cK`7o_Hhc!P4y03D4i8W(S zryMZI_*5Gk9$aj1?;YB65ML5Y<#}j+5xcSWPe4{6ZL^y-EQ)&X2cqPS%yYumU|D=T zh@wxQyB6-2+oZLV+1gp!+No^q9ngJS`wm-MsS6OnGnX~iLdR;u^)i?`7oSyYZ?~Vk&8Qc3N7V15 zrIgAACH68mslg<@q)FJy;s+(PkW!*e$k%YA$QVu`Hwqcwk^TBs!C@k~o~K-&M6TZi zU2&L=LG-MbPaxOJm{V$mM;gTs<5W*Oj1pefE>>cqeT>%r;uO?w-VMBtu)WBwJ>}g` zHxhcLO6~eJ>zV%$J)CIwED=V3&8mK)jNZ(uCb?CmFdAc3yK7aD`ZhZ*0?kh&8cHb@ z(JDxXSn;N?)nZs*EX${gap)0p&;n@=e3j$c`J>0th`|z+D^H)E37+WxW5O9qp8f*5 zf|s(2%>qxoS0@l-{mzRO2fSn21iV7~!{1Af>sdP&h^YN8gzfLTwWol02NGy!ATFGF zQ~=gIAk|@OZwczasOj=KYkx5wqAOFkyoi;^l2kXW|D$v}QnP6)_h4Z}AYl3}D^?;6 zSc#+^^pV(z?V=d~lUaFzqp8o;~WIZq#Y^0 zi*^YE!F_93zSFes56e*Z6I%DD2-~;2b*BjG$4Ka5g+PhJ*?Zb{+7C`HH1>@AFSbKi}7WUWBl{ zyW7u{1;uP6^qh#Cv=CUO*5bWaEtOA%_hmL9ZtD!Kcmyl{NGr}|#Y;g~0Ox>T&x|pW z6~C!{Xvf%enbBSc=&WEo8jMd2Hdf-7c5z)C8;Ou+x4!=@eaS-mt=~#_esdaH-L9?P zg0Ou;rdEH8gx>k-tK7OfMR<*sDYSp36(7fnhstC;X)-H*19T$~$$sJ_Rt)`?`Jo$t zV{#T=e~ldg{Y`Gy@{v;0gb%~I>MedwR=wSvhBp6R%oc!cv-7UEAu-LV5_8SgB#FuJ zs}wYCONIM!)1%Fvm@NvG^!n@=)RZ{Xq7Y&S^zjoNzY`4TX1CdQur}Gg!1!y&ZkMr3 zHd8OWCoJyNNe0U1slp~-VgUwqLI_gIyQLb`>%Q+x{S{BBcIaytrvFswbhiv`{Z#4} zI@w6&N;Q)*`$3Dmr**VYoZ#d}i^ibi4LGYKtHTPeH6;9W?utD%JdQ^QA){3`P6+a+ z0YBS1Kz`}$(#zNCFFaA>9Q|)v+dkwIrqyNMT1I4maZ%V6>Tx|6ycFI^3-9Ep)~C9SDhjIOo`&bh;kglTO#8ds6B0^U)OIm<*MJ z?przNzLoR1p_+@kiUgk2{_7I3IU&|vD+N+mvndCC$mzKm-`r6VyAj3|B;9XE_wg%U zb7oO0Rk=&0DsM?t={1IV$UrxcJ!5P^m7@dmWWlPRzQLeSd zdT16~a44g!HtW$DUP|6%Yn5Beg3;(xv#~YiaG;j%JS$QyMbeXUM`TRO&XkmiE)6Zr z+)$<@G~}O@i7pK-%G^+Vu(2##pCb~3Km${)#NodGFDHB~9T9Ub;Oi5_SKPeMk8miCSP^Kg__C#a?84XqPH@0OYICicaI9WrG1~HB@m4qLPSzaZ zvpB2&i1n2hjS{iET4& zqCU!;i&njqS%_yrBFRN7W2!-Gu~a2!(Fj<=Yq8ZWaM`Rn!Y9!BeeZg>IGcpTr=Zn` z0CE=)FrYPFbK_^ApetH+ED&3yaiFyoA*)}|lI|B5v=>`130y2hxR{x6_2X~L<3Q_P z7Mk4h1fUWcWr~4lOrk1N&Ba!P@JGcyn^ts z5l_T{R<@LAhHOy**9%O{O_-RAFpWffa?4ua^boVR)J{VJpdwwQih*cMq9Rqs-HnQV znAT8VHHx`FH6W6fd zAlXPsnHcGclZy3X)U7y;MhbPXIVuX{7%CPZRLn@I#vrbSiUnLlMY15pKr|*%*HGPq zveB3{g_@{mE=ayfE=URTEe9u_ZI4&U(?9G>O`%&n{S0o3tbstcrfG;9L&fZ_p(0(R zih*cMq9Rq8{)oIzc+r@&hWeKjRv?Ld(jHw1F4!QwqA%d3h>KLjSWGBKWroW%P zx%_A=GD}E&3QltnNH$bbCPupAq+(6sRh;G`h0|Yq^r2}aV%DTb#R7zi841-q#MMx- zfNQ8o7Ni)6#w6+*sud_3jY(6ei7M!VRGcZa3Q{#osE^=yR3cC;L6n%2C@nW)9fLWGN%30EEBYNl97&6Ln+ zrWk<1VHTCB)?zC*10{9Ni^il$)V2gP7p#TMkecLzl`++T#c?-aQKv28)G<>_$WVmO z;;fFL>mMI~J_Ju_d6!POrj!Hu0KWXKmuDsebhu3DBmO(sEnxwC=R*-ih2zm@pQ~oBiV`Y34dzV zocktPk)=Z7Q*dfRAlXbwnHcGclZrKkS8-Z_6i$8}$^H}z5GrOQRLzL1nPLIgOpz=| zF%XSO)HPE#qHHuKO`#^LpbL_3k_%GCR09&n+JHobwuDP#rs8BI!Y9pCTgS93u@n{> zp90ca1d`2^6pE3qAgMT0XceRmmQa66CUjVJ<4>^+abjNL)QPw;R4n8gD$)fg2BI;E zIwGZpih2=^Nt>vTI_RS1o8+REG1Z{O5jSX2qaibRI)_qs4KQ$i?l@-}2Bt8YL zZUmAIm6VB*u4t)DQ*srp*O8LuPdy>C9}5vKW+q%V;%cZ^NDYDr2gFisNpeqE1`Fr(>ozk(~&iu<38ExbZ+M(kCQ71*)wG zBwHyd6C+)rQpu+LDpdVQvHFvIDP|@_%tVMjLEIQA=5~z~=^{}KL}LSPy< zNn@ywdg#JLwMk2IVak|lVB&xqn5fm3@ah<;04_DeN*GTVsjDKDFy=#q#HYZNjX<%r zrFiUHG*u();<4Q$I%J1R%Ep+kaH(ihfEBKhNU{2(w@xFa%ldF^zx9&iSg{mwV{YP> zi?~`WmU1l?$pRY#(U?SCi?sx0)ApkVdaG&_8Hw=86=2T$qhQwagvO^JHW~rz`Qou# zV75l|6_2$?bm)$il#MZ20aF2|7%O07SPLFs z>Zs=o0gbBj#cy66Pj(`FLOtV$-Lsb!DH0N&0$MQw#nxNJV_&5$8__+sOHjiemXwV# zT~SkYp-ofNLP!x0m6|EbL*4FU3F5_^#H$o>W71f}HEE=apfM1QNz}oNL-D`b$0{Q` z5k7(0&(5Cu4J$H5NPG%rQxWhtX;L=Ebj6JGirHk6eZOf)$z;-4in!4X61N$Mt4U)i z*QAjwurUygNz^rIoE^XLO|4mEB*Lex75~#3~RsCXMA>lSaBg#y~VC(PWdx=`w8(OQ!vZxLZeAz0G5kc9Q9O_wlvYEQFqtl@J(_-%b03FqYxO- zsu4`y=DLyWMEHby9<`$NIBc*AiBAFTCItLVnv{((T~SkYpX0HPZLIEhy(}{) z^Aj!RBU(!kHwKLbT!Tish#3ReyJFN4Gc{;Us3C1rOU2AL$we$X#L977*e}g7vV@y}XRNg7oir76!vHF}%ud#4$b>oXAh#7Md zvqr?#n6ZRw%t#i<7{Kb0QP-GJVZQKLFs>geS(A|^g@+D?~B z8PzE*$(6Ek(~&iF#qFkID0ByJqw9XL98DEe`6+PV@y}XRNg7oir6Pe zfp=zJHIBu{5o*j>f|xNUF$>_=ziP}_!Zl_j3uFvLV-j_Z85QOW-yR!6Mk0LDnBD(g z+39%oEHpj^t&s@$8Z#*yW3qz9dByBli7T7Sf_;f^BgB|>$%M&5#EbTic#T5bm@<}f zO&RF|7z5FmL>;YEQ?@wKsL^oO#qdpXO|Et%ZJPFrI z2#HSt?HC07O_`L9FMJ*fNRP~7cpZX8k49a zW@^gnP(#`VnIh(!gfi-yGAhg$zHc^#j70e4 zB6Cx`Z#Nu{FEl;{t!W7OnldRHW3qy!a!zShux7BJ=QA%gWyUXKF(St7L~It~#+b33 zYs^R&$QX#mBuSJ2IHXQB5^wRGTk; z-|T9#6X6rWcJE%R4#Ve$LgG_ETZn+aF_W?}rYmZyE;MP1+9ITQ{WAUfi}{Hb^AW8Z z5jVz+1zclBx`-JA_>zlJN6cmsEAfNVKJijx)*xUCE5-(3I(3a%##Cd>IQ-~4=gg%D zCV&04nCwLOgqWT4jT_F!R)>)I6vXNf@Hb{sHpX;CjFXFZ*K7$={QNSOAZ9dv#H=21 zHD)Z~8Z(jwG6t}qWYjfg_axdvO;mE%!|+XV(aM-=(BiNgw3-l1`V8z&G7{mFe%a}8 z%$swtz=q<#CPis_r= zidx20BWe@@BWj%2llRNklAQ>j@XIE_F~fJ=LgG_E>qNlclu6kb(-k$9c}ljT)`b+W zU-qns8S@h@<|A4g5jUoc1zb}`x`-JA_!65@N6a`7|EurAy2(z2Pl(wKmFF+O7v4hR zQxLNe@Hb^rHpX;COcjL&O%dCK6hFU=C5Rbw60<(U)s(S>YsyF#$QZ!q*o?ZSYy~m< zqCXVdN=71l(v;zKW)42^78;*|)+Y$~nldRHW3qy!a!zShumZe3C)4{(79(QJPQ->F zvoU5Y=NdE81u_PrF^M{Qsm6>tleQ_Qdg+_w>Se}Mqn8|fqn9@#n7m(>O?D!DLND<; z^Q-vcTS$BgZn+5f8Z#*xW3uAL`Ne##B}?;BEa+gh$(0b6YLl(;Po;xrW(*F1O_zD>&YLFjV3!0J|S$KXKp$k z-+l{;PXTQl0{+HK%Ep+ksHwWpq^Y!xM~c@k)3=$-PqdhiXdRBYF=i~_8Z**G%ovEq zB12!%O^V#J|SiecXi>XL&pe-PeH5@0e@pAWn)ZN#8loX)r#2hNb&Q_ zSb~@_CowBRT#Xq^xWc% z#eY^dmFz_L1ZwA=cPoBRG)+i+3TiVD@HJ&pG{$5_ZIN_<22D|$#ezQjW%?eI

    <} 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

    K%XcT$9Xgy5E7l&THCN7TZG<)z^UlJ#-QSxOE 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

    1>%y2u|l77qc)(KfUO`#0G5Nuj!!SW`LcV=%aD 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ð4OLaG+E$7a6WrS)5;fFV!LX(v!YI_Nb5~cWd{`{ml7VN!P zo0Az1t8?=mGQZR1zJ=^xrO5;l>O!UsAY$W}g)*+J-5Dq}Rcx)+kH@d&wH8p5(Xj@9 zfV>^U*Z72GXew}3h8E3}272}}KCRh==U+E$ZQ&ouq-G%iS3G=W1Jce%M-(vF2ix@ zN|KT&xenjX8pP|pcyeLg!AO$PnsWfg&+-*)#ur{o6N+M}1thEzbXymZ&;zfu1zDK(-&o}&VaYQ z6DN1EB68;@XNg+bD8&E5U^Lwvw+F|4gt?ap-;c%q>cz8_?_1;BnT&YlJLl+MNb&u7 zBnaO-ip6s-V}}Ul>gALjBQ&xV{Ws>qa-y%PL*P-clLD&3kd7= zNKmHrH-wFgNAlS+g-hmIT{ zd%KL+r#3qyE+bc4c=tmky|VTu*?g5KI>L}W7Gx^{*OFdA$R~xwm1#$7jBUgiD+8c9 zvjvm@q5lm={g~9cZ+IM+?~u0EIG#*)Vc=0>g);~50t3Rs3W3C2i7OylI=7{_0~aI? zS?T7?!{Aq;v~XI1(D*!KPlf?pR<((0pj4@_zcJ7XyYuO4uX3DDZDcJdqXR3?RYl=) zQ$3urLeQYol>0Lu9)8<5=lahP>3np7H2cnA$6~oQB2n_;3uyM@3#~lfh-@BRsYQZv z{Zo!$MIX<^5AMb&b#7B=t$?ujU6g~xn@wn+AwE>|j&PyfF5}^V=FQZ|xwwJ1?Xptm zAO(LZ!T(di7ZH5i1s@>xpGZ(*4^c=)hh^it;Z;ubud3f|O}wxRvaxot%ElLe^XqQo z`NFGzBY82IhuST~w=={=FHiBLba%3g{yAep#98E%*PKL+SI%)obbB-`YzW$`ZA{sU z3f0r^l%5j|J>`!=Pe&^e7m5P=DEAqEXFd@SCv z&Zsoqq>5r_dI%DjaXT3Nf68pFt#}X94L9~9lny~i@ z#MSE3aZrm#Et)KnD@xc zbpYM*4%OPcwTPD|sVH(A6btH`h1}``Jx^rCUmb%JX_*Hvt=!p@g6Gh)E=5WtepEj+ z1U!kItIL*QqJZxmN?GPOUdr}^ahiwf;hrvxHt5oGOev%tf3T2tgc|lv)XCXlvKX`WFE&slEq{#&t^f4@p0c;^{KFx`iMyVHn(0#}J?6$#{ZLX}LkJ>ZHlAw?4u z?qe}uPlzeZg+9zH*l6)GR_#KAxxWuH?|=a2@Uat1pt!(max5xBd8em3LcQO1Emk3Fq2vMQVGjm}|g^&YN zyCPt1tt}jS8*QO7D-OEr1Z+a5<`qVE9kbL)DH*bv+&XGAOgqd+`^*K(pr;0gFsKS` z*enY&WH*qLaTqXj6<Q_A0qZtX+U%tPl8x4dL4${rpo zW}iK&pt83JX{t=BTOVcl{QbO5vyXIk7D<~yGA}C)N#A98kRlkSTKadA=22qHC3VzF zlrcu_RNzq)uUPMQijaIDH#w(U{iN)3XSDsK_tr?J3jhvY?AY&k?%7`0ONyInt zG-CjRQV!cA-5vXf{}y`r^|GJmXWt{<~s>oL-sL)Z#}Q#3 zKH%OIdiO|ItM#>*VgD5O&Mr|hVGpX>(mGAJ6xB%#3b29yeTpgQkn1{j2W-HHXaY^* zPr00-f?N(e_HoMPa_8DLCO0V$48;E0C|$pu-zV~kK;DABKgk_yJ*|pz21~DvhOdL` z)wq1%5@ouaI+DUCnkrEpQV9;pnx%|eg^}mox}JaLol<>M=%ccXz5fp8{i$5qCc$jF{+I9^PC= z94JP_wvJKN)0GROKux1kRaS2tj0bNP2AGVSR+ZuRq*vvQg}$m-cg`zMcBfllX#Iz3 zBe+J+hG71jg4j`vK&xDwPb7urK1vxHJ;Qa6=AnTrA5fQ??sF4gl)Yl67VurqJ_>M>n6C~AqE$djpXc}(9JEDtfAZ54%;{z34 zX$D&32_nt|i89a{yQkOm+d+cgLS41Mwyzba@bSTddFdv;)Gg~;w_v5+CC`A~9E#du zcy9I`@JJB^LXB`jHmbIoJE2EvTNqy1I`|u)@hNElYwdcj$ge{xas>eN*jIr*FjXe3 z@Z0QUT*tnstn1lbM7D-~@i2^Ak`4dI#y=Biww_;Y*T)1Pqu8J`)5WVw81M7)Xs4^{Z^2qE+ zY`{oMCCL(k#Wc$Nw9|U8v~?O2j!-hK+V`0WN#O7^;iaq6neY+KTgbkG0E?aV&lx5h zq)eFnkY&OLw}di*=$*em-ghQQfmiPdXF`dRxyekZ0u_EHB>$YwgbyC?8xy{2GE6ua zU?B--|J5?#ots0MK=e+_V|{0W6j*+DI1`GM%)T*!kkZrvBMwoA=l+z=gm)h68xy{G z)-YiVfhCGgf6y{vb!{jUL>(@{$$@Uwfn+^fg+Cs3SaMf56GkhUo6LkH!Q)@XV#|bu zSEe&z^`m`bLPw)vLJ1&(2@@W$OlZ9+lnF`XbI!*^MqimA1)je%oC*6VnVZanDp28P z!V}Zdnb11FZ%p{;8N-Cb0TxUspJ$oy>W!gHAbRJVNBYhLDe#PJ?@8|+Mk$$_!h~!P z;OQMOk`i^8e?>YIUVWr*O!#1-VZvAfOBDV3e#?aAiBKkpI%N061d^rdKzg-zc=Gme zNf@bQZZZ>+fUJ^Wnefo%=}cJux4tpqou>^Gjs#dR;aB%rCM>xjlnF%d^v9)=-Ks-? z2~yzEIpIv$MakS`CRBk6KNIe+OlQK9hx^8a)e8(0$^aHj7(3T8;rVzd6NujVFC3!2 zGC>N||0SFWJ1Ci(%!HJ)gh@(Khr27%necpl-ZQxh$Ot&pgyOCcOHjVZt%WgoEy}On5RD$^@c! zBG~uTtt14PAO-HJ3ui*ElDWxDr~(y!CfxeRbS6Cc*S;}f`4ff-zXn)H!v1$#COldb z$^@c!j>P7$zA`}y+&(*;30o?eo6LlCb-3};bS6CdVBeUqq`@#@yfR_$yDSsxuMcH{ zsKYG}_MHh*VD_!yOxQxn++-#sL9JgBVpG$ZQ2#*RnDG4Lh6%?j6AJFMOqh3FC=-a@ zNj%VZCP;ysZV6{XrjohIOsE1CekRPkB%KNK=JkyU&pc+Ba00+W9Y)+?nQ%`ulnF%d z)XeKU6Qsbbo5Pu~;eH`=lbMjN4%b|q&V+jux}6#6b}0SiqlO75DHC?S-7?|!nW0P& z>3-|}zB54zL~FyD@ZEiz$Al!P^-IE^E=p&@?FzkDCOkUdFkyl+;pcNK6J}S3GJ)uw zH}2~@6Qn@ZP2o)V_uS26LKUd+GokXrbSBJJ=)E$b{t?53Qvnw0F!V2$2{&CE$^@c! z{yw+wOppS9zA>B$pWnNAOh~B%b_R}27uJ^O~kHC^m=cM-h+cV z(iW_-wQ`DBr%3fu80T`hUa8GXSSaD^6 zvLaLB%sf;k>_5I46ZXX-S|z^(Xr~SFD!o$>>)EbdSYjva$!%#71M`nFC_DaDoxk2; zo4sd|dH;rVkvZR6wimWIs5sZIPDMSq^l_N7#ngT@QoCe#(Ez-F!5i4RbeB)FGZ1Ww z;Wd!yA7xzGuXC69gpZKw#LA}xDt7}G{c&V!!Wd!K!dkFPd*_m`@a;T|_)vCbf{(Jk z5#-Dbw_DEiJYi3@^iI=q+QXfp9C}W=MHvmifeHHps#{>f9@T^@d7vi&xXA~7;pBAa ztLJPUbRzOYpBMuDigf7zGv)j>JhJXh#mAs8Xev7X;!{qx)BlW`q8_OcpC_;yb%vjs zp7m*;S?T(;0{~bPY|pzbnkKs{p5|4lX#x_}M4krWzp7RmFdT_%E}Mxj?vG?KcYow9 z=vA@zh;h)wp*N}~F8DwU)Lhu1xfvBSP;*5SvnooRfyJUtCnM|Pa|tm~au&XwGZ3%Z z#8{8hq`Q;B62&X-kBug}2EUI|_eP>z~%cZci|xXCfZHXSI$4kWQrB{rADZrvTR ze?WpVvkj9+#HL0O+ivtb4~^Z5Z!)M0Ydryr2Gk`d<-c+xI4;kMuJk_Uyw=T<#($gsU}?IYn>)T z+qds}Xv>+2Sy(V{LJes&Og?6VVe%nL>h&nOc#)D?i*M&f#D_BZ6C^096IK6UW6C1{ zT@yKYDeB%aTIzlv0WML1hZA6l3-CO|daOg83vi&XGG!=5r(l%7G9M5oEnA{|s;5GS zeQYXpp5k8^1OAs4{|oqb79l>gLc?7A*Bj9B(y1jG&<)ulQ_D~$LX}elZMW(GU8p*N#b^PT#% z{aPdT%rvBR0uXl<^#&OAfgp*Tocy+kMJsd<50y^`Mks^rAKDPaztRFoU5jqrm;)H? z2;v_siW;toKNvn|YSoXcLDf67>Zjt{nSglZbHD|C6bULgBgM*=k+jv8nt5F;36ZF1&|t=Uv2yVjk^c=Du>kCgv;e!=(0Ypru|oEhUM5`X+_kS%x+4n2*(5Ge@^5@Q zU5F2@bi_scg4TtIk2Q!VhaxTq0T%I}EaDN0cq$Q_vzu2E@fF=6UWo*)vFAk6TPVUB zcdqu<_-a#QARdnvCvrIxG!gr~A>e0sll%ovWT^b_qw+r!w8^bxkbitT?;<{wDWhH5 zurh1q|1d+_@m|_;W>#ws&{a;x;3*=WE_7*JfQ{oIVp596v@E|;I!l}n_7*z#BAq*G z;}wz4(cRG*M}qJWo3D@`l=^pe<=o)&?0fd5e^-_6OTQMkzBI~C!tl!BZbi&yv|&ec zEAEYG!Mzbl)GZg5uhDB%W%ngEWn!Q{PIf9Yo6c@vSFt1a3`B6=c5EYbP1?LowxQ5| z)=K}&EsC*PamE9i`-)wvtW5_wdIJYYOW;xNzjZIwl@m$`V2iPyq24kWizFp^L4X)obPGuD}9FS zKsTE%+0nH>E6ze<*a4t$F)5^49EpuZ!8YDgG1-|l+s0{aVK!9CGzqp(Gl(ODXUaTS z*R#JBehgba!-K8uVq)`OU9>1>1)|TaUq0K<`iqtIX8_d;5wiZT7x-D9oZ2VW|AE)! zhp>JJkcf!^JJ-}J>&fgtY4w|{P<_%w-n@yuJ3(eIt`XRq$Luj@7-m;1w$r@WE};Ac zm|YHRb|i}{l)9VUXdDC$(z)&`d@bf5R^VMeE)lQ@KVI*vKu^r^&6*Hq6Y;onGF2y~ z&zju33DAR7b4s67?;1k&(VGC*JJ&;)eyU$NF`ep;>-x@YFzKu9s@U z^iw@FgzC|o06j>x<+Z#W8IX{7qkZRwm+Ew0|K@~rUQhQ!r?m>bkSy%}GZgh`gI*}+ zHFMb14UarNVNLAy{g&w0sHL&i(PeFeT1Lw?V=>Oz1nS#4(^p?ZQLNJOg65@c6CB*j z7JCzo&B*~=AQqSdz8`>;zHVz3e$Co>Zb4DUo^MLK3%GqZrNt#8r2}?_$n``2%%dpoEzhr4+X`7*k716UXY%sKvzHzQ3|ZKPm$l_AEWNP0y&v8v z(t}lr+9Z%5r4g6+$qgJy_2S;Cc^%hVtm@=F=QthGUA7}N8#1*=vep}8@yERHXf=V5 zW3E{mT{BVK_gQ-5R?Q?0W%DOiGetwW8q%4HS$P_orfK;as?tz_hH5lasG(X76>DgY zhDtRwS3?mE)l2A>atYNoNGM2eqr_TzlN!pF5;ZLv%GFS-hVnGjrlEWdwQHzALym?D zHPoe{Vhyd=P^pGEa0l-q8p@WCr8ieXXqM(GI+zeOvb&|Zif4Qf!S=*$lQO~|iD0~J z)pxB+oLzDjCWCrbJwx=&cFWL_Qt#@RSEBUf4!nFgDb(ZAGh;~v%qqvP8cT_IPlWY^ zNDHnd>bfjjNRgNcUC>P_Y6c4XlurdBG?=)#$WKA=YDI=XIzqSTSg3*WkmDw_7acCA`zez zViiXxk@(Y$lye^JE9brc6?}0!r~3T1$br%jt?Kq&!1Km@mKlZS7pN3D+$9=|HYi|L zC$?0{t4?Odmi*(hSSubZ^QSVHIG~@KEndeMWd1PLI%;{WD;C`g;kf)ABZV&?qoL~L z_7DqVV7;py+#GUQezj!5!FR^R>sXdu3-KF31YeyTS>4`Mog5a69)%#dkj)=ljO`D7 zFKNh+ zsF@v;@HZ|&R00Ylj~|@{9cYW}ojZ`tk{egH;eu7kr&*>W%X*U~hAafADV0d+vW2tb zb&}%0{54?_;9+ZA!;`|lG!n>Y&}1_sDG`n(hV%;uYfwvWfb9vjLWE3(GIHECU}PfE z4%UT2;mJQ-DVyNcK}MDhyE7xP6S6IztCi1MzcC^fIoIAOgTZJ$8J4J7MT4qp(FFAb zJ7m)0)vKi?jkYwZWXMkr`p&2~A{I>|S(_99GCKYakgi;g5fUoFV~S(v7TTDxXhcDh zig-;UiHM8tXmw*lY7v&i+UGrq32DsgCE2l|HEss&inO%Nkn7E`ECfQHH-mOxehB%< zV0a&w8mfM`DBbcStnfsb>`Okx^)?ioA0jh8YvrV93|@;eJZlYT$ytc&A5>tOl~VI> zWNks#np93{nd;=AKyHfeJILJ}ntN~{wgw7$A~^&$Bqgb zI!SF}1EoSWXU0+A8jF3f*sYvj$&b<whX@YKmWlFqFD?&6T;||SF|umJBVXz&Y!7r9 zrU7!L%RqH%q&hvdfn@Ejzc6Us{-OtP26K?)so{ zNcOg{Z8;T;CGA_pqUC`shJCJQ!gTEzS|w*O|JD&OJ+D2bJXGHRs*~(WzQ;~xE`biQ zym6zByMk7dd0m}%y9qd%d$Uhjo>5gDC7$t19^_B|>P0MY&=sf0B{~*8ndRkgPK!6> zg~=MTGnoyDxY^NTModMGw9^=NPPC9G3S|BzG+U5N5+wXfB&m=WiEXYGJ|wkgdZ@Mzknxawh;jwdWI@EgM3f475wZ2@ zz0f5|)uwh*2qNQY`4Hs^qA7xie~Bm+@*=V|qI2OvG&uy3@z{Kb@&(a_f{1^KC>8P| zvNcNj5lsm}B%YsD1t=bAgd6faN!sF3MrAkU_~`4S7-8x~Xz)nvi={(ct%} zVyFrn<+YsYeo4oeZ@r!HC2&1@bwFn6k!Wgr!kuZnLJo+9GRt?ucq zmVLjtsI<&iM);1|K@^%w90@y3BB)|ZIpH?30|^)yD-A*lXL9w0ti++V>^Qe9IXNzY zD;Z7m=%5WEGfhBfo15}x^FSAGSzhuWGi-rkk}*>nFBMV(gwA-aPXB90Gv_QR*e0R9 zEvpl+UBQ6D#T2w;7uuN`(^MlEHbB&v=iCLk1w<9$sd{T6hC8?FWDAiZku%c++4Vq!)oZu>DLA6BZ;+L$$@1um0+d0(08*1U5?}axl-J(g`#Jv{HcUW!I zZ(pbBlw65&eri*-qU%RRW6=R3ERvzx!D2}^!i}^kd&=h$CvT8^%y^I~Oo-R94AxWd zSC-&UXvaqq+^>ybYcp4C$o1h^2;wi};&sd%Pq3i8%XKG<2=2K2Ro69MCv-y6;6r0F zK}wrOi2N6{OAOo-5&kJiu9=<9CPR|QbRxnUGFM2BsRGU#6SF+ssLGw8>YUV2wuV|X zl&hgu4drR5O+)z_YS&PKh8ztQYN$&?#Tr_#p;8U?zTB(sMWVsfQtIG#b5dv26kTM| zhv2jd(a^{Y5y`_T%h%OVA&mg+T}ob6x1+716P39HnC_BfdXwEQxz3ak3DTvo#cRcc zNkXQIR$R-DQkio@qMJfiB&4~+gzO7g%RKzFDiM@_J6E(49&5(Z8 zix^p2k=3D3Y+91aL8*aRog5h9%Yv$JHSuy@jbA%Lm^TQ$LRn3WQBq&G?aFH8851-0 z_ToJ0UInPHPSs9CU=J5vuHvnf$~V*Nmeme#5gb(H}v7ctqRV;57q%lj16xB;_7A&=rZEQ+dR5k;!~me>I;f zTxo7BI+7{!m-!@A$G@77-U~Zyx};QIm`DBjzv8LGT{I*oW;LQmHqN=M;eN#HhE2Wf zSOxiYc+&cLN*>*AubeEAP5jk5*_XHYX;Pp&|kK&)Pj-9WvL42EL+CN{<(QC%(UzQOl?@X{FfUF-1HLE0Un z1j`8kGpIn(;gSue61=jeQhmqKQ34tv=?X$YR<~zjMu>*f+EHakb#f@Y#4!Rt=lWu# zt3Cd%O(>)RHxaGF#dB0YvhxBUrmq)CY`Xiq$0_3eidb5=NgKs9g}O1{wZZ9yZv@Wz zj}DxEI_%YqWt=f`9|KqhDVRP7yDw{T_M*l+S)_aAkc5-67?=1>-%Tge^i8iRy?h)S zC$(?#kS{4rEK(y*sq{+df0eW|L7Jx4N-D=YDulo8{B~m}UI<_(Hole!&A9TLGqBoI z_5dZP6EB@TkhAcptcL2Y1L2vMJy3HpzRMoSte*bB;g^5tr=;NvKP9#fhLqRe!o+Ag z-1EDIJ5jvcW@lmwu0#dkUJ1A)e{m^WAlB>*NO0=Uf7qdQVrq|_Ug(c=A9y8h!hCNF z=>Auv;LHzC&FWqLU`$zi_4N5$Va^MJw6SAn5Ed_+k0)6Y72fZs~&ep~ox*5-jT%L^Nee-rpE=?Um8PYm-0wr5R>RZkF z|8UI1O2{Lk*ne!j&UPb#$K!oZR7&^u?TM!$B_mnS!+&IdMrWA|pcMcNPay$f)!%^> zdD6AX$bIaaB?!*W2$-NDIN=m(@3M)m6($cMY~nqDM# z6GgWkha+`~k`?%IHgtW?cCz{0{fba#ZY~{SH%z7V; zdZ1uNXCV<_i|!JqU#u+2*EcG*!{2^aY-KR#LOJo=k>Hv~zEj71JJJ9DE%q)0NwaZB zwqgsa;7)jhl8=cgRKK+vjf(&bkJ)iswhWKuA;?{}j9=#2TwB(HP0nM=mR&vyzwU-w z0Fm9aL-nP-RvZVEJ|CNCSzwtfjyMev_0+ zn)|8oj+Vfmf#~_pZ*1e1@|-IPR7#k( zX$NMSP7s!PYQZBsn{i;~QUL0uR^bO`irs>qip3_ZN~_x%G{jv{&%Pa)SzGR_n7|Hz zgsnKEE_GrC)}lDlJYXbrCc{2yz;D^=t|yBbe1U(Qe*fSrYZc}R4)a<eT|?O#ax|2yp)L*OX=uHM@-<{8T?;g%D>$B*MOIJdK|;eT^(r+Ko#X-S>i83{S|o!emq&h6x{w=>c`w}bWV z>0KEW929lIk8+sZ42t$v@_pxat{P{J-bs-e>!xA)7~2Bsx#ceG&$%722>9Go z2IbriYk_R>I>vZhi|7J`b+XW& z+gX7i$k8T{O+%iL?nswb(sMgC8Y4e?+=LACF1)>m<^}{tyBm0;b7TW|-CX`uOByDV z8-bbbvpKiJVEVb8sn|d(r)5aCY``$2dFY`498H+Qj6Am^9Fuc9VPFkv$<2M(VR_8nGldA5ia?KqD_%y<{xukx zNK}Dmp-_D1c6{u%=XMy0?Ng)x0>Pg#A{Oqs9jXt8Z(^$<*iZ}axt;Au0M4tZwoH@; zl^wbfIjrK1&`qY=q|~<#nrf9nuyl;z=D8h;BhT%yF=NqI`~?D0;u`IC%uZ#}s^@kj zv6d%YkdulPPY6fdb32+ryD5JLvzt^id=vt~>;lyc+O_#1aQCJquy$PtgaU5{?GF7A z3cVS=4uMdN45oQ8^G6;->~x1KFi&BGa9h4K!esXy4JzcVc`-~w=wYZVcDNWJdb3h6 zc{Hd1S!L%L>mA9G#z6_LHMQsVo*f@Au;_ zH)ipYXAzDx=~@zRn#*=*=$|Sxw55&`X~ZD>XwYd9ZhB8a@R*BLb1|3t}qd_beP|?L3$RBnJFajBBcBNy{ zZ7qLzk4J;3PX~)O;b>5UOLr{#Jiiz5uX{9zI7ByR;IEfdHeQOqZku?H25BwOXsP=7 zYmrZop{C9NpTyc`R3TfaJ<_8=-B$L>HL?;QJ+(a=q?w~MkH-197577UOpqQ8N>LmX z0&_GdmBCcWm4j5uPvH>3VWvfn28BYDqd}<@kKjN&x@WAVR(d7Kbd4Sj5u9(y>0GS%#T>&e1pC_r1t(ID13pg(#vNPI!KoYjwtE?AW?M}v&O zRnZV??_xwL`yB|J=@B!q_rYCS-S<$RjOo!Jx>`MSbE}XXqB=$}-;cX zJBF#C6@4=E*AXzCyFH^!m!m-fs7|sg`5rr|8xmPpo$VTZB(0>DXe0v95l(bMd$UiG zqd~-jqe1+^(I6I(qd^SEqHFLsE`PatnF_gf#GHEI(V(xvN*)bTY#!V0F@`)Eq>$SM zGXD~CD&&Ps(O{>xAPusSQUe)1FLXqF8BcM)$u>+^V;Al><#PF~d!zjNTiuAw`h$I9 z^RWz8)l(3wDQ5>hlKS#5>zfLB2$u6Bt&b)LjuQnPH2204O+e~Ba& z@**K4cw%QSAClS&L);g0G{}cYj|Qz1MEpxcsgM^D+laNHOOmQh?bHxN#+maW(xX9L zf{1^KC>8P|vNfV};Xzapg2*_9K16yn=xag5zeJP@c@fzf<@*s$3qfR@OCO>F5rp-E zh<}MF74jmoHQLFK=&BGz#!2-dDilN;1QGudQ7Ys`WNVb?M^qJp$T+(`M8$$AL#!76 z5>YDTMPzF<)Q@Op2qJNstrba~s>(%4IaM_Pi0Id1E#9EyuZFxRZQax^^=2QK8)vtS zeehZ_PfAZN-JqUbx?BIjQ&qH$Fjg5I`7mj{4xzG9FLYgVQ7B^08=205DeN40s){gW zqnu|{YiOP-{zErTfyrZ?0{2wa_vi(CgsLTahANmbLe^s~=2Vqb#0>OOmT`!*9{*B& zBvi-0rsi_0N=oXfDiJ_;m?(#oas>ka5<)5@#=sQC&K>{YO;1$~m7@I1qN$L#D0kNR zuZz)oq$vNgXe#6_$}K@YtS}!n*l8q1`IkjgA#YJE9{G#H zAfV_-DayYrnhJS~?i4Hv6-UtmDayYrnhK$4wa90FwX}4;Hn=$kwiog@N0%9ymyPwN zHFyk+pL+KUkAX24oIL)FksCmG42)u~Sv+PZ*@|SffeFg zXHBr_XAT$;I*NLY_Ys*1&F+Uu7hcJEC2@t^V_@sgmt$ZQCV6y}>vk7^(3e1KWxdzIx`zvm50c z^fEXw|&l-G9PEM%gGO$G{RgE;pLYnJGIi5?M(b4W?t_GLiK-BQjXBbWkfZ{)Mc9Fp;LX zZfBH}WhBx)S>{W{E(5K?D0{LjA{AQ1pVY}RQ%0InPnMN3Tf$D{37mSw<>iHidzB?RsWYxI9_L>_WR{l~f~ZnpLxylVt*;ikQ@5 zq~M#AWuyo-b6Y4=ww(fxl3JI6bZ%R;5&sW+Zvq}wk%bK>kVrrzQADEy8bKupDyYE- zL>r`?7C|F|qPXA+3Oc9>;u2|0qG{UJxS%*X8rO;2n9&hKl-M9cA~FzMqcR#4@y4h` zMMYflzvrB)+jr}9lhN;g{_pvD9@2NII?G$9PF0;+ZiFG@fgI5aq%&X=5i0zQb>%Fh z%gO38%gz!dIoIfNs(rk(OklB4mj@Q=@<4z#cb0X_awmn+qAgkSWX4x*FkA4TxgMTDNxTGW)Zf@IQ zEM@B&vGUlurc%(>HAf1)bPyX=oM{gqotlPQCTLTZ*FPR0#Rn( z*v1bAG3-65?P03Cy^S!5_37xjb%)#euv6E)2s-0-seUH!@8e012?kOO}3Nr zSeO#>OAwblI0YVmImsQR!s=I=<-mWWguxJt#}VN-I%;I z6qmGWn%G5`2kT6i#@>=v{E(Y2kIp$Q4Ynn%nml&V?cc!G!8VLTTak;p0c>5W7kJb0 zbefNtw49yMhP6LzI!HMjIWV=b8b+h{u4^)K*2Qu2-o&&Cj0+p{cC%H39LlO~OKr^4 z1^z$VR=O{)ZK-{Fn$`brTYs2s!9KXo`(R$?9N5qUFbohI@u>u|2TOJslDWor8HXL4 zpjgd5$p2rge`K*Ty4V}pjEXI1v`{0=cXCRPw3QrM<+QXzaw8|Ezm%Bo7Smr?0i_AW zoU$(iGj^Ps{!(hbQ+x4LY7V#}Uzm1FZsyeVms0cHV)|>+HXSqVnKU>x{iW1=x0wE# zsZH1H+Y_@-oSObpYQ9@cf6de;(!Oj=A#rN@OR4#8G5s}Do9@}yAM-$*n*LI1zFSOx z&D8x-S1R!!2T!^YLRiwQqC73|W+&3E^uM#W>}=505T ziNxEuIh{A1&|Bxm&5WCW^xn8RW?&aLZl*aTacr<`+OU%wH)ruMvcY&}p{XH1a?qU* zx&b^hH*TJEntS8s-uuTES^v))H%CD*+Q0WdZ`^zahVg%H<0gG%>UY?6^Rsgo9d@64u7O&}c>W-_47pgai^+tir@H|psmZs<=n zyUUw8Iff9)JGLKh>Rf;yWAICkO`W6@txtDs>g)#2vF|7S(VIH0dpIv(8!|U*?$jR6 zp~&mGhjS0Su~#FhP>+#Rv(?>uxZRf7MM`#Y6o#^2vb z34Yi8oxAPB)$RA+-#H54IXeJV+04wcGty&!=ZAgV`#WbMW2|cCqRW6SM6L~}#tnn4 zUsC*Y-G0`7PHc1?@Da;_=qSK7H5e`FNJm{RGHrarQYK}N z9!Q^Oqeu4hCqCHQrUh+-%%?qwuDNOc))zhvs;?TA)@FnqqnE^+{<*GB&Opd!n68yPxnh&IU-2%_4QEh zB9Mt~2JS?;Sss}Oo0*eVE(P{zSMIqMw{q+DOjMj=7QdeoAH!OVUGZ_m zo+zxwElnM5Sh$(~+~))deO&n_Lez?;r(%ciVN)!gTZp7Tak?@GeC846KuqtNIVy#j zPQZoJVBg(c8?0HOyc(po{?-O5pc|wayP`pg!Yvwad}nQt20fEuvcZ(E&G#3A<%g@97u~8nRyjrBm#AMl_gleSUtG&<^kbuPX>%A;3QqjRk z2cd%VQE})D?7jFNo9OADUWF?86{oVh`G>QTDh>YhvYgkl>==>faH~A$fA4OZP5@~~ z2O*L74uZ5eI4tI4Mb~}kc5q*1+MtbRL6F&Onznd2;3q&PDF-*kqiMR-%xoH4BITkk z<-YmAtz1^}$`L^_hMpeEz1}BD<<9fSe5;u`Y2{)~lPv5siHZM&Xq|Ts@{`r4b@!Ku}1g=s%N!Q<@EPr=?kxZ z_08CWX%tNXxtTzMet#VfM;+3iUd6#$g;Pq`q*WA7Y5k0{ zM$$v4+C;c4IS~d;WdH9Fp@g1_2>1R=iO>+NfhP2iD98A>%}S2bF=+farA^tlsB0pe z4o$?#&eyXk*}N;r*}s}T4dq#j@~lBuqdE|pROPOfwO9!{g&VTWvcFLWh>n5^v%YYi znPt=HS%bfkl`k!+-aqr^uLTDrlOln{#NYO3@ZCb`W0UQLwY6W5%_Dv zK?(}~*c^(|;#4_mtu_#;6)Tv8&I-;aq;sLrKY3@_RyuG+Eh@T8SrgV(<||1jMuN(E zNN92EbZFV6>cEfhxm8h1C0B^~*EYbi%&*2kV|P@tTR{&XEHr&@HbHcjNYmQ*3iMTo3i3Z(a1OVps{B==r;O zd9eG}LjdtB?>q+}iBzOt`A78B!-;w-ac>V+LPuTVwM~)qJ`-L2((7lae(4doKmpi} zv^o}qWBs6=XmH5BsKJQ=QzItV820%}x2G0m(JQ|0mRYXrb8MY^`2eack@Ry;vb7bH zV!4XP;@YdN8inAFoK!|YKErOia5zg6={M;hYA*`&TgiSv|JMmN`lrUB`L16d#zZu8 zPhcWUQ&cFX9{vbCZqw&XO-0K*F28L`9D<7xR*4DO!y=@GU=@OC4uY-Oz@@dXfa9|Z z9|I>nE;#3aQ;cs1`V&AygVU0$ze_tp3xwW7bM{@}aXf6d z9uzC8tS1(zmK!cBP#uNsd!mp3ADO~dlOkp?y z94UAi*T$)j#W95^@uD+RIJ6tM*}HA|+7>86gl=2Z-EBj!CdlP0E|KSInhf;gGM8?L zO3kuFeiGc})F>LhCQ@^3=qDN=P5iaVd-nU$RF))ekR`4pzG;Ec{^&e)F5c0^p9Qyg*jw2KqJ2@3mNP0;)wkCxEL{%5(HpqEp09f(i!XgAIAnr7RX zZkjWbp!w-|mz*si#UY%RJZSb!g68dRnrk)9M?Gl1+Oa;tFh7z$+D)@o)4bh-=IkVB zetx`5_s2BN>pf`hodnIh+%zjS&6yrFU;9n#PJObZDp^EzD<`26p(=9lYqhcQ>#ZH= zab(^d#fi1fse*IB1@$>@E%K_%kqQ}Fm@H^%{L1!DxcvC*@5JTcUwEMLke4cVx|!sX zYw}V7!#dtkgwa>z`Jj2Zh!qR*TK@}wW>%i44Hi~OOt1vfg=B;A8t9=&Y%@R~|FW}X zY&KIx)bWS(o<+Xq8CE+gQE} zM~l^X{7R9j1+xe9QQ-6sBGT<#b&K^CXp&I+cwG8PYNYobh@H$S{p8o4YbpxoV8j~5 z{>%GyzOb(l?MQ9WS$I*KQq+TfGUxe>MGtV3d-wNfa<8Stk%B5*8z14h^u8{~Q%mn_ zJ!3!I$Bw#afE+f~}=>30E>Q1Lzlq zp7{RFvMi)#L-84x3+Zc!v<$KeN{RFeJeSIGiJkO5Cg}nujo^velY~hZA`GExQi{?8 zrT!Xxs|8B}GRs!cV{(qEJOHmkC1|JVc^2MH_=X*G^R zaMtn+p=|9`#A}Je?72#}cQ5KgMCCT-Qz(3(9-<3_z4*i!2QG1oO_%H>(d5j{5t$l{ zH9uJA2;r3c&Eg&r4)tClcjotw7H8p?JR9nWMx&lCK|QT>)<>#`GOlUKTpGLxqRC7v zp^rjnFt%e3D(17FB?BofsZ1%xiaC^&m@|j9TJMl|H7Uh3(!;seRivoIeQ`(a7VglN zrca=GEvnLkC1Is4A+=~K;X_nDNH{S(sR}L>mN5zDOLL&bWWp^lWfbKN2SVDCO1j9v z#gc&9*Z*fe)57jc57`E|7OoDd>kXlkRJ*o=|6yRqXb? z)B0P)`e6~?)<6AQwtj16o#yOsjSu->q5hV`^o{Aia#9;;|t*WbQu0;|&Rvo`p2QiWa~{jPha zygxX{BE}DXCce5R2s*cp;_&-$|28WEZPz=P{sW@Qvp-QSaX+wFZlY=)rw`+Srx*E*A$Kq&MBK16qc z&^?IgUTD&Fh))a!nHoyY6^q3egs8W(a0UA#nV?xfr7fk^9fZkvh8=Ayt%pe62uB8B zcWhn@&iI?E(?L|BnI2?nr-AroU zRpk_@CARjt)Olk38nSR9crqriG~Dtf0`$gfs3fD%rc)ZUtd4DSv zmz3U!ETr^2EAPxQwHiTpYN-ll!&2aujuy6KiS2S>JBiqa@m#QWgcLr-3sL!cVXKJJ z=!FnnN9-4!&qaBj=uEZ5_B!WcRnp7Ctn_P}!F{E0Uyo~JH z8rEZYqSFdtF>p)>Fv=pI9Q5{sY3Zg@r)P1|+TWj~NM)1bR zKK(UU7Z`U}Fr*J|0;K6w=OP79;o30pTuROnT=1a`xa8U{wG7E>#Y`Ivqm}#d1;%J0 z>?gv#gz%|E_;!=9BVzJ7UI^hV5W^S`(U?#c_qLql^ch=R4Mr|?{XG!SyAXmVt|LLYg!f&EMYNx_4pwNmfMQ6fqKyO@xKe`S1ApC>tt+P4%5GkkRo{r#*Pmq5n zX8~2nD^_}+v~1PF$0@xTyxoAyH%{rT!_EYe+Bc`PrJLHXki9|eSIB&iUSsgOaHSBy zWJKhj!i_GM(Zte;p%p04yPu>j5LB|Ga7ExOT-P;lMs2czquVU2p-X%9&x2gE#`W*3 znf=AMaJFTeT69~cyXxE?g{H3cSi4|sZL`K&it7$03ykDF_8~$C^KosgUuliCNTXjmOQxGlTy`|8)NjKFXzNHN65+K~?wCvU$4=nl#$1+t zVQsV@0nxhSnM>Yma1r2si`ru@jX`e9OGpeqCoVV^*GB(^x-ECaT#E2Qn%wb%5-XQ0 z9cn@k{cY%oK`<0XjO9d;p!I#}70!LF^BBvrk8CLa4>O`qw_4GlNVIj%Gqj;}6ISFD zrj>s38%=qpAyR|M#Cb}m3^kefn)U$Ml;gieXN9y z;LP`61ZqZkUtAm8@!Ye&TX>^30$Pu|-qODEmf`#xk? zoN*6Z=iX8L5CN~zslRWF)vK!TK3895m?h22s9;zpuEJizS>|w@Hu}p4uF9K_GQ)@? zUQmX7VG~YX&9($+(%uzUar_|L0Pc4T#|!Z< z*Mlx`Z9#hCx~C^slq{Mu;d+SX`qp)9gXY$zOCSO+vq)9 zUAn>DJy_XnZRMz<*CKPgsCt8cEu@y|a2;H4k}fhuJ70TC5GgspQVyAAw^0_ zMgn=Uo1B=u2Pt{~lVg#$=xT(P*IG*Ni$j#L_7kRS-UQQ+g=rYq#-;I?uD}an`m};T zX_rO)qzzE9S+&|=M*v1Zj!bHdO`tgti0Z30r@MU0h|A_P3dfK@ts>Bl4G^dq&plBX zt_5lvKm~$OF_|fcij~LlHnRubwK>1e&1~y>x0y``f!G9A{1G~o(5Dc@#{X%0{Qt0f z9NJAJOJ;<=jE13gM9duXf5ww?_I9`C9o97&iu&u=86dnY2)mLozn1q%4|yjiPu(If z(I&gd^N=?sd5Si9Q!t9L%UfFI#`lr8lSacLFVQA>%ROQ$g>H(|wA-OQdG1CO9tjSY zoUXK2jkvB3Y%uVcss=5jNpw@Ayg86?4!Ct7K&M`^&N!5FXa8+lt z>uGHZED6@A1mj`}todJ3uLs3mPis5QlK&Bvpj#|~HUI7E^{0=T;!UemD9oVQt=&vW zFkDbIpN356u>vNBD*%H2rqD{vpuZ` zfHcZRkMemcxmO?rr!*lW5DL(57Jjqvn~mRW{N~^{2fy$kfn59!$M10bf>9tJzdro> z@EgEy0KbL!EyOQMKQIlyGw=)5Cd|U`tU!1&ET?cTq`>6AY-&)~0c8>N+^4Ql^lIXg z4Uu~k4I8ZkeiRZ7V10}-#8x*jyrxIk5b5PKDgylyay1w);H78GWY7ji)Vgj0ip7@p zxhqQ}*90c?7nFR4+HcJ z#iKnu^=;g?OK(TTsBCMHr-Ql~QD?$QP$iOt&I*b7fFp3leNdpJdq!`r+}jv_v0gLO zVR!%&TMlXEF5!1KZnWaISWZd+(?dR{a+XDIZP#JY5KSo_2yAPBE%2qrnJ2u~e`r~v z-bUMeEd3s2;E@OlqgZ9ad<|PrCNDQ{%kfHa`hS_X=YsT9D2nKarQC8*ZiZDs2^?*2 zbT`YZ)>%=SWwor(q<_(xQ7at)WvqMOIi zgPYExg<;{6e+gc+#80gaGne9Eku6m;EV3OddxYkyY&He;pkyQjx6i*0(GHouX?* z2H$+D+gNW&3krkCg}bxmRZWFZgQULs%L;|!ca6I;vEzsspOG?dzJ-zsqYGr;OTpQyr*L`wF;OYUqkU;{E2u;0wWl>(d z$!e;7V^M6_Y$KPXbVux3JQAMMX1t;!@vbE{v!OQx>Juhb(QpyDvEA>|w{VGFscj=V z&vGh-gCxspj1?&h5US!w;_vsMgV-EBf!S-2v~-oV_Q6%lZq5W#p-BhLZt_?P|K01% z*V+U59r&V@EkUzh9(=F&=37f+Y3kIXLU=>5 z(IM2M#?tu|EOCll#wPZ~Dwr705Jw80#mcofS`iib;m!*V`am#Q$LS(}6T2+ci-4>}?}c*+42bpVshv#KOb4C|8Cun0Dd96rGHFnt#aSIUu69+6d}noZcxYqu25ZnV3uJAv zS|^KZg@v`JN;MDOJ=W{en@}9Am^5mDaiy?S)1th}k4>J|uqCVkMssLCMjfEzGB5ftJJyRt=E| zgj%FUqvE~Rq3GW>oOLG}7&KXRw)Ud+n3dw=I;8fxXxD^ZRW{Thi4N(*A*yy5T03^1 zJiCu!hDvDq zjjFI)=2u@$3K7T*N}hh><#zWHrc0Bf>XJFiI9p}@a*^P|g?Lc}U_4kWesjfcK= z%RDJLsxFzMAZ@qjrV6*rTVMGfWF{6y+gEOx?@NxVOXi?U=KdZsk4}!dH_pVuINC$z z&t7&RVRn150Lt0zh@@xK?wS&&n9VLcw3q>HFg~O68|XW*JPC*XA;$#vX;_k=52n2=yk>A*B-w9-vDedH5s}QebSE&cMuA3SdsB*O7ub zxHd)sFzJUndX9JEg#d$+K}VZrcvgg`K7gC3;-4qGTvdPEb!-4dx~UiMxzMMI<&)0x z;$28wJMJ$nV{7?CV-`a_7Tg>seE-mx#S0!Wi-ua(*Tokh{{$hLx~sT2^ZxcPgnXOP zRvEQ_deEB8opoE-6oItU84zsaprL|JEiTxvrqt6MY zNFqgbRuysAl*x#i~=_O;DE4xun&IJ z0Vy?^*Qf}>R?=W0qPjS?1UsCjp23)`|0gg}Ykoe&wecjL3nm1s#Z#vOEOtn(k24lz zp1~$nQpYH{_#QEViIE986dRZrzDX4xQp;ICJWB*1aIi>6QyT@wSOE^|j_31|Kv_-~ zz^^`Rr$)6nwSGEv1RfZtx2`l6^3w4lOGKg(=@4Y}j!1m+FD{sXWl+4c1p{&Qg1o+` zGlG#CAlN{VL<;W1wJ{UV1wlugT(>25rpij$h+kklGnLsKOl)Yu5!f6- zY*I`%jwsqRlZ}o!*j@X^7hEV%9k-dMqc>n|uHU)%m$1+^Kszc_0FO;a&phj%i^~TA z`xI$sVIym}NbUcpaM7{PNx0}|`Vt6D?(imbT0jJ2q}fys6;1B1`Yy*$VW5})13>cz z*GR$ZxHj&^b16?psAwx*NO{r%B3r0PS)?uid(db4^IAEYj?E?P9e9Hr0w_V0w)zSQ zuTMc;OQ}yqU!5HHrzP&rZZ{CdL_?yWPZHF(Z+CZkANyw)sl#Q<0AI^K*hBUcemCl4 zJY+X&T(Zvs?$xlWD!Ak&Zv62IHNC-4{xSu>T+rCtaP0S^Qo_EpgQ!H{p#OwNvuTe+ zh}Nv75C51iYgEA7dk*Ztb*GQ^)Q;JK@KSt?>#{u|4pcyOD_o%>0U2!N!1Bb(0$#&X>v zxf;pe+a!y|&I~5ziWWT;$8S|?7i6tzOT%AudNAo7x{2Bg31auNA%i9t&8{Frl{G#x zEmmZ{p|PYOa}PQ(agecPxsk#tlI1%ZcL|vCL~8>Hc->D7nTi;rLxs^FhK#d!G2kDN zGB%soc~~9&4RTBr$fwC|Z2jN~?$x!^$*R4NhJ|C)r$D#IN|c_e5~T=snvP)K_N>*J z1yHFPQK?Y2Q)}Io3a`{0AKSmPlw(K2vi-w{S4K%rbP>3e)u#c%&$IpGb-$(}yZy(@ zV*Jz0@>MJg2vY`Sv$~X{G5e1(nkl(dDO=b8VU3oB7ClvHS(Kt9o3FT4?W}s|E)ogD zXiF_{mi35dxU6-DMYp3?U}Zf^b-VIPv9G`U`w6uX>H%DU5tZ7Wy40GV)}ZiCMbcd$%b{pcL z-45cfOxDmn+HJvV=sb73Jwd2j+imWVS<9K$8=dqW7GsWo%7vK zbPa?kc!(uv5ca;x4Z=vFo)Cly|5PB16cA2-M1wG*!V?5yZ_MqVJP4d&z}?;;-2Qmi zKnOw#I|zGR=>}nhP)`Vgzea(O53;a?Qy1Y&Q@{!{WGaE9!=yg^v>*iM6x z0Rb$nLmFUz!^Gt#fBS%Dtk^@Jb{eoBEb9%Nw&N8YbN=(Erh1Y&P| z-!FL(IKvKJ0^$Z?&VyY8!Cf7;Ug`#+k5Eqt!oVjL2qy>#hy7K9&@<=>0#}FJodAI| ze9vo2+#t;STh~B{LRz~ed@;)nLQkQd5QG8M3WR`wFyuZBLfQgP5Qx1oXwT#=fitwr zjGL>+c)>zwL(+xtJP)`U#_TLo<6F?T#;lL#tgpLwV5Qx38U*F_G;0$fN zg2ZhJ=iJ{l5Zu+F$85PM@HA6pYA zp5SOAIm4z~NJKXXr-_(54MGr7*g<&rA~y)%FG&uBo{uRI3PBbi^joY!Xur-A1Y&Re zIV*Wf;0zmY_6Ff(5p$Mh%UuEQXXB!1uyNKB_I8;3(;%s8lpI0HG{ zk5NSh1~d9NF8Z{B%&PU0Eq|^?``Noafr}T-##CVo-=!xDI*)tLfRw78A}QrOg&w#fMUOnsZIhEh*fL+;iOlsxkjQ+_Yq#u^8M~VD zbwYtMdwrUG-JLtFTokg{l{@`hw{pcGoTPF@kmQribav$qGv!O5oY$wxzqw=4jtC93O`i%lLyFm;<=Gac-Tv|QibSt@Yl&`VJRaWOH2UMY$Ze{0))dt0YOE2Bfs+Sj>c_CAs(CbG`-`^VT(M~SG&Dq1f(71 z;bDIIG+&PU2BE4r5UjjqMf;uQu46}u%z7x(NewZ*;}#F^_*F#9*9nDq-m%8aoV4qY zx|GX5)2-YYAe^KFA%Y}dPY>m?O!*Qh=j9#Wx>X~Sv~n@;s7r48G`DisfpC(_Y4149 z!#f^n%9lVnFYow6*s5G0@wyCIjFHZjNqi+11JOcPy^ulgpXb$cYAME78`)>#lerb! zshHS(_S>-@Ph|;F(UDupJz}>kuVFUocDvUj0*2*!6H5zyg&sPS#2UvM2EUpU+o)lWlCREK-D9VWJptp6JGq0RR;Mon zgSsKiCGY++J>-0MmZkm2LjI~;t}y>Vg8HGHxZnz08{6<)hQN-6{1b;*D-2xRPA%kr z{${Q)x}Vm0D*`|tLJ(5eK^R)-24R9wPYA-fw<{3x zK^C3)s}^by{FiuwKIwL7*;{(a_nvF2)b8RX@XcIf@&E2XE>c2vP75OCWCKTn{+e4T4Xo zCj?M3Iw&x;ldj=2qQ1_1cBHa%R8IWbb!Da2J&(gHwbqJcNzp9{qYzAlBCqrq6)Hv zy(hXs7%9{ff-oVhK=2W##u-xCC4-}$_*0|d^HeL0Ef24T^ST>~Kq zDeNHZHo*NAMK^R@3Kv2sZPPtBlFz`H25V$(*^t^5#UX$YnA$UXAK!`$hu>=i5 z_kbIOfkHhY2qSM%AgE;y6Ry=D3^>;l1Y*DQ^SV8GO^zFc>#y$`2tgMJzn$O)VSrFi z2*QY)6$omXgMYpTA^RLp5QzQG&+De~njAL>^RDX}2=40eliv+Owop$9!mx4$f?DR_ zyGDc1_iRrPxH@z?uS*8%Y#lmyIf@&EE3fSu2vP8`SBGum-5~T8>Ip#@T&6%!%N$0} z(;)Pj?g;|1?|fd@0Rm^(!OKzHAk3NHH4uW3!VbdL~MCqOe=SXJg$UqzUzeAY?C8AgE;y!>-mKbe!P{ z0|1fg$GfuNQ-48BT(u;X-3 z5Qx2TU$5jr;0#-MIf@&EX(DEFktL#}_km+9Dhn zFjs@nKE)FRVsA8HC>J-fE+E#H(dA^o zVc#qu^QWVsyLqO@-atleE$1^e_TBOoEj}nPwq|j_{?|DO*h|o|AP=OC<9F8q`&mHS zGQ)L0UdRj=q0J?t(EjgKGH?4y8oNV3`^1vB$qbq8Hko&>u;fhu3vHn%SpEV%$S$6I ziD6MEiqKgN?N}*-L-~ukwT+@XUM_-!S0P*-@^3CJ*_?81x3>MmQ#a$S5h|SJQ0_;} zBDak;qL~cWy4iqhDuBURFS~%Hu_s`Z%I<(`4qh-^PGo+(Tx-|)tVIx9tYKOj@#BC< zD%=KR!7*-+@*oIX=C+fj9tBN&Z^%OZ01xWEE>aJ=sK1u)mi?1CF4+@JjPvv`nPDTW zT~CpNnW`&}DOj&5;VE0*!;~+dNRKJsk9Ok{o_iTeSSHm9Zosv1L?2zkjw#Hr zW&#Y&a0||tgaV#QxXiBsNW+dVPxJ z6i%G?-Nll4--$@9C8chXVKrW$ivs@-0X-5t!Rq)ByT4$fe|Jq~&5$wQ-M{^cV0?d$N|vt@o0 zFT`&bgCg7^Ef+hj+Pkat z;05lk(o@#Fal1;^Q`pM6Gs=CYfe@Qaso1J^X4%86)KuzOp*C`_v2h)P?K76`!pgsM zA(X#Gl)oL<#%=&bz@CYxmR{q$nKl)^+QER_62=`}nTN{(Y! z|722HNy(+#cLK7I3eP`lDY?wD`+G&!1y7ZRoH_V-zkjOUI4}uOvVls9>EK- z7djG=8axw4$dbT`Rd4&oLhrkiBE&EVq;lQV<8&v%=_qh?;Jy3^o` z(V>u|o~++EvbM?m0RtSfWjw1H^e1}`hu6YsySacM*5Oi%cJu=7urFI& z5{}>G@BCn~9e;xdIoOU)lcN)RH2B{JI5^%HN3Gh|w7h=-d!lKUQQGgO&OyJoI%QZI zO6^;Gb$Yqg30Oaro`x;QsNaYS^7nH$BXRHhMshkT}$ZO zK7QrUGv|C;*E31^r-R!gsRwRSu0Cc)4z|KSIZ3Wq25X=AAX}h(6Sj1 zz|mJc!LFi+)B=jco{GGZZeovN)Ce4q+?%b5=mwAR0jA^N7O3_P@mIxiVfk#UTJc(i zuN>{d!hS)&C5{zk1V8bPW7WmoA6bf=BxYA#SnjUgTD#sQUWV3Zl=Qs(Ja@t z&^=#PMEMfEop3Q+mcK?tfrbuhroLOVlA}40iZ8CxeJY?O`KLCCYTN?GRS9SwmwAgH zy-xC4nPq?1jMEAAIv@U+9h}-}umlmR1<&QOGHPDdP!@j5ndL-WCPD4gbpx9_)Yqxo z4o4{?A#9*`H@U3lNlOO{gJo^|o= zb8Jpjcet$1Muuc3O?S5?XCQMdV3!XocddJzJB$1E)&-)6k=BvC52mAQUx-NuW72Wl zB9kj?Nhvy8#vOk?kg&n3Kl`|YCMndoV+JnksBbAp+W2_s39O+Z=tC;{IGA7?MG^vZ zcm75T5;)qCJI;1hSW+daZoKQeihg1i>G$hdXzNKiVtf?V@UVe*sWTrCicf)emHHm0hDv9Mggvb~A5WYeL#14Bil5WArbdc@H1%!i!oYOlf@@BOeeY zmidb1bC0-L<`7jB@*A%ymPNwyn`vNqCB2LkJc4VZ5znRT>xd=hm@M;SEY~6nksV`W zc`l(H2v_ElnUb55j@K!g_x2sEZZYwmC%g|P-V@{Tehe=}-B+XoPwJkbct;<$s;hYi z?7ZJvsr0@i<;cwaBPpTf1#gy)`m=bF5IG2Wjc3+X-H$~&`cA4!2AIHJAj7+~}f zZeikflW-eD+%Aa6tqw0l(>EzOaEyiYe8#IkF>pkp{$?Tf)#)JD*Cclho?80*vrTfP zLJmF({bMYK>%#>@HyBFbGkO;Z=}jP4zeq^mNu+D>TyUY1vXIWwq&Z>;y8O9k?0~HJ zMeKuEWvSiM@142c`=iZQoZ;ywya%6Sr@C8;LqWhE^z+V}e!4sFH>c~oRI#Z~%zY_$ z#l~ZF5U7)24mK!&g3m1W;CXFAt zST9D-`d0<}y>M-e*{-p7j0W$<3$c#KpFo)dx znB1O=nYl-e@)>&w>D!6)2SVCMq%Sc^J8D!tUI-*pVx+UEvQmu5@-a`JvGjWe=}4me zvC!T;8MJ$uwCCfgrM6yR(%!BhP!(2cDV=k$a0ORf*_d}Qss@{?RO=>e-BRA14CD*& zB6Oqlc@P?SOW^Shl7u>j+WlpUn71N%{TCu;0f~7bo_nJEGF}J-r;39Jhqf^+{fQrc&>~XspHso_J3JSDSKDDZ$>g_* zWv7W=)bdcJYCcHWG^OlY_uG_x+OBMYF;JL41cv&t2=Hc3S0MDgbT?R@PZ?g?A z#Ig?q8Pr){Ha=-mg?d|!GOon{I*Jikb4L>et|Xzifu3@T3j%7UZ3gOYuJM|x6a9~= z?mNpm4>U&0WtB$_|Da0>iMGJ<;TRh@&T-z8C%dYVO-gSG$!pf`roV4grrmO+qPH|- z(YoEJe8eB$L$*NO{L<*II*KM|Ptc>@@~CH1h$2=1Je_IKCn`AlL|@9L4_J>tB+dNd z&mQ1ddih3pQyM)K?#fZGj0%a>MGAZ4z5+1;AsDKpp)b)6SGKFxDOCBG5;|PDO`b(X z5EL}TT7i#q_sm@S`ie~%9QGnf5lGV^K#KFxqwe}qcF)EUbeaYtLDiaYa61!5Sg~|v zn#2_q@$?w+4JbrPu!{~nX7$vMdgw>lJ=bXB&nV)VODl&%snSn=t>BB=EW+C{hX2n* zTiK$YI2;COP$v@}(iWAFozZxODGLn9d+Va*kQmg`*q|{hT?uT=ASvl=$A)3BV?&SH zO~~8B8hkv{1%eE~i0}mGYm$m!sJLof#= zO#jqvuI1J&|KFtiDT(<^*@VhwiTlI`WJTiKBDGPbFMS7@yRdi?RAA%tEgcGSbV%ShN3pUktT!n@LiU_)BsZ-Gi&9O!KN#~w= zs65B=EX-&JLgl%5*iil@XmPnl%6*jT$L7+OOgg(v-KV00lnJB(Xnkj)JtiVhOQ@|{TP#Vp}ch%jk9K*42zf`9PFBUR1y;f1)CV*PyN`+rl zVnsxXMkGCglTs6I7kOpoQvJqTlv{L;)N*F5@~4(F2pU|;9r;=>ly^F@@i(`Cq#*6Wl^^9YDSC6n5AK5n9AH+^zjby%7 zYuxV$Cc}lHDwNnJsA+P_=O%BPh-Ru2h*)DMg2vcvMisjyuBJS`3%_*LSpTA)llxKX(D(6D2JsFXe(~J#A?)UC7;E zvCjz2=nD8@CV|&kT(yWLa${!K@jBc3I?eSu$ND$OeiU0ttjI`?+Hw&}c^>$Od1grv33?5I~5Hk~tFuSw@p@&B-7 z@*aV3B!x}hYRP4XQO&eAOKL)5_u{X~KiQiDlTA8>!`cXGA-Py8$7*~R&3NW;(`VRv zKn_}iwa7Xs&i>SDuJz;AceKrc*s78cE9?7@isqRQCjLLY3m(2nZRY;;=}*5Ew{*lGhO_V9$P! zVr^?{EQC@`LP4xD_<-alOp8xL6^Q{ynlQOPYjR;F69XQg{)e}qihk=OGBXh?%2cee znaH`spK@0fVXD%S#+0J{l`T`)ib&H0-}7Sx=2eFXm>P>uVq+2l(Hwt}g%p#IVKqYj z>NYwc*JdZ_tph}?C9(eB6-uUAT!cROPDH38bx|%f4p_mEiYpOqru8x5Nn}nMogpF` z)=c=32)t7L^x9IGc%-2sr$%+1sZerF<O405blF=B@l=b3v z(^AEDx?J`hE#)#yiS1b~VIEEfgjP!~8u^mPQi={__#&!#_eZVH@MR=w9WFJE z{0LQ&3Z9tLcif!$G3=xwh_%}OH|mZ=`=lO<)A@mf_?!PuG>ifgk_*9E9% zfh(=DG>t~*EF={xNSv)Nzq_29x?HfY#zaQlE%aN^n=IZ3!Z7+M*F`k-pBr? zH{Jxo-W2kh(2mrgbJXsE2yIR*sa-~a3F|ZmI?$v579>*~!ERd@ zj0D}%RXU#J3^k*()fBI|hJ!3I$LN|`8(dB@c)cx9p*sYtQ`-?B7|}>wX0j4`jHQoP zt;Q7u332{!y z84QG9l+H#;g|(cT*ts*M)>V9sZe(~dQ4S1Q83;86N{uYUtN20ba{5UrI(etrTpD8| zEw>O%6<@$Y7v^HtDhK9Pg^q4DI6w}FO{G={P*XU{is&=*E{*1}Co?T)@59+dDs0M6 z1qpOYQ`ZC{h+KzDDq_~5%ya{rvPu`h{G0fz`(PNlf3!q=Jkqe4!7#(PMx+(prqFuh z3bG;P(;|T^eo5SzScCBxACinhi3D;WIn|fyKnSaUPlZnQvWn1xV6%{7qN+);A)H>w zL_r4qHciGXF@QyVbcdN=5AThkg~f#?RsS(hX--`oK;?%AS;ct}qt=G9+X)oWTHY#k z5@zdXj4`br7H7goiNw)v~fJMji; zx+w9JF~X(WyJeQ&$M7k&BAIKZ>{i_0 zi{@XkSc#aUm5P1mhs+V!(Uf9VMIj;q3~#fB*J+NEhp{>8{-9obj`Z*))b;SJCyjvy z0Afy~+YPCMyi@5aZQ*g2VN`mTH|!aNUQJ&=VIGf z3hYxaEU+W;)gg?CbqQR+>5SrVG``BSa`Ilm6zMvBNG=+c3m;Y2mJotu(RB9AM7lyx zH3P1(=s5Fcw7+Ja>Zp;KNeUX&q75ah<52?YU?F;E>g^D?0SZYW>(weNV$Dc9+TT=! zK^}DnC&3+U0gSOF24suRZA%BRcJo-5%L?cXAiBb!3VIwpv?i+sU4rqwJbR;nhG6S%ppeVooe;?Q?K*tyfcwU?=i^0wecICi-NPDs%3TF>1*^N z+aJV~qNv;HiseEXK7Fj>qy-yx@pLYiW$-L&!q7cl^bw z1xq0^@^yq;9&FsY%_t;7Z^($S?7yMfCy2H6zoX?^ol3I1zG^~JjoY0%X!Pe zT+Z5xIxpw@2D{7oaS$-Q-*9c?RwI<3czQJ>@(dExAH<0ZuEe#`f#<4zr}nm*{~3T#5TUQ6 zz{GR}36?eqw^%tx)`n%sc-`VOl;sE73?&(N6NFT9Bq}aa>e>8&m9O3HZq5_x+TCct zoX*U+`fvgYCt9m5j|&de@SFvB)aZ&@LzonHK8}8sWHA1dPKJ-2k4b#*fHR!12XDl4 zflxbWCqN)d>I^Bmlrq8ikqu__RyPP|3H5{^TydBJVK@QfuT=LBMO!!rzZiUye1-Dt)Wxgz}@yafbs;8`1u0_efTx5@+0HO8OpXK4yM zX~H2MH{sNjYmw1JuCC2xHQoz^R(uzD92^m+t7O%PxhcOb+J1$VXO36%8%h75@fg^t z{WFgvlgPKyBj0ZWEIP*F_moGz)k);L(<9$)N#wiEBj4#}zIZLH{%{SDO*?Qb$EVe* zYafb%r|-F`HAYk4#L=z)u|FHDwNB-dwOXxI_H>(r2BNwwN~9?+X}03m8SWZ;Uvkuq zdFVn>$jYjL55$+zAJKpsB;#8AacYp491pVlu}p7lEm5^-K%}Y9R{ObIgZKXA!eGPOsaa*hTUN^oLgpfVWZe>z5QFQC*Y~<8hS7 zM4D*hQ6>k98bP~70J`Bobcb zwZo};RKoG`Ucj*TdtzTmORy7qDIL(r5p?-%AMF^Z!cC*Xw#J!sX``@1{%0IzO-4o~ zX>2@@%Ur=Zohu$4+EWD~=pUD7gKq|1hyBl#wxotA9???zNou4wHjyAQ_Q|h3*HCPX z4j(Ey2yU+y1`*|qG6vkZ3m>|BHY3{lqoOKp0v+RXJf-C}p<5BP4|3hTsJD5YR=hvc z3l|p3FLsrdt^lf70kPf~#wLU>Fvdcdh_3_?25H2JTLpDo__yr?IL{*9k%E(OZQOz9 zQuvqRsb#R;iWgG&rwB7O+5i?9XoM#R5D;yGiY>gMHCAB|Fx9cb42~62`~|f^TE;Ei z$o}o2ib2_IDAsUc++uVTAU5ZLy8C?LhO`4|v@$8QLM@-$$n%GGzEAJ{NALw(3*U=8 z_#SEJ+xd|FglzYa{oB2)CZA7!!aFn*g>j=3LZL1gg6Xmjlt)1-UMbDu=rWR<>e$Ie z-@^UrEriD*DXIuQS^U681Yk>AGUs7!C>~)m6+PZhJ>Gj>mU;}I+Fg1c7#_$A$PbTviDDIoF9UJ{VF9N&RKCQCq~9T6E4%~1JQV+krp zVuroM6`}+=>v@$$q+k@TjUb*&g`n2UQX!i0LMnug#MlE8XZN#~N-jAfhqW3h^2G({ z5^MQ=;IfRySJG}$_uUxF^Idjp{dG@9F1ePUh^la56qnNS>j6u!#ocZ`lpJ;As$I!s zJX-#k2GsX97Hr2ff}@^~PL2l^wr=@(+!@n=NRxThf9%%azkQR!$JpE}ISrQ6Pf~-QX_m^N!ApB2g;Ek4jPlUn%;cyWjXm9EfTC6X#~`kx z2Yif&2H)?#6B-av)qfP41qJj2BM|fy(s+&5R-`KRbqg?=(M%7YNi`_z8X?-{q zGyd_dIUsLQ4cQ_0qCuvFkxC9?Qy+^PWo{;Wn{O+knnZdOeWJP`-Aa#i2Y~i$rSIs& z=madIk!e=>F@ftbi%B|=?2TdWH)BhG+l6!+h|JHyZ_C6;1xX;6K~rcvWeKq&fM)F? z*tjpBv>kIGwZlGg_^;gnWfxvv!}kmQ)C~Iq3;j{~EvdoEoa3&!3;h!uvRX(yCq}Ra z&dD7*7CWoF@>X-hN}KvI-165j$@;M$FoW zoz*48t|3M=C}=V;%E0NJbiY#w0=z756#ISlVL}u$Z@HenO6za<1D%?%zP-CF+r|tt zZCw@In|^F6ZRrtO@z#zIF0dc4s7Gxuwg{}kzr_KNwXjezwYfLL@|C&cG8iSUk>by> zws8v=R)~TGq232BqcKYz{UOua@i|J%CR|jezm>Qv@DfjG`z(fGO{JT9)CZCEt=~f5 z{J7zO#?b1_rT))xq{2b;G}J((M4OJ#_MYv$oVF>I8DQo-^QLX+7<-y_SuYp( z?QAs%Ui(|x=7TbCe#!88oV2 zDq7r^M9C>+-g2FoGX~`sJA@%~MtO*%pzZvobFv7d;-DPX;o>E8o){WWB{oJJ#RgNN zKSLr<41GOq?g2x-ENdG;Gpv#Hlj_~!(jLfY&dz$|Ioc!7TN$0_8RU`Yp#*s{J@U*> zkmu*+ZhekUkmqxcJlzxIdCMcu`W~HQ@Ty0i`>lDkBI#4Y2H)qgWT8lOB0Z)ZSrr8wo_Jm{W+@9mt?iN$`@PvnYn{+zy%$q+Tec%Z3Xpxf_q=ni?{x??n;qo-eyW+*dR7>v~CxSmSCj|Og6ndjY3b| z@ODXTMFvm+i%4+|40s7gcX&}oC4i|YK9DFOH-TP><*Mu@I!csz`rw`GAos>dA?ltEjl&VU06(TiBFLD2)QXm7P$2)xSm@R42t&E`F zNJfXIA(MrbrWGZu6fJ|y&kEh&k7A^%1ChBfc5Lwo>!@+988MEW#}Q*SdGaKIPAPe< zKFxyo0R@Y+h^PyZYEI=Nvq1_7&POic61b&)iyvH;;PN;8RPzqzMj~Wd=Q&f@Iu#eF zg%MgL@23>1i|dU8yckUa1pr7K6ivYF2#+o4ScmGj$~w@{|nmVD@xWQP383ON>{^LDX`v3SF3#ga-=_xN;dw?mgYOFJ^ zavC07zG{iF`yBWqOuM3?s7m8X{UtsjAk_BoVz08ly)Z*GW7tbX^?l?VhDPBl~ z93Knh4iP$6BHK`7AQgQmAL7mv2|n}a2AQ4@6NzQFSt7c z?LV)J4U2qG+BQ+n!zuD<4aUk#sXTcG3C7P|?Js7NgR=LdtE}{9fSzqtfY7TUdigz> zUJVqkR`llal!%>Pp_N_^=ox4coC~jwOLpOfPqYyk?;DI^=zXyBfUi!`Yat!$XMWgW z(VQt;iyM*}Swc0tZV;%zDUSK2SIVnFTpK@b{L-?-vK?&k-!AyQiO7qrJmzU%CLH>G z@H0%BIFJ%&f9#&4A8S%2heaOMR$kVH4U^Lu6I1#dL0hDM_(QAovic&k>}F!iV+;De zNv}XCBM_dD5eQMQYC;x%v+$dZ-)#H>FLY+Y6LRsJi{Ih+9gbf}6v)S~55GSA2Jjoe zZy|mQ@jDH_)9^b3zccVV3%|4QI~TumF&91`YqjQ!6!t0__{rt2!7DbfME@XaEk7V( z6s9o(!{M@``_IF6RZ@(snXUKFa2>D_?Ei;1Z%E03`qINsXOHA;&>FV81c34`9|3C3 z+@9AF!FnJ5P+87C)ID2YEEKgzKzRaHZ~MNvyWPGY;4eO*aqPst_X2q{;K7uw_>g@M z7pmEHLrBU<-q}CFLfUa{?EQh&LfWAe{@d;Qr5_WJM#4A z8JnXzH2A+1&A&`3+7%x*B27YBZO5=ipxfX#pngi*K(cG@X|-dd5iZ6DsEidY-4WdW zI)q?wsozK~Eit;^NWR8q+vVGwLZB&Y>O=}0WTaPYWVMZP%5jiQ4(bSNK>}}m9k7Vf z<3>8g#wN;+@3bgX&DgLUfWUw9XYr;s<5aP?)&ww*Tc8E{5K&sWIt z0EZMsrWD%uIl!RIb>uG0(aMUi*5Sid+qfVO3H!I<`2WbB|E61neK&9G1@q*?VvO+A zZGj8l#9TmAsec;^WLu9Lp@AKRZQoi^p!(g25^**o$Q4z+eY|ckCQ@Vr&&5P5ntYJNkd@*-bbL#5k9jZSxnVt( z;{-@+U+@zT@6`yuA@gbkp5(V1%}(IHJO843rkQ{myw@0Igb1qna2l_*q8wR@!tVTw zM0?crfvRT85nn$}M*$5cz76HgZ7}U>1maw?Fw{4h7hHBgI4cIXlTa$HDss58jl<$-C?eH}LISEqb#-dGxPAtA$HhdQNL# zGu(DL-Rz?#F*;g;x=}a@c^cK1(2L{&aC}SvKUPG!$GVtbhRY=>_s%XMyNtXz1If8N z#wHX9{TK*s_%85tAY4vaFdZoqyAdKAh?G-u9sh$x1R@cBB9!ZbED#4!7M@NXgVURh zX8NG7wOaPJc5p+;}ej-$F>=R8}rLxWn&To*2<6Bqe1^8`74F;s5gQA7D= z`~~F{`iK%A9vNOtkH~w4_iPIDd-}@B-T$5o?MnGRwRAb9>2c#)Oa4)2TGQRA(;(U7 z^w{3f5hEQcdxuWTw2{laak&y95H9rLk_6;v8q0;QIX!Hqhv7o>>eZ#shcg%{Y37}9 zicwpJK%h3`^;f=|xuxf2@S!z<+R=YsQ&#?unJ?q6Hc&fs``y1?_1zU?a2E~Kelv2w zd858R<#F7>BWgyzK<$Q`wmiFFa-UNJBcKU7@a8*^-+#`rLvNjxe!sj!)zkS31GTf4 zkNx@S_e=MecQ9f7Zd#!B+5>LvyU%}Grpr4cppF=#0CMU|HaXH|Ng!PIZ$4I(+_sz% z#Er6Cj%cdSLD7*ze-7}9aEQ#(D1*a~xa1IH4cOFYtE6R;wDSLDP5_i zP;zZh%C%BMNemh$ij)#Qd~z?>FhgWCnTC0KdI-h1kNe1NP)wt{G=tJbGL#I$$%I@Y z#QfiDt-a56pYuGUKCj>R-|NM5W}m&+ZNJxAd+)Q)K0cl_`bdo@#~JYKmz?MEif3Dg z=Qwf_TJ?mUv@yoOQ>xH(NzOxZ=~<)FlbiBy#mduX$q{gR{6@MwlARO?$ zUJg&{G^HMO8e!7YX)UBGVUofrZnGb>Oqr+Fb3X0n01-Q&Sc-Kfy^G?yGq)loI|JzEfhk_P}LJcPmro8cUaMx>d9DXtr{g~rL|h~ zv&SJgJZ`yR7OPl1)z3J3L4Uq!Lf zTBX^nv>!w$rhN~<3;5ofKiT*|PetavDN+^cd3c8Sfw(74fNh>y&y$k#)OvPwc)IhR zIVGsW|BQKW`DWIWz*zx3qw?O?q3=l5Qrs&*RgNnmD8+pz#cHjJlC#oUo$IiIZ%N(@adYxL3w1oc zx0kd>dD6W1;}2|rGE@br)Kje1>J@1p#Y$^6$!4YffbkJM{sUp#4>AxFXt2`H;fbD# z%zJI6Dq(W0EAN@Zv-Wp4PpxOw_iQK9GmNL!6Q72paOCm>#tMWt1W)aIx!@8wGS8niD*H%8^Xfl{^1 z%_?McR)9JnDJfQK)iOCN-FxfnJPyI>A!K-43|6&Z=$=Di!F>Qqz(DVc$p zX9-~8Vx_g}m7JBIgb(%_*H~=+cQ!t#(^f>x_ohizsORAsk`Kf^ zjd}016<9i&}qWv9&ZGYGOd2w={ zTF*W(!BROeQM4(-%BOMYOUUs_ED^~R#R+N+7B2X(c?c54*1?l z4o~Vd)7(qvgN{;_FzL>F<^jC+cQ;S1=W={b4t63v!+2^vpO&gFKVYnwBU)76J5LB9 z{3OkLJ)|nY>6!1D7YR%}wVvPNLwnFOil^2ShZ;~-@O1KCD#=KPmRqGgB0$o-ccxS= zbF(s!m%J%fYt=3}E3MTx8$1rd=^T( zS!u1>+N`u6uwv%!(tZFC1bnaRD;po>P(3Q|Jt9@1o`AspT?W0&}t)|(mv>z}&LgplD{0G7T-#g9WNu3sz_cEj^VbY!V zLh^xur`Gf1&)H6-XBbbd=ZjL+i8b>3>j0X zaju)E*7L{ptY;KYt>xmG%SXmU<4- z`C$1v8z1G6IV$fxEmfhOho`yUqVnE($$4r$dpJDZc`w@cfWUz7;aypZiv-RJ=oyvw z=1A2N$M-m{g^Veb@40zu-@73>PpxN;&C|(y=0NIAM!FkYNP9x*0;m_2_dffSEm4Z9 z1*pn#CBn@?Qrui?^{BK*c_=Hb)%6Z5atNO9nM0U28ELJKl=c*)tI=L123!W8?=_dI zWw=+YSw*z}&%vo0Z0SE{3-Y|#f0!KYu2A}VB zld6PCcisybi$&zU&ueTw!+2^vXG&F%W5@}7A>;Y~&wrBkFmB0$o-ccD}TbR1S88KMAnK+@}b`zL3m zwfb!h8-Q39gAAt!^K`+RjI>s7Nc&o}uRwbhQEE;!+if!C@6LXoo1y)Kd4= zX~|h>tuky@+7DPUbEwq52M`2&@8gebe3V1IsJ!>0RE2sTo*|f2zUStt^}IMaPpxMk zhv&F@NUEOan_;Q_0C15@*Lv=ct65LnN}Bf;OVtv`_c*SZ1Gb5$)^mJvo?6c#HcuxR zrQx69DKt3*&?pX}QQB786G|62D8*&)`QFzbvL#A!uK-meVi~)6t!AaQdPdr#Jd~Bz z>K2C;`5x!J5H}}>uu#Xd&UuWqM|o&6(g8DFs+OTDNC~S5H@8`7t(LE1t3G71?o6`&46 zh}ZX~Nqdwh&3j{{Dxl-AGLM(o_iR>LtAmrX(pvqqoDD#%iXkzl2lFt=ocHEQ`&zWG zK>Mh?cb`<9>Skr0fq7YJt%fCMrM2p2v(kRRilv@|bin-l0~;UZP%kR)&6KK8&%-kW zlVdqe8K3W6nVhHAGt1%W&U@w#H02v?r7zxJ_c-sF(*rw%g*u+RccQdMdD6VMhg2;?RhyN0q~c|z`|9KO*(y=2 zv{o-lRj|^2!1%x@#V|}U5>S zRI^o3o;2@0ELD*hoD^$b6)@+$^OCdDTJ^A5X+L1a%<)V69^r#s!ZjBAwu;pwOqN6S zsJu5vszN;vPqT(5o*I)kBth83M zqzSUMr`B`BB9B8bN<%V4 z0c3`!d-LAY(jMhW^WM!;70_|=o_QQ$&U<~6v(j3%aaa{YVonbsDHivg#YgRXA1q|6 z)Z$(R+N+3y%iucaQ&JU)!O43OV@{Bi;jQkgi<7g`TJ^D6X+L1a%r-RTAg$hy3s^nE zWI5!C%6p5YD%A7v4Dkas<^*Be-?g6Olk?Pi4sm$8^IqyXNbA{L2oX4`8>8~xy7_F9 z636#Au9>5#_B{}`{ax#MpAd@Tsr4Lf^K|l_c|hS!Mq0gY(wk>UidRL!~{+ljgmyQnd_K zK}uMK1TWloSZS@koy%5Zn z>$yjAo?6dMZ+RSoQ5rE2ggbll-iy+n+`Jt3RA|9v@cq4sQWel~@}4=ToAcfY$ysTw zIykI~Ar+^GRFaVf=bB2k3b}a&+DGNR7o_S`RJB=|M}g+~-j&H&X|1wsR@x6D6w`h{ z`0&s7exJ?i;a1YTw^XV^JrB=l-*fZSm@G`rQ|md>;pxtM=7?s>LAo2$g%E+0x-ly6 zZKz?N~em`KWM34W--^bOXp=(X)J|RRgrW$&xu{AD(^S#kh6^PN#7?@}D zIM>Zn>)9zePp#*#Gg(hUX#vDzltv5$;m+Q?H&fb^o0sEWRNjk8)iO6L^LWXe_XZ|s zrM246VO0#NI6at$EZ$_KeQ*8iY?WGwT7mW|qTn((-+NuEPQ^W&RT}<<3~xcw>w7mO zXQj2uu~}(9V8zVbv>y;Y{CThbHC7L|lIFeDQWffXc$$YsCY~CT@#H+Uo}(O|>`iK4 zOGvJjD#mrrJ%kW}le#e~?`?XOO;Y0c9>+DaD@5hJr-V=xPp#)To2QeE%!$^Uj5JF7 zNP9x*0tcnI4CcMoQneKK3Q(2fN=Syl{os6WS-I^HpsyVQmkukf)ss@S6!*v>IHH84 zSlkchy^Ey1g?rU#AC>oxma1iLRv`li4=aty-(O*^qF8CImP%Ey(tg1B2pNlwr6j<* z1$?j2;YpT^%6lWFDq&Ix{@e3f(v$PldTw~x?+1((^Q1xh0mT@9-g{UGQH-gEo>6&k ztW*VJJb5o9zbk)t^VI#>H91eM=eCzvPeN&dMrkU^Nc-L#X-{rmj`mS`?;fcN=s2uG zk`Y94mQ=M?XC`N*wK~XQRSc;(J(!0N=DhdKi)@uzh*5#|QF-qzsX7%^ZC2({pqG`_ zYJ755TB{*8EA0mnikWhd?zHAYh%iZ=rZ9=i;5lXMUSLZ=JrBp9xt>CSuRl%RbN2n_gMCm}@Oq;8DLd%w=``+HPeGvr#W=LB zBlE!8ocFS%J)v}ggHl{N$w=>fY%f(yajyVXIhKW>6!(L9@1y5!hX8%;5V&+$X{}~R z)l%Fehv2*y;^w#?%zIZzdkgof(LO5g9WPbO+^kYbvAVD7%UG)@R$8moQWdPUA22?m z$A2Jf`+@eoxWkhy8I|`&N!1b`Pjh(I{_f_f_1q&lPp#*s=lp)aSV_ab;7DHk9{IaJ z?>!}i$lt4>XH?!BCslzMPu`0j=el`nJ-a98sr77P^K_DtInjD2VY(X^Kg)I^H!p{J zQF-q{sS4;gtU^X-1*ij(V2PQt*6N((th81~IIN06hSNjH@D}%j&-Z?K#&+`xw2#Vr zZ%fswAY-#K&l1deuP`|)t<^}y%5~1^c>A2w_>^}j>&V~q2{^dROfCW_>6}vMywiA- z6*)aO({anO_w4rSOjY}DMK92pPLcMUyPAHNWC3+TsvNVb&PzR5j(08O6JOKPi_WF+ z>pQOamJ)sHE}g%fqfefu?~u8VkCo3kERf?E=uFgtTKJ-zV|(x-I+I(zN?(DmVb!GH zu^czSN!O##=g^lL?Y|R4M)98sIwG5~1_FF~@i7na$-vb(*qE!hkIHRDftILLF?aAF zCICJBntl()Ceexce9Y~QLr_vtSUUl7sblw>p`;dH;3%MG`s;Pngwyh1B7yU>`ApuY zC{oduQ=wdo>IB3P@#&TpfBb_={P@&b5f4Q8L$f%Vn@ZGa#ol9mx7?3bg^P1sUt}4F zo+!ov$OZmhNaU4PfKHnFc$PkfIDu@+2V7C0D6mig2Vpm-kD$h~r$InnDjze-Yk?w= zrxUSo3kP_;{UobQ)oO`)0Z~BDN=qtIJyL+rlg`7Ruwj)oXDX|UR$AQxyPBACBqCf@ z_Ec(6cO+4x(H$Kq++>BiO0@cj${SeO#~Qy25z{hqq9!2Zs|ODHgQK<;$z0R7D`ctQ`@-+$nC zRrY4ew1xSb({kH@a7{cdmc1#Sy{T>>{bl+V0X{|0()T3-e2Bm|f?VnmG-|_hTrG)?S_X38yg~-rHlDm-!DPRH%h}w+b+8F7)nGZ+DSK#=J z^IBlB1-?*AAMi*Fpe`rLSfeb}vR@3}4Ed_tg`{)9jg zJ42%B6VrE2^L#-d)@rK#0Ri}r_tg2IVc)7d;lZKOiu~{;XsjzW7BkZ+K07 zpQ*T{j|Yf!Iwx0IA8f<-zdmt39RML+Uk;d$R-P{hw1SwaemNk68mIK-fb|f9Dto>h zaQfd;xFoAhnovsTUsP)A{aoVjagH0*yrcKdXL82_w1M|%OY44a*!KZiHmrT{`vBF5 zx%Ss|C``fY@@m7s571F%SXAK*TZ2B3uN5AOE~V_7z(cYOG=6qYEd%z~4vtX0#8 zQfqdpowZuL9g?J$-^I>jC#i{>7BHD4-!-6<|CwLm+#L9ORt}E+rwbe+Kbn53_}c@Z zlvdXnQL;RaBl+$d~vi$XvSF{Ki%8rbnxqPK@C1BJg9s5VtT; zcclIEcQS%SNh{kTX_4})k-HpeYq&-=M*Tw8o|ziSDruhzC#$5LsL9TWXD@Xhiti#j zCq5j*#W{|&gSZjkvks$3l6GBu_)>g7(~P64=ECiX+z4KVn803!m;fZWVnPPjK$j`9_G+e)tdh3wS2BW;tdjO!t|0)U z2xdQ^aFGRW;bkt|(su;d%McUT%McUjD_st5ujd*FHNY*AO*a6{A*-bAA5KG}C2dhSStaeonyd-G==d%yj}I9atFi&bG$9*8cw_=ZhkLw$SP^ahm%#( zo}a9(q~ZOk>CcxxJiIb@Zz%YGmu7|AMWU*H-}U^Lm* z35-hG8@UmX5E^gK@{uKZ{I+$-Drq}~lU36G{XOXeX;ok}xq}lJm9*8|XhTH2eU@v8 zJ5U&humNcuvP#JidK|YdG=NG*}A6+snhrDrvJdS>Tr9t;u--FmJqV%Z=b=>%zvjKYXWmPpDbgXUkg!WQStaep zjS2}W-kL@=PGD5h&g4eMz^KLv_i_z{8b#JLv~$QRY0nQQtEBCx$pW`DzBSp_35-hG zX50u}78-9iSY!l9tH_#+;E+|)zQT=+WRKaSbQlnvf8P zw~fNdDrrCemZSw)6&OvS#tDqdwllbqF)%756mtzH-kOq*Lsr>#SU6cFZBI>B#amP6 z4aD1R-;j!kV2BCk^@LBk2E0s>HAOIotdjPbaI#9;LQNI`3tL%o0;96+>6&b4ygiI- zpvx3lQv`F!DrtZJS{WfoR!RF2*AReFyftOsK)fyGMsNq%);zwwjcWi2D&Crsjzd;S zJ20HAlD4ZRs{*4b)Hs1r+4koRWP}Y7@pc8*aN@0LRO66U(motcR!MuaCJTTipZF_j z2XLdPczXcXKm=1{NgjXF3B=p)zak?T$tr2z=NhR7MkVe2+{hRhRZPhBku}*i5O0qU zC#$60SCdua+YsD(^@Jr{L)?L!m$>C(jLT(qT+26A6XL;9I{H<<)0}etOzU%D`{Wi8ZZI? zMuE{Z{BQ!Jl6D+70uo?b^ZM-wuHnR6Q>bysDrxr*C#$5bUq||YtO|^#qyvDdz^J5s zj~iJL@wSX>h&#|=$>h8aStaca;bfJxXKJ!4Fj7OmI|SnGKHMlO-u}6ki~uiFWJBCR zEek7Y-{D3^vP#;gG+7mIO-aWIjLNpxXtJU4b`aMxtEAoXsX~GZ zj8yEmtrHlPve(W9J0!`uW}CG8h$$Os^-0;4H{1>)_C+{hRhRZN)7HJo^B%4H5&W!vH5WRc9vP#+_O;*L*ka2={{dNd9ii)>K za1C^sB5TTJP8e6x{;`^jU?i)g{g`VAz$o6DLX8s`m2IEoM#jLXkWj!ifCLq9O+!0} ztdjP$aI#9;gEd(dZ>gcb%bdWdr2X|nGJ+KmZ&z^*1V%;HG^%mPDrp}LC#$3#ugR)- zYjR#EFe+(J=0;KRwzH3{Nm_@jlJ>_{3JJk5uB2VYHDCl4Z>iXCTPH9oX-l|~F)%75 z+{iWHWs0mRFgj$Fv?qjStae;TmxiPybVd{ z-sfd^X|kd5_A0L7#M|gFuB1IWoUD?zy(X&yV@N{x#@pKE${p5)t>4mj1UN-1vZfRn zh_|tDvP#;^HCYuHNlm|(Ie}3j;Ye;26>r;e4Ro0zYf3r}S!LU`ACQVhvP#<7Ttfgx zBSupgcLJl5b`m#=inkYW4JY1)j1$y0GbQce;bfJxyJ)g1-kOZy1V$z8nq>+J!N8~@ z*i5bgX%$%$z#Otl+6m!gm9*z;vMB{dC2cougf3ehww}<8YrxACSyN01#M_li6%vAE zm9(#L4Uh%El281Vw6}00AOSJK9B)T*4JY230%IWF9vDtmN!v)1Rq@soYMj8Rq+R+x z8NnDB6%uA}4RHq=ESa3wA*+y(7fx15J4};R@z#{f05EU7-A|K+ZO!Yq+ukF6&}E9O z$$1^JO4=%J1S15=Druk5WC1Wjf@xIa1V&}svD^rwn$UQAI@bUa6j|ct4~!03CGDQ! zWR8BSJ7J5ZAaZYkbI z2S#Pv-MJCG49;s_zx}zIjNrsuQ$lybxU%hBZe%2@q^0i&xYrX*(mH`rNqZSL0uo?b z^LoMnAK4JxBB9fEbR}(iI9Vm__f<+-0E{O7)X)Gh@AI+>ZUiL2w&wNQ`?&_ZOp!Gq zArNmb3@59kJzkRqz{ty}*e|UU7?o{z=0@l;IIlV0T1y;vAhM5x^neVrQ_$tr2@ z(PUM;HF=p67?rgD;YLyM_86|=#M=6Lpg0#WF zsItQpuHnSnka?LRt89CAI9VlarX~x3QI~}zbno~!jT=S9+x3eT5)|2xd6^=sqfU<^s<-grBd8%4$29$W)mrpTI7WFX%D^){(!B&($Tglh=EDBhZKnG+Zl zZlC5x#=xkMa68v<;%&(A!#lnm98OkAd#I3gziBrLFQAR8$GdQY@J^mw(u=S0T>f(; z?x;8I;!URZ+}v|v>^)VBU*hw$byemUcYQDT-H(Q&iC!almrwn5u)IDfuM^@}i7g00 zIllLi4;-Oi)NI(X5?N#A-N=K3XG**clY$LiNX{Bd2TJ_c{v$D@2VVzIlh|}NzrRYS zNpKY*F2@B_AZT#2s;sfpTe$WfB~h4Pk)_X(I391d`_7TbqBc~Dq{c^20I7I;e+APN z7Q=;w;T#F5;FTIp?L#Dv(o)BVj770?g2a%q#?uSlIE!Blbsrxw5^uAX;ceDZ|C_8; z*$W_dT257VwfbG5erxzQk-Y#)ku;?+^f(}EC%mTLIF>zA7Zuj-1oQI=65yb!VvqVe z3)r62%;`iS17+F%rS7vM3Qp&~L4DS;)UG48+Y{leD!ZJ7s-wOuMeN4G5dgJZh}} zsu#bfzne4Nx~9CLJSRS!UbEi4OE)miZEAfnRC|!7?5FzI`AoHAWk(V%-){KrhF`oQPvAQh(&Y5PZx(*D@SB6*9Q+Q!?~wS=k+C5og@^ZSmUGVJZtmkc zn}zhMK|im+tKv{*@B*KX)`kD!p6QWOn7<(X#)Cy{a&LZpyyJ7+`@4c0jnW_F< zi^8o<^SaP=PMmt0ezQ8p@OF51&Afdo{O<-fwAeKt7EBMzk7op3W$@|^8(l}**| zShv(}|II%~MIR;o#xu3_OS`+JSN?k&Siyww-`JWHDny1wg*7fp)Z&215HgCJ122vt$i z7$vRJ-)z<4vREq+TGW_J8=|#*v|%N*1VH9nz16$s6?tZl=+!k2=y2!GmP zUg7z`s@7--J%(H9Z|qu3{(wKceR!?SIwe=QRrvd}+t$B1HtOsKV@CSGp934{14Ph1 zLFuvEf<90t6#YJ6z@s($EHA1ixB1x+*S)A32=ca{7~}fILe(CZ9X%KwGYVo`rylC< z7(*v~my?9N2UTiZ_R%1qia1bQe+AG*B~M(RW>eK&8#*p~W|)GN8dcs5+9Lh02fL+L zas4u|lDPgq8JFc?V3rdyGMj%&06KlhVbIf|BeSZZtR0Wcb_>Ms4_k2mYwYe0i$=xo z|$j0_`u-E>;(`IblM#ab8N@RY{scFGP~&Re>*Z; zzxLO#k=ftbo*s-EnYB5SJI)@NH3L-)!T!z2>`riv_TVRmC?CiopGsuDG*J6MaaXqw z81q86WaK>_EF9XO1`f6de-B6Vd+@3OT4=jt-HE|HGW+Tbuk=6WXz7nU$SwWt`<#mGlY@1EQ%B)<6tdB1WTVl- z)jON$c|yan+;@_DB!PgK%h4%*_0Gcw%L|KG#%rN;%Jlyqcu^*{&9odQ_y;Kg!A5-e}%9}plK z%S6z|a`E*+EZ-{>Q^E36IbJN^`*(6I_X7FoF~wk^+OhHshzcy9a{|y%gKMjICpQ|5 zSYCZ>67n7_3y1c-Tj_uduwQS};Q< zUsAC*i|}zyY$2`W7#3oF>lf(lq;UJ^WCw2D18^JOlUNfQZg2dS9B#uwK03NxD^xpHo&!+< zxADhnxQ*D$-C;(!{dRN`@*cPehxU7dgAKR0fN4M6N^Po1;r8l@%2|~3bNgxO)An>r z|F7WI5puZByw<`XG=?uzWQaf^1H<~Q9=IhN7(Q@RK!9kt@xZWvIuePa-<3hQWeder z;5Om}FWgSvk{oW|WG2Cbl_pd>R$d@*Yjuq7uy6NpcbE}wcP1n6ftzq>KclY;Zi9en zKiqoSRCN!BPI6AnQgBn!pAOoROz-L7mi}MC?fKq;-cFiKUp<}$Vz>pzZc`;f=;)RK zlSd`fZb1Q};YI}Q=(cop5N>OFr5xS9J&rWd4;$M_PgYsGJ-S6d#P_b|jt6OPWHYQ2 z6BT>O`4)Nd;9qzeh)saW9tpOwnGr-rVy&_Q+{*D3xy(I_m$e++qP;HkUjc2^z@IDd z?6fQ`Z)djt#$kAjpzg~cPd#Z(pR|&y(_;ecxTJ4*@Yh)|O~$T=e%ZA*4CZ?Y{lyM! zj^VGcl%W{1@EP$lsSla=RHiK-(BhI9mxu@}G@}49;--mRF2ri_HI;G{(`FgsMT$*j z9qn0vGgnyny)AKW_^VfZ^<__9NqCnE`#~9eR@piQbL5WumxN zh}7bYdC<335~x@TJlb_B<$rp7PEQ7(-sV9)mxG>zjCl*tbLghQ<-Xpl%3jBhc!)YA zvxXk)2IVp6#qu;-xum6wf)X~tU|iz!X|yTj<9a#=TJBC&76zBLIJ(#`+uR;3TTa;C z1fN`>SwjK|?P5lite>DSC>d2*yKMahR`ITEoGo1R4hX&QWONkIWAZN^*#ctThfF(z znAhRlLSg|6!dVb0GB`f%)H^FXXSbiLM9@{yg0k&D~Y}ow3CW@c^tuK~u zz~>6ucSPfP2eGC4e|+T5X;vnVjp9e~^DYO&`F-&}=5Hl%gRkse7~YO=XKO}X)Qwbg ztA(Iv9nx2I&2iE-mw};lO}nK!f&s-BS=MXUGGO7#;( z^|3v)>U+0Irh0)}^-0rh)o1o*)o0O9Qq^xdw1KMg?0>XUeeY30)w`rd(dv7YQhk7^ zp4VNgp3yp)>S+L=-RrSww(7HcvFerdlT`Iv4{4z4S=8$}O7)EY230>KHHy}8nM(DO zMfF>b(5iQ7l}z;l5~7n5;;#E_)#n|_s?VpNq^eImICa%&N4spRD^py%To6>fdukM| zlX@%Fb42wChilaj*(I6k?CVf4e8EzL0gmd`Jy`X3=_je`@vf<>4iVETGl;A1_3r-( zs@^v>iq_yGmFj~;_1K|W_1-O$sm{HwRUded-RsM`v+5tvPg2#V9@Ie9vq<$~{ErOY z`@Ep)$9XA6jCQOudb0NRs?%?Md4V=^2lVG%Tw|dO3>Yl;fPtQM{?S9(bXSrxk(qx8 zY z6^1swJj?YNurE(A^&WQLFm1_!0Rc?oNgk$wlyc%MTv4xGF*1ncT%o8Jv`D3#B$GV6 zK~W2e^d<#O(&(3`syvV5nctH6RBnCRccrtZIepSJs!Q966WJ>U(#(9J45z8CG$`%2 zk{(`M1NkutW|@z^><1u?-Y*&2B0jWZ-xaytTzB`x-TpMD&7-j}DrL362I>CO5Ha$o z9!i)>{iY`P#kVwRwwYbdd}XRlyR->iFi(eLATBQ+c*n+P9>7M|bIk~6ue_a9Ok{TI z3OskjwKcSfd+I?!03L}C&SBTDT!QnE7IN*KHLTq~Nenw7EN9}T zk(4=Nb6e0WS+QAZ_=!#5_7DA$*o>b+G5!efpje`o3gg*r@rgJ3_OM$$UR){?5=DK8 zQdLn${6IrMxTu?R*+X4c745DI4&*Y- zEVHaT7xK*Vm@bHUo=J+JA;BQS<@G_kIIbpt-uOmY_1HbUo2T0@e=*%Yu^1{1WE zf=BhCSI$ninP&m5D2q>L3E~M>KQW8iu@htYDpo`mR4wpLz}>-V(t_MU)>E%-sNdKQ zFSdHAWe^AKZ*z0a&>Rv87Af{YfI2gQVLPgp@vOF>v$NHoxby*lQLgHw7rhHDwc3qI zZ9*L?umMeKXOU1nyh3Fq5sI9`twcA2VhBrOx`r!u3A%3Mf5{bGiWS<5bs=Yk&`6iz zYV|OP1TFuqNGr=B(o!*{?vLiyTPUq-YE63uc(+B(z1VA<9FpV=e_4FGU`KGJRt3?? z2YD-wgveZx77gLObPXw7mdWkwZ83z{;awVc{|wPo6pR%+@fHe%s7?T>+=q;w$UJ3# z39oC?5MEu;!`3l(?ge?SXbw}3ENhr+|x%|3_M zH-RB8QIgGOqb1req(+I%d8%!*``qG<7B)(}vGSJ^Z=C!k;?cLZi$u2U;<_>T!x62m zmt*EI#p>aEx1W_`X3}(a3$}dbU!BAd3*8*Dr`m?5Pk<{cXP4qq=}?ACr2`hxRTouR z*WK@ulLi*5yYLp5O{LnQvcjQKlM_!^)M1I~s-r1q*(=^0u2I`DRhAds3WNOxgKzIA zS`GcD4so1%+#|+t zAO=ApewFp^mo#czgc1z2`1QBFcUuQ@d&gBrg0!sbr!pV#$$acE5Cp4&UxPA#vIkqF zVKTQ5$h_Y*L78s@>3=PAR`q(8dFd}fnY*McGd?NLv4@RYWu4ksg(f|c{IxLu*R(V*7358#-uHqy~zawSG`!{snvZ zK(Vh)^gJKnJsdTf%oinyFwK2BR)j0T6d6@$9y`#j9%}@(!iUcsIOmE?&hZ&q-Y^|KmSP|*6eIH zlJ{wUB0wXSx4}mShyH-d#h?Q7tTqtI2@vs7faD}dffD3{&4dN7AWZ@^!UQ=+1Ubzh z$oySXv&h*>kZgk>;{!Cp1ZgLNEHV%|DnP_+kt38KbAAk3>AFpFF*f;?s*vTJ~dS&+#}kdp6%7Wp7ORf`M|LE0Mxi3Nz51-VcO zl5P+rJ3u4MB72J2r|MT$a}k_W|0$>AVUm-+!3G=Cdjrm>@~{_L{110Fkwn?ZuS<~V~Oxd9qsg3J&>-ZBvB9w1^Cq)G`g>)W73>RP61k%=P6 zkp@AY4G=L4@|Y6jFoPf$1!#m>WTXi4yn)ER0U~BW@{}M?eG|0ECoNL7NOut=!yw4C z01>kwgOnh983Y*;pb=(~W+KP~1|quzh?oUAPziF+*FlR^HBZ$dpMAvc+r}Ws?ExZY zLH+~@@|qR~L5>U12(!pc5v0gK_5PkX86h zq2D4c0yM$|nJ0prVG!i)ol>*NT96?39cU0_LV!k?Ak#&VB?cnL1c;a|@|qH4L2b|? zzcuzN6DG)2B1nIOAg>09_yno!Dh~ukw!mX~dN^RcwV@8{NqR@{E?BqNjLyO;Z(F(a zK8hcbi~+BE=tuEK3bVTAvQ9ta8?f@N=+rmTYSY7Qiynx^=9c^k`^08V#ZPSd6#gSo zfFC^E9>+h4u~aAzw@2gBt))EN77|4k)vGEh!w)a9Ru$Dam*vi7t#i5Ax!mepR_M#P z(8RKMd^!oJmcz66{2P}=X@B9s%A%)r<-)mCU~kVpo7788Cu#7MgKnwTAKtjU{`VCN ztxmLafScR*tE~2kRrQ5)nWld2qm4W`7D9M9fk*s8lYe4Gq!}p4eOR=J^iu_u!=+b- zH;;k~Xmvk%4jw=dzvBC*gSr?HO2rLb9;+ z-hI?QF`6nRrc-fFVs0&|8ZR1)zXryt`AOTnH0(^N$DWA1Z0qJHcsIb`O|ctb6o_Cq zz?-ZVqplA)Q(skH!<93un@DHe`4zbcYoa<8PezGZiSERzB9ei5 zXmzTrxnHcLr_4v(v!UL4a4J7)ChBNYPCw@EJh?r0=T_9Pex*i*bLl!QebNNpF)*F} zf+7|8F>g}(s{?IPN}qHF)lU?)Wk46Tz>jnWKljDcM4}U?r=Dam>3t3ju=&IRKj7Y@ z)Fvl!Qa4B}mqk68`Em+>xB(iCPjPA*#iv*YIDNCn{cDb|f#wBr$!3F!{2vnC`|i zw%c?fKDzFTasQrHVjRmgogou1Dxkmgdrvz4ZRNr$E4CXuDw(U2PWwgwJlIIo8CgqD zeknBK`6_mXIwx;F_t!Fd@=FON`3a|$Ckoj`AS;{Ip83q36&tcy?FcaTKKO7aC*QkG z`W%RXN}uA-gBkL(Km7!Q1B1f+4fejY4tRKh}&+34W*5g&CebSI(#&U1>UtQla&AI~Rl48cAbbd?xk2m32i*RG(>v+s%<;1Be zo~z47I;1la58t!+TLT_Orf!kPY?AKP}Vd6_Nsp z{x9I#I^iL0r~;I_4D}#xY@AGdm{{c<+$i%#G$Q5S{)9Ys*3#ARO$8DIk;5f$S=mWq)+}QXU{GxC!c|uxlyLb^@sJ()7KqJmTMb{R+OcbRD)oziF zNcriL?q^O#X+U*l4_w=C5a0O|;!}Kju}D9aeiB?wNq^8}dIv9k(jfv3m&!gis&{7z z3KKO%iQk;XppT?g!c#(|zgenvBCYv%U?s}FGp8wjTVk-sFFEG@w@aYH@}h6PVpNh ze<^;WYWJ`&C(=Pe7jvJ}dcM z_(bMce@O2iP{X~ym1@e?t{yZ*=7!iqiQzZj@os$|@e2bzA4xpKOCQy;}+@{x3c@96JI(Y|o;NZ(M@EfYqDmHjCA zBr;$4y`@^5+3!P2o~bU*yuMjmLie+e0pz!s92R*hPZnm!ff*^(`Xh1*?|#0EY=ZX7 zFtNPFF*>7QaD|&T5B+$N4BAU_vC*!YL$T~A%NBt5DL^~jdMw{f=a83Xw)ZH3-oQB zq0$Cn!iz!-7^x{niX2z4Btd`0d6Ydkwon18A0L^m2Z= zb8OxD#(YNz#Jj0PJI1@N@mI0@)lovdVxK{O3GCl(#VDS1G}E4?#B56y5)u#-{2By0 z3A;*vfrtc^&Ml=?BeW9coNAq{NuDEtcwuc*+BTYKdi3vz0`c9ks=}jL#ee@FmSL2G zyuWKsAvb8G2KVVV&ed1xcRq-Gnq1b4-?1;;;a+v{rNwOq7sfy;g%zlq(^2X~*i*fso!i1A%OwSYozbN+H~ z9j)qH_=3|OSYGz0;M+hrX&Sc)GNmrS;DoxCL==}3;CSAwerSNCVehA2bGhqhBs*F_ zwR$dfC%cBMxm0dUK?ghWogp@F55^SDcK;xl_{IbXrn2UOcgUjGTz0j|QuZoF)Wn(# zJ6UWNAtlB$b-c+(&VV(S3jRry;|IpZppjp+2qa!!b8rHi#5eTHbfT#u?K5fed;(pE zthN<5UiKtFen|=^}^Uink8!hb=zp?U{ z;>S}_&5tLV!VDA5gk;ME+euGQrzs8_+#Gl+D&%=8DzvjpZAEzQsR+}{O(Zi}cG`t5 zIr-%#MP&h+Dk_+Ys-YFV<*UYAG-6Fu5Ec97rUgt>XA9~^)TTZoM#o*p6I91^S>50j zTe%6(LZ!ZU5WHdorvVBbJ7^ZVWa$5X7P=Qn-OyR+h?mK^7a{Or&cc(lqX!0Oq4U2= zCG;mU_jp5Qp_lzZo#4$^<5Q%uo1$@mfyU9vXjD=TMO6ByPEYPmc*mXZl0A7}gQ%G_ zPun?;)*8X=9xx-U^{5KwxFVY%C8HXO;<35K48K`~^VsxT`Huv729nWe{z;6YLPJS@v#NnBh<@+Ew31-D>R)W4u$r87?%lYx`ci;deT{8dv);avJj%S#s} zDE@Bzj1!W~-|$=%_s!2mKb*IXrZr7Bz9b5ioJ4kcRobw@N2b-`E#T?g2t^!g=jlhPM|AxGl_%hJcjm6< zTUAyU(#~c5_@gx}7td_uvM7T~h6_ai=t@U*6fT++0rk6cok z&XUUvOrXqcRDx)K6tPHT4p5x#KYIsq(yyb^WTun^!Yq=1GB;SF*eg4dou)p$M3_uc zOwx|rZk|cBJ-qg#b#eF zqFIX6&!eZVz4iAFd#>m7M8U+h)D_F$WS9WNvp3=8vfSqMe6DTX-iRr+@{-V~ZNdjMC#X=X= zP4KRdfw6Z_sGuM!v5GeTkTMtD$YcF1>&ARG)yS`5s$3$J=zj^Wt@ltarg|Kut}Q?Z zz=mwJjfKLOn9-_*BN~>lNC10-PJ9*%AIt5GST#$mk=waNRg=!3kahw~re+V=@`Pbp zy>-lI*t-*B;~<2%^ie~SQFt>5EXjEOe(186eSvK68mbx4iq+{de}BaD%j1KAF?{zN z$i_OgS|x1GOK|9Peb5lESMSCZ@%nvi4QyJ3sY~5~C@K>u@!07nX$YK)WA*-7(B+r< z+E0DxQHLNk%)yQ?p+u@3?DQxH!}ndagT?k>2aD&g#_EUmu@mT7dJSP^@*A90FS1S@ z&saI^D`4eO>ik6iKDf3XL%Gqdexn9T@%0Z-T!UK?p5Rvhd?{|#dS0|!jrfEO<19ZH zZW^thHN=L`p%Z}hqXv-2Ts?54Kvni?!kO+m92rFrL*XO^s6P?@;DFJu{^otL4Z>0XhDxLQ zBR~EhtDk$=pg0bqK-U8M<#7Nio<}{6q?C_kieo#I2Na?sH{R7ye2h}~aA8A5li6F{ zmcgja1B}^&7#KLA3g^wyxe^>*x>6g3l^?%fVZzFxYyK}73tuMPp~jl>dz7&r78v=A z^(Q~C6vtY$$!M&9R{xKTrH2R&2_=I=q4FcmdF_bqccSY~_Qa4|?%ig>#cuzXR1Nov zCLUG&UUBIQKTy2zb#yyEXhk~u)_aWFxBqZ^JK7%gB?i~RCn-FXI^)$EI*MjOf9tSZ z&W>%?Av;c>S$(4aUbwajP;ShQHMqeesX7dH2iNl9lJsDlr^H8Ju?p(0Bag3~#MCmE zu9b|r_Kmvw!u)k<^32koFb-N3PD^vG_(HA1x19r4RK}EN^uTUyO(iuEzMwbBZH& zC0HwaxTbnIc(BcN>>ZnH;2jIaJGSB4x(MY)@2JELnP<#};U?yjI@Co@QuSN3@B_A}>r|y48u)I6)1GCV ze+eoycHPXstaX+3{Rec;6c%U;^YIaa{#N<5tj@h3L!Hk=oyTx(HL=y9t%t5z+<$OG zVh??(!1=(+^sAN=Vfju02%jy4`x4Wx$R1?S+a!i0YvyWA$$Z8o@NvFnPn4h2w}fjsz!Uva%y*@S%xfinFT>Q-!iQ1 zNKXQG6nclk7FfD$&yYkHt6r#rH`LL*6`9N~98pLv;(g<6{ri57!AG$khF>gYhRrL; zQE|c=eV!qf{cAk?*M8X>n0-3`7FcQbC7 zeEGG@y}q0)ghvqJvxM+PM7SE|#t@fb6ZZS^Uzd1%`L;uizC5Yg2#jn@Xayoo6Fv;0>Np*=5S(jm$2zeY#v9sF%bMt4LAW-S$iMs z4g@taI>1eY;o-=TZIu^!WAM34v`HEk11^7oPQn9i&uXRmR?&JL`{33+KV46gDq3;R z?S$1Q6y3TLEe7&In>F^UJ~PmUDy2_~xmtgQ*1Q=d_eN-f@iwx0N3_P8+CXdH%ehnP zKY+Df6>IIX9M-xH-e2lNYAh5r2H@J7fpSs97j_y$ z4e>93mK}8lfy&#%;}+{4jtY@%mF&%WFsLB4213TNH_`K)>P9hoV82<=yM?6p4!-hF zp}JOl_$H^?2dGA40G~)-zpX{mNg1~F9@8${j!~>((%(AbQnpjuWw28kJqk|r-v`&$ z?I;&JHKrGfoMikdZit;GKqRCmI&v1>oVcak>?Ta0{o181F_c+io&7F9u&?Fxgg#kx z3G;dyx92qzUgfy9I@r8?{(gOpy>kP5^?!*hwUWBe$=)hs(rV?`h*j(Bw6q}Vx z|DVpAh++xaS%lpRv@yvYuNf*uytN2^_2|*qNx~})MZ6P9k0rQ*eJ*A_YSB}7ITv%E zjc?Eh8}GV+bX6K&EEV_P_%s)1my*M-`j(p@BB*MpD@X2WkIB!Cfe_Zy84X^!4nmSms06Gl9z}rn$(02 zQ17a%*5d32{Jlp`0#sQhPEdPnVv22awT<7`)z@9G|5}T`NKyh~~Yw;Vvl}L*C`z9BTBvgHEBNlYvN++2-m}En$v{MFaUb8&9|BE^HST??Ty!O z^(m>lPt4zt^l;Rj!8vj-PbIy0iicAdR%5eJ4g|Dze}X$#eYg+nub9uq?PEHsvRVKZ zWHXd{{pPWGNqC`=1z$iz{8zZ3BWd{T>9om!%COvqzu%wwE&pBlw#fBvm6*7OAm@8J ze|S=ciKb)P1iyN?Wv&*K;{8bU1Nt{F_}&hIfnq29$K7#wF+G^3sZ2I7oOzj&Z5Dm_ zLna_pJVF&eCdCMlT>Dg2e5VvsY+r%l#XDrps_b(7&@YEWK))QVR;Xw<;TV2&twuA8 zs3Ol^_D8)6)Wb-DUF2*}y@#kC%Py9^?ryg1f}E->LOtCphr94G%`2#4YzVfLa#=3M zAVirLOskbg%uP^xgyGnUZEd=6H}wh=O{_4LI)HD5dOkHmNFDZtRemCj)f@ZkEN*6YNb6sp@LLm`b^4P=?>o{ ze%4zKez3WkZ0Y(!Yi#gL|KnK*04qC z^b+%;|49B{j10FwZD>gJFUPgj;e4Ipd}EDkaAV__LZJjGdqOTt({lHU51uK#n_a5* z{nFdN1yq4&>G+{eW<-6m3XibuXEA3&oT(T#b3NL35g$&fOjTd;{cJFGbMB#o;tA3S z>(fwha9Mmf_|Y3}d=@>>)P!TG^VwN={Uax@s;@iBT6-R=IrnX-d4#C>F0QTaP+tq5!et$WO->oEPIaoDTrH48ny5ONtQMIT<(RV7oitAWAFj6orG)a zd6XM_p%J=`9c5!1_+~tNj!cm*gm?&*>d{1^_2z{|(2Po{(Gu-|D=qV@8vKvJUVz7SwG&4Z{XZing{pTZx^iryZ-z{je~2M#NI z>??xRS~?Ld*G_xNDY^h1eeG05h>nP&q+3k z?ZM^Tv$+!<$B7X04ia3xfNQJW$dFDLgBya&Cj~6}V?F2j;Br5mbIQoHcW?!tUnN?< zLMOusR@R^eVEGLA&!%Nxf@K|^<^n4nM9i)895I`am{*|Oh?PaSVZ_SdSvv|VPaPvz zdFsF*R=%Ctuo!l>qSd`~5GxOZRw^+}VP#i%oIi$*v`K6aR_+iH3?u ztU6Yn>(i>etyN^KEc7#atJ0;?0(^M~@UJ_QEx&BGWBE^TZ5=-}#PSc|h7tY;lo3OoCeL4fij+{ zc}0TqhfjTs2Dlj=3Pu3sh%?w8ecp8JF#y-r43rz~(HMp@f->>ajsj)jg#ya2_6~xw zt8htqtar4cbuGTH=O62>eX&8H9J)CO$`YHz_JDHbVD5z1XQ30i3n=H~+Ujz8NGIgu zMhc+3yt@WUqV@ee%Lt2|_Mx)wp2<<<=QH3Y2Yf1(c`n83g6M!X;%;F1kTzeaf`F6OfZZ zE0sv8CdP9O-yGS=Cb2!BJoYs1g#BJeCmb!HJOtO)RFoS#!NLszW#q(o$vkJaS`;}@ zc;{mQB__si$PA-XIg3EhxZEZ!lu@i<2)VNGCG0x|NNjW?+gq^m=hUHwe zzyNj%_}dfXRrs(9u=4jQEavC0IAYe}+B!2#%;#~#h?U;Y?kKEGK2)$WdG{bzK6s{K zSUFD7>d-!jmD@q90a*Ei#!J4%z2j{X+k=&HCvzv9`!YJ=7{SVAxVDy}+=!LV=rxI9 zNw9Jz=dq+%>9pF$$~|ZStXu>B_Qd#EXb!Bb%w{oPf5{PZKCZ1UVPfXvh7l_*p59Sd z*{`=?X?=n{%3<$D)29oiSY-9518z3 zlh_{k4?clAq5Jdbge-x7KU`Z+pxg-mKX60fA2~7p>Hs}2NVMMd6GB56DDifi7yd=y zZ%+-zL-S;yy#64~D-x8GKkzX+)XivDFajw1XR$pxl{xk}6xY^0C^y<;BW@T$nfus| z0_7D$1(ff#3WBnYa7lR%vY((65L1ul&5ECpd?!7^KdQ)y#g`PqS*S0pI6_!-TF zqBi>T!3dx%>(BO>{ETCd`*Ce;L%9)@XTg9*P=5aKjsoSDO9YgeI|o5|vv5fnl+P<# z3z?QTQXURksYFUFq|plc)3nO$8&rPxkS4J`pgizc?u4dKqZ3XSP`1OhbrZ^sov<7? z1eEq;Tv|f(KgNCO6=$}3Rpdb7!vz9LOpG6u8A#nz0E>QNJOru(EaUsJoaf_~mU9fQ zt>q{;%Gp)R=^yXC_TY{JOSM`fZh?JOelCNAOUhumRneNpw7g(R1FZ&t<)(E(u*@yd zB(?`EzxCx#sCfdNaE5?o1Fo%8j|u67CvhVMuoS%HfaUne2=>f;8!TgG3NjA@*kCyj zssk*ii<~`Navn=^K8bQ8SpLKfV`M3MU`K)F;ZYJ<);0}-rIT<;87yZgT9-Eqrn?XC z*FBAWB)oONycb19mQ!h&z!zDj+9b9IEbku8V0qzjfMtk)P}m zM}g&<3j{1L?-T^f&(oMo%3wJ_(K@C{5G>DvRs$l-z7)uPV7b^Pu{~gUB$L5%+oJ%> znF5x{xVAQ<+}H^@N2LUogPwQ5@-``3!Sc`49R-%%&y@~73+H(G$1Ekn zCFRIceU8woWm?`b%OKEd09fAsFbI~GHi_*4%ZWX?6FNVLP8cR&>49tOev})*@&j(9 z0G9k`9I(WBvL6PP%(rZ?%mJzZmc1Z=4VG)6I>7Q!50>-R5=YKrTw6b&+$iVCT26mA zuDokUfu*bJ;I4lM!E&W=Nf|6_M+#V8XIfscbONnZz@o-1_fsJErJ;2RO=5e%(!M)) z!teK^6V4K_?DPOSVGPQRov;u$d|)xnh8};?0m}tEHx2{KJFnYdxf`egSc)OQYE>Fu>3hfI{42&gJ3yMxTFl0mldr$ za9p7O+1=0Zwg!M@3;jJbEv{GD5)eJg%+u zLqj^@a@JNOOzWs;h2L{0!zn79I$-6I1()7HdtB!RRBvPAi_>VZ@tH0`KBw& zS$(%7=W1MA$ArmwFK!sYvhN)`3M@Aak;rnxuR*Z9S=2DFbXBzKnU;6VawTY`0v0tJ z`m#C*mToqQ?E%Y$2XQBybQd~dq(qi8aBa;(xe+X_(QCfQVww#-@{j|T8H*yp@`??X zwLlfXVnF~KEO$Y5q@meeSk8wNj-1co+G-sp=cTw|1k2{a9R-$?PZzM9jE{r+M@Ex{ zOUjYu&%r`#71Q#9CI8VT`1=rSjC^vS(>$u?qi)l9WJ`Y=Ed-(`XG+|(Q^I01#on|svo|p`< z=-0M-Lv?`Vzx%VCC%EJsOme=Ca-*EPXgU4ec>jbQ1(qp030O9L9|TJe;gT{~vJ|ax zKM*Z1ST@|Idpf1%{_`l1`@r&qO=5e%@@XgTggJKtEdLR(RO8w@A|s>|?!b){!19;^ z2)%lGFvpHCu*9CR!SXZ4x`-^f#V)Wkhw1>!ks{~rE;%zu&O1?_l@>u$*#-3oM`FIU~T*ROI}2k|XCY zxVFwgxe+X{;)W3{$By4oU^%irlb3?--53PRnp>Dl%3%5CAECA1cR{dB2CW99p+@wu z%?FlKY!cf8mV&(*EEg4`6D|<2T!U+CHOh^haM(U6fn~sp0uTbr^5-ML@{|phl9w1P zdjSP@8hQzjjsTXLy;#o5+Z{QV;MzJYOwLKTVFXM1%{vM#P5+h-zVzE5Se_r(FtE(t zCbWKHTHZ8tK4_%^7Bw4MO-tfFu7QmN0u{D;K=zPuC02M8|6G(%jqAp ze0k%J0!z)G(!qVc4ua)Y;gWJ>nWAVdW?Ejb^Z=~}faST_L9l$Er%7xNSPt5QJE6q{ zbiybB%kH?gZb7-R6IS6y3Sjw=hpjTe&Eru?SQ^^%2^%cO0bu~katL69Wf)WkSZ?dU za*n#qk@G5CTdPoRl=BcRryne{a(5J1c2OO?%U40LoFQCN2Fv_E1b7cHEiYJh0$m6KER?6CO8PH11x8XoV{Ff9#3*UgK{HS{>BYs8Y;eiM}cMi@6y5R zYlC1pK)9p~mU|VgE50CFUa+jWPWN<5v!TJWf?&DNCb2zWS-LBO<>gxdmWu=|mAJMt zb_?l*ak!BJSf(m~5Lou+*bxSn@g+7`Hejp^uoRAWf#nZOrvaAEB4;y~oV${o<4|q{ z%L?2ug5|uiI|?kXZV|A&ih~aQ@oUSq%q3;8T&igG|2znm=RvChktKtk%=*SGm)Rt? z2P}`bWw1;f2e4c$U`gQG`UU02PB^VyN?^HI0ffNv!(#-8Ft7}Mzy`~k7`^~3BW`wq zWhoYH0G8j=SJ#U>SvLYYEDYVA&77mO^AX>Tv-G zfo0(%kzl#s2Fv792Ft-fft`jPhw1>!d#zc{7xNrBD{yV?7bfS8xM2iKqpNllSkC@Q zz;gDdL9jf0Wy8R-i=y=v)AFXFGe9d9u&CM45?ZzJfu)sAVtc@n-HJP*Yc4wBQUOaZ zTw4#K+z6JRaKi@{(`@MHhaIp?dnght(`~Svj}U~&(hexF!E!xR2Us56h2@-ZgCl1g z*Va!cH_ACs%jx&|)nj%PSPuD7z;Z}U5G>aSmz2}c`X7YW8%)a!mIFYm0bqHMRxNyB z`Fyk{u{~hvxHEUcpVy%iE)%dcyB?iz70QjBuoyQ|0Lwc(Y?ay2 zAqZgE00C^UWJ7g;Wo%29bEr$s3vg{MM!8YWeYBi@usnD9jsnYEH7Nc2qaavL5H2Z$ zbRWpKMdCexVJz%M8&YiIAT7YGYfaMchTgSHu>4XPxL%{MR z_6OT1O`Z=dyHA?D_fdj?faOIMWy~)aKRiXiV!vR#1^n$7jQ51*z{&s-^B|X)N0OK& zC^uqdGj6b$eyohYbVp(39yKOi`C$+%?S)IqSjkqj&c|0n{X>>_FKG}~vdV&3xx*&0 zJy@CFl(F)})xgRXf|ZwWZSB@9q!X^hjTEqQ+5gAdwZPY0zyHlWmnN5zE|yEtb<)bE z)e(n7!&ECFA@@=)n-7!0E1!YCft6!eOam)TM9jY) z3W-^R#C!<(u2|WE0#~f`d7!eeGF*kEujBV8?1(HL%3LDG%7uzn+pnBhSqxf{OhRgx zr4em#*(Ra>28oJbWqwu0O6r3!!h?d98Axk~k?(4RTdPHcm5!!K=q_IEgqwsqKV`$p zV(>SxvI)C2z{=4oEar|eAu;zLt$D(UnS}yZth5+XSy<_yBGSjcbYf-W;PPSR*a-<( zsuwu1G9I+bffbFmENoc0)*w+4tc;9iBlH*zBRnKnNk&@x2>Gs9X$Y%D;8)I7_@Jdw zYmQ&TVdXZz4J+fp-@wWO^c+~pjbbsEjtYtSF49_~aAH1$0#~e@9#mOasi%V5UfZ2m zc~-bY>{m9a;PyMFWeskF>4 z$alrcVHDV~LMtJAyz<3-LV(08|ICxL`yA9|whb%E;BR1MGl%qNi6 zG~~OA>Cwfs&kkPxUk>m80;Wk@=E{8!b;yM>HRChq9CYkn z-Ov%OgND(n!iJT%3=$Q=%1?i>5k4IXtc(||>_l3->F+Q`n1ccvR_Ij7?pL1YrLg#w zCU|?l}VC8kBwK{)>F~S2V zhyW{N6h0_kdAv-&GGeL?E62g#z{(-){ zX{~)YG3TPd6)P9rRasbhwuWG3{AMRs*4$Y>taufzf0>pwUKtHq<-kf29h=y&a=AgG zB3QZqcQ!)jfiOafV5Jw*+A8F`VxN;+)eR@+Fci3A<#^x9!piV!f)#JB6Dxk<60u*oP|@1Sw5(W30If){ zqSisHY4*2a<*y{2L`AUD?l(3<e1FdpkWj4+JHmvOEt&^w-R%)JLBNX2QBTN#k{DHJK0Qs&) zScQTJu+mcDgZ#=iUg?Cx%3qJ!u%h)dVI>|t2UZ3jXEARxiP@XPT#bBJG3)AL+OhIN zugbzoP}%p`M^3D?6)q8DrL&^-*ao6y#mb>X-Ov%Og9g&QM2wZjidHXl#*UTsJ>U1rcCnsKN(fB_*RQtPC1&!%DTgOjy|$WUSN@ zF^}9467v+&+Cb#HVr4Z7T(NR%kIKSIyt>c7V677?-}#tJ#8@d-_xUe_%yz577CMX-`l%vc%T7e<&YSQ(GBwj24bM!4=sL|C~|;e)W^n^6{4+K#hf zr4am$c;$V>J@6}gH5M}`DJ16SNNaK7#GH)+SFAMbURhW<=Wp4!9lgehm3O+84=Wqh zZSOyrmURvq0$Sz3N+HeuHmqD~kf;b&?m5gx=+Fm7m?Bv5BCWlRd{?Ygh1DYPE439q z2rC!!Zd0;WkGRIR{SjjxUJwL2^=v^mP+6b43vC=`&8vh>AvSMZ5 zt-7HjS_j=lv%d{1FB&8&f|XrGjFmM$U}c(MWfRic75l>&VHyeqE3cUE#o2$mv6+Dt z0K)GgLL_pd8C?VjiK)L<_8&IAA0t}Dx0m2=4lzrc`j30Li$@m4* zTHA0k`cdEtltvvZ3n;bgi*d&+cLL?z4&?(%PK?kx#k8zb&rr}R2T;BvM{Wa3GlN7$ zfYNUd8=>QEFv1f8lx|3CE0FIBlxnbA1XItl)QEs`<4_w=?gau2p!m^k0A=-eEaUT? zLozN!TB{XK#=$6X1xm?Hl?9aj^~AWH|K|isrf`YaqbyLgwlgg&P&$BCBtTJXpOq95 z+JJKEMx8`OfO1_S8{s?;jF2Hfxddq~1Np8%`5px}pwQaK9;2l44(wSyO2;8KpmYTS z44@1~w*i#EZkBQEtsxm7Lt6V0`K~hFq|0azW;e%I7EspJ5uh|#<^;+>;Sw=W9#XWH zF)b@l>VsA}fHEu136$+O=p-rvlp5c%5wrvtVWt4(cciuc$agiu2PlXDD2cqKc2=PL zbH5EJ7XbkVP;NrE0hFQNu#8vbzfwCWi&$qAHY28oIQW#29~!pEHeluQB27f5SuzYb#rKMHI> zq0=9`M`^?RX=eq>+~O3tTp|X_WJT+aB~GB^#FYyu@hMKAOfg7Q1SqR_GEkoH0H8c6Kv{~k zR_m)UMi`8O2!IkbmJo1Opp3Z329&)WO+Yy`k%3ZQWc;mtNXGw=)`lV96(}1};0l!P z*Hso!7S|AdpcTo~qu+m{8Q&J8++mQY2v7oFGEm0e z1S8B6pge}O_9OCLjc`*zL_pa+CL*BRe76lKtAGH*qin$OAw0@q{D38%DfsNhkc{6T zt#t|~<9rmj0_D3LrxeX|73=$Oq z%Fyj>gs$;0!fXLb64Kg-$ae+Gxv*LU9_8Ip5dp=MYy-+uK!5?1`RF!)lCzCvTyjH5 z#uZ3w4Z_Jd1_iD_`QysU0?O@G1Sq#JbOL3LaEaKXltv4!-Av0GqjUkSNPwbNJ=x^Q zZ9s`KNK^zU9ll^AT+|Lm@C#6`Kw1kT-xVl_P+$X!+p1?8Z@Hdz>gjry4JZ?V00Ssv z&}{%^!RIXFqt}OI%s^TzM!u_zopl-Q(ZjaZl?9aMQDWTYFF1iRLbyZ>ly6IK;*IEc znU)nOO+l+1Kza5-Cs1}@p_8ZxQ0jliM))lbMtDkq@*mRLFyy-$VFL;x0LtCGlXh01 z)VR|Il%7C<0hG?@Hh}U_KFiqKBx8S)F&Fu+GB(j=v;*a}%PR{g-~B1Z{qs2|P!fbo z#6SruTA2%+Q_ruhbSp=+>KQfK36ysY5)}c;;jL_h&#nbf0s@q8kk&fog)zc>6xe{` zw(4oeJ85SH%8R$#fO0($u)elh^)x}Z0hBHxV=I%4ZAr!#knakV<0x>QdM3B5ETF7B zEkG%l=LAY4;Sw=WhACPD=R1Lt-=bVVxpkxyD47O{iU1{N3j<}z)d0%V0+ba7;12d)5h*S3oP0sYk7P&ZimQ7NZO_NK^zU3pO)Q9=#Gq z2ntX#kk*Qk?`nk3pF{+d{r5!#lx{t2Kq&$m44`bqks&9-8xRptdircYSqlUhKv|4#11R|)vy5+D5t8vkq_vB~ z$(VuySD=($QdvNW|5bpJ{InA&3x!L>9;Nt%(Av+mtifzA(24{oYSpua9JviBwG9## z0ZNw~HbSe*VT3sXl(tA~FCgC)D92G?1B%T!dwALt(Gvt!^n3v!d4VS0F=SJlXh01)bC~kN*WMg z0OfXc8$g-#5zE-mB;zoowa=07Dr0k9Mmtd6xv;W;(nT4!>TD-ax(kCxW_lsN{8iU1{lEd%APW&p}O0m_F+YZtEzV}ukG zL;#dVyg_nSpiEA%0i`_VUVZ@P+nQXK$&p~fHGfz5=2@% ziF{Wh-2P!iKq*Ng1e_HpNjKYo5(5MnKqp!9m5 zjd0zCFv0=>N++bXSCQ`uls{2m1B%u3YY4j{k)%2ae4KzVZ|%NS@9 zlJNzkwSSTCDr2%Pqdk}{I=8ZbGU+D)%8ltxpiCAn5l=l=Dq5SFmK7-1f>t?z@_Jt< zP)h3QBq{=wmhZ6sA&}wtpkffYqDg1WI4w5;0I_C|V1dmK7+~ zK`RoVRK>G1c);cHK2D%)uA`Hv2vGiB!A98E2u65SfKrUK*5{otMtB1S0+e$RKpF45 z9s-AFe&2OwZ0Lt`yDHGQzd!QmO@fugV7*khA-o*@69}-r26|4<_OwRVi(k_pAtL8B z$j0gm6RYod125d;W-~&pY747TW>y<9T>_Wd+pLn$8-`T!Ez;V}P?ak#pF@G`OxLV- zW#KY@m*6rr&56tP=ag@zEB;DoML$NgthgKtTIImy!9*u6uQW(h1eXuI#YXTpfDx7o zF8d;_twp}85n^Dq2yl7qk`OLe@ZL-~upGV7z~w%m3b?!q0vNcQi>{ZA%XXKBSamLw zRl^W2CkU&8^GvK-ffaC>^d_t1dKBp@xdmx$8S-6K@(&7JaXG7IW#KYCAXwU$>cr(` z!X;vV*;dgSJ;{m7Z)!w_ODqS;UnbJYpe+KMXOO4}F28t#jqpwkjIc~_xgKe)+43+( zcoYSK%cbJPT9J%!V*_k%Y#Gm)mZ=p_y46SJD0<|r7AJ!BHePSQ@*r9OmaD+u_+`C6 z;cJ1FmLg^ilb8)i%rxY?Vx<5Du2>mRy|S><*DqLkf1(pBe^e`<538eHVrj~-VP%9tq9Ry%<#oo&jC#Pz>w=Xa(%MPnyBgv4|3!$EGESQ&z}mWO;-tTcnwBJwMV@dSdi zVrBTX23DR%3t(k5_#3}b^D24{tZZA#V!m5DBxW|!T5LEm(@@}wm8#K|g_V1s6s+9) zh!ZP|qsoVsdWzN|re%$d`hr$Du#(@!iIsB=5*5Kp_gC2nZO(xa-Vm(BBdsk$zAIKv zq97uy#InOUD^`99VP!B{04oXLZ(t=AJqK2nEMYO9s1*|P8Kkw}k?$&IqAsR=eYg9+ zZKb}9EolSp`y|=tKSa7~@AIb@`cuF5`IGa9`2y8iwWfK}@73DoBBm`wstBL>j}W(4 zejphYxB7zBk3Az;xn`^rE8~Sr#PQ0jiq?9jWyMM>(24{rvmiC%m6tj@v2x&FokT^j za?vYngnw(m2yY2i&Z!9_Jc4{zBjlk#u##$C-wn1!D;uu=UU`*Zy}cZggo~r=UMY^n z_&uXm;BWjsKo9i1xQ@<=mUnhe7vB)#G@(pROWW8ueSuyZoPP9x)2q-o)~tFAW`8d0 z3!_)YO9tFxunu-cSES>M)i>9=OC^9fqYlZ_j);ut1SGxvf%%V3bC&p zOv?)Y%R#Fg@Lx=4pSBR}r@wR(6@mZ7FR>B+s|q8$E%2{h4MrG; zd{-mnqaXtKZ@ex9%6-=n?83qS_0~2}UJm{SD0`ykWyAlHwjoXv%jC4(&S@KZZEz~W zvEkX^zs=}XneabuXEedg=ut2N{FlDSnx9!Er1`l>Yp0O!s`=iF!odH#GnEDZK5vWn zziy-x{u6~u#PF}GXnn-Atnj}Av?76jrg;CC>HNh8|AVJ>5*2~}B@5XIrBN`#y8{0@ z(J;bzP`)!o=T#;sKeaO&VP@0|i~!2C z1+0($|AzE20%>g<@?G`O5{hyK<$EV93zV#iaf6%LdK zFSR)^-#;c$UWT5Z%~LjcOy^Z5D5uyN9Y;qE^smF>AE5kc9_!=Nze4)hiL`bT^yCW4 zIVf-iWz%0P3zYR=7f_D7-wDdqC(7q3w=5G{|1d2pC`W--IXvZ$v}m@0vXw!iBA^`f zEE~b|CyelcfHDzj?E~by8lg6<76B-KpP&OJSg!@IWx|2-@Fg}-t^$7pD^H{6X9H!% zB%N28pj>1JWq&iH7GMNW_MXf7h&vO~$IVDjl9n}eeXIJ87S3>anH6+P|h_-R0NctJ;O$L`xK0@RzSHHY3-6ZVT_Q9 z0s&>2C&qVH2_2U;DAQABUnro&iE)=}c>C#D2w#}skX4fPM@S{hkk)ELRj#-kiUL<$9xJIVTvlBpxa`v3iOX5SC1PBz zT`jb}WLj2d*$K2Fah3{~A5dUsbCze0=p-tF%eGIm5gPsuBdil#HbYv=M82yL_MspG zTz*t~!dUA}=9OBJ4PnvK!2wg85m(fw7ArMn0tNkHX9%1#enbk=Q z3*hq70IMVlMY>ArBCSn8zN<<;M}aFYlZz`0mv65UEWLe?6PL%e@=fCRD_S@8bNb8I zK&u?MY>Lrs$K_yyL`879(9cGg@+*w6UT`@JY3&&DU5(&h1FZ;o;c)p> zBLkNWfhyp#?r*^5TntINVY3y^wrpIEHnDoNOjgZ8td?KFtk$5f2CD&J1zbKkn^iLE zL`WqmNNanL@2ZmPp(|HhZv45jaM|#E!DYi_Cob<1E)o07yp=-h6{cnNmvum^9JqXf z!ZVw{%s-@)s0c2jXR#4}`UOVF7F-@jT1!U0s}bHoK?MFX@K*?zJ$d~b7MBeTTuuS1 zfXkHQCa_$Ku9uC=ohDX4HZN-kydPp!UszpYX7ve%1#tOGCaa|2SV$#%k=AZ|GK@-I zM1d=ABM|IT5rX!KJ!2apZC*F5?Um6~X1` znQVmHkHQEW1ef<9t!+fUD=r(uYJ$tN+_1Ure1VAR71CIfIBwVsh%sRK1X=)=eZk+j zHSq#^4yU@@1Kgv4Blw03?tF&{>OD^~v8Us+f=K3weEC&`JG`NAb)ANHD}^*z(F z`mpYxRSvA=&>pbOhgCC3R0JytPp}c19f1)x3RbQ{T6-4xu2?BXK}1+NpC_`jo`fF^ zVdZYL09IOozk!tp(Q{zs`57!`T5(9snMi9#knbwyZMvBDZRhPjRu)!TDEqeP?ZnDR z;Sw=cb`KNWy~nhySh)za%7K-64SDf~evQ4y@1H=T`e@-U2$BUmX#S{sghS0ijh zK}1+Na$ZD!rD`3+uUy%Hu~Jh5R_=keAm3HY^K~)pSb23{ zWnty?P_ggn+nreHBwQlK%G-)oMxt{LI=)voblJ}Wt2t;ytP?9M3=$Q=%As^NLf#=@ z%Q^OeHSrkNsl^k{$XZ0&jhp_S=TEMS-5B>&L8lvaG$}J*htVztPNz8f3 zcg4yP6u8bosoz%?R!V|`l`ncYu@WO(BF4%qiq<_nomlx~Ph?ohlrz?jw7+QcE7J`U z6~W5-DU6jxKLIP71uJhLt<`%xj1h*TK(JEg8Ec>W^o`SCy{R0&hKr-$sv(ZWxMA}v z_#2zFw1s=NP1+v@>%7X`r0r~H^n#huR4@W4-<-_)2pkCM;{~L(f06GB%48_e6_iDV zl?BSX)m@bvyE{QSS-3y(ucc<`96PYE-oXk^Y>cq zxR02ei^F)-_?EU?n*8!N)P}2x8R75>m@rp`#;M*XCMk~@5P-a;gzN^VBS3Ikm; zi&}WMW#+~#$c_0h*Y7O|<>rTSzs^W6h)Ss*@P1u#o-e~&7!BPOR++R>87P^=Y@}=C zt*`Zd(Eu`R<4@k;^Y>b5?j!Ds=6Uy$G)gE4S43ZZ!Q>(c0(-K>uD*XCSt28SZ`9Nl zY!6(CX$pN71$x0CsVk8O>*i@C|CXX+Ayvs9!gS&{0C80G_PQf5ABwEz`*)Ycd?az1 zH(TW@D_?M>>#S4Nb>%^~IsMvFAsw+_yI#>c!nCY@?QYPrV#S|&(5y<>KHxo=gV%P@ zb=E@Y!49{E1_|n9Kf1n)AyYv2cVU;@u72-^MA!$qtB=vK+)SMA^k$^zMx`WZi77me zm;8WnjGs$`r4srhtt~;m>o`7x0vTc#V0;w>fPz3O9#o_&!g<=aEU48aW4>aO^o#Ve zvCSk8Dm8xLahfDXNJngvW{TE5or#v!B%kaomr1<;I88F$AW;#Mte?OpskaX%!LJ>X zN%Ho>B=shSG0AWggf~eS7Sw8z-31Pl7~?ve&&7zOyWeoVGKgQ*T->fFBYkyLN@G-0 zo|nh_y1RcVEoo@WOhTr~9j6a;b;s9;q`Et{cp#G04r|@q@2W6#DY2wS+;UdiX!<;Xi{PV{9?51XE9* z_RVPO%hy~7U*8`_J)^@%|B-;7&l!6HzJW zgUbo%QuFyq#uIs-S~NFEZZGoOb#>2uVuu~lW_9V)7*QsY8M$y2dD@vl=o7wY_Y*l5 z?GcCDaTTPnjhQ)TWe}_$XpZ%ZZJ}_Fxm}#@x}3tnr+76mEr335S8`l+0qI=VMst*E zz988NS%SFVf z{P+K}w_&=eTk28m(c$K<^b6A!4+g@LsFY^tVWBVR!zf73LV5{3k>dYS>u^7rU*ZW+ zSjp8S1YG~OrNcLmbM5f@FB~0iPZ$mNbc}7n+A}~F>`gn;sI3F{d}>wiqk zI$<>cEr}s2GTYq#5YIM$e~a1X5TJ(H=1ruvSCH=-0GvjF%r4+8GO3_N_K(wrieiO7R zuIK|}Skd#ofuesFMSGCeZhSC|qMt!Qq>BEbr=jREz_=ZDhx03>=vwnc(Y~9Uihf#1 zN37@#&kC)tnU+=29?+_|q8}U0if;2Y6kRNe-n|Qo-i~}%M7M%vB31OWml=va{+CnH zQ}ZgM=vU^7a(;|=D!PS`j#$xmDq0WT=tT7Ht(BqZ`lDFUxnDuiM?}#NBdrZXzN?}) zpdeC3w~jRwopr{k=*H*)o?z@3!7?4r=c%cGU`$w-wYxsmb)W}gE)hWTK{x|V!U`c` z4I`d06RB^W9cXS5i)jVB522?mjhHM?8(sVRFd^0N@MZQ^QqOiXM0 z#?I2>CyAnJGz#1 zi}^6>=4(>xW4~lwG^D9!NYe}all30|`6Y+T(&JmfC^L6j^@56n$8J7 z&Tild8o`nw8d{-^raW!c=53|^Pn4o0YYAm-&PZPwm2wU=_Un#XQ6)8zcnb-bEvvJ? z(7)5?-wb}cktI5-Bh0FlbfrF#wyUU)DcUo0V={5HM}vbTT}H(G3Sv8!u}-R#)Xej) zAZ4IZLH1Ni1mkB&O>Nx&XzOT&eUjX~2`**E78+HiP?rM|^Tvv8l)>}`U{VPB1I&_i z6-m@MYDzX$n_>=LP%MTTDn!*fq!TPv6b%uJKr%Px3G7Fcg-DbtW>K!Tw9*%6 z)+o7sE<1O9s-y6h%zzP{n(I)%H#gw90j}phaHAxk7~82>_aTrvPy6*|{$9j-Os!u0 z7Fk1h;pUZ<*2$J4}2w26|UiE424PbI}yx?uyJSZZ*! zNa1U(q={7x4}HNM)|wzDXYuiKTu=z9uYJauQu5+RC$(4AH%N7{`a`d(5jIL1#F-kz zsRl2Y8+6he+$0TdmT7_*(3Ul+Gu2$bj$U8wa93x(_QBdX#{rR1fXH${WQjldB_~Rj zuzwFthC(&Zn~Sc~(9Bn#h5VV3zC0?Wrc4JO?TY(3(D~+b1Uf%a^=c7Rb74>bqB&=TK^!rdWH6wee-ncpC=eyQ10WmSG8iP~a1SWp z$R`Gy?&BUjLJUfU!I$}9(AZ#bz{+5(!5~pa3M=N5kC?35)$?d$glrQcTZ8Ha6Vixm z4)R4Y_<2jS+~*r){~#&Ihe6*52k$C{0}LduM9y-6wmJwJ^UmEbo89n6YDadVk;FTp z)ZhTP5~YMwJnEFo#;?p!U2Mij5fA@N&|Xn09?8n42?y`Pas#$%_3t9l5sThT}Rs{6o`zUqdGItM;kNP za~?A=2E*$9tc0P&po=ir{3#gJG8ouK+hBviXq^E$5gKjGU~5BWph8@acBe3iCI&r) z!4P8b2J)o`w$WCK0_j05s;mX`B@>e;H@vPMfK@kCgPaj*-$2^U^xZODnNPa~#73t9M}$Fb}E)8a@lvXer`P z9_V>E1yE}g_5E)7UMK?QY2D>?Rea4v|wI<*ydV#hw3_LT$51rsVH zwU7E@UunV%Fk5Ppp7qx6bXL11BYjI$N}GUp3u?Xm$59N1&8V>smU(K6$uhkcnk_R5 zGuRX^M)z2kv{XVX*^Ry7SJG!n0*a^?MC@K6rd=pSdJS7a z-yP8RN5fhnq;lOcNjRX?;(=Od@T;#q^XMK0h83S1DK)+YH6m)tI8!aRsj@~J`%T7UBnJ|^0HQZ`PNy-TR*+pVl@<+rLA zE9b*yQLu}lm6ZB=ljf35_Tp*_mA!C=0)j=q>F6cD(s8p1y>p)@^u|21jAdutE&< zb9{m1Djb)fcqUyoQmQu>&*Nx11y)pEBN%^FX}#w!jM+Ynn3Ri9LxwGuX{ttRsc{Wz zV5!$kZDf^K*x+W;t41DMVHn4dH_vuS2w{uil zzJPK8RL8Mv%*_9ZK{@+N7)4#+(A@~RbzG-Gn`yu53Wh*C@w?ZhxzKSiK3Y1#bBNYz zf!R?Ela{CXF=~bKlq;boQh=iJxls9tKJ?}OkIxa6sTN;Qask?*|8xpQZP|2JxST$G z^**a4bhK>jsLh7Ap6*}pIF_)^g~W6qj-2&MbeKY#CF*mz`sDs0KbOAed0*me+Ee58 z1V_5N@8C%?GY6C8DVZb>ZNwyb)t&m>Ym0C)P{4GH-$sNZ{mRqse%?GZJlb?2do7Xu zTgW~`WWPqfYovR%LG~^RoHD7yp_NJ+=%BAFORm>T^u@{;y`+g=qOVutK9)9mKE+|Q zwFf)oX*)z-7x1}MkZOQUD3W_Ii&ytr2RStmLFJ(oj zwNUlqKB%HgK7NyccyYm?NmeeXG15tCiUK6750HB(0Lcyf}HhN9Npky{$?6Z09 znosg#TBn0z+STQevxARJUt%e64PyP3tfI#89|_Ip=JTz9<=Izpe*7gWzb^6-<=WlQ zpm#Cm9D8g&-4o&P+&SQK*~RNqG>34sGRIv%j~4915b6Z3Ik$@O7G=YD`;jlkvyG$< zN%~02B^)8#40r}-oQY1k6n`ev#iX5bS;m>FDQ!yHVTMj&9eWE)F2|RL^)DCV%Lx5T zU3?j$zRcC%-X1fPw%&=lFW^anO(5!l-Yn`|h?hgd4QM~H9-`i8h-yRoGboTj-?5N4j?oV?|A>B?enxKVhFlksP)95{wB2ElPM6%bbO(LjFUfjQa%>saed2 zp89YEGjmfDv@1pKLdcqPzsTL57DPQW0EDL6aU6hv?1wVGZ-KK1q0n&dnT0u zY}m7`zJ|GCJcS%R_X*$Uf*v{kEcLlWedel9Ye=NlNsnDdPojH^@-oMP3D?YEkz`uH z!nc!_o5%=xcpWr7Q#8F}Ei~Pzm#%3Wm>)tx@sb+2A~g9BOP;HZmqflcN)i+|VQ=AF zd|>ILcCadEuTV&vtLHDf zobn}3Ir9^&nwbX4bbd7R+=^ljK(FXS%gMkRssK#FIc5?ZI{QxmVE?g1d2C)S_%siv zPQ^XwlDBHE^;WAR0WnzYoLY_H0?FEF^= zZEy0TYVs=zxcj)|7nPTp0;57zQN`DQS%AL=lW-`Zt6-ejXiJ|`v+N+W4J@Fx1SeVR zAKY(Ng(1ico!^zz#>t?GnL%fr!M~8nV302iGTa%&>I^=kHckegd}xAQkze)TB~xYU zM1k;V=FVdSvRP@v(JX^`Ku0o=-YY6C?ZjCzb3Xb{A5N{NL#Y%hxA zGuMgC6=%8Efn&x-;^Lu`vrC>wEjl^7WY_z(U@|H|=P&<;96q8cHNwAx&v?{KuZ2$U zN9cA&`t&(KRBB8{`b?qf(W#~rRqsrY-1YUZxJ|Vs;GK>ybuILJ_zM&L`@!NGGmG3= zq^N0CN~U4`(TI=vidU;+zRQVhGWxD2MmpQ8kH+E#pVV7=Gt!@q=9cg2Esw6GmQa(a z~PjwoqRfg?(wo@+DCu$ zoG-zu3S2Ii8}qrCA&Q`u<+!m}T41^doqC-Y8$F48-RmtP?li=I4> zjA7mT`Ftsp)=yi@(k{R9d(Y)Ut3d-ctVMlOL9607xYl;zKxp`Th)xD#SRhpX^j$dCn91CA) zCp}C^N37+qm6lg9E$cO)CZJVuE%&{RwOslRw0xgv`F^Ce*O4zVpiRsFq99T&kK`FU zPy65>r2Rsg{4hikY8#`Y1Ve+Doj#$e*6|DnI%ZlaRpjB}!&uY(Fj)!J*#)y^|yap|Qk9=1w zw}V+C)$%=>Xj#J*3A-xhJYOL#ue@Jk4A~O1u1anY(h+NUn4_IpZc<|&fdw)Wfc9FvY% z%eN?6=gX#^MaxfsR>iUWQ9NsT^sCVFSkdxlOQ7YL8^dUMBnl$c^5MgR<%@BL#IA}@ z=3BH})-pKYsfFEG>b&uigiN%S&X==c;{Uf{!~bu?J@d{YY6&hrd9^?kPQ+5rr6f&d z8kWl?jd00Zqk9%8#m-(K>)o!3$&u5q9iqP}V){)Zr{6k6|HX*uXFnUUey$ABpBORy z{sw)^y(E9~3T!bgG4D^wgTm`b{k=dQXDf6v%ikBv_d@;qG5KDEb16B0;u~yWkdEsl ziTEgtO7X%{IF+CiXgm`PYH}ebr3vzv1XA%p1Ygg>-YvGIU|xERKOglArM^y?juUNe zWY%2Qv4d+AMdtqKn{?>UKDv-$JjGoPoQlBdgmAJw_0$H`LypC#@5#}%6_+=VKm&!? zErhG%+qC*-+;4BVY{or^vnEm@y39Lv3#;!aJzcO#YsT+R!CO+kj!J3I8j!2};7903 z6Raob0^CZKkv)t!;#3H(ip*6ng^$HSH&1)*BG4R-(WWp= z5}F~cC0wV^XkQ@Lw41pA1un0TXpY_>46x7DVFwv3bX68xsDoJOdg;PdqIy=luFXQY z5A?t=UK3a-ggRV3VdK>&HGP(8FPVFtWFEVu_6bDsKglOpRHR%p$|P-vDYbjM3j=uzZLAU55q(5|omPgTWdsJc!W zojE{A%mQDs^2#W3dDxO?lu5^mw@Qm8^q|zl1npws9RRM1k1vexeqXC+<2k z1HNu$oX&bNrVi$EWuIEU>WOh`vsTZDW8 zlszsUu*eH@+cg@=HsAM_&%C(^q03K;#G0=6aDxlb9v#ycfIiJAejCHm4QJ|tk9LCCb(4+^WhnEIv1VISGU%SI?D?r-oqYuNfUb^b@&#S%bkDB za&?wwJR8vn`8M`%p6pWslxbO_l5P+2G>&qaxVBH%eII-gIByJnkEQSP1|3ur+c>f% zwQIfpFH!SVisn#7Gy5Om)llW{!38I@u`H>sLoY&+PkV}d%sr41iOI`bsCnkGsul91 za15ValLt%u2QTQM!X=~4xK~xbkwF4%(ac-h=Laf#0#ZKuL@#~y@!15Q(0xzz(ie-* z*7yWUd&c1tJ?#n6eC>UKJ3N@qJ!DQFUQ2}jMX59nv5a)ADc#zX_NX+Z5VsG8?DioH zVg{(1ZXn2AIL0*uq)>w=GHOKA0|m3(i0#u?H7WvW$xlLWxDkC)BYsd)Z^TBtZ{R`Z z^meEby3CE}lNz-qPCoS|j=pq~FKl+MvA!j1zwr&v3zS9$$h;WB{@b89P!lS+x7kh6 z@erMM`j_l0#d^OlkoG_MjrJbZo*JNi4f=}r__2rxJuw=1T-gWmfti*eL099>P#66h zYtfAf|C%U#IN+5jg_&_wC%DFg52l`ty>zrajVsDr%Cz8QT;)^n3;tK}(BfvGY zlc<8kVXMv@A$O~QodPB?A971vWQ4uB4=Tf zuTpImZ*!5k7n?3s+?!2N5q3p8ZSKmOyb*1@g2TVq<8q9`C_Y9UpVxh(!m#8(3$`u$WZ*pm6$cjH&_FDHIbht zNS%HaMgP;!9rR;neoR8696<>jRRd7e1cn1Qa` z)<|9GfQO&;zDMs%a1F83OZ_`J9w8Gwb;{hYS;RlEK-E?Kf}^qZG%nQBSS9NBpE-J( z(o^Sd(d5xxW{%{D1DT|6xa9>{40HGVJ2UoU5>IN9ap1pmKA)Wg&#J3-)w80TF;0dt zGdGhytz*N$izj=IXjhvn6y6(V)~?4zos)EhDRqtrKNhC`&b?A`^KD9q?B|4Ks$w~8 zCb853?@_&l6K5x^8oOUg9y1Mocg7a-wYIm_xGmj+)%Wba0j9KWFJ2BB*6l_2wm%d) z+a8&!w>|qR7_*!Cp|&lID%{-)#;=$ox^J6DaKZe=%i;UY%QXq@@H&_1l$esHxa*tG zZM+3|BnNlt^)Jewj$+yz$``4jx?fD8Ds&Gq_bTSAx0;z#+(>gRPvH%WFBltBvwkk+ zmsxb9hCJ)y)o{DD=@te*6Xs~KkGG;L26tK*(4!GxzyY)_>^->W6GC(c;bb>1BMbu7Ug+#DUnp0WxNZj1K=;j0SMISZ7d*!4q`D6q(&*D z9;@fJFJ)bM_nTr-KMhNtzVfzrGPE7Cj&wSdUo1~h!b%X|?~w11MD~T};MK~MpEI5x zxm1r$dbD8|^O}3?(^%rpU^6CMkF>T9`8=iM*p|5UFVUB{8C0G3z}m>5$5c+kR`$VE zw=c!BU6`|NTVUJxRn<3YKVQV$j|ae=m%_n>)ktd{4equruz4h|GT_7s^hBd$UD|Lm zD^cG+B_+0o5*aOaCDPaMZGJF!!?{{z2!HQo@+Wk5UxdEL5)Pu0TvnvZ z832vjJ|!Nj;699EjLPh{I6wYEmG6^$%ZhYyntgb>49k38k-nQ@UXjvs$l3Iy5gf=m zzwST+{Y_3z58Ttm@k53G{}t&S?J=OqX_j{-ijn2A`n;wm88~L3?3N<3cP$T*zPCRurGQPlIKlY;4XUc<;NAWZ_pigQL$;y-8FBNQj$80h0FOQRX z-BzBqmE(+XE63%NZ2l^em19I}#eijbXg7NRqk}h8GF~P{P za>Sc2+*SiO=9{PQ5uhe9EZ$=DcpW_%JynGun85JhhFVilQ0+GdwA~c}*!n!ri(v=#-JLs}*y+VmG$SFoy z>(;L{v!eLb2F5CZ-Q9V&m%VPS)idICYxA0}>(=*}g1(fC#n6UB2(4^G>(<)r#q`Bb z_e`cK)6U#mt_^zVh<}wp{y5b zQ2T3C`|bE`kB}+KT0)f^G1GBh>>PQ-5-9469rp!v`Zg!d-UI<-@f}Aoradsr^J?q} zI7-I*C(vI^nr!8eXMY)3-^h3N=%_W!x*e#^6l> zZW@@QN$OlIhi2m-b-Gy)ISn9+>+-zISRVBj3M|rB@^=~vD!idHRr;dNRJ+#a2));I zMCi1f!I@kGq_r&M%lcqCD3}hZPoRJ|f{ULQcnf88Y?oX`q01$BZ!Ddt&PJ~g6RH!z z5w`ks?qoH|QU%L5754u$gR`yUmN&%%-s!#$xP%hZ4S#6F>fHkK0rxtF=5i_z;B*OZ zHl(N9Dc#AtJOx{BVyEJ^^orS3dR3OuiN9`T?kmv=91E+#rXK1SV$rGiMGNoB9P$HX z&kMo1q?sja2xZj`kp;+wMSW`UOER;_#YzhK{K_Bd%G}PZR;uyO2zt%Rij4FXQFw^2 z5xujNk91-B`Y@^3n)Se4h~e76M%QiSN(#Wc`;8be+R7LBeXJwT|cN=(3&o&O?Eq>jt7GC%)^f zXT68za8=o+u5c~Lrnecwm)r&Vq>5E{n0yId!!STZ8AhVSh$wAHl=qPDx)82ui1H@u z+j7a4?+L(N@8+&X|eK^4#+4wsWt5tP}+W+3j{?)nND&G*!VSmAXJ|H z822*nMdJq^mkxh-r|U89!7&cowudYSs zllq|n8b$d!Y^EbInY1pPx}QLqpf#$^+Fd;v+QpBulXfQ~t&KvyXt%2M1roU^;1P}Y zpfO?Dg8S(4{pcDoqJ6@oS}Ity>bvzQlfL8hzMie0*G~NZ_p@!f>gUzxa6h*_hJHRM z{hWuiHXZq{{VYU*wV(9~1iPkK`l)XNS^Mc3srOUgsfXoKVKtgP!wyf)JHg!1cyb36 z4XTNr0uK2S@FdX@GtK;zp=SP`wYY~z($K?c(!-TVYcC^TdN>`qrkVc~3b=>GpNr20 zF+k`{tWKG}w6|^r0y7@1s3vooPMk7@Q#aytgTZOEmDAG(r@_RDU(Vh{q$fl|DJrDs zY!U=-pT-@d6yeo~cs(P$_B;w+`N)@E*=C$rgV*m=omIrWN+qu@`U)n=DLZL4;7dY2 zY{OgmD@N|cxQNMo9c{HUHMpNy;Ft4?@E%0G6Aj)JotZSc37$L$%?2L|UC<|s7VXaYgJC>l*qyU;*lFZeKoI|BQ2(69V5jd4 z{%_Uy?2lO+@kx-92E}0?T(<4X%gx{#TGX}2U=O>&*y|B9?kViZ{#+OwPt|9IE4x{z z|AE!nHvgbP4&7aY-`b3{wi5ZGGuu9REhtmaewhI>=eFb>=%>0`qK2K0np)J+15f~l zKtF9?HD;eq?D=io!GtcvzOBLD<~IE#FKm^)OM2EAwTa@2?njhZPf>x6Pz>+Kj4!A* zS{M)4h6&?p#JEuU{do!)uS34{+s3%QVyxS=!J}-`qU=2)$kS*|g0#>DDXAumtw$YW zhgv|S`!x(*=RI6?aa&6rYqske@XMA7JpO(#mD&D|u4cQc7%-#?MALjz8y|UE|EuX7 zs#iYuQw`XU|NfcQW@>d&r6eB0bC}{kf&$qs#UPhF&p(u>yeP+HvU7R~WoCC1g?utm z6w&~QW5C$Q)6gLnRp{$b*YSk6$t5fSK`qZ^>c0?#jP+=2nDB#s3@ey0oM>dY(D-I> z#567^8n?R8c-BlKj^uz{P%0B7_PEnNzJW+OG1*FJ>i0l)l=MIm1<*Dw1*J+ul;Ua3!rcIX`*#L&~v%F2YE z)s?@eG4x>waphflMw5b0Wb;@H#%~`dsK2<2)0K}0*9cwt6Qj*To_@e2djTsh{vj}s zA%DNeWys5#jD}_zP8rYrel1Wg_T_>3_Hwvm$TnpXZE|@Pl2-Gchyjjg?`!jo;=N^u#0@p zquOjI>#TACWWl2lI-W_O))?@hky_voMy~XyiEvG#uhKRb^W8c01A0xL25p}c2Y%5WH%$d!AO#yB3Fm`eZ^rQ4& zv_9}4JRIGM(9%1xhf`Y^?X~y*I)GEo#)nZMXDEA?gf&QORsTNV9;^;PK}j802>#mm zfmpk9*wfGM9BhK3y++fuc|QQd`C5{IT>r!3EM-rqvd4_F zapM&2QS0S_tj2>>oliq`JgQFn^^Y^1#vN6iSB*L=r&EcDnYKP%sx?&ACaY@MWLo0^ zm3@7IKW;($9W-&%cE9oZv0Lsj*(R*sl#*U}oF8d~t?8($7Tvo$$CsB2*H&6GoQ;Q# zng`D?hF%*D3lj%K7Eje1O>7rz~U z6sH%qd1u<)y7=ThM@1Hc6+nLcXDq#kr}}7m(8dqpNRi&TJan6Q5&$XsWTv2B9PGRXW%T%jvv z>qqdi;+UB#04hifOeg-L%d|B5ObqlR5aW~2-k@XNipD2xMI%xNZW8fAX?l>T2@<*C zo+!Gc7Oufh6;eJ$5^7q^SWpPWRB2zF z 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

    {GZh?R+rgH4i6noWaEo6V5Tf-Q(G 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%0Au?=Bo? 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%0A@_{2?oMw)Da-Y!eOVnsyV( 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 SyI9VJOmH_-Jn;zmeXc`BS;|~~ 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

    Z~Ee@;P;v5w>tabvfFRZ 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


    p1nJGC%nJ3+i-zmn)r) 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

    #hND9E&yRO^%k_90~Raayp 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∈>IT;Y^zn zrZy!_+@@YSu_>t`Ie*lqlAqXAInt(aX(F5Y6Z@50A&iR-igk1x_C`Up)BG#p+a?Zh zv`=m)r7LMn9a8;dlgG~BUA4bV;;!ORWV!i!Js1vXx+A2<+s1f|syxK}iSjSru7L^>ysvKeJ`C@pVW|?KWcr+Ppq#TY5lk~w7%FeFZx$y zO2w_UNI^xX=BQ>2d)083CFysqN>3BS*0+$J{qKCD4T-yCk+ z;Q5AK%@{Ue@Lgd+vzsWBKkAlUgEk;HCN$E{-X;yOiDR3n^=AqY$yh*U9{=!(Bx)xd z?6gf&%Zyjd`THM11RERIIh%P)7g|lru>WR{MwTckxNo>O9V~`ZS#i7DbiBrbl?P6< z!AgW-%=W=mT7KHDs{9&klrT&I;T48q7-nG@ri5RHVGut-^~|=H@yjqw1>bfd43iu~ zyrhsWKi-)v;AxMfFgIW3>sb)O-wqT3kc@}3ggs`9)em$5<_WJ z@hT+P`E3%Vw+QLE*p^v;&%^IPc^je>1t!$y?smOuB+^(+Ug5EaP>xhU1ETDT!=61*&{cm4B=}{t{m{_iDWOnMLV2LD>PK*T^)sl zn9zmiaXB5nbmi7>ekO~xU3V~3ALawaI@Ac<7gGb%$~1N9j|?P=$?K@R5#F$pUVq(z zpID5`Jyaqbhl$23*~=#ISlk5|flGtsDO{TPYbrZ7SZ=~%Mj}}r`4RbCfj>x8ez@_v zf?fbq##%%24#@lf)-iaG%nt03Jrs}ItBQnAvvJbs>?-&I(%yjsC$;1#=>jUGs$j_I zx_XqkQRG9C#1M``t4X&#`?@JCKV@zFX#qz`HfByi($wHb%1vn~1zL2 z{os4qAvww~c~>!6Kq>1+kK-9kfzG$(mgCH;0pd!GElhVKezbJXvIs62j z3p26C=R1?p_;^>OY}nPRYXrm6a&6*RD%-sSf2--*a@_6J?k0sv~#H7VX-dl|O-PF|!N# zpah%(<@G~^YEH+46J|k_s0Ry2XgSzxO19|31EyVInikRomTHi~s}YL?e&Ls03iL#9 zbiTrjTSY>&`DY%_t{_~-JZh4yw_KHZArfV`3_L^)ZR(ew?mqd+_u?m}d8}pvh~9#$ znRw!AX0Dr0SaFop5P)ymyxfBm0<)Pi0J&}^1QD4+%9Xnv(PkmK4{)qY;xAZ&d&xYx zgd!BU?{Nu>PzgRk11GE$f;_#2f9uY}>Ssm@l%I3Mx7bUIf4my;y^$`6o)ZZdNs{#^ z;uBpk*f|a}80Kf*mKwabLAOS#UL^hX7(8Gt5;-JB$}G0WrZJNS#N@y3ll#o`!!jVL zPySU}Xw0y{edjnM9a(>EF)@fWMWAfCRJn~ioj_R7qg{kW$%phvr#Ek zSE{66NFjw;`buV*7?}-^#^Nip@4=ChRJZD`@lteP1uV4!1^=`JG=E623lO85H3uLJ zf!8`NW)jZ(aoH%_#mw9$Q8^YffrL%467ZXwm|RjdUc^KDJZWe<+?n!L%f2>OGz8$5 zI`g*NrN3f|?9QE!qSq5wI`ih#;2+RA9*dI+y-Yuc2>j^NWV`3L`@neeU6IvP1C1Ab zUkc?kNH0L4QZV2vb{PW($bEK^T^J6JlFuJUYw_7Lyw9Aza0kVv6ba)PM&*s!d)Ss~ zjo!-o#j)n-(K7C(FKk^Uje4KxhfiI!VtqruUkW}-`VN@6FUcn=XexGO#>ZVEmTd*fHiX;@DBA$Og73%q zB7L}oIQSkN<*a=4@`gGLt-M=^?|{?sbah-&ZElUntQf{XKg19#?5t&is}^7Ygo-iRMpJ_4&L;lFd6%+=%*TA& z2?lfm2{8npg!jNqPd;YNM2)X=<6Pdf-348DcD8Tq#FoEY62t#wN8G~(PW#{ol4l)z zYzvU3o07xPQKTEzce1lP*Qoy?Ja^#ky0z1!pC7H?%&|nr`kq)D$&nc*56G{xGl`F| z+dJ^s2ZR0kZwp}KVr5-P3^oAc4mjg}QH;A>#@fE&Zo5KEa2nhmS%5WGN3C_JIxdd2MA#@ANQe`X8rfSwhp;Z6;0V z^4=7hQKa6iDZ~cT=W{f42B6YS9+E;hMe_3ZyBzm&PW(uuAKXrsiQk|9B#nNQqL&HP zw8!(?HM4$;qk#n>!<;vve==gwcBvyMrHPIfEAM}dSZ}3o(veNI4SDk(7;?jQD%9B$ zJ1wOz*s_A<#SyIXqia;zd@J6T;ox=o$uGnYYE)u_A?p~$yjl$*+%(78JY_V-lSN^;DnPDC0e^|NXH zo>b_0C=T_D!cp6X(0Il{LW4`a9s_PngB|G>S=AR4L*=x~Eo|;G;xL+EP z#)}@N>74@lDVaz0(!;CyenxFI3JG^mCm*;M7>)DXeWBmyC(;2#TAAK2 zg^2-?(!c?Zd8xeivv7Ewr>{z1tjxiyHag&HElIjpUWTEJF8IbqGaLUVjU`)0*I4RM zW7rN{+3{h(F@OO_e@cfM7-+FsOvVR$xX%~eJiBZLB{A;huqwB{HHxOZuOaMw`-CGB>PA@Tcy)PuU04ZyyJ)@SY(GVO>Ic z&f|v}h~PqoE@wQs=J~oiVPujf5xJ2>{7RBco-oNTVUo(VJ<^MD-5z}te-PT@xE)&= zMSXBxRqGb26n%w|>e2<;h+YD#`--D67hy~C8QMFS7qPHx2V%dknEfs3D^`JGNSIeq z{Oy}Uft$O#X=o4@B0|%q-l{Y&wJpEN$7^G{q$OH=01PYA!vUwD+|o;raJugyM!yV& zxIScz5__EPehG+UebajnlXi%tK*HwMVV?_0TC?^P1E& zXq!mntY55LWe%m%W=@+4G4Q?oMh7L@pNB2Ss?>M?DwUqq$gA|L{Mo9l^rvKpI&mMS zsrIp&(s<2!pu*~oCIHjGQ|2|Xf}^Hm(0$UpCD%$lA84ggA=EKqt#JIkABBoyva%~x z$fGH=6{=QC1QDCjBK5>XTn6zV5?UipK)6%YwMspHGkiW0-n(<}Qa&kh%DJy2zXh9)APVbCVipG;FrI5=Jt%E-Q zh<0;AIj`LnYe03$WcV4i@0jPSHX)fv7_{*;IFxwOJPLIc1{V_wHBW`Imz3Lx!d``{ z)>uE9qag?cRf)3OMZ( zZ_J6LsoW_y_PYCbunQQ-W!dtw>;tLBZ*NQ8UjF-F>zaC)8pljd$0w)L+k4Vdu$Hu> z$8rtx(H)DT9B$7@c6CllUrAo5ph#uzm1w|)6AfrHyAZ+y8z#iqgFh!Ue)jETgE*Cc z;O@sN(&F`^06fiG58Y*zSp`Rmx4e=|ZaIcd)Pi(*ZJ7G%Yq4^Jj7*Zf-2Av_INn3m zGpDFCKo<1XAPepW(2r>8o@mVBqKpJd81Pw|4Srgz9I6ubTM5_FBaf8}>DJU&&b;6E zNE@H)M5Ai12SUdwmhnAu7#^vYwiJ^a#rK}#k|3NV%zg>i7KG6W>E=pd0PBy*1cj_k)T0<2dKpy;uPZ9L|V$}Nf&K$x>IKmXI zLkr|1sQUgOAUdT%nNnJs-L}MB=Es;~`_QsPY1z!*l1u*BU$DHX{0q*w2Lq}1%z!0>uH*$a7lr!`*uJB)?YjqBDj><60^EC0b^)1K1k zG;_VKaThUkFJ~QcuMiLZ2Df4*PY~MFL+P2ru=_#Q?jQb>=}n^=z$VE!fK=<4#nIjr zq%`IrZL~AA5hUpG6p6_cGKXPX?V-+eXS{Q#6 zQ~8s4M=p$b+?RQ@ZtmC zY`nQ#w~|H&)ytvHRVUJ8pAzdHrc_Zcfb}InhrGsXSl^}b8dk-_4B?6NL()}ax2jya z5S>Urn(jzxEUL`edln0C}#eJrByn^xh(H3yQ(dAd@zEv)!LcS|x z$0}~)jh&b;gd*P+=!33!nrECJaF4ZPFpBVv$n|0~a6qHdf!Pk4*Cg6)8CLyT0{na} zR?fzx%iJY6+Qdu#IH1H(vBzA#H|^X9R6oVa_a0{Z6HdbOcboRdj_raYDlpRKZnwB( z*kjD53@b?d(GmVXx(LxoXHE~;i3INGB$BfSKgrPEk}Q`b92!WH%@|VGnc^SCas*p_ zn?(-M%^XRW7f5x|-3*RQl=QcsCekFu66EwK%j+Z^3*d7$@_bX$nXSkEXN~uNPI41j zs&sO;q>=)XVDo-aZvUoIY8l*V878-5W9hJ(VHNWtKb=#ZN%#20Qo5CDImyyX`aAAg zv7f8NlMYrV{aBQ%ZnFvx1)*<>IWCr@VtFZ!I?Jt}jdHV!F`gl*+Nv|WC(01#Z%!=h z97$@7K`~_h`A%kN-PY;c$arstNOPv2oCf9m)SevDM6K!dy3g`3QS(7a{2vLi8;QQ?Z~y;WxJA=9+JB4+W>Zi0xn(MKb6vF++=w*Ne%kq4>HHIhO>n z&}c7eFQ#DVg_dS-T%uRz$dH2*naZ-6e?u$XlUs`b>5PZ4F0q;};{_pJp{u0_cAL3C zfs+^{!I&l4mutV8SCHTluK?GW?OctX=IW`97k@}xk)PaSq62ZbsW~>`Fa;Q0YgyyE zm!;XkCAt~I$vm`dCi*oTBxPhiZ27>_?9Z26$HFg53@@8`Z#4XUnqr=tLDs=Qciyme zG`7&Ja%CMSpo5sAW zG;$z%4OH7!yqo)qb5pR&DJXJy6n*CKE**q=>jAFC-Gg9R&s4_HY z9hHmE$MGXFJ0_(G;!210D z2-YWx^$XsU!sAjnUj79?xD^)7&$*mG=&ruTKnX_Z{v8azf2q57Fz1P zT#?3aS7eJH2Hev1-zVK6&TP+d%iNrgNVbBxMKEEQ_}1HPi~p24tu3Qvp2UL2BE1_{r)^?b%h$hzx&ACwfa5}jIUBiy4 z=Y9^HfnGa+jM0+Qcz@l266WXJ&mS1?593nMieJ#&ZPGB?1rZds4TVJ)q&q$R!ZPAe zOw!C~B(<=k@5j@aft2|>`YP%eqTurtemviJ4ZF4SV0p4Vb_=tUFP2UM0wfF2Xf1=@Pd~Y{v3Li;N`7Lt|yCS z3&xfmfK$0(C>y-&hs_Xhm5JljbH551dYBEYG|1Fi3v_im+0QlzcOLQrZH~K&l`+}e z`%YFr7oohlBo<6n*S%)eJzohDGs2eU7RW|+Kb+D8fkT~s670x%<}c1$`UU=%Vvoq< z%_h6s(b1U{G+bo%mO!584%`QgffGrS_3vgfmY`TUkez^VELIx%95dpk zTb&WL2_8m;j$d3>OzuW$&|vN2&*&0+!`G{F?YqHn7@j=|zolIJF5YOCOX9OMsl^P( zcTVMvUg_j+G(NbzY)3k|3s1YIo_lRvmIY20TREjE^*xBqsMITLpqAw!hMUZFleVcT zCbx^2pCl!|TAR3C&8@{)!3CoqD8eur-W__%W_J5tn%V6r-}b5Jc345Uof|E)3bGR& z7$Qd7dG#g0HeyshIW?Uvn$R&~loT%Y=W^vCNX$?rE5OMd+yrTW2wLpl>@fBHDKEj4 z<`-Uv_7*&_89iYj{2Gj{utFy}Xp;w>?4WZ!=oANS_Mr6+I^Tm%b z*P!MS^-ZESqdDQf3+1+7vIq>(1~Czeoxcxr^demsZYWl0NCmH0eetn#qt~FXyZ08W z6zHURf|ea=(aJu%jLxgdsP@dgoXSy~aD4sAb6+GrrO35H?=%GlaBV~p1btf&^-K`- zOi)nBCvNr%*=h}+ZQtRy7U;$By(?Fdv&l*^c^|bm@@@RdCGQKq*Tp!i1R)LBeL0GS zfguKyy(@Wf6>p8i`0`a4x|A|-LrS@s7vI2!*>S-kp2Fs(DbmUN(1_eOx$(3A4!4RI zzAh@f>v^@e+{A%;Oa`&Dr+p?J33->v4-rS2e3Re|(DA;oKqlX8e} z=G0<|cYs&C;(hu?*XrQQa1K*(Ae{6Kn@aK{ckRXMA5IYij>SR-LWbs04`o36$GICC zKRJ|vEgioOOX3)?@y;Y>Mac){Fop-^X{fa``CtnBe3=z?j!KSFu*b#)(!>giKBc(c+DyGkgTLA zoL7cZ0eH%B83!)!0x`ZM$KRu+(7A3F9Swvw9U3#&8pOOES|qRni}qhiv~bd6oLyTL zZ-wYzKrUn%^7$tDq0;r=@z@}UAqn`m|N zdY_>YStPl|iEK)#^06A^Z4aV?3F0y#k19{p>Tb{^Mr3i*pl?V7g85pzzYZ1jO1d0k zPW-|7JLkzH$Qam{_i=Ih(DFg~!3>f&QJ2_%PDfO?|AxqyENyLOokV>pJ{00RDv`VrD8B+0fxe0^odBF44a2AMs5HIV_6P{ z`Pziva`ejKGRD{z+l<$-8YAZ$wt61X1_cj5!Tr?=?&ru?ud~M^hw4&5J~!c+MdCBN zEEa;#&3IO^(}h`5C{@>(6azzSYApiEs5=CeIS>y)l>mfG8cp~IgnHC{f@;G5OqPI* z17b6rH3pLqqYM)h8ViT#1Zg5;B~TilTSzA*&2B>u1D#F$3zKk8Pe~f&n{7hW9D|i6 z2jTRPG;G0qmrh1va04O^9BuD&019_f?w!45ZOPUSuHqJIMY9a)^Vl?vT$B4ub9N z0yzqKRtEnt#mn@?Kvh6I#S!C^bAilokb?|lwu2mOAO|@JLZFgro`W1>AV&%$nDEZ{ znOAKWa#qjDHph?ERTuS96^$A!TiZZO03$na4J@Olx8WBafYGNs?w3kn52K~Quh8Jv z(%>+!s?&BX5 z?L*NgOfZoiCQLAqQfej$G&KEMPeW*HYliHjppaTS2pLTrK_YQ;ls3rs^8@>q?=uM~ z?JeH}s`C9GjW00@1>>OBOHamzJ5a-Ce(I^A73xPS?A>_oP+2S#veGNH{VJjo5 zZ_Th10`B+W2qBzx_ABI2C)F9wER}66bu`^No-I1f>Qn%RsZ983O5NI3}ty2w;7Vhon! zcA(RWPH!Pq5MuzPKZU&WK~HGMV#D5ZcyBxhi2>P(n2|*auuj;sbm-}I?sIrG?~;d} z8t1K1DsYe}6$&Yg4*_G<0sT&*R3=|BVgZT^bP$)&*TL<7t)+wYV6hi1zbl@D#Di+- zV2!X3bZ}@jZ(j$K;=DCt71zOmV7wO{Tn7~eI*3c?>)@Av33xT5Y6R{mTK!O*lq_Q*HGfqJ>jdI7N1C@>@b-^&778=j|OHqJ(G%^>sCn zz8pW}z5v_s+Mt#v$YqLGt~MOyHKT`*vbIWtDXH@Qf#?kmX`EZtzDp{2B&a|)DpZ-+ z_F4+78re?;3Gtqww<}(&iR{!>cMug__<+}@5XrVxFdKcg{^8#?9_qs0{|f6Y2% zVn~56{a%V{Ixwpz5k~VlP1fM8kvhaJ3}cbw_aiY0eLWU{#Kr+6LKuuc2!p*x!(gfp zU+^{R?nY6nW#8iesW}P4)>A3lqYu&*yfE0!_g06&x_{^zjQ@c!*jOqSu6o)3Xm%WI zRms_>02x)iDCe`2uPhtq|TT=(8u4*lTJFB}r8B1hhzT41;7igs*@0i+l( zDb~?GF2w*+s3M^kOI`qZLCK*KM_Yg}P##oa35W28=ncw}z-BB*I0QoKYX!3+E#r(O z&?3Y#{$gyyTn`Yn@_3pt;rtJzN{G8735(Yi-Kn_Ew>rZ9<}mj%Km+FR+6& zG>R0>*(A0}k>5N{>)OY%IM91?qLe5kN;E(M&XrB>&f&lI9f=amW#3ACbGSPK+;D)q zE5MZl+-@}UG!v_$d_0uqRY8V6!*b>g<_YXsN|BngksE4SOhj{?4XDG zp;?jH3(U&97nYUxxe{HSG(C#0PLZNbbuqend4HjMpDOP!$}PVm7L^qZcrjUd_ad_L zK1Twp^YnFATqmg}mUaynCTndEZ|msD8wHe=%gFo4N8H>E-}=hi-PoBCld^FYYSu zUes0IXXloWg}OPITN1}3-MmEJBi$S#@2Z<1=JTa*d#yyXjk;Ei0CZ>i=J}|-W}JED z<=FBSYjT!WF{@&ftOyhRXbAo4m%d)jX42DV^JZmJahtw^LjDM{x(~tj7Fss@Ku2GP zwh7yBGbnBy3dt23?gY)x=vD}VzKL6M&lA|O7KVV=-*WpUZpq?&f9?g{J^ftv(SamK zJY7jndFGNV*qQZZxh5{lW#4jI*|2N%6k2vmA9vnnH}%R-cMpE5ESMn@eMY9AL^*v$ z&yl&>e{aA+bpHE{Z00)uy(yb1`0ul`neG1jTwJs5zaNy%?C{^4aW$0xJ`d-w>pO*} zc*EW+#k%# zcIE33+|>kC>7`R})VSaRy>x}?0=@Kv=>omokJ!gPUN zhQf5scy)Ry32vaKUWP+lpqFxp3-nS6ae-dOLR_Gi@emj2g*T1ik_RhipqGXa7wCl_ zV|eLU_gvX|{IZ7&^ul9{bK1gI`OAF4%_l430=@7|MK4{T7amiLc&kkp=%qDG7w9Dw zrVI4a7N!gI!o!xm{O0;)Um2zg^s*{U7wBcR;0o3b!+db{FT@3U=?HOwUOGcupqH)? z7wDxY#07fk4RLItot%9kF3?MVhzs;G5aI&86a=@ure1~w$5y-AUrJ%RKrh2#x(6FZ)=SF3`((m@d#u9fCYL9Z}Hd1HCi|&Xq6FOOxP+YU*WfhztCsIm88e znIGZ;y(|oI?8lwmTS8o*m(~y$=p_~60==|_xIix}LR_Gim4e$*Q!iW@$w|Ln?Jujt zbb($N_w~{>_+{@1(*=6z4ATXA=?c>Ydg%$%1$yZX(*=6z3)2O9=@(q7rd|d@T;MN- z5XaG;v-?np3-nS7ae-cjLtLPja)=A`QVDT^UdBRPpqKFw7wDx9L6V$~$gBFJ2EiT6 zA`@5Vm%S-W7wBbfm@d#ubC@pB3s>%QGSZa%0=+B@(*=5I3DX67X${i_dP#-p0=={W zhdEP;WyT@u{Nausy;?z@R-#o?7~6e)Vk@XmEzr3>v4-dq{Y9UsJ#Hp+5&BNer`6@t z>^QA*PwYc9JzG?LYIQt2-4lIJv9yHd!&oT9@6voyE}vodwA%4xf28T_9H*3f>T*x? zW2K{2H6O-Tkx!52)8@FB-P3%>oqe08Z*ZL2+*6NxVx3SrdWhz;TJ!1Ed{#K_75B8z zabM@2njEJU?y1*3RooN3P4ii&`SfW%D;@VS_tfIJcetk^_q5XS>~l|J?uni&`N+CR zzh<(^u^x9%t&U-*dn&o7xsGAKdm497tOA+|LhEwsJUn`}V_oOiq})@Ndm466&5q$J z_f#jWSua?ZG?Om86|^MlTqX^UO`Ch_aZhFUG~cma?VbkQlT=Dp8;Si7X(k;mlP1Sz zg?s9CPZjsH&@o)+o(k@%!Ih*JC0W5YyBN`j$P8DHs#j64RAg6C#A9rVex%@PQEW|w zOGU=Bq+&|29mQf8$}Sa2O>(O`Tq+V$EJKJqT+J$geBz}dU8J#+41t!bMU-7Ck6WO@ zf{|Iz@fK)GAU6v}SWR-YC0(FV4p!=6&~m8=3sG7sCpDLfw5EFNR%MWLohY_$g>@oX zw|aW|^OlM#;A_{Eyrm+pDfIvqEdq|=jcZE#vcgl*)~5InUz;+p z2KX8+F6%`G7OYJfSQF@|A)hW9gc2^t)d_z6{A^a%Nu3l+iH2EM0{H#Z*S5n z@a=qgqbz*ukT*)gw~OSBa`3HF-bnf3!ppLmOZeJN(jYe1B~(l!RF?`B@8b!mdW4E4 z5UP#xDhlSXOdjl1xmR#3o(!Q_LN{FP3vn#3!}W(amfqn8LY!E}=2r-DEU!y96yjKT zhbx6RYQW)!LmbuNaODt3oj6=YaH|QTUQ#}8EW`z69}jWs{B(8b7O+4}5P1e=ZwPT6 ze!8X*7nGg7wa2s5PsdKy!v$q$-{|4!2CnSv(sEjQ3~@caEUN@3qO%M^`Bn=~Oha5y26p0T6m9u}GIWHvz($=RE+|7+ zh`ZF6vnRv_W#|oYK^gi4C*oE4QorENw`Ex2=Qj}Ix_n$A>*=(HV-uubO+c=@&!z8mwDcZLMZ0P$9f0a(b2+`9O!De;wDc=Y zMT_eb?WE~fX|ChU4%Z^NTL&w<+=+lRg0sgmuM>5R-b4sO}|dl zH)#4Hm%i1dr`0tT?I@{aLe`{7N-jytC0Xa5XkJZBV`}0~=yt9q9(IY_T#^p=L>p_8 zE+lEzBxRRmg(K{APyOymoWMPVzn%o$`1e2TBf6ANO zl(~cCX@5O*uby8mHQ#6No%@mB3tn?X zE!K}|-Y#5aGklPx?C{>ENfhCd9DyWz`L3k_=-{i7y?s5jvSto9;^T=N-*XcP6!D^{IGPPw}PEo%sGX9>X}}0$0t=hXXY}-n1LaUbRo# zxc1xgTW|9i_v8kf#~xVk<=8s$_nCX%xdTT9%2}kN9|DsxZz~(W%9L-X0i2PcdxC&R zbLHxeE@9s;_7@(8ou#sYHDY9hy&6h=Y+Py_*_qSR zWieimb2xF%ck}_@skhT3lcmkg6fS?<>_-;VaR>hSKWgM%yxj%d=!8$!shJt}YNFEl zG0i+h9)G?K-$mmTBCz5yi!pAWinwjq^;~r7{3kdeT7kdMMW?R9=N%c&6><{nljsdK z<02-U2Y9$Md>jY-9&V+N8xC-=Fv zjXFbIP=>A$cd0LDPlyZ3&>P}{GV}>f#A6u(Ir{~7zSUWv>wys0<;zkCc?NP0h3Nu0 zOJTY|&SAlc2$b^@KfkizM2*A+vQ$D`Aj?>Y3uGA&ae*v#n7w-us31Q^Jv>~HUz6aT zi%xOjm_DN66IxGVA$BEoH382>rMXi%iSU3*bm(#7A)9~SzT~*fjqUV&aXJcKBfzY;Bed}SzNGz zejf3u3;y!tlY`}HryO1Gthygz;fL^*>xS*Uh-l$%8gu8{vn=an_wS{wFJn>6O>g;H zWv#DS)?2UNx3Yc#Cm>B!)>A%MT~=DP0g-B~gmB`6FHAW%^5cMNRYB(4=0kK6;9l=k z_Rh*_KNG10nJ%a%i^SAom;VOHyt#T+N4NPouRM!kM6vVq8~wy^Axm2K zBoIpTw(W76g+vBNc>jPx*ps<+@TdYDCIZ-lo7Kw@S5C?;m;cNgTFyI(XEeT(*tem2!(xK5qa;2as*%}8_cgO*#7r_fE_#>D?!I118kA&a74sTPDJdSc zN)@R`FI7HebOLBDtmecmUlpO+3<_BbYF3Thzj#($j}zyP?9iHu6yoQ7HY*C3KL@CG zoU(Z;N{&GBFDtXO@DwsGNp`E~fehCfA=lyZtf?y(*k#4F8)n^E1uRe!e?w18h+(*`?xH(>(ZV1)Yde%`~wo(+!K@=*Jr26rn z9E!qWe6bwpK{yGzw_jGy+9GJIfw3cVW9qxHMkS1R4Q~D%Fy*gvtykGpAsXU{=Y7SZ zt)x8PQrr3qB9uz19%v*MBfmpQf=YV!dz`*D?CN3*oZYhSNywPp#MzDCnaiS{9cXtL zEgbwfX!R;LO(weG*@7r#kkh0nr>D4sk#{SK&c%~qC6RvCb;1)U-Yh4T(%0Mtf^HvB z<%%hwH8I75nv%zw(^5!f7)!IP{%@IU6#=PK5np@Xi%6(o$N&;CtZ-N(!x=JnnW!C9 z`g4!RB4LG~m?i@$#jI*Hnie{ipf6B#pz_bX+Zp#6sk|5W2uM+DtNi(zWu#ZF z0aoqnELwdTst;WKZHi{CV{vP#{P>8ZmdX<<-b5-tdm?nC^6Rga0+K^5mA^dVV9~zH zH)!fW@4xEpYGN9U#M9| z>JFX%zbv}8^Piz;-}&Q~IMH&bZHX5P8a0afMwa-?HG8$h3N2K1m5D6zgNQ>-OGF$j z+PB0H-x&i1z_^EUz|Ars@-~Q0irOxETczGD7 z$)!KCJ2Ci?-8lAYH;Ty$clwnNQV{>a1N^5FC~ z9c$lNndM^`J;aioH-;ak#=2P_Qr7OPx8`d3t@nQX~rbRH8ODRoFt>DVC5|<@G~j z1frfVi17%7dF=%kqj7%F%TO-+%c#DJm1AV%CdFoZGI~y!$5w2-ATB#NIC4m0Xy-WY zP|s(&2$9jqqmR*M-2^Z)L`B-;tOfr=G+DqmX+x%Y$^_&MvKg1GC#lj-z97S(kk3H~ zCwUyeni=Wz?xSPMnh=|(r04}}n`e;Xq=`~|bfOf`n<&LeUJ69~D0L*2XZ5G4&hI}e zqED#KcVip3En1N69@$wNQzvf!+}aAGvcXS&y7~<6nWwpGw6{CD^>XeOY*Cf!f{(*_ zEaR@h$0n!F#PuGyNGx#+f_shE{0-3bz0F&CvA z0)69F9N9XCt0e!N#i_ID@x}|^<>!s-a#1ReK6}#yY{r$%{n_!vSSN1Yjmvfuq`nKH z``p>2?2BOR?bG8AHD2oiuu|T)4h|Z0dzbt>s@#BrX$1CG>3F_}PP4D`SJMZ?-vi+pw#7 zI{k9XIIk5zt1Um>75T}R@e^yq8Am2EuZ^|Vwb!xQ;SfiIh?<54iV${4G0r@sY544@ zq%er4Jr1$)uXsc|MMyr=7Nz(amRx`k9=L9l2(&4ZP#UxH%?9B^l4GDR`M<+}t?i~ng8@vpDNU$2fuxZ%#qw;u5M3!)bPhfNDtCI7cozEFM{ z4e9F8>jVBeOsb)uFHXciS&M&%^yMP|AGvzq^dpE`@*gu1|39gGq5RDp*QosIfWIJW z@xL7nYvdT7eKWQA7b5DM^FJ$|KZpYraH@vO z7rd!j;d;you=%f+0?vZ^M=z+({k+<_{~7)eCytfAI{((amcqyY}++}}FYYyMZF3rF+MZOTU(9ij|l`fCmdk09Zv$#Ad|)8G7n@Z}_Y7YH{;ZnZF=IFb}UP*yShwFHDm zk#Lq0#`M=35FSm!w<%#vf2n}*SQ0K&!kGTr0>TqW*wa%(e=7pI6G?Xu=>{t?{jCfL zPa@$pN(lX#gQoQ7gN0c~J`c@T#u$4QQ+}{8_m$HKG=??65By^~fpe9)0iJdfR__xT zV=)8VIcE|n=LeMOu182I1}RGJ=orvz>1GcnNS!8g8tRKnxkxa|p-XBY*3RZ>r$p(;Y0LirM?E|r7bG2;q^|!jUXajQR;&cq$v=jUj;EhBZ!gC z0F59;n zm8HEDOJ?L2q5NdSNQOveM%C6n97|>jA^P)@{U7N`M1`K%+&_l@6Z#b)mU?5QRh6p> z{bUs+!(Blc)kb?Imdu!6ROlxgL$Wa>6Yb%;v{*7#xpu>Tvj2@eiSc4H05?8pfdB8S zi;QMaN%p0ph)p%YzFA*tiYC~%Iwj`U1pDSF;zpWa->RQ@iYC}MpAwIg1W&i7R@f41 zR{Q3MV=jR`qIeyf)_oWrj=Pi?0qx5usE&+PwhknC>XBqal%O98o_fIaoSUbx+!kx6 zq(bDhRaEUi=jI3n{O@sdHpf|h@ZE=p&L$he%(vkL91Us?j>`>+8rsaaO^V=6SZ~KE z?@|@Z<~B!5hR>Z0W?XJ{wD2hrTyA%?@cIZoOW0~tS~izbTC%AiGmWfVPHExOBKQj> zxi+ljY18FSOH0-OGQsQ|=Pi&HJl%o^$EW-7=SA?D!c|+}@|2M4^Fe0XWx1u%vgNsR z1}?WXTKEeh_-tV-ZFHg#a(yAFOyezgP1@9r5xh}SYlB^$8YZVH6{A-`+T=4MxLgHk z;rm7K{e-Qy=4Eq(r6rpMGR2I`O_mmpv-2!mZnU)UIe?GRwLEpd$iUDZ2d=e$1XtJ6 zRzB`pb3vw<(6#X0j)e!V_2LMwuBClJ+_eq_ndv10*TR{97Ot+PJwx2J4hETELf3kU z1;)hpfShze)+iqQln};Z#H#~B#D$BMg+!>r?L6mnRQqmwm?pQ(tk7;#sSv#e1Zri8H=drv?pYZQ-d2=vz*P{oRS6sx8#R?ZHkDR@|8&1*GnOq!v9P^@`q zO=(I2p;+?+P8xqXXE-1fYra+qW7aGOgksI_bkwkBC7=^){)Kc^5&yA(P^{UmgfVN5 z2ZUnHBSGlZhPwZcy*B}mvO3?!CxJi|Flk+iTaAhebwdS=hG&6suU=Q&-dk z(HaOQX)_&0sfvwz>KeBiTd5HR2c=A`R^uL(>Zn-HIH;(IpjE#6exCELnJE7L|L?o5 z@A}Ghk$K;E_Imno=_{E7nwMVs%=&Zo`NKta*wE((#_9Im-l zBn<83R)FwPQ|8OH+RQ1E5H%wM1x1_3=A~wIprB~;1}%tZzc$MQ1x1_FwO~k_Re^${ z&E8qyCfqh-fpVhF?G#|BZB_>giZ*{ofPMDArUVL#Hcvr8pZul;N{BY^S5P7O)dmWR zHaFFRVc!-gDB3(x3sRdiHFp}dS@Muv{|2eToOFSVWqk6cH85H9EEa>QbpS zSV@|sR1$RtDhWVIncfG?ydW59umVPu9RMRJ0$@DAGy4E;3j&q~E`Y^20)Pc+0I-M3 z0qmh_?1QR3h{~{lpc4BEpb|0ys66BjDi67X%0u4T2YE*j`6?H=*lYl~5Eel0k>eou z$Z?Q+-T9+JY83A&H)Brgifetwyfetwyfetwyfetwyfo**V>=Wp&b7^^ta4Kv(miGz(miH6ZLMCnR+mlbkra|{l=PW4!z0}x)Fa&? z)Fa&?)Fa&?bghfhA=D$?A=D$?A=D$?A+*;ebd?h7kmV8TkmV8TkmV8TkmV8TkmV8T zkmV8TkmV8TkfnrDeruI1hX{`>hX{`>hX{`>hX{`>hX{`>hX{`>hX^H$L`2rZ>g{Em za3>xS4oZ&*2c<`ZgVH0yLFp0Upj0A=Ql|W#VR|SX1RhEUfrrvT;GuL7C`uxbW#vSR z1I|O>fb$SI;5-BlI7L8kvbULNaVmS@oXQ?Jr?P@$M6xGTsI#P=|8Cui{ ziYiB@-NJ07-S~E}BnAaKtYZCwmR2#V`FsnlEK5b`I$S@dh~=lCrA_PeEmU7BLayQZ z)mmSE3Un1qudWK!mx^|Y)KC8utuH^$M(ljPh3a<-WxAN@uRl%e%a5}oE5|TH^;25E zCrp2>)|Ve=Yj!^0LiMGhT_W`3pRV=g=f812DvZ(m@d-&j^7zAXK4QH7YR;~h+FqYH zA2oKhS${QWhf7VaPn?h1xSFcJnzL=CmewcEr$Y^>D`Y_S!=UaycR0>R$|w5nbEmL| z$v7Xit3Gi)-HNR@jIA5h7_pF%{5}y2Qr@mC`+4g@HAXC~(rV#tC!^TbhOs$YrV-I= zpNIu1Zv_V zimjYKZZwRQlTEa{>MBzww#o*fSkc&$HV8$<=#;cUC{`M_qzyt5$^AECilVm?5!wAW zV#+5GvAh2}BBmr78N-b!Y)${|uC>Yk{~wmy6?Vj3@No<#O{xF>f3=fw{kQFmr6+MC zUOTlHvx(M!izsa$_3M=N-zr9(jQl!f{kQFMZFTFddI&QuCG7}YJi1FryW+Howj;6B z*+ff-rOqZ=LM(MQ(Gp^*vx$}vp)M^`HcN;YpG!!a5@HiAA(lFuXbG{@*+ff-rOqZ= zLb?JlEg?c(S|+fTkX0<^5;9LK*+ff7TOiRAVyUwwEg_aVn`jB?3{$c8d=OYSo-gDQAdN*wEyZBDgJMqE{c|Y^2f0SJ-VQp z{_m6qAAH!bDUCIM8x<>dZD-@I|NlSOq%_{MN{vZ=Hel^V=nKYse!m$=uA+)5D*4%f zWg77rifY4V!{SdARkfm$pAA^i>0ldDR2w#f?sO~s*wLhTd_}ck1EQ3NN?N=$(X}?6 z(X}>Rqie-Jac!ZEuC>KVQA~4ebgfNibgfO-=vtf3=vteu(Y0O5s}o&oi!r)Zb8K|2 zO=oniP1opJo6hLk6d*}-txaQeEz`oL#pqg_uBO$kBshWFwmPG0HOEHR+H^+O+Vp^F zF}l{Kt7-KpSSN7XR%djr=By2v7Ncuzx|&w6R(AroZFNT1N>0$U7+tFsf~LjjTAQ9H zy7q5_oakD9gQ8b&`-PhErg?c3&Kv=nJ{N|m9Qy>j<8TWVL9O3trksbsQDheQNv%hf!t z&<3C!ZvSI}rp($_dBFRD@_t~eJUH*&Rr-$0_4=Xl+ea1ZgOqVn_Yae?vOIL|Vd-pQ z$%M)uA8qlNvUCoz=gF-rmHVk?9ULJabnR8OlH2u=L6WHc(m zDIyrTLFUXGkxK=%!uGG~5UvvPzpv-h^p8bl~e1_YcN(NHp$ z!v)%cQu&!*EI-Kze$WipqVJp-Pp-mGxb5NSG|GT*+-kX-eOe~x*FIj>auGOrd0ETF z`1x{K%O&_Zd09&xezscHQjee0m$l5m&rg@NT#BD5%j9^@Ys*?L!`scvS}w=WSIb&{ zgP+@%wOoOpx0kgv;Ah=3xfmC3v++hBt@Mh&aNe3yWoZ0XRW9M#h62z1?7Z#3D0_gsNm!U zqNO%fuHBjrip!t6q%e2LhL&~6-2u3o9wdBR%*CI`W%HZ|OAc@AL?fo!U^G4a(N;FF zO+M~oi;3q=&X@c^F^S~2DZFglKFU4g(kO3a*gbCD<6z2OHJKdy&P?^U1+R;bjS+3r zBK}0`EylAzn8|fWJ`D!>VmI|g*)@+%K~ZZxMeKbPP^D| z0V$J?3;v-;>eRPGg4KLPfh`{*nECR`n{HJx*Ip;pgfFD(ch(id@G0HjFei8 zPFK23E6Z__c`rU-f_R*o?yx9%vwQ;I|KJgRRrFg&P@d6VtNdlLWaV@9qax;Kz>0y! zd>TL)@wr6Yw6xs$qS2g{(^aKy6kL44JpA}E%U3{jE|I`E3fHqHs*CZ9jrnT6XJUz} z;g|y&2&_kh2*(xuv?((i7X!-^h4?9i*aMrE9deb`+`B0&O_7VA?IS;eq0<3natL<% z`Yk6GrRC0-a*l6`z+2juQjYGx(N;3qPBsGwQd&_m?EFS4{Ox2GjrO<}cJyfWpTUD) zTmR?NAO3#RPOyN+7`*@BE;Oe|4l^WNF|fq^OcWHn4E`VA{1|`&X(uo{JBL|Y)ZlS8 zXbgh9)CGBLtZC&;7+D954Bn@vEk5bGiScNwU*i}Vr=y)9GZITjH3q4vp*2#!gZb;{ zxG2k+?xR*r(ygan!(OK0x`>)xJbE3-X=S_Y`U17=^XM-H0<2Q=%JiKJuu`^E-)ZFX z9?|z+VCs#)=g$BVoCf4nvb!MUtPoGb( zg@ju1jCS^7EdDi1rmtklk`{y3kS%f0B!I0k!UmFg$j0iP8gS}l%fKHL4D#@)2QR)b*NBwoJpOoFsBC%)DbEQfOdjEJieCVsM)RnF0{TdHyCXJ@+L)MkzJpO zHFvR4?W!-=^P+)}Z!caeE_SBt*ypTlC4_iG8=Bp`c+K2cd{QHZ$1~AxF+AqTu1^EJ z6E)lh*wiq$uq5q1^wqj2w2A(l>??jz%!7p0W<-L7W7152v4>NiW`VxKB-Aow&NMM4>~B$2%cMDmv8R@-9f0pl#G@&4S&ua)w1}ou zfjCLTr^ySl@ogp$SknA^UW$uZ3y6$WM7uAkFh5f|Kf3^Q%7iUhxfajnT%@ZgLUcZj zjO?!o2lIGgcBFazW4~|Hi!_{E>*1yysv0#A@n*UY~*Kw^<)HO`V;1fzroWzpj+9akIB9dlCzJf)3jX1kaf_ zu36tlg>+}5p5hI>aW)G4uZX5*RG3Sz7dtxUeCX#HwWBF`HqRp6`htR?epB7?kI>IE zz?Z`!lsNkW^i>^@N+T}zg-ykp&hIRM>^dX$Z%YZup+taNta@qW(Zz^{FHt+2Y}9I(0x6birAjb~E<5#;q3*CIpx+8lLbt-OigqC zK|J~Z^zXiZ2ZN(o)=kFW!n%q0JFxCh{2f$RWiC{_hZFCPinp40pGLakJqy(OT=v#3 z-i?4);0_|hdO&<20*Kox#IJr0h%y~cR(^+Pb5VZ~pFxIl@+h1cA=dwjVkrQyo@+!b z_Yv40O5Vc+HljaZSGd5=5ziRtR=(M+Ad;Od>FjFK=J+86k$ChGbj*Dmhxq=^@Adug zM`EZ|W|WdSfMkwWGB+lf4M@)`#aEG`JU>lO=k#wQ&592LE?;^SC)c|CKZtMC&IUYu zY-rH#>uDbefF57c(V9eGFYr)lye7H6emnKIDY&y%dB9OwVhQQn6O&-G zeL9${&*wOxq~$Uc&;Ca7lg5;#u{BokB3^ry)EjSgNUheQa5CupTvD6n38_=h2B}k7 zB3XF`p3Un>&r9l_By}K4f>b!xXW4G80NVZ{ol=xWU()HstiFm9R%{l@%QU`VqfTCGX{7tQ#X#AaP`q0b?={|g zEh&%UUD{x-$S#KjKj-%9$_<$G3QZKlwLxUYdlzKA`X2a1TiuUA@bNW41po5h1;Ib< zd%7wHi=v&Hbk#)fvD$k)&U>8VJ)VpqB;^$#@x@$N2AC~mLMlY13|3yMtgx$W*M8F< zK{1qK-PXReOf5OhmYilwUKA`j%q!{W9W2Ta>abwR_dz~kCOGqsnz;PnZKA&M2X7pC zB9A|KJ5JyDgSRRA#vi<$tZ(v@sKSWH&aoVgaGKI``6J5TU^Sv&GPnOq zwOT0}thAE@k_Op4$5pYYv<~liEwkbyM=M-AiTM}kFz`rW@ubVIB3V4iSWWke#nRO( zL0__wiGQDK}>K-tSx_*asJ)MN!YrUV~W| zKM;diP$ujOlSZcAF?YDQp(0WZuI ztAU57W7*7EYn}-}`iXg(a5+pE#0Ec-EoMtQ;b6Jf$|4o1uQpG7w9pULJgtWQi9qHB}khIzQT|r?7NQJor zP>5eFWy|P}C1R9Z#v0M*M~JZ&<`CV$#I(8mJ{cXzO3f=2B{Br;CK*8?1CzzzA`yKh zEaFrCEh2Uo!~5wrPrHhSE!}3RsqtQho0#`f2E5cnDHQ8=o5T6ybem;VxzlZylJ-54 z(qdR`INyKny_fNQ6TE+4w|VOaj%L5#It1AgScj!ikUi|Z3$j1yd!SFM{4ogrmIxxa z+j|!T*W34W)kv|haR0X=%uN6NU#Tl>ZBRGO18T2*UWjb?hU(!SztZmNg2iICn4>yS zDa9rQi*3(hiRzIA7MCBq73*7Z-cDoChO**`0_0YSl>Uubx&<0+#t*;m$Y;ZQBFC-4 zSq;{fTV+hMwA}1TXt^WV4<##C;n|FDaawL+u;pHd46#C4e*oW@@W9NuXsYts_G*=W zQT7ko{-nTSQ8KLfi*~UKCPE>YP-v|W*>=PUo?>ARcdMjO#cb7r0&!i{5#fk(I^Al! z*lJ~NwYbFuvCxI zJ1opYs61@kc^%d?`W#WiQA~AZS;@($^k7acwkAh;zi?|ws#|L?YV|MnPck8~&so_9 z#?d3SqOCW^;&PBJrc2^jAg{$RxzFh8X4GIe)h@sKNeWN~2%?QkN<vXIBr7P7z%=I|bmZ!_thx`4mrBULett`jMvPb?MgH zK|wnLN|@~CS{fFyhWAD0t9sdEX-Tx30dER`4qwu$HzcXkm-H`9>hdN1Lz7azq(?QW z+n02wCcz$DjDOIiUSHBIO|qSHQFf&)>B#gnQ8f~F8AD+ekeF4674}AS_AslW>_V@G zb;+H!%m=^MGW%q&mog$cj2OWlS9=#&xwqOS@PWmmzoKldLgbR8M}sUts%dvw_$?NG zQFfeH!_ttlWlnWz_-TL!2(Jb*U7%p24h@ZiEe$JV6^BJIAy@l)217qgV4As#p|vN0 z3wP*}sgj{fQTAS~3Jm0wZbbH_Qciwc7l>K|%M@Zh@)>h(z1QP^L#tiDKQT~VcPo=x zUdnd+%I@x#<)~Hm7rQO~DhK~YN*_=J^2?n3tn!x$u^k?h~K40yygfQsin z40>S@rAUH;(q>7!__dJ`RU^`zcJ~w*5WBe&AkxvB@i&s4A>g>98nOGVSh=wxfeO&4 z1VwVFqDK}tQ(O^GJy;^a|Zm6wVAAO)qmmeRFs~J?t$w_&H1I)O}O1^6;!V zBeH z--|r~Nw)=0Pz-G}t=1RC%;Y%&Geco$LpKpty(I5$Z=|l4bg=D3!GZ`pW82sH6}J5? z7Zx=iVFPVoH)FR!Q8(IcJ*fuxu^9C?2}NA*y@LbF4siulzn}_p=c6vkstv(;bAKU8 zTB(Z&^oU0%Ej>buL??*P@e^^2Q@KPbOPechTC+YLeFCo{udP&e5OCW3;{`TRWCdH# zIj@Vc)%x0Jz)rBLHSb5+O5q?jsJb%96nwZQlq+I#i9{i0?-l(9@}HG_$HZFI0MvZy zxW3mWmQ;7Nu%`VwWR7`<_9pvc&Vg=XJDUx4QJS1a%UEx?WFy`Ra3ffB#@|R*Hr<*U z=FuEK{Aa)%=fND2Zp~3$KE5XgF|K=F%u${%QXB3DGI>8$-|1fD{TO}kb>1iFyKAn$ z6Ekd>r_NcN9f)>=PIg3~BzP*!od%D{LK(;u!0JV=)+2uRoh?+UneNKdPM8>>Hdf1M z+w2xZ5}QbJP!eh}Lb6fz#A4bYlROqv{%RkKnF7z!1<%sSefd7t!q|F_(CI28Af;2C z0x9dnD=G?Q&kPX5u})@VT0m1n2bFWgbD|u|6>PwyB;5|0-&LS+Y-w{cwJ0{1Hm{Hq z^%au0RNr0UUnTY65IwmHHCC>7e{1E6z7=B@S{j9~q*gTQNVPC`q|JrFLCl)Ft(&{M z%`IC@yCa3~N?aLqiUUQ_PIqGZoa9@|&rmMFYT9fD))Ud^!maiZd^s9nn^SzPw)}^B zRVR56r%-9We$(OI6=Ii1Wn^m4f=kRT)q8QbQ)FWrHf_l;^o7!xbQZ?B`e>= zv)TC)XYC>sur~`C>Q-kfc0~o4M(05-=MaZ$dc)bi(NF9aN|K?}WYEa*-$nd|^cs5E z3)YSC%F3ui${s;}Qi!oc1Eo4=l%gAU>o{9r9}%4(SCRa+-VsTUbQArHU0{^a2h1pr*c zUzfd-=1-;BIt^NZq?ZU6F1zjlNj$upfuxg9F z+0)c9yVo}+6ta&1xty*LJci?m8D)O$Z%my3bG z5xB2B;OEo(2Wo;MK9(hB#bv?POIZp5pU(TCYe^Dq?jarIUJN}RnwlzO5WB1-d$@4X?|9M zt;5F($_2C@FyoSD9m$2XK^6!fzd`NQo#biG;^+n2wQ4D>BjO6MUB~5ZKyqi2D8<(3 zvOI4O8SmNF;lx!02m1}r_Gt$k>~}dsHw^aM(ZRI+@DNV=5qPp8IXOVT%1DI$cmoMjP`z7Mv86h^zK{gjuhqnMt#qK z5PAQ-zV~3**%PU+Fn>E&hk*LfN;vL`9_u7HPxY{W5u>B%%H z2ta0jUF`2lns>=p2W6#BJL=FgvJPl%uywvr$AD676*Bh6z*NL}{%+bTdbCJ>Qv6_h zJg_(Cs{0759U+yJB> z+|hyZrSe7&NT!6f$3ZPg#siUOI zU#ODW`+&A&WWprZ&4i!{W;lKUwhF&sN_GCpD1xi2v02`v=s66=kTISac1mQ+l)5`f zi?|tPVY-PONK8ka$&)nJT~c``Oijzg^M#i=y5ad!n6!4m^L4`Wbxec@1e#JVN%ir9 zTsGoFHY2}?Of0x`Bno${7fze+;^d>AYl%!7PUrHGq}A;{F#*@g37)hTAk+goD92+U z<43UU^H_(@%1&WZLstYtV~NN`ppw{zTg5r*$ST)vjVhbdfLNt|FIFk2{{<)jregen zn^M7H@!8qbNv!uTvO`({=-Cx`=7}IVf>32%JWHJ1OO|5PQ))suVx_Wjd0y8FnaF+8B=&sUK(VI8&r`=Xgl# z9+lSpcs5@lUHhlIK%H-^_h^VW5nT}`aQV|hpflIR(r>As9-h8T7G1jCiC{Fi(t8Ig z>Pj!_RD&nivcvVov=~FxMK(GS67N_0n`a0kn~{+nDbQr))?{Q4mys)ijQkcEs`eAr zsfql@^-?V*%{TaTQjX(b@#ylVhUJlx=0;>dL7-rEq?8mG7@mpL;rO0>Wfin!SPwSZ z+jjh%OGT?d!YcQu`R`eR7da;-xC7FXRjS($XL8M|cp)p<#8z<$Ub^MSaqLg$|ECETL&?P?mQ7Y}N-lQpkBeEz zP@%sepraYrOTTp_6~DBpVQFM`Q8te3M09DaZQ-#3ckJW)je-HBP0Q`W@QcW4FH1~X3NfPHM!P1&pE*3< zGco>d{7oX+>z1F>_t=Hty&&(VwWak#QBu61*#VY-7Qb+s(zczY?X5e9DR~w2m%>3q63e_vNI?~H-EBhe2y_?BqAZ@E zz7CJWNS1NB5;4`nle5y%Ny^1h%3dd&m1y=P9MFU?>A$+!uI%dRl_kiISUR^9w^)GM6e$c?v=KVW_M;Z${OPzG=jFv7|rDKOO;{B$XIbFOl#uN=b9RxV?lN}xu4>tzzGB`lFDHl z8LZs+S1HL2B<+noLY9K=j4}feo#=SLjN3vVQ$1=wUAK+f?{RF3a2-dqTUHFAe+`pz z#Uc@`L&}62dXG6P=@w$~Mdh*zxL`DX{Pgsq*TKaWvV6zY!%_t1$OSZV^k2SBAp^*` zjj+KK)kf|lsv&P~=OavxN3#;uqwx#ds4mBE8-ARD%kUjB^K2ati56wj9DAHQhC9trHt|idgPpV_~`Xlf`7^QFu0|B3)f^ z$Z{V;hB~onG*P`nhl+n2-FLht1{}CL1Am*k3*t}NeDzAJQ6h$GIg}a^k7mp`kX0wL z(jxwi%&stXQ-!cUj{#vM1cWWXv*|{9-aeuXgk>K@$%%;viDF{nF7lnYg>0+q+jpI~ zK4^++Ow1>)_+}#}#j}&*nfMz5maJUx^5=B%C!0@C79vKGh?EjBnnWDz5-}_|r@jdp z3E?Dm`YPZdA&)JQnwziLN1gZ%?ZYBD+cdUIh*s!eu|cVKYl490Z9jL<_x1WO!FXpO zjC0OX8YA54gsJLK;ZI>i4dKHpuy*6L@wai<0!@XXs&16?H2~%gh<*sbeYXJsNUQp1 zUqFX%5Fk{ZM}bFI&uLh_9>y~Z3o-b~O~gB=hj^!ubK{wh2fR1(eK)+nqwmxCz75_% z4fCt{J~RzYK?28WNz{5gfW(eA4Zg{0G;0LZ9T zn8OWwfD0T`7TKXuj$=kiiZTg8gE0i<)Y9e1$%zi>rt|eXIUOsZe^O4`ZV?W80h;ay z1_Z;^G`iki4WRY{@Z3U z7(6U=C!pjB^oZBo9G?`P$71-WLh?o*>1KfJSl9^pXjil8@vG@fi?UxK33(Zc>T7tg z_!2ZGSQDn<$+25V{j_jzo@rwh4201}B0^5xk%<}s97_&cw+Bc`j{Sl^aa-e$PK|3& z15sAV*gy;i!JQ0?JBTvzk~sCk+{J2~$a5gxqY&@+LyRiK!rZ|wI0#w>%mQw_18zrw zBbJQ}G3pa9=jufhO+OatI5Hd_*4*`oG$Lnp2VDln84ZTsDqgeP z-^?+C=CBCET~U@DK~Eho)?p`r)?abFif%4y+(FgSz1;C?(7)^i{K3v9zoXP1i-U8u z${I`%!@lZ`zdEoSUxm3qeNVjRIUX?c^P(;boJ=oEAQ#T(F|;g^-{;?OuQljt8UfgM z)zkj~I<-yhT$cy>4*#E_1GqpRmk0XNzXWLi(F%TbFTxIWNPQLj{+|6P_z>X#pD6gU zvA`SZjMhHvz;aa(uYU#O-0nOI#wn$ywHwtP(X@8slIHo45N_!yY0)_zCyBU7uzX0Q z^16YMh^#xN(veH?EcZ%fIl5&lN=MpZ7&>2Rpq+5pqK?ay=-;ZQ^%)1CdD}LCaI2~G zVuESEVM73}K4smp%%`WJU(StkO57;$a06rPLALmtJn_Sr$)@#}K_I}VH z`+7t>kmyRY>tt~{XO4o?c~G6sd3ZLnk*-ds0Yv!brmrJI{BVwQei=3JHlDDKjssmm zeft|8m*LN@OJbu!drYKc$2+~WaT_On>&!Myj>CG z?Hgn$Zyf4TO5O>YC8zae^1_EUlu6FNLgVYb-O8Lm5^XH5k;L%@I{T52CgSjh%vW^s z(MJ`CuqWL?|{LAV-X$>>Qlgv1Eps<$(^_^D;{meVmVgyCe2IK;1LT9Kx@~^ zFWRes^>p-9(rh=-=E3&i2Dr>N_UfIr`~Auc12rYh|AI`Fm_i`y!n*BElrlL1uRl!@ zVJmNa!*GTdF(mNT_a>(dFyOz8$B1Qji{*nA#DbB;Wr~AwWy&zLzY~^)NrT*47>~|P z;F>HY@{666$Q__6slNXlkyoRV)^`&iW24y^5o1(aqip_k@5^H7Af#iNY^66I^( zk?}@5>)tSClL*r1E&L_bo*cWi#rOI=Dbu#_BuyV+)1TCIQUAR(4QmP~-pQRPpa^!u z>+Xlko3oS#9g5xqgnV<76m&-G5ysB_7(Q5|8j&WucKEF-wgZX}W{7FnQF^5rGD&<$ zbOd~e?8YW5C*s-s3hC-YWEZCh#7GM>k0L{!a=(G>==w7j^f}csnVA?$zHhQ5kA;q< z^g`G#D3qb%Rbte2IGZc0Q@!p$>Ng{YP<5Qk0ess073+$MHGkZ~-|q`|6Qj{h$hgSw zQq(U~9%Yb`fmc`sVmQdg&H_(o8zNf-w~1^!*xOd|9!vpqr!3m5L$l3B42k66Mq~)+ zQNCoCA+UMf_HlcV)sVVu<^)HDC7{}yl$ARaVeK8QA8$c8!71?{{BXh) zU{ZHc9;&DQK%Is>bw+((9hcLmx9!X6r}zALP6y=S^d3K)Je&^BL-i#;P-oLTbq@T2 zI@{%`Gvo*A?3$;}>v#L)66VL1=tbM~mFO-0nj2_44{z4jc53`^!W6)E797^s;TdH9vEQ7_eO-@LKh4&vEl9*jqe%*9Nz0!xdj?7uY6}A-g!?#ozXYTCY&Q zr&*izycicvbmOi2ig_HWyNx@qn3qWHr$C0&M330Cub4l%(+4Myn6Emtub3CQb^fPf zE`PSKK+XWv(A>B`=h=^#Pxwz?sGBI%4H5GlTlN+63wQX$vw>oM|0jLL{5uy8MHYig z?Sf@?hO82CG}2i*o5K<(z*_=3-7WFY(N#dDoeW2UX^cAkGkRUTa{Q4t#~mxU0X%J< zc$8zq9(1aBxjDm&lCiH7=cc(-NAF)@&Oby(C-?oFGaPo*$;yZEY?dHhM<>O>9f&QX z*an#jD&{owT#tc9NefP8N6d>yAU4Pu*aGh63U@N$_9)yF3HR47+)(Ta5oU{oJK6E; z^2f%DRKUdvAW6vn+rdKi7uy0nk4=E=ukma)cEN{&5ldK~bBrRnib&p4B=d>nE~Kk$Lc25HA|pEiRUw-{ifq2*gywWPF&V<*#`#p3 z>_NiJ&cySv;@O>eDqTDwSAoeTaeIPQl^_;GgogSWm{vDI?}4ir8HtpF_ysDCCO>d5#M? zWIt~pBfBji&uMt&KKzulJTKK`pbOGvFp+&*^jwr(P22ixyfjQ=FNKzfomaYmuZJdx z^KHaGx!3}W`K)5B)OA_{Wg@u1R+k}sK6BKJC&btC3(D=qG0C}Ebd4o*qaIV z0i@?u{6K)6CkxtHe%%19-7l=&F03)Uqh@I=DKkOQ&RY(DJeh4yTmwHZE0RI}#+w(a zgukIAWD6x^QxdYHOGt>n-ymaNmiF!NmZ(Wd)QvEjs974X9_VFt$E%BTlg;Ln@(Z}! z9Hj&#wgLh6g3N31Y;H%oN+LwS*T~3C$d#MTwB|9a`3og|3TxK7HJd=CZ&@hCnpn_w zLJ50m*tbR3WiGEEeF}`vKr2gPhDlxjZsC_5lE6sY_e&SVRWcO6u9q?wOIpb^=_bG;_?ybh$ zx4*Q@cI)^+pyT-dHeT5MVhf-=OHqD}XS1=3GSn_lBTBXeu%mEnbhLzzH@&wi7MGQb zJbC}X$U^c+YB}`-14_h3yO2~IHxCf+d7RlwX*+?mov*Z=LfS4sx~d{1j%CQm@sz$I zht-+=WEj&POIMY$wW1LN5NYpTI8#859RiRv(519KjByt7mQ-%rZLaALXu5cj6Xi%D zjV5g-;W^KV+JE059>pK-)SpLjS314TTUo$BI!8KO>u8VEA88hIg}_-OtUuTkR*23H z1c8g^s$34mvpF8=dE3RGk&*q4I0T4>kYpplN&;^Z6^X_yedcXnO2|!xxp9BN^ZI7M z!%+x&ueb4RK0&(T3Au(tiDy&AL#XUz9jLc_ZJ{2bQ0EZpEef@jP}};0x(XTDMLvf! z=04Ek?*CSp&-W8L_awwS6yi8SJk*7F5v1wsA#NqabA1q>d60vgN3hh|m8ijvq|D>2 z%cQOcY$L0!c9pooG%ChLn*yUW{bc1*JeyaLo>wxv5#u`2Mwer^13JDFnCSEngfLpB{ei9- zS_7LtRtC%Dy3BH2#!iu!M?yHD;KvB0+^gN!;+elYogeV#Z zigNglXEc=?u8oc*pig`spwiv;o6#4NUs>`H7& za~u?71r``azr-*&ySgjk+>-L981~ojdFA3*?60>rw@HnazJbtb`j>fa80`IDw zP-uA@GHkGJZVJgw1FKxkoC{#N8$hQ zY+gaS%K8$3_j%mipq%W(!%)%%Czoj+?|)Z}SiN^J!iZ2okn(J~FIm&zGlOYb76iVt zj}W*G2^^sW?nnan>5sq!GP0#10uzx0IxpmSARcYk#$91*742QafOeFk zeE`qq38brBLW9T6i1vn|LAij75MHp0L?7ZcxR48oJAfFsYE+m{_ZEJ4BjP<2@jgU+ zaDRwzLPoYMfLK%xBmLbgC1{Mza~hg;>ESKu&>blVB|zN`1MY@;+VI>Jo72!WA82ur z{h3P1?L$GyK}yNJcs7qAT}5zp&@_HRO0FLQFZEivFomfEuNA`hUqPKfP=_g~QwZt; z7gWe=Ekj23NPr@3lo;Dw*UJt&x=Mh%X`FmJ`TxsaBD_zB0FQiODp|P(&t{N|CuGg1 z5YPJ?```f2-g}@A(cL|j3og}|#WlAcMhPFKI1WsxExF?%ATf~J#h}CZDy^L8P&`-cfxm+ld~&wvOGZ!1?%F1J?uk?m4XAe z^S^Pl$mR8oLG!Pb=C|=|K0&(D9FohSr1{y6R4%#!2PN$H)GXee(yOD)-bB?vq~L@w zQ|JZ}!GeU1^$F2*6=r)ydzH#^-HqC z$sF!v3O%;!wodNX#ln!K-{!7A%mQAnxt^duaB`kPPHr}&d@oplIUl*Fh_iJgaMh?> zU5#gR8`4#rvw~cGg^cVKfMQCu>LgZe)~d&`>KSg;kS3mB)d@lxL-BFm1SaB!UJg7C z9AURV%TN>$sLQXsl+W{a#nOJn+h4PX5dK0ju+LNMui@GJ8|iuN-~eKOdT<|bt}!mz zRoaT%(nl+X^NE3e1pP@JF*LgvLL;l?$jF{581!8C+{vO34m;qH(&oTwzT;l?S9cfU ze@f6dD(Ec?!2rvEEKvLup3O^0SDA#|+%E|B zA)HskXrZr079E2OXe3u*MkwS{3Hcs{TuaC^UC1GVdytW>A!PYxAHILIo3OkcAv~ZE zb|!>zE`-p$?J7dpRA_VDJOn9A1SQS;1E>}E{4gwx-KSKtK@ob()dS1KO znRxC;fC9AC3IwAUJ|We{{tnfswWZsG>%(yz*n4Mxg))eMchjt(f1+F+RRpg7pF5&F^=C+Yrd>M+xNd zglw-gI+&1;bs>iw#{J01j&_$o(&nV2T!#VhxQ~6Jbr^Rl=ywMI^m|IQ!LwP5bS3)o zpu?yp=vP@X5fxB7?hc265UHl83ij*4kZ7_(yqXaItq`v##Jl^0_#HB`O#;yoy-Y{9 z0EP|{`y%cK!5AJ&MHll+Paz}4xu~$F?(7KbrI8}665{_<@oz!=JG=Np!kR_={P;X3 zC>{zG;UswjO?l6nbg2je?YA`uIl4me|7soQ1g@qiil+Y{AT>xX(~^t2}AST zF7XA#|X>mCFpV-0ZG+&mrCsiuWSoozoxQH;|D#6$qt)Z}EE)0C4C;nC5o1``^e6 z$Be{%vk5VRsx>H~|F9$^R9BeWSZA1!FTSwMh&v5P7EBMsQOuck3cG33#x&dWj>W|! zcy6cAN9nWJ?6&&c$@F{flJY4&e|Lq1*@5a{w8SmVaIJy+W}USV|7@6HVm34^9bE}} z!2-W0TVgUD87=$eP@OUS?!l9~l(dSx&KV$V%; zGO;odU5S_L4hA-7c>);EQH=Mj9~oIZO)>r%&t@^wRn!QL^JCn?#mG}*z_ZG|Td)b! z`0U>`6$4}%?zw(KaMLGe8#eH*(tI*PxZRbw>|Z^x{G&{fiVIX|0~X4MX&{oTKXZf;WDjKQ-xWJgCgGa)(Ogz08vD4TVl z5#pqrWcB~Fw|Me#WmCh-Nd4jFj|%ve{{Zl93ivHNn;g6Zlo9}K{bi0=U?MS>%v zs)*~5gvJvV#KVn_AQ;tB>+Hb781fu=>lPz$_DJYy#28Xwqz%T9a*g2*AcKnSexluS zZ6g=5N6WQX^lq}0ILVAV66svlkU;PXbIbN3(l@^W=Z`4o@8a2fhIHjTG?F|VBFS!q zlJa$10j#Sekgg1+<&uHJ3dN&e1-X%KZ1+GIz_BiS3ZOCl5ZqX5?3`b9~_=_PNm^l7}*p1)E z*y42e^&Y#7QJ&r0{W`LUd$<_b!}Ufq_uGWj387a!kt~*-m8k z**XyLh7zzA&!*TVASAPCB%n+QpqMz4FKKRqRRXXk0O7UoQ6{n%?xwx`?q|Hw+1}A0 z_hCi5-66=kU_mI_K`HtbDO#ZvokfafAYDZgqUd>K$N`}ouP;$S!>$vJvUm?8s?U=w z!gyWo;>0Q}*7B-GH+2`rxtIhS7_DuDp07jYR*FYBvb5Rv4YAY|-rLo&5o0axRw-az zOnYkio8$dO2!&wW13*ON8=q`*D3LbF!>zdR{O?}tC&EL38?TVPklGE3&Ja)I1!<(L zmk4?bI|M^l(kuBw;Yg)W6v?aWq8*e)rVz@A*(_@-t=o#N{QWCvW-zBv$;#*OY?dQk zH4{20JLc!m46kT2>DR>>xr=L+3hHu#8mge?5Y!)BP$B=4MMkzon`(#dt@ff@(POn8 z)_b>|529R`S7Bb?MhM=FSTc2+JL}dsM$+s23@u&;*(d{wRg$oV&&$Etwbv8R)gmKmF5U(F71!zT4XS; z%88(WVc@Xufl_tzzXJ^0^(Rv$ilTdAm86e-(59cI>C$_w0Ub>ZPekg9645RkCX|*K z8vWlkGrSE7x2~svL*pZO8SHyjnw47$KcmP`O!*m&XHx|}^R~@4WC-pY55^lS>5LWD zSrSVZ+@ISRMCCaI5+1Yi6o}kLLvIJ?FC&a9bEFd3`UMC)RtdZs&*nCy=OyqfWC(%T z?P!ZK@FYkWgMgfj;7Gq6;`?92MFu+&#fgeyH=-Etq6k^~buJ2q^vK9XplipK!8a^v zeKdZ!e)*8`k*m>~(b_AO9(s4FQ4!7H_8pmlrp-eK0~pVwW*}9kXMkj@YgOPJTQh4o zO=cygt~wszT|mj)ngRq^fC*3 z_yiG-FP598Q~0H8|2RF#%{JWPu@S0dvIi)rlx-^)GjZV!LeALXAcxi8sgZT$l*Y0< zMXSu8HWv=w{uCVCs2qHNXY(b}m4i?-ngrHV!D%Siy~l~sEX8CX4?j5CnNgnXiOzAW z!3zZVYqNu*{}s{yNztE0^fO%aA*DZ$3|_@ow=wrP^iT0iyc=CI?C8J(nc;8R?$2_KN#$~-71 zY~aJher-)e)spj!HQ=G<(Jf_JIiuE!bT9#X8D?&EGY+D)*&20w>9dro8vy~LjWTn( zTS%^R#fi;VhKl9wtc3cz7(N4G+FSz?)vxTJrPya$cItn~7r!(;U^&hlzYPv%o?mVL zW90J97To+2?Q~Z?7XLv`GPktQgs~{OK3lGhe4drjL8fK#SDbZeTtpq*IM%NLLQKn! zU$4OtUxjXIDu@`yH7@TDUEy+uHaoW+jW{ ztrvy@2?A=8SZkJK8G*ImL=fmwBq?nUx?VtT=g?9^@@?Mnx8RyW;?C7T;#kx^0;L>I zc}qiwMLkd3YX@Rni$PSx0agrPIW})pD#cH`_5!wed$_~g{X$WaGucA38tsg@Fu>{c z>xqkUG*#*FjpIDvHKg<85(N?^rWE5nq7JmAr5F5A)0O(*BY2o}?uONay@x6u>#z93 zOtBlm3bMU51D6Mq8}SRBn+5$xyZi18Lr@Z9bwrLaSP~or$B+Lw-^Y11q}$b3s<`;q zVxA7nT{OI29Lx45bvBnns2=8S*C@GmVrg^PeS!{Bj{h8KV3pKuNSFSH69KvU@G>5h zpw-BSX@UaZ+D|U!md6N0P~zkST`>@+FypJjj?VdTtY*06eY``XO!7 zAj%M2jmD@0aJS^`D47^oh!JE{)NoP3VDVtp#hua|!a}V-&nMK;@rLjfL4C+750W)j zkyS*O*V9Ftm`ldiLhvDl#bH7gizf^dvhv&wCj_fHkz9z7=Y|Q_c?kIna$<=MCgk)0 zA>X4nYAdKWp(~`fF@im)w_3y^_to3R%0XCM`SrHw9G|$#99I)=5Vrf-6Mhi)@ipPT zJ*Ro_8wzG|WE!nMZKfR$6Rug!G_|bNHRvSrHNvPLuUK`S*jm~!rQFa`l7MRcQH&tYL41e9m zKg#gWaS8EVggQmK?*+WM23MKNMK1AV72fa>;&S}>Ely%<&qE@04;yH-zpeH+7-Q>P zKaw^#VkvKI8o48^CCBa~VDTBxP8oW)#`Km`UVdV8j@6ubUd{lU zv!CW5E^86x6@f>Tn4+KJ2cOUzf}b{A9CHm=KxGP%ZExJEvYX%TOWIMBI($i`n$!sx zIE7qc#up32zkDAIFHwe1#j}}*^t@96gN$r*5m7G^)O!0qa4@`0t|YZnsmo^BmGs`h zf@95lz_Cnme2ZtZn~NifRNuZ>GjWs&4h9J<(0hO6c2s^?EV=oss7{{uc!15Ot{QC_ z1oSQUkS#Yz%Z)_2&V1$Kw%ptIOEau6J1NNrBYiPDX4t_Ics7?IJ+D|^L`L>}PGDR` zkF!9}`LmcnqpMCTun`KR-B^*4ndR7*h9B!fE`}c!=1+q}Y)`%m8YHqIS-A|)=1Zh2 z4VMSSHi6S3WlHM0H~N>ORZn0gB>eqIgT$Je?@6aZ!Y(*dHMy`&&UFxAwxG zYb?;F2SaRf1lK6HDd|VY^XO+wTlb6(OVEQw!t=8k5cGi(^b(#;L4O3DNP@n^K*y8& z3#dRYKZnvG&%Sa$LK}{{Bt#R`i`-K_RUCL3JxLu~7H@=tGB#7f_9kI6n@m>jN5X26 zuF7~YsEiacvL_2+ww)yD=MwV;s$3)GZ!EifC`7m$pLY%vK|J*i@Yy5Y&*0gtMS5O* z)x@__IU^#O4{);SZx#4vgf^i20gEzfy~hfEjN+S2eE(6wpGbVIF20Z@WRQ`)Lh)Ij zH_ZaQ46P_2cxwr`D9^pJ_)8Uf59Esr!%v6B_5?{)I)_=1QO7{$4iLHA_crLnCv@2` zAI7uEAYJ7WqO+WIzCw=NhPeb4$oz|F1_3&qhIx|~cMK#xQ*_hoBmW^y;#vVNuDt+1 zn1`K>v1kUIpkQ91A8zq(dbbF@+&oz*%>3(LVCHAa%nCf4P5Wc!Tx2jTh@B(K3k>u0I(aTatyQI4Nl!(DJR1q>0e25(elHdR{p zBCYlScsXf38|f-|1Yr1`IGNL)@msMHoke{Bz2nOT_*?-LaP(K~x-fzhBiKQWpdOx_ zGkE&>ZGeHAIs_jJz(BXkBnw1h_b&$(V^m^)!LxZ6=}JXykc$0WDlYX=k*z~WRi*%u z0az9!{4azMoxRnO5a`fPNIQ^_kjL+^gbY+db|4{@O2{Y@GQ}kXn^S&qbRt8=@d>4h zNhPmvw@8H9sKv1pzS;n0?E+NFmL~QXVtX)Sgt$5*b%W&2e8jFcw8HM7MRtJ_Plr!Y zu4VDduz3PNg}EzOwC+MoE|FTite93$(}m5FSJ(G<5OM2`Y#BV`UhrZ4z-KwKQ(oU^olYsm@qZOoiQusGg!*^&$a5)!6gD5i(P#n!-?L2SRa2iVg7fa(jmJ5&A#9&7q<_Gf#(8(tHn?wzQWt--s8- z78W3)#kJp(X37#-84}X79kpE2@`x{O?&n{wZ%P%$qc@xD2V&uf=ft=QhlWv_$1P6zc1GSv4BX8Td%} zIOn5GUPM>=5s3rOqZ?R07ALKn`q;7Y0qb@*Zi4A8>dALb!)3L3z+`9LqjA`n1ZtDm3)5_g%jUO(kzb9W5o zZX2kZUpGge;OK_CFC)uHL z2MIb3HV8Kb8hQr2m%ZsWQHe3vtrg~%By;e&Wr~#S-oM)?_Jw!hPaDzLJOK>R~QUcjfUSFCE zln-1cO%YJvPvSzNhE$7O0H^0&9I1sA)~5;*Ww0)W%()MyDp7 z(l4Lm0=2;cHE!3%$X>^;1^;$q!Dmu>J@AI{QgO-sELfY#j+^;ENBgbM=A%7rek|>~ zxwO-B!HG0<_&YDI4ZBx>b*s?1yNu|lBtE+4e86oXE_FqKFLnv)X_^@Cq|Mm*B^u!* z7XYWSji@bUO6xh;Lm4_9>wY;arJ>r%s(j6jgERYii)Wvg2_sClfw3+&5K}%kh<1`T zx1MREsT7x9_9Ho8U`GVQHdk{&)7#@1F+KmiMYR+Gde-(laroXX?`p`F4tHuH8}C>P zl+A2Q`fZ!bZ8vRT42v844*n;)ghDR&Vf_=&<}##fmk?TJ zc@Y`eec?nfcjxD+aMyLTDFM1(U!G6zYg8lE$0sAn;{v4jo zH%M3PS3!5aG1;-i{ut7-e-@>JghBNeSQ6k9;1{5jG1ubQ5XNhhEbkJjdDbSvyPfY8 z=4PODk9z><$}^BFGgz!osjxO0DZc-`Fa819RH$se#)q?H2V2BGIaFQ!QygK<(E(5F=EOOk;(Ha z$ZQpi->&9Xn%6!N_7{--?G?upWd9c~j!<*D(!r5C46>JoW6f`W*sDDmG;13!SJZ8x z=io4&Wgp2qZ&s2Rr2%&wMR{pH=03q`!qSOOA3^hpL0)1$eqo8P z3KU&7=%>nj{;}}*;xpi}l68`my?8c^~ycHQL$5tJ)5f;wZFyy~(W9i?r7cfV* zs*W|+A8c19q}gGK&~9N}riiByaZC~aiirP-bVVEz?oL2#uK~k?hWIIQgZE&`PW;a< z3ULr29<30E5#n!Lh%=Dt^FJ>mBYO{rP$CfozX+UnR*Fa#cLNUGK1K3(Jez%7I9Rmu z!$}a%uUt4h=;#5b}u%`CLMN1L?~1xk1Q#5wg8>1&U6a-FZ~U zy=J5+n(N{Aiquey-M6{<9J6Q$xbBMhc z=_&w-%8z|Cu>0>L6%Si{kSw%_cew!qk?@;fk9_mt;#*?gT4hxV79yF zXrmT#<3RW-1hN!q{adoDeHUOL6CmmCXuY=GEV%dSo{TZ?BVFm z@5d?)N^5f3ym5edfD|Mon{uiEUAI&dF>9rO4tNd20w4+KpHzj8q<-Y{{|H|@@ zXY(@BmH*Iz{aqoL?5hJssA3JAVCo8rRf!JS*yfy%yQuKR{XBUXYRZmk12%RU{n)7U zt&#XZPYSl$j^^5iW<3wP5{*36R?@;vI`i6xLg)fs1a`I(`UEcm`-MwrD3} zLZOgIrG#>v1`NQ$RoHr9;Tiw5*@)mAno3&8j5%A;9ZGcPDY{8S_c+p3E+KTA65S$> zOY&ei*^dEI-$q{(Xo z?Da8s{98nJC9%v>EOBD_3h8-yIGR}2p}$PX?nAt%AXU)web!XIS}e8$7;!*wj2hsQ zOyT#{8K`yKzW3V?gv#Z-9IRQXe4m$t9ph3NvcP+hk>z)xU?C|;n;ij$mi4WagWb2< z9}Zpm&)XFGEJANp=q-f)1=91%;7CH}NmoY(VCVaVu+JAF1P!{7WsL4b)lj&g1R{G? zOO4n;5OPYD9J!$^spQBFWoNkLgqVE-8Cki{S8wp>au}uIzJHA6^05^n!!}+@_6G%f z8!sgr=7J4b>zM@0Yx;c8` zcitejkBcL8n|uNp5|Ei8f;X?z8z#A8)98lHetNt#8Y!`^;IsAG-#{7=2V*Prk_@5n zcZZ^=)2-QkuD_fn)l=d-_J{JV9~qdH=QgIVHS*lf=au^0#pjGZ!!Xk36@BjHbGJS> zh8L2iO~BZp&xfgMG1l(JR4o;+d7^J0+{>O5%Mt)PSGUJiocy$_ct1`CG7OH7j~OAy z2;y}kFixC~ZmMoXX)IBNUjL90_`}sY^PucyW-xm#c!xe_QtbmN4jF| zoJ}Pz!Jfz-EHnq?_y%!Vl#^~gHxP87n+T4UE~pC3Ofj>_Gg^{u6Va#6n%>9CIhbR3 zy1Vy9Dl8s4*mtZ`waTg-ABiY~Kk32DTa;)S~POKp@JNeC>By`*G zV)pQI+@@E@X<)nPzS}uYD~K2VP{BW-AOeC5im?b?jG_r$kfN+01%Q+*>qi?^ESH0xG|tpylHbOG!}0ePb^;I%aW)) zrCag<%%3oBmBENt^i!<7AeF(MJ^(ksvm%xBA(hNgDA$Z*qgH^jAe%Ok_qjJbI9WXy zBbC@wOV$q1U{tSI6>GlnUf*K;O1yrIy+YzwXARXi1(29uj(qKcF{Eo-IGU65z`#OZ!*%<)o|q7UVyIp6kR7C>H&$6; z9PMXZ#cbhi`YF3bAK z*d9^{pNc_&T(G3G0o(2B6rm9iXF^VxOXvuy5mP!D(b@D!h0M!JS`3uy7A{u%DQS5L zsZER679z7s&?!|&yC`X4XN=Nf%`~0wWHf@^$7q`!sn|RjQl7J(*(J@*ejMCWtAZNY zdLnh0mb!$t#VVvt)t>+zY2!+2YjTGSTUUI_;m^2`O><^5sTH7P9-(ufRr^cPA)r1k z{v%fwQp7POziooISMLH6$r%AGJYO5g-MDXz4P+4;h}U-S+y`q|0x{g-e7m1?v2-lH z7>AhCUtl$~3+n3(c{g(~rX|n~EEDTUz_(@$n^%o@x6dp4gEl8h%GnUcEVcoyhP?`ehW~V1 z+5O^)Ji;!gBxMW>E!A|Yg*AT&J@GTM7<()nLHofcR&k#gB_7{~Hp9H&nB>iUg=+tv z$`9EGNbXURbyfcL<>4Mct|GOY2E{B6mqP443-?y4)~(k7hk`977$Jkv2zH99%(J~R z09%dh#rsIn%IEQHwtK@FcZb$2E=7juB)it4h{GSs2jpQXGA|$g5gYwwJ5XW^%N74+ z7XKw%;{YR)bbka?Aexg4Q?RtO8OgD;)<~3!cmA#c8oFStITxs!rLk2YpyWApAGJQ~A8Sm8CDojk?T2gg7vJq0N2- z*#a!2)S__#Q^Y_sd zwn1~upg9JjG;I8ge3o@p$&%7|kKVbHv753`PGBhe%O4H(t2Z6Ea7t(drToiVNG;Vt z_+O9lQ5}{7dyj~3tUYO0h&M#wV=e%?p^@Ml8Vi2tfa`<&R1TXRAzH&*{|iD3Hn(#D z4W7*(e^Ty%%=e*Ix%UhRrTe-ReF03&wide!)e402xmG2>;(k!R*a`~_Mu2#qz~!o> zSbmOYb~ARRiYt(`fA?LC_=w?R%ra-)A$a+x3L{# zKgLmaty4`rn@pAOLn{p89Y?bgm}SiW4l@G#4(m*tKlie?mi%c8v2I3(ajESEnzj&! zVIIR~4$?RO6>pxL&SzA7O*7d%-75ti-^&sF_gcRM`g5k)LoZ(RvUu^$3H&@kRJn#; z{6wT{lM8JcK8y@?!~7N@h=-s{@dIaykglgnnv;ZL-+lU#d=V|yWUYRX=IKLUJi%Li zgp;|A;;Sy|T~%I0XKh>AzhrO^g1iIlps{+25EYkSybI!z=DXFh6bl5qEjGoKDOv#; zL)q9gn>58X+1Y!s6e$T_4rM8juYgNU3Ei^5#V@=Li||O@TS+B3Wi;ekp^+~jvmUTl2AXw-1NGRBEjEC zi;6K>j)Z^XLXgNTqJlXKs_}23rdQHleM$x)PLS`$XN`7Q^OD6eQ>t9?5$|P5-q<44 zz^q;k%<9p=EW9x=3vZ<))!sL#fmwJPFL<=!V(}~S9YG3v$2CXut#(<$B>v2Nn6 zS6FX756g3yv|7@K;)6R_Q7ySGRr0q~xL@6LgUJ=ahp2pYH;2mp_-ta(8Lvb!sBiCB z`uX$X=JxmogVk3kgJfk1p3TKb&+F#?fedwXbJQ>ZjQXphA+XzZ-<=LZ&yyF_+s?>U zo1xm!k>PU6wtos09lV?}qg2FsIps>ED-~@>^(|5!;!qJD>AbM(4@tpcUs_j8+K=rR ze~8d9uG3vy>{n`G7j5zS>-^Rw@fGbL9qS)ak(xX22rr>YbU(DBv%fY-bPDZp;SMq# z%0RGfe4n%h)({v%>wNJ3PMvlXWuH@5z?$NcHaD#=OI_XhsQ*d!K7WaLvsimbzWOSs6U2K%l9&X;C(=B+)9Fq{ z;kch#+Ht(34pc*IcVv{8;DvfTQ0WX&9h$~r6JrC$$MsfZTOP@v2wAdrME!~+Td-Fz zQc@=?z#+89hk21?*1Df^KR0An~HkUbL>f3)+czk1D!VUQ}%WQ^Ib?$1-%m0hFdz@osP8*2m_VwCz~&6TAU( zt2Z3)76>KJM}c^Y&dXh};;!UduLARYg*k;V=P1lm2$Q(fV`gUd@_NjzU6_GjUSK-D zI_Tmm_efD1=dS{aOU|W;t@VVULARu5)4tTF$@7)^Z1tL*SgFmU#cC735MdOnXZE12 zoj)3l5KnvqcclZi)`QK?Jrvt;W$yrJQg@cMTK#ajjl@OWI-KUU+(A3<&0p3Rl`NkL@)hVDn}O|m&fJlR;6<3W zggJg|>$|(p+BQB^v3H{qhA-3JB1fi@*Yu`Tp=&0oR9pp-TF@`&~CjS zt4o08hRgk|98Sk}Rrng*fBBk#U;87#FH!IxBW(_I!E;dU>96l_!M`Y4K`cuVsCe(y zQ#ZxtRt0-M!L};c*#!GF@|Eh_{9ub6u$|{A$>Dtcr4eyIuQ=5Eh3uKdW{AQcLHO?| z{9OsZ+J%pO30|^4LxDC#=d_PsXA^ew1(?*CIJUHHgy9vtgm(MeA;0=D3mAr2T9zI$ zveEr1stWolr~uzm83_RHWS*^bptq7Nd%^sy3Euw=?Hpfc8oE>zb~Nv|T&bK7;{BFU zA#jo&A$z5F{ z1HS$m6llZaf{wZHRr*T=SJImdvNDK$Og&EHl8{mH$e504r^-cIrPz#C3eMoImYXRB z#iXDP`6{Ms{bE{+0>6>_XCJ5MZ(1L)0$^$19r7#d_MC54eZmUqulOJXdUla~uwuJ& zv54(a-dDN35N`@WWQ|ruWv!osV+qU1AZ0-ofDN3Z*x&hG`$_flFJLtV=cn%i-6ZW zNV&b6u>U}QS{0QMcJNf~n_x6e)Us^npd}9uj#x41b+(W@-}`*>=;0+4sQFf_9@q(uBez@im7aeMg7f5YeaOdmC)exxwd$q+jasBlGS&Af{470V~r|J`O>hf z9>T_uqymRV))L*#M@WmvPEZyuUQdYTsrzt=ty?Q~rI&B8KJ1O<^kLi>&Ea23z0H13 zve78+SR^8RXca_wt%|T3X=9MDjUv$bhamG#OjyhELZb!uPlb~wv?(YlZHmq8Z;+NAIcsnq#O%wm627c22i8sjug{|URAUL!U+vsIn=afJ= z_i|;=3IFVU>BxQ=OV@Cc_NC*U)=y7GJyeF6g9?MaSZubl;V@-lImZPF#)(Wz~QR3OVTKZBswIW@?n`{I`9j) zMjv7T!~UrM;_ZSxY<{|V0d3IvL37y;Zzs(K!s%iy)@eqCl)a}}6(V?P(>CI+2H5$L zlfWLWALO8$7)r|dENd-jUNXY?WEiuhg@H7w?r`jFEDX|giZRIjrQ2?5W1-yy+R9+O z?019dudaxeeWhy|K3Dc*-{9M6Tv;@9a1d)#%6l8Yino(9Ik=TWA4rhMuT>Vr{WmS2 zwu$he8fovTP=DV`l;z{LdkWMpJ->i;_Au!szta3^*h2MDV+h|L*FV%}lcb4tBEP@8 zB;~y>q!~JFi;}M*GM3ThCgW*d#(HKS%e^-pG!*jd`@8%%z!z+@F@CE!x^pJ)s40jP z+ZEQ!_c};?KYFu(IL>szI>UeGSSof)1!v0O8F8DOGjrpPgxF{;KKPrAPTSmNf>XmI-&}#n@T@~=fst_+#!*ged7oVJ)JKCX6Mvs#kQ!|=Kq8)*E!Sr=~sJiSR7vG zA=_VE88{y!fl{PPazAcXr;iE-M7#g@3@G(%PkvzMJMw99B0tnt-E2B!nY$@HoA3KDr7wF?R;fB z#AYb%=q$(IR_yuexXOxyqh0wrk}!alfsRS1+$NzjuUfkvl3DbuNM;#sMr^KA$vlm; z=?#f#Sbr`I%`@|KAqrG7-3dO(`ggg1j&*dRd4T6iIvHl&nKX2(gF;uY>l=jnTvGqE zQon|GBAy7Yl=^^PpFn|9?^v`KW>BvYtOn2cN>?OEna}#MR2*dfhpqk$^PZ4Q<#I1@)+}e_V#Phl<)z41E(1FjUqgX%X}3qwSbowX%tp$ zUczQPjE&#oMT(16hEMV$#atJ9;84{CE_A&gDIk}$ZT+Jy(@F*|FJ-j?yti7esCl%B z&-qPAC$M&+Z?4=?OigVnHRYXXcE#FLQ{H*j`%ZqkK}*#PY(dNe%Gaj?WhDCmK(XOZBzso@>5qNS+9*gd zs1#E6NO`Zz=oat7{@m-{5UgOshTOjq*v*)^HJT#PB{#UCqSHD$0EQn#EZ2b{ADm@R z98=eUouAC?4#fMky)v?9OKy$C3~OZM zczq=_p0QhzIYjZ_jf%}@EB>pA|3>7e^-}*tLE;N`gg_k+u}j3U^C8lV2p_(SB!x;9 z{)dkVe}@wO1q#1E;qToQ{Mm%h)o?S6cg+aVSsEUn3eYmZ@0}}K$%@Q0g}#DUI9{&M zU*Z*xZzEr+-yxIXYNyRj!qJUH!)fE+gML}XdYl;l>C__yijA=?q+MCfJQM+^Y>z8HoU6y_> zT&G*aYOTQWmKZMH(4ByV<}{_N`2)}uQM&F$+B}VXl}@&QFTiG?ORnBo)5(*!02Mdq z{@wjJtiKV=*v!)i()tXxxQKW6^P95$!w=>V7Yv6bw+*J6OmT`@rIlBO7-dOwAonI0B>2)YJ7$pf6W<5T3_UVx=RiZ`Z6 z>5iR`u~C;0Yo4|dCzo0U_sqq&5S(1<7Ys7DHJM9IL*vYCN#;`L&^>dp7U@8s_F)A? z>SO4Q43C7mGy)&tv;!eL0P4E`9uzGi9jJr6pnQ5uXBa-}N*$2mdK~s?C8=Viy@*%? zoGe)XU9!3Q&o%Q1T-h8lyVOZXI)52Dzum;&6+eKqsX)GV zq&)fJ=}4EMKs&!a8kDw6%p|??^7{nXaRj!f0xKi1K`yYsR7s@^ERMja35#3oe|Et; zuMmeB(curFuTlix^7h636v5BDeKC%Fr8Y22F~CKjH?%Oq<5uq)Zq7wRLKMv#Bs-c8 zQq+$C8hg@FSxyu^+fD-D#Y#y^EWPTl!s)pr1gBy^b@9a{_6f8jn0!_HyNDDF#S_09hw-Qb!gY%Qj?uCn>xLsw~S za`^8ao0RqtY;0@>&}S*+6;(}Jd6JS(Xb)mSpizYu+aNFA%Zwu1u_@bJoj2i)?0e9lci z4{nk}F0q1U+;qsYL%$GZl3^Nm(_G?+72Icwcd*4xI;JSN!RB|VO;&W3hc#uMN)k$kl#$RXW-Av!)^?Ed@+!_@Id}$4JBkE zcZ-ARM(_^_s^XqVo6nH1o-W`@3+6k1IUB7Xi>xXY0-)2IQvMDMI~*R9OWQ3fyTl-z*lD~{jih7iL-pZpb>0aw1&-6 zGMrRfvZ+@1nrbO%a+~TAcyO934lTOvuXBW=cH3^*-Q576ZgqAYP<8GSC_fY4%3Cfi z8njo6v7n>nH)bF*=ec5Uv-}g9hk%qy{&G7Qs?|=AQV3Skxxkfdt?<+Psw5}5ou*=f z)jY&wfdn3xEKpBL0V0|=2%DgU$wLKiZU>KXb0Q7_DRConycH~2vhP%Y*kgC%D`ax= zseZEPwujQw4qdwM1MYX*+2`c^87Oi4C~hynvur(uwCHdI=mh#0aB0!=_>isH&q7BF zlbS>QHOJYS(NeZ{*b9GPJs1!3i9dK6q)+^zTm}PG?wog2P$Xk;)4%x;EBI!qHq&!H zk!H%ug-yR{*_*cPq>orey^b7AxE3ISp+0v?qq`XuoBty(70*N3OhUdkxeZgLXf_|3bJ8+4Yl*L1XL6(y) zbkm3+={W+sLW0u(&;JYpQV;E?oWZgCcb#v=$jK^8G}n4s)v@4bZi5noWTki%Wpu_b zvX;^z@s+bBp%@}ZJ;u>u2dkWIpU$3EoXg2bZrFKtt@9D|?($M#Mx*m5Va0nQpJTRj z!%;o*jnTF{z=mx6)84QiPyCsI7>=AZt4?1 zr!HODJzy}bxS7$33N$UGe_1V+t!}aty|n!SUIsWWz7vmfa|qNFH}@|T&qUgV(uH^a zvOZQySazS)xlhW5&OH*ZxrQLK33ywSJnFCN7P1r4hl%Zo?;uEUCY3%tM?UB@XO;_t zQ$`{&{FVWh9O1}(ou>=S&oal{0iY4i_yCHhs#g2tHK{h#7U$`&?0-_Ea%f?Vdrs}# ze@T5cIU1upo(XM>JSK+IUS?{ce!+$`|KZQ^KlZ-JwkObx_}_eI*Q zN4`3mz+T}~Zg(8b4Q>Yloj@Lgz#yH5C}_a~(MKO|-e<5K)IVl;mdRSbK0%h?4R##E7+fDYgiLF>5-9?VKg6-;lRjVbJDCVS{81>P;rI)pp-cMG7 zL2?(4RN800uh)E%wS+TDRXF?dIZ-I3N(}w*GV?PePo0A|#gdTV3(S85;bexxl{4RPGFir#TF+O0^UW5^%kvoH<;Ka`-tN%L*c(mr+CT{Y;G*bJ<7u?SV@v*YHthOVV>f|rgBNP(8@lS2QL7rWR}$Zetd*fNtL zdsEv;m`07hVb`0T9(i;{hr~>NGH%+OcYr zIK_K@PU}E>7(ogK6acsPknD|Q$L0CYNNs#^H%y{K(W~}DxK2}sMy?JUMjvBX)^)&X@>zX zqCk3)P92}=uIE;X$2BU6Ld6haJH!F!FGBi6^a!H&RHE;H9z-9iMAsv2u0_6TIY9K^ zQIJCP;7udC=+6?3gK9pBlsI2gJyxz4^IOmd-~36@bcyBeG*~YGpJSORb9a7Tdi>9^ zypsmYgJ1h3w!x5vHd?5*(|NrZ{CNvtJNB&KB}kj$H*{e;ccMUThp_~DQU%skZ{7=J zC3nyba@u5Ar#kZ}-b4SAQmB?^;jR`I=Sd z$vRQ9>OEN@&1&#u?WbAr4lelZHLFF25FCiPC8LB6kPET?21b5i)@Cex7oK!HV^wIAs*=v1DNb_Le%fsd&RqU?~i2r|EZ$dQr`KR(cBo`tq`M3`497Dqe) z=osKwT5VJnpZPIoF>VSr=KDL)m}f0z1NMCVDBbX-iu*!C=KERV`!0M2PUb!BHzy-) zj+pH@nZVq|d=!Z9b3RRF-CrqvX~^8C@cI+p2MRBr@P0ymTBmia3vVHaZu(f>DOmk9 z7L7SOYI-d}VCQTVMMr1vnCwjkI{vV zHM-YmjXLsDCv4RhtQUb<;0KDsq;UD>Y6R}>9#LB&-<(}ob@h(>Ha@~e$ zd+`quPTygmt(hvLg!0o6nC%kC&~)S7;3T!EF*C(N<4*#7H})H`;&+fX_ai^8Mg1EE zYN2+T5{;6|Zlij!XjSpRVwA$&eOjK_n*j_Q0GI=N=YkSU;AuQ~KSx zUDItdcF>QF1(@~{(-%K;6@o$gRYIAlhsnpy(TJ+Fv81)^ksxdnW_4hj{&8YY_q|P1 z{bZ`X*qks!Y}%GfUx3C%l6cUKQb;?7|D^ z^Jy2JM}3nwroJ6N^{KDRffzOuHhA^v4wGf_o_An@=HsS|3|b!p%^{`vU8Kze$WJSS z-%y}3xW;N6HX#}x`l-w$7MtI$6`19Od8ER;mN1D+VFu*zhzoNMjF1{IlxqwQWX41m z+k=d!-p|F`K>YuSh-9O~yiF2Gk&?f#9^{Wz@?S>U+=BeHB3X%o^dcGfi51DpYeXay z2(wIKP9jX=N-L7vU6`97k|!QW70JKaH%%nzEd(LkH1&`BDdmqo3d+w>%AZEs%tC%z zX?%|OCM80wtxZ&$RC{SHHM?n0R zIP;@FDfU#8xAuN`no)KC|2dZSG~?aBefTGNv4g|PN*aK~Z7Zj${XYyj-)QY0X;U=K zk#k`F2KgZ&t9q3HB@Gr)^e;Ibb`d!7Qvvi1&J?yF~fL z<}ii%{6m0wo5Ea#v>`5q8Mv#?pg>Jxp!NzddSN}iWd?oMm=FG>l)JQ;feI-<*I5{r4R|OyNjdzJHMAAfsKxJDv3&C-m|V0?%VGJr5`D!Um$IsLw;KB zd%Bcf8Q}it_bm5473Lhm{8V8^36r?ea{oLElzYrhINS@38`+e!OPesCoJ`zQ^|!bJ zIP(e-z(;=tv8$EX&yhCIB0sGFdbq>})qhl*6+jP#Sw)y@6y}YDNnB|Kun+|)>K7Vi z-_r)vKj7UI_4^t?x+^ml}#Yri!INn~k)-BtxfV%V$ZLWzNs^l)X z2ju1;EWnh&OGulWk)KvL-=IL%88ngI-mxa~&1E8j@r2n+VO~I(#Ff@WZgXLJJcQ7= zF%$Xy?F~y{gC^4Mn#jRQ@ze7`aX+PaA<||p^3zJ80|g?5#C-%}HwJccsN8|w^{*il zUJlcp_y`{T9e2q{=(X-`E2PDjijazkawkPOk|_JSCW-ZLZ(OwTX+`;3n^hQBW-R$epckP>L zOJqHxLsSIeX@1BoyI90*uyV$B7gOc8}gHMQ43V{J#C=9HU zS)-$4>PE{KrRB@gjp$rkcwsmKvf9y+?gPg}+Sa$>O1RE_v}Q>?y50uJ)7B)c8MWca zVFNjVRfF5S^bYS1K7O(|?PkAg-VkG&YH>g2%C>IKeadEl5o?%1Kylz_!^O76? z?^DH5_ zNra0;xP1YCGu(TKJlalY0Qi8yXnsgRZ;1CAKwZE9q$UN*Z|V6Apw2OXTd?QNbBX)M zucS4AtK%sKFvyAH0}2qw9@M4klq8cPoE-Z4s!WH}2AjY&L+ziZ`o4SNk#YwZ{+4`3#w8yV}kj&^mCoSx(7EL!%>lKSrLjZJX`aJu`k^ zi^EaM+)KJ~g{&W1*4!glP(h~4+E7}bvL=g~AOQT3VdRoEGK}O&mSH5v3Bz|x5QeuR z!)GhQeUUZ>`DqyrK@t);bRG?c?Y#<@jtR51o3pRnk74l#f)$yGr%q<|2q63rX_b}OlXZR0&-kjf^b9R@@ zp#k7Ir_%+JbIKO^QQZi%Sc__Y_DBnz?gs z)(Ukjw8OPGXL4nCY1NFS8Rg@mWlP~4>QM|1#SQK`LnyHK(c?5a%39qMG)G|8P);rI z%F@8KdfQmC%6oS5Koj_;@6tJ4?*?=$l~1AE+50hqT!RHmzFYcR)R- zP_9OSn( zQ`xxffZU7IxCktR2y!MY-*urKMgDT8@O3%fYF?>)O+nfm1AdjSNq)ZWM}hE_*bAKj zf~JU^+ETEyY5rt0RxsPrvAd5B+=MAp_zoRq*wqAw9Ws|H9V>4H9cz@1?~pc&k)M{1 z{w^K&gFw4ppj2GXMyXU}TPp7B?v=)+l!RDJwuFl?hEjB%G!+|Ms+#s9J0P#vymN+# zDNOSIqvRb=@^*E}V-xkL{~8pi`qM8!u4@YTpjoR~9s4cEQJ0a0rSdZ`jGuto(GAw4 zYDT=e9ED6FM{wb{(mv0%zYL^VUTc5r>~8~qS3Svu{CG++5yl9Z2FJsqYZ9mnEo?SA001JS;yy9Gf@U#VvNAK4V{f;D36DY_LxDqvS>%xMWDnS$unY&ouYb0& zj^683pST&NkeaG8ZvOs^1g_k!)52l*)k?!pH-Lr%m4@GtHp`H2djkKQ%I=^+6rDI& zAk&}Vii>9@HkS0N=LAJ1sF3GR^m(rH{H8wFIL}S`T#M&gT6&TB>QoWTStRN(CF(p9 zRoE3#H7H1&ogU z;`tRj0tiNYd#vCDi>Tila=Tuyc(r53o#%L}4Yk#NX!Ta3k>VqzKaCTHFC`(Pm5_20 zayF$^rD$lI+MSMDlSS7dHbT$#jmg5t^{u1}G# zOtWQstnMJ<%JSi=wz%G2FIyrzfQ#zvu(!;xetGK;cvI%+~Mg`XuneR>(1||{kg$np`0v_oCzQxbL-2{wjGXSReE2wUW2IDW# zzdyQnxS{&a8QxMiXj^KF#Q~P{T1;_n$73BP4QVGTY0IiW+SN+ha-_|p$XA{Nq^(Cm z;vG)oiGwXNy%j=~5N0Wa+X&%27ee5hSBnVYCPHv6;bpu))=vIItWI5i`DDno%W9U3wG9@neijzccowGpZy-MbfNSoJ? zuW}2Jxf97;4a-f6V+Q!5exCo26-TU$PTgs#>vm#GEgy!gT2{MfnzS%}`$e9QpCZqk z9F*t#PQf>~=1oJ>tXh&etPL&X?GuH_qe$c?vf%f<0HkwuGH{M?*IY zeEtt&H1=c7MW$MDte*)SFDs7Ch~s1AE9p=BNgqNS8G-{tt)i0p-0C+_BdPiRc%4Fh z`QP4#a6&jXkAa&;!4A8q)nMi!})$1o5px>!STZhZe^k>q7SeFkCptfdU9k|!kwW9Vr(1B9Vx zyEpi@lc`N4XHD+nyhvNDR2DPci3b1FY=1y^H%f03)L%bw;8JrPnAYG(1x+{YEYFKi zJMf)Z+IEnQ=E6DjF)bT9=2^+_TC6&B-v zWo740VCCTdD=Q7DtT3w!R?^G!nJ0bn>}qB;`B_LD`>`XhOyFud6c&v^`%%+z;3kB$ znSZl*lQrn<)?`!+H_OIIgCB+p%~ z=RI`k=js25FG8{3=X3*X&y`Kk6CWvIUMRFgIL`zmzw_KOiIa7&| z>*mTwxequ3B5oEM5Y{im4g#$HugO6T$%AA&oZ3y3R8EIoqjLI|b|5@L1(4g0q8fZY z<6^DX$JTpI>#fBkwBFWKo^7^&JSoIktLO5C2-oN(w3tr+> zM4SC>x4#|yjh8UmXP8@=QI4xtWo!cYGB&whn{_{A*MI>h`#MaRCQg*e1LVmJVcd+p zRK^z}vvQPJ`H5Gb``Hq0f@PTc(Op` zM06<6{c_|dm)q55=)}!@Et#3`W;SRhEXDKs{A6bG_3M+F$=9#Y%ogA4XCyO|uOFSv zOul}gWV(9ZoqCpuYd33a&4L$jv)0#1Eggv=DBdS5nz(Zcl{CzRL^Wggi^VCRRaptkl1`gb{MckG>9duVx5`1wDy8KKq|M)u zpO(EXNDD%2ve$v2j3C?X2>PCBvT|KydMMNiLS3U!%Lw(%uAnYNLE?8EpC`Y^ItQN3 zqJce{3fT%$qNV-Z(qgBSgA!Ys@0Jd5 zO6#<=hRxe8&2&ml!0~}M zOJ@Z%h8}}H2cNN%NsK3t5cK_sK2OoFy#nYnT=W6AJ&x%0as|C(B02`Fag>4h066U| z$<8?SF9?oR1TO$+^R|lMP9nGu`O4p2AlcJ5|B8ad;h2EH7?ELRw4|ZRWJXFJO6-is zXxT%+Vm;23Gk;ls5a#V+Wnv#zqGJ}&#^z5Dn*)X7D_P#pTYhb_Jm0>b z?=3%F%WL%R(-w$)NZW2DjggX zG6W?zq{oUcL)uJ1z6y$=jYm-LpditgGAU^sQc_=a=|k9D@lZx?q+Rxoutj+VQXj6h z0=aQ~I)Nn1FG`ks1d=QtrR4#EKn?#Bfn25nDKx!Dh(Kms4uMpt<(!GMIS=_N5XPn+ zfh|A-5k`$t@%i4j52)s_r7G7N4&G zazL@HTSi3{Sq$m%DR)jdd?hmfzb3hYn*9R-QK^02Wrc;%&?+(q@^043zkJG%oJ7k5q?+9Q|3`(XC0Y-HsLP1B8^qs_C2<(WW0w*2+RZ zg9(&uTWhJ*Dwzue0*`_suot%=!&B_7z|QZhDlRKn9JjNy9_-W>ZN-07) z1W(xsteg<%BuY5R3Zu2hCEX>Ow9883t*Oet69E_wD}16X&dtahr%q+=ml_gn=zX5 zU@$^CDroc%W?uzcORxti*l7e?*%jD!6eO|<*0SQt#i|B66BmY_ib@p^5v)V;L4C1# zBnXv~dYQBr^@0(!>{8B7%-=#VNj=Cr_lEmv21%#nU{IH8osb_VRZ5~dJOpjXIs5=9*p^i6YO2 zplFIar_30~ibBC1M^UO#z5gu{CjpMLHkpo5Uw^l-n5Jb=5GoQHhlrp^GQe5gA;MWN za(1b5w)$Lf_A~O+ayFWxAZM3J?Sf|1CTEvl4bCR$ETEv+$Kn)(JayRxWl}lm^EPB9 z0iV#d52LL&U84lhR!QODg-seP9Qy}vAeIn#BUFER?Y4a8GRUUz!=r9V9@|dCM zo4&qG|EPIBaMQ=Fj;!o{Y<6~dWf z#$tt;upB6^(}&`TE531|nQp^=S+xrh z)Kdh>O@{owhQ{x(j%}W$59a=DNQtY+w)4v;2~{QaIgrp~_#Rh6E=ktoQ~xQUK#{yN z^-f2;8|nf}q!&nK7R&bNq9O;10Dl<|0rE5gLjDhsHlHCsty?I7#1rSRBTX{7e*@jH zjQ7y7hJcWJQ4sI4Ghtg68Ge9RDQO21t&Mh`lU#G0DIq|bW&@McW&<0LnbKpPllg_i z67R``U>f~M^I=PyS4cVNYg_AU*@?T;z2*_T>~z1rkB4xVP%T+H6 zdD)2riAOC2urd-6{7GRw2~l^5F8*h?aMh}ujS3@1`w1`p2ihK_GZ=Sc>cBAOp~g;J zJnyi`G#(h}LEs^R$Af##${~`>%9WO^EYq1%?{r}bb zN-_UtlyCOyy{s3N%p#c?DKBw&!{(@YR=diZbu`k4?EaF~?yEphwWyz9lWzz_1dIie zJ4Y79QaT%J(9wBB|K4vrzC;tGmBYlV1)sK`_c41QA^d3~hOQ|(P?qK3r+3|7+|12q zz|H)oZsszi%@pLTn|Tm+;h9-@2L%a!8%Z^eL`LUXT{f9?H0QVtA&nW>_Hf$^mJx2O zcFftq;`CLk&{tJGMKjB+TErjBLe?-(?X7$ObmCKnxTeRR5zs?AhgnT<*1Bs+UHGC@ z&+6YOuQ>Tr%kWY1%u>P1jtkXEf}3)1}0Bh+zFKy zcS5Dbolt4f36+-rWNr~3zMbmY#aiGU6V+j|can-2NyOb+iaaLb?7a<*&)pVGiV)3bYu z+;$>OHA>STWuPg$E1J$EO^>i^k`-Sa&}et}<)gNjkZ)oo#g(`f4GY1BG`Q$Ip&+`D z-o``T11GIlE={$iw%plgY4|C&l|_NO)_y?8QRQ5I5IeD`^0To4woFG&ohyP8)RK6i6SW z>S=r^U;QA^^nM?3!%*j@PWZ0Wk$ zS0{Hg=VRj?KI@h8Aw~Clt@2?p!#%*10G9pzSGWW&avlL3?!IP$&E3+e@S)T^@Cms8 zyRV_YHp{`CvgbK6X6XjEJaa*lUbGZ6VfjHmfSQSC+<(8TG``EmqVes-TCw5^q|Fh# zIgKxHDt|r-DB_HSu4>AmRv4s&qhF#S2-sQ$yB)#qqF{F>*wx6_Hhms)J(2j4F4#G& z?jy6D*PjU4_@*PTg|5iwuIA{NrP40!u4U_v9@z(}_ZJ ze7c*cd1wVT^HRRp%%R6axyPw;M<8u-cX5;(_-4WdC{UXzh4zxNX8@euEXOH|kB$S1 z6BWhhNSh~-ul5r#%kD0UZ&}@cLFnk;tyyL&*h+#uMZw-cuw^dTfLT6;0;T*f0@mAl z%Fhm(<(@F42D{!7TdaDZ%9=OwmA5`#V(FY(zuK12SOqEo=cZ^72h3!Dh4KP zmcnt=kc5{`4}GVn=wTcj20HSJmPpylP(uTpc6~q%QIyCHa3!rHWJkvck)OM{BMe(c z-`b9@7GFNFCmHM}zV@cuMS2C#9jjgG&@&~@??B~_3>@aq+)4CTiQ?uvRM0mdZOV|Z zf)2#cPoY5Ycb)~N(UrsB;qoyLkxAQ@UH>j+10b@Frn{7$T`fI#o$Z`G;4TR?6>Qm* z2nSI8UaI{X5uS4|Mi<9AnhsLEUfcbq6LnO+Q)BmU?&DTOrkZXBQ;zv}HU%&}* zuMCe55GWo1>5*d{NFy1)0F+d6D7@Fg%6-0+2PQk_$`9T~%*on}Jrz}u!wlDRfpe< zZk;A(0IHVU~E`Ie<0SZ)umjD{54CT-qwss#t z+w9wNxMd}TH)WEeq&BhyE~g_LgU3YI2d7wvQKY&X)c>wP?m4WQu{>jDHZGm(?2R@R zSt8WBhZ6n9FlUMwgZI`;*C9j3kab#*43MC}u@1_Zj}lUYj_2QZW$ZGB3lc4tsPNdW zyiKQ#yDHnr9m*Obar~{f49eAI6%ESVh{#&J^U6?RF3o4UTPl2hks|@x2~<{52Od)F z!`TBSN_2Q=A$ErcC?d~3JMmb^v~MdazO4i*evU-PimyQ0?7N+#;+v4`QSlrUh>8=3 zsuv@Cfd_VOdrxGfM|KcEUZc*q=TJMUgtJm zrhs%OMT&Wc8Cb-{8X%{|uqW|UG+nosvaR5H)k`}oEV&tz?k$_gN;k)HP1lW=c>`UrKh)`Jh{Y%;S7F5kxkTKJq5ZxME z`~$#){b1WwDK<-e!&cQVY{Vb9*Au=C4rzMrxzC6CAC_5x^Q&+w(yllqD=RxsV6>oz zy2T;T!^5QIgdglnuUktT>8h7jgYr-zyn^$c!97?S<4Mz!Mg}F2N!*+WxXE6wn*wNS zGAxc2^glxVX7nU)tP(P1eZ&NFQQRzjSgiQFkuZ|Ske{~a&g|=$V4XlF6}%_awVTh(uUeaxJLe&J z%FdlLUlN(Qb4FmMJaLCSZJ9ggG9-#K0jT_vs&MC)pVhS@i6X-`{vPP0KcPQ>I zIiF!xO_R6uL1BUm*~K|hbUG_b@}@yd_K@7Ond~Xa$M^!e6G)^1vblD!G$^)N8EKB) zT5Mp85wHQVn^^HG^#0~ybz&XzoQjjTK)*d<8DPs2^X<#WyYq3sbu~9r7#UG6_o(hoTgXYF!1VGH`E3 zsNZ4h#qCNOi?<0L1-2@6x|Y-57PpBuhIR(&?0Wk8^}A<4Zg5O;rCZ`lh!0@bPu~oG zGq3B}h&hGziDk&8JlPqx&Moc78o6`iXo}j5gW$Kf+`fyZB-zo>cnQ_a2YDikTZTgx z+N_H&L)z>G8L8}hW#)KgKMMsa`_Ui(xI5q+`T-cCN1?00o6REdly{J<1ljMRZlg7z zB@H|G5h$p()d;GOlb{lpx)rSd=7$i$Wd^?iLY3nvBjrQ{yPt-;77j|uzL42)f?Asu z4=%D65)a|kj0{!WEQP$TB9C?HJgKaUH8-<74_LF{{Di+U;|?i!K^26y%nz&Mkhl*837PabG)PoaeY8mnnV$RKhvkB$S z*~XLk2r`R#?LzLH-vLtJkDFVV{UG?uo%6LPdz#di>~}ob6PSI!WJ}B-M8wS~WF*}Sll{+Wm$=;FK#~{0WibF*YX7OV8@`+B?zivR*vCJxUvc6>2RAwRm-BMac z#bIa}SCCD_zet-hu!kFf84%M5 zf_=qH7yE)h#DF1m74Q-0ac~2MHzv@FJ8*qf!N)~v0)NHJa3Iz5R4g#5xH%o0LLwz! zRn7P+qk*A7Aq*S^nP~{>8%(qWW@@G*zAuq8y}-(9Fftvw=Lh^mcNiJ z7fIUYv>bJ#__C-Ut(`w1+HVe3F-_I?FBGs4(G8D^uXHCCp5H=PpN#6w4=U@&BW-#@ zB+B}oK;+V9uV8=RwmSKe_w78)JNyGm#hk*MZdkUX(hk?%*l+O#0HoJm< zI)%gX^jpxOT%vy$rbaBEFV3+Sc*L0(G@n@Zvs;}+1~`k+XZJzi2A5y# zOv6*;f%TG@{70zYB;@`S+TU+LvxzBGsmuBv%)At3|!KvDb zZ&dvw*R4}^X)Bh^XS8Ni+{yZ{(=0&izDn!tLzJDJ&<7p~o}v z=7FmvH=nuobP?|7CTmgID;ka+F$j5?Bar0;jIK?@3f3N^;Fo?vGu0XqY~ZP` z721x-L9$MhXcg7g-@+VKqv#E4{CrIg2Z+3q7khqp^cPljLdQ{8 zQ(@r54|bgRxCyZGSxafz?mkGJYD6Q^FcV%yE?VPCF|0QaEj&0!;a#&tYh{~8i$yz& zA30D4Sxn@JX-7GSsoyYq81pni7uPyI#l;mmQ4M2W5))`QK-3~5P=qqk%E>fjbgRYY z_e|-@PaA@sJfE#9Ry+Y|Q<~-UPo!H1+)_z*)*#p^P6O$+ zkYf!yPuMCmGNrNGUk%S#9J{@T@3ewSdCa@Iv016VfD)dT1e1MA} z5p)D{*0IPuq!6>(V-(S&`vcJgMf5b%=3eBhXy^My`wI#ZUy1J)$v`R&lH@%B zt=C)dtJVo0VS>L{!5>fXhj#`3F9csL;8ilQsVS4@ux~VUtBhl^ehE&hv%CZ49o!-~ zrO2G8M7+8mh_IUg-bC8Ghnrc7jEo6}xPkZf^hwVyv39?4&($4Fs)5{B32%Fbl$ zHZ3nSH~b+Y{(4{FuT=c2kv5+q-*T7Xn@u|i_&aw8f?C)}i%z%HAlc5O^#gDV(1A76 zxVgIr5ZY;xpQqD@>Oj7KS<(%>aiXMKnreiIf(t+d<+Xk|XQdwsy4|s-i`$*%=>rNk z?slQ}P(O|!qm|QWB;t0fah(zxOD{@bph{pHO5kJUs{|fLuE#wLfoPI$Hwbg1Zuc*z z3F%(98z$+Iisep+k$%ryW0Lwxm-_gBg!<$50ri8G`ZA==4qZ`y6$+Gk?&Ar-^ll)D zf*x$ESP!q~4>UhGRT%JYI1|}>7zlP7z8-I`OMFiy{?@%g{9#IbEz;&J?7X^56#Ov-{yU7(R#r!+7?R zF2)&-?11cg+U)98>()o4QQE1`PE6_{jF45WvPK;lz^$%jRv28&P|^~I zC@{~HVPQb{Hp`8|Su~ z4c-BHWF%IOC@rYVWC)gC(1chhz1iZ@?-uFnGg~(Sj??bM~M{McB`xtYxAhU*M1Yy)?RB)NL z)(Mlwj*;-k7KO~OzY68o5mSX?swSpmT}*-g;6W6qKrRO+^T#@Y*Jw`DM2i`#2?k;q zI`c}B79BxjP>=5)D88+T?>fcTm-s$KzH%18cM$L;7HV)L!H2A1xtFjPnF59Q@*aRV zTOq!Rw28P71J{oI0|kkR9*8?n5^dThQDnaSm&oKILX>@VSo9~vp2~S+BThg2h1<^xPbU^2g$t`KWKPiB#xp~ucSN5V9;xyl_0=o@qGYAB~aKpVjI@^uwC2N7P#*lTOl=9XLwhBXo?LSFa>H8oEtIZJs>|ga%Dx(ZS4G zIv1GSJ|^&``LqM#F)bjo6*5AwQPS?+UrNNK|0ZI85K>A^RZEk7`K;Bolwf4W+(^Y7 z952%ICvrL*_qV~L1Us^L33r-e2+Q|4gsro`_4Zf1DkdfPF3H&S5dMPyWY*B3lEq0v zc+-#>_M@0&%PvspHvj{L#*sEL@+Uujsh(k%0gn;w}1{lgX*nwM{>=@9qi zpVafXzNcI$Dvo(rU&|5EF4bvuzdPy@a^ALVSo2FLEIU zoZ=D`B!2UBX7hexXLe7tWDaf|DJr?=x<1j8d;B}YA|-Pm-1_Jk{FKbqT~v4c0oFv4 zw|_5^+@2(Ctt9M15>_HVt%n;<5~hNLB+iM%*|B+KNh7Dp_G*hD-et$Y2v|04wJ)*$ zba%z}|eEw{4JyCJIKo-Dl*Lx%%moKd}^ zLSuoq={QBMMT%|7PQW%$vAuz`xy8j6FqV}lNDPpUoNlE?#=g=327^!b7wt5mk^?A8 zt}n3GT&=}}0q!zGyJh?zgRIaSz7@uYl9U6Ll*36%cbAkvCw2x&xq~(J8{SZ*EMN!$ z+x53#PgSrTI|A$>3U(#Z<|*W-wVZ5%Ef%mI4#`>)`uY2J#UA>8t!CM~aZgLfd#i=L zail|br^kxVCLOzXMaK*jBo@+ZSedS|5!`LebL?!SV`rEcxlB>~vI9^Yqpbdpv{{0D zWtE%GJyF^AK+#!-&>o9%*zj7lHs`vLW{^U8hER@ED9;nhbQcN-OCBi8QP7!NgU$)H zv521d6_d_YGw#TcudGN<-To0=u`}wjJ^76zVT5-0`RN)-!+fz5RMW6pfA`sYlyubW z`aB)=q{s{$|EOrtJ;(J&B4oyBIA!my;NfI>NeA9X5BfIRCO&%E${+LWhtgB9CvRiB z$br=+?m<0HXkbt3j4TD;M_UR%NsoEbYw@$rl{9z0N5;u^-nsG!~13T4`2( z`TP);@FKY-+Z`#Vh8OS<-4Rs7jv^&kIYvN1Ik*9ZbzS9$!;#R5Q7s?sC!KCF>G05ql!DC7h6f}~Q#6B7nIM`3a zjxvZmWNuWDy$N!jg6v0-pCeywJP;Hd;(}~PC+?7KXZ)`}9Cqi`;^PYO1EkG-7h<40 z{|N<&s|2F9VG0Th%gNeFSWUkZ*0hmk>PnH&x^2PFv&v64`FRWZDj_yykCp8Peryb#xJRNC z3!fXu#L-hbBD>pW+irPlMRFIB*u6V-NSpIrB!S+k83l>MJu%R&t2QwPYV*ZFH9y0C zq_4i^8{urAl}sz4~wo zNbn)IU%nKQrxT{El*Njx2$Q(dO8S1nWFMlABM;3D5XD7&iP#h~TY3u?Cmq!-))ggP zYU!bpuA}St$2r`)hHC!K@T(DBj_U24f1nGbvC1qwKk22PMi_DDM*`dk*~64MC9>qB~XTp zT7xoa3kk{IMUXDm5(2UTX)VxytNn5YKG!WxFESkmH{#s~0)2+ge{>4j;Q8 z{_G+~J-eA`sFdQvHS1`n`i$)nIDW#0m85gV3Q%4z2TYK_ag**iWYV_24N^VgA0pMC z^B~m&RI2|$+T4l!v{L;Z1!<*v&G10jwJDQFT+JmL zCH6QHy9)Vfi5=M$vC9rmvD(6b)dqAA+8|TXI+?U`lb8D(T)YCQonHv4ujeMMbs5rT zcvqy}i2@0rg4VigDyg8Z~hr?{qq20ND$j1&)~D?<;t3FfY1dcw9d^w|8cz>I3EKgvRno< zoIH=PQR`aVKUz_VkA9DL>tX*DU*=xrYb>C7`Fi6s;cMBJ;A?L+=H*D6om{^1{d`rR zU}Jpk|5-Y|-oKT@F_*6%>G^uGD1|S!3DH+jS=(5qrpNtE{k%e$TH6au4O6DpBW=Q9 zR+SZCstyIp)W|NCb?OQr5tl~2NauK!pQE85BaNn39vW!nvsM#VI3m}oha>XYg~&YY zUrw1|u09u;sEd2{IEPHCF)HNbcyh;7@?##gHowmPR@&cI``c!J>+LTm4mfpDN+cDz zii6Y3iAOoX`nMr6RGN!$Ypz?&h$=Bxhi-h29rB>#8O-F)=?TM)#>fXkiE;R8sssWx z>Nh_A5p{5@?P&kIS==8lqgrQzE<3>mR2}I8_|wz2f~YVzsMjXN3Xa)A#^9nZbNY@y z0qo4|1XfVs6`eWb!?KF5H~oWRgJ#cI9KbqPw?4_Z@zU~mA*Ffks8Rhxr z1AVT=GgiU#%xn5=V_>T@QOZv;xWSxebW9!Wv=*UZ4Tz7bkRWSKeUAGBZTl3 z5YkW)Amkb^A!j;-{0iGqiy7j;FQf9=2uC>I&xsX`(U;AwC;gy}@fEz+S-1&r4zO>Y z;=CzaGP+3plU%!iK*SPu@jQ;BTpymUBT>c}YHFS^iDRu4Km z+!xniOL*MAvjlX3K)K|WJp<^4P^6Ej7-rUeAiZ7|DmS;2gIIA7q|FH*c86uN|B${f z^15eq@+it6pBl1%%cnAqt7W=M({)Tw)pR8sO2dmQ1aRMmY~^C>{xT6dm-WK?VntVa ztYED2^+D(XeP86}*#e=_cl9h5T?;`bKAJTcKS%1l&Vf!J{T1uLYsxvogb~Boms!`1 zpS6gIO3-*6oT`)7tDt4(SgxgP&L*3Hb)mecvQpL39XFQ5^v2BCD4g6`VtIPk z{Ci*UB&^3uv(vJ5z?;IBB~ENzOd)Yxnz30sa27Tx0RBdz>yG5he}^Bxm96SK(PRP7%lX(1 zqdzendiq8lACw4uIjDd~w6^>b#DhXqfMDVAk1~y0lRuogjEtNnuW5<%!j0|=rO9H2 z{LyxJQ=IM53R3j}sDr)FP{JjjP)NivoBB~SPHkSBp$DFM#gh@r@Xokx{BoC8gUF4V z>?KP<(B#wmJK}VX8#Z!n4SRg+u?HsYrAf&{Z)_ACBy{i>3vB!W1?ckB=spz5;5lj2 zD07W&_6MSQ6eo?2-F*eQXGQTF;N<;*sHo=&u_A}5KdEIEawa^VIk-1?b&t|zCw8Gb zlmJyu*R-NlOZYAfj z;%AXIJ>GE?z#XifC}IK%#DbmcN5j)}H9%(85jk;_-&&I0Glzok&t$~+5t_Xdp@s0r zU^7Yc2IDG18q+_Rp zj&0jU$F^;DoQ`dG)Uj>bwr$(yNq2v1ul23H?z!XM^XrVU|IIP$t*UoE^LbG-;Z+==}56jkb@E41iw(w2OaP z!SCsnzuzdr`MBJ{F`ASFCRVjD<}G3nDj^aApfKOPmkq()cy;@-ajt< z+J9)~qn*EC``tKzy-mmF|AL|YN&MkAY|3hvS4*k|N?fFAfxL+WLbLD=N z4_-g&|0A~)KQ#TrEzI9N75Xc({QAH5hgZLJWjO!UL4Q}Yi}bgm|4OR=Z$<#{N737- z4@J@cDEjhIK2Z37Qncjb!vBk+*T0wD{9RGBzbpEYaMAuso<7L`;V2as{+0OuNTU9V zDj!_nI#3<_ji=NvHHrSHsrXCH(vSN8h$qN@srhTmoP&=!PF{Z~@bS9eDL}+85Bc%z zf6EmA9!m8|{t-(5bB5R*|KBr2nt#0q_aBY??+x7e&?)GTP9HG*Rs36)LcRSfSNgj~ zlf?hf=vQ!8`FQ-_9LRszKehksuaB>P#-ZO!0sh@f2w?s85+6GKigF+0F~6n$@)EyK zj{a*X9UkZA{Q!^gmwWs0(tn`5TlsCVf3_M5M+Rp8xca9-hi4yeJ|OmwUyFZR= z|A%<{FL8>$izohF9PHQ8vwuDP*MzhK+P{mN{t-v|Xvx6G>MDBC{}MkoIAHy|EZ4uu zD*jWJ^H|2mHJ}77Z3&3zL$dB>?d;dQu_iIVOzc`zij|;yxuleVKn-A;#u;Bk1 z)5h5P73Y8b$u9V1&p)t#JKPVv`wxEM{~!JVZxjAD?|&V0`~TPF1AmT&{aAqUYaPbN zjMKk%GGIM;@BQ6O%=?dK{{~2sv(0|jY z;7=3(kx>2F!{DP*@x$f+areL4yiEQ(bNh5m{nu0eSi`SiD#!c5`;Qxb!ROxb`&jwk z`^c^Q<;QS;U#)8Fpf&9@h=meel)OKCyMv28kW?hL39sS#aq$Q&@bcjHjR~4u&Yc<1~${H~pg)>Ah5* zB8BX8y8gMu4B?ITJ(!qf^k9xO2TFz%lMvWF0Ou6qrzr~XW&-HiBJLX?ZiH?$*(OBE zRCONO31QMz*F4RuD}LiRzCouIjvwd7;DlDli>F7C`9EVPB`!%68I!GhYsrPoUnnog zFQOu02n?&RgZ1m3M5*Kpvr})8o6^SJ>9_GNnswUzTsaXO*Fl}G5Kfd1aHWVNtp*+V z3i4G?+xLnAjt2yRQ#vTkH+wF;Xw^567_@U-oa(W+ziN)1x|S=U(^Li}0a{TcYx};A zsv3b0V0WcXE~8Sid5^<|1Ux2+LJ^6~QM%hj@>dfI59*FMrmcE8^HM;AxACw>2ebD~ z?It@JQn_o_ig6q(B-uCv?|jvRBz8aASogGw1KUZhMK1|Q&bh|1i%K!LjQYkMBo#}c z>+gs@pzFDt_5+TH%b*lHxCjP1qJe0W0N{s-iIeG6K6*VcgBs(|?b=$g7AwnH>J$W_ z(x&gQ)B2{AfO<3LB0>o?i&F5=-4rZ}k>y&*Qy4z!PzZs1oZGD@#5}dQK2gsI%(S(? zsWB7m=fpHco|%>w)%rO35+^@9&rR5lC<+Ir?I~*eC|`S%PIa7Ce1i$Mg!=tK)4+~r zF{AMc^=$sEZLkE-dl4%H9b(@;g?1Da>VAY*db_eGa}~{>^;ESaT`c&%X-Z^m%ln4p z+-N%o%@{@0E1)FE>L5BT^$RVw;vQQ{X9Oca-+p-S5ZW`GK`c!}3cwa^Y4-T)OUpIz z5@F=v8?+?0O*28qIt>-F3RWe64OWlsIZj+> z@}269(t+)=LQ2`i0#YNpGw|pB4wiX;!Uo87@jf2 z#FA{EKofn>iJI7%O-lGE9h~s}8eX~+NJ%vm-poxUR`w5>sd}9X zpT!74RXV}rwv)At{9RQMEQ!u=@9A6^rpTfbLRKgO;35OQs5bddX)gZs0+xDKf2%v2 z+|mT_bLPW5_bD5Ge@8i)$uiO^4B_e3jh@(e>)iz2)B>+!>O7I4R&u}b6*jEew5R3Z zQL~UCw|vnv?z~w%I%(Vu*s7XIz0&1u_U$Nz!^j~k@#OyG;F9erJa{=9(BVjHO~drL z4=#y3dYj-WeUPi^VagvA$}C5P;qbtz{}ou9kEuB@KQ`x$K+=o~+Mt$+9eD}mFx7rS zLlZ2V`@4zE4wby)!;KXVb=pCGKZ_}^N_LjE&jf!v35wehWqF~$aN2W@4v<(n8A(dc z>#hw=i49@|sEDtp}0 zc$Lh&Y_8IFW{{}p(Pu!1;U9Dtrj8-5c0*ddnyTr6EDI%Q**O))=BH^joz~^om-Gxj zIYSWKoLxS-Ya#7$GU=h;hfT!?&z{Q zR4%v>5AHqRdHNss_M^i;Unv$8iT_0PBE;H68utV54bck?W>dQrEYx;Ad`0S4qn@Po zLOHE@+e)}0rvyf{YcHGUH=CY+l?Fc^oDwzbzo!<@4N3o|6%5f-4-ljBT)%4FH^I>? zaqJ8}nLtIiCca<-FF=JeN{Ld>EhipRkVi{8Okj5`zd7DP4W5v&Ty$k-?s=HWRWQlT z#)V}T{Mbp>R~XuA38^X?zIA76&;wQX-2$bs~KwCSgscp>&O? zRA%<5OF#SQ+)Xd%OPyS880ka{BrqmT*vPC{ayuxttV11N4tp}olJT4^j*jfuR~Vt- zcSU1U&ik!B6k6f^d(KrDoqNtyliP@zz?aI0p77Y8^tn>rZ-(7wm@!l@K#9<= zrzcNegu&?}lceZyzFTGf$_-_|*tb2?;q6=+Z>ot!&J{F+|z0tOue5x>E4M z#N>qGvNM96!neold{$V6bP__*9+}5cS_k5>N1vt}NWh|UnlsA{3AeZ|)h{}`FE@WE zHr&`D+YVISfSY!8X4PlV=CMu_3c&R>#yZd%XE>{wI97=>o8GSf!5&5#8eTQ?)}wFD z)9=e`y(2e)!49?kKuy;qK;)m9p{_{O}HBH<#F~g`p`Ed&X#NYuWKG;v2=6 zX&+D+{&nJ&w&@56spl zsXOL$4-urulv%*F=3Xk@rxa2_-fiK&D+mJ66VRg#c!4SFJ7@Nug7XnDZ-YmF)IP@#@N18q-y3^U0t=7@QEz zbhiTvnme7k0n225hjWu?9SRQD*UR?GNFos;n1ue`0l<|?C=tc*Dku|bkrA_)Ic&4f zURB^$E8B{wnC4s2B!ZC;P&D-vwWyAy9zH3Ub?wHwwGI9l8}jF&GihDGWobzG#7I4j z?5w4VI^iUb0cy#|y0JxNELD1^K3B0Ipp!SKd%#kP({YVz?f%?6tnFdN%t)F-S_##y zE`hfv^|9a-0~ezALw6&U$ub$r>(B8_$>T^mQBYL?;#}@6!Q0~n*P!kpgs(hT(oc3l zfi>;DUf!zqAW@}@^|5FbT+99`C>HT~x_T9SO$ECvM{*NBlBn5xxg4X>X&I|kanjn~ zh24VHW^vqJPoCkUtBPZz0V<}ww}o(FwWFuP3-5>+wU=aI>;jE4+C4eI#VrI0fKeDz z=iCWh*vNBSS)r|MSTedxAEIYbIL8kQ z_vbQD+?xs#^?E};^sn7fJJs$jQoaqd&o4%uiB{G+@HVAcWh60ZIByU=6syAkWv5SL~=7P&Rz1?_|y90!q-yA3}8CBn4#~U@nx_ zgY3UjvpFfpHGd7wKeqoFFAh70w>Y8*hL1Q@<_a$rn>_R5R8uz98<^yE)za#rJsF{| z)QOgl(L4iap_$B3G`|%j$TGhO1HDuLNca;Q@4)4{8j4Z+En9u>LjChRG1Rt0s@&ME zLqV4YJ>Oyfx&L&@9S%QK93F(}io752{yT}TBWcxy#5=`uy)^jVa`6GgXD!kgH(xb% zgBuceB;th#@B5frXG!KK;VTcY*lBc>Fp-I_MmT3V6U3tD(0sF}%2|`G=hOUR4~pf6 zF&Oyzt)yVDwD$NE!JIvpwR0hMq!DwQdI7{Rz3y1P>G?qe9uCZtFd3e8E$pTasI3`P z0UG~ftR;aQ9u1f_*r{x6Lc4q^C>BF)bS+HTOI2J(Qb$)X8qtQ+v7Z=JVRrL*e(}0O#FMk8 zY2ZrOEMJ*wQLOZp6B1Be%6yg|N2rQW=g-h~Q+%M7rIxms?IC)!Che3RAU->S3u*R% zpWC1M7THx~sJAcJv*A(6jE0rtbj5WX7k9*CrHJmUM7#gk97?pOeh${2dq&rZG$14f zdknKmTc0oLcc!sMftt}9S94U8N0Jtp?r=7Qy6a_PHr{n}Epf>MctC{Y67Ipv*Ar=W ztrRzOjnga$po8Qu;Af^^CTlMS&C^7ForI&_HMA~{cU2j%ya8AeUz^jVo+JfMY4OS1 zF~*m4Xvk%set?@yowZ;2=naFl9Q$<}!3T6CY}|}Ck-k$kt%Q8}3ZjwRS+@=bR74rj zCApuTxVV?t5fGrSPjKnN=P3UGz~ZVriEIaEVCd&&=)6bWw)NcTr*H#pTWwm5DjvNa zj8leEG<_Ft`EO6$&)RKNO2sIA!p2ImqAZ{hMM4^LQZuHL`V$4yvjBL^Zj)I@BniXy z@~a^j#S{|2#{9_8hkhAH$1DZYFCk73PCIUZ_p(NzF3&=VqIwx$o3(`m&!`F0z>xDAM7+k0Qvxr z084nH9~(3KN%I!s87Znl){c3|-;LTlG5IFv35xwRO+H>mdw80MVVXJfQsNZOY8G5F z@-wWvUZx22>c@bIrissVxMbSRzg0Qa-I%vx$O^{o$ZaH!8Xm%zL*2*~tOX8x3 zAa8&Z+-cUQ7a>#Ar$|c?%iQ6{g}!GQWVP!kZhkHg%J|iexJ)j$P|a7)idVb6+?Uj# zu6kgwA`pUG9F?&{v=Ady5H!dX3l?v{mAE9k|~ zCQY`73SWCFud6CvEAjzlta{j~?SI@_D(zLXT{+x|#mB_5!Fz8D)>dLMyZY#>-JG(sQthZ)j_;JyLo7wv z9m$Lg28Bi9lsk8hDSHZ*Yn<07J(pc!7eo>!tfq!x^|^WWYs8c%qTLAa(<={0|9KyI zz!ml_-R&a}Z`Q3{%ge?rqcl%6IIfA@RUFsgk?tw(kwsOWMGfnzYz2wHQOk;6KoPm7 ztp-`S<{a#=!AZ~3dz@B6kcn^kAUIS}l@+o5mz2N-K0(ZQyNNy| zqvhjti@f;>w;Pa2pl=Mpig4JDirWlVq_}-ZxxDTd{6(DMJd8CykO5^3>)-;Hg*YX4@9t#y$8GtWl7?T{?kk|u zdni)%2sH}dmc4UGl7ueCMT<$Igo4&KL)K;aeCV|~a|BuRf+Q8(TmM-5--6?kD||flk|zBYl!ZtYPF7-^(nEaJ;F9s zw76$D_Li#Jw-;44>6i z{p3lKwrlWj$@Pabs1Du7$(y6ZsiIZy?>$3>{_;5xMb65jg=a8S9Uep_V_$ec z$7fkZQqq;&?^vjUmTlW|cgZzL%rD~Q^&T;e{hZM;(?Z`T(y&G1?u<4?jk)gv09=JX%0|CYc3m(H+XWSAU4) zKz2?VK1JrvK~n>~n+k`uU)#M+!EdoW{|T3_0wwoMoF%R#hS;F8k@+GP&yNj47rr-6 zZbFosX{&yNy5?L1E9?c+dkp;8Ph1E^Zt^rE3Qzl6H;ABskf&Y4+0@!oFTjm zm&pb|HtbMCEw4rmZj}lv@Wdi?KP%Z23WrFWoPCVZPYmC>=axv<(}%c2OF?9%4c}}< zqq#CeyNoEZvGIk*q$fnX@{x3zx$$}<3TA~>vcd1x*@Xlz@4SZm(l`brhr-)oz9 zW&5pRt5+Uo;Pdbiy{f=_YS$7zrzyB#YGW%4T-Q(1I-0#Z!Z8m)gjpu0Z8zojAoG>y zD+ds?)*nW;Sxn-^yA`&^<3(q;fI6XAUUBN*cibXvm%N|($WL*__5e?$XEaRGOJ&~k zM^@*#UlTrlLQTO5J>K{n6C)9_;}%4iQLay-D0ER?alq785hIb+H(B@tv7Oxlml3}P zHtn>18i}tEXlJIPqWV_OPgxeIdk6W&&vzKGU&NS{Aq^{b9>mM4 zPbfagQ}-|yfW@E21XKe|W1b+L>BijWeK{2kFzeHYk3`~54|sbSeLktq2k1|IVK|vg@kA+$jef}+F zCS1p8Y-p(=4c*(Yp*pbpo{mR4>8A}{ELN8^FW^Xf!$EuG-Nr#Y7R zXe7%*jS~V?;SPGEY4FJovLtFE0}d`IJ1L^t^%Y#uo!_z1^Q7lrj57hI^*RdR;2b0Z zuO$ah*L@!;%gE661H&0@1Rkaa$m~C(D3{yDSRxs#Orq8&JDQGjgZTOsfA3Lh(CV$a zsldbhey>G@EXviSq*~MjyOrJ*@4`E+M!wr@VsjOoiq&2XStsCP3u|*OtFeQ}pA6wB zH?*#rsZ8X?+ZP_E0u;^UTMA3RqL`xGms!9O3(%)o@F7__(x2~tV1@cpym}77KYX^J&vV189BTtB$o~!SO zX;(z>=WTW$67+do-9yFf$C}7-hs1Y+2QjZ?azRaHX?%k3#C<1e9FmxotNR(x_)F2c zdB7Hu^xv{kELpVbrr{Hmw*_f062ne0zu_CS9UF9G&M`R2YI-tu6Bmp%3M$QtC}t^^ zZuEKO=1+kp74|O+xj}IE3s^ob?)*o*>uN||COfp1FynJ=8x{uh1H1U%6W9=p~KzK=h z(*(EsyQMA?HPiZt!CYXaD%2pBOkMdsF-DQQz~MJTW{1CG+Kz?k*`gvc3Q+(@pIxN@rWA86#$MVVbW^N`lPTopXFR$a| zz(Bd<ztB`Hx{R0>&Db;z3z3-XsSY}9YgUKS(Z>Wl0P?}_xCQ}p$%Zbc&bP3fr+y^hy;ula1=rH_HSrLbv^Tr zRmhMpjE5Z_q>Vfn_=2G;#L41N2AWq) zDZ`X(QY0*0mn>O^6!qYW(@&RTMuV&IW=)o@_6V5WJtmK&)1mz}L{ysv;pcH+Q?#bm zkEAj*F(oK(y^=mtsTmH;gUFDtSd*!qLZNP^5$Z=cM7H-W+V#Dy)hA`U7oI_M3`6L2 znHOm9qMB{i1_QfAh?FW`KR0m?5Q>&#TZ`|}uX!W&9bd2tZV_=hq>oF^F1ueP)Wp+!=D!{UCu8X=3wCCN z(I39}`sJ$)$Tu#vrsXp>N&RU&%N#{u6Y5bW=;QfE!?&RU?&mRpw6W~gock0?9hc5k zyTD=B9cpF3brFX!KnjY&Z2+MHh-n%-UUr2q{SbIt7MyEu%&$X9NPC1PawfRX87o9f zg@RwnL80cN_2d$XzA`zG9=c+Xl5ku`p}QKL)KJ65zOxrF%;L?@>Lmhr`D9M3XDc&6 z=Zt2#a1>mV_|rbzN$rQ!nwMHqd!t8_t6Om0$m)=;E%d}c@{O#BOKojJc2LvpSNj`S z?ITP+Jjh`>EfaD}TGEJ_@SSao$SN-4xyR|+Sddqa`XcC~8Enc>`xNlB+l?5}>5CKH zv5p*+mF1tazdkZ^=)F~Z??~T#CE!pXKKJp9%P_D)BvOG$wqdy=phn89i=Q1wf+|sC z=qt+8n#BUYZav5dAn)V?_@3IJJ;O+S&)$uE$8-YwnfGWBN-BG;Q@sTN^QTam=%AmW z34dck*mPVeqMn0>6uJ_GP_U=nRas7KTAec{OJA(R?RJ{e_KP7PT$-k6YpN&ghKm#_ zZq|7Y4w_zx@LH3>*NBL3J>+zIQR_+A`Oiek(&^$RTxE*dhsZUt*p(yq!rq3l;TZn- zb_f|atqgRN7aL1{hNf_`*_IaRoHm{LKWmCN{`ff_Irx19kFc>jDL%F!SraLhGymGh5Ix_#emN zf5Im#7cALn=a`5;78@qvvu+$)Dyz^Vyg^&IN z!*t~9w6%Up>nF7$^G|C9O`*Jko*A!g3h&qCE^Sz$$*s0x_0okyvL^}gf%@VuKN@EP ziBE7-liZLlZmpzu>`(wqp$`#mT0*eD@O$G=xU!PJ*S#pRu*vA3Tb?StA|_hE%e(s+ zjLUbr;0Uxbq5mw`-qT;T-@5d29ueex;<@uSC2}+8N9WtX&H3@#m{|ArAYaz8`Wjpm z%0`b5X5~ni@uI z+Iu4?WE+?dEsc71s+>#g=1h4Z@ibxgX_Be(5sUyLOi!jScX+N$Yyl!VuPCS=1I!p` zc(1%r`G^Xz#F?uGV{=`$Xx=l7FThp}?cNE(sr@O^_qfzpcOZfaP`bImAK{3nm^%rG zDQK<>IEwaxQ1eXd@Ey@n+^R5#8^0CdZ5>)Z$*yjfS|c*iJAO5{s7AwrozGSd6Y&XX zkvT5PY(_r9Qb%O^;#*ZqwtR+xLzwLOPyl+pf)Dt_c`am3SW~rTEQkruDn{-8B_N{cDLS~~qc zNHh{U*C|+VmgsB(j5i5>;wm4E}f?QfFMbLYZSjh=_4^{xg;m!$| zAyGOVXV%2(kKk5Pg9rFsB!0SvYDlVV47yw_`n*pj-N~aFav@aP7?VCxy_pFlu7P(% z%fq+H-Y&kPpCHy2CZ)->VSn21yOZl-$bS8vkqhTX<)>oUX5UDgH*t+(5Vro!a);jm zm&wbGVBloO^G((^sU%5jm@#_SMicmg5u*9C6xQ%^?c%O{^vhZdNMS&Z0JR3A-arD#39>LImVwgoizmQ`$4P9LUR)M4e`wdGJRD1Goxvd&J%l zZ}SDxhWIUn2$74;vvPj3$a2k0E(GD$+9_-lGqQf_JelKTO`;MLCf;T@EM-Fo6lj*n zC%%xw6;rI^cEyKlWP#X37%3{w$iV&XTAp55v_UT6IIVq|;V zZ4XDnVnbMZ{CjgK89I)KB9ht+t#ks%V^2ak6cv^jihMgxFD(av3sIHHSu{lKf*l_m zW_>=Sy1Wf!)?k8if)khgHdxpO@lQ-fYBOs5`O_Y%aIO=b)CUV;w@8?`RuCf)th%IK z92~`hfV^c`ssRK>tMHS$s90Hg19I>JaLma>4>%gPF=uU>1-4#sA z9bgln7#Oxvpx{&%bF}VT!aN9X4+L4SS$C%_CJQ^LV9J<+F-}PBIyd=ReP_JBNN@=t z6dl`K-a!#<(5aBsZvCEA!O06C&$1wZ^8T>Fv%Fkrt+){DeA-UKM_`Ia{1hGI+O)jE zp~P5~4&BjEVDX97v9-{Q_cW7>)-WRgsjG*2uOFMNOqZMC=Xwk zphe3x^~#BT8#sbmHxrI=x)Ay>?`;2_-?-GN#iRfn1Xaqju76D`f%SJTQ;%4fRwvR& z=KM1mG)l6?8nEimD@p$xEnCz52t-!Ns|;H*Q#vYstRB>fw*jtlq$ z>Y0-c9<W*u$H@xJ`Og$HIYf1Q)34;e_wiG zLb|?aUz<};QYfQC+;FJB*i{`*QcP^15!IAQu9u_^1B@>+O4o_ZxlxqP1Q0E+7C>Wz z$w6L^C+zCI$CdCC%BhmzP2_k|%XW0a(0nIS?r#$`$Y|5gbg8?lBfPItKO`w0V4XVL z#^ppQn_HD~Kt!;Iv$Da37YOT$>v*Rg_-;f`Rx)u@T21Zf(hNBLZIIFk7S5gqr~lgs zfjNb_u7<*VC}hp>IO$h>rz&!Wc;EM=LA6hdB+w8eSVp%j`T9D6t==rrXopL8CN#hQ1KO;r1 zXD57`aN<7S6vqYWwmF=UAQgvL&gg6$bxGEG+O2OUi899%VX$%Ic*}sik#|!Qwhl)7 zoy*Lq2UlY!8ozij&&q(XlcIT?YV30sn>$f66Z8_|fNw_~IG&HZ`PAt)##lCm-hPe< z?QtNWkQkwie6o1hl5_EdVNiNYgPe|iWqg!XFeePB0x**z-0ow`?mq?gdc8*po{UmktJAInqZ zJ7-A@8Ybmevze2Aotq0hhs|8-@-Sh@ia+iE62#YY*h{_)^_!%3ywSGfJ$#q|xuk>W zK(yj!N9B22GFuy=14GyyH)Hm`j&c8@Q;6S17j-lTuBm_hNV!E!h-)?wc^5X2w)94(*;PZK?7EJ_!RA!PB>b?K87`}tN8bL=iv z0#HUs-PhSZDVTmKQUxqF-HEEH>zI$Ea&ETQ^qoqirWOFMt(T$wHrHBpvk5alUP)aQ zzJ6`!wTe|V*2Zu2MPkV(YqOmN<{IQAQH(Yb6l2V0Gx@$1PY}tJs&fqw!=7Vw!bUsu zOXw)I&8E^TKt6y(II5f6V@&+Xr%irtF&5DtJjk*b#NubiXw%KupoK%fq7i znhu{@u*Q3=NA@C}b6Shf9`lBJLf&vBKQBt}CAX~AD?KCa9;d4q-s0fq=Nj1+MV4c+ zy9UVnDbJcaTEn~5zDEl4Qj6|jKq{_LfW$JidSCTaD;+Km=#Mz@MUDS-0qleWlw59g zjm1l*Y=)|MEcwigA{^fGjm+A?y#%~X0zHdw*0|_q5ma!zOEtLeAba&PNOH+&qUcC- z+Qsk^xX*aVSr8X&#RGKgQ`5#1OyfYk=P(<{ZW1U8@E7!MBCE)E4Xnk8UB{fG={0dR&|#gA>#YF!eahg1|N_L zF-93^s>PCAn87OTGhqE>`m-EmhQ!YRS|w`~x*wp$=Kd%E-V|I`Ir^#tBIyVHx@m>E4c!fj+1WL3ijgxt-l*vQLH;Nz9x8qxN6TX|n z8H>PnqkgA>~l zK}0g&_1$73F6$s5mfY7oaWEb8k{z6}cm?(QOI@{gzk4G~6!doA4m-T7^IA(~@(dg> z4Q<4Ig2TjWfU{%28E{*BfmJPL;IvLYfFcAcCA%dUSk7%rd`qhLS=*(FS0as6x{mJE zS%y@FRw*DALlW!9k>J6tP9!wqP;+FnfEnM8h8p558D(G2lHrIO2B(Q6MIRR!r&K{A zEI2&VX$d_E=g&y8{gmFXFnddHcruH*puOoc&Q5Earw@{1Q&4WklHRY~vN9DiIt}eG zoW9IM8&QEONCWbYglkB}J?2o+^l;JYk*Iz(eRaWc!?K`|J#JGPV9Rtv9P>uf zpd##}sa`z2-WeMu&pxF|XTqgtCZ`JbOkP5%6>7EHrqIcXy+BO21y6mK0#(O2L&~DXm7sI9PcV1s^JZSZf=7O>cKJkg28F{}VnU4@5X+?^|~L}whmLBR=B80<(*qe%yD zFNNGW;$4SB63oJ3jhfI zN3$~`kC1+kd)PCMyhkXt!komgU0PZuw67vL-!teyADykWcZKxR@++hAgAUT;z1*R{ z=rv-9^3BjZDiAxwX%J`_N%vz2zsg z@IlXZ#1nc-C-0{l^_(03q$ajw=-D07p(3q?3|6`~Bl=@_Bq>Oa&P zxasF^Fl)QX!+GT7mcrz8$*67vfc|>^5Xdb715n+yMXTNp{uT?Bfi8DW7*oX1Nv~JZCYHd*NH#^@86RR}6*HGM7oH|wWPUf>G)OEUBDSYIot1~u% z*I}Nin>V4f90lVi^Mi(vzAredG;sn(a@g7_(|Zf{&=x0#0Sk7r$?xkA#axw&xXMJq zNfQE<);`*BUVbJgd~v=E0tt=j?H|OBVM2b*sIOxx+ii_rRv$4yeMis|p{yxNEM7+B z{+vk&|M7t+l)A=FCDg$ZdP5Knrs2l2E636(rGUI@R)9*64Dq5C5ckTWUOlup zn)Cvx31x2@P47pZPxLg}uxwfE<)(&2K3IFAe`J5lb39yr#MTlh|x%q1k)IS z&bl#_b89*ZM}|edh8N=pl+e#i9=^?ZB2(!!iZS9p@=JtZ`_0QR=)UjnR9s+wx&Nfn zM%NcEdA8hYy^;(85?T&jMZq+3#WiQECL?(de$x{zZW-7}m5iTe=eLO|wp{F+;2kgHk>nu8WV;B>Wi=?s+U)mFmVM>UM~}DTg6Be3U7T%JJ+sv4>lTd$t4;<{#ff zIgN5Ok6AczB`;rJsh*cJR|*&ClOt!GF2;F_XZfL~e5+AAwEdjZ&*2LmFH)OYardGqSb9a(pDQ27{2SporrWRC#2kTVW3TsuYDr^)bu6@mg%C+8s0fWAqbVID#Zs)9PRW!!Fe(F3U0J z<*Nq5V8Pe@t}=&{YdQuFjWPpXy~^G>?m1m&Wz~VbKAuugJn|`*g$I_H1XA1frgp6; z%7u|KmtUqf7YQ?$mUIa|r;FHe_|Rz~d71L+m&{%)NUC%t;P=xkY}47FrJRjhlN6S9 zP-tP)MbO34ugyjpNqaQxuvU_113{fn*r9x7+4LP`_uso0LRSviH=(|1?VhwOr1l59 zD$()Nzibo*%{*;R4}?l*zA{BkT?#0>fct9gsH8eCEB7*SK+&<_Cwc)6Kb03Z;vtHO z&Yq#rN_H({G1W_&SS&j=A?pU-K~KDl3BAWzk_?jNrYO7^J39JWnVL9@fgxJCkPQyF z1Uo{5tORca8pl9^w!g=6(Uk*2J&0cOzDC`5*VT0g@|iQ5ArOFR--LICokw5yVC2v_ zi?Q`GiaZsAb5dj69<$%$^hZr+&ZWpoV9@1fc5&KwTGl$ZA1a(`VN7JCpMrsV z+&_Jf{LbOTcF0?5)yB%gP#UEPDRJF$N08FI@czt%ZZo+$Es7@k{G!9YNaQSjJ^*1d zSdj6~NkCZcv$$umQ)=ucsj$!8UUwWg5z6J*)Hvsb&?ia7`X=Pi+FE;%&(``zdeuOO z$XW~_fH~%t4*^y(#&WIXL1@+%q^FN@#TW_Foj+hd^qLBs7JY>AdSdwyjTRAZay9Ca z_b?&24z>qBp#mko?!S2RKnUH-_@G<{*q)(u?s#ZN(4AQlr!S8PDPdPc0?*VkYpyj{ zdpUJ_%!N;wCQo65RRnt?@pHy-9Lorc)t8*NU%{2;6kYo)cXck8=Lm{XcZAumPC9i} zAgANHxiNy=or9GcR^~-n&Pg3puhgZ(EfUgRlGN0YN(pSN3-{nmB|)^2F0P$wWWy>~ zQM+z7!D@h)k(=U5J{Jd_LtT^IS6))g`e>!}?EOqmMm( zkW2U460ntSeb|=ja(kLhZiH%2Rf(Z-sdQC~_Vyb#4$w+)-?$dS*q9o$duaW;_(H1N z3qW<3S8kc|9uM$N6L*GKY`(Dpq!TVMvUYvTU?D1wtVK%i>d@6T>=u~FkIjUbBUW7r zv2%)G13FnHHpqEC*LRr+u<|@h*;k?Fo1%YL1y0^&1$x5W^*iYuQ+q!eNcxe0=$l=$ zodXZ#pO_k%^^6?d{ZOji1wS9Y)qysa#oA_sFY_jmLP9>%ut^9@TkERoIV9g%AF#&R zs_*`-8g9A(drGG@MmwscSRu)^?tMRz*39aJ)cW4a(gU{w7U%48G-y{8m0v4yg zth?l35x&Ff*tpCt=an5V_`cB#1iof5rnET0=;kMSMy;1VTl*Y3+ZWB<` zQDSh+9r$n$ zG7>gIgg^a5f;J?8KlV!gnY|v7W}T`IbccgXGoMbwnnD6_RQx7v~Qfb%&Y)mk0u8q)b z3nay2@vRi=fDZ=e-G=C4+^dsTHj~k|O4FbU+7>CIaXecE>TFA|He*&0v#|8X<6l;d zhA0YM+uYTj`^=}og*GOrEY&j4w#~8=B9F5x9I)4XF-MRRZ+W^HFe`com6-X8taGp| z3S|xH*6eZHg(58+a9phdILuGukQPXsZ1-1u>IC@Ns;=P!9HhQBgyh(|`}>UvbiuK- zFWbP-yAIuNII}z@z4OSq9&Jpb0rIgxOd0v|x&zpHOQ{JtcMS%RE?eT;Fc_7 zUa0^~4yLdv`soqiK!5QrBXYMD(c!@MGET4*Vl3>cjOBzq*oaos+i``JObPWWrh*1` z8Gipyd_bDxcW|;yA>;5*N5xqW|Hw2OrZk@xryIOdmJt6dL^W80w>_6WLbi)*LFfEP+~e12jG5Lk(5~Fd1c0yGJOv%tLIE3q#tvgy{E4xYjx2Vs zG?@+(1f<6Oq?)2rNSTnK9^lv+ftKjk@vHniH!TxR4W%J75n-t5V`xdxWxS&XVcrak z?~b4RNoHCCS|phSA^#VEdXH&54c=G53$^KWyR%* z{#la$f@!;pXePXxTY2bDv5#jSH1*WAxuSi0zViWQ1!z5?;#u05Qkr=Irj896QYme? zLF^2od@BEcvj1W*H=Xf$(qY zClnPRPlB0$1_DEpwkT*IS0fSO*O!p0>=fh)@}l{yR#TBD+R576byXHgp~Q zQ%^;x_NkSuAST5St_3a z!ua2Nbi7Z?vs=!y-E)zOXn&CEIaH^W)6mmw90Kj{*2L_RnlpE5u=%M8O2&wB6>G|e zSdocDXqmzg?}BdaDWX|ePOs}_<2dscu4k=YhZEBbvzZ2p z#!%q;WVaV|fFMNx*TYi@=;z-!f+ja1OP#kX6@EeLEzjq693Ny^%+CwzSuh?az3fwR z{e4VghGEK2B`#GjoNk6q%})5s5Jrvm33rxrv;ld-V-ZWC^NX8_;5L%|3fjiY?2)iS zm(tN%Z>$}=ZucCiQyu1j=N=!^5~L78chBz=y2FPpb`3?}v`aT1tBn{9^5S@2?}fPZ z(2kbl4_6d(j#j`%Aq5u!IAdWk{)!Aw;^*NQ+IZ^T|8=TNQHouB@@LzEa8pokhE1e4 zPnR0PJPJ#4zfN8-q6K3JT%1cc` zZ#Y|?-auE#hfXIhKjku|{sC*4oM7hxv2^Yj4{Dlly8P&#Ai#FQ9_dF5R&V>gn zk8m_vGxl%>h(F8~XE)+Tk1WSf`V2@Lno&nV0){9c@N%;ztR9%q$m@lt%BR$+=~&;} z4aHO0j}KY>%wc1l7s=*CYhvkg&t&T&5MkMW^N6yZe!D(~=Z?y1VYg~-SOc`zISbL3 z4eMVXchiR!dZJ~523~2c!3kXz0 z31(dR9RBiqrN1Ro`j~xO;sn6OV6U119KT^TbQBf37oTrl%5G1vH2K2b9?P00p=je| zlce1YP41>PgyY0uVRpgEHOqJ7b3BROdbg~`gFZEAe&{8#Y2EM~Rv#mL3OBu~2B z*o`qI|7j}-b<5~r0gQ4U?z1C&14Moa3JT#BWk!V=h6+8)CP;nO5#rd0IVhbAZuXk9 zs9ZC_vA!W*C@uUD`9h2_icy3#!$8kd+$VH5*})q* z8hGHH;RiTrSm>^g$IO9FCsT%_gj<7e@(;rT)Hpp2dqV`aJ%XWJn2P+fBm=$!$$l@m zGfHUBVb?b9eZMK64&MP2i7cPRQ} zc7w1k1o>W)G7G9x&!aCpdY!~^TkCtWf8qtvG#C!H4OeJSh?fY~tit=&;7kc4QT1Pe zp*MhYoDuJ9yRmcHx(4;`FvRxUN)Yekd;a7AC{_jvESlZxJ_M47!+|=52$8k3&Tg$D zeJRa3z!SKi*`>V&ZsEs{mP-%~e0ek|5EW5;=b{nJfMf2KQ(DTFLWiTyRfbFjefmw+ zQfQR52eL{Z=OV+f7B*dmf-xWf0`N#vH|U$H%hlo)XM2FZD#3H%p@gyF91uAJ7_6tApG<}dJQ1L z%!)HQdh|Nab%_$^`=mK#&wo6_6dc3OD>A;vn|Zc=BlbpS>GYlvn<>{+r6ziN@)4C`M7o(> z#^hukx0C&S->!~JjBDovm?|&2Gc*P0x(s=Jg_SHlpe5(X?e*BrcErV49sa5BQn?1v zsT2PWTX$SMFu7OYx)L8WCnz+rQNEEkeLf0-1_D1eOlXM0^MG!w%1jAIF z|5V|z0(Cl#YD3T}A%Pl0EvicH?GbN?tFt)Gw+>1Jrk>PSSYGJ&y>qwH6dzoh#F|w~ zE8kQ;8oortkr<@y1lOt)h{v^F?0b^UG>VMm7KJ?PX=YSQ63BWR?D$PtmiQGIWq2Za zoTtWzz1>!u@S*~)^BgaVthG544gZ~k$7!|lJ*4UWWazoDP6oSoLCW|~W1l4b5-3^} znrLtMtiHE8USHDzC+x4Ak*Z}vWlRMqLjGO@1cR}p$KE-X=CFrorLIyvt@gO|6N(y_ z%#)J)2ThYqU7i&`DZH!+vFT7ODbZAM=4I;$K3umjiS_SKlN?Eu;xD)hyJD}2dN-`t zpX7y>kQBAo8GlIxdz#9tKhb&`3hgx;)^5l?As%3B@pcT(x%`pZ;U}xtdr&Bzds~!a zRiznxCz$-Iq3}a%kz1uYy-zztkH}(aWiBh0%CHU2)To^kPi&1F-333nB$x{r_urg% zx5rnm-9MtcA|;a>@gMv4 zAQ=>nvhp$w%6+0{7dMLplljMK9Ikk=nwVO@YaLHkSdjWjPTn8W6>jV&{O5LZa|6yy z0>9RYd2I+}dD+cOM(}c4F;;g+W;L9UC2`$#YrF>>jY6P@m%PTboonm;QqF!*GE~X3 z5@n_Q2EFLefpOUt>PEZ97t>8RB(_pHAnHL>`@(%r?hW_6!{{hxZUHMdB6SM3XV#zx z;!ZRQ8+8TG?B0tJNSeS7M$SFhPCZL*Zv4`jZ84@pOa#wXiHV)5w_iT4R78J#lD@0^ zA+hGNb^tTs`%oAt6#$8s?1422^>_bu?cK3y1yK;IkFoH4@6Vj5G3`8+2|$tSU-(fm ztw`;NhZ~k!&`We(o{4v-Dkz82-aJ3hkJ=96F@3O5yLEnQJcJXTI@@matm%M1usCzNsj+jd(t80Cd9U-@sC)VfiZ6aH@$5#?TV|5nhkpccJjj$u3W}M ze3fLzh#Kd@i9oc7WG1j&qveR(F2{z3@e52{KGlMzVw*kcG1Mvx^j=__&_$NU0>Zj+ z=VlvfI`9>t#7&PCI#w+HjHeP!ptBYCIw2F(ND6;bvVjZW6s43Y7}=^2Q^~!z zVte4(-G;zh@^25HckW(g|IE<|@qO=Gd0$6G%mVj@`Y5VD2Ok0t1qtSo#;A{fXes9D zEb2D!nn7{Bn%XE}%;6pvbM;Ze8vasK^p~kWZX^HrU!8QN$+j`r!s1Zl9WIA_1LO=I z*+62&%k^|=cd*|1C^sCIhq_RG7$rJdCY1QrLp?CYnRkKDmR6o&aRdrcdoW%)_MZf+ z$3C(Cu=&m84Ec|p7jfy;ua^3n22J+%q7opTUcb-)z|D&_A22`W_(z=znVx6|I@Ci? zFP>;01PPLm7AjOt2dAK%)sv#GWq`(tMgC#Xi~x`T8^1FUwrz^QSe0}sG|<(-S^Twh z;1%L$_URJ$<^TeQy$n+Qh$W&vw5%xtF39lzOySX-bDqXoVoPX;iMh;{9Oi}ElVs4N z0=r!;JQr)|I@2oh-I!o`WfP;c-8ESgry^w2}4< z6=D3oy^Uq>6jQ6S~#Jl!slzr_<&R<+@e_SY<8*{US4DjcHk* zXBnnY6|Q-c9+=7eVy?Ml#xyByG1k+r>t#+}0<%;kC1S(l1c4h9#N}b@%N~K;)KSs7vr)A31)1Lkw z-3C-JzHNHqR~cR1f84i@k4=3zc4$iVRtz{L<3PvS z^EWMEuH8QiQ$kYR|EOh`hYqJ=V6GprON>EXD>vey|`s*stR*QtzE2$5|<^q_#geO&+ZP{>I zn-+sV>coYRD1wj%yCanPxuuu>62AT~7?HVgNnqNAMu-<K!6)fo`7{hh8J^b|16(fi_!mK_x`>F2cP4Vc+&4UrCl4GP=^N4z#-R7$XoP&!;K1yy z6C&`NnTxbS5`C%*mOw&CU1rN0`&|3$)_jDE4bjw^R<6Q_CTHUfBC*TyA-&%}Xgmbx zVAOd|YJ$*9%c9XsnC0~mZhQW>U_n)vvOfwyniv*+9?B@=>YF~-%-ECXmrKwM%(!h( zn>@&=Oo2Ghu6op5=0!`k4MY4Ugz6aBnN*txJ4(XA0uiw58XOiJXyqizN(%5cY3e=@ zdu$hW=x*1V_YaO!!XHJKu(Jea37Ghl*Uw2ZZbK1cX-^_Sy{EJ%K`E@@8q&1`HyP8y zR05kP(2~i@Qosi@^RcM!lFO%RrN=i7fF&4OB2+CjHw-uvlJC;hW-Y9e#$yZv$#7Z& zQt{+W-6deb27KT7ahgFN6uab+6e3$~&a|I{%*I3fEo)tpk!A2nm}MAZ)7dvmDHa>h zaj8^{1rF6wpTeo(VHmn`g|`V&J^9GcTrILlle;s9r-b_G2)*lCx~BV6*r)F0^L_Gv zSaHf|mWLct1sZS8I}_Ep;BC4LM)kXvI7iQkfQ~PFAD8l+o00#`5>(M9 zZi&1!zE0Z#&+!ekBR-pbv~lT_b8|CUA^DtU6uno!WDpt*->zMTC6OnC(+jsgtJ>@| zpIbe=uUvIse(mFt0&gDFRG(={TcM}a;c!N7D%+ZZ4<{4o6l8RtxA z4nB(rHJFWip+^l}sa6Ae#G`a%S$3YCY?fyKr%38yG)O)VSa(4%%de>y!Xdl;vuBzw zf1z)6sKG^|AtY-mks|O)lqbGq{sdSm#%1KK*N^a~IlcdlJ3thwOsMa~Tn{TmDjT_> zHg}oN7vo5`77ppozhWDWz<3}FapHQA-OZZ}OH(o5gU+ovRIon;YJ?`(Ll6U*lk-He z*1)M@CxmfFMu4>1iw}ctoBtQzM-!Ul=zfhruGGPiBOb?UJlF3X{khA?#s0gyR|bR` z>iB-1wH(_yFkcX4mV&ByDU5TY@VD8cqfj!uS|cwCuS{M<_6FrudS6E~J@<48sP&>- zqq}|6W&reRV{R-|EI!x8Q=8c)KBGKreGLW%O7C9=!tuV%un6nq|`uS#Vvjnk|334D%<6(}ekqtkEMtMS6(>(_RuX1wuhRtu0sk zse=0B@(uuVfmI6e>1YT{r92C3XZ&GX3`DMcTa6{bF?B0IL5sj4AtRICRf!t*uLu+^ z`1)uyTb9qBnO?DRZzmV&NYYO6;`t1Mq002eemvM1vLG91AQ8aEjdR{?+u(4n6A0UJ zjNz|zLRe%fb8t-Co}oz!XVcP;$b=gXs<=M`V)RSb7xF$+ zWo@5`hc3#) z7R>4-G`AdU>KwMKJVbc+r|9Co<}cnU@hh}DZ@U99p@!|t_RWFUY>tuB@dHtsaWd{p z2CNSC#_vN?8Nu9Y%Oc^p2nx8sgsOiVjL`gTz0t!m-Y4V>PVAi$gFGf3oM)?;|4#PK zw>-$NcD|-Bh+yl5{>vy6`-LTm+Kpk)?bB4jZt}W18(>ew{r%x93w`x_?tc>@Exj|S zsFAfTHm_5YR-j^4+$L|wQCiLg>u&zWn9S@46g5+nm-M4sgnx!Ld>4iB(*j=&#V8~QTihPOtNPp7}*$k-;5T=S> z4TIGdXe^1yrA$%p!0$`z=AJC)dA5#6Uk$|D+91lCO7`U4A>I}6rMUF!;7w|(G7iQ| z%Gu9oa9+`W0ZWQzoxpwaN@?)f&5Lll)yl*6DqOi+X}Z!}kEOsf)4?dJaCpb7<8O*s8x#)6`?2CkeunyEQ%r^ab3P`<`^+WAt zVSJ|nzd#KxC(+EWONhZ7Ey&O8v{Of20m53yp9zj-tjeaxkaMyGo;F6$>Stt7Nzmuw z%2OJKAdnj;Q`IZY3rgZMFZfsgc~DmJKjOZe zC0JkUCp0w{V%A9M#O`k=D+3VP#w)hbQ!3~1-BE*ay5}Gyb|6KQjS&Dk|Bp77J8{-RH1nl_bSn7d6Hef=LZJ9&UD(U zRRE=$%Zz@y%Xtv!UjOu^(Qyo6lW?F~r{ON1e575cO8|t*0aWKbQ8`Tqk`*z#R`)ph zAvB}_7PCdJVWzg@zkx>>_j%Ih9m`R7Vz!>e z)|LPGr{2?8w~%cZRQI&s!L~~d+yN*nYxP`QO;%JNQsiO96Mx!FqVY) zoOTz_`u`c03fTP{_6rI4WBx2cNuk*k>iKPNV8c|i>KBh84R_DmfHdoQ$hUnUCTg2i zsJ%TQvw{363m{Ca!G|3epWwsmo~nTqFqL_c`V`@k;gTB#e^a&W>5`A%gLDij%(AgW z7O>tbT1643EDWK6R%lC>BR0U!nVl6+>TxpfB_dM=Nl5O+qrNe+1M!q_P*0^-QnQ$q z9YQTWv?@VooTO#w5~;%+C5oBSUDk9A2q+0%dRB-)2wC)VVM-w%4k&BuJ;CtGG~Aku zfcs(fI4RLNwBK&LUOL>e4k1ncv9X18a;}Eq00b@uh&$_UTrJ~~B$DMz*L3x5^Hpte z%#6tEGws&O(B{G>5Q{zyeIDY*yEe>Q4ur)lX-}tpUPO|TsFP7nA=BuK6J+p>DK^4B z`rb6Lg|6wxb=0yO(6Mu14Zve4USX}d#7bXMJxM8^PtTf8>K!Y?jkpb^$N?WdY?0ao z>Tq4KK7eJ|3JptfUdtev{FBs6tfR-0_pwA3r2Nq)5bAkWP zkka*;Og^wHtTgwgY7j*!GDlp}1ZD-b?yq^^43b4zAA^Z!pcigvLvbmZ&<-disJS48dMOfHP2l8AKx$lCu=kdXYU* zuI$QVPA|2v3wXyZts=h%IcPBCq3B`fs{YqqV(B{@@p#8{-YDl!_HY1R+6(&e5cR`u zFjcQ z7rqxRdX_LLWgG?!-U;xBMD51ytV#jP>#?spv>d%jh&C-KT#LPduNNBdez@8kI|dNv z#Cr1~lY#s~c2;a!Tmhz5a6WbPL<(D>UU?4!SgBZv*T^@IwRN_no9MS=>Kelj3=I3U zE+7A=Ip&q^`xKU8qxFE8t5I>30{^z&+uUfVj1k3KrOqHsRUq2fn%2Y=Zg;}Un^`Sl z!6M7dP`jyUQ?}itv_VN5QSnbKh^6~(v>E^5;6;PPV?zTq#NR0%JuXy5?RuXyk;|9y zAcV?~09q?M*!HR;=w26mwlc3ZA@tl-9#+;T2ScF?;<0tn^4oW(S6?dV~DDb7JOug&(%c$otFi`bk*~wP~$*qLMsQt`RwA2R>7tG zPBayzTffMtO7Tq*RpqXiYwX4SO-eV^7*wb%kHSoKcpt>mC!Wi3Ib2`^c~B6EY{^2Q zo;`%{gf@~EG)Z*xlPC)MFRCnaZ~+!!aKh-aqq=`X%!nt$tfTFwj)BcN2QDj~IYQ~; zD&=4To6~1$B{OA^%!MV?RC&rF1=gDlvsdkbcL<_Sz6(m@`0v4BWbgKb3lGjx*7!GSh*FL&tuvYD zZ+KV48X-|E&P@KZm;}NkvJjiC<+Y8{PkPvp!!OD@1<{OYZBrZR2Q3j#)(N_v@`Aa} zZ#jG!EPE9^Bx~e3p~$4O<(wJI-iRY`)Tl(c5t0E5HnR(a zlBV(`d-`dn+&eXV0K>`N{MI1a7f(8&FTP)5D09Kv8n&^bAy!eTzh#L4M*kqjISFY= z9O)N_ebOx$mpN?eHBio4?+anVs+uKKIo*IfKf4(3Ir_t2Te%Qv?wa635cT5xWmadW zpKR66VcT-ptYzX5Y0jUnE`fq+m@R2^q35%3AV$_o9!(_49$hEAYj1fkl3=uB9afu2eijx~kHM#a3#7+jW=ieY5Sr zigO^-Q6J1^?za6Ub`4+<7aeA-cJ0x<^T8gI@k8zzVjaO{mz{!OK77?&=;lk9qmgXV zy;BT}36qWR>f{!{Tb{g>D?QW^IcSm7RS|G=*II0d6$h{&CU!UAS-OC#?8yOtQI1n+ z8bO0FuPA}&@o)o|OTpfe+rwO92QjPxY-aiX!+HhPch#t}_g%h{nPT#=Bsnzz<;Z#U zdhJ0IlRf&lNu9N)EGHvEq{O&`M;XgKnGxb-#x0%9g4n z<}Z-;edMa;X`|vNp2>0Lm+{#Uz;??(uE1w8iNXlO@>qH6)1B|8 zv3UqE{B0tqHU{5*Vzba}?S8|1Y|i^mA&_Z}1uFS<<7Opyc}#6sI?@_;@uiG6tf*xa z{Duu>QKBn^SJX~=Gf5*t=Hq2+SJtXAw?h@LX~X`@nEuYB`@Tn?klKf}6D=`8`{`n3 z{?765S?ZCd_DuW*dPgwKJ^c?0VI*UrR#`P$J8$u!BvLulHl z!BBAP@Ux}rGaQX5*l&Ob)@Xd_5B0lC)%o|bCuWVTIxm+cJHhA>bazzvU`i{8Z0}Ia z8&VTSq%=2{-{sw5^K~MhA@&#KONkvtw#ZNis=csyxk|8gy@`cI z)Svx3wjh!2Fg^kCK6Iobldn-Lo=wq6uK$+mG98L(z75=Qq|AT;(qc)GV~JM7cLwGf zM8tbTu_yA3dMuX7JIGMR#Ls;G-N(WsNS%@!oyaBmGdy?(OZQ+zT1SwjNsTP5pt}dS z2ed%@I*54s>V;mmM(`>DZifGQor<_uWQ=)R^s^iWq`yQeKIAkl}SOY`JZW{@w1hsvg`mxal zGe>m9GHrxdG@hR~aePrg%JvQuUu9)4KTz}Wh(vBucB$lk7rkeM(PI;m6Um(&LEvey zGfdLhQGeeo3fi?^Pnmleu{;kP>FPr$#io@!rG5#f$^T||XSgHRlR)Zw`FOKUb03bh ztap3k09yiZMy({T=g2*jg$mFXtQCs61h7LVx;WfA?iEBc_w>iHTF_!1kKaS;wxf2P z1&LuYMh`lowF|v3jFACq+i}TTls|N|O4$K;E8=QrUiMA7Oo^4RtH1oJK_Y7>2i%)` zi=^FKVuShW-?aRr^7?mKTT3hj??TYN@R4-}aewHa$4>Gh%5$8^8=p$%p87X^Cni=E z8iWuhG_XU$6Q%(y35LciR$LPu_VELY6&K3Ff*rU%Eo_#_KJjgjO1~<=JG63-*Gsc^ zu!0OWk0JK2(z#WQY;vUv`@iX#>Dvn2D(AWHoK%;P5i$Fn5?6H=`A2B-g!zlzw+yr2 zhvT@sobPc_r!xJ)KQ@~<$3K6UpuM{EE3a-5jyw_fy=bfcCiUL8WbotB0{XMyg$TnM zoh=kVdv01B3mlR#16G@ZqZXky`T_GuZSL962N4c9;Y)>B*y=@joz&FJF2NB&@4_iM z?6KqQ^%gdb1k_ez4l+$yk7^B{(#%ozZ83=n$S1n{*09Y0UBqG#HxplHyasqI9xv=TrV13cmm-)Q>|%F>OL3nx7?JBRM1QWMcLMJWz;1tKXl06MtTw zx*E)1Y`0!k_`kJTNF`(H`qQ?mhrowb8=T{8>N&QOToXH$g69SY?`Tp&E|CaxX><+= z$C92|bzZ}pQV+R{>>QwN8%_TGdKan zdAz^#;(+3ogbIkzy%z-bQGr$}J)b-#5$G%}vlYHJAss3B!oY2W+s~hP%MSWnnp;!X z?Y^Kz@tW3_2cM4Y+_suoxW%V2pWx#8??r9XOO@{2@t*WNoBwPG^GxGw4>qGYk<{CW z9lgH|%(#{wQYC)NzxUn|$JFqysGG|Z7?>-}2gZi} zcD%=bm6|G0HkRRb2 zS}UdE9{$pkmuqe8;=d(=-lYn?^w##AU!QkW%UKkW^Rcdm+s#Q>wm3k#c#KTiMwvSQUzP#w;Y!sA|Yu zi+?CCs_YDz&~s>cfIwYmfnVjVgw60FqwYl}0)64M5BeT@VZeL?AcTeX5s^%Z%L`qR%&+Ml)8swO2-~j$ctbj)WnEp*CM4By*f7sf|Yl)cqY$1n@{A#pYR}ZYeV05&$g&K`&B0w%sF91SDm=Jk09V* z0&WTlnbYMF;$yqb3xAiW5~}PoWG2M-A&XgAiqK`NG8^f$CM8hx?jl$Nse%e}b^*^F z0-jhsk6HLoEIrn-|9Ax72hDL6y=Z`o&2X02PpZQ(f8H9DOa1625de8I-0K}Z@Si_A zz1+5CoaQ}wq&6og(>op1!=P#J-fN-<$+$DMpWiOqmmPrO@Op>gX@W}Jz71JDQCJ*o zSCdZeYcFGjbThMgw>E9l=Ayit<1=Wqh6Vih6FG@D8Arcn_Z3q(+*KH}lVZhk{$Y@W zPHjQa6LJJmc&oF%mdQZyVQzm!3>}MO4KZ!dE>h9DKS7G(hCcv;%XV65qrA-v_XiDO zRm7y6Az=1z><*#Mhnw?#7_u$mmR}{gL`)FPPc9NfkhWk&=HFMBVvR)bl>*T?c%R8hp#U8n~ zQA*dcN2$Lp*SdttkkMt}T;^DcH8i*Z3bKU~lT@M(!?MNK9l=S=z3D^q84 z>1F%++H_$IT|? z&77&nfh#E@+<#M!n32<_Y0ubpErmuTL;uD9=4S<|eowKNw_L8aw^uSzJ&+KeJW54{ zBsaWit;y2ZM9V2_B$L`WtjoxE9il+BLXMFEHRQjWPGQ4VdT{#xw^QTP@#EwSps+^o z6pAed{c}rKtJMf({XZwu$PCnk3x&>cJ*;w+r3u zXVXLtmDa$W7nwPg7!4$z=?*qwW<;}c8gT>1%m;S8Lh|zwPqOS20GuW<+EjA^C zv}`KxLtGh-Lf#D%#!z4mS^`4IU213ur*f$+sI&;>p_wVQy{M%SxsdSL+GJ=6Nz#$Z z!P{p)zLRQ>Om_73x^J$mpb-?(;KpMW*h&i8e|Y*RFo2AZ97!bA2VZ$i4!TzoRF}%m zXOZ-SpgDO<_AG5eztBH&RpV79;zaSp25oMsVGf9g-Kc0s)#M1}6*yEC6<)Tna_83x zpf512)}2FR!Zl98FMvO}JTpN`jyyxZn+8okd|Hq90j`4$2klOL zzW=CDgAd_$28mC{;rQB}W(f#=%mj{U;rJb~$OVuV1LAv!d0{+HjGlBd1^iQZ3Z1+y zH`!E_lTUpZ8xDZ9oz8;h=xAOR*qRclTX=uIHJ9QKw*sD94DHf`fVRYKIw8{&?xdxcE{L%tDM{nMtiC!3m)Wo(9ACu-e1Y7#ly+A}w zxPHDgZg?0}yjgOcA?1K$5Z9R1Q3I?Xq)j@@Wpf@_BA_n?6@d zHphQ%Ku}BlMnBMXd)Sx@ZNnT~p)E%r@uNFY-FLC8Ca=(WWYv*)XtgT%b0H&gsc2^_ z8D<}husgf&ScB1~+Yy|yI&G1#mnWW4km87u@EF|Gf6B0!U!~>iS=@)8%^mD~VD;Pk(_C46S2F7+B0E%D{WZzNMg|CJ zJ&yNr@IIfN1tg2c2XyHBhMO zg~-6aOAkT(6CvfaJ5i>12DhW!LmAtiDoW~-*e!0`79wN94)vV*rMAJNt-f>!L7ZHV^eY@H`wO_8xY%>(|^cYLOPq#soN41wz7uhJ`( zbkhNiR_`BqZZi=NA;zJjd2Q^+snyV0Lc=98uQ+i38(?X?iDos;fQp+^V{efGK5u<3SV#`&e9C0j=nv~D z3_G;vdt(>yW+lsZ2FP`q*^)@Iv8;BFMg9mM%(>@!*at~!DRb``@QWf}ajUc~*D`Q{ zIqJ>xz~igjE=V5>Tr!5cw05sMWt0dI;AN21mc@6DDP5~OmAyR~ro%RNndC;Yl+yLy zbtG#jxmYZ+D~5p0IXStYh$ETsI>-VrOySGwn;+n9f&|yCj%ciEicU&x_$LR7G} z9tpSI#-%ugzb78Y7yqk?-D6xC+T(E>g;Fv7pbu#Jr~SR0tA3q?%67P&aWW@7OLpSx z>f8wO<5x3ga2s1zGuT^<4g5El^|Zsx5Ad9)s2gOPkU8JqJtQb}v4#f%#FV9j0!3_6 z8buPflRw*Pjzc+}%?$tP<6*M>!}NOKJWe!#Ch?>%d<~FwGNPGWWw@gV!{8;`zqWWJ z-!9v6!on;_xEnHGWPaZ_v;}~g8-kOHSQ(7W4Dq5r3Y{h_7$P$b=CDTM8G)-H7yU`o z|Xdwf;mz;M?00l?L;TbF>8i%)6$cit~iq!Q1_^70X#W z=w;DA-xO845r`iKsn(xK0H5!_;2+I$ihiwmxl0NX#ac>VmC*n4@S>-c@pRG8@wykC zx&b59i6HWKdPw@x;dk7z{+_U$f|ki4IcZkuyJui*0cli>Rz$*KbcHwlGi!N)zHDkM zi+|`?_E6Pgv;iA`96oj%5?&h{>d%u)mKIYTI8rpZY2M9<030A!$FGK(Q6lNxsLnOL zl{f_B4VP7g;lT)YUXwK?so!UUi=!?wR|>||wfIhecX_|yKuI#WI;|M@!0jyv)Z5Q%|UJrhNCOMMsXjT#d2zA3$ScW znBCU@e2p&N%EkH4HhCOm*Y&%hE_aXaFtU{!u_dhNE~#br#Jo!JQp>dgXEPjg+)Oqj3S(xr$#<u(3Q@@;A+5#RDl>d+FE?8yvkPr@J*mX)Oe;oz}rtg89%yTuoS z$);L3UO>BLkC+FK!8tTxk#43Ip9C=14GtUnASi$7>L^Sw1K=@1VytUYGPeqXBSdj1 z`JSw@vJA1U`v2@y%%q0+ZbyNKNsTYtwTCQAT`5EgAkA0kM6kwKA$@&te07%f`5}d_ z6t}Wx1CK<9jn%wfMZBpK!P6p<+0MLqLS_e^M?z#geRlLMcqj4I5!yaNE6^1i6C)Vt0_U+gKtAZdFW^3pf8G$;3+qId}QKBPYiA(UiIt;t@ zM4EK2Y3ns-JKhsV#aQ6b%}hNkK3VepXExIPPC<_w?iC>V%BoV`|0R~a7qu}yjFGjC zEi%bolu~c0g{*VDYG$Be^INKdLaYeC5Lk6d{Oufx)!!V_5We_ld$o*_Ca3>ad>UOg zlio6A1jRKZ0?l+L5MKPiLb1D?`210Bk_N@ET5dxfBCfnY|Nm=txYJer{lZ8w`XVwT z$^FMtYx^1Gk`VuicS$8BncLPpr!4UtVWEXC$qRwpd{ok{B77yCk3~P~o3Yj>z8@@P zrhx<$wdM!y_~6opLLJ&_)t`zEA_0=+NgIrCuQtg7|N2WS?ho@|VQP+r2CX+{&~(#3 zXLn4_``(CgElbroW@~EoP}0e$+~H5MUJv|OO!9MU?wzlm1qWp_i&zb*DaS6a#bR6D zZnMJEuFrB@+BHN2)ftS2Md5zolV4znvDKw_?!;iKa>QUe(!ce*NiZGjJn>Gi$(1_O9=9Q@H#aKyS&YoUB&QBpw-h3GuDh!i|c*L|+4#gbZ~axp4~g zX~f1|410gY!5O@7oadlPxV?^~iC7P7pH6(BgwQ`-6y7JR5dnk4%#GkP{wYZgqjS4J zB(0_N%9jsGzru#z7|x+*#tDxojYmWnhPX>MK(Ou3Li#{>HydMG(*0=?eT#gg9v^m; zW?~#j7cLC^r(dc)qHf`ZNDxVqGho=v*8&<;+lK`*J=Hc8V#8KtZEgwmeqBZ4z@sC)`7m;TRPK5@{erF{rq7|92G_-zdIdUz z$rU4nOJC@V5-+D_niqr6&2!AnU46$dFzyys04YG$zkrIkB7+dC=Z{ng`^|6?Q4Oos zimTZqX?n%>VF=5vkaEBGprnNN4atX}gaaL~&lQ}LjKPoH6 zzo{QSZIFE`(xbQq{uovf7Xh3ryC#_oDx!9N;Kuwp$C^W47FUrDRM=yXYGOJy2BRnG zVU$(bgnz!^;wGCr0r8hKmpkn0Pc6JY2~PRI6@vw@Gbi%(YCtm|#s=~#4176PMDe{{ z(%`zh$`{a%E(TM9!Z-;5<7mys=r@z8y57eQJAyG$2;T+YSSx}X9)q^Sr7wgOT+TGQ zK7N<}m~)6;4Z;>9{e40Wy_$oKv z(7FhBbEPb)5npsDmU@crm>v!;~`>J+Rs-F>&(M zf%PYV^g;|S#~0@|g}lu`st=tuEqY~I^yYMb>cqc0u-^ zi@7iY@zgUb5e)OjGGhDx*qsttbp^j!v_~5#YIbKk`Z~SAcRH6Tc!0AB2L)v^qcXB4 zjK4u0?sAgWIQlB%|2{=o1c&Oge62%)&Sti1e)_>KlVoBjA~4d@Z0-0qXZ}W-MZ1N{ zo&XKMQ0yUkhf-LA3zT|O52q9aFrucZAwaquKL9+GcJ5AsP+ht_`0V`KpuqFAlSqM6 z`PWVINMb>BVciM)aSA@%P^U(6Xsl_%Pri&QTcXHnX#@DCTy9>Nw zj{>PWx}mnvZtaDT^q7KfuGS^Siygq}q8$q>gVE0L@khirqbuE#l#|B{fclQ0z8w{l zOCEFz-uUwjf)jlY9NdB#|H|gwgkTwx@8fRyMRM8K8pojCDZY)IF`K!9dvQ4G(1!92 zS0^@8V8706qZ|Cq34n8a{3gTxv;HcYvx-0@Vxb%Vw_f~wB$950%#*~6!RG?;0Vl_i zAatt}Mk~J{#GL3Qs=|IVkajVp0LNbfeM6tV(%j>3ZiV|6GZYBLn)M1&CnG|Rns{FM z{h-CZRx01;w_TnU-+eCv_mBR;%CYM1lV}k|H;foSfact1*@~*@ewmWII_G%~`q9s1 zAp9&dXEYgQu--A8GwRDbD%B{PamM9poh!(6?&gm2x?a#H2`G?poh;AJf{6mN-99x9 z3n?z!{dc)b{+|5{WRSUAy9gonf_LI3(pKI70)+|iOSQ3~EQ)njcai>uQlnxk!$8rT zjA~T8?Fg`3uM?n09`fis2O#ICysjLn7q}`5;bVW|2xY69xcS|q+oyCedvYlZGYQTh z95a5;U$hsQYeMT>ltVXp<{3R>Tooex7<5!f$2{8_t((LoWO z8&2DpnN8G3!sUrGetphab*5R+-rWlG=8{U4^~{~wPgo?yC>JFGvHUsaU`UeZ zeI)_r!q>(x@dRY==`vkADhMb~Op5Dh$1c-ahPH6~6B{!EtS6gUmBB=N11t!=V8joG z8Uf9K$wgPT3&TZT(X%3bC_@p`QBvXS3SPbcmV zcDt&c`Q<3WNs0jUSGyDU96;m?2_oHzK*rlo+4-3-A*1!V08^JmT zs(6Z3St6u32`}0;glWb@Q``_l0~mYumIMehLY7=TSBQHl048o zvu?}GogVc=xY^x-g`Paufy-Z$RI8U>3VG=VZL4cK&kD20O%d)37xS@t6y)BopFNJR z3YCkBQ_I`4`f)h%ZnN}VKuKDS2+Qg8@f|<2X453io4`fnTp+lYJ7NEmx=Ce{;uhww zP0m5X+4HvV7H+37`#hCfV9K~8-=F*c!u~4NiUPN(FbgLcP{|tGi9EU;@_P_C)=7F7H>B&#h0F{M_+ZVJSyL-=(?VhwxF;E9^FQx1gpmjwmaU(pQE3o@8uUAzy<#FeCd=@p@8gNzIy8sUdfrkt4{tg6|S(lR+1$H$5iYeY)CGv7Ki~T z1gQOo4|GbNVEjg(+>w7~xc)dPzvk57mL3=wk1O^X1$@&}g_cD53+tGv>7km{u%Aza;1js7=2+D~m;{*C zWy-*CmM#CKZr&m*b30<#U#SaZ*Mb){rel#|pF>dYtnMfL3jzReWU0Zn6d!T+Vzgh{%VpTFd|C#SsYB8 zZ%K;6x2w=9kw0@9?VM$$0k06LLaU6{d*H@GILHdub~yT1E9L}?f2fB za>tpypok46C|(k0E7#6&hUg|sc(l_S!yn||rV+mi zhO9a(ssM0AcB}mgg&CdyM#0pw{iW8uHR+sOez24!=x#KxAXA<<4@#|NyyG#8U?xa> zCK785aq&!*artJ+Q5B*J4U@;tv8W@xhKX4fABHYP`JDMLuA=G;G(45v*fWzZE_G5h zCT;MBh56;w6-Kqn_o$S=*6^BYw+foYGxu5vy0Z#&QlOkTB#Pcd#LJ*rvSahKkM=1&bZc=ff=VX`|T&msx?g5AW7aJ z=_cN^BDSCgjPu>+uZz`9(_7`{!R;S~Rp*ulmKIhy(O+;PU$O)Plwhc$uwnQ^Z-L2t z4uTRA&z4HI3KC)%5yAp5h+gvCfo=ZLhgKv1zJ)0lyCDS<%Orhjx7 zDimU(RRv7yVE)C3AGAwRQ*1(merHA2?IjCFmh8*c)m{Ub|15~`sqV-NRo7}c1aTrnGmCug*OUDeW>l*_>ZGS9)i$%e_C)^5VlPn?U%;6 z<|;|uqt%PEZaVIgOScQmXPscOx`OU-Zi)WHf8)326K=)w@5*n|G@g|hn?-A#h-Rx7 zB~RV&z2LNG@d4y!^JRpUX~4car>khAS|JQ1dkKdW5(bc#7&9`AH_=o6;m&hS%V9$d z6Aq|QUn?Q?eow@%z$dRVgmzvh|lE14_E;MBb+{etVNvUg2SEMHltl zXo#b*s7jSCyj8cTV5cut^wWm@HHWhN6y>JKSEQZz0b8r zb@qB^it&MdsfT%iD1*Pk$b|`5MX%}y-^)ci$ps&c#;i*2f_X)N+gvD!xeNN2w;HCf(zgO zj`%HvWgP5q+X1N=(^#`1h$*!~-tJcJa)v@~Ba)S~TR?Gd{T4GA(f5Ily<6M*`C{1u zS`1zta3m988^2BN{SIQ+H3xLjz7hb8^uxmA1e!!uG^d^7p2Rk&k@VgyR+kWPM_(#v zkHXN1|JWsQVcmwiS0vhxl!kJjD37~}G`&mNnYHQ=>tNA@MvkHz)f)83FdXIJt4dEL z6Ge+yW~GWcNmkwwin?G;Xlm7U*l=loe!uqnQLL$;))G7jqmYNXRAlStYCW>9>w1uy zxjI~Es0;LK0#HTg@t(~B$S0t4do@PyPkfS!nj{h#2n_bN;gP^j-n(uR#DtCGO5F6{ z;f47wPuo{N-rb=_)Hg$xH1>C%g`gMmd-W3?jwc22k0-9~bOY}Mqgwi%(MMiy{41EP zf8%`s+w~PUVbNM3D4tS@cqwNdC3ueM8iY}Bax$zOCw)^G`1KIg5k2ay z6M4>qQVWr4%;v*Z2bY$ossaAIV6h!JRw+BD1fWHm7)Py*-PyR+NYD+ezrrp(ef2u4 zG_TWpAT9i&Z|x0LW|9E(pA)&&ABR4hamV`?ZI+~SrB1Taa|)-?3^!?KvdYEcG$Eg6 zzXl5h=SGm;9=1s7`&lMtmr(#ypv5Es@$J;hSjYx!-Q-3l-oQAmj0k}*GvbQYYmj~$ zN24c>4YEJ1Rt-yQ6Wd@$wd9TcrV$=G67QLJqw4?LM0~+&&Ud*$MenR&uc&iTNrEaI zIZY_Lp6CdJ6=O)0LaE&X*VoBp@(_}O7K>5ZE4u4gis2GCB%xl=Lv88R-V#GVbEKQ zf?uvx++IU#tPyk(z-;v=r7Scg{aysslns2ga5V}{ESeq0`nbq^0*d~|<6__?eFOEs z<-Y}p;P*22Z)_eX6Qy=9BfzHIRVMTva4o}EiFi>8q05VM?sHKrwh;uTUMq>X&`y?4 z{B*kklY@4lo+gIG{I11iVgivqyDs<)<}p>@)R*_ISK{yPjiFgvBe8BUKUmMLU@b`r zJyR!K5SIDgwM&tZKFUP|4 ztdQbg>p()7Zmx)cB#i@X*3WQF`AQ~DfPTLebMFGUy#nnsL*h-fkJ&X=DBxiPbc2&# zHpsFQK~nbKKZ7iG>cLjIM=oycPNWZFWxf>Hqforqv@1r{ns8ScsTKx}f@z`Q{Nu4d>1aL+}&wi~1*it23|@xmlb&>9s7RA_r!+I`Z=V)pOMh&4i%E@|xt zi%-Rrg$)f&$UNtG6=*0^|5Xr9ds><7wbj5#qg0wG6jhx|zjxRBSf*8>n;l7n8mQN9 z7yt=OVK6J1)Jwtuy&=(<+M&P1e#lKzf4nr@H+1%2O4p%&9k`akXb94#fRiZCIBvbm z;|a}H{kEkALVn_M?Duz1r1fa(6}(bBwEg*|dI{$6ly7JMhATrYE@SD(6|DZ$H5~q6^cns2Nv=GR|#+iYSA5hT!|C#F6L(-_vUK z>lXct&Gw5sQZBJj3L6ZOk6Y^rfQWS#N`kL7^}Q-8`5DlsXW^*=bB7AoJD$FKsdX0TsB>&nog+HXvq0>w+KufdxI)JHOSR&QKCg9SD% zjWA|3wKIfG(~)>MgPK9vtq-$v+35V^ubB|ayvC{t2o-}D2oVntR2uTP0mvhjkQtJ~ zWkJWGqmN`Srds96U{8%%hj01$s0d^A4&JVab z8!iESXrw#CHLcK){la0ETxVMEqn<(+;Eu?THli<25?FgG4P1vS9?U3 z-!Hpq`x1)dbJOd14?^X9D+MMZxZ%BWbeYc7=Gyeq3BGROQ!XpHQ!exm7{;MAECS4% z#ll7`LiyGMIHIT&Tu=9}7$}RN5P-j~RX|@(b-1zi^C(!oseRG_>j$^lq* zqgwJurVgFpSIi^bFAkShxpC=&R=kJ;xV&!YnjYEa<~bRkj6cX^1!x0SIifNdRpKa| z1S@ru=)+i{rsd893u8i-1Z!n2;T^o=V@_2^OZQI%MWVJD#|Ns7iKBJmBK5^+nIo#Pa%4XSzRK!frwMxGyhATJo6367 z8VMC7)DO)jjT>1EOPUt(lKtI6Es`U@Osui4W3Qr-26yP`9oiv)+4q{~>(2`1Ku#*( z&t=vDuh)vH@E^W07{5Ta@1U*efG@r1Z;`yOY@q|el#JjAgIR|U7f=6ym#fm^UGf34 zMZ9KYX1qhQ^$;MhSpGus@(MsM58q2)sNTPWG^y&p1C!9P@B8A5Iw5^i9M>b}^fp1%3yld`0-sm_*rI8Jht2lMXSiN}CSiHUEF|Mp*x!+3OJe(E+Q_>%Z zv5W1Ash|(0jP9V8|5%inp*<*UtOFku!PEZwZH+*8c8C>bIa3y(GoWvB3+xq~Jla;9 zY?J*A3H1uZqpnL&D><66fq5neAd*Wc^vh4L@U;5(px3?oC%xmnXdZ+GVx_=7Jb>XH^^08l} zXP?|W<(!eclixxahi~<9l4h-0cyIr5BX}CiGnOk%UxTVRSOJmZ;|vk#?LyKes&GQPCM-*I!&x6ELLJ4zrF>{{U(0)W z1;$Vx%dk$<*4Ym2DeJ<6Mn_xzi5QtXPdSSIG?;qd;+v#@w!W4@4IZQxROug_7=?ijD^lpk(@ z%I(l(C^V7AmxJTtZIcoy>lVX8THv~1Y8jGu$I+Q}YewTuqCrVrx2km0N$?*~Ertb< zn9p>1>kiZwpB2H_%?pMz5W~)tAjq1=whVVWK#2QxnGIQ4NNfV?9sSW_g+{xqwuPNm zL}A3%d>x7Kmo^F+!+oLENR=`5#>lHl*JhcKeISY)-8V=OWf?SRFUSy7el7x(zNkEm zmBQLZVV5ynU{pP50ReTuKQt0sS;Z%D9e*c*lzjNO5ZfAB=BToLXGJs4-Kxwl>`+50 z0k;uoD%^`%tnm+amMB5L(JEz41qBeIlGITV3f~VAGjTb8tq%}j8H|#ZjAAqJdnL$` zYzCh&&Z4r&$V(t6%2|7|{VwB32&L*H(jKqB=PpY=x$QlwMCOVx#dFmaz-nfCF$b5I z8Y9k#$XH2S4d%f?@pEI4VdZ^0wUw2b>)yJJg*IHCrLsr6j6&%2+_M-1W_nAy63rYI zy(%ck_^aBP^9>WS?mAosWXSGyUva@?t#$-mJSaqwDsclrhbjEx zkddgCfWqsuBb~0&)7H;`rQ6oMkZd2Y#q+n@Qrw~f;nd!a=J0LnnRi=w7kRgab5YF0 zCXS>RWQf^bG%@ei2jsMn>AI_iC4Or~51MYtS*50&BL+h2;+#b%;|jR~pc6ApI{Wsc z_6A51D&0}Sg)gmKt^sXNJ~Pd;1T9OZ#f1KOIR=qfejq0< z8Glk+q0vJOrl#|JzJidhEp&30yppFe?t_zab3=OX2Om;n2_ce&9;1DiHv>tuxT;xdDAX zDjc1S8oSq~AwaKVF@gTSoiLaA)hZKQ%$m|_I>|GM(8QORekwEaV2RLU+ zklNlp+0E_i3tD;@RY9FH>mo~1B#2X-D zh>c+2EGSNEt*m+$3w?WNi>c2pi)Yi+Za6#)sV(N;BrC+_KM*d4p`R*q)yh4m9Ic1D zcDFe2H6OS_@~d`9XU&lPuzubvPm=Kcr!E)#ZXYiqlAE>$IB>4_Y|2?ATJ9H8sGRnR zXRL+X<6bKxUl!%*NX0%5W-;rRF-J~I5+lm|suRng5Kkf#f}}gvdryA~Da_aUuVJ)? z0-l^eYp(~S|DS-XSaZON#_cW=!+uTjPEek|7ZF%0K9rY|T>&nT0%ypZQBkPKIohSW zb{>_K+MH(j=@`_wW{ve~OQa^$7jzIZ`X^xCovCJy$7H!vN`t@_1u!FE|2Umx{FlhZ zSX^GU3g5+xgR+@Wm^i{O#r&Qf20z-tYA7cwaR~l{l1YJO`}d-%xRk6^Nl)jpf26Iz zg|H@>xQ?ld?pv?XBYo5Py38OlsN-x{)ZeUvAQi@zU$t93s`J1Mw!6FND^_ zl2I_uK+W$Gb|u#Yiy*F?Z#LT8xom}4@FY##4gh&Vg}>(VWa{4u+?5jOJ#6xuH-|(U z)TuS`ZEY;JP-p%v$F$@4)Zd@skoK?^#5KJWOpOV-7@o_x6^aoNtU)LS@ED_*_4HQr zi7#N_zYKa8Fn(j>dN*YgVMlifG%AAy&|dqp4NoovkvsifU&{D!?Z*92jLfMmwF_Nj zLtJgj^%ROYOg zM6+=hQn?CXzPRY$u%19Jv=1>tIoD@uI4I09M2(G9B_zdNm_qT-r!v08lcDusP2t9I z(8$&6g9|JDv8RAKy67|PTb9#0o3lT3d0~x)v-)DR{rqXs&#$K7oY$GO)A&CvlpjH)o*=X#_Xx+Lz8CJ6{1_=mz>Hdj*tAJy;StMH>3>(T`t#oBUkHJJ(uZT`=aZ$>B=}2;i8OW0d#pX z_V#wWGPg@V|F{&7GcB5{*J>h7QdsHweGLf!oWj^qhdK473oRzNI^DediaP|I=_w~U zS2~out~(}C?=>lgAd}AOpL>C9umk*_V|u={X0ue_A0B$6gx;woKiOQ@c&+iC^R>ZZ zP)U!q*ETd(|Ec+OZ|703=qdjg_w0Y^6%*4mQVJX|DY4?Hw!t8GGN?NBr^qY`x+0@& zl}&7PC`#4?kCM~SW`Y;~QGhIiJliyz(X`{DZCuRUV9ZPq3NF@NB>f=^V&NUDrz6pm zI18?mvK;4Lv4dB)_lriULKMcMT13|s+dLA6))qmlr;%u3j9H}Sq{wp3Z`bw ztZSrCaOWUu``m#YG=07~=y`(_GKpy0&8=<%_n{GD+Fs1j^j}x9^X59Ir}oItK!dc^ zVP2YtgS-xJje{DSz=;`vCh478|hB367YEqD+e8J)C)V$i!T*j+lpNaQNxNSsL)I3Kl(U&UX$VK&`Lc z-qXDz+Tn5yG4$Hrc8}=7OMHOuNu||o6p<3BYw1~yeR>C^p-HnXfajvNhmKiJ8<&}9 z)g4Rz1|RR4^u=eg{I1h@InahzBUiP8wFk=;7s|4;G94sOwArw%kBTQW2xyc z?EpFT>W~?@!%B_G-u}o8o+3B69Jwd7(vbuU{%od$>8yq$4-*n8vmQ+hljJIF zX1PkblbKm-_<_~=nWx^#CaV7W!lNfJ5{e~6eBaF*4Gw&BKem+tvvS@GgWjG zAGJHbQhZL83G1&ul@TO!-R<8Yr+Gyk6d{KZre{hV%;bm*vrN!)GKa~`sICHUh3Y4wLyq$sJYXCHy*!Be6a0-O9 zrnFZjM!+GxVBTs>R7+HPkWTUdY7nA5G0P27r%RdS5p|oB{%~Co{T7&daQ+iq@n=;OU`nMh;i~HxNN4xbSgq5lD09c>*ZpTw+?dR-!-&ioNlVSR zEwE}Xs;WN5&;;yn)H1058O4&zp&w&9AQi1a1ArEPCKyqOJ z0?!BLHr$Naim5DpqzPvA^&TBZzo4yT@*`&WytZ7Ps)q&)w`?3h7xE;5$u$(F)L&zX zfu@exsjs+?()dxrKq`EuxxPf&qK940h$B>+;FjxsL&1G0WZP#16*;)8&AZ-V;Xay! z@j{oLrz;>WWx~^qyOw?V>Gx+od&z3cv5(iKT15>V%8ovv|CPU`E8UfnHeT?rIr!0w z*7AebCi#X9ufeZ6{Igj)RD7v@d(wf=KSu6d(pI35$t=#CQMh$yK4aJut{?ZB{9Itc zM{i0>cjyJuFGWJSMom)v)1>Zipu()-Z9ztI9zrWlGw~KU^&|ip8Jm$7(8_XC92H?nn8R(Q6`=zyX9mx@~Q*N>J|{@ae`$t7%_Q(hAw9g>W$$xvu9ZDH1Gko@6pde6Ta;;Cp=sNCYpd=v54PLlcs^`=8pXWg*Re1 zlAFE~3>NZ{M{84@`-12UeDVie@_zqj!t*6?0mG8Czk zpL~5qaWMb`IASJy38;df&*o}>+d4;&L%HmoF~e3kD2B5-rW-bDurC+m6Knulecbq2 zDN?8Vb;c*WEuJjGhq8Ji!Ln$gadjW|2I8D|1aY}*8y(B73KBS|tktrruDsxSDHEUj zTjx%}rN?4=@q@(xs`gno7c7?RIghBxhSZ_!9$st#-+IHg3P}fwqT5HIqGgd$?$#h| zBozmN)3MQLP`O}%bc_M#v10##^ZK#%10F2P^WCw3@7kx4{HQs#>S49{^9Q%xgQWL; z{t@C(#XxUA2J#2Zr<{j&DK$3Uu-ZXa<%K`^wLPrZ^Ip=aP6D5SVs8fGZ)BzP&ceB} zO5-j1UzS}J9sn(;!<(V74jaQ0gQ1H{8ei*v?Y(?5#yqs9 zFCh`BI?v;GwVMYtI_lMHjKDA8U^%+w*Z3P0ki*h#@t7MBfZ29(wPp`5xc!3&cJuGU zOLgAYi9oBuT|)-81FY^_;NMej&CMk6R@!S;&qC7w>gFs8#pF&hZzTJ*1mzAwE@wDj>sTYh!SN_K;`%*%z={??eKc z(-K{^O2OFD3u%#KL9;zj$%+hS_pl{SE!V{);z|n?CjCRaDVz%kvA&1b~p}l}YbgS;3l05U5#{{xZAi%*u%^t%ZW#_u*yg z-Albuvo(zEVy77n3^xBzK}SwsGy%xthHNG}AaNh^I};yUh13w?dKV=o2WqcsUGXSA zf#DJl9wVjKdL7{aV0)oN$M4?Q#{gQu6i5r19@Tc~lkVF6Xk!gwM$tiHX^7fAiNogv zvPNk-YGwM&ixCvf#k3`qwXs+>|3W|;aFfr3N6KsE<6w>Ej}>3uCmBE0_|DI{N)2-g zq!9zL-HHnCPSHH4Z=G>TQb>nX{qQ~#s1{?^NjOyb=d>-ub5wYq4GGdNE(Zmlohg%w z`3jg82MPpKQVp4z-hI*;!s-aU7o1!)kd9_ z)k}Xv2qc96{ZA$SJmhf@@*#spm6movaz3ss5V?qgUH@H{@jX5iEl1dRpmw9l05OLG zCNbK;Z=!=xfsdd*Ii z*{y^)$Ly#Bq(P9go8o=3f9N2vtHoqXX~*uw8HB+YJ>`=}9Pe{RoaT~X1+}iY$7{j( z@I%U>I`*=8*6h_zBFP1!Rj=+=4T}PfOS%=|zy9D zR?j&ut?*Y+G$bK|A6xd16b;Xm&(w)71hZHSQiSZAF%7C=QzmvMDy@gSj{>7_$khgm zT&vQ9{6?%!{-TAav3YlIguE4#xdo-3?-tlG&xPFA6>9#GBQt9Ov;->?FUPbT7~_9b zDWO#XWv19>+iz*Xt>M>ZYtVAd3X|pQm^E}8%uq%0W$dN7w38Df&iQ=?+teaTBLJKK z%9Wtqn8C>aVW4%q8IaflZ3LEo`xT;QD|Ek6{$4Ur2$TRuUY=J^oFy;X zb}G4tTr=%vxzcm9Yz7Rn)#WmW|tsu<;xVLC^b;#!T0C|^H zb@0-x4^O%1ICbOw1F!R;{`?(?b=aX1Uhnea!7i|-v&E(b#=9#$87&K%Gw%LhGDe6D zo+PKXC(38T@f;5YLEYH% zZ|{s0*r=1}5fFRNWuXR%n1zH5#dvYHf!?zyRnL79LC6JLUySLS;gcxa`8FT}8ekCKme&X*q2M6Io^wNTm&sIO5 z&j^QM3E^p!DNG;%&#G8HkCRc>>m`125nvJYUu<|nTq!ez+vPeN_4!29`u^h-8P+p>%Fx8-3S2M4 zsc4m!a~>VaseVSM8ZkTsn8sQg;#}u4=sglLQtEn3G24c&WsH0<2<>P_s$3T520850 zw2MV>v4**u!Nxu=P3;5&u0}}n#UhuVY@n5PkqR8EOc!&1Y>O^!oeq?hVwZfMRKd6y z(}g&3mjp6JBK|<6s7r&5Ms9h!zp~{Y*cS0|ZQEoc6;p1uwOM?OyON62co$NnyB-p85phLF2648@ z=dpf!tp{}vb3nY$+R=Nh$Hv%<7dUdJvH{@>zw#8EuV>R%HFY3nr7?I*5DMnmdAnK4 zSUaa_rIJ&`OUd?_R_IcCQB~KiuBAO>g@hYeD%A|_8gdh_fQ0|FxgTA+@e?sjBr%Qo z^}eiKDk{8nL+B$jEZwn`RZ6R)7k+uP&ijj!p&4q3VNzFGHG%aj`gCTL0H~HP zRy!h~ZEc}UP9>_-D4&5x{)*4v_;oPqo+X%Om8$TBqS!xuhESsXvmR-kCSQAXAl{|8 zlORCC@}_OT>sd4T(=(iNvOXzz5#@%~ym05E(liy6&Gbocrw$y)<7+@S4deHhJC~C! z7v9i+y*c6+?4oN)Z&3v)qct?2T?9DwG*jj+bL<2BK4qxrzvCI;tcQEquo33_KBKxGF2qxF;u#x0*7%j_sTFsz@O_ zDYHOp+aH$1xP7NCQ=N zwG!Q)ZU>3{7WtCb)KCkZ;%yNFn;g(zq@-mR$Td;}g?zTOw6dw<9|Q&h=Xi(rK{5K77a zL8>TRo^nu%Efwp>O#Gk~>0J+Pj|Hpm>5-eB(WytP+e{U90!7#Uj1AuYEUs5W74M|= z8Q(AlQV%wQ<9wfWC0AI#h{*-pwrtc`Y#r7YDSFEw{gLGO6hH&Q5qffpwzkWBuW$H< z10b5<{>;XUTs7)`yGs9deR{qX+vn@Orvd|?*i?X^XJj)O!Kn_vR=$3NVrN7o$hbk+ zAd8N@GEb$r+eig^5;g*|W2Q{qgZhy)AQ(q+hlo;&s;bJXP067nuZj%JkqizZKWZ$; zG)fdQ65k8Lyc^yQqS`_)ZWRTfbPVu8#7m4zbGD^Mzof}ldjpj~S4CY|NCu*LQl&@KMJVX*Bhi zhZ2zW*DAnC6IkDj`*w?T+K4Rch@t&{pnuo($`!F3KbC` zv->P?E$EEMh1=`kwing`9z4#YBdjxXR*qpoFl*a>6_5SUow#y%wE{=?C*faxWlwAJ zE=?``wPK)b1_Mz?)a= z$U&|<$rVfh%(A2GI$f^&MzNY656?9cXTgQSo;0cZt$@iE@)OYBh`|e<_qb22$Ty;w z`^JfzqUYEmnSi&KwzWmM-8sfWF{#6p;Kv4gM38JIazZxC%|=i-sR*q)V|QeHwQG}X zqsF{V>12x^hkK@xrDFTgDD@`U!GYjFomxxS^7iTxF+{dyrTLSIB8wPb}@@(xEBwAQhzN28by@9dF9F-1ykapRPMN@>ylPT)UBM0T)ydsi4LT_ zgh;dvFQgW2(TG7!p-=$Gj;eb4mv5{@vnSW{EUX?%hOH3 zGTcjS7?h5!*TU(x?ja65e`z)X z58>8JG6i%ki*dd%$p`=; zV#W@ocX(7K`z)t73ipx&zj}`0OPrynps(PuB^K(~kXJvI?~|f}by`Nny#-CCkQWD0 z;+MpE${%FQ7<{`8R{N`FONKIz9RLXfS>;l1(i)V6RYUgU9#~nQRxmd^ZKd0ZM=z%G zpSQ`iauvAzkq(-VY<FDA{7A=ZFR3CNhV#;Zg8f zcdZ=m2KRaY`a`ZM+TiIfWfG)8!O%-z8E=0Q9{4mb2T!ZUDH4H1Fn1Judsc>{h)Tn=0mLZB+D!HA~XLRyF&8eGAgVi#z)^uR7xB`A-NoHgVU zgOF5~fz9{_feaC*Z=>^XQ6E;5`>`JTbSqLre9h?et?jyDH1I-lVHzb?9rV6c$qCYc3rDc62GYs`-|kPxUXjb!@I<;15p^?A z(l*Oe-(GcbmK#-QGZMDkRHP-K$gG;yW<~UV=f+0qYn0%XsnJH6ao7YN<@QMEWfL(T zY5+4Y<^$y&P{GGR72f)+^!mxFO>qm&M3(?DK+eBdSPpm1Q3`3;PgHFIF#zo#{9tEj zC#38Iv{;i#^EAxE_C~$sHpT~_d`Cx%MSSJ;7=Vvvd*pB;AfW^D6z0b8#1;Bt(^Lph^w7gy?MVR+nuNLhV}`Q^bNxX;-7UTfYMP}P%=7qZS)tP3)I ztvP`X{4C%iQMIa_*!E#Yd=UxyWXs_JEjHavoIXyQFlw<$>Z`Y(m-@xV;t+k(v9x;L zuOr05VZB(>hL`vhX6spWZ+~lnT}pcnHVIFpG2~2<3Bxj=CydzR?aGSQrOuT<3OZ%> zXf}JI>wFfJHi_wva^$Tan2BOF35uY|0&&P8T_X-LfV+Et`@YdtUQlO>l@bvMsi5y4 zg-vP@e%21y9Yd)RK)Bg#FmuX$eCsf`v(YKt`XJM@H~w3Tg@arjCAO2%OutguQWMi3 z${bO^`;eqpVa7IwxrsQYka^+2-iIn_s^tKkv-ged4FR>F&s4~O8+$0~_@H*UzGe>1 zb~G{d*HB40jj&}7J*LK=M^mZp2^vD@ne>sEu7YORr(6)ZSgSNU+dATBDOkL~>dZ$( zu8H+(^?Q6~oRQbu^&YiRlCC*PqcR$)DV{5OQ_^!ouC|Q3i8-s@IvRDfAal1DrKK@Jv&^s zy|$mOf9$s0UF%wIw(k@tUzt)}L}`v)>E0lA;t57AY#SEWDSkEEaK-J9R@NXfM~CA75Iu$|;uHMY5|S7FU^>*FOo{2gNdM1Fur{ zE>2vI0R?!>@P<(1i>uUg3c)91f_|5?8D;l91)T3*%jj?F0JAq+;*I;yNyw7=1KYc4 zLFlJLE+meXZ{74!`s9sTMD%~BC22{C4e3xS=jM=OA1mWXX2uLgJ{MORtFn+qa4>bw zyBlJ09NWDOslZ*<%@v+GUQoAsc~{F#LulxzENZ$ntzf}6Gv45_{Yw>)v)JpI@4M{l z5f}58J8Z=Ln9d&$q%9vov{%z~m$|lEwiWcf$cHWQ?!x1VI@tNJZinlYYiUCJ3hRTg+Re8u%S7k`!QMW z-r&)Zy_nM^bo3oO8VB@-hz~m>8K~$%eLtAFZqLFahH!rIsGiC@8{tP4w<>=u z`q#kR9V+_PJt_xxds;BGtO-|6on$Ub-AZm!7a6dkQ_aLmv>-4eCdD1YqPl8yC_qdd zDP)j?F;NNGTJBNtNWXzr7<*ZN<;+6VR7kMFI(%`#lfc7$SY>4^^duz9dalcsS(V$0 zGg=$@QDAje=E$+oxG1_Gab}PT!L~O+*A;*&BRcEX&2S{`kzs%E;>o~>mG`zC4XDg$ zSG8&UQu>NRRDZ7VO$$$IwE3setqgD70~oWW4zx9{>Q$vrjz|_xE;vs9?(q_yVoWtZ8Y1S!G?&ilR=3<1>&L>y;N_utEmOoIzgyh2%3f?1`y*TS6 zN;V>N7v-Rh@g19r)7XNKP8X3A-sb?umoD9P!J$x?aK$xHt}>uOkd|u*qINq|{mcI7 z!q*$8yVhs>oeAcS)w0=zN(L=7i#p?*FH%W%z&of(AKzOC3~55_R5<9a;ef}TXct7k zeJXfBuRjj_1i&nY5#OFJ@UpYFp`Z_53h{vKHi;vqtT37l^a2IHJortDF)V1rfkt#D zoDLXPSC}pdM;J!XdA{HQy?6>p9%lz5lk z4kHK`QRnz8k~{p^9%nPLDNLZi*yO~SZaX;=>xa6&lZQ-~^RJuV7%T;pbOSkY0FjfT z!^M>gdgD(ccWP_NVYVTf!UAE>9u(H`s>4$+vOAtom62By)glCRSt(%cds8Af2pjN; za^N*?ea-)F*lmo&lpp$>59@*-yU2aHE*s{z;GQu~*EBBvQd+i}_d5{7QlpRS{;OJS z|Ca@G$@TA#zP|`Ykf-Jx2-ZoW{KPshfgb?k<++-?B%A0i0XSzY0+FE;r!ZZdJ?N7U z?}YH_8&q`oVBt}Zn$ zeb$siU(DC%O&CJqHbq<;RkaGHO4Aaui7wSq0QKr`sT2#l5)E|kAx?g0xnLmhBE=nZ z_bq4S5{ofyGJApp_&JnH0yzw0xZhHgF_);8%c^{aqwQfiiq^{i#CNdbSPc3ZsZC>D zR6U6zUh$f?dG8Rbi-0{nyi_+V_(caWtH_FFN_@6BC&7Xt=Ri4j#IsN2n1@EbcROGB zrx)^l1l%pzSzg7|IV6ou=IC{#+|Cx8%7+cjB&YrjRHa${1#Nd(1Q=(-%q(at0zX(4p17*?}Eqwyn_>+Yti$*6`9t zw;$CS(SIv;GcZ~CP^((6@B15Zek#8!?>~4lImf>F_6wi zVD5{z&kEE+g)lp*wL3m z-55lBEfSiOp*z-aIHL-*)8_c&PaJR$VvfHIrPHOMyY}F&z|ZBqcuKucjKD_ReuT2g zW38M+qPoi}{17Oow9Y*P+9nR<8Ki?I-~*kA!)zt@%>7w~(i{lV6OHlU*ALYB4Ievm zxdHR!wW9OI!i>~UFgp4>1w*GAp9)-NhmK{*J=g3he+b(nkUmx9tQE8<&MOJya3f0S zv9>}qa``5oEw?Ua?!F0eld;f=GU0Rjv4t{@C)t5UZd_FL}7SF-${YM&0gUl|gIydFUVsrnH^~GM;P9|^|)MmihMtTXl zhexp>45c+j)ZOX&FTN5H4v+2C2}oWEdfKB(K|9^5^(OJGNsvmo=xa@C)OfSGGPh$HYt~hjZr-56 zDqL`fy|tLoQqLiY(hsIzp%raYCyO4q%vQL|OrN-l4G$?7BHPkLU+oOhz5s|B6hn(! za~-5eL&)xB14i_xfD2Gyc z1Kqq-0fki#TSR*^r-KF#eM?F5?ElmjG#($fqGtaNgd}ake6tFr+0gfn;%`ua8RCCT zG9wo6#XMtDn|4(+4SSujYaw(%_w_>#4RjxNfqNk8Cg{x&~3|%5+~}s zZw_Jt?>lQA8mAJj6P}2iTo!rde2>xcbad= zk&S#H7T=he?PIG+$}g7ReWyfR5~FfJG$e+K-33+Q^^AxQZ%VG1*!j5hlgxZobx>J?TYMjF*r29;O|}ss30O_0%T&GFYxG(Tz|k?>j1VOq2_-qKGa~xm6dKpoX**o~3a>yGN|koue;V;5%l26IEM3=E>Br z{0AnoZZz&vHkP-nFYJY|`h6zd8fm!lJ10bJwDLej*Dz(!!ty@n=mp8@F4O>uoBtx6 zAeRNw%P%bI6yEv|bn6)PuBa3FAIGB4^#8kb{Ch}Xv$hOq78miF_nyuy8xqsA9-ubJ z^S^rsd0%QA>rl_T1fbS3jHDg*WPKKsrAHPZ5R-otXkd0F(Ues7#S)Qgyve6=uc_2w9%EHsZO_y(txE*vq^ms$sp=9yTBgH4y- zfP5z>hXv5};Jg;l#2LbsUB2#;B%HBa9g?$eO+djd8A8*D`7+VmgiM8wd!ZlJCf*2i zd=s|ZX2jZNqBgeIIGP*3zJmtK^?u_N&=0@M&E=qFS@vx=sxV&Zv+Kf${$L<)?q*>N z{WGBOK|kBvCy0>7RtzMaioYFXx81E>CO|7@YdXILD^i<`N3s4LZAP0$gcM?FVXB{x z-vUVmwhd9gxI6;Nd&B4)Hz7vj|6VdI5&vXT_UN)7mwRn@uZu@Ifz;; zKm5W;>so$yY#sjH8rn?*+w=UdHC0;fZ`b`%BDrv^QwY^5DvOlW<2Tz4;7wQb@hFQj zEcCU(gMd57ljM&b@7TRz+(BSs`<99??kAm!PWN4Elq`T+V0`_|IXGpF)b4slDLPLy zl$dS09>q!Nf!^}M<)v!|>e{o%$Osgs$UmRn&<2nA-+BtpbvyMO!MoLmy!*_0yPx9y zt$QYpMWI&0IpAnEv>aXi7krERCSNNCs(G&_6vf()V9 z0knZZer=K^rK(b~+jBDrL+P3^B)&1)E&1oDmEeog_XC9?c$h%wFQvRq!YTgRZ71tw zdL5Qj&45C_9e;@kHssaPID~hofiE_Y7KNx%O@3W*Ssk&};~74fh}UAL>c>d(@vE>f zr{#nFQ`TXKoUZ3?m{ip717{}A0cBs>QZG?+->iL2Mi)eWe|OXQ^$>lt zpC)Tzj?U#R=6wV>_o`Dt-A{E9p{tv;a5uVHS5aX)LaO-d35$~ZLCv8>B3U+xOq;=u zx*QI1Hm~E6eyHQ3G(F@@*dJkCJG9POH}1!VkztI-TZvk7xyuPSobew^bl$2VzQAh* z_+YRi(x(yrKC)L~zI0Q9)(lT8t8XRO@k?LoGp!GmY)|5j9h?TQccY5uPE_F&p_IFc z^i=4#FPSvf5sybhq@t>)X#oHZ0+p}SNgWFkj^H9!l$C-a)1-Jfeu&ITY*avHEH=>#96khHB~-C}*@d*N{t;A@6YT;wF{Z`*89HU|Hk7u=q~|HyE6>oD1|?g!8_FIpQLw1GD8ukrz(WFp<(YZ0&oa!sQLJ< z8NH!}^$POXTJ>S`MRrVK!$u=wXKp`DcTRjI%Oe{t5Udl0qk^Ss5_^c<&70&t{qBpI z7UzR?7W;A4IYNq$Y|(fe0o@sOqG^>V94Bf^*3!45;G8&T?A3{KmyB!gK!}>3w4)g` zMViSJjDXdm@C;ii09MSOV2JGrCxp zR`Z1VD(ze-!j&foxGmV zs~K+3JgD1#@lU~*Knuu&B+%33Mfu223Nz|Jcbaw*%Br^;W+1toR zU9a1e`ZQtzhU@ePFPG817g+1Od(tkRSLLSV5nmsAgoa4)JbYEsp0iah_M#VL2jQZE z&l``knrrzf>v|c(w@XHPA{V25(e?n0mJhw%Q>zPz3;^t>J)lj}nrbALBYV(b>;VA; zEMf6opAeG-(Qr_8uYfQ>+WWJqxyF@0xiA=%eE@OnbPOMr+iql47nFj+B7bqhqrvrD5CQ{S-cu#^J>&vjK|D9n>`C40(b;7jKk^0N}SZdsV2h|mj^VpkhB$Rb?X z!1Y4MH|`S`+r-dSCbO%`KvB`qv$9{1vuA)X|!P z%7L~9p#=C0!GzGeKc|&!vZ?59k4?+qB!5GoB_20fv`GFvZv)Ctr}&ma_{oK3)E=;S z!aMt@x_{8iPi)j|>8M`{wsQg!3Y5sMq*Wl{sxu}JMq>Rxm&mjsm#$TC6p5>FspGvQp;ylgpf4d-y^R2V#TN#hrjnjvml4`k88nT?p{8f`h z8gfiqX)D62j&>EA9_zsGzBrr(bv_(#iI7V=cpWQAzYH~yIWfeOSW_~ma+?f+*_%tNp= z3blBZV7&4AK~VYpsEW387iClMSynsNL}0^$b?BfB+YAYm2&VSDvcC^LnT-5gm_-?< zWc<4A+k=4G#1;2_<|`86N`T()J)&5aOxn}nR#Dw801}oP(p`zJj^<5bM9+)znTvXf z$Q}p?;0kW{5@!RG3f<&ABTgc9BbKG8HY>43BpKP0IRbS5`Kymgtt#|;^C7(}z4%E( z3N&3AXh_*CkR9>1{pInyCp{dWPZEf*T6zPXp!Wu=X2c`G@-cTAiZ54Y8wAH)HQIbC z&W;idgv)g%vwfef0Ja-%pa(Od{&{a#Qp2`0sso`}sVLNz zdrLIZ^7Tw6RFa zpD-lF1R2M>R7QezXm6KkPED-e%x| z5vnZ2LryBHq|q@d*P+hy1i)xU4Mcj1{zW@2Y7J$B68qv(4uT0AXgi>!EQWiK&4h6MTnEeEEL6J-{T#9iQa8i~(gg1g=xjX9qSa3;XN3oFvxt;;3k$ zUfD-dDi=z2a4FjQSQlx5mmN_$fUFzfcit}koGB-XsjwFwDrJ>K0U*)gCN65Vb#b4s z;ChvxOV)rY;=&3B3fcSl4^4%D^Saw7YDv#)ciI6|FfyJXUvl=&&A7S?YC|^5teL55EH(c_50X_% zPTm*5bJj`}UG+_}pX@&t}vtAUb8af2Udo6WY+;*7~S{Gar z$UpMn0O@sz84-;3o>sIIp<`p)5|CzBgP2x7z2oXFL3UC~$)#LgbE*j{o~`L+i%?9M zT0qgD@omwefgQb2O@Ujd?T~6qDOQX3Snw9@AHM;>r>3!iTm)%mn(M0xory zAB`+}%;a(g6~Ys+XpP{(13UAW^6hVd)~RGffTAh2`x_-8vR$q(rIk*$91dV1vsM1d ze}48TNC1=jup5F)ITIkM@ii?vDYn_tMbRPeHQocJkGr!aV!kaU&oXO|`~brEd=chS zj-qWIH%yzz9i1o-?>2P?zRrO!DWnNq;9Y|-J~fjyFsQq!H+~9RaiPPmk1HPbR*V9% z$ulu@P*U(QM5O%AFai5qhP|Ml16J1^U%Ytb14|@wzPjY{?LhX389HrAQpaoSOIABA zSJ4Q@p*axIu?;2x_7*f5jaDq%DlhH5D<+HbKg8ruF;03;W@;y9M|Q$xrMC;@kUlZ^tid{&h=nPLlaJN`wbx92 z-9GLoW|_w{&5&YB)HjVjgY%hmGN@An^-Fz`7%ux|XH{!*-GyeW)sxm`{#5=YT#@ap z+dYLY@)D%knWwz=25o0ZqT)9e%0pJ}@$?Gg>|u+7qWz}l-l9GljCF(}OLIIg-rTLG zt4`8Iq^qak&UR?_sx_Jfs^zH!3x0$?5Rt8eK0QIke7~TYDXswso zAAs_Fem0eb+_1Ovp$smc9iIqB-Y2Jm-MTry^BPDbhGltbHF;8?`SnF3V8Ho8niGi+ ziyHhuO@u=3KDB6LTTbP_u#=p4B)|gQG*tY1wL$8s+>qaxGbG}esEWIkN{KYc2ljTG z$-r;%EC6#puOttxl%D zba#((T#}U!(uvN4g$ZT}9(vcO@{^R??xIRfFie*qC>t#(cfi`?LI`^;o;#y*+2sEi zg2X2a#(a^T6ofbk$B)b&MlWwP1YD_5Mq%>(>Fca!_Q5x`HC}_fx`@#eR%AZO;l(=6 z%7`N_={17s2 z0Xb0>hx1i-=X@mO4%Y?9-aQ5A(RNWx9GcA^%X0Oa^YW1Pi2&P#jPsT3bB)8e!;9aaSX*zl5)YW& zmA(OvGY$zFz4aJbkzVCG7G-Os_=efmSYe#`>+U$UW`yr|q`dZFhspuQyPm>HG_NnN z!{9*=JMU6A=3RYPY^qTzXk-Cq7U>?U75u)JFj_?iOSMQP(LfSkno$Nvty|{aIiwf& z1MQi_0!nPVln2sr{?9!KCHJq~Iu99jtt=3eazh;IXn%Lv|F_4;N9Q6Mc7QcZ5bT5d zKU%Nrm4mlEw&e6-GW$g3gVQZ&b%WbzUT+He%@_V4;K`q-C<((L;FH7z~{6Of5iG#dCB_ zL~sa!LZCeR{hD6!%7FfX|i8MYc^tCyy+fZ z*nEbt7*8C;L&v#KDV2~3w4{QA?j{{re4LJBoi)YW7tcMeD7UL~g6>D~A^0XK5gl|I zNlUq<$iRB`iOF&XJVci)*Sh_&dp6TTDxSY)=^&Hw3M`Ha803 zgu;!Ft|1r^hz&E2jP!yJ&-vRxzoB)|AED(lC*0n!>fG0Bn2xomV8xfvDLLXF-AM6> z@sg0Tg*dFuZ`u>)Di3U=VzxdoRFEnJI0r-?hqg&%uf2Dv=9nAb$*>rnaB+e& z^&*g;;y+x;$7@!)RE`fF`S*%#fSf2-DyZ?WVLMc3*OV;-Kt{$i*hk*AJ||O6PJ8#O zh$(j$K;FM*&bPC1P;oMAx}TUDI;|u;L4uR5=-|Z2e_M@)t6%P#XSMT2IV<|o`LPPM zg;v~`h(+_t(1|d~m>!ZYWO!dpRyi22y$zajcN^w{o>w9V7x|@MQREi`3}_E|4Eu!t zT=-=NE^VtSsK+uZ$Tg|FMs!aYV{NJj=3S-(C?=>z8hkZ?zOFqn7}EGrJjeY%5t3}= z=Msb9I7`)Q5>|Sn&}jsIz;jD7Kl^8L+K*>1!k~|REKN}WERW^N;>**{MZ9ZQY64Zrow_QUjJlxE~f!m|m*ag5}Wt}E~DO7p|T|bmY#fWY7R}nr}37e&>YqHV* zts<}kt1N@_Y2C;Yq+mHvvQ&%dcI{1ZerVHY?$ngE0DDN5bBCL7@5yzSLC!!rARL8n z_dt=4{p!|I(=gJFSCu_&8LvG*%y-wbOX@3lj=2N9r9usoBnCi?m8{78R{Ts8IJjOe zSBcL|?1tcbIVSKkwv8E!^t z)73q(@zs<8kM?EURe~_m5Qok5o!p2Sj1v#SQ#1kZris9f`I?2_SD5g_yiFw88e9QZ zfHX!hNzkQ@L_p$0<4$doDfR)Q=#ahfLt{T%fk2To$?yASkKQAsg7{aT+voJv5;`YL zI6R7@`+c!s#&7*gka`@lb0@Q1Z0kwj-yCM{P{Sz?R7B3es++B9?4_%=SG=kld*)7u%`tGc=DwzEGN(ff3C$dZpFM~{Nl<%p5Cq{2X<<^301r2s zo+&N~Ch+iBhb0f({QdJ)qMy>d;lLmJ$=g5}Wh8Fh`8B+n#ifK=q}(`3%It4BJrF5B zd$|hQGDW|pnHi;C6U6TFYhGGVsXCM3TR#TxeD^LDL#gn>2ABBUVFWHqP8Q;@eRIe|h%bO9 zCJFZDMR&Z5NmQ>So}&75lr^D;s&G`q!~D)VR{-@(Ed6B}-6&2`Teg$qlOfONYUGzq zMD^jM>0s?R{{WUwS?2-|4hk<#*h3+TIqpHRZHvCeyyLD`in!`vG&e7$8VZ}S3l>%y z+8~4jzh#}7RQnDXT3sYfp>YIzb0K@%M7)xY-2oWOPuO|1MEZM^-hfa2m|U4uP*W#| z@F=Si+a6Qz^QD5dSWHIpCxh5FvcDkneNC#rqr>tfV7Xar+3Yg}PJdH6Df|#_&sr-r zK~uw0=CA!j1I2%OR~RjM^GZE}7Oxk^q~Qu(LNm?KCYyi6dz00^6*iy(|x`bvcI5`_;} z=hK>b^#bN(uFH~?OHuFV>)!vE!sVC`FfboBcs9Oa^%oYJ%a{`LFZGbrVpY7uGh)l4 z*s?PEQOZogDD+|jg=|oO5HqrEG7f4YXZ?y3zn0SZ#w&IX_Al+n9xxO^VN((A51W2 zPbw$v-;|_CUHo!4^-a!TGLtV_E#0NZOw_#l&gAeJ?NZG{7&{Zxi%(0DnE&WRkiVn$e4*r((_0vTkw7VTT`-y3JimzN3p#P!$Zf z&{y!{=+L7(6U{DRsP61)K}7IyMuA~acQC`YO+wK>Ar{d&VA+pHqZp-s9>yV149m>D z1*qK?#tf+Q*1h8QmtAL;00y@73$MWs+cA1#kyO+UXd|&7bbV$#nz@qyu{Kp-yXlQM zD^Yiab17r;{7~mCirYtfPi)jiQ#hUEg@d9(%GQy-1(jCj{htBr` znC5egOm4m1{~wS7?-Jss&Kpk09+bN*xjZC5wa^8fkABp-pMb6^netg-@jE!Er}%mD zK&@a_VFfX!t`VVcAE5E(QoqTr!abE~1n&_C2-wNKU3hli-k%D_uHh!ZA^NqK=j<{k zCN}}JJ;ZjixY{& zBSB0feq5I_Wcp~6=4PW`p*imEDF!F0;;DhS`jz3a`|1a9NwSlATj%DST-SJww(l)9 zST&YoKO&iC@}hdNY2?oyk?X=fE$4YxRAN67%Yx^9q>hcLA5Mm_MDB{>$xrH-Fbh#PG*1UsPfBZQ0#VO=C zkk$IKNo*JpzB|F3G-%}xgCQLZNz9j`zv=G8`8Jdq-bj>k{aD;Ak4~r)+p4-fF@d0} zUQyUB6~bt=YsdK8Q>Jx|e>FqFO0m(z*yKRVRj_sDxV>jldzX8TkBMWrFSt=w#_S*P zh;0-|R92~VIwqBllCawRA{uXlw$FUiJ3reL9c5%jt+x9&I325$PyaZzUwrboe{B-S zLvn{wT&N7z6Ym?{xJ$>k&lnkkkaFg~`GTuNQJpJU#5FIp^qeXo9BZIT!`FP*D|>8&{WbEcu=|k{Fds2uhB@X^mV-TfP#-6mUFJ2OBoqfJgdd z94yWmVlP?{EMTyKi^E{!$Xy^$Ppi^meb0i)(;!fRx+9(9HXoipc9QT5u1E)PIvs0% zQhMWs8d#T*sI=va72FR}8Xs5RQpj#uDNaU>*<@Pe1b@I>d z6^8in;-yj5-mB-EQFIVQx5&6y(*vp55Dp8m08O`2+95*7GqogBF_628rVv)dMa}qiEP1Q4Tv;S<9$0!TtSf z&Y5Gh&Ht*}tUm~gqcj@4i)D=msqy#$s1n{)xN7;lXBC?@ay8(Xgy4(jS%&3P1J8Vb zBYnu}hP$HZm?4dF2)x#;*I#h3%sWQIUujotENY8*u4Ai0)-N+9Fb{Mmh3_T zRV{u2;3<-JpALnXmt~I!KV$Dv_e@FDhx?jACHzYcdExy$|4RdMMm9g_wk3vR+sM*y zt!yKo#%#HZ#%o&S83HtOe<`+kJ>-1JT}EhAM17i+3o0_|o=YLn0%5wwmK*9}L@#)( zuj;57pTt32xYTusQ_timTqodEF5R6PMKz0I1qQXPk!d8&HhaxWi(3|Q^Hz*cDmP%- zrKWSekjU_#Ox&P72ya(zQ}C2c;q*g-?5f%x?)m5V+>7i%5?3Z31PgJ3+oeG8|KpjO z3z`BFCw$!@ugd7s4Nu{+;*b;y~| z)l($JgzL6AQBlq+wXyW0{3DG2r&=Z&dAY+A3;!02)y>)>0G8g;s#lU+)!P~75A&m{ zsyqE2hz&*~OPVTPGDg4_WKh%?TmyC7E!;rzZFA?Cc%cKWPHe? z8HB@J;&Eg2HG{;k)}Iaz?&v(a@Jsq3j45EcZ*SnfX0ADV)mKC%XCg3BEh)2;u)19k zQS^qHg95o(F9DpWbTk53k&2f-;4Peyj0Dvj2a&a+cEqJ{NdubL9(hZdx8XvNy@~yQ z1)+ISuZ|GzQPra2W?-fXesb9HsE3Ud0W7PF&;b53PeSqJsBLjhn$PeTZAKZ(^*azC zQ2)T}V$j%^&)mcc*nzLvz<_orKLgltcj(*0Tz$rF7_c3@$vc3%=vWT+Zg0$$6HTB* zVi?w9Jf~Az3K1h;j*+W=8+6KeNbONR;M*G4I50*sJgK(?0))-9xu9uat05Rd*0C#Y z`t^}v)$;8kOrk*U3hJ_mNK`xcVq4 z$aIhkR_FY9XR6L5=%-;m2ehc`Le@NK4gWar%w2lr;(SJ}@g0fB!ioJxg9##Opo4e8 zFWPclaV;IswuK$nZF{hs`g00x3dX7Ri!v^m)9r$cEQ8S9fWuI~prR1eg3;S3rP(-i zoqd!!^~&j>vFLo584mvC*4>>23mF67xU8QN0E03*a8vy|#Asr6V;@mKFM-;H`zc?YmOtoOM`;S+^m4Z*2YFI%YeEUK+dGH6dtn#ju9vxsA5o|_73h{g zDuJ7uz&cs}eG__`jJl5_f(E^`%&ykza&R-ID`~3fG-@-Q|8K&sF34glO&t<7b^EKW zdL92o1R8v%_SIm5(`9e6&yfiGVs6%veO#pv9`DU^+cUby=SQ-1eEJEzd;vUA3iXf` zlRQGIYhhqd#mWz#HnM=zY@1PG$0H4=)0f7nVwn8aonKKeF%q&$Oa$C5N`w8NUIT4{ zd(2|E=1Gv`{9=P>J+SFEezST>@?w*MMaH%TumtxC(dc$kyEeEN=8hBG@~qUe1h6$N z4M%qy>;5tbc?O(+WraChw<`ny_Q37b3)hPQn<318dH&4nI&~`STbrfqImz7f`PvDs zmC!S2yw?2Eq}oy4tC;1B7L73qgxNfzB_rSve9y1XZhoLDz@-@9zqRJ)Vk8nj%%F>k zEvqRiXS`iV-DuM+Z&^~819FW$&!A`OK3#DpVCI1u3V{r40u(?>6pw`uwRUYfb-bk1 zTx94W+{AbT9a8EoCdF?Y0R;|@D}d@5Obff5p&RU~@awf?+aaAVG;rxoIUf{C#2fAk zp_8f${XQGh?x$r=6&+53d~WXNW|@KdBkm27w*{z5>}1rckS#4nL@m{NC*PIPP4uC* zM!WHGWQ~wei2W1OWgfJ5sT1`8s59^3mj@x&sjL@j|NNkZTAJ>B${zEhaGB#vP|0fz zpS$8t(yhJ(#o+Y9{C8H_34X+1yJaU*8tutIHRh}$mt`W|jVA|ywjE47ke~t-@<@qAZZ@L5YPl4gv@wt|K;Q{WoHG7HpVFgz z8JF0DNhcoNbAXS0aaGL~&U&78W{Jkws724}l$8!ngOQ89{$ZGU#;EKbg*_epiu*PKp+QzU@Cj}u`7i!72!{h#U)2%Zg%!!-{x8; zQSH9bv+qAh4==}kk0sk{10gp8vQtU)mK2m*|}lEx@abyl0~Lmu_a*8ELuiH zM{ePRJWDiD9`1N`tQtWt9?91A7^I8VJ|T+yHfbbM3Q_In3Wigg@ZL28W@C-XdCiw7 z8)P*P5dq;iy(u>ti)2D?!g=&$k)0Xk+GKOWWdaZ*TG+AT2TNVub8#V}o{h`IM9~zh z1rel9u;}sFfc`?I-IC_q1J9^0nCbk_A{u3>UW>$ttv`S2^!Hq;TWUUc+hS)$@{{`l z57Nq4QZbswM*WAm%8SQL#|rhL>|6mH^G2Q_i-=jJXjIGgQR9I>u&va$812>K}c=}Sf8b@LwqZCmXBrN;j?m z>TJ9PO`VOoU#n8`VAUfOx_sV{gdiczvPpR;`@F+$rW|jvZyUE}5r4B?{$&V0_W!;R zCX2pWG`RFV-Z_BnGPkrc93fEcBo2M@kA!K84be#AP3@RN2f-(aND$82&esz@XNCA{ zs-&+luWga8YqZ#U@BDIv2nUy5v(yL{6=8;%;@u{X{=9iiqt(a6gzFR%P8M9n?!g1Q zN1<)#8;Lb&sS6NItDm2)!KJwA0l&cOhOs%}O>4>xT8}f=!-DKj4A)xJJ>Cwp2z2 zBO!_``htu>PYAiI8udfEFdD(WPyhFwJalu= zDb-5dQ}be?cZ1$17C$)F{O%K=`lZ8n%ycI9JC9!VNTX$sVKScU@1NYjhgU>CqS>N4 zXYmbb5Kfb+--rki`71UX?Hoyl^g7DUlaa-bb1i)`H2ZAsUzazqmu97TK)|3~NH46R z>Mu1{-z=VGRlOiYly(dWc0()Ub9owBI~L(jyN1f}mci{BL=Y9(S_DcTLp!moucSA$ z5p3AI{c+pJurSS9rtKe-Lbf%slAP$~s!O4hIcpBRJEt+wJ!$M@BVvn<$&C%S7atx1 z1|k&zQNPN-zOVWX6M$rK?Vt7B0*bZ5Z7{$OvHl=t@JLb5S6bEK(RdK|E*V;k@2&YU zbURDEuZW%uC1eM5AASeyi?xk0F>X$q_$0W*PyH%t!$^qTrDdnOB=G;t9#2q4smt;l zq9XTHr9$qV(v`ZzE&!#2iGn@1t&8`e5`j4we4>|#05?F$zv_8|{bkUnrD=)0pklI- z_nP!4Q7f;usNVd%ElgJ76X_69?;*Stog-0_a^+0xJRIda%)3Wu@Lzf65q`ZMZnTE< z9t40Rx~2{;G-6@}8z%s zwK7x>M8Ja|C?MDIvv9^y;5E?>kp&{>D+SvQOVQpr>S)C$J$q^G`9J%bn^`VgQT7+B z;KC?Lq)kWtr-{!LJMG~fgjY{h*a+tZMBz@*!|?-hu4;wV?$^Cf zLgmPCLaTG{Rb@_}6cP0noll&@d9yR43GvLASn{EWdS2())U}}>md1Kq?ehq82jS!UEr|;3 zREi)F2WEH~Zi2qZ@_i$h3ik}9O>pf%bBaOzGs+05x$dKu%9|E5V%bUis-`W}hSCI- z`of^>2A06H5C0?8&}oQe4HeMkH<_u)6bvK-B`&E+EshXH`Dp7o+Sb1D@esWgOG zJulqvhqE8bN4(P`Y%* za8FsmA6O8nB0>kYl`6s0|BnOflZu1WhYO=rU}) zAHU6>{9>`IK7%v2I^D2~v^klKoD9pSn5tS_H^hN3Ul4T<$?;xSQ0~sZ7dpaU1|G9o z)V9=h(qvPXiR@yn^JCLn#*srg64JFt8?@_XM^=P*d=NLxj?o}yDhyX^JO8Xj*wCBV zb@?Koj~BW|3<~d#0=9NhmO&cS5{4vn#-7AguQ+q^#A;hMTJC#dUK9qkMpx$tUFkEv zcnrjCA08ay_%9;wGkBJ*fRVIn&+SW!OnN=R={IX&=ihC7h)5^ATRN&EQ3dyOj=Os$ z@=uky-@})&iYvraffmoONu^bi2DQQGNN26f%f)XGcy%Yp*U90yfU8bc&D%fW+G&i= z>S>w#wB|=z%LS)}5HA2#>OXBn$|Fu_1%dR2oUXKe@?t6*xxYt@!n)bXwBBG$!{&XI z*pjGySd>Irg62+Jia#1o;ZBi-18^v+J`uagv=t$_1ImHX$_R-#Jr;bL7Z|D-p%Te~ zFm8xY*Ph_Y7WF3j<94QzFLRFftUPtJs6B(~Dp^sgsJ=`u^d`oyZndYG$er&NbMG`P z<-h=jih=$lP99rFzBt7V;xV0ciPkxe9p5@&&ouk_Vy*W8$nP;e-aW$%^bpBnq^)*lI{5`{SR%9}-|cJB}L9 z{3ceE^U-P|hE`6YrD_=su6o-0wLuVfjNjn57_%nXWfVo}HnDnDZkxhmgcNa$v??ri zN=0PjjdQi+s{>k~`OH*~)h7g&0(>_goU<#r@bz=W*a+qTm z`xxIpQnNxrf2D!@Q1*u{Q&{PIeF}@V$c?JLW&stq-*p=k6n!np_vDb5^)#5Z*5YUA z!w9JP^wdwm9w^n|H-fM3d}xH+U#levY_g@X*51WXcIwFNT1t+8LCh3fKDQ%Mzc(-# zL;EY&CC7NRZ63DQ<+HnBK>d!6NUYldM*%KLqzX2g&vmQ_O=Ecl{S3G775o2fQ<0@? z5PZ;rb;GjxB?9%_KPj{WE8(zQ7cRwQzo^iQQ_O~fFxY9?#}#Qr!WCErEvlyFEV4lY$P-Xi+}UUEi?I!R>k$C3EH3#=C2#s$F1))W64`Y?`~ba{We$`y`>Ue}v?` z|Jb6voRxL%h^5G7pI1ViNej5q=5LdKyK}0D(N|;*r$_UPIC_g~ zsO^RmV9g8$|IN3uKLyaowz0mS3M83_BLWMuiD7q7IJ+A<8D@|k=aq(jtp5g=0JScv zEPYDAsZ<7#qN=6Qvp;W-Zb$z?uw8@Xl_JCoiwjis6ygQRI>)6rwxCv82XvYXXr9iH z5KAulnvH9Dw53;E=D#NANXiWd!;o?uIerN)=V@jxMm%V&StSM@z6JGK1Eb@iKE7Y5 z4b`0X>oH{V2V@^yofiGL=KNrlii3^t1^{J$`YS53`@m4s+SlKft@+HABt??>HCEY_ z^g9@d*?USu-_-(@5JRQRg;P*I^+WxA=9t~7Gz?H|8XneSJ&H=kMoU`KLw6+5#A$>x zAhRhnK%r4Su3NV6+laL`RksZE$N*#dfF?)TwFDUliXooJTFUb*ti+|05c9n%@!-oi$yO zi4(>mUxWIt$5C$C#QeaqoTq8w$4prbHGlPat57pz%6TwKS^t_8wr?UUrde$Q?5{O$ zEbRvLM(&$env;Ds7ur~UdC`vo1jR(krp{b^K84s{&0nL9P-Q^t%3Mi|-(`tnso@e( zs4Wk~9M8d&8%OSS`v?lioAJ((HQs^sSV?e*PwzUi_-80znxE=~lXQ*rNsx>;RX7{A z*phqmNaD}9YB^@3d6#97?SN!h9;4ZRgAY2`3pFy+ONp# zy1+xzY4KFmVShIZ@?Wmw2io|k4ymY}#CEnJo1%j&|G|NF(%34jmohkl`H8wO5&XWQf1kazDwY=Ha{Q0NBbBUH8=&@vP^cpg{Unqk(nR&B!vD#3OK$86tE6 zIqW#s<*%slgAS?7uaQ=)j*klis=PtfXeN#MUyI{q8Q6LnC=~}0&c*|L{Ky+N1Z9ij z=Dy1anA;5K53mLm(?0%Y;MNxyPzz1QIGrx<%1wk;{fn!M?K)9eN{K>x&`U9GJAe0r zwL*@M%ig=@4>{7PFAnhm@}goQP`U50GVV}N>RC;wiKlHScYoN#l9cz)qL|OZLkV&@ za##7#xsW;aOa!`0i1L*q=%`w+pm+l9=1qeVy(M3o?%~LBvU+c-&RLRn3($9>mu-G3 zgEyq=ZVX%%XoceE z(PqvwVZdmvqMRD_RhWL;D6Gjtx-6el;)<+i(V53E3L`d^^Vlnpl4*Z4HQh zU_|u;@eZP~le!msSEg$)k%g_G6rykT9LZ&+4VfowoYdEyR=XgL?Ah!yy#MY3B}=_$ z1np~D%2ptZa${Tfp%!^&^`ujMN%_bJBbWi=Hgfncs-trl8@(XLN_xV*4m^eIpsYa?I$vBnDrb}ZE6 z{H|zDGDOBkgk4-&9T|>!8Lks|fFQufoTWQe?#ivYfy<(6ZS5fZ&+oPwx>5;zxWJca zE%9KyFshuy$Kp;-|NED>IC6H9T^mp#Imhcacca4J<9RYebs25QE5V;m+dv9$+?4vg z%M4Q*w32frHG=9!A;^aejoAfEm@lPFm-b$BedQ|Mra~~k_ji+IdSn^E2cWTMm&y#9 z2dVnia*y^~qJce*SAqZdXCQTbL`9HLA!2xMss#nlFT%ig9PMkS@GuZL*9#vNpYkz< zzTW1?iFqxUerJwy4hLM-ALs_tdw~j-tn#oh*bu=^<{+zDnb1g@%_(=`06q^!X;s}I z3|A^mA%;%e1oPB7CuRV5bO`5@n2x*s z<;E1-9l9-Se)Um?c%$3T@^V_H;I3LiR_c4dzX%dHEQe=1s>bysGWkP;;3n5t79R$s z+Ef^`(hT46Z2`dEP(6b_@}t5RFul9dfwptNL&G}6Z3HhNWO0RkeuSLV?iUG>JmKNS zxuIjd?#VxyBH({=YJm?KGfyeP%r#@a#YIP-7a%xp1}~C=w@2oR`^o~|NiM?7?85y2 z!ka0Af(~w??vI)UGKv0+Cnu(R+kxzzDZBimgKfE)Rq+$|)JTjk}Y6L&7rp;x{*UFJ&*0Jgl2!QVvgg1J zU#H$qST(`V6+*x&30E&C$4?jP3zO@2cqivtDzIM5tV~dw8zlAj2>$t0sa%cpV*BR{ z62vK;G`RZ}+0eirIh3DKx)4;SPY1*iSqc^Q+iIpb%D*%`RAj;Y%;C9Ub@JexAt2~e z589b}nY6~3L?h@UR7{sFqj0EfO_3ywjGwLJOOs>=XpUMkt%`y=TQ ze>5Mgc}dD!SiozAEf$I6a6GK9RASxa8E#P%#Up!@)x^a|=;BuP9_L(heR7}0M4I=e z1Y=t>&_erS^o+Fl8 z1(0xSOee~)$smx!LQ#W%fas!nW(B04)1w-N!15{ea{NMMT~*9H%j)~*;8y51Nsf`7 zPf)djIZ?9qUIS&hoK0`Spi>12Rj9sJ4Y6zy+CrkYSJ_Btaw})u)1($_sRD(3V}3n5 zMh$Z-1IH&6Y7^ubE5N(1wFBLe}C+Sr7fu*UX%!LLPl79Yc^FKM13TQp3vt=zi)F*KnqcQy@cn`1E7DF zmHih_VfQ85n9DVx;NVGWr-Lqgm1QjW;M>iO+CW_-tqTPO#JKV!NUFkZLKumsWrL&L zv+634wvl`n7Xxx2L8)Mw)&Ps_uAb>#C5lJ=s$g$lYGuE(ckW$v%h%tXla-~ki}p7c z0(2;OWK{zacCCbb4s?!RX+)4i$eY+r7^#I_+Vl5xu)v?YVG~C=F$dyz8@At zhAm;|g+TVF+g?Tyg{mn8^DwfA(W1>Jgg8@4W@bw@SBQ}IR4-+k{{nCDE3RLZBFJUq z?)75etrmE2ZN>aU-`m`>3sY31yR)C_X$Z@A@8i8=5km_`ki3aCnt|lf*8@$0r?x|$ zPp&hDrih#evuz>S?f(Gah~1GuNWBuD+JLe_=QS3J%cnA@0={^P02KZ(;CdT0v#&qt z4BcAi2-Sa4tq0Z_GRSgDmOzaPoFWgRjfWgI!{Qr;tFr1sXUX8#j8i_5hL1&4tq6{6 z9{{KS6+y>fW4C>CAPC11gldnRh(=S z1%?}DPEyq@Kuzd3S%33$HGiX}{N&MnY!B=Fu!^iyrDZ9sc19;`_4^kf*Y~X1YcDQl zMM`axWIA?L}{B%4xW40mlUYnf?pqrTwPI~2VrB^XMdV7 zQ=<{%f!e4Wz8FiykV)iOJ`k^!?bXL&lB|uVtLW_0xRjHbu!6pW{;d|8@GxirEfHO18Fd#+m_eU!q+C{EF#s6D~Qh(rd_+&H*aGCcw zANr=v!bBpm+1Hf88pJ~ve=f*^-LG59587YB6b9d|H?F9sL$GvAb8()buckXL4@I1Q zL)8_rLgHusgIG$!QyDD6y+ctTiC+9uiz`$J?wp#a`8zfUZb-urUpE5Ma9)f%R5u{B zKvrVRya{nTEXIo-1;NYeCO?4fUq$#NBsc4;&aG?t^;2tn&Z(lAZ5JDrWh7)92wb@~ zjVZC_o|+xFTToN5aJuqgo^L->)cT6a7JkrbO6%vllop?kys$jk&gKcUVL(U8x)I?zec$zAKMNCF8i4{H{ zH$Bh`IrFjd*LKEo61Js`8+xCqC*i`$zrIetm)TtmPy$8|BN0a&cL{&N2@e8%vyKIe zxq)}oEz1vM$f*lApxHPoT}1v!VT%t_o_BLTDeG|PM(n4+cIyK z1h?is3j>Rwh#_a<7q-u{<^S%UaDsf^N9l*B^>7zCD@~+=>qHKb*VN=HacMsuo#sLg zf@-YR#1X$tBE&-F^XIi3l$}Hz=(N^&=ulJ^y>eYttR?P>;$do)&GF`xASW|FXBZ6) z^AdGr6#QDsr1vs=m%D3LRtYZvVj`%@M{ihZbHEy{XvhM-tP{pXxbjX+1%?AYR@Xy# zC6%kko!V3jP3R`_JwmlYAcvdlPPVAu_K;bES0Jo<$MhlVmiAAtbF!-B!+9Fa2okbY5HNvJm@y?ieV5X|cdB8XU>={~7@pL=vqg(WaGO zDK6)wfxt0!+w}4}D7!Xd^v-$@R29)|boMj&sPo6lkg5JttqnYSd=~m$31;kNYoRh(rUV z3p8asta0#I*MG8>1&u(kWW$)Gj>qS>=J_ll&QV47Y84c*g59ap81JBC$^(hLqij7j?zf)7X>^K9G6_Ru}R-pMYox8amCh@dcRGdz?DHK&xAE$0_E*QRZ z1;yWdu%pvNjlN>quc4dMWvf!l($AX$7+0xB)e+xHK%xTf1C$AIiU=X}26Rbrt^`mC zlt-Cj!xE@?Ahf+ggo4-)qjD=8?X~&}*uymW{2ejHFrnOwgK(lrgHoeU(IVgQvL4=_&cyH<0 z!GysNsMCQNPawlGB;d$F$l(3K;7Nf#J0N&-It2*3y#!eWXd4jG9sDp!ZK_GUBf>+6 zKo@#Jan_y)aGBMhX%sPG{6k)Zwu!M4^OQTP?Qtp|u&>muT2AQql zjTf6`K-E@z<{i}m!Z>xrCoC#l52QHAZiO@6+-$xT{30cZZw#L^KVTlFFg_5&?UZ>w zg$yFw06GKLf4lbyq|ej#7%fH~c=&LY;(us>DcHO7X;xV>Oz&>Pg?=wPFsX){kC<^G zM$TWgtT@5;Ta#N75@sc5ed;ixxfJ;Jyj~g zo}x`Qf{Di#bH%w6UESM94cIJeZhgg(bDsXsV6=c9!(;iYjAWSoGEK}g_W5Ur#`pc5 zD)b7cUI7cElJZqOt0B#@Xyl2K)04v@@C4=gIsv8B;UTNbio(KpKPcm$`D-HfHH-6U z9w`oVLN(|u77Vf#I%i?Ny-%=p+yTKC)>|dQv?GI5kt%GHmX>UXlV@UJSmwqfj>xzS z+X0SQRXT}tD8w^K;iE@O@Gy4xHP77z2-vkU=ihgLpe$IRlo$))R&gxAXdKu9Km(Gs z6|u+wT_WxB2f2eHoPQ(0;&4PS^P&!wPQF;d_a(PuRIai5${h~`{GuC&QSDhxT@lb0 z^WgTG6=~Biv4BxQ3V%|`GJX}n?BJ*!2n&1A4Nt#{s=95KCM8YBiL#mgWcb@&b+>t| z)5>SnQspYUt$Wt*Vid6t$%n<{E2sS;V^`Atz%g zQ7ne=C=Pz0q#-k@d5;Q@$U#tK7H#4>J|j~FxN!v$2U5x2%&^hFgo`}wV_#1jH2Evj9xA%2)j~}n6Fk<%$89l*N|w@57*WawmUYoJ?dJI(AgS0| zk~U{W?zOk~8d#aU`-2Kmui7w+QRT|Mml)8Ev`X?j;?PTc+ zccCOLIVcs)FUJxr&QhUCcEFCLQ$=x8)SX3;!n7C=v1EG`w=(LY2X8K=zj3&mJT9K) z5^=Wnkg7!GQ1bf*kW;<5?RxibrgG7m-wZp45yklGpZ4viO&)aYXS)SOLlFov58p?z zl9#&&%lcO2DPoW52jKG$x^GhS1JPo6oiniazB5n3{+qRXH9?pKXHLUeyN&uxsM>!E z7{|jmg%G6ta#;CVJ}Q$t%ut7YT_?Al#vHckvRN*R7NGx=w99V1Dg(;cf{-lJ+lC#w z^^W3a3m&d%;TX%AMw%=jy=xvb4$ThIfnKi;HXBz(9UKr?>YvS01c(@pcu{6X)QulC zCYPzufpX&_(7r@nQra^uD@zI3PZSf5XOrdfDql zHjUi0cOkL*`EC%LT}@MD^qcn!HmjydqcRlUW{i7#x>lj z`-Y!Sl#9R*ANPqYz(C%>qdosIK98;KT@pfT38g-RkvFHmoQD$&YA|c16i07fY-DGq zE}S)JV{!*WiO>2TL;qzpiKPdyN_A+_Vb¥nG_K&L4nj=ZvLasA#||%3fVmT*K|r zVD_VLCo$@0as0TxP8guBu#FuW@*ocqUc**j32oV1qQdyK0`%>+1d;{0a<>~ydR1CgrGlwoe-0?pY@LS%=c7d2?vPck3&0~y7Mtv#webW+S%$x8^fGmsx!B#3okr1 z@>=lAN6y}*f~=wy_v84A@dF}3rhCa?5WxuqRj