در اندروید 9 و پایین تر، هیچ راهی برای تعامل با چندین نمایشگر از طریق لمس وجود نداشت، زیرا هیچ مکانیزم ارتباطی بین نمایشگرها و دستگاه های ورودی وجود نداشت. به عنوان مثال، یک صفحه نمایش لمسی می تواند یک خروجی ویدیوی HDMI (که به عنوان نمایشگر در اندروید ثبت می شود) و یک خروجی USB برای صفحه نمایش لمسی (که به عنوان یک دستگاه ورودی ثبت می شود) ارائه دهد. اگر چندین دستگاه به این روش متصل شده باشند، هیچ راهی برای تعیین اینکه کدام دستگاه ورودی متعلق به کدام نمایشگر است وجود نخواهد داشت. همین مسئله در مورد دستگاه های تاشو با نمایشگرهای داخلی متعدد نیز صدق می کند.
اندروید 10 مکانیزمی را اضافه کرد تا مشخص کند کدام دستگاه ورودی متعلق به کدام نمایشگر است. ارتباط توسط شماره پورت انجام می شود که در آن پورت به پورت فیزیکی که نمایشگر به آن متصل است اشاره دارد.
به عنوان مثال، اگر یک دستگاه اندرویدی دارای دو پورت HDMI با برچسب hdmi1
و hdmi2
باشد، آنگاه مقادیر پورت نمایشگر می تواند 1
و 2
باشد. مقادیر پورت حتی زمانی که نمایشگر دیگری (مانند مدل یا سازنده نمایشگر متفاوت) به همان پورت فیزیکی HDMI متصل است، ثابت می ماند. این به سازندگان دستگاه امکان می دهد تا دستورالعمل هایی را برای جمع آوری و ارتقاء نمایشگرها ارائه دهند.
ارتباط در /vendor/etc/input-port-associations.xml
پیکربندی شده است. به عنوان مثال:
<ports>
<port display="0" input="usb-xhci-hcd.0.auto-1.1/input0" />
<port display="1" input="usb-xhci-hcd.0.auto-1.2/input0" />
</ports>
در مثال بالا، display="0"
پورتی را که نمایشگر به آن متصل است مشخص می کند. input="usb-xhci-hcd.0.auto-1.1/input0"
پورتی را که دستگاه ورودی به آن متصل است را مشخص می کند. برای تعیین پورتهای مرتبط با دستگاههای خاص، از دستور ترمینال زیر استفاده کنید و سپس ویژگی location
آن دستگاهها را در Event Hub State بررسی کنید.
adb shell dumpsys input
اگر دستگاههای زیادی متصل هستند، روی یک دستگاه خاص ضربه بزنید تا آرایه RecentQueue
را در وضعیت Dispatcher ورودی بررسی کنید. سپس می توانید دستگاه هایی را که جدیدترین رویداد را ایجاد کرده اند شناسایی کنید. سپس می توانید دستگاه مربوطه را در Event Hub State پیدا کنید.
برای تعیین پورت های نمایش اختصاص داده شده به نمایشگرهای متصل، adb shell dumpsys display
استفاده کنید و سپس به دنبال ویژگی address
DisplayDeviceInfo
برای هر نمایشگر در قسمت Display Devices بگردید. روش دیگر، از adb shell dumpsys SurfaceFlinger --display-id
برای تخلیه اطلاعات شناسایی برای همه نمایشگرهای متصل استفاده کنید. همچنین به شناسه های نمایشگر استاتیک مراجعه کنید.
اگر ارتباطی را برای یک دستگاه ورودی خاص مشخص کنید و نمایشگر مربوطه در سیستم وجود نداشته باشد، دستگاه ورودی غیرفعال می شود تا زمانی که نمایشگر مربوطه ظاهر شود. ارتباط فقط برای دستگاه های لمسی انجام می شود.
مسیریابی برای چند نمایشگر پویا
اندروید 10 به شما امکان میدهد دستگاههای چند صفحهنمایش ثابت را تنظیم کنید. پیوندهای پویا هنوز فعال نشده اند. با این حال، برخی از موارد استفاده را می توان با ارائه اطلاعات مسیریابی برای نمایشگرها و پانل های ورودی که همیشه وجود ندارند یا با استفاده از دستگاه های ورودی مجازی و سپس ارائه اطلاعات مسیریابی اضافی به آن دستگاه های مجازی برطرف کرد. اگر پیاده سازی دستگاه از یک زیر پشتیبانی کند:
- تجربه ای شبیه به دسکتاپ با یک ایستگاه اتصال، سپس یک پیکربندی مسیریابی می تواند برای هدف قرار دادن ورودی از لوازم جانبی ورودی متصل به داک (که منحصراً توسط پورت مشخص می شود) به صفحه نمایش خارجی (شناسایی شده توسط پورت) ارائه شود.
- صفحه اصلی که به عنوان منبع ورودی (مانند پد لمسی) در هنگام اتصال به صفحه نمایش خارجی عمل می کند، سپس یک پیکربندی مسیریابی می تواند برای هدف قرار دادن ورودی از پنل لمسی مجازی (شناسایی شده توسط شناسه مجازی منحصر به فرد) به صفحه نمایش خارجی (شناسایی شده توسط پورت) ارائه شود. .
پیاده سازی
- برای دستگاه های فیزیکی، درگاهی که دستگاه ورودی به آن متصل است و پورتی که نمایشگر به آن متصل است، برای تطبیق نمایشگرها با صفحه نمایش لمسی استفاده می شود.
- نگاشتها در
InputReaderConfiguration
ذخیره می شوند. -
TouchInputMapper.mViewport
روی درگاه نمایشی تنظیم شده است که با پورت مشخص شده برایInputDevice.location
مطابقت دارد. - اگر یک پورت دستگاه ورودی در فایل نگاشت مشخص شده باشد، و در حال حاضر یک درگاه نمایشی وجود نداشته باشد که دارای یک پورت نمایش منطبق باشد، دستگاه ورودی در آن پورت غیرفعال می شود.
- اگر یک پورت برای یک دستگاه ورودی خاص مشخص نشده باشد، آنگاه viewport طبق قوانین موجود تنظیم می شود.
- هیچ تغییری در کرنل در درایورهای ورودی لازم نیست.
- پورت های دستگاه ورودی با استفاده از EVIOCGPHYS ioctl تعیین می شوند.
در اندروید 9 و پایین تر، هیچ راهی برای تعامل با چندین نمایشگر از طریق لمس وجود نداشت، زیرا هیچ مکانیزم ارتباطی بین نمایشگرها و دستگاه های ورودی وجود نداشت. به عنوان مثال، یک صفحه نمایش لمسی می تواند یک خروجی ویدیوی HDMI (که به عنوان نمایشگر در اندروید ثبت می شود) و یک خروجی USB برای صفحه نمایش لمسی (که به عنوان یک دستگاه ورودی ثبت می شود) ارائه دهد. اگر چندین دستگاه به این روش متصل شده باشند، هیچ راهی برای تعیین اینکه کدام دستگاه ورودی متعلق به کدام نمایشگر است وجود نخواهد داشت. همین مسئله در مورد دستگاه های تاشو با نمایشگرهای داخلی متعدد نیز صدق می کند.
اندروید 10 مکانیزمی را اضافه کرد تا مشخص کند کدام دستگاه ورودی متعلق به کدام نمایشگر است. ارتباط توسط شماره پورت انجام می شود که در آن پورت به پورت فیزیکی که نمایشگر به آن متصل است اشاره دارد.
به عنوان مثال، اگر یک دستگاه اندرویدی دارای دو پورت HDMI با برچسب hdmi1
و hdmi2
باشد، آنگاه مقادیر پورت نمایشگر می تواند 1
و 2
باشد. مقادیر پورت حتی زمانی که نمایشگر دیگری (مانند مدل یا سازنده نمایشگر متفاوت) به همان پورت فیزیکی HDMI متصل است، ثابت می ماند. این به سازندگان دستگاه امکان می دهد تا دستورالعمل هایی را برای جمع آوری و ارتقاء نمایشگرها ارائه دهند.
ارتباط در /vendor/etc/input-port-associations.xml
پیکربندی شده است. به عنوان مثال:
<ports>
<port display="0" input="usb-xhci-hcd.0.auto-1.1/input0" />
<port display="1" input="usb-xhci-hcd.0.auto-1.2/input0" />
</ports>
در مثال بالا، display="0"
پورتی را که نمایشگر به آن متصل است مشخص می کند. input="usb-xhci-hcd.0.auto-1.1/input0"
پورتی را که دستگاه ورودی به آن متصل است را مشخص می کند. برای تعیین پورتهای مرتبط با دستگاههای خاص، از دستور ترمینال زیر استفاده کنید و سپس ویژگی location
آن دستگاهها را در Event Hub State بررسی کنید.
adb shell dumpsys input
اگر دستگاههای زیادی متصل هستند، روی یک دستگاه خاص ضربه بزنید تا آرایه RecentQueue
را در وضعیت Dispatcher ورودی بررسی کنید. سپس می توانید دستگاه هایی را که جدیدترین رویداد را ایجاد کرده اند شناسایی کنید. سپس می توانید دستگاه مربوطه را در Event Hub State پیدا کنید.
برای تعیین پورت های نمایش اختصاص داده شده به نمایشگرهای متصل، adb shell dumpsys display
استفاده کنید و سپس به دنبال ویژگی address
DisplayDeviceInfo
برای هر نمایشگر در قسمت Display Devices بگردید. روش دیگر، از adb shell dumpsys SurfaceFlinger --display-id
برای تخلیه اطلاعات شناسایی برای همه نمایشگرهای متصل استفاده کنید. همچنین به شناسه های نمایشگر استاتیک مراجعه کنید.
اگر ارتباطی را برای یک دستگاه ورودی خاص مشخص کنید و نمایشگر مربوطه در سیستم وجود نداشته باشد، دستگاه ورودی غیرفعال می شود تا زمانی که نمایشگر مربوطه ظاهر شود. ارتباط فقط برای دستگاه های لمسی انجام می شود.
مسیریابی برای چند نمایشگر پویا
اندروید 10 به شما امکان میدهد دستگاههای چند صفحهنمایش ثابت را تنظیم کنید. پیوندهای پویا هنوز فعال نشده اند. با این حال، برخی از موارد استفاده را می توان با ارائه اطلاعات مسیریابی برای نمایشگرها و پانل های ورودی که همیشه وجود ندارند یا با استفاده از دستگاه های ورودی مجازی و سپس ارائه اطلاعات مسیریابی اضافی به آن دستگاه های مجازی برطرف کرد. اگر پیاده سازی دستگاه از یک زیر پشتیبانی کند:
- تجربه ای شبیه به دسکتاپ با یک ایستگاه اتصال، سپس یک پیکربندی مسیریابی می تواند برای هدف قرار دادن ورودی از لوازم جانبی ورودی متصل به داک (که منحصراً توسط پورت مشخص می شود) به صفحه نمایش خارجی (شناسایی شده توسط پورت) ارائه شود.
- صفحه اصلی که به عنوان منبع ورودی (مانند پد لمسی) در هنگام اتصال به صفحه نمایش خارجی عمل می کند، سپس یک پیکربندی مسیریابی می تواند برای هدف قرار دادن ورودی از پنل لمسی مجازی (شناسایی شده توسط شناسه مجازی منحصر به فرد) به صفحه نمایش خارجی (شناسایی شده توسط پورت) ارائه شود. .
پیاده سازی
- برای دستگاه های فیزیکی، درگاهی که دستگاه ورودی به آن متصل است و پورتی که نمایشگر به آن متصل است، برای تطبیق نمایشگرها با صفحه نمایش لمسی استفاده می شود.
- نگاشتها در
InputReaderConfiguration
ذخیره می شوند. -
TouchInputMapper.mViewport
روی درگاه نمایشی تنظیم شده است که با پورت مشخص شده برایInputDevice.location
مطابقت دارد. - اگر یک پورت دستگاه ورودی در فایل نگاشت مشخص شده باشد، و در حال حاضر یک درگاه نمایشی وجود نداشته باشد که دارای یک پورت نمایش منطبق باشد، دستگاه ورودی در آن پورت غیرفعال می شود.
- اگر یک پورت برای یک دستگاه ورودی خاص مشخص نشده باشد، آنگاه viewport طبق قوانین موجود تنظیم می شود.
- هیچ تغییری در کرنل در درایورهای ورودی لازم نیست.
- پورت های دستگاه ورودی با استفاده از EVIOCGPHYS ioctl تعیین می شوند.
در اندروید 9 و پایین تر، هیچ راهی برای تعامل با چندین نمایشگر از طریق لمس وجود نداشت، زیرا هیچ مکانیزم ارتباطی بین نمایشگرها و دستگاه های ورودی وجود نداشت. به عنوان مثال، یک صفحه نمایش لمسی می تواند یک خروجی ویدیوی HDMI (که به عنوان نمایشگر در اندروید ثبت می شود) و یک خروجی USB برای صفحه نمایش لمسی (که به عنوان یک دستگاه ورودی ثبت می شود) ارائه دهد. اگر چندین دستگاه به این روش متصل شده باشند، هیچ راهی برای تعیین اینکه کدام دستگاه ورودی متعلق به کدام نمایشگر است وجود نخواهد داشت. همین مسئله در مورد دستگاه های تاشو با نمایشگرهای داخلی متعدد نیز صدق می کند.
اندروید 10 مکانیزمی را اضافه کرد تا مشخص کند کدام دستگاه ورودی متعلق به کدام نمایشگر است. ارتباط توسط شماره پورت انجام می شود که در آن پورت به پورت فیزیکی که نمایشگر به آن متصل است اشاره دارد.
به عنوان مثال، اگر یک دستگاه اندرویدی دارای دو پورت HDMI با برچسب hdmi1
و hdmi2
باشد، آنگاه مقادیر پورت نمایشگر می تواند 1
و 2
باشد. مقادیر پورت حتی زمانی که نمایشگر دیگری (مانند مدل یا سازنده نمایشگر متفاوت) به همان پورت فیزیکی HDMI متصل است، ثابت می ماند. این به سازندگان دستگاه امکان می دهد تا دستورالعمل هایی را برای جمع آوری و ارتقاء نمایشگرها ارائه دهند.
ارتباط در /vendor/etc/input-port-associations.xml
پیکربندی شده است. به عنوان مثال:
<ports>
<port display="0" input="usb-xhci-hcd.0.auto-1.1/input0" />
<port display="1" input="usb-xhci-hcd.0.auto-1.2/input0" />
</ports>
در مثال بالا، display="0"
پورتی را که نمایشگر به آن متصل است مشخص می کند. input="usb-xhci-hcd.0.auto-1.1/input0"
پورتی را که دستگاه ورودی به آن متصل است را مشخص می کند. برای تعیین پورتهای مرتبط با دستگاههای خاص، از دستور ترمینال زیر استفاده کنید و سپس ویژگی location
آن دستگاهها را در Event Hub State بررسی کنید.
adb shell dumpsys input
اگر دستگاههای زیادی متصل هستند، روی یک دستگاه خاص ضربه بزنید تا آرایه RecentQueue
را در وضعیت Dispatcher ورودی بررسی کنید. سپس می توانید دستگاه هایی را که جدیدترین رویداد را ایجاد کرده اند شناسایی کنید. سپس می توانید دستگاه مربوطه را در Event Hub State پیدا کنید.
برای تعیین پورت های نمایش اختصاص داده شده به نمایشگرهای متصل، adb shell dumpsys display
استفاده کنید و سپس به دنبال ویژگی address
DisplayDeviceInfo
برای هر نمایشگر در قسمت Display Devices بگردید. روش دیگر، از adb shell dumpsys SurfaceFlinger --display-id
برای تخلیه اطلاعات شناسایی برای همه نمایشگرهای متصل استفاده کنید. همچنین به شناسه های نمایشگر استاتیک مراجعه کنید.
اگر ارتباطی را برای یک دستگاه ورودی خاص مشخص کنید و نمایشگر مربوطه در سیستم وجود نداشته باشد، دستگاه ورودی غیرفعال می شود تا زمانی که نمایشگر مربوطه ظاهر شود. ارتباط فقط برای دستگاه های لمسی انجام می شود.
مسیریابی برای چند نمایشگر پویا
اندروید 10 به شما امکان میدهد دستگاههای چند صفحهنمایش ثابت را تنظیم کنید. پیوندهای پویا هنوز فعال نشده اند. با این حال، برخی از موارد استفاده را می توان با ارائه اطلاعات مسیریابی برای نمایشگرها و پانل های ورودی که همیشه وجود ندارند یا با استفاده از دستگاه های ورودی مجازی و سپس ارائه اطلاعات مسیریابی اضافی به آن دستگاه های مجازی برطرف کرد. اگر پیاده سازی دستگاه از یک زیر پشتیبانی کند:
- تجربه ای شبیه به دسکتاپ با یک ایستگاه اتصال، سپس یک پیکربندی مسیریابی می تواند برای هدف قرار دادن ورودی از لوازم جانبی ورودی متصل به داک (که منحصراً توسط پورت مشخص می شود) به صفحه نمایش خارجی (شناسایی شده توسط پورت) ارائه شود.
- صفحه اصلی که به عنوان منبع ورودی (مانند پد لمسی) در هنگام اتصال به صفحه نمایش خارجی عمل می کند، سپس یک پیکربندی مسیریابی می تواند برای هدف قرار دادن ورودی از پنل لمسی مجازی (شناسایی شده توسط شناسه مجازی منحصر به فرد) به صفحه نمایش خارجی (شناسایی شده توسط پورت) ارائه شود. .
پیاده سازی
- برای دستگاه های فیزیکی، درگاهی که دستگاه ورودی به آن متصل است و پورتی که نمایشگر به آن متصل است، برای تطبیق نمایشگرها با صفحه نمایش لمسی استفاده می شود.
- نگاشتها در
InputReaderConfiguration
ذخیره می شوند. -
TouchInputMapper.mViewport
روی درگاه نمایشی تنظیم شده است که با پورت مشخص شده برایInputDevice.location
مطابقت دارد. - اگر یک پورت دستگاه ورودی در فایل نگاشت مشخص شده باشد، و در حال حاضر یک درگاه نمایشی وجود نداشته باشد که دارای یک پورت نمایش منطبق باشد، دستگاه ورودی در آن پورت غیرفعال می شود.
- اگر یک پورت برای یک دستگاه ورودی خاص مشخص نشده باشد، آنگاه viewport طبق قوانین موجود تنظیم می شود.
- هیچ تغییری در کرنل در درایورهای ورودی لازم نیست.
- پورت های دستگاه ورودی با استفاده از EVIOCGPHYS ioctl تعیین می شوند.