AOSP আল্ট্রা-ওয়াইডব্যান্ড (UWB) স্ট্যাকটি HAL সারফেস হিসেবে FiRa-দ্বারা সংজ্ঞায়িত UCI ইন্টারফেস ব্যবহার করে। HAL ইন্টারফেসটি UWB কমান্ড ইন্টারফেস (UCI) কমান্ড, প্রতিক্রিয়া এবং নোটিফিকেশন পাঠানো ও গ্রহণ করার জন্য একটি অপেক পাইপ ( IUwbChip::sendUciMessage() এবং IUwbClientCallback::onUciMessage() ) ব্যবহার করে। সমস্ত অ্যান্ড্রয়েড UWB ভেন্ডরকে অবশ্যই FiRa স্পেসিফিকেশনে সংজ্ঞায়িত সমস্ত মেসেজ সমর্থন করতে হবে। UWB ফ্রেমওয়ার্কটি ব্যাকওয়ার্ড কম্প্যাটিবল এবং ডিভাইসে UWB ভেন্ডর দ্বারা ইমপ্লিমেন্টেড যেকোনো UCI সংস্করণের সাথে কাজ করে। যেহেতু AOSP UWB ফ্রেমওয়ার্কটি একটি মডিউল , তাই এটি প্রধান FiRa স্ট্যান্ডার্ড রিলিজের জন্য নির্ধারিত ড্রাফট UCI স্পেসিফিকেশন থেকে অনুমোদিত চেঞ্জ রিকোয়েস্ট (CRs)-এর জন্য বেছে বেছে সাপোর্ট যোগ করতে পারে। ইমপ্লিমেন্টেড এই ধরনের যেকোনো ড্রাফট CR পরিবর্তন সাপেক্ষ।
ইন্টারফেস সংজ্ঞা
UWB HAL ইন্টারফেসটি স্টেবল AIDL ব্যবহার করে সংজ্ঞায়িত করা হয়েছে। প্রধান ইন্টারফেসটি android.hardware.uwb প্যাকেজ ব্যবহার করে।
android.hardware.uwb প্যাকেজের দুটি প্রধান ইন্টারফেস নিচে দেওয়া হলো।
IUwbChip.aidl
package android.hardware.uwb;
interface IUwbChip {
String getName();
void open(in android.hardware.uwb.IUwbClientCallback clientCallback);
void close();
void coreInit();
void sessionInit(int sessionId);
int getSupportedAndroidUciVersion();
int sendUciMessage(in byte[] data);
}
IUwbClientCallback.aidl
package android.hardware.uwb;
interface IUwbClientCallback {
oneway void onUciMessage(in byte[] data);
oneway void onHalEvent(in android.hardware.uwb.UwbEvent event, in android.hardware.uwb.UwbStatus status);
}
UWB ফ্রেমওয়ার্ক থেকে HAL কল প্রবাহ
নিম্নলিখিত চিত্রগুলি UWB ফ্রেমওয়ার্ক থেকে UWB স্ট্যাক ইনিশিয়ালাইজেশন, UWB স্ট্যাক ডিইনিশিয়ালাইজেশন, এবং UWB সেশন শুরু ও বন্ধ করার প্রক্রিয়াগুলির কল ফ্লো তুলে ধরে।

চিত্র ১. UWB স্ট্যাক প্রারম্ভিককরণ কল প্রবাহ (UWB টগল অন)

চিত্র ২. UWB স্ট্যাক ডিইনিশিয়ালাইজেশন কল ফ্লো (UWB টগল অফ)

চিত্র ৩. ইউডব্লিউবি সেশন শুরু/বন্ধ প্রবাহ
UWB দেশের কোড কনফিগারেশন
চিত্র ১-এ যেমন দেখানো হয়েছে, UWB ফ্রেমওয়ার্ক UWB স্ট্যাক ইনিশিয়ালাইজেশনের সময় ভেন্ডর-স্পেস UCI কমান্ড ANDROID_SET_COUNTRY_CODE (GID= 0xC , OID= 0x1 ) ব্যবহার করে UWB কান্ট্রি কোড কনফিগার করে। UWB ফ্রেমওয়ার্ক নিম্নলিখিত উৎসগুলো (অগ্রাধিকার ক্রমে তালিকাভুক্ত) ব্যবহার করে UWB কান্ট্রি কোড নির্ধারণ করার চেষ্টা করে। যে প্রথম উৎস থেকে কান্ট্রি কোডটি নির্ধারিত হয়, UWB ফ্রেমওয়ার্ক সেখানেই থেমে যায়।
- কান্ট্রি কোড ওভাররাইড: adb শেল কমান্ডের মাধ্যমে কান্ট্রি কোড প্রয়োগ করা (লোকাল বা অটোমেটেড টেস্টিং)।
- টেলিফোনি কান্ট্রি কোড: সেলুলারের মাধ্যমে প্রাপ্ত কান্ট্রি কোড। যদি একাধিক সিম থেকে ভিন্ন ভিন্ন কোড আসে, তবে নির্বাচিত কান্ট্রি কোডটি অনির্দিষ্ট থাকে।
- ওয়াই-ফাই কান্ট্রি কোড: ওয়াই-ফাই (80211.ad) এর মাধ্যমে প্রাপ্ত কান্ট্রি কোড।
- সর্বশেষ জ্ঞাত টেলিফোনি কান্ট্রি কোড: সেলুলারের মাধ্যমে প্রাপ্ত সর্বশেষ জ্ঞাত কান্ট্রি কোড। যদি একাধিক সিম থেকে ভিন্ন ভিন্ন কোড আসে, তবে নির্বাচিত কান্ট্রি কোডটি অনির্দিষ্ট থাকে।
- অবস্থানের দেশের কোড:
LocationManagerফিউজড লোকেশন প্রোভাইডার থেকে প্রাপ্ত দেশের কোড। - OEM ডিফল্ট কান্ট্রি কোড: ডিভাইস প্রস্তুতকারক কর্তৃক নির্ধারিত কান্ট্রি কোড।
যদি UWB ফ্রেমওয়ার্ক একটি UWB কান্ট্রি কোড নির্ধারণ করতে না পারে, তবে এটি DEFAULT_COUNTRY_CODE ("00") মান সহ ANDROID_SET_COUNTRY_CODE UCI কমান্ডটি কল করে এবং UWB অ্যাপগুলিকে জানিয়ে দেয় যে UWB স্ট্যাকের অবস্থা DISABLED । পরবর্তীতে, যখন UWB ফ্রেমওয়ার্ক একটি বৈধ কান্ট্রি কোড নির্ধারণ করতে সক্ষম হয়, তখন এটি ANDROID_SET_COUNTRY_CODE কমান্ড ব্যবহার করে নতুন কান্ট্রি কোডটি কনফিগার করে এবং UWB অ্যাপগুলিকে জানিয়ে দেয় যে UWB স্ট্যাকটি READY ।
যদি কোনো দেশের স্থানীয় নিয়মকানুনের কারণে UWB ব্যবহার করা না যায়, তাহলে UWB কন্ট্রোলার STATUS_CODE_ANDROID_REGULATION_UWB_OFF স্ট্যাটাস কোডটি রিটার্ন করে। এরপর UWB ফ্রেমওয়ার্ক UWB অ্যাপগুলোকে জানিয়ে দেয় যে UWB স্ট্যাকের অবস্থা DISABLED রয়েছে।
যখন কোনো ব্যবহারকারী অন্য কোনো দেশে ভ্রমণ করেন, তখন UWB ফ্রেমওয়ার্ক ANDROID_SET_COUNTRY_CODE UCI কমান্ড ব্যবহার করে একটি নতুন কান্ট্রি কোড কনফিগার করে। নতুন দেশের UWB নিয়মাবলীর উপর ভিত্তি করে UWB কন্ট্রোলার দ্বারা ফেরত দেওয়া স্ট্যাটাস কোডের কারণে UWB স্ট্যাক স্টেটে পরিবর্তন আসতে পারে।
FIRA UCI স্পেসিফিকেশন-সংজ্ঞায়িত কমান্ড ফরম্যাট
UCI কন্ট্রোল প্যাকেটের ফরম্যাটের জন্য, UCI স্পেসিফিকেশনের ৪.৪.২ অনুচ্ছেদ দেখুন।
ইন্টারফেস সংস্করণ
UCI স্পেসিফিকেশন UWB বিক্রেতাদেরকে UCI_GET_DEVICE_INFO_RSP এবং UCI_GET_CAPS_INFO_RSP কমান্ড ব্যবহার করে ডিভাইস দ্বারা বাস্তবায়িত UCI স্ট্যাকের সংস্করণ প্রকাশ করার সুযোগ দেয়। ফ্রেমওয়ার্কটি এই কমান্ডগুলো ব্যবহার করে ডিভাইসটির UCI সংস্করণ সংগ্রহ করে এবং সেই অনুযায়ী এর আচরণ পরিবর্তন করে।
UWB মডিউল দ্বারা সমর্থিত খসড়া CR-গুলির তালিকা
FiRa 2.0-এর জন্য নিম্নলিখিত খসড়া CR-গুলো UWB মডিউল সংস্করণ #330810000 দ্বারা সমর্থিত:
অ্যান্ড্রয়েড ইউসিআই ইন্টারফেস (FiRa বিক্রেতার অংশ)
UCI স্পেসিফিকেশন, স্পেসিফিকেশনে সংজ্ঞায়িত সমস্ত মেসেজের জন্য এক সেট গ্রুপ আইডেন্টিফায়ার (GID) এবং অপকোড আইডেন্টিফায়ার (OID) নির্ধারণ করে। এই স্পেসিফিকেশনটি শুধুমাত্র ভেন্ডরদের ব্যবহারের জন্য এক সেট GID সংরক্ষিত রাখে। AOSP UWB স্ট্যাক এই ভেন্ডর GID এবং OID-গুলোর কিছু অংশ অ্যান্ড্রয়েড-নির্দিষ্ট কমান্ডের জন্য ব্যবহার করে, যেগুলো স্পেসিফিকেশনে সংজ্ঞায়িত নয়। বিস্তারিত জানতে, UCI স্পেসিফিকেশনের ৮.৪ অনুচ্ছেদটি দেখুন।
অ্যান্ড্রয়েড দ্বারা ব্যবহৃত এই ভেন্ডর মেসেজগুলো android.hardware.uwb.fira_android HAL প্যাকেজে সংজ্ঞায়িত করা আছে।
বিক্রেতা ইন্টারফেস সংস্করণ
UWB বিক্রেতাদের অবশ্যই IUwbChip.getSupportedAndroidUciVersion() এর মাধ্যমে ডিভাইসে সমর্থিত android.hardware.uwb.fira_android HAL প্যাকেজের সংস্করণটি প্রকাশ করতে হবে। ফ্রেমওয়ার্কটি পশ্চাৎ সামঞ্জস্যতা (backward compatibility) পরিচালনার জন্য এই সংস্করণ সংক্রান্ত তথ্য ব্যবহার করে।
অ্যান্ড্রয়েড জিআইডি এবং ওআইডি-এর তালিকা
নিচের সারণিতে অ্যান্ড্রয়েডের GID এবং OID গুলো তালিকাভুক্ত করা হলো। GID 0xE এবং 0xF শুধুমাত্র অ্যান্ড্রয়েড OEM-দের ব্যবহারের জন্য সংরক্ষিত।
| জিআইডি | ওআইডি | সংজ্ঞা |
|---|---|---|
ANDROID = 0xC | ANDROID_GET_POWER_STATS = 0x0 | UWB-এর পাওয়ার সম্পর্কিত পরিসংখ্যান পেতে কমান্ড এবং রেসপন্স দ্বারা ব্যবহৃত হয়। এটি শুধুমাত্র তখনই সমর্থিত হবে, যদি UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY এর মান 1 সেট করা থাকে। |
ANDROID_SET_COUNTRY_CODE = 0x1 | বর্তমান নিয়ন্ত্রক দেশের কোড সেট করতে ব্যবহৃত হয় (যা সিম বা ওয়াই-ফাই ব্যবহার করে নির্ধারিত হয়, অথবা প্রস্তুতকারক দ্বারা হার্ডকোড করা থাকে)। দেশের কোডটি ISO-3166 দেশের কোডের অনুরূপ একটি ২-বাইট মান হিসাবে পাঠানো হয়। দেশের কোডটি অজানা বোঝাতে | |
ANDROID_RANGE_DIAGNOSTICS = 0x2 | UWB রেঞ্জিং ডায়াগনস্টিকস পরিসংখ্যান পেতে নোটিফিকেশন দ্বারা ব্যবহৃত হয়। শুধুমাত্র তখনই সমর্থিত, যদি UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS এর মান 1 সেট করা থাকে। | |
OEM = 0xE,0xF | 0x00 - 0x3F | শুধুমাত্র OEM ব্যবহারের জন্য সংরক্ষিত। |
UCI স্পেসিফিকেশনে সংজ্ঞায়িত বার্তাগুলির বিক্রেতা এক্সটেনশন
এই বিভাগে UCI স্পেসিফিকেশন-সংজ্ঞায়িত বার্তাগুলিতে বিক্রেতাদের দ্বারা বর্ধিতকরণের বিশদ বিবরণ বর্ণনা করা হয়েছে।
SESSION_SET_APP_CONFIG_[CMD|RSP] এবং SESSION_GET_APP_CONFIG_[CMD|RSP]
APP_CONFIG এর TLV-এর ভেন্ডর সংরক্ষিত অংশে AOSP স্ট্যাক দ্বারা সংজ্ঞায়িত টাইপ লেংথ ভ্যালু (TLV) গুলো নিচে দেওয়া হলো:
- জিআইডি: 0001b (ইউডব্লিউবি সেশন কনফিগারেশন গ্রুপ)
- OID: 000011b (
SESSION_SET_APP_CONFIG_CMD) - OID: 000100b (
SESSION_GET_APP_CONFIG_CMD)
নিম্নলিখিত সারণিতে UWB সেশন কনফিগারেশন বার্তাগুলির প্যারামিটারগুলি তালিকাভুক্ত করা হয়েছে।
| প্যারামিটার নাম | দৈর্ঘ্য (অক্টেট) | ট্যাগ (আইডি) | বিক্রেতার ইন্টারফেস সংস্করণ | বর্ণনা |
|---|---|---|---|---|
NB_OF_RANGE_MEASUREMENTS | ১ | 0xE3 | ১ | যদি AOA_RESULT_REQ মান 0xF0 সেট করা থাকে, তাহলে ইন্টারলিভিং অনুপাত। এটি শুধুমাত্র তখনই সমর্থিত হবে যদি UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING এর মান 1 সেট করা থাকে। |
NB_OF_AZIMUTH_MEASUREMENTS | ১ | 0xE4 | ১ | |
NB_OF_ELEVATION_MEASUREMENTS | ১ | 0xE5 | ১ | |
ENABLE_DIAGNOSTICS | ১ | 0xE8 | ২ | ডায়াগনস্টিকস রিপোর্টিং চালু বা বন্ধ করার জন্য ১-বাইটের মান। এই প্যারামিটারটি শুধুমাত্র তখনই কনফিগার করুন যখন মানসমূহ:
|
DIAGRAMS_FRAME_REPORTS_FIELDS | ১ অথবা ৪ | 0xE9 | ২ | ডায়াগনস্টিকস রিপোর্টিং কনফিগার করার জন্য ১-বাইট বা ৪-বাইট বিটমাস্ক। এই বিটমাস্কটি অ্যান্ড্রয়েড ১৪ বা তার পরবর্তী সংস্করণে ১ বাইট এবং অ্যান্ড্রয়েড ১৩ বা তার পূর্ববর্তী সংস্করণে ৪ বাইট হয়ে থাকে। এই প্যারামিটারটি শুধুমাত্র তখনই কনফিগার করুন যখন বিটের সংজ্ঞা:
|
CORE_GET_CAPS_INFO_RSP
CAPS_INFO এর TLV-গুলোর ভেন্ডর সংরক্ষিত অংশে AOSP স্ট্যাক দ্বারা সংজ্ঞায়িত TLV-গুলো নিচে দেওয়া হলো:
- জিআইডি: 0000b (ইউডব্লিউবি কোর গ্রুপ)
- OID: 000011b (
CORE_GET_CAPS_INFO_RSP)
নিম্নলিখিত সারণিতে UWB সক্ষমতা বার্তাগুলির প্যারামিটারগুলি তালিকাভুক্ত করা হয়েছে।
| প্যারামিটার নাম | দৈর্ঘ্য (অক্টেট) | ট্যাগ (আইডি) | বিক্রেতার ইন্টারফেস সংস্করণ | বর্ণনা |
|---|---|---|---|---|
SUPPORTED_POWER_STATS_QUERY | ১ | 0xC0 | ১ | ১ বাইটের মান যা পাওয়ার স্ট্যাটস কোয়েরির জন্য সমর্থন নির্দেশ করে। মানসমূহ:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING | ১ | 0xE3 | ১ | অ্যান্টেনা ইন্টারলিভিং ফিচারের সমর্থন নির্দেশকারী ১ বাইটের মান। মানসমূহ:
|
SUPPORTED_MIN_RANGING_INTERVAL_MS | ৪ | 0xE4 | ২ | ৪ বাইটের একটি মান যা মিলিসেকেন্ডে সমর্থিত সর্বনিম্ন রেঞ্জিং ব্যবধান নির্দেশ করে। |
SUPPORTED_RANGE_DATA_NTF_CONFIG | ৪ | 0xE5 | ২ | ৪ বাইটের বিটমাস্ক যা সমর্থিত RANGE_DATA_NTF_CONFIG মানগুলো নির্দেশ করে। এই বিটমাস্কের প্রতিটি বিট, SET_APP_CFG_CMD তে ব্যবহৃত RANGE_DATA_NTF_CONFIG মানগুলোর সাথে সঙ্গতিপূর্ণ। |
SUPPORTED_RSSI_REPORTING | ১ | 0xE6 | ২ | আরএসএসআই রিপোর্টিং-এর সমর্থন নির্দেশকারী ১ বাইটের মান। মানসমূহ:
|
SUPPORTED_DIAGNOSTICS | ১ | 0xE7 | ২ | ডায়াগনস্টিকস রিপোর্টিং-এর সমর্থন নির্দেশকারী ১ বাইটের মান। মানসমূহ:
|
SUPPORTED_MIN_SLOT_DURATION_RSTU | ৪ | 0xE8 | ২ | RSTU-তে সমর্থিত সর্বনিম্ন স্লট সময়কাল নির্দেশকারী ৪ বাইটের মান। |
SUPPORTED_MAX_RANGING_SESSION_NUMBER | ৪ | 0xE9 | ২ | ৪ বাইটের মান যা সমর্থিত সর্বোচ্চ সংখ্যক FiRa রেঞ্জিং সেশন নির্দেশ করে। |
SUPPORTED_CHANNELS_AOA | ২ | 0xEA | ২ | AoA সমর্থনকারী চ্যানেলগুলো নির্দেশ করার জন্য ২ বাইটের বিটমাস্ক। বিটমাস্কের প্রতিটি মানসমূহ:
|
স্ট্যাটাস কোড
নিম্নলিখিতগুলি হলো ভেন্ডর স্পেসের স্ট্যাটাস কোড। এগুলি UWB সাবসিস্টেম (UWBS) দ্বারা UCI রেসপন্সে (যেমন SESSION_START_RSP ) ফেরত দেওয়া হয়।
| স্ট্যাটাস কোড | মূল্য | বর্ণনা |
|---|---|---|
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT | 0x52 | অন্যান্য CCC বা FiRa রেঞ্জিং সেশনের সাথে সংঘাতের কারণে বর্তমান রেঞ্জিং সেশনটি শুরু করা না গেলে এই স্ট্যাটাস কোডটি ফেরত আসে। |
STATUS_REGULATION_UWB_OFF | 0x53 | UWB নিয়ন্ত্রণমূলক কারণে বর্তমান রেঞ্জিং সেশনটি শুরু করা না গেলে এই স্ট্যাটাস কোডটি ফেরত আসে। |
SESSION_STATUS_NTF-এ অবস্থা পরিবর্তনের কারণ কোড
SESSION_STATUS_NTF এ একটি UWBS দ্বারা ফেরত দেওয়া স্ট্যাটাস ফিল্ডের জন্য ভেন্ডর স্পেসে সংজ্ঞায়িত স্টেট পরিবর্তনের কারণ কোডগুলো নিচে দেওয়া হলো। যখন একটি রেঞ্জিং সেশনের স্টেট পরিবর্তিত হয় (উদাহরণস্বরূপ, ACTIVE থেকে IDLE ), তখন UWBS এই নোটিফিকেশনটি পাঠায়।
| রাজ্য পরিবর্তনের কারণ কোড | মূল্য | বর্ণনা |
|---|---|---|
REASON_ERROR_INVALID_CHANNEL_WITH_AOA | 0x80 | সেশনের অবস্থা পরিবর্তিত হয়েছে কারণ কনফিগার করা চ্যানেলটি AoA রেঞ্জিং সমর্থন করে না। |
REASON_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT | 0x81 | অন্যান্য CCC বা FiRa রেঞ্জিং সেশনের সাথে সংঘাতের কারণে সেশনের অবস্থা পরিবর্তিত হয়েছে। |
REASON_REGULATION_UWB_OFF | 0x82 | নিয়ন্ত্রক কারণবশত UWB নিষ্ক্রিয় করতে হওয়ায় সেশনের অবস্থা পরিবর্তিত হয়েছে। |