সেন্সর HAL 1.0

সেন্সর HAL ইন্টারফেস, sensors.h এ ঘোষিত, অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এবং হার্ডওয়্যার-নির্দিষ্ট সফ্টওয়্যারের মধ্যে ইন্টারফেস উপস্থাপন করে। একটি এইচএএল বাস্তবায়নকে অবশ্যই 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(তালিকা)

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 হল সেন্সরের হ্যান্ডেল যা সক্রিয়/নিষ্ক্রিয় করতে পারে। একটি সেন্সরের হ্যান্ডেল তার সেন্সর_টি কাঠামোর handle ক্ষেত্র দ্বারা সংজ্ঞায়িত করা হয়।

enabled করার জন্য 1 বা সেন্সর নিষ্ক্রিয় করতে 0 সেট করা হয়েছে।

ওয়ান-শট সেন্সরগুলি একটি ইভেন্ট পাওয়ার পরে স্বয়ংক্রিয়ভাবে নিজেদের নিষ্ক্রিয় করে, এবং activate(..., enabled=0)

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

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

যদি enabled করা হয় 1 এবং সেন্সরটি ইতিমধ্যে সক্রিয় থাকে, এই ফাংশনটি একটি নো-অপ এবং সফল হয়৷

যদি enabled 0 হয় এবং সেন্সর ইতিমধ্যে নিষ্ক্রিয় করা হয়, এই ফাংশনটি একটি নো-অপ এবং সফল হয়৷

এই ফাংশন সাফল্যের উপর 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 অনুচ্ছেদটি দেখুন।

এই ফাংশন সাফল্যের উপর 0 এবং অন্যথায় একটি নেতিবাচক ত্রুটি নম্বর প্রদান করে।

সেট বিলম্ব (সেন্সর, নমুনা সময়কাল)

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 সেট করতে ব্যাচের পরিবর্তে 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

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

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

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

প্রকার: সেন্সরের প্রকার। এন্ড্রয়েড সেন্সর কি কি? আরো বিস্তারিত জানার জন্য, এবং অফিসিয়াল সেন্সর প্রকারের জন্য সেন্সর প্রকার দেখুন। অ-অফিসিয়াল সেন্সর প্রকারের জন্য, type অবশ্যই SENSOR_TYPE_DEVICE_PRIVATE_BASE দিয়ে শুরু হবে

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

প্রয়োজনীয় অনুমতি: সেন্সর দেখতে, এটিতে নিবন্ধন করতে এবং এর ডেটা গ্রহণ করার জন্য অ্যাপ্লিকেশনগুলির অবশ্যই থাকতে হবে এমন অনুমতির প্রতিনিধিত্বকারী একটি স্ট্রিং৷ একটি খালি স্ট্রিং মানে অ্যাপ্লিকেশনের এই সেন্সর অ্যাক্সেস করার জন্য কোনো অনুমতির প্রয়োজন হয় না। হার্ট রেট মনিটরের মতো কিছু সেন্সরের জন্য একটি বাধ্যতামূলক 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 নেই তাদের ক্ষেত্রে এই মান 0।

fifoMaxEventCount: এই সেন্সরের জন্য FIFO-এ সংরক্ষিত ইভেন্টের সর্বাধিক সংখ্যা। এটি সর্বদা fifoReservedEventCount এর চেয়ে বড় বা সমান। একটি নির্দিষ্ট হারে সেন্সরে নিবন্ধন করার সময় FIFO কত দ্রুত পূর্ণ হবে তা অনুমান করতে এই মানটি ব্যবহার করা হয়, ধরুন অন্য কোনও সেন্সর সক্রিয় নেই। যেসব সিস্টেমে হার্ডওয়্যার FIFO নেই, fifoMaxEventCount হল 0। আরও বিস্তারিত জানার জন্য ব্যাচিং দেখুন।

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

সেন্সর_ইভেন্ট_টি

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

সংস্করণ: আকারের হতে হবে sizeof(struct sensors_event_t)

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

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

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

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

মেটাডেটা সম্পূর্ণ ঘটনা ফ্লাশ

মেটাডেটা ইভেন্টের স্বাভাবিক সেন্সর ইভেন্টের মতো একই ধরনের থাকে: sensors_event_meta_data_t = sensors_event_t । তারা ভোটের মাধ্যমে অন্যান্য সেন্সর ইভেন্টের সাথে একসাথে ফিরে আসে। তাদের নিম্নলিখিত ক্ষেত্র রয়েছে:

সংস্করণ: META_DATA_VERSION হতে হবে

প্রকার: SENSOR_TYPE_META_DATA হতে হবে

সেন্সর, সংরক্ষিত, এবং টাইমস্ট্যাম্প : 0 হতে হবে

meta_data.what: এই ইভেন্টের জন্য মেটাডেটা প্রকার রয়েছে। বর্তমানে একটি বৈধ মেটাডেটা প্রকার রয়েছে: META_DATA_FLUSH_COMPLETE

META_DATA_FLUSH_COMPLETE ইভেন্টগুলি একটি সেন্সর FIFO এর ফ্লাশ সম্পূর্ণ হওয়ার প্রতিনিধিত্ব করে৷ যখন meta_data.what=META_DATA_FLUSH_COMPLETE , meta_data.sensor অবশ্যই ফ্লাশ করা সেন্সরের হ্যান্ডেলে সেট করতে হবে। সেন্সরে যখন এবং শুধুমাত্র যখন flush করা হয় তখন সেগুলি তৈরি হয়৷ আরও তথ্যের জন্য ফ্লাশ ফাংশনের বিভাগটি দেখুন।