रेडियो एचएएल ब्रॉडकास्ट करें

नीचे दिए गए सेक्शन में, हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल) के साथ काम करने का तरीका बताया गया है ब्रॉडकास्ट रेडियो लागू करें.

रेडियो एचएएल इंटरफ़ेस ब्रॉडकास्ट करें

ब्रॉडकास्ट रेडियो एचएएल, हार्डवेयर लेवल पर डेटा स्ट्रक्चर और इंटरफ़ेस को इस तरह उपलब्ध कराता है: 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)
जानकारी:
  • HIDL HAL: नया ट्यूनर सेशन खोलने पर, पुराना सेशन खत्म होना चाहिए.
  • एआईडीएल एचएएल: ट्यूनर सेशन उपलब्ध नहीं है. इसलिए, सिर्फ़ ट्यूनर कॉलबैक सेट करना ज़रूरी है. अगर यह मौजूद है, तो पुराने कॉलबैक को सेट नहीं किया जाना चाहिए.
एचआईडीएल 2.0 openSession(ITunerCallback callback) जनरेट करता है (Result result, ITunerSession session)
एआईडीएल void setTunerCallback(in ITunerCallback callback)
जानकारी:
  • HIDL HAL: ट्यूनर सेशन को बंद करने का समय पूरा होना चाहिए. साथ ही, इसे सिर्फ़ एक बार जारी किया जाना चाहिए.
  • एआईडीएल एचएएल: कोई ट्यूनर नहीं है और सिर्फ़ ट्यूनर कॉलबैक को अनसेट किया जाना चाहिए.
एचआईडीएल 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 की डेफ़िनिशन के आधार पर, स्ट्रिंग या पूर्णांक के टाइप के साथ.