/*! @file sysUserInfoAccessor.h @brief ユーザ情報アクセサ */ #ifndef SYS_USER_INFO_ACCESSOR_H_ #define SYS_USER_INFO_ACCESSOR_H_ #include #include #include #include #include #include #include #include #include //#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ファイル名を .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( category ) << 16 ) | ( static_cast( 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