15 #include "simpletools.h" 20 rfidser *rfid_open(
int soutPin,
int enablePin)
27 extern int binary_pst_dat_start[];
31 char* idstr = (
char*) malloc(12);
35 char* bufptr = (
char*) malloc(2*(FDSERIAL_BUFF_MASK+1));
36 rfidser* term = (rfidser*) malloc(
sizeof(rfidser));
37 memset(term, 0,
sizeof(rfidser));
39 rfidptr = (
void*) malloc(
sizeof(rfid_st));
40 term->devst = rfidptr;
41 memset((
char*)rfidptr, 0,
sizeof(rfid_st));
43 if(rxpin == 31 && txpin == 30) {
48 term->txChar = fdserial_txChar;
49 term->rxChar = fdserial_rxChar;
51 rfidptr->rx_pin = rxpin;
52 rfidptr->tx_pin = txpin;
54 rfidptr->en = enablePin;
57 rfidptr->ticks = CLKFREQ/baudrate;
58 rfidptr->buffptr = bufptr;
59 rfidptr->idstr = idstr;
63 #if defined(__PROPELLER_USE_XMM__) 64 {
unsigned int buffer[2048];
65 memcpy(buffer, binary_pst_dat_start, 2048);
66 term->cogid[0] = cognew(buffer, (
void*)rfidptr) + 1;
69 term->cogid[0] = setStopCOGID(cognew((
void*)binary_pst_dat_start, (
void*)rfidptr));
71 waitcnt(CLKFREQ/2+CNT);
78 void rfidser_close(rfidser *device)
80 int id = device->cogid[0];
81 rfid_st* rfidp = (rfid_st*) device->devst;
83 while(fdserial_rxCheck(device) >= 0)
85 fdserial_txFlush(device);
87 if(
id > 0) cogstop(getStopCOGID(
id));
89 free((
void*)rfidp->buffptr);
90 free((
void*)rfidp->idstr);
97 void rfid_reset(rfidser *device)
99 volatile rfid_st* rfidp = (rfid_st*) device->devst;
100 int rfidEn = rfidp->en;
107 void rfid_disable(rfidser *device)
109 volatile rfid_st* rfidp = (rfid_st*) device->devst;
110 int rfidEn = rfidp->en;
116 void rfid_enable(rfidser *device)
118 volatile rfid_st* rfidp = (rfid_st*) device->devst;
119 int rfidEn = rfidp->en;
125 char *rfid_get(rfidser *device,
int timeoutms)
127 volatile rfid_st* rfidp = (rfid_st*) device->devst;
128 memset(rfidp->idstr, 0, 12);
130 int dt = (CLKFREQ / 1000) * timeoutms;
133 while(fdserial_rxCheck(device) != 0x0A)
137 memcpy(rfidp->idstr,
"timed out\0\0\0", 12);
142 readStr(device, rfidp->idstr, 12);