Atr[3] is protocol, not Atr[5], right?

Also: Added debug information for command not supported
This commit is contained in:
Christina Quast
2015-03-09 17:13:07 +01:00
parent d89f4ee948
commit b58434eb2f

View File

@@ -167,16 +167,21 @@ static void RDRtoPCDatablock_ATR( void )
TRACE_DEBUG("."); TRACE_DEBUG(".");
status = ISO7816_Datablock_ATR( Atr, &length ); // status = ISO7816_Datablock_ATR( Atr, &length );
// ISO7816_Decode_ATR( Atr );
if (status == 0) { if (status == 0) {
TRACE_DEBUG("Timeout occured while reading ATR"); TRACE_DEBUG("Timeout occured while reading ATR");
// FIXME: react properly to timeout.. // FIXME: react properly to timeout..
// return; // return;
} }
// FIXME: More tests? Is bProtocol = Atr[3] ?
if( length > 5 ) { if( length > 5 ) {
ccidDriver.ProtocolDataStructure[1] = Atr[5]&0x0F; // TD(1) ccidDriver.ProtocolDataStructure[1] = Atr[3]&0x0F; // TD(1)
ccidDriver.bProtocol = Atr[5]&0x0F; // TD(1) ccidDriver.bProtocol = Atr[3]&0x0F; // TD(1)
TRACE_INFO("Protocol data structure: 0x%x, bProtocol: 0x%x\n\r",
ccidDriver.ProtocolDataStructure[1], ccidDriver.bProtocol);
} }
// S_ccid_protocol_t0 // S_ccid_protocol_t0
@@ -439,6 +444,7 @@ static void PCtoRDRXfrBlock( void )
case CCID_FEATURES_EXC_TPDU: case CCID_FEATURES_EXC_TPDU:
if (ccidDriver.ProtocolDataStructure[1] == PROTOCOL_TO) { if (ccidDriver.ProtocolDataStructure[1] == PROTOCOL_TO) {
TRACE_INFO("APDU cmd: %x %x %x ..", ccidDriver.sCcidCommand.APDU[0], ccidDriver.sCcidCommand.APDU[1],ccidDriver.sCcidCommand.APDU[2] );
// Send commande APDU // Send commande APDU
indexMessage = ISO7816_XfrBlockTPDU_T0( ccidDriver.sCcidCommand.APDU , indexMessage = ISO7816_XfrBlockTPDU_T0( ccidDriver.sCcidCommand.APDU ,
@@ -450,13 +456,13 @@ static void PCtoRDRXfrBlock( void )
TRACE_INFO("Not supported T=1\n\r"); TRACE_INFO("Not supported T=1\n\r");
} }
else { else {
TRACE_INFO("Not supported\n\r"); TRACE_INFO("Not supported 0x%x\n\r", ccidDriver.ProtocolDataStructure[1]);
} }
} }
break; break;
case CCID_FEATURES_EXC_APDU: case CCID_FEATURES_EXC_APDU:
TRACE_INFO("Not supported\n\r"); TRACE_INFO("Not supported CCID_FEATURES_EXC_APDU\n\r");
break; break;
default: default:
@@ -719,8 +725,7 @@ static void CCIDCommandDispatcher( void )
TRACE_ERROR("BAD_SLOT_NUMBER\n\r"); TRACE_ERROR("BAD_SLOT_NUMBER\n\r");
} }
printf("typ=0x%X\n\r", ccidDriver.sCcidCommand.bMessageType); TRACE_INFO("typ=0x%X\n\r", ccidDriver.sCcidCommand.bMessageType);
TRACE_DEBUG("typ=0x%X\n\r", ccidDriver.sCcidCommand.bMessageType);
ccidDriver.sCcidMessage.bStatus = 0; ccidDriver.sCcidMessage.bStatus = 0;
@@ -789,7 +794,7 @@ static void CCIDCommandDispatcher( void )
} }
else { else {
// command not supported // command not supported
TRACE_DEBUG("PC_TO_RDR_T0APDU\n\r"); TRACE_INFO("Not supported: PC_TO_RDR_T0APDU\n\r");
vCCIDCommandNotSupported(); vCCIDCommandNotSupported();
} }
MessageToSend = 1; MessageToSend = 1;
@@ -816,7 +821,7 @@ static void CCIDCommandDispatcher( void )
break; break;
default: default:
TRACE_DEBUG("default: 0x%X\n\r", ccidDriver.sCcidCommand.bMessageType); TRACE_DEBUG("default: Not supported: 0x%X\n\r", ccidDriver.sCcidCommand.bMessageType);
vCCIDCommandNotSupported(); vCCIDCommandNotSupported();
MessageToSend = 1; MessageToSend = 1;
break; break;
@@ -848,13 +853,13 @@ static void CCID_RequestHandler(const USBGenericRequest *pRequest)
break; break;
case CCIDGenericRequest_GET_CLOCK_FREQUENCIES: case CCIDGenericRequest_GET_CLOCK_FREQUENCIES:
TRACE_DEBUG("Not supported\n\r"); TRACE_DEBUG("Not supported: CCIDGenericRequest_GET_CLOCK_FREQUENCIES\n\r");
// A CCID with bNumClockSupported equal to 00h does not have // A CCID with bNumClockSupported equal to 00h does not have
// to support this request // to support this request
break; break;
case CCIDGenericRequest_GET_DATA_RATES: case CCIDGenericRequest_GET_DATA_RATES:
TRACE_DEBUG("Not supported\n\r"); TRACE_DEBUG("Not supported: CCIDGenericRequest_GET_DATA_RATES\n\r");
// A CCID with bNumDataRatesSupported equal to 00h does not have // A CCID with bNumDataRatesSupported equal to 00h does not have
// to support this request. // to support this request.
break; break;
@@ -913,10 +918,10 @@ void CCID_SmartCardRequest( void )
sizeof(S_ccid_bulk_out_header), sizeof(S_ccid_bulk_out_header),
(TransferCallback)&CCIDCommandDispatcher, (TransferCallback)&CCIDCommandDispatcher,
(void*)0 ); (void*)0 );
// TRACE_DEBUG("bStat: %x\n\r", bStatus); // TRACE_DEBUG("bStat: %x\n\r", bStatus);
} }
while (bStatus != USBD_STATUS_SUCCESS); while (bStatus != USBD_STATUS_SUCCESS);
} }