diff --git a/build/tools/sctools/common/src/font.c b/build/tools/sctools/common/src/font.c index cea8cdc..f96d671 100644 --- a/build/tools/sctools/common/src/font.c +++ b/build/tools/sctools/common/src/font.c @@ -288,8 +288,10 @@ const u32 d_CharData[0xe0 * 8] = { 0x00000000,0x00000000,0x00000000,0x00000000, //007F 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000, //0080 - 0x00000000,0x00000000,0x00000000,0x00000000, + // 0x00000000,0x00000000,0x00000000,0x00000000, //0080 + // 0x00000000,0x00000000,0x00000000,0x00000000, + 0x11111111,0x11111111,0x11111111,0x11111111, //0080 + 0x11111111,0x11111111,0x11111111,0x11111111, 0x00000000,0x00000000,0x00000000,0x00000000, //0081 0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0x00000000,0x00000000, //0082 diff --git a/build/tools/sctools/common/src/gfx.c b/build/tools/sctools/common/src/gfx.c index 0d7dcd6..9d1f39c 100644 --- a/build/tools/sctools/common/src/gfx.c +++ b/build/tools/sctools/common/src/gfx.c @@ -3,6 +3,29 @@ #include "mprintf.h" #include "gfx.h" + + + +#define DPR_HEIGHT_MAX 24 +#define DPR_WIDTH_MAX 32 + +static u16 sDPRScrnBuffer[DPR_HEIGHT_MAX * DPR_WIDTH_MAX]; + + + +void Gfx_Set_BG1_Color(u16 col) +{ + int i,j; + for( i = 0 ; i < DPR_HEIGHT_MAX ; i++ ) { + for( j = 0 ; j < DPR_WIDTH_MAX ; j++ ) { + sDPRScrnBuffer[i*DPR_WIDTH_MAX + j] = (u16)( ((col & 0xf) << 12) | ((u16)0x80) ); + } + } + DC_FlushRange( (void *)&(sDPRScrnBuffer),sizeof(sDPRScrnBuffer)); +} + + + static GXOamAttr g_oam[128]; #define VRAM_SIZE 2*32*24 @@ -33,19 +56,16 @@ void Gfx_Init(void) GX_DispOff(); GXS_DispOff(); - - line_buf_count = init_text_buf_sys((void *)&(text_heap_buffer[0]), (void *)&(text_heap_buffer[TEXT_HEAPBUF_SIZE])); // OS_TPrintf("Init start 1\n"); for( i = 0 ; i < NUM_OF_SCREEN ; i++) { tc[i] = &(textctrl[i]); - init_text(tc[i], (u16 *)&(g_screen[i]), palette_no); + init_text(tc[i], (u16 *)&(g_screen[i]), palette_no); } - - + Gfx_Set_BG1_Color(0); // VRAM初期化 GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); @@ -67,6 +87,8 @@ void Gfx_Init(void) GX_BG_EXTPLTT_01); G2_SetBG0Priority(0); G2_BG0Mosaic(FALSE); + G2_BG1Mosaic(FALSE); + // 2D表示設定 GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS,GX_BGMODE_0,GX_BG0_AS_2D); GX_LoadBG0Char(d_CharData,0,sizeof(d_CharData)); @@ -78,10 +100,21 @@ void Gfx_Init(void) GX_LoadOBJ(d_IconCharData,0,sizeof(d_IconCharData)); GX_LoadOBJPltt(d_IconPaletteData,0,sizeof(d_IconPaletteData)); - GX_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_OBJ ); + + /* 上画面用BG1設定 */ + G2_SetBG1Priority(1); + GX_LoadBG1Char(d_CharData,0,sizeof(d_CharData)); + G2_SetBG1Control(GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text + GX_BG_COLORMODE_16, // use 16 colors mode + GX_BG_SCRBASE_0x3800, // screen base offset + 0x3800 is the address for BG #1 screen + GX_BG_CHARBASE_0x00000, + // character base offset + 0x00000 is the address for BG #1 characters + GX_BG_EXTPLTT_01 // use BGExtPltt slot #1 if BGExtPltt is enabled + ); + GX_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ ); - /* BG1表示設定 */ + /* sub画面表示設定 */ GX_SetBankForSubBG( GX_VRAM_SUB_BG_48_HI ); G2S_SetBG0Control( GX_BG_SCRSIZE_TEXT_256x256 , @@ -90,20 +123,34 @@ void Gfx_Init(void) GX_BG_CHARBASE_0x10000 , // CHR ベースブロック 0 GX_BG_EXTPLTT_01 ); + + G2S_SetBG1Control(GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text + GX_BG_COLORMODE_16, // use 16 colors mode + GX_BG_SCRBASE_0x8800, // screen base offset + 0x3800 is the address for BG #1 screen + GX_BG_CHARBASE_0x00000, + // character base offset + 0x00000 is the address for BG #1 characters + GX_BG_EXTPLTT_01 // use BGExtPltt slot #1 if BGExtPltt is enabled + ); + + G2S_SetBG0Priority( 0 ); + G2S_SetBG1Priority( 1 ); G2S_BG0Mosaic( FALSE ); + G2S_BG1Mosaic( FALSE ); GXS_SetGraphicsMode(GX_BGMODE_0); GXS_LoadBG0Char(d_CharData,0,sizeof(d_CharData)); + GXS_LoadBG1Char(d_CharData,0,sizeof(d_CharData)); GXS_LoadBGPltt(d_PaletteData,0,sizeof(d_PaletteData)); GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_128_D); GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D); - GXS_LoadOBJ(d_IconCharData,0,sizeof(d_IconCharData)); GXS_LoadOBJPltt(d_IconPaletteData,0,sizeof(d_IconPaletteData)); - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 | GX_PLANEMASK_OBJ ); - + + + GXS_SetVisiblePlane( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ ); + // LCD表示開始 GX_DispOn(); @@ -115,7 +162,8 @@ void Gfx_Init(void) G2_SetBG0Offset( 0, 0 ); G2S_SetBG0Offset( 0, 0 ); - + G2_SetBG1Offset( 0, 0 ); + G2S_SetBG1Offset( 0, 0 ); // for V Blank (void)OS_SetIrqFunction( OS_IE_V_BLANK, VBlankIntr ); @@ -136,6 +184,11 @@ static void VBlankIntr(void) } GXS_LoadBG0Scr( (void *)&(g_screen[vram_num_sub]) , 0 , VRAM_SIZE ); + + GX_LoadBG1Scr(sDPRScrnBuffer, 0, sizeof(sDPRScrnBuffer)); + GXS_LoadBG1Scr(sDPRScrnBuffer, 0, sizeof(sDPRScrnBuffer)); + + // 仮想OAMをVRAMに反映 DC_FlushRange(g_oam,sizeof(g_oam)); GX_LoadOAM(g_oam,0,sizeof(g_oam)); diff --git a/build/tools/sctools/common/src/gfx.h b/build/tools/sctools/common/src/gfx.h index cc8338e..75d3a09 100644 --- a/build/tools/sctools/common/src/gfx.h +++ b/build/tools/sctools/common/src/gfx.h @@ -8,6 +8,7 @@ extern "C" { void Gfx_Init(void); void Gfx_Render(int main_no, int sub_no); +void Gfx_Set_BG1_Color(u16 col); #ifdef __cplusplus } diff --git a/build/tools/sctools/common/src/my_fs_util.c b/build/tools/sctools/common/src/my_fs_util.c index 0dce698..89df4bb 100644 --- a/build/tools/sctools/common/src/my_fs_util.c +++ b/build/tools/sctools/common/src/my_fs_util.c @@ -1456,6 +1456,15 @@ BOOL TitleIDSave(const char *path, u64 *pData, int count, FSFile *log_fd) +/* TWLカードがあるかどうか */ +BOOL TWLCardValidation(void) +{ + if( TRUE == OS_IsRunOnDebugger() ) { + return FALSE; + } + return CARD_IsPulledOut(); +} + /* SDカードがあるかどうか */ BOOL SDCardValidation(void) { @@ -1500,6 +1509,11 @@ BOOL CheckShopRecord(u8 region, FSFile *log_fd) FSFile f; BOOL bSuccess; char path[256]; + u32 fileSize; + s32 readSize = 0; + void *pBuffer; + char *str; + int i; FS_InitFile(&f); @@ -1513,14 +1527,44 @@ BOOL CheckShopRecord(u8 region, FSFile *log_fd) } (void)FS_CloseFile(&f); + #if 0 + // CopyFile( dst <= src ); + CopyFile("sdmc:/shop.log", "nand:/sys/log/shop.log",NULL); + STD_StrCpy(path, "nand:/sys/log/shop.log"); bSuccess = FS_OpenFileEx(&f, path, (FS_FILEMODE_R)); - if( ! bSuccess ) { + if( !bSuccess ) { if( FS_RESULT_NO_ENTRY == FS_GetArchiveResultCode(path) ) { } return FALSE; } + + fileSize = FS_GetFileLength(&f); + if( fileSize ) { + pBuffer = (char*)OS_Alloc(fileSize + 1); + if( pBuffer == NULL ) { + OS_TPrintf("Mem alloc error: %s %d\n", __FUNCTION__,__LINE__); + return FALSE; + } + + readSize = FS_ReadFile(&f, pBuffer, (s32)fileSize); + if( readSize != fileSize ) { + OS_TPrintf("Failed Read File: %s %s %d\n",path,__FUNCTION__,__LINE__); + return FALSE; + } + + str = (char *)pBuffer; + + mprintf("\n\n"); + for( i = 0 ; i < readSize ; i++ ) { + OS_PutChar( *str++ ); + m_putchar(tc[0],*str++ ); + } + mprintf("\n\n"); + } + else { + } (void)FS_CloseFile(&f); #endif diff --git a/build/tools/sctools/common/src/my_fs_util.h b/build/tools/sctools/common/src/my_fs_util.h index 34c51a7..324fd91 100644 --- a/build/tools/sctools/common/src/my_fs_util.h +++ b/build/tools/sctools/common/src/my_fs_util.h @@ -37,6 +37,7 @@ BOOL RestoreDirEntryList( char *path, char *log_file_name); BOOL ClearDirEntryList( MY_DIR_ENTRY_LIST **headp ); void write_debug_data(void); BOOL SDCardValidation(void); +BOOL TWLCardValidation(void); BOOL CheckShopRecord(u8 region, FSFile *log_fd); BOOL MydataSave(const char *path, void *pData, int size, FSFile *log_fd); BOOL MydataLoad(const char *path, void *pBuffer, int size, FSFile *log_fd); diff --git a/build/tools/sctools/common/src/mydata.h b/build/tools/sctools/common/src/mydata.h index 5714146..0d416e3 100644 --- a/build/tools/sctools/common/src/mydata.h +++ b/build/tools/sctools/common/src/mydata.h @@ -11,6 +11,11 @@ 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]; } MyData; #ifdef __cplusplus diff --git a/build/tools/sctools/common/src/mynvram.c b/build/tools/sctools/common/src/mynvram.c index abc85f6..f668486 100644 --- a/build/tools/sctools/common/src/mynvram.c +++ b/build/tools/sctools/common/src/mynvram.c @@ -164,9 +164,6 @@ BOOL nvram_backup(char *path) if( TRUE != my_nvram_read( NVRAM_PERSONAL_DATA_OFFSET , sizeof(u16), (void* )&offset) ) { OS_TPrintf( "nvram error: %s %s %d\n",__FILE__,__FUNCTION__,__LINE__); } - else { - OS_TPrintf( "nvram success: offset = 0x%02x\n", offset); - } if( offset == 0 ) { OS_TPrintf( "nvram error: offset = 0x%02x\n", offset); @@ -176,14 +173,11 @@ BOOL nvram_backup(char *path) offset *= 8; offset -= 0xA00; - OS_TPrintf( "nvram %d: offset = 0x%02x\n",__LINE__, offset); - for( vol = 0 ; vol < NVRAM_PERSONAL_DATA_SIZE ; vol += BUF_SIZE ) { if( TRUE != my_nvram_read( offset+vol , BUF_SIZE, (void* )nor_buf) ) { OS_TPrintf( "nvram error: %s %s %d\n",__FILE__,__FUNCTION__,__LINE__); } else { - OS_TPrintf( " --: offset = 0x%02x\n", offset+vol); #if 0 len = FS_WriteFile(&nor_fd, nor_buf, BUF_SIZE); #else diff --git a/build/tools/sctools/common/src/stream.c b/build/tools/sctools/common/src/stream.c index 8488c95..b7e771e 100644 --- a/build/tools/sctools/common/src/stream.c +++ b/build/tools/sctools/common/src/stream.c @@ -62,7 +62,11 @@ static u8 strm_tmp[STRM_BUF_PAGESIZE * 2] ATTRIBUTE_ALIGN(32); // ファイル名 //const char filename2[] = "kart_title.32.wav"; -const char filename1[] = "fanfare.32.wav"; +//const char filename1[] = "fanfare.32.wav"; +const char filename0[] = "cursor.wav"; +const char filename1[] = "ok.wav"; +const char filename2[] = "ng.wav"; +const char filename3[] = "fanfare.32.wav"; static StreamInfo strm; @@ -80,12 +84,27 @@ void stream_main(void) OS_WakeupThreadDirect(&strmThread); } +void stream_play0(void) +{ + PlayStream(&strm, filename0); +} + void stream_play1(void) { PlayStream(&strm, filename1); } -BOOL stream_is_play1_end(void) +void stream_play2(void) +{ + PlayStream(&strm, filename2); +} + +void stream_play3(void) +{ + PlayStream(&strm, filename3); +} + +BOOL stream_play_is_end(void) { if (strm.dataSize <= 0) { return TRUE; @@ -93,8 +112,6 @@ BOOL stream_is_play1_end(void) return FALSE; } - - static void PlayStream(StreamInfo * strm, const char *filename) { int timerValue; diff --git a/build/tools/sctools/common/src/stream.h b/build/tools/sctools/common/src/stream.h index 50a7f86..cec649a 100644 --- a/build/tools/sctools/common/src/stream.h +++ b/build/tools/sctools/common/src/stream.h @@ -8,8 +8,11 @@ extern "C" { extern void channel_play(void); extern void stream_main(void); +extern void stream_play0(void); extern void stream_play1(void); -extern BOOL stream_is_play1_end(void); +extern void stream_play2(void); +extern void stream_play3(void); +extern BOOL stream_play_is_end(void); #ifdef __cplusplus } /* extern "C" */ diff --git a/build/tools/sctools/common/src/text.h b/build/tools/sctools/common/src/text.h index d0a6473..5a4a25c 100644 --- a/build/tools/sctools/common/src/text.h +++ b/build/tools/sctools/common/src/text.h @@ -16,9 +16,9 @@ #define M_TEXT_COLOR_YELLOW 4 #define M_TEXT_COLOR_PURPLE 5 #define M_TEXT_COLOR_LIGHTBLUE 6 -#define M_TEXT_COLOR_DRAKRED 7 +#define M_TEXT_COLOR_DARKRED 7 #define M_TEXT_COLOR_DARKGREEN 8 -#define M_TEXT_COLOR_DRAKBLUE 9 +#define M_TEXT_COLOR_DARKBLUE 9 #define M_TEXT_COLOR_DARKYELLOW 0xa #define M_TEXT_COLOR_DARKPURPLE 0xb #define M_TEXT_COLOR_DARKLIGHTBLUE 0xc diff --git a/build/tools/sctools/copy_dst/Makefile b/build/tools/sctools/copy_dst/Makefile index fac2644..2582a77 100644 --- a/build/tools/sctools/copy_dst/Makefile +++ b/build/tools/sctools/copy_dst/Makefile @@ -62,7 +62,7 @@ LLIBRARIES += libecx$(TWL_LIBSUFFIX).a \ MAKEROM_ROMROOT = ../files -MAKEROM_ROMFILES = fanfare.32.wav +MAKEROM_ROMFILES = fanfare.32.wav ok.wav ng.wav cursor.wav COMPONENT_NAME = armadillo diff --git a/build/tools/sctools/copy_dst/src/main.c b/build/tools/sctools/copy_dst/src/main.c index 35df981..34b5d6d 100644 --- a/build/tools/sctools/copy_dst/src/main.c +++ b/build/tools/sctools/copy_dst/src/main.c @@ -555,17 +555,20 @@ static void MyThreadProc(void *arg) 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(); + } } 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(); + } } mprintf("\n"); /* 全部成功したらフォルダを消す */ - if( TRUE == stream_is_play1_end() ) { - stream_play1(); - } } } @@ -591,9 +594,10 @@ static void MyThreadProcNuc(void *arg) NcFinish(); TerminateWcmControl(); - if( TRUE == stream_is_play1_end() ) { + if( TRUE == stream_play_is_end() ) { stream_play1(); } + /* ハードウェアリセットを行い、自分自身を起動します。 */ OS_Sleep(30000); OS_RebootSystem(); diff --git a/build/tools/sctools/copy_org/Makefile b/build/tools/sctools/copy_org/Makefile index ede5d5e..3fb09c6 100644 --- a/build/tools/sctools/copy_org/Makefile +++ b/build/tools/sctools/copy_org/Makefile @@ -60,7 +60,7 @@ LLIBRARIES += libecx$(TWL_LIBSUFFIX).a \ MAKEROM_ROMROOT = ../files -MAKEROM_ROMFILES = fanfare.32.wav +MAKEROM_ROMFILES = fanfare.32.wav ok.wav ng.wav cursor.wav COMPONENT_NAME = armadillo diff --git a/build/tools/sctools/copy_org/src/main.c b/build/tools/sctools/copy_org/src/main.c index d7479d6..d0ad292 100644 --- a/build/tools/sctools/copy_org/src/main.c +++ b/build/tools/sctools/copy_org/src/main.c @@ -37,7 +37,9 @@ #include "menu_version.h" //================================================================================ +#define LCD_UPPER_LOWER_FLIP 1 +static BOOL completed_flag = FALSE; static FSEventHook sSDHook; static BOOL sd_card_flag = FALSE; @@ -55,38 +57,45 @@ static void SDEvents(void *userdata, FSEvent event, void *arg) } 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 BACKUP\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 ); + mprintf("press A button to start BACKUP\n"); + } } } static MyData mydata; +#ifdef LCD_UPPER_LOWER_FLIP static int vram_num_main = 1; static int vram_num_sub = 0; +#else +static int vram_num_main = 1; +static int vram_num_sub = 0; +#endif static LCFGTWLHWNormalInfo hwn_info; static LCFGTWLHWSecureInfo hws_info; - - #define MY_STACK_SIZE (1024*16) /* でかいほうがいい */ #define MY_THREAD_PRIO 20 static OSThread MyThread; static u64 MyStack[MY_STACK_SIZE / sizeof(u64)]; static void MyThreadProc(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), @@ -94,9 +103,14 @@ static void init_my_thread(void) OS_WakeupThreadDirect(&MyThread); } -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; } @@ -381,7 +395,9 @@ static void MyThreadProc(void *arg) BOOL flag; OSMessage message; 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; MyFile_SetPathBase("sdmc:/"); MyFile_AddPathBase((const char *)hws_info.serialNo ); @@ -393,22 +409,55 @@ 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 completed.\n"); + mprintf("Backup succeded.\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); +#endif + if( TRUE == stream_play_is_end() ) { + stream_play0(); + } + + /* TWLカード、SDカード抜いたかをチェックする */ + 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( (FALSE == SDCardValidation()) && (FALSE == TWLCardValidation()) ) { + 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(); + } + Gfx_Set_BG1_Color((u16)M_TEXT_COLOR_DARKGREEN); + break; + } + OS_Sleep(200); + } + + } else { m_set_palette(tc[0], M_TEXT_COLOR_RED ); mprintf("Backup failed.\n"); m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); + if( TRUE == stream_play_is_end() ) { + stream_play2(); + } + Gfx_Set_BG1_Color((u16)M_TEXT_COLOR_DARKRED); } mprintf("\n"); - if( TRUE == stream_is_play1_end() ) { - stream_play1(); - } } } +static BOOL myTWLCardCallback( void ) +{ + return FALSE; // means that not terminate +} + void TwlMain(void) { @@ -465,24 +514,21 @@ void TwlMain(void) SND_Init(); stream_main(); + CARD_Init(); + CARD_SetPulledOutCallback( myTWLCardCallback ); // 必須;SEA の初期化 SEA_Init(); - m_set_palette(tc[0], M_TEXT_COLOR_LIGHTBLUE ); - 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 ); - } - else { - m_set_palette(tc[0], M_TEXT_COLOR_RED ); - mprintf( "read error!\n"); - m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); - } - mprintf( "\n"); + 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; + } // 不要:NAM の初期化 @@ -491,7 +537,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"); @@ -504,53 +549,46 @@ void TwlMain(void) m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); } - m_set_palette(tc[0], M_TEXT_COLOR_LIGHTBLUE ); - 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"); + mprintf("HW Normal Info. read error.\n"); m_set_palette(tc[0], 0xF); } - 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("\n"); - // mprintf("HW Secure Info. read "); - m_set_palette(tc[0], M_TEXT_COLOR_LIGHTBLUE ); - 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"); + mprintf("HW Secure Info. 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_LIGHTBLUE ); - 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"); + // 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 ); + + mydata.shop_record_flag = 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); + } + } + + + mprintf("\n"); + mprintf("press A button to start BACKUP\n\n"); + + if( FALSE == SDCardValidation() ) { sd_card_flag = FALSE; m_set_palette(tc[0], 0x1); /* red */ @@ -567,10 +605,17 @@ void TwlMain(void) FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL); + init_my_thread(); +#if 0 /* 自動スタートはいらない */ if( sd_card_flag == TRUE ) { - start_my_thread(); + (void)start_my_thread(); + } +#endif + + if( TRUE == stream_play_is_end() ) { + stream_play0(); } while( 1 ) { @@ -587,27 +632,42 @@ 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; + vram_num_sub ^= 1; +#else vram_num_main++; if( vram_num_main > (MAX_VRAM_NUM-1) ) { vram_num_main = 0; } +#endif } else if ( keyData & PAD_BUTTON_L ) { +#ifdef LCD_UPPER_LOWER_FLIP + vram_num_main ^= 1; + vram_num_sub ^= 1; +#else vram_num_main--; if( vram_num_main < 0 ) { vram_num_main = (MAX_VRAM_NUM-1); } +#endif } else if ( keyData & PAD_BUTTON_A ) { /* ユーザーデータ吸出しモード */ - if( sd_card_flag == TRUE ) { - start_my_thread(); - } - else { - mprintf("insert SD card\n"); + if(completed_flag == FALSE ) { + if( sd_card_flag == TRUE ) { + if( FALSE == start_my_thread() ) { + OS_TPrintf("\nnow backup..\n\n"); + } + } + else { + mprintf("insert SD card\n"); + } } } else if ( keyData & PAD_BUTTON_B ) { @@ -642,8 +702,72 @@ void TwlMain(void) } - // mfprintf(tc[1], "\f\ncounter = %d\n\n", loop_counter); - mfprintf(tc[1], "\f\n%4d/%02d/%02d %02d:%02d:%02d\n\n", + 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], " 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],"Shop record: "); + 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],"\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 );