海康sdk布防

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
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值