X-Git-Url: https://rtime.felk.cvut.cz/gitweb/coffee/mt-apps.git/blobdiff_plain/fbd9cb63f38c85c12260d6e48485318a83ba3815..76ac2aafdfc101070cc6e32a24019899eceefab9:/main.c diff --git a/main.c b/main.c index 368555a..e652d02 100644 --- a/main.c +++ b/main.c @@ -10,51 +10,104 @@ #include #include +#include +#include +#include #include "uFCoder.h" -#define READER_TYPE 1 //uFR type (1Mbps) -#define PORT_NAME "/dev/ttyUSB0" //"" to check all -#define PORT_INTERFACE 1 //Serial +#define READER_TYPE 1 //uFR type (1Mbps) +#define PORT_NAME "/dev/ttyUSB0" +#define PORT_INTERFACE 1 //Serial -int main(void) +#define JSON_NUM(NAME) printf("\"" #NAME "\": %d", NAME) +#define JSON_STR(NAME) printf("\"" #NAME "\": \"%s\"", NAME) +#define JSON_START() printf("{\n") +#define JSON_NEXT() printf(",\n") +#define JSON_END() printf("\n}\n") + +static int run = 1; + +static void signal_exit(int sig) +{ + fprintf(stderr, "signal %d\n", sig); + run = 0; +} + +static void *read_cards(void *ptr) { UFR_STATUS status; - printf("uFCoder library version: %s\n", GetDllVersionStr()); + uint8_t card_type; + uint8_t sak; + uint8_t uid_num[10]; + uint8_t uid_size; + char uid[24]; + + fprintf(stderr, "uFCoder library version: %s\n", GetDllVersionStr()); status = ReaderOpenEx(READER_TYPE, PORT_NAME, PORT_INTERFACE, 0); - printf("ReaderOpenEx: %s\n", UFR_Status2String(status)); + if (status != UFR_OK) { + fprintf(stderr, "ReaderOpenEx: %s\n", UFR_Status2String(status)); + return NULL; + } //status = ReaderUISignal(0, 0); //printf("ReaderUISignal: %s\n", UFR_Status2String(status)); - puts(GetReaderDescription()); + fputs(GetReaderDescription(), stderr); - uint8_t lpucCardType; - status = GetDlogicCardType(&lpucCardType); - printf("GetDlogicCardType: %s\n", UFR_Status2String(status)); - if (status != UFR_OK) { - return status; - } - printf("card type: %x\n", lpucCardType); + while (run) { + status = GetDlogicCardType(&card_type); + if (status != UFR_OK) { + if (status != UFR_NO_CARD) { + fprintf(stderr, "GetDlogicCardType: %s\n", UFR_Status2String(status)); + } + usleep(10000); + continue; + } - uint8_t lpucSak; - uint8_t aucUid[10]; - uint8_t lpucUidSize; - status = GetCardIdEx(&lpucSak, aucUid, &lpucUidSize); - printf("GetCardIdEx: %s\n", UFR_Status2String(status)); - if (status != UFR_OK) { - return status; - } - printf("lpucSak: %d, lpucUidSize: %d, aucUid: ", lpucSak, lpucUidSize); - for (uint8_t i = 0; i < lpucUidSize; i++) { - printf("%x", aucUid[i]); + status = GetCardIdEx(&sak, uid_num, &uid_size); + if (status != UFR_OK) { + if (status != UFR_NO_CARD) { + fprintf(stderr, "GetCardIdEx: %s\n", UFR_Status2String(status)); + } + usleep(10000); + continue; + } + + for (uint8_t i = 0; i < uid_size; i++) { + sprintf(&uid[2*i], "%02x", uid_num[i]); + } + + JSON_START(); + JSON_NUM(card_type); JSON_NEXT(); + JSON_NUM(sak); JSON_NEXT(); + JSON_NUM(uid_size); JSON_NEXT(); + JSON_STR(uid); JSON_END(); + + usleep(500000); } - printf("\n"); status = ReaderClose(); - printf("ReaderClose: %s\n", UFR_Status2String(status)); + fprintf(stderr, "ReaderClose: %s\n", UFR_Status2String(status)); + + return NULL; +} + +int main(void) +{ + pthread_t t; + + signal(SIGINT, signal_exit); + signal(SIGTERM, signal_exit); + + if (pthread_create(&t, NULL, read_cards, NULL)) { + perror("pthread_create"); + return -1; + } + + pthread_join(t, NULL); - return status; + return 0; }