VERIFY_FINISH parameetriga programm stops responding. Hakkab vastama
ainult siis, kui kaardilugeja võtakse USB-st välja. Seni ei saa ükski
teine tarkvara kaardiga tööd teha.
Tundub, et ametlik tarkvara on sama probleemiga.
Äkki keegil on kogemus selle situatsiooniga?
Head päeva,
Gleb.
Ega Sa nüüd küll eriti palju detaile ei avaldanud.
Alustades näiteks sellest, et mis libraga Sa kaardi poole pöördud, mis Op süsteemi kasutad jne.
Jutu järgi jääb mulje, et kasutad kaarti madalal tasemel otse PC/SC-ga ja Windowsi peal.
Kui nii, siis ei ole eriti vahet, milline ID-kaardi baastarkvara Sul on, kuna see sellest tööst osa ei võta. Pigem oleneb asi kaardilugeja draiverist ja lugeja enda firmware-st. See viimane on otse tehasest tulnud SPR-idel bugine nagu vanakurat ja enne firmware uuendust kõige viimasele SCM-i saidist saadavale versioonile ei ole üldse mõtet seda lugejat pinpadiga piinata.
Kas sama käitumine on ka siis kui "teised programmid" kindlasti vahepeal kaardi kallal ei käi? PC/SC peaks teoorias olema "mitme kliendi safe" aga praktikast on see kahjuks väga kaugel. Eriti probleemne on asi WinXP-ga, Vista ja 7 all on PC/SC stabiilsem.
Pakun, et vahepeal avastab mingi asi, et kaart pisteti sisse, hakkab selle kallal müttama ja siis tekib Sinu programmi ja selle "asja" vahel deadlock. See "asi" võib olla näiteks Windowsi Certificate Propagation Service või Firefox, mis "avastavad" kaardi sisse pistmise sündmuse ja hakkavad sealt kohe usinalt serte maha lugema. Tasub proovida oma programmi masinas, mis ei ole kunagi ühtegi ID-kaardi softi näinudki. Kui seal ka sama jama, siis on lugeja + draiver kombinatsioon bugine.
Võid proovida ka lihtsat käsureaprogrammi Linuxi alla kompileerida (PC/SC API on identne), seal on "üldine" CCID draiver ja kui see korralikult käitub, siis on SCM-i draiver vigane, kui ei, siis on ilmselt lugeja bugine.
Nii palju kui mina mäletan, oli PINPAD-iga lugejate puhul ka selline ikaldus, et mitte ainult funktsiooni kutsuv thread ei blokeeru, vaid blokeerub ka see thread, kust loodi ühendus PC/SC manageriga. Seega kaardi asünkroonne kasutamine ei ole võimalik muud moodi kui et KOGU kaardiga suhtlemine, alates ühenduse loomisest PC/SC manageriga, pannakse eraldi lõime. Teoorias peaks PC/SC olema thread-safe aga praktikas see paraku päris nii ei ole.
Aga kui Sa valgustaks natuke, et mida Sa teha üritad, siis äkki oskaks soovitada mingit "paremat" ja väheke "high-levelimat" viisi.
Anttix.