|
|
@@ -0,0 +1,180 @@ |
|
|
|
|
|
package com.hkversion.AI; |
|
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONException; |
|
|
|
|
|
import com.common.osSelect; |
|
|
|
|
|
import com.hkversion.FMSGCallBack_V31; |
|
|
|
|
|
import com.hkversion.HCNetSDK; |
|
|
|
|
|
import com.sun.jna.Native; |
|
|
|
|
|
import com.sun.jna.Pointer; |
|
|
|
|
|
import com.yzx.callback.AlarmCallback; |
|
|
|
|
|
import com.yzx.pojo.AlarmDataInfo; |
|
|
|
|
|
|
|
|
|
|
|
import java.io.UnsupportedEncodingException; |
|
|
|
|
|
|
|
|
|
|
|
public class AIMain { |
|
|
|
|
|
static HCNetSDK hCNetSDK = null; |
|
|
|
|
|
static int lUserID = -1;//用户句柄 |
|
|
|
|
|
static int iCharEncodeType = 0;//设备字符集 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 根据不同操作系统选择不同的库文件和库路径 |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private static boolean createSDKInstance() |
|
|
|
|
|
{ |
|
|
|
|
|
if(hCNetSDK == null) |
|
|
|
|
|
{ |
|
|
|
|
|
synchronized (HCNetSDK.class) |
|
|
|
|
|
{ |
|
|
|
|
|
String strDllPath = ""; |
|
|
|
|
|
try |
|
|
|
|
|
{ |
|
|
|
|
|
//System.setProperty("jna.debug_load", "true"); |
|
|
|
|
|
if(osSelect.isWindows()) |
|
|
|
|
|
//win系统加载库路径 |
|
|
|
|
|
strDllPath = System.getProperty("user.dir") + "\\lib\\HCNetSDK.dll"; |
|
|
|
|
|
else if(osSelect.isLinux()) |
|
|
|
|
|
//Linux系统加载库路径 |
|
|
|
|
|
strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so"; |
|
|
|
|
|
hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class); |
|
|
|
|
|
}catch (Exception ex) { |
|
|
|
|
|
System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage()); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* @param args |
|
|
|
|
|
* @throws UnsupportedEncodingException |
|
|
|
|
|
* @throws InterruptedException |
|
|
|
|
|
*/ |
|
|
|
|
|
public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException, JSONException { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(hCNetSDK == null) |
|
|
|
|
|
{ |
|
|
|
|
|
if(!createSDKInstance()) |
|
|
|
|
|
{ |
|
|
|
|
|
System.out.println("Load SDK fail"); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
//linux系统建议调用以下接口加载组件库 |
|
|
|
|
|
if (osSelect.isLinux()) |
|
|
|
|
|
{ |
|
|
|
|
|
HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256); |
|
|
|
|
|
HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256); |
|
|
|
|
|
//这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限 |
|
|
|
|
|
String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1"; |
|
|
|
|
|
String strPath2 = System.getProperty("user.dir") + "/lib/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 = System.getProperty("user.dir") + "/lib/"; |
|
|
|
|
|
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()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
hCNetSDK.NET_DVR_Init(); |
|
|
|
|
|
FMSGCallBack_V31 fMSFCallBack_V31 = new FMSGCallBack_V31(new AlarmCallback() { |
|
|
|
|
|
@Override |
|
|
|
|
|
public void process(AlarmDataInfo info) { |
|
|
|
|
|
System.out.println("报警信息:" + info.toString()); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
Pointer pUser = null; |
|
|
|
|
|
//设置报警回调函数 |
|
|
|
|
|
hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31,pUser); |
|
|
|
|
|
|
|
|
|
|
|
//开启SDK日志打印 |
|
|
|
|
|
boolean i= hCNetSDK.NET_DVR_SetLogToFile(3, "./sdklog", false); |
|
|
|
|
|
|
|
|
|
|
|
//登录设备 |
|
|
|
|
|
login_V40("192.168.69.64","admin","yzx@753159",(short)8000); |
|
|
|
|
|
//报警布防参数设置 |
|
|
|
|
|
HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM(); |
|
|
|
|
|
m_strAlarmInfo.dwSize = m_strAlarmInfo.size(); |
|
|
|
|
|
m_strAlarmInfo.byLevel = 0; //布防等级 |
|
|
|
|
|
m_strAlarmInfo.byAlarmInfoType = 1; // 智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT),1- 新报警信息(NET_ITS_PLATE_RESULT) |
|
|
|
|
|
m_strAlarmInfo.byDeployType = 0; //布防类型:0-客户端布防,1-实时布防 |
|
|
|
|
|
m_strAlarmInfo.write(); |
|
|
|
|
|
//设备布防 |
|
|
|
|
|
hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo); |
|
|
|
|
|
Thread.sleep(20000); |
|
|
|
|
|
/** |
|
|
|
|
|
* 撤防,端口监听,注销设备 |
|
|
|
|
|
*/ |
|
|
|
|
|
AIMain.logout(); |
|
|
|
|
|
|
|
|
|
|
|
//释放SDK,程序退出前调用 |
|
|
|
|
|
hCNetSDK.NET_DVR_Cleanup(); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 设备登录 |
|
|
|
|
|
* @param ipadress IP地址 |
|
|
|
|
|
* @param user 用户名 |
|
|
|
|
|
* @param psw 密码 |
|
|
|
|
|
* @param port 端口,默认8000 |
|
|
|
|
|
*/ |
|
|
|
|
|
public static void login_V40(String ipadress, String user, String psw, short port) { |
|
|
|
|
|
//注册 |
|
|
|
|
|
HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息 |
|
|
|
|
|
String m_sDeviceIP = ipadress;//设备ip地址 |
|
|
|
|
|
m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; |
|
|
|
|
|
System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); |
|
|
|
|
|
String m_sUsername = user;//设备用户名 |
|
|
|
|
|
m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; |
|
|
|
|
|
System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); |
|
|
|
|
|
String m_sPassword = psw;//设备密码 |
|
|
|
|
|
m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; |
|
|
|
|
|
System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); |
|
|
|
|
|
m_strLoginInfo.wPort = port; //sdk端口 |
|
|
|
|
|
m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 |
|
|
|
|
|
m_strLoginInfo.write(); |
|
|
|
|
|
HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 |
|
|
|
|
|
lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); |
|
|
|
|
|
if (lUserID == -1) { |
|
|
|
|
|
System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); |
|
|
|
|
|
return; |
|
|
|
|
|
} else { |
|
|
|
|
|
System.out.println("登录成功!"); |
|
|
|
|
|
m_strDeviceInfo.read(); |
|
|
|
|
|
iCharEncodeType = m_strDeviceInfo.byCharEncodeType; |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 登出操作 |
|
|
|
|
|
* |
|
|
|
|
|
*/ |
|
|
|
|
|
public static void logout(){ |
|
|
|
|
|
/**登出和清理,释放SDK资源*/ |
|
|
|
|
|
if (lUserID>=0) |
|
|
|
|
|
{ |
|
|
|
|
|
if (!hCNetSDK.NET_DVR_Logout(lUserID)) |
|
|
|
|
|
{ |
|
|
|
|
|
System.out.println("设备注销失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
System.out.println("设备注销成功!!!"); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |