📄 sci_osi.c
字号:
{ printk("DMA mode is not supported\n"); //rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE; } } else { rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE; } if((p_sci_modes->man_act == 0) || (p_sci_modes->man_act == 1)) { sci_cb[sci_id].sci_modes.man_act = p_sci_modes->man_act; } else { rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE; } if (p_sci_modes->rw_mode < 4) { sci_cb[sci_id].sci_modes.rw_mode = p_sci_modes->rw_mode; } else { rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE; } } else { rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE; } } else { rc = SCI_ERROR_DRIVER_NOT_INITIALIZED; } if(rc != SCI_ERROR_OK) { PDEBUG("card[%d] error=%d\n", (UINT) sci_id, rc); } PDEBUG("card[%d] exit\n", (UINT) sci_id); return(rc);}/****************************************************************************** Function: sci_osi_get_modes**** Purpose: Retrieve the current Smart Card modes.**** Parameters: sci_id: zero-based number to identify smart card controller** sci_get_modes: output pointer to Smart Card modes**** Returns: SCI_ERROR_OK: if successful** SCI_ERROR_DRIVER_NOT_INITIALIZED: if no successful call to** sci_init() has been made** SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or** p_sci_modes is zero.*****************************************************************************/SCI_ERROR sci_osi_get_modes(ULONG sci_id, SCI_MODES *p_sci_modes){ SCI_ERROR rc = SCI_ERROR_OK; PDEBUG("card[%d] enter\n", (UINT) sci_id); if(sci_driver_init == 1) { if((p_sci_modes != 0) && (sci_id < SCI_NUMBER_OF_CONTROLLERS)) { p_sci_modes->emv2000 = sci_cb[sci_id].sci_modes.emv2000; p_sci_modes->dma = sci_cb[sci_id].sci_modes.dma; p_sci_modes->man_act = sci_cb[sci_id].sci_modes.man_act; p_sci_modes->rw_mode = sci_cb[sci_id].sci_modes.rw_mode; } else { rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE; } } else { rc = SCI_ERROR_DRIVER_NOT_INITIALIZED; } if(rc != SCI_ERROR_OK) { PDEBUG("card[%d] error=%d\n", (UINT) sci_id, rc); } PDEBUG("card[%d] exit\n", (UINT) sci_id); return(rc);}/******************************************************************************* Function: sci_osi_set_parameters**** Purpose: Set the current Smart Card parameters. This function calls** set_parameters(), which is also called internally.**** Parameters: sci_id: zero-based number to identify smart card controller** p_sci_parameters: input pointer to Smart Card parameters**** Returns: SCI_ERROR_OK: if successful** SCI_ERROR_DRIVER_NOT_INITIALIZED: if no successful call to** sci_init() has been made** SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or** p_sci_parameters is zero.** SCI_ERROR_CARD_NOT_ACTIVATED: if card is not activated*****************************************************************************/SCI_ERROR sci_osi_set_parameters(ULONG sci_id, SCI_PARAMETERS *p_sci_parameters){ SCI_ERROR rc=SCI_ERROR_OK; PDEBUG("card[%d] enter\n", (UINT) sci_id); if(sci_driver_init == 1) { if((p_sci_parameters != 0) && (sci_id < SCI_NUMBER_OF_CONTROLLERS)) { if(sci_osi_is_card_activated(sci_id) == 1) { rc = sci_osi_set_para(sci_id, p_sci_parameters); } else { rc = SCI_ERROR_CARD_NOT_ACTIVATED; } } else { rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE; } } else { rc = SCI_ERROR_DRIVER_NOT_INITIALIZED; } if(rc != SCI_ERROR_OK) { PDEBUG("card[%d] error=%d\n", (UINT) sci_id, rc); } PDEBUG("card[%d] exit\n", (UINT) sci_id); return(rc);}/****************************************************************************** Function: sci_osi_get_parameters**** Purpose: Retrieve the current Smart Card parameters.**** Parameters: sci_id: zero-based number to identify smart card controller** p_sci_parameters: output pointer to Smart Card parameters**** Returns: SCI_ERROR_OK: if successful** SCI_ERROR_DRIVER_NOT_INITIALIZED: if no successful call to** sci_init() has been made** SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or** p_sci_parameters is zero.** SCI_ERROR_CARD_NOT_ACTIVATED: if card is not activated*****************************************************************************/SCI_ERROR sci_osi_get_parameters(ULONG sci_id, SCI_PARAMETERS *p_sci_parameters){ SCI_ERROR rc = SCI_ERROR_OK; PDEBUG("card[%d] enter\n", (UINT) sci_id); if(sci_driver_init == 1) { if((p_sci_parameters != 0) && (sci_id < SCI_NUMBER_OF_CONTROLLERS)) { if(sci_atom_is_HW_activated(sci_id) == 1) { p_sci_parameters->T = sci_cb[sci_id].sci_parameters.T; p_sci_parameters->f = sci_cb[sci_id].sci_parameters.f; p_sci_parameters->ETU = sci_cb[sci_id].sci_parameters.ETU; p_sci_parameters->WWT = sci_cb[sci_id].sci_parameters.WWT; p_sci_parameters->CWT = sci_cb[sci_id].sci_parameters.CWT; p_sci_parameters->BWT = sci_cb[sci_id].sci_parameters.BWT; p_sci_parameters->EGT = sci_cb[sci_id].sci_parameters.EGT; p_sci_parameters->clock_stop_polarity = sci_cb[sci_id].sci_parameters.clock_stop_polarity; p_sci_parameters->check = sci_cb[sci_id].sci_parameters.check; p_sci_parameters->P = sci_cb[sci_id].sci_parameters.P; p_sci_parameters->I = sci_cb[sci_id].sci_parameters.I; p_sci_parameters->U = sci_cb[sci_id].sci_parameters.U; } else { rc = SCI_ERROR_CARD_NOT_ACTIVATED; } } else { rc = SCI_ERROR_PARAMETER_OUT_OF_RANGE; } } else { rc = SCI_ERROR_DRIVER_NOT_INITIALIZED; } if(rc != SCI_ERROR_OK) { PDEBUG("card[%d] error=%d\n", (UINT) sci_id, rc); } PDEBUG("card[%d] exit\n", (UINT) sci_id); return(rc);}/******************************************************************************* Function: sci_osi_tx_start**** Purpose: Enter transmit (tx) state.**** Parameters: sci_id: zero-based number to identify smart card controller** num_bytes: number of bytes to write from out buffer*****************************************************************************/void sci_osi_tx_start(ULONG sci_id, ULONG num_bytes){ /* initialize control block values */ sci_cb[sci_id].state = SCI_STATE_TX; sci_cb[sci_id].error = SCI_ERROR_OK; /* reset pointers to start of buffer */ sci_cb[sci_id].p_read = sci_cb[sci_id].buffer; sci_cb[sci_id].p_write = sci_cb[sci_id].buffer; sci_atom_tx_start(sci_id, num_bytes);}/******************************************************************************* Function: sci_osi_rx_start**** Purpose: Enter recieve(rx) state.**** Parameters: sci_id: zero-based number to identify smart card controller*****************************************************************************/void sci_osi_rx_start(ULONG sci_id){ sci_cb[sci_id].state = SCI_STATE_RX; /* reset pointers to start of buffer */ sci_cb[sci_id].p_read = sci_cb[sci_id].buffer; sci_cb[sci_id].p_write = sci_cb[sci_id].buffer; sci_cb[sci_id].first_rx = 0; sci_cb[sci_id].rx_complete = 0; sci_cb[sci_id].bytes_expected = -1; sci_atom_rx_start(sci_id);}/******************************************************************************* Function: sci_osi_set_para**** Purpose: Set the current Smart Card parameters.**** Parameters: sci_id: zero-based number to identify smart card controller** p_sci_parameters: input pointer to Smart Card parameters**** Returns: SCI_ERROR_OK: if successful** SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or** p_sci_parameters is zero.*****************************************************************************/SCI_ERROR sci_osi_set_para(ULONG sci_id, SCI_PARAMETERS *p_sci_parameters){ SCI_ERROR rc = SCI_ERROR_OK; if((p_sci_parameters != 0) && (sci_id < SCI_NUMBER_OF_CONTROLLERS)) { rc = sci_osi_set_para_T (sci_id, p_sci_parameters); rc = sci_osi_set_para_f (sci_id, p_sci_parameters); rc = sci_osi_set_para_ETU (sci_id, p_sci_parameters); rc = sci_osi_set_para_WWT (sci_id, p_sci_parameters); rc = sci_osi_set_para_CWT (sci_id, p_sci_parameters); rc = sci_osi_set_para_BWT (sci_id, p_sci_parameters); rc = sci_osi_set_para_EGT (sci_id, p_sci_parameters); rc = sci_osi_set_para_CLK_p(sci_id, p_sci_parameters); rc = sci_osi_set_para_check(sci_id, p_sci_parameters); rc = sci_osi_set_para_class(sci_id, p_sci_parameters); /* programming not supported, just set the values */ sci_cb[sci_id].sci_parameters.P = p_sci_parameters->P; sci_cb[sci_id].sci_parameters.I = p_sci_parameters->I; } else { rc=SCI_ERROR_PARAMETER_OUT_OF_RANGE; } return(rc);}/******************************************************************************* Function: sci_osi_set_para_T**** Purpose: Set the current Smart Card parameters of T.**** Parameters: sci_id: zero-based number to identify smart card controller** p_sci_parameters: input pointer to Smart Card parameters**** Returns: SCI_ERROR_OK: if successful** SCI_ERROR_PARAMETER_OUT_OF_RANGE: if sci_id is invalid or** p_sci_parameters is zero.**************************************************************************/SCI_ERROR sci_osi_set_para_T(ULONG sci_id, SCI_PARAMETERS *p_sci_parameters){ SCI_ERROR rc = SCI_ERROR_OK; ULONG k_state; /* set the protocol T=0 or 1 of sci */ if((p_sci_parameters->T == 0) || (p_sci_parameters->T == 1))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -