Sepia: Control ambiental

Esta página describe cómo controlar el entorno en un dispositivo Cuttlefish utilizando la API REST o la interfaz de línea de comandos. Por ejemplo, podrás modificar la señal Wi-Fi o actualizar la ubicación GPS del dispositivo Cuttlefish.

Servicios

El comando cvd env proporciona los siguientes servicios para controlar el entorno de Cuttlefish:

Servicios Descripción
GnssGrpcProxy Controla GNSS para la función de geolocalización de Sepia.
OpenwrtControlService Controla Openwrt , un proveedor de AP Wi-Fi virtualizado para la función Wi-Fi Cuttlefish.
WmediumdService Controla Wmediumd , un simulador de medio inalámbrico para la función Wi-Fi Cuttlefish.

Controle el entorno utilizando la API REST

Esta sección describe cómo controlar el entorno utilizando la API Rest a través del punto final del servicio <https://localhost:1443> .

Listar servicios o métodos disponibles

Para obtener una lista de todos los servicios, envíe 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 de un servicio, envíe 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 sobre un método, como los tipos de mensajes de solicitud o respuesta, envíe 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

Obtenga información detallada sobre los tipos de solicitudes y respuestas

Para obtener información detallada de un tipo de mensaje de solicitud o respuesta, envíe 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 puede utilizar esta información para escribir un protomensaje con formato JSON para enviar una solicitud RPC.

https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/REQUEST_OR_RESPONSE_TYPE_NAME/type

Enviar solicitud RPC para realizar cambios en el entorno.

Para enviar una solicitud RPC para llamar a un método de un servicio con un protocolo con formato JSON, envíe una solicitud POST a la siguiente URL con un ID de dispositivo, un nombre de servicio y el nombre del método. El protocolo con formato JSON debe incluirse en el cuerpo.

https://localhost:1443/devices/DEVICE_ID/services/SERVICE_NAME/METHOD_NAME

Caso de uso de ejemplo

El siguiente es un caso de uso de ejemplo de Rest API para modificar la intensidad de la señal Wi-Fi llamando SetTxpower .

  1. Determine 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. Obtenga una lista de todos los servicios disponibles enviando 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. Obtenga una lista de métodos para WmediumdService enviando 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. Obtenga información sobre los tipos de mensajes de solicitud y respuesta para el método SetTxpower enviando 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. Obtenga información detallada para el tipo de mensaje de solicitud wmediumdserver.SetTxpowerRequest enviando 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. Envíe una solicitud RPC al servicio WmediumdService para modificar la intensidad de la señal Wi-Fi al nivel deseado enviando una solicitud POST a esta URL con el siguiente cuerpo de 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.

    {}
    

Controlar el entorno mediante la línea de comando.

Esta sección describe los subcomandos disponibles para el comando CLI cvd env . Para obtener más detalles, imprima el mensaje de ayuda utilizando cvd help env .

Listar servicios o métodos disponibles

Para obtener una lista de todos los servicios, utilice cvd env ls sin ningún argumento.

cvd env ls

Para obtener una lista de todos los métodos de un servicio, incluya el nombre del servicio como argumento.

cvd env ls SERVICE_NAME

Para obtener información detallada, como los tipos de mensajes de solicitud o respuesta de un método, incluya el nombre del servicio y el nombre del método.

cvd env ls SERVICE_NAME METHOD_NAME

Obtenga información detallada sobre los tipos de solicitudes y respuestas

Para obtener información detallada de un tipo de mensaje de solicitud o respuesta, utilice el comando cvd env type . Este comando imprime todos los nombres y tipos de cada campo en el mensaje. Luego puede utilizar esta información para escribir un protomensaje con formato JSON para enviar una solicitud RPC.

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

Enviar solicitud RPC para realizar cambios en el entorno.

Para enviar una solicitud RPC para llamar a un método de un servicio con un protocolo con formato JSON, utilice el comando cvd enc call . Cuando finaliza la solicitud RPC, la interfaz imprime el mensaje Rpc succeeded with OK status y, si está disponible, un mensaje de respuesta que incluye valores.

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

Caso de uso de ejemplo

El siguiente es un caso de uso de ejemplo del comando CLI cvd env para modificar la intensidad de la señal Wi-Fi llamando a SetTxpower .

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

    Obtenga una lista de todos los servicios disponibles.

    cvd env ls
    (Omitted)
    {
      "services" :
      [
        "OpenwrtControlService",
        "EchoService",
        "GnssGrpcProxy",
        "WmediumdService"
      ]
    }
    

    Obtenga una lista de métodos para WmediumdService .

    cvd env ls WmediumdService
    (Omitted)
    {
      "methods" :
      [
        "ListStations",
        "LoadConfig",
        "ReloadConfig",
        "SetCivicloc",
        "SetLci",
        "SetPosition",
        "SetSnr",
        "SetTxpower",
        "StartPcap",
        "StopPcap"
      ]
    }
    

    Obtenga información sobre los tipos de mensajes de solicitud y respuesta para el método SetTxpower .

    cvd env ls WmediumdService SetTxpower
    (Omitted)
    {
      "request_type" : "wmediumdserver.SetTxpowerRequest",
      "response_type" : "google.protobuf.Empty"
    }
    
  2. Obtenga información detallada para 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íe una solicitud RPC al servicio WmediumdService para modificar la intensidad de la señal Wi-Fi al nivel deseado.

    cvd env call WmediumdService SetTxpower "{mac_address:'42:00:00:00:00:00', tx_power:1}"
    (Omitted)
    Rpc succeeded with OK status
    {}