yingp 6 роки тому
батько
коміт
18a303b778
75 змінених файлів з 5242 додано та 8 видалено
  1. 8 8
      README.md
  2. 0 0
      applications/device/README.md
  3. 30 0
      applications/device/device-sdk-dahua/pom.xml
  4. 54 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/config/DahuaConfig.java
  5. 38 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/config/DahuaProperties.java
  6. 677 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaEvents.java
  7. 1912 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaLibrary.java
  8. 112 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaSdk.java
  9. 1058 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaSdkError.java
  10. 18 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaSdkException.java
  11. 18 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaAccessControlCardService.java
  12. 18 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaAccessControlRecordService.java
  13. 223 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaDataAnalyzeService.java
  14. 101 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaDeviceService.java
  15. 18 0
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaRemoteFileService.java
  16. 3 0
      applications/device/device-sdk-dahua/src/main/resources/META-INF/spring.factories
  17. BIN
      applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libInfra.so
  18. BIN
      applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libNetFramework.so
  19. BIN
      applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libStream.so
  20. BIN
      applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libStreamSvr.so
  21. BIN
      applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libavnetsdk.so
  22. BIN
      applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libdhconfigsdk.so
  23. BIN
      applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libdhnetsdk.so
  24. 304 0
      applications/device/device-sdk-dahua/src/main/resources/message_zh_CN.properties
  25. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/HWDec.dll
  26. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/Infra.dll
  27. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/IvsDrawer.dll
  28. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/Json.dll
  29. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/MCL_FPTZ.dll
  30. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/NetFramework.dll
  31. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/Stream.dll
  32. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/StreamSvr.dll
  33. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/VTHStack.dll
  34. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/aacdec.dll
  35. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/adpcmdec.dll
  36. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/amrdec.dll
  37. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/armenc64.dll
  38. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/avnetsdk.dll
  39. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhconfigsdk.dll
  40. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhconfigsdk.lib
  41. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhnetsdk.dll
  42. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhnetsdk.lib
  43. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhplay.dll
  44. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/fisheye.dll
  45. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/g7221dec.dll
  46. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/g729dec.dll
  47. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/h264dec.dll
  48. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/h26ldec.dll
  49. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/hevcdec.dll
  50. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/mjpegdec.dll
  51. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/mp2dec.dll
  52. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/mp3dec.dll
  53. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/mpeg4dec.dll
  54. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/postproc.dll
  55. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/svac_dec.dll
  56. BIN
      applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/swscale.dll
  57. 20 0
      applications/device/device-sdk/pom.xml
  58. 10 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/api/AccessControlCardApi.java
  59. 10 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/api/AccessControlRecordApi.java
  60. 26 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/api/DeviceApi.java
  61. 10 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/api/RemoteFileApi.java
  62. 271 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/dto/AccessControlInfo.java
  63. 36 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/dto/DeviceId.java
  64. 58 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/dto/DeviceInfo.java
  65. 24 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/event/AccessControlEvent.java
  66. 23 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/event/DeviceDisconnectEvent.java
  67. 23 0
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/event/DeviceReconnectEvent.java
  68. 41 0
      applications/device/device-server/pom.xml
  69. 23 0
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/DeviceApplication.java
  70. 34 0
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/listener/AccessControlListener.java
  71. 4 0
      applications/device/device-server/src/main/resources/application.yml
  72. 21 0
      applications/device/pom.xml
  73. 1 0
      applications/pom.xml
  74. 5 0
      framework/core/src/main/java/com/usoftchina/smartschool/context/SpringContextHolder.java
  75. 10 0
      pom.xml

+ 8 - 8
README.md

@@ -4,14 +4,14 @@
 ├─smartschool-platform
 │  │  
 │  ├─applications-----------------------------业务应用
-│  |  ├─school-------------------------------后台业务
-│  |  |  |─school-api------------------------后台业务api
-│  |  |  |─school.dto------------------------后台通用数据传输对象
-│  |  |  |─school-server---------------------后台通用服务
-│  |  ├─websocket------------------------------设备集成服务
-│  |  |  |─websocket-api-----------------------设备集成服务api
-│  |  |  |─websocket.dto-----------------------设备集成服务数据传输对象
-│  |  |  |─websocket-server--------------------设备集成服务
+│  |  ├─school--------------------------------后台业务
+│  |  |  |─school-api-------------------------后台业务api
+│  |  |  |─school.dto-------------------------后台通用数据传输对象
+│  |  |  |─school-server----------------------后台通用服务
+│  |  ├─device--------------------------------设备对接
+│  |  |  |─device-sdk-------------------------设备对接通用sdk
+│  |  |  |─device-sdk-dahua-------------------大华设备对接sdk
+│  |  |  |─device-server----------------------设备管理服务
 │  |  ├─wechat---------------------------------微信集成模块
 │  |  |  |─wechat-api--------------------------微信集成api
 │  |  |  |─wechatdto--------------------------微信集成数据传输对象

+ 0 - 0
applications/device/README.md


+ 30 - 0
applications/device/device-sdk-dahua/pom.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>device</artifactId>
+        <groupId>com.usoftchina.smartschool</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>device-sdk-dahua</artifactId>
+    <description>dahua device</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>net.java.dev.jna</groupId>
+            <artifactId>jna</artifactId>
+            <version>5.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.smartschool</groupId>
+            <artifactId>device-sdk</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.smartschool</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 54 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/config/DahuaConfig.java

@@ -0,0 +1,54 @@
+package com.usoftchina.smartschool.device.dahua.config;
+
+import com.usoftchina.smartschool.device.api.AccessControlCardApi;
+import com.usoftchina.smartschool.device.api.AccessControlRecordApi;
+import com.usoftchina.smartschool.device.api.DeviceApi;
+import com.usoftchina.smartschool.device.api.RemoteFileApi;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdk;
+import com.usoftchina.smartschool.device.dahua.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author yingp
+ * @date 2019/3/7
+ */
+@Configuration
+@EnableConfigurationProperties(DahuaProperties.class)
+public class DahuaConfig {
+
+    @Autowired
+    private DahuaProperties dahuaProperties;
+
+    @Bean
+    public DahuaSdk dahuaSdk() {
+        return new DahuaSdk(dahuaProperties);
+    }
+
+    @Bean
+    public DeviceApi deviceApi() {
+        return new DahuaDeviceService(dahuaSdk(), dahuaDataAnalyzeService());
+    }
+
+    @Bean
+    public DahuaDataAnalyzeService dahuaDataAnalyzeService() {
+        return new DahuaDataAnalyzeService(dahuaSdk());
+    }
+
+    @Bean
+    public AccessControlCardApi accessControlCardApi() {
+        return new DahuaAccessControlCardService(dahuaSdk());
+    }
+
+    @Bean
+    public AccessControlRecordApi accessControlRecordApi() {
+        return new DahuaAccessControlRecordService(dahuaSdk());
+    }
+
+    @Bean
+    public RemoteFileApi remoteFileApi() {
+        return new DahuaRemoteFileService(dahuaSdk());
+    }
+}

+ 38 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/config/DahuaProperties.java

@@ -0,0 +1,38 @@
+package com.usoftchina.smartschool.device.dahua.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * 参数配置
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+@ConfigurationProperties(DahuaProperties.PREFIX)
+public class DahuaProperties {
+    public static final String PREFIX = "device.dahua";
+    /**
+     * 操作超时时间
+     */
+    private int waitTime = 5000;
+    /**
+     * 建立连接超时
+     */
+    private int connectTime = 10000;
+
+    public int getWaitTime() {
+        return waitTime;
+    }
+
+    public void setWaitTime(int waitTime) {
+        this.waitTime = waitTime;
+    }
+
+    public int getConnectTime() {
+        return connectTime;
+    }
+
+    public void setConnectTime(int connectTime) {
+        this.connectTime = connectTime;
+    }
+}

+ 677 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaEvents.java

@@ -0,0 +1,677 @@
+package com.usoftchina.smartschool.device.dahua.lib;
+
+/**
+ * 报警类型,对应CLIENT_StartListenEx、CLIENT_RealLoadPictureEx等接口
+ *
+ * @author yingp
+ * @date 2019/3/6
+ */
+public class DahuaEvents {
+    public static final int DH_COMM_ALARM = 0x1100;// 常规报警(包括外部报警,视频丢失,动态检测)
+    public static final int DH_SHELTER_ALARM = 0x1101;// 视频遮挡报警
+    public static final int DH_DISK_FULL_ALARM = 0x1102;// 硬盘满报警
+    public static final int DH_DISK_ERROR_ALARM = 0x1103;// 硬盘故障报警
+    public static final int DH_SOUND_DETECT_ALARM = 0x1104;// 音频检测报警
+    public static final int DH_ALARM_DECODER_ALARM = 0x1105;// 报警解码器报警
+    public static final int DH_ALARM_ALARM_EX = 0x2101;// 外部报警,数据字节数与设备报警通道个数相同,每个字节表示一个报警通道的报警状态,1为有报警,0为无报警。
+    public static final int DH_MOTION_ALARM_EX = 0x2102;// 动态检测报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的动态检测报警状态,1为有报警,0为无报警。
+    public static final int DH_VIDEOLOST_ALARM_EX = 0x2103;// 视频丢失报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的视频丢失报警状态,1为有报警,0为无报警。
+    public static final int DH_SHELTER_ALARM_EX = 0x2104;// 视频遮挡报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的遮挡(黑屏)报警状态,1为有报警,0为无报警。
+    public static final int DH_SOUND_DETECT_ALARM_EX = 0x2105;// 音频检测报警,数据为16个字节,每个字节表示一个视频通道的音频检测报警状态,1为有报警,0为无报警。
+    public static final int DH_DISKFULL_ALARM_EX = 0x2106;// 硬盘满报警,数据为1个字节,1为有硬盘满报警,0为无报警。
+    public static final int DH_DISKERROR_ALARM_EX = 0x2107;// 坏硬盘报警,数据为32个字节,每个字节表示一个硬盘的故障报警状态,1为有报警,0为无报警。
+    public static final int DH_ENCODER_ALARM_EX = 0x210A;// 编码器报警,数据为16个字节,每个字节表示一个通道编码器状态,1为有报警,0为无报警。
+    public static final int DH_URGENCY_ALARM_EX = 0x210B;// 紧急报警,数据为16个字节,每个字节表示一个通道编码器状态,1为有报警,0为无报警。
+    public static final int DH_WIRELESS_ALARM_EX = 0x210C;// 无线报警,数据为16个字节,每个字节表示一个通道编码器状态,1为有报警,0为无报警。
+    public static final int DH_NEW_SOUND_DETECT_ALARM_EX = 0x210D;// 新音频检测报警,报警信息的结构体见DH_NEW_SOUND_ALARM_STATE;
+    public static final int DH_ALARM_DECODER_ALARM_EX = 0x210E;// 报警解码器报警,报警信息的结构体见 ALARM_DECODER_ALARM
+    public static final int DH_DECODER_DECODE_ABILITY = 0x210F;// 解码器:解码能力报警,数据为一个字节,0:能正常解码 1:表示超出解码能力。
+    public static final int DH_FDDI_DECODER_ABILITY = 0x2110;// 光纤编码器状态报警,报警信息的结构体见 ALARM_FDDI_ALARM
+    public static final int DH_PANORAMA_SWITCH_ALARM_EX = 0x2111;// 切换场景报警,数据为16个字节,每个字节表示一个通道编码器状态,1为有报警,0为无报警。
+    public static final int DH_LOSTFOCUS_ALARM_EX = 0x2112;// 失去焦点报警,数据为16个字节,每个字节表示一个通道编码器状态,1为有报警,0为无报警。
+    public static final int DH_OEMSTATE_EX = 0x2113;// oem报停状态,数据为 1 BYTE。
+    public static final int DH_DSP_ALARM_EX = 0x2114;// DSP报警,报警信息的结构体见 DSP_ALARM
+    public static final int DH_ATMPOS_BROKEN_EX = 0x2115;// atm和pos机断开报警, 数据为 1 BYTE,0:连接断开 1:连接正常
+    public static final int DH_RECORD_CHANGED_EX = 0x2116;// 录像状态变化报警,报警信息为 ALARM_RECORDING_CHANGED 数组
+    public static final int DH_CONFIG_CHANGED_EX = 0x2117;// 配置发生变化报警,数据 无
+    public static final int DH_DEVICE_REBOOT_EX = 0x2118;// 设备重启报警,数据 无
+    public static final int DH_WINGDING_ALARM_EX = 0x2119;// 线圈/车检器故障报警(对应结构体 ALARM_WINGDING_INFO)
+    public static final int DH_TRAF_CONGESTION_ALARM_EX = 0x211A;// 交通阻塞报警(车辆出现异常停止或者排队)(对应结构体 ALARM_TRAF_CONGESTION_INFO)
+    public static final int DH_TRAF_EXCEPTION_ALARM_EX = 0x211B;// 交通异常报警(交通流量趋于0或异常空闲)(对应结构体 ALARM_TRAF_EXCEPTION_INFO)
+    public static final int DH_EQUIPMENT_FILL_ALARM_EX = 0x211C;// 补光设备故障报警(对应结构体 ALARM_EQUIPMENT_FILL_INFO)
+    public static final int DH_ALARM_ARM_DISARM_STATE = 0x211D;// 报警布撤防状态(对应结构体 ALARM_EQUIPMENT_FILL_INFO)
+    public static final int DH_ALARM_ACC_POWEROFF = 0x211E;// ACC断电报警,数据为 DWORD 0:ACC通电 1:ACC断电 
+    public static final int DH_ALARM_3GFLOW_EXCEED = 0x211F;// 3G流量超出阈值报警(对应结构体 DHDEV_3GFLOW_EXCEED_STATE_INFO)
+    public static final int DH_ALARM_SPEED_LIMIT = 0x2120;// 限速报警(对应结构体 ALARM_SPEED_LIMIT)
+    public static final int DH_ALARM_VEHICLE_INFO_UPLOAD = 0x2121;// 车载自定义信息上传 (对应结构体 ALARM_VEHICLE_INFO_UPLOAD)
+    public static final int DH_STATIC_ALARM_EX = 0x2122;// 静态检测报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的静态检测报警状态,1为有报警,0为无报警。
+    public static final int DH_PTZ_LOCATION_EX = 0x2123;// 云台定位信息(对应结构体 DH_PTZ_LOCATION_INFO)
+    public static final int DH_ALARM_CARD_RECORD_UPLOAD = 0x2124;// 卡号录像信息上传(对应结构体 ALARM_CARD_RECORD_INFO_UPLOAD)
+    public static final int DH_ALARM_ATM_INFO_UPLOAD = 0x2125;// ATM交易信息上传(对应结构体 ALARM_ATM_INFO_UPLOAD)
+    public static final int DH_ALARM_ENCLOSURE = 0x2126;// 电子围栏报警(对应结构体ALARM_ENCLOSURE_INFO)
+    public static final int DH_ALARM_SIP_STATE = 0x2127;// SIP状态报警(对应结构体 ALARM_SIP_STATE)
+    public static final int DH_ALARM_RAID_STATE = 0x2128;// RAID异常报警(对应结构体 ALARM_RAID_INFO)
+    public static final int DH_ALARM_CROSSING_SPEED_LIMIT = 0x2129;// 路口限速报警(对应结构体 ALARM_SPEED_LIMIT)
+    public static final int DH_ALARM_OVER_LOADING = 0x212A;// 超载报警(对应结构体ALARM_OVER_LOADING)
+    public static final int DH_ALARM_HARD_BRAKING = 0x212B;// 急刹车报警(对应机构体ALARM_HARD_BRAKING)
+    public static final int DH_ALARM_SMOKE_SENSOR = 0x212C;// 烟感报警(对应结构体ALARM_SMOKE_SENSOR)
+    public static final int DH_ALARM_TRAFFIC_LIGHT_FAULT = 0x212D;// 交通灯故障报警(对应结构体ALARM_TRAFFIC_LIGHT_FAULT) 
+    public static final int DH_ALARM_TRAFFIC_FLUX_STAT = 0x212E;// 交通流量统计报警(对应结构体ALARM_TRAFFIC_FLUX_LANE_INFO)
+    public static final int DH_ALARM_CAMERA_MOVE = 0x212F;// 摄像机移位报警事件(对应结构体ALARM_CAMERA_MOVE_INFO)
+    public static final int DH_ALARM_DETAILEDMOTION = 0x2130;// 详细动检报警上报信息(对应结构体ALARM_DETAILEDMOTION_CHNL_INFO)
+    public static final int DH_ALARM_STORAGE_FAILURE = 0x2131;// 存储异常报警(对应结构体 ALARM_STORAGE_FAILURE 数组)
+    public static final int DH_ALARM_FRONTDISCONNECT = 0x2132;// 前端IPC断网报警(对应结构体ALARM_FRONTDISCONNET_INFO)
+    public static final int DH_ALARM_ALARM_EX_REMOTE = 0x2133;// 远程外部报警(对应结构体 ALARM_REMOTE_ALARM_INFO)
+    public static final int DH_ALARM_BATTERYLOWPOWER = 0x2134;// 电池电量低报警(对应结构体ALARM_BATTERYLOWPOWER_INFO)
+    public static final int DH_ALARM_TEMPERATURE = 0x2135;// 温度过高报警(对应结构体 ALARM_TEMPERATURE_INFO)
+    public static final int DH_ALARM_TIREDDRIVE = 0x2136;// 疲劳驾驶报警(对应结构体 ALARM_TIREDDRIVE_INFO)
+    public static final int DH_ALARM_LOST_RECORD = 0x2137;// 丢录像事件报警(对应结构体ALARM_LOST_RECORD)
+    public static final int DH_ALARM_HIGH_CPU = 0x2138;// CPU占用率过高事件报警(对应结构体 ALARM_HIGH_CPU)
+    public static final int DH_ALARM_LOST_NETPACKET = 0x2139;// 网络发送数据丢包事件报警(对应结构体 ALARM_LOST_NETPACKET)
+    public static final int DH_ALARM_HIGH_MEMORY = 0x213A;// 内存占用率过高事件报警(对应结构体ALARM_HIGH_MEMORY)
+    public static final int DH_LONG_TIME_NO_OPERATION = 0x213B;// WEB用户长时间无操作事件(无扩展信息)
+    public static final int DH_BLACKLIST_SNAP = 0x213C;// 黑名单车辆抓拍事件(对应结构体DH_BLACKLIST_SNAP_INFO)         
+    public static final int DH_ALARM_DISK = 0x213E;// 硬盘报警(对应 ALARM_DISK_INFO 数组)
+    public static final int DH_ALARM_FILE_SYSTEM = 0x213F;// 文件系统报警(对应ALARM_FILE_SYSTEM_INFO数组)
+    public static final int DH_ALARM_IVS = 0x2140;// 智能报警事件(对应结构体ALARM_IVS_INFO)
+    public static final int DH_ALARM_GOODS_WEIGHT_UPLOAD = 0x2141;// 货重信息上报(对应ALARM_GOODS_WEIGHT_UPLOAD_INFO)
+    public static final int DH_ALARM_GOODS_WEIGHT = 0x2142;// 货重信息报警(对应ALARM_GOODS_WEIGHT_INFO)
+    public static final int DH_GPS_STATUS = 0x2143;// GPS定位信息(对应 NET_GPS_STATUS_INFO)
+    public static final int DH_ALARM_DISKBURNED_FULL = 0x2144;// 硬盘刻录满报警(对应 ALARM_DISKBURNED_FULL_INFO)
+    public static final int DH_ALARM_STORAGE_LOW_SPACE = 0x2145;// 存储容量不足事件(对应 ALARM_STORAGE_LOW_SPACE_INFO)
+    public static final int DH_ALARM_DISK_FLUX = 0x2160;// 硬盘数据异常事件(对应 ALARM_DISK_FLUX)
+    public static final int DH_ALARM_NET_FLUX = 0x2161;// 网络数据异常事件(对应 ALARM_NET_FLUX)
+    public static final int DH_ALARM_FAN_SPEED = 0x2162;// 风扇转速异常事件(对应 ALARM_FAN_SPEED)
+    public static final int DH_ALARM_STORAGE_FAILURE_EX = 0x2163;// 存储错误报警(对应结构体ALARM_STORAGE_FAILURE_EX)
+    public static final int DH_ALARM_RECORD_FAILED = 0x2164;// 录像异常报警(对应结构体ALARM_RECORD_FAILED_INFO)
+    public static final int DH_ALARM_STORAGE_BREAK_DOWN = 0x2165;// 存储崩溃事件(对应结构体 ALARM_STORAGE_BREAK_DOWN_INFO)
+    public static final int DH_ALARM_VIDEO_ININVALID = 0x2166;// 视频输入通道失效事件(例:配置的视频输入通道码流,超出设备处理能力)ALARM_VIDEO_ININVALID_INFO
+    public static final int DH_ALARM_VEHICLE_TURNOVER = 0x2167;// 车辆侧翻报警事件(对应结构体ALARM_VEHICEL_TURNOVER_EVENT_INFO)
+    public static final int DH_ALARM_VEHICLE_COLLISION = 0x2168;// 车辆撞车报警事件(对应结构体ALARM_VEHICEL_COLLISION_EVENT_INFO)
+    public static final int DH_ALARM_VEHICLE_CONFIRM = 0x2169;// 车辆上传信息事件(对应结构体ALARM_VEHICEL_CONFIRM_INFO)
+    public static final int DH_ALARM_VEHICLE_LARGE_ANGLE = 0x2170;// 车载摄像头大角度扭转事件(对应结构体ALARM_VEHICEL_LARGE_ANGLE)
+    public static final int DH_ALARM_TALKING_INVITE = 0x2171;// 设备请求对方发起对讲事件(对应结构体ALARM_TALKING_INVITE_INFO)
+    public static final int DH_ALARM_ALARM_EX2 = 0x2175;// 本地报警事件(对应结构体 ALARM_ALARM_INFO_EX2,对DH_ALARM_ALARM_EX升级)
+    public static final int DH_ALARM_VIDEO_TIMING = 0x2176;// 视频定时检测事件(对应结构体ALARM_VIDEO_TIMING)
+    public static final int DH_ALARM_COMM_PORT = 0x2177;// 串口事件(对应结构体ALARM_COMM_PORT_EVENT_INFO)
+    public static final int DH_ALARM_AUDIO_ANOMALY = 0x2178;// 音频异常事件(对应结构体ALARM_AUDIO_ANOMALY)
+    public static final int DH_ALARM_AUDIO_MUTATION = 0x2179;// 声强突变事件(对应结构体ALARM_AUDIO_MUTATION)
+    public static final int DH_EVENT_TYREINFO = 0x2180;// 轮胎信息上报事件(对应结构体EVENT_TYRE_INFO)
+    public static final int DH_ALARM_POWER_ABNORMAL = 0x2181;// 冗余电源异常报警(对应结构体ALARM_POWER_ABNORMAL_INFO)
+    public static final int DH_EVENT_REGISTER_OFF = 0x2182;// 车载设备主动下线事件(对应结构体 EVENT_REGISTER_OFF_INFO)
+    public static final int DH_ALARM_NO_DISK = 0x2183;// 无硬盘报警(对应结构体ALARM_NO_DISK_INFO)
+    public static final int DH_ALARM_FALLING = 0x2184;// 跌落事件报警(对应结构体ALARM_FALLING_INFO)
+    public static final int DH_ALARM_PROTECTIVE_CAPSULE = 0x2185;// 防护舱事件(对应结构体ALARM_PROTECTIVE_CAPSULE_INFO)
+    public static final int DH_ALARM_NO_RESPONSE = 0x2186;// 呼叫未应答警报(对应结构体ALARM_NO_RESPONSE_INFO)
+    public static final int DH_ALARM_CONFIG_ENABLE_CHANGE = 0x2187;// 配置使能改变上报事件(对应结构体 ALARM_CONFIG_ENABLE_CHANGE_INFO)
+    public static final int DH_EVENT_CROSSLINE_DETECTION = 0x2188;// 警戒线事件( 对应结构体 ALARM_EVENT_CROSSLINE_INFO )
+    public static final int DH_EVENT_CROSSREGION_DETECTION = 0x2189;// 警戒区事件( 对应结构体 ALARM_EVENT_CROSSREGION_INFO )
+    public static final int DH_EVENT_LEFT_DETECTION = 0x218a;// 物品遗留事件( 对应结构体 ALARM_EVENT_LEFT_INFO )
+    public static final int DH_EVENT_FACE_DETECTION = 0x218b;// 人脸检测事件( 对应结构体 ALARM_EVENT_FACE_INFO ) 
+    public static final int DH_ALARM_IPC = 0x218c;// IPC报警,IPC通过DVR或NVR上报的本地报警(对应结构体 ALARM_IPC_INFO)
+    public static final int DH_EVENT_TAKENAWAYDETECTION = 0x218d;// 物品搬移事件(对应结构体 ALARM_TAKENAWAY_DETECTION_INFO)
+    public static final int DH_EVENT_VIDEOABNORMALDETECTION = 0x218e;// 视频异常事件(对应结构体 ALARM_VIDEOABNORMAL_DETECTION_INFO)
+    public static final int DH_EVENT_MOTIONDETECT = 0x218f;// 视频移动侦测事件(对应结构体 ALARM_MOTIONDETECT_INFO)
+    public static final int DH_ALARM_PIR = 0x2190;// PIR警报(对应BYTE*, pBuf长度dwBufLen)
+    public static final int DH_ALARM_STORAGE_HOT_PLUG = 0x2191;// 存储热插拔事件(对应结构体 ALARM_STORAGE_HOT_PLUG_INFO)
+    public static final int DH_ALARM_FLOW_RATE = 0x2192;// 流量使用情况事件(对应结构体 ALARM_FLOW_RATE_INFO)
+    public static final int DH_ALARM_MOVEDETECTION = 0x2193;// 移动事件(对应ALARM_MOVE_DETECTION_INFO)
+    public static final int DH_ALARM_WANDERDETECTION = 0x2194;// 徘徊事件(对应ALARM_WANDERDETECTION_INFO)
+    public static final int DH_ALARM_CROSSFENCEDETECTION = 0x2195;// 翻越围栏事件(对应ALARM_CROSSFENCEDETECTION_INFO)
+    public static final int DH_ALARM_PARKINGDETECTION = 0x2196;// 非法停车事件(对应ALARM_PARKINGDETECTION_INFO)
+    public static final int DH_ALARM_RIOTERDETECTION = 0x2197;// 人员聚集事件(对应ALARM_RIOTERDETECTION_INFO)
+    public static final int DH_CONFIG_RESULT_EVENT_EX = 0x3000;
+    ;// 修改配置的返回码;返回结构见DEV_SET_RESULT
+    public static final int DH_REBOOT_EVENT_EX = 0x3001;
+    ;// 设备重启事件;如果未发送重启命令,当前修改的配置不会立即生效
+    public static final int DH_AUTO_TALK_START_EX = 0x3002;
+    ;// 设备主动邀请开始语音对讲
+    public static final int DH_AUTO_TALK_STOP_EX = 0x3003;
+    ;// 设备主动停止语音对讲
+    public static final int DH_CONFIG_CHANGE_EX = 0x3004;
+    ;// 设备配置发生改变
+    public static final int DH_IPSEARCH_EVENT_EX = 0x3005;
+    ;// IP搜索事件, 返回字符串格式如下:DevName::Manufacturer::MAC::IP::Port::DevType::POEPort::SubMask::GateWay&&DevName::Manufacturer::MAC::IP::Port::DevType::POEPort::SubMask::GateWay &&…
+    public static final int DH_AUTO_RECONNECT_FAILD = 0x3006;
+    ;// 自动重连失败事件
+    public static final int DH_REALPLAY_FAILD_EVENT = 0x3007;
+    ;// 监视失败事件,返回结构体DEV_PLAY_RESULT
+    public static final int DH_PLAYBACK_FAILD_EVENT = 0x3008;
+    ;// 回放失败事件,返回结构体DEV_PLAY_RESULT
+    public static final int DH_IVS_TRAFFIC_REALFLOWINFO = 0x3009;
+    ;// 交通实时流量信息事件ALARM_IVS_TRAFFIC_REALFLOW_INFO
+    public static final int DH_DEVICE_ABORT_EVENT = 0x300a;
+    ;// 客户端被踢出, 对应结构体 DEV_CLIENT_ABORT_INFO
+    public static final int DH_TALK_FAILD_EVENT = 0x300b;
+    ;// 请求语音对讲失败, 对应结构体 DEV_TALK_RESULT
+    public static final int DH_START_LISTEN_FINISH_EVENT = 0x300c;
+    ;// 订阅事件接口完成异步通知事件, 信息为NULL
+    public static final int DH_YUEQINGLIGHTING_STATE_EVENT = 0x300d;
+    ;// 平台统计灯光开关的时间事件, 对应的结构体 DEV_YUEQINGLIGHTING_STATE_INFO
+    public static final int DH_ALARM_VIOLATE_NO_FLY_TIME = 0x300e;
+    ;// 违反禁飞事件, 对应结构体 ALARM_VIOLATE_NO_FLY_TIME_INFO
+    public static final int DH_ALARM_BOX_ALARM = 0x300f;
+    ;// 报警盒通道的触发报警事件 (对应结构体 ALARM_BOX_ALARM_INFO )
+    public static final int DH_ALARM_SOSALERT = 0x3010;
+    ;// SOS求救报警(对应结构体ALARM_SOSALERT_INFO)
+    public static final int DH_ALARM_GYROABNORMALATTITUDE = 0x3011;
+    ;// 车辆的紧急制动、侧翻等状态导致的姿态异常进行报警(对应 ALARM_GYROABNORMALATTITUDE_INFO)
+    public static final int DH_ALARM_ALARMOUTPUT = 0x3012;
+    ;//输出通道状态改变事件(对应结构体ALARM_ALARMOUTPUT_INFO)
+    public static final int DH_ALARM_PSTNREPORTFAILURE = 0x3013;
+    ;//电话报警未接警事件(对应结构体ALARM_PSTNREPORTFAILURE_INFO)
+    public static final int DH_ALARM_STORAGE_NOT_EXIST = 0x3167;// 存储组不存在事件(对应结构体 ALARM_STORAGE_NOT_EXIST_INFO)
+    public static final int DH_ALARM_NET_ABORT = 0x3169;// 网络故障事件(对应结构体 ALARM_NETABORT_INFO)
+    public static final int DH_ALARM_IP_CONFLICT = 0x3170;// IP冲突事件(对应结构体 ALARM_IP_CONFLICT_INFO)
+    public static final int DH_ALARM_MAC_CONFLICT = 0x3171;// MAC冲突事件(对应结构体 ALARM_MAC_CONFLICT_INFO)
+    public static final int DH_ALARM_POWERFAULT = 0x3172;// 电源故障事件(对应结构体ALARM_POWERFAULT_INFO)
+    public static final int DH_ALARM_CHASSISINTRUDED = 0x3173;// 机箱入侵(防拆)报警事件(对应结构体ALARM_CHASSISINTRUDED_INFO)
+    public static final int DH_ALARM_ALARMEXTENDED = 0x3174;// 本地扩展报警事件(对应结构体 ALARM_ALARMEXTENDED_INFO)
+    public static final int DH_ALARM_ARMMODE_CHANGE_EVENT = 0x3175;// 布撤防状态变化事件(对应结构体ALARM_ARMMODE_CHANGE_INFO)
+    public static final int DH_ALARM_BYPASSMODE_CHANGE_EVENT = 0x3176;// 旁路状态变化事件(对应结构体ALARM_BYPASSMODE_CHANGE_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_NOT_CLOSE = 0x3177;// 门禁未关事件(对应结构体ALARM_ACCESS_CTL_NOT_CLOSE_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_BREAK_IN = 0x3178;// 闯入事件(对应结构体ALARM_ACCESS_CTL_BREAK_IN_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_REPEAT_ENTER = 0x3179;// 反复进入事件(对应结构体ALARM_ACCESS_CTL_REPEAT_ENTER_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_DURESS = 0x3180;// 胁迫卡刷卡事件(对应结构体ALARM_ACCESS_CTL_DURESS_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_EVENT = 0x3181;// 门禁事件(对应结构体 ALARM_ACCESS_CTL_EVENT_INFO)
+    public static final int DH_URGENCY_ALARM_EX2 = 0x3182;// 紧急报警EX2(对DH_URGENCY_ALARM_EX的升级,对应结构体ALARM_URGENCY_ALARM_EX2, 人为触发的紧急事件, 一般处理是联动外部通讯功能请求帮助
+    public static final int DH_ALARM_INPUT_SOURCE_SIGNAL = 0x3183;// 报警输入源信号事件(只要有输入就会产生该事件, 不论防区当前的模式,无法屏蔽, 对应 ALARM_INPUT_SOURCE_SIGNAL_INFO )
+    public static final int DH_ALARM_ANALOGALARM_EVENT = 0x3184;// 模拟量报警输入通道事件(对应结构体ALARM_ANALOGALARM_EVENT_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_STATUS = 0x3185;// 门禁状态事件(对应结构体ALARM_ACCESS_CTL_STATUS_INFO)
+    public static final int DH_ALARM_ACCESS_SNAP = 0x3186;// 门禁抓图事件(对应结构体ALARM_ACCESS_SNAP_INFO)
+    public static final int DH_ALARM_ALARMCLEAR = 0x3187;// 消警事件(对应结构体ALARM_ALARMCLEAR_INFO)
+    public static final int DH_ALARM_CIDEVENT = 0x3188;// CID事件(对应结构体 ALARM_CIDEVENT_INFO)
+    public static final int DH_ALARM_TALKING_HANGUP = 0x3189;// 设备主动挂断对讲事件(对应结构体ALARM_TALKING_HANGUP_INFO)
+    public static final int DH_ALARM_BANKCARDINSERT = 0x318a;// 银行卡插卡事件(对应结构体ALARM_BANKCARDINSERT_INFO)
+    public static final int DH_ALARM_RCEMERGENCY_CALL = 0x318b;// 紧急呼叫报警事件(对应结构体 ALARM_RCEMERGENCY_CALL_INFO)
+    public static final int DH_ALARM_OPENDOORGROUP = 0x318c;// 多人组合开门事件(对应结构体ALARM_OPEN_DOOR_GROUP_INFO)
+    public static final int DH_ALARM_FINGER_PRINT = 0x318d;// 获取指纹事件(对应结构体 ALARM_CAPTURE_FINGER_PRINT_INFO)
+    public static final int DH_ALARM_CARD_RECORD = 0x318e;// 卡号录像事件(对应结构体 ALARM_CARD_RECORD_INFO)
+    public static final int DH_ALARM_SUBSYSTEM_STATE_CHANGE = 0x318f;// 子系统状态改变事件(对应结构体ALARM_SUBSYSTEM_STATE_CHANGE_INFO)
+    public static final int DH_ALARM_BATTERYPOWER_EVENT = 0x3190;// 电池电量定时通知事件(对应结构体 ALARM_BATTERYPOWER_INFO )
+    public static final int DH_ALARM_BELLSTATUS_EVENT = 0x3191;// 警号状态事件(对应结构体ALARM_BELLSTATUS_INFO)
+    public static final int DH_ALARM_DEFENCE_STATE_CHANGE_EVENT = 0x3192;// 防区状态变化事件(对应结构体ALARM_DEFENCE_STATUS_CHANGE_INFO), 
+    ;// 定制需求,和布防撤防变化事件、旁路状态变化事件中的状态定义不同,
+    ;// 该状态通过CLIENT_QueryDevState()接口的DH_DEVSTATE_DEFENCE_STATE命令获取
+    public static final int DH_ALARM_TICKET_STATISTIC = 0x3193;// 车票统计信息事件(对应结构体 ALARM_TICKET_STATISTIC)
+    public static final int DH_ALARM_LOGIN_FAILIUR = 0x3194;// 登陆失败事件(对应结构体ALARM_LOGIN_FAILIUR_INFO)
+    public static final int DH_ALARM_MODULE_LOST = 0x3195;// 扩展模块掉线事件(对应结构体 ALARM_MODULE_LOST_INFO)
+    public static final int DH_ALARM_PSTN_BREAK_LINE = 0x3196;// PSTN掉线事件(对应结构体ALARM_PSTN_BREAK_LINE_INFO)
+    public static final int DH_ALARM_ANALOG_PULSE = 0x3197;// 模拟量报警事件(瞬时型事件), 特定传感器类型时才触发(对应结构体ALARM_ANALOGPULSE_INFO)
+    public static final int DH_ALARM_MISSION_CONFIRM = 0x3198;// 任务确认事件(对应结构体 ALARM_MISSION_CONFIRM_INFO)
+    public static final int DH_ALARM_DEVICE_MSG_NOTIFY = 0x3199;// 设备向平台发通知的事件(对应结构体 ALARM_DEVICE_MSG_NOTIFY_INFO)
+    public static final int DH_ALARM_VEHICLE_STANDING_OVER_TIME = 0x319A;// 停车超时报警(对应结构体 ALARM_VEHICLE_STANDING_OVER_TIME_INFO)
+    public static final int DH_ALARM_ENCLOSURE_ALARM = 0x319B;// 电子围栏事件(对应结构体 ALARM_ENCLOSURE_ALARM_INFO)
+    public static final int DH_ALARM_GUARD_DETECT = 0x319C;// 岗亭检测事件,此事件岗亭有第一个人时上报start事件,岗亭最后一个人离开时上报stop 事件(对应结构体ALARM_GUARD_DETECT_INFO)
+    public static final int DH_ALARM_GUARD_INFO_UPDATE = 0x319D;// 岗亭信息更新事件,只要岗亭有人员出入就上报(对应结构体ALARM_GUARD_UPDATE_INFO)  
+    public static final int DH_ALARM_NODE_ACTIVE = 0x319E;// 节点激活事件(对应结构体ALARM_NODE_ACTIVE_INFO)
+    public static final int DH_ALARM_VIDEO_STATIC = 0x319F;// 视频静态检测事件(对应结构体 ALARM_VIDEO_STATIC_INFO)
+    public static final int DH_ALARM_REGISTER_REONLINE = 0x31a0;// 主动注册设备重新登陆事件(对应结构体ALARM_REGISTER_REONLINE_INFO)
+    public static final int DH_ALARM_ISCSI_STATUS = 0x31a1;// ISCSI告警事件(对应结构体 ALARM_ISCSI_STATUS_INFO)
+    public static final int DH_ALARM_SCADA_DEV_ALARM = 0x31a2;// 检测采集设备报警事件(对应结构体 ALARM_SCADA_DEV_INFO)
+    public static final int DH_ALARM_AUXILIARY_DEV_STATE = 0x31a3;// 辅助设备状态(对应结构体ALARM_AUXILIARY_DEV_STATE)
+    public static final int DH_ALARM_PARKING_CARD = 0x31a4;// 停车刷卡事件(对应结构体ALARM_PARKING_CARD)
+    public static final int DH_ALARM_PROFILE_ALARM_TRANSMIT = 0x31a5;// 报警传输事件(对应结构体ALARM_PROFILE_ALARM_TRANSMIT_INFO)
+    public static final int DH_ALARM_VEHICLE_ACC = 0x31a6;// 车辆ACC报警事件(对应结构体 ALARM_VEHICLE_ACC_INFO)
+    public static final int DH_ALARM_TRAFFIC_SUSPICIOUSCAR = 0x31a7;// 嫌疑车辆上报事件(对应结构体 ALARM_TRAFFIC_SUSPICIOUSCAR_INFO)
+    public static final int DH_ALARM_ACCESS_LOCK_STATUS = 0x31a8;// 门锁状态事件(对应结构体 ALARM_ACCESS_LOCK_STATUS_INFO)
+    public static final int DH_ALARM_FINACE_SCHEME = 0x31a9;// 理财经办事件(对应结构体 ALARM_FINACE_SCHEME_INFO)
+    public static final int DH_ALARM_HEATIMG_TEMPER = 0x31aa;// 热成像测温点温度异常报警事件(对应结构体 ALARM_HEATIMG_TEMPER_INFO)
+    public static final int DH_ALARM_TALKING_IGNORE_INVITE = 0x31ab;// 设备取消对讲请求事件(对应结构体ALARM_TALKING_IGNORE_INVITE_INFO)
+    public static final int DH_ALARM_BUS_SHARP_TURN = 0x31ac;// 车辆急转事件(对应结构体ALARM_BUS_SHARP_TURN_INFO)
+    public static final int DH_ALARM_BUS_SCRAM = 0x31ad;// 车辆急停事件(对应结构体ALARM_BUS_SCRAM_INFO)
+    public static final int DH_ALARM_BUS_SHARP_ACCELERATE = 0x31ae;// 车辆急加速事件(对应结构体ALARM_BUS_SHARP_ACCELERATE_INFO)
+    public static final int DH_ALARM_BUS_SHARP_DECELERATE = 0x31af;// 车辆急减速事件(对应结构体ALARM_BUS_SHARP_DECELERATE_INFO)
+    public static final int DH_ALARM_ACCESS_CARD_OPERATE = 0x31b0;// 门禁卡数据操作事件(对应结构体ALARM_ACCESS_CARD_OPERATE_INFO)
+    public static final int DH_ALARM_POLICE_CHECK = 0x31b1;// 警员签到事件(对应结构体ALARM_POLICE_CHECK_INFO)
+    public static final int DH_ALARM_NET = 0x31b2;// 网络报警事件(对应结构体 ALARM_NET_INFO)
+    public static final int DH_ALARM_NEW_FILE = 0x31b3;// 新文件事件(对应结构体ALARM_NEW_FILE_INFO)
+    public static final int DH_ALARM_FIREWARNING = 0x31b5;// 热成像着火点事件 (对应结构体 ALARM_FIREWARNING_INFO)
+    public static final int DH_ALARM_RECORD_LOSS = 0x31b6;// 录像丢失事件,指硬盘完好的情况下,发生误删等原因引起(对应结构体ALARM_RECORD_LOSS_INFO)
+    public static final int DH_ALARM_VIDEO_FRAME_LOSS = 0x31b7;// 视频丢帧事件,比如网络不好或编码能力不足引起的丢帧(对应结构体ALARM_VIDEO_FRAME_LOSS_INFO)
+    public static final int DH_ALARM_RECORD_VOLUME_FAILURE = 0x31b8;// 由保存录像的磁盘卷发生异常,引起的录像异常(对应结构体 ALARM_RECORD_VOLUME_FAILURE_INFO)
+    public static final int DH_EVENT_SNAP_UPLOAD = 0x31b9;// 图上传完成事件(对应结构体EVENT_SNAP_UPLOAD_INFO)
+    public static final int DH_ALARM_AUDIO_DETECT = 0x31ba;// 音频检测事件(对应结构体 ALARM_AUDIO_DETECT )
+    public static final int DH_ALARM_UPLOADPIC_FAILCOUNT = 0x31bb;// 上传中盟失败数据个数(对应结构体ALARM_UPLOADPIC_FAILCOUNT_INFO)
+    public static final int DH_ALARM_POS_MANAGE = 0x31bc;// POS管理事件事件(对应结构体 ALARM_POS_MANAGE_INFO )
+    public static final int DH_ALARM_REMOTE_CTRL_STATUS = 0x31bd;// 无线遥控器状态事件(对应结构体 ALARM_REMOTE_CTRL_STATUS )
+    public static final int DH_ALARM_PASSENGER_CARD_CHECK = 0x31be;// 废弃, 乘客刷卡事件(对应结构体 ALARM_PASSENGER_CARD_CHECK )
+    public static final int DH_ALARM_SOUND = 0x31bf;// 声音事件(对应结构体 ALARM_SOUND )
+    public static final int DH_ALARM_LOCK_BREAK = 0x31c0;// 撬锁事件(对应结构体 ALARM_LOCK_BREAK_INFO )
+    public static final int DH_ALARM_HUMAN_INSIDE = 0x31c1;// 舱内有人事件(对应结构体ALARM_HUMAN_INSIDE_INFO)
+    public static final int DH_ALARM_HUMAN_TUMBLE_INSIDE = 0x31c2;// 舱内有人摔倒事件(对应结构体ALARM_HUMAN_TUMBLE_INSIDE_INFO)
+    public static final int DH_ALARM_DISABLE_LOCKIN = 0x31c3;// 闭锁进门按钮触发事件(对应ALARM_DISABLE_LOCKIN_INFO)
+    public static final int DH_ALARM_DISABLE_LOCKOUT = 0x31c4;// 闭锁出门按钮触发事件(对应结构体ALARM_DISABLE_LOCKOUT_INFO)
+    public static final int DH_ALARM_UPLOAD_PIC_FAILED = 0x31c5;// 违章数据上传失败事件(对应结构体 ALARM_UPLOAD_PIC_FAILED_INFO )
+    public static final int DH_ALARM_FLOW_METER = 0x31c6;// 水流量统计信息上报事件(对应结构体 ALARM_FLOW_METER_INFO)
+    public static final int DH_ALARM_WIFI_SEARCH = 0x31c7;// 获取到周围环境中WIFI设备上报事件(对应结构体 ALARM_WIFI_SEARCH_INFO)
+    public static final int DH_ALARM_WIRELESSDEV_LOWPOWER = 0x31C8;// 获取无线设备低电量上报事件(对应结构体ALARM_WIRELESSDEV_LOWPOWER_INFO)
+    public static final int DH_ALARM_PTZ_DIAGNOSES = 0x31c9;// 云台诊断事件(对应结构体ALARM_PTZ_DIAGNOSES_INFO)
+    public static final int DH_ALARM_FLASH_LIGHT_FAULT = 0x31ca;// 爆闪灯(闪光灯)报警事件 (对应结构体 ALARM_FLASH_LIGHT_FAULT_INFO)
+    public static final int DH_ALARM_STROBOSCOPIC_LIGTHT_FAULT = 0x31cb;// 频闪灯报警事件 (对应结构体 ALARM_STROBOSCOPIC_LIGTHT_FAULT_INFO)
+    public static final int DH_ALARM_HUMAM_NUMBER_STATISTIC = 0x31cc;// 人数量/客流量统计事件 (对应结构体 ALARM_HUMAN_NUMBER_STATISTIC_INFO)
+    public static final int DH_ALARM_VIDEOUNFOCUS = 0x31ce;// 视频虚焦报警(对应结构体 ALARM_VIDEOUNFOCUS_INFO)
+    public static final int DH_ALARM_BUF_DROP_FRAME = 0x31cd;// 录像缓冲区丢帧事件(对应结构体 ALARM_BUF_DROP_FRAME_INFO)
+    public static final int DH_ALARM_DOUBLE_DEV_VERSION_ABNORMAL = 0x31cf;// 双控设备主板与备板之间版本信息不一致异常事件 (对应结构体 ALARM_DOUBLE_DEV_VERSION_ABNORMAL_INFO)
+    public static final int DH_ALARM_DCSSWITCH = 0x31d0;// 主备切换事件 集群切换报警 (对应结构体 ALARM_DCSSWITCH_INFO)
+    public static final int DH_ALARM_RADAR_CONNECT_STATE = 0x31d1;// 雷达状态事件(对应结构体 ALARM_RADAR_CONNECT_STATE_INFO)
+    public static final int DH_ALARM_DEFENCE_ARMMODE_CHANGE = 0x31d2;// 防区布撤防状态改变事件(对应结构体 ALARM_DEFENCE_ARMMODECHANGE_INFO)
+    public static final int DH_ALARM_SUBSYSTEM_ARMMODE_CHANGE = 0x31d3;// 子系统布撤防状态改变事件(对应结构体 ALARM_SUBSYSTEM_ARMMODECHANGE_INFO)
+    public static final int DH_ALARM_RFID_INFO = 0x31d4;// 红外线检测信息事件(对应结构体 ALARM_RFID_INFO)
+    public static final int DH_ALARM_SMOKE_DETECTION = 0x31d5;// 烟雾报警事件(对应结构体 ALARM_SMOKE_DETECTION_INFO)
+    public static final int DH_ALARM_BETWEENRULE_TEMP_DIFF = 0x31d6;// 热成像规则间温差异常报警(对应结构体 ALARM_BETWEENRULE_DIFFTEMPER_INFO)
+    public static final int DH_ALARM_TRAFFIC_PIC_ANALYSE = 0x31d7;// 图片二次分析事件(对应 ALARM_PIC_ANALYSE_INFO)
+    public static final int DH_ALARM_HOTSPOT_WARNING = 0x31d8;// 热成像热点异常报警(对应结构体 ALARM_HOTSPOT_WARNING_INFO)
+    public static final int DH_ALARM_COLDSPOT_WARNING = 0x31d9;// 热成像冷点异常报警(对应结构体 ALARM_COLDSPOT_WARNING_INFO)
+    public static final int DH_ALARM_FIREWARNING_INFO = 0x31da;// 热成像火情报警信息上报(对应结构体 ALARM_FIREWARNING_INFO_DETAIL)
+    public static final int DH_ALARM_FACE_OVERHEATING = 0x31db;// 热成像人体发烧预警(对应结构体 ALARM_FACE_OVERHEATING_INFO)
+    public static final int DH_ALARM_SENSOR_ABNORMAL = 0x31dc;// 探测器异常报警(对应结构体 ALARM_SENSOR_ABNORMAL_INFO)
+    public static final int DH_ALARM_PATIENTDETECTION = 0x31de;// 监控病人活动状态报警事件(对应结构体 ALARM_PATIENTDETECTION_INFO)
+    public static final int DH_ALARM_RADAR_HIGH_SPEED = 0x31df;// 雷达监测超速报警事件 智能楼宇专用 (对应结构体 ALARM_RADAR_HIGH_SPEED_INFO)
+    public static final int DH_ALARM_POLLING_ALARM = 0x31e0;// 设备巡检报警事件 智能楼宇专用 (对应结构体 ALARM_POLLING_ALARM_INFO)
+    public static final int DH_ALARM_ITC_HWS000 = 0x31e1;// 虚点测速仪设备事件与报警(对应结构体 ALARM_ITC_HWS000)
+    public static final int DH_ALARM_TRAFFICSTROBESTATE = 0x31e2;// 道闸栏状态事件(对应结构体 ALARM_TRAFFICSTROBESTATE_INFO)
+    public static final int DH_ALARM_TELEPHONE_CHECK = 0x31e3;// 手机号码上报事件(对应结构体 ALARM_TELEPHONE_CHECK_INFO)
+    public static final int DH_ALARM_PASTE_DETECTION = 0x31e4;// 贴条事件(对应结构体 ALARM_PASTE_DETECTION_INFO )
+    public static final int DH_ALARM_SHOOTINGSCORERECOGNITION = 0x31e5;// 打靶像机事件(对应结构体 ALARM_PIC_SHOOTINGSCORERECOGNITION_INFO)
+    public static final int DH_ALARM_SWIPEOVERTIME = 0x31e6;// 超时未刷卡事件(对应结构体 ALARM_SWIPE_OVERTIME_INFO)
+    public static final int DH_ALARM_DRIVING_WITHOUTCARD = 0x31e7;// 无卡驾驶事件(对应结构体 ALARM_DRIVING_WITHOUTCARD_INFO)
+    public static final int DH_ALARM_TRAFFIC_PEDESTRIAN_RUN_REDLIGHT_DETECTION = 0x31e8;//闯红灯事件(对应结构体 ALARM_TRAFFIC_PEDESTRIAN_RUN_REDLIGHT_DETECTION_INFO ) 
+    public static final int DH_ALARM_FIGHTDETECTION = 0x31e9;// 斗殴事件(对应结构体 NET_ALARM_FIGHTDETECTION)
+    public static final int DH_ALARM_OIL_4G_OVERFLOW = 0x31ea;// 福山油田4G流量超过阈值的报警事件(对应结构体 NET_ALARM_OIL_4G_OVERFLOW_INFO)
+    public static final int DH_ALARM_ACCESSIDENTIFY = 0x31eb;// VTO人脸识别事件(对应结构体 NET_ALARM_ACCESSIDENTIFY)
+    public static final int DH_ALARM_POWER_SWITCHER_ALARM = 0x31ec;// 供电电源开关状态异常报警事件(对应结构体 DEV_ALRAM_POWERSWITCHER_INFO)
+    public static final int DH_ALARM_SCENNE_CHANGE_ALARM = 0x31ed;// 场景变更事件(对应结构体 ALARM_PIC_SCENECHANGE_INFO)原来是VideoAbnormalDetection的SceneChange子事件,因需求变更,改为单独事件类型
+    public static final int DH_ALARM_WIFI_VIRTUALINFO_SEARCH = 0x31ef;// WIFI虚拟身份上报事件(对应结构体 ALARM_WIFI_VIRTUALINFO_SEARCH_INFO)
+    public static final int DH_ALARM_TRAFFIC_OVERSPEED = 0x31f0;// 超速事件(对应结构体 ALARM_TRAFFIC_OVERSPEED_INFO)
+    public static final int DH_ALARM_TRAFFIC_UNDERSPEED = 0x31f1;// 欠速事件(对应结构体 ALARM_TRAFFIC_UNDERSPEED_INFO)
+    public static final int DH_ALARM_TRAFFIC_PEDESTRAIN = 0x31f2;// 交通行人事件(对应结构体 ALARM_TRAFFIC_PEDESTRAIN_INFO)
+    public static final int DH_ALARM_TRAFFIC_JAM = 0x31f3;// 交通拥堵事件(对应结构体 ALARM_TRAFFIC_JAM)
+    public static final int DH_ALARM_TRAFFIC_PARKING = 0x31f4;// 违章停车事件(对应结构体 ALARM_TRAFFIC_PARKING_INFO)
+    public static final int DH_ALARM_TRAFFIC_THROW = 0x31f5;// 交通抛洒物品事件(对应结构体 ALARM_TRAFFIC_THROW_INFO)
+    public static final int DH_ALARM_TRAFFIC_RETROGRADE = 0x31f6;// 逆行事件(对应结构体 ALARM_TRAFFIC_RETROGRADE_INFO)
+    public static final int DH_ALARM_VTSTATE_UPDATE = 0x31f7;// VTS状态上报(对应结构体 ALARM_VTSTATE_UPDATE_INFO)
+    public static final int DH_ALARM_CALL_NO_ANSWERED = 0x31f8;// 直连情况下,呼叫无答应事件(对应结构体 NET_ALARM_CALL_NO_ANSWERED_INFO)
+    public static final int DH_ALARM_USER_LOCK_EVENT = 0x31f9;// 用户锁定报警事件
+    public static final int DH_ALARM_RETROGRADE_DETECTION = 0x31fa;// 人员逆行事件(对应结构体 ALARM_RETROGRADE_DETECTION_INFO)
+    public static final int DH_ALARM_AIO_APP_CONFIG_EVENT = 0x31fb;// AIO报警事件(对应结构体 ALARM_AIO_APP_CONFIG_EVENT)
+    public static final int DH_ALARM_RAID_STATE_EX = 0x31fc;// RAID异常报警(对应结构体 ALARM_RAID_INFO_EX)
+    public static final int DH_ALARM_STORAGE_IPC_FAILURE = 0x31fd;// IPC的存储介质故障事件(IPC SD卡异常)(对应结构体 ALARM_STORAGE_IPC_FAILURE_INFO)
+    public static final int DH_ALARM_DEVICE_STAY = 0x31fe;// 静止报警,如果设备坐标在指定时间内没有变化,触发静止报警信息(对应的结构体 ALARM_DEVICE_STAY_INFO)
+    public static final int DH_ALARM_SUB_WAY_DOOR_STATE = 0x31ff;// 地铁车厢门状态(对应结构体 ALARM_SUB_WAY_DOOR_STATE_INFO)
+    public static final int DH_ALARM_SUB_WAY_PECE_SWITCH = 0x3200;// 地铁PECE柜门状态(对应结构体 ALARM_SUB_WAY_PECE_SWITCH_INFO)
+    public static final int DH_ALARM_SUB_WAY_FIRE_ALARM = 0x3201;// 地铁火警事件(对应结构体 ALARM_SUB_WAY_FIRE_ALARM_INFO)
+    public static final int DH_ALARM_SUB_WAY_EMER_HANDLE = 0x3202;// 地铁乘客紧急手柄动作(对应结构体 ALARM_SUB_WAY_EMER_HANDLE_INFO)
+    public static final int DH_ALARM_SUB_WAY_CAB_COVER = 0x3203;// 地铁司机室盖板状态(对应结构体 ALARM_SUB_WAY_CAB_COVER_INFO)
+    public static final int DH_ALARM_SUB_WAY_DERA_OBST = 0x3204;// 地铁检测到障碍物或脱轨(对应结构体 ALARM_SUB_WAY_DERA_OBST_INFO)
+    public static final int DH_ALARM_SUB_WAY_PECU_CALL = 0x3205;// 地铁客室报警器状态(对应结构体 ALARM_SUB_WAY_PECU_CALL_INFO)
+    public static final int DH_ALARM_BOX = 0x3206;// 报警盒子报警事件 (对应结构体 ALARM_BOX_INFO)
+    public static final int DH_ALARM_DOOR_CLOSEDMANUALLY = 0x3207;// 人为关门事件(对应结构体 ALARM_DOOR_CLOSEDMANUALLY_INFO)
+    public static final int DH_ALARM_DOOR_NOTCLOSED_LONGTIME = 0x3208;// 门超长时间未关报警事件(对应结构体 ALARM_DOOR_NOTCLOSED_LONGTIME_INFO)
+    public static final int DH_ALARM_UNDER_VOLTAGE = 0x3209;// 电压低于9V, 电源欠压报警, 视频流以红色OSD图标叠加形式报警 (对应结构体 ALARM_UNDER_VOLTAGE_INFO ) 
+    public static final int DH_ALARM_OVER_VOLTAGE = 0x320a;// 电压高于19V, 电源过压报警, 视频流以红色OSD图标叠加形式报警 (对应结构体 ALARM_OVER_VOLTAGE_INFO ) 
+    public static final int DH_ALARM_CUT_LINE = 0x320b;// 剪断报警(对应结构体ALARM_CUT_LINE_INFO)
+    public static final int DH_ALARM_VIDEOMOTION_EVENT = 0x320c;// 动检事件(对应结构体 ALARM_VIDEOMOTION_EVENT_INFO)
+    public static final int DH_ALARM_WIDE_VIEW_REGION_EVENT = 0x320d;// WideViewRegions事件(对应结构体 ALARM_WIDE_VIEW_REGION_EVENT_INFO) 二监项目定制事件。A平台发该事件到球机,将该事件转发给B平台
+    public static final int DH_ALARM_FIBRE_OPTIC_ABORT = 0x320e;// 断纤报警(对应结构体 ALARM_FIBRE_OPTIC_ABORT)
+    public static final int DH_ALARM_TAIL_DETECTION = 0x320f;// 尾随事件(对应结构体 ALARM_TAIL_DETECTION_INFO)
+    public static final int DH_ALARM_BITRATES_OVERLIMIT = 0x3210;// 相机码流大于通道解码规格报警(对应结构体 ALARM_BITRATES_OVERLIMIT_INFO)
+    public static final int DH_ALARM_RECORD_CHANGED_EX = 0x3211;// 录像状态变化报警(对应结构体 ALARM_RECORD_CHANGED_INFO_EX)
+    public static final int DH_ALARM_HIGH_DECIBEL = 0x3212;// 声音高分贝检测报警(对应结构体 ALARM_HIGH_DECIBEL_INFO)
+    public static final int DH_ALARM_SHAKE_DETECTION = 0x3213;// 摇晃检测报警(对应结构体 ALARM_SHAKE_DETECTION_INFO)
+    public static final int DH_ALARM_TUMBLE_DETECTION = 0x3214;// 倒地报警事件(对应结构体 ALARM_TUMBLE_DETECTION_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_MALICIOUS = 0x3215;// 恶意开门事件(对应结构体 ALARM_ACCESS_CTL_MALICIOUS)
+    public static final int DH_ALARM_ACCESS_CTL_USERID_REGISTER = 0x3216;// 用户已注册事件(对应结构体 ALARM_ACCESS_CTL_USERID_REGISTER)
+    public static final int DH_ALARM_ACCESS_CTL_REVERSELOCK = 0x3217;// 锁体状态信息变化事件(对应结构体 ALARM_ACCESS_CTL_REVERSELOCK)
+    public static final int DH_ALARM_ACCESS_CTL_USERID_DELETE = 0x3218;// 删除用户事件(对应结构体 ALARM_ACCESS_CTL_USERID_DELETE)
+    public static final int DH_ALARM_ACCESS_DOOR_BELL = 0x3219;// 响铃事件(对应结构体 ALARM_ACCESS_DOOR_BELL_INFO)
+    public static final int DH_ALARM_ACCESS_FACTORY_RESET = 0x321a;// 门锁恢复出厂(对应结构体 ALARM_ACCESS_FACTORY_RESET)
+    public static final int DH_ALARM_POLICE_RECORD_PROGRESS = 0x321b;// MPT录像导入NVR的进度事件(对应结构体 ALARM_POLICE_RECORD_PROGRESS_INFO)
+    public static final int DH_ALARM_POLICE_PLUGIN = 0x321c;// MPT接入拔出设备事件(对应结构体 ALARM_POLICE_PLUGIN_INFO)
+    public static final int DH_ALARM_GPS_NOT_ALIGNED = 0x321d;// GPS未定位报警(对应结构体 ALARM_GPS_NOT_ALIGNED_INFO)
+    public static final int DH_ALARM_WIRELESS_NOT_CONNECTED = 0x321e;// 网络未连接报警(包括wifi,3G/4G)(对应结构体 ALARM_WIRELESS_NOT_CONNECTED_INFO)
+    public static final int DH_ALARM_CABINET = 0x321f;// 云柜设备发送的物品存放单号信息实时上报事件(对应结构体 ALARM_CABINET_INFO)
+    public static final int DH_SWITCH_SCREEN = 0x3220;// 切换屏幕事件
+    public static final int DH_ALARM_NEAR_DISTANCE_DETECTION = 0x3221;// 近距离接触报警(对应结构体ALARM_NEAR_DISTANCE_INFO)
+    public static final int DH_ALARM_MAN_STAND_DETECTION = 0x3222;// 立体视觉站立报警(对应结构体ALARM_MAN_STAND_INFO)
+    public static final int DH_ALARM_MAN_NUM_DETECTION = 0x3223;// 立体视觉区域内人数统计报警(对应结构体ALARM_MAN_NUM_INFO)
+    public static final int DH_MCS_GENERAL_CAPACITY_LOW = 0x3224;// 微云常规容量事件(对应结构体ALARM_MCS_GENERAL_CAPACITY_LOW_INFO)
+    public static final int DH_MCS_DATA_NODE_OFFLINE = 0x3225;// 微云存储节点下线事件(对应结构体ALARM_MCS_DATA_NODE_OFFLINE_INFO)
+    public static final int DH_MCS_DISK_OFFLINE = 0x3226;// 微云磁盘下线事件(对应结构体ALARM_MCS_DISK_OFFLINE_INFO)
+    public static final int DH_MCS_DISK_SLOW = 0x3227;// 微云磁盘变慢事件(对应结构体ALARM_MCS_DISK_SLOW_INFO)
+    public static final int DH_MCS_DISK_BROKEN = 0x3228;// 微云磁盘损坏事件(对应结构体ALARM_MCS_DISK_BROKEN_INFO)
+    public static final int DH_MCS_DISK_UNKNOW_ERROR = 0x3229;// 微云磁盘未知错误事件(对应结构体ALARM_MCS_DISK_UNKNOW_ERROR_INFO)
+    public static final int DH_MCS_METADATA_SERVER_ABNORMAL = 0x322a;// 微云元数据服务器异常事件(对应结构体ALARM_MCS_METADATA_SERVER_ABNORMAL_INFO)
+    public static final int DH_MCS_CATALOG_SERVER_ABNORMAL = 0x322b;// 微云目录服务器异常事件(对应结构体ALARM_MCS_CATALOG_SERVER_ABNORMAL_INFO)
+    public static final int DH_MCS_GENERAL_CAPACITY_RESUME = 0x322c;// 微云常规容量恢复事件(对应结构体ALARM_MCS_GENERAL_CAPACITY_RESUME_INFO)
+    public static final int DH_MCS_DATA_NODE_ONLINE = 0x322d;// 微云存储节点上线事件(对应结构体ALARM_MCS_DATA_NODE_ONLINE_INFO)
+    public static final int DH_MCS_DISK_ONLINE = 0x322e;// 微云磁盘上线事件(对应结构体ALARM_MCS_DISK_ONLINE_INFO)
+    public static final int DH_MCS_METADATA_SLAVE_ONLINE = 0x322f;// 微云元数据备机上线事件(对应结构体ALARM_MCS_METADATA_SLAVE_ONLINE_INFO)
+    public static final int DH_MCS_CATALOG_SERVER_ONLINE = 0x3230;// 微云目录服务器上线事件(对应结构体ALARM_MCS_CATALOG_SERVER_ONLINE_INFO)
+    public static final int DH_ALARM_OFFLINE_LOGSYNC = 0x3231;// 同步离线日志事件(对应结构体 ALARM_OFFLINE_LOGSYNC_INFO)
+    public static final int DH_ALARM_UPGRADE_STATE = 0x3232;// 设备升级状态事件(对应结构体 ALARM_UPGRADE_STATE)
+    public static final int DH_ALARM_LABELINFO = 0x3233;// IPC新增(2017.4),RFID标签信息采集事件(对应结构体 ALARM_LABELINFO)
+    public static final int DH_ALARM_TIRED_PHYSIOLOGICAL = 0x3234;// 生理疲劳事件(对应结构体 ALARM_TIRED_PHYSIOLOGICAL)
+    public static final int DH_ALARM_CALLING_WHEN_DRIVING = 0x3235;// 开车打电话事件(对应结构体 ALARM_CALLING_WHEN_DRIVING)
+    public static final int DH_ALARM_TRAFFIC_DRIVER_SMOKING = 0x3236;// 开车抽烟事件(对应结构体 ALARM_TRAFFIC_DRIVER_SMOKING)
+    public static final int DH_ALARM_TRAFFIC_DRIVER_LOWER_HEAD = 0x3237;// 开车低头报警事件(对应结构体 ALARM_TRAFFIC_DRIVER_LOWER_HEAD)
+    public static final int DH_ALARM_TRAFFIC_DRIVER_LOOK_AROUND = 0x3238;// 开车左顾右盼报警事件(对应结构体 ALARM_TRAFFIC_DRIVER_LOOK_AROUND)
+    public static final int DH_ALARM_TRAFFIC_DRIVER_LEAVE_POST = 0x3239;// 开车离岗报警事件(对应结构体 ALARM_TRAFFIC_DRIVER_LEAVE_POST)
+    public static final int DH_ALARM_TRAFFIC_DRIVER_YAWN = 0x323a;// 开车打哈欠报警事件(对应结构体 ALARM_TRAFFIC_DRIVER_YAWN)
+    public static final int DH_ALARM_AUTO_INSPECTION = 0x323b;// 设备自检事件(对应结构体 ALARM_AUTO_INSPECTION) 
+    public static final int DH_ALARM_TRAFFIC_VEHICLE_POSITION = 0x323c;// 车辆位置事件(对应的结构体 ALARM_TRAFFIC_VEHICLE_POSITION)
+    public static final int DH_ALARM_FACE_VERIFICATION_ACCESS_SNAP = 0x323d;// 人脸认证开门抓图信息事件(对应结构体 ALARM_FACE_VERIFICATION_ACCESS_SNAP_INFO) 
+    public static final int DH_ALARM_VIDEOBLIND = 0x323e;// 视频遮挡事件(对应结构体ALARM_VIDEO_BLIND_INFO)
+    public static final int DH_ALARM_DRIVER_NOTCONFIRM = 0x323f;// 司机未按确认按钮报警事件(对应结构体ALARM_DRIVER_NOTCONFIRM_INFO)
+    public static final int DH_ALARM_FACEINFO_COLLECT = 0x3240;// 人脸信息录入事件(对应ALARM_FACEINFO_COLLECT_INFO)
+    public static final int DH_ALARM_HIGH_SPEED = 0x3241;// 车辆超速报警事件(对应ALARM_HIGH_SPEED_INFO)
+    public static final int DH_ALARM_VIDEO_LOSS = 0x3242;// 视频丢失事件(对应 ALARM_VIDEO_LOSS_INFO)
+    public static final int DH_ALARM_MPTBASE_CONNECT = 0x3243;// 设备与底座连接状态事件(对应结构体ALARM_MPTBASE_CONNECT) 
+    public static final int DH_ALARM_LATEST_SHUTDOWN = 0x3244;// 设备上次关机状态事件(对应结构体 ALARM_LATEST_SHUTDOWN)
+
+    ;// ------------- 机器人专用事件 ------------------
+    public static final int DH_ALARM_ROBOT_COLLISION = 0x3245;// 机器人碰撞事件(对应结构体 ALARM_ROBOT_COLLISION)
+    public static final int DH_ALARM_ROBOT_FALLENDOWN = 0x3246;// 机器人跌倒事件(对应结构体 ALARM_ROBOT_FALLENDOWN)
+    public static final int DH_ALARM_ROBOT_UNRECOGNIZED2DCODE = 0x3247;// 机器人二位码识别失败事件(对应结构体 ALARM_ROBOT_UNRECOGNIZED2DCODE) 
+    public static final int DH_ALARM_ROBOT_WRONG2DCODE = 0x3248;// 机器人错误二位码事件(对应的结构体 ALARM_ROBOT_WRONG2DCODE)
+    public static final int DH_ALARM_ROBOT_ROADBLOCKED = 0x3249;// 机器人路障事件(对应结构体 ALARM_ROBOT_ROADBLOCKED) 
+    public static final int DH_ALARM_ROBOT_FAULT = 0x324a;// 机器人故障事件(对应结构体 ALARM_ROBOT_FAULT)
+    public static final int DH_ALARM_ROBOT_OVERLOAD = 0x324b;// 机器人超载事件(对应结构体 ALARM_ROBOT_OVERLOAD)
+    public static final int DH_ALARM_ROBOT_YAWEXCEPTION = 0x324c;// 机器人意外偏航事件(对应 ALARM_ROBOT_YAWEXCEPTION)
+    public static final int DH_ALARM_ROBOT_LOADTIMEOUT = 0x324e;// 机器人意外偏航事件(对应 ALARM_ROBOT_LOADTIMEOUT )
+    public static final int DH_ALARM_ROBOT_UNLOADTIMEOUT = 0x324f;// 机器人上料异常事件(对应 ALARM_ROBOT_UNLOADTIMEOUT)
+    public static final int DH_ALARM_ROBOT_MAPUPDATE = 0x3250;// 机器人卸料异常事件(对应 ALARM_ROBOT_MAPUPDATE)
+    public static final int DH_ALARM_ROBOT_BRAKE = 0x3252;// 机器人紧急刹车事件(对应 ALARM_ROBOT_BRAKE)
+    public static final int DH_ALARM_ROBOT_MANUAL_INTERVENTION = 0x3253;// 机器人人工干预事件(对应 ALARM_ROBOT_MANUAL_INTERVENTION)
+//机器人事件预留至0x3299
+// -----------------------------------------------
+
+
+    public static final int DH_ALARM_VIDEO_TALK_PATH = 0x324d;// 对讲路径事件(对应结构体 ALARM_VIDEO_TALK_PATH_INFO)
+    public static final int DH_ALARM_CGIRECORD = 0x3251;// cgi触发手动录像(对应 ALARM_CGIRECORD)
+    public static final int DH_ALARM_BATTERY_TEMPERATURE = 0x3254;// 电池温度上报事件(对应 ALARM_BATTERY_TEMPERATURE_INFO)
+    public static final int DH_ALARM_TIRE_PRESSURE = 0x3255;// 胎压上报事件(对应 ALARM_TIRE_PRESSURE_INFO )
+    public static final int DH_ALARM_VTH_CONFLICT = 0x3256;// 房间号冲突冲突上报事件(对应 ALARM_VTH_CONFLICT_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_BLACKLIST = 0x3257;// 门禁黑名单刷卡事件上报(对应 ALARM_ACCESS_CTL_BLACKLIST)
+    public static final int DH_ALARM_ROBOT_EMERGENCY_STOP = 0x3258;// 机器人紧急停车按钮事件(对应 ALARM_ROBOT_EMERFEBCY_STOP)
+    public static final int DH_ALARM_ROBOT_PATH_PLAN_FAILED = 0x3259;// 机器人路径规划失败事件(对应 ALARM_ROBOT_PATH_PLAN_FAILED)
+    public static final int DH_ALARM_ROBOT_LOCAL_MAP_UPLOAD = 0x325a;// 机器人本地地图上传事件(对应 ALARM_ROBOT_LOCAL_MAP_UPLOAD)
+    public static final int DH_ALARM_ROBOT_SHELF_ERROR = 0x325b;// 机器人货架异常事件(对应 ALARM_ROBOT_SHELF_ERROR)
+    public static final int DH_ALARM_ROBOT_SENSOR_ERROR = 0x325c;// 机器人传感器异常事件(对应 ALARM_ROBOT_SENSOR_ERROR)
+    public static final int DH_ALARM_ROBOT_DERAILMENT = 0x325d;// 机器人脱轨事件(对应 ALARM_ROBOT_DERAILMENT)
+    public static final int DH_ALARM_ROBOT_MOTOR_UNINIT = 0x325e;// 机器人电机抱闸未使能事件(对应 ALARM_ROBOT_MOTOR_UNINIT)
+    public static final int DH_ALARM_ROBOT_PREVENT_FALLING = 0x325f;// 机器人防跌落事件(对应 ALARM_ROBOT_PREVENT_FALLING)
+    public static final int DH_ALARM_ROBOT_LOCATION_EXCEPTION = 0x3260;// 机器人定位异常事件(对应 ALARM_ROBOT_LOCATION_EXCEPTION )
+    public static final int DH_ALARM_ROBOT_UPGRADER_FAIL = 0x3261;// 机器人升级失败反馈(对应 ALARM_ROBOT_UPGRADER_FAIL)
+    public static final int DH_ALARM_ROBOT_CHARGING_ERROR = 0x3262;// 机器人充电异常事件(对应 ALARM_ROBOT_CHARGING_ERROR)
+    public static final int DH_ALARM_ROBOT_STATIONCHARGING_ERROR = 0x3263;// 机器人充电桩充电异常事件(对应 ALARM_ROBOT_STATIONCHARGING_ERROR)
+    public static final int DH_ALARM_ROBOT_CAMERA_ABNORMAL = 0x3264;// 机器人相机异常事件(对应 ALARM_ROBOT_CAMERA_ABNORMAL)
+    public static final int DH_ALARM_ROBOT_ERROR_REPORT = 0x3265;// 机器人故障信息(对应 ALARM_ROBOT_ERROR_REPORT)
+
+    ;//新增事件从0x3300开始
+    public static final int DH_ALARM_USERLOCK = 0x3300;// 用户锁定报警事件(对应 ALARM_USERLOCK_INFO)
+    public static final int DH_ALARM_DOWNLOAD_REMOTE_FILE = 0x3301;// 下载远程文件事件(对应ALARM_DOWNLOAD_REMOTE_FILE_INFO)
+    public static final int DH_ALARM_NASFILE_STATUS = 0x3302;// NAS文件状态事件(对应结构体 ALARM_NASFILE_STATUS_INFO) 
+    public static final int DH_ALARM_TALKING_CANCELCALL = 0x3303;// 设备呼叫中取消呼叫事件(对应结构体 ALARM_TALKING_CANCELCALL_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_UNAUTHORIZED_MALICIOUSWIP = 0x3304;// 未授权卡恶意刷卡事件(对应结构体 ALARM_ACCESS_CTL_UNAUTHORIZED_MALICIOUSWIP)已废弃,复用DH_ALARM_ACCESS_CTL_MALICIOUS事件
+    public static final int DH_ALARM_CROWD_DETECTION = 0x3305;// 人群密度检测事件(对应结构体 ALARM_CROWD_DETECTION_INFO)
+    public static final int DH_ALARM_FACE_FEATURE_ABSTRACT = 0x3306;// 人脸特征向量重建结果事件(对应结构体ALARM_FACE_FEATURE_ABSTRACT_INFO)
+    public static final int DH_ALARM_RECORD_SCHEDULE_CHANGE = 0x3307;// 录像计划改变事件(对应结构体 ALARM_RECORD_SCHEDULE_CHANGE_INFO)
+    public static final int DH_ALARM_NTP_CHANGE = 0x3308;// NTP配置修改事件(对应结构体 ALARM_NTP_CHANGE_INFO)
+    public static final int DH_ALARM_HDD_TEMPERATUREALARM = 0x3309;// 硬盘温度报警事件(对应结构体 ALARM_HDD_TEMPERATUREALARM_INFO)
+    public static final int DH_ALARM_HDD_HEALTHALARM = 0x330a;// 硬盘健康状况报警事件(对应结构体 ALARM_HDD_HEALTHALARM_INFO)
+    public static final int DH_ALARM_HDD_SHAKEALARM = 0x330b;// 硬盘震动报警事件(对应结构体 ALARM_HDD_SHAKEALARM_INFO)
+    public static final int DH_ALARM_PATROL_STATUS = 0x330c;// 未巡更报警事件(对应结构体 ALARM_PATROL_STATUS_INFO) 
+    public static final int DH_ALARM_CITIZEN_PICTURE_COMPARE = 0x330d;// 人证比对事件(对应结构体 ALARM_CITIZEN_PICTURE_COMPARE_INFO)
+
+    /*  start  西欧报警主机事件,预留64个事件*/
+    public static final int DH_ALARM_AREAARM_MODECHANGE = 0x330e;// 区域防区模式改变(对应结构体ALARM_AREAARM_MODECHANGE_INFO)
+    public static final int DH_ALARM_ZONEMODULELOST = 0x330f;// 防区模块掉线(对应结构提ALARM_ZONEMODULE_LOST_INFO)
+    public static final int DH_ALARM_AREAALARM = 0x3310;// 区域报警(对应结构体ALARM_AREAALARM_INFO)
+    public static final int DH_ALARM_ZONEOPEN = 0x3311;// 防区打开(对应结构体ALARM_ZONEOPEN_INFO)
+    public static final int DH_ALARM_SYSTEMTAMPER = 0x3312;// 防拆事件(对应结构体ALARM_SYSTEMTAMPER_INFO)
+    public static final int DH_ALARM_ALARMREGION_MAXEVENTID = 0x334d;// 西欧报警主机新品事件最大值,这个值不可用
+    /*  end  西欧报警主机事件,预留64个事件*/
+    public static final int DH_ALARM_DISTANCE_DETECTION = 0x334e;// 异常间距事件(对应 ALARM_DISTANCE_DETECTION_INFO)
+    public static final int DH_ALARM_STAY_DETECTION = 0x334f;// 停留事件(对应 ALARM_STAY_DETECTION_INFO)
+    public static final int DH_ALARM_DEVBOARDHOTPLUG = 0x3350;// 双控设备热插拔事件(对应结构体 ALARM_DEVBOARDHOTPLUG_INFO)
+    public static final int DH_ALARM_HOMESCENE_CHANGE = 0x3351;// 美的地产场景变化事件(对应结构体ALARM_HOMESCENE_CHANGE_INFO)
+    public static final int DH_ALARM_STORAGE_WORKDIRECTORY_SWITCH = 0x3352;// 当前工作目录切换事件(对应结构体 ALARM_STORAGE_WORKDIRECTORY_SWITCH_INFO)
+    public static final int DH_ALARM_TRAFFIC_LINKAGEALARM = 0x3353;// 各种违章事件联动报警输出事件(对应结构体 ALARM_TRAFFIC_LINKAGEALARM_INFO)
+    public static final int DH_ALARM_COAXIAL_ALARM_LOCAL = 0x3354;// 同轴开关量报警事件(对应结构体 ALARM_COAXIAL_ALARM_LOCAL_INFO)
+    public static final int DH_ALARM_NAS_FILE_REMOVE_STATUS = 0x3355;// NAS文件删除状态事件(对应结构体 ALARM_NAS_FILE_REMOVE_STATUS_INFO)
+    public static final int DH_ALARM_NAS_APK_INSTALL_REQUEST = 0x3356;// 请求设备安装APK事件(对应结构体 ALARM_NAS_APK_INSTALL_REQUEST_INFO)
+    public static final int DH_ALARM_NAS_APK_INSTALL_STATUS = 0x3357;// 设备安装APK状态事件(对应结构体 ALARM__APK_INSTALL_STATUS_INFO)
+    public static final int DH_ALARM_FILE_COMPRESS_STATUS = 0x3358;// 文件压缩解压状态事件(对应结构体 ALARM_FILE_COMPRESSS_STATUS_INFO)
+    public static final int DH_ALARM_STRANGER_ALARM = 0x3359;// 陌生人报警事件(对应结构体 ALARM_STRANGER_ALARM_INFO)
+    public static final int DH_ALARM_QR_CODE_CHECK = 0x335a;// 二维码上报事件(对应结构体 ALARM_QR_CODE_CHECK_INFO)
+    public static final int DH_ALARM_ACCESS_CTL_LOCK_MODE = 0x335b;// 门锁模式事件(对应结构体 ALARM_ACCESS_CTL_LOCK_MODE_INFO)
+    public static final int DH_ALARM_LOCK_ROOM_NUM_BIND = 0x335c;// 房间号绑定事件(对应结构体 ALARM_LOCK_ROOM_NUM_BIND_INFO)
+
+
+    /*  start  雷球联动事件,预留64个事件*/
+    public static final int DH_ALARM_RADAR_REGIONDETECTION = 0x3370;// 雷达区域检测事件(对应结构体 ALARM_RADAR_REGIONDETECTION_INFO)
+    public static final int DH_ALARM_RADAR_MAXEVENTID = 0x3433;// 雷达新品事件最大值,这个值不可用
+/*  end  雷球联动事件,预留64个事件*/
+
+    public static final int DH_ALARM_JABLOTRON_ALARM = 0x3434;// 客户报警产品(对应结构体 ALARM_JABLOTRONALARM_INFO)
+    public static final int DH_ALARM_FACE_RECOGNITION = 0x3435;// 人脸识别事件(对应结构体 ALARM_FACE_RECOGNITION_INFO) 
+
+
+    public static final int EVENT_IVS_ALL = 0x00000001;// 订阅所有事件
+    public static final int EVENT_IVS_CROSSLINEDETECTION = 0x00000002;// 警戒线事件(对应 DEV_EVENT_CROSSLINE_INFO)
+    public static final int EVENT_IVS_CROSSREGIONDETECTION = 0x00000003;// 警戒区事件(对应 DEV_EVENT_CROSSREGION_INFO)
+    public static final int EVENT_IVS_PASTEDETECTION = 0x00000004;// 贴条事件(对应 DEV_EVENT_PASTE_INFO)
+    public static final int EVENT_IVS_LEFTDETECTION = 0x00000005;// 物品遗留事件(对应 DEV_EVENT_LEFT_INFO)
+    public static final int EVENT_IVS_STAYDETECTION = 0x00000006;// 停留事件(对应 DEV_EVENT_STAY_INFO)
+    public static final int EVENT_IVS_WANDERDETECTION = 0x00000007;// 徘徊事件(对应 DEV_EVENT_WANDER_INFO)
+    public static final int EVENT_IVS_PRESERVATION = 0x00000008;// 物品保全事件(对应 DEV_EVENT_PRESERVATION_INFO)
+    public static final int EVENT_IVS_MOVEDETECTION = 0x00000009;// 移动事件(对应 DEV_EVENT_MOVE_INFO)
+    public static final int EVENT_IVS_TAILDETECTION = 0x0000000A;// 尾随事件(对应 DEV_EVENT_TAIL_INFO)
+    public static final int EVENT_IVS_RIOTERDETECTION = 0x0000000B;// 聚众事件(对应 DEV_EVENT_RIOTERL_INFO)
+    public static final int EVENT_IVS_FIREDETECTION = 0x0000000C;// 火警事件(对应 DEV_EVENT_FIRE_INFO)
+    public static final int EVENT_IVS_SMOKEDETECTION = 0x0000000D;// 烟雾报警事件(对应 DEV_EVENT_SMOKE_INFO)
+    public static final int EVENT_IVS_FIGHTDETECTION = 0x0000000E;// 斗殴事件(对应 DEV_EVENT_FIGHT_INFO)
+    public static final int EVENT_IVS_FLOWSTAT = 0x0000000F;// 流量统计事件(对应 DEV_EVENT_FLOWSTAT_INFO)
+    public static final int EVENT_IVS_NUMBERSTAT = 0x00000010;// 数量统计事件(对应 DEV_EVENT_NUMBERSTAT_INFO)
+    public static final int EVENT_IVS_CAMERACOVERDDETECTION = 0x00000011;// 摄像头覆盖事件(保留)
+    public static final int EVENT_IVS_CAMERAMOVEDDETECTION = 0x00000012;// 摄像头移动事件(保留)
+    public static final int EVENT_IVS_VIDEOABNORMALDETECTION = 0x00000013;// 视频异常事件(对应 DEV_EVENT_VIDEOABNORMALDETECTION_INFO)
+    public static final int EVENT_IVS_VIDEOBADDETECTION = 0x00000014;// 视频损坏事件(保留)
+    public static final int EVENT_IVS_TRAFFICCONTROL = 0x00000015;// 交通管制事件(对应 DEV_EVENT_TRAFFICCONTROL_INFO)
+    public static final int EVENT_IVS_TRAFFICACCIDENT = 0x00000016;// 交通事故事件(对应 DEV_EVENT_TRAFFICACCIDENT_INFO)
+    public static final int EVENT_IVS_TRAFFICJUNCTION = 0x00000017;// 交通路口事件----老规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO)
+    public static final int EVENT_IVS_TRAFFICGATE = 0x00000018;// 交通卡口事件----老规则(对应 DEV_EVENT_TRAFFICGATE_INFO)
+    public static final int EVENT_TRAFFICSNAPSHOT = 0x00000019;// 交通抓拍事件(对应 DEV_EVENT_TRAFFICSNAPSHOT_INFO)
+    public static final int EVENT_IVS_FACEDETECT = 0x0000001A;// 人脸检测事件 (对应 DEV_EVENT_FACEDETECT_INFO)
+    public static final int EVENT_IVS_TRAFFICJAM = 0x0000001B;// 交通拥堵事件(对应 DEV_EVENT_TRAFFICJAM_INFO)
+    public static final int EVENT_IVS_TRAFFIC_NONMOTORINMOTORROUTE = 0x0000001C;// 非机动车占机动车车道事件(对应 DEV_EVENT_TRAFFIC_NONMOTORINMOTORROUTE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_RUNREDLIGHT = 0x00000100;// 交通违章-闯红灯事件(对应 DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO)
+    public static final int EVENT_IVS_TRAFFIC_OVERLINE = 0x00000101;// 交通违章-压车道线事件(对应 DEV_EVENT_TRAFFIC_OVERLINE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_RETROGRADE = 0x00000102;// 交通违章-逆行事件(对应 DEV_EVENT_TRAFFIC_RETROGRADE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TURNLEFT = 0x00000103;// 交通违章-违章左转(对应 DEV_EVENT_TRAFFIC_TURNLEFT_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TURNRIGHT = 0x00000104;// 交通违章-违章右转(对应 DEV_EVENT_TRAFFIC_TURNRIGHT_INFO)
+    public static final int EVENT_IVS_TRAFFIC_UTURN = 0x00000105;// 交通违章-违章掉头(对应 DEV_EVENT_TRAFFIC_UTURN_INFO)
+    public static final int EVENT_IVS_TRAFFIC_OVERSPEED = 0x00000106;// 交通违章-超速(对应 DEV_EVENT_TRAFFIC_OVERSPEED_INFO)
+    public static final int EVENT_IVS_TRAFFIC_UNDERSPEED = 0x00000107;// 交通违章-低速(对应 DEV_EVENT_TRAFFIC_UNDERSPEED_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PARKING = 0x00000108;// 交通违章-违章停车(对应 DEV_EVENT_TRAFFIC_PARKING_INFO)
+    public static final int EVENT_IVS_TRAFFIC_WRONGROUTE = 0x00000109;// 交通违章-不按车道行驶(对应 DEV_EVENT_TRAFFIC_WRONGROUTE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_CROSSLANE = 0x0000010A;// 交通违章-违章变道(对应 DEV_EVENT_TRAFFIC_CROSSLANE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_OVERYELLOWLINE = 0x0000010B;// 交通违章-压黄线 (对应 DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_DRIVINGONSHOULDER = 0x0000010C;// 交通违章-路肩行驶事件(对应 DEV_EVENT_TRAFFIC_DRIVINGONSHOULDER_INFO)
+    public static final int EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE = 0x0000010E;// 交通违章-黄牌车占道事件(对应 DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY = 0x0000010F;// 交通违章-礼让行人/斑马线行人优先事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO)
+    public static final int EVENT_IVS_CROSSFENCEDETECTION = 0x0000011F;// 翻越围栏事件(对应 DEV_EVENT_CROSSFENCEDETECTION_INFO)
+    public static final int EVENT_IVS_ELECTROSPARKDETECTION = 0x00000110;// 电火花事件(对应 DEV_EVENT_ELECTROSPARK_INFO)
+    public static final int EVENT_IVS_TRAFFIC_NOPASSING = 0x00000111;// 交通违章-禁止通行事件(对应 DEV_EVENT_TRAFFIC_NOPASSING_INFO)
+    public static final int EVENT_IVS_ABNORMALRUNDETECTION = 0x00000112;// 异常奔跑事件(对应 DEV_EVENT_ABNORMALRUNDETECTION_INFO)
+    public static final int EVENT_IVS_RETROGRADEDETECTION = 0x00000113;// 人员逆行事件(对应 DEV_EVENT_RETROGRADEDETECTION_INFO)
+    public static final int EVENT_IVS_INREGIONDETECTION = 0x00000114;// 区域内检测事件(对应 DEV_EVENT_INREGIONDETECTION_INFO)
+    public static final int EVENT_IVS_TAKENAWAYDETECTION = 0x00000115;// 物品搬移事件(对应 DEV_EVENT_TAKENAWAYDETECTION_INFO)
+    public static final int EVENT_IVS_PARKINGDETECTION = 0x00000116;// 非法停车事件(对应 DEV_EVENT_PARKINGDETECTION_INFO)
+    public static final int EVENT_IVS_FACERECOGNITION = 0x00000117;// 人脸识别事件(对应 DEV_EVENT_FACERECOGNITION_INFO)
+    public static final int EVENT_IVS_TRAFFIC_MANUALSNAP = 0x00000118;// 交通手动抓拍事件(对应 DEV_EVENT_TRAFFIC_MANUALSNAP_INFO)
+    public static final int EVENT_IVS_TRAFFIC_FLOWSTATE = 0x00000119;// 交通流量统计事件(对应 DEV_EVENT_TRAFFIC_FLOW_STATE)
+    public static final int EVENT_IVS_TRAFFIC_STAY = 0x0000011A;// 交通滞留事件(对应 DEV_EVENT_TRAFFIC_STAY_INFO)
+    public static final int EVENT_IVS_TRAFFIC_VEHICLEINROUTE = 0x0000011B;// 有车占道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO)
+    public static final int EVENT_ALARM_MOTIONDETECT = 0x0000011C;// 视频移动侦测事件(对应 DEV_EVENT_ALARM_INFO)
+    public static final int EVENT_ALARM_LOCALALARM = 0x0000011D;// 外部报警事件(对应 DEV_EVENT_ALARM_INFO)
+    public static final int EVENT_IVS_PRISONERRISEDETECTION = 0x0000011E;// 看守所囚犯起身事件(对应 DEV_EVENT_PRISONERRISEDETECTION_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TOLLGATE = 0x00000120;// 交通违章-卡口事件----新规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO)
+    public static final int EVENT_IVS_DENSITYDETECTION = 0x00000121;// 人员密集度检测(对应 DEV_EVENT_DENSITYDETECTION_INFO)
+    public static final int EVENT_IVS_VIDEODIAGNOSIS = 0x00000122;// 视频诊断结果事件(对应 NET_VIDEODIAGNOSIS_COMMON_INFO 和 NET_REAL_DIAGNOSIS_RESULT)
+    public static final int EVENT_IVS_QUEUEDETECTION = 0x00000123;// 排队检测报警事件(对应 DEV_EVENT_QUEUEDETECTION_INFO)
+    public static final int EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE = 0x00000124;// 占用公交车道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_BACKING = 0x00000125;// 违章倒车事件(对应 DEV_EVENT_IVS_TRAFFIC_BACKING_INFO)
+    public static final int EVENT_IVS_AUDIO_ABNORMALDETECTION = 0x00000126;// 声音异常检测(对应 DEV_EVENT_IVS_AUDIO_ABNORMALDETECTION_INFO)
+    public static final int EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT = 0x00000127;// 交通违章-闯黄灯事件(对应 DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO)
+    public static final int EVENT_IVS_CLIMBDETECTION = 0x00000128;// 攀高检测事件(对应 DEV_EVENT_IVS_CLIMB_INFO)
+    public static final int EVENT_IVS_LEAVEDETECTION = 0x00000129;// 离岗检测事件(对应 DEV_EVENT_IVS_LEAVE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX = 0x0000012A;// 黄网格线抓拍事件(对应 DEV_EVENT_TRAFFIC_PARKINGONYELLOWBOX_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING = 0x0000012B;// 车位有车事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING = 0x0000012C;// 车位无车事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PEDESTRAIN = 0x0000012D;// 交通行人事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAIN_INFO)
+    public static final int EVENT_IVS_TRAFFIC_THROW = 0x0000012E;// 交通抛洒物品事件(对应 DEV_EVENT_TRAFFIC_THROW_INFO)
+    public static final int EVENT_IVS_TRAFFIC_IDLE = 0x0000012F;// 交通空闲事件(对应 DEV_EVENT_TRAFFIC_IDLE_INFO)
+    public static final int EVENT_ALARM_VEHICLEACC = 0x00000130;// 车载ACC断电报警事件(对应 DEV_EVENT_ALARM_VEHICLEACC_INFO)
+    public static final int EVENT_ALARM_VEHICLE_TURNOVER = 0x00000131;// 车辆侧翻报警事件(对应 DEV_EVENT_VEHICEL_ALARM_INFO)
+    public static final int EVENT_ALARM_VEHICLE_COLLISION = 0x00000132;// 车辆撞车报警事件(对应 DEV_EVENT_VEHICEL_ALARM_INFO)
+    public static final int EVENT_ALARM_VEHICLE_LARGE_ANGLE = 0x00000133;// 车载摄像头大角度扭转事件
+    public static final int EVENT_IVS_TRAFFIC_PARKINGSPACEOVERLINE = 0x00000134;// 车位压线事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACEOVERLINE_INFO)
+    public static final int EVENT_IVS_MULTISCENESWITCH = 0x00000135;// 多场景切换事件(对应 DEV_EVENT_IVS_MULTI_SCENE_SWICH_INFO)
+    public static final int EVENT_IVS_TRAFFIC_RESTRICTED_PLATE = 0x00000136;// 受限车牌事件(对应 DEV_EVENT_TRAFFIC_RESTRICTED_PLATE)
+    public static final int EVENT_IVS_TRAFFIC_OVERSTOPLINE = 0x00000137;// 压停止线事件(对应 DEV_EVENT_TRAFFIC_OVERSTOPLINE)
+    public static final int EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT = 0x00000138;// 交通未系安全带事件(对应 DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT)
+    public static final int EVENT_IVS_TRAFFIC_DRIVER_SMOKING = 0x00000139;// 驾驶员抽烟事件(对应 DEV_EVENT_TRAFFIC_DRIVER_SMOKING)
+    public static final int EVENT_IVS_TRAFFIC_DRIVER_CALLING = 0x0000013A;// 驾驶员打电话事件(对应 DEV_EVENT_TRAFFIC_DRIVER_CALLING)
+    public static final int EVENT_IVS_TRAFFIC_PEDESTRAINRUNREDLIGHT = 0x0000013B;// 行人闯红灯事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAINRUNREDLIGHT_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PASSNOTINORDER = 0x0000013C;// 未按规定依次通行(对应 DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO)
+    public static final int EVENT_IVS_OBJECT_DETECTION = 0x00000141;// 物体特征检测事件
+    public static final int EVENT_ALARM_ANALOGALARM = 0x00000150;// 模拟量报警通道的报警事件(对应DEV_EVENT_ALARM_ANALOGALRM_INFO)
+    public static final int EVENT_IVS_CROSSLINEDETECTION_EX = 0x00000151;// 警戒线扩展事件
+    public static final int EVENT_ALARM_COMMON = 0x00000152;// 普通录像
+    public static final int EVENT_ALARM_VIDEOBLIND = 0x00000153;// 视频遮挡事件(对应 DEV_EVENT_ALARM_VIDEOBLIND)
+    public static final int EVENT_ALARM_VIDEOLOSS = 0x00000154;// 视频丢失事件
+    public static final int EVENT_IVS_GETOUTBEDDETECTION = 0x00000155;// 看守所下床事件(对应 DEV_EVENT_GETOUTBED_INFO)
+    public static final int EVENT_IVS_PATROLDETECTION = 0x00000156;// 巡逻检测事件(对应 DEV_EVENT_PATROL_INFO)
+    public static final int EVENT_IVS_ONDUTYDETECTION = 0x00000157;// 站岗检测事件(对应 DEV_EVENT_ONDUTY_INFO)
+    public static final int EVENT_IVS_NOANSWERCALL = 0x00000158;// 门口机呼叫未响应事件
+    public static final int EVENT_IVS_STORAGENOTEXIST = 0x00000159;// 存储组不存在事件
+    public static final int EVENT_IVS_STORAGELOWSPACE = 0x0000015A;// 硬盘空间低报警事件
+    public static final int EVENT_IVS_STORAGEFAILURE = 0x0000015B;// 存储错误事件
+    public static final int EVENT_IVS_PROFILEALARMTRANSMIT = 0x0000015C;// 报警传输事件
+    public static final int EVENT_IVS_VIDEOSTATIC = 0x0000015D;// 视频静态检测事件(对应 DEV_EVENT_ALARM_VIDEOSTATIC_INFO)
+    public static final int EVENT_IVS_VIDEOTIMING = 0x0000015E;// 视频定时检测事件(对应 DEV_EVENT_ALARM_VIDEOTIMING_INFO)
+    public static final int EVENT_IVS_HEATMAP = 0x0000015F;// 热度图(对应 CFG_IVS_HEATMAP_INFO)
+    public static final int EVENT_IVS_CITIZENIDCARD = 0x00000160;// 身份证信息读取事件(对应 DEV_EVENT_ALARM_CITIZENIDCARD_INFO)
+    public static final int EVENT_IVS_PICINFO = 0x00000161;// 图片信息事件(对应 DEV_EVENT_ALARM_PIC_INFO)
+    public static final int EVENT_IVS_NETPLAYCHECK = 0x00000162;// 上网登记事件(对应 DEV_EVENT_ALARM_NETPLAYCHECK_INFO)
+    public static final int EVENT_IVS_TRAFFIC_JAM_FORBID_INTO = 0x00000163;// 车辆拥堵禁入事件(对应 DEV_EVENT_ALARM_JAMFORBIDINTO_INFO)
+    public static final int EVENT_IVS_SNAPBYTIME = 0x00000164;// 定时抓图事件(对应DEV_EVENT_SNAPBYTIME)
+    public static final int EVENT_IVS_PTZ_PRESET = 0x00000165;// 云台转动到预置点事件(对应 DEV_EVENT_ALARM_PTZ_PRESET_INFO)
+    public static final int EVENT_IVS_RFID_INFO = 0x00000166;// 红外线检测信息事件(对应 DEV_EVENT_ALARM_RFID_INFO)
+    public static final int EVENT_IVS_STANDUPDETECTION = 0x00000167;// 人起立检测事件
+    public static final int EVENT_IVS_QSYTRAFFICCARWEIGHT = 0x00000168;// 交通卡口称重事件(对应 DEV_EVENT_QSYTRAFFICCARWEIGHT_INFO)
+    public static final int EVENT_IVS_TRAFFIC_COMPAREPLATE = 0x00000169;// 卡口前后车牌合成事件(对应DEV_EVENT_TRAFFIC_COMPAREPLATE_INFO)
+    public static final int EVENT_IVS_SHOOTINGSCORERECOGNITION = 0x0000016A;// 打靶像机事件(对应 DEV_EVENT_SHOOTING_SCORE_RECOGNITION_INFO,CFG_IVS_SHOOTINGSCORERECOGNITION_INFO)
+    public static final int EVENT_IVS_TRAFFIC_FCC = 0x0000016B;// 加油站提枪、挂枪事件(对应 DEV_EVENT_TRAFFIC_FCC_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TRANSFINITE = 0x0000016C;// 违章超限抓图上报事件,绍兴科技治超(对应 DEV_EVENT_TRAFFIC_TRANSFINITE_INFO)
+    public static final int EVENT_IVS_SCENE_CHANGE = 0x0000016D;// 场景变更事件(对应 DEV_ALRAM_SCENECHANGE_INFO,CFG_VIDEOABNORMALDETECTION_INFO)
+    public static final int EVENT_IVS_LETRACK = 0x0000016E;// 简单跟踪事件(暂未有具体事件)
+    public static final int EVENT_IVS_OBJECT_ACTION = 0x0000016F;// 物体检测事件(暂未有具体事件)
+    public static final int EVENT_IVS_TRAFFIC_ANALYSE_PRESNAP = 0x00000170;// 预分析抓拍图片事件(对应 DEV_EVENT_TRAFFIC_ANALYSE_PRESNAP_INFO)
+    public static final int EVENT_ALARM_EQSTATE = 0x00000171;// 智能插座电量状态上报(暂未有具体事件)
+    public static final int EVENT_IVS_ALARM_IPC = 0x00000172;// DVR/NVR设备上的IPC报警(暂未有具体事件)
+    public static final int EVENT_IVS_POS_RECORD = 0x00000173;// POS录像查询事件(暂未有具体事件)
+    public static final int EVENT_IVS_NEAR_DISTANCE_DETECTION = 0x00000174;// 近距离接触事件(对应 DEV_EVENT_NEAR_DISTANCE_DETECTION_INFO)
+    public static final int EVENT_IVS_OBJECTSTRUCTLIZE_PERSON = 0x00000175;// 行人特征检测事件(对应 DEV_EVENT_OBJECTSTRUCTLIZE_PERSON_INFO)
+    public static final int EVENT_IVS_OBJECTSTRUCTLIZE_NONMOTOR = 0x00000176;// 非机动车特征检测事件(对应 DEV_EVENT_OBJECTSTRUCTLIZE_NONMOTOR_INFO)
+    public static final int EVENT_IVS_TUMBLE_DETECTION = 0x00000177;// 倒地报警事件(对应 DEV_EVENT_TUMBLE_DETECTION_INFO)
+    public static final int EVENT_IVS_TRAFFIC_ALL = 0x000001FF;// 所有以traffic开头的事件,目前指的是
+    ;// EVENT_IVS_TRAFFICCONTROL -> EVENT_TRAFFICSNAPSHOT
+    ;// EVENT_IVS_TRAFFIC_RUNREDLIGHT -> EVENT_IVS_TRAFFIC_UNDERSPEED
+    public static final int EVENT_IVS_VIDEOANALYSE = 0x00000200;// 所有智能分析事件
+    public static final int EVENT_IVS_LINKSD = 0x00000201;// LinkSD事件(对应 DEV_EVENT_LINK_SD)
+    public static final int EVENT_IVS_VEHICLEANALYSE = 0x00000202;// 车辆特征检测分析(对应DEV_EVENT_VEHICLEANALYSE)
+    public static final int EVENT_IVS_FLOWRATE = 0x00000203;// 流量使用情况事件(对应 DEV_EVENT_FLOWRATE_INFO)
+    public static final int EVENT_IVS_ACCESS_CTL = 0x00000204;// 门禁事件 (对应 DEV_EVENT_ACCESS_CTL_INFO)
+    public static final int EVENT_IVS_SNAPMANUAL = 0x00000205;// SnapManual事件(对应 DEV_EVENT_SNAPMANUAL)
+    public static final int EVENT_IVS_TRAFFIC_ELETAGINFO = 0x00000206;// RFID电子车牌标签事件(对应 DEV_EVENT_TRAFFIC_ELETAGINFO_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TIREDPHYSIOLOGICAL = 0x00000207;// 生理疲劳驾驶事件(对应 DEV_EVENT_TIREDPHYSIOLOGICAL_INFO)
+    public static final int EVENT_IVS_TRAFFIC_BUSSHARPTURN = 0x00000208;// 车辆急转报警事件(对应DEV_EVENT_BUSSHARPTURN_INFO)
+    public static final int EVENT_IVS_CITIZEN_PICTURE_COMPARE = 0x00000209;// 人证比对事件(对应 DEV_EVENT_CITIZEN_PICTURE_COMPARE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TIREDLOWERHEAD = 0x0000020A;// 开车低头报警事件(对应DEV_EVENT_TIREDLOWERHEAD_INFO)
+    public static final int EVENT_IVS_TRAFFIC_DRIVERLOOKAROUND = 0x0000020B;// 开车左顾右盼报警事件(对应DEV_EVENT_DRIVERLOOKAROUND_INFO)
+    public static final int EVENT_IVS_TRAFFIC_DRIVERLEAVEPOST = 0x0000020C;// 开车离岗报警事件(对应DEV_EVENT_DRIVERLEAVEPOST_INFO)
+    public static final int EVENT_IVS_MAN_STAND_DETECTION = 0x0000020D;// 立体视觉站立事件(对应DEV_EVENT_MANSTAND_DETECTION_INFO)
+    public static final int EVENT_IVS_MAN_NUM_DETECTION = 0x0000020E;// 立体视觉区域内人数统计事件(对应DEV_EVENT_MANNUM_DETECTION_INFO)
+    public static final int EVENT_IVS_STEREO_NUMBERSTAT = 0x0000020F;// 客流量统计事件(暂未有具体事件)
+    public static final int EVENT_IVS_TRAFFIC_DRIVERYAWN = 0x00000210;// 开车打哈欠事件(对应DEV_EVENT_DRIVERYAWN_INFO)
+    public static final int EVENT_IVS_NUMBERSTAT_PLAN = 0x00000211;// 客流量统计计划(暂未有具体事件,球机使用,对应规则配置结构体 CFG_NUMBERSTAT_INFO)
+    public static final int EVENT_IVS_HEATMAP_PLAN = 0x00000212;// 热度图计划(暂未有具体事件,球机使用,对应规则配置结构体 CFG_IVS_HEATMAP_INFO)
+    public static final int EVENT_IVS_CALLNOANSWERED = 0x00000213;// 呼叫无答应事件
+    public static final int EVENT_IVS_IGNOREINVITE = 0x00000214;// 无视邀请事件
+    public static final int EVENT_IVS_HUMANTRAIT = 0x00000215;// 人体特征事件(对应 DEV_EVENT_HUMANTRAIT_INFO)
+    public static final int EVENT_ALARM_LE_HEADDETECTION = 0x00000216;// 乐橙人头检测事件,只用于订阅手机推送
+    public static final int EVENT_IVS_FACEANALYSIS = 0x00000217;// 人脸分析事件 (暂未有具体事件)
+    public static final int EVENT_IVS_TRAFFIC_TURNLEFTAFTERSTRAIGHT = 0x00000218;// 左转不礼让直行事件(对应 DEV_EVENT_TURNLEFTAFTERSTRAIGHT_INFO)
+    public static final int EVENT_IVS_TRAFFIC_BIGBENDSMALLTURN = 0x00000219;// 大弯小转事件(对应 DEV_EVENT_BIGBENDSMALLTURN_INFO)
+    public static final int EVENT_IVS_ROAD_CONSTRUCTION = 0x0000021A;// 道路施工监测事件(对应DEV_EVENT_ROAD_CONSTRUCTION_INFO)
+    public static final int EVENT_IVS_ROAD_BLOCK = 0x0000021B;// 路障检测事件(对应DEV_EVENT_ROAD_BLOCK_INFO)
+    public static final int EVENT_IVS_TRAFFIC_QUEUEJUMP = 0x0000021C;// 车辆加塞事件(对应 DEV_EVENT_TRAFFIC_QUEUEJUMP_INFO)
+    public static final int EVENT_IVS_VEHICLE_SUSPICIOUSCAR = 0x0000021D;// 嫌疑车辆事件(对应 DEV_EVENT_VEHICLE_SUSPICIOUSCAR_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TURNRIGHTAFTERSTRAIGHT = 0x0000021E;// 右转不礼让直行事件(对应 DEV_EVENT_TURNRIGHTAFTERSTRAIGHT_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TURNRIGHTAFTERPEOPLE = 0x0000021F;// 右转不礼让直行行人(对应 DEV_EVENT_TURNRIGHTAFTERPEOPLE_INFO)
+    public static final int EVENT_IVS_INSTALL_CARDREADER = 0x00000220;// 安装读卡器事件(对应 DEV_EVENT_INSTALL_CARDREADER_INFO)
+    public static final int EVENT_ALARM_YALE_DROPBOX_BADTOKEN = 0x00000221;// Yale token失效事件,只用于订阅手机推送
+    public static final int EVENT_IVS_ACC_OFF_SNAP = 0x00000222;// 车载设备断电前抓拍上传事件(对应 DEV_EVENT_ACC_OFF_SNAP_INFO)
+    public static final int EVENI_IVS_XRAY_DETECTION = 0x00000223; // X光检测事件 (对应 DEV_EVENT_XRAY_DETECTION_INFO)
+    public static final int EVENT_IVS_NOTCLEARCAR = 0x00000224; // 未清车告警(对应 DEV_EVENT_NOTCLEARCAR_INFO)
+    public static final int EVENT_IVS_SOSALEART = 0x00000225; // sos求救报警(对应 DEV_EVENT_SOSALEART_INFO)
+    public static final int EVENT_IVS_OVERLOAD = 0x00000226; // 超载抓图(对应 DEV_EVENT_OVERLOAD_INFO)
+    public static final int EVENT_IVS_NONWORKINGTIME = 0x00000227; // 非工作时间告警(对应 DEV_EVENT_NONWORKINGTIME_INFO)
+    public static final int EVENT_IVS_TRAFFIC_HIGH_BEAM = 0x00000228; // 远光灯违章事件(对应 DEV_EVENT_TRAFFIC_HIGH_BEAM_INFO)
+    public static final int EVENT_IVS_TRAFFIC_TRUCKFORBID = 0x00000229; // 禁止货车事件(对应 DEV_EVENT_TRAFFICTRUCKFORBID_INFO)
+    public static final int EVENT_IVS_DRIVINGWITHOUTCARD = 0x0000022A; // 无卡驾驶报警事件(对应 DEV_EVENT_DRIVINGWITHOUTCARD_INFO)
+    public static final int EVENT_IVS_HIGHSPEED = 0x0000022B; // 车辆超速报警事件(对应 DEV_EVENT_HIGHSPEED_INFO)
+    public static final int EVENT_IVS_CROWDDETECTION = 0x0000022C; // 人群密度检测事件(对应结构体 DEV_EVENT_CROWD_DETECTION_INFO)
+    public static final int EVENT_IVS_TRAFFIC_CARDISTANCESHORT = 0x0000022D; // 车间距过小报警事件(对应 DEV_EVENT_TRAFFIC_CARDISTANCESHORT_INFO)
+    public static final int EVENT_IVS_PEDESTRIAN_JUNCTION = 0x00000230; // 行人卡口事件(对应 DEV_EVENT_PEDESTRIAN_JUNCTION_INFO)
+    public static final int EVENT_IVS_VEHICLE_RECOGNITION = 0x00000231;// 车牌对比事件(中石化智慧加油站项目)(对应 DEV_EVENT_VEHICLE_RECOGNITION_INFO)
+    public static final int EVENT_IVS_PASS_CHANGE = 0x00000232; // 预置点图片变化事件 (对应 DEV_EVENT_PASS_CHANGE_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PARKING_SPACEDETECTION = 0x00000233; // 违停相机定制单球车位检测规则事件
+    public static final int EVENT_IVS_TRAFFIC_WAITINGAREA = 0x00000234; // 违章进入待行区事件(对应 DEV_EVENT_TRAFFIC_WAITINGAREA_INFO)
+    public static final int EVENT_IVS_TRAFFIC_BAN = 0x00000235; // 机动车违法禁令标识事件(对应 DEV_EVENT_TRAFFIC_BAN_INFO)
+    public static final int EVENT_IVS_POS_EXCHANGE = 0x00000236; // POS机交易事件(对应 DEV_EVENT_POS_EXCHANGE_INFO)
+    public static final int EVENT_IVS_STEREO_FIGHTDETECTION = 0x00000237;// 立体行为分析打架/剧烈运动检测规则(仅用于规则配置,对应事件 EVENT_IVS_FIGHTDETECTION)
+    public static final int EVENT_IVS_STEREO_DISTANCE_DETECTION = 0x00000238; // 立体行为分析间距异常/人员靠近检测(仅用于规则配置,对应事件)
+    public static final int EVENT_IVS_STEREO_STEREOFALLDETECTION = 0x00000239;// 立体行为分析跌倒检测规则(仅用于规则配置,对应事件 EVENT_IVS_TUMBLE_DETECTION)
+    public static final int EVENT_IVS_STEREO_STAYDETECTION = 0x0000023A;// 立体行为分析人员滞留检测规则(仅用于规则配置,对应事件 EVENT_IVS_STAYDETECTION)
+    public static final int EVENT_IVS_BANNER_DETECTION = 0x0000023B; // 拉横幅事件(对应 DEV_EVENT_BANNER_DETECTION_INFO)
+    public static final int EVENT_IVS_NORMAL_FIGHTDETECTION = 0x0000023C;// 普通打架事件(只用于普通打架规则, 事件采用EVENT_IVS_FIGHTDETECTION)
+    public static final int EVENT_IVS_ELEVATOR_ABNORMAL = 0x0000023D; // 电动扶梯运行异常事件 (对应DEV_EVENT_ELEVATOR_ABNORMAL_INFO)
+    public static final int EVENT_IVS_NONMOTORDETECT = 0x0000023E;// 非机动车检测 (对应结构体 DEV_EVENT_NONMOTORDETECT_INFO)
+    public static final int EVENT_IVS_VEHICLEDETECT = 0x0000023F;// 机动车检测 (只用于规则配置,事件采用EVENT_IVS_TRAFFICJUNCTION)
+    public static final int EVENT_IVS_TRAFFIC_PARKING_B = 0x00000240;// 交通违章-B类违章停车(对应 DEV_EVENT_TRAFFIC_PARKING_B_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PARKING_C = 0x00000241;// 交通违章-C类违章停车(对应 DEV_EVENT_TRAFFIC_PARKING_C_INFO)
+    public static final int EVENT_IVS_TRAFFIC_PARKING_D = 0x00000242;// 交通违章-D类违章停车(对应 DEV_EVENT_TRAFFIC_PARKING_D_INFO)
+    public static final int EVENT_IVSS_FACEATTRIBUTE = 0x00000243;// IVSS人脸检测事件 (暂未有具体事件)
+    public static final int EVENT_IVSS_FACECOMPARE = 0x00000244;// IVSS人脸识别事件 (暂未有具体事件)
+    public static final int EVENT_IVS_FIREWARNING = 0x00000245; // 火警事件(对应 DEV_EVENT_FIREWARNING_INFO)
+    public static final int EVENT_IVS_SHOPPRESENCE = 0x00000246;// 商铺占道经营事件(对应 DEV_EVENT_SHOPPRESENCE_INFO)
+    public static final int EVENT_IVS_WASTEDUMPED = 0x00000247;// 垃圾违章倾倒事件(对应 DEV_EVENT_WASTEDUMPED_INFO)
+    public static final int EVENT_IVS_SPILLEDMATERIAL_DETECTION = 0x00000248;// 抛洒物检测事件(对应 DEV_EVENT_SPILLEDMATERIAL_DETECTION_INFO)
+    public static final int EVENT_IVS_STEREO_MANNUM_DETECTION = 0x00000249; // 立体行为分析人数异常检测 (仅用于规则配置,对应事件 EVENT_IVS_MAN_NUM_DETECTION)
+    public static final int EVENT_IVS_DISTANCE_DETECTION = 0x0000024A; // 异常间距事件 (对应 DEV_EVENT_DISTANCE_DETECTION_INFO)
+    public static final int EVENT_IVS_TRAFFIC_NONMOTOR_OVERLOAD = 0x0000024B; // 非机动车超载事件 (对应 DEV_EVENT_TRAFFIC_NONMOTOR_OVERLOAD_INFO)
+    public static final int EVENT_IVS_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT = 0x0000024C; // 非机动车未戴安全帽事件 (对应 DEV_EVENT_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT_INFO)
+    public static final int EVENT_IVS_TRAFFIC_JAM_STOP_ON_ZEBRACROSSING = 0x0000024D; // 拥堵滞留斑马线事件 (对应 DEV_EVENT_TRAFFIC_JAM_STOP_ON_ZEBRACROSSING_INFO)
+    public static final int EVENT_IVS_FLOWBUSINESS = 0x0000024E; // 流动摊贩事件 (对应 DEV_EVENT_FLOWBUSINESS_INFO)
+    public static final int EVENT_IVS_CITY_MOTORPARKING = 0x0000024F; // 城市机动车违停事件 (对应 DEV_EVENT_CITY_MOTORPARKING_INFO)
+    public static final int EVENT_IVS_CITY_NONMOTORPARKING = 0x00000250; // 城市机非动车违停事件 (对应 DEV_EVENT_CITY_NONMOTORPARKING_INFO)
+    public static final int EVENT_IVS_LANEDEPARTURE_WARNNING = 0X00000251; // 车道偏移预警(对应 DEV_EVENT_LANEDEPARTURE_WARNNING_INFO)
+    public static final int EVENT_IVS_FORWARDCOLLISION_WARNNING = 0x00000252; // 前向碰撞预警(对应 DEV_EVENT_FORWARDCOLLISION_WARNNING_INFO)
+    public static final int EVENT_IVS_MATERIALSSTAY = 0x00000253; // 物料堆放事件(对应 DEV_EVENT_MATERIALSSTAY_INFO)
+    public static final int EVENT_IVS_TRAFFIC_NONMOTOR_HOLDUMBRELLA = 0x00000254; // 非机动车装载伞具(对应 DEV_EVENT_TRAFFIC_NONMOTOR_HOLDUMBRELLA_INFO)
+    public static final int EVENT_IVS_JABLOTRON_ALARM = 0x00000255; // 客户报警产品
+}

+ 1912 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaLibrary.java

@@ -0,0 +1,1912 @@
+package com.usoftchina.smartschool.device.dahua.lib;
+
+import com.sun.jna.Library;
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.ptr.IntByReference;
+import com.sun.jna.win32.StdCallLibrary;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+
+/**
+ * 基于jna调用大华动态链接库
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public interface DahuaLibrary extends Library {
+    /**
+     * 通用字符串长度4
+     */
+    int DH_COMMON_STRING_4 = 4;
+    /**
+     * 通用字符串长度8
+     */
+    int DH_COMMON_STRING_8 = 8;
+    /**
+     * 通用字符串长度16
+     */
+    int DH_COMMON_STRING_16 = 16;
+    /**
+     * 通用字符串长度32
+     */
+    int DH_COMMON_STRING_32 = 32;
+    /**
+     * 通用字符串长度64
+     */
+    int DH_COMMON_STRING_64 = 64;
+    /**
+     * 通用字符串长度128
+     */
+    int DH_COMMON_STRING_128 = 128;
+    /**
+     * 通用字符串长度256
+     */
+    int DH_COMMON_STRING_256 = 256;
+    /**
+     * 通用字符串长度512
+     */
+    int DH_COMMON_STRING_512 = 512;
+    /**
+     * 通用字符串长度1024
+     */
+    int DH_COMMON_STRING_1024 = 1024;
+    /**
+     * 通用字符串长度2048
+     */
+    int DH_COMMON_STRING_2048 = 2048;
+    /**
+     * 通用字符串长度8
+     */
+    int MAX_COMMON_STRING_8 = 8;
+    /**
+     * 通用字符串长度16
+     */
+    int MAX_COMMON_STRING_16 = 16;
+    /**
+     * 通用字符串长度32
+     */
+    int MAX_COMMON_STRING_32 = 32;
+    /**
+     * 通用字符串长度64
+     */
+    int MAX_COMMON_STRING_64 = 64;
+
+    /**
+     * 时间
+     */
+    @Structure.FieldOrder({"dwYear", "dwMonth", "dwDay", "dwHour", "dwMinute", "dwSecond"})
+    class NET_TIME extends Structure {
+        /**
+         * 年
+         */
+        public int dwYear;
+        /**
+         * 月
+         */
+        public int dwMonth;
+        /**
+         * 日
+         */
+        public int dwDay;
+        /**
+         * 时
+         */
+        public int dwHour;
+        /**
+         * 分
+         */
+        public int dwMinute;
+        /**
+         * 秒
+         */
+        public int dwSecond;
+
+        public NET_TIME() {
+        }
+
+        public NET_TIME(LocalDateTime time) {
+            this.dwYear = time.getYear();
+            this.dwMonth = time.getMonthValue();
+            this.dwDay = time.getDayOfMonth();
+            this.dwHour = time.getHour();
+            this.dwMinute = time.getMinute();
+            this.dwSecond = time.getSecond();
+        }
+
+        @Override
+        public String toString() {
+            return String.format("%02d-%02d-%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+        }
+
+        public LocalDateTime toDateTime() {
+            return LocalDateTime.of(dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+        }
+    }
+
+    /**
+     * 时间
+     */
+    @Structure.FieldOrder({"dwYear", "dwMonth", "dwDay", "dwHour", "dwMinute", "dwSecond", "dwMillisecond", "dwReserved"})
+    class NET_TIME_EX extends Structure {
+        /**
+         * 年
+         */
+        public int dwYear;
+        /**
+         * 月
+         */
+        public int dwMonth;
+        /**
+         * 日
+         */
+        public int dwDay;
+        /**
+         * 时
+         */
+        public int dwHour;
+        /**
+         * 分
+         */
+        public int dwMinute;
+        /**
+         * 秒
+         */
+        public int dwSecond;
+        /**
+         * 毫秒
+         */
+        public int dwMillisecond;
+
+        public byte[] dwReserved = new byte[2];
+
+        public NET_TIME_EX() {
+        }
+
+        @Override
+        public String toString() {
+            return String.format("%02d-%02d-%02d %02d:%02d:%02d:%d", dwYear, dwMonth, dwDay, dwHour, dwMinute,
+                    dwSecond, dwMillisecond);
+        }
+
+        public LocalDateTime toDateTime() {
+            return LocalDateTime.of(dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond, dwMillisecond);
+        }
+    }
+
+    /*******************SDK初始化*******************/
+
+    /**
+     * 断线回调
+     */
+    interface fDisConnect extends StdCallLibrary.StdCallCallback {
+        /**
+         * @param lLoginID CLIENT_LoginEx2的返回值
+         * @param pchDVRIP 设备IP
+         * @param nDVRPort 设备端口
+         * @param dwUser   用户数据
+         */
+        void invoke(NativeLong lLoginID, String pchDVRIP, int nDVRPort, NativeLong dwUser);
+    }
+
+    /**
+     * 初始化SDK, 在调用SDK另外函数之前调用
+     *
+     * @param cbDisConnect 断线回调函数,通知用户当前断开网络的设备,如果调用SDK的ClIENT_Logout函数主动断开的设备不作断线回调,设置为NULL时不回调
+     * @param dwUser       用户数据
+     * @return
+     */
+    boolean CLIENT_Init(fDisConnect cbDisConnect, NativeLong dwUser);
+
+    /**
+     * 初始化参数
+     */
+    class NETSDK_INIT_PARAM extends Structure {
+        /**
+         * 指定NetSDK常规网络处理线程数, 当值为0时, 使用内部默认值
+         */
+        public int nThreadNum;
+        public byte[] bReserved = new byte[1024];
+    }
+
+    /**
+     * SDK初始化, 通过NETSDK_INIT_PARAM指定初始化参数, 如定制NetSDK启用的常规网络处理线程数
+     *
+     * @param cbDisConnect 断线回调函数,通知用户当前断开网络的设备,如果调用SDK的ClIENT_Logout函数主动断开的设备不作断线回调,设置为NULL时不回调
+     * @param dwUser       用户数据
+     * @param lpInitParam  初始化参数
+     * @return
+     */
+    boolean CLIENT_InitEx(fDisConnect cbDisConnect, NativeLong dwUser, NETSDK_INIT_PARAM lpInitParam);
+
+    /**
+     * 获取SDK的版本号
+     *
+     * @return
+     */
+    int CLIENT_GetSDKVersion();
+
+    /**
+     * 获取函数执行的错误码
+     *
+     * @return
+     * @see DahuaSdkError
+     */
+    int CLIENT_GetLastError();
+
+    /**
+     * 断线后重连回调
+     */
+    interface fHaveReConnect extends StdCallLibrary.StdCallCallback {
+        /**
+         * @param lLoginID CLIENT_LoginEx2的返回值
+         * @param pchDVRIP 设备IP
+         * @param nDVRPort 设备端口
+         * @param dwUser   用户数据
+         */
+        void invoke(NativeLong lLoginID, String pchDVRIP, int nDVRPort, NativeLong dwUser);
+    }
+
+    /**
+     * 设置断线重连回调函数,在设备断线时自动重连设备
+     *
+     * @param cbAutoConnect 断线重连成功的回调函数,通知用户当前断线重连成功的设备
+     * @param dwUser        用户自定义数据,在回调中可以使用
+     */
+    void CLIENT_SetAutoReconnect(fHaveReConnect cbAutoConnect, NativeLong dwUser);
+
+    /**
+     * 设置连接设备等待时间
+     *
+     * @param nWaitTime 连接设备等待时间(单位毫秒)
+     * @param nTryTimes 连接次数
+     */
+    void CLIENT_SetConnectTime(int nWaitTime, int nTryTimes);
+
+    /**
+     * 登陆网络环境设置
+     */
+    @Structure.FieldOrder({"bReserved", "byNetType", "byPlaybackBufSize", "byReserved1", "nConnectBufSize",
+            "nConnectTime", "nConnectTryNum", "nGetConnInfoTime", "nGetDevInfoTime", "nPicBufSize", "nSearchRecordTime",
+            "nWaittime", "nsubConnectSpaceTime", "nsubDisconnetTime"})
+    class NET_PARAM extends Structure {
+        /**
+         * 保留字段
+         */
+        public byte[] bReserved = new byte[4];
+        /**
+         * 网络类型,0-LAN, 1-WAN
+         */
+        public byte byNetType;
+        /**
+         * 回放数据接收缓冲大小(M为单位),为0默认为4M
+         */
+        public byte byPlaybackBufSize;
+        /**
+         * 保留字段
+         */
+        public byte[] byReserved1 = new byte[2];
+        /**
+         * 每个连接接收数据缓冲大小(字节为单位),为0默认250*1024
+         */
+        public int nConnectBufSize;
+        /**
+         * 连接超时时间(毫秒为单位),为0默认1500ms
+         */
+        public int nConnectTime;
+        /**
+         * 连接尝试次数,为0默认1次
+         */
+        public int nConnectTryNum;
+        /**
+         * 获取子连接信息超时时间(毫秒为单位),为0默认1000ms
+         */
+        public int nGetConnInfoTime;
+        /**
+         * 获取设备信息超时时间,为0默认1000ms
+         */
+        public int nGetDevInfoTime;
+        /**
+         * 实时图片接收缓冲大小(字节为单位),为0默认为2*1024*1024
+         */
+        public int nPicBufSize;
+        /**
+         * 按时间查询录像文件的超时时间(毫秒为单位),为0默认为3000ms
+         */
+        public int nSearchRecordTime;
+        /**
+         * 等待超时时间(毫秒为单位),为0默认5000ms
+         */
+        public int nWaittime;
+        /**
+         * 子连接之间的等待时间(毫秒为单位),为0默认10ms
+         */
+        public int nsubConnectSpaceTime;
+        /**
+         * 检测子链接断线等待时间(毫秒为单位),为0默认为60000ms
+         */
+        public int nsubDisconnetTime;
+    }
+
+    /**
+     * 设置网络参数
+     *
+     * @param pNetParam
+     */
+    void CLIENT_SetNetworkParam(NET_PARAM pNetParam);
+
+    /**
+     * 清空SDK, 释放占用的资源,在所有的SDK函数之后调用
+     */
+    void CLIENT_Cleanup();
+
+    /*******************登录设备*******************/
+
+    /**
+     * 登录类型
+     */
+    class EM_LOGIN_SPAC_CAP_TYPE {
+        /**
+         * TCP登录, 默认方式
+         */
+        public static final int EM_LOGIN_SPEC_CAP_TCP = 0;
+        /**
+         * 无条件登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_ANY = 1;
+        /**
+         * 主动注册的登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_SERVER_CONN = 2;
+        /**
+         * 组播登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_MULTICAST = 3;
+        /**
+         * UDP方式下的登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_UDP = 4;
+        /**
+         * 只建主连接下的登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_MAIN_CONN_ONLY = 6;
+        /**
+         * SSL加密方式登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_SSL = 7;
+        /**
+         * 登录智能盒远程设备
+         */
+        public static final int EM_LOGIN_SPEC_CAP_INTELLIGENT_BOX = 9;
+        /**
+         * 登录设备后不做取配置操作
+         */
+        public static final int EM_LOGIN_SPEC_CAP_NO_CONFIG = 10;
+        /**
+         * 用U盾设备的登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_U_LOGIN = 11;
+        /**
+         * LDAP方式登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_LDAP = 12;
+        /**
+         * AD(ActiveDirectory)登录方式
+         */
+        public static final int EM_LOGIN_SPEC_CAP_AD = 13;
+        /**
+         * Radius登录方式
+         */
+        public static final int EM_LOGIN_SPEC_CAP_RADIUS = 14;
+        /**
+         * Socks5登录方式
+         */
+        public static final int EM_LOGIN_SPEC_CAP_SOCKET_5 = 15;
+        /**
+         * 云登录方式
+         */
+        public static final int EM_LOGIN_SPEC_CAP_CLOUD = 16;
+        /**
+         * 二次鉴权登录方式
+         */
+        public static final int EM_LOGIN_SPEC_CAP_AUTH_TWICE = 17;
+        /**
+         * TS码流客户端登录方式
+         */
+        public static final int EM_LOGIN_SPEC_CAP_TS = 18;
+        /**
+         * 为P2P登录方式
+         */
+        public static final int EM_LOGIN_SPEC_CAP_P2P = 19;
+        /**
+         * 手机客户端登录
+         */
+        public static final int EM_LOGIN_SPEC_CAP_MOBILE = 20;
+    }
+
+    /**
+     * 设备类型
+     */
+    class NET_DEVICE_TYPE {
+        public static final int NET_PRODUCT_NONE = 0;
+        /**
+         * 非实时MACE
+         */
+        public static final int NET_DVR_NONREALTIME_MACE = 1;
+        /**
+         * 非实时
+         */
+        public static final int NET_DVR_NONREALTIME = 2;
+        /**
+         * 网络视频服务器
+         */
+        public static final int NET_NVS_MPEG1 = 3;
+        /**
+         * MPEG1二路录像机
+         */
+        public static final int NET_DVR_MPEG1_2 = 4;
+        /**
+         * MPEG1八路录像机
+         */
+        public static final int NET_DVR_MPEG1_8 = 5;
+        /**
+         * MPEG4八路录像机
+         */
+        public static final int NET_DVR_MPEG4_8 = 6;
+        /**
+         * MPEG4十六路录像机
+         */
+        public static final int NET_DVR_MPEG4_16 = 7;
+        /**
+         * LB系列录像机
+         */
+        public static final int NET_DVR_MPEG4_SX2 = 8;
+        /**
+         * GB系列录像机
+         */
+        public static final int NET_DVR_MEPG4_ST2 = 9;
+        /**
+         * HB系列录像机
+         */
+        public static final int NET_DVR_MEPG4_SH2 = 10;
+        /**
+         * GBE系列录像机
+         */
+        public static final int NET_DVR_MPEG4_GBE = 11;
+        /**
+         * II代网络视频服务器
+         */
+        public static final int NET_DVR_MPEG4_NVSII = 12;
+        /**
+         * 新标准配置协议
+         */
+        public static final int NET_DVR_STD_NEW = 13;
+        /**
+         * DDNS服务器
+         */
+        public static final int NET_DVR_DDNS = 14;
+        /**
+         * ATM机
+         */
+        public static final int NET_DVR_ATM = 15;
+        /**
+         * 二代非实时NB系列机器
+         */
+        public static final int NET_NB_SERIAL = 16;
+        /**
+         * LN系列产品
+         */
+        public static final int NET_LN_SERIAL = 17;
+        /**
+         * BAV系列产品
+         */
+        public static final int NET_BAV_SERIAL = 18;
+        /**
+         * SDIP系列产品
+         */
+        public static final int NET_SDIP_SERIAL = 19;
+        /**
+         * IPC系列产品
+         */
+        public static final int NET_IPC_SERIAL = 20;
+        /**
+         * NVS B系列
+         */
+        public static final int NET_NVS_B = 21;
+        /**
+         * NVS H系列
+         */
+        public static final int NET_NVS_C = 22;
+        /**
+         * NVS S系列
+         */
+        public static final int NET_NVS_S = 23;
+        /**
+         * NVS E系列
+         */
+        public static final int NET_NVS_E = 24;
+        /**
+         * 从QueryDevState中查询设备类型,以字符串格式
+         */
+        public static final int NET_DVR_NEW_PROTOCOL = 25;
+        /**
+         * 解码器
+         */
+        public static final int NET_NVD_SERIAL = 26;
+        /**
+         * N5
+         */
+        public static final int NET_DVR_N5 = 27;
+        /**
+         * 混合DVR
+         */
+        public static final int NET_DVR_MIX_DVR = 28;
+        /**
+         * SVR系列
+         */
+        public static final int NET_SVR_SERIAL = 29;
+        /**
+         * SVR-BS
+         */
+        public static final int NET_SVR_BS = 30;
+        /**
+         * NVR系列
+         */
+        public static final int NET_NVR_SERIAL = 31;
+        /**
+         * N51
+         */
+        public static final int NET_DVR_N51 = 32;
+        /**
+         * ITSE 智能分析盒
+         */
+        public static final int NET_ITSE_SERIAL = 33;
+        /**
+         * 智能交通像机设备
+         */
+        public static final int NET_ITC_SERIAL = 34;
+        /**
+         * 雷达测速仪HWS
+         */
+        public static final int NET_HWS_SERIAL = 35;
+        /**
+         * 便携式音视频录像机
+         */
+        public static final int NET_PVR_SERIAL = 36;
+        /**
+         * IVS(智能视频服务器系列)
+         */
+        public static final int NET_IVS_SERIAL = 37;
+        /**
+         * 通用智能视频侦测服务器
+         */
+        public static final int NET_IVS_B = 38;
+        /**
+         * 人脸识别服务器
+         */
+        public static final int NET_IVS_F = 39;
+        /**
+         * 视频质量诊断服务器
+         */
+        public static final int NET_IVS_V = 40;
+        /**
+         * 矩阵
+         */
+        public static final int NET_MATRIX_SERIAL = 41;
+        /**
+         * N52
+         */
+        public static final int NET_DVR_N52 = 42;
+        /**
+         * N56
+         */
+        public static final int NET_DVR_N56 = 43;
+        /**
+         * ESS
+         */
+        public static final int NET_ESS_SERIAL = 44;
+        /**
+         * 人数统计服务器
+         */
+        public static final int NET_IVS_PC = 45;
+        /**
+         * pc-nvr
+         */
+        public static final int NET_PC_NVR = 46;
+        /**
+         * 大屏控制器
+         */
+        public static final int NET_DSCON = 47;
+        /**
+         * 网络视频存储服务器
+         */
+        public static final int NET_EVS = 48;
+        /**
+         * 嵌入式智能分析视频系统
+         */
+        public static final int NET_EIVS = 49;
+        /**
+         * DVR-N6
+         */
+        public static final int NET_DVR_N6 = 50;
+        /**
+         * 万能解码器
+         */
+        public static final int NET_UDS = 51;
+        /**
+         * 银行报警主机
+         */
+        public static final int NET_AF6016 = 52;
+        /**
+         * 视频网络报警主机
+         */
+        public static final int NET_AS5008 = 53;
+        /**
+         * 网络报警主机
+         */
+        public static final int NET_AH2008 = 54;
+        /**
+         * 报警主机系列
+         */
+        public static final int NET_A_SERIAL = 55;
+        /**
+         * 门禁系列产品
+         */
+        public static final int NET_BSC_SERIAL = 56;
+        /**
+         * NVS系列产品
+         */
+        public static final int NET_NVS_SERIAL = 57;
+        /**
+         * VTO系列产品
+         */
+        public static final int NET_VTO_SERIAL = 58;
+        /**
+         * VTNC系列产品
+         */
+        public static final int NET_VTNC_SERIAL = 59;
+        /**
+         * TPC系列产品, 即热成像设备
+         */
+        public static final int NET_TPC_SERIAL = 60;
+        /**
+         * 无线中继设备
+         */
+        public static final int NET_ASM_SERIAL = 61;
+        /**
+         * 管理机
+         */
+        public static final int NET_VTS_SERIAL = 62;
+    }
+
+    /**
+     * 设备序列号字符长度
+     */
+    int DH_SERIALNO_LEN = 48;
+
+    /**
+     * 设备信息
+     */
+    @Structure.FieldOrder({"Reserved", "bReserved", "byLeftLogTimes", "byLimitLoginTime", "nAlarmInPortNum",
+            "nAlarmOutPortNum", "nChanNum", "nDVRType", "nDiskNum", "nLockLeftTime", "sSerialNumber"})
+    class NET_DEVICEINFO_Ex extends Structure {
+        /**
+         * 保留
+         */
+        public byte[] Reserved = new byte[24];
+        /**
+         * 保留字节
+         */
+        public byte[] bReserved = new byte[2];
+        /**
+         * 当登陆失败原因为密码错误时,通过此参数通知用户,剩余登陆次数,为0时表示此参数无效
+         */
+        public byte byLeftLogTimes;
+        /**
+         * 在线超时时间,为0表示不限制登陆,非0表示限制的分钟数
+         */
+        public byte byLimitLoginTime;
+        /**
+         * DVR报警输入个数
+         */
+        public int nAlarmInPortNum;
+        /**
+         * DVR报警输出个数
+         */
+        public int nAlarmOutPortNum;
+        /**
+         * DVR通道个数
+         */
+        public int nChanNum;
+        /**
+         * DVR类型
+         *
+         * @see NET_DEVICE_TYPE
+         */
+        public int nDVRType;
+        /**
+         * DVR硬盘个数
+         */
+        public int nDiskNum;
+        /**
+         * 当登陆失败,用户解锁剩余时间(秒数), -1表示设备未设置该参数
+         */
+        public int nLockLeftTime;
+        /**
+         * 序列号
+         */
+        public byte[] sSerialNumber = new byte[DH_SERIALNO_LEN];
+    }
+
+    /**
+     * 登录设备
+     *
+     * @param pchDVRIP     设备IP
+     * @param wDVRPort     设备端口
+     * @param pchUserName  用户名
+     * @param pchPassword  用户密码
+     * @param emSpecCap    设备支持的能力,值为2表示主动侦听模式下的用户登陆(车载dvr登录)
+     * @param pCapParam    对emSpecCap 的补充参数,emSpecCap = 2时,pCapParam填充设备序列号字串(车载dvr登录)
+     * @param lpDeviceInfo 设备信息,属于输出参数,填NULL效果类似emSpecCap=10
+     * @param error        (当函数返回成功时,该参数的值无意义),返回登录错误码
+     * @return
+     * @see EM_LOGIN_SPAC_CAP_TYPE
+     */
+    NativeLong CLIENT_LoginEx2(String pchDVRIP, int wDVRPort, String pchUserName, String pchPassword, int emSpecCap,
+                               Pointer pCapParam, NET_DEVICEINFO_Ex lpDeviceInfo, IntByReference error);
+
+    /**
+     * 登出设备
+     *
+     * @param lLoginID CLIENT_LoginEx2的返回值
+     * @return 成功返回TRUE,失败返回FALSE
+     */
+    boolean CLIENT_Logout(NativeLong lLoginID);
+
+/*******************智能设备接口*******************/
+    /**
+     * 实时上传智能分析数据-图片(扩展接口,bNeedPicFile表示是否订阅图片文件,Reserved类型为 RESERVED_PARA)
+     *
+     * @param lLoginID       登录句柄
+     * @param nChannelID     通道
+     * @param dwAlarmType    事件类型
+     * @param bNeedPicFile   是否下载对应的图片文件
+     * @param cbAnalyzerData 回调
+     * @param dwUser
+     * @param Reserved
+     * @return
+     */
+    NativeLong CLIENT_RealLoadPictureEx(NativeLong lLoginID, int nChannelID, int dwAlarmType, boolean bNeedPicFile,
+                                        fAnalyzerDataCallBack cbAnalyzerData, NativeLong dwUser, Pointer Reserved);
+
+    /**
+     * 停止上传智能分析数据-图片
+     *
+     * @param lAnalyzerHandle CLIENT_RealLoadPictureEx返回的句柄
+     * @return
+     */
+    boolean CLIENT_StopLoadPic(NativeLong lAnalyzerHandle);
+
+    /**
+     * 智能分析数据回调
+     */
+    interface fAnalyzerDataCallBack extends StdCallLibrary.StdCallCallback {
+        /**
+         * 回调
+         *
+         * @param lAnalyzerHandle
+         * @param dwAlarmType     事件类型
+         * @param pAlarmInfo      事件信息
+         * @param pBuffer         智能图片信息
+         * @param dwBufSize       智能图片信息大小
+         * @param dwUser
+         * @param nSequence       表示上传的相同图片情况,为0时表示是第一次出现,为2表示最后一次出现或仅出现一次,为1表示此次之后还有
+         * @param reserved        表示当前回调数据的状态, 为0表示当前数据为实时数据,为1表示当前回调数据是离线数据,为2时表示离线数据传送结束
+         */
+        void invoke(NativeLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer,
+                    int dwBufSize, NativeLong dwUser, int nSequence, Pointer reserved);
+    }
+
+    /**
+     * 事件名称长度
+     */
+    int DH_EVENT_NAME_LEN = 128;
+
+    /**
+     * 事件对应文件信息
+     */
+    @Structure.FieldOrder({"bCount", "bIndex", "bFileTag", "bFileType", "stuFileTime", "nGroupId"})
+    class DH_EVENT_FILE_INFO extends Structure {
+        /**
+         * 当前文件所在文件组中的文件总数
+         */
+        public byte bCount;
+        /**
+         * 当前文件在文件组中的文件编号(编号1开始)
+         */
+        public byte bIndex;
+        /**
+         * 文件标签, EM_EVENT_FILETAG
+         */
+        public byte bFileTag;
+        /**
+         * 文件类型,0-普通 1-合成 2-抠图
+         */
+        public byte bFileType;
+        /**
+         * 文件时间
+         */
+        public NET_TIME_EX stuFileTime;
+        /**
+         * 同一组抓拍文件的唯一标识
+         */
+        public int nGroupId;
+
+        @Override
+        public String toString() {
+            return "DH_EVENT_FILE_INFO{" +
+                    "bCount=" + bCount +
+                    ", bIndex=" + bIndex +
+                    ", bFileTag=" + bFileTag +
+                    ", bFileType=" + bFileType +
+                    ", stuFileTime=" + stuFileTime +
+                    ", nGroupId=" + nGroupId +
+                    '}';
+        }
+    }
+
+    /**
+     * 门禁事件类型
+     */
+    class NET_ACCESS_CTL_EVENT_TYPE {
+        public static final int NET_ACCESS_CTL_EVENT_UNKNOWN = 0;
+        /**
+         * 进门
+         */
+        public static final int NET_ACCESS_CTL_EVENT_ENTRY = 1;
+        /**
+         * 出门
+         */
+        public static final int NET_ACCESS_CTL_EVENT_EXIT = 2;
+    }
+
+    /**
+     * 卡类型
+     */
+    class NET_ACCESSCTLCARD_TYPE {
+        public static final int NET_ACCESSCTLCARD_TYPE_UNKNOWN = -1;
+        /**
+         * 一般卡
+         */
+        public static final int NET_ACCESSCTLCARD_TYPE_GENERAL = 0;
+        /**
+         * VIP卡
+         */
+        public static final int NET_ACCESSCTLCARD_TYPE_VIP = 1;
+        /**
+         * 来宾卡
+         */
+        public static final int NET_ACCESSCTLCARD_TYPE_GUEST = 2;
+        /**
+         * 巡逻卡
+         */
+        public static final int NET_ACCESSCTLCARD_TYPE_PATROL = 3;
+        /**
+         * 黑名单卡
+         */
+        public static final int NET_ACCESSCTLCARD_TYPE_BLACKLIST = 4;
+        /**
+         * 胁迫卡
+         */
+        public static final int NET_ACCESSCTLCARD_TYPE_CORCE = 5;
+        /**
+         * 巡检卡
+         */
+        public static final int NET_ACCESSCTLCARD_TYPE_POLLING = 6;
+        /**
+         * 母卡
+         */
+        public static final int NET_ACCESSCTLCARD_TYPE_MOTHERCARD = 0xff;
+    }
+
+    /**
+     * 开门方式(门禁事件,门禁出入记录,实际的开门方式)
+     */
+    class NET_ACCESS_DOOROPEN_METHOD {
+        public static final int NET_ACCESS_DOOROPEN_METHOD_UNKNOWN = 0;
+        /**
+         * 密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY = 1;
+        /**
+         * 刷卡开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD = 2;
+        /**
+         * 先刷卡后密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST = 3;
+        /**
+         * 先密码后刷卡开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST = 4;
+        /**
+         * 远程开锁,如通过室内机或者平台对门口机开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_REMOTE = 5;
+        /**
+         * 开锁按钮进行开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_BUTTON = 6;
+        /**
+         * 指纹开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT = 7;
+        /**
+         * 密码+刷卡+指纹组合开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT = 8;
+        /**
+         * 密码+指纹组合开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT = 10;
+        /**
+         * 刷卡+指纹组合开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT = 11;
+        /**
+         * 多人开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_PERSONS = 12;
+        /**
+         * 钥匙开门
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_KEY = 13;
+        /**
+         * 胁迫密码开门
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD = 14;
+        /**
+         * 二维码开门
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_QRCODE = 15;
+        /**
+         * 人脸识别开门
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION = 16;
+        /**
+         * 人证对比
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD = 18;
+        /**
+         * 身份证+ 人证比对
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD = 19;
+        /**
+         * 蓝牙开门
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH = 20;
+        /**
+         * 个性化密码开门
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD = 21;
+        /**
+         * UserID+密码
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD = 22;
+        /**
+         * 人脸+密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD = 23;
+        /**
+         * 指纹+密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD = 24;
+        /**
+         * 指纹+人脸开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE = 25;
+        /**
+         * 刷卡+人脸开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE = 26;
+        /**
+         * 人脸或密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD = 27;
+        /**
+         * 指纹或密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD = 28;
+        /**
+         * 指纹或人脸开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE = 29;
+        /**
+         * 刷卡或人脸开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE = 30;
+        /**
+         * 刷卡或指纹开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT = 31;
+        /**
+         * 指纹+人脸+密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD = 32;
+        /**
+         * 刷卡+人脸+密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD = 33;
+        /**
+         * 刷卡+指纹+密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD = 34;
+        /**
+         * 卡+指纹+人脸组合开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE = 35;
+        /**
+         * 指纹或人脸或密码
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD = 36;
+        /**
+         * 卡或人脸或密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD = 37;
+        /**
+         * 卡或指纹或人脸开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE = 38;
+        /**
+         * 卡+指纹+人脸+密码组合开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD = 39;
+        /**
+         * 卡或指纹或人脸或密码开锁
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD = 40;
+        /**
+         * (身份证+人证比对)或 刷卡 或 人脸
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE = 41;
+        /**
+         * 人证比对 或 刷卡(二维码) 或 人脸
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE = 42;
+        /**
+         * DTMF开锁(包括SIPINFO,RFC2833,INBAND)
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_DTMF = 43;
+        /**
+         * 远程二维码开门
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_REMOTE_QRCODE = 44;
+        /**
+         * 远程人脸开门
+         */
+        public static final int NET_ACCESS_DOOROPEN_METHOD_REMOTE_FACE = 45;
+    }
+
+    /**
+     * 门禁卡号最大长度
+     */
+    int DH_MAX_CARDNO_LEN = 32;
+    /**
+     * 最大门禁密码长度
+     */
+    int DH_MAX_CARDPWD_LEN = 64;
+
+    /**
+     * 开门失败的原因
+     */
+    enum DoorOpenErrorCode {
+        /**
+         * 未知错误
+         */
+        NET_ERROR(-1),
+        /**
+         * 没有错误
+         */
+        NET_NOERROR(0x00),
+        /**
+         * 未授权
+         */
+        NET_UNAUTHORIZED(0x10),
+        /**
+         * 卡挂失或注销
+         */
+        NET_CARD_LOSS_OR_CANCEL(0x11),
+        /**
+         * 没有该门权限
+         */
+        NET_NO_ACCESS_THIS_DOOR(0x12),
+        /**
+         * 开门模式错误
+         */
+        NET_OPEN_MODE_ERROR(0x13),
+        /**
+         * 有效期错误
+         */
+        NET_VALIDITY_ERROR(0x14),
+        /**
+         * 防反潜模式
+         */
+        NET_PREVENT_REPEAT_ENTER(0x15),
+        /**
+         * 胁迫报警未打开
+         */
+        NET_STRESS_ALARM_NOT_OPEN(0x16),
+        /**
+         * 门常闭状态
+         */
+        NET_DOOR_CLOSEALWAYS(0x17),
+        /**
+         * AB互锁状态
+         */
+        NET_DOOR_ABLOCK(0x18),
+        /**
+         * 巡逻卡
+         */
+        NET_PATROL(0x19),
+        /**
+         * 设备处于闯入报警状态
+         */
+        NET_INTRYSION_ALARM_STATE(0x1a),
+        /**
+         * 时间段错误
+         */
+        NET_TIME_ERROR(0x20),
+        /**
+         * 假期内开门时间段错误
+         */
+        NET_HOLIDAY_TIME_ERROR(0x21),
+        /**
+         * 需要先验证有首卡权限的卡片
+         */
+        NET_VALIDATE_FIRST_ENTER(0x30),
+        /**
+         * 卡片正确,输入密码错误
+         */
+        NET_INCORRECT_PWD(0x40),
+        /**
+         * 卡片正确,输入密码超时
+         */
+        NET_PWD_OUT_OF_TIME(0x41),
+        /**
+         * 卡片正确,输入指纹错误
+         */
+        NET_FINGERPRINT_WRONG(0x42),
+        /**
+         * 卡片正确,输入指纹超时
+         */
+        NET_FINGERPRINT_OUT_OF_TIME(0x43),
+        /**
+         * 指纹正确,输入密码错误
+         */
+        NET_CORRECT_FINGERPRINT_INCORRECT_PWD(0x44),
+        /**
+         * 指纹正确,输入密码超时
+         */
+        NET_CORRECT_FINGERPRINT_PWD_OUT_OF_TIME(0x45),
+        /**
+         * 组合开门顺序错误
+         */
+        NET_COMPOSITE_ORDER_ERROR(0x50),
+        /**
+         * 组合开门需要继续验证
+         */
+        NET_COMPOSITE_NEED_VALIDATION(0x51),
+        /**
+         * 验证通过,控制台未授权
+         */
+        NET_CONSOLE_UNAUTHORIZED(0x60),
+        /**
+         * 卡片正确,人脸错误
+         */
+        NET_FACE_WRONG(0x61),
+        /**
+         * 卡片正确,人脸超时
+         */
+        NET_FACE_OUT_OF_TIME(0x62),
+        /**
+         * 重复进入
+         */
+        NET_REPEAT_ENTER(0x63);
+
+        final int code;
+
+        DoorOpenErrorCode(int code) {
+            this.code = code;
+        }
+
+        public static DoorOpenErrorCode of(int code) {
+            for (DoorOpenErrorCode err : DoorOpenErrorCode.values()) {
+                if (err.code == code) {
+                    return err;
+                }
+            }
+            return NET_ERROR;
+        }
+
+        public int getCode() {
+            return code;
+        }
+
+        @Override
+        public String toString() {
+            return name();
+        }
+    }
+
+    /**
+     * 考勤状态
+     */
+    class NET_ATTENDANCESTATE {
+        public static final int NET_ATTENDANCESTATE_UNKNOWN = 0;
+        /**
+         * 签入
+         */
+        public static final int NET_ATTENDANCESTATE_SIGNIN = 1;
+        /**
+         * 外出
+         */
+        public static final int NET_ATTENDANCESTATE_GOOUT = 2;
+        /**
+         * 外出归来
+         */
+        public static final int NET_ATTENDANCESTATE_GOOUT_AND_RETRUN = 3;
+        /**
+         * 签出
+         */
+        public static final int NET_ATTENDANCESTATE_SIGNOUT = 4;
+        /**
+         * 加班签到
+         */
+        public static final int NET_ATTENDANCESTATE_WORK_OVERTIME_SIGNIN = 5;
+        /**
+         * 加班签出
+         */
+        public static final int NET_ATTENDANCESTATE_WORK_OVERTIME_SIGNOUT = 6;
+    }
+
+    /**
+     * 最大班级长度
+     */
+    int MAX_CLASS_NUMBER_LEN = 32;
+    /**
+     * 最大电话长度
+     */
+    int MAX_PHONENUMBER_LEN = 16;
+    /**
+     * 门禁卡命名最大长度
+     */
+    int DH_MAX_CARDNAME_LEN = 64;
+
+    /**
+     * 事件类型 EVENT_IVS_ACCESS_CTL(门禁事件)对应数据块描述信息
+     */
+    @Structure.FieldOrder({"nChannelID", "szName", "bReserved1", "PTS", "UTC", "nEventID", "stuObject", "stuFileInfo",
+            "emEventType", "bStatus", "emCardType", "emOpenMethod", "szCardNo", "szPwd", "szReaderID", "szUserID",
+            "szSnapURL", "nErrorCode", "nPunchingRecNo", "nNumbers", "byImageIndex", "byReserved", "dwSnapFlagMask",
+            "emAttendanceState", "szClassNumber", "szPhoneNumber", "szCardName", "uSimilarity", "bReserved"})
+    class DEV_EVENT_ACCESS_CTL_INFO extends Structure {
+        /**
+         * 门通道号
+         */
+        public int nChannelID;
+        /**
+         * 事件名称
+         */
+        public byte[] szName = new byte[DH_EVENT_NAME_LEN];
+        /**
+         * 字节对齐
+         */
+        public byte[] bReserved1 = new byte[4];
+        /**
+         * 时间戳(单位是毫秒)
+         */
+        public double PTS;
+        /**
+         * 事件发生的时间
+         */
+        public NET_TIME_EX UTC;
+        /**
+         * 事件ID
+         */
+        public int nEventID;
+        /**
+         * 检测到的物体
+         */
+        public DH_MSG_OBJECT stuObject;
+        /**
+         * 事件对应文件信息
+         */
+        public DH_EVENT_FILE_INFO stuFileInfo;
+        /**
+         * 门禁事件类型
+         *
+         * @see NET_ACCESS_CTL_EVENT_TYPE
+         */
+        public int emEventType;
+        /**
+         * 刷卡结果,TRUE表示成功,FALSE表示失败
+         */
+        public boolean bStatus;
+        /**
+         * 卡类型
+         *
+         * @see NET_ACCESSCTLCARD_TYPE
+         */
+        public int emCardType;
+        /**
+         * 开门方式
+         *
+         * @see NET_ACCESS_DOOROPEN_METHOD
+         */
+        public int emOpenMethod;
+        /**
+         * 卡号
+         */
+        public byte[] szCardNo = new byte[DH_MAX_CARDNO_LEN];
+        /**
+         * 密码
+         */
+        public byte[] szPwd = new byte[DH_MAX_CARDPWD_LEN];
+        /**
+         * 门读卡器ID
+         */
+        public byte[] szReaderID = new byte[DH_COMMON_STRING_32];
+        /**
+         * 开门用户
+         */
+        public byte[] szUserID = new byte[DH_COMMON_STRING_64];
+        /**
+         * 抓拍照片存储地址
+         */
+        public byte[] szSnapURL = new byte[DH_COMMON_STRING_128];
+        /**
+         * 开门失败的原因,仅在bStatus为FALSE时有效
+         *
+         * @see DoorOpenErrorCode
+         */
+        public int nErrorCode;
+        /**
+         * 刷卡记录集中的记录编号
+         */
+        public int nPunchingRecNo;
+        /**
+         * 抓图张数
+         */
+        public int nNumbers;
+        /**
+         * 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+         */
+        public byte byImageIndex;
+        /**
+         * 字节对齐
+         */
+        public byte[] byReserved = new byte[3];
+        /**
+         * 抓图标志(按位),具体见 NET_RESERVED_COMMON
+         */
+        public int dwSnapFlagMask;
+        /**
+         * 考勤状态
+         *
+         * @see NET_ATTENDANCESTATE
+         */
+        public int emAttendanceState;
+        /**
+         * 班级(考勤肯尼亚定制)
+         */
+        public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN];
+        /**
+         * 电话(考勤肯尼亚定制)
+         */
+        public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN];
+        /**
+         * 卡命名
+         */
+        public byte[] szCardName = new byte[DH_MAX_CARDNAME_LEN];
+        /**
+         * 人脸识别相似度,范围为0~100
+         */
+        public int uSimilarity;
+        public byte[] bReserved = new byte[904];
+
+        public DEV_EVENT_ACCESS_CTL_INFO(Pointer pointer) {
+            super(pointer);
+            read();
+        }
+
+        @Override
+        public String toString() {
+            return "DEV_EVENT_ACCESS_CTL_INFO{" +
+                    "nChannelID=" + nChannelID +
+                    ", szName=" + new String(szName) +
+                    ", PTS=" + PTS +
+                    ", UTC=" + UTC +
+                    ", nEventID=" + nEventID +
+                    ", stuFileInfo=" + stuFileInfo +
+                    ", emEventType=" + emEventType +
+                    ", bStatus=" + bStatus +
+                    ", emCardType=" + emCardType +
+                    ", emOpenMethod=" + emOpenMethod +
+                    ", szCardNo=" + new String(szCardNo) +
+                    ", szPwd=" + new String(szPwd) +
+                    ", szReaderID=" + new String(szReaderID) +
+                    ", szUserID=" + new String(szUserID) +
+                    ", szSnapURL=" + new String(szSnapURL) +
+                    ", nErrorCode=" + nErrorCode +
+                    ", nPunchingRecNo=" + nPunchingRecNo +
+                    ", nNumbers=" + nNumbers +
+                    ", byImageIndex=" + byImageIndex +
+                    ", dwSnapFlagMask=" + dwSnapFlagMask +
+                    ", emAttendanceState=" + emAttendanceState +
+                    ", szClassNumber=" + new String(szClassNumber) +
+                    ", szPhoneNumber=" + new String(szPhoneNumber) +
+                    ", szCardName=" + new String(szCardName) +
+                    ", uSimilarity=" + uSimilarity +
+                    '}';
+        }
+    }
+
+    /**
+     * 区域;各边距按整长8192的比例
+     */
+    @Structure.FieldOrder({"left", "top", "right", "bottom"})
+    class DH_RECT extends Structure {
+        public long left;
+        public long top;
+        public long right;
+        public long bottom;
+    }
+
+    /**
+     * 二维空间点
+     */
+    @Structure.FieldOrder({"nx", "ny"})
+    class DH_POINT extends Structure {
+        public short nx;
+        public short ny;
+    }
+
+    /**
+     * 多边形最大顶点个数
+     */
+    int DH_MAX_POLYGON_NUM = 16;
+
+    /**
+     * 物体对应图片文件信息
+     */
+    @Structure.FieldOrder({"dwOffSet", "dwFileLenth", "wWidth", "wHeight", "pszFilePath", "bIsDetected", "bReserved",
+            "nFilePathLen", "stuPoint"})
+    class DH_PIC_INFO extends Structure {
+        /**
+         * 文件在二进制数据块中的偏移位置, 单位:字节
+         */
+        public int dwOffSet;
+        /**
+         * 文件大小, 单位:字节
+         */
+        public int dwFileLenth;
+        /**
+         * 图片宽度, 单位:像素
+         */
+        public int wWidth;
+        /**
+         * 图片高度, 单位:像素
+         */
+        public int wHeight;
+        /**
+         * 文件路径
+         */
+        public String pszFilePath;
+        /**
+         * 图片是否算法检测出来的检测过的提交识别服务器时,
+         * 则不需要再时检测定位抠图,1:检测过的,0:没有检测过
+         */
+        public byte bIsDetected;
+        public byte[] bReserved = new byte[3];
+        /**
+         * 文件路径长度 既pszFilePath 用户申请的大小
+         */
+        public int nFilePathLen;
+        /**
+         * 小图左上角在大图的位置,使用绝对坐标系
+         */
+        public DH_POINT stuPoint;
+    }
+
+    /**
+     * 视频分析物体信息结构体
+     */
+    @Structure.FieldOrder({"nObjectID", "szObjectType", "nConfidence", "nAction", "BoundingBox", "Center",
+            "nPolygonNum", "Contour", "rgbaMainColor", "szText", "szObjectSubType", "wColorLogoIndex", "wSubBrand",
+            "byReserved1", "bPicEnble", "stPicInfo", "bShotFrame", "bColor", "byReserved2", "byTimeType", "stuCurrentTime",
+            "stuStartTime", "stuEndTime", "stuOriginalBoundingBox", "stuSignBoundingBox", "dwCurrentSequence",
+            "dwBeginSequence", "dwEndSequence", "nBeginFileOffset", "nEndFileOffset", "byColorSimilar",
+            "byUpperBodyColorSimilar", "byLowerBodyColorSimilar", "nRelativeID", "szSubText", "wBrandYear"})
+    class DH_MSG_OBJECT extends Structure {
+        /**
+         * 物体ID,每个ID表示一个唯一的物体
+         */
+        public int nObjectID;
+        /**
+         * 物体类型
+         */
+        public byte[] szObjectType = new byte[128];
+        /**
+         * 置信度(0~255),值越大表示置信度越高
+         */
+        public int nConfidence;
+        /**
+         * 物体动作:1:Appear 2:Move 3:Stay 4:Remove 5:Disappear 6:Split 7:Merge 8:Rename
+         */
+        public int nAction;
+        /**
+         * 包围盒
+         */
+        public DH_RECT BoundingBox;
+        /**
+         * 物体型心
+         */
+        public DH_POINT Center;
+        /**
+         * 多边形顶点个数
+         */
+        public int nPolygonNum;
+        /**
+         * 较精确的轮廓多边形
+         */
+        public DH_POINT[] Contour = (DH_POINT[]) new DH_POINT().toArray(DH_MAX_POLYGON_NUM);
+        /**
+         * 表示车牌、车身等物体主要颜色;按字节表示,分别为红、绿、蓝和透明度,例如:RGB值为(0,255,0),透明度为0时, 其值为0x00ff0000.
+         */
+        public int rgbaMainColor;
+        /**
+         * 物体上相关的带0结束符文本,比如车牌,集装箱号等等
+         */
+        public byte[] szText = new byte[128];
+        // "ObjectType"为"Vehicle"或者"Logo"时(尽量使用Logo。Vehicle是为了兼容老产品)表示车标,支持:
+        // "Unknown"未知
+        // "Audi" 奥迪
+        // "Honda" 本田
+        // "Buick" 别克
+        // "Volkswagen" 大众
+        // "Toyota" 丰田
+        // "BMW" 宝马
+        // "Peugeot" 标致
+        // "Ford" 福特
+        // "Mazda" 马自达
+        // "Nissan" 尼桑(日产)
+        // "Hyundai" 现代
+        // "Suzuki" 铃木
+        // "Citroen" 雪铁龙
+        // "Benz" 奔驰
+        // "BYD" 比亚迪
+        // "Geely" 吉利
+        // "Lexus" 雷克萨斯
+        // "Chevrolet" 雪佛兰
+        // "Chery" 奇瑞
+        // "Kia" 起亚
+        // "Charade" 夏利
+        // "DF" 东风
+        // "Naveco" 依维柯
+        // "SGMW" 五菱
+        // "Jinbei" 金杯
+
+        // "JAC" 江淮
+        // "Emgrand" 帝豪
+        // "ChangAn" 长安
+        // "Great Wall" 长城
+        // "Skoda" 斯柯达
+        // "BaoJun" 宝骏
+        // "Subaru" 斯巴鲁
+        // "LandWind" 陆风
+        // "Luxgen" 纳智捷
+        // "Renault" 雷诺
+        // "Mitsubishi" 三菱
+        // "Roewe" 荣威
+        // "Cadillac" 凯迪拉克
+        // "MG" 名爵
+        // "Zotye" 众泰
+        // "ZhongHua" 中华
+        // "Foton" 福田
+        // "SongHuaJiang" 松花江
+        // "Opel" 欧宝
+        // "HongQi" 一汽红旗
+        // "Fiat" 菲亚特
+        // "Jaguar" 捷豹
+        // "Volvo" 沃尔沃
+        // "Acura" 讴歌
+        // "Porsche" 保时捷
+
+        // "Jeep" 吉普
+        // "Bentley" 宾利
+        // "Bugatti" 布加迪
+        // "ChuanQi" 传祺
+        // "Daewoo" 大宇
+        // "DongNan" 东南
+        // "Ferrari" 法拉利
+        // "Fudi" 福迪
+        // "Huapu" 华普
+        // "HawTai" 华泰
+        // "JMC" 江铃
+        // "JingLong" 金龙客车
+        // "JoyLong" 九龙
+        // "Karry" 开瑞
+        // "Chrysler" 克莱斯勒
+        // "Lamborghini" 兰博基尼
+        // "RollsRoyce" 劳斯莱斯
+        // "Linian" 理念
+        // "LiFan" 力帆
+        // "LieBao" 猎豹
+        // "Lincoln" 林肯
+        // "LandRover" 路虎
+        // "Lotus" 路特斯
+        // "Maserati" 玛莎拉蒂
+        // "Maybach" 迈巴赫
+
+        // "Mclaren" 迈凯轮
+        // "Youngman" 青年客车
+        // "Tesla" 特斯拉
+        // "Rely" 威麟
+        // "Lsuzu" 五十铃
+        // "Yiqi" 一汽
+        // "Infiniti" 英菲尼迪
+        // "YuTong" 宇通客车
+        // "AnKai" 安凯客车
+        // "Canghe" 昌河
+        // "HaiMa" 海马
+        // "Crown" 丰田皇冠
+        // "HuangHai" 黄海
+        // "JinLv" 金旅客车
+        // "JinNing" 精灵
+        // "KuBo" 酷博
+        // "Europestar" 莲花
+        // "MINI" 迷你
+        // "Gleagle" 全球鹰
+        // "ShiDai" 时代
+        // "ShuangHuan" 双环
+        // "TianYe" 田野
+        // "WeiZi" 威姿
+        // "Englon" 英伦
+        // "ZhongTong" 中通客车
+
+        // "Changan" 长安轿车
+        // "Yuejin" 跃进
+        // "Taurus" 金牛星
+        // "Alto" 奥拓
+        // "Weiwang" 威旺
+        // "Chenglong" 乘龙
+        // "Haige" 海格
+        // "Shaolin" 少林客车
+        // "Beifang" 北方客车
+        // "Beijing" 北京汽车
+        // "Hafu" 哈弗
+
+        // "BeijingTruck" 北汽货车
+        // "Besturn" 奔腾
+        // "ChanganBus" 长安客车
+        // "Dodge" 道奇
+        // "DongFangHong" 东方红
+        // "DongFengTruck" 东风货车
+        // "DongFengBus" 东风客车
+        // "MultiBrand" 多品牌
+        // "FotonTruck" 福田货车
+        // "FotonBus" 福田客车
+        // "GagcTruck" 广汽货车
+        // "HaFei" 哈飞
+        // "HowoBus" 豪沃客车
+        // "JACTruck" 江淮货车
+        // "JACBus" 江淮客车
+        // "JMCTruck" 江铃货车
+        // "JieFangTruck" 解放货车
+        // "JinBeiTruck" 金杯货车
+        // "KaiMaTruck" 凯马货车
+        // "CoasterBus" 柯斯达客车
+        // "MudanBus" 牡丹客车
+        // "NanJunTruck" 南骏货车
+        // "QingLing" 庆铃
+        // "NissanCivilian" 日产碧莲客车
+        // "NissanTruck" 日产货车
+        // "MitsubishiFuso" 三菱扶桑
+        // "SanyTruck" 三一货车
+        // "ShanQiTruck" 陕汽货车
+        // "ShenLongBus" 申龙客车
+        // "TangJunTruck" 唐骏货车
+        // "MicroTruck" 微货车
+        // "VolvoBus" 沃尔沃客车
+        // "LsuzuTruck" 五十铃货车
+        // "WuZhengTruck" 五征货车
+        // "Seat" 西雅特
+        // "YangZiBus" 扬子客车
+        // "YiqiBus" 一汽客车
+        // "YingTianTruck" 英田货车
+        // "YueJinTruck" 跃进货车
+        // "ZhongDaBus" 中大客车
+        // "ZxAuto" 中兴
+
+        // "ZhongQiWangPai" 重汽王牌
+        // "WAW" 奥驰
+        // "BeiQiWeiWang" 北汽威旺
+        // "BYDDaimler"	比亚迪戴姆勒
+        // "ChunLan" 春兰
+        // "DaYun" 大运
+        // "DFFengDu" 东风风度
+        // "DFFengGuang" 东风风光
+        // "DFFengShen" 东风风神
+        // "DFFengXing" 东风风行
+        // "DFLiuQi" 东风柳汽
+        // "DFXiaoKang" 东风小康
+        // "FeiChi" 飞驰
+        // "FordMustang" 福特野马
+        // "GuangQi" 广汽
+        // "GuangTong" 广通
+        // "HuiZhongTruck" 汇众重卡
+        // "JiangHuai" 江环
+        // "SunWin" 申沃
+        // "ShiFeng" 时风
+        // "TongXin" 同心
+        // "WZL" 五洲龙
+        // "XiWo" 西沃
+        // "XuGong" 徐工
+        // "JingGong" 精工
+        // "SAAB" 萨博
+        // "SanHuanShiTong" 三环十通
+        // "KangDi" 康迪
+        // "YaoLong" 耀隆
+
+
+        public byte[] szObjectSubType = new byte[62];                // 物体子类别,根据不同的物体类型,可以取以下子类型:
+        // Vehicle Category:"Unknown"  未知,"Motor" 机动车,"Non-Motor":非机动车,"Bus": 公交车,"Bicycle" 自行车,"Motorcycle":摩托车,"PassengerCar":客车,
+        // "LargeTruck":大货车,    "MidTruck":中货车,"SaloonCar":轿车,"Microbus":面包车,"MicroTruck":小货车,"Tricycle":三轮车,    "Passerby":行人
+        //  Plate Category:"Unknown" 未知,"Normal" 蓝牌黑牌,"Yellow" 黄牌,"DoubleYellow" 双层黄尾牌,"Police" 警牌"Armed" 武警牌,
+        // "Military" 部队号牌,"DoubleMilitary" 部队双层,"SAR" 港澳特区号牌,"Trainning" 教练车号牌
+        // "Personal" 个性号牌,"Agri" 农用牌,"Embassy" 使馆号牌,"Moto" 摩托车号牌,"Tractor" 拖拉机号牌,"Other" 其他号牌
+        // "Civilaviation"民航号牌,"Black"黑牌
+        // "PureNewEnergyMicroCar"纯电动新能源小车,"MixedNewEnergyMicroCar,"混合新能源小车,"PureNewEnergyLargeCar",纯电动新能源大车
+        // "MixedNewEnergyLargeCar"混合新能源大车
+        // HumanFace Category:"Normal" 普通人脸,"HideEye" 眼部遮挡,"HideNose" 鼻子遮挡,"HideMouth" 嘴部遮挡,"TankCar"槽罐车(装化学药品、危险品)
+
+
+        /**
+         * 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册
+         */
+        public int wColorLogoIndex;
+        /**
+         * 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册
+         */
+        public int wSubBrand;
+        public byte byReserved1;
+        /**
+         * 是否有物体对应图片文件信息
+         */
+        public boolean bPicEnble;
+        /**
+         * 物体对应图片信息
+         */
+        public DH_PIC_INFO stPicInfo;
+        /**
+         * 是否是抓拍张的识别结果
+         */
+        public boolean bShotFrame;
+        /**
+         * 物体颜色(rgbaMainColor)是否可用
+         */
+        public boolean bColor;
+        public byte byReserved2;
+        /**
+         * 时间表示类型,详见EM_TIME_TYPE说明
+         */
+        public byte byTimeType;
+        /**
+         * 针对视频浓缩,当前时间戳(物体抓拍或识别时,会将此识别智能帧附在一个视频帧或jpeg图片中,此帧所在原始视频中的出现时间)
+         */
+        public NET_TIME_EX stuCurrentTime;
+        /**
+         * 开始时间戳(物体开始出现时)
+         */
+        public NET_TIME_EX stuStartTime;
+        /**
+         * 结束时间戳(物体最后出现时)
+         */
+        public NET_TIME_EX stuEndTime;
+        /**
+         * 包围盒(绝对坐标)
+         */
+        public DH_RECT stuOriginalBoundingBox;
+        /**
+         * 车标坐标包围盒
+         */
+        public DH_RECT stuSignBoundingBox;
+        /**
+         * 当前帧序号(抓下这个物体时的帧)
+         */
+        public int dwCurrentSequence;
+        /**
+         * 开始帧序号(物体开始出现时的帧序号)
+         */
+        public int dwBeginSequence;
+        /**
+         * 结束帧序号(物体消逝时的帧序号)
+         */
+        public int dwEndSequence;
+        /**
+         * 开始时文件偏移, 单位: 字节(物体开始出现时,视频帧在原始视频文件中相对于文件起始处的偏移)
+         */
+        public int nBeginFileOffset;
+        /**
+         * 结束时文件偏移, 单位: 字节(物体消逝时,视频帧在原始视频文件中相对于文件起始处的偏移)
+         */
+        public int nEndFileOffset;
+        /**
+         * 物体颜色相似度,取值范围:0-100,数组下标值代表某种颜色,详见EM_COLOR_TYPE
+         */
+        public byte[] byColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];
+        /**
+         * 上半身物体颜色相似度(物体类型为人时有效)
+         */
+        public byte[] byUpperBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];
+        /**
+         * 下半身物体颜色相似度(物体类型为人时有效)
+         */
+        public byte[] byLowerBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];
+        /**
+         * 相关物体ID
+         */
+        public int nRelativeID;
+        /**
+         * "ObjectType"为"Vehicle"或者"Logo"时,表示车标下的某一车系,比如奥迪A6L,由于车系较多,SDK实现时透传此字段,设备如实填写。
+         */
+        public byte[] szSubText = new byte[20];
+        /**
+         * 车辆品牌年款 需要通过映射表得到真正的年款 映射表详见开发手册
+         */
+        public int wBrandYear;
+    }
+
+    /**
+     * 颜色类型
+     */
+    class EM_COLOR_TYPE {
+        /**
+         * 红色
+         */
+        public static final int NET_COLOR_TYPE_RED = 0;
+        /**
+         * 黄色
+         */
+        public static final int NET_COLOR_TYPE_YELLOW = 1;
+        /**
+         * 绿色
+         */
+        public static final int NET_COLOR_TYPE_GREEN = 2;
+        /**
+         * 青色
+         */
+        public static final int NET_COLOR_TYPE_CYAN = 3;
+        /**
+         * 蓝色
+         */
+        public static final int NET_COLOR_TYPE_BLUE = 4;
+        /**
+         * 紫色
+         */
+        public static final int NET_COLOR_TYPE_PURPLE = 5;
+        /**
+         * 黑色
+         */
+        public static final int NET_COLOR_TYPE_BLACK = 6;
+        /**
+         * 白色
+         */
+        public static final int NET_COLOR_TYPE_WHITE = 7;
+        public static final int NET_COLOR_TYPE_MAX = 8;
+    }
+}

+ 112 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaSdk.java

@@ -0,0 +1,112 @@
+package com.usoftchina.smartschool.device.dahua.lib;
+
+import com.sun.jna.Native;
+import com.sun.jna.NativeLong;
+import com.sun.jna.Platform;
+import com.usoftchina.smartschool.context.SpringContextHolder;
+import com.usoftchina.smartschool.device.dahua.config.DahuaProperties;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaLibrary.*;
+import com.usoftchina.smartschool.device.dto.DeviceId;
+import com.usoftchina.smartschool.device.event.DeviceDisconnectEvent;
+import com.usoftchina.smartschool.device.event.DeviceReconnectEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+/**
+ * @author yingp
+ * @date 2019/3/7
+ */
+public class DahuaSdk {
+
+    private final DahuaProperties properties;
+    private final DahuaLibrary instance;
+    private final Logger logger = LoggerFactory.getLogger(DahuaSdk.class);
+
+    private boolean initialized;
+    /**
+     * 登录尝试次数
+     */
+    private int tryTimes = 1;
+
+    public DahuaSdk(DahuaProperties properties) {
+        this.properties = properties;
+        this.instance = Native.load(Platform.RESOURCE_PREFIX +
+                (Platform.isWindows() ? "/dhnetsdk" : "/libdhnetsdk"), DahuaLibrary.class);
+    }
+
+    public DahuaLibrary getInstance() {
+        return instance;
+    }
+
+    public DahuaProperties getProperties() {
+        return properties;
+    }
+
+    public DahuaSdkError getLastError() {
+        return DahuaSdkError.of(instance.CLIENT_GetLastError());
+    }
+
+    /**
+     * 初始化
+     *
+     * @param disConnect
+     * @param haveReConnect
+     * @return
+     */
+    public boolean init(fDisConnect disConnect, fHaveReConnect haveReConnect) {
+        initialized = instance.CLIENT_Init(disConnect, new NativeLong());
+        if (!initialized) {
+            logger.error("SDK initialize failed");
+            return false;
+        }
+        // 设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作
+        instance.CLIENT_SetAutoReconnect(haveReConnect, new NativeLong());
+        instance.CLIENT_SetConnectTime(properties.getWaitTime(), tryTimes);
+        // 设置网络参数
+        NET_PARAM netParam = new NET_PARAM();
+        netParam.nConnectTime = properties.getConnectTime();
+        instance.CLIENT_SetNetworkParam(netParam);
+        return true;
+    }
+
+    /**
+     * 初始化
+     */
+    @PostConstruct
+    public void init() {
+        init(new DefaultDisConnect(), new DefaultHaveReConnect());
+    }
+
+    /**
+     * 清除环境
+     */
+    @PreDestroy
+    public void cleanup() {
+        if (initialized) {
+            instance.CLIENT_Cleanup();
+        }
+    }
+
+    private class DefaultDisConnect implements fDisConnect {
+        @Override
+        public void invoke(NativeLong m_hLoginHandle, String pchDVRIP, int nDVRPort, NativeLong dwUser) {
+            logger.warn("Device[{}] Port[{}] DisConnect", pchDVRIP, nDVRPort);
+            SpringContextHolder.getContext().publishEvent(new DeviceDisconnectEvent(this,
+                    new DeviceId(pchDVRIP, nDVRPort)));
+            // 其他地方可通过监听 DeviceDisconnectEvent 来扩展
+        }
+    }
+
+    private class DefaultHaveReConnect implements fHaveReConnect {
+        @Override
+        public void invoke(NativeLong m_hLoginHandle, String pchDVRIP, int nDVRPort, NativeLong dwUser) {
+            logger.warn("Device[{}] Port[{}] ReConnect", pchDVRIP, nDVRPort);
+            SpringContextHolder.getContext().publishEvent(new DeviceReconnectEvent(this,
+                    new DeviceId(pchDVRIP, nDVRPort)));
+            // 其他地方可通过监听 DeviceReconnectEvent 来扩展
+        }
+    }
+}

+ 1058 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaSdkError.java

@@ -0,0 +1,1058 @@
+package com.usoftchina.smartschool.device.dahua.lib;
+
+/**
+ * 大华sdk错误码
+ *
+ * @author yingp
+ * @date 2019/2/15
+ */
+public enum DahuaSdkError {
+    /**
+     * 没有错误
+     */
+    NET_NOERROR(0),
+    /**
+     * 未知错误
+     */
+    NET_ERROR(-1),
+    /**
+     * Windows系统出错
+     */
+    NET_SYSTEM_ERROR(0x80000000 | 1),
+    /**
+     * 网络错误,可能是因为网络超时
+     */
+    NET_NETWORK_ERROR(0x80000000 | 2),
+    /**
+     * 设备协议不匹配
+     */
+    NET_DEV_VER_NOMATCH(0x80000000 | 3),
+    /**
+     * 句柄无效
+     */
+    NET_INVALID_HANDLE(0x80000000 | 4),
+    /**
+     * 打开通道失败
+     */
+    NET_OPEN_CHANNEL_ERROR(0x80000000 | 5),
+    /**
+     * 关闭通道失败
+     */
+    NET_CLOSE_CHANNEL_ERROR(0x80000000 | 6),
+    /**
+     * 用户参数不合法
+     */
+    NET_ILLEGAL_PARAM(0x80000000 | 7),
+    /**
+     * SDK初始化出错
+     */
+    NET_SDK_INIT_ERROR(0x80000000 | 8),
+    /**
+     * SDK清理出错
+     */
+    NET_SDK_UNINIT_ERROR(0x80000000 | 9),
+    /**
+     * 申请render资源出错
+     */
+    NET_RENDER_OPEN_ERROR(0x80000000 | 10),
+    /**
+     * 打开解码库出错
+     */
+    NET_DEC_OPEN_ERROR(0x80000000 | 11),
+    /**
+     * 关闭解码库出错
+     */
+    NET_DEC_CLOSE_ERROR(0x80000000 | 12),
+    /**
+     * 多画面预览中检测到通道数为0
+     */
+    NET_MULTIPLAY_NOCHANNEL(0x80000000 | 13),
+    /**
+     * 录音库初始化失败
+     */
+    NET_TALK_INIT_ERROR(0x80000000 | 14),
+    /**
+     * 录音库未经初始化
+     */
+    NET_TALK_NOT_INIT(0x80000000 | 15),
+    /**
+     * 发送音频数据出错
+     */
+    NET_TALK_SENDDATA_ERROR(0x80000000 | 16),
+    /**
+     * 实时数据已经处于保存状态
+     */
+    NET_REAL_ALREADY_SAVING(0x80000000 | 17),
+    /**
+     * 未保存实时数据
+     */
+    NET_NOT_SAVING(0x80000000 | 18),
+    /**
+     * 打开文件出错
+     */
+    NET_OPEN_FILE_ERROR(0x80000000 | 19),
+    /**
+     * 启动云台控制定时器失败
+     */
+    NET_PTZ_SET_TIMER_ERROR(0x80000000 | 20),
+    /**
+     * 对返回数据的校验出错
+     */
+    NET_RETURN_DATA_ERROR(0x80000000 | 21),
+    /**
+     * 没有足够的缓存
+     */
+    NET_INSUFFICIENT_BUFFER(0x80000000 | 22),
+    /**
+     * 当前SDK未支持该功能
+     */
+    NET_NOT_SUPPORTED(0x80000000 | 23),
+    /**
+     * 查询不到录像
+     */
+    NET_NO_RECORD_FOUND(0x80000000 | 24),
+    /**
+     * 无操作权限
+     */
+    NET_NOT_AUTHORIZED(0x80000000 | 25),
+    /**
+     * 暂时无法执行
+     */
+    NET_NOT_NOW(0x80000000 | 26),
+    /**
+     * 未发现对讲通道
+     */
+    NET_NO_TALK_CHANNEL(0x80000000 | 27),
+    /**
+     * 未发现音频
+     */
+    NET_NO_AUDIO(0x80000000 | 28),
+    /**
+     * 网络SDK未经初始化
+     */
+    NET_NO_INIT(0x80000000 | 29),
+    /**
+     * 下载已结束
+     */
+    NET_DOWNLOAD_END(0x80000000 | 30),
+    /**
+     * 查询结果为空
+     */
+    NET_EMPTY_LIST(0x80000000 | 31),
+    /**
+     * 获取系统属性配置失败
+     */
+    NET_ERROR_GETCFG_SYSATTR(0x80000000 | 32),
+    /**
+     * 获取序列号失败
+     */
+    NET_ERROR_GETCFG_SERIAL(0x80000000 | 33),
+    /**
+     * 获取常规属性失败
+     */
+    NET_ERROR_GETCFG_GENERAL(0x80000000 | 34),
+    /**
+     * 获取DSP能力描述失败
+     */
+    NET_ERROR_GETCFG_DSPCAP(0x80000000 | 35),
+    /**
+     * 获取网络配置失败
+     */
+    NET_ERROR_GETCFG_NETCFG(0x80000000 | 36),
+    /**
+     * 获取通道名称失败
+     */
+    NET_ERROR_GETCFG_CHANNAME(0x80000000 | 37),
+    /**
+     * 获取视频属性失败
+     */
+    NET_ERROR_GETCFG_VIDEO(0x80000000 | 38),
+    /**
+     * 获取录象配置失败
+     */
+    NET_ERROR_GETCFG_RECORD(0x80000000 | 39),
+    /**
+     * 获取解码器协议名称失败
+     */
+    NET_ERROR_GETCFG_PRONAME(0x80000000 | 40),
+    /**
+     * 获取232串口功能名称失败
+     */
+    NET_ERROR_GETCFG_FUNCNAME(0x80000000 | 41),
+    /**
+     * 获取解码器属性失败
+     */
+    NET_ERROR_GETCFG_485DECODER(0x80000000 | 42),
+    /**
+     * 获取232串口配置失败
+     */
+    NET_ERROR_GETCFG_232COM(0x80000000 | 43),
+    /**
+     * 获取外部报警输入配置失败
+     */
+    NET_ERROR_GETCFG_ALARMIN(0x80000000 | 44),
+    /**
+     * 获取动态检测报警失败
+     */
+    NET_ERROR_GETCFG_ALARMDET(0x80000000 | 45),
+    /**
+     * 获取设备时间失败
+     */
+    NET_ERROR_GETCFG_SYSTIME(0x80000000 | 46),
+    /**
+     * 获取预览参数失败
+     */
+    NET_ERROR_GETCFG_PREVIEW(0x80000000 | 47),
+    /**
+     * 获取自动维护配置失败
+     */
+    NET_ERROR_GETCFG_AUTOMT(0x80000000 | 48),
+    /**
+     * 获取视频矩阵配置失败
+     */
+    NET_ERROR_GETCFG_VIDEOMTRX(0x80000000 | 49),
+    /**
+     * 获取区域遮挡配置失败
+     */
+    NET_ERROR_GETCFG_COVER(0x80000000 | 50),
+    /**
+     * 获取图象水印配置失败
+     */
+    NET_ERROR_GETCFG_WATERMAKE(0x80000000 | 51),
+    /**
+     * 修改常规属性失败
+     */
+    NET_ERROR_SETCFG_GENERAL(0x80000000 | 55),
+    /**
+     * 修改网络配置失败
+     */
+    NET_ERROR_SETCFG_NETCFG(0x80000000 | 56),
+    /**
+     * 修改通道名称失败
+     */
+    NET_ERROR_SETCFG_CHANNAME(0x80000000 | 57),
+    /**
+     * 修改视频属性失败
+     */
+    NET_ERROR_SETCFG_VIDEO(0x80000000 | 58),
+    /**
+     * 修改录像配置失败
+     */
+    NET_ERROR_SETCFG_RECORD(0x80000000 | 59),
+    /**
+     * 修改解码器属性失败
+     */
+    NET_ERROR_SETCFG_485DECODER(0x80000000 | 60),
+    /**
+     * 修改232串口配置失败
+     */
+    NET_ERROR_SETCFG_232COM(0x80000000 | 61),
+    /**
+     * 修改外部输入报警配置失败
+     */
+    NET_ERROR_SETCFG_ALARMIN(0x80000000 | 62),
+    /**
+     * 修改动态检测报警配置失败
+     */
+    NET_ERROR_SETCFG_ALARMDET(0x80000000 | 63),
+    /**
+     * 修改设备时间失败
+     */
+    NET_ERROR_SETCFG_SYSTIME(0x80000000 | 64),
+    /**
+     * 修改预览参数失败
+     */
+    NET_ERROR_SETCFG_PREVIEW(0x80000000 | 65),
+    /**
+     * 修改自动维护配置失败
+     */
+    NET_ERROR_SETCFG_AUTOMT(0x80000000 | 66),
+    /**
+     * 修改视频矩阵配置失败
+     */
+    NET_ERROR_SETCFG_VIDEOMTRX(0x80000000 | 67),
+    /**
+     * 修改区域遮挡配置失败
+     */
+    NET_ERROR_SETCFG_COVER(0x80000000 | 68),
+    /**
+     * 修改图象水印配置失败
+     */
+    NET_ERROR_SETCFG_WATERMAKE(0x80000000 | 69),
+    /**
+     * 修改无线网络信息失败
+     */
+    NET_ERROR_SETCFG_WLAN(0x80000000 | 70),
+    /**
+     * 选择无线网络设备失败
+     */
+    NET_ERROR_SETCFG_WLANDEV(0x80000000 | 71),
+    /**
+     * 修改主动注册参数配置失败
+     */
+    NET_ERROR_SETCFG_REGISTER(0x80000000 | 72),
+    /**
+     * 修改摄像头属性配置失败
+     */
+    NET_ERROR_SETCFG_CAMERA(0x80000000 | 73),
+    /**
+     * 修改红外报警配置失败
+     */
+    NET_ERROR_SETCFG_INFRARED(0x80000000 | 74),
+    /**
+     * 修改音频报警配置失败
+     */
+    NET_ERROR_SETCFG_SOUNDALARM(0x80000000 | 75),
+    /**
+     * 修改存储位置配置失败
+     */
+    NET_ERROR_SETCFG_STORAGE(0x80000000 | 76),
+    /**
+     * 音频编码接口没有成功初始化
+     */
+    NET_AUDIOENCODE_NOTINIT(0x80000000 | 77),
+    /**
+     * 数据过长
+     */
+    NET_DATA_TOOLONGH(0x80000000 | 78),
+    /**
+     * 设备不支持该操作
+     */
+    NET_UNSUPPORTED(0x80000000 | 79),
+    /**
+     * 设备资源不足
+     */
+    NET_DEVICE_BUSY(0x80000000 | 80),
+    /**
+     * 服务器已经启动
+     */
+    NET_SERVER_STARTED(0x80000000 | 81),
+    /**
+     * 服务器尚未成功启动
+     */
+    NET_SERVER_STOPPED(0x80000000 | 82),
+    /**
+     * 输入序列号有误
+     */
+    NET_LISTER_INCORRECT_SERIAL(0x80000000 | 83),
+    /**
+     * 获取硬盘信息失败
+     */
+    NET_QUERY_DISKINFO_FAILED(0x80000000 | 84),
+    /**
+     * 获取连接Session信息
+     */
+    NET_ERROR_GETCFG_SESSION(0x80000000 | 85),
+    /**
+     * 输入密码错误超过限制次数
+     */
+    NET_USER_FLASEPWD_TRYTIME(0x80000000 | 86),
+    /**
+     * 密码不正确
+     */
+    NET_LOGIN_ERROR_PASSWORD(0x80000000 | 100),
+    /**
+     * 帐户不存在
+     */
+    NET_LOGIN_ERROR_USER(0x80000000 | 101),
+    /**
+     * 等待登录返回超时
+     */
+    NET_LOGIN_ERROR_TIMEOUT(0x80000000 | 102),
+    /**
+     * 帐号已登录
+     */
+    NET_LOGIN_ERROR_RELOGGIN(0x80000000 | 103),
+    /**
+     * 帐号已被锁定
+     */
+    NET_LOGIN_ERROR_LOCKED(0x80000000 | 104),
+    /**
+     * 帐号已被列为黑名单
+     */
+    NET_LOGIN_ERROR_BLACKLIST(0x80000000 | 105),
+    /**
+     * 资源不足,系统忙
+     */
+    NET_LOGIN_ERROR_BUSY(0x80000000 | 106),
+    /**
+     * 登录设备超时,请检查网络并重试
+     */
+    NET_LOGIN_ERROR_CONNECT(0x80000000 | 107),
+    /**
+     * 网络连接失败
+     */
+    NET_LOGIN_ERROR_NETWORK(0x80000000 | 108),
+    /**
+     * 登录设备成功,但无法创建视频通道,请检查网络状况
+     */
+    NET_LOGIN_ERROR_SUBCONNECT(0x80000000 | 109),
+    /**
+     * 超过最大连接数
+     */
+    NET_LOGIN_ERROR_MAXCONNECT(0x80000000 | 110),
+    /**
+     * 只支持3代协议
+     */
+    NET_LOGIN_ERROR_PROTOCOL3_ONLY(0x80000000 | 111),
+    /**
+     * 未插入U盾或U盾信息错误
+     */
+    NET_LOGIN_ERROR_UKEY_LOST(0x80000000 | 112),
+    /**
+     * 客户端IP地址没有登录权限
+     */
+    NET_LOGIN_ERROR_NO_AUTHORIZED(0x80000000 | 113),
+    /**
+     * 账号或密码错误
+     */
+    NET_LOGIN_ERROR_USER_OR_PASSOWRD(0x80000000 | 117),
+    /**
+     * Render库打开音频出错
+     */
+    NET_RENDER_SOUND_ON_ERROR(0x80000000 | 120),
+    /**
+     * Render库关闭音频出错
+     */
+    NET_RENDER_SOUND_OFF_ERROR(0x80000000 | 121),
+    /**
+     * Render库控制音量出错
+     */
+    NET_RENDER_SET_VOLUME_ERROR(0x80000000 | 122),
+    /**
+     * Render库设置画面参数出错
+     */
+    NET_RENDER_ADJUST_ERROR(0x80000000 | 123),
+    /**
+     * Render库暂停播放出错
+     */
+    NET_RENDER_PAUSE_ERROR(0x80000000 | 124),
+    /**
+     * Render库抓图出错
+     */
+    NET_RENDER_SNAP_ERROR(0x80000000 | 125),
+    /**
+     * Render库步进出错
+     */
+    NET_RENDER_STEP_ERROR(0x80000000 | 126),
+    /**
+     * Render库设置帧率出错
+     */
+    NET_RENDER_FRAMERATE_ERROR(0x80000000 | 127),
+    /**
+     * Render库设置显示区域出错
+     */
+    NET_RENDER_DISPLAYREGION_ERROR(0x80000000 | 128),
+    /**
+     * 组名已存在
+     */
+    NET_GROUP_EXIST(0x80000000 | 140),
+    /**
+     * 组名不存在
+     */
+    NET_GROUP_NOEXIST(0x80000000 | 141),
+    /**
+     * 组的权限超出权限列表范围
+     */
+    NET_GROUP_RIGHTOVER(0x80000000 | 142),
+    /**
+     * 组下有用户,不能删除
+     */
+    NET_GROUP_HAVEUSER(0x80000000 | 143),
+    /**
+     * 组的某个权限被用户使用,不能出除
+     */
+    NET_GROUP_RIGHTUSE(0x80000000 | 144),
+    /**
+     * 新组名同已有组名重复
+     */
+    NET_GROUP_SAMENAME(0x80000000 | 145),
+    /**
+     * 用户已存在
+     */
+    NET_USER_EXIST(0x80000000 | 146),
+    /**
+     * 用户不存在
+     */
+    NET_USER_NOEXIST(0x80000000 | 147),
+    /**
+     * 用户权限超出组权限
+     */
+    NET_USER_RIGHTOVER(0x80000000 | 148),
+    /**
+     * 保留帐号,不容许修改密码
+     */
+    NET_USER_PWD(0x80000000 | 149),
+    /**
+     * 密码不正确
+     */
+    NET_USER_FLASEPWD(0x80000000 | 150),
+    /**
+     * 密码不匹配
+     */
+    NET_USER_NOMATCHING(0x80000000 | 151),
+    /**
+     * 账号正在使用中
+     */
+    NET_USER_INUSE(0x80000000 | 152),
+    /**
+     * 获取网卡配置失败
+     */
+    NET_ERROR_GETCFG_ETHERNET(0x80000000 | 300),
+    /**
+     * 获取无线网络信息失败
+     */
+    NET_ERROR_GETCFG_WLAN(0x80000000 | 301),
+    /**
+     * 获取无线网络设备失败
+     */
+    NET_ERROR_GETCFG_WLANDEV(0x80000000 | 302),
+    /**
+     * 获取主动注册参数失败
+     */
+    NET_ERROR_GETCFG_REGISTER(0x80000000 | 303),
+    /**
+     * 获取摄像头属性失败
+     */
+    NET_ERROR_GETCFG_CAMERA(0x80000000 | 304),
+    /**
+     * 获取红外报警配置失败
+     */
+    NET_ERROR_GETCFG_INFRARED(0x80000000 | 305),
+    /**
+     * 获取音频报警配置失败
+     */
+    NET_ERROR_GETCFG_SOUNDALARM(0x80000000 | 306),
+    /**
+     * 获取存储位置配置失败
+     */
+    NET_ERROR_GETCFG_STORAGE(0x80000000 | 307),
+    /**
+     * 获取邮件配置失败
+     */
+    NET_ERROR_GETCFG_MAIL(0x80000000 | 308),
+    /**
+     * 暂时无法设置
+     */
+    NET_CONFIG_DEVBUSY(0x80000000 | 309),
+    /**
+     * 配置数据不合法
+     */
+    NET_CONFIG_DATAILLEGAL(0x80000000 | 310),
+    /**
+     * 获取夏令时配置失败
+     */
+    NET_ERROR_GETCFG_DST(0x80000000 | 311),
+    /**
+     * 设置夏令时配置失败
+     */
+    NET_ERROR_SETCFG_DST(0x80000000 | 312),
+    /**
+     * 获取视频OSD叠加配置失败
+     */
+    NET_ERROR_GETCFG_VIDEO_OSD(0x80000000 | 313),
+    /**
+     * 设置视频OSD叠加配置失败
+     */
+    NET_ERROR_SETCFG_VIDEO_OSD(0x80000000 | 314),
+    /**
+     * 获取CDMA\GPRS网络配置失败
+     */
+    NET_ERROR_GETCFG_GPRSCDMA(0x80000000 | 315),
+    /**
+     * 设置CDMA\GPRS网络配置失败
+     */
+    NET_ERROR_SETCFG_GPRSCDMA(0x80000000 | 316),
+    /**
+     * 获取IP过滤配置失败
+     */
+    NET_ERROR_GETCFG_IPFILTER(0x80000000 | 317),
+    /**
+     * 设置IP过滤配置失败
+     */
+    NET_ERROR_SETCFG_IPFILTER(0x80000000 | 318),
+    /**
+     * 获取语音对讲编码配置失败
+     */
+    NET_ERROR_GETCFG_TALKENCODE(0x80000000 | 319),
+    /**
+     * 设置语音对讲编码配置失败
+     */
+    NET_ERROR_SETCFG_TALKENCODE(0x80000000 | 320),
+    /**
+     * 获取录像打包长度配置失败
+     */
+    NET_ERROR_GETCFG_RECORDLEN(0x80000000 | 321),
+    /**
+     * 设置录像打包长度配置失败
+     */
+    NET_ERROR_SETCFG_RECORDLEN(0x80000000 | 322),
+    /**
+     * 不支持网络硬盘分区
+     */
+    NET_DONT_SUPPORT_SUBAREA(0x80000000 | 323),
+    /**
+     * 获取设备上主动注册服务器信息失败
+     */
+    NET_ERROR_GET_AUTOREGSERVER(0x80000000 | 324),
+    /**
+     * 主动注册重定向注册错误
+     */
+    NET_ERROR_CONTROL_AUTOREGISTER(0x80000000 | 325),
+    /**
+     * 断开主动注册服务器错误
+     */
+    NET_ERROR_DISCONNECT_AUTOREGISTER(0x80000000 | 326),
+    /**
+     * 获取mms配置失败
+     */
+    NET_ERROR_GETCFG_MMS(0x80000000 | 327),
+    /**
+     * 设置mms配置失败
+     */
+    NET_ERROR_SETCFG_MMS(0x80000000 | 328),
+    /**
+     * 获取短信激活无线连接配置失败
+     */
+    NET_ERROR_GETCFG_SMSACTIVATION(0x80000000 | 329),
+    /**
+     * 设置短信激活无线连接配置失败
+     */
+    NET_ERROR_SETCFG_SMSACTIVATION(0x80000000 | 330),
+    /**
+     * 获取拨号激活无线连接配置失败
+     */
+    NET_ERROR_GETCFG_DIALINACTIVATION(0x80000000 | 331),
+    /**
+     * 设置拨号激活无线连接配置失败
+     */
+    NET_ERROR_SETCFG_DIALINACTIVATION(0x80000000 | 332),
+    /**
+     * 查询视频输出参数配置失败
+     */
+    NET_ERROR_GETCFG_VIDEOOUT(0x80000000 | 333),
+    /**
+     * 设置视频输出参数配置失败
+     */
+    NET_ERROR_SETCFG_VIDEOOUT(0x80000000 | 334),
+    /**
+     * 获取osd叠加使能配置失败
+     */
+    NET_ERROR_GETCFG_OSDENABLE(0x80000000 | 335),
+    /**
+     * 设置osd叠加使能配置失败
+     */
+    NET_ERROR_SETCFG_OSDENABLE(0x80000000 | 336),
+    /**
+     * 设置数字通道前端编码接入配置失败
+     */
+    NET_ERROR_SETCFG_ENCODERINFO(0x80000000 | 337),
+    /**
+     * 获取TV调节配置失败
+     */
+    NET_ERROR_GETCFG_TVADJUST(0x80000000 | 338),
+    /**
+     * 设置TV调节配置失败
+     */
+    NET_ERROR_SETCFG_TVADJUST(0x80000000 | 339),
+    /**
+     * 请求建立连接失败
+     */
+    NET_ERROR_CONNECT_FAILED(0x80000000 | 340),
+    /**
+     * 请求刻录文件上传失败
+     */
+    NET_ERROR_SETCFG_BURNFILE(0x80000000 | 341),
+    /**
+     * 获取抓包配置信息失败
+     */
+    NET_ERROR_SNIFFER_GETCFG(0x80000000 | 342),
+    /**
+     * 设置抓包配置信息失败
+     */
+    NET_ERROR_SNIFFER_SETCFG(0x80000000 | 343),
+    /**
+     * 查询下载限制信息失败
+     */
+    NET_ERROR_DOWNLOADRATE_GETCFG(0x80000000 | 344),
+    /**
+     * 设置下载限制信息失败
+     */
+    NET_ERROR_DOWNLOADRATE_SETCFG(0x80000000 | 345),
+    /**
+     * 查询串口参数失败
+     */
+    NET_ERROR_SEARCH_TRANSCOM(0x80000000 | 346),
+    /**
+     * 获取预制点信息错误
+     */
+    NET_ERROR_GETCFG_POINT(0x80000000 | 347),
+    /**
+     * 设置预制点信息错误
+     */
+    NET_ERROR_SETCFG_POINT(0x80000000 | 348),
+    /**
+     * SDK没有正常登出设备
+     */
+    NET_SDK_LOGOUT_ERROR(0x80000000 | 349),
+    /**
+     * 获取车载配置失败
+     */
+    NET_ERROR_GET_VEHICLE_CFG(0x80000000 | 350),
+    /**
+     * 设置车载配置失败
+     */
+    NET_ERROR_SET_VEHICLE_CFG(0x80000000 | 351),
+    /**
+     * 获取atm叠加配置失败
+     */
+    NET_ERROR_GET_ATM_OVERLAY_CFG(0x80000000 | 352),
+    /**
+     * 设置atm叠加配置失败
+     */
+    NET_ERROR_SET_ATM_OVERLAY_CFG(0x80000000 | 353),
+    /**
+     * 获取atm叠加能力失败
+     */
+    NET_ERROR_GET_ATM_OVERLAY_ABILITY(0x80000000 | 354),
+    /**
+     * 获取解码器解码轮巡配置失败
+     */
+    NET_ERROR_GET_DECODER_TOUR_CFG(0x80000000 | 355),
+    /**
+     * 设置解码器解码轮巡配置失败
+     */
+    NET_ERROR_SET_DECODER_TOUR_CFG(0x80000000 | 356),
+    /**
+     * 控制解码器解码轮巡失败
+     */
+    NET_ERROR_CTRL_DECODER_TOUR(0x80000000 | 357),
+    /**
+     * 超出设备支持最大用户组数目
+     */
+    NET_GROUP_OVERSUPPORTNUM(0x80000000 | 358),
+    /**
+     * 超出设备支持最大用户数目
+     */
+    NET_USER_OVERSUPPORTNUM(0x80000000 | 359),
+    /**
+     * 获取SIP配置失败
+     */
+    NET_ERROR_GET_SIP_CFG(0x80000000 | 368),
+    /**
+     * 设置SIP配置失败
+     */
+    NET_ERROR_SET_SIP_CFG(0x80000000 | 369),
+    /**
+     * 获取SIP能力失败
+     */
+    NET_ERROR_GET_SIP_ABILITY(0x80000000 | 370),
+    /**
+     * 获取WIFI ap配置失败
+     */
+    NET_ERROR_GET_WIFI_AP_CFG(0x80000000 | 371),
+    /**
+     * 设置WIFI ap配置失败
+     */
+    NET_ERROR_SET_WIFI_AP_CFG(0x80000000 | 372),
+    /**
+     * 获取解码策略配置失败
+     */
+    NET_ERROR_GET_DECODE_POLICY(0x80000000 | 373),
+    /**
+     * 设置解码策略配置失败
+     */
+    NET_ERROR_SET_DECODE_POLICY(0x80000000 | 374),
+    /**
+     * 拒绝对讲
+     */
+    NET_ERROR_TALK_REJECT(0x80000000 | 375),
+    /**
+     * 对讲被其他客户端打开
+     */
+    NET_ERROR_TALK_OPENED(0x80000000 | 376),
+    /**
+     * 资源冲突
+     */
+    NET_ERROR_TALK_RESOURCE_CONFLICIT(0x80000000 | 377),
+    /**
+     * 不支持的语音编码格式
+     */
+    NET_ERROR_TALK_UNSUPPORTED_ENCODE(0x80000000 | 378),
+    /**
+     * 无权限
+     */
+    NET_ERROR_TALK_RIGHTLESS(0x80000000 | 379),
+    /**
+     * 请求对讲失败
+     */
+    NET_ERROR_TALK_FAILED(0x80000000 | 380),
+    /**
+     * 获取机器相关配置失败
+     */
+    NET_ERROR_GET_MACHINE_CFG(0x80000000 | 381),
+    /**
+     * 设置机器相关配置失败
+     */
+    NET_ERROR_SET_MACHINE_CFG(0x80000000 | 382),
+    /**
+     * 设备无法获取当前请求数据
+     */
+    NET_ERROR_GET_DATA_FAILED(0x80000000 | 383),
+    /**
+     * MAC地址验证失败
+     */
+    NET_ERROR_MAC_VALIDATE_FAILED(0x80000000 | 384),
+    /**
+     * 获取服务器实例失败
+     */
+    NET_ERROR_GET_INSTANCE(0x80000000 | 385),
+    /**
+     * 生成的json字符串错误
+     */
+    NET_ERROR_JSON_REQUEST(0x80000000 | 386),
+    /**
+     * 响应的json字符串错误
+     */
+    NET_ERROR_JSON_RESPONSE(0x80000000 | 387),
+    /**
+     * 协议版本低于当前使用的版本
+     */
+    NET_ERROR_VERSION_HIGHER(0x80000000 | 388),
+    /**
+     * 热备操作失败, 容量不足
+     */
+    NET_SPARE_NO_CAPACITY(0x80000000 | 389),
+    /**
+     * 显示源被其他输出占用
+     */
+    NET_ERROR_SOURCE_IN_USE(0x80000000 | 390),
+    /**
+     * 高级用户抢占低级用户资源
+     */
+    NET_ERROR_REAVE(0x80000000 | 391),
+    /**
+     * 禁止入网
+     */
+    NET_ERROR_NETFORBID(0x80000000 | 392),
+    /**
+     * 获取MAC过滤配置失败
+     */
+    NET_ERROR_GETCFG_MACFILTER(0x80000000 | 393),
+    /**
+     * 设置MAC过滤配置失败
+     */
+    NET_ERROR_SETCFG_MACFILTER(0x80000000 | 394),
+    /**
+     * 获取IP/MAC过滤配置失败
+     */
+    NET_ERROR_GETCFG_IPMACFILTER(0x80000000 | 395),
+    /**
+     * 设置IP/MAC过滤配置失败
+     */
+    NET_ERROR_SETCFG_IPMACFILTER(0x80000000 | 396),
+    /**
+     * 当前操作超时
+     */
+    NET_ERROR_OPERATION_OVERTIME(0x80000000 | 397),
+    /**
+     * 高级校验失败
+     */
+    NET_ERROR_SENIOR_VALIDATE_FAILED(0x80000000 | 398),
+    /**
+     * 设备ID不存在
+     */
+    NET_ERROR_DEVICE_ID_NOT_EXIST(0x80000000 | 399),
+    /**
+     * 不支持当前操作
+     */
+    NET_ERROR_UNSUPPORTED(0x80000000 | 400),
+    /**
+     * 代理库加载失败
+     */
+    NET_ERROR_PROXY_DLLLOAD(0x80000000 | 401),
+    /**
+     * 代理用户参数不合法
+     */
+    NET_ERROR_PROXY_ILLEGAL_PARAM(0x80000000 | 402),
+    /**
+     * 代理句柄无效
+     */
+    NET_ERROR_PROXY_INVALID_HANDLE(0x80000000 | 403),
+    /**
+     * 代理登入前端设备失败
+     */
+    NET_ERROR_PROXY_LOGIN_DEVICE_ERROR(0x80000000 | 404),
+    /**
+     * 启动代理服务失败
+     */
+    NET_ERROR_PROXY_START_SERVER_ERROR(0x80000000 | 405),
+    /**
+     * 请求喊话失败
+     */
+    NET_ERROR_SPEAK_FAILED(0x80000000 | 406),
+    /**
+     * 设备不支持此F6接口调用
+     */
+    NET_ERROR_NOT_SUPPORT_F6(0x80000000 | 407),
+    /**
+     * 光盘未就绪
+     */
+    NET_ERROR_CD_UNREADY(0x80000000 | 408),
+    /**
+     * 目录不存在
+     */
+    NET_ERROR_DIR_NOT_EXIST(0x80000000 | 409),
+    /**
+     * 设备不支持的分割模式
+     */
+    NET_ERROR_UNSUPPORTED_SPLIT_MODE(0x80000000 | 410),
+    /**
+     * 开窗参数不合法
+     */
+    NET_ERROR_OPEN_WND_PARAM(0x80000000 | 411),
+    /**
+     * 开窗数量超过限制
+     */
+    NET_ERROR_LIMITED_WND_COUNT(0x80000000 | 412),
+    /**
+     * 请求命令与当前模式不匹配
+     */
+    NET_ERROR_UNMATCHED_REQUEST(0x80000000 | 413),
+    /**
+     * Render库启用高清图像内部调整策略出错
+     */
+    NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR(0x80000000 | 414),
+    /**
+     * 设备升级失败
+     */
+    NET_ERROR_UPGRADE_FAILED(0x80000000 | 415),
+    /**
+     * 找不到目标设备
+     */
+    NET_ERROR_NO_TARGET_DEVICE(0x80000000 | 416),
+    /**
+     * 找不到目标设备
+     */
+    NET_ERROR_NO_VERIFY_DEVICE(0x80000000 | 417),
+    /**
+     * 无级联权限
+     */
+    NET_ERROR_CASCADE_RIGHTLESS(0x80000000 | 418),
+    /**
+     * 低优先级
+     */
+    NET_ERROR_LOW_PRIORITY(0x80000000 | 419),
+    /**
+     * 远程设备请求超时
+     */
+    NET_ERROR_REMOTE_REQUEST_TIMEOUT(0x80000000 | 420),
+    /**
+     * 输入源超出最大路数限制
+     */
+    NET_ERROR_LIMITED_INPUT_SOURCE(0x80000000 | 421),
+    /**
+     * 设置日志打印失败
+     */
+    NET_ERROR_SET_LOG_PRINT_INFO(0x80000000 | 422),
+    /**
+     * 入参的dwsize字段出错
+     */
+    NET_ERROR_PARAM_DWSIZE_ERROR(0x80000000 | 423),
+    /**
+     * 电视墙数量超过上限
+     */
+    NET_ERROR_LIMITED_MONITORWALL_COUNT(0x80000000 | 424),
+    /**
+     * 部分过程执行失败
+     */
+    NET_ERROR_PART_PROCESS_FAILED(0x80000000 | 425),
+    /**
+     * 该功能不支持转发
+     */
+    NET_ERROR_TARGET_NOT_SUPPORT(0x80000000 | 426),
+    /**
+     * 访问文件失败
+     */
+    NET_ERROR_VISITE_FILE(0x80000000 | 510),
+    /**
+     * 设备忙
+     */
+    NET_ERROR_DEVICE_STATUS_BUSY(0x80000000 | 511),
+    /**
+     * 修改密码无权限
+     */
+    NET_USER_PWD_NOT_AUTHORIZED(0x80000000 | 512),
+    /**
+     * 密码强度不够
+     */
+    NET_USER_PWD_NOT_STRONG(0x80000000 | 513),
+    /**
+     * 没有对应的配置
+     */
+    NET_ERROR_NO_SUCH_CONFIG(0x80000000 | 514),
+    /**
+     * 录音失败
+     */
+    NET_ERROR_AUDIO_RECORD_FAILED(0x80000000 | 515),
+    /**
+     * 数据发送失败
+     */
+    NET_ERROR_SEND_DATA_FAILED(0x80000000 | 516),
+    /**
+     * 废弃接口
+     */
+    NET_ERROR_OBSOLESCENT_INTERFACE(0x80000000 | 517),
+    /**
+     * 内部缓冲不足
+     */
+    NET_ERROR_INSUFFICIENT_INTERAL_BUF(0x80000000 | 518),
+    /**
+     * 修改设备ip时,需要校验密码
+     */
+    NET_ERROR_NEED_ENCRYPTION_PASSWORD(0x80000000 | 519),
+    /**
+     * 数据序列化错误
+     */
+    NET_ERROR_SERIALIZE_ERROR(0x80000000 | 1010),
+    /**
+     * 数据反序列化错误
+     */
+    NET_ERROR_DESERIALIZE_ERROR(0x80000000 | 1011),
+    /**
+     * 该无线ID已存在
+     */
+    NET_ERROR_LOWRATEWPAN_ID_EXISTED(0x80000000 | 1012),
+    /**
+     * 无线ID数量已超限
+     */
+    NET_ERROR_LOWRATEWPAN_ID_LIMIT(0x80000000 | 1013),
+    /**
+     * 无线异常添加
+     */
+    NET_ERROR_LOWRATEWPAN_ID_ABNORMAL(0x80000000 | 1014);
+
+    final int code;
+
+    DahuaSdkError(int code) {
+        this.code = code;
+    }
+
+    public static DahuaSdkError of(int code) {
+        for (DahuaSdkError err : DahuaSdkError.values()) {
+            if (err.code == code) {
+                return err;
+            }
+        }
+        return NET_ERROR;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    @Override
+    public String toString() {
+        return name();
+    }
+}

+ 18 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaSdkException.java

@@ -0,0 +1,18 @@
+package com.usoftchina.smartschool.device.dahua.lib;
+
+/**
+ * @author yingp
+ * @date 2019/3/8
+ */
+public class DahuaSdkException extends RuntimeException{
+    private final DahuaSdkError error;
+
+    public DahuaSdkException(DahuaSdkError error) {
+        super(error.toString());
+        this.error = error;
+    }
+
+    public DahuaSdkError getError() {
+        return error;
+    }
+}

+ 18 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaAccessControlCardService.java

@@ -0,0 +1,18 @@
+package com.usoftchina.smartschool.device.dahua.service;
+
+import com.usoftchina.smartschool.device.api.AccessControlCardApi;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdk;
+
+/**
+ * 大华设备 - 门禁卡服务
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public class DahuaAccessControlCardService implements AccessControlCardApi {
+    private final DahuaSdk sdk;
+
+    public DahuaAccessControlCardService(DahuaSdk sdk) {
+        this.sdk = sdk;
+    }
+}

+ 18 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaAccessControlRecordService.java

@@ -0,0 +1,18 @@
+package com.usoftchina.smartschool.device.dahua.service;
+
+import com.usoftchina.smartschool.device.api.AccessControlRecordApi;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdk;
+
+/**
+ * 大华设备 - 门禁记录服务
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public class DahuaAccessControlRecordService implements AccessControlRecordApi {
+    private final DahuaSdk sdk;
+
+    public DahuaAccessControlRecordService(DahuaSdk sdk) {
+        this.sdk = sdk;
+    }
+}

+ 223 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaDataAnalyzeService.java

@@ -0,0 +1,223 @@
+package com.usoftchina.smartschool.device.dahua.service;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+
+import com.usoftchina.smartschool.context.SpringContextHolder;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaEvents;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaLibrary.*;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdk;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdkException;
+import com.usoftchina.smartschool.device.dto.AccessControlInfo;
+import com.usoftchina.smartschool.device.event.AccessControlEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 智能数据接口
+ *
+ * @author yingp
+ * @date 2019/3/8
+ */
+public class DahuaDataAnalyzeService {
+
+    private final DahuaSdk sdk;
+    /**
+     * 多个登录设备的监听句柄
+     */
+    private Map<Long, NativeLong> analyzerHandles;
+    private final Logger logger = LoggerFactory.getLogger(DahuaDataAnalyzeService.class);
+
+    public DahuaDataAnalyzeService(DahuaSdk sdk) {
+        this.sdk = sdk;
+        this.analyzerHandles = new HashMap<>();
+    }
+
+    /**
+     * 启动智能数据监听
+     *
+     * @param loginHandle 登录句柄
+     */
+    public void startListen(NativeLong loginHandle) {
+        long key = loginHandle.longValue();
+        if (key != 0 && !analyzerHandles.containsKey(key)) {
+            NativeLong lAnalyzerHandle = sdk.getInstance().CLIENT_RealLoadPictureEx(loginHandle, 0,
+                    DahuaEvents.EVENT_IVS_ALL, true, new AnalyzerDataCallBack(), new NativeLong(), null);
+            analyzerHandles.put(key, lAnalyzerHandle);
+        }
+    }
+
+    /**
+     * 智能分析数据回调
+     */
+    class AnalyzerDataCallBack implements fAnalyzerDataCallBack {
+        @Override
+        public void invoke(NativeLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer,
+                           int dwBufSize, NativeLong dwUser, int nSequence, Pointer reserved) {
+            switch (dwAlarmType) {
+                /**
+                 * 门禁事件
+                 */
+                case DahuaEvents.EVENT_IVS_ACCESS_CTL:
+                    DEV_EVENT_ACCESS_CTL_INFO info = new DEV_EVENT_ACCESS_CTL_INFO(pAlarmInfo);
+                    AccessControlInfo accessControlInfo = new AccessControlInfo();
+                    if (dwBufSize > 0) {
+                        accessControlInfo.setImageBuffer(pBuffer.getByteArray(0, dwBufSize));
+                    }
+                    accessControlInfo.setCardNo(new String(info.szCardNo));
+                    accessControlInfo.setEventType(convertEventType(info.emEventType));
+                    accessControlInfo.setOpenMethod(convertOpenMethod(info.emOpenMethod));
+                    accessControlInfo.setEventTime(info.UTC.toDateTime());
+                    SpringContextHolder.getContext().publishEvent(new AccessControlEvent(this,
+                            accessControlInfo));
+                    // 其他地方可通过监听 AccessControlEvent 来扩展
+                    break;
+                /**
+                 * TODO 其他需要处理的硬件设备事件在此添加
+                 */
+                default:
+                    logger.warn("Received unresolved event {}", dwAlarmType);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * 停止监听
+     *
+     * @param loginHandle 登录句柄
+     */
+    public void stopListen(NativeLong loginHandle) {
+        long key = loginHandle.longValue();
+        if (key != 0 && analyzerHandles.containsKey(key)) {
+            boolean bRet = sdk.getInstance().CLIENT_StopLoadPic(analyzerHandles.get(key));
+            if (!bRet) {
+                throw new DahuaSdkException(sdk.getLastError());
+            }
+        }
+    }
+
+    /**
+     * 将大华sdk的事件类型对应到标准接口提供的事件类型
+     *
+     * @param sdkEventType 大华sdk的事件类型
+     * @return
+     */
+    private int convertEventType(int sdkEventType) {
+        switch (sdkEventType) {
+            case NET_ACCESS_CTL_EVENT_TYPE.NET_ACCESS_CTL_EVENT_UNKNOWN:
+                return AccessControlInfo.EventType.UNKNOWN;
+            case NET_ACCESS_CTL_EVENT_TYPE.NET_ACCESS_CTL_EVENT_ENTRY:
+                return AccessControlInfo.EventType.ENTRY;
+            case NET_ACCESS_CTL_EVENT_TYPE.NET_ACCESS_CTL_EVENT_EXIT:
+                return AccessControlInfo.EventType.EXIT;
+            default:
+                return AccessControlInfo.EventType.UNKNOWN;
+        }
+    }
+
+    /**
+     * 将大华sdk的开门方式对应到标准接口提供的开门方式
+     *
+     * @param sdkOpenMethod
+     * @return
+     */
+    private int convertOpenMethod(int sdkOpenMethod) {
+        switch (sdkOpenMethod) {
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_UNKNOWN:
+                return AccessControlInfo.OpenMethod.UNKNOWN;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY:
+                return AccessControlInfo.OpenMethod.PWD_ONLY;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD:
+                return AccessControlInfo.OpenMethod.CARD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST:
+                return AccessControlInfo.OpenMethod.CARD_FIRST;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST:
+                return AccessControlInfo.OpenMethod.PWD_FIRST;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE:
+                return AccessControlInfo.OpenMethod.REMOTE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BUTTON:
+                return AccessControlInfo.OpenMethod.BUTTON;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT:
+                return AccessControlInfo.OpenMethod.FINGERPRINT;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT:
+                return AccessControlInfo.OpenMethod.PWD_CARD_FINGERPRINT;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT:
+                return AccessControlInfo.OpenMethod.PWD_FINGERPRINT;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT:
+                return AccessControlInfo.OpenMethod.CARD_FINGERPRINT;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PERSONS:
+                return AccessControlInfo.OpenMethod.PERSONS;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_KEY:
+                return AccessControlInfo.OpenMethod.KEY;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD:
+                return AccessControlInfo.OpenMethod.COERCE_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_QRCODE:
+                return AccessControlInfo.OpenMethod.QRCODE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION:
+                return AccessControlInfo.OpenMethod.FACE_RECOGNITION;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD:
+                return AccessControlInfo.OpenMethod.FACEIDCARD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD:
+                return AccessControlInfo.OpenMethod.FACEIDCARD_AND_IDCARD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH:
+                return AccessControlInfo.OpenMethod.BLUETOOTH;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD:
+                return AccessControlInfo.OpenMethod.CUSTOM_PASSWORD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD:
+                return AccessControlInfo.OpenMethod.USERID_AND_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD:
+                return AccessControlInfo.OpenMethod.FACE_AND_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD:
+                return AccessControlInfo.OpenMethod.FINGERPRINT_AND_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE:
+                return AccessControlInfo.OpenMethod.FINGERPRINT_AND_FACE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE:
+                return AccessControlInfo.OpenMethod.CARD_AND_FACE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD:
+                return AccessControlInfo.OpenMethod.FACE_OR_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD:
+                return AccessControlInfo.OpenMethod.FINGERPRINT_OR_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE:
+                return AccessControlInfo.OpenMethod.FINGERPRINT_OR_FACE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE:
+                return AccessControlInfo.OpenMethod.CARD_OR_FACE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT:
+                return AccessControlInfo.OpenMethod.CARD_OR_FINGERPRINT;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD:
+                return AccessControlInfo.OpenMethod.FINGERPRINT_AND_FACE_AND_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD:
+                return AccessControlInfo.OpenMethod.CARD_AND_FACE_AND_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD:
+                return AccessControlInfo.OpenMethod.CARD_AND_FINGERPRINT_AND_FACE_AND_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE:
+                return AccessControlInfo.OpenMethod.CARD_AND_PWD_AND_FACE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD:
+                return AccessControlInfo.OpenMethod.FINGERPRINT_OR_FACE_OR_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD:
+                return AccessControlInfo.OpenMethod.CARD_OR_FACE_OR_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE:
+                return AccessControlInfo.OpenMethod.CARD_OR_FINGERPRINT_OR_FACE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD:
+                return AccessControlInfo.OpenMethod.CARD_AND_FINGERPRINT_AND_FACE_AND_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD:
+                return AccessControlInfo.OpenMethod.CARD_OR_FINGERPRINT_OR_FACE_OR_PWD;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE:
+                return AccessControlInfo.OpenMethod.FACEIPCARDANDIDCARD_OR_CARD_OR_FACE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE:
+                return AccessControlInfo.OpenMethod.FACEIDCARD_OR_CARD_OR_FACE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_DTMF:
+                return AccessControlInfo.OpenMethod.DTMF;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE_QRCODE:
+                return AccessControlInfo.OpenMethod.REMOTE_QRCODE;
+            case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE_FACE:
+                return AccessControlInfo.OpenMethod.REMOTE_FACE;
+            default:
+                return AccessControlInfo.OpenMethod.UNKNOWN;
+        }
+    }
+
+}

+ 101 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaDeviceService.java

@@ -0,0 +1,101 @@
+package com.usoftchina.smartschool.device.dahua.service;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.ptr.IntByReference;
+import com.usoftchina.smartschool.device.api.DeviceApi;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdk;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaLibrary.*;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdkError;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdkException;
+import com.usoftchina.smartschool.device.dto.DeviceId;
+import com.usoftchina.smartschool.device.dto.DeviceInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 大华设备 - 设备管理
+ *
+ * @author yingp
+ * @date 2019/3/8
+ */
+public class DahuaDeviceService implements DeviceApi {
+
+    private final DahuaSdk sdk;
+    /**
+     * 多个设备的登录句柄
+     */
+    private Map<DeviceId, NativeLong> loginHandles;
+    private final Logger logger = LoggerFactory.getLogger(DahuaDeviceService.class);
+    private final DahuaDataAnalyzeService dataAnalyzeService;
+
+    public DahuaDeviceService(DahuaSdk sdk, DahuaDataAnalyzeService dataAnalyzeService) {
+        this.sdk = sdk;
+        this.dataAnalyzeService = dataAnalyzeService;
+        this.loginHandles = new HashMap<>();
+    }
+
+    @Override
+    public void add(DeviceInfo info) {
+        DeviceId id = new DeviceId(info.getIp(), info.getPort());
+        if (!loginHandles.containsKey(id)) {
+            NativeLong loginHandle = login(info.getIp(), info.getPort(), info.getUsername(), info.getPassword());
+            loginHandles.put(id, loginHandle);
+            // 开启智能事件监听
+            dataAnalyzeService.startListen(loginHandle);
+        }
+    }
+
+    /**
+     * 登录设备
+     *
+     * @param m_strIp
+     * @param m_nPort
+     * @param m_strUser
+     * @param m_strPassword
+     * @return
+     */
+    private NativeLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
+        IntByReference nError = new IntByReference(0);
+        NativeLong m_hLoginHandle = sdk.getInstance().CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword,
+                0, null, new NET_DEVICEINFO_Ex(), nError);
+        if (m_hLoginHandle.longValue() == 0) {
+            DahuaSdkError error = sdk.getLastError();
+            logger.error("Device[{}] Port[{}] Login Failed. Last Error[{}]", m_strIp, m_nPort, error);
+            throw new DahuaSdkException(error);
+        }
+        logger.info("Device[{}] Port[{}] Login Success", m_strIp, m_nPort);
+        return m_hLoginHandle;
+    }
+
+    /**
+     * 登出设备
+     *
+     * @param m_hLoginHandle 登录句柄
+     */
+    private void logout(NativeLong m_hLoginHandle) {
+        if (m_hLoginHandle.longValue() != 0) {
+            boolean bRet = sdk.getInstance().CLIENT_Logout(m_hLoginHandle);
+            if (bRet) {
+                m_hLoginHandle.setValue(0);
+            } else {
+                throw new DahuaSdkException(sdk.getLastError());
+            }
+        }
+    }
+
+    @Override
+    public void remove(DeviceInfo info) {
+        DeviceId id = new DeviceId(info.getIp(), info.getPort());
+        if (loginHandles.containsKey(id)) {
+            NativeLong loginHandle = loginHandles.get(id);
+            // 停止事件监听
+            dataAnalyzeService.stopListen(loginHandle);
+
+            logout(loginHandle);
+            loginHandles.remove(id);
+        }
+    }
+}

+ 18 - 0
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaRemoteFileService.java

@@ -0,0 +1,18 @@
+package com.usoftchina.smartschool.device.dahua.service;
+
+import com.usoftchina.smartschool.device.api.RemoteFileApi;
+import com.usoftchina.smartschool.device.dahua.lib.DahuaSdk;
+
+/**
+ * 大华设备 - 文件管理服务
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public class DahuaRemoteFileService implements RemoteFileApi {
+    private final DahuaSdk sdk;
+
+    public DahuaRemoteFileService(DahuaSdk sdk) {
+        this.sdk = sdk;
+    }
+}

+ 3 - 0
applications/device/device-sdk-dahua/src/main/resources/META-INF/spring.factories

@@ -0,0 +1,3 @@
+# Auto Configuration
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+com.usoftchina.smartschool.device.dahua.config.DahuaConfig

BIN
applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libInfra.so


BIN
applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libNetFramework.so


BIN
applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libStream.so


BIN
applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libStreamSvr.so


BIN
applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libavnetsdk.so


BIN
applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libdhconfigsdk.so


BIN
applications/device/device-sdk-dahua/src/main/resources/linux-amd64/libdhnetsdk.so


+ 304 - 0
applications/device/device-sdk-dahua/src/main/resources/message_zh_CN.properties

@@ -0,0 +1,304 @@
+NET_NOERROR=\u6ca1\u6709\u9519\u8bef
+NET_ERROR=\u672a\u77e5\u9519\u8bef
+NET_SYSTEM_ERROR=Windows\u7cfb\u7edf\u51fa\u9519
+NET_NETWORK_ERROR=\u7f51\u7edc\u9519\u8bef\uff0c\u53ef\u80fd\u662f\u56e0\u4e3a\u7f51\u7edc\u8d85\u65f6
+NET_DEV_VER_NOMATCH=\u8bbe\u5907\u534f\u8bae\u4e0d\u5339\u914d
+NET_INVALID_HANDLE=\u53e5\u67c4\u65e0\u6548
+NET_OPEN_CHANNEL_ERROR=\u6253\u5f00\u901a\u9053\u5931\u8d25
+NET_CLOSE_CHANNEL_ERROR=\u5173\u95ed\u901a\u9053\u5931\u8d25
+NET_ILLEGAL_PARAM=\u7528\u6237\u53c2\u6570\u4e0d\u5408\u6cd5
+NET_SDK_INIT_ERROR=SDK\u521d\u59cb\u5316\u51fa\u9519
+NET_SDK_UNINIT_ERROR=SDK\u6e05\u7406\u51fa\u9519
+NET_RENDER_OPEN_ERROR=\u7533\u8bf7render\u8d44\u6e90\u51fa\u9519
+NET_DEC_OPEN_ERROR=\u6253\u5f00\u89e3\u7801\u5e93\u51fa\u9519
+NET_DEC_CLOSE_ERROR=\u5173\u95ed\u89e3\u7801\u5e93\u51fa\u9519
+NET_MULTIPLAY_NOCHANNEL=\u591a\u753b\u9762\u9884\u89c8\u4e2d\u68c0\u6d4b\u5230\u901a\u9053\u6570\u4e3a0
+NET_TALK_INIT_ERROR=\u5f55\u97f3\u5e93\u521d\u59cb\u5316\u5931\u8d25
+NET_TALK_NOT_INIT=\u5f55\u97f3\u5e93\u672a\u7ecf\u521d\u59cb\u5316
+NET_TALK_SENDDATA_ERROR=\u53d1\u9001\u97f3\u9891\u6570\u636e\u51fa\u9519
+NET_REAL_ALREADY_SAVING=\u5b9e\u65f6\u6570\u636e\u5df2\u7ecf\u5904\u4e8e\u4fdd\u5b58\u72b6\u6001
+NET_NOT_SAVING=\u672a\u4fdd\u5b58\u5b9e\u65f6\u6570\u636e
+NET_OPEN_FILE_ERROR=\u6253\u5f00\u6587\u4ef6\u51fa\u9519
+NET_PTZ_SET_TIMER_ERROR=\u542f\u52a8\u4e91\u53f0\u63a7\u5236\u5b9a\u65f6\u5668\u5931\u8d25
+NET_RETURN_DATA_ERROR=\u5bf9\u8fd4\u56de\u6570\u636e\u7684\u6821\u9a8c\u51fa\u9519
+NET_INSUFFICIENT_BUFFER=\u6ca1\u6709\u8db3\u591f\u7684\u7f13\u5b58
+NET_NOT_SUPPORTED=\u5f53\u524dSDK\u672a\u652f\u6301\u8be5\u529f\u80fd
+NET_NO_RECORD_FOUND=\u67e5\u8be2\u4e0d\u5230\u5f55\u50cf
+NET_NOT_AUTHORIZED=\u65e0\u64cd\u4f5c\u6743\u9650
+NET_NOT_NOW=\u6682\u65f6\u65e0\u6cd5\u6267\u884c
+NET_NO_TALK_CHANNEL=\u672a\u53d1\u73b0\u5bf9\u8bb2\u901a\u9053
+NET_NO_AUDIO=\u672a\u53d1\u73b0\u97f3\u9891
+NET_NO_INIT=\u7f51\u7edcSDK\u672a\u7ecf\u521d\u59cb\u5316
+NET_DOWNLOAD_END=\u4e0b\u8f7d\u5df2\u7ed3\u675f
+NET_EMPTY_LIST=\u67e5\u8be2\u7ed3\u679c\u4e3a\u7a7a
+NET_ERROR_GETCFG_SYSATTR=\u83b7\u53d6\u7cfb\u7edf\u5c5e\u6027\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_SERIAL=\u83b7\u53d6\u5e8f\u5217\u53f7\u5931\u8d25
+NET_ERROR_GETCFG_GENERAL=\u83b7\u53d6\u5e38\u89c4\u5c5e\u6027\u5931\u8d25
+NET_ERROR_GETCFG_DSPCAP=\u83b7\u53d6DSP\u80fd\u529b\u63cf\u8ff0\u5931\u8d25
+NET_ERROR_GETCFG_NETCFG=\u83b7\u53d6\u7f51\u7edc\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_CHANNAME=\u83b7\u53d6\u901a\u9053\u540d\u79f0\u5931\u8d25
+NET_ERROR_GETCFG_VIDEO=\u83b7\u53d6\u89c6\u9891\u5c5e\u6027\u5931\u8d25
+NET_ERROR_GETCFG_RECORD=\u83b7\u53d6\u5f55\u8c61\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_PRONAME=\u83b7\u53d6\u89e3\u7801\u5668\u534f\u8bae\u540d\u79f0\u5931\u8d25
+NET_ERROR_GETCFG_FUNCNAME=\u83b7\u53d6232\u4e32\u53e3\u529f\u80fd\u540d\u79f0\u5931\u8d25
+NET_ERROR_GETCFG_485DECODER=\u83b7\u53d6\u89e3\u7801\u5668\u5c5e\u6027\u5931\u8d25
+NET_ERROR_GETCFG_232COM=\u83b7\u53d6232\u4e32\u53e3\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_ALARMIN=\u83b7\u53d6\u5916\u90e8\u62a5\u8b66\u8f93\u5165\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_ALARMDET=\u83b7\u53d6\u52a8\u6001\u68c0\u6d4b\u62a5\u8b66\u5931\u8d25
+NET_ERROR_GETCFG_SYSTIME=\u83b7\u53d6\u8bbe\u5907\u65f6\u95f4\u5931\u8d25
+NET_ERROR_GETCFG_PREVIEW=\u83b7\u53d6\u9884\u89c8\u53c2\u6570\u5931\u8d25
+NET_ERROR_GETCFG_AUTOMT=\u83b7\u53d6\u81ea\u52a8\u7ef4\u62a4\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_VIDEOMTRX=\u83b7\u53d6\u89c6\u9891\u77e9\u9635\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_COVER=\u83b7\u53d6\u533a\u57df\u906e\u6321\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_WATERMAKE=\u83b7\u53d6\u56fe\u8c61\u6c34\u5370\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_GENERAL=\u4fee\u6539\u5e38\u89c4\u5c5e\u6027\u5931\u8d25
+NET_ERROR_SETCFG_NETCFG=\u4fee\u6539\u7f51\u7edc\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_CHANNAME=\u4fee\u6539\u901a\u9053\u540d\u79f0\u5931\u8d25
+NET_ERROR_SETCFG_VIDEO=\u4fee\u6539\u89c6\u9891\u5c5e\u6027\u5931\u8d25
+NET_ERROR_SETCFG_RECORD=\u4fee\u6539\u5f55\u50cf\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_485DECODER=\u4fee\u6539\u89e3\u7801\u5668\u5c5e\u6027\u5931\u8d25
+NET_ERROR_SETCFG_232COM=\u4fee\u6539232\u4e32\u53e3\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_ALARMIN=\u4fee\u6539\u5916\u90e8\u8f93\u5165\u62a5\u8b66\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_ALARMDET=\u4fee\u6539\u52a8\u6001\u68c0\u6d4b\u62a5\u8b66\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_SYSTIME=\u4fee\u6539\u8bbe\u5907\u65f6\u95f4\u5931\u8d25
+NET_ERROR_SETCFG_PREVIEW=\u4fee\u6539\u9884\u89c8\u53c2\u6570\u5931\u8d25
+NET_ERROR_SETCFG_AUTOMT=\u4fee\u6539\u81ea\u52a8\u7ef4\u62a4\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_VIDEOMTRX=\u4fee\u6539\u89c6\u9891\u77e9\u9635\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_COVER=\u4fee\u6539\u533a\u57df\u906e\u6321\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_WATERMAKE=\u4fee\u6539\u56fe\u8c61\u6c34\u5370\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_WLAN=\u4fee\u6539\u65e0\u7ebf\u7f51\u7edc\u4fe1\u606f\u5931\u8d25
+NET_ERROR_SETCFG_WLANDEV=\u9009\u62e9\u65e0\u7ebf\u7f51\u7edc\u8bbe\u5907\u5931\u8d25
+NET_ERROR_SETCFG_REGISTER=\u4fee\u6539\u4e3b\u52a8\u6ce8\u518c\u53c2\u6570\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_CAMERA=\u4fee\u6539\u6444\u50cf\u5934\u5c5e\u6027\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_INFRARED=\u4fee\u6539\u7ea2\u5916\u62a5\u8b66\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_SOUNDALARM=\u4fee\u6539\u97f3\u9891\u62a5\u8b66\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_STORAGE=\u4fee\u6539\u5b58\u50a8\u4f4d\u7f6e\u914d\u7f6e\u5931\u8d25
+NET_AUDIOENCODE_NOTINIT=\u97f3\u9891\u7f16\u7801\u63a5\u53e3\u6ca1\u6709\u6210\u529f\u521d\u59cb\u5316
+NET_DATA_TOOLONGH=\u6570\u636e\u8fc7\u957f
+NET_UNSUPPORTED=\u8bbe\u5907\u4e0d\u652f\u6301\u8be5\u64cd\u4f5c
+NET_DEVICE_BUSY=\u8bbe\u5907\u8d44\u6e90\u4e0d\u8db3
+NET_SERVER_STARTED(=\u670d\u52a1\u5668\u5df2\u7ecf\u542f\u52a8
+NET_SERVER_STOPPED=\u670d\u52a1\u5668\u5c1a\u672a\u6210\u529f\u542f\u52a8
+NET_LISTER_INCORRECT_SERIAL=\u8f93\u5165\u5e8f\u5217\u53f7\u6709\u8bef
+NET_QUERY_DISKINFO_FAILED=\u83b7\u53d6\u786c\u76d8\u4fe1\u606f\u5931\u8d25
+NET_ERROR_GETCFG_SESSION=\u83b7\u53d6\u8fde\u63a5Session\u4fe1\u606f
+NET_USER_FLASEPWD_TRYTIME=\u8f93\u5165\u5bc6\u7801\u9519\u8bef\u8d85\u8fc7\u9650\u5236\u6b21\u6570
+NET_LOGIN_ERROR_PASSWORD=\u5bc6\u7801\u4e0d\u6b63\u786e
+NET_LOGIN_ERROR_USER=\u5e10\u6237\u4e0d\u5b58\u5728
+NET_LOGIN_ERROR_TIMEOUT=\u7b49\u5f85\u767b\u5f55\u8fd4\u56de\u8d85\u65f6
+NET_LOGIN_ERROR_RELOGGIN=\u5e10\u53f7\u5df2\u767b\u5f55
+NET_LOGIN_ERROR_LOCKED=\u5e10\u53f7\u5df2\u88ab\u9501\u5b9a
+NET_LOGIN_ERROR_BLACKLIST=\u5e10\u53f7\u5df2\u88ab\u5217\u4e3a\u9ed1\u540d\u5355
+NET_LOGIN_ERROR_BUSY=\u8d44\u6e90\u4e0d\u8db3\uff0c\u7cfb\u7edf\u5fd9
+NET_LOGIN_ERROR_CONNECT=\u767b\u5f55\u8bbe\u5907\u8d85\u65f6\uff0c\u8bf7\u68c0\u67e5\u7f51\u7edc\u5e76\u91cd\u8bd5
+NET_LOGIN_ERROR_NETWORK=\u7f51\u7edc\u8fde\u63a5\u5931\u8d25
+NET_LOGIN_ERROR_SUBCONNECT=\u767b\u5f55\u8bbe\u5907\u6210\u529f\uff0c\u4f46\u65e0\u6cd5\u521b\u5efa\u89c6\u9891\u901a\u9053\uff0c\u8bf7\u68c0\u67e5\u7f51\u7edc\u72b6\u51b5
+NET_LOGIN_ERROR_MAXCONNECT=\u8d85\u8fc7\u6700\u5927\u8fde\u63a5\u6570
+NET_LOGIN_ERROR_PROTOCOL3_ONLY=\u53ea\u652f\u63013\u4ee3\u534f\u8bae
+NET_LOGIN_ERROR_UKEY_LOST=\u672a\u63d2\u5165U\u76fe\u6216U\u76fe\u4fe1\u606f\u9519\u8bef
+NET_LOGIN_ERROR_NO_AUTHORIZED=\u5ba2\u6237\u7aefIP\u5730\u5740\u6ca1\u6709\u767b\u5f55\u6743\u9650
+NET_LOGIN_ERROR_USER_OR_PASSOWRD=\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef
+NET_RENDER_SOUND_ON_ERROR=Render\u5e93\u6253\u5f00\u97f3\u9891\u51fa\u9519
+NET_RENDER_SOUND_OFF_ERROR=Render\u5e93\u5173\u95ed\u97f3\u9891\u51fa\u9519
+NET_RENDER_SET_VOLUME_ERROR=Render\u5e93\u63a7\u5236\u97f3\u91cf\u51fa\u9519
+NET_RENDER_ADJUST_ERROR=Render\u5e93\u8bbe\u7f6e\u753b\u9762\u53c2\u6570\u51fa\u9519
+NET_RENDER_PAUSE_ERROR=Render\u5e93\u6682\u505c\u64ad\u653e\u51fa\u9519
+NET_RENDER_SNAP_ERROR=Render\u5e93\u6293\u56fe\u51fa\u9519
+NET_RENDER_STEP_ERROR=Render\u5e93\u6b65\u8fdb\u51fa\u9519
+NET_RENDER_FRAMERATE_ERROR=Render\u5e93\u8bbe\u7f6e\u5e27\u7387\u51fa\u9519
+NET_RENDER_DISPLAYREGION_ERROR=Render\u5e93\u8bbe\u7f6e\u663e\u793a\u533a\u57df\u51fa\u9519
+NET_GROUP_EXIST=\u7ec4\u540d\u5df2\u5b58\u5728
+NET_GROUP_NOEXIST=\u7ec4\u540d\u4e0d\u5b58\u5728
+NET_GROUP_RIGHTOVER=\u7ec4\u7684\u6743\u9650\u8d85\u51fa\u6743\u9650\u5217\u8868\u8303\u56f4
+NET_GROUP_HAVEUSER=\u7ec4\u4e0b\u6709\u7528\u6237\uff0c\u4e0d\u80fd\u5220\u9664
+NET_GROUP_RIGHTUSE=\u7ec4\u7684\u67d0\u4e2a\u6743\u9650\u88ab\u7528\u6237\u4f7f\u7528\uff0c\u4e0d\u80fd\u51fa\u9664
+NET_GROUP_SAMENAME=\u65b0\u7ec4\u540d\u540c\u5df2\u6709\u7ec4\u540d\u91cd\u590d
+NET_USER_EXIST=\u7528\u6237\u5df2\u5b58\u5728
+NET_USER_NOEXIST=\u7528\u6237\u4e0d\u5b58\u5728
+NET_USER_RIGHTOVER=\u7528\u6237\u6743\u9650\u8d85\u51fa\u7ec4\u6743\u9650
+NET_USER_PWD=\u4fdd\u7559\u5e10\u53f7\uff0c\u4e0d\u5bb9\u8bb8\u4fee\u6539\u5bc6\u7801
+NET_USER_FLASEPWD=\u5bc6\u7801\u4e0d\u6b63\u786e
+NET_USER_NOMATCHING=\u5bc6\u7801\u4e0d\u5339\u914d
+NET_USER_INUSE=\u8d26\u53f7\u6b63\u5728\u4f7f\u7528\u4e2d
+NET_ERROR_GETCFG_ETHERNET=\u83b7\u53d6\u7f51\u5361\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_WLAN=\u83b7\u53d6\u65e0\u7ebf\u7f51\u7edc\u4fe1\u606f\u5931\u8d25
+NET_ERROR_GETCFG_WLANDEV=\u83b7\u53d6\u65e0\u7ebf\u7f51\u7edc\u8bbe\u5907\u5931\u8d25
+NET_ERROR_GETCFG_REGISTER=\u83b7\u53d6\u4e3b\u52a8\u6ce8\u518c\u53c2\u6570\u5931\u8d25
+NET_ERROR_GETCFG_CAMERA=\u83b7\u53d6\u6444\u50cf\u5934\u5c5e\u6027\u5931\u8d25
+NET_ERROR_GETCFG_INFRARED=\u83b7\u53d6\u7ea2\u5916\u62a5\u8b66\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_SOUNDALARM=\u83b7\u53d6\u97f3\u9891\u62a5\u8b66\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_STORAGE=\u83b7\u53d6\u5b58\u50a8\u4f4d\u7f6e\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_MAIL=\u83b7\u53d6\u90ae\u4ef6\u914d\u7f6e\u5931\u8d25
+NET_CONFIG_DEVBUSY=\u6682\u65f6\u65e0\u6cd5\u8bbe\u7f6e
+NET_CONFIG_DATAILLEGAL=\u914d\u7f6e\u6570\u636e\u4e0d\u5408\u6cd5
+NET_ERROR_GETCFG_DST=\u83b7\u53d6\u590f\u4ee4\u65f6\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_DST=\u8bbe\u7f6e\u590f\u4ee4\u65f6\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_VIDEO_OSD=\u83b7\u53d6\u89c6\u9891OSD\u53e0\u52a0\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_VIDEO_OSD=\u8bbe\u7f6e\u89c6\u9891OSD\u53e0\u52a0\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_GPRSCDMA=\u83b7\u53d6CDMA\GPRS\u7f51\u7edc\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_GPRSCDMA=\u8bbe\u7f6eCDMA\GPRS\u7f51\u7edc\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_IPFILTER=\u83b7\u53d6IP\u8fc7\u6ee4\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_IPFILTER=\u8bbe\u7f6eIP\u8fc7\u6ee4\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_TALKENCODE=\u83b7\u53d6\u8bed\u97f3\u5bf9\u8bb2\u7f16\u7801\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_TALKENCODE=\u8bbe\u7f6e\u8bed\u97f3\u5bf9\u8bb2\u7f16\u7801\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_RECORDLEN=\u83b7\u53d6\u5f55\u50cf\u6253\u5305\u957f\u5ea6\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_RECORDLEN=\u8bbe\u7f6e\u5f55\u50cf\u6253\u5305\u957f\u5ea6\u914d\u7f6e\u5931\u8d25
+NET_DONT_SUPPORT_SUBAREA=\u4e0d\u652f\u6301\u7f51\u7edc\u786c\u76d8\u5206\u533a
+NET_ERROR_GET_AUTOREGSERVER=\u83b7\u53d6\u8bbe\u5907\u4e0a\u4e3b\u52a8\u6ce8\u518c\u670d\u52a1\u5668\u4fe1\u606f\u5931\u8d25
+NET_ERROR_CONTROL_AUTOREGISTER=\u4e3b\u52a8\u6ce8\u518c\u91cd\u5b9a\u5411\u6ce8\u518c\u9519\u8bef
+NET_ERROR_DISCONNECT_AUTOREGISTER=\u65ad\u5f00\u4e3b\u52a8\u6ce8\u518c\u670d\u52a1\u5668\u9519\u8bef
+NET_ERROR_GETCFG_MMS=\u83b7\u53d6mms\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_MMS=\u8bbe\u7f6emms\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_SMSACTIVATION=\u83b7\u53d6\u77ed\u4fe1\u6fc0\u6d3b\u65e0\u7ebf\u8fde\u63a5\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_SMSACTIVATION=\u8bbe\u7f6e\u77ed\u4fe1\u6fc0\u6d3b\u65e0\u7ebf\u8fde\u63a5\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_DIALINACTIVATION=\u83b7\u53d6\u62e8\u53f7\u6fc0\u6d3b\u65e0\u7ebf\u8fde\u63a5\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_DIALINACTIVATION=\u8bbe\u7f6e\u62e8\u53f7\u6fc0\u6d3b\u65e0\u7ebf\u8fde\u63a5\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_VIDEOOUT=\u67e5\u8be2\u89c6\u9891\u8f93\u51fa\u53c2\u6570\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_VIDEOOUT=\u8bbe\u7f6e\u89c6\u9891\u8f93\u51fa\u53c2\u6570\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_OSDENABLE=\u83b7\u53d6osd\u53e0\u52a0\u4f7f\u80fd\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_OSDENABLE=\u8bbe\u7f6eosd\u53e0\u52a0\u4f7f\u80fd\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_ENCODERINFO=\u8bbe\u7f6e\u6570\u5b57\u901a\u9053\u524d\u7aef\u7f16\u7801\u63a5\u5165\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_TVADJUST=\u83b7\u53d6TV\u8c03\u8282\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_TVADJUST=\u8bbe\u7f6eTV\u8c03\u8282\u914d\u7f6e\u5931\u8d25
+NET_ERROR_CONNECT_FAILED=\u8bf7\u6c42\u5efa\u7acb\u8fde\u63a5\u5931\u8d25
+NET_ERROR_SETCFG_BURNFILE=\u8bf7\u6c42\u523b\u5f55\u6587\u4ef6\u4e0a\u4f20\u5931\u8d25
+NET_ERROR_SNIFFER_GETCFG=\u83b7\u53d6\u6293\u5305\u914d\u7f6e\u4fe1\u606f\u5931\u8d25
+NET_ERROR_SNIFFER_SETCFG=\u8bbe\u7f6e\u6293\u5305\u914d\u7f6e\u4fe1\u606f\u5931\u8d25
+NET_ERROR_DOWNLOADRATE_GETCFG=\u67e5\u8be2\u4e0b\u8f7d\u9650\u5236\u4fe1\u606f\u5931\u8d25
+NET_ERROR_DOWNLOADRATE_SETCFG=\u8bbe\u7f6e\u4e0b\u8f7d\u9650\u5236\u4fe1\u606f\u5931\u8d25
+NET_ERROR_SEARCH_TRANSCOM=\u67e5\u8be2\u4e32\u53e3\u53c2\u6570\u5931\u8d25
+NET_ERROR_GETCFG_POINT=\u83b7\u53d6\u9884\u5236\u70b9\u4fe1\u606f\u9519\u8bef
+NET_ERROR_SETCFG_POINT=\u8bbe\u7f6e\u9884\u5236\u70b9\u4fe1\u606f\u9519\u8bef
+NET_SDK_LOGOUT_ERROR=SDK\u6ca1\u6709\u6b63\u5e38\u767b\u51fa\u8bbe\u5907
+NET_ERROR_GET_VEHICLE_CFG=\u83b7\u53d6\u8f66\u8f7d\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SET_VEHICLE_CFG=\u8bbe\u7f6e\u8f66\u8f7d\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GET_ATM_OVERLAY_CFG=\u83b7\u53d6atm\u53e0\u52a0\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SET_ATM_OVERLAY_CFG=\u8bbe\u7f6eatm\u53e0\u52a0\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GET_ATM_OVERLAY_ABILITY=\u83b7\u53d6atm\u53e0\u52a0\u80fd\u529b\u5931\u8d25
+NET_ERROR_GET_DECODER_TOUR_CFG=\u83b7\u53d6\u89e3\u7801\u5668\u89e3\u7801\u8f6e\u5de1\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SET_DECODER_TOUR_CFG=\u8bbe\u7f6e\u89e3\u7801\u5668\u89e3\u7801\u8f6e\u5de1\u914d\u7f6e\u5931\u8d25
+NET_ERROR_CTRL_DECODER_TOUR=\u63a7\u5236\u89e3\u7801\u5668\u89e3\u7801\u8f6e\u5de1\u5931\u8d25
+NET_GROUP_OVERSUPPORTNUM=\u8d85\u51fa\u8bbe\u5907\u652f\u6301\u6700\u5927\u7528\u6237\u7ec4\u6570\u76ee
+NET_USER_OVERSUPPORTNUM=\u8d85\u51fa\u8bbe\u5907\u652f\u6301\u6700\u5927\u7528\u6237\u6570\u76ee
+NET_ERROR_GET_SIP_CFG=\u83b7\u53d6SIP\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SET_SIP_CFG=\u8bbe\u7f6eSIP\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GET_SIP_ABILITY=\u83b7\u53d6SIP\u80fd\u529b\u5931\u8d25
+NET_ERROR_GET_WIFI_AP_CFG=\u83b7\u53d6WIFI ap\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SET_WIFI_AP_CFG=\u8bbe\u7f6eWIFI ap\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GET_DECODE_POLICY=\u83b7\u53d6\u89e3\u7801\u7b56\u7565\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SET_DECODE_POLICY=\u8bbe\u7f6e\u89e3\u7801\u7b56\u7565\u914d\u7f6e\u5931\u8d25
+NET_ERROR_TALK_REJECT=\u62d2\u7edd\u5bf9\u8bb2
+NET_ERROR_TALK_OPENED=\u5bf9\u8bb2\u88ab\u5176\u4ed6\u5ba2\u6237\u7aef\u6253\u5f00
+NET_ERROR_TALK_RESOURCE_CONFLICIT=\u8d44\u6e90\u51b2\u7a81
+NET_ERROR_TALK_UNSUPPORTED_ENCODE=\u4e0d\u652f\u6301\u7684\u8bed\u97f3\u7f16\u7801\u683c\u5f0f
+NET_ERROR_TALK_RIGHTLESS=\u65e0\u6743\u9650
+NET_ERROR_TALK_FAILED=\u8bf7\u6c42\u5bf9\u8bb2\u5931\u8d25
+NET_ERROR_GET_MACHINE_CFG=\u83b7\u53d6\u673a\u5668\u76f8\u5173\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SET_MACHINE_CFG=\u8bbe\u7f6e\u673a\u5668\u76f8\u5173\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GET_DATA_FAILED=\u8bbe\u5907\u65e0\u6cd5\u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u6570\u636e
+NET_ERROR_MAC_VALIDATE_FAILED=MAC\u5730\u5740\u9a8c\u8bc1\u5931\u8d25
+NET_ERROR_GET_INSTANCE=\u83b7\u53d6\u670d\u52a1\u5668\u5b9e\u4f8b\u5931\u8d25
+NET_ERROR_JSON_REQUEST=\u751f\u6210\u7684json\u5b57\u7b26\u4e32\u9519\u8bef
+NET_ERROR_JSON_RESPONSE=\u54cd\u5e94\u7684json\u5b57\u7b26\u4e32\u9519\u8bef
+NET_ERROR_VERSION_HIGHER=\u534f\u8bae\u7248\u672c\u4f4e\u4e8e\u5f53\u524d\u4f7f\u7528\u7684\u7248\u672c
+NET_SPARE_NO_CAPACITY=\u70ed\u5907\u64cd\u4f5c\u5931\u8d25, \u5bb9\u91cf\u4e0d\u8db3
+NET_ERROR_SOURCE_IN_USE=\u663e\u793a\u6e90\u88ab\u5176\u4ed6\u8f93\u51fa\u5360\u7528
+NET_ERROR_REAVE=\u9ad8\u7ea7\u7528\u6237\u62a2\u5360\u4f4e\u7ea7\u7528\u6237\u8d44\u6e90
+NET_ERROR_NETFORBID=\u7981\u6b62\u5165\u7f51
+NET_ERROR_GETCFG_MACFILTER=\u83b7\u53d6MAC\u8fc7\u6ee4\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_MACFILTER=\u8bbe\u7f6eMAC\u8fc7\u6ee4\u914d\u7f6e\u5931\u8d25
+NET_ERROR_GETCFG_IPMACFILTER=\u83b7\u53d6IP/MAC\u8fc7\u6ee4\u914d\u7f6e\u5931\u8d25
+NET_ERROR_SETCFG_IPMACFILTER=\u8bbe\u7f6eIP/MAC\u8fc7\u6ee4\u914d\u7f6e\u5931\u8d25
+NET_ERROR_OPERATION_OVERTIME=\u5f53\u524d\u64cd\u4f5c\u8d85\u65f6
+NET_ERROR_SENIOR_VALIDATE_FAILED=\u9ad8\u7ea7\u6821\u9a8c\u5931\u8d25
+NET_ERROR_DEVICE_ID_NOT_EXIST=\u8bbe\u5907ID\u4e0d\u5b58\u5728
+NET_ERROR_UNSUPPORTED=\u4e0d\u652f\u6301\u5f53\u524d\u64cd\u4f5c
+NET_ERROR_PROXY_DLLLOAD=\u4ee3\u7406\u5e93\u52a0\u8f7d\u5931\u8d25
+NET_ERROR_PROXY_ILLEGAL_PARAM=\u4ee3\u7406\u7528\u6237\u53c2\u6570\u4e0d\u5408\u6cd5
+NET_ERROR_PROXY_INVALID_HANDLE=\u4ee3\u7406\u53e5\u67c4\u65e0\u6548
+NET_ERROR_PROXY_LOGIN_DEVICE_ERROR=\u4ee3\u7406\u767b\u5165\u524d\u7aef\u8bbe\u5907\u5931\u8d25
+NET_ERROR_PROXY_START_SERVER_ERROR=\u542f\u52a8\u4ee3\u7406\u670d\u52a1\u5931\u8d25
+NET_ERROR_SPEAK_FAILED=\u8bf7\u6c42\u558a\u8bdd\u5931\u8d25
+NET_ERROR_NOT_SUPPORT_F6=\u8bbe\u5907\u4e0d\u652f\u6301\u6b64F6\u63a5\u53e3\u8c03\u7528
+NET_ERROR_CD_UNREADY=\u5149\u76d8\u672a\u5c31\u7eea
+NET_ERROR_DIR_NOT_EXIST=\u76ee\u5f55\u4e0d\u5b58\u5728
+NET_ERROR_UNSUPPORTED_SPLIT_MODE=\u8bbe\u5907\u4e0d\u652f\u6301\u7684\u5206\u5272\u6a21\u5f0f
+NET_ERROR_OPEN_WND_PARAM=\u5f00\u7a97\u53c2\u6570\u4e0d\u5408\u6cd5
+NET_ERROR_LIMITED_WND_COUNT=\u5f00\u7a97\u6570\u91cf\u8d85\u8fc7\u9650\u5236
+NET_ERROR_UNMATCHED_REQUEST=\u8bf7\u6c42\u547d\u4ee4\u4e0e\u5f53\u524d\u6a21\u5f0f\u4e0d\u5339\u914d
+NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR=Render\u5e93\u542f\u7528\u9ad8\u6e05\u56fe\u50cf\u5185\u90e8\u8c03\u6574\u7b56\u7565\u51fa\u9519
+NET_ERROR_UPGRADE_FAILED=\u8bbe\u5907\u5347\u7ea7\u5931\u8d25
+NET_ERROR_NO_TARGET_DEVICE=\u627e\u4e0d\u5230\u76ee\u6807\u8bbe\u5907
+NET_ERROR_NO_VERIFY_DEVICE=\u627e\u4e0d\u5230\u76ee\u6807\u8bbe\u5907
+NET_ERROR_CASCADE_RIGHTLESS=\u65e0\u7ea7\u8054\u6743\u9650
+NET_ERROR_LOW_PRIORITY=\u4f4e\u4f18\u5148\u7ea7
+NET_ERROR_REMOTE_REQUEST_TIMEOUT=\u8fdc\u7a0b\u8bbe\u5907\u8bf7\u6c42\u8d85\u65f6
+NET_ERROR_LIMITED_INPUT_SOURCE=\u8f93\u5165\u6e90\u8d85\u51fa\u6700\u5927\u8def\u6570\u9650\u5236
+NET_ERROR_SET_LOG_PRINT_INFO=\u8bbe\u7f6e\u65e5\u5fd7\u6253\u5370\u5931\u8d25
+NET_ERROR_PARAM_DWSIZE_ERROR=\u5165\u53c2\u7684dwsize\u5b57\u6bb5\u51fa\u9519
+NET_ERROR_LIMITED_MONITORWALL_COUNT=\u7535\u89c6\u5899\u6570\u91cf\u8d85\u8fc7\u4e0a\u9650
+NET_ERROR_PART_PROCESS_FAILED=\u90e8\u5206\u8fc7\u7a0b\u6267\u884c\u5931\u8d25
+NET_ERROR_TARGET_NOT_SUPPORT=\u8be5\u529f\u80fd\u4e0d\u652f\u6301\u8f6c\u53d1
+NET_ERROR_VISITE_FILE=\u8bbf\u95ee\u6587\u4ef6\u5931\u8d25
+NET_ERROR_DEVICE_STATUS_BUSY=\u8bbe\u5907\u5fd9
+NET_USER_PWD_NOT_AUTHORIZED=\u4fee\u6539\u5bc6\u7801\u65e0\u6743\u9650
+NET_USER_PWD_NOT_STRONG=\u5bc6\u7801\u5f3a\u5ea6\u4e0d\u591f
+NET_ERROR_NO_SUCH_CONFIG=\u6ca1\u6709\u5bf9\u5e94\u7684\u914d\u7f6e
+NET_ERROR_AUDIO_RECORD_FAILED=\u5f55\u97f3\u5931\u8d25
+NET_ERROR_SEND_DATA_FAILED=\u6570\u636e\u53d1\u9001\u5931\u8d25
+NET_ERROR_OBSOLESCENT_INTERFACE=\u5e9f\u5f03\u63a5\u53e3
+NET_ERROR_INSUFFICIENT_INTERAL_BUF=\u5185\u90e8\u7f13\u51b2\u4e0d\u8db3
+NET_ERROR_NEED_ENCRYPTION_PASSWORD=\u4fee\u6539\u8bbe\u5907ip\u65f6,\u9700\u8981\u6821\u9a8c\u5bc6\u7801
+NET_ERROR_SERIALIZE_ERROR=\u6570\u636e\u5e8f\u5217\u5316\u9519\u8bef
+NET_ERROR_DESERIALIZE_ERROR=\u6570\u636e\u53cd\u5e8f\u5217\u5316\u9519\u8bef
+NET_ERROR_LOWRATEWPAN_ID_EXISTED=\u8be5\u65e0\u7ebfID\u5df2\u5b58\u5728
+NET_ERROR_LOWRATEWPAN_ID_LIMIT=\u65e0\u7ebfID\u6570\u91cf\u5df2\u8d85\u9650
+NET_ERROR_LOWRATEWPAN_ID_ABNORMAL=\u65e0\u7ebf\u5f02\u5e38\u6dfb\u52a0
+
+
+NET_EM_FAILCODE_NOERROR=\u6ca1\u6709\u9519\u8bef
+NET_EM_FAILCODE_UNKNOWN=\u672a\u77e5\u9519\u8bef
+NET_EM_FAILCODE_INVALID_PARAM=\u53c2\u6570\u9519\u8bef
+NET_EM_FAILCODE_INVALID_PASSWORD=\u65e0\u6548\u5bc6\u7801
+NET_EM_FAILCODE_INVALID_FP=\u65e0\u6548\u6307\u7eb9\u6570\u636e
+NET_EM_FAILCODE_INVALID_FACE=\u65e0\u6548\u4eba\u8138\u6570\u636e
+NET_EM_FAILCODE_INVALID_CARD=\u65e0\u6548\u5361\u6570\u636e
+NET_EM_FAILCODE_INVALID_USER=\u65e0\u6548\u4eba\u6570\u636e
+NET_EM_FAILCODE_FAILED_GET_SUBSERVICE=\u5b50\u670d\u52a1\u83b7\u53d6\u5931\u8d25
+NET_EM_FAILCODE_FAILED_GET_METHOD=\u83b7\u53d6\u7ec4\u4ef6\u7684\u65b9\u6cd5\u96c6\u5931\u8d25
+NET_EM_FAILCODE_FAILED_GET_SUBCAPS=\u83b7\u53d6\u8d44\u6e90\u5b9e\u4f53\u80fd\u529b\u96c6\u5931\u8d25
+NET_EM_FAILCODE_ERROR_INSERT_LIMIT=\u5df2\u8fbe\u63d2\u5165\u4e0a\u9650
+NET_EM_FAILCODE_ERROR_MAX_INSERT_RATE=\u5df2\u8fbe\u6700\u5927\u63d2\u5165\u901f\u5ea6
+NET_EM_FAILCODE_FAILED_ERASE_FP=\u6e05\u9664\u6307\u7eb9\u6570\u636e\u5931\u8d25
+NET_EM_FAILCODE_FAILED_ERASE_FACE=\u6e05\u9664\u4eba\u8138\u6570\u636e\u5931\u8d25
+NET_EM_FAILCODE_FAILED_ERASE_CARD=\u6e05\u9664\u5361\u6570\u636e\u5931\u8d25
+NET_EM_FAILCODE_NO_RECORD=\u6ca1\u6709\u8bb0\u5f55
+NET_EM_FAILCODE_NOMORE_RECORD=\u67e5\u627e\u5230\u6700\u540e\uff0c\u6ca1\u6709\u66f4\u591a\u8bb0\u5f55
+NET_EM_FAILCODE_RECORD_ALREADY_EXISTS=\u4e0b\u53d1\u5361\u6216\u6307\u7eb9\u65f6\uff0c\u6570\u636e\u91cd\u590d
+NET_EM_FAILCODE_MAX_FP_PERUSER=\u8d85\u8fc7\u4e2a\u4eba\u6700\u5927\u6307\u7eb9\u8bb0\u5f55\u6570
+NET_EM_FAILCODE_MAX_CARD_PERUSER=\u8d85\u8fc7\u4e2a\u4eba\u6700\u5927\u5361\u7247\u8bb0\u5f55\u6570
+
+EM_IMPORT_FACEDB_UNKNOWN=\u672a\u77e5
+EM_IMPORT_FACEDB_ONGING=\u5bfc\u5165\u4e2d
+EM_IMPORT_FACEDB_END=\u5bfc\u5165\u7ed3\u675f, \u5f00\u59cb\u751f\u6210\u6570\u636e\u5e93
+EM_IMPORT_FACEDB_BUSY=\u7cfb\u7edf\u5fd9\uff0c\u5df2\u7ecf\u6709\u5bfc\u5165\u4efb\u52a1
+EM_IMPORT_FACEDB_DATAERROR=\u6570\u636e\u5305\u68c0\u9a8c\u5931\u8d25
+EM_IMPORT_FACEDB_INVALID=\u6570\u636e\u5305\u975e\u6cd5
+EM_IMPORT_FACEDB_SYNC_SUCCESS=\u540c\u6b65\u6210\u529f, \u6570\u636e\u5e93\u5df2\u751f\u6210
+EM_IMPORT_FACEDB_SYNC_FALIED=\u540c\u6b65\u5931\u8d25, \u6570\u636e\u5e93\u65e0\u6cd5\u751f\u6210
+EM_IMPORT_FACEDB_DBFULL=\u6570\u636e\u5e93\u5df2\u6ee1\u65e0\u6cd5\u5bfc\u5165
+EM_IMPORT_FACEDB_SDFULL=\u5b58\u50a8\u7a7a\u95f4\u6ee1\u65e0\u6cd5\u5bfc\u5165
+EM_IMPORT_FACEDB_CIPHER_ERROR=\u5bfc\u5165\u538b\u7f29\u5305\u5bc6\u7801\u4e0d\u5bf9
+
+
+EM_EXPORT_FACEDB_REQUEST_SUCCESS=\u4eba\u8138\u5e93\u5bfc\u51fa\u8bf7\u6c42\u6210\u529f
+EM_EXPORT_FACEDB_NO_AUTHORITY=\u65e0\u6743\u9650
+EM_EXPORT_FACEDB_NO_THIS_FILE=\u6587\u4ef6\u4e0d\u5b58\u5728
+EM_EXPORT_FACEDB_EXPORT_END=\u5bfc\u51fa\u7ed3\u675f
+EM_EXPORT_FACEDB_EXPORTING=\u5bfc\u51fa\u4e2d
+EM_EXPORT_FACEDB_FILE_READY=\u6587\u4ef6\u51c6\u5907\u5b8c\u6210
+EM_EXPORT_FACEDB_FILE_FAILED=\u6587\u4ef6\u51c6\u5907\u5931\u8d25
+EM_EXPORT_FACEDB_WAIT_FILE=\u4eba\u8138\u5e93\u5bfc\u51fa\u8bf7\u6c42\u6210\u529f, \u9700\u8981\u7b49\u5f85\u8bbe\u5907\u51c6\u5907\u6570\u636e
+EM_EXPORT_FACEDB_SYSTEM_BUSY=\u7cfb\u7edf\u5fd9, \u6682\u65f6\u65e0\u6cd5\u5bfc\u51fa\u6570\u636e
+EM_EXPORT_FACEDB_NO_PASSWORD=\u4eba\u8138\u5e93\u6570\u636e\u672a\u5b9a\u4e49\u5bc6\u7801, \u4e0d\u5141\u8bb8\u5bfc\u51fa
+

BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/HWDec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/Infra.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/IvsDrawer.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/Json.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/MCL_FPTZ.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/NetFramework.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/Stream.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/StreamSvr.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/VTHStack.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/aacdec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/adpcmdec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/amrdec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/armenc64.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/avnetsdk.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhconfigsdk.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhconfigsdk.lib


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhnetsdk.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhnetsdk.lib


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/dhplay.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/fisheye.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/g7221dec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/g729dec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/h264dec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/h26ldec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/hevcdec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/mjpegdec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/mp2dec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/mp3dec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/mpeg4dec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/postproc.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/svac_dec.dll


BIN
applications/device/device-sdk-dahua/src/main/resources/win32-x86-64/swscale.dll


+ 20 - 0
applications/device/device-sdk/pom.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>device</artifactId>
+        <groupId>com.usoftchina.smartschool</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>device-sdk</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 10 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/api/AccessControlCardApi.java

@@ -0,0 +1,10 @@
+package com.usoftchina.smartschool.device.api;
+
+/**
+ * 门禁卡操作接口
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public interface AccessControlCardApi {
+}

+ 10 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/api/AccessControlRecordApi.java

@@ -0,0 +1,10 @@
+package com.usoftchina.smartschool.device.api;
+
+/**
+ * 门禁出入记录接口
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public interface AccessControlRecordApi {
+}

+ 26 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/api/DeviceApi.java

@@ -0,0 +1,26 @@
+package com.usoftchina.smartschool.device.api;
+
+import com.usoftchina.smartschool.device.dto.DeviceInfo;
+
+/**
+ * 设备管理
+ *
+ * @author yingp
+ * @date 2019/3/8
+ */
+public interface DeviceApi {
+
+    /**
+     * 添加设备
+     *
+     * @param info
+     */
+    void add(DeviceInfo info);
+
+    /**
+     * 删除设备
+     *
+     * @param info
+     */
+    void remove(DeviceInfo info);
+}

+ 10 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/api/RemoteFileApi.java

@@ -0,0 +1,10 @@
+package com.usoftchina.smartschool.device.api;
+
+/**
+ * 设备文件管理接口
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public interface RemoteFileApi {
+}

+ 271 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/dto/AccessControlInfo.java

@@ -0,0 +1,271 @@
+package com.usoftchina.smartschool.device.dto;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 门禁事件信息
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public class AccessControlInfo implements Serializable {
+    /**
+     * 事件时间
+     */
+    private LocalDateTime eventTime;
+    /**
+     * 事件类型(进门/出门)
+     *
+     * @see EventType
+     */
+    private int eventType;
+    /**
+     * 卡号
+     */
+    private String cardNo;
+    /**
+     * 以人脸识别方式打开门禁时,图片信息
+     */
+    private byte[] imageBuffer;
+    /**
+     * 打开门禁的方式
+     *
+     * @see OpenMethod
+     */
+    private int openMethod;
+
+    public LocalDateTime getEventTime() {
+        return eventTime;
+    }
+
+    public void setEventTime(LocalDateTime eventTime) {
+        this.eventTime = eventTime;
+    }
+
+    public int getEventType() {
+        return eventType;
+    }
+
+    public void setEventType(int eventType) {
+        this.eventType = eventType;
+    }
+
+    public String getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(String cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public byte[] getImageBuffer() {
+        return imageBuffer;
+    }
+
+    public void setImageBuffer(byte[] imageBuffer) {
+        this.imageBuffer = imageBuffer;
+    }
+
+    public int getOpenMethod() {
+        return openMethod;
+    }
+
+    public void setOpenMethod(int openMethod) {
+        this.openMethod = openMethod;
+    }
+
+    /**
+     * 事件类型
+     */
+    public static class EventType {
+        public static final int UNKNOWN = 0;
+        /**
+         * 进门
+         */
+        public static final int ENTRY = 1;
+        /**
+         * 出门
+         */
+        public static final int EXIT = 2;
+    }
+
+    /**
+     * 开门方式
+     */
+    public static class OpenMethod {
+        public static final int UNKNOWN = 0;
+        /**
+         * 密码开锁
+         */
+        public static final int PWD_ONLY = 1;
+        /**
+         * 刷卡开锁
+         */
+        public static final int CARD = 2;
+        /**
+         * 先刷卡后密码开锁
+         */
+        public static final int CARD_FIRST = 3;
+        /**
+         * 先密码后刷卡开锁
+         */
+        public static final int PWD_FIRST = 4;
+        /**
+         * 远程开锁,如通过室内机或者平台对门口机开锁
+         */
+        public static final int REMOTE = 5;
+        /**
+         * 开锁按钮进行开锁
+         */
+        public static final int BUTTON = 6;
+        /**
+         * 指纹开锁
+         */
+        public static final int FINGERPRINT = 7;
+        /**
+         * 密码+刷卡+指纹组合开锁
+         */
+        public static final int PWD_CARD_FINGERPRINT = 8;
+        /**
+         * 密码+指纹组合开锁
+         */
+        public static final int PWD_FINGERPRINT = 10;
+        /**
+         * 刷卡+指纹组合开锁
+         */
+        public static final int CARD_FINGERPRINT = 11;
+        /**
+         * 多人开锁
+         */
+        public static final int PERSONS = 12;
+        /**
+         * 钥匙开门
+         */
+        public static final int KEY = 13;
+        /**
+         * 胁迫密码开门
+         */
+        public static final int COERCE_PWD = 14;
+        /**
+         * 二维码开门
+         */
+        public static final int QRCODE = 15;
+        /**
+         * 人脸识别开门
+         */
+        public static final int FACE_RECOGNITION = 16;
+        /**
+         * 人证对比
+         */
+        public static final int FACEIDCARD = 18;
+        /**
+         * 身份证+ 人证比对
+         */
+        public static final int FACEIDCARD_AND_IDCARD = 19;
+        /**
+         * 蓝牙开门
+         */
+        public static final int BLUETOOTH = 20;
+        /**
+         * 个性化密码开门
+         */
+        public static final int CUSTOM_PASSWORD = 21;
+        /**
+         * UserID+密码
+         */
+        public static final int USERID_AND_PWD = 22;
+        /**
+         * 人脸+密码开锁
+         */
+        public static final int FACE_AND_PWD = 23;
+        /**
+         * 指纹+密码开锁
+         */
+        public static final int FINGERPRINT_AND_PWD = 24;
+        /**
+         * 指纹+人脸开锁
+         */
+        public static final int FINGERPRINT_AND_FACE = 25;
+        /**
+         * 刷卡+人脸开锁
+         */
+        public static final int CARD_AND_FACE = 26;
+        /**
+         * 人脸或密码开锁
+         */
+        public static final int FACE_OR_PWD = 27;
+        /**
+         * 指纹或密码开锁
+         */
+        public static final int FINGERPRINT_OR_PWD = 28;
+        /**
+         * 指纹或人脸开锁
+         */
+        public static final int FINGERPRINT_OR_FACE = 29;
+        /**
+         * 刷卡或人脸开锁
+         */
+        public static final int CARD_OR_FACE = 30;
+        /**
+         * 刷卡或指纹开锁
+         */
+        public static final int CARD_OR_FINGERPRINT = 31;
+        /**
+         * 指纹+人脸+密码开锁
+         */
+        public static final int FINGERPRINT_AND_FACE_AND_PWD = 32;
+        /**
+         * 刷卡+人脸+密码开锁
+         */
+        public static final int CARD_AND_FACE_AND_PWD = 33;
+        /**
+         * 刷卡+指纹+密码开锁
+         */
+        public static final int CARD_AND_FINGERPRINT_AND_PWD = 34;
+        /**
+         * 卡+指纹+人脸组合开锁
+         */
+        public static final int CARD_AND_PWD_AND_FACE = 35;
+        /**
+         * 指纹或人脸或密码
+         */
+        public static final int FINGERPRINT_OR_FACE_OR_PWD = 36;
+        /**
+         * 卡或人脸或密码开锁
+         */
+        public static final int CARD_OR_FACE_OR_PWD = 37;
+        /**
+         * 卡或指纹或人脸开锁
+         */
+        public static final int CARD_OR_FINGERPRINT_OR_FACE = 38;
+        /**
+         * 卡+指纹+人脸+密码组合开锁
+         */
+        public static final int CARD_AND_FINGERPRINT_AND_FACE_AND_PWD = 39;
+        /**
+         * 卡或指纹或人脸或密码开锁
+         */
+        public static final int CARD_OR_FINGERPRINT_OR_FACE_OR_PWD = 40;
+        /**
+         * (身份证+人证比对)或 刷卡 或 人脸
+         */
+        public static final int FACEIPCARDANDIDCARD_OR_CARD_OR_FACE = 41;
+        /**
+         * 人证比对 或 刷卡(二维码) 或 人脸
+         */
+        public static final int FACEIDCARD_OR_CARD_OR_FACE = 42;
+        /**
+         * DTMF开锁(包括SIPINFO,RFC2833,INBAND)
+         */
+        public static final int DTMF = 43;
+        /**
+         * 远程二维码开门
+         */
+        public static final int REMOTE_QRCODE = 44;
+        /**
+         * 远程人脸开门
+         */
+        public static final int REMOTE_FACE = 45;
+    }
+}

+ 36 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/dto/DeviceId.java

@@ -0,0 +1,36 @@
+package com.usoftchina.smartschool.device.dto;
+
+/**
+ * 设备采用IP+PORT作为唯一标志
+ *
+ * @author yingp
+ * @date 2019/3/8
+ */
+public class DeviceId {
+    private String ip;
+    private int port;
+
+    public DeviceId() {
+    }
+
+    public DeviceId(String ip, int port) {
+        this.ip = ip;
+        this.port = port;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+}

+ 58 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/dto/DeviceInfo.java

@@ -0,0 +1,58 @@
+package com.usoftchina.smartschool.device.dto;
+
+import java.io.Serializable;
+
+/**
+ * 设备信息
+ *
+ * @author yingp
+ * @date 2019/3/8
+ */
+public class DeviceInfo implements Serializable {
+    private String ip;
+    private int port;
+    private String username;
+    private String password;
+
+    public DeviceInfo() {
+    }
+
+    public DeviceInfo(String ip, int port, String username, String password) {
+        this.ip = ip;
+        this.port = port;
+        this.username = username;
+        this.password = password;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}

+ 24 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/event/AccessControlEvent.java

@@ -0,0 +1,24 @@
+package com.usoftchina.smartschool.device.event;
+
+import com.usoftchina.smartschool.device.dto.AccessControlInfo;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * 门禁事件
+ *
+ * @author yingp
+ * @date 2019/3/7
+ */
+public class AccessControlEvent extends ApplicationEvent {
+
+    private final AccessControlInfo accessControlInfo;
+
+    public AccessControlEvent(Object source, AccessControlInfo accessControlInfo) {
+        super(source);
+        this.accessControlInfo = accessControlInfo;
+    }
+
+    public AccessControlInfo getAccessControlInfo() {
+        return accessControlInfo;
+    }
+}

+ 23 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/event/DeviceDisconnectEvent.java

@@ -0,0 +1,23 @@
+package com.usoftchina.smartschool.device.event;
+
+import com.usoftchina.smartschool.device.dto.DeviceId;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * 设备断开连接事件
+ *
+ * @author yingp
+ * @date 2019/3/8
+ */
+public class DeviceDisconnectEvent extends ApplicationEvent {
+    private final DeviceId deviceId;
+
+    public DeviceDisconnectEvent(Object source, DeviceId deviceId) {
+        super(source);
+        this.deviceId = deviceId;
+    }
+
+    public DeviceId getDeviceId() {
+        return deviceId;
+    }
+}

+ 23 - 0
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/event/DeviceReconnectEvent.java

@@ -0,0 +1,23 @@
+package com.usoftchina.smartschool.device.event;
+
+import com.usoftchina.smartschool.device.dto.DeviceId;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * 设备重新连接事件
+ *
+ * @author yingp
+ * @date 2019/3/8
+ */
+public class DeviceReconnectEvent extends ApplicationEvent {
+    private final DeviceId deviceId;
+
+    public DeviceReconnectEvent(Object source, DeviceId deviceId) {
+        super(source);
+        this.deviceId = deviceId;
+    }
+
+    public DeviceId getDeviceId() {
+        return deviceId;
+    }
+}

+ 41 - 0
applications/device/device-server/pom.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>device</artifactId>
+        <groupId>com.usoftchina.smartschool</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>device-server</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.usoftchina.smartschool</groupId>
+            <artifactId>device-sdk-dahua</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.smartschool</groupId>
+            <artifactId>server-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.smartschool</groupId>
+            <artifactId>file-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 23 - 0
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/DeviceApplication.java

@@ -0,0 +1,23 @@
+package com.usoftchina.smartschool.device;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+/**
+ * @author yingp
+ * @date 2019/3/8
+ */
+@SpringBootApplication
+@EnableEurekaClient
+@EnableAsync
+@EnableFeignClients({
+        "com.usoftchina.smartschool.file.api"
+})
+public class DeviceApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(DeviceApplication.class, args);
+    }
+}

+ 34 - 0
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/listener/AccessControlListener.java

@@ -0,0 +1,34 @@
+package com.usoftchina.smartschool.device.listener;
+
+import com.usoftchina.smartschool.device.event.AccessControlEvent;
+import com.usoftchina.smartschool.file.api.FileApi;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author yingp
+ * @date 2019/3/8
+ */
+@Component
+public class AccessControlListener {
+
+    @Autowired
+    private FileApi fileApi;
+
+    /**
+     * 门禁事件
+     *
+     * @param event
+     */
+    @Async
+    @EventListener(AccessControlEvent.class)
+    public void onAccessControlEvent(AccessControlEvent event) {
+        /**
+         * 1、保存图片文件;
+         * 2、保存门禁出入记录;
+         * 3、推送消息到消息服务器(微信服务监听此消息发送微信消息)
+         */
+    }
+}

+ 4 - 0
applications/device/device-server/src/main/resources/application.yml

@@ -0,0 +1,4 @@
+device:
+  dahua:
+    wait-time: 5000
+    connect-time: 10000

+ 21 - 0
applications/device/pom.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>applications</artifactId>
+        <groupId>com.usoftchina.smartschool</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>device</artifactId>
+    <packaging>pom</packaging>
+    <description>device</description>
+    <modules>
+        <module>device-sdk-dahua</module>
+        <module>device-server</module>
+        <module>device-sdk</module>
+    </modules>
+
+</project>

+ 1 - 0
applications/pom.xml

@@ -15,6 +15,7 @@
         <module>school</module>
         <module>wechat</module>
         <module>websocket</module>
+        <module>device</module>
     </modules>
 
 

+ 5 - 0
framework/core/src/main/java/com/usoftchina/smartschool/context/SpringContextHolder.java

@@ -20,6 +20,11 @@ public class SpringContextHolder {
         SpringContextHolder.context = context;
     }
 
+    public static ApplicationContext getContext() {
+        Assert.notNull(context, "spring context not ready");
+        return context;
+    }
+
     public static <T> T getBean(String name) {
         Assert.notNull(context, "spring context not ready");
         return (T) context.getBean(name);

+ 10 - 0
pom.xml

@@ -252,6 +252,16 @@
                 <artifactId>file-dto</artifactId>
                 <version>${project.release.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.usoftchina.smartschool</groupId>
+                <artifactId>device-sdk</artifactId>
+                <version>${project.release.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.usoftchina.smartschool</groupId>
+                <artifactId>device-sdk-dahua</artifactId>
+                <version>${project.release.version}</version>
+            </dependency>
             <!-- file upload -->
             <dependency>
                 <groupId>io.github.openfeign.form</groupId>