Review fixes
authorFilipe Rodrigues <filipepazrodrigues@gmail.com>
Sun, 17 Jun 2018 22:50:25 +0000 (15:50 -0700)
committerFilipe Rodrigues <filipepazrodrigues@gmail.com>
Sun, 17 Jun 2018 22:50:25 +0000 (15:50 -0700)
 - Added documentation
 - Removed incomplete XfrBlock message
 - Renamed Attr to Atr

Demos/Device/ClassDriver/CCID/CCID.c
Demos/Device/ClassDriver/CCID/CCID.h
Demos/Device/LowLevel/CCID/CCID.c
Demos/Device/LowLevel/CCID/HostTestApp/test_generic_ccid_libusb.js
Demos/Device/LowLevel/CCID/Lib/Iso7816.c
Demos/Device/LowLevel/CCID/Lib/Iso7816.h
LUFA/Drivers/USB/Class/Device/CCIDClassDevice.c
LUFA/Drivers/USB/Class/Device/CCIDClassDevice.h

index 40491fc..8efe87d 100644 (file)
@@ -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)
index ff2ee19..608fb78 100644 (file)
                                                                                 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);
index b805076..8b46e89 100644 (file)
@@ -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;
index b53f1a4..993c0e5 100644 (file)
@@ -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);
         }
         ]);
 }
index eaa96e5..0c2e5e8 100644 (file)
 
 #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;
 }
index d074858..aa5f4ba 100644 (file)
@@ -40,6 +40,6 @@
                #include <stdlib.h>
 
        /* Function Prototypes: */
-               void Iso7816_CreateSimpleAttr(uint8_t* attr, uint8_t* attrLength);
+               void Iso7816_CreateSimpleAtr(uint8_t* atr, uint8_t* atrLength);
 
 #endif
index edc1257..11c20f0 100644 (file)
@@ -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;
index 29a79f0..5acc33a 100644 (file)
                         */
                        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);