コンテンツにスキップ

定数・システム情報 (FmrbConst / FmrbHw)

FmrbConst

システム全体で参照される定数を提供するモジュールです。

プラットフォーム情報

定数
FmrbConst::PLATFORM "linux" または "esp32"
FmrbConst::OS_VERSION OS バージョン文字列
FmrbConst::GA_VERSION fmruby-graphics-audio 側のバージョン
FmrbConst::LINK_VERSION UART リンクプロトコルバージョン
FmrbConst::IDF_VERSION ESP-IDF のバージョン

ハードウェア情報

定数 内容
FmrbConst::MAC_ADDRESS MAC アドレス文字列
FmrbConst::CHIP_MODEL 例: "ESP32-S3"
FmrbConst::CHIP_REVISION リビジョン番号
FmrbConst::CHIP_CORES コア数
FmrbConst::FLASH_SIZE_MB フラッシュ容量 (MB)
FmrbConst::PSRAM_SIZE_MB PSRAM 容量 (MB)
FmrbConst::RESET_REASON 直前のリセット理由

プロセス管理

定数 用途
FmrbConst::PROC_ID_KERNEL カーネルプロセス ID
FmrbConst::PROC_ID_HOST ホストプロセス ID
FmrbConst::PROC_ID_SYSTEM_APP システムアプリ ID
FmrbConst::PROC_ID_USER_APP0 / USER_APP1 / USER_APP2 ユーザーアプリスロット

プロセス状態

定数
PROC_STATE_FREE
PROC_STATE_INIT
PROC_STATE_RUNNING
PROC_STATE_SUSPENDED
PROC_STATE_STOPPING

メッセージング

定数 用途
MSG_TYPE_APP_CONTROL アプリ制御メッセージ
MSG_TYPE_APP_GFX グラフィックメッセージ
MSG_TYPE_APP_AUDIO オーディオメッセージ
MSG_TYPE_HID_EVENT HID イベント(キーボード等)

アプリ制御コマンド

定数
APP_CTRL_SPAWN
APP_CTRL_KILL
APP_CTRL_SUSPEND
APP_CTRL_RESUME

テーマ色(システム共通の配色)

定数 用途
THEME_DESKTOP_BG デスクトップ背景
THEME_MENU_BG メニュー背景
THEME_WINDOW_BG ウィンドウ背景
THEME_TEXT 通常テキスト
THEME_TEXT_LIGHT 薄テキスト
THEME_HIGHLIGHT 強調
THEME_BORDER 枠線
THEME_BUTTON ボタン

これらはすべて RGB332 値です。アプリの UI を OS の配色に合わせたい場合に使います。

入力デバイス: キーボード (KEY_*)

USB HID Usage ID。on_event(ev)ev[:scancode] と比較します。

カテゴリ 定数
英字 KEY_A .. KEY_Z
数字 KEY_1 .. KEY_9, KEY_0
制御 KEY_ENTER, KEY_ESC, KEY_BACKSPACE, KEY_TAB, KEY_SPACE
記号 KEY_MINUS, KEY_EQUAL, KEY_LBRACKET, KEY_RBRACKET, KEY_BACKSLASH, KEY_SEMICOLON, KEY_QUOTE, KEY_GRAVE, KEY_COMMA, KEY_PERIOD, KEY_SLASH
ロック KEY_CAPSLOCK, KEY_SCROLLLOCK, KEY_NUMLOCK
ファンクション KEY_F1 .. KEY_F12
編集 KEY_INSERT, KEY_HOME, KEY_PGUP, KEY_DELETE, KEY_END, KEY_PGDN
矢印 KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN
その他 KEY_PRINTSCREEN, KEY_PAUSE
修飾キー(個別) KEY_LCTRL, KEY_LSHIFT, KEY_LALT, KEY_LGUI, KEY_RCTRL, KEY_RSHIFT, KEY_RALT, KEY_RGUI

入力デバイス: 修飾キーマスク (MOD_*)

on_event(ev)ev[:modifier] と AND を取って判定します。

定数 ビット 意味
MOD_LCTRL 0x01 左 Ctrl
MOD_LSHIFT 0x02 左 Shift
MOD_LALT 0x04 左 Alt
MOD_LGUI 0x08 左 GUI (Win / Cmd)
MOD_RCTRL 0x10 右 Ctrl
MOD_RSHIFT 0x20 右 Shift
MOD_RALT 0x40 右 Alt
MOD_RGUI 0x80 右 GUI
MOD_CTRL 0x11 左右 Ctrl 合成 (MOD_LCTRL | MOD_RCTRL)
MOD_SHIFT 0x22 左右 Shift 合成
MOD_ALT 0x44 左右 Alt 合成
MOD_GUI 0x88 左右 GUI 合成

ev_ctrl?(ev) / ev_shift?(ev) / ev_alt?(ev)

FmrbApp のヘルパでも判定できます。MOD_* を直接使うのは特殊なケースだけで、通常はこちらを使ってください。

入力デバイス: ゲームパッド (GP_*)

on_event(ev)ev[:type] == :gamepad_down / :gamepad_up のとき ev[:button] がボタン番号、:gamepad_axis のとき ev[:axis] が軸番号です。

ボタン

定数 意味
GP_SQUARE 0
GP_CROSS 1 ×
GP_CIRCLE 2
GP_TRIANGLE 3
GP_L1 4 左ショルダー
GP_R1 5 右ショルダー
GP_L2 6 左トリガー
GP_R2 7 右トリガー
GP_SELECT 8 Select
GP_START 9 Start
GP_L3 10 左スティック押し込み
GP_R3 11 右スティック押し込み
GP_UP 12 十字キー上
GP_DOWN 13 十字キー下
GP_LEFT 14 十字キー左
GP_RIGHT 15 十字キー右

定数 意味
GP_AXIS_LX 0 左スティック X
GP_AXIS_LY 1 左スティック Y
GP_AXIS_RX 2 右スティック X
GP_AXIS_RY 3 右スティック Y

サンプル: キー判定

def on_event(ev)
  super
  if ev[:type] == :key_down
    case ev[:scancode]
    when FmrbConst::KEY_LEFT  then @x -= 4
    when FmrbConst::KEY_RIGHT then @x += 4
    when FmrbConst::KEY_SPACE then shoot
    when FmrbConst::KEY_ESC   then stop
    end
    if (ev[:modifier] || 0) & FmrbConst::MOD_CTRL != 0 &&
       ev[:scancode] == FmrbConst::KEY_S
      save_state
    end
  elsif ev[:type] == :gamepad_down
    case ev[:button]
    when FmrbConst::GP_CROSS  then jump
    when FmrbConst::GP_START  then pause
    end
  end
end

その他

定数 内容
MAX_PATH_LEN パスの最大長

サンプル: バージョンと環境を表示

class SysInfo < FmrbApp
  def on_create
    clear_user_area(FmrbGfx::WHITE)
    x = @user_area_x0 + 4
    y = @user_area_y0 + 4
    @gfx.draw_text(x, y,      "OS: #{FmrbConst::OS_VERSION}", FmrbGfx::BLACK)
    @gfx.draw_text(x, y + 10, "Chip: #{FmrbConst::CHIP_MODEL}", FmrbGfx::BLACK)
    @gfx.draw_text(x, y + 20, "PSRAM: #{FmrbConst::PSRAM_SIZE_MB}MB", FmrbGfx::BLACK)
    @gfx.draw_text(x, y + 30, "MAC: #{FmrbConst::MAC_ADDRESS}", FmrbGfx::BLACK)
    draw_window_frame
    @gfx.present
  end
end

SysInfo.new.start

FmrbHw

ハードウェアリソース(特に GPIO ピン)の使用状況を問い合わせるモジュールです。

メソッド 戻り値
FmrbHw.pin_status(pin) ピンの使用状態(Integer、0=未使用、その他=用途別の識別子)
FmrbHw.pin_available?(pin) 未使用なら true
FmrbHw.pin_status_all Array<Integer>(インデックス=ピン番号、値=状態)
FmrbHw.pin_count ピン総数

pin_status の値は内部識別子で、0 = 未使用、それ以外 = 「GPIO」「I2C」「UART」など別機能で使用中、を意味します。

サンプル: 全ピンを表示

status = FmrbHw.pin_status_all
status.each_with_index do |s, i|
  Log.info("pin #{i}: #{s == 0 ? 'free' : 'used'}")
end

サンプル: 使う前にチェック

PIN = 10
unless FmrbHw.pin_available?(PIN)
  Log.error("Pin #{PIN} is in use (status=#{FmrbHw.pin_status(PIN)})")
  return
end
gpio = GPIO.new(PIN, GPIO::OUT)

tool/gpio_viewer.app.rb に GUI でピン状態を可視化するサンプルがあります。

関連