package com.netsdk.demo.accessControl;
|
|
|
import java.util.Arrays;
|
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
import com.netsdk.lib.NetSDKLib.LLong;
|
import com.netsdk.lib.NetSDKLib.NET_TSECT;
|
import com.netsdk.lib.enumeration.EM_SIGNLIGHT_TYPE;
|
import com.netsdk.lib.enumeration.EM_TEMPERATUREEX_TYPE;
|
import com.netsdk.lib.enumeration.ENUMERROR;
|
import com.netsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE;
|
import com.netsdk.lib.structure.DHDEV_SMART_HARDDISK;
|
import com.netsdk.lib.structure.DHDEV_SMART_VALUE;
|
import com.netsdk.lib.structure.NET_CFG_VIDEOTALK_SIGNLIGHT;
|
import com.netsdk.lib.structure.NET_IN_GET_TEMPERATUREEX;
|
import com.netsdk.lib.structure.NET_OUT_GET_TEMPERATUREEX;
|
import com.netsdk.lib.structure.NET_TEMPERATUREEX_VALUE;
|
import com.netsdk.lib.structure.NET_VIDEOTALK_SIGNLIGHT_INFO;
|
import com.sun.jna.Memory;
|
import com.sun.jna.Pointer;
|
import com.sun.jna.ptr.IntByReference;
|
|
/**
|
* @author 251823
|
* @description 可视对讲签名灯设置样例
|
* @date 2020/11/09
|
*/
|
public class AccessSignLightDemo {
|
|
static NetSDKLib netsdkApi = NetSDKLib.NETSDK_INSTANCE;
|
static NetSDKLib configApi = NetSDKLib.CONFIG_INSTANCE;
|
|
private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
|
private static LLong loginHandle = new LLong(0);
|
|
String address = "172.5.9.171"; // 172.26.6.104
|
int port = 37777;
|
String username = "admin";
|
String password = "admin123";
|
|
private static class DisconnectCallback implements NetSDKLib.fDisConnect {
|
private static DisconnectCallback instance = new DisconnectCallback();
|
|
private DisconnectCallback() {
|
}
|
|
public static DisconnectCallback getInstance() {
|
return instance;
|
}
|
|
public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s:%d] Disconnect!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
private static class HaveReconnectCallback implements NetSDKLib.fHaveReConnect {
|
private static HaveReconnectCallback instance = new HaveReconnectCallback();
|
|
private HaveReconnectCallback() {
|
}
|
|
public static HaveReconnectCallback getInstance() {
|
return instance;
|
}
|
|
public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
|
System.out.printf("Device[%s:%d] HaveReconnected!\n", pchDVRIP, nDVRPort);
|
}
|
}
|
|
public void EndTest() {
|
System.out.println("End Test");
|
if (loginHandle.longValue() != 0) {
|
netsdkApi.CLIENT_Logout(loginHandle);
|
}
|
System.out.println("See You...");
|
|
netsdkApi.CLIENT_Cleanup();
|
System.exit(0);
|
}
|
|
public void InitTest() {
|
// 初始化SDK库
|
netsdkApi.CLIENT_Init(DisconnectCallback.getInstance(), null);
|
|
// 设置断线自动重练功能
|
netsdkApi.CLIENT_SetAutoReconnect(HaveReconnectCallback.getInstance(), null);
|
|
// 向设备登入
|
int nSpecCap = 0;
|
IntByReference nError = new IntByReference(0);
|
loginHandle = netsdkApi.CLIENT_LoginEx2(address, port, username, password, nSpecCap, null, deviceInfo, nError);
|
|
if (loginHandle.longValue() == 0) {
|
System.err.printf("Login Device [%s:%d] Failed ! Last Error[%x]\n", address, port,
|
netsdkApi.CLIENT_GetLastError());
|
EndTest();
|
return;
|
}
|
|
System.out.printf("Login Device [%s:%d] Success. \n", address, port);
|
}
|
|
/**
|
* 获取可视对讲签名灯参数
|
*/
|
public void getSignLightCfg() {
|
NET_CFG_VIDEOTALK_SIGNLIGHT config = new NET_CFG_VIDEOTALK_SIGNLIGHT();
|
Pointer pointer = new Memory(config.size());
|
ToolKits.SetStructDataToPointer(config, pointer, 0);
|
boolean result = netsdkApi.CLIENT_GetConfig(loginHandle, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_VIDEOTALK_SIGNLIGHT, -1,
|
pointer, config.size(), 5000, null);
|
if (!result) {
|
System.out.println("获取可视对讲签名灯设置参数失败:" + ENUMERROR.getErrorMessage());
|
} else {
|
ToolKits.GetPointerData(pointer, config);
|
System.out.println("签名灯个数:" + config.nSignLightNum);
|
|
NET_VIDEOTALK_SIGNLIGHT_INFO[] stuSignLightInfo = config.stuSignLightInfo;
|
for (int i = 0; i < config.nSignLightNum; i++) {
|
System.out.println("第" + i + "个签名灯信息开始:----------------------");
|
System.out.println("灯光类型:" + EM_SIGNLIGHT_TYPE.getNoteByValue(stuSignLightInfo[i].emSignLightType));
|
System.out.println("有效时间段个数:" + stuSignLightInfo[i].nTimeSectionsNum);
|
int a = stuSignLightInfo[i].nTimeSectionsNum; // 有效时间段个数
|
NetSDKLib.NET_TSECT[] stuTimeSection = stuSignLightInfo[i].stuTimeSection;
|
for (int j = 0; j < a; j++) {
|
NetSDKLib.NET_TSECT obj = stuTimeSection[j];
|
System.out.println("抓拍时间段:" + obj.bEnable + " " + obj.startTime() + "-" + obj.endTime());
|
}
|
System.out.println("第" + i + "个签名灯信息结束:----------------------");
|
}
|
}
|
}
|
|
/**
|
* 设置可视对讲签名灯参数
|
*/
|
public String setSignLightCfg() {
|
NET_CFG_VIDEOTALK_SIGNLIGHT config = new NET_CFG_VIDEOTALK_SIGNLIGHT();
|
// 签名灯个数
|
config.nSignLightNum = 2;
|
// 签名灯信息
|
NET_VIDEOTALK_SIGNLIGHT_INFO[] stuSignLightInfo = new NET_VIDEOTALK_SIGNLIGHT_INFO[16];
|
// 第一个
|
NET_VIDEOTALK_SIGNLIGHT_INFO obj1 = new NET_VIDEOTALK_SIGNLIGHT_INFO();
|
// 灯光类型@link EM_SIGNLIGHT_TYPE
|
obj1.emSignLightType = 2;
|
// 有效时间段个数
|
obj1.nTimeSectionsNum = 4;
|
// 开灯时间段 String[] times1 = { "1 12:00:00-24:00:00", "1 00:00:00-24:00:00"};
|
NetSDKLib.NET_TSECT[] stuTimeSection = new NetSDKLib.NET_TSECT[6];
|
int[] a = {1,1,10,55,12,0,0};
|
int[] b = {1,1,10,55,12,0,0};
|
int[] c = {1,1,10,55,12,0,0};
|
int[] d = {1,1,10,55,12,0,0};
|
stuTimeSection[0] = setNET_TSECT(a);
|
stuTimeSection[1] = setNET_TSECT(b);
|
stuTimeSection[2] = setNET_TSECT(c);
|
stuTimeSection[3] = setNET_TSECT(d);
|
obj1.stuTimeSection = stuTimeSection;
|
stuSignLightInfo[0] = obj1;
|
|
// 第二个
|
NET_VIDEOTALK_SIGNLIGHT_INFO obj2 = new NET_VIDEOTALK_SIGNLIGHT_INFO();
|
// 灯光类型@link EM_SIGNLIGHT_TYPE
|
obj2.emSignLightType = 2;
|
// 有效时间段个数
|
obj2.nTimeSectionsNum = 1;
|
// 开灯时间段 String[] times1 = { "1 12:00:00-24:00:00", "1 00:00:00-24:00:00"};
|
NetSDKLib.NET_TSECT[] stuTimeSection2 = new NetSDKLib.NET_TSECT[6];
|
int[] a2 = {3,3,10,55,12,0,0};
|
stuTimeSection2[0] = setNET_TSECT(a2);
|
obj2.stuTimeSection = stuTimeSection2;
|
stuSignLightInfo[1] = obj2;
|
config.stuSignLightInfo = stuSignLightInfo;
|
|
Pointer pointer = new Memory(config.size());
|
ToolKits.SetStructDataToPointer(config, pointer, 0);
|
boolean result = netsdkApi.CLIENT_SetConfig(loginHandle, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_VIDEOTALK_SIGNLIGHT, -1,
|
pointer, config.size(), 5000, new IntByReference(0), null);
|
if (result) {
|
System.out.println("设置可视对讲签名灯参数成功");
|
return "设置可视对讲签名灯参数成功";
|
} else {
|
System.out.println("设置可视对讲签名灯参数失败:" + ENUMERROR.getErrorMessage());
|
return ENUMERROR.getErrorMessage();
|
}
|
}
|
|
private NET_TSECT setNET_TSECT(int[] a) {
|
NET_TSECT time = new NET_TSECT();
|
time.bEnable = a[0];
|
time.iBeginHour = a[1];
|
time.iBeginMin = a[2];
|
time.iBeginSec = a[3];
|
time.iEndHour = a[4];
|
time.iEndMin = a[5];
|
time.iEndSec = a[6];
|
return time;
|
}
|
|
/**
|
* 获取温度信息
|
*/
|
public void getTemperatureEx() {
|
// 入参
|
NET_IN_GET_TEMPERATUREEX pIn = new NET_IN_GET_TEMPERATUREEX();
|
// 温度类型{@link EM_TEMPERATUREEX_TYPE}
|
pIn.emTemperatureType = EM_TEMPERATUREEX_TYPE.EM_TEMPERATUREEX_TYPE_CPU.getValue();// 选择处理器
|
pIn.write();
|
|
// 出参
|
NET_OUT_GET_TEMPERATUREEX pOut = new NET_OUT_GET_TEMPERATUREEX();
|
pOut.write();
|
|
boolean flg = netsdkApi.CLIENT_FaceBoard_GetTemperatureEx(loginHandle, pIn.getPointer(), pOut.getPointer(),
|
3000);
|
if (flg) {
|
pOut.read();
|
System.out.println("返回的有效温度监测点的个数:" + pOut.nRetMonitorPointNum);
|
NET_TEMPERATUREEX_VALUE[] stuTemperatureEx = pOut.stuTemperatureEx;
|
for (int i = 0; i < pOut.nRetMonitorPointNum; i++) {
|
System.out.println("-----------第" + (i + 1) + "个温度监测点信息-----------");
|
System.out.println("温度类型:" + stuTemperatureEx[i].emTemperatureType);
|
System.out.println("返回的有效温度值个数:" + stuTemperatureEx[i].nRetTemperatureNum);
|
System.out.println("温度值,单位:摄氏度:" + Arrays.toString(stuTemperatureEx[i].fTemperature));
|
}
|
} else {
|
System.err.println("CLIENT_FaceBoard_GetTemperatureEx fail!:" + ToolKits.getErrorCode());
|
}
|
}
|
|
/**
|
* 查询硬盘smart信息
|
*/
|
public void querySmartHardDisk() {
|
int nType = NetSDKLib.NET_DEVSTATE_SMART_HARD_DISK;
|
DHDEV_SMART_HARDDISK smartHardDisk = new DHDEV_SMART_HARDDISK();
|
IntByReference intRetLen = new IntByReference();
|
smartHardDisk.write();
|
boolean bRet = netsdkApi.CLIENT_QueryDevState(loginHandle, nType, smartHardDisk.getPointer(),
|
smartHardDisk.size(), intRetLen, 3000);
|
if (bRet) {
|
smartHardDisk.read();
|
System.out.println("硬盘号:"+smartHardDisk.nDiskNum);
|
System.out.println("smart 信息数:"+smartHardDisk.deviceInfo.nSmartNum);
|
DHDEV_SMART_VALUE[] smartValue = smartHardDisk.smartValue;
|
for (int i = 0; i < smartHardDisk.deviceInfo.nSmartNum; i++) {
|
System.out.println("-----------第" + (i + 1) + "smart 信息-----------");
|
System.out.println("ID:"+smartValue[i].byId);
|
System.out.println("属性值:"+smartValue[i].byCurrent);
|
System.out.println("最大出错值:"+smartValue[i].byWorst);
|
System.out.println("阈值:"+smartValue[i].byThreshold);
|
System.out.println("属性名:"+new String(smartValue[i].szName));
|
System.out.println("实际值:"+new String(smartValue[i].szRaw));
|
System.out.println("状态:"+smartValue[i].nPredict);
|
}
|
} else {
|
System.err.println("CLIENT_QueryDevState Failed!" + ToolKits.getErrorCode());
|
}
|
}
|
|
public void RunTest() {
|
CaseMenu menu = new CaseMenu();
|
menu.addItem(new CaseMenu.Item(this, "获取可视对讲签名灯参数", "getSignLightCfg"));
|
menu.addItem(new CaseMenu.Item(this, "设置可视对讲签名灯参数", "setSignLightCfg"));
|
menu.addItem(new CaseMenu.Item(this, "获取温度信息", "getTemperatureEx"));
|
menu.addItem(new CaseMenu.Item(this, "查询硬盘smart信息", "querySmartHardDisk"));
|
menu.run();
|
}
|
|
public static void main(String[] args) {
|
AccessSignLightDemo demo = new AccessSignLightDemo();
|
demo.InitTest();
|
demo.RunTest();
|
demo.EndTest();
|
}
|
}
|