mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@655 385bec56-5757-e545-9c3a-d8741f4650f1
523 lines
20 KiB
C++
523 lines
20 KiB
C++
/*!
|
||
@file sysUserInfoAccessor.h
|
||
@brief ユーザ情報アクセサ
|
||
*/
|
||
#ifndef SYS_USER_INFO_ACCESSOR_H_
|
||
#define SYS_USER_INFO_ACCESSOR_H_
|
||
|
||
#include <nn/ac.h>
|
||
#include <nn/ac/private/ac.h>
|
||
|
||
#include <nn/cfg.h>
|
||
#include <nn/cfg/CTR/detail/cfg_Keys.h>
|
||
#include <nn/cfg/CTR/detail/cfg_DataStructures.h>
|
||
#include <nn/cfg/CTR/cfg_ParentalControl.h>
|
||
#include <nn/cfg/CTR/cfg_Api.h>
|
||
#include <nn/cfg/CTR/cfg_NtrSettings.h>
|
||
#include <nn/cfg/CTR/cfg_Coppacs.h>
|
||
|
||
//#include "sysProcessManager.h"
|
||
|
||
namespace sys
|
||
{
|
||
|
||
//==========================================================================
|
||
// 初回起動、どこまで終わったかをチェックする
|
||
// 全て終わるとendをセット
|
||
//==========================================================================
|
||
struct FirstInfo
|
||
{
|
||
u32 end : 1;
|
||
u32 langage : 1;
|
||
u32 date : 1;
|
||
u32 time : 1;
|
||
|
||
u32 name : 1;
|
||
u32 birthday : 1;
|
||
u32 country : 1;
|
||
u32 area : 1;
|
||
|
||
u32 view : 1; // 3D確認
|
||
u32 eula : 1; // EULA確認
|
||
|
||
u32 rsv : 22;
|
||
};
|
||
|
||
struct EulaDef
|
||
{
|
||
u8 id; // 国ID
|
||
u8 numLanguage; // 言語数
|
||
u8 minorVersion; // EULAマイナーバージョン
|
||
u8 majorVersion; // EULAメジャーバージョン
|
||
u8 language[4]; // EULA用の言語定数(本体設定より多い)。言語名表示のため
|
||
u8 fileNo[4]; // EULAファイル番号(EULAファイル名を <fileNo>.bin にしておく)
|
||
};
|
||
|
||
|
||
//==========================================================================
|
||
// 一般設定でセーブされる情報
|
||
//==========================================================================
|
||
struct UserInfo
|
||
{
|
||
nn::cfg::CTR::detail::UserNameCfgData usr_name; // ユーザーネーム
|
||
nn::cfg::CTR::SimpleAddress usr_address; // アドレス
|
||
|
||
nn::cfg::CTR::detail::BirthdayCfgData usr_birthday; // 誕生日
|
||
nn::cfg::CTR::detail::LanguageCfgData usr_language; // 言語
|
||
|
||
nn::cfg::CTR::detail::SoundSettingCfgData usr_sound; // サウンド
|
||
};
|
||
|
||
|
||
//==========================================================================
|
||
// TWL用にセーブされる情報
|
||
//==========================================================================
|
||
struct TwlInfo
|
||
{
|
||
nn::cfg::CTR::NtrSettingData ds_data;
|
||
nn::cfg::CTR::NtrSettingDataEx ds_data_ex;
|
||
};
|
||
|
||
struct TwlInfo2
|
||
{
|
||
nn::cfg::CTR::detail::TwlCountryCodeCfgData ds_country;
|
||
|
||
nn::cfg::CTR::detail::TwlParentalControlInfoCfgData ds_pare;
|
||
|
||
nn::cfg::CTR::detail::TwlEulaInfoCfgData ds_eula;
|
||
};
|
||
|
||
|
||
//==========================================================================
|
||
// インターネット設定でセーブされる情報
|
||
//==========================================================================
|
||
struct NetInfo
|
||
{
|
||
enum
|
||
{
|
||
eInfoMax = 3
|
||
};
|
||
|
||
nn::ac::CTR::NetworkSetting setting[eInfoMax]; // 接続設定
|
||
|
||
nn::cfg::CTR::detail::EulaInfoCfgData net_eula; // EULA
|
||
nn::cfg::CTR::detail::BossSettingCfgData net_boss; // BOSS
|
||
};
|
||
|
||
|
||
//==========================================================================
|
||
// 国・地域情報(セーブ不要)
|
||
//==========================================================================
|
||
enum
|
||
{
|
||
eAddrLangageNum = nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NUM_LANGUAGES,
|
||
eAddrNameLength = nn::cfg::CTR::CFG_SIMPLE_ADDRESS_NAME_LENGTH
|
||
};
|
||
|
||
struct CountryInfo
|
||
{
|
||
u32 id; // 国ID
|
||
u32 numRegion; // 地域数
|
||
bool newEntry; // CTRで新たに追加された国はtrue
|
||
u8 pad[3];
|
||
u16 countryName[eAddrLangageNum][eAddrNameLength];
|
||
u8 order[eAddrLangageNum]; // 言語ごとの国名並び順(最初の国は0)
|
||
u8 rsv[32];
|
||
};
|
||
|
||
struct AreaInfo
|
||
{
|
||
u32 id; // 国IDと地域IDの組み合わせ
|
||
u16 regionName[eAddrLangageNum][eAddrNameLength];
|
||
u8 order[eAddrLangageNum]; // 言語ごとの国名並び順(最初の国は0)
|
||
u16 latitude; // 緯度
|
||
u16 longitude; // 経度
|
||
};
|
||
|
||
|
||
//==========================================================================
|
||
// その他、セーブ不要の情報
|
||
//==========================================================================
|
||
struct WorkInfo
|
||
{
|
||
// 地域
|
||
int country_id; // 選んでいる国のID
|
||
int country; // 国設定のスライダーバーでの位置
|
||
int area; // 地域設定のスライダーバーでの位置
|
||
int area_num; // 選んでいる国の地域数
|
||
int language;
|
||
|
||
// 日付、時刻
|
||
int time[2]; // 0:時 1:分
|
||
int date[3]; // 0:年 1:月 2:日
|
||
|
||
u8 eula_minor;
|
||
u8 eula_major;
|
||
|
||
u8 padding[2];
|
||
};
|
||
|
||
|
||
//==========================================================================
|
||
// BOSS で送信する情報
|
||
//==========================================================================
|
||
// -------------------------------------------------------------------
|
||
// cfg の情報
|
||
// -------------------------------------------------------------------
|
||
struct BossSendCfgInfo
|
||
{
|
||
nn::cfg::CTR::detail::TouchPanelCfgData touchPanel; // タッチパネル
|
||
nn::cfg::CTR::detail::AnalogStickCfgData analogStick; // アナログスティック
|
||
nn::cfg::CTR::detail::GyroscopeCfgData gyro; // ジャイロ
|
||
nn::cfg::CTR::detail::AccelCfgData accel; // 加速度センサ
|
||
nn::cfg::CTR::detail::BackLightCfgData backLight; // バックライト
|
||
nn::cfg::CTR::detail::CameraCfgData camera; // カメラ
|
||
nn::cfg::CTR::detail::SoundSettingCfgData sound; // サウンド
|
||
nn::cfg::CTR::detail::LanguageCfgData language; // 言語
|
||
nn::cfg::CTR::detail::SimpleAddressIdCfgData simpleAddress; // 簡易アドレス
|
||
nn::cfg::CTR::detail::ParentalControlInfoCfgData parental; // ペアレンタルコントロール
|
||
nn::cfg::CTR::detail::EulaInfoCfgData eula; // EULA
|
||
nn::cfg::CTR::detail::BossSettingCfgData boss; // BOSS
|
||
f32 svr2Vol; // 3D ボリューム
|
||
u8 sndVol; // サウンドボリューム
|
||
};
|
||
|
||
// -------------------------------------------------------------------
|
||
// インターネット設定の情報
|
||
// -------------------------------------------------------------------
|
||
struct BossSendNetInfo
|
||
{
|
||
u8 networkVersion; // NetworkSetting の version
|
||
bool wirelessEnable; // WirelessSetting の enable
|
||
bool wirelessEditableEssidSecrity; // WirelessSetting の editableEssidSecurity
|
||
bool multiSsidEnable; // MultiSsidSetting の enable
|
||
bool ipEnableDHCP; // IpSetting の enableDHCP
|
||
bool ipAutoDNSSetting; // IpSetting の autoDNSSetting
|
||
bool proxyEnable; // ProxySetting の enable
|
||
bool otherEnableUPnP; // OtherSetting の enableUPnP
|
||
nn::ac::CTR::SecurityMode essidSecurityMode; // EssidSecurity の securityMode
|
||
nn::ac::CTR::MultiSsidType multiSsidType; // MultiSsidType の multiSsidType
|
||
nn::ac::CTR::ProxyAuthType proxyAuthType; // ProxySetting の authType
|
||
u8 padding; // パディング
|
||
};
|
||
|
||
// -------------------------------------------------------------------
|
||
// 工場出荷時のキャリブレーションの情報
|
||
// -------------------------------------------------------------------
|
||
struct FactoryCalInfo
|
||
{
|
||
nn::cfg::CTR::detail::CameraCfgData camera; // カメラ
|
||
nn::cfg::CTR::detail::AnalogStickCfgData analogStick; // アナログスティック
|
||
};
|
||
|
||
struct BossSendInfo
|
||
{
|
||
BossSendCfgInfo cfgInfo;
|
||
BossSendNetInfo netInfo[NetInfo::eInfoMax];
|
||
FactoryCalInfo factoryCalInfo;
|
||
nn::cfg::CTR::detail::CoppacsCfgData coppacsInfo;
|
||
};
|
||
|
||
|
||
//******************************************************************************
|
||
// 各種情報にアクセスするためのクラス
|
||
//******************************************************************************
|
||
//==========================================================================
|
||
//
|
||
//==========================================================================
|
||
class UserInfoAccessor
|
||
{
|
||
public:
|
||
UserInfoAccessor(){}
|
||
~UserInfoAccessor(){}
|
||
|
||
static void init( int flg = 0 );
|
||
static void eventProc( int info_event );
|
||
static void destroy();
|
||
|
||
static int checkEula(); // EULAの情報を調べる
|
||
static void loadEula();
|
||
static nn::Result setBossTask();
|
||
static void setBossSendInfoTask();
|
||
static nn::Result setBossSendInfoTaskFirst();
|
||
static void saveBossSendInfoTaskOptoutFlag( bool optout );
|
||
static bool checkUpdateBossSendInfo( BossSendInfo* pSaveData );
|
||
static void getAnalogData( nn::cfg::CTR::detail::AnalogStickCfgData* para, int flg = 0 );
|
||
|
||
//==========================================================================
|
||
// 初回起動設定用
|
||
static void saveFirstInfo( int mmen, u8 net ); // 初回起動のセーブ
|
||
|
||
static bool isFirst(){ return ( msFirst.end == 0 ); }
|
||
static const FirstInfo& getFirst(){ return msFirst; }
|
||
static void setFirst( FirstInfo& first ){ msFirst = first; }
|
||
|
||
static void setFirstParam(); // 初回起動用パラメータ
|
||
static void setFirstAll( bool set );
|
||
|
||
static void getSharedArea();
|
||
|
||
//==========================================================================
|
||
// ユーザー情報設定アクセス用
|
||
static void setUserInfo( UserInfo& user_info );
|
||
static const UserInfo& getUserInfo(){ return msUserInfo; }
|
||
static const UserInfo* getUserInfoPtr(){ return &msUserInfo; }
|
||
|
||
//==========================================================================
|
||
// Twlユーザー情報設定アクセス用
|
||
static void setTwlInfo( TwlInfo& twl_info );
|
||
static const TwlInfo& getTwlInfo(){ return msTwlInfo; }
|
||
static const TwlInfo* getTwlInfoPtr(){ return &msTwlInfo; }
|
||
|
||
static void setTwlInfo2( TwlInfo2& twl_info );
|
||
static const TwlInfo2& getTwlInfo2(){ return msTwlInfo2; }
|
||
static const TwlInfo2* getTwlInfo2Ptr(){ return &msTwlInfo2; }
|
||
|
||
|
||
//TWLで入力不可能な文字を'?'に置換する
|
||
static void replaceUnusableString( wchar_t* buffer, int len );
|
||
//TWLで入力不可能な文字を'?'に置換する(TWLで入力可能な文字テーブルを使用する方法)
|
||
static void replaceUnusableStringWithTwlUserInfoFontTable(wchar_t* buffer, int len);
|
||
static bool binarySearchFromTwlUserInfoFontTable(u16 wc);
|
||
|
||
//==========================================================================
|
||
// ネットワーク設定アクセス用
|
||
static bool isCheckNetworkInfo(); // オリジナルとバックアップの比較(setting単位)
|
||
|
||
static int getAccNum(){ return msAccNum; } // 接続先の番号取得
|
||
static void setAccNum( int num ){ msAccNum = num; } // 接続先のセット
|
||
|
||
static int getTmpNum(){ return msTmpNum; }
|
||
static void setTmpNum( int num ){ msTmpNum = num; }
|
||
|
||
static void setNetInfo( NetInfo& net_info );
|
||
static const NetInfo& getNetInfo(){ return msNetInfo; }
|
||
static const NetInfo* getNetInfoPtr(){ return &msNetInfo; }
|
||
|
||
static const nn::ac::CTR::WirelessSetting& getNetWireInfo( int num ){ return msNetInfo.setting[num].wireless; }
|
||
static const nn::ac::CTR::IpSetting& getNetIpInfo( int num ){ return msNetInfo.setting[num].ip; }
|
||
static const nn::ac::CTR::ProxySetting& getNetProxyInfo( int num ){ return msNetInfo.setting[num].proxy; }
|
||
static const nn::ac::CTR::OtherSetting& getNetOtherInfo( int num ){ return msNetInfo.setting[num].other; }
|
||
static const nn::ac::CTR::MultiSsidSetting& getNetMultiInfo( int num ){ return msNetInfo.setting[num].wireless.multiSsid; }
|
||
|
||
static const nn::ac::CTR::NetworkSetting* getNetSettingPtr( int num ){ return &msNetInfo.setting[num]; }
|
||
|
||
static void setNetNewParam( int num ); // TODO:アクセスポイント初期設定(仮)
|
||
|
||
static void setNetWireless( int num, nn::ac::CTR::WirelessSetting& wireless );
|
||
static void setNetIp( int num, nn::ac::CTR::IpSetting& ip );
|
||
static void setNetProxy( int num, nn::ac::CTR::ProxySetting& proxy );
|
||
static void setNetOther( int num, nn::ac::CTR::OtherSetting& other );
|
||
|
||
static void delNetSetInfo( int num );
|
||
|
||
static u8* readCountryData( int flg ); // 国地域情報の読み込み
|
||
|
||
#ifdef MAKE_ACCTEST
|
||
#ifndef NW_RELEASE
|
||
static void print_net_save_();
|
||
#endif
|
||
#endif
|
||
|
||
#ifndef NW_RELEASE
|
||
static void getLastDsData();
|
||
#endif
|
||
|
||
static bool isNetSet(){ return msFirstInfo.internet; }
|
||
static bool isEula(){ return ( msNetInfo.net_eula.agreeVersion.version > 0 ); }
|
||
static bool isEulaCoppa(){ return ( msNetInfo.net_eula.agreeVersion.version >= 0x0101 ); }
|
||
|
||
static void setNetInit( bool used );
|
||
static void setNetBg24Get( bool used );
|
||
static void setNetBg24Send( bool used );
|
||
static void clrNetBg24();
|
||
static nn::ProgramId getHomePid();
|
||
static nn::ProgramId getMsetPid();
|
||
static nn::ProgramId getPnotePid();
|
||
static const char* getMsetBossCode();
|
||
static void clrNet2();
|
||
static void prepareBossSendInfo();
|
||
|
||
//==========================================================================
|
||
// ペアレンタルコントロール設定アクセス用
|
||
static void setParentInfo( nn::cfg::CTR::ParentalControlInfo& parent_info );
|
||
static const nn::cfg::CTR::ParentalControlInfo& getParentInfo(){ return msParentInfo; }
|
||
static const nn::cfg::CTR::ParentalControlInfo* getParentInfoPtr(){ return &msParentInfo; }
|
||
|
||
static void clrParentInfo( bool eula );
|
||
static bool isCheckParentInfo();
|
||
|
||
static bool isParentalLock(){ return msParentInfo.flags.isSetParentalControl != 0; }
|
||
static bool is3dLock(){ return msParentInfo.flags.ulcd != 0; }
|
||
|
||
//==========================================================================
|
||
// COPPACS設定アクセス用
|
||
static void setCoppaInfo( nn::cfg::CTR::detail::CoppacsCfgData& coppa_info );
|
||
static const nn::cfg::CTR::detail::CoppacsCfgData& getCoppaInfo(){ return msCoppaInfo; }
|
||
static const nn::cfg::CTR::detail::CoppacsCfgData* getCoppaInfoPtr(){ return &msCoppaInfo; }
|
||
|
||
static bool isCheckCoppaInfo();
|
||
static void saveCoppaInfo( nn::cfg::CTR::detail::CoppacsCfgData& coppa_info );
|
||
static bool isCoppa(){ return msIsCoppa; }
|
||
static void setCoppacs();
|
||
|
||
//==========================================================================
|
||
// WorkInfoアクセス用
|
||
static void setWorkInfo( WorkInfo& work_info );
|
||
static const WorkInfo& getWorkInfo(){ return msWorkInfo; }
|
||
static const WorkInfo* getWorkInfoPtr(){ return &msWorkInfo; }
|
||
|
||
//==========================================================================
|
||
// スライダーバーで使用する要素
|
||
static void setSlideWord( int i, int j, wchar_t w ){ msSlideStr[i][j] = w; }
|
||
static wchar_t* getSlideStr( int i ){ return msSlideStr[i]; }
|
||
static const wchar_t** getSlideFact(){ return mspSlideFact; }
|
||
|
||
//==========================================================================
|
||
// 現リージョンで存在する国数の取得
|
||
static u16 getCountryNum(){ return msCountryNum; }
|
||
|
||
//==========================================================================
|
||
private:
|
||
static void check_first_set_();
|
||
static void set_country_info_();
|
||
static void flush_net_setting_();
|
||
static void set_boss_send_info_task_();
|
||
static bool save_boss_send_info_();
|
||
static void prepare_boss_send_cfg_info_();
|
||
static void prepare_boss_send_net_info_();
|
||
static void prepare_boss_send_factory_cal_info_();
|
||
|
||
#ifndef NW_RELEASE
|
||
//二分探索するため、テーブルが昇順で並んでいることを確認する(Development用)。
|
||
//昇順であればtrue,そうでなければfalse。
|
||
static bool check_order_twl_user_info_font_table_();
|
||
#endif
|
||
|
||
|
||
//==========================================================================
|
||
static bool data_user_info_( int kind, int type ); // CFGデータLoad/Save
|
||
|
||
static bit32 get_cfg_key_( bit32 category, bit32 id )
|
||
{
|
||
return ( ( static_cast<bit32>( category ) << 16 ) | ( static_cast<bit32>( id ) ) );
|
||
}
|
||
|
||
//==========================================================================
|
||
static void set_first_boot_ac_();
|
||
|
||
//==========================================================================
|
||
static UserInfo msUserInfo;
|
||
static UserInfo msBackupUserInfo;
|
||
|
||
//==========================================================================
|
||
static TwlInfo msTwlInfo;
|
||
static TwlInfo msBackupTwlInfo;
|
||
|
||
static TwlInfo2 msTwlInfo2;
|
||
static TwlInfo2 msBackupTwlInfo2;
|
||
|
||
//==========================================================================
|
||
// 設定用ワーク
|
||
static WorkInfo msWorkInfo;
|
||
static WorkInfo msBackupWorkInfo;
|
||
|
||
//==========================================================================
|
||
static nn::cfg::CTR::ParentalControlInfo msParentInfo;
|
||
static nn::cfg::CTR::ParentalControlInfo msBackupParentInfo;
|
||
|
||
//==========================================================================
|
||
static nn::cfg::CTR::detail::CoppacsCfgData msCoppaInfo;
|
||
static nn::cfg::CTR::detail::CoppacsCfgData msBackupCoppaInfo;
|
||
|
||
//==========================================================================
|
||
static NetInfo msNetInfo;
|
||
static NetInfo msBackupNetInfo;
|
||
|
||
// インターネット設定用
|
||
static int msAccNum; // 接続先
|
||
static int msTmpNum; // 設定先
|
||
|
||
//==========================================================================
|
||
// BOSS 送信情報
|
||
static BossSendInfo msBossSendInfo;
|
||
|
||
//==========================================================================
|
||
// データ更新用
|
||
enum
|
||
{
|
||
eNoneInfo = 0,
|
||
|
||
eUserInfo = 0x01,
|
||
eTwlInfo = 0x02,
|
||
eTwlInfo2 = 0x04,
|
||
eNetInfo = 0x08,
|
||
|
||
eParentInfo = 0x10,
|
||
eNetInfo2 = 0x20,
|
||
eCoppaInfo = 0x40,
|
||
eWorkInfo = 0x80,
|
||
|
||
eAllInfo = 0xff
|
||
};
|
||
|
||
enum
|
||
{
|
||
eKindUserName = 0, // eUserInfo
|
||
eKindAddressId,
|
||
eKindAddressCountry,
|
||
eKindAddressRegion,
|
||
eKindAddressPosition,
|
||
eKindBirthday,
|
||
eKindLanguage,
|
||
eKindSound,
|
||
|
||
eKindEula, // eNetInfo2
|
||
eKindBoss,
|
||
|
||
eKindParental, // eParentInfo
|
||
eKindCoppa, // eCoppaInfo
|
||
|
||
eKindDsData, // eTwlInfo
|
||
|
||
eKindDsCountry, // eTwlInfo2
|
||
eKindDsParental,
|
||
eKindDsEula,
|
||
|
||
eKindFirst, // 別
|
||
|
||
eKindMax
|
||
};
|
||
|
||
static u32 msDirty; // セーブのためのフラグ
|
||
|
||
//==========================================================================
|
||
static nn::cfg::CTR::detail::FirstLaunchInfoCfgData msFirstInfo;
|
||
|
||
static FirstInfo msFirst;
|
||
|
||
static u16 msCountryNum; // 現リージョンでの国数
|
||
static u8* mpSharedAreaBuf;
|
||
|
||
static bool msIsNetSave;
|
||
|
||
static bool msIsCoppa;
|
||
|
||
//==========================================================================
|
||
// スライダーバーで使用する要素(全スライダーバー共通で使用)
|
||
enum
|
||
{
|
||
eFactNum = 100,
|
||
eStrSize = 64
|
||
};
|
||
|
||
static wchar_t msSlideStr[eFactNum][eStrSize];
|
||
static const wchar_t* mspSlideFact[eFactNum];
|
||
|
||
friend class ProcessManager;
|
||
};
|
||
|
||
}
|
||
|
||
#endif
|