using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using ZigBee.Device;
|
|
namespace Shared.Phone.UserCenter.DeviceAirConditioner
|
{
|
/// <summary>
|
/// 中央空调的模块升级界面
|
/// </summary>
|
public class ACZbGatewayModuleUpdateForm : EditorCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 设备Ota
|
/// </summary>
|
private OTADevice otaDevice = null;
|
/// <summary>
|
/// 设备
|
/// </summary>
|
private CommonDevice deviceAc = null;
|
/// <summary>
|
/// 前回选择的控件
|
/// </summary>
|
private NormalSelectControl oldSelectContr = null;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
/// <param name="i_deviceAc">设备</param>
|
public void ShowForm(CommonDevice i_deviceAc)
|
{
|
this.deviceAc = i_deviceAc;
|
this.otaDevice = HdlDeviceCommonLogic.Current.GetOTADevice(i_deviceAc.DeviceAddr);
|
|
//设置头部信息
|
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAirConditioningModule));
|
|
//初始化中部信息
|
this.InitMiddleFrame();
|
}
|
|
/// <summary>
|
/// 初始化中部信息
|
/// </summary>
|
private void InitMiddleFrame()
|
{
|
//清空bodyFrame
|
this.ClearBodyFrame();
|
|
var frameBack = new FrameLayout();
|
frameBack.Height = Application.GetRealHeight(3);
|
frameBack.BackgroundColor = UserCenterColor.Current.White;
|
bodyFrameLayout.AddChidren(frameBack);
|
|
var listView = new VerticalListControl(29);
|
listView.Y = frameBack.Bottom;
|
listView.Height = bodyFrameLayout.Height - frameBack.Height;
|
listView.BackgroundColor = UserCenterColor.Current.White;
|
bodyFrameLayout.AddChidren(listView);
|
|
//初始化空调模块列表
|
this.InitAirConditioningModuleList(listView);
|
}
|
|
#endregion
|
|
#region ■ 初始化空调模块列表_________________
|
|
/// <summary>
|
/// 初始化空调模块列表
|
/// </summary>
|
private void InitAirConditioningModuleList(VerticalListControl listView)
|
{
|
var listUpdate = this.GetAirConditioningModuleData();
|
if (listUpdate.Count == 0)
|
{
|
//没有可升级的空调模块
|
this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotHadAirConditioningUpdateModule));
|
return;
|
}
|
HdlThreadLogic.Current.RunMainInThread(() =>
|
{
|
for (int i = 0; i < listUpdate.Count; i++)
|
{
|
//添加模块行
|
this.AddModuleRow(listView, listUpdate[i], i.ToString(), i != listUpdate.Count - 1);
|
}
|
//调整高度
|
listView.AdjustRealHeightByBottomButton(Application.GetRealHeight(23));
|
|
//升级
|
var btnUpdate = new BottomClickButton();
|
btnUpdate.TextID = R.MyInternationalizationString.uLevelUp;
|
bodyFrameLayout.AddChidren(btnUpdate);
|
btnUpdate.ButtonClickEvent += (sender, e) =>
|
{
|
var selectInfo = this.GetSelectFirmware(listView, listUpdate);
|
if (selectInfo == null)
|
{
|
//没有选择固件
|
return;
|
}
|
//设备升级
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
this.DoDeviceUpdate(selectInfo);
|
});
|
};
|
});
|
}
|
|
/// <summary>
|
/// 添加模块行
|
/// </summary>
|
/// <param name="listView"></param>
|
/// <param name="info"></param>
|
/// <param name="mainkeys"></param>
|
private void AddModuleRow(VerticalListControl listView, FirmwareVersionInfo info, string mainkeys, bool addLine)
|
{
|
//获取空调模块的名字
|
string textView = this.GetAirConditioningModuleName(info);
|
var row = new NormalSelectControl(textView, listView.rowSpace / 2);
|
row.MainKeys = mainkeys;
|
listView.AddChidren(row);
|
row.InitControl("Device/AirConditionerEpoint.png");
|
if (addLine == true)
|
{
|
row.AddBottomLine();
|
}
|
row.ButtonClickEvent += (sender, e) =>
|
{
|
//取消
|
if (row.IsSelected == true)
|
{
|
row.IsSelected = false;
|
oldSelectContr = null;
|
return;
|
}
|
//选择
|
row.IsSelected = true;
|
if (oldSelectContr != null)
|
{
|
oldSelectContr.IsSelected = false;
|
}
|
oldSelectContr = row;
|
};
|
}
|
|
/// <summary>
|
/// 获取空调模块的名字
|
/// </summary>
|
/// <param name="info"></param>
|
/// <returns></returns>
|
private string GetAirConditioningModuleName(FirmwareVersionInfo info)
|
{
|
string textView = string.Empty;
|
if (info.Name.Contains("IRACC_DAK") == true)
|
{
|
//大金空调模块
|
textView = Language.StringByID(R.MyInternationalizationString.uDakAirConditioningModule);
|
}
|
else if (info.Name.Contains("IRACC_HIC") == true)
|
{
|
//重工空调模块
|
textView = Language.StringByID(R.MyInternationalizationString.uHicAirConditioningModule);
|
}
|
else if (info.Name.Contains("IRACC_HITACHI") == true)
|
{
|
//日立空调模块
|
textView = Language.StringByID(R.MyInternationalizationString.uHitachiAirConditioningModule);
|
}
|
else if (info.Name.Contains("IRACC_SAEC") == true)
|
{
|
//电机空调模块
|
textView = Language.StringByID(R.MyInternationalizationString.uSaecAirConditioningModule);
|
}
|
else if (info.Name.Contains("IRACC_TOSHIBA") == true)
|
{
|
//东芝空调模块
|
textView = Language.StringByID(R.MyInternationalizationString.uToshibaAirConditioningModule);
|
}
|
else if (info.Name.Contains("IRACC_GREE") == true)
|
{
|
//格力空调模块
|
textView = Language.StringByID(R.MyInternationalizationString.uGreeAirConditioningModule);
|
}
|
else if (info.Name.Contains("IRACC_MIDEA") == true)
|
{
|
//美的空调模块
|
textView = Language.StringByID(R.MyInternationalizationString.uMideaAirConditioningModule);
|
}
|
else
|
{
|
//空调升级模块
|
textView = Language.StringByID(R.MyInternationalizationString.uAirConditioningUpdateModule);
|
}
|
return textView;
|
}
|
|
#endregion
|
|
#region ■ 获取空调模块数据___________________
|
|
/// <summary>
|
/// 获取空调模块数据
|
/// </summary>
|
/// <returns></returns>
|
private List<FirmwareVersionInfo> GetAirConditioningModuleData()
|
{
|
var listUpdate = new List<FirmwareVersionInfo>();
|
|
var list = HdlFirmwareUpdateLogic.Current.GetFirmwareVersionListInfo(FirmwareLevelType.A设备, otaDevice.HwVersion.ToString(), otaDevice.ImgTypeId.ToString());
|
foreach (var data in list)
|
{
|
if (data.Name.EndsWith(".bin") == true)
|
{
|
//只要.bin文件
|
listUpdate.Add(data);
|
}
|
}
|
if (Common.Config.Instance.Home.TemplateMode == 2 && listUpdate.Count == 0)
|
{
|
//从本地获取
|
var listFile = HdlFileLogic.Current.GetFileFromDirectory(HdlFileNameResourse.FirmwareUpdateDirectory);
|
string otaKey = otaDevice.HwVersion.ToString() + "_" + otaDevice.ImgTypeId.ToString();
|
foreach (var file in listFile)
|
{
|
if (file.StartsWith("AC_" + otaKey) == true && file.EndsWith(".bin") == true)
|
{
|
var info = new FirmwareVersionInfo();
|
info.Name = System.IO.Path.Combine(HdlFileNameResourse.FirmwareUpdateDirectory, file);
|
info.ImagType = "-100";
|
listUpdate.Add(info);
|
}
|
}
|
}
|
|
return listUpdate;
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 获取选择的升级固件
|
/// </summary>
|
/// <param name="listView"></param>
|
/// <param name=""></param>
|
/// <returns></returns>
|
private FirmwareVersionInfo GetSelectFirmware(VerticalListControl listView, List<FirmwareVersionInfo> listInfo)
|
{
|
int contrCount = listView.ChildrenCount;
|
for (int i = 0; i < contrCount; i++)
|
{
|
var myView = listView.GetChildren(i) as NormalSelectControl;
|
if (myView == null || myView.IsSelected == false)
|
{
|
continue;
|
}
|
return listInfo[i];
|
}
|
return null;
|
}
|
|
#endregion
|
|
#region ■ 设备升级___________________________
|
|
/// <summary>
|
/// 设备升级
|
/// </summary>
|
private void DoDeviceUpdate(FirmwareVersionInfo updateInfo)
|
{
|
//打开进度条
|
ProgressFormBar.Current.Start();
|
//设备升级
|
var updateLogic = new HdlACZbGatewayUpdateLogic(deviceAc, updateInfo);
|
//更新状态变化的事件
|
updateLogic.UpdateStatuChangedEvent += (div, msg) =>
|
{
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
if (div == -1)
|
{
|
//异常
|
this.ShowMassage(ShowMsgType.Tip, msg);
|
ProgressFormBar.Current.Close();
|
}
|
else if (div == 0)
|
{
|
//一般信息
|
ProgressFormBar.Current.SetMsg(msg);
|
}
|
else if (div == 1)
|
{
|
//升级完成
|
ProgressFormBar.Current.Close();
|
this.ShowMassage(ShowMsgType.Tip, msg);
|
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
//关闭界面
|
this.CloseForm();
|
});
|
}
|
});
|
};
|
//进度值改变事件
|
updateLogic.ProgressEvent += (value) =>
|
{
|
ProgressFormBar.Current.SetValue(value);
|
};
|
//设备升级开始
|
updateLogic.StartUpdateReady();
|
//关闭事件
|
ProgressFormBar.Current.CloseEvent += () =>
|
{
|
//升级对象
|
if (HdlFirmwareUpdateResourse.dicUpdateList.ContainsKey(deviceAc.DeviceAddr) == true
|
&& HdlFirmwareUpdateResourse.dicUpdateList[deviceAc.DeviceAddr].IsFinishUpdate == true)
|
{
|
//如果设备已经升级完成,界面关闭时,则移除内存
|
HdlFirmwareUpdateResourse.dicUpdateList[deviceAc.DeviceAddr].Dispose();
|
HdlFirmwareUpdateResourse.dicUpdateList.Remove(deviceAc.DeviceAddr);
|
}
|
};
|
}
|
|
#endregion
|
}
|
}
|