PM_GetLEDPattern*

構文

#include <nitro/spi.h>
u32 PM_GetLEDPattern( PMLEDPattern* patternBuf );

u32 PM_GetLEDPatternAsync( PMLEDStatus* patternBuf, PMCallback callback, void* arg );
  

引数

patternBuf 取得するLEDパターンの値を格納するバッファ
callback コマンドが終了したときに呼ばれるコールバック
arg コールバックを呼ぶ際の引数

返り値

PM_RESULT_SUCCESS ならばコマンドの実行が成功した(同期関数の場合)か、コマンドをARM7に送信することに成功した(非同期関数の場合)ことを表します。

PM_RESULT_BUSY ならば、 SPI が他の処理に占有されており処理できなかったことを示します。

説明

本体のLEDの状態を取得します。

patternBufPMLEDPattern 列挙型の値を格納するバッファで、NULLでないときにLEDの状態を示す値が入ります。以下のうちのいずれかとなります。

patternBuf に格納される値 LED の状態
PM_LED_PATTERN_ON 点灯しています。
PM_LED_PATTERN_BLINK_LOW 高速点滅しています。
PM_LED_PATTERN_BLINK_HIGH 低速点滅しています。            
PM_LED_PATTERN_BLINK1 1フレームごとに点灯と消灯を繰り返します。            
PM_LED_PATTERN_BLINK2 2フレームごとに点灯と消灯を繰り返します。            
PM_LED_PATTERN_BLINK3 3フレームごとに点灯と消灯を繰り返します。            
PM_LED_PATTERN_BLINK4 4フレームごとに点灯と消灯を繰り返します。            
PM_LED_PATTERN_BLINK5 5フレームごとに点灯と消灯を繰り返します。            
PM_LED_PATTERN_BLINK6 8フレームごとに点灯と消灯を繰り返します。            
PM_LED_PATTERN_BLINK8 8フレームごとに点灯と消灯を繰り返します。            
PM_LED_PATTERN_BLINK10 10フレームごとに点灯と消灯を繰り返します。            
PM_LED_PATTERN_PATTERN1 予め用意されたパターンで点滅しています。            
PM_LED_PATTERN_PATTERN2 予め用意されたパターンで点滅しています。            
PM_LED_PATTERN_PATTERN3 予め用意されたパターンで点滅しています。            


( 「高速点滅」「低速点滅」はハードウェアで実装された点滅機能です。「高速」といっても実際は一定フレームごとに点灯と消灯を繰り返すソフトウェアによる点滅よりも遅くなります。)


この関数はARM7に該当動作を行うコマンドをPXIで送り、それを受け取ったARM7側がPMICを操作することで実行されます。従って関数を呼び出して即時に動作されるわけではありません。動作の終了まで待つ同期型の関数と、コマンドをARM7に送るだけの非同期型の関数が用意されていますので動作目的に合わせて使用してください。(関数名にAsync がついているものが非同期関数です。)

非同期関数を呼び出した場合、ARM7側での処理が終了したときに指定のコールバック callback が呼び出されます。コールバックの型 PMCallback

typedef void ( *PMCallback )( u32 result, void* arg );

で定義されます。このコールバックは PXI 割り込みハンドラの中から呼び出されます。

コールバックの引数は、第一引数 result がコマンドの結果を表します。これは PM_RESULT_SUCCESS または PM_RESULT_ERROR となります。第二引数は arg を返します。

割込みハンドラからこの関数を使用することは可能です。割込みハンドラ以外の割込み禁止状態でこの関数を使用することは出来ません。



PM_RESULT_BUSY について

SPI はPM以外にも様々な処理で使用されています。そのようなときに本関数を呼び出すと、ARM7 までコマンドを送り、そこで BUSY という判定が行われ、処理は行われずに ARM9 へ PM_RESULT_BUSY が通知されます。また他の PM 処理を行っている最中に本関数を呼び出すと、ARM9 側でそれを判断し PM_RESULT_BUSY を返します。(この場合は ARM7 への通知を行う前に判断します。)

従って、確実に本関数を成功させようとすれば、次のように成功するまでループするようにしてください。(引数が間違っているというようなミスは考慮していません。)

(例)
while( PM_GetLEDPattern( ... ) != PM_RESULT_SUCCESS )
{
}

参照

PM_Init

履歴

2009/06/03 PM_Init() についての記述を削除 (OS_Init() が必須となったため)
2008/12/05 割込み禁止状態での使用に関する注意を追記
2008/08/23 PM_RESULT_ERROR をやめて PM_RESULT_BUSY について言及
2005/07/07 返り値 PM_RESULT_ERRORについて言及した
2005/06/02 コールバックの呼び元を明記した
2004/08/26 初版