sensors.h- এ ঘোষিত Sensors HAL ইন্টারফেসটি অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এবং হার্ডওয়্যার-নির্দিষ্ট সফ্টওয়্যারের মধ্যেকার ইন্টারফেসকে প্রতিনিধিত্ব করে। একটি HAL ইমপ্লিমেন্টেশনকে অবশ্যই sensors.h-এ ঘোষিত প্রতিটি ফাংশন সংজ্ঞায়িত করতে হবে। প্রধান ফাংশনগুলো হলো:
-
get_sensors_list- সমস্ত সেন্সরের তালিকা ফেরত দেয়। -
activate- একটি সেন্সর চালু বা বন্ধ করে। -
batch- একটি সেন্সরের প্যারামিটার, যেমন স্যাম্পলিং ফ্রিকোয়েন্সি এবং সর্বোচ্চ রিপোর্টিং ল্যাটেন্সি, নির্ধারণ করে। -
setDelay- শুধুমাত্র HAL সংস্করণ 1.0-এ ব্যবহৃত। কোনো নির্দিষ্ট সেন্সরের জন্য স্যাম্পলিং ফ্রিকোয়েন্সি নির্ধারণ করে। -
flush- নির্দিষ্ট সেন্সরের FIFO ফ্লাশ করে এবং এই কাজটি সম্পন্ন হলে একটি ফ্লাশ সম্পন্ন হওয়ার ইভেন্ট রিপোর্ট করে। -
poll- উপলব্ধ সেন্সর ইভেন্টগুলো ফেরত দেয়।
বাস্তবায়নটি অবশ্যই থ্রেড-সেফ হতে হবে এবং এই ফাংশনগুলোকে বিভিন্ন থ্রেড থেকে কল করার অনুমতি দিতে হবে।
ইন্টারফেসটি ঐ ফাংশনগুলো দ্বারা ব্যবহৃত বেশ কয়েকটি টাইপও সংজ্ঞায়িত করে। প্রধান টাইপগুলো হলো:
-
sensors_module_t -
sensors_poll_device_t -
sensor_t -
sensors_event_t
নিচের বিভাগগুলো ছাড়াও, ওই প্রকারগুলো সম্পর্কে আরও তথ্যের জন্য sensors.h দেখুন।
get_sensors_list(list)
int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t const** list);
HAL দ্বারা বাস্তবায়িত সেন্সরগুলির তালিকা প্রদান করে। সেন্সরগুলি কীভাবে সংজ্ঞায়িত করা হয়েছে সে সম্পর্কে বিশদ জানতে sensor_t দেখুন।
তালিকায় সেন্সরগুলো যে ক্রমে প্রদর্শিত হয়, অ্যাপ্লিকেশনগুলোতে সেই ক্রমেই সেন্সরগুলোর তথ্য জানানো হবে। সাধারণত, প্রথমে বেস সেন্সরগুলো এবং তারপরে কম্পোজিট সেন্সরগুলো প্রদর্শিত হয়।
যদি একাধিক সেন্সরের একই সেন্সর টাইপ এবং ওয়েক-আপ প্রপার্টি থাকে, তবে তালিকার প্রথমটিকে “ডিফল্ট” সেন্সর বলা হয়। getDefaultSensor(int sensorType, bool wakeUp) দ্বারা যেটি রিটার্ন করা হয়, সেটিই হলো ডিফল্ট সেন্সর।
এই ফাংশনটি তালিকায় থাকা সেন্সরের সংখ্যা ফেরত দেয়।
সক্রিয় করুন(সেন্সর, সত্য/মিথ্যা)
int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int enabled);
একটি সেন্সর সক্রিয় বা নিষ্ক্রিয় করে।
sensor_handle হলো যে সেন্সরটি সক্রিয়/নিষ্ক্রিয় করতে হবে তার হ্যান্ডেল। একটি সেন্সরের হ্যান্ডেল তার sensor_t স্ট্রাকচারের handle ফিল্ড দ্বারা সংজ্ঞায়িত করা হয়।
সেন্সরটি চালু করতে enabled এর মান 1 এবং বন্ধ করতে 0 সেট করুন।
ওয়ান-শট সেন্সরগুলো কোনো ইভেন্ট পেলে স্বয়ংক্রিয়ভাবে নিষ্ক্রিয় হয়ে যায়, এবং activate(..., enabled=0) কল করার মাধ্যমে সেগুলোকে নিষ্ক্রিয় করার বিষয়টি অবশ্যই গ্রহণ করতে হয়।
নন-ওয়েক-আপ সেন্সরগুলো কখনোই SoC-কে সাসপেন্ড মোডে যেতে বাধা দেয় না; অর্থাৎ, HAL অ্যাপ্লিকেশনগুলোর পক্ষ থেকে কোনো আংশিক ওয়েক-লক ধরে রাখবে না।
ওয়েক-আপ সেন্সরগুলো ক্রমাগত ইভেন্ট সরবরাহ করার মাধ্যমে SoC-কে সাসপেন্ড মোডে যাওয়া থেকে আটকাতে পারে, কিন্তু যদি কোনো ইভেন্ট সরবরাহ করার প্রয়োজন না থাকে, তবে আংশিক ওয়েক-লকটি অবশ্যই মুক্ত করতে হবে।
যদি enabled 1 হয় এবং সেন্সরটি ইতিমধ্যেই সক্রিয় থাকে, তাহলে এই ফাংশনটি কোনো কাজ করে না এবং সফল হয়।
যদি enabled 0 হয় এবং সেন্সরটি ইতিমধ্যেই নিষ্ক্রিয় থাকে, তাহলে এই ফাংশনটি কোনো কাজ করে না এবং সফল হয়।
এই ফাংশনটি সফল হলে ০ এবং অন্যথায় একটি ঋণাত্মক ত্রুটি সংখ্যা রিটার্ন করে।
ব্যাচ(সেন্সর, ফ্ল্যাগ, স্যাম্পলিং পিরিয়ড, সর্বোচ্চ রিপোর্ট লেটেন্সি)
int (*batch)(
struct sensors_poll_device_1* dev,
int sensor_handle,
int flags,
int64_t sampling_period_ns,
int64_t max_report_latency_ns);স্যাম্পলিং ফ্রিকোয়েন্সি এবং সর্বোচ্চ রিপোর্ট ল্যাটেন্সি সহ একটি সেন্সরের প্যারামিটার নির্ধারণ করে। সেন্সরটি সক্রিয় থাকা অবস্থায় এই ফাংশনটি কল করা যেতে পারে, সেক্ষেত্রে এর কারণে সেন্সরের কোনো পরিমাপ যেন হারিয়ে না যায়: একটি স্যাম্পলিং রেট থেকে অন্যটিতে পরিবর্তনের ফলে কোনো ইভেন্ট হারিয়ে যেতে পারবে না, কিংবা উচ্চ সর্বোচ্চ রিপোর্ট ল্যাটেন্সি থেকে নিম্ন সর্বোচ্চ রিপোর্ট ল্যাটেন্সিতে পরিবর্তনের ফলেও তা সম্ভব নয়।
sensor_handle হলো কনফিগার করার জন্য সেন্সরটির হ্যান্ডেল।
flags বর্তমানে অব্যবহৃত আছে।
sampling_period_ns হলো সেই স্যাম্পলিং পিরিয়ড, যেটিতে সেন্সরটি চালু থাকবে, যা ন্যানোসেকেন্ডে পরিমাপ করা হয়। আরও বিস্তারিত জানতে sampling_period_ns দেখুন।
max_report_latency_ns হলো সর্বোচ্চ সেই সময়, যা দিয়ে HAL-এর মাধ্যমে রিপোর্ট করার আগে ইভেন্টগুলোকে বিলম্বিত করা যায়, এবং এটি ন্যানোসেকেন্ডে পরিমাপ করা হয়। আরও বিস্তারিত জানতে max_report_latency_ns অনুচ্ছেদটি দেখুন।
এই ফাংশনটি সফল হলে ০ এবং অন্যথায় একটি ঋণাত্মক ত্রুটি সংখ্যা রিটার্ন করে।
setDelay(সেন্সর, স্যাম্পলিং পিরিয়ড)
int (*setDelay)(
struct sensors_poll_device_t *dev,
int sensor_handle,
int64_t sampling_period_ns); HAL সংস্করণ 1.0-এর পর, এই ফাংশনটি অপ্রচলিত হয়ে গেছে এবং এটি আর কখনও কল করা হয় না। এর পরিবর্তে, sampling_period_ns প্যারামিটারটি সেট করার জন্য batch ফাংশনটি কল করা হয়।
HAL সংস্করণ 1.0-এ, sampling_period_ns সেট করার জন্য batch-এর পরিবর্তে setDelay ব্যবহার করা হতো।
ফ্লাশ(সেন্সর)
int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);
নির্দিষ্ট সেন্সরের জন্য হার্ডওয়্যার FIFO-এর শেষে একটি ফ্লাশ কমপ্লিট ইভেন্ট যোগ করা হয় এবং এটি FIFO-কে ফ্লাশ করে; এই ইভেন্টগুলো যথারীতি ডেলিভার করা হয় (অর্থাৎ, যেন সর্বোচ্চ রিপোর্টিং ল্যাটেন্সি শেষ হয়ে গেছে) এবং FIFO থেকে সরিয়ে ফেলা হয়।
ফ্লাশ প্রক্রিয়াটি অ্যাসিঙ্ক্রোনাসভাবে সম্পন্ন হয় (অর্থাৎ, এই ফাংশনটিকে অবশ্যই অবিলম্বে রিটার্ন করতে হবে)। যদি ইমপ্লিমেন্টেশনে একাধিক সেন্সরের জন্য একটিমাত্র FIFO ব্যবহার করা হয়, তবে শুধুমাত্র নির্দিষ্ট সেন্সরটির জন্যই সেই FIFO-টি ফ্লাশ করা হয় এবং ফ্লাশ সম্পন্ন হওয়ার ইভেন্টটি যুক্ত করা হয়।
যদি নির্দিষ্ট সেন্সরটিতে কোনো FIFO না থাকে (অর্থাৎ বাফারিং সম্ভব না হয়), অথবা কল করার সময় FIFO-টি খালি থাকে, তবুও flush অবশ্যই সফল হতে হবে এবং সেই সেন্সরটির জন্য একটি ফ্লাশ কমপ্লিট ইভেন্ট পাঠাতে হবে। এটি ওয়ান-শট সেন্সর ছাড়া অন্য সব সেন্সরের ক্ষেত্রে প্রযোজ্য।
যখন flush কল করা হয়, তখন সেই সেন্সরের জন্য FIFO-তে আগে থেকেই একটি ফ্লাশ ইভেন্ট থাকলেও, অতিরিক্ত একটি ইভেন্ট তৈরি করে FIFO-এর শেষে যোগ করতে হবে এবং FIFO-টিকে ফ্লাশ করতে হবে। flush কলের সংখ্যা অবশ্যই তৈরি হওয়া ফ্লাশ কমপ্লিট ইভেন্টের সংখ্যার সমান হতে হবে।
ওয়ান-শট সেন্সরের ক্ষেত্রে flush প্রযোজ্য নয়; যদি sensor_handle কোনো ওয়ান-শট সেন্সরকে নির্দেশ করে, তবে flush অবশ্যই -EINVAL রিটার্ন করবে এবং কোনো ফ্লাশ কমপ্লিট মেটাডেটা ইভেন্ট তৈরি করবে না।
এই ফাংশনটি সফল হলে 0, নির্দিষ্ট সেন্সরটি ওয়ান-শট সেন্সর হলে বা সক্রিয় করা না থাকলে -EINVAL , এবং অন্যথায় একটি ঋণাত্মক ত্রুটি নম্বর রিটার্ন করে।
পোল()
int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int
count); data আর্গুমেন্টটি পূরণ করে সেন্সর ডেটার একটি অ্যারে ফেরত দেয়। ইভেন্ট পাওয়া না যাওয়া পর্যন্ত এই ফাংশনটি অবশ্যই ব্লক করে থাকবে। সফল হলে এটি পঠিত ইভেন্টের সংখ্যা ফেরত দেবে, অথবা কোনো ত্রুটির ক্ষেত্রে একটি ঋণাত্মক ত্রুটি সংখ্যা ফেরত দেবে।
data তে ফেরত আসা ইভেন্টের সংখ্যা অবশ্যই count আর্গুমেন্টের চেয়ে কম বা সমান হতে হবে। এই ফাংশনটি কখনোই 0 (কোনো ইভেন্ট নেই) ফেরত দেবে না।
কলের ক্রম
ডিভাইসটি বুট করার সময় get_sensors_list কল করা হয়।
যখন কোনো সেন্সর সক্রিয় হয়, তখন অনুরোধ করা প্যারামিটারসহ batch ফাংশনটি কল করা হবে, এবং এর পরে activate(..., enable=1) ।
উল্লেখ্য যে, HAL সংস্করণ 1_0-তে ক্রমটি ছিল বিপরীত: প্রথমে activate কল করা হতো, তারপরে set_delay ।
কোনো সেন্সর সক্রিয় থাকা অবস্থায় তার কাঙ্ক্ষিত বৈশিষ্ট্যগুলো পরিবর্তিত হলে batch ফাংশনটি কল করা হয়।
flush যেকোনো সময় কল করা যেতে পারে, এমনকি নিষ্ক্রিয় সেন্সরের ক্ষেত্রেও (সেক্ষেত্রে এটিকে অবশ্যই -EINVAL রিটার্ন করতে হবে)।
যখন কোনো সেন্সর নিষ্ক্রিয় করা হয়, তখন activate(..., enable=0) কল করা হবে।
ঐ কলগুলোর পাশাপাশি, ডেটার অনুরোধ করার জন্য poll ফাংশনটি বারবার কল করা হবে। কোনো সেন্সর সক্রিয় না থাকলেও poll কল করা যেতে পারে।
সেন্সর_মডিউল_টি
sensors_module_t হলো সেই টাইপ যা সেন্সরগুলির জন্য অ্যান্ড্রয়েড হার্ডওয়্যার মডিউল তৈরি করতে ব্যবহৃত হয়। get_sensors_list ফাংশনটি এক্সপোজ করার জন্য HAL-এর ইমপ্লিমেন্টেশনে অবশ্যই এই টাইপের HAL_MODULE_INFO_SYM অবজেক্টটি ডিফাইন করতে হবে। আরও তথ্যের জন্য sensors.h- এ sensors_module_t এর ডেফিনিশন এবং hw_module_t এর ডেফিনিশন দেখুন।
sensors_poll_device_t / sensors_poll_device_1_t
sensors_poll_device_1_t মধ্যে উপরে সংজ্ঞায়িত বাকি মেথডগুলো রয়েছে: activate , batch , flush এবং poll । এর common ফিল্ড ( hw_device_t টাইপের) HAL-এর ভার্সন নম্বর নির্ধারণ করে।
সেন্সর_টি
sensor_t একটি অ্যান্ড্রয়েড সেন্সরকে বোঝায়। এর কয়েকটি গুরুত্বপূর্ণ ফিল্ড নিচে দেওয়া হলো:
নাম: একটি ব্যবহারকারী-দৃশ্যমান স্ট্রিং যা সেন্সরটিকে প্রতিনিধিত্ব করে। এই স্ট্রিংটিতে প্রায়শই অন্তর্নিহিত সেন্সরের পার্ট নেম, সেন্সরের ধরণ এবং এটি একটি ওয়েক-আপ সেন্সর কিনা তা উল্লেখ থাকে। উদাহরণস্বরূপ, “LIS2HH12 Accelerometer”, “MAX21000 Uncalibrated Gyroscope”, “BMP280 Wake-up Barometer”, “MPU6515 Game Rotation Vector”।
হ্যান্ডেল: সেন্সরে নিবন্ধন করার সময় বা এটি থেকে ইভেন্ট তৈরি করার সময় এটিকে নির্দেশ করতে ব্যবহৃত পূর্ণসংখ্যা।
টাইপ: সেন্সরের ধরণ। আরও বিস্তারিত তথ্যের জন্য ‘অ্যান্ড্রয়েড সেন্সর কী?’ -তে সেন্সরের ধরণ সম্পর্কে ব্যাখ্যা দেখুন এবং অফিসিয়াল সেন্সরের ধরণ জানতে ‘সেন্সরের ধরণ’ দেখুন। অন-অফিসিয়াল সেন্সরের ধরণগুলোর ক্ষেত্রে, type অবশ্যই SENSOR_TYPE_DEVICE_PRIVATE_BASE দিয়ে শুরু হতে হবে।
stringType: সেন্সরের ধরন, যা একটি স্ট্রিং হিসেবে প্রকাশ করা হয়। যখন সেন্সরটির একটি আনুষ্ঠানিক ধরন থাকে, তখন এটিকে SENSOR_STRING_TYPE_* এ সেট করতে হবে। যখন সেন্সরটির প্রস্তুতকারক-নির্দিষ্ট ধরন থাকে, তখন stringType অবশ্যই প্রস্তুতকারকের রিভার্স ডোমেইন নেম দিয়ে শুরু হতে হবে। উদাহরণস্বরূপ, Fictional-Company-এর Cool-product টিম দ্বারা সংজ্ঞায়িত একটি সেন্সর (ধরা যাক একটি ইউনিকর্ন ডিটেক্টর) stringType=”com.fictional_company.cool_product.unicorn_detector” ব্যবহার করতে পারে। অনানুষ্ঠানিক সেন্সরের ধরনগুলোকে স্বতন্ত্রভাবে শনাক্ত করার জন্য stringType ব্যবহার করা হয়। টাইপ এবং স্ট্রিং টাইপ সম্পর্কে আরও তথ্যের জন্য sensors.h দেখুন।
requiredPermission: একটি স্ট্রিং যা সেই অনুমতিকে নির্দেশ করে, যা অ্যাপ্লিকেশনগুলির সেন্সরটি দেখতে, এতে নিবন্ধন করতে এবং এর ডেটা গ্রহণ করার জন্য অবশ্যই থাকতে হবে। একটি খালি স্ট্রিং-এর অর্থ হলো এই সেন্সরটি অ্যাক্সেস করার জন্য অ্যাপ্লিকেশনগুলির কোনো অনুমতির প্রয়োজন নেই। হার্ট রেট মনিটরের মতো কিছু সেন্সর ধরনের জন্য একটি বাধ্যতামূলক requiredPermission থাকে। সংবেদনশীল ব্যবহারকারীর তথ্য (যেমন হার্ট রেট) প্রদানকারী সমস্ত সেন্সরকে অবশ্যই একটি অনুমতি দ্বারা সুরক্ষিত রাখতে হবে।
ফ্ল্যাগস: এই সেন্সরের জন্য ফ্ল্যাগ, যা সেন্সরের রিপোর্টিং মোড এবং সেন্সরটি একটি ওয়েক-আপ সেন্সর কিনা তা নির্ধারণ করে। উদাহরণস্বরূপ, একটি ওয়ান-শট ওয়েক-আপ সেন্সরের flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP । ফ্ল্যাগের যে বিটগুলো বর্তমান HAL সংস্করণে ব্যবহৃত হয় না, সেগুলোকে অবশ্যই 0-এর সমান রাখতে হবে।
maxRange: সেন্সরের রিপোর্ট করতে সক্ষম সর্বোচ্চ মান, যা রিপোর্ট করা মানগুলোর এককের সমান। সেন্সরটিকে অবশ্যই [-maxRange; maxRange] সীমার মধ্যে স্যাচুরেট না হয়ে মান রিপোর্ট করতে সক্ষম হতে হবে। উল্লেখ্য যে, এর মানে হলো সাধারণ অর্থে সেন্সরটির মোট রেঞ্জ হলো 2*maxRange । যখন সেন্সরটি একাধিক অক্ষ বরাবর মান রিপোর্ট করে, তখন এই রেঞ্জ প্রতিটি অক্ষের জন্য প্রযোজ্য হয়। উদাহরণস্বরূপ, একটি “+/- 2g” অ্যাক্সেলেরোমিটার maxRange = 2*9.81 = 2g রিপোর্ট করবে।
রেজোলিউশন: মানের ক্ষুদ্রতম পার্থক্য যা সেন্সর পরিমাপ করতে পারে। এটি সাধারণত maxRange এবং পরিমাপে থাকা বিটের সংখ্যার উপর ভিত্তি করে গণনা করা হয়।
পাওয়ার: সেন্সরটি চালু করার জন্য প্রয়োজনীয় বিদ্যুৎ খরচ, মিলিঅ্যাম্পিয়ারে। এটি প্রায় সবসময়ই মূল সেন্সরের ডেটাশিটে উল্লিখিত বিদ্যুৎ খরচের চেয়ে বেশি হয়। আরও বিস্তারিত জানতে ‘বেস সেন্সর != ফিজিক্যাল সেন্সর’ দেখুন এবং একটি সেন্সরের বিদ্যুৎ খরচ কীভাবে পরিমাপ করতে হয়, সে সম্পর্কে বিস্তারিত জানতে ‘পাওয়ার পরিমাপ প্রক্রিয়া’ দেখুন। যদি সেন্সরের বিদ্যুৎ খরচ ডিভাইসটির গতির উপর নির্ভর করে, তবে চলার সময়কার বিদ্যুৎ খরচটিই power ফিল্ডে উল্লেখ করা হয়।
minDelay: কন্টিনিউয়াস সেন্সরের জন্য, এটি হলো সেন্সরের সমর্থিত দ্রুততম হারের সাথে সঙ্গতিপূর্ণ স্যাম্পলিং পিরিয়ড (মাইক্রোসেকেন্ডে)। এই মানটি কীভাবে ব্যবহৃত হয়, সে সম্পর্কে বিস্তারিত জানতে sampling_period_ns দেখুন। মনে রাখবেন যে minDelay মাইক্রোসেকেন্ডে এবং sampling_period_ns ন্যানোসেকেন্ডে প্রকাশ করা হয়। অন-চেঞ্জ এবং স্পেশাল রিপোর্টিং মোড সেন্সরের ক্ষেত্রে, অন্যভাবে নির্দিষ্ট করা না থাকলে, minDelay অবশ্যই 0 হতে হবে। ওয়ান-শট সেন্সরের ক্ষেত্রে, এটি অবশ্যই -1 হতে হবে।
maxDelay: কন্টিনিউয়াস এবং অন-চেঞ্জ সেন্সরগুলির জন্য, এটি হলো স্যাম্পলিং পিরিয়ড (মাইক্রোসেকেন্ডে), যা সেন্সরটির সমর্থিত সর্বনিম্ন হারের সাথে সঙ্গতিপূর্ণ। এই মানটি কীভাবে ব্যবহৃত হয় সে সম্পর্কে বিস্তারিত জানতে sampling_period_ns দেখুন। মনে রাখবেন যে maxDelay মাইক্রোসেকেন্ডে প্রকাশ করা হয়, যেখানে sampling_period_ns ন্যানোসেকেন্ডে প্রকাশ করা হয়। বিশেষ এবং ওয়ান-শট সেন্সরগুলির জন্য, maxDelay অবশ্যই 0 হতে হবে।
fifoReservedEventCount: হার্ডওয়্যার FIFO-তে এই সেন্সরের জন্য সংরক্ষিত ইভেন্টের সংখ্যা। যদি এই সেন্সরের জন্য একটি ডেডিকেটেড FIFO থাকে, তাহলে fifoReservedEventCount হবে সেই ডেডিকেটেড FIFO-এর আকার। যদি FIFO-টি অন্যান্য সেন্সরের সাথে শেয়ার করা হয়, তাহলে fifoReservedEventCount হবে FIFO-এর সেই অংশের আকার যা ঐ সেন্সরের জন্য সংরক্ষিত। বেশিরভাগ শেয়ার্ড-FIFO সিস্টেমে, এবং যে সিস্টেমগুলিতে হার্ডওয়্যার FIFO নেই, সেখানে এই মান ০ হয়।
fifoMaxEventCount: এই সেন্সরের জন্য FIFO-তে সর্বাধিক যতগুলো ইভেন্ট সংরক্ষণ করা যেতে পারে। এটি সর্বদা fifoReservedEventCount এর চেয়ে বড় বা সমান। অন্য কোনো সেন্সর সক্রিয় না থাকলে, একটি নির্দিষ্ট হারে সেন্সরে রেজিস্টার করার সময় FIFO কত দ্রুত পূর্ণ হবে তা অনুমান করতে এই মানটি ব্যবহৃত হয়। যেসব সিস্টেমে হার্ডওয়্যার FIFO নেই, fifoMaxEventCount মান ০ হয়। আরও বিস্তারিত জানতে ব্যাচিং (Batching) দেখুন।
যেসব সেন্সরের একটি আনুষ্ঠানিক সেন্সর টাইপ রয়েছে, সেগুলোর কিছু ফিল্ড ফ্রেমওয়ার্ক দ্বারা ওভাররাইট করা হয়। উদাহরণস্বরূপ, অ্যাক্সেলেরোমিটার সেন্সরগুলোকে একটি কন্টিনিউয়াস রিপোর্টিং মোড ব্যবহার করতে বাধ্য করা হয়, এবং হার্ট রেট মনিটরগুলোকে SENSOR_PERMISSION_BODY_SENSORS পারমিশন দ্বারা সুরক্ষিত থাকতে বাধ্য করা হয়।
সেন্সর_ইভেন্ট_টি
অ্যান্ড্রয়েড সেন্সর দ্বারা তৈরি এবং poll ফাংশনের মাধ্যমে রিপোর্ট করা সেন্সর ইভেন্টগুলো type sensors_event_t হয়ে থাকে। sensors_event_t এর কিছু গুরুত্বপূর্ণ ফিল্ড নিচে দেওয়া হলো:
সংস্করণ: অবশ্যই sizeof(struct sensors_event_t) হতে হবে
সেন্সর: যে সেন্সরটি ইভেন্টটি তৈরি করেছে তার হ্যান্ডেল, যা sensor_t.handle দ্বারা সংজ্ঞায়িত।
type: যে সেন্সরটি ইভেন্টটি তৈরি করেছে তার সেন্সর টাইপ, যা sensor_t.type দ্বারা সংজ্ঞায়িত।
টাইমস্ট্যাম্প: ন্যানোসেকেন্ডে ইভেন্টের টাইমস্ট্যাম্প। এটি সেই সময় যখন ইভেন্টটি ঘটেছিল (একটি পদক্ষেপ নেওয়া হয়েছিল, বা একটি অ্যাক্সেলেরোমিটার পরিমাপ করা হয়েছিল), ইভেন্টটি রিপোর্ট করার সময় নয়। timestamp অবশ্যই elapsedRealtimeNano ক্লকের সাথে সিঙ্ক্রোনাইজড হতে হবে, এবং কন্টিনিউয়াস সেন্সরের ক্ষেত্রে, জিটার অবশ্যই কম হতে হবে। CDD-এর প্রয়োজনীয়তা পূরণের জন্য কখনও কখনও টাইমস্ট্যাম্প ফিল্টারিং প্রয়োজন হয়, কারণ শুধুমাত্র SoC ইন্টারাপ্ট টাইম ব্যবহার করে টাইমস্ট্যাম্প সেট করলে জিটার খুব বেশি হয়, এবং শুধুমাত্র সেন্সর চিপ টাইম ব্যবহার করলে সেন্সর ক্লকের ড্রিফটের কারণে elapsedRealtimeNano ক্লক থেকে ডি-সিঙ্ক্রোনাইজেশন হতে পারে।
ডেটা এবং ওভারল্যাপিং ফিল্ড: সেন্সর দ্বারা পরিমাপ করা মান। এই ফিল্ডগুলির অর্থ এবং একক প্রতিটি সেন্সর প্রকারের জন্য নির্দিষ্ট। ডেটা ফিল্ডগুলির বিবরণের জন্য sensors.h এবং বিভিন্ন সেন্সর প্রকারের সংজ্ঞা দেখুন। কিছু সেন্সরের ক্ষেত্রে, রিডিংয়ের নির্ভুলতাও একটি status ফিল্ডের মাধ্যমে ডেটার অংশ হিসাবে রিপোর্ট করা হয়। এই ফিল্ডটি শুধুমাত্র সেই নির্দিষ্ট সেন্সর প্রকারগুলির জন্য পাইপ করা হয়, যা SDK স্তরে একটি নির্ভুলতার মান হিসাবে প্রদর্শিত হয়। সেই সেন্সরগুলির জন্য, স্ট্যাটাস ফিল্ডটি যে অবশ্যই সেট করতে হবে, তা তাদের সেন্সর প্রকারের সংজ্ঞায় উল্লেখ করা থাকে।
মেটাডেটা ফ্লাশ সম্পূর্ণ ইভেন্ট
মেটাডেটা ইভেন্টগুলোর ধরন সাধারণ সেন্সর ইভেন্টের মতোই: sensors_event_meta_data_t = sensors_event_t । এগুলো পোল (polle) এর মাধ্যমে অন্যান্য সেন্সর ইভেন্টের সাথে একত্রে ফেরত আসে। এগুলোর নিম্নলিখিত ফিল্ডগুলো থাকে:
সংস্করণ: অবশ্যই META_DATA_VERSION হতে হবে
ধরণ: অবশ্যই SENSOR_TYPE_META_DATA হতে হবে
সেন্সর, সংরক্ষিত, এবং টাইমস্ট্যাম্প : অবশ্যই ০ হতে হবে
meta_data.what: এই ইভেন্টের মেটাডেটা টাইপ ধারণ করে। বর্তমানে একটিমাত্র বৈধ মেটাডেটা টাইপ রয়েছে: META_DATA_FLUSH_COMPLETE ।
META_DATA_FLUSH_COMPLETE ইভেন্টগুলো একটি সেন্সর FIFO ফ্লাশ করার সমাপ্তি নির্দেশ করে। যখন meta_data.what=META_DATA_FLUSH_COMPLETE , তখন meta_data.sensor অবশ্যই ফ্লাশ করা সেন্সরটির হ্যান্ডেলে সেট করতে হবে। এগুলো তখনই তৈরি হয় যখন কোনো সেন্সরের উপর flush ফাংশনটি কল করা হয়। আরও তথ্যের জন্য flush ফাংশন সম্পর্কিত অংশটি দেখুন।