create hsmc repo
This commit is contained in:
commit
0506ec019b
26 files changed
+5413
No files matched your search
@@ -0,0 +1,97 @@
|
||||
// TODO: add Timeout mechanism
|
||||
|
||||
//
|
||||
// * "Machine" is the root state
|
||||
// * the event queue size is specified in the machine declaration
|
||||
// * the root state is a state just like any other, nothing special
|
||||
// * the root state is named TOPSTATE
|
||||
// * A state may contain other states
|
||||
// * A state may contain Default, Entry, Idle, Exit, Transition, Action, and Terminate
|
||||
// * A single Default is allowed per state
|
||||
// * There may only be one transition per event
|
||||
// * Multiple actions are allowed per event
|
||||
// * Multiple Entry, Idle, and Exit function calls are allowed
|
||||
// * Terminate() causes all states to exit, including the root state
|
||||
// * Multiple machines may exist per single input file
|
||||
// * nested states must be represented hierarchically in input file via {} pairs
|
||||
// * all keywords are case insensitive
|
||||
// * keywords are reserved and CANNOT be used for identifiers
|
||||
// * only C++ style comments are supported
|
||||
// * C/C++ style source formatting suggested
|
||||
// * whitespace is completely ignored
|
||||
// * no empty machines
|
||||
// * no empty states
|
||||
// * symbols longer than 256 characters are truncated
|
||||
//
|
||||
|
||||
|
||||
// comment
|
||||
|
||||
Machine(name,16) // Machine is a special alias to State
|
||||
{
|
||||
// this is required in the main state
|
||||
Default(FirstState);
|
||||
//Default(seconddefault);
|
||||
|
||||
// this is optional in the main state
|
||||
Entry(mainentry);
|
||||
Entry(mainentry2);
|
||||
Entry(mainentry3);
|
||||
Idle(blah);
|
||||
Exit(mainexit);
|
||||
|
||||
sTaTe(FirstState)
|
||||
{
|
||||
ENTRY(blah);
|
||||
idle(blah);
|
||||
Exit(blah);
|
||||
|
||||
Transition(Event2,SecondState);
|
||||
//Transition(Event2,xSecondState);
|
||||
Action(Event,xAction);
|
||||
|
||||
|
||||
State(SubState){Idle(blah);State(SubSubState){Idle(ssblah);State(SubSubSubState){Idle(sssblah);}}}
|
||||
//State(SubState){Idle(blah);State(SubSubState){Idle(ssblah);State(SubSubSubState){Idle(sssblah);}}}
|
||||
|
||||
Terminate(reallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolreallyLongSymbolXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX);
|
||||
|
||||
}
|
||||
|
||||
State(SecondState)
|
||||
{
|
||||
Idle ( blah ) //
|
||||
;
|
||||
Transition(Event1,FirstState);
|
||||
//Transition(sldfkj,blkjsdlfkja);
|
||||
}
|
||||
|
||||
State(xSecondState)
|
||||
{
|
||||
Idle(blah);
|
||||
}
|
||||
|
||||
State(SomeEndState)
|
||||
{
|
||||
Entry(blah);
|
||||
Exit(blah);
|
||||
Terminate(someevent);
|
||||
Action(0.23,something);
|
||||
//Terminate(someevent);
|
||||
}
|
||||
|
||||
Transition(1,FirstState);
|
||||
Action(0.99, asldkfj);
|
||||
Action(0.99, asldkfj1);
|
||||
Action(0.99, asldkfj2);
|
||||
//Transition(0., xSecondState);
|
||||
//Action(0.00001,alsdjf);
|
||||
|
||||
}
|
||||
|
||||
Machine(othermach,1)
|
||||
{
|
||||
Entry(blbla);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
#include "traffic.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <windows.h> // for Sleep()
|
||||
#include <conio.h> // for kbhit()
|
||||
|
||||
|
||||
class MyStoplight: public stoplight
|
||||
{
|
||||
public:
|
||||
virtual void DoPOST()
|
||||
{
|
||||
printf("DoPOST\n");
|
||||
}
|
||||
virtual void CheckForError()
|
||||
{
|
||||
if ( kbhit() )
|
||||
{
|
||||
printf("Encountered critical error\n");
|
||||
HSMTrigger(FAILURE);
|
||||
}
|
||||
}
|
||||
virtual void GreenOff ()
|
||||
{
|
||||
printf("Green Off\n");
|
||||
}
|
||||
virtual void GreenOn()
|
||||
{
|
||||
printf("Green On\n");
|
||||
}
|
||||
virtual void YellowOff()
|
||||
{
|
||||
printf("Yellow Off\n");
|
||||
}
|
||||
virtual void YellowOn()
|
||||
{
|
||||
printf("Yellow On\n");
|
||||
}
|
||||
virtual void RedOff()
|
||||
{
|
||||
printf("Red Off\n");
|
||||
}
|
||||
virtual void RedOn()
|
||||
{
|
||||
printf("Red On\n");
|
||||
}
|
||||
|
||||
virtual void EnableRedFlashMode()
|
||||
{
|
||||
printf("Setting Red Flash mode\n");
|
||||
}
|
||||
|
||||
virtual void HSMDebug(char* msg)
|
||||
{
|
||||
printf("HSMDebug: %s\n",msg);
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("Press any key to simulate Error.\n");
|
||||
|
||||
MyStoplight s;
|
||||
s.HSMConstruct();
|
||||
while ( s.HSMUpdate(0.1f) )
|
||||
{
|
||||
Sleep(100);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
|
||||
Machine(stoplight,30)
|
||||
{
|
||||
// perform power on self test
|
||||
Entry(DoPOST);
|
||||
|
||||
// first state is Red
|
||||
Default(Red);
|
||||
|
||||
// poll for a FAILURE event
|
||||
Idle(CheckForError);
|
||||
|
||||
// machine exits on FAILURE event
|
||||
Terminate(FAILURE);
|
||||
|
||||
// if machine exits, switch to Flash Mode
|
||||
Exit(EnableRedFlashMode);
|
||||
|
||||
// red light state
|
||||
State(Red)
|
||||
{
|
||||
Entry(RedOn);
|
||||
Exit(RedOff);
|
||||
|
||||
Transition(5.0,Green);
|
||||
}
|
||||
|
||||
// green light state
|
||||
State(Green)
|
||||
{
|
||||
Entry(GreenOn);
|
||||
Exit(GreenOff);
|
||||
|
||||
Transition(5,Yellow);
|
||||
}
|
||||
|
||||
// yellow light state
|
||||
State(Yellow)
|
||||
{
|
||||
Entry(YellowOn);
|
||||
Exit(YellowOff);
|
||||
|
||||
Transition(1.000000,Red);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user