Cuttlefish: Control del entorno

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.

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.

  1. 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.

    1. 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"]}
      
    2. Para obtener una lista de métodos para WmediumdService, envía una solicitud GET 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"]}
      
    3. Para obtener información sobre los tipos de mensajes de solicitud y respuesta para el método SetTxpower, envía una solicitud GET 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"}
      
  2. Para obtener información detallada para el tipo de mensaje de solicitud wmediumdserver.SetTxpowerRequest, envía una solicitud GET 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;
    }
    
  3. 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 solicitud POST 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.

  1. 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"
    }
    
  2. 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;
    }
    
  3. 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
    {}