package com.netsdk.demo.customize.gateway; import static com.netsdk.lib.NetSDKLib.NET_ALARM_ARC_OFFLINE; import static com.netsdk.lib.NetSDKLib.NET_ALARM_AREAALARM; import static com.netsdk.lib.NetSDKLib.NET_ALARM_ARMING_FAILURE; import static com.netsdk.lib.NetSDKLib.NET_ALARM_ATS_FAULT; import static com.netsdk.lib.NetSDKLib.NET_ALARM_BATTERYLOWPOWER; import static com.netsdk.lib.NetSDKLib.NET_ALARM_CHASSISINTRUDED; import static com.netsdk.lib.NetSDKLib.NET_ALARM_MANUAL_TEST; import static com.netsdk.lib.NetSDKLib.NET_ALARM_OVER_TEMPERATURE; import static com.netsdk.lib.NetSDKLib.NET_ALARM_POWERFAULT; import static com.netsdk.lib.NetSDKLib.NET_ALARM_RCEMERGENCY_CALL; import static com.netsdk.lib.NetSDKLib.NET_ALARM_RF_JAMMING; import static com.netsdk.lib.NetSDKLib.NET_ALARM_SENSOR_ABNORMAL; import static com.netsdk.lib.NetSDKLib.NET_ALARM_USER_MODIFIED; import static com.netsdk.lib.NetSDKLib.NET_ALARM_WIFI_FAILURE; import static com.netsdk.lib.Utils.getOsPrefix; import java.io.File; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.text.NumberFormat; import java.text.SimpleDateFormat; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.NetSDKLib.ALARM_BATTERYLOWPOWER_INFO; import com.netsdk.lib.NetSDKLib.ALARM_CHASSISINTRUDED_INFO; import com.netsdk.lib.NetSDKLib.ALARM_POWERFAULT_INFO; import com.netsdk.lib.NetSDKLib.ALARM_RCEMERGENCY_CALL_INFO; import com.netsdk.lib.NetSDKLib.CFG_DEV_DISPOSITION_INFO; import com.netsdk.lib.NetSDKLib.CFG_DVRIP_INFO; import com.netsdk.lib.NetSDKLib.CFG_NETWORK_INFO; import com.netsdk.lib.NetSDKLib.EM_UPGRADE_TYPE; import com.netsdk.lib.NetSDKLib.LLong; import com.netsdk.lib.callback.impl.DefaultDisconnectCallback; import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack; import com.netsdk.lib.enumeration.EM_ALARM_ONECLICKARMING_FUNCTION; import com.netsdk.lib.enumeration.EM_ALARM_ONECLICKARMING_TRIGGEROPTION; import com.netsdk.lib.enumeration.EM_ALARM_USERAUTHORITY; import com.netsdk.lib.enumeration.EM_ALARM_USER_GROUP; import com.netsdk.lib.enumeration.EM_AREAARM_TRIGGERMODE; import com.netsdk.lib.enumeration.EM_ARM_TYPE; import com.netsdk.lib.enumeration.EM_CFG_APN; import com.netsdk.lib.enumeration.EM_CODEID_SENSE_METHOD_TYPE; import com.netsdk.lib.enumeration.EM_GETUSERINFOBYCONDITION_USER_STATUS; import com.netsdk.lib.enumeration.EM_GETUSERINFOBYCONDITION_USER_TYPE; import com.netsdk.lib.enumeration.EM_NEW_CONFIG; import com.netsdk.lib.enumeration.EM_OPERATE_USERINFO_TYPE; import com.netsdk.lib.enumeration.EM_SDK_LOG_QUERY_TYPE; import com.netsdk.lib.enumeration.EM_WIRELESS_DEVICE_MODE; import com.netsdk.lib.enumeration.ENUMERROR; import com.netsdk.lib.enumeration.NET_CODEID_ERROR_TYPE; import com.netsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE; import com.netsdk.lib.enumeration.NET_EM_SCENE_MODE; import com.netsdk.lib.enumeration.NET_EM_SET_ALARMREGION_INFO; import com.netsdk.lib.enumeration.NET_WIRELESS_DEVICE_TYPE; import com.netsdk.lib.structure.ALARM_AREAALARM_INFO; import com.netsdk.lib.structure.ALARM_AREAARM_MODECHANGE_INFO; import com.netsdk.lib.structure.ALARM_KEYPAD_LOCK_INFO; import com.netsdk.lib.structure.ALARM_WIRELESSDEV_LOWPOWER_INFO; import com.netsdk.lib.structure.ALARM_WIRELESSDEV_POWERLESS_INFO; import com.netsdk.lib.structure.CFG_ALARM_SUBSYSTEM_INFO; import com.netsdk.lib.structure.CFG_CHASSISINTRUSION_INFO; import com.netsdk.lib.structure.CFG_NETAPP_WLAN; import com.netsdk.lib.structure.CFG_SCENE_MODE_INFO; import com.netsdk.lib.structure.CFG_WIRELESS_INFO; import com.netsdk.lib.structure.NET_ALARM_ARC_OFFLINE_INFO; import com.netsdk.lib.structure.NET_ALARM_ARMING_FAILURE_INFO; import com.netsdk.lib.structure.NET_ALARM_ATS_FAULT_INFO; import com.netsdk.lib.structure.NET_ALARM_DEVICE_MODIFIED_INFO; import com.netsdk.lib.structure.NET_ALARM_MANUAL_TEST_INFO; import com.netsdk.lib.structure.NET_ALARM_OVER_TEMPERATURE_INFO; import com.netsdk.lib.structure.NET_ALARM_RF_JAMMING_INFO; import com.netsdk.lib.structure.NET_ALARM_USER_EXTERN; import com.netsdk.lib.structure.NET_ALARM_USER_MODIFIED_INFO; import com.netsdk.lib.structure.NET_ALARM_WIFI_FAILURE_INFO; import com.netsdk.lib.structure.NET_CFG_AREA_ARM_MODE_INFO; import com.netsdk.lib.structure.NET_CFG_DISABLE_BEEP_LINKAGE_INFO; import com.netsdk.lib.structure.NET_CTRL_LOWRATEWPAN_ADD; import com.netsdk.lib.structure.NET_CTRL_LOWRATEWPAN_REMOVE; import com.netsdk.lib.structure.NET_CTRL_LOWRATEWPAN_REMOVEALL; import com.netsdk.lib.structure.NET_DEVSTATUS_NET_INFO; import com.netsdk.lib.structure.NET_DEVSTATUS_POWER_INFO; import com.netsdk.lib.structure.NET_DEVSTATUS_SIM_INFO; import com.netsdk.lib.structure.NET_EVENT_AREAR_INFO; import com.netsdk.lib.structure.NET_GET_ACCESSORY_INFO; import com.netsdk.lib.structure.NET_IN_ADD_ALARM_USER; import com.netsdk.lib.structure.NET_IN_ATTACH_LOWRATEWPAN; import com.netsdk.lib.structure.NET_IN_CTRL_LOWRATEWPAN_ACCESSORY_PARAM; import com.netsdk.lib.structure.NET_IN_DELETE_ALARM_USER; import com.netsdk.lib.structure.NET_IN_GET_DEVICESERIALNO_INFO; import com.netsdk.lib.structure.NET_IN_GET_DEVICETYPE_INFO; import com.netsdk.lib.structure.NET_IN_MANUAL_TEST; import com.netsdk.lib.structure.NET_IN_MODIFY_ALARM_USER; import com.netsdk.lib.structure.NET_IN_MODIFY_ALARM_USER_PASSWORD; import com.netsdk.lib.structure.NET_IN_SET_ALARMMODE; import com.netsdk.lib.structure.NET_IN_TRANSMIT_CMD; import com.netsdk.lib.structure.NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS; import com.netsdk.lib.structure.NET_IN_WLAN_ACCESSPOINT; import com.netsdk.lib.structure.NET_NETAPP_COMMUNICATION_LIST_CFG; import com.netsdk.lib.structure.NET_OUT_ADD_ALARM_USER; import com.netsdk.lib.structure.NET_OUT_ATTACH_LOWRATEWPAN; import com.netsdk.lib.structure.NET_OUT_DELETE_ALARM_USER; import com.netsdk.lib.structure.NET_OUT_GET_DEVICESERIALNO_INFO; import com.netsdk.lib.structure.NET_OUT_GET_DEVICETYPE_INFO; import com.netsdk.lib.structure.NET_OUT_MANUAL_TEST; import com.netsdk.lib.structure.NET_OUT_MODIFY_ALARM_USER; import com.netsdk.lib.structure.NET_OUT_MODIFY_ALARM_USER_PASSWORD; import com.netsdk.lib.structure.NET_OUT_SET_ALARMMODE; import com.netsdk.lib.structure.NET_OUT_TRANSMIT_CMD; import com.netsdk.lib.structure.NET_OUT_UNIFIEDINFOCOLLECT_GET_DEVSTATUS; import com.netsdk.lib.structure.NET_OUT_WLAN_ACCESSPOINT; import com.netsdk.lib.structure.NET_TIME; import com.netsdk.lib.structure.NET_TIME_EX; import com.netsdk.lib.structure.NET_WLAN_ACCESSPOINT_INFO; import com.netsdk.lib.structure.NET_WPAN_ACCESSORY_INFO; import com.netsdk.lib.structure.QUERY_DEVICE_LOG_PARAM; import com.netsdk.lib.structure.SDK_DEVICE_LOG_ITEM_EX; import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; public class GatewayDemo { // SDk对象初始化 public static final NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE; public static final NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE; // 判断是否初始化 private static boolean bInit = false; // 判断log是否打开 private static boolean bLogOpen = false; // 设备信息 private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); // 登录句柄 private NetSDKLib.LLong m_hLoginHandle = new NetSDKLib.LLong(0); // 回调函数需要是静态的,防止被系统回收 // 断线回调 private static NetSDKLib.fDisConnect disConnectCB = DefaultDisconnectCallback.getINSTANCE(); // 重连回调 private static NetSDKLib.fHaveReConnect haveReConnectCB = DefaultHaveReconnectCallBack.getINSTANCE(); // 编码格式 public static String encode; static { String osPrefix = getOsPrefix(); if (osPrefix.toLowerCase().startsWith("win32-amd64")) { encode = "GBK"; } else if (osPrefix.toLowerCase().startsWith("linux-amd64")) { encode = "UTF-8"; } } /** * 获取当前时间 */ public static String GetDate() { SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return simpleDate.format(new java.util.Date()).replaceAll("[^0-9]", "-"); } /** * 初始化SDK库 */ public static boolean Init() { bInit = netsdk.CLIENT_Init(disConnectCB, null);// 进程启动时,初始化一次 if (!bInit) { System.out.println("Initialize SDK failed"); return false; } // 配置日志 GatewayDemo.enableLog(); // 设置断线重连回调接口, 此操作为可选操作,但建议用户进行设置 netsdk.CLIENT_SetAutoReconnect(haveReConnectCB, null); // 设置登录超时时间和尝试次数,可选 // 登录请求响应超时时间设置为3S int waitTime = 3000; // 登录时尝试建立链接 1 次 int tryTimes = 1; netsdk.CLIENT_SetConnectTime(waitTime, tryTimes); // 设置更多网络参数, NET_PARAM 的nWaittime , nConnectTryNum 成员与 CLIENT_SetConnectTime // 接口设置的登录设备超时时间和尝试次数意义相同,可选 NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM(); // 登录时尝试建立链接的超时时间 netParam.nConnectTime = 10000; // 设置子连接的超时时间 netParam.nGetConnInfoTime = 3000; netsdk.CLIENT_SetNetworkParam(netParam); return true; } /** * 打开 sdk log */ private static void enableLog() { NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO(); File path = new File("sdklog/"); if (!path.exists()) path.mkdir(); // 这里的log保存地址依据实际情况自己调整 String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + "sdklog" + GetDate() + ".log"; setLog.nPrintStrategy = 0; setLog.bSetFilePath = 1; System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length); System.out.println(logPath); setLog.bSetPrintStrategy = 1; bLogOpen = netsdk.CLIENT_LogOpen(setLog); if (!bLogOpen) System.err.println("Failed to open NetSDK log"); } /** * 高安全登录 */ public void loginWithHighLevel() { // 输入结构体参数 NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstlnParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY() { { szIP = m_strIpAddr.getBytes(); nPort = m_nPort; szUserName = m_strUser.getBytes(); szPassword = m_strPassword.getBytes(); } }; // 输出结构体参数 NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY(); // 写入sdk m_hLoginHandle = netsdk.CLIENT_LoginWithHighLevelSecurity(pstlnParam, pstOutParam); if (m_hLoginHandle.longValue() == 0) { System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIpAddr, m_nPort, netsdk.CLIENT_GetLastError()); } else { deviceInfo = pstOutParam.stuDeviceInfo; // 获取设备信息 System.out.println("Login Success"); System.out.println("Device Address:" + m_strIpAddr); System.out.println("设备包含:" + deviceInfo.byChanNum + "个通道"); } } /** * 退出 */ public void logOut() { if (m_hLoginHandle.longValue() != 0) { netsdk.CLIENT_Logout(m_hLoginHandle); System.out.println("LogOut Success"); } } /** * 清理sdk环境并退出 */ public static void cleanAndExit() { if (bLogOpen) { netsdk.CLIENT_LogClose(); // 关闭sdk日志打印 } netsdk.CLIENT_Cleanup(); // 进程关闭时,调用一次 System.exit(0); } /** * 订阅报警信息 * */ public void startListen() { // 设置报警回调函数设置一次即可 netsdk.CLIENT_SetDVRMessCallBack(fAlarmAccessDataCB.getInstance(), null); // 订阅报警 boolean bRet = netsdk.CLIENT_StartListenEx(m_hLoginHandle); if (!bRet) { System.err.println("订阅报警失败! LastError = 0x%x\n" + netsdk.CLIENT_GetLastError()); } else { System.out.println("订阅报警成功."); } } /** * 报警事件回调 */ private static class fAlarmAccessDataCB implements NetSDKLib.fMessCallBack { private static fAlarmAccessDataCB instance = new fAlarmAccessDataCB(); private fAlarmAccessDataCB() { } public static fAlarmAccessDataCB getInstance() { return instance; } public boolean invoke(int lCommand, LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, Pointer dwUser) { switch (lCommand) { case NetSDKLib.NET_ALARM_AREAARM_MODECHANGE: { // 区域防区模式改变(对应结构体ALARM_AREAARM_MODECHANGE_INFO) System.out.println("区域防区模式改变事件--------------------"); ALARM_AREAARM_MODECHANGE_INFO msg = new ALARM_AREAARM_MODECHANGE_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 区域编号 int nAreaIndex = msg.nAreaIndex; int nEventID = msg.nEventID; NET_TIME_EX utc = msg.UTC; int emTriggerMode = msg.emTriggerMode; int emUser = msg.emUser; int nID = msg.nID; System.out.println(" nAreaIndex:" + nAreaIndex); System.out.println(" nEventID:" + nEventID); System.out.println(" utc:" + utc); System.out.println(" emTriggerMode:" + emTriggerMode); System.out.println(" emUser:" + emUser); System.out.println(" nID:" + nID); break; } case NetSDKLib.NET_ALARM_ALARM_EX2: { // 本地报警事件(对应结构体 ALARM_ALARM_INFO_EX2) System.out.println(" 本地报警事件--------------------"); NetSDKLib.ALARM_ALARM_INFO_EX2 msg = new NetSDKLib.ALARM_ALARM_INFO_EX2(); ToolKits.GetPointerData(pStuEvent, msg); System.out.println("Channel is " + msg.nChannelID); System.out.println("Action is " + msg.nAction); System.out.println("Happend time is " + msg.stuTime.toStringTime()); System.out.println("Sense type is " + msg.emSenseType + "\r\n"); System.out.println("Defence area type is " + msg.emDefenceAreaType); break; } case NetSDKLib.NET_ALARM_WIRELESSDEV_LOWPOWER: { // 获取无线设备低电量上报事件(对应结构体ALARM_WIRELESSDEV_LOWPOWER_INFO) System.out.println(" 获取无线设备低电量上报事件--------------------"); ALARM_WIRELESSDEV_LOWPOWER_INFO msg = new ALARM_WIRELESSDEV_LOWPOWER_INFO(); ToolKits.GetPointerData(pStuEvent, msg); int emResult = msg.emResult; System.out.println(" emResult:" + emResult); NET_TIME stuTime = msg.stuTime; System.out.println(" stuTime:" + stuTime.toStringTime()); int emType = msg.emType; System.out.println(" emType:" + emType); break; } case NetSDKLib.NET_ALARM_MODULE_LOST: { // 扩展模块掉线事件(对应结构体 ALARM_MODULE_LOST_INFO) System.out.println(" 扩展模块掉线事件--------------------"); NetSDKLib.ALARM_MODULE_LOST_INFO msg = new NetSDKLib.ALARM_MODULE_LOST_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件上报时间 NetSDKLib.NET_TIME stuTime = msg.stuTime; System.out.println(" stuTime:" + stuTime.toStringTime()); // 扩展模块接的总线的序号(从0开始) int nSequence = msg.nSequence; System.out.println(" nSequence:" + nSequence); // 总线类型, 参考枚举 NET_BUS_TYPE int emBusType = msg.emBusType; System.out.println(" emBusType:" + emBusType); // 掉线的扩展模块数目 int nAddr = msg.nAddr; System.out.println(" nAddr:" + nAddr); // 掉线的扩展模块的序号(从0开始) int[] anAddr = msg.anAddr; for (int i = 0; i < nAddr; i++) { System.out.println(anAddr[i]); } // 设备类型 "SmartLock",是级联设备,当设备类型"AlarmDefence"接口序号为报警序号 System.out.println(" szDevType:" + new String(msg.szDevType)); // 在线情况 默认0。 0-不在线; 1-在线 System.out.println(" bOnline:" + msg.bOnline); break; } case NET_ALARM_SENSOR_ABNORMAL: {// 探测器异常报警(对应结构体 ALARM_SENSOR_ABNORMAL_INFO) System.out.println(" 探测器异常报警--------------------"); NetSDKLib.ALARM_SENSOR_ABNORMAL_INFO msg = new NetSDKLib.ALARM_SENSOR_ABNORMAL_INFO(); ToolKits.GetPointerData(pStuEvent, msg); int nAction = msg.nAction; System.out.println(" nAction:" + nAction); int nChannelID = msg.nChannelID; System.out.println(" nChannelID:" + nChannelID); NetSDKLib.NET_TIME_EX stuTime = msg.stuTime; System.out.println(" stuTime:" + stuTime.toStringTime()); System.out.println(" emStatus:" + msg.emStatus); break; } case NET_ALARM_RCEMERGENCY_CALL: {// 紧急呼叫报警事件(对应结构体 ALARM_RCEMERGENCY_CALL_INFO) System.out.println(" 紧急呼叫报警事件--------------------"); ALARM_RCEMERGENCY_CALL_INFO msg = new ALARM_RCEMERGENCY_CALL_INFO(); ToolKits.GetPointerData(pStuEvent, msg); System.out.println(" nAction:" + msg.nAction); System.out.println(" emType:" + msg.emType); System.out.println(" Happend:" + msg.stuTime.toStringTime()); System.out.println(" emMode:" + msg.emMode); System.out.println(" dwID:" + msg.dwID); break; } case NET_ALARM_BATTERYLOWPOWER: { // 电池电量低报警(对应结构体 ALARM_BATTERYLOWPOWER_INFO) System.out.println(" 电池电量低报警--------------------"); ALARM_BATTERYLOWPOWER_INFO msg = new ALARM_BATTERYLOWPOWER_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 0:开始1:停止 int nAction = msg.nAction; System.out.println(" nAction:" + nAction); // 剩余电量百分比,单位% int nBatteryLeft = msg.nBatteryLeft; System.out.println(" nBatteryLeft:" + nBatteryLeft); // 事件发生时间 NetSDKLib.NET_TIME stTime = msg.stTime; System.out.println(" stTime:" + stTime.toStringTime()); int nChannelID = msg.nChannelID;// 通道号,标识子设备电池,从0开始 System.out.println(" nChannelID:" + nChannelID); break; } case NET_ALARM_POWERFAULT: { // 电源故障事件(对应结构体ALARM_POWERFAULT_INFO) System.out.println(" 电源故障事件--------------------"); ALARM_POWERFAULT_INFO msg = new ALARM_POWERFAULT_INFO(); ToolKits.GetPointerData(pStuEvent, msg); int emPowerType = msg.emPowerType;// 电源类型,详见EM_POWER_TYPE System.out.println(" emPowerType:" + emPowerType); int emPowerFaultEvent = msg.emPowerFaultEvent; // 电源故障事件,详见EM_POWERFAULT_EVENT_TYPE System.out.println(" emPowerFaultEvent:" + emPowerFaultEvent); // 报警事件发生的时间 NetSDKLib.NET_TIME stuTime = msg.stuTime; System.out.println(" stuTime:" + stuTime.toStringTime()); // 0:开始 1:停止 int nAction = msg.nAction; System.out.println(" nAction:" + nAction); break; } case NET_ALARM_CHASSISINTRUDED: {// 机箱入侵(防拆)报警事件(对应结构体ALARM_CHASSISINTRUDED_INFO) System.out.println(" 机箱入侵(防拆)报警事件--------------------"); ALARM_CHASSISINTRUDED_INFO msg = new ALARM_CHASSISINTRUDED_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 0:开始 1:停止 int nAction = msg.nAction; System.out.println(" nAction:" + nAction); // 报警事件发生的时间 NetSDKLib.NET_TIME stuTime = msg.stuTime; System.out.println(" stuTime:" + stuTime); int nChannelID = msg.nChannelID;// 通道号 System.out.println(" nChannelID:" + nChannelID); byte[] szReaderID = msg.szReaderID; System.out.println(" szReaderID:" + new String(szReaderID)); // 事件ID System.out.println(" nEventID:" + msg.nEventID); // 无线设备序列号 System.out.println(" szSN:" + new String(msg.szSN)); int bRealUTC = msg.bRealUTC; System.out.println(" bRealUTC:" + bRealUTC); System.out.println(" RealUTC:" + msg.RealUTC.toString()); // 设备类型,参考EM_ALARM_CHASSISINTRUDED_DEV_TYPE System.out.println(" emDevType:" + msg.emDevType); break; } case NET_ALARM_RF_JAMMING: {// RF干扰事件(对应结构体 NET_ALARM_RF_JAMMING_INFO) System.out.println(" RF干扰事件-----------------------------"); NET_ALARM_RF_JAMMING_INFO msg = new NET_ALARM_RF_JAMMING_INFO(); ToolKits.GetPointerData(pStuEvent, msg); System.out.println(" nAction:" + msg.nAction); System.out.println(" nChannel:" + msg.nChannel); System.out.println(" stuUTC:" + msg.stuUTC); System.out.println(" szDeviceName:" + new String(msg.szDeviceName)); break; } case NET_ALARM_ARMING_FAILURE: { // 布防失败事件(对应结构体 NET_ALARM_ARMING_FAILURE_INFO) System.out.println(" 布防失败事件-----------------------------"); NET_ALARM_ARMING_FAILURE_INFO msg = new NET_ALARM_ARMING_FAILURE_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 通道号 System.out.println(" nChannel:" + msg.nChannel); // 事件发生的时间,标准的(不带时区偏差的)UTC时间 System.out.println(" stuUTC:" + msg.stuUTC.toString()); // 布撤防模式 System.out.println(" emMode:" + msg.emMode); break; } case NET_ALARM_USER_MODIFIED: { // 用户信息被修改(增加、删除、修改)事件(对应结构体 NET_ALARM_USER_MODIFIED_INFO) System.out.println(" 用户信息被修改(增加、删除、修改)事件-----------------------------"); NET_ALARM_USER_MODIFIED_INFO msg = new NET_ALARM_USER_MODIFIED_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 通道号 System.out.println(" nChannel:" + msg.nChannel); // 用户名称 System.out.println(" szUser:" + new String(msg.szUser)); // 操作类型 System.out.println(" emOpType:" + msg.emOpType); // 用户类型 System.out.println(" emUserType:" + msg.emUserType); break; } case NET_ALARM_AREAALARM: {// 区域报警(对应结构体ALARM_AREAALARM_INFO) System.out.println(" 区域报警-----------------------------"); ALARM_AREAALARM_INFO msg = new ALARM_AREAALARM_INFO(); ToolKits.GetPointerData(pStuEvent, msg); int nAreaIndex = msg.nAreaIndex; System.out.println(" nAreaIndex:" + nAreaIndex); System.out.println(" nEventID:" + msg.nEventID); System.out.println(" UTC:" + msg.UTC.toString()); System.out.println(" szName:" + new String(msg.szName)); System.out.println(" emDefenceAreaType:" + msg.emDefenceAreaType); System.out.println(" nIndex:" + msg.nIndex); System.out.println(" emTrigerType:" + msg.emTrigerType); break; } case NET_ALARM_ARC_OFFLINE: { // 报警接收中心离线事件(对应结构体 NET_ALARM_ARC_OFFLINE_INFO) System.out.println(" 报警接收中心离线事件-----------------------------"); NET_ALARM_ARC_OFFLINE_INFO msg = new NET_ALARM_ARC_OFFLINE_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 通道号 System.out.println(" nChannel:" + msg.nChannel); // 事件发生的时间,标准的(不带时区偏差的)UTC时间 System.out.println(" stuUTC:" + msg.stuUTC.toString()); // ARC通讯异常描述信息 System.out.println(" szDetail:" + new String(msg.szDetail)); break; } case NET_ALARM_MANUAL_TEST: { // 手动测试事件(对应结构体 NET_ALARM_MANUAL_TEST_INFO) System.out.println(" 手动测试事件-----------------------------"); NET_ALARM_MANUAL_TEST_INFO msg = new NET_ALARM_MANUAL_TEST_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 通道号 System.out.println(" nChannel:" + msg.nChannel); // 事件发生的时间,标准的(不带时区偏差的)UTC时间 System.out.println(" stuUTC:" + msg.stuUTC.toString()); // 配件序列号 System.out.println(" szSN:" + new String(msg.szSN)); // 配件名称 System.out.println(" szName:" + new String(msg.szName)); // 配件所属区域名称 System.out.println(" szAreaName:" + new String(msg.szAreaName)); break; } case NetSDKLib.NET_ALARM_WIRELESSDEV_POWERLESS: { // 探测器主电丢失事件 (对应结构体 ALARM_WIRELESSDEV_POWERLESS_INFO) System.out.println(" 探测器主电丢失事件-----------------------------"); ALARM_WIRELESSDEV_POWERLESS_INFO msg = new ALARM_WIRELESSDEV_POWERLESS_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 配件序列号 System.out.println(" szSN:" + new String(msg.szSN)); // 配件名称 System.out.println(" szName:" + new String(msg.szName)); // 配件所属区域名称 System.out.println(" szAreaName:" + new String(msg.szAreaName)); break; } case NetSDKLib.NET_ALARM_KEYPAD_LOCK: { // 键盘锁定事件(对应结构体 ALARM_KEYPAD_LOCK_INFO) System.out.println(" 键盘锁定事件(-----------------------------"); ALARM_KEYPAD_LOCK_INFO msg = new ALARM_KEYPAD_LOCK_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 通道号 System.out.println(" nChannel:" + msg.nChannelID); // 事件发生的时间 System.out.println(" stuUTC:" + msg.stuTime.toString()); break; } case NetSDKLib.NET_ALARM_DEVICE_MODIFIED: {// 设备设息修改(增加、删除、修改)事件(对应结构体 NET_ALARM_DEVICE_MODIFIED_INFO) System.out.println(" 手动测试事件----------------------------"); NET_ALARM_DEVICE_MODIFIED_INFO msg = new NET_ALARM_DEVICE_MODIFIED_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 通道号 System.out.println(" nChannel:" + msg.nChannel); // 事件发生的时间,标准的(不带时区偏差的)UTC时间 System.out.println(" stuUTC:" + msg.stuUTC.toString()); break; } case NET_ALARM_ATS_FAULT: {// 报警传输系统故障事件(对应结构体 NET_ALARM_ATS_FAULT_INFO) System.out.println(" 报警传输系统故障事件--------------------------"); NET_ALARM_ATS_FAULT_INFO msg = new NET_ALARM_ATS_FAULT_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 通道号 System.out.println(" nChannel:" + msg.nChannel); // 事件发生的时间,标准的(不带时区偏差的)UTC时间 System.out.println(" stuUTC:" + msg.stuUTC.toString()); break; } case NET_ALARM_WIFI_FAILURE: { // wifi故障事件(对应结构体 NET_ALARM_WIFI_FAILURE_INFO) System.out.println(" wifi故障事件-----------------------------"); NET_ALARM_WIFI_FAILURE_INFO msg = new NET_ALARM_WIFI_FAILURE_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 事件发生的时间,标准的(不带时区偏差的)UTC时间 System.out.println(" stuUTC:" + msg.stuUTC.toString()); // 配件序列号 System.out.println(" szSN:" + new String(msg.szSN)); // 配件名称 System.out.println(" szName:" + new String(msg.szName)); // wifi故障错误码 1:未知错误;2:无效的网络名称;3:无效的网络口令;4:网络故障 System.out.println(" nErrorCode:" + msg.nErrorCode); // 所属区域信息个数 System.out.println(" nAreaInfoNum:" + msg.nAreaInfoNum); NET_EVENT_AREAR_INFO[] stuAreaInfo = msg.stuAreaInfo; for (int i = 0; i < msg.nAreaInfoNum; i++) { NET_EVENT_AREAR_INFO info = stuAreaInfo[i]; System.out.println(" nIndex:" + info.nIndex); System.out.println(" szName:" + new String(info.szName)); } break; } case NET_ALARM_OVER_TEMPERATURE: { // 超温报警事件(对应结构体 NET_ALARM_OVER_TEMPERATURE_INFO) System.out.println(" 超温报警事件-----------------------------"); NET_ALARM_OVER_TEMPERATURE_INFO msg = new NET_ALARM_OVER_TEMPERATURE_INFO(); ToolKits.GetPointerData(pStuEvent, msg); // 事件动作 0:脉冲 System.out.println(" nAction:" + msg.nAction); // 事件发生的时间,标准的(不带时区偏差的)UTC时间 System.out.println(" stuUTC:" + msg.stuUTC.toString()); // 配件序列号 System.out.println(" szSN:" + new String(msg.szSN)); // 配件名称 System.out.println(" szName:" + new String(msg.szName)); // 超温类型 0:温度恢复正常;1:温度超过下限;2:温度超过上限 System.out.println(" nTemperatureType:" + msg.nTemperatureType); // 所属区域信息个数 System.out.println(" nAreaInfoNum:" + msg.nAreaInfoNum); NET_EVENT_AREAR_INFO[] stuAreaInfo = msg.stuAreaInfo; for (int i = 0; i < msg.nAreaInfoNum; i++) { NET_EVENT_AREAR_INFO info = stuAreaInfo[i]; System.out.println(" nIndex:" + info.nIndex); System.out.println(" szName:" + new String(info.szName)); } break; } default: System.out.println("其他报警事件--------------------" + lCommand); break; } return true; } } /** * 取消订阅报警信息 * */ public void stopListen() { // 停止订阅报警 boolean bRet = netsdk.CLIENT_StopListen(m_hLoginHandle); if (bRet) { System.out.println("取消订阅报警信息."); } } // 网络协议配置 public void getSetDVRIPInfo() { String command = NetSDKLib.CFG_CMD_DVRIP; int channel = 0; CFG_DVRIP_INFO dvrIp = new CFG_DVRIP_INFO(); // 获取 if (ToolKits.GetDevConfig(m_hLoginHandle, channel, command, dvrIp)) { System.out.println("TCP服务端口 : " + dvrIp.nTcpPort); System.out.println("SSL服务端口 :" + dvrIp.nSSLPort); System.out.println("UDP服务端口 :" + dvrIp.nUDPPort); System.out.println("组播端口号 :" + dvrIp.nMCASTPort); // 设置,在获取的基础上设置 if (ToolKits.SetDevConfig(m_hLoginHandle, channel, command, dvrIp)) { System.out.println("Set DVRIP Succeed!"); } else { System.err.println("Set DVRIP Failed!" + netsdk.CLIENT_GetLastError()); } } else { System.err.println("Get DVRIP Failed!" + netsdk.CLIENT_GetLastError()); } } // 修改密码 ,需要先查询用户信息,再进行修改 public void operateUserInfoTypeModifyPwd() { // 先查询用户信息 // 参考UserManagementFrame类的方法CLIENT_QueryUserInfoNew // 新数据 NetSDKLib.USER_INFO_NEW m_userInfoNew = new NetSDKLib.USER_INFO_NEW(); m_userInfoNew.dwRightNum = 20; // m_userInfo.dwRightNum; //权限数 m_userInfoNew.dwID = 1; // 用户ID m_userInfoNew.dwGroupID = 1 + 1; // 用户组ID System.arraycopy("123456".getBytes(), 0, m_userInfoNew.passWord, 0, "123456".getBytes().length); for (int i = 0; i < m_userInfoNew.dwRightNum; i++) { m_userInfoNew.rights[i] = i + 1; } m_userInfoNew.dwFouctionMask = 0x00000001; m_userInfoNew.byIsAnonymous = 0; // 原始 NetSDKLib.USER_INFO_NEW m_userInfoNewEx = new NetSDKLib.USER_INFO_NEW(); m_userInfoNewEx.dwRightNum = 20; // m_userInfo.dwRightNum; //权限数 m_userInfoNewEx.dwID = 1; // 用户ID m_userInfoNewEx.dwGroupID = 1 + 1; // 用户组ID System.arraycopy("admin".getBytes(), 0, m_userInfoNewEx.name, 0, "admin".getBytes().length); System.arraycopy("12345678".getBytes(), 0, m_userInfoNewEx.passWord, 0, "12345678".getBytes().length); for (int i = 0; i < m_userInfoNewEx.dwRightNum; i++) { m_userInfoNewEx.rights[i] = i + 1; } m_userInfoNewEx.dwFouctionMask = 0x00000001; m_userInfoNewEx.byIsAnonymous = 0; m_userInfoNew.write(); m_userInfoNewEx.write(); int nOperateType = EM_OPERATE_USERINFO_TYPE.EM_OPERATE_USERINFO_TYPE_MODIFY_PWD.getValue(); boolean if_hoperateUserInfoNew = netsdk.CLIENT_OperateUserInfoNew(m_hLoginHandle, nOperateType, m_userInfoNew.getPointer(), m_userInfoNewEx.getPointer(), null, 5000); if (if_hoperateUserInfoNew) { System.out.println("修改密码成功!" + new String(m_userInfoNew.passWord)); } else { System.err.printf("Failed!" + String.format("0x%x", netsdk.CLIENT_GetLastError())); } } // 设置布防模式 public void setAlarmRegionInfo() throws UnsupportedEncodingException { NET_IN_SET_ALARMMODE stuInParam = new NET_IN_SET_ALARMMODE(); stuInParam.emArmType = EM_ARM_TYPE.EM_ARM_TYPE_DISARMING.getValue(); String szPwd = "admin123"; System.arraycopy(szPwd.getBytes(), 0, stuInParam.szPwd, 0, szPwd.getBytes().length); stuInParam.nAreaNum = 1; stuInParam.arrAreas[0] = 1; stuInParam.stuDetail.stuArmOption.emSceneMode = NET_EM_SCENE_MODE.NET_EM_SCENE_MODE_INDOOR.getValue(); stuInParam.stuDetail.stuArmOption.emAreaarmTriggerMode = EM_AREAARM_TRIGGERMODE.EM_AREAARM_TRIGGERMODE_KEYPAD .getValue(); stuInParam.stuDetail.stuArmOption.nId = 1; String szName = "test"; System.arraycopy(szName.getBytes(encode), 0, stuInParam.stuDetail.stuArmOption.szName, 0, szName.getBytes(encode).length); String szClientAddress = "192.168.1.1"; System.arraycopy(szClientAddress.getBytes(encode), 0, stuInParam.stuDetail.stuArmOption.szClientAddress, 0, szClientAddress.getBytes(encode).length); stuInParam.write(); NET_OUT_SET_ALARMMODE stOutParam = new NET_OUT_SET_ALARMMODE(); // 布防失败的细节扩展字段 布防个数大于8个使用此字段,pstuFailedDetailEx需要初始化,字段指针对应结构体{ @link // ARM_FAILED_DETAIL_EX}数组 stOutParam.write(); boolean bRet1 = netsdk.CLIENT_SetAlarmRegionInfo(m_hLoginHandle, NET_EM_SET_ALARMREGION_INFO.NET_EM_SET_ALARMREGION_INFO_ARMMODE.getValue(), stuInParam.getPointer(), stOutParam.getPointer(), 5000); if (bRet1) { System.out.println("CLIENT_SetAlarmRegionInfo success\n"); stOutParam.read(); System.out.println(" 布防结果( 0:成功 1:失败 ):"+stOutParam.nArmResult); } else { System.err.printf("CLIENT_SetAlarmRegionInfo fail:" + netsdk.CLIENT_GetLastError()); } } // 报警子系统配置 public void setAlarmSubSystem() throws UnsupportedEncodingException { String command = EM_NEW_CONFIG.CFG_CMD_ALARM_SUBSYSTEM.getValue(); int channel = 0; CFG_ALARM_SUBSYSTEM_INFO info = new CFG_ALARM_SUBSYSTEM_INFO(); // 获取 if (ToolKits.GetDevConfig(m_hLoginHandle, channel, command, info)) { System.out.println("名称 : " + new String(info.szName, encode).trim()); // 设置,在获取的基础上设置 String name = new String(info.szName, encode).trim(); info.szName = new byte[128];// 清空数据 System.arraycopy(name.getBytes(encode), 0, info.szName, 0, name.getBytes(encode).length); if (ToolKits.SetDevConfig(m_hLoginHandle, channel, command, info)) { System.out.println("Set alarmSubSystem Succeed!"); } else { System.err.println("Set alarmSubSystem Failed!" + netsdk.CLIENT_GetLastError()); } } else { System.err.println("Get alarmSubSystem Failed!" + netsdk.CLIENT_GetLastError()); } } // 获取设备状态 public void getUnifiedStatus() { NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS inPut = new NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS(); Pointer paramInputPointer = new Memory(inPut.size()); paramInputPointer.clear(inPut.size()); ToolKits.SetStructDataToPointer(inPut, paramInputPointer, 0); NET_OUT_UNIFIEDINFOCOLLECT_GET_DEVSTATUS outPut = new NET_OUT_UNIFIEDINFOCOLLECT_GET_DEVSTATUS(); Pointer paramOutPointer = new Memory(outPut.size()); paramOutPointer.clear(outPut.size()); ToolKits.SetStructDataToPointer(outPut, paramOutPointer, 0); boolean flg = netsdk.CLIENT_GetUnifiedStatus(m_hLoginHandle, paramInputPointer, paramOutPointer, 5000); if (flg) { ToolKits.GetPointerData(paramOutPointer, outPut); Native.free(Pointer.nativeValue(paramInputPointer)); Pointer.nativeValue(paramInputPointer, 0); System.out.println("获取设备状态成功 "); int emTamperState = outPut.emTamperState; NET_DEVSTATUS_POWER_INFO stuPowerInfo = outPut.stuPowerInfo; System.out.println("emTamperState:" + emTamperState); System.out.println("emPowerType:" + stuPowerInfo.emPowerType); System.out.println("nBatteryPercent:" + stuPowerInfo.nBatteryPercent); System.out.println("emTamperState:" + emTamperState); try { System.out.println("szVersion:" + new String(outPut.szVersion, encode)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } NET_DEVSTATUS_NET_INFO stuNetInfo = outPut.stuNetInfo; System.out.println("nWifiIntensity:" + stuNetInfo.nWifiIntensity); System.out.println("nWifiSignal:" + stuNetInfo.nWifiSignal); System.out.println("nCellulSignal:" + stuNetInfo.nCellulSignal); System.out.println("nCellulIntensity:" + stuNetInfo.nCellulIntensity); System.out.println("emEthState:" + stuNetInfo.emEthState); System.out.println("n3Gflux:" + stuNetInfo.n3Gflux); System.out.println("n3GfluxByTime:" + stuNetInfo.n3GfluxByTime); System.out.println("emWifiState:" + stuNetInfo.emWifiState); System.out.println("emCellularstate:" + stuNetInfo.emCellularstate); System.out.println("nSimNum:" + stuNetInfo.nSimNum); NET_DEVSTATUS_SIM_INFO[] stuSimInfo = stuNetInfo.stuSimInfo; for (int i = 0; i < stuNetInfo.nSimNum; i++) { NET_DEVSTATUS_SIM_INFO sim_info = stuSimInfo[i]; byte byIndex = sim_info.byIndex; int emStatus = sim_info.emStatus; System.out.println("byIndex:" + byIndex); System.out.println("emStatus:" + emStatus); } } else { Native.free(Pointer.nativeValue(paramInputPointer)); Pointer.nativeValue(paramInputPointer, 0); System.err.println("获取设备状态失败:" + ToolKits.getErrorCode()); } } // 先获取,再配置 public void generalConfig() { // 获取 String strCmd = NetSDKLib.CFG_CMD_DEV_GENERRAL; int nChn = -1; CFG_DEV_DISPOSITION_INFO msg = new CFG_DEV_DISPOSITION_INFO(); if (ToolKits.GetDevConfig(m_hLoginHandle, nChn, strCmd, msg)) { System.out.println("序列号:" + new String(msg.szMachineName).trim()); // 设置 String name = "4E01D85PAKFC751"; // 因为是先获取的,设置前需要将字段内容清空 for (int i = 0; i < msg.szMachineName.length; i++) { msg.szMachineName[i] = 0; } // 数组拷贝赋值 System.arraycopy(name.getBytes(), 0, msg.szMachineName, 0, name.getBytes().length); if (ToolKits.SetDevConfig(m_hLoginHandle, nChn, strCmd, msg)) { System.out.println("Set General Succeed!"); } else { System.err.println("Set General Failed!" + ToolKits.getErrorCode()); } } else { System.err.println("Get General Failed!" + ToolKits.getErrorCode()); } } // 获取设备序列号 public void getDeviceSerialNo() { NET_IN_GET_DEVICESERIALNO_INFO inPut = new NET_IN_GET_DEVICESERIALNO_INFO(); inPut.write(); NET_OUT_GET_DEVICESERIALNO_INFO outPut = new NET_OUT_GET_DEVICESERIALNO_INFO(); outPut.write(); boolean flg = netsdk.CLIENT_GetDeviceSerialNo(m_hLoginHandle, inPut.getPointer(), outPut.getPointer(), 5000); if (flg) { outPut.read(); System.out.println("获取设备序列号成功 "); System.out.println("序列号: " + new String(outPut.szSN).trim()); } else { System.err.println("获取设备序列号失败:" + ToolKits.getErrorCode()); } } // 获取设备类型 public void getDeviceType() { NET_IN_GET_DEVICETYPE_INFO inPut = new NET_IN_GET_DEVICETYPE_INFO(); inPut.write(); NET_OUT_GET_DEVICETYPE_INFO outPut = new NET_OUT_GET_DEVICETYPE_INFO(); outPut.write(); boolean flg = netsdk.CLIENT_GetDeviceType(m_hLoginHandle, inPut.getPointer(), outPut.getPointer(), 5000); if (flg) { outPut.read(); System.out.println("获取设备类型成功 "); System.out.println("设备类型: " + new String(outPut.szTypeEx).trim()); } else { System.err.println("获取设备类型失败:" + ToolKits.getErrorCode()); } } // 情景模式配置 public void cfgCmdSceneMode() { // 获取 String strCmd = EM_NEW_CONFIG.CFG_CMD_SCENE_MODE.getValue(); int nChn = -1; CFG_SCENE_MODE_INFO msg = new CFG_SCENE_MODE_INFO(); if (ToolKits.GetDevConfig(m_hLoginHandle, nChn, strCmd, msg)) { System.out.println("当前情景模式ID号:" + msg.nCurrentID); // 设置,在获取的基础上设置 if (ToolKits.SetDevConfig(m_hLoginHandle, nChn, strCmd, msg)) { System.out.println("Set cfgCmdSceneMode Succeed!"); } else { System.err.println("Set cfgCmdSceneMode Failed!" + ToolKits.getErrorCode()); } } else { System.err.println("Get cfgCmdSceneMode Failed!" + ToolKits.getErrorCode()); } } // 防蜂鸣联动项使能配置信息配置 public void cfgDisableBeepLinkage() throws UnsupportedEncodingException { // 先获取原先的默认配置 NET_CFG_DISABLE_BEEP_LINKAGE_INFO info = new NET_CFG_DISABLE_BEEP_LINKAGE_INFO(); Pointer pointer = new Memory(info.size()); ToolKits.SetStructDataToPointer(info, pointer, 0); int emCfgOpType = NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_DISABLE_BEEP_LINKAGE; // 配置类型的枚举 boolean ret1 = netsdk.CLIENT_GetConfig(m_hLoginHandle, emCfgOpType, -1, pointer, info.size(), 5000, null); if (!ret1) { System.err.println("获取防蜂鸣联动项使能配置信息失败:" + ToolKits.getErrorCode()); return; } else { System.out.println("获取防蜂鸣联动项使能配置信息成功!"); ToolKits.GetPointerData(pointer, info); System.out.println("开启撤防联动项功能总开关:" + info.bEnable); System.out.println("联动项配置名:" + new String(info.szName, encode)); // 编辑配置并下发 info.bEnable = 1; Pointer param = new Memory(info.size()); ToolKits.SetStructDataToPointer(info, param, 0); boolean ret2 = netsdk.CLIENT_SetConfig(m_hLoginHandle, emCfgOpType, -1, param, info.size(), 5000, new IntByReference(0), null); if (!ret2) { System.err.println("下发防蜂鸣联动项使能配置信息配置失败:" + ToolKits.getErrorCode()); return; } else { System.out.println("下发防蜂鸣联动项使能配置信息配置成功!"); } } } // 通讯录配置 public void cfgNETAPPCommunicationList() throws UnsupportedEncodingException { // 先获取原先的默认配置 NET_NETAPP_COMMUNICATION_LIST_CFG info = new NET_NETAPP_COMMUNICATION_LIST_CFG(); Pointer pointer = new Memory(info.size()); ToolKits.SetStructDataToPointer(info, pointer, 0); int emCfgOpType = NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_DISABLE_BEEP_LINKAGE; // 配置类型的枚举 boolean ret1 = netsdk.CLIENT_GetConfig(m_hLoginHandle, emCfgOpType, -1, pointer, info.size(), 5000, null); if (!ret1) { System.err.println("获取通讯录配置失败:" + ToolKits.getErrorCode()); return; } else { System.out.println("获取通讯录配置成功!"); ToolKits.GetPointerData(pointer, info); System.out.println("实际的通讯录配置个数:" + info.nConmmunicationListNum); // 编辑配置并下发 Pointer param = new Memory(info.size()); ToolKits.SetStructDataToPointer(info, param, 0); boolean ret2 = netsdk.CLIENT_SetConfig(m_hLoginHandle, emCfgOpType, -1, param, info.size(), 5000, new IntByReference(0), null); if (!ret2) { System.err.println("下发通讯录配置失败:" + ToolKits.getErrorCode()); return; } else { System.out.println("下发通讯录配置成功!"); } } } // RPC测试 public void transmitCmd() { NET_IN_TRANSMIT_CMD inPut = new NET_IN_TRANSMIT_CMD(); inPut.nChannel = 1; inPut.nHannel = 0; inPut.bReply = 0; // 此命令需要接收回复,0 - false 1 -true // 命令字节数量 int nMessageCount = 8; int[] pMessageArr = new int[nMessageCount]; pMessageArr[0] = 1; Pointer pMessage = new Memory(pMessageArr.length * 4); pMessage.clear(pMessageArr.length * 4); pMessage.write(0, pMessageArr, 0, pMessageArr.length); inPut.nMessageCount = nMessageCount; inPut.pMessage = pMessage; inPut.write(); NET_OUT_TRANSMIT_CMD outPut = new NET_OUT_TRANSMIT_CMD(); // 用户填写,为pMessage指针所指的数组元素数量 int nMaxMessageCount = 8; int[] nMaxMessageArr = new int[nMaxMessageCount]; Pointer pMaxMessage = new Memory(nMaxMessageArr.length * 4); pMaxMessage.clear(nMaxMessageArr.length * 4); pMaxMessage.write(0, nMaxMessageArr, 0, nMaxMessageArr.length); outPut.nMaxMessageCount = nMaxMessageCount; outPut.pMessage = pMaxMessage; outPut.write(); boolean flg = netsdk.CLIENT_TransmitCmd(m_hLoginHandle, inPut.getPointer(), outPut.getPointer(), 5000); if (flg) { outPut.read(); System.out.println("RPC测试成功 "); } else { System.err.println("RPC测试失败:" + ToolKits.getErrorCode()); } } // 设置配件信息 public void getAndSetAccessoryInfo() { NET_GET_ACCESSORY_INFO info = new NET_GET_ACCESSORY_INFO(); info.nSNNum = 0; info.nMaxInfoNum = 2; NET_WPAN_ACCESSORY_INFO[] wpInfo = new NET_WPAN_ACCESSORY_INFO[info.nMaxInfoNum]; for (int i = 0; i < wpInfo.length; i++) { wpInfo[i] = new NET_WPAN_ACCESSORY_INFO(); } int len = new NET_WPAN_ACCESSORY_INFO().size() * wpInfo.length; Pointer wpInfoPointer = new Memory(len); wpInfoPointer.clear(len); ToolKits.SetStructArrToPointerData(wpInfo, wpInfoPointer); info.pstuInfo = wpInfoPointer; Pointer params = new Memory(info.size()); params.clear(info.size()); ToolKits.SetStructDataToPointer(info, params, 0); IntByReference intRetLen = new IntByReference(0); boolean bRet = netsdk.CLIENT_QueryDevState(m_hLoginHandle, NetSDKLib.NET_DEVSTATE_GET_ACCESSORY_INFO, params, info.size(), intRetLen, 5000); if (bRet) { ToolKits.GetPointerData(params, info); Native.free(Pointer.nativeValue(params)); Pointer.nativeValue(params, 0); System.out.println("CLIENT_QueryDevState success!"); int nInfoNum = info.nInfoNum; System.out.println("nInfoNum:" + nInfoNum); ToolKits.GetPointerDataToStructArr(info.pstuInfo, wpInfo); Native.free(Pointer.nativeValue(wpInfoPointer)); Pointer.nativeValue(wpInfoPointer, 0); for (int i = 0; i < nInfoNum; i++) { NET_WPAN_ACCESSORY_INFO net_wpan_accessory_info = wpInfo[i]; System.out .println("[" + i + "]bArmingWithoutPassword:" + net_wpan_accessory_info.bArmingWithoutPassword); System.out.println("[" + i + "]bRecordEnable:" + net_wpan_accessory_info.bRecordEnable); System.out.println("[" + i + "]bExternalAlarmEnable:" + net_wpan_accessory_info.bExternalAlarmEnable); try { System.out.println("[" + i + "]szSN:" + new String(net_wpan_accessory_info.szSN, encode)); System.out.println("[" + i + "]szName:" + new String(net_wpan_accessory_info.szName, encode)); System.out.println("[" + i + "]szSN:" + new String(net_wpan_accessory_info.szVersion, encode)); System.out.println("[" + i + "]szName:" + new String(net_wpan_accessory_info.szModel, encode)); System.out.println("[" + i + "]szSN:" + new String(net_wpan_accessory_info.szAlarmTone, encode)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } else { Native.free(Pointer.nativeValue(params)); Pointer.nativeValue(params, 0); System.err.println("CLIENT_QueryDevState Failed!" + ToolKits.getErrorCode()); return; } NET_IN_CTRL_LOWRATEWPAN_ACCESSORY_PARAM paramInput = new NET_IN_CTRL_LOWRATEWPAN_ACCESSORY_PARAM(); paramInput.stuInfo = wpInfo[0]; Pointer paramInputPointer = new Memory(paramInput.size()); paramInputPointer.clear(paramInput.size()); ToolKits.SetStructDataToPointer(paramInput, paramInputPointer, 0); boolean flg = netsdk.CLIENT_ControlDevice(m_hLoginHandle, NetSDKLib.CtrlType.CTRL_LOWRATEWPAN_SET_ACCESSORY_PARAM, paramInputPointer, 5000); if (flg) { System.out.println("设置配件信息功能成功"); } else { System.err.println("设置配件信息功能失败:" + ToolKits.getErrorCode()); } Native.free(Pointer.nativeValue(paramInputPointer)); Pointer.nativeValue(paramInputPointer, 0); } // Area布撤防配置 public void cfgAreaArmMode() throws UnsupportedEncodingException { // 先获取原先的默认配置 NET_CFG_AREA_ARM_MODE_INFO info = new NET_CFG_AREA_ARM_MODE_INFO(); Pointer pointer = new Memory(info.size()); ToolKits.SetStructDataToPointer(info, pointer, 0); int emCfgOpType = NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_AREA_ARM_MODE; // 配置类型的枚举 boolean ret1 = netsdk.CLIENT_GetConfig(m_hLoginHandle, emCfgOpType, -1, pointer, info.size(), 5000, null); if (!ret1) { System.err.println("获取Area布撤防配置信息失败:" + ToolKits.getErrorCode()); return; } else { System.out.println("获取Area布撤防配置信息成功!"); ToolKits.GetPointerData(pointer, info); System.out.println(" Area状态信息数量:" + info.nAreasNum); // 编辑配置并下发 Pointer param = new Memory(info.size()); ToolKits.SetStructDataToPointer(info, param, 0); boolean ret2 = netsdk.CLIENT_SetConfig(m_hLoginHandle, emCfgOpType, -1, param, info.size(), 5000, new IntByReference(0), null); if (!ret2) { System.err.println("下发Area布撤防配置失败:" + ToolKits.getErrorCode()); return; } else { System.out.println("下发Area布撤防配置成功!"); } } } // 机箱入侵报警(防拆报警)配置( public void cfgCmdChassisintrusion() { // 获取 String strCmd = EM_NEW_CONFIG.CFG_CMD_CHASSISINTRUSION.getValue(); int nChn = -1; CFG_CHASSISINTRUSION_INFO msg = new CFG_CHASSISINTRUSION_INFO(); if (ToolKits.GetDevConfig(m_hLoginHandle, nChn, strCmd, msg)) { System.out.println("使能开关:" + msg.bEnable); // 设置,在获取的基础上设置 // msg.bEnable =0; if (ToolKits.SetDevConfig(m_hLoginHandle, nChn, strCmd, msg)) { System.out.println("Set CFG_CMD_CHASSISINTRUSION Succeed!"); } else { System.err.println("Set CFG_CMD_CHASSISINTRUSION Failed!" + ToolKits.getErrorCode()); } } else { System.err.println("Get CFG_CMD_CHASSISINTRUSION Failed!" + ToolKits.getErrorCode()); } } /** * 查询设备日志,以分页方式查询 */ public void queryLog() { // 查询条件,作为入参 QUERY_DEVICE_LOG_PARAM param = new QUERY_DEVICE_LOG_PARAM(); // 要查询的日志类型 param.emLogType = EM_SDK_LOG_QUERY_TYPE.DHLOG_ALL.ordinal(); // 通道号 param.nChannelID = 0; // 开始查询的条数 param.nStartNum = 31; // 结束查询的条数,30-1+1=30,查询的条数是30条 param.nEndNum = 60; int logNum = param.nEndNum - param.nStartNum + 1; // 日志数据结构体类型,写0 c层可能校验不通过,建议写1,使用DH_DEVICE_LOG_ITEM_EX作为日志数据的结构体, // 因为c层对出参buffer长度的校验是以DH_DEVICE_LOG_ITEM_EX结构体长度来校验的 // 而DH_DEVICE_LOG_ITEM_EX结构体的长度比DH_DEVICE_LOG_ITEM结构体要长得多 param.nLogStuType = 1; // 要查询的起始时间段 param.stuStartTime = new NET_TIME("2023/1/1/0/0/0"); // 要查询的结束时间段 param.stuEndTime = new NET_TIME("2023/2/20/12/20/23"); // 入参 Pointer queryParam = new Memory(param.size()); ToolKits.SetStructDataToPointer(param, queryParam, 0); // 日志数据结构体 SDK_DEVICE_LOG_ITEM_EX logBuffer = new SDK_DEVICE_LOG_ITEM_EX(); // 出参,分配内存 Pointer pointer = new Memory(logBuffer.size() * logNum); pointer.clear(logBuffer.size() * logNum); // 出参,查询到的日志条数 IntByReference relogNum = new IntByReference(1); boolean bSet = netsdk.CLIENT_QueryDeviceLog(m_hLoginHandle, queryParam, pointer, logBuffer.size() * logNum, relogNum, 3000); System.out.println("get system log is:" + bSet); if (bSet) { System.out.println("返回的log 条数:" + relogNum.getValue()); if (relogNum.getValue() > 0) { SDK_DEVICE_LOG_ITEM_EX[] arrays = (SDK_DEVICE_LOG_ITEM_EX[]) new SDK_DEVICE_LOG_ITEM_EX() .toArray(relogNum.getValue()); ToolKits.GetPointerDataToStructArr(pointer, arrays); for (SDK_DEVICE_LOG_ITEM_EX item : arrays) { String time = item.getDate(); String operator = item.getOperator(Charset.forName("GBK")); String operation = item.getOperation(Charset.forName("GBK")); String log = item.getLog(Charset.forName("GBK")); String detailLog = item.getDetailLog(Charset.forName("GBK")); System.out.println(time + "," + operator + "," + operation + "," + log + "," + detailLog); } } } else { System.out.println("get log error: the error code is " + ToolKits.getErrorCode()); } } private LLong upgradeHandle = new LLong(0); // 升级句柄 // 远程升级 public void startUpgrade() { int emtype = (int) EM_UPGRADE_TYPE.DH_UPGRADE_BIOS_TYPE; String buffer = "D:\\FeiQ\\General_ASI72XX_Chn_P_BSC_V1.000.0000000.8.R.20190423\\General_ASI72XX_Chn_P_BSC_V1.000.0000000.8.R.201904231.bin"; System.err.printf("filePath:[%s]\n", buffer); upgradeHandle = netsdk.CLIENT_StartUpgradeEx(m_hLoginHandle, emtype, buffer, UpgradeCallBackEx.getInstance(), null); if (upgradeHandle.longValue() != 0) { boolean ret = netsdk.CLIENT_SendUpgrade(upgradeHandle); if (ret) { System.out.println("start to uppgrade..."); } else { netsdk.CLIENT_StopUpgrade(upgradeHandle); upgradeHandle.setValue(0); System.err.printf("CLIENT_SendUpgrade Failed ! Last Error[%x]\n", netsdk.CLIENT_GetLastError()); EndTest(); } } else { System.err.printf("CLIENT_StartUpgradeEx Failed ! Last Error[%x]\n", netsdk.CLIENT_GetLastError()); EndTest(); } } // 升级回调,分两个阶段。第一阶段是文件发送,第二阶段是,写flash,既真正去升级。 // 这两个阶段在回调中通过nTotalSize和nSendSize的组合方式去区分。 private static class UpgradeCallBackEx implements NetSDKLib.fUpgradeCallBackEx { private static class UpgradeHolder { private static UpgradeCallBackEx intance = new UpgradeCallBackEx(); } private UpgradeCallBackEx() { } public static UpgradeCallBackEx getInstance() { return UpgradeHolder.intance; } @Override public void invoke(LLong lLoginID, LLong lUpgradechannel, int nTotalSize, int nSendSize, Pointer dwUserData) { if ((-1 == nSendSize) && (0 == nTotalSize)) // 成功 { System.out.printf("Upgrade Success!! \r\n"); } else if ((-2 == nSendSize) && (0 == nTotalSize)) // 升级失败 { System.out.printf("Upgrade Failed!! \r\n"); } else { if (nTotalSize != -1) // 文件传输 进度 { // 计算进度 NumberFormat ss = NumberFormat.getInstance(); ss.setMaximumFractionDigits(2); String result = ss.format((float) nSendSize / (float) nTotalSize * 100); System.out.println("Upgrade file transmite pos:" + result + "%"); } else // 升级进度 { // 进度 System.out.printf("System Upgrade pos:%d !! \r\n", nSendSize); } } } } // 停止远程升级 public void stopUpgrade() { if (upgradeHandle.longValue() != 0) { netsdk.CLIENT_StopUpgrade(upgradeHandle); upgradeHandle.setValue(0); System.out.printf("CLIENT_StopUpgrade upgradeHandle:%d:...", upgradeHandle); } } // 手动测试 public void manualTest() { NET_IN_MANUAL_TEST inPut = new NET_IN_MANUAL_TEST(); // 测试ID,每次下发的测试ID不一样 inPut.dwTestID = 1; // 测试的通道号,可以对应某一个要测试的SIA服务器 inPut.nChannel = 1; inPut.write(); NET_OUT_MANUAL_TEST outPut = new NET_OUT_MANUAL_TEST(); outPut.write(); boolean flg = netsdk.CLIENT_ManualTest(m_hLoginHandle, inPut.getPointer(), outPut.getPointer(), 5000); if (flg) { System.out.println("手动测试成功 "); outPut.read(); // 结果 1:测试成功,结果同步返回 2:发送测试请求成功,结果异步返回 3:测试失败 System.out.println(" nTestResult: " + outPut.nTestResult); } else { System.err.println("手动测试失败:" + ToolKits.getErrorCode()); } } // 添加报警用户 public void addAlarmUser() throws UnsupportedEncodingException { NET_IN_ADD_ALARM_USER stuIn = new NET_IN_ADD_ALARM_USER(); System.arraycopy("2".getBytes(), 0, stuIn.stuAlarmUser.szID, 0, "2".getBytes().length); stuIn.stuAlarmUser.emUserStatus = EM_GETUSERINFOBYCONDITION_USER_STATUS.EM_GETUSERINFOBYCONDITION_USER_STATUS_ACTIVATED .getValue(); System.arraycopy("zhangsan3".getBytes(encode), 0, stuIn.stuAlarmUser.szName, 0, "zhangsan3".getBytes(encode).length); System.arraycopy("2581".getBytes(), 0, stuIn.stuAlarmUser.szPassword, 0, "2581".getBytes().length); stuIn.stuAlarmUser.nAuthorityListNum = 1; stuIn.stuAlarmUser.emAuthorityList[0] = EM_ALARM_USERAUTHORITY.EM_ALARM_USERAUTHORITY_DISARM.getValue(); stuIn.stuAlarmUser.emGroup = EM_ALARM_USER_GROUP.EM_ALARM_USER_GROUP_OPERATOR.getValue(); stuIn.stuAlarmUser.emUserType = EM_GETUSERINFOBYCONDITION_USER_TYPE.EM_GETUSERINFOBYCONDITION_USER_TYPE_KEYPAD .getValue(); stuIn.stuAlarmUser.nInterval = 10; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwYear = 2023; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwMonth = 1; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwDay = 1; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwHour = 0; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwMinute = 0; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwSecond = 0; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwYear = 2023; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwMonth = 12; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwDay = 30; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwHour = 23; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwMinute = 59; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwSecond = 59; System.arraycopy("Memo information".getBytes(encode), 0, stuIn.stuAlarmUser.szMemo, 0, "Memo information".getBytes(encode).length); stuIn.stuAlarmUser.nSubSystemNum = 2; stuIn.stuAlarmUser.nSubSystems[0] = 1; stuIn.stuAlarmUser.nSubSystems[1] = 2; stuIn.stuAlarmUser.nZoneNum = 2; stuIn.stuAlarmUser.nZones[0] = 1; stuIn.stuAlarmUser.nZones[1] = 2; stuIn.stuAlarmUser.stuOneClickArming.bEnable = 1; stuIn.stuAlarmUser.stuOneClickArming.emArmMode = EM_ARM_TYPE.EM_ARM_TYPE_TOTAL_ARMING.getValue(); stuIn.stuAlarmUser.stuOneClickArming.emFunction = EM_ALARM_ONECLICKARMING_FUNCTION.EM_ALARM_ONECLICKARMING_FUNCTION_ONOFF .getValue(); stuIn.stuAlarmUser.stuOneClickArming.emTriggerOption = EM_ALARM_ONECLICKARMING_TRIGGEROPTION.EM_ALARM_ONECLICKARMING_TRIGGEROPTION_IMPULSE .getValue(); stuIn.stuAlarmUser.stuOneClickArming.emArmProfile = NET_EM_SCENE_MODE.NET_EM_SCENE_MODE_OUTDOOR.getValue(); NET_ALARM_USER_EXTERN pUserExtern = new NET_ALARM_USER_EXTERN(); pUserExtern.nCardNum = 0; System.arraycopy("ASDF".getBytes(), 0, pUserExtern.szCard[0].data, 0, "ASDF".getBytes().length); System.arraycopy("QWER".getBytes(), 0, pUserExtern.szCard[1].data, 0, "QWER".getBytes().length); System.arraycopy("2581".getBytes(), 0, pUserExtern.szDuressPassword, 0, "2581".getBytes().length); stuIn.stuAlarmUser.pstuAlarmUserExtern = new Memory(pUserExtern.size()); stuIn.stuAlarmUser.pstuAlarmUserExtern.clear(pUserExtern.size()); ToolKits.SetStructDataToPointer(pUserExtern, stuIn.stuAlarmUser.pstuAlarmUserExtern, 0); stuIn.write(); NET_OUT_ADD_ALARM_USER stuOut = new NET_OUT_ADD_ALARM_USER(); stuOut.write(); boolean flg = netsdk.CLIENT_AddAlarmUser(m_hLoginHandle, stuIn.getPointer(), stuOut.getPointer(), 5000); if (flg) { System.out.println("添加报警用户成功 "); stuOut.read(); } else { System.err.println("添加报警用户失败:" + ToolKits.getErrorCode()); } // 注意:szID、szName、szPassword和szDuressPassword参数不能和已有的重复;暂不支持使用“布防”枚举 } // 修改报警用户 public void modifyAlarmUser() throws UnsupportedEncodingException { NET_IN_MODIFY_ALARM_USER stuIn = new NET_IN_MODIFY_ALARM_USER(); System.arraycopy("43197217421".getBytes(), 0, stuIn.szUserID, 0, "43197217421".getBytes().length);// 这里的ID目前没有支持的协议可以获取,使用的时候先通过其他方式获取再来这填写 System.arraycopy("2".getBytes(), 0, stuIn.stuAlarmUser.szID, 0, "2".getBytes().length); stuIn.stuAlarmUser.emUserStatus = EM_GETUSERINFOBYCONDITION_USER_STATUS.EM_GETUSERINFOBYCONDITION_USER_STATUS_ACTIVATED .getValue(); System.arraycopy("zhangsan4".getBytes(encode), 0, stuIn.stuAlarmUser.szName, 0, "zhangsan4".getBytes(encode).length); System.arraycopy("2582".getBytes(), 0, stuIn.stuAlarmUser.szPassword, 0, "2582".getBytes().length); stuIn.stuAlarmUser.nAuthorityListNum = 1; stuIn.stuAlarmUser.emAuthorityList[0] = EM_ALARM_USERAUTHORITY.EM_ALARM_USERAUTHORITY_DISARM.getValue(); stuIn.stuAlarmUser.emGroup = EM_ALARM_USER_GROUP.EM_ALARM_USER_GROUP_OPERATOR.getValue(); stuIn.stuAlarmUser.emUserType = EM_GETUSERINFOBYCONDITION_USER_TYPE.EM_GETUSERINFOBYCONDITION_USER_TYPE_KEYPAD .getValue(); stuIn.stuAlarmUser.nInterval = 10; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwYear = 2023; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwMonth = 1; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwDay = 1; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwHour = 0; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwMinute = 0; stuIn.stuAlarmUser.stuAccessAllowTimeStart.dwSecond = 0; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwYear = 2023; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwMonth = 12; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwDay = 30; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwHour = 23; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwMinute = 59; stuIn.stuAlarmUser.stuAccessAllowTimeEnd.dwSecond = 59; System.arraycopy("Memo information".getBytes(encode), 0, stuIn.stuAlarmUser.szMemo, 0, "Memo information".getBytes(encode).length); stuIn.stuAlarmUser.nSubSystemNum = 2; stuIn.stuAlarmUser.nSubSystems[0] = 1; stuIn.stuAlarmUser.nSubSystems[1] = 2; stuIn.stuAlarmUser.nZoneNum = 2; stuIn.stuAlarmUser.nZones[0] = 1; stuIn.stuAlarmUser.nZones[1] = 2; stuIn.stuAlarmUser.stuOneClickArming.bEnable = 1; stuIn.stuAlarmUser.stuOneClickArming.emArmMode = EM_ARM_TYPE.EM_ARM_TYPE_TOTAL_ARMING.getValue(); stuIn.stuAlarmUser.stuOneClickArming.emFunction = EM_ALARM_ONECLICKARMING_FUNCTION.EM_ALARM_ONECLICKARMING_FUNCTION_ONOFF .getValue(); stuIn.stuAlarmUser.stuOneClickArming.emTriggerOption = EM_ALARM_ONECLICKARMING_TRIGGEROPTION.EM_ALARM_ONECLICKARMING_TRIGGEROPTION_IMPULSE .getValue(); stuIn.stuAlarmUser.stuOneClickArming.emArmProfile = NET_EM_SCENE_MODE.NET_EM_SCENE_MODE_OUTDOOR.getValue(); NET_ALARM_USER_EXTERN pUserExtern = new NET_ALARM_USER_EXTERN(); pUserExtern.nCardNum = 2; System.arraycopy("ASDF1".getBytes(), 0, pUserExtern.szCard[0].data, 0, "ASDF1".getBytes().length); System.arraycopy("QWER1".getBytes(), 0, pUserExtern.szCard[1].data, 0, "QWER1".getBytes().length); System.arraycopy("2582".getBytes(), 0, pUserExtern.szDuressPassword, 0, "2582".getBytes().length); stuIn.stuAlarmUser.pstuAlarmUserExtern = new Memory(pUserExtern.size()); stuIn.stuAlarmUser.pstuAlarmUserExtern.clear(pUserExtern.size()); ToolKits.SetStructDataToPointer(pUserExtern, stuIn.stuAlarmUser.pstuAlarmUserExtern, 0); stuIn.write(); NET_OUT_MODIFY_ALARM_USER stuout = new NET_OUT_MODIFY_ALARM_USER(); stuout.write(); boolean flg = netsdk.CLIENT_ModifyAlarmUser(m_hLoginHandle, stuIn.getPointer(), stuout.getPointer(), 5000); if (flg) { System.out.println("修改报警用户成功 "); stuout.read(); } else { System.err.println("修改报警用户失败:" + ToolKits.getErrorCode()); } // 注意:szID、szName、szPassword和szDuressPassword参数不能和已有的重复;暂不支持使用“布防”枚举 } // 修改报警用户密码 public void modifyAlarmUserPassword() { NET_IN_MODIFY_ALARM_USER_PASSWORD inPut = new NET_IN_MODIFY_ALARM_USER_PASSWORD(); String szUserID = "43196973290"; // 这里的ID目前没有支持的协议可以获取,使用的时候先通过其他方式获取再来这填写 System.arraycopy(szUserID.getBytes(), 0, inPut.szUserID, 0, szUserID.getBytes().length); System.arraycopy("2590".getBytes(), 0, inPut.szOldPassword, 0, "2590".getBytes().length); System.arraycopy("2591".getBytes(), 0, inPut.szNewPassword, 0, "2591".getBytes().length); inPut.write(); NET_OUT_MODIFY_ALARM_USER_PASSWORD outPut = new NET_OUT_MODIFY_ALARM_USER_PASSWORD(); outPut.write(); boolean flg = netsdk.CLIENT_ModifyAlarmUserPassword(m_hLoginHandle, inPut.getPointer(), outPut.getPointer(), 5000); if (flg) { System.out.println("修改报警用户密码成功 "); outPut.read(); } else { System.err.println("修改报警用户密码失败:" + ToolKits.getErrorCode()); } } // 删除报警用户 public void deleteAlarmUser() { NET_IN_DELETE_ALARM_USER inPut = new NET_IN_DELETE_ALARM_USER(); String szUserID = "43197217421"; // 这里的ID目前没有支持的协议可以获取,使用的时候先通过其他方式获取再来这填写 System.arraycopy(szUserID.getBytes(), 0, inPut.szUserID, 0, szUserID.getBytes().length); inPut.write(); NET_OUT_DELETE_ALARM_USER outPut = new NET_OUT_DELETE_ALARM_USER(); outPut.write(); boolean flg = netsdk.CLIENT_DeleteAlarmUser(m_hLoginHandle, inPut.getPointer(), outPut.getPointer(), 5000); if (flg) { System.out.println("删除报警用户成功 "); outPut.read(); } else { System.err.println("删除报警用户失败:" + ToolKits.getErrorCode()); } } // 网络配置 public void getSetNetWorkInfo() { String command = NetSDKLib.CFG_CMD_NETWORK; int channel = 0; CFG_NETWORK_INFO network = new CFG_NETWORK_INFO(); // 获取 if (ToolKits.GetDevConfig(m_hLoginHandle, channel, command, network)) { System.out.println("主机名称 : " + new String(network.szHostName).trim()); for (int i = 0; i < network.nInterfaceNum; i++) { System.out.println("网络接口名称 : " + new String(network.stuInterfaces[i].szName).trim()); System.out.println("ip地址 : " + new String(network.stuInterfaces[i].szIP).trim()); System.out.println("子网掩码 : " + new String(network.stuInterfaces[i].szSubnetMask).trim()); System.out.println("默认网关 : " + new String(network.stuInterfaces[i].szDefGateway).trim()); System.out.println( "DNS服务器地址 : " + new String(network.stuInterfaces[i].szDnsServersArr[0].szDnsServers).trim() + "\n" + new String(network.stuInterfaces[i].szDnsServersArr[1].szDnsServers).trim()); System.out.println("MAC地址 : " + new String(network.stuInterfaces[i].szMacAddress).trim()); } // 设置,在获取的基础上设置 // String szIp = "172.23.1.101"; // System.arraycopy(szIp.getBytes(), 0, network.stuInterfaces[0].szIP, 0, // szIp.getBytes().length); // 要用数组拷贝 if (ToolKits.SetDevConfig(m_hLoginHandle, channel, command, network)) { System.out.println("Set NETWORK Succeed!"); } else { System.err.println("Set NETWORK Failed!" + netsdk.CLIENT_GetLastError()); } } else { System.err.println("Get NETWORK Failed!" + netsdk.CLIENT_GetLastError()); } } // WLAN配置 public void cfgCmdWlan() { String command = EM_NEW_CONFIG.CFG_CMD_WLAN.getValue(); int channel = -1; CFG_NETAPP_WLAN network = new CFG_NETAPP_WLAN(); // 获取 if (ToolKits.GetDevConfig(m_hLoginHandle, channel, command, network)) { System.out.println("stuWlanInfo有效的WLAN配置个数 : " + network.nNum); // 设置,在获取的基础上设置 if (ToolKits.SetDevConfig(m_hLoginHandle, channel, command, network)) { System.out.println("Set CFG_CMD_WLAN Succeed!"); } else { System.err.println("Set CFG_CMD_WLAN Failed!" + netsdk.CLIENT_GetLastError()); } } else { System.err.println("Get CFG_CMD_WLAN Failed!" + netsdk.CLIENT_GetLastError()); } } // 查询无线网络接入点信息 public void queryWlanAccessPoint() { // 入参 NET_IN_WLAN_ACCESSPOINT pInBuf = new NET_IN_WLAN_ACCESSPOINT(); pInBuf.write(); // 出参 NET_OUT_WLAN_ACCESSPOINT pOutBuf = new NET_OUT_WLAN_ACCESSPOINT(); pOutBuf.write(); boolean flg = netsdk.CLIENT_QueryDevInfo(m_hLoginHandle, NetSDKLib.NET_QUERY_WLAN_ACCESSPOINT, pInBuf.getPointer(), pOutBuf.getPointer(), null, 3000); if (flg) { pOutBuf.read(); System.out.println(" 无线网络接入点个数: " + pOutBuf.nCount); NET_WLAN_ACCESSPOINT_INFO[] stuInfo = pOutBuf.stuInfo; for (int i = 0; i < pOutBuf.nCount; i++) { System.out.println("第" + (i + 1) + "个接入点信息--------"); try { System.out.println(" 无线网络名称: " + new String(stuInfo[i].szSSID, encode)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println(" 信号强度 范围0-100: " + stuInfo[i].nStrength); System.out.println(" 认证模式: " + stuInfo[i].nAuthMode); System.out.println(" nEncrAlgr: " + stuInfo[i].nEncrAlgr); } } else { System.err.println("查询无线网络接入点信息:" + ENUMERROR.getErrorMessage()); } } // 无线网络连接设置 public void cfgCmdWireless() { String command = EM_NEW_CONFIG.CFG_CMD_WIRELESS.getValue(); int channel = -1; CFG_WIRELESS_INFO network = new CFG_WIRELESS_INFO(); // 获取 if (ToolKits.GetDevConfig(m_hLoginHandle, channel, command, network)) { System.out.println("接入的2G网络名称 : " + EM_CFG_APN.getNoteByValue(network.emAPN)); // 设置,在获取的基础上设置 if (ToolKits.SetDevConfig(m_hLoginHandle, channel, command, network)) { System.out.println("Set CFG_CMD_WIRELESS Succeed!"); } else { System.err.println("Set CFG_CMD_WIRELESS Failed!" + netsdk.CLIENT_GetLastError()); } } else { System.err.println("Get CFG_CMD_WIRELESS Failed!" + netsdk.CLIENT_GetLastError()); } } /** * 增加无线设备信息 * * @throws UnsupportedEncodingException */ public void lowrateWpanAdd() throws UnsupportedEncodingException { NET_CTRL_LOWRATEWPAN_ADD info = new NET_CTRL_LOWRATEWPAN_ADD(); info.stuCodeIDInfo.nWirelessId = 123456789; info.stuCodeIDInfo.emType = NET_WIRELESS_DEVICE_TYPE.NET_WIRELESS_DEVICE_TYPE_KEYBOARD.getValue(); String szName = "admin"; System.arraycopy(szName.getBytes(encode), 0, info.stuCodeIDInfo.szName, 0, szName.getBytes(encode).length); info.stuCodeIDInfo.bEnable = 0; String szCustomName = "wifi-7"; System.arraycopy(szCustomName.getBytes(encode), 0, info.stuCodeIDInfo.szCustomName, 0, szCustomName.getBytes(encode).length); info.stuCodeIDInfo.emMode = EM_WIRELESS_DEVICE_MODE.EM_WIRELESS_DEVICE_MODE_NORMAL.getValue(); info.stuCodeIDInfo.emSenseMethod = EM_CODEID_SENSE_METHOD_TYPE.EM_CODEID_SENSE_METHOD_TYPE_MOBILE_SENSOR .getValue(); String szSerialNumber = "No.xxxxx123"; System.arraycopy(szSerialNumber.getBytes(encode), 0, info.stuCodeIDInfo.szSerialNumber, 0, szSerialNumber.getBytes(encode).length); info.stuCodeIDInfo.nTaskID = 5; info.write(); if (!netsdk.CLIENT_ControlDeviceEx(m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_LOWRATEWPAN_ADD, info.getPointer(), null, 3000)) { info.read(); System.err.println("lowrateWpanAdd Failed." + netsdk.CLIENT_GetLastError()); } else { System.out.println("lowrateWpanAdd Success."); } } /** * 修改配件参数 */ public void lowrateSetAccessoryParam() { NET_IN_CTRL_LOWRATEWPAN_ACCESSORY_PARAM info = new NET_IN_CTRL_LOWRATEWPAN_ACCESSORY_PARAM(); // 可以参考getAndSetAccessoryInfo的配置写法 info.write(); if (!netsdk.CLIENT_ControlDeviceEx(m_hLoginHandle, NetSDKLib.CtrlType.CTRL_LOWRATEWPAN_SET_ACCESSORY_PARAM, info.getPointer(), null, 3000)) { info.read(); System.err.println("lowrateSetAccessoryParam Failed." + netsdk.CLIENT_GetLastError()); } else { System.out.println("lowrateSetAccessoryParam Success."); } } /** * 删除指定无线设备 */ public void lowrateWpanRemove() { NET_CTRL_LOWRATEWPAN_REMOVE info = new NET_CTRL_LOWRATEWPAN_REMOVE(); info.nWirelessId = 123456789; info.write(); if (!netsdk.CLIENT_ControlDeviceEx(m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_LOWRATEWPAN_REMOVE, info.getPointer(), null, 3000)) { info.read(); System.err.println("lowrateWpanRemove Failed." + netsdk.CLIENT_GetLastError()); } else { System.out.println("lowrateWpanRemove Success."); } } /** * 删除所有的无线设备信息 */ public void lowrateWpanRemoveAll() { NET_CTRL_LOWRATEWPAN_REMOVEALL info = new NET_CTRL_LOWRATEWPAN_REMOVEALL(); info.write(); if (!netsdk.CLIENT_ControlDeviceEx(m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_LOWRATEWPAN_REMOVEALL, info.getPointer(), null, 3000)) { info.read(); System.err.println("lowrateWpanRemoveAll Failed." + netsdk.CLIENT_GetLastError()); } else { System.out.println("lowrateWpanRemoveAll Success."); } } // 订阅无线对码信息句柄 private NetSDKLib.LLong attachHandle = new NetSDKLib.LLong(0); /** * 订阅无线对码信息接口 */ public void attachLowRateWPAN() { NET_IN_ATTACH_LOWRATEWPAN input = new NET_IN_ATTACH_LOWRATEWPAN(); input.cbAttachLowRateWPANCB = AttachLowRateWPANCB.getInstance(); input.write(); NET_OUT_ATTACH_LOWRATEWPAN outPut = new NET_OUT_ATTACH_LOWRATEWPAN(); outPut.write(); attachHandle = netsdk.CLIENT_AttachLowRateWPAN(m_hLoginHandle, input.getPointer(), outPut.getPointer(), 3000); if (attachHandle.longValue() == 0) { System.err.printf("CLIENT_AttachLowRateWPAN Failed" + ToolKits.getErrorCode()); } else { System.out.printf("CLIENT_AttachLowRateWPAN Success\n"); } } /** * 取消订阅无线对码信息接口 */ public void detachLowRateWPAN() { boolean isSuccess = netsdk.CLIENT_DetachLowRateWPAN(attachHandle); if (isSuccess) { System.out.println(" CLIENT_AttachVideoStatistics Success"); } else { System.err.printf(" CLIENT_AttachVideoStatistics Failed:" + ToolKits.getErrorCode()); } } /** * 对码信息回调函数原形, */ private static class AttachLowRateWPANCB implements NetSDKLib.fAttachLowRateWPANCB { private static AttachLowRateWPANCB instance; public static AttachLowRateWPANCB getInstance() { if (instance == null) { instance = new AttachLowRateWPANCB(); } return instance; } @Override public void invoke(LLong lLoginID, LLong lAttachHandle, Pointer stuBuf, int emError, Pointer dwUser) { // 请不要在回调函数进行耗时操作 System.out.println(" 对码错误类型: " + NET_CODEID_ERROR_TYPE.getNoteByValue(emError)); NetSDKLib.NET_CODEID_INFO msg = new NetSDKLib.NET_CODEID_INFO(); ToolKits.GetPointerData(stuBuf, msg); System.out.println(" 无线ID号:" + msg.nWirelessId); System.out.println(" 无线设备类型:" + msg.emType); System.out.println(" 无线设备序列号:" + new String(msg.szSerialNumber)); System.out.println(" 用户名: " + new String(msg.szName)); } } /******************************** 测试控制台 ***************************************/ // 配置登陆地址,端口,用户名,密码 private String m_strIpAddr = "172.24.104.188"; private int m_nPort = 37777; private String m_strUser = "admin"; private String m_strPassword = "Admin123"; public static void main(String[] args) { GatewayDemo demo = new GatewayDemo(); demo.InitTest(); demo.RunTest(); demo.EndTest(); } /** * 初始化测试 */ public void InitTest() { GatewayDemo.Init(); this.loginWithHighLevel(); } /** * 加载测试内容 */ public void RunTest() { CaseMenu menu = new CaseMenu(); // 6.1.1 通用功能 menu.addItem(new CaseMenu.Item(this, "网络协议配置配置", "getSetDVRIPInfo")); menu.addItem(new CaseMenu.Item(this, "设备密码更改", "operateUserInfoTypeModifyPwd")); // 6.1.2 ROOM与布撤防相关 menu.addItem(new CaseMenu.Item(this, "设置布防模式", "setAlarmRegionInfo")); menu.addItem(new CaseMenu.Item(this, "报警子系统配置", "setAlarmSubSystem")); // 6.1.3网关/设备信息 menu.addItem(new CaseMenu.Item(this, "获取设备状态", "getUnifiedStatus")); menu.addItem(new CaseMenu.Item(this, "普通配置", "generalConfig")); menu.addItem(new CaseMenu.Item(this, "获取设备序列号", "getDeviceSerialNo")); menu.addItem(new CaseMenu.Item(this, "获取设备类型", "getDeviceType")); // 6.1.4网关/设备管理 menu.addItem(new CaseMenu.Item(this, "情景模式配置 ", "cfgCmdSceneMode")); menu.addItem(new CaseMenu.Item(this, "防蜂鸣联动项使能配置信息配置 ", "cfgDisableBeepLinkage")); menu.addItem(new CaseMenu.Item(this, "通讯录配置", "cfgNETAPPCommunicationList")); menu.addItem(new CaseMenu.Item(this, "RPC测试", "transmitCmd")); menu.addItem(new CaseMenu.Item(this, "设置配件信息", "getAndSetAccessoryInfo")); menu.addItem(new CaseMenu.Item(this, "Area布撤防配置 ", "cfgAreaArmMode")); menu.addItem(new CaseMenu.Item(this, "机箱入侵报警(防拆报警)配置 ", "cfgCmdChassisintrusion")); menu.addItem(new CaseMenu.Item(this, "查询设备日志 ", "queryLog")); menu.addItem(new CaseMenu.Item(this, "远程升级", "startUpgrade")); menu.addItem(new CaseMenu.Item(this, "停止远程升级", "stopUpgrade")); // 6.1.5接警中心(SIA功能) menu.addItem(new CaseMenu.Item(this, "手动测试", "manualTest")); // 6.1.6键盘用户、卡片管理 menu.addItem(new CaseMenu.Item(this, "添加报警用户", "addAlarmUser")); menu.addItem(new CaseMenu.Item(this, "修改报警用户", "modifyAlarmUser")); menu.addItem(new CaseMenu.Item(this, "修改报警用户密码", "modifyAlarmUserPassword")); menu.addItem(new CaseMenu.Item(this, "删除报警用户", "deleteAlarmUser")); // 6.1.7 网络设置 menu.addItem(new CaseMenu.Item(this, "有线网络配置", "getSetNetWorkInfo")); menu.addItem(new CaseMenu.Item(this, "WLAN配置", "cfgCmdWlan")); menu.addItem(new CaseMenu.Item(this, "查询无线网络接入点信息", "queryWlanAccessPoint")); menu.addItem(new CaseMenu.Item(this, "无线网络连接设置", "cfgCmdWireless")); // 6.1.8 配件管理与信息展示 menu.addItem(new CaseMenu.Item(this, "配件添加", "lowrateWpanAdd")); menu.addItem(new CaseMenu.Item(this, "修改配件参数", "lowrateSetAccessoryParam")); menu.addItem(new CaseMenu.Item(this, "删除指定无线设备", "lowrateWpanRemove")); menu.addItem(new CaseMenu.Item(this, "删除所有的无线设备信息", "lowrateWpanRemoveAll")); menu.addItem(new CaseMenu.Item(this, "配件信息展示、修改配件参数", "getAndSetAccessoryInfo")); menu.addItem(new CaseMenu.Item(this, "订阅无线对码信息接口", "attachLowRateWPAN")); menu.addItem(new CaseMenu.Item(this, "取消订阅无线对码信息接口", "detachLowRateWPAN")); // 6.1.9 消息推送 menu.addItem(new CaseMenu.Item(this, "订阅报警信息", "startListen")); menu.addItem(new CaseMenu.Item(this, "取消订阅报警信息", "stopListen")); menu.run(); } /** * 结束测试 */ public void EndTest() { System.out.println("End Test"); this.logOut(); // 登出设备 System.out.println("See You..."); GatewayDemo.cleanAndExit(); // 清理资源并退出 } /******************************** 结束 ***************************************/ }