/* main.c */
#include "ed/inc/fsm.h"
#include <stdio.h>

/* liste des etats */
typedef enum
{
   STS_OFF,
   STS_ON,
   STS_NB
}
STS;

/* liste des evenements */
typedef enum
{
   EVT_BP,
   EVT_NB
}
EVT;

static int OFFtoONbyBP (void *pdata)
{
   /* action */
   printf("LED=ON\n");
   return 0;
}

static int ONtoOFFbyBP (void *pdata)
{
   /* action */
   printf("LED=OFF\n");
   return 0;
}

int main (void)
{
/* creation d'une machine a etat */
   sFSM *my_fsm = FSM_init (EVT_NB, STS_NB, NULL, STS_OFF);

   if (my_fsm != NULL)
   {
      /* les transitions sans les actions */
      FSM_transition (my_fsm, OFFtoONbyBP, "OFF to ON by BP", STS_OFF, STS_ON, EVT_BP);
      FSM_transition (my_fsm, ONtoOFFbyBP, "ON to OFF by BP", STS_ON, STS_OFF, EVT_BP);

      /* evenements de test */
      FSM_engine (my_fsm, EVT_BP, NULL); /* Action attendue : LED ON */
      FSM_engine (my_fsm, EVT_BP, NULL); /* Action attendue : LED OFF */

      /* destruction de la machine a etat */
      FSM_end (my_fsm), my_fsm = NULL;
   }

   /* Dev-c++ trick ... */
   system ("pause");
   return 0;
}
