stateDiagram

INIT

INIT : INIT

INIT : enter / #123; HSM_INIT_enter()#59; #125;

INIT : exit / #123; HSM_INIT_exit()#59; #125;

WAIT

WAIT : WAIT

WAIT : enter / #123; HSM_WAIT_enter()#59; #125;

WAIT : exit / #123; HSM_WAIT_exit()#59; #125;

state PROC {

        PROC_OFF

        PROC_OFF : PROC_OFF

        PROC_OFF : enter / #123; HSM_PROC_OFF_enter()#59; #125;

        PROC_OFF : exit / #123; HSM_PROC_OFF_exit()#59; #125;

        state PROC_ON {

                state "$HC" as PROC_ON.(HistoryContinue)

                PROC_ON_WAIT

                PROC_ON_WAIT : PROC_ON_WAIT

                PROC_ON_WAIT : enter / #123; HSM_PROC_ON_WAIT_enter()#59; #125;

                PROC_ON_WAIT : exit / #123; HSM_PROC_ON_WAIT_exit()#59; #125;

                state PROC_ON_EXEC {

                        state "$HC" as PROC_ON_EXEC.(HistoryContinue)

                        PROC_ON_EXEC_SINGLE

                        PROC_ON_EXEC_SINGLE : PROC_ON_EXEC_SINGLE

                        PROC_ON_EXEC_SINGLE : enter / #123; HSM_PROC_ON_EXEC_SINGLE_enter()#59; #125;

                        PROC_ON_EXEC_SINGLE : exit / #123; HSM_PROC_ON_EXEC_SINGLE_exit()#59; #125;

                        PROC_ON_EXEC_MULTI

                        PROC_ON_EXEC_MULTI : PROC_ON_EXEC_MULTI

                        PROC_ON_EXEC_MULTI : enter / #123; HSM_PROC_ON_EXEC_MULTI_enter()#59; #125;

                        PROC_ON_EXEC_MULTI : exit / #123; HSM_PROC_ON_EXEC_MULTI_exit()#59; #125;

                        %% Initial state name as "." so that it fits in black circle shape.
                        %% See https://github.com/StateSmith/StateSmith/issues/404
                        state "." as PROC_ON_EXEC.(InitialState)

                        state "$H" as PROC_ON_EXEC.(History)

                }

                %% Initial state name as "." so that it fits in black circle shape.
                %% See https://github.com/StateSmith/StateSmith/issues/404
                state "." as PROC_ON.(InitialState)

        }

        %% Initial state name as "." so that it fits in black circle shape.
        %% See https://github.com/StateSmith/StateSmith/issues/404
        state "." as PROC.(InitialState)

        state "$H" as PROC.(History)

}

%% Initial state name as "." so that it fits in black circle shape.
%% See https://github.com/StateSmith/StateSmith/issues/404
state "." as ROOT.(InitialState)

INIT --> WAIT : GOTO_WAIT

WAIT --> PROC : GOTO_PROC

PROC --> WAIT : GOTO_WAIT

PROC_OFF --> PROC_ON : PROC_ON

PROC_ON --> PROC_OFF : PROC_OFF

PROC_ON_WAIT --> PROC_ON_EXEC : PROC_EXEC

PROC_ON_EXEC --> PROC_ON_WAIT : PROC_WAIT

PROC_ON_EXEC_SINGLE --> PROC_ON_EXEC_MULTI : PROC_MULTI

PROC_ON_EXEC_MULTI --> PROC_ON_EXEC_SINGLE : PROC_SINGLE

PROC_ON_EXEC.(InitialState) --> PROC_ON_EXEC.(History)

PROC_ON_EXEC.(History) --> PROC_ON_EXEC_SINGLE

PROC_ON.(InitialState) --> PROC_ON_WAIT

PROC.(InitialState) --> PROC.(History)

PROC.(History) --> PROC_OFF

ROOT.(InitialState) --> INIT