Cuttlefish:环境控制

本页介绍如何使用 REST API 或命令行界面控制 Cuttlefish 设备中的环境。例如,您可以修改 Wi-Fi 信号或更新 Cuttlefish 设备的 GPS 位置。

服务

cvd env命令提供以下服务来控制 Cuttlefish 环境:

服务描述
GnssGrpcProxy控制 Cuttlefish 地理定位功能的 GNSS。
OpenwrtControlService控制Openwrt ,一个用于 Cuttlefish Wi-Fi 功能的虚拟化 Wi-Fi AP 提供商。
WmediumdService控制Wmediumd ,一个用于 Cuttlefish Wi-Fi 功能的无线介质模拟器。

使用 REST API 控制环境

本节介绍如何通过<https://localhost:1443>服务端点使用 Rest API 控制环境。

列出可用的服务或方法

要获取所有服务的列表,请使用设备 ID 向以下 URL 发送GET请求。

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

要获取服务的所有方法的列表,请向以下 URL 发送带有设备 ID 和服务名称的GET请求。

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

要获取方法的详细信息(例如请求或响应消息类型),请将GET请求发送到以下 URL,其中包含设备 ID、服务名称和方法名称。

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

获取有关请求和响应类型的详细信息

要获取请求或响应消息类型的详细信息,请将GET请求发送到以下 URL,其中包含设备 ID、服务名称以及请求或响应消息类型。这将打印消息中每个字段的所有名称和类型。然后,您可以使用此信息编写 JSON 格式的原型消息来发送 RPC 请求。

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

发送 RPC 请求以对环境进行更改

要发送 RPC 请求以使用 JSON 格式的原型调用服务的方法,请将POST请求发送到以下 URL,并包含设备 ID、服务名称和方法名称。 JSON 格式的原型必须包含在正文中。

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

示例用例

以下是 Rest API 的示例用例,用于通过调用SetTxpower修改 Wi-Fi 信号强度。

  1. 确定修改Wi-Fi信号强度的服务名称、方法名称和请求消息类型名称。

    1. 通过向以下 URL 发送GET请求来获取所有可用服务的列表。

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

      这是一个响应示例。

      {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
      
    2. 通过向以下 URL 发送GET请求来获取WmediumdService的方法列表。

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

      这是一个响应示例。

      {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
      
    3. 通过向以下 URL 发送GET请求,获取有关SetTxpower方法的请求和响应消息类型的信息。

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

      这是一个响应示例。

      {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
      
  2. 通过向以下 URL 发送GET请求来获取wmediumdserver.SetTxpowerRequest请求消息类型的详细信息。

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

    这是一个响应示例。

    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. 通过向此 URL 发送具有以下请求正文的POST请求,向WmediumdService服务发送 RPC 请求,以将 Wi-Fi 信号强度修改为所需的级别。

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

    这是一个响应示例。

    {}
    

使用命令行控制环境

本节介绍可用于cvd env CLI 命令的子命令。有关更多详细信息,请使用cvd help env打印帮助消息。

列出可用的服务或方法

要获取所有服务的列表,请使用不带任何参数的cvd env ls

cvd env ls

要获取服务的所有方法的列表,请包含服务名称作为参数。

cvd env ls SERVICE_NAME

要获取详细信息(例如方法的请求或响应消息类型),请包括服务名称和方法名称。

cvd env ls SERVICE_NAME METHOD_NAME

获取有关请求和响应类型的详细信息

要获取请求或响应消息类型的详细信息,请使用cvd env type命令。此命令打印消息中每个字段的所有名称和类型。然后,您可以使用此信息编写 JSON 格式的原型消息来发送 RPC 请求。

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

发送 RPC 请求以对环境进行更改

要发送 RPC 请求以使用 JSON 格式的原型调用服务的方法,请使用cvd enc call命令。当 RPC 请求终止时,接口将打印消息Rpc succeeded with OK status ,以及包含值的响应消息(如果可用)。

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

示例用例

以下是cvd env CLI 命令的示例用例,用于通过调用SetTxpower修改 Wi-Fi 信号强度。

  1. 确定修改Wi-Fi信号强度的服务名称、方法名称和请求消息类型名称。

    获取所有可用服务的列表。

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

    获取WmediumdService的方法列表。

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

    获取有关SetTxpower方法的请求和响应消息类型的信息。

    cvd env ls WmediumdService SetTxpower
    (Omitted)
    {
      "request_type" : "wmediumdserver.SetTxpowerRequest",
      "response_type" : "google.protobuf.Empty"
    }
    
  2. 获取wmediumdserver.SetTxpowerRequest请求消息类型的详细信息。

    cvd env type WmediumdService wmediumdserver.SetTxpowerRequest
    (Omitted)
    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. WmediumdService服务发送 RPC 请求,将 Wi-Fi 信号强度修改为所需级别。

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