Einzelnen Beitrag anzeigen

Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Swissbit TSE - Kurzzeitiges Entfernen der TSE wird nicht erkannt

  Alt 24. Sep 2020, 23:43
Mir ist ein Phänomen aufgefallen, welches ich euch nicht vorenthalten möchte.

Bei drei meiner Kunden tritt regelmäßig ein Fehler auf, den ich versucht habe einzugrenzen. Beim Kassieren, wenn die Funktion "worm_transaction_finish" aufgerufen wird, erhalte ich in unregelmäßigen Abständen bei diesen Kunden den Fehler "WORM_ERROR_IO".

Zuerst dachte ich defekte TSE. Denn bei fast allen Kunden funktioniert die Software. Nur nicht bei diesen drei. Ich habe mir dann die Hardware der Kunden angeben lassen. Auffallend ist, dass alle die TSE in einem Laptop verwenden. Mein erster Gedanke war "Stromsparmodus". Bei allen Geräten habe ich den Stromsparmodus ausgeschaltet. Siehe da. Der Fehler war bei zwei Computern weg. Bei einem wurde es weniger. Anscheinend hat der Stromsparmodus die TSE kurzzeitig ausgeworfen und wieder aktiviert.

Ich habe etwas weiter im Programm nachgeschaut und versucht den Fehler zu provozieren, in dem ich die TSE einfach entfernt habe und wieder eingesteckt habe. Ich frage regelmäßig die Restzeit bis zum nächsten Selbsttest ab und ob der Selbsttest durchgeführt wurde. Witzigerweise wurden mir bei den Funktionen "worm_info_hasPassedSelfTest" und worm_info_timeUntilNextSelfTest gültige werte angegeben. hasPassedSelfTest war true, obwohl dieser eigentlich false sein müsste, denn die TSE wurde ja kurz herausgezogen und wieder eingesteckt. Damit ist ja zwingend ein Selbsttest vorgeschrieben.

Ich habe nach einiger Zeit herausgefunden, dass ein neuer WormContext korrekte Werte liefert. Der alte WormContext hat aber bei allen Funktionen Werte geliefert, denen man nicht ansieht, dass diese falsch sind und eine Exception wurde nicht ausgelößt.

Das bedeutet im Umkehrschluss, einen WormContext sollte man so kurz wie möglich offen halten, denn man weis nicht wirklich wie lange dieser gültig ist. Eine Funktion der die Gültigkeit eines WormContext angibt, gibt es eigentlich nicht.

Vielleicht hilft dem einen oder anderen diese Info
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat