HCEHomeCMS.java
15.3 KB
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* HCNetSDK.java
*
* Created on 2009-9-14, 19:31:34
*/
/**
* @author Xubinfeng
*/
package com.sincere.haikang.libutils;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.Union;
import com.sun.jna.examples.win32.GDI32.RECT;
import com.sun.jna.examples.win32.W32API;
import com.sun.jna.examples.win32.W32API.HWND;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.NativeLongByReference;
import com.sun.jna.ptr.ShortByReference;
//SDK接口说明,HCNetSDK.dll
//windows gdi接口,gdi32.dll in system32 folder, 在设置遮挡区域,移动侦测区域等情况下使用
public interface HCEHomeCMS extends StdCallLibrary {
HCEHomeCMS INSTANCE = (HCEHomeCMS) Native.loadLibrary("C:\\lib\\HCEHomeCMS",
HCEHomeCMS.class);
/***宏定义***/
//常量
public static final int MAX_NAMELEN = 16; //DVR本地登陆名
public static final int MAX_RIGHT = 32; //设备支持的权限(1-12表示本地权限,13-32表示远程权限)
public static final int NAME_LEN = 32; //用户名长度
public static final int PASSWD_LEN = 16; //密码长度
public static final int MAX_DEVICE_ID_LEN = 256; //设备ID长度
public static final int NET_EHOME_SERIAL_LEN = 12; //设备序列号长度
public static class NET_EHOME_DEV_REG_INFO extends Structure {
public int dwSize;
public int dwNetUnitType; //根据EHomeSDK协议预留,目前没有意义
public byte[] byDeviceID = new byte[MAX_DEVICE_ID_LEN]; //设备ID
public byte[] byFirmwareVersion = new byte[24]; //固件版本
public NET_EHOME_IPADDRESS struDevAdd; //设备注册上来是,设备的本地地址
public int dwDevType; //设备类型
public int dwManufacture; //设备厂家代码
public byte[] byPassWord = new byte[32]; //设备登陆CMS的密码,由用户自行根据需求进行验证
public byte[] sDeviceSerial = new byte[NET_EHOME_SERIAL_LEN/*12*/]; //设备序列号,数字序列号
public byte[] byRes = new byte[52];
}
public static class NET_EHOME_SERVER_INFO extends Structure {
public int dwSize;
public int dwKeepAliveSec;
public int dwTimeOutCount;
public NET_EHOME_IPADDRESS struTCPAlarmSever = new NET_EHOME_IPADDRESS();
public NET_EHOME_IPADDRESS struUDPAlarmSever = new NET_EHOME_IPADDRESS();
public int dwAlarmServerType;
public NET_EHOME_IPADDRESS struNTPSever = new NET_EHOME_IPADDRESS();
public int dwNTPInterval;
public NET_EHOME_IPADDRESS struPictureSever = new NET_EHOME_IPADDRESS();
public int dwPicServerType;
public NET_EHOME_BLACKLIST_SEVER struBlackListServer = new NET_EHOME_BLACKLIST_SEVER();
public byte[] byRes = new byte[128];
}
public static class NET_EHOME_BLACKLIST_SEVER extends Structure {
public NET_EHOME_IPADDRESS struAdd = new NET_EHOME_IPADDRESS();
public byte[] byServerName = new byte[32];
public byte[] byUserName = new byte[32];
public byte[] byPassWord = new byte[32];
public byte[] byRes = new byte[64];
}
public static class NET_EHOME_LOCAL_ACCESS_SECURITY extends Structure {
public int dwSize;
public byte byAccessSecurity;
public byte[] byRes = new byte[127];
}
public static class NET_EHOME_AMS_ADDRESS extends Structure {
public int dwSize;
public byte byEnable;
public byte[] byRes1 = new byte[3];
public NET_EHOME_IPADDRESS struAddress = new NET_EHOME_IPADDRESS();
public byte[] byRes2 = new byte[32];
}
public static class NET_EHOME_IPADDRESS extends Structure {
public byte[] szIP = new byte[128];
public short wPort; //端口
public byte[] byRes = new byte[2];
}
public static interface DEVICE_REGISTER_CB extends StdCallCallback {
public boolean invoke(NativeLong lUserID, int dwDataType, Pointer pOutBuffer, int dwOutLen, NET_EHOME_SERVER_INFO pInBuffer, int dwInLen, Pointer pUser);
}
public static class NET_EHOME_CMS_LISTEN_PARAM extends Structure {
public NET_EHOME_IPADDRESS struAddress; //本地监听信息,IP为0.0.0.0的情况下,默认为本地地址,多个网卡的情况下,默认为从操作系统获取到的第一个
public DEVICE_REGISTER_CB fnCB; //报警信息回调函数
public Pointer pUserData; //用户数据
public byte[] byRes = new byte[32];
}
public static interface fVoiceDataCallBack extends StdCallCallback {
public void invoke(NativeLong iVoiceHandle, byte[] pRecvDataBuffer, int dwBufSize, int dwEncodeType, byte byAudioFlag, Pointer pUser);
}
public static class NET_EHOME_VOICETALK_PARA extends Structure {
public boolean bNeedCBNoEncData; //需要回调的语音类型:0-编码后语音,1-编码前语音(语音转发时不支持)
public fVoiceDataCallBack cbVoiceDataCallBack; //用于回调音频数据的回调函数
public int dwEncodeType; //SDK赋值,SDK的语音编码类型,0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM
public Pointer pUser; //用户参数
public byte byVoiceTalk; //0-语音对讲,1-语音转发
public byte byDevAudioEnc; //输出参数,设备的音频编码方式 0- OggVorbis,1-G711U,2-G711A,3-G726,4-AAC,5-MP2L2,6-PCM
public byte[] byRes = new byte[62];//Reserved, set as 0. 0
}
//预览请求
public static class NET_EHOME_PREVIEWINFO_IN extends Structure {
public int iChannel; //通道号
public int dwStreamType; // 码流类型,0-主码流,1-子码流, 2-第三码流
public int dwLinkMode; // 0:TCP方式,1:UDP方式,2: HRUDP方式
public NET_EHOME_IPADDRESS struStreamSever; //流媒体地址
}
public static class NET_EHOME_PREVIEWINFO_IN_V11 extends Structure {
public int iChannel;
public int dwStreamType;
public int dwLinkMode;
public NET_EHOME_IPADDRESS struStreamSever;
public byte byDelayPreview;
public byte[] byRes = new byte[31];
}
public static class NET_EHOME_PREVIEWINFO_OUT extends Structure {
public NativeLong lSessionID;
public byte[] byRes = new byte[128];
}
public static class NET_EHOME_PUSHSTREAM_IN extends Structure {
public int dwSize;
public NativeLong lSessionID;
public byte[] byRes = new byte[128];
}
public static class NET_EHOME_PUSHSTREAM_OUT extends Structure {
public int dwSize;
public byte[] byRes = new byte[128];
}
public static class NET_EHOME_PTXML_PARAM extends Structure {
public Pointer pRequestUrl; //请求URL
public int dwRequestUrlLen; //请求URL长度
public Pointer pCondBuffer; //条件缓冲区(XML格式数据)
public int dwCondSize; //条件缓冲区大小
public Pointer pInBuffer; //输入缓冲区(XML格式数据)
public int dwInSize; //输入缓冲区大小
public Pointer pOutBuffer; //输出缓冲区(XML格式数据)
public int dwOutSize; //输出缓冲区大小
public int dwReturnedXMLLen; //实际从设备接收到的XML数据的长度
public byte[] byRes = new byte[32]; //保留
}
public static class NET_EHOME_XML_CFG extends Structure {
public Pointer pCmdBuf; //字符串格式命令,参见1.2.3
public int dwCmdLen; //pCmdBuf长度
public Pointer pInBuf; //输入数据,远程配置报文公用定义
public int dwInSize; //输入数据长度
public Pointer pOutBuf; //输出缓冲<ConfigXML>
public int dwOutSize; //输出缓冲区长度
public int dwSendTimeOut; //数据发送超时时间,单位ms,默认5s
public int dwRecvTimeOut; //数据接收超时时间,单位ms,默认5s
public Pointer pStatusBuf; //返回的状态参数(XML格式),如果不需要,可以置NULL
public int dwStatusSize; //状态缓冲区大小(内存大小)
public byte[] byRes = new byte[24];
}
public static class NET_EHOME_XML_REMOTE_CTRL_PARAM extends Structure {
public int dwSize;
public Pointer lpInbuffer;
public int dwInBufferSize;
public int dwSendTimeOut;
public int dwRecvTimeOut;
public Pointer lpOutBuffer; //输出缓冲区
public int dwOutBufferSize; //输出缓冲区大小
public Pointer lpStatusBuffer; //状态缓冲区,若不需要可置为NULL
public int dwStatusBufferSize; //状态缓冲区大小
public byte[] byRes = new byte[16];
}
;
public static class NET_DVR_STRING_POINTER extends Structure {
public byte[] byString = new byte[2 * 1024];
}
public static class NET_EHOME_CONFIG extends Structure {
public Pointer pCondBuf;
public int dwCondSize;
public Pointer pInBuf;
public int dwInSize;
public Pointer pOutBuf;
public int dwOutSize;
public byte[] byRes = new byte[40];
}
public static class NET_EHOME_DEVICE_INFO extends Structure {
public int dwSize;
public int dwChannelNumber;
public int dwChannelAmount;
public int dwDevType;
public int dwDiskNumber;
public byte[] sSerialNumber = new byte[128];
public int dwAlarmInPortNum;
public int dwAlarmInAmount;
public int dwAlarmOutPortNum;
public int dwAlarmOutAmount;
public int dwStartChannel;
public int dwAudioChanNum;
public int dwMaxDigitChannelNum;
public int dwAudioEncType;
public byte[] sSIMCardSN = new byte[128];
public byte[] sSIMCardPhoneNum = new byte[32];
public int dwSupportZeroChan;
public int dwStartZeroChan;
public int dwSmartType;
public byte[] byRes = new byte[160];
}
;
public static class NET_EHOME_REC_FILE_COND extends Structure {
public int dwChannel; //通道号
public int dwRecType;//录像类型:0xff-全部类型,0-定时录像,1-移动报警,2-报警触发,3-报警|动测,4-报警&动测,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警(或者取证录像),10(0x0a)-PIR报警,11(0x0b)-无线报警,12(0x0c)-呼救报警,13(0x0d)-全部报警
public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME();//开始时间
public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME();//结束时间
public int dwStartIndex;//查询起始位置,从0开始
public int dwMaxFileCountPer;//单次搜索最大文件个数,最大文件个数,需要确定实际网络环境,建议最大个数为8
public byte[] byRes = new byte[64];
}
;
public static class NET_EHOME_REC_FILE extends Structure {
public int dwSize;
public byte[] sFileName = new byte[100];
public NET_EHOME_TIME struStartTime = new NET_EHOME_TIME();
public NET_EHOME_TIME struStopTime = new NET_EHOME_TIME();
public int dwFileSize;
public int dwFileMainType;
public int dwFileSubType;
public int dwFileIndex;
public byte[] byRes = new byte[128];
}
;
public static class NET_EHOME_TIME extends Structure {
public short wYear;//年
public byte byMonth;//月
public byte byDay;//日
public byte byHour;//时
public byte byMinute;//分
public byte bySecond;//秒
public byte byRes1;//保留
public short wMSecond;//毫秒
public byte[] byRes2 = new byte[2];
}
//初始化,反初始化
boolean NET_ECMS_Init();
boolean NET_ECMS_Fini();
//获取错误码
int NET_ECMS_GetLastError();
//获取版本号
int NET_ECMS_GetBuildVersion();
boolean NET_ECMS_SetSDKLocalCfg(int enumType, Pointer lpInBuff);
boolean NET_ECMS_GetSDKLocalCfg(int enumType, Pointer lpOutBuff);
//开启关闭监听
NativeLong NET_ECMS_StartListen(NET_EHOME_CMS_LISTEN_PARAM lpCMSListenPara);
boolean NET_ECMS_StopListen(NativeLong iHandle);
boolean NET_ECMS_GetDevConfig(NativeLong lUserID, int dwCommand, NET_EHOME_CONFIG lpConfig, int dwConfigSize);
//注销设备
boolean NET_ECMS_ForceLogout(NativeLong lUserID)
;
boolean NET_ECMS_SetLogToFile(int iLogLevel, String strLogDir, boolean bAutoDel);
NativeLong NET_ECMS_StartVoiceTalk(NativeLong lUserID, int dwVoiceChan, NET_EHOME_VOICETALK_PARA pVoiceTalkPara);
boolean NET_ECMS_StopVoiceTalk(NativeLong iVoiceHandle);
boolean NET_ECMS_StopVoiceTalkWithStmServer(NativeLong lUserID, NativeLong lSessionID);
boolean NET_ECMS_SendVoiceTransData(NativeLong iVoiceHandle, String pSendBuf, int dwBufSize);
boolean NET_ECMS_StartGetRealStream(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut); //lUserID由SDK分配的用户ID,由设备注册回调时fDeviceRegisterCallBack返回
boolean NET_ECMS_StartGetRealStreamV11(NativeLong lUserID, NET_EHOME_PREVIEWINFO_IN_V11 pPreviewInfoIn, NET_EHOME_PREVIEWINFO_OUT pPreviewInfoOut);
boolean NET_ECMS_StopGetRealStream(NativeLong lUserID, NativeLong lSessionID);
boolean NET_ECMS_StartPushRealStream(NativeLong lUserID, NET_EHOME_PUSHSTREAM_IN pPushInfoIn, NET_EHOME_PUSHSTREAM_OUT pPushInfoOut);
boolean NET_ESTREAM_StopPreview(NativeLong lPreviewHandle);
boolean NET_ESTREAM_StopListenPreview(NativeLong lPreivewListenHandle);
//透传
boolean NET_ECMS_GetPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam);
boolean NET_ECMS_PutPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam);
boolean NET_ECMS_PostPTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam);
boolean NET_ECMS_DeletePTXMLConfig(NativeLong iUserID, NET_EHOME_PTXML_PARAM lpPTXMLParam);
boolean NET_ECMS_XMLConfig(NativeLong iUserID, NET_EHOME_XML_CFG pXmlCfg, int dwConfigSize);
boolean NET_ECMS_XMLRemoteControl(NativeLong lUserID, NET_EHOME_XML_REMOTE_CTRL_PARAM lpCtrlParam, int dwCtrlSize);
//获取查下句柄
NativeLong NET_ECMS_StartFindFile_V11(NativeLong lUserID, int lSearchType, Pointer pFindCond, int dwCondSize);
NativeLong NET_ECMS_FindNextFile_V11(NativeLong lHandle, Pointer pFindData, int dwDataSize);
boolean NET_ECMS_StopFindFile(NativeLong lHandle);
//boolean NET_ECMS_StartPlayBack(NativeLong lUserID, NET_EHOME_PLAYBACK_INFO_IN pPlaybackInfoIn, NET_EHOME_PLAYBACK_INFO_OUT pPlaybackInfoOut);
//boolean NET_ECMS_StartPushPlayBack(NativeLong lUserID, NET_EHOME_PUSHPLAYBACK_IN struPushPlayBackIn, NET_EHOME_PUSHPLAYBACK_OUT struPushPlayBackOut);
}
interface GDI32 extends W32API {
GDI32 INSTANCE = (GDI32) Native.loadLibrary("gdi32", GDI32.class, DEFAULT_OPTIONS);
public static final int TRANSPARENT = 1;
int SetBkMode(HDC hdc, int i);
HANDLE CreateSolidBrush(int icolor);
}