স্মার্টফোনগুলিতে বেশ কয়েকটি প্রসেসর থাকে, প্রতিটি বিভিন্ন কাজ সম্পাদনের জন্য অপ্টিমাইজ করা হয়। যাইহোক, অ্যান্ড্রয়েড শুধুমাত্র একটি প্রসেসরে চলে: অ্যাপ্লিকেশন প্রসেসর (এপি)। গেমিংয়ের মতো স্ক্রিন-অন ব্যবহারের ক্ষেত্রে দুর্দান্ত পারফরম্যান্স সরবরাহ করার জন্য AP টিউন করা হয়েছে, তবে এটি এমন বৈশিষ্ট্যগুলিকে সমর্থন করার জন্য খুব বেশি ক্ষুধার্ত যেগুলির জন্য ঘন ঘন, সংক্ষিপ্ত বিস্ফোরণের প্রয়োজন হয়, এমনকি যখন স্ক্রীন বন্ধ থাকে তখনও। ছোট প্রসেসরগুলি এই কাজের চাপগুলিকে আরও দক্ষতার সাথে পরিচালনা করতে সক্ষম হয়, ব্যাটারির জীবনকে উল্লেখযোগ্যভাবে প্রভাবিত না করেই তাদের কাজগুলি সম্পূর্ণ করে৷ যাইহোক, এই কম-পাওয়ার প্রসেসরগুলিতে সফ্টওয়্যার পরিবেশগুলি আরও সীমিত এবং ব্যাপকভাবে পরিবর্তিত হতে পারে, ক্রস-প্ল্যাটফর্ম বিকাশকে কঠিন করে তোলে।
কনটেক্সট হাব রানটাইম এনভায়রনমেন্ট (CHRE) একটি সাধারণ, প্রমিত, এমবেডেড-বান্ধব API সহ একটি কম-পাওয়ার প্রসেসরে অ্যাপ্লিকেশন চালানোর জন্য একটি সাধারণ প্ল্যাটফর্ম প্রদান করে। CHRE ডিভাইস OEM এবং তাদের বিশ্বস্ত অংশীদারদের AP থেকে প্রসেসিং অফলোড করা, ব্যাটারি বাঁচাতে এবং ব্যবহারকারীর অভিজ্ঞতার বিভিন্ন ক্ষেত্র উন্নত করতে এবং সর্বদা চালু, প্রাসঙ্গিকভাবে সচেতন বৈশিষ্ট্যগুলির একটি শ্রেণী সক্ষম করে তোলে, বিশেষ করে যেগুলি মেশিনের প্রয়োগের সাথে জড়িত। অ্যাম্বিয়েন্ট সেন্সিং শেখা।
মূল ধারণা
CHRE হল একটি সফ্টওয়্যার পরিবেশ যেখানে ছোট নেটিভ অ্যাপস, নামক ন্যানোঅ্যাপস , একটি কম-পাওয়ার প্রসেসরে কার্যকর করে এবং সাধারণ CHRE API-এর মাধ্যমে অন্তর্নিহিত সিস্টেমের সাথে যোগাযোগ করে। CHRE API-এর যথাযথ বাস্তবায়ন ত্বরান্বিত করার জন্য, CHRE-এর একটি ক্রস-প্ল্যাটফর্ম রেফারেন্স বাস্তবায়ন AOSP-তে অন্তর্ভুক্ত করা হয়েছে। রেফারেন্স বাস্তবায়ন প্ল্যাটফর্ম বিমূর্ত স্তর (PALs) একটি সিরিজের মাধ্যমে অন্তর্নিহিত হার্ডওয়্যার এবং সফ্টওয়্যার সাধারণ কোড এবং বিমূর্ততা অন্তর্ভুক্ত করে। ন্যানোঅ্যাপগুলি প্রায় সবসময়ই অ্যান্ড্রয়েডে চলমান এক বা একাধিক ক্লায়েন্ট অ্যাপের সাথে সংযুক্ত থাকে, যা সীমিত-অ্যাক্সেস ContextHubManager
সিস্টেম API-এর মাধ্যমে CHRE এবং ন্যানোঅ্যাপের সাথে ইন্টারঅ্যাক্ট করে।
উচ্চ স্তরে, সামগ্রিকভাবে CHRE এবং অ্যান্ড্রয়েডের আর্কিটেকচারের মধ্যে সমান্তরাল টানা যেতে পারে। যাইহোক, কয়েকটি গুরুত্বপূর্ণ পার্থক্য রয়েছে:
- CHRE শুধুমাত্র নেটিভ কোডে (C বা C++) বিকশিত ন্যানোঅ্যাপ চালানো সমর্থন করে; জাভা সমর্থিত নয়।
- সম্পদের সীমাবদ্ধতা এবং নিরাপত্তা সীমাবদ্ধতার কারণে, CHRE নির্বিচারে তৃতীয় পক্ষের অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলির দ্বারা ব্যবহারের জন্য উন্মুক্ত নয়৷ শুধুমাত্র সিস্টেম-বিশ্বস্ত অ্যাপই এটি অ্যাক্সেস করতে পারে।
এছাড়াও CHRE ধারণা এবং একটি সেন্সর হাবের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য তৈরি করতে হবে। যদিও সেন্সর হাব এবং CHRE বাস্তবায়নের জন্য একই হার্ডওয়্যার ব্যবহার করা সাধারণ, CHRE নিজেই Android সেন্সর HAL-এর জন্য প্রয়োজনীয় সেন্সর ক্ষমতা প্রদান করে না। CHRE কনটেক্সট হাব HAL-এর সাথে আবদ্ধ, এবং এটি AP-কে জড়িত না করেই সেন্সর ডেটা গ্রহণ করার জন্য একটি ডিভাইস-নির্দিষ্ট সেন্সর ফ্রেমওয়ার্কের ক্লায়েন্ট হিসাবে কাজ করে।
চিত্র 1. CHRE ফ্রেমওয়ার্ক আর্কিটেকচার
প্রসঙ্গ হাব HAL
কনটেক্সট হাব হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) হল অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এবং ডিভাইসের CHRE বাস্তবায়নের মধ্যে ইন্টারফেস, hardware/interfaces/contexthub
এ সংজ্ঞায়িত করা হয়েছে। কনটেক্সট হাব HAL সেই APIগুলিকে সংজ্ঞায়িত করে যার মাধ্যমে অ্যান্ড্রয়েড ফ্রেমওয়ার্ক উপলব্ধ প্রসঙ্গ হাব এবং তাদের ন্যানোঅ্যাপগুলি আবিষ্কার করে, মেসেজ পাস করার মাধ্যমে সেই ন্যানোঅ্যাপগুলির সাথে ইন্টারঅ্যাক্ট করে এবং ন্যানোঅ্যাপগুলিকে লোড এবং আনলোড করার অনুমতি দেয়৷ কনটেক্সট হাব HAL-এর একটি রেফারেন্স বাস্তবায়ন যা CHRE এর রেফারেন্স বাস্তবায়নের সাথে কাজ করে system/chre/host
এ উপলব্ধ।
এই ডকুমেন্টেশন এবং HAL সংজ্ঞার মধ্যে বিরোধের ক্ষেত্রে, HAL সংজ্ঞা প্রাধান্য পায়।
সূচনা
যখন অ্যান্ড্রয়েড বুট আপ হয়, কনটেক্সটহাবসার্ভিস ডিভাইসে কোনো কনটেক্সট হাব উপলব্ধ আছে কিনা তা নির্ধারণ করতে getHubs()
HAL ফাংশনকে আহ্বান করে। এটি একটি ব্লকিং, এক-কালীন কল, তাই বুটকে বিলম্বিত এড়াতে এটিকে দ্রুত শেষ করতে হবে এবং এটিকে অবশ্যই একটি সঠিক ফলাফল দিতে হবে, কারণ পরবর্তীতে নতুন প্রসঙ্গ হাব চালু করা যাবে না।
ন্যানোঅ্যাপস লোড এবং আনলোড করুন
একটি কনটেক্সট হাব ন্যানোঅ্যাপগুলির একটি সেট অন্তর্ভুক্ত করতে পারে যা ডিভাইসের ছবিতে অন্তর্ভুক্ত থাকে এবং যখন CHRE শুরু হয় তখন লোড হয়৷ এগুলি প্রিলোডেড ন্যানোঅ্যাপস হিসাবে পরিচিত, এবং queryApps()
এর প্রথম সম্ভাব্য প্রতিক্রিয়াতে অন্তর্ভুক্ত করা উচিত।
কনটেক্সট হাব এইচএএল loadNanoApp()
এবং unloadNanoApp()
ফাংশনের মাধ্যমে রানটাইমে গতিশীলভাবে ন্যানোঅ্যাপগুলি লোড এবং আনলোড করা সমর্থন করে। ডিভাইসের CHRE হার্ডওয়্যার এবং সফ্টওয়্যার বাস্তবায়নের জন্য নির্দিষ্ট একটি বাইনারি বিন্যাসে HAL-কে Nanoapps প্রদান করা হয়।
যদি একটি ন্যানোঅ্যাপ লোড করার জন্য বাস্তবায়নের সাথে এটিকে ননভোলাটাইল মেমরিতে লেখার সাথে জড়িত থাকে, যেমন CHRE চালিত প্রসেসরের সাথে সংযুক্ত ফ্ল্যাশ স্টোরেজ, তাহলে CHRE বাস্তবায়নকে অবশ্যই প্রতিবন্ধী অবস্থায় এই গতিশীল ন্যানোঅ্যাপগুলির সাথে বুট আপ করতে হবে। এর মানে হল যে এইচএএল-এর মাধ্যমে একটি enableNanoapp()
অনুরোধ না পাওয়া পর্যন্ত ন্যানোঅ্যাপের কোডের কোনোটিই কার্যকর করা হয় না। প্রিলোড করা ন্যানোঅ্যাপগুলি সক্রিয় অবস্থায় আরম্ভ করতে পারে।
কনটেক্সট হাব রিস্টার্ট হয়
যদিও স্বাভাবিক অপারেশন চলাকালীন CHRE পুনরায় চালু হবে বলে আশা করা হয় না, এটি অপ্রত্যাশিত অবস্থা থেকে পুনরুদ্ধার করা প্রয়োজন হতে পারে যেমন একটি আনম্যাপ করা মেমরি ঠিকানা অ্যাক্সেস করার চেষ্টা করা। এই পরিস্থিতিতে, CHRE স্বাধীনভাবে Android থেকে পুনরায় আরম্ভ করে। HAL RESTARTED
ইভেন্টের মাধ্যমে অ্যান্ড্রয়েডকে এটি সম্পর্কে অবহিত করে, যা CHRE-কে পুনরায় চালু করার পরেই এটি পাঠাতে হবে যাতে এটি নতুন অনুরোধ গ্রহণ করতে পারে, যেমন queryApps()
৷
CHRE সিস্টেম ওভারভিউ
CHRE একটি ইভেন্ট-চালিত আর্কিটেকচারের চারপাশে ডিজাইন করা হয়েছে, যেখানে গণনার প্রাথমিক ইউনিট হল একটি ইভেন্ট যা ন্যানোঅ্যাপের ইভেন্ট হ্যান্ডলিং এন্ট্রি পয়েন্টে পাস করা হয়। যদিও CHRE ফ্রেমওয়ার্ক মাল্টিথ্রেড করা যেতে পারে, একটি প্রদত্ত ন্যানোঅ্যাপ সমান্তরালভাবে একাধিক থ্রেড থেকে চালানো হয় না। CHRE ফ্রেমওয়ার্ক একটি প্রদত্ত ন্যানোঅ্যাপের সাথে তিনটি ন্যানোঅ্যাপ এন্ট্রি পয়েন্টের একটির মাধ্যমে ইন্টারঅ্যাক্ট করে ( nanoappStart()
, nanoappHandleEvent()
, এবং nanoappEnd()
) অথবা একটি পূর্ববর্তী CHRE API কলে প্রদত্ত একটি কলব্যাকের মাধ্যমে, এবং ন্যানোঅ্যাপগুলি CHRE ফ্রেমওয়ার্কের সাথে যোগাযোগ করে এবং CHRE API এর মাধ্যমে অন্তর্নিহিত সিস্টেম। CHRE API সেন্সর, GNSS, Wi-Fi, WWAN এবং অডিও সহ প্রাসঙ্গিক সংকেতগুলি অ্যাক্সেস করার জন্য মৌলিক ক্ষমতাগুলির একটি সেটের পাশাপাশি সুবিধা প্রদান করে এবং এটি বিক্রেতা-নির্দিষ্ট ন্যানোঅ্যাপগুলির দ্বারা ব্যবহারের জন্য অতিরিক্ত বিক্রেতা-নির্দিষ্ট ক্ষমতাগুলির সাথে প্রসারিত করা যেতে পারে। .
সিস্টেম তৈরি করুন
যদিও কনটেক্সট হাব HAL এবং অন্যান্য প্রয়োজনীয় AP-সাইড উপাদানগুলি অ্যান্ড্রয়েডের পাশাপাশি তৈরি করা হয়েছে, CHRE-এর মধ্যে চলে এমন কোডগুলির প্রয়োজনীয়তা থাকতে পারে যা এটিকে Android বিল্ড সিস্টেমের সাথে বেমানান করে তোলে, যেমন একটি বিশেষ টুলচেনের প্রয়োজন। অতএব, AOSP-এ CHRE প্রকল্পটি ন্যানোঅ্যাপস কম্পাইল করার জন্য GNU Make-এর উপর ভিত্তি করে একটি সরলীকৃত বিল্ড সিস্টেম প্রদান করে এবং, ঐচ্ছিকভাবে, CHRE ফ্রেমওয়ার্ককে লাইব্রেরিতে তৈরি করে যা সিস্টেমের সাথে একীভূত করা যায়। CHRE-এর জন্য সমর্থন যোগ করা ডিভাইস নির্মাতাদের তাদের লক্ষ্য ডিভাইসগুলির জন্য বিল্ড সিস্টেম সমর্থনকে AOSP-তে একীভূত করা উচিত।
CHRE API C99 ভাষার স্ট্যান্ডার্ডে লেখা হয়েছে, এবং রেফারেন্স বাস্তবায়ন রিসোর্স-সীমিত অ্যাপের জন্য উপযুক্ত C++11-এর একটি সীমাবদ্ধ উপসেট ব্যবহার করে।
CHRE API
CHRE API হল C হেডার ফাইলের একটি সংগ্রহ যা একটি ন্যানোঅ্যাপ এবং সিস্টেমের মধ্যে সফ্টওয়্যার ইন্টারফেসকে সংজ্ঞায়িত করে। এটি CHRE সমর্থন করে এমন সমস্ত ডিভাইস জুড়ে ন্যানোঅ্যাপস কোডকে সামঞ্জস্যপূর্ণ করার জন্য ডিজাইন করা হয়েছে, যার অর্থ হল একটি নতুন ডিভাইসের ধরন সমর্থন করার জন্য ন্যানোঅ্যাপের সোর্স কোড পরিবর্তন করার প্রয়োজন নেই, যদিও এটি লক্ষ্য ডিভাইসের প্রসেসরের জন্য বিশেষভাবে পুনরায় সংকলন করা প্রয়োজন হতে পারে। নির্দেশ সেট বা অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABI)। CHRE আর্কিটেকচার এবং API ডিজাইন এছাড়াও নিশ্চিত করে যে ন্যানোঅ্যাপগুলি CHRE API-এর বিভিন্ন সংস্করণে বাইনারি সামঞ্জস্যপূর্ণ, যার মানে হল যে একটি সিস্টেমে চালানোর জন্য একটি ন্যানোঅ্যাপকে পুনরায় কম্পাইল করার প্রয়োজন নেই যা তুলনায় CHRE API-এর একটি ভিন্ন সংস্করণ প্রয়োগ করে। টার্গেট API যার বিরুদ্ধে ন্যানোঅ্যাপ কম্পাইল করা হয়েছে। অন্য কথায়, যদি একটি ন্যানোঅ্যাপ বাইনারি এমন একটি ডিভাইসে চলে যা CHRE API v1.3 সমর্থন করে এবং সেই ডিভাইসটি CHRE API v1.4 সমর্থন করার জন্য আপগ্রেড করা হয়, একই ন্যানোঅ্যাপ বাইনারি কাজ করতে থাকে। একইভাবে, ন্যানোঅ্যাপ CHRE API v1.2-এ চলতে পারে এবং রানটাইমে নির্ধারণ করতে পারে যে এটির ব্যবহার অর্জনের জন্য API v1.3 থেকে সক্ষমতার প্রয়োজন আছে কিনা বা এটি কাজ করতে পারে কিনা, সম্ভাব্যভাবে আকর্ষণীয় বৈশিষ্ট্যের অবনতি সহ।
CHRE API-এর নতুন সংস্করণগুলি অ্যান্ড্রয়েডের সাথে প্রকাশ করা হয়েছে, যদিও CHRE বাস্তবায়নটি বিক্রেতা বাস্তবায়নের অংশ হিসাবে, একটি ডিভাইসে সমর্থিত CHRE API সংস্করণটি একটি Android সংস্করণের সাথে লিঙ্ক করা আবশ্যক নয়৷
সংস্করণ সারাংশ
অ্যান্ড্রয়েড HIDL ভার্সনিং স্কিমের মতো, CHRE API শব্দার্থিক সংস্করণ অনুসরণ করে। প্রধান সংস্করণটি বাইনারি সামঞ্জস্য নির্দেশ করে, যখন পশ্চাদগামী-সামঞ্জস্যপূর্ণ বৈশিষ্ট্যগুলি চালু করা হয় তখন ছোট সংস্করণটি বৃদ্ধি পায়। CHRE API-এ সোর্স কোডের টীকা অন্তর্ভুক্ত রয়েছে তা শনাক্ত করার জন্য যে কোন সংস্করণটি একটি ফাংশন বা প্যারামিটার চালু করেছে, উদাহরণস্বরূপ @since v1.1
।
CHRE বাস্তবায়ন chreGetVersion()
এর মাধ্যমে একটি প্ল্যাটফর্ম-নির্দিষ্ট প্যাচ সংস্করণও প্রকাশ করে, যা ইঙ্গিত করে যে কখন বাগ সংশোধন বা ছোটখাট আপডেট বাস্তবায়নে করা হয়।
সংস্করণ 1.0 (Android 7)
সেন্সর এবং মূল ন্যানোঅ্যাপ ক্ষমতাগুলির জন্য সমর্থন অন্তর্ভুক্ত করে, যেমন ইভেন্ট এবং টাইমার।
সংস্করণ 1.1 (Android 8)
GNSS অবস্থান এবং কাঁচা পরিমাপ, Wi-Fi স্ক্যানিং, এবং মোবাইল নেটওয়ার্ক তথ্য, ন্যানোঅ্যাপ-টু-ন্যানোঅ্যাপ যোগাযোগ সক্ষম করার জন্য সাধারণ পরিমার্জন সহ, এবং অন্যান্য উন্নতির মাধ্যমে অবস্থান ক্ষমতার পরিচয় দেয়৷
সংস্করণ 1.2 (Android 9)
একটি কম-পাওয়ার মাইক্রোফোন, Wi-Fi RTT রেঞ্জিং, AP জেগে ওঠা এবং ঘুমের বিজ্ঞপ্তি এবং অন্যান্য উন্নতি থেকে ডেটার জন্য সমর্থন যোগ করে।
সংস্করণ 1.3 (Android 10)
সেন্সর ক্রমাঙ্কন ডেটা সম্পর্কিত ক্ষমতা বাড়ায়, চাহিদা অনুযায়ী ব্যাচড সেন্সর ডেটা ফ্লাশ করার জন্য সমর্থন যোগ করে, সেন্সরের ধরন সনাক্ত করার ধাপটি সংজ্ঞায়িত করে এবং অতিরিক্ত নির্ভুলতা ক্ষেত্রগুলির সাথে GNSS অবস্থান ইভেন্টগুলি প্রসারিত করে।
সংস্করণ 1.4 (Android 11)
5G সেল তথ্য, ন্যানোঅ্যাপ ডিবাগ ডাম্প এবং অন্যান্য উন্নতির জন্য সমর্থন যোগ করে।
বাধ্যতামূলক সিস্টেম বৈশিষ্ট্য
সেন্সরগুলির মতো প্রাসঙ্গিক সংকেতের উত্সগুলিকে ঐচ্ছিক বৈশিষ্ট্যের ক্ষেত্রগুলিতে শ্রেণীবদ্ধ করা হলেও, সমস্ত CHRE বাস্তবায়নের জন্য কয়েকটি মূল ফাংশন প্রয়োজন৷ এর মধ্যে রয়েছে মূল সিস্টেম এপিআই, যেমন টাইমার সেট করা, অ্যাপ্লিকেশন প্রসেসরে ক্লায়েন্টদের বার্তা পাঠানো এবং গ্রহণ করা, লগিং করা এবং অন্যান্য। সম্পূর্ণ বিবরণের জন্য, API শিরোনাম দেখুন।
CHRE API-তে কোডকৃত মূল সিস্টেম বৈশিষ্ট্যগুলি ছাড়াও, প্রসঙ্গ হাব HAL স্তরে নির্দিষ্ট করা বাধ্যতামূলক CHRE সিস্টেম-স্তরের বৈশিষ্ট্যগুলিও রয়েছে৷ এর মধ্যে সবচেয়ে উল্লেখযোগ্য হল ন্যানোঅ্যাপগুলিকে গতিশীলভাবে লোড এবং আনলোড করার ক্ষমতা।
C/C++ স্ট্যান্ডার্ড লাইব্রেরি
মেমরির ব্যবহার এবং সিস্টেমের জটিলতা কমাতে, CHRE বাস্তবায়নের জন্য শুধুমাত্র স্ট্যান্ডার্ড C এবং C++ লাইব্রেরির একটি উপসেট এবং রানটাইম সমর্থনের প্রয়োজন ভাষার বৈশিষ্ট্যগুলিকে সমর্থন করতে হবে। এই নীতিগুলি অনুসরণ করে, কিছু বৈশিষ্ট্যগুলি তাদের মেমরি এবং ব্যাপক OS-স্তরের নির্ভরতার কারণে স্পষ্টভাবে বাদ দেওয়া হয়েছে এবং অন্যগুলি কারণ সেগুলি আরও উপযুক্ত CHRE-নির্দিষ্ট API দ্বারা প্রতিস্থাপিত হয়েছে৷ যদিও একটি সম্পূর্ণ তালিকা বোঝানো হয়নি, নিম্নলিখিত ক্ষমতাগুলি ন্যানোঅ্যাপগুলিতে উপলব্ধ করার উদ্দেশ্যে নয়:
- C++ ব্যতিক্রম এবং রানটাইম টাইপ তথ্য (RTTI)
- স্ট্যান্ডার্ড লাইব্রেরি মাল্টিথ্রেডিং সমর্থন, C++11 হেডার সহ
<thread>
,<mutex>
,<atomic>
,<future>
- C এবং C++ স্ট্যান্ডার্ড ইনপুট/আউটপুট লাইব্রেরি
- C++ স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি (STL)
- C++ স্ট্যান্ডার্ড রেগুলার এক্সপ্রেশন লাইব্রেরি
- স্ট্যান্ডার্ড ফাংশনগুলির মাধ্যমে গতিশীল মেমরি বরাদ্দকরণ (উদাহরণস্বরূপ,
malloc
,calloc
,realloc
,free
,operator new
), এবং অন্যান্য স্ট্যান্ডার্ড লাইব্রেরি ফাংশন যা সহজাতভাবে গতিশীল বরাদ্দ ব্যবহার করে, যেমনstd::unique_ptr
- স্থানীয়করণ এবং ইউনিকোড অক্ষর সমর্থন
- তারিখ এবং সময় লাইব্রেরি
- ফাংশন যা স্বাভাবিক প্রোগ্রাম প্রবাহ পরিবর্তন করে, যার মধ্যে রয়েছে
<setjmp.h>
,<signal.h>
,abort
,std::terminate
-
system
,getenv
সহ হোস্ট পরিবেশে প্রবেশ করা - POSIX এবং অন্যান্য লাইব্রেরিগুলি C99 বা C++11 ভাষার মানদণ্ডে অন্তর্ভুক্ত নয়
অনেক ক্ষেত্রে, CHRE API ফাংশন এবং ইউটিলিটি লাইব্রেরি থেকে সমতুল্য ক্ষমতা পাওয়া যায়। উদাহরণস্বরূপ, অ্যান্ড্রয়েড লগক্যাট সিস্টেমকে লক্ষ্য করে ডিবাগ লগিংয়ের জন্য chreLog
ব্যবহার করা যেতে পারে, যেখানে একটি আরও ঐতিহ্যগত প্রোগ্রাম printf
বা std::cout
ব্যবহার করতে পারে।
বিপরীতে, কিছু স্ট্যান্ডার্ড লাইব্রেরি ক্ষমতা প্রয়োজন। একটি ন্যানোঅ্যাপ বাইনারিতে অন্তর্ভুক্তির জন্য স্ট্যাটিক লাইব্রেরির মাধ্যমে বা ন্যানোঅ্যাপ এবং সিস্টেমের মধ্যে গতিশীল সংযোগের মাধ্যমে এগুলি প্রকাশ করা প্ল্যাটফর্ম বাস্তবায়নের উপর নির্ভর করে। এটি অন্তর্ভুক্ত, কিন্তু সীমাবদ্ধ নয়:
- স্ট্রিং এবং অ্যারে ইউটিলিটি:
memcmp
,memcpy
,memmove
,memset
,strlen
গণিত লাইব্রেরি: সাধারণত ব্যবহৃত একক-নির্ভুল ফ্লোটিং-পয়েন্ট ফাংশন:
- বেসিক অপারেশন:
ceilf
,fabsf
,floorf
,fmaxf
,fminf
,fmodf
,roundf
,lroundf
,remainderf
- সূচকীয় এবং পাওয়ার ফাংশন:
expf
,log2f
,powf
,sqrtf
- ত্রিকোণমিতিক এবং হাইপারবোলিক ফাংশন:
sinf
,cosf
,tanf
,asinf
,acosf
,atan2f
,tanhf
- বেসিক অপারেশন:
যদিও কিছু অন্তর্নিহিত প্ল্যাটফর্ম অতিরিক্ত ক্ষমতা সমর্থন করে, একটি ন্যানোঅ্যাপ CHRE বাস্তবায়ন জুড়ে পোর্টেবল বলে বিবেচিত হয় না যদি না এটি CHRE API ফাংশন এবং অনুমোদিত স্ট্যান্ডার্ড লাইব্রেরি ফাংশনগুলির বাহ্যিক নির্ভরতাকে সীমাবদ্ধ না করে।
ঐচ্ছিক বৈশিষ্ট্য
হার্ডওয়্যার এবং সফ্টওয়্যার প্রচারের জন্য, CHRE API-কে বৈশিষ্ট্যযুক্ত এলাকায় ভাগ করা হয়েছে, যেগুলি API দৃষ্টিকোণ থেকে ঐচ্ছিক বলে বিবেচিত হয়। যদিও এই বৈশিষ্ট্যগুলির একটি সামঞ্জস্যপূর্ণ CHRE বাস্তবায়ন সমর্থন করার প্রয়োজন নাও হতে পারে, তবে তাদের একটি নির্দিষ্ট ন্যানোঅ্যাপকে সমর্থন করার প্রয়োজন হতে পারে। এমনকি যদি একটি প্ল্যাটফর্ম API-এর একটি নির্দিষ্ট সেট সমর্থন না করে, সেই ফাংশনগুলিকে উল্লেখ করে এমন ন্যানোঅ্যাপগুলি তৈরি করতে এবং লোড করতে সক্ষম হতে হবে।
সেন্সর
CHRE API অ্যাক্সিলোমিটার, জাইরোস্কোপ, ম্যাগনেটোমিটার, অ্যাম্বিয়েন্ট লাইট সেন্সর এবং প্রক্সিমিটি সহ সেন্সর থেকে ডেটা অনুরোধ করার ক্ষমতা প্রদান করে। এই API গুলিকে Android সেন্সর API-এর মতো একটি বৈশিষ্ট্য সেট প্রদান করার জন্য বোঝানো হয়েছে, যার মধ্যে শক্তি খরচ কমাতে ব্যাচিং সেন্সর নমুনাগুলির জন্য সমর্থন রয়েছে৷ CHRE-এর মধ্যে সেন্সর ডেটা প্রক্রিয়াকরণ AP-তে চলার তুলনায় অনেক কম শক্তি এবং গতি সংকেতগুলির কম লেটেন্সি প্রক্রিয়াকরণ সক্ষম করে।
জিএনএসএস
CHRE একটি গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS), জিপিএস এবং অন্যান্য স্যাটেলাইট নক্ষত্রমন্ডল সহ অবস্থান ডেটার অনুরোধ করার জন্য API সরবরাহ করে। এর মধ্যে পর্যায়ক্রমিক অবস্থান সংশোধনের জন্য অনুরোধগুলি, সেইসাথে কাঁচা পরিমাপ ডেটা অন্তর্ভুক্ত রয়েছে, যদিও উভয়ই স্বাধীন ক্ষমতা। যেহেতু CHRE-এর GNSS সাবসিস্টেমের সাথে সরাসরি লিঙ্ক রয়েছে, তাই AP-ভিত্তিক GNSS অনুরোধের তুলনায় শক্তি হ্রাস পেয়েছে, কারণ AP একটি অবস্থান সেশনের সমগ্র জীবনচক্রের সময় ঘুমিয়ে থাকতে পারে।
ওয়াই-ফাই
CHRE প্রাথমিকভাবে অবস্থানের উদ্দেশ্যে Wi-Fi চিপের সাথে ইন্টারঅ্যাক্ট করার ক্ষমতা প্রদান করে। যদিও GNSS বহিরঙ্গন অবস্থানের জন্য ভাল কাজ করে, Wi-Fi স্ক্যানের ফলাফলগুলি বাড়ির ভিতরে এবং উন্নত এলাকায় সঠিক অবস্থানের তথ্য প্রদান করতে পারে। একটি স্ক্যানের জন্য AP-কে জাগানোর খরচ এড়ানোর পাশাপাশি, CHRE সংযোগের উদ্দেশ্যে Wi-Fi ফার্মওয়্যার দ্বারা সম্পাদিত Wi-Fi স্ক্যানের ফলাফল শুনতে পারে, যা সাধারণত পাওয়ারের কারণে AP-তে বিতরণ করা হয় না। প্রাসঙ্গিক উদ্দেশ্যে কানেক্টিভিটি স্ক্যান ব্যবহার করা মোট Wi-Fi স্ক্যানের সংখ্যা কমাতে সাহায্য করে, শক্তি সাশ্রয় করে।
CHRE API v1.1-এ Wi-Fi-এর জন্য সমর্থন যোগ করা হয়েছে, যার মধ্যে স্ক্যানের ফলাফল নিরীক্ষণ করার ক্ষমতা এবং চাহিদা অনুযায়ী স্ক্যানগুলি ট্রিগার করা রয়েছে। এই ক্ষমতাগুলিকে v1.2-এ প্রসারিত করা হয়েছিল রাউন্ড-ট্রিপ টাইম (RTT) পরিমাপ করার ক্ষমতা সহ যেগুলি বৈশিষ্ট্যটিকে সমর্থন করে এমন অ্যাক্সেস পয়েন্টগুলির বিরুদ্ধে, যা সঠিক আপেক্ষিক অবস্থান নির্ধারণকে সক্ষম করে।
WWAN
CHRE API পরিবেশনকারী সেল এবং এর প্রতিবেশীদের জন্য কোষ সনাক্তকরণ তথ্য পুনরুদ্ধার করার ক্ষমতা প্রদান করে, যা সাধারণত মোটা দানাযুক্ত অবস্থানের উদ্দেশ্যে ব্যবহৃত হয়।
অডিও
CHRE একটি কম-পাওয়ার মাইক্রোফোন থেকে অডিও ডেটার ব্যাচ প্রক্রিয়া করতে পারে, যা সাধারণত SoundTrigger HAL বাস্তবায়নের জন্য ব্যবহৃত হার্ডওয়্যার ব্যবহার করে। CHRE-তে অডিও ডেটা প্রক্রিয়াকরণ এটিকে অন্যান্য ডেটার সাথে মিশ্রিত করতে সক্ষম করে, যেমন মোশন সেন্সর।
রেফারেন্স বাস্তবায়ন
CHRE ফ্রেমওয়ার্কের জন্য রেফারেন্স কোড system/chre
প্রকল্পের AOSP-তে অন্তর্ভুক্ত করা হয়েছে, C++11-এ বাস্তবায়িত। কঠোরভাবে প্রয়োজন না হলেও, এই কোডবেসের উপর ভিত্তি করে সমস্ত CHRE বাস্তবায়নের জন্য সুপারিশ করা হয়, যাতে ধারাবাহিকতা নিশ্চিত করা যায় এবং নতুন ক্ষমতা গ্রহণকে ত্বরান্বিত করা যায়। এই কোডটিকে মূল অ্যান্ড্রয়েড ফ্রেমওয়ার্কের একটি অ্যানালগ হিসাবে দেখা যেতে পারে যে এটি APIগুলির একটি ওপেন-সোর্স বাস্তবায়ন যা অ্যাপগুলি ব্যবহার করে, সামঞ্জস্যের জন্য একটি বেসলাইন এবং মান হিসাবে পরিবেশন করে৷ যদিও এটি কাস্টমাইজ করা যায় এবং বিক্রেতা-নির্দিষ্ট ক্ষমতার সাথে প্রসারিত করা যেতে পারে, সুপারিশ হল সাধারণ কোডটিকে যতটা সম্ভব রেফারেন্সের কাছাকাছি রাখা। অ্যান্ড্রয়েডের HAL-এর মতোই, CHRE রেফারেন্স বাস্তবায়ন বিভিন্ন প্ল্যাটফর্ম বিমূর্ততা ব্যবহার করে যাতে এটিকে ন্যূনতম প্রয়োজনীয়তা পূরণ করে এমন যেকোনো ডিভাইসে মানিয়ে নেওয়া যায়।
প্রযুক্তিগত বিবরণ এবং একটি পোর্টিং গাইডের জন্য, system/chre
প্রকল্পে অন্তর্ভুক্ত README দেখুন।