কনটেক্সট হাব রানটাইম এনভায়রনমেন্ট (CHRE)

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

কনটেক্সট হাব রানটাইম এনভায়রনমেন্ট (CHRE) একটি সহজ, মানসম্মত, এমবেডেড-বান্ধব API সহ কম-পাওয়ার প্রসেসরে অ্যাপ চালানোর জন্য একটি সাধারণ প্ল্যাটফর্ম প্রদান করে। CHRE ডিভাইস OEM এবং তাদের বিশ্বস্ত অংশীদারদের জন্য AP থেকে প্রসেসিং অফলোড করা সহজ করে তোলে, ব্যাটারি সাশ্রয় করে এবং ব্যবহারকারীর অভিজ্ঞতার বিভিন্ন ক্ষেত্র উন্নত করে, এবং সর্বদা-চালু, প্রসঙ্গগতভাবে সচেতন বৈশিষ্ট্যগুলির একটি শ্রেণী সক্ষম করে, বিশেষ করে যেগুলি অ্যাম্বিয়েন্ট সেন্সিংয়ে মেশিন লার্নিং প্রয়োগের সাথে জড়িত।

মূল ধারণা

CHRE হলো এমন একটি সফটওয়্যার পরিবেশ যেখানে nanoapps নামক ছোট নেটিভ অ্যাপগুলি একটি কম-পাওয়ার প্রসেসরে চালানো হয় এবং সাধারণ CHRE API এর মাধ্যমে অন্তর্নিহিত সিস্টেমের সাথে ইন্টারঅ্যাক্ট করে। CHRE API গুলির সঠিক বাস্তবায়ন ত্বরান্বিত করার জন্য, AOSP-তে CHRE-এর একটি ক্রস-প্ল্যাটফর্ম রেফারেন্স বাস্তবায়ন অন্তর্ভুক্ত করা হয়েছে। রেফারেন্স বাস্তবায়নে সাধারণ কোড এবং প্ল্যাটফর্ম অ্যাবস্ট্রাকশন লেয়ার (PAL) এর একটি সিরিজের মাধ্যমে অন্তর্নিহিত হার্ডওয়্যার এবং সফ্টওয়্যারের অ্যাবস্ট্রাকশন অন্তর্ভুক্ত থাকে। Nanoapps প্রায় সবসময় অ্যান্ড্রয়েডে চলমান এক বা একাধিক ক্লায়েন্ট অ্যাপের সাথে সংযুক্ত থাকে, যা সীমাবদ্ধ-অ্যাক্সেস ContextHubManager সিস্টেম API এর মাধ্যমে CHRE এবং nanoapps এর সাথে ইন্টারঅ্যাক্ট করে।

উচ্চ স্তরে, CHRE এবং সামগ্রিকভাবে Android এর স্থাপত্যের মধ্যে সমান্তরালতা আঁকা যেতে পারে। তবে, কয়েকটি গুরুত্বপূর্ণ পার্থক্য রয়েছে:

  • CHRE শুধুমাত্র নেটিভ কোডে (C অথবা C++) ডেভেলপ করা ন্যানোঅ্যাপ চালানো সমর্থন করে; জাভা সমর্থিত নয়।
  • রিসোর্সের সীমাবদ্ধতা এবং নিরাপত্তার সীমাবদ্ধতার কারণে, CHRE তৃতীয় পক্ষের অ্যান্ড্রয়েড অ্যাপগুলির জন্য উন্মুক্ত নয়। শুধুমাত্র সিস্টেম-বিশ্বস্ত অ্যাপগুলিই এটি অ্যাক্সেস করতে পারে।

CHRE এবং সেন্সর হাবের ধারণার মধ্যে একটি গুরুত্বপূর্ণ পার্থক্যও রয়েছে। সেন্সর হাব এবং CHRE বাস্তবায়নের জন্য একই হার্ডওয়্যার ব্যবহার করা সাধারণ হলেও, CHRE নিজেই Android সেন্সর HAL এর জন্য প্রয়োজনীয় সেন্সর ক্ষমতা প্রদান করে না। CHRE কনটেক্সট হাব HAL এর সাথে সংযুক্ত, এবং এটি AP কে জড়িত না করেই সেন্সর ডেটা গ্রহণ করার জন্য একটি ডিভাইস-নির্দিষ্ট সেন্সর ফ্রেমওয়ার্কের ক্লায়েন্ট হিসাবে কাজ করে।

CHRE ফ্রেমওয়ার্ক আর্কিটেকচার

চিত্র ১. CHRE ফ্রেমওয়ার্ক আর্কিটেকচার

কনটেক্সট হাব HAL

কনটেক্সট হাব হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) হল অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এবং ডিভাইসের CHRE বাস্তবায়নের মধ্যে ইন্টারফেস, যা hardware/interfaces/contexthub এ সংজ্ঞায়িত করা হয়েছে। কনটেক্সট হাব HAL সেই API গুলিকে সংজ্ঞায়িত করে যার মাধ্যমে অ্যান্ড্রয়েড ফ্রেমওয়ার্ক উপলব্ধ কনটেক্সট হাব এবং তাদের ন্যানোঅ্যাপগুলি আবিষ্কার করে, বার্তা প্রেরণের মাধ্যমে সেই ন্যানোঅ্যাপগুলির সাথে ইন্টারঅ্যাক্ট করে এবং ন্যানোঅ্যাপগুলিকে লোড এবং আনলোড করার অনুমতি দেয়। কনটেক্সট হাব HAL এর একটি রেফারেন্স বাস্তবায়ন যা CHRE এর রেফারেন্স বাস্তবায়নের সাথে কাজ করে system/chre/host এ উপলব্ধ।

এই ডকুমেন্টেশন এবং HAL সংজ্ঞার মধ্যে বিরোধ দেখা দিলে, HAL সংজ্ঞা প্রাধান্য পায়।

আরম্ভকরণ

যখন অ্যান্ড্রয়েড বুট হয়, তখন ContextHubService ডিভাইসে কোনও কনটেক্সট হাব উপলব্ধ কিনা তা নির্ধারণ করার জন্য getHubs() HAL ফাংশনটি ব্যবহার করে। এটি একটি ব্লকিং, এককালীন কল, তাই বুট বিলম্বিত হওয়া এড়াতে এটি দ্রুত সম্পন্ন করতে হবে এবং এটি একটি সঠিক ফলাফল প্রদান করতে হবে, কারণ নতুন কনটেক্সট হাব পরে চালু করা যাবে না।

ন্যানোঅ্যাপ লোড এবং আনলোড করুন

একটি কনটেক্সট হাবে এমন কিছু ন্যানোঅ্যাপ থাকতে পারে যা ডিভাইসের ছবিতে অন্তর্ভুক্ত থাকে এবং CHRE শুরু হলে লোড হয়। এগুলিকে প্রিলোডেড ন্যানোঅ্যাপ বলা হয় এবং queryApps() এর প্রথম সম্ভাব্য প্রতিক্রিয়ায় অন্তর্ভুক্ত করা উচিত।

কনটেক্সট হাব HAL loadNanoApp() এবং unloadNanoApp() ফাংশনের মাধ্যমে রানটাইমে গতিশীলভাবে ন্যানোঅ্যাপ লোড এবং আনলোড করতে সহায়তা করে। ডিভাইসের CHRE হার্ডওয়্যার এবং সফ্টওয়্যার বাস্তবায়নের জন্য নির্দিষ্ট একটি বাইনারি ফর্ম্যাটে HAL-কে ন্যানোঅ্যাপ সরবরাহ করা হয়।

যদি একটি ন্যানোঅ্যাপ লোড করার জন্য বাস্তবায়নের ক্ষেত্রে এটিকে ননভোলাটাইল মেমোরিতে লেখা জড়িত থাকে, যেমন CHRE চালিত প্রসেসরের সাথে সংযুক্ত ফ্ল্যাশ স্টোরেজ, তাহলে CHRE বাস্তবায়ন সর্বদা অক্ষম অবস্থায় এই গতিশীল ন্যানোঅ্যাপগুলি দিয়ে বুট আপ করতে হবে। এর অর্থ হল HAL এর মাধ্যমে একটি enableNanoapp() অনুরোধ না পাওয়া পর্যন্ত ন্যানোঅ্যাপের কোনও কোড কার্যকর করা হবে না। প্রিলোড করা ন্যানোঅ্যাপগুলি সক্ষম অবস্থায় শুরু করতে পারে।

কনটেক্সট হাব পুনরায় চালু হচ্ছে

স্বাভাবিক ক্রিয়াকলাপের সময় CHRE পুনরায় চালু হওয়ার সম্ভাবনা না থাকলেও, অপ্রত্যাশিত পরিস্থিতি যেমন একটি আনম্যাপড মেমোরি অ্যাড্রেস অ্যাক্সেস করার চেষ্টা থেকে পুনরুদ্ধার করা প্রয়োজন হতে পারে। এই পরিস্থিতিতে, CHRE Android থেকে স্বাধীনভাবে পুনরায় চালু হয়। HAL RESTARTED ইভেন্টের মাধ্যমে Android কে এটি সম্পর্কে অবহিত করে, যা CHRE পুনরায় চালু করার পরেই পাঠাতে হবে যাতে এটি queryApps() মতো নতুন অনুরোধ গ্রহণ করতে পারে।

CHRE সিস্টেমের ওভারভিউ

CHRE একটি ইভেন্ট-চালিত আর্কিটেকচারের উপর ভিত্তি করে ডিজাইন করা হয়েছে, যেখানে গণনার প্রাথমিক ইউনিট হল একটি ইভেন্ট যা একটি ন্যানোঅ্যাপের ইভেন্ট হ্যান্ডলিং এন্ট্রি পয়েন্টে প্রেরণ করা হয়। যদিও CHRE ফ্রেমওয়ার্কটি মাল্টিথ্রেড করা যেতে পারে, একটি প্রদত্ত ন্যানোঅ্যাপ কখনও সমান্তরালভাবে একাধিক থ্রেড থেকে কার্যকর করা হয় না। CHRE ফ্রেমওয়ার্কটি তিনটি ন্যানোঅ্যাপ এন্ট্রি পয়েন্টের ( nanoappStart() , nanoappHandleEvent() , এবং nanoappEnd() ) মাধ্যমে অথবা পূর্ববর্তী CHRE API কলে প্রদত্ত কলব্যাকের মাধ্যমে একটি প্রদত্ত ন্যানোঅ্যাপের সাথে ইন্টারঅ্যাক্ট করে এবং ন্যানোঅ্যাপগুলি CHRE API এর মাধ্যমে CHRE ফ্রেমওয়ার্ক এবং অন্তর্নিহিত সিস্টেমের সাথে ইন্টারঅ্যাক্ট করে। CHRE API সেন্সর, GNSS, Wi-Fi, WWAN এবং অডিও সহ প্রাসঙ্গিক সংকেত অ্যাক্সেস করার জন্য মৌলিক ক্ষমতার একটি সেট প্রদান করে এবং এটি বিক্রেতা-নির্দিষ্ট ন্যানোঅ্যাপ দ্বারা ব্যবহারের জন্য অতিরিক্ত বিক্রেতা-নির্দিষ্ট ক্ষমতা সহ প্রসারিত করা যেতে পারে।

সিস্টেম তৈরি করুন

যদিও কনটেক্সট হাব HAL এবং অন্যান্য প্রয়োজনীয় AP-সাইড উপাদানগুলি অ্যান্ড্রয়েডের সাথে তৈরি করা হয়, CHRE-এর মধ্যে চালিত কোডের এমন প্রয়োজনীয়তা থাকতে পারে যা এটিকে অ্যান্ড্রয়েড বিল্ড সিস্টেমের সাথে বেমানান করে তোলে, যেমন একটি বিশেষায়িত টুলচেনের প্রয়োজন। অতএব, AOSP-এর CHRE প্রকল্পটি ন্যানোঅ্যাপগুলি কম্পাইল করার জন্য GNU Make-এর উপর ভিত্তি করে একটি সরলীকৃত বিল্ড সিস্টেম প্রদান করে, এবং ঐচ্ছিকভাবে, CHRE ফ্রেমওয়ার্ককে লাইব্রেরিতে রূপান্তর করে যা সিস্টেমের সাথে একীভূত করা যেতে পারে। CHRE-এর জন্য সমর্থন যোগকারী ডিভাইস নির্মাতাদের তাদের লক্ষ্য ডিভাইসগুলির জন্য বিল্ড সিস্টেম সমর্থন AOSP-তে একীভূত করা উচিত।

CHRE API C99 ভাষা মান অনুসারে লেখা হয়েছে, এবং রেফারেন্স বাস্তবায়নে C++11 এর একটি সীমাবদ্ধ উপসেট ব্যবহার করা হয়েছে যা রিসোর্স-সীমিত অ্যাপের জন্য উপযুক্ত।

CHRE API

CHRE API হল C হেডার ফাইলের একটি সংগ্রহ যা একটি nanoapp এবং সিস্টেমের মধ্যে সফ্টওয়্যার ইন্টারফেস নির্ধারণ করে। এটি CHRE সমর্থন করে এমন সমস্ত ডিভাইসের জন্য nanoapps কোড সামঞ্জস্যপূর্ণ করার জন্য ডিজাইন করা হয়েছে, যার অর্থ হল একটি nanoapp এর সোর্স কোডকে একটি নতুন ডিভাইস টাইপ সমর্থন করার জন্য পরিবর্তন করার প্রয়োজন নেই, যদিও এটি বিশেষভাবে লক্ষ্য ডিভাইসের প্রসেসর নির্দেশ সেট বা অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABI) এর জন্য পুনরায় কম্পাইল করার প্রয়োজন হতে পারে। CHRE আর্কিটেকচার এবং API ডিজাইন নিশ্চিত করে যে nanoapps CHRE API এর বিভিন্ন সংস্করণে বাইনারি সামঞ্জস্যপূর্ণ, যার অর্থ হল একটি nanoapp এমন একটি সিস্টেমে চালানোর জন্য পুনরায় কম্পাইল করার প্রয়োজন হয় না যা nanoapp কম্পাইল করা টার্গেট API এর তুলনায় CHRE API এর একটি ভিন্ন সংস্করণ প্রয়োগ করে। অন্য কথায়, যদি একটি nanoapp বাইনারি এমন একটি ডিভাইসে চলে যা CHRE API v1.3 সমর্থন করে এবং সেই ডিভাইসটি CHRE API v1.4 সমর্থন করার জন্য আপগ্রেড করা হয়, তাহলে একই nanoapp বাইনারি কাজ করতে থাকে। একইভাবে, ন্যানোঅ্যাপটি CHRE API v1.2 তে চলতে পারে এবং রানটাইমে নির্ধারণ করতে পারে যে এর ব্যবহার অর্জনের জন্য API v1.3 থেকে ক্ষমতা প্রয়োজন কিনা, নাকি এটি কার্যকর হতে পারে, সম্ভাব্যভাবে সুন্দর বৈশিষ্ট্য অবনতির সাথে।

CHRE API-এর নতুন সংস্করণগুলি অ্যান্ড্রয়েডের পাশাপাশি প্রকাশিত হয়, তবে CHRE বাস্তবায়ন বিক্রেতা বাস্তবায়নের অংশ হওয়ায়, কোনও ডিভাইসে সমর্থিত CHRE API সংস্করণটি অগত্যা কোনও অ্যান্ড্রয়েড সংস্করণের সাথে লিঙ্ক করা হয় না।

সংস্করণের সারাংশ

অ্যান্ড্রয়েড HIDL ভার্সনিং স্কিমের মতো, CHRE API সিমেন্টিক ভার্সনিং অনুসরণ করে। মেজর ভার্সনটি বাইনারি সামঞ্জস্যতা নির্দেশ করে, যখন ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ বৈশিষ্ট্যগুলি প্রবর্তন করা হয় তখন মাইনর ভার্সনটি বৃদ্ধি পায়। CHRE API-তে সোর্স কোড অ্যানোটেশন অন্তর্ভুক্ত থাকে যা কোন সংস্করণটি একটি ফাংশন বা প্যারামিটার চালু করেছে তা সনাক্ত করে, উদাহরণস্বরূপ @since v1.1

CHRE বাস্তবায়ন chreGetVersion() এর মাধ্যমে একটি প্ল্যাটফর্ম-নির্দিষ্ট প্যাচ সংস্করণও প্রকাশ করে, যা নির্দেশ করে যে বাস্তবায়নে কখন বাগ সংশোধন বা ছোটখাটো আপডেট করা হয়েছে।

প্রতিটি সংস্করণের সারাংশের জন্য, version.h দেখুন।

বাধ্যতামূলক সিস্টেমের বৈশিষ্ট্য

সেন্সরের মতো প্রাসঙ্গিক সংকেতের উৎসগুলিকে ঐচ্ছিক বৈশিষ্ট্য এলাকায় শ্রেণীবদ্ধ করা হলেও, সমস্ত CHRE বাস্তবায়নে কয়েকটি মূল ফাংশন প্রয়োজন। এর মধ্যে রয়েছে মূল সিস্টেম API, যেমন টাইমার সেট করা, অ্যাপ্লিকেশন প্রসেসরে ক্লায়েন্টদের কাছে বার্তা পাঠানো এবং গ্রহণ করা, লগিং করা এবং অন্যান্য। সম্পূর্ণ বিবরণের জন্য, API হেডারগুলি দেখুন।

CHRE API-তে কোডেড মূল সিস্টেম বৈশিষ্ট্যগুলি ছাড়াও, কনটেক্সট হাব HAL স্তরে নির্দিষ্ট বাধ্যতামূলক CHRE সিস্টেম-স্তরের বৈশিষ্ট্যগুলিও রয়েছে। এর মধ্যে সবচেয়ে উল্লেখযোগ্য হল ন্যানোঅ্যাপগুলিকে গতিশীলভাবে লোড এবং আনলোড করার ক্ষমতা।

সি/সি++ স্ট্যান্ডার্ড লাইব্রেরি

মেমোরির ব্যবহার এবং সিস্টেমের জটিলতা কমাতে, CHRE বাস্তবায়নের জন্য শুধুমাত্র স্ট্যান্ডার্ড C এবং C++ লাইব্রেরি এবং রানটাইম সাপোর্টের প্রয়োজন এমন ভাষা বৈশিষ্ট্যগুলির একটি উপসেট সমর্থন করা প্রয়োজন। এই নীতিগুলি অনুসরণ করে, কিছু বৈশিষ্ট্য তাদের মেমোরি এবং বিস্তৃত OS-স্তরের নির্ভরতার কারণে স্পষ্টভাবে বাদ দেওয়া হয়, এবং অন্যগুলি কারণ সেগুলি আরও উপযুক্ত CHRE-নির্দিষ্ট API দ্বারা প্রতিস্থাপিত হয়। যদিও একটি সম্পূর্ণ তালিকা হিসাবে বোঝানো হয়নি, নিম্নলিখিত ক্ষমতাগুলি ন্যানোঅ্যাপগুলিতে উপলব্ধ করার উদ্দেশ্যে নয়:

  • C++ ব্যতিক্রম এবং রানটাইম টাইপ তথ্য (RTTI)
  • স্ট্যান্ডার্ড লাইব্রেরি মাল্টিথ্রেডিং সাপোর্ট, যার মধ্যে রয়েছে C++11 হেডার <thread> , <mutex> , <atomic> , <future>
  • সি এবং সি++ স্ট্যান্ডার্ড ইনপুট/আউটপুট লাইব্রেরি
  • 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গুলি অ্যান্ড্রয়েড সেন্সর API-এর অনুরূপ একটি বৈশিষ্ট্য সেট প্রদান করার জন্য তৈরি, যার মধ্যে বিদ্যুৎ খরচ কমাতে সেন্সর নমুনা ব্যাচিংয়ের জন্য সমর্থন অন্তর্ভুক্ত। CHRE-এর মধ্যে সেন্সর ডেটা প্রক্রিয়াকরণ AP-তে চালানোর তুলনায় অনেক কম শক্তি এবং গতি সংকেতের কম লেটেন্সি প্রক্রিয়াকরণ সক্ষম করে।

জিএনএসএস

CHRE একটি গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS) থেকে অবস্থান ডেটা অনুরোধ করার জন্য API সরবরাহ করে, যার মধ্যে GPS এবং অন্যান্য স্যাটেলাইট নক্ষত্রপুঞ্জ অন্তর্ভুক্ত। এর মধ্যে পর্যায়ক্রমিক অবস্থান সংশোধনের অনুরোধ, সেইসাথে কাঁচা পরিমাপ ডেটা অন্তর্ভুক্ত, যদিও উভয়ই স্বাধীন ক্ষমতা। যেহেতু 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 একটি কম-পাওয়ার মাইক্রোফোন থেকে অডিও ডেটার ব্যাচ প্রক্রিয়া করতে পারে, যা সাধারণত সাউন্ডট্রিগার HAL বাস্তবায়নের জন্য ব্যবহৃত হার্ডওয়্যার ব্যবহার করে। CHRE-তে অডিও ডেটা প্রক্রিয়াকরণের মাধ্যমে এটিকে অন্যান্য ডেটা, যেমন মোশন সেন্সরের সাথে মিশ্রিত করা সম্ভব।

ব্লুটুথ

CHRE ব্লুটুথ কার্যকারিতার একটি উপসেট সমর্থনকারী API প্রদান করে যা কম-পাওয়ার অফলোডিং থেকে উপকৃত হয়। CHRE ন্যানোঅ্যাপগুলিকে AP জাগিয়ে না ফেলে BLE স্ক্যান করতে, RSSI নিরীক্ষণ করতে এবং BLE বিজ্ঞাপন ডেটা প্রক্রিয়া করতে দেয়। অতিরিক্তভাবে, একটি প্রতিষ্ঠিত ব্লুটুথ সকেট সংযোগের মালিকানা অফলোড ডোমেনে স্থানান্তরিত করা যেতে পারে, যার রক্ষণাবেক্ষণের জন্য কম শক্তি প্রয়োজন এবং ন্যানোঅ্যাপগুলিকে অফলোড করা BLE সকেট সংযোগের মাধ্যমে যোগাযোগ করতে দেয়।

রেফারেন্স বাস্তবায়ন

C++11 তে বাস্তবায়িত system/chre প্রকল্পের AOSP-তে CHRE ফ্রেমওয়ার্কের জন্য রেফারেন্স কোড অন্তর্ভুক্ত করা হয়েছে। যদিও এটি কঠোরভাবে প্রয়োজনীয় নয়, তবুও সমস্ত CHRE বাস্তবায়নের জন্য এই কোডবেসের উপর ভিত্তি করে তৈরি করার পরামর্শ দেওয়া হচ্ছে, যাতে ধারাবাহিকতা নিশ্চিত করা যায় এবং নতুন ক্ষমতা গ্রহণ ত্বরান্বিত করা যায়। এই কোডটিকে মূল অ্যান্ড্রয়েড ফ্রেমওয়ার্কের একটি অ্যানালগ হিসাবে দেখা যেতে পারে কারণ এটি অ্যাপগুলি ব্যবহার করে এমন API-এর একটি ওপেন-সোর্স বাস্তবায়ন, যা সামঞ্জস্যের জন্য একটি বেসলাইন এবং মান হিসাবে কাজ করে। যদিও এটি বিক্রেতা-নির্দিষ্ট ক্ষমতার সাথে কাস্টমাইজ এবং বর্ধিত করা যেতে পারে, তবে সুপারিশ হল সাধারণ কোডটি যতটা সম্ভব রেফারেন্সের কাছাকাছি রাখা। অ্যান্ড্রয়েডের HAL-এর মতো, CHRE রেফারেন্স বাস্তবায়ন বিভিন্ন প্ল্যাটফর্ম অ্যাবস্ট্রাকশন ব্যবহার করে যাতে এটি ন্যূনতম প্রয়োজনীয়তা পূরণ করে এমন যেকোনো ডিভাইসের সাথে অভিযোজিত হতে পারে।

প্রযুক্তিগত বিবরণ এবং পোর্টিং নির্দেশিকার জন্য, system/chre প্রকল্পে অন্তর্ভুক্ত README দেখুন।