using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.DeviceAirConditioner { /// /// 中央空调的模块升级界面 /// public class ACZbGatewayModuleUpdateForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 设备Ota /// private OTADevice otaDevice = null; /// /// 设备 /// private CommonDevice deviceAc = null; /// /// 前回选择的控件 /// private NormalSelectControl oldSelectContr = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 设备 public void ShowForm(CommonDevice i_deviceAc) { this.deviceAc = i_deviceAc; this.otaDevice = Common.LocalDevice.Current.GetOTADevice(i_deviceAc.DeviceAddr); //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAirConditioningModule)); //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// 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 ■ 初始化空调模块列表_________________ /// /// 初始化空调模块列表 /// private void InitAirConditioningModuleList(VerticalListControl listView) { var list = HdlFirmwareUpdateLogic.GetFirmwareVersionListInfo(FirmwareLevelType.ZigbeeDevice, otaDevice.HwVersion.ToString(), otaDevice.ImgTypeId.ToString()); var listUpdate = new List(); foreach (var data in list) { if (data.Name.EndsWith(".bin") == true) { //只要.bin文件 listUpdate.Add(data); } } 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); }); }; }); } /// /// 添加模块行 /// /// /// /// 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; }; } /// /// 获取空调模块的名字 /// /// /// 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 ■ 一般方法___________________________ /// /// 获取选择的升级固件 /// /// /// /// private FirmwareVersionInfo GetSelectFirmware(VerticalListControl listView, List 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 ■ 设备升级___________________________ /// /// 设备升级 /// 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 (FirmwareUpdateResourse.dicUpdateList.ContainsKey(deviceAc.DeviceAddr) == true && FirmwareUpdateResourse.dicUpdateList[deviceAc.DeviceAddr].IsFinishUpdate == true) { //如果设备已经升级完成,界面关闭时,则移除内存 FirmwareUpdateResourse.dicUpdateList[deviceAc.DeviceAddr].Dispose(); FirmwareUpdateResourse.dicUpdateList.Remove(deviceAc.DeviceAddr); } }; } #endregion } }