zhanghua
2024-09-28 7873c6f56380d28e1ae6958f77a84081797c817f
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
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
package com.dahua.netsdk.lib;
 
import com.sun.jna.*;
 
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
 
public interface ICBCNetSdkLib extends Library {
 
    // Linux环境下修改ACDLL为 libACDLL
 
    ICBCNetSdkLib NETSDK_ACDLL = Native.load(LibraryLoad.getLoadLibrary("ACDLL"), ICBCNetSdkLib.class);
 
 
    //ICBCNetSdkLib NETSDK_ACDLL = (ICBCNetSdkLib) Native.load(absolutePath, ICBCNetSdkLib.class);
 
    class LLong extends IntegerType {
        private static final long serialVersionUID = 1L;
 
        /**
         * Size of a native long, in bytes.
         */
        public static int size;
 
        static {
            size = Native.LONG_SIZE;
            if (Utils.getOsPrefix().equalsIgnoreCase("linux-amd64")
                    || Utils.getOsPrefix().equalsIgnoreCase("win32-amd64")
                    || Utils.getOsPrefix().equalsIgnoreCase("mac-64")) {
                size = 8;
            } else if (Utils.getOsPrefix().equalsIgnoreCase("linux-i386")
                    || Utils.getOsPrefix().equalsIgnoreCase("win32-x86")) {
                size = 4;
            }
        }
 
        /**
         * Create a zero-valued LLong.
         */
        public LLong() {
            this(0);
        }
 
        /**
         * Create a LLong with the given value.
         */
        public LLong(long value) {
            super(size, value);
        }
    }
 
    class SdkStructure extends Structure {
        @Override
        protected List<String> getFieldOrder() {
            List<String> fieldOrderList = new ArrayList<String>();
            for (Class<?> cls = getClass();
                 !cls.equals(SdkStructure.class);
                 cls = cls.getSuperclass()) {
                Field[] fields = cls.getDeclaredFields();
                int modifiers;
                for (Field field : fields) {
                    modifiers = field.getModifiers();
                    if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
                        continue;
                    }
                    fieldOrderList.add(field.getName());
                }
            }
            //            System.out.println(fieldOrderList);
 
            return fieldOrderList;
        }
 
        @Override
        public int fieldOffset(String name) {
            return super.fieldOffset(name);
        }
    }
 
/******************************************************************************************************************************
 ********** 接口定义
 ******************************************************************************************************************************/
    /**
     * 登录回调
     */
    public interface fConnectCallback extends SDKCallback {
        public void invoke(String szOutParam, Pointer pUser);
    }
 
    /**
     * 门禁报警回调
     */
    public interface fAlarmInfoCallback extends SDKCallback {
        public void invoke(String szOutParam, Pointer pUser);
    }
 
    /**
     * 初始化SDK
     *
     * @param cb
     * @param pUser
     */
    public boolean Init(fConnectCallback cb, Pointer pUser);
 
 
    /**
     * 释放SDK资源
     */
    public void Cleanup();
 
    /**
     * 登录接口
     *
     * @param szInParam
     * @param szOutParam
     * @param nOutBufSize
     */
    public boolean Login(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 登出接口
     *
     * @param szInParam
     * @param szOutParam
     * @param nOutBufSize
     */
    public boolean Logout(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 修改设备密码
     *
     * @param szInParam
     * @param szOutParam
     * @param nOutBufSize
     * @return
     */
    public boolean ModifyPassword(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 获取设备时间
     *
     * @param szInParam
     * @param szOutParam
     * @param nOutBufSize
     */
    public boolean GetTime(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 设置设备时间
     *
     * @param szInParam
     * @param szOutParam
     * @param nOutBufSize
     */
    public boolean SetTime(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 获取设备信息
     *
     * @param szInParam
     * @param szOutParam
     */
    public boolean GetDeviceInfo(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 门禁配置(设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public boolean SetDeviceDoorConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 门禁配置(获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public boolean GetDeviceDoorConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 时间表(设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public boolean SetTimeScheduleConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 时间表(获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public boolean GetTimeScheduleConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 周计划(以门为对象设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetDoorWeekPlanConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 周计划(以门为对象获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetDoorWeekPlanConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 操作人员信息
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean OperateUserInfo(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 假日表(设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetHolidayScheduleConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 假日表(获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetHolidayScheduleConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 假日组(设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetHolidayGroupConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 假日组(获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetHolidayGroupConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
 
    /**
     * 假日计划(以门为对象设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetDoorHolidayPlanConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 假日计划(以门为对象获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetDoorHolidayPlanConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 开门方式(设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetOpenDoorType(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 开门方式(获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetOpenDoorType(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 多人多卡开门配置 (双人开门设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetOpenDoorGroupConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 多人多卡开门配置 (双人开门获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetOpenDoorGroupConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
 
    /**
     * 互锁联动门首卡开门  (设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetDoorInterlockFirstEnterConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 互锁联动门首卡开门  (获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetDoorFirstEnterConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 双门互锁 (普通门设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetInterLockConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 双门互锁  (普通门获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetInterLockConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 金库开门配置  (设置)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean SetFirstOpenVaultConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 金库开门配置  (获取)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetFirstOpenVaultConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 远程开门(针对金库)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean RemoteOpenDoor(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 操作卡信息
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean OperateCardInfo(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 操作信息信息
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean OperateFingerPrintInfo(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 操作人脸信息
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean OperateFaceInfo(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 设置门禁报警回调函数
     *
     * @param cbFun
     * @param pUser
     */
    public Boolean SetMessageCallBack(fAlarmInfoCallback cbFun, Pointer pUser);
 
    /**
     * 开始订阅门禁设备消息
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean StartSubscribeDeviceMessage(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 停止订阅控制器消息
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean StopSubscribeDeviceMessage(String szInParam, byte[] szOutParam, int nOutBufSize);
 
 
    /**
     * 开门信息查询
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean QueryOpenDoorInfo(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 门禁状态查询(开关门状态)
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean QueryDoorStatus(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 正常开门时间外开门配置
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean GetOutTimeDoorConfig(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 获取信息
     *
     * @param szInParam
     * @param szOutParam
     */
    public Boolean CaptureFingerprint(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 应用场景配置
     * @param szInParam
     * @param szOutParam
     * @param nOutBufSize
     * @return
     */
    public Boolean GetWorkScence(String szInParam, byte[] szOutParam, int nOutBufSize);
 
 
    /**
     * 下发应用场景配置
     * @param szInParam
     * @param szOutParam
     * @param nOutBufSize
     * @return
     */
    public Boolean SetWorkScence(String szInParam, byte[] szOutParam, int nOutBufSize);
 
    /**
     * 远程开门
     * @param szInParam
     * @param szOutParam
     * @param nOutBufSize
     * @return
     */
    public Boolean AccessControlOpenDoor(String szInParam, byte[] szOutParam, int nOutBufSize);
 
}