#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);
}