|
|
|
@ -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 SDK端口,默认为设备的8000端口
|
|
|
|
|
* @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; // 返回登录结果
|
|
|
|
|
}
|
|
|
|
|
}
|