From 617a02739b82ae30772de25b4f9a8f6e9460f468 Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期三, 12 八月 2020 17:42:36 +0800
Subject: [PATCH] 请合并代码:新增多功能面板一对一绑定机制

---
 ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs                                          |   65 +
 ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs    |   67 +
 ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs~HEAD            |  798 ++++++++++++++++
 ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs |  114 -
 ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs~HEAD                 | 1731 ++++++++++++++++++++++++++++++++++++
 5 files changed, 2,700 insertions(+), 75 deletions(-)

diff --git a/ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs~HEAD b/ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs~HEAD
new file mode 100644
index 0000000..69638eb
--- /dev/null
+++ b/ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs~HEAD
@@ -0,0 +1,798 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using ZigBee.Device;
+using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
+
+namespace Shared.Phone.UserCenter
+{
+    /// <summary>
+    /// 璁惧缁戝畾鐨勯�昏緫
+    /// </summary>
+    public class HdlDeviceBindLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 璁惧缁戝畾鐨勯�昏緫
+        /// </summary>
+        private static HdlDeviceBindLogic m_Current = null;
+        /// <summary>
+        /// 璁惧缁戝畾鐨勯�昏緫
+        /// </summary>
+        public static HdlDeviceBindLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlDeviceBindLogic();
+                }
+                return m_Current;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇璁惧涓嬮潰缁戝畾鐨勮澶嘷____________
+
+        /// <summary>
+        /// 鑾峰彇璁惧涓嬮潰缁戝畾鐨勮澶�(閿欒鏃惰繑鍥瀗ull),杩欎釜鏄粰pir浼犳劅鍣ㄧ敤鐨�
+        /// </summary>
+        /// <param name="mainDevice">璁惧瀵硅薄</param>
+        /// <returns></returns>
+        public List<CommonDevice> GetBindTargetDevice(CommonDevice mainDevice)
+        {
+            var result = this.GetDeviceBindAsync(mainDevice);
+            if (result == null || result.getAllBindResponseData == null)
+            {
+                //鑾峰彇璁惧鐨勭粦瀹氱洰鏍囧け璐�
+                string msg = Language.StringByID(R.MyInternationalizationString.uGetDeviceBindTargetFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+
+                this.ShowErrorMsg(msg);
+                return null;
+            }
+            var listDevice = new List<CommonDevice>();
+            foreach (var data in result.getAllBindResponseData.BindList)
+            {
+                CommonDevice deviceTemp = Common.LocalDevice.Current.GetDevice(data.BindMacAddr, data.BindEpoint);
+                if (deviceTemp == null)
+                {
+                    continue;
+                }
+                listDevice.Add(deviceTemp);
+            }
+            return listDevice;
+        }
+
+        /// <summary>
+        ///鑾峰彇鎵�鏈夌粦瀹�
+        /// </summary>
+        public BindObj.GetDeviceBindResponseAllData GetDeviceBindAsync(CommonDevice device)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                var listBind = ModelData.DeviceModelDataLogic.Current.GetDeviceBindList(device, "Bind/GetDeviceBind");
+                return new BindObj.GetDeviceBindResponseAllData()
+                {
+                    getAllBindResponseData = new BindObj.GetDeviceBindResponseData
+                    {
+                        Result = 0,
+                        BindList = listBind
+                    }
+                };
+            }
+
+            var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5007 } };
+            string sendData = jObject.ToString();
+            //鍙戦��
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/GetDeviceBind", sendData, "Bind/GetDeviceBind_Respon", 6);
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return null;
+            }
+            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.GetDeviceBindResponseData>(result.ReceiptData);
+            return new BindObj.GetDeviceBindResponseAllData() { getAllBindResponseData = tempData };
+        }
+
+        #endregion
+
+        #region 鈻� 鎵ц缁戝畾璁惧鐩爣___________________
+
+        /// <summary>
+        /// 缁戝畾璁惧鐨勭洰鏍�(杩斿洖鎴愬姛璁剧疆鐨勮澶�,閿欒鏃讹紝杩斿洖null)
+        /// </summary>
+        /// <param name="mainDevice">璁惧瀵硅薄</param>
+        /// <param name="listDevice">瑕佺粦瀹氱殑鐩爣璁惧</param>
+        /// <param name="BindCluster">BindCluster</param>
+        /// <returns></returns>
+        public List<CommonDevice> BindDeviceTarget(CommonDevice mainDevice, List<CommonDevice> listDevice, int BindCluster = 6)
+        {
+            if (listDevice.Count == 0)
+            {
+                return new List<CommonDevice>();
+            }
+
+            var dicDevice = new Dictionary<string, CommonDevice>();
+
+            //缁勮鏁版嵁
+            var addData = new IASZone.AddBindData();
+            addData.DeviceAddr = mainDevice.DeviceAddr;
+            addData.Epoint = mainDevice.DeviceEpoint;
+            foreach (var device in listDevice)
+            {
+                var info = new IASZone.AddBindListObj();
+                info.BindCluster = BindCluster;
+                info.BindMacAddr = device.DeviceAddr;
+                info.BindEpoint = device.DeviceEpoint;
+                info.BindType = 0;
+
+                addData.BindList.Add(info);
+
+                //杩斿洖鎴愬姛璁惧鐨勬椂鍊欎娇鐢�
+                string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
+                dicDevice[mainkeys] = device;
+            }
+            //鎵ц缁戝畾
+            var result = this.AddDeviceBindAsync(addData);
+            if (result == null || result.addedDeviceBindResponseData == null)
+            {
+                //缁戝畾鐩爣璁剧疆澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+
+                this.ShowErrorMsg(msg);
+                return null;
+            }
+
+            var listSuccess = new List<CommonDevice>();
+            foreach (var data in result.addedDeviceBindResponseData.BindList)
+            {
+                string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.BindMacAddr, data.BindEpoint);
+                if (dicDevice.ContainsKey(mainkeys) == true)
+                {
+                    listSuccess.Add(dicDevice[mainkeys]);
+                }
+            }
+
+            if (listSuccess.Count == 0)
+            {
+                //缁戝畾鐩爣璁剧疆澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail);
+                this.ShowTipMsg(msg);
+            }
+            return listSuccess;
+        }
+
+        /// <summary>
+        ///璁惧缁戝畾
+        /// </summary>
+        public BindObj.AddedDeviceBindResponseAllData AddDeviceBindAsync(BindObj.AddBindData addBindData)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                return ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind");
+            }
+
+            var device = Common.LocalDevice.Current.GetDevice(addBindData.DeviceAddr, addBindData.Epoint);
+            //鑾峰彇鍙戦�佺殑鍛戒护瀛楃
+            var sendData = this.GetAddDeviceListBindCommandText(addBindData);
+            //鍙戦��
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/SetBind", sendData, "Bind/SetBind_Respon", 20);
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return null;
+            }
+
+            //淇敼缂撳瓨
+<<<<<<< HEAD:ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs
+            ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind");
+
+            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.AddedDeviceBindResponseData>(result.ReceiptData);
+            return new BindObj.AddedDeviceBindResponseAllData() { addedDeviceBindResponseData = tempData };
+        }
+
+=======
+            TemplateData.TemplateDeviceDataLogic.Current.AddDeviceBindList(addBindData, result.JsonData[0]);
+            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.AddedDeviceBindResponseData>(result.ReceiptData);
+            return new BindObj.AddedDeviceBindResponseAllData() { addedDeviceBindResponseData = tempData };
+        }
+
+>>>>>>> dev-tzy:ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs
+        /// <summary>
+        ///璁惧缁戝畾銆愪竴瀵逛竴 缁戝畾锛屼竴涓寜閿洖璺彧鑳界粦瀹氫竴涓澶囥��
+        /// </summary>
+        public BindObj.AddedDeviceBindResponseAllData AddDeviceSingleBindAsync(BindObj.AddBindData addBindData)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                return ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind");
+            }
+
+            var device = Common.LocalDevice.Current.GetDevice(addBindData.DeviceAddr, addBindData.Epoint);
+            //鑾峰彇鍙戦�佺殑鍛戒护瀛楃
+            var sendData = this.GetAddDeviceListBindCommandText(addBindData);
+            //鍙戦�� 
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/SetSingleBind", sendData, "Bind/SetSingleBind_Respon", 20);
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return null;
+            }
+<<<<<<< HEAD:ZigbeeApp20200810/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs
+
+            //淇敼缂撳瓨
+            ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind");
+=======
+            //淇敼缂撳瓨
+            TemplateData.TemplateDeviceDataLogic.Current.AddDeviceBindList(addBindData, result.JsonData[0]);
+>>>>>>> dev-tzy:ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs
+
+            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.AddedDeviceBindResponseData>(result.ReceiptData);
+            return new BindObj.AddedDeviceBindResponseAllData() { addedDeviceBindResponseData = tempData };
+        }
+
+        /// <summary>
+        /// 鑾峰彇娣诲姞璁惧缁戝畾鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <param name="addBindData"></param>
+        /// <returns></returns>
+        public string GetAddDeviceListBindCommandText(BindObj.AddBindData addBindData)
+        {
+            var jObject = new JObject { { "DeviceAddr", addBindData.DeviceAddr }, { "Epoint", addBindData.Epoint }, { "Cluster_ID", 0 }, { "Command", 5001 } };
+            var bindList = new JArray { };
+            foreach (var bindInfo in addBindData.BindList)
+            {
+                if (bindInfo.BindType == 0)
+                {
+                    var dInfo = new JObject{{ "BindMacAddr",bindInfo.BindMacAddr},{ "BindEpoint", bindInfo.BindEpoint} ,
+                            { "BindCluster", bindInfo.BindCluster} ,{ "BindType",bindInfo.BindType}};
+                    bindList.Add(dInfo);
+                }
+                else if (bindInfo.BindType == 1)
+                {
+                    var dInfo = new JObject{{ "BindCluster", bindInfo.BindCluster} ,{ "BindType",bindInfo.BindType},
+                            { "BindScenesId", bindInfo.BindScenesId}};
+                    bindList.Add(dInfo);
+                }
+            }
+            var data = new JObject { { "BindName", addBindData.BindName }, { "BindList", bindList } };
+            jObject.Add("Data", data);
+            return jObject.ToString();
+        }
+
+        #endregion
+
+        #region 鈻� 鍒犻櫎璁惧缁戝畾鐨勭洰鏍嘷________________
+
+        /// <summary>
+        /// 鍒犻櫎璁惧缁戝畾鐨勭洰鏍�
+        /// </summary>
+        /// <param name="mainDevice">璁惧瀵硅薄</param>
+        /// <param name="deleteDevice">瑕佸垹闄ょ殑缁戝畾鐩爣璁惧</param>
+        /// <param name="BindCluster">BindCluster</param>
+        /// <returns></returns>
+        public bool DeleteDeviceTarget(CommonDevice mainDevice, CommonDevice deleteDevice, int BindCluster = 6)
+        {
+            //缁勮鏁版嵁
+            var deleteData = new IASZone.DelDeviceBindData();
+            deleteData.DeviceAddr = mainDevice.DeviceAddr;
+            deleteData.Epoint = mainDevice.DeviceEpoint;
+
+            var info = new IASZone.RemoveBindListObj();
+            info.BindCluster = BindCluster;
+            info.BindMacAddr = deleteDevice.DeviceAddr;
+            info.BindEpoint = deleteDevice.DeviceEpoint;
+            info.BindType = 0;
+
+            deleteData.RemoveBindList.Add(info);
+
+            //鎵ц鍒犻櫎
+            var result = this.DelDeviceBindAsync(deleteData);
+            if (result == null || result.delDeviceBindResponseData == null)
+            {
+                //鍒犻櫎缁戝畾鐩爣澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+
+                this.ShowErrorMsg(msg);
+                return false;
+            }
+
+            foreach (var data in result.delDeviceBindResponseData.RemoveBindList)
+            {
+                //0:鎴愬姛  1:璁惧涓嶅湪缁戝畾鍒楄〃涓� 锛屼篃鍙互浠h〃鎴愬姛
+                if (data.Result == 0 || data.Result == 1 || data.Result == 5)
+                {
+                    return true;
+                }
+                //3:澶辫触锛屽湪绛夊緟鑺傜偣璁惧纭鏄惁瑙i櫎缁戝畾鎴愬姛
+                else if (data.Result == 3)
+                {
+                    //鍏朵粬缁戝畾鐩爣姝e湪鍒犻櫎涓紝璇风◢鍚庡啀璇�
+                    string msg = Language.StringByID(R.MyInternationalizationString.uOtherBindTargetsIsDelettingPleaseWait);
+                    this.ShowErrorMsg(msg);
+                    return false;
+                }
+                //2锛氭湭鐭ワ紝鐢辫妭鐐硅澶囧弽棣堝彂閫佲�淏ind/BindResult鈥濅富棰樻秷鎭‘瀹氭槸鍚︽垚鍔�
+                else if (data.Result == 2)
+                {
+                    if (result.removeBindResultResponseData == null)
+                    {
+                        //鍒犻櫎缁戝畾鐩爣澶辫触
+                        string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
+                        this.ShowErrorMsg(msg);
+                        return false;
+                    }
+                    else
+                    {
+                        //鎴愬姛
+                        if (result.removeBindResultResponseData.Result == 0)
+                        {
+                            return true;
+                        }
+                        //136锛氭帶鍒惰澶囨湰鍦扮粦瀹氬垪琛ㄤ腑鏃犳缁戝畾
+                        else if (result.removeBindResultResponseData.Result == 136)
+                        {
+                            //杩欎釜鍙互褰撳仛鎴愬姛
+                            return true;
+                        }
+                        else
+                        {
+                            //鍒犻櫎缁戝畾鐩爣澶辫触
+                            string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
+                            this.ShowErrorMsg(msg);
+                            return false;
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎璁惧缁戝畾鐨勭洰鏍�
+        /// </summary>
+        /// <param name="mainDevice">璁惧瀵硅薄</param>
+        /// <param name="listDeleteDevice">瑕佸垹闄ょ殑缁戝畾鐩爣璁惧</param>
+        /// <param name="BindCluster">BindCluster</param>
+        /// <returns>杩斿洖鐨勬槸鎴愬姛鍒犻櫎鐨勮澶�</returns>
+        public List<CommonDevice> DeleteDeviceTarget(CommonDevice mainDevice, List<CommonDevice> listDeleteDevice, int BindCluster = 6)
+        {
+            //缁勮鏁版嵁
+            var deleteData = new IASZone.DelDeviceBindData();
+            deleteData.DeviceAddr = mainDevice.DeviceAddr;
+            deleteData.Epoint = mainDevice.DeviceEpoint;
+
+            var dicDevice = new Dictionary<string, CommonDevice>();
+            foreach (var device in listDeleteDevice)
+            {
+                var info = new IASZone.RemoveBindListObj();
+                info.BindCluster = BindCluster;
+                info.BindMacAddr = device.DeviceAddr;
+                info.BindEpoint = device.DeviceEpoint;
+                info.BindType = 0;
+
+                deleteData.RemoveBindList.Add(info);
+                //杩斿洖鎴愬姛璁惧鐨勬椂鍊欎娇鐢�
+                string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
+                dicDevice[mainkeys] = device;
+            }
+            var listSuccess = new List<CommonDevice>();
+
+            var result = this.DelDeviceBindAsync(deleteData);
+            if (result == null || result.delDeviceBindResponseData == null)
+            {
+                //鍒犻櫎缁戝畾鐩爣澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
+                //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+
+                this.ShowErrorMsg(msg);
+                return listSuccess;
+            }
+
+            foreach (var data in result.delDeviceBindResponseData.RemoveBindList)
+            {
+                string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.BindMacAddr, data.BindEpoint);
+                //0:鎴愬姛  1:璁惧涓嶅湪缁戝畾鍒楄〃涓� 锛屼篃鍙互浠h〃鎴愬姛
+                if (data.Result == 0 || data.Result == 1)
+                {
+                    listSuccess.Add(dicDevice[mainkeys]);
+                }
+                //3:澶辫触锛屽湪绛夊緟鑺傜偣璁惧纭鏄惁瑙i櫎缁戝畾鎴愬姛
+                else if (data.Result == 3)
+                {
+                    //璁惧鍚嶇О 鍏朵粬缁戝畾鐩爣姝e湪鍒犻櫎涓紝璇风◢鍚庡啀璇�
+                    string msg = Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + "\r\n";
+                    msg += Language.StringByID(R.MyInternationalizationString.uOtherBindTargetsIsDelettingPleaseWait);
+                    this.ShowErrorMsg(msg);
+                }
+                //2锛氭湭鐭ワ紝鐢辫妭鐐硅澶囧弽棣堝彂閫佲�淏ind/BindResult鈥濅富棰樻秷鎭‘瀹氭槸鍚︽垚鍔�
+                else if (data.Result == 2)
+                {
+                    if (result.removeBindResultResponseData == null)
+                    {
+                        //璁惧鍚嶇О 鍒犻櫎缁戝畾鐩爣澶辫触
+                        string msg = Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + "\r\n";
+                        msg += Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
+                        this.ShowErrorMsg(msg);
+                    }
+                    else
+                    {
+                        //鎴愬姛
+                        if (result.removeBindResultResponseData.Result == 0)
+                        {
+                            listSuccess.Add(dicDevice[mainkeys]);
+                        }
+                        //136锛氭帶鍒惰澶囨湰鍦扮粦瀹氬垪琛ㄤ腑鏃犳缁戝畾
+                        else if (result.removeBindResultResponseData.Result == 136)
+                        {
+                            //杩欎釜鍙互褰撳仛鎴愬姛
+                            listSuccess.Add(dicDevice[mainkeys]);
+                        }
+                        else
+                        {
+                            //璁惧鍚嶇О 鍒犻櫎缁戝畾鐩爣澶辫触
+                            string msg = Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + "\r\n";
+                            msg += Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
+                            this.ShowErrorMsg(msg);
+                        }
+                    }
+                }
+            }
+            return listSuccess;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎璁惧鐨勭粦瀹氱洰鏍�
+        /// </summary>
+        /// <param name="delDeviceBindData"></param>
+        /// <returns></returns>
+        public BindObj.DelDeviceBindResponseAllData DelDeviceBindAsync(BindObj.DelDeviceBindData delDeviceBindData)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                return ModelData.DeviceModelDataLogic.Current.DeleteDeviceBindList(delDeviceBindData);
+            }
+            var device = Common.LocalDevice.Current.GetDevice(delDeviceBindData.DeviceAddr, delDeviceBindData.Epoint);
+            //鑾峰彇闇�瑕佸彂閫佺殑鏁版嵁
+            var sendData = this.GetDeleteDeviceBindCommandText(delDeviceBindData);
+            //鍙戦�佸懡浠�
+            var result = this.SendDeleteBindJobjectDataToGateway(device, "Bind/RemoveBind",
+                sendData, new List<string>() { "Bind/RemoveBind_Respon", "Bind/RemoveBindResult" }, 6);
+
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return null;
+            }
+            var responseData = new BindObj.DelDeviceBindResponseAllData();
+            if (result.listReceiptData[0] != null)
+            {
+                var tempData1 = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.DelDeviceBindResponseData>(result.listReceiptData[0]);
+                responseData.delDeviceBindResponseData = tempData1;
+            }
+
+            if (result.listReceiptData[1] != null)
+            {
+                var tempData2 = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.RemoveBindResultResponseData>(result.listReceiptData[1]);
+                responseData.removeBindResultResponseData = tempData2;
+            }
+
+            //淇敼缂撳瓨
+            ModelData.DeviceModelDataLogic.Current.DeleteDeviceBindList(delDeviceBindData);
+
+            return responseData;
+        }
+
+        /// <summary>
+        ///鍒犻櫎涓�涓帶鍒惰澶囨墍鏈夌粦瀹氫俊鎭�
+        /// </summary>
+        public BindObj.ClearBindInfoResponseAllData ClearBindInfoAsync(CommonDevice device)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                return ModelData.DeviceModelDataLogic.Current.ClearDeviceAllBind(device);
+            }
+
+            var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5006 } };
+            var sendData = jObject.ToString();
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/ClearBindInfo", sendData, "Bind/ClearBindInfo_Respon", 25);
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return null;
+            }
+
+            //淇敼缂撳瓨
+            ModelData.DeviceModelDataLogic.Current.ClearDeviceAllBind(device);
+
+            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.ClearBindInfoResponseData>(result.ReceiptData);
+            return new BindObj.ClearBindInfoResponseAllData { clearBindInfoResponseData = tempData };
+        }
+
+
+        /// <summary>
+        /// 鑾峰彇鍒犻櫎璁惧缁戝畾鍒楄〃鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <param name="delDeviceBindData"></param>
+        /// <returns></returns>
+        public string GetDeleteDeviceBindCommandText(BindObj.DelDeviceBindData delDeviceBindData)
+        {
+            var jObject = new JObject { { "DeviceAddr", delDeviceBindData.DeviceAddr }, { "Epoint", delDeviceBindData.Epoint }, { "Cluster_ID", 0 }, { "Command", 5003 } };
+            var removeBindList = new JArray { };
+            foreach (var removeBindInfo in delDeviceBindData.RemoveBindList)
+            {
+                //鍒犻櫎璁惧
+                if (removeBindInfo.BindType == 0)
+                {
+                    var dInfo = new JObject{{ "BindMacAddr",removeBindInfo.BindMacAddr},{ "BindEpoint", removeBindInfo.BindEpoint} ,
+                         { "BindCluster", removeBindInfo.BindCluster} ,{ "BindType",removeBindInfo.BindType}};
+                    removeBindList.Add(dInfo);
+                }
+                //鍒犻櫎鍦烘櫙
+                else if (removeBindInfo.BindType == 1)
+                {
+                    var dInfo = new JObject{{ "BindCluster", removeBindInfo.BindCluster} ,{ "BindType",removeBindInfo.BindType},
+                         { "BindScenesId", removeBindInfo.BindScenesId}};
+                    removeBindList.Add(dInfo);
+                }
+            }
+            var data = new JObject { { "RemoveBindList", removeBindList } };
+            jObject.Add("Data", data);
+
+            return jObject.ToString();
+        }
+
+        /// <summary>
+        /// 鍙戦�佸垹闄ょ粦瀹氱殑鏁版嵁鍒扮綉鍏筹紝骞舵帴鍙楃綉鍏宠繑鍥炵殑鏁版嵁,listReceiptData涓鸿繑鍥炲��(鍒犻櫎缁戝畾鐨勬帴鍙e緢鐗规畩,闇�瑕佺嫭绔嬪嚭鏉�)
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <param name="sendTopic">鍙戦�佺殑涓婚</param>
+        /// <param name="sendData">闇�瑕佸彂閫佺殑鏁版嵁  JObject.ToString()鐨勪笢瑗�</param>
+        /// <param name="listReceiptTopic">鎸囧畾鎺ユ敹鍝簺涓婚</param>
+        /// <param name="waitTime">瓒呮椂鏃堕棿(绉�)</param>
+        /// <returns>缃戝叧杩斿洖鐨勬暟鎹�</returns>
+        private ReceiptGatewayResult SendDeleteBindJobjectDataToGateway(CommonDevice device, string sendTopic, string sendData, List<string> listReceiptTopic, int waitTime = 3)
+        {
+            var reResult = new ReceiptGatewayResult();
+            reResult.listReceiptData = new string[listReceiptTopic.Count];
+            var myGateway = device.Gateway;
+            if (myGateway == null)
+            {
+                //鑾峰彇缃戝叧瀵硅薄澶辫触
+                reResult.ErrorMsg = Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail);
+                reResult.ErrorMsgDiv = -1;
+                return reResult;
+            }
+            //缃戝叧ID
+            string gatewayID = device.Gateway.GwId;
+            //閿欒涓婚
+            string errorTopic = gatewayID + "/" + "Error_Respon";
+            //妫�娴嬪璞$殑涓婚
+            for (int i = 0; i < listReceiptTopic.Count; i++)
+            {
+                listReceiptTopic[i] = gatewayID + "/" + listReceiptTopic[i];
+            }
+
+            bool canbreak = false;
+            BindObj.DelDeviceBindResponseData delDeviceBindData = null;
+            BindObj.RemoveBindResultResponseData removeBindResult = null;
+
+            Action<string, string> receiptAction = (topic, message) =>
+            {
+                var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+                //缃戝叧鍥炲閿欒
+                if (topic == errorTopic)
+                {
+                    var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString());
+                    reResult.ErrorMsg = HdlCheckLogic.Current.CheckCommonErrorCode(temp.Error);
+                }
+                //濡傛灉鏄寚瀹氱殑涓婚
+                for (int i = 0; i < listReceiptTopic.Count; i++)
+                {
+                    if (topic == listReceiptTopic[i])
+                    {
+                        string deviceMac = jobject["DeviceAddr"].ToString();
+                        int deviceEpoint = Convert.ToInt32(jobject["Epoint"].ToString());
+                        if (device.DeviceAddr != deviceMac)
+                        {
+                            //涓嶆槸鍚屼竴涓笢瑗縈ac
+                            return;
+                        }
+                        if (device.DeviceEpoint != deviceEpoint && deviceEpoint != 200)
+                        {
+                            //涓嶆槸鍚屼竴涓笢瑗�,杩欓噷搴旇闇�瑕佺壒娈婂鐞�200绔偣
+                            return;
+                        }
+                        reResult.listReceiptData[i] = jobject["Data"].ToString();
+
+                        if (i == 0)
+                        {
+                            //"Bind/RemoveBind_Respon"涓婚
+                            delDeviceBindData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.DelDeviceBindResponseData>(reResult.listReceiptData[i]);
+                        }
+                        else if (i == 1)
+                        {
+                            //"Bind/RemoveBindResult"涓婚
+                            removeBindResult = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.RemoveBindResultResponseData>(reResult.listReceiptData[i]);
+                        }
+
+                        if (0 < delDeviceBindData.RemoveBindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 1).Count)
+                        {
+                            canbreak = true;
+                        }
+                        else if (0 < delDeviceBindData.RemoveBindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 3).Count)
+                        {
+                            if (removeBindResult != null)
+                            {
+                                canbreak = true;
+                            }
+                        }
+                        else if (0 < delDeviceBindData.RemoveBindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 2).Count)
+                        {
+                            if (removeBindResult != null)
+                            {
+                                canbreak = true;
+                            }
+                        }
+                        else
+                        {
+                            canbreak = true;
+                        }
+                    }
+                }
+
+            };
+            myGateway.Actions += receiptAction;
+            //鍙戦�佹暟鎹�
+            myGateway.Send(sendTopic, sendData);
+
+            //瓒呮椂鏃堕棿
+            int TimeOut = 0;
+            waitTime = 20 * waitTime;
+            while (canbreak == false && TimeOut < waitTime)
+            {
+                //鍏ㄩ儴鎺ユ敹鎵嶉��鍑�
+                System.Threading.Thread.Sleep(50);
+                TimeOut++;
+            }
+            myGateway.Actions -= receiptAction;
+            receiptAction = null;
+            if (canbreak == false)
+            {
+                //瓒呮椂
+                reResult.ErrorMsgDiv = 0;
+            }
+            else
+            {
+                //姝e父鎺ユ敹鍒扮綉鍏宠繑鍥炵殑鏁版嵁
+                if (reResult.listReceiptData.Length == 1)
+                {
+                    //濡傛灉鍙湁涓�涓富棰�,鍒欐浛鎹㈠彉閲�
+                    reResult.ReceiptData = reResult.listReceiptData[0];
+                    reResult.listReceiptData = null;
+                }
+            }
+
+            return reResult;
+        }
+
+
+        #endregion
+
+        #region 鈻� 閰嶇疆闈㈡澘鍔熻兘_______________________
+
+        ///<summary >
+        ///閰嶇疆闈㈡澘鍔熻兘
+        ///<para>value:缁欓潰鏉块厤缃殑妯″紡</para>
+        /// </summary>
+        public CommonDevice.SetWritableValueResponAllData ConfigureHdlKeyValueAsync(CommonDevice device, Panel.KeyMode value, int clusterID = 6)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                return ModelData.DeviceModelDataLogic.Current.ConfigurePanelKeyModel(device, value, clusterID, "SetWritableValue");
+            }
+            //鑾峰彇鍙戦�佹暟鎹�
+            var sendData = this.GetConfigureHdlKeyCommandText(device.DeviceAddr, device.DeviceEpoint, value, clusterID);
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "SetWritableValue", sendData, "SetWritableValue_Respon");
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return null;
+            }
+
+            //淇敼缂撳瓨
+            ModelData.DeviceModelDataLogic.Current.ConfigurePanelKeyModel(device, value, clusterID, "SetWritableValue");
+
+            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
+            return new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = tempData };
+        }
+
+        /// <summary>
+        /// 璇诲彇闈㈡澘鐨勯厤缃俊鎭�
+        /// </summary>
+        public Panel.PanelConfigureInfoResponAllData ReadPanelConfigureInfoAsync(CommonDevice device)
+        {
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                return ModelData.DeviceModelDataLogic.Current.ReadPanelConfigureKeyModel(device);
+            }
+
+            var JObject = new JObject {{ "DeviceAddr",device.DeviceAddr },{ "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.HdlKey },{ "Command", 108 }};
+            var attriBute = new JArray { new JObject { { "AttriButeId", (int)AttriButeId.HdlKey } } };
+            var data = new JObject { { "AttriBute", attriBute } };
+            JObject.Add("Data", data);
+
+            //鍙戦�佹暟鎹�
+            var sendData = JObject.ToString();
+            string receiptTopic = "DeviceStatusReport/" + device.DeviceAddr + "/" + device.DeviceEpoint + "/" + (int)Cluster_ID.HdlKey + "/" + (int)AttriButeId.HdlKey;
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "GetDeviceStatus", sendData, receiptTopic);
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return null;
+            }
+
+            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<Panel.DeviceStatusReportData>(result.ReceiptData);
+            return new Panel.PanelConfigureInfoResponAllData { deviceStatusReportData = tempData };
+        }
+
+        /// <summary>
+        /// 鑾峰彇閰嶇疆闈㈡澘鍔熻兘鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <param name="value">閿��</param>
+        /// <param name="clusterID">闀濱D</param>
+        /// <returns></returns>
+        public string GetConfigureHdlKeyCommandText(string DeviceAddr, int DeviceEpoint, Panel.KeyMode value, int clusterID = 6)
+        {
+            var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", clusterID }, { "Command", 120 } };
+            var data = new JObject { { "Undivided", 0 }, { "AttributeId", 6533 }, { "AttributeDataType", 33 }, { "AttributeData", (int)value } };
+            jObject.Add("Data", data);
+            return jObject.ToString();
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鏄剧ず閿欒淇℃伅绐楀彛
+        /// </summary>
+        /// <param name="msg"></param>
+        private void ShowErrorMsg(string msg)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                var contr = new ShowMsgControl(ShowMsgType.Error, msg);
+                contr.Show();
+            });
+        }
+
+        /// <summary>
+        /// 鏄剧ずTip淇℃伅绐楀彛
+        /// </summary>
+        /// <param name="msg"></param>
+        private void ShowTipMsg(string msg)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                var contr = new UserCenter.ShowMsgControl(ShowMsgType.Tip, msg);
+                contr.Show();
+            });
+        }
+
+        #endregion
+    }
+}
diff --git a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs~HEAD b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs~HEAD
new file mode 100644
index 0000000..3cd26ac
--- /dev/null
+++ b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs~HEAD
@@ -0,0 +1,1731 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Shared.Common;
+using Shared.Phone.UserCenter.Device.Bind;
+using Shared.Phone.UserCenter.DeviceBind;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter.Device
+{
+    /// <summary>
+    /// 缂栬緫璁惧鐨勪俊鎭�(杩欓噷淇敼鐨勬槸MAC鍚�,杩欎釜鐢婚潰浼氭洿鏀筂AC鐨勭墿鐞嗗悕瀛�)
+    /// </summary>
+    public class DeviceMacInfoEditorForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 璁惧瀵硅薄
+        /// </summary>
+        private List<CommonDevice> listNewDevice = null;
+        /// <summary>
+        /// 鍒楄〃鎺т欢
+        /// </summary>
+        private FrameListControl listview = null;
+        /// <summary>
+        /// 璁惧鐨勮澶囩被鍨�
+        /// </summary>
+        private HashSet<DeviceType> listDeviceType = new HashSet<DeviceType>();
+        /// <summary>
+        /// 璁惧鍏蜂綋绫诲瀷鐨勪俊鎭�
+        /// </summary>
+        private DeviceEnumInfo deviceEnumInfo = null;
+        /// <summary>
+        /// 涓ぎ绌鸿皟鐨勭増鏈帶浠�
+        /// </summary>
+        private NormalViewControl btnAirConditionerVersion = null;
+        /// <summary>
+        /// 绠�绾﹂潰鏉跨粦瀹氱殑娓╁害鐩爣鍚嶅瓧
+        /// </summary>
+        private string bindTemperatureName = string.Empty;
+        /// <summary>
+        /// 绠�绾﹂潰鏉跨粦瀹氱殑婀垮害鐩爣鍚嶅瓧
+        /// </summary>
+        private string bindHumidityName = string.Empty;
+        /// <summary>
+        /// 绠�绾﹂潰鏉跨粦瀹氳缁戠洰鏍囨槸娓╁害
+        /// </summary>
+        private CommonDevice bindTemperatureDev;
+        /// <summary>
+        /// 绠�绾﹂潰鏉跨粦瀹氳缁戠洰鏍囨槸婀垮害
+        /// </summary>
+        private CommonDevice bindHumidityDev;
+        /// <summary>
+        ///  绠�绾﹂潰鏉垮綋鍓峂ac
+        /// </summary>
+        private string deviceMacTemp = string.Empty;
+        // <summary>
+        /// 绠�绾﹂潰鏉夸腑琚粦瀹氱殑娓╂箍搴︾洰鏍囧垪琛�
+        /// </summary>
+        private List<BindObj.BindListResponseObj> bindList = new List<BindObj.BindListResponseObj>();
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        /// <param name="deviceMac">璁惧mac鍦板潃</param>
+        public void ShowForm(string deviceMac)
+        {
+            this.listNewDevice = Common.LocalDevice.Current.GetDevicesByMac(deviceMac);
+            if (listNewDevice.Count == 0)
+            {
+                //閽堝鍗曠函鍙湁涓�涓�200绔偣鐨勮澶�
+                listNewDevice.Add(Common.LocalDevice.Current.GetOTADevice(deviceMac));
+            }
+            this.listDeviceType.Clear();
+            deviceMacTemp = deviceMac;
+            foreach (var device in listNewDevice)
+            {
+                //鏀堕泦璁惧绫诲瀷
+                this.listDeviceType.Add(device.Type);
+            }
+            //鑾峰彇杩欎竴鍫嗚澶囨椂灞炰簬浠�涔堢被鍨嬬殑
+            this.deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listNewDevice);
+
+            //璁剧疆鏍囬淇℃伅
+            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uDeviceSettion));
+
+            //鍒濆鍖栧彸涓婅鑿滃崟
+            this.InitTopRightMenu();
+
+            //鍒濆鍖栦腑閮ㄦ帶浠�
+            this.InitMiddleFrame();
+
+            //閲嶆柊鑾峰彇纭欢淇℃伅
+            this.RefreshHardFirmwareInfo();
+
+            //绠�绾﹀鍔熻兘闈㈡澘鑾峰彇缁戝畾鐩爣鐨勬樉绀�
+            if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction)
+            {
+                //绠�绾﹂潰鏉块殢渚夸竴涓洖璺潵鑾峰彇璁惧淇℃伅
+                var dev = Common.LocalDevice.Current.GetDevice(deviceMac, 62);
+                if (dev != null)
+                {
+                    var key = new ZigBee.Device.Panel();
+                    key.DeviceAddr = deviceMac;
+                    key.CurrentGateWayId = dev.CurrentGateWayId;
+                    InitBindInfo(key);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄦ帶浠�
+        /// </summary>
+        private void InitMiddleFrame()
+        {
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+
+            var listBackControl = new VerticalFrameControl();
+            listBackControl.Height = bodyFrameLayout.Height;
+            bodyFrameLayout.AddChidren(listBackControl);
+
+            //鍒濆鍖栨甯�
+            var tableContr = new InformationEditorControl();
+            this.listview = tableContr.InitControl(listBackControl.frameTable, Language.StringByID(R.MyInternationalizationString.uInfoEditor), 1368);
+
+            //鍥剧墖
+            var btnPic = new DeviceInfoIconControl();
+            btnPic.Y = Application.GetRealHeight(92);
+            btnPic.Gravity = Gravity.CenterHorizontal;
+            listBackControl.frameTable.AddChidren(btnPic);
+            btnPic.InitControl(listNewDevice[0]);
+
+            //璁惧澶囨敞
+            string caption = Language.StringByID(R.MyInternationalizationString.uDeviceNote);
+            string deviceName = Common.LocalDevice.Current.GetDeviceMacName(listNewDevice[0]);
+            var btnNote = new FrameCaptionInputControl(caption, deviceName, listview.rowSpace / 2);
+            listview.AddChidren(btnNote);
+            btnNote.InitControl();
+            //鍒掔嚎
+            btnNote.AddBottomLine();
+            btnNote.txtInput.FinishInputEvent += () =>
+            {
+                string oldName = Common.LocalDevice.Current.GetDeviceMacName(listNewDevice[0]);
+                if (btnNote.Text == string.Empty)
+                {
+                    btnNote.Text = oldName;
+                }
+                if (oldName != btnNote.Text)
+                {
+                    //淇敼鍚嶅瓧
+                    this.DeviceReName(btnNote.Text, false);
+                }
+            };
+
+            //璁惧绫诲瀷
+            caption = Language.StringByID(R.MyInternationalizationString.uDeviceType);
+            deviceName = Common.LocalDevice.Current.GetDeviceObjectText(listNewDevice);
+            var btnType = new FrameCaptionViewControl(caption, deviceName, listview.rowSpace / 2);
+            btnType.UseClickStatu = false;
+            listview.AddChidren(btnType);
+            btnType.InitControl();
+            //鍒掔嚎
+            btnType.AddBottomLine();
+
+            //瀹夎浣嶇疆
+            var rowBeloneArea = new BelongAreaControl(listview.rowSpace / 2);
+            listview.AddChidren(rowBeloneArea);
+            rowBeloneArea.InitControl(Language.StringByID(R.MyInternationalizationString.uInstallationLocation), this.listNewDevice);
+            //搴曠嚎
+            rowBeloneArea.AddBottomLine();
+
+            var listCheck = new List<string>();
+            rowBeloneArea.SelectRoomEvent += (roomKeys) =>
+            {
+                //閫夋嫨鏈垎閰嶆椂,娓呯┖
+                if (roomKeys == string.Empty) { listCheck = new List<string>(); }
+                foreach (var device in this.listNewDevice)
+                {
+                    if (device is OTADevice)
+                    {
+                        //閽堝鍗曠函鍙湁涓�涓�200绔偣鐨勮澶�
+                        continue;
+                    }
+                    if (roomKeys == string.Empty)
+                    {
+                        //濡傛灉閫夋嫨鐨勬槸鏈垎閰嶏紝鍒欏畠鐨勫叏閮ㄥ洖璺棤鏉′欢鍏ㄩ儴娓呯┖鎴块棿
+                        HdlRoomLogic.Current.ChangedRoom(device, roomKeys);
+                        continue;
+                    }
+                    var room = HdlRoomLogic.Current.GetRoomByDevice(device);
+                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(device);
+                    if (room == null)
+                    {
+                        //杩欓噷鏈夌偣鐗规畩,濡傛灉鍥炶矾娌℃湁璁剧疆鏈夊尯鍩熺殑鏃跺��,鎵嶈缃�
+                        listCheck.Add(mainKeys);
+                        HdlRoomLogic.Current.ChangedRoom(device, roomKeys);
+                    }
+                    else if (this.deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir
+                      && device.Type == DeviceType.FreshAir)
+                    {
+                        //鏂伴闈㈡澘鐨勬柊椋庤澶囷紝鍒欏尯鍩熻窡鐫�妯″潡涓�璧�
+                        HdlRoomLogic.Current.ChangedRoom(device, roomKeys);
+                    }
+                    else if (listCheck.Contains(mainKeys) == true)
+                    {
+                        //濡傛灉杩欎釜鍥炶矾涔嬪墠閮借繕娌℃湁鍖哄煙,鍦ㄦ湰鐣岄潰杩樻病鏈夊叧闂箣鍓�,鍙互鏃犳潯浠堕殢渚垮彉鏇�
+                        HdlRoomLogic.Current.ChangedRoom(device, roomKeys);
+                    }
+                }
+                //淇濆瓨璁惧鎴块棿绱㈠紩
+                Common.LocalDevice.Current.SaveRealDeviceRoomId(this.listNewDevice, roomKeys);
+            };
+
+            //娣诲姞鍏ㄩ儴鑿滃崟
+            this.AddAllMenuRow();
+
+            //鍒濆鍖栨甯冨畬鎴�
+            tableContr.FinishInitControl();
+            tableContr = null;
+
+            //淇濆瓨
+            var btnFinish = new BottomClickButton();
+            btnFinish.TextID = R.MyInternationalizationString.uSave;
+            bodyFrameLayout.AddChidren(btnFinish);
+            btnFinish.ButtonClickEvent += (sender, e) =>
+            {
+                string oldName = Common.LocalDevice.Current.GetDeviceMacName(listNewDevice[0]);
+                if (btnNote.Text.Trim() == string.Empty)
+                {
+                    btnNote.Text = oldName;
+                }
+                if (oldName != btnNote.Text.Trim())
+                {
+                    //淇敼鍚嶅瓧
+                    this.DeviceReName(btnNote.Text.Trim(), true);
+                }
+                else
+                {
+                    //鍏抽棴鑷韩
+                    this.CloseForm();
+                }
+            };
+            //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�,璁╂墍鏈夎彍鍗曢兘涓嶈兘鐐瑰嚮
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                for (int i = 0; i < listview.ChildrenCount; i++)
+                {
+                    var myRow = listview.GetChildren(i) as FrameRowControl;
+                    if (myRow != null)
+                    {
+                        myRow.UseClickStatu = false;
+                        myRow.CanClick = false;
+                    }
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鑿滃崟___________________________
+
+        /// <summary>
+        /// 娣诲姞鍏ㄩ儴鑿滃崟
+        /// </summary>
+        private void AddAllMenuRow()
+        {
+            if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣)
+            {
+                //鍙湁鏄渤涓滅殑璁惧鐨勬椂鍊�
+                if (deviceEnumInfo.IsHdlDevice == true)
+                {
+                    //娣诲姞銆愮敤鎴风鐞嗐�戣
+                    this.AddUserManageRow();
+                    //娣诲姞銆愯繙绋嬪紑閿併�戣
+                    this.AddRemoteUnLocksRow();
+                    //娣诲姞銆愰棬閿佹椂闂淬�戣
+                    this.AddDoorLocksTimeRow();
+                }
+            }
+            else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.AirConditioner_ZbGateway)
+            {
+                //娣诲姞銆愬鍐呮満璁剧疆銆戣(绌鸿皟涓撶敤)
+                this.AddIndoorUnitSettionRow();
+            }
+            else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction)
+            {
+                //绠�绾﹀鍔熻兘闈㈡澘
+                this.AddIBindRow(deviceMacTemp);
+                this.AddFunctionSettionRow();
+                this.AddHumiditySourceRow(deviceMacTemp);
+                this.AddTemperatureSensorRow(deviceMacTemp);
+            }
+            else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleEnvironment)
+            {
+                //娣诲姞銆愮粦瀹氱洰鏍囥�戣(绠�绾︾幆澧冮潰鏉跨敤) 
+                this.AddSimplePanelSettionRow();
+            }
+            else
+            {
+                //娣诲姞銆愬伐浣滄ā寮忋�戣(pir浼犳劅鍣ㄤ笓鐢�)
+                this.AddPirSensorWorkModeRow();
+                //娣诲姞銆愮粦瀹氱洰鏍囥�戣(pir浼犳劅鍣ㄤ笓鐢�)
+                this.AddPirSensorBindRow();
+                //娣诲姞銆愭柟鍚戜笌闄愪綅銆戣(寮�鍚堝笜,鍗峰笜涓撶敤)
+                this.AddDirectionAndLimitRow();
+                //娣诲姞銆愭墜鎷夋帶鍒躲�戣(寮�鍚堝笜涓撶敤)
+                this.AddHandPullControlRow();
+                //娣诲姞銆愭寜閿缃�戣(鏂规偊涓撶敤) --杩欎釜鏈夊彲鑳藉拰闈㈡澘閲嶅彔
+                if (this.AddFangyuePanelSettionRow() == false)
+                {
+                    //娣诲姞銆愭寜閿缃�戣(闈㈡澘涓撶敤)
+                    this.AddPanelSettionRow();
+                }
+                //妫�娴嬭兘鍚︽樉绀哄姛鑳借缃殑鑿滃崟
+                if (this.CheckCanShowFunctionSettionRow() == true)
+                {
+                    //娣诲姞銆愬姛鑳借缃�戣
+                    if (deviceEnumInfo.ConcreteType == DeviceConcreteType.Sensor_PMTwoPointFive)
+                    {
+                        //PM浼犳劅鍣�
+                        this.AddFunctionSettionRowPM();
+                    }
+                    else
+                    {
+                        this.AddFunctionSettionRow();
+                    }
+
+                }
+
+                //娣诲姞銆愬共鎺ョ偣璁剧疆銆戣
+                this.AddDryContactSettionRow();
+            }
+            //娣诲姞銆愬姛鑳界被鍨嬨�戣(绌烘皵寮�鍏充笓鐢�)
+            this.AddAirSwitchFunctionTypeRow();
+            //娣诲姞銆愰�氱敤淇℃伅銆戣
+            this.AddGeneralInformationRow();
+
+            //娣诲姞銆愮┖璋冩ā鍧楃増鏈�(绌鸿皟涓撶敤)銆戣
+            this.AddAirConditionerModelVersionRow();
+
+            if (deviceEnumInfo.IsHdlDevice == true)
+            {
+                //娣诲姞銆愬浐浠跺崌绾с�戣
+                this.AddFirmwareUpdateRow();
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鐢ㄦ埛绠$悊(闂ㄩ攣)_____________________
+
+        /// <summary>
+        /// 娣诲姞銆愮敤鎴风鐞嗐�戣锛堥棬閿佷笓鐢級
+        /// </summary>
+        private void AddUserManageRow()
+        {
+            //濡傛灉鏄櫤鑳介棬閿�
+            if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣)
+            {
+                //鐢ㄦ埛绠$悊
+                string caption = Language.StringByID(R.MyInternationalizationString.uUserManage);
+                var btnRow = new FrameRowControl(listview.rowSpace / 2);
+                listview.AddChidren(btnRow);
+                btnRow.AddLeftCaption(caption, 600);
+                //鍚戝彸鍥炬爣
+                btnRow.AddRightArrow();
+                //搴曠嚎
+                btnRow.AddBottomLine();
+                var doorLock = this.listNewDevice[0] as ZigBee.Device.DoorLock;
+                btnRow.ButtonClickEvent += async (sender, e) =>
+                 {
+                     if (UserCenterResourse.UserInfo.AuthorityNo == 1)
+                     {
+                         Action action = null;
+                         Action actionNone = null;
+                         action = () =>
+                         {
+                             var userManagement = new Shared.Phone.UserCenter.DoorLock.UserManagement(doorLock);
+                             Shared.Phone.UserView.HomePage.Instance.AddChidren(userManagement);
+                             Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                             userManagement.Show();
+                         };
+                         actionNone = () =>
+                         {
+                             Shared.Phone.UserCenter.DoorLock.DoorLockCommonLayout.SecurityRequest(doorLock);
+                         };
+                         HdlCheckLogic.Current.CheckSecondarySecurity(action, actionNone);
+                     }
+                     else
+                     {
+                         CommonPage.Loading.Start("");
+                         var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid);
+                         if (result == false)
+                         {
+                             Action action = null;
+                             Action actionNone = null;
+                             action = () =>
+                             {
+                                 var userManagement = new Shared.Phone.UserCenter.DoorLock.UserManagement(doorLock);
+                                 Shared.Phone.UserView.HomePage.Instance.AddChidren(userManagement);
+                                 Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                                 userManagement.Show();
+                             };
+                             actionNone = () =>
+                             {
+                                 Shared.Phone.UserCenter.DoorLock.DoorLockCommonLayout.SecurityRequest(doorLock);
+                             };
+                             HdlCheckLogic.Current.CheckSecondarySecurity(action, actionNone);
+
+                         }
+                         else
+                         {
+                             this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed));
+                         }
+                         CommonPage.Loading.Hide();
+                     }
+                 };
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 杩滅▼寮�閿�(闂ㄩ攣)_____________________
+
+        /// <summary>
+        /// 娣诲姞銆愯繙绋嬪紑閿併�戣锛堥棬閿佷笓鐢級
+        /// </summary>
+        private void AddRemoteUnLocksRow()
+        {
+            //濡傛灉鏄櫤鑳介棬閿�
+            if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣)
+            {
+                //杩滅▼寮�閿�
+                string caption = Language.StringByID(R.MyInternationalizationString.uRemoteUnLocks);
+                var btnRow = new FrameRowControl(listview.rowSpace / 2);
+                btnRow.UseClickStatu = false;
+                listview.AddChidren(btnRow);
+                btnRow.AddLeftCaption(caption, 600);
+                //寮�鍏冲浘鏍�
+                var btnswitch = btnRow.AddMostRightSwitchIcon();
+                //搴曠嚎
+                btnRow.AddBottomLine();
+
+                var doorLock = (ZigBee.Device.DoorLock)listNewDevice[0];
+                if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword) == false)
+                {
+                    btnswitch.IsSelected = true;
+                }
+                //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�,璁╂墍鏈夎彍鍗曢兘涓嶈兘鐐瑰嚮
+                if (Common.Config.Instance.Home.IsVirtually == true)
+                {
+                    btnswitch.CanClick = false;
+                }
+
+                btnswitch.ButtonClickEvent += async (sender, e) =>
+                 {
+                     if (UserCenterResourse.UserInfo.AuthorityNo == 1)
+                     {
+                         if (btnswitch.IsSelected == true)
+                         {
+                             btnswitch.IsSelected = false;
+                             doorLock.RemoteUnlockPassword = string.Empty;
+                             return;
+                         }
+                         var frame = new DoorLock.DoorLockCommonLayout();
+                         frame.RemotePasswordDialog((ZigBee.Device.DoorLock)listNewDevice[0], btnswitch.btnIcon);
+                         frame = null;
+                     }
+                     else
+                     {
+                         var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid);
+                         if (result == false)
+                         {
+                             var result1 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, Shared.Common.Config.Instance.Guid);
+                             if (result1 == true)
+                             {
+                                 if (btnswitch.IsSelected == true)
+                                 {
+                                     btnswitch.IsSelected = false;
+                                     doorLock.RemoteUnlockPassword = string.Empty;
+                                     return;
+                                 }
+                                 var frame = new DoorLock.DoorLockCommonLayout();
+                                 frame.RemotePasswordDialog((ZigBee.Device.DoorLock)listNewDevice[0], btnswitch.btnIcon);
+                                 frame = null;
+                             }
+                             else
+                             {
+                                 this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoAccess));
+                             }
+                         }
+                         else
+                         {
+                             this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed));
+                         }
+                     }
+                 };
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 闂ㄩ攣鏃堕棿(闂ㄩ攣)_____________________
+
+        /// <summary>
+        /// 娣诲姞銆愰棬閿佹椂闂淬�戣锛堥棬閿佷笓鐢級
+        /// </summary>
+        private void AddDoorLocksTimeRow()
+        {
+            //濡傛灉鏄櫤鑳介棬閿�
+            if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鏅鸿兘闂ㄩ攣)
+            {
+                //闂ㄩ攣鏃堕棿
+                string caption = Language.StringByID(R.MyInternationalizationString.uDoorLocksTime);
+                var btnRow = new FrameRowControl(listview.rowSpace / 2);
+                listview.AddChidren(btnRow);
+                btnRow.AddLeftCaption(caption, 600);
+                //鍚戝彸鍥炬爣
+                btnRow.AddRightArrow();
+                //搴曠嚎
+                btnRow.AddBottomLine();
+                var doorLock = this.listNewDevice[0] as ZigBee.Device.DoorLock;
+                btnRow.ButtonClickEvent += async (sender, e) =>
+                 {
+                     if (UserCenterResourse.UserInfo.AuthorityNo == 1)
+                     {
+                         var tempPage = new Shared.Phone.UserCenter.DoorLock.TimeSettignPage(doorLock, "DoorLockTime");
+                         Shared.Phone.UserView.HomePage.Instance.AddChidren(tempPage);
+                         Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                         tempPage.Show();
+                     }
+                     else
+                     {
+                         var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, Shared.Common.Config.Instance.Guid);
+                         if (result == false)
+                         {
+                             var tempPage = new Shared.Phone.UserCenter.DoorLock.TimeSettignPage(doorLock, "DoorLockTime");
+                             Shared.Phone.UserView.HomePage.Instance.AddChidren(tempPage);
+                             Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                             tempPage.Show();
+                         }
+                         else
+                         {
+                             this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AccountIsFreezed));
+                         }
+                     }
+                 };
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鎸夐敭璁剧疆(闈㈡澘)_____________________
+
+        /// <summary>
+        /// 娣诲姞銆愭寜閿缃�戣(闈㈡澘)
+        /// </summary>
+        private void AddPanelSettionRow()
+        {
+            //蹇呴』鏄渤涓滆澶�,蹇呴』鏄潰鏉匡紝骞朵笖鏈夊共鎺ョ偣鎵嶈
+            if (deviceEnumInfo.IsHdlDevice == false || deviceEnumInfo.BeloneType != DeviceBeloneType.A鎸夐敭闈㈡澘 || listDeviceType.Contains(DeviceType.OnOffSwitch) == false)
+            {
+                return;
+            }
+            //鎸夐敭璁剧疆
+            string caption = Language.StringByID(R.MyInternationalizationString.uPanelSettion);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnFunction.AddRightArrow();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnFunction.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new DevicePanel.PanelButtonSettionForm();
+                form.AddForm(listNewDevice[0]);
+            };
+        }
+
+        #region 鈻� 绠�绾︾幆澧�(闈㈡澘)_____________________
+
+        /// <summary>
+        /// 娣诲姞銆愭寜閿缃�戣绠�绾︾幆澧�(闈㈡澘)
+        /// </summary>
+        private void AddSimplePanelSettionRow()
+        {
+            //鎸夐敭璁剧疆
+            string caption = Language.StringByID(R.MyInternationalizationString.uPanelSettion);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnFunction.AddRightArrow();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnFunction.ButtonClickEvent += (sender, e) =>
+            {
+                //绠�绾︾幆澧冮潰鏉跨殑鎸夐敭閰嶇疆
+                var form = new DevicePanel.PanelSettionWithSourceForm();
+                form.AddForm(listNewDevice[0]);
+            };
+        }
+
+        #endregion
+
+        #endregion
+
+        #region 鈻� 鎸夐敭璁剧疆(鏂规偊)_____________________
+
+        /// <summary>
+        /// 娣诲姞銆愭寜閿缃�戣(鏂规偊)
+        /// </summary>
+        private bool AddFangyuePanelSettionRow()
+        {
+            if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueTwo
+                || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFour
+                || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEight
+                || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEnvironment
+                || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir)
+            {
+                //鎸夐敭璁剧疆
+                string caption = Language.StringByID(R.MyInternationalizationString.uPanelSettion);
+                var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+                listview.AddChidren(btnFunction);
+                btnFunction.AddLeftCaption(caption, 600);
+                //鍚戝彸鍥炬爣
+                btnFunction.AddRightArrow();
+                //搴曠嚎
+                btnFunction.AddBottomLine();
+                btnFunction.ButtonClickEvent += (sender, e) =>
+                {
+                    if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueTwo
+                    || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFour
+                    || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEight)
+                    {
+                        //鏂规偊鎸夐敭闈㈡澘[鍗曞紑鍙屾帶/鍙屽紑鍥涙帶/鍥涘紑鍏帶]閰嶇疆
+                        var form = new DevicePanel.PanelFangyueButtonSettionForm();
+                        form.AddForm(listNewDevice[0]);
+                    }
+                    else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEnvironment || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir)
+                    {
+                        //鏂规偊鐜闈㈡澘鐨勬寜閿厤缃�&鏂规偊鏂伴闈㈡澘鐨勬寜閿厤缃�
+                        var form = new DevicePanel.PanelSettionWithSourceForm();
+                        form.AddForm(listNewDevice[0]);
+<<<<<<< HEAD:ZigbeeApp20200810/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs
+                    }
+=======
+                    }
+>>>>>>> dev-tzy:ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs
+                    else
+                    {
+                        var form = new DevicePanel.PanelFangyueButtonSettionForm();
+                        form.AddForm(listNewDevice[0]);
+                    }
+                };
+                return true;
+            }
+            return false;
+        }
+
+        #endregion
+
+        #region 鈻� 骞叉帴鐐硅缃�(骞叉帴鐐�)_________________
+
+        /// <summary>
+        /// 娣诲姞銆愬共鎺ョ偣璁剧疆銆戣
+        /// </summary>
+        private void AddDryContactSettionRow()
+        {
+            if (this.listDeviceType.Contains(DeviceType.OnOffSwitch) == false)
+            {
+                //蹇呴』鏈変竴璺洖璺槸OnOffSwitch鎵嶈,闈㈡澘鐨勫共鎺ョ偣鐨勮瘽锛屼娇鐢ㄧ殑鏄埆鐨勮彍鍗�
+                return;
+            }
+            if (deviceEnumInfo.IsHdlDevice == true && deviceEnumInfo.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘)
+            {
+                //娌充笢鐨勯潰鏉跨殑璇濓紝瀹冩湁鑷繁鐨勯厤缃晫闈�,
+                //濡傛灉鏄涓夋柟璁惧鐨勮瘽锛屼娇鐢ㄦ櫘閫氬共鎺ョ偣鐣岄潰(瀹冭兘浣跨敤缁戝畾鍔熻兘,鏃犺儗鍏夎缃�)
+                return;
+            }
+
+            //骞叉帴鐐硅缃�
+            string caption = Language.StringByID(R.MyInternationalizationString.uDryContactSettion);
+            var btnBackLight = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnBackLight);
+            btnBackLight.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnBackLight.AddRightArrow();
+            //搴曠嚎
+            btnBackLight.AddBottomLine();
+            btnBackLight.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new DeviceDryContactSettionForm();
+                form.AddForm(listNewDevice[0]);
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 宸ヤ綔妯″紡(pir浼犳劅鍣ㄤ笓鐢�)____________
+
+        /// <summary>
+        /// 娣诲姞銆愬伐浣滄ā寮忋�戣(pir浼犳劅鍣ㄤ笓鐢�)
+        /// </summary>
+        private void AddPirSensorWorkModeRow()
+        {
+            if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.Sensor_Pir
+                || deviceEnumInfo.IsHdlDevice == false)
+            {
+                return;
+            }
+            //宸ヤ綔妯″紡
+            string caption = Language.StringByID(R.MyInternationalizationString.uWorkMode);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnFunction.AddRightArrow();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnFunction.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new DevicePirSensor.PirSensorWorkModeMenuForm();
+                form.AddForm((IASZone)this.listNewDevice[0]);
+            };
+        }
+
+        #endregion;
+
+        #region 鈻� 缁戝畾鐩爣(pir浼犳劅鍣ㄤ笓鐢�)____________
+
+        /// <summary>
+        /// 娣诲姞銆愮粦瀹氱洰鏍囥�戣(pir浼犳劅鍣ㄤ笓鐢�)
+        /// </summary>
+        private void AddPirSensorBindRow()
+        {
+            if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.Sensor_Pir)
+            {
+                return;
+            }
+            //缁戝畾鐩爣
+            string caption = Language.StringByID(R.MyInternationalizationString.uBindTargets);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnFunction.AddRightArrow();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnFunction.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new DevicePirSensor.PirSensorBindTargetSettionForm();
+                form.AddForm((IASZone)this.listNewDevice[0]);
+            };
+        }
+
+        #endregion;
+
+        #region 鈻� 鍔熻兘璁剧疆(閫氱敤)_____________________
+
+        /// <summary>
+        /// 娣诲姞銆愬姛鑳借缃�戣
+        /// </summary>
+        private void AddFunctionSettionRow()
+        {
+            //鍙湁鍥炶矾鏁板ぇ浜�1鎵嶈兘鏈夎繖涓彍鍗�
+            if (Common.LocalDevice.Current.GetDevicesCountByMac(listNewDevice[0].DeviceAddr) == 1)
+            {
+                //鏂伴灏忔ā鍧楀彧鏈変竴涓洖璺紝浣嗚姹傛柊椋庡皬妯″潡鐨勬柊椋庢湁鍔熻兘璁剧疆
+                if (deviceEnumInfo.ConcreteType != DeviceConcreteType.Relay_FangyueFreshAirModul)
+                {
+                    return;
+                }
+            }
+            if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEnvironment
+                || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir)
+            {
+                //鐜闈㈡澘娌℃湁鍔熻兘璁剧疆
+                return;
+            }
+
+            //2020.03.06鏂拌拷鍔狅細濡傛灉鍏ㄩ儴閮芥槸骞叉帴鐐圭殑璇�,涔熶笉鑳芥湁杩欎釜涓滆タ
+            int dryContactCount = 0;
+            for (int i = 0; i < listNewDevice.Count; i++)
+            {
+                if (listNewDevice[i].Type == DeviceType.OnOffSwitch)
+                {
+                    dryContactCount++;
+                }
+            }
+            if (listNewDevice.Count == dryContactCount)
+            {
+                //杩欎釜璁惧鍏ㄦ槸骞叉帴鐐�
+                return;
+            }
+
+            //鍔熻兘璁剧疆
+            string caption = Language.StringByID(R.MyInternationalizationString.uFunctionSettingUp);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnFunction.AddRightArrow();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnFunction.ButtonClickEvent += (sender, e) =>
+            {
+                //鏂规偊闈㈡澘
+                if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueTwo
+                    || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFour
+                    || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueEight)
+                {
+                    var form = new DevicePanel.PanelFangyueFunctionSettionForm();
+                    form.AddForm(listNewDevice[0], deviceEnumInfo);
+                }
+                //绠�绾︾幆澧冮潰鏉跨殑鎸夐敭閰嶇疆
+                else if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction)
+                {
+                    var form = new DeviceFunctionSettionForm();
+                    if (listNewDevice.Count > 62)
+                    {
+                        form.AddForm(listNewDevice[62], true);
+                    }
+                }
+                //娌充笢鐨勯潰鏉胯澶�
+                else if (deviceEnumInfo.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘 && deviceEnumInfo.IsHdlDevice == true)
+                {
+                    var form = new DevicePanel.PanelFunctionSettionForm();
+                    form.AddForm(listNewDevice[0]);
+                }
+                else
+                {
+                    var form = new DeviceFunctionSettionForm();
+                    form.AddForm(listNewDevice[0], false);
+                }
+            };
+        }
+
+        /// <summary>
+        /// 娣诲姞浼犳劅鍣ㄣ�愬姛鑳借缃�戣
+        /// </summary>
+        private void AddFunctionSettionRowPM()
+        {
+            //鍔熻兘璁剧疆
+            string caption = Language.StringByID(R.MyInternationalizationString.uFunctionSettingUp);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnFunction.AddRightArrow();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnFunction.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new DeviceFunctionSettionForm();
+                form.AddForm(listNewDevice[0], false);
+            };
+        }
+
+        #endregion;
+
+        #region 鈻� 鏂瑰悜涓庨檺浣�(绐楀笜)___________________
+
+        /// <summary>
+        /// 娣诲姞銆愭柟鍚戜笌闄愪綅銆戣(绐楀笜涓撶敤)
+        /// </summary>
+        private void AddDirectionAndLimitRow()
+        {
+            if (deviceEnumInfo.BeloneType != DeviceBeloneType.A绐楀笜)
+            {
+                return;
+            }
+            var deviceCurtain = (Rollershade)this.listNewDevice[0];
+            if (deviceCurtain.WcdType != 4 && deviceCurtain.WcdType != 0)
+            {
+                //寮�鍚堝笜,鍗峰笜涓撶敤
+                return;
+            }
+
+            //鏂瑰悜涓庨檺浣�
+            string caption = Language.StringByID(R.MyInternationalizationString.uDirectionAndLimit);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnFunction.AddRightArrow();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnFunction.ButtonClickEvent += (sender, e) =>
+            {
+                if (deviceCurtain.WcdType == 4)
+                {
+                    var form = new DeviceCurtain.AutoOpenDirectionAndLimitSettionForm();
+                    form.AddForm(deviceCurtain);
+                }
+                else if (deviceCurtain.WcdType == 0)
+                {
+                    var form = new DeviceCurtain.SiphonateDirectionAndLimitSettionForm();
+                    form.AddForm(deviceCurtain);
+                }
+            };
+        }
+
+        #endregion;
+
+        #region 鈻� 鎵嬫媺鎺у埗(寮�鍚堝笜)___________________
+
+        /// <summary>
+        /// 娣诲姞銆愭墜鎷夋帶鍒躲�戣(寮�鍚堝笜涓撶敤)
+        /// </summary>
+        private void AddHandPullControlRow()
+        {
+            if (deviceEnumInfo.BeloneType != DeviceBeloneType.A绐楀笜)
+            {
+                return;
+            }
+            var deviceCurtain = (Rollershade)this.listNewDevice[0];
+            if (deviceCurtain.WcdType != 4)
+            {
+                //寮�鍚堝笜涓撶敤
+                return;
+            }
+
+            //鎵嬫媺鎺у埗
+            string caption = Language.StringByID(R.MyInternationalizationString.uHandPullControl);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            btnFunction.UseClickStatu = false;
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //寮�鍏冲浘鏍�
+            var btnSwitch = btnFunction.AddMostRightSwitchIcon();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnSwitch.ButtonClickEvent += (sender, e) =>
+            {
+                //鍒囨崲妯″紡
+                bool statu = !btnSwitch.IsSelected;
+                var result = HdlDeviceCurtainLogic.Current.SetHandPullControl(deviceCurtain, statu);
+                if (result == true)
+                {
+                    btnSwitch.IsSelected = statu;
+                }
+            };
+            //濡傛灉鏄櫄鎷熶綇瀹�
+            if (Common.Config.Instance.Home.IsVirtually == true)
+            {
+                btnSwitch.IsSelected = ModelData.DeviceModelDataLogic.Current.GetCurtainHandPullControl(deviceCurtain);
+                return;
+            }
+
+            //娣诲姞灞炴�т笂鎶ョ洃鍚�
+            string mainkeys = LocalDevice.Current.GetDeviceMainKeys(this.listNewDevice[0]);
+            HdlGatewayReceiveLogic.Current.AddAttributeEvent("HandPullControl", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (device) =>
+            {
+                string checkKey = LocalDevice.Current.GetDeviceMainKeys(device);
+                if (mainkeys != checkKey || device.DeviceStatusReport.CluterID != 258)
+                {
+                    return;
+                }
+                foreach (var attriBute in device.DeviceStatusReport.AttriBute)
+                {
+                    if (attriBute.AttributeId == 23)
+                    {
+                        //鎵嬫媺鎺у埗
+                        if (0 < (attriBute.AttriButeData & 0x04))
+                        {
+                            HdlThreadLogic.Current.RunMain(() =>
+                            {
+                                btnSwitch.IsSelected = true;
+                            });
+                        }
+                    }
+                }
+            });
+            //鍙戦�佸懡浠�
+            deviceCurtain.ReadCurtainDirectionAndMode();
+        }
+
+        #endregion;
+
+        #region 鈻� 瀹ゅ唴鏈鸿缃�(绌鸿皟)___________________
+
+        /// <summary>
+        /// 娣诲姞銆愬鍐呮満璁剧疆銆戣(绌鸿皟涓撶敤)
+        /// </summary>
+        private void AddIndoorUnitSettionRow()
+        {
+            if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.AirConditioner_ZbGateway
+                || this.listNewDevice[0] is OTADevice)//杩藉姞锛氬崟绾彧鏈�200绔偣鐨勮瘽锛屼笉鏄剧ず杩欎釜鑿滃崟
+            {
+                return;
+            }
+
+            //瀹ゅ唴鏈鸿缃�
+            string caption = Language.StringByID(R.MyInternationalizationString.uIndoorUnitSettion);
+            var btnFunction = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnFunction);
+            btnFunction.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnFunction.AddRightArrow();
+            //搴曠嚎
+            btnFunction.AddBottomLine();
+            btnFunction.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new DeviceAirConditioner.IndoorUnitListForm();
+                form.AddForm(listNewDevice[0].DeviceAddr);
+            };
+        }
+        #endregion
+
+        #region 鈻�  绠�绾﹀鍔熻兘闈㈡澘鐢╛__________________
+        /// <summary>
+        /// 娣诲姞銆愮粦瀹氱洰鏍囥�戣
+        /// </summary>
+        private void AddIBindRow(string deviceMac)
+        {
+            string bindTargets = Language.StringByID(R.MyInternationalizationString.uBindTargets);
+            var btnBindTargets = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnBindTargets);
+            btnBindTargets.AddLeftCaption(bindTargets, 600);
+            //鍚戝彸鍥炬爣
+            btnBindTargets.AddRightArrow();
+            //搴曠嚎
+            btnBindTargets.AddBottomLine();
+            btnBindTargets.ButtonClickEvent += (sender, e) =>
+            {
+                var simpleMutilfunctionTargetsPage = new Shared.Phone.UserCenter.DeviceBind.PanelSimpleMutilfunctionTargetsForm(deviceMac);
+                Shared.Phone.UserView.HomePage.Instance.AddChidren(simpleMutilfunctionTargetsPage);
+                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                simpleMutilfunctionTargetsPage.Show();
+            };
+        }
+
+        /// <summary>
+        ///  婀垮害鏉ユ簮琛�
+        /// </summary>
+        private void AddHumiditySourceRow(string deviceMac)
+        {
+            //婀垮害
+            var rowHumidity = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(rowHumidity);
+            rowHumidity.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.HumiditySource), 600);
+            //搴曠嚎
+            rowHumidity.AddBottomLine();
+            //鍙崇澶�
+            rowHumidity.AddRightArrow();
+            var msg = Language.StringByID(R.MyInternationalizationString.nothing);
+            if (!string.IsNullOrEmpty(bindHumidityName))
+            {
+                msg = bindHumidityName;
+            }
+            var btnHumidityStatu = rowHumidity.AddMostRightView(msg, 700);
+            rowHumidity.ButtonClickEvent += (sender, e) =>
+            {
+
+                var dev = Common.LocalDevice.Current.GetDevice(deviceMac, 62);//绠�绾﹂潰鏉块殢渚夸竴涓洖璺潵鑾峰彇璁惧
+                var device = new CommonDevice();
+                if (dev != null)
+                {
+                    device.CurrentGateWayId = dev.CurrentGateWayId;
+                }
+                device.Type = DeviceType.OnOffSwitch;
+                device.DeviceAddr = deviceMac;
+                device.DeviceEpoint = 65;//鑳界粦瀹氭箍搴︾殑鍥炶矾
+                var paneTargetsBaseFormp = new PaneTargetsBaseForm(device, bindHumidityDev, BindInfo.BindType.Humidity);
+                Shared.Phone.UserView.HomePage.Instance.AddChidren(paneTargetsBaseFormp);
+                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                paneTargetsBaseFormp.Show();
+                paneTargetsBaseFormp.actionHumidityTarget += (bindName) =>
+                {
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        if (string.IsNullOrEmpty(bindName))
+                        {
+                            btnHumidityStatu.Text = Language.StringByID(R.MyInternationalizationString.nothing);
+                        }
+                        else
+                        {
+                            btnHumidityStatu.Text = bindName;
+                        }
+                    });
+                };
+            };
+        }
+
+        /// <summary>
+        ///  娓╁害鏉ユ簮琛�
+        /// </summary>
+        private void AddTemperatureSensorRow(string deviceMac)
+        {
+            //娓╁害鏉ユ簮
+            var rowTemPerature = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(rowTemPerature);
+            rowTemPerature.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.TemperatureSource), 600);
+            //搴曠嚎
+            rowTemPerature.AddBottomLine();
+            //鍙崇澶�
+            rowTemPerature.AddRightArrow();
+            var msg = Language.StringByID(R.MyInternationalizationString.nothing);
+            if (!string.IsNullOrEmpty(bindTemperatureName))
+            {
+                msg = bindTemperatureName;
+            }
+            var btnTemperatureStatu = rowTemPerature.AddMostRightView(msg, 700);
+            rowTemPerature.ButtonClickEvent += (sender, e) =>
+            {
+                var dev = Common.LocalDevice.Current.GetDevice(deviceMac, 62);//绠�绾﹂潰鏉块殢渚夸竴涓洖璺潵鑾峰彇璁惧
+                var device = new CommonDevice();
+                if (dev != null)
+                {
+                    device.CurrentGateWayId = dev.CurrentGateWayId;
+                }
+                device.Type = DeviceType.OnOffSwitch;
+                device.DeviceAddr = deviceMac;
+                device.DeviceEpoint = 64;//鑳界粦瀹氭俯搴︾殑鍥炶矾
+                var paneTargetsBaseFormp = new PaneTargetsBaseForm(device, bindTemperatureDev, BindInfo.BindType.Temperature);
+                Shared.Phone.UserView.HomePage.Instance.AddChidren(paneTargetsBaseFormp);
+                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                paneTargetsBaseFormp.Show();
+                paneTargetsBaseFormp.actionTemperatureTarget += (bindName) =>
+                {
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        if (string.IsNullOrEmpty(bindName))
+                        {
+                            btnTemperatureStatu.Text = Language.StringByID(R.MyInternationalizationString.nothing);
+                        }
+                        else
+                        {
+                            btnTemperatureStatu.Text = bindName;
+                        }
+                    });
+                };
+            };
+        }
+
+        /// <summary>
+        ///璇绘俯婀垮害鏁版嵁
+        /// </summary>
+        void InitBindInfo(CommonDevice curControlDev)
+        {
+            System.Threading.Tasks.Task.Run(async () =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        CommonPage.Loading.Start("");
+                    });
+                    //1銆佽幏鍘荤粦瀹氱殑娓╁害浼犳劅鍣�
+                    curControlDev.DeviceEpoint = 64;
+                    var result = await GetBindName(curControlDev);
+                    if (!result)
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5007_2" + ")", Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
+                        });
+                        return;
+                    }
+
+                    //2銆佽幏鍘荤粦瀹氱殑婀垮害搴︿紶鎰熷櫒
+                    curControlDev.DeviceEpoint = 65;
+                    var result2 = await GetBindName(curControlDev);
+                    if (!result2)
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5007_3" + ")", Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
+                        });
+                        return;
+                    }
+                }
+                catch (Exception ex)
+                {
+                    var mess = ex.Message;
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        //鍒濆鍖栦腑閮ㄦ帶浠�
+                        this.InitMiddleFrame();
+                        CommonPage.Loading.Hide();
+                    });
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鑾峰彇缁戝畾鐨勬俯婀垮害鐩爣
+        /// </summary>
+        /// <param name="curControlDev"></param>
+        /// <returns></returns>
+        private async System.Threading.Tasks.Task<bool> GetBindName(CommonDevice curControlDev)
+        {
+            bool result = false;
+            var panelBindListRes = HdlDeviceBindLogic.Current.GetDeviceBindAsync(curControlDev);
+            if (panelBindListRes != null && panelBindListRes.getAllBindResponseData != null)
+            {
+                bindList = panelBindListRes.getAllBindResponseData.BindList;
+                foreach (var bDev in bindList)
+                {
+                    var device = Common.LocalDevice.Current.GetDevice(bDev.BindMacAddr, bDev.BindEpoint);
+                    if (device == null)
+                    {
+                        continue;
+                    }
+                    if (device.Type == DeviceType.TemperatureSensor)
+                    {
+                        var bD = device as TemperatureSensor;
+                        if (bD.SensorDiv == 1 && bDev.BindCluster == 1026)
+                        {
+                            if (string.IsNullOrEmpty(bDev.ESName))
+                            {
+                                bindTemperatureName = Common.LocalDevice.Current.GetDeviceEpointName(device);
+                            }
+                            else
+                            {
+                                bindTemperatureName = bDev.ESName;
+                            }
+                            bindTemperatureDev = device;
+                        }
+                        if (bD.SensorDiv == 2 && bDev.BindCluster == 1029)
+                        {
+                            if (string.IsNullOrEmpty(bDev.ESName))
+                            {
+                                bindHumidityName = Common.LocalDevice.Current.GetDeviceEpointName(device);
+                            }
+                            else
+                            {
+                                bindHumidityName = bDev.ESName;
+                            }
+
+                            bindHumidityDev = device;
+                        }
+                    }
+                    if (device.Type == DeviceType.FreshAirHumiditySensor)
+                    {
+                        if (string.IsNullOrEmpty(bDev.ESName))
+                        {
+                            bindHumidityName = Common.LocalDevice.Current.GetDeviceEpointName(device);
+                        }
+                        else
+                        {
+                            bindHumidityName = bDev.ESName;
+                        }
+
+                        bindHumidityDev = device;
+                    }
+                }
+                result = true;
+            }
+            return result;
+        }
+        #endregion
+
+        #region 鈻� 鍔熻兘绫诲瀷(绌烘皵寮�鍏充笓鐢�)_____________
+
+        /// <summary>
+        /// 娣诲姞銆愬姛鑳界被鍨嬨�戣(绌烘皵寮�鍏充笓鐢�)
+        /// </summary>
+        private void AddAirSwitchFunctionTypeRow()
+        {
+            //2020.04.28鍙樻洿:鏈変釜鍒澶囧畠闄や簡缁х數鍣ㄥ洖璺紝浠�涔堥兘娌℃湁浜�,
+            //杩欎釜鏃跺�欎篃瑕佺幇瀹炲嚭鏉�
+            if (this.listNewDevice.Count != 1)
+            {
+                return;
+            }
+            if (this.listNewDevice[0].Type != DeviceType.OnOffOutput
+                && this.listNewDevice[0].Type != DeviceType.AirSwitch)
+            {
+                return;
+            }
+            //鑷畾涔夊姛鑳界被鍨嬫帶浠�
+            var rowFunction = new DeviceFunctionTypeRowControl(this.listNewDevice[0], listview.rowSpace / 2);
+            listview.AddChidren(rowFunction);
+            rowFunction.InitControl();
+            //搴曠嚎
+            rowFunction.AddBottomLine();
+        }
+
+        #endregion
+
+        #region 鈻� 閫氱敤淇℃伅___________________________
+
+        /// <summary>
+        /// 娣诲姞銆愰�氱敤淇℃伅銆戣
+        /// </summary>
+        private void AddGeneralInformationRow()
+        {
+            string caption = Language.StringByID(R.MyInternationalizationString.uGeneralInformation);
+            var btnGeneral = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(btnGeneral);
+            btnGeneral.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            btnGeneral.AddRightArrow();
+            //搴曠嚎
+            btnGeneral.AddBottomLine();
+            btnGeneral.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new DeviceGeneralInformationForm();
+                form.AddForm(listNewDevice[0].DeviceAddr);
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 绌鸿皟妯″潡鐗堟湰(绌鸿皟涓撶敤)_____________
+
+        /// <summary>
+        /// 娣诲姞銆愮┖璋冩ā鍧楃増鏈�戣(娌充笢鐨勪腑澶┖璋�)
+        /// </summary>
+        private void AddAirConditionerModelVersionRow()
+        {
+            if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.AirConditioner_ZbGateway)
+            {
+                //涓嶆槸涓ぎ绌鸿皟
+                return;
+            }
+            string caption = Language.StringByID(R.MyInternationalizationString.uAirConditionerModelVersion);
+            var rowVersion = new FrameRowControl(listview.rowSpace / 2);
+            rowVersion.UseClickStatu = false;
+            listview.AddChidren(rowVersion);
+            rowVersion.AddLeftCaption(caption, 600);
+            //鐗堟湰
+            this.btnAirConditionerVersion = rowVersion.AddMostRightView("", 800);
+            //搴曠嚎
+            rowVersion.AddBottomLine();
+
+            //鑾峰彇涓ぎ绌鸿皟妯″潡鐨勭増鏈�
+            this.ReadAirConditionerVersion();
+        }
+
+        #endregion
+
+        #region 鈻� 鍥轰欢鍗囩骇___________________________
+
+        /// <summary>
+        /// 娣诲姞銆愬浐浠跺崌绾с�戣
+        /// </summary>
+        private void AddFirmwareUpdateRow()
+        {
+            //鎷ユ湁200绔彛杩欎釜涓滆タ鐨勬椂鍊欙紝鎵嶄細鏄剧ず杩欎竴琛�
+            var oTADevice = Common.LocalDevice.Current.GetOTADevice(listNewDevice[0].DeviceAddr);
+            if (oTADevice == null)
+            {
+                return;
+            }
+
+            //鍥轰欢鍗囩骇
+            string caption = Language.StringByID(R.MyInternationalizationString.uFirmwareUpdate);
+            var rowUpDate = new FrameRowControl(listview.rowSpace / 2);
+            listview.AddChidren(rowUpDate);
+            rowUpDate.AddLeftCaption(caption, 600);
+            //鍚戝彸鍥炬爣
+            rowUpDate.AddRightArrow();
+            //搴曠嚎
+            rowUpDate.AddBottomLine();
+
+            //鎻愮ず鏈夋柊鐗堟湰
+            var btnNewVersion = new PicViewControl(78, 55);
+            btnNewVersion.UnSelectedImagePath = "Item/NewVersion.png";
+            btnNewVersion.Visible = false;
+            btnNewVersion.X = Application.GetRealWidth(242);
+            btnNewVersion.Y = Application.GetRealHeight(23);
+            rowUpDate.AddChidren(btnNewVersion, ChidrenBindMode.BindEvent);
+
+            rowUpDate.ButtonClickEvent += (sender, e) =>
+            {
+                if (this.deviceEnumInfo.ConcreteType != DeviceConcreteType.AirConditioner_ZbGateway)
+                {
+                    //杩欎釜鏄竴鑸澶囩殑鍗囩骇
+                    var form = new DeviceFirmwareUpdateForm();
+                    form.AddForm(listNewDevice[0].DeviceAddr);
+                }
+                else
+                {
+                    //涓ぎ绌鸿皟鐨勫崌绾х殑璇濓紝鏄壒娈婄殑
+                    var form = new DeviceAirConditioner.ACZbGatewayUpdateMenuForm();
+                    form.AddForm(listNewDevice[0], btnNewVersion.Visible);
+                }
+                btnNewVersion.Visible = false;
+            };
+
+            //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
+            if (Common.Config.Instance.Home.IsVirtually == false)
+            {
+                //璁剧疆璁惧鐨勭増鏈俊鎭�
+                this.SetDeviceVersionInfo(btnNewVersion, oTADevice);
+            }
+        }
+
+        /// <summary>
+        /// 璁剧疆璁惧鐨勭増鏈俊鎭�
+        /// </summary>
+        /// <param name="btnNewVersion">鏈夋柊鐗堟湰鐨勬彁绀烘帶浠�</param>
+        /// <param name="oTADevice">ota璁惧</param>
+        private void SetDeviceVersionInfo(PicViewControl btnNewVersion, OTADevice oTADevice)
+        {
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                bool receiveImageInfo = false;
+                //璁剧疆璁惧鍏ㄩ儴鐨勯暅鍍忎俊鎭�
+                HdlDeviceImageInfoLogic.Current.SetAllImageInfoToOtaDevice(oTADevice, (device, reportData) =>
+                {
+                    receiveImageInfo = true;
+                });
+                int count = 5;
+                while (receiveImageInfo == false && count > 0)
+                {
+                    //绛夊緟璁惧闀滃儚鐨勫弽棣�
+                    System.Threading.Thread.Sleep(300);
+                    count--;
+                }
+                //绉婚櫎浜嬩欢
+                HdlDeviceImageInfoLogic.Current.RemoveDeviceFirmwareVersionThread(oTADevice);
+
+                oTADevice = Common.LocalDevice.Current.GetOTADevice(listNewDevice[0].DeviceAddr);
+                //娣诲姞鍗囩骇鍥轰欢淇℃伅(鎴愪笉鎴愬姛閮芥棤鎵�璋�)
+                var result = HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.ZigbeeDevice, oTADevice.HwVersion.ToString(), oTADevice.ImgTypeId.ToString());
+
+                //鑾峰彇璁惧鏈�鏂扮増鏈�
+                var deviceFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.ZigbeeDevice,
+                    oTADevice.HwVersion.ToString(),
+                    oTADevice.ImgTypeId.ToString(),
+                    oTADevice.ImgVersion);
+
+                if (deviceFirmware != null && deviceFirmware.FirmwareVersion > oTADevice.ImgVersion)
+                {
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        if (btnNewVersion != null)
+                        {
+                            btnNewVersion.Visible = true;
+                        }
+                    }, ShowErrorMode.NO);
+                }
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 淇敼鍚嶅瓧___________________________
+
+        /// <summary>
+        /// 璁惧閲嶅懡鍚�
+        /// </summary>
+        /// <param name="i_deviceName">deviceName.</param>
+        private void DeviceReName(string i_deviceName, bool closeForm)
+        {
+            //淇敼MAC鍚�
+            string deviceName = i_deviceName.Trim();
+            var result = Common.LocalDevice.Current.ReMacName(this.listNewDevice, deviceName);
+            if (result == false)
+            {
+                return;
+            }
+            if (closeForm == true)
+            {
+                //鍏抽棴鐣岄潰
+                this.CloseForm();
+            }
+            else
+            {
+                //璁惧澶囨敞淇敼鎴愬姛!
+                string msg = Language.StringByID(R.MyInternationalizationString.uDeviceReNoteSuccess);
+                this.ShowMassage(ShowMsgType.Tip, msg);
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍙充笂瑙掕彍鍗昣________________________
+
+        /// <summary>
+        /// 鍒濆鍖栧彸涓婅鑿滃崟
+        /// </summary>
+        private void InitTopRightMenu()
+        {
+            var btnIcon = new MostRightIconControl(69, 69);
+            btnIcon.UnSelectedImagePath = "Item/More.png";
+            topFrameLayout.AddChidren(btnIcon);
+            btnIcon.InitControl();
+            btnIcon.ButtonClickEvent += ((sender, e) =>
+            {
+                //鏄剧ず鍙充笂瑙掕彍鍗曠晫闈�
+                this.ShowTopRightMenu();
+            });
+        }
+
+        /// <summary>
+        /// 鏄剧ず鍙充笂瑙掕彍鍗曠晫闈�
+        /// </summary>
+        private void ShowTopRightMenu()
+        {
+            //妫�娴嬫鍥炶矾鏄惁鎷ユ湁瀹氫綅鍔熻兘(鎷跨鐐规渶灏忕殑閭d釜鍥炶矾鍘诲畾浣�)
+            bool canTest = Common.LocalDevice.Current.DeviceIsCanFixedPosition(listNewDevice[0]);
+
+            TopRightMenuControl frame = null;
+
+            if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction)
+            {
+                frame = new TopRightMenuControl(3, 1);
+            }
+            else
+            {
+                frame = new TopRightMenuControl(canTest == true ? 2 : 1, 1);
+            }
+
+            string deviceMenu = string.Empty;
+            if (canTest == true)
+            {
+                //瀹氫綅
+                deviceMenu = Language.StringByID(R.MyInternationalizationString.uFixedPosition);
+                frame.AddRowMenu(deviceMenu, "Item/FixedPosition.png", "Item/FixedPositionSelected.png", () =>
+                {
+                    //鍙戦�佸畾浣嶅姛鑳�
+                    Common.LocalDevice.Current.SetFixedPositionCommand(listNewDevice[0]);
+                });
+            }
+
+            //鍒犻櫎
+            deviceMenu = Language.StringByID(R.MyInternationalizationString.uDelete);
+            frame.AddRowMenu(deviceMenu, "Item/DeleteIcon2.png", "Item/DeleteIcon2Selected.png", () =>
+            {
+                //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�,姝ゅ姛鑳芥棤鏁�
+                if (Common.Config.Instance.Home.IsVirtually == true)
+                {
+                    return;
+                }
+                //纭鍒犻櫎璇ヨ澶囧強鍔熻兘锛�
+                string msg = Language.StringByID(R.MyInternationalizationString.uDeleteDeviceMsg);
+                this.ShowMassage(ShowMsgType.Confirm, msg, () =>
+                {
+                    //鍒犻櫎鎸囧畾璁惧
+                    this.DoDeleteDevice();
+                });
+            });
+
+            //鍚屾
+            deviceMenu = Language.StringByID(R.MyInternationalizationString.Synchronization);
+            if (Common.LocalDevice.Current.DeviceIsCanFixedPosition(listNewDevice[0]))
+            {
+                frame.AddRowMenu(deviceMenu, "", "Item/SynchronizationSelected.png", () =>
+                {
+                    //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�,姝ゅ姛鑳芥棤鏁�
+                    if (Common.Config.Instance.Home.IsVirtually == true)
+                    {
+                        return;
+                    }
+
+                    //鍚屾鎸囧畾璁惧
+                    this.SynchronizationDevice();
+                });
+            }
+
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鎸囧畾璁惧
+        /// </summary>
+        private void DoDeleteDevice()
+        {
+            HdlThreadLogic.Current.RunThread(async () =>
+            {
+                //鎵撳紑杩涘害鏉�
+                this.ShowProgressBar();
+
+                //鍒犻櫎璁惧
+                bool result = await Common.LocalDevice.Current.DeleteDevice(listNewDevice);
+                //鍏抽棴杩涘害鏉�
+                this.CloseProgressBar();
+                if (result == false)
+                {
+                    return;
+                }
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //鍏抽棴鐣岄潰
+                    this.CloseForm();
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鍚屾鎸囧畾璁惧
+        /// </summary>
+        private void SynchronizationDevice()
+        {
+            HdlThreadLogic.Current.RunThread(async () =>
+            {
+                //鎵撳紑杩涘害鏉�
+                this.ShowProgressBar();
+
+                //鍚屾璁惧
+                bool result = await Common.LocalDevice.Current.SynchronizationDevice(listNewDevice);
+                //鍏抽棴杩涘害鏉�
+                this.CloseProgressBar();
+                if (result == false)
+                {
+                    return;
+                }
+            });
+        }
+        #endregion
+
+        #region 鈻� 鍏抽棴鐣岄潰___________________________
+
+        /// <summary>
+        /// 鐢婚潰鍏抽棴
+        /// </summary>
+        public override void CloseFormBefore()
+        {
+            HdlGatewayReceiveLogic.Current.RemoveEvent("HandPullControl");
+            //绉婚櫎鑾峰彇璁惧纭欢淇℃伅鐨勭洃鍚嚎绋�
+            HdlDeviceHardInfoLogic.Current.RemoveDeviceHardInfoThread(listNewDevice[0]);
+
+            //璁惧鏂板叆缃�
+            if (UserCenterResourse.DicActionForm.ContainsKey("AddDeviceTypeListForm") == true)
+            {
+                this.LoadFormMethodByName("DeviceListMainForm", "RefreshDeviceRow", new object[] { listNewDevice[0].DeviceAddr });
+            }
+
+            base.CloseFormBefore();
+        }
+
+        #endregion
+
+        #region 鈻� 纭欢淇℃伅___________________________
+
+        /// <summary>
+        /// 閲嶆柊鑾峰彇纭欢淇℃伅
+        /// </summary>
+        private void RefreshHardFirmwareInfo()
+        {
+            if (listNewDevice[0].DriveCode > 0)
+            {
+                //铏氭嫙璁惧娌℃湁杩欑鎿嶄綔
+                return;
+            }
+            //閲嶆柊鑾峰彇纭欢淇℃伅
+            HdlDeviceHardInfoLogic.Current.SetAllHardFirmwareInfoToDevice(listNewDevice[0], (device, reportData) =>
+            {
+                for (int i = 1; i < listNewDevice.Count; i++)
+                {
+                    //鍏ㄩ儴鍥炶矾鐨勪俊鎭兘鏄竴鑷寸殑
+                    HdlDeviceHardInfoLogic.Current.SetHardFirmwareInfo(device.DeviceStatusReport, listNewDevice[i]);
+                    listNewDevice[i].ReSave();
+                }
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 鐣岄潰閲嶆柊婵�娲讳簨浠禵__________________
+
+        /// <summary>
+        /// 鑷韩鐨勪笂灞傜晫闈㈠叧闂悗,瀹冭嚜韬浜庢渶涓婂眰鏃�,瑙﹀彂鐨勪簨浠�
+        /// </summary>
+        public override int FormActionAgainEvent()
+        {
+            //閲嶆柊鑾峰彇涓ぎ绌鸿皟妯″潡鐨勭増鏈�
+            this.ReadAirConditionerVersion();
+
+            return 0;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鑾峰彇涓ぎ绌鸿皟妯″潡鐨勭増鏈�
+        /// </summary>
+        private void ReadAirConditionerVersion()
+        {
+            if (this.btnAirConditionerVersion == null)
+            {
+                return;
+            }
+            //鑾峰彇涓�....
+            this.btnAirConditionerVersion.TextID = R.MyInternationalizationString.uGetting;
+            HdlThreadLogic.Current.RunThread(async () =>
+            {
+                //璇诲彇绌鸿皟妯″潡鐗堟湰
+                var result = await HdlDeviceAirConditionerLogic.Current.ReadACFirewareVersionAsync(listNewDevice[0]);
+                if (result == null || result.readACFirewareVersionResponData == null || result.readACFirewareVersionResponData.Status != 0)
+                {
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        //鑾峰彇澶辫触
+                        btnAirConditionerVersion.TextID = R.MyInternationalizationString.uGettingFail;
+                    });
+                }
+                else
+                {
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        btnAirConditionerVersion.Text = result.readACFirewareVersionResponData.FirewareVersion.Replace("-", string.Empty);
+                    });
+                }
+            });
+        }
+
+        /// <summary>
+        /// 妫�娴嬭兘鍚︽樉绀哄姛鑳借缃殑鑿滃崟
+        /// </summary>
+        /// <returns></returns>
+        private bool CheckCanShowFunctionSettionRow()
+        {
+            //鏂规偊鏂伴闈㈡澘娌℃湁鍔熻兘璁剧疆
+            if (deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir
+                || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_FourButtonScene
+                || deviceEnumInfo.ConcreteType == DeviceConcreteType.ButtonPanel_TwoButtonCurtain)
+            {
+                return false;
+            }
+            return true;
+        }
+
+        #endregion
+    }
+}
diff --git a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs
index 14a496b..2ac771c 100644
--- a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs
+++ b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionAddTargetsForm.cs
@@ -1027,22 +1027,20 @@
                         for (int i = 0; i < targetScList.Count; i++)
                         {
                             //缁戝畾鏂扮殑鏁版嵁
-                            var addBindeDev = new AddBindData();
-                            addBindeDev.DeviceAddr = curControlDev.DeviceAddr;
+                            var addSingleBindData = new AddSingleBindData();
+                            addSingleBindData.DeviceAddr = curControlDev.DeviceAddr;
                             for (int j = 0; j < curSupportBindEpointList.Count; j++)
                             {
                                 curSendEpointList.Add(curSupportBindEpointList[0]);
-                                addBindeDev.Epoint = curControlDev.DeviceEpoint = curSupportBindEpointList[0];
+                                addSingleBindData.Epoint = curControlDev.DeviceEpoint = curSupportBindEpointList[0];
                                 break;
                             }
                             var de = targetScList[i];
-                            var addBindInfo = new AddBindListObj();
-                            addBindInfo.BindType = 1;
-                            addBindInfo.BindCluster = 6;
-                            addBindInfo.BindScenesId = de.Id;
-                            addBindeDev.BindList.Add(addBindInfo);
+                            addSingleBindData.BindType = 1;
+                            addSingleBindData.BindClusterList.Add(6);
+                            addSingleBindData.BindScenesId = de.Id;
 
-                            var resT = AddDeviceBind(addBindeDev, targetSendCount, ref targetRecCount);
+                            var resT = AddDeviceBind(addSingleBindData, targetSendCount, ref targetRecCount);
                             if (!resT)
                             {
                                 break;
@@ -1071,8 +1069,8 @@
                         foreach (var de in targetList)
                         {
                             //缁戝畾鏂扮殑鏁版嵁
-                            var addBindeDev = new AddBindData();
-                            addBindeDev.DeviceAddr = curControlDev.DeviceAddr;
+                            var addSingleBindData = new AddSingleBindData();
+                            addSingleBindData.DeviceAddr = curControlDev.DeviceAddr;
 
                             if (curBindType == 3)
                             {
@@ -1081,7 +1079,7 @@
                                     for (int j = 0; j < curSupportDimmerEpointList.Count; j++)
                                     {
                                         curSendEpointList.Add(curSupportDimmerEpointList[0]);
-                                        addBindeDev.Epoint = curControlDev.DeviceEpoint = curSupportDimmerEpointList[0];
+                                        addSingleBindData.Epoint = curControlDev.DeviceEpoint = curSupportDimmerEpointList[0];
                                         break;
                                     }
                                 }
@@ -1091,7 +1089,7 @@
                                     for (int j = 0; j < curSupportLightEpointList.Count; j++)
                                     {
                                         curSendEpointList.Add(curSupportLightEpointList[0]);
-                                        addBindeDev.Epoint = curControlDev.DeviceEpoint = curSupportLightEpointList[0];
+                                        addSingleBindData.Epoint = curControlDev.DeviceEpoint = curSupportLightEpointList[0];
                                         break;
                                     }
                                 }
@@ -1101,68 +1099,48 @@
                                 for (int j = 0; j < curSupportBindEpointList.Count; j++)
                                 {
                                     curSendEpointList.Add(curSupportBindEpointList[0]);
-                                    addBindeDev.Epoint = curControlDev.DeviceEpoint = curSupportBindEpointList[0];
+                                    addSingleBindData.Epoint = curControlDev.DeviceEpoint = curSupportBindEpointList[0];
                                     break;
                                 }
                             }
 
-                            var addBindInfo = new AddBindListObj();
-                            addBindInfo.BindType = 0;
-                            addBindInfo.BindMacAddr = de.DeviceAddr;
-                            addBindInfo.BindEpoint = de.DeviceEpoint;
+                            addSingleBindData.BindType = 0;
+                            addSingleBindData.BindMacAddr = de.DeviceAddr;
+                            addSingleBindData.BindEpoint = de.DeviceEpoint;
                             switch (curBindType)
                             {
                                 case 0:
-                                    addBindInfo.BindCluster = 6;
-                                    break;
                                 case 1:
-                                    addBindInfo.BindCluster = 6;
-                                    break;
                                 case 2:
-                                    addBindInfo.BindCluster = 6;
+                                    addSingleBindData.BindClusterList.Add(6);
                                     break;
                                 case 3:
-                                    addBindInfo.BindCluster = 6;
-                                    break;
-                                case 4:
-                                    addBindInfo.BindCluster = 258;
-                                    break;
-                                case 5:
-                                    addBindInfo.BindCluster = 513;
-                                    break;
-                                case 6:
-                                    addBindInfo.BindCluster = 514;
-                                    break;
-                            }
-                            addBindeDev.BindList.Add(addBindInfo);
-
-                            //閮ㄥ垎鐩爣闇�瑕佷簩娆$粦瀹氱浜岀鍔熻兘
-                            var addBindInfo2 = new AddBindListObj();
-                            addBindInfo2.BindType = 0;
-                            addBindInfo2.BindMacAddr = de.DeviceAddr;
-                            addBindInfo2.BindEpoint = de.DeviceEpoint;
-                            switch (curBindType)
-                            {
-                                case 3:
+                                    addSingleBindData.BindClusterList.Add(6);
                                     var device = LocalDevice.Current.GetDevice(de.DeviceAddr, de.DeviceEpoint);
                                     if (device != null)
                                     {
                                         if (device.Type == DeviceType.DimmableLight)
                                         {
                                             //鐏厜涓鸿皟鍏夋椂闇�瑕佺粦瀹�6锛�8
-                                            addBindInfo2.BindCluster = 8;
-                                            addBindeDev.BindList.Add(addBindInfo2);
+                                            addSingleBindData.BindClusterList.Add(8);
                                         }
                                     }
                                     break;
+                                case 4:
+                                    addSingleBindData.BindClusterList.Add(258);
+                                    break;
                                 case 5:
                                     //瑕佺粦瀹氱┖璋冿細闇�瑕佺粦瀹�513锛�514
-                                    addBindInfo2.BindCluster = 514;
-                                    addBindeDev.BindList.Add(addBindInfo2);
+                                    addSingleBindData.BindClusterList.Add(513);
+                                    addSingleBindData.BindClusterList.Add(514);
+                                    break;
+                                case 6:
+                                    addSingleBindData.BindClusterList.Add(514);
                                     break;
                             }
 
-                            var resT = AddDeviceBind(addBindeDev, targetSendCount, ref targetRecCount);
+
+                            var resT = AddDeviceBind(addSingleBindData, targetSendCount, ref targetRecCount);
                             if (!resT)
                             {
                                 break;
@@ -1186,36 +1164,36 @@
         /// <summary>
         /// AddDeviceBind
         /// </summary>
-        /// <param name="addBindeDev"></param>
+        /// <param name="addSingleBindData"></param>
         /// <param name="targetSendCount"></param>
         /// <param name="targetRecCount"></param>
         /// <returns></returns>
-        private bool AddDeviceBind(AddBindData addBindeDev, int targetSendCount, ref int targetRecCount)
+        private bool AddDeviceBind(AddSingleBindData addSingleBindData, int targetSendCount, ref int targetRecCount)
         {
             var addSuccess = false;
-            var dev = HdlDeviceBindLogic.Current.AddDeviceBindAsync(addBindeDev);
-            if (dev != null && dev.addedDeviceBindResponseData != null)
+            var dev = HdlDeviceBindLogic.Current.AddDeviceSingleBindAsync(addSingleBindData);
+            if (dev != null && dev.addedDeviceSingleBindResponseData != null)
             {
                 addSuccess = true;
                 targetRecCount++;
-                if (dev.addedDeviceBindResponseData.Result == 0)
+                if (dev.addedDeviceSingleBindResponseData.Result == 0)
                 {
                     var countTotal = targetRecCount;
-
                     var bList = new List<BindListAllInfo>();
-                    foreach (var devB in dev.addedDeviceBindResponseData.BindList)
+                    foreach (var cluster in dev.addedDeviceSingleBindResponseData.BindClusterList)
                     {
                         var curD = new BindListAllInfo();
                         curD.KeyMacAddr = curControlDev.DeviceAddr;
                         curD.KeyEpoint = curControlDev.DeviceEpoint;
-                        curD.BindCluster = devB.BindCluster;
-                        curD.BindScenesId = devB.BindScenesId;
-                        curD.BindMacAddr = devB.BindMacAddr;
-                        curD.BindEpoint = devB.BindEpoint;
-                        curD.ESName = devB.ESName;
-                        curD.BindType = devB.BindType;
+                        curD.BindCluster = cluster;
+                        curD.BindScenesId = dev.addedDeviceSingleBindResponseData.BindScenesId;
+                        curD.BindMacAddr = dev.addedDeviceSingleBindResponseData.BindMacAddr;
+                        curD.BindEpoint = dev.addedDeviceSingleBindResponseData.BindEpoint;
+                        curD.ESName = dev.addedDeviceSingleBindResponseData.ESName;
+                        curD.BindType = dev.addedDeviceSingleBindResponseData.BindType;
                         bList.Add(curD);
                     }
+
                     if (MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.ContainsKey(curControlDev.DeviceAddr + curControlDev.DeviceEpoint))
                     {
                         MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList[curControlDev.DeviceAddr + curControlDev.DeviceEpoint] = bList;
@@ -1227,12 +1205,12 @@
 
                     if (curBindType == 3)
                     {
-                        if (addBindeDev.Epoint >= 22 && addBindeDev.Epoint <= 28)
+                        if (addSingleBindData.Epoint >= 22 && addSingleBindData.Epoint <= 28)
                         {
                             curSupportDimmerEpointList.RemoveAt(0);
 
                         }
-                        if (addBindeDev.Epoint >= 52 && addBindeDev.Epoint <= 61)
+                        if (addSingleBindData.Epoint >= 52 && addSingleBindData.Epoint <= 61)
                         {
                             curSupportLightEpointList.RemoveAt(0);
                         }
@@ -1257,7 +1235,7 @@
                         }
                     });
                 }
-                else if (dev.addedDeviceBindResponseData.Result == 1)
+                else if (dev.addedDeviceSingleBindResponseData.Result == 1)
                 {
                     Application.RunOnMainThread(() =>
                     {
@@ -1268,7 +1246,7 @@
                         new Tip()
                         {
                             MaxWidth = 150,
-                            Text = Language.StringByID(R.MyInternationalizationString.BindFailed) + "(" + "5001_1" + ")",
+                            Text = Language.StringByID(R.MyInternationalizationString.BindFailed) + "(" + "5020_1" + ")",
                             Direction = AMPopTipDirection.Up,
                             CloseTime = 1
                         }.Show(btnFinifh);
@@ -1285,7 +1263,7 @@
                         new Tip()
                         {
                             MaxWidth = 150,
-                            Text = Language.StringByID(R.MyInternationalizationString.BindUnknownError) + "(" + "5001_2" + ")",
+                            Text = Language.StringByID(R.MyInternationalizationString.BindUnknownError) + "(" + "5020_2" + ")",
                             Direction = AMPopTipDirection.Up,
                             CloseTime = 1
                         }.Show(btnFinifh);
diff --git a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs
index aaab4fc..307140e 100644
--- a/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs
+++ b/ZigbeeApp20200810/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs
@@ -546,7 +546,7 @@
                 var btnDel = rowLayout.AddDeleteControl();
                 btnDel.ButtonClickEvent += (sender, e) =>
                 {
-                    RemoveTargets(bindObj, btnDel);
+                    ClearTargets(bindObj);
                 };
                 #endregion
             }
@@ -706,7 +706,7 @@
         /// <param name="bindDevice"></param>
         /// <param name="btnDel"></param>
         /// <returns></returns>
-        private void RemoveTargets(BindListAllInfo bindDevice, Button btnDel)
+        private void RemoveTargets(BindListAllInfo bindDevice)
         {
             var delDevice = new DelDeviceBindData();
             delDevice.DeviceAddr = bindDevice.KeyMacAddr;
@@ -857,7 +857,68 @@
             });
         }
 
-
+        /// <summary>
+        /// 娓呴櫎澶氬姛鑳介潰鏉跨殑鐩爣
+        /// </summary>
+        /// <param name="bindDevice"></param>
+        /// <param name="btnDel"></param>
+        /// <returns></returns>
+        private void ClearTargets(BindListAllInfo bindDevice)
+        {
+            System.Threading.Tasks.Task.Run(() =>
+           {
+               try
+               {
+                   Application.RunOnMainThread(() =>
+                   {
+                       CommonPage.Loading.Start("");
+                   });
+                   var currentKey = new Panel();
+                   currentKey.DeviceAddr = bindDevice.KeyMacAddr;
+                   currentKey.DeviceEpoint = bindDevice.KeyEpoint;
+                   currentKey.CurrentGateWayId = curControlDev.CurrentGateWayId;
+                   var bindResult = HdlDeviceBindLogic.Current.ClearBindInfoAsync(currentKey);
+                   if (bindResult != null && bindResult.clearBindInfoResponseData != null)
+                   {
+                       if (bindResult.clearBindInfoResponseData.Result != 0)
+                       {
+                           Application.RunOnMainThread(() =>
+                           {
+                               new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RemoveFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(CommonPage.Instance);
+                               CommonPage.Loading.Hide();
+                           });
+                       }
+                       else
+                       {
+                           if (MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.ContainsKey(bindDevice.KeyMacAddr + bindDevice.KeyEpoint))
+                           {
+                               MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.Remove(bindDevice.KeyMacAddr + bindDevice.KeyEpoint);
+                           }
+                           Application.RunOnMainThread(() =>
+                           {
+                               RefreshBindListUI();
+                               CommonPage.Loading.Hide();
+                           });
+                       }
+                   }
+                   else
+                   {
+                       Application.RunOnMainThread(() =>
+                       {
+                           new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5006" + ")", Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(CommonPage.Instance);
+                       });
+                   }
+               }
+               catch { }
+               finally
+               {
+                   Application.RunOnMainThread(() =>
+                   {
+                       CommonPage.Loading.Hide();
+                   });
+               }
+           });
+        }
 
         /// <summary>
         /// 鍖归厤鐨勭被鍨嬪垪琛�
diff --git a/ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs b/ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs
index 28e3abc..abcd33e 100644
--- a/ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs
+++ b/ZigbeeApp20200810/Shared/Phone/ZigBee/Device/BindObj.cs
@@ -19,6 +19,15 @@
         }
 
         [System.Serializable]
+        public class AddedDeviceSingleBindResponseAllData : ErrorResponCommon
+        {
+            /// <summary>
+            /// 缃戝叧鐩存帴鍙嶉缁戝畾璁惧淇℃伅
+            /// </summary>
+            public AddedDeviceSingleBindResponseData addedDeviceSingleBindResponseData;
+        }
+
+        [System.Serializable]
         public class AddedDeviceBindResponseData
         {
             /// <summary>
@@ -34,6 +43,55 @@
             ///<para>1锛氱粦瀹氱洰鏍囧け璐ワ紝缁戝畾璁惧鐩爣鏈夋紡鎺�</para> 
             /// </summary>
             public int Result = -1;
+        }
+
+        [System.Serializable]
+        public class AddedDeviceSingleBindResponseData
+        {
+            /// <summary>
+            /// 鎺у埗璁惧鑺傜偣鐨刴ac鍦板潃
+            /// </summary>
+            public string DeviceAddr;
+            /// <summary>
+            /// 鎺у埗璁惧鑺傜偣鐨勭鍙e彿 
+            /// </summary>
+            public int Epoint;
+            /// <summary>
+            ///缁戝畾鍚嶇О
+            /// </summary>
+            public string BindName;
+            /// <summary>
+            /// 0锛氭垚鍔燂紝閽堝鍦烘櫙鍜岃法缃戝叧缁戝畾 
+            ///<para>1锛氬け璐ワ紝鑺傜偣璁惧鎴栧満鏅笉瀛樺湪銆�</para>
+            ///<para>2锛氬悓缃戝叧璁惧缁戝畾锛岀瓑寰呮帶鍒舵簮璁惧鍐欏叆鍙嶉缁撴灉锛涗互涓嬮潰涓婚缁撴灉涓哄噯</para> 
+            /// </summary>
+            public int Result = -1;
+            /// <summary>
+            /// 缁戝畾绫诲瀷
+            ///<para>0锛氱粦瀹氳澶� </para>
+            ///<para>1锛氱粦瀹氬満鏅�</para>
+            /// </summary>
+            public int BindType;
+            /// <summary>
+            ///缁戝畾鐨刢luster鏁扮粍
+            /// </summary>
+            public List<int> BindClusterList = new List<int>();
+            /// <summary>
+            /// 缁戝畾璁惧Mac鍦板潃锛� 褰揃indType=0鏃跺瓨鍦�
+            /// </summary>
+            public string BindMacAddr;
+            /// <summary>
+            /// 缁戝畾璁惧鐨勭鍙e彿锛屽綋BindType=0鏃跺瓨鍦�
+            /// </summary>
+            public int BindEpoint;
+            /// <summary>
+            /// 缁戝畾鍦烘櫙锛屽綋BindType=2鏃跺瓨鍦�
+            /// </summary>
+            public int BindScenesId;
+            /// <summary>
+            ///缁戝畾鐨勮澶囨垨鍦烘櫙鐨勫悕绉�
+            /// </summary>
+            public string ESName;
         }
 
         /// <summary>
@@ -97,7 +155,7 @@
             /// </summary>
             public string DeviceAddr;
             /// <summary>
-            /// 閿欒淇℃伅
+            /// 鎺у埗璁惧鑺傜偣鐨勭鍙e彿 
             /// </summary>
             public int Epoint;
             /// <summary>
@@ -166,10 +224,9 @@
             /// </summary>
             public int BindType;
             /// <summary>
-            /// 缁戝畾鐨刢luster,闇�瑕佹帶鍒惰澶囩殑OutCluster鍒楄〃涓瓨鍦ㄨcluster銆�
-            ///濡傜粦瀹氭煇涓澶囩殑on/off锛屼负6銆�
+            ///缁戝畾鐨刢lusters鏁扮粍锛岄渶瑕佹帶鍒惰澶囩殑OutCluster鍒楄〃涓瓨鍦ㄨcluster銆傚缁戝畾鏌愪釜璁惧鐨刼n/off锛屼负6銆傚缁戝畾鍦烘櫙锛屽~鏃廔d涓�6
             /// </summary>
-            public int BindCluster;
+            public List<int> BindClusterList = new List<int>();
             /// <summary>
             /// 缁戝畾璁惧Mac鍦板潃锛� 褰揃indType=0鏃跺瓨鍦�
             /// </summary>

--
Gitblit v1.8.0