| | |
| | | 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 = 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 = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.VirtualDevice, Pra);
|
| | | var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.A虚拟驱动, Pra);
|
| | | return result;
|
| | | }
|
| | | else
|
| | |
| | | Pra.FirmwareManaSecondType = null;
|
| | | Pra.HardwareVersion = HardwareVersion;
|
| | | Pra.DeviceType = imgType;
|
| | | var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.ZigbeeDevice, Pra);
|
| | | var result = GetFirmwareVersionAndSetToMemmory(FirmwareLevelType.A设备, Pra);
|
| | | return result;
|
| | | }
|
| | | }
|
| | |
| | | //它不是升级固件, .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)
|
| | | {
|
| | | return verInfo;
|
| | |
| | |
|
| | | //获取需要下载的固件数据
|
| | | var listVersion = GetNeedToDownLoadVersionData(listTempDevice, listTempGateway);
|
| | | if (listVersion.Count == 0)
|
| | | //获取需要下载的空调模块
|
| | | var listAcOta = new List<OTADevice>();
|
| | | var listAcUpdate = GetNeedDownLoadAirConditionerModule(listTempDevice, ref listAcOta);
|
| | |
|
| | | if (listVersion.Count == 0 && listAcUpdate.Count == 0)
|
| | | {
|
| | | return 0;
|
| | | }
|
| | |
| | | if (fileData != null)
|
| | | {
|
| | | //本地存放的固件原来的名字(因为设备升级时,它需要识别文件名字里面包含的特殊字符)
|
| | | //key:硬件版本_镜像ID_固件版本 value:固件原来的名字
|
| | | //key:全路径,硬件版本_镜像ID_固件版本 value:固件原来的名字
|
| | | dicFirmwareName = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(fileData);
|
| | | }
|
| | |
|
| | | //固件存储路径
|
| | | string firmwareDir = DirNameResourse.FirmwareUpdateDirectory;
|
| | | int nowCount = 0;
|
| | | int macCount = listVersion.Count + listAcUpdate.Count;
|
| | |
|
| | | foreach (var versionData in listVersion)
|
| | | {
|
| | | nowCount++;
|
| | |
| | | if (result == -1)
|
| | | {
|
| | | ProgressFormBar.Current.Close();
|
| | | //保存列表名字
|
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
|
| | | return -1;
|
| | | }
|
| | | //获取当前这个版本的固件信息
|
| | |
| | | if (versionFirmware == null)
|
| | | {
|
| | | //云端没有这个版本 进度值
|
| | | ProgressFormBar.Current.SetValue(nowCount, listVersion.Count);
|
| | | ProgressFormBar.Current.SetValue(nowCount, macCount);
|
| | | continue;
|
| | | }
|
| | | //去下载这个固件
|
| | | var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = versionFirmware.DistributedMark };
|
| | | var byteData = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, null, true);
|
| | | var byteData = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, new List<string> { "NotCheck" }, true);
|
| | | if (byteData == null)
|
| | | {
|
| | | ProgressFormBar.Current.Close();
|
| | | //保存列表名字
|
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
|
| | | return -1;
|
| | | }
|
| | | //保存固件
|
| | | var saveFile = System.IO.Path.Combine(firmwareDir, versionData.FileDiv + versionData.HwVersion + "_" + versionData.ImageType + "_" + versionData.FirmwareVersion + ".ota");
|
| | | HdlFileLogic.Current.SaveTextToFile(saveFile, Encoding.UTF8.GetString(byteData));
|
| | | HdlFileLogic.Current.SaveByteToFile(saveFile, byteData);
|
| | | dicFirmwareName[saveFile] = versionFirmware.Name;
|
| | |
|
| | | //进度值
|
| | | ProgressFormBar.Current.SetValue(nowCount, listVersion.Count);
|
| | | ProgressFormBar.Current.SetValue(nowCount, macCount);
|
| | | }
|
| | | 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);
|
| | | if (deviceFirmwareByte == null)
|
| | | {
|
| | | ProgressFormBar.Current.Close();
|
| | | //保存列表名字
|
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
|
| | | return -1;
|
| | | }
|
| | | //保存固件
|
| | | string fileName = "AC_" + listAcOta[i].HwVersion + "_" + listAcOta[i].ImgTypeId + "_" + listAcUpdate[i].Name;
|
| | | var saveFile = System.IO.Path.Combine(firmwareDir, fileName);
|
| | | HdlFileLogic.Current.SaveByteToFile(saveFile, deviceFirmwareByte);
|
| | |
|
| | | //进度值
|
| | | ProgressFormBar.Current.SetValue(nowCount, macCount);
|
| | | }
|
| | |
|
| | | //保存列表名字
|
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
|
| | | ProgressFormBar.Current.Close();
|
| | |
| | | listVersion.Add(new TemplateDeviceVersion
|
| | | {
|
| | | FileDiv = "Device_",
|
| | | levelType = FirmwareLevelType.ZigbeeDevice,
|
| | | levelType = FirmwareLevelType.A设备,
|
| | | HwVersion = device.HwVersion.ToString(),
|
| | | ImageType = device.ImgTypeId.ToString(),
|
| | | FirmwareVersion = device.ImgVersion
|
| | |
| | | listVersion.Add(new TemplateDeviceVersion
|
| | | {
|
| | | FileDiv = "Coordinator_",
|
| | | levelType = FirmwareLevelType.Coordinator,
|
| | | levelType = FirmwareLevelType.A协调器,
|
| | | HwVersion = gateway.CoordinatorHardVersion.ToString(),
|
| | | ImageType = gateway.CoordinatorImageId.ToString(),
|
| | | FirmwareVersion = gateway.CoordinatorFirmwareVersion
|
| | |
| | | listVersion.Add(new TemplateDeviceVersion
|
| | | {
|
| | | FileDiv = "DriveCode_",
|
| | | levelType = FirmwareLevelType.VirtualDevice,
|
| | | levelType = FirmwareLevelType.A虚拟驱动,
|
| | | HwVersion = data.DriveHwVersion.ToString(),
|
| | | ImageType = data.DriveImageType.ToString(),
|
| | | FirmwareVersion = data.DriveFwVersion
|
| | |
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 获取需要下载的空调模块
|
| | | /// </summary>
|
| | | /// <param name="listDevice">设备列表</param>
|
| | | /// <param name="listTaget">与返回值对应的东西</param>
|
| | | private static List<FirmwareVersionInfo> GetNeedDownLoadAirConditionerModule(List<OTADevice> listDevice, ref List<OTADevice> listTaget)
|
| | | {
|
| | | var listUpdate = new List<FirmwareVersionInfo>();
|
| | | //固件存储路径
|
| | | string firmwareDir = DirNameResourse.FirmwareUpdateDirectory;
|
| | |
|
| | | foreach (var otaDevice in listDevice)
|
| | | {
|
| | | var myType = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice> { otaDevice });
|
| | | if (myType.ConcreteType != Common.DeviceConcreteType.AirConditioner_ZbGateway)
|
| | | {
|
| | | //只处理中央空调
|
| | | continue;
|
| | | }
|
| | | var list = GetFirmwareVersionListInfo(FirmwareLevelType.A设备, otaDevice.HwVersion.ToString(), otaDevice.ImgTypeId.ToString());
|
| | | foreach (var data in list)
|
| | | {
|
| | | if (data.Name.EndsWith(".bin") == true && System.IO.File.Exists(firmwareDir) == false)
|
| | | {
|
| | | //只要.bin文件
|
| | | listUpdate.Add(data);
|
| | | listTaget.Add(otaDevice);
|
| | | }
|
| | | }
|
| | | }
|
| | | return listUpdate;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 模板设备的版本信息
|
| | | /// </summary>
|
| | | private class TemplateDeviceVersion
|