নীচের চিত্রটি Android সেন্সর স্ট্যাকের প্রতিনিধিত্ব করে। প্রতিটি উপাদান শুধুমাত্র তার উপরে এবং নীচের উপাদানগুলির সাথে যোগাযোগ করে, যদিও কিছু সেন্সর উপস্থিত থাকলে সেন্সর হাবকে বাইপাস করতে পারে। অ্যাপ্লিকেশানগুলি থেকে সেন্সরগুলিতে নিয়ন্ত্রণ প্রবাহিত হয় এবং সেন্সরগুলি থেকে অ্যাপ্লিকেশনগুলিতে ডেটা প্রবাহিত হয়৷
![অ্যান্ড্রয়েড সেন্সর স্ট্যাকের স্তর এবং মালিক](https://source.android.google.cn/static/docs/core/interaction/sensors/images/ape_fwk_sensors.png?authuser=3&hl=bn)
চিত্র 1. অ্যান্ড্রয়েড সেন্সর স্ট্যাকের স্তর এবং তাদের নিজ নিজ মালিক
SDK
অ্যাপ্লিকেশনগুলি সেন্সর SDK (সফ্টওয়্যার ডেভেলপমেন্ট কিট) API এর মাধ্যমে সেন্সর অ্যাক্সেস করে। SDK-তে উপলব্ধ সেন্সর তালিকাভুক্ত করার এবং একটি সেন্সরে নিবন্ধন করার ফাংশন রয়েছে।
একটি সেন্সরে নিবন্ধন করার সময়, অ্যাপ্লিকেশনটি তার পছন্দের স্যাম্পলিং ফ্রিকোয়েন্সি এবং এর লেটেন্সি প্রয়োজনীয়তাগুলি নির্দিষ্ট করে৷
- উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন ডিফল্ট অ্যাক্সিলোমিটারে নিবন্ধন করতে পারে, 100Hz এ ইভেন্টের অনুরোধ করে এবং 1-সেকেন্ডের লেটেন্সি সহ ইভেন্টগুলি রিপোর্ট করার অনুমতি দেয়৷
- অ্যাপ্লিকেশনটি অ্যাক্সিলোমিটার থেকে কমপক্ষে 100Hz হারে ইভেন্টগুলি গ্রহণ করবে এবং সম্ভবত 1 সেকেন্ড পর্যন্ত বিলম্বিত হবে।
SDK সম্পর্কে আরও তথ্যের জন্য বিকাশকারী ডকুমেন্টেশন দেখুন।
ফ্রেমওয়ার্ক
ফ্রেমওয়ার্কটি HAL এর সাথে বেশ কয়েকটি অ্যাপ্লিকেশন লিঙ্ক করার দায়িত্বে রয়েছে। HAL নিজেই একক-ক্লায়েন্ট। ফ্রেমওয়ার্ক স্তরে এই মাল্টিপ্লেক্সিং না ঘটলে, শুধুমাত্র একটি একক অ্যাপ্লিকেশন যে কোনো সময়ে প্রতিটি সেন্সর অ্যাক্সেস করতে পারে।
- যখন একটি প্রথম অ্যাপ্লিকেশন একটি সেন্সরে নিবন্ধন করে, ফ্রেমওয়ার্ক সেন্সর সক্রিয় করার জন্য HAL-কে একটি অনুরোধ পাঠায়।
- যখন অতিরিক্ত অ্যাপ্লিকেশন একই সেন্সরে নিবন্ধন করে, ফ্রেমওয়ার্ক প্রতিটি অ্যাপ্লিকেশনের প্রয়োজনীয়তা বিবেচনা করে এবং আপডেট করা অনুরোধ করা পরামিতি HAL-কে পাঠায়।
- স্যাম্পলিং ফ্রিকোয়েন্সি হবে অনুরোধকৃত স্যাম্পলিং ফ্রিকোয়েন্সির সর্বোচ্চ, যার মানে কিছু অ্যাপ্লিকেশন তাদের অনুরোধের চেয়ে বেশি ফ্রিকোয়েন্সিতে ইভেন্ট পাবে।
- সর্বোচ্চ রিপোর্টিং লেটেন্সি হবে অনুরোধকৃতদের ন্যূনতম। যদি একটি অ্যাপ্লিকেশন সর্বাধিক 0 রিপোর্টিং লেটেন্সি সহ একটি সেন্সরকে অনুরোধ করে, তবে সমস্ত অ্যাপ্লিকেশন অবিচ্ছিন্ন মোডে এই সেন্সর থেকে ইভেন্টগুলি গ্রহণ করবে এমনকি যদি কেউ কেউ নন-জিরো সর্বোচ্চ রিপোর্টিং লেটেন্সি সহ সেন্সরকে অনুরোধ করে। আরও বিস্তারিত জানার জন্য ব্যাচিং দেখুন।
- যখন একটি সেন্সরে নিবন্ধিত সর্বশেষ অ্যাপ্লিকেশনটি এটি থেকে নিবন্ধনমুক্ত হয়, তখন ফ্রেমওয়ার্কগুলি সেন্সরটি নিষ্ক্রিয় করার জন্য HAL-কে একটি অনুরোধ পাঠায় যাতে অপ্রয়োজনীয়ভাবে বিদ্যুৎ খরচ না হয়।
মাল্টিপ্লেক্সিং এর প্রভাব
কাঠামোর মধ্যে একটি মাল্টিপ্লেক্সিং স্তরের এই প্রয়োজনীয়তা কিছু নকশা সিদ্ধান্ত ব্যাখ্যা করে।
- যখন একটি অ্যাপ্লিকেশন একটি নির্দিষ্ট নমুনা ফ্রিকোয়েন্সি অনুরোধ করে, কোন গ্যারান্টি নেই যে ইভেন্টগুলি দ্রুত হারে আসবে না। যদি অন্য একটি অ্যাপ্লিকেশন একই সেন্সরকে দ্রুত হারে অনুরোধ করে, প্রথম অ্যাপ্লিকেশনটিও দ্রুত হারে সেগুলি গ্রহণ করবে।
- গ্যারান্টির একই অভাব অনুরোধকৃত সর্বাধিক রিপোর্টিং লেটেন্সির ক্ষেত্রে প্রযোজ্য: অ্যাপ্লিকেশনগুলি তাদের অনুরোধের চেয়ে অনেক কম লেটেন্সি সহ ইভেন্টগুলি পেতে পারে।
- স্যাম্পলিং ফ্রিকোয়েন্সি এবং সর্বোচ্চ রিপোর্টিং লেটেন্সি ছাড়াও, অ্যাপ্লিকেশনগুলি সেন্সর প্যারামিটারগুলি কনফিগার করতে পারে না।
- উদাহরণস্বরূপ, একটি শারীরিক সেন্সর কল্পনা করুন যা "উচ্চ নির্ভুলতা" এবং "নিম্ন শক্তি" উভয় মোডে কাজ করতে পারে।
- এই দুটি মোডের মধ্যে শুধুমাত্র একটি অ্যান্ড্রয়েড ডিভাইসে ব্যবহার করা যেতে পারে, কারণ অন্যথায়, একটি অ্যাপ্লিকেশন উচ্চ নির্ভুলতা মোডের জন্য অনুরোধ করতে পারে, এবং অন্যটি একটি কম পাওয়ার মোড; উভয় অ্যাপ্লিকেশন সন্তুষ্ট করার জন্য কাঠামোর জন্য কোন উপায় থাকবে না। ফ্রেমওয়ার্ক সর্বদা তার সমস্ত ক্লায়েন্টদের সন্তুষ্ট করতে সক্ষম হতে হবে, তাই এটি একটি বিকল্প নয়।
- অ্যাপ্লিকেশন থেকে সেন্সর বা তাদের ড্রাইভারের কাছে ডাটা পাঠানোর কোনো ব্যবস্থা নেই। এটি নিশ্চিত করে যে একটি অ্যাপ্লিকেশন সেন্সরগুলির আচরণ পরিবর্তন করতে পারে না, অন্য অ্যাপ্লিকেশনগুলিকে ভেঙে দেয়।
সেন্সর ফিউশন
অ্যান্ড্রয়েড ফ্রেমওয়ার্ক কিছু যৌগিক সেন্সরের জন্য একটি ডিফল্ট বাস্তবায়ন প্রদান করে। যখন একটি জাইরোস্কোপ , একটি অ্যাক্সিলোমিটার এবং একটি ম্যাগনেটোমিটার একটি ডিভাইসে উপস্থিত থাকে, কিন্তু কোনও ঘূর্ণন ভেক্টর , মাধ্যাকর্ষণ এবং রৈখিক ত্বরণ সেন্সর উপস্থিত থাকে না, ফ্রেমওয়ার্ক সেই সেন্সরগুলিকে প্রয়োগ করে যাতে অ্যাপ্লিকেশনগুলি এখনও সেগুলি ব্যবহার করতে পারে।
ডিফল্ট বাস্তবায়নের সমস্ত ডেটাতে অ্যাক্সেস নেই যা অন্যান্য বাস্তবায়নের অ্যাক্সেস রয়েছে এবং এটি অবশ্যই SoC-তে চলতে হবে, তাই এটি অন্যান্য বাস্তবায়নের মতো সঠিক বা শক্তি দক্ষ নয়। যতটা সম্ভব, ডিভাইস নির্মাতাদের এই ডিফল্ট বাস্তবায়নের উপর নির্ভর না করে তাদের নিজস্ব ফিউজড সেন্সর (ঘূর্ণন ভেক্টর, মাধ্যাকর্ষণ এবং রৈখিক ত্বরণ, সেইসাথে গেম রোটেশন ভেক্টরের মতো নতুন কম্পোজিট সেন্সর) সংজ্ঞায়িত করা উচিত। ডিভাইস নির্মাতারাও সেন্সর চিপ বিক্রেতাদের একটি বাস্তবায়নের জন্য তাদের অনুরোধ করতে পারেন।
ডিফল্ট সেন্সর ফিউশন বাস্তবায়ন রক্ষণাবেক্ষণ করা হচ্ছে না এবং এটির উপর নির্ভরশীল ডিভাইসগুলি CTS ব্যর্থ হতে পারে।
ফণা অধীনে
যারা অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP) ফ্রেমওয়ার্ক কোড বজায় রাখে তাদের জন্য এই বিভাগটি পটভূমির তথ্য হিসেবে প্রদান করা হয়েছে। এটি হার্ডওয়্যার নির্মাতাদের জন্য প্রাসঙ্গিক নয়।
জেএনআই
ফ্রেমওয়ার্কটি android.hardware- এর সাথে যুক্ত একটি জাভা নেটিভ ইন্টারফেস (JNI) ব্যবহার করে এবং frameworks/base/core/jni/
ডিরেক্টরিতে অবস্থিত। সেন্সর হার্ডওয়্যারে অ্যাক্সেস পেতে এই কোডটি নিম্ন স্তরের নেটিভ কোডকে কল করে।
নেটিভ ফ্রেমওয়ার্ক
নেটিভ ফ্রেমওয়ার্ক frameworks/native/
এ সংজ্ঞায়িত করা হয়েছে এবং android.hardware প্যাকেজের একটি নেটিভ সমতুল্য প্রদান করে। নেটিভ ফ্রেমওয়ার্ক সেন্সর-নির্দিষ্ট পরিষেবাগুলিতে অ্যাক্সেস পেতে বাইন্ডার আইপিসি প্রক্সিগুলিকে কল করে।
বাইন্ডার আইপিসি
বাইন্ডার আইপিসি প্রক্সিগুলি প্রক্রিয়া সীমানার উপর যোগাযোগের সুবিধা দেয়।
HAL
সেন্সর হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) API হল হার্ডওয়্যার ড্রাইভার এবং অ্যান্ড্রয়েড ফ্রেমওয়ার্কের মধ্যে ইন্টারফেস। এটি একটি HAL ইন্টারফেস sensors.h এবং একটি HAL বাস্তবায়ন নিয়ে গঠিত যা আমরা sensors.cpp হিসাবে উল্লেখ করি।
ইন্টারফেসটি অ্যান্ড্রয়েড এবং এওএসপি অবদানকারীদের দ্বারা সংজ্ঞায়িত করা হয় এবং বাস্তবায়নটি ডিভাইসের প্রস্তুতকারকের দ্বারা সরবরাহ করা হয়।
সেন্সর HAL ইন্টারফেস hardware/libhardware/include/hardware
অবস্থিত। অতিরিক্ত বিবরণের জন্য sensors.h দেখুন।
রিলিজ চক্র
HAL বাস্তবায়ন your_poll_device.common.version
সেট করে HAL ইন্টারফেসের কোন সংস্করণটি প্রয়োগ করে তা নির্দিষ্ট করে। বিদ্যমান HAL ইন্টারফেস সংস্করণগুলি sensors.h-এ সংজ্ঞায়িত করা হয়েছে এবং কার্যকারিতা সেই সংস্করণগুলির সাথে আবদ্ধ।
অ্যান্ড্রয়েড ফ্রেমওয়ার্ক বর্তমানে 1.0 এবং 1.3 সংস্করণ সমর্থন করে, কিন্তু 1.0 শীঘ্রই আর সমর্থিত হবে না। এই ডকুমেন্টেশন 1.3 সংস্করণের আচরণ বর্ণনা করে, যেখানে সমস্ত ডিভাইস আপগ্রেড করা উচিত। কিভাবে 1.3 তে আপগ্রেড করবেন তার বিস্তারিত জানার জন্য, HAL সংস্করণ অবচয় দেখুন।
কার্নেল ড্রাইভার
সেন্সর ড্রাইভারগুলি শারীরিক ডিভাইসগুলির সাথে যোগাযোগ করে। কিছু ক্ষেত্রে, HAL বাস্তবায়ন এবং ড্রাইভার একই সফ্টওয়্যার সত্তা। অন্যান্য ক্ষেত্রে, হার্ডওয়্যার ইন্টিগ্রেটর সেন্সর চিপ নির্মাতাদের ড্রাইভার সরবরাহ করার জন্য অনুরোধ করে, কিন্তু তারাই এইচএএল বাস্তবায়ন লিখছে।
সমস্ত ক্ষেত্রে, HAL বাস্তবায়ন এবং কার্নেল ড্রাইভারগুলি হার্ডওয়্যার নির্মাতাদের দায়িত্ব, এবং Android তাদের লেখার জন্য পছন্দের পদ্ধতি প্রদান করে না।
সেন্সর হাব
একটি ডিভাইসের সেন্সর স্ট্যাকে ঐচ্ছিকভাবে একটি সেন্সর হাব অন্তর্ভুক্ত করতে পারে, যা কম শক্তিতে কিছু নিম্ন-স্তরের গণনা সম্পাদনের জন্য দরকারী যখন SoC একটি সাসপেন্ড মোডে থাকতে পারে। উদাহরণস্বরূপ, সেই চিপগুলিতে ধাপ গণনা বা সেন্সর ফিউশন করা যেতে পারে। সেন্সর ইভেন্টের জন্য হার্ডওয়্যার FIFO যোগ করে সেন্সর ব্যাচিং প্রয়োগ করার জন্য এটি একটি ভাল জায়গা। আরও তথ্যের জন্য ব্যাচিং দেখুন।
দ্রষ্টব্য: নতুন সেন্সর বা LED ব্যবহার করে এমন নতুন ContextHub বৈশিষ্ট্যগুলি বিকাশ করতে, আপনি একটি Hikey বা Hikey960 উন্নয়ন বোর্ডের সাথে সংযুক্ত একটি Neonkey SensorHub ব্যবহার করতে পারেন৷
সেন্সর হাব কিভাবে বাস্তবায়িত হয় তা নির্ভর করে আর্কিটেকচারের উপর। এটি কখনও কখনও একটি পৃথক চিপ, এবং কখনও কখনও SoC হিসাবে একই চিপে অন্তর্ভুক্ত করা হয়। সেন্সর হাবের গুরুত্বপূর্ণ বৈশিষ্ট্য হল যে এটিতে ব্যাচিংয়ের জন্য পর্যাপ্ত মেমরি থাকা উচিত এবং কম শক্তির অ্যান্ড্রয়েড সেন্সরগুলিকে কার্যকর করতে খুব কম শক্তি খরচ করে৷ কিছু সেন্সর হাবে জেনেরিক কম্পিউটেশনের জন্য একটি মাইক্রোকন্ট্রোলার এবং কম পাওয়ার সেন্সরগুলির জন্য খুব কম শক্তির গণনা সক্ষম করার জন্য হার্ডওয়্যার এক্সিলারেটর থাকে।
সেন্সর হাব কিভাবে আর্কিটেকচার করা হয় এবং কিভাবে সেন্সর এবং SoC (I2C বাস, SPI বাস, …) এর সাথে যোগাযোগ করে তা অ্যান্ড্রয়েড দ্বারা নির্দিষ্ট করা হয়নি, তবে এটির লক্ষ্য হওয়া উচিত সামগ্রিক শক্তি ব্যবহার কমিয়ে আনা।
একটি বিকল্প যা বাস্তবায়নের সরলতার উপর উল্লেখযোগ্য প্রভাব ফেলেছে বলে মনে হচ্ছে সেন্সর হাব থেকে SoC পর্যন্ত দুটি ইন্টারাপ্ট লাইন রয়েছে: একটি জেগে ওঠার জন্য (ওয়েক-আপ সেন্সরগুলির জন্য), এবং অন্যটি নন-ওয়েক-আপ বাধাগুলির জন্য। (নন-ওয়েক-আপ সেন্সরের জন্য)।
সেন্সর
এগুলি হল শারীরিক MEMs চিপ যা পরিমাপ করে। অনেক ক্ষেত্রে, একই চিপে একাধিক ফিজিক্যাল সেন্সর থাকে। উদাহরণস্বরূপ, কিছু চিপগুলির মধ্যে একটি অ্যাক্সিলোমিটার, একটি জাইরোস্কোপ এবং একটি ম্যাগনেটোমিটার রয়েছে। (এই ধরনের চিপগুলিকে প্রায়শই 9-অক্ষের চিপ বলা হয়, কারণ প্রতিটি সেন্সর 3টি অক্ষের বেশি ডেটা সরবরাহ করে।)
এই চিপগুলির মধ্যে কিছুতে গতি সনাক্তকরণ, ধাপ সনাক্তকরণ এবং 9-অক্ষ সেন্সর ফিউশনের মতো স্বাভাবিক গণনা করার জন্য কিছু যুক্তিও রয়েছে।
যদিও CDD শক্তি এবং নির্ভুলতার প্রয়োজনীয়তা এবং সুপারিশগুলি শারীরিক সেন্সর নয়, Android সেন্সরকে লক্ষ্য করে, সেই প্রয়োজনীয়তাগুলি শারীরিক সেন্সরগুলির পছন্দকে প্রভাবিত করে৷ উদাহরণস্বরূপ, গেম রোটেশন ভেক্টরের নির্ভুলতার প্রয়োজনীয়তা শারীরিক জাইরোস্কোপের জন্য প্রয়োজনীয় নির্ভুলতার উপর প্রভাব ফেলে। শারীরিক সেন্সরগুলির প্রয়োজনীয়তাগুলি প্রাপ্ত করা ডিভাইস প্রস্তুতকারকের উপর নির্ভর করে৷