TwlToolsRED/build/tools/sctools/copy_org/src/main.c

1394 lines
39 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project:
File: main.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <nitro/nvram/nvram.h>
#include <twl/sea.h>
#include <twl/lcfg.h>
#include <twl/na.h>
#include <twl/nam.h>
#include "ecdl.h"
#include "font.h"
#include "text.h"
#include "mprintf.h"
#include "gfx.h"
#include "key.h"
#include "my_fs_util.h"
#include "mynvram.h"
#include "stream.h"
#include "hwi.h"
#include "mywlan.h"
#include "mydata.h"
#include "nuc.h"
#include "miya_mcu.h"
#include "error_report.h"
#include "myfilename.h"
#include "menu_version.h"
#include "pre_install.h"
//================================================================================
#define LCD_UPPER_LOWER_FLIP 1
static BOOL completed_flag = FALSE;
static FSEventHook sSDHook;
static BOOL sd_card_flag = FALSE;
static BOOL no_sd_clean_flag = FALSE;
static BOOL development_console_flag = FALSE;
//static int miya_debug_level = 0;
static u32 allocator_total_size = 0;
static OSHeapHandle hHeap;
static void SDEvents(void *userdata, FSEvent event, void *arg)
{
(void)userdata;
(void)arg;
if (event == FS_EVENT_MEDIA_REMOVED) {
sd_card_flag = FALSE;
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;
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]);
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 NAM_TITLE_ID_S 128
static NAMTitleId array_eticket_only_titles[NAM_TITLE_ID_S];
// static int array_eticket_only_titles_version[NAM_TITLE_ID_S];
static NAMTitleId array_app_titles[NAM_TITLE_ID_S];
// static int array_app_titles_version[NAM_TITLE_ID_S];
static int num_of_eticket_only_titles = 0;
static int num_of_app_titles = 0;
static int num_of_all_titles = 0;
#define MY_STACK_SIZE (1024*16) /* <20>ł<EFBFBD><C582><EFBFBD><EFBFBD>ق<EFBFBD><D982><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define MY_THREAD_PRIO 20
static OSThread MyThread;
static u64 MyStack[MY_STACK_SIZE / sizeof(u64)];
static void MyThreadProc(void *arg);
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_request, &MyMesgBuffer_request[0], 1);
OS_InitMessageQueue(&MyMesgQueue_response, &MyMesgBuffer_response[0], 1);
OS_CreateThread(&MyThread, MyThreadProc,
NULL, MyStack + MY_STACK_SIZE / sizeof(u64),
MY_STACK_SIZE, MY_THREAD_PRIO);
OS_WakeupThreadDirect(&MyThread);
}
static BOOL start_my_thread(void)
{
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 void *AllocForNAM(size_t size)
{
OSIntrMode old = OS_DisableInterrupts();
void* p = OS_Alloc(size);
OS_RestoreInterrupts(old);
return p;
}
static void FreeForNAM(void* ptr)
{
if( ptr != NULL ) {
OSIntrMode old = OS_DisableInterrupts();
OS_Free(ptr);
OS_RestoreInterrupts(old);
}
}
static NAMTitleId pArray[NAM_TITLE_ID_S];
static int Check_User_Titles_ETicket_Only(void)
{
s32 i,j;
s32 num = 0;
int user_title_count = 0;
BOOL now_installed_flag;
u64 id;
char game_code[5];
int common_or_personalized_flag;
// u16 version = 0;
// num = NAM_GetNumTitles();
num = NAM_GetNumInstalledTitles();
if( num >= 0 ) {
if( NAM_OK != NAM_GetInstalledTitleList( pArray , NAM_TITLE_ID_S ) ) {
OS_TPrintf("error:NAM_GetInstalledTitleList\n");
return -1; /* error */
}
OS_TPrintf("NAND Ticket only titles\n");
for( i = 0 ; i < num ; i++ ) {
now_installed_flag = FALSE;
id = pArray[i];
for( j = 0 ; j < num_of_all_titles ; j++ ) {
if( id == array_app_titles[ j ] ) {
now_installed_flag = TRUE;
}
}
if( now_installed_flag == TRUE ) {
}
else {
/*
No. 0 0003000f484e4c41
No. 1 0003000f484e4841
No. 2 0003000f484e4341
No. 3 00030015484e4241
No. 4 00030017484e4141 launcher
^
| <20><><EFBFBD><EFBFBD><EFBFBD>̍ʼn<CC8D><C589>ʃr<CA83>b<EFBFBD>g<EFBFBD><67><EFBFBD>P<EFBFBD>̂<EFBFBD><CC82>‚<EFBFBD><C282>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>A<EFBFBD>v<EFBFBD><76>
|
<20>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>A<EFBFBD>v<EFBFBD><76><EFBFBD>̓_<CD83>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>ΏۊO
*/
(void)my_fs_Tid_To_GameCode(id, game_code);
if( id & 0x0000000100000000 ) {
/* system app. */
OS_TPrintf(" sys.:%3d:0x%llx %s\n", i, id, game_code);
}
else {
/* user app. */
// OS_TPrintf(" usr.:%3d:0x%llx %s\n", i, id, game_code);
common_or_personalized_flag = 1;
if( FALSE == pre_install_check_download_or_pre_install(id, &common_or_personalized_flag, NULL) ) {
OS_TPrintf(" pre_install_check_download_or_pre_install failed\n");
}
else {
if( common_or_personalized_flag == 1 ) {
OS_TPrintf(" usr.:%3d:0x%llx %s common\n", i, id, game_code);
array_eticket_only_titles[user_title_count] = id;
#if 0
/* <20><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>Ɍ<EFBFBD><C98C>܂<EFBFBD><DC82>Ă<EFBFBD><C482>ANAM_ReadTitleInfo<66><6F><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>̂ŁB */
if( TRUE == pre_install_get_version(id, &version) ) {
array_eticket_only_titles_version[user_title_count] = (int)version;
}
else {
array_eticket_only_titles_version[user_title_count] = -1;
}
#endif
user_title_count++;
}
else {
OS_TPrintf(" usr.:%3d:0x%llx %s personalized\n", i, id, game_code);
}
}
}
}
}
}
else {
OS_TPrintf("error:NAM_GetInstalledTitles\n");
return -1;
}
num_of_eticket_only_titles = user_title_count;
return user_title_count;
}
static int Check_User_Titles(void)
{
s32 i;
s32 num = 0;
int user_tilte_count = 0;
u64 id;
char game_code[5];
// u16 version;
num = NAM_GetNumTitles();
if( num >= 0 ) {
if( NAM_OK != NAM_GetTitleList( array_app_titles , NAM_TITLE_ID_S ) ) {
OS_TPrintf("error:NAM_GetTitleList\n");
return -1; /* error */
}
OS_TPrintf("NAND Installed titles %d\n",num);
for( i = 0 ; i < num ; i++ ) {
id = array_app_titles[i];
/*
No. 0 0003000f484e4c41
No. 1 0003000f484e4841
No. 2 0003000f484e4341
No. 3 00030015484e4241
No. 4 00030017484e4141 launcher
^
| <20><><EFBFBD><EFBFBD><EFBFBD>̍ʼn<CC8D><C589>ʃr<CA83>b<EFBFBD>g<EFBFBD><67><EFBFBD>P<EFBFBD>̂<EFBFBD><CC82>‚<EFBFBD><C282>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>A<EFBFBD>v<EFBFBD><76>
|
<20>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>A<EFBFBD>v<EFBFBD><76><EFBFBD>̓_<CD83>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>ΏۊO
*/
(void)my_fs_Tid_To_GameCode(id, game_code);
if( id & 0x0000000100000000 ) {
/* system app. */
OS_TPrintf(" sys.:%3d:0x%llx %s\n", i, id, game_code);
}
else {
/* user app. */
OS_TPrintf(" usr.:%3d:0x%llx %s\n", i, id, game_code);
user_tilte_count++;
}
#if 0
if( TRUE == pre_install_get_version(id, &version) ) {
array_app_titles_version[i] = (int)version;
}
else {
array_app_titles_version[i] = -1;
}
#endif
}
}
else {
OS_TPrintf("error:NAM_GetNumTitles\n");
return -1;
}
num_of_app_titles = user_tilte_count;
num_of_all_titles = num;
return user_tilte_count;
}
static BOOL SDBackupToSDCard2(void)
{
/* Wifi<66>ݒ<EFBFBD><DD92>̕ۑ<CC95> */
mprintf("WirelessLAN param. backup ");
if( TRUE == nvram_backup( MyFile_GetWifiParamFileName() ) ) {
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
mprintf("OK.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
mydata.wireless_lan_param_flag = TRUE;
}
else {
m_set_palette(tc[0], M_TEXT_COLOR_RED );
mprintf("NG.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
mydata.wireless_lan_param_flag = FALSE;
return FALSE;
}
return TRUE;
}
static BOOL SDBackupToSDCard3(void)
{
/* nand:/shared1<64>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>̕ۑ<CC95> */
mprintf("User setting param. backup ");
if( TRUE == MiyaBackupTWLSettings( MyFile_GetUserSettingsFileName() ) ) {
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
mprintf("OK.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
mydata.user_settings_flag = TRUE;
}
else {
m_set_palette(tc[0], M_TEXT_COLOR_RED );
mprintf("NG.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
mydata.user_settings_flag = FALSE;
return FALSE;
}
return TRUE;
}
static BOOL SDBackupToSDCard4(void)
{
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
int save_dir_info = 0;
BOOL ret_flag = TRUE;
int list_count;
int error_count;
/*
nand:/shared2<64>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>̕ۑ<CC95>
<20><><EFBFBD>e<EFBFBD>̓A<CD83>v<EFBFBD><76><EFBFBD>P<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43>
nand:/shared2/*
*/
Error_Report_Init();
mprintf("App. shared files backup ");
if( 0 == copy_r( &dir_entry_list_head, MyFile_GetAppSharedSaveDirName() ,
"nand:/shared2" , MyFile_GetAppSharedLogFileName(), 0) ) {
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
if( TRUE == SaveDirEntryList( dir_entry_list_head, MyFile_GetAppSharedListFileName(),
&list_count, &error_count, MyFile_GetAppSharedSaveLogFileName()) ) {
mydata.num_of_shared2_files = list_count;
mydata.num_of_error_shared2_files = error_count;
if( error_count == 0 ) {
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
mprintf("OK.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
else {
ret_flag = FALSE;
}
}
else {
mydata.num_of_shared2_files = -1; /* failed */
mydata.num_of_error_shared2_files = -1;
ret_flag = FALSE;
}
}
else {
mydata.num_of_shared2_files = -1; /* failed */
mydata.num_of_error_shared2_files = -1;
ret_flag = FALSE;
}
if( ret_flag == FALSE ) {
m_set_palette(tc[0], M_TEXT_COLOR_RED );
mprintf("NG.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
(void)ClearDirEntryList( &dir_entry_list_head );
if( TRUE == Error_Report_Display(tc[0]) ) {
mprintf("\n");
}
Error_Report_End();
return ret_flag;
}
static BOOL SDBackupToSDCard5(void)
{
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
int save_dir_info = 0;
BOOL ret_flag = TRUE;
int list_count;
int error_count;
/*
nand2:/photo<74>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>̕ۑ<CC95>
<20><><EFBFBD>e<EFBFBD>͎ʐ^<5E><><EFBFBD><EFBFBD>JPEG<45>t<EFBFBD>@<40>C<EFBFBD><43>
nand2:/photo/*.*
*/
Error_Report_Init();
mprintf("Photo files backup ");
if( 0 == copy_r( &dir_entry_list_head, MyFile_GetPhotoSaveDirName() ,
"nand2:/photo" , MyFile_GetPhotoLogFileName(),0 ) ) {
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
if( TRUE == SaveDirEntryList( dir_entry_list_head, MyFile_GetPhotoListFileName(),
&list_count, &error_count, MyFile_GetPhotoSaveLogFileName() ) ) {
mydata.num_of_photo_files = list_count;
mydata.num_of_error_photo_files = error_count;
if( error_count > 0 ) {
ret_flag = FALSE;
}
}
else {
mydata.num_of_photo_files = -1; /* failed */
mydata.num_of_error_photo_files = -1; /* failed */
ret_flag = FALSE;
}
}
else {
mydata.num_of_photo_files = -1; /* failed */
mydata.num_of_error_photo_files = -1; /* failed */
ret_flag = FALSE;
}
if( ret_flag == FALSE ) {
m_set_palette(tc[0], M_TEXT_COLOR_RED );
mprintf("NG.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
else {
m_set_palette(tc[0], 0x2); /* green */
mprintf("OK.\n");
m_set_palette(tc[0], 0xF); /* white */
}
(void)ClearDirEntryList( &dir_entry_list_head );
if( TRUE == Error_Report_Display(tc[0]) ) {
mprintf("\n");
}
Error_Report_End();
return ret_flag;
}
static BOOL SDBackupToSDCard6(void)
{
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
int save_dir_info = 0;
BOOL ret_flag = TRUE;
int list_count;
int error_count;
Error_Report_Init();
/* nand:/ticket<65>̓`<60>P<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82><EFBFBD><EFBFBD>ƍ<EFBFBD><C68D><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ńo<C583>b<EFBFBD>N<EFBFBD>A<EFBFBD>b<EFBFBD>v<EFBFBD>s<EFBFBD>v */
/*
nand:/title<6C>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>̕ۑ<CC95>
nand:/title/*.sav<61>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׂăo<C483>b<EFBFBD>N<EFBFBD>A<EFBFBD>b<EFBFBD>v
*/
mprintf("App. save data backup ");
if( 0 == find_title_save_data( &dir_entry_list_head, MyFile_GetSaveDataSaveDirName(), "nand:/title",
&save_dir_info, MyFile_GetSaveDataLogFileName(),0 ) ) {
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
// mydata.num_of_app_save_data = SaveDirEntryList( dir_entry_list_head ,
// mydata.num_of_app_save_data =
if( TRUE == SaveDirEntryList( dir_entry_list_head , MyFile_GetSaveDataListFileName(),
&list_count, &error_count, MyFile_GetSaveDataSaveLogFileName() ) ) {
mydata.num_of_app_save_data = list_count;
mydata.num_of_error_app_save_data = error_count;
if( error_count > 0 ) {
ret_flag = FALSE;
}
}
else {
mydata.num_of_app_save_data = -1;
mydata.num_of_error_app_save_data = -1;
ret_flag = FALSE;
}
}
else {
mydata.num_of_app_save_data = -1;
mydata.num_of_error_app_save_data = -1;
ret_flag = FALSE;
}
if( ret_flag == TRUE ) {
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
mprintf("OK.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
else {
m_set_palette(tc[0], M_TEXT_COLOR_RED );
mprintf("NG.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
(void)ClearDirEntryList( &dir_entry_list_head );
if( TRUE == Error_Report_Display(tc[0]) ) {
mprintf("\n");
}
Error_Report_End();
return ret_flag;
}
static BOOL SDBackupToSDCard7(void)
{
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
int save_dir_info = 0;
// u64 *pBuffer;
// u64 *ptr;
MY_USER_APP_TID *pBuffer;
MY_USER_APP_TID *ptr;
int count;
int j;
BOOL flag = TRUE;
int common_or_presonalized_flag;
u16 version;
/* <20>^<5E>C<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>̐<EFBFBD><CC90><EFBFBD> */
/*
nand:/title/00030004/
nand:/title/00030004/34626241/content/title.tmd
nand:/title/00030004/34626241/content/00000000.app
nand:/title/00030004/34626241/data/
nand:/title/00030017/484e4141 <20><> <20><><EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD>[
nand:/title/00030015/484e4641 <20><> shop
nand:/title/00030015/484e4241 <20><> <20>{<7B>̐ݒ<CC90>
No. 0 0003000f484e4c41
No. 1 0003000f484e4841
No. 2 0003000f484e4341
No. 3 00030015484e4241
No. 4 00030017484e4141 launcher
^
| <20><><EFBFBD><EFBFBD><EFBFBD>̍ʼn<CC8D><C589>ʃr<CA83>b<EFBFBD>g<EFBFBD><67><EFBFBD>P<EFBFBD>̂<EFBFBD><CC82>‚<EFBFBD><C282>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>A<EFBFBD>v<EFBFBD><76>
|
<20>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>A<EFBFBD>v<EFBFBD><76><EFBFBD>̓_<CD83>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>ΏۊO
*/
Error_Report_Init();
OS_TPrintf("User title list backup \n");
mprintf("User title list backup ");
if( 0 == get_title_id( &dir_entry_list_head, "nand:/title", &save_dir_info,
MyFile_GetDownloadTitleIDLogFileName(), 0 ) ) {
flag = GetUserAppTitleList( dir_entry_list_head, &pBuffer, &count,
MyFile_GetUserAppTitleListLogFileName()) ;
if( TRUE == flag ) {
ptr = pBuffer;
mydata.num_of_user_download_app = count;
mydata.num_of_error_user_download_app = 0;
mydata.num_of_user_pre_installed_app = 0;
mydata.num_of_user_pre_installed_eticket_only = 0;
if( no_sd_clean_flag == TRUE ) {
mprintf("\n");
}
//char *MyFile_GetDownloadTitleIDTicketOnlyFileName(void);
//char *MyFile_GetDownloadTitleIDTicketOnlySaveLogFileName(void);
//char *MyFile_GetDownloadTitleIDTicketOnlyRestoreLogFileName(void);
mydata.num_of_user_pre_installed_eticket_only = num_of_eticket_only_titles;
if( FALSE == TitleIDSaveETicketOnly( MyFile_GetDownloadTitleIDTicketOnlyFileName(),
array_eticket_only_titles, num_of_eticket_only_titles,
MyFile_GetDownloadTitleIDTicketOnlySaveLogFileName()) ) {
;
}
if( ptr != NULL && count != 0 ) {
for( j = 0 ; j < count ; j++ ) {
// OS_TPrintf("No. %d 0x%016llx\n",j, *ptr);
// mfprintf(tc[2],"No. %d 0x%016llx\n",j,*ptr);
OS_TPrintf("No. %d 0x%016llx",j, ptr->tid);
mfprintf(tc[2],"No. %d 0x%016llx",j,ptr->tid);
if( no_sd_clean_flag == TRUE ) {
mprintf("No. %d 0x%016llx",j,ptr->tid);
}
if( TRUE == pre_install_check_download_or_pre_install(ptr->tid, &common_or_presonalized_flag, NULL) ) {
if( TRUE == pre_install_get_version(ptr->tid, &version) ) {
ptr->version = (int)version;
}
else {
ptr->version = -1;
}
OS_TPrintf(" ver.%d",ptr->version);
mfprintf(tc[2]," ver.%d",ptr->version);
if( no_sd_clean_flag == TRUE ) {
mprintf(" ver.%d",ptr->version);
}
ptr->is_personalized = common_or_presonalized_flag;
if( ptr->is_personalized == 1 ) {
OS_TPrintf(" common");
mfprintf(tc[2]," common");
if( no_sd_clean_flag == TRUE ) {
mprintf(" common");
}
mydata.num_of_user_pre_installed_app++;
}
else if( ptr->is_personalized == 2 ) {
OS_TPrintf(" personalized");
mfprintf(tc[2]," personalized");
if( no_sd_clean_flag == TRUE ) {
mprintf(" personalized");
}
}
else {
OS_TPrintf(" ?=%d",ptr->is_personalized);
mfprintf(tc[2]," ?=%d",ptr->is_personalized);
if( no_sd_clean_flag == TRUE ) {
mprintf(" ?=%d",ptr->is_personalized);
}
}
}
else {
OS_TPrintf(" ticketv fail");
mfprintf(tc[2]," ticketv fail");
if( no_sd_clean_flag == TRUE ) {
mprintf(" ticketv fail");
}
ptr->is_personalized = 0;
}
OS_TPrintf("\n");
mfprintf(tc[2],"\n");
if( no_sd_clean_flag == TRUE ) {
mprintf("\n");
}
ptr++;
}
}
// PrintSrcDirEntryListBackward( dir_entry_list_head, NULL );
flag = TitleIDSave( MyFile_GetDownloadTitleIDFileName(),
pBuffer, count, MyFile_GetDownloadTitleIDSaveLogFileName());
}
if( pBuffer ) {
OS_Free(pBuffer);
}
}
if( flag == TRUE ) {
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
mprintf("OK.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
else {
m_set_palette(tc[0], 0x1); /* red */
mprintf("NG.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
mydata.num_of_user_download_app = -1; /* failed */
mydata.num_of_error_user_download_app = -1;
}
(void)ClearDirEntryList( &dir_entry_list_head );
if( TRUE == Error_Report_Display(tc[0]) ) {
mprintf("\n");
}
Error_Report_End();
if(TRUE == no_sd_clean_flag ) {
mprintf("num of user tiltes = %d\n",mydata.num_of_user_download_app);
}
return flag;
}
static BOOL SDBackupToSDCard8(void)
{
RTCDate rtc_date;
RTCTime rtc_time;
/* <20>I<EFBFBD><49><EFBFBD>W<EFBFBD>i<EFBFBD><69><EFBFBD>̃f<CC83>[<5B>^<5E>̃o<CC83>b<EFBFBD>N<EFBFBD>A<EFBFBD>b<EFBFBD>v */
if( RTC_RESULT_SUCCESS != RTC_GetDate( &rtc_date ) ) {
mprintf("rtc read date error.\n");
mydata.rtc_date_flag = FALSE;
}
else {
mydata.rtc_date_flag = TRUE;
}
if( RTC_RESULT_SUCCESS != RTC_GetTime( &rtc_time ) ) {
mprintf("rtc read time error.\n");
mydata.rtc_time_flag = FALSE;
}
else {
mydata.rtc_time_flag = TRUE;
}
STD_CopyMemory( (void *)&(mydata.rtc_date), (void *)&rtc_date, sizeof(RTCDate) );
STD_CopyMemory( (void *)&(mydata.rtc_time), (void *)&rtc_time, sizeof(RTCTime) );
STD_CopyMemory( (void *)(mydata.movableUniqueID), (void *)hwn_info.movableUniqueID,
LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN );
mprintf("Personal data backup ");
/* <20><><EFBFBD><EFBFBD><EFBFBD>‚̓t<CD83><74><EFBFBD>O<EFBFBD>𗧂Ă<F097A782><C482><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>A<EFBFBD>Z<EFBFBD>[<5B>u<EFBFBD>ł<EFBFBD><C582>Ȃ<EFBFBD><C882>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD> */
if( TRUE == MydataSaveEncrypt( MyFile_GetGlobalInformationFileName(), (void *)&mydata, sizeof(MyData), NULL) ) {
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
mprintf("OK.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
else {
m_set_palette(tc[0], M_TEXT_COLOR_RED );
mprintf("NG.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
return FALSE;
}
return TRUE;
}
typedef BOOL (*function_ptr)(void);
static function_ptr function_table[] =
{
// SDBackupToSDCard1,
SDBackupToSDCard2,
SDBackupToSDCard3,
SDBackupToSDCard4,
SDBackupToSDCard5,
SDBackupToSDCard6,
SDBackupToSDCard7,
SDBackupToSDCard8
};
static int function_table_max = sizeof(function_table) / sizeof(*function_table);
static int function_counter = 0;
static void MyThreadProc(void *arg)
{
#pragma unused(arg)
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);
if( no_sd_clean_flag == FALSE ) {
mprintf("cleaning up SD card files ");
(void)CleanSDCardFiles(NULL);
mprintf("done.\n");
}
else {
m_set_palette(tc[0], M_TEXT_COLOR_PINK );
mprintf("Free mem size %d bytes\n", OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap));
// OS_GetTotalAllocSize(OSArenaId id, OSHeapHandle heap)
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
flag = TRUE;
twl_card_validation_flag = TRUE;
MyFile_SetPathBase("sdmc:/");
MyFile_AddPathBase((const char *)hws_info.serialNo );
MyFile_AddPathBase("/");
(void)CopyFile(MyFile_GetProductLogFileName(), "nand:/sys/log/"MY_FILE_NAME_PRODUCT_LOG , NULL);
(void)CopyFile(MyFile_GetSystemMenuLogFileName(), "nand:/sys/log/"MY_FILE_NAME_SYSMENU_LOG , NULL);
(void)CopyFile(MyFile_GetShopLogFileName(), "nand:/sys/log/"MY_FILE_NAME_SHOP_LOG , NULL);
for( function_counter = 0 ; function_counter < function_table_max ; function_counter++ ) {
if( FALSE == (function_table[function_counter])() ) {
flag = FALSE;
}
if( no_sd_clean_flag == TRUE ) {
m_set_palette(tc[0], M_TEXT_COLOR_PINK );
mprintf("Free mem size %d bytes\n", OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap));
// OS_GetTotalAllocSize(OSArenaId id, OSHeapHandle heap)
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
}
mprintf("\n");
if( flag == TRUE ) {
completed_flag = TRUE;
if( TRUE == stream_play_is_end() ) {
stream_play0();
}
/* <20>s<EFBFBD>v<EFBFBD>k<EFBFBD>J<EFBFBD>[<5B>h<EFBFBD>A<EFBFBD>r<EFBFBD>c<EFBFBD>J<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD> */
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 ) {
/* <20>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񂵂<EFBFBD><F182B582><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>̂ŁE<C581>E */
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(); /* 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("Backup failed.\n");
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
if( TRUE == stream_play_is_end() ) {
stream_play2(); /* ng.aiff */
}
Gfx_Set_BG1_Color((u16)M_TEXT_COLOR_DARKRED);
}
mprintf("\n");
}
}
static BOOL myTWLCardCallback( void )
{
return FALSE; // means that not terminate.
}
void TwlMain(void)
{
void* newArenaLo;
u16 keyData;
int loop_counter = 0;
int save_dir_info = 0;
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
RTCDate rtc_date;
RTCTime rtc_time;
int i;
int n;
u8 macAddress[6];
u16 s_major, s_minor;
u32 s_timestamp;
ESError es_error_code;
int select_mode = 0;
u16 BatterylevelBuf = 0;
BOOL isAcConnectedBuf = FALSE;
OS_Init();
OS_InitThread();
OS_InitTick();
OS_InitAlarm();
// <20>}<7D>X<EFBFBD>^<5E>[<5B><><EFBFBD><EFBFBD>݃t<DD83><74><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD>
(void)OS_EnableIrq();
// IRQ <20><><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD><EFBFBD>‚<EFBFBD><C282>܂<EFBFBD>
(void)OS_EnableInterrupts();
// ARM7<4D>Ƃ̒ʐMFIFO<46><4F><EFBFBD><EFBFBD>݋<EFBFBD><DD8B><EFBFBD>
(void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV);
// <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FS_Init( FS_DMA_NOT_USE );
// <20><><EFBFBD>C<EFBFBD><43><EFBFBD>A<EFBFBD><41><EFBFBD>[<5B>i<EFBFBD>̃A<CC83><41><EFBFBD>P<EFBFBD>[<5B>g<EFBFBD>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
newArenaLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1);
OS_SetMainArenaLo(newArenaLo);
// <20><><EFBFBD>C<EFBFBD><43><EFBFBD>A<EFBFBD><41><EFBFBD>[<5B>i<EFBFBD><69><EFBFBD>Ƀq<C983>[<5B>v<EFBFBD><76><EFBFBD>
hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi());
OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap);
allocator_total_size = OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap);
Gfx_Init();
RTC_Init();
SCFG_Init();
NVRAMi_Init();
SND_Init();
stream_main();
CARD_Init();
CARD_SetPulledOutCallback( myTWLCardCallback );
// <20>K<EFBFBD>{<7B>GSEA <20>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD>
SEA_Init();
MIYA_MCU_Init();
OS_TPrintf("MCU Free Reg. 0x%02x\n",MCU_GetFreeReg());
STD_MemSet((void *)&mydata, 0, sizeof(MyData));
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;
mydata.sys_ver_flag = FALSE;
}
else {
mydata.sys_ver_flag = TRUE;
mydata.sys_ver_major = s_major;
mydata.sys_ver_minor = s_minor;
}
development_console_flag = IsThisDevelopmentConsole();
if(TRUE == development_console_flag ) {
mprintf("--development console--\n");
m_set_palette(tc[0], M_TEXT_COLOR_PINK );
m_set_palette(tc[0], M_TEXT_COLOR_PURPLE );
m_set_palette(tc[0], M_TEXT_COLOR_ORANGE );
m_set_palette(tc[0], M_TEXT_COLOR_BROWN );
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
// <20>s<EFBFBD>v<EFBFBD>FNAM <20>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD>
// NAM_Init(&AllocForNAM, &FreeForNAM);
// <20>K<EFBFBD>{<7B>FES <20>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD>
ES_InitLib();
if( FALSE == MiyaReadHWNormalInfo( &hwn_info ) ) {
mydata.uniqueid_flag = FALSE;
m_set_palette(tc[0], 0x1); /* red */
mprintf("HW Normal Info. read error.\n");
m_set_palette(tc[0], 0xF);
}
else {
mydata.uniqueid_flag = TRUE;
}
// 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 );
// 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
*/
mydata.shop_record_flag = FALSE;
es_error_code = ES_GetDeviceId(&mydata.deviceId);
if( es_error_code == ES_ERR_OK ) {
if( TRUE == CheckShopRecord( NULL ) ) {
mydata.shop_record_flag = TRUE;
mprintf("Shop record was found.\n");
}
else {
/*
<09>V<EFBFBD><56><EFBFBD>b<EFBFBD>v<EFBFBD>Ɍq<C98C><71><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>𔻒肵<F094BB92>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
<09>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>͂ǂ<CD82><C782>Ȃ́H
*/
mprintf("no Shop record.\n");
}
}
else {
OS_TPrintf("es_error_code = %d\n", es_error_code );
}
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);
}
/* NAM <20>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD> */
NAM_Init(&AllocForNAM, &FreeForNAM);
// mydata.num_of_user_download_app_by_nam = Check_User_Titles();
// mprintf("num of user tiltes = %d\n",mydata.num_of_user_download_app_by_nam);
/* <20><><EFBFBD>Ԍ<EFBFBD><D48C><EFBFBD> */
mprintf("user tiltes(installed) = %d\n", Check_User_Titles());
mprintf("user tiltes(ticket only) = %d\n", Check_User_Titles_ETicket_Only());
mprintf("\n");
mydata.volume = (s32)MCU_GetVolume();
mydata.backlight_brightness = (s32)MCU_GetBackLightBrightness();
#if 0 /* <20><><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><E782B5> */
OS_TPrintf("vol = %d\n",mydata.volume );
OS_TPrintf("bright = %d\n", mydata.backlight_brightness);
MCU_SetVolume( (u8)31 );
MCU_SetBackLightBrightness( (u8)4 );
#endif
if( FALSE == SDCardValidation() ) {
sd_card_flag = FALSE;
m_set_palette(tc[0], 0x1); /* red */
mprintf("No SD card\n");
}
else {
sd_card_flag = TRUE;
}
m_set_palette(tc[0], 0xF); /* white */
FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL);
mydata.version_major = MY_DATA_VERSION_MAJOR;
mydata.version_minor = MY_DATA_VERSION_MINOR;
init_my_thread();
if( sd_card_flag == TRUE ) {
text_blink_current_line(tc[0]);
mprintf("press A button to start BACKUP\n\n");
}
else {
text_blink_current_line(tc[0]);
mprintf("insert SD card\n");
}
if( TRUE == stream_play_is_end() ) {
stream_play0(); /* cursor.aiff */
}
Gfx_Set_BG1_line_Color(1, 2, (u16)M_TEXT_COLOR_PURPLE);
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();
// <20>`<60>q<EFBFBD>l<EFBFBD>V<EFBFBD>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M
while (SND_RecvCommandReply(SND_COMMAND_NOBLOCK) != NULL)
{
}
// <20>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>t<EFBFBD><74><EFBFBD>b<EFBFBD>V<EFBFBD><56><EFBFBD>i<EFBFBD>t<EFBFBD><74><EFBFBD>b<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>đ<EFBFBD><C491><EFBFBD><EFBFBD>Ɏ<EFBFBD><C98E>s<EFBFBD><73><EFBFBD>v<EFBFBD><76><EFBFBD>j
(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 | PAD_BUTTON_START) ) {
/* <20><><EFBFBD>[<5B>U<EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E>z<EFBFBD>o<EFBFBD><6F><EFBFBD><EFBFBD><EFBFBD>[<5B>h */
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");
}
}
}
else if ( keyData & PAD_BUTTON_B ) {
}
#if 0
/* <20>X<EFBFBD>^<5E>[<5B>g<EFBFBD>{<7B>^<5E><><EFBFBD>͂`<60>{<7B>^<5E><><EFBFBD>Ɠ<EFBFBD><C693><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
else if ( keyData & PAD_BUTTON_START ) {
}
#endif
else if ( keyData & PAD_BUTTON_SELECT ) {
}
else if ( keyData & PAD_BUTTON_X ) {
select_mode++;
select_mode %= 3;
Miya_debug_OFF();
no_sd_clean_flag = FALSE;
if( select_mode == 0 ) {
}
else if(select_mode == 1 ) {
no_sd_clean_flag = TRUE;
}
else if(select_mode == 2 ) {
Miya_debug_ON();
}
}
else if ( keyData & PAD_BUTTON_Y ) {
}
else if ( keyData & PAD_KEY_UP ) {
n = m_get_display_offset_y(tc[0]);
n++;
m_set_display_offset_y(tc[0], n);
}
else if ( keyData & PAD_KEY_DOWN ) {
n = m_get_display_offset_y(tc[0]);
n--;
m_set_display_offset_y(tc[0], n);
}
else if ( keyData & PAD_KEY_RIGHT ) {
n = m_get_display_offset_x(tc[0]);
n++;
m_set_display_offset_x(tc[0], n);
}
else if ( keyData & PAD_KEY_LEFT ) {
n = m_get_display_offset_x(tc[0]);
n--;
m_set_display_offset_x(tc[0], 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.%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 );
/* <20><><EFBFBD>j<EFBFBD>[<5B>N<EFBFBD>h<EFBFBD>c<EFBFBD>͕\<5C><><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>H */
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 {
// 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");
if( (loop_counter % 60) == 0 ) {
// PM_RESULT_SUCCESS
(void)PM_GetACAdapter( &isAcConnectedBuf );
(void)PM_GetBatteryLevel( &BatterylevelBuf );
}
mfprintf(tc[1], "%4d/%02d/%02d %02d:%02d:%02d ",
rtc_date.year + 2000, rtc_date.month , rtc_date.day,
rtc_time.hour , rtc_time.minute , rtc_time.second );
if( isAcConnectedBuf == TRUE ) {
m_set_palette(tc[1], M_TEXT_COLOR_BLUE );
mfprintf(tc[1], "AC. \n\n");
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
}
else {
mfprintf(tc[1], "Batt.Lv ");
switch( BatterylevelBuf ) {
case 0:
case 1:
m_set_palette(tc[1], M_TEXT_COLOR_RED );
break;
case 2:
case 3:
case 4:
m_set_palette(tc[1], M_TEXT_COLOR_YELLOW );
break;
default:
m_set_palette(tc[1], M_TEXT_COLOR_GREEN );
break;
}
mfprintf(tc[1], "%d/5\n\n" , BatterylevelBuf);
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
}
if( select_mode == 0 ) {
mfprintf(tc[1],"-- normal mode(default) --\n");
}
else if( select_mode == 1 ) {
m_set_palette(tc[1], M_TEXT_COLOR_YELLOW );
mfprintf(tc[1],"-- no SDCard clean mode --\n");
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
}
else if( select_mode == 2 ) {
m_set_palette(tc[1], M_TEXT_COLOR_RED ); /* red */
mfprintf(tc[1],"-- NG mode --\n");
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
}
mfprintf(tc[1],"\n");
mfprintf(tc[1], "function no.%d/%d\n", function_counter, function_table_max);
loop_counter++;
}
OS_Terminate();
}
/*====== End of main.c ======*/