این صفحه نگاشتهای پیشنهادی بین ثابتهای عمومی HAL و ثابتهای API را ارائه میدهد. اگر سختافزار ارزیابیشده ثابتهای HAL را پیادهسازی نمیکند، الگوهای جایگزین شرح داده شده در صفحه پیادهسازی ثابتها و مقادیر اولیه را بهروزرسانی کنید تا خروجیهای مشابهی تولید شود. این نگاشت توسط دو مدل پیشفرض مختلف پشتیبانی میشود:
مدل گسسته (ساده)
- دامنه متغیر کلیدی این مدل است. هر موجودیت در HAL دامنه لمسی متفاوتی را نشان میدهد.
- این مدل حداقل پیشنیاز لازم برای پیادهسازی تجربه کاربری لمسی پایه است.
- یک تجربه کاربری لمسی پیشرفتهتر به سختافزار پیشرفته و یک مدل پیشرفته (مدل پیوسته) نیاز دارد.
مدل پیوسته (پیشرفته)
- بافت و دامنه متغیرهای کلیدی این مدل هستند. هر موجودیت در HAL نشاندهنده بافتهای لمسی متفاوتی است. دامنه هر موجودیت HAL توسط ضریب مقیاس (
S) کنترل میشود. - این مدل به سختافزار پیشرفته نیاز دارد. اگر تولیدکنندگان اصلی تجهیزات (OEM) بخواهند از تجربه کاربری لمسی پیشرفته با
VibrationEffect.Composition(برای بهترین استفاده از جدیدترین APIهای لمسی) استفاده کنند، پیادهسازی سختافزار آنها با استفاده از این مدل توصیه میشود.
- بافت و دامنه متغیرهای کلیدی این مدل هستند. هر موجودیت در HAL نشاندهنده بافتهای لمسی متفاوتی است. دامنه هر موجودیت HAL توسط ضریب مقیاس (
مدل گسسته
نگاشت تمام ثابتهای عمومی ارائه شده در API با ثابتهای HAL مناسب توصیه میشود. برای شروع این فرآیند، بررسی کنید که دستگاه میتواند چند شکل موج لمسی با دامنه گسسته در HAL تعریف کند. یک سوال خاص که حول این مفهوم شکل گرفته است، به این شکل است: چند اثر لمسی تک ضربهای با تفاوت دامنه قابل درک توسط انسان را میتوان در تلفن من تعریف کرد؟ پاسخ به این سوال، نگاشت را تعیین میکند.
تعریف ثابتهای HAL یک فرآیند وابسته به سختافزار است. برای مثال، یک تلفن همراه سطح پایین ممکن است فقط قابلیتهای سختافزاری تولید یک شکل موج لمسی را داشته باشد. دستگاههایی با اجزای سختافزاری پیشرفتهتر، طیف وسیعتری از سطوح دامنه گسسته را تولید میکنند و میتوانند چندین شکل موج لمسی را در HAL تعریف کنند. نگاشت ثابت HAL-API ثابت HAL را میگیرد (با استفاده از دامنه متوسط به عنوان پایه)، سپس جلوههای قویتر یا ضعیفتر را از آنجا مرتب میکند.

شکل ۱. محدوده ثابت HAL بر اساس دامنه.
وقتی تعداد ثابتهای HAL با دامنه گسسته تعریف شد، زمان آن رسیده است که ثابتهای HAL و API را بر اساس تعداد ثابتهای HAL نگاشت کنیم. این فرآیند نگاشت میتواند یک ثابت API ضربهای واحد را به حداکثر سه گروه گسسته از سطوح دامنه تقسیم کند. نحوه تقسیم ثابتهای API بر اساس اصول UX برای رویدادهای ورودی همراه است. برای اطلاعات بیشتر، به طراحی UX Haptics مراجعه کنید.

شکل ۲. نگاشت ثابت HAL-API: مدل گسسته.
اگر دستگاه شما فقط از دو ثابت HAL با دامنههای گسسته پشتیبانی میکند، ادغام ثابتهای HAL با سطح دامنه متوسط و بالا را در نظر بگیرید. یک مثال از این مفهوم در عمل، نگاشت EFFECT_CLICK و EFFECT_HEAVY_CLICK به یک ثابت HAL یکسان است که ثابت HAL با سطح دامنه متوسط خواهد بود. اگر دستگاه شما فقط از یک ثابت HAL با دامنه گسسته پشتیبانی میکند، ادغام هر سه سطح را در یک ثابت در نظر بگیرید.
مدل پیوسته
مدل پیوسته با مقیاسپذیری دامنه میتواند برای تعریف ثابتهای HAL اعمال شود. یک ضریب مقیاس ( S ) میتواند به ثابتهای HAL (برای مثال، HAL_H0 ، HAL_H1 ) اعمال شود تا HAL مقیاسبندیشده ( HAL_H0 x S ) تولید شود. در این حالت، HAL مقیاسبندیشده برای تعریف ثابتهای API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) نگاشت میشود، همانطور که در شکل 3 نشان داده شده است. با استفاده از مقیاسپذیری دامنه مدل پیوسته، یک دستگاه میتواند تعداد کمی از ثابتهای HAL را با بافتهای متمایز ذخیره کند و با تنظیم ضریب مقیاس ( S ) تغییرات دامنه را اضافه کند. تولیدکنندگان دستگاه میتوانند تعداد ثابتهای HAL را بر اساس تعداد بافتهای لمسی مختلفی که میخواهند ارائه دهند، تعریف کنند.

شکل ۳. محدوده ثابت HAL بر اساس بافت (HAL_H0) و مقیاس دامنه (S).

شکل ۴. نگاشت ثابت HAL-API: مدل پیوسته.
در مدل پیوسته، ثابتهای مختلف HAL به جای دامنههای مختلف، بافتهای لمسی متفاوتی را نشان میدهند؛ ضریب مقیاس ( S ) میتواند دامنه را پیکربندی کند. با این حال، از آنجا که درک بافت (به عنوان مثال، وضوح) با درک مدت زمان و دامنه مرتبط است، ترکیب بافت و ضریب مقیاس (در فرآیند طراحی نگاشت HAL-API) توصیه میشود.
شکل 5 نگاشت ثابت را با افزایش تغییرات از یک HAL به چندین ثابت API با مقیاسپذیری دامنه نشان میدهد.


شکل ۵. افزایش تنوع با مقیاسپذیری دامنه.
برای همه ثابتهای API مقیاسپذیر مانند PRIMITIVE_TICK و PRIMITIVE_CLICK در VibrationEffect.Composition ، سطح انرژی ثابت API به پارامتر float scale بستگی دارد، زمانی که ثابت API از طریق addPrimitive(int primitiveID, float scale, int delay) تعریف میشود. PRIMITIVE_TICK و PRIMITIVE_CLICK را میتوان با استفاده از ثابتهای HAL مختلف با تمایز واضح طراحی کرد. اگر میخواهید به بافت تنوع اضافه کنید، این رویکرد توصیه میشود.