File was renamed from ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs |
| | |
| | | using System.Text; |
| | | using ZigBee.Device; |
| | | |
| | | namespace Shared.Phone.UserCenter |
| | | namespace Shared.Phone |
| | | { |
| | | /// <summary> |
| | | /// 固件升级的逻辑类 |
| | | /// </summary> |
| | | public class HdlFirmwareUpdateLogic |
| | | { |
| | | #region ■ 变量声明___________________________ |
| | | |
| | | /// <summary> |
| | | /// 固件升级的逻辑类 |
| | | /// </summary> |
| | | private static HdlFirmwareUpdateLogic m_Current = null; |
| | | /// <summary> |
| | | /// 固件升级的逻辑类 |
| | | /// </summary> |
| | | public static HdlFirmwareUpdateLogic Current |
| | | { |
| | | get |
| | | { |
| | | if (m_Current == null) |
| | | { |
| | | m_Current = new HdlFirmwareUpdateLogic(); |
| | | } |
| | | return m_Current; |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 执行固件更新_______________________ |
| | | |
| | | /// <summary> |
| | | /// 执行下一个固件的更新 |
| | | /// </summary> |
| | | public static void DoUpdateNextFirmware() |
| | | public void DoUpdateNextFirmware() |
| | | { |
| | | //下一个要执行更新的网关 |
| | | HdlDeviceUpdateCommonLogic gwControl = null; |
| | | DeviceUpdateCommon gwControl = null; |
| | | //下一个要执行更新的设备 |
| | | HdlDeviceUpdateCommonLogic deviceControl = null; |
| | | foreach (var contr in FirmwareUpdateResourse.dicUpdateList.Values) |
| | | DeviceUpdateCommon deviceControl = null; |
| | | foreach (var contr in HdlFirmwareUpdateResourse.dicUpdateList.Values) |
| | | { |
| | | //如果别的还在升级中,则不再处理 |
| | | if (contr.IsFinishUpdate == false) |
| | |
| | | /// <param name="HardwareVersion">硬件版本</param> |
| | | /// <param name="imgType">镜像类型</param> |
| | | /// <returns></returns> |
| | | public static int AddFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) |
| | | public int AddFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) |
| | | { |
| | | //检测本地是否已经有这个缓存了 |
| | | if (IsEsixtFirmwareVersionInfo(levelType, HardwareVersion, imgType) == true) |
| | |
| | | /// <param name="levelType"></param> |
| | | /// <param name="pra"></param> |
| | | /// <returns></returns> |
| | | private static int GetFirmwareVersionAndSetToMemmory(FirmwareLevelType levelType, GetFirmwareVersionPra pra) |
| | | private int GetFirmwareVersionAndSetToMemmory(FirmwareLevelType levelType, GetFirmwareVersionPra pra) |
| | | { |
| | | var listCheck = new List<string> { "NotCheck" }; |
| | | string resultValue = UserCenterLogic.GetResponseDataByRequestHttps("FirmwareMana/DetectionPlatformUploadFirmware", false, pra, listCheck, false); |
| | | if (string.IsNullOrEmpty(resultValue) == true) |
| | | var result = this.RequestZigbeeHttps("FirmwareMana/DetectionPlatformUploadFirmware", pra, 4); |
| | | if (result == null || result.Length == 0) |
| | | { |
| | | return -1; |
| | | } |
| | | var jobject = Newtonsoft.Json.Linq.JObject.Parse(Encoding.UTF8.GetString(result)); |
| | | if (jobject.Property("StateCode") == null || jobject["StateCode"].ToString().ToUpper() != "SUCCESS") |
| | | { |
| | | return -1; |
| | | } |
| | | |
| | | string resultValue = jobject["ResponseData"].ToString(); |
| | | |
| | | var verResult = Newtonsoft.Json.JsonConvert.DeserializeObject<FirmwareVersionResult>(resultValue); |
| | | if (verResult.PageData.Count == 0) |
| | | { |
| | |
| | | } |
| | | |
| | | //硬件版本 |
| | | Dictionary<string, FirmwareHardInfo> dicHardData = null; |
| | | if (FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) |
| | | if (HdlFirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) |
| | | { |
| | | FirmwareUpdateResourse.dicFirmwareInfo[levelType] = new Dictionary<string, FirmwareHardInfo>(); |
| | | HdlFirmwareUpdateResourse.dicFirmwareInfo[levelType] = new Dictionary<string, FirmwareHardInfo>(); |
| | | } |
| | | dicHardData = FirmwareUpdateResourse.dicFirmwareInfo[levelType]; |
| | | var dicHardData = HdlFirmwareUpdateResourse.dicFirmwareInfo[levelType]; |
| | | |
| | | foreach (var data in verResult.PageData) |
| | | { |
| | |
| | | /// <param name="imgType">镜像类型</param> |
| | | /// <param name="nowVersion">现在的版本</param> |
| | | /// <returns></returns> |
| | | public static FirmwareVersionInfo GetFirmwareMostVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType, int nowVersion) |
| | | public FirmwareVersionInfo GetFirmwareMostVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType, int nowVersion) |
| | | { |
| | | //镜像类型 |
| | | var listdata = GetFirmwareVersionListInfo(levelType, HardwareVersion, imgType); |
| | |
| | | /// <param name="HardwareVersion">硬件版本</param> |
| | | /// <param name="imgType">镜像类型</param> |
| | | /// <returns></returns> |
| | | public static List<FirmwareVersionInfo> GetFirmwareVersionListInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) |
| | | public List<FirmwareVersionInfo> GetFirmwareVersionListInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) |
| | | { |
| | | if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) |
| | | if (HdlFirmwareUpdateResourse.dicFirmwareInfo == null || HdlFirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) |
| | | { |
| | | return new List<FirmwareVersionInfo>(); |
| | | } |
| | | //硬件版本号级别 |
| | | var dicHard = FirmwareUpdateResourse.dicFirmwareInfo[levelType]; |
| | | var dicHard = HdlFirmwareUpdateResourse.dicFirmwareInfo[levelType]; |
| | | |
| | | //硬件版本 |
| | | if (dicHard.ContainsKey(HardwareVersion) == false) |
| | |
| | | /// <param name="levelType">固件阶级分类</param> |
| | | /// <param name="HardwareVersion">硬件版本</param> |
| | | /// <returns></returns> |
| | | public static Dictionary<string, FirmwareImgTypeInfo> GetImageVersionListInfo(FirmwareLevelType levelType, string HardwareVersion) |
| | | public Dictionary<string, FirmwareImgTypeInfo> GetImageVersionListInfo(FirmwareLevelType levelType, string HardwareVersion) |
| | | { |
| | | if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) |
| | | if (HdlFirmwareUpdateResourse.dicFirmwareInfo == null || HdlFirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) |
| | | { |
| | | return new Dictionary<string, FirmwareImgTypeInfo>(); |
| | | } |
| | | //硬件版本号级别 |
| | | var dicHard = FirmwareUpdateResourse.dicFirmwareInfo[levelType]; |
| | | var dicHard = HdlFirmwareUpdateResourse.dicFirmwareInfo[levelType]; |
| | | |
| | | //硬件版本 |
| | | if (dicHard.ContainsKey(HardwareVersion) == false) |
| | |
| | | /// <param name="imgType">镜像类型</param> |
| | | /// <param name="nowVersion">现在的版本</param> |
| | | /// <returns></returns> |
| | | public static FirmwareVersionInfo GetFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType, int nowVersion) |
| | | public FirmwareVersionInfo GetFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType, int nowVersion) |
| | | { |
| | | //镜像类型 |
| | | var listdata = GetFirmwareVersionListInfo(levelType, HardwareVersion, imgType); |
| | |
| | | /// <param name="HardwareVersion">硬件版本</param> |
| | | /// <param name="imgType">镜像类型</param> |
| | | /// <returns></returns> |
| | | private static bool IsEsixtFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) |
| | | private bool IsEsixtFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType) |
| | | { |
| | | //第一大类 |
| | | if (FirmwareUpdateResourse.dicFirmwareInfo == null || FirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) |
| | | if (HdlFirmwareUpdateResourse.dicFirmwareInfo == null || HdlFirmwareUpdateResourse.dicFirmwareInfo.ContainsKey(levelType) == false) |
| | | { |
| | | return false; |
| | | } |
| | | //硬件 |
| | | if (FirmwareUpdateResourse.dicFirmwareInfo[levelType].ContainsKey(HardwareVersion) == false) |
| | | if (HdlFirmwareUpdateResourse.dicFirmwareInfo[levelType].ContainsKey(HardwareVersion) == false) |
| | | { |
| | | return false; |
| | | } |
| | | //镜像 |
| | | if (FirmwareUpdateResourse.dicFirmwareInfo[levelType][HardwareVersion].dicImgType.ContainsKey(imgType) == false) |
| | | if (HdlFirmwareUpdateResourse.dicFirmwareInfo[levelType][HardwareVersion].dicImgType.ContainsKey(imgType) == false) |
| | | { |
| | | return false; |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="device">设备对象</param> |
| | | /// <returns></returns> |
| | | public static bool IsEsixtDeviceFirmwareFile(OTADevice device) |
| | | public bool IsEsixtDeviceFirmwareFile(OTADevice device) |
| | | { |
| | | var fileFullName = GetDeviceFirmwareFile(device); |
| | | return System.IO.File.Exists(fileFullName); |
| | |
| | | /// </summary> |
| | | /// <param name="device">设备对象</param> |
| | | /// <returns></returns> |
| | | public static string GetDeviceFirmwareFile(OTADevice device) |
| | | public string GetDeviceFirmwareFile(OTADevice device) |
| | | { |
| | | //硬件版本_镜像ID_固件版本 |
| | | string fileName = device.HwVersion + "_" + device.ImgTypeId + "_" + device.ImgVersion; |
| | | return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Device_" + fileName + ".ota"); |
| | | return System.IO.Path.Combine(HdlFileNameResourse.FirmwareUpdateDirectory, "Device_" + fileName + ".ota"); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="zbGateway">网关对象</param> |
| | | /// <returns></returns> |
| | | public static string GetGatewayLinuxFirmwareFile(ZbGateway zbGateway) |
| | | public string GetGatewayLinuxFirmwareFile(ZbGateway zbGateway) |
| | | { |
| | | string fileName = zbGateway.LinuxHardVersion + "_" + zbGateway.LinuxImageType + "_" + zbGateway.LinuxFirmwareVersion; |
| | | return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Linux_" + fileName + ".ota"); |
| | | return System.IO.Path.Combine(HdlFileNameResourse.FirmwareUpdateDirectory, "Linux_" + fileName + ".ota"); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="zbGateway">网关对象</param> |
| | | /// <returns></returns> |
| | | public static string GetGatewayCoordinatorFirmwareFile(ZbGateway zbGateway) |
| | | public string GetGatewayCoordinatorFirmwareFile(ZbGateway zbGateway) |
| | | { |
| | | string fileName = zbGateway.CoordinatorHardVersion + "_" + zbGateway.CoordinatorImageId + "_" + zbGateway.CoordinatorFirmwareVersion; |
| | | return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Coordinator_" + fileName + ".ota"); |
| | | return System.IO.Path.Combine(HdlFileNameResourse.FirmwareUpdateDirectory, "Coordinator_" + fileName + ".ota"); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="codeObj">虚拟驱动数据</param> |
| | | /// <returns></returns> |
| | | public static string GetGatewayDriveCodeFirmwareFile(ZbGatewayData.DriveCodeObj codeObj) |
| | | public string GetGatewayDriveCodeFirmwareFile(ZbGatewayData.DriveCodeObj codeObj) |
| | | { |
| | | string fileName = codeObj.DriveHwVersion + "_" + codeObj.DriveImageType + "_" + codeObj.DriveFwVersion; |
| | | return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "DriveCode_" + fileName + ".ota"); |
| | | return System.IO.Path.Combine(HdlFileNameResourse.FirmwareUpdateDirectory, "DriveCode_" + fileName + ".ota"); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | /// </summary> |
| | | /// <param name="fullFileName"></param> |
| | | /// <param name="i_Msg"></param> |
| | | public static int DownLoadTemplateDeviceFirmware(string fullFileName, string i_Msg) |
| | | public 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); |
| | | HdlTemplateCommonLogic.Current.GetDeviceObjectFromTemplate(fullFileName, ref listTempDevice, ref listTempGateway); |
| | | |
| | | //获取需要下载的固件数据 |
| | | var listVersion = GetNeedToDownLoadVersionData(listTempDevice, listTempGateway); |
| | |
| | | System.Threading.Thread.Sleep(1000); |
| | | |
| | | var dicFirmwareName = new Dictionary<string, string>(); |
| | | var fileData = HdlFileLogic.Current.ReadFileTextContent(DirNameResourse.FirmwareUpdateList); |
| | | var fileData = HdlFileLogic.Current.ReadFileTextContent(HdlFileNameResourse.FirmwareUpdateList); |
| | | if (fileData != null) |
| | | { |
| | | //本地存放的固件原来的名字(因为设备升级时,它需要识别文件名字里面包含的特殊字符) |
| | |
| | | } |
| | | |
| | | //固件存储路径 |
| | | string firmwareDir = DirNameResourse.FirmwareUpdateDirectory; |
| | | string firmwareDir = HdlFileNameResourse.FirmwareUpdateDirectory; |
| | | int nowCount = 0; |
| | | int macCount = listVersion.Count + listAcUpdate.Count; |
| | | |
| | |
| | | { |
| | | ProgressFormBar.Current.Close(); |
| | | //保存列表名字 |
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName); |
| | | HdlFileLogic.Current.SaveFileContent(HdlFileNameResourse.FirmwareUpdateList, dicFirmwareName); |
| | | return -1; |
| | | } |
| | | //获取当前这个版本的固件信息 |
| | |
| | | continue; |
| | | } |
| | | //去下载这个固件 |
| | | var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = versionFirmware.DistributedMark }; |
| | | var byteData = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, new List<string> { "NotCheck" }, true); |
| | | var byteData = this.DowLoadFirmware(versionData.levelType, versionFirmware.DistributedMark); |
| | | if (byteData == null) |
| | | { |
| | | ProgressFormBar.Current.Close(); |
| | | //保存列表名字 |
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName); |
| | | HdlFileLogic.Current.SaveFileContent(HdlFileNameResourse.FirmwareUpdateList, dicFirmwareName); |
| | | return -1; |
| | | } |
| | | //保存固件 |
| | |
| | | for (int i = 0; i < listAcUpdate.Count; i++) |
| | | { |
| | | //下载空调模块 |
| | | var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = listAcUpdate[i].DistributedMark }; |
| | | var deviceFirmwareByte = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, new List<string> { "NotCheck" }, true); |
| | | var deviceFirmwareByte = this.DowLoadFirmware(FirmwareLevelType.A设备, listAcUpdate[i].DistributedMark); |
| | | if (deviceFirmwareByte == null) |
| | | { |
| | | ProgressFormBar.Current.Close(); |
| | | //保存列表名字 |
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName); |
| | | HdlFileLogic.Current.SaveFileContent(HdlFileNameResourse.FirmwareUpdateList, dicFirmwareName); |
| | | return -1; |
| | | } |
| | | //保存固件 |
| | |
| | | } |
| | | |
| | | //保存列表名字 |
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName); |
| | | HdlFileLogic.Current.SaveFileContent(HdlFileNameResourse.FirmwareUpdateList, dicFirmwareName); |
| | | ProgressFormBar.Current.Close(); |
| | | |
| | | return 1; |
| | |
| | | /// <param name="listDevice">设备列表</param> |
| | | /// <param name="listGateway">网关列表</param> |
| | | /// <returns></returns> |
| | | private static List<TemplateDeviceVersion> GetNeedToDownLoadVersionData(List<OTADevice> listDevice, List<ZbGateway> listGateway) |
| | | private List<TemplateDeviceVersion> GetNeedToDownLoadVersionData(List<OTADevice> listDevice, List<ZbGateway> listGateway) |
| | | { |
| | | //存储路径 |
| | | string firmwareDir = DirNameResourse.FirmwareUpdateDirectory; |
| | | string firmwareDir = HdlFileNameResourse.FirmwareUpdateDirectory; |
| | | HdlFileLogic.Current.CreateDirectory(firmwareDir); |
| | | |
| | | var listVersion = new List<TemplateDeviceVersion>(); |
| | |
| | | /// </summary> |
| | | /// <param name="listDevice">设备列表</param> |
| | | /// <param name="listTaget">与返回值对应的东西</param> |
| | | private static List<FirmwareVersionInfo> GetNeedDownLoadAirConditionerModule(List<OTADevice> listDevice, ref List<OTADevice> listTaget) |
| | | private List<FirmwareVersionInfo> GetNeedDownLoadAirConditionerModule(List<OTADevice> listDevice, ref List<OTADevice> listTaget) |
| | | { |
| | | var listUpdate = new List<FirmwareVersionInfo>(); |
| | | //固件存储路径 |
| | | string firmwareDir = DirNameResourse.FirmwareUpdateDirectory; |
| | | string firmwareDir = HdlFileNameResourse.FirmwareUpdateDirectory; |
| | | |
| | | foreach (var otaDevice in listDevice) |
| | | { |
| | | var myType = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice> { otaDevice }); |
| | | if (myType.ConcreteType != Common.DeviceConcreteType.AirConditioner_ZbGateway) |
| | | var myType = HdlDeviceCommonLogic.Current.GetMyDeviceEnumInfo(new List<CommonDevice> { otaDevice }); |
| | | if (myType.ConcreteType != DeviceConcreteType.AirConditioner_ZbGateway) |
| | | { |
| | | //只处理中央空调 |
| | | continue; |
| | |
| | | } |
| | | } |
| | | return listUpdate; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 下载固件 |
| | | /// </summary> |
| | | /// <param name="levelType">下载的类型</param> |
| | | /// <param name="i_Mainkey">主键</param> |
| | | /// <returns></returns> |
| | | public byte[] DowLoadFirmware(FirmwareLevelType levelType, string i_Mainkey) |
| | | { |
| | | var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = i_Mainkey }; |
| | | |
| | | //默认为10秒 |
| | | int waitTime = 10; |
| | | if (levelType != FirmwareLevelType.A设备) |
| | | { |
| | | //网关的比较大,给多一点时间 |
| | | waitTime = 25; |
| | | } |
| | | |
| | | int count = 3; |
| | | while (count > 0) |
| | | { |
| | | var result = this.RequestZigbeeHttps("FirmwareMana/DownloadPlatformUploadFirmware", pra, waitTime); |
| | | if (result != null) |
| | | { |
| | | return result.Length == 0 ? null : result; |
| | | } |
| | | count--; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 访问云端的方法_____________________ |
| | | |
| | | /// <summary> |
| | | /// 云端固件的网址 |
| | | /// </summary> |
| | | public string RequestHttpsHost = "https://global.hdlcontrol.com/ProposedProductionApi"; |
| | | |
| | | /// <summary> |
| | | /// 访问云端固件的方法 |
| | | /// </summary> |
| | | /// <param name="i_interfaceName">接口名字</param> |
| | | /// <param name="i_body">body数据</param> |
| | | /// <param name="i_waitTime">超时时间</param> |
| | | /// <returns></returns> |
| | | public byte[] RequestZigbeeHttps(string i_interfaceName, object i_body, int i_waitTime) |
| | | { |
| | | string fullUrl = this.RequestHttpsHost + "/" + i_interfaceName; |
| | | |
| | | var result = HdlHttpLogic.Current.DoRequestZigbeeHttps(fullUrl, null, RestSharp.Method.POST, i_body, null, null, CheckMode.A不检测, i_waitTime, false); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 一般方法___________________________ |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="Info"></param> |
| | | /// <param name="remark"></param> |
| | | private static void DoAdjustFirmwareInformation(FirmwareVersionInfo Info, string remark) |
| | | private void DoAdjustFirmwareInformation(FirmwareVersionInfo Info, string remark) |
| | | { |
| | | if (string.IsNullOrEmpty(remark) == true) |
| | | { |