AOSP का अल्ट्रा-वाइडबैंड (यूडब्ल्यूबी) स्टैक, एचएएल लेयर के तौर पर FiRa के तय किए गए यूसीआई इंटरफ़ेस का इस्तेमाल करता है. एचएएल इंटरफ़ेस, यूडब्ल्यूबी कमांड इंटरफ़ेस (यूसीआई) के निर्देशों, जवाबों, और सूचनाओं को भेजने और पाने के लिए, ओपेक पाइप (IUwbChip::sendUciMessage()
और IUwbClientCallback::onUciMessage()
) का इस्तेमाल करता है.
Android UWB के सभी वेंडर को, FiRa की शर्तों के मुताबिक तय किए गए सभी मैसेज के साथ काम करना होगा. यूडब्ल्यूबी फ़्रेमवर्क, पुराने वर्शन के साथ काम करता है. साथ ही, यह यूसीआई के किसी भी ऐसे वर्शन के साथ काम करता है जिसे यूडब्ल्यूबी वेंडर ने डिवाइस पर लागू किया है. AOSP UWB फ़्रेमवर्क एक मॉड्यूल है. इसलिए, यह FiRa के मुख्य स्टैंडर्ड रिलीज़ के लिए टारगेट किए गए ड्राफ़्ट यूसीआई स्पेसिफ़िकेशन से, मंज़ूर किए गए बदलाव के अनुरोधों (सीआर) के लिए भी सहायता जोड़ सकता है. सीआर के ऐसे किसी भी ड्राफ़्ट को लागू करने के तरीके में बदलाव किया जा सकता है.
इंटरफ़ेस की परिभाषा
यूडब्ल्यूबी एचएएल इंटरफ़ेस को स्टेबल एआईडीएल का इस्तेमाल करके तय किया जाता है.
मुख्य इंटरफ़ेस, 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 सेशन शुरू/बंद करने का फ़्लो
UWB देश के कोड का कॉन्फ़िगरेशन
पहले फ़िगर में दिखाया गया है कि UWB फ़्रेमवर्क, UWB स्टैक को शुरू करने के दौरान UWB देश के कोड को कॉन्फ़िगर करता है. इसके लिए, वेंडर-स्पेस वाली UCI कमांड ANDROID_SET_COUNTRY_CODE
(GID=0xC
, OID=0x1
) का इस्तेमाल किया जाता है. UWB फ़्रेमवर्क, UWB देश के कोड का पता लगाने की कोशिश करता है. इसके लिए, इन सोर्स का इस्तेमाल किया जाता है. इन्हें प्राथमिकता के क्रम में दिखाया गया है. यूडब्ल्यूबी फ़्रेमवर्क, उस पहले सोर्स पर रुक जाता है जहां देश का कोड तय किया जाता है.
- देश के कोड को बदलें: adb shell कमांड के ज़रिए देश के कोड को बदला गया है (लोकल या ऑटोमेटेड टेस्टिंग).
- टेलीफ़ोनी देश का कोड: यह कोड, सेल्युलर नेटवर्क से मिलता है. अगर एक से ज़्यादा सिम कार्ड अलग-अलग कोड दिखाते हैं, तो देश का कोड चुनने का कोई तय तरीका नहीं होता.
- वाई-फ़ाई का देश कोड: वाई-फ़ाई (80211.ad) से मिला देश कोड.
- टेलीफ़ोनी का आखिरी बार इस्तेमाल किया गया देश कोड: यह वह देश कोड है जिसे मोबाइल नेटवर्क से पिछली बार हासिल किया गया था. अगर एक से ज़्यादा सिम कार्ड से अलग-अलग कोड मिलते हैं, तो देश का कोड चुनने का तरीका तय नहीं होता.
- जगह का देश कोड: यह कोड,
LocationManager
फ़्यूज़्ड लोकेशन प्रोवाइडर से लिया जाता है. - ओईएम का डिफ़ॉल्ट देश कोड: डिवाइस बनाने वाली कंपनी की ओर से सेट किया गया देश कोड.
अगर UWB फ़्रेमवर्क, UWB देश का कोड तय नहीं कर पाता है, तो वह ANDROID_SET_COUNTRY_CODE
UCI कमांड को DEFAULT_COUNTRY_CODE ("00")
वैल्यू के साथ कॉल करता है. साथ ही, UWB ऐप्लिकेशन को सूचना देता है कि UWB स्टैक की स्थिति DISABLED
है. बाद में, जब UWB फ़्रेमवर्क, देश का मान्य कोड पता लगा लेता है, तब वह ANDROID_SET_COUNTRY_CODE
कमांड का इस्तेमाल करके, देश के नए कोड को कॉन्फ़िगर करता है. साथ ही, UWB ऐप्लिकेशन को सूचना देता है कि UWB स्टैक READY
है.
अगर किसी देश में स्थानीय कानूनों की वजह से यूडब्ल्यूबी का इस्तेमाल नहीं किया जा सकता, तो यूडब्ल्यूबी कंट्रोलर STATUS_CODE_ANDROID_REGULATION_UWB_OFF
स्टेटस कोड दिखाता है. इसके बाद, यूडब्ल्यूबी फ़्रेमवर्क, यूडब्ल्यूबी ऐप्लिकेशन को सूचना देता है कि यूडब्ल्यूबी स्टैक की स्थिति DISABLED
है.
जब कोई व्यक्ति किसी दूसरे देश की यात्रा करता है, तो यूडब्ल्यूबी फ़्रेमवर्क, ANDROID_SET_COUNTRY_CODE
यूसीआई कमांड का इस्तेमाल करके, नए देश के कोड को कॉन्फ़िगर करता है. यूडब्ल्यूबी कंट्रोलर से मिले स्टेटस कोड के आधार पर, यूडब्ल्यूबी स्टैक की स्थिति में बदलाव हो सकता है. यह स्टेटस कोड, नए देश में यूडब्ल्यूबी से जुड़े नियमों के आधार पर मिलता है.
FIRA UCI स्पेसिफ़िकेशन में तय किए गए कमांड फ़ॉर्मैट
यूसीआई कंट्रोल पैकेट के फ़ॉर्मैट के लिए, यूसीआई स्पेसिफ़िकेशन का सेक्शन 4.4.2 देखें.
इंटरफ़ेस का वर्शन
यूसीआई स्पेसिफ़िकेशन की मदद से, यूडब्ल्यूबी वेंडर, डिवाइस में लागू किए गए यूसीआई स्टैक के वर्शन को दिखा सकते हैं. इसके लिए, उन्हें UCI_GET_DEVICE_INFO_RSP
और UCI_GET_CAPS_INFO_RSP
कमांड का इस्तेमाल करना होगा. फ़्रेमवर्क इन कमांड का इस्तेमाल करके, डिवाइस के यूसीआई वर्शन को फ़ेच करता है और उसके हिसाब से डिवाइस के व्यवहार में बदलाव करता है.
UWB मॉड्यूल के साथ काम करने वाले ड्राफ़्ट सीआर की सूची
FiRa 2.0 के लिए, ड्राफ़्ट किए गए इन सीआर को UWB मॉड्यूल के वर्शन #330810000 के साथ इस्तेमाल किया जा सकता है:
Android UCI इंटरफ़ेस (FiRa वेंडर का हिस्सा)
यूसीआई स्पेसिफ़िकेशन, स्पेसिफ़िकेशन में तय किए गए सभी मैसेज के लिए, ग्रुप आइडेंटिफ़ायर (जीआईडी) और ऑपकोड आइडेंटिफ़ायर (ओआईडी) का एक सेट तय करता है. इस स्पेसिफ़िकेशन में, वेंडर के इस्तेमाल के लिए GID का एक सेट भी रिज़र्व किया गया है. AOSP UWB स्टैक, Android के लिए खास तौर पर तैयार की गई कुछ कमांड के लिए, वेंडर के इन GID और OID का इस्तेमाल करता है. इन कमांड के बारे में स्पेसिफ़िकेशन में नहीं बताया गया है. ज़्यादा जानकारी के लिए, यूसीआई की खास बातों का सेक्शन 8.4 देखें.
Android में इस्तेमाल किए जाने वाले वेंडर के इन मैसेज को android.hardware.uwb.fira_android
एचएएल पैकेज में तय किया गया है.
वेंडर इंटरफ़ेस वर्शनिंग
यूडब्ल्यूबी वेंडर को, डिवाइस पर काम करने वाले android.hardware.uwb.fira_android
एचएएल पैकेज का वर्शन IUwbChip.getSupportedAndroidUciVersion()
के ज़रिए दिखाना होगा. फ़्रेमवर्क, वर्शन की इस जानकारी का इस्तेमाल, पुराने सिस्टम के साथ काम करने की सुविधा को मैनेज करने के लिए करता है.
Android GID और OID की सूची
यहां दी गई टेबल में, Android के लिए GID और OID दिए गए हैं. GID 0xE
और 0xF
, Android ओईएम के इस्तेमाल के लिए रिज़र्व किए गए हैं.
GID | OID | परिभाषा |
---|---|---|
ANDROID = 0xC |
ANDROID_GET_POWER_STATS = 0x0 |
इस कुकी का इस्तेमाल कमांड और रिस्पॉन्स फ़ंक्शन करता है. इससे UWB की पावर से जुड़े आंकड़े मिलते हैं.
यह सुविधा सिर्फ़ तब काम करती है, जब UwbVendorCapabilityTlvTypes.SUPPORTED_POWER_STATS_QUERY को 1 पर सेट किया गया हो. |
ANDROID_SET_COUNTRY_CODE = 0x1 |
इस कुकी का इस्तेमाल, देश के मौजूदा रेगुलेटरी कोड को सेट करने के लिए किया जाता है. यह कोड, सिम या वाई-फ़ाई का इस्तेमाल करके या ओईएम के ज़रिए हार्डकोड किया जाता है. देश का कोड, आईएसओ-3166 देश के कोड के हिसाब से दो बाइट की वैल्यू के तौर पर भेजा जाता है. |
|
ANDROID_RANGE_DIAGNOSTICS = 0x2 |
इस कुकी का इस्तेमाल सूचना देने वाली सुविधा करती है, ताकि UWB रेंजिंग के डाइग्नोस्टिक्स के आंकड़े मिल सकें.
यह सुविधा सिर्फ़ तब काम करती है, जब UwbVendorCapabilityTlvTypes.SUPPORTED_DIAGNOSTICS को 1 पर सेट किया गया हो.
|
|
OEM = 0xE,0xF |
0x00 - 0x3F |
इसे ओईएम के इस्तेमाल के लिए रिज़र्व किया गया है. |
यूसीआई स्पेसिफ़िकेशन के हिसाब से तय किए गए मैसेज के लिए वेंडर एक्सटेंशन
इस सेक्शन में, यूसीआई स्पेसिफ़िकेशन में तय किए गए मैसेज के वेंडर एक्सटेंशन के बारे में जानकारी दी गई है.
SESSION_SET_APP_CONFIG_[CMD|RSP] और SESSION_GET_APP_CONFIG_[CMD|RSP]
यहां, AOSP स्टैक के ज़रिए तय की गई टाइप लेंथ वैल्यू (टीएलवी) दी गई हैं. ये टीएलवी, APP_CONFIG
में मौजूद टीएलवी के वेंडर के लिए रिज़र्व किए गए हिस्से में मौजूद होती हैं:
- GID: 0001b (UWB सेशन कॉन्फ़िगरेशन ग्रुप)
- OID: 000011b (
SESSION_SET_APP_CONFIG_CMD
) - ओआईडी: 000100b (
SESSION_GET_APP_CONFIG_CMD
)
इस टेबल में, यूडब्ल्यूबी सेशन कॉन्फ़िगरेशन मैसेज के पैरामीटर दिए गए हैं.
पैरामीटर का नाम | लंबाई (ऑक्टेट) |
टैग (आईडी) |
वेंडर इंटरफ़ेस का वर्शन | ब्यौरा |
---|---|---|---|---|
NB_OF_RANGE_MEASUREMENTS |
1 | 0xE3 |
1 | अगर AOA_RESULT_REQ को 0xF0 पर सेट किया गया है, तो इंटरलीविंग का अनुपात. यह सिर्फ़ तब काम करता है, जब UwbVendorCapabilityTlvTypes.SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING को 1 पर सेट किया गया हो. |
NB_OF_AZIMUTH_MEASUREMENTS |
1 | 0xE4 |
1 | |
NB_OF_ELEVATION_MEASUREMENTS |
1 | 0xE5 |
1 | |
ENABLE_DIAGNOSTICS |
1 | 0xE8 |
2 | डाइग्नोस्टिक्स रिपोर्टिंग की सुविधा चालू या बंद करने के लिए, 1-बाइट की वैल्यू.
इस पैरामीटर को सिर्फ़ तब कॉन्फ़िगर करें, जब वैल्यू:
|
DIAGRAMS_FRAME_REPORTS_FIELDS |
1 या 4 | 0xE9 |
2 | गड़बड़ी की रिपोर्टिंग को कॉन्फ़िगर करने के लिए, 1-बाइट या 4-बाइट बिटमास्क. यह बिटमास्क, Android 14 या इसके बाद के वर्शन में 1 बाइट का होता है. वहीं, Android 13 या इससे पहले के वर्शन में यह 4 बाइट का होता है. इस पैरामीटर को सिर्फ़ तब कॉन्फ़िगर करें, जब बिट की परिभाषाएं:
|
CORE_GET_CAPS_INFO_RSP
यहां दिए गए टीएलवी, CAPS_INFO
में टीएलवी के वेंडर के लिए रिज़र्व किए गए हिस्से में, एओएसपी स्टैक के ज़रिए तय किए जाते हैं:
- GID: 0000b (यूडब्ल्यूबी कोर ग्रुप)
- OID: 000011b (
CORE_GET_CAPS_INFO_RSP
)
यहां दी गई टेबल में, यूडब्ल्यूबी की सुविधा वाले मैसेज के पैरामीटर दिए गए हैं.
पैरामीटर का नाम | लंबाई (ऑक्टेट) |
टैग (आईडी) |
वेंडर इंटरफ़ेस का वर्शन | ब्यौरा |
---|---|---|---|---|
SUPPORTED_POWER_STATS_QUERY |
1 | 0xC0 |
1 | यह एक बाइट की वैल्यू होती है. इससे पता चलता है कि पावर स्टैट्स क्वेरी की सुविधा उपलब्ध है या नहीं. वैल्यू:
|
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING |
1 | 0xE3 |
1 | यह 1 बाइट की वैल्यू होती है. इससे पता चलता है कि एंटीना इंटरलीविंग सुविधा काम करती है या नहीं. वैल्यू:
|
SUPPORTED_MIN_RANGING_INTERVAL_MS |
4 | 0xE4 |
2 | यह चार बाइट की वैल्यू होती है. इससे पता चलता है कि मिलीसेकंड में, रेंजिंग के लिए कम से कम कितना इंटरवल इस्तेमाल किया जा सकता है. |
SUPPORTED_RANGE_DATA_NTF_CONFIG |
4 | 0xE5 |
2 | यह चार बाइट का बिटमास्क होता है. इससे RANGE_DATA_NTF_CONFIG की इस्तेमाल की जा सकने वाली वैल्यू का पता चलता है.
बिटमास्क, जहां हर बिट, SET_APP_CFG_CMD में RANGE_DATA_NTF_CONFIG में इस्तेमाल की गई वैल्यू से मेल खाता है. |
SUPPORTED_RSSI_REPORTING |
1 | 0xE6 |
2 | यह एक बाइट की वैल्यू होती है. इससे पता चलता है कि आरएसएसआई रिपोर्टिंग की सुविधा उपलब्ध है या नहीं. वैल्यू:
|
SUPPORTED_DIAGNOSTICS |
1 | 0xE7 |
2 | यह 1 बाइट की वैल्यू होती है. इससे पता चलता है कि डाइग्नोस्टिक्स रिपोर्टिंग की सुविधा उपलब्ध है या नहीं. वैल्यू:
|
SUPPORTED_MIN_SLOT_DURATION_RSTU |
4 | 0xE8 |
2 | यह चार बाइट की वैल्यू होती है. इससे RSTU में, कम से कम कितने समय के लिए स्लॉट बुक किया जा सकता है, यह पता चलता है. |
SUPPORTED_MAX_RANGING_SESSION_NUMBER |
4 | 0xE9 |
2 | यह 4 बाइट की वैल्यू होती है. इससे, FiRa रेंजिंग के ज़्यादा से ज़्यादा सेशन के बारे में पता चलता है. |
SUPPORTED_CHANNELS_AOA |
2 | 0xEA |
2 | यह दो बाइट का बिटमास्क होता है. इससे उन चैनलों के बारे में पता चलता है जो AoA के साथ काम करते हैं. बिटमास्क में मौजूद हर वैल्यू:
|
स्टेटस कोड
वेंडर स्पेस में ये स्टेटस कोड मौजूद हैं. इन्हें यूडब्ल्यूबी सबसिस्टम (UWBS) से, यूसीआई रिस्पॉन्स (जैसे कि SESSION_START_RSP
) में दिखाया जाता है.
स्टेटस कोड | वैल्यू | ब्यौरा |
---|---|---|
STATUS_ERROR_STOPPED_DUE_TO_OTHER_SESSION_CONFLICT |
0x52 |
यह स्टेटस कोड तब दिखता है, जब अन्य CCC या FiRa रेंजिंग सेशन के साथ टकराव की वजह से, मौजूदा रेंजिंग सेशन शुरू नहीं किया जा सकता. |
STATUS_REGULATION_UWB_OFF |
0x53 |
यह स्टेटस कोड तब दिखता है, जब यूडब्ल्यूबी से जुड़े कानूनी नियमों का पालन न होने की वजह से, रेंजिंग का मौजूदा सेशन शुरू नहीं किया जा सकता. |
SESSION_STATUS_NTF में स्थिति बदलने की वजह का कोड
यहां वेंडर स्पेस में, स्थिति में बदलाव की वजह बताने वाले कोड दिए गए हैं. ये कोड, UWBS से SESSION_STATUS_NTF
में स्थिति फ़ील्ड के लिए दिखाए जाते हैं. यह सूचना, UWBS तब भेजता है, जब रेंजिंग सेशन की स्थिति बदलती है. उदाहरण के लिए, ACTIVE
से IDLE
में बदलती है.
स्थिति बदलने की वजह का कोड | वैल्यू | ब्यौरा |
---|---|---|
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 को बंद करना ज़रूरी है. इसलिए, सेशन की स्थिति बदल गई है. |