old mode 100755
new mode 100644
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>();
|
| | |
| | | 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)
|
| | | {
|