Tintenfisch: Umweltkontrolle

Auf dieser Seite wird beschrieben, wie Sie die Umgebung in einem Cuttlefish-Gerät mithilfe der REST-API oder der Befehlszeilenschnittstelle steuern. Sie können beispielsweise das WLAN-Signal ändern oder den GPS-Standort des Cuttlefish-Geräts aktualisieren.

Dienstleistungen

Der Befehl cvd env stellt die folgenden Dienste zur Steuerung der Cuttlefish-Umgebung bereit:

Dienstleistungen Beschreibung
GnssGrpcProxy Steuert GNSS für die Tintenfisch-Geolokalisierungsfunktion.
OpenwrtControlService Steuert Openwrt , einen virtualisierten Wi-Fi-AP-Anbieter für die Cuttlefish-Wi-Fi-Funktion.
WmediumdService Steuert Wmediumd , einen drahtlosen Mediensimulator für die Cuttlefish Wi-Fi-Funktion.

Steuern Sie die Umgebung mithilfe der REST-API

In diesem Abschnitt wird beschrieben, wie Sie die Umgebung mithilfe der Rest-API über den Dienstendpunkt <https://localhost:1443> steuern.

Listen Sie verfügbare Dienste oder Methoden auf

Um eine Liste aller Dienste zu erhalten, senden Sie eine GET Anfrage mit einer Geräte-ID an die folgende URL.

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

Um eine Liste aller Methoden für einen Dienst zu erhalten, senden Sie eine GET Anfrage mit einer Geräte-ID und dem Dienstnamen an die folgende URL.

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

Um detaillierte Informationen für eine Methode zu erhalten, beispielsweise die Nachrichtentypen der Anfrage oder Antwort, senden Sie eine GET Anfrage mit einer Geräte-ID, einem Dienstnamen und dem Methodennamen an die folgende URL.

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

Erhalten Sie detaillierte Informationen zu Anfrage- und Antworttypen

Um detaillierte Informationen zu einem Anfrage- oder Antwortnachrichtentyp zu erhalten, senden Sie eine GET Anfrage mit einer Geräte-ID, einem Dienstnamen und dem Anfrage- oder Antwortnachrichtentyp an die folgende URL. Dadurch werden alle Namen und Typen der einzelnen Felder in der Nachricht gedruckt. Anschließend können Sie diese Informationen verwenden, um eine JSON-formatierte Proto-Nachricht zum Senden einer RPC-Anfrage zu schreiben.

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

Senden Sie eine RPC-Anfrage, um Änderungen an der Umgebung vorzunehmen

Um eine RPC-Anfrage zum Aufrufen einer Methode eines Dienstes mit einem JSON-formatierten Protokoll zu senden, senden Sie eine POST Anfrage mit einer Geräte-ID, einem Dienstnamen und dem Methodennamen an die folgende URL. Das JSON-formatierte Proto muss im Text enthalten sein.

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

Beispielanwendungsfall

Im Folgenden finden Sie einen Beispielanwendungsfall der Rest-API zum Ändern der WLAN-Signalstärke durch Aufrufen SetTxpower .

  1. Bestimmen Sie den Dienstnamen, den Methodennamen und den Namen des Anforderungsnachrichtentyps zum Ändern der WLAN-Signalstärke.

    1. Erhalten Sie eine Liste aller verfügbaren Dienste, indem Sie eine GET Anfrage an die folgende URL senden.

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

      Dies ist eine Beispielantwort.

      {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
      
    2. Rufen Sie eine Liste der Methoden für WmediumdService ab, indem Sie eine GET Anfrage an die folgende URL senden.

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

      Dies ist eine Beispielantwort.

      {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
      
    3. Erhalten Sie Informationen zu den Anforderungs- und Antwortnachrichtentypen für die SetTxpower Methode, indem Sie eine GET Anfrage an die folgende URL senden.

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

      Dies ist eine Beispielantwort.

      {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
      
  2. Erhalten Sie detaillierte Informationen zum Anforderungsnachrichtentyp wmediumdserver.SetTxpowerRequest “, indem Sie eine GET Anfrage an die folgende URL senden.

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

    Dies ist eine Beispielantwort.

    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. Senden Sie eine RPC-Anfrage an den WmediumdService Dienst, um die WLAN-Signalstärke auf das gewünschte Niveau zu ändern, indem Sie eine POST Anfrage mit dem folgenden Anfragetext an diese URL senden.

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

    Dies ist eine Beispielantwort.

    {}
    

Steuern Sie die Umgebung über die Befehlszeile

In diesem Abschnitt werden die Unterbefehle beschrieben, die für den CLI-Befehl cvd env verfügbar sind. Für weitere Details drucken Sie die Hilfemeldung mit cvd help env aus.

Listen Sie verfügbare Dienste oder Methoden auf

Um eine Liste aller Dienste zu erhalten, verwenden Sie cvd env ls ohne Argumente.

cvd env ls

Um eine Liste aller Methoden für einen Dienst zu erhalten, geben Sie den Namen des Dienstes als Argument an.

cvd env ls SERVICE_NAME

Um detaillierte Informationen wie die Anforderungs- oder Antwortnachrichtentypen einer Methode zu erhalten, geben Sie den Dienstnamen und den Methodennamen an.

cvd env ls SERVICE_NAME METHOD_NAME

Erhalten Sie detaillierte Informationen zu Anfrage- und Antworttypen

Um detaillierte Informationen zu einem Anforderungs- oder Antwortnachrichtentyp zu erhalten, verwenden Sie den Befehl cvd env type . Dieser Befehl gibt alle Namen und Typen aller Felder in der Nachricht aus. Anschließend können Sie diese Informationen verwenden, um eine JSON-formatierte Proto-Nachricht zum Senden einer RPC-Anfrage zu schreiben.

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

Senden Sie eine RPC-Anfrage, um Änderungen an der Umgebung vorzunehmen

Um eine RPC-Anfrage zum Aufrufen einer Methode eines Dienstes mit einem JSON-formatierten Proto zu senden, verwenden Sie den Befehl cvd enc call . Wenn die RPC-Anfrage beendet wird, gibt die Schnittstelle die Meldung Rpc succeeded with OK status und, falls verfügbar, eine Antwortmeldung mit Werten aus.

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

Beispielanwendungsfall

Das Folgende ist ein Beispielanwendungsfall des cvd env CLI-Befehls zum Ändern der WLAN-Signalstärke durch Aufrufen SetTxpower .

  1. Bestimmen Sie den Dienstnamen, den Methodennamen und den Namen des Anforderungsnachrichtentyps zum Ändern der WLAN-Signalstärke.

    Erhalten Sie eine Liste aller verfügbaren Dienste.

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

    Rufen Sie eine Liste der Methoden für WmediumdService ab.

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

    Erhalten Sie Informationen zu den Anforderungs- und Antwortnachrichtentypen für die SetTxpower Methode.

    cvd env ls WmediumdService SetTxpower
    (Omitted)
    {
      "request_type" : "wmediumdserver.SetTxpowerRequest",
      "response_type" : "google.protobuf.Empty"
    }
    
  2. Erhalten Sie detaillierte Informationen zum Anforderungsnachrichtentyp wmediumdserver.SetTxpowerRequest .

    cvd env type WmediumdService wmediumdserver.SetTxpowerRequest
    (Omitted)
    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. Senden Sie eine RPC-Anfrage an den WmediumdService Dienst, um die WLAN-Signalstärke auf das gewünschte Niveau zu ändern.

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