←3DSのHBL用アプリ開発 トップへ

バッテリーとWi-Fiの状態を取得する

タイトルの通りです。

最終更新:2017/06/14




はじめに


Sys Home Menu
3DSを起動すると上のような無線の状態や、歩数、日時、バッテリーの状態が表示されますが、そのうちのバッテリーとWi-Fiの状態を取得してみようと思います。

バッテリーの状態を取得する


PTMUサービスを使って取得します。

●残量を取得する
PTMU_GetBatteryLevel関数で取得できます。
PTMU_GetBatteryLevel関数の引数にはunsigned char(u8)で初期化した変数へのポインタを指定します。
この関数を実行すると、指定した変数にバッテリーの状態(0-5)が代入されます。

数値 残量 3DSホームメニュー上でのアイコンの状態 電源ランプの状態
0 0% (電源が付かない、もしくは1と同じ。詳細は不明)
1 1%〜5% {□□□■](点滅) 赤ランプ点滅
2 6%〜10% {□□□■] 赤ランプ
3 11%〜30% {□□■■] 青ランプ
4 31%〜60% {□■■■] 青ランプ
5 61%〜100% {■■■■] 青ランプ

●充電しているかを取得する
PTMU_GetBatteryChargeState関数で取得できます。
引数にはunsigned char(u8)で初期化した変数へのポインタを指定します。
この関数を実行すると、指定した変数に充電状態(0/1)が代入されます。

数値 状態
0 放電
1 充電

※プログラム開始時にptmuInit関数で初期化、終了時にptmuExit関数で解放してください。

Wi-Fiの状態を取得する


ACサービスを使って取得します。

ACU_GetWifiStatus関数で取得できます。
ACU_GetWifiStatus関数の引数にはunsigned long(u32)で初期化した変数へのポインタを指定します。
この関数を実行すると、指定した変数にWi-Fiの状態(0-4)が代入されます。

数値 状態 3DSホームメニュー上でのアイコンの状態
0 未接続 i[X]
1 接続(電波強度0) i
2 接続(電波強度1) i.
3 接続(電波強度2) i.l
4 接続(電波強度3) i.ll

―注意―
数値はどんな無線の状態でも0か4しか返ってきません(不具合?)。
一度無線ONになると無線OFFにしても数値が0になりません(不具合か、解決できるかわかりません)。

※プログラム開始時にacInit関数で初期化、終了時にacExit関数で解放してください。

サンプル


バッテリーとWi-Fiの状態を表示するサンプルです。残量表示アイコンも表示します。
STARTボタンで終了。

#include <3ds.h>
#include <stdio.h>
int main(int argc, char **argv) {
    gfxInitDefault();
    consoleInit(GFX_TOP, NULL);
    ptmuInit();
    acInit();
    u8 batlv=0, batcg=0;
    u32 wifiStatus=0;
    const char batlvstr[6][8]={{0x20, 0x20, 0x20, 0x20},//バッテリー残量アイコン表示テーブル
                               {0x20, 0x20, 0x20, 0xde},
                               {0x20, 0x20, 0x20, 0xde},
                               {0x20, 0x20, 0xde, 0xde},
                               {0x20, 0xde, 0xde, 0xde},
                               {0xde, 0xde, 0xde, 0xde}};
    const char batlvcolor[6] = {31,31,35,36,36,36};//バッテリー残量アイコン表示色
    while (aptMainLoop()) {
        PTMU_GetBatteryLevel(&batlv);//バッテリー残量
        PTMU_GetBatteryChargeState(&batcg);//充電しているかどうか
        ACU_GetWifiStatus(&wifiStatus);//Wi-Fi接続状況取得
        printf("\x1b[0;0HBattery level:%d Charging:%d Wi-Fi:%d", batlv, batcg, (int)wifiStatus);
        printf("\x1b[1;0H\x1b[37m{\x1b[%dm%s\x1b[37m]",batlvcolor[batlv], batlvstr[batlv]);//バッテリー残量アイコン
        
        hidScanInput();if (hidKeysDown() & KEY_START) break;//終了
        gfxFlushBuffers();
        gfxSwapBuffers();
        gspWaitForVBlank();
    };
    acExit();
    ptmuExit();
    gfxExit();
    return 0;
    
};
実行結果↓
Sample1 Sample2
満充電(5):
少ない(2):
残りわずか(1):




[前へ] [次へ]

(C)2017 InoueSoftware / 無断転載禁止