2024-07-28 13:25:59 +02:00
|
|
|
From d8eb9844f52b72cbb7ffed51d8c1dc49f68356c6 Mon Sep 17 00:00:00 2001
|
2024-03-17 14:34:25 +01:00
|
|
|
From: Tamer Hassan <thameruddin@gmail.com>
|
|
|
|
Date: Sat, 9 Mar 2024 12:20:15 +0400
|
2024-07-28 13:25:59 +02:00
|
|
|
Subject: [PATCH 1/2] egismoc: add 0587 support (also supports 0586 but missing
|
2024-03-17 14:34:25 +01:00
|
|
|
device file)
|
|
|
|
|
|
|
|
---
|
|
|
|
data/autosuspend.hwdb | 1 +
|
|
|
|
libfprint/drivers/egismoc/egismoc.c | 80 ++++++++-
|
|
|
|
libfprint/drivers/egismoc/egismoc.h | 7 +-
|
|
|
|
tests/egismoc-0587/custom.pcapng | Bin 0 -> 92988 bytes
|
|
|
|
tests/egismoc-0587/custom.py | 156 ++++++++++++++++
|
|
|
|
tests/egismoc-0587/device | 270 ++++++++++++++++++++++++++++
|
|
|
|
tests/meson.build | 1 +
|
|
|
|
7 files changed, 508 insertions(+), 7 deletions(-)
|
|
|
|
create mode 100644 tests/egismoc-0587/custom.pcapng
|
|
|
|
create mode 100755 tests/egismoc-0587/custom.py
|
|
|
|
create mode 100644 tests/egismoc-0587/device
|
|
|
|
|
|
|
|
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
|
2024-07-28 13:25:59 +02:00
|
|
|
index 8e0e6eab..f9842ae4 100644
|
2024-03-17 14:34:25 +01:00
|
|
|
--- a/data/autosuspend.hwdb
|
|
|
|
+++ b/data/autosuspend.hwdb
|
|
|
|
@@ -79,6 +79,7 @@ usb:v1C7Ap0571*
|
|
|
|
|
|
|
|
# Supported by libfprint driver egismoc
|
|
|
|
usb:v1C7Ap0582*
|
|
|
|
+usb:v1C7Ap0587*
|
|
|
|
usb:v1C7Ap05A1*
|
|
|
|
ID_AUTOSUSPEND=1
|
|
|
|
ID_PERSIST=0
|
|
|
|
diff --git a/libfprint/drivers/egismoc/egismoc.c b/libfprint/drivers/egismoc/egismoc.c
|
|
|
|
index 336ea53c..97997a2d 100644
|
|
|
|
--- a/libfprint/drivers/egismoc/egismoc.c
|
|
|
|
+++ b/libfprint/drivers/egismoc/egismoc.c
|
|
|
|
@@ -43,14 +43,20 @@ struct _FpiDeviceEgisMoc
|
|
|
|
FpiSsm *cmd_ssm;
|
|
|
|
FpiUsbTransfer *cmd_transfer;
|
|
|
|
GCancellable *interrupt_cancellable;
|
|
|
|
-
|
|
|
|
GPtrArray *enrolled_ids;
|
|
|
|
+ gint max_enroll_stages;
|
|
|
|
};
|
|
|
|
|
|
|
|
G_DEFINE_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FP_TYPE_DEVICE);
|
|
|
|
|
|
|
|
static const FpIdEntry egismoc_id_table[] = {
|
|
|
|
{ .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 },
|
|
|
|
+ /*
|
|
|
|
+ * 0x0586 is supported in the same way as 0587 per user report, but missing submission of device file to be included
|
|
|
|
+ *
|
|
|
|
+ * { .vid = 0x1c7a, .pid = 0x0586, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
|
|
|
|
+ */
|
|
|
|
+ { .vid = 0x1c7a, .pid = 0x0587, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
|
|
|
|
{ .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 },
|
|
|
|
{ .vid = 0, .pid = 0, .driver_data = 0 }
|
|
|
|
};
|
|
|
|
@@ -769,7 +775,7 @@ egismoc_enroll_status_report (FpDevice *device,
|
|
|
|
enroll_print->stage++;
|
|
|
|
fp_info ("Partial capture successful. Please touch the sensor again (%d/%d)",
|
|
|
|
enroll_print->stage,
|
|
|
|
- EGISMOC_MAX_ENROLL_NUM);
|
|
|
|
+ self->max_enroll_stages);
|
|
|
|
fpi_device_enroll_progress (device, enroll_print->stage, enroll_print->print, NULL);
|
|
|
|
break;
|
|
|
|
|
|
|
|
@@ -849,7 +855,7 @@ egismoc_read_capture_cb (FpDevice *device,
|
|
|
|
egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_RETRY, error);
|
|
|
|
}
|
|
|
|
|
|
|
|
- if (enroll_print->stage == EGISMOC_ENROLL_TIMES)
|
|
|
|
+ if (enroll_print->stage == self->max_enroll_stages)
|
|
|
|
fpi_ssm_next_state (self->task_ssm);
|
|
|
|
else
|
|
|
|
fpi_ssm_jump_to_state (self->task_ssm, ENROLL_CAPTURE_SENSOR_RESET);
|
|
|
|
@@ -1460,6 +1466,71 @@ egismoc_dev_init_handler (FpiSsm *ssm,
|
|
|
|
NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
+static void
|
|
|
|
+egismoc_probe (FpDevice *device)
|
|
|
|
+{
|
|
|
|
+ GUsbDevice *usb_dev;
|
|
|
|
+ GError *error = NULL;
|
|
|
|
+ g_autofree gchar *serial = NULL;
|
|
|
|
+ FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
|
|
|
+
|
|
|
|
+ fp_dbg ("%s enter --> ", G_STRFUNC);
|
|
|
|
+
|
|
|
|
+ /* Claim usb interface */
|
|
|
|
+ usb_dev = fpi_device_get_usb_device (device);
|
|
|
|
+ if (!g_usb_device_open (usb_dev, &error))
|
|
|
|
+ {
|
|
|
|
+ fp_dbg ("%s g_usb_device_open failed %s", G_STRFUNC, error->message);
|
|
|
|
+ fpi_device_probe_complete (device, NULL, NULL, error);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!g_usb_device_reset (usb_dev, &error))
|
|
|
|
+ {
|
|
|
|
+ fp_dbg ("%s g_usb_device_reset failed %s", G_STRFUNC, error->message);
|
|
|
|
+ g_usb_device_close (usb_dev, NULL);
|
|
|
|
+ fpi_device_probe_complete (device, NULL, NULL, error);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!g_usb_device_claim_interface (usb_dev, 0, 0, &error))
|
|
|
|
+ {
|
|
|
|
+ fp_dbg ("%s g_usb_device_claim_interface failed %s", G_STRFUNC, error->message);
|
|
|
|
+ g_usb_device_close (usb_dev, NULL);
|
|
|
|
+ fpi_device_probe_complete (device, NULL, NULL, error);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0)
|
|
|
|
+ serial = g_strdup ("emulated-device");
|
|
|
|
+ else
|
|
|
|
+ serial = g_usb_device_get_string_descriptor (usb_dev,
|
|
|
|
+ g_usb_device_get_serial_number_index (usb_dev),
|
|
|
|
+ &error);
|
|
|
|
+
|
|
|
|
+ if (error)
|
|
|
|
+ {
|
|
|
|
+ fp_dbg ("%s g_usb_device_get_string_descriptor failed %s", G_STRFUNC, error->message);
|
|
|
|
+ g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)),
|
|
|
|
+ 0, 0, NULL);
|
|
|
|
+ g_usb_device_close (usb_dev, NULL);
|
|
|
|
+ fpi_device_probe_complete (device, NULL, NULL, error);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (fpi_device_get_driver_data (device) & EGISMOC_DRIVER_MAX_ENROLL_STAGES_20)
|
|
|
|
+ self->max_enroll_stages = 20;
|
|
|
|
+ else
|
|
|
|
+ self->max_enroll_stages = EGISMOC_MAX_ENROLL_STAGES_DEFAULT;
|
|
|
|
+
|
|
|
|
+ fpi_device_set_nr_enroll_stages (device, self->max_enroll_stages);
|
|
|
|
+
|
|
|
|
+ g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)), 0, 0, NULL);
|
|
|
|
+ g_usb_device_close (usb_dev, NULL);
|
|
|
|
+
|
|
|
|
+ fpi_device_probe_complete (device, serial, NULL, error);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
static void
|
|
|
|
egismoc_open (FpDevice *device)
|
|
|
|
{
|
|
|
|
@@ -1540,10 +1611,11 @@ fpi_device_egismoc_class_init (FpiDeviceEgisMocClass *klass)
|
|
|
|
dev_class->type = FP_DEVICE_TYPE_USB;
|
|
|
|
dev_class->scan_type = FP_SCAN_TYPE_PRESS;
|
|
|
|
dev_class->id_table = egismoc_id_table;
|
|
|
|
- dev_class->nr_enroll_stages = EGISMOC_ENROLL_TIMES;
|
|
|
|
+ dev_class->nr_enroll_stages = EGISMOC_MAX_ENROLL_STAGES_DEFAULT;
|
|
|
|
/* device should be "always off" unless being used */
|
|
|
|
dev_class->temp_hot_seconds = 0;
|
|
|
|
|
|
|
|
+ dev_class->probe = egismoc_probe;
|
|
|
|
dev_class->open = egismoc_open;
|
|
|
|
dev_class->cancel = egismoc_cancel;
|
|
|
|
dev_class->suspend = egismoc_suspend;
|
|
|
|
diff --git a/libfprint/drivers/egismoc/egismoc.h b/libfprint/drivers/egismoc/egismoc.h
|
|
|
|
index f027ea23..ef31d2cd 100644
|
|
|
|
--- a/libfprint/drivers/egismoc/egismoc.h
|
|
|
|
+++ b/libfprint/drivers/egismoc/egismoc.h
|
|
|
|
@@ -36,6 +36,7 @@ G_DECLARE_FINAL_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FPI, DEVICE_EGISMOC,
|
|
|
|
|
|
|
|
#define EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 (1 << 0)
|
|
|
|
#define EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 (1 << 1)
|
|
|
|
+#define EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 (1 << 2)
|
|
|
|
|
|
|
|
#define EGISMOC_EP_CMD_OUT (0x02 | FPI_USB_ENDPOINT_OUT)
|
|
|
|
#define EGISMOC_EP_CMD_IN (0x81 | FPI_USB_ENDPOINT_IN)
|
|
|
|
@@ -49,7 +50,7 @@ G_DECLARE_FINAL_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FPI, DEVICE_EGISMOC,
|
|
|
|
#define EGISMOC_USB_IN_RECV_LENGTH 4096
|
|
|
|
#define EGISMOC_USB_INTERRUPT_IN_RECV_LENGTH 64
|
|
|
|
|
|
|
|
-#define EGISMOC_ENROLL_TIMES 10
|
|
|
|
+#define EGISMOC_MAX_ENROLL_STAGES_DEFAULT 10
|
|
|
|
#define EGISMOC_MAX_ENROLL_NUM 10
|
|
|
|
#define EGISMOC_FINGERPRINT_DATA_SIZE 32
|
|
|
|
#define EGISMOC_LIST_RESPONSE_PREFIX_SIZE 14
|
|
|
|
@@ -100,11 +101,11 @@ static guchar cmd_read_capture[] = {0x00, 0x00, 0x00, 0x07, 0x50, 0x16, 0x02, 0x
|
|
|
|
static gsize cmd_read_capture_len = sizeof (cmd_read_capture) / sizeof (cmd_read_capture[0]);
|
|
|
|
static guchar rsp_read_success_prefix[] = {0x00, 0x00, 0x00, 0x04};
|
|
|
|
static gsize rsp_read_success_prefix_len = sizeof (rsp_read_success_prefix) / sizeof (rsp_read_success_prefix[0]);
|
|
|
|
-static guchar rsp_read_success_suffix[] = {0x0a, 0x90, 0x00};
|
|
|
|
+static guchar rsp_read_success_suffix[] = {0x90, 0x00};
|
|
|
|
static gsize rsp_read_success_suffix_len = sizeof (rsp_read_success_suffix) / sizeof (rsp_read_success_suffix[0]);
|
|
|
|
static guchar rsp_read_offcenter_prefix[] = {0x00, 0x00, 0x00, 0x04};
|
|
|
|
static gsize rsp_read_offcenter_prefix_len = sizeof (rsp_read_offcenter_prefix) / sizeof (rsp_read_offcenter_prefix[0]);
|
|
|
|
-static guchar rsp_read_offcenter_suffix[] = {0x0a, 0x64, 0x91};
|
|
|
|
+static guchar rsp_read_offcenter_suffix[] = {0x64, 0x91};
|
|
|
|
static gsize rsp_read_offcenter_suffix_len = sizeof (rsp_read_offcenter_suffix) / sizeof (rsp_read_offcenter_suffix[0]);
|
|
|
|
static guchar rsp_read_dirty_prefix[] = {0x00, 0x00, 0x00, 0x02, 0x64};
|
|
|
|
static gsize rsp_read_dirty_prefix_len = sizeof (rsp_read_dirty_prefix) / sizeof (rsp_read_dirty_prefix[0]);
|
|
|
|
diff --git a/tests/egismoc-0587/custom.pcapng b/tests/egismoc-0587/custom.pcapng
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000000000000000000000000000000000000..c721929c2e46976dceaf808a77f9e30df486a586
|
|
|
|
GIT binary patch
|
|
|
|
literal 92988
|
|
|
|
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
|
|
|
|
|
|
|
|
literal 0
|
|
|
|
HcmV?d00001
|
|
|
|
|
|
|
|
diff --git a/tests/egismoc-0587/custom.py b/tests/egismoc-0587/custom.py
|
|
|
|
new file mode 100755
|
|
|
|
index 00000000..3a662380
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/tests/egismoc-0587/custom.py
|
|
|
|
@@ -0,0 +1,156 @@
|
|
|
|
+#!/usr/bin/python3
|
|
|
|
+
|
|
|
|
+import traceback
|
|
|
|
+import sys
|
|
|
|
+import time
|
|
|
|
+import gi
|
|
|
|
+
|
|
|
|
+gi.require_version('FPrint', '2.0')
|
|
|
|
+from gi.repository import FPrint, GLib
|
|
|
|
+
|
|
|
|
+# Exit with error on any exception, included those happening in async callbacks
|
|
|
|
+sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1))
|
|
|
|
+
|
|
|
|
+ctx = GLib.main_context_default()
|
|
|
|
+
|
|
|
|
+c = FPrint.Context()
|
|
|
|
+c.enumerate()
|
|
|
|
+devices = c.get_devices()
|
|
|
|
+
|
|
|
|
+d = devices[0]
|
|
|
|
+del devices
|
|
|
|
+
|
|
|
|
+d.open_sync()
|
|
|
|
+
|
|
|
|
+assert d.get_driver() == "egismoc"
|
|
|
|
+assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.VERIFY)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.STORAGE)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
|
|
|
+
|
|
|
|
+def enroll_progress(*args):
|
|
|
|
+ print("finger status: ", d.get_finger_status())
|
|
|
|
+ print('enroll progress: ' + str(args))
|
|
|
|
+
|
|
|
|
+def identify_done(dev, res):
|
|
|
|
+ global identified
|
|
|
|
+ identified = True
|
|
|
|
+ identify_match, identify_print = dev.identify_finish(res)
|
|
|
|
+ print('indentification_done: ', identify_match, identify_print)
|
|
|
|
+ assert identify_match.equal(identify_print)
|
|
|
|
+
|
|
|
|
+# Beginning with list and clear assumes you begin with >0 prints enrolled before capturing
|
|
|
|
+
|
|
|
|
+print("listing - device should have prints")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) > 0
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print("clear device storage")
|
|
|
|
+d.clear_storage_sync()
|
|
|
|
+print("clear done")
|
|
|
|
+
|
|
|
|
+print("listing - device should be empty")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 0
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print("enrolling")
|
|
|
|
+template = FPrint.Print.new(d)
|
|
|
|
+template.set_finger(FPrint.Finger.LEFT_INDEX)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+p1 = d.enroll_sync(template, None, enroll_progress, None)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+print("enroll done")
|
|
|
|
+del template
|
|
|
|
+
|
|
|
|
+print("listing - device should have 1 print")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 1
|
|
|
|
+assert stored[0].equal(p1)
|
|
|
|
+
|
|
|
|
+print("verifying")
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+verify_res, verify_print = d.verify_sync(p1)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+print("verify done")
|
|
|
|
+assert verify_res == True
|
|
|
|
+
|
|
|
|
+identified = False
|
|
|
|
+deserialized_prints = []
|
|
|
|
+for p in stored:
|
|
|
|
+ deserialized_prints.append(FPrint.Print.deserialize(p.serialize()))
|
|
|
|
+ assert deserialized_prints[-1].equal(p)
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print('async identifying')
|
|
|
|
+d.identify(deserialized_prints, callback=identify_done)
|
|
|
|
+del deserialized_prints
|
|
|
|
+
|
|
|
|
+while not identified:
|
|
|
|
+ ctx.iteration(True)
|
|
|
|
+
|
|
|
|
+print("try to enroll duplicate")
|
|
|
|
+template = FPrint.Print.new(d)
|
|
|
|
+template.set_finger(FPrint.Finger.RIGHT_INDEX)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+try:
|
|
|
|
+ d.enroll_sync(template, None, enroll_progress, None)
|
|
|
|
+except GLib.Error as error:
|
|
|
|
+ assert error.matches(FPrint.DeviceError.quark(),
|
|
|
|
+ FPrint.DeviceError.DATA_DUPLICATE)
|
|
|
|
+except Exception as exc:
|
|
|
|
+ raise
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+print("duplicate enroll attempt done")
|
|
|
|
+
|
|
|
|
+print("listing - device should still only have 1 print")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 1
|
|
|
|
+assert stored[0].equal(p1)
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print("enroll new finger")
|
|
|
|
+template = FPrint.Print.new(d)
|
|
|
|
+template.set_finger(FPrint.Finger.RIGHT_INDEX)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+p2 = d.enroll_sync(template, None, enroll_progress, None)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+print("enroll new finger done")
|
|
|
|
+del template
|
|
|
|
+
|
|
|
|
+print("listing - device should have 2 prints")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 2
|
|
|
|
+assert (stored[0].equal(p1) and stored[1].equal(p2)) or (stored[0].equal(p2) and stored[1].equal(p1))
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print("deleting first print")
|
|
|
|
+d.delete_print_sync(p1)
|
|
|
|
+print("delete done")
|
|
|
|
+del p1
|
|
|
|
+
|
|
|
|
+print("listing - device should only have second print")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 1
|
|
|
|
+assert stored[0].equal(p2)
|
|
|
|
+del stored
|
|
|
|
+del p2
|
|
|
|
+
|
|
|
|
+print("clear device storage")
|
|
|
|
+d.clear_storage_sync()
|
|
|
|
+print("clear done")
|
|
|
|
+
|
|
|
|
+print("listing - device should be empty")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 0
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+d.close_sync()
|
|
|
|
+
|
|
|
|
+del d
|
|
|
|
+del c
|
|
|
|
diff --git a/tests/egismoc-0587/device b/tests/egismoc-0587/device
|
|
|
|
new file mode 100644
|
|
|
|
index 00000000..91744df1
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/tests/egismoc-0587/device
|
|
|
|
@@ -0,0 +1,270 @@
|
|
|
|
+P: /devices/pci0000:00/0000:00:14.0/usb3/3-5
|
|
|
|
+N: bus/usb/003/009=12010002FF0000407A1C870567640102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005
|
|
|
|
+E: BUSNUM=003
|
|
|
|
+E: DEVNAME=/dev/bus/usb/003/009
|
|
|
|
+E: DEVNUM=009
|
|
|
|
+E: DEVTYPE=usb_device
|
|
|
|
+E: DRIVER=usb
|
|
|
|
+E: ID_AUTOSUSPEND=1
|
|
|
|
+E: ID_BUS=usb
|
|
|
|
+E: ID_MODEL=ETU905A88-E
|
|
|
|
+E: ID_MODEL_ENC=ETU905A88-E
|
|
|
|
+E: ID_MODEL_ID=0587
|
|
|
|
+E: ID_PATH=pci-0000:00:14.0-usb-0:5
|
|
|
|
+E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_5
|
|
|
|
+E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:5
|
|
|
|
+E: ID_PERSIST=0
|
|
|
|
+E: ID_REVISION=6467
|
|
|
|
+E: ID_SERIAL=EGIS_ETU905A88-E_198427PCU834
|
|
|
|
+E: ID_SERIAL_SHORT=198427PCU834
|
|
|
|
+E: ID_USB_INTERFACES=:ff0000:
|
|
|
|
+E: ID_USB_MODEL=ETU905A88-E
|
|
|
|
+E: ID_USB_MODEL_ENC=ETU905A88-E
|
|
|
|
+E: ID_USB_MODEL_ID=0587
|
|
|
|
+E: ID_USB_REVISION=6467
|
|
|
|
+E: ID_USB_SERIAL=EGIS_ETU905A88-E_198427PCU834
|
|
|
|
+E: ID_USB_SERIAL_SHORT=198427PCU834
|
|
|
|
+E: ID_USB_VENDOR=EGIS
|
|
|
|
+E: ID_USB_VENDOR_ENC=EGIS
|
|
|
|
+E: ID_USB_VENDOR_ID=1c7a
|
|
|
|
+E: ID_VENDOR=EGIS
|
|
|
|
+E: ID_VENDOR_ENC=EGIS
|
|
|
|
+E: ID_VENDOR_FROM_DATABASE=LighTuning Technology Inc.
|
|
|
|
+E: ID_VENDOR_ID=1c7a
|
|
|
|
+E: MAJOR=189
|
|
|
|
+E: MINOR=264
|
|
|
|
+E: PRODUCT=1c7a/587/6467
|
|
|
|
+E: SUBSYSTEM=usb
|
|
|
|
+E: TYPE=255/0/0
|
|
|
|
+A: authorized=1\n
|
|
|
|
+A: avoid_reset_quirk=0\n
|
|
|
|
+A: bConfigurationValue=1\n
|
|
|
|
+A: bDeviceClass=ff\n
|
|
|
|
+A: bDeviceProtocol=00\n
|
|
|
|
+A: bDeviceSubClass=00\n
|
|
|
|
+A: bMaxPacketSize0=64\n
|
|
|
|
+A: bMaxPower=100mA\n
|
|
|
|
+A: bNumConfigurations=1\n
|
|
|
|
+A: bNumInterfaces= 1\n
|
|
|
|
+A: bcdDevice=6467\n
|
|
|
|
+A: bmAttributes=a0\n
|
|
|
|
+A: busnum=3\n
|
|
|
|
+A: configuration=
|
|
|
|
+H: descriptors=12010002FF0000407A1C870567640102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005
|
|
|
|
+A: dev=189:264\n
|
|
|
|
+A: devnum=9\n
|
|
|
|
+A: devpath=5\n
|
|
|
|
+L: driver=../../../../../bus/usb/drivers/usb
|
|
|
|
+L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f/device:54
|
|
|
|
+A: idProduct=0587\n
|
|
|
|
+A: idVendor=1c7a\n
|
|
|
|
+A: ltm_capable=no\n
|
|
|
|
+A: manufacturer=EGIS\n
|
|
|
|
+A: maxchild=0\n
|
|
|
|
+A: physical_location/dock=no\n
|
|
|
|
+A: physical_location/horizontal_position=left\n
|
|
|
|
+A: physical_location/lid=no\n
|
|
|
|
+A: physical_location/panel=top\n
|
|
|
|
+A: physical_location/vertical_position=upper\n
|
|
|
|
+L: port=../3-0:1.0/usb3-port5
|
|
|
|
+A: power/active_duration=58096\n
|
|
|
|
+A: power/async=enabled\n
|
|
|
|
+A: power/autosuspend=2\n
|
|
|
|
+A: power/autosuspend_delay_ms=2000\n
|
|
|
|
+A: power/connected_duration=183928\n
|
|
|
|
+A: power/control=auto\n
|
|
|
|
+A: power/level=auto\n
|
|
|
|
+A: power/persist=0\n
|
|
|
|
+A: power/runtime_active_kids=0\n
|
|
|
|
+A: power/runtime_active_time=58510\n
|
|
|
|
+A: power/runtime_enabled=enabled\n
|
|
|
|
+A: power/runtime_status=active\n
|
|
|
|
+A: power/runtime_suspended_time=125136\n
|
|
|
|
+A: power/runtime_usage=0\n
|
|
|
|
+A: power/wakeup=disabled\n
|
|
|
|
+A: power/wakeup_abort_count=\n
|
|
|
|
+A: power/wakeup_active=\n
|
|
|
|
+A: power/wakeup_active_count=\n
|
|
|
|
+A: power/wakeup_count=\n
|
|
|
|
+A: power/wakeup_expire_count=\n
|
|
|
|
+A: power/wakeup_last_time_ms=\n
|
|
|
|
+A: power/wakeup_max_time_ms=\n
|
|
|
|
+A: power/wakeup_total_time_ms=\n
|
|
|
|
+A: product=ETU905A88-E\n
|
|
|
|
+A: quirks=0x0\n
|
|
|
|
+A: removable=fixed\n
|
|
|
|
+A: rx_lanes=1\n
|
|
|
|
+A: serial=198427PCU834\n
|
|
|
|
+A: speed=480\n
|
|
|
|
+A: tx_lanes=1\n
|
|
|
|
+A: urbnum=547\n
|
|
|
|
+A: version= 2.00\n
|
|
|
|
+
|
|
|
|
+P: /devices/pci0000:00/0000:00:14.0/usb3
|
|
|
|
+N: bus/usb/003/001=12010002090001406B1D020006060302010109021900010100E0000904000001090000000705810304000C
|
|
|
|
+E: BUSNUM=003
|
|
|
|
+E: CURRENT_TAGS=:seat:
|
|
|
|
+E: DEVNAME=/dev/bus/usb/003/001
|
|
|
|
+E: DEVNUM=001
|
|
|
|
+E: DEVTYPE=usb_device
|
|
|
|
+E: DRIVER=usb
|
|
|
|
+E: ID_AUTOSUSPEND=1
|
|
|
|
+E: ID_BUS=usb
|
|
|
|
+E: ID_FOR_SEAT=usb-pci-0000_00_14_0
|
|
|
|
+E: ID_MODEL=xHCI_Host_Controller
|
|
|
|
+E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
|
|
|
+E: ID_MODEL_FROM_DATABASE=2.0 root hub
|
|
|
|
+E: ID_MODEL_ID=0002
|
|
|
|
+E: ID_PATH=pci-0000:00:14.0
|
|
|
|
+E: ID_PATH_TAG=pci-0000_00_14_0
|
|
|
|
+E: ID_REVISION=0606
|
|
|
|
+E: ID_SERIAL=Linux_6.6.0-14-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
|
|
|
+E: ID_SERIAL_SHORT=0000:00:14.0
|
|
|
|
+E: ID_USB_INTERFACES=:090000:
|
|
|
|
+E: ID_USB_MODEL=xHCI_Host_Controller
|
|
|
|
+E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller
|
|
|
|
+E: ID_USB_MODEL_ID=0002
|
|
|
|
+E: ID_USB_REVISION=0606
|
|
|
|
+E: ID_USB_SERIAL=Linux_6.6.0-14-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
|
|
|
+E: ID_USB_SERIAL_SHORT=0000:00:14.0
|
|
|
|
+E: ID_USB_VENDOR=Linux_6.6.0-14-generic_xhci-hcd
|
|
|
|
+E: ID_USB_VENDOR_ENC=Linux\x206.6.0-14-generic\x20xhci-hcd
|
|
|
|
+E: ID_USB_VENDOR_ID=1d6b
|
|
|
|
+E: ID_VENDOR=Linux_6.6.0-14-generic_xhci-hcd
|
|
|
|
+E: ID_VENDOR_ENC=Linux\x206.6.0-14-generic\x20xhci-hcd
|
|
|
|
+E: ID_VENDOR_FROM_DATABASE=Linux Foundation
|
|
|
|
+E: ID_VENDOR_ID=1d6b
|
|
|
|
+E: MAJOR=189
|
|
|
|
+E: MINOR=256
|
|
|
|
+E: PRODUCT=1d6b/2/606
|
|
|
|
+E: SUBSYSTEM=usb
|
|
|
|
+E: TAGS=:seat:
|
|
|
|
+E: TYPE=9/0/1
|
|
|
|
+A: authorized=1\n
|
|
|
|
+A: authorized_default=1\n
|
|
|
|
+A: avoid_reset_quirk=0\n
|
|
|
|
+A: bConfigurationValue=1\n
|
|
|
|
+A: bDeviceClass=09\n
|
|
|
|
+A: bDeviceProtocol=01\n
|
|
|
|
+A: bDeviceSubClass=00\n
|
|
|
|
+A: bMaxPacketSize0=64\n
|
|
|
|
+A: bMaxPower=0mA\n
|
|
|
|
+A: bNumConfigurations=1\n
|
|
|
|
+A: bNumInterfaces= 1\n
|
|
|
|
+A: bcdDevice=0606\n
|
|
|
|
+A: bmAttributes=e0\n
|
|
|
|
+A: busnum=3\n
|
|
|
|
+A: configuration=
|
|
|
|
+H: descriptors=12010002090001406B1D020006060302010109021900010100E0000904000001090000000705810304000C
|
|
|
|
+A: dev=189:256\n
|
|
|
|
+A: devnum=1\n
|
|
|
|
+A: devpath=0\n
|
|
|
|
+L: driver=../../../../bus/usb/drivers/usb
|
|
|
|
+L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f
|
|
|
|
+A: idProduct=0002\n
|
|
|
|
+A: idVendor=1d6b\n
|
|
|
|
+A: interface_authorized_default=1\n
|
|
|
|
+A: ltm_capable=no\n
|
|
|
|
+A: manufacturer=Linux 6.6.0-14-generic xhci-hcd\n
|
|
|
|
+A: maxchild=12\n
|
|
|
|
+A: power/active_duration=5145268\n
|
|
|
|
+A: power/async=enabled\n
|
|
|
|
+A: power/autosuspend=0\n
|
|
|
|
+A: power/autosuspend_delay_ms=0\n
|
|
|
|
+A: power/connected_duration=5191200\n
|
|
|
|
+A: power/control=auto\n
|
|
|
|
+A: power/level=auto\n
|
|
|
|
+A: power/runtime_active_kids=2\n
|
|
|
|
+A: power/runtime_active_time=5145262\n
|
|
|
|
+A: power/runtime_enabled=enabled\n
|
|
|
|
+A: power/runtime_status=active\n
|
|
|
|
+A: power/runtime_suspended_time=45937\n
|
|
|
|
+A: power/runtime_usage=0\n
|
|
|
|
+A: power/wakeup=disabled\n
|
|
|
|
+A: power/wakeup_abort_count=\n
|
|
|
|
+A: power/wakeup_active=\n
|
|
|
|
+A: power/wakeup_active_count=\n
|
|
|
|
+A: power/wakeup_count=\n
|
|
|
|
+A: power/wakeup_expire_count=\n
|
|
|
|
+A: power/wakeup_last_time_ms=\n
|
|
|
|
+A: power/wakeup_max_time_ms=\n
|
|
|
|
+A: power/wakeup_total_time_ms=\n
|
|
|
|
+A: product=xHCI Host Controller\n
|
|
|
|
+A: quirks=0x0\n
|
|
|
|
+A: removable=unknown\n
|
|
|
|
+A: rx_lanes=1\n
|
|
|
|
+A: serial=0000:00:14.0\n
|
|
|
|
+A: speed=480\n
|
|
|
|
+A: tx_lanes=1\n
|
|
|
|
+A: urbnum=637\n
|
|
|
|
+A: version= 2.00\n
|
|
|
|
+
|
|
|
|
+P: /devices/pci0000:00/0000:00:14.0
|
|
|
|
+E: DRIVER=xhci_hcd
|
|
|
|
+E: ID_AUTOSUSPEND=1
|
|
|
|
+E: ID_MODEL_FROM_DATABASE=Alder Lake PCH USB 3.2 xHCI Host Controller
|
|
|
|
+E: ID_PATH=pci-0000:00:14.0
|
|
|
|
+E: ID_PATH_TAG=pci-0000_00_14_0
|
|
|
|
+E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
|
|
|
|
+E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
|
|
|
|
+E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
|
|
|
|
+E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
|
|
|
+E: MODALIAS=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30
|
|
|
|
+E: PCI_CLASS=C0330
|
|
|
|
+E: PCI_ID=8086:51ED
|
|
|
|
+E: PCI_SLOT_NAME=0000:00:14.0
|
|
|
|
+E: PCI_SUBSYS_ID=1043:201F
|
|
|
|
+E: SUBSYSTEM=pci
|
|
|
|
+A: ari_enabled=0\n
|
|
|
|
+A: broken_parity_status=0\n
|
|
|
|
+A: class=0x0c0330\n
|
|
|
|
+H: config=8680ED51060490020130030C000080000400262F62000000000000000000000000000000000000000000000043101F20000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C1080000000000000000000000059087001805E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F110112000000
|
|
|
|
+A: consistent_dma_mask_bits=64\n
|
|
|
|
+A: d3cold_allowed=1\n
|
|
|
|
+A: dbc=disabled\n
|
|
|
|
+A: dbc_bInterfaceProtocol=01\n
|
|
|
|
+A: dbc_bcdDevice=0010\n
|
|
|
|
+A: dbc_idProduct=0010\n
|
|
|
|
+A: dbc_idVendor=1d6b\n
|
|
|
|
+A: device=0x51ed\n
|
|
|
|
+A: dma_mask_bits=64\n
|
|
|
|
+L: driver=../../../bus/pci/drivers/xhci_hcd
|
|
|
|
+A: driver_override=(null)\n
|
|
|
|
+A: enable=1\n
|
|
|
|
+L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e
|
|
|
|
+A: index=10\n
|
|
|
|
+L: iommu=../../virtual/iommu/dmar1
|
|
|
|
+L: iommu_group=../../../kernel/iommu_groups/11
|
|
|
|
+A: irq=145\n
|
|
|
|
+A: label=Onboard - Other\n
|
|
|
|
+A: local_cpulist=0-19\n
|
|
|
|
+A: local_cpus=fffff\n
|
|
|
|
+A: modalias=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30\n
|
|
|
|
+A: msi_bus=1\n
|
|
|
|
+A: msi_irqs/145=msi\n
|
|
|
|
+A: numa_node=-1\n
|
|
|
|
+A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 1 32 128 1\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 10 11 2112 11\nxHCI ring segments 38 38 4096 38\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 6 32 128 1\nbuffer-32 0 0 32 0\n
|
|
|
|
+A: power/async=enabled\n
|
|
|
|
+A: power/control=auto\n
|
|
|
|
+A: power/runtime_active_kids=2\n
|
|
|
|
+A: power/runtime_active_time=5192072\n
|
|
|
|
+A: power/runtime_enabled=enabled\n
|
|
|
|
+A: power/runtime_status=active\n
|
|
|
|
+A: power/runtime_suspended_time=0\n
|
|
|
|
+A: power/runtime_usage=0\n
|
|
|
|
+A: power/wakeup=enabled\n
|
|
|
|
+A: power/wakeup_abort_count=0\n
|
|
|
|
+A: power/wakeup_active=0\n
|
|
|
|
+A: power/wakeup_active_count=0\n
|
|
|
|
+A: power/wakeup_count=0\n
|
|
|
|
+A: power/wakeup_expire_count=0\n
|
|
|
|
+A: power/wakeup_last_time_ms=0\n
|
|
|
|
+A: power/wakeup_max_time_ms=0\n
|
|
|
|
+A: power/wakeup_total_time_ms=0\n
|
|
|
|
+A: power_state=D0\n
|
|
|
|
+A: resource=0x000000622f260000 0x000000622f26ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n
|
|
|
|
+A: revision=0x01\n
|
|
|
|
+A: subsystem_device=0x201f\n
|
|
|
|
+A: subsystem_vendor=0x1043\n
|
|
|
|
+A: vendor=0x8086\n
|
|
|
|
+
|
|
|
|
diff --git a/tests/meson.build b/tests/meson.build
|
|
|
|
index dc3b70e2..7a7afc03 100644
|
|
|
|
--- a/tests/meson.build
|
|
|
|
+++ b/tests/meson.build
|
|
|
|
@@ -53,6 +53,7 @@ drivers_tests = [
|
|
|
|
'egis0570',
|
|
|
|
'egismoc',
|
|
|
|
'egismoc-05a1',
|
|
|
|
+ 'egismoc-0587',
|
|
|
|
'fpcmoc',
|
|
|
|
'realtek',
|
|
|
|
'focaltech_moc',
|
|
|
|
--
|
|
|
|
GitLab
|
|
|
|
|
2024-07-28 13:25:59 +02:00
|
|
|
|
|
|
|
From 4c50d9b6a0cb45681e1cd08411df477772f6821c Mon Sep 17 00:00:00 2001
|
|
|
|
From: Tamer Hassan <thameruddin@gmail.com>
|
|
|
|
Date: Wed, 17 Apr 2024 16:09:36 +0400
|
|
|
|
Subject: [PATCH 2/2] egismoc: add 0586 support
|
|
|
|
|
|
|
|
---
|
|
|
|
data/autosuspend.hwdb | 1 +
|
|
|
|
libfprint/drivers/egismoc/egismoc.c | 6 +-
|
|
|
|
tests/egismoc-0586/custom.pcapng | Bin 0 -> 92980 bytes
|
|
|
|
tests/egismoc-0586/custom.py | 156 +++++++++++++++++
|
|
|
|
tests/egismoc-0586/device | 255 ++++++++++++++++++++++++++++
|
|
|
|
tests/meson.build | 1 +
|
|
|
|
6 files changed, 414 insertions(+), 5 deletions(-)
|
|
|
|
create mode 100644 tests/egismoc-0586/custom.pcapng
|
|
|
|
create mode 100755 tests/egismoc-0586/custom.py
|
|
|
|
create mode 100644 tests/egismoc-0586/device
|
|
|
|
|
|
|
|
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
|
|
|
|
index f9842ae4..0e4c30ef 100644
|
|
|
|
--- a/data/autosuspend.hwdb
|
|
|
|
+++ b/data/autosuspend.hwdb
|
|
|
|
@@ -79,6 +79,7 @@ usb:v1C7Ap0571*
|
|
|
|
|
|
|
|
# Supported by libfprint driver egismoc
|
|
|
|
usb:v1C7Ap0582*
|
|
|
|
+usb:v1C7Ap0586*
|
|
|
|
usb:v1C7Ap0587*
|
|
|
|
usb:v1C7Ap05A1*
|
|
|
|
ID_AUTOSUSPEND=1
|
|
|
|
diff --git a/libfprint/drivers/egismoc/egismoc.c b/libfprint/drivers/egismoc/egismoc.c
|
|
|
|
index 97997a2d..de5ec765 100644
|
|
|
|
--- a/libfprint/drivers/egismoc/egismoc.c
|
|
|
|
+++ b/libfprint/drivers/egismoc/egismoc.c
|
|
|
|
@@ -51,11 +51,7 @@ G_DEFINE_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FP_TYPE_DEVICE);
|
|
|
|
|
|
|
|
static const FpIdEntry egismoc_id_table[] = {
|
|
|
|
{ .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 },
|
|
|
|
- /*
|
|
|
|
- * 0x0586 is supported in the same way as 0587 per user report, but missing submission of device file to be included
|
|
|
|
- *
|
|
|
|
- * { .vid = 0x1c7a, .pid = 0x0586, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
|
|
|
|
- */
|
|
|
|
+ { .vid = 0x1c7a, .pid = 0x0586, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
|
|
|
|
{ .vid = 0x1c7a, .pid = 0x0587, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
|
|
|
|
{ .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 },
|
|
|
|
{ .vid = 0, .pid = 0, .driver_data = 0 }
|
|
|
|
diff --git a/tests/egismoc-0586/custom.pcapng b/tests/egismoc-0586/custom.pcapng
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000000000000000000000000000000000000..f43dc6f4d1c06801e083c37eaab5e45729444ebe
|
|
|
|
GIT binary patch
|
|
|
|
literal 92980
|
|
|
|
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
|
|
|
|
|
|
|
|
literal 0
|
|
|
|
HcmV?d00001
|
|
|
|
|
|
|
|
diff --git a/tests/egismoc-0586/custom.py b/tests/egismoc-0586/custom.py
|
|
|
|
new file mode 100755
|
|
|
|
index 00000000..3a662380
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/tests/egismoc-0586/custom.py
|
|
|
|
@@ -0,0 +1,156 @@
|
|
|
|
+#!/usr/bin/python3
|
|
|
|
+
|
|
|
|
+import traceback
|
|
|
|
+import sys
|
|
|
|
+import time
|
|
|
|
+import gi
|
|
|
|
+
|
|
|
|
+gi.require_version('FPrint', '2.0')
|
|
|
|
+from gi.repository import FPrint, GLib
|
|
|
|
+
|
|
|
|
+# Exit with error on any exception, included those happening in async callbacks
|
|
|
|
+sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1))
|
|
|
|
+
|
|
|
|
+ctx = GLib.main_context_default()
|
|
|
|
+
|
|
|
|
+c = FPrint.Context()
|
|
|
|
+c.enumerate()
|
|
|
|
+devices = c.get_devices()
|
|
|
|
+
|
|
|
|
+d = devices[0]
|
|
|
|
+del devices
|
|
|
|
+
|
|
|
|
+d.open_sync()
|
|
|
|
+
|
|
|
|
+assert d.get_driver() == "egismoc"
|
|
|
|
+assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.VERIFY)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.STORAGE)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
|
|
|
+assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
|
|
|
+
|
|
|
|
+def enroll_progress(*args):
|
|
|
|
+ print("finger status: ", d.get_finger_status())
|
|
|
|
+ print('enroll progress: ' + str(args))
|
|
|
|
+
|
|
|
|
+def identify_done(dev, res):
|
|
|
|
+ global identified
|
|
|
|
+ identified = True
|
|
|
|
+ identify_match, identify_print = dev.identify_finish(res)
|
|
|
|
+ print('indentification_done: ', identify_match, identify_print)
|
|
|
|
+ assert identify_match.equal(identify_print)
|
|
|
|
+
|
|
|
|
+# Beginning with list and clear assumes you begin with >0 prints enrolled before capturing
|
|
|
|
+
|
|
|
|
+print("listing - device should have prints")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) > 0
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print("clear device storage")
|
|
|
|
+d.clear_storage_sync()
|
|
|
|
+print("clear done")
|
|
|
|
+
|
|
|
|
+print("listing - device should be empty")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 0
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print("enrolling")
|
|
|
|
+template = FPrint.Print.new(d)
|
|
|
|
+template.set_finger(FPrint.Finger.LEFT_INDEX)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+p1 = d.enroll_sync(template, None, enroll_progress, None)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+print("enroll done")
|
|
|
|
+del template
|
|
|
|
+
|
|
|
|
+print("listing - device should have 1 print")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 1
|
|
|
|
+assert stored[0].equal(p1)
|
|
|
|
+
|
|
|
|
+print("verifying")
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+verify_res, verify_print = d.verify_sync(p1)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+print("verify done")
|
|
|
|
+assert verify_res == True
|
|
|
|
+
|
|
|
|
+identified = False
|
|
|
|
+deserialized_prints = []
|
|
|
|
+for p in stored:
|
|
|
|
+ deserialized_prints.append(FPrint.Print.deserialize(p.serialize()))
|
|
|
|
+ assert deserialized_prints[-1].equal(p)
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print('async identifying')
|
|
|
|
+d.identify(deserialized_prints, callback=identify_done)
|
|
|
|
+del deserialized_prints
|
|
|
|
+
|
|
|
|
+while not identified:
|
|
|
|
+ ctx.iteration(True)
|
|
|
|
+
|
|
|
|
+print("try to enroll duplicate")
|
|
|
|
+template = FPrint.Print.new(d)
|
|
|
|
+template.set_finger(FPrint.Finger.RIGHT_INDEX)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+try:
|
|
|
|
+ d.enroll_sync(template, None, enroll_progress, None)
|
|
|
|
+except GLib.Error as error:
|
|
|
|
+ assert error.matches(FPrint.DeviceError.quark(),
|
|
|
|
+ FPrint.DeviceError.DATA_DUPLICATE)
|
|
|
|
+except Exception as exc:
|
|
|
|
+ raise
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+print("duplicate enroll attempt done")
|
|
|
|
+
|
|
|
|
+print("listing - device should still only have 1 print")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 1
|
|
|
|
+assert stored[0].equal(p1)
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print("enroll new finger")
|
|
|
|
+template = FPrint.Print.new(d)
|
|
|
|
+template.set_finger(FPrint.Finger.RIGHT_INDEX)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+p2 = d.enroll_sync(template, None, enroll_progress, None)
|
|
|
|
+assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
|
|
+print("enroll new finger done")
|
|
|
|
+del template
|
|
|
|
+
|
|
|
|
+print("listing - device should have 2 prints")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 2
|
|
|
|
+assert (stored[0].equal(p1) and stored[1].equal(p2)) or (stored[0].equal(p2) and stored[1].equal(p1))
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+print("deleting first print")
|
|
|
|
+d.delete_print_sync(p1)
|
|
|
|
+print("delete done")
|
|
|
|
+del p1
|
|
|
|
+
|
|
|
|
+print("listing - device should only have second print")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 1
|
|
|
|
+assert stored[0].equal(p2)
|
|
|
|
+del stored
|
|
|
|
+del p2
|
|
|
|
+
|
|
|
|
+print("clear device storage")
|
|
|
|
+d.clear_storage_sync()
|
|
|
|
+print("clear done")
|
|
|
|
+
|
|
|
|
+print("listing - device should be empty")
|
|
|
|
+stored = d.list_prints_sync()
|
|
|
|
+assert len(stored) == 0
|
|
|
|
+del stored
|
|
|
|
+
|
|
|
|
+d.close_sync()
|
|
|
|
+
|
|
|
|
+del d
|
|
|
|
+del c
|
|
|
|
diff --git a/tests/egismoc-0586/device b/tests/egismoc-0586/device
|
|
|
|
new file mode 100644
|
|
|
|
index 00000000..fb41aeea
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/tests/egismoc-0586/device
|
|
|
|
@@ -0,0 +1,255 @@
|
|
|
|
+P: /devices/pci0000:00/0000:00:14.0/usb1/1-7
|
|
|
|
+N: bus/usb/001/021=12010002FF0000407A1C860556620102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005
|
|
|
|
+E: BUSNUM=001
|
|
|
|
+E: DEVNAME=/dev/bus/usb/001/021
|
|
|
|
+E: DEVNUM=021
|
|
|
|
+E: DEVTYPE=usb_device
|
|
|
|
+E: DRIVER=usb
|
|
|
|
+E: ID_AUTOSUSPEND=1
|
|
|
|
+E: ID_BUS=usb
|
|
|
|
+E: ID_MODEL=ETU905A88-E
|
|
|
|
+E: ID_MODEL_ENC=ETU905A88-E
|
|
|
|
+E: ID_MODEL_ID=0586
|
|
|
|
+E: ID_PATH=pci-0000:00:14.0-usb-0:7
|
|
|
|
+E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_7
|
|
|
|
+E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:7
|
|
|
|
+E: ID_PERSIST=0
|
|
|
|
+E: ID_REVISION=6256
|
|
|
|
+E: ID_SERIAL=EGIS_ETU905A88-E_0A5743PCU834
|
|
|
|
+E: ID_SERIAL_SHORT=0A5743PCU834
|
|
|
|
+E: ID_USB_INTERFACES=:ff0000:
|
|
|
|
+E: ID_USB_MODEL=ETU905A88-E
|
|
|
|
+E: ID_USB_MODEL_ENC=ETU905A88-E
|
|
|
|
+E: ID_USB_MODEL_ID=0586
|
|
|
|
+E: ID_USB_REVISION=6256
|
|
|
|
+E: ID_USB_SERIAL=EGIS_ETU905A88-E_0A5743PCU834
|
|
|
|
+E: ID_USB_SERIAL_SHORT=0A5743PCU834
|
|
|
|
+E: ID_USB_VENDOR=EGIS
|
|
|
|
+E: ID_USB_VENDOR_ENC=EGIS
|
|
|
|
+E: ID_USB_VENDOR_ID=1c7a
|
|
|
|
+E: ID_VENDOR=EGIS
|
|
|
|
+E: ID_VENDOR_ENC=EGIS
|
|
|
|
+E: ID_VENDOR_FROM_DATABASE=LighTuning Technology Inc.
|
|
|
|
+E: ID_VENDOR_ID=1c7a
|
|
|
|
+E: MAJOR=189
|
|
|
|
+E: MINOR=20
|
|
|
|
+E: PRODUCT=1c7a/586/6256
|
|
|
|
+E: SUBSYSTEM=usb
|
|
|
|
+E: TYPE=255/0/0
|
|
|
|
+A: authorized=1\n
|
|
|
|
+A: avoid_reset_quirk=0\n
|
|
|
|
+A: bConfigurationValue=1\n
|
|
|
|
+A: bDeviceClass=ff\n
|
|
|
|
+A: bDeviceProtocol=00\n
|
|
|
|
+A: bDeviceSubClass=00\n
|
|
|
|
+A: bMaxPacketSize0=64\n
|
|
|
|
+A: bMaxPower=100mA\n
|
|
|
|
+A: bNumConfigurations=1\n
|
|
|
|
+A: bNumInterfaces= 1\n
|
|
|
|
+A: bcdDevice=6256\n
|
|
|
|
+A: bmAttributes=a0\n
|
|
|
|
+A: busnum=1\n
|
|
|
|
+A: configuration=
|
|
|
|
+H: descriptors=12010002FF0000407A1C860556620102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005
|
|
|
|
+A: dev=189:20\n
|
|
|
|
+A: devnum=21\n
|
|
|
|
+A: devpath=7\n
|
|
|
|
+L: driver=../../../../../bus/usb/drivers/usb
|
|
|
|
+L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f/device:56
|
|
|
|
+A: idProduct=0586\n
|
|
|
|
+A: idVendor=1c7a\n
|
|
|
|
+A: ltm_capable=no\n
|
|
|
|
+A: manufacturer=EGIS\n
|
|
|
|
+A: maxchild=0\n
|
|
|
|
+A: physical_location/dock=no\n
|
|
|
|
+A: physical_location/horizontal_position=center\n
|
|
|
|
+A: physical_location/lid=no\n
|
|
|
|
+A: physical_location/panel=front\n
|
|
|
|
+A: physical_location/vertical_position=center\n
|
|
|
|
+L: port=../1-0:1.0/usb1-port7
|
|
|
|
+A: power/active_duration=12644\n
|
|
|
|
+A: power/autosuspend=2\n
|
|
|
|
+A: power/autosuspend_delay_ms=2000\n
|
|
|
|
+A: power/connected_duration=230907\n
|
|
|
|
+A: power/control=auto\n
|
|
|
|
+A: power/level=auto\n
|
|
|
|
+A: power/persist=0\n
|
|
|
|
+A: power/runtime_active_time=12929\n
|
|
|
|
+A: power/runtime_status=active\n
|
|
|
|
+A: power/runtime_suspended_time=217715\n
|
|
|
|
+A: power/wakeup=disabled\n
|
|
|
|
+A: power/wakeup_abort_count=\n
|
|
|
|
+A: power/wakeup_active=\n
|
|
|
|
+A: power/wakeup_active_count=\n
|
|
|
|
+A: power/wakeup_count=\n
|
|
|
|
+A: power/wakeup_expire_count=\n
|
|
|
|
+A: power/wakeup_last_time_ms=\n
|
|
|
|
+A: power/wakeup_max_time_ms=\n
|
|
|
|
+A: power/wakeup_total_time_ms=\n
|
|
|
|
+A: product=ETU905A88-E\n
|
|
|
|
+A: quirks=0x0\n
|
|
|
|
+A: removable=fixed\n
|
|
|
|
+A: rx_lanes=1\n
|
|
|
|
+A: serial=0A5743PCU834\n
|
|
|
|
+A: speed=480\n
|
|
|
|
+A: tx_lanes=1\n
|
|
|
|
+A: urbnum=18\n
|
|
|
|
+A: version= 2.00\n
|
|
|
|
+
|
|
|
|
+P: /devices/pci0000:00/0000:00:14.0/usb1
|
|
|
|
+N: bus/usb/001/001=12010002090001406B1D020008060302010109021900010100E0000904000001090000000705810304000C
|
|
|
|
+E: BUSNUM=001
|
|
|
|
+E: CURRENT_TAGS=:seat:
|
|
|
|
+E: DEVNAME=/dev/bus/usb/001/001
|
|
|
|
+E: DEVNUM=001
|
|
|
|
+E: DEVTYPE=usb_device
|
|
|
|
+E: DRIVER=usb
|
|
|
|
+E: ID_AUTOSUSPEND=1
|
|
|
|
+E: ID_BUS=usb
|
|
|
|
+E: ID_FOR_SEAT=usb-pci-0000_00_14_0
|
|
|
|
+E: ID_MODEL=xHCI_Host_Controller
|
|
|
|
+E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
|
|
|
+E: ID_MODEL_FROM_DATABASE=2.0 root hub
|
|
|
|
+E: ID_MODEL_ID=0002
|
|
|
|
+E: ID_PATH=pci-0000:00:14.0
|
|
|
|
+E: ID_PATH_TAG=pci-0000_00_14_0
|
|
|
|
+E: ID_REVISION=0608
|
|
|
|
+E: ID_SERIAL=Linux_6.8.5-arch1-1_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
|
|
|
+E: ID_SERIAL_SHORT=0000:00:14.0
|
|
|
|
+E: ID_USB_INTERFACES=:090000:
|
|
|
|
+E: ID_USB_MODEL=xHCI_Host_Controller
|
|
|
|
+E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller
|
|
|
|
+E: ID_USB_MODEL_ID=0002
|
|
|
|
+E: ID_USB_REVISION=0608
|
|
|
|
+E: ID_USB_SERIAL=Linux_6.8.5-arch1-1_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
|
|
|
+E: ID_USB_SERIAL_SHORT=0000:00:14.0
|
|
|
|
+E: ID_USB_VENDOR=Linux_6.8.5-arch1-1_xhci-hcd
|
|
|
|
+E: ID_USB_VENDOR_ENC=Linux\x206.8.5-arch1-1\x20xhci-hcd
|
|
|
|
+E: ID_USB_VENDOR_ID=1d6b
|
|
|
|
+E: ID_VENDOR=Linux_6.8.5-arch1-1_xhci-hcd
|
|
|
|
+E: ID_VENDOR_ENC=Linux\x206.8.5-arch1-1\x20xhci-hcd
|
|
|
|
+E: ID_VENDOR_FROM_DATABASE=Linux Foundation
|
|
|
|
+E: ID_VENDOR_ID=1d6b
|
|
|
|
+E: MAJOR=189
|
|
|
|
+E: MINOR=0
|
|
|
|
+E: PRODUCT=1d6b/2/608
|
|
|
|
+E: SUBSYSTEM=usb
|
|
|
|
+E: TAGS=:seat:
|
|
|
|
+E: TYPE=9/0/1
|
|
|
|
+A: authorized=1\n
|
|
|
|
+A: authorized_default=1\n
|
|
|
|
+A: avoid_reset_quirk=0\n
|
|
|
|
+A: bConfigurationValue=1\n
|
|
|
|
+A: bDeviceClass=09\n
|
|
|
|
+A: bDeviceProtocol=01\n
|
|
|
|
+A: bDeviceSubClass=00\n
|
|
|
|
+A: bMaxPacketSize0=64\n
|
|
|
|
+A: bMaxPower=0mA\n
|
|
|
|
+A: bNumConfigurations=1\n
|
|
|
|
+A: bNumInterfaces= 1\n
|
|
|
|
+A: bcdDevice=0608\n
|
|
|
|
+A: bmAttributes=e0\n
|
|
|
|
+A: busnum=1\n
|
|
|
|
+A: configuration=
|
|
|
|
+H: descriptors=12010002090001406B1D020008060302010109021900010100E0000904000001090000000705810304000C
|
|
|
|
+A: dev=189:0\n
|
|
|
|
+A: devnum=1\n
|
|
|
|
+A: devpath=0\n
|
|
|
|
+L: driver=../../../../bus/usb/drivers/usb
|
|
|
|
+L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f
|
|
|
|
+A: idProduct=0002\n
|
|
|
|
+A: idVendor=1d6b\n
|
|
|
|
+A: interface_authorized_default=1\n
|
|
|
|
+A: ltm_capable=no\n
|
|
|
|
+A: manufacturer=Linux 6.8.5-arch1-1 xhci-hcd\n
|
|
|
|
+A: maxchild=12\n
|
|
|
|
+A: power/active_duration=73066477\n
|
|
|
|
+A: power/autosuspend=0\n
|
|
|
|
+A: power/autosuspend_delay_ms=0\n
|
|
|
|
+A: power/connected_duration=73071614\n
|
|
|
|
+A: power/control=auto\n
|
|
|
|
+A: power/level=auto\n
|
|
|
|
+A: power/runtime_active_time=73070027\n
|
|
|
|
+A: power/runtime_status=active\n
|
|
|
|
+A: power/runtime_suspended_time=0\n
|
|
|
|
+A: power/wakeup=disabled\n
|
|
|
|
+A: power/wakeup_abort_count=\n
|
|
|
|
+A: power/wakeup_active=\n
|
|
|
|
+A: power/wakeup_active_count=\n
|
|
|
|
+A: power/wakeup_count=\n
|
|
|
|
+A: power/wakeup_expire_count=\n
|
|
|
|
+A: power/wakeup_last_time_ms=\n
|
|
|
|
+A: power/wakeup_max_time_ms=\n
|
|
|
|
+A: power/wakeup_total_time_ms=\n
|
|
|
|
+A: product=xHCI Host Controller\n
|
|
|
|
+A: quirks=0x0\n
|
|
|
|
+A: removable=unknown\n
|
|
|
|
+A: rx_lanes=1\n
|
|
|
|
+A: serial=0000:00:14.0\n
|
|
|
|
+A: speed=480\n
|
|
|
|
+A: tx_lanes=1\n
|
|
|
|
+A: urbnum=1111\n
|
|
|
|
+A: version= 2.00\n
|
|
|
|
+
|
|
|
|
+P: /devices/pci0000:00/0000:00:14.0
|
|
|
|
+E: DRIVER=xhci_hcd
|
|
|
|
+E: ID_AUTOSUSPEND=1
|
|
|
|
+E: ID_MODEL_FROM_DATABASE=Alder Lake PCH USB 3.2 xHCI Host Controller
|
|
|
|
+E: ID_PATH=pci-0000:00:14.0
|
|
|
|
+E: ID_PATH_TAG=pci-0000_00_14_0
|
|
|
|
+E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
|
|
|
|
+E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
|
|
|
|
+E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
|
|
|
|
+E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
|
|
|
+E: MODALIAS=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30
|
|
|
|
+E: PCI_CLASS=C0330
|
|
|
|
+E: PCI_ID=8086:51ED
|
|
|
|
+E: PCI_SLOT_NAME=0000:00:14.0
|
|
|
|
+E: PCI_SUBSYS_ID=1043:201F
|
|
|
|
+E: SUBSYSTEM=pci
|
|
|
|
+A: ari_enabled=0\n
|
|
|
|
+A: broken_parity_status=0\n
|
|
|
|
+A: class=0x0c0330\n
|
|
|
|
+H: config=8680ED51060490020130030C000080000400220560000000000000000000000000000000000000000000000043101F20000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C10800000000000000000000000590B7001805E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F110112000000
|
|
|
|
+A: consistent_dma_mask_bits=64\n
|
|
|
|
+A: d3cold_allowed=1\n
|
|
|
|
+A: device=0x51ed\n
|
|
|
|
+A: dma_mask_bits=64\n
|
|
|
|
+L: driver=../../../bus/pci/drivers/xhci_hcd
|
|
|
|
+A: driver_override=(null)\n
|
|
|
|
+A: enable=1\n
|
|
|
|
+L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e
|
|
|
|
+A: irq=143\n
|
|
|
|
+A: local_cpulist=0-15\n
|
|
|
|
+A: local_cpus=ffff\n
|
|
|
|
+A: modalias=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30\n
|
|
|
|
+A: msi_bus=1\n
|
|
|
|
+A: msi_irqs/143=msi\n
|
|
|
|
+A: msi_irqs/144=msi\n
|
|
|
|
+A: msi_irqs/145=msi\n
|
|
|
|
+A: msi_irqs/146=msi\n
|
|
|
|
+A: msi_irqs/147=msi\n
|
|
|
|
+A: msi_irqs/148=msi\n
|
|
|
|
+A: msi_irqs/149=msi\n
|
|
|
|
+A: msi_irqs/150=msi\n
|
|
|
|
+A: numa_node=-1\n
|
|
|
|
+A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 8 9 2112 9\nxHCI ring segments 43 53 4096 53\nbuffer-2048 0 16 2048 8\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 128 32 1\n
|
|
|
|
+A: power/control=auto\n
|
|
|
|
+A: power/runtime_active_time=73070690\n
|
|
|
|
+A: power/runtime_status=active\n
|
|
|
|
+A: power/runtime_suspended_time=0\n
|
|
|
|
+A: power/wakeup=enabled\n
|
|
|
|
+A: power/wakeup_abort_count=0\n
|
|
|
|
+A: power/wakeup_active=0\n
|
|
|
|
+A: power/wakeup_active_count=0\n
|
|
|
|
+A: power/wakeup_count=0\n
|
|
|
|
+A: power/wakeup_expire_count=0\n
|
|
|
|
+A: power/wakeup_last_time_ms=0\n
|
|
|
|
+A: power/wakeup_max_time_ms=0\n
|
|
|
|
+A: power/wakeup_total_time_ms=0\n
|
|
|
|
+A: power_state=D0\n
|
|
|
|
+A: resource=0x0000006005220000 0x000000600522ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n
|
|
|
|
+A: revision=0x01\n
|
|
|
|
+A: subsystem_device=0x201f\n
|
|
|
|
+A: subsystem_vendor=0x1043\n
|
|
|
|
+A: vendor=0x8086\n
|
|
|
|
diff --git a/tests/meson.build b/tests/meson.build
|
|
|
|
index 7a7afc03..2b9691ee 100644
|
|
|
|
--- a/tests/meson.build
|
|
|
|
+++ b/tests/meson.build
|
|
|
|
@@ -53,6 +53,7 @@ drivers_tests = [
|
|
|
|
'egis0570',
|
|
|
|
'egismoc',
|
|
|
|
'egismoc-05a1',
|
|
|
|
+ 'egismoc-0586',
|
|
|
|
'egismoc-0587',
|
|
|
|
'fpcmoc',
|
|
|
|
'realtek',
|
|
|
|
--
|
|
|
|
GitLab
|
|
|
|
|