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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package com.netsdk.demo.intelligentTraffic;
 
 
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.NetSDKLib.LLong;
import com.netsdk.lib.NetSDKLib.SdkStructure;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
 
/**
 * 智能交通违法代码配置
 * @author 29779
 *
 */
public class TrafficViolationCode {
    
    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.32.4.229";
    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 loginHandle, 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 loginHandle, 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();
    }
 
    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();
        
        loginHandle = netsdkApi.CLIENT_LoginEx2(address, (short)port, username,
                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);    
    }
    
    private static boolean SetDevConfig(String strCmd ,  SdkStructure cmdObject , LLong hHandle , int nChn  ) {
        boolean result = false;
        int nBufferLen = 100*1024;
        byte szBuffer[] = new byte[nBufferLen];
        for(int i=0; i<nBufferLen; i++)szBuffer[i]=0;
        IntByReference error = new IntByReference();
        IntByReference restart = new IntByReference();
        
        cmdObject.write();        
        result = configApi.CLIENT_PacketData(strCmd, cmdObject.getPointer(), cmdObject.size(),szBuffer, nBufferLen);
        cmdObject.read();
        if (!result) {
            System.out.println("Packet " + strCmd + " Config Failed!");
            return result;
        }
        result = netsdkApi.CLIENT_SetNewDevConfig(hHandle, strCmd, nChn, szBuffer, nBufferLen, error, restart, 3000);
        if (!result) {
            System.out.printf("Set %s Config Failed! Last Error = %x\n" , strCmd , netsdkApi.CLIENT_GetLastError());
        }
        
        return result;
    }
    
    private static boolean GetDevConfig(String strCmd ,  SdkStructure cmdObject , LLong hHandle , int nChn) {
        boolean result = false;
        IntByReference error = new IntByReference();
        int nBufferLen = 100*1024;
        byte[] strBuffer = new byte[nBufferLen];
       
        result = netsdkApi.CLIENT_GetNewDevConfig( hHandle, strCmd , nChn, strBuffer, nBufferLen,error,3000,null);
        if (!result) {
            System.out.printf("Get %s Config Failed!Last Error = %x\n" , strCmd , netsdkApi.CLIENT_GetLastError());
            return result;
        }
 
        cmdObject.write();
        result = configApi.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(), cmdObject.size(), null);
        cmdObject.read();
        
        return result;
    }
 
    public void RunTest() {
        System.out.println("Run Test");
        
        String cmd = NetSDKLib.CFG_CMD_TRAFFICGLOBAL;
        NetSDKLib.CFG_TRAFFICGLOBAL_INFO cmdObject = new NetSDKLib.CFG_TRAFFICGLOBAL_INFO();
        
        if (GetDevConfig(cmd, cmdObject, loginHandle, -1)) {
            System.out.println("Get traffic global");
            
            NetSDKLib.VIOLATIONCODE_INFO code = new NetSDKLib.VIOLATIONCODE_INFO();
            code = cmdObject.stViolationCode;
            
            System.out.println("逆行:" + new String(code.szRetrograde).trim());
            System.out.println("逆行:" + new String(code.szRetrogradeDesc).trim());
            System.out.println("逆行:" + new String(code.szRetrogradeShowName).trim());
            
            /// 修改逆行码, 需要用  System.arraycopy 不能直接 赋值
            String retrogade = "1301";
            System.arraycopy(retrogade.getBytes(), 0, code.szRetrograde, 0, retrogade.length());
        }
        
        if (SetDevConfig(cmd, cmdObject, loginHandle, -1)) {
            System.out.println("Set traffic global");
        }
    }
 
    public static void main(String[]args)
    {
        TrafficViolationCode demo = new TrafficViolationCode();
        demo.InitTest();
        demo.RunTest();
        demo.EndTest();
    }
}