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表示下发卡号,人名,工号。

猜你喜欢

转载自blog.csdn.net/shijieming/article/details/81017977