TwlIPL/include/sysmenu/machineSettings/common/nitroSettings.h
yosiokat c52da9b005 systemMenu_REDのフォルダ再構成
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@73 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2007-10-30 09:33:43 +00:00

484 lines
14 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: NitroSettings.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 NITRO_SETTINGS_H_
#define NITRO_SETTINGS_H_
#if defined(SDK_CW) // NitroConfigDataにビットフィールドを使っているので、コンパイラ依存で不具合が発生する可能性がある。
// よって、CW以外のコンパイラの場合は、このヘッダを無効にしてエラーを出させるようにして再確認する。
#include <twl.h>
#ifdef __cplusplus
extern "C" {
#endif
// define data ------------------------------------
#define NITRO_CONFIG_DATA_VERSION 5 // NITRO設定データフォーマットバージョン
#define NITRO_CONFIG_DATA_EX_VERSION 1 // 拡張NITRO設定データフォーマットバージョン
#define NCD_NICKNAME_LENGTH 10 // ニックネーム長
#define NCD_COMMENT_LENGTH 26 // コメント長
#define NCD_FAVORITE_COLOR_MAX_NUM 16 // 好きな色の最大数
// 言語設定コード
typedef enum NvLangCode{
LANG_JAPANESE =0, // 日本語
LANG_ENGLISH =1, // 英語
LANG_FRENCH =2, // フランス語
LANG_GERMAN =3, // ドイツ語
LANG_ITALIAN =4, // イタリア語
LANG_SPANISH =5, // スペイン語
LANG_CHINESE =6, // 中国語
LANG_HANGUL =7, // 韓国語
LANG_CODE_MAX
}NvLangCode;
#define LANG_CODE_MAX_WW ( LANG_SPANISH + 1 )
#define LANG_BITMAP_WW ( ( 0x0001 << LANG_JAPANESE ) \
| ( 0x0001 << LANG_ENGLISH ) \
| ( 0x0001 << LANG_FRENCH ) \
| ( 0x0001 << LANG_GERMAN ) \
| ( 0x0001 << LANG_ITALIAN ) \
| ( 0x0001 << LANG_SPANISH ) ) // 通常版での対応言語ビットマップ
#define VALID_LANG_BITMAP LANG_BITMAP_WW // 本IPL2の対応言語ビットマップ
// 日付データ
typedef struct NvDate{
u8 month; // 月:0112
u8 day; // 日:0131
}NvDate; // 2byte
// ニックネーム
typedef struct NvNickname{
u16 str[NCD_NICKNAME_LENGTH]; // ニックネームUnicode(UTF16)で最大10文字、終端コードなし
u8 length; // 文字数
u8 rsv;
}NvNickname; // 22byte
// コメント
typedef struct NvComment{
u16 str[NCD_COMMENT_LENGTH]; //コメントUnicode(UTF16)で最大26文字、終端コードなし
u8 length; // 文字数
u8 rsv;
}NvComment; // 54byte
// オーナー情報
typedef struct NvOwnerInfo{
u8 favoriteColor : 4; // 好きな色
u8 rsv : 4; // 予約。
NvDate birthday; // 生年月日
u8 pad;
NvNickname nickname; // ニックネーム
NvComment comment; // コメント
}NvOwnerInfo; // 80byte
// IPL用目覚まし時計データ
typedef struct NvAlarm{
u8 hour; // アラーム時:0023
u8 minute; // アラーム分:0059
u8 rsv1; // 予約
u8 pad;
u16 alarmOn : 1; // アラームON,OFF0:OFF, 1:ON
u16 rsv2 : 15; // 予約
}NvAlarm; // 6byte
// タッチパネルキャリブレーションデータ
typedef struct NvTpCalibData{
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
}NvTpCalibData; // 12byte
// オプション情報
typedef struct NvOption{
u16 language : 3; // 言語コードLANG_SPANISHまでの標準言語コードが入る
u16 agbLcd : 1; // AGBモードで起動する時にどちらのLCDで起動するか0:TOP,1:BOTTOM
u16 backLightBrightness : 2; // バックライト輝度データ
u16 autoBootFlag : 1; // 起動シーケンスで、メニュー停止なしで自動起動するかどうか?(0:OFF, 1:ON)
u16 backLightOffFlag : 1; // バックライトON,OFFフラグ0:ON, 1:OFF
u16 rsv2 : 1; // 予約
u16 destroyFlashFlag : 1; // フラッシュ壊れシーケンス中フラグ
u16 input_birthday : 1; // 誕生日が入力されたか?
u16 input_favoriteColor : 1; // 好きな色が入力されたか?
u16 input_tp : 1; // タッチパネルがキャリブレーションされたか?( 〃 )
u16 input_language : 1; // 言語入力がされたか?  (0:未設定, 1:設定済み)
u16 input_rtc : 1; // RTC設定がされたか ( 〃      )
u16 input_nickname : 1; // ニックネームが入力されたか? ( 〃      )
u8 rtcLastSetYear; // RTCの前回設定年
u8 rtcClockAdjust; // RTCクロック調整値
s64 rtcOffset; // RTC設定時のオフセット値ユーザーがRTC設定を変更する度にその値に応じて増減します。
}NvOption; // 12byte
// NITRO各種設定データ
typedef struct NitroConfigData{
u8 version; // フラッシュ格納データフォーマットのバージョン
u8 pad;
NvOwnerInfo owner; // オーナー情報
NvAlarm alarm; // IPL用目覚まし時計データ
NvTpCalibData tp; // タッチパネルキャリブレーションデータ
NvOption option; // オプション
}NitroConfigData; // 112byte
// NITRO各種設定データのNVRAM保存時フォーマット
typedef struct NCDStore{
NitroConfigData ncd; // NITRO各種設定データ
u16 saveCount; // 0x00-0x7fをループしてカウントし、カウント値が新しいデータが有効。
u16 crc16; // NITRO各種設定データの16bitCRC
u8 pad[ 128 - sizeof(NitroConfigData) - 4];
}NCDStore; // 128byte // ※本来なら、saveCountとcrc16は256byteの最後に付加して、間にパディングを埋める方がいい。
//----------------------------------------------
// IPL2中国・韓国版での拡張フォーマット
//----------------------------------------------
// 拡張NITRO設定データ
typedef struct NitroConfigDataEx{
u8 version; // バージョン
u8 language; // 言語コードLANG_CHINESE以降に拡張された値が入る。
u16 valid_language_bitmap; // 本IPL2で有効な言語コードを示したビットマップ
u8 pad[ 256 - sizeof(NitroConfigData) - 4 - 4 - 2 ]; // 4:saveCount+crc16, 2:NCDEx.version+NCDEx.language, 2:crc16_ex
}NitroConfigDataEx; // 138bytes
// NITRO各種設定データのNVRAM保存時フォーマット
typedef struct NCDStoreEx{
NitroConfigData ncd; // NITRO各種設定データ
u16 saveCount; // 0x00-0x7fをループしてカウントし、カウント値が新しいデータが有効。
u16 crc16; // NITRO各種設定データの16bitCRC
NitroConfigDataEx ncd_ex;
u16 crc16_ex;
}NCDStoreEx; // 256byte // ※本来なら、saveCountとcrc16は256byteの最後に付加して、間にパディングを埋める方がいい。
//=========================================================
// NVRAMへのリードライト関数
//=========================================================
#ifdef SDK_ARM9
extern int NVRAMm_ReadNitroConfigData (NitroConfigData *dstp);
extern void NVRAMm_WriteNitroConfigData(NitroConfigData *dstp);
#endif
//=========================================================
// NITRO設定データへのアクセス関数
//=========================================================
extern NitroConfigDataEx ncdEx;
#define GetNCDWork() ( (NitroConfigData *)( HW_NVRAM_USER_INFO ) )
#define GetNCDExWork() ( &ncdEx )
// NITRO設定データ領域のアドレス獲得
extern void NCD_ClearOwnerInfo( void ); // ニックネーム・誕生日・好きな色のクリア
extern u8 NCD_GetIPL2Type( void );
extern u8 *NCD_GetIPL2Version( void );
extern u32 NCD_GetNCDRomAddr( void );
//=========================================================
// データ取得
//=========================================================
//-----------------------------------
// オーナー情報全体の取得。
static inline NvOwnerInfo *NCD_GetOwnerInfo(void)
{
return &GetNCDWork()->owner;
}
// 好きな色の取得。
static inline u8 NCD_GetFavoriteColor(void)
{
return (u8)GetNCDWork()->owner.favoriteColor;
}
// 誕生日の取得。
static inline NvDate *NCD_GetBirthday(void)
{
return &GetNCDWork()->owner.birthday;
}
// ニックネームの取得。
static inline NvNickname *NCD_GetNickname(void)
{
return &GetNCDWork()->owner.nickname;
}
// コメントの取得。
static inline NvComment *NCD_GetComment(void)
{
return &GetNCDWork()->owner.comment;
}
//-----------------------------------
// アラーム情報の取得。
static inline NvAlarm *NCD_GetAlarmData(void)
{
return &GetNCDWork()->alarm;
}
//-----------------------------------
// タッチパネルキャリブレーションデータの取得。
static inline NvTpCalibData *NCD_GetTPCalibration(void)
{
return &GetNCDWork()->tp;
}
//-----------------------------------
// オプション情報の取得。
// 言語コードの取得
static inline NvLangCode NCD_GetLanguage(void)
{
return (NvLangCode)GetNCDExWork()->language;
}
static inline NvLangCode NCD_GetLanguageOrg(void)
{
return (NvLangCode)GetNCDWork()->option.language;
}
// RTCオフセット値の取得
static inline s64 NCD_GetRtcOffset(void)
{
return GetNCDWork()->option.rtcOffset;
}
// RTCクロック調整値の取得
static inline u8 NCD_GetRtcClockAdjust(void)
{
return GetNCDWork()->option.rtcClockAdjust;
}
// RTCの前回セットした年の取得
static inline u8 NCD_GetRtcLastSetYear(void)
{
return GetNCDWork()->option.rtcLastSetYear;
}
// 起動シーケンスの自動起動ONか0:OFF, 1:ON
static inline int NCD_GetAutoBootFlag(void)
{
return (int)GetNCDWork()->option.autoBootFlag;
}
// バックライト輝度取得0-3
static inline int NCD_GetBackLightBrightness(void)
{
return (int)GetNCDWork()->option.backLightBrightness;
}
// フラッシュ壊れシーケンス中かどうか?
static inline int NCD_GetDestroyFlash(void)
{
return (int)GetNCDWork()->option.destroyFlashFlag;
}
// 誕生日データがセットされているか?
static inline int NCD_GetInputBirthday(void)
{
return (int)GetNCDWork()->option.input_birthday;
}
// 好きな色データがセットされているか?
static inline int NCD_GetInputFavoriteColor(void)
{
return (int)GetNCDWork()->option.input_favoriteColor;
}
// TPキャリブレーションデータがセットされているか
static inline int NCD_GetInputTP(void)
{
return (int)GetNCDWork()->option.input_tp;
}
// 言語コードがセットされているか?
static inline int NCD_GetInputLanguage(void)
{
return (int)GetNCDWork()->option.input_language;
}
// RTCデータがセットされているか
static inline int NCD_GetInputRTC(void)
{
return (int)GetNCDWork()->option.input_rtc;
}
// オーナー情報のニックネームがセットされているか?
static inline int NCD_GetInputNickname(void)
{
return (int)GetNCDWork()->option.input_nickname;
}
//=========================================================
// データセット
//=========================================================
//-----------------------------------
// オーナー情報全体のセット。
static inline void NCD_SetOwnerInfo(NvOwnerInfo *owinfop)
{
SVC_CpuCopy( owinfop, &GetNCDWork()->owner, sizeof(NvOwnerInfo), 16);
}
// 好きな色のセット。
static inline void NCD_SetFavoriteColor(u8 favoriteColor)
{
GetNCDWork()->owner.favoriteColor = favoriteColor;
}
// 誕生日のセット。
static inline void NCD_SetBirthday(NvDate *birthp)
{
GetNCDWork()->owner.birthday.month = birthp->month;
GetNCDWork()->owner.birthday.day = birthp->day;
}
// ニックネームのセット。
static inline void NCD_SetNickname(NvNickname *namep)
{
SVC_CpuCopy( namep, &GetNCDWork()->owner.nickname, sizeof(NvNickname), 16);
}
// コメントのセット。
static inline void NCD_SetComment(NvComment *commentp)
{
SVC_CpuCopy( commentp, &GetNCDWork()->owner.comment, sizeof(NvComment), 16);
}
//-----------------------------------
// アラーム情報のセット。
static inline void NCD_SetAlarmData(NvAlarm *alarmp)
{
SVC_CpuCopy( alarmp, &GetNCDWork()->alarm, sizeof(NvAlarm), 16);
}
//-----------------------------------
// タッチパネルキャリブレーションデータのセット。
static inline void NCD_SetTPCalibration(NvTpCalibData *tp_calibp)
{
SVC_CpuCopy( tp_calibp, &GetNCDWork()->tp, sizeof(NvTpCalibData), 16);
}
//-----------------------------------
// オプション情報のセット。
// 言語コードのセット
static inline void NCD_SetLanguage(NvLangCode language)
{
GetNCDExWork()->language = language;
if( language >= LANG_CODE_MAX_WW ) {
GetNCDWork()->option.language = LANG_ENGLISH;
}else {
GetNCDWork()->option.language = language;
}
}
// RTCオフセット値のセット
static inline void NCD_SetRtcOffset(s64 rtcOffset)
{
GetNCDWork()->option.rtcOffset = rtcOffset;
}
// RTCクロック調整値のセット
static inline void NCD_SetRtcClockAdjust(u8 rtcClockAdjust)
{
GetNCDWork()->option.rtcClockAdjust = rtcClockAdjust;
}
// RTCのLastSetYearへのセット
static inline void NCD_SetRtcLastSetYear(u8 rtcLastSetYear)
{
GetNCDWork()->option.rtcLastSetYear = rtcLastSetYear;
}
// 起動シーケンスの自動起動ON,OFFフラグをセット。
static inline void NCD_SetAutoBootFlag(BOOL autoBootFlag)
{
GetNCDWork()->option.autoBootFlag = (u16)autoBootFlag;
}
// バックライト輝度情報をセット。
static inline void NCD_SetBackLightBrightness(BOOL backLightBrightness )
{
GetNCDWork()->option.backLightBrightness = (u16)backLightBrightness;
}
// フラッシュ壊れシーケンス中かどうかのフラグセット。
static inline void NCD_SetDestroyFlash(BOOL destroy)
{
GetNCDWork()->option.destroyFlashFlag = (u16)destroy;
}
// 誕生日データの入力済みフラグセット。
static inline void NCD_SetInputBirthday(BOOL input)
{
GetNCDWork()->option.input_birthday = (u16)input;
}
// 好きな色データの入力済みフラグセット。
static inline void NCD_SetInputFavoriteColor(BOOL input)
{
GetNCDWork()->option.input_favoriteColor = (u16)input;
}
// TPキャリブレーションデータの入力済みフラグセット。
static inline void NCD_SetInputTP(BOOL input)
{
GetNCDWork()->option.input_tp = (u16)input;
}
// 言語コードの入力済みフラグセット。
static inline void NCD_SetInputLanguage(BOOL input)
{
GetNCDWork()->option.input_language = (u16)input;
}
// RTCデータの入力済みフラグセット。
static inline void NCD_SetInputRTC(BOOL input)
{
GetNCDWork()->option.input_rtc = (u16)input;
}
// オーナー情報のニックネームの入力済みフラグセット。
static inline void NCD_SetInputNickname(BOOL input)
{
GetNCDWork()->option.input_nickname = (u16)input;
}
#ifdef __cplusplus
}
#endif
#endif // SDK_CW
#endif // NITRO_SETTINGS_H_