ওয়াই-ফাই HAL

ওয়াই-ফাই ফ্রেমওয়ার্কে তিনটি ওয়াই-ফাই HAL সারফেস আছে যেগুলি তিনটি আলাদা ইন্টারফেসের মাধ্যমে দেখানো হয়। Android 14 বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসের জন্য, তিনটি ইন্টারফেসই স্টেবল Android ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (AIDL) প্যাকেজ হিসেবে উপলভ্য। এইসব ইন্টারফেস আগে হার্ডওয়্যার ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (HIDL) ব্যবহার করে সংজ্ঞায়িত করা হয়েছে।

  • ভেন্ডর HAL: Android-নির্দিষ্ট কমান্ডের জন্য HAL সারফেস। AIDL ফাইলগুলি hardware/interfaces/wifi/aidl-এ আছে।
  • অনুরোধকারী HAL: wpa_supplicant-এর জন্য HAL সারফেস। AIDL ফাইলগুলি hardware/interfaces/wifi/supplicant/aidl-এ আছে।
  • Hostapd HAL: hostapd-এর জন্য একটি HAL সারফেস। AIDL ফাইলগুলি hardware/interfaces/wifi/hostapd/aidl-এ আছে।

ভেন্ডর HAL

ভেন্ডর HAL, Android-নির্দিষ্ট কমান্ড প্রদান করে। ইনফ্রাস্ট্রাকচার স্টেশন (STA) এবং সফট AP (SAP) মোড কাজ করার জন্য এটি ঐচ্ছিক (প্রয়োজন নেই)। তবে, Wi-Fi Aware এবং Wi-Fi RTT পরিষেবার জন্য এটি বাধ্যতামূলক।

Android 14 ও তার পরবর্তী যেকোনও ভার্সনে, AIDL ব্যবহার করে ভেন্ডর HAL ইন্টারফেসকে সংজ্ঞায়িত করা হয়। Android 13 এবং এর আগের যেকোনও ভার্সনে, HIDL ব্যবহার করে ভেন্ডর HAL ইন্টারফেসকে সংজ্ঞায়িত করা হয়।

প্রি-HIDL (অর্থাৎ, Android 8.0-এর আগে), Android লেগ্যাসি HAL নামক একটি HAL মেকানিজম ব্যবহার করত। Android সোর্স কোড AIDL বা HIDL-এর একটি ডিফল্ট প্রয়োগ প্রদান করে। এই ইমপ্লিমেন্টেশন, লেগ্যাসি HAL-এর উপরে রান করা একটি শিম ব্যবহার করে।

পুরনো HAL হেডার hardware/libhardware_legacy/include/hardware_legacy/-এ রয়েছে। পুরনো HAL ভিত্তিক ইমপ্লিমেন্টেশন AIDL-এর জন্য hardware/interfaces/wifi/aidl/default-এ এবং HIDL-এর জন্য hardware/interfaces/wifi/1.x/default-এ অবস্থিত।

Supplicant HAL

Supplicant HAL, wpa_supplicant ডেমনকে ইন্টারফেস প্রদান করে। Android 13 থেকে শুরু করে, ইন্টারফেসটি HAL সংজ্ঞা দেওয়ার জন্য AIDL ব্যবহার করে। Android 13-এর আগের রিলিজের জন্য, ইন্টারফেস এবং ভেন্ডর পার্টিশন HIDL ব্যবহার করে।

wpa_supplicant সোর্স কোডটি external/wpa_supplicant_8/wpa_supplicant-এ আছে। রেফারেন্স ইমপ্লিমেন্টেশন একটি AIDL ইন্টারফেস প্রদান করে, যা aidl সাব-ডিরেক্টরিতে ইমপ্লিমেন্ট করা হয়।

Hostapd HAL

Hostapd HAL, hostapd ডেমনকে ইন্টারফেস প্রদান করে। Android 13 থেকে শুরু করে, ইন্টারফেসটি HAL সংজ্ঞা দেওয়ার জন্য AIDL ব্যবহার করে। Android 13-এর আগের রিলিজের জন্য, ইন্টারফেস ও ভেন্ডর পার্টিশন HIDL ব্যবহার করে।

hostapd সোর্স কোড external/wpa_supplicant_8/hostapd-এ আছে। রেফারেন্স ইমপ্লিমেন্টেশন একটি AIDL ইন্টারফেস প্রদান করে, যা aidl সাব-ডিরেক্টরিতে ইমপ্লিমেন্ট করা হয়।

ওয়াই-ফাই মাল্টি-ইন্টারফেস কনকারেন্সি

বিভিন্ন Android ডিভাইস একই সাথে বিভিন্ন ওয়াই-ফাই ইন্টারফেসের কম্বিনেশন সাপোর্ট করতে পারে। HAL-এ কাজ করে এমন কম্বিনেশনগুলি সংজ্ঞায়িত করা হয় এবং ফ্রেমওয়ার্কের কাছে প্রকাশ করা হয়। স্পেসিফিকেশন ফর্ম্যাট hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl-এ AIDL Wi-Fi HAL-এর জন্য, android/hardware/interfaces/wifi/1.6/IWifiChip.hal-এ Wi-Fi HAL 1.6-এর জন্য এবং android/hardware/interfaces/wifi/1.0/IWifiChip.hal-এ Wi-Fi HAL 1.5 ও তার নিচের ভার্সনের জন্য সংজ্ঞায়িত করা হয়েছে।

Android 14 ও তার পরের যেকোনও ভার্সনের জন্য উপলভ্য AIDL HAL এবং Android 13-এ উপলভ্য Wi-Fi HAL ভার্সন 1.6 একটি স্পষ্ট কম্বিনেশন আইটেম হিসেবে ব্রিজ করা AP ইন্টারফেস (ডুয়াল ব্যান্ড একই সাথে) নির্দিষ্ট করার ক্ষমতা যোগ করে।

কনকারেন্সি স্পেসিফিকেশন ফর্ম্যাটটি নমনীয় এবং জেনেরিক; এটি এমন কম্বিনেশন প্রকাশ করতে পারে যা এখনও ফ্রেমওয়ার্ক দ্বারা সমর্থিত নয়। নির্দিষ্ট কম্বিনেশন কনফিগার করতে, WIFI_HAL_INTERFACE_COMBINATIONS বিল্ড ফ্ল্যাগ ব্যবহার করুন। এই পতাকাটি device/<oem>/<device>/BoardConfig-common.mk-এ অবস্থিত।

যেমন, কোনও ডিভাইস দুটি STA এবং NAN (Wi-Fi Aware) অথবা P2P (Wi-Fi Direct) ধরনের (কিন্তু দুটিই নয়) একটি ইন্টারফেস সাপোর্ট করতে পারে। এটি device/<oem>/<device>/BoardConfig-common.mk-এ এইভাবে প্রকাশ করা হয়:

WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 2}, {{NAN, P2P}, 1}}

আরেকটি উদাহরণ হল এমন একটি ডিভাইস যা একটি AP সহ STA বা অন্য কোনও ইন্টারফেস ছাড়াই একটি ব্রিজ করা AP (ডুয়াল ব্যান্ড একই সাথে) সাপোর্ট করে। এটি এইভাবে দেখানো হয়:

WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}

এছাড়াও, রেফারেন্স HAL-এ একাধিক কম্বিনেশনের জন্য কনফিগারেশন আছে যেগুলি (লেগ্যাসি) বিল্ড ফ্ল্যাগ দিয়ে অ্যাক্টিভেট করা যায়। কনফিগারেশন নির্দেশাবলীর জন্য, এগুলি দেখুন: