เครื่องมือนโยบายเสียงที่กำหนดค่าได้

ใน Android 14 ระบบปฏิบัติการ Android Automotive (AAOS) ใช้ประโยชน์จากการจัดการเสียงของรถยนต์ด้วยเครื่องยนต์นโยบายเสียงที่กำหนดค่าได้ (CAP) ภายในโซนเสียงหลัก กล่าวโดยละเอียดคือ เครื่องมือ CAP อนุญาตให้ AAOS ควบคุมเฉพาะการกำหนดเส้นทางเสียง เฉพาะระดับเสียง หรือทั้งการกำหนดเส้นทางและระดับเสียงพร้อมกัน คุณใช้ Flag ต่อไปนี้เพื่อควบคุมลักษณะการทํางานได้

  • ใช้ Flag useCoreAudioVolume เพื่อเปิดใช้การจัดการปริมาณ CAP เมื่อค่านี้คือ true บริการเสียงของรถยนต์จะใช้ Audio Manager API เพื่อจัดการกลุ่มระดับเสียง

  • ใช้ Flag useCoreAudioRouting เพื่อเปิดใช้การจัดการการกำหนดเส้นทางเสียง CAP เมื่อค่านี้เป็น true บริการเสียงรถยนต์จะใช้การกำหนดเส้นทางนโยบายเสียงที่กำหนดค่าได้เพื่อจัดการการกำหนดเส้นทางเสียง

Android ยังรองรับเครื่องมือนโยบายเสียงโดยค่าเริ่มต้นในรูปแบบของเครื่องมือนโยบายเสียงเริ่มต้น

ฉากหลัง

เครื่องมือ CAP อิงตามเฟรมเวิร์กพารามิเตอร์ของ Intel ซึ่งเป็นเฟรมเวิร์กแบบปลั๊กอินและแบบกฎสําหรับการจัดการพารามิเตอร์ สำหรับการจัดการเสียงของ Android โดยเฉพาะ เครื่องมือ CAP ได้เปิดตัวความสามารถในการกำหนดกฎของไฟล์ XML เพื่อระบุข้อมูลต่อไปนี้

  • กลยุทธ์ผลิตภัณฑ์เสียง
  • กฎสำหรับการเลือกอุปกรณ์เอาต์พุตเสียง
  • กฎสำหรับการเลือกอุปกรณ์อินพุตเสียง
  • กฎในการจัดการระดับเสียงและการปิดเสียงพร้อมกับตารางระดับเสียง

การจัดเตรียม CAP ก่อน Android 16

รูปภาพต่อไปนี้แสดงภาพรวมระดับสูงของการจัดการการกำหนดค่าเครื่องมือนโยบายเสียงที่กำหนดค่าได้ของ Android 6

สถาปัตยกรรมของเครื่องมือ CAP ก่อน Android 16

รูปที่ 1 การจัดการการกําหนดค่าเครื่องมือ CAP ตั้งแต่ Android 6

ดังที่แสดงในรูปภาพ บริการนโยบายเสียงจะรับการกำหนดค่าของเครื่องมือ CAP โดยแยกวิเคราะห์ข้อมูลจากaudio_policy_engine_configuration.xml ไฟล์ในพาร์ติชัน vendor ไฟล์การกําหนดค่าของเครื่องมือ CAP ใช้สคีมาที่กําหนดไว้ใน audio_policy_engine_configuration.xsd เพื่อรับข้อมูลที่จําเป็น audio_policy_engine_configuration.xml เป็นตัวอย่างสําหรับยานยนต์ ตัวอย่างที่คล้ายกันสำหรับรูปแบบอื่นๆ อยู่ในโฟลเดอร์ frameworks/av/services/audiopolicy/engineconfigurable/config/example/

รูปภาพต่อไปนี้แสดงรายละเอียดเพิ่มเติมเกี่ยวกับวิธีโหลดข้อมูลเครื่องมือนโยบายเสียงที่กำหนดค่าได้ภายในบริการนโยบายเสียง ในกรณีนี้ เฟรมเวิร์กพารามิเตอร์จะโหลดโครงสร้างและการตั้งค่าจากไฟล์ XML

เส้นทางการโหลดของเครื่องมือ CAP ก่อน Android 16

รูปที่ 2 ข้อมูล CAP ที่โหลดภายในบริการนโยบายเสียง

ไฟล์โครงสร้าง CAP ใน Android 15 และต่ำกว่า

บริการนโยบายเสียงจะอ่านไฟล์ ParameterFrameworkConfigurationPolicy.xml เพื่อรับโครงสร้างและการตั้งค่า ข้อมูลนี้อ้างอิงถึงข้อมูลโครงสร้างผ่านตำแหน่งไฟล์คำอธิบายโครงสร้าง

<StructureDescriptionFileLocation Path="Structure/Policy/PolicyClass.xml"/>

ข้อมูลนี้ชี้ไปยังโครงสร้างข้อมูลในไฟล์

/vendor/etc/parameter-framework/Structure/Policy/PolicyClass.xml

โครงสร้างโครงร่างมีอยู่ใน Android ข้อมูลโครงสร้างต้องใช้ข้อมูลโครงสร้างกลยุทธ์ผลิตภัณฑ์ ดังนั้น Android จึงมีbuildStrategiesStructureFile.py เครื่องมือการสร้างซึ่งสามารถสร้างข้อมูลจากไฟล์ XML กลยุทธ์ผลิตภัณฑ์ที่มีอยู่ ซึ่งจะอ้างอิงผ่าน genrule default buildstrategiesstructurerule ดังนี้

genrule {
    name: "buildstrategiesstructure_gen",
    defaults: ["buildstrategiesstructurerule"],
    srcs: [
        ":audio_policy_engine_configuration_files",
    ],
}

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

ไฟล์การตั้งค่า CAP ใน Android 15 และต่ำกว่า

ข้อมูลการตั้งค่าซึ่งแสดงกฎและค่าของพารามิเตอร์จะอ้างอิงในไฟล์ ParameterFrameworkConfigurationPolicy.xml ดังนี้

<SettingsConfiguration>
  <ConfigurableDomainsFileLocation Path="Settings/Policy/PolicyConfigurableDomains.xml"/>
</SettingsConfiguration>

นอกจากนี้ Android ยังมีเครื่องมือสร้างเพื่อสร้างข้อมูลนี้โดยใช้การกำหนดค่าเครื่องมือนโยบายเสียงและไฟล์เฟรมเวิร์กพารามิเตอร์ ดูข้อมูลเพิ่มเติมได้ในการกําหนดค่า

การจัดเตรียมค่าเริ่มต้น AIDL audio HAL CAP

ตั้งแต่ Android 16 เป็นต้นไป คำจำกัดความของ AIDL Audio HAL API จะขยายการทำงานด้วยการกำหนดค่าเครื่องมือกลไกนโยบายเสียง AudioHalCapConfiguration.aidl รูปภาพต่อไปนี้แสดงภาพรวมระดับสูงของการจัดการการกําหนดค่าเครื่องยนต์ CAP ของ Android 16

สถาปัตยกรรม Aidl ของเครื่องมือ CAP

รูปที่ 3 การจัดการการกําหนดค่าเครื่องมือ CAP ตั้งแต่ Android 16

บริการนโยบายเสียงจะรับข้อมูลเครื่องยนต์ CAP โดยใช้ AIDL Audio HAL APIs โดยตรงแทนการแยกวิเคราะห์ข้อมูลจากไฟล์ XML ในพาร์ติชันของผู้ให้บริการอุปกรณ์

ในการกำหนดค่านี้ โครงสร้างของเฟรมเวิร์กพารามิเตอร์จะยังคงโหลดโดยเครื่องมือ CAP ฝั่งเซิร์ฟเวอร์เสียง

เส้นทางการโหลด aidl ของเครื่องมือ CAP

รูปที่ 4 โครงสร้างเครื่องมือ CAP

ในทุกกรณี การกําหนดค่าต้องระบุข้อมูลที่เกี่ยวข้องกับกลยุทธ์ผลิตภัณฑ์ กลุ่มปริมาณ และเกณฑ์อย่างครบถ้วน

รูปภาพต่อไปนี้แสดงภาพรวมระดับสูงของ AIDL audio HAL API ที่บริการนโยบายเสียงใช้เพื่อรับการกำหนดค่าเครื่องมือ CAP

CAP engine AIDL API รูปที่ 5 AIDL audio HAL API

ในการตั้งค่านี้ บริการนโยบายเสียงจะได้รับข้อมูลจาก HAL เสียง AIDL ดังนี้

  • การกำหนดค่า
  • กลยุทธ์
  • ชุด
  • เกณฑ์
  • การตั้งค่า

ตัวโหลด HAL เสียง AIDL เริ่มต้น

HAL เสียง AIDL ที่เป็นค่าเริ่มต้นมี ตัวโหลดเอนจิ้น CAP XML เพื่อให้การเปลี่ยนจาก HIDL เป็น AIDL เป็นไปอย่างราบรื่น ผู้ให้บริการสามารถใช้โปรแกรมโหลดนี้โดยตรงโดยการขยาย HAL เสียงด้วย HAL เสียงเริ่มต้นหรืออ้างอิงคลัง libaudioserviceexampleimpl

โปรแกรมโหลด HAL เสียง AIDL เริ่มต้นใช้ audio_policy_engine_configuration.xml เพื่อรับข้อมูลต่อไปนี้

  • การกำหนดค่า
  • กลยุทธ์
  • ชุด
  • เกณฑ์

ข้อมูลโครงสร้างมาจากไฟล์ PolicyConfigurableDomains.xml ความแตกต่างที่สำคัญจากกลไกก่อนหน้านี้คือ HAL เสียง AIDL จะรับข้อมูลโครงสร้างด้วยแทนเฟรมเวิร์กพารามิเตอร์ที่บริการนโยบายเสียง

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

โครงสร้างในการกําหนดค่า AIDL

ใน Android 16 ขึ้นไป บริการนโยบายเสียงจะรับข้อมูลโครงสร้างโดยการอ่านและแยกวิเคราะห์ParameterFrameworkConfigurationCap.xml ไฟล์ โดยเฉพาะอย่างยิ่ง ข้อมูลดังกล่าวจะมาจากไฟล์คำอธิบายโครงสร้าง

<StructureDescriptionFileLocation Path="Structure/Policy/CapClass.xml"/>

เฟรมเวิร์กจะวางไฟล์ที่จำเป็นลงใน/etc/parameter-framework/ โฟลเดอร์พร้อมข้อมูลที่จำเป็น

โครงสร้างแสดงพารามิเตอร์ที่ควรควบคุม ดังนั้นจึงควรอ้างอิงในการกำหนดค่าหรือโดเมน ในกรณีนี้ เครื่องมือ AIDL ควรใช้ชื่อที่กำหนดไว้ล่วงหน้าสำหรับพารามิเตอร์ สําหรับกลยุทธ์ผลิตภัณฑ์ ระบบจะกําหนดค่าโครงสร้างใน CapProductStrategies.xml

กลยุทธ์ผลิตภัณฑ์เริ่มต้น

กลยุทธ์ผลิตภัณฑ์ที่ขึ้นต้นด้วยคํานําหน้า STRATEGY_ เริ่มต้นด้วยค่าเริ่มต้นที่ระบุไว้ในเครื่องมือเริ่มต้น ดังนี้

  • STRATEGY_PHONE
  • STRATEGY_SONIFICATION
  • STRATEGY_ENFORCED_AUDIBLE
  • STRATEGY_ACCESSIBILITY
  • STRATEGY_SONIFICATION_RESPECTFUL
  • STRATEGY_MEDIA
  • STRATEGY_DTMF
  • STRATEGY_CALL_ASSISTANT
  • STRATEGY_TRANSMITTED_THROUGH_SPEAKER

รูปแบบนี้มีไว้เพื่อลดความซับซ้อนของการเปลี่ยนจาก HIDL เป็น AIDL สำหรับอุปกรณ์ที่ใช้กลยุทธ์เริ่มต้น การเปลี่ยนแปลงรูปแบบนี้ส่งผลต่อไฟล์ที่มีอยู่ (เช่น PfW, XML) ที่ใช้เพื่อกำหนดค่าเครื่องมือ โดยเฉพาะอย่างยิ่ง ควรเปลี่ยนการอ้างอิงกลยุทธ์ผลิตภัณฑ์ทั้งหมดให้ใช้ชื่อใหม่ เช่น

ชื่อพารามิเตอร์การกําหนดค่าที่ไม่ใช่ AIDL
/Policy/policy/product_strategies/media/device_address
/Policy/policy/product_strategies/media/selected_output_devices/mask
ชื่อพารามิเตอร์การกําหนดค่า AIDL
/Policy/policy/product_strategies/STRATEGY_MEDIA/device_address
/Policy/policy/product_strategies/STRATEGY_MEDIA/selected_output_devices/mask
กลยุทธ์ผลิตภัณฑ์ที่ OEM กำหนด

เครื่องมือที่กําหนดค่าได้ช่วยให้ OEM เปลี่ยนคําจํากัดความของกลยุทธ์ผลิตภัณฑ์ได้ เพื่อรองรับเรื่องนี้ต่อไป ไฟล์กลยุทธ์ผลิตภัณฑ์ CapProductStrategies.xml ยังมีกลยุทธ์ผลิตภัณฑ์ที่ขยายได้ของผู้ให้บริการ 40 รายการจาก vx_1000 ถึง vx_1039 ส่วนขยายของผู้ให้บริการทั้งหมดต้องขึ้นต้นด้วยคำนำหน้า vx_ ตามด้วยตัวเลขที่แสดงถึงรหัสกลยุทธ์ผลิตภัณฑ์ในการกำหนดกลยุทธ์ผลิตภัณฑ์ HAL เสียงของ AIDL คําจํากัดความที่เหลือ (เช่น กลุ่มแอตทริบิวต์เสียง ชื่อ) จะได้รับจากออบเจ็กต์ AudioHALProductStrategy ในการกําหนดค่าเครื่องยนต์ HAL ของเสียง

เช่นเดียวกับกลยุทธ์ผลิตภัณฑ์เริ่มต้น ข้อมูลอ้างอิง OEM ที่ระบุโดยผู้ให้บริการยังต้องปรับเปลี่ยนระหว่างการกำหนดค่าที่ไม่ใช่ AIDL กับการกำหนดค่า AIDL ด้วย ตัวอย่างเช่น

ชื่อพารามิเตอร์การกําหนดค่าที่ไม่ใช่ AIDL
/Policy/policy/product_strategies/oem_extension_strategy/device_address
/Policy/policy/product_strategies/oem_extension_strategy/selected_output_devices/mask
ชื่อพารามิเตอร์การกําหนดค่า AIDL
/Policy/policy/product_strategies/vx_1037/device_address
/Policy/policy/product_strategies/vx_1037/selected_output_devices/mask

กลยุทธ์ผลิตภัณฑ์

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

  • ประเภทการใช้งานอธิบายสาเหตุที่เล่นเสียง (เช่น สื่อ การแจ้งเตือน การโทร)
  • ประเภทเนื้อหาจะอธิบายสิ่งที่เล่นอยู่ (เช่น เพลง เสียงพูด วิดีโอ การสร้างเสียง)
  • ประเภทFlag จะกำหนดลักษณะการทำงานหรือคำขอต่างๆ ที่เกี่ยวข้องกับสตรีม
  • ประเภทแท็กรองรับรายการค่าสตริงของผู้ให้บริการแบบใดก็ได้
    • สตริงแต่ละรายการต้องขึ้นต้นด้วย VX_ ตามด้วยสตริงที่เป็นตัวอักษรและตัวเลขคละกัน (เช่น VX_OEM, VX_NAVIGATION)
<ProductStrategy name="music" id="1008">
    <AttributesGroup streamType="AUDIO_STREAM_MUSIC" volumeGroup="media">
        <Attributes> <Usage value="AUDIO_USAGE_MEDIA"/> </Attributes>
        <Attributes> <Usage value="AUDIO_USAGE_GAME"/> </Attributes>
        <!-- Default product strategy has empty attributes -->
        <Attributes></Attributes>
    </AttributesGroup>
</ProductStrategy>

ข้อความที่ตัดตอนมานี้แสดงตัวอย่างกลยุทธ์ผลิตภัณฑ์ที่ใช้ในโปรแกรมจำลองการขับขี่รถยนต์ ประกอบด้วยแอตทริบิวต์เสียง 2 รายการที่มีสื่อและเกมที่ใช้เสียงตามลำดับ กลยุทธ์ผลิตภัณฑ์นี้ตรงกับบริบทเสียง MUSIC ที่ใช้ในบริการเสียงรถยนต์ แต่ไม่จำเป็นต้องมีการจับคู่ดังกล่าว ยูทิลิตีหลักอย่างหนึ่งสำหรับ OEM ที่ใช้ CAP ร่วมกับ Android คือการกำหนดคำจำกัดความการจัดกลุ่มเสียงที่ยืดหยุ่นมากขึ้น

กลุ่มระดับเสียง

นอกจากนี้ กลุ่มแอตทริบิวต์เสียงแต่ละกลุ่มต้องมีกลุ่มระดับเสียงที่เชื่อมโยง กลุ่มระดับเสียงนี้จะเชื่อมโยงกับสตรีมที่ตรงกับแอตทริบิวต์เสียงซึ่งอยู่ในกลุ่มแอตทริบิวต์เสียง ตัวอย่างกลยุทธ์ผลิตภัณฑ์เพลงในส่วนกลยุทธ์ผลิตภัณฑ์มีกลุ่มปริมาณ media และคำจำกัดความของกลุ่มปริมาณสื่อมีดังนี้

<volumeGroup>
    <name>media</name>
    <indexMin>0</indexMin>
    <indexMax>40</indexMax>
    <volume deviceCategory="DEVICE_CATEGORY_SPEAKER">
        <point>0,-2400</point>
        <point>33,-1600</point>
        <point>66,-800</point>
        <point>100,0</point>
    </volume>
</volumeGroup>

ในคําจํากัดความนี้ กลุ่มปริมาณประกอบด้วย

  • ชื่อกลุ่ม
  • ดัชนีขั้นต่ำของกลุ่ม
  • ดัชนีสูงสุดของกลุ่ม
  • เส้นโค้งของกลุ่มระดับเสียง

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

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

การกำหนดค่า

ในเครื่องมือ CAP จะใช้การกําหนดค่าเพื่อกําหนดเงื่อนไขหรือกฎที่กําหนดลักษณะการทํางานของเสียง ระบบจะประเมินการกําหนดค่าเหล่านี้เมื่อรันไทม์เพื่อเลือกกฎที่เหมาะสมที่จะใช้ โดยขึ้นอยู่กับสถานะปัจจุบันของระบบเสียง

ดังที่แสดงในรูปที่ 5 API มีโดเมนหลายรายการ เป้าหมายของโดเมนแต่ละรายการคือการแยกตรรกะออกเป็นปัญหาการกำหนดเส้นทางที่เล็กลงเพื่อแก้ปัญหา (เช่น อุปกรณ์ 1, อุปกรณ์ 2)

โดเมนแต่ละรายการมีการกําหนดค่า และการกําหนดค่าแต่ละรายการมีชุดกฎ กฎสร้างขึ้นตามเกณฑ์ที่ AudioPolicyManager ระบุไว้ ดังนี้

  • โหมดเสียง
  • อุปกรณ์อินพุตและเอาต์พุตที่ใช้ได้
  • ที่อยู่อุปกรณ์อินพุตและเอาต์พุตที่พร้อมใช้งาน
  • ใช้สำหรับ
    • สื่อ
    • การสื่อสาร
    • กำลังบันทึก
    • แท่นชาร์จ
    • ระบบ
    • เสียงของระบบ HDMI
    • เสียงเซอร์ราวด์ที่เข้ารหัส
    • การสั่นเมื่อมีเสียงเรียกเข้า

โดเมนแต่ละรายการมีการกําหนดค่าที่กําหนดกฎที่ควรส่งผลต่อลักษณะการทํางาน โปรดทราบว่าลําดับการกําหนดค่ามีความสําคัญและคุณต้องตรวจสอบว่ากําหนดค่าอยู่ในลําดับที่จําเป็น หลังจากตรวจสอบกฎสําหรับการกําหนดค่าแล้ว ระบบจะเลือกการกําหนดค่า

โค้ดต่อไปนี้แสดงตัวอย่างข้อความที่ตัดตอนมาจากไฟล์เฟรมเวิร์กพารามิเตอร์ ซึ่งสามารถใช้เพื่อสร้างไฟล์ XML ที่จําเป็นสําหรับการกําหนดค่าโดเมนที่กําหนดค่าได้


supDomain: DeviceForProductStrategies
  supDomain: Music
    domain: SelectedDevice
      conf: BluetoothA2dp
        ForceUseForMedia IsNot NO_BT_A2DP
        ForceUseForCommunication IsNot BT_SCO
        AvailableOutputDevices Includes BLUETOOTH_A2DP
        component:/Policy/policy/product_strategies/vx_1000/selected_output_devices/mask
          bluetooth_a2dp = 1
          bus = 0
      conf: Bus
        AvailableOutputDevices Includes Bus
        AvailableOutputDevicesAddresses Includes BUS00_MEDIA
        component: /Policy/policy/product_strategies/vx_1000/selected_output_devices/mask
          bluetooth_a2dp = 0
          bus = 1
      conf: Default
        component: /Policy/policy/product_strategies/vx_1000/selected_output_devices/mask
          bluetooth_a2dp = 0
          bus = 0

โดเมน DeviceForProductStrategies จะกําหนดวิธีใช้กฎต่างๆ เมื่อจัดการการเลือกอุปกรณ์สําหรับกลยุทธ์ผลิตภัณฑ์ ส่วนสีน้ำเงินอธิบายกฎที่ควรพิจารณา ส่วนสีเขียวคือการกำหนดค่าที่ใช้ ตัวอย่างนี้มีการกำหนดค่าต่อไปนี้

  • เลือกอุปกรณ์ A2DP บลูทูธสำหรับกลยุทธ์ผลิตภัณฑ์เพลง (รหัส 1000, vx_1000)
    • หากใช้สำหรับสื่อ จะไม่ยกเว้น A2DP
    • หากใช้เพื่อการสื่อสาร ไม่ใช่ BT SCO
    • หากอุปกรณ์พร้อมใช้งาน ให้ใส่ BT A2DP
  • เลือกอุปกรณ์บัส
    • หากอุปกรณ์บัสพร้อมใช้งาน
    • หากที่อยู่คือ BUS00_MEDIA
  • หรือเลือกอุปกรณ์เอาต์พุตเริ่มต้น

หากต้องการสร้างไฟล์ XML ของเครื่องมือนโยบายที่กําหนดค่าได้ ให้เรียกใช้ไฟล์เฟรมเวิร์กพารามิเตอร์ (PFW) ผ่านระบบบิลด์ โดยกําหนดกฎบิลด์โดยใช้ขั้นตอนต่อไปนี้

  1. ในไฟล์ Android.bp ให้สร้างกลุ่มไฟล์สำหรับไฟล์ โดยทำดังนี้

    filegroup {
        name: ":device_for_product_strategies.pfw",
        srcs: ["engine/parameter-framework/Settings/device_for_product_strategyies.pfw"],
    }
    
  2. เพิ่มไฟล์ลงในไฟล์ PfW อื่นๆ (หากมี)

    filegroup {
        name: "edd_files",
        srcs: [
            ":device_for_input_source.pfw",
            ":volumes.pfw",
            ":device_for_product_strategyies.pfw",
        ],
    }
    
  3. สร้างกฎการสร้างโดเมนที่เกี่ยวข้อง

    genrule {
        name: "domaingeneratorpolicyrule_gen",
        defaults: ["domaingeneratorpolicyrule"],
        srcs: [
            ":audio_policy_engine_criterion_types",
            ":audio_policy_pfw_structure_files",
            ":audio_policy_pfw_toplevel",
            ":edd_files",
        ],
    }
    

    โดยที่ domaingeneratorpolicyrule คือกฎการสร้างที่เฟรมเวิร์กระบุไว้เพื่อสร้างไฟล์ PolicyConfigurableDomains.xml ไฟล์ต้นฉบับอื่นๆ (scrs) ที่รวมอยู่ในกฎการสร้างโดเมนมีดังนี้

    แหล่งที่มา คำอธิบาย
    audio_policy_pfw_toplevel ไฟล์การกําหนดค่าเฟรมเวิร์กระดับบนสุด
    audio_policy_pfw_structure_files ไฟล์โครงสร้างการสร้างโดเมน ซึ่งใช้สร้างไฟล์การกําหนดค่า
    audio_policy_engine_criterion_types ไฟล์ XML ประเภทเกณฑ์ ซึ่งอธิบายเกณฑ์ที่ใช้ระหว่างการสร้าง
    edd_files รายการไฟล์โดเมนเดียว (แต่ละไฟล์มีแท็ก <ConfigurableDomain> รายการเดียว)

หลังจากเรียกใช้กฎการสร้างในบิลด์ ระบบจะสร้าง PolicyConfigurableDomains.xml ด้วยโดเมนทั้งหมด ตัวอย่างต่อไปนี้แสดงข้อความที่ตัดตอนมาจากไฟล์ที่สร้างขึ้นโดยใช้กฎ PfW

---ConfigurableDomain Name="DeviceForProductStrategies.Music.SelectedDevice"---
<Configurations>
  <Configuration Name="BluetoothA2dp">
    <CompoundRule Type="All">
      <SelectionCriterionRule SelectionCriterion="ForceUseForMedia" MatchesWhen="IsNot" Value="NO_BT_A2DP"/>
      <SelectionCriterionRule SelectionCriterion="ForceUseForCommunication" MatchesWhen="IsNot" Value="BT_SCO"/>
      <SelectionCriterionRule SelectionCriterion="AvailableOutputDevices" MatchesWhen="Includes" Value="BLUETOOTH_A2DP"/>
    </CompoundRule>
  </Configuration>
  <Configuration Name="Bus">
    <CompoundRule Type="All">
      <SelectionCriterionRule SelectionCriterion="AvailableOutputDevices" MatchesWhen="Includes" Value="BUS"/>
      <SelectionCriterionRule SelectionCriterion="AvailableOutputDevicesAddresses" MatchesWhen="Includes" Value="BUS00_MEDIA"/>
    </CompoundRule>
  </Configuration>
  <Configuration Name="Default">
    <CompoundRule Type="All"/>
  </Configuration>
</Configurations>

การแก้ไขข้อบกพร่อง CAP

คุณสามารถใช้ remote-process เพื่อแสดงการกำหนดค่า CAP ดังนี้

adb root && adb remount
adb shell remote-process unix:///dev/socket/audioserver/policy_debug dumpDomains

ซึ่งจะแสดงโดเมนและการกําหนดค่าทั้งหมด รวมถึงเงื่อนไขการบังคับใช้ ต่อไปนี้คือข้อความที่ตัดตอนมาจากอุปกรณ์ยานยนต์ Cuttlefish โดยใช้ Bluetooth A2DP, อุปกรณ์บัส และการกำหนดค่าเริ่มต้น ดูการกําหนดค่า

- ConfigurableDomain: DeviceForProductStrategies.Music.SelectedDevice =
 {Sequence aware: no, Last applied configuration: Bus}
  - Configuration: BluetoothA2dp
    - CompoundRule = All
      - SelectionCriterionRule = ForceUseForMedia IsNot NO_BT_A2DP
      - SelectionCriterionRule = ForceUseForCommunication IsNot BT_SCO
      - SelectionCriterionRule = AvailableOutputDevices Includes BLUETOOTH_A2DP
  - Configuration: Bus
    - CompoundRule = All
      - SelectionCriterionRule = AvailableOutputDevices Includes BUS
      - SelectionCriterionRule = AvailableOutputDevicesAddresses Includes BUS00_MEDIA_CARD_0_DEV_0
  - Configuration: Default
    - CompoundRule = All

ดูข้อมูลเพิ่มเติมเกี่ยวกับคําสั่งอื่นๆ ที่พร้อมใช้แก้ไขข้อบกพร่องของเฟรมเวิร์กพารามิเตอร์ CAP ได้ที่เครื่องมือนี้

adb shell remote-process unix:///dev/socket/audioserver/policy_debug help

ผู้ผลิต OEM ต้องอนุญาตให้ปรับแต่งในอุปกรณ์จึงจะใช้เครื่องมือนี้ได้ หากต้องการยืนยันว่าอุปกรณ์อนุญาตให้ปรับแต่งหรือไม่ ให้ใช้คำสั่งต่อไปนี้

adb shell cat /system/etc/parameter-framework/ParameterFrameworkConfigurationCap.xml

ใน Android 15 และต่ำกว่า ไฟล์อาจแตกต่างออกไป ดังนั้นให้ใช้คำสั่งต่อไปนี้

adb shell cat /system/etc/parameter-framework/ParameterFrameworkConfigurationPolicy.xml

ไฟล์ควรมี TuningAllowed="true" พร้อมกับพอร์ตเซิร์ฟเวอร์ที่เกี่ยวข้อง ดังนี้

<?xml version="1.0" encoding="UTF-8"?>
<ParameterFrameworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    SystemClassName="Policy" TuningAllowed="true" ServerPort="unix:///dev/socket/audioserver/policy_debug">
    <SubsystemPlugins>
        <Location Folder="">
            <Plugin Name="libpolicy-subsystem.so"/>
        </Location>
    </SubsystemPlugins>
    <StructureDescriptionFileLocation Path="Structure/Policy/CapClass.xml"/>
</ParameterFrameworkConfiguration>

ไฟล์นี้สร้างขึ้นโดยอัตโนมัติตามประเภทของอิมเมจบิลด์ (หรือใช้ไฟล์อื่นสำหรับรุ่นหรือแก้ไขข้อบกพร่องสำหรับบิลด์เดิม) บิลด์รุ่นจะตั้งค่า TuningAllowed เป็น false โดยไม่มีพอร์ตซ็อกเก็ต (บิลด์รุ่นไม่อนุญาตให้ใช้ซ็อกเก็ต) บิลด์เวอร์ชันสำหรับวิศวกรและuserdebugจะตั้งค่าเป็น true โดยใช้พอร์ตซ็อกเก็ตที่ใช้ โปรดทราบว่าไฟล์นี้เป็นไฟล์ที่ audio_policy_pfw_toplevel อ้างอิง เครื่องมือประมวลผลระยะไกลต้องรวมอยู่ในรุ่นของอุปกรณ์หรือไฟล์บิลด์ด้วย

# Tool used for debug Parameter Framework (only for eng and userdebug builds)
PRODUCT_PACKAGES_DEBUG += remote-process

นอกจากนี้ คุณยังต้องใส่นโยบาย SELinux ที่เกี่ยวข้องเพื่ออนุญาตซ็อกเก็ตด้วย การดำเนินการนี้จะใช้ได้กับโหมดแก้ไขข้อบกพร่องเท่านั้นเนื่องจากโหมดรุ่นไม่อนุญาตให้ใช้ซ็อกเก็ตอย่างชัดแจ้ง

BOARD_SEPOLICY_DIRS += frameworks/av/services/audiopolicy/engineconfigurable/sepolicy

การย้ายข้อมูล CAP ใน Android 16

การเปลี่ยนแปลงที่สำคัญที่เกิดจากเครื่องมือ CAP HAL เสียง AIDL และเวอร์ชันก่อนหน้าทำให้คุณควรพิจารณาสถานการณ์ต่างๆ ของการเปลี่ยนอุปกรณ์ ส่วนนี้จะกล่าวถึงสถานการณ์การเปลี่ยนผ่านที่โดดเด่นที่สุดและให้คําแนะนําสําหรับงานเพื่อเปิดใช้การกําหนดค่าเครื่องมือ CAP

สถานการณ์ 1: อุปกรณ์ใหม่ที่ใช้ Android 16 ขึ้นไป ไม่มีแหล่งที่มาก่อนหน้านี้สำหรับการกําหนดค่า CAP ของอุปกรณ์

อุปกรณ์ใหม่ต้องเปิดใช้ Android 16 ขึ้นไป โค้ดในพาร์ติชัน vendor ซึ่งหมายความว่าต้องแสดงการกำหนดค่าเครื่องมือนโยบายเสียงที่กำหนดค่าได้ผ่านอินเทอร์เฟซ HAL เสียง AIDL คุณควรคัดลอกการกำหนดค่าเครื่องมือ Device Agent CAPT จากตัวอย่าง ไม่ควรมีคำจำกัดความโดเมน PfW CAP ในพาร์ติชัน vendor

อิมเมจระบบที่ใช้สำหรับอุปกรณ์เป็น Android 16 ขึ้นไป เฟรมเวิร์กบริการเสียงจะค้นหาการกำหนดค่า CAP ผ่านอินเทอร์เฟซ HAL เสียง AIDL ดังนั้นจึงเริ่มต้น PfW โดยใช้คำจำกัดความโดเมน CAP ของ PfW จากอิมเมจระบบ และโหลดการกำหนดค่า CAP ของอุปกรณ์ที่ได้รับผ่าน AIDL

ตัวอย่างเช่น ดูอุปกรณ์เสมือนจริง Cuttlefish สำหรับยานยนต์ซึ่งเปิดตัวในการเปลี่ยนแปลงนี้ และใช้เป็นข้อมูลอ้างอิงสำหรับไฟล์ที่จำเป็น กฎการสร้าง และไฟล์สร้างที่จําเป็นสําหรับการตั้งค่าไฟล์กําหนดค่าที่จําเป็น ซึ่งจะทำงานร่วมกับโปรแกรมโหลดที่ให้ไว้ใน HAL เสียง AIDL เริ่มต้น

สถานการณ์ 2: อุปกรณ์ใหม่ที่ใช้ Android 16 ขึ้นไปจากอุปกรณ์เครื่องเก่าที่ใช้ CAP

อุปกรณ์ใหม่ต้องเปิดใช้ Android 16 ขึ้นไป โค้ดในพาร์ติชัน vendor อย่างไรก็ตาม เนื่องจาก OEM มีอุปกรณ์ที่ใช้ได้ซึ่งมีการกําหนดค่าเครื่องยนต์ CAP OEM จึงต้องการใช้อุปกรณ์ดังกล่าวเป็นจุดเริ่มต้น (หรือนํากลับมาใช้ใหม่ทั้งหมด) การกําหนดค่า CAP เวอร์ชัน AIDL มีการเปลี่ยนแปลงบางอย่างเมื่อเทียบกับ Android 15 และเวอร์ชันที่ต่ำกว่า ดังนั้นผู้ให้บริการจึงต้องแปลงการกําหนดค่าที่มีอยู่เป็น AIDL ดูการพูดคุยในกลยุทธ์ผลิตภัณฑ์สำหรับการเปลี่ยนแปลงระหว่าง Android 16 กับเวอร์ชันที่ต่ำกว่าเพื่อดูการเปลี่ยนแปลงที่จำเป็น โดยทั่วไปแล้ว เฟรมเวิร์กเสียงจะค้นหาและโหลดการกำหนดค่า CAP ในลักษณะเดียวกับในสถานการณ์ 1

สถานการณ์ 3: อุปกรณ์ที่มีอยู่ที่มี CAP อัปเดตเป็น Android 16 เฉพาะพาร์ติชันระบบ

ในสถานการณ์นี้ พาร์ติชัน vendor มีการกำหนดค่า CAP ของอุปกรณ์ Android เวอร์ชัน 15 และต่ำกว่า รวมถึงคำจำกัดความของโดเมน CAP ของ PfW ระบบจะไม่แตะต้องพาร์ติชัน vendor ดังนั้นจึงยังคงใช้ HIDL HAL เฟรมเวิร์กจะเป็นไปตามสถานการณ์ของ Android 15 และต่ำกว่า และโหลดการกําหนดค่าที่เกี่ยวข้องกับ CAP ทั้งหมดจากพาร์ติชัน vendor

สถานการณ์ 4: อุปกรณ์ที่มีอยู่ซึ่งเปิดตัวใน Android 15 และมี CAP

AIDL ใน Android 15 ไม่รองรับ CAP ทางผู้ให้บริการบางรายจึงเปิดตัวอุปกรณ์ใหม่ที่มี AIDL Audio HAL และ CAP ซึ่งโหลดโดยเฟรมเวิร์กเสียง โหมดผสมนี้ไม่ใช่โหมดอย่างเป็นทางการ แต่รวมอยู่ใน Android 16 โปรดทราบว่าโหมดนี้ต้องไม่ใช้สำหรับการเปิดตัวอุปกรณ์ใหม่ใน Android 16 แต่ใช้เพื่ออัปเดตอุปกรณ์ที่มีอยู่ซึ่งใช้ผู้ให้บริการ Android 15 เป็น Android 16 (การอัปเดตพาร์ติชัน system)

เฟรมเวิร์กเสียงจะค้นหาการกำหนดค่าเสียง HAL ของเสียง AIDL ที่ไม่มีการกำหนดค่า CAP สําหรับการกําหนดค่า CAP บริการนโยบายเสียง (เฟรมเวิร์กเสียง) จะกลับไปโหลดการกําหนดค่า CAP จากพาร์ติชัน vendor ในกรณีนี้ จะต้องโหลดทั้งคำจำกัดความโดเมน CAP ของ PfW และการกำหนดค่า CAP ของอุปกรณ์จากพาร์ติชัน vendor

สรุปการย้ายข้อมูล CAP

ตารางต่อไปนี้สรุปการกำหนดค่าระบบและผู้ให้บริการที่เข้ากันได้ รวมถึงข้อกำหนดในการกำหนดค่า CAP

พาร์ติชันระบบ สถานการณ์ เวอร์ชันรหัสพาร์ติชันของผู้ให้บริการ ประเภท HAL ของเสียงหลัก ตำแหน่งคำจำกัดความของโดเมน PfW CAP การกำหนดค่า CAP ของอุปกรณ์
Android 15 4 Android 14 หรือต่ำกว่า HIDL vendor เวอร์ชัน HIDL
Android 16 3 Android 14 หรือต่ำกว่า HIDL vendor เวอร์ชัน HIDL
Android 16 4 Android 15 AIDL vendor เวอร์ชัน HIDL
Android 16 2 Android 16 AIDL system เวอร์ชัน AIDL ที่แปลงจาก HIDL
Android 16 1 Android 16 AIDL system เวอร์ชัน AIDL จากตัวอย่าง