laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/42777?usp=email )

 (

1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
 )Change subject: cuart: Fix waiting time to be per-byte instead of total 
timeout
......................................................................

cuart: Fix waiting time to be per-byte instead of total timeout

The previous code multiplied WT by the number of expected bytes,
creating a total timeout proportional to the transfer size. This works
fine for (currently unsupported) high baud rates, but it makes it look
like the reader "freezes" at default rates due to the very long delay.

Just reset it upon rx and do not multiply it so it behaves as expected.

Closes:OS#7012
Change-Id: Ic00040b88e1b204db3f4f3edad09878aa28d35a1
---
M ccid_common/cuart.c
M sysmoOCTSIM/cuart_driver_asf4_usart_async.c
2 files changed, 5 insertions(+), 2 deletions(-)

Approvals:
  Jenkins Builder: Verified
  jolly: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved




diff --git a/ccid_common/cuart.c b/ccid_common/cuart.c
index bb17c4b..737a392 100644
--- a/ccid_common/cuart.c
+++ b/ccid_common/cuart.c
@@ -63,8 +63,9 @@
        int etu_in_us = get_etu_in_us(cuart) + 1;
        cuart->wtime_etu = cuart->wtime_etu ? cuart->wtime_etu : 1;

-       /* timeout is wtime * ETU * expected number of bytes */
-       uint32_t usecs = etu_in_us * cuart->wtime_etu * 
cuart->current_wtime_byte;
+       /* ISO 7816-3 Section 10.2: WT is the max delay between consecutive
+        * characters, not a total transfer timeout. Restart on each byte. */
+       uint32_t usecs = etu_in_us * cuart->wtime_etu;

        /* limit lower wait time to reasonable value */
        if (usecs < 300000)
diff --git a/sysmoOCTSIM/cuart_driver_asf4_usart_async.c 
b/sysmoOCTSIM/cuart_driver_asf4_usart_async.c
index 42c2110..8330523 100644
--- a/sysmoOCTSIM/cuart_driver_asf4_usart_async.c
+++ b/sysmoOCTSIM/cuart_driver_asf4_usart_async.c
@@ -32,6 +32,8 @@
        int rc;
        OSMO_ASSERT(cuart);

+       card_uart_wtime_restart(cuart);
+
        if (cuart->rx_threshold == 1) {
                /* bypass ringbuffer and report byte directly */
                uint8_t rx[1];

--
To view, visit https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/42777?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-ccid-firmware
Gerrit-Branch: master
Gerrit-Change-Id: Ic00040b88e1b204db3f4f3edad09878aa28d35a1
Gerrit-Change-Number: 42777
Gerrit-PatchSet: 2
Gerrit-Owner: Hoernchen <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: jolly <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: lynxis lazus <[email protected]>

Reply via email to