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 功能的無線介質模擬器。
CasimirControlService 控制 Casimir,這是外部 NFC 裝置的模擬器。

使用 REST API 控管環境

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

列出可用的服務或方法

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

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

如要取得服務的所有方法清單,請使用裝置 ID 和服務名稱將 GET 要求傳送至以下網址。

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 呼叫服務方法,請將 POST 要求傳送至下列網址,並附上裝置 ID、服務名稱和方法名稱。JSON 格式的原型必須包含在內文中。

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

用途範例

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

  1. 決定用於修改 Wi-Fi 訊號強度的服務名稱、方法名稱和要求訊息類型名稱。

    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. 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. 將 RPC 要求傳送至 WmediumdService 服務,藉由傳送 POST 要求至此網址,並使用以下要求主體,將 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 格式的 proto 訊息,以便傳送遠端程序呼叫 (RPC) 要求。

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. 決定用來修改 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. 將 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
    {}