OpenThread, ओएस और प्लैटफ़ॉर्म पर काम करता है. इसमें प्लैटफ़ॉर्म एब्स्ट्रैक्शन लेयर (पीएल) का इस्तेमाल किया जाता है. इस PAL में यह जानकारी दी गई है:

- अलार्म के साथ फ़्री-रनिंग टाइमर के लिए अलार्म इंटरफ़ेस
- सीएलआई और Spinel मैसेज को भेजने के लिए, बस इंटरफ़ेस (UART, SPI)
- IEEE 802.15.4-2006 कम्यूनिकेशन के लिए रेडियो इंटरफ़ेस
- GCC के लिए खास तौर पर बनाए गए, शुरू करने के रूटीन
- रैंडम नंबर जनरेट करने के लिए एन्ट्रापी
- नॉन-वोलटाइल कॉन्फ़िगरेशन स्टोरेज के लिए सेटिंग सेवा
- OpenThread लॉग मैसेज डिलीवर करने के लिए लॉगिंग इंटरफ़ेस
- सिस्टम के हिसाब से शुरू करने के रूटीन
सभी एपीआई, बुनियादी हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) बिल्ड सपोर्ट पैकेज (बीएसपी) के आधार पर लागू किए जाने चाहिए.
एपीआई फ़ाइलों को इन डायरेक्ट्री में रखा जाना चाहिए:
टाइप | डायरेक्ट्री |
---|---|
प्लैटफ़ॉर्म के हिसाब से PAL लागू करना | /openthread/examples/platforms/platform-name |
हेडर फ़ाइलें — नॉन-वोलिटाइल स्टोरेज एपीआई | /openthread/examples/platforms/utils |
अन्य सभी हेडर फ़ाइलें | /openthread/include/openthread/platform |
HAL BSP | /openthread/third_party/platform-name |
अलार्म
एपीआई का एलान:
/openthread/include/openthread/platform/alarm-milli.h
Alarm API, ऊपरी लेयर के टाइमर को लागू करने के लिए, समय और अलार्म की बुनियादी सेवाएं देता है.
अलार्म सेवा दो तरह की होती है, मिलीसेकंड और माइक्रोसेकंड. नए हार्डवेयर प्लैटफ़ॉर्म के लिए, मिलीसेकंड की वैल्यू देना ज़रूरी है. माइक्रोसेकंड की वैल्यू देना ज़रूरी नहीं है.
UART
एपीआई का एलान:
/openthread/examples/platforms/utils/uart.h
UART API, UART इंटरफ़ेस के ज़रिए बुनियादी सीरियल पोर्ट कम्यूनिकेशन लागू करता है.
OpenThread CLI और NCP ऐड-ऑन, होस्ट साइड के साथ इंटरैक्ट करने के लिए UART इंटरफ़ेस पर निर्भर करते हैं. हालांकि, UART API के साथ काम करना ज़रूरी नहीं है. हालांकि, अगर आपको अपने नए हार्डवेयर प्लैटफ़ॉर्म के उदाहरण पर इन ऐड-ऑन का इस्तेमाल नहीं करना है, तो भी हमारा सुझाव है कि आप इनका इस्तेमाल करें. ऐसा करने की कुछ वजहें यहां दी गई हैं:
- सीएलआई का इस्तेमाल, इस बात की पुष्टि करने के लिए किया जाता है कि पोर्ट सही तरीके से काम कर रहा है
- Harness ऑटोमेशन टूल, जांच और सर्टिफ़िकेट के लिए OpenThread को कंट्रोल करने के लिए UART इंटरफ़ेस का इस्तेमाल करता है
अगर टारगेट हार्डवेयर प्लैटफ़ॉर्म, यूएआरटी के बजाय यूएसबी सीडीसी मॉड्यूल के साथ काम करता है, तो पक्का करें कि:
- होस्ट साइड पर सही यूएसबी सीडीसी ड्राइवर इंस्टॉल करें
- OpenThread साइड पर, UART API को लागू करने के लिए, यूएसबी सीडीसी ड्राइवर (बीएसपी के साथ) का इस्तेमाल करें. इसके लिए, एक जैसे फ़ंक्शन प्रोटोटाइप का इस्तेमाल करें
रेडियो
एपीआई का एलान:
/openthread/include/openthread/platform/radio.h
Radio API, ऊपरी IEEE 802.15.4 MAC लेयर के ज़रिए कॉल किए गए सभी ज़रूरी फ़ंक्शन तय करता है. रेडियो चिप, 2.4 गीगाहर्ट्ज़ IEEE 802.15.4-2006 स्पेसिफ़िकेशन के मुताबिक होनी चाहिए.
कम बिजली खर्च करने की बेहतर सुविधा की वजह से, OpenThread के लिए ज़रूरी है कि सभी प्लैटफ़ॉर्म पर डिफ़ॉल्ट रूप से, अपने-आप फ़्रेम होने की सुविधा (अप्रत्यक्ष ट्रांसमिशन) लागू हो. साथ ही, radio.h
सोर्स फ़ाइल में सोर्स पता मैच टेबल भी लागू होनी चाहिए.
हालांकि, अगर आपके नए हार्डवेयर प्लैटफ़ॉर्म के उदाहरण में संसाधन सीमित हैं, तो सोर्स ऐड्रेस टेबल को शून्य लंबाई के तौर पर तय किया जा सकता है. ज़्यादा जानकारी के लिए, अपने-आप फ़्रेम होने की सुविधा से जुड़ी कार्रवाई पूरी नहीं हुई देखें.
अन्य/रीसेट
एपीआई का एलान:
/openthread/include/openthread/platform/misc.h
Misc/Reset API, चिप पर सॉफ़्टवेयर को रीसेट करने का तरीका उपलब्ध कराता है. साथ ही, आखिरी बार रीसेट करने की वजह के बारे में क्वेरी करता है.
एन्ट्रॉपी
एपीआई का एलान:
/openthread/include/openthread/platform/entropy.h
Entropy API, ऊपरी लेयर के लिए ट्रू रैंडम नंबर जनरेटर (टीआरएनजी) उपलब्ध कराता है. इसका इस्तेमाल, पूरे OpenThread नेटवर्क के लिए सुरक्षा एसेट को बनाए रखने के लिए किया जाता है. एपीआई को यह पक्का करना चाहिए कि हर फ़ंक्शन कॉल के लिए, एक नया रैंडम नंबर जनरेट किया जाए. टीआरएनजी से जिन सुरक्षा ऐसेट पर असर पड़ा है उनमें ये शामिल हैं:
- AES CCM नॉन्स
- रैंडम डिले वाला जिटर
- डिवाइसों का एक्सटेंड किया गया पता
- ट्रिकल टाइमर में शुरुआती रैंडम पीरियड
- CoAP टोकन/मैसेज आईडी
ध्यान दें कि कई प्लैटफ़ॉर्म ने पहले से ही रैंडम नंबर जनरेटर को इंटिग्रेट कर लिया है. साथ ही, अपने बीएसपी पैकेज में एपीआई को एक्सपोज़ कर दिया है. अगर टारगेट हार्डवेयर प्लैटफ़ॉर्म पर टीआरएनजी काम नहीं करता है, तो तय लंबाई का कोई रैंडम नंबर जनरेट करने के लिए, एडीसी मॉड्यूल सैंपलिंग का इस्तेमाल करें. अगर टाइम-रेस्पॉन्स न्योते (uint32_t) की ज़रूरी शर्तों को पूरा करने के लिए ज़रूरी हो, तो कई बार सैंपल लें.
जब मैक्रो MBEDTLS_ENTROPY_HARDWARE_ALT
को 1
पर सेट किया जाता है, तो यह एपीआई, mbedTLS लाइब्रेरी में इस्तेमाल किए जाने वाले हार्डवेयर एन्ट्रापी को जनरेट करने का तरीका भी उपलब्ध कराना चाहिए.
नॉन-वोलिटाइल स्टोरेज
एपीआई के एलान:
/openthread/include/openthread/platform/flash.h
या
/openthread/include/openthread/platform/settings.h
ऊपर दिए गए दो एपीआई में से किसी एक को लागू करके, स्टोरेज के लिए ज़रूरी शर्त को पूरा किया जा सकता है. Flash API, फ़्लैश स्टोरेज ड्राइवर को लागू करता है. वहीं, Settings API, ऊपरी लेयर में फ़्लैश ऑपरेशन को लागू करने के लिए फ़ंक्शन उपलब्ध कराता है.
ये एपीआई ऊपरी लेयर को ये जानकारी देते हैं:
- ऐप्लिकेशन डेटा को सेव करने के लिए इस्तेमाल किया जाने वाला, नॉन-वॉल्व्यूलेट स्टोरेज का उपलब्ध साइज़. उदाहरण के लिए, चालू/मंज़ूरी बाकी है ऑपरेशनल डेटासेट, मौजूदा नेटवर्क पैरामीटर, और रीसेट के बाद फिर से अटैच करने के लिए थ्रेड डिवाइसों के क्रेडेंशियल
- फ़्लैश की स्थिति से जुड़े ऑपरेशन को पढ़ना, लिखना, मिटाना, और क्वेरी करना
अपने प्लैटफ़ॉर्म के उदाहरण की मुख्य कॉन्फ़िगरेशन फ़ाइल में OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE
का इस्तेमाल करें. इससे यह पता चलता है कि प्लैटफ़ॉर्म को किस एपीआई का इस्तेमाल करना चाहिए. अगर इसे 1
पर सेट किया गया है, तो
Flash API को लागू करना ज़रूरी है. अगर ऐसा नहीं है, तो Settings API को लागू करना होगा.
यह फ़्लैग आपकी /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h
फ़ाइल में सेट होना चाहिए.
लॉग इन हो रहा है
एपीआई का एलान:
/openthread/include/openthread/platform/logging.h
Logging API, OpenThread की लॉगिंग और डीबग करने की सुविधा को लागू करता है. इसमें, डीबग आउटपुट के कई लेवल उपलब्ध होते हैं. अगर आपको अपने नए हार्डवेयर प्लैटफ़ॉर्म के उदाहरण पर, OpenThread की लॉगिंग का इस्तेमाल नहीं करना है, तो यह एपीआई ज़रूरी नहीं है.
OPENTHREAD_LOG_LEVEL_DEBG
सबसे ज़्यादा और ज़्यादा जानकारी वाला लेवल है. यह सभी रॉ पैकेट की जानकारी को प्रिंट करता है और सीरियल पोर्ट या टर्मिनल के ज़रिए लाइनों को लॉग करता है. अपनी ज़रूरत के हिसाब से डीबग लेवल चुनें.
सिस्टम के हिसाब से
एपीआई का एलान:
/openthread/examples/platforms/openthread-system.h
सिस्टम के हिसाब से बने एपीआई, मुख्य रूप से चुने गए हार्डवेयर प्लैटफ़ॉर्म के लिए, शुरू करने और बंद करने के ऑपरेशन उपलब्ध कराते हैं. इस एपीआई को OpenThread लाइब्रेरी खुद नहीं बुलाती, लेकिन यह आपके सिस्टम/RTOS के लिए काम का हो सकता है. इस सोर्स फ़ाइल में, UART, रेडियो, रैंडम, और अन्य/रीसेट जैसे अन्य मॉड्यूल को भी शुरू किया जा सकता है.
इस एपीआई को लागू करने का तरीका, इस बात पर निर्भर करता है कि इसका इस्तेमाल किस काम के लिए किया जा रहा है. अगर आपको उदाहरण के लिए किसी प्लैटफ़ॉर्म के लिए, जनरेट किए गए सीएलआई और एनसीपी ऐप्लिकेशन का इस्तेमाल करना है, तो आपको यह एपीआई लागू करना होगा. इसके अलावा, उदाहरण के तौर पर दिए गए प्लैटफ़ॉर्म ड्राइवर को आपके सिस्टम/RTOS में इंटिग्रेट करने के लिए, कोई भी एपीआई लागू किया जा सकता है.