예제 #1
0
static int32_t stapi_transmit(struct s_reader *reader, unsigned char *sent, uint32_t size) {
    return STReader_Transmit(reader->stsmart_handle, sent, size);
}
예제 #2
0
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;
}