package com.netsdk.demo.customize.accessMeasure;
|
|
import static com.netsdk.lib.Utils.getOsPrefix;
|
|
import java.io.File;
|
import java.io.UnsupportedEncodingException;
|
import java.util.Objects;
|
import java.util.Scanner;
|
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.demo.util.Test;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
import com.netsdk.lib.enumeration.*;
|
import com.netsdk.lib.structure.*;
|
import com.sun.jna.Memory;
|
import com.sun.jna.Pointer;
|
import com.sun.jna.ptr.IntByReference;
|
|
/**
|
* @author : 260611
|
* @since : Created in 2021/10/11 11:18
|
*/
|
public class AccessMeasure {
|
|
static NetSDKLib netsdkApi = NetSDKLib.NETSDK_INSTANCE;
|
static NetSDKLib configApi = NetSDKLib.CONFIG_INSTANCE;
|
|
private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
|
// 登陆句柄
|
private static NetSDKLib.LLong loginHandle = new NetSDKLib.LLong(0);
|
// 智能订阅句柄
|
private NetSDKLib.LLong attachHandle = new NetSDKLib.LLong(0);
|
|
private static class DisconnectCallback implements NetSDKLib.fDisConnect {
|
private static AccessMeasure.DisconnectCallback instance = new AccessMeasure.DisconnectCallback();
|
|
private DisconnectCallback() {
|
}
|
|
public static AccessMeasure.DisconnectCallback getInstance() {
|
return instance;
|
}
|
|
@Override
|
public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s:%d] Disconnect!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
private static class HaveReconnectCallback implements NetSDKLib.fHaveReConnect {
|
private static AccessMeasure.HaveReconnectCallback instance = new AccessMeasure.HaveReconnectCallback();
|
|
private HaveReconnectCallback() {
|
}
|
|
public static AccessMeasure.HaveReconnectCallback getInstance() {
|
return instance;
|
}
|
|
@Override
|
public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s:%d] HaveReconnected!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
public void EndTest() {
|
System.out.println("End Test");
|
if (loginHandle.longValue() != 0) {
|
netsdkApi.CLIENT_Logout(loginHandle);
|
}
|
System.out.println("See You...");
|
|
netsdkApi.CLIENT_Cleanup();
|
System.exit(0);
|
}
|
|
public void InitTest() {
|
// 初始化SDK库
|
netsdkApi.CLIENT_Init(AccessMeasure.DisconnectCallback.getInstance(), null);
|
|
// 设置断线自动重练功能
|
netsdkApi.CLIENT_SetAutoReconnect(AccessMeasure.HaveReconnectCallback.getInstance(), null);
|
|
// 向设备登入
|
int nSpecCap = 0;
|
IntByReference nError = new IntByReference(0);
|
loginHandle = netsdkApi.CLIENT_LoginEx2(address, port, username, password, nSpecCap, null, deviceInfo, nError);
|
|
if (loginHandle.longValue() == 0) {
|
System.err.printf("Login Device [%s:%d] Failed ! Last Error[%x]\n", address, port,
|
netsdkApi.CLIENT_GetLastError());
|
EndTest();
|
return;
|
}
|
|
System.out.printf("Login Device [%s:%d] Success. \n", address, port);
|
}
|
|
// 编码格式
|
public static String encode;
|
|
static {
|
String osPrefix = getOsPrefix();
|
if (osPrefix.toLowerCase().startsWith("win32-amd64")) {
|
encode = "GBK";
|
} else if (osPrefix.toLowerCase().startsWith("linux-amd64")) {
|
encode = "UTF-8";
|
}
|
}
|
|
/******************************** 测试接口功能 ***************************************/
|
|
/**
|
* 获取下发门禁测温配置
|
*/
|
public void GetandSetAccessControlMeasureTempInfo() {
|
NET_CFG_ACCESSCONTROL_MEASURE_TEMP_INFO config = new NET_CFG_ACCESSCONTROL_MEASURE_TEMP_INFO();
|
Pointer pointer = new Memory(config.size());
|
ToolKits.SetStructDataToPointer(config, pointer, 0);
|
/**配置获取**/
|
boolean result = netsdkApi.CLIENT_GetConfig(loginHandle, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_ACCESSCONTROL_MEASURE_TEMP, -1,
|
pointer, config.size(), 5000, null);
|
if (!result) {
|
System.out.println("获取门禁测温配置失败:" + ENUMERROR.getErrorMessage());
|
} else {
|
System.out.println("获取门禁测温配置成功:" + ENUMERROR.getErrorMessage());
|
ToolKits.GetPointerData(pointer, config);
|
System.out.println("bEnable:" + config.bEnable);
|
System.out.println("bOnlyTempMode:" + config.bOnlyTempMode);
|
System.out.println("bDisplayTemp:" + config.bDisplayTemp);
|
System.out.println("emMaskDetectMode:" + config.emMaskDetectMode);
|
System.out.println("emMeasureType:" + config.emMeasureType);
|
System.out.println("stuInfraredTempParam:\n" + config.stuInfraredTempParam.toString());
|
System.out.println("stuThermalImageTempParam:\n" + config.stuThermalImageTempParam.toString());
|
System.out.println("stuGuideModuleTempParam:\n" + config.stuGuideModuleTempParam.toString());
|
System.out.println("stuWristTempParam:\n" + config.stuWristTempParam.toString());
|
// if(config.emMeasureType == 1){
|
// System.out.println("Mode:Infrared");
|
// System.out.println("stuInfraredTempParam:\n" + config.stuInfraredTempParam.toString());
|
// }else if(config.emMeasureType == 2){
|
// System.out.println("Mode:Thermal image");
|
// System.out.println("stuThermalImageTempParam:\n" + config.stuThermalImageTempParam.toString());
|
// }else if(config.emMeasureType == 3){
|
// System.out.println("Mode:Guide module");
|
// System.out.println("stuGuideModuleTempParam:\n" + config.stuGuideModuleTempParam.toString());
|
// }else if(config.emMeasureType == 4){
|
// System.out.println("Mode:Wrist");
|
// System.out.println("stuWristTempParam:\n" + config.stuWristTempParam.toString());
|
// }else{
|
// System.out.println("Mode:unknow or error");
|
// }
|
|
/**修改相关参数**/
|
if(config.bEnable != 0) {
|
config.bEnable = 0;
|
}else{
|
config.bEnable = 1;
|
}
|
if(config.bDisplayTemp != 0) {
|
config.bDisplayTemp = 0;
|
}else{
|
config.bDisplayTemp = 1;
|
}
|
if(config.bOnlyTempMode != 0) {
|
config.bOnlyTempMode = 0;
|
}else{
|
config.bOnlyTempMode = 1;
|
}
|
if(++config.emMaskDetectMode > 3){
|
config.emMaskDetectMode = 0;
|
}
|
|
/**如需修改测温类型,将此处取消注释**/
|
// if(++config.emMeasureType > 4){
|
// config.emMeasureType = 1;
|
// }
|
|
if(config.emMeasureType == 1){
|
config.stuInfraredTempParam.nMaxDistance++;
|
config.stuInfraredTempParam.nRetentionTime++;
|
config.stuInfraredTempParam.dbCorrectTemp += 0.1;
|
config.stuInfraredTempParam.dbTempThreshold +=0.1;
|
config.stuInfraredTempParam.dbValidTempLowerLimit +=0.1;
|
if(config.stuInfraredTempParam.bDebugModelEnable != 0) {
|
config.stuInfraredTempParam.bDebugModelEnable = 0;
|
}else{
|
config.stuInfraredTempParam.bDebugModelEnable = 1;
|
}
|
if(config.stuInfraredTempParam.bRectEnable != 0) {
|
config.stuInfraredTempParam.bRectEnable = 0;
|
}else{
|
config.stuInfraredTempParam.bRectEnable = 1;
|
}
|
}else if(config.emMeasureType == 2){
|
config.stuThermalImageTempParam.nFaceCompareThreshold++;
|
config.stuThermalImageTempParam.nOverTempMaxDistance++;
|
config.stuThermalImageTempParam.nRetentionTime++;
|
}else if(config.emMeasureType == 3){
|
if(config.stuGuideModuleTempParam.bRectEnable != 0) {
|
config.stuGuideModuleTempParam.bRectEnable = 0;
|
}else{
|
config.stuGuideModuleTempParam.bRectEnable = 1;
|
}
|
config.stuGuideModuleTempParam.nMaxDistance++;
|
config.stuGuideModuleTempParam.dbCorrectTemp+=0.1;
|
config.stuGuideModuleTempParam.dbTempRandReplaceThreshold+=0.1;
|
config.stuGuideModuleTempParam.dbTempThreshold+=0.1;
|
config.stuGuideModuleTempParam.dbValidTempLowerLimit+=0.1;
|
if(config.stuGuideModuleTempParam.bDebugModelEnable != 0) {
|
config.stuGuideModuleTempParam.bDebugModelEnable = 0;
|
}else{
|
config.stuGuideModuleTempParam.bDebugModelEnable = 1;
|
}
|
if(++config.stuGuideModuleTempParam.emCalibrationMode > 4){
|
config.stuGuideModuleTempParam.emCalibrationMode = 0;
|
}
|
if(config.stuGuideModuleTempParam.bHeatDisplayEnbale != 0) {
|
config.stuGuideModuleTempParam.bHeatDisplayEnbale = 0;
|
}else{
|
config.stuGuideModuleTempParam.bHeatDisplayEnbale = 1;
|
}
|
}else if(config.emMeasureType == 4){
|
config.stuWristTempParam.dbCorrectTemp+=0.1;
|
config.stuWristTempParam.dbTempThreshold+=0.1;
|
config.stuWristTempParam.dbValidTempLowerLimit+=0.1;
|
config.stuWristTempParam.nInvalidMeasureDistance++;
|
config.stuWristTempParam.nMeasureTimeout++;
|
config.stuWristTempParam.nValidMeasureDistance++;
|
}
|
config.write();
|
/**配置下发**/
|
boolean bRet = netsdkApi.CLIENT_SetConfig(loginHandle, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_ACCESSCONTROL_MEASURE_TEMP, -1,
|
config.getPointer(), config.size(), 5000, new IntByReference(0), null);
|
if(!bRet){
|
System.out.println("下发门禁测温配置失败:" + ENUMERROR.getErrorMessage());
|
}else{
|
System.out.println("下发门禁测温配置成功");
|
}
|
}
|
}
|
/******************************** 测试控制台 ***************************************/
|
|
// 配置登陆地址,端口,用户名,密码
|
String address = "171.2.100.146"; // 172.24.1.229 172.24.31.180 //172.12.66.45
|
int port = 37777;
|
String username = "admin";
|
String password = "admin123";
|
|
public static void main(String[] args) {
|
AccessMeasure demo = new AccessMeasure();
|
demo.InitTest();
|
demo.RunTest();
|
demo.EndTest();
|
|
}
|
|
/**
|
* 加载测试内容
|
*/
|
public void RunTest() {
|
CaseMenu menu = new CaseMenu();
|
menu.addItem(new CaseMenu.Item(this, "获取下发门禁测温配置", "GetandSetAccessControlMeasureTempInfo"));
|
menu.run();
|
}
|
|
/******************************** 结束 ***************************************/
|
}
|