Mực nang: Kiểm soát môi trường

Trang này mô tả cách kiểm soát môi trường trong thiết bị Cuttlefish bằng REST API hoặc giao diện dòng lệnh. Ví dụ: bạn có thể sửa đổi tín hiệu Wi-Fi hoặc cập nhật vị trí GPS của thiết bị Cuttlefish.

Dịch vụ

Lệnh cvd env cung cấp các dịch vụ sau để kiểm soát môi trường Cuttlefish:

Dịch vụ Mô tả
GnssGrpcProxy Kiểm soát GNSS cho tính năng định vị địa lý Cuttlefish.
OpenwrtControlService Kiểm soát Openwrt, một trình cung cấp AP Wi-Fi ảo hoá cho tính năng Wi-Fi Cuttlefish.
WmediumdService Kiểm soát Wmediumd, một trình mô phỏng phương tiện không dây cho tính năng Wi-Fi Cuttlefish.
CasimirControlService Kiểm soát Casimir, một trình mô phỏng cho các thiết bị NFC bên ngoài.

Kiểm soát môi trường bằng REST API

Phần này mô tả cách kiểm soát môi trường bằng Rest API thông qua điểm cuối dịch vụ <https://localhost:1443>.

Liệt kê các dịch vụ hoặc phương thức có sẵn

Để lấy danh sách tất cả các dịch vụ, hãy gửi yêu cầu GET đến URL sau bằng mã nhận dạng thiết bị.

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

Để nhận danh sách tất cả các phương thức cho một dịch vụ, hãy gửi yêu cầu GET đến URL sau đây cùng với mã nhận dạng thiết bị và tên dịch vụ.

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

Để biết thông tin chi tiết về một phương thức, chẳng hạn như các loại thông báo yêu cầu hoặc phản hồi, hãy gửi yêu cầu GET đến URL sau đây kèm theo mã thiết bị, tên dịch vụ và tên phương thức.

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

Xem thông tin chi tiết về các loại yêu cầu và phản hồi

Để nhận thông tin chi tiết về một loại thông báo yêu cầu hoặc phản hồi, hãy gửi một yêu cầu GETđến URL sau đây kèm theo mã nhận dạng thiết bị, tên dịch vụ và loại thông báo yêu cầu hoặc phản hồi. Thao tác này sẽ in tất cả tên và loại của từng trường trong thông báo. Sau đó, bạn có thể dùng thông tin này để viết một thông báo proto ở định dạng JSON để gửi yêu cầu RPC.

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

Gửi yêu cầu RPC để thay đổi môi trường

Để gửi yêu cầu RPC nhằm gọi một phương thức của dịch vụ bằng proto có định dạng JSON, hãy gửi yêu cầu POST đến URL sau bằng mã nhận dạng thiết bị, tên dịch vụ và tên phương thức. Proto ở định dạng JSON phải có trong phần nội dung.

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

Trường hợp sử dụng mẫu

Sau đây là ví dụ về trường hợp sử dụng Rest API để sửa đổi cường độ tín hiệu Wi-Fi bằng cách gọi SetTxpower.

  1. Xác định tên dịch vụ, tên phương thức và tên loại thông báo yêu cầu để sửa đổi cường độ tín hiệu Wi-Fi.

    1. Nhận danh sách tất cả các dịch vụ có sẵn bằng cách gửi yêu cầu GET đến URL sau.

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

      Đây là một ví dụ về câu trả lời.

      {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
      
    2. Lấy danh sách các phương thức cho WmediumdService bằng cách gửi yêu cầu GET đến URL sau.

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

      Đây là một ví dụ về câu trả lời.

      {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
      
    3. Nhận thông tin về các loại thông báo yêu cầu và phản hồi cho phương thức SetTxpower bằng cách gửi yêu cầu GET đến URL sau.

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

      Đây là một ví dụ về câu trả lời.

      {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
      
  2. Nhận thông tin chi tiết cho loại thông báo yêu cầu wmediumdserver.SetTxpowerRequest bằng cách gửi yêu cầu GET đến URL sau.

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

    Đây là một ví dụ về câu trả lời.

    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. Gửi yêu cầu RPC đến dịch vụ WmediumdService để sửa đổi cường độ tín hiệu Wi-Fi thành mức mong muốn bằng cách gửi yêu cầu POST đến URL này với nội dung yêu cầu sau.

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

    Đây là một ví dụ về câu trả lời.

    {}
    

Kiểm soát môi trường bằng dòng lệnh

Phần này mô tả các lệnh con có sẵn cho lệnh CLI cvd env. Để biết thêm thông tin chi tiết, hãy in thông báo trợ giúp bằng cách sử dụng cvd help env.

Liệt kê các dịch vụ hoặc phương thức có sẵn

Để xem danh sách tất cả các dịch vụ, hãy sử dụng cvd env ls mà không có đối số nào.

cvd env ls

Để lấy danh sách tất cả các phương thức cho một dịch vụ, hãy thêm tên của dịch vụ làm đối số.

cvd env ls SERVICE_NAME

Để biết thông tin chi tiết như các loại thông báo yêu cầu hoặc phản hồi của một phương thức, hãy thêm tên dịch vụ và tên phương thức.

cvd env ls SERVICE_NAME METHOD_NAME

Xem thông tin chi tiết về các loại yêu cầu và phản hồi

Để biết thông tin chi tiết về một loại thông báo yêu cầu hoặc phản hồi, hãy sử dụng lệnh cvd env type. Lệnh này in tất cả tên và loại của từng trường trong thông báo. Sau đó, bạn có thể sử dụng thông tin này để viết một thông báo proto có định dạng JSON để gửi yêu cầu RPC.

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

Gửi yêu cầu RPC để thay đổi môi trường

Để gửi yêu cầu RPC nhằm gọi một phương thức của dịch vụ bằng proto có định dạng JSON, hãy dùng lệnh cvd enc call. Khi yêu cầu RPC kết thúc, giao diện sẽ in thông báo Rpc succeeded with OK status và nếu có, thông báo phản hồi bao gồm các giá trị.

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

Trường hợp sử dụng mẫu

Sau đây là ví dụ về trường hợp sử dụng lệnh CLI cvd env để sửa đổi cường độ tín hiệu Wi-Fi bằng cách gọi SetTxpower.

  1. Xác định tên dịch vụ, tên phương thức và tên loại thông báo yêu cầu để sửa đổi cường độ tín hiệu Wi-Fi.

    Lấy danh sách tất cả các dịch vụ hiện có.

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

    Nhận danh sách các phương thức cho WmediumdService.

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

    Nhận thông tin về các loại thông báo yêu cầu và phản hồi cho phương thức SetTxpower.

    cvd env ls WmediumdService SetTxpower
    (Omitted)
    {
      "request_type" : "wmediumdserver.SetTxpowerRequest",
      "response_type" : "google.protobuf.Empty"
    }
  2. Nhận thông tin chi tiết cho loại thông báo yêu cầu wmediumdserver.SetTxpowerRequest.

    cvd env type WmediumdService wmediumdserver.SetTxpowerRequest
    (Omitted)
    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
  3. Gửi yêu cầu RPC đến dịch vụ WmediumdService để sửa đổi cường độ tín hiệu Wi-Fi thành mức mong muốn.

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