Initial commit

This commit is contained in:
2023-09-19 15:59:49 +02:00
commit bef0bade14
1860 changed files with 582828 additions and 0 deletions

View File

@ -0,0 +1,62 @@
#include <stdio.h>
#include "trace/trace.h"
#include "statemachine05a.h"
/**
* Constructor
*
* \param text Text to display by the state machine.
*/
StateMachine05a::StateMachine05a(string text)
: text_(text)
{
currentState_ = STATE_INITIAL;
}
StateMachine05a::~StateMachine05a()
{
}
XFEventStatus StateMachine05a::processEvent()
{
eEventStatus eventStatus = XFEventStatus::Unknown;
switch (currentState_)
{
case STATE_INITIAL:
{
if (getCurrentEvent()->getEventType() == XFEvent::Initial)
{
GEN(XFDefaultTransition());
currentState_ = STATE_SAY_TEXT;
eventStatus = XFEventStatus::Consumed;
}
}
break;
case STATE_SAY_TEXT:
{
if (getCurrentEvent()->getEventType() == XFEvent::DefaultTransition ||
(getCurrentEvent()->getEventType() == XFEvent::Timeout &&
getCurrentTimeout()->getId() == Timeout_SAY_HELLO_id))
{
{
Trace::out(getText());
}
scheduleTimeout(Timeout_SAY_HELLO_id, 500);
currentState_ = STATE_SAY_TEXT;
eventStatus = XFEventStatus::Consumed;
}
}
break;
default:
break;
}
return eventStatus;
}

View File

@ -0,0 +1,54 @@
#ifndef STATEMACHINE05A_H
#define STATEMACHINE05A_H
#include <string>
#include "xf/behavior.h"
/**
* \ingroup test05
*
* Task implementing a little state machine saying something
* in a predefined time interval. The text to output is passed
* to the object at construction time. The time interval is fixed
* to 500 milliseconds.
*
* Following you will find the state machine implemented by StateMachine05a:
* \image html state-machine05a.png "State Machine implemented by StateMachine05a"
*/
class StateMachine05a : public XFBehavior
{
public:
StateMachine05a(std::string text);
~StateMachine05a() override;
protected:
XFEventStatus processEvent() override; ///< Remplementation from XFReactive
inline std::string getText() const { return text_; } ///< Returns text. Accessor for #_text.
protected:
/**
* Timeout identifier(s) for this state machine
*/
typedef enum
{
Timeout_SAY_HELLO_id = 1 ///< Timeout id for WAIT
} eTimeoutId;
/**
* Enumeration used to have a unique identifier for every
* state in the state machine.
*/
typedef enum
{
STATE_UNKNOWN = 0, ///< Unknown state
STATE_INITIAL = 1, ///< Initial state
STATE_SAY_TEXT = 2 ///< Say "text" state
} eMainState;
eMainState currentState_; ///< Attribute indicating currently active state
std::string text_; ///< Text to display in state machine state
};
#endif // STATEMACHINE05A_H

View File

@ -0,0 +1,62 @@
#include <stdio.h>
#include "trace/trace.h"
#include "statemachine05b.h"
/**
* Constructor
*
* \param text Text to display by the state machine.
*/
StateMachine05b::StateMachine05b(string text)
: text_(text)
{
currentState_ = STATE_INITIAL;
}
StateMachine05b::~StateMachine05b()
{
}
XFEventStatus StateMachine05b::processEvent()
{
eEventStatus eventStatus = XFEventStatus::Unknown;
switch (currentState_)
{
case STATE_INITIAL:
{
if (getCurrentEvent()->getEventType() == XFEvent::Initial)
{
GEN(XFDefaultTransition());
currentState_ = STATE_SAY_TEXT;
eventStatus = XFEventStatus::Consumed;
}
}
break;
case STATE_SAY_TEXT:
{
if (getCurrentEvent()->getEventType() == XFEvent::DefaultTransition ||
(getCurrentEvent()->getEventType() == XFEvent::Timeout &&
getCurrentTimeout()->getId() == Timeout_SAY_HELLO_id))
{
{
Trace::out(getText());
}
scheduleTimeout(Timeout_SAY_HELLO_id, 1000);
currentState_ = STATE_SAY_TEXT;
eventStatus = XFEventStatus::Consumed;
}
}
break;
default:
break;
}
return eventStatus;
}

View File

@ -0,0 +1,54 @@
#ifndef STATEMACHINE05B_H
#define STATEMACHINE05B_H
#include <string>
#include "xf/behavior.h"
/**
* \ingroup test05
*
* Task implementing a little state machine saying something
* in a predefined time interval. The text to output is passed
* to the object at construction time. The time interval is fixed
* to one second.
*
* Following you will find the state machine implemented by StateMachine05b:
* \image html state-machine05b.png "State Machine implemented by StateMachine05b"
*/
class StateMachine05b : public XFBehavior
{
public:
StateMachine05b(std::string text);
~StateMachine05b() override;
protected:
XFEventStatus processEvent() override; ///< Remplementation from XFReactive
inline std::string getText() const { return text_; } ///< Returns text. Accessor for #_text.
protected:
/**
* Timeout identifier(s) for this state machine
*/
typedef enum
{
Timeout_SAY_HELLO_id = 1 ///< Timeout id for WAIT
} eTimeoutId;
/**
* Enumeration used to have a unique identifier for every
* state in the state machine.
*/
typedef enum
{
STATE_UNKNOWN = 0, ///< Unknown state
STATE_INITIAL = 1, ///< Initial state
STATE_SAY_TEXT = 2 ///< Say "text" state
} eMainState;
eMainState currentState_; ///< Attribute indicating currently active state
std::string text_; ///< Text to display in state machine state
};
#endif // STATEMACHINE05B_H

View File

@ -0,0 +1,39 @@
#include "xf/xf.h"
#include "trace/trace.h"
#include "testfactory05.h"
void Factory_initialize()
{
TestFactory05::initialize();
}
void Factory_build()
{
TestFactory05::build();
}
StateMachine05a TestFactory05::task01_("Tick 500ms");
StateMachine05b TestFactory05::task02_(" One");
StateMachine05b TestFactory05::task03_(" Two");
StateMachine05b TestFactory05::task04_(" Three");
TestFactory05::TestFactory05()
{
}
// static
void TestFactory05::initialize()
{
}
// static
void TestFactory05::build()
{
Trace::out("Starting test5...");
Trace::out("---------------------");
// Start state machine(s)
task01_.startBehavior();
task02_.startBehavior();
task03_.startBehavior();
task04_.startBehavior();
}

View File

@ -0,0 +1,49 @@
#ifndef TESTFACTORY05_H
#define TESTFACTORY05_H
//
// What is seen only by the C++ compiler
//
#ifdef __cplusplus
#include "statemachine05a.h"
#include "statemachine05b.h"
/**
* \ingroup test05
*
* @brief Factory creating all objects used in test5.
*
*/
class TestFactory05
{
public:
TestFactory05(); ///< Constructor
static void initialize(); ///< Initializes the factory
static void build(); ///< Creates components and initializes relations
protected:
static StateMachine05a task01_; ///< Instance of StateMachine05a saying 'Tick 500ms'
static StateMachine05b task02_; ///< Instance of StateMachine05b saying 'One' every second.
static StateMachine05b task03_; ///< Instance of StateMachine05b saying 'Two' every second.
static StateMachine05b task04_; ///< Instance of StateMachine05b saying 'Three' every second.
};
#endif // __cplusplus
//
// What is seen by the C and C++ compiler
//
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
void Factory_initialize();
void Factory_build();
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // TESTFACTORY05_H

View File

@ -0,0 +1,24 @@
#ifndef EVENTIDS_H
#define EVENTIDS_H
/**
* This class is responsible to distribute to every event
* used in the project a different event id.
*
* Only values grater than zero should be used
*
*/
class EventId
{
public:
/**
* The event identifiers available
*/
typedef enum
{
Unknown = 0, ///< Unknown event. Must not be used.
evRestart = 1 ///< Restart event
} eEventId;
};
#endif // EVENTIDS_H

View File

@ -0,0 +1,9 @@
#include "evrestart.h"
evRestart::evRestart() : XFCustomEvent(EventId::evRestart)
{
}
evRestart::~evRestart()
{
}

View File

@ -0,0 +1,17 @@
#ifndef EVRESTART_H
#define EVRESTART_H
#include "xf/customevent.h"
#include "eventids.h"
/**
* Restart event used to reset a state machine
*/
class evRestart : public XFCustomEvent
{
public:
evRestart();
~evRestart() override;
};
#endif // EVRESTART_H

View File

@ -0,0 +1,14 @@
#include "xf/xf.h"
#include "app/testfactory05.h"
int main(int argc, char *argv[])
{
XF::initialize(20, argc, argv);
TestFactory05 factory;
factory.initialize();
factory.build();
return XF::exec();
}