package com.netsdk.demo.customize;
|
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
import com.netsdk.lib.structure.CFG_REGULATOR_DETECT_INFO;
|
import com.netsdk.lib.structure.NET_CFG_ENVIRONMENT_THERM_INFO;
|
import com.netsdk.lib.structure.NET_TIME;
|
import com.netsdk.lib.utils.Initialization;
|
import com.sun.jna.Memory;
|
import com.sun.jna.Native;
|
import com.sun.jna.NativeLong;
|
import com.sun.jna.Pointer;
|
import java.io.UnsupportedEncodingException;
|
import static com.netsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_ENVIRONMENT_THERM_INFO;
|
|
/**
|
* @author 291189
|
* @version 1.0
|
* @description GIP220708004 GIP220722037
|
* @date 2022/7/23 10:14
|
*/
|
public class RegulatorAbnormalDemo extends Initialization {
|
|
|
/**
|
* 订阅
|
* @return
|
*/
|
public void startListen() {
|
// 设置报警回调函数
|
netSdk.CLIENT_SetDVRMessCallBack(fAlarmDataCB.getCallBack(), null);
|
|
// 订阅报警
|
boolean bRet = netSdk.CLIENT_StartListenEx(loginHandle);
|
if (!bRet) {
|
System.err.println("订阅报警失败! LastError = 0x%x\n" + netSdk.CLIENT_GetLastError());
|
}
|
else {
|
System.out.println("订阅报警成功.");
|
}
|
}
|
|
/**
|
* 取消订阅
|
* @return
|
*/
|
public void stopListen() {
|
// 停止订阅报警
|
boolean bRet = netSdk.CLIENT_StopListen(loginHandle);
|
if (bRet) {
|
System.out.println("取消订阅报警信息.");
|
}
|
}
|
|
/**
|
* 报警信息回调函数原形,建议写成单例模式
|
*/
|
private static class fAlarmDataCB implements NetSDKLib.fMessCallBack{
|
private fAlarmDataCB(){}
|
|
private static class fAlarmDataCBHolder {
|
private static fAlarmDataCB callback = new fAlarmDataCB();
|
}
|
|
public static fAlarmDataCB getCallBack() {
|
return fAlarmDataCB.fAlarmDataCBHolder.callback;
|
}
|
|
public boolean invoke(int lCommand, NetSDKLib.LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, Pointer dwUser){
|
// System.out.printf("command = %x\n", lCommand);
|
switch (lCommand)
|
{
|
case NetSDKLib.NET_ALARM_REGULATOR_ABNORMAL: { // // 标准黑体源异常报警事件(对应结构体 ALARM_REGULATOR_ABNORMAL_INFO)
|
|
System.out.println(" 标准黑体源异常报警事件");
|
NetSDKLib.ALARM_REGULATOR_ABNORMAL_INFO msg = new NetSDKLib.ALARM_REGULATOR_ABNORMAL_INFO();
|
ToolKits.GetPointerData(pStuEvent, msg);
|
|
System.out.println(" nAction:"+ msg.nAction);
|
|
System.out.println(" nChannelID:"+ msg.nChannelID);
|
|
System.out.println(" szName:"+ new String(msg.szName));
|
|
System.out.println(" UTC:"+ msg.UTC.toStringTime());
|
|
System.out.println(" nEventID:"+ msg.nEventID);
|
|
System.out.println(" szTypes:"+ new String(msg.szTypes));
|
break;
|
|
}
|
|
|
|
default:
|
break;
|
}
|
return true;
|
}
|
}
|
// CLIENT_GetNewDevConfig和CLIENT_SetNewDevConfig + EVENT_IVS_ANATOMY_TEMP_DETECT + CFG_ANATOMY_TEMP_DETECT_INFO
|
//人体温智能检测事件配置
|
public void SetTempEnable() {
|
int channel =1; // 通道号
|
String command = NetSDKLib.CFG_CMD_ANALYSERULE; //视频分析规则配置(对应 CFG_ANALYSERULES_INFO)
|
|
int ruleCount = 10; // 事件规则个数
|
NetSDKLib.CFG_RULE_INFO[] ruleInfo = new NetSDKLib.CFG_RULE_INFO[ruleCount];
|
for(int i = 0; i < ruleCount; i++) {
|
ruleInfo[i] = new NetSDKLib.CFG_RULE_INFO();
|
}
|
|
NetSDKLib.CFG_ANALYSERULES_INFO analyse = new NetSDKLib.CFG_ANALYSERULES_INFO();
|
analyse.nRuleLen = 1024 * 1024 * 40;
|
analyse.pRuleBuf = new Memory(1024 * 1024 * 40); // 申请内存
|
analyse.pRuleBuf.clear(1024 * 1024 * 40);
|
|
// 获取
|
if(ToolKits.GetDevConfig(loginHandle, channel, command, analyse)) {
|
int offset = 0;
|
System.out.println("设备返回的事件规则个数:" + analyse.nRuleCount);
|
|
int count = analyse.nRuleCount < ruleCount? analyse.nRuleCount : ruleCount;
|
|
for(int i = 0; i < count; i++) {
|
ToolKits.GetPointerDataToStruct(analyse.pRuleBuf, offset, ruleInfo[i]);
|
|
offset += ruleInfo[0].size(); // 智能规则偏移量
|
|
switch (ruleInfo[i].dwRuleType) {
|
case NetSDKLib.EVENT_IVS_ANATOMY_TEMP_DETECT: // 人体温智能检测事件
|
{
|
System.out.println(" 人体温智能检测事件");
|
NetSDKLib.CFG_ANATOMY_TEMP_DETECT_INFO msg = new NetSDKLib.CFG_ANATOMY_TEMP_DETECT_INFO();
|
ToolKits.GetPointerDataToStruct(analyse.pRuleBuf, offset, msg);
|
try {
|
System.out.println("规则名称 gbk:" + new String(msg.szRuleName,"GBK").trim());
|
System.out.println("规则名称 utf-8:" + new String(msg.szRuleName,"UTF-8").trim());
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
|
System.out.println("使能:" + msg.bRuleEnable);
|
ruleInfo[i].stuRuleCommInfo.emClassType = NetSDKLib.EM_SCENE_TYPE.EM_SCENE_ANATOMYTEMP_DETECT;
|
ToolKits.SetStructDataToPointer(ruleInfo[i], analyse.pRuleBuf, offset - ruleInfo[0].size());
|
|
ToolKits.ByteArrZero(msg.szRuleName);//重新赋值前先将之前的数据清空
|
// 设置使能开
|
System.arraycopy("TEMP".getBytes(), 0, msg.szRuleName, 0, "TEMP".getBytes().length);
|
msg.bRuleEnable = 1;
|
ToolKits.SetStructDataToPointer(msg, analyse.pRuleBuf, offset);
|
break;
|
}
|
default:
|
break;
|
}
|
|
offset += ruleInfo[i].nRuleSize; // 智能事件偏移量
|
}
|
|
// 设置
|
if(ToolKits.SetDevConfig(loginHandle, channel, command, analyse)) {
|
System.out.println("设置使能成功!");
|
} else {
|
System.err.println("设置使能失败!" + ToolKits.getErrorCode());
|
}
|
} else {
|
System.err.println("获取使能失败!" + ToolKits.getErrorCode());
|
}
|
}
|
|
//标准黑体源异常报警配置,对应结构体 CFG_REGULATOR_DETECT_INFO. 热成像通道有效
|
public void regulator(){
|
int chanl=1;
|
CFG_REGULATOR_DETECT_INFO stuPTZ = new CFG_REGULATOR_DETECT_INFO();
|
|
if (!ToolKits.GetDevConfig(loginHandle, chanl, NetSDKLib.CFG_CMD_REGULATOR_DETECT, stuPTZ)) {
|
System.err.println("Get CFG_REGULATOR_DETECT_INFO Failed!" + ToolKits.getErrorCode());
|
return;
|
}
|
|
System.out.println("bEnable:"+stuPTZ.bEnable);
|
//灵敏度, 1-100
|
System.out.println("nSensitivity:"+stuPTZ.nSensitivity);
|
|
stuPTZ.bEnable = 1; // 使能
|
/**
|
灵敏度, 1-100
|
*/
|
stuPTZ.nSensitivity = 80; //
|
if (!ToolKits.SetDevConfig(loginHandle, chanl, NetSDKLib.CFG_CMD_REGULATOR_DETECT, stuPTZ)) {
|
System.err.println("Set PTZ Failed!" + ToolKits.getErrorCode());
|
} else {
|
System.out.println("Set PTZ Success!");
|
}
|
}
|
|
// 环境温度信息(热成像内部配置,只可读,不可设),通道号需要填热成像通道号 对应结构体 NET_CFG_ENVIRONMENT_THERM_INFO
|
public void therm(){
|
|
int nChannelID=1;
|
|
NET_CFG_ENVIRONMENT_THERM_INFO msg=new NET_CFG_ENVIRONMENT_THERM_INFO();
|
Pointer pstuConfigInfo=new Memory(msg.size());
|
pstuConfigInfo.clear(msg.size());
|
ToolKits.SetStructDataToPointer(msg, pstuConfigInfo, 0);
|
boolean gRet = netSdk.CLIENT_GetConfig(loginHandle, NET_EM_CFG_ENVIRONMENT_THERM_INFO, nChannelID, pstuConfigInfo, msg.size(), 3000, null);
|
if (!gRet)
|
{
|
Native.free(Pointer.nativeValue(pstuConfigInfo)); //清理内存
|
Pointer.nativeValue(pstuConfigInfo, 0);
|
System.err.println("CLIENT_GetConfig fail"+ToolKits.getErrorCode());
|
return;
|
}
|
ToolKits.GetPointerDataToStruct(pstuConfigInfo,0,msg);
|
Native.free(Pointer.nativeValue(pstuConfigInfo)); //清理内存
|
Pointer.nativeValue(pstuConfigInfo, 0);
|
|
int nEnvironmentTemp = msg.nEnvironmentTemp;
|
|
System.out.println("nEnvironmentTemp:"+nEnvironmentTemp);
|
|
NET_TIME stuLastEnvSaveTime = msg.stuLastEnvSaveTime;
|
System.out.println("stuLastEnvSaveTime:"+stuLastEnvSaveTime);
|
|
int nEnvSaveCnt = msg.nEnvSaveCnt;
|
System.out.println("nEnvSaveCnt:"+nEnvSaveCnt);
|
|
}
|
|
|
public void RunTest()
|
{
|
System.out.println("Run Test");
|
CaseMenu menu = new CaseMenu();
|
menu.addItem((new CaseMenu.Item(this , "therm" , "therm")));
|
menu.addItem((new CaseMenu.Item(this , "SetTempEnable" , "SetTempEnable")));
|
menu.addItem((new CaseMenu.Item(this , "regulator" , "regulator")));
|
|
menu.addItem((new CaseMenu.Item(this , "startListen" , "startListen")));
|
menu.addItem((new CaseMenu.Item(this , "stopListen" , "stopListen")));
|
menu.run();
|
}
|
|
public static void main(String[] args) {
|
RegulatorAbnormalDemo regulatorAbnormalDemo=new RegulatorAbnormalDemo();
|
|
InitTest("10.35.232.184",40066,"admin","admin123");
|
regulatorAbnormalDemo.RunTest();
|
LoginOut();
|
|
}
|
|
}
|