mirror of
https://github.com/rvtr/TwlToolsRED.git
synced 2025-10-31 06:41:18 -04:00
900 lines
24 KiB
C
900 lines
24 KiB
C
#include <twl.h>
|
||
#include <nitro/nvram/nvram.h>
|
||
#include <twl/sea.h>
|
||
#include <twl/lcfg.h>
|
||
#include <twl/na.h>
|
||
#include <twl/nam.h>
|
||
|
||
#include "ecdl.h"
|
||
|
||
#include <NitroWiFi/nhttp.h>
|
||
#include <NitroWiFi/nssl.h>
|
||
#include <NitroWiFi/ncfg.h>
|
||
|
||
#include "font.h"
|
||
#include "text.h"
|
||
#include "mprintf.h"
|
||
#include "gfx.h"
|
||
#include "key.h"
|
||
#include "my_fs_util.h"
|
||
#include "hwi.h"
|
||
#include "mydata.h"
|
||
|
||
#include "error_report.h"
|
||
|
||
#include "myfilename.h"
|
||
|
||
#include "pre_install.h"
|
||
#include "hatamotolib.h"
|
||
#include "mywlan.h"
|
||
#include "netconnect.h"
|
||
#include "sitedefs.h"
|
||
#include "wcm_control.h"
|
||
|
||
|
||
#define HATAMOTO_LIB 1
|
||
|
||
#define THREAD_COMMAND_INSTALL_APP 1
|
||
#define THREAD_COMMAND_INSTALL_TICKET 2
|
||
#define THREAD_COMMAND_DELETE_APP_CONTENT 3
|
||
#define THREAD_COMMAND_DELETE_APP_COMPLETELY 4
|
||
#define THREAD_COMMAND_DELETE_DEVKP 5
|
||
#define THREAD_COMMAND_DOWNLOAD_APP 6
|
||
|
||
|
||
static void init_my_thread(void);
|
||
static BOOL start_my_thread(u32 command);
|
||
|
||
static FSEventHook sSDHook;
|
||
static BOOL sd_card_flag = FALSE;
|
||
|
||
static BOOL development_console_flag = FALSE;
|
||
|
||
static OSHeapHandle hHeap;
|
||
static u32 allocator_total_size = 0;
|
||
|
||
static u8 org_region = 0;
|
||
static u64 org_fuseId = 0;
|
||
|
||
static BOOL pushed_power_button = FALSE;
|
||
static BOOL throw_pushed_power_button = FALSE;
|
||
|
||
static LCFGTWLHWNormalInfo hwn_info;
|
||
static LCFGTWLHWSecureInfo hws_info;
|
||
|
||
static MyData mydata;
|
||
|
||
static int vram_num_main = 1;
|
||
static int vram_num_sub = 0;
|
||
|
||
static u64 eticket_only_id_buf[100];
|
||
static int eticket_only_id_count = 0;
|
||
|
||
static void fill_command(void)
|
||
{
|
||
if( development_console_flag == FALSE ) {
|
||
/* —ÊŽY‹@—p */
|
||
/*
|
||
0x00030004484e474a, 0 , 0 , rom:/tads/TWL-HNGJ-v256.tad,
|
||
0x000300044b32444a, 0 , 0 , rom:/tads/TWL-K2DJ-v0.tad,
|
||
0x000300044b47554a, 0 , 0 , rom:/tads/TWL-KGUJ-v257.tad,
|
||
|
||
0x00030004434f5041, 0 , 0 , sdmc:/sdtads/en_CooperationA.tad,
|
||
0x0003001548485741, 0 , 0 , sdmc:/sdtads/en_HHWA.Release.tad,
|
||
0x0003000548504341, 0 , 0 , sdmc:/sdtads/en_HPCA.Release.tad,
|
||
|
||
*/
|
||
#if 0
|
||
/* ROM‚̂₠*/
|
||
eticket_only_id_buf[0] = 0x00030004484e474a;
|
||
eticket_only_id_buf[1] = 0x000300044b32444a;
|
||
eticket_only_id_buf[2] = 0x000300044b47554a;
|
||
#else
|
||
/* SD‚̂₠*/
|
||
eticket_only_id_buf[0] = 0x00030004434f5041;
|
||
eticket_only_id_buf[1] = 0x0003001548485741;
|
||
eticket_only_id_buf[2] = 0x0003000548504341;
|
||
#endif
|
||
eticket_only_id_count = 3;
|
||
}
|
||
else {
|
||
/* ŠJ”‹@—p */
|
||
/*
|
||
ROM
|
||
0x0003000434424e41, 0 , 0 , rom:/tads_dev/backupSample.tad,
|
||
0x00030004344a4541, 0 , 0 , rom:/tads_dev/encodeSD.tad,
|
||
0x0003000434534e41, 0 , 0 , rom:/tads_dev/nandAppSample.tad,
|
||
|
||
SD
|
||
0x0003000434424e41, 0 , 0 , sdmc:/sdtaddevs/en_backupSample.tad,
|
||
0x0003000444534943, 0 , 0 , sdmc:/sdtaddevs/en_chavitt.tad,
|
||
0x00030004344a4541, 0 , 0 , sdmc:/sdtaddevs/en_encodeSD.tad,
|
||
0x0003000434534e41, 0 , 0 , sdmc:/sdtaddevs/en_nandAppSample.tad,
|
||
*/
|
||
|
||
#if 1
|
||
/* ROM‚̂₠*/
|
||
eticket_only_id_buf[0] = 0x0003000434424e41;
|
||
eticket_only_id_buf[1] = 0x00030004344a4541;
|
||
eticket_only_id_buf[2] = 0x0003000434534e41;
|
||
eticket_only_id_count = 3;
|
||
#else
|
||
/* SD‚̂₠*/
|
||
eticket_only_id_buf[0] = 0x0003000434424e41;
|
||
eticket_only_id_buf[1] = 0x0003000434534e41;
|
||
eticket_only_id_count = 2;
|
||
#endif
|
||
|
||
}
|
||
}
|
||
|
||
static BOOL myTWLCardCallback( void )
|
||
{
|
||
return FALSE; // means that not terminate.
|
||
}
|
||
|
||
static PMExitCallbackInfo pmexitcallbackinfo;
|
||
|
||
static void pmexitcallback(void *arg)
|
||
{
|
||
#pragma unused(arg)
|
||
/* <20>ˆ—<CB86>’†<E28099>iƒf<C692>[ƒ^<5E>‘‚«<E2809A>ž‚Ý’†<E28099>j‚Ȃ烊ƒZƒbƒg‚ðƒuƒ<75>ƒbƒN‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢ */
|
||
pushed_power_button = TRUE;
|
||
}
|
||
|
||
static void *AllocForNAM(size_t size)
|
||
{
|
||
OSIntrMode old = OS_DisableInterrupts();
|
||
void* p = OS_Alloc(size);
|
||
OS_RestoreInterrupts(old);
|
||
return p;
|
||
}
|
||
|
||
static void FreeForNAM(void* ptr)
|
||
{
|
||
if( ptr != NULL ) {
|
||
OSIntrMode old = OS_DisableInterrupts();
|
||
OS_Free(ptr);
|
||
OS_RestoreInterrupts(old);
|
||
}
|
||
}
|
||
|
||
|
||
static void SDEvents(void *userdata, FSEvent event, void *arg)
|
||
{
|
||
(void)userdata;
|
||
(void)arg;
|
||
if (event == FS_EVENT_MEDIA_REMOVED) {
|
||
sd_card_flag = FALSE;
|
||
m_set_palette(tc[0], M_TEXT_COLOR_YELLOW );
|
||
mprintf("SD card:removed!\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
}
|
||
else if (event == FS_EVENT_MEDIA_INSERTED) {
|
||
sd_card_flag = TRUE;
|
||
m_set_palette(tc[0], M_TEXT_COLOR_YELLOW );
|
||
mprintf("SD card:inserted!\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
}
|
||
}
|
||
|
||
|
||
static BOOL LoadWlanConfig(void)
|
||
{
|
||
u8 buf[256];
|
||
int len;
|
||
int i; /* ƒ†<C692>[ƒU<C692>[ƒf<C692>[ƒ^<5E>‘‚«<E2809A>ž‚݃‚<C692>[ƒh */
|
||
if( TRUE == LoadWlanConfigFile("sdmc:/wlan_cfg.txt") ) {
|
||
OS_TPrintf("SSID = %s\n", GetWlanSSID());
|
||
OS_TPrintf("MODE = ");
|
||
#if 0
|
||
mfprintf(tc[3],"SSID = %s\n", GetWlanSSID());
|
||
mfprintf(tc[3],"MODE = ");
|
||
#endif
|
||
switch( GetWlanMode() ) {
|
||
case WCM_WEPMODE_NONE:
|
||
OS_TPrintf("NONE\n");
|
||
// mfprintf(tc[3],"NONE\n");
|
||
break;
|
||
case WM_WEPMODE_40BIT:
|
||
OS_TPrintf("WEP40\n");
|
||
// mfprintf(tc[3],"WEP128\n");
|
||
break;
|
||
case WM_WEPMODE_104BIT:
|
||
OS_TPrintf("WEP104\n");
|
||
// mfprintf(tc[3],"WEP128\n");
|
||
break;
|
||
case WM_WEPMODE_128BIT:
|
||
OS_TPrintf("WEP128\n");
|
||
// mfprintf(tc[3],"WEP128\n");
|
||
break;
|
||
case WCM_WEPMODE_WPA_TKIP:
|
||
OS_TPrintf("WPA-TKIP\n");
|
||
// mfprintf(tc[3],"WPA-TKIP\n");
|
||
break;
|
||
case WCM_WEPMODE_WPA2_TKIP:
|
||
OS_TPrintf("WPA2-TKIP\n");
|
||
// mfprintf(tc[3],"WPA2-TKIP\n");
|
||
break;
|
||
case WCM_WEPMODE_WPA_AES:
|
||
OS_TPrintf("WPA-AES\n");
|
||
// mfprintf(tc[3],"WPA-AES\n");
|
||
break;
|
||
case WCM_WEPMODE_WPA2_AES :
|
||
OS_TPrintf("WPA2-AES\n");
|
||
// mfprintf(tc[3],"WPA2-AES\n");
|
||
break;
|
||
defalut:
|
||
OS_TPrintf("Unknow mode..\n");
|
||
// mfprintf(tc[3],"Unknow mode..\n");
|
||
break;
|
||
}
|
||
|
||
if( TRUE == GetKeyModeStr() ) {
|
||
OS_TPrintf("KEY STR = %s\n", GetWlanKEYSTR());
|
||
// mfprintf(tc[3],"KEY STR = %s\n", GetWlanKEYSTR());
|
||
}
|
||
else {
|
||
len = GetWlanKEYBIN(buf);
|
||
if( len ) {
|
||
OS_TPrintf("KEY BIN = 0x");
|
||
// mfprintf(tc[3],"KEY BIN = 0x");
|
||
for( i = 0 ; i < len ; i++ ) {
|
||
OS_TPrintf("%02X",buf[i]);
|
||
// mfprintf(tc[3],"%02X",buf[i]);
|
||
}
|
||
OS_TPrintf("\n");
|
||
// mfprintf(tc[3],"\n");
|
||
}
|
||
}
|
||
// mfprintf(tc[3],"\n");
|
||
|
||
if( TRUE == GetDhcpMODE() ) {
|
||
// mfprintf(tc[3],"DHCP client\n");
|
||
}
|
||
}
|
||
else {
|
||
OS_TPrintf("Invalid wlan cfg file\n");
|
||
// mfprintf(tc[3],"Invalid wlan cfg file\n");
|
||
mprintf("Invalid wlan cfg file\n");
|
||
return FALSE;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
void TwlMain(void)
|
||
{
|
||
int i,n;
|
||
void* newArenaLo;
|
||
u8 macAddress[6];
|
||
ESError es_error_code;
|
||
u16 keyData;
|
||
int loop_counter = 0;
|
||
RTCDate rtc_date;
|
||
RTCTime rtc_time;
|
||
u16 BatterylevelBuf = 0;
|
||
BOOL isAcConnectedBuf = FALSE;
|
||
|
||
OS_Init();
|
||
OS_InitThread();
|
||
|
||
OS_InitTick();
|
||
OS_InitAlarm();
|
||
// ƒ}ƒXƒ^<5E>[Š„‚è<E2809A>ž‚݃tƒ‰ƒO‚ð‹–‰Â‚É
|
||
(void)OS_EnableIrq();
|
||
|
||
// IRQ Š„‚è<E2809A>ž‚Ý‚ð‹–‰Â‚µ‚Ü‚·
|
||
(void)OS_EnableInterrupts();
|
||
|
||
// ARM7‚Ƃ̒Ê<E28099>MFIFOŠ„‚è<E2809A>ž‚Ý‹–‰Â
|
||
(void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV);
|
||
|
||
// ƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€<C692>‰Šú‰»
|
||
FS_Init( FS_DMA_NOT_USE );
|
||
|
||
PM_Init();
|
||
// ƒ<>ƒCƒ“ƒAƒŠ<C692>[ƒi‚̃Aƒ<41>ƒP<C692>[ƒgƒVƒXƒeƒ€‚ð<E2809A>‰Šú‰»
|
||
newArenaLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1);
|
||
OS_SetMainArenaLo(newArenaLo);
|
||
|
||
// ƒ<>ƒCƒ“ƒAƒŠ<C692>[ƒi<C692>ã‚Ƀq<C692>[ƒv‚ð<E2809A>ì<EFBFBD>¬
|
||
hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi());
|
||
OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap);
|
||
|
||
allocator_total_size = OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap);
|
||
|
||
|
||
Gfx_Init();
|
||
|
||
RTC_Init();
|
||
|
||
SCFG_Init();
|
||
|
||
NVRAMi_Init();
|
||
|
||
CARD_Init();
|
||
CARD_SetPulledOutCallback( myTWLCardCallback );
|
||
|
||
// •K<E280A2>{<7B>GSEA ‚Ì<E2809A>‰Šú‰»
|
||
SEA_Init();
|
||
|
||
|
||
development_console_flag = IsThisDevelopmentConsole();
|
||
if(TRUE == development_console_flag ) {
|
||
mprintf("--development console--\n");
|
||
}
|
||
|
||
PM_SetAutoExit( FALSE );
|
||
PM_SetExitCallbackInfo( &pmexitcallbackinfo,pmexitcallback, NULL);
|
||
PM_PrependPreExitCallback( &pmexitcallbackinfo );
|
||
|
||
|
||
ES_InitLib();
|
||
|
||
|
||
if( FALSE == MiyaReadHWNormalInfo( &hwn_info ) ) {
|
||
m_set_palette(tc[0], 0x1); /* red */
|
||
mprintf("HW Normal Info. read error.\n");
|
||
m_set_palette(tc[0], 0xF);
|
||
}
|
||
|
||
// mprintf("HW Secure Info. read ");
|
||
if( FALSE == MiyaReadHWSecureInfo( &hws_info ) ) {
|
||
m_set_palette(tc[0], 0x1); /* red */
|
||
mprintf("HW Secure Info. read error.\n");
|
||
m_set_palette(tc[0], 0xF); /* white */
|
||
}
|
||
|
||
|
||
// ƒjƒbƒNƒl<C692>[ƒ€‚ª‹ó‚È‚ç“K“–‚É<E2809A>Ý’è
|
||
if( *LCFG_TSD_GetNicknamePtr() == L'\0' ) {
|
||
LCFG_TSD_SetNickname((const u16*)(L"repair-tool"));
|
||
// mprintf("Set dummy Nickname\n");
|
||
}
|
||
|
||
|
||
|
||
// region
|
||
org_region = LCFG_THW_GetRegion();
|
||
// ES Device ID
|
||
|
||
// <20>‘‚ª‘I‘ð‚³‚ê‚Ä‚¢‚È‚¢‚È‚ç“K“–‚É<E2809A>Ý’è
|
||
if( LCFG_TSD_GetCountry() == LCFG_TWL_COUNTRY_UNDEFINED ) {
|
||
|
||
mprintf("Set dummy Country code ");
|
||
|
||
switch( org_region ) {
|
||
case OS_TWL_REGION_JAPAN:
|
||
LCFG_TSD_SetCountry(LCFG_TWL_COUNTRY_JAPAN);
|
||
mprintf("JPN");
|
||
break;
|
||
case OS_TWL_REGION_AMERICA:
|
||
LCFG_TSD_SetCountry(LCFG_TWL_COUNTRY_UNITED_STATES);
|
||
mprintf("USA");
|
||
break;
|
||
case OS_TWL_REGION_EUROPE:
|
||
LCFG_TSD_SetCountry(LCFG_TWL_COUNTRY_UNITED_KINGDOM);
|
||
mprintf("UK");
|
||
break;
|
||
case OS_TWL_REGION_AUSTRALIA:
|
||
LCFG_TSD_SetCountry(LCFG_TWL_COUNTRY_AUSTRALIA);
|
||
mprintf("AUS");
|
||
break;
|
||
case OS_TWL_REGION_CHINA:
|
||
LCFG_TSD_SetCountry(LCFG_TWL_COUNTRY_CHINA);
|
||
mprintf("CHN");
|
||
break;
|
||
case OS_TWL_REGION_KOREA:
|
||
LCFG_TSD_SetCountry(LCFG_TWL_COUNTRY_SOUTH_KOREA);
|
||
mprintf("KOR");
|
||
break;
|
||
case OS_TWL_REGION_MAX:
|
||
default:
|
||
mprintf("JPN");
|
||
LCFG_TSD_SetCountry(LCFG_TWL_COUNTRY_JAPAN);
|
||
break;
|
||
}
|
||
mprintf("\n");
|
||
}
|
||
|
||
|
||
org_fuseId = SCFG_ReadFuseData();
|
||
OS_TPrintf("eFuseID: %08X%08X\n", (u32)(org_fuseId >> 32), (u32)(org_fuseId));
|
||
|
||
OS_GetMacAddress( macAddress );
|
||
|
||
OS_TPrintf("%s %s %d\n", __FILE__,__FUNCTION__,__LINE__ );
|
||
|
||
mydata.shop_record_flag = FALSE;
|
||
es_error_code = ES_GetDeviceId(&mydata.deviceId);
|
||
if( es_error_code == ES_ERR_OK ) {
|
||
if( TRUE == CheckShopRecord( NULL ) ) {
|
||
mydata.shop_record_flag = TRUE;
|
||
}
|
||
else {
|
||
mprintf("no shop record\n");
|
||
}
|
||
}
|
||
else {
|
||
OS_TPrintf("es_error_code = %d\n", es_error_code );
|
||
}
|
||
OS_TPrintf("%s %s %d\n", __FILE__,__FUNCTION__,__LINE__ );
|
||
// NAM ‚Ì<E2809A>‰Šú‰»
|
||
NAM_Init(&AllocForNAM, &FreeForNAM);
|
||
|
||
|
||
if( FALSE == SDCardValidation() ) {
|
||
sd_card_flag = FALSE;
|
||
m_set_palette(tc[0], 0x1); /* red */
|
||
mprintf("No SD card\n");
|
||
}
|
||
else {
|
||
sd_card_flag = TRUE;
|
||
}
|
||
m_set_palette(tc[0], 0xF); /* white */
|
||
|
||
|
||
FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL);
|
||
|
||
|
||
// OS_TPrintf("%s %s %d\n", __FILE__,__FUNCTION__,__LINE__ );
|
||
|
||
init_my_thread();
|
||
|
||
|
||
while( 1 ) {
|
||
Gfx_Render( vram_num_main , vram_num_sub );
|
||
OS_WaitVBlankIntr();
|
||
(void)RTC_GetDate( &rtc_date );
|
||
(void)RTC_GetTime( &rtc_time );
|
||
|
||
keyData = m_get_key_trigger();
|
||
|
||
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 ) {
|
||
vram_num_main--;
|
||
if( vram_num_main < 0 ) {
|
||
vram_num_main = (MAX_VRAM_NUM-1);
|
||
}
|
||
}
|
||
else if ( keyData & PAD_BUTTON_A ) {
|
||
fill_command();
|
||
(void)start_my_thread(THREAD_COMMAND_INSTALL_APP);
|
||
}
|
||
else if ( keyData & PAD_BUTTON_B ) {
|
||
fill_command();
|
||
(void)start_my_thread(THREAD_COMMAND_INSTALL_TICKET);
|
||
}
|
||
else if ( keyData & PAD_BUTTON_X ) {
|
||
fill_command();
|
||
(void)start_my_thread(THREAD_COMMAND_DELETE_APP_CONTENT);
|
||
}
|
||
else if ( keyData & PAD_BUTTON_Y ) {
|
||
fill_command();
|
||
(void)start_my_thread(THREAD_COMMAND_DELETE_APP_COMPLETELY);
|
||
}
|
||
else if ( keyData & PAD_BUTTON_START ) {
|
||
if( sd_card_flag == TRUE ) {
|
||
(void)start_my_thread(THREAD_COMMAND_DELETE_DEVKP);
|
||
}
|
||
}
|
||
else if ( keyData & PAD_BUTTON_SELECT ) {
|
||
(void)start_my_thread(THREAD_COMMAND_DOWNLOAD_APP);
|
||
}
|
||
else if ( keyData & PAD_KEY_RIGHT ) {
|
||
n = m_get_display_offset_x(tc[0]);
|
||
n++;
|
||
m_set_display_offset_x(tc[0], n);
|
||
}
|
||
else if ( keyData & PAD_KEY_LEFT ) {
|
||
n = m_get_display_offset_x(tc[0]);
|
||
n--;
|
||
m_set_display_offset_x(tc[0], n);
|
||
}
|
||
else if ( keyData & PAD_KEY_UP ) {
|
||
n = m_get_display_offset_y(tc[0]);
|
||
n++;
|
||
m_set_display_offset_y(tc[0], n);
|
||
}
|
||
else if ( keyData & PAD_KEY_DOWN ) {
|
||
n = m_get_display_offset_y(tc[0]);
|
||
n--;
|
||
m_set_display_offset_y(tc[0], n);
|
||
}
|
||
|
||
|
||
mfprintf(tc[1], "\fAuto Pre-install Tool\n");
|
||
|
||
/* ƒ†ƒj<C692>[ƒN‚h‚c‚Í•\ަ‚µ‚È‚‚Ä‚¢‚¢<E2809A>H */
|
||
m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE );
|
||
mfprintf(tc[1], "Unique ID:\n");
|
||
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
|
||
mfprintf(tc[1], " ");
|
||
for( i = 0; i < LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN/2 ; i++ ) {
|
||
mfprintf(tc[1], "%02X:", hwn_info.movableUniqueID[i]);
|
||
}
|
||
mfprintf(tc[1], "\n ");
|
||
for( ; i < LCFG_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN ; i++ ) {
|
||
mfprintf(tc[1], "%02X:", hwn_info.movableUniqueID[i]);
|
||
}
|
||
mfprintf(tc[1], "\n\n");
|
||
|
||
|
||
m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE );
|
||
mfprintf(tc[1], "Serial No. ");
|
||
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
|
||
mfprintf(tc[1], "%s\n", hws_info.serialNo);
|
||
mfprintf(tc[1], "\n");
|
||
|
||
|
||
m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE );
|
||
mfprintf(tc[1], "eFuse ID: ");
|
||
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
|
||
mfprintf(tc[1],"%08X%08X\n\n", (u32)(org_fuseId >> 32), (u32)(org_fuseId));
|
||
|
||
|
||
m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE );
|
||
mfprintf(tc[1],"MAC add.: ");
|
||
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
|
||
mfprintf(tc[1],"%02X:%02X:%02X:%02X:%02X:%02X", macAddress[0],macAddress[1],
|
||
macAddress[2], macAddress[3], macAddress[4], macAddress[5]);
|
||
mfprintf(tc[1],"\n\n");
|
||
|
||
m_set_palette(tc[1], M_TEXT_COLOR_LIGHTBLUE );
|
||
mfprintf(tc[1],"Device ID: ");
|
||
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
|
||
|
||
/* ‚±‚±‚Å mydata.shop_record_flag<61>@‚Æ‚¢‚Á‚µ‚å‚É */
|
||
if( TRUE == mydata.shop_record_flag ) {
|
||
mfprintf(tc[1],"%s\n", mydata.bmsDeviceId);
|
||
}
|
||
else {
|
||
m_set_palette(tc[1], M_TEXT_COLOR_YELLOW );
|
||
mfprintf(tc[1],"-----------\n");
|
||
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
|
||
}
|
||
mfprintf(tc[1],"\n");
|
||
if( (loop_counter % 60*5) == 0 ) {
|
||
// PM_RESULT_SUCCESS
|
||
(void)PM_GetACAdapter( &isAcConnectedBuf );
|
||
(void)PM_GetBatteryLevel( &BatterylevelBuf );
|
||
}
|
||
mfprintf(tc[1], "%4d/%02d/%02d %02d:%02d:%02d ",
|
||
rtc_date.year + 2000, rtc_date.month , rtc_date.day,
|
||
rtc_time.hour , rtc_time.minute , rtc_time.second );
|
||
|
||
if( isAcConnectedBuf == TRUE ) {
|
||
m_set_palette(tc[1], M_TEXT_COLOR_BLUE );
|
||
mfprintf(tc[1], "AC. \n\n");
|
||
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
|
||
}
|
||
else {
|
||
mfprintf(tc[1], "Batt.Lv ");
|
||
switch( BatterylevelBuf ) {
|
||
case 0:
|
||
case 1:
|
||
m_set_palette(tc[1], M_TEXT_COLOR_RED );
|
||
break;
|
||
case 2:
|
||
case 3:
|
||
case 4:
|
||
m_set_palette(tc[1], M_TEXT_COLOR_YELLOW );
|
||
break;
|
||
default:
|
||
m_set_palette(tc[1], M_TEXT_COLOR_GREEN );
|
||
break;
|
||
}
|
||
mfprintf(tc[1], "%d/5\n\n" , BatterylevelBuf);
|
||
m_set_palette(tc[1], M_TEXT_COLOR_WHITE );
|
||
}
|
||
mfprintf(tc[1], "A -> Install App.\n");
|
||
mfprintf(tc[1], "B -> Install Ticket\n");
|
||
mfprintf(tc[1], "X -> Delete App. content\n");
|
||
mfprintf(tc[1], "Y -> Delete App. completely\n");
|
||
|
||
mfprintf(tc[1], "START -> Delete /sys/dev.kp\n");
|
||
mfprintf(tc[1], "SELECT -> Download App.\n");
|
||
|
||
if( pushed_power_button == TRUE ) {
|
||
OS_TPrintf("%s Power button pressed!\n",__FUNCTION__);
|
||
PM_ReadyToExit();
|
||
pushed_power_button = FALSE;
|
||
}
|
||
|
||
loop_counter++;
|
||
}
|
||
OS_Terminate();
|
||
|
||
}
|
||
|
||
|
||
#if 0
|
||
static MY_USER_APP_TID title_id_buf_ptr[] = {
|
||
{0x000300044b47554a, 2, FALSE },
|
||
{0x000300044b32444a, 2, FALSE },
|
||
{0x00030004484e474a, 2, FALSE },
|
||
{0x00030004346b6941, 2, FALSE },
|
||
{0x00030004346b6a41, 2, FALSE },
|
||
{0x00030004346b6b41, 2, FALSE },
|
||
{0x00030004346b6c41, 2, FALSE },
|
||
{0x0003000434656241, 2, FALSE },
|
||
{0x0003000434657541, 2, FALSE },
|
||
{0x0003000430484141, 2, FALSE },
|
||
{0x0003000430484941, 2, FALSE },
|
||
{0x000300044b58374a, 2, FALSE },
|
||
{0x000300044b53394a, 2, FALSE }
|
||
};
|
||
|
||
static int title_id_count = sizeof(title_id_buf_ptr)/sizeof(MY_USER_APP_TID);
|
||
#else
|
||
static MY_USER_APP_TID *title_id_buf_ptr;
|
||
static int title_id_count = 0;
|
||
#endif
|
||
|
||
|
||
#ifdef HATAMOTO_LIB
|
||
static void ec_download_func(void)
|
||
{
|
||
int i;
|
||
ECError rv;
|
||
BOOL ret_flag = TRUE;
|
||
int ec_download_ret;
|
||
char game_code_buf[5];
|
||
int is_personalized;
|
||
u64 tid;
|
||
|
||
|
||
mprintf("-wireless AP conf. load ");
|
||
if( TRUE == LoadWlanConfig() ) {
|
||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
|
||
mprintf("OK.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
|
||
#if 0
|
||
SetupShopTitleId(); /* ƒGƒ‰<C692>[‚͂Ȃ¢ */
|
||
|
||
// <20>H<EFBFBD>Fƒ†<C692>[ƒU<C692>ݒ肪‚³‚ê‚Ä‚¢‚È‚¢‚Æ<E2809A>Ú‘±‚Å‚«‚È‚¢‚̂œK“–‚É<E2809A>Ý’è
|
||
// SetupUserInfo();
|
||
// •K<E280A2>{<7B>Fƒo<C692>[ƒWƒ‡ƒ“ƒf<C692>[ƒ^‚̃}ƒEƒ“ƒg
|
||
if( FALSE == SetupVerData() ) {
|
||
mprintf("%s failed SetupVerData\n", __FUNCTION__);
|
||
ret_flag = FALSE;
|
||
goto end_log_e;
|
||
}
|
||
#endif
|
||
// •K<E280A2>{<7B>Fƒlƒbƒgƒ<67><C692>[ƒN‚Ö‚Ì<E2809A>Ú‘±
|
||
if( 0 != NcStart(SITEDEFS_DEFAULTCLASS) ) {
|
||
mprintf("%s failed NcStart\n", __FUNCTION__);
|
||
ret_flag = FALSE;
|
||
goto end_log_e;
|
||
}
|
||
|
||
/******** ƒlƒbƒgƒ<67><C692>[ƒN‚ɂ‚Ȃ¢‚¾ *************/
|
||
// •K<E280A2>{<7B>FHTTP ‚Æ SSL ‚Ì<E2809A>‰Šú‰»
|
||
mprintf("-setup NSSL & NHTTP\n");
|
||
SetupNSSL();
|
||
if( FALSE == SetupNHTTP() ) {
|
||
ret_flag = FALSE;
|
||
mprintf(" %s failed SetupNHTTP\n", __FUNCTION__);
|
||
goto end_nhttp;
|
||
}
|
||
|
||
/******** NHTTP & NSSL‚ɂ‚Ȃ¢‚¾ *************/
|
||
// •K<E280A2>{<7B>FEC ‚Ì<E2809A>‰Šú‰»
|
||
mprintf("-setup EC\n");
|
||
|
||
if( FALSE == SetupEC() ) {
|
||
ret_flag = FALSE;
|
||
mprintf(" %s failed SetupEC\n", __FUNCTION__);
|
||
goto end_ec;
|
||
}
|
||
|
||
// •K<E280A2>{<7B>FƒfƒoƒCƒX<C692>Ø–¾<E28093>‘‚Ì”<E2809D>s
|
||
if( FALSE == KPSClient() ) {
|
||
ret_flag = FALSE;
|
||
mprintf("%s failed KPSClient\n", __FUNCTION__);
|
||
goto end_ec_f;
|
||
}
|
||
|
||
|
||
|
||
for( i = 0; i < title_id_count ; i++ ) {
|
||
tid = title_id_buf_ptr[i].tid;
|
||
is_personalized = title_id_buf_ptr[i].is_personalized = 2;
|
||
(void)my_fs_Tid_To_GameCode(tid, game_code_buf);
|
||
mprintf(" id %08X %08X [%s] %c\n", (u32)(tid >> 32), (u32)tid, game_code_buf,
|
||
(is_personalized == 1)? 'P':'D');
|
||
}
|
||
|
||
|
||
|
||
ec_download_ret = ECDownload_Auto((MY_USER_APP_TID *)title_id_buf_ptr , (u32)title_id_count);
|
||
|
||
if( ec_download_ret == ECDOWNLOAD_FAILURE ) {
|
||
ret_flag = FALSE;
|
||
mprintf("%s failed ECDownload 1\n", __FUNCTION__);
|
||
}
|
||
else if( ec_download_ret == ECDOWNLOAD_DUMMY ) {
|
||
ret_flag = FALSE;
|
||
mprintf("%s failed ECDownload 2\n", __FUNCTION__);
|
||
}
|
||
// •s—v<E28094>FƒZ<C692>[ƒuƒf<C692>[ƒ^—̈æ‚ð<E2809A>ì<EFBFBD>¬
|
||
// NAM_Init ‚ð–Y‚ê‚Ä‚½
|
||
|
||
// SetupTitlesDataFile((NAMTitleId *)title_id_buf_ptr , (u32)title_id_count);
|
||
|
||
SetupTitlesDataFile((MY_USER_APP_TID *)title_id_buf_ptr , (u32)title_id_count);
|
||
|
||
end_ec_f:
|
||
// cleanup
|
||
// EC ‚Ì<E2809A>I—¹<E28094>ˆ—<CB86>
|
||
mprintf("-ec shutdown.. ");
|
||
rv = EC_Shutdown();
|
||
if( rv != EC_ERROR_OK ) {
|
||
ret_flag = FALSE;
|
||
m_set_palette(tc[0], M_TEXT_COLOR_RED );
|
||
mprintf("NG.\n");
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
mprintf("%s failed EC_Shutdown\n", __FUNCTION__);
|
||
}
|
||
else {
|
||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN );
|
||
mprintf("OK.\n");
|
||
}
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
end_ec:
|
||
// ƒlƒbƒgƒ<67><C692>[ƒN‚©‚ç‚Ì<E2809A>Ø’f
|
||
mprintf("-LINK DOWN....");
|
||
NHTTP_Cleanup();
|
||
end_nhttp:
|
||
NSSL_Finish();
|
||
end_nssl:
|
||
NcFinish();
|
||
end_nc:
|
||
//miya_log_fprintf(log_fd,"NSSL_Finish() return = %d\n", NSSL_Finish());
|
||
|
||
TerminateWcmControl();
|
||
|
||
mprintf("done.\n");
|
||
// EC ‚ªŽ©•ª‚Ì Title ID ‚̃fƒBƒŒƒNƒgƒŠ‚ð<E2809A>ì<EFBFBD>¬‚µ‚Ä‚µ‚Ü‚¤‚½‚ß<E2809A>A<EFBFBD>í<EFBFBD>œ‚·‚é
|
||
DeleteECDirectory();
|
||
end_log_e:
|
||
;
|
||
}
|
||
else {
|
||
/* mprintf("-Wireless AP conf. loading.. "); */
|
||
ret_flag = FALSE;
|
||
m_set_palette(tc[0], M_TEXT_COLOR_RED );
|
||
mprintf("NG.\n");
|
||
}
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
}
|
||
#endif /* HATAMOTO_LIB */
|
||
|
||
#define MY_STACK_SIZE (1024*128) /* ‚Å‚©‚¢‚Ù‚¤‚ª‚¢‚¢ */
|
||
//#define MY_THREAD_PRIO 20
|
||
|
||
#define MY_THREAD_PRIO 5
|
||
|
||
static OSThread MyThread;
|
||
static u64 MyStack[MY_STACK_SIZE/sizeof(u64)];
|
||
|
||
static OSMessage MyMesgBuffer_request[1];
|
||
static OSMessage MyMesgBuffer_response[1];
|
||
static OSMessageQueue MyMesgQueue_request;
|
||
static OSMessageQueue MyMesgQueue_response;
|
||
|
||
static void MyThreadProc(void *arg)
|
||
{
|
||
#pragma unused(arg)
|
||
OSMessage message;
|
||
BOOL flag;
|
||
u32 command;
|
||
|
||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||
|
||
while( 1 ) {
|
||
// (void)pre_install_process( NULL, NULL, 0, NULL, 0 , development_console_flag);
|
||
|
||
(void)OS_SendMessage(&MyMesgQueue_response, (OSMessage)0, OS_MESSAGE_NOBLOCK);
|
||
(void)OS_ReceiveMessage(&MyMesgQueue_request, &message, OS_MESSAGE_BLOCK);
|
||
flag = TRUE;
|
||
command = (u32)message;
|
||
switch( command ) {
|
||
case THREAD_COMMAND_INSTALL_APP:
|
||
flag = pre_install_command(NULL, eticket_only_id_buf, eticket_only_id_count,
|
||
1, development_console_flag );
|
||
break;
|
||
case THREAD_COMMAND_INSTALL_TICKET:
|
||
flag = pre_install_command(NULL, eticket_only_id_buf, eticket_only_id_count,
|
||
2, development_console_flag );
|
||
break;
|
||
case THREAD_COMMAND_DELETE_APP_CONTENT:
|
||
flag = pre_install_command(NULL, eticket_only_id_buf, eticket_only_id_count,
|
||
3, development_console_flag );
|
||
break;
|
||
case THREAD_COMMAND_DELETE_APP_COMPLETELY:
|
||
flag = pre_install_command(NULL, eticket_only_id_buf, eticket_only_id_count,
|
||
4, development_console_flag );
|
||
break;
|
||
|
||
case THREAD_COMMAND_DELETE_DEVKP:
|
||
#if 0
|
||
{
|
||
char *src_path = "nand:/sys/dev.kp";
|
||
char *dst_path = "sdmc:/dev.kp";
|
||
FSFile f;
|
||
FS_InitFile(&f);
|
||
if( FALSE == FS_OpenFileEx(&f, src_path, FS_FILEMODE_R) ) {
|
||
if( FALSE == FS_OpenFileEx(&f, dst_path, FS_FILEMODE_R) ) {
|
||
mprintf("no dev.kp file in NAND & SD\n");
|
||
}
|
||
else {
|
||
FS_CloseFile(&f);
|
||
(void)CopyFile(src_path, dst_path, NULL );
|
||
mprintf("copy dev.kp from SD to NAND\n");
|
||
}
|
||
}
|
||
else {
|
||
FS_CloseFile(&f);
|
||
(void)CopyFile(dst_path, src_path, NULL );
|
||
FS_DeleteFile( src_path );
|
||
mprintf("move dev.kp from NAND to SD\n");
|
||
}
|
||
}
|
||
#endif
|
||
break;
|
||
case THREAD_COMMAND_DOWNLOAD_APP:
|
||
#ifdef HATAMOTO_LIB
|
||
SetupShopTitleId(); /* ƒGƒ‰<C692>[‚͂Ȃ¢ */
|
||
if( FALSE == SetupVerData() ) {
|
||
mprintf("%s failed SetupVerData\n", __FUNCTION__);
|
||
}
|
||
(void)SetupEC_pre();
|
||
pre_install_eticket_only_process( NULL, development_console_flag ,
|
||
&title_id_buf_ptr,&title_id_count);
|
||
ec_download_func();
|
||
#endif
|
||
break;
|
||
|
||
default:
|
||
flag = FALSE;
|
||
mprintf("%s unknown command!\n",__FUNCTION__);
|
||
break;
|
||
}
|
||
mprintf("\n");
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
static void init_my_thread(void)
|
||
{
|
||
OS_InitMessageQueue(&MyMesgQueue_request, &MyMesgBuffer_request[0], 1);
|
||
OS_InitMessageQueue(&MyMesgQueue_response, &MyMesgBuffer_response[0], 1);
|
||
|
||
OS_CreateThread(&MyThread, MyThreadProc,
|
||
NULL, MyStack + MY_STACK_SIZE /sizeof(u64),
|
||
MY_STACK_SIZE, MY_THREAD_PRIO);
|
||
OS_WakeupThreadDirect(&MyThread);
|
||
}
|
||
|
||
|
||
static BOOL start_my_thread(u32 command)
|
||
{
|
||
OSMessage message;
|
||
if( TRUE == OS_ReceiveMessage(&MyMesgQueue_response, &message, OS_MESSAGE_NOBLOCK) ) {
|
||
(void)OS_SendMessage(&MyMesgQueue_request, (OSMessage)command, OS_MESSAGE_BLOCK);
|
||
return TRUE;
|
||
}
|
||
return FALSE;
|
||
}
|