From d660bfe29d97b29c7636cbc902e477c2884bebf8 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Thu, 8 Jul 2021 18:01:39 +0200 Subject: [PATCH] Pull in some upstream libfprint fixes for goodix --- libfprint.spec | 6 +- update-goodix.patch | 1353 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1358 insertions(+), 1 deletion(-) create mode 100644 update-goodix.patch diff --git a/libfprint.spec b/libfprint.spec index 9f7cda6..c171c67 100644 --- a/libfprint.spec +++ b/libfprint.spec @@ -1,7 +1,7 @@ Name: libfprint Version: 1.90.7 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Toolkit for fingerprint scanner License: LGPLv2+ @@ -26,6 +26,7 @@ BuildRequires: gobject-introspection-devel BuildRequires: python3-cairo python3-gobject cairo-devel BuildRequires: umockdev >= 0.13.2 +Patch0000: update-goodix.patch %description libfprint offers support for consumer fingerprint reader devices. @@ -70,6 +71,9 @@ developing applications that use %{name}. %{_datadir}/gtk-doc/html/libfprint-2/ %changelog +* Thu Jul 08 2021 Benjamin Berg - 1.90.7-3 +- Pull in some upstream libfprint fixes for goodix + * Tue Jan 26 2021 Fedora Release Engineering - 1.90.7-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild diff --git a/update-goodix.patch b/update-goodix.patch new file mode 100644 index 0000000..1c6e2ce --- /dev/null +++ b/update-goodix.patch @@ -0,0 +1,1353 @@ +From 97efb6653ddba5843748365abd76917a740c2bae Mon Sep 17 00:00:00 2001 +From: fengqiangguo +Date: Wed, 16 Dec 2020 10:31:46 +0800 +Subject: [PATCH 1/6] goodixmoc: Fix some big/little endian support issues + +Goodix driver is not working fine in BigEndian architectures. This +commit fixes some of these issues. + +Related: #236 +--- + libfprint/drivers/goodixmoc/goodix.c | 2 +- + libfprint/drivers/goodixmoc/goodix_proto.c | 85 ++++++++++++++-------- + libfprint/drivers/goodixmoc/goodix_proto.h | 4 +- + 3 files changed, 58 insertions(+), 33 deletions(-) + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index af64d81..82913d7 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -127,7 +127,7 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer, + } + + gx_proto_crc32_calc (transfer->buffer, PACKAGE_HEADER_SIZE + header.len, (uint8_t *) &crc32_calc); +- if(crc32_calc != *(uint32_t *) (transfer->buffer + PACKAGE_HEADER_SIZE + header.len)) ++ if(crc32_calc != GUINT32_FROM_LE (*(uint32_t *) (transfer->buffer + PACKAGE_HEADER_SIZE + header.len))) + { + fpi_ssm_mark_failed (transfer->ssm, + fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, +diff --git a/libfprint/drivers/goodixmoc/goodix_proto.c b/libfprint/drivers/goodixmoc/goodix_proto.c +index e30d23d..962fd6e 100644 +--- a/libfprint/drivers/goodixmoc/goodix_proto.c ++++ b/libfprint/drivers/goodixmoc/goodix_proto.c +@@ -141,8 +141,11 @@ crc32_update (gf_crc32_context *ctx, const uint8_t *message, uint32_t n_bytes) + static void + crc32_final (gf_crc32_context *ctx, uint8_t *md) + { ++ uint32_t crc = 0; ++ + ctx->crc = (REFLECT_REMAINDER (ctx->crc) ^ FINAL_XOR_VALUE); +- memcpy (md, &ctx->crc, 4); ++ crc = GUINT32_TO_LE (ctx->crc); ++ memcpy (md, &crc, 4); + } + + uint8_t +@@ -184,7 +187,7 @@ init_pack_header ( + pheader->cmd1 = LOBYTE (cmd); + pheader->packagenum = packagenum; + pheader->reserved = dump_seq++; +- pheader->len = len + PACKAGE_CRC_SIZE; ++ pheader->len = GUINT16_TO_LE (len + PACKAGE_CRC_SIZE); + pheader->crc8 = gx_proto_crc8_calc ((uint8_t *) pheader, 6); + pheader->rev_crc8 = ~pheader->crc8; + } +@@ -224,14 +227,14 @@ gx_proto_parse_header ( + { + if (!buffer || !pheader) + return -1; +- if (buffer_len < PACKAGE_HEADER_SIZE) ++ if (buffer_len < PACKAGE_HEADER_SIZE + PACKAGE_CRC_SIZE) + return -1; + + memcpy (pheader, buffer, sizeof (pack_header)); +- +- pheader->len = GUINT16_FROM_LE ( *(uint16_t *) (buffer + 4)); ++ pheader->len = GUINT16_FROM_LE (pheader->len); ++ if (buffer_len < pheader->len + PACKAGE_HEADER_SIZE) ++ return -1; + pheader->len -= PACKAGE_CRC_SIZE; +- + return 0; + } + +@@ -248,7 +251,7 @@ gx_proto_parse_fingerid ( + if (!template || !fid_buffer) + return -1; + +- if (fid_buffer_size < 70) ++ if (fid_buffer_size < G_STRUCT_OFFSET (template_format_t, payload) + sizeof (uint32_t)) + return -1; + + buffer = fid_buffer; +@@ -256,28 +259,30 @@ gx_proto_parse_fingerid ( + + if (buffer[Offset++] != 67) + return -1; ++ fid_buffer_size--; + + template->type = buffer[Offset++]; ++ fid_buffer_size--; + template->finger_index = buffer[Offset++]; ++ fid_buffer_size--; + Offset++; +- +- memcpy (template->accountid, &buffer[Offset], 32); +- Offset += 32; +- +- memcpy (template->tid, &buffer[Offset], 32); +- Offset += 32; // Offset == 68 +- ++ memcpy (template->accountid, &buffer[Offset], sizeof (template->accountid)); ++ Offset += sizeof (template->accountid); ++ memcpy (template->tid, &buffer[Offset], sizeof (template->tid)); ++ Offset += sizeof (template->tid); // Offset == 68 + template->payload.size = buffer[Offset++]; +- memset (template->payload.data, 0, 56); ++ if (template->payload.size > sizeof (template->payload.data)) ++ return -1; ++ memset (template->payload.data, 0, template->payload.size); + memcpy (template->payload.data, &buffer[Offset], template->payload.size); + + return 0; + } + + int +-gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_cmd_response_t presp) ++gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint16_t buffer_len, pgxfp_cmd_response_t presp) + { +- uint32_t offset = 0; ++ uint16_t offset = 0; + uint8_t *fingerlist = NULL; + + if (!buffer || !presp) +@@ -289,6 +294,8 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_c + { + case RESPONSE_PACKAGE_CMD: + { ++ if (buffer_len < sizeof (gxfp_parse_msg_t) + 1) ++ return -1; + presp->parse_msg.ack_cmd = buffer[1]; + } + break; +@@ -296,32 +303,46 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_c + case MOC_CMD0_UPDATE_CONFIG: + { + presp->finger_config.status = buffer[0]; +- presp->finger_config.max_stored_prints = buffer[2]; ++ if (buffer_len >= 3) ++ presp->finger_config.max_stored_prints = buffer[2]; ++ else ++ /* to compatiable old version firmware */ ++ presp->finger_config.max_stored_prints = FP_MAX_FINGERNUM; ++ + } + break; + + case MOC_CMD0_COMMITENROLLMENT: + case MOC_CMD0_DELETETEMPLATE: ++ /* just check result */ + break; + + case MOC_CMD0_GET_VERSION: ++ if (buffer_len < sizeof (gxfp_version_info_t) + 1) ++ return -1; + memcpy (&presp->version_info, buffer + 1, sizeof (gxfp_version_info_t)); + break; + + case MOC_CMD0_CAPTURE_DATA: + if (LOBYTE (cmd) == MOC_CMD1_DEFAULT) + { ++ if (buffer_len < sizeof (gxfp_capturedata_t) + 1) ++ return -1; + presp->capture_data_resp.img_quality = buffer[1]; + presp->capture_data_resp.img_coverage = buffer[2]; + } + break; + + case MOC_CMD0_ENROLL_INIT: ++ if (buffer_len < sizeof (gxfp_enroll_init_t) + 1) ++ return -1; + if (presp->result == GX_SUCCESS) + memcpy (&presp->enroll_init.tid, &buffer[1], TEMPLATE_ID_SIZE); + break; + + case MOC_CMD0_ENROLL: ++ if (buffer_len < sizeof (gxfp_enroll_update_t)) ++ return -1; + presp->enroll_update.rollback = (buffer[0] < 0x80) ? false : true; + presp->enroll_update.img_overlay = buffer[1]; + presp->enroll_update.img_preoverlay = buffer[2]; +@@ -331,7 +352,11 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_c + presp->check_duplicate_resp.duplicate = (presp->result == 0) ? false : true; + if (presp->check_duplicate_resp.duplicate) + { +- uint16_t tid_size = GUINT16_FROM_LE (*(buffer + 1)); ++ if (buffer_len < 3) ++ return -1; ++ uint16_t tid_size = GUINT16_FROM_LE (*(uint16_t *) (buffer + 1)); ++ if ((buffer_len < tid_size + 3) || (buffer_len > sizeof (template_format_t)) + 3) ++ return -1; + memcpy (&presp->check_duplicate_resp.template, buffer + 3, tid_size); + } + break; +@@ -339,18 +364,16 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_c + case MOC_CMD0_GETFINGERLIST: + if (presp->result != GX_SUCCESS) + break; ++ if (buffer_len < 2) ++ return -1; + presp->finger_list_resp.finger_num = buffer[1]; +- if (presp->finger_list_resp.finger_num > FP_MAX_FINGERNUM) +- { +- presp->finger_list_resp.finger_num = 0; +- presp->result = GX_ERROR_NO_AVAILABLE_SPACE; +- break; +- } + fingerlist = buffer + 2; + for(uint8_t num = 0; num < presp->finger_list_resp.finger_num; num++) + { +- uint16_t fingerid_length = GUINT16_FROM_LE (*(fingerlist + offset)); ++ uint16_t fingerid_length = GUINT16_FROM_LE (*(uint16_t *) (fingerlist + offset)); + offset += 2; ++ if (buffer_len < fingerid_length + offset + 2) ++ return -1; + if (gx_proto_parse_fingerid (fingerlist + offset, + fingerid_length, + &presp->finger_list_resp.finger_list[num]) != 0) +@@ -372,14 +395,16 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint32_t buffer_len, pgxfp_c + presp->verify.match = (buffer[0] == 0) ? true : false; + if (presp->verify.match) + { ++ if (buffer_len < sizeof (template_format_t) + 10) ++ return -1; + offset += 1; +- presp->verify.rejectdetail = GUINT16_FROM_LE (*(buffer + offset)); ++ presp->verify.rejectdetail = GUINT16_FROM_LE (*(uint16_t *) (buffer + offset)); + offset += 2; +- score = GUINT32_FROM_LE (*(buffer + offset)); ++ score = GUINT32_FROM_LE (*(uint32_t *) (buffer + offset)); + offset += 4; +- study = GUINT16_FROM_LE (*(buffer + offset)); ++ study = buffer[offset]; + offset += 1; +- fingerid_size = GUINT16_FROM_LE (*(buffer + offset)); ++ fingerid_size = GUINT16_FROM_LE (*(uint16_t *) (buffer + offset)); + offset += 2; + if (gx_proto_parse_fingerid (buffer + offset, fingerid_size, &presp->verify.template) != 0) + { +diff --git a/libfprint/drivers/goodixmoc/goodix_proto.h b/libfprint/drivers/goodixmoc/goodix_proto.h +index 53eea04..e98e4e4 100644 +--- a/libfprint/drivers/goodixmoc/goodix_proto.h ++++ b/libfprint/drivers/goodixmoc/goodix_proto.h +@@ -89,7 +89,7 @@ typedef struct _gxfp_version_info + uint8_t interface[GX_VERSION_LEN]; + uint8_t protocol[GX_VERSION_LEN]; + uint8_t flashVersion[GX_VERSION_LEN]; +- uint8_t reserved[62]; ++ uint8_t reserved[38]; + } gxfp_version_info_t, *pgxfp_version_info_t; + + +@@ -225,7 +225,7 @@ int gx_proto_parse_header (uint8_t *buffer, + + int gx_proto_parse_body (uint16_t cmd, + uint8_t *buffer, +- uint32_t buffer_len, ++ uint16_t buffer_len, + pgxfp_cmd_response_t presponse); + + int gx_proto_init_sensor_config (pgxfp_sensor_cfg_t pconfig); +-- +2.31.1 + + +From fc59b2d365cb59dde2bed3bd48445b4353eae1e0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= +Date: Fri, 29 Jan 2021 20:02:15 +0100 +Subject: [PATCH 2/6] goodix: Consume the retry errors during verify/identify + reports + +We should not pass such kind of errors to complete functions, or we'll +fail the identification without ability to retry immediately. +--- + libfprint/drivers/goodixmoc/goodix.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index 82913d7..81cdb67 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -468,9 +468,9 @@ fp_verify_ssm_done (FpiSsm *ssm, FpDevice *dev, GError *error) + if (error && error->domain == FP_DEVICE_RETRY) + { + if (fpi_device_get_current_action (dev) == FPI_DEVICE_ACTION_VERIFY) +- fpi_device_verify_report (dev, FPI_MATCH_ERROR, NULL, error); ++ fpi_device_verify_report (dev, FPI_MATCH_ERROR, NULL, g_steal_pointer (&error)); + else +- fpi_device_identify_report (dev, NULL, NULL, error); ++ fpi_device_identify_report (dev, NULL, NULL, g_steal_pointer (&error)); + } + + if (fpi_device_get_current_action (dev) == FPI_DEVICE_ACTION_VERIFY) +-- +2.31.1 + + +From 3f54df16e31ca67e40e088786350e97576f3a47d Mon Sep 17 00:00:00 2001 +From: fengqiangguo +Date: Tue, 19 Jan 2021 03:00:07 -0500 +Subject: [PATCH 3/6] goodixmoc: support power button shield feature + +Some OEM will integrate fingerprint device with powerButton. It's +possible that a user may press the power button during fingerprint +enroll or identify. This would lead to unintended PC shutdown or +hibernation. We add pwr_btn_shield cmd and related process to shield +the power button function when the fingerprint functionality (enroll and +identify) is used and restore power button function afterwards. +--- + libfprint/drivers/goodixmoc/goodix.c | 121 ++++++- + libfprint/drivers/goodixmoc/goodix.h | 8 +- + libfprint/drivers/goodixmoc/goodix_proto.c | 10 + + libfprint/drivers/goodixmoc/goodix_proto.h | 11 + + tests/goodixmoc/custom.ioctl | 346 ++++++++------------- + tests/goodixmoc/device | 105 ++++--- + 6 files changed, 321 insertions(+), 280 deletions(-) + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index 81cdb67..9cfdbe6 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -58,6 +58,7 @@ struct _FpiDeviceGoodixMoc + GPtrArray *list_result; + guint8 template_id[TEMPLATE_ID_SIZE]; + gboolean is_enroll_identify; ++ gboolean is_power_button_shield_on; + + }; + +@@ -309,6 +310,35 @@ goodix_sensor_cmd (FpiDeviceGoodixMoc *self, + + + } ++ ++/****************************************************************************** ++ * ++ * fp_pwr_btn_shield_cb Function ++ * ++ *****************************************************************************/ ++static void ++fp_pwr_btn_shield_cb (FpiDeviceGoodixMoc *self, ++ gxfp_cmd_response_t *resp, ++ GError *error) ++{ ++ if (error) ++ { ++ fpi_ssm_mark_failed (self->task_ssm, error); ++ return; ++ } ++ if (resp->result >= GX_FAILED) ++ { ++ fp_dbg ("Setting power button shield failed, result: 0x%x", resp->result); ++ fpi_ssm_mark_failed (self->task_ssm, ++ fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL)); ++ return; ++ } ++ if (resp->power_button_shield_resp.resp_cmd1 == MOC_CMD1_PWR_BTN_SHIELD_ON) ++ self->is_power_button_shield_on = true; ++ else ++ self->is_power_button_shield_on = false; ++ fpi_ssm_next_state (self->task_ssm); ++} + /****************************************************************************** + * + * fp_verify_xxxx Function +@@ -419,7 +449,7 @@ fp_verify_cb (FpiDeviceGoodixMoc *self, + fpi_device_identify_report (device, NULL, NULL, error); + } + +- fpi_ssm_mark_completed (self->task_ssm); ++ fpi_ssm_next_state (self->task_ssm); + + } + +@@ -436,6 +466,14 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) + + switch (fpi_ssm_get_cur_state (ssm)) + { ++ case FP_VERIFY_PWR_BTN_SHIELD_ON: ++ goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_ON, ++ false, ++ NULL, ++ 0, ++ fp_pwr_btn_shield_cb); ++ break; ++ + case FP_VERIFY_CAPTURE: + fpi_device_report_finger_status_changes (device, + FP_FINGER_STATUS_NEEDED, +@@ -454,6 +492,14 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) + TEMPLATE_ID_SIZE, + fp_verify_cb); + break; ++ ++ case FP_VERIFY_PWR_BTN_SHIELD_OFF: ++ goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_OFF, ++ false, ++ NULL, ++ 0, ++ fp_pwr_btn_shield_cb); ++ break; + } + + } +@@ -812,6 +858,16 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) + } + break; + ++ case FP_ENROLL_PWR_BTN_SHIELD_ON: ++ { ++ goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_ON, ++ false, ++ NULL, ++ 0, ++ fp_pwr_btn_shield_cb); ++ } ++ break; ++ + case FP_ENROLL_IDENTIFY: + { + dummy[0] = 0x01; +@@ -926,9 +982,17 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) + + } + break; +- } +- + ++ case FP_ENROLL_PWR_BTN_SHIELD_OFF: ++ { ++ goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_OFF, ++ false, ++ NULL, ++ 0, ++ fp_pwr_btn_shield_cb); ++ } ++ break; ++ } + } + + static void +@@ -1282,6 +1346,7 @@ gx_fp_init (FpDevice *device) + int ret = 0; + + self->max_stored_prints = FP_MAX_FINGERNUM; ++ self->is_power_button_shield_on = false; + + self->cancellable = g_cancellable_new (); + +@@ -1317,20 +1382,59 @@ gx_fp_init (FpDevice *device) + } + + static void +-gx_fp_exit (FpDevice *device) ++gx_fp_release_interface (FpiDeviceGoodixMoc *self, ++ GError *error) + { +- FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device); +- GError *error = NULL; ++ g_autoptr(GError) release_error = NULL; + + g_clear_object (&self->cancellable); + g_clear_pointer (&self->sensorcfg, g_free); + + /* Release usb interface */ +- g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)), +- 0, 0, &error); ++ g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (self)), ++ 0, 0, &release_error); ++ /* Retain passed error if set, otherwise propagate error from release. */ ++ if (error == NULL) ++ error = g_steal_pointer (&release_error); + + /* Notify close complete */ + fpi_device_close_complete (FP_DEVICE (self), error); ++ ++} ++ ++static void ++gx_fp_exit_cb (FpiDeviceGoodixMoc *self, ++ gxfp_cmd_response_t *resp, ++ GError *error) ++{ ++ ++ ++ if (resp->result >= GX_FAILED) ++ fp_dbg ("Setting power button shield failed, result: 0x%x", resp->result); ++ self->is_power_button_shield_on = false; ++ gx_fp_release_interface (self, error); ++} ++ ++static void ++gx_fp_exit (FpDevice *device) ++{ ++ FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device); ++ ++ if (self->is_power_button_shield_on) ++ { ++ goodix_sensor_cmd (self, ++ MOC_CMD0_PWR_BTN_SHIELD, ++ MOC_CMD1_PWR_BTN_SHIELD_OFF, ++ false, ++ NULL, ++ 0, ++ gx_fp_exit_cb); ++ } ++ else ++ { ++ gx_fp_release_interface (self, NULL); ++ } ++ + } + + +@@ -1432,7 +1536,6 @@ fpi_device_goodixmoc_init (FpiDeviceGoodixMoc *self) + static void + gx_fp_cancel (FpDevice *device) + { +- + FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device); + + /* Cancel any current interrupt transfer (resulting us to go into +diff --git a/libfprint/drivers/goodixmoc/goodix.h b/libfprint/drivers/goodixmoc/goodix.h +index c38bf9b..23e142a 100644 +--- a/libfprint/drivers/goodixmoc/goodix.h ++++ b/libfprint/drivers/goodixmoc/goodix.h +@@ -40,7 +40,8 @@ typedef enum { + + + typedef enum { +- FP_ENROLL_ENUM = 0, ++ FP_ENROLL_PWR_BTN_SHIELD_ON = 0, ++ FP_ENROLL_ENUM, + FP_ENROLL_IDENTIFY, + FP_ENROLL_CREATE, + FP_ENROLL_CAPTURE, +@@ -48,11 +49,14 @@ typedef enum { + FP_ENROLL_WAIT_FINGER_UP, + FP_ENROLL_CHECK_DUPLICATE, + FP_ENROLL_COMMIT, ++ FP_ENROLL_PWR_BTN_SHIELD_OFF, + FP_ENROLL_NUM_STATES, + } FpEnrollState; + + typedef enum { +- FP_VERIFY_CAPTURE = 0, ++ FP_VERIFY_PWR_BTN_SHIELD_ON = 0, ++ FP_VERIFY_CAPTURE, + FP_VERIFY_IDENTIFY, ++ FP_VERIFY_PWR_BTN_SHIELD_OFF, + FP_VERIFY_NUM_STATES, + } FpVerifyState; +diff --git a/libfprint/drivers/goodixmoc/goodix_proto.c b/libfprint/drivers/goodixmoc/goodix_proto.c +index 962fd6e..01044a9 100644 +--- a/libfprint/drivers/goodixmoc/goodix_proto.c ++++ b/libfprint/drivers/goodixmoc/goodix_proto.c +@@ -317,6 +317,16 @@ gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint16_t buffer_len, pgxfp_c + /* just check result */ + break; + ++ case MOC_CMD0_PWR_BTN_SHIELD: ++ presp->power_button_shield_resp.resp_cmd1 = LOBYTE (cmd); ++ if (buffer_len >= 2) ++ { ++ uint8_t support_pwr_shield = buffer[1]; ++ if (support_pwr_shield == 0xFF) ++ g_debug ("Power button shield feature not supported!\n"); ++ } ++ break; ++ + case MOC_CMD0_GET_VERSION: + if (buffer_len < sizeof (gxfp_version_info_t) + 1) + return -1; +diff --git a/libfprint/drivers/goodixmoc/goodix_proto.h b/libfprint/drivers/goodixmoc/goodix_proto.h +index e98e4e4..bcd1cdd 100644 +--- a/libfprint/drivers/goodixmoc/goodix_proto.h ++++ b/libfprint/drivers/goodixmoc/goodix_proto.h +@@ -75,6 +75,11 @@ + #define MOC_CMD1_GET_FINGER_MODE 0x00 + #define MOC_CMD1_SET_FINGER_DOWN 0x01 + #define MOC_CMD1_SET_FINGER_UP 0x02 ++ ++#define MOC_CMD0_PWR_BTN_SHIELD 0xE0 ++#define MOC_CMD1_PWR_BTN_SHIELD_OFF 0x00 ++#define MOC_CMD1_PWR_BTN_SHIELD_ON 0x01 ++ + /* */ + + typedef struct _gxfp_version_info +@@ -173,6 +178,11 @@ typedef struct _fp_finger_config + uint8_t max_stored_prints; + } fp_finger_config_t, *pfp_finger_config_t; + ++typedef struct _fp_pwr_btn_shield ++{ ++ uint8_t resp_cmd1; ++} fp_pwr_btn_shield_t, *pfp_pwr_btn_shield_t; ++ + typedef struct _fp_cmd_response + { + uint8_t result; +@@ -189,6 +199,7 @@ typedef struct _fp_cmd_response + gxfp_version_info_t version_info; + fp_finger_status_t finger_status; + fp_finger_config_t finger_config; ++ fp_pwr_btn_shield_t power_button_shield_resp; + }; + } gxfp_cmd_response_t, *pgxfp_cmd_response_t; + +diff --git a/tests/goodixmoc/custom.ioctl b/tests/goodixmoc/custom.ioctl +index 21c8531..496b43c 100644 +--- a/tests/goodixmoc/custom.ioctl ++++ b/tests/goodixmoc/custom.ioctl +@@ -1,307 +1,217 @@ +-@DEV /dev/bus/usb/001/003 ++@DEV /dev/bus/usb/003/008 + USBDEVFS_GET_CAPABILITIES 0 FD010000 + USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 D00000000500BA4500611A297F + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000008009D6200D00001B5A57582000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000008009D6200D00000239572F5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 192 0 D0000001850067980001FE415050000000000030313030303232384C454E4F564F0000474D3138384230004746333230360000312E30322E30310055534200000000005642530000000000303030303030303300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051239DE6303030303033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 140 140 0 C001000184008E71000064500F410C0A1800002300000101000101010100010105050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B737316F3EB36C6A ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 192 0 D0000001850067980002FE4150500000000000303130303032343744454C4C00000000474D3138384230004746353238380000312E30342E30352E31302E3530000000000000000000000000000000000000005553420000000000564253000000000030303030303030330000000000000000000000000000000000000000000000000000000000003B5CB43C000000000000555342000000000056425300000000003030303030303033000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 140 140 0 C001000184008E71000064500F41080A1800002300000101000101010100010105050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B737316F0558B152 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000208004BB400C00101C96A6C6B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000208004BB400C001005F5A6B1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 C00100030500FB040093B3ED01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 A6000002050049B600C27E4B39 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 C00100030700D12E0014140342C8AE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 12 12 0 E00100020400BE41BBC7BACE + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000004080036C900A60001F1AFC9FB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000004080036C900E00101C26FC596000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A60000050600609F000094D6C40E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000030700AC53000F411A349263 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 E0010005080054AB00141441240D0ECF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 A6000003050022DD00CA3B9C30 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000060800E01F00A20001605AE410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000060800E01F00A60001BCF2ED17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A2000007070007F8005564FA6B157100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 44 44 0 A50000042400F40B000000000000000000000000000000000000000000000000000000000000000095D4A28A ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A60000070600B64900007A6860130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000040700BA45000F41625785F3 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000080800CC3300A500013F9036A9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000080800CC3300A20001BA8679AC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A50000090500DE2103D6515435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 A10000050500807F007BE269C4 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000090C00BC430054640027004D0084CD5EED0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 44 44 0 A500000524009F60000000000000000000000000000000000000000000000000000000000000000048D9D8CB + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000A08001AE500A10001AE651B42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000A08001AE500A5000172CD1245000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A100000B250002FD00B786B17D6A044D24C1651C2B1A76F6396D790639F58CA6D62DDDB8E179A9BD4A6C5C6C9200000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200000607006C93000F41A33C2AB4 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A500000B050008F703C6DBFA26000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 A100000605003DC200632D10DE + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000C0800679800A200011C98B985000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000C0800679800A100014526FF87000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200000D0700807F0059643EDA283F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A0000007070055AA016450891085EC ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A100000D25007F8000D7843025CC713EA1543DF81EBAAF6BE244543EB9F4BC6FA74E8F246A711CD8C3EA54665F00000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A2000007070007F8000F41630A457A + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000E0800B14E00A000013F11196A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00000E0800B14E00A2000151C59D69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000000F070004FB000000E0109A2200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B00200080500629D004A354747 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200000F0C00C13E003E620027005900101FD1980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A0000008070012ED016450F8E6B5D9 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001008003FC000B002017532670A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001008003FC000A0000187F37724000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200114500A15E008E0091009E006F0083007C006D00690079008800000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009D00000000000000000000000000988D37C39E006F0083007C006D00690079008800000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009D00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200000907002BD4000F41D2CA1A81 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000001107008A7500000002FCFB4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B0020009050009F6004270904E + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000120800E91600A20001A47AD7CB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000120800E91600B00201386F43E6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200001307000EF1004B640F46BD2D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000000A0700C43B016450398D1A9E ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002001345007788008A009C009400880008009A0099008B00080008009100850000000000000000008F00A4009B0090008F00A100A000940088009A0097008D000000000000000000BEDDBBB29400880008009A0099008B00080008009100850000000000000000008F00A4009B0090008F00A100A000940088009A0097008D ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200000A07009669000F41D397DA08 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000140800946B00A0000121EDB70D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000140800946B00A200014F39330E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A0000015070021DE0000007BC22C5100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002000B0500DF200052FA3E5D ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000150C00E41B004E640027004F00755632510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000000B0700AF50016450F9BB7550 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000016080042BD00B002019E7183CF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000016080042BD00A000016CB093E1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200174500DC23008200A200AA0093009F009800A90087009A009100000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009C00000000000000000000000000F1B14CECAA0093009F009800A90087009A009100000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200000C0700EB14000F416BC2A256 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A00000170700F708000000BAA9831600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002000C0500C93600FFA00844 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001808006E9100A20001D8B88A5E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001808006E9100B0020144AD1E73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200001907008976005664DBD4593000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000000D0700D22D01645041EE0D0E ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200194500F00F008C009C009600080086009D0097008E00810092009100850000000000000000008F00A4009A008F008E00A1009F00920087009A0096008C000000000000000000E3A1F2A19600080086009D0097008E00810092009100850000000000000000008F00A4009A008F008E00A1009F00920087009A0096008C ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200000D0700807F000F41ABF4CD98 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001A0800B84700A00001FB312AB1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001A0800B84700A2000195E5AEB2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000001B07000DF2000000CA0273AA00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002000E05001FE000EF2AA657 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200001B0C00C8370048640027005A00021B15CE0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000000E07006F9001645040B3CD87 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001C0800C53A00B00201E2B3DE5A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001C0800C53A00A000011072CE74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002001D45005BA400A8009100AB0071008B008F009100920093009100000000000000000000000000AF00A500AD00A000B100A300AA00A200A3009C000000000000000000000000008A57E0B3AB0071008B008F009100920093009100000000000000000000000000AF00A500AD00A000B100A300AA00A200A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200000F070056A9000F416A9F62DF ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000001D0700708F003A000B89A2D100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002000F0500748B00E76F715E + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001E080013EC00A2000133FB6E9B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00001E080013EC00B00201AFEEFAB6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200001F0700F40B005A625A6BF72B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A00000100700E11E016450A25FACED ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002001F45008D720008009900920086008800960097008D007F0091008D00850000000000000000008F00A4009B0090008F00A100A000930087009A0096008D00000000000000000069C4E77C920086008800960097008D007F0091008D00850000000000000000008F00A4009B0090008F00A100A000930087009A0096008D ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000100700B34C000F4148456C7B + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000200800DE2100A000011D15EAC2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000200800DE2100A2000173C16EC1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000002107006B94002900A6F807F200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B00200110500FA0500438F0629 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000210C00AE510048640027005500DD002B870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000001107008A750164506269C323 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000022080008F700B00201A289DE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000022080008F700A000015048CE2E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200234500966900870088008800700085009600940070001A001A00000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009D0000000000000000000000000074CA825A8800700085009600940070001A001A00000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009D00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000120700659A000F41892EC33C ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A00000230700BD420000008C0CEEF100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B0020012050047B8005B407F33 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000240800758A00A20001D5DFAEE8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000240800758A00B0020149CA3AC5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000250700926D00556427B73E5900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000001307005CA3016450A3026C64 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200254500EB14008D00A100900087000800980099008C00080008000800080000000000000000008F00A3009A008F008E00A0009F00930087009A0096008C0000000000000000000F8D1061900087000800980099008C00080008000800080000000000000000008F00A3009A008F008E00A0009F00930087009A0096008C ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200001307000EF1000F414918ACF2 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000260800A35C00A00001F6560E07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000260800A35C00A2000198828A04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A0000027070016E90058265460564800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002001405003AC500FE5F9E23 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000270C00D32C0057640027004E0017D2351D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000001407004AB5016450DB617BF4 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00002808008F7000B00201DE4B8395000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00002808008F7000A000012C8A93BB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B0020029450011EE007B00950097006E0084008A007400720078008000000000000000000000000000AE00A500AD00A000B100A200AA00A300A3009D000000000000000000000000007AB44F7697006E0084008A007400720078008000000000000000000000000000AE00A500AD00A000B100A200AA00A300A3009D00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000150700738C000F41F14DD4AC ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000002907003AC500000044F2661300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B0020015050051AE00F61A492A + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00002A080059A600A200010F033354000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00002A080059A600B002019316A779000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200002B0700BE4100566455244C8900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000001607009C630164501A0AD4B3 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002002B4500C7380089009C00920008008A00990098008A007F0093008E00860000000000000000008F00A4009A008F008E00A100A000930087009A0096008D000000000000000000A0269EE8920008008A00990098008A007F0093008E00860000000000000000008F00A4009A008F008E00A100A000930087009A0096008D ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000160700CE31000F41F0101425 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00002C080024DB00A000018A945392000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00002C080024DB00A20001E440D791000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000002D0700916E005F2DD3D14D7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B00200170500877800E690E739 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200002D0C0054AB004A64002700590057B20D220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A00000170700F708016450DA3CBB7D + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00002E0800F20D00B0020135086750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00002E0800F20D00A00001C7C9777E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002002F45006C9300A80083008A006D00870082008900940074001A00000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009D00000000000000000000000000DD3369188A006D00870082008900940074001A00000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009D00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000180700E21D000F4141D04BDE ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000002F070047B8004C4C4EAAB86E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B00200180500C03F00B4605C02 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003008007C8300A2000111FF9D33000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003008007C8300B002018DEA091E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200003107009B6400586440DB796400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A00000190700DB240164506BFCE486 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200314500E21D00080008000800080088009A0096008F00820092009000080000000000000000008F00A3009A008F008E00A000A000930087009A0096008C000000000000000000E0BA753D0800080088009A0096008F00820092009000080000000000000000008F00A3009A008F008E00A000A000930087009A0096008C ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200001907008976000F4181E62410 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000320800AA5500A0000132763DDC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000320800AA5500A200015CA2B9DF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000003307001FE072635FE0E8A18200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002001A050016E900A4EAF211 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000330C00DA25005464002700500088A694DC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000001A070066990164506AA1240F + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000340800D72800B002012BF4C937000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000340800D72800A00001D935D919000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B0020035450049B6007D00920094008C009A008B008400890094006D00000000000000000000000000AE00A500AD00A000B100A300AA00A200A3009D00000000000000000000000000520A47F394008C009A008B008400890094006D00000000000000000000000000AE00A500AD00A000B100A300AA00A200A3009D00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200001B07005FA0000F41408D8B57 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A00000350700629D0000006775A83E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002001B05007D8200ACAF2518 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000036080001FE00A20001FABC79F6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000036080001FE00B0020166A9EDDB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000370700E619005964B9BF1A2300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000001C07001BE4016450D2F45C51 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002003745009F600008000800080008008600970095000800830090008D00880000000000000000008F00A3009A008F008E00A100A000930087009A0096008C000000000000000000F054EC42080008008600970095000800830090008D00880000000000000000008F00A3009A008F008E00A100A000930087009A0096008C ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200001C070049B6000F4138EE9CC7 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003808002DD200A000014EB46049000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003808002DD200A200012060E44A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000003907009867725F526A136B6D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002001D050000FF0009B0C408 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000390C005DA2004A640027004F005D569D1A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000001D0700708F01645012C2339F + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003A0800FB0400B00201F128548B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003A0800FB0400A0000103E944A5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002003B4500659A0084007D008B0099009C006A009A007B0089008300000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009C00000000000000000000000000BAEEF1FA8B0099009C006A009A007B0089008300000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200001E07009F60000F41F9853380 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000003B07004EB1000000D6B5F7C500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A300001E0700B649000F41F8F75650 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003C0800867900A20001867E2463000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003C0800867900A30001B114E662000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200003D0700619E005864307089D800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000001F0700A659016450D3A99CD8 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A300003D0500629D009DDA98C4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 114 114 0 A400001F6A001EE1640043010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F647900E6F6BD05 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003E080050AF00A00001A5F7848C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00003E080050AF00A40001795F8D8B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000003F0700E51A0063324BE2275A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B00200200500708F00DCB5EECB ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A400003F05006B940099962233000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 12 12 0 E0000020040049B6AEA0E8AB + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004008001BE400B00201E7BD49D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004008001BE400E00001D5F1C38E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200414500857A0078006F0074009200A6008C0071006C008E009400000000000000000000000000AF00A500AD00A000B100A300A900A200A3009C0000000000000000000000000079DB6FC674009200A6008C0071006C008E009400000000000000000000000000AF00A500AD00A000B100A300A900A200A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A2000021070039C6000F41C7E8B94B ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 E000004108001BE400000000315A099D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 A60000210500B74800B39B168D + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000420800CD3200A2000136F5F911000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000420800CD3200A60001EA5DF016000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200004307002AD5005A647427533000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A00000220700D6290164502CAFB954 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 A60000436C00EC130001640043010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F647900FA60A49A000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 12 12 0 E00100220400FD0253E4FA3B + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000440800B04F00A00001B36299D7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000440800B04F00E0010132DE18BE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A0000045070005FA0061447F5F4C1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B00200230500CD3200C47A97D1 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 E00100450800D22D000000002B1189D3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000230700EF100100238AF5F029 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000460800669900B002010CFEAD15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000460800669900A2000190EB3938000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200474500F807009500860087008D00A3006D007D0081009C007C00000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009C0000000000000000000000000074D7CC3787008D00A3006D007D0081009C007C00000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000240700F906000F417EE0019C ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000470C0016E9004C640027004D005C10F4310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 44 44 0 A50000242400B7480000000000000000000000000000000000000000000000000000000000000000664B5D3F + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004808004AB500A200014A37A484000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004808004AB500A50001CF21EB81000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000490700AD52005764F1A7756700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A00000250700C03F01645054CCAEC4 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 192 0 A50000499200D22D004C642A00000000640043010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F647900954F9F36EAEDD0364E04D4A2B430F0D25BF63D97E631EC0F0F86A6A3DCDEF50C82BB7E8C2D30303030303030302D302D30303030303030302D6E6F626F647900954F9F36EAEDD0364E04 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 12 12 0 E000002504008976203A9633 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004A08009C6300A0000169BE046B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004A08009C6300E00001A9339E1B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000004B070029D60041281F96933800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002002605000DF20079AA0FDB ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 E000004B08009C63004C642A9C8BFEAB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 12 12 0 E0010026040056A9D15D8DC2 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004C0800E11E00B00201703CF080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004C0800E11E00E00101034161C7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002004D45007F80009E008E008E007E00AB00840096007F0092008100000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009C00000000000000000000000000D393E7738E007E00AB00840096007F0092008100000000000000000000000000AF00A500AD00A000B100A300AA00A300A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A2000027070044BB000F417FBDC115 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 E001004D0800837C004C642ACB9D5A09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A2000027070044BB010023F3CB2730 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00004E080037C800A20001A1744041000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200004F0700D02F005964C7DF8EA700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A0000028070051AE016450E45131B6 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200004F0C0047B80052640027004D00E19CE96F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 44 44 0 A500002824004DB200000000000000000000000000000000000000000000000000000000000000003DB8032C + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000500800B94600A000017742AA0C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000500800B94600A500019C80610A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000005107000CF300624F1EC75A2600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002002905004AB5002B5AB4E0 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 192 0 A5000051920021DE0052642A00000000640043010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F647900954F9F36EAEDD0364E04D4A2B430F0D25BF63D97E631EC0F0F86A6A3DCDEF50CCC7D08E82D30303030303030302D302D30303030303030302D6E6F626F647900954F9F36EAEDD0364E04 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 12 12 0 E00000290400738C14C55D45 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00005208006F9000B00201C8DE9ECE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00005208006F9000E00001FA921490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B00200534500F10E0077007A00720083007500930073007E006E008200000000000000000000000000AE00A400AC009F00B100A200A900A200A3009C00000000000000000000000000C5190965720083007500930073007E006E008200000000000000000000000000AE00A400AC009F00B100A200A900A200A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200002A0700D52A000F41CF205E67 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 E000005308006F900052642AB5A4CC36000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++USBDEVFS_REAPURBNDELAY 0 3 1 0 0 114 114 0 A700002A6A0044BB640043010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F6479001CF66539 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000054080012ED00A20001BF88EE26000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000054080012ED00A70001544A2520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000550700F50A0058641D3C23CD00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000002B0700EC13016450E50CF13F +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000560800C43B00A000019C014EC9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A00000570700718E726054F685049700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002002C05008A7500968A2CEA +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000580800E81700B00201B41CC35B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002005945007689008C007100780072007A009500A10088009C008F00000000000000000000000000AE00A500AD00A000B100A200A900A200A3009C00000000000000000000000000D98A26F0780072007A009500A10088009C008F00000000000000000000000000AE00A500AD00A000B100A200A900A200A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200002D0700C33C000F41B74349F7 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00005A08003EC100A200016554739A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200005B0700D926005964EDCD672F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A000002E07002CD30164505C0449E8 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00005C080043BC00A00001E0C3135C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000005D0700F609725F58291DE42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B002002F050037C8008E4555F0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00005E0800956A00B002015F5F279E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002005F45000BF400A30088009D008D00A80071007F0092006F006100000000000000000000000000AE00A400AC009F00B100A200A900A200A3009C000000000000000000000000001A1438ED9D008D00A80071007F0092006F006100000000000000000000000000AE00A400AC009F00B100A200A900A200A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000300700F00F000F4154F2E814 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000060080058A700A200018370B3E9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000610700BF400059646AA8553300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A00000310700C9360164507EDE474C +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00006208008E7100A00001A0F91306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A000006307003BC4006432979DA1E700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 B0020032050004FB00326A5B9D +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000640800F30C00B00201B97BE7ED000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 B002006545006D92008D008F008A00750083008D0092008B0071007A00000000000000000000000000AE00A500AD00A000B100A200A900A200A3009C00000000000000000000000000394AB8458A00750083008D0092008B0071007A00000000000000000000000000AE00A500AD00A000B100A200A900A200A3009C00000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A200003307004DB2000F4155AF289D +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000066080025DA00A200016833572C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A20000670700C23D0057645CD0AEF300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A0000034070009F6016450C7D6FF9B +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000068080009F600A00001DC3B4E93000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A00000690700BC43002E00509568C700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A3000035070019E6000F41EC883513 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00006A0800DF2000A30001C8D82C7D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A300006B05003BC40055C25B16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 114 114 0 A40000366A006798640043010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F647900B5C8699F +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00006C0800A25D00A40001A68D87BD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A400006D0500996600E41BAEE2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 13 13 0 A60000370500689700E8D1ECD8 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00006E0800748B00A6000185042752000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 128 0 A600006F6C0055AA0001640043010107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F6479006EA4C362000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 A20000380700A15E010023D1112994 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000700800FA0500A20001E14E401B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200007107001DE2005A635942221700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 44 44 0 A50000392400847B000000000000000000000000000000000000000000000000000000000000000038910386 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00007208002CD300A5000129052BF2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 192 0 A50000739300A15E005A632900000000640043010107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F6479008B7767E4A81CC57C17A21C0F44B08232229E7F2E5DBFA70A5CEF58A3966ED710002FF9938030303030303030302D302D30303030303030302D6E6F626F6479008B7767E4A81CC57C17A2 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 15 15 0 a200003a07007788010023107a86d3 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA0000700800FA0500A20001E14E401B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A200007107001DE2005A635942221700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 44 44 0 a500003b240052ad0000000000000000000000000000000000000000000000000000000000000000828af704 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA00007208002CD300A5000129052BF2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 192 0 A50000739300A15E005A632900000000640043010107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E4650312D30303030303030302D302D30303030303030302D6E6F626F6479008B7767E4A81CC57C17A21C0F44B08232229E7F2E5DBFA70A5CEF58A3966ED710002FF9938030303030303030302D302D30303030303030302D6E6F626F6479008B7767E4A81CC57C17A2 +-USBDEVFS_REAPURBNDELAY 0 3 1 0 0 114 114 0 a700003c6a009b64640043010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4650312d30303030303030302d302d30303030303030302d6e6f626f647900473c9b29 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 AA000074080051AE00A70001AC924B34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 0 0 +- USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A7000075050011EE00ACFFDA28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ++ USBDEVFS_REAPURBNDELAY 0 3 131 0 0 2048 64 0 A7000055050052AD00C5D5FE86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +diff --git a/tests/goodixmoc/device b/tests/goodixmoc/device +index 627c9dc..a076caa 100644 +--- a/tests/goodixmoc/device ++++ b/tests/goodixmoc/device +@@ -1,30 +1,30 @@ +-P: /devices/pci0000:00/0000:00:14.0/usb1/1-8 +-N: bus/usb/001/003=12010002EF000040C627A26000010102030109022000010103A0320904000002FF0000040705830240000007050102400000 +-E: DEVNAME=/dev/bus/usb/001/003 ++P: /devices/pci0000:00/0000:00:14.0/usb3/3-2 ++N: bus/usb/003/008=12010002EF000040C627405800010102030109022000010103A0320904000002FF0000040705830240000007050102400000 ++E: DEVNAME=/dev/bus/usb/003/008 + E: DEVTYPE=usb_device + E: DRIVER=usb +-E: PRODUCT=27c6/60a2/100 ++E: PRODUCT=27c6/5840/100 + E: TYPE=239/0/0 +-E: BUSNUM=001 +-E: DEVNUM=003 ++E: BUSNUM=003 ++E: DEVNUM=008 + E: MAJOR=189 +-E: MINOR=2 ++E: MINOR=263 + E: SUBSYSTEM=usb + E: ID_VENDOR=Goodix_Technology_Co.__Ltd. + E: ID_VENDOR_ENC=Goodix\x20Technology\x20Co.\x2c\x20Ltd. + E: ID_VENDOR_ID=27c6 + E: ID_MODEL=Goodix_USB2.0_MISC + E: ID_MODEL_ENC=Goodix\x20USB2.0\x20MISC +-E: ID_MODEL_ID=60a2 ++E: ID_MODEL_ID=5840 + E: ID_REVISION=0100 +-E: ID_SERIAL=Goodix_Technology_Co.__Ltd._Goodix_USB2.0_MISC_UIDCBEE4D7B_XXXX_MOC_B0 +-E: ID_SERIAL_SHORT=UIDCBEE4D7B_XXXX_MOC_B0 ++E: ID_SERIAL=Goodix_Technology_Co.__Ltd._Goodix_USB2.0_MISC_UIDE1AD5CBA_XXXX_MOC_B0 ++E: ID_SERIAL_SHORT=UIDE1AD5CBA_XXXX_MOC_B0 + E: ID_BUS=usb + E: ID_USB_INTERFACES=:ff0000: + E: ID_VENDOR_FROM_DATABASE=Shenzhen Goodix Technology Co.,Ltd. +-E: ID_PATH=pci-0000:00:14.0-usb-0:8 +-E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_8 +-E: LIBFPRINT_DRIVER=AuthenTec AES1610 ++E: ID_PATH=pci-0000:00:14.0-usb-0:2 ++E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2 ++E: LIBFPRINT_DRIVER=Goodix MOC Fingerprint Sensor + A: authorized=1 + A: avoid_reset_quirk=0 + A: bConfigurationValue=1 +@@ -37,32 +37,32 @@ A: bNumConfigurations=1 + A: bNumInterfaces= 1 + A: bcdDevice=0100 + A: bmAttributes=a0 +-A: busnum=1 +-A: configuration=UIDCBEE4D7B_XXXX_MOC_B0 +-H: descriptors=12010002EF000040C627A26000010102030109022000010103A0320904000002FF0000040705830240000007050102400000 +-A: dev=189:2 +-A: devnum=3 +-A: devpath=8 ++A: busnum=3\n ++A: configuration=UIDE1AD5CBA_XXXX_MOC_B0 ++H: descriptors=12010002EF000040C627405800010102030109022000010103A0320904000002FF0000040705830240000007050102400000 ++A: dev=189:263 ++A: devnum=8\n ++A: devpath=2 + L: driver=../../../../../bus/usb/drivers/usb +-A: idProduct=60a2 ++A: idProduct=5840 + A: idVendor=27c6 + A: ltm_capable=no + A: manufacturer=Goodix Technology Co., Ltd. + A: maxchild=0 +-L: port=../1-0:1.0/usb1-port8 +-A: power/active_duration=324448 ++L: port=../3-0:1.0/usb3-port2 ++A: power/active_duration=2684 + A: power/async=enabled + A: power/autosuspend=2 + A: power/autosuspend_delay_ms=2000 +-A: power/connected_duration=5916532 ++A: power/connected_duration=54348 + A: power/control=auto + A: power/level=auto + A: power/persist=1 + A: power/runtime_active_kids=0 +-A: power/runtime_active_time=327268 ++A: power/runtime_active_time=2518 + A: power/runtime_enabled=enabled + A: power/runtime_status=active +-A: power/runtime_suspended_time=5588987 ++A: power/runtime_suspended_time=51550 + A: power/runtime_usage=0 + A: power/wakeup=disabled + A: power/wakeup_abort_count= +@@ -75,38 +75,39 @@ A: power/wakeup_max_time_ms= + A: power/wakeup_total_time_ms= + A: product=Goodix USB2.0 MISC + A: quirks=0x0 +-A: removable=fixed ++A: removable=removable + A: rx_lanes=1 +-A: serial=UIDCBEE4D7B_XXXX_MOC_B0 ++A: serial=UIDE1AD5CBA_XXXX_MOC_B0 + A: speed=12 + A: tx_lanes=1 +-A: urbnum=2180 ++A: urbnum=15 + A: version= 2.00 + +-P: /devices/pci0000:00/0000:00:14.0/usb1 +-N: bus/usb/001/001=12010002090001406B1D020004050302010109021900010100E0000904000001090000000705810304000C +-E: DEVNAME=/dev/bus/usb/001/001 ++P: /devices/pci0000:00/0000:00:14.0/usb3 ++N: bus/usb/003/001=12010002090001406B1D020008050302010109021900010100E0000904000001090000000705810304000C ++E: DEVNAME=/dev/bus/usb/003/001 + E: DEVTYPE=usb_device + E: DRIVER=usb +-E: PRODUCT=1d6b/2/504 ++E: PRODUCT=1d6b/2/508 + E: TYPE=9/0/1 +-E: BUSNUM=001 ++E: BUSNUM=003 + E: DEVNUM=001 + E: MAJOR=189 +-E: MINOR=0 ++E: MINOR=256 + E: SUBSYSTEM=usb +-E: ID_VENDOR=Linux_5.4.0-29-generic_xhci-hcd +-E: ID_VENDOR_ENC=Linux\x205.4.0-29-generic\x20xhci-hcd ++E: ID_VENDOR=Linux_5.8.0-38-generic_xhci-hcd ++E: ID_VENDOR_ENC=Linux\x205.8.0-38-generic\x20xhci-hcd + E: ID_VENDOR_ID=1d6b + E: ID_MODEL=xHCI_Host_Controller + E: ID_MODEL_ENC=xHCI\x20Host\x20Controller + E: ID_MODEL_ID=0002 +-E: ID_REVISION=0504 +-E: ID_SERIAL=Linux_5.4.0-29-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 ++E: ID_REVISION=0508 ++E: ID_SERIAL=Linux_5.8.0-38-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 + E: ID_SERIAL_SHORT=0000:00:14.0 + E: ID_BUS=usb + E: ID_USB_INTERFACES=:090000: + E: ID_VENDOR_FROM_DATABASE=Linux Foundation ++E: ID_AUTOSUSPEND=1 + E: ID_MODEL_FROM_DATABASE=2.0 root hub + E: ID_PATH=pci-0000:00:14.0 + E: ID_PATH_TAG=pci-0000_00_14_0 +@@ -123,33 +124,33 @@ A: bMaxPacketSize0=64 + A: bMaxPower=0mA + A: bNumConfigurations=1 + A: bNumInterfaces= 1 +-A: bcdDevice=0504 ++A: bcdDevice=0508 + A: bmAttributes=e0 +-A: busnum=1 ++A: busnum=3\n + A: configuration= +-H: descriptors=12010002090001406B1D020004050302010109021900010100E0000904000001090000000705810304000C +-A: dev=189:0 +-A: devnum=1 ++H: descriptors=12010002090001406B1D020008050302010109021900010100E0000904000001090000000705810304000C ++A: dev=189:256 ++A: devnum=1\n + A: devpath=0 + L: driver=../../../../bus/usb/drivers/usb + A: idProduct=0002 + A: idVendor=1d6b + A: interface_authorized_default=1 + A: ltm_capable=no +-A: manufacturer=Linux 5.4.0-29-generic xhci-hcd +-A: maxchild=12 +-A: power/active_duration=5879432 ++A: manufacturer=Linux 5.8.0-38-generic xhci-hcd ++A: maxchild=4 ++A: power/active_duration=2790916 + A: power/async=enabled + A: power/autosuspend=0 + A: power/autosuspend_delay_ms=0 +-A: power/connected_duration=5916912 ++A: power/connected_duration=15607832 + A: power/control=auto + A: power/level=auto +-A: power/runtime_active_kids=2 +-A: power/runtime_active_time=5879430 ++A: power/runtime_active_kids=1 ++A: power/runtime_active_time=2790874 + A: power/runtime_enabled=enabled + A: power/runtime_status=active +-A: power/runtime_suspended_time=37481 ++A: power/runtime_suspended_time=12816956 + A: power/runtime_usage=0 + A: power/wakeup=disabled + A: power/wakeup_abort_count= +@@ -167,5 +168,7 @@ A: rx_lanes=1 + A: serial=0000:00:14.0 + A: speed=480 + A: tx_lanes=1 +-A: urbnum=1319 ++A: urbnum=584 + A: version= 2.00 ++ ++ +-- +2.31.1 + + +From b1a3c9726d258e48a325360208e15468f667eff7 Mon Sep 17 00:00:00 2001 +From: weilei +Date: Thu, 4 Feb 2021 11:31:10 +0800 +Subject: [PATCH 4/6] goodixmoc:Add new PID + +Add PID 6594 used by LENOVO +--- + libfprint/drivers/goodixmoc/goodix.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index 9cfdbe6..77278c6 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -1553,6 +1553,7 @@ static const FpIdEntry id_table[] = { + { .vid = 0x27c6, .pid = 0x60A2, }, + { .vid = 0x27c6, .pid = 0x63AC, }, + { .vid = 0x27c6, .pid = 0x639C, }, ++ { .vid = 0x27c6, .pid = 0x6594, }, + { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ + }; + +-- +2.31.1 + + +From 3409938af14d2220a65de3fb9be2fcdd7a6aa4f7 Mon Sep 17 00:00:00 2001 +From: Nelson Jeppesen +Date: Fri, 7 May 2021 13:02:11 -0700 +Subject: [PATCH 5/6] goodixmoc: Add PID 6A94 + +--- + libfprint/drivers/goodixmoc/goodix.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index 77278c6..d67d392 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -1554,6 +1554,7 @@ static const FpIdEntry id_table[] = { + { .vid = 0x27c6, .pid = 0x63AC, }, + { .vid = 0x27c6, .pid = 0x639C, }, + { .vid = 0x27c6, .pid = 0x6594, }, ++ { .vid = 0x27c6, .pid = 0x6A94, }, + { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ + }; + +-- +2.31.1 + + +From 440301fdf65e89d662c26bfa92e0d07874c4f359 Mon Sep 17 00:00:00 2001 +From: boger +Date: Wed, 23 Jun 2021 15:14:33 +0800 +Subject: [PATCH 6/6] goodixmoc: add PID 609C/6584/658C/6592/659C + +add some new PID support, +609C: Framework fingerprint sensor +65xx: Thinkpad series fingerprint sensor +--- + libfprint/drivers/goodixmoc/goodix.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index d67d392..0399c0b 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -1318,6 +1318,10 @@ gx_fp_probe (FpDevice *device) + { + case 0x6496: + case 0x60A2: ++ case 0x609C: ++ case 0x639C: ++ case 0x63AC: ++ case 0x6A94: + self->max_enroll_stage = 12; + break; + +@@ -1549,11 +1553,16 @@ gx_fp_cancel (FpDevice *device) + + static const FpIdEntry id_table[] = { + { .vid = 0x27c6, .pid = 0x5840, }, +- { .vid = 0x27c6, .pid = 0x6496, }, ++ { .vid = 0x27c6, .pid = 0x609C, }, + { .vid = 0x27c6, .pid = 0x60A2, }, +- { .vid = 0x27c6, .pid = 0x63AC, }, + { .vid = 0x27c6, .pid = 0x639C, }, ++ { .vid = 0x27c6, .pid = 0x63AC, }, ++ { .vid = 0x27c6, .pid = 0x6496, }, ++ { .vid = 0x27c6, .pid = 0x6584, }, ++ { .vid = 0x27c6, .pid = 0x658C, }, ++ { .vid = 0x27c6, .pid = 0x6592, }, + { .vid = 0x27c6, .pid = 0x6594, }, ++ { .vid = 0x27c6, .pid = 0x659C, }, + { .vid = 0x27c6, .pid = 0x6A94, }, + { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ + }; +-- +2.31.1 +