แผงควบคุมปลาหมึก

อินเทอร์เฟซเบราว์เซอร์ WebRTC เริ่มต้นสำหรับ Cuttlefish มีแผงควบคุมที่ช่วยให้โต้ตอบกับอุปกรณ์เสมือนได้หลากหลายวิธี

แผงควบคุมมีปุ่มเริ่มต้นเพื่อจำลองการทำงานของอุปกรณ์ทั่วไป เช่น ปุ่มเปิด/ปิดหรือปุ่มปรับระดับเสียง ตลอดจนการหมุนอุปกรณ์

การกระทำที่กำหนดเอง

คุณสามารถปรับแต่งแผงควบคุมเพื่อเพิ่มปุ่มที่ช่วยให้อุปกรณ์เสมือนของคุณเลียนแบบอุปกรณ์ทางกายภาพของคุณได้อย่างใกล้ชิดยิ่งขึ้น สิ่งนี้มีประโยชน์สำหรับการทดสอบคุณสมบัติเฉพาะสำหรับอุปกรณ์ของคุณ เช่น ปุ่มฮาร์ดแวร์หรือท่าทางพิเศษที่ทริกเกอร์การกระทำเฉพาะในระบบปฏิบัติการ คุณยังสามารถใช้ปุ่มที่กำหนดเองเพื่อเปิดใช้งานการทดสอบคุณสมบัติที่เน้น QA มากขึ้น เช่น พฤติกรรมของระบบปฏิบัติการของคุณเมื่ออุปกรณ์มีแบตเตอรี่เหลือน้อย

แผงควบคุม Cuttlefish เริ่มต้นรองรับการดำเนินการแบบกำหนดเอง "เสียบปลั๊ก" โดยไม่จำเป็นต้องแก้ไขโปรเจ็กต์ Cuttlefish AOSP หลัก อุปกรณ์เสมือนของคุณต้องมีเพียงไฟล์การกำหนดค่าขั้นต่ำเพื่อเริ่มใช้การดำเนินการแบบกำหนดเอง ดู ตัวอย่างไฟล์กำหนดค่าการกระทำแบบกำหนดเอง นี้

  1. สร้างไฟล์ JSON ที่กำหนดการกระทำแบบกำหนดเองของอุปกรณ์ของคุณ คุณสามารถใส่ไฟล์นี้ลงในไดเร็กทอรีใดก็ได้ที่คุณเป็นเจ้าของ โครงสร้างของไฟล์นี้อธิบายไว้ในส่วน เชลล์ ADB และ เซิร์ฟเวอร์การดำเนินการ

  2. สร้างโมดูล prebuilt_etc_host สำหรับการกำหนดค่า JSON ของคุณ ตรวจสอบให้แน่ใจว่า sub_dir เท่ากับ cvd_custom_action_config

    prebuilt_etc_host {
        // Use any name you choose.
        name: "my_custom_action_config.json",
        src: "my_custom_action_config.json",
        // Always use this sub_dir.
        sub_dir: "cvd_custom_action_config",
    }
    
  3. ตั้งค่าตัวแปรบิวด์การกำหนดค่า Soong ใน makefile ผลิตภัณฑ์ของอุปกรณ์เพื่อกำหนดค่าแพ็คเกจโฮสต์อุปกรณ์เสมือนเพื่อรวมไฟล์กำหนดค่าการดำเนินการแบบกำหนดเองของคุณ

    # Set these variables exactly as shown here to enable the host package to see
    # your custom config module name.
    SOONG_CONFIG_NAMESPACES += cvd
    SOONG_CONFIG_cvd += custom_action_config
    
    # Set this value to the name of your JSON module.
    SOONG_CONFIG_cvd_custom_action_config := my_custom_action_config.json
    

มีวิธีที่รองรับสองวิธีในการดำเนินการแบบกำหนดเอง:

  • คำสั่งเชลล์ ADB
  • เซิร์ฟเวอร์แอคชั่น

ไฟล์การกำหนดค่า JSON ของคุณสามารถกำหนดอินสแตนซ์ได้หลายอินสแตนซ์ของการใช้งานแต่ละประเภท

คำสั่งเชลล์ ADB

คุณสามารถกำหนดปุ่มเดียวที่นำไปใช้โดยการรันคำสั่ง adb shell คำสั่งเดียว ตัวอย่างเช่น ข้อมูลโค้ด JSON ต่อไปนี้จะกำหนดปุ่มเดียวที่เรียกใช้หน้าเว็บ:

{
  "shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
  "button":{
      "command":"web",
      "title":"Web Page",
      "icon_name":"language"
  }
}

ฟิลด์ต่างๆ ได้แก่:

  • shell_command : คำสั่งให้ดำเนินการใน adb shell เมื่อกดปุ่ม
  • button : วัตถุปุ่มเดียวที่มีฟิลด์ย่อยต่อไปนี้:
    • command : ชื่อเฉพาะสำหรับปุ่มนี้
    • title : ชื่อข้อความแสดงแทนสำหรับปุ่มนี้
    • icon_name : ชื่อของไอคอนจาก https://material.io/resources/icons

เซิร์ฟเวอร์แอคชั่น

เซิร์ฟเวอร์การดำเนินการช่วยให้สามารถควบคุมพฤติกรรมของการกระทำของคุณได้มากขึ้น เซิร์ฟเวอร์การดำเนินการคือไบนารีของโฮสต์ที่คอยฟังเหตุการณ์การกดปุ่มจาก WebRTC โดยใช้คู่ซ็อกเก็ต WebRTC ส่งต่อเหตุการณ์ไปยังเซิร์ฟเวอร์การดำเนินการ จากนั้นเซิร์ฟเวอร์การดำเนินการจะตัดสินใจว่าจะดำเนินการอย่างไร

เซิร์ฟเวอร์การดำเนินการให้การควบคุมที่มีประสิทธิภาพมากขึ้น เช่น การรักษาสถานะ (เช่น สำหรับเหตุการณ์ที่สลับได้) หรือแม้แต่การเรียกใช้ "เมตาแอ็กชัน" เช่น การฆ่าอุปกรณ์ปัจจุบัน การเปิดอุปกรณ์เพิ่มเติม หรือการเริ่มส่วนขยายเบราว์เซอร์ที่บันทึกหน้าจอ ความเป็นไปได้จะถูกจำกัดด้วยสิ่งที่คุณตัดสินใจนำไปใช้ภายในไบนารี่ของโฮสต์เท่านั้น

ข้อมูลโค้ด JSON ต่อไปนี้กำหนดเซิร์ฟเวอร์การดำเนินการที่รับฟังเหตุการณ์ด้วยสองปุ่ม:

{
  "server":"cuttlefish_example_action_server",
  "buttons":[
    {
      "command":"settings",
      "title":"Quick Settings",
      "icon_name":"settings"
    },
    {
      "command":"alert",
      "title":"Do Not Disturb",
      "icon_name":"notifications_paused"
    }
  ]
}

ฟิลด์คือ:

  • server : ชื่อของโมดูลไบนารีโฮสต์ของคุณ
  • buttons : อาร์เรย์ของปุ่มที่มีฟิลด์ย่อยเหมือนกับด้านบน

หลังจากอัปเดตการกำหนดค่า JSON แล้ว ให้เพิ่มชื่อของโมดูลเซิร์ฟเวอร์การดำเนินการต่อท้ายตัวแปร Soong config build cvd_custom_action_servers ตัวอย่างเช่น:

# Append to this variable exactly as shown here.
SOONG_CONFIG_cvd += custom_action_servers

# Append the name of your action server(s) to this variable.
SOONG_CONFIG_cvd_custom_action_servers += cuttlefish_example_action_server

ไบนารีของโฮสต์เซิร์ฟเวอร์การดำเนินการแต่ละรายการควรดำเนินการตามขั้นตอนต่อไปนี้:

  1. ยอมรับหมายเลขตัวอธิบายไฟล์ซ็อกเก็ตเป็นอาร์กิวเมนต์โปรแกรมตัวแรกและตัวเดียว

    ซ็อกเก็ตนี้สร้างขึ้นโดย launch_cvd โดยใช้ socketpair กับโดเมน AF_LOCAL พิมพ์ SOCK_STREAM และโปรโตคอล 0

  2. ในการวนซ้ำ พยายามอ่าน 128 ไบต์จากซ็อกเก็ต ไบต์เหล่านี้มีเหตุการณ์การกดปุ่มที่ไคลเอ็นต์ WebRTC ส่งในรูปแบบ command:state command เป็นไปตามที่ให้ไว้ในการกำหนดค่า JSON และ state คือสถานะการกดปุ่ม ( down หรือ up )

  3. ดำเนินการกับเหตุการณ์ที่เข้ามาเพื่อจำลองการกระทำแบบกำหนดเอง