Sepien: Umgebungssteuerung

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

Dienste

Der Befehl cvd env bietet die folgenden Dienste zum Steuern der Sepia-Umgebung:

Dienste Beschreibung
GnssGrpcProxy Steuert GNSS für die Cuttlefish-Standortbestimmung.
OpenwrtControlService Steuert Openwrt, einen virtualisierten WLAN-ZP-Anbieter für die Cuttlefish-WLAN-Funktion.
WmediumdService Steuert Wmediumd, einen drahtlosen Medium-Simulator für die WLAN-Funktion von Cuttlefish.
CasimirControlService Steuert Casimir, einen Simulator für externe NFC-Geräte.

Umgebung mit der REST API steuern

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

Verfügbare Dienste oder Methoden auflisten

Senden Sie eine GET-Anfrage mit einer Geräte-ID an die folgende URL, um eine Liste aller Dienste abzurufen.

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

Wenn Sie eine Liste aller Methoden für einen Dienst abrufen möchten, 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

Wenn Sie detaillierte Informationen zu einer Methode abrufen möchten, z. B. die Anfrage- oder Antwortnachrichtentypen, 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

Detaillierte Informationen zu Anfrage- und Antworttypen abrufen

Wenn Sie detaillierte Informationen zu einem Anfrage- oder Antwortnachrichtentyp erhalten möchten, senden Sie eine GET-Anfrage an die folgende URL mit einer Geräte-ID, einem Dienstnamen und dem Anfrage- oder Antwortnachrichtentyp. Damit werden alle Namen und Typen jedes Felds in der Nachricht ausgegeben. Anhand dieser Informationen können Sie dann eine JSON-formatierte Proto-Nachricht zum Senden einer RPC-Anfrage schreiben.

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

RPC-Anfrage senden, um Änderungen an der Umgebung vorzunehmen

Wenn Sie eine RPC-Anfrage zum Aufrufen einer Methode eines Dienstes mit einem JSON-formatierten Proto senden möchten, 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

Beispiel aus dem Alltag:

Im Folgenden finden Sie ein Beispiel für einen Anwendungsfall der REST API zum Ändern der WLAN-Signalstärke durch Aufrufen von SetTxpower.

  1. Ermitteln Sie den Dienstnamen, den Methodennamen und den Namen des Anfragenachrichtentyps, um die WLAN-Signalstärke zu ändern.

    1. Rufen Sie eine Liste aller verfügbaren Dienste ab, 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. Zum Abrufen von Informationen zu den Anfrage- und Antwortnachrichtentypen für die Methode SetTxpower senden Sie eine GET-Anfrage an die folgende URL.

      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. Senden Sie eine GET-Anfrage an die folgende URL, um detaillierte Informationen zum Anfragenachrichtentyp wmediumdserver.SetTxpowerRequest zu erhalten.

    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 Dienst WmediumdService, um die WLAN-Signalstärke auf die gewünschte Stufe zu ändern. Dazu wird eine POST-Anfrage mit dem folgenden Anfragetext an diese URL gesendet.

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

    Dies ist eine Beispielantwort.

    {}
    

Umgebung über die Befehlszeile steuern

In diesem Abschnitt werden die Unterbefehle beschrieben, die für den Befehl cvd env in der Befehlszeile verfügbar sind. Wenn Sie weitere Informationen benötigen, drucken Sie die Hilfenachricht mit cvd help env.

Verfügbare Dienste oder Methoden auflisten

Wenn Sie eine Liste aller Dienste abrufen möchten, verwenden Sie cvd env ls ohne Argumente.

cvd env ls

Wenn Sie eine Liste aller Methoden für einen Dienst abrufen möchten, geben Sie den Namen des Dienstes als Argument an.

cvd env ls SERVICE_NAME

Wenn Sie detaillierte Informationen wie die Anfrage- oder Antwortnachrichtentypen einer Methode erhalten möchten, geben Sie den Dienst- und den Methodennamen an.

cvd env ls SERVICE_NAME METHOD_NAME

Detaillierte Informationen zu Anfrage- und Antworttypen abrufen

Ausführliche Informationen zu einem Anfrage- oder Antwortnachrichtentyp erhalten Sie mit dem Befehl cvd env type. Dieser Befehl gibt alle Namen und Typen der einzelnen Felder in der Nachricht aus. Anhand dieser Informationen können Sie dann eine JSON-formatierte Proto-Nachricht zum Senden einer RPC-Anfrage schreiben.

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

RPC-Anfrage senden, um Änderungen an der Umgebung vorzunehmen

Verwenden Sie den Befehl cvd enc call, um eine RPC-Anfrage zum Aufrufen einer Methode eines Dienstes mit einem JSON-formatierten Proto zu senden. Wenn die RPC-Anfrage beendet wird, druckt die Benutzeroberfläche die Nachricht Rpc succeeded with OK status und, falls verfügbar, eine Antwortnachricht mit Werten aus.

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

Beispiel aus dem Alltag:

Im folgenden Beispiel wird der Befehl cvd env verwendet, um die WLAN-Signalstärke durch Aufrufen von SetTxpower zu ändern.

  1. Bestimmen Sie den Dienstnamen, den Methodennamen und den Namen des Anfragenachrichtentyps, um die WLAN-Signalstärke zu ändern.

    Rufen Sie eine Liste aller verfügbaren Dienste ab.

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

    Liste der Methoden für WmediumdService abrufen

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

    Hier finden Sie Informationen zu den Anfrage- und Antwortnachrichtentypen für die Methode SetTxpower.

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

    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
    {}