本页介绍了如何使用 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://127.0.0.1:1443>
服务端点使用 Rest API 控制环境。
列出可用服务或方法
要获取所有服务的列表,请向以下网址发送带有设备 ID 的 GET
请求。
https://127.0.0.1:1443/devices/DEVICE_ID/services
要获取某个服务的所有方法的列表,请向以下网址发送带有设备 ID 和服务名称的 GET
请求。
https://127.0.0.1:1443/devices/DEVICE_ID/services/SERVICE_NAME
要获取方法的详细信息(例如请求或响应消息类型),请向以下网址发送带有设备 ID、服务名称和方法名称的 GET
请求。
https://127.0.0.1:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME
获取有关请求和响应类型的详细信息
要获取请求或响应消息类型的详细信息,请向以下网址发送带有设备 ID、服务名称以及请求或响应消息类型的 GET
请求。这会打印消息中每个字段的所有名称和类型。然后,您可以使用此信息编写 JSON 格式的 proto 消息,以发送 RPC 请求。
https://127.0.0.1:1443/devices/DEVICE_ID/services/SERVICE_NAME/REQUEST_OR_RESPONSE_TYPE_NAME/type
发送 RPC 请求以更改环境
要发送 RPC 请求以调用服务的某个方法(使用 JSON 格式的 proto),请向以下网址发送带有设备 ID、服务名称和方法名称的 POST
请求。JSON 格式的 proto 必须包含在正文中。
https://127.0.0.1:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME
用例示例
以下是通过调用 SetTxpower
使用 Rest API 修改 Wi-Fi 信号强度的用例示例。
确定用于修改 Wi-Fi 信号强度的服务名称、方法名称和请求消息类型名称。
通过向以下网址发送
GET
请求,获取所有可用服务的列表。https://127.0.0.1:1443/devices/cvd-1/services
这是一个响应示例。
{"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
通过向以下网址发送
GET
请求,获取WmediumdService
的方法列表。https://127.0.0.1:1443/devices/cvd-1/services/WmediumdService
这是一个响应示例。
{"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
通过向以下网址发送
GET
请求,获取有关SetTxpower
方法的请求和响应消息类型的信息。https://127.0.0.1:1443/devices/cvd-1/services/WmediumdService/SetTxpower
这是一个响应示例。
{"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
通过向以下网址发送
GET
请求,获取wmediumdserver.SetTxpowerRequest
请求消息类型的详细信息。https://127.0.0.1:1443/devices/cvd-1/services/WmediumdService/wmediumdserver.SetTxpowerRequest/type
这是一个响应示例。
message SetTxpowerRequest { string mac_address = 1; int32 tx_power = 2; }
通过向此网址发送
POST
请求以及以下请求正文,向WmediumdService
服务发送 RPC 请求,以将 Wi-Fi 信号强度修改为所需的级别。https://127.0.0.1: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
用例示例
以下是通过调用 SetTxpower
使用 cvd env
CLI 命令修改 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 {}