package com.netsdk.demo.intelligentTraffic;
|
|
import com.netsdk.demo.util.Testable;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.NetSDKLib.LLong;
|
import com.sun.jna.Pointer;
|
import com.sun.jna.ptr.IntByReference;
|
|
/**
|
* 智能交通设备的外设工作状态
|
* @author 29779
|
*
|
*/
|
public class TrafficPeripheral implements Testable {
|
static NetSDKLib netsdkApi = NetSDKLib.NETSDK_INSTANCE;
|
static NetSDKLib configApi = NetSDKLib.CONFIG_INSTANCE;
|
|
private LLong loginHandle;
|
|
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);
|
}
|
}
|
|
|
@Override
|
public void initTest() {
|
//初始化SDK库
|
netsdkApi.CLIENT_Init(DisconnectCallback.getInstance(), null);
|
|
//设置断线自动重练功能
|
netsdkApi.CLIENT_SetAutoReconnect(HaveReconnectCallback.getInstance(), null);
|
|
// 向设备登入
|
final int nSpecCap = 0; /// login device by TCP
|
final IntByReference error = new IntByReference();
|
final String address = "192.168.2.123";
|
final int port = 37777;
|
final String usrname = "admin";
|
final String password = "admin123";
|
final NetSDKLib.NET_DEVICEINFO deviceInfo = new NetSDKLib.NET_DEVICEINFO();
|
|
loginHandle = netsdkApi.CLIENT_LoginEx(address, (short)port, usrname,
|
password, nSpecCap, null, deviceInfo, error);
|
if(loginHandle.longValue() == 0) {
|
System.err.printf("Login Device [%s:%d] Failed ! Last Error[%x]\n", address, port, netsdkApi.CLIENT_GetLastError());
|
return;
|
}
|
|
System.out.printf("Login Device [%s:%d] Success. \n", address, port);
|
}
|
|
/**
|
* 获取相机上的外设的工作状态状态
|
*/
|
@Override
|
public void runTest() {
|
int channel = 0;
|
int timeOut = 3000;
|
IntByReference error = new IntByReference(0);
|
byte[] buffer = new byte[1024];
|
|
boolean success = netsdkApi.CLIENT_QueryNewSystemInfo(loginHandle, NetSDKLib.CFG_CAP_CMD_DEVICE_STATE, channel, buffer, buffer.length, error, timeOut);
|
if (!success) {
|
System.err.printf("CLIENT_QueryNewSystemInfo Failed, Last Error = 0x%x\n", netsdkApi.CLIENT_GetLastError());
|
return;
|
}
|
|
NetSDKLib.CFG_CAP_TRAFFIC_DEVICE_STATUS deviceState = new NetSDKLib.CFG_CAP_TRAFFIC_DEVICE_STATUS();
|
|
deviceState.write();
|
success = configApi.CLIENT_ParseData(NetSDKLib.CFG_CAP_CMD_DEVICE_STATE, buffer, deviceState.getPointer(), deviceState.size(), null);
|
deviceState.read();
|
if (!success) {
|
System.err.printf("CLIENT_ParseData Failed, Last Error = 0x%x\n", netsdkApi.CLIENT_GetLastError());
|
return;
|
}
|
|
// 获取到的有效信息
|
System.out.println("The number of peripheral: " + deviceState.nStatus);
|
for (int i = 0 ; i < deviceState.nStatus; ++i) {
|
System.out.println("Device Type: " + (new String(deviceState.stuStatus[i].szType).trim())
|
+ "; SerialNo: " + (new String(deviceState.stuStatus[i].szSerialNo).trim())
|
+ "; Verdor: " + (new String(deviceState.stuStatus[i].szVendor).trim())
|
+ "; WorkingState: " + (deviceState.stuStatus[i].nWokingState == 1 ? "Failure" : "Normal")
|
);
|
}
|
}
|
|
@Override
|
public void endTest() {
|
if( loginHandle.longValue() != 0) {
|
netsdkApi.CLIENT_Logout(loginHandle);
|
loginHandle.setValue(0);
|
}
|
|
/// 清理资源, 只需调用一次
|
netsdkApi.CLIENT_Cleanup();
|
|
System.out.println("See You...");
|
}
|
|
/**
|
* @param args
|
*/
|
public static void main(String[] args) {
|
TrafficPeripheral peripheral = new TrafficPeripheral();
|
|
peripheral.initTest();
|
|
peripheral.runTest();
|
|
peripheral.endTest();
|
}
|
|
}
|