Cuttlefish: 환경 제어

이 페이지에서는 REST API나 명령줄 인터페이스를 사용하여 Cuttlefish 기기의 환경을 제어하는 방법을 설명합니다. 예를 들어 Wi-Fi 신호를 수정하거나 Cuttlefish 기기의 GPS 위치를 업데이트할 수 있습니다.

서비스

cvd env 명령어는 Cuttlefish 환경을 제어하는 다음 서비스를 제공합니다.

서비스 설명
GnssGrpcProxy Cuttlefish 위치정보 기능의 GNSS를 제어합니다.
OpenwrtControlService Cuttlefish Wi-Fi 기능을 위한 가상화된 Wi-Fi AP 제공자인 Openwrt를 제어합니다.
WmediumdService Cuttlefish Wi-Fi 기능을 위한 무선 매체 시뮬레이터인 Wmediumd를 제어합니다.

REST API를 사용하여 환경 제어

이 섹션에서는 <https://localhost:1443> 서비스 엔드포인트를 통해 REST API를 사용하여 환경을 제어하는 방법을 설명합니다.

사용 가능한 서비스 또는 메서드 목록

모든 서비스의 목록을 가져오려면 GET 요청을 기기 ID와 함께 다음 URL로 전송합니다.

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

서비스의 모든 메서드 목록을 가져오려면 기기 ID 및 서비스 이름과 함께 GET 요청을 다음 URL로 전송합니다.

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

요청 또는 응답 메시지 유형과 같은 메서드의 세부정보를 가져오려면 기기 ID와 서비스 이름, 메서드 이름과 함께 다음 URL로 GET 요청을 전송합니다.

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

요청 및 응답 유형에 관한 세부정보 확인

요청 또는 응답 메시지 유형의 세부정보를 가져오려면 기기 ID와 서비스 이름, 요청 또는 응답 메시지 유형과 함께 GET 요청을 다음 URL로 전송합니다. 이렇게 하면 메시지에 있는 각 필드의 모든 이름과 유형이 출력됩니다. 그러면 이 정보를 사용하여 RPC 요청 전송을 위한 JSON 형식의 proto 메시지를 작성할 수 있습니다.

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

환경을 변경하기 위해 RPC 요청 전송

JSON 형식 proto를 사용하여 서비스 메서드를 호출하는 RPC 요청을 전송하려면 기기 ID와 서비스 이름, 메서드 이름과 함께 POST 요청을 다음 URL로 전송합니다. JSON 형식 proto는 본문에 포함되어야 합니다.

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

사용 사례

다음은 SetTxpower를 호출하여 Wi-Fi 신호 강도를 수정하기 위한 REST API의 사용 사례입니다.

  1. Wi-Fi 신호 강도를 수정하기 위한 서비스 이름, 메서드 이름, 요청 메시지 유형 이름을 결정합니다.

    1. GET 요청을 다음 URL로 전송하여 사용할 수 있는 모든 서비스 목록을 가져옵니다.

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

      다음은 응답 예입니다.

      {"services":["OpenwrtControlService","EchoService","GnssGrpcProxy","WmediumdService"]}
      
    2. GET 요청을 다음 URL로 전송하여 WmediumdService의 메서드 목록을 가져옵니다.

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

      다음은 응답 예입니다.

      {"methods":["ListStations","LoadConfig","ReloadConfig","SetCivicloc","SetLci","SetPosition","SetSnr","SetTxpower","StartPcap","StopPcap"]}
      
    3. GET 요청을 다음 URL로 전송하여 SetTxpower 메서드의 요청 및 응답 메시지 유형에 관한 정보를 가져옵니다.

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

      다음은 응답 예입니다.

      {"request_type_name":"wmediumdserver.SetTxpowerRequest","response_type_name":"google.protobuf.Empty"}
      
  2. GET 요청을 다음 URL로 전송하여 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 요청을 전송해 Wi-Fi 신호 강도를 원하는 수준으로 수정하려면 WmediumdService 서비스에 RPC 요청을 전송합니다.

    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 명령어를 사용하세요. 이 명령어는 메시지에 있는 각 필드의 모든 이름과 유형을 출력합니다. 그러면 이 정보를 사용하여 RPC 요청 전송을 위한 JSON 형식의 proto 메시지를 작성할 수 있습니다.

cvd env type SERVICE_NAME REQUEST_OR_RESPONSE_TYPE_NAME

환경을 변경하기 위해 RPC 요청 전송

JSON 형식 proto를 사용하여 서비스 메서드를 호출하는 RPC 요청을 전송하려면 cvd enc call 명령어를 사용하세요. RPC 요청이 종료되면 인터페이스가 Rpc succeeded with OK status 메시지를 출력하며, 가능한 경우 값이 포함된 응답 메시지도 출력합니다.

cvd env call SERVICE_NAME METHOD_NAME JSON_FORMATTED_PROTO

사용 사례

다음은 SetTxpower를 호출하여 Wi-Fi 신호 강도를 수정하기 위한 cvd env CLI 명령어의 사용 사례입니다.

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