# バッテリー (overview)

## 説明

TWL はバッテリー(充電池)で駆動しています。ここでは電池残量の取得や、それが減少したときに呼ばれるコールバックなどについて説明します。

## 電池残量の取得

バッテリーパックの電池残量を調べる命令は、`PM_GetBattery()`、`PM_GetBatteryLevel()` です。

`PM_GetBattery()` では `PM_BATTERY_HIGH`, と `PM_BATTERY_LOW` の 2段階で取得出来ます。これは NITRO から存在する関数で、ハードウェアとしては6段階で取得できる TWL の場合はある定められたところを境に 2段階にみなして値を返します。

`PM_GetBatteryLevel()` は 0〜5 の6段階で取得出来ます。これは TWL で新設された関数で、NITRO ハードウェアでは使用することが出来ません。

バッテリーの低下を検出しても、メッセージなどを表示する必要はありません。TWL 本体では、電池残量の低下を検出したときに、後述の「バッテリーLOWコールバック」で説明するコールバックを自動で呼び出すことが可能なのでアプリケーションで残量低下をポーリングせずに知ることが出来ます。

## 電池残量低下によるシャットダウン

充電池の残量がなくなれば、当然ゲームを続けることは出来ません。しかし、NANDメモリにアクセスしている正にその途中で電源が切れたりするとNANDのデータが失われたりする可能性もあるように、システム側の意図しないところで電源が落ちるのは好ましくありません。そこで、NAND メモリ/ SDメモリカードにアクセスするアプリケーションでは、NANDメモリ/SDメモリカードのファイルシステムを保護する目的で、電池残量が非常に少なくなったときに、少し余裕がある状態で自動的にシャットダウン処理を行います。そのため、厳密には電池を 0 まで使い切ることは出来ません。

一方、DS ゲームカードやカード上のバックアップメモリにしかアクセスしないアプリケーションはいきなり電源が落ちてもデータが消失したりすることはありません。なのでこちらは電池残量が低下しても自動シャットダウン処理を行うことはありません。つまりDS同様に電池を使い切るまで遊べます。こちらで電池残量が非常に低くなったことを知るには、後述のバッテリーLOWコールバックが使用できます。

## バッテリーLOWコールバック

バッテリーLOWコールバックとは、電池電圧が一定の低さになったときに発生するコールバックです。コールバックの設定は、`PM_SetBatteryLowCallback()`です。

バッテリーLOWコールバックは `PM_GetBatteryLevel()` の値が 1 となる残量 (1% が目安です) になったときに呼び出されますが、終了処理を必要としないアプリケーションの場合は、まれに発生しないこともありえます。(`PM_GetBatteryLevel()` の「内部での値取得について」と「コールバックについて」を参照)

このコールバックが呼び出される電池残量のレベルは、NAND メモリ/ SDメモリカードにアクセスするアプリケーションが自動シャットダウンが発生する残量よりは若干高いところに設定されています。

なお、自動シャットダウンを行うソフトでも、行わないソフトでも、バッテリーLOWコールバックの仕組みを使用することが出来ます。

## ACアダプタの検出

ACアダプタで電源が供給されているかどうかを調べる命令は `PM_GetACAdaper()` です。正確には、「ACアダプタがDCコネクタに接続され、通電状態になっているかどうか」を調べます。現在通電しているかどうかを調べるだけで、充電中であるかどうかを知ることは出来ません。

## 履歴

2008/09/13 初版