2007-12-15

電源供給中の判別

RfLedRestrictorの/psupply(電源供給時にだけLEDを制御)オプションが 満充電時に機能していないという指摘を頂いたのでプログラムを修正しました。  
これまでは HKLM\System\State\Battery\Mainの値を snapi.hで定義されているSN_POWERBATTERYSTATE_FLAG_CHARGINGでマスクすることで 電源供給中かどうかを判定していました。
if (S_OK != RegistryGetDWORD(
        SN_POWERBATTERYSTATE_ROOT    ,
        SN_POWERBATTERYSTATE_PATH    ,
        SN_POWERBATTERYSTATE_VALUE   ,
        &dwPowerBatteryState)) {
    dwPowerBatteryState = 0;
}

if (dwPowerBatteryState & SN_POWERBATTERYSTATE_FLAG_CHARGING) {
    // 電源供給中
}
 
ところが改めて確認してみると、充電中はビットが立っていますが 満充電になると下16ビットは 0になるようです。
 
確かによく見ると定数の名前は SN_POWERBATTERYSTATE_FLAG_CHARGING
今回も確認が足りませんでしたね。
 
という訳でレジストリを使う方法は諦めて GetSystemPowerStatusEx2を 使って電源供給中の判断をするように変更しました。
if (0 == GetSystemPowerStatusEx2(&systemPowerStatus, sizeof(systemPowerStatus), TRUE)) {
    systemPowerStatus.ACLineStatus = AC_LINE_UNKNOWN;
}

if (AC_LINE_ONLINE == systemPowerStatus.ACLineStatus) {
    // 電源供給中
}
 
こう書くと随分都合よく GetSystemPowerStatusEx2を見つけて来たようにも見えますが、 実際は Visual Studioで何気なく"ac_"と打った時に AC_LINE_OFFLINE, AC_LINE_ONLINEという候補が表示されて偶然見つけることができました。
統合開発環境様様ですね。
 

8 件のコメント:

匿名 さんのコメント...

便利に使わせていただいてます。
最新版で回線使用中にランプが消灯する現象が発生するようです。
手動でパワーマネージメントの電界強度ランプをオンにしてもまた勝手に消灯させられます。
autoconnectの回線の自動切断と再接続が重なることで接続できない旨が表示されることがあり、そのタイミングでおかしくなったようにも見えます。。。

kazuaki さんのコメント...

こんにちは。
ご連絡ありがとうございます。

autoconnectということはモデムとしてではなく単体での接続中ということでよろしいでしょうか?
また今回変更した /psupplyオプションを使用されてますでしょうか?

いずれにせよ、一度 autoconnect入れてみて確認してみますね。

かず さんのコメント...

データが流れる度に、点滅するのがPC8801のアクセスランプを思いだし、意味もなく楽しく眺めてます(^ー^;A

できたら、普段点滅、アクセス時は今の様な早い点滅は可能になったりしますか?

あと電話通話中もしくは電話アプリ起動時にもLEDで電波強度表示もできると電波強度表示が不要になり広くタスクバーが広く使え理想的です。

時間のあるときにでも検討していただけたら幸いです。

kazuaki さんのコメント...

かずさん こんばんは。

同年代とお見受けしました(笑
(違っていたらすみません)

/blinkと /trafic(/packet)の併用ということですね。
たぶん可能と思いますので、上で教えて頂いている問題の調査ついでに検討してみます。

電話アプリ起動中というのは考えたこと無かったです。
電話中はLED見えないような...という気もしないではないですが、それによって かずさんの言われるように電波強度アイコンが消せるのであればメリットありそうな気もしますね。

Use10Keyに組み込めば楽なのですが、これ以上脱線するのも何なのでこちらで方法を考えてみます。

Ali さんのコメント...

ご対応ありがとうございます。
満充電時でもLEDが点灯しています。
しかしまだまだ機能充実しそうですね(w
これからも楽しみにしています。

かず さんのコメント...

kazuakiさんお返事ありがとうございます。きっと同年代です(^^;

確かに電話中はLEDは見えないのですが、途切れ出した時や、電話を掛ける前の電波強度確認に使う感じです。

日頃wktaskで上のタスクバーを覆って使っているので、できたら電波を気にするときのみLED
で電波強度が分かれば広く使えて便利だな~と思った次第です。わがままな要望で申し訳ありませんが、無理のない範囲で検討していただけたらうれしいです。

匿名 さんのコメント...

/trafic は /traffic とすべきじゃないでしょうか?

kazuaki さんのコメント...

Σ (゚Д゚;)

その通りです。
可及的速やかに修正します。

と思ったら、RfLedRestrictor修正中でコードがgdgdです。
今晩中には何とかします。

ご連絡ありがとうございました。