| | |
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.Text;
|
| | | using System.Threading.Tasks;
|
| | |
|
| | | namespace Shared.Phone.UserCenter
|
| | | {
|
| | |
| | | public static void DoUpdateNextFirmware()
|
| | | {
|
| | | //下一个要执行更新的网关
|
| | | GatewayFirmwareUpdateControl gwControl = null;
|
| | | foreach (var contr in FirmwareUpdateResourse.dicGatewayUpdateList.Values)
|
| | | 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)
|
| | | {
|
| | | //下一个升级的就是它了
|
| | | gwControl = contr;
|
| | | if (contr.ClassDiv == 1 && gwControl == null)
|
| | | {
|
| | | //下一个升级的就是它了
|
| | | gwControl = contr;
|
| | | }
|
| | | else if (contr.ClassDiv == 2 && deviceControl == null)
|
| | | {
|
| | | //下一个升级的就是它了
|
| | | deviceControl = contr;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | HdlDeviceUpdateLogic deviceControl = null;
|
| | | foreach (var contr in FirmwareUpdateResourse.dicDeviceUpdateList.Values)
|
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | //如果别的还在升级中,则不再处理
|
| | | if (contr.IsFinishUpdate == false)
|
| | | if (gwControl != null)
|
| | | {
|
| | | //开始执行更新操作
|
| | | gwControl.DoStartUpdate();
|
| | | return;
|
| | | }
|
| | | //如果这个设备是在等待列表的话
|
| | | if (contr.UpdateStatu == UpdateStatuMode.Wait && deviceControl == null)
|
| | |
|
| | | if (deviceControl != null)
|
| | | {
|
| | | //下一个升级的就是它了
|
| | | deviceControl = contr;
|
| | | //开始执行更新操作
|
| | | deviceControl.DoStartUpdate();
|
| | | }
|
| | | }
|
| | |
|
| | | if (gwControl != null)
|
| | | {
|
| | | //开始执行更新操作
|
| | | gwControl.DoStartUpdate();
|
| | | return;
|
| | | }
|
| | |
|
| | | if (deviceControl != null)
|
| | | {
|
| | | //开始执行更新操作
|
| | | deviceControl.DoStartUpdate();
|
| | | }
|
| | | });
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
| | | #region ■ 添加升级固件信息___________________
|
| | |
|
| | | /// <summary>
|
| | | /// 添加升级固件信息
|
| | | /// 添加升级固件信息 1:正常 -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;
|
| | |
| | | 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)
|
| | |
| | | Pra.FirmwareManaSecondType = 1;
|
| | | Pra.HardwareVersion = HardwareVersion;
|
| | | Pra.DeviceType = imgType;
|
| | | var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Coordinator, Pra);
|
| | | var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.Coordinator, Pra);
|
| | | return result;
|
| | | }
|
| | | else if (levelType == FirmwareLevelType.VirtualDevice)
|
| | |
| | | Pra.FirmwareManaSecondType = 2;
|
| | | Pra.HardwareVersion = HardwareVersion;
|
| | | Pra.DeviceType = imgType;
|
| | | var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.VirtualDevice, Pra);
|
| | | var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.VirtualDevice, Pra);
|
| | | return result;
|
| | | }
|
| | | else
|
| | |
| | | Pra.FirmwareManaSecondType = null;
|
| | | Pra.HardwareVersion = HardwareVersion;
|
| | | Pra.DeviceType = imgType;
|
| | | var result = await GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.ZigbeeDevice, Pra);
|
| | | var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.ZigbeeDevice, Pra);
|
| | | return result;
|
| | | }
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 获取云端的固件,然后存入缓存中
|
| | | /// 获取云端的固件,然后存入缓存中 1:正常 -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)
|
| | | {
|
| | | string resultValue = await UserCenterLogic.GetResponseDataByRequestHttps("FirmwareMana/DetectionPlatformUploadFirmware", false, pra);
|
| | | if (resultValue == null)
|
| | | var listCheck = new List<string> { "NotCheck" };
|
| | | string resultValue = UserCenterLogic.GetResponseDataByRequestHttps("FirmwareMana/DetectionPlatformUploadFirmware", false, pra, listCheck);
|
| | | 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;
|
| | | }
|
| | |
|
| | | //硬件版本
|
| | |
| | |
|
| | | foreach (var data in verResult.PageData)
|
| | | {
|
| | | //固件版本显示:
|
| | | //10101 3个byte 显示为:ver.1.01.01
|
| | | if (data.FirmwareVersion.Length != 6 && data.FirmwareVersion.Length != 5)
|
| | | {
|
| | | //非正规的固件版本,不再考虑范围内
|
| | | continue;
|
| | | }
|
| | | //硬件分类
|
| | | FirmwareHardInfo hardInfo = null;
|
| | | string hardCode = data.HardwareVersion;
|
| | |
| | | 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;
|
| | | return 1;
|
| | | }
|
| | |
|
| | | #endregion |
| | |
| | | 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)
|
| | | {
|
| | | //中间那个byte为奇数时,代表是测试版本,在显示最新版本时,不需要显示,但是在历史版本那里可以显示
|
| | | //中间那个byte为偶数时,代表是正式版本
|
| | | continue;
|
| | | }
|
| | |
|
| | | if (verInfo.FirmwareVersion > nowVersion)
|
| | | {
|
| | | nowVersion = verInfo.FirmwareVersion;
|
| | |
| | | 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
|
| | | }
|
| | | }
|