sources/common/libs/STM32Cube_F4/Middlewares/ST/STM32_USB_Device_Library/Class/CCID/Src/usbd_ccid_cmd.c
/**
  * @brief  PC_to_RDR_XfrBlock
  *         Handles the Block transfer from Host.
  *         Response to this command message is the RDR_to_PC_DataBlock
  * @param  pdev: device instance
  * @retval status of the command execution
  */
@brief  PC_to_RDR_XfrBlock
Handles the Block transfer from Host.
Response to this command message is the RDR_to_PC_DataBlock
@param  pdev: device instance
@retval status of the command execution
@brief PC_to_RDR_XfrBlock Handles the Block transfer from Host . Response to this command message is the RDR_to_PC_DataBlock @param pdev : device instance @retval status of the command execution
uint8_t  PC_to_RDR_XfrBlock(USBD_HandleTypeDef *pdev)
{
  USBD_CCID_HandleTypeDef  *hccid = (USBD_CCID_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
  uint16_t expectedLength;
  uint8_t error;
  error = CCID_CheckCommandParams(pdev, CHK_PARAM_SLOT | CHK_PARAM_CARD_PRESENT |
                                  CHK_PARAM_ABRFU3 | CHK_PARAM_ABORT | CHK_ACTIVE_STATE);
  if (error != 0U)
  {
    return error;
  }
  if (hccid->UsbBlkOutData.dwLength > ABDATA_SIZE)
  {
    return SLOTERROR_BAD_DWLENGTH;
  }
  expectedLength = (uint8_t)((hccid->UsbBlkOutData.bSpecific_2 << 8) |
                             hccid->UsbBlkOutData.bSpecific_1);
  hccid->UsbBlkInData.dwLength = (uint16_t)expectedLength;
  error = SC_Itf_XferBlock(&(hccid->UsbBlkOutData.abData[0]),
                           hccid->UsbBlkOutData.dwLength,
                           expectedLength, &hccid->UsbBlkInData);
  if (error != SLOT_NO_ERROR)
  {
    CCID_UpdateCommandStatus(pdev, (BM_COMMAND_STATUS_FAILED), (BM_ICC_PRESENT_ACTIVE));
  }
  else
  {
    CCID_UpdateCommandStatus(pdev, (BM_COMMAND_STATUS_NO_ERROR), (BM_ICC_PRESENT_ACTIVE));
    error = SLOT_NO_ERROR;
  }
  return error;
}
uint8_t PC_to_RDR_XfrBlock ( USBD_HandleTypeDef * pdev ) { USBD_CCID_HandleTypeDef * hccid = ( USBD_CCID_HandleTypeDef * ) pdev -> pClassDataCmsit [ pdev -> classId ] ; uint16_t expectedLength ; uint8_t error ; error = CCID_CheckCommandParams ( pdev , CHK_PARAM_SLOT | CHK_PARAM_CARD_PRESENT | CHK_PARAM_ABRFU3 | CHK_PARAM_ABORT | CHK_ACTIVE_STATE ) ; if ( error != 0U ) { return error ; } if ( hccid -> UsbBlkOutData . dwLength > ABDATA_SIZE ) { return SLOTERROR_BAD_DWLENGTH ; } expectedLength = ( uint8_t ) ( ( hccid -> UsbBlkOutData . bSpecific_2 << 8 ) | hccid -> UsbBlkOutData . bSpecific_1 ) ; hccid -> UsbBlkInData . dwLength = ( uint16_t ) expectedLength ; error = SC_Itf_XferBlock ( & ( hccid -> UsbBlkOutData . abData [ 0 ] ) , hccid -> UsbBlkOutData . dwLength , expectedLength , & hccid -> UsbBlkInData ) ; if ( error != SLOT_NO_ERROR ) { CCID_UpdateCommandStatus ( pdev , ( BM_COMMAND_STATUS_FAILED ) , ( BM_ICC_PRESENT_ACTIVE ) ) ; } else { CCID_UpdateCommandStatus ( pdev , ( BM_COMMAND_STATUS_NO_ERROR ) , ( BM_ICC_PRESENT_ACTIVE ) ) ; error = SLOT_NO_ERROR ; } return error ; }
@brief  PC_to_RDR_XfrBlock
         Handles the Block transfer from Host.
@brief PC_to_RDR_XfrBlock Handles the Block transfer from Host .
/* Check amount of Data Sent by Host is > than memory allocated ? */ /* wLevelParameter = Size of expected data to be returned by the
  bulk-IN endpoint */