আপনি hardware/libhardware/include/hardware এ থাকা হেডারটি রূপান্তর করার মাধ্যমে পূর্ব-বিদ্যমান HAL মডিউলগুলিকে HIDL HAL মডিউলে আপডেট করতে পারেন।
সি২হাল ব্যবহার করুন
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 চালান, তখন হেডার ফাইলের সবকিছু .hal ফাইলগুলোতে স্থানান্তরিত হয়ে যায়।
c2hal প্রদত্ত হেডার ফাইলে ফাংশন পয়েন্টার ধারণকারী স্ট্রাক্টগুলো শনাক্ত করে এবং প্রতিটি স্ট্রাক্টকে একটি পৃথক ইন্টারফেস ফাইলে রূপান্তর করে। উদাহরণস্বরূপ, alloc_device_t রূপান্তরিত হয়ে IAllocDevice HAL মডিউল তৈরি করে ( IAllocDevice.hal ফাইলে)।
অন্যান্য সমস্ত ডেটা টাইপ একটি types.hal ফাইলে কপি করা হয়। পাউন্ড-ডিফাইনগুলিকে এনামের মধ্যে সরানো হয়, এবং যে আইটেমগুলি HIDL-এর অংশ নয় বা রূপান্তরযোগ্য নয় (যেমন স্ট্যাটিক-ফাংশন ডিক্লারেশন) সেগুলিকে " NOTE " লেখা দিয়ে চিহ্নিত কমেন্টের মধ্যে কপি করা হয়।
ম্যানুয়াল কার্যকলাপ
c2hal টুলটি কিছু নির্দিষ্ট কাঠামোর সম্মুখীন হলে কী করতে হবে তা জানে না। উদাহরণস্বরূপ, HIDL-এ র পয়েন্টারের কোনো ধারণা নেই; একারণে, c2hal যখন হেডার ফাইলে কোনো পয়েন্টার দেখে, তখন এটি বুঝতে পারে না যে পয়েন্টারটিকে একটি অ্যারে হিসেবে ব্যাখ্যা করা উচিত, নাকি অন্য কোনো অবজেক্টের রেফারেন্স হিসেবে। ভয়েড পয়েন্টারগুলোও একইভাবে দুর্বোধ্য।
HIDL-এ রূপান্তরের সময় int reserved[7] এর মতো ফিল্ড ম্যানুয়ালি মুছে ফেলতে হবে। রিটার্ন ভ্যালুর নামের মতো আইটেমগুলিকে আরও অর্থপূর্ণ কিছুতে আপডেট করা উচিত; উদাহরণস্বরূপ, NFC-তে write এর মতো মেথডের রিটার্ন প্যারামিটারকে স্বয়ংক্রিয়ভাবে তৈরি int32_t write_ret থেকে Status status এ রূপান্তর করা (যেখানে Status হল একটি নতুন enum যা সম্ভাব্য NFC স্ট্যাটাস ধারণ করে)।
HAL বাস্তবায়ন করুন
আপনার HAL-কে উপস্থাপন করার জন্য .hal ফাইল তৈরি করার পরে, আপনাকে অবশ্যই মেকফাইল (Make বা Soong) জেনারেট করতে হবে যা C++ এবং Java-তে ল্যাঙ্গুয়েজ সাপোর্ট তৈরি করে (যদি না HAL-টি Java-তে অসমর্থিত কোনো ফিচার ব্যবহার করে)। ./hardware/interfaces/update-makefiles.sh স্ক্রিপ্টটি hardware/interfaces ডিরেক্টরিতে অবস্থিত HAL-গুলোর জন্য স্বয়ংক্রিয়ভাবে মেকফাইল জেনারেট করতে পারে (অন্যান্য স্থানে থাকা HAL-গুলোর জন্য, শুধু স্ক্রিপ্টটি আপডেট করুন)।
মেকফাইলগুলো হালনাগাদ হয়ে গেলে, আপনি হেডার ফাইল তৈরি করতে এবং মেথড ইমপ্লিমেন্ট করতে প্রস্তুত। তৈরি করা ইন্টারফেস ইমপ্লিমেন্ট করার বিস্তারিত তথ্যের জন্য, HIDL C++ (C++ ইমপ্লিমেন্টেশনের জন্য) অথবা HIDL Java (Java ইমপ্লিমেন্টেশনের জন্য) দেখুন।