static int32_t stapi_transmit(struct s_reader *reader, unsigned char *sent, uint32_t size) { return STReader_Transmit(reader->stsmart_handle, sent, size); }
int32_t ICC_Async_Transmit (struct s_reader *reader, uint32_t size, BYTE * data) { cs_ddump_mask(D_IFD, data, size, "IFD Transmit: "); BYTE *buffer = NULL, *sent; if (reader->crdr.active==1) { if (reader->convention == ATR_CONVENTION_INVERSE && reader->crdr.need_inverse==1) { buffer = (BYTE *) calloc(sizeof (BYTE), size); memcpy (buffer, data, size); ICC_Async_InvertBuffer (size, buffer); sent = buffer; } else sent = data; call(reader->crdr.transmit(reader, sent, size)); if (buffer) free (buffer); cs_debug_mask(D_IFD, "IFD Transmit succesful"); return OK; } if (reader->convention == ATR_CONVENTION_INVERSE && reader->typ <= R_MOUSE) { buffer = (BYTE *) calloc(sizeof (BYTE), size); memcpy (buffer, data, size); ICC_Async_InvertBuffer (size, buffer); sent = buffer; } else sent = data; switch(reader->typ) { case R_MP35: case R_DB2COM1: case R_DB2COM2: case R_SC8in1: case R_MOUSE: call (Phoenix_Transmit (reader, sent, size, reader->block_delay, reader->char_delay)); break; #if defined(LIBUSB) case R_SMART: call (SR_Transmit(reader, sent, size)); break; #endif case R_INTERNAL: #if defined(COOL) call (Cool_Transmit(sent, size)); #elif defined(AZBOX) call (Azbox_Transmit(reader, sent, size)); #elif defined(SCI_DEV) call (Phoenix_Transmit (reader, sent, size, 0, 0)); //the internal reader will provide the delay #elif defined(WITH_STAPI) call (STReader_Transmit(reader->stsmart_handle, sent, size)); #endif break; default: cs_log("ERROR ICC_Async_Transmit: unknow reader type %i",reader->typ); return ERROR; } if (buffer) free (buffer); cs_debug_mask(D_IFD, "IFD Transmit succesful"); return OK; }