feat: 增加海康库初始化和登入设备功能

hc-jna3
huangfeng 9 hours ago
parent 242250b18e
commit 1429d53c02

@ -0,0 +1,117 @@
package com.hcsdk;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.xydl.cac.model.StaticVariable;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class HCModule {
public static HCNetSDK hCNetSDK = null;
static int userID;
static FExceptionCallBack_Imp fExceptionCallBack;
static String libPath;
private static boolean createSDKInstance() {
if (hCNetSDK == null) {
synchronized (HCNetSDK.class) {
String strDllPath = libPath + "libhcnetsdk.so";
hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class);
}
}
return true;
}
static class FExceptionCallBack_Imp implements HCNetSDK.FExceptionCallBack {
@Override
public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) {
log.info("回调: dwType=" + dwType + ", lUserID=" + lUserID + ", lHandle=" + lHandle + ", pUser=" + pUser);
return;
}
}
public static void init() {
libPath = StaticVariable.jarPath + "/hklib/";
log.info("海康库路径=" + libPath);
createSDKInstance();
HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256);
HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256);
//这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限
String strPath1 = libPath + "libcrypto.so.1.1";
String strPath2 = libPath + "libssl.so.1.1";
System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length());
ptrByteArray1.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer());
System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length());
ptrByteArray2.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer());
String strPathCom = libPath + "HCNetSDKCom/";
HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
struComPath.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
boolean r = hCNetSDK.NET_DVR_Init();
if (!r) {
log.error("海康热成像初始化失败,错误码为: " + hCNetSDK.NET_DVR_GetLastError());
}
Pointer pUser = null;
r = hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, pUser);
if (!r) {
log.error("海康设置回调失败,错误码为: " + hCNetSDK.NET_DVR_GetLastError());
}
}
public static boolean logout() {
return hCNetSDK.NET_DVR_Logout(userID);
}
public static void cleanup() {
if (hCNetSDK != null) {
hCNetSDK.NET_DVR_Cleanup();
}
hCNetSDK = null;
}
/**
* V40 V30
*
* @param ip IP
* @param port SDK8000
* @param user
* @param psw
* @return ID-1
*/
public static boolean login(String ip, short port, String user, String psw) {
// 创建设备登录信息和设备信息对象
HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息
HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
System.arraycopy(ip.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, ip.length());
m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
System.arraycopy(user.getBytes(), 0, m_strLoginInfo.sUserName, 0, user.length());
m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
System.arraycopy(psw.getBytes(), 0, m_strLoginInfo.sPassword, 0, psw.length());
m_strLoginInfo.wPort = port;
m_strLoginInfo.bUseAsynLogin = false; //是否异步登录0- 否1- 是
// m_strLoginInfo.byLoginMode=1; //ISAPI登录
m_strLoginInfo.write();
// 执行登录操作
userID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
if (userID == -1) {
log.error("海康热成像登入失败" + ip + ":" + port
+ ", 用户名:" + user + ", 密码:" + psw + ", 错误码为: " + hCNetSDK.NET_DVR_GetLastError());
return false;
}
return true; // 返回登录结果
}
}

@ -1,8 +1,10 @@
package com.xydl.cac;
import com.xydl.cac.model.StaticVariable;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
@ -25,6 +27,8 @@ public class CacBackendApplication {
}
public static void main(String[] args) {
ApplicationHome home = new ApplicationHome(CacBackendApplication.class);
StaticVariable.jarPath = home.getSource().getParentFile().getAbsolutePath();
SpringApplication.run(CacBackendApplication.class, args);
}
}

@ -14,6 +14,7 @@ import java.util.concurrent.ConcurrentHashMap;
public class StaticVariable {
public static String jarPath = "";
public static Iec104Server iec104Server = null;
public static Iec104Client realTime104Client = null;

@ -1,5 +1,6 @@
package com.xydl.cac.thermal;
import com.hcsdk.HCModule;
import com.xydl.cac.entity.NSensor;
import com.xydl.cac.entity.ThermalConfig;
import com.xydl.cac.model.StaticVariable;
@ -32,25 +33,23 @@ public class HCThermalService {
if (shutdown == 1) {
return;
}
// try {
// LoginModule.init(null, null);
// NSensor sensor = list.get(0);
// boolean r = LoginModule.login(sensor.getIp(), sensor.getPort(), sensor.getUsername(), sensor.getPasswd());
// if (r) {
// log.info("大华热成像登入成功" + sensor.getIp() + ":" + sensor.getPort()
// + ", 用户名:" + sensor.getUsername() + ", 密码:" + sensor.getPasswd());
// } else {
// log.error("大华热成像登入失败" + sensor.getIp() + ":" + sensor.getPort()
// + ", 用户名:" + sensor.getUsername() + ", 密码:" + sensor.getPasswd());
// return;
// }
// String time = DateUtil.format(new Date());
// for (NSensor item : list) {
try {
HCModule.init();
NSensor sensor = list.get(0);
boolean r = HCModule.login(sensor.getIp(), sensor.getPort().shortValue(), sensor.getUsername(), sensor.getPasswd());
if (r) {
log.info("海康热成像登入成功" + sensor.getIp() + ":" + sensor.getPort()
+ ", 用户名:" + sensor.getUsername() + ", 密码:" + sensor.getPasswd());
} else {
return;
}
String time = DateUtil.format(new Date());
for (NSensor item : list) {
// NetSDKLib.NET_RADIOMETRYINFO data = ThermalCameraModule.queryItemTemper(0, 0, sensor.getTmId(), sensor.getTmType());
// if (data == null) {
// log.warn("大华热成像没有采集到数据, 序号" + item.getTmId() + "测量项目" + sensor.getTmType());
// log.warn("海康热成像没有采集到数据, 序号" + item.getTmId() + "测量项目" + sensor.getTmType());
// } else {
// log.info("大华热成像采集到序号" + item.getTmId() + "测量项目" + sensor.getTmType() + "的max="
// log.info("海康热成像采集到序号" + item.getTmId() + "测量项目" + sensor.getTmType() + "的max="
// + data.fTemperMax + ", min=" + data.fTemperMin + ", aver=" + data.fTemperAver);
// if (StringUtils.isNotBlank(config.getMaxtemp())) {
// String value = String.valueOf(data.fTemperMax);
@ -71,12 +70,12 @@ public class HCThermalService {
// StaticVariable.updateLastData(item.getDevId(), config.getAvertemp(), value, time);
// }
// }
// }
// LoginModule.logout();
// } catch (Exception ex) {
// log.error("大华热成像测温采集异常, " + ex.getMessage(), ex);
// } finally {
// LoginModule.cleanup();
// }
}
HCModule.logout();
} catch (Exception ex) {
log.error("海康热成像测温采集异常, " + ex.getMessage(), ex);
} finally {
HCModule.cleanup();
}
}
}

Loading…
Cancel
Save