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