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@23 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
parent
82b6e48205
commit
74963c2299
89
build/tools/sctools/common/src/menu_version.c
Normal file
89
build/tools/sctools/common/src/menu_version.c
Normal file
@ -0,0 +1,89 @@
|
||||
#include <twl.h>
|
||||
#include "menu_version.h"
|
||||
|
||||
|
||||
#define TWL_SYSMENU_VER_STR_LEN 28 // システムメニューバージョン文字列MAX bytes
|
||||
#define FS_VERSION_FILE "verdata:/version.bin"
|
||||
#define FS_TIMESTAMP_FILE "verdata:/time_stamp.bin"
|
||||
|
||||
|
||||
#if 0
|
||||
typedef struct SystemMenuVersion {
|
||||
u16 major;
|
||||
u16 minor;
|
||||
u16 str[ TWL_SYSMENU_VER_STR_LEN / sizeof(u16) ];
|
||||
} SystemMenuVersion;
|
||||
|
||||
SystemMenuVersion s_version;
|
||||
u32 s_timestamp;
|
||||
char str_ver[ TWL_SYSMENU_VER_STR_LEN / sizeof(u16) ];
|
||||
int len = sizeof(str_ver);
|
||||
// STD_MemSet((void *)s_version, 0, sizeof(TWL_SYSMENU_VER_STR_LEN);
|
||||
STD_MemSet((void *)str_ver, 0, TWL_SYSMENU_VER_STR_LEN);
|
||||
#endif
|
||||
|
||||
typedef struct SystemMenuVersion {
|
||||
u16 major;
|
||||
u16 minor;
|
||||
u16 str[ TWL_SYSMENU_VER_STR_LEN / sizeof(u16) ];
|
||||
} SystemMenuVersion;
|
||||
|
||||
BOOL Read_SystemMenuVersion(u16 *major, u16 *minor, u32 *ts)
|
||||
{
|
||||
|
||||
FSFile file;
|
||||
BOOL retval = TRUE;
|
||||
SystemMenuVersion s_version;
|
||||
u32 s_timestamp;
|
||||
char str_ver[ TWL_SYSMENU_VER_STR_LEN / sizeof(u16) ];
|
||||
int file_len;
|
||||
int len = sizeof(str_ver);
|
||||
|
||||
if( major == NULL || minor == NULL || ts == NULL ) {
|
||||
return FALSE;
|
||||
}
|
||||
// STD_MemSet((void *)s_version, 0, sizeof(TWL_SYSMENU_VER_STR_LEN);
|
||||
STD_MemSet((void *)str_ver, 0, TWL_SYSMENU_VER_STR_LEN);
|
||||
|
||||
FS_InitFile(&file);
|
||||
|
||||
if (!FS_OpenFileEx(&file, FS_VERSION_FILE, FS_FILEMODE_R)) {
|
||||
retval = FALSE;
|
||||
}
|
||||
|
||||
file_len = FS_ReadFile(&file, &s_version, (s32)sizeof(s_version));
|
||||
if (file_len < 0) {
|
||||
retval = FALSE;
|
||||
*major = 0;
|
||||
*minor = 0;
|
||||
}
|
||||
else {
|
||||
*major = s_version.major;
|
||||
*minor = s_version.minor;
|
||||
}
|
||||
FS_CloseFile(&file);
|
||||
|
||||
|
||||
if( STD_ConvertStringUnicodeToSjis( str_ver, &len, s_version.str, NULL, NULL ) != STD_RESULT_SUCCESS ) {
|
||||
retval = FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (!FS_OpenFileEx(&file, FS_TIMESTAMP_FILE, FS_FILEMODE_R)) {
|
||||
retval = FALSE;
|
||||
}
|
||||
|
||||
file_len = FS_ReadFile(&file, &s_timestamp, (s32)sizeof(s_timestamp));
|
||||
if (file_len < 0) {
|
||||
retval = FALSE;
|
||||
*ts = 0;
|
||||
}
|
||||
else {
|
||||
*ts = s_timestamp;
|
||||
}
|
||||
|
||||
FS_CloseFile(&file);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
14
build/tools/sctools/common/src/menu_version.h
Normal file
14
build/tools/sctools/common/src/menu_version.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef _MENU_VERSION_H_
|
||||
#define _MENU_VERSION_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
BOOL Read_SystemMenuVersion(u16 *major, u16 *minor, u32 *ts);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* _MENU_VERSION_H_ */
|
||||
@ -1322,8 +1322,27 @@ BOOL SDCardValidation(void)
|
||||
}
|
||||
|
||||
|
||||
/* 過去にショップに接続したかどうか */
|
||||
BOOL CheckShopRecord(FSFile *log_fd)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
過去にショップに接続したかどうか
|
||||
リージョンコードは以下のファイルで定義
|
||||
c:/twlsdk/include/twl/os/common/ownerInfoEx.h
|
||||
typedef enum OSTWLRegionCode
|
||||
{
|
||||
OS_TWL_REGION_JAPAN = 0,
|
||||
OS_TWL_REGION_AMERICA = 1,
|
||||
OS_TWL_REGION_EUROPE = 2,
|
||||
OS_TWL_REGION_AUSTRALIA = 3,
|
||||
OS_TWL_REGION_CHINA = 4,
|
||||
OS_TWL_REGION_KOREA = 5,
|
||||
OS_TWL_REGION_MAX
|
||||
} OSTWLRegion;
|
||||
*/
|
||||
|
||||
|
||||
BOOL CheckShopRecord(u8 region, FSFile *log_fd)
|
||||
{
|
||||
#pragma unused(log_fd)
|
||||
|
||||
@ -1338,6 +1357,7 @@ BOOL CheckShopRecord(FSFile *log_fd)
|
||||
if( ! bSuccess ) {
|
||||
if( FS_RESULT_NO_ENTRY == FS_GetArchiveResultCode(path) ) {
|
||||
}
|
||||
/* キーペアファイルがない */
|
||||
return FALSE;
|
||||
}
|
||||
(void)FS_CloseFile(&f);
|
||||
@ -1353,19 +1373,58 @@ BOOL CheckShopRecord(FSFile *log_fd)
|
||||
(void)FS_CloseFile(&f);
|
||||
#endif
|
||||
|
||||
// STD_StrCpy(path, "nand:/title/00030015/484e4641/data/ec.cfg"); /* ショップアカウント情報 */
|
||||
STD_StrCpy(path, "nand:/title/00030015/484e464a/data/ec.cfg"); /* ショップアカウント情報 */
|
||||
// STD_StrCpy(path, "nand:/title/00030015/484e464a/data/ec.cfg"); /* ショップアカウント情報 */
|
||||
/* 海外だと変わってくる・・ */
|
||||
/* リージョンコードと合わせる-> リージョンコードは変えられないから。 */
|
||||
/*
|
||||
J(0x4a) - Japan
|
||||
E(0x45) - America
|
||||
P(0x50) - Europe
|
||||
U(0x41) - Australia
|
||||
C(0x43) - China
|
||||
K(0x4b) - Korea
|
||||
*/
|
||||
|
||||
// STD_StrCpy(path, "nand:/title/00030015/484e4641/data/ec.cfg");
|
||||
switch( region ) {
|
||||
case OS_TWL_REGION_JAPAN:
|
||||
/* J(0x4a) - Japan */
|
||||
STD_StrCpy(path, "nand:/title/00030015/484e464a/data/ec.cfg");
|
||||
break;
|
||||
case OS_TWL_REGION_AMERICA:
|
||||
/* E(0x45) - America */
|
||||
STD_StrCpy(path, "nand:/title/00030015/484e4645/data/ec.cfg");
|
||||
break;
|
||||
case OS_TWL_REGION_EUROPE:
|
||||
/* P(0x50) - Europe */
|
||||
STD_StrCpy(path, "nand:/title/00030015/484e4650/data/ec.cfg");
|
||||
break;
|
||||
case OS_TWL_REGION_AUSTRALIA:
|
||||
/* U(0x41) - Australia */
|
||||
STD_StrCpy(path, "nand:/title/00030015/484e4641/data/ec.cfg");
|
||||
break;
|
||||
case OS_TWL_REGION_CHINA:
|
||||
/* C(0x43) - China */
|
||||
STD_StrCpy(path, "nand:/title/00030015/484e4643/data/ec.cfg");
|
||||
break;
|
||||
case OS_TWL_REGION_KOREA:
|
||||
/* K(0x4b) - Korea */
|
||||
STD_StrCpy(path, "nand:/title/00030015/484e464b/data/ec.cfg");
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bSuccess = FS_OpenFileEx(&f, path, (FS_FILEMODE_R));
|
||||
if( ! bSuccess ) {
|
||||
if( FS_RESULT_NO_ENTRY == FS_GetArchiveResultCode(path) ) {
|
||||
}
|
||||
/* ショップアカウント情報ファイルがない */
|
||||
return FALSE;
|
||||
}
|
||||
(void)FS_CloseFile(&f);
|
||||
|
||||
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
|
||||
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 )
|
||||
@ -1914,44 +1973,40 @@ int copy_r( MY_DIR_ENTRY_LIST **headp, const char *path_dst, const char *path_sr
|
||||
void write_debug_data(void)
|
||||
{
|
||||
// CopyFile( dst <= src );
|
||||
CopyFile("nand:/tmp/m00.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m01.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m02.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m03.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m04.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m05.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m06.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m07.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m08.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m09.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m10.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m11.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m12.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m13.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m14.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m15.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m16.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m17.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m18.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m19.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m20.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m22.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m23.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m24.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m25.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m26.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m27.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m28.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m29.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m30.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m31.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m32.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m33.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/tmp/m34.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("nand:/sys/miya.log", "sdmc:/miya.log", NULL);
|
||||
CopyFile("nand:/shared1/miya.log", "sdmc:/miya.log", NULL);
|
||||
|
||||
|
||||
CopyFile("sdmc:/m00.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m01.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m02.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m03.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m04.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m05.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m06.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m07.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m08.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m09.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m10.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m11.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m12.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m13.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m14.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m15.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m16.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m17.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m18.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m19.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m20.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m22.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m23.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m24.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m25.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m26.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m27.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m28.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m29.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m30.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m31.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m32.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m33.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
CopyFile("sdmc:/m34.sav" , "nand:/sys/log/sysmenu.log", NULL);
|
||||
|
||||
/*
|
||||
PrintDirEntryListBackword-----Start
|
||||
|
||||
@ -35,7 +35,7 @@ BOOL RestoreDirEntryList( char *path, char *log_file_name);
|
||||
BOOL ClearDirEntryList( MY_DIR_ENTRY_LIST **headp );
|
||||
void write_debug_data(void);
|
||||
BOOL SDCardValidation(void);
|
||||
BOOL CheckShopRecord(FSFile *log_fd);
|
||||
BOOL CheckShopRecord(u8 region, FSFile *log_fd);
|
||||
BOOL MydataSave(const char *path, void *pData, int size, FSFile *log_fd);
|
||||
BOOL MydataLoad(const char *path, void *pBuffer, int size, FSFile *log_fd);
|
||||
void GetDirEntryList( MY_DIR_ENTRY_LIST *head, u64 **pBuffer, int *size);
|
||||
|
||||
@ -1,503 +0,0 @@
|
||||
#include <twl.h>
|
||||
#include <twl/sea.h>
|
||||
#include <twl/na.h>
|
||||
// #include <TwlWiFi/nuc.h>
|
||||
|
||||
#include "netconnect.h"
|
||||
#include "sitedefs.h"
|
||||
#include "nuc.h"
|
||||
#include "nuc_error_msg.h"
|
||||
|
||||
// Network Updateのフェーズを表す
|
||||
typedef enum{
|
||||
|
||||
PHASE_INIT, // 初期状態
|
||||
PHASE_READY, // 開始
|
||||
PHASE_CONNECTING_NETWORK, // ネットワーク接続中
|
||||
PHASE_TEST_READY, // 接続テスト開始
|
||||
PHASE_TEST_PROCESS, // 接続テスト中
|
||||
PHASE_TEST_GETTING_WII_ID, // Wii ID取得処理
|
||||
PHASE_TEST_FINISHED, // 接続テスト完了
|
||||
PHASE_TEST_CLEANUP, // 接続テスト後処理
|
||||
PHASE_NUP_BREAK, // <キー入力待ち>アップデート前確認待ち
|
||||
PHASE_NUP_READY, // ネットワークアップデート開始
|
||||
PHASE_NUP_CHECK, // ネットワークアップデート更新情報取得中
|
||||
PHASE_NUP_DOWNLOAD, // ネットワークアップデート ダウンロード開始
|
||||
PHASE_NUP_PROCESS, // ネットワークアップデート中
|
||||
PHASE_NUP_FINISHED, // ネットワークアップデート完了
|
||||
PHASE_NUP_CLEANUP, // ネットワークアップデート後処理
|
||||
PHASE_NUP_SKIPPED, // ネットワークアップデートがスキップされた
|
||||
PHASE_CLEANING_UP, // 後処理
|
||||
PHASE_FINISHED, // 完了
|
||||
PHASE_ERROR_OCCURRED // エラー発生
|
||||
} NucPhaseState;
|
||||
|
||||
|
||||
// ネットワーク接続状態
|
||||
typedef enum{
|
||||
NET_CONNECT_NONE,
|
||||
NET_CONNECT_OK,
|
||||
NET_CONNECT_ERROR
|
||||
} NetConnectState;
|
||||
|
||||
static volatile NetConnectState NetConnect = NET_CONNECT_NONE;
|
||||
|
||||
// state管理
|
||||
static struct
|
||||
{
|
||||
NucPhaseState state;
|
||||
u32 count;
|
||||
} TestState;
|
||||
|
||||
static inline void ChangeState(NucPhaseState state)
|
||||
{
|
||||
TestState.state = state;
|
||||
TestState.count = 0;
|
||||
}
|
||||
|
||||
// titleID 取得用
|
||||
static NUCTitleId TitleIds[NUC_MAX_TITLE_UPDATE_COUNT];
|
||||
static u32 TitleIdNum;
|
||||
|
||||
static u8 WorkForNA[NA_VERSION_DATA_WORK_SIZE];
|
||||
|
||||
static BOOL AllocFailTest = FALSE;
|
||||
|
||||
static void *alloc(u32 size, int align)
|
||||
{
|
||||
u32 *ptr = NULL, *realPtr = NULL;
|
||||
u32 realSize;
|
||||
OSIntrMode old;
|
||||
|
||||
old = OS_DisableInterrupts();
|
||||
|
||||
/* realSize is size plus alignment and header */
|
||||
if (align < 4)
|
||||
{
|
||||
align = 4;
|
||||
}
|
||||
realSize = size + align + 4;
|
||||
|
||||
realPtr = (u32 *) OS_Alloc(realSize);
|
||||
ptr = (u32 *)((((u32) realPtr) + 4 + align - 1) & ~(align - 1));
|
||||
|
||||
*((u32 *)(((u32)ptr) - 4)) = (u32) realPtr;
|
||||
(void)OS_RestoreInterrupts( old );
|
||||
|
||||
end:
|
||||
SDK_ASSERT(((u32)ptr & (align - 1)) == 0);
|
||||
return (void *) ptr;
|
||||
}
|
||||
|
||||
static void free(void *p)
|
||||
{
|
||||
u32 realPtr = *((u32 *)(((u32)p) - 4));
|
||||
OS_Free((void *) realPtr);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: InitNupLib
|
||||
Description: NUCライブラリを開始します。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL InitNupLib()
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
ret = NUC_Init(alloc, free);
|
||||
|
||||
if (ret == FALSE) {
|
||||
OS_TPrintf("NUC_Init() failed, error code=%d\n", NUC_GetLastError());
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: StartNupCheck
|
||||
Description: ダウンロードリスト一覧の取得を開始します。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL StartNupCheck(void)
|
||||
{
|
||||
BOOL ret;
|
||||
TitleIdNum = sizeof(TitleIds) / sizeof(TitleIds[0]);
|
||||
|
||||
ret = NUC_CheckAsync(TitleIds, &TitleIdNum);
|
||||
if (ret == FALSE)
|
||||
{
|
||||
OS_TPrintf("NUC_CheckAsync() failed, error code=%d\n", NUC_GetLastError());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: ProgressNupCheck
|
||||
Description: ダウンロードリスト一覧の取得状況を確認します
|
||||
*---------------------------------------------------------------------------*/
|
||||
static NucStatus ProgressNupCheck(void)
|
||||
{
|
||||
u64 CurrentSize, TotalSize;
|
||||
NucStatus status;
|
||||
|
||||
NUC_GetProgress(&CurrentSize, &TotalSize, &status);
|
||||
if (status == NUC_STATUS_ERROR)
|
||||
{
|
||||
OS_TPrintf("NUC_GetProgress() failed in checking, error code=%d\n", NUC_GetLastError());
|
||||
}
|
||||
#if 0
|
||||
if (TestState.count++ % STRING_ANIM_CNT == 0)
|
||||
{
|
||||
u32 num = (TestState.count / STRING_ANIM_CNT) % 3;
|
||||
const char* msg[] = {
|
||||
"Now checking list. ",
|
||||
"Now checking list.. ",
|
||||
"Now checking list... "};
|
||||
|
||||
PrintString(TEXT_X, TEXT_Y, COLOR_WHITE, msg[num]);
|
||||
}
|
||||
#endif
|
||||
return status;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: StartNupDownload
|
||||
Description: ダウンロードを開始します。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL StartNupDownload(void)
|
||||
{
|
||||
/* こいつが呼ばれたらFSが切り離されてしまうのでリブートが必要 */
|
||||
BOOL ret = NUC_DownloadAsync(TitleIds, TitleIdNum);
|
||||
|
||||
if (ret == FALSE)
|
||||
{
|
||||
OS_TPrintf("NUP_DownloadAsync() failed, error code=%d\n", NUC_GetLastError());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: ProgressNupDownload
|
||||
Description: ダウンロードの進行状況を表示します。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static NucStatus ProgressNupDownload(void)
|
||||
{
|
||||
u64 CurrentSize, TotalSize;
|
||||
NucStatus status;
|
||||
|
||||
NUC_GetProgress(&CurrentSize, &TotalSize, &status);
|
||||
if (status == NUC_STATUS_ERROR)
|
||||
{ // エラー発生
|
||||
OS_TPrintf("NUC_GetProgress() failed in download, error code=%d\n", NUC_GetLastError());
|
||||
}
|
||||
else {
|
||||
#if 0
|
||||
// ダウンロード状況を描画
|
||||
int dw = (int)((CurrentSize * BAR_W)/TotalSize);
|
||||
FillRect(BAR_X, BAR_Y, dw, BAR_H, GX_RGBA(31, 16, 16, 1));
|
||||
#endif
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (TestState.count++ % STRING_ANIM_CNT == 0)
|
||||
{
|
||||
u32 num = (TestState.count / STRING_ANIM_CNT) % 3;
|
||||
const char* msg[] = {
|
||||
"Now downloading. ",
|
||||
"Now downloading.. ",
|
||||
"Now downloading... "};
|
||||
PrintString(TEXT_X, TEXT_Y, COLOR_WHITE, msg[num]);
|
||||
}
|
||||
#endif
|
||||
return status;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CleanNupLib
|
||||
Description: NUCライブラリを終了します。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static BOOL CleanNupLib()
|
||||
{
|
||||
BOOL ret = NUC_Cleanup(TitleIds, TitleIdNum);
|
||||
if (ret == FALSE)
|
||||
{
|
||||
OS_TPrintf("NUP_CleanUp() failed, error code=%d\n", NUC_GetLastError());
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: ProgressNetConnect
|
||||
Description: ネットワーク接続を待ちます。
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void ProgressNetConnect(void)
|
||||
{
|
||||
#if 0
|
||||
if (TestState.count++ % STRING_ANIM_CNT == 0)
|
||||
{
|
||||
u32 num = (TestState.count / STRING_ANIM_CNT) % 3;
|
||||
const char* msg[] = {
|
||||
"Connecting network. ",
|
||||
"Connecting network.. ",
|
||||
"Connecting network..."};
|
||||
PrintString(TEXT_X, TEXT_Y, COLOR_WHITE, msg[num]);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void ShowErrorMsg(int error_code)
|
||||
{
|
||||
#if 0
|
||||
PrintString(TEXT_X, TEXT_Y, COLOR_WHITE, "Error Occurred ");
|
||||
#endif
|
||||
if (error_code > 0)
|
||||
{
|
||||
#if 0
|
||||
PrintString(TEXT_X, TEXT_Y + 10, COLOR_WHITE, "Error Code:%d", error_code);
|
||||
PrintString(TEXT_X, TEXT_Y + 12, COLOR_WHITE, "%s", GetPublicMsg(error_code));
|
||||
PrintString(TEXT_X, TEXT_Y + 15, COLOR_WHITE, "%s", GetPrivateMsg(error_code));
|
||||
#endif
|
||||
OS_TPrintf( "Error Code:%d\n", error_code);
|
||||
OS_TPrintf( "%s\n", GetPublicMsg(error_code));
|
||||
OS_TPrintf( "%s\n", GetPrivateMsg(error_code));
|
||||
}
|
||||
else
|
||||
{
|
||||
OS_TPrintf( "%s\n", "Network Error occurred.\nTry again later.");
|
||||
#if 0
|
||||
// ネットワークエラー時の表示メッセージ(暫定)
|
||||
PrintString(TEXT_X, TEXT_Y + 10, COLOR_WHITE, "%s", "Network Error occurred.\nTry again later.");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
// ネットワーク接続関連
|
||||
#define STACK_SIZE (1024*4)
|
||||
static OSThread NetThread;
|
||||
static u64 NetStack[STACK_SIZE / sizeof(u64)];
|
||||
#define THREAD1_PRIO 24
|
||||
static volatile BOOL NetHTTPEnd = FALSE;
|
||||
|
||||
|
||||
static void NetConnectProc(void *arg)
|
||||
{
|
||||
#pragma unused(arg)
|
||||
BOOL ret;
|
||||
NucStatus status;
|
||||
int error_code = 0;
|
||||
|
||||
|
||||
/* Start networking */
|
||||
NcStart(SITEDEFS_DEFAULTCLASS);
|
||||
|
||||
NetConnect = NET_CONNECT_OK;
|
||||
//OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__);
|
||||
// 終了の呼び出しを待つ
|
||||
// OS_SleepThread(NULL);
|
||||
|
||||
while(1) {
|
||||
OS_Sleep( 16 ); /* OS_WaitVBlankIntrの代わり */
|
||||
|
||||
switch ( TestState.state ) {
|
||||
case PHASE_CONNECTING_NETWORK:
|
||||
ProgressNetConnect();
|
||||
if (NetConnect == NET_CONNECT_OK)
|
||||
{
|
||||
ChangeState(PHASE_NUP_BREAK);
|
||||
}
|
||||
else if (NetConnect == NET_CONNECT_ERROR)
|
||||
{ // ネットワーク接続エラー
|
||||
error_code = -1;
|
||||
ChangeState(PHASE_ERROR_OCCURRED);
|
||||
}
|
||||
break;
|
||||
case PHASE_NUP_BREAK: // AボタンでNUPライブラリを初期化します。
|
||||
ret = InitNupLib();
|
||||
if (ret == FALSE)
|
||||
{ // エラー発生
|
||||
ChangeState(PHASE_ERROR_OCCURRED);
|
||||
error_code = NUC_GetLastError();
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeState(PHASE_NUP_READY);
|
||||
}
|
||||
break;
|
||||
|
||||
case PHASE_NUP_READY: // 更新情報の取得を開始します。
|
||||
ret = StartNupCheck();
|
||||
if (ret == FALSE)
|
||||
{ // エラー発生
|
||||
error_code = NUC_GetLastError();
|
||||
ChangeState(PHASE_NUP_CLEANUP);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeState(PHASE_NUP_CHECK);
|
||||
}
|
||||
break;
|
||||
|
||||
case PHASE_NUP_CHECK: // 更新情報の取得状況を表示します。
|
||||
status = ProgressNupCheck();
|
||||
if (status == NUC_STATUS_ERROR)
|
||||
{ // エラー発生
|
||||
ChangeState(PHASE_NUP_CLEANUP);
|
||||
error_code = NUC_GetLastError();
|
||||
}
|
||||
else if (status == NUC_STATUS_COMPLETED)
|
||||
{ // 更新リスト 取得終了
|
||||
if (TitleIdNum > 0 )
|
||||
{ // ダウンロードへ
|
||||
int i;
|
||||
for (i = 0; i < TitleIdNum; i++)
|
||||
{
|
||||
OS_TPrintf("DL list:%3d:0x%llx", i, TitleIds[i]);
|
||||
}
|
||||
ChangeState(PHASE_NUP_DOWNLOAD);
|
||||
}
|
||||
else
|
||||
{ // 更新すべきものがない
|
||||
OS_TPrintf("No title to update\n");
|
||||
ChangeState(PHASE_NUP_CLEANUP);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case PHASE_NUP_DOWNLOAD: // ダウンロードを開始します。
|
||||
ret = StartNupDownload();
|
||||
if (ret == FALSE)
|
||||
{ // エラー発生
|
||||
ChangeState(PHASE_NUP_CLEANUP);
|
||||
error_code = NUC_GetLastError();
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeState(PHASE_NUP_PROCESS);
|
||||
}
|
||||
break;
|
||||
|
||||
case PHASE_NUP_PROCESS: // ダウンロードの進行状況を表示します。
|
||||
status = ProgressNupDownload();
|
||||
if (status == NUC_STATUS_ERROR)
|
||||
{ // エラー発生
|
||||
ChangeState(PHASE_NUP_CLEANUP);
|
||||
error_code = NUC_GetLastError();
|
||||
}
|
||||
else if (status == NUC_STATUS_COMPLETED)
|
||||
{ // ダウンロード完了
|
||||
ChangeState(PHASE_NUP_CLEANUP);
|
||||
}
|
||||
break;
|
||||
|
||||
case PHASE_NUP_CLEANUP: // NUPライブラリのクリーンアップ
|
||||
ret = CleanNupLib();
|
||||
if (ret == FALSE && error_code == 0)
|
||||
{ // 他でエラーが起こっていない場合のみ上書きします。
|
||||
error_code = NUC_GetLastError();
|
||||
}
|
||||
// ネットの切断と後始末
|
||||
OS_WakeupThreadDirect(&NetThread);
|
||||
ChangeState(PHASE_CLEANING_UP);
|
||||
break;
|
||||
|
||||
case PHASE_CLEANING_UP: // ネットの切断終了を待ちます
|
||||
if (NetConnect == NET_CONNECT_NONE)
|
||||
{ // 切断終了
|
||||
if (error_code == 0)
|
||||
{ // 正常終了
|
||||
ChangeState(PHASE_FINISHED);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeState(PHASE_ERROR_OCCURRED);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case PHASE_FINISHED: // ネットワークアップデートが正常終了しました。
|
||||
OS_TPrintf("Network Update Completed\n");
|
||||
if (TitleIdNum > 0)
|
||||
{
|
||||
OS_TPrintf("%d file is updated\n", TitleIdNum);
|
||||
}
|
||||
else
|
||||
{
|
||||
OS_TPrintf("Nothing is updated\n");
|
||||
}
|
||||
|
||||
if (TitleIdNum > 0)
|
||||
{ // 再起動する
|
||||
OS_TPrintf("再起動します\n");
|
||||
}
|
||||
else
|
||||
{ // メッセージを表示して戻る
|
||||
OS_TPrintf("アップデートするものがなかったので戻ります\n");
|
||||
}
|
||||
goto end;
|
||||
|
||||
break;
|
||||
|
||||
case PHASE_ERROR_OCCURRED: // エラーが発生しています。
|
||||
|
||||
ShowErrorMsg(error_code);
|
||||
goto end;
|
||||
#if 0
|
||||
if (Trg == PAD_BUTTON_A)
|
||||
{
|
||||
OS_TPrintf("エラーが発生したので戻ります\n");
|
||||
goto end;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
OS_TPrintf("%s %d\n",__FUNCTION__,__LINE__);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
NcFinish();
|
||||
NetConnect = NET_CONNECT_NONE;
|
||||
|
||||
OS_TPrintf("Network Connection ended\n");
|
||||
}
|
||||
|
||||
|
||||
/* ********************** */
|
||||
void nuc_main(void)
|
||||
{
|
||||
|
||||
ChangeState(PHASE_INIT);
|
||||
// NcGlobalInit(); in netconnect.c
|
||||
|
||||
/* クライアント証明書の初期化 */
|
||||
SEA_Init();
|
||||
// あらかじめWRAMにロードしておきます
|
||||
if (!NA_LoadVersionDataArchive(WorkForNA, NA_VERSION_DATA_WORK_SIZE)) {
|
||||
OS_TPrintf("NA load error\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!NUC_LoadCert()) {
|
||||
// WRAMにロード
|
||||
OS_TPrintf("Client cert load error\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
(void)NA_UnloadVersionDataArchive();
|
||||
|
||||
|
||||
/* 接続設定スレッドの作成 */
|
||||
OS_CreateThread(&NetThread, NetConnectProc,
|
||||
NULL, NetStack + STACK_SIZE / sizeof(u64),
|
||||
STACK_SIZE, THREAD1_PRIO);
|
||||
OS_WakeupThreadDirect(&NetThread);
|
||||
ChangeState(PHASE_CONNECTING_NETWORK);
|
||||
|
||||
end:
|
||||
return;
|
||||
}
|
||||
@ -26,7 +26,7 @@ SRCS = main.c mfiler.c key.c font.c text.c mprintf.c logprintf.c \
|
||||
gfx.c hwi.c mynvram.c my_fs_util.c \
|
||||
hatamotolib.cpp \
|
||||
sitedefs.c wcm_control.c netconnect.c mywlan.c \
|
||||
mynuc.c nuc_error_msg.c stream.c myfilename.c
|
||||
mynuc.c nuc_error_msg.c stream.c myfilename.c menu_version.c
|
||||
|
||||
TARGET_BIN = copy_dst.srl
|
||||
ROM_SPEC = copy_dst.rsf
|
||||
|
||||
Binary file not shown.
@ -42,6 +42,7 @@
|
||||
|
||||
#include "myfilename.h"
|
||||
#include "mfiler.h"
|
||||
#include "menu_version.h"
|
||||
|
||||
|
||||
//================================================================================
|
||||
@ -51,6 +52,9 @@ static BOOL sd_card_flag = FALSE;
|
||||
|
||||
static u8 WorkForNA[NA_VERSION_DATA_WORK_SIZE];
|
||||
|
||||
|
||||
|
||||
|
||||
static void SDEvents(void *userdata, FSEvent event, void *arg)
|
||||
{
|
||||
(void)userdata;
|
||||
@ -703,6 +707,20 @@ void TwlMain(void)
|
||||
mprintf("NA load error\n");
|
||||
}
|
||||
else {
|
||||
|
||||
{
|
||||
u16 s_major, s_minor;
|
||||
u32 s_timestamp;
|
||||
if( TRUE == Read_SystemMenuVersion(&s_major, &s_minor, &s_timestamp) ) {
|
||||
OS_TPrintf( "SystemMenuVersionData\n" );
|
||||
// •¶Žš—ñ
|
||||
// <20>”’l
|
||||
OS_TPrintf( " Version(num) : %d.%d\n", s_major, s_minor );
|
||||
// OS_TPrintf( " Version(str) : %s\n", s_version.str_ver );
|
||||
OS_TPrintf( " Timestamp : %08x\n", s_timestamp );
|
||||
}
|
||||
}
|
||||
|
||||
if (!NUC_LoadCert()) {
|
||||
// WRAM‚Ƀ<C389><C692>[ƒh
|
||||
OS_TPrintf("Client cert load error\n");
|
||||
|
||||
@ -25,7 +25,7 @@ SRCDIR = ../common/src ./src
|
||||
SRCS = main.c key.c font.c text.c mprintf.c logprintf.c \
|
||||
gfx.c hwi.c mynvram.c my_fs_util.c \
|
||||
sitedefs.c wcm_control.c netconnect.c mywlan.c \
|
||||
nuc_error_msg.c stream.c myfilename.c
|
||||
stream.c myfilename.c menu_version.c
|
||||
|
||||
TARGET_BIN = copy_org.srl
|
||||
ROM_SPEC = copy_org.rsf
|
||||
|
||||
Binary file not shown.
@ -28,7 +28,6 @@
|
||||
#include "mynvram.h"
|
||||
#include "stream.h"
|
||||
#include "hwi.h"
|
||||
// #include "hatamotolib.h"
|
||||
#include "ecdl.h"
|
||||
#include "mywlan.h"
|
||||
#include "mydata.h"
|
||||
@ -144,7 +143,9 @@ static BOOL SDBackupToSDCard4(void)
|
||||
nand:/shared2/*
|
||||
*/
|
||||
mprintf("App. shared files backup ");
|
||||
if( 0 == copy_r( &dir_entry_list_head, MyFile_GetAppSharedSaveDirName() , "nand:/shared2" , MyFile_GetAppSharedLogFileName(), 0) ) {
|
||||
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 */
|
||||
@ -170,7 +171,9 @@ static BOOL SDBackupToSDCard5(void)
|
||||
nand2:/photo/*.*
|
||||
*/
|
||||
mprintf("Photo files backup ");
|
||||
if( 0 == copy_r( &dir_entry_list_head, MyFile_GetPhotoSaveDirName() , "nand2:/photo" , MyFile_GetPhotoLogFileName(),0 ) ) {
|
||||
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 */
|
||||
@ -298,7 +301,7 @@ static BOOL SDBackupToSDCard8(void)
|
||||
RTCTime rtc_time;
|
||||
|
||||
/* オリジナルのデータのバックアップ */
|
||||
if( TRUE == CheckShopRecord(NULL) ) {
|
||||
if( TRUE == CheckShopRecord( hws_info.region, NULL ) ) {
|
||||
mydata.shop_record_flag = TRUE;
|
||||
OS_TPrintf("shop record exist - you don't have to connect the network.\n");
|
||||
mprintf(" (--shop record exist--)\n");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user