X3バックライト対応その2:X3以降ではバックライト輝度値の保存にLCFGを使用しないよう変更

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@821 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-03-05 05:51:35 +00:00
parent f0e34f5fd5
commit a7f1f274a2
4 changed files with 84 additions and 84 deletions

View File

@ -41,6 +41,44 @@ u32 PMi_WriteRegisterAsync(u16 registerAddr, u16 data, PMCallback callback, void
//
// ============================================================================
// 輝度取得で呼ぶSYSM_ReadMcuRegisterAsyncのコールバック
static OSThreadQueue s_callback_queue;
static SYSMMcuResult s_callback_result;
static void BackLightBlightnessCallBack( SYSMMcuResult result, void *arg )
{
#pragma unused(arg)
s_callback_result = result;
OS_WakeupThread( &s_callback_queue );
}
// バックライト輝度取得
u8 SYSM_GetBackLightBlightness( void )
{
u8 brightness;
#ifdef SDK_SUPPORT_PMIC_2
if ( SYSMi_GetMcuVersion() <= 1 )
{
// X2以前
brightness = (u8)LCFG_TSD_GetBacklightBrightness();
}
else
#endif // SDK_SUPPORT_PMIC_2
{
// X3以降
while( 1 )
{
// BUSYだと失敗するので成功するまでトライ
if ( MCU_RESULT_SUCCESS == SYSM_ReadMcuRegisterAsync( MCU_REG_BL_ADDR, &brightness, BackLightBlightnessCallBack, NULL ) )
{
OS_SleepThread( &s_callback_queue ); // 値が返ってくるまでスリープ
break;
}
}
}
return brightness;
}
// バックライト輝度調整
void SYSM_SetBackLightBrightness( u8 brightness )
{
@ -52,23 +90,31 @@ void SYSM_SetBackLightBrightness( u8 brightness )
if ( SYSMi_GetMcuVersion() <= 1 )
{
( void )PMi_WriteRegister( REG_PMIC_BL_BRT_B_ADDR, (u8)(brightness * 2) );
// X2以前のボードのみLCFGに値を保存
LCFG_TSD_SetBacklightBrightness( brightness );
{
u8 *pBuffer = SYSM_Alloc( LCFG_WRITE_TEMP );
if( pBuffer != NULL ) {
LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer );
SYSM_Free( pBuffer );
}
}
}
else
#endif // SDK_SUPPORT_PMIC_2
{
( void )SYSM_WriteMcuRegisterAsync( MCU_REG_BL_ADDR, brightness, NULL, NULL );
}
LCFG_TSD_SetBacklightBrightness( brightness );
// [TODO:] バックライト輝度は毎回セーブせずに、アプリ起動やリセット、電源OFF時に値が変わっていたらセーブするようにする。
{
u8 *pBuffer = SYSM_Alloc( LCFG_WRITE_TEMP );
if( pBuffer != NULL ) {
LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer );
SYSM_Free( pBuffer );
// X3以降はマイコンに保存するだけ
while( 1 )
{
// BUSYだと失敗するので成功するまでトライ
if ( MCU_RESULT_SUCCESS == SYSM_WriteMcuRegisterAsync( MCU_REG_BL_ADDR, brightness, NULL, NULL ) )
{
break;
}
}
}
}

View File

@ -177,7 +177,11 @@ TitleProperty *SYSM_ReadParameters( void )
SYSMi_GetWork()->flags.common.isFatalError = TRUE;
}else if( LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ) ) { // NANDからTWL本体設定データをリード
SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。
brightness = (u8)LCFG_TSD_GetBacklightBrightness();
if ( SYSMi_GetMcuVersion() <= 1 )
{
// X2ボード以前だけ輝度読み込み
brightness = (u8)LCFG_TSD_GetBacklightBrightness();
}
}else {
SYSMi_GetWork()->flags.common.isInitialSettings = TRUE; // リード失敗なら初回起動シーケンスへ
}

View File

@ -125,11 +125,6 @@ static BannerCounter banner_counter[LAUNCHER_TITLE_LIST_NUM];
// ランチャー
//======================================================
// バナー表示関係(暫定)
#define DBGBNR
#ifdef DBGBNR
static void LoadBannerFiles( void )
{
// デフォルトバナーファイルの読み込み。最終的にリブートしてしまうので、解放処理は無し
@ -369,9 +364,6 @@ static void BannerDraw(int selected, TitleProperty *titleprop)
}
}
#endif //DBGBNR
// ランチャーの初期化
void LauncherInit( TitleProperty *pTitleList )
{
@ -415,56 +407,7 @@ void LauncherInit( TitleProperty *pTitleList )
//FS_InitFile(&strm.file);
//strm.isPlay = FALSE;
#ifdef DBGBNR
BannerInit();
#endif
}
// 輝度表示ポーリングで呼んだSYSM_ReadMcuRegisterAsyncのコールバック
static OSThreadQueue s_callback_queue;
static SYSMMcuResult s_callback_result;
static void PollBackLightBlightnessCallBack( SYSMMcuResult result, void *arg )
{
s_callback_result = result;
OS_WakeupThread( &s_callback_queue );
}
// 輝度表示ポーリング
// X3基盤から、Select+音量で輝度変更できるようになったため、輝度スイッチ表示切り替えタイミングを変更
// 変化があれば輝度スイッチ表示を切り替えるように
static void PollBackLightBrightness( void )
{
static int old_brightness = -1;
#ifdef SDK_SUPPORT_PMIC_2
if ( SYSMi_GetMcuVersion() <= 1 )
{
}
else
#endif // SDK_SUPPORT_PMIC_2
{
u8 brightness;
( void )SYSM_ReadMcuRegisterAsync( MCU_REG_BL_ADDR, &brightness, PollBackLightBlightnessCallBack, NULL );
OS_SleepThread( &s_callback_queue ); // 値が返ってくるまでスリープ
if( s_callback_result==MCU_RESULT_SUCCESS && LCFG_TSD_GetBacklightBrightness() != brightness )
{
// マイコンから取ってきた輝度とLCFGの設定値がズレていたらLCFGの値を設定しなおし
LCFG_TSD_SetBacklightBrightness( brightness );
{
u8 *pBuffer = SYSM_Alloc( LCFG_WRITE_TEMP );
if( pBuffer != NULL ) {
LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer );
SYSM_Free( pBuffer );
}
}
}
}
// 1フレーム前の古い値とLCFGの値が違っていたら描画しなおし
if( old_brightness != LCFG_TSD_GetBacklightBrightness() )
{
old_brightness = LCFG_TSD_GetBacklightBrightness();
DrawBackLightSwitch();
}
}
// ROMのローディング中のランチャーフェードアウト
@ -473,16 +416,13 @@ BOOL LauncherFadeout( TitleProperty *pTitleList )
static int fadecount = 0;
// 描画関係
// 輝度表示
PollBackLightBrightness();
DrawBackLightSwitch();
DrawScrollBar( pTitleList );
#ifdef DBGBNR
BannerDraw( selected, pTitleList );
#endif
// 描画少し追加
{
@ -575,14 +515,14 @@ static void ProcessBackLightPads( void )
}
if( (pad.trg & PAD_KEY_UP) || up_bl_trg ) {
brightness = LCFG_TSD_GetBacklightBrightness() + 1;
brightness = SYSM_GetBackLightBlightness() + 1;
if( brightness > LCFG_TWL_BACKLIGHT_LEVEL_MAX ) {
brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX;
}
SYSM_SetBackLightBrightness( (u8)brightness );
}
if( ( pad.trg & PAD_KEY_DOWN) || dw_bl_trg ) {
brightness = LCFG_TSD_GetBacklightBrightness() - 1;
brightness = SYSM_GetBackLightBlightness() - 1;
if( brightness < 0 ) {
brightness = 0;
}
@ -800,13 +740,11 @@ typedef struct NandFirmResetParameter {
MoveByScrollBar();
// 描画関係
PollBackLightBrightness();
DrawBackLightSwitch();
DrawScrollBar( pTitleList );
#ifdef DBGBNR
BannerDraw( selected, pTitleList );
#endif
// RTC情報の取得表示
GetAndDrawRTCData( &g_rtcDraw, FALSE );
@ -817,9 +755,20 @@ typedef struct NandFirmResetParameter {
// バックライトスイッチの表示
static void DrawBackLightSwitch(void)
{
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_NULL, B_LIGHT_DW_BUTTON_TOP_X + 24, B_LIGHT_DW_BUTTON_TOP_Y, 40, 13 );
PutStringUTF16( B_LIGHT_DW_BUTTON_TOP_X, B_LIGHT_DW_BUTTON_TOP_Y, TXT_COLOR_RED,
L"\xE01c   \xE01b" );
PrintfSJIS( B_LIGHT_DW_BUTTON_TOP_X + 11, B_LIGHT_DW_BUTTON_TOP_Y, TXT_COLOR_RED,
"BL:%2d\n", LCFG_TSD_GetBacklightBrightness() );
static int old_brightness = -1;
u8 brightness;
brightness = SYSM_GetBackLightBlightness();
// 1フレーム前の古い値と輝度値が違っていたら描画しなおし
if( old_brightness != brightness )
{
old_brightness = brightness;
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_NULL, B_LIGHT_DW_BUTTON_TOP_X + 24, B_LIGHT_DW_BUTTON_TOP_Y, 40, 13 );
PutStringUTF16( B_LIGHT_DW_BUTTON_TOP_X, B_LIGHT_DW_BUTTON_TOP_Y, TXT_COLOR_RED,
L"\xE01c   \xE01b" );
PrintfSJIS( B_LIGHT_DW_BUTTON_TOP_X + 11, B_LIGHT_DW_BUTTON_TOP_Y, TXT_COLOR_RED,
"BL:%2d\n", brightness );
}
}

View File

@ -105,6 +105,7 @@ extern AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle ); //
// デバイス制御
extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション
extern void SYSM_SetBackLightBrightness( u8 brightness ); // バックライトを制御(本体設定データへの値セーブも行う)
extern u8 SYSM_GetBackLightBlightness( void ); // バックライト輝度を取得X2以前とX3以降で挙動に違い
// Nintendoロゴ制御
extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // Nintendoロゴデータのチェック