সেন্সর মাল্টি HAL

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

সেন্সর মাল্টি-এইচএএল 2.1, অ্যান্ড্রয়েড 11 বা উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে উপলব্ধ, সেন্সর মাল্টি-এইচএএল 2.0 এর একটি পুনরাবৃত্তি যা সাব-এইচএএল লোড করা সমর্থন করে যা কব্জা কোণ সেন্সর প্রকার প্রকাশ করতে পারে। এই সেন্সর প্রকারকে সমর্থন করার জন্য, সাব-এইচএএলগুলিকে অবশ্যই 2.1 সাবহাল হেডারে সংজ্ঞায়িত সাব-এইচএএল API ব্যবহার করতে হবে।

সেন্সর AIDL HAL ব্যবহার করে Android 13 বা উচ্চতর সংস্করণে চলমান ডিভাইসগুলির জন্য, আপনি মাল্টি-HAL সক্ষমতা মঞ্জুর করতে মাল্টি-HAL শিম স্তর ব্যবহার করতে পারেন৷ বাস্তবায়নের বিশদ বিবরণের জন্য, সেন্সর AIDL HAL এর সাথে সেন্সর মাল্টি-এইচএএল ব্যবহার করা দেখুন।

সেন্সর মাল্টি-HAL 2 এবং সেন্সর HAL 2 এর মধ্যে পার্থক্য

সেন্সর মাল্টি-এইচএএল 2, অ্যান্ড্রয়েড 10 বা উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে উপলব্ধ, HAL API-এর সাথে ইন্টারঅ্যাক্ট করা সহজ করতে সেন্সর HAL 2- এর উপরে বেশ কয়েকটি বিমূর্ততা উপস্থাপন করে। সেন্সর মাল্টি-এইচএএল 2 সেন্সর HAL 2 ইন্টারফেস এবং V2_1/SubHal (অথবা V2_0/SubHal ) ইন্টারফেস পরিচালনা করার জন্য HalProxy ক্লাস প্রবর্তন করে যাতে HalProxy সাব-HALগুলির সাথে যোগাযোগ করতে পারে।

ISensorsSubHal ইন্টারফেস 2.1/ISensors.hal (বা 2.0/ISensors.hal ) ইন্টারফেস থেকে নিম্নলিখিত উপায়ে আলাদা:

  • ইনিশিয়ালাইজ পদ্ধতি দুটি FMQs এবং ISensorsCallback এর পরিবর্তে একটি IHalProxyCallback ক্লাস পাস করে।
  • বাগ রিপোর্টে ডিবাগিং তথ্য প্রদানের জন্য সাব-এইচএএলগুলিকে অবশ্যই একটি ডিবাগ ফাংশন প্রয়োগ করতে হবে।
  • সাব-এইচএএলগুলিকে অবশ্যই একটি নাম ফাংশন প্রয়োগ করতে হবে যাতে লোড করা সাব-এইচএএলকে অন্যান্য সাব-এইচএএল থেকে আলাদা করা যায়।

সেন্সর মাল্টি-এইচএএল 2 এবং সেন্সর এইচএএল 2 এর মধ্যে প্রধান পার্থক্য হল ইনিশিয়ালাইজ ফাংশনে। FMQ প্রদান করার পরিবর্তে, IHalProxyCallback ইন্টারফেস দুটি পদ্ধতি প্রদান করে, একটি পদ্ধতি সেন্সর ফ্রেমওয়ার্কে সেন্সর ইভেন্ট পোস্ট করার এবং একটি ওয়েক লক তৈরি করার পদ্ধতি। হুডের অধীনে, সেন্সর মাল্টি-এইচএএল সমস্ত সাব-এইচএএল-এর জন্য সেন্সর ইভেন্টগুলির সময়মতো ডেলিভারি নিশ্চিত করতে FMQ-এর সাথে সমস্ত মিথস্ক্রিয়া পরিচালনা করে। এটি দৃঢ়ভাবে সুপারিশ করা হয় যে সাব-এইচএএলগুলি সেন্সর মাল্টি-এইচএএল-এর কাছে ওয়েক লকগুলির সময় নির্ধারণের বোঝা অর্পণ করতে এবং পুরো সেন্সর মাল্টি-এইচএএল-এর জন্য একটি সাধারণ ওয়েক লকের জন্য ওয়েক লক ব্যবহার কেন্দ্রীভূত করতে createScopedWakelock পদ্ধতি ব্যবহার করে, যা লকিং এবং আনলকিং কম করে। কল

সেন্সর মাল্টি-এইচএএল 2-এর কিছু অন্তর্নির্মিত নিরাপত্তা বৈশিষ্ট্যও রয়েছে। এটি এমন পরিস্থিতিতে পরিচালনা করে যেখানে সেন্সর FMQ পূর্ণ থাকে বা যেখানে Android সেন্সর ফ্রেমওয়ার্ক রিস্টার্ট হয় এবং সেন্সর স্টেট রিসেট করতে হয়। উপরন্তু, যখন ইভেন্টগুলি HalProxy ক্লাসে পোস্ট করা হয় কিন্তু সেন্সর ফ্রেমওয়ার্ক অবিলম্বে ইভেন্টগুলি গ্রহণ করতে অক্ষম হয়, সেন্সর মাল্টি-এইচএএল ইভেন্টগুলিকে একটি ব্যাকগ্রাউন্ড থ্রেডে স্থানান্তর করতে পারে যাতে ইভেন্টগুলির জন্য অপেক্ষা করার সময় সমস্ত সাব-এইচএএল জুড়ে কাজ চালিয়ে যেতে পারে। পোস্ট করা

সোর্স কোড এবং রেফারেন্স বাস্তবায়ন

সমস্ত সেন্সর মাল্টি-এইচএএল কোড hardware/interfaces/sensors/common/default/2.X/multihal/ এ উপলব্ধ। এখানে কিছু সম্পদের পয়েন্টার আছে.

  • HalProxy.h : HalProxy অবজেক্টটি সেন্সর মাল্টি-এইচএএল দ্বারা তাৎক্ষণিকভাবে তৈরি করা হয় এবং সাব-এইচএএল থেকে সেন্সর ফ্রেমওয়ার্কে ডেটা স্থানান্তর পরিচালনা করে।
  • HalProxy.cpp : HalProxy এর বাস্তবায়নে সাব-HAL এবং সেন্সর ফ্রেমওয়ার্কের মধ্যে মাল্টিপ্লেক্স যোগাযোগের জন্য প্রয়োজনীয় সমস্ত যুক্তি রয়েছে।
  • SubHal.h : ISensorsSubHal ইন্টারফেস এমন ইন্টারফেসকে সংজ্ঞায়িত করে যা সাব-এইচএএলগুলিকে HalProxy এর সাথে সামঞ্জস্যপূর্ণ হতে হবে। সাব-এইচএএল ইনিশিয়ালাইজ পদ্ধতি প্রয়োগ করে যাতে HalProxyCallback অবজেক্ট postEvents জন্য ব্যবহার করা যায় এবং createScopedWakelock

    মাল্টি-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 বাস্তবায়ন জাল ডেটা তৈরি করতে জাল সেন্সর ব্যবহার করে। একাধিক সাব-এইচএএল কীভাবে একটি ডিভাইসে ইন্টারঅ্যাক্ট করে তা পরীক্ষা করার জন্য দরকারী।

বাস্তবায়ন

নিম্নলিখিত পরিস্থিতিতে সেন্সর মাল্টি-এইচএএল কীভাবে প্রয়োগ করা যায় তা এই বিভাগটি বর্ণনা করে:

সেন্সর AIDL HAL এর সাথে সেন্সর মাল্টি-HAL ব্যবহার করুন

সেন্সর AIDL HAL এর সাথে মাল্টি-HAL ক্ষমতার অনুমতি দিতে, AIDL মাল্টি-HAL শিম লেয়ার মডিউল আমদানি করুন, যা হার্ডওয়্যার/ইন্টারফেস/সেন্সর/aidl/default/multihal/ এ পাওয়া যায়। মডিউলটি এআইডিএল এবং এইচআইডিএল সেন্সর HAL সংজ্ঞা প্রকারের মধ্যে রূপান্তর পরিচালনা করে এবং সেন্সর মাল্টি-এইচএএল 2.1 বাস্তবায়নে বর্ণিত মাল্টি-এইচএএল ইন্টারফেসের চারপাশে একটি মোড়ক সংজ্ঞায়িত করে। এআইডিএল মাল্টি-এইচএল শিম স্তরটি সেন্সর মাল্টি-এইচএএল 2.1 বাস্তবায়নকারী ডিভাইসগুলির সাথে সামঞ্জস্যপূর্ণ।

AIDL মাল্টি-HAL শিম স্তর আপনাকে সেন্সর AIDL HAL-এ হেড ট্র্যাকার এবং সীমিত-অক্ষ IMU সেন্সর প্রকারগুলি প্রকাশ করতে দেয়। AIDL HAL ইন্টারফেস দ্বারা সংজ্ঞায়িত এই ধরনের সেন্সর ব্যবহার করতে, getSensorsList_2_1() বাস্তবায়নে SensorInfo স্ট্রাকটে type ফিল্ড সেট করুন। এটি নিরাপদ কারণ AIDL এবং HIDL সেন্সর HAL-এর পূর্ণসংখ্যা-সমর্থিত সেন্সর টাইপ ক্ষেত্রগুলি ওভারল্যাপ করে না।

সেন্সর মাল্টি-এইচএএল 2.1 প্রয়োগ করুন

একটি নতুন ডিভাইসে সেন্সর মাল্টি-এইচএএল 2.1 বাস্তবায়ন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. SubHal.h এ বর্ণিত ISensorsSubHal ইন্টারফেসটি প্রয়োগ করুন।
  2. SubHal.hsensorsHalGetSubHal_2_1 পদ্ধতি প্রয়োগ করুন।
  3. নতুন বাস্তবায়িত সাব-এইচএএল তৈরি করতে একটি cc_library_shared টার্গেট যোগ করুন। লক্ষ্য যোগ করার সময়:

    1. লক্ষ্যটি ডিভাইসের ভেন্ডর পার্টিশনের কোথাও পুশ করা হয়েছে তা নিশ্চিত করুন।
    2. /vendor/etc/sensors/hals.conf এ অবস্থিত কনফিগার ফাইলে, একটি নতুন লাইনে লাইব্রেরিতে পাথ যোগ করুন। প্রয়োজনে hals.conf ফাইলটি তৈরি করুন।

    একটি সাব-HAL লাইব্রেরি তৈরির জন্য Android.bp এন্ট্রির উদাহরণের জন্য, hardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bp দেখুন।

  4. manifest.xml ফাইল থেকে সমস্ত android.hardware.sensors এন্ট্রি সরান, যাতে ডিভাইসে সমর্থিত HAL-এর তালিকা রয়েছে।

  5. device.mk ফাইল থেকে সমস্ত android.hardware.sensors পরিষেবা এবং service.rc ফাইলগুলি সরান এবং PRODUCT_PACKAGESandroid.hardware.sensors@2.1-service.multihal এবং android.hardware.sensors@2.1-service.multihal.rc যোগ করুন।

বুট করার সময়, HalProxy শুরু হয়, নতুন বাস্তবায়িত সাব-HAL খোঁজে এবং sensorsHalGetSubHal_2_1 কল করে এটিকে শুরু করেHalGetSubHal_2_1।

সেন্সর মাল্টি-এইচএএল 2.0 থেকে মাল্টি-এইচএএল 2.1 পর্যন্ত পোর্ট

Multi-HAL 2.0 থেকে Multi-HAL 2.1-এ পোর্ট করতে, SubHal ইন্টারফেস প্রয়োগ করুন এবং আপনার সাব-HAL পুনরায় কম্পাইল করুন।

এইগুলি হল 2.0 এবং 2.1 SubHal ইন্টারফেসের মধ্যে পার্থক্য:

  • IHalProxyCallback ISensors.hal স্পেসিফিকেশনের 2.1 সংস্করণে তৈরি করা প্রকারগুলি ব্যবহার করে।
  • initialize() ফাংশনটি 2.0 SubHal ইন্টারফেসের পরিবর্তে একটি নতুন IHalProxyCallback পাস করে
  • সাব-এইচএএলগুলি অবশ্যই getSensorsList এবং injectSensorData এর পরিবর্তে getSensorsList_2_1 এবং injectSensorData_2_1 প্রয়োগ করবে কারণ এই পদ্ধতিগুলি ISensors.hal স্পেসিফিকেশনের সংস্করণ 2.1-এ যোগ করা নতুন প্রকারগুলি ব্যবহার করে৷
  • সাব-এইচএএলগুলিকে মাল্টি-এইচএএল-এর জন্য 2.1 সাব-এইচএএল হিসাবে বিবেচনা করার জন্য sensorsHalGetSubHal পরিবর্তে sensorsHalGetSubHal_2_1 HalGetSubHal_2_1 সেন্সর প্রকাশ করতে হবে।

সেন্সর HAL 2.0 থেকে পোর্ট

সেন্সর HAL 2.0 থেকে সেন্সর মাল্টি- HAL 2.0 এ আপগ্রেড করার সময়, HAL বাস্তবায়ন নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করে তা নিশ্চিত করুন।

HAL চালু করুন

সেন্সর HAL 2.0 এর একটি ইনিশিয়ালাইজ ফাংশন রয়েছে যা সেন্সর পরিষেবাকে FMQs এবং একটি গতিশীল সেন্সর কলব্যাক পাস করতে দেয়। সেন্সর মাল্টি-এইচএএল 2.0-এ, initialize() ফাংশনটি একটি একক কলব্যাক পাস করে যা সেন্সর ইভেন্টগুলি পোস্ট করতে, ওয়েক লকগুলি পেতে এবং গতিশীল সেন্সর সংযোগ এবং সংযোগ বিচ্ছিন্ন করার জন্য অবশ্যই ব্যবহার করতে হবে।

মাল্টি-এইচএএল বাস্তবায়নে সেন্সর ইভেন্ট পোস্ট করুন

FMQ-এর মাধ্যমে সেন্সর ইভেন্ট পোস্ট করার পরিবর্তে, সাব-HAL-কে অবশ্যই IHalProxyCallback এ সেন্সর ইভেন্টগুলি লিখতে হবে যখন সেন্সর ইভেন্টগুলি উপলব্ধ থাকে।

WAKE_UP ইভেন্ট

সেন্সর HAL 2.0-এ, HAL তার বাস্তবায়নের জন্য ওয়েক লক পরিচালনা করতে পারে। সেন্সর মাল্টি-এইচএএল 2.0-এ, সাব-এইচএএলগুলি মাল্টি-এইচএএল বাস্তবায়নকে ওয়েক লকগুলি পরিচালনা করার অনুমতি দেয় এবং createScopedWakelock আহ্বান করে একটি ওয়েক লক অধিগ্রহণের জন্য অনুরোধ করতে পারে। মাল্টি-এইচএএল ইমপ্লিমেন্টেশনে ওয়েক আপ ইভেন্ট পোস্ট করার সময় একটি লক করা স্কোপড ওয়েক লক অবশ্যই অর্জন করতে হবে এবং postEvents পাস করতে হবে।

ডায়নামিক সেন্সর

সেন্সর মাল্টি-এইচএএল 2.0 এর জন্য প্রয়োজন যে যখনই ডাইনামিক সেন্সর সংযোগগুলি পরিবর্তন হয় তখন IHalProxyCallback এ অন onDynamicSensorsConnected এবং onDynamicSensorsDisconnected সংযোগ বিচ্ছিন্ন হয়। এই কলব্যাকগুলি IHalProxyCallback পয়েন্টারের অংশ হিসাবে উপলব্ধ যা initialize() ফাংশনের মাধ্যমে সরবরাহ করা হয়।

সেন্সর HAL 1.0 থেকে পোর্ট

সেন্সর HAL 1.0 থেকে সেন্সর মাল্টি-HAL 2.0-এ আপগ্রেড করার সময়, HAL বাস্তবায়ন নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করে তা নিশ্চিত করুন।

HAL চালু করুন

initialize() ফাংশনটি অবশ্যই সাব-এইচএএল এবং মাল্টি-এইচএএল বাস্তবায়নের মধ্যে কলব্যাক স্থাপন করতে সমর্থিত হবে।

উপলব্ধ সেন্সর প্রকাশ করুন

সেন্সর মাল্টি-এইচএএল 2.0-এ, getSensorsList() ফাংশনটি একটি একক ডিভাইস বুট করার সময় একই মান প্রদান করতে হবে, এমনকি সেন্সর জুড়ে HAL পুনরায় চালু হয়। সিস্টেম সার্ভার পুনরায় চালু হলে এটি ফ্রেমওয়ার্কটিকে সেন্সর সংযোগগুলি পুনঃস্থাপন করার চেষ্টা করার অনুমতি দেয়। ডিভাইসটি রিবুট করার পরে getSensorsList() দ্বারা প্রত্যাবর্তিত মান পরিবর্তন হতে পারে।

মাল্টি-এইচএএল বাস্তবায়নে সেন্সর ইভেন্ট পোস্ট করুন

সেন্সর HAL 2.0-এ, poll() ডাকার জন্য অপেক্ষা করার পরিবর্তে, যখনই সেন্সর ইভেন্টগুলি পাওয়া যায় তখনই সাব-HAL-কে অবশ্যই IHalProxyCallback এ সেন্সর ইভেন্টগুলিকে সক্রিয়ভাবে লিখতে হবে।

WAKE_UP ইভেন্ট

সেন্সর HAL 1.0-এ, HAL তার বাস্তবায়নের জন্য ওয়েক লক পরিচালনা করতে পারে। সেন্সর মাল্টি-এইচএএল 2.0-তে, সাব-এইচএএলগুলি মাল্টি-এইচএএল বাস্তবায়নকে ওয়েক লকগুলি পরিচালনা করার অনুমতি দেয় এবং createScopedWakelock আহ্বান করে একটি ওয়েক লক অধিগ্রহণের জন্য অনুরোধ করতে পারে। মাল্টি-এইচএএল ইমপ্লিমেন্টেশনে ওয়েক আপ ইভেন্ট পোস্ট করার সময় একটি লক করা স্কোপড ওয়েক লক অবশ্যই অর্জন করতে হবে এবং postEvents পাস করতে হবে।

ডায়নামিক সেন্সর

সেন্সর HAL 1.0-এ, poll() ফাংশনের মাধ্যমে গতিশীল সেন্সর ফেরত দেওয়া হয়। সেন্সর মাল্টি-এইচএএল 2.0 এর জন্য প্রয়োজন যে যখনই ডাইনামিক সেন্সর সংযোগগুলি পরিবর্তন হয় তখন IHalProxyCallback এ অন onDynamicSensorsConnected এবং onDynamicSensorsDisconnected সংযোগ বিচ্ছিন্ন হয়। এই কলব্যাকগুলি IHalProxyCallback পয়েন্টারের অংশ হিসাবে উপলব্ধ যা initialize() ফাংশনের মাধ্যমে সরবরাহ করা হয়।

সেন্সর মাল্টি-এইচএএল 1.0 থেকে পোর্ট

সেন্সর মাল্টি-এইচএএল 1.0 থেকে একটি বিদ্যমান বাস্তবায়ন পোর্ট করতে, এই পদক্ষেপগুলি অনুসরণ করুন।

  1. নিশ্চিত করুন যে সেন্সর HAL কনফিগারেশন /vendor/etc/sensors/hals.conf. এটি /system/etc/sensors/hals.conf এ অবস্থিত ফাইলটি সরানোর সাথে জড়িত হতে পারে।
  2. hardware/hardware.h এবং hardware/sensors.h এর যেকোনো রেফারেন্স মুছে ফেলুন কারণ এগুলো HAL 2.0-এর জন্য সমর্থিত নয়।
  3. সেন্সর হ্যাল 1.0 থেকে পোর্টিং -এ বর্ণিত পোর্ট সাব-এইচএএল।
  4. সেন্সর মাল্টি-এইচএএল 2.0 কে মনোনীত এইচএএল হিসাবে সেট করুন ধাপ 3 এবং 4 অনুসরণ করে বাস্তবায়ন সেন্সর মুটলি-এইচএএল 2.0 বিভাগে।

বৈধতা

VTS চালান

আপনি যখন সেন্সর মাল্টি-হ্যাল 2.1 এর সাথে এক বা একাধিক সাব-এইচএএল একত্রিত করেন, তখন আপনার সাব-এইচএএল বাস্তবায়ন সেন্সর এইচএএল ইন্টারফেসের দ্বারা নির্ধারিত সমস্ত প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত করতে ভেন্ডর টেস্ট স্যুট (ভিটিএস) ব্যবহার করুন।

একটি হোস্ট মেশিনে 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 মাল্টি-HAL শিম স্তর চালান, VtsAidlHalSensorsTargetTest চালান।

vts-tradefed run commandAndExit vts \
    --skip-all-system-status-check \
    --primary-abi-only \
    --skip-preconditions \
    --module VtsAidlHalSensorsTargetTest

ইউনিট পরীক্ষা চালান

HalProxy_test.cpp এ ইউনিট পরীক্ষাগুলি জাল সাব-HALগুলি ব্যবহার করে HalProxy পরীক্ষা করে যা ইউনিট পরীক্ষায় তাত্ক্ষণিক করা হয় এবং গতিশীলভাবে লোড হয় না। একটি নতুন সাব-এইচএএল তৈরি করার সময়, এই পরীক্ষাগুলিকে কীভাবে ইউনিট পরীক্ষাগুলি যোগ করতে হয় তার একটি নির্দেশিকা হিসাবে কাজ করা উচিত যা যাচাই করে যে নতুন সাব-এইচএএল সঠিকভাবে প্রয়োগ করা হয়েছে।

পরীক্ষা চালানোর জন্য, নিম্নলিখিত কমান্ডগুলি চালান:

cd $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests
atest

নকল সাব-এইচএএল দিয়ে পরীক্ষা করুন

জাল সাব-HALগুলি হল ISensorsSubHal ইন্টারফেসের ডামি বাস্তবায়ন। সাব-এইচএএলগুলি সেন্সরগুলির বিভিন্ন তালিকা প্রকাশ করে। যখন সেন্সরগুলি সক্রিয় করা হয়, তারা পর্যায়ক্রমে একটি প্রদত্ত সেন্সর অনুরোধে নির্দিষ্ট ব্যবধানের উপর ভিত্তি করে HalProxy এ স্বয়ংক্রিয়ভাবে তৈরি সেন্সর ইভেন্টগুলি পোস্ট করে।

সিস্টেমে লোড হওয়া অন্যান্য সাব-এইচএএল-এর সাথে সম্পূর্ণ মাল্টি-এইচএএল কোড কীভাবে কাজ করে তা পরীক্ষা করতে এবং সেন্সর মাল্টি-এইচএএল কোডের বিভিন্ন দিকের উপর জোর দিতে নকল সাব-এইচএএল ব্যবহার করা যেতে পারে।

hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/ এ দুটি জাল সাব-এইচএএল পাওয়া যায়।

একটি ডিভাইসে নকল সাব-এইচএএল তৈরি করতে এবং পুশ করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. ডিভাইসে তিনটি ভিন্ন নকল সাব-এইচএএল তৈরি করতে এবং পুশ করতে নিম্নলিখিত কমান্ডগুলি চালান:

    $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests/
    mma
    adb 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.so
    adb 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.so
    adb 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
    
  2. /vendor/etc/sensors/hals.conf এ সেন্সর 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.so
    
  3. HalProxy রিস্টার্ট করুন এবং কনফিগারেশনে তালিকাভুক্ত নতুন সাব-HALগুলি লোড করুন।

    adb shell stop
    adb shell start
    

ডিবাগিং

ডেভেলপাররা lshal কমান্ড ব্যবহার করে ফ্রেমওয়ার্ক ডিবাগ করতে পারে। সেন্সর HAL এর ডিবাগ আউটপুট অনুরোধ করতে, নিম্নলিখিত কমান্ডটি চালান:

adb root
adb 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 জন্য নির্দিষ্ট করা সংখ্যাটি যদি একটি বড় সংখ্যা হয় (1000 বা তার বেশি), এটি নির্দেশ করে যে সেন্সর কাঠামোতে লেখার জন্য অনেকগুলি ইভেন্ট মুলতুবি রয়েছে৷ এটি নির্দেশ করে যে সেন্সর পরিষেবাটি অচল হয়ে পড়েছে বা ক্র্যাশ হয়েছে এবং সেন্সর ইভেন্টগুলি প্রক্রিয়া করছে না, বা একটি সাব-এইচএএল থেকে সম্প্রতি সেন্সর ইভেন্টগুলির একটি বড় ব্যাচ পোস্ট করা হয়েছে৷

যদি ওয়েক লক রেফ কাউন্ট 0 এর বেশি হয়, তাহলে এর মানে HalProxy একটি ওয়েক লক অর্জন করেছে। এটি শুধুমাত্র 0 -এর বেশি হওয়া উচিত যদি একটি ScopedWakelock ইচ্ছাকৃতভাবে রাখা হয় বা যদি ওয়েকআপ ইভেন্টগুলি HalProxy এ পাঠানো হয় এবং সেন্সর ফ্রেমওয়ার্ক দ্বারা প্রক্রিয়া করা না হয়।

HalProxy এর ডিবাগ পদ্ধতিতে পাস করা ফাইল বর্ণনাকারী প্রতিটি সাব-HAL-এ পাস করা হয় তাই ডেভেলপারদের অবশ্যই ISensorsSubHal ইন্টারফেসের অংশ হিসেবে ডিবাগ পদ্ধতি প্রয়োগ করতে হবে।