From 737c036a39176fd2085ce82b7c60391da8cb508c Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期二, 31 十二月 2019 19:17:47 +0800 Subject: [PATCH] 合并了代码 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs | 189 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 189 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs index 4d6a2fe..34330b4 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs @@ -544,6 +544,195 @@ #endregion + #region 鈻� 绠�绾﹂潰鏉块渿鍔ㄥ姛鑳絖__________________ + + /// <summary> + /// 鑾峰彇绠�绾﹂潰鏉块渿鍔ㄥ姛鑳界殑淇℃伅(null琛ㄧず鍑洪敊) + /// </summary> + /// <param name="device">鏌愪竴鍥炶矾</param> + /// <returns></returns> + public VibrationInfo GetPanelVibrationData(CommonDevice device) + { + var returnData = new VibrationInfo(); + var gateway = device.Gateway; + if (gateway == null) + { + //閿欒:缃戝叧瀵硅薄涓㈠け + this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg)); + return null; + } + string checkTopic = HdlGatewayLogic.Current.GetGatewayId(gateway) + "/" + "ZbDataPassthrough"; + bool canBreak = false; + + Action<string, string> action = (topic, message) => + { + if (topic == checkTopic) + { + try + { + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + string PassData = jobject["Data"]["PassData"].ToString(); + if (PassData.Length != 18) + { + return; + } + string mytopic = PassData[4].ToString() + PassData[5].ToString() + PassData[2].ToString() + PassData[3].ToString(); + if (mytopic != "0802") + { + return; + } + returnData.A闇囧姩浣胯兘 = PassData.Substring(10, 2) == "01" ? true : false; + returnData.A闇囧姩寮哄害 = Convert.ToInt32(PassData.Substring(12, 2), 16); + returnData.A闇囧姩鏃堕棿 = Convert.ToInt32(PassData.Substring(14, 4), 16); + + canBreak = true; + } + catch { } + } + }; + gateway.Actions += action; + try + { + var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "PassData", "050108110101" } }; + jObject.Add("Data", data); + gateway.Send(("ClientDataPassthrough"), jObject.ToString()); + } + catch { } + + int TimeOut = 0; + while (canBreak == false && TimeOut < 60) + { + System.Threading.Thread.Sleep(100); + TimeOut++; + } + gateway.Actions -= action; + + if (TimeOut >= 60) + { + //鑾峰彇闇囧姩鍙嶉閰嶇疆淇℃伅澶辫触 + string errorMsg = Language.StringByID(R.MyInternationalizationString.uGetVibrationFeedbackSettionFail); + errorMsg = UserCenterLogic.CombineGatewayTimeOutMsg(errorMsg, null, "鍥炲瓒呮椂", false); + this.ShowTipMsg(errorMsg); + return null; + } + return returnData; + } + + /// <summary> + /// 璁剧疆绠�绾﹂潰鏉块渿鍔ㄥ姛鑳界殑淇℃伅 + /// </summary> + /// <param name="device">鏌愪竴鍥炶矾</param> + /// <param name="datainfo">璁剧疆鐨勪俊鎭�</param> + /// <returns></returns> + public bool SetPanelVibrationData(CommonDevice device, VibrationInfo datainfo) + { + var gateway = device.Gateway; + if (gateway == null) + { + //閿欒:缃戝叧瀵硅薄涓㈠け + this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg)); + return false; + } + string checkTopic = HdlGatewayLogic.Current.GetGatewayId(gateway) + "/" + "ZbDataPassthrough"; + bool canBreak = false; + + bool success = false; + Action<string, string> action = (topic, message) => + { + if (topic == checkTopic) + { + try + { + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + if (jobject["DeviceAddr"].ToString() != device.DeviceAddr) + { + //涓嶆槸鍚屼竴涓笢瑗� + return; + } + string PassData = jobject["Data"]["PassData"].ToString(); + if (PassData.Length != 16) + { + return; + } + string mytopic = PassData[4].ToString() + PassData[5].ToString() + PassData[2].ToString() + PassData[3].ToString(); + if (mytopic != "0002") + { + return; + } + int command = Convert.ToInt32(PassData[10].ToString() + PassData[11].ToString() + PassData[12].ToString() + PassData[13].ToString(), 16); + int status = Convert.ToInt32(PassData[14].ToString() + PassData[15].ToString(), 16); + if (status == 0) + { + //鎴愬姛 + success = true; + } + canBreak = true; + } + catch { } + } + }; + gateway.Actions += action; + try + { + string passData = "0800081104"; + passData += datainfo.A闇囧姩浣胯兘 ? "01" : "00"; + passData += Convert.ToString(datainfo.A闇囧姩寮哄害, 16).PadLeft(2, '0'); + string time = Convert.ToString(datainfo.A闇囧姩鏃堕棿, 16).PadLeft(4, '0'); + //浣庝綅鍦ㄥ墠锛岄珮浣嶅湪鍚� + passData += time.Substring(2, 2); + passData += time.Substring(0, 2); + + var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "PassData", passData } }; + jObject.Add("Data", data); + gateway.Send(("ClientDataPassthrough"), jObject.ToString()); + } + catch { } + + int TimeOut = 0; + while (canBreak == false && TimeOut < 60) + { + System.Threading.Thread.Sleep(100); + TimeOut++; + } + gateway.Actions -= action; + + if (success == false) + { + //璁剧疆闇囧姩鍙嶉閰嶇疆淇℃伅澶辫触 + string errorMsg = Language.StringByID(R.MyInternationalizationString.uSetVibrationFeedbackSettionFail); + if (TimeOut >= 60) + { + errorMsg = UserCenterLogic.CombineGatewayTimeOutMsg(errorMsg, null, "鍥炲瓒呮椂", false); + } + this.ShowTipMsg(errorMsg); + } + + return success; + } + + /// <summary> + /// 绠�绾﹂潰鏉块渿鍔ㄥ姛鑳戒俊鎭� + /// </summary> + public class VibrationInfo + { + /// <summary> + /// 闇囧姩浣胯兘 + /// </summary> + public bool A闇囧姩浣胯兘 = false; + /// <summary> + /// 闇囧姩寮哄害(鍗佽繘鍒�) + /// </summary> + public int A闇囧姩寮哄害 = 0; + /// <summary> + /// 闇囧姩鏃堕棿(鍗佽繘鍒�) + /// </summary> + public int A闇囧姩鏃堕棿 = 0; + } + + #endregion + #region 鈻� 缂撳瓨涓殑璁惧绉佹湁灞炴�______________ /// <summary> -- Gitblit v1.8.0