#include #include #include #include #include #include #define ELO_EVENT_PATH "/dev/input/event3" #define BYTES_PER_LINE 10 #define MAX_READ_ERRORS 10 //#ifdef NDEBUG //#define assert(c,s) //#else //#define assert(c,s) { if (!c) { fprintf(stderr,"ASSERTION FAILED '%.32s': %.1024s\n",##c,s); exit(-1); } //#endif volatile int _userAbort; void PrintByte(char byte) { static int xPos = 0; ++xPos; char trailingChar; if (xPos == BYTES_PER_LINE) { xPos = 0; trailingChar = '\n'; } else { trailingChar = ' '; } char printChar = (isprint(byte) ? byte : ' '); printf ("0x%02hhX %c %c", byte, printChar, trailingChar); } void SignalHandler(int signal) { _userAbort = 1; } int main() { // FILE * fpElo = fopen(ELO_EVENT_PATH, "rb"); // if (fpElo == NULL) int fdElo = open(ELO_EVENT_PATH, O_RDONLY | O_SYNC | O_NOCTTY); if (fdElo == -1) { perror ("Open ELO event node failed"); return (-1); } int errorCount = 0; putchar ('\n'); _userAbort = 0; signal (SIGTERM, SignalHandler); signal (SIGINT, SignalHandler); signal (SIGQUIT, SignalHandler); while (_userAbort == 0) { char bytes[8]; //int bytesRead = fread(&byte, 1, 1, fpElo); int bytesRead = read(fdElo, bytes, 8); if (bytesRead > 0) { PrintByte (bytes[0]); } else if (bytesRead == -1) { // fprintf (stderr, "fread error %i\n", error); perror ("Read ELO event node failed"); ++errorCount; if (errorCount == MAX_READ_ERRORS) { break; } } else { fprintf(stderr,"read() returned 0"); } } signal (SIGTERM, SIG_DFL); signal (SIGINT, SIG_DFL); signal (SIGQUIT, SIG_DFL); putchar ('\n'); //fclose (fpElo); close (fdElo); return (0); }