#include #include #include #include #include #include #include "sysSharedExtSaveData.h" #include "sysUserInfoAccessor.h" #include "sysHeap.h" #include "IDB.h" #include "IDBi.h" #include "IDBUT.h" #include "syokaikidou.h" namespace System { nn::cfg::CfgRegionCode getRegion() { return nn::cfg::GetRegion(); } nn::cfg::CfgLanguageCode getCfgLanguage() { return nn::cfg::GetLanguage(); } nn::cfg::CfgCountryCode getCfgCountryCode() { return nn::cfg::GetCountry(); } } //========================================================================== // 初回起動時処理 //========================================================================== nn::Result fnc_1st_setting() { NN_UTIL_RETURN_IF_FAILED( sys::SharedExtSaveData::deleteData() ); NN_UTIL_RETURN_IF_FAILED( sys::SharedExtSaveData::createData() ); NN_UTIL_RETURN_IF_FAILED( nn::am::InitializeForSystemMenu() ); // IDBの初期化 { u32 size = IDB_GetBufferSize(); NN_LOG("idbBufferSize = %d\n", size); u8* buf = new( sys::Mem::getMainHeap() ) u8[size]; NN_ASSERT(buf); IDB_Initialize( reinterpret_cast(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] ); if( result.IsFailure() ) { continue; // 開発中のみciaを入れていなかったら失敗 } // アイコンバナーヘッダが取れたらROMヘッダ情報も取れる(バージョン情報取得) result = nn::am::GetProgramInfos( &pinfo, nn::fs::MEDIA_TYPE_NAND, &pids[i], 1 ); NN_UTIL_RETURN_IF_FAILED(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(); } NN_UTIL_RETURN_IF_FAILED( nn::am::InitializeForSystemMenu() ); return nn::ResultSuccess(); } //========================================================================== // 初回起動時処理2 //========================================================================== nn::Result fnc_starting_set() { // プレイ履歴クリア nn::pl::CTR::ClearPlayHistory(); // 歩数クリア nn::pl::CTR::ClearStepHistory(); sys::UserInfoAccessor::setFirstAll( true ); NN_UTIL_RETURN_IF_FAILED( sys::UserInfoAccessor::setBossTask() ); // 初回起動フラグはバックアップデータから書き込む //sys::UserInfoAccessor::saveFirstInfo( 1, net ); // cfg 情報送信のタスク登録 NN_UTIL_RETURN_IF_FAILED( sys::UserInfoAccessor::setBossSendInfoTaskFirst() ); return nn::ResultSuccess(); }