TwlIPL/include/sysmenu/settings/common/NTRSettings.h
yosiokat 698853c42d ・NTR設定データのAPI仕様を変更。一時バッファ用引数を必要としない形に変更。
・NTR設定データのTWLリージョンによる言語コードの取り回しの実装。
・言語コード処理.xlsのドキュメント追加。
・メモリマップ.vsd更新。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@355 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2007-12-12 13:00:55 +00:00

579 lines
17 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

/*---------------------------------------------------------------------------*
Project: TwlIPL
File: NTRSettings.c
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 NTR_SETTINGS_H_
#define NTR_SETTINGS_H_
#if defined(SDK_CW) // NTRConfigDataにビットフィールドを使っているので、コンパイラ依存で不具合が発生する可能性がある。
// よって、CW以外のコンパイラの場合は、このヘッダを無効にしてエラーを出させるようにして再確認する。
#include <twl.h>
#ifdef __cplusplus
extern "C" {
#endif
// define data ------------------------------------
#define NTR_SETTINGS_DATA_VERSION 5 // NTR設定データフォーマットバージョン
#define NTR_SETTINGS_DATA_EX_VERSION 1 // 拡張NTR設定データフォーマットバージョン
#define NTR_NICKNAME_LENGTH 10 // ニックネーム長
#define NTR_NICKNAME_BUFFERSIZE ( NTR_NICKNAME_LENGTH * 2 ) // ニックネームバッファサイズ
#define NTR_COMMENT_LENGTH 26 // コメント長
#define NTR_COMMENT_BUFFERSIZE ( NTR_COMMENT_LENGTH * 2 )
#define NTR_USER_COLOR_MAX_NUM 16 // ユーザーカラーの最大数
// 言語設定コード
typedef enum NTRLangCode{
NTR_LANG_JAPANESE = 0, // 日本語
NTR_LANG_ENGLISH = 1, // 英語
NTR_LANG_FRENCH = 2, // フランス語
NTR_LANG_GERMAN = 3, // ドイツ語
NTR_LANG_ITALIAN = 4, // イタリア語
NTR_LANG_SPANISH = 5, // スペイン語
NTR_LANG_CHINESE = 6, // 中国語
NTR_LANG_KOREAN = 7, // 韓国語
NTR_LANG_CODE_MAX
}NTRLangCode;
#define NTR_LANG_CODE_MAX_WW ( NTR_LANG_SPANISH + 1 )
#define NTR_LANG_BITMAP_WW ( ( 0x0001 << NTR_LANG_JAPANESE ) | \
( 0x0001 << NTR_LANG_ENGLISH ) | \
( 0x0001 << NTR_LANG_FRENCH ) | \
( 0x0001 << NTR_LANG_GERMAN ) | \
( 0x0001 << NTR_LANG_ITALIAN ) | \
( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-WW版での対応言語ビットマップ
#define NTR_LANG_BITMAP_CHINA ( ( 0x0001 << NTR_LANG_CHINESE ) | \
( 0x0001 << NTR_LANG_ENGLISH ) | \
( 0x0001 << NTR_LANG_FRENCH ) | \
( 0x0001 << NTR_LANG_GERMAN ) | \
( 0x0001 << NTR_LANG_ITALIAN ) | \
( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-CN版での対応言語ビットマップ
#define NTR_LANG_BITMAP_KOREA ( ( 0x0001 << NTR_LANG_KOREAN ) | \
( 0x0001 << NTR_LANG_JAPANESE ) | \
( 0x0001 << NTR_LANG_ENGLISH ) | \
( 0x0001 << NTR_LANG_FRENCH ) | \
( 0x0001 << NTR_LANG_GERMAN ) | \
( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-KR版での対応言語ビットマップ
#define NTR_LANG_BITMAP_ALL ( ( 0x0001 << NTR_LANG_JAPANESE ) | \
( 0x0001 << NTR_LANG_ENGLISH ) | \
( 0x0001 << NTR_LANG_FRENCH ) | \
( 0x0001 << NTR_LANG_GERMAN ) | \
( 0x0001 << NTR_LANG_ITALIAN ) | \
( 0x0001 << NTR_LANG_SPANISH ) | \
( 0x0001 << NTR_LANG_CHINESE ) | \
( 0x0001 << NTR_LANG_KOREAN ) ) // NTR-IPL2全体での対応言語ビットマップ
// 日付データ
typedef struct NTRDate{
u8 month; // 月:0112
u8 day; // 日:0131
}NTRDate; // 2byte
// ニックネーム
typedef struct NTRNickname{
u16 buffer[ NTR_NICKNAME_LENGTH ]; // ニックネームUnicode(UTF16)で最大10文字、終端コードなし
u8 length; // 文字数
u8 rsv;
}NTRNickname; // 22byte
// コメント
typedef struct NTRComment{
u16 buffer[ NTR_COMMENT_LENGTH ]; //コメントUnicode(UTF16)で最大26文字、終端コードなし
u8 length; // 文字数
u8 rsv;
}NTRComment; // 54byte
// オーナー情報
typedef struct NTROwnerInfo{
u8 userColor : 4; // ユーザーカラー
u8 rsv : 4; // 予約。
NTRDate birthday; // 生年月日
u8 pad;
NTRNickname nickname; // ニックネーム
NTRComment comment; // コメント
}NTROwnerInfo; // 80byte
// IPL用目覚まし時計データ
typedef struct NTRAlarm{
u8 hour; // アラーム時:0023
u8 minute; // アラーム分:0059
u8 rsv1; // 予約
u8 pad;
u16 alarmOn : 1; // アラームON,OFF0:OFF, 1:ON
u16 rsv2 : 15; // 予約
}NTRAlarm; // 6byte
// タッチパネルキャリブレーションデータ
typedef struct NTRTPCalibData{
u16 raw_x1; // 第キャリブレーション点のTP取得値X
u16 raw_y1; //             TP取得値Y
u8 dx1; //             LCD座標 X
u8 dy1; //             LCD座標 Y
u16 raw_x2; // 第キャリブレーション点のTP取得値X
u16 raw_y2; //             TP取得値Y
u8 dx2; //             LCD座標 X
u8 dy2; //             LCD座標 Y
}NTRTPCalibData; // 12byte
// オプション情報
typedef struct NTROption{
u16 language : 3; // 言語コードNTR_LANG_SPANISHまでの標準言語コードが入る
u16 isGBUseTopLCD : 1; // AGBモードで起動する時にどちらのLCDで起動するか0:TOP,1:BOTTOM
u16 backlightBrightness : 2; // バックライト輝度データ
u16 isAutoBoot : 1; // 起動シーケンスで、メニュー停止なしで自動起動するかどうか?(0:OFF, 1:ON)
u16 isBacklightOff : 1; // バックライトON,OFFフラグ0:ON, 1:OFF
u16 rsv2 : 1; // 予約
u16 initialSequence : 1; // 初回起動シーケンス中フラグ
u16 isSetBirthday : 1; // 誕生日が入力されたか?
u16 isSetUserColor : 1; // ユーザーカラーが入力されたか?
u16 isSetTP : 1; // タッチパネルがキャリブレーションされたか?( 〃 )
u16 isSetLanguage : 1; // 言語入力がされたか?  (0:未設定, 1:設定済み)
u16 isSetDateTime : 1; // 日付・時刻設定がされたか? ( 〃      )
u16 isSetNickname : 1; // ニックネームが入力されたか? ( 〃      )
u8 rtcLastSetYear; // RTCの前回設定年
u8 rtcClockAdjust; // RTCクロック調整値
s64 rtcOffset; // RTC設定時のオフセット値ユーザーがRTC設定を変更する度にその値に応じて増減します。
}NTROption; // 12byte
// NTR各種設定データ
typedef struct NTRSettingsData{
u8 version; // フラッシュ格納データフォーマットのバージョン
u8 pad;
NTROwnerInfo owner; // オーナー情報
NTRAlarm alarm; // IPL用目覚まし時計データ
NTRTPCalibData tp; // タッチパネルキャリブレーションデータ
NTROption option; // オプション
}NTRSettingsData; // 112byte
// 拡張NTR設定データ
typedef struct NTRSettingsDataEx{
u8 version; // バージョン
u8 language; // 言語コードNTR_LANG_CHINESE以降に拡張された値が入る。
u16 valid_language_bitmap; // 本IPL2で有効な言語コードを示したビットマップ
u8 pad[ 256 - sizeof(NTRSettingsData) - 4 - 4 - 2 ]; // 4:saveCount+crc16, 2:NSDEx.version+NSDEx.language, 2:crc16_ex
}NTRSettingsDataEx; // 138bytes
#ifdef SDK_ARM9
//=========================================================
// NVRAMへのリードライト関数
//=========================================================
extern void NSD_ClearSettings( void );
extern BOOL NSD_IsReadSettings( void );
extern BOOL NSD_ReadSettings( u32 validLangBitmap );
extern BOOL NSD_WriteSettings( void ); // 先にNSD_ReadSettingsを実行しておく必要がある。
//=========================================================
// グローバル変数
//=========================================================
extern NTRSettingsData *g_pNSD;
extern NTRSettingsDataEx *g_pNSDEx;
#define GetNSD() ( g_pNSD )
#define GetNSDEx() ( g_pNSDEx )
//=========================================================
// データ取得NSD_ReadSettingsで内部ワークに読み出した情報の取得
//=========================================================
// バージョンの取得。
static inline u8 NSD_GetVersion( void )
{
return (u8)GetNSD()->version;
}
// EXバージョンの取得。
static inline u8 NSD_GetExVersion( void )
{
return (u8)GetNSDEx()->version;
}
// オーナー情報全体へのポインタの取得。
static inline NTROwnerInfo *NSD_GetOwnerInfoPtr( void )
{
return &GetNSD()->owner;
}
// オーナー情報全体の取得。
static inline void NSD_GetOwnerInfo( NTROwnerInfo *pDst )
{
MI_CpuCopy8( &GetNSD()->owner, pDst, sizeof(NTROwnerInfo) );
}
// ユーザーカラーの取得。
static inline u8 NSD_GetUserColor( void )
{
return (u8)GetNSD()->owner.userColor;
}
// 誕生日へのポインタの取得。
static inline NTRDate *NSD_GetBirthdayPtr( void )
{
return &GetNSD()->owner.birthday;
}
// 誕生日の取得。
static inline void NSD_GetBirthday( NTRDate *pDst )
{
MI_CpuCopy8( &GetNSD()->owner.birthday, pDst, sizeof(NTRDate) );
}
// ニックネームへのポインタの取得。
static inline NTRNickname *NSD_GetNicknamePtr( void )
{
return &GetNSD()->owner.nickname;
}
// ニックネームの取得。
static inline void NSD_GetNickname( NTRNickname *pDst )
{
MI_CpuCopy8( &GetNSD()->owner.nickname, pDst, sizeof(NTRNickname) );
}
// コメントへのポインタの取得。
static inline NTRComment *NSD_GetCommentPtr( void )
{
return &GetNSD()->owner.comment;
}
// コメントの取得。
static inline void NSD_GetComment( NTRComment *pDst )
{
MI_CpuCopy8( &GetNSD()->owner.comment, pDst, sizeof(NTRComment) );
}
// アラーム情報へのポインタの取得。
static inline NTRAlarm *NSD_GetAlarmDataPtr( void )
{
return &GetNSD()->alarm;
}
// アラーム情報の取得。
static inline void NSD_GetAlarmData( NTRAlarm *pDst )
{
MI_CpuCopy8( &GetNSD()->alarm, pDst, sizeof(NTRAlarm) );
}
// タッチパネルキャリブレーションデータへのポインタの取得。
static inline NTRTPCalibData *NSD_GetTPCalibrationPtr( void )
{
return &GetNSD()->tp;
}
// タッチパネルキャリブレーションデータの取得。
static inline void NSD_GetTPCalibration( NTRTPCalibData *pDst )
{
MI_CpuCopy8( &GetNSD()->tp, pDst, sizeof(NTRTPCalibData) );
}
// 言語コードの取得
static inline NTRLangCode NSD_GetLanguage( void )
{
return (NTRLangCode)GetNSD()->option.language;
}
static inline NTRLangCode NSD_GetLanguageEx( void )
{
return (NTRLangCode)GetNSDEx()->language;
}
// 対応言語ビットマップの取得
static inline u16 NSD_GetValidLanguageBitmap( void )
{
return GetNSDEx()->valid_language_bitmap;
}
// RTCオフセット値の取得
static inline s64 NSD_GetRTCOffset( void )
{
return GetNSD()->option.rtcOffset;
}
// RTCクロック調整値の取得
static inline u8 NSD_GetRTCClockAdjust( void )
{
return GetNSD()->option.rtcClockAdjust;
}
// RTCの前回セットした年の取得
static inline u8 NSD_GetRTCLastSetYear( void )
{
return GetNSD()->option.rtcLastSetYear;
}
// 起動シーケンスの自動起動ONか0:OFF, 1:ON
static inline int NSD_IsAutoBoot( void )
{
return (int)GetNSD()->option.isAutoBoot;
}
// バックライト輝度取得0-3
static inline BOOL NSD_IsBacklightOff( void )
{
return (BOOL)GetNSD()->option.isBacklightOff;
}
// バックライト輝度取得0-3
static inline int NSD_GetBacklightBrightness( void )
{
return (int)GetNSD()->option.backlightBrightness;
}
// フラッシュ壊れシーケンス中かどうか?
static inline BOOL NSD_IsInitialSequence( void )
{
return (int)GetNSD()->option.initialSequence;
}
// 誕生日データがセットされているか?
static inline BOOL NSD_IsSetBirthday( void )
{
return (int)GetNSD()->option.isSetBirthday;
}
// ユーザーカラーデータがセットされているか?
static inline int NSD_IsSetUserColor( void )
{
return (int)GetNSD()->option.isSetUserColor;
}
// TPキャリブレーションデータがセットされているか
static inline int NSD_IsSetTP( void )
{
return (int)GetNSD()->option.isSetTP;
}
// 言語コードがセットされているか?
static inline int NSD_IsSetLanguage( void )
{
return (int)GetNSD()->option.isSetLanguage;
}
// 日付・時刻がセットされているか?
static inline int NSD_IsSetDateTime( void )
{
return (int)GetNSD()->option.isSetDateTime;
}
// オーナー情報のニックネームがセットされているか?
static inline int NSD_IsSetNickname( void )
{
return (int)GetNSD()->option.isSetNickname;
}
// GBアプリなど画面ソフトが使うのは上画面
static inline BOOL NSD_IsGBUseTopLCD( void )
{
return (BOOL)GetNSD()->option.isGBUseTopLCD;
}
//=========================================================
// データセット
//=========================================================
// バージョンのセット。
static inline void NSD_SetVersion( u8 version )
{
GetNSD()->version = version;
}
// バージョンEXのセット。
static inline void NSD_SetExVersion( u8 version )
{
GetNSDEx()->version = version;
}
// オーナー情報のクリア
extern void NSD_ClearOwnerInfo( void );
// オーナー情報全体のセット。
static inline void NSD_SetOwnerInfo( const NTROwnerInfo *pOwner )
{
MI_CpuCopy16( pOwner, &GetNSD()->owner, sizeof(NTROwnerInfo) );
}
// ユーザーカラーのセット。
static inline void NSD_SetUserColor( u8 userColor )
{
GetNSD()->owner.userColor = userColor;
}
// 誕生日のセット。
static inline void NSD_SetBirthday( const NTRDate *pBirthday )
{
GetNSD()->owner.birthday.month = pBirthday->month;
GetNSD()->owner.birthday.day = pBirthday->day;
}
// ニックネームのセット。
static inline void NSD_SetNickname( const NTRNickname *pName )
{
MI_CpuCopy16( pName, &GetNSD()->owner.nickname, sizeof(NTRNickname) );
}
// コメントのセット。
static inline void NSD_SetComment( const NTRComment *pComment )
{
MI_CpuCopy16( pComment, &GetNSD()->owner.comment, sizeof(NTRComment) );
}
// アラーム情報のセット。
static inline void NSD_SetAlarmData( const NTRAlarm *pAlarm )
{
MI_CpuCopy16( pAlarm, &GetNSD()->alarm, sizeof(NTRAlarm) );
}
// タッチパネルキャリブレーションデータのセット。
static inline void NSD_SetTPCalibration( const NTRTPCalibData *pTPCalib )
{
MI_CpuCopy16( pTPCalib, &GetNSD()->tp, sizeof(NTRTPCalibData) );
}
// 言語コードのセット
#if 0
static inline void NSD_SetLanguage( NTRLangCode language )
{
GetNSDEx()->language = language;
if( language >= NTR_LANG_CODE_MAX_WW ) {
GetNSD()->option.language = NTR_LANG_ENGLISH;
}else {
GetNSD()->option.language = language;
}
}
#else
static inline void NSD_SetLanguage( NTRLangCode language )
{
GetNSD()->option.language = language;
}
static inline void NSD_SetLanguageEx( NTRLangCode language )
{
GetNSDEx()->language = language;
}
#endif
// 対応言語ビットマップのセット
static inline void NSD_SetValidLanguageBitmap( u16 valid_language_bitmap )
{
GetNSDEx()->valid_language_bitmap = valid_language_bitmap;
}
// RTCオフセット値のセット
static inline void NSD_SetRTCOffset( s64 rtcOffset )
{
GetNSD()->option.rtcOffset = rtcOffset;
}
// RTCクロック調整値のセット
static inline void NSD_SetRTCClockAdjust( u8 rtcClockAdjust )
{
GetNSD()->option.rtcClockAdjust = rtcClockAdjust;
}
// RTCのLastSetYearへのセット
static inline void NSD_SetRTCLastSetYear( u8 rtcLastSetYear )
{
GetNSD()->option.rtcLastSetYear = rtcLastSetYear;
}
// 起動シーケンスの自動起動ON,OFFフラグをセット。
static inline void NSD_SetFlagAutoBoot( BOOL set )
{
GetNSD()->option.isAutoBoot = (u16)set;
}
// バックライトON/OFFをセット。
static inline void NSD_SetFlagBacklightOff( BOOL set )
{
GetNSD()->option.isBacklightOff = (u16)set;
}
// バックライト輝度情報をセット。
static inline void NSD_SetBacklightBrightness( BOOL backlightBrightness )
{
GetNSD()->option.backlightBrightness = (u16)backlightBrightness;
}
// 初回起動シーケンス中かどうかのフラグセット。
static inline void NSD_SetFlagInitialSequence( BOOL set )
{
GetNSD()->option.initialSequence = (u16)set;
}
// 誕生日データの入力済みフラグセット。
static inline void NSD_SetFlagBirthday( BOOL set )
{
GetNSD()->option.isSetBirthday = (u16)set;
}
// ユーザーカラーの入力済みフラグセット。
static inline void NSD_SetFlagUserColor( BOOL set )
{
GetNSD()->option.isSetUserColor = (u16)set;
}
// TPキャリブレーションデータの入力済みフラグセット。
static inline void NSD_SetFlagTP( BOOL set )
{
GetNSD()->option.isSetTP = (u16)set;
}
// 言語コードの入力済みフラグセット。
static inline void NSD_SetFlagLanguage( BOOL set )
{
GetNSD()->option.isSetLanguage = (u16)set;
}
// 日付・時刻入力済みフラグセット。
static inline void NSD_SetFlagDateTime( BOOL set )
{
GetNSD()->option.isSetDateTime = (u16)set;
}
// オーナー情報のニックネームの入力済みフラグセット。
static inline void NSD_SetFlagNickname( BOOL set )
{
GetNSD()->option.isSetNickname = (u16)set;
}
// GBアプリなど画面ソフトが使う画面フラグをセット
static inline void NSD_SetFlagGBUseTopLCD( BOOL set )
{
GetNSD()->option.isGBUseTopLCD = (u32)set;
}
#endif // SDK_ARM9
#ifdef __cplusplus
}
#endif
#endif // SDK_CW
#endif // NTR_SETTINGS_H_