create hsmc repo

This commit is contained in:
swaits committed 2010-09-30 15:17:54 -07:00
commit 0506ec019b
26 files changed
+5413

No files matched your search

+97
View File
@@ -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);
}
+72
View File
@@ -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;
}
+47
View File
@@ -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);
}
}