नीचे दिए गए सेक्शन में, हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल) के साथ काम करने का तरीका बताया गया है ब्रॉडकास्ट रेडियो लागू करें.
रेडियो एचएएल इंटरफ़ेस ब्रॉडकास्ट करें
ब्रॉडकास्ट रेडियो एचएएल, हार्डवेयर लेवल पर डेटा स्ट्रक्चर और इंटरफ़ेस को इस तरह उपलब्ध कराता है: AM/FM और DAB रेडियो जैसे ब्रॉडकास्ट रेडियो लागू करें.
HIDL 2.0 और AIDL इंटरफ़ेस
ब्रॉडकास्ट रेडियो एचएएल, इन सेक्शन में बताए गए इंटरफ़ेस इस्तेमाल करता है.
आइंडलिसनर
IAnnouncementListener
, सूचना को सुनने वाले व्यक्ति के लिए कॉलबैक इंटरफ़ेस है. यह
सूचनाएं पाने के लिए, ब्रॉडकास्ट रेडियो एचएएल पर रजिस्टर किया जा सकता है. इंटरफ़ेस में ये चीज़ें शामिल हैं
तरीका:
आइंडलिसनर | ||
---|---|---|
जानकारी: इसे तब कॉल किया जाता है, जब एलान की सूची में बदल दिया गया है. | ||
एचआईडीएल 2.0 | oneway onListUpdated(vec<Announcement> announcements) |
|
एआईडीएल | oneway void onListUpdated(in Announcement[] announcements) |
आईक्लोहैंडल
ICloseHandle
एक सामान्य क्लोज़ हैंडल है, जिससे कॉलबैक की ज़रूरत नहीं होती
ऐक्टिव इंटरफ़ेस.
आईक्लोहैंडल | ||
---|---|---|
जानकारी: हैंडल बंद करें. | ||
एचआईडीएल 2.0 | close() |
|
एआईडीएल | void close() |
आईटीयूनर कॉलबैक
ITunerCallback
एक कॉलबैक इंटरफ़ेस है, जिसे ब्रॉडकास्ट रेडियो एचएएल कॉल करता है
HAL क्लाइंट सेवा को अपडेट भेजें.
आईटीयूनर कॉलबैक | ||
---|---|---|
जानकारी: ट्यूनिंग ऑपरेशन के दौरान एचएएल से इसे कॉल किया जाता है (ट्यून करना, आगे-पीछे करना (एआईडीएल में) या स्कैन करना (एचआईडीएल में) और स्टेप पूरा करना, एसिंक्रोनस रूप से काम नहीं करता. | ||
एचआईडीएल 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
एआईडीएल | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
जानकारी: ट्यून, सीक (एआईडीएल में) या स्कैन करते समय कॉल किया जाता है (एचआईडीएल में) या चरण पूरा होता है. | ||
एचआईडीएल 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) |
|
एआईडीएल | void onTuneFailed(in Result result, in ProgramSelector selector) |
|
जानकारी: ट्यून, सीक (एआईडीएल में) या स्कैन करते समय कॉल किया जाता है (एचआईडीएल में) या चरण पूरा होता है. | ||
एचआईडीएल 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
एआईडीएल | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
जानकारी: इसे तब कॉल किया जाता है, जब प्रोग्राम की सूची अपडेट की जाती है; यह हर डेटा समूह का साइज़ 500 केबी तक होना चाहिए. | ||
एचआईडीएल 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
एआईडीएल | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
जानकारी: ऐंटीना के कनेक्ट होने पर कॉल किया जाता है या डिसकनेक्ट किया गया. | ||
एचआईडीएल 2.0 | oneway onAntennaStateChange(bool connected) |
|
एआईडीएल | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
जानकारी: इसे तब कॉल किया जाता है, जब वेंडर के किसी पैरामीटर से जुड़ी जानकारी मौजूद हो
मान HAL में आंतरिक रूप से अपडेट होते हैं (कॉल करने के बाद शुरू न करें
एचएएल क्लाइंट के हिसाब से setParameters ). |
||
एचआईडीएल 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) |
|
एआईडीएल | void onParametersUpdated(in VendorKeyValue[] parameters) |
|
जानकारी: एआईडीएल में नई सुविधा. यह तब कॉल किया जाता है, जब कॉन्फ़िगरेशन फ़्लैग यह होता है
HAL में आंतरिक रूप से अपडेट होता है (यह नहीं होना चाहिए
HAL क्लाइंट से setConfigFlag को कॉल करने के बाद शुरू किया गया). |
||
एचआईडीएल 2.0 | लागू नहीं. | |
एआईडीएल | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
ब्रॉडकास्ट रेडियो
IBroadcastRadio
, ब्रॉडकास्ट रेडियो HAL का मुख्य इंटरफ़ेस है. HIDL में
2.0 HAL, ट्यूनर के लिए ITunerSession
इंटरफ़ेस का इस्तेमाल करके, कार्रवाइयों को कॉल करें. हालांकि,
एक समय पर ज़्यादातर एक ट्यूनर चालू हो (बशर्ते हर ब्रॉडकास्ट रेडियो एचएएल इंस्टेंस में सिर्फ़ एक ट्यूनर हो
चिप) शामिल है.
ITunerSession
को एआईडीएल इंटरफ़ेस से हटा दिया गया है और इसके इंटरफ़ेस यहां ट्रांसफ़र कर दिए गए हैं
IBroadcastRadio
.
ब्रॉडकास्ट रेडियो | ||
---|---|---|
जानकारी: मॉड्यूल और उसकी जानकारी पाने के लिए सुविधाएं. | ||
एचआईडीएल 2.0 | getProperties() generates (Properties properties) |
|
एआईडीएल | Properties getProperties() |
|
जानकारी: इससे आपको मौजूदा या संभावित AM/FM की जानकारी मिलती है इलाके का कॉन्फ़िगरेशन. | ||
एचआईडीएल 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig
config) |
|
एआईडीएल | AmFmRegionConfig getAmFmRegionConfig(bool full) |
|
जानकारी: इस विकल्प से मौजूदा डीएबी क्षेत्र की जानकारी फ़ेच की जाती है कॉन्फ़िगरेशन. | ||
एचआईडीएल 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry>
config) |
|
एआईडीएल | DabTableEntry[] getDabRegionConfig() |
|
जानकारी: रेडियो मॉड्यूल की कैश मेमोरी से इमेज ली जाती है. एआईडीएल में, इमेज का साइज़ 1 एमबी से कम होना चाहिए बाइंडर ट्रांज़ैक्शन बफ़र की हार्ड लिमिट की वजह से. | ||
एचआईडीएल 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) |
|
एआईडीएल | byte[] getImage(in int id) |
|
जानकारी: यह सूचना लिसनर को रजिस्टर करता है. | ||
एचआईडीएल 2.0 | registerAnnouncementListener(vec<AnnouncementType>
enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle
closeHandle) |
|
एआईडीएल | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in
AnnouncementType[] enabled) |
|
जानकारी:
|
||
एचआईडीएल 2.0 | openSession(ITunerCallback callback) जनरेट करता है
(Result result, ITunerSession session) |
|
एआईडीएल | void setTunerCallback(in ITunerCallback callback) |
|
जानकारी:
|
||
एचआईडीएल 2.0 | close() |
|
एआईडीएल | unsetTunerCallback() |
|
जानकारी: किसी खास प्रोग्राम के हिसाब से बनाया गया है. | ||
एचआईडीएल 2.0 | tune(ProgramSelector program) generates (Result result) |
|
एआईडीएल | void tune(in ProgramSelector program) |
|
ब्यौरा:
एयर. एआईडीएल में भ्रम से बचने के लिए,
scan का नाम बदलकर seek कर दिया गया है.
|
||
एचआईडीएल 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) |
|
एआईडीएल | void seek(in boolean directionUp, in boolean skipSubChannel) |
|
ब्यौरा: मिलते-जुलते चैनल पर ले जाने वाले चरण. इनमें यह भी हो सकता है कि उसे किसी भी प्रोग्राम में शामिल नहीं किया जा सकता. | ||
एचआईडीएल 2.0 | step(bool directionUp) generates (Result result) |
|
एआईडीएल | void step(in boolean directionUp) |
|
जानकारी: इससे ट्यून नहीं किया जा सका, स्कैन (एचआईडीएल में) या सीक करने की सुविधा रद्द की जा सकती है (एआईडीएल में) या चरणों में होने वाली कार्रवाइयां इस्तेमाल की जा सकती हैं. | ||
एचआईडीएल 2.0 | cancel() |
|
एआईडीएल | void cancel() |
|
ब्यौरा: प्रोग्राम की सूची पर फ़िल्टर लागू करता है और
प्रोग्राम सूची के अपडेट को भेजना शुरू करता है
onProgramListUpdated कॉलबैक. |
||
एचआईडीएल 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) |
|
एआईडीएल | void startProgramListUpdates(in ProgramFilter filter) |
|
जानकारी: इससे प्रोग्राम की सूची के अपडेट भेजना बंद हो जाता है. | ||
एचआईडीएल 2.0 | stopProgramListUpdates() |
|
एआईडीएल | void stopProgramListUpdates() |
|
जानकारी: इससे किसी दी गई की मौजूदा सेटिंग को फ़ेच किया जाता है कॉन्फ़िगरेशन फ़्लैग. | ||
एचआईडीएल 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) |
|
एआईडीएल | boolean isConfigFlagSet(in ConfigFlag flag) |
|
जानकारी: यह दिए गए कॉन्फ़िगरेशन फ़्लैग को सेट करता है. | ||
एचआईडीएल 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) |
|
एआईडीएल | void setConfigFlag(in ConfigFlag flag, boolean value) |
|
जानकारी: वेंडर के हिसाब से पैरामीटर वैल्यू सेट करता है. | ||
एचआईडीएल 2.0 | setParameters(vec<VendorKeyValue> parameters)
जनरेट होता है, (vec<VendorKeyValue> results) |
|
एआईडीएल | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) |
|
जानकारी: वेंडर के हिसाब से पैरामीटर वैल्यू हासिल करता है. | ||
एचआईडीएल 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue>
parameters) |
|
एआईडीएल | VendorKeyValue[] getParameters(in String[] keys) |
इंटरफ़ेस के बारे में जानकारी
एसिंक्रोनस व्यवहार
हर ट्यूनिंग ऑपरेशन (उदाहरण के लिए, ट्यून करें, स्कैन (एचआईडीएल में) या सीक (एआईडीएल में) और चरण में इस प्रोसेस में काफ़ी समय लगता है और थ्रेड को लंबे समय के लिए ब्लॉक नहीं किया जाना चाहिए. इसलिए, इस प्रोसेस को बाद में होने वाली कार्रवाइयों को शेड्यूल करें और तुरंत कोई स्टेटस या नतीजा दें. विस्तार से, हर कार्रवाई के लिए:
- ट्यूनिंग से जुड़ी सभी लंबित कार्रवाइयां रद्द करें.
- देखें कि क्या ऑपरेशन, इनपुट के तरीके और स्थिति ट्यूनर.
- ट्यूनिंग टास्क शेड्यूल करें और फिर
Result
(HIDL में) दिखाएं याstatus
(एआईडीएल में) तुरंत ऐक्सेस करें. अगरResult
याstatus
,OK
पर सेट है, तो ट्यूनर कॉलबैक होगा ट्यूनिंग करते समय,tuneFailed
याcurrentProgramInfoChanged
को कॉल करना ज़रूरी है टास्क पूरा नहीं हो सका (उदाहरण के लिए, टाइम आउट की वजह से) या पूरा हो गया है.
इसी तरह, startProgramListUpdates
यह समय लेने वाले टास्क को भी शेड्यूल करता है
प्रोग्राम की सूची को अपडेट करना, ताकि वह बाद में किया जा सके और तुरंत कोई स्टेटस या नतीजा दिया जा सके. तरीका
पहले, अपडेट के उन अनुरोधों को रद्द करता है जिनकी मंज़ूरी बाकी है. इसके बाद, अपडेट करने के टास्क को शेड्यूल करके,
नतीजा.
रेस कंडीशन
ट्यूनिंग ऑपरेशन के एसिंक्रोनस व्यवहार की वजह से (उदाहरण के लिए, ट्यून, स्कैन (एचआईडीएल में) या सीक
(एआईडीएल में), और ट्यूनिंग रद्द करने के बीच एक रेस कंडिशन है
कार्रवाइयां. अगर एचएएल की ट्यूनिंग कार्रवाई पूरी होने के बाद और उससे पहले cancel
को कॉल किया जाता है
कॉलबैक पूरा हो जाता है, तो रद्द किए गए अनुरोध को अनदेखा किया जा सकता है. साथ ही, कॉलबैक पूरा होना चाहिए और रिसीव होना चाहिए
के पास किया जाता है.
इसी तरह, अगर एचएएल के प्रोग्राम पूरा होने के बाद stopProgramListUpdates
को कॉल किया जाता है
सूची को अपडेट करना और onCurrentProgramInfoChanged
कॉलबैक पूरा होने से पहले,
stopProgramListUpdates
को अनदेखा किया जा सकता है और कॉलबैक पूरा होना चाहिए.
डेटा साइज़ की सीमा
बाइंडर ट्रांज़ैक्शन बफ़र की हार्ड लिमिट है, इसलिए कुछ इंटरफ़ेस के लिए डेटा की सीमा संभावित रूप से बड़े साइज़ में डेटा पास करने के तरीकों के बारे में एआईडीएल एचएएल में साफ़ तौर पर जानकारी मिलती है.
getImage
फ़ंक्शन के लिए, इमेज का साइज़ 1 एमबी से कम होना चाहिए.onProgramListUpdate
के लिए ज़रूरी है कि हरchunk
500 केबी से कम हो. बड़ी प्रोग्राम सूचियों को एचएएल लागू करने की प्रक्रिया के ज़रिए अलग-अलग हिस्सों में बांटकर भेजा जाना चाहिए एक से ज़्यादा कॉलबैक होंगे.
एआईडीएल एचएएल के डेटा स्ट्रक्चर में बदलाव
इंटरफ़ेस में किए गए बदलावों के अलावा, ये बदलाव डेटा स्ट्रक्चर पर लागू किए गए हैं ब्रॉडकास्ट रेडियो एआईडीएल एचएएल में तय किए गए हैं. यह एआईडीएल का इस्तेमाल करता है.
- एआईडीएल में
Constant
enum को हटाया गया और इसे कॉनस्ट int के तौर पर परिभाषित किया गयाIBroadcastRadio
. इस दौरान,ANTENNA_DISCONNECTED_TIMEOUT_MS
का नाम बदल दिया गया हैANTENNA_STATE_CHANGE_TIMEOUT_MS
तक. नए कॉन्स्ट इन्टTUNER_TIMEOUT_MS
है जोड़ा गया. इस दौरान ट्यून करने, आगे बढ़ने, और कदमों से जुड़े सभी काम इस दौरान पूरे हो जाने चाहिए. - AIDL में Enum
RDS
औरDeemphasis
हटाए गए और उन्हें Const int के तौर पर परिभाषित किया गयाAmFmRegionConfig
में. साथ ही,fmDeemphasis
औरProgramInfo
मेंfmRds
को int के रूप में घोषित किया गया, जो कि बिट कंप्यूटेशन का नतीजा है फ़्लैग कर सकते हैं. इस दौरान,D50
औरD75
का नाम बदलकर यह कर दिया गया हैDEEMPHASIS_D50
औरDEEMPHASIS_D75
. - Enum
ProgramInfoFlags
को AIDL से हटाया गया और उसे Const int के तौर पर परिभाषित किया गयाProgramInfo
में प्रीफ़िक्सFLAG_
जोड़ा गया. साथ ही,ProgramInfo
मेंinfoFlags
को int के तौर पर एलान किया गया, जो कि बिट कंप्यूटेशन का नतीजा है फ़्लैग किया गया है. बेहतर तरीके से जानकारी देने के लिए,TUNED
का नाम बदलकरFLAG_TUNABLE
भी कर दिया गया है इसकी परिभाषा कि स्टेशन को ट्यून किया जा सकता है. AmFmBandRange
में,scanSpacing
का नाम बदलकर यह कर दिया गया हैseekSpacing
. इसलिए, एआईडीएल मेंscan
का नाम बदलकरseek
कर दिया गया है.- यूनियन का कॉन्सेप्ट एआईडीएल,
MetadataKey
और HIDL HAL में बताए गएMetadata
का इस्तेमाल अब नहीं किया जाता. एआईडीएल यूनियनMetadata
की परिभाषा एआईडीएल एचएएल में दी गई है. पहलेMetadataKey
में मौजूद हर ईनम वैल्यू, अब इसमें एक फ़ील्ड होगीMetadata
की डेफ़िनिशन के आधार पर, स्ट्रिंग या पूर्णांक के टाइप के साथ.