int rfid_execute(void *data, unsigned int isize, unsigned int osize) { int res; if((res=rfid_write(data, isize))<0) return res; else return rfid_read(data, osize); }
void sysRfidread(char* id,int bloc) { #ifdef VSIMU VPUSH(NIL); #endif #ifdef VREAL char buf[4]; int k=rfid_read(id,bloc,buf); if (k) { VPUSH(NIL); return; } VPUSH(PNTTOVAL(VMALLOCSTR(buf,4))); #endif }
static int rfid_execute(void *data, unsigned int isize, unsigned int osize) { int res; if (rfid_write(data, isize)) { debug_printf("getting result\n"); res = rfid_read(data, osize); if (res > 0) rfid_hexdump(data, res); else debug_printf("error: res=%i\n", res); } else { debug_printf("->NACK!\n"); res = -1; } return res; }
int rfid_write(const void *data, int len) { int i; static const unsigned char preamble[] = { 0x01, 0x00, 0x00, 0xFF }; const unsigned char *p = preamble; unsigned char tfi = 0xD4, c; if (!data) len = 0xFF; /* enable chip select */ rfid_cs(0); p = preamble; /* Praeamble */ for (i = 0; i < (int) sizeof(preamble); i++) rfid_tx(*p++); rfid_tx(len + 1); /* LEN */ rfid_tx(0x100 - (len + 1)); /* LCS */ rfid_tx(tfi); /* TFI */ /* PDn */ p = (const unsigned char *) data; while (len--) { c = *p++; rfid_tx(c); tfi += c; } rfid_tx(0x100 - tfi); /* DCS */ rfid_rx(); /* Postamble */ /* release chip select */ rfid_cs(1); /* check for ack */ return rfid_read(NULL, 0); }