From acb2b278663952ce555b06a2e821f359225f15e0 Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期五, 10 七月 2020 09:41:15 +0800 Subject: [PATCH] 备份 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs | 361 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 361 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs new file mode 100755 index 0000000..d98fca7 --- /dev/null +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs @@ -0,0 +1,361 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Phone.UserCenter +{ + /// <summary> + /// 鍥轰欢鍗囩骇鐨勯�昏緫绫� + /// </summary> + public class HdlFirmwareUpdateLogic + { + #region 鈻� 鎵ц鍥轰欢鏇存柊_______________________ + + /// <summary> + /// 鎵ц涓嬩竴涓浐浠剁殑鏇存柊 + /// </summary> + public static void DoUpdateNextFirmware() + { + //涓嬩竴涓鎵ц鏇存柊鐨勭綉鍏� + HdlDeviceUpdateCommonLogic gwControl = null; + //涓嬩竴涓鎵ц鏇存柊鐨勮澶� + HdlDeviceUpdateCommonLogic deviceControl = null; + foreach (var contr in FirmwareUpdateResourse.dicUpdateList.Values) + { + //濡傛灉鍒殑杩樺湪鍗囩骇涓�,鍒欎笉鍐嶅鐞� + if (contr.IsFinishUpdate == false) + { + return; + } + //濡傛灉杩欎釜鍦ㄧ瓑寰呭垪琛ㄧ殑璇� + if (contr.UpdateStatu == UpdateStatuMode.Wait && gwControl == null) + { + if (contr.ClassDiv == 1 && gwControl == null) + { + //涓嬩竴涓崌绾х殑灏辨槸瀹冧簡 + gwControl = contr; + } + else if (contr.ClassDiv == 2 && deviceControl == null) + { + //涓嬩竴涓崌绾х殑灏辨槸瀹冧簡 + deviceControl = contr; + } + } + } + + HdlThreadLogic.Current.RunThread(() => + { + if (gwControl != null) + { + //寮�濮嬫墽琛屾洿鏂版搷浣� + gwControl.DoStartUpdate(); + return; + } + + if (deviceControl != null) + { + //寮�濮嬫墽琛屾洿鏂版搷浣� + deviceControl.DoStartUpdate(); + } + }); + } + + #endregion + + #region 鈻� 娣诲姞鍗囩骇鍥轰欢淇℃伅___________________ + + /// <summary> + /// 娣诲姞鍗囩骇鍥轰欢淇℃伅 + /// </summary> + /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param> + /// <param name="HardwareVersion">纭欢鐗堟湰</param> + /// <param name="imgType">闀滃儚绫诲瀷</param> + /// <returns></returns> + public async static Task<bool> AddFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) + { + //妫�娴嬫湰鍦版槸鍚﹀凡缁忔湁杩欎釜缂撳瓨浜� + if (IsEsixtFirmwareVersionInfo(levelType, HardwareVersion, imgType) == true) + { + return true; + } + var Pra = new GetFirmwareVersionPra(); + Pra.PageSetting.Page = 1; + Pra.PageSetting.PageSize = 9999; + + if (levelType == FirmwareLevelType.Linux) + { + //鑾峰彇缃戝叧Linux妯″潡鍗囩骇淇℃伅 + Pra.FirmwareManaFirstType = 1; + Pra.FirmwareManaSecondType = 0; + Pra.HardwareVersion = HardwareVersion; + Pra.DeviceType = imgType; + var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Linux, Pra); + return result; + } + else if (levelType == FirmwareLevelType.Coordinator) + { + //鍗忚皟鍣ㄦā鍧� + Pra.FirmwareManaFirstType = 1; + Pra.FirmwareManaSecondType = 1; + Pra.HardwareVersion = HardwareVersion; + Pra.DeviceType = imgType; + var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Coordinator, Pra); + return result; + } + else if (levelType == FirmwareLevelType.VirtualDevice) + { + //铏氭嫙璁惧妯″潡 + Pra.FirmwareManaFirstType = 1; + Pra.FirmwareManaSecondType = 2; + Pra.HardwareVersion = HardwareVersion; + Pra.DeviceType = imgType; + var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.VirtualDevice, Pra); + return result; + } + else + { + //涓�鑸澶� + Pra.FirmwareManaFirstType = 2; + Pra.FirmwareManaSecondType = null; + Pra.HardwareVersion = HardwareVersion; + Pra.DeviceType = imgType; + var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.ZigbeeDevice, Pra); + return result; + } + } + + /// <summary> + /// 鑾峰彇浜戠鐨勫浐浠讹紝鐒跺悗瀛樺叆缂撳瓨涓� + /// </summary> + /// <param name="levelType"></param> + /// <param name="pra"></param> + /// <returns></returns> + private async static Task<bool> GetFirmwareVersionAndSetToMemmory(FirmwareLevelType levelType, GetFirmwareVersionPra pra) + { + var listNotShow = new List<string>() { "NotSetAgain" }; + string resultValue = await UserCenterLogic.GetResponseDataByRequestHttps("FirmwareMana/DetectionPlatformUploadFirmware", false, pra, listNotShow); + if (string.IsNullOrEmpty(resultValue) == true) + { + return false; + } + var verResult = Newtonsoft.Json.JsonConvert.DeserializeObject<FirmwareVersionResult>(resultValue); + if (verResult.PageData.Count == 0) + { + return true; + } + + //纭欢鐗堟湰 + Dictionary<string, FirmwareHardInfo> dicHardData = new Dictionary<string, FirmwareHardInfo>(); + FirmwareUpdateResourse.dicFirmwareInfo[levelType] = dicHardData; + + foreach (var data in verResult.PageData) + { + //鍥轰欢鐗堟湰鏄剧ず锛� + //10101 3涓猙yte 鏄剧ず涓猴細ver.1.01.01 + if (data.FirmwareVersion.Length != 6 && data.FirmwareVersion.Length != 5) + { + //闈炴瑙勭殑鍥轰欢鐗堟湰,涓嶅啀鑰冭檻鑼冨洿鍐� + continue; + } + //纭欢鍒嗙被 + FirmwareHardInfo hardInfo = null; + string hardCode = data.HardwareVersion; + if (dicHardData.ContainsKey(hardCode) == false) + { + //娣诲姞 + hardInfo = new FirmwareHardInfo(); + dicHardData[hardCode] = hardInfo; + } + hardInfo = dicHardData[hardCode]; + + //闀滃儚鍒嗙被 + string imgType = data.DeviceType; + Dictionary<string, FirmwareImgTypeInfo> dicimgType = hardInfo.dicImgType; + FirmwareImgTypeInfo imgTypeInfo = null; + if (dicimgType.ContainsKey(imgType) == false) + { + //娣诲姞 + imgTypeInfo = new FirmwareImgTypeInfo(); + dicimgType[imgType] = imgTypeInfo; + } + imgTypeInfo = dicimgType[imgType]; + + try + { + //鍥轰欢鐗堟湰 + var info = new FirmwareVersionInfo(); + info.DistributedMark = data.DistributedMark; + info.FirmwareVersion = Convert.ToInt32(data.FirmwareVersion); + info.ShowName = data.Name; + info.Name = data.Name; + info.HardwareVersion = hardCode; + info.ImagType = imgType; + info.CreatedOnUtc = data.CreatedOnUtc; + imgTypeInfo.listVeison.Add(info); + //鍥轰欢鐨勪俊鎭鐞� + DoAdjustFirmwareInformation(info, data.Remarks); + } + catch { continue; } + } + + return true; + } + + #endregion + + #region 鈻� 鑾峰彇鏈�鏂板浐浠剁増鏈俊鎭痏______________ + + /// <summary> + /// 鑾峰彇鍥轰欢鐨勬渶鏂扮増鏈俊鎭�(濡傛灉杩斿洖Null,鍒欒〃绀烘病鏈夋渶鏂扮増鏈�,鎴栬�呭綋鍓嶅凡缁忔槸鏈�鏂扮増鏈�) + /// </summary> + /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param> + /// <param name="HardwareVersion">纭欢鐗堟湰</param> + /// <param name="imgType">闀滃儚绫诲瀷</param> + /// <param name="nowVersion">鐜板湪鐨勭増鏈�</param> + /// <returns></returns> + public static FirmwareVersionInfo GetFirmwareMostVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType, int nowVersion) + { + //闀滃儚绫诲瀷 + var listdata = GetFirmwareVersionListInfo(levelType, HardwareVersion, imgType); + FirmwareVersionInfo newFirInfo = null; + foreach (var verInfo in listdata) + { + if (verInfo.Name.EndsWith(".bin") == true) + { + //瀹冧笉鏄崌绾у浐浠�, .bin鏄壒娈婄殑 + continue; + } + int testVersion = Convert.ToInt32(verInfo.FirmwareVersion.ToString().PadLeft(6, '0').Substring(2, 2)); + if (testVersion % 2 != 0) + { + //涓棿閭d釜byte涓哄鏁版椂锛屼唬琛ㄦ槸娴嬭瘯鐗堟湰,鍦ㄦ樉绀烘渶鏂扮増鏈椂,涓嶉渶瑕佹樉绀猴紝浣嗘槸鍦ㄥ巻鍙茬増鏈偅閲屽彲浠ユ樉绀� + //涓棿閭d釜byte涓哄伓鏁版椂,浠h〃鏄寮忕増鏈� + continue; + } + + if (verInfo.FirmwareVersion > nowVersion) + { + nowVersion = verInfo.FirmwareVersion; + newFirInfo = verInfo; + } + } + return newFirInfo; + } + + /// <summary> + /// 鑾峰彇鍥轰欢鍒楄〃鐨勫浐浠剁増鏈俊鎭� + /// </summary> + /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param> + /// <param name="HardwareVersion">纭欢鐗堟湰</param> + /// <param name="imgType">闀滃儚绫诲瀷</param> + /// <returns></returns> + public static List<FirmwareVersionInfo> GetFirmwareVersionListInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) + { + if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) + { + return new List<FirmwareVersionInfo>(); + } + //纭欢鐗堟湰鍙风骇鍒� + var dicHard = FirmwareUpdateResourse.dicFirmwareInfo[levelType]; + + //纭欢鐗堟湰 + if (dicHard.ContainsKey(HardwareVersion) == false) + { + return new List<FirmwareVersionInfo>(); + } + //闀滃儚绫诲瀷 + var dicImgInfo = GetImageVersionListInfo(levelType, HardwareVersion); + if (dicImgInfo.ContainsKey(imgType) == false) + { + return new List<FirmwareVersionInfo>(); + } + + var listData = new List<FirmwareVersionInfo>(); + var imgInfo = dicImgInfo[imgType]; + foreach (var verInfo in imgInfo.listVeison) + { + listData.Add(verInfo); + } + + return listData; + } + + /// <summary> + /// 鑾峰彇鍥轰欢鍒楄〃鐨勯暅鍍忕増鏈俊鎭� + /// </summary> + /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param> + /// <param name="HardwareVersion">纭欢鐗堟湰</param> + /// <returns></returns> + public static Dictionary<string, FirmwareImgTypeInfo> GetImageVersionListInfo(FirmwareLevelType levelType, string HardwareVersion) + { + if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) + { + return new Dictionary<string, FirmwareImgTypeInfo>(); + } + //纭欢鐗堟湰鍙风骇鍒� + var dicHard = FirmwareUpdateResourse.dicFirmwareInfo[levelType]; + + //纭欢鐗堟湰 + if (dicHard.ContainsKey(HardwareVersion) == false) + { + return new Dictionary<string, FirmwareImgTypeInfo>(); + } + //闀滃儚绫诲瀷 + return dicHard[HardwareVersion].dicImgType; + } + + #endregion + + #region 鈻� 鍥轰欢瀛樺湪妫�娴媉______________________ + + /// <summary> + /// 鍥轰欢缂撳瓨瀛樺湪妫�娴� + /// </summary> + /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param> + /// <param name="HardwareVersion">纭欢鐗堟湰</param> + /// <param name="imgType">闀滃儚绫诲瀷</param> + /// <returns></returns> + private static bool IsEsixtFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) + { + //绗竴澶х被 + if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) + { + return false; + } + //纭欢 + if (FirmwareUpdateResourse.dicFirmwareInfo[levelType].ContainsKey(HardwareVersion) == false) + { + return false; + } + //闀滃儚 + if (FirmwareUpdateResourse.dicFirmwareInfo[levelType][HardwareVersion].dicImgType.ContainsKey(imgType) == false) + { + return false; + } + return true; + } + + #endregion + + #region 鈻� 涓�鑸柟娉昣__________________________ + + /// <summary> + /// 鍥轰欢鐨勪俊鎭鐞� + /// </summary> + /// <param name="Info"></param> + /// <param name="remark"></param> + private static void DoAdjustFirmwareInformation(FirmwareVersionInfo Info, string remark) + { + if (string.IsNullOrEmpty(remark) == true) + { + return; + } + //鏇存柊鍐呭 + string[] Arry = remark.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); + Info.UpdateContent.AddRange(Arry); + } + + #endregion + } +} -- Gitblit v1.8.0