墨魚:環境控制

本頁介紹如何使用 REST API 或命令列介面控制 Cuttlefish 裝置中的環境。例如,您可以修改 Wi-Fi 訊號或更新 Cuttlefish 裝置的 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

若要取得服務的所有方法的列表,請向以下 URL 發送帶有裝置 ID 和服務名稱的GET請求。

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

若要取得方法的詳細資訊(例如請求或回應訊息類型),請將GET請求傳送至以下 URL,其中包含裝置 ID、服務名稱和方法名稱。

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

獲取有關請求和回應類型的詳細信息

若要取得請求或回應訊息類型的詳細信息,請將GET請求傳送到以下 URL,其中包含裝置 ID、服務名稱以及請求或回應訊息類型。這將列印訊息中每個欄位的所有名稱和類型。然後,您可以使用此資訊編寫 JSON 格式的原型訊息來傳送 RPC 請求。

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

發送 RPC 請求以對環境進行更改

若要傳送 RPC 請求以使用 JSON 格式的原型呼叫服務的方法,請將POST請求傳送至下列 URL,並包含裝置 ID、服務名稱和方法名稱。 JSON 格式的原型必須包含在正文中。

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

範例用例

以下是 Rest API 的範例用例,用於透過呼叫SetTxpower修改 Wi-Fi 訊號強度。

  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請求,向WmediumdService服務發送 RPC 請求,以將 Wi-Fi 訊號強度修改為所需的等級。

    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命令。此命令列印訊息中每個欄位的所有名稱和類型。然後,您可以使用此資訊編寫 JSON 格式的原型訊息來傳送 RPC 請求。

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

發送 RPC 請求以對環境進行更改

若要傳送 RPC 請求以使用 JSON 格式的原型呼叫服務的方法,請使用cvd enc call命令。當 RPC 請求終止時,介面將列印訊息Rpc succeeded with OK status ,以及包含值的回應訊息(如果可用)。

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

範例用例

以下是cvd env CLI 命令的範例用例,用於透過呼叫SetTxpower修改 Wi-Fi 訊號強度。

  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
    {}