コード例 #1
0
ファイル: ok.c プロジェクト: jdkbx/librfid-pcsc-ifdhandler
/* wrap data, transmit to the device and get answer */
RESPONSECODE sendData(PUCHAR TxBuffer, DWORD TxLength, 
				 PUCHAR RxBuffer, PDWORD RxLength, int wait)
{
	RESPONSECODE rc;
	
	if (present == 0)
	{
		return IFD_COMMUNICATION_ERROR;
	}
	
	unsigned char apdu[TxLength];
	unsigned char buffer[2000];
	unsigned int i, j, response_length, n = 0;
	int sLen = TxLength;
	
	for (i = 0; i < TxLength; ++i)
	{
		apdu[i] = *(TxBuffer + i);
	}

	Log2(PCSC_LOG_DEBUG, "preparing to write %d data bytes", TxLength);
	printf(">> %s \n", hexdump(TxBuffer, TxLength));
	int rv;

	rv = rfid_protocol_transceive(ph, TxBuffer, TxLength, RxBuffer, &response_length, 0, 0);
	if (rv < 0)
	{
		Log2(PCSC_LOG_ERROR, "Error from transceive, returned %d\n", rv);
		present = 0;
		rfid_protocol_close(ph);
		rfid_layer2_close(l2h);
		rfid_reader_close(rh);
		return IFD_COMMUNICATION_ERROR;
	}

	Log2(PCSC_LOG_DEBUG, "wrote %d data bytes", TxLength);		
	Log2(PCSC_LOG_DEBUG, "got %d response bytes", response_length);
		
    if (response_length > 0)
    {
		*RxLength = response_length;
		
		//for (j = 0; j < response_length; ++j)
		//{
		//	*(RxBuffer + j) = buffer[j];
		//}
		rc = IFD_SUCCESS;
	    
	}
	else
	{
	    Log1(PCSC_LOG_ERROR, "no response, meaning eof, reader not usable anymore\n");
		present = 0;
		rfid_protocol_close(ph);
		rfid_layer2_close(l2h);
		rfid_reader_close(rh);
	    rc = IFD_COMMUNICATION_ERROR;
	}
	return rc;
}
コード例 #2
0
ファイル: ok.c プロジェクト: jdkbx/librfid-pcsc-ifdhandler
void closeLib()
{
	RESPONSECODE rv;

	if (present == 1)
	{
		rfid_protocol_close(ph);
		rfid_layer2_close(l2h);
	}

	present = 0;
	rfid_reader_close(rh);
}
コード例 #3
0
ファイル: openpcd.c プロジェクト: dpavlin/librfid
EXPORT int EXPORT_CONVENTION openpcd_select_card(MIFARE_HANDLE handle)
{
    int res;
    struct openpcd_state *state;
        
    if(!handle)
	return PCDERROR_INVALID_PARAMETER;
    state=(struct openpcd_state*)handle;
    
    state->l2h = rfid_layer2_init(state->rh,RFID_LAYER2_ISO14443A);
    if(!state->l2h)
	res=PCDERROR_LAYER2_INIT;
    else
    {        
	if( rfid_layer2_open(state->l2h)>=0 ) 
	{
    	    state->ph = rfid_protocol_init(state->l2h,RFID_PROTOCOL_MIFARE_CLASSIC);
	
	    if(state->ph)
    	    {
		if(rfid_protocol_open(state->ph)>=0)
	    	    return PCDERROR_NONE;
		
		rfid_protocol_fini(state->ph);
		state->ph=NULL;
	
		res=PCDERROR_LAYER3_OPEN;
	    }
	    else
		res=PCDERROR_LAYER3_INIT;

	    rfid_layer2_close(state->l2h);	
        }
	else
    	    res=PCDERROR_LAYER2_OPEN;
    }
    
    rfid_layer2_fini(state->l2h);
    state->l2h=NULL;
    
    return res;	
}
コード例 #4
0
ファイル: main_mifare.c プロジェクト: 12019/openpcd
void _main_func(void)
{
	int ret;

	usb_out_process();
	usb_in_process();
	
	ret = init_proto();

	if (ret >= 4)
		rfid_protocol_close(ph);
	if (ret >= 3)
		rfid_layer2_close(l2h);

	rc632_turn_off_rf(NULL);
	{ volatile int i; for (i = 0; i < 0xfffff; i++) ; }
	rc632_turn_on_rf(NULL);

	led_switch(1, 0);
	led_toggle(2);
}
コード例 #5
0
ファイル: openpcd.c プロジェクト: dpavlin/librfid
EXPORT int EXPORT_CONVENTION openpcd_deselect_card(MIFARE_HANDLE handle)
{
    struct openpcd_state *state;
        
    if(!handle)
	return PCDERROR_INVALID_PARAMETER;
    state=(struct openpcd_state*)handle;
    
    if(state->ph)
    {
	rfid_protocol_close(state->ph);
	rfid_protocol_fini(state->ph);
	rfid_layer2_close(state->l2h);
	rfid_layer2_fini(state->l2h);

	state->ph=NULL;
	state->l2h=NULL;
	state->uid=0;
	
	return PCDERROR_NONE;
    }    
    else
	return PCDERROR_CLOSED;
}