本頁說明如何使用 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 功能的無線媒體模擬器。 |
CasimirControlService
|
控制 Casimir ,這是外部 NFC 裝置的模擬器。 |
使用 REST API 控制環境
本節說明如何透過 <https://localhost:1443>
服務端點,使用 REST API 控制環境。
列出可用的服務或方法
如要取得所有服務的清單,請使用裝置 ID 向下列網址傳送 GET
要求。
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
取得要求和回應類型的詳細資訊
如要取得要求或回應訊息類型的詳細資訊,請將要求傳送至下列網址,並附上裝置 ID、服務名稱,以及要求或回應訊息類型。GET
這會列印訊息中每個欄位的名稱和類型。接著,您可以使用這項資訊,編寫 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 格式的 proto 必須包含在內文中。
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME
用途範例
以下是 Rest API 的用途範例,可透過呼叫 SetTxpower
修改 Wi-Fi 訊號強度。
判斷服務名稱、方法名稱和要求訊息型別名稱,以修改 Wi-Fi 訊號強度。
如要取得所有可用服務的清單,請對下列網址傳送
GET
要求。https://localhost:1443/devices/cvd-1/services
這是回覆範例。
{"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
如要取得
WmediumdService
的方法清單,請對下列網址傳送GET
要求。https://localhost:1443/devices/cvd-1/services/WmediumdService
這是回覆範例。
{"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
如要取得
SetTxpower
方法的要求和回應訊息類型相關資訊,請對下列網址傳送GET
要求。https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower
這是回覆範例。
{"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
將
GET
要求傳送至下列網址,即可取得wmediumdserver.SetTxpowerRequest
要求訊息類型的詳細資訊。https://localhost:1443/devices/cvd-1/services/WmediumdService/wmediumdserver.SetTxpowerRequest/type
這是回覆範例。
message SetTxpowerRequest { string mac_address = 1; int32 tx_power = 2; }
將 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 訊號強度。
判斷服務名稱、方法名稱和要求訊息型別名稱,以修改 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; }
將 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 {}