TS-X3ボードのMCUバックライト輝度変更への対応。

NWM_InitにてPXI_FIFO_TAG_USER_0を使用していたためPXI_FIFO_TAG_USER_1へ変更。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@651 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-02-14 00:57:01 +00:00
parent 3eed6100e7
commit 17a021d92e
9 changed files with 157 additions and 27 deletions

View File

@ -122,7 +122,7 @@ TwlSpMain(void)
PrintDebugInfo();
// PXIコールバックの設定
// PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback );
SYSM_InitPXI();
// ランチャーパラメター取得Cold/Hotスタート判定含む
ReadLauncherParameter();

View File

@ -46,7 +46,8 @@ void SYSM_SetBackLightBrightness( u8 brightness )
if( brightness > LCFG_TWL_BACKLIGHT_LEVEL_MAX ) {
OS_Panic( "Backlight brightness over : %d\n", brightness );
}
( void )PMi_WriteRegister( 0x20, (u16)brightness );
( void )SYSMi_SendPXICommand( SYSM_PXI_COMM_BL_BRIGHT, brightness );
LCFG_TSD_SetBacklightBrightness( brightness );
// [TODO:] バックライト輝度は毎回セーブせずに、アプリ起動やリセット、電源OFF時に値が変わっていたらセーブするようにする。

View File

@ -2,7 +2,7 @@
Project: TwlIPL
File: internal_api.h
Copyright 2007 Nintendo. All rights reserved.
Copyright 2007-2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
@ -19,6 +19,7 @@
#define SYSM_INTERNAL_API_H_
#include <twl.h>
#include <sysmenu/sysmenu_lib/common/pxi.h>
#ifdef __cplusplus
extern "C" {
@ -78,8 +79,6 @@ void SYSMi_EnableHotSW( BOOL enable );
//=======================================================
BOOL SYSMi_IsDebuggerBannerViewMode( void );
BOOL SYSMi_CheckEntryAddress( void );
BOOL SYSMi_SendPXICommand( SYSMPXICommand command );
void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err );
#ifdef __cplusplus

View File

@ -16,6 +16,7 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <twl/mcu.h>
#include <sysmenu.h>
#include "internal_api.h"
@ -27,8 +28,8 @@
typedef union SYSMPXIPacket {
struct {
u16 data;
u16 command : 14;
u16 stat : 2;
u8 cmd; // PXI_FIFOMESSAGE_BITSZ_DATA = 26
u8 stat : 2;
};
u32 raw;
}SYSMPXIPacket;
@ -38,31 +39,73 @@ typedef union SYSMPXIPacket {
// function's prototype-------------------------------------------------------
// global variable-------------------------------------------------------------
// static variable-------------------------------------------------------------
static volatile BOOL s_sending = FALSE;
static volatile BOOL s_sending[SYSM_PXI_COMM_NUM];
// const data------------------------------------------------------------------
// PXI<58>‰Šú‰»
void SYSM_InitPXI( void )
{
static BOOL isInitialized;
int i;
if (isInitialized)
{
return;
}
isInitialized = TRUE;
for (i=0; i<SYSM_PXI_COMM_NUM; i++)
{
s_sending[i] = FALSE;
}
//---- setting PXI
PXI_Init();
#ifdef SDK_ARM9
while (!PXI_IsCallbackReady(SYSMENU_PXI_FIFO_TAG, PXI_PROC_ARM7))
{
}
#endif // SDK_ARM9
PXI_SetFifoRecvCallback(SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback);
}
// PXIƒRƒ}ƒ“ƒh<E28098>M
BOOL SYSMi_SendPXICommand( SYSMPXICommand command )
BOOL SYSMi_TrySendPXICommand( SYSMPXICommand cmd, u16 data )
{
SYSMPXIPacket packet;
OSIntrMode saved = OS_DisableInterrupts();
if( s_sending ) {
if( s_sending[cmd] )
{
OS_RestoreInterrupts( saved );
return FALSE;
}
s_sending = TRUE;
s_sending[cmd] = TRUE;
OS_RestoreInterrupts( saved );
packet.stat = SYSM_PXI_COMM_STAT_REQ;
packet.command = (u16)command;
packet.data = 0;
packet.stat = SYSM_PXI_COMM_STAT_REQ;
packet.cmd = cmd;
packet.data = data;
while( PXI_SendWordByFifo( SYSMENU_PXI_FIFO_TAG, packet.raw, 0 ) < 0 ) {}
while( PXI_SendWordByFifo( SYSMENU_PXI_FIFO_TAG, packet.raw, FALSE) != PXI_FIFO_SUCCESS )
{
SVC_WaitByLoop(1);
}
while( s_sending ) {
return TRUE;
}
BOOL SYSMi_SendPXICommand( SYSMPXICommand cmd, u16 data )
{
while( ! SYSMi_TrySendPXICommand( cmd, data ) )
{
OS_WaitAnyIrq();
}
while( s_sending[cmd] )
{
OS_WaitAnyIrq();
}
return TRUE;
}
@ -70,13 +113,48 @@ void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err )
{
#pragma unused( tag, err )
SYSMPXIPacket packet;
u8 cmd;
packet.raw = data;
cmd = packet.cmd;
if( packet.stat == SYSM_PXI_COMM_STAT_ACK )
{
s_sending[cmd] = FALSE;
}
if( packet.stat == SYSM_PXI_COMM_STAT_REQ )
{
packet.stat = SYSM_PXI_COMM_STAT_ACK;
}
#ifdef SDK_ARM7
switch( cmd )
{
case SYSM_PXI_COMM_BL_BRIGHT:
#ifdef PMIC_FINAL
MCU_WriteRegister(MCU_REG_BL_ADDR, (u8)packet.data );
#else // PMIC_FINAL
PMi_SetRegister( REG_PMIC_BL_BRT_B_ADDR, (u8)packet.data );
#endif // PMIC_FINAL
break;
default:
#ifndef SDK_FINALROM
OS_Panic("illegal SYSM pxi command.");
#else
OS_Panic("");
#endif
break;
}
// PXI‰ž“š•Ô<E280A2>M
PXI_SendWordByFifo( SYSMENU_PXI_FIFO_TAG, packet.raw, FALSE );
#endif // SDK_ARM7
#if 0
#ifdef SDK_ARM9
s_sending = FALSE;
if( packet.stat == SYSM_PXI_COMM_STAT_ACK ) {
switch( data ) {
case SYSM_PXI_COMM_DISABLE_HOTSW:

View File

@ -91,6 +91,7 @@ void TwlMain( void )
SYSM_Init( Alloc, Free ); // OS_Initの前でコールする必要あり。
OS_Init();
SYSM_SetArena(); // OS_Initの後でコールする必要あり。
SYSM_InitPXI(); // OS_Initの後でコールする必要あり。
// OS初期化------------------------
OS_InitTick();

View File

@ -20,6 +20,7 @@
#include <sysmenu/sysmenu_lib/common/sysmenu_api.h>
#include <sysmenu/sysmenu_lib/common/sysmenu_work.h>
#include <sysmenu/sysmenu_lib/common/pxi.h>
#ifdef __cplusplus

View File

@ -0,0 +1,58 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: pxi.h
Copyright 2008 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 SYSM_COMMON_PXI_H_
#define SYSM_COMMON_PXI_H_
#include <nitro/pxi.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------
// PXIコマンド
//----------------------------------------------------------------------
#define SYSMENU_PXI_FIFO_TAG PXI_FIFO_TAG_USER_1
typedef enum SYSMPXICommand {
SYSM_PXI_COMM_BL_BRIGHT = 0,
SYSM_PXI_COMM_DISABLE_HOTSW = 1,
SYSM_PXI_COMM_NUM
}SYSMPXICommand;
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
// PXI初期化
void SYSM_InitPXI( void );
// PXIコマンド送信
BOOL SYSMi_TrySendPXICommand( SYSMPXICommand cmd, u16 data );
BOOL SYSMi_SendPXICommand( SYSMPXICommand command, u16 data );
// PXIコマンド受信
void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err );
#ifdef __cplusplus
}
#endif
#endif // SYSM_COMMON_PXI_H_

View File

@ -83,6 +83,7 @@ extern void SYSM_Free( void *ptr );
// 初期化
extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。
extern void SYSM_InitPXI( void ); // PXI<58>‰Šú‰»
extern void SYSM_SetArena( void ); // システムメニューのアリーナ初期化。OS_Initの後で呼んでください。
extern void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ); // SYSM_initで設定した場合は必要なし。
extern TitleProperty *SYSM_ReadParameters( void ); // 本体設定データ、リセットパラメータなどを取得

View File

@ -41,15 +41,6 @@ typedef struct TitleID_HiLo {
}TitleID_HiLo;
//----------------------------------------------------------------------
// PXIコマンド
//----------------------------------------------------------------------
#define SYSMENU_PXI_FIFO_TAG PXI_FIFO_TAG_USER_0
typedef enum SYSMPXICommand {
SYSM_PXI_COMM_DISABLE_HOTSW = 1
}SYSMPXICommand;
//----------------------------------------------------------------------
// ROMエミュレーション情報
//----------------------------------------------------------------------