#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> #include <sys/time.h> #include <errno.h> #include <dlfcn.h> #include "intypes.h" #include "log.h" #include "edsm.h" #include "load-tool.h" int hw_idle_enter(struct edsm *me) { struct ecap_engine *ecap = me->ecap; start_tick(ecap, me->timers[0]); return 0; } int do_hw(struct edsm *me) { /* get context */ int *c = (int *)me->data; printf("Hello, World! (%d)\n", ++(*c)); return 0; } int hw_idle_leave(struct edsm *me) { struct ecap_engine *ecap = me->ecap; stop_tick(ecap, me->timers[0]); log_msg("Good Bye, World!\n"); return 0; } int hw_done_enter(struct edsm *me) { return 1; /* завершаем цикл приёма событий */ } /* описание конечного автомата */ struct edsm_desc *hw_desc; /* набор состояний-переходов для него */ struct state *hw_state_set; /* сам конечный автомат */ struct edsm *hw; /* контекст для автомата, для примера просто число */ int cnt = 0; int main(int argc, char *argv[], char *envp[]) { int nch; /* загружаем описание конечного автомата */ hw_desc = edsm_load_desc("./", "hw.smd"); /* получаем набор состояний для него */ hw_state_set = edsm_get_state_set(hw_desc); /* количество каналов для нашего автомата */ nch = hw_desc->nch; /* загружаем event capture engine */ edsm_load_engine("./", "libecap-poll.so", nch); hw = edsm_create(hw_desc, hw_state_set, &cnt); log_msg("INFO: started\n"); /* get the ball rolling */ edsm_run_engine(); log_msg("INFO: terminated\n\n"); exit(0); }