2 ============================================================================
7 Description : Very simple test of uFR library
8 ============================================================================
20 #define READER_TYPE 1 //uFR type (1Mbps)
22 #define PORT_NAME "/dev/ttyUSB0" //"" for auto
24 #define PORT_INTERFACE 1 //Serial
26 // really simple JSON helpers
27 #define JSON_NUM(NAME) printf("\"" #NAME "\": %d", NAME)
28 #define JSON_STR(NAME) printf("\"" #NAME "\": \"%s\"", NAME)
29 #define JSON_START() printf("{\n")
30 #define JSON_NEXT() printf(",\n")
31 #define JSON_END() printf("\n}\n")
33 static mt_rfid_t ufr = {READER_TYPE, PORT_NAME, PORT_INTERFACE, 0, 1};
35 static void signal_exit(int sig)
38 fprintf(stderr, "signal %d, terminating\n", sig);
41 void *mt_rfid_run(void *ptr)
43 mt_rfid_t *self = (mt_rfid_t *)ptr;
47 uint8_t sak; //select acknowledge
48 uint8_t uid_num[10]; //uid as bytes
50 char uid[24]; //uid as a string
52 fprintf(stderr, "uFCoder library version: %s\n", GetDllVersionStr());
54 status = ReaderOpenEx(self->reader_type, self->port_name, self->port_interface, 0);
55 if (status != UFR_OK) {
56 fprintf(stderr, "ReaderOpenEx: %s\n", UFR_Status2String(status));
60 fputs(GetReaderDescription(), stderr);
63 status = GetDlogicCardType(&card_type);
64 if (status != UFR_OK) {
65 if (status != UFR_NO_CARD) {
66 fprintf(stderr, "GetDlogicCardType: %s\n", UFR_Status2String(status));
72 status = GetCardIdEx(&sak, uid_num, &uid_size);
73 if (status != UFR_OK) {
74 if (status != UFR_NO_CARD) {
75 fprintf(stderr, "GetCardIdEx: %s\n", UFR_Status2String(status));
81 for (uint8_t i = 0; i < uid_size; i++) {
82 sprintf(&uid[2*i], "%02x", uid_num[i]);
86 JSON_NUM(card_type); JSON_NEXT();
87 JSON_NUM(sak); JSON_NEXT();
88 JSON_NUM(uid_size); JSON_NEXT();
89 JSON_STR(uid); JSON_END();
98 status = ReaderClose();
99 fprintf(stderr, "ReaderClose: %s\n", UFR_Status2String(status));
104 int main(int argc, char **argv)
109 while ((c = getopt(argc, argv, "p:bh")) != -1) {
112 ufr.port_name = optarg;
120 // avoid sigaction for windows compatibility
121 signal(SIGINT, signal_exit);
122 signal(SIGTERM, signal_exit);
124 if (pthread_create(&t, NULL, mt_rfid_run, (void *)&ufr)) {
125 perror("pthread_create");
129 pthread_join(t, NULL);