whyclxw
2024-03-11 525166acab2b1219417f1e3953c0b7836995bc2c
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
package com.whyc.peopleCamera.Acs;
 
 
import com.sun.jna.ptr.IntByReference;
import com.whyc.peopleCamera.NetSDKDemo.HCNetSDK;
 
/**
 * 门禁设备管理:
 * 1、获取(设置)门禁主机参数
 * 2、获取门禁主机工作状态
 */
public final 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 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;
    }
}