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
package com.netsdk.demo.module;
 
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.NetSDKLib.LLong;
import com.netsdk.lib.ToolKits;
 
/**
 * 智能交通接口实现
 * 主要有 :智能订阅、开闸、关闸功能
 */
public class TrafficEventModule {
    // 智能订阅句柄
    public static LLong m_hAttachHandle = new LLong(0);
    
    /**
     * 新版本开闸
     */
    public static boolean New_OpenStrobe() {        
        NetSDKLib.NET_CTRL_OPEN_STROBE openStrobe = new NetSDKLib.NET_CTRL_OPEN_STROBE();
        openStrobe.nChannelId = 0;
        String plate = new String("浙A888888");
        
        System.arraycopy(plate.getBytes(), 0, openStrobe.szPlateNumber, 0, plate.getBytes().length);
        openStrobe.write();
        if (LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_OPEN_STROBE, openStrobe.getPointer(), null, 3000)) {
            System.out.println("Open Success!");
        } else {
            System.err.println("Failed to Open." + ToolKits.getErrorCodePrint());
            return false;
        } 
        openStrobe.read();
        
        return true;
    }
    
    /**
     * 新版本关闸
     */
    public static void New_CloseStrobe() {    
        NetSDKLib.NET_CTRL_CLOSE_STROBE closeStrobe = new NetSDKLib.NET_CTRL_CLOSE_STROBE();
        closeStrobe.nChannelId = 0;
        closeStrobe.write();
        if (LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_CLOSE_STROBE, closeStrobe.getPointer(), null, 3000)) {
            System.out.println("Close Success!");
        } else {
            System.err.println("Failed to Close." + ToolKits.getErrorCodePrint());
        }
        closeStrobe.read();
    }
    
    /**
     * 手动抓图按钮事件
     */
    public static boolean manualSnapPicture(int chn) {     
        NetSDKLib.MANUAL_SNAP_PARAMETER snapParam = new NetSDKLib.MANUAL_SNAP_PARAMETER();
        snapParam.nChannel = chn;
        String sequence = "11111"; // 抓图序列号,必须用数组拷贝
        System.arraycopy(sequence.getBytes(), 0, snapParam.bySequence, 0, sequence.getBytes().length);
        
        snapParam.write();
        boolean bRet = LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_MANUAL_SNAP, snapParam.getPointer(), null, 5000);
        if (!bRet) {
            System.err.println("Failed to manual snap, last error " + ToolKits.getErrorCodePrint());
            return false;
        } else {
            System.out.println("Seccessed to manual snap");
        }
        snapParam.read();
        return true;
    }
    
    /**
     * 订阅实时上传智能分析数据
     * @return 
     */
    public static boolean attachIVSEvent(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB) {     
        /**
         * 说明:
         *     通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取
         *  下列仅订阅了0通道的智能事件.
         */
        int bNeedPicture = 1; // 是否需要图片
 
        m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(LoginModule.m_hLoginHandle, ChannelId,  NetSDKLib.EVENT_IVS_ALL, 
                bNeedPicture , m_AnalyzerDataCB , null , null);
        if( m_hAttachHandle.longValue() != 0  ) {
            System.out.println("CLIENT_RealLoadPictureEx Success  ChannelId : \n" + ChannelId);
        } else {
            System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint());
            return false;
        }
        
        return true;
    }
    
    /**
     * 停止上传智能分析数据-图片
     */
    public static void detachIVSEvent() {
        if (0 != m_hAttachHandle.longValue()) {
            LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle);
            System.out.println("Stop detach IVS event");
            m_hAttachHandle.setValue(0);
        }
    }
}