From: Benjamin Berg Date: Mon, 13 Jun 2022 16:05:18 +0200 Subject: goodix: Reset device if storage listing fails When opening the device, query the stored prints. This should usually always succeed (and it should be fast). If it fails, then we are very likely dealing with a corrupted template storage on the device. In that case, emit the command to clear the storage in order to reset the device and get it back into a usable state. --- libfprint/drivers/goodixmoc/goodix.c | 65 +++++++++++++++++++++++++++++++++++ libfprint/drivers/goodixmoc/goodix.h | 2 ++ tests/goodixmoc/custom.pcapng | Bin 61764 -> 73120 bytes tests/goodixmoc/custom.py | 3 ++ tests/goodixmoc/device | 57 +++++++++++++++--------------- 5 files changed, 99 insertions(+), 28 deletions(-) diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index 4eeb721..ab84130 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -1041,6 +1041,47 @@ fp_init_config_cb (FpiDeviceGoodixMoc *self, fpi_ssm_next_state (self->task_ssm); } +static void +fp_init_cb_reset_or_complete (FpiDeviceGoodixMoc *self, + gxfp_cmd_response_t *resp, + GError *error) +{ + if (error) + { + fp_warn ("Template storage appears to have been corrupted! Error was: %s", error->message); + fp_warn ("A known reason for this to happen is a firmware bug triggered by another storage area being initialized."); + fpi_ssm_jump_to_state (self->task_ssm, FP_INIT_RESET_DEVICE); + } + else + { + fpi_ssm_mark_completed (self->task_ssm); + } +} + +static void +fp_init_reset_device_cb (FpiDeviceGoodixMoc *self, + gxfp_cmd_response_t *resp, + GError *error) +{ + if (error) + { + fp_warn ("Reset failed: %s", error->message); + fpi_ssm_mark_failed (self->task_ssm, error); + return; + } + if ((resp->result >= GX_FAILED) && (resp->result != GX_ERROR_FINGER_ID_NOEXIST)) + { + fp_warn ("Reset failed, device reported: 0x%x", resp->result); + fpi_ssm_mark_failed (self->task_ssm, + fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, + "Failed clear storage, result: 0x%x", + resp->result)); + return; + } + + fp_warn ("Reset completed"); + fpi_ssm_mark_completed (self->task_ssm); +} static void fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device) @@ -1065,6 +1106,30 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device) sizeof (gxfp_sensor_cfg_t), fp_init_config_cb); break; + + case FP_INIT_TEMPLATE_LIST: + /* List prints to check whether the template DB was corrupted. + * As of 2022-06-13 there is a known firmware issue that can cause the + * stored templates for Linux to be corrupted when the Windows storage + * area is initialized. + * In that case, we'll get a protocol failure trying to retrieve the + * list of prints. + */ + goodix_sensor_cmd (self, MOC_CMD0_GETFINGERLIST, MOC_CMD1_DEFAULT, + FALSE, + (const guint8 *) &dummy, + 1, + fp_init_cb_reset_or_complete); + break; + + case FP_INIT_RESET_DEVICE: + fp_warn ("Resetting device storage, you will need to enroll all prints again!"); + goodix_sensor_cmd (self, MOC_CMD0_DELETETEMPLATE, MOC_CMD1_DELETE_ALL, + FALSE, + NULL, + 0, + fp_init_reset_device_cb); + break; } diff --git a/libfprint/drivers/goodixmoc/goodix.h b/libfprint/drivers/goodixmoc/goodix.h index 23e142a..56b2d17 100644 --- a/libfprint/drivers/goodixmoc/goodix.h +++ b/libfprint/drivers/goodixmoc/goodix.h @@ -35,6 +35,8 @@ typedef enum { typedef enum { FP_INIT_VERSION = 0, FP_INIT_CONFIG, + FP_INIT_TEMPLATE_LIST, + FP_INIT_RESET_DEVICE, FP_INIT_NUM_STATES, } FpInitState; diff --git a/tests/goodixmoc/custom.pcapng b/tests/goodixmoc/custom.pcapng index eb58d86..b5e2d89 100644 --- a/tests/goodixmoc/custom.pcapng +++ b/tests/goodixmoc/custom.pcapng @@ -1,43 +1,25 @@ -M<+6Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz (with SSE4.2)Linux 5.13.15-200.fc34.x86_643Dumpcap (Wireshark) 3.4.8 (Git commit 3e1ffae201b8)P@usbmon1  Linux 5.13.15-200.fc34.x86_64P`(@@E끖S5UMa -``@@L͂S5UMal `pMML͂S5-UMa Ea)p`C@@L͂C5->UMa ``^@@C͂S5-lj`N@@@͂C5->UMa ``\@@F͂S5-UMa ``@@C͂S5-UMa `` @@L͂S5-UMa``@@E끖S5-VMa,3`` 6@@E끖S5-VMa ``@@E끖S5-VMaZ ``\@@@E끖S5-WMax``R@@E끖S5-WMa| ``@@E끖S5-WMa\``S@@E끖S5-WMa ``@@@8CS5- ``@@:CC5-WMaט ``@@6CS5- `}р6CC5-WMa @@%]yppMM@5CS5-WMa  6Dp`@@@5CC5->WMa2 ``@@@5CS5-WMaE}``@@4CS5-CS5-CC5-XMa@@__dS4pOO?CS5-XMaۀodP@͇p`@@?CC5->XMa``@@=CS5-CS5-CC5-XMa@@prW pj,MM0CS5-XMaj toq^p`,@@0CC5->XMa ``-@@@;CS5-XMa``K@@6CS5-XMaKL``@@3CS5-YMa9 ``@@@E끖S5-`ҀE끖C5-YMaD?@@$uI:`z@@E끖S5-YMa``@@@E끖S5-YMa`` @@E끖S5-``^ @@E끖S5-YMaC ``1 @@cS5-YMa" `` @@@eS5-ZMaU``Ka@@`S5-ZMaL ``@@lS5-ZMak``p@@cS5-``}@@dC5-ZMa7s ``A@@`S5-ZMav ``@@@eS5-pmMMdS5-ZMa - }%p`@@dC5->ZMa - ``@@`S5-ZMax ``!@@lS5-[Ma!``%@@cS5-<[Ma\``b%@@cC5-[Ma``f%@@`S5-<[Ma` %Ҁ`C5-[MaK@@:D` %@@dS5-<[MaK``)'@@dC5-[Ma`` +'@@`S5-<[MaI`+'Ҁ`C5-[Ma@@;NL~lpl/'MM@hS5-[Ma Bp`/'@@@hC5->[Ma1 ``*1'@@@eS5-<[Maj``3'@@@eC5-[Ma``4'@@@eS5-<[Ma*`5'Ҁ@eC5-[Ma@@<ykN`6'@@@hS5-<[Ma``(@@@hC5-[MaT``t(@@`S5-<[Ma`(`C5-[Ma=Evy)pvyp(OOdS5-[Ma A9\Np`?(@@dC5->[Ma``X(@@`S5-<[Ma``_(@@`C5-[Ma``m(@@cS5-<[Ma` -(ҀcC5-[MaJ@@>P#`(@@mS5-<[MaA``N/@@mC5-[Ma6 ``/@@cS5-<[Ma7 `O/ҀcC5-[Ma8 @@?H_d6gp/OOfS5-[Ma9  dPp`/@@fC5->[Ma9: ``/@@lS5-<[MaH; ``/@@lC5-[Ma< ``/@@lS5-<[Ma= `=/ҀlC5-[Ma}> @@@|Y`T/@@fS5-<[Ma? ``D1@@fC5-[Ma ``1@@cS5-<[Ma `41ҀcC5-[Mat @@AQUxpt1MMmS5-[Ma !9p`1@@mC5->[Ma ``,1@@cS5-<[Mal ``1@@cC5-[Ma ``1@@`S5-<[MaQ `|1Ҁ`C5-[Ma @@B2m<`1@@dS5-<[Ma ``^1@@dC5-[Ma``1@@`S5-<[Ma"`1`C5-[MaCES||vwJ|vwp51OO@hS5-[Mau"{AƵyp`|1@@@hC5->[Ma``1@@@eS5-<[Ma``1@@@eC5-[Ma%``X1@@@eS5-<[Ma`1Ҁ@eC5-[Ma@@DOݶ`%1@@@hS5-<[Mae``$9@@@hC5-\MaǕ``q&9@@`S5-<\Maq`!'9Ҁ`C5-\Ma!@@EW]d j!pl(9OOdS5-\Mal#BdP֚p`(9@@dC5->\Maݙ``.*9@@`S5-<\Ma.```+9@@`C5-\Ma```,9@@cS5-<\Ma`:-9ҀcC5-\Ma:@@Ff?;`*.9@@mS5-<\Ma*``:@@mC5-\MaI``z:@@cS5-<\MazK`):ҀcC5-\Ma)L@@G,/1vp:MMfS5-\MaP $$i p`:@@fC5->\MaQ ``[:@@lS5-<\Ma[R``-:@@lC5-\Ma-T``:@@lS5-<\MaU`/:ҀlC5-\Ma/V@@HJ"0`v:@@fS5-<\MavW``ؽ;@@fC5-\Ma. ``&;@@cS5-<\Ma&0 `;cC5-\Ma0 IE+yuwE\Ma2 ``;@@cS5-<\Ma3 ``$;@@cC5-\Ma$5 ``3;@@`S5-<\Ma36 `;Ҁ`C5-\Ma6 @@Jcjh`;@@P`S5-<\Ma7 ``rB@@P`C5-]Ma2+``B@@\`S5-<]Ma,`BҀ\`C5-]MaN-@@K{OYxpBOOZ`S5-]Ma.&}dPUnMp`aC@@Z`C5->]Ma!/``C@@Q`S5-<]MaG0``C@@Q`C5-]Ma1``C@@V`S5-<]MaC3`CҀV`C5-]Ma3@@L`FC@@@X`S5-<]Ma5``D@@@X`C5-]Ma``+D@@\`S5-<]Ma`DҀ\`C5-]MaP@@MT-OpfDOO@^`S5-]Ma&'mA~Ϥp`D@@@^`C5->]Mag``D@@Y`S5-<]Ma``D@@Y`C5-]Ma``D@@_`S5-<]Ma`MDҀ_`C5-]Ma @@N7@`D@@T`S5-<]MaK -``D@@T`C5-]Ma -``D@@]`S5-<]Ma `gDҀ]`C5-]Ma' @@O,}0ODҲV`S5-]Marr(jdCFP1-00000000-0-00000000-nobodyzQR`D@@V`C5->]Mar``D@@V`S5-<]Ma``7D@@V`C5-]Ma``=D@@]`S5-<]Ma`DҀ]`C5-]Maa@@PF `D@@T`S5-<]MaF``NN@@T`C5-]Ma ``N@@_`S5-<]Ma `MNҀ_`C5-]Ma @@Q}9[S(llNLLY`S5-]Ma, )s]El`N@@Y`C5->]Mat ``N@@@^`S5-<]Ma ``N@@@^`C5-]Mau ``N@@\`S5-<]Ma{ `!NҀ\`C5-]Ma @@Ro`4N@@@X`S5-<]Ma ``\N@@@X`C5-]Ma ``)N@@V`S5-<]Ma `NҀV`C5-]MaX @@So-spLNMMQ`S5-]Ma *[Tp`N@@Q`C5->]MaR ``N@@Z`S5-<]Ma ``NN@@Z`C5-]Ma ``N@@\`S5-<]Mam `NҀ\`C5-]Ma @@Tc !`N@@P`S5-<]MaC ``yN@@P`C5-]Ma9 ``(N@@P`S5-<]Ma! ``uN@@P`C5-]Ma5# UCFP1-00000000-0-00000000-nobodyCFP1-00000000-0-00000000-nobodyFP1-0000000`lxNLLP`S5-]Ma8* +8Ol`N@@P`C5->]Ma* ``N@@P`S5-<]Ma+ ``GN@@P`C5-]Ma, ``N@@\`S5-<]MaS- `NҀ\`C5-]Ma- @@V;Ϡ`O@@Z`S5-<]Ma. ``_O@@Z`C5-]Ma/ ``O@@Q`S5-<]MaY0 `OҀQ`C5-]Ma0 @@WY-q=puOOOV`S5-]Ma52 ,W#p`O@@V`C5->]Ma2 ``O@@@X`S5-<]Ma3 ``OO@@@X`C5-]Ma5 ``eO@@\`S5-<]Ma%6 `EOҀ\`C5-]Ma7 @@X( Wv` O@@@^`S5-<]MaT8 ``R@@@^`C5-^MaU``qR@@Y`S5-<^Ma`RҀY`C5-^MaU@@Y^d0'BRll_`S5-^Ma,,-$rT `R@@_`C5->^Ma,``R@@T`S5-<^Ma6``M -R@@T`C5-^Ma`` R@@]`S5-<^Ma` RҀ]`C5-^Maa@@Z>B<` R@@V`S5-<^Ma``ER@@V`C5-^Ma52``[GR@@V`S5-<^Ma3``HR@@V`C5-^Ma:5[^d6CFP1-00000000-0-00000000-nobodyCFP1-00000000-0-00000000-nobodygfOGrgTeuR 0`l1LRLL]`S5-^Ma8 .e1l`vLR@@]`C5->^Ma8 ``MR@@T`S5-<^MaW:``Z@@T`C5-^MaJ ``Z@@_`S5-<^Ma6 `ZҀ_`C5-^Ma @@\C N,`Z@@Y`S5-<^Ma' ``Z@@Y`C5-^MaY ``Z@@@^`S5-<^Ma `ZҀ@^`C5-^MaR @@]C^d6DJlZLL\`S5-^Mav /lk88,l`%[@@\`C5->^Ma ``[@@@X`S5-<^Ma ``[@@@X`C5-^Ma- ``][@@V`S5-<^Ma `[ҀV`C5-^Ma: @@^j,"`q[@@Q`S5-<^Ma ``A[@@Q`C5-^Ma -``[@@Z`S5-<^Ma! -`[ҀZ`C5-^Ma~ -@@_^d6.p[OO\`S5-^Ma -0#؄1p`K[@@\`C5->^Ma˕ -``[@@P`S5-<^Ma -``r[@@P`C5-^Ma -``[@@P`S5-<^Mab -`P[ҀP`C5-^MaО -@@`Xp`m[@@P`S5-<^Ma -``h@@P`C5-_Maq``ah@@P`S5-<_Mas`hҀP`C5-_Mat@@a@\d/\"N*hll\`S5-_Maju,,1$*T`h@@\`C5->_Mau,``h@@Z`S5-<_Mav``h@@Z`C5-_MaQ}``h@@Q`S5-<_Ma`'hҀQ`C5-_Mag@@bqK;`oh@@V`S5-<_Ma``i@@V`C5-_Ma\ ``i@@@X`S5-<_Ma^ ``3i@@@X`C5-_Mas` c]\dGCFP1-00000000-0-00000000-nobodyCFP1-00000000-0-00000000-nobodygfOGrgTeuR 'Y0`ljiLL\`S5-_Mad 2=›ml`i@@\`C5->_Mae ``Gi@@@^`S5-<_Maf ``r@@@^`C5-`Ma``fr@@Y`S5-<`Maf`͔rҀY`C5-`Ma@@d 7m`r@@_`S5-<`Ma``xr@@_`C5-`Max``r@@T`S5-<`Ma`rҀT`C5-`Ma@@e \dG+1(,rҲ]`S5-`Ma -rr3j#dCFP1-00000000-0-00000000-nobodys`r@@]`C5->`Ma r``r@@V`S5-<`Ma ``r@@V`C5-`Ma ``r@@V`S5-<`Ma`NrҀV`C5-`MaN@@f%*`r@@]`S5-<`Ma``Aw@@]`C5-`MaAx``w@@T`S5-<`May`\wҀT`C5-`Ma\z@@geB o~ \ No newline at end of file +M<+6Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz (with SSE4.2)Linux 5.17.12-300.fc36.x86_643Dumpcap (Wireshark) 3.6.2 (Git commit 626020d9b3c3)P@usbmon1  Linux 5.17.12-300.fc36.x86_64P`hWC=@@w&Sbf``hjIX=@@I'Sb$ `phPX=MMI'S-b& Ea)p`hKQX=@@I'C->b ' ``hRX=@@I'S-lj`hy[X=@@I'C->b91 ``h\X=@@I'S-b: ``hDeX=@@F'S-b] ``hvX=@@F'S-b/ ``hrZ\=@@I'S-b4 ``h8_\=@@I'S-bB ``h;m\=@@F'S-bR``h\C=@@F'S-b=``hV/=@@I'S-``hG2=@@I'C-bGA``h`3=@@I'S-b+ ``h=@@I'S-b/ + ``ha=@@F'S-b1``h쫋=@@I'S-b ``h¹=@@I'S-bxQ``h=@@F'S-b``h20=@@F'S-ԀphW`=OOF'S-b- VAjbp`h`=@@F'C->b~- ``hb=@@I'S-b1``h:=@@I'S-bK ``h =@@F'S-#Ei~x|~x|ph =OOF'S-b?eA.<p`hR=@@F'C->b?``h`=@@F'S-b``hgn=@@I'S-b^ ``hd=@@I'S-bo``hA=@@F'S-b``h0|=@@F'S-bbk``hf=@@I'S-bˍ ``h=@@I'S-bjo``hNj=@@F'S-b^ ``hY=@@F'S-b(``hJf=@@I'S-bp ``h&=@@I'S-b@= ``hz=@@F'S- ``h~=@@F'C-b>C ``h=@@F'S-b``hX=@@F'S-`hZ=I'C-bڞ@@<y誠``h=@@I'S-b( ``h]=@@I'S-PW6`hc=@@F'S-bH``h=@@I'S-b8``h4=@@F'S-bB& ``ht=@@F'S-b``hQ=@@I'S-bf ``h=@@I'S-bڧ``h٫=@@F'S-bp ``h=@@F'S-@@I'C-bb ``h-g>@@F'S-F'C-bd @@MYd!ph/i>OOF'S-b/f 'dPp`hi>@@F'C->bf ``hj>@@I'S-@@I'C-bh ``hBm>@@I'S-I'C-bj @@N7ϠB`hjo>@@w&S-@@w&C-b``h>@@@w&S-@w&C-b@@O}""yAph>MMw&S-b (!#cp`h>@@w&C->b ``h>@@w&S-@@w&C-b``h >@@w&S-w&C-by@@PF"`h>@@w&S-@@w&C-ḃ``h>@@w&S-w&C-bmQE'|~zw4~zwph>OOw&S-bB)hA}p`h>@@w&C->bk``h>@@w&S-@@w&C-b}``hF>@@w&S-w&C-b@@RoT +`hT>@@w&S-@@w&C-bS ``h5%>@@w&S-w&C-bk @@Sw[df:vph;'>OO@w&S-b *xdP%:p`h(>@@@w&C->b ``h[)>@@w&S-@@w&C-b ``h+>@@@w&S-@w&C-bG @@T\j%`h,>@@w&S-@@w&C-b@< ``hX>@@w&S- `hσ>w&C-b> @@UX_ph>MMw&S-bB +c;p`h@>@@w&C->bC ``h>@@w&S-@@w&C-bF ``h>@@w&S-w&C-b'H @@V;n^`h>@@w&S-@@w&C-bp ``h>@@@w&S-@w&C-br WEZ|\|phu>OOw&S-b5s ,WAwu&9p`h>@@w&C->bxs ``h>@@@w&S-@@@w&C-bv ``hJ>@@w&S-w&C-bux @@X( Wv`h޾>@@w&S-@@w&C-b``h>@@w&S-w&C-bv@@YNd"Kmph+>OOw&S-b-ndP]Yap`hp>@@w&C->b``hx>@@w&S-@@w&C-bI``hA>@@w&S-w&C-b+@@Z> `h؎>@@w&S-@@w&C-b~``h>@@w&S-w&C-b@@[tJ}ph0 >MMw&S-b .\p`hq >@@w&C->b ``ho >@@w&S-@@w&C-b<``hv >@@@w&S-@w&C-bt@@\Cr`h>@@w&S-@@w&C-b``hG>@@@w&S-@w&C-b6]E"~}x Ç}xphI>OOw&S-bq/Av(p`h6J>@@w&C->b``h?K>@@w&S-@@w&C-b``hN>@@w&S-w&C-b@@^jJ`hIP>@@w&S-@@w&C-b6``hl%>@@w&S-w&C-bM@@_r]d6RphWn%>OOw&S-b0]dP(p`hn%>@@w&C->b``ho%>@@@w&S-@@@w&C-b``hvs%>@@w&S-w&C-be@@`X7`hpu%>@@@w&S-@@@w&C-bq``h<'>@@w&S-w&C-bs@@aCphA'>OOw&S-b/x1MA +p`hCB'>@@w&C->bx``hC'>@@w&S-@@w&C-b{``hF'>@@w&S-w&C-b}@@bqGU`hH'>@@w&S-@@w&C-b``hJ'>@@w&S-w&C-b^@@cjh4h$M'>w&S-bdrr2j3dCFP1-00000000-0-00000000-nobodyEM@`h0O'>@@w&C->bpr``hP'>@@w&S-@@w&C-b``hR'>@@w&S-w&C-b@@d `hgT'>@@w&S-@@w&C-b(T ``h1>@@@w&S-@w&C-biV @@e7#lh!1>LLw&S-bW 3VNl`h!1>@@w&C->bX ``h%#1>@@@w&S-@@@w&C-bZ ``h%1>@@w&S-w&C-b\ @@f%jI_`h'1>@@w&S-@@w&C-b|^ ``h)1>@@w&S-w&C-bx` @@g%C~ph-1>MMw&S-b4d 4*p`hE.1>@@w&C->bd ``h/1>@@w&S-@@w&C-b;i ``h41>@@w&S-w&C-bk @@h nG×`h61>@@@w&S-@@@w&C-bDz ``hE1>@@w&S-w&C-b| il(dCFP1-00000000-0-00000000-nobodyDlhM1>LL@w&S-b 5I賟l`hM1>@@@w&C->b3 ``h.O1>@@w&S-@@w&C-b ``hP1>@@w&S-w&C-b @@j `h S1>@@w&S-S1>@@w&C-b~ ``hoT1>@@w&S-w&C-b| @@kBC~zphV1>OOw&S-b 6r#`vop`hV1>@@w&C->b6 ``hX1>@@w&S-@@w&C-bϏ ``hZ1>@@w&S-w&C-b @@l] +`hb\1>@@w&S-@@w&C-b=``htK4>@@w&S-w&C-b?@@mE\d_hCM4>llw&S-bCA,,7$Wy`hM4>@@w&C->bA,``hN4>@@@w&S-@@@w&C-bD``hR4>@@w&S-w&C-bG@@ntܺaP`hqT4>@@@w&S-@@@w&C-b``h4>@@w&S-w&C-bo\d/dCFP1-00000000-0-00000000-nobodyb1hʹd@@. m00000000-0-00000000-nobodyb lh4>LLw&S-b 8E5m]l`h4>@@w&C->b ``h74>@@w&S-@@w&C-bw ``h=>@@w&S-w&C-btz @@pO^h`h=>@@w&S-@@w&C-bA| ``h=>@@w&S-w&C-b[~ @@q\d/rlh=>LL@w&S-b 9LLTl`h==>@@@w&C->b= ``h=>@@w&S-@@w&C-bv ``h#=>@@@w&S-@w&C-b @@r,C{a`h=>@@w&S-@@w&C-b ``hl=>@@w&S-w&C-bܓ @@sN\d/t?ph%=>OOw&S-b% :w#zp`h=>@@w&C->b ``h~=>@@w&S-@@w&C-b ``h=>@@w&S-w&C-b @@tQGP2`h=>@@w&S-@@w&C-b``h}w>@@w&S-w&C-b@@uIFd޴vhRw>llw&S-bR,,;$R`hw>@@w&C->b,``hw>@@w&S-@@w&C-b-``hx>@@w&S-w&C-b?@@vx`hx>@@@w&S-@@@w&C-bm``hx>@@w&S-w&C-bfpw +Fd1dCFP1-00000000-0-00000000-nobodyb1hʹd@@. K00000000-0-00000000-nobodyb lh4x>LL@w&S-b4s <*l`hzx>@@@w&C->bzs ``hx>@@w&S-@@w&C-b``hw^>@@w&S-w&C-b@@xT~'`h_>@@w&S-@@w&C-b``hKa>@@w&S-w&C-bw +@@yTFd1q|&hHk>w&S-brr=jdCFP1-00000000-0-00000000-nobody&K`hYr>@@w&C->br``hs>@@w&S-@@w&C-b``hmu>@@@w&S-@w&C-b@@z}vNֈ`h8w>@@w&S-@@w&C-bt``h`\>@@@w&S-@w&C-b@@{=J \ No newline at end of file diff --git a/tests/goodixmoc/custom.py b/tests/goodixmoc/custom.py index 1fb513a..38fdd26 100755 --- a/tests/goodixmoc/custom.py +++ b/tests/goodixmoc/custom.py @@ -25,6 +25,9 @@ assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR) d.open_sync() +# 1. verify clear storage command, 2. make sure later asserts are good +d.clear_storage_sync() + template = FPrint.Print.new(d) def enroll_progress(*args): diff --git a/tests/goodixmoc/device b/tests/goodixmoc/device index 9fb39e5..1e209a1 100644 --- a/tests/goodixmoc/device +++ b/tests/goodixmoc/device @@ -1,14 +1,14 @@ P: /devices/pci0000:00/0000:00:14.0/usb1/1-3 -N: bus/usb/001/053=12010002EF000040C627966400010102030109022000010103A0320904000002FF0000040705830240000007050102400000 -E: DEVNAME=/dev/bus/usb/001/053 +N: bus/usb/001/023=12010002EF000040C627966400010102030109022000010103A0320904000002FF0000040705830240000007050102400000 +E: DEVNAME=/dev/bus/usb/001/023 E: DEVTYPE=usb_device E: DRIVER=usb E: PRODUCT=27c6/6496/100 E: TYPE=239/0/0 E: BUSNUM=001 -E: DEVNUM=053 +E: DEVNUM=023 E: MAJOR=189 -E: MINOR=52 +E: MINOR=22 E: SUBSYSTEM=usb E: ID_VENDOR=Goodix_Technology_Co.__Ltd. E: ID_VENDOR_ENC=Goodix\x20Technology\x20Co.\x2c\x20Ltd. @@ -23,6 +23,7 @@ E: ID_BUS=usb E: ID_USB_INTERFACES=:ff0000: E: ID_VENDOR_FROM_DATABASE=Shenzhen Goodix Technology Co.,Ltd. E: ID_AUTOSUSPEND=1 +E: ID_PERSIST=0 E: ID_PATH=pci-0000:00:14.0-usb-0:3 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3 A: authorized=1\n @@ -40,8 +41,8 @@ A: bmAttributes=a0\n A: busnum=1\n A: configuration=XXXX_MOC_B0\n H: descriptors=12010002EF000040C627966400010102030109022000010103A0320904000002FF0000040705830240000007050102400000 -A: dev=189:52\n -A: devnum=53\n +A: dev=189:22\n +A: devnum=23\n A: devpath=3\n L: driver=../../../../../bus/usb/drivers/usb L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1c/device:1d/device:20 @@ -51,16 +52,16 @@ A: ltm_capable=no\n A: manufacturer=Goodix Technology Co., Ltd.\n A: maxchild=0\n L: port=../1-0:1.0/usb1-port3 -A: power/active_duration=29262\n +A: power/active_duration=22667\n A: power/autosuspend=2\n A: power/autosuspend_delay_ms=2000\n -A: power/connected_duration=57399\n +A: power/connected_duration=917616\n A: power/control=auto\n A: power/level=auto\n A: power/persist=1\n -A: power/runtime_active_time=29308\n +A: power/runtime_active_time=22809\n A: power/runtime_status=active\n -A: power/runtime_suspended_time=27850\n +A: power/runtime_suspended_time=894564\n A: power/wakeup=disabled\n A: power/wakeup_abort_count=\n A: power/wakeup_active=\n @@ -77,29 +78,29 @@ A: rx_lanes=1\n A: serial=XXXX_MOC_B0\n A: speed=12\n A: tx_lanes=1\n -A: urbnum=394\n +A: urbnum=298\n A: version= 2.00\n P: /devices/pci0000:00/0000:00:14.0/usb1 -N: bus/usb/001/001=12010002090001406B1D020013050302010109021900010100E0000904000001090000000705810304000C +N: bus/usb/001/001=12010002090001406B1D020017050302010109021900010100E0000904000001090000000705810304000C E: DEVNAME=/dev/bus/usb/001/001 E: DEVTYPE=usb_device E: DRIVER=usb -E: PRODUCT=1d6b/2/513 +E: PRODUCT=1d6b/2/517 E: TYPE=9/0/1 E: BUSNUM=001 E: DEVNUM=001 E: MAJOR=189 E: MINOR=0 E: SUBSYSTEM=usb -E: ID_VENDOR=Linux_5.13.15-200.fc34.x86_64_xhci-hcd -E: ID_VENDOR_ENC=Linux\x205.13.15-200.fc34.x86_64\x20xhci-hcd +E: ID_VENDOR=Linux_5.17.12-300.fc36.x86_64_xhci-hcd +E: ID_VENDOR_ENC=Linux\x205.17.12-300.fc36.x86_64\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=0513 -E: ID_SERIAL=Linux_5.13.15-200.fc34.x86_64_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 +E: ID_REVISION=0517 +E: ID_SERIAL=Linux_5.17.12-300.fc36.x86_64_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: @@ -122,11 +123,11 @@ A: bMaxPacketSize0=64\n A: bMaxPower=0mA\n A: bNumConfigurations=1\n A: bNumInterfaces= 1\n -A: bcdDevice=0513\n +A: bcdDevice=0517\n A: bmAttributes=e0\n A: busnum=1\n A: configuration=\n -H: descriptors=12010002090001406B1D020013050302010109021900010100E0000904000001090000000705810304000C +H: descriptors=12010002090001406B1D020017050302010109021900010100E0000904000001090000000705810304000C A: dev=189:0\n A: devnum=1\n A: devpath=0\n @@ -136,15 +137,15 @@ A: idProduct=0002\n A: idVendor=1d6b\n A: interface_authorized_default=1\n A: ltm_capable=no\n -A: manufacturer=Linux 5.13.15-200.fc34.x86_64 xhci-hcd\n +A: manufacturer=Linux 5.17.12-300.fc36.x86_64 xhci-hcd\n A: maxchild=12\n -A: power/active_duration=219578717\n +A: power/active_duration=164289796\n A: power/autosuspend=0\n A: power/autosuspend_delay_ms=0\n -A: power/connected_duration=219649620\n +A: power/connected_duration=164360220\n A: power/control=auto\n A: power/level=auto\n -A: power/runtime_active_time=219589127\n +A: power/runtime_active_time=164331876\n A: power/runtime_status=active\n A: power/runtime_suspended_time=0\n A: power/wakeup=disabled\n @@ -163,14 +164,14 @@ A: rx_lanes=1\n A: serial=0000:00:14.0\n A: speed=480\n A: tx_lanes=1\n -A: urbnum=4325\n +A: urbnum=2097\n A: version= 2.00\n P: /devices/pci0000:00/0000:00:14.0 E: DRIVER=xhci_hcd E: PCI_CLASS=C0330 E: PCI_ID=8086:9DED -E: PCI_SUBSYS_ID=17AA:2292\n +E: PCI_SUBSYS_ID=17AA:2292 E: PCI_SLOT_NAME=0000:00:14.0 E: MODALIAS=pci:v00008086d00009DEDsv000017AAsd00002292bc0Csc03i30 E: SUBSYSTEM=pci @@ -183,7 +184,7 @@ E: ID_MODEL_FROM_DATABASE=Cannon Point-LP USB 3.1 xHCI Controller A: ari_enabled=0\n A: broken_parity_status=0\n A: class=0x0c0330\n -H: config=8680ED9D060490021130030C00008000040022EA000000000000000000000000000000000000000000000000AA179222000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F000000004C084B0100000000316000000000000000000000000000000180C2C1080000000000000000000000059087001803E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000000000000000000008000000040000000000000000000000000000000000000000000000000000000800000004000000000000000000000000000000000000000000000000000000B50F320112000000 +H: config=8680ED9D060490021130030C00008000040022EA000000000000000000000000000000000000000000000000AA179222000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F00000000F507312600000000316000000000000000000000000000000180C2C1080000000000000000000000059087001803E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000000000000000000008000000040000000000000000000000000000000000000000000000000000000800000004000000000000000000000000000000000000000000000000000000B50F320112000000 A: consistent_dma_mask_bits=64\n A: d3cold_allowed=1\n A: dbc=disabled\n @@ -201,8 +202,8 @@ A: msi_bus=1\n A: msi_irqs/128=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 11 12 2112 12\nxHCI ring segments 46 50 4096 50\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/control=on\n -A: power/runtime_active_time=219589302\n +A: power/control=auto\n +A: power/runtime_active_time=164332777\n A: power/runtime_status=active\n A: power/runtime_suspended_time=0\n A: power/wakeup=enabled\n