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

সেন্সর মাল্টি-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 ব্যবহার করুন

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 প্রয়োগ করতে, এই ধাপগুলি অনুসরণ করুন:

  1. SubHal.h-এ বর্ণিত ISensorsSubHal ইন্টারফেস প্রয়োগ করুন।
  2. SubHal.h-এ sensorsHalGetSubHal_2_1 পদ্ধতি প্রয়োগ করুন।
  3. নতুনভাবে প্রয়োগ করা সাব-HAL তৈরি করতে 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. ডিভাইসে কাজ করে এমন HAL-এর তালিকা আছে এমন manifest.xml ফাইল থেকে সব android.hardware.sensors এন্ট্রি সরিয়ে দিন।

  5. 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 ইন্টারফেসের মধ্যে পার্থক্যগুলি হল:

  • IHalProxyCallback ISensors.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 থেকে পোর্ট করতে, এইসব ধাপ অনুসরণ করুন।

  1. নিশ্চিত করুন যে সেন্সর HAL কনফিগারেশন /vendor/etc/sensors/hals.conf-এ অবস্থিত। এর মধ্যে /system/etc/sensors/hals.conf-এ সেভ করা ফাইল সরানো হতে পারে।
  2. hardware/hardware.h এবং hardware/sensors.h এর উল্লেখ সরিয়ে দিন, কারণ এগুলি HAL 2.0-এর জন্য কাজ করে না।
  3. Sensors Hal 1.0 থেকে পোর্ট করা-তে যেভাবে বর্ণনা করা হয়েছে সেইভাবে সাব-HAL পোর্ট করুন।
  4. সেন্সর মাল্টি-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/tests
atest

নকল sub-HAL ব্যবহার করে পরীক্ষা করা

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

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

দুটি নকল সাব-HAL hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/-এ উপলভ্য।

ডিভাইসে নকল সাব-HAL তৈরি ও পুশ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. ডিভাইসে তিনটি আলাদা ফেক সাব-HAL তৈরি ও পুশ করতে নিম্নলিখিত কমান্ডগুলি রান করুন:

    $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-এর পাথ সহ সেন্সর 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 কমান্ড ব্যবহার করে ফ্রেমওয়ার্ক ডিবাগ করতে পারবেন। Sensors 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-এর জন্য নির্দিষ্ট করা সংখ্যাটি যদি একটি বড় সংখ্যা (১০০০ বা তার বেশি) হয়, তাহলে এটি ইঙ্গিত করে যে সেন্সর ফ্রেমওয়ার্কে লেখার জন্য অনেক ইভেন্ট বাকি আছে। এটি ইঙ্গিত করে যে সেন্সর পরিষেবা ডেডলক হয়ে গেছে বা ক্র্যাশ করেছে এবং সেন্সর ইভেন্ট প্রসেস করছে না, অথবা সেন্সর ইভেন্টের একটি বড় ব্যাচ সম্প্রতি একটি সাব-HAL থেকে পোস্ট করা হয়েছে।

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

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