HAL สถานีวิทยุประกาศ

ส่วนต่อไปนี้อธิบายวิธีทำงานกับเลเยอร์แอบสแตรกชันของฮาร์ดแวร์ (HAL) เพื่อ นำวิทยุกระจายเสียงมาใช้

อินเทอร์เฟซ HAL ของการออกอากาศวิทยุ

HAL สถานีวิทยุออกอากาศมีโครงสร้างข้อมูลและอินเทอร์เฟซในระดับฮาร์ดแวร์เพื่อ ใช้วิทยุกระจายเสียง เช่น วิทยุ AM/FM และ DAB

อินเทอร์เฟซ HIDL 2.0 และ AIDL

HAL สถานีวิทยุออกอากาศใช้อินเทอร์เฟซที่อธิบายไว้ในส่วนต่อไปนี้

Listener ประกาศ

IAnnouncementListener เป็นอินเทอร์เฟซ Callback สำหรับผู้ฟังประกาศ สามารถลงทะเบียนในการออกอากาศ HAL วิทยุเพื่อรับประกาศ อินเทอร์เฟซมีสิ่งต่อไปนี้ วิธีการ:

Listener ประกาศ
คำอธิบาย: โทรทุกครั้งที่รายการประกาศมี มีการเปลี่ยนแปลง
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
AIDL oneway void onListUpdated(in Announcement[] announcements)

ICloseHandle

ICloseHandle เป็นแฮนเดิลปิดทั่วไปสำหรับนำ Callback ที่ไม่จำเป็นต้องใช้ ที่กำลังใช้งานอยู่

ICloseHandle
รายละเอียด: ปิดแฮนเดิล
HIDL 2.0 close()
AIDL void close()

การติดต่อกลับของ ITuner

ITunerCallback เป็นอินเทอร์เฟซ Callback ที่ HAL ของ Broadcast Radio เรียกใช้ ส่งการอัปเดตไปยังบริการไคลเอ็นต์ HAL

การติดต่อกลับของ ITuner
คำอธิบาย: มีการเรียกโดย HAL เมื่อดำเนินการปรับแต่ง (ปรับแต่ง กรอวิดีโอ (ใน AIDL) หรือสแกน (ใน HIDL) และขั้นตอนสำเร็จ) ทำงานไม่พร้อมกัน
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
คำอธิบาย: มีการเรียกใช้เมื่อปรับแต่ง กรอวิดีโอ (ใน AIDL) หรือสแกน (ใน HIDL) หรือขั้นตอนสำเร็จ
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
AIDL void onTuneFailed(in Result result, in ProgramSelector selector)
คำอธิบาย: มีการเรียกใช้เมื่อปรับแต่ง กรอวิดีโอ (ใน AIDL) หรือสแกน (ใน HIDL) หรือขั้นตอนสำเร็จ
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
คำอธิบาย: เรียกใช้เมื่อรายการโปรแกรมได้รับการอัปเดต เวลา ควรมีขนาดไม่เกิน 500 KB
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
AIDL oneway onProgramListUpdated(ProgramListChunk chunk)
คำอธิบาย: จะมีการโทรเมื่อเชื่อมต่อกับเสาอากาศ หรือ ยกเลิกการเชื่อมต่อแล้ว
HIDL 2.0 oneway onAntennaStateChange(bool connected)
AIDL void onCurrentProgramInfoChanged(in ProgramInfo info)
คำอธิบาย: เรียกใช้เมื่อพารามิเตอร์เฉพาะผู้ให้บริการ ค่าจะได้รับการอัปเดตภายในใน HAL (อย่าเรียกใช้หลังจากการเรียกใช้ setParameters ตามไคลเอ็นต์ HAL)
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
AIDL void onParametersUpdated(in VendorKeyValue[] parameters)
คำอธิบาย: ใหม่ใน AIDL มีการเรียกใช้เมื่อแฟล็กการกำหนดค่าคือ ที่อัปเดตภายในใน HAL (ไม่ควร เรียกใช้หลังจากเรียก setConfigFlag โดยไคลเอ็นต์ HAL)
HIDL 2.0 ไม่สามารถใช้งาน
AIDL void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

วิทยุกระจายเสียง

IBroadcastRadio เป็นอินเทอร์เฟซหลักสำหรับ HAL ของรายการวิทยุออกอากาศ ใน HIDL 2.0 HAL ใช้อินเทอร์เฟซ ITunerSession กับตัวรับสัญญาณเพื่อเรียกการดำเนินการ อย่างไรก็ตาม ที่ มีตัวรับสัญญาณอยู่มากที่สุด 1 รายการต่อครั้ง (ในกรณีที่อินสแตนซ์ HAL วิทยุออกอากาศแต่ละรายการมีตัวรับสัญญาณเพียงรายการเดียว) ชิป) นำ ITunerSession ออกจากอินเทอร์เฟซ AIDL และย้ายอินเทอร์เฟซไปยังแล้ว IBroadcastRadio

วิทยุกระจายเสียง
คำอธิบาย: รับคำอธิบายโมดูลและ ความสามารถ
HIDL 2.0 getProperties() generates (Properties properties)
AIDL Properties getProperties()
คำอธิบาย: ดึงข้อมูล AM/FM ปัจจุบันหรือที่เป็นไปได้ การกำหนดค่าภูมิภาค
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
AIDL AmFmRegionConfig getAmFmRegionConfig(bool full)
คำอธิบาย: ดึงข้อมูลภูมิภาค DAB ปัจจุบัน การกำหนดค่า
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
AIDL DabTableEntry[] getDabRegionConfig()
คำอธิบาย: รับรูปภาพจากแคชโมดูลวิทยุ ใน AIDL รูปภาพต้องมีขนาดไม่เกิน 1 MB เนื่องจากข้อจำกัดที่แข็งในบัฟเฟอร์ธุรกรรมของ Binder
HIDL 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
AIDL byte[] getImage(in int id)
คำอธิบาย: ลงทะเบียน Listener ประกาศ
HIDL 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
AIDL ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
คำอธิบาย:
  • HIDL HAL: เมื่อเปิดเซสชันตัวรับสัญญาณใหม่ เซสชันเก่าต้องสิ้นสุดลง
  • AIDL HAL: เนื่องจากไม่มีเซสชันตัวรับสัญญาณ จึงต้องตั้งค่าเฉพาะการเรียกกลับตัวรับสัญญาณ หากมี ก็ควรไม่ได้ตั้งค่า Callback เดิม
HIDL 2.0 สร้างได้ openSession(ITunerCallback callback) รายการ (Result result, ITunerSession session)
AIDL void setTunerCallback(in ITunerCallback callback)
คำอธิบาย:
  • HIDL HAL: การปิดเซสชันตัวรับสัญญาณต้องไม่ล้มเหลวและต้องออกเพียงครั้งเดียว
  • AIDL HAL: ไม่มีตัวรับสัญญาณและต้องตั้งค่า Callback ของตัวรับสัญญาณเท่านั้น
HIDL 2.0 close()
AIDL unsetTunerCallback()
คำอธิบาย: ฟังรายการที่เจาะจง
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
AIDL void tune(in ProgramSelector program)
คำอธิบาย: มองหาโปรแกรมที่ถูกต้องรายการถัดไป air เพื่อหลีกเลี่ยงความสับสนใน AIDL scan เปลี่ยนชื่อเป็น seek แล้ว
HIDL 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
AIDL void seek(in boolean directionUp, in boolean skipSubChannel)
คำอธิบาย: ขั้นตอนไปยังช่องที่อยู่ติดกัน ซึ่งอาจ โปรแกรมใดก็ตาม
HIDL 2.0 step(bool directionUp) generates (Result result)
AIDL void step(in boolean directionUp)
คำอธิบาย: ยกเลิกการปรับแต่งที่รอดำเนินการ สแกน (ใน HIDL) หรือการกรอวิดีโอ (ใน AIDL) หรือการดำเนินการตามขั้นตอน
HIDL 2.0 cancel()
AIDL void cancel()
คำอธิบาย: ใช้ตัวกรองกับรายการโปรแกรมและ เริ่มส่งการอัปเดตรายชื่อโปรแกรม onProgramListUpdated Callback
HIDL 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
AIDL void startProgramListUpdates(in ProgramFilter filter)
รายละเอียด: หยุดส่งการอัปเดตรายชื่อโปรแกรม
HIDL 2.0 stopProgramListUpdates()
AIDL void stopProgramListUpdates()
คำอธิบาย: ดึงข้อมูลการตั้งค่าปัจจุบันของ Flag การกำหนดค่า
HIDL 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
AIDL boolean isConfigFlagSet(in ConfigFlag flag)
คำอธิบาย: ตั้งค่าสถานะการกำหนดค่าที่ระบุ
HIDL 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
AIDL void setConfigFlag(in ConfigFlag flag, boolean value)
คำอธิบาย: ตั้งค่าค่าพารามิเตอร์เฉพาะผู้ให้บริการ
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

สร้าง

(vec<VendorKeyValue> results)
AIDL VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
คำอธิบาย: เรียกข้อมูลค่าพารามิเตอร์เฉพาะผู้ให้บริการ
HIDL 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
AIDL VendorKeyValue[] getParameters(in String[] keys)

การชี้แจงอินเทอร์เฟซ

ลักษณะการทำงานที่ไม่พร้อมกัน

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

  • ยกเลิกการดำเนินการปรับแต่งทั้งหมดที่รอดำเนินการ
  • ตรวจสอบว่าสามารถประมวลผลตามอินพุตของเมธอดและสถานะของ ตัวรับสัญญาณ
  • กำหนดเวลางานการปรับแต่งแล้วส่งกลับ Result (ใน HIDL) หรือ status (ใน AIDL) ทันที หาก Result หรือ status คือ OK ระบบจะเรียกกลับตัวรับสัญญาณ ต้องเรียก tuneFailed หรือ currentProgramInfoChanged เมื่อปรับแต่ง งานล้มเหลว (เช่น เนื่องจากหมดเวลา) หรือเสร็จสมบูรณ์แล้ว

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

สภาพการแข่งขัน

เนื่องจากการดำเนินการปรับแต่ง (เช่น ปรับแต่ง สแกน (ใน HIDL) หรือการค้นหาแบบไม่พร้อมกัน (ใน AIDL) และขั้นตอน) มีเงื่อนไขการแข่งขันระหว่างการยกเลิกการดำเนินการและการปรับแต่ง การดำเนินงาน หากมีการเรียก cancel หลังจาก HAL ดำเนินการปรับแต่งเสร็จแล้ว และก่อน การติดต่อกลับเสร็จสมบูรณ์ ไม่ต้องสนใจการยกเลิก และควรติดต่อกลับและได้รับการติดต่อกลับแล้ว โดยลูกค้า HAL

ในทำนองเดียวกัน หากมีการเรียก stopProgramListUpdates หลังจาก HAL จบโปรแกรม อัปเดตรายการ และก่อนที่การเรียกกลับ onCurrentProgramInfoChanged จะเสร็จสมบูรณ์ ไม่ต้องสนใจ stopProgramListUpdates และ Callback ก็ควรจะเสร็จสิ้น

ขีดจำกัดขนาดข้อมูล

เนื่องจากบัฟเฟอร์ธุรกรรมของ Binder มีข้อจำกัด ข้อมูลจึงจำกัดสำหรับบางอินเทอร์เฟซ สำหรับวิธีที่ส่งผ่านข้อมูลที่อาจมีขนาดใหญ่จะได้รับการชี้แจงใน AIDL HAL

  • getImage กำหนดให้รูปภาพที่ส่งคืนมีขนาดน้อยกว่า 1 MB
  • onProgramListUpdate กำหนดให้ chunk แต่ละรายการมีขนาดไม่เกิน 500kiB รายชื่อโปรแกรมที่มีขนาดใหญ่ขึ้นต้องแบ่งด้วยการติดตั้งใช้งาน HAL ออกเป็นกลุ่มๆ แล้วส่งผ่าน Callback หลายรายการ

การเปลี่ยนแปลงโครงสร้างข้อมูล AIDL HAL

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

  • enum ของ Constant ถูกนำออกใน AIDL และกำหนดเป็น const int ใน IBroadcastRadio ในระหว่างนี้ ANTENNA_DISCONNECTED_TIMEOUT_MS ได้เปลี่ยนชื่อแล้ว ไปยัง ANTENNA_STATE_CHANGE_TIMEOUT_MS Const int TUNER_TIMEOUT_MS ใหม่คือ เพิ่ม แล้ว การดำเนินการปรับแต่ง การกรอ และขั้นตอนทั้งหมดจะต้องเสร็จสิ้นภายในเวลานี้
  • นำ Enum RDS และ Deemphasis ออกใน AIDL และกำหนดเป็น const int แล้ว ใน AmFmRegionConfig ที่สอดคล้องกัน ทั้ง fmDeemphasis และ fmRds ใน ProgramInfo ถูกประกาศว่าเป็น int ซึ่งเป็นผลลัพธ์การคำนวณบิตของ แฟล็กที่เกี่ยวข้อง ในระหว่างนี้ D50 และ D75 ได้เปลี่ยนชื่อเป็น DEEMPHASIS_D50 และ DEEMPHASIS_D75 ตามลำดับ
  • นำ Enum ProgramInfoFlags ออกใน AIDL และกำหนดเป็น const int ใน เพิ่ม ProgramInfo ที่มีคำนำหน้า FLAG_ แล้ว กล่าวคือ infoFlags ใน ProgramInfo ถูกประกาศว่าเป็น int ซึ่งเป็นผลลัพธ์การคำนวณบิต แฟล็ก TUNED ได้เปลี่ยนชื่อเป็น FLAG_TUNABLE เช่นกัน เพื่อให้อธิบายได้ดีขึ้น คำจำกัดความที่สถานีนั้นสามารถปรับได้
  • ใน AmFmBandRange scanSpacing จะเปลี่ยนชื่อเป็น seekSpacing เนื่องจาก scan เปลี่ยนชื่อเป็น seek ใน AIDL
  • เนื่องจากมีการใช้แนวคิดของ Union ใน AIDL, MetadataKey และ ไม่ได้ใช้ Metadata ที่กำหนดไว้ใน HIDL HAL อีกต่อไป สหภาพ AIDL Metadata ที่กำหนดไว้ใน AIDL HAL ค่า enum แต่ละค่าก่อนหน้านี้ใน MetadataKey เปลี่ยนเป็นช่องแล้วใน Metadata ที่มีประเภทของสตริงหรือ int ทั้งนี้ขึ้นอยู่กับคำนิยาม