সম্প্রচার রেডিও HAL

সম্প্রচার রেডিও বাস্তবায়নের জন্য হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) এর সাথে কীভাবে কাজ করতে হয় তা নিম্নলিখিত বিভাগগুলি বর্ণনা করে।

ব্রডকাস্ট রেডিও HAL ইন্টারফেস

ব্রডকাস্ট রেডিও HAL সম্প্রচার রেডিও যেমন AM/FM এবং DAB রেডিও বাস্তবায়নের জন্য হার্ডওয়্যার স্তরে ডেটা স্ট্রাকচার এবং ইন্টারফেস প্রদান করে।

HIDL 2.0 এবং AIDL ইন্টারফেস

সম্প্রচার রেডিও HAL নিম্নলিখিত বিভাগে বর্ণিত ইন্টারফেস ব্যবহার করে।

আইএ ঘোষণা শ্রোতা

IAnnouncementListener হল ঘোষণা শ্রোতার জন্য একটি কলব্যাক ইন্টারফেস, যা ঘোষণা গ্রহণের জন্য সম্প্রচারিত রেডিও HAL-এ নিবন্ধিত হতে পারে। ইন্টারফেসের নিম্নলিখিত পদ্ধতি রয়েছে:

আইএ ঘোষণা শ্রোতা
বর্ণনা: যখনই ঘোষণার তালিকা পরিবর্তিত হয় তখন কল করা হয়।
HIDL 2.0 oneway onListUpdated(vec<Announcement> announcements)
এআইডিএল oneway void onListUpdated(in Announcement[] announcements)

আইক্লোজহ্যান্ডেল

ICloseHandle হল একটি সাধারণ ক্লোজ হ্যান্ডেল যা একটি কলব্যাক অপসারণ করে যার জন্য একটি সক্রিয় ইন্টারফেসের প্রয়োজন নেই৷

আইক্লোজহ্যান্ডেল
বর্ণনা: হ্যান্ডেল বন্ধ করুন।
HIDL 2.0 close()
এআইডিএল void close()

আইটিউনার কলব্যাক

ITunerCallback হল একটি কলব্যাক ইন্টারফেস যা ব্রডকাস্ট রেডিও HAL দ্বারা HAL ক্লায়েন্ট পরিষেবায় আপডেট পাঠানোর জন্য ডাকা হয়।

আইটিউনার কলব্যাক
বর্ণনা: যখন একটি টিউনিং অপারেশন (টিউন, সিক (এআইডিএল) বা স্ক্যান (এইচআইডিএল-এ) এবং পদক্ষেপ সফল হয় তখন অ্যাসিঙ্ক্রোনাসভাবে ব্যর্থ হলে HAL দ্বারা ডাকা হয়।
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
এআইডিএল void onCurrentProgramInfoChanged(in ProgramInfo info)
বর্ণনা: টিউন, সিক (এআইডিএল-এ) বা স্ক্যান (এইচআইডিএল-এ) বা পদক্ষেপ সফল হলে বলা হয়।
HIDL 2.0 oneway onTuneFailed(Result result, ProgramSelector selector)
এআইডিএল void onTuneFailed(in Result result, in ProgramSelector selector)
বর্ণনা: টিউন, সিক (এআইডিএল-এ) বা স্ক্যান (এইচআইডিএল-এ) বা পদক্ষেপ সফল হলে বলা হয়।
HIDL 2.0 oneway onCurrentProgramInfoChanged(ProgramInfo info)
এআইডিএল void onCurrentProgramInfoChanged(in ProgramInfo info)
বর্ণনা: প্রোগ্রাম তালিকা আপডেট করা হলে কল করা হয়; প্রতিটি খণ্ডের আকার 500kiB এ সীমাবদ্ধ হওয়া উচিত।
HIDL 2.0 oneway onProgramListUpdated(ProgramListChunk chunk)
এআইডিএল oneway onProgramListUpdated(ProgramListChunk chunk)
বর্ণনা: অ্যান্টেনা সংযুক্ত বা সংযোগ বিচ্ছিন্ন হলে কল করা হয়।
HIDL 2.0 oneway onAntennaStateChange(bool connected)
এআইডিএল void onCurrentProgramInfoChanged(in ProgramInfo info)
বর্ণনা: যখন বিক্রেতা-নির্দিষ্ট প্যারামিটার মানগুলি HAL-এ অভ্যন্তরীণভাবে আপডেট করা হয় তখন কল করা হয় (HAL ক্লায়েন্ট দ্বারা setParameters কল করার পরে আহ্বান করবেন না)।
HIDL 2.0 oneway onParametersUpdated(vec<VendorKeyValue> parameters)
এআইডিএল void onParametersUpdated(in VendorKeyValue[] parameters)
বর্ণনা: এআইডিএল-এ নতুন। HAL-এ অভ্যন্তরীণভাবে কনফিগারেশন ফ্ল্যাগ আপডেট করা হলে কল করা হয় (HAL ক্লায়েন্ট দ্বারা setConfigFlag কল করার পরে আহ্বান করা উচিত নয়)।
HIDL 2.0 প্রযোজ্য নয়।
এআইডিএল void onConfigFlagUpdated(in ConfigFlag flag, in boolean value)

আইব্রডকাস্ট রেডিও

IBroadcastRadio হল ব্রডকাস্ট রেডিও HAL-এর প্রাথমিক ইন্টারফেস। HIDL 2.0 HAL-এ, টিউনারকে কল অপারেশন করতে ITunerSession ইন্টারফেস ব্যবহার করুন। যাইহোক, এক সময়ে সর্বাধিক একটি টিউনার সক্রিয় থাকে (প্রদত্ত প্রতিটি ব্রডকাস্ট রেডিও HAL উদাহরণে শুধুমাত্র একটি টিউনার চিপ থাকে)। ITunerSession AIDL ইন্টারফেস থেকে সরানো হয়েছে এবং এর ইন্টারফেসগুলি IBroadcastRadio এ সরানো হয়েছে।

আইব্রডকাস্ট রেডিও
বর্ণনা: একটি মডিউল এবং এর ক্ষমতার বিবরণ পান।
HIDL 2.0 getProperties() generates (Properties properties)
এআইডিএল Properties getProperties()
বর্ণনা: বর্তমান বা সম্ভাব্য AM/FM অঞ্চল কনফিগারেশন নিয়ে আসে।
HIDL 2.0 getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config)
এআইডিএল AmFmRegionConfig getAmFmRegionConfig(bool full)
বর্ণনা: বর্তমান DAB অঞ্চল কনফিগারেশন নিয়ে আসে।
HIDL 2.0 getDabRegionConfig() generates (Result result, vec<DabTableEntry> config)
এআইডিএল DabTableEntry[] getDabRegionConfig()
বর্ণনা: রেডিও মডিউল ক্যাশে থেকে একটি চিত্র পায়। AIDL-এ, বাইন্ডার লেনদেন বাফারের একটি হার্ড সীমার কারণে ছবির আকার অবশ্যই 1MB এর কম হতে হবে।
HIDL 2.0 getImage(uint32_t id) generates (vec<uint8_t> image)
এআইডিএল byte[] getImage(in int id)
বর্ণনা: ঘোষণা শ্রোতা নিবন্ধন.
HIDL 2.0 registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle)
এআইডিএল ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled)
বর্ণনা:
  • HIDL HAL: যখন একটি নতুন টিউনার সেশন খোলা হয়, তখন পুরানো সেশনটি অবশ্যই বন্ধ করতে হবে।
  • AIDL HAL: যেহেতু কোনো টিউনার সেশন উপলব্ধ নেই, শুধুমাত্র টিউনার কলব্যাক সেট করতে হবে। এটি বিদ্যমান থাকলে, পুরানো কলব্যাকটি আনসেট করা উচিত৷
HIDL 2.0 openSession(ITunerCallback callback) জেনারেট করে (Result result, ITunerSession session)
এআইডিএল void setTunerCallback(in ITunerCallback callback)
বর্ণনা:
  • HIDL HAL: একটি টিউনার সেশন বন্ধ করা অবশ্যই ব্যর্থ হবে না এবং শুধুমাত্র একবার জারি করতে হবে।
  • AIDL HAL: কোন টিউনার নেই এবং শুধুমাত্র টিউনার কলব্যাক আনসেট করতে হবে।
HIDL 2.0 close()
এআইডিএল unsetTunerCallback()
বর্ণনা: একটি নির্দিষ্ট প্রোগ্রাম টিউন.
HIDL 2.0 tune(ProgramSelector program) generates (Result result)
এআইডিএল void tune(in ProgramSelector program)
বর্ণনা: বাতাসে পরবর্তী বৈধ প্রোগ্রাম চায়। এআইডিএল-এ বিভ্রান্তি এড়াতে, scan নাম পরিবর্তন করে seek করা হয়েছে।
HIDL 2.0 scan(bool directionUp, bool skipSubChannel) generates (Result result)
এআইডিএল void seek(in boolean directionUp, in boolean skipSubChannel)
বর্ণনা: পার্শ্ববর্তী চ্যানেলের ধাপ, যা কোনো প্রোগ্রাম দ্বারা দখল করা যাবে না।
HIDL 2.0 step(bool directionUp) generates (Result result)
এআইডিএল void step(in boolean directionUp)
বর্ণনা: মুলতুবি থাকা টিউন, স্ক্যান (এইচআইডিএল-এ) বা সন্ধান (এআইডিএল-এ) বা ধাপ অপারেশন বাতিল করে।
HIDL 2.0 cancel()
এআইডিএল void cancel()
বর্ণনা: প্রোগ্রাম তালিকায় একটি ফিল্টার প্রয়োগ করে এবং onProgramListUpdated কলব্যাকের মাধ্যমে প্রোগ্রাম তালিকা আপডেট পাঠানো শুরু করে।
HIDL 2.0 startProgramListUpdates(ProgramFilter filter) generates (Result result)
এআইডিএল void startProgramListUpdates(in ProgramFilter filter)
বর্ণনা: প্রোগ্রাম তালিকা আপডেট পাঠানো বন্ধ করে.
HIDL 2.0 stopProgramListUpdates()
এআইডিএল void stopProgramListUpdates()
বর্ণনা: একটি প্রদত্ত কনফিগারেশন পতাকার বর্তমান সেটিং নিয়ে আসে।
HIDL 2.0 isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value)
এআইডিএল boolean isConfigFlagSet(in ConfigFlag flag)
বর্ণনা: প্রদত্ত কনফিগারেশন পতাকা সেট করে।
HIDL 2.0 setConfigFlag(ConfigFlag flag, bool value) generates (Result result)
এআইডিএল void setConfigFlag(in ConfigFlag flag, boolean value)
বর্ণনা: বিক্রেতা-নির্দিষ্ট প্যারামিটার মান সেট করে।
HIDL 2.0 setParameters(vec<VendorKeyValue> parameters)

উৎপন্ন করে ,

(vec<VendorKeyValue> results)
এআইডিএল VendorKeyValue[] setParameters(in VendorKeyValue[] parameters)
বর্ণনা: বিক্রেতা-নির্দিষ্ট পরামিতি মান পুনরুদ্ধার করে।
HIDL 2.0 getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters)
এআইডিএল VendorKeyValue[] getParameters(in String[] keys)

ইন্টারফেস স্পষ্টীকরণ

অ্যাসিঙ্ক্রোনাস আচরণ

যেহেতু প্রতিটি টিউনিং অপারেশন (উদাহরণস্বরূপ, টিউন, স্ক্যান (এইচআইডিএল-এ) বা অনুসন্ধান (এআইডিএল-এ) এবং পদক্ষেপগুলি সময়সাপেক্ষ হতে পারে এবং থ্রেডটি দীর্ঘ সময়ের জন্য অবরুদ্ধ করা উচিত নয়, অপারেশনটি সময়-সাপেক্ষ ক্রিয়াকলাপগুলি নির্ধারণ করা উচিত। পরে ঘটতে এবং দ্রুত একটি স্থিতি বা ফলাফল ফেরত দিতে। বিস্তারিতভাবে, প্রতিটি অপারেশন করা উচিত:

  • সমস্ত মুলতুবি টিউনিং অপারেশন বাতিল করুন।
  • পদ্ধতি ইনপুট এবং টিউনার অবস্থার উপর ভিত্তি করে অপারেশন প্রক্রিয়া করা যেতে পারে কিনা তা পরীক্ষা করুন।
  • টিউনিং টাস্ক শিডিউল করুন এবং তারপর Result (এইচআইডিএল-এ) বা status (এআইডিএল-এ) অবিলম্বে ফেরত দিন। Result বা status OK থাকলে, টিউনিং টাস্ক ব্যর্থ হলে (উদাহরণস্বরূপ, টাইমআউটের কারণে) বা সম্পূর্ণ হলে টিউনার কলব্যাক tuneFailed বা currentProgramInfoChanged কল করতে হবে।

একইভাবে, startProgramListUpdates পরবর্তীতে অনুষ্ঠানের তালিকা আপডেট করার এবং দ্রুত একটি স্ট্যাটাস বা ফলাফল ফেরত দেওয়ার জন্য সময়সাপেক্ষ কাজ নির্ধারণ করে। পদ্ধতিটি প্রথমে মুলতুবি থাকা আপডেটের অনুরোধগুলি বাতিল করে এবং তারপরে আপডেট করার কাজটি নির্ধারণ করে এবং দ্রুত ফলাফল প্রদান করে।

জাতি শর্ত

টিউনিং অপারেশনগুলির অসিঙ্ক্রোনাস আচরণের কারণে (উদাহরণস্বরূপ, টিউন, স্ক্যান (এইচআইডিএল-এ) বা সন্ধান (এআইডিএল-এ) এবং ধাপে, অপারেশন বাতিল করা এবং টিউনিং অপারেশনগুলির মধ্যে একটি রেস শর্ত বিদ্যমান। এইচএএল একটি টিউনিং অপারেশন সম্পূর্ণ করার পরে এবং কলব্যাক সম্পূর্ণ হওয়ার আগে যদি cancel কল করা হয়, তবে বাতিলটি উপেক্ষা করা যেতে পারে এবং কলব্যাকটি সম্পূর্ণ হওয়া উচিত এবং এইচএএল ক্লায়েন্ট দ্বারা গ্রহণ করা উচিত।

একইভাবে, HAL একটি প্রোগ্রাম তালিকা আপডেট সম্পূর্ণ করার পরে এবং onCurrentProgramInfoChanged কলব্যাক সম্পূর্ণ হওয়ার আগে যদি stopProgramListUpdates কল করা হয়, তাহলে stopProgramListUpdates উপেক্ষা করা যেতে পারে এবং কলব্যাক সম্পূর্ণ হওয়া উচিত।

ডেটা আকারের সীমা

যেহেতু বাইন্ডার লেনদেনের বাফারে একটি কঠিন সীমা রয়েছে, তাই সম্ভাব্য বড় আকারের ডেটা পাস করার কিছু ইন্টারফেস পদ্ধতির ডেটা সীমা AIDL HAL-এ স্পষ্ট করা হয়েছে।

  • getImage জন্য 1 MB-এর কম ছবি ফেরত দিতে হবে।
  • onProgramListUpdate জন্য প্রতিটি chunk 500kiB-এর কম হতে হবে। HAL বাস্তবায়নের মাধ্যমে বৃহত্তর প্রোগ্রাম তালিকাকে একাধিক খণ্ডে বিভক্ত করতে হবে এবং একাধিক কলব্যাকের মাধ্যমে পাঠানো হবে।

AIDL HAL ডেটা স্ট্রাকচারে পরিবর্তন

ইন্টারফেসের পরিবর্তন ছাড়াও, এই পরিবর্তনগুলি ব্রডকাস্ট রেডিও AIDL HAL-তে সংজ্ঞায়িত ডেটা স্ট্রাকচারে প্রয়োগ করা হয়েছে, যা AIDL-এর সুবিধা নেয়।

  • AIDL-এ Constant enum সরানো হয় এবং IBroadcastRadio তে const int হিসাবে সংজ্ঞায়িত করা হয়। ইতিমধ্যে, ANTENNA_DISCONNECTED_TIMEOUT_MS নাম পরিবর্তন করে ANTENNA_STATE_CHANGE_TIMEOUT_MS করা হয়েছে। TUNER_TIMEOUT_MS int একটি নতুন const যোগ করা হয়েছে৷ এই সময়ের মধ্যে সমস্ত সুর, সন্ধান এবং পদক্ষেপের ক্রিয়াকলাপ সম্পূর্ণ করতে হবে।
  • Enum RDS এবং Deemphasis AIDL-এ সরানো হয়েছে এবং AmFmRegionConfig এ const int হিসাবে সংজ্ঞায়িত করা হয়েছে। তদনুসারে, ProgramInfo তে fmDeemphasis এবং fmRds উভয়কেই int হিসাবে ঘোষণা করা হয়েছে, সংশ্লিষ্ট ফ্ল্যাগের একটি বিট গণনা ফলাফল। ইতিমধ্যে, D50 এবং D75 নাম পরিবর্তন করে যথাক্রমে DEEMPHASIS_D50 এবং DEEMPHASIS_D75 রাখা হয়েছে।
  • Enum ProgramInfoFlags AIDL-এ সরানো হয় এবং ProgramInfoFLAG_ উপসর্গ যুক্ত করে const int হিসাবে সংজ্ঞায়িত করা হয়। তদনুসারে, ProgramInfoinfoFlags int হিসাবে ঘোষণা করা হয়, পতাকাগুলির একটি বিট গণনা ফলাফল। TUNED নাম পরিবর্তন করে FLAG_TUNABLE করা হয়েছে, যাতে স্টেশনটি টিউন করা যেতে পারে তার সংজ্ঞাটি আরও ভালভাবে বর্ণনা করতে।
  • AmFmBandRange এ, scanSpacing নাম পরিবর্তন করে seekSpacing করা হয়েছে, যেহেতু scan নাম পরিবর্তন করে এআইডিএল-এ seek হয়েছে।
  • যেহেতু AIDL-এ ইউনিয়নের ধারণাটি চালু করা হয়েছে, তাই HIDL HAL-এ সংজ্ঞায়িত MetadataKey এবং Metadata আর ব্যবহার করা হয় না। একটি এআইডিএল ইউনিয়ন Metadata এআইডিএল এইচএএল-এ সংজ্ঞায়িত করা হয়েছে। পূর্বে MetadataKey এ থাকা প্রতিটি enum মান এখন Metadata একটি ক্ষেত্র যার সংজ্ঞার উপর নির্ভর করে স্ট্রিং বা int-এর ধরন রয়েছে।