|
電源の追加
Power Manager 2.0 には、システムに電力を供給する
AC、バッテリ、または UPS
などの、いくつかのデバイスを制御して、それらと相互作用を行う機能が用意されています。このため
Power Manager
には、接続されているすべての電源の存在とステータスを通知して、特に、システムがバッテリまたはバックアップ電源
(UPS など)
のみで動作しているかどうかなどの信頼できる重要情報をユーザに提供する必要があります。
Power Manager では、電源データ構造体
(単に「電源」とも呼ばれます)
を介してこれらのデバイスの存在を認識します。
電源データ構造体
次に、電源のデータ構造体について説明します。
struct PowerSourceParamBlock
{
PowerSourceID sourceID; // Power Manager によって割り当てられたユニークな ID
UInt16 sourceCapacityUsage; // currentCapacity の使い方
UInt32 sourceVersion; // kVersionOnePowerSource を使用する
OptionBits sourceAttr; // 属性 (詳細は後述)
OptionBits sourceFlags; // フラグ (詳細は後述)
UInt32 currentCapacity; // ミリワットまたはパーセンテージで表した
// 現在の容量
UInt32 maxCapacity; // ミリワット単位で表したフル容量
UInt32 timeRemaining; // ミリワット時単位で表した
// 完全な電力消耗までに残された時間
UInt32 timeToFullCharge; // ミリワット時単位で表した
// 充電に必要な時間
UInt32 voltage; // ミリボルト単位の電圧
SInt32 current; // ミリアンペア単位の電流
// (電力消費時は負の数で、
// 充電時は正の数)
};
|
電源では、Power Manager が maxCapacity
フィールドを基準として、電源の currentCapacity
フィールドを解釈する方法を指定することができます。
次に、sourceCapacityUsage
定数の定義を示します。
enum
{
kCapacityIsActual = 0, // 実際の単位で表現された容量
kCapacityIsPercentOfMax = 1 // maxCapacity フィールドのパーセンテージとして
// 表現された容量
};
|
次の電源属性フラグを使用できます。
enum
{
bSourceIsBattery = 0, // 電源はバッテリ
bSourceIsAC = 1, // 電源は AC
bSourceCanBeCharged = 2, // 電源は充電可能
bSourceIsUPS = 3 // 電源は UPS
};
|
次の電源ステータスフラグを使用できます。
enum
{
bSourceIsAvailable = 0, // 電源はインストールされている
bSourceIsCharging = 1, // 電源は充電中
bChargerIsAttached = 2, // 充電器が接続されている
};
|
AddPowerSource
AddPowerSource を呼び出すことで、Power Manager
が監視する電源のリストに新しい電源を追加することができます。
pascal OSStatus AddPowerSource (PowerSourceParamBlock *
ioSource);
|
クライアントは、この電源の管理に使用できるユニークな
PowerSourceID を受け取ります。ioSource
は、電源を記述する情報を含んだパラメータブロックです。Power
Manager
では、電源の内部リストの中にこの情報のローカルコピーを保持します。
RemovePowerSource
デバイスの電源をもはや使用できなくなった場合は、RemovePowerSource
を使って、リストからその電源を削除するように Power Manager
に指示することができます。これにより、その電源は電力サマリ計算の対象外になります。
pascal OSStatus RemovePowerSource (PowerSourceID
inSourceID);
|
inSourceID は削除される電源の ID です。指定した
PowerSourceID を持つ電源が Power Manager
の電源リストの中で検出できない場合、このルーチンは
kNoSuchPowerSource を返します。
UpdatePowerSource
UpdatePowerSource
を呼び出すことで、電源のステータスに関する統計値
(電力消費量、残されている容量など)
を更新することができます。電源情報を取得する方法は、それぞれのソフトウェアが内部的に決定します。
pascal OSStatus UpdatePowerSource (PowerSourceParamBlock *
ioSource);
|
ioSource には、電源に割り当てられている
PowerSourceID
を含めて、更新されることになる電源情報が含まれます。指定した
PowerSourceID を持つ電源が Power Manager
の電源リストの中で検出できない場合、このルーチンは
kNoSuchPowerSource を返します。
単純な UPS 電源のサンプル
ユーザが、Power Manager
とステータス情報のやり取りができる UPS
をシステムに接続していると仮定します。UPS
ドライバソフトウェアでは、その存在を示すために Power Manager
に電源の登録を行わなければなりません。
static PowerSourceParamBlock mySource;
void RegisterUPSSource (void)
{
OSStatus status = noErr;
mySource.sourceCapacityUsage = kCapacityIsActual;
mySource.sourceAttr = (1<<bSourceIsUPS)
| (1<<bSourceIsAC)
| (1<<bSourceIsBattery);
// AC およびバッテリとともに UPS を登録する方法に注意
mySource.sourceFlags = (1<<bSourceIsAvailable);
mySource.currentCapacity = myCurrentCapacityInMilliWatts;
mySource.maxCapacity = myMaxCapacityInMilliWatts;
mySource.timeRemaining = secondsLeftToDischarge;
mySource.timeToFullCharge = secondsToFullChargeIfCharging;
mySource.voltage = myVoltageInMilliVolts;
mySource.current = -1234;
// 電力を消費している場合は負の数
status = AddPowerSource (&mySource);
// エラーを処理する
}
|
AC 電源が削除されたとき、UPS
はその周期的な更新時に次の変更を行って、ステータスを更新することができます。
void UpdateUPSSource (void)
{
OSStatus status = noErr;
// 更新されたデータを収集する
if (NoACConnected())
// AC 属性を削除していることに注意。これにより、Power Manager は、
// 内部 AC を無視し、バッテリ電源が消耗しているかのように
// 動作するように指示される
mySource.sourceAttr &= ~(1<<bSourceIsAC);
mySource.currentCapacity = myCurrentCapacityInMilliWatts;
mySource.timeRemaining = secondsLeftToDischarge;
mySource.timeToFullCharge = secondsToFullChargeIfCharging;
mySource.voltage = myVoltageInMilliVolts;
mySource.current = -1234; // 電力を消費している場合は負の数
status = UpdatePowerSource (&mySource);
// エラーを処理する
}
|
UPS が AC の不在を指定すると、AC
の存在に関する内部的な読み込みデータが無効であることが Power
Manager に通知され、Power Manager
はあたかもバッテリが消耗しているかのようにシステムを取り扱うようになります。その結果、電力不足状態に陥ったシステムでは、バッテリ電源が消耗している
PowerBook
で行われるのと同じ省電力アクションが実行され、システムは低電力状態に置かれることになります。ディープスリープがサポートされている場合は、システムをディープスリープ状態にすることが試みられます。それが不可能な場合は、バッテリ電源を供給しないかぎり
(デスクトップの場合のように)、システムは通常のスリープに入り、システムの電源はオフになります。なお、電力不足の状態になり、省電力アクションが開始される直前に、そのことを通知する
Apple
イベントがアクティブなプロセスに送信されます。これらのイベントの詳細については、後述の「Power
Manager Apple イベント」を参照してください。
|