Вы говорите об автомате уровнем выше. Вместо переключения контекста с помощью ОС он может принудительно менять состояние управляемого автомата. // автомат меню открывает кран воды:
switch (wfr_state)
{
case WFR_SHOW_OFFER:
OpenWater();
wfr_state++;
break;
...
// путем смены состояния низшего автомата
void OpenWater(void)
{ valve_status=1; }
// управления клапаном
char WaterService(void)
{ char result=0;
if (fill_timer)
fill_timer--;
switch (valve_status)
{ case 0:
StopValve();
water_service_error=0;
open_valve_time_ms=0;
break;
case 1: // start fill to down sensor
StartValve();
...