#include #include #include #include #include #include "linux_nfc_api.h" #include #include #include #include #include #include /* ---------------------------------------- */ /* ---------------------------------------- */ int running = 1; struct sigaction sigIntHandler; pthread_cond_t condition = PTHREAD_COND_INITIALIZER; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; nfcTagCallback_t g_TagCB; /* ---------------------------------------- */ /* ---------------------------------------- */ void onTagArrival(nfc_tag_info_t *pTagInfo){ syslog (LOG_INFO, "Tag Detected"); for(int i = 0; i < (*pTagInfo).uid_length; i++){ printf("%02X", (unsigned char) (*pTagInfo).uid[i]); } printf("\n"); pthread_cond_signal(&condition); } /* ---------------------------------------- */ /* ---------------------------------------- */ void onTagDeparture(void){ syslog (LOG_INFO, "Tag leaved"); } /* ---------------------------------------- */ /* ---------------------------------------- */ void signal_callback_handler(sig_atomic_t signum) { syslog (LOG_INFO, "Receive stop handler"); running = 0; pthread_cond_signal(&condition); } /* ---------------------------------------- */ int main(int argc, char ** argv) { signal(SIGINT, signal_callback_handler); signal(SIGTERM, signal_callback_handler); openlog ("nfc", LOG_CONS | LOG_NDELAY, LOG_LOCAL1); syslog (LOG_INFO, "Starting Handler"); g_TagCB.onTagArrival = onTagArrival; g_TagCB.onTagDeparture = onTagDeparture; syslog (LOG_INFO, "Initializing NFC"); nfcManager_doInitialize(); syslog (LOG_INFO, "Registering Callback"); nfcManager_registerTagCallback(&g_TagCB); syslog (LOG_INFO, "Enable Card Discovery"); nfcManager_enableDiscovery(DEFAULT_NFA_TECH_MASK, 0x01, 0, 0); syslog (LOG_INFO, "Waiting for TAG"); do{ pthread_cond_wait(&condition, &mutex); } while(running == 1); syslog (LOG_INFO, "Deinitialize driver"); nfcManager_doDeinitialize(); syslog (LOG_INFO, "Driver ends"); closelog(); } /* ---------------------------------------- */ /* ---------------------------------------- */