海康人脸下发

FAQ

  1. NET_DVR_StartRemoteConfig中的pUserData(用户数据)参数怎么设置

    用户数据是输入参数,没有特殊必要,无需设置,用null代替

    海康人脸下发_第1张图片

  2. NET_DVR_StartRemoteConfig回调函数怎么用?
    该方法回调函数的设置是cbStateCallback传入,用与下发消息到设备后,设备返回结果所调用的方法。回调函数一般包含4个参数。

    [out]:表示设备传出的内容值

    [in]:表示传入到设备的值

    海康人脸下发_第2张图片
    以java为例:

     /**
     * 远程配置回调函数接口
     */
    public static interface FRemoteConfigCallback extends Callback  {
        public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData);
    }
    // 实现回调函数
    public class CardRemoteConfigCallback implements FRemoteConfigCallback {
    
        @Override
        public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData) {
            
        }
    }
    

    这里需要注意的是,布防的回调函数全局设置(new)一个,如果设置多个会被重复调用。


  3. NET_DVR_StartRemoteConfig回调函数的dwType怎么用?
    回调函数中的dwType与下发的业务有关系,不同的下发业务,有不同的回调状态dwType,以下发和获取人员信息为例。
    海康人脸下发_第3张图片
    海康人脸下发_第4张图片
    根据不一样的dwType会返回不一样的内容。

    # java
    @Data
    @Slf4j
    public class CardRemoteConfigCallback implements HCNetSDK.FRemoteConfigCallback {
        private AtomicInteger uploadStatus = new AtomicInteger(0); // 0-准备下发; 1-下发成功
        @Override
        public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData) {
            log.info("卡片回调----------------------");
            log.info("dwType:" + dwType);
            byte[] dwStatus = new byte[4];
            lpBuffer.read(0, dwStatus, 0, 4);
            int iStatus = 0;
            for (int i = 0; i < 4; i++) {
                int ioffset = i * 8;
                int iByte = dwStatus[i] & 0xff;
                iStatus = iStatus + (iByte << ioffset);
            }
            log.info("状态值:"+ iStatus);
            if (iStatus == 1000) {
                uploadStatus.set(RemoteSetCardThread.UPLOAD_FACE_SUCCESS);
            }
    
        }
    }
    

  4. NET_DVR_SendRemoteConfig函数参数设置
    开始下发操作

    • lHandle:也就是在NET_DVR_StartRemoteConfig开启下发操作时返回的句柄

    • dwDataType:准备下发的操作类型,例如:0x3,表示下发卡片操作

    • *pSendBuf:也就是下发的内容,以指针的形式传入到sdk中,例如:0x3传入的结构是NET_DVR_CARD_CFG_V50

    • dwBufSize:*pSendBuf的大小

      海康人脸下发_第5张图片

      image-20200402100725353海康人脸下发_第6张图片

      /**
       * 卡参数配置结构体
       */
      public class NET_DVR_CARD_CFG_V50 extends Structure {
          public int dwSize;
          public int dwModifyParamType;//需要修改的卡参数,设置卡参数时有效,按位表示,每位代表一种参数,1为需要修改,0为不修改
          public byte[] byCardNo = new byte[ACS_CARD_NO_LEN]; //卡号
          public byte byCardValid = 1; //卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1)
          public byte byCardType = 1; //卡类型,1-普通卡,2-残疾人卡,3-黑名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,9-员工卡,10-应急卡,11-应急管理卡,默认普通卡
          public byte byLeaderCard = 1; //是否为首卡,1-是,0-否
          public byte byUserType = 0; // 用户类型 0 普通用户 1 管理员
          public byte[] byDoorRight = new byte[MAX_DOOR_NUM_256]; //门权限(楼层权限),按位表示,1为有权限,0为无权限,从低位到高位表示对门1-N是否有权限
          public NET_DVR_VALID_PERIOD_CFG struValid = new NET_DVR_VALID_PERIOD_CFG(); //有效期参数
          public byte[] byBelongGroup = new byte[MAX_GROUP_NUM_128]; //所属群组,按字节表示,1-属于,0-不属于
          public byte[] byCardPassword = new byte[CARD_PASSWORD_LEN]; //卡密码
          public CARDRIGHTPLAN_WORD[] wCardRightPlan = new CARDRIGHTPLAN_WORD[MAX_DOOR_NUM_256]; //卡权限计划,取值为计划模板编号,同个门不同计划模板采用权限或的方式处理
          public int dwMaxSwipeTime = 0; //最大刷卡次数,0为无次数限制(开锁次数)
          public int dwSwipeTime; //已刷卡次数
          public short wRoomNumber;  //房间号
          public short wFloorNumber;   //层号
          public int dwEmployeeNo;   //工号
          public byte[] byName = new byte[NAME_LEN];   //姓名
          public short wDepartmentNo;   //部门编号
          public short wSchedulePlanNo;   //排班计划编号
          public byte bySchedulePlanType;  //排班计划类型:0-无意义、1-个人、2-部门
          public byte byRightType;  //下发权限类型:0-普通发卡权限、1-二维码权限、2-蓝牙权限(可视对讲设备二维码权限配置项:房间号、卡号(虚拟卡号)、最大刷卡次数(开锁次数)、有效期参数;蓝牙权限:卡号(萤石APP账号)、其他参数配置与普通发卡权限一致)
          public byte[] byRes2 = new byte[2];
          public int dwLockID;  //锁ID
          public byte[] byLockCode = new byte[MAX_LOCK_CODE_LEN];    //锁代码
          public byte[] byRoomCode = new byte[MAX_DOOR_CODE_LEN];  //房间代码
          public int dwCardRight;      //卡权限
          public int dwPlanTemplate;   //计划模板(每天)各时间段是否启用,按位表示,0--不启用,1-启用
          public int dwCardUserId;    //持卡人ID
          public byte byCardModelType;  //0-空,1- MIFARE S50,2- MIFARE S70,3- FM1208 CPU卡,4- FM1216 CPU卡,5-国密CPU卡,6-身份证,7- NFC
          public byte[] byRes3 = new byte[83];
      
      
      }
      

流程:

海康人脸下发_第7张图片

你可能感兴趣的:(java)