Cuttlefish: controle do ambiente

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 de Wi-Fi ou atualizar a localização do GPS do dispositivo Cuttlefish.

Serviços

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

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

Controlar o ambiente usando a API REST

Esta seção descreve como controlar o ambiente usando a API REST pelo endpoint de serviço <https://localhost:1443>.

Lista de serviços ou métodos disponíveis

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

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

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

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

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

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

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

Para consultar informações detalhadas sobre um tipo de solicitação ou mensagem de resposta, envie uma solicitação GET para o seguinte URL com um ID do dispositivo, um nome de serviço e o tipo de solicitação ou mensagem de resposta. Assim, todos os nomes e tipos de cada campo vão aparecer na mensagem. Essa informação pode ser usada para escrever uma mensagem .proto em formato JSON e enviar uma solicitação de RPC.

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

Enviar solicitação de RPC (remote procedure call) para fazer mudanças no ambiente

Use uma solicitação POST para o seguinte URL com um ID do dispositivo, um nome de serviço e o nome do método para enviar uma solicitação de RPC e chamar um método de um serviço com um .proto em formato JSON. O .proto em formato JSON precisa estar incluído no corpo.

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

Exemplo de caso de uso

Confira abaixo um exemplo de caso de uso da API REST para modificar a intensidade do sinal de Wi-Fi chamando SetTxpower.

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

    1. Consulte 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. Consulte uma lista de métodos para WmediumdService enviando uma solicitação GET para o seguinte URL.

      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. Consulte informações sobre os tipos de solicitação e mensagens de resposta para o método SetTxpower enviando uma solicitação GET para o seguinte URL.

      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. Consulte informações detalhadas para o tipo de mensagem de solicitação wmediumdserver.SetTxpowerRequest enviando uma solicitação GET para o seguinte URL.

    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 de RPC ao serviço WmediumdService para ajustar a intensidade do sinal de Wi-Fi até o nível desejado enviando uma solicitação POST para este URL com o seguinte corpo da 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.

    {}
    

Controlar o ambiente usando a linha de comando

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

Lista de serviços ou métodos disponíveis

Para consultar uma lista de todos os serviços, use cvd env ls sem nenhum argumento.

cvd env ls

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

cvd env ls SERVICE_NAME

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

cvd env ls SERVICE_NAME METHOD_NAME

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

Para consultar informações detalhadas sobre um tipo de solicitação ou mensagem de resposta, use o comando cvd env type. Ele mostra todos os nomes e tipos de cada campo na mensagem. Essa informação pode ser usada para escrever uma mensagem .proto em formato JSON e enviar uma solicitação de RPC.

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

Enviar solicitação de RPC (remote procedure call) para fazer mudanças no ambiente

Use o comando cvd enc call para enviar uma solicitação de RPC e chamar o método de um serviço com um .proto em formato JSON. Quando a solicitação de RPC for encerrada, a interface vai mostrar 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

Confira abaixo um exemplo de caso de uso do comando cvd env da CLI para modificar a intensidade do sinal de Wi-Fi chamando SetTxpower.

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

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

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

    Consulte uma lista de métodos para WmediumdService.

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

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

    cvd env ls WmediumdService SetTxpower
    (Omitted)
    {
      "request_type" : "wmediumdserver.SetTxpowerRequest",
      "response_type" : "google.protobuf.Empty"
    }
    
  2. Consulte informações detalhadas do 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 de RPC ao serviço WmediumdService para ajustar a intensidade do sinal de Wi-Fi até 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
    {}