সেন্সর HAL ইন্টারফেস, sensors.h এ ঘোষিত, Android ফ্রেমওয়ার্ক এবং হার্ডওয়্যার-নির্দিষ্ট সফ্টওয়্যারের মধ্যে ইন্টারফেস উপস্থাপন করে। একটি এইচএএল বাস্তবায়ন অবশ্যই সেন্সর-এ ঘোষিত প্রতিটি ফাংশনকে সংজ্ঞায়িত করবে। প্রধান ফাংশন হল:
-
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
অবজেক্টকে সংজ্ঞায়িত করতে হবে। আরও তথ্যের জন্য 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
একটি 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
কল করা হয় তখন সেগুলি তৈরি হয়৷ আরও তথ্যের জন্য ফ্লাশ ফাংশনের বিভাগটি দেখুন।