Statemachine{ Events{ { Name{"doorClosed"}, Code{"D1CL"} }, { Name{"drawOpened"}, Code{"D2OP"} }, { Name{"lightOn"}, Code{"L1ON"} }, { Name{"panelClosed"}, Code{"PNCL"} }, { Name{"doorOpened"}, Code{"D1OP"} }, }, ResetEvents{ { Name{"doorOpened"} } }, Commands{ { Name{"unlockDoor"}, Code{"D1UL"} }, { Name{"lockPanel"}, Code{"PNLK"} }, { Name{"unlockPanel"}, Code{"PNUL"} }, { Name{"lockDoor"}, Code{"D1LK"} }, }, State{ Name{"idle"}, Actions[ "unlockDoor", "lockPanel" ], Transitions{ { Event{"doorClosed"} ToState{"active"} } } }, State{ Name{"active"}, Transitions{ { Event{"lightOn"} ToState{"waitingForDraw"} }, { Event{"drawOpened"} ToState{"waitingForLight"} } } }, State{ Name{"unlockedPanel"}, Actions[ "unlockPanel", "lockDoor" ], Transitions{ { Event{"panelClosed"} ToState{"idle"} } } }, State{ Name{"waitingForDraw"}, Transitions{ { Event{"drawOpened"} ToState{"unlockedPanel"} } } }, State{ Name{"waitingForLight"}, Transitions{ { Event{"lightOn"} ToState{"unlockedPanel"} } } }, }