extern char ev1, ev2, ev3; // events

enum OBJ_STATES obj_fsm_state;
char obj_fsm_out;

/// initialize object
void init_obj (void)
{
        obj_fsm_state = OBJ_STATE_INIT;
        obj_fsm_out = 0;
}

/// update object FSM state
void update_obj (void)
{
        switch (obj_fsm_state) {

        case OBJ_STATE_1:
                if (ev2) {
                        obj_fsm_state = OBJ_STATE_2;
                        obj_fsm_out = 2;
                }
                else if (ev3) {
                        obj_fsm_state = OBJ_STATE_3;
                        obj_fsm_out = 3;
                }
                break;

        case OBJ_STATE_2:
                if (ev1) {
                        obj_fsm_state = OBJ_STATE_1;
                        obj_fsm_out = 1;
                }
                else if (ev3) {
                        obj_fsm_state = OBJ_STATE_3;
                        obj_fsm_out = 3;
                }
                break;

        case OBJ_STATE_3:
                if (ev1) {
                        obj_fsm_state = OBJ_STATE_1;
                        obj_fsm_out = 1;
                }
                else if (ev2) {
                        obj_fsm_state = OBJ_STATE_2;
                        obj_fsm_out = 2;
                }
                break;
        }
}
