ساقه ماهی: کنترل محیط

این صفحه نحوه کنترل محیط در یک دستگاه Cuttlefish را با استفاده از REST API یا رابط خط فرمان شرح می‌دهد. به عنوان مثال، می‌توانید سیگنال Wi-Fi را تغییر دهید یا موقعیت GPS دستگاه Cuttlefish را به‌روزرسانی کنید.

خدمات

دستور cvd env سرویس‌های زیر را برای کنترل محیط Cuttlefish ارائه می‌دهد:

خدمات توضیحات
GnssGrpcProxy GNSS را برای ویژگی موقعیت جغرافیایی Cuttlefish کنترل می‌کند.
OpenwrtControlService Openwrt ، یک ارائه‌دهنده‌ی نقطه دسترسی مجازی Wi-Fi برای ویژگی Wi-Fi Cuttlefish، را کنترل می‌کند.
WmediumdService Wmediumd ، یک شبیه‌ساز رسانه بی‌سیم برای ویژگی Wi-Fi Cuttlefish، را کنترل می‌کند.
CasimirControlService Casimir ، یک شبیه‌ساز برای دستگاه‌های NFC خارجی، را کنترل می‌کند.

کنترل محیط با استفاده از REST API

این بخش نحوه کنترل محیط با استفاده از Rest API از طریق نقطه پایانی سرویس <https://localhost:1443> را شرح می‌دهد.

فهرست خدمات یا روش‌های موجود

برای دریافت لیستی از تمام سرویس‌ها، یک درخواست GET به همراه شناسه دستگاه به آدرس اینترنتی زیر ارسال کنید.

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

برای دریافت لیستی از تمام متدهای یک سرویس، یک درخواست GET به همراه شناسه دستگاه و نام سرویس به URL زیر ارسال کنید.

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

برای دریافت اطلاعات دقیق در مورد یک متد، مانند انواع پیام‌های درخواست یا پاسخ، یک درخواست GET به همراه شناسه دستگاه، نام سرویس و نام متد به آدرس اینترنتی زیر ارسال کنید.

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

اطلاعات دقیقی در مورد انواع درخواست و پاسخ دریافت کنید

برای دریافت اطلاعات دقیق در مورد نوع پیام درخواست یا پاسخ، یک درخواست GET به آدرس اینترنتی زیر ارسال کنید که شامل شناسه دستگاه، نام سرویس و نوع پیام درخواست یا پاسخ باشد. این کار تمام نام‌ها و انواع هر فیلد در پیام را چاپ می‌کند. سپس می‌توانید از این اطلاعات برای نوشتن یک پیام اولیه با فرمت JSON برای ارسال درخواست RPC استفاده کنید.

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

ارسال درخواست RPC برای ایجاد تغییرات در محیط

برای ارسال درخواست RPC برای فراخوانی متدی از یک سرویس با یک پروتو با فرمت JSON، یک درخواست POST به URL زیر ارسال کنید که شامل شناسه دستگاه، نام سرویس و نام متد باشد. پروتو با فرمت JSON باید در بدنه گنجانده شود.

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

مثال مورد استفاده

در ادامه، مثالی از کاربرد Rest API برای تغییر قدرت سیگنال وای‌فای با فراخوانی SetTxpower ارائه شده است.

  1. نام سرویس، نام روش و نام نوع پیام درخواست برای تغییر قدرت سیگنال Wi-Fi را تعیین کنید.

    1. با ارسال یک درخواست GET به آدرس اینترنتی زیر، فهرستی از تمام سرویس‌های موجود را دریافت کنید.

      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 به آدرس اینترنتی زیر، اطلاعات دقیقی در مورد نوع پیام درخواست wmediumdserver.SetTxpowerRequest دریافت کنید.

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

    این یک نمونه پاسخ است.

    message SetTxpowerRequest {
      string mac_address = 1;
      int32 tx_power = 2;
    }
    
  3. با ارسال یک درخواست POST به این URL با متن درخواست زیر، یک درخواست RPC به سرویس WmediumdService ارسال کنید تا قدرت سیگنال 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 برای تغییر قدرت سیگنال Wi-Fi با فراخوانی SetTxpower ارائه شده است.

  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. درخواست RPC را به سرویس WmediumdService ارسال کنید تا قدرت سیگنال Wi-Fi را به سطح دلخواه تغییر دهید.

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