usb.c: mitm config with ccid interface
diff --git a/sam3s_example/simtrace/usb.c b/sam3s_example/simtrace/usb.c
index f91c80c..c330db8 100644
--- a/sam3s_example/simtrace/usb.c
+++ b/sam3s_example/simtrace/usb.c
@@ -411,9 +411,15 @@
/** Standard configuration descriptor. */
USBConfigurationDescriptor configuration;
USBInterfaceDescriptor simcard;
+ /// CCID descriptor
+ CCIDDescriptor ccid;
+ /// Bulk OUT endpoint descriptor
USBEndpointDescriptor simcard_dataOut;
+ /// Bulk IN endpoint descriptor
USBEndpointDescriptor simcard_dataIn;
+ /// Interrupt OUT endpoint descriptor
USBEndpointDescriptor simcard_interruptIn;
+
USBInterfaceDescriptor phone;
USBEndpointDescriptor phone_dataOut;
USBEndpointDescriptor phone_dataIn;
@@ -433,50 +439,73 @@
USBD_BMATTRIBUTES,
USBConfigurationDescriptor_POWER(100)
},
- /* Communication class interface standard descriptor */
+ // CCID interface descriptor
+ // Table 4.3-1 Interface Descriptor
+ // Interface descriptor
{
sizeof(USBInterfaceDescriptor),
USBGenericDescriptor_INTERFACE,
- 0, /* This is interface #0 */
- 0, /* This is alternate setting #0 for this interface */
- 3, /* Number of endpoints */
- //CDCCommunicationInterfaceDescriptor_CLASS,
- 0xff,
-// CDCCommunicationInterfaceDescriptor_ABSTRACTCONTROLMODEL,
- 0,
-// CDCCommunicationInterfaceDescriptor_NOPROTOCOL,
- 0,
- MITM_CONF_STR /* string descriptor for this interface */
+ 0, // Interface 0
+ 0, // No alternate settings
+ 3, // uses bulk-IN, bulk-OUT and interrupt IN
+ SMART_CARD_DEVICE_CLASS,
+ 0, // Subclass code
+ 0, // bulk transfers optional interrupt-IN
+ CCID_CONF_STR // associated string descriptor
},
- /* Bulk-OUT endpoint standard descriptor */
+ {
+ sizeof(CCIDDescriptor), // bLength: Size of this descriptor in bytes
+ CCID_DECRIPTOR_TYPE, // bDescriptorType:Functional descriptor type
+ CCID1_10, // bcdCCID: CCID version
+ 0, // bMaxSlotIndex: Value 0 indicates that one slot is supported
+ VOLTS_5_0, // bVoltageSupport
+ (1 << PROTOCOL_TO), // dwProtocols
+ 3580, // dwDefaultClock
+ 3580, // dwMaxClock
+ 0, // bNumClockSupported
+ 9600, // dwDataRate : 9600 bauds
+ 9600, // dwMaxDataRate : 9600 bauds
+ 0, // bNumDataRatesSupported
+ 0xfe, // dwMaxIFSD
+ 0, // dwSynchProtocols
+ 0, // dwMechanical
+ //0x00010042, // dwFeatures: Short APDU level exchanges
+ CCID_FEATURES_AUTO_CLOCK | CCID_FEATURES_AUTO_BAUD |
+ CCID_FEATURES_AUTO_PCONF | CCID_FEATURES_AUTO_PNEGO | CCID_FEATURES_EXC_TPDU,
+ 0x0000010F, // dwMaxCCIDMessageLength: For extended APDU level the value shall be between 261 + 10
+ 0xFF, // bClassGetResponse: Echoes the class of the APDU
+ 0xFF, // bClassEnvelope: Echoes the class of the APDU
+ 0, // wLcdLayout: no LCD
+ 0, // bPINSupport: No PIN
+ 1 // bMaxCCIDBusySlot
+ },
+ // Bulk-OUT endpoint descriptor
{
sizeof(USBEndpointDescriptor),
USBGenericDescriptor_ENDPOINT,
- USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_OUT,
- DATAOUT),
+ USBEndpointDescriptor_ADDRESS( USBEndpointDescriptor_OUT, CCID_EPT_DATA_OUT ),
USBEndpointDescriptor_BULK,
- MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(DATAOUT),
+ MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(CCID_EPT_DATA_OUT),
USBEndpointDescriptor_MAXBULKSIZE_FS),
- 0 /* Must be 0 for full-speed bulk endpoints */
+ 0x00 // Does not apply to Bulk endpoints
},
- /* Bulk-IN endpoint descriptor */
+ // Bulk-IN endpoint descriptor
{
sizeof(USBEndpointDescriptor),
USBGenericDescriptor_ENDPOINT,
- USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN,
- DATAIN),
+ USBEndpointDescriptor_ADDRESS( USBEndpointDescriptor_IN, CCID_EPT_DATA_IN ),
USBEndpointDescriptor_BULK,
- MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(DATAIN),
+ MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(CCID_EPT_DATA_IN),
USBEndpointDescriptor_MAXBULKSIZE_FS),
- 0 /* Must be 0 for full-speed bulk endpoints */
+ 0x00 // Does not apply to Bulk endpoints
},
- /* Notification endpoint descriptor */
+ // Notification endpoint descriptor
{
sizeof(USBEndpointDescriptor),
USBGenericDescriptor_ENDPOINT,
- USBEndpointDescriptor_ADDRESS( USBEndpointDescriptor_IN, INT ),
+ USBEndpointDescriptor_ADDRESS( USBEndpointDescriptor_IN, CCID_EPT_NOTIFICATION ),
USBEndpointDescriptor_INTERRUPT,
- MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(INT),
+ MIN(BOARD_USB_ENDPOINTS_MAXPACKETSIZE(CCID_EPT_NOTIFICATION),
USBEndpointDescriptor_MAXINTERRUPTSIZE_FS),
0x10
},
@@ -526,7 +555,6 @@
}
};
-
/** Standard USB device descriptor for the CDC serial driver */
const USBDeviceDescriptor deviceDescriptor = {