add fsm.c fsm.h