From aa692f0dcdeefc846d7fa11222d6b2f6af17f5fa Mon Sep 17 00:00:00 2001 From: cbdev Date: Sat, 17 Jun 2023 23:04:38 +0200 Subject: Core loop base --- nfcommander.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) (limited to 'nfcommander.c') diff --git a/nfcommander.c b/nfcommander.c index de50ef4..ceadec7 100644 --- a/nfcommander.c +++ b/nfcommander.c @@ -1,21 +1,54 @@ #include +#include +#include +#include #include "nfcommander.h" #include "config.h" #include "reader.h" #include "control.h" -int usage(char* fn){ - printf("NFCommander - trigger actions based on near-field tags\n"); +static volatile sig_atomic_t shutdown_requested = 0; +static int epoll_fd = -1; + +static void signal_handler(int signum){ + shutdown_requested = 1; +} + +static int usage(char* fn){ + printf("NFCommander %s - trigger actions based on near-field tags\n", + NFCOMMANDER_VERSION); printf("\tUsage: %s \n", fn); return EXIT_FAILURE; } +int core_manage_fd(int fd, int manage, notification_target_t system){ + struct epoll_event event = { + .events = EPOLLIN, + .data.u32 = system + }; + + if(epoll_ctl(epoll_fd, manage ? EPOLL_CTL_ADD : EPOLL_CTL_DEL, fd, &event)){ + fprintf(stderr, "Failed to modify epoll instance\n"); + shutdown_requested = 1; + return 1; + } + return 0; +} + int main(int argc, char** argv){ if(argc < 2){ return usage(argv[0]); } + //set up epoll instance + struct epoll_event events[10]; + epoll_fd = epoll_create1(EPOLL_CLOEXEC); + if(epoll_fd < 0){ + printf("Failed to create epoll instance\n"); + return EXIT_FAILURE; + } + //read configuration if(config_read(argv[1])){ return usage(argv[0]); @@ -27,10 +60,23 @@ int main(int argc, char** argv){ //start control api control_start(); + //handle signals + signal(SIGINT, signal_handler); + signal(SIGPIPE, SIG_IGN); + //handle events - //TODO + while(!shutdown_requested){ + int event_count = epoll_wait(epoll_fd, events, sizeof(events) / sizeof(struct epoll_event), 1000); + if(event_count < 0){ + break; + } + + printf("%d events\n", event_count); + } //clean up + close(epoll_fd); + epoll_fd = -1; reader_free(); control_free(); config_free(); -- cgit v1.2.3