From dee21bf452a8979d0515d13e534fbb69ed9715dd Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期二, 01 九月 2020 15:33:13 +0800 Subject: [PATCH] 上传一个版本 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs | 361 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 325 insertions(+), 36 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs index 75f38c3..45aed43 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs @@ -1,7 +1,7 @@ 锘縰sing System; using System.Collections.Generic; using System.Text; -using System.Threading.Tasks; +using ZigBee.Device; namespace Shared.Phone.UserCenter { @@ -66,18 +66,18 @@ #region 鈻� 娣诲姞鍗囩骇鍥轰欢淇℃伅___________________ /// <summary> - /// 娣诲姞鍗囩骇鍥轰欢淇℃伅 + /// 娣诲姞鍗囩骇鍥轰欢淇℃伅 1:姝e父 -1:娌$綉,鑾峰彇涓嶅埌涓滆タ /// </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) + public static int AddFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) { //妫�娴嬫湰鍦版槸鍚﹀凡缁忔湁杩欎釜缂撳瓨浜� if (IsEsixtFirmwareVersionInfo(levelType, HardwareVersion, imgType) == true) { - return true; + return 1; } var Pra = new GetFirmwareVersionPra(); Pra.PageSetting.Page = 1; @@ -90,27 +90,27 @@ Pra.FirmwareManaSecondType = 0; Pra.HardwareVersion = HardwareVersion; Pra.DeviceType = imgType; - var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Linux, Pra); + var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Linux, Pra); return result; } - else if (levelType == FirmwareLevelType.Coordinator) + else if (levelType == FirmwareLevelType.A鍗忚皟鍣�) { //鍗忚皟鍣ㄦā鍧� Pra.FirmwareManaFirstType = 1; Pra.FirmwareManaSecondType = 1; Pra.HardwareVersion = HardwareVersion; Pra.DeviceType = imgType; - var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Coordinator, Pra); + var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.A鍗忚皟鍣�, Pra); return result; } - else if (levelType == FirmwareLevelType.VirtualDevice) + else if (levelType == FirmwareLevelType.A铏氭嫙椹卞姩) { //铏氭嫙璁惧妯″潡 Pra.FirmwareManaFirstType = 1; Pra.FirmwareManaSecondType = 2; Pra.HardwareVersion = HardwareVersion; Pra.DeviceType = imgType; - var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.VirtualDevice, Pra); + var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.A铏氭嫙椹卞姩, Pra); return result; } else @@ -120,37 +120,48 @@ Pra.FirmwareManaSecondType = null; Pra.HardwareVersion = HardwareVersion; Pra.DeviceType = imgType; - var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.ZigbeeDevice, Pra); + var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.A璁惧, Pra); return result; } } /// <summary> - /// 鑾峰彇浜戠鐨勫浐浠讹紝鐒跺悗瀛樺叆缂撳瓨涓� + /// 鑾峰彇浜戠鐨勫浐浠讹紝鐒跺悗瀛樺叆缂撳瓨涓� 1:姝e父 -1:娌$綉,鑾峰彇涓嶅埌涓滆タ /// </summary> /// <param name="levelType"></param> /// <param name="pra"></param> /// <returns></returns> - private async static Task<bool> GetFirmwareVersionAndSetToMemmory(FirmwareLevelType levelType, GetFirmwareVersionPra pra) + private static int GetFirmwareVersionAndSetToMemmory(FirmwareLevelType levelType, GetFirmwareVersionPra pra) { - var listNotShow = new List<string>() { "NotSetAgain" }; - string resultValue = await UserCenterLogic.GetResponseDataByRequestHttps("FirmwareMana/DetectionPlatformUploadFirmware", false, pra, listNotShow); + var listCheck = new List<string> { "NotCheck" }; + string resultValue = UserCenterLogic.GetResponseDataByRequestHttps("FirmwareMana/DetectionPlatformUploadFirmware", false, pra, listCheck, false); if (string.IsNullOrEmpty(resultValue) == true) { - return false; + return -1; } var verResult = Newtonsoft.Json.JsonConvert.DeserializeObject<FirmwareVersionResult>(resultValue); if (verResult.PageData.Count == 0) { - return true; + return 1; } //纭欢鐗堟湰 - Dictionary<string, FirmwareHardInfo> dicHardData = new Dictionary<string, FirmwareHardInfo>(); - FirmwareUpdateResourse.dicFirmwareInfo[levelType] = dicHardData; + Dictionary<string, FirmwareHardInfo> dicHardData = null; + if (FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) + { + FirmwareUpdateResourse.dicFirmwareInfo[levelType] = new Dictionary<string, FirmwareHardInfo>(); + } + dicHardData = FirmwareUpdateResourse.dicFirmwareInfo[levelType]; 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; @@ -192,7 +203,7 @@ catch { continue; } } - return true; + return 1; } #endregion @@ -219,6 +230,14 @@ //瀹冧笉鏄崌绾у浐浠�, .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; @@ -292,6 +311,37 @@ #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 GetFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType, int nowVersion) + { + //闀滃儚绫诲瀷 + var listdata = GetFirmwareVersionListInfo(levelType, HardwareVersion, imgType); + foreach (var verInfo in listdata) + { + if (verInfo.Name.EndsWith(".bin") == true) + { + //瀹冧笉鏄崌绾у浐浠�, .bin鏄壒娈婄殑 + continue; + } + if (verInfo.FirmwareVersion == nowVersion) + { + return verInfo; + } + } + return null; ; + } + + #endregion + #region 鈻� 鍥轰欢瀛樺湪妫�娴媉______________________ /// <summary> @@ -321,6 +371,262 @@ return true; } + /// <summary> + /// 妫�娴嬭Ota璁惧鐨勫崌绾у浐浠舵槸鍚﹀瓨鍦� + /// </summary> + /// <param name="device">璁惧瀵硅薄</param> + /// <returns></returns> + public static bool IsEsixtDeviceFirmwareFile(OTADevice device) + { + var fileFullName = GetDeviceFirmwareFile(device); + return System.IO.File.Exists(fileFullName); + } + + /// <summary> + /// 鑾峰彇ota鎸囧畾鐨勫崌绾у浐浠跺悕瀛�(鍏ㄨ矾寰�) + /// </summary> + /// <param name="device">璁惧瀵硅薄</param> + /// <returns></returns> + public static string GetDeviceFirmwareFile(OTADevice device) + { + //纭欢鐗堟湰_闀滃儚ID_鍥轰欢鐗堟湰 + string fileName = device.HwVersion + "_" + device.ImgTypeId + "_" + device.ImgVersion; + return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Device_" + fileName + ".ota"); + } + + /// <summary> + /// 鑾峰彇缃戝叧Linux鐨勫崌绾у浐浠跺悕瀛�(鍏ㄨ矾寰�) + /// </summary> + /// <param name="zbGateway">缃戝叧瀵硅薄</param> + /// <returns></returns> + public static string GetGatewayLinuxFirmwareFile(ZbGateway zbGateway) + { + string fileName = zbGateway.LinuxHardVersion + "_" + zbGateway.LinuxImageType + "_" + zbGateway.LinuxFirmwareVersion; + return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Linux_" + fileName + ".ota"); + } + + /// <summary> + /// 鑾峰彇缃戝叧鍗忚皟鍣ㄧ殑鍗囩骇鍥轰欢鍚嶅瓧(鍏ㄨ矾寰�) + /// </summary> + /// <param name="zbGateway">缃戝叧瀵硅薄</param> + /// <returns></returns> + public static string GetGatewayCoordinatorFirmwareFile(ZbGateway zbGateway) + { + string fileName = zbGateway.CoordinatorHardVersion + "_" + zbGateway.CoordinatorImageId + "_" + zbGateway.CoordinatorFirmwareVersion; + return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Coordinator_" + fileName + ".ota"); + } + + /// <summary> + /// 鑾峰彇缃戝叧铏氭嫙椹卞姩鐨勫崌绾у浐浠跺悕瀛�(鍏ㄨ矾寰�) + /// </summary> + /// <param name="codeObj">铏氭嫙椹卞姩鏁版嵁</param> + /// <returns></returns> + public static string GetGatewayDriveCodeFirmwareFile(ZbGatewayData.DriveCodeObj codeObj) + { + string fileName = codeObj.DriveHwVersion + "_" + codeObj.DriveImageType + "_" + codeObj.DriveFwVersion; + return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "DriveCode_" + fileName + ".ota"); + } + + #endregion + + #region 鈻� 涓嬭浇妯℃澘鍥轰欢_______________________ + + /// <summary> + /// 涓嬭浇妯℃澘涓綉鍏冲拰璁惧鐨勫浐浠� + /// </summary> + /// <param name="fullFileName"></param> + /// <param name="i_Msg"></param> + public static int DownLoadTemplateDeviceFirmware(string fullFileName, string i_Msg) + { + //浠庢ā鏉垮綋涓幏鍙栬澶囧拰缃戝叧瀵硅薄 + var listTempDevice = new List<OTADevice>(); + var listTempGateway = new List<ZbGateway>(); + TemplateData.TemplateCommonLogic.Current.GetDeviceObjectFromTemplate(fullFileName, ref listTempDevice, ref listTempGateway); + + //鑾峰彇闇�瑕佷笅杞界殑鍥轰欢鏁版嵁 + var listVersion = GetNeedToDownLoadVersionData(listTempDevice, listTempGateway); + if (listVersion.Count == 0) + { + return 0; + } + //鎵撳紑杩涘害鏉� + ProgressFormBar.Current.Start(); + ProgressFormBar.Current.SetMsg(i_Msg); + ProgressFormBar.Current.SetValue(0, 1); + + System.Threading.Thread.Sleep(1000); + + var dicFirmwareName = new Dictionary<string, string>(); + var fileData = HdlFileLogic.Current.ReadFileTextContent(DirNameResourse.FirmwareUpdateList); + if (fileData != null) + { + //鏈湴瀛樻斁鐨勫浐浠跺師鏉ョ殑鍚嶅瓧(鍥犱负璁惧鍗囩骇鏃�,瀹冮渶瑕佽瘑鍒枃浠跺悕瀛楅噷闈㈠寘鍚殑鐗规畩瀛楃) + //key:鍏ㄨ矾寰�,纭欢鐗堟湰_闀滃儚ID_鍥轰欢鐗堟湰 value:鍥轰欢鍘熸潵鐨勫悕瀛� + dicFirmwareName = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(fileData); + } + + //鍥轰欢瀛樺偍璺緞 + string firmwareDir = DirNameResourse.FirmwareUpdateDirectory; + int nowCount = 0; + foreach (var versionData in listVersion) + { + nowCount++; + //鑾峰彇鍗囩骇鍥轰欢淇℃伅 + var result = AddFirmwareVersionInfo(versionData.levelType, versionData.HwVersion, versionData.ImageType); + if (result == -1) + { + ProgressFormBar.Current.Close(); + return -1; + } + //鑾峰彇褰撳墠杩欎釜鐗堟湰鐨勫浐浠朵俊鎭� + var versionFirmware = GetFirmwareVersionInfo(versionData.levelType, versionData.HwVersion, versionData.ImageType, versionData.FirmwareVersion); + if (versionFirmware == null) + { + //浜戠娌℃湁杩欎釜鐗堟湰 杩涘害鍊� + ProgressFormBar.Current.SetValue(nowCount, listVersion.Count); + continue; + } + //鍘讳笅杞借繖涓浐浠� + var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = versionFirmware.DistributedMark }; + var byteData = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, null, true); + if (byteData == null) + { + ProgressFormBar.Current.Close(); + return -1; + } + //淇濆瓨鍥轰欢 + var saveFile = System.IO.Path.Combine(firmwareDir, versionData.FileDiv + versionData.HwVersion + "_" + versionData.ImageType + "_" + versionData.FirmwareVersion + ".ota"); + HdlFileLogic.Current.SaveByteToFile(saveFile, byteData); + dicFirmwareName[saveFile] = versionFirmware.Name; + + //杩涘害鍊� + ProgressFormBar.Current.SetValue(nowCount, listVersion.Count); + } + //淇濆瓨鍒楄〃鍚嶅瓧 + HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName); + ProgressFormBar.Current.Close(); + + return 1; + } + + /// <summary> + /// 鑾峰彇闇�瑕佷笅杞界殑鍥轰欢鏁版嵁 + /// </summary> + /// <param name="listDevice">璁惧鍒楄〃</param> + /// <param name="listGateway">缃戝叧鍒楄〃</param> + /// <returns></returns> + private static List<TemplateDeviceVersion> GetNeedToDownLoadVersionData(List<OTADevice> listDevice, List<ZbGateway> listGateway) + { + //瀛樺偍璺緞 + string firmwareDir = DirNameResourse.FirmwareUpdateDirectory; + HdlFileLogic.Current.CreateDirectory(firmwareDir); + + var listVersion = new List<TemplateDeviceVersion>(); + var listCheck = new HashSet<string>(); + foreach (var device in listDevice) + { + //璁惧鐨勫崌绾у浐浠跺悕瀛� + var fileFullName = GetDeviceFirmwareFile(device); + if (System.IO.File.Exists(fileFullName) == false && listCheck.Contains(fileFullName) == false) + { + listCheck.Add(fileFullName); + //璁惧 + listVersion.Add(new TemplateDeviceVersion + { + FileDiv = "Device_", + levelType = FirmwareLevelType.A璁惧, + HwVersion = device.HwVersion.ToString(), + ImageType = device.ImgTypeId.ToString(), + FirmwareVersion = device.ImgVersion + }); + } + } + foreach (var gateway in listGateway) + { + //Linux鐨勫崌绾у浐浠跺悕瀛� + var fileFullName = GetGatewayLinuxFirmwareFile(gateway); + if (System.IO.File.Exists(fileFullName) == false && listCheck.Contains(fileFullName) == false) + { + listCheck.Add(fileFullName); + //Linux + listVersion.Add(new TemplateDeviceVersion + { + FileDiv = "Linux_", + levelType = FirmwareLevelType.Linux, + HwVersion = gateway.LinuxHardVersion.ToString(), + ImageType = gateway.LinuxImageType.ToString(), + FirmwareVersion = gateway.LinuxFirmwareVersion + }); + } + //鍗忚皟鍣ㄧ殑鍗囩骇鍥轰欢鍚嶅瓧 + fileFullName = GetGatewayCoordinatorFirmwareFile(gateway); + if (System.IO.File.Exists(fileFullName) == false && listCheck.Contains(fileFullName) == false) + { + listCheck.Add(fileFullName); + //鍗忚皟鍣� + listVersion.Add(new TemplateDeviceVersion + { + FileDiv = "Coordinator_", + levelType = FirmwareLevelType.A鍗忚皟鍣�, + HwVersion = gateway.CoordinatorHardVersion.ToString(), + ImageType = gateway.CoordinatorImageId.ToString(), + FirmwareVersion = gateway.CoordinatorFirmwareVersion + }); + } + //杩欎釜缃戝叧闇�瑕佹湁铏氭嫙椹卞姩杩欎釜涓滆タ鎵嶈 + if (gateway.LinuxImageType != 6) + { + //铏氭嫙椹卞姩鍙� + foreach (var data in gateway.DriveCodeList) + { + //铏氭嫙椹卞姩鍙风殑鍗囩骇鍥轰欢鍚嶅瓧 + fileFullName = GetGatewayDriveCodeFirmwareFile(data); + if (System.IO.File.Exists(fileFullName) == false && listCheck.Contains(fileFullName) == false) + { + listCheck.Add(fileFullName); + //铏氭嫙椹卞姩鍙� + listVersion.Add(new TemplateDeviceVersion + { + FileDiv = "DriveCode_", + levelType = FirmwareLevelType.A铏氭嫙椹卞姩, + HwVersion = data.DriveHwVersion.ToString(), + ImageType = data.DriveImageType.ToString(), + FirmwareVersion = data.DriveFwVersion + }); + } + } + } + } + return listVersion; + } + + /// <summary> + /// 妯℃澘璁惧鐨勭増鏈俊鎭� + /// </summary> + private class TemplateDeviceVersion + { + /// <summary> + /// 鏂囦欢鍖哄垎 + /// </summary> + public string FileDiv = string.Empty; + /// <summary> + /// 鍥轰欢闃剁骇鍖哄垎 + /// </summary> + public FirmwareLevelType levelType; + /// <summary> + /// 纭欢鐗堟湰 + /// </summary> + public string HwVersion = string.Empty; + /// <summary> + /// 闀滃儚ID + /// </summary> + public string ImageType = string.Empty; + /// <summary> + /// 鍥轰欢鐗堟湰 + /// </summary> + public int FirmwareVersion = 0; + } + #endregion #region 鈻� 涓�鑸柟娉昣__________________________ @@ -341,23 +647,6 @@ Info.UpdateContent.AddRange(Arry); } - /// <summary> - /// 灏嗗崄鍏繘鍒惰浆涓哄崄杩涘埗 - /// </summary> - /// <param name="text"></param> - /// <returns></returns> - private static int ConvertHexToInt(string text) - { - if (text.StartsWith("0x")) - { - text = text.Substring(2); - } - try - { - return Convert.ToInt32(text, 16); - } - catch { return -1; } - } #endregion } } -- Gitblit v1.8.0