Changeset 1285


Ignore:
Timestamp:
01/19/10 12:03:40 (11 years ago)
Author:
dingo35
Message:

Isolate T0 and T14 timing aspects and move them to pps.c

Location:
trunk/csctapi
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/csctapi/ct_slot.c

    r1283 r1285  
    219219    else if (slot->protocol_type == CT_SLOT_PROTOCOL_T14) /* T=14 protocol ICC */
    220220    {
    221         if (Protocol_T14_Command (cmd, rsp) != PROTOCOL_T14_OK)
     221        if (Protocol_T14_Command (cmd, rsp) != PROTOCOL_T0_OK)
    222222            ret = ERR_TRANS;
    223223        else
  • trunk/csctapi/pps.c

    r1283 r1285  
    3838
    3939#define PPS_DEFAULT_PROTOCOL    0x00
    40 
     40#define PROTOCOL_T0_DEFAULT_WI 10
    4141/*
    4242 * Not exported macros definition
     
    490490    int ret;
    491491   
    492     if (parameters.t == ATR_PROTOCOL_TYPE_T0)
    493     {
    494             ret = Protocol_T0_Init (&(parameters));
    495            
    496             if (ret != PROTOCOL_T0_OK)
    497             {
    498                 protocol = NULL;
    499                 return PPS_PROTOCOL_ERROR;
    500             }
    501            
    502             return PPS_OK;
     492    if ((parameters.t == ATR_PROTOCOL_TYPE_T0) || (parameters.t == ATR_PROTOCOL_TYPE_T14))
     493    {
     494        BYTE wi;
     495       
     496        /* Integer value WI  = TC2, by default 10 */
     497#ifndef PROTOCOL_T0_USE_DEFAULT_TIMINGS
     498        if (ATR_GetInterfaceByte (atr, 2, ATR_INTERFACE_BYTE_TC, &(wi)) != ATR_OK)
     499#endif
     500        wi = PROTOCOL_T0_DEFAULT_WI;
     501       
     502        /* WWT = 960 * WI * (Fi / f) * 1000 milliseconds */
     503        double F =  (double) atr_f_table[parameters.FI];
     504        unsigned long wwt = (long unsigned int) (960 * wi * (F / ICC_Async_GetClockRate ()) * 1000);
     505        if (parameters.t == 14)
     506            wwt >>= 1; //is this correct?
     507       
     508        /* Set timings */
     509        icc_timings.block_timeout = wwt;
     510        icc_timings.char_timeout = wwt;
     511        ICC_Async_SetTimings ();
     512       
     513#ifdef DEBUG_PROTOCOL
     514        printf ("Protocol: T=%i: WWT=%d, Clockrate=%lu\n", params->t, (int)(wwt),ICC_Async_GetClockRate());
     515#endif
     516        return PPS_OK;
    503517    }
    504518    else if (parameters.t == ATR_PROTOCOL_TYPE_T1)
     
    514528            return PPS_OK;
    515529    }
    516     else if (parameters.t == ATR_PROTOCOL_TYPE_T14)
    517     {
    518             ret = Protocol_T14_Init (&(parameters));
    519            
    520             if (ret != PROTOCOL_T14_OK)
    521             {
    522                 protocol = NULL;
    523                 return PPS_PROTOCOL_ERROR;
    524             }
    525            
    526             return PPS_OK;
    527     }
    528530    else
    529531    {
  • trunk/csctapi/protocol_t0.c

    r1283 r1285  
    7474 * Exproted funtions definition
    7575 */
    76 
    77 int Protocol_T0_Init (PPS_ProtocolParameters * params)
    78 {
    79     BYTE wi;
    80    
    81     /* Integer value WI  = TC2, by default 10 */
    82 #ifndef PROTOCOL_T0_USE_DEFAULT_TIMINGS
    83     if (ATR_GetInterfaceByte (atr, 2, ATR_INTERFACE_BYTE_TC, &(wi)) != ATR_OK)
    84 #endif
    85     wi = PROTOCOL_T0_DEFAULT_WI;
    86    
    87     /* WWT = 960 * WI * (Fi / f) * 1000 milliseconds */
    88     double F =  (double) atr_f_table[params->FI];
    89     unsigned long wwt = (long unsigned int) (960 * wi * (F / ICC_Async_GetClockRate ()) * 1000);
    90    
    91     /* Set timings */
    92     icc_timings.block_timeout = wwt;
    93     icc_timings.char_timeout = wwt;
    94     ICC_Async_SetTimings ();
    95    
    96 #ifdef DEBUG_PROTOCOL
    97     printf ("Protocol: T=0: WWT=%d, Clockrate=%lu\n", (int)(wwt),ICC_Async_GetClockRate());
    98 #endif
    99    
    100     return PROTOCOL_T0_OK;
    101 }
    102 
    103 int Protocol_T14_Init (PPS_ProtocolParameters * params)
    104 {
    105     BYTE wi;
    106    
    107     /* Integer value WI  = TC2, by default 10 */
    108 #ifndef PROTOCOL_T14_USE_DEFAULT_TIMINGS
    109     if (ATR_GetInterfaceByte (atr, 2, ATR_INTERFACE_BYTE_TC, &(wi)) != ATR_OK)
    110 #endif
    111     wi = PROTOCOL_T14_DEFAULT_WI;
    112    
    113     /* WWT = 960 * WI * (Fi / f) * 1000 milliseconds */
    114     double F =  (double) atr_f_table[params->FI];
    115     unsigned long wwt = (long unsigned int) (960 * wi * (F / ICC_Async_GetClockRate ()) * 1000);
    116     wwt >>= 1;
    117    
    118     /* Set timings */
    119     icc_timings.block_timeout = wwt;
    120     icc_timings.char_timeout = wwt;
    121     ICC_Async_SetTimings ();
    122 
    123 #ifdef DEBUG_PROTOCOL
    124     printf ("Protocol: T=14: WWT=%d\n", (int)(wwt));
    125 #endif
    126    
    127     return PROTOCOL_T14_OK;
    128 }
    12976
    13077int Protocol_T0_Command (APDU_Cmd * cmd, APDU_Rsp ** rsp)
     
    188135        printf ("Protocol: T=14: Invalid APDU\n");
    189136#endif
    190     ret = PROTOCOL_T14_ERROR;
     137    ret = PROTOCOL_T0_ERROR;
    191138    }
    192139   
     
    913860    BYTE *cmd_raw;
    914861    long sent, recv, cmd_len;
    915     int ret = PROTOCOL_T14_OK, nulls, cmd_case;
     862    int ret = PROTOCOL_T0_OK, nulls, cmd_case;
    916863    BYTE ixor = 0x3E;
    917864    BYTE ixor1 = 0x3F;
     
    928875    /* Check case of command */
    929876    if ((cmd_case != APDU_CASE_2S) && (cmd_case != APDU_CASE_3S))
    930         return PROTOCOL_T14_ERROR;
     877        return PROTOCOL_T0_ERROR;
    931878   
    932879    if (reader[ridx].typ != R_INTERNAL)
     
    936883        {
    937884            (*rsp) = NULL;
    938             return PROTOCOL_T14_ICC_ERROR;
     885            return PROTOCOL_T0_ICC_ERROR;
    939886        }
    940887       
     
    943890        {
    944891            (*rsp) = NULL;
    945             return PROTOCOL_T14_ICC_ERROR;
     892            return PROTOCOL_T0_ICC_ERROR;
    946893        }
    947894       
     
    950897        {
    951898            (*rsp) = NULL;
    952             return PROTOCOL_T14_ICC_ERROR;
     899            return PROTOCOL_T0_ICC_ERROR;
    953900        }
    954901    }
     
    963910        {
    964911            (*rsp) = NULL;
    965             return PROTOCOL_T14_ICC_ERROR;
     912            return PROTOCOL_T0_ICC_ERROR;
    966913        }
    967914    }
     
    999946        if (ICC_Async_Receive (8, buffer) != ICC_ASYNC_OK)
    1000947        {
    1001             ret = PROTOCOL_T14_ICC_ERROR;
     948            ret = PROTOCOL_T0_ICC_ERROR;
    1002949            break;
    1003950        }
     
    1010957                if (ICC_Async_Receive (recv, buffer + 8) != ICC_ASYNC_OK)
    1011958                {
    1012                     ret = PROTOCOL_T14_ICC_ERROR;
     959                    ret = PROTOCOL_T0_ICC_ERROR;
    1013960                    break;
    1014961                }
     
    1017964            if (ICC_Async_Receive (1, &ixor) != ICC_ASYNC_OK)
    1018965            {
    1019                 ret = PROTOCOL_T14_ICC_ERROR;
     966                ret = PROTOCOL_T0_ICC_ERROR;
    1020967                break;
    1021968            }
     
    1026973            if(ixor1 != ixor)
    1027974            {
    1028                 ret = PROTOCOL_T14_ERROR;
     975                ret = PROTOCOL_T0_ERROR;
    1029976                break;
    1030977            }
     
    1033980           
    1034981               
    1035             ret = PROTOCOL_T14_OK;
     982            ret = PROTOCOL_T0_OK;
    1036983            break;
    1037984        }
    1038985    }
    1039986       
    1040     if (ret == PROTOCOL_T14_OK)
     987    if (ret == PROTOCOL_T0_OK)
    1041988    {
    1042989        memcpy(buffer + 8 + recv, buffer + 2, 2);
  • trunk/csctapi/protocol_t0.h

    r1283 r1285  
    4242#define PROTOCOL_T0_ERROR       4   /* T=0 Protocol Error */
    4343
    44 /* Return codes */
    45 #define PROTOCOL_T14_OK         0   /* Command OK */
    46 #define PROTOCOL_T14_NULL_ERROR     1   /* Maximum NULL's reachec */
    47 #define PROTOCOL_T14_ICC_ERROR      2   /* ICC comunication error */
    48 #define PROTOCOL_T14_IFD_ERROR      3   /* IFD comunication error */
    49 #define PROTOCOL_T14_ERROR      4   /* T=0 Protocol Error */
    50 
    5144/*
    5245 * Exported datatypes definition
     
    5750 */
    5851
    59 /* Initialise a protocol handler */
    60 extern int Protocol_T0_Init (PPS_ProtocolParameters * params);
    61 extern int Protocol_T14_Init (PPS_ProtocolParameters * params);
    62 
    6352/* Send a command and return a response */
    6453extern int Protocol_T0_Command (APDU_Cmd * cmd, APDU_Rsp ** rsp);
Note: See TracChangeset for help on using the changeset viewer.