Cuttlefish:環境控制

本頁說明如何在 Cuttlefish 裝置上控制環境 讀取及更新 Deployment 資源舉例來說,您可以修改 Wi-Fi 訊號或更新 Cuttlefish 裝置的 GPS 位置。

服務

cvd env 指令提供下列服務,以控制 Cuttlefish 環境:

服務 說明
GnssGrpcProxy 控制 Cuttlefish 地理位置的 GNSS 而不是每個特徵的分數
OpenwrtControlService 控制「Openwrt」這個虛擬化 Wi-Fi AP 供應商提供 Cuttlefish Wi-Fi 功能
WmediumdService 控制 Wmediumd,無線中型模擬器 兩個 Cuttlefish Wi-Fi 功能

使用 REST API 控制環境

本節說明如何使用 Rest API 控管環境 然後透過 <https://localhost:1443> 服務端點

列出可用的服務或方法

如要取得所有服務的清單,請傳送 GET 要求至下列網址,並使用 裝置 ID。

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

如要取得服務的所有方法清單,請將 GET 要求傳送至 造訪網址,其中的裝置 ID 和服務名稱。

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

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

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

取得要求和回應類型的詳細資訊

如要取得要求或回覆訊息類型的詳細資訊,請傳送 GET 使用裝置 ID、服務名稱及 要求或回覆訊息類型這會列印出每個節點的所有名稱和類型 欄位。接下來,您就能使用這些資訊來撰寫 採用 JSON 格式的 proto 訊息,用於傳送 RPC 要求。

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

傳送遠端程序呼叫 (RPC) 要求以變更環境

如要傳送 RPC 要求,以 JSON 格式 proto 呼叫服務方法, 使用裝置 ID (服務) 傳送 POST 要求至下列網址 名稱和方法名稱JSON 格式的 proto 必須包含在

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

用途範例

以下是 Rest API 用來修改 Wi-Fi 的範例 呼叫 SetTxpower 取得訊號強度。

  1. 決定服務名稱、方法名稱和要求訊息類型 名稱。

    1. 傳送 GET 要求至 這個網址。

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

      這是回應範例。

      {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
      
    2. 傳送 GET 要求以取得 WmediumdService 的方法清單 。

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

      這是回應範例。

      {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
      
    3. 取得 將 GET 要求傳送至下列網址,藉此使用 SetTxpower 方法。

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

      這是回應範例。

      {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
      
  2. 取得 wmediumdserver.SetTxpowerRequest 要求的詳細資訊 訊息類型,方法是傳送 GET 要求到下列網址。

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

    這是回應範例。

    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. 傳送遠端程序呼叫 (RPC) 要求至 WmediumdService 服務以修改 Wi-Fi 傳送 POST 要求到這個網址,藉此達到所需等級的訊號強度 並帶有下列要求主體

    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) 要求的 proto 訊息。

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

傳送遠端程序呼叫 (RPC) 要求以變更環境

如要傳送 RPC 要求,以 JSON 格式 proto 呼叫服務方法, 使用 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. 決定服務名稱、方法名稱和要求訊息類型 名稱。

    取得所有可用服務的清單。

    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. 將遠端程序呼叫 (RPC) 要求傳送至 WmediumdService 服務,以便修改 Wi-Fi 將訊號強度提升至指定層級

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