package org.fh.util.HKSDK;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.fh.util.HKSDK.HCNetSDK.FColGlobalDataCallBack;
import org.fh.util.HKSDK.HCNetSDK.FMSGCallBack;
import com.sun.jna.Pointer;
public class AlarmJavaTest {
static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
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();//设备信息
FMSGCallBack fMSFCallBack;//报警回调函数实现
FMSGCallBack_V31 fMSFCallBack_V31;//报警回调函数实现
FColGlobalDataCallBack fGpsCallBack;//GPS信息查询回调函数实现
public static void main(String[] args) {
if(!hCNetSDK.NET_DVR_Init()){
System.out.println("SDK初始化失败");
return ;
}
System.out.println("SDK初始化成功");
//设置连接超时时间与重连功能
hCNetSDK.NET_DVR_SetConnectTime(2000,1);
hCNetSDK.NET_DVR_SetReconnect(10000,true);
int lUserID;//用户ID
HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo;//设备信息
lUserID = -1;
//读取配置文件里的IP、端口、用户名、密码
String ip=ClientDemo.getProperties("./src/main/resources/hksdk.properties", "hk_ip");
short port=Short.valueOf(ClientDemo.getProperties("./src/main/resources/hksdk.properties", "hk_port"));
String name=ClientDemo.getProperties("./src/main/resources/hksdk.properties", "hk_name");
String password=ClientDemo.getProperties("./src/main/resources/hksdk.properties", "hk_password");
m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
//注册设备
lUserID = hCNetSDK.NET_DVR_Login_V30(ip, (short) port, name, password, m_strDeviceInfo);
//如果注册失败返回-1,获取错误码
if (lUserID<0){
System.out.println("Login failed, error code="+hCNetSDK.NET_DVR_GetLastError());
}
System.out.println("注册成功");
//设置报警回调函数
FMSGCallBack_V31 fmsgCallBack_v31=new FMSGCallBack_V31();
boolean b = hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fmsgCallBack_v31, null);
//如果设置报警回调失败,获取错误码
if (!b){
System.out.println("SetDVRMessageCallBack failed, error code="+hCNetSDK.NET_DVR_GetLastError());
}
//建立报警上传通道(布防)
//布防参数
HCNetSDK.NET_DVR_SETUPALARM_PARAM net_dvr_setupalarm_param=new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
int nativeLong = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, net_dvr_setupalarm_param);
//如果布防失败返回-1
if (nativeLong<0){
System.out.println("SetupAlarmChan failed, error code="+hCNetSDK.NET_DVR_GetLastError());
//注销
hCNetSDK.NET_DVR_Logout(lUserID);
//释放SDK资源
hCNetSDK.NET_DVR_Cleanup();
}
try {
//等待设备上传报警信息
Thread.sleep(600001);
} catch (InterruptedException e) {
e.printStackTrace();
}
//撤销布防上传通道
if(!hCNetSDK.NET_DVR_CloseAlarmChan_V30(nativeLong)){
//System.out.println("NET_DVR_CloseAlarmChan_V30 failed, error code="+hCNetSDK.NET_DVR_GetLastError());
//注销
hCNetSDK.NET_DVR_Logout(lUserID);
//释放SDK资源
hCNetSDK.NET_DVR_Cleanup();
}
//注销用户
hCNetSDK.NET_DVR_Logout(lUserID);
//释放SDK资源
hCNetSDK.NET_DVR_Cleanup();
}
public static class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 {
//lCommand 上传消息类型 pAlarmer 报警设备信息 pAlarmInfo 报警信息 dwBufLen 报警信息缓存大小 pUser 用户数据
public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
try {
//报警类型
String sAlarmType = new String();
//报警时间
Date today = new Date();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format = dateFormat.format(today);
String[] sIP = new String[2];
sAlarmType = new String("lCommand=") + lCommand;
//lCommand是传的报警类型
switch (lCommand)
{
case HCNetSDK.COMM_ALARM_V40:
HCNetSDK.NET_DVR_ALARMINFO_V40 struAlarmInfoV40 = new HCNetSDK.NET_DVR_ALARMINFO_V40();
struAlarmInfoV40.write();
Pointer pInfoV40 = struAlarmInfoV40.getPointer();
pInfoV40.write(0, pAlarmInfo.getByteArray(0, struAlarmInfoV40.size()), 0, struAlarmInfoV40.size());
struAlarmInfoV40.read();
switch (struAlarmInfoV40.struAlarmFixedHeader.dwAlarmType)
{
case 0:
struAlarmInfoV40.struAlarmFixedHeader.ustruAlarm.setType(HCNetSDK.struIOAlarm.class);
struAlarmInfoV40.read();
sAlarmType = sAlarmType + new String(":信号量报警") + ","+ "报警输入口:" + struAlarmInfoV40.struAlarmFixedHeader.ustruAlarm.struioAlarm.dwAlarmInputNo;
break;
case 1:
sAlarmType = sAlarmType + new String(":硬盘满");
break;
case 2:
sAlarmType = sAlarmType + new String(":信号丢失");
break;
case 3:
struAlarmInfoV40.struAlarmFixedHeader.ustruAlarm.setType(HCNetSDK.struAlarmChannel.class);
struAlarmInfoV40.read();
int iChanNum = struAlarmInfoV40.struAlarmFixedHeader.ustruAlarm.sstrualarmChannel.dwAlarmChanNum;
sAlarmType = sAlarmType + new String(":移动侦测") + ","+ "报警通道个数:" + iChanNum + ","+ "报警通道号:";
for (int i=0; i<iChanNum; i++)
{
byte[] byChannel = struAlarmInfoV40.pAlarmData.getByteArray(i*4, 4);
int iChanneNo = 0;
for(int j=0;j<4;j++)
{
int ioffset = j*8;
int iByte = byChannel[j]&0xff;
iChanneNo = iChanneNo + (iByte << ioffset);
}
sAlarmType= sAlarmType + "+ch["+ iChanneNo +"]";
}
break;
case 4:
sAlarmType = sAlarmType + new String(":硬盘未格式化");
break;
case 5:
sAlarmType = sAlarmType + new String(":读写硬盘出错");
break;
case 6:
sAlarmType = sAlarmType + new String(":遮挡报警");
break;
case 7:
sAlarmType = sAlarmType + new String(":制式不匹配");
break;
case 8:
sAlarmType = sAlarmType + new String(":非法访问");
break;
}
//报警设备IP地址
sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);
break;
//9000报警信息主动上传
case HCNetSDK.COMM_ALARM_V30:
HCNetSDK.NET_DVR_ALARMINFO_V30 strAlarmInfoV30 = new HCNetSDK.NET_DVR_ALARMINFO_V30();
strAlarmInfoV30.write();
Pointer pInfoV30 = strAlarmInfoV30.getPointer();
pInfoV30.write(0, pAlarmInfo.getByteArray(0, strAlarmInfoV30.size()), 0, strAlarmInfoV30.size());
strAlarmInfoV30.read();
switch (strAlarmInfoV30.dwAlarmType)
{
case 0:
sAlarmType = sAlarmType + new String(":信号量报警") + ","+ "报警输入口:" + (strAlarmInfoV30.dwAlarmInputNumber+1);
break;
case 1:
sAlarmType = sAlarmType + new String(":硬盘满");
break;
case 2:
sAlarmType = sAlarmType + new String(":信号丢失");
break;
case 3:
sAlarmType = sAlarmType + new String(":移动侦测") + ","+ "报警通道:";
for (int i=0; i<64; i++)
{
if (strAlarmInfoV30.byChannel[i] == 1)
{
sAlarmType=sAlarmType + "ch"+(i+1)+" ";
}
}
break;
case 4:
sAlarmType = sAlarmType + new String(":硬盘未格式化");
break;
case 5:
sAlarmType = sAlarmType + new String(":读写硬盘出错");
break;
case 6:
sAlarmType = sAlarmType + new String(":遮挡报警");
break;
case 7:
sAlarmType = sAlarmType + new String(":制式不匹配");
break;
case 8:
sAlarmType = sAlarmType + new String(":非法访问");
break;
}
//报警设备IP地址
sIP = new String(pAlarmer.sDeviceIP).sp
海康sdk布防
最新推荐文章于 2024-05-03 23:32:57 发布