Ако примерно избереш да дефинираш типа на стейта по следния начин:
typedef enum state_mode_e {
EStateUndefined = 0,
EStateA, EStateB, ..., EStateN, EStateMax
} state_mode_t;
В самата функция, която ще клати стейт машината можеш да дефинираш следната стекова променлива:
state_mode_t oldopStateModе = EStateUndefined;
после (вероятно в самия switch блок) всеки път, когато променяш стейта, т.е. всеки път преди да напишеш "opStateMode = ..."
добавяй като предишен ред
oldopStateModе = opStateMode;
ако смяташ да извикваш други функции във всеки от 'case'-овете подавай като параметър opStateMode като преди това можеш да извикваш въпросния ред за присвояване или направо можеш да ги подаваш и двете променливи (oldopStateModе и opStateMode) по указател, за да можеш да ги променяш от извиканата функция.