[meta-intel] [PATCH V4 1/1] formfactor: detect USB HID keyboard and touch screen

Jianxun Zhang jianxun.zhang at linux.intel.com
Thu Jun 23 17:05:21 PDT 2016


The new machconfig probes USB keyboard and touch screen, and
then sets HAVE_* variables according to detection.

Detectable devices:
USB HID keyboards (Generic Desktop)
USB HID touch screens (Digitizer)

Note:
The intention is to have a way to provide initial formfactor
settings in a boot procedure. That means supported keyboard
and touch screen must be connected before machconfig runs.
Any new connection or disconnection won't be detected until
machconfig is executed again.

Limitation:
There could be some USB HID devices presents more than one
usage in a single descriptor. We will add support once such
device emerges.

Some platforms may have _virtual_ devices provided by BIOS.
It will cause false detection when they are presented as
types we supported. We can add black list logic when it
becomes a big concern.

Fixes [YOCTO #9205]

Signed-off-by: Jianxun Zhang <jianxun.zhang at linux.intel.com>
---
Just get a hand on this patch. V4 checks the existing of usbhid-command first.

Same test done on NUC 6 and X220 as before.

Let me know if this address feedbacks to previous versions.

 .../recipes-bsp/formfactor/formfactor/machconfig   | 39 ++++++++++++++++++++++
 .../recipes-bsp/formfactor/formfactor_0.0.bbappend |  1 +
 2 files changed, 40 insertions(+)
 create mode 100644 common/recipes-bsp/formfactor/formfactor/machconfig
 create mode 100644 common/recipes-bsp/formfactor/formfactor_0.0.bbappend

diff --git a/common/recipes-bsp/formfactor/formfactor/machconfig b/common/recipes-bsp/formfactor/formfactor/machconfig
new file mode 100644
index 0000000..b5222b8
--- /dev/null
+++ b/common/recipes-bsp/formfactor/formfactor/machconfig
@@ -0,0 +1,39 @@
+# Note: super user permission is required to run usbhid-dump
+# successfully.
+
+# HEX keys are according to USB HID spec and USB HID usage table
+# We could add more keys as needed in the future.
+
+# It may not be very accurate. Here we only look for first two lines
+# of a descriptor section. Example:
+#
+# 001:003:000:DESCRIPTOR         1460501386.337809
+#  05 01 09 02 A1 01 09 01 A1 00 05 09 19 01 29 03
+#  15 00 25 01 95 03 75 01 81 02 .. .. .. .. .. ..
+#  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
+#
+# By doing so we elimiate false matches when HEX keys are in the lines
+# in the middle of whole descriptor section.
+
+if type usbhid-dump &>/dev/null; then
+    if USBHID_DUMP_OUTPUT=$(usbhid-dump -e descriptor 2>/dev/null|grep -A1 DESCRIPTOR); then
+        # checker for generic USB HID keyboard
+        USBHID_KBD_CMD="grep -E '^ 05 01 09 06'"
+
+        # checker for touch screen
+        USBHID_TS_CMD="grep -E '^ 05 0D 09 04'"
+
+        if echo "$USBHID_DUMP_OUTPUT"|eval $USBHID_TS_CMD &>/dev/null; then
+            HAVE_TOUCHSCREEN=1
+        fi
+
+        if echo "$USBHID_DUMP_OUTPUT"|eval $USBHID_KBD_CMD &>/dev/null; then
+            HAVE_KEYBOARD=1
+        else
+            # config script in OE will set HAVE_KEYBOARD=1
+            # if we don't set any value. We have to explicitly
+            # tell it when keyboard is not detected.
+            HAVE_KEYBOARD=0
+        fi
+    fi
+fi
diff --git a/common/recipes-bsp/formfactor/formfactor_0.0.bbappend b/common/recipes-bsp/formfactor/formfactor_0.0.bbappend
new file mode 100644
index 0000000..72d991c
--- /dev/null
+++ b/common/recipes-bsp/formfactor/formfactor_0.0.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-- 
2.7.4



More information about the meta-intel mailing list