प्लैटफ़ॉर्म ऐब्सट्रैक्शन लेयर एपीआई लागू करें

GitHub पर स्रोत देखें

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

पोर्टिंग की वास्तुकला
  • अलार्म के साथ फ़्री-टाइम टाइमर के लिए अलार्म इंटरफ़ेस
  • CLI और Spinel मैसेज के बारे में जानकारी देने के लिए बस इंटरफ़ेस (UART, SPI)
  • IEEE 802.15.4-2006 संचार के लिए रेडियो इंटरफ़ेस
  • शुरू करने के लिए GCC के हिसाब से रूटीन
  • किसी भी क्रम में सही संख्या जनरेट करने के लिए एंट्रॉपी
  • गैर- अस्थिर कॉन्फ़िगरेशन वाली मेमोरी के लिए सेटिंग सेवा
  • OpenThread लॉग मैसेज डिलीवर करने के लिए लॉगिंग इंटरफ़ेस
  • सिस्टम के हिसाब से शुरू करने के रूटीन

सभी एपीआई को बुनियादी हार्डवेयर एब्सट्रैक्शन लेयर (HAL) बिल्ड सपोर्ट पैकेज (BSP) के आधार पर लागू किया जाना चाहिए.

एपीआई फ़ाइलों को इन डायरेक्ट्री में रखना चाहिए:

टाइप निर्देशिका
प्लैटफ़ॉर्म के हिसाब से PAL लागू करना /openthread/examples/platforms/platform-name
हेडर फ़ाइलें — ग़ैर-स्थिर मेमोरी API /openthread/examples/platforms/utils
अन्य सभी हेडर फ़ाइलें /openthread/include/openthread/platform
एचएएल बीएसपी /openthread/third_party/platform-name

अलार्म

एपीआई का एलान:

/openthread/include/openthread/platform/alarm-milli.h

अलार्म एपीआई, ऊपर के स्तर के टाइमर को लागू करने के लिए बुनियादी समय और अलार्म सेवाएं देता है.

अलार्म सेवा के दो प्रकार होते हैं, मिलीसेकंड और माइक्रोसेकंड. नए हार्डवेयर प्लैटफ़ॉर्म के लिए मिलीसेकंड की ज़रूरत है. माइक्रोसेकंड वैकल्पिक है.

यूएआरटी

एपीआई का एलान:

/openthread/examples/platforms/utils/uart.h

UART API, UART इंटरफ़ेस के माध्यम से मूलभूत सीरियल पोर्ट संचार लागू करता है.

OpenThread CLI और NCP ऐड-ऑन, होस्ट की ओर से इंटरैक्ट करने के लिए UART इंटरफ़ेस पर निर्भर करते हैं. हालांकि, UART API सहायता ज़रूरी नहीं है. हालांकि, भले ही आप अपने नए हार्डवेयर प्लैटफ़ॉर्म के उदाहरण पर इन ऐड-ऑन का इस्तेमाल करने की योजना नहीं बना रहे हैं, फिर भी हमारा सुझाव है कि आप कुछ वजहों से सहायता जोड़ें:

  • सीएलआई इस बात की पुष्टि करने के लिए उपयोगी है कि पोर्ट सही तरीके से काम करता है
  • हार्नेस ऑटोमेशन टूल, परीक्षण और सर्टिफ़िकेशन के मकसद से OpenThread को नियंत्रित करने के लिए UART इंटरफ़ेस का इस्तेमाल करता है

अगर टारगेट हार्डवेयर प्लैटफ़ॉर्म, UART के बजाय यूएसबी सीडीसी मॉड्यूल की सुविधा देता है, तो पक्का करें कि:

  • होस्ट साइड पर सही यूएसबी सीडीसी ड्राइवर इंस्टॉल करें
  • ओपन फ़ंक्शन की मदद से, OpenThread साइड पर यूएसबी सीडीसी ड्राइवर (BSP के साथ) को UART API लागू करें

रेडियो

एपीआई का एलान:

/openthread/include/openthread/platform/radio.h

रेडियो एपीआई, ऊपरी IEEE 802.15.4 MAC लेयर के ज़रिए ज़रूरी सभी फ़ंक्शन के बारे में बताता है. रेडियो चिप 2.4GHz IEEE 802.15.4-2006 विशेषता का पूरी तरह से अनुपालन करना चाहिए.

इसके कम पावर वाले फ़ीचर की वजह से, OpenThread को सभी प्लैटफ़ॉर्म डिफ़ॉल्ट तौर पर अपने-आप फ़्रेम रेंडर होने की मंज़ूरी (इनडायरेक्ट ट्रांसमिशन) लागू करनी होती है. साथ ही, स्रोत पता मिलान टेबल को radio.h स्रोत फ़ाइल में भी लागू करना चाहिए.

हालांकि, अगर आपके नए हार्डवेयर प्लैटफ़ॉर्म का उदाहरण संसाधन सीमित है, तो स्रोत पते वाली टेबल को शून्य लंबाई के तौर पर बताया जा सकता है. ज़्यादा जानकारी के लिए, ऑटो फ़्रेम की मंज़ूरी बाकी है देखें.

विविध/रीसेट

एपीआई का एलान:

/openthread/include/openthread/platform/misc.h

Misc/रीसेट एपीआई से चिप पर सॉफ़्टवेयर को रीसेट करने और आखिरी बार रीसेट करने की वजह जानने के लिए एक तरीका मिलता है.

एन्ट्रॉपी

एपीआई का एलान:

/openthread/include/openthread/platform/entropy.h

Entropy API, अपर लेयर के लिए ट्रू रैंडम नंबर जनरेटर (TRNG) देता है. इसका इस्तेमाल पूरे OpenThread नेटवर्क की सुरक्षा एसेट को बनाए रखने के लिए किया जाता है. एपीआई को इस बात की गारंटी देनी चाहिए कि हर फ़ंक्शन कॉल के लिए एक नया रैंडम नंबर जनरेट किया गया है. जिन सुरक्षा एसेट पर TRNG का असर पड़ा है उनमें ये शामिल हैं:

  • AES CCM नॉन्स
  • सिग्नल में गड़बड़ी की देरी
  • डिवाइस का विस्तारित पता
  • ट्रिकल टाइमर में शुरुआती रैंडम पीरियड
  • CoAP टोकन/मैसेज आईडी

ध्यान दें कि कई प्लैटफ़ॉर्म ने पहले ही रैंडम नंबर जनरेटर को इंटिग्रेट कर लिया है, जिससे एपीआई के बीएसपी पैकेज में एपीआई दिखता है. अगर टारगेट हार्डवेयर प्लैटफ़ॉर्म, TRNG के साथ काम नहीं करता, तो तय-लंबाई वाले रैंडम नंबर जनरेट करने के लिए, ADC मॉड्यूल के नमूने का इस्तेमाल करें. अगर TRNG की ज़रूरतों (uint32_t) को पूरा करना ज़रूरी हो, तो कई दोहराने का नमूना लें.

जब मैक्रो MBEDTLS_ENTROPY_HARDWARE_ALT को 1 पर सेट किया जाता है, तो इस एपीआई को mbedTLS लाइब्रेरी में इस्तेमाल की जाने वाली हार्डवेयर एंट्रॉपी जनरेट करने का तरीका भी मुहैया कराना चाहिए.

गैर-स्थिर मेमोरी

एपीआई के एलान:

/openthread/include/openthread/platform/flash.h

या

/openthread/include/openthread/platform/settings.h

ऊपर दी गई दो API में से कोई एक लागू करके गैर-स्थिर मेमोरी की ज़रूरत पूरी की जा सकती है. फ़्लैश API एक फ़्लैश मेमोरी ड्राइवर लागू करता है, जबकि सेटिंग एपीआई ऊपरी स्तर पर एक बुनियादी फ़्लैश कार्रवाई लागू करने का फ़ंक्शन देती है.

ये एपीआई सबसे ऊपर की परत के सामने दिखते हैं:

  • ऐप्लिकेशन के डेटा को स्टोर करने के लिए इस्तेमाल होने वाला गैर-वर्टिकल स्टोरेज साइज़ (उदाहरण के लिए, चालू/मंज़ूरी बाकी वाले डेटासेट, मौजूदा नेटवर्क पैरामीटर, और रीसेट के बाद फिर से अटैचमेंट करने के लिए थ्रेड डिवाइस के क्रेडेंशियल)
  • फ़्लैश स्थिति संचालन पढ़ें, लिखें, मिटाएं, और क्वेरी करें

अपने प्लैटफ़ॉर्म के उदाहरण की मुख्य कॉन्फ़िगरेशन फ़ाइल में OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE का इस्तेमाल करके बताएं कि प्लैटफ़ॉर्म को किस एपीआई का इस्तेमाल करना चाहिए. अगर 1 पर सेट किया जाता है, तो Flash API लागू किया जाना चाहिए. ऐसा न होने पर, सेटिंग एपीआई लागू किया जाना चाहिए.

यह फ़्लैग आपकी /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h फ़ाइल में सेट होना चाहिए.

लॉग इन हो रहा है

एपीआई का एलान:

/openthread/include/openthread/platform/logging.h

लॉगिंग लॉगिंग, ओपन आउटपुट की कई लेवल के साथ OpenThread की लॉगिंग और डीबग फ़ंक्शन को लागू करता है. अगर आप अपने नए हार्डवेयर प्लैटफ़ॉर्म के उदाहरण पर OpenThread की लॉगिंग का इस्तेमाल नहीं करना चाहते हैं, तो यह एपीआई ज़रूरी नहीं है.

सबसे ज़्यादा और सबसे ज़्यादा जानकारी वाला लेवल OPENTHREAD_LOG_LEVEL_DEBG है, जो सीरियल पोर्ट या टर्मिनल के ज़रिए कच्ची पैकेट जानकारी प्रिंट करता है और लाइन लॉग करता है. ज़रूरत के मुताबिक सबसे अच्छा डीबग लेवल चुनें.

सिस्टम के हिसाब से

एपीआई का एलान:

/openthread/examples/platforms/openthread-system.h

सिस्टम के हिसाब से एपीआई खास तौर पर चुने गए हार्डवेयर प्लैटफ़ॉर्म के लिए शुरू किए जाते हैं और शुरू किए जाने हैं. इस एपीआई को OpenThread लाइब्रेरी से नहीं बुलाया जाता है. हालांकि, यह आपके सिस्टम/आरटीओएस के लिए उपयोगी हो सकता है. आप इस स्रोत फ़ाइल में दूसरे मॉड्यूल (उदाहरण के लिए, UART, रेडियो, रैंडम, मिस्क/रीसेट) का इस्तेमाल शुरू कर सकते हैं.

यह एपीआई लागू करना आपके इस्तेमाल के उदाहरण पर निर्भर करता है. अगर आप उदाहरण प्लैटफ़ॉर्म के लिए जनरेट किए गए सीएलआई और एनसीपी ऐप्लिकेशन का इस्तेमाल करना चाहते हैं, तो आपको यह एपीआई लागू करना होगा. अगर ऐसा नहीं है, तो कोई भी एपीआई उदाहरण के तौर पर दिए गए प्लैटफ़ॉर्म ड्राइवर को आपके सिस्टम/आरटीओएस में इंटिग्रेट करने के लिए लागू किया जा सकता है.