1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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();
    }
 
}