En esta página, se describe cómo controlar el entorno en un dispositivo Cuttlefish con la API de REST o la interfaz de línea de comandos. Por ejemplo, puedes modificar la señal de Wi-Fi o actualizar la ubicación del GPS de un dispositivo Cuttlefish.
Servicios
El comando cvd env
proporciona los siguientes servicios para controlar el entorno de Cuttlefish:
Servicios | Descripción |
---|---|
GnssGrpcProxy
|
Controla el GNSS para la función de ubicación geográfica de Cuttlefish. |
OpenwrtControlService
|
Controla Openwrt , un proveedor de PA de Wi-Fi virtualizado para la función de Wi-Fi de Cuttlefish. |
WmediumdService
|
Controla Wmediumd , un simulador de medio inalámbrico para la función de Wi-Fi de Cuttlefish. |
CasimirControlService
|
Controla Casimir , un simulador para dispositivos NFC externos. |
Cómo controlar el entorno con la API de REST
En esta sección, se describe cómo controlar el entorno con la API de REST a través del servicio de extremo <https://localhost:1443>
.
Cómo obtener una lista de los servicios o métodos disponibles
Para obtener una lista de todos los servicios, envía una solicitud GET
a la siguiente URL con un ID de dispositivo.
https://localhost:1443/devices/DEVICE_ID/services
Para obtener una lista de todos los métodos para un servicio, envía una solicitud GET
a la siguiente URL con un ID de dispositivo y el nombre del servicio.
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME
Para obtener información detallada para un método, como los tipos de mensajes de solicitud o respuesta, envía una solicitud GET
a la siguiente URL con un ID de dispositivo, un nombre de servicio y el nombre del método.
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME
Cómo obtener información detallada sobre los tipos de solicitud y respuesta
Para obtener información detallada sobre un tipo de mensaje de solicitud o respuesta, envía una solicitud GET
a la siguiente URL con un ID de dispositivo, un nombre de servicio y el tipo de mensaje de solicitud o respuesta. Esto imprime todos los nombres y tipos de cada campo en el mensaje. Luego, puedes usar esta información para escribir un mensaje proto con formato JSON para enviar una solicitud de RPC.
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/REQUEST_OR_RESPONSE_TYPE_NAME/type
Cómo enviar una solicitud de RPC para hacer cambios en el entorno
Para enviar una solicitud de RPC para llamar a un método de un servicio con un archivo proto con formato JSON, envía una solicitud POST
a la siguiente URL con un ID de dispositivo, un nombre de servicio y el nombre del método. Se debe incluir el archivo proto con formato JSON en el cuerpo.
https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME
Ejemplo de caso de uso
El siguiente es un ejemplo de un caso de uso de la API de REST para modificar la intensidad de la señal Wi-Fi llamando a SetTxpower
.
Determina el nombre del servicio, el nombre del método y el nombre del tipo de mensaje de solicitud para modificar la intensidad de la señal Wi-Fi.
Para obtener una lista de todos los servicios disponibles, envía una solicitud
GET
a la siguiente URL.https://localhost:1443/devices/cvd-1/services
Esta es una respuesta de ejemplo.
{"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
Para obtener una lista de métodos para
WmediumdService
, envía una solicitudGET
a la siguiente URL.https://localhost:1443/devices/cvd-1/services/WmediumdService
Esta es una respuesta de ejemplo.
{"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
Para obtener información sobre los tipos de mensajes de solicitud y respuesta para el método
SetTxpower
, envía una solicitudGET
a la siguiente URL.https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower
Esta es una respuesta de ejemplo.
{"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
Para obtener información detallada para el tipo de mensaje de solicitud
wmediumdserver.SetTxpowerRequest
, envía una solicitudGET
a la siguiente URL.https://localhost:1443/devices/cvd-1/services/WmediumdService/wmediumdserver.SetTxpowerRequest/type
Esta es una respuesta de ejemplo.
message SetTxpowerRequest { string mac_address = 1; int32 tx_power = 2; }
Para enviar una solicitud de RPC al servicio
WmediumdService
para modificar la intensidad de la señal Wi-Fi y configurarla en el nivel deseado, envía una solicitudPOST
a la esta URL con el siguiente cuerpo de la solicitud.https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower
{"mac_address":"42:00:00:00:00:00", "tx_power":1}
Esta es una respuesta de ejemplo.
{}
Controla el entorno con la línea de comandos
En esta sección, se describen los subcomandos disponibles para el comando CLI cvd env
.
Para obtener más detalles, muestra el mensaje de ayuda con cvd help env
.
Cómo obtener una lista de los servicios o métodos disponibles
Para obtener una lista de todos los servicios, usa cvd env ls
sin ningún argumento.
cvd env ls
Para obtener una lista de todos los métodos de un servicio, incluye el nombre de este como argumento.
cvd env ls SERVICE_NAME
Para obtener información detallada, como los tipos de mensaje de solicitud o respuesta de un método, incluye los nombres del servicio y del método.
cvd env ls SERVICE_NAME METHOD_NAME
Cómo obtener información detallada sobre los tipos de solicitud y respuesta
Para obtener información detallada sobre un tipo de mensaje de solicitud o respuesta, usa el comando cvd env type
. Este comando imprime todos los nombres y tipos de cada campo en el mensaje. Luego, puedes usar esta información para escribir un mensaje proto con formato JSON para enviar una solicitud de RPC.
cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME
Cómo enviar una solicitud de RPC para hacer cambios en el entorno
El comando cvd enc call
te permite enviar una solicitud de RPC para llamar a un método de un servicio con un archivo proto con formato JSON. Cuando se resuelve la solicitud de RPC, la interfaz imprime el mensaje Rpc succeeded with OK status
y, si está disponible, un mensaje de respuesta con valores.
cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO
Ejemplo de caso de uso
El siguiente es un ejemplo de un caso de uso del comando CLI cvd env
para modificar la intensidad de la señal Wi-Fi llamando a SetTxpower
.
Determina el nombre del servicio, el nombre del método y el nombre del tipo de mensaje de solicitud para modificar la intensidad de la señal Wi-Fi.
Obtén una lista de todos los servicios disponibles.
cvd env ls (Omitted) { "services" : [ "OpenwrtControlService", "EchoService", "GnssGrpcProxy", "WmediumdService" ] }
Obtén una lista de los métodos de
WmediumdService
.cvd env ls WmediumdService (Omitted) { "methods" : [ "ListStations", "LoadConfig", "ReloadConfig", "SetCivicloc", "SetLci", "SetPosition", "SetSnr", "SetTxpower", "StartPcap", "StopPcap" ] }
Obtén información sobre los tipos de mensaje de solicitud y respuesta del método
SetTxpower
.cvd env ls WmediumdService SetTxpower (Omitted) { "request_type" : "wmediumdserver.SetTxpowerRequest", "response_type" : "google.protobuf.Empty" }
Obtén información detallada sobre el tipo de mensaje de solicitud
wmediumdserver.SetTxpowerRequest
.cvd env type WmediumdService wmediumdserver.SetTxpowerRequest (Omitted) message SetTxpowerRequest { string mac_address = 1; int32 tx_power = 2; }
Envía una solicitud de RPC al servicio
WmediumdService
para modificar la intensidad de la señal Wi-Fi y configurarla en el nivel deseado.cvd env call WmediumdService SetTxpower "{mac_address:'42:00:00:00:00:00', tx_power:1}" (Omitted) Rpc succeeded with OK status {}