Sensors HAL 1.0

sensors.h-এ ঘোষিত সেন্সর HAL ইন্টারফেস, Android ফ্রেমওয়ার্ক এবং হার্ডওয়্যার-নির্দিষ্ট সফ্টওয়্যারের মধ্যে ইন্টারফেসকে উপস্থাপন করে। sensors.h-এ ঘোষণা করা প্রতিটি ফাংশনকে HAL ইমপ্লিমেন্টেশনে অবশ্যই সংজ্ঞায়িত করতে হবে। প্রধান ফাংশনগুলি হল:

  • 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)-এর মাধ্যমে ফেরত পাঠানো একটি।

এই ফাংশনটি তালিকায় থাকা সেন্সরের সংখ্যা রিটার্ন করে।

activate(sensor, true/false)

int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int
  enabled);

কোনও সেন্সর অ্যাক্টিভেট বা ডিঅ্যাক্টিভেট করে।

sensor_handle হল সেন্সর অ্যাক্টিভেট/ডিঅ্যাক্টিভেট করার হ্যান্ডেল। কোনও সেন্সরের হ্যান্ডেল তার sensor_t স্ট্রাকচারের handle ফিল্ড দ্বারা সংজ্ঞায়িত করা হয়।

সেন্সর চালু করতে enabled-এর ভ্যালু ১ অথবা বন্ধ করতে ০ সেট করা হয়েছে।

কোনও ইভেন্ট পাওয়ার পরে ওয়ান-শট সেন্সর অটোমেটিক ডিঅ্যাক্টিভেট হয়ে যায়, এবং activate(..., enabled=0)-এ কল করার মাধ্যমে ডিঅ্যাক্টিভেট হওয়ার জন্য সেটিকে এখনও সম্মতি দিতে হবে।

নন-ওয়েক-আপ সেন্সর কখনই SoC-কে সাসপেন্ড মোডে যেতে বাধা দেয় না; অর্থাৎ, HAL অ্যাপ্লিকেশনের পক্ষ থেকে আংশিক ওয়েক-লক ধরে রাখবে না।

ওয়েক-আপ সেন্সর, ক্রমাগত ইভেন্ট ডেলিভার করার সময়, SoC-কে সাসপেন্ড মোডে যেতে বাধা দিতে পারে, তবে কোনও ইভেন্ট ডেলিভার করার প্রয়োজন না হলে, আংশিক ওয়েক-লক অবশ্যই রিলিজ করতে হবে।

enabled-এর মান ১ হলে এবং সেন্সর আগেই অ্যাক্টিভেট করা থাকলে, এই ফাংশনটি একটি নো-অপ এবং সফল হয়।

enabled-এর মান ০ হলে এবং সেন্সর আগে থেকেই বন্ধ করা থাকলে, এই ফাংশন কোনও কাজ করে না এবং সফল হয়।

এই ফাংশনটি সফল হলে ০ এবং অন্যথায় নেগেটিভ ত্রুটি সংখ্যা রিটার্ন করে।

ব্যাচ(সেন্সর, ফ্ল্যাগ, স্যাম্পলিং পিরিয়ড, সর্বাধিক রিপোর্ট লেটেন্সি)

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(sensor, sampling period)

int (*setDelay)(
     struct sensors_poll_device_t *dev,
     int sensor_handle,
     int64_t sampling_period_ns);

HAL ভার্সন ১.০-এর পরে, এই ফাংশনটি বন্ধ করে দেওয়া হয়েছে এবং এটি আর কখনও কল করা হয় না। পরিবর্তে, sampling_period_ns প্যারামিটার সেট করতে batch ফাংশন কল করা হয়।

HAL ভার্সন 1.0-এ, sampling_period_ns সেট করার জন্য ব্যাচের পরিবর্তে setDelay ব্যবহার করা হত।

flush(sensor)

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 যদি নির্দিষ্ট সেন্সরটি একটি ওয়ান-শট সেন্সর হয় বা চালু না থাকে এবং অন্যথায় একটি নেতিবাচক ত্রুটি নম্বর।

poll()

int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int
  count);

data আর্গুমেন্ট পূরণ করে সেন্সর ডেটার অ্যারে দেখায়। ইভেন্ট উপলভ্য না হওয়া পর্যন্ত এই ফাংশনকে অবশ্যই ব্লক করতে হবে। সফল হলে, এটি রিড করা ইভেন্টের সংখ্যা ফেরাবে অথবা কোনও সমস্যা হলে নেগেটিভ এরর নম্বর ফেরাবে।

data-এ রিটার্ন করা ইভেন্টের সংখ্যা count আর্গুমেন্টের সমান বা তার থেকে কম হতে হবে। এই ফাংশন কখনই ০ (কোনও ইভেন্ট নেই) রিটার্ন করবে না।

কলের ক্রম

ডিভাইস বুট করার সময়, get_sensors_list কল করা হয়।

কোনও সেন্সর অ্যাক্টিভেট হলে, batch ফাংশনটি অনুরোধ করা প্যারামিটার সহ কল করা হবে, তারপরে activate(..., enable=1) কল করা হবে।

মনে রাখবেন যে HAL ভার্সন ১_০-এ, ক্রমটি বিপরীত ছিল: activate প্রথমে কল করা হয়েছিল, তারপরে set_delay।

কোনও সেন্সর অ্যাক্টিভেট করা অবস্থায় সেটির অনুরোধ করা বৈশিষ্ট্য পরিবর্তন করা হলে, batch ফাংশন কল করা হয়।

flush যেকোনও সময় কল করা যেতে পারে, এমনকি অ্যাক্টিভেট করা হয়নি এমন সেন্সরেও (এই ক্ষেত্রে সেটিকে অবশ্যই -EINVAL রিটার্ন করতে হবে)

কোনও সেন্সর বন্ধ হয়ে গেলে, activate(..., enable=0) কল করা হবে।

এইসব কলের সমান্তরালভাবে, ডেটার অনুরোধ করতে poll ফাংশনটি বারবার কল করা হবে। কোনও সেন্সর চালু না থাকলেও poll-কে কল করা যাবে।

sensors_module_t

sensors_module_t হল সেন্সরের জন্য Android হার্ডওয়্যার মডিউল তৈরি করতে ব্যবহৃত ধরন। HAL-এর প্রয়োগকে অবশ্যই এই ধরনের একটি অবজেক্ট HAL_MODULE_INFO_SYM সংজ্ঞায়িত করতে হবে যাতে get_sensors_list ফাংশনটি এক্সপোজ করা যায়। আরও তথ্যের জন্য 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

sensor_t Android সেন্সরকে দেখায়। এর কিছু গুরুত্বপূর্ণ ফিল্ড এখানে দেওয়া হল:

নাম: ব্যবহারকারী দেখতে পাবেন এমন স্ট্রিং যা সেন্সরকে দেখায়। এই স্ট্রিংয়ে প্রায়ই আন্ডারলায়িং সেন্সরের পার্টের নাম, সেন্সরের ধরন এবং এটি একটি ওয়েক-আপ সেন্সর কিনা সেই সংক্রান্ত তথ্য থাকে। যেমন, “LIS2HH12 অ্যাক্সিলরোমিটার”, “MAX21000 আনক্যালিব্রেটেড জাইরোস্কোপ”, “BMP280 ওয়েক-আপ ব্যারোমিটার”, “MPU6515 গেম রোটেশন ভেক্টর”

হ্যান্ডেল: সেন্সরে রেজিস্টার করার সময় বা সেখান থেকে ইভেন্ট জেনারেট করার সময় সেন্সরকে উল্লেখ করতে ব্যবহৃত ইন্টিজার।

type: সেন্সরের ধরন। আরও বিবরণের জন্য Android সেন্সর কী? লিঙ্কে গিয়ে সেন্সরের ধরন সম্পর্কে ব্যাখ্যা দেখুন এবং অফিসিয়াল সেন্সরের ধরন সম্পর্কে জানতে সেন্সরের ধরন দেখুন। অফিসিয়াল নয় এমন সেন্সরের ধরনের জন্য, type অবশ্যই SENSOR_TYPE_DEVICE_PRIVATE_BASE দিয়ে শুরু হতে হবে

stringType: স্ট্রিং হিসেবে সেন্সরের ধরন। সেন্সরের অফিসিয়াল ধরন থাকলে, SENSOR_STRING_TYPE_* হিসেবে সেট করুন। সেন্সরের যদি প্রস্তুতকারী-নির্দিষ্ট ধরন থাকে, তাহলে stringType অবশ্যই প্রস্তুতকারীর রিভার্স ডোমেন নাম দিয়ে শুরু হতে হবে। যেমন, Cool-product টিমের Fictional-Company-তে সংজ্ঞায়িত করা কোনও সেন্সর (যেমন, একটি ইউনিকর্ন ডিটেক্টর) stringType=”com.fictional_company.cool_product.unicorn_detector” ব্যবহার করতে পারে। stringType ব্যবহার করে অনন্যভাবে নন-অফিসিয়াল সেন্সর টাইপ শনাক্ত করা হয়। বিভিন্ন ধরন ও স্ট্রিং সম্পর্কিত আরও তথ্যের জন্য sensors.h দেখুন।

requiredPermission: সেন্সর দেখতে, এতে রেজিস্টার করতে এবং এর ডেটা পেতে অ্যাপ্লিকেশনের কাছে অবশ্যই থাকতে হবে এমন অনুমতিকে প্রতিনিধিত্বকারী একটি স্ট্রিং। খালি স্ট্রিংয়ের অর্থ হল, এই সেন্সর অ্যাক্সেস করার জন্য অ্যাপ্লিকেশনের কোনও অনুমতির প্রয়োজন নেই। হার্ট রেট মনিটরের মতো কিছু সেন্সর ধরনের ক্ষেত্রে requiredPermissionবাধ্যতামূলক। সংবেদনশীল ব্যবহারকারীর তথ্য (যেমন, হার্ট রেট) প্রদানকারী সব সেন্সরকে অবশ্যই অনুমতি দিয়ে সুরক্ষিত রাখতে হবে।

ফ্ল্যাগ: এই সেন্সরের জন্য ফ্ল্যাগ, যা সেন্সরের রিপোর্টিং মোড এবং সেন্সরটি ওয়েক-আপ সেন্সর কিনা তা নির্ধারণ করে। যেমন, একটি ওয়ান-শট ওয়েক-আপ সেন্সরে flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP থাকবে। বর্তমান HAL ভার্সনে ব্যবহার করা হয় না এমন ফ্ল্যাগের বিট অবশ্যই ০-এর সমান রাখতে হবে।

maxRange: সেন্সরটি যে সর্বাধিক মান রিপোর্ট করতে পারে, তা রিপোর্ট করা মানের একই ইউনিটে হতে হবে। [-maxRange; maxRange]-এর মধ্যে স্যাচুরেট না হয়ে সেন্সরকে অবশ্যই ভ্যালু রিপোর্ট করতে হবে । মনে রাখবেন, এর অর্থ হল, জেনেরিক অর্থে সেন্সরের মোট রেঞ্জ হল 2*maxRange। সেন্সর যখন একাধিক অক্ষ জুড়ে ভ্যালু রিপোর্ট করে, তখন রেঞ্জ প্রতিটি অক্ষের ক্ষেত্রে প্রযোজ্য হয়। যেমন, “+/- 2g” অ্যাক্সিলরোমিটার maxRange = 2*9.81 = 2g রিপোর্ট করবে।

রেজোলিউশন: সেন্সরটি পরিমাপ করতে পারে এমন মানের সবচেয়ে ছোট পার্থক্য। সাধারণত maxRange এবং পরিমাপের বিটের সংখ্যার উপর ভিত্তি করে গণনা করা হয়।

পাওয়ার: সেন্সর চালু করার জন্য প্রয়োজনীয় পাওয়ারের খরচ, মিলিঅ্যাম্পে। এটি প্রায় সবসময়ই অন্তর্নিহিত সেন্সরের ডেটাশিটে রিপোর্ট করা বিদ্যুতের খরচের চেয়ে বেশি হয়। আরও বিবরণের জন্য বেস সেন্সর != ফিজিক্যাল সেন্সর দেখুন এবং সেন্সরের পাওয়ার কনজাম্পশন কীভাবে পরিমাপ করতে হয় সেই বিষয়ে বিবরণের জন্য পাওয়ার পরিমাপ প্রক্রিয়া দেখুন। ডিভাইসটি নড়াচড়া করছে কিনা তার উপর যদি সেন্সরের বিদ্যুৎ খরচ নির্ভর করে, তাহলে নড়াচড়া করার সময় বিদ্যুৎ খরচ power ফিল্ডে রিপোর্ট করা হয়।

minDelay: একটানা সেন্সরের জন্য, স্যাম্পেল নেওয়ার সময়সীমা, মাইক্রোসেকেন্ডে যা সেন্সরের সবচেয়ে দ্রুত রেটের সাথে মানানসই। এই ভ্যালু কীভাবে ব্যবহার করা হয় সেই সম্পর্কে বিস্তারিত জানতে sampling_period_ns দেখুন। মনে রাখবেন যে minDelay মাইক্রোসেকেন্ডে প্রকাশ করা হয়, যেখানে sampling_period_ns ন্যানোসেকেন্ডে প্রকাশ করা হয়। পরিবর্তন ও বিশেষ রিপোর্টিং মোড সেন্সরের জন্য, অন্য কিছু নির্দিষ্ট করা না থাকলে, minDelay অবশ্যই ০ হতে হবে। ওয়ান-শট সেন্সরের ক্ষেত্রে, এটি -১ হতেই হবে।

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-এর মান হল ০। আরও বিবরণের জন্য ব্যাচিং দেখুন।

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

sensors_event_t

Android সেন্সর দ্বারা জেনারেট করা এবং পোল ফাংশনের মাধ্যমে রিপোর্ট করা সেন্সর ইভেন্টগুলি type sensors_event_t হয়। sensors_event_t-এর কিছু গুরুত্বপূর্ণ ফিল্ড এখানে দেওয়া হল:

ভার্সন: sizeof(struct sensors_event_t) হতে হবে

sensor: ইভেন্ট তৈরি করা সেন্সরের হ্যান্ডেল, যা sensor_t.handle দ্বারা সংজ্ঞায়িত করা হয়েছে।

ধরন: ইভেন্ট তৈরি করা সেন্সরের ধরন, যেমনটি sensor_t.type দ্বারা সংজ্ঞায়িত করা হয়েছে।

টাইমস্ট্যাম্প: ন্যানোসেকেন্ডে ইভেন্টের টাইমস্ট্যাম্প। এটি হল সেই সময় যখন ইভেন্টটি ঘটেছে (কোনও পদক্ষেপ নেওয়া হয়েছে বা অ্যাকসিলরোমিটার পরিমাপ করা হয়েছে), ইভেন্টটি রিপোর্ট করার সময় নয়। timestamp অবশ্যই elapsedRealtimeNano ক্লকের সাথে সিঙ্ক করা থাকতে হবে এবং কন্টিনিউয়াস সেন্সরের ক্ষেত্রে, জিটার অবশ্যই ছোট হতে হবে। CDD সংক্রান্ত প্রয়োজনীয়তা পূরণের জন্য কখনও কখনও টাইমস্ট্যাম্প ফিল্টার করা প্রয়োজন, কারণ টাইমস্ট্যাম্প সেট করার জন্য শুধুমাত্র SoC ইন্টারাপ্ট টাইম ব্যবহার করলে অত্যধিক বেশি জিটার হয় এবং টাইমস্ট্যাম্প সেট করার জন্য শুধুমাত্র সেন্সর চিপ টাইম ব্যবহার করলে elapsedRealtimeNano ক্লক থেকে ডিসিনক্রোনাইজেশন হতে পারে, কারণ সেন্সর ক্লক ড্রাফ্ট করে।

ডেটা ও ওভারল্যাপ করা ফিল্ড: সেন্সর দ্বারা পরিমাপ করা ভ্যালু। প্রতিটি সেন্সরের ধরন অনুযায়ী সেইসব ফিল্ডের অর্থ ও ইউনিট নির্দিষ্ট করা থাকে। ডেটা ফিল্ডের বিবরণ পেতে, sensors.h এবং বিভিন্ন সেন্সর ধরনের সংজ্ঞা দেখুন। কিছু সেন্সরের ক্ষেত্রে, ডেটার অংশ হিসেবে, status ফিল্ডের মাধ্যমে রিডিংয়ের নির্ভুলতাও রিপোর্ট করা হয়। এই ফিল্ডটি শুধুমাত্র বেছে নেওয়া সেন্সরের ধরনের জন্য পাইপ করা হয়, যা SDK লেয়ারে নির্ভুলতা মান হিসেবে দেখা যায়। সেইসব সেন্সরের জন্য, স্ট্যাটাস ফিল্ড অবশ্যই সেট করতে হবে এই বিষয়টি তাদের সেন্সর টাইপ সংজ্ঞায় উল্লেখ করা আছে।

মেটাডেটা ফ্ল্যাশ সম্পূর্ণ হওয়ার ইভেন্ট

মেটাডেটা ইভেন্টের ধরন সাধারণ সেন্সর ইভেন্টের মতোই হয়: sensors_event_meta_data_t = sensors_event_t. এগুলি পোলিংয়ের মাধ্যমে অন্যান্য সেন্সর ইভেন্টের সাথে একসাথে রিটার্ন করা হয়। এগুলিতে নিম্নলিখিত ফিল্ড থাকে:

ভার্সন: META_DATA_VERSION হতে হবে

type: 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 কল করা হলে তবেই এগুলি জেনারেট হয়। আরও তথ্যের জন্য ফ্লাশ ফাংশন সংক্রান্ত বিভাগ দেখুন।