Chocos: Controlo ambiental

Esta página descreve como controlar o ambiente em um dispositivo Cuttlefish usando a API REST ou a interface de linha de comando. Por exemplo, você pode modificar o sinal Wi-Fi ou atualizar a localização GPS do dispositivo Cuttlefish.

Serviços

O comando cvd env fornece os seguintes serviços para controlar o ambiente Cuttlefish:

Serviços Descrição
GnssGrpcProxy Controla o GNSS para o recurso de geolocalização Cuttlefish.
OpenwrtControlService Controla Openwrt , um provedor de AP Wi-Fi virtualizado para o recurso Cuttlefish Wi-Fi.
WmediumdService Controla Wmediumd , um simulador de mídia sem fio para o recurso Cuttlefish Wi-Fi.

Controle o ambiente usando a API REST

Esta seção descreve como controlar o ambiente usando a API Rest por meio do endpoint de serviço <https://localhost:1443> .

Liste os serviços ou métodos disponíveis

Para obter uma lista de todos os serviços, envie uma solicitação GET para o seguinte URL com um ID de dispositivo.

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

Para obter uma lista de todos os métodos de um serviço, envie uma solicitação GET para o seguinte URL com um ID de dispositivo e o nome do serviço.

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

Para obter informações detalhadas sobre um método, como os tipos de mensagem de solicitação ou resposta, envie uma solicitação GET para a seguinte URL com um ID de dispositivo, um nome de serviço e o nome do método.

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

Obtenha informações detalhadas sobre tipos de solicitação e resposta

Para obter informações detalhadas de um tipo de mensagem de solicitação ou resposta, envie uma solicitação GET para a seguinte URL com um ID de dispositivo, um nome de serviço e o tipo de mensagem de solicitação ou resposta. Isso imprime todos os nomes e tipos de cada campo da mensagem. Você pode então usar essas informações para escrever uma mensagem proto no formato JSON para enviar uma solicitação RPC.

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

Envie solicitação RPC para fazer alterações no ambiente

Para enviar uma solicitação RPC para chamar um método de um serviço com um proto formatado em JSON, envie uma solicitação POST para o seguinte URL com um ID de dispositivo, um nome de serviço e o nome do método. O proto formatado em JSON deve ser incluído no corpo.

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

Exemplo de caso de uso

A seguir está um exemplo de caso de uso da API Rest para modificar a intensidade do sinal Wi-Fi chamando SetTxpower .

  1. Determine o nome do serviço, o nome do método e o nome do tipo de mensagem de solicitação para modificar a intensidade do sinal Wi-Fi.

    1. Obtenha uma lista de todos os serviços disponíveis enviando uma solicitação GET para o seguinte URL.

      https://localhost:1443/devices/cvd-1/services
      

      Este é um exemplo de resposta.

      {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
      
    2. Obtenha uma lista de métodos para WmediumdService enviando uma solicitação GET para o URL a seguir.

      https://localhost:1443/devices/cvd-1/services/WmediumdService
      

      Este é um exemplo de resposta.

      {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
      
    3. Obtenha informações sobre os tipos de mensagens de solicitação e resposta para o método SetTxpower enviando uma solicitação GET para a URL a seguir.

      https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower
      

      Este é um exemplo de resposta.

      {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
      
  2. Obtenha informações detalhadas sobre o tipo de mensagem de solicitação wmediumdserver.SetTxpowerRequest enviando uma solicitação GET para a URL a seguir.

    https://localhost:1443/devices/cvd-1/services/WmediumdService/wmediumdserver.SetTxpowerRequest/type
    

    Este é um exemplo de resposta.

    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. Envie uma solicitação RPC ao serviço WmediumdService para modificar a intensidade do sinal Wi-Fi para o nível desejado, enviando uma solicitação POST para esse URL com o seguinte corpo de solicitação.

    https://localhost:1443/devices/cvd-1/services/WmediumdService/SetTxpower
    
    {"mac_address":"42:00:00:00:00:00", "tx_power":1}
    

    Este é um exemplo de resposta.

    {}
    

Controle o ambiente usando a linha de comando

Esta seção descreve os subcomandos disponíveis para o comando CLI cvd env . Para mais detalhes, imprima a mensagem de ajuda usando cvd help env .

Liste os serviços ou métodos disponíveis

Para obter uma lista de todos os serviços, use cvd env ls sem argumentos.

cvd env ls

Para obter uma lista de todos os métodos de um serviço, inclua o nome do serviço como argumento.

cvd env ls SERVICE_NAME

Para obter informações detalhadas, como os tipos de mensagens de solicitação ou resposta de um método, inclua o nome do serviço e o nome do método.

cvd env ls SERVICE_NAME METHOD_NAME

Obtenha informações detalhadas sobre tipos de solicitação e resposta

Para obter informações detalhadas de um tipo de mensagem de solicitação ou resposta, use o comando cvd env type . Este comando imprime todos os nomes e tipos de cada campo da mensagem. Você pode então usar essas informações para escrever uma mensagem proto no formato JSON para enviar uma solicitação RPC.

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

Envie solicitação RPC para fazer alterações no ambiente

Para enviar uma solicitação RPC para chamar um método de um serviço com um proto formatado em JSON, use o comando cvd enc call . Quando a solicitação RPC termina, a interface imprime a mensagem Rpc succeeded with OK status e, se disponível, uma mensagem de resposta incluindo valores.

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

Exemplo de caso de uso

A seguir está um exemplo de caso de uso do comando cvd env CLI para modificar a intensidade do sinal Wi-Fi chamando SetTxpower .

  1. Determine o nome do serviço, o nome do método e o nome do tipo de mensagem de solicitação para modificar a intensidade do sinal Wi-Fi.

    Obtenha uma lista de todos os serviços disponíveis.

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

    Obtenha uma lista de métodos para WmediumdService .

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

    Obtenha informações sobre os tipos de mensagens de solicitação e resposta para o método SetTxpower .

    cvd env ls WmediumdService SetTxpower
    (Omitted)
    {
      "request_type" : "wmediumdserver.SetTxpowerRequest",
      "response_type" : "google.protobuf.Empty"
    }
    
  2. Obtenha informações detalhadas para o tipo de mensagem de solicitação wmediumdserver.SetTxpowerRequest .

    cvd env type WmediumdService wmediumdserver.SetTxpowerRequest
    (Omitted)
    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. Envie uma solicitação RPC ao serviço WmediumdService para modificar a intensidade do sinal Wi-Fi para o nível desejado.

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