Seiche: contrôle de l'environnement

Cette page explique comment contrôler l'environnement d'un appareil Cuttlefish à l'aide de l'API REST ou de l'interface de ligne de commande. Par exemple, vous pouvez modifier le signal Wi-Fi ou mettre à jour la position GPS de l'appareil Cuttlefish.

Services

La commande cvd env fournit les services suivants pour contrôler l'environnement de Seigneur:

Services Description
GnssGrpcProxy Contrôle le GNSS pour la fonctionnalité de géolocalisation Cuttlefish.
OpenwrtControlService Contrôle Openwrt, un fournisseur de point d'accès Wi-Fi virtualisé pour la fonctionnalité Wi-Fi de Cuttlefish.
WmediumdService Contrôle Wmediumd, un simulateur de taille moyenne sans fil pour la fonctionnalité Wi-Fi de Cuttlefish.
CasimirControlService Contrôle Casimir, un simulateur pour les appareils NFC externes.

Contrôler l'environnement à l'aide de l'API REST

Cette section explique comment contrôler l'environnement à l'aide de l'API REST via le point de terminaison du service <https://localhost:1443>.

Lister les services ou méthodes disponibles

Pour obtenir la liste de tous les services, envoyez une requête GET à l'URL suivante avec un ID d'appareil.

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

Pour obtenir la liste de toutes les méthodes d'un service, envoyez une requête GET à l'URL suivante avec un ID d'appareil et le nom du service.

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

Pour obtenir des informations détaillées sur une méthode, telles que les types de messages de requête ou de réponse, envoyez une requête GET à l'URL suivante avec un ID d'appareil, un nom de service et le nom de la méthode.

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

Obtenir des informations détaillées sur les types de requêtes et de réponses

Pour obtenir des informations détaillées sur un type de message de requête ou de réponse, envoyez une requête GET à l'URL suivante avec un ID d'appareil, un nom de service et le type de message de requête ou de réponse. Cette commande affiche tous les noms et types de chaque champ du message. Vous pouvez ensuite utiliser ces informations pour écrire un message proto au format JSON afin d'envoyer une requête RPC.

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

Envoyer une requête RPC pour apporter des modifications à l'environnement

Pour envoyer une requête RPC afin d'appeler une méthode d'un service avec un proto au format JSON, envoyez une requête POST à l'URL suivante avec un ID d'appareil, un nom de service et le nom de la méthode. Le proto au format JSON doit être inclus dans le corps.

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

Exemple de cas d'utilisation

Voici un exemple de cas d'utilisation de l'API REST pour modifier l'intensité du signal Wi-Fi en appelant SetTxpower.

  1. Déterminez le nom du service, le nom de la méthode et le nom du type de message de requête pour modifier l'intensité du signal Wi-Fi.

    1. Obtenez la liste de tous les services disponibles en envoyant une requête GET à l'URL suivante.

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

      Voici un exemple de réponse.

      {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
      
    2. Obtenez la liste des méthodes pour WmediumdService en envoyant une requête GET à l'URL suivante.

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

      Ceci est un exemple de réponse.

      {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
      
    3. Pour obtenir des informations sur les types de messages de requête et de réponse pour la méthode SetTxpower, envoyez une requête GET à l'URL suivante.

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

      Ceci est un exemple de réponse.

      {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
      
  2. Pour obtenir des informations détaillées sur le type de message de requête wmediumdserver.SetTxpowerRequest, envoyez une requête GET à l'URL suivante.

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

    Voici un exemple de réponse.

    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. Envoyez une requête RPC au service WmediumdService pour modifier l'intensité du signal Wi-Fi au niveau souhaité en envoyant une requête POST à cette URL avec le corps de requête suivant.

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

    Ceci est un exemple de réponse.

    {}
    

Contrôler l'environnement à l'aide de la ligne de commande

Cette section décrit les sous-commandes disponibles pour la commande CLI cvd env. Pour en savoir plus, imprimez le message d'aide avec cvd help env.

Lister les services ou méthodes disponibles

Pour obtenir la liste de tous les services, utilisez cvd env ls sans arguments.

cvd env ls

Pour obtenir la liste de toutes les méthodes d'un service, incluez le nom du service en tant qu'argument.

cvd env ls SERVICE_NAME

Pour obtenir des informations détaillées, telles que les types de requêtes ou de messages de réponse d'une méthode, incluez le nom du service et le nom de la méthode.

cvd env ls SERVICE_NAME METHOD_NAME

Obtenir des informations détaillées sur les types de requêtes et de réponses

Pour obtenir des informations détaillées sur un type de message de requête ou de réponse, utilisez la commande cvd env type. Cette commande imprime tous les noms et types de chaque champ du message. Vous pouvez ensuite utiliser ces informations pour écrire un message proto au format JSON afin d'envoyer une requête RPC.

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

Envoyer une requête RPC pour apporter des modifications à l'environnement

Pour envoyer une requête RPC afin d'appeler une méthode d'un service avec un proto au format JSON, utilisez la commande cvd enc call. Lorsque la requête RPC se termine, l'interface affiche le message Rpc succeeded with OK status et, s'il est disponible, un message de réponse contenant les valeurs.

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

Exemple de cas d'utilisation

Voici un exemple de cas d'utilisation de la commande CLI cvd env pour modifier l'intensité du signal Wi-Fi en appelant SetTxpower.

  1. Déterminez le nom du service, le nom de la méthode et le nom du type de message de requête pour modifier l'intensité du signal Wi-Fi.

    Obtenez la liste de tous les services disponibles.

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

    Obtenez la liste des méthodes pour WmediumdService.

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

    Obtenez des informations sur les types de messages de requête et de réponse pour la méthode SetTxpower.

    cvd env ls WmediumdService SetTxpower
    (Omitted)
    {
      "request_type" : "wmediumdserver.SetTxpowerRequest",
      "response_type" : "google.protobuf.Empty"
    }
  2. Obtenez des informations détaillées sur le type de message de requête wmediumdserver.SetTxpowerRequest.

    cvd env type WmediumdService wmediumdserver.SetTxpowerRequest
    (Omitted)
    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
  3. Envoyez une requête RPC au service WmediumdService pour modifier l'intensité du signal Wi-Fi au niveau souhaité.

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