From 1a1049127bfe6455c37bc1c25bcda7b06a28e4de Mon Sep 17 00:00:00 2001 From: miya Date: Sat, 25 Oct 2008 10:44:02 +0000 Subject: [PATCH] git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@27 7061adef-622a-194b-ae81-725974e89856 --- build/tools/sctools/common/src/gfx.c | 7 +- build/tools/sctools/common/src/my_fs_util.c | 60 +- build/tools/sctools/common/src/mydata.h | 8 +- build/tools/sctools/common/src/myfilename.h | 12 +- build/tools/sctools/common/src/stream.c | 301 +++++++- build/tools/sctools/common/src/stream.h | 2 +- build/tools/sctools/common/src/text.c | 50 +- build/tools/sctools/common/src/text.h | 3 + .../sctools/copy_dst/src/hatamotolib.cpp | 18 +- build/tools/sctools/copy_dst/src/main.c | 674 +++++++++++------- build/tools/sctools/copy_org/src/main.c | 173 +++-- 11 files changed, 966 insertions(+), 342 deletions(-) diff --git a/build/tools/sctools/common/src/gfx.c b/build/tools/sctools/common/src/gfx.c index 9d1f39c..e76fd12 100644 --- a/build/tools/sctools/common/src/gfx.c +++ b/build/tools/sctools/common/src/gfx.c @@ -9,7 +9,7 @@ #define DPR_HEIGHT_MAX 24 #define DPR_WIDTH_MAX 32 -static u16 sDPRScrnBuffer[DPR_HEIGHT_MAX * DPR_WIDTH_MAX]; +static u16 sDPRScrnBuffer[DPR_HEIGHT_MAX * DPR_WIDTH_MAX] ATTRIBUTE_ALIGN(32); @@ -32,7 +32,8 @@ static GXOamAttr g_oam[128]; /* DISPLAY Control */ // #define TEXT_HEAPBUF_SIZE 0x16000 -#define TEXT_HEAPBUF_SIZE 0x80000 /* 512KByte */ +//#define TEXT_HEAPBUF_SIZE 0x80000 /* 512KByte */ +#define TEXT_HEAPBUF_SIZE 0x40000 /* 512KByte */ static u8 text_heap_buffer[TEXT_HEAPBUF_SIZE]; static TEXT_CTRL textctrl[NUM_OF_SCREEN]; @@ -42,7 +43,7 @@ static int vram_num_sub = 0; static void VBlankIntr( void ); static u32 v_blank_intr_counter = 0; -static u32 g_screen[MAX_VRAM_NUM][VRAM_SIZE/sizeof(u32)]; +static u32 g_screen[MAX_VRAM_NUM][VRAM_SIZE/sizeof(u32)] ATTRIBUTE_ALIGN(32); void Gfx_Init(void) diff --git a/build/tools/sctools/common/src/my_fs_util.c b/build/tools/sctools/common/src/my_fs_util.c index 89df4bb..ec449d3 100644 --- a/build/tools/sctools/common/src/my_fs_util.c +++ b/build/tools/sctools/common/src/my_fs_util.c @@ -1457,12 +1457,60 @@ BOOL TitleIDSave(const char *path, u64 *pData, int count, FSFile *log_fd) /* TWLカードがあるかどうか */ +static BOOL flag_TWLCardValidation = FALSE; + BOOL TWLCardValidation(void) { if( TRUE == OS_IsRunOnDebugger() ) { + if( flag_TWLCardValidation == FALSE ) { + flag_TWLCardValidation = TRUE; + OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); + } + return FALSE; /* カードは抜けていることにする。 */ + } + + /* + CARD_IsPulledOut(); + カード抜けを検出した場合 TRUE を、そうでない場合は FALSE を返します。 + 一度でもカード抜けを検出した後は常に TRUE を返します。 + */ +#if 1 + /* + CARD_IsPulledOutをつかうにはアルマジロの改造がいる。 + + c:/twlsdk/build/components/armadillo.TWL/src/main.c + + //---- check pull out card + CARD_CheckPullOut_Polling(); + */ + + if( TRUE == CARD_IsPulledOut() ) { return FALSE; } - return CARD_IsPulledOut(); +#else + { + s32 lock_ret; + u16 id; + lock_ret = OS_GetLockID(); + if( lock_ret != OS_LOCK_ID_ERROR ) { + id = (u16)lock_ret; + CARD_LockRom(id); + + CARD_CheckPulledOut(); + if( TRUE == CARD_IsPulledOut() ) { + return FALSE; + } + + CARD_UnlockRom(id); + OS_ReleaseLockID( id ); + } + else { + mprintf("CARD Lock error\n"); + } + } +#endif + + return TRUE; } /* SDカードがあるかどうか */ @@ -1509,12 +1557,13 @@ BOOL CheckShopRecord(u8 region, FSFile *log_fd) FSFile f; BOOL bSuccess; char path[256]; - u32 fileSize; s32 readSize = 0; +#if 0 + u32 fileSize; void *pBuffer; char *str; int i; - +#endif FS_InitFile(&f); STD_StrCpy(path, "nand:/sys/dev.kp"); @@ -1523,6 +1572,7 @@ BOOL CheckShopRecord(u8 region, FSFile *log_fd) if( FS_RESULT_NO_ENTRY == FS_GetArchiveResultCode(path) ) { } /* キーペアファイルがない */ + OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); return FALSE; } (void)FS_CloseFile(&f); @@ -1607,18 +1657,20 @@ BOOL CheckShopRecord(u8 region, FSFile *log_fd) STD_StrCpy(path, "nand:/title/00030015/484e464b/data/ec.cfg"); break; default: + OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); return FALSE; } bSuccess = FS_OpenFileEx(&f, path, (FS_FILEMODE_R)); if( ! bSuccess ) { if( FS_RESULT_NO_ENTRY == FS_GetArchiveResultCode(path) ) { + OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); } + OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); /* ショップアカウント情報ファイルがない */ return FALSE; } (void)FS_CloseFile(&f); - return TRUE; } diff --git a/build/tools/sctools/common/src/mydata.h b/build/tools/sctools/common/src/mydata.h index 0d416e3..3dcf604 100644 --- a/build/tools/sctools/common/src/mydata.h +++ b/build/tools/sctools/common/src/mydata.h @@ -2,7 +2,12 @@ #define _MY_DATA_H_ +#define MY_DATA_VERSION_MAJOR 0 +#define MY_DATA_VERSION_MINOR 1 + typedef struct { + u8 version_major; + u8 version_minor; RTCDate rtc_date; RTCTime rtc_time; BOOL shop_record_flag; @@ -11,13 +16,14 @@ typedef struct { int num_of_photo_files; int num_of_shared2_files; u8 movableUniqueID[ LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN ]; // 移行可能なユニークID 16byte - // typedef u32 ESId; /* 32-bit device identity */ u32 deviceId; u8 region; u64 fuseId; char bmsDeviceId[32]; + u32 reserve[256]; } MyData; + #ifdef __cplusplus extern "C" { #endif diff --git a/build/tools/sctools/common/src/myfilename.h b/build/tools/sctools/common/src/myfilename.h index 2c19971..80787c9 100644 --- a/build/tools/sctools/common/src/myfilename.h +++ b/build/tools/sctools/common/src/myfilename.h @@ -2,9 +2,9 @@ #define _MY_FILE_NAME_H_ -#define MY_FILE_NAME_UNIQUE_ID ("twl_ninfo.dat") -#define MY_FILE_NAME_WIFI_PARAM ("twl_nor.bin") -#define MY_FILE_NAME_USER_SETTINGS ("twl_cfg.dat") +#define MY_FILE_NAME_UNIQUE_ID ("twl_unique.dat") +#define MY_FILE_NAME_WIFI_PARAM ("twl_wifi.bin") +#define MY_FILE_NAME_USER_SETTINGS ("twl_user.dat") #define MY_DIR_NAME_APP_SHARED ("shared2") #define MY_FILE_NAME_APP_SHARED_LOG ("shared2.txt") @@ -27,9 +27,9 @@ #define MY_FILE_NAME_DOWNLOAD_TITLE_ID_LOG ("title_id.txt" ) #define MY_FILE_NAME_DOWNLOAD_TITLE_ID_RESTORE_LOG ("title_id_rst.txt" ) -#define MY_FILE_NAME_ORG_DATA ("global.dat") -#define MY_FILE_NAME_ORG_LOG ("global.txt") -#define MY_FILE_NAME_ORG_RESTORE_LOG ("global_rst.txt") +#define MY_FILE_NAME_ORG_DATA ("personal.dat") +#define MY_FILE_NAME_ORG_LOG ("personal.txt") +#define MY_FILE_NAME_ORG_RESTORE_LOG ("personal_rst.txt") #ifdef __cplusplus diff --git a/build/tools/sctools/common/src/stream.c b/build/tools/sctools/common/src/stream.c index b7e771e..b2484bd 100644 --- a/build/tools/sctools/common/src/stream.c +++ b/build/tools/sctools/common/src/stream.c @@ -1,6 +1,7 @@ #include #include "stream.h" +#define MIYA_MEM_FILE 1 #define MAKE_FOURCC(cc1, cc2, cc3, cc4) (u32)((cc1) | (cc2 << 8) | (cc3 << 16) | (cc4 << 24)) @@ -17,6 +18,26 @@ #define STRM_BUF_PAGESIZE 1024*32 #define STRM_BUF_SIZE STRM_BUF_PAGESIZE*2 + +#ifdef MIYA_MEM_FILE + +//#define NUM_OF_MY_FS_FILE 4 +#define NUM_OF_MY_FS_FILE 3 + +typedef struct { + FSFile file; + char path[256]; + u8 *data; + u32 length; + BOOL open_flag; + u32 position; +} MyFSFile; + +static MyFSFile myfsfile[NUM_OF_MY_FS_FILE]; + +#endif + + // WAVフォーマットヘッダ typedef struct WaveFormat { @@ -32,7 +53,11 @@ WaveFormat; // ストリームオブジェクト typedef struct StreamInfo { +#ifdef MIYA_MEM_FILE + MyFSFile file; +#else FSFile file; +#endif WaveFormat format; u32 beginPos; s32 dataSize; @@ -66,15 +91,185 @@ static u8 strm_tmp[STRM_BUF_PAGESIZE * 2] ATTRIBUTE_ALIGN(32); const char filename0[] = "cursor.wav"; const char filename1[] = "ok.wav"; const char filename2[] = "ng.wav"; -const char filename3[] = "fanfare.32.wav"; +//const char filename3[] = "fanfare.32.wav"; static StreamInfo strm; +#ifdef MIYA_MEM_FILE +static BOOL MY_FS_OpenFile(MyFSFile *my_file, const char *name) +{ + + if( STD_StrCmp(filename0, name) == 0 ) { + STD_CopyMemory( (void *)my_file, (void *)&(myfsfile[0]) ,sizeof(MyFSFile) ); + my_file->open_flag = TRUE; + return TRUE; + } + else if( STD_StrCmp(filename1, name) == 0 ) { + STD_CopyMemory( (void *)my_file, (void *)&(myfsfile[1]) ,sizeof(MyFSFile) ); + my_file->open_flag = TRUE; + return TRUE; + } + else if( STD_StrCmp(filename2, name) == 0 ) { + STD_CopyMemory( (void *)my_file, (void *)&(myfsfile[2]) ,sizeof(MyFSFile) ); + my_file->open_flag = TRUE; + return TRUE; + } +#if 0 + else if( STD_StrCmp(filename3, name) == 0 ) { + STD_CopyMemory( (void *)my_file, (void *)&(myfsfile[3]) ,sizeof(MyFSFile) ); + my_file->open_flag = TRUE; + return TRUE; + } +#endif + my_file->open_flag = FALSE; + return FALSE; +} + +static BOOL MY_FS_IsFile(MyFSFile *my_file) +{ + return my_file->open_flag; +} + + +static BOOL MY_FS_CloseFile(MyFSFile *my_file) +{ + my_file->open_flag = FALSE;; + return TRUE; +} + +static u32 MY_FS_GetPosition(MyFSFile *my_file) +{ + return my_file->position; +} + +//static BOOL MY_FS_SeekFile( MyFSFile *p_file, s32 offset, FSSeekMode origin) +static BOOL MY_FS_SeekFile( MyFSFile *p_file, s32 offset, FSSeekFileMode origin) +{ + s32 temp_offset; + + switch( origin ) { + case FS_SEEK_SET: /* seek from begin */ + temp_offset = offset; + if( (0 <= (s32)temp_offset) && (temp_offset < (s32)p_file->length)) { + p_file->position = (u32)temp_offset; + return TRUE; + } + break; + case FS_SEEK_CUR: /* seek from current */ + temp_offset = offset + (s32)p_file->position; + if( (0 <= (s32)temp_offset) && (temp_offset < (s32)p_file->length)) { + p_file->position = (u32)temp_offset; + return TRUE; + } + p_file->position = p_file->length-1; + return TRUE; + + break; + case FS_SEEK_END: + temp_offset = (s32)(p_file->length - 1); + if( (0 <= (s32)temp_offset) && (temp_offset < (s32)p_file->length)) { + p_file->position = (u32)temp_offset; + return TRUE; + } + break; + } + return FALSE; +} + + +static BOOL MY_FS_SeekFileToBegin(MyFSFile *my_file) +{ + return MY_FS_SeekFile(my_file, 0, FS_SEEK_SET); +} + +static s32 MY_FS_ReadFile( MyFSFile *p_file, void *dst, s32 len) +{ + s32 new_len; + + if( dst == NULL ) { + return -1; + } + if( len < 0 ) { + return -1; + } + if( p_file == NULL ) { + return -1; + } + if( p_file->data == NULL ) { + return -1; + } + + if( p_file->open_flag ) { + if( (p_file->position < 0 ) ) { + return -1; + } + if( (p_file->position + len) < 0 ) { + return -1; + } + + if( (p_file->length <= (p_file->position + len)) ) { + new_len = (s32)(p_file->position + len - p_file->length); + new_len = len - new_len; + STD_CopyMemory( (void *)dst, (void *)(p_file->data + p_file->position) ,(u32)new_len ); + p_file->position += new_len; + return new_len; + } + + STD_CopyMemory( (void *)dst, (void *)(p_file->data + p_file->position) ,(u32)len ); + p_file->position += len; + return len; + } + else { + return -1; + } + return -1; +} + + + +#endif + void stream_main(void) { + int i; + s32 readSize; + strm.isPlay = FALSE; SND_LockChannel((1 << L_CHANNEL) | (1 << R_CHANNEL), 0); + +#ifdef MIYA_MEM_FILE + + STD_StrCpy(myfsfile[0].path, filename0 ); + STD_StrCpy(myfsfile[1].path, filename1 ); + STD_StrCpy(myfsfile[2].path, filename2 ); + + for( i = 0 ; i < NUM_OF_MY_FS_FILE ; i++ ) { + FS_InitFile(&(myfsfile[i].file)); + + if ( !FS_OpenFile(&(myfsfile[i].file), myfsfile[i].path) ) { + // error; + } + myfsfile[i].open_flag = FALSE; + myfsfile[i].position = 0; + myfsfile[i].length = FS_GetFileLength(&(myfsfile[i].file)); + myfsfile[i].data = (u8 *)OS_Alloc(myfsfile[i].length); + if( myfsfile[i].data == NULL ) { + OS_TPrintf("Mem alloc error: %s %d\n", __FUNCTION__,__LINE__); + return; + } + readSize = 0; + + OS_TPrintf("%s %d Readfile %s len=%d\n",__FUNCTION__,__LINE__,myfsfile[i].path, myfsfile[i].length); + readSize = FS_ReadFile(&(myfsfile[i].file), myfsfile[i].data, (int)myfsfile[i].length ); + if( readSize != myfsfile[i].length ) { + OS_TPrintf("Failed Read File: %s %s %d\n",myfsfile[i].path, __FUNCTION__,__LINE__); + return; + } + (void)FS_CloseFile(&(myfsfile[i].file)); + } +#endif + /* ストリームスレッドの起動 */ OS_CreateThread(&strmThread, StrmThread, @@ -99,10 +294,12 @@ void stream_play2(void) PlayStream(&strm, filename2); } +#if 0 void stream_play3(void) { PlayStream(&strm, filename3); } +#endif BOOL stream_play_is_end(void) { @@ -130,12 +327,24 @@ static void PlayStream(StreamInfo * strm, const char *filename) SND_WaitForCommandProc(tag); // 停止を待つ } +#ifdef MIYA_MEM_FILE // ファイル走査 - if (FS_IsFile(&strm->file)) + if (MY_FS_IsFile(&strm->file)) { + (void)MY_FS_CloseFile(&strm->file); + } + + if ( ! MY_FS_OpenFile(&strm->file, filename) ) { + OS_Panic("Error: failed to open file %s\n", filename); + } +#else + // ファイル走査 + if (FS_IsFile(&strm->file)) { (void)FS_CloseFile(&strm->file); + } if ( ! FS_OpenFile(&strm->file, filename) ) { OS_Panic("Error: failed to open file %s\n", filename); } +#endif if (!ReadWaveFormat(strm)) { OS_Panic("Error: failed to read wavefile\n"); @@ -149,7 +358,11 @@ static void PlayStream(StreamInfo * strm, const char *filename) alarmPeriod /= (strm->format.bitPerSample == 16) ? sizeof(s16) : sizeof(s8); // 初期ストリームデータ読み込み +#ifdef MIYA_MEM_FILE + (void)MY_FS_SeekFile(&strm->file, (s32)strm->beginPos, FS_SEEK_SET); +#else (void)FS_SeekFile(&strm->file, (s32)strm->beginPos, FS_SEEK_SET); +#endif strm->bufPage = 0; ReadStrmData(strm); ReadStrmData(strm); @@ -182,8 +395,15 @@ static void PlayStream(StreamInfo * strm, const char *filename) static void StopStream(StreamInfo * strm) { SND_StopTimer((1 << L_CHANNEL) | (1 << R_CHANNEL), 0, 1 << ALARM_NUM, 0); - if (FS_IsFile(&strm->file)) +#ifdef MIYA_MEM_FILE + if (MY_FS_IsFile(&strm->file)) { + (void)MY_FS_CloseFile(&strm->file); + } +#else + if (FS_IsFile(&strm->file)) { (void)FS_CloseFile(&strm->file); + } +#endif strm->isPlay = FALSE; } @@ -243,7 +463,6 @@ static void ReadStrmData(StreamInfo * strm) if (strm->dataSize <= 0) { StopStream(strm); - // OS_TPrintf("Stop stream\n"); return; } @@ -265,10 +484,17 @@ static void ReadStrmData(StreamInfo * strm) if (strm->format.channels == 1) { // モノラル +#ifdef MIYA_MEM_FILE + readSize = MY_FS_ReadFile(&strm->file, + strm_tmp, + (strm->dataSize < + STRM_BUF_PAGESIZE) ? strm->dataSize : STRM_BUF_PAGESIZE); +#else readSize = FS_ReadFile(&strm->file, strm_tmp, (strm->dataSize < STRM_BUF_PAGESIZE) ? strm->dataSize : STRM_BUF_PAGESIZE); +#endif if (readSize == -1) OS_Panic("read file end\n"); @@ -300,10 +526,18 @@ static void ReadStrmData(StreamInfo * strm) else { // ステレオ +#ifdef MIYA_MEM_FILE + readSize = MY_FS_ReadFile(&strm->file, + strm_tmp, + (strm->dataSize < + STRM_BUF_PAGESIZE * 2) ? strm->dataSize : STRM_BUF_PAGESIZE * 2); + +#else readSize = FS_ReadFile(&strm->file, strm_tmp, (strm->dataSize < STRM_BUF_PAGESIZE * 2) ? strm->dataSize : STRM_BUF_PAGESIZE * 2); +#endif if (readSize == -1) OS_Panic("read file end\n"); @@ -357,22 +591,45 @@ static BOOL ReadWaveFormat(StreamInfo * strm) u32 tag; s32 size; BOOL fFmt = FALSE, fData = FALSE; - +#ifdef MIYA_MEM_FILE + (void)MY_FS_SeekFileToBegin(&strm->file); + (void)MY_FS_ReadFile(&strm->file, &tag, 4); +#else (void)FS_SeekFileToBegin(&strm->file); - (void)FS_ReadFile(&strm->file, &tag, 4); - if (tag != FOURCC_RIFF) +#endif + if (tag != FOURCC_RIFF) { +OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); return FALSE; + } +#ifdef MIYA_MEM_FILE + (void)MY_FS_ReadFile(&strm->file, &size, 4); + (void)MY_FS_ReadFile(&strm->file, &tag, 4); +#else (void)FS_ReadFile(&strm->file, &size, 4); - (void)FS_ReadFile(&strm->file, &tag, 4); - if (tag != FOURCC_WAVE) - return FALSE; +#endif + if (tag != FOURCC_WAVE) { +OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); + return FALSE; + } while (size > 0) { s32 chunkSize; +#ifdef MIYA_MEM_FILE + if (MY_FS_ReadFile(&strm->file, &tag, 4) == -1) + { +OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); + return FALSE; + } + if (MY_FS_ReadFile(&strm->file, &chunkSize, 4) == -1) + { +OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); + return FALSE; + } +#else if (FS_ReadFile(&strm->file, &tag, 4) == -1) { return FALSE; @@ -381,24 +638,42 @@ static BOOL ReadWaveFormat(StreamInfo * strm) { return FALSE; } - +#endif switch (tag) { case FOURCC_fmt: +#ifdef MIYA_MEM_FILE + if (MY_FS_ReadFile(&strm->file, (u8 *)&strm->format, chunkSize) == -1) + { +OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); + return FALSE; + } +#else if (FS_ReadFile(&strm->file, (u8 *)&strm->format, chunkSize) == -1) { return FALSE; } +#endif fFmt = TRUE; break; case FOURCC_data: +#ifdef MIYA_MEM_FILE + strm->beginPos = MY_FS_GetPosition(&strm->file); + strm->dataSize = chunkSize; + (void)MY_FS_SeekFile(&strm->file, chunkSize, FS_SEEK_CUR); +#else strm->beginPos = FS_GetPosition(&strm->file); strm->dataSize = chunkSize; (void)FS_SeekFile(&strm->file, chunkSize, FS_SEEK_CUR); +#endif fData = TRUE; break; default: +#ifdef MIYA_MEM_FILE + (void)MY_FS_SeekFile(&strm->file, chunkSize, FS_SEEK_CUR); +#else (void)FS_SeekFile(&strm->file, chunkSize, FS_SEEK_CUR); +#endif break; } if (fFmt && fData) @@ -409,7 +684,9 @@ static BOOL ReadWaveFormat(StreamInfo * strm) size -= chunkSize; } - if (size != 0) + if (size != 0) { +OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__); return FALSE; + } return TRUE; } diff --git a/build/tools/sctools/common/src/stream.h b/build/tools/sctools/common/src/stream.h index cec649a..e3f4f96 100644 --- a/build/tools/sctools/common/src/stream.h +++ b/build/tools/sctools/common/src/stream.h @@ -11,7 +11,7 @@ extern void stream_main(void); extern void stream_play0(void); extern void stream_play1(void); extern void stream_play2(void); -extern void stream_play3(void); + // extern void stream_play3(void); extern BOOL stream_play_is_end(void); #ifdef __cplusplus diff --git a/build/tools/sctools/common/src/text.c b/build/tools/sctools/common/src/text.c index 04e93dc..992cfe3 100644 --- a/build/tools/sctools/common/src/text.c +++ b/build/tools/sctools/common/src/text.c @@ -19,6 +19,20 @@ void text_display_newline_off(TEXT_CTRL *tc) tc->text_buf.display_newline = 0; } +void text_blink_current_line(TEXT_CTRL *tc) +{ + tc->text_buf.cur->blink_flag = 1; +} + +void text_blink_clear(TEXT_CTRL *tc) +{ + LINE_BUF *lb; + lb = tc->text_buf.start; + while( lb != NULL ) { + lb->blink_flag = 0; + lb = lb->next; + } +} static void link_line_buf(LINE_BUF *m,LINE_BUF *s) { @@ -69,6 +83,7 @@ static LINE_BUF *alloc_line_buf(void) unlink_line_buf(tmp); tmp->last_count = 0; tmp->cur_count = 0; + tmp->blink_flag = 0; #if 0 for(i = 0 ; i < LINE_BUF_X_SIZE ; i++) tmp->buf[i] = 0x20; @@ -360,6 +375,8 @@ int init_text_buf_sys(void *heap_start, void *heap_end) return init_lb_heap(heap_start, heap_end); } +static int blink_counter = 0; +static int blink_flag = 0; void text_buf_to_vram(TEXT_CTRL *tc) { @@ -370,6 +387,22 @@ void text_buf_to_vram(TEXT_CTRL *tc) LINE_BUF *lb; TEXT_BUF *tb = &(tc->text_buf); + blink_counter++; + + /* blink interval */ + if( blink_flag == 1 ) { + if( blink_counter > 100 ) { + blink_counter = 0; + blink_flag ^= 1; + } + } + else { + if( blink_counter > 20 ) { + blink_counter = 0; + blink_flag ^= 1; + } + } + lb = tb->start; i = 0; while( i < tb->display_offset_y ) { @@ -396,9 +429,22 @@ void text_buf_to_vram(TEXT_CTRL *tc) break; } else { - c = lb->buf[x_line]; - col = lb->col[x_line]; + if( lb->blink_flag ) { + if( blink_flag == 0 ) { + c = 0; + col = 0; + } + else { + c = lb->buf[x_line]; + col = lb->col[x_line]; + } + } + else { + c = lb->buf[x_line]; + col = lb->col[x_line]; + } put_char_vram(tc, c, col); + } x_line++; } diff --git a/build/tools/sctools/common/src/text.h b/build/tools/sctools/common/src/text.h index 5a4a25c..3e446af 100644 --- a/build/tools/sctools/common/src/text.h +++ b/build/tools/sctools/common/src/text.h @@ -34,6 +34,7 @@ typedef struct LINE_BUF_s { int cur_count; struct LINE_BUF_s *prev; struct LINE_BUF_s *next; + int blink_flag; } LINE_BUF; typedef struct { @@ -84,6 +85,8 @@ int m_get_display_offset_x(TEXT_CTRL *tc); void text_buf_to_vram(TEXT_CTRL *tc); void text_display_newline_off(TEXT_CTRL *tc); void text_display_newline_on(TEXT_CTRL *tc); +void text_blink_current_line(TEXT_CTRL *tc); +void text_blink_clear(TEXT_CTRL *tc); #ifdef __cplusplus } diff --git a/build/tools/sctools/copy_dst/src/hatamotolib.cpp b/build/tools/sctools/copy_dst/src/hatamotolib.cpp index f8ef102..3aab952 100644 --- a/build/tools/sctools/copy_dst/src/hatamotolib.cpp +++ b/build/tools/sctools/copy_dst/src/hatamotolib.cpp @@ -34,6 +34,9 @@ static void *Alloc(size_t size) { OSIntrMode old = OS_DisableInterrupts(); void* p = OS_Alloc(size); + if( p == NULL ) { + OS_TPrintf("Alloc error %s %d\n",__FUNCTION__,__LINE__); + } OS_RestoreInterrupts(old); return p; } @@ -51,6 +54,7 @@ static void Free(void* ptr) static void* AllocForNHTTP(u32 size, int align) { SDK_ASSERT(align <= 32);(void)align; return Alloc(size); } static void* AllocForEC (u32 size, int align) { SDK_ASSERT(align <= 32);(void)align; return Alloc(size); } + static void* AllocForNSSL (u32 size) { return Alloc(size); } static void* AllocForNAM (u32 size) { return Alloc(size); } static void FreeForNHTTP (void* p) { Free(p); } @@ -424,8 +428,18 @@ BOOL SetupEC(void) // Initialize the EC library - logLevel = EC_LOG_FINE; - // logLevel = EC_LOG_NONE; + /* log level definitions */ + + //#define EC_LOG_NONE 0 + //#define EC_LOG_ERR 1 + //#define EC_LOG_WARN 2 + //#define EC_LOG_INFO 3 + //#define EC_LOG_FINE 4 + //#define EC_LOG_FINER 5 + //#define EC_LOG_FINEST 6 + + logLevel = EC_LOG_FINEST; + // logLevel = EC_LOG_NONE; LoadCert(&pClientCert, &clientCertSize, ".twl-nup-cert.der"); LoadCert(&pClientKey, &clientKeySize, ".twl-nup-prvkey.der"); diff --git a/build/tools/sctools/copy_dst/src/main.c b/build/tools/sctools/copy_dst/src/main.c index 34b5d6d..4b1f3a7 100644 --- a/build/tools/sctools/copy_dst/src/main.c +++ b/build/tools/sctools/copy_dst/src/main.c @@ -47,14 +47,14 @@ //================================================================================ +static BOOL completed_flag = FALSE; static FSEventHook sSDHook; static BOOL sd_card_flag = FALSE; +static BOOL reboot_flag = FALSE; static u8 WorkForNA[NA_VERSION_DATA_WORK_SIZE]; - - static void SDEvents(void *userdata, FSEvent event, void *arg) { (void)userdata; @@ -64,18 +64,32 @@ static void SDEvents(void *userdata, FSEvent event, void *arg) m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); mprintf("SD card:removed!\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - + text_blink_clear(tc[0]); + if( completed_flag == FALSE ) { + text_blink_current_line(tc[0]); + mprintf("insert SD card\n"); + } } else if (event == FS_EVENT_MEDIA_INSERTED) { sd_card_flag = TRUE; - m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); - mprintf("SD card:inserted!\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - mprintf("Push A button to start RESTORE\n"); + if( completed_flag == FALSE ) { + m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); + mprintf("SD card:inserted!\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + text_blink_clear(tc[0]); + text_blink_current_line(tc[0]); + if( reboot_flag == FALSE ) { + mprintf("Press A button to start UPDATE\n"); + } + else { + mprintf("Press A button to start RESTORE\n"); + } + } } } + static MyData mydata; static int vram_num_main = 1; @@ -87,20 +101,23 @@ static LCFGTWLHWSecureInfo hws_info; -#define MY_STACK_SIZE (1024*16) /* でかいほうがいい */ +#define MY_STACK_SIZE (1024*64) /* でかいほうがいい */ #define MY_THREAD_PRIO 20 static OSThread MyThread; static u64 MyStack[MY_STACK_SIZE / sizeof(u64)]; static void MyThreadProc(void *arg); static void MyThreadProcNuc(void *arg); -static OSMessage MyMesgBuffer[1]; -static OSMessageQueue MyMesgQueue; +static OSMessage MyMesgBuffer_request[1]; +static OSMessage MyMesgBuffer_response[1]; +static OSMessageQueue MyMesgQueue_request; +static OSMessageQueue MyMesgQueue_response; static void init_my_thread(void) { - OS_InitMessageQueue(&MyMesgQueue, &MyMesgBuffer[0], 1); + OS_InitMessageQueue(&MyMesgQueue_request, &MyMesgBuffer_request[0], 1); + OS_InitMessageQueue(&MyMesgQueue_response, &MyMesgBuffer_response[0], 1); OS_CreateThread(&MyThread, MyThreadProc, NULL, MyStack + MY_STACK_SIZE / sizeof(u64), @@ -110,8 +127,8 @@ static void init_my_thread(void) static void init_my_thread_nuc(void) { - - OS_InitMessageQueue(&MyMesgQueue, &MyMesgBuffer[0], 1); + OS_InitMessageQueue(&MyMesgQueue_request, &MyMesgBuffer_request[0], 1); + OS_InitMessageQueue(&MyMesgQueue_response, &MyMesgBuffer_response[0], 1); OS_CreateThread(&MyThread, MyThreadProcNuc, NULL, MyStack + MY_STACK_SIZE / sizeof(u64), @@ -120,9 +137,14 @@ static void init_my_thread_nuc(void) } -static void start_my_thread(void) +static BOOL start_my_thread(void) { - (void)OS_SendMessage(&MyMesgQueue, (OSMessage)0, OS_MESSAGE_NOBLOCK); + OSMessage message; + if( TRUE == OS_ReceiveMessage(&MyMesgQueue_response, &message, OS_MESSAGE_NOBLOCK) ) { + (void)OS_SendMessage(&MyMesgQueue_request, (OSMessage)0, OS_MESSAGE_NOBLOCK); + return TRUE; + } + return FALSE; } static BOOL RestoreFromSDCard1(void) @@ -398,9 +420,9 @@ static BOOL RestoreFromSDCard7(void) /* nand:/ticketはチケット同期でダウンロード */ // 不要:デバイス情報の表示 - PrintDeviceInfo(); + // PrintDeviceInfo(); - OS_TPrintf("--------------------------------\n"); + // OS_TPrintf("--------------------------------\n"); // setup // 必須:タイトル ID の偽装 @@ -541,8 +563,11 @@ static void MyThreadProc(void *arg) #pragma unused(arg) OSMessage message; BOOL flag; + BOOL twl_card_validation_flag; + while( 1 ) { - (void)OS_ReceiveMessage(&MyMesgQueue, &message, OS_MESSAGE_BLOCK); + (void)OS_SendMessage(&MyMesgQueue_response, (OSMessage)0, OS_MESSAGE_NOBLOCK); + (void)OS_ReceiveMessage(&MyMesgQueue_request, &message, OS_MESSAGE_BLOCK); flag = TRUE; /* MydataLoadはすでにやっているのでいらない。 */ for( function_counter = 0 ; function_counter < function_table_max ; function_counter++ ) { @@ -552,20 +577,46 @@ static void MyThreadProc(void *arg) } mprintf("\n"); if( flag == TRUE ) { - m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ - mprintf("Restore completed.\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + completed_flag = TRUE; if( TRUE == stream_play_is_end() ) { - stream_play1(); + stream_play0(); /* cursor.aiff */ } + m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); + mprintf("Pull out DS(DSi) & SD CARDs!\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + while( 1 ) { + if( twl_card_validation_flag == TRUE ) { + /* なぜか一回しかかからないので・・ */ + if( FALSE == TWLCardValidation() ) { + twl_card_validation_flag = FALSE; + mprintf("DS(DSi)CARD pulled out\n"); + } + } + + if( (FALSE == twl_card_validation_flag) && (FALSE == SDCardValidation()) ) { + m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ + mprintf("Restore completed.\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + + if( TRUE == stream_play_is_end() ) { + stream_play1(); /* ok.aiff */ + } + Gfx_Set_BG1_Color((u16)M_TEXT_COLOR_DARKGREEN); + OS_Sleep(200000); + break; + } + OS_Sleep(200); + } + } else { m_set_palette(tc[0], M_TEXT_COLOR_RED ); mprintf("Restore failed.\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); if( TRUE == stream_play_is_end() ) { - stream_play2(); + stream_play2(); /* ng.aiff */ } + Gfx_Set_BG1_Color((u16)M_TEXT_COLOR_DARKRED); } mprintf("\n"); /* 全部成功したらフォルダを消す */ @@ -577,8 +628,10 @@ static void MyThreadProcNuc(void *arg) { #pragma unused(arg) OSMessage message; + u16 keyData; while( 1 ) { - (void)OS_ReceiveMessage(&MyMesgQueue, &message, OS_MESSAGE_BLOCK); + (void)OS_SendMessage(&MyMesgQueue_response, (OSMessage)0, OS_MESSAGE_NOBLOCK); + (void)OS_ReceiveMessage(&MyMesgQueue_request, &message, OS_MESSAGE_BLOCK); mprintf("-Wireless AP conf. loading.. "); if( TRUE == LoadWlanConfig() ) { m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ @@ -590,17 +643,26 @@ static void MyThreadProcNuc(void *arg) m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); OS_TPrintf("Network Update Completed!\n"); mprintf("Network Update Completed!\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); NcFinish(); TerminateWcmControl(); if( TRUE == stream_play_is_end() ) { - stream_play1(); + stream_play0(); /* cursor.aiff */ } - /* ハードウェアリセットを行い、自分自身を起動します。 */ - OS_Sleep(30000); - OS_RebootSystem(); + mprintf("\n"); + text_blink_current_line(tc[0]); + mprintf("press A button to start RESTORE\n\n"); + + while( 1 ) { + keyData = m_get_key_code(); + if ( keyData & PAD_BUTTON_A ) { + OS_RebootSystem(); + } + OS_Sleep(20); + } } else { // NUC_Init() failed, error code=34416 はどこかでNSSL_Initを呼んでるので消す。 @@ -608,6 +670,7 @@ static void MyThreadProcNuc(void *arg) mprintf("network update failed!\n"); OS_TPrintf("Network Update failed!\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + Gfx_Set_BG1_Color((u16)M_TEXT_COLOR_DARKRED); } } else { @@ -630,14 +693,17 @@ static void *AllocForNAM(size_t size) static void FreeForNAM(void* ptr) { - if( ptr != NULL ) - { - OSIntrMode old = OS_DisableInterrupts(); - OS_Free(ptr); - OS_RestoreInterrupts(old); - } + if( ptr != NULL ) { + OSIntrMode old = OS_DisableInterrupts(); + OS_Free(ptr); + OS_RestoreInterrupts(old); + } } +static BOOL myTWLCardCallback( void ) +{ + return FALSE; // means that not terminate. +} void TwlMain(void) { @@ -650,12 +716,15 @@ void TwlMain(void) RTCDate rtc_date; RTCTime rtc_time; int i; - int n; + // int n; u8 macAddress[6]; MY_ENTRY_LIST *mfiler_list_head = NULL; - BOOL reboot_flag; u16 s_major, s_minor; u32 s_timestamp; + ESError es_error_code; + BOOL MydataLoadDecrypt_message_flag = TRUE; + BOOL MydataLoadDecrypt_dir_flag = TRUE; + BOOL MydataLoadDecrypt_success_flag = TRUE; OS_Init(); OS_InitThread(); @@ -695,29 +764,85 @@ void TwlMain(void) SND_Init(); stream_main(); + CARD_Init(); + CARD_SetPulledOutCallback( myTWLCardCallback ); // 必須;SEA の初期化 SEA_Init(); - m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); - mprintf( "Sys-menu ver." ); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - if( TRUE == Read_SystemMenuVersion(&s_major, &s_minor, &s_timestamp) ) { - mprintf( "%d.%d", s_major, s_minor ); - mprintf( " (%08x)\n", s_timestamp ); + reboot_flag = OS_IsRebooted(); + /* デバッグのために今だけ強制的にオン(UPDATE mode) */ + /* miya */ + reboot_flag = TRUE; + + + if( FALSE == SDCardValidation() ) { + sd_card_flag = FALSE; + m_set_palette(tc[0], 0x1); /* red */ + mprintf("No SD card\n"); + m_set_palette(tc[0], 0xF); /* white */ } else { - m_set_palette(tc[0], M_TEXT_COLOR_RED ); - mprintf( "read error!\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + sd_card_flag = TRUE; + } + FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL); + + + if( FALSE == Read_SystemMenuVersion(&s_major, &s_minor, &s_timestamp) ) { + m_set_palette(tc[0], M_TEXT_COLOR_RED ); + mprintf( "system menu ver. read error!\n"); + m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + s_major = 0; + s_minor = 0; + s_timestamp = 0; + } + + + ES_InitLib(); + + if( FALSE == MiyaReadHWNormalInfo( &hwn_info ) ) { + m_set_palette(tc[0], 0x1); /* red */ + mprintf("HW Normal Info. read error.\n"); + m_set_palette(tc[0], 0xF); + } + + // mprintf("HW Secure Info. read "); + if( FALSE == MiyaReadHWSecureInfo( &hws_info ) ) { + m_set_palette(tc[0], 0x1); /* red */ + mprintf("HW Secure Info. read error.\n"); + m_set_palette(tc[0], 0xF); /* white */ + } + + // region + mydata.region = LCFG_THW_GetRegion(); + // ES Device ID + + mydata.fuseId = SCFG_ReadFuseData(); + OS_TPrintf("eFuseID: %08X%08X\n", (u32)(mydata.fuseId >> 32), (u32)(mydata.fuseId)); + + OS_GetMacAddress( macAddress ); + + es_error_code = ES_GetDeviceId(&mydata.deviceId); + if( es_error_code == ES_ERR_OK ) { + mydata.shop_record_flag = TRUE; + } + else { + OS_TPrintf("es_error_code = %d\n", es_error_code ); + mydata.shop_record_flag = FALSE; } - mprintf( "\n"); + // (void)CheckShopRecord( hws_info.region, NULL ); + + if( TRUE == mydata.shop_record_flag ) { + snprintf(mydata.bmsDeviceId, sizeof(mydata.bmsDeviceId), "%lld", ((0x3ull << 32) | mydata.deviceId)); + // OS_TPrintf("DeviceID: %08X %u\n", mydata.deviceId, mydata.deviceId); + OS_TPrintf("DeviceID: %s\n", mydata.bmsDeviceId); + } + + + - reboot_flag = OS_IsRebooted(); - /* デバッグのために強制的に */ - // reboot_flag = TRUE; (void)m_get_key_trigger(); keyData = m_get_key_code(); if ( keyData & PAD_BUTTON_X ) { @@ -725,20 +850,8 @@ void TwlMain(void) } if( FALSE == reboot_flag ) { + /* 最初はネットワークアップデート。 */ - if( FALSE == SDCardValidation() ) { - sd_card_flag = FALSE; - m_set_palette(tc[0], 0x1); /* red */ - mprintf("No SD card\n"); - m_set_palette(tc[0], 0xF); /* white */ - } - else { - sd_card_flag = TRUE; - } - FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL); - - - /* 最初にネットワークアップデート。 */ // NSSL_Init(&s_sslConfig); // SetupNSSL(); if (!NA_LoadVersionDataArchive(WorkForNA, NA_VERSION_DATA_WORK_SIZE)) { @@ -759,222 +872,305 @@ void TwlMain(void) #endif (void)NA_UnloadVersionDataArchive(); } + init_my_thread_nuc(); +#if 0 /* 自動スタートはいらない */ if( sd_card_flag == TRUE ) { start_my_thread(); } - - while( 1 ) { - Gfx_Render( vram_num_main , vram_num_sub ); - OS_WaitVBlankIntr(); - (void)RTC_GetDate( &rtc_date ); - (void)RTC_GetTime( &rtc_time ); - keyData = m_get_key_trigger(); - - // ARM7コマンド応答受信 - while (SND_RecvCommandReply(SND_COMMAND_NOBLOCK) != NULL) - { - } - // コマンドフラッシュ(フラッシュして即座に実行を要求) - (void)SND_FlushCommand(SND_COMMAND_NOBLOCK | SND_COMMAND_IMMEDIATE); - if ( keyData & PAD_BUTTON_R ) { - vram_num_main++; - if( vram_num_main > (MAX_VRAM_NUM-1) ) { - vram_num_main = 0; - } - } - else if ( keyData & PAD_BUTTON_L ) { - vram_num_main--; - if( vram_num_main < 0 ) { - vram_num_main = (MAX_VRAM_NUM-1); - } - } - else if ( keyData & PAD_BUTTON_A ) { - if( sd_card_flag == TRUE ) { - start_my_thread(); - } - } - else if ( keyData & PAD_BUTTON_B ) { - } - else if ( keyData & PAD_BUTTON_START ) { - } - else if ( keyData & PAD_BUTTON_SELECT ) { - } - else if ( keyData & PAD_BUTTON_X ) { - } - else if ( keyData & PAD_BUTTON_Y ) { - } - else if ( keyData & PAD_KEY_UP ) { - } - mfprintf(tc[1], "\f%4d/%02d/%02d %02d:%02d:%02d\n\n", - rtc_date.year + 2000, rtc_date.month , rtc_date.day, - rtc_time.hour , rtc_time.minute , rtc_time.second ); - +#endif + if( sd_card_flag == TRUE ) { + text_blink_current_line(tc[0]); + mprintf("press A button to start UPDATE\n\n"); } + else { + text_blink_current_line(tc[0]); + mprintf("insert SD card\n"); + } + } else { - // 不要:NAM の初期化 - NAM_Init(&AllocForNAM, &FreeForNAM); - - // 必須:ES の初期化 - ES_InitLib(); - - - if( RTC_RESULT_SUCCESS != RTC_GetDate( &rtc_date ) ) { - m_set_palette(tc[0], 0x1); /* red */ - mprintf("rtc date read error.\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - } - if( RTC_RESULT_SUCCESS != RTC_GetTime( &rtc_time ) ) { - m_set_palette(tc[0], 0x1); /* red */ - mprintf("rtc time read error.\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - } - - // mprintf("HW Normal Info. read "); - m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); - mprintf("Unique ID:\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - - if( FALSE == MiyaReadHWNormalInfo( &hwn_info ) ) { - m_set_palette(tc[0], 0x1); /* red */ - mprintf("read error!.\n"); - m_set_palette(tc[0], 0xF); + /* 書き戻し過程 */ + if( sd_card_flag == TRUE ) { + text_blink_current_line(tc[0]); + mprintf("press A button to start RESTORE\n\n"); } else { - mprintf(" 0x"); - for( i = 0; i < LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN/2 ; i++ ) { - mprintf("%02X:", hwn_info.movableUniqueID[i]); - } - mprintf("\n 0x"); - for( ; i < LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN ; i++ ) { - mprintf("%02X:", hwn_info.movableUniqueID[i]); - } - mprintf("\n"); - // mprintf(" RTC Adjust data = 0x%02x\n", hwn_info.rtcAdjust ); + text_blink_current_line(tc[0]); + mprintf("insert SD card\n"); } - mprintf("\n"); - - - // mprintf("HW Secure Info. read "); - m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); - mprintf("Serial No. "); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - if( FALSE == MiyaReadHWSecureInfo( &hws_info ) ) { - m_set_palette(tc[0], 0x1); /* red */ - mprintf("read error.\n"); - m_set_palette(tc[0], 0xF); /* white */ - } - else { - mprintf("%s\n", hws_info.serialNo); - } - mprintf("\n"); - - OS_GetMacAddress( macAddress ); - m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); - mprintf("MAC add.(HEX):"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - for ( i = 0 ; i < 6 ; i++ ) { - mprintf("%02X", macAddress[i]); - } - mprintf("\n\n"); - - if( FALSE == SDCardValidation() ) { - sd_card_flag = FALSE; - m_set_palette(tc[0], 0x1); /* red */ - mprintf("No SD card\n"); - m_set_palette(tc[0], 0xF); /* white */ - } - else { - sd_card_flag = TRUE; - } - - FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL); init_my_thread(); + // vram_num_main = 1; + // vram_num_sub = 0; + + vram_num_sub = 2; MFILER_CurrentDir_Init(); - while( 1 ) { - Gfx_Render( vram_num_main , vram_num_sub ); - OS_WaitVBlankIntr(); - (void)RTC_GetDate( &rtc_date ); - (void)RTC_GetTime( &rtc_time ); + } - keyData = m_get_key_trigger(); + if( TRUE == stream_play_is_end() ) { + stream_play0(); /* cursor.aiff */ + } - // ARM7コマンド応答受信 - while (SND_RecvCommandReply(SND_COMMAND_NOBLOCK) != NULL) - { - } - // コマンドフラッシュ(フラッシュして即座に実行を要求) - (void)SND_FlushCommand(SND_COMMAND_NOBLOCK | SND_COMMAND_IMMEDIATE); - - if ( keyData & PAD_BUTTON_R ) { - vram_num_main++; - if( vram_num_main > (MAX_VRAM_NUM-1) ) { - vram_num_main = 0; - } + + while( 1 ) { + Gfx_Render( vram_num_main , vram_num_sub ); + OS_WaitVBlankIntr(); + (void)RTC_GetDate( &rtc_date ); + (void)RTC_GetTime( &rtc_time ); + keyData = m_get_key_trigger(); + + // ARM7コマンド応答受信 + while (SND_RecvCommandReply(SND_COMMAND_NOBLOCK) != NULL) + { } - else if ( keyData & PAD_BUTTON_L ) { - vram_num_main--; - if( vram_num_main < 0 ) { - vram_num_main = (MAX_VRAM_NUM-1); - } + // コマンドフラッシュ(フラッシュして即座に実行を要求) + (void)SND_FlushCommand(SND_COMMAND_NOBLOCK | SND_COMMAND_IMMEDIATE); + if ( keyData & PAD_BUTTON_R ) { + vram_num_main++; + if( vram_num_main > (MAX_VRAM_NUM-1) ) { + vram_num_main = 0; } - else if ( keyData & PAD_BUTTON_A ) { - /* ユーザーデータ吸出しモード */ - if( sd_card_flag == TRUE ) { - if( vram_num_main != 1 ) { - } - else { - if( TRUE == MFILER_Is_Cursor_Dir( &mfiler_list_head ) ) { + } + else if ( keyData & PAD_BUTTON_L ) { + vram_num_main--; + if( vram_num_main < 0 ) { + vram_num_main = (MAX_VRAM_NUM-1); + } + } + else if ( keyData & PAD_BUTTON_A ) { + if( sd_card_flag == TRUE ) { + if( FALSE == reboot_flag ) { + /* ネットワークアップデート */ + text_blink_clear(tc[0]); + start_my_thread(); + } + else { + /* リストア */ + if( vram_num_sub == 2 ) { + MydataLoadDecrypt_dir_flag = MFILER_Is_Cursor_Dir( &mfiler_list_head ); + if( TRUE == MydataLoadDecrypt_dir_flag) { + text_blink_clear(tc[0]); + MyFile_SetPathBase("sdmc:/"); MyFile_AddPathBase((const char *)MFILER_GetCursorEntryPath( &mfiler_list_head ) ); MyFile_AddPathBase("/"); - if(TRUE == MydataLoadDecrypt( MyFile_GetGlobalInformationFileName(), &mydata, sizeof(MyData), NULL) ) { - mprintf("Personal data. restore "); - m_set_palette(tc[0], 0x2); /* green */ - mprintf("OK.\n"); - m_set_palette(tc[0], 0xF); /* white */ - start_my_thread(); + + mprintf("Personal data. restore "); + MydataLoadDecrypt_success_flag = MydataLoadDecrypt( MyFile_GetGlobalInformationFileName(), + &mydata, sizeof(MyData), NULL); + if(TRUE == MydataLoadDecrypt_success_flag ) { + if( mydata.version_major != MY_DATA_VERSION_MAJOR ) { + m_set_palette(tc[0], M_TEXT_COLOR_RED ); + mprintf("NG.\n"); + m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); + mprintf(" illegal format version.\n"); + mprintf(" %s\n version %d.%d\n",MyFile_GetGlobalInformationFileName(), + mydata.version_major,mydata.version_minor); + m_set_palette(tc[0], 0xF); /* white */ + MydataLoadDecrypt_message_flag = FALSE; + } + else if( mydata.version_minor != MY_DATA_VERSION_MINOR ) { + m_set_palette(tc[0], M_TEXT_COLOR_RED ); + mprintf("NG.\n"); + m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); + mprintf(" illegal format version.\n"); + mprintf(" %s\n version %d.%d\n",MyFile_GetGlobalInformationFileName(), + mydata.version_major,mydata.version_minor); + m_set_palette(tc[0], 0xF); /* white */ + MydataLoadDecrypt_message_flag = FALSE; + } + else { + m_set_palette(tc[0], 0x2); /* green */ + mprintf("OK.\n"); + m_set_palette(tc[0], 0xF); /* white */ + + vram_num_sub = 0; + MydataLoadDecrypt_message_flag = TRUE; + MydataLoadDecrypt_dir_flag = TRUE; + MydataLoadDecrypt_success_flag = TRUE; + start_my_thread(); + } + } - else { + else { m_set_palette(tc[0], 0x1); /* red */ mprintf("NG.\n"); m_set_palette(tc[0], 0xF); /* white */ + MydataLoadDecrypt_message_flag = FALSE; } } else { mprintf("Not a backup data directory\n"); - // mprintf("global info. read failed(Not dir.)\n"); + if( TRUE == stream_play_is_end() ) { + stream_play2(); /* ng.aiff */ + } + MydataLoadDecrypt_message_flag = FALSE; + } } } - else { - mprintf("insert SD card\n"); + } + else { + text_blink_clear(tc[0]); + text_blink_current_line(tc[0]); + mprintf("insert SD card\n"); + } + } + else if ( keyData & PAD_BUTTON_B ) { + } + else if ( keyData & PAD_BUTTON_START ) { + } + else if ( keyData & PAD_BUTTON_SELECT ) { + } + else if ( keyData & PAD_BUTTON_X ) { + } + else if ( keyData & PAD_BUTTON_Y ) { + } + else if ( keyData & PAD_KEY_UP ) { + if( FALSE == reboot_flag ) { + } + else { + if( vram_num_sub == 2 ) { + MFILER_CursorY_Up(); } } - else if ( keyData & PAD_BUTTON_B ) { + } + else if ( keyData & PAD_KEY_DOWN ) { + if( FALSE == reboot_flag ) { } - else if ( keyData & PAD_BUTTON_START ) { + else { + if( vram_num_sub == 2 ) { + MFILER_CursorY_Down(); + } } - else if ( keyData & PAD_BUTTON_SELECT ) { + } + + m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); + mfprintf(tc[1], "\fRepaire Tool RESTORE"); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); + mfprintf(tc[1], " ver.%d.%d \n",MY_DATA_VERSION_MAJOR , MY_DATA_VERSION_MINOR ); + mfprintf(tc[1], " build:%s %s\n\n",__DATE__,__TIME__); + + m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); + mfprintf(tc[1],"Sys-menu ver." ); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); + + mfprintf(tc[1],"%d.%d", s_major, s_minor ); + mfprintf(tc[1]," (%08x)\n\n", s_timestamp ); + + + /* ユニークIDは表示しなくていい? */ + m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); + mfprintf(tc[1], "Unique ID:\n"); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); + mfprintf(tc[1], " "); + for( i = 0; i < LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN/2 ; i++ ) { + mfprintf(tc[1], "%02X:", hwn_info.movableUniqueID[i]); + } + mfprintf(tc[1], "\n "); + for( ; i < LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN ; i++ ) { + mfprintf(tc[1], "%02X:", hwn_info.movableUniqueID[i]); + } + mfprintf(tc[1], "\n\n"); + + + m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); + mfprintf(tc[1], "Serial No. "); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); + mfprintf(tc[1], "%s\n", hws_info.serialNo); + mfprintf(tc[1], "\n"); + + + m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); + mfprintf(tc[1], "eFuse ID: "); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); + mfprintf(tc[1],"%08X%08X\n\n", (u32)(mydata.fuseId >> 32), (u32)(mydata.fuseId)); + + + m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); + mfprintf(tc[1],"MAC add.: "); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); + mfprintf(tc[1],"%02X:%02X:%02X:%02X:%02X:%02X", macAddress[0],macAddress[1], + macAddress[2], macAddress[3], macAddress[4], macAddress[5]); + mfprintf(tc[1],"\n\n"); + + m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); + mfprintf(tc[1],"Device ID: "); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); + if( TRUE == mydata.shop_record_flag ) { + mfprintf(tc[1],"%s\n", mydata.bmsDeviceId); + } + else { + m_set_palette(tc[1], M_TEXT_COLOR_YELLOW ); + mfprintf(tc[1],"-----------\n"); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); + } + mfprintf(tc[1],"\n"); + + mfprintf(tc[1], "%4d/%02d/%02d %02d:%02d:%02d\n\n", + rtc_date.year + 2000, rtc_date.month , rtc_date.day, + rtc_time.hour , rtc_time.minute , rtc_time.second ); + + + // mfprintf(tc[1], "cwd = %s\n\n", MFILER_Get_CurrentDir()); + + if( FALSE == reboot_flag ) { + } + else { + mfprintf(tc[1], "function no.%d/%d\n\n", function_counter, function_table_max); + + mfprintf(tc[2],"\f"); + + if( MydataLoadDecrypt_dir_flag == FALSE ) { + mfprintf(tc[2], "Not a backup data directory\n"); + mfprintf(tc[2],"\n\n\n"); } - else if ( keyData & PAD_BUTTON_X ) { + else if( MydataLoadDecrypt_success_flag == FALSE ) { + mfprintf(tc[2], "file load error\n"); + mfprintf(tc[2],"\n\n\n"); } - else if ( keyData & PAD_BUTTON_Y ) { + else if( MydataLoadDecrypt_message_flag == FALSE ) { + if( mydata.version_major != MY_DATA_VERSION_MAJOR ) { + mfprintf(tc[2]," illegal format version.\n"); + mfprintf(tc[2]," %s\n",MyFile_GetGlobalInformationFileName()); + mfprintf(tc[2]," version %d.%d\n", mydata.version_major,mydata.version_minor); + m_set_palette(tc[2], 0xF); /* white */ + mfprintf(tc[2],"\n"); + } + else if( mydata.version_minor != MY_DATA_VERSION_MINOR ) { + mfprintf(tc[2]," illegal format version.\n"); + mfprintf(tc[2]," %s\n",MyFile_GetGlobalInformationFileName()); + mfprintf(tc[2]," version %d.%d\n", mydata.version_major,mydata.version_minor); + m_set_palette(tc[1], 0xF); /* white */ + mfprintf(tc[2],"\n"); + } } + else { + mfprintf(tc[2],"\n\n\n\n"); + } + + MFILER_ClearDir(&mfiler_list_head); + MFILER_ReadDir(&mfiler_list_head, MFILER_Get_CurrentDir()); + MFILER_DisplayDir(tc[2], &mfiler_list_head, 0 ); + } + + loop_counter++; + + } +#if 0 else if ( keyData & PAD_KEY_UP ) { if( vram_num_main != 1 ) { n = m_get_display_offset_y(tc[0]); n++; m_set_display_offset_y(tc[0], n); } - else { + else if( vram_num_sub == 2 ) { MFILER_CursorY_Up(); } } @@ -984,7 +1180,7 @@ void TwlMain(void) n--; m_set_display_offset_y(tc[0], n); } - else { + else if( vram_num_sub == 2 ) { MFILER_CursorY_Down(); } } @@ -998,23 +1194,7 @@ void TwlMain(void) n--; m_set_display_offset_x(tc[0], n); } - label: - mfprintf(tc[1], "\f%4d/%02d/%02d %02d:%02d:%02d\n\n", - rtc_date.year + 2000, rtc_date.month , rtc_date.day, - rtc_time.hour , rtc_time.minute , rtc_time.second ); - - mfprintf(tc[1], "function no.%d/%d\n\n", function_counter, function_table_max); - - // mfprintf(tc[1], "cwd = %s\n\n", MFILER_Get_CurrentDir()); - - MFILER_ClearDir(&mfiler_list_head); - MFILER_ReadDir(&mfiler_list_head, MFILER_Get_CurrentDir()); - MFILER_DisplayDir(tc[1], &mfiler_list_head, 0 ); - - loop_counter++; - - } - } +#endif OS_Terminate(); } diff --git a/build/tools/sctools/copy_org/src/main.c b/build/tools/sctools/copy_org/src/main.c index d0ad292..a0ed595 100644 --- a/build/tools/sctools/copy_org/src/main.c +++ b/build/tools/sctools/copy_org/src/main.c @@ -53,7 +53,11 @@ static void SDEvents(void *userdata, FSEvent event, void *arg) m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); mprintf("SD card:removed!\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - + text_blink_clear(tc[0]); + if( completed_flag == FALSE ) { + text_blink_current_line(tc[0]); + mprintf("insert SD card\n"); + } } else if (event == FS_EVENT_MEDIA_INSERTED) { sd_card_flag = TRUE; @@ -61,12 +65,13 @@ static void SDEvents(void *userdata, FSEvent event, void *arg) m_set_palette(tc[0], M_TEXT_COLOR_YELLOW ); mprintf("SD card:inserted!\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + text_blink_clear(tc[0]); + text_blink_current_line(tc[0]); mprintf("press A button to start BACKUP\n"); } } } - static MyData mydata; #ifdef LCD_UPPER_LOWER_FLIP @@ -332,17 +337,6 @@ static BOOL SDBackupToSDCard8(void) RTCTime rtc_time; /* オリジナルのデータのバックアップ */ - if( TRUE == CheckShopRecord( hws_info.region, NULL ) ) { - mydata.shop_record_flag = TRUE; - OS_TPrintf("shop record exist - you don't have to connect the network.\n"); - mprintf(" (--shop record exist--)\n"); - } - else { - mydata.shop_record_flag = FALSE; - OS_TPrintf("no shop record\n - you don't have to connect the network.\n"); - mprintf(" (--no shop record--)\n"); - } - if( RTC_RESULT_SUCCESS != RTC_GetDate( &rtc_date ) ) { mprintf("rtc read date error.\n"); } @@ -392,13 +386,15 @@ static int function_counter = 0; static void MyThreadProc(void *arg) { #pragma unused(arg) - BOOL flag; OSMessage message; + BOOL flag; + BOOL twl_card_validation_flag; + while( 1 ) { (void)OS_SendMessage(&MyMesgQueue_response, (OSMessage)0, OS_MESSAGE_NOBLOCK); - (void)OS_ReceiveMessage(&MyMesgQueue_request, &message, OS_MESSAGE_BLOCK); flag = TRUE; + twl_card_validation_flag = TRUE; MyFile_SetPathBase("sdmc:/"); MyFile_AddPathBase((const char *)hws_info.serialNo ); MyFile_AddPathBase("/"); @@ -410,11 +406,6 @@ static void MyThreadProc(void *arg) mprintf("\n"); if( flag == TRUE ) { completed_flag = TRUE; -#if 0 - m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ - mprintf("Backup succeded.\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); -#endif if( TRUE == stream_play_is_end() ) { stream_play0(); } @@ -424,15 +415,25 @@ static void MyThreadProc(void *arg) mprintf("Pull out DS(DSi) & SD CARDs!\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); while( 1 ) { - if( (FALSE == SDCardValidation()) && (FALSE == TWLCardValidation()) ) { + if( twl_card_validation_flag == TRUE ) { + /* なぜか一回しかかからないので・・ */ + if( FALSE == TWLCardValidation() ) { + twl_card_validation_flag = FALSE; + mprintf("DS(DSi)CARD pulled out\n"); + } + } + + if( (FALSE == twl_card_validation_flag) && (FALSE == SDCardValidation()) ) { m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ mprintf("Backup completed.\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); if( TRUE == stream_play_is_end() ) { - stream_play1(); + stream_play1(); /* ok.aiff */ } + Gfx_Set_BG1_Color((u16)M_TEXT_COLOR_DARKGREEN); + OS_Sleep(200000); break; } OS_Sleep(200); @@ -445,7 +446,7 @@ static void MyThreadProc(void *arg) mprintf("Backup failed.\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); if( TRUE == stream_play_is_end() ) { - stream_play2(); + stream_play2(); /* ng.aiff */ } Gfx_Set_BG1_Color((u16)M_TEXT_COLOR_DARKRED); } @@ -455,7 +456,8 @@ static void MyThreadProc(void *arg) static BOOL myTWLCardCallback( void ) { - return FALSE; // means that not terminate + + return FALSE; // means that not terminate. } @@ -474,6 +476,7 @@ void TwlMain(void) u8 macAddress[6]; u16 s_major, s_minor; u32 s_timestamp; + ESError es_error_code; OS_Init(); OS_InitThread(); @@ -537,19 +540,6 @@ void TwlMain(void) // 必須:ES の初期化 ES_InitLib(); - if( RTC_RESULT_SUCCESS != RTC_GetDate( &rtc_date ) ) { - m_set_palette(tc[0], M_TEXT_COLOR_RED ); - mprintf("rtc date read error.\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - - } - if( RTC_RESULT_SUCCESS != RTC_GetTime( &rtc_time ) ) { - m_set_palette(tc[0], M_TEXT_COLOR_RED ); - mprintf("rtc time read error.\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - } - - if( FALSE == MiyaReadHWNormalInfo( &hwn_info ) ) { m_set_palette(tc[0], 0x1); /* red */ mprintf("HW Normal Info. read error.\n"); @@ -563,8 +553,6 @@ void TwlMain(void) m_set_palette(tc[0], 0xF); /* white */ } - - // region mydata.region = LCFG_THW_GetRegion(); // ES Device ID @@ -574,20 +562,73 @@ void TwlMain(void) OS_GetMacAddress( macAddress ); - mydata.shop_record_flag = CheckShopRecord( hws_info.region, NULL ); + // typedef s32 ESError; + // ESError ES_GetDeviceId(ESId* devId); + /* + #define ES_ERR_OK 0 + #define ES_ERR_INCORRECT_CERT_TYPE -1001 + #define ES_ERR_GENKEY_FAILED -1002 + #define ES_ERR_VERIFY_SIG_FAILED -1003 + #define ES_ERR_CANNOT_OPEN_FILE -1004 + #define ES_ERR_INCORRECT_PUBKEY_TYPE -1005 + #define ES_ERR_CERT_ISSUER_MISMATCH -1006 + #define ES_ERR_ENCRYPTION_FAILED -1007 + #define ES_ERR_FILE_OPEN_FAILED -1008 + #define ES_ERR_FILE_READ_FAILED -1009 + #define ES_ERR_FILE_WRITE_FAILED -1010 + #define ES_ERR_TMD_NUM_CONTENTS -1011 + #define ES_ERR_INCORRECT_SIG_TYPE -1012 + #define ES_ERR_INCORRECT_SIG_LENGTH -1013 + #define ES_ERR_INCORRECT_CERT_LENGTH -1014 + #define ES_ERR_DEV -1015 + #define ES_ERR_MAXFD -1016 + #define ES_ERR_INVALID -1017 + #define ES_ERR_FS_CONNECTION_FAILED -1018 + #define ES_ERR_UNSUPPORTED_TRANSFER_SOURCE -1019 + #define ES_ERR_DEVICE_ID_MISMATCH -1020 + #define ES_ERR_INCORRECT_CONTENT_SIZE -1021 + #define ES_ERR_HASH_MISMATCH -1022 + #define ES_ERR_INCORRECT_CONTENT_COUNT -1023 + #define ES_ERR_OUT_OF_MEMORY -1024 + #define ES_ERR_NO_TMD_FILE -1025 + #define ES_ERR_NO_RIGHT -1026 + #define ES_ERR_ISSUER_NOT_FOUND -1027 + #define ES_ERR_NO_TICKET -1028 + #define ES_ERR_INCORRECT_TICKET -1029 + #define ES_ERR_NOT_ENOUGH_SPACE -1030 + #define ES_ERR_INCORRECT_BOOT_VERSION -1031 + #define ES_ERR_UNKNOWN -1032 + #define ES_ERR_EXPIRED -1033 + #define ES_ERR_UNUSED -1034 + #define ES_ERR_INCORRECT_TITLE_VERSION -1035 + #define ES_ERR_OS_TICKET_NOEXISTS -1036 + #define ES_ERR_OS_CONTENT_NOEXISTS -1037 + #define ES_ERR_NOT_EMPTY -1038 + // Game is a disc/nand game, but a tmd was not supplied by caller + #define ES_ERR_DISC_NAND_NO_TMD -1039 + #define ES_ERR_NOEXISTS -106 Does not exist ISFS_ERROR_NOEXISTS + */ + + + es_error_code = ES_GetDeviceId(&mydata.deviceId); + if( es_error_code == ES_ERR_OK ) { + mydata.shop_record_flag = TRUE; + } + else { + OS_TPrintf("es_error_code = %d\n", es_error_code ); + mydata.shop_record_flag = FALSE; + } + + // (void)CheckShopRecord( hws_info.region, NULL ); + if( TRUE == mydata.shop_record_flag ) { - if( TRUE == ES_GetDeviceId(&mydata.deviceId) ) { - snprintf(mydata.bmsDeviceId, sizeof(mydata.bmsDeviceId), "%lld", ((0x3ull << 32) | mydata.deviceId)); - OS_TPrintf("DeviceID: %08X %u\n", mydata.deviceId, mydata.deviceId); - OS_TPrintf(" %s\n", mydata.bmsDeviceId); - } + snprintf(mydata.bmsDeviceId, sizeof(mydata.bmsDeviceId), "%lld", ((0x3ull << 32) | mydata.deviceId)); + // OS_TPrintf("DeviceID: %08X %u\n", mydata.deviceId, mydata.deviceId); + OS_TPrintf("DeviceID: %s\n", mydata.bmsDeviceId); } - mprintf("\n"); - mprintf("press A button to start BACKUP\n\n"); - if( FALSE == SDCardValidation() ) { sd_card_flag = FALSE; @@ -604,24 +645,30 @@ void TwlMain(void) FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL); - + mydata.version_major = MY_DATA_VERSION_MAJOR; + mydata.version_minor = MY_DATA_VERSION_MINOR; init_my_thread(); -#if 0 /* 自動スタートはいらない */ if( sd_card_flag == TRUE ) { - (void)start_my_thread(); + text_blink_current_line(tc[0]); + mprintf("press A button to start BACKUP\n\n"); } -#endif + else { + text_blink_current_line(tc[0]); + mprintf("insert SD card\n"); + } + if( TRUE == stream_play_is_end() ) { - stream_play0(); + stream_play0(); /* cursor.aiff */ } while( 1 ) { OS_WaitVBlankIntr(); Gfx_Render( vram_num_main , vram_num_sub ); (void)RTC_GetTime( &rtc_time ); + (void)RTC_GetDate( &rtc_date ); keyData = m_get_key_trigger(); @@ -632,7 +679,6 @@ void TwlMain(void) // コマンドフラッシュ(フラッシュして即座に実行を要求) (void)SND_FlushCommand(SND_COMMAND_NOBLOCK | SND_COMMAND_IMMEDIATE); - if ( keyData & PAD_BUTTON_R ) { #ifdef LCD_UPPER_LOWER_FLIP vram_num_main ^= 1; @@ -655,17 +701,18 @@ void TwlMain(void) } #endif } - - else if ( keyData & PAD_BUTTON_A ) { /* ユーザーデータ吸出しモード */ if(completed_flag == FALSE ) { if( sd_card_flag == TRUE ) { + text_blink_clear(tc[0]); if( FALSE == start_my_thread() ) { OS_TPrintf("\nnow backup..\n\n"); } } else { + text_blink_clear(tc[0]); + text_blink_current_line(tc[0]); mprintf("insert SD card\n"); } } @@ -705,7 +752,7 @@ void TwlMain(void) m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); mfprintf(tc[1], "\fRepaire Tool BACKUP"); m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); - mfprintf(tc[1], " ver. 0.0 \n"); + mfprintf(tc[1], " ver.%d.%d \n",MY_DATA_VERSION_MAJOR , MY_DATA_VERSION_MINOR ); mfprintf(tc[1], " build:%s %s\n\n",__DATE__,__TIME__); m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); @@ -751,19 +798,17 @@ void TwlMain(void) macAddress[2], macAddress[3], macAddress[4], macAddress[5]); mfprintf(tc[1],"\n\n"); - m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); - mfprintf(tc[1],"Shop record: "); + mfprintf(tc[1],"Device ID: "); m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); if( TRUE == mydata.shop_record_flag ) { - mfprintf(tc[1],"exist.\n"); - m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE ); - mfprintf(tc[1],"Device ID: "); - m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); mfprintf(tc[1],"%s\n", mydata.bmsDeviceId); } else { - mfprintf(tc[1],"none.\n"); + // mfprintf(tc[1],"none.\n"); + m_set_palette(tc[1], M_TEXT_COLOR_YELLOW ); + mfprintf(tc[1],"-----------\n"); + m_set_palette(tc[1], M_TEXT_COLOR_WHITE ); } mfprintf(tc[1],"\n");