HAL মডিউল কনভার্ট করা

আপনি hardware/libhardware/include/hardware-এ হেডার কনভার্ট করে আগে থেকে থাকা HAL মডিউলকে HIDL HAL মডিউলে আপডেট করতে পারবেন।

c2hal ব্যবহার করা

c2hal টুলটি বেশিরভাগ কনভার্সন সংক্রান্ত কাজ ম্যানেজ করে, যার ফলে ম্যানুয়ালি পরিবর্তন করার প্রয়োজনীয়তা কমে যায়। যেমন, NFC HAL-এর জন্য HIDL .hal ফাইল তৈরি করতে:

make c2hal
c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h

এইসব কমান্ড hardware/interfaces/nfc/1.0/-এ ফাইল যোগ করে। $ANDROID_BUILD_TOP ডিরেক্টরি থেকে hardware/interfaces/update-makefiles.sh রান করালে HAL-এ প্রয়োজনীয় মেকফাইলও যোগ হয়ে যায়। এখান থেকে, আপনি HAL-কে সম্পূর্ণভাবে কনভার্ট করতে ম্যানুয়ালি পরিবর্তন করতে পারবেন।

c2hal অ্যাক্টিভিটি

আপনি c2hal রান করালে, হেডার ফাইলের সবকিছু .hal ফাইলে ট্রান্সফার করা হয়।

c2hal সেইসব স্ট্রাক্ট শনাক্ত করে যেগুলিতে প্রদত্ত হেডার ফাইলে ফাংশন পয়েন্টার থাকে এবং প্রতিটি স্ট্রাক্টকে আলাদা ইন্টারফেস ফাইলে কনভার্ট করে। যেমন, alloc_device_t-কে IAllocDevice HAL মডিউলে (ফাইল IAllocDevice.hal-এ) কনভার্ট করা হয়।

অন্য সব ধরনের ডেটা types.hal ফাইলে কপি করা হয়। পাউন্ড-ডিফাইনকে এনামে সরানো হয় এবং HIDL-এর অংশ নয় বা কনভার্ট করা যায় না (যেমন, স্ট্যাটিক-ফাংশন ঘোষণা) এমন আইটেমকে "NOTE" টেক্সট দিয়ে চিহ্নিত করা কমেন্টে কপি করা হয়।

ম্যানুয়াল অ্যাক্টিভিটি

c2hal টুলটি নির্দিষ্ট কিছু কনস্ট্রাক্টের সম্মুখীন হলে কী করতে হবে তা জানে না। যেমন, HIDL-এ র পয়েন্টার সংক্রান্ত কোনও ধারণা নেই; এই কারণে, c2hal হেডার ফাইলে কোনও পয়েন্টার পেলে, সেটি বুঝতে পারে না যে পয়েন্টারটিকে অ্যারে হিসেবে ব্যাখ্যা করা উচিত নাকি অন্য কোনও অবজেক্টের রেফারেন্স হিসেবে। ভয়েড পয়েন্টারও একইভাবে অস্বচ্ছ।

HIDL-এ ট্রানজিশনের সময় int reserved[7]-এর মতো ফিল্ড ম্যানুয়ালি সরিয়ে দিতে হবে। রিটার্ন ভ্যালুর নামের মতো আইটেমকে আরও অর্থপূর্ণ কিছুতে আপডেট করা উচিত; যেমন, অটোমেটিক তৈরি হওয়া int32_t write_ret থেকে Status status-এ NFC-তে write-এর মতো পদ্ধতির রিটার্ন প্যারামিটারকে কনভার্ট করা (যেখানে Status হল সম্ভাব্য NFC স্ট্যাটাস থাকা নতুন enum)।

HAL প্রয়োগ করুন

আপনার HAL-কে উপস্থাপন করার জন্য .hal ফাইল তৈরি করার পরে, আপনাকে অবশ্যই মেকফাইল (Make বা Soong) তৈরি করতে হবে যা C++ এবং Java-তে ভাষা সংক্রান্ত সহায়তা তৈরি করে (যদি না HAL এমন কোনও ফিচার ব্যবহার করে যা Java-তে কাজ করে না)। hardware/interfaces ডিরেক্টরিতে থাকা HAL-এর জন্য ./hardware/interfaces/update-makefiles.sh স্ক্রিপ্ট অটোমেটিক মেকফাইল জেনারেট করতে পারে (অন্য লোকেশনে থাকা HAL-এর জন্য, স্ক্রিপ্ট আপডেট করুন)।

makefile আপ-টু-ডেট থাকলে, আপনি হেডার ফাইল তৈরি করতে এবং মেথড প্রয়োগ করতে পারবেন। জেনারেট করা ইন্টারফেস প্রয়োগ করার বিবরণ পেতে, HIDL C++ (C++ প্রয়োগের জন্য) অথবা HIDL Java (Java প্রয়োগের জন্য) দেখুন।