From be13902026cdfea208a3d3016657c259361a0aaf Mon Sep 17 00:00:00 2001 From: Filipe Rodrigues Date: Sun, 17 Jun 2018 15:50:25 -0700 Subject: Review fixes - Added documentation - Removed incomplete XfrBlock message - Renamed Attr to Atr --- Demos/Device/ClassDriver/CCID/CCID.c | 32 +----------- Demos/Device/ClassDriver/CCID/CCID.h | 6 --- Demos/Device/LowLevel/CCID/CCID.c | 57 ++-------------------- .../CCID/HostTestApp/test_generic_ccid_libusb.js | 6 --- Demos/Device/LowLevel/CCID/Lib/Iso7816.c | 10 ++-- Demos/Device/LowLevel/CCID/Lib/Iso7816.h | 2 +- LUFA/Drivers/USB/Class/Device/CCIDClassDevice.c | 51 ------------------- LUFA/Drivers/USB/Class/Device/CCIDClassDevice.h | 39 ++++++++++++++- 8 files changed, 48 insertions(+), 155 deletions(-) diff --git a/Demos/Device/ClassDriver/CCID/CCID.c b/Demos/Device/ClassDriver/CCID/CCID.c index 40491fcfd..8efe87d55 100644 --- a/Demos/Device/ClassDriver/CCID/CCID.c +++ b/Demos/Device/ClassDriver/CCID/CCID.c @@ -158,13 +158,13 @@ void EVENT_USB_Device_ControlRequest(void) * THe slot must reply back with a recognizable ATR (answer to reset) */ uint8_t CALLBACK_CCID_IccPowerOn(uint8_t slot, - uint8_t* attr, + uint8_t* atr, uint8_t* attrSize, uint8_t* error) { if (slot < CCID_Interface.Config.TotalSlots) { - Iso7816_CreateSimpleAtr(attr, attrSize); + Iso7816_CreateSimpleAtr(atr, attrSize); *error = CCID_ERROR_NO_ERROR; return CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR | CCID_ICCSTATUS_PRESENTANDACTIVE; } @@ -208,34 +208,6 @@ uint8_t CALLBACK_CCID_GetSlotStatus(uint8_t slot, uint8_t* error) } } -/** Event handler for the CCID_PC_to_RDR_XfrBlock. THis message is sent to the device - * whenever an application at the host wants to send a block of bytes to the device - * THe device reply back with an array of bytes - */ -uint8_t CALLBACK_CCID_XfrBlock(uint8_t slot, - uint8_t* error, - uint8_t* receivedBuffer, - uint8_t receivedBufferSize, - uint8_t* sendBuffer, - uint8_t* sentBufferSize) -{ - if (slot < CCID_Interface.Config.TotalSlots) - { - uint8_t okResponse[2] = {0x90, 0x00}; - memcpy(sendBuffer, okResponse, sizeof(okResponse)); - *sentBufferSize = sizeof(okResponse); - - *error = CCID_ERROR_NO_ERROR; - return CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR | CCID_ICCSTATUS_NOICCPRESENT; - } - else - { - *error = CCID_ERROR_SLOT_NOT_FOUND; - return CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_NOICCPRESENT; - } -} - - uint8_t CALLBACK_CCID_Abort(uint8_t slot, uint8_t seq, uint8_t* error) diff --git a/Demos/Device/ClassDriver/CCID/CCID.h b/Demos/Device/ClassDriver/CCID/CCID.h index ff2ee19e7..608fb7801 100644 --- a/Demos/Device/ClassDriver/CCID/CCID.h +++ b/Demos/Device/ClassDriver/CCID/CCID.h @@ -81,12 +81,6 @@ uint8_t* error); uint8_t CALLBACK_CCID_IccPowerOff(uint8_t slot, uint8_t* error); uint8_t CALLBACK_CCID_GetSlotStatus(uint8_t slot, uint8_t* error); - uint8_t CALLBACK_CCID_XfrBlock(uint8_t slot, - uint8_t* error, - uint8_t* receivedBuffer, - uint8_t receivedBufferSize, - uint8_t* sendBuffer, - uint8_t* sentBufferSize); uint8_t CALLBACK_CCID_Abort(uint8_t slot, uint8_t seq, uint8_t *error); diff --git a/Demos/Device/LowLevel/CCID/CCID.c b/Demos/Device/LowLevel/CCID/CCID.c index b80507659..8b46e89be 100644 --- a/Demos/Device/LowLevel/CCID/CCID.c +++ b/Demos/Device/LowLevel/CCID/CCID.c @@ -197,13 +197,13 @@ void EVENT_USB_Device_ControlRequest(void) * THe slot must reply back with a recognizable ATR (answer to reset) */ uint8_t CCID_IccPowerOn(uint8_t slot, - uint8_t* attr, - uint8_t* attrLength, + uint8_t* atr, + uint8_t* atrLength, uint8_t* error) { if (slot == 0) { - Iso7816_CreateSimpleAttr(attr, attrLength); + Iso7816_CreateSimpleAtr(atr, atrLength); *error = CCID_ERROR_NO_ERROR; return CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR | CCID_ICCSTATUS_PRESENTANDACTIVE; @@ -394,57 +394,6 @@ void CCID_Task(void) break; } - case CCID_PC_to_RDR_XfrBlock: - { - uint8_t Bwi = Endpoint_Read_8(); - uint16_t LevelParameter = Endpoint_Read_16_LE(); - uint8_t ReceivedBuffer[0x4]; - - (void)Bwi; - (void)LevelParameter; - - Endpoint_Read_Stream_LE(ReceivedBuffer, sizeof(ReceivedBuffer), NULL); - - uint8_t SendBuffer[0x2] = {0x90, 0x00}; - uint8_t SendLength = sizeof(SendBuffer); - - USB_CCID_RDR_to_PC_DataBlock_t* ResponseBlock = (USB_CCID_RDR_to_PC_DataBlock_t*)&BlockBuffer; - ResponseBlock->CCIDHeader.MessageType = CCID_RDR_to_PC_DataBlock; - ResponseBlock->CCIDHeader.Slot = CCIDHeader.Slot; - ResponseBlock->CCIDHeader.Seq = CCIDHeader.Seq; - - ResponseBlock->ChainParam = 0; - - // TODO: Callback - Status = CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR | CCID_ICCSTATUS_PRESENTANDACTIVE; - - if (CCID_CheckStatusNoError(Status) && !Aborted) - { - ResponseBlock->CCIDHeader.Length = SendLength; - memcpy(&ResponseBlock->Data, SendBuffer, SendLength); - } - else if (Aborted) - { - Status = CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_PRESENTANDACTIVE; - Error = CCID_ERROR_CMD_ABORTED; - SendLength = 0; - } - else - { - SendLength = 0; - } - - ResponseBlock->Status = Status; - ResponseBlock->Error = Error; - - Endpoint_ClearOUT(); - - Endpoint_SelectEndpoint(CCID_IN_EPADDR); - Endpoint_Write_Stream_LE(ResponseBlock, sizeof(USB_CCID_RDR_to_PC_DataBlock_t) + SendLength, NULL); - Endpoint_ClearIN(); - break; - } - case CCID_PC_to_RDR_Abort: { USB_CCID_RDR_to_PC_SlotStatus_t* ResponseAbort = (USB_CCID_RDR_to_PC_SlotStatus_t*)&BlockBuffer; diff --git a/Demos/Device/LowLevel/CCID/HostTestApp/test_generic_ccid_libusb.js b/Demos/Device/LowLevel/CCID/HostTestApp/test_generic_ccid_libusb.js index b53f1a49c..993c0e550 100644 --- a/Demos/Device/LowLevel/CCID/HostTestApp/test_generic_ccid_libusb.js +++ b/Demos/Device/LowLevel/CCID/HostTestApp/test_generic_ccid_libusb.js @@ -140,12 +140,6 @@ function startTest() }, function(callback) { read(ccidInterface, 10, callback); - }, - function(callback) { - write(ccidInterface, new Buffer(XfrBlockMessage(0, 4)), callback); - }, - function(callback) { - read(ccidInterface, 10 + 2, callback); } ]); } diff --git a/Demos/Device/LowLevel/CCID/Lib/Iso7816.c b/Demos/Device/LowLevel/CCID/Lib/Iso7816.c index eaa96e544..0c2e5e8b0 100644 --- a/Demos/Device/LowLevel/CCID/Lib/Iso7816.c +++ b/Demos/Device/LowLevel/CCID/Lib/Iso7816.c @@ -31,17 +31,17 @@ #include "Iso7816.h" -void Iso7816_CreateSimpleAttr(uint8_t* attr, uint8_t* attrLength) +void Iso7816_CreateSimpleAtr(uint8_t* atr, uint8_t* atrLength) { - attr[0] = 0x3B; // TS: direct convention + atr[0] = 0x3B; // TS: direct convention uint8_t interfaceBytesPresence = 0; uint8_t historycalBytes[14] = "Lufa CCID Demo"; // Must be equal or less than 15 uint8_t historicalBytesLength = sizeof(historycalBytes); - attr[1] = (interfaceBytesPresence << 4) + historicalBytesLength; //TO - memcpy(attr + 2, historycalBytes, historicalBytesLength); + atr[1] = (interfaceBytesPresence << 4) + historicalBytesLength; //TO + memcpy(atr + 2, historycalBytes, historicalBytesLength); - *attrLength = historicalBytesLength + 2; + *atrLength = historicalBytesLength + 2; } diff --git a/Demos/Device/LowLevel/CCID/Lib/Iso7816.h b/Demos/Device/LowLevel/CCID/Lib/Iso7816.h index d07485823..aa5f4ba83 100644 --- a/Demos/Device/LowLevel/CCID/Lib/Iso7816.h +++ b/Demos/Device/LowLevel/CCID/Lib/Iso7816.h @@ -40,6 +40,6 @@ #include /* Function Prototypes: */ - void Iso7816_CreateSimpleAttr(uint8_t* attr, uint8_t* attrLength); + void Iso7816_CreateSimpleAtr(uint8_t* atr, uint8_t* atrLength); #endif diff --git a/LUFA/Drivers/USB/Class/Device/CCIDClassDevice.c b/LUFA/Drivers/USB/Class/Device/CCIDClassDevice.c index edc125779..11c20f0b3 100644 --- a/LUFA/Drivers/USB/Class/Device/CCIDClassDevice.c +++ b/LUFA/Drivers/USB/Class/Device/CCIDClassDevice.c @@ -228,57 +228,6 @@ void CCID_Device_USBTask(USB_ClassInfo_CCID_Device_t* const CCIDInterfaceInfo) break; } - case CCID_PC_to_RDR_XfrBlock: - { - uint8_t Bwi = Endpoint_Read_8(); - uint16_t LevelParameter = Endpoint_Read_16_LE(); - uint8_t ReceivedBuffer[0x4]; - - (void)Bwi; - (void)LevelParameter; - - Endpoint_Read_Stream_LE(ReceivedBuffer, sizeof(ReceivedBuffer), NULL); - - uint8_t SendBuffer[0x2] = {0x90, 0x00}; - uint8_t SendLength = sizeof(SendBuffer); - - USB_CCID_RDR_to_PC_DataBlock_t* ResponseBlock = (USB_CCID_RDR_to_PC_DataBlock_t*)&BlockBuffer; - ResponseBlock->CCIDHeader.MessageType = CCID_RDR_to_PC_DataBlock; - ResponseBlock->CCIDHeader.Slot = CCIDHeader.Slot; - ResponseBlock->CCIDHeader.Seq = CCIDHeader.Seq; - - ResponseBlock->ChainParam = 0; - - //TODO: Callback - Status = CCID_COMMANDSTATUS_PROCESSEDWITHOUTERROR | CCID_ICCSTATUS_PRESENTANDACTIVE; - - if (CCID_CheckStatusNoError(Status) && !CCIDInterfaceInfo->State.Aborted) - { - ResponseBlock->CCIDHeader.Length = SendLength; - memcpy(&ResponseBlock->Data, SendBuffer, SendLength); - } - else if(CCIDInterfaceInfo->State.Aborted) - { - Status = CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_PRESENTANDACTIVE; - Error = CCID_ERROR_CMD_ABORTED; - SendLength = 0; - } - else - { - SendLength = 0; - } - - ResponseBlock->Status = Status; - ResponseBlock->Error = Error; - - Endpoint_ClearOUT(); - - Endpoint_SelectEndpoint(CCIDInterfaceInfo->Config.DataINEndpoint.Address); - Endpoint_Write_Stream_LE(ResponseBlock, sizeof(USB_CCID_RDR_to_PC_DataBlock_t) + SendLength, NULL); - Endpoint_ClearIN(); - break; - } - case CCID_PC_to_RDR_Abort: { USB_CCID_RDR_to_PC_SlotStatus_t* ResponseAbort = (USB_CCID_RDR_to_PC_SlotStatus_t*)&BlockBuffer; diff --git a/LUFA/Drivers/USB/Class/Device/CCIDClassDevice.h b/LUFA/Drivers/USB/Class/Device/CCIDClassDevice.h index 29a79f02d..5acc33af5 100644 --- a/LUFA/Drivers/USB/Class/Device/CCIDClassDevice.h +++ b/LUFA/Drivers/USB/Class/Device/CCIDClassDevice.h @@ -111,14 +111,49 @@ */ void CCID_Device_USBTask(USB_ClassInfo_CCID_Device_t* const CCIDInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); + /** CCID class driver callback for PC_TO_RDR_IccPowerOn CCID message + * When the ICC is inserted into a slot of a CCID, the CCID can activate the ICC, and the ICC will respond with an ATR + * (answer to reset) + * + * \param[in] slot The slot currently being powered on + * \param[in, out] atr Pointer to an array where the ATR being sent to the device when the Icc is powered on is. + * \param[out] atrSize The size of the ATR being sent. Maximum size is 15 + * \param[out] error The result of the operation, or error + * + * \return uint8_t The command result + */ uint8_t CALLBACK_CCID_IccPowerOn(uint8_t slot, uint8_t* atr, uint8_t* atrSize, uint8_t* error); + /** CCID class driver callback for PC_TO_RDR_IccPowerOff CCID message + * Turns off the ICC + * + * \param[in] slot The slot currently being powered off + * \param[out] error The result of the operation, or error + * + * \return uint8_t The command result + */ uint8_t CALLBACK_CCID_IccPowerOff(uint8_t slot, uint8_t* error); + /** CCID class driver callback for PC_TO_RDR_GetSlotStatus CCID message + * Retrieves the current status of a given slot + * + * \param[in] slot The slot from which we want to retrieve the status + * \param[out] error The result of the operation, or error + * + * \return uint8_t The command result + */ uint8_t CALLBACK_CCID_GetSlotStatus(uint8_t slot, uint8_t* error); - uint8_t CALLBACK_CCID_XfrBlock(uint8_t slot, uint8_t* error, uint8_t* receivedBuffer, uint8_t receivedBufferSize, uint8_t* sendBuffer, uint8_t* sentBufferSize); - + /** CCID class driver callback for CCID_PC_to_RDR_Abort CCID message + * Aborts a BULK out message previously sent to a slot + * + * \param[in] slot The slot to where the message being aborted was sent to + * \param[in] seq The current sequence number for this message. Must be checked against to the current + * abort massage being sent at the control pipe + * \param[out] error The result of the operation, or error + * + * \return uint8_t The command result + */ uint8_t CALLBACK_CCID_Abort(uint8_t slot, uint8_t seq, uint8_t* error); -- cgit v1.2.3 From ded673ec02a92906c5402d5f749518e55beff9fc Mon Sep 17 00:00:00 2001 From: Filipe Rodrigues Date: Sun, 17 Jun 2018 18:42:58 -0700 Subject: Spaces to tabs --- Demos/Device/ClassDriver/CCID/CCID.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Demos/Device/ClassDriver/CCID/CCID.c b/Demos/Device/ClassDriver/CCID/CCID.c index 8efe87d55..916306505 100644 --- a/Demos/Device/ClassDriver/CCID/CCID.c +++ b/Demos/Device/ClassDriver/CCID/CCID.c @@ -170,7 +170,7 @@ uint8_t CALLBACK_CCID_IccPowerOn(uint8_t slot, } *error = CCID_ERROR_SLOT_NOT_FOUND; - return CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_NOICCPRESENT; + return CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_NOICCPRESENT; } /** Event handler for the CCID_PC_to_RDR_IccPowerOff message. This message is sent to the device @@ -186,7 +186,7 @@ uint8_t CALLBACK_CCID_IccPowerOff(uint8_t slot, uint8_t* error) else { *error = CCID_ERROR_SLOT_NOT_FOUND; - return CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_NOICCPRESENT; + return CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_NOICCPRESENT; } } @@ -204,13 +204,13 @@ uint8_t CALLBACK_CCID_GetSlotStatus(uint8_t slot, uint8_t* error) else { *error = CCID_ERROR_SLOT_NOT_FOUND; - return CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_NOICCPRESENT; + return CCID_COMMANDSTATUS_FAILED | CCID_ICCSTATUS_NOICCPRESENT; } } uint8_t CALLBACK_CCID_Abort(uint8_t slot, - uint8_t seq, - uint8_t* error) + uint8_t seq, + uint8_t* error) { if (CCID_Interface.State.Aborted && slot == 0 && CCID_Interface.State.AbortedSeq == seq) { -- cgit v1.2.3