ISO7816_Init: Initialized with USART
* ISO7816_Init: Takes Usart_info and CLK_SLAVE/CLK_MASTER as param
* ISO7816_SendChar, ISO7816_GetChar: Usart_info is passed
* ISO7816_Set_Reset_Pin function for CCID part
* iso7816_4.c: BOARD_ISO7816_BASE_USART replaced by USART_SIM
* Redundant _ISO7816_Init, _ISO7816_SendChar, _ISO7816_GetChar
functions removed
* All simtrace modes use iso7816_4.c functions instead of redefined
_ISO7816_xxx functions
diff --git a/firmware/src_simtrace/phone.c b/firmware/src_simtrace/phone.c
index 2cc9790..7c1adeb 100644
--- a/firmware/src_simtrace/phone.c
+++ b/firmware/src_simtrace/phone.c
@@ -99,9 +99,10 @@
{VCC_FWD, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
};
-
static const Pin pinPhoneRST = PIN_ISO7816_RST_PHONE;
+static struct Usart_info usart_info = {.base = USART_PHONE, .id = ID_USART_PHONE};
+
#define PR TRACE_INFO
/* ===================================================*/
@@ -150,95 +151,6 @@
PIO_DisableIt( &pinPhoneRST ) ;
}
-/**
- * Get a character from ISO7816
- * \param pCharToReceive Pointer for store the received char
- * \return 0: if timeout else status of US_CSR
- */
-/* FIXME: This code is taken from cciddriver.c
- --> Reuse the code!!! */
-uint32_t _ISO7816_GetChar( uint8_t *pCharToReceive )
-{
- uint32_t status;
- uint32_t timeout=0;
-
- TRACE_DEBUG("--");
-
- if( StateUsartGlobal == USART_SEND ) {
- while((USART_PHONE->US_CSR & US_CSR_TXEMPTY) == 0) {}
- USART_PHONE->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;
- StateUsartGlobal = USART_RCV;
- }
-
- /* Wait USART ready for reception */
- while( ((USART_PHONE->US_CSR & US_CSR_RXRDY) == 0) ) {
- if(timeout++ > 12000 * (BOARD_MCK/1000000)) {
- TRACE_DEBUG("TimeOut\n\r");
- return( 0 );
- }
- }
-
- /* At least one complete character has been received and US_RHR has not yet been read. */
-
- /* Get a char */
- *pCharToReceive = ((USART_PHONE->US_RHR) & 0xFF);
-
- status = (USART_PHONE->US_CSR&(US_CSR_OVRE|US_CSR_FRAME|
- US_CSR_PARE|US_CSR_TIMEOUT|US_CSR_NACK|
- (1<<10)));
-
- if (status != 0 ) {
- TRACE_DEBUG("R:0x%X\n\r", status);
- TRACE_DEBUG("R:0x%X\n\r", USART_PHONE->US_CSR);
- TRACE_DEBUG("Nb:0x%X\n\r", USART_PHONE->US_NER );
- USART_PHONE->US_CR = US_CR_RSTSTA;
- }
-
- /* Return status */
- return( status );
-}
-
-/**
- * Send a char to ISO7816
- * \param CharToSend char to be send
- * \return status of US_CSR
- */
-uint32_t _ISO7816_SendChar( uint8_t CharToSend )
-{
- uint32_t status;
-
- TRACE_DEBUG("********** Send char: %c (0x%X)\n\r", CharToSend, CharToSend);
-
- if( StateUsartGlobal == USART_RCV ) {
- USART_PHONE->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;
- StateUsartGlobal = USART_SEND;
- }
-
- /* Wait USART ready for transmit */
- while((USART_PHONE->US_CSR & US_CSR_TXRDY) == 0) {}
- /* There is no character in the US_THR */
-
- /* Transmit a char */
- USART_PHONE->US_THR = CharToSend;
-
- status = (USART_PHONE->US_CSR&(US_CSR_OVRE|US_CSR_FRAME|
- US_CSR_PARE|US_CSR_TIMEOUT|US_CSR_NACK|
- (1<<10)));
-
- if (status != 0 ) {
- TRACE_DEBUG("******* status: 0x%X (Overrun: %lu, NACK: %lu, Timeout: %lu, underrun: %lu)\n\r",
- status, ((status & US_CSR_OVRE)>> 5), ((status & US_CSR_NACK) >> 13),
- ((status & US_CSR_TIMEOUT) >> 8), ((status & (1 << 10)) >> 10));
-
- TRACE_DEBUG("E (USART CSR reg):0x%X\n\r", USART_PHONE->US_CSR);
- TRACE_DEBUG("Nb (Number of errors):0x%X\n\r", USART_PHONE->US_NER );
- USART_PHONE->US_CR = US_CR_RSTSTA;
- }
-
- /* Return status */
- return( status );
-}
-
void Phone_configure( void ) {
PIO_ConfigureIt( &pinPhoneRST, ISR_PhoneRST ) ;
NVIC_EnableIRQ( PIOA_IRQn );
@@ -246,7 +158,7 @@
void Phone_exit( void ) {
PIO_DisableIt( &pinPhoneRST ) ;
- USART_DisableIt( USART_PHONE, US_IER_RXRDY) ;
+ USART_DisableIt( USART_PHONE, US_IER_RXRDY);
USART_SetTransmitterEnabled(USART_PHONE, 0);
USART_SetReceiverEnabled(USART_PHONE, 0);
}
@@ -258,7 +170,7 @@
PIO_Configure( &pinPhoneRST, 1);
PIO_EnableIt( &pinPhoneRST ) ;
- _ISO7816_Init();
+ ISO7816_Init(&usart_info, CLK_SLAVE);
USART_SetTransmitterEnabled(USART_PHONE, 1);
USART_SetReceiverEnabled(USART_PHONE, 1);
@@ -287,7 +199,7 @@
}
PR("Send %x %x .. %x (tr: %d, st: %x)", ATR[0], ATR[1], ATR[transferred-1], transferred, status);
for ( i = 0; i < transferred; i++ ) {
- _ISO7816_SendChar(*(ATR++));
+ ISO7816_SendChar(*(ATR++), &usart_info);
}
state = WAIT_CMD_PHONE;
PIO_EnableIt( &pinPhoneRST ) ;
@@ -305,15 +217,8 @@
PR("Resp: %x %x %x .. %x", pArg[0], pArg[1], pArg[2], pArg[transferred-1]);
for ( i = 0; i < transferred; i++ ) {
- _ISO7816_SendChar(*(pArg++));
+ ISO7816_SendChar(*(pArg++), &usart_info);
}
-/*
- if (*(pArg-1) == 0x8A) {
- for (i=0; i<20000; i++) ;
- _ISO7816_SendChar(0x90);
- _ISO7816_SendChar(0x00);
- }
-*/
state = WAIT_CMD_PHONE;
}