Cancelacion del cajero con pinpad Lane3000

ANTES: el Y03 salia sin mirar el buffer y el pinpad se reiniciaba. FIX: la DLL drena el puerto y lee el aviso del pinpad ANTES de decidir

01 / ANTES: el Y03 sale a ciegas 02 / FIX (build 04-11 18:22): leer ANTES de decidir 03 / FIX, sin X del cliente X (cancela) Y0E Y02 01 (espontaneo) ESC cancelar BUG: Purge() recien dentro del Tx del Y03, descarta el Y0E Y03 02N fuera de secuencia Y0E Y03 08 (error de secuencia) CRASH: se reinicia (byte 00) X (cancela) Y0E Y02 01 (espontaneo) ESC cancelar FIX 1: drena el puerto 2 s ANTES de decidir FIX 2: reconoce el Y0E Y02 01 FIX 3: NO envia el Y03 (cancelada en el PinPad) queda en reposo, sin reinicio ESC cancelar Y03 02N (nada pendiente tras drenar 2 s) FIX 4: respuesta en 1-4 s, timeout 6 s (antes 2) Cajero teclado POS POS pos_card.cpp DLL PPVI ComandoY03 Driver RS232 buffer RX Pinpad Lane3000 Cliente tecla X Legend request return security async trace

Por que fallaba

  • • La X del cliente genera un Y0E Y02 01 que queda en el buffer del driver
  • • Purge() lo descartaba dentro del Tx del propio Y03: la decision ya estaba tomada
  • • Y03 fuera de secuencia = Y0E 08; con la tarjeta ya retirada el pinpad se reinicia

EL FIX (ComandoY03)

  • • ComandoY03 vacia el puerto antes de decidir y reconoce el Y0E
  • • En la cancelacion drena durante 2 s: cubre la X simultanea al ESC
  • • Si igual llega un 08, manda Y06 de inmediato

Validado 04-11 en la VM

  • • 3 ciclos X luego ESC: cero bytes al pinpad
  • • ESC y X simultaneos: Y03 02N, el pinpad responde Y0E Y02 01, sin 08
  • • Sin X: Y03 02N y el pinpad se libera en 1,3 s