<font size=2 face="sans-serif">Hi Venkat,</font>
<br>
<br><font size=2 face="sans-serif">You are right, It appears that your
BIOS's console splitter does not contain a virtual absolute pointer device
instance. </font>
<br>
<br><font size=2 face="sans-serif">It also appears that your system has
two absolute pointer device attached, a usb based device and another (maybe
an on screen software keyboard, or a i2c device).</font>
<br>
<br><font size=2 face="sans-serif">If you are trying to use the absolute
pointer devices in your preboot application, this means you have more work
to do. &nbsp;You will have to perform the mapping from the touch screen
devices to overlay to the screen resolution in the same way that the consplitter's
abs pointer would have. &nbsp;</font>
<br>
<br>
<br><font size=2 face="sans-serif">Best Personal Regards,</font>
<br>
<br><font size=2 face="sans-serif">Aaron Pop</font>
<br><font size=2 face="sans-serif">Senior Software Engineer</font>
<br>
<br><font size=2 face="sans-serif">Phone: +1 858-457-2600 Ext. 705</font>
<br><font size=2 face="sans-serif">Fax: +1 858-457-2602 &nbsp;| &nbsp;Email:
Aaron.Pop@congatec.com</font>
<br>
<hr>
<br><img src=cid:_1_0A89B8D80A89B66C005FC99B88257F78>
<br><font size=2 face="sans-serif"><b>congatec, Inc.</b> &nbsp;| &nbsp;6262
Ferris Square &nbsp;| &nbsp;San Diego CA &nbsp;92121 &nbsp;| &nbsp;USA
&nbsp;| &nbsp;</font><a href=http://www.congatec.us/><font size=2 color=blue face="sans-serif"><u>www.congatec.us</u></font></a>
<br>
<hr>
<br><font size=1 color=#808080 face="sans-serif">Any e-mail sent from congatec
may contain information which is confidential. If you are not the intended
recipient, you may not</font>
<br><font size=1 color=#808080 face="sans-serif">disclose, copy or use
it; please notify the sender immediately and delete this e-mail and any
copies from your systems.</font>
<br>
<br>
<br>
<br>
<br><font size=1 color=#5f5f5f face="sans-serif">From: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Venkat Gorla &lt;venkatagorla@gmail.com&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">To: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Aaron.Pop@congatec.com,
</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Cc: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">fw_os_forum@mailman.uefi.org,
fw_os_forum-bounces@mailman.uefi.org</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Date: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">03/15/2016 03:07 AM</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">Re: [Fw_Os_Forum]
How to detect devices that support touch</font>
<br>
<hr noshade>
<br>
<br>
<br><font size=3>Hi Aaron,</font>
<br>
<br><font size=3>Yes, that is what I tried.</font>
<br>
<br><font size=3>Below is a listing of all the handles and protocols supported
on them, on one of the touch devices that we are using for testing.</font>
<br>
<br><font size=3>May be it will provide some additional insight into the
issues we are facing.</font>
<br>
<br><font size=3>Thanks,</font>
<br><font size=3>Venkat&nbsp;</font>
<br>
<br><font size=3>Handles returned via LocateHandle specifying &quot;absolute
pointer protocol&quot; as the search criteria:</font>
<br><font size=3># Handles: 2</font>
<br><font size=3>** Listing protocols for handle 0:</font>
<br><font size=3>Protocols: 9</font>
<br><font size=3>0xC7A7030C // Unknown</font>
<br><font size=3>0x8D59D32B // Absolute pointer</font>
<br><font size=3>0x31878C87 // Simple pointer</font>
<br><font size=3>0x0ADFB62D // AMI_EFIKEYCODE_PROTOCOL_GUID</font>
<br><font size=3>0xDD9E7534 // Simple text input ex protocol</font>
<br><font size=3>0x387477C1 // Simple text input protocol</font>
<br><font size=3>0x1FEDE521 // Unknown</font>
<br><font size=3>0x09576E91 // Device path protocol</font>
<br><font size=3>0x2B2F68D6 // USB IO protocol</font>
<br>
<br><font size=3>** Listing protocols for handle 1:</font>
<br><font size=3>Protocols: 2</font>
<br><font size=3>0x09576E91 // Device path protocol</font>
<br><font size=3>0x8D59D32B // Absolute pointer</font>
<br>
<br><font size=3>** Listing protocols from ConsoleInHandle:</font>
<br><font size=3>Protocols: 7</font>
<br><font size=3>0x31878C87 // Simple pointer</font>
<br><font size=3>0x0ADFB62D // AMI_EFIKEYCODE_PROTOCOL_GUID</font>
<br><font size=3>0xDD9E7534 // Simple text input ex protocol</font>
<br><font size=3>0x387477C1 // Simple text input protocol</font>
<br><font size=3>0xF42F7782 // Console control protocol</font>
<br><font size=3>0x387477C2 // Simple text out protocol</font>
<br><font size=3>0xB295BD1C // Unknown</font>
<br>
<br><font size=3>In this protocol listing, you can see that absolute pointer
protocol isn't listed on the console in handle which explains the &quot;OpenProtocol&quot;
function call failure.</font>
<br>
<br>
<br>
<br>
<br><font size=3>On Wed, Mar 9, 2016 at 11:54 PM, &lt;</font><a href=mailto:Aaron.Pop@congatec.com target=_blank><font size=3 color=blue><u>Aaron.Pop@congatec.com</u></font></a><font size=3>&gt;
wrote:</font>
<br><font size=2 face="sans-serif">Hi Venkat,</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
It sounds like your OpenProtocol call is failing, because EFI_UNSUPPORTED
is returned when the protocol is not found on the device handle.&nbsp;
Is your open protocol formatted like the below snippet?</font><font size=3>
<br>
<br>
</font><font size=2 face="sans-serif"><br>
Status = gBS-&gt;OpenProtocol( gST-&gt;ConInHandle,</font><font size=3>
</font><font size=2 face="sans-serif"><br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &amp;gEfiAbsolutePointerProtocolGuid,</font><font size=3>
</font><font size=2 face="sans-serif"><br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &amp;AbsolutePointerProtocol,</font><font size=3>
</font><font size=2 face="sans-serif"><br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; gImageHandle,</font><font size=3> </font><font size=2 face="sans-serif"><br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; NULL,</font><font size=3> </font><font size=2 face="sans-serif"><br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL);</font><font size=3>
<br>
<br>
</font><font size=2 face="sans-serif"><br>
Best Personal Regards,</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
Aaron Pop</font><font size=3> </font><font size=2 face="sans-serif"><br>
Senior Software Engineer</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
Phone: </font><a href="tel:%2B1%20858-457-2600%20Ext.%20705" target=_blank><font size=2 color=blue face="sans-serif"><u>+1
858-457-2600 Ext. 705</u></font></a><font size=3> </font><font size=2 face="sans-serif"><br>
Fax: </font><a href="tel:%2B1%20858-457-2602" target=_blank><font size=2 color=blue face="sans-serif"><u>+1
858-457-2602</u></font></a><font size=2 face="sans-serif"> &nbsp;| &nbsp;Email:
</font><a href=mailto:Aaron.Pop@congatec.com target=_blank><font size=2 color=blue face="sans-serif"><u>Aaron.Pop@congatec.com</u></font></a><font size=3>
<br>
</font>
<hr><font size=3><br>
</font><img src=cid:_1_094564D4094551F4005FC99C88257F78 width=378 height=83><font size=2 face="sans-serif"><b><br>
congatec, Inc.</b> &nbsp;| &nbsp;6262 Ferris Square &nbsp;| &nbsp;San Diego
CA &nbsp;92121 &nbsp;| &nbsp;USA &nbsp;| &nbsp;</font><a href=http://www.congatec.us/ target=_blank><font size=2 color=blue face="sans-serif"><u>www.congatec.us</u></font></a><font size=3>
<br>
</font>
<hr><font size=1 color=#808080 face="sans-serif"><br>
Any e-mail sent from congatec may contain information which is confidential.
If you are not the intended recipient, you may not</font><font size=3>
</font><font size=1 color=#808080 face="sans-serif"><br>
disclose, copy or use it; please notify the sender immediately and delete
this e-mail and any copies from your systems.</font><font size=3> <br>
<br>
<br>
<br>
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
From: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">Venkat
Gorla &lt;</font><a href=mailto:venkatagorla@gmail.com target=_blank><font size=1 color=blue face="sans-serif"><u>venkatagorla@gmail.com</u></font></a><font size=1 face="sans-serif">&gt;</font><font size=3>
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
To: &nbsp; &nbsp; &nbsp; &nbsp;</font><a href=mailto:Aaron.Pop@congatec.com target=_blank><font size=1 color=blue face="sans-serif"><u>Aaron.Pop@congatec.com</u></font></a><font size=1 face="sans-serif">,
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
Cc: &nbsp; &nbsp; &nbsp; &nbsp;</font><a href=mailto:fw_os_forum@mailman.uefi.org target=_blank><font size=1 color=blue face="sans-serif"><u>fw_os_forum@mailman.uefi.org</u></font></a><font size=1 face="sans-serif">,
</font><a href="mailto:fw_os_forum-bounces@mailman.uefi.org" target=_blank><font size=1 color=blue face="sans-serif"><u>fw_os_forum-bounces@mailman.uefi.org</u></font></a><font size=3>
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
Date: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">03/08/2016
01:41 AM</font><font size=3> </font>
<br><font size=1 color=#5f5f5f face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">Re: [Fw_Os_Forum] How
to detect devices that support touch</font><font size=3> <br>
</font>
<hr noshade><font size=3><br>
<br>
<br>
Hi Aaron, <br>
<br>
Thanks for your suggestions. <br>
<br>
Using the UEFI shell, I listed all the handles in the database of my touch
device and the console splitter is listed in the output - along with the
absolute pointer protocol. <br>
<br>
However when I call OpenProtocol using gST-&gt;ConsoleInHandle, I am getting&nbsp;EFI_UNSUPPORTED
error. <br>
<br>
Venkat&nbsp; <br>
<br>
<br>
On Sat, Mar 5, 2016 at 4:50 PM, Venkat Gorla &lt;</font><a href=mailto:venkatagorla@gmail.com target=_blank><font size=3 color=blue><u>venkatagorla@gmail.com</u></font></a><font size=3>&gt;
wrote: <br>
Hi Aaron, <br>
<br>
I spoke a bit too soon regarding the usage of EDK in my product. <br>
<br>
Browsing the code repository of my product, I just discovered that EDK
is already available :) <br>
<br>
I am now actively investigating how I can incorporate &nbsp;the suggestions
that you provided regarding EDK. <br>
<br>
Thanks much, <br>
Venkat&nbsp; <br>
<br>
<br>
On Sat, Mar 5, 2016 at 4:05 PM, Venkat Gorla &lt;</font><a href=mailto:venkatagorla@gmail.com target=_blank><font size=3 color=blue><u>venkatagorla@gmail.com</u></font></a><font size=3>&gt;
wrote: <br>
Thanks Aaron, for the detailed explanation. That was really helpful. <br>
<br>
I am new to the UEFI world and still trying to get the hang of it. <br>
<br>
It seems EDK and the console splitter absolute pointer abstraction that
you described, is an open source development environment for the UEFI specification.
Unfortunately we have some very tight restrictions in our company when
it comes to using open source components in our shipping products. As such
using EDK right now isn't a realistic option for me. <br>
<br>
The idea itself is very interesting though; what is the best/ recommended
way to get the handle for a device that supports the absolute pointer protocol?
If there is something that can be done using just the UEFI specification,
please let me know. <br>
<br>
Btw, to get the array of handles for the absolute pointer protocol in my
code, I am calling EFI API LocateHandle(). There is also a related API
called LocateHandleBuffer(). The only difference between these functions
seems to be whose responsibility it is to allocate space for the handle
buffer array. Otherwise, functionally they seem to be the same. <br>
<br>
Please let me know if there is reason to be using one function over the
other. <br>
</font><font size=3 color=#8f8f8f><br>
Venkat&nbsp;</font><font size=3> <br>
<br>
On Fri, Mar 4, 2016 at 11:56 PM, &lt;</font><a href=mailto:Aaron.Pop@congatec.com target=_blank><font size=3 color=blue><u>Aaron.Pop@congatec.com</u></font></a><font size=3>&gt;
wrote: </font><font size=2 face="sans-serif"><br>
Hi Venkat,</font><font size=3> </font><font size=2 face="sans-serif"><br>
<br>
Your original question was &quot;How do I determine if I have a physical
touch device attached to the system?&quot;.&nbsp; Locating a handle buffer
of absolute pointer protocols and going through the handles to determine
if any of them contain a device path will answer that. <br>
<br>
If, however, you want to interact with the absolute pointer devices, then
you should only use the absolute pointer protocol that does not have a
device path.</font><font size=3> </font><font size=2 face="sans-serif"><br>
<br>
The console splitter, which I described in the previous email, collects
all absolute pointer devices under a single abstracted absolute pointer
protocol interface.&nbsp; It abstracts away the information regarding the
current settings of the screen. I'll give you a case to help understand
what I mean.</font><font size=3> </font><font size=2 face="sans-serif"><br>
<br>
Consider that you have two touch screen devices attached to the system.
The first is a digitizer that sit on top of the monitor, and the second
is a tablet like device (like a wacom tablet).&nbsp; Each of these touch
devices installs their own absolute pointer instance with their own EFI_ABSOLUTE_POINTER_MODE
interface descriptions.&nbsp; The monitor touch screen device returns absoluteX
and absoluteY information that is not tied to the current video resolution
(i.e absolutex is 800, absolutey is 600, and the monitor is currently in
1920x1080 resolution). &nbsp; If you attempt to use this data directly,
then you will only be able to access 800x600 of hte total 1920x1080 resolution.&nbsp;
This same limitation will be experienced with the wacom device. &nbsp;</font><font size=3>
</font><font size=2 face="sans-serif"><br>
<br>
The console splitter's absolute pointer protocol abstraction has information
about the current video display resolution, and it will perform a translation
of the individual device's absolute pointer information to map the information
into the current display resolution.&nbsp; For example, if the monitor's
absolute pointer returns that the display is at pixel 799x599, then that
would be mapped by the console splitter to approximately the 1919x1079
pixel.</font><font size=3> </font><font size=2 face="sans-serif"><br>
<br>
So to answer your second question, you should not be enumerating handles
when you want to use an absolute pointer. You should be using the absolute
pointer protocol from the console splitter, which can be retrieved by opening
the protocol on the gST-&gt;ConInHandle.</font><font size=3> </font><font size=2 face="sans-serif"><br>
<br>
As to why your individual device is not working when you use the first
handle in the handle buffer, I do not know.&nbsp; It is probably something
that you will have to investigate.&nbsp; Are you sure that your device
is conforming to the absolute pointer protocol description in the EFI specification?&nbsp;
Are there any assumptions in your test code that conflict with the EFI
specification?&nbsp; Is there a bug in the EDK2 console splitter's absolute
pointer abstraction (freely available to view online at </font><a href=https://github.com/tianocore/edk2 target=_blank><font size=2 color=blue face="sans-serif"><u>https://github.com/tianocore/edk2</u></font></a><font size=2 face="sans-serif">
under MdeModulePkg/Universal/Console/ConSplitterDxe).</font><font size=3>
<br>
<br>
<br>
<br>
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
<br>
From: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">Venkat
Gorla &lt;</font><a href=mailto:venkatagorla@gmail.com target=_blank><font size=1 color=blue face="sans-serif"><u>venkatagorla@gmail.com</u></font></a><font size=1 face="sans-serif">&gt;</font><font size=3>
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
To: &nbsp; &nbsp; &nbsp; &nbsp;</font><a href=mailto:Aaron.Pop@congatec.com target=_blank><font size=1 color=blue face="sans-serif"><u>Aaron.Pop@congatec.com</u></font></a><font size=1 face="sans-serif">,
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
Cc: &nbsp; &nbsp; &nbsp; &nbsp;</font><a href=mailto:fw_os_forum@mailman.uefi.org target=_blank><font size=1 color=blue face="sans-serif"><u>fw_os_forum@mailman.uefi.org</u></font></a><font size=1 face="sans-serif">,
</font><a href="mailto:fw_os_forum-bounces@mailman.uefi.org" target=_blank><font size=1 color=blue face="sans-serif"><u>fw_os_forum-bounces@mailman.uefi.org</u></font></a><font size=3>
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
Date: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">03/04/2016
01:50 AM</font><font size=3> </font><font size=1 color=#5f5f5f face="sans-serif"><br>
Subject: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">Re:
[Fw_Os_Forum] How to detect devices that support touch</font><font size=3>
<br>
</font>
<hr noshade><font size=3><br>
<br>
<br>
<br>
Thanks Aaron. Now when I get the list of handles, I am testing for the
device path protocol in addition to the absolute pointer protocol. <br>
<br>
By doing so, I am able to filter out the negative scenarios. <br>
<br>
I have another related question on this topic. <br>
<br>
On some of the touch hardware on which we are testing our product changes,
when enumerating the handles, if we select the first handle that has both
absolute pointer protocol and device path protocol, it doesn't seem to
function always -- touch events aren't being received. <br>
<br>
On the other hand, if we select the **last** handle that has both protocols,
it seems to work always. <br>
<br>
So is there something about this first handle vs last handle that will
explain this behavior? <br>
<br>
Venkat&nbsp; <br>
<br>
On Thu, Mar 3, 2016 at 11:38 PM, &lt;</font><a href=mailto:Aaron.Pop@congatec.com target=_blank><font size=3 color=blue><u>Aaron.Pop@congatec.com</u></font></a><font size=3>&gt;
wrote: </font><font size=2 face="sans-serif"><br>
EDK implements a console splitter for input device.&nbsp; This console
splitter creates a absolute pointer protocol instance that does not contain
a device path.</font><font size=3> </font><font size=2 face="sans-serif"><br>
<br>
You can locate a handle buffer of all the handles that contain an absolute
pointer protocol, and then you can go through the handles and make sure
that there is a handle that contains a device path.&nbsp; If there are
no absolute pointer instances that contain a device path.</font><font size=3>
<br>
<br>
<br>
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
<br>
<br>
From: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">Venkat
Gorla &lt;</font><a href=mailto:venkatagorla@gmail.com target=_blank><font size=1 color=blue face="sans-serif"><u>venkatagorla@gmail.com</u></font></a><font size=1 face="sans-serif">&gt;</font><font size=3>
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
To: &nbsp; &nbsp; &nbsp; &nbsp;</font><a href=mailto:fw_os_forum@mailman.uefi.org target=_blank><font size=1 color=blue face="sans-serif"><u>fw_os_forum@mailman.uefi.org</u></font></a><font size=1 face="sans-serif">,
</font><font size=1 color=#5f5f5f face="sans-serif"><br>
Date: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">03/03/2016
01:06 AM</font><font size=3> </font><font size=1 color=#5f5f5f face="sans-serif"><br>
Subject: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">[Fw_Os_Forum]
How to detect devices that support touch</font><font size=3> </font><font size=1 color=#5f5f5f face="sans-serif"><br>
Sent by: &nbsp; &nbsp; &nbsp; &nbsp;</font><a href="mailto:fw_os_forum-bounces@mailman.uefi.org" target=_blank><font size=1 color=blue face="sans-serif"><u>fw_os_forum-bounces@mailman.uefi.org</u></font></a><font size=3>
<br>
</font>
<hr noshade><font size=3><br>
<br>
<br>
<br>
Hello, <br>
<br>
We are making some product changes that are specific to touch devices (such
as a tablet) in the Windows pre-boot UEFI environment. I am referring the
following document for the UEFI specification: </font><font size=3 color=blue><u><br>
</u></font><a href=http://www.uefi.org/sites/default/files/resources/UEFI_Spec_2_3_1.pdf target=_blank><font size=2 color=#0060a0 face="Arial"><u>http://www.uefi.org/sites/default/files/resources/UEFI_Spec_2_3_1.pdf</u></font></a><font size=3>
<br>
<br>
However I haven't been able to definitively check for touch devices vs
non-touch devices using the specification. <br>
<br>
For example, querying for the absolute pointer protocol interface succeeds
even on a non-touch device such as a laptop or a desktop. Additionally,
the absolute max X and max Y values are also being reported as non-zero
when I query the &quot;Mode&quot; of the protocol interface. <br>
<br>
So my question is how do I filter out the negative scenarios (devices that
don't support touch) using the UEFI specification? <br>
<br>
Any pointers or help will is much appreciated. <br>
<br>
Thanks, <br>
Venkat&nbsp;</font><tt><font size=2>_______________________________________________<br>
Fw_os_forum mailing list</font></tt><font size=3 color=blue><u><br>
</u></font><a href=mailto:Fw_os_forum@mailman.uefi.org target=_blank><tt><font size=2 color=blue><u>Fw_os_forum@mailman.uefi.org</u></font></tt></a><font size=3 color=blue><u><br>
</u></font><a href=http://lists.mailman.uefi.org/mailman/listinfo/fw_os_forum target=_blank><tt><font size=2 color=blue><u>http://lists.mailman.uefi.org/mailman/listinfo/fw_os_forum</u></font></tt></a><font size=3>
<br>
<br>
<br>
<br>
</font>
<br>
<br>