Cuttlefish: 環境制御

このページでは、REST API またはコマンドライン インターフェースを使用して、Cuttlefish デバイスの環境を制御する方法について説明します。たとえば、Cuttlefish デバイスの Wi-Fi の電波を変更したり、GPS 位置情報を更新したりできます。

サービス

cvd env コマンドでは、Cuttlefish 環境を制御する次のサービスを実行できます。

サービス 説明
GnssGrpcProxy Cuttlefish 位置情報機能の GNSS を制御します。
OpenwrtControlService Openwrt(Cuttlefish Wi-Fi 機能の仮想化 Wi-Fi AP プロバイダ)を制御します。
WmediumdService Wmediumd(Cuttlefish Wi-Fi 機能のワイヤレス メディア シミュレータ)を制御します。

REST API を使用して環境を制御する

このセクションでは、<https://localhost:1443> サービス エンドポイントを介して REST API を使用して環境を制御する方法について説明します。

利用できるサービスまたはメソッドを一覧表示する

すべてのサービスのリストを取得するには、デバイス ID を指定した次の URL に GET リクエストを送信します。

https://localhost:1443/devices/DEVICE_ID/services

サービスの全メソッドのリストを取得するには、デバイス ID とサービス名を指定した次の URL に GET リクエストを送信します。

https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME

メソッドの詳細情報(リクエストやレスポンス メッセージのタイプなど)を取得するには、デバイス ID、サービス名、メソッド名を指定した次の URL に GET リクエストを送信します。

https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME

リクエストおよびレスポンス タイプに関する詳細情報を取得する

リクエストまたはレスポンス メッセージのタイプに関する詳細情報を取得するには、デバイス ID、サービス名、リクエストまたはレスポンス メッセージのタイプを指定した次の URL に GET リクエストを送信します。これにより、メッセージの各フィールドの名前とタイプがすべて出力されます。この情報を利用して、リモート プロシージャ コール(RPC)リクエストを送信するための JSON 形式の proto メッセージを作成できます。

https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/REQUEST_OR_RESPONSE_TYPE_NAME/type

RPC リクエストを送信して環境を変更する

JSON 形式の proto で RPC リクエストを送信して、サービスのメソッドを呼び出すには、デバイス ID、サービス名、メソッド名を指定した次の URL に POST リクエストを送信します。JSON 形式の proto を本文に含める必要があります。

https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME

ユースケースの例

以下は、SetTxpower を呼び出して Wi-Fi 電波強度を調整する、REST API のユースケースの例です。

  1. Wi-Fi 電波強度を調整するサービス名、メソッド名、リクエスト メッセージのタイプ名を決定します。

    1. 次の URL に GET リクエストを送信して、利用可能なすべてのサービスのリストを取得します。

      https://localhost:1443/devices/cvd-1/services
      

      以下は、レスポンスの例です。

      {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
      
    2. 次の URL に GET リクエストを送信して、WmediumdService のメソッドのリストを取得します。

      https://localhost:1443/devices/cvd-1/services/WmediumdService
      

      以下は、レスポンスの例です。

      {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
      
    3. 次の URL に GET リクエストを送信して、SetTxpower メソッドのリクエストおよびレスポンス メッセージのタイプに関する情報を取得します。

      https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower
      

      以下は、レスポンスの例です。

      {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
      
  2. 次の URL に GET リクエストを送信して、wmediumdserver.SetTxpowerRequest リクエスト メッセージ タイプの詳細情報を取得します。

    https://localhost:1443/devices/cvd-1/services/WmediumdService/wmediumdserver.SetTxpowerRequest/type
    

    以下は、レスポンスの例です。

    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. 下記のリクエスト本文を使用して次の URL に POST リクエストを送信し、Wi-Fi 電波強度を望ましいレベルに調整するよう WmediumdService サービスに RPC リクエストを送信します。

    https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower
    
    {"mac_address":"42:00:00:00:00:00", "tx_power":1}
    

    以下は、レスポンスの例です。

    {}
    

コマンドラインを使用して環境を制御する

このセクションでは、cvd env CLI コマンドで利用できるサブコマンドについて説明します。詳細については、cvd help env を使用してヘルプ メッセージを出力してください。

利用できるサービスまたはメソッドを一覧表示する

すべてのサービスのリストを取得するには、引数なしで cvd env ls を使用します。

cvd env ls

特定のサービスのすべてのメソッドのリストを取得するには、引数としてサービス名を指定します。

cvd env ls SERVICE_NAME

メソッドのリクエストまたはレスポンス メッセージのタイプなどの詳細情報を取得するには、サービス名とメソッド名を指定します。

cvd env ls SERVICE_NAME METHOD_NAME

リクエストおよびレスポンス タイプに関する詳細情報を取得する

リクエストまたはレスポンス メッセージのタイプに関する詳細情報を取得するには、cvd env type コマンドを使用します。このコマンドでは、メッセージの各フィールドの名前とタイプがすべて出力されます。この情報を利用して、リモート プロシージャ コール(RPC)リクエストを送信するための JSON 形式の proto メッセージを作成できます。

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

RPC リクエストを送信して環境を変更する

JSON 形式の proto で RPC リクエストを送信して、サービスのメソッドを呼び出すには、cvd enc call コマンドを使用します。RPC リクエストの処理が終了すると、インターフェースは Rpc succeeded with OK status というメッセージと、値を含むレスポンス メッセージを出力します(存在する場合)。

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

ユースケースの例

以下は、SetTxpower を呼び出して Wi-Fi 電波強度を調整する、cvd env CLI コマンドのユースケースの例です。

  1. Wi-Fi 電波強度を調整するサービス名、メソッド名、リクエスト メッセージのタイプ名を決定します。

    利用可能なすべてのサービスのリストを取得します。

    cvd env ls
    (Omitted)
    {
      "services" :
      [
        "OpenwrtControlService",
        "EchoService",
        "GnssGrpcProxy",
        "WmediumdService"
      ]
    }
    

    WmediumdService のメソッドのリストを取得します。

    cvd env ls WmediumdService
    (Omitted)
    {
      "methods" :
      [
        "ListStations",
        "LoadConfig",
        "ReloadConfig",
        "SetCivicloc",
        "SetLci",
        "SetPosition",
        "SetSnr",
        "SetTxpower",
        "StartPcap",
        "StopPcap"
      ]
    }
    

    SetTxpower メソッドのリクエストおよびレスポンス メッセージのタイプに関する情報を取得します。

    cvd env ls WmediumdService SetTxpower
    (Omitted)
    {
      "request_type" : "wmediumdserver.SetTxpowerRequest",
      "response_type" : "google.protobuf.Empty"
    }
    
  2. wmediumdserver.SetTxpowerRequest リクエスト メッセージ タイプの詳細情報を取得します。

    cvd env type WmediumdService wmediumdserver.SetTxpowerRequest
    (Omitted)
    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. WmediumdService サービスに RPC リクエストを送信して、Wi-Fi 電波強度を望ましいレベルに調整します。

    cvd env call WmediumdService SetTxpower "{mac_address:'42:00:00:00:00:00', tx_power:1}"
    (Omitted)
    Rpc succeeded with OK status
    {}