ส่วนต่อไปนี้อธิบายวิธีทำงานกับเลเยอร์แอบสแตรกชันของฮาร์ดแวร์ (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 2.0 | สร้างได้ openSession(ITunerCallback callback) รายการ
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback 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 MBonProgramListUpdate
กำหนดให้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 intTUNER_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 อีกต่อไป สหภาพ AIDLMetadata
ที่กำหนดไว้ใน AIDL HAL ค่า enum แต่ละค่าก่อนหน้านี้ในMetadataKey
เปลี่ยนเป็นช่องแล้วในMetadata
ที่มีประเภทของสตริงหรือ int ทั้งนี้ขึ้นอยู่กับคำนิยาม