#include #include #include #include #include #include #include "sysSharedExtSaveData.h" #include "sysUserInfoAccessor.h" #include "IDB.h" #include "IDBi.h" #include "IDBUT.h" namespace System { nn::cfg::CfgRegionCode getRegion() { return nn::cfg::GetRegion(); } nn::cfg::CfgLanguageCode getCfgLanguage() { return nn::cfg::GetLanguage(); } } //========================================================================== // 初回起動時処理 //========================================================================== void fnc_1st_setting() { sys::SharedExtSaveData::deleteData(); sys::SharedExtSaveData::createData(); // IDBの初期化 { u32 size = IDB_GetBufferSize(); u8* buf; //u8* buf = new( sys::Mem::getMainHeap() ) u8[size]; IDB_Initialize( buf, false, false ); // MSETとPNOTEのアイコンを特別にIDBに登録 { nn::Result result; IDB_Icon idbIcon; IDB_Key idbKey; nn::CTR::SystemMenuData sysMenuData; // これが4KB弱でIDBも喰うのでスレッドスタック16KBでは不足 nn::am::ProgramInfo pinfo; nn::ProgramId pids[2] = { sys::UserInfoAccessor::getMsetPid(), sys::UserInfoAccessor::getPnotePid() }; for( int i = 0; i < 2; i++ ) { BOOL bret; // アイコンバナーヘッダ取得 result = nn::fs::CTR::GetSystemMenuData( &sysMenuData, nn::fs::MEDIA_TYPE_NAND, pids[i] ); NN_DBG_PRINT_RESULT( result ); if( result.IsFailure() ) { continue; // 開発中のみciaを入れていなかったら失敗 } // アイコンバナーヘッダが取れたらROMヘッダ情報も取れる(バージョン情報取得) result = nn::am::GetProgramInfos( &pinfo, nn::fs::MEDIA_TYPE_NAND, &pids[i], 1 ); //NN_DBG_PRINT_RESULT( result ); IDBUT_InitIcon( &idbIcon ); idbKey.programID = pids[i]; idbKey.remasterVersion = static_cast( pinfo.version ); IDBUT_GetIconFromSystemMenuData( &idbIcon, &idbKey, &sysMenuData ); bret = IDBi_Update( &idbIcon, IDBi_DIVISION_OWNER ); // アイコンをIDBに登録 if( bret ) { NN_LOG( "IDB Registration : PID=%llx, VERSION=%04x\n", idbKey.programID, idbKey.remasterVersion ); } else { NN_LOG( "IDB registration failed!\n" ); } } } IDB_Finalize(); delete []buf; } } //========================================================================== // 初回起動時処理2 //========================================================================== void fnc_starting_set() { // プレイ履歴クリア nn::pl::CTR::ClearPlayHistory(); // 歩数クリア nn::pl::CTR::ClearStepHistory(); sys::UserInfoAccessor::setFirstAll( true ); sys::UserInfoAccessor::setBossTask(); u8 net = 0; sys::UserInfoAccessor::saveFirstInfo( 1, net ); // cfg 情報送信のタスク登録 sys::UserInfoAccessor::setBossSendInfoTaskFirst(); }