home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / usbd0906.zip / usb_20020906.zip / usbcalls / samples / Cardreader / GCUSBTransport.cpp < prev    next >
C/C++ Source or Header  |  2001-11-13  |  2KB  |  71 lines

  1. /*
  2.  *  GCUSBTransport.c.c
  3.  *  ifd-GemPC430
  4.  *
  5.  *  Created by JL Giraud <jl.giraud@free.fr> on Sun Nov 19 2000.
  6.  *
  7.  * Transport level for the GemPC430 of Gemplus.
  8.  *
  9.  *  License:   See file COPYING
  10.  *
  11.  */
  12.  
  13. #include <pcscdefines.h>
  14. #include <ifdhandler.h>
  15. #include <string.h>
  16. #include "usbserial.h"
  17. #include "GemCore.h"
  18. #include "GCUSBTransport.h"
  19.  
  20.  
  21.              
  22. RESPONSECODE GCSendCommand(DWORD Lun, DWORD nLengthIn, 
  23.                            const PUCHAR pcBufferCmd,
  24.                            PDWORD pnLengthOut,
  25.                            PUCHAR pcBufferOut)
  26. {
  27.     UCHAR pctr_to_card_buffer[GC_TR_BUF_SIZE];
  28.     UCHAR creturn_value;
  29.     DWORD nlength;
  30.     
  31.     creturn_value = STATUS_SUCCESS;
  32.     
  33.     if (GC_TR_BUF_SIZE <= nLengthIn)
  34.     {
  35.         // Buffer is too small (should not happen)
  36.         creturn_value = STATUS_DEVICE_PROTOCOL_ERROR;
  37.         goto finally;
  38.     }
  39.     
  40.     memcpy(pctr_to_card_buffer+1, pcBufferCmd, nLengthIn);
  41.     pctr_to_card_buffer[TR_OFFSET_LNG] = nLengthIn;
  42.     if (WriteUSB(Lun, nLengthIn+1, pctr_to_card_buffer) != STATUS_SUCCESS)
  43.     {        
  44.         creturn_value = STATUS_DEVICE_PROTOCOL_ERROR;
  45.         goto finally;
  46.     }
  47.  
  48.     nlength = sizeof(pctr_to_card_buffer);
  49.     if (ReadUSB(Lun, &nlength, pctr_to_card_buffer) != STATUS_SUCCESS)
  50.     {
  51.         creturn_value = STATUS_DEVICE_PROTOCOL_ERROR;
  52.         goto finally;
  53.     }
  54.     if ( nlength < 1 )
  55.     {
  56.         // length byte not received
  57.         creturn_value = STATUS_DEVICE_PROTOCOL_ERROR;        
  58.         goto finally;
  59.     }
  60.     nlength--;
  61.     *pnLengthOut = (*pnLengthOut<nlength) ? *pnLengthOut : nlength;
  62.     memcpy(pcBufferOut, pctr_to_card_buffer+1, *pnLengthOut);
  63. finally:
  64.     if ( creturn_value != STATUS_SUCCESS )
  65.         *pnLengthOut = 0;
  66.     // Clear buffer
  67.     bzero(pctr_to_card_buffer, sizeof(pctr_to_card_buffer));
  68.     return creturn_value;
  69. }
  70.  
  71.