本頁介紹如何使用 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 訊號強度。
確定修改Wi-Fi訊號強度的服務名稱、方法名稱和請求訊息類型名稱。
透過向以下 URL 發送
GET
請求來取得所有可用服務的清單。https://localhost:1443/devices/cvd-1/services
這是一個響應範例。
{"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
透過向以下 URL 發送
GET
請求來取得WmediumdService
的方法清單。https://localhost:1443/devices/cvd-1/services/WmediumdService
這是一個響應範例。
{"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
透過向以下 URL 發送
GET
請求,以取得有關SetTxpower
方法的請求和回應訊息類型的資訊。https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower
這是一個響應範例。
{"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
透過向以下 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; }
透過向此 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 訊號強度。
確定修改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" }
取得
wmediumdserver.SetTxpowerRequest
請求訊息類型的詳細資訊。cvd env type WmediumdService wmediumdserver.SetTxpowerRequest (Omitted) message SetTxpowerRequest { string mac_address = 1; int32 tx_power = 2; }
向
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 {}