From 071a8328823a2861f93ce556a4da3e4119cab1a3 Mon Sep 17 00:00:00 2001 From: panlili2024 <14743743+panlili2024@user.noreply.gitee.com> Date: 星期四, 19 九月 2024 16:24:28 +0800 Subject: [PATCH] 完成金茂定制功能 --- HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HandleSearch.java | 407 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 297 insertions(+), 110 deletions(-) diff --git a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HandleSearch.java b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HandleSearch.java index f714a60..4fee86d 100644 --- a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HandleSearch.java +++ b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HandleSearch.java @@ -1,16 +1,22 @@ package com.hdl.sdk.ttl.HDLDeviceManger.Core; +import android.util.Log; + import com.hdl.sdk.ttl.Config.Configuration; import com.hdl.sdk.ttl.HDLDeviceManger.Bean.DevicesData; import com.hdl.sdk.ttl.HDLDeviceManger.Bean.RemarkTimes; import com.hdl.sdk.ttl.HDLDeviceManger.Bean.SearchCountBean; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DevicesInfoEvent; +import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.ScenesInfoEvent; import com.hdl.sdk.ttl.Utils.LogUtils.HDLLog; import org.greenrobot.eventbus.EventBus; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Random; +import java.util.Set; import java.util.Timer; import java.util.TimerTask; @@ -19,25 +25,33 @@ */ public class HandleSearch { public static boolean isSearching = true; + public static boolean isSceneSearching = true; public static int curSearchMode = 0; // public static String rcuIp = "";//涓诲姩浼犲叆鐨剅cu ip鍦板潃 // private static Timer getRcuIpTimer = null;//鑾峰彇Rcuip Timer // private static Timer getRcuIpFailorSuccessTimer = null;//鑾峰彇Rcuip Timer public static boolean isGetRcuIp = false; private static boolean isRefreshAllDevicesState = false; + private static boolean isRefreshAllScenesState = false; public static Timer searchTimer = null;//鍙戦�佺涓�娆℃悳绱imer public static Timer searchTwiceTimer = null;//鍙戦�佺浜屾鎼滅储Timer + public static Timer searchByIndexTimer = null;//鍙戦�佽澶囨悳绱imer public static Timer searchFailTimer = null;//鍙戦�佹悳绱㈠け璐imer public static Timer remarkTimer = null;//鎼滅储澶囨敞Timer private static Timer refreshTimer = null; + public static Timer searchSceneTimer = null;//鍙戦�佸満鏅涓�娆℃悳绱imer + public static Timer searchSceneFailTimer = null;//鍙戦�佹悳绱㈠け璐imer + public static Timer remarkSceneTimer = null;//鎼滅储鍦烘櫙澶囨敞Timer private static int curDevSize;//璁板綍璁惧鎬绘暟銆備綔鐢細姣旇緝鎼滅储鍑烘潵鐨勬�昏澶囨暟 + private static int curSceneSize;//璁板綍鍦烘櫙鎬绘暟銆備綔鐢細姣旇緝鎼滅储鍑烘潵鐨勬�诲満鏅暟 public static byte random1 = 0;//闅忔満鏁�1 public static byte random2 = 0;//闅忔満鏁�2 public static final int GET_RCU_DEVICES = 0;//鑾峰彇Rcu妯″潡璁惧 public static final int GET_BUS_DEVICES = 1;//鑾峰彇瀹跺眳妯″潡 璁惧 + public static final int GET_BUS_SCENES = 2;//鑾峰彇瀹跺眳妯″潡 鍦烘櫙 private static final int SEARCH_POINT_TO_POINT = 100;//鐐瑰鐐� private static final int SEARCH_BROACAST = 101;//骞挎挱 @@ -132,22 +146,38 @@ /** + * 鎼滅储缃戝叧 + */ + public static void seachGateway() { + HDLCommand.cusSendCommand(Configuration.SEARCH_GATEWAY_COMMAND, + 255, 255, new byte[]{random1, random2}); + } + + /** * 鍏ㄩ儴閲嶆柊鎼滅储,娓呯┖鍘熻澶囧垪琛ㄦ暟鎹� */ - public static void getHomeDevices() { + public static void getHomeDevices(int subnetID, int deviceID) { bSearchAll = true; curSearchMode = GET_BUS_DEVICES; - searchDevices(GET_BUS_DEVICES, SEARCH_BROACAST, Configuration.PORT);//瀹跺眳鎼滅储 + searchDevices(GET_BUS_DEVICES, SEARCH_POINT_TO_POINT, subnetID, deviceID);//瀹跺眳鎼滅储 } /** * 鍙戠幇鏂拌澶囨悳绱�,涓嶄細娓呯┖鍘熻澶囧垪琛ㄦ暟鎹� * 鍙兘鎼滅储鍙戠幇涓嶅瓨鍦╮ealDevicesDataList閲岄潰鐨勬柊璁惧 */ - public static void getNewHomeDevices() { + public static void getNewHomeDevices(int subnetID, int deviceID) { bSearchAll = false; curSearchMode = GET_BUS_DEVICES; - searchDevices(GET_BUS_DEVICES, SEARCH_BROACAST, Configuration.PORT);//瀹跺眳鎼滅储 + searchDevices(GET_BUS_DEVICES, SEARCH_POINT_TO_POINT, subnetID, deviceID);//瀹跺眳鎼滅储 + } + + /** + * 鎼滅储鍦烘櫙 + */ + public static void seachHomeScenes(int subnetID, int deviceID) { + HDLDeviceManager.scenesDataList.clear(); + searchScenes(subnetID, deviceID); } /** @@ -157,7 +187,7 @@ * @param baseSearchType 鍩虹鎼滅储绫诲瀷 * @param */ - private static void searchDevices(final int searchMode, final int baseSearchType, final int port) { + private static void searchDevices(final int searchMode, final int baseSearchType, final int subnetID, final int deviceID) { isSearching = true; isRefreshAllDevicesState = false; @@ -166,11 +196,15 @@ searchTimer.purge(); searchTimer = null; } - if (searchFailTimer != null) { searchFailTimer.cancel(); searchFailTimer.purge(); searchFailTimer = null; + } + if (searchByIndexTimer != null) { + searchByIndexTimer.cancel(); + searchByIndexTimer.purge(); + searchByIndexTimer = null; } if (remarkTimer != null) { remarkTimer.cancel(); @@ -180,13 +214,14 @@ searchTimer = new Timer(); searchFailTimer = new Timer(); + searchByIndexTimer = new Timer(); int max = 254; int min = 1; random1 = (byte) (new Random().nextInt(max + 1) % (max - min + 1) + min); random2 = (byte) (new Random().nextInt(max + 1) % (max - min + 1) + min); - baseSearch(baseSearchType, port); + baseSearch(baseSearchType, subnetID, deviceID); // 鍒濆鍖栨悳绱㈣秴鏃讹紝5000姣鍚庯紝鏃犳悳绱㈣澶囨暟鎹繑鍥炲垯鎼滅储瓒呮椂 searchFailTimer.schedule(new TimerTask() { @@ -234,57 +269,82 @@ HDLLog.I("鏈夋柊璁惧闃绘柇鍙戦�佹悳绱㈠懡浠�"); } if (HDLDeviceManager.realDevicesDataList.size() == 0) { - baseSearch(baseSearchType, port); + baseSearch(baseSearchType, subnetID, deviceID); } else { curDevSize = HDLDeviceManager.realDevicesDataList.size(); HDLLog.I("鏈夋柊璁惧锛岀户缁瓑寰�500姣"); } } else { - if (searchTwiceTimer == null) { - searchTwiceTimer = new Timer(); - final SearchCountBean bean = new SearchCountBean(); - bean.setCount(0); - searchTwiceTimer.schedule(new TimerTask() { - @Override - public void run() { - if (bean.getCount() < 3) { - HDLLog.I("娌℃湁鏀跺埌鏂拌澶囷紝鍙戦�佺 " + (bean.getCount() + 1) + " 娆℃悳绱㈠懡浠�"); - secondTimeSearch(random1, random2, (bean.getCount() + 1), HDLDeviceManager.realDevicesDataList); - } else { - if (searchTimer != null) { - searchTimer.cancel(); - searchTimer.purge(); - searchTimer = null; + HDLLog.I("缃戝叧璁惧鎬绘暟锛�" + HDLDeviceManager.totalDeviceSize + " 鎺ユ敹鍒扮殑璁惧鎬绘暟锛�" + HDLDeviceManager.realDevicesDataList.size()); + if (HDLDeviceManager.totalDeviceSize != HDLDeviceManager.realDevicesDataList.size()) { + if (searchByIndexTimer != null) { + searchByIndexTimer.schedule(new TimerTask() { + @Override + public void run() { + if (HDLDeviceManager.totalDeviceSize != HDLDeviceManager.realDevicesDataList.size()) { + searchByIndex(HDLDeviceManager.realDevicesDataList, subnetID, deviceID); + } else { + if (searchByIndexTimer != null) { + searchByIndexTimer.cancel(); + searchByIndexTimer.purge(); + searchByIndexTimer = null; + } } - if (searchTwiceTimer != null) { - searchTwiceTimer.cancel(); - searchTwiceTimer.purge(); - searchTwiceTimer = null; - } - - isSearching = false; - HDLLog.I("寮�濮嬭幏鍙栨瘡涓ā鍧楃殑鍥炶矾鐘舵�佷笌澶囨敞"); - getDevRemarks();//寮�濮嬭幏鍙栫涓�澶囨敞锛岄�愪竴鑾峰彇銆� } - bean.setCount(bean.getCount() + 1); - } - }, 1, 800); - } + }, 5000, 5000); + } + } else { + if (searchTwiceTimer == null) { + searchTwiceTimer = new Timer(); + final SearchCountBean bean = new SearchCountBean(); + bean.setCount(0); + searchTwiceTimer.schedule(new TimerTask() { + @Override + public void run() { + if (bean.getCount() < 3) { + HDLLog.I("娌℃湁鏀跺埌鏂拌澶囷紝鍙戦�佺 " + (bean.getCount() + 1) + " 娆℃悳绱㈠懡浠�"); + secondTimeSearch(random1, random2, (bean.getCount() + 1), HDLDeviceManager.realDevicesDataList, subnetID, deviceID); + } else { + if (searchTimer != null) { + searchTimer.cancel(); + searchTimer.purge(); + searchTimer = null; + } + if (searchTwiceTimer != null) { + searchTwiceTimer.cancel(); + searchTwiceTimer.purge(); + searchTwiceTimer = null; + } + if (searchByIndexTimer != null) { + searchByIndexTimer.cancel(); + searchByIndexTimer.purge(); + searchByIndexTimer = null; + } + isSearching = false; + HDLLog.I("寮�濮嬭幏鍙栨瘡涓ā鍧楃殑鍥炶矾鐘舵�佷笌澶囨敞"); + getDevRemarks();//寮�濮嬭幏鍙栫涓�澶囨敞锛岄�愪竴鑾峰彇銆� + } + bean.setCount(bean.getCount() + 1); + } + }, 1, 800); + } + } } } - }, 800, 800); + }, 5000, 5000); } /** * 鍙戦�佺涓�娆℃悳绱� * - * @param type 鎼滅储绫诲瀷 - * @param port 绔彛鍙� + * @param type 鎼滅储绫诲瀷 + * @param subnetID 缃戝叧瀛愮綉鍙� + * @param deviceID 缃戝叧璁惧鍙� */ - private static void baseSearch(int type, int port) { + private static void baseSearch(int type, int subnetID, int deviceID) { // 璁惧鍒楄〃銆佽澶囧娉ㄥ垪琛ㄥ垵濮嬪寲娓呯┖ if (remarkTimer != null) { remarkTimer.cancel(); @@ -298,22 +358,23 @@ HDLDeviceManager.realDevicesDataList.clear(); HDLDeviceManager.listRemarks.clear(); curDevSize = 0; + HDLDeviceManager.totalDeviceSize = 0; } // 鍙戦�佺涓�娆℃悳绱㈠懡浠� switch (type) { case SEARCH_POINT_TO_POINT: - HDLLog.I("鍙戦�佺涓�娆CU鎼滅储"); - HDLCommand.cusSendCommand(Configuration.DEVICES_SEARCH_COMMAND, - 255, 255, new byte[]{random1, random2}); + HDLLog.I("鍙戦�佺涓�娆″灞呮悳绱�"); + HDLCommand.cusSendCommand(Configuration.DEVICES_SEARCH_FROM_GATEWAY_COMMAND, + subnetID, deviceID, new byte[]{random1, random2, 0, 0}); break; case SEARCH_BROACAST: HDLLog.I("鍙戦�佺涓�娆″灞呮悳绱�"); - HDLCommand.cusSendCommand(Configuration.DEVICES_SEARCH_COMMAND, + HDLCommand.cusSendCommand(Configuration.DEVICES_SEARCH_FROM_GATEWAY_COMMAND, 255, 255, new byte[]{random1, random2}); break; case SEARCH_MULTICAST: - HDLCommand.cusSendMulticastCommand(Configuration.DEVICES_SEARCH_COMMAND, + HDLCommand.cusSendMulticastCommand(Configuration.DEVICES_SEARCH_FROM_GATEWAY_COMMAND, 255, 255 , new byte[]{random1, random2}); break; @@ -329,39 +390,23 @@ * @param arg2 闅忔満鏁�2 * @param devicesDataList 鎵�鏈夎澶囦俊鎭泦 */ - public static void secondTimeSearch(byte arg1, byte arg2, int countSend, List<DevicesData> devicesDataList) { + public static void secondTimeSearch(byte arg1, byte arg2, int countSend, List<DevicesData> devicesDataList, int subnetID, int deviceID) { if (devicesDataList == null || devicesDataList.size() == 0) { return; } int devicesCount = 32; int count = devicesDataList.size() / devicesCount; int remainder = devicesDataList.size() % devicesCount; -// HDLLog.I("kkkkcount:"+count+" remainder: "+remainder); if (remainder != 0) { count++; } outter: for (int j = 0; j < count; j++) { - byte[] bytes; - int remainder2; - if (j != count - 1 - || (count == 1 && remainder == 0) - ) { - remainder2 = devicesCount; - } else { - remainder2 = remainder; - } - - bytes = new byte[2 + remainder2 * 2]; + byte[] bytes = new byte[4]; bytes[0] = arg1; bytes[1] = arg2; - for (int k = 0; k < remainder2; k++) { - if ((devicesCount * j + k >= devicesDataList.size()) || ((2 + 2 * k + 1) >= bytes.length)) { - break outter; - } - bytes[2 + 2 * k] = (byte) devicesDataList.get(devicesCount * j + k).getSourceSubnetID(); - bytes[2 + 2 * k + 1] = (byte) devicesDataList.get(devicesCount * j + k).getSourceDeviceID(); - } + bytes[2] = 0; + bytes[3] = 0; String sendData = ""; for (int i = 0; i < bytes.length; i++) { @@ -376,35 +421,111 @@ } } HDLLog.I("绗�" + countSend + "娆″彂閫佺殑鎼滅储鏁版嵁锛�" + sendData); - HDLCommand.cusSendCommand(Configuration.DEVICES_SEARCH_COMMAND, 255, 255, bytes); + HDLCommand.cusSendCommand(Configuration.DEVICES_SEARCH_FROM_GATEWAY_COMMAND, subnetID, deviceID, bytes); } } -// -// /** -// * 杩斿洖璁惧鍒楄〃 -// */ -// public static void deviceListCallBack() { -// byte[] debugBytes = new byte[6 + HDLDeviceManager.devicesDataList.size() * 2]; -// debugBytes[0] = 1; -// debugBytes[1] = 1; -// debugBytes[2] = 1; -// debugBytes[3] = 1; -// debugBytes[4] = 1; -// debugBytes[5] = 1; -// -// for (int i = 0; i < HDLDeviceManager.devicesDataList.size(); i++) { -// debugBytes[6 + i + i] = (byte) HDLDeviceManager.devicesDataList.get(i).getSourceSubnetID(); -// debugBytes[6 + i + i + 1] = (byte) HDLDeviceManager.devicesDataList.get(i).getSourceDeviceID(); -// String device = "绗� " + (i + 1) + " 涓ā鍧楋細妯″潡澶囨敞鍚嶇О锛�" + HDLDeviceManager.devicesDataList.get(i).getRemark() -// + ",瀛愮綉鍙凤細" + HDLDeviceManager.devicesDataList.get(i).getSourceSubnetID() -// + ",璁惧鍙凤細" + HDLDeviceManager.devicesDataList.get(i).getSourceDeviceID() -// + ",鍥炶矾鏁帮細" + HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().size() + "\n"; -// HDLLog.I(device); -// } -//// HDLSerialPortCore.sendTestCMD(debugBytes, HDLTest.SEND_TEST_PORT); -// EventBus.getDefault().post(new DevicesInfoEvent(HDLDeviceManager.devicesDataList, true)); -// } + public static void searchByIndex(List<DevicesData> devicesDataList, int subnetID, int deviceID) { + + HDLLog.I("searchByIndex 缃戝叧璁惧鎬绘暟锛�" + HDLDeviceManager.totalDeviceSize + " 鎺ユ敹鍒扮殑璁惧鎬绘暟锛�" + HDLDeviceManager.realDevicesDataList.size()); + + if (HDLDeviceManager.totalDeviceSize != devicesDataList.size()) { + List<Integer> indexList = new ArrayList<>(); + for (int i = 0; i < devicesDataList.size(); i++) { + DevicesData devicesData = devicesDataList.get(i); + indexList.add(devicesData.getDeviceIndex()); + } + + //鍒涘缓鍖呭惈鎵�鏈夌储寮曠殑闆嗗悎 + Set<Integer> allIndices = new HashSet<>(); + for (int i = 1; i <= HDLDeviceManager.totalDeviceSize; i++) { + allIndices.add(i); + } + //灏唅ndexList杞崲涓洪泦鍚� + Set<Integer> indexSet = new HashSet<>(indexList); + //璁$畻鏈寘鍚殑绱㈠紩 + allIndices.removeAll(indexSet); + //灏嗙粨鏋滆浆鎹负鍒楄〃 + List<Integer> newIndexList = new ArrayList<>(allIndices); + HDLLog.I("鏈寘鍚殑璁惧鎬绘暟锛�" + newIndexList.size() + " 璁惧绱㈠紩锛�" + newIndexList.toString()); + + int max = 254; + int min = 1; + + for (int i = 0; i < newIndexList.size(); i++) { + random1 = (byte) (new Random().nextInt(max + 1) % (max - min + 1) + min); + random2 = (byte) (new Random().nextInt(max + 1) % (max - min + 1) + min); + HDLLog.I("鍙戦�佹悳绱㈣澶囩殑绱㈠紩锛�" + newIndexList.get(i)); + + HDLCommand.cusSendCommand(Configuration.DEVICES_SEARCH_FROM_GATEWAY_COMMAND, + subnetID, deviceID, new byte[]{random1, random2, (byte) (newIndexList.get(i) / 256), (byte) (newIndexList.get(i) % 256)}); + } + } + } + + /** + * 鍒濆鍖栨悳绱㈠満鏅� + * + * @param + */ + private static void searchScenes(int subnetID, int deviceID) { + isSceneSearching = true; + isRefreshAllScenesState = false; + + if (searchSceneTimer != null) { + searchSceneTimer.cancel(); + searchSceneTimer.purge(); + searchSceneTimer = null; + } + + if (searchSceneFailTimer != null) { + searchSceneFailTimer.cancel(); + searchSceneFailTimer.purge(); + searchSceneFailTimer = null; + } + + searchSceneTimer = new Timer(); + searchSceneFailTimer = new Timer(); + + HDLCommand.cusSendCommand(Configuration.SCENE_SEARCH_FROM_GATEWAY_COMMAND, + subnetID, deviceID, new byte[]{0, 0}); + +// 鍒濆鍖栨悳绱㈣秴鏃讹紝5000姣鍚庯紝鏃犳悳绱㈣澶囨暟鎹繑鍥炲垯鎼滅储瓒呮椂 + searchSceneFailTimer.schedule(new TimerTask() { + @Override + public void run() { + if (HDLDeviceManager.scenesDataList.size() == 0) { +// 杩斿洖鎼滅储瓒呮椂 + if (searchSceneTimer != null) { + searchSceneTimer.cancel(); + searchSceneTimer.purge(); + searchSceneTimer = null; + } + EventBus.getDefault().post(new ScenesInfoEvent(false));//涓嶈繘琛屽満鏅悳绱紝鐩存帴鍋滄 + } + } + }, 5000); + + if (searchSceneTimer == null) { + return; + } + searchSceneTimer.schedule(new TimerTask() { + @Override + public void run() { + if (HDLDeviceManager.scenesDataList.size() != 0) { + if (searchSceneTimer != null) { + searchSceneTimer.cancel(); + searchSceneTimer.purge(); + searchSceneTimer = null; + } + + isSceneSearching = false; + HDLLog.I("寮�濮嬭幏鍙栨瘡涓満鏅殑璇︾粏淇℃伅"); + getSceneDetails();//寮�濮嬭幏鍙栫涓�鍦烘櫙锛岄�愪竴鑾峰彇銆� + } + } + }, 1, 800); + } /** * 杩斿洖璁惧鍒楄〃 @@ -414,6 +535,14 @@ EventBus.getDefault().post(new DevicesInfoEvent(HDLDeviceManager.devicesDataList, true)); /**鎼滅储璁惧鎴愬姛锛屾墽琛屼竴娆′繚瀛樺埌鏈湴*/ HDLDeviceManager.saveDevicesDataList(); + } + + /** + * 杩斿洖鍦烘櫙鍒楄〃 + * 2024-01-18 + */ + public static void OnSceneListGetSuccessCallBack() { + EventBus.getDefault().post(new ScenesInfoEvent(HDLDeviceManager.scenesDataList, true)); } @@ -472,7 +601,6 @@ public static void getDevRemarks() { if (remarkTimer != null) { remarkTimer.cancel(); -// remarkTimer.purge(); remarkTimer = null; } if ((HDLDeviceManager.listRemarks != null && HDLDeviceManager.listRemarks.size() == 0) || isSearching) { @@ -482,6 +610,7 @@ } return; } + int pos = -1; for (int i = 0; i < HDLDeviceManager.listRemarks.size(); i++) { if (!HDLDeviceManager.listRemarks.get(i).isCallBack()) { @@ -515,34 +644,24 @@ remarkTimer.schedule(new TimerTask() { @Override public void run() { - if (remarkTimes.getCount() < 3) { + if (remarkTimes.getCount() < 1) { remarkTimes.setCount(remarkTimes.getCount() + 1); if (newPos < HDLDeviceManager.listRemarks.size()) { -// int port = 0; -// String ipAddress = ""; - switch (curSearchMode) { - case HandleSearch.GET_RCU_DEVICES: -// ipAddress = rcuIp; -// port = Configuration.RCU_SEND_PORT; - break; - case HandleSearch.GET_BUS_DEVICES: -// ipAddress = NetWorkUtil.getLocalBroadCast(); -// ipAddress = HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getIpAddress(); -// port = Configuration.PORT; - break; - } HDLLog.I("----->鍙戦�佽幏鍙栧娉ㄥ懡浠ゃ�傚叡" + HDLDeviceManager.listRemarks.size() + "涓ā鍧椼�傜" + newPos + "涓ā鍧椼�傜 " + (HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getChannelNum()) + " 鍥炶矾锛屽瓙缃戝彿锛�" + HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getDeviceSubnetID() + "锛岃澶囧彿锛�" + HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getDeviceDeviceID() + " 绗� " + remarkTimes.getCount() + " 娆�"); - HDLCommand.cusSendCommand(Configuration.DEVICES_READ_COMMAND, - HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getDeviceSubnetID() - , HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getDeviceDeviceID(), + HDLCommand.cusSendCommand(Configuration.DEVICES_READ_FROM_GATEWAY_COMMAND, + HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getSourceSubnetID() + , HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getSourceDeviceID(), new byte[]{ + (byte) HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getDeviceSubnetID(), + (byte) HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getDeviceDeviceID(), + (byte) HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getChannelNum(), (byte) HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getBigType(), (byte) HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getLittleType(), - (byte) HDLDeviceManager.listRemarks.get(newPos).getAppliancesInfo().getChannelNum()}); + }); } } else { @@ -557,4 +676,72 @@ }, 1, 1200); } + + /** + * 鑾峰彇鍦烘櫙璇︽儏 + * + * @param + */ + public static void getSceneDetails() { + if (HDLDeviceManager.scenesDataList.size() == 0) { + return; + } + if (remarkSceneTimer != null) { + remarkSceneTimer.cancel(); + remarkSceneTimer = null; + } + + int pos = -1; + for (int i = 0; i < HDLDeviceManager.scenesDataList.size(); i++) { + if (!HDLDeviceManager.scenesDataList.get(i).isCallBack()) { + pos = i; + break; + } + } + + //鍒ゆ柇鏄惁鑾峰彇鍦烘櫙澶囨敞瀹屽叏锛岃嫢瀹屽叏鍒欒繑鍥炴墍鏈夊満鏅垪琛ㄣ�� + if (HDLDeviceManager.scenesDataList != null && HDLDeviceManager.scenesDataList.size() != 0 && pos == -1) { + HandleSearch.OnSceneListGetSuccessCallBack(); + return; + } + + remarkSceneTimer = new Timer(); + final int newPos = pos; + final RemarkTimes remarkTimes = new RemarkTimes(); + remarkTimes.setCount(0); + + if (remarkSceneTimer == null) { + return; + } + + remarkSceneTimer.schedule(new TimerTask() { + @Override + public void run() { + if (remarkTimes.getCount() < 1) { + remarkTimes.setCount(remarkTimes.getCount() + 1); + if (newPos < HDLDeviceManager.scenesDataList.size()) { + + HDLLog.I("----->鍙戦�佽幏鍙栧娉ㄥ懡浠ゃ�傚叡" + HDLDeviceManager.scenesDataList.size() + "涓満鏅�傜" + + (HDLDeviceManager.scenesDataList.get(newPos).getIndex()) + + "涓満鏅��"); + HDLCommand.cusSendCommand(Configuration.SCENE_READ_FROM_GATEWAY_COMMAND, + HDLDeviceManager.scenesDataList.get(newPos).getSourceSubnetID() + , HDLDeviceManager.scenesDataList.get(newPos).getSourceDeviceID(), + new byte[]{ + (byte) (HDLDeviceManager.scenesDataList.get(newPos).getIndex() / 256), + (byte) (HDLDeviceManager.scenesDataList.get(newPos).getIndex() % 256) + }); + } + } else { + if (HDLDeviceManager.scenesDataList != null + && HDLDeviceManager.scenesDataList.size() != 0 + && newPos < HDLDeviceManager.scenesDataList.size()) { + HDLDeviceManager.scenesDataList.get(newPos).setCallBack(true); + } + getSceneDetails(); + } + + } + }, 1, 2000); + } } -- Gitblit v1.8.0