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

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

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

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

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

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

टाइप डायरेक्ट्री
किसी खास प्लैटफ़ॉर्म पर PAL लागू करना /openthread/examples/platforms/platform-name
हेडर फ़ाइलें — डेटा बार-बार अपडेट न करने वाला स्टोरेज एपीआई /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 एपीआई, UART इंटरफ़ेस के ज़रिए बुनियादी सीरियल पोर्ट कम्यूनिकेशन करता है.

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

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

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

  • होस्ट साइड से सही यूएसबी सीडीसी ड्राइवर इंस्टॉल करें
  • UThread एपीआई लागू करने की प्रोसेस को OpenThread साइड पर यूएसबी सीडीसी ड्राइवर (बीएसपी के साथ) के साथ बदलें. इसके लिए, समान फ़ंक्शन प्रोटोटाइप का इस्तेमाल करें

रेडियो

एपीआई एलान:

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

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

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

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

अन्य सुविधाएं

एपीआई एलान:

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

अलग-अलग तरह के रीसेट/रीसेट एपीआई, चिप पर सॉफ़्टवेयर रीसेट करने का तरीका बताता है, और पिछली बार रीसेट करने की वजह पूछता है.

एन्ट्रॉपी

एपीआई एलान:

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

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

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

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

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

डेटा बार-बार अपडेट नहीं करने वाला स्टोरेज

एपीआई से जुड़े एलान:

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

या

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

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

ये API, ऊपरी लेयर को दिखाते हैं:

  • ऐप्लिकेशन के डेटा को सेव करने के लिए इस्तेमाल होने वाला गैर-वाइनलेट स्टोरेज साइज़
  • फ़्लैश स् थिति कार्यवाहियां पढ़ें, लिखें, मिटाएं और क् वेरी करें

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

यह फ़्लैग आपकी /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 लाइब्रेरी से कॉल नहीं किया जाता है. हालांकि, यह आपके सिस्टम/आरटीओएस के लिए फ़ायदेमंद हो सकता है. इस सोर्स फ़ाइल में दूसरे मॉड्यूल को शुरू करने का तरीका भी लागू किया जा सकता है. जैसे, यूएआरटी, रेडियो, रैंडम, मिस्क/रीसेट.

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