📄 updateui.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : updateUI.c
Desc : 定义 系统升级相关的与界面相关的操作和接口.
Author : huangsl
Date : 2007-11-14
Notes : 安装类型:
1.在没有任何系统的情况下 的安装 -- 此时安装程序没有任何系统接口和资源澹(包括字库).
此种情况下,无须用户干预.
2.系统正常运行下的升级 安装.
安装模式:
通过脚本和PC工具生产安装固件,然后有专门的安装程序来执行该固件.
相关工作:
1.两种情况下的文件结构安排.
2.安装接口 扩展性问题--跨版本安装.
3.安装固件如何生成--脚本生成还是模块生成.
4.如果安装过程中断电,如何保证安全性.
$Log: updateUI.c,v $
Revision 1.8 2008/06/30 06:16:17 HSL
增加升级过程中关闭 定时器和USB中断功能.
Revision 1.7 2008/06/19 04:43:27 Administrator
代码整理!
Revision 1.6 2008/06/18 02:56:21 Administrator
修改头文件位置!
Revision 1.5 2008/06/17 08:23:26 Administrator
VC工程修改!
Revision 1.4 2008/06/13 07:08:55 Administrator
HJ 更新三级 LOAD 工程!
Revision 1.3 2008/05/26 03:33:13 HSL
修改SETUP工程的BUG.
Revision 1.2 2008/05/20 07:44:49 HSL
根据PC仿真根改部分文件,增加部分WCHAR接口,根据状态栏进行相应修改.
Revision 1.1.1.1 2008/03/06 13:29:10 Lingzhaojun
no message
Revision 1.7 2007/12/13 09:12:17 Lingzhaojun
no message
Revision 1.6 2007/12/13 02:28:33 Zhaojun
no message
Revision 1.5 2007/12/11 07:01:42 Lingzhaojun
提交固件升级方案一
Revision 1.4 2007/12/10 09:28:51 Lingzhaojun
no message
Revision 1.3 2007/12/07 10:41:42 Lingzhaojun
提交固件升级初步版本
Revision 1.2 2007/12/06 03:24:57 Lingzhaojun
提交固件升级一部分UI程序
Revision 1.1 2007/11/23 08:04:12 Huangshilin
增加安装接口.
Revision 1.4 2007/11/05 09:53:49 Huangshilin
增加GUI接口,增加应用资源互斥控制.
* huangsl 2007-09-19 for rk27.
*
*********************************************************************/
#include "include.h"
#include "setup\setup.h"
#include "..\process\rkbin.h"
#include "System.h"
#include "guictrl\Gui.h"
/*****************************************************************************/
//#define SETUPDEDEBUG
extern WINDOW_PROCREG WinUpdateProcMap[];
extern WINDOW_PROCREG FWDispWinMap[];
char* Setupfile = "C:\\SYSTEM\\BASE.RKW";
extern char * VerNo;
#define DelaySec 2
char* SetupPrint = NULL;
PIMAGE_PACKDENTRY SetupFilePrint;
#define Updstate_Check (0)
#define Updstate_Begin (1)
#define Updstate_Copy (2)
#define Updstate_Restart (3)
#define Updstate_Max (4)
typedef enum
{
UPDATE_SELECT_NONE,
UPDATE_SELECT_CONFIRM,
UPDATE_SELECT_CONCEL,
UPDATE_SELECT_RETURN
}UpdateWinID;
typedef struct
{
UINT32 UpdatFouce;
UINT32 UpdateState;
UINT32 TICK;
}W_Update;
UpdateWinID updatewinID = UPDATE_SELECT_NONE;
extern MY_FILE *gUpdateFile; //文件指针.
#ifdef BOARD
char gSetupDefaultFwFileName[ ] = "D:\\SETUP.RKW";
#else
char gSetupDefaultFwFileName[ ] = "..\\..\\..\\Resource\\RK27SDK.RKW";
#endif
/*****************************************************************************/
//EXTERN
extern INT32U UpdateActionHandler(void **currAction , WINDOW* win);
extern void *UpdateGetFirstAction(INT32U *Err); //char* fwFile ,
extern void UpdateCancle(void *lastAction);
extern void *UpdateGetNextAction(void *lastAction);
extern PRK_SWVERSION GetSetUpVersion(void);
extern PSWVERSION_REGKEY GetSwVersion(void);
extern PHWVERSION_REGKEY GetHwVersion(void);
extern void UpdateActionStart(void);
WINDOW* FirmWareWin;
void FWUpdateWin(WINDOW* parent)
{
FileListItem Item = {0, "FirmWare Update..."};
W_List *WListObj;
FirmWareWin = WindowCreateEx(parent, WS_FULLSCREEN | WM_TICK | WES_FileList, WID_SetupWinMain, 0, 0, LCD_W, LCD_H, NULL, BID_Setup, NULL, NULL, FWDispWinMap, NULL);
WListObj = (W_List *)FirmWareWin->Data;
WListObj->TitleHeight = 30;
WListObj->IconBackground = 0;
WListObj->IconItemSelect.BmpID = 0;
//WListObj->MaxItemIndex= 9;
WindowSendMessage(FirmWareWin, WM_ListAddItem, 1, &Item);
LCD_Update_WT();
//080630,huangsl,为了防止意外情况,关闭中断.
//不能采用关闭 IRQ 的形式,原因有2:1.各个TASK的 CPSR是独立的,因此,当切换到 DISP TASK的时候,IRQ又被
//打开,2.RGB屏的情况下,必须允许中断才能刷屏.此处改为单独屏蔽调 TIMER和USB中断.
//ENTER_CRITICAL();
#ifdef WD
WDDeInitialize();
#endif
Intr_Disable(INTC_TMR2); // OS TIMER
Intr_Disable(INTC_TMR0); // OS TIMER
Intr_Disable(INTC_UDC); // USB INT.
#ifdef SETUP
BL_SetBright(BL_DARK); //080221,RGB 屏下不关背光会 花屏.
UpdateActionStart();
#else
#ifndef SETUPDEDEBUG
SetupMain(0);
WindowSendMessage(FirmWareWin, WM_COMMAND, 0, (WLPARAM)"Restart!");
LCD_Update_WT();
DelayMs_nops(2000);
ISystemReboot(0);
#endif
#endif
}
#ifdef SETUPDEDEBUG
UINT16 updateflag = 0;
INT32U FWUpdateWinTick(WINDOW *win , WMPARAM wParam, WLPARAM lParam)
{
FileListItem Itemcopy = {0, "COPYING FILE:"};
if (updateflag)
{
updateflag = 0;
WindowSendMessage(win, WM_ListAddItem, 1, &Itemcopy);
}
else
{
updateflag = 1;
WindowSendMessage(win, WM_ListAddItem, 1, NULL);
}
}
#endif
INT32U FWUpdateWinComm(WINDOW *win , WMPARAM wParam, WLPARAM lParam)
{
W_List *WListObj = (W_List *)win->Data;
FileListItem Item = {0, " "};
FileListItem Itemcopy = {0, "copy file:"};
FileListItem ItemMakeDir = {0, "make directory:"};
if (10 <= WListObj->MaxItemIndex)
WindowSendMessage(win, WM_ListDeleteItem, 1, NULL);
if (lParam)
{
if (9 <= WListObj->MaxItemIndex)
WindowSendMessage(win, WM_ListDeleteItem, 1, NULL);
if (IRES_PACKACT_CRREATFILE == SetupFilePrint->Action)
WindowSendMessage(win, WM_ListAddItem, 1, &Itemcopy);
else if (IRES_PACKACT_MKDIR == SetupFilePrint->Action)
WindowSendMessage(win, WM_ListAddItem, 1, &ItemMakeDir);
RKmemset(Item.pText, 0, 48);
RKmemcpy(Item.pText, lParam, RKstrlen((char*)lParam));
WindowSendMessage(win, WM_ListAddItem, 1, &Item);
}
}
INT32U FWUpdateWinPaint(WINDOW *win , WMPARAM wParam, WLPARAM lParam)
{
DrawBmpId(win->x, win->y, win->BmpID);
return ListWinPaint(win , wParam, lParam);
}
void DispVisionInf(UINT16 X, UINT16 Y)
{
ColorDesc color = {COLOR_BLACK, ColorRG, DSPM_Transp};
UINT16 SID = SID_SetSys_RkChip, i;
PRK_SWVERSION pSysvision = GetSetUpVersion();
PSWVERSION_REGKEY pSwvision = GetSwVersion();
for (i = 0;i < 9;i++)
{
switch (i)
{
case 0:
DrawNumberHex(X + 100, Y, pSysvision->RkChip, Font12X12, &color, 0);
break;
case 1:
DrawNumberHex(X + 100, Y, pSysvision->RkKnlMajor, Font12X12, &color, 0);
break;
case 2:
DrawNumberHex(X + 100, Y, pSysvision->RkKnlMinor, Font12X12, &color, 0);
break;
case 3:
DrawStringEx(X + 100 , Y , 200, pSwvision->DvlpName, Font12X12, &color, 0);
break;
case 4:
DrawNumberHex(X + 100, Y, pSwvision->VerMajor, Font12X12, &color, 0);
break;
case 5:
DrawNumberHex(X + 100, Y, pSwvision->VerMinor, Font12X12, &color, 0);
break;
case 6:
DrawStringEx(X + 100 , Y , 200, pSwvision->ManufacturerName, Font12X12, &color, 0);
break;
case 7:
DrawStringEx(X + 100 , Y , 200, pSwvision->ProductName, Font12X12, &color, 0);
break;
case 8:
break;
}
DrawStringIdEx(X, Y, 100, SID, Font12X12, &color, 0);
Y = Y + 16;
SID++;
}
}
/*****************************************************************************/
/*****************************************************************************/
void DispUpdateState(UINT16 X, UINT16 Y, UINT16 STATE)
{
ColorDesc color = {COLOR_BLACK, ColorRG, DSPM_Transp};
UINT16 SID = SID_firewaresel, i;
for (i = 0;i < 4;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -