প্লাটফর্ম অ্যাবস্ট্রাকশন লেয়ার এপিআই প্রয়োগ করুন

GitHub-এ উৎস দেখুন

OpenThread হল OS এবং প্ল্যাটফর্ম অজ্ঞেয়বাদী, একটি সংকীর্ণ প্ল্যাটফর্ম অ্যাবস্ট্রাকশন লেয়ার (PAL) সহ। এই PAL সংজ্ঞায়িত করে:

পোর্টিং আর্কিটেকচার
  • অ্যালার্ম সহ ফ্রি-চলমান টাইমারের জন্য অ্যালার্ম ইন্টারফেস
  • CLI এবং Spinel বার্তা যোগাযোগের জন্য বাস ইন্টারফেস (UART, SPI)
  • IEEE 802.15.4-2006 যোগাযোগের জন্য রেডিও ইন্টারফেস
  • GCC-নির্দিষ্ট প্রারম্ভিক রুটিন
  • প্রকৃত র্যান্ডম সংখ্যা তৈরির জন্য এনট্রপি
  • অ-উদ্বায়ী কনফিগারেশন স্টোরেজের জন্য সেটিংস পরিষেবা
  • OpenThread লগ বার্তা প্রদানের জন্য লগিং ইন্টারফেস
  • সিস্টেম-নির্দিষ্ট শুরুর রুটিন

অন্তর্নিহিত হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) বিল্ড সাপোর্ট প্যাকেজ (BSP) এর উপর ভিত্তি করে সমস্ত API প্রয়োগ করা উচিত।

API ফাইলগুলি নিম্নলিখিত ডিরেক্টরিগুলিতে স্থাপন করা উচিত:

টাইপ ডিরেক্টরি
প্ল্যাটফর্ম-নির্দিষ্ট PAL বাস্তবায়ন /openthread/examples/platforms/ platform-name
হেডার ফাইল - অ-উদ্বায়ী স্টোরেজ API /openthread/examples/platforms/utils
অন্য সব হেডার ফাইল /openthread/include/openthread/platform
এইচএএল বিএসপি /openthread/third_party/ platform-name

এলার্ম

API ঘোষণা:

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

অ্যালার্ম API উপরের স্তরের টাইমার বাস্তবায়নের জন্য মৌলিক সময় এবং অ্যালার্ম পরিষেবা সরবরাহ করে।

দুটি অ্যালার্ম পরিষেবার ধরন রয়েছে, মিলিসেকেন্ড এবং মাইক্রোসেকেন্ড । একটি নতুন হার্ডওয়্যার প্ল্যাটফর্মের জন্য মিলিসেকেন্ড প্রয়োজন৷ মাইক্রোসেকেন্ড ঐচ্ছিক।

UART

API ঘোষণা:

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

UART API UART ইন্টারফেসের মাধ্যমে মৌলিক সিরিয়াল পোর্ট যোগাযোগ প্রয়োগ করে।

যদিও OpenThread CLI এবং NCP অ্যাড-অনগুলি হোস্ট সাইডের সাথে যোগাযোগ করতে UART ইন্টারফেসের উপর নির্ভর করে, UART API সমর্থন ঐচ্ছিক। যাইহোক, এমনকি যদি আপনি আপনার নতুন হার্ডওয়্যার প্ল্যাটফর্মের উদাহরণে এই অ্যাড-অনগুলি ব্যবহার করার পরিকল্পনা না করেন, আমরা আপনাকে কয়েকটি কারণে সমর্থন যোগ করার সুপারিশ করছি:

  • পোর্টটি সঠিকভাবে কাজ করে তা যাচাই করার জন্য CLI কার্যকর
  • হারনেস অটোমেশন টুল পরীক্ষা এবং সার্টিফিকেশন উদ্দেশ্যে OpenThread নিয়ন্ত্রণ করতে UART ইন্টারফেস ব্যবহার করে

যদি লক্ষ্য হার্ডওয়্যার প্ল্যাটফর্ম UART এর পরিবর্তে একটি USB CDC মডিউল সমর্থন করে, তাহলে নিশ্চিত করুন:

  • হোস্ট সাইডে সঠিক USB CDC ড্রাইভার ইনস্টল করুন
  • একই ফাংশন প্রোটোটাইপ ব্যবহার করে OpenThread পাশে ইউএসবি সিডিসি ড্রাইভার (বিএসপি সহ) দিয়ে UART API বাস্তবায়ন প্রতিস্থাপন করুন

রেডিও

API ঘোষণা:

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

রেডিও এপিআই উপরের IEEE 802.15.4 MAC স্তর দ্বারা ডাকা সমস্ত প্রয়োজনীয় ফাংশন সংজ্ঞায়িত করে। রেডিও চিপ অবশ্যই 2.4GHz IEEE 802.15.4-2006 স্পেসিফিকেশনের সাথে সম্পূর্ণরূপে সঙ্গতিপূর্ণ হতে হবে।

এর বর্ধিত কম পাওয়ার বৈশিষ্ট্যের কারণে, OpenThread-এর জন্য ডিফল্টরূপে অটো ফ্রেম পেন্ডিং (পরোক্ষ ট্রান্সমিশন) বাস্তবায়নের জন্য সমস্ত প্ল্যাটফর্মের প্রয়োজন, এবং উত্স ঠিকানা ম্যাচ radio.h সোর্স ফাইলে প্রয়োগ করা উচিত।

যাইহোক, যদি আপনার নতুন হার্ডওয়্যার প্ল্যাটফর্মের উদাহরণ রিসোর্স সীমিত হয়, সোর্স অ্যাড্রেস টেবিলটি শূন্য দৈর্ঘ্য হিসাবে সংজ্ঞায়িত করা যেতে পারে। আরও তথ্যের জন্য অটো ফ্রেম মুলতুবি দেখুন।

বিবিধ/রিসেট

API ঘোষণা:

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

Misc/Reset API চিপে সফ্টওয়্যার রিসেট করার একটি পদ্ধতি প্রদান করে এবং শেষ রিসেটের কারণ অনুসন্ধান করে।

এনট্রপি

API ঘোষণা:

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

এনট্রপি এপিআই উপরের স্তরের জন্য একটি সত্য র্যান্ডম নম্বর জেনারেটর (TRNG) প্রদান করে, যা সমগ্র OpenThread নেটওয়ার্কের নিরাপত্তা সম্পদ বজায় রাখতে ব্যবহৃত হয়। API-এর নিশ্চয়তা দেওয়া উচিত যে প্রতিটি ফাংশন কলের জন্য একটি নতুন র্যান্ডম নম্বর তৈরি হয়েছে। TRNG দ্বারা প্রভাবিত নিরাপত্তা সম্পদ অন্তর্ভুক্ত:

  • AES সিসিএম নেই
  • এলোমেলো বিলম্বিত জিটার
  • ডিভাইসের বর্ধিত ঠিকানা
  • ট্রিকল টাইমারে প্রাথমিক এলোমেলো সময়কাল
  • CoAP টোকেন/মেসেজ আইডি

উল্লেখ্য যে অনেক প্ল্যাটফর্ম ইতিমধ্যেই একটি র্যান্ডম নম্বর জেনারেটরকে একীভূত করেছে, এর BSP প্যাকেজে API-কে প্রকাশ করেছে। টার্গেট হার্ডওয়্যার প্ল্যাটফর্ম টিআরএনজি সমর্থন না করলে, একটি নির্দিষ্ট দৈর্ঘ্যের র্যান্ডম নম্বর তৈরি করতে ADC মডিউল স্যাম্পলিং ব্যবহার করার কথা বিবেচনা করুন। TRNG প্রয়োজনীয়তা (uint32_t) পূরণ করতে প্রয়োজন হলে একাধিক পুনরাবৃত্তির নমুনা।

যখন ম্যাক্রো MBEDTLS_ENTROPY_HARDWARE_ALT 1 তে সেট করা হয়, তখন এই API-কে mbedTLS লাইব্রেরিতে ব্যবহৃত হার্ডওয়্যার এনট্রপি তৈরি করার একটি পদ্ধতিও প্রদান করা উচিত।

অ-উদ্বায়ী স্টোরেজ

API ঘোষণা:

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

বা

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

উপরে তালিকাভুক্ত দুটি API-এর একটি প্রয়োগ করে অ-উদ্বায়ী সঞ্চয়ের প্রয়োজনীয়তা সন্তুষ্ট করা যেতে পারে। ফ্ল্যাশ এপিআই একটি ফ্ল্যাশ স্টোরেজ ড্রাইভার প্রয়োগ করে, যখন সেটিংস এপিআই উপরের স্তরে একটি অন্তর্নিহিত ফ্ল্যাশ অপারেশন বাস্তবায়নের জন্য ফাংশন প্রদান করে।

এই APIগুলি উপরের স্তরে প্রকাশ করে:

  • অ্যাপ্লিকেশান ডেটা সঞ্চয় করতে ব্যবহৃত অ-উদ্বায়ী সঞ্চয়স্থানের আকার (উদাহরণস্বরূপ, সক্রিয়/মুলতুবি অপারেশনাল ডেটাসেট, বর্তমান নেটওয়ার্ক পরামিতি এবং রিসেট করার পরে পুনরায় সংযুক্তির জন্য থ্রেড ডিভাইসের শংসাপত্র)
  • ফ্ল্যাশ স্ট্যাটাস অপারেশন পড়ুন, লিখুন, মুছুন এবং অনুসন্ধান করুন

প্ল্যাটফর্মের কোন API ব্যবহার করা উচিত তা নির্দেশ করতে আপনার প্ল্যাটফর্ম উদাহরণের মূল কনফিগারেশন ফাইলে OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE ব্যবহার করুন। 1 তে সেট করা হলে, ফ্ল্যাশ এপিআই প্রয়োগ করতে হবে। অন্যথায়, সেটিংস API প্রয়োগ করতে হবে।

এই পতাকাটি অবশ্যই আপনার /openthread/examples/platforms/ platform-name /openthread-core- platform-name -config.h ফাইলে সেট করতে হবে।

লগিং

API ঘোষণা:

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

লগিং এপিআই ওপেন থ্রেডের লগিং এবং ডিবাগ কার্যকারিতা প্রয়োগ করে, একাধিক স্তরের ডিবাগ আউটপুট উপলব্ধ। আপনি যদি আপনার নতুন হার্ডওয়্যার প্ল্যাটফর্মের উদাহরণে OpenThread এর লগিং ব্যবহার করার পরিকল্পনা না করেন তবে এই APIটি ঐচ্ছিক।

সর্বোচ্চ এবং সবচেয়ে বিস্তারিত স্তর হল OPENTHREAD_LOG_LEVEL_DEBG , যা সিরিয়াল পোর্ট বা টার্মিনালের মাধ্যমে সমস্ত কাঁচা প্যাকেট তথ্য এবং লগ লাইনগুলি প্রিন্ট করে৷ একটি ডিবাগ লেভেল বেছে নিন যা আপনার চাহিদা মেটাবে।

সিস্টেম-নির্দিষ্ট

API ঘোষণা:

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

সিস্টেম-নির্দিষ্ট API প্রাথমিকভাবে নির্বাচিত হার্ডওয়্যার প্ল্যাটফর্মের জন্য প্রারম্ভিকতা এবং ডিইনিশিয়ালাইজেশন অপারেশন প্রদান করে। এই APIটি OpenThread লাইব্রেরি নিজেই কল করে না, তবে আপনার সিস্টেম/RTOS এর জন্য উপযোগী হতে পারে। আপনি এই সোর্স ফাইলে অন্যান্য মডিউলের (উদাহরণস্বরূপ, UART, রেডিও, র্যান্ডম, মিসক/রিসেট) শুরু করতে পারেন।

এই API এর বাস্তবায়ন আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে। আপনি যদি একটি উদাহরণ প্ল্যাটফর্মের জন্য জেনারেট করা CLI এবং NCP অ্যাপ্লিকেশনগুলি ব্যবহার করতে চান তবে আপনাকে অবশ্যই এই API প্রয়োগ করতে হবে। অন্যথায়, আপনার সিস্টেম/RTOS-এ উদাহরণ প্ল্যাটফর্ম ড্রাইভারগুলিকে একীভূত করতে যেকোনো API প্রয়োগ করা যেতে পারে।