From 4c993fcb71b92f8e9837ca8f50f3b5e8f9c59cfe Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期三, 20 一月 2021 19:47:04 +0800
Subject: [PATCH] 2021-01-20 1.更新。2.增加写域名配置操作。

---
 Crabtree/SmartHome/HDL/Common/HDLLinkUtlis.cs                          |  260 ++++++++++++++++++++++---
 Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs |  269 +++++++++++++++-----------
 Crabtree/SmartHome/HDL/Operation/Control.cs                            |    2 
 Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs     |    3 
 Crabtree/.vs/SmartHome/xs/UserPrefs.xml                                |   24 +-
 Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs   |    3 
 Crabtree/SmartHome/HDL/Operation/MyEnum.cs                             |    8 
 7 files changed, 407 insertions(+), 162 deletions(-)

diff --git a/Crabtree/.vs/SmartHome/xs/UserPrefs.xml b/Crabtree/.vs/SmartHome/xs/UserPrefs.xml
index bd66048..49811cc 100644
--- a/Crabtree/.vs/SmartHome/xs/UserPrefs.xml
+++ b/Crabtree/.vs/SmartHome/xs/UserPrefs.xml
@@ -1,27 +1,23 @@
 锘�<Properties StartupConfiguration="{1D83BF28-BA88-4152-BA41-D7EFE90A5437}|Default">
   <MonoDevelop.Ide.ItemProperties.ON.Droid PreferredExecutionTarget="Android.Android_Accelerated_Oreo" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="SmartHome/HDL/Common/HttpUtil/HttpUtil.cs">
-    <Files>
-      <File FileName="SmartHome/HDL/Common/HDLLinkUtlis.cs" Line="56" Column="20" />
-      <File FileName="SmartHome/HDL/Common/HttpUtil/HttpUtil.cs" Line="521" Column="46" />
-    </Files>
+  <MonoDevelop.Ide.Workbench>
     <Pads>
       <Pad Id="ProjectPad">
         <State name="__root__">
-          <Node name="SmartHome" expanded="True">
+          <Node name="SmartHome" expanded="True" selected="True">
             <Node name="ON.Droid" expanded="True" />
-            <Node name="ON.Ios" expanded="True" />
             <Node name="Shared" expanded="True">
               <Node name="HDL" expanded="True">
-                <Node name="Common" expanded="True">
-                  <Node name="HttpUtil" expanded="True">
-                    <Node name="HttpUtil.cs" selected="True" />
-                  </Node>
+                <Node name="Common" expanded="True" />
+                <Node name="Operation" expanded="True">
+                  <Node name="Device" expanded="True" />
                 </Node>
               </Node>
               <Node name="UI" expanded="True">
                 <Node name="SimpleControl" expanded="True">
-                  <Node name="Phone" expanded="True" />
+                  <Node name="Phone" expanded="True">
+                    <Node name="Guide" expanded="True" />
+                  </Node>
                 </Node>
               </Node>
             </Node>
@@ -38,8 +34,8 @@
     <String>IosService/IosService.csproj</String>
     <String>DroidService/DroidService.csproj</String>
   </DisabledProjects>
-  <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|iPhone" />
-  <MonoDevelop.Ide.ItemProperties.ON.Ios PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.00008030-00014C392121802E" />
+  <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|iPhoneSimulator" />
+  <MonoDevelop.Ide.ItemProperties.ON.Ios PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneSimulatorTarget.08FD445C-3EE8-4ED2-BF28-B42ADD0DA92C" />
   <MonoDevelop.Ide.DebuggingService.Breakpoints>
     <BreakpointStore />
   </MonoDevelop.Ide.DebuggingService.Breakpoints>
diff --git a/Crabtree/SmartHome/HDL/Common/HDLLinkUtlis.cs b/Crabtree/SmartHome/HDL/Common/HDLLinkUtlis.cs
index fd49cfb..3671959 100644
--- a/Crabtree/SmartHome/HDL/Common/HDLLinkUtlis.cs
+++ b/Crabtree/SmartHome/HDL/Common/HDLLinkUtlis.cs
@@ -27,6 +27,9 @@
 //        }
 //        #endregion
 
+
+
+
 //        /// <summary>
 //        /// 灏嗗湪绾胯澶囪浆鎹㈡垚sid + 灞炴�у垪琛�
 //        /// </summary>
@@ -51,13 +54,13 @@
 //                }
 //                if (onlineDevice.bytSimpleParam != null && onlineDevice.bytSimpleParam.Length > 0) {
 //                    for (int intI = 0; intI < onlineDevice.bytSimpleParam.Length / 3; intI++) {
-//                        Byte BigType = onlineDevice.bytSimpleParam [0 + intI * 3];
-//                        Byte SmallType = onlineDevice.bytSimpleParam [1 + intI * 3];
+//                        byte BigType = onlineDevice.bytSimpleParam [0 + intI * 3];
+//                        byte SmallType = onlineDevice.bytSimpleParam [1 + intI * 3];
 //                        int Count = onlineDevice.bytSimpleParam [2 + intI * 3];
 //                        if (Count > 0) {
 //                            for (int j = 1; j <= Count; j++) {
 //                                Sid tmpSid = new Sid ();
-//                                tmpSid.sid = HDLSysPF.FormingNewSid (onlineDevice.DeviceType, sOid, j, false, BigType, SmallType);
+//                                tmpSid.sid = HDLSysPF.FormingNewSid (onlineDevice.Type, sOid, j, false, BigType, SmallType);
 //                                tmpSid.oid = sOid;
 
 //                                try {
@@ -181,50 +184,116 @@
 //        /// </summary>
 //        /// <param name="iDeviceType"></param>
 //        /// <returns></returns>
-//        public string FormingNewOid (int iDeviceType)
+//        public string FormingNewOid (DeviceType deviceType)
 //        {
 //            string sOid = "";
 //            try {
+//                //1.鐢熸垚 鍘傚晢 + 閫氳鏂瑰紡 
 //                string sOidBeginsWith = "000101";//鍘傚晢 + 閫氳鏂瑰紡
-
-//                long sTimeSp = HDLSysPF.ConvertDateTimeLong ();
+//                //2.鐢熸垚浜у搧鏃堕棿鎴�
+//                long sTimeSp = ConvertDateTimeLong (); //浠�2020骞�1鏈�1鏃ョ畻鍑虹殑鏃堕棿鎴�0.1s涓哄崟浣�
 //                string sTimeSpan = "";
-//                GateWay.ConvertIntToByteArray (sTimeSp, ref sTimeSpan);
-
+//                ConvertIntToByteArray (sTimeSp, ref sTimeSpan);
 //                if (sTimeSpan.Length != 8) return sOid;
-//                HDLUDP.TimeBetwnNext (10);
-//                sOid = sOidBeginsWith + sTimeSpan;
-//                if (iDeviceType == 00
-//                    || DimmerDeviceTypeList.HDLDimmerDeviceTypeList.Contains (iDeviceType)
-//                 || DMXDeviceTypeList.HDLDMXDeviceTypeList.Contains (iDeviceType))//璋冨厜鍣� 20200730绫�
-//                {
-//                    sOid += "01";
-//                } else if (RelayDeviceTypeList.HDLRelayDeviceTypeList.Contains (iDeviceType))//缁х數鍣ㄧ被
-//                  {
-//                    sOid += "02";
-//                } else if (CurtainDeviceType.HDLCurtainModuleDeviceType.Contains (iDeviceType))//閬槼绫伙紙绐楀笜锛�
-//                  {
-//                    sOid += "03";
-//                } else if (HVACModuleDeviceTypeList.HDLHVACModuleDeviceTypeLists.Contains (iDeviceType) || FloorheatingDeviceTypeList.HDLFloorHeatingDeviceType.Contains (iDeviceType))//鎭掓俯鍣紙绌鸿皟锛�
-//                  {
-//                    sOid += "12";
-//                } else if (AudioDeviceTypeList.AudioBoxDeviceTypeList.Contains (iDeviceType)) {
-//                    sOid += "10";
-//                } else if (Eightin1DeviceTypeList.HDL8in1DeviceType.Contains (iDeviceType)
-//                      || Sevenin1DeviceTypeList.HDL7in1DeviceType.Contains (iDeviceType)
-//                      || Twelvein1DeviceTypeList.HDL12in1DeviceType.Contains (iDeviceType))//浼犳劅鍣ㄧ被
-//                  {
-//                    sOid += "04";
-//                } else {
-//                    sOid += "07"; //缃戝叧浜у搧
-//                }
+//                //寤惰繜10ms
 
+//                //3.鐢熸垚浜у搧绫诲埆
+//                var productType = GetProductType (deviceType);
+//                sOid = sOidBeginsWith + sTimeSpan + productType;
 
 //                return sOid;
 //            } catch {
 //                return sOid;
 //            }
 //        }
+
+//        /// <summary>
+//        /// 鑾峰彇浜у搧绫诲埆
+//        //浜у搧绫诲埆 1byte
+//        //缂栧彿   鎻忚堪
+//		//01	璋冨厜鍣�
+//		//02	缁х數鍣�
+//		//03	骞叉帴鐐规ā鍧�
+//		//04	浼犳劅鍣�
+//		//05	闈㈡澘
+//		//06	RCU
+//		//07	缃戝叧
+//		//08	绾㈠鍙戝皠
+//		//09	Android灞�
+//		//10	鍦烘櫙
+//		//11	闊充箰鎾斁鍣�
+//		//12	232/485杞崲鍣�
+//		//21	鑷姩鍖�
+//        //22	瀹夐槻闃插尯
+//        //14	绐楀笜妯″潡
+//        //15	HVAC
+//        //16	鍦扮儹妯″潡
+//        /// </summary>
+//        /// <param name="deviceType"></param>
+//        /// <returns></returns>
+//        public string GetProductType (DeviceType deviceType)
+//        {
+//            string productType = "";
+//            switch (deviceType) {
+//            case DeviceType.LightDimming:
+//                productType = "01";//01	璋冨厜鍣�
+//                break;
+//            case DeviceType.LightSwitch:
+//                productType = "02";//02 缁х數鍣ㄧ被
+//                break;
+//            case DeviceType.CurtainModel:
+//            case DeviceType.CurtainRoller:
+//            case DeviceType.CurtainTrietex:
+//                productType = "03";//03	閬槼绫伙紙绐楀笜锛�
+//                break;
+//            case DeviceType.SensorWindSpeed:
+//                productType = "04";//04	浼犳劅鍣級
+//                break;
+//            case DeviceType.OnePortWirelessFR:
+//            case DeviceType.OnePortBus:
+//            case DeviceType.RCU:
+//            case DeviceType.SuperWireless:
+//            case DeviceType.OnePortMqttFR:
+//                productType = "07";//07	缃戝叧绫�
+//                break;
+//            case DeviceType.ACPanel:
+//            case DeviceType.ACDevice:
+//            case DeviceType.ACInfrared:
+//            case DeviceType.ACCoolmaster:
+//            case DeviceType.CustomAC:
+//            case DeviceType.HVAC:
+//            case DeviceType.FoolHeat:
+//            case DeviceType.FoolHeatPanel:
+//                productType = "12";//12 鎭掓俯鍣紙绌鸿皟銆佸湴鐑級
+//                break;
+        
+//            }
+
+//            return productType;
+//        }
+
+          
+
+//        /// <summary>
+//        /// 鑾峰彇鐢熸垚鐗╃悊妯″瀷鍙傛暟
+
+//        /// </summary>
+//        /// <param name="deviceType"></param>
+//        /// <returns></returns>
+//        public string GetPhysicalModelType (DeviceType deviceType)
+//        {
+//            string productType = "";
+//            switch (deviceType) {
+//            case DeviceType.LightDimming:
+//                productType = "0101";
+//                break;
+//            }
+
+//            return productType;
+//        }
+        
+
+
 
 //        /// <summary>
 //        /// 鐢熸垚鍔熻兘璁惧Sid
@@ -300,6 +369,33 @@
 //            }
 //        }
 
+//        private long LastTime = 0;
+//        /// <summary>
+//        /// DateTime鏃堕棿鏍煎紡杞崲涓�13浣嶅甫姣鐨刄nix鏃堕棿鎴�
+//        /// </summary>
+//        /// <param name="time"> DateTime鏃堕棿鏍煎紡</param>
+//        /// <returns>Unix鏃堕棿鎴虫牸寮�</returns>
+//        public long ConvertDateTimeLong ()
+//        {
+//            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime (new System.DateTime (2020, 1, 1));
+//            long l = (long)(Math.Round ((DateTime.Now - startTime).TotalSeconds, 1) * 10);
+//            if (l <= LastTime) l = LastTime + 1;
+//            LastTime = l;
+//            return l;
+//        }
+
+//        public bool ConvertIntToByteArray (long m, ref string strTmp)
+//        {
+//            strTmp = "00000000";
+//            byte [] arry = new byte [4];
+//            arry [0] = (byte)(m & 0xFF);
+//            arry [1] = (byte)((m & 0xFF00) >> 8);
+//            arry [2] = (byte)((m & 0xFF0000) >> 16);
+//            arry [3] = (byte)((m & 0xFF000000) >> 24);
+//            strTmp = arry [0].ToString ("X2") + arry [1].ToString ("X2") + arry [2].ToString ("X2") + arry [3].ToString ("X2");
+//            return true;
+//        }
+
 //    }
 
 
@@ -349,7 +445,7 @@
 //    {
 //        public string sid { get; set; }
 //        public string name { get; set; }
-//        public string[] uids { get; set; }
+//        public string [] uids { get; set; }
 //        public string spk { get; set; }
 
 //        public string oid { get; set; }  //璁惧妯″潡鍦板潃
@@ -370,3 +466,97 @@
 //    }
 
 //}
+
+
+////sid缁勬垚閮ㄥ垎锛�
+////sid
+////鏉ユ簮	鍘傚晢浠g爜	閫氳鏂瑰紡	浜у搧鏃堕棿鎴�	浜у搧绫诲埆	鐗╂ā鍨嬬被	閫氶亾鍙�	澶у皬绫诲埆
+////1byte	1byte	1byte	4byte	1byte	2byte	2byte	2byte
+////oid缁勬垚閮ㄥ垎锛�
+////鏉ユ簮	鍘傚晢浠g爜	閫氳鏂瑰紡	浜у搧鏃堕棿鎴�	浜у搧绫诲埆
+////1byte	1 byte	1 byte	4 byte	1byte
+////鍏朵腑鍚勯儴鍒嗕唬鐮佸垪琛細
+////鏉ユ簮	1byte	缂栧彿	鎻忚堪
+////		00	榛樿鍘熺敓鎬佺郴缁熸暟鎹�
+////		01	缃戝叧鎴栬�呭叾浠朅璁惧
+////		02	璋冭瘯杞欢
+////		03	APP搴旂敤绋嬪簭
+////		04	绗笁鏂圭綉鍏虫垨鑰呭钩鍙�
+
+////鍘傚晢浠g爜	1byte	缂栧彿	鎻忚堪
+////		01	HDL
+////		02	
+
+////閫氳鏂瑰紡	1byte	缂栧彿	鎻忚堪
+////		01	HDL Bus
+////		02	Zigbee
+////		03	KNX
+////		04	Z-Wave
+
+////浜у搧鏃堕棿鎴�	4bytes	浠�2020骞�1鏈�1鏃ョ畻鍑虹殑鏃堕棿鎴�0.1s涓哄崟浣�
+
+////浜у搧绫诲埆	1byte	缂栧彿	鎻忚堪
+////		01	璋冨厜鍣�
+////		02	缁х數鍣�
+////		03	骞叉帴鐐规ā鍧�
+////		04	浼犳劅鍣�
+////		05	闈㈡澘
+////		06	RCU
+////		07	缃戝叧
+////		08	绾㈠鍙戝皠
+////		09	Android灞�
+////		10	鍦烘櫙
+////		11	闊充箰鎾斁鍣�
+////		12	232/485杞崲鍣�
+////		21	鑷姩鍖�
+////		22	瀹夐槻闃插尯
+////		14	绐楀笜妯″潡
+////		15	HVAC
+////		16	鍦扮儹妯″潡
+
+////鐗╂ā鍨嬬被鍨�	2bytes	缂栧彿	鎻忚堪
+////		01	寮�鍏崇被	01	寮�鍏�
+////				02	鎻掑骇
+////				03	
+////		02	鐓ф槑	01	寮�鍏�
+////				02	璋冨厜
+////				03	鑹叉俯(CCT)
+////				04	RGB
+////		03	閬槼	01	绐楀笜鎺у埗鍣�
+////				02	鐧惧彾绐�
+////				03	寮�鍚堝笜
+////				04	鍗峰笜
+////				05	聽鎺ㄧ獥鍣�
+////				06	聽鎶曞奖骞�
+////		04	闈㈡澘	01	鎸夐敭闈㈡澘
+////		05	浼犳劅鍣�	01	绉诲姩鎺㈡祴
+////				02	娓╁害浼犳劅鍣�
+////				03	婀垮害浼犳劅鍣�
+////				04	鐓у害浼犳劅鍣�
+////				05	TVOC
+////				06	PM2.5
+////				07	CO2
+////				08	姣背娉紶鎰熷櫒
+////				09	
+////				10	
+////				11	鐑熼浘浼犳劅鍣�
+////				25	骞叉帴鐐�
+////		07	鎭掓俯鍣�	01	绌鸿皟
+////				02	椋庢墖
+////				03	姣涚粏绌鸿皟
+////		08	鍦扮儹	01	鍦扮儹妯″潡
+////		09	鑳屾櫙闊充箰	01	闊充箰鎾斁鍣�
+////				02	Sonos
+////		10	鍦烘櫙	01	鍦烘櫙
+////				02	鐢靛奖鍦烘櫙
+////		19	鏂伴	01	鏂伴
+
+////13	鑳芥簮	01	鐢佃〃
+////				02	姘磋〃
+////				03	鐕冩皵
+////		16	鐢靛櫒	01	椋庢墖
+////				02	TV
+////		20	瀹夐槻	01	瀹夐槻
+////		21	鑷姩鍖�	01	鑷姩鍖�
+////澶х被鍒�	1bytes	锛堥鐣欙級
+////灏忕被鍒�	1byte	锛堥鐣欙級
\ No newline at end of file
diff --git a/Crabtree/SmartHome/HDL/Operation/Control.cs b/Crabtree/SmartHome/HDL/Operation/Control.cs
index 8bbe6cf..e56a814 100644
--- a/Crabtree/SmartHome/HDL/Operation/Control.cs
+++ b/Crabtree/SmartHome/HDL/Operation/Control.cs
@@ -167,6 +167,7 @@
                 case Command.SetGateWayAdminInfoACK:
                 case Command.ReadGateWayLocalEncryptionACK:
                 case Command.SetReadGateWayLocalEncryptionACK:
+                case Command.SetGateWayMqttURLAddressACK:
                 //************************************
                 case Command.ReadGateWayModelInfoACK:
                 case Command.ReadGatewayServerIPACK:
@@ -523,6 +524,7 @@
             case Command.SetGateWayAdminInfo:
             case Command.SetGateWayLocalEncryption:
             case Command.ReadGateWayLocalEncryption:
+            case Command.SetGateWayMqttURLAddress:
             //************************************
             case Command.ReadGateWayModelInfo:
             case Command.ReadGatewayServerIP:
diff --git a/Crabtree/SmartHome/HDL/Operation/MyEnum.cs b/Crabtree/SmartHome/HDL/Operation/MyEnum.cs
index cdcfcab..d58bf05 100644
--- a/Crabtree/SmartHome/HDL/Operation/MyEnum.cs
+++ b/Crabtree/SmartHome/HDL/Operation/MyEnum.cs
@@ -1913,6 +1913,14 @@
         SetGateWayLocalEncryption = 0x303E,
         SetReadGateWayLocalEncryptionACK = 0x303F,
 
+        /// <summary>
+        /// 淇敼缃戝叧杩滅▼杩炴帴鍩熷悕鍦板潃
+        /// </summary>
+        SetGateWayMqttURLAddress = 0x3046,
+        SetGateWayMqttURLAddressACK = 0x3047,
+
+        
+
 
         /// <summary>
         /// 0xF003
diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs
index 49afd5a..79a02cd 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddGateway.cs
@@ -4,6 +4,9 @@
 
 namespace Shared.SimpleControl.Phone
 {
+    /// <summary>
+    /// 鎼滅储鍜屽啓鍔犲瘑缃戝叧銆佺粦瀹氱綉鍏崇殑椤甸潰
+    /// </summary>
     public class GuideAddGateway : FrameLayout
     {
         static GuideAddGateway inView;
diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs
index 9def5f4..4dafb7b 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideAddResidence.cs
@@ -3,6 +3,9 @@
 
 namespace Shared.SimpleControl.Phone
 {
+    /// <summary>
+    /// 浣忓畢鍒楄〃椤甸潰
+    /// </summary>
     public class GuideAddResidence : FrameLayout
     {
         public bool IsHideBack = false;
diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs
index 2f278d8..156c47f 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/Guide/GuideSettingGateway.cs
@@ -157,7 +157,7 @@
                 RemoteSettingWithHDLMQTT ();
             } else {
                 Utlis.WriteLine ("Assign OnePortWirelessFR");
-                RemoteSettingWithOldDevice ();
+                //RemoteSettingWithOldDevice ();
                 //RemoteSettingWithMQTT ();
             }
         }
@@ -602,134 +602,134 @@
 
 
 
-        /// <summary>
-        /// 杩滅▼閰嶇疆
-        /// </summary>
-        void RemoteSettingWithOldDevice ()
-        {
-            byte [] gatewayBytes = null;
-            byte [] serverIPBytes = null;
+        ///// <summary>
+        ///// 杩滅▼閰嶇疆
+        ///// </summary>
+        //void RemoteSettingWithOldDevice ()
+        //{
+        //    byte [] gatewayBytes = null;
+        //    byte [] serverIPBytes = null;
 
-            string [] strServerIP = (MainPage.SeviceIP).Split ('.');
-            string [] strServerIP1 = (MainPage.SeviceIP).Split ('.');
-            MainPage.Loading.Start ("Configuring device...");
-            System.Threading.Tasks.Task.Run (() => {
-                try {
+        //    string [] strServerIP = (MainPage.SeviceIP).Split ('.');
+        //    string [] strServerIP1 = (MainPage.SeviceIP).Split ('.');
+        //    MainPage.Loading.Start ("Configuring device...");
+        //    System.Threading.Tasks.Task.Run (() => {
+        //        try {
 
-                    //var currentRegionIdBytes = new byte [] {
-                    //    (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256 / 256 / 256),
-                    //    (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256 / 256),
-                    //    (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256),
-                    //    (byte)(UserConfig.Instance.CurrentRegion.RegionID % 256),
-                    //};
+        //            //var currentRegionIdBytes = new byte [] {
+        //            //    (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256 / 256 / 256),
+        //            //    (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256 / 256),
+        //            //    (byte)(UserConfig.Instance.CurrentRegion.RegionID / 256),
+        //            //    (byte)(UserConfig.Instance.CurrentRegion.RegionID % 256),
+        //            //};
 
 
 
 
-                    //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID);
+        //            //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID);
 
-                    byte [] RegionIDBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ());
-                    var currentRegionIdBytes = new byte [4];
-                    Array.Copy (RegionIDBytes, 0, currentRegionIdBytes, 0, 4 < RegionIDBytes.Length ? 4 : RegionIDBytes.Length);
+        //            byte [] RegionIDBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ());
+        //            var currentRegionIdBytes = new byte [4];
+        //            Array.Copy (RegionIDBytes, 0, currentRegionIdBytes, 0, 4 < RegionIDBytes.Length ? 4 : RegionIDBytes.Length);
 
-                    gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
-                    serverIPBytes = Control.ControlBytesSendHasReturn (Command.ReadGatewayServerIP, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
+        //            gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
+        //            serverIPBytes = Control.ControlBytesSendHasReturn (Command.ReadGatewayServerIP, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
 
-                    gatewayDeicve.Remote_GroupName = MainPage.LoginUser.AccountString;//UserConfig.Instance.CurrentRegion.RegionName;
-                    gatewayDeicve.Remote_ProjectName = gatewayDeicve.MAC.Replace (".", "");//UserConfig.Instance.CurrentRegion.RegionName;
-                    gatewayDeicve.Remote_UserName = "Admin";
-                    gatewayDeicve.Remote_Password = "c" + MainPage.LoginUser.ID;
-                    byte [] ggn = new byte [20];
-                    byte [] b1 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_GroupName);
-                    gatewayDeicve.Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1);
-                    Array.Copy (b1, 0, ggn, 0, 20 < b1.Length ? 20 : b1.Length);
+        //            gatewayDeicve.Remote_GroupName = MainPage.LoginUser.AccountString;//UserConfig.Instance.CurrentRegion.RegionName;
+        //            gatewayDeicve.Remote_ProjectName = gatewayDeicve.MAC.Replace (".", "");//UserConfig.Instance.CurrentRegion.RegionName;
+        //            gatewayDeicve.Remote_UserName = "Admin";
+        //            gatewayDeicve.Remote_Password = "c" + MainPage.LoginUser.ID;
+        //            byte [] ggn = new byte [20];
+        //            byte [] b1 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_GroupName);
+        //            gatewayDeicve.Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1);
+        //            Array.Copy (b1, 0, ggn, 0, 20 < b1.Length ? 20 : b1.Length);
 
-                    byte [] gpn = new byte [20];
-                    byte [] b2 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_ProjectName);
-                    Array.Copy (b2, 0, gpn, 0, 20 < b2.Length ? 20 : b2.Length);
+        //            byte [] gpn = new byte [20];
+        //            byte [] b2 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_ProjectName);
+        //            Array.Copy (b2, 0, gpn, 0, 20 < b2.Length ? 20 : b2.Length);
 
-                    byte [] gun = new byte [8];
-                    byte [] b3 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_UserName);
-                    Array.Copy (b3, 0, gun, 0, 8 < b3.Length ? 8 : b3.Length);
+        //            byte [] gun = new byte [8];
+        //            byte [] b3 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_UserName);
+        //            Array.Copy (b3, 0, gun, 0, 8 < b3.Length ? 8 : b3.Length);
 
-                    byte [] gpw = new byte [8];
-                    byte [] b4 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_Password);
-                    Array.Copy (b4, 0, gpw, 0, 8 < b4.Length ? 8 : b4.Length);
+        //            byte [] gpw = new byte [8];
+        //            byte [] b4 = CommonPage.MyEncodingGB2312.GetBytes (gatewayDeicve.Remote_Password);
+        //            Array.Copy (b4, 0, gpw, 0, 8 < b4.Length ? 8 : b4.Length);
 
 
-                    byte [] macAddress = Control.ControlBytesSendHasReturn (Command.ReadDeviceMac, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
+        //            byte [] macAddress = Control.ControlBytesSendHasReturn (Command.ReadDeviceMac, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, new byte [] { });
 
-                    gatewayBytes [0] = 2;//杩滅▼鏍囩ず
-                    Array.Copy (ggn, 0, gatewayBytes, 1, 20 < ggn.Length ? 20 : ggn.Length);
-                    Array.Copy (gpn, 0, gatewayBytes, 21, 20 < gpn.Length ? 20 : gpn.Length);
-                    Array.Copy (gun, 0, gatewayBytes, 41, 8 < gun.Length ? 8 : gun.Length);
-                    Array.Copy (gpw, 0, gatewayBytes, 49, 8 < gpw.Length ? 8 : gpw.Length);
+        //            gatewayBytes [0] = 2;//杩滅▼鏍囩ず
+        //            Array.Copy (ggn, 0, gatewayBytes, 1, 20 < ggn.Length ? 20 : ggn.Length);
+        //            Array.Copy (gpn, 0, gatewayBytes, 21, 20 < gpn.Length ? 20 : gpn.Length);
+        //            Array.Copy (gun, 0, gatewayBytes, 41, 8 < gun.Length ? 8 : gun.Length);
+        //            Array.Copy (gpw, 0, gatewayBytes, 49, 8 < gpw.Length ? 8 : gpw.Length);
 
-                    Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes);
+        //            Control.ControlBytesSend (Command.SetGateWayModelInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, gatewayBytes);
 
-                    serverIPBytes [0] = Convert.ToByte (strServerIP [0]);
-                    serverIPBytes [1] = Convert.ToByte (strServerIP [1]);
-                    serverIPBytes [2] = Convert.ToByte (strServerIP [2]);
-                    serverIPBytes [3] = Convert.ToByte (strServerIP [3]);
-                    int point1 = 9999;
+        //            serverIPBytes [0] = Convert.ToByte (strServerIP [0]);
+        //            serverIPBytes [1] = Convert.ToByte (strServerIP [1]);
+        //            serverIPBytes [2] = Convert.ToByte (strServerIP [2]);
+        //            serverIPBytes [3] = Convert.ToByte (strServerIP [3]);
+        //            int point1 = 9999;
 
-                    serverIPBytes [4] = Convert.ToByte (point1 / 256);
-                    serverIPBytes [5] = Convert.ToByte (point1 % 256);
+        //            serverIPBytes [4] = Convert.ToByte (point1 / 256);
+        //            serverIPBytes [5] = Convert.ToByte (point1 % 256);
 
-                    serverIPBytes [6] = Convert.ToByte (strServerIP1 [0]);
-                    serverIPBytes [7] = Convert.ToByte (strServerIP1 [1]);
-                    serverIPBytes [8] = Convert.ToByte (strServerIP1 [2]);
-                    serverIPBytes [9] = Convert.ToByte (strServerIP1 [3]);
-                    int point2 = 9999;
+        //            serverIPBytes [6] = Convert.ToByte (strServerIP1 [0]);
+        //            serverIPBytes [7] = Convert.ToByte (strServerIP1 [1]);
+        //            serverIPBytes [8] = Convert.ToByte (strServerIP1 [2]);
+        //            serverIPBytes [9] = Convert.ToByte (strServerIP1 [3]);
+        //            int point2 = 9999;
 
-                    serverIPBytes [10] = Convert.ToByte (point2 / 256);
-                    serverIPBytes [11] = Convert.ToByte (point2 % 256);
+        //            serverIPBytes [10] = Convert.ToByte (point2 / 256);
+        //            serverIPBytes [11] = Convert.ToByte (point2 % 256);
 
-                    //杩滅▼ip鍦板潃鐨勮缃�
-                    var mobytes = Control.ControlBytesSendHasReturn (Command.SetGateWayModelInternetInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, serverIPBytes);
-                    if (mobytes == null) {
-                        Application.RunOnMainThread (() => {
-                            new Alert ("", ErrorCode.GatewayNoResponse,
-                                       Language.StringByID (R.MyInternationalizationString.Close)).Show ();
-                        });
-                    } else if (mobytes [0] == 0xF5) {
-                        Application.RunOnMainThread (() => {
-                            new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed),
-                                       Language.StringByID (R.MyInternationalizationString.Close)).Show ();
-                        });
-                    } else {
-                        if (gatewayDeicve.Type == DeviceType.OnePortWirelessFR) {
-                            var bindReginIdStatus = Control.ControlBytesSendHasReturn (Command.Write_APP_Data_STORE_1D5E_CMD, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, currentRegionIdBytes);
-                            if (bindReginIdStatus == null) {
-                                Application.RunOnMainThread (() => {
-                                    new Alert ("", ErrorCode.GatewayNoResponse, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
-                                });
-                                return;
-                            } else if (bindReginIdStatus [0] != 0xF8) {
-                                //new Alert ("", "缃戝叧缁戝畾浣忓畢澶辫触锛�", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
-                                Application.RunOnMainThread (() => {
-                                    new Alert ("", "Gateway failed to bind residence!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
-                                });
-                                return;
-                            }
-                        }
-                        GotoHomePage ();
-                    }
-                } catch (Exception ex) {
-                    Utlis.WriteLine (ex.Message);
-                    Application.RunOnMainThread (() => {
-                        new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
-                    });
-                    bool canRemove = false;
-                } finally {
-                    Application.RunOnMainThread (() => {
-                        MainPage.Loading.Hide ();
-                        //this.RemoveAll ();
-                    });
-                }
-            });
-            //Room.InitAllRoom ();
-        }
+        //            //杩滅▼ip鍦板潃鐨勮缃�
+        //            var mobytes = Control.ControlBytesSendHasReturn (Command.SetGateWayModelInternetInfo, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, serverIPBytes);
+        //            if (mobytes == null) {
+        //                Application.RunOnMainThread (() => {
+        //                    new Alert ("", ErrorCode.GatewayNoResponse,
+        //                               Language.StringByID (R.MyInternationalizationString.Close)).Show ();
+        //                });
+        //            } else if (mobytes [0] == 0xF5) {
+        //                Application.RunOnMainThread (() => {
+        //                    new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed),
+        //                               Language.StringByID (R.MyInternationalizationString.Close)).Show ();
+        //                });
+        //            } else {
+        //                if (gatewayDeicve.Type == DeviceType.OnePortWirelessFR) {
+        //                    var bindReginIdStatus = Control.ControlBytesSendHasReturn (Command.Write_APP_Data_STORE_1D5E_CMD, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, currentRegionIdBytes);
+        //                    if (bindReginIdStatus == null) {
+        //                        Application.RunOnMainThread (() => {
+        //                            new Alert ("", ErrorCode.GatewayNoResponse, Language.StringByID (R.MyInternationalizationString.Close)).Show ();
+        //                        });
+        //                        return;
+        //                    } else if (bindReginIdStatus [0] != 0xF8) {
+        //                        //new Alert ("", "缃戝叧缁戝畾浣忓畢澶辫触锛�", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
+        //                        Application.RunOnMainThread (() => {
+        //                            new Alert ("", "Gateway failed to bind residence!", Language.StringByID (R.MyInternationalizationString.Close)).Show ();
+        //                        });
+        //                        return;
+        //                    }
+        //                }
+        //                GotoHomePage ();
+        //            }
+        //        } catch (Exception ex) {
+        //            Utlis.WriteLine (ex.Message);
+        //            Application.RunOnMainThread (() => {
+        //                new Alert ("", Language.StringByID (R.MyInternationalizationString.OperationFailed), Language.StringByID (R.MyInternationalizationString.Close)).Show ();
+        //            });
+        //            bool canRemove = false;
+        //        } finally {
+        //            Application.RunOnMainThread (() => {
+        //                MainPage.Loading.Hide ();
+        //                //this.RemoveAll ();
+        //            });
+        //        }
+        //    });
+        //    //Room.InitAllRoom ();
+        //}
 
 
 
@@ -757,8 +757,11 @@
                     if (SetGateWayModelInfo()) {
                         //2.淇敼绠$悊淇℃伅
                         if (SetGateWayAdminInfo ()) {
-                            //3.鍐欓厤缃垚鍔熷悗涓嬩竴姝ユ搷浣�
-                            GatewaySettingSucceeded ();
+                            //3.鍐橫qtt杩滅▼鍩熷悕鍦板潃
+                            if (SetGateWayMqttUrlAddress ()) {
+                                //4.鍐欓厤缃垚鍔熷悗涓嬩竴姝ユ搷浣�
+                                GatewaySettingSucceeded ();
+                            }
                         }
                     }
 
@@ -846,10 +849,9 @@
         /// <returns></returns>
         bool SetGateWayAdminInfo ()
         {
-            byte [] name = CommonPage.MyEncodingGB2312.GetBytes (MainPage.LoginUser.AccountString);
-            //byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.RegionID);
+            //byte [] name = CommonPage.MyEncodingGB2312.GetBytes (MainPage.LoginUser.AccountString);
+            byte [] name = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.HomeGateway.gatewayId);//甯愬彿鍚嶆敼鎴恎atewayId
             byte [] currentRegionIdBytes = CommonPage.MyEncodingGB2312.GetBytes (UserConfig.Instance.CurrentRegion.Id.ToString ());
-            //var currentRegionIdBytes = Utlis.IntToByteArray (UserConfig.Instance.CurrentRegion.RegionID);
             byte [] adminBytes = new byte [73];
             adminBytes [36] = 1;//浣忓畢鏍囧織浣�
             Array.Copy (name, 0, adminBytes, 0, 36 < name.Length ? 36 : name.Length);
@@ -861,6 +863,47 @@
         }
 
         /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="bytes"></param>
+        /// <returns></returns>
+        private byte GetCheckSum (byte [] bytes)
+        {
+            //byte checksum = 0x00;
+            //foreach (byte bt in bytes) {
+            //    checksum ^= bt;
+            //}
+
+            int iSum = 0;
+            for (int i = 0; i < bytes.Length; i++) {
+                iSum += bytes [i];
+            }
+            return (byte)(0xff & (0x100 - iSum));
+        }
+
+        /// <summary>
+        /// 淇敼Mqtt鍩熷悕鍦板潃
+        /// </summary>
+        /// <returns></returns>
+        bool SetGateWayMqttUrlAddress ()
+        {
+            byte [] utlBytes = new byte [65];
+            var url = new Uri (UserConfig.Instance.CurrentRegion.regionUrl);
+            var host = "";
+            if (url != null) {
+                host = url.Host;
+            }
+            byte [] hostBytes = CommonPage.MyEncodingGB2312.GetBytes (host);
+            Array.Copy (hostBytes, 0, utlBytes, 0, 64 < hostBytes.Length ? 64 : hostBytes.Length);
+            var sum = GetCheckSum (hostBytes);
+            utlBytes [64] = sum;//鏍¢獙浣�
+            byte [] backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayMqttURLAddress, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, utlBytes);
+
+            return CheckIsSuccessfulWithBytes (backBytes, "Failed to modify gateway remote address!");
+        }
+
+
+        /// <summary>
         /// 鍒ゆ柇鏄惁淇鎴愬姛 F8 = 鎴愬姛锛� F5=澶辫触
         /// </summary>
         /// <param name="backBytes"></param>

--
Gitblit v1.8.0