logの内容を日付からRivision情報に変更。同Revisionなら再アップデート可能に変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1280 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-04-30 10:59:47 +00:00
parent 29ebc52455
commit d83cfca5bd

View File

@ -15,6 +15,7 @@
$Author$ $Author$
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#include <stdlib.h> // atoi
#include <twl.h> #include <twl.h>
#include <nitro/snd.h> #include <nitro/snd.h>
#include <twl/fatfs.h> #include <twl/fatfs.h>
@ -29,10 +30,29 @@
#include "hwi.h" #include "hwi.h"
#include "keypad.h" #include "keypad.h"
extern const char *g_strIPLSvnRevision;
extern const char *g_strSDKSvnRevision;
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
typedef struct _SystemUpdaterLog
{
int magic_code;
int sdk_version;
int ipl_version;
int reserve[5];
} SystemUpdaterLog;
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#define SYSTEM_UPDATER_LOG_PATH "nand:/sys/log/updater.log"
#define SYSTEM_UPDATER_MAGIC_CODE 44001111
// リトライ回数 // リトライ回数
#define MAX_RETRY_COUNT 10 #define MAX_RETRY_COUNT 10
@ -58,7 +78,7 @@ static void VBlankIntr(void);
static void InitAllocation(void); static void InitAllocation(void);
static BOOL IgnoreRemoval(void); static BOOL IgnoreRemoval(void);
static void DrawWaitButtonA(void); static void DrawWaitButtonA(void);
static void DrawAlready(char* date); static void DrawAlready(SystemUpdaterLog* log);
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: TwlMain Name: TwlMain
@ -125,22 +145,48 @@ TwlMain()
(void)FS_LoadTable(p_table, need_size); (void)FS_LoadTable(p_table, need_size);
} }
// ログが存在するならシステム更新済みと判定 // (更新可能条件)
// 1.ログが存在しない
// 2.ログが存在し、ログに記載のマジックコードが不正初版SystemUpdater実行後の状態
// 2.ログが存在し、ログに記載のマジックコードが正しくかつログに記載の
// SDK & IPL のバージョンが SystemUpdater のそれ以下である
#ifdef IGNORE_VERSION_CHECK #ifdef IGNORE_VERSION_CHECK
if( 0 ) if( 0 )
#endif // IGNORE_VERSION_CHECK #endif // IGNORE_VERSION_CHECK
{ {
SystemUpdaterLog log;
FSFile file; FSFile file;
FS_InitFile( &file ); FS_InitFile( &file );
if (FS_OpenFileEx(&file, "nand:/sys/log/updater.log", FS_FILEMODE_R) == TRUE)
if (FS_OpenFileEx(&file, SYSTEM_UPDATER_LOG_PATH, FS_FILEMODE_R) == TRUE)
{ {
char date[sizeof(__DATE__)]; DC_InvalidateRange(&log, sizeof(log));
if (FS_ReadFile(&file, date, sizeof(__DATE__)) != sizeof(__DATE__))
if (FS_ReadFile(&file, &log, sizeof(log)) == sizeof(log))
{ {
// ログリード成功
OS_Printf("magic=%d, sdk=%d, ipl=%d\n", log.magic_code, log.sdk_version, log.ipl_version);
// 初版SystemUpdater実行状態でないことをマジックコードで判別する
if (log.magic_code == SYSTEM_UPDATER_MAGIC_CODE)
{
// マジックコード、SDKバージョン、IPLバージョンの確認
if (log.sdk_version > atoi(g_strSDKSvnRevision) ||
log.ipl_version > atoi(g_strIPLSvnRevision))
{
// 更新不可
DrawAlready(&log);
}
}
}
else
{
// ログリード失敗
OS_Warning("Failure! FS_ReadFile"); OS_Warning("Failure! FS_ReadFile");
} }
FS_CloseFile(&file); FS_CloseFile(&file);
DrawAlready(date);
} }
} }
@ -240,24 +286,33 @@ TwlMain()
// 更新ログを作成して再実行を防ぐ // 更新ログを作成して再実行を防ぐ
if (result) if (result)
{ {
if (FS_CreateFileAuto("nand:/sys/log/updater.log", FS_PERMIT_R | FS_PERMIT_W)) SystemUpdaterLog log;
(void)FS_DeleteFile(SYSTEM_UPDATER_LOG_PATH);
if (FS_CreateFileAuto(SYSTEM_UPDATER_LOG_PATH, FS_PERMIT_R | FS_PERMIT_W))
{ {
FSFile file; FSFile file;
FS_InitFile( &file ); FS_InitFile( &file );
if (FS_OpenFileEx(&file, "nand:/sys/log/updater.log", FS_FILEMODE_W)) if (FS_OpenFileEx(&file, SYSTEM_UPDATER_LOG_PATH, FS_FILEMODE_W))
{ {
char date[sizeof(__DATE__)]; log.magic_code = SYSTEM_UPDATER_MAGIC_CODE;
if (STD_CopyLString( date, __DATE__, sizeof(__DATE__) ) != (sizeof(__DATE__)-1)) log.sdk_version = atoi(g_strSDKSvnRevision);
{ log.ipl_version = atoi(g_strIPLSvnRevision);
OS_Warning("Failure! STD_CopyLString\n");
} DC_FlushRange(&log, sizeof(log));
if (FS_WriteFile(&file, (void*)date, sizeof(__DATE__) ) == -1)
if (FS_WriteFile(&file, (void*)&log, sizeof(log) ) == -1)
{ {
OS_Warning("Failure : FS_WriteFile\n"); OS_Warning("Failure : FS_WriteFile\n");
} }
FS_CloseFile(&file); FS_CloseFile(&file);
} }
} }
else
{
OS_Warning("Failure : FS_CreateFileAuto\n");
}
} }
// 結果表示 // 結果表示
@ -319,7 +374,7 @@ static void InitAllocation(void)
static void DrawWaitButtonA(void) static void DrawWaitButtonA(void)
{ {
kamiFontPrintfMain( 5, 3, 8, " System Updater "); kamiFontPrintfMain( 5, 3, 8, " System Updater ");
kamiFontPrintfMain( 5, 5, 8, " --- %s ---", __DATE__); kamiFontPrintfMain( 4, 5, 8, " --- ver %s %s ---", g_strSDKSvnRevision, g_strIPLSvnRevision );
kamiFontPrintfMain( 5, 8, 3, "<Push A: Start Update>"); kamiFontPrintfMain( 5, 8, 3, "<Push A: Start Update>");
kamiFontPrintfMain( 3, 10, 1, "--------------------------"); kamiFontPrintfMain( 3, 10, 1, "--------------------------");
@ -360,12 +415,12 @@ static void DrawWaitButtonA(void)
Returns: None. Returns: None.
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static void DrawAlready(char* date) static void DrawAlready(SystemUpdaterLog* log)
{ {
kamiFontPrintfMain( 3, 8, 1, "--------------------------"); kamiFontPrintfMain( 3, 8, 1, "--------------------------");
kamiFontPrintfMain( 3, 9, 1, "This machine has already"); kamiFontPrintfMain( 3, 9, 1, "This machine has already");
kamiFontPrintfMain( 3, 10, 1, "been updated."); kamiFontPrintfMain( 3, 10, 1, "been updated.");
kamiFontPrintfMain( 3, 12, 1, "version: %s", date); kamiFontPrintfMain( 3, 12, 1, "ver: %s %s", log->sdk_version, log->ipl_version );
kamiFontPrintfMain( 3, 13, 1, "--------------------------"); kamiFontPrintfMain( 3, 13, 1, "--------------------------");
while(1) while(1)