lxw
2023-10-09 fc3e50eda51fbd3d63666ac92efb27e6fcdd6475
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.whyc.carCamera.Acs;
 
import com.sun.jna.ptr.IntByReference;
import com.whyc.carCamera.NetSDKDemo.HCNetSDK;
import com.whyc.pojo.CarCamera;
 
/**
 * 门禁设备管理:
 * 1、获取(设置)门禁主机参数
 * 2、获取门禁主机工作状态
 */
public class ACSManage {
 
    /**
     * 获取(设置)门禁主机参数
     *
     * @param lUserID 用户登录句柄
     */
    public static void acsCfg(int lUserID) {
 
        /**获取门禁主机参数*/
        HCNetSDK.NET_DVR_ACS_CFG struAcsCfg = new HCNetSDK.NET_DVR_ACS_CFG();
        struAcsCfg.dwSize = struAcsCfg.size();
        struAcsCfg.write();
        IntByReference intByReference = new IntByReference(0);
        boolean b_GetAcsCfg = AcsMain.hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ACS_CFG, 0xFFFFFFFF, struAcsCfg.getPointer(),
                struAcsCfg.size(), intByReference);
        if (b_GetAcsCfg = false) {
            System.out.println("获取门禁主机参数,错误码为" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
            return;
        } else {
            System.out.println("获取门禁主机参数成功");
            struAcsCfg.read();
            System.out.println("1.是否显示抓拍图片:" + struAcsCfg.byShowCapPic + "\n");  //是否显示抓拍图片, 0-不显示,1-显示
            System.out.println("2.是否显示卡号:" + struAcsCfg.byShowCardNo + "\n");   //是否显示卡号,0-不显示,1-显示
            System.out.println("3.是否开启语音提示:" + struAcsCfg.byVoicePrompt + "\n");  //是否启用语音提示,0-不启用,1-启用
            System.out.println("4.联动抓图是否上传:" + struAcsCfg.byUploadCapPic + "\n"); //联动抓拍是否上传图片,0-不上传,1-上传
        }
 
        /**设置门禁主机参数*/
        struAcsCfg.byShowCardNo = 1;     //开启显示卡号
        struAcsCfg.byVoicePrompt = 0;    //关闭语音提示
        struAcsCfg.byUploadCapPic = 1;   //开启联动抓图后,设备上抓拍的图片才会通过报警布防上传,否则没有不上传
        struAcsCfg.byShowCapPic = 1;
        struAcsCfg.write();
        boolean b_SetAcsCfg = AcsMain.hCNetSDK.NET_DVR_SetDVRConfig(lUserID, HCNetSDK.NET_DVR_SET_ACS_CFG, 0xFFFFFFFF, struAcsCfg.getPointer(), struAcsCfg.size());
        if (b_SetAcsCfg = false) {
            System.out.println("设置门禁主机参数,错误码为:" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
            return;
        } else {
            System.out.println("设置门禁主机参数成功!!!");
        }
    }
 
    /**
     * 获取门禁主机工作状态
     *
     * @param lUserID 用户登录句柄
     */
    public static void getAcsStatus(int lUserID){
        HCNetSDK.NET_DVR_ACS_WORK_STATUS_V50 netDvrAcsWorkStatusV50 = new HCNetSDK.NET_DVR_ACS_WORK_STATUS_V50();
        netDvrAcsWorkStatusV50.dwSize = netDvrAcsWorkStatusV50.size();
        netDvrAcsWorkStatusV50.write();
        IntByReference intByReference = new IntByReference(0);
        boolean b_GetAcsStatus = AcsMain.hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ACS_WORK_STATUS_V50, 0xFFFFFFFF, netDvrAcsWorkStatusV50.getPointer(),
                netDvrAcsWorkStatusV50.size(), intByReference);
        if (b_GetAcsStatus = false) {
            System.out.println("获取门禁主机工作状态,错误码为:" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
            return;
        } else {
            System.out.println("获取门禁主机工作状态成功!!!");
            netDvrAcsWorkStatusV50.read();
            System.out.println("1.门锁状态(或者梯控的继电器开合状态):" + netDvrAcsWorkStatusV50.byDoorLockStatus[0] + "\n"); //门锁状态:0- 正常关,1- 正常开,2- 短路报警,3- 断路报警,4- 异常报警
            System.out.println("2.门状态(或者梯控的楼层状态):" + netDvrAcsWorkStatusV50.byDoorStatus[0] + "\n"); //门状态(或者梯控的楼层状态):1- 休眠,2- 常开状态(对于梯控,表示自由状态),3- 常闭状态(对于梯控,表示禁用状态),4- 普通状态(对于梯控,表示受控状态)
            System.out.println("3.门磁状态:" + netDvrAcsWorkStatusV50.byMagneticStatus[0] + "\n"); //门磁状态,0-正常关,1-正常开,2-短路报警,3-断路报警,4-异常报警
            System.out.println("4.事件报警输入状态:" + netDvrAcsWorkStatusV50.byCaseStatus[0] + "\n"); //事件报警输入状态:0- 无输入,1- 有输入
        }
    }
 
    /**
     * 获取门禁主机工作状态
     *
     * @param lUserID 用户登录句柄
     */
    public static CarCamera getCarCameraStatus(int lUserID){
        CarCamera carCamera=new CarCamera();
        HCNetSDK.NET_DVR_ACS_WORK_STATUS_V50 netDvrAcsWorkStatusV50 = new HCNetSDK.NET_DVR_ACS_WORK_STATUS_V50();
        netDvrAcsWorkStatusV50.dwSize = netDvrAcsWorkStatusV50.size();
        netDvrAcsWorkStatusV50.write();
        IntByReference intByReference = new IntByReference(0);
        boolean b_GetAcsStatus = AcsMain.hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ACS_WORK_STATUS_V50, 0xFFFFFFFF, netDvrAcsWorkStatusV50.getPointer(),
                netDvrAcsWorkStatusV50.size(), intByReference);
        if (b_GetAcsStatus = false) {
            System.out.println("获取门禁主机工作状态,错误码为:" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
            return null;
        } else {
            System.out.println("获取门禁主机工作状态成功!!!");
            netDvrAcsWorkStatusV50.read();
            /*System.out.println("1.门锁状态(或者梯控的继电器开合状态):" + netDvrAcsWorkStatusV50.byDoorLockStatus[0] + "\n"); //门锁状态:0- 正常关,1- 正常开,2- 短路报警,3- 断路报警,4- 异常报警
            System.out.println("2.门状态(或者梯控的楼层状态):" + netDvrAcsWorkStatusV50.byDoorStatus[0] + "\n"); //门状态(或者梯控的楼层状态):1- 休眠,2- 常开状态(对于梯控,表示自由状态),3- 常闭状态(对于梯控,表示禁用状态),4- 普通状态(对于梯控,表示受控状态)
            System.out.println("3.门磁状态:" + netDvrAcsWorkStatusV50.byMagneticStatus[0] + "\n"); //门磁状态,0-正常关,1-正常开,2-短路报警,3-断路报警,4-异常报警
            System.out.println("4.事件报警输入状态:" + netDvrAcsWorkStatusV50.byCaseStatus[0] + "\n"); //事件报警输入状态:0- 无输入,1- 有输入*/
            carCamera.setLockStatus(netDvrAcsWorkStatusV50.byDoorLockStatus[0]);
            carCamera.setDoorStatus(netDvrAcsWorkStatusV50.byDoorStatus[0]);
            carCamera.setDoorContact(netDvrAcsWorkStatusV50.byMagneticStatus[0]);
            carCamera.setEventAlarm(netDvrAcsWorkStatusV50.byCaseStatus[0] );
        }
        return carCamera;
    }
 
    /**
     * 远程控门
     * @param userID
     */
    public static void remoteControlGate(int userID)
    {
        /**第二个参数lGatewayIndex
         [in] 门禁序号(楼层编号、锁ID),从1开始,-1表示对所有门(或者梯控的所有楼层)进行操作
         第三个参数dwStaic
         [in] 命令值:0- 关闭(对于梯控,表示受控),1- 打开(对于梯控,表示开门),2- 常开(对于梯控,表示自由、通道状态),3- 常关(对于梯控,表示禁用),4- 恢复(梯控,普通状态),5- 访客呼梯(梯控),6- 住户呼梯(梯控)*/
        boolean b_gate=AcsMain.hCNetSDK.NET_DVR_ControlGateway(userID,1,1);
        if (b_gate==false)
        {
            System.out.println("远程控门失败,err="+AcsMain.hCNetSDK.NET_DVR_GetLastError());
            return;
        }
        System.out.println("远程控门成功");
        return;
    }
}