mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@104 b08762b0-b915-fc4b-9d8c-17b2551a87ff
479 lines
13 KiB
C
479 lines
13 KiB
C
/*---------------------------------------------------------------------------*
|
||
Project: TwlIPL
|
||
File: TWLSettings.h
|
||
|
||
Copyright 2007 Nintendo. All rights reserved.
|
||
|
||
These coded instructions, statements, and computer programs contain
|
||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||
Company Ltd., and are protected by Federal copyright law. They may
|
||
not be disclosed to third parties or copied or duplicated in any form,
|
||
in whole or in part, without the prior written consent of Nintendo.
|
||
|
||
$Date:: $
|
||
$Rev$
|
||
$Author$
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
|
||
#ifndef TWL_SETTINGS_H_
|
||
#define TWL_SETTINGS_H_
|
||
#if defined(SDK_CW) // TWLSettingsDataにビットフィールドを使っているので、コンパイラ依存で不具合が発生する可能性がある。
|
||
// よって、CW以外のコンパイラの場合は、このヘッダを無効にしてエラーを出させるようにして再確認する。
|
||
|
||
#include <twl.h>
|
||
#include <sysmenu/settings/common/NTRSettings.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
|
||
// define data ------------------------------------
|
||
#define TWL_DEFAULT_REGION 0 // デフォルトのリージョン いる??
|
||
#define TWL_SETTINGS_DATA_VERSION 1 // TWL設定データフォーマットバージョン(開始No.:1)
|
||
#define TWL_NICKNAME_LENGTH NTR_NICKNAME_LENGTH // ニックネーム長
|
||
#define TWL_NICKNAME_BUFFERSIZE ( ( TWL_NICKNAME_LENGTH + 1 ) * 2 ) // ニックネームバッファサイズ
|
||
#define TWL_COMMENT_LENGTH NTR_COMMENT_LENGTH // コメント長
|
||
#define TWL_COMMENT_BUFFERSIZE ( ( TWL_COMMENT_LENGTH + 1 ) * 2 ) // コメントバッファサイズ
|
||
#define TWL_FAVORITE_COLOR_MAX_NUM NTR_FAVORITE_COLOR_MAX_NUM // 好きな色の最大数
|
||
#define TSD_TEMP_BUFFER_SIZE ( sizeof(TSDStore) * 2 ) // TSD_ReadTWLSettingsで必要なTempBufferサイズ
|
||
|
||
// 言語コード
|
||
typedef enum TWLLangCode{
|
||
TWL_LANG_JAPANESE = 0, // 日本語
|
||
TWL_LANG_ENGLISH = 1, // 英語
|
||
TWL_LANG_FRENCH = 2, // フランス語
|
||
TWL_LANG_GERMAN = 3, // ドイツ語
|
||
TWL_LANG_ITALIAN = 4, // イタリア語
|
||
TWL_LANG_SPANISH = 5, // スペイン語
|
||
TWL_LANG_CHINESE = 6, // 中国語
|
||
TWL_LANG_KOREAN = 7, // 韓国語
|
||
TWL_LANG_CODE_MAX
|
||
}TWLLangCode;
|
||
|
||
#define TWL_LANG_CODE_MAX_WW NTR_LANG_CODE_MAX_WW // TWL_LANG_SPANISH + 1
|
||
|
||
#define TWL_LANG_BITMAP_WW NTR_LANG_BITMAP_WW // SystemMenu-WW版での対応言語ビットマップ
|
||
#define TWL_LANG_BITMAP_CHINA NTR_LANG_BITMAP_CHINA // SystemMenu-WW版での対応言語ビットマップ
|
||
#define TWL_LANG_BITMAP_KOREA NTR_LANG_BITMAP_KOREA // SystemMenu-WW版での対応言語ビットマップ
|
||
|
||
|
||
// リージョンコード(まだ適当)
|
||
typedef enum TWLRegionCode {
|
||
TWL_REGION_WW = 0,
|
||
TWL_REGION_CHINA = 1,
|
||
TWL_REGION_KOREA = 2,
|
||
TWL_REGION_MAX = 3
|
||
}TWLRegion;
|
||
|
||
|
||
// 日付
|
||
#define TWLDate NTRDate
|
||
|
||
// アラーム
|
||
#define TWLAlarm NTRAlarm
|
||
|
||
// TPキャリブレーション(NTRとの違いは、予約領域あり)
|
||
typedef struct TWLTPCalibData {
|
||
NTRTPCalibData data;
|
||
u8 rsv[ 8 ];
|
||
}TWLTPCalibData;
|
||
|
||
// ニックネーム(NTRとの違いは、文字列に終端あり)
|
||
typedef struct TWLNickname{
|
||
u16 buffer[ TWL_NICKNAME_LENGTH + 1 ]; // ニックネーム(Unicode(UTF16)で最大10文字、終端コードあり)
|
||
u8 length; // 文字数
|
||
u8 rsv;
|
||
}TWLNickname; // 24byte
|
||
|
||
// コメント(NTRとの違いは、文字列に終端あり)
|
||
typedef struct TWLComment{
|
||
u16 buffer[ TWL_COMMENT_LENGTH + 1 ]; //コメント(Unicode(UTF16)で最大26文字、終端コードあり)
|
||
u8 length; // 文字数
|
||
u8 rsv;
|
||
}TWLComment; // 54byte
|
||
|
||
// オーナー情報
|
||
typedef struct TWLOwnerInfo{
|
||
u8 userColor : 4; // 好きな色
|
||
u8 rsv : 4; // 予約。
|
||
TWLDate birthday; // 生年月日
|
||
u8 pad;
|
||
TWLNickname nickname; // ニックネーム
|
||
TWLComment comment; // コメント
|
||
}TWLOwnerInfo; // 80byte
|
||
|
||
|
||
typedef struct TWLParentalControl {
|
||
u8 rsv[ 16 ];
|
||
}TWLParentalControl;
|
||
|
||
|
||
// TWL設定データ
|
||
typedef struct TWLSettingsData{
|
||
u8 version;
|
||
u8 saveCount;
|
||
u8 rsv[ 2 ];
|
||
struct flags {
|
||
u32 initialSequence : 1;
|
||
u32 isSetCountry : 1;
|
||
u32 isSetLanguage : 1;
|
||
u32 isSetDateTime : 1;
|
||
u32 isSetNickname : 1;
|
||
u32 isSetUserColor : 1;
|
||
u32 isSetBirthday : 1;
|
||
u32 isSetTP : 1;
|
||
u32 isSetParentalControl : 1;
|
||
u32 isAgreeEURA : 1;
|
||
// WiFi設定は別データなので、ここに設定済みフラグは用意しない。
|
||
u32 isGBUseTopLCD : 1;
|
||
u32 rsv : 22;
|
||
}flags;
|
||
u16 valid_language_bitmap; // 対応言語ビットマップ(※ここじゃなく、"/sys/HWINFO.dat"内の方が良さそう)
|
||
u8 country; // 国コード
|
||
u8 region; // リージョン(※ここじゃなく、"/sys/HWINFO.dat"内の方が良さそう)
|
||
u8 language; // 言語(NTRとの違いは、データサイズ8bit)
|
||
u8 backLightBrightness; // バックライト輝度(NTRとの違いは、データサイズ8bit)
|
||
u8 rtcLastSetYear; // RTCの前回設定年
|
||
s64 rtcOffset; // RTC設定時のオフセット値(ユーザーがRTC設定を変更する度にその値に応じて増減します。)
|
||
TWLOwnerInfo owner; // オーナー情報
|
||
TWLAlarm alarm; // アラーム
|
||
TWLTPCalibData tp; // タッチパネルキャリブレーションデータ
|
||
TWLParentalControl parental;
|
||
}TWLSettingsData; // xxbyte
|
||
|
||
|
||
// TWL設定データ保存フォーマット
|
||
typedef struct TSDStore {
|
||
u8 digest[ SVC_SHA1_DIGEST_SIZE ]; // SHA1ダイジェスト
|
||
TWLSettingsData tsd;
|
||
}TSDStore;
|
||
|
||
|
||
|
||
#ifdef SDK_ARM9
|
||
|
||
//=========================================================
|
||
// グローバル変数
|
||
//=========================================================
|
||
extern TWLSettingsData *g_pTSD;
|
||
#define GetTSD() ( g_pTSD )
|
||
|
||
//=========================================================
|
||
// NANDファイルへのリードライト関数
|
||
//=========================================================
|
||
extern BOOL TSD_IsReadSettings( void );
|
||
extern BOOL TSD_ReadSettings( TSDStore (*pTempBuffer)[2] ); // TSD_TEMP_BUFFER_SIZEのpTempBufferが必要。
|
||
extern BOOL TSD_WriteSettings( void ); // 先にNSD_ReadSettingsを実行しておく必要がある。
|
||
|
||
//=========================================================
|
||
// データ取得(TSD_ReadSettingsで内部ワークに読み出した情報の取得)
|
||
//=========================================================
|
||
|
||
// バージョンの取得。
|
||
static inline u8 TSD_GetVerion( void )
|
||
{
|
||
return (u8)GetTSD()->version;
|
||
}
|
||
|
||
// リージョンの取得。
|
||
static inline u8 TSD_GetRegion( void )
|
||
{
|
||
return (u8)GetTSD()->region;
|
||
}
|
||
|
||
// オーナー情報全体の取得。
|
||
static inline TWLOwnerInfo *TSD_GetOwnerInfo( void )
|
||
{
|
||
return &GetTSD()->owner;
|
||
}
|
||
|
||
// 好きな色の取得。
|
||
static inline u8 TSD_GetUserColor( void )
|
||
{
|
||
return (u8)GetTSD()->owner.userColor;
|
||
}
|
||
|
||
// 誕生日の取得。
|
||
static inline TWLDate *TSD_GetBirthday( void )
|
||
{
|
||
return &GetTSD()->owner.birthday;
|
||
}
|
||
|
||
// ニックネームの取得。
|
||
static inline TWLNickname *TSD_GetNickname( void )
|
||
{
|
||
return &GetTSD()->owner.nickname;
|
||
}
|
||
|
||
// コメントの取得。
|
||
static inline TWLComment *TSD_GetComment( void )
|
||
{
|
||
return &GetTSD()->owner.comment;
|
||
}
|
||
|
||
// アラーム情報の取得。
|
||
static inline TWLAlarm *TSD_GetAlarmData( void )
|
||
{
|
||
return &GetTSD()->alarm;
|
||
}
|
||
|
||
// タッチパネルキャリブレーションデータの取得。
|
||
static inline TWLTPCalibData *TSD_GetTPCalibration( void )
|
||
{
|
||
return &GetTSD()->tp;
|
||
}
|
||
|
||
// 言語コードの取得
|
||
static inline TWLLangCode TSD_GetLanguage( void )
|
||
{
|
||
return (TWLLangCode)GetTSD()->language;
|
||
}
|
||
|
||
// 対応言語ビットマップの取得
|
||
static inline u16 TSD_GetLanguageBitmap( void )
|
||
{
|
||
return GetTSD()->valid_language_bitmap;
|
||
}
|
||
|
||
// RTCオフセット値の取得
|
||
static inline s64 TSD_GetRTCOffset( void )
|
||
{
|
||
return GetTSD()->rtcOffset;
|
||
}
|
||
|
||
// RTCの前回セットした年の取得
|
||
static inline u8 TSD_GetRTCLastSetYear( void )
|
||
{
|
||
return GetTSD()->rtcLastSetYear;
|
||
}
|
||
|
||
// バックライト輝度取得
|
||
static inline int TSD_GetBacklightBrightness( void )
|
||
{
|
||
return (int)GetTSD()->backLightBrightness;
|
||
}
|
||
|
||
// 初回起動シーケンス中?
|
||
static inline BOOL TSD_IsInitialSequence( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.initialSequence;
|
||
}
|
||
|
||
// 誕生日入力済み?
|
||
static inline BOOL TSD_IsSetBirthday( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isSetBirthday;
|
||
}
|
||
|
||
// ユーザーカラー入力済み?
|
||
static inline BOOL TSD_IsSetUserColor( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isSetUserColor;
|
||
}
|
||
|
||
// TPキャリブレーションデータ入力済み?
|
||
static inline BOOL TSD_IsSetTP( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isSetTP;
|
||
}
|
||
|
||
// 言語コード入力済み?
|
||
static inline BOOL TSD_IsSetLanguage( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isSetLanguage;
|
||
}
|
||
|
||
// 日付・時刻データ入力済み?
|
||
static inline BOOL TSD_IsSetDateTime( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isSetDateTime;
|
||
}
|
||
|
||
// ニックネーム入力済み?
|
||
static inline BOOL TSD_IsSetNickname( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isSetNickname;
|
||
}
|
||
|
||
// パレンタルコントロール入力済み?
|
||
static inline BOOL TSD_IsSetParentalControl( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isSetParentalControl;
|
||
}
|
||
|
||
// EURAビューア同意済み?
|
||
static inline BOOL TSD_IsAgreeEURA( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isAgreeEURA;
|
||
}
|
||
|
||
// GBアプリなど1画面ソフトが使うのは上画面?
|
||
static inline BOOL TSD_IsGBUseTopLCD( void )
|
||
{
|
||
return (BOOL)GetTSD()->flags.isGBUseTopLCD;
|
||
}
|
||
|
||
|
||
//=========================================================
|
||
// データセット(TSD_ReadSettingsで内部ワークに読み出した情報への値セット)
|
||
//=========================================================
|
||
|
||
// バージョンのセット。
|
||
static inline void TSD_SetVerion( u8 version )
|
||
{
|
||
GetTSD()->version = version;
|
||
}
|
||
|
||
// リージョンのセット。
|
||
static inline void TSD_SetRegion( u8 region )
|
||
{
|
||
GetTSD()->region = region;
|
||
}
|
||
|
||
// オーナー情報全体のセット。
|
||
static inline void TSD_SetOwnerInfo( TWLOwnerInfo *pOwner )
|
||
{
|
||
MI_CpuCopy16( pOwner, &GetTSD()->owner, sizeof(TWLOwnerInfo) );
|
||
}
|
||
|
||
// ユーザーカラーのセット。
|
||
static inline void TSD_SetUserColor( u8 userColor )
|
||
{
|
||
GetTSD()->owner.userColor = userColor;
|
||
}
|
||
|
||
// 誕生日のセット。
|
||
static inline void TSD_SetBirthday( TWLDate *pBirth )
|
||
{
|
||
GetTSD()->owner.birthday.month = pBirth->month;
|
||
GetTSD()->owner.birthday.day = pBirth->day;
|
||
}
|
||
|
||
// ニックネームのセット。
|
||
static inline void TSD_SetNickname( TWLNickname *pNickname )
|
||
{
|
||
MI_CpuCopy16( pNickname, &GetTSD()->owner.nickname, sizeof(TWLNickname) );
|
||
}
|
||
|
||
// コメントのセット。
|
||
static inline void TSD_SetComment( TWLComment *pComment )
|
||
{
|
||
MI_CpuCopy16( pComment, &GetTSD()->owner.comment, sizeof(TWLComment) );
|
||
}
|
||
|
||
// アラーム情報のセット。
|
||
static inline void TSD_SetAlarmData( TWLAlarm *pAlarm )
|
||
{
|
||
MI_CpuCopy16( pAlarm, &GetTSD()->alarm, sizeof(TWLAlarm) );
|
||
}
|
||
|
||
// タッチパネルキャリブレーションデータのセット。
|
||
static inline void TSD_SetTPCalibration( TWLTPCalibData *pTPCalib )
|
||
{
|
||
MI_CpuCopy16( pTPCalib, &GetTSD()->tp, sizeof(TWLTPCalibData) );
|
||
}
|
||
|
||
// 言語コードのセット
|
||
static inline void TSD_SetLanguage( TWLLangCode language )
|
||
{
|
||
GetTSD()->language = language;
|
||
}
|
||
|
||
// 対応言語ビットマップのセット
|
||
static inline void TSD_SetLanguageBitmap( u16 valid_language_bitmap )
|
||
{
|
||
GetTSD()->valid_language_bitmap = valid_language_bitmap;
|
||
}
|
||
|
||
// RTCオフセット値のセット
|
||
static inline void TSD_SetRTCOffset( s64 rtcOffset )
|
||
{
|
||
GetTSD()->rtcOffset = rtcOffset;
|
||
}
|
||
|
||
// RTCのLastSetYearへのセット
|
||
static inline void TSD_SetRTCLastSetYear( u8 rtcLastSetYear )
|
||
{
|
||
GetTSD()->rtcLastSetYear = rtcLastSetYear;
|
||
}
|
||
|
||
// バックライト輝度情報をセット。
|
||
static inline void TSD_SetBacklightBrightness( u8 backLightBrightness )
|
||
{
|
||
GetTSD()->backLightBrightness = backLightBrightness;
|
||
}
|
||
|
||
// フラッシュ壊れシーケンス中かどうかのフラグセット。
|
||
static inline void TSD_SetFlagInitialSequence( BOOL initialSequence )
|
||
{
|
||
GetTSD()->flags.initialSequence = (u32)initialSequence;
|
||
}
|
||
|
||
// 誕生日データの入力済みフラグセット。
|
||
static inline void TSD_SetFlagBirthday( BOOL set )
|
||
{
|
||
GetTSD()->flags.isSetBirthday = (u32)set;
|
||
}
|
||
|
||
// ユーザーカラーの入力済みフラグセット。
|
||
static inline void TSD_SetFlagUserColor( BOOL set )
|
||
{
|
||
GetTSD()->flags.isSetUserColor = (u32)set;
|
||
}
|
||
|
||
// TPキャリブレーションの入力済みフラグセット。
|
||
static inline void TSD_SetFlagTP( BOOL set )
|
||
{
|
||
GetTSD()->flags.isSetTP = (u32)set;
|
||
}
|
||
|
||
// 言語コードの入力済みフラグセット。
|
||
static inline void TSD_SetFlagLanguage( BOOL set )
|
||
{
|
||
GetTSD()->flags.isSetLanguage = (u32)set;
|
||
}
|
||
|
||
// 日付・時刻の入力済みフラグセット。
|
||
static inline void TSD_SetFlagDateTime( BOOL set )
|
||
{
|
||
GetTSD()->flags.isSetDateTime = (u32)set;
|
||
}
|
||
|
||
// ニックネームの入力済みフラグセット。
|
||
static inline void TSD_SetFlagNickname( BOOL set )
|
||
{
|
||
GetTSD()->flags.isSetNickname = (u32)set;
|
||
}
|
||
|
||
// パレンタルコントロールの入力済みフラグセット。
|
||
static inline void TSD_SetFlagParentalControl( BOOL set )
|
||
{
|
||
GetTSD()->flags.isSetNickname = (u32)set;
|
||
}
|
||
|
||
// EURAビューア同意済みフラグセット。
|
||
static inline void TSD_SetFlagAgreeEURA( BOOL set )
|
||
{
|
||
GetTSD()->flags.isSetNickname = (u32)set;
|
||
}
|
||
|
||
// GBアプリなど1画面ソフトが使う画面フラグをセット
|
||
static inline void TSD_SetFlagGBUseTopLCD( BOOL set )
|
||
{
|
||
GetTSD()->flags.isGBUseTopLCD = (u32)set;
|
||
}
|
||
|
||
|
||
#endif // SDK_ARM9
|
||
|
||
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif // SDK_CW
|
||
#endif // TWL_SETTINGS_H_
|