/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//  Title: cciddriverdescriptors.h
//
//  About: Purpose
//      Definitions of the descriptors required by the ccid device driver.
//      DWG_Smart-Card_CCID_Rev110.pdf
//------------------------------------------------------------------------------

#ifndef CCID_DRIVER_DESCRIPTORS_H
#define CCID_DRIVER_DESCRIPTORS_H

//------------------------------------------------------------------------------
//         Definitions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Constants: Endpoints
//   CCID_EPT_DATA_OUT endpoint data out bulk     1
//   CCID_EPT_DATA_IN endpoint data in bulk       2
//   CCID_EPT_NOTIFICATION endpoint data interupt 3
//------------------------------------------------------------------------------
#define CCID_EPT_DATA_OUT       1  
#define CCID_EPT_DATA_IN        2
#define CCID_EPT_NOTIFICATION   3

//------------------------------------------------------------------------------
// USB-ICC protocol
//------------------------------------------------------------------------------
// CCID specification version 1.10
#define CCID1_10                               0x0110

#define SMART_CARD_DEVICE_CLASS                0x0B
// Smart Card Device Class Descriptor Type
#define CCID_DECRIPTOR_TYPE                    0x21

// Table 5.3-1 Summary of CCID Class Specific Request
#define CCIDGenericRequest_ABORT                 0x01
#define CCIDGenericRequest_GET_CLOCK_FREQUENCIES 0x02
#define CCIDGenericRequest_GET_DATA_RATES        0x03

// 6.1 Command Pipe, Bulk-OUT Messages
#define PC_TO_RDR_ICCPOWERON                   0x62
#define PC_TO_RDR_ICCPOWEROFF                  0x63
#define PC_TO_RDR_GETSLOTSTATUS                0x65
#define PC_TO_RDR_XFRBLOCK                     0x6F
#define PC_TO_RDR_GETPARAMETERS                0x6C
#define PC_TO_RDR_RESETPARAMETERS              0x6D
#define PC_TO_RDR_SETPARAMETERS                0x61
#define PC_TO_RDR_ESCAPE                       0x6B
#define PC_TO_RDR_ICCCLOCK                     0x6E
#define PC_TO_RDR_T0APDU                       0x6A
#define PC_TO_RDR_SECURE                       0x69
#define PC_TO_RDR_MECHANICAL                   0x71
#define PC_TO_RDR_ABORT                        0x72
#define PC_TO_RDR_SETDATARATEANDCLOCKFREQUENCY 0x73

// 6.2 Response Pipe, Bulk-IN Messages
#define RDR_TO_PC_DATABLOCK                    0x80
#define RDR_TO_PC_SLOTSTATUS                   0x81
#define RDR_TO_PC_PARAMETERS                   0x82
#define RDR_TO_PC_ESCAPE                       0x83
#define RDR_TO_PC_DATARATEANDCLOCKFREQUENCY    0x84

// 6.3 Interrupt-IN Messages
#define RDR_TO_PC_NOTIFYSLOTCHANGE             0x50
#define RDR_TO_PC_HARDWAREERROR                0x51

// Table 6.2-2 Slot error register when bmCommandStatus = 1
#define CMD_ABORTED                                   0xFF
#define ICC_MUTE                                      0xFE
#define XFR_PARITY_ERROR                              0xFD
#define XFR_OVERRUN                                   0xFC
#define HW_ERROR                                      0xFB
#define BAD_ATR_TS                                    0xF8
#define BAD_ATR_TCK                                   0xF7
#define ICC_PROTOCOL_NOT_SUPPORTED                    0xF6
#define ICC_CLASS_NOT_SUPPORTED                       0xF5
#define PROCEDURE_BYTE_CONFLICT                       0xF4
#define DEACTIVATED_PROTOCOL                          0xF3
#define BUSY_WITH_AUTO_SEQUENCE                       0xF2
#define PIN_TIMEOUT                                   0xF0
#define PIN_CANCELLED                                 0xEF
#define CMD_SLOT_BUSY                                 0xE0
//      User defined                              0xC0 to 0x81
//      Reserved for futur use                        0x80
//      not supported incorrect message parameter 0x7F to 0x01
//      Command not supported                         0x00

// CCID rev 1.1, p.27
#define VOLTS_AUTO                            0x00
#define VOLTS_5_0                             0x01
#define VOLTS_3_0                             0x02
#define VOLTS_1_8                             0x03

// 6.3.1 RDR_to_PC_NotifySlotChange
#define ICC_NOT_PRESENT                       0x00
#define ICC_PRESENT                           0x01
#define ICC_CHANGE                            0x02
#define ICC_INSERTED_EVENT                    0x01
//FIXME: #define ICC_INSERTED_EVENT                    ICC_PRESENT+ICC_CHANGE

// ICCD: Table 6.1-8 Bitmap for bStatus field
#define ICC_BS_PRESENT_ACTIVATED     0x00 // USB-ICC is present and activated
#define ICC_BS_PRESENT_NOTACTIVATED  0x01 // USB-ICC is present but not activated
#define ICC_BS_NOTPRESENT            0x02 // USB-ICC is virtually not present
#define ICC_BS_RFU                   0x03 // RFU
#define ICC_CS_NO_ERROR           (0x00<<6) // Processed without error
#define ICC_CS_FAILED             (0x01<<6) // Failed, error condition given by bError
#define ICC_CS_TIME_EXT           (0x02<<6) // Time extension is requested
#define ICC_CS_RFU                (0x03<<6) // RFU

/*
#define NO_ERROR                               0x00
#define NO_EXTRA_BYTES                         0x00
#define CCID_FLAG_INITIAL_VALUE                0x05
#define CCID_EVENT_SIZE                        0x02
#define STATUS_MASK                            0x41
*/
//------------------------------------------------------------------------------
//      Structures
//------------------------------------------------------------------------------

#endif //#ifndef CCID_DRIVER_DESCRIPTORS_H

