সেন্সর মাল্টি-HAL হল এমন একটি ফ্রেমওয়ার্ক যা সেন্সর HAL-কে অন্যান্য সেন্সর HAL-এর সাথে রান করার অনুমতি দেয়। Sensors Multi-HAL, ভেন্ডর পার্টিশনে ডায়নামিক লাইব্রেরি হিসেবে সেভ করা সেন্সর সাব-HAL-কে ডায়নামিক লোড করে এবং সেগুলিকে একটি কলব্যাক অবজেক্ট দেয় যা ইভেন্ট পোস্ট করা এবং ওয়েক লক পাওয়া ও রিলিজ করা হ্যান্ডেল করতে পারে। সেন্সর সাব-HAL হল একটি সেন্সর HAL যা ভেন্ডর পার্টিশনে শেয়ার করা অবজেক্টে তৈরি করা হয় এবং মাল্টি-HAL ফ্রেমওয়ার্ক দ্বারা ব্যবহৃত হয়। এই সাব-HAL একে অপরের উপর বা মাল্টি-HAL কোডের উপর নির্ভর করে না, যেখানে প্রসেসের জন্য প্রধান ফাংশন থাকে।
Android 11 বা তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইসে উপলভ্য Sensors Multi-HAL 2.1 হল Sensors Multi-HAL 2.0-এর একটি ইটারেশন যা সাব-HAL লোড করতে পারে। এটি হিঞ্জ অ্যাঙ্গেল সেন্সর টাইপ দেখাতে পারে। এই ধরনের সেন্সরকে সাপোর্ট করতে, সাব-HAL-কে অবশ্যই 2.1 SubHal হেডার-এ সংজ্ঞায়িত সাব-HAL API ব্যবহার করতে হবে।
Android 13 বা তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইসের জন্য, যেগুলি সেন্সর AIDL HAL ব্যবহার করে, আপনি মাল্টি-HAL ক্ষমতাকে অনুমতি দিতে মাল্টি-HAL শিম লেয়ার ব্যবহার করতে পারবেন। প্রয়োগ সংক্রান্ত বিবরণের জন্য, Sensors AIDL HAL-এর সাথে Sensors Multi-HAL ব্যবহার করা লিঙ্ক দেখুন।
Sensors Multi-HAL 2 ও Sensors HAL 2-এর মধ্যে পার্থক্য
Android 10 বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসে উপলভ্য Sensors Multi-HAL 2, Sensors HAL 2-এর উপরে
বেশ কিছু অ্যাবস্ট্রাকশন নিয়ে আসে,
যাতে HAL API-এর সাথে ইন্টার্যাক্ট করা সহজ হয়। সেন্সর মাল্টি-HAL 2, সেন্সর HAL 2 ইন্টারফেস প্রয়োগ করা ম্যানেজ করতে
HalProxy
ক্লাস এবং HalProxy-কে সাব-HAL-এর সাথে ইন্টার্যাক্ট করতে দেওয়ার জন্য
V2_1/SubHal
(বা
V2_0/SubHal)
ইন্টারফেস নিয়ে আসে।
ISensorsSubHal ইন্টারফেসটি
2.1/ISensors.hal
(বা
2.0/ISensors.hal)
ইন্টারফেসের থেকে নিম্নলিখিতভাবে আলাদা:
- ইনিশিয়ালাইজ পদ্ধতি দুটি FMQ এবং
ISensorsCallback-এর পরিবর্তে একটিIHalProxyCallbackক্লাস পাস করে। - বাগ রিপোর্টে ডিবাগিং তথ্য প্রদান করার জন্য সাব-HAL-কে অবশ্যই একটি ডিবাগ ফাংশন প্রয়োগ করতে হবে।
- সাব-HAL-কে অবশ্যই একটি নাম ফাংশন প্রয়োগ করতে হবে যাতে লোড করা সাব-HAL-কে অন্যান্য সাব-HAL থেকে আলাদা করা যায়।
Sensors Multi-HAL 2 এবং Sensors HAL 2-এর মধ্যে প্রধান পার্থক্য হল
ফাংশন শুরু করা। FMQ প্রদান করার পরিবর্তে, IHalProxyCallback
ইন্টারফেস দুটি পদ্ধতি প্রদান করে, একটি পদ্ধতি হল সেন্সর
ফ্রেমওয়ার্কে সেন্সর ইভেন্ট পোস্ট করা এবং অন্য পদ্ধতি হল ওয়েক লক তৈরি করা। এর মধ্যে, Sensors
Multi-HAL, সব সাব-HAL-এর জন্য
সেন্সর ইভেন্টের সময়মতো ডেলিভারি নিশ্চিত করতে FMQ-এর সাথে হওয়া সব ইন্টার্যাকশন ম্যানেজ করে। সাব-HAL-কে
createScopedWakelock পদ্ধতি ব্যবহার করে Sensors Multi-HAL-কে
ওয়েক লক টাইম-আউট করার দায়িত্ব অর্পণ করার জন্য এবং সমগ্র Sensors Multi-HAL-এর জন্য একটি সাধারণ ওয়েক লক
ব্যবহার করে ওয়েক লক ব্যবহারকে কেন্দ্রীভূত করার জন্য অত্যন্ত সাজেস্ট করা হয়, যা লক ও আনলক করার কলকে মিনিমাইজ করে।
এছাড়াও, Sensors Multi-HAL 2-তে কিছু বিল্ট-ইন নিরাপত্তা ফিচার আছে। এটি এমন পরিস্থিতি সামলায় যেখানে সেন্সর FMQ পূর্ণ হয়ে গেছে অথবা যেখানে Android সেন্সর ফ্রেমওয়ার্ক
রিস্টার্ট হয় এবং সেন্সর স্টেট রিসেট করতে হয়। এছাড়াও, ইভেন্ট HalProxy ক্লাসে পোস্ট করা হলে, কিন্তু সেন্সর ফ্রেমওয়ার্ক
সেগুলি সঙ্গে সঙ্গে গ্রহণ করতে না পারলে, Sensors Multi-HAL ইভেন্ট পোস্ট করার জন্য অপেক্ষা করার সময়
সব সাব-HAL জুড়ে কাজ চালিয়ে যাওয়ার অনুমতি দিতে, ইভেন্টগুলিকে ব্যাকগ্রাউন্ড
থ্রেডে সরাতে পারে।
সোর্স কোড ও রেফারেন্স প্রয়োগ
সব সেন্সরের মাল্টি-HAL কোড
hardware/interfaces/sensors/common/default/2.X/multihal/-এ উপলভ্য।
এখানে কিছু রিসোর্সের পয়েন্টার দেওয়া হল।
HalProxy.h:HalProxyঅবজেক্টটি সেন্সর মাল্টি-HAL দ্বারা ইনস্ট্যান্টিয়েট করা হয় এবং সাব-HAL থেকে সেন্সর ফ্রেমওয়ার্কে ডেটা পাস করার বিষয়টি ম্যানেজ করে।HalProxy.cpp:HalProxy-এর প্রয়োগে সাব-HAL ও সেন্সর ফ্রেমওয়ার্কের মধ্যে যোগাযোগ মাল্টিপ্লেক্স করার জন্য প্রয়োজনীয় সব লজিক থাকে।SubHal.h:ISensorsSubHalইন্টারফেসটি এমন একটি ইন্টারফেসকে সংজ্ঞায়িত করে যা সাব-HAL-কেHalProxy-এর সাথে সামঞ্জস্যপূর্ণ হতে অবশ্যই অনুসরণ করতে হবে। সাব-HAL initialize পদ্ধতি প্রয়োগ করে যাতেHalProxyCallbackঅবজেক্টকেpostEventsওcreateScopedWakelock-এর জন্য ব্যবহার করা যায়।Multi-HAL 2.0 প্রয়োগের জন্য,
SubHal.h-এর 2.0 ভার্সন ব্যবহার করুন।hardware/interfaces/sensors/common/default/2.X/multihal/tests/: এইসব ইউনিট টেস্টHalProxyপ্রয়োগ যাচাই করে।hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/: এই উদাহরণ সাব-HAL ইমপ্লিমেন্টেশন, ভুয়ো ডেটা তৈরি করতে ভুয়ো সেন্সর ব্যবহার করে। ডিভাইসে একাধিক সাব-HAL কীভাবে ইন্টার্যাক্ট করে তা পরীক্ষা করার জন্য এটি উপযোগী।
প্রয়োগ
এই বিভাগে নিম্নলিখিত পরিস্থিতিতে কীভাবে সেন্সর মাল্টি-HAL প্রয়োগ করতে হয় তা বর্ণনা করা হয়েছে:
- সেন্সর AIDL HAL-এর সাথে সেন্সর মাল্টি-HAL ব্যবহার করা
- সেন্সর মাল্টি-HAL ২.১ প্রয়োগ করা
- Sensors Multi-HAL 2.0 থেকে Multi-HAL 2.1-এ পোর্ট করা
- Sensors HAL 2.0 থেকে পোর্ট করা
- Sensors HAL 1.0 থেকে পোর্ট করা
- Sensors Multi-HAL 1.0 থেকে পোর্ট করা
সেন্সর AIDL HAL-এর সাথে সেন্সর মাল্টি-HAL ব্যবহার করুন
Sensors AIDL HAL-এর সাথে মাল্টি-HAL ক্ষমতাকে অনুমতি দিতে, AIDL Multi-HAL শিম লেয়ার মডিউল ইমপোর্ট করুন, যা hardware/interfaces/sensors/aidl/default/multihal/-এ পাওয়া যায়। মডিউলটি AIDL এবং HIDL সেন্সর HAL সংজ্ঞা টাইপের মধ্যে কনভার্সন ম্যানেজ করে এবং ইমপ্লিমেন্টিং সেন্সর মাল্টি-HAL 2.1-এ বর্ণিত মাল্টি-HAL ইন্টারফেসের চারপাশে একটি র্যাপারকে সংজ্ঞায়িত করে। AIDL মাল্টি-HAL শিম লেয়ার সেইসব ডিভাইসের সাথে মানানসই যেগুলি সেন্সর মাল্টি-HAL ২.১ প্রয়োগ করে।
AIDL মাল্টি-HAL শিম লেয়ার আপনাকে Sensors AIDL HAL-এ হেড ট্র্যাকার এবং
সীমিত-অ্যাক্সিস IMU সেন্সর ধরন এক্সপোজ করতে দেয়। AIDL HAL ইন্টারফেসের মাধ্যমে সংজ্ঞায়িত এই সেন্সর
টাইপগুলি ব্যবহার করতে, getSensorsList_2_1() ইমপ্লিমেন্টেশনে type ফিল্ডটি
SensorInfo স্ট্রাক্টে সেট করুন। এটি নিরাপদ
কারণ AIDL এবং HIDL সেন্সর HAL-এর
পূর্ণসংখ্যা-ব্যাকড সেন্সর টাইপ ফিল্ড ওভারল্যাপ করে না।
Sensors Multi-HAL 2.1 প্রয়োগ করা
নতুন ডিভাইসে Sensors Multi-HAL 2.1 প্রয়োগ করতে, এই ধাপগুলি অনুসরণ করুন:
SubHal.h-এ বর্ণিতISensorsSubHalইন্টারফেস প্রয়োগ করুন।SubHal.h-এsensorsHalGetSubHal_2_1পদ্ধতি প্রয়োগ করুন।নতুনভাবে প্রয়োগ করা সাব-HAL তৈরি করতে
cc_library_sharedটার্গেট যোগ করুন। টার্গেট যোগ করার সময়:- টার্গেটটি ডিভাইসের ভেন্ডর পার্টিশনের কোথাও পুশ করা হয়েছে কিনা তা নিশ্চিত করুন।
/vendor/etc/sensors/hals.conf-এ থাকা কনফিগারেশন ফাইলে, নতুন লাইনে লাইব্রেরির পাথ যোগ করুন। প্রয়োজন হলে,hals.confফাইল তৈরি করুন।
সাব-HAL লাইব্রেরি তৈরির জন্য
Android.bpএন্ট্রি সংক্রান্ত উদাহরণের জন্য,hardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bpদেখুন।ডিভাইসে কাজ করে এমন HAL-এর তালিকা আছে এমন
manifest.xmlফাইল থেকে সবandroid.hardware.sensorsএন্ট্রি সরিয়ে দিন।device.mkফাইল থেকে সবandroid.hardware.sensorsপরিষেবা ওservice.rcফাইল সরিয়েPRODUCT_PACKAGES-এandroid.hardware.sensors@2.1-service.multihalওandroid.hardware.sensors@2.1-service.multihal.rcযোগ করুন।
বুট করার সময়, HalProxy শুরু হয়, নতুন প্রয়োগ করা সাব-HAL খোঁজে এবং
sensorsHalGetSubHal_2_1 কল করে
সেটিকে ইনিশিয়ালাইজ করে।
Sensors Multi-HAL 2.0 থেকে Multi-HAL 2.1-এ পোর্ট করা
Multi-HAL 2.0 থেকে Multi-HAL 2.1-এ পোর্ট করতে, SubHal
ইন্টারফেস প্রয়োগ করুন এবং আপনার সাব-HAL আবার কম্পাইল করুন।
2.0 ও 2.1 SubHal ইন্টারফেসের মধ্যে পার্থক্যগুলি হল:
IHalProxyCallbackISensors.halস্পেসিফিকেশনের ভার্সন ২.১-এ তৈরি করা ধরন ব্যবহার করে।- 2.0
SubHalইন্টারফেস থেকে পাওয়াটির পরিবর্তেinitialize()ফাংশন একটি নতুনIHalProxyCallbackপাস করে ISensors.halস্পেসিফিকেশনের 2.1 ভার্সনে যোগ করা নতুন ধরনের পদ্ধতি ব্যবহার করার জন্য সাব-HAL-কেgetSensorsListওinjectSensorData-এর পরিবর্তেgetSensorsList_2_1ওinjectSensorData_2_1ব্যবহার করতে হবে।- মাল্টি-HAL-এর জন্য সাব-HAL-কে ভার্সন 2.1
সাব-HAL হিসেবে গণ্য করতে
sensorsHalGetSubHal_2_1প্রকাশ করতে হবে,sensorsHalGetSubHalনয়।
Sensors HAL 2.0 থেকে পোর্ট
Sensors HAL 2.0 থেকে Sensors Multi-HAL 2.0-এ আপগ্রেড করার সময়, HAL ইমপ্লিমেন্টেশন নিম্নলিখিত প্রয়োজনীয়তা পূরণ করছে কিনা তা নিশ্চিত করুন।
HAL চালু করা
সেন্সর HAL 2.0-এ একটি ইনিশিয়ালাইজ ফাংশন আছে যা সেন্সর পরিষেবাকে
FMQ ও ডায়নামিক সেন্সর কলব্যাক পাস করতে দেয়। Sensors Multi-HAL 2.0-এ,
initialize() ফাংশন একটি কলব্যাক পাস করে যা অবশ্যই
সেন্সর ইভেন্ট পোস্ট করতে, ওয়েক লক পেতে এবং ডায়নামিক সেন্সর কানেকশন ও
ডিসকানেকশন সম্পর্কে বিজ্ঞপ্তি দিতে ব্যবহার করতে হবে।
Multi-HAL ইমপ্লিমেন্টেশনে সেন্সর ইভেন্ট পোস্ট করা
FMQ-এর মাধ্যমে সেন্সর ইভেন্ট পোস্ট করার পরিবর্তে, সেন্সর ইভেন্ট উপলভ্য হলে সাব-HAL-কে অবশ্যই সেন্সর ইভেন্টগুলি
IHalProxyCallback
-এ লিখতে হবে।
WAKE_UP ইভেন্ট
Sensors HAL 2.0-এ, HAL এটির প্রয়োগের জন্য ওয়েক লক ম্যানেজ করতে পারে। Sensors Multi-HAL 2.0-এ, সাব-HAL, Multi-HAL ইমপ্লিমেন্টেশনকে
ওয়েক লক ম্যানেজ করতে দেয় এবং createScopedWakelock ইনভোক করে ওয়েক লক
অ্যাকোয়ার করার অনুরোধ করতে পারে।
মাল্টি-HAL ইমপ্লিমেন্টেশনে
ওয়েক-আপ ইভেন্ট পোস্ট করার সময় লক করা স্কোপড ওয়েক লক অবশ্যই পেতে হবে এবং postEvents-এ পাস করতে হবে।
ডায়নামিক সেন্সর
Sensors Multi-HAL 2.0-এর ক্ষেত্রে, ডাইনামিক সেন্সর কানেকশন পরিবর্তন হলে,
onDynamicSensorsConnected এবং
onDynamicSensorsDisconnected-কে
IHalProxyCallback-এ
কল করতে হয়। এই কলব্যাকগুলি IHalProxyCallback পয়েন্টারের অংশ হিসেবে উপলভ্য যা initialize() ফাংশনের মাধ্যমে প্রদান করা হয়।
Sensors HAL 1.0 থেকে পোর্ট করা হয়েছে
Sensors HAL 1.0 থেকে Sensors Multi-HAL 2.0-এ আপগ্রেড করার সময়, HAL ইমপ্লিমেন্টেশন যাতে নিম্নলিখিত প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত করুন।
HAL শুরু করুন
সাব-HAL এবং মাল্টি-HAL ইমপ্লিমেন্টেশনের মধ্যে কলব্যাক প্রতিষ্ঠা করতে initialize() ফাংশনটি অবশ্যই সমর্থিত হতে হবে।
উপলভ্য সেন্সর এক্সপোজ করুন
সেন্সর মাল্টি-HAL ২.০-এ, একটি ডিভাইস বুট করার সময়, এমনকি সেন্সর HAL রিস্টার্ট করা হলেও, getSensorsList() ফাংশনকে অবশ্যই একই
মান রিটার্ন করতে হবে। এটি সিস্টেম সার্ভার রিস্টার্ট হলে ফ্রেমওয়ার্ককে সেন্সর কানেকশন আবার স্থাপন করার চেষ্টা করার অনুমতি দেয়। ডিভাইস রিবুট করার পরে getSensorsList()-এর মাধ্যমে ফিরিয়ে দেওয়া ভ্যালু পরিবর্তন হতে পারে।
Multi-HAL ইমপ্লিমেন্টেশনে সেন্সর ইভেন্ট পোস্ট করা
Sensors HAL 2.0-এ, poll()কল করার জন্য অপেক্ষা করার পরিবর্তে, সাব-HAL
-কে অবশ্যই
IHalProxyCallback
-এ সেন্সর ইভেন্ট উপলভ্য থাকলেই তা প্রোক্টিভভাবে লিখতে হবে।
WAKE_UP ইভেন্ট
Sensors HAL 1.0-এ, HAL তার প্রয়োগের জন্য ওয়েক লক ম্যানেজ করতে পারে। Sensors Multi-HAL 2.0-এ, সাব-HAL, Multi-HAL ইমপ্লিমেন্টেশনকে
ওয়েক লক ম্যানেজ করতে দেয় এবং
createScopedWakelock ইনভোক করার মাধ্যমে ওয়েক লক পাওয়ার অনুরোধ করতে পারে।
মাল্টি-HAL ইমপ্লিমেন্টেশনে
ওয়েক-আপ ইভেন্ট পোস্ট করার সময় লক করা স্কোপড ওয়েক লক অবশ্যই পেতে হবে এবং postEvents-এ পাস করতে হবে।
ডায়নামিক সেন্সর
Sensors HAL 1.0-এ, poll() ফাংশনের মাধ্যমে ডায়নামিক সেন্সর রিটার্ন করা হয়।
ডায়নামিক সেন্সর কানেকশন পরিবর্তন হলে, Sensors Multi-HAL 2.0-এর প্রয়োজন যে onDynamicSensorsConnected এবং
onDynamicSensorsDisconnected-কে
IHalProxyCallback
কল করা হয়। এইসব কলব্যাক initialize() ফাংশনের মাধ্যমে প্রদান করা IHalProxyCallback পয়েন্টারের অংশ হিসেবে
উপলভ্য।
Sensors Multi-HAL 1.0 থেকে পোর্ট করা
আগে থেকে থাকা ইমপ্লিমেন্টেশন Sensors Multi-HAL 1.0 থেকে পোর্ট করতে, এইসব ধাপ অনুসরণ করুন।
- নিশ্চিত করুন যে সেন্সর HAL কনফিগারেশন
/vendor/etc/sensors/hals.conf-এ অবস্থিত। এর মধ্যে/system/etc/sensors/hals.conf-এ সেভ করা ফাইল সরানো হতে পারে। -
hardware/hardware.hএবংhardware/sensors.hএর উল্লেখ সরিয়ে দিন, কারণ এগুলি HAL 2.0-এর জন্য কাজ করে না। - Sensors Hal 1.0 থেকে পোর্ট করা-তে যেভাবে বর্ণনা করা হয়েছে সেইভাবে সাব-HAL পোর্ট করুন।
- সেন্সর মাল্টি-HAL 2.0 প্রয়োগ করা বিভাগের ৩ ও ৪ নম্বর ধাপ অনুসরণ করে, নির্ধারিত HAL হিসেবে সেন্সর মাল্টি-HAL 2.0 সেট করুন।
যাচাইকরণ
VTS চালানো
আপনি Sensors Multi-Hal 2.1-এর সাথে এক বা একাধিক সাব-HAL ইন্টিগ্রেট করলে, আপনার সাব-HAL ইমপ্লিমেন্টেশন যাতে Sensors HAL ইন্টারফেসের সেট করা সমস্ত প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত করতে Vendor Test Suite (VTS) ব্যবহার করুন।
হোস্ট মেশিনে VTS সেট-আপ করা থাকলে, শুধুমাত্র সেন্সর VTS টেস্ট চালানোর জন্য, নিম্নলিখিত কমান্ডগুলি এক্সিকিউট করুন:
vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--primary-abi-only \
--skip-preconditions \
--module VtsHalSensorsV2_0Target && \
vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--primary-abi-only \
--skip-preconditions \
--module VtsHalSensorsV2_1Target
আপনি AIDL Multi-HAL শিম লেয়ার চালালে, VtsAidlHalSensorsTargetTest চালান।
vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--primary-abi-only \
--skip-preconditions \
--module VtsAidlHalSensorsTargetTest
ইউনিট টেস্ট রান করুন
HalProxy_test.cpp test HalProxy-এর ইউনিট টেস্টে নকল সাব-HAL ব্যবহার করা হয় যা
ইউনিট টেস্টে ইনস্ট্যানশিয়েট করা হয় এবং ডাইনামিক লোড করা হয় না। নতুন সাব-HAL তৈরি করার সময়,
এইসব টেস্ট থেকে ইউনিট টেস্ট যোগ করার ব্যাপারে গাইড পাওয়া যাবে, যা
নতুন সাব-HAL সঠিকভাবে প্রয়োগ করা হয়েছে কিনা তা যাচাই করবে।
টেস্ট রান করতে, নিম্নলিখিত কমান্ডগুলি চালান:
cd $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/testsatest
নকল sub-HAL ব্যবহার করে পরীক্ষা করা
ফেক সাব-HAL হল ISensorsSubHal ইন্টারফেসের ডামি প্রয়োগ।
সাব-HAL-এ সেন্সরগুলির আলাদা আলাদা তালিকা দেখানো হয়। সেন্সর অ্যাক্টিভেট করা হলে,
সেগুলি নির্দিষ্ট সময় অন্তর অটোমেটিক তৈরি হওয়া সেন্সর ইভেন্ট HalProxy-এ পোস্ট করে।
এই সময়সীমা সেন্সর সংক্রান্ত অনুরোধে উল্লেখ করা থাকে।
সিস্টেমে লোড করা অন্যান্য সাব-HAL-এর সাথে সম্পূর্ণ মাল্টি-HAL কোড কীভাবে কাজ করে তা পরীক্ষা করতে এবং সেন্সর মাল্টি-HAL কোডের বিভিন্ন দিককে জোর দিতে জাল সাব-HAL ব্যবহার করা যেতে পারে।
দুটি নকল সাব-HAL
hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/-এ উপলভ্য।
ডিভাইসে নকল সাব-HAL তৈরি ও পুশ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
ডিভাইসে তিনটি আলাদা ফেক সাব-HAL তৈরি ও পুশ করতে নিম্নলিখিত কমান্ডগুলি রান করুন:
$ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests/mmaadb push \ $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so \ /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.soadb push \ $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so \ /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.soadb push \ $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so \ /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so/vendor/etc/sensors/hals.conf-এ নকল সাব-HAL-এর পাথ সহ সেন্সর HAL কনফিগারেশন আপডেট করুন।/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.soHalProxyরিস্টার্ট করুন এবং কনফিগে তালিকাভুক্ত নতুন সাব-HAL লোড করুন।adb shell stopadb shell start
ডিবাগিং
ডেভেলপাররা lshal কমান্ড ব্যবহার করে ফ্রেমওয়ার্ক ডিবাগ করতে পারবেন। Sensors HAL-এর
ডিবাগ আউটপুটের অনুরোধ করতে, নিম্নলিখিত কমান্ড রান করুন:
adb rootadb shell lshal debug android.hardware.sensors@2.1::ISensors/default
HalProxy-এর বর্তমান অবস্থা ও এর সাব-HAL সম্পর্কে তথ্য তারপরে
টার্মিনালে আউটপুট করা হয়। নিচে
HalProxy অবজেক্ট ও নকল সাব-HAL-এর কমান্ড আউটপুটের একটি উদাহরণ দেখানো হল।
Internal values:
Threads are running: true
Wakelock timeout start time: 200 ms ago
Wakelock timeout reset time: 73208 ms ago
Wakelock ref count: 0
# of events on pending write queue: 0
# of non-dynamic sensors across all subhals: 8
# of dynamic sensors across all subhals: 0
SubHals (2):
Name: FakeSubHal-OnChange
Debug dump:
Available sensors:
Name: Ambient Temp Sensor
Min delay: 40000
Flags: 2
Name: Light Sensor
Min delay: 200000
Flags: 2
Name: Proximity Sensor
Min delay: 200000
Flags: 3
Name: Relative Humidity Sensor
Min delay: 40000
Flags: 2
Name: FakeSubHal-OnChange
Debug dump:
Available sensors:
Name: Ambient Temp Sensor
Min delay: 40000
Flags: 2
Name: Light Sensor
Min delay: 200000
Flags: 2
Name: Proximity Sensor
Min delay: 200000
Flags: 3
Name: Relative Humidity Sensor
Min delay: 40000
Flags: 2
# of events on pending write queue-এর জন্য নির্দিষ্ট করা সংখ্যাটি যদি
একটি বড় সংখ্যা (১০০০ বা তার বেশি) হয়,
তাহলে এটি ইঙ্গিত করে যে সেন্সর ফ্রেমওয়ার্কে
লেখার জন্য অনেক ইভেন্ট বাকি আছে। এটি ইঙ্গিত করে যে সেন্সর পরিষেবা ডেডলক হয়ে গেছে বা ক্র্যাশ করেছে এবং
সেন্সর ইভেন্ট প্রসেস করছে না, অথবা সেন্সর ইভেন্টের একটি বড় ব্যাচ
সম্প্রতি একটি সাব-HAL থেকে পোস্ট করা হয়েছে।
ওয়েক লক রেফারেন্স কাউন্ট 0-এর থেকে বেশি হলে, এর অর্থ হল HalProxy একটি ওয়েক লক
অ্যাকোয়ার করেছে। এটি শুধুমাত্র 0-এর থেকে বেশি হওয়া উচিত যদি ScopedWakelock
ইচ্ছাকৃতভাবে হোল্ড করা হয় অথবা ওয়েকআপ ইভেন্ট HalProxy-এ পাঠানো হয় এবং
সেন্সর ফ্রেমওয়ার্কের মাধ্যমে প্রসেস করা না হয়।
HalProxy-এর ডিবাগ পদ্ধতিতে পাস করা ফাইল ডেসক্রিপ্টর প্রতিটি
সাব-HAL-এ পাস করা হয়, তাই ডেভেলপারদের অবশ্যই
ISensorsSubHal ইন্টারফেসের অংশ হিসেবে ডিবাগ পদ্ধতি প্রয়োগ করতে হবে।