UWB HAL ইন্টারফেস

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 সেশন শুরু এবং বন্ধ

চিত্র ৩. ইউডব্লিউবি সেশন শুরু/বন্ধ প্রবাহ

UWB দেশের কোড কনফিগারেশন

চিত্র ১-এ যেমন দেখানো হয়েছে, UWB ফ্রেমওয়ার্ক UWB স্ট্যাক ইনিশিয়ালাইজেশনের সময় ভেন্ডর-স্পেস UCI কমান্ড ANDROID_SET_COUNTRY_CODE (GID= 0xC , OID= 0x1 ) ব্যবহার করে UWB কান্ট্রি কোড কনফিগার করে। UWB ফ্রেমওয়ার্ক নিম্নলিখিত উৎসগুলো (অগ্রাধিকার ক্রমে তালিকাভুক্ত) ব্যবহার করে UWB কান্ট্রি কোড নির্ধারণ করার চেষ্টা করে। যে প্রথম উৎস থেকে কান্ট্রি কোডটি নির্ধারিত হয়, UWB ফ্রেমওয়ার্ক সেখানেই থেমে যায়।

  1. কান্ট্রি কোড ওভাররাইড: adb শেল কমান্ডের মাধ্যমে কান্ট্রি কোড প্রয়োগ করা (লোকাল বা অটোমেটেড টেস্টিং)।
  2. টেলিফোনি কান্ট্রি কোড: সেলুলারের মাধ্যমে প্রাপ্ত কান্ট্রি কোড। যদি একাধিক সিম থেকে ভিন্ন ভিন্ন কোড আসে, তবে নির্বাচিত কান্ট্রি কোডটি অনির্দিষ্ট থাকে।
  3. ওয়াই-ফাই কান্ট্রি কোড: ওয়াই-ফাই (80211.ad) এর মাধ্যমে প্রাপ্ত কান্ট্রি কোড।
  4. সর্বশেষ জ্ঞাত টেলিফোনি কান্ট্রি কোড: সেলুলারের মাধ্যমে প্রাপ্ত সর্বশেষ জ্ঞাত কান্ট্রি কোড। যদি একাধিক সিম থেকে ভিন্ন ভিন্ন কোড আসে, তবে নির্বাচিত কান্ট্রি কোডটি অনির্দিষ্ট থাকে।
  5. অবস্থানের দেশের কোড: LocationManager ফিউজড লোকেশন প্রোভাইডার থেকে প্রাপ্ত দেশের কোড।
  6. 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 দেশের কোডের অনুরূপ একটি ২-বাইট মান হিসাবে পাঠানো হয়। দেশের কোডটি অজানা বোঝাতে 00 মানটি ব্যবহৃত হয়।

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

ডায়াগনস্টিকস রিপোর্টিং চালু বা বন্ধ করার জন্য ১-বাইটের মান। এই প্যারামিটারটি শুধুমাত্র তখনই কনফিগার করুন যখন CORE_GET_CAPS_INFO_RSP SUPPORTED_DIAGNOSTICS ভ্যালুটি 1 রিটার্ন করে, যা নির্দেশ করে যে ডায়াগনস্টিকস রিপোর্টিং ফিচারটি সমর্থিত।

মানসমূহ:

  • 1 : বৈশিষ্ট্য সক্রিয় করা হয়েছে
  • 0 : বৈশিষ্ট্য নিষ্ক্রিয়

DIAGRAMS_FRAME_REPORTS_FIELDS ১ অথবা ৪ 0xE9

ডায়াগনস্টিকস রিপোর্টিং কনফিগার করার জন্য ১-বাইট বা ৪-বাইট বিটমাস্ক। এই বিটমাস্কটি অ্যান্ড্রয়েড ১৪ বা তার পরবর্তী সংস্করণে ১ বাইট এবং অ্যান্ড্রয়েড ১৩ বা তার পূর্ববর্তী সংস্করণে ৪ বাইট হয়ে থাকে।

এই প্যারামিটারটি শুধুমাত্র তখনই কনফিগার করুন যখন CORE_GET_CAPS_INFO_RSP ফাংশনটি SUPPORTED_DIAGNOSTICS ভ্যালু 1 রিটার্ন করে, যা নির্দেশ করে যে ডায়াগনস্টিকস রিপোর্টিং ফিচারটি সমর্থিত।

বিটের সংজ্ঞা:

  • b0 (0x01) : RSSI ক্ষেত্রগুলি সক্রিয় করুন
  • b1 (0x02) : AoA ক্ষেত্রগুলি সক্রিয় করুন
  • b2 (0x04) : CIR ক্ষেত্রগুলি সক্রিয় করুন

CORE_GET_CAPS_INFO_RSP

CAPS_INFO এর TLV-গুলোর ভেন্ডর সংরক্ষিত অংশে AOSP স্ট্যাক দ্বারা সংজ্ঞায়িত TLV-গুলো নিচে দেওয়া হলো:

  • জিআইডি: 0000b (ইউডব্লিউবি কোর গ্রুপ)
  • OID: 000011b ( CORE_GET_CAPS_INFO_RSP )

নিম্নলিখিত সারণিতে UWB সক্ষমতা বার্তাগুলির প্যারামিটারগুলি তালিকাভুক্ত করা হয়েছে।

প্যারামিটার নাম দৈর্ঘ্য
(অক্টেট)
ট্যাগ
(আইডি)
বিক্রেতার ইন্টারফেস সংস্করণ বর্ণনা
SUPPORTED_POWER_STATS_QUERY 0xC0

১ বাইটের মান যা পাওয়ার স্ট্যাটস কোয়েরির জন্য সমর্থন নির্দেশ করে।

মানসমূহ:

  • 1 : বৈশিষ্ট্য সমর্থিত
  • 0 : বৈশিষ্ট্যটি সমর্থিত নয়
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING 0xE3

অ্যান্টেনা ইন্টারলিভিং ফিচারের সমর্থন নির্দেশকারী ১ বাইটের মান।

মানসমূহ:

  • 1 : বৈশিষ্ট্য সমর্থিত
  • 0 : বৈশিষ্ট্যটি সমর্থিত নয়
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

আরএসএসআই রিপোর্টিং-এর সমর্থন নির্দেশকারী ১ বাইটের মান।

মানসমূহ:

  • 1 : বৈশিষ্ট্য সমর্থিত
  • 0 : বৈশিষ্ট্যটি সমর্থিত নয়
SUPPORTED_DIAGNOSTICS 0xE7

ডায়াগনস্টিকস রিপোর্টিং-এর সমর্থন নির্দেশকারী ১ বাইটের মান।

মানসমূহ:

  • 1 : বৈশিষ্ট্য সমর্থিত
  • 0 : বৈশিষ্ট্যটি সমর্থিত নয়
SUPPORTED_MIN_SLOT_DURATION_RSTU 0xE8 RSTU-তে সমর্থিত সর্বনিম্ন স্লট সময়কাল নির্দেশকারী ৪ বাইটের মান।
SUPPORTED_MAX_RANGING_SESSION_NUMBER 0xE9 ৪ বাইটের মান যা সমর্থিত সর্বোচ্চ সংখ্যক FiRa রেঞ্জিং সেশন নির্দেশ করে।
SUPPORTED_CHANNELS_AOA 0xEA

AoA সমর্থনকারী চ্যানেলগুলো নির্দেশ করার জন্য ২ বাইটের বিটমাস্ক। বিটমাস্কের প্রতিটি 1 একটি নির্দিষ্ট UWB চ্যানেলকে নির্দেশ করে।

মানসমূহ:

  • 0x01 : চ্যানেল ৫ সমর্থিত
  • 0x02 : চ্যানেল ৬ সমর্থিত
  • 0x04 : চ্যানেল ৮ সমর্থিত
  • 0x08 : চ্যানেল ৯ সমর্থিত
  • 0x10 : চ্যানেল ১০ সমর্থিত
  • 0x20 : চ্যানেল ১২ সমর্থিত
  • 0x40 : চ্যানেল ১৩ সমর্থিত
  • 0x80 : চ্যানেল ১৪ সমর্থিত

স্ট্যাটাস কোড

নিম্নলিখিতগুলি হলো ভেন্ডর স্পেসের স্ট্যাটাস কোড। এগুলি 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 নিষ্ক্রিয় করতে হওয়ায় সেশনের অবস্থা পরিবর্তিত হয়েছে।