mirror of
https://github.com/rvtr/TwlToolsRED.git
synced 2025-10-31 06:41:18 -04:00
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@11 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
parent
44dd8fb415
commit
c64e44cb58
@ -603,28 +603,29 @@ static BOOL CheckSystemApp(char path[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MYDEBUG 1
|
|
||||||
|
|
||||||
void GetDirEntryList( MY_DIR_ENTRY_LIST *head, u64 **pBuffer, int *size)
|
void GetDirEntryList( MY_DIR_ENTRY_LIST *head, u64 **pBuffer, int *size)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
MY_DIR_ENTRY_LIST *list_temp;
|
MY_DIR_ENTRY_LIST *list_temp;
|
||||||
u64 *buf;
|
u64 *buf = NULL;
|
||||||
char c;
|
char c;
|
||||||
u8 hex;
|
u8 hex;
|
||||||
|
|
||||||
if( head == NULL ) {
|
if( head == NULL ) {
|
||||||
|
*pBuffer = buf;
|
||||||
|
*size = count;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for( list_temp = head ; list_temp->next != NULL ; list_temp = list_temp->next ) {
|
for( list_temp = head ; list_temp->next != NULL ; list_temp = list_temp->next ) {
|
||||||
if( list_temp->src_path ) {
|
if( list_temp->src_path ) {
|
||||||
#ifdef MYDEBUG
|
#ifdef MYDEBUG
|
||||||
|
count++;
|
||||||
|
#else
|
||||||
if( FALSE == CheckSystemApp( list_temp->src_path) ) {
|
if( FALSE == CheckSystemApp( list_temp->src_path) ) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
count++;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -636,7 +637,7 @@ void GetDirEntryList( MY_DIR_ENTRY_LIST *head, u64 **pBuffer, int *size)
|
|||||||
STD_MemSet((void *)buf, 0, count * sizeof(u64));
|
STD_MemSet((void *)buf, 0, count * sizeof(u64));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
buf = NULL;
|
|
||||||
}
|
}
|
||||||
*pBuffer = buf;
|
*pBuffer = buf;
|
||||||
*size = count;
|
*size = count;
|
||||||
@ -656,7 +657,7 @@ void GetDirEntryList( MY_DIR_ENTRY_LIST *head, u64 **pBuffer, int *size)
|
|||||||
|
|
|
|
||||||
システムアプリはダウンロード対象外
|
システムアプリはダウンロード対象外
|
||||||
*/
|
*/
|
||||||
#ifdef MYDEBUG
|
#ifndef MYDEBUG
|
||||||
if( FALSE == CheckSystemApp( list_temp->src_path ) ) {
|
if( FALSE == CheckSystemApp( list_temp->src_path ) ) {
|
||||||
#endif
|
#endif
|
||||||
count++;
|
count++;
|
||||||
@ -704,7 +705,7 @@ void GetDirEntryList( MY_DIR_ENTRY_LIST *head, u64 **pBuffer, int *size)
|
|||||||
buf++;
|
buf++;
|
||||||
OS_TPrintf("User App. count2 = %d\n", count);
|
OS_TPrintf("User App. count2 = %d\n", count);
|
||||||
|
|
||||||
#ifdef MYDEBUG
|
#ifndef MYDEBUG
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
@ -1309,8 +1310,6 @@ BOOL TitleIDSave(const char *path, u64 *pData, int count, FSFile *log_fd)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* SDカードがあるかどうか */
|
/* SDカードがあるかどうか */
|
||||||
BOOL SDCardValidation(void)
|
BOOL SDCardValidation(void)
|
||||||
{
|
{
|
||||||
@ -1374,13 +1373,10 @@ BOOL CheckShopRecord(FSFile *log_fd)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src, int *save_parent_dir_info_flag, char *log_file_name, int level )
|
||||||
int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src, int *save_parent_dir_info_flag, char *log_file_name )
|
|
||||||
{
|
{
|
||||||
static int recursive_count = 0;
|
|
||||||
static FSFile log_fd;
|
static FSFile log_fd;
|
||||||
static BOOL log_active = FALSE;
|
static BOOL log_active = FALSE;
|
||||||
// static char *log_file_name = "sdmc:/miya/nandinfo_find_title_save_data.txt";
|
|
||||||
|
|
||||||
FSFile f_src;
|
FSFile f_src;
|
||||||
FSDirectoryEntryInfo entry_src;
|
FSDirectoryEntryInfo entry_src;
|
||||||
@ -1394,16 +1390,16 @@ int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src, int *save_pare
|
|||||||
|
|
||||||
/* ここでSDカードがあるかどうか調べる */
|
/* ここでSDカードがあるかどうか調べる */
|
||||||
|
|
||||||
if( recursive_count == 0 ) {
|
if( level == 0 ) {
|
||||||
log_active = Log_File_Open( &log_fd, log_file_name );
|
log_active = Log_File_Open( &log_fd, log_file_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
recursive_count++;
|
level++;
|
||||||
|
|
||||||
// recursive_count 1 2 3 4
|
// level 1 2 3 4
|
||||||
// nand:/title
|
// nand:/title
|
||||||
// nand:/title/00000000/00000000/data/*.sav
|
// nand:/title/00000000/00000000/data/*.sav
|
||||||
if( recursive_count > 4 ) {
|
if( level > 4 ) {
|
||||||
ret_value = 0;
|
ret_value = 0;
|
||||||
goto end_process;
|
goto end_process;
|
||||||
}
|
}
|
||||||
@ -1428,19 +1424,20 @@ int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src, int *save_pare
|
|||||||
ret_value = -1;
|
ret_value = -1;
|
||||||
goto end_process;
|
goto end_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
path_src_full = (char *)OS_Alloc( FILE_PATH_LEN );
|
path_src_full = (char *)OS_Alloc( FILE_PATH_LEN );
|
||||||
if( path_src_full == NULL ) {
|
if( path_src_full == NULL ) {
|
||||||
miya_log_fprintf(&log_fd, "Error: alloc error src_full\n");
|
miya_log_fprintf(&log_fd, "Error: alloc error src_full\n");
|
||||||
ret_value = -1;
|
ret_value = -1;
|
||||||
goto end_process;
|
goto end_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
STD_MemSet((void *)path_src_dir, 0, FILE_PATH_LEN);
|
STD_MemSet((void *)path_src_dir, 0, FILE_PATH_LEN);
|
||||||
STD_MemSet((void *)path_src_full, 0, FILE_PATH_LEN);
|
STD_MemSet((void *)path_src_full, 0, FILE_PATH_LEN);
|
||||||
STD_StrCpy(path_src_dir, path_src);
|
STD_StrCpy(path_src_dir, path_src);
|
||||||
STD_StrCat(path_src_dir, "/");
|
STD_StrCat(path_src_dir, "/");
|
||||||
|
|
||||||
while( FS_ReadDirectory(&f_src, &entry_src) ) {
|
while( FS_ReadDirectory(&f_src, &entry_src) ) {
|
||||||
|
|
||||||
if( STD_StrCmp(entry_src.longname, ".") == 0 ) {
|
if( STD_StrCmp(entry_src.longname, ".") == 0 ) {
|
||||||
/* とりあえずカレントディレクトリエントリを残しておく */
|
/* とりあえずカレントディレクトリエントリを残しておく */
|
||||||
STD_CopyMemory( (void *)&entry_current_dir, (void *)&entry_src ,sizeof(FSDirectoryEntryInfo) );
|
STD_CopyMemory( (void *)&entry_current_dir, (void *)&entry_src ,sizeof(FSDirectoryEntryInfo) );
|
||||||
@ -1460,30 +1457,30 @@ int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src, int *save_pare
|
|||||||
|
|
||||||
if( (entry_src.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) {
|
if( (entry_src.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) {
|
||||||
/* ディレクトリの場合 */
|
/* ディレクトリの場合 */
|
||||||
// recursive_count 1 2 3 4
|
// level 1 2 3 4
|
||||||
// nand:/title
|
// nand:/title
|
||||||
// nand:/title/00000000/00000000/data/*.sav
|
// nand:/title/00000000/00000000/data/*.sav
|
||||||
if( recursive_count == 1 ) {
|
if( level == 1 ) {
|
||||||
if( my_fs_is_Title_Hi_dir_name( entry_src.longname ) == TRUE ) {
|
if( my_fs_is_Title_Hi_dir_name( entry_src.longname ) == TRUE ) {
|
||||||
get_title_id( headp, path_src_full , &save_parent_dir_info_flag_temp, log_file_name );
|
get_title_id( headp, path_src_full , &save_parent_dir_info_flag_temp, log_file_name, level );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( recursive_count == 2 ) {
|
if( level == 2 ) {
|
||||||
if( my_fs_is_Title_Lo_dir_name( entry_src.longname ) == TRUE ) {
|
if( my_fs_is_Title_Lo_dir_name( entry_src.longname ) == TRUE ) {
|
||||||
get_title_id( headp, path_src_full , &save_parent_dir_info_flag_temp, log_file_name );
|
get_title_id( headp, path_src_full , &save_parent_dir_info_flag_temp, log_file_name, level );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( (recursive_count == 3) ) {
|
else if( (level == 3) ) {
|
||||||
if( !STD_StrCmp( entry_src.longname, "content" ) ) {
|
if( !STD_StrCmp( entry_src.longname, "content" ) ) {
|
||||||
get_title_id( headp, path_src_full , &save_parent_dir_info_flag_temp, log_file_name );
|
get_title_id( headp, path_src_full , &save_parent_dir_info_flag_temp, log_file_name, level );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// recursive_count 1 2 3 4
|
// level 1 2 3 4
|
||||||
// nand:/title
|
// nand:/title
|
||||||
// nand:/title/00000000/00000000/content/title.tmd
|
// nand:/title/00000000/00000000/content/title.tmd
|
||||||
if( (recursive_count == 4) ) {
|
if( (level == 4) ) {
|
||||||
if( !STD_StrCmp( entry_src.longname, "title.tmd" ) ) {
|
if( !STD_StrCmp( entry_src.longname, "title.tmd" ) ) {
|
||||||
/* 目的のファイルを見つけた。 */
|
/* 目的のファイルを見つけた。 */
|
||||||
#if 0
|
#if 0
|
||||||
@ -1498,7 +1495,7 @@ int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src, int *save_pare
|
|||||||
|
|
||||||
if( save_parent_dir_info_flag_temp == 1 ) {
|
if( save_parent_dir_info_flag_temp == 1 ) {
|
||||||
// OS_TPrintf("save dir info = %s\n\n",path_src);
|
// OS_TPrintf("save dir info = %s\n\n",path_src);
|
||||||
if( recursive_count == 3 ) {
|
if( level == 3 ) {
|
||||||
my_fs_add_list( headp, &entry_current_dir, path_src, NULL, &log_fd);
|
my_fs_add_list( headp, &entry_current_dir, path_src, NULL, &log_fd);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1524,9 +1521,9 @@ int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src, int *save_pare
|
|||||||
OS_Free(path_src_full);
|
OS_Free(path_src_full);
|
||||||
}
|
}
|
||||||
|
|
||||||
recursive_count--;
|
level--;
|
||||||
|
|
||||||
if( recursive_count == 0 ) {
|
if( level == 0 ) {
|
||||||
if( log_active ) {
|
if( log_active ) {
|
||||||
Log_File_Close(&log_fd);
|
Log_File_Close(&log_fd);
|
||||||
}
|
}
|
||||||
@ -1537,9 +1534,8 @@ int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src, int *save_pare
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int find_title_save_data(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src, int *save_parent_dir_info_flag, char *log_file_name )
|
int find_title_save_data(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src, int *save_parent_dir_info_flag, char *log_file_name, int level )
|
||||||
{
|
{
|
||||||
static int recursive_count = 0;
|
|
||||||
static FSFile log_fd;
|
static FSFile log_fd;
|
||||||
static BOOL log_active = FALSE;
|
static BOOL log_active = FALSE;
|
||||||
// static char *log_file_name = "sdmc:/miya/nandinfo_find_title_save_data.txt";
|
// static char *log_file_name = "sdmc:/miya/nandinfo_find_title_save_data.txt";
|
||||||
@ -1558,16 +1554,16 @@ int find_title_save_data(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const
|
|||||||
|
|
||||||
/* ここでSDカードがあるかどうか調べる */
|
/* ここでSDカードがあるかどうか調べる */
|
||||||
|
|
||||||
if( recursive_count == 0 ) {
|
if( level == 0 ) {
|
||||||
log_active = Log_File_Open( &log_fd, log_file_name );
|
log_active = Log_File_Open( &log_fd, log_file_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
recursive_count++;
|
level++;
|
||||||
|
|
||||||
// recursive_count 1 2 3 4
|
// level 1 2 3 4
|
||||||
// nand:/title
|
// nand:/title
|
||||||
// nand:/title/00000000/00000000/data/*.sav
|
// nand:/title/00000000/00000000/data/*.sav
|
||||||
if( recursive_count > 4 ) {
|
if( level > 4 ) {
|
||||||
ret_value = 0;
|
ret_value = 0;
|
||||||
goto end_process;
|
goto end_process;
|
||||||
}
|
}
|
||||||
@ -1616,30 +1612,30 @@ int find_title_save_data(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const
|
|||||||
|
|
||||||
if( (entry_src.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) {
|
if( (entry_src.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) {
|
||||||
/* ディレクトリの場合 */
|
/* ディレクトリの場合 */
|
||||||
// recursive_count 1 2 3 4
|
// level 1 2 3 4
|
||||||
// nand:/title
|
// nand:/title
|
||||||
// nand:/title/00000000/00000000/data/*.sav
|
// nand:/title/00000000/00000000/data/*.sav
|
||||||
if( recursive_count == 1 ) {
|
if( level == 1 ) {
|
||||||
if( my_fs_is_Title_Hi_dir_name( entry_src.longname ) == TRUE ) {
|
if( my_fs_is_Title_Hi_dir_name( entry_src.longname ) == TRUE ) {
|
||||||
find_title_save_data( headp, path_dst_full, path_src_full , &save_parent_dir_info_flag_temp, log_file_name );
|
find_title_save_data( headp, path_dst_full, path_src_full , &save_parent_dir_info_flag_temp, log_file_name , level );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( recursive_count == 2 ) {
|
if( level == 2 ) {
|
||||||
if( my_fs_is_Title_Lo_dir_name( entry_src.longname ) == TRUE ) {
|
if( my_fs_is_Title_Lo_dir_name( entry_src.longname ) == TRUE ) {
|
||||||
find_title_save_data( headp, path_dst_full, path_src_full , &save_parent_dir_info_flag_temp, log_file_name );
|
find_title_save_data( headp, path_dst_full, path_src_full , &save_parent_dir_info_flag_temp, log_file_name, level );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( (recursive_count == 3) ) {
|
else if( (level == 3) ) {
|
||||||
if( !STD_StrCmp( entry_src.longname, "data" ) ) {
|
if( !STD_StrCmp( entry_src.longname, "data" ) ) {
|
||||||
find_title_save_data( headp, path_dst_full, path_src_full , &save_parent_dir_info_flag_temp, log_file_name );
|
find_title_save_data( headp, path_dst_full, path_src_full , &save_parent_dir_info_flag_temp, log_file_name, level );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// recursive_count 1 2 3 4
|
// level 1 2 3 4
|
||||||
// nand:/title
|
// nand:/title
|
||||||
// nand:/title/00000000/00000000/data/*.sav
|
// nand:/title/00000000/00000000/data/*.sav
|
||||||
if( (recursive_count == 4) ) {
|
if( (level == 4) ) {
|
||||||
if( !STD_StrCmp( entry_src.longname, "public.sav" ) ) {
|
if( !STD_StrCmp( entry_src.longname, "public.sav" ) ) {
|
||||||
/* 目的のファイルを見つけた。 */
|
/* 目的のファイルを見つけた。 */
|
||||||
my_fs_add_list(headp, &entry_src, path_src_full, path_dst_full, &log_fd);
|
my_fs_add_list(headp, &entry_src, path_src_full, path_dst_full, &log_fd);
|
||||||
@ -1679,9 +1675,9 @@ int find_title_save_data(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const
|
|||||||
|
|
||||||
Path_Buffers_Clean( path_src_dir, path_src_full, path_dst_dir, path_dst_full );
|
Path_Buffers_Clean( path_src_dir, path_src_full, path_dst_dir, path_dst_full );
|
||||||
|
|
||||||
recursive_count--;
|
level--;
|
||||||
|
|
||||||
if( recursive_count == 0 ) {
|
if( level == 0 ) {
|
||||||
if( log_active ) {
|
if( log_active ) {
|
||||||
Log_File_Close(&log_fd);
|
Log_File_Close(&log_fd);
|
||||||
}
|
}
|
||||||
@ -1692,9 +1688,8 @@ int find_title_save_data(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const
|
|||||||
|
|
||||||
|
|
||||||
int find_copy(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src,
|
int find_copy(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src,
|
||||||
char *extension, int max_recursive_count, int *save_parent_dir_info_flag, char *log_file_name )
|
char *extension, int max_level, int *save_parent_dir_info_flag, char *log_file_name, int level )
|
||||||
{
|
{
|
||||||
static int recursive_count = 0;
|
|
||||||
static FSFile log_fd;
|
static FSFile log_fd;
|
||||||
static BOOL log_active = FALSE;
|
static BOOL log_active = FALSE;
|
||||||
// static char *log_file_name = "sdmc:/miya/nandinfo_find_copy.txt";
|
// static char *log_file_name = "sdmc:/miya/nandinfo_find_copy.txt";
|
||||||
@ -1713,16 +1708,16 @@ int find_copy(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_
|
|||||||
|
|
||||||
/* ここでSDカードがあるかどうか調べる */
|
/* ここでSDカードがあるかどうか調べる */
|
||||||
|
|
||||||
if( recursive_count == 0 ) {
|
if( level == 0 ) {
|
||||||
log_active = Log_File_Open( &log_fd, log_file_name );
|
log_active = Log_File_Open( &log_fd, log_file_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( recursive_count > max_recursive_count ) {
|
if( level > max_level ) {
|
||||||
ret_value = 0;
|
ret_value = 0;
|
||||||
goto end_process;
|
goto end_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
recursive_count++;
|
level++;
|
||||||
|
|
||||||
/* ソースディレクトリオープン */
|
/* ソースディレクトリオープン */
|
||||||
FS_InitFile(&f_src);
|
FS_InitFile(&f_src);
|
||||||
@ -1764,7 +1759,7 @@ int find_copy(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( (entry_src.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) {
|
if( (entry_src.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) {
|
||||||
find_copy( headp, path_dst_full, path_src_full , extension, max_recursive_count, &save_parent_dir_info_flag_temp , log_file_name);
|
find_copy( headp, path_dst_full, path_src_full , extension, max_level, &save_parent_dir_info_flag_temp , log_file_name, level);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* ここで拡張子比較 */
|
/* ここで拡張子比較 */
|
||||||
@ -1809,8 +1804,8 @@ int find_copy(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_
|
|||||||
|
|
||||||
Path_Buffers_Clean( path_src_dir, path_src_full, path_dst_dir, path_dst_full );
|
Path_Buffers_Clean( path_src_dir, path_src_full, path_dst_dir, path_dst_full );
|
||||||
|
|
||||||
recursive_count--;
|
level--;
|
||||||
if( recursive_count == 0 ) {
|
if( level == 0 ) {
|
||||||
if( log_active ) {
|
if( log_active ) {
|
||||||
Log_File_Close(&log_fd);
|
Log_File_Close(&log_fd);
|
||||||
}
|
}
|
||||||
@ -1820,9 +1815,8 @@ int find_copy(MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int copy_r( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src, char *log_file_name )
|
int copy_r( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src, char *log_file_name, int level )
|
||||||
{
|
{
|
||||||
static int recursive_count = 0;
|
|
||||||
static FSFile log_fd;
|
static FSFile log_fd;
|
||||||
static BOOL log_active = FALSE;
|
static BOOL log_active = FALSE;
|
||||||
// static char *log_file_name = "sdmc:/nandinfo_copy_r.txt";
|
// static char *log_file_name = "sdmc:/nandinfo_copy_r.txt";
|
||||||
@ -1838,11 +1832,11 @@ int copy_r( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_sr
|
|||||||
char *path_dst_full = NULL;
|
char *path_dst_full = NULL;
|
||||||
|
|
||||||
/* ここでSDカードがあるかどうか調べる */
|
/* ここでSDカードがあるかどうか調べる */
|
||||||
if( recursive_count == 0 ) {
|
if( level == 0 ) {
|
||||||
log_active = Log_File_Open( &log_fd, log_file_name );
|
log_active = Log_File_Open( &log_fd, log_file_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
recursive_count++;
|
level++;
|
||||||
|
|
||||||
/* ソースディレクトリオープン */
|
/* ソースディレクトリオープン */
|
||||||
FS_InitFile(&f_src);
|
FS_InitFile(&f_src);
|
||||||
@ -1886,7 +1880,7 @@ int copy_r( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_sr
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( (entry_src.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) {
|
if( (entry_src.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) {
|
||||||
copy_r( headp, path_dst_full, path_src_full, log_file_name );
|
copy_r( headp, path_dst_full, path_src_full, log_file_name, level );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my_fs_add_list(headp, &entry_src, path_src_full, path_dst_full, &log_fd);
|
my_fs_add_list(headp, &entry_src, path_src_full, path_dst_full, &log_fd);
|
||||||
@ -1912,8 +1906,8 @@ int copy_r( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_sr
|
|||||||
|
|
||||||
Path_Buffers_Clean( path_src_dir, path_src_full, path_dst_dir, path_dst_full );
|
Path_Buffers_Clean( path_src_dir, path_src_full, path_dst_dir, path_dst_full );
|
||||||
|
|
||||||
recursive_count--;
|
level--;
|
||||||
if( recursive_count == 0 ) {
|
if( level == 0 ) {
|
||||||
if( log_active ) {
|
if( log_active ) {
|
||||||
Log_File_Close(&log_fd);
|
Log_File_Close(&log_fd);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,12 +19,12 @@ extern "C" {
|
|||||||
char *my_fs_util_get_fs_result_word( FSResult res );
|
char *my_fs_util_get_fs_result_word( FSResult res );
|
||||||
|
|
||||||
int find_title_save_data(MY_DIR_ENTRY_LIST **headp, const char *path_dst,
|
int find_title_save_data(MY_DIR_ENTRY_LIST **headp, const char *path_dst,
|
||||||
const char *path_src, int *save_dir_info, char *log_file_name );
|
const char *path_src, int *save_dir_info, char *log_file_name , int level);
|
||||||
int find_copy( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src,
|
int find_copy( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src,
|
||||||
char *extension, int level, int *save_info, char *log_file_name );
|
char *extension, int max_level, int *save_info, char *log_file_name , int level);
|
||||||
int copy_r( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src, char *log_file_name );
|
int copy_r( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_src, char *log_file_name, int level );
|
||||||
int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src,
|
int get_title_id(MY_DIR_ENTRY_LIST **headp, const char *path_src,
|
||||||
int *save_parent_dir_info_flag, char *log_file_name );
|
int *save_parent_dir_info_flag, char *log_file_name, int level );
|
||||||
|
|
||||||
void PrintDirEntryListForward( MY_DIR_ENTRY_LIST *head, FSFile *log_fd );
|
void PrintDirEntryListForward( MY_DIR_ENTRY_LIST *head, FSFile *log_fd );
|
||||||
void PrintDirEntryListBackward( MY_DIR_ENTRY_LIST *head, FSFile *log_fd );
|
void PrintDirEntryListBackward( MY_DIR_ENTRY_LIST *head, FSFile *log_fd );
|
||||||
|
|||||||
27
build/tools/sctools/common/src/mydata.h
Normal file
27
build/tools/sctools/common/src/mydata.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#ifndef _MY_DATA_H_
|
||||||
|
#define _MY_DATA_H_
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
RTCDate rtc_date;
|
||||||
|
RTCTime rtc_time;
|
||||||
|
BOOL shop_record_flag;
|
||||||
|
int num_of_user_download_app;
|
||||||
|
int num_of_app_save_data;
|
||||||
|
int num_of_photo_files;
|
||||||
|
int num_of_shared2_files;
|
||||||
|
u8 movableUniqueID[ LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN ]; // 移行可能なユニークID 16byte
|
||||||
|
} MyData;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _MY_DATA_H_ */
|
||||||
119
build/tools/sctools/common/src/myfilename.c
Normal file
119
build/tools/sctools/common/src/myfilename.c
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#include <twl.h>
|
||||||
|
#include "myfilename.h"
|
||||||
|
|
||||||
|
static char path_base[256];
|
||||||
|
static char path_log[256];
|
||||||
|
static char path[256];
|
||||||
|
|
||||||
|
void MyFile_SetPathBase(const char *str)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path_base , str );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFile_AddPathBase(const char *str)
|
||||||
|
{
|
||||||
|
STD_StrCat( path_base , str );
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetUniqueIDFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_FILE_NAME_UNIQUE_ID );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetWifiParamFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_FILE_NAME_WIFI_PARAM );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetUserSettingsFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_FILE_NAME_USER_SETTINGS );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetAppSharedSaveDirName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_DIR_NAME_APP_SHARED );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetAppSharedLogFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path_log , path_base );
|
||||||
|
STD_StrCat( path_log , MY_FILE_NAME_APP_SHARED_LOG );
|
||||||
|
return path_log;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetAppSharedListFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_FILE_NAME_APP_SHARED_LIST );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetPhotoSaveDirName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_DIR_NAME_PHOTO );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
char *MyFile_GetPhotoLogFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path_log , path_base );
|
||||||
|
STD_StrCat( path_log , MY_FILE_NAME_PHOTO_LOG );
|
||||||
|
return path_log;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetPhotoListFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_FILE_NAME_PHOTO_LIST );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetAppDataSaveDirName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_DIR_NAME_TITLE );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
char *MyFile_GetAppDataLogFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path_log , path_base );
|
||||||
|
STD_StrCat( path_log , MY_FILE_NAME_TITLE_LOG );
|
||||||
|
return path_log;
|
||||||
|
}
|
||||||
|
char *MyFile_GetAppDataListFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_FILE_NAME_TITLE_LIST );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetDownloadTitleIDLogFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path_log , path_base );
|
||||||
|
STD_StrCat( path_log , MY_FILE_NAME_DOWNLOAD_TITLE_ID_LOG );
|
||||||
|
return path_log;
|
||||||
|
}
|
||||||
|
char *MyFile_GetDownloadTitleIDFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_FILE_NAME_DOWNLOAD_TITLE_ID_DATA );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MyFile_GetGlobalInformationFileName(void)
|
||||||
|
{
|
||||||
|
STD_StrCpy( path , path_base );
|
||||||
|
STD_StrCat( path , MY_FILE_NAME_ORG_DATA );
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
57
build/tools/sctools/common/src/myfilename.h
Normal file
57
build/tools/sctools/common/src/myfilename.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#ifndef _MY_FILE_NAME_H_
|
||||||
|
#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_APP_SHARED_LIST ("shared2.lst")
|
||||||
|
#define MY_FILE_NAME_APP_SHARED_LOG ("shared2.txt")
|
||||||
|
#define MY_DIR_NAME_APP_SHARED ("shared2")
|
||||||
|
|
||||||
|
#define MY_FILE_NAME_PHOTO_LIST ("photo.lst")
|
||||||
|
#define MY_FILE_NAME_PHOTO_LOG ("photolog.txt")
|
||||||
|
#define MY_DIR_NAME_PHOTO ("photo")
|
||||||
|
|
||||||
|
#define MY_FILE_NAME_TITLE_LIST ("title.lst")
|
||||||
|
#define MY_FILE_NAME_TITLE_LOG ("titlelog.txt")
|
||||||
|
#define MY_DIR_NAME_TITLE ("title")
|
||||||
|
|
||||||
|
|
||||||
|
#define MY_FILE_NAME_DOWNLOAD_TITLE_ID_DATA ("title_id.dat")
|
||||||
|
#define MY_FILE_NAME_DOWNLOAD_TITLE_ID_LOG ("title_id.txt" )
|
||||||
|
#define MY_DIR_NAME_DOWNLOAD_TITLE_ID ("title")
|
||||||
|
|
||||||
|
#define MY_FILE_NAME_ORG_DATA ("global.dat")
|
||||||
|
#define MY_FILE_NAME_ORG_LOG ("global.txt");
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void MyFile_SetPathBase(const char *str);
|
||||||
|
void MyFile_AddPathBase(const char *str);
|
||||||
|
char *MyFile_GetUniqueIDFileName(void);
|
||||||
|
char *MyFile_GetWifiParamFileName(void);
|
||||||
|
char *MyFile_GetUserSettingsFileName(void);
|
||||||
|
char *MyFile_GetAppSharedSaveDirName(void);
|
||||||
|
char *MyFile_GetAppSharedLogFileName(void);
|
||||||
|
char *MyFile_GetAppSharedListFileName(void);
|
||||||
|
char *MyFile_GetPhotoListFileName(void);
|
||||||
|
char *MyFile_GetPhotoSaveDirName(void);
|
||||||
|
char *MyFile_GetPhotoLogFileName(void);
|
||||||
|
char *MyFile_GetAppDataSaveDirName(void);
|
||||||
|
char *MyFile_GetAppDataLogFileName(void);
|
||||||
|
char *MyFile_GetAppDataListFileName(void);
|
||||||
|
char *MyFile_GetDownloadTitleIDLogFileName(void);
|
||||||
|
char *MyFile_GetDownloadTitleIDFileName(void);
|
||||||
|
char *MyFile_GetGlobalInformationFileName(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _MY_FILE_NAME_H_ */
|
||||||
@ -26,7 +26,7 @@ SRCS = main.c key.c font.c text.c mprintf.c logprintf.c \
|
|||||||
gfx.c hwi.c mynvram.c my_fs_util.c \
|
gfx.c hwi.c mynvram.c my_fs_util.c \
|
||||||
kpsc.cpp ecdl.cpp hatamotolib.cpp \
|
kpsc.cpp ecdl.cpp hatamotolib.cpp \
|
||||||
sitedefs.c wcm_control.c netconnect.c mywlan.c \
|
sitedefs.c wcm_control.c netconnect.c mywlan.c \
|
||||||
nuc.c nuc_error_msg.c stream.c
|
nuc.c nuc_error_msg.c stream.c myfilename.c
|
||||||
|
|
||||||
TARGET_BIN = copy_dst.srl
|
TARGET_BIN = copy_dst.srl
|
||||||
ROM_SPEC = copy_dst.rsf
|
ROM_SPEC = copy_dst.rsf
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Project: TWLSDK - demos - MI - ndma-1
|
Project:
|
||||||
File: main.c
|
File: main.c
|
||||||
|
|
||||||
Copyright 2007 Nintendo. All rights reserved.
|
Copyright 2007 Nintendo. All rights reserved.
|
||||||
@ -26,21 +26,15 @@
|
|||||||
#include "key.h"
|
#include "key.h"
|
||||||
#include "my_fs_util.h"
|
#include "my_fs_util.h"
|
||||||
#include "mynvram.h"
|
#include "mynvram.h"
|
||||||
|
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
|
|
||||||
#include "hwi.h"
|
#include "hwi.h"
|
||||||
|
|
||||||
#include "hatamotolib.h"
|
#include "hatamotolib.h"
|
||||||
#include "ecdl.h"
|
#include "ecdl.h"
|
||||||
|
|
||||||
#include "mywlan.h"
|
#include "mywlan.h"
|
||||||
|
#include "mydata.h"
|
||||||
|
#include "nuc.h"
|
||||||
|
|
||||||
#include "nuc.h"
|
#include "myfilename.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//#define DEBUG_PRINT 1
|
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
@ -62,18 +56,316 @@ static void SDEvents(void *userdata, FSEvent event, void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
RTCDate rtc_date;
|
|
||||||
RTCTime rtc_time;
|
|
||||||
BOOL shop_record_flag;
|
|
||||||
u8 movableUniqueID[ LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN ]; // 移行可能なユニークID 16byte
|
|
||||||
} MyData;
|
|
||||||
|
|
||||||
static MyData mydata;
|
static MyData mydata;
|
||||||
|
|
||||||
static int vram_num_main = 1;
|
static int vram_num_main = 1;
|
||||||
static int vram_num_sub = 0;
|
static int vram_num_sub = 0;
|
||||||
|
|
||||||
|
|
||||||
|
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 void init_my_thread(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
OS_InitMessageQueue(&MyMesgQueue, &MyMesgBuffer[0], 1);
|
||||||
|
|
||||||
|
OS_CreateThread(&MyThread, MyThreadProc,
|
||||||
|
NULL, MyStack + MY_STACK_SIZE / sizeof(u64),
|
||||||
|
MY_STACK_SIZE, MY_THREAD_PRIO);
|
||||||
|
OS_WakeupThreadDirect(&MyThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void start_my_thread(void)
|
||||||
|
{
|
||||||
|
(void)OS_SendMessage(&MyMesgQueue, (OSMessage)0, OS_MESSAGE_NOBLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void RestoreFromSDCard(void)
|
||||||
|
{
|
||||||
|
/* ユーザーデータ書き込みモード */
|
||||||
|
if( TRUE == LoadWlanConfigFile("sdmc:/wlan_cfg.txt") ) {
|
||||||
|
OS_TPrintf("SSID = %s\n", GetWlanSSID());
|
||||||
|
OS_TPrintf("MODE = ");
|
||||||
|
switch( GetWlanMode() ) {
|
||||||
|
case 1:
|
||||||
|
OS_TPrintf("OPEN\n");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
OS_TPrintf("WEP128\n");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
OS_TPrintf("WPA-TKIP\n");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
OS_TPrintf("WPA2-TKIP\n");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
OS_TPrintf("WPA-AES\n");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
OS_TPrintf("WPA2-AES\n");
|
||||||
|
break;
|
||||||
|
defalut:
|
||||||
|
OS_TPrintf("Unknow mode..\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
OS_TPrintf("KEY STR = %s\n", GetWlanKEYSTR());
|
||||||
|
{
|
||||||
|
u8 buf[256];
|
||||||
|
int len;
|
||||||
|
int i;
|
||||||
|
len = GetWlanKEYBIN(buf);
|
||||||
|
if( len ) {
|
||||||
|
OS_TPrintf("KEY BIN = 0x");
|
||||||
|
for( i = 0 ; i < len ; i++ ) {
|
||||||
|
OS_TPrintf("%02X",buf[i]);
|
||||||
|
}
|
||||||
|
OS_TPrintf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
OS_TPrintf("Invalid wlan cfg file\n");
|
||||||
|
}
|
||||||
|
nuc_main();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void BackupToSDCard(void)
|
||||||
|
{
|
||||||
|
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
||||||
|
RTCDate rtc_date;
|
||||||
|
RTCTime rtc_time;
|
||||||
|
int save_dir_info = 0;
|
||||||
|
u64 *pBuffer;
|
||||||
|
int count;
|
||||||
|
int j;
|
||||||
|
u64 *ptr;
|
||||||
|
|
||||||
|
|
||||||
|
//miya mprintf("BACKUP to SD Card\n");
|
||||||
|
/************************************/
|
||||||
|
MyFile_SetPathBase("sdmc:/");
|
||||||
|
MyFile_AddPathBase((const char *)hws_info.serialNo );
|
||||||
|
MyFile_AddPathBase("/");
|
||||||
|
|
||||||
|
|
||||||
|
/* nand:/sysディレクトリまわりの保存 */
|
||||||
|
mprintf("Unique ID backup ");
|
||||||
|
if( TRUE == MiyaBackupHWNormalInfo( MyFile_GetUniqueIDFileName() ) ) {
|
||||||
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
}
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
|
||||||
|
|
||||||
|
/* Wifi設定の保存 */
|
||||||
|
mprintf("WirelessLAN param. backup ");
|
||||||
|
if( TRUE == nvram_backup( MyFile_GetWifiParamFileName() ) ) {
|
||||||
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
}
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
|
||||||
|
/* nand:/shared1ディレクトリまわりの保存 */
|
||||||
|
mprintf("User setting param. backup ");
|
||||||
|
if( TRUE == MiyaBackupTWLSettings( MyFile_GetUserSettingsFileName() ) ) {
|
||||||
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
}
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
nand:/shared2ディレクトリまわりの保存
|
||||||
|
内容はアプリケーション共有ファイル
|
||||||
|
nand:/shared2/*
|
||||||
|
*/
|
||||||
|
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 );
|
||||||
|
mydata.num_of_shared2_files = SaveDirEntryList( dir_entry_list_head, MyFile_GetAppSharedListFileName() );
|
||||||
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
}
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
(void)ClearDirEntryList( &dir_entry_list_head );
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
nand2:/photoディレクトリまわりの保存
|
||||||
|
内容は写真長のJPEGファイル
|
||||||
|
nand2:/photo/*.*
|
||||||
|
*/
|
||||||
|
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 );
|
||||||
|
mydata.num_of_photo_files = SaveDirEntryList( dir_entry_list_head, MyFile_GetPhotoListFileName() );
|
||||||
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
}
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
(void)ClearDirEntryList( &dir_entry_list_head );
|
||||||
|
|
||||||
|
|
||||||
|
/* nand:/ticketはチケット同期?でうまいこと合わせてくれるんでバックアップ不要 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
nand:/titleディレクトリまわりの保存
|
||||||
|
nand:/title/*.savファイルをすべてバックアップ
|
||||||
|
*/
|
||||||
|
|
||||||
|
mprintf("App. save data backup ");
|
||||||
|
if( 0 == find_title_save_data( &dir_entry_list_head, MyFile_GetAppDataSaveDirName(), "nand:/title",
|
||||||
|
&save_dir_info, MyFile_GetAppDataLogFileName(), 0 ) )
|
||||||
|
{
|
||||||
|
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
||||||
|
mydata.num_of_app_save_data = SaveDirEntryList( dir_entry_list_head , MyFile_GetAppDataListFileName() );
|
||||||
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
}
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
(void)ClearDirEntryList( &dir_entry_list_head );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* タイトルリストの生成 */
|
||||||
|
/*
|
||||||
|
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 は ランチャー
|
||||||
|
nand:/title/00030015/484e4641 は shop
|
||||||
|
nand:/title/00030015/484e4241 は 本体設定
|
||||||
|
|
||||||
|
|
||||||
|
No. 0 0003000f484e4c41
|
||||||
|
No. 1 0003000f484e4841
|
||||||
|
No. 2 0003000f484e4341
|
||||||
|
No. 3 00030015484e4241
|
||||||
|
No. 4 00030017484e4141 launcher
|
||||||
|
^
|
||||||
|
| ここの最下位ビットが1のやつがシステムアプリ
|
||||||
|
|
|
||||||
|
システムアプリはダウンロード対象外
|
||||||
|
*/
|
||||||
|
// STD_StrCpy( path , path_base );
|
||||||
|
// STD_StrCat( path , MY_FILE_NAME_DOWNLOAD_TITLE_ID_DATA );
|
||||||
|
if( 0 == get_title_id( &dir_entry_list_head, "nand:/title", &save_dir_info, MyFile_GetDownloadTitleIDLogFileName(), 0 ) ) {
|
||||||
|
mprintf("get_title_id completed.\n");
|
||||||
|
OS_TPrintf("get_title_id completed.\n");
|
||||||
|
|
||||||
|
GetDirEntryList( dir_entry_list_head, &pBuffer, &count);
|
||||||
|
OS_TPrintf("count = %d\n", count );
|
||||||
|
ptr = pBuffer;
|
||||||
|
mydata.num_of_user_download_app = count;
|
||||||
|
|
||||||
|
if( ptr != NULL && count != 0 ) {
|
||||||
|
for( j = 0 ; j < count ; j++ ) {
|
||||||
|
OS_TPrintf("No. %d ",j);
|
||||||
|
mfprintf(tc[2],"No. %d ",j);
|
||||||
|
|
||||||
|
OS_TPrintf("%llx\n", *ptr);
|
||||||
|
mfprintf(tc[2],"%llx\n", *ptr);
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
OS_Free(pBuffer);
|
||||||
|
}
|
||||||
|
// (void)TitleIDSave( MyFile_GetDownloadTitleIDFileName(), u64 *pData, count, NULL);
|
||||||
|
PrintSrcDirEntryListBackward( dir_entry_list_head, NULL );
|
||||||
|
}
|
||||||
|
(void)ClearDirEntryList( &dir_entry_list_head );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* オリジナルのデータのバックアップ */
|
||||||
|
if( TRUE == CheckShopRecord(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");
|
||||||
|
}
|
||||||
|
if( RTC_RESULT_SUCCESS != RTC_GetTime( &rtc_time ) ) {
|
||||||
|
mprintf("rtc read time error.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
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("org. data backup ");
|
||||||
|
if( TRUE == MydataSave( MyFile_GetGlobalInformationFileName(), (void *)&mydata, sizeof(MyData), NULL) ) {
|
||||||
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
}
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MyThreadProc(void *arg)
|
||||||
|
{
|
||||||
|
#pragma unused(arg)
|
||||||
|
OSMessage message;
|
||||||
|
while( 1 ) {
|
||||||
|
(void)OS_ReceiveMessage(&MyMesgQueue, &message, OS_MESSAGE_BLOCK);
|
||||||
|
//RestoreFromSDCard();
|
||||||
|
BackupToSDCard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TwlMain(void)
|
void TwlMain(void)
|
||||||
{
|
{
|
||||||
void* newArenaLo;
|
void* newArenaLo;
|
||||||
@ -84,13 +376,10 @@ void TwlMain(void)
|
|||||||
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
||||||
RTCDate rtc_date;
|
RTCDate rtc_date;
|
||||||
RTCTime rtc_time;
|
RTCTime rtc_time;
|
||||||
LCFGTWLHWNormalInfo hwn_info;
|
// LCFGTWLHWNormalInfo hwn_info;
|
||||||
LCFGTWLHWSecureInfo hws_info;
|
// LCFGTWLHWSecureInfo hws_info;
|
||||||
int i;
|
int i;
|
||||||
int n;
|
int n;
|
||||||
char path_base[256];
|
|
||||||
char path_log[256];
|
|
||||||
char path[256];
|
|
||||||
u8 macAddress[6];
|
u8 macAddress[6];
|
||||||
|
|
||||||
OS_Init();
|
OS_Init();
|
||||||
@ -106,9 +395,34 @@ void TwlMain(void)
|
|||||||
// IRQ 割り込みを許可します
|
// IRQ 割り込みを許可します
|
||||||
(void)OS_EnableInterrupts();
|
(void)OS_EnableInterrupts();
|
||||||
|
|
||||||
|
// ARM7との通信FIFO割り込み許可
|
||||||
|
(void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV);
|
||||||
|
|
||||||
|
// ファイルシステム初期化
|
||||||
|
FS_Init( FS_DMA_NOT_USE );
|
||||||
|
|
||||||
|
|
||||||
|
// メインアリーナのアロケートシステムを初期化
|
||||||
|
newArenaLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1);
|
||||||
|
OS_SetMainArenaLo(newArenaLo);
|
||||||
|
|
||||||
|
// メインアリーナ上にヒープを作成
|
||||||
|
hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi());
|
||||||
|
OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap);
|
||||||
|
|
||||||
Gfx_Init();
|
Gfx_Init();
|
||||||
|
|
||||||
|
RTC_Init();
|
||||||
|
|
||||||
|
SCFG_Init();
|
||||||
|
|
||||||
|
NVRAMi_Init();
|
||||||
|
|
||||||
|
SND_Init();
|
||||||
|
stream_main();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
0 -> black
|
0 -> black
|
||||||
1 -> red
|
1 -> red
|
||||||
@ -131,29 +445,6 @@ void TwlMain(void)
|
|||||||
// m_set_palette(tc[0], 0xF);
|
// m_set_palette(tc[0], 0xF);
|
||||||
|
|
||||||
|
|
||||||
// ARM7との通信FIFO割り込み許可
|
|
||||||
(void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV);
|
|
||||||
|
|
||||||
// ファイルシステム初期化
|
|
||||||
FS_Init( FS_DMA_NOT_USE );
|
|
||||||
|
|
||||||
|
|
||||||
// メインアリーナのアロケートシステムを初期化
|
|
||||||
newArenaLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1);
|
|
||||||
OS_SetMainArenaLo(newArenaLo);
|
|
||||||
|
|
||||||
// メインアリーナ上にヒープを作成
|
|
||||||
hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi());
|
|
||||||
OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap);
|
|
||||||
|
|
||||||
RTC_Init();
|
|
||||||
|
|
||||||
SCFG_Init();
|
|
||||||
|
|
||||||
NVRAMi_Init();
|
|
||||||
|
|
||||||
SND_Init();
|
|
||||||
stream_main();
|
|
||||||
|
|
||||||
// 必須;SEA の初期化
|
// 必須;SEA の初期化
|
||||||
SEA_Init();
|
SEA_Init();
|
||||||
@ -165,12 +456,25 @@ void TwlMain(void)
|
|||||||
ES_InitLib();
|
ES_InitLib();
|
||||||
|
|
||||||
|
|
||||||
|
if( RTC_RESULT_SUCCESS != RTC_GetDate( &rtc_date ) ) {
|
||||||
|
mprintf("rtc read date error.\n");
|
||||||
|
}
|
||||||
|
if( RTC_RESULT_SUCCESS != RTC_GetTime( &rtc_time ) ) {
|
||||||
|
mprintf("rtc read time error.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// mprintf("HW Normal Info. read ");
|
||||||
|
mprintf("Unique ID read ");
|
||||||
if( FALSE == MiyaReadHWNormalInfo( &hwn_info ) ) {
|
if( FALSE == MiyaReadHWNormalInfo( &hwn_info ) ) {
|
||||||
mprintf("HW Normal Info. read error\n");
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
m_set_palette(tc[0], 0xF);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mprintf("HW Normal Info. read succeeded.\n");
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
mprintf("UniqueID\n 0x");
|
mprintf("OK.\n");
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
mprintf(" 0x");
|
||||||
for( i = 0; i < LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN/2 ; i++ ) {
|
for( i = 0; i < LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN/2 ; i++ ) {
|
||||||
mprintf("%02X:", hwn_info.movableUniqueID[i]);
|
mprintf("%02X:", hwn_info.movableUniqueID[i]);
|
||||||
}
|
}
|
||||||
@ -181,70 +485,53 @@ void TwlMain(void)
|
|||||||
mprintf("\n");
|
mprintf("\n");
|
||||||
// mprintf(" RTC Adjust data = 0x%02x\n", hwn_info.rtcAdjust );
|
// mprintf(" RTC Adjust data = 0x%02x\n", hwn_info.rtcAdjust );
|
||||||
}
|
}
|
||||||
|
|
||||||
mprintf("\n");
|
mprintf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
// mprintf("HW Secure Info. read ");
|
||||||
|
mprintf("Serial No. read ");
|
||||||
if( FALSE == MiyaReadHWSecureInfo( &hws_info ) ) {
|
if( FALSE == MiyaReadHWSecureInfo( &hws_info ) ) {
|
||||||
mprintf("HW Secure Info. - read failed\n");
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mprintf("HW Secure Info. - read succeeded.\n");
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
mprintf(" Serial No.\n 0x");
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
for( i = 0; i < LCFG_TWL_HWINFO_SERIALNO_LEN_MAX/2 ; i++ ) {
|
mprintf(" %s\n\n", hws_info.serialNo);
|
||||||
mprintf("%02X:", hws_info.serialNo[i]);
|
|
||||||
}
|
|
||||||
mprintf("\n 0x");
|
|
||||||
for( ; i < LCFG_TWL_HWINFO_SERIALNO_LEN_MAX ; i++ ) {
|
|
||||||
if( hws_info.serialNo[i] ) {
|
|
||||||
mprintf("%02X:", hws_info.serialNo[i]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// #define LCFG_TWL_HWINFO_SERIALNO_LEN_MAX 15 // 本体シリアルNo.長Max(終端付きなので、14bytesまで拡張
|
|
||||||
// 終端をみつけたらブレーク
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mprintf("\n");
|
|
||||||
mprintf("%s\n", hws_info.serialNo);
|
|
||||||
|
|
||||||
mprintf(" validLang.bmp = 0x%08x\n", hws_info.validLanguageBitmap );
|
|
||||||
mprintf(" wifi disable flag = %d\n", hws_info.flags.forceDisableWireless );
|
|
||||||
mprintf(" lchr-TitleIDLo = " );
|
|
||||||
for( i = 0 ; i < 4 ; i++ ) {
|
|
||||||
mprintf("%02X:", hws_info.launcherTitleID_Lo[i]);
|
|
||||||
}
|
|
||||||
mprintf("\n Region data = 0x%02x\n\n", hws_info.region );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
OS_GetMacAddress( macAddress );
|
OS_GetMacAddress( macAddress );
|
||||||
mprintf("macAddress ");
|
mprintf("MAC Address 0x");
|
||||||
for ( i = 0 ; i < 6 ; i++ ) {
|
for ( i = 0 ; i < 6 ; i++ ) {
|
||||||
mprintf("%02X:", macAddress[i]);
|
mprintf("%02X", macAddress[i]);
|
||||||
}
|
}
|
||||||
mprintf("\n");
|
mprintf("\n\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if( FALSE == SDCardValidation() ) {
|
if( FALSE == SDCardValidation() ) {
|
||||||
sd_card_flag = FALSE;
|
sd_card_flag = FALSE;
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
mprintf("No SD Card\n");
|
mprintf("No SD Card\n");
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sd_card_flag = TRUE;
|
sd_card_flag = TRUE;
|
||||||
mprintf("Detect SD Card\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// miya あとで消す。
|
||||||
|
// sd_card_flag = FALSE;
|
||||||
|
|
||||||
|
|
||||||
FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL);
|
FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL);
|
||||||
|
|
||||||
|
init_my_thread();
|
||||||
|
|
||||||
STD_StrCpy( path_base , "sdmc:/" );
|
if( sd_card_flag == TRUE ) {
|
||||||
STD_StrCat( path_base , (const char *)hws_info.serialNo );
|
start_my_thread();
|
||||||
STD_StrCat( path_base , "/" );
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
while( 1 ) {
|
while( 1 ) {
|
||||||
@ -261,238 +548,30 @@ void TwlMain(void)
|
|||||||
// コマンドフラッシュ(フラッシュして即座に実行を要求)
|
// コマンドフラッシュ(フラッシュして即座に実行を要求)
|
||||||
(void)SND_FlushCommand(SND_COMMAND_NOBLOCK | SND_COMMAND_IMMEDIATE);
|
(void)SND_FlushCommand(SND_COMMAND_NOBLOCK | SND_COMMAND_IMMEDIATE);
|
||||||
|
|
||||||
|
|
||||||
if ( keyData & PAD_BUTTON_R ) {
|
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 ) {
|
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 ) {
|
else if ( keyData & PAD_BUTTON_A ) {
|
||||||
/* ユーザーデータ吸出しモード */
|
/* ユーザーデータ吸出しモード */
|
||||||
if( sd_card_flag == TRUE ) {
|
if( sd_card_flag == TRUE ) {
|
||||||
|
start_my_thread();
|
||||||
mprintf("BACKUP to SD Card\n");
|
|
||||||
/************************************/
|
|
||||||
|
|
||||||
/* ショップの履歴確認 */
|
|
||||||
if( TRUE == CheckShopRecord(NULL) ) {
|
|
||||||
mydata.shop_record_flag = TRUE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mydata.shop_record_flag = FALSE;
|
|
||||||
mprintf("no shop record\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* 日時の保存 */
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "twl_rtc.dat" );
|
|
||||||
if( RTC_RESULT_SUCCESS != RTC_GetDate( &rtc_date ) ) {
|
|
||||||
mprintf("rtc read date error.\n");
|
|
||||||
}
|
|
||||||
if( RTC_RESULT_SUCCESS != RTC_GetTime( &rtc_time ) ) {
|
|
||||||
mprintf("rtc read time error.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
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 );
|
|
||||||
if( TRUE == MydataSave(path, (void *)&mydata, sizeof(MyData), NULL) ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* nand:/sysディレクトリまわりの保存 */
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "twl_ninfo.dat" );
|
|
||||||
if( TRUE == MiyaBackupHWNormalInfo( path ) ) {
|
|
||||||
mprintf("HWInfo Normal backup completed.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Wifi設定の保存 */
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "twl_nor.bin" );
|
|
||||||
if( TRUE == nvram_backup( path ) ) {
|
|
||||||
mprintf("nvram backup completed.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* nand:/shared1ディレクトリまわりの保存 */
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "twl_cfg.dat" );
|
|
||||||
if( TRUE == MiyaBackupTWLSettings( path ) ) {
|
|
||||||
mprintf("TWL CFG backup completed.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* nand:/shared2ディレクトリまわりの保存 */
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "shared2" );
|
|
||||||
STD_StrCpy( path_log , path_base );
|
|
||||||
STD_StrCat( path_log , "shared2.txt" );
|
|
||||||
|
|
||||||
if( 0 == copy_r( &dir_entry_list_head, path, "nand:/shared2" , path_log ) ) {
|
|
||||||
mprintf("copy_r shared2 completed.\n");
|
|
||||||
PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "shared2.lst" );
|
|
||||||
SaveDirEntryList( dir_entry_list_head, path );
|
|
||||||
}
|
|
||||||
(void)ClearDirEntryList( &dir_entry_list_head );
|
|
||||||
|
|
||||||
|
|
||||||
/* nand2:/photoディレクトリまわりの保存 */
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "photo" );
|
|
||||||
STD_StrCpy( path_log , path_base );
|
|
||||||
STD_StrCat( path_log , "photolog.txt" );
|
|
||||||
|
|
||||||
if( 0 == copy_r( &dir_entry_list_head, path , "nand2:/photo" , path_log ) ) {
|
|
||||||
mprintf("copy_r photo completed.\n");
|
|
||||||
PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "photo.lst" );
|
|
||||||
SaveDirEntryList( dir_entry_list_head, path );
|
|
||||||
}
|
|
||||||
(void)ClearDirEntryList( &dir_entry_list_head );
|
|
||||||
|
|
||||||
/* nand:/ticketはチケット同期?でうまいこと合わせてくれるんでバックアップ不要 */
|
|
||||||
|
|
||||||
/* nand:/titleディレクトリまわりの保存 */
|
|
||||||
/* **.savファイルをすべてバックアップ */
|
|
||||||
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "title" );
|
|
||||||
STD_StrCpy( path_log , path_base );
|
|
||||||
STD_StrCat( path_log , "titlelog.txt" );
|
|
||||||
|
|
||||||
if( 0 == find_title_save_data( &dir_entry_list_head, path , "nand:/title", &save_dir_info, path_log ) ) {
|
|
||||||
mprintf("find_title_save_data completed.\n");
|
|
||||||
PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "title.lst" );
|
|
||||||
|
|
||||||
SaveDirEntryList( dir_entry_list_head , path );
|
|
||||||
}
|
|
||||||
(void)ClearDirEntryList( &dir_entry_list_head );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* タイトルリストの生成 */
|
|
||||||
/*
|
|
||||||
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 は ランチャー
|
|
||||||
nand:/title/00030015/484e4641 は shop
|
|
||||||
nand:/title/00030015/484e4241 は 本体設定
|
|
||||||
|
|
||||||
|
|
||||||
No. 0 0003000f484e4c41
|
|
||||||
No. 1 0003000f484e4841
|
|
||||||
No. 2 0003000f484e4341
|
|
||||||
No. 3 00030015484e4241
|
|
||||||
No. 4 00030017484e4141 launcher
|
|
||||||
^
|
|
||||||
| ここの最下位ビットが1のやつがシステムアプリ
|
|
||||||
|
|
|
||||||
システムアプリはダウンロード対象外
|
|
||||||
*/
|
|
||||||
|
|
||||||
STD_StrCpy( path_log , path_base );
|
|
||||||
STD_StrCat( path_log , "title2log.txt" );
|
|
||||||
if( 0 == get_title_id( &dir_entry_list_head, "nand:/title", &save_dir_info, path_log ) ) {
|
|
||||||
mprintf("get_title_id completed.\n");
|
|
||||||
|
|
||||||
// STD_StrCpy( path , path_base );
|
|
||||||
// STD_StrCat( path , "titlelist.txt" );
|
|
||||||
{
|
|
||||||
void *pBuffer;
|
|
||||||
int count;
|
|
||||||
int i,j;
|
|
||||||
char *ptr;
|
|
||||||
#if 0
|
|
||||||
GetDirEntryList( dir_entry_list_head, &pBuffer, &count);
|
|
||||||
OS_TPrintf("count = %d\n", count );
|
|
||||||
ptr = (char *)pBuffer;
|
|
||||||
|
|
||||||
if( ptr != NULL && count != 0 ) {
|
|
||||||
for( j = 0 ; j < count ; j++ ) {
|
|
||||||
OS_TPrintf("No. %d ",j);
|
|
||||||
for( i = 0 ; i < 16 ; i++ ) {
|
|
||||||
OS_TPrintf("%c", *ptr);
|
|
||||||
ptr++;
|
|
||||||
}
|
|
||||||
OS_TPrintf("\n");
|
|
||||||
}
|
|
||||||
OS_Free(pBuffer);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PrintSrcDirEntryListBackward( dir_entry_list_head, NULL );
|
|
||||||
}
|
|
||||||
(void)ClearDirEntryList( &dir_entry_list_head );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mprintf("insert SD card\n");
|
mprintf("insert SD card\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( keyData & PAD_BUTTON_B ) {
|
else if ( keyData & PAD_BUTTON_B ) {
|
||||||
/* ユーザーデータ書き込みモード */
|
|
||||||
if( TRUE == LoadWlanConfigFile("sdmc:/wlan_cfg.txt") ) {
|
|
||||||
OS_TPrintf("SSID = %s\n", GetWlanSSID());
|
|
||||||
OS_TPrintf("MODE = ");
|
|
||||||
switch( GetWlanMode() ) {
|
|
||||||
case 1:
|
|
||||||
OS_TPrintf("OPEN\n");
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
OS_TPrintf("WEP128\n");
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
OS_TPrintf("WPA-TKIP\n");
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
OS_TPrintf("WPA2-TKIP\n");
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
OS_TPrintf("WPA-AES\n");
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
OS_TPrintf("WPA2-AES\n");
|
|
||||||
break;
|
|
||||||
defalut:
|
|
||||||
OS_TPrintf("Unknow mode..\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
OS_TPrintf("KEY STR = %s\n", GetWlanKEYSTR());
|
|
||||||
{
|
|
||||||
u8 buf[256];
|
|
||||||
int len;
|
|
||||||
int i;
|
|
||||||
len = GetWlanKEYBIN(buf);
|
|
||||||
if( len ) {
|
|
||||||
OS_TPrintf("KEY BIN = 0x");
|
|
||||||
for( i = 0 ; i < len ; i++ ) {
|
|
||||||
OS_TPrintf("%02X",buf[i]);
|
|
||||||
}
|
|
||||||
OS_TPrintf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
OS_TPrintf("Invalid wlan cfg file\n");
|
|
||||||
}
|
|
||||||
nuc_main();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if ( keyData & PAD_BUTTON_START ) {
|
else if ( keyData & PAD_BUTTON_START ) {
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ SRCS = main.c key.c font.c text.c mprintf.c logprintf.c \
|
|||||||
gfx.c hwi.c mynvram.c my_fs_util.c \
|
gfx.c hwi.c mynvram.c my_fs_util.c \
|
||||||
kpsc.cpp ecdl.cpp hatamotolib.cpp \
|
kpsc.cpp ecdl.cpp hatamotolib.cpp \
|
||||||
sitedefs.c wcm_control.c netconnect.c mywlan.c \
|
sitedefs.c wcm_control.c netconnect.c mywlan.c \
|
||||||
nuc.c nuc_error_msg.c stream.c
|
nuc.c nuc_error_msg.c stream.c myfilename.c
|
||||||
|
|
||||||
TARGET_BIN = copy_org.srl
|
TARGET_BIN = copy_org.srl
|
||||||
ROM_SPEC = copy_org.rsf
|
ROM_SPEC = copy_org.rsf
|
||||||
|
|||||||
@ -31,8 +31,11 @@
|
|||||||
#include "hatamotolib.h"
|
#include "hatamotolib.h"
|
||||||
#include "ecdl.h"
|
#include "ecdl.h"
|
||||||
#include "mywlan.h"
|
#include "mywlan.h"
|
||||||
|
#include "mydata.h"
|
||||||
#include "nuc.h"
|
#include "nuc.h"
|
||||||
|
|
||||||
|
#include "myfilename.h"
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
static FSEventHook sSDHook;
|
static FSEventHook sSDHook;
|
||||||
@ -53,25 +56,17 @@ static void SDEvents(void *userdata, FSEvent event, void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
RTCDate rtc_date;
|
|
||||||
RTCTime rtc_time;
|
|
||||||
BOOL shop_record_flag;
|
|
||||||
int num_of_user_download_app;
|
|
||||||
int num_of_app_save_data;
|
|
||||||
int num_of_photo_files;
|
|
||||||
int num_of_shared2_files;
|
|
||||||
u8 movableUniqueID[ LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN ]; // 移行可能なユニークID 16byte
|
|
||||||
} MyData;
|
|
||||||
|
|
||||||
static MyData mydata;
|
static MyData mydata;
|
||||||
|
|
||||||
static int vram_num_main = 1;
|
static int vram_num_main = 1;
|
||||||
static int vram_num_sub = 0;
|
static int vram_num_sub = 0;
|
||||||
|
|
||||||
|
#if 0
|
||||||
static char path_base[256];
|
static char path_base[256];
|
||||||
static char path_log[256];
|
static char path_log[256];
|
||||||
static char path[256];
|
static char path[256];
|
||||||
|
#endif
|
||||||
static LCFGTWLHWNormalInfo hwn_info;
|
static LCFGTWLHWNormalInfo hwn_info;
|
||||||
static LCFGTWLHWSecureInfo hws_info;
|
static LCFGTWLHWSecureInfo hws_info;
|
||||||
|
|
||||||
@ -104,32 +99,12 @@ static void start_my_thread(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void BackupToSDCard(void)
|
|
||||||
|
static BOOL SDBackupToSDCard1(void)
|
||||||
{
|
{
|
||||||
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
|
||||||
RTCDate rtc_date;
|
|
||||||
RTCTime rtc_time;
|
|
||||||
int save_dir_info = 0;
|
|
||||||
u64 *pBuffer;
|
|
||||||
int count;
|
|
||||||
int j;
|
|
||||||
u64 *ptr;
|
|
||||||
|
|
||||||
|
|
||||||
//miya mprintf("BACKUP to SD Card\n");
|
|
||||||
/************************************/
|
|
||||||
STD_StrCpy( path_base , "sdmc:/" );
|
|
||||||
STD_StrCat( path_base , (const char *)hws_info.serialNo );
|
|
||||||
STD_StrCat( path_base , "/" );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* nand:/sysディレクトリまわりの保存 */
|
/* nand:/sysディレクトリまわりの保存 */
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "twl_ninfo.dat" );
|
|
||||||
// mprintf("HWInfo Normal backup ");
|
|
||||||
mprintf("Unique ID backup ");
|
mprintf("Unique ID backup ");
|
||||||
if( TRUE == MiyaBackupHWNormalInfo( path ) ) {
|
if( TRUE == MiyaBackupHWNormalInfo( MyFile_GetUniqueIDFileName() ) ) {
|
||||||
m_set_palette(tc[0], 0x2); /* green */
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
mprintf("OK.\n");
|
mprintf("OK.\n");
|
||||||
}
|
}
|
||||||
@ -138,13 +113,15 @@ static void BackupToSDCard(void)
|
|||||||
mprintf("NG.\n");
|
mprintf("NG.\n");
|
||||||
}
|
}
|
||||||
m_set_palette(tc[0], 0xF); /* white */
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static BOOL SDBackupToSDCard2(void)
|
||||||
|
{
|
||||||
/* Wifi設定の保存 */
|
/* Wifi設定の保存 */
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "twl_nor.bin" );
|
|
||||||
mprintf("WirelessLAN param. backup ");
|
mprintf("WirelessLAN param. backup ");
|
||||||
if( TRUE == nvram_backup( path ) ) {
|
if( TRUE == nvram_backup( MyFile_GetWifiParamFileName() ) ) {
|
||||||
m_set_palette(tc[0], 0x2); /* green */
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
mprintf("OK.\n");
|
mprintf("OK.\n");
|
||||||
}
|
}
|
||||||
@ -153,13 +130,15 @@ static void BackupToSDCard(void)
|
|||||||
mprintf("NG.\n");
|
mprintf("NG.\n");
|
||||||
}
|
}
|
||||||
m_set_palette(tc[0], 0xF); /* white */
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL SDBackupToSDCard3(void)
|
||||||
|
{
|
||||||
|
|
||||||
/* nand:/shared1ディレクトリまわりの保存 */
|
/* nand:/shared1ディレクトリまわりの保存 */
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "twl_cfg.dat" );
|
|
||||||
//mprintf("TWL CFG backup ");
|
|
||||||
mprintf("User setting param. backup ");
|
mprintf("User setting param. backup ");
|
||||||
if( TRUE == MiyaBackupTWLSettings( path ) ) {
|
if( TRUE == MiyaBackupTWLSettings( MyFile_GetUserSettingsFileName() ) ) {
|
||||||
m_set_palette(tc[0], 0x2); /* green */
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
mprintf("OK.\n");
|
mprintf("OK.\n");
|
||||||
}
|
}
|
||||||
@ -168,24 +147,23 @@ static void BackupToSDCard(void)
|
|||||||
mprintf("NG.\n");
|
mprintf("NG.\n");
|
||||||
}
|
}
|
||||||
m_set_palette(tc[0], 0xF); /* white */
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL SDBackupToSDCard4(void)
|
||||||
|
{
|
||||||
|
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
||||||
|
int save_dir_info = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
nand:/shared2ディレクトリまわりの保存
|
nand:/shared2ディレクトリまわりの保存
|
||||||
内容はアプリケーション共有ファイル
|
内容はアプリケーション共有ファイル
|
||||||
nand:/shared2/*
|
nand:/shared2/*
|
||||||
*/
|
*/
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "shared2" );
|
|
||||||
STD_StrCpy( path_log , path_base );
|
|
||||||
STD_StrCat( path_log , "shared2.txt" );
|
|
||||||
mprintf("App. shared files backup ");
|
mprintf("App. shared files backup ");
|
||||||
if( 0 == copy_r( &dir_entry_list_head, path, "nand:/shared2" , path_log ) ) {
|
if( 0 == copy_r( &dir_entry_list_head, MyFile_GetAppSharedSaveDirName() , "nand:/shared2" , MyFile_GetAppSharedLogFileName(), 0) ) {
|
||||||
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
||||||
STD_StrCpy( path , path_base );
|
mydata.num_of_shared2_files = SaveDirEntryList( dir_entry_list_head, MyFile_GetAppSharedListFileName() );
|
||||||
STD_StrCat( path , "shared2.lst" );
|
|
||||||
mydata.num_of_shared2_files = SaveDirEntryList( dir_entry_list_head, path );
|
|
||||||
m_set_palette(tc[0], 0x2); /* green */
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
mprintf("OK.\n");
|
mprintf("OK.\n");
|
||||||
}
|
}
|
||||||
@ -195,24 +173,23 @@ static void BackupToSDCard(void)
|
|||||||
}
|
}
|
||||||
m_set_palette(tc[0], 0xF); /* white */
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
(void)ClearDirEntryList( &dir_entry_list_head );
|
(void)ClearDirEntryList( &dir_entry_list_head );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL SDBackupToSDCard5(void)
|
||||||
|
{
|
||||||
|
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
||||||
|
int save_dir_info = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
nand2:/photoディレクトリまわりの保存
|
nand2:/photoディレクトリまわりの保存
|
||||||
内容は写真長のJPEGファイル
|
内容は写真長のJPEGファイル
|
||||||
nand2:/photo/*.*
|
nand2:/photo/*.*
|
||||||
*/
|
*/
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "photo" );
|
|
||||||
STD_StrCpy( path_log , path_base );
|
|
||||||
STD_StrCat( path_log , "photolog.txt" );
|
|
||||||
// mprintf("copy_r photo completed.\n");
|
|
||||||
mprintf("Photo files backup ");
|
mprintf("Photo files backup ");
|
||||||
if( 0 == copy_r( &dir_entry_list_head, path , "nand2:/photo" , path_log ) ) {
|
if( 0 == copy_r( &dir_entry_list_head, MyFile_GetPhotoSaveDirName() , "nand2:/photo" , MyFile_GetPhotoLogFileName(),0 ) ) {
|
||||||
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
||||||
STD_StrCpy( path , path_base );
|
mydata.num_of_photo_files = SaveDirEntryList( dir_entry_list_head, MyFile_GetPhotoListFileName() );
|
||||||
STD_StrCat( path , "photo.lst" );
|
|
||||||
mydata.num_of_photo_files = SaveDirEntryList( dir_entry_list_head, path );
|
|
||||||
m_set_palette(tc[0], 0x2); /* green */
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
mprintf("OK.\n");
|
mprintf("OK.\n");
|
||||||
}
|
}
|
||||||
@ -224,27 +201,30 @@ static void BackupToSDCard(void)
|
|||||||
(void)ClearDirEntryList( &dir_entry_list_head );
|
(void)ClearDirEntryList( &dir_entry_list_head );
|
||||||
|
|
||||||
|
|
||||||
/* nand:/ticketはチケット同期?でうまいこと合わせてくれるんでバックアップ不要 */
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL SDBackupToSDCard6(void)
|
||||||
|
{
|
||||||
|
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
||||||
|
int save_dir_info = 0;
|
||||||
|
|
||||||
|
/* nand:/ticketはチケット同期?でうまいこと合わせてくれるんでバックアップ不要 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
nand:/titleディレクトリまわりの保存
|
nand:/titleディレクトリまわりの保存
|
||||||
nand:/title/*.savファイルをすべてバックアップ
|
nand:/title/*.savファイルをすべてバックアップ
|
||||||
*/
|
*/
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "title" );
|
|
||||||
STD_StrCpy( path_log , path_base );
|
|
||||||
STD_StrCat( path_log , "titlelog.txt" );
|
|
||||||
// mprintf("find_title_save_data completed.\n");
|
|
||||||
mprintf("App. save data backup ");
|
mprintf("App. save data backup ");
|
||||||
if( 0 == find_title_save_data( &dir_entry_list_head, path , "nand:/title", &save_dir_info, path_log ) ) {
|
if( 0 == find_title_save_data( &dir_entry_list_head, MyFile_GetAppDataSaveDirName(), "nand:/title",
|
||||||
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
&save_dir_info, MyFile_GetAppDataLogFileName(),0 ) )
|
||||||
STD_StrCpy( path , path_base );
|
{
|
||||||
STD_StrCat( path , "title.lst" );
|
// PrintDirEntryListBackward( dir_entry_list_head, NULL );
|
||||||
mydata.num_of_app_save_data = SaveDirEntryList( dir_entry_list_head , path );
|
mydata.num_of_app_save_data = SaveDirEntryList( dir_entry_list_head , MyFile_GetAppDataListFileName() );
|
||||||
m_set_palette(tc[0], 0x2); /* green */
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
mprintf("OK.\n");
|
mprintf("OK.\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_set_palette(tc[0], 0x1); /* red */
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
mprintf("NG.\n");
|
mprintf("NG.\n");
|
||||||
@ -252,7 +232,17 @@ static void BackupToSDCard(void)
|
|||||||
m_set_palette(tc[0], 0xF); /* white */
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
(void)ClearDirEntryList( &dir_entry_list_head );
|
(void)ClearDirEntryList( &dir_entry_list_head );
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL SDBackupToSDCard7(void)
|
||||||
|
{
|
||||||
|
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
||||||
|
int save_dir_info = 0;
|
||||||
|
u64 *pBuffer;
|
||||||
|
int count;
|
||||||
|
int j;
|
||||||
|
u64 *ptr;
|
||||||
|
|
||||||
/* タイトルリストの生成 */
|
/* タイトルリストの生成 */
|
||||||
/*
|
/*
|
||||||
@ -277,38 +267,46 @@ static void BackupToSDCard(void)
|
|||||||
|
|
|
|
||||||
システムアプリはダウンロード対象外
|
システムアプリはダウンロード対象外
|
||||||
*/
|
*/
|
||||||
STD_StrCpy( path , path_base );
|
mprintf("User title list backup ");
|
||||||
STD_StrCat( path , "title_id.dat" );
|
OS_TPrintf("User title list backup \n");
|
||||||
STD_StrCpy( path_log , path_base );
|
if( 0 == get_title_id( &dir_entry_list_head, "nand:/title", &save_dir_info, MyFile_GetDownloadTitleIDLogFileName(), 0 ) ) {
|
||||||
STD_StrCat( path_log , "title2log.txt" );
|
|
||||||
if( 0 == get_title_id( &dir_entry_list_head, "nand:/title", &save_dir_info, path_log ) ) {
|
|
||||||
mprintf("get_title_id completed.\n");
|
|
||||||
OS_TPrintf("get_title_id completed.\n");
|
|
||||||
|
|
||||||
GetDirEntryList( dir_entry_list_head, &pBuffer, &count);
|
GetDirEntryList( dir_entry_list_head, &pBuffer, &count);
|
||||||
OS_TPrintf("count = %d\n", count );
|
|
||||||
|
OS_TPrintf("title id count = %d\n", count );
|
||||||
ptr = pBuffer;
|
ptr = pBuffer;
|
||||||
mydata.num_of_user_download_app = count;
|
mydata.num_of_user_download_app = count;
|
||||||
|
|
||||||
if( ptr != NULL && count != 0 ) {
|
if( ptr != NULL && count != 0 ) {
|
||||||
for( j = 0 ; j < count ; j++ ) {
|
for( j = 0 ; j < count ; j++ ) {
|
||||||
OS_TPrintf("No. %d ",j);
|
OS_TPrintf("No. %d %llx\n",j,*ptr);
|
||||||
mfprintf(tc[2],"No. %d ",j);
|
mfprintf(tc[2],"No. %d %llx\n",j,*ptr);
|
||||||
|
ptr++;
|
||||||
OS_TPrintf("%llx\n", *ptr);
|
|
||||||
mfprintf(tc[2],"%llx\n", *ptr);
|
|
||||||
ptr++;
|
|
||||||
}
|
}
|
||||||
OS_Free(pBuffer);
|
|
||||||
}
|
}
|
||||||
// (void)TitleIDSave(path, u64 *pData, count, NULL);
|
(void)TitleIDSave( MyFile_GetDownloadTitleIDFileName(), pBuffer, count, NULL);
|
||||||
|
OS_Free(pBuffer);
|
||||||
PrintSrcDirEntryListBackward( dir_entry_list_head, NULL );
|
PrintSrcDirEntryListBackward( dir_entry_list_head, NULL );
|
||||||
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
|
mprintf("OK.\n");
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
m_set_palette(tc[0], 0x1); /* red */
|
||||||
|
mprintf("NG.\n");
|
||||||
|
}
|
||||||
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
|
||||||
(void)ClearDirEntryList( &dir_entry_list_head );
|
(void)ClearDirEntryList( &dir_entry_list_head );
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL SDBackupToSDCard8(void)
|
||||||
|
{
|
||||||
|
RTCDate rtc_date;
|
||||||
|
RTCTime rtc_time;
|
||||||
|
|
||||||
/* オリジナルのグローバルデータのバックアップ */
|
/* オリジナルのデータのバックアップ */
|
||||||
if( TRUE == CheckShopRecord(NULL) ) {
|
if( TRUE == CheckShopRecord(NULL) ) {
|
||||||
mydata.shop_record_flag = TRUE;
|
mydata.shop_record_flag = TRUE;
|
||||||
OS_TPrintf("shop record exist - you don't have to connect the network.\n");
|
OS_TPrintf("shop record exist - you don't have to connect the network.\n");
|
||||||
@ -320,8 +318,6 @@ static void BackupToSDCard(void)
|
|||||||
mprintf("no shop record\n");
|
mprintf("no shop record\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
STD_StrCpy( path , path_base );
|
|
||||||
STD_StrCat( path , "twl_rtc.dat" );
|
|
||||||
if( RTC_RESULT_SUCCESS != RTC_GetDate( &rtc_date ) ) {
|
if( RTC_RESULT_SUCCESS != RTC_GetDate( &rtc_date ) ) {
|
||||||
mprintf("rtc read date error.\n");
|
mprintf("rtc read date error.\n");
|
||||||
}
|
}
|
||||||
@ -334,7 +330,7 @@ static void BackupToSDCard(void)
|
|||||||
STD_CopyMemory( (void *)(mydata.movableUniqueID), (void *)hwn_info.movableUniqueID,
|
STD_CopyMemory( (void *)(mydata.movableUniqueID), (void *)hwn_info.movableUniqueID,
|
||||||
LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN );
|
LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN );
|
||||||
mprintf("org. data backup ");
|
mprintf("org. data backup ");
|
||||||
if( TRUE == MydataSave(path, (void *)&mydata, sizeof(MyData), NULL) ) {
|
if( TRUE == MydataSave( MyFile_GetGlobalInformationFileName(), (void *)&mydata, sizeof(MyData), NULL) ) {
|
||||||
m_set_palette(tc[0], 0x2); /* green */
|
m_set_palette(tc[0], 0x2); /* green */
|
||||||
mprintf("OK.\n");
|
mprintf("OK.\n");
|
||||||
}
|
}
|
||||||
@ -343,16 +339,40 @@ static void BackupToSDCard(void)
|
|||||||
mprintf("NG.\n");
|
mprintf("NG.\n");
|
||||||
}
|
}
|
||||||
m_set_palette(tc[0], 0xF); /* white */
|
m_set_palette(tc[0], 0xF); /* white */
|
||||||
|
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)
|
static void MyThreadProc(void *arg)
|
||||||
{
|
{
|
||||||
#pragma unused(arg)
|
#pragma unused(arg)
|
||||||
OSMessage message;
|
OSMessage message;
|
||||||
while( 1 ) {
|
while( 1 ) {
|
||||||
(void)OS_ReceiveMessage(&MyMesgQueue, &message, OS_MESSAGE_BLOCK);
|
(void)OS_ReceiveMessage(&MyMesgQueue, &message, OS_MESSAGE_BLOCK);
|
||||||
BackupToSDCard();
|
MyFile_SetPathBase("sdmc:/");
|
||||||
|
MyFile_AddPathBase((const char *)hws_info.serialNo );
|
||||||
|
MyFile_AddPathBase("/");
|
||||||
|
for( function_counter = 0 ; function_counter < function_table_max ; function_counter++ ) {
|
||||||
|
(void)(function_table[function_counter])();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,8 +387,6 @@ void TwlMain(void)
|
|||||||
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
MY_DIR_ENTRY_LIST *dir_entry_list_head = NULL;
|
||||||
RTCDate rtc_date;
|
RTCDate rtc_date;
|
||||||
RTCTime rtc_time;
|
RTCTime rtc_time;
|
||||||
// LCFGTWLHWNormalInfo hwn_info;
|
|
||||||
// LCFGTWLHWSecureInfo hws_info;
|
|
||||||
int i;
|
int i;
|
||||||
int n;
|
int n;
|
||||||
u8 macAddress[6];
|
u8 macAddress[6];
|
||||||
@ -548,11 +566,9 @@ void TwlMain(void)
|
|||||||
|
|
||||||
init_my_thread();
|
init_my_thread();
|
||||||
|
|
||||||
#if 1 // miya あとでコメントアウトはずす
|
|
||||||
if( sd_card_flag == TRUE ) {
|
if( sd_card_flag == TRUE ) {
|
||||||
start_my_thread();
|
start_my_thread();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
while( 1 ) {
|
while( 1 ) {
|
||||||
OS_WaitVBlankIntr();
|
OS_WaitVBlankIntr();
|
||||||
@ -683,10 +699,8 @@ void TwlMain(void)
|
|||||||
mfprintf(tc[1], "press A -> Store to SD Card\n");
|
mfprintf(tc[1], "press A -> Store to SD Card\n");
|
||||||
mfprintf(tc[1], "press B -> Load to NAND Flash\n");
|
mfprintf(tc[1], "press B -> Load to NAND Flash\n");
|
||||||
mfprintf(tc[1], "\n");
|
mfprintf(tc[1], "\n");
|
||||||
|
mfprintf(tc[1], "function no.%d/%d\n", function_counter, function_table_max);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
loop_counter++;
|
loop_counter++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user