java调用海康人脸识别机5603的sdk的使用总结(二)

下发卡号

该人脸机如果需要录入人脸信息,需要先录入卡号,员工号,姓名等(好像卡号是必须的,其他可以不用填写),当设备中已经有了这条信息,再下发人脸和卡号信息,会自动绑定。

先执行

NativeLong lUserID = hCNetSDK.NET_DVR_Login_V40(pLoginInfo, lpDeviceInfo);登录设备
新建NET_DVR_CARD_CFG_COND类
lpInBuffer.dwCardNum = 1;
lpInBuffer.byCheckCardNo = 0;
lpInBuffer.dwSize = lpInBuffer.size();
FRemoteConfigCallback fRemoteConfigCallback= newFRemoteConfigCallback();

// 这个很重要Structure 类的write()方法会把结构体的所有字段固定住,使原生函数可以访问。

lpInBuffer.write();

// 启动远程配置。

NativeLong lHandle = hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_SET_CARD_CFG_V50, lpInBuffer.getPointer(), lpInBuffer.size(),fRemoteConfigCallback, pLoginInfo.pUser);
lpInBuffer.read();

定义HCNetSDK.NET_DVR_CARD_CFG_V50类,这个是卡信息类

HCNetSDK.NET_DVR_CARD_CFG_V50 struCardCfg = new HCNetSDK.NET_DVR_CARD_CFG_V50();

注意里面的数组要实例化,并按sdk定好长度

举个例子:

for (inti = 0; i < cardNo.length(); i++) {
    struCardCfg.byCardNo[i] = (byte) cardNo.charAt(i);
}

以上代码是赋值卡号的,卡号的byte[]定义的时候的长度是32,经过上面的赋值之后,长度依然是32不变。没有内容的地方就是0

下面是我定义的内容

struCardCfg.dwModifyParamType= 0x00000C87;
           struCardCfg.byCardValid = (byte) 1;
           struCardCfg.byCardType = (byte) 1;
           // struCardCfg.struValid = struValid;
           struCardCfg.struValid.byEnable = (byte) 1;
           struCardCfg.struValid.struBeginTime.wYear = 2018;
           struCardCfg.struValid.struBeginTime.byMonth = (byte) 6;
           struCardCfg.struValid.struBeginTime.byDay = (byte) 1;
           struCardCfg.struValid.struBeginTime.byHour = (byte) 1;
           struCardCfg.struValid.struBeginTime.byMinute = (byte) 1;
           struCardCfg.struValid.struBeginTime.bySecond = (byte) 1;
           struCardCfg.struValid.struEndTime.wYear = 2025;
           struCardCfg.struValid.struEndTime.byMonth = (byte) 6;
           struCardCfg.struValid.struEndTime.byDay = (byte) 1;
           struCardCfg.struValid.struEndTime.byHour = (byte) 1;
           struCardCfg.struValid.struEndTime.byMinute = (byte) 1;
           struCardCfg.struValid.struEndTime.bySecond = (byte) 1;
           struCardCfg.dwModifyParamType= 399;

// 密码
           Stringps = "111111";
           for (inti = 0; i < ps.length(); i++) {
             struCardCfg.byCardPassword[i] = (byte) ps.charAt(i);
           }
           // 员工号
           struCardCfg.dwEmployeeNo = 215487;
           // 人名
           StringempName= "xxxxx";
           byte[] name = this.changeToByte(empName);
           for (inti = 0; i < name.length; i++) {
              struCardCfg.byName[i] = name[i];
           }
           struCardCfg.dwSize= struCardCfg.size();// 2708
struCardCfg.write();
           PointerlpPicConfig= struCardCfg.getPointer();

// 发送长连接

           booleanresult = hCNetSDK.NET_DVR_SendRemoteConfig(lHandle, HCNetSDK.ENUM_ACS_SEND_DATA,lpPicConfig,     struCardCfg.size());

// 关闭长连接配置接口所创建的句柄,释放资源。

booleanresult2= hCNetSDK.NET_DVR_StopRemoteConfig(lHandle);

dwModifyParamType的值请参考sdk,0x00000C87表示下发卡号,人名,工号。

你可能感兴趣的:(java,海康,海康sdk,java)