Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev Add fido constants, and turn hid "raw" mode for fido...



details:   https://anonhg.NetBSD.org/src/rev/20d237c22188
branches:  trunk
changeset: 969824:20d237c22188
user:      christos <christos%NetBSD.org@localhost>
date:      Mon Mar 02 18:15:28 2020 +0000

description:
Add fido constants, and turn hid "raw" mode for fido devices.

diffstat:

 sys/dev/hid/hid.h  |   6 +++++-
 sys/dev/usb/uhid.c |  32 ++++++++++++++++++++++++++------
 2 files changed, 31 insertions(+), 7 deletions(-)

diffs (99 lines):

diff -r 7719c4f1e645 -r 20d237c22188 sys/dev/hid/hid.h
--- a/sys/dev/hid/hid.h Mon Mar 02 16:04:49 2020 +0000
+++ b/sys/dev/hid/hid.h Mon Mar 02 18:15:28 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hid.h,v 1.3 2018/11/15 23:01:45 jakllsch Exp $ */
+/*     $NetBSD: hid.h,v 1.4 2020/03/02 18:15:28 christos Exp $ */
 /*     $FreeBSD: src/sys/dev/usb/hid.h,v 1.7 1999/11/17 22:33:40 n_hibma Exp $ */
 
 /*
@@ -123,6 +123,7 @@
 #define HUP_CAMERA_CONTROL     0x0090
 #define HUP_ARCADE             0x0091
 #define HUP_VENDOR             0x00ff
+#define HUP_FIDO               0xf1d0
 #define HUP_MICROSOFT          0xff00
 /* XXX compat */
 #define HUP_APPLE              0x00ff
@@ -396,6 +397,9 @@
 /* Usages, Consumer */
 #define HUC_AC_PAN             0x0238
 
+/* Usages, FIDO */
+#define HUF_U2FHID             0x0001
+
 #define HID_USAGE2(p, u) (((p) << 16) | u)
 #define HID_GET_USAGE(u) ((u) & 0xffff)
 #define HID_GET_USAGE_PAGE(u) (((u) >> 16) & 0xffff)
diff -r 7719c4f1e645 -r 20d237c22188 sys/dev/usb/uhid.c
--- a/sys/dev/usb/uhid.c        Mon Mar 02 16:04:49 2020 +0000
+++ b/sys/dev/usb/uhid.c        Mon Mar 02 18:15:28 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: uhid.c,v 1.111 2020/01/01 09:05:03 maxv Exp $  */
+/*     $NetBSD: uhid.c,v 1.112 2020/03/02 18:15:28 christos Exp $      */
 
 /*
  * Copyright (c) 1998, 2004, 2008, 2012 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.111 2020/01/01 09:05:03 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.112 2020/03/02 18:15:28 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -104,6 +104,7 @@
 #define UHID_IMMED     0x02    /* return read data immediately */
 
        int sc_refcnt;
+       int sc_raw;
        u_char sc_dying;
 };
 
@@ -184,6 +185,8 @@
        sc->sc_isize = hid_report_size(desc, size, hid_input,   repid);
        sc->sc_osize = hid_report_size(desc, size, hid_output,  repid);
        sc->sc_fsize = hid_report_size(desc, size, hid_feature, repid);
+       sc->sc_raw =  hid_is_collection(desc, size, uha->reportid,
+           HID_USAGE2(HUP_FIDO, HUF_U2FHID));
 
        aprint_naive("\n");
        aprint_normal(": input=%d, output=%d, feature=%d\n",
@@ -482,15 +485,32 @@
                return EIO;
 
        size = sc->sc_osize;
-       error = 0;
        if (uio->uio_resid != size || size == 0)
                return EINVAL;
        error = uiomove(sc->sc_obuf, size, uio);
+#ifdef UHID_DEBUG
+       if (uhiddebug > 5) {
+               uint32_t i;
+
+               DPRINTF(("%s: outdata[%d] =", device_xname(sc->sc_hdev.sc_dev),
+                   error));
+               for (i = 0; i < size; i++)
+                       DPRINTF((" %02x", sc->sc_obuf[i]));
+               DPRINTF(("\n"));
+       }
+#endif
        if (!error) {
-               err = uhidev_set_report(&sc->sc_hdev, UHID_OUTPUT_REPORT,
-                                       sc->sc_obuf, size);
-               if (err)
+               if (sc->sc_raw)
+                       err = uhidev_write(sc->sc_hdev.sc_parent, sc->sc_obuf,
+                           size);
+               else
+                       err = uhidev_set_report(&sc->sc_hdev,
+                           UHID_OUTPUT_REPORT, sc->sc_obuf, size);
+               if (err) {
+                       DPRINTF(("%s: err = %d\n",
+                           device_xname(sc->sc_hdev.sc_dev), err));
                        error = EIO;
+               }
        }
 
        return error;



Home | Main Index | Thread Index | Old Index