From 965290476c027deb96891cde1095d9a100581a6b Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期四, 20 二月 2020 09:13:32 +0800
Subject: [PATCH] 2020-02-20 1.优化更新。

---
 Crabtree/SmartHome/UI/SimpleControl/Phone/AC/UserACPage.cs |  909 ++++++++++++++++++++++++++++++--------------------------
 1 files changed, 488 insertions(+), 421 deletions(-)

diff --git a/Crabtree/SmartHome/UI/SimpleControl/Phone/AC/UserACPage.cs b/Crabtree/SmartHome/UI/SimpleControl/Phone/AC/UserACPage.cs
index 2d8feb5..08b5cbc 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/Phone/AC/UserACPage.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/Phone/AC/UserACPage.cs
@@ -4,107 +4,107 @@
 
 namespace Shared.SimpleControl.Phone
 {
-	/// <summary>
-	/// 绌鸿皟鎺у埗鐣岄潰
-	/// </summary>
-	public class UserACPage : FrameLayout
-	{
-		/// <summary>
-		/// 褰撳墠瑙嗗浘
-		/// </summary>
-		static UserACPage curView;
-		FrameLayout acBodyView;
-		AC ac;
-		Room room;
-		ACMethod acM;
-		Button btnInterior;
-		Button btnACSwitch;
-		Button btnSetTemperature;
-		Button btnModeIcon;
-		Button btnWindIcon;
-		Button btnModeText;
-		Button btnWindModeText;
-		Button btnReduceTemperature;
-		Button BtnAddTemperature;
-		Button btnACModeRight;
-		Button btnACModeLeft;
-		Button btnACWindRight;
-		Button btnACWindLeft;
+    /// <summary>
+    /// 绌鸿皟鎺у埗鐣岄潰
+    /// </summary>
+    public class UserACPage : FrameLayout
+    {
+        /// <summary>
+        /// 褰撳墠瑙嗗浘
+        /// </summary>
+        static UserACPage curView;
+        FrameLayout acBodyView;
+        AC ac;
+        Room room;
+        ACMethod acM;
+        Button btnInterior;
+        Button btnACSwitch;
+        Button btnSetTemperature;
+        Button btnModeIcon;
+        Button btnWindIcon;
+        Button btnModeText;
+        Button btnWindModeText;
+        Button btnReduceTemperature;
+        Button BtnAddTemperature;
+        Button btnACModeRight;
+        Button btnACModeLeft;
+        Button btnACWindRight;
+        Button btnACWindLeft;
 
-		/// <summary>
-		/// 鏋勯�犲嚱鏁�
-		/// </summary>
-		/// <param name="room">Room.</param>
-		public UserACPage (AC ac, Room room)
-		{
-			this.ac = ac;
-			this.room = room;
-			curView = this;
-			acM = new ACMethod ();
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="room">Room.</param>
+        public UserACPage (AC ac, Room room)
+        {
+            this.ac = ac;
+            this.room = room;
+            curView = this;
+            acM = new ACMethod ();
 
             BackgroundColor = SkinStyle.Current.MainColor;
-			readStatus (ac);
-		}
+            readStatus (ac);
+        }
 
-		/// <summary>
-		/// 鏇存柊绌鸿皟
-		/// </summary>
-		/// <param name="subnetID">Subnet identifier.</param>
-		/// <param name="deviceID">Device identifier.</param>
-		/// <param name="acHostBytesForUpdata">Ac host bytes for updata.</param>
-		public static void UpdateStatus (AC ac)
-		{
-			Application.RunOnMainThread (() => {
-				if (curView == null) {
-					return;
-				}
-				if (curView.ac != ac) {
-					return;
-				}
-				for (int i = 0; i < curView.acBodyView.ChildrenCount; i++) {
-					try {
-						if (ac.Power == 1) {
-							curView.btnACSwitch.IsSelected = true;
-							curView.btnInterior.Text = ac.IndoorTemperature.ToString () + "掳C";
-							curView.acM.UpdataACHostModeIcon (ac.SetMode, curView.btnModeIcon, curView.btnModeText);
-							curView.acM.UpdataACHostWindIcon (ac.SetFanSpeed, curView.btnWindIcon, curView.btnWindModeText);
-							curView.acM.UpdataACModeTemperature (ac, ac.SetMode, curView.btnSetTemperature);
+        /// <summary>
+        /// 鏇存柊绌鸿皟
+        /// </summary>
+        /// <param name="subnetID">Subnet identifier.</param>
+        /// <param name="deviceID">Device identifier.</param>
+        /// <param name="acHostBytesForUpdata">Ac host bytes for updata.</param>
+        public static void UpdateStatus (AC ac)
+        {
+            Application.RunOnMainThread (() => {
+                if (curView == null) {
+                    return;
+                }
+                if (curView.ac != ac) {
+                    return;
+                }
+                for (int i = 0; i < curView.acBodyView.ChildrenCount; i++) {
+                    try {
+                        if (ac.Power == 1) {
+                            curView.btnACSwitch.IsSelected = true;
+                            curView.btnInterior.Text = ac.IndoorTemperature.ToString () + "掳C";
+                            curView.acM.UpdataACHostModeIcon (ac.SetMode, curView.btnModeIcon, curView.btnModeText);
+                            curView.acM.UpdataACHostWindIcon (ac.SetFanSpeed, curView.btnWindIcon, curView.btnWindModeText);
+                            curView.acM.UpdataACModeTemperature (ac, ac.SetMode, curView.btnSetTemperature);
 
-							//鑰冭檻鍒板叾浠栦汉鎺у埗鐨勬儏鍐典笅锛屽緱浣垮綋鍓嶇晫闈㈡洿鏂扮殑鏁版嵁鍜屽埆浜烘帶鍒剁殑涓�鏍�
-							curView.btnReduceTemperature.Enable = true;
-							curView.BtnAddTemperature.Enable = true;
-							curView.btnACModeLeft.Enable = true;
-							curView.btnACModeRight.Enable = true;
-							curView.btnACWindRight.Enable = true;
-							curView.btnACWindLeft.Enable = true;
-						} else {
-							curView.btnACSwitch.IsSelected = false;
-							curView.btnReduceTemperature.Enable = false;
-							curView.BtnAddTemperature.Enable = false;
-							curView.btnACModeLeft.Enable = false;
-							curView.btnACModeRight.Enable = false;
-							curView.btnACWindRight.Enable = false;
-							curView.btnACWindLeft.Enable = false;
-						}
-                    } catch(Exception ex ){
+                            //鑰冭檻鍒板叾浠栦汉鎺у埗鐨勬儏鍐典笅锛屽緱浣垮綋鍓嶇晫闈㈡洿鏂扮殑鏁版嵁鍜屽埆浜烘帶鍒剁殑涓�鏍�
+                            curView.btnReduceTemperature.Enable = true;
+                            curView.BtnAddTemperature.Enable = true;
+                            curView.btnACModeLeft.Enable = true;
+                            curView.btnACModeRight.Enable = true;
+                            curView.btnACWindRight.Enable = true;
+                            curView.btnACWindLeft.Enable = true;
+                        } else {
+                            curView.btnACSwitch.IsSelected = false;
+                            curView.btnReduceTemperature.Enable = false;
+                            curView.BtnAddTemperature.Enable = false;
+                            curView.btnACModeLeft.Enable = false;
+                            curView.btnACModeRight.Enable = false;
+                            curView.btnACWindRight.Enable = false;
+                            curView.btnACWindLeft.Enable = false;
+                        }
+                    } catch (Exception ex) {
                         Console.WriteLine (ex.ToString ());
-					}
-				}
-			});
-		}
+                    }
+                }
+            });
+        }
 
-		/// <summary>
-		/// 鏄剧ず鍑哄綋鍓嶆埧闂存墍鏈夌殑绌鸿皟
-		/// </summary>
+        /// <summary>
+        /// 鏄剧ず鍑哄綋鍓嶆埧闂存墍鏈夌殑绌鸿皟
+        /// </summary>
         public void showRoomAC ()
-		{
+        {
             #region 鏍囬
             var topView = new FrameLayout () {
-				Y = Application.GetRealHeight (36),
+                Y = Application.GetRealHeight (36),
                 Height = Application.GetRealHeight (90),
-                Width = Application.GetRealWidth(640),
-			};
-			AddChidren (topView);
+                Width = Application.GetRealWidth (640),
+            };
+            AddChidren (topView);
 
             var title = new Button () {
                 TextAlignment = TextAlignment.Center,
@@ -132,21 +132,21 @@
                 (Parent as PageLayout).PageIndex -= 1;
                 curView = null;
             };
-			#endregion
+            #endregion
 
-            acBodyView = new FrameLayout { 
-                Width = Application.GetRealWidth(640),
-                Height = Application.GetRealHeight (1136 - 126), 
-                Y = Application.GetRealHeight (126) 
+            acBodyView = new FrameLayout {
+                Width = Application.GetRealWidth (640),
+                Height = Application.GetRealHeight (1136 - 126),
+                Y = Application.GetRealHeight (126)
             };
             AddChidren (acBodyView);
-			#region roomBackgroundImage
-			var roomBackgroundImageView = new FrameLayout () {
-				Height = Application.GetRealHeight (360),
-                Width = Application.GetRealWidth(640),
-			};
-			acBodyView.AddChidren (roomBackgroundImageView);
-			roomBackgroundImageView.BackgroundImagePath = room.BackGroundImage;
+            #region roomBackgroundImage
+            var roomBackgroundImageView = new FrameLayout () {
+                Height = Application.GetRealHeight (360),
+                Width = Application.GetRealWidth (640),
+            };
+            acBodyView.AddChidren (roomBackgroundImageView);
+            roomBackgroundImageView.BackgroundImagePath = room.BackGroundImage;
 
             if (ac.Type == DeviceType.ACInfrared) {
                 Button btnDownIRCode = new Button () {
@@ -162,34 +162,36 @@
                 btnDownIRCode.MouseUpEventHandler += (sender, e) => {
                     var downIRCodeDialog = new ConfigIRCode ();
                     downIRCodeDialog.Show ();
-                    downIRCodeDialog.ShowSystemInfrared (ac,true);
+                    downIRCodeDialog.ShowSystemInfrared (ac, true);
                 };
             }
 
             FrameLayout setACTemp = new FrameLayout () {
-				Height = Application.GetMinRealAverage (106),
-                Width = Application.GetRealWidth(640),
-				BackgroundColor = SkinStyle.Current.MainColor,
-				Y = Application.GetMinRealAverage (360),
-			};
+                Height = Application.GetMinRealAverage (106),
+                Width = Application.GetRealWidth (640),
+                BackgroundColor = SkinStyle.Current.MainColor,
+                Y = Application.GetMinRealAverage (360),
+            };
             acBodyView.AddChidren (setACTemp);
 
-			btnACSwitch = new Button () {
-				Width = Application.GetMinRealAverage (115),
-				Height = Application.GetMinRealAverage (115),
-				X = Application.GetRealWidth (640 - 152),
-				UnSelectedImagePath = "FH/FH_Switch.png",
-				SelectedImagePath = "FH/FH_Switch_on.png",
-			};
-			btnACSwitch.IsSelected = ac.Power == 1;
-			btnACSwitch.MouseUpEventHandler += (sender, e) => {
+            btnACSwitch = new Button () {
+                Width = Application.GetMinRealAverage (115),
+                Height = Application.GetMinRealAverage (115),
+                X = Application.GetRealWidth (640 - 152),
+                UnSelectedImagePath = "FH/FH_Switch.png",
+                SelectedImagePath = "FH/FH_Switch_on.png",
+            };
+            btnACSwitch.IsSelected = ac.Power == 1;
+            btnACSwitch.MouseUpEventHandler += (sender, e) => {
                 btnACSwitch.IsSelected = !btnACSwitch.IsSelected;
                 ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
                 UpdateStatus (ac);
                 if (ac.Type == DeviceType.ACPanel) {
-                    Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 3, ac.Power, ac.LoopID });
+                    //Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 3, ac.Power, ac.LoopID });
+                    SendControlACPanel (ac, new byte [] { 3, ac.Power, ac.LoopID });
                 } else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
-                    Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, ac.Power, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    //Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, ac.Power, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    SendControlHVAC (ac);
                 } else if (ac.Type == DeviceType.CustomAC) {
                     var acCommon = ac as CustomAC;
                     var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power);
@@ -199,67 +201,67 @@
                     }
                 }
             };
-			setACTemp.AddChidren (btnACSwitch);
+            setACTemp.AddChidren (btnACSwitch);
 
-			var btnText = new Button () {
-				Width = Application.GetRealWidth (150),
-				Height = Application.GetRealHeight (40),
-				X = Application.GetRealWidth (15),
-				Y = Application.GetRealHeight (22),
-				TextID = R.MyInternationalizationString.ACInterior,
-				TextAlignment = TextAlignment.BottomCenter,
+            var btnText = new Button () {
+                Width = Application.GetRealWidth (150),
+                Height = Application.GetRealHeight (40),
+                X = Application.GetRealWidth (15),
+                Y = Application.GetRealHeight (22),
+                TextID = R.MyInternationalizationString.ACInterior,
+                TextAlignment = TextAlignment.BottomCenter,
                 TextColor = SkinStyle.Current.TextColor1
-			};
-			setACTemp.AddChidren (btnText);
+            };
+            setACTemp.AddChidren (btnText);
 
-			btnInterior = new Button () {
-				Width = Application.GetRealWidth (150),
-				Height = Application.GetRealHeight (40),
-				X = Application.GetRealWidth (10),
-				Y = btnText.Bottom,
-				Text = ac.IndoorTemperature.ToString () + "掳C",
-				TextSize = 14,
-				TextAlignment = TextAlignment.Center,
+            btnInterior = new Button () {
+                Width = Application.GetRealWidth (150),
+                Height = Application.GetRealHeight (40),
+                X = Application.GetRealWidth (10),
+                Y = btnText.Bottom,
+                Text = ac.IndoorTemperature.ToString () + "掳C",
+                TextSize = 14,
+                TextAlignment = TextAlignment.Center,
                 TextColor = SkinStyle.Current.TextColor1
-			};
-			setACTemp.AddChidren (btnInterior);
+            };
+            setACTemp.AddChidren (btnInterior);
 
-			//闀挎寜鏇存崲鑳屾櫙
+            //闀挎寜鏇存崲鑳屾櫙
             roomBackgroundImageView.MouseLongEventHandler += (sender, e) => {
-			    Camera.SelectPicture ((obj) => {
-			        if (obj != null) {
+                Camera.SelectPicture ((obj) => {
+                    if (obj != null) {
                         room.BackGroundImage = obj;
                         roomBackgroundImageView.BackgroundImagePath = obj;
                         room.Save (typeof (Room).Name + "_" + room.Name);
-			        }
-			    }, room.Name);
+                    }
+                }, room.Name);
 
-			};
+            };
 
-			#endregion
+            #endregion
 
-			#region acTemperature
+            #region acTemperature
             FrameLayout acTemperatureView = new FrameLayout () {
-				Height = Application.GetRealHeight (550 / 3 - 40),
-                Width = Application.GetRealWidth(640),
-				BackgroundColor = SkinStyle.Current.ViewColor,
+                Height = Application.GetRealHeight (550 / 3 - 40),
+                Width = Application.GetRealWidth (640),
+                BackgroundColor = SkinStyle.Current.ViewColor,
                 Y = setACTemp.Bottom,
-			};
-			acBodyView.AddChidren (acTemperatureView);
+            };
+            acBodyView.AddChidren (acTemperatureView);
 
-			var btnACTemp = new Button () {
-				Width = Application.GetRealWidth (200),
-				Height = Application.GetRealHeight (30),
-				Gravity = Gravity.CenterHorizontal,
-				Y = Application.GetRealHeight (19),
-				TextID = R.MyInternationalizationString.Temperature,
+            var btnACTemp = new Button () {
+                Width = Application.GetRealWidth (200),
+                Height = Application.GetRealHeight (30),
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight (19),
+                TextID = R.MyInternationalizationString.Temperature,
                 TextColor = SkinStyle.Current.ButtonColor,
-			};
-			acTemperatureView.AddChidren (btnACTemp);
+            };
+            acTemperatureView.AddChidren (btnACTemp);
 
             btnSetTemperature = new Button () {
                 Width = Application.GetMinRealAverage (120),
-                Y = Application.GetRealHeight(10),
+                Y = Application.GetRealHeight (10),
                 Gravity = Gravity.CenterHorizontal,
                 Text = ac.SetTemperature.ToString () + "掳C",
                 TextSize = 20,
@@ -267,64 +269,67 @@
                 Enable = false,
                 TextColor = SkinStyle.Current.TextColor1
             };
-			acTemperatureView.AddChidren (btnSetTemperature);
+            acTemperatureView.AddChidren (btnSetTemperature);
 
-			btnReduceTemperature = new Button () {
-				Width = Application.GetMinRealAverage (129),
-				Height = Application.GetMinRealAverage (129),
-				X = Application.GetRealWidth (30),
-				Gravity = Gravity.CenterVertical,
-				UnSelectedImagePath = "AC/ac-1.png",
-				SelectedImagePath = "AC/ac_on-.png",
-			};
-			acTemperatureView.AddChidren (btnReduceTemperature);
-			btnReduceTemperature.MouseDownEventHandler += (sender, e) => {
-				btnReduceTemperature.IsSelected = true;
-			};
-			btnReduceTemperature.MouseUpEventHandler += (sender, e) => {
-				btnReduceTemperature.IsSelected = false;
+            btnReduceTemperature = new Button () {
+                Width = Application.GetMinRealAverage (129),
+                Height = Application.GetMinRealAverage (129),
+                X = Application.GetRealWidth (30),
+                Gravity = Gravity.CenterVertical,
+                UnSelectedImagePath = "AC/ac-1.png",
+                SelectedImagePath = "AC/ac_on-.png",
+            };
+            acTemperatureView.AddChidren (btnReduceTemperature);
+            btnReduceTemperature.MouseDownEventHandler += (sender, e) => {
+                btnReduceTemperature.IsSelected = true;
+            };
+            btnReduceTemperature.MouseUpEventHandler += (sender, e) => {
+                btnReduceTemperature.IsSelected = false;
                 if (ac.SetMode == 2) {
                     return;
                 }
-				if (ac.SetTemperature <= 0) {
-					ac.SetTemperature = 16;
-				}
-				if (--ac.SetTemperature <= 16) {
-					ac.SetTemperature = 16;
-				}
+                if (ac.SetTemperature <= 0) {
+                    ac.SetTemperature = 16;
+                }
+                if (--ac.SetTemperature <= 16) {
+                    ac.SetTemperature = 16;
+                }
                 byte modeKey = 4;
-				switch (ac.SetMode) {
-				//cooling
-				case 0:
-					ac.CoolTemperature = ac.SetTemperature;
+                switch (ac.SetMode) {
+                //cooling
+                case 0:
+                    ac.CoolTemperature = ac.SetTemperature;
                     modeKey = 4;
-					break;
-				//Heating
-				case 1:
-					ac.HeatTemperature = ac.SetTemperature;
+                    break;
+                //Heating
+                case 1:
+                    ac.HeatTemperature = ac.SetTemperature;
                     modeKey = 7;
-					break;
-				//Fan
-				case 2:
-					ac.IndoorTemperature = ac.SetTemperature;
+                    break;
+                //Fan
+                case 2:
+                    ac.IndoorTemperature = ac.SetTemperature;
                     modeKey = 2;
-					break;
-				//  Auto
-				case 3:
-					ac.AutoTemperature = ac.SetTemperature;
+                    break;
+                //  Auto
+                case 3:
+                    ac.AutoTemperature = ac.SetTemperature;
                     modeKey = 8;
-					break;
-				//Dry
-				case 4:
-					ac.ChuShiTemperature = ac.SetTemperature;
+                    break;
+                //Dry
+                case 4:
+                    ac.ChuShiTemperature = ac.SetTemperature;
                     modeKey = 19;
-					break;
-				}
+                    break;
+                }
                 UpdateStatus (ac);
                 if (ac.Type == DeviceType.ACPanel) {
-                    Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { modeKey, ac.SetTemperature, ac.LoopID });
+                    //Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { modeKey, ac.SetTemperature, ac.LoopID });
+                    SendControlACPanel (ac, new byte [] { modeKey, ac.SetTemperature, ac.LoopID });
                 } else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
-                    Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    //Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
+                    SendControlHVAC (ac);
                 } else if (ac.Type == DeviceType.CustomAC) {
                     var acCommon = ac as CustomAC;
                     var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
@@ -333,61 +338,64 @@
                         IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
                     }
                 }
-			};
+            };
 
-			BtnAddTemperature = new Button () {
-				Width = Application.GetMinRealAverage (129),
-				Height = Application.GetMinRealAverage (129),
-				X = Application.GetRealWidth (640 - 129 - 30),
-				Gravity = Gravity.CenterVertical,
-				UnSelectedImagePath = "AC/ac+1.png",
-				SelectedImagePath = "AC/ac_on+.png",
-			};
-			acTemperatureView.AddChidren (BtnAddTemperature);
-			BtnAddTemperature.MouseDownEventHandler += (sender, e) => {
-				BtnAddTemperature.IsSelected = true;
-			};
-			BtnAddTemperature.MouseUpEventHandler += (sender, e) => {
-				BtnAddTemperature.IsSelected = false;
+            BtnAddTemperature = new Button () {
+                Width = Application.GetMinRealAverage (129),
+                Height = Application.GetMinRealAverage (129),
+                X = Application.GetRealWidth (640 - 129 - 30),
+                Gravity = Gravity.CenterVertical,
+                UnSelectedImagePath = "AC/ac+1.png",
+                SelectedImagePath = "AC/ac_on+.png",
+            };
+            acTemperatureView.AddChidren (BtnAddTemperature);
+            BtnAddTemperature.MouseDownEventHandler += (sender, e) => {
+                BtnAddTemperature.IsSelected = true;
+            };
+            BtnAddTemperature.MouseUpEventHandler += (sender, e) => {
+                BtnAddTemperature.IsSelected = false;
                 if (ac.SetMode == 2) {
                     return;
                 }
-				if (++ac.SetTemperature > 30) {
-					ac.SetTemperature = 30;
-				}
+                if (++ac.SetTemperature > 30) {
+                    ac.SetTemperature = 30;
+                }
 
                 byte modeKey = 4;
-				switch (ac.SetMode) {
-				//cooling
-				case 0:
-					ac.CoolTemperature = ac.SetTemperature;
+                switch (ac.SetMode) {
+                //cooling
+                case 0:
+                    ac.CoolTemperature = ac.SetTemperature;
                     modeKey = 4;
-					break;
-				//Heating
-				case 1:
-					ac.HeatTemperature = ac.SetTemperature;
+                    break;
+                //Heating
+                case 1:
+                    ac.HeatTemperature = ac.SetTemperature;
                     modeKey = 7;
-					break;
-				//Fan
-				case 2:
-					ac.IndoorTemperature = ac.SetTemperature;
-					break;
-				// Auto
-				case 3:
-					ac.AutoTemperature = ac.SetTemperature;
+                    break;
+                //Fan
+                case 2:
+                    ac.IndoorTemperature = ac.SetTemperature;
+                    break;
+                // Auto
+                case 3:
+                    ac.AutoTemperature = ac.SetTemperature;
                     modeKey = 8;
-					break;
-				//Dry
-				case 4:
-					ac.ChuShiTemperature = ac.SetTemperature;
+                    break;
+                //Dry
+                case 4:
+                    ac.ChuShiTemperature = ac.SetTemperature;
                     modeKey = 19;
-					break;
-				}
+                    break;
+                }
                 UpdateStatus (ac);
                 if (ac.Type == DeviceType.ACPanel) {
-                    Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { modeKey, ac.SetTemperature, ac.LoopID });
+                    //Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { modeKey, ac.SetTemperature, ac.LoopID });
+                    SendControlACPanel (ac, new byte [] { modeKey, ac.SetTemperature, ac.LoopID });
                 } else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
-                    Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    //Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
+                    SendControlHVAC (ac);
                 } else if (ac.Type == DeviceType.CustomAC) {
                     var acCommon = ac as CustomAC;
                     var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
@@ -396,82 +404,86 @@
                         IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
                     }
                 }
-			};
+            };
             #endregion
-            Button btnTNull = new Button () { 
+            Button btnTNull = new Button () {
                 Height = 1,
                 BackgroundColor = SkinStyle.Current.MainColor,
                 Y = acTemperatureView.Bottom,
             };
             acBodyView.AddChidren (btnTNull);
 
-			#region 妯″紡
-			var acModeView = new FrameLayout () {
-				Height = Application.GetRealHeight (550 / 3 + 20),
-                Width = Application.GetRealWidth(640),
+            #region 妯″紡
+            var acModeView = new FrameLayout () {
+                Height = Application.GetRealHeight (550 / 3 + 20),
+                Width = Application.GetRealWidth (640),
                 BackgroundColor = SkinStyle.Current.ViewColor,
                 Y = btnTNull.Bottom,
-			};
-			acBodyView.AddChidren (acModeView);
+            };
+            acBodyView.AddChidren (acModeView);
 
-			btnACModeLeft = new Button () {
-				Width = Application.GetMinRealAverage (129),
-				Height = Application.GetMinRealAverage (129),
-				X = Application.GetRealWidth (30),
-				Gravity = Gravity.CenterVertical,
-				UnSelectedImagePath = "AC/ac_left.png",
-				SelectedImagePath = "AC/ACLeftSelected.png",
-			};
-			acModeView.AddChidren (btnACModeLeft);
-			var btnModeName = new Button () {
-				Width = Application.GetRealWidth (200),
-				Height = Application.GetRealHeight (30),
-				Gravity = Gravity.CenterHorizontal,
-				Y = Application.GetRealHeight (25),
-				TextID = R.MyInternationalizationString.UserACMode,
-				TextColor = SkinStyle.Current.ButtonColor,
-			};
-			acModeView.AddChidren (btnModeName);
-			btnModeIcon = new Button () {
-				Width = Application.GetMinRealAverage (110),
-				Height = Application.GetMinRealAverage (112),
-				Gravity = Gravity.Center,
-				Y = btnModeName.Bottom + Application.GetRealHeight (10),
-				UnSelectedImagePath = "AC/ACRefrigeration.png",
-			};
-			acModeView.AddChidren (btnModeIcon);
+            btnACModeLeft = new Button () {
+                Width = Application.GetMinRealAverage (129),
+                Height = Application.GetMinRealAverage (129),
+                X = Application.GetRealWidth (30),
+                Gravity = Gravity.CenterVertical,
+                UnSelectedImagePath = "AC/ac_left.png",
+                SelectedImagePath = "AC/ACLeftSelected.png",
+            };
+            acModeView.AddChidren (btnACModeLeft);
+            var btnModeName = new Button () {
+                Width = Application.GetRealWidth (200),
+                Height = Application.GetRealHeight (30),
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight (25),
+                TextID = R.MyInternationalizationString.UserACMode,
+                TextColor = SkinStyle.Current.ButtonColor,
+            };
+            acModeView.AddChidren (btnModeName);
+            btnModeIcon = new Button () {
+                Width = Application.GetMinRealAverage (110),
+                Height = Application.GetMinRealAverage (112),
+                Gravity = Gravity.Center,
+                Y = btnModeName.Bottom + Application.GetRealHeight (10),
+                UnSelectedImagePath = "AC/ACRefrigeration.png",
+            };
+            acModeView.AddChidren (btnModeIcon);
             btnModeText = new Button () {
                 Width = Application.GetRealWidth (200),
                 Height = Application.GetRealHeight (50),
                 TextID = R.MyInternationalizationString.Cool,
-				Gravity = Gravity.CenterHorizontal,
-				Y = btnModeIcon.Bottom - Application.GetRealHeight (20),
+                Gravity = Gravity.CenterHorizontal,
+                Y = btnModeIcon.Bottom - Application.GetRealHeight (20),
                 TextColor = SkinStyle.Current.TextColor1
-			};
-			acModeView.AddChidren (btnModeText);
-			btnACModeRight = new Button () {
-				Width = Application.GetMinRealAverage (129),
-				Height = Application.GetMinRealAverage (129),
-				X = Application.GetRealWidth (640 - 129 - 30),
-				Gravity = Gravity.CenterVertical,
-				UnSelectedImagePath = "AC/ac_right.png",
-				SelectedImagePath = "AC/ACRightSelected.png",
-			};
-			acModeView.AddChidren (btnACModeRight);
+            };
+            acModeView.AddChidren (btnModeText);
+            btnACModeRight = new Button () {
+                Width = Application.GetMinRealAverage (129),
+                Height = Application.GetMinRealAverage (129),
+                X = Application.GetRealWidth (640 - 129 - 30),
+                Gravity = Gravity.CenterVertical,
+                UnSelectedImagePath = "AC/ac_right.png",
+                SelectedImagePath = "AC/ACRightSelected.png",
+            };
+            acModeView.AddChidren (btnACModeRight);
 
-			btnACModeRight.MouseDownEventHandler += (sender, e) => {
-				btnACModeRight.IsSelected = true;
-			};
-			btnACModeRight.MouseUpEventHandler += (sender, e) => {
-				btnACModeRight.IsSelected = false;
-				if (++ac.SetMode > 4) {
-					ac.SetMode = 0;
-				}
+            btnACModeRight.MouseDownEventHandler += (sender, e) => {
+                btnACModeRight.IsSelected = true;
+            };
+            btnACModeRight.MouseUpEventHandler += (sender, e) => {
+                btnACModeRight.IsSelected = false;
+                if (++ac.SetMode > 4) {
+                    ac.SetMode = 0;
+                }
                 UpdateStatus (ac);
                 if (ac.Type == DeviceType.ACPanel) {
-                    Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.SetMode, ac.LoopID });
+                    //Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.SetMode, ac.LoopID });
+                    SendControlACPanel (ac, new byte [] { 6, ac.SetMode, ac.LoopID });
+
                 } else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
-                    Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    //Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
+                    SendControlHVAC (ac);
                 } else if (ac.Type == DeviceType.CustomAC) {
                     var acCommon = ac as CustomAC;
                     var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
@@ -480,27 +492,31 @@
                         IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
                     }
                 }
-			};
-			btnACModeLeft.MouseDownEventHandler += (sender, e) => {
-				btnACModeLeft.IsSelected = true;
-			};
-			btnACModeLeft.MouseUpEventHandler += (sender, e) => {
-				btnACModeLeft.IsSelected = false;
-				try {
-					if (ac.SetMode == 0 )
-						ac.SetMode = 4;
-                    else{
+            };
+            btnACModeLeft.MouseDownEventHandler += (sender, e) => {
+                btnACModeLeft.IsSelected = true;
+            };
+            btnACModeLeft.MouseUpEventHandler += (sender, e) => {
+                btnACModeLeft.IsSelected = false;
+                try {
+                    if (ac.SetMode == 0)
+                        ac.SetMode = 4;
+                    else {
                         ac.SetMode--;
                     }
                 } catch {
-					ac.SetMode = 4;
-				}
-				UpdateStatus (ac);
-				acM.UpdataACHostModeIcon (ac.SetMode, btnModeIcon);
+                    ac.SetMode = 4;
+                }
+                UpdateStatus (ac);
+                acM.UpdataACHostModeIcon (ac.SetMode, btnModeIcon);
                 if (ac.Type == DeviceType.ACPanel) {
-                    Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.SetMode, ac.LoopID });
+                    //Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.SetMode, ac.LoopID });
+                    SendControlACPanel (ac, new byte [] { 6, ac.SetMode, ac.LoopID });
+
                 } else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
-                    Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    //Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
+                    SendControlHVAC (ac);
                 } else if (ac.Type == DeviceType.CustomAC) {
                     var acCommon = ac as CustomAC;
                     var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
@@ -509,81 +525,85 @@
                         IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
                     }
                 }
-			};
-			#endregion
+            };
+            #endregion
 
-			var btnLine1 = new Button () {
+            var btnLine1 = new Button () {
                 Height = 1,
-				BackgroundColor = SkinStyle.Current.MainColor,
-				Y = acModeView.Bottom,
-			};
+                BackgroundColor = SkinStyle.Current.MainColor,
+                Y = acModeView.Bottom,
+            };
             acBodyView.AddChidren (btnLine1);
 
-			#region 椋庨��
-			var acWindView = new FrameLayout () {
-				Height = Application.GetRealHeight (230),
-                Width = Application.GetRealWidth(640),
-				Y = btnLine1.Bottom,
+            #region 椋庨��
+            var acWindView = new FrameLayout () {
+                Height = Application.GetRealHeight (230),
+                Width = Application.GetRealWidth (640),
+                Y = btnLine1.Bottom,
                 BackgroundColor = SkinStyle.Current.ViewColor,
-			};
-			acBodyView.AddChidren (acWindView);
+            };
+            acBodyView.AddChidren (acWindView);
 
-			btnACWindLeft = new Button () {
-				Width = Application.GetMinRealAverage (129),
-				Height = Application.GetMinRealAverage (129),
-				X = Application.GetRealWidth (30),
-				Gravity = Gravity.CenterVertical,
-				UnSelectedImagePath = "AC/ac_left.png",
-				SelectedImagePath = "AC/ACLeftSelected.png",
-			};
-			acWindView.AddChidren (btnACWindLeft);
-			var btnWindName = new Button () {
-				Width = Application.GetRealWidth (200),
-				Height = Application.GetRealHeight (30),
-				Gravity = Gravity.CenterHorizontal,
-				Y = Application.GetRealHeight (21),
-				TextID = R.MyInternationalizationString.Speed,
+            btnACWindLeft = new Button () {
+                Width = Application.GetMinRealAverage (129),
+                Height = Application.GetMinRealAverage (129),
+                X = Application.GetRealWidth (30),
+                Gravity = Gravity.CenterVertical,
+                UnSelectedImagePath = "AC/ac_left.png",
+                SelectedImagePath = "AC/ACLeftSelected.png",
+            };
+            acWindView.AddChidren (btnACWindLeft);
+            var btnWindName = new Button () {
+                Width = Application.GetRealWidth (200),
+                Height = Application.GetRealHeight (30),
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight (21),
+                TextID = R.MyInternationalizationString.Speed,
                 TextColor = SkinStyle.Current.ButtonColor,
-			};
-			acWindView.AddChidren (btnWindName);
-			btnWindIcon = new Button () {
-				Width = Application.GetMinRealAverage (110),
-				Height = Application.GetMinRealAverage (112),
-				X = Application.GetRealWidth (262),
-				Y = Application.GetMinRealAverage (44),
-				UnSelectedImagePath = "AC/ACAuto.png",
-			};
-			acWindView.AddChidren (btnWindIcon);
-			btnWindModeText = new Button () {
-				Width = Application.GetRealWidth (200),
-				Height = Application.GetRealHeight (50),
-				TextID = R.MyInternationalizationString.High,
-				Gravity = Gravity.CenterHorizontal,
+            };
+            acWindView.AddChidren (btnWindName);
+            btnWindIcon = new Button () {
+                Width = Application.GetMinRealAverage (110),
+                Height = Application.GetMinRealAverage (112),
+                X = Application.GetRealWidth (262),
+                Y = Application.GetMinRealAverage (44),
+                UnSelectedImagePath = "AC/ACAuto.png",
+            };
+            acWindView.AddChidren (btnWindIcon);
+            btnWindModeText = new Button () {
+                Width = Application.GetRealWidth (200),
+                Height = Application.GetRealHeight (50),
+                TextID = R.MyInternationalizationString.High,
+                Gravity = Gravity.CenterHorizontal,
                 TextColor = SkinStyle.Current.TextColor1,
-				Y = btnWindIcon.Bottom - Application.GetRealHeight (16),
-			};
-			acWindView.AddChidren (btnWindModeText);
-			btnACWindRight = new Button () {
-				Width = Application.GetMinRealAverage (129),
-				Height = Application.GetMinRealAverage (129),
-				X = btnACModeRight.X,
-				Gravity = Gravity.CenterVertical,
-				UnSelectedImagePath = "AC/ac_right.png",
-				SelectedImagePath = "AC/ACRightSelected.png",
-			};
-			btnACWindLeft.MouseDownEventHandler += (sender, e) => {
-				btnACWindLeft.IsSelected = true;
-			};
-			btnACWindLeft.MouseUpEventHandler += (sender, e) => {
-				btnACWindLeft.IsSelected = false;
-				if (++ac.SetFanSpeed > 3)
-					ac.SetFanSpeed = 0;
-				//acM.UpdataACHostWindIcon (ac.SetFanSpeed, btnWindIcon);
+                Y = btnWindIcon.Bottom - Application.GetRealHeight (16),
+            };
+            acWindView.AddChidren (btnWindModeText);
+            btnACWindRight = new Button () {
+                Width = Application.GetMinRealAverage (129),
+                Height = Application.GetMinRealAverage (129),
+                X = btnACModeRight.X,
+                Gravity = Gravity.CenterVertical,
+                UnSelectedImagePath = "AC/ac_right.png",
+                SelectedImagePath = "AC/ACRightSelected.png",
+            };
+            btnACWindLeft.MouseDownEventHandler += (sender, e) => {
+                btnACWindLeft.IsSelected = true;
+            };
+            btnACWindLeft.MouseUpEventHandler += (sender, e) => {
+                btnACWindLeft.IsSelected = false;
+                if (++ac.SetFanSpeed > 3)
+                    ac.SetFanSpeed = 0;
+                //acM.UpdataACHostWindIcon (ac.SetFanSpeed, btnWindIcon);
                 UpdateStatus (ac);
                 if (ac.Type == DeviceType.ACPanel) {
-                    Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.SetFanSpeed, ac.LoopID });
+                    //Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.SetFanSpeed, ac.LoopID });
+                    SendControlACPanel (ac, new byte [] { 5, ac.SetFanSpeed, ac.LoopID });
+
                 } else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
-                    Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    //Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
+                    SendControlHVAC (ac);
                 } else if (ac.Type == DeviceType.CustomAC) {
                     var acCommon = ac as CustomAC;
                     var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
@@ -593,26 +613,30 @@
                     }
                 }
 
-			};
-			acWindView.AddChidren (btnACWindRight);
-			btnACWindRight.MouseDownEventHandler += (sender, e) => {
-				btnACWindRight.IsSelected = true;
-			};
-			btnACWindRight.MouseUpEventHandler += (sender, e) => {
-				btnACWindRight.IsSelected = false;
-				try {
-					ac.SetFanSpeed--;
-					if (ac.SetFanSpeed < 0 || ac.SetFanSpeed > 3)
-						ac.SetFanSpeed = 3;
-				} catch {
-					ac.SetFanSpeed = 3;
-				}
+            };
+            acWindView.AddChidren (btnACWindRight);
+            btnACWindRight.MouseDownEventHandler += (sender, e) => {
+                btnACWindRight.IsSelected = true;
+            };
+            btnACWindRight.MouseUpEventHandler += (sender, e) => {
+                btnACWindRight.IsSelected = false;
+                try {
+                    ac.SetFanSpeed--;
+                    if (ac.SetFanSpeed < 0 || ac.SetFanSpeed > 3)
+                        ac.SetFanSpeed = 3;
+                } catch {
+                    ac.SetFanSpeed = 3;
+                }
 
                 UpdateStatus (ac);
                 if (ac.Type == DeviceType.ACPanel) {
-                    Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.SetFanSpeed, ac.LoopID });
+                    //Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.SetFanSpeed, ac.LoopID });
+                    SendControlACPanel (ac, new byte [] { 5, ac.SetFanSpeed, ac.LoopID });
+
                 } else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
-                    Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    //Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
+                    ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
+                    SendControlHVAC (ac);
                 } else if (ac.Type == DeviceType.CustomAC) {
                     var acCommon = ac as CustomAC;
                     var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
@@ -621,35 +645,78 @@
                         IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
                     }
                 }
-			};
+            };
 
-			#endregion
+            #endregion
 
-			UpdateStatus (ac);
-		}
+            UpdateStatus (ac);
+        }
 
 
-		/// <summary>
-		/// 璇诲彇璁惧鐘舵��
-		/// </summary>
-		static void readStatus (AC ac)
-		{
-			System.Threading.Tasks.Task.Run (() => {
+        /// <summary>
+        /// 璇诲彇璁惧鐘舵��
+        /// </summary>
+        static void readStatus (AC ac)
+        {
+            System.Threading.Tasks.Task.Run (() => {
                 if (ac.LastUpdateTime.AddMinutes (Common.Time) <= DateTime.Now) {
                     if (ac.Type == DeviceType.ACPanel) {
-                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 3, ac.LoopID , ac.LoopID }, SendCount.Zero);
-                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 4, ac.LoopID , ac.LoopID }, SendCount.Zero);
-                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.LoopID , ac.LoopID }, SendCount.Zero);
-                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.LoopID , ac.LoopID }, SendCount.Zero);
-                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 7, ac.LoopID , ac.LoopID }, SendCount.Zero);
-                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 8, ac.LoopID , ac.LoopID }, SendCount.Zero);
-                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 19, ac.LoopID, ac.LoopID }, SendCount.Zero); 
+                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 3, ac.LoopID, ac.LoopID }, SendCount.Zero);
+                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 4, ac.LoopID, ac.LoopID }, SendCount.Zero);
+                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.LoopID, ac.LoopID }, SendCount.Zero);
+                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.LoopID, ac.LoopID }, SendCount.Zero);
+                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 7, ac.LoopID, ac.LoopID }, SendCount.Zero);
+                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 8, ac.LoopID, ac.LoopID }, SendCount.Zero);
+                        Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 19, ac.LoopID, ac.LoopID }, SendCount.Zero);
                         Control.ControlBytesSend (Command.ReadPanleTemp, ac.SubnetID, ac.DeviceID, new byte [] { ac.LoopID }, SendCount.Zero);
                     } else if (ac.Type == DeviceType.HVAC || ac.Type == DeviceType.ACInfrared) {
                         Control.ControlBytesSendHasReturn (Command.ReadACMode, ac.SubnetID, ac.DeviceID, new byte [] { ac.LoopID });
                     }
                 }
-			});
-		}
-	}
+            });
+        }
+
+
+    
+        /// <summary>
+        /// 绌鸿皟鎺у埗锛屽甫杩斿洖缁撴灉
+        /// </summary>
+        /// <param name="mAcData"></param>
+        void SendControlACPanel (AC mAcData, byte[] sendBytes)
+        {
+            MainPage.Loading.Start ("Sending...");
+            System.Threading.Tasks.Task.Run (() => {
+                byte [] returnBytes =  Control.ControlBytesSendHasReturn (Command.InstructionPanelKey, mAcData.SubnetID, mAcData.DeviceID, sendBytes);
+
+                Application.RunOnMainThread (() => {
+                    if (returnBytes == null) {
+                        new Alert ("", mAcData.Name + ErrorCode.ControlFailure, "Close").Show ();
+                    }
+                    MainPage.Loading.Hide ();
+                });
+            });
+        }
+
+        /// <summary>
+        /// 绌鸿皟鎺у埗锛屽甫杩斿洖缁撴灉
+        /// </summary>
+        /// <param name="mAcData"></param>
+        void SendControlHVAC (AC mAcData)
+        {
+
+            MainPage.Loading.Start ("Sending...");
+            System.Threading.Tasks.Task.Run (() => {
+                byte [] returnBytes = Control.ControlBytesSendHasReturn (Command.SetACMode, mAcData.SubnetID, mAcData.DeviceID, new [] { mAcData.LoopID, mAcData.TemperatureMode, mAcData.IndoorTemperature, mAcData.CoolTemperature, mAcData.HeatTemperature, mAcData.AutoTemperature, mAcData.ChuShiTemperature, mAcData.RealModeAndFanSpeed, mAcData.Power, mAcData.SetMode, mAcData.SetFanSpeed, mAcData.SetTemperature, mAcData.ShaoFanMode });
+
+                Application.RunOnMainThread (() => {
+                    if (returnBytes == null) {
+                        new Alert ("", mAcData.Name + ErrorCode.ControlFailure, "Close").Show ();
+                    }
+                    MainPage.Loading.Hide ();
+                });
+            });
+        }
+
+
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0