mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2205 b08762b0-b915-fc4b-9d8c-17b2551a87ff
423 lines
11 KiB
C
423 lines
11 KiB
C
/*---------------------------------------------------------------------------*
|
||
Project: TwlSDK - NandInitializer
|
||
File: process_write_data.c
|
||
|
||
Copyright 2008 Nintendo. All rights reserved.
|
||
|
||
These coded instructions, statements, and computer programs contain
|
||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||
Company Ltd., and are protected by Federal copyright law. They may
|
||
not be disclosed to third parties or copied or duplicated in any form,
|
||
in whole or in part, without the prior written consent of Nintendo.
|
||
|
||
$Date:: $
|
||
$Rev$
|
||
$Author$
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
#include <twl.h>
|
||
#include <nitro/snd.h>
|
||
#include <twl/fatfs.h>
|
||
#include <nitro/card.h>
|
||
#include "kami_font.h"
|
||
#include "kami_pxi.h"
|
||
#include "process_topmenu.h"
|
||
#include "process_write_data.h"
|
||
#include "process_auto.h"
|
||
#include "process_fade.h"
|
||
#include "cursor.h"
|
||
#include "keypad.h"
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Œ^’è‹`
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
enum {
|
||
MENU_FONT=0,
|
||
MENU_WRAP,
|
||
MENU_CERT,
|
||
MENU_RETURN,
|
||
NUM_OF_MENU_SELECT
|
||
};
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
’è<E28099>”’è‹`
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
#define DOT_OF_MENU_SPACE 16
|
||
#define CURSOR_ORIGIN_X 32
|
||
#define CURSOR_ORIGIN_Y 56
|
||
#define CHAR_OF_MENU_SPACE 2
|
||
|
||
#define ROUND_UP(value, alignment) \
|
||
(((u32)(value) + (alignment-1)) & ~(alignment-1))
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
“à•”•Ï<E280A2>”’è‹`
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
static s8 sMenuSelectNo;
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
“à•”ŠÖ<C5A0>”<EFBFBD>錾
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
static BOOL WriteFontData(void);
|
||
static BOOL WriteWrapData(void);
|
||
static BOOL WriteCertData(void);
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
ƒvƒ<76>ƒZƒXŠÖ<C5A0>”’è‹`
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: WriteData ƒvƒ<76>ƒZƒX‚O
|
||
|
||
Description:
|
||
|
||
Arguments: None.
|
||
|
||
Returns: next sequence
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
void* WriteDataProcess0(void)
|
||
{
|
||
int i;
|
||
|
||
// •¶Žš—ñ‘SƒNƒŠƒA
|
||
kamiFontClear();
|
||
|
||
// ƒo<C692>[ƒWƒ‡ƒ“•\ަ
|
||
kamiFontPrintf(2, 1, FONT_COLOR_BLACK, "Write Various Data");
|
||
kamiFontPrintf(0, 2, FONT_COLOR_BLACK, "--------------------------------");
|
||
|
||
// ƒ<>ƒjƒ…<C692>[ˆê——
|
||
kamiFontPrintf(3, 6, FONT_COLOR_BLACK, "+-------------------+-----+");
|
||
kamiFontPrintf(3, 7, FONT_COLOR_BLACK, "l WRITE FONT DATA l l");
|
||
kamiFontPrintf(3, 8, FONT_COLOR_BLACK, "+-------------------+-----+");
|
||
kamiFontPrintf(3, 9, FONT_COLOR_BLACK, "l WRITE WRAP DATA l l");
|
||
kamiFontPrintf(3, 10, FONT_COLOR_BLACK, "+-------------------+-----+");
|
||
kamiFontPrintf(3, 11, FONT_COLOR_BLACK, "l WRITE CERT.SYS l l");
|
||
kamiFontPrintf(3, 12, FONT_COLOR_BLACK, "+-------------------+-----+");
|
||
kamiFontPrintf(3, 13, FONT_COLOR_BLACK, "l RETURN l l");
|
||
kamiFontPrintf(3, 14, FONT_COLOR_BLACK, "+-------------------+-----+");
|
||
|
||
// ”wŒi‘SƒNƒŠƒA
|
||
for (i=0;i<24;i++)
|
||
{
|
||
kamiFontFillChar( i, BG_COLOR_TRANS, BG_COLOR_TRANS );
|
||
}
|
||
|
||
// ”wŒi<C592>ã•”
|
||
kamiFontFillChar( 0, BG_COLOR_BROWN, BG_COLOR_BROWN );
|
||
kamiFontFillChar( 1, BG_COLOR_BROWN, BG_COLOR_BROWN );
|
||
kamiFontFillChar( 2, BG_COLOR_BROWN, BG_COLOR_TRANS );
|
||
|
||
// ƒJ<C692>[ƒ\ƒ‹<C692>Á‹Ž
|
||
SetCursorPos((u16)200, (u16)200);
|
||
|
||
FADE_IN_RETURN( WriteDataProcess1 );
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: WriteData ƒvƒ<76>ƒZƒX‚P
|
||
|
||
Description:
|
||
|
||
Arguments: None.
|
||
|
||
Returns: next sequence
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
void* WriteDataProcess1(void)
|
||
{
|
||
#ifndef NAND_INITIALIZER_LIMITED_MODE
|
||
// ƒI<C692>[ƒgŽÀ<C5BD>s—p
|
||
if (gAutoFlag)
|
||
{
|
||
sMenuSelectNo = MENU_FONT;
|
||
return WriteDataProcess2;
|
||
}
|
||
#endif
|
||
|
||
// ‘I‘ðƒ<C3B0>ƒjƒ…<C692>[‚Ì•Ï<E280A2>X
|
||
if ( kamiPadIsRepeatTrigger(PAD_KEY_UP) )
|
||
{
|
||
if (--sMenuSelectNo < 0) sMenuSelectNo = NUM_OF_MENU_SELECT -1;
|
||
}
|
||
else if ( kamiPadIsRepeatTrigger(PAD_KEY_DOWN) )
|
||
{
|
||
if (++sMenuSelectNo >= NUM_OF_MENU_SELECT) sMenuSelectNo = 0;
|
||
}
|
||
|
||
// ƒJ<C692>[ƒ\ƒ‹”z’u
|
||
SetCursorPos((u16)CURSOR_ORIGIN_X, (u16)(CURSOR_ORIGIN_Y + sMenuSelectNo * DOT_OF_MENU_SPACE));
|
||
|
||
// Œˆ’è
|
||
if (kamiPadIsTrigger(PAD_BUTTON_A))
|
||
{
|
||
return WriteDataProcess2;
|
||
}
|
||
// ƒgƒbƒvƒ<76>ƒjƒ…<C692>[‚Ö–ß‚é
|
||
else if (kamiPadIsTrigger(PAD_BUTTON_B))
|
||
{
|
||
FADE_OUT_RETURN( TopmenuProcess0 );
|
||
}
|
||
|
||
return WriteDataProcess1;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: WriteData ƒvƒ<76>ƒZƒX‚Q
|
||
|
||
Description:
|
||
|
||
Arguments: None.
|
||
|
||
Returns: next sequence
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
void* WriteDataProcess2(void)
|
||
{
|
||
BOOL result;
|
||
s16 y_pos = (s16)(7 + sMenuSelectNo * CHAR_OF_MENU_SPACE);
|
||
|
||
switch( sMenuSelectNo )
|
||
{
|
||
case MENU_FONT:
|
||
result = WriteFontData();
|
||
break;
|
||
case MENU_WRAP:
|
||
result = WriteWrapData();
|
||
break;
|
||
case MENU_CERT:
|
||
result = WriteCertData();
|
||
break;
|
||
case MENU_RETURN:
|
||
FADE_OUT_RETURN( TopmenuProcess0 );
|
||
}
|
||
|
||
if (result)
|
||
{
|
||
kamiFontPrintf(25, y_pos, FONT_COLOR_GREEN, "OK");
|
||
}
|
||
else
|
||
{
|
||
kamiFontPrintf(25, y_pos, FONT_COLOR_RED, "NG");
|
||
}
|
||
|
||
#ifndef NAND_INITIALIZER_LIMITED_MODE
|
||
// Auto—p
|
||
if (gAutoFlag)
|
||
{
|
||
static BOOL total_result = TRUE;
|
||
total_result &= result;
|
||
|
||
switch(sMenuSelectNo)
|
||
{
|
||
case MENU_FONT:
|
||
case MENU_WRAP:
|
||
#ifdef MARIOCLUB_VERSION
|
||
sMenuSelectNo++;
|
||
return WriteDataProcess2;
|
||
#endif // MARIOCLUB_VERSION
|
||
case MENU_CERT:
|
||
if (total_result)
|
||
{
|
||
gAutoProcessResult[AUTO_PROCESS_MENU_VARIOUS_DATA] = AUTO_PROCESS_RESULT_SUCCESS;
|
||
FADE_OUT_RETURN( AutoProcess1 );
|
||
}
|
||
else
|
||
{
|
||
gAutoProcessResult[AUTO_PROCESS_MENU_VARIOUS_DATA] = AUTO_PROCESS_RESULT_FAILURE;
|
||
FADE_OUT_RETURN( AutoProcess2);
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
|
||
return WriteDataProcess1;
|
||
}
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
<20>ˆ—<CB86>ŠÖ<C5A0>”’è‹`
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
static BOOL WriteFontData(void)
|
||
{
|
||
FSFile file;
|
||
BOOL open_is_ok;
|
||
BOOL read_is_ok;
|
||
void* pTempBuf;
|
||
u32 file_size;
|
||
u32 alloc_size;
|
||
BOOL result = TRUE;
|
||
|
||
// ROMƒtƒ@ƒCƒ‹ƒI<C692>[ƒvƒ“
|
||
FS_InitFile(&file);
|
||
open_is_ok = FS_OpenFile(&file, FONT_DATA_FILE_PATH_IN_SDMC);
|
||
if (!open_is_ok)
|
||
{
|
||
OS_Printf("FS_OpenFile(\"%s\") ... ERROR!\n", FONT_DATA_FILE_PATH_IN_SDMC);
|
||
return FALSE;
|
||
}
|
||
|
||
// ROMƒtƒ@ƒCƒ‹ƒŠ<C692>[ƒh
|
||
file_size = FS_GetFileLength(&file) ;
|
||
alloc_size = ROUND_UP(file_size, 32) ;
|
||
pTempBuf = OS_Alloc( alloc_size );
|
||
SDK_NULL_ASSERT(pTempBuf);
|
||
DC_InvalidateRange(pTempBuf, alloc_size);
|
||
read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size );
|
||
if (!read_is_ok)
|
||
{
|
||
kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_ReadFile(\"%s\") ... ERROR!\n", FONT_DATA_FILE_PATH_IN_SDMC);
|
||
FS_CloseFile(&file);
|
||
OS_Free(pTempBuf);
|
||
return FALSE;
|
||
}
|
||
|
||
// ROMƒtƒ@ƒCƒ‹ƒNƒ<4E><C692>[ƒY
|
||
FS_CloseFile(&file);
|
||
|
||
// ˆê’UƒtƒHƒ“ƒgƒf<C692>[ƒ^‚ð<E2809A>í<EFBFBD>œ‚·‚é
|
||
(void)FS_DeleteFile(FONT_DATA_FILE_PATH_IN_NAND);
|
||
|
||
// nand:sys/TWLFontTable.dat<61>ì<EFBFBD>¬
|
||
if (!FS_CreateFile(FONT_DATA_FILE_PATH_IN_NAND, FS_PERMIT_R | FS_PERMIT_W))
|
||
{
|
||
kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_CreateFile(%s) failed.\n", FONT_DATA_FILE_PATH_IN_NAND);
|
||
result = FALSE;
|
||
}
|
||
else
|
||
{
|
||
// nand:sys/TWLFontTable.datƒI<C692>[ƒvƒ“
|
||
FS_InitFile(&file);
|
||
open_is_ok = FS_OpenFileEx(&file, FONT_DATA_FILE_PATH_IN_NAND, FS_FILEMODE_W);
|
||
if (!open_is_ok)
|
||
{
|
||
kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_OpenFile(%s) failed.\n", FONT_DATA_FILE_PATH_IN_NAND);
|
||
result = FALSE;
|
||
}
|
||
// nand:sys/TWLFontTable.dat<61>‘‚«<E2809A>ž‚Ý
|
||
else if (FS_WriteFile(&file, pTempBuf, (s32)file_size) == -1)
|
||
{
|
||
kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_WritFile() failed.\n");
|
||
result = FALSE;
|
||
}
|
||
(void)FS_CloseFile(&file);
|
||
}
|
||
|
||
OS_Free(pTempBuf);
|
||
|
||
return result;
|
||
}
|
||
|
||
// ƒ_ƒ~<7E>[‚ÌDSƒ<53>ƒjƒ…<C692>[ƒ‰ƒbƒsƒ“ƒO—pƒtƒ@ƒCƒ‹<C692>ì<EFBFBD>¬<EFBFBD>iUIGƒ‰ƒ“ƒ`ƒƒ<C692>[‚ª<E2809A>ì‚Á‚Ä‚¢‚é‚à‚Ì<E2809A>j
|
||
static BOOL WriteWrapData(void)
|
||
{
|
||
FSFile file;
|
||
BOOL open_is_ok;
|
||
const int FATFS_CLUSTER_SIZE = 16 * 1024;
|
||
|
||
// Šù‚É‘¶<E28098>Ý‚·‚é‚Ȃ牽‚à‚µ‚È‚¢
|
||
FS_InitFile(&file);
|
||
open_is_ok = FS_OpenFile(&file, WRAP_DATA_FILE_PATH_IN_NAND);
|
||
if (open_is_ok)
|
||
{
|
||
FS_CloseFile(&file);
|
||
OS_Printf("%s is already exist.\n", WRAP_DATA_FILE_PATH_IN_NAND);
|
||
return TRUE;
|
||
}
|
||
|
||
if( FS_CreateFileAuto( WRAP_DATA_FILE_PATH_IN_NAND, FS_PERMIT_R | FS_PERMIT_W ) )
|
||
{
|
||
FSFile file;
|
||
if( FS_OpenFileEx( &file, WRAP_DATA_FILE_PATH_IN_NAND, FS_FILEMODE_RW ) )
|
||
{
|
||
(void)FS_SetFileLength( &file, FATFS_CLUSTER_SIZE );
|
||
FS_CloseFile( &file );
|
||
return TRUE;
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
static BOOL WriteCertData(void)
|
||
{
|
||
FSFile file;
|
||
BOOL open_is_ok;
|
||
BOOL read_is_ok;
|
||
void* pTempBuf;
|
||
u32 file_size;
|
||
u32 alloc_size;
|
||
BOOL result = TRUE;
|
||
|
||
// nand:/sys/cert.sys‚ªŠù‚É‘¶<E28098>Ý‚·‚é‚Ȃ牽‚à‚µ‚È‚¢
|
||
FS_InitFile(&file);
|
||
open_is_ok = FS_OpenFile(&file, CERT_DATA_FILE_PATH_IN_NAND);
|
||
if (open_is_ok)
|
||
{
|
||
FS_CloseFile(&file);
|
||
OS_Printf("%s is already exist.\n", CERT_DATA_FILE_PATH_IN_NAND);
|
||
return TRUE;
|
||
}
|
||
|
||
// ROMƒtƒ@ƒCƒ‹ƒI<C692>[ƒvƒ“
|
||
FS_InitFile(&file);
|
||
open_is_ok = FS_OpenFile(&file, CERT_DATA_FILE_PATH_IN_ROM);
|
||
if (!open_is_ok)
|
||
{
|
||
OS_Printf("FS_OpenFile(\"%s\") ... ERROR!\n", CERT_DATA_FILE_PATH_IN_ROM);
|
||
return FALSE;
|
||
}
|
||
|
||
// ROMƒtƒ@ƒCƒ‹ƒŠ<C692>[ƒh
|
||
file_size = FS_GetFileLength(&file) ;
|
||
alloc_size = ROUND_UP(file_size, 32) ;
|
||
pTempBuf = OS_Alloc( alloc_size );
|
||
SDK_NULL_ASSERT(pTempBuf);
|
||
DC_InvalidateRange(pTempBuf, alloc_size);
|
||
read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size );
|
||
if (!read_is_ok)
|
||
{
|
||
kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_ReadFile(\"%s\") ... ERROR!\n", CERT_DATA_FILE_PATH_IN_ROM);
|
||
FS_CloseFile(&file);
|
||
OS_Free(pTempBuf);
|
||
return FALSE;
|
||
}
|
||
|
||
// ROMƒtƒ@ƒCƒ‹ƒNƒ<4E><C692>[ƒY
|
||
FS_CloseFile(&file);
|
||
|
||
// nand:sys/cert.sys<79>ì<EFBFBD>¬
|
||
if (!FS_CreateFile(CERT_DATA_FILE_PATH_IN_NAND, FS_PERMIT_R | FS_PERMIT_W))
|
||
{
|
||
kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_CreateFile(%s) failed.\n", CERT_DATA_FILE_PATH_IN_NAND);
|
||
result = FALSE;
|
||
}
|
||
else
|
||
{
|
||
// nand:sys/cert.sysƒI<C692>[ƒvƒ“
|
||
FS_InitFile(&file);
|
||
open_is_ok = FS_OpenFileEx(&file, CERT_DATA_FILE_PATH_IN_NAND, FS_FILEMODE_W);
|
||
if (!open_is_ok)
|
||
{
|
||
kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_OpenFile(%s) failed.\n", CERT_DATA_FILE_PATH_IN_NAND);
|
||
result = FALSE;
|
||
}
|
||
// nand:sys/cert.sys<79>‘‚«<E2809A>ž‚Ý
|
||
else if (FS_WriteFile(&file, pTempBuf, (s32)file_size) == -1)
|
||
{
|
||
kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_WritFile() failed.\n");
|
||
result = FALSE;
|
||
}
|
||
(void)FS_CloseFile(&file);
|
||
}
|
||
|
||
OS_Free(pTempBuf);
|
||
|
||
return result;
|
||
}
|