ctr_Repair/trunk/SkipFirstLaunch/sysUserInfoAccessor.h
N2614 d6a207afd5 初回起動シーケンスの中でResultを破棄しているので、一部は確認するように
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
2012-02-24 07:45:56 +00:00

523 lines
20 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
@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