VersionInfoの描画方法の修正。

Makefileでsecure, normal with SCFG, normal without SCFGの三つを作成するようにした。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1947 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
aoki_ryoma 2008-07-18 13:51:00 +00:00
parent 7f63f379c8
commit d71aa59ecd
10 changed files with 236 additions and 71 deletions

View File

@ -45,8 +45,6 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs
DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation)
#MACRO_FLAGS += -DSDK_ARM7COMP_LTD
ifeq ($(TWL_PLATFORM),BB)
MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000'
else

View File

@ -45,6 +45,7 @@ MEMORY
<END.LTDOVERLAYS>
check.LTDMAIN (RWX) : ORIGIN = 0x02f88000, LENGTH = 0x74000 > ltdmain.check
check.RSVWRAM (RWX) : ORIGIN = 0x03040000, LENGTH = 0x08000 > rsvwram.check
}
KEEP_SECTION
@ -925,4 +926,10 @@ SECTIONS
} > check.LTDMAIN
.check.RSVWRAM:
{
. = SDK_LTDAUTOLOAD.RSVWRAM.BSS_END;
} > check.RSVWRAM
}

View File

@ -132,6 +132,17 @@ Autoload WRAM
Object OBJECT( WaitLoop_BbpAccess , libwl_sp$(LIBSUFFIX).a ) (.text)
Object OBJECT( WaitLoop_RfAccess , libwl_sp$(LIBSUFFIX).a ) (.text)
}
#--------
Ltdautoload RSVWRAM
{
Address 0x03040000
Object * (.rsvwram)
Library libathdrv_sp$(LIBSUFFIX).a (.bss)
Library libathdrv_sp$(LIBSUFFIX).a (.data)
#####
# Sub-routines in TWL WIRELESS Driver , that should be on WRAM.
Object OBJECT( HTCSendPktCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text)
@ -187,18 +198,6 @@ Autoload WRAM
Object OBJECT( bmiBufferSend, libathdrv_sp$(LIBSUFFIX).a ) (.text)
Object OBJECT( BMIWriteMemory, libathdrv_sp$(LIBSUFFIX).a ) (.text)
Object OBJECT( wpa_sm_rx_eapol , libwpa_sp$(LIBSUFFIX).a ) (.text)
}
#--------
Ltdautoload RSVWRAM
{
Address 0x03040000
Object * (.rsvwram)
Library libathdrv_sp$(LIBSUFFIX).a (.bss)
Library libathdrv_sp$(LIBSUFFIX).a (.data)
# FATFS core symbols
Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs

View File

@ -17,8 +17,8 @@
#----------------------------------------------------------------------------
SUBDIRS =
SUBMAKES = Makefile.racoon_SCFG Makefile.racoon_noSCFG Makefile.armadillo
#SUBMAKES = Makefile.racoon_SCFG Makefile.racoon_noSCFG Makefile.armadillo
SUBMAKES = Makefile.armadillo
include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/commondefs
#----------------------------------------------------------------------------

View File

@ -215,6 +215,7 @@ BOOL control( int *menu, int *line, int *changeLine, int *changeMode )
case MENU_SECURE_HW:
case MENU_SCFG_ARM7:
case MENU_SCFG_ARM9:
case MENU_SYSMENU:
case MENU_VERSION:
// 今の画面の選択位置を記録
selectLine[ROOTMENU_SIZE] = *line;
@ -234,10 +235,6 @@ BOOL control( int *menu, int *line, int *changeLine, int *changeMode )
breakUserData(1);
break;
case MENU_RESET :
// リセット実行
OS_ResetSystem( 0 );
break;
}
}
else if( gAllInfo[*menu][*line].changable )

View File

@ -85,7 +85,7 @@ void printBinary16( int x, int y, u16 value, int selected, int selectSize );
void printBinary32( int x, int y, u32 value, int selected, int selectSize );
void drawRegister( int menu, int selected );
void drawChangeMode( DispInfoEntry *Entry, int changeLine );
void drawVersion( int startIdx, int selected );
void drawVersion( int idx, int drawLine ,int selected );
void printUniqueID( int drawLineOffset, char *uniqueId );
int getPageNum( int valueIdx, const int* pageOffset );
int countMenuLine( int menu );
@ -206,7 +206,20 @@ void printValue( int menu,int entryLine, int drawOffset, DispInfoEntry *entry )
return;
}
if( menu == MENU_SYSMENU && entryLine == SYSMENU_VERSION_NUM )
{
PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset,
txtColor, "%d.%d", entry->iValue >> 16, entry->iValue & 0xFFFF );
return;
}
if( ( menu == MENU_SYSMENU && entryLine == SYSMENU_TIMESTAMP )||
( menu == MENU_VERSION && entryLine == VERSION_FONT ))
{
PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, txtColor, "%08lx", entry->iValue );
return;
}
// 通常の値の描画
if( entry->isAligned )
{
@ -427,20 +440,10 @@ void drawChangeMode( DispInfoEntry *entry, int changeLine )
}
void drawVersion( int startIdx, int selected )
void drawVersion( int idx, int drawLine ,int selected )
{
int drawLine = 0;
int kindColor = TXT_COLOR_BLACK;
/*
for( drawLine = 0;
if( idx < 2 )
{
printKindName( MENU_VERSION, idx, drawLine, selected );
printValue( MENU_VERSION, idx, drawLine, &gAllInfo[MENU_VERSION][idx] );
return;
}
if( idx == selected)
{
// 選択項目はいろかえる
@ -450,10 +453,24 @@ void drawVersion( int startIdx, int selected )
// 項目名
PrintfSJIS( KIND_LEFT, KIND_UP + LINE_OFFSET*drawLine , kindColor, "%d", gContentsTitle[idx - 2] );
// gContentsTitle[i]は頭4バイトがイニシャルコードのビッグエンディアン記述、
// お尻4バイトがアプリのフラグ
{
u64 id = gContentsTitle[idx];
char buf[4] = {0};
int i;
for(i = 3; 0<=i; i-- )
{
buf[i] = id & 0xFF ;
id >>= 8;
}
PrintfSJIS( KIND_LEFT, KIND_UP + LINE_OFFSET*drawLine , kindColor, "%s", buf );
}
// 値
PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , TXT_COLOR_BLACK, "%u",gContentsVersion[idx - 2] );
*/
PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , TXT_COLOR_BLACK, "%x", gContentsVersion[idx] );
}
@ -497,15 +514,15 @@ void drawMenu( int menu, int line, int changeLine, BOOL isChangeMode )
calibrateDrawIdx( menu, line );
}
// 項目数可変なVersion infoだけ別枠で描画する
if( menu == MENU_VERSION )
{
drawVersion( gDrawIdx[menu], line );
return;
}
for( i = gDrawIdx[menu] ; i < s_numMenu[menu] && lineNum < DISP_NUM_LINES ; i++ )
{
// 可変長項目なバージョン情報だけ特例処理
if( menu == MENU_VERSION && VERSION_OTHER <= i )
{
drawVersion( i - VERSION_OTHER, lineNum++, line - VERSION_OTHER );
continue;
}
// 項目名の描画
printKindName( menu, i, lineNum, line );
@ -558,13 +575,15 @@ void calibrateDrawIdx( int menu, int idx )
// まずは自分と下2項目の行数を探索
for( i = 0; i <= 2 && i + idx < s_numMenu[menu] ; i++ )
{
lines += gAllInfo[menu][i + idx].numLines;
lines += menu == MENU_VERSION && VERSION_OTHER <= i+idx ?
1 : gAllInfo[menu][i + idx].numLines;
}
// 自分より上方向へ探索
for( i = 1; 0 <= idx - i && lines < DISP_NUM_LINES ; i++)
{
lines += gAllInfo[menu][idx - i].numLines;
lines += menu == MENU_VERSION && VERSION_OTHER <= i+idx ?
1 : gAllInfo[menu][idx - i].numLines;
}
// ループが一回余計に回る

View File

@ -83,7 +83,7 @@ void TwlMain( void )
OS_TPrintf("Allocator Initialize...\n");
InitAllocator();
#ifdef COMP_ARMADILLO
#ifdef SEA_ENABLE
OS_TPrintf("NAM Initialize...\n");
NAM_Init( Alloc, Free );
#endif

View File

@ -27,6 +27,7 @@ int s_numMenu[] = {
SECURE_HW_MENU_SIZE,
SCFG_ARM7_MENU_SIZE,
SCFG_ARM9_MENU_SIZE,
SYSMENU_MENU_SIZE,
VERSIONMENU_SIZE,
0,
0,
@ -64,6 +65,7 @@ const char *s_strRootMenu[] = {
"<EFBFBD>ƒSecure Hardware Info<66>",
"<EFBFBD>ƒSCFG Info (ARM7 side)<29>",
"<EFBFBD>ƒSCFG Info (ARM9 side)<29>",
"<EFBFBD>ƒAbout Sysmenu<6E>",
"<EFBFBD>ƒContent Version<6F>",
"Reset HW Setting to Default",
"break HW Setting"
@ -215,10 +217,17 @@ const char *s_strSCFGArm7Menu[] = {
"Option App for"
};
const char *s_strSystemMenu[] = {
"Version (numeric)",
"Version (string)",
"EULA URL",
"NUP Hostname",
"Timestamp"
};
const char *s_strVersionMenu[] = {
"Shared Font",
"Wireless Firm",
"Whitelist"
"Font(Timestamp)"
};
const char **s_strMetaMenu[] = {
@ -229,10 +238,10 @@ const char **s_strMetaMenu[] = {
s_strSecureHWMenu,
s_strSCFGArm7Menu,
s_strSCFGArm9Menu,
s_strSystemMenu,
s_strVersionMenu,
NULL,
NULL,
NULL,
s_strRootMenu
};

View File

@ -27,10 +27,11 @@
#define MENU_SECURE_HW 4
#define MENU_SCFG_ARM7 5
#define MENU_SCFG_ARM9 6
#define MENU_VERSION 7
#define MENU_RESET_INFO 8
#define MENU_BREAK_DATA 9
#define MENU_RESET 10
#define MENU_SYSMENU 7
#define MENU_VERSION 8
#define MENU_RESET_INFO 9
#define MENU_BREAK_DATA 10
// 行番号
#define OWNER_LANGUAGE 0
@ -151,12 +152,18 @@
#define SCFG_ARM7_SHARED_OFFSET 47
#define SYSMENU_VERSION_NUM 0
#define SYSMENU_VERSION_STR 1
#define SYSMENU_EULA_URL 2
#define SYSMENU_NUP_HOST 3
#define SYSMENU_TIMESTAMP 4
#define VERSION_WIRELESS 0
#define VERSION_FONT 1
#define VERSION_OTHER 2
// 各メニューサイズ
#define ROOTMENU_SIZE 10
#define ROOTMENU_SIZE 11
#define OWNERMENU_SIZE 6
#define PARENTALMENU_SIZE 12
#define OTHERMENU_SIZE 11
@ -164,7 +171,8 @@
#define SECURE_HW_MENU_SIZE 6
#define SCFG_ARM7_MENU_SIZE 47
#define SCFG_ARM9_MENU_SIZE 24
#define VERSIONMENU_SIZE 3
#define SYSMENU_MENU_SIZE 5
#define VERSIONMENU_SIZE 2
extern int s_numMenu[];
@ -175,6 +183,7 @@ extern const char *s_strNormalHWMenu[];
extern const char *s_strSecureHWMenu[];
extern const char *s_strSCFGARM7Menu[];
extern const char *s_strSCFGARM9Menu[];
extern const char *s_strSystemMenu[];
extern const char *s_strVersionMenu[];
extern const char **s_strMetaMenu[];
extern const char *s_strARM7RegisterName[];

View File

@ -19,15 +19,33 @@
#include <stdlib.h>
#include <twl/os/common/ownerInfoEx_private.h>
#include <twl/os/common/sharedFont.h>
#include <twl/na.h>
#include "misc.h"
#include "viewSystemInfo.h"
#include "strResource.h"
#include "control.h"
#include "myIoreg_SCFG.h"
#define DISPINFO_BUFSIZE 64
#define WL_TITLEID 0x0003000F484E4341
#define FS_VERSION_FILE "verdata:/version.bin"
#define FS_EULA_URL_FILE "verdata:/eula_url.bin"
#define FS_NUP_HOSTNAME_FILE "verdata:/nup_host.bin"
#define FS_TIMESTAMP_FILE "verdata:/time_stamp.bin"
#define TWL_SYSMENU_VER_STR_LEN 28 // システムメニューバージョン文字列MAX bytes
#define TWL_EULA_URL_LEN 128
#define TWL_NUP_HOSTNAME_LEN 64
typedef struct SystemMenuVersion {
u16 major;
u16 minor;
u16 str[ TWL_SYSMENU_VER_STR_LEN / sizeof(u16) ];
}SystemMenuVersion;
/* function prototype ----------------------------- */
void getAllInfo( void );
void initInfo( void );
@ -41,6 +59,7 @@ void getSecureHWInfo( void );
void getSCFGARM9Info( void );
void getSCFGARM7InfoReg( void );
void getSCFGARM7InfoShared( void );
void getSysmenuInfo( void );
void getVersions( void );
void getWirelessVersion( void );
void getContentsVersion( void );
@ -107,7 +126,6 @@ void displayInfoMain( void )
// 何か操作があったときはキャンバスクリアして描画しなおし
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
NNS_G2dCharCanvasClear( &gCanvasSub, TXT_COLOR_WHITE );
// 情報一覧を描画する
drawMenu( menu, line, changeLine, isChangeMode);
@ -131,10 +149,13 @@ void initInfo( void )
infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_TITLEID_LO, DISPINFO_BUFSIZE, TRUE );
infoAlloc( gAllInfo[MENU_SCFG_ARM7], SCFG_ARM7_MI_CC, DISPINFO_BUFSIZE , TRUE );
infoAlloc( gAllInfo[MENU_SCFG_ARM7], SCFG_ARM7_MI_CA, DISPINFO_BUFSIZE , TRUE );
infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_EULA_URL, TWL_EULA_URL_LEN + 1, FALSE );
infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_NUP_HOST, TWL_NUP_HOSTNAME_LEN + 1, FALSE );
infoAlloc( gAllInfo[MENU_OWNER], OWNER_NICKNAME, OS_OWNERINFO_NICKNAME_MAX + 1 , FALSE );
infoAlloc( gAllInfo[MENU_OWNER], OWNER_COMMENT, OS_OWNERINFO_COMMENT_MAX + 1 , FALSE );
infoAlloc( gAllInfo[MENU_PARENTAL], PARENTAL_ANSWER, OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1 , FALSE );
infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_VERSION_STR, TWL_SYSMENU_VER_STR_LEN + 1, FALSE );
OS_TPrintf( "information alloc succeeded\n" );
}
@ -175,16 +196,9 @@ void getAllInfo( void )
getSCFGARM7InfoReg();
getSCFGARM7InfoShared();
getSCFGARM9Info();
#ifdef COMP_ARMADILLO
getSysmenuInfo();
getVersions();
#endif
/*
if( fuseRomAccessable )
{
}*/
printAllInfo();
OS_TPrintf("reflesh information finished\n");
@ -238,12 +252,22 @@ void displayInfoInit( void )
void printAllInfo ( void )
{
int loop1, loop2;
OS_TPrintf(" size version: %d\n", s_numMenu[MENU_VERSION]);
for(loop1=0; loop1 < ROOTMENU_SIZE; loop1++ )
{
for(loop2=0; loop2 < s_numMenu[loop1]; loop2++ )
{
DispInfoEntry *entry = &gAllInfo[loop1][loop2];
DispInfoEntry *entry;
if( loop1 == MENU_VERSION && loop2 >= MENU_OTHER )
{
int idx = loop2 - MENU_OTHER;
OS_TPrintf("%d %d : %x %x\n", loop1, loop2, gContentsTitle[idx], gContentsVersion[idx] );
continue;
}
entry = &gAllInfo[loop1][loop2];
if( entry->isNumData )
{
@ -743,7 +767,7 @@ void getSCFGARM7InfoReg( void )
// SECフラグはTRUE = 切り離し(アクセス不可), FALSE = 接続(アクセス可)
value = ( gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_SEC_MASK ) || 0 ;
gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue = value;
gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].str.sjis = s_strAccess[ !value ];
gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].str.sjis = s_strJoint[ !value ];
value = ( gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_RSEL_MASK ) || 0 ;
gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue = value;
@ -752,7 +776,7 @@ void getSCFGARM7InfoReg( void )
// SECフラグはTRUE = 切り離し(アクセス不可), FALSE = 接続(アクセス可)
value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_SEC_MASK ) || 0 ;
gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue = value;
gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].str.sjis = s_strAccess[ !value ];
gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].str.sjis = s_strJoint[ !value ];
value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_RSEL_MASK ) || 0 ;
gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue = value;
@ -1193,11 +1217,106 @@ void getSCFGARM7InfoShared( void )
}
void getSysmenuInfo( void )
{
u8 *pBuffer = (u8*) Alloc (NA_VERSION_DATA_WORK_SIZE);
if( !NA_LoadVersionDataArchive( pBuffer, NA_VERSION_DATA_WORK_SIZE ) ) {
return ;
}
// バージョンの読み出し
{
FSFile file;
SystemMenuVersion bufVersion;
s32 len;
FS_InitFile(&file);
if (!FS_OpenFileEx(&file, FS_VERSION_FILE, FS_FILEMODE_R))
{
return ;
}
len = FS_ReadFile(&file, &bufVersion, sizeof(SystemMenuVersion));
FS_CloseFile(&file);
gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_NUM].iValue = (int)( bufVersion.major << 16 | bufVersion.minor );
gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_NUM].isNumData = TRUE;
wcsncpy( gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].str.utf, bufVersion.str, TWL_SYSMENU_VER_STR_LEN );
gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].isSjis = FALSE;
}
// EULA URLの読み出し
{
FSFile file;
s32 len;
FS_InitFile(&file);
if (!FS_OpenFileEx(&file, FS_EULA_URL_FILE, FS_FILEMODE_R)) {
return;
}
len = FS_ReadFile(&file, gAllInfo[MENU_SYSMENU][SYSMENU_EULA_URL].str.sjis , TWL_EULA_URL_LEN) ;
FS_CloseFile(&file);
}
// NUP HOST NAME の読み出し
{
FSFile file;
s32 len;
FS_InitFile(&file);
if (!FS_OpenFileEx(&file, FS_NUP_HOSTNAME_FILE, FS_FILEMODE_R)) {
return;
}
len = FS_ReadFile(&file, gAllInfo[MENU_SYSMENU][SYSMENU_NUP_HOST].str.sjis, TWL_NUP_HOSTNAME_LEN);
FS_CloseFile(&file);
}
// タイムスタンプ の読み出し
{
FSFile file;
s32 len;
FS_InitFile(&file);
if (!FS_OpenFileEx(&file, FS_TIMESTAMP_FILE, FS_FILEMODE_R)) {
return ;
}
len = FS_ReadFile(&file, &gAllInfo[MENU_SYSMENU][SYSMENU_TIMESTAMP].iValue, sizeof(u32) );
FS_CloseFile(&file);
gAllInfo[MENU_SYSMENU][SYSMENU_TIMESTAMP].isNumData = TRUE;
}
// SystemMenuVersionのアンマウント
if( !NA_UnloadVersionDataArchive() ) {
return;
}
Free(pBuffer);
}
void getVersions( void )
{
#ifdef SEA_ENABLE
getWirelessVersion();
getSharedFontVersion();
getContentsVersion();
#endif
getSharedFontVersion();
}
void getWirelessVersion( void )
@ -1220,11 +1339,15 @@ void getWirelessVersion( void )
gAllInfo[MENU_VERSION][VERSION_WIRELESS].iValue = filebuf[0] *100 + filebuf[1];
gAllInfo[MENU_VERSION][VERSION_WIRELESS].isNumData = TRUE;
}
void getSharedFontVersion( void )
{
u32 time = OS_GetSharedFontTimestamp();
u32 time;
OS_InitSharedFont();
time = OS_GetSharedFontTimestamp();
OS_TPrintf("SharedFont Time Stamp %08lx\n", time );
gAllInfo[MENU_VERSION][VERSION_FONT].iValue = (int) time;
gAllInfo[MENU_VERSION][VERSION_FONT].isNumData = TRUE;
@ -1237,12 +1360,15 @@ void getContentsVersion( void )
int i;
gNumContents = NAM_GetNumTitles();
OS_TPrintf(" numContents: %d\n", gNumContents);
if( gContentsTitle == NULL )
{
// 初回処理の時はバッファを確保
gContentsTitle = (NAMTitleId*) Alloc( sizeof(NAMTitleId) * gNumContents );
gContentsVersion = (u16*) Alloc( sizeof(u16) * (u32)gNumContents);
SDK_ASSERT( gContentsTitle );
SDK_ASSERT( gContentsVersion );
}
NAM_GetTitleList( gContentsTitle, (u32)gNumContents);
@ -1251,10 +1377,11 @@ void getContentsVersion( void )
for( i=0; i<gNumContents; i++ )
{
NAM_ReadTitleInfo( &info, gContentsTitle[i] );
gContentsTitle[i] = info.titleId;
// gContentsTitle[i] = info.titleId;
gContentsVersion[i] = info.version;
}
s_numMenu[MENU_VERSION] += gNumContents;
}