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
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
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
package com.netsdk.demo.customize;
 
import com.alibaba.fastjson.JSONObject;
import com.netsdk.demo.util.CaseMenu;
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.ToolKits;
import com.netsdk.lib.callback.impl.DefaultDisconnectCallback;
import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack;
import com.netsdk.lib.constant.SDKStructureFieldLenth;
import com.netsdk.lib.enumeration.EM_NEW_CONFIG;
import com.netsdk.lib.enumeration.EM_NEW_QUERY_SYSTEM_INFO;
import com.netsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE;
import com.netsdk.lib.structure.*;
import com.netsdk.module.BaseModule;
import com.netsdk.module.ConfigModule;
import com.netsdk.module.entity.DeviceInfo;
import com.sun.jna.Memory;
 
import static com.netsdk.lib.enumeration.EM_NEW_CONFIG.CFG_CMD_ACCESS_GENERAL;
 
/**
 * 设备配置 demo
 *
 * @author 47081 47040
 * @version 1.0
 * @since 2020/10/20
 */
public class ConfigDemo {
 
  private final NetSDKLib netSdkApi = NetSDKLib.NETSDK_INSTANCE;
  /** 二次封装模块,包含一些基础接口 */
  private final BaseModule baseModule;
  /** 二次封装模块,包含一些设备配置的接口 */
  private final ConfigModule configModule;
 
  private long loginHandler;
 
  public ConfigDemo() {
    baseModule = new BaseModule(netSdkApi);
    configModule = new ConfigModule(netSdkApi);
  }
 
  public static void main(String[] args) {
    String ip = "10.35.176.108";
    int port = 37777;
    String username = "admin";
    String password = "admin";
    ConfigDemo demo = new ConfigDemo();
    demo.init();
    if (demo.login(ip, port, username, password)) {
      demo.run();
    }
    demo.logout();
    demo.clean();
  }
 
  /** sdk初始化 */
  public boolean init() {
    return baseModule.init(
        DefaultDisconnectCallback.getINSTANCE(), DefaultHaveReconnectCallBack.getINSTANCE(), true);
  }
 
  /** 释放sdk资源 */
  public void clean() {
    baseModule.clean();
  }
 
  /**
   * 登录设备
   *
   * @param ip 设备ip
   * @param port 设备端口
   * @param username 用户名
   * @param password 密码
   * @return 登录是否成功
   */
  public boolean login(String ip, int port, String username, String password) {
    DeviceInfo info = baseModule.login(ip, port, username, password);
    loginHandler = info.getLoginHandler();
    return loginHandler != 0;
  }
 
  /**
   * 登出
   *
   * @return 登出是否成功
   */
  public boolean logout() {
    return baseModule.logout(loginHandler);
  }
 
  /** 休眠策略配置 */
  public void getandSetSleepingControl() {
    NET_CFG_SLEEPING_CONTROL_INFO config = new NET_CFG_SLEEPING_CONTROL_INFO();
    config =
            (NET_CFG_SLEEPING_CONTROL_INFO)
                    configModule.getConfig(
                            loginHandler,
                            NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_SLEEPING_CONTROL,
                            config,
                            0);
    if (config != null) {
      System.out.println("GetConfig-NET_EM_CFG_SLEEPING_CONTROL success");
      System.out.println(config.toString());
      config.bEnable = (config.bEnable > 0) ? 0 : 1;
       if(configModule.setConfig(
              loginHandler, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_SLEEPING_CONTROL, config, 0)){
         System.out.println("SetConfig-NET_EM_CFG_SLEEPING_CONTROL success");
       } else {
         System.out.println("SetConfig-NET_EM_CFG_SLEEPING_CONTROL fail");
       }
    } else {
      System.out.println("GetConfig-NET_EM_CFG_SLEEPING_CONTROL fail");
    }
  }
 
  /**
   * 下发假日组配置
   *
   * @return 下发是否成功
   */
  public boolean setSpecialDayGroup() {
    NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO config = new NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO();
    config.bGroupEnable = true;
    config.nSpeciaday = 2;
    // byte[]赋值请使用System.arraycopy()
    System.arraycopy("test".getBytes(), 0, config.szGroupName, 0, "test".getBytes().length);
    System.arraycopy(
        "test1".getBytes(), 0, config.stuSpeciaday[0].szDayName, 0, "test1".getBytes().length);
    config.stuSpeciaday[0].stuStartTime = new NET_TIME(2020, 10, 19, 0, 0, 0);
    config.stuSpeciaday[0].stuEndTime = new NET_TIME(2020, 10, 21, 23, 59, 59);
    config.stuSpeciaday[1].szDayName = "test2".getBytes();
    System.arraycopy(
        "test2".getBytes(), 0, config.stuSpeciaday[1].szDayName, 0, "test2".getBytes().length);
    config.stuSpeciaday[1].stuStartTime = new NET_TIME(2020, 10, 22, 10, 10, 10);
    config.stuSpeciaday[1].stuEndTime = new NET_TIME(2020, 10, 23, 12, 0, 0);
    return configModule.setConfig(
        loginHandler, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_ACCESSCTL_SPECIALDAY_GROUP, config, 0);
  }
 
  /** 获取假日组配置 */
  public void getSpecialDayGroup() {
    NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO config = new NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO();
    config =
        (NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO)
            configModule.getConfig(
                loginHandler,
                NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_ACCESSCTL_SPECIALDAY_GROUP,
                config,
                0);
    if (config != null) {
      System.out.println(config.toString());
    }
  }
 
  /** 下发假日计划 */
  public void setSpecialDaysSchedule() {
    NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO config =
        new NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO();
    System.arraycopy(
        "scheduleName".getBytes(), 0, config.szSchduleName, 0, "scheduleName".getBytes().length);
    // 计划使能
    config.bSchdule = true;
    // 假日组的下标,NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO中stuSpeciaday的下标
    config.nGroupNo = 1;
    // 时间段
    config.nTimeSection = 2;
    config.stuTimeSection[0].setTime(1, 5, 0, 0, 14, 0, 0);
    config.stuTimeSection[1].setTime(0, 15, 0, 0, 21, 0, 0);
    // 生效的门数量
    config.nDoorNum = 1;
    // 生效的门
    config.nDoors[0] = 1;
    configModule.setConfig(
        loginHandler, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE, config, 0);
  }
 
  /** 获取假日计划 */
  public void getSpecialDaysSchedule() {
    NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO config =
        new NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO();
    config.nGroupNo = 1;
    config =
        (NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO)
            configModule.getConfig(
                loginHandler,
                NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE,
                config,
                0);
    if (config != null) {
      System.out.println(config.toString());
    }
  }
 
  /** 获取云台能力集 */
  public void queryPtzCaps() {
    CFG_PTZ_PROTOCOL_CAPS_INFO info = new CFG_PTZ_PROTOCOL_CAPS_INFO();
    info =
        (CFG_PTZ_PROTOCOL_CAPS_INFO)
            configModule.queryConfig(
                loginHandler, EM_NEW_QUERY_SYSTEM_INFO.CFG_CAP_CMD_PTZ, info, 0, 5000);
    if (info != null) {
      System.out.println(
          "支持云台巡迹OSD叠加: "
              + info.bSupportPtzPatternOSD
              + ",支持云台RS485检测OSD叠加: "
              + info.bSupportPTZCoordinates
              + ",支持云台方向状态显示: "
              + info.bDirectionDisplay
              + ",变倍最大值: "
              + info.dwZoomMax
              + ",变焦最小值: "
              + info.dwZoomMin);
      System.out.println("支持云台按绝对坐标定位: " + info.bMoveAbsolutely);
      if (info.bMoveAbsolutely) {
        System.out.println("绝对控制云台能力: " + info.stuMoveAbsolutely);
      }
    }
  }
 
  /** 设置一大三小 */
  public void setCompose() {
    NET_COMPOSE_CHANNEL_INFO config = new NET_COMPOSE_CHANNEL_INFO();
    config.emSplitMode = NetSDKLib.NET_SPLIT_MODE.NET_SPLIT_4A;
    // 子窗口显示数量
    config.nChannelCount = 4;
    config.nChannelCombination[0] = 3;
    // 子窗口显示内容
    config.nChannelCombination[1] = 0;
    config.nChannelCombination[2] = 7;
    config.nChannelCombination[3] = 8;
 
    boolean result =
        configModule.setConfig(
            loginHandler, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_COMPOSE_CHANNEL, config, -1, 5000);
    if (!result) {
      System.out.println("set config failed.");
    } else {
      System.out.println("set config success.");
    }
  }
 
  /** 获取一大三小模式 */
  public void getCompose() {
    NET_COMPOSE_CHANNEL_INFO config = new NET_COMPOSE_CHANNEL_INFO();
    config =
        (NET_COMPOSE_CHANNEL_INFO)
            configModule.getConfig(
                loginHandler, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_COMPOSE_CHANNEL, config, -1);
    if (config != null) {
      System.out.println("分割模式: " + config.emSplitMode + ",窗口数量:" + config.nChannelCount);
      for (int i = 0; i < config.nChannelCount; i++) {
        // 子窗口显示内容
        System.out.println("nChannelCombination[" + i + "]: " + config.nChannelCombination[i]);
      }
    } else {
      System.out.println("get compose configuration failed.");
    }
  }
 
  /** 获取刻录文件大小 */
  public void getBurnParam() {
    // 该长度是登录时从deviceInfo中取出的通道总数
    NET_BURN_PARAM_INFO[] config = new NET_BURN_PARAM_INFO[12];
    for (int i = 0; i < config.length; i++) {
      config[i] = new NET_BURN_PARAM_INFO();
    }
    // 获取单个的可以使用configModule.getConfig
    config =
        (NET_BURN_PARAM_INFO[])
            configModule.getConfigs(
                loginHandler, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_BURN_PARAM, config);
    if (config != null) {
      for (NET_BURN_PARAM_INFO net_burn_param_info : config) {
        if (net_burn_param_info.nChannelCount > 0) {
          for (int j = 0; j < net_burn_param_info.nChannelCount; j++) {
            System.out.println("通道: " + net_burn_param_info.nChannels[j]);
          }
          System.out.println(
              "刻录文件长度:"
                  + net_burn_param_info.nBurnFileLength
                  + " MB,有效通道总数: "
                  + net_burn_param_info.nChannelCount);
        }
      }
 
      // 修改,设备修改刻录长度可能会有问题,暂不修改
      /* config.nBurnFileLength = 512;
      if (configModule.setConfig(loginHandler, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_BURN_PARAM, config, 0, 5000)) {
          config = (NET_BURN_PARAM_INFO) configModule.getConfig(loginHandler, NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_BURN_PARAM, config, 0);
          System.out.println("修改后刻录文件长度: " + config.nBurnFileLength + "MB");
      }*/
    } else {
      System.out.println("get burn param burnLength failed.");
    }
  }
 
  /** 获取与下发语音激励 */
  public void modifyAudioSpirit() {
    // 下发配置建议先获取设备配置,并在获取的配置基础上修改配置属性
    CFG_AUDIO_SPIRIT spirit = new CFG_AUDIO_SPIRIT();
    spirit.nChannelCount = 16;
    spirit.pstuChannels = new Memory(new CFG_AUDIO_SPIRIT_CHANNEL().size() * spirit.nChannelCount);
    spirit =
        (CFG_AUDIO_SPIRIT)
            configModule.getNewConfig(
                loginHandler, EM_NEW_CONFIG.CFG_CMD_AUDIO_SPIRIT, spirit, -1, 5000);
    if (spirit != null) {
      System.out.println("before modify audio spirit enable: " + spirit.bEnable);
      spirit.bEnable = !spirit.bEnable;
      System.out.println("nChannelCount: " + spirit.nChannelCount);
      CFG_AUDIO_SPIRIT_CHANNEL[] channels = new CFG_AUDIO_SPIRIT_CHANNEL[spirit.nChannelCount];
      for (int i = 0; i < channels.length; i++) {
        channels[i] = new CFG_AUDIO_SPIRIT_CHANNEL();
      }
      ToolKits.GetPointerDataToStructArr(spirit.pstuChannels, channels);
      for (CFG_AUDIO_SPIRIT_CHANNEL channel : channels) {
        System.out.println(channel.toString());
      }
      spirit.pstuChannels = new Memory(channels[0].size() * channels.length);
      ToolKits.SetStructArrToPointerData(channels, spirit.pstuChannels);
      boolean result =
          configModule.setNewConfig(
              loginHandler, EM_NEW_CONFIG.CFG_CMD_AUDIO_SPIRIT, spirit, -1, 5000);
 
      if (result) {
        System.out.println("after modify audio spirit enable: " + spirit.bEnable);
      } else {
        System.out.println("set audio spirit failed.");
      }
    } else {
      System.out.println("get audio spirit enable failed.");
    }
  }
 
  /** 获取设备安装位置的GPS坐标信息 */
  public void getDevlocationInfo() {
    // 超时时间
    int waittime = 5000;
    // 通道号,-1为所有通道
    int nChannelID = -1;
    // 设备安装位置的GPS坐标信息对象
    CFG_DEVLOCATION_INFO info = new CFG_DEVLOCATION_INFO();
 
    info =
        (CFG_DEVLOCATION_INFO)
            configModule.getNewConfig(
                loginHandler, EM_NEW_CONFIG.CFG_CMD_DEVLOCATION, info, nChannelID, waittime);
    if (info != null) {
      System.out.println("经度:" + info.unLongitude);
      System.out.println("纬度:" + info.unLatitude);
      System.out.println("海拔 :" + info.dbAltitude);
      System.out.println("GPS信息按照配置上报:" + info.bConfigEnable);
      System.out.println("设备高度:" + info.fHeight);
    }
  }
 
  /** 设置设备安装位置的GPS坐标信息 */
  public void setDevlocationInfo() {
    // 超时时间
    int waittime = 5000;
    // 通道号,-1为所有通道
    int nChannelID = -1;
    // 设备安装位置的GPS坐标信息对象
    CFG_DEVLOCATION_INFO info = new CFG_DEVLOCATION_INFO();
    // 精度
    info.unLongitude = 301200000;
    // 纬度
    info.unLatitude = 121266670;
    // 海拔
    info.dbAltitude = 150.0d;
    // GPS信息按照配置上报
    info.bConfigEnable = 0;
    // 设备高度
    info.fHeight = 15.0f;
    boolean result =
        configModule.setNewConfig(
            loginHandler, EM_NEW_CONFIG.CFG_CMD_DEVLOCATION, info, nChannelID, waittime);
    if (result) {
      System.out.println("设置设备安装位置的GPS坐标信息成功");
    } else {
      System.out.println("设置设备安装位置的GPS坐标信息失败");
    }
  }
 
  /** 获取设备参数标定配置 */
  public void getLocationCalibrate() {
    // 超时时间
    int waittime = 5000;
    // 通道号,-1为所有通道
    int nChannelID = -1;
    // 设备参数标定配置对象
    CFG_LOCATION_CALIBRATE_INFO info = new CFG_LOCATION_CALIBRATE_INFO();
    info =
        (CFG_LOCATION_CALIBRATE_INFO)
            configModule.getNewConfig(
                loginHandler, EM_NEW_CONFIG.CFG_CMD_LOCATION_CALIBRATE, info, nChannelID, waittime);
    if (info != null) {
      System.out.println("可见光横向视角:" + info.nVisualMaxHFOV);
      System.out.println("可见光纵向视角:" + info.nVisualMaxVFOV);
      System.out.println("热成像横向视角:" + info.nThermoMaxHFOV);
      System.out.println("热成像纵向视角:" + info.nThermoMaxVFOV);
      System.out.println("标定点个数:" + info.nPointNum);
      CFG_LOCATION_CALIBRATE_POINT_INFO[] stuPointInfo = info.stuPointInfo;
      System.out.println("标定点信息");
      for (int i = 0; i < info.nPointNum; i++) {
        System.out.println("-----------------标定点信开始--------------");
        System.out.println("+标定点ID:" + stuPointInfo[i].nID);
        System.out.println("+标定点名称:" + new String(stuPointInfo[i].szName));
        System.out.println("+标定点基本信息");
        CFG_CALIBRATE_INFO stuCalibrateInfo = stuPointInfo[i].stuCalibrateInfo;
        System.out.println("++标定数量" + stuCalibrateInfo.nInfoNum);
        CFG_CALIBRATE_UNIT_INFO_ARR[] stuCalibrateUnitInfo = stuCalibrateInfo.stuCalibrateUnitInfo;
        for (int j = 0; j < stuCalibrateInfo.nInfoNum; j++) {
          System.out.println(
              "+++标定信息单元:" + JSONObject.toJSONString(stuCalibrateUnitInfo[j].unitArr));
        }
        System.out.println("-----------------标定点信结束--------------");
      }
    }
  }
 
  /** 设置设备参数标定配置 */
  public void setLocationCalibrate() {
    // 超时时间
    int waittime = 5000;
    // 通道号,-1为所有通道
    int nChannelID = -1;
    // 设备参数标定配置对象
    CFG_LOCATION_CALIBRATE_INFO info = new CFG_LOCATION_CALIBRATE_INFO();
    // 视角
    info.nVisualMaxHFOV = 1340;
    info.nVisualMaxVFOV = 160;
    info.nThermoMaxHFOV = 100;
    info.nThermoMaxVFOV = 100;
 
    // 标定点个数
    info.nPointNum = 1;
    // 标定点信息
    CFG_LOCATION_CALIBRATE_POINT_INFO[] stuPointInfoArr =
        new CFG_LOCATION_CALIBRATE_POINT_INFO[SDKStructureFieldLenth.MAX_CALIBRATE_POINT_NUM];
 
    CFG_LOCATION_CALIBRATE_POINT_INFO stuPointInfo = new CFG_LOCATION_CALIBRATE_POINT_INFO();
    // 标定点ID
    stuPointInfo.nID = 12;
    // 标定点名称
    byte[] szName = "cat1".getBytes();
    System.arraycopy(szName, 0, stuPointInfo.szName, 0, szName.length);
    // 使能
    stuPointInfo.bEnable = 0;
    // 经度
    stuPointInfo.nLongitude = 22222;
    // 纬度
    stuPointInfo.nLatitude = 18655;
    // 海拔
    stuPointInfo.fAltitude = 5.9d;
    // 标定点基本信息
    CFG_CALIBRATE_INFO calibrateInfo = new CFG_CALIBRATE_INFO();
    // 标定数量
    calibrateInfo.nInfoNum = 1;
 
    CFG_CALIBRATE_UNIT_INFO calibrateUnitInfo = new CFG_CALIBRATE_UNIT_INFO();
    // 分辨率高
    calibrateUnitInfo.nHeight = 1660;
    // 分辨率宽
    calibrateUnitInfo.nWidth = 1320;
    // 云台位置(P/T/Z 归一化)
    float[] nPosition = {0.0f, 0.0f, 0.0f};
    calibrateUnitInfo.nPosition = nPosition;
    // 标定点坐标
    int[] nLocation = {4096, 4096};
    calibrateUnitInfo.nLocation = nLocation;
    // 横向视场角(单位:0.01度)
    calibrateUnitInfo.nHFOV = 100;
    // 纵向视场角(单位:0.01度)
    calibrateUnitInfo.nVFOV = 50;
    // 二维数组封装
    CFG_CALIBRATE_UNIT_INFO[] unitArr = new CFG_CALIBRATE_UNIT_INFO[2];
    unitArr[0] = calibrateUnitInfo;
    unitArr[1] = calibrateUnitInfo;
 
    CFG_CALIBRATE_UNIT_INFO_ARR arr = new CFG_CALIBRATE_UNIT_INFO_ARR();
    arr.unitArr = unitArr;
 
    CFG_CALIBRATE_UNIT_INFO_ARR[] stuCalibrateUnitInfo = new CFG_CALIBRATE_UNIT_INFO_ARR[5];
    stuCalibrateUnitInfo[0] = arr;
    calibrateInfo.stuCalibrateUnitInfo = stuCalibrateUnitInfo;
 
    stuPointInfo.stuCalibrateInfo = calibrateInfo;
 
    stuPointInfoArr[0] = stuPointInfo;
    info.stuPointInfo = stuPointInfoArr;
 
    boolean result =
        configModule.setNewConfig(
            loginHandler, EM_NEW_CONFIG.CFG_CMD_LOCATION_CALIBRATE, info, nChannelID, waittime);
    if (result) {
      System.out.println("设置设备参数标定配置成功");
    } else {
      System.out.println("设置设备参数标定配置失败");
    }
  }
 
  /** 多门互锁配置的获取与下发 */
  public void ABLockInfo() {
    // 对于配置的下发,建议先获取再修改配置项下发,可以避免漏掉或误修改其他无关配置项
    CFG_ACCESS_GENERAL_INFO inParam = new CFG_ACCESS_GENERAL_INFO();
    inParam =
        (CFG_ACCESS_GENERAL_INFO)
            configModule.getNewConfig(loginHandler, CFG_CMD_ACCESS_GENERAL, inParam, 0, 3000);
    System.out.println("修改前,多门互锁使能:" + inParam.stuABLockInfo.bEnable + ",配置为:");
    for (int i = 0; i < inParam.stuABLockInfo.nDoors; i++) {
      for (int j = 0; j < inParam.stuABLockInfo.stuDoors[i].nDoor; j++) {
        // 互锁信息
        System.out.println(i + "," + j + ",door:" + inParam.stuABLockInfo.stuDoors[i].anDoor[j]);
      }
    }
    // 修改多门互锁配置
    inParam.abABLockInfo = 1;
    inParam.stuABLockInfo.bEnable = !inParam.stuABLockInfo.bEnable;
    inParam.stuABLockInfo.nDoors = 1;
    int doors = 2;
    inParam.stuABLockInfo.stuDoors[0].nDoor = doors;
    inParam.stuABLockInfo.stuDoors[0].anDoor[0] = 1;
    inParam.stuABLockInfo.stuDoors[0].anDoor[1] = 2;
 
    inParam.stuABLockInfo.stuDoors[1].nDoor = doors;
    inParam.stuABLockInfo.stuDoors[1].anDoor[0] = 0;
    inParam.stuABLockInfo.stuDoors[1].anDoor[1] = 3;
    boolean result =
        configModule.setNewConfig(loginHandler, CFG_CMD_ACCESS_GENERAL, inParam, 0, 3000);
    // 下发配置成功,则重新获取配置信息,打印
    if (result) {
      inParam =
          (CFG_ACCESS_GENERAL_INFO)
              configModule.getNewConfig(loginHandler, CFG_CMD_ACCESS_GENERAL, inParam, 3, 3000);
      System.out.println("修改后,多门互锁使能:" + inParam.stuABLockInfo.bEnable + ",配置为:");
    }
  }
 
  public void run() {
    CaseMenu menu = new CaseMenu();
    menu.addItem(new CaseMenu.Item(this, "获取&下发休眠策略配置", "getandSetSleepingControl"));
    menu.addItem(new CaseMenu.Item(this, "设置假日组", "setSpecialDayGroup"));
    menu.addItem(new CaseMenu.Item(this, "获取假日组", "getSpecialDayGroup"));
    menu.addItem(new CaseMenu.Item(this, "设置假日计划", "setSpecialDaysSchedule"));
    menu.addItem(new CaseMenu.Item(this, "获取假日计划", "getSpecialDaysSchedule"));
    menu.addItem(new CaseMenu.Item(this, "获取云台能力集", "queryPtzCaps"));
    menu.addItem(new CaseMenu.Item(this, "设置一大三小", "setCompose"));
    menu.addItem(new CaseMenu.Item(this, "获取一大三小", "getCompose"));
    menu.addItem(new CaseMenu.Item(this, "获取刻录文件大小", "getBurnParam"));
    menu.addItem(new CaseMenu.Item(this, "修改语音激励", "modifyAudioSpirit"));
    menu.addItem(new CaseMenu.Item(this, "获取设备安装位置的GPS坐标信息", "getDevlocationInfo"));
    menu.addItem(new CaseMenu.Item(this, "设置设备安装位置的GPS坐标信息", "setDevlocationInfo"));
    menu.addItem(new CaseMenu.Item(this, "获取设备参数标定配置", "getLocationCalibrate"));
    menu.addItem(new CaseMenu.Item(this, "设置设备参数标定配置", "setLocationCalibrate"));
    menu.addItem(new CaseMenu.Item(this, "多门互锁", "ABLockInfo"));
    menu.run();
  }
}