Comments for modified part of XF
This commit is contained in:
parent
821df428e9
commit
a141b01380
@ -15,7 +15,6 @@ Factory::Factory() {
|
||||
void Factory::initialize() {
|
||||
Trace::initialize();
|
||||
|
||||
// TODO: Initialize factory attributes here
|
||||
|
||||
|
||||
#if defined(TOUCHGFX_ENABLED) && (TOUCHGFX_ENABLED != 0)
|
||||
@ -27,24 +26,21 @@ void Factory::initialize() {
|
||||
void Factory::build() {
|
||||
Trace::out("Factory: Creating app components...");
|
||||
|
||||
// Start state machine(s)
|
||||
|
||||
// Start SM of ButtonEventLogger & ButtonsController
|
||||
buttonEventLogger_.startBehavior();
|
||||
ButtonsController::getInstance()->startBehavior();
|
||||
|
||||
// Register CallBack of ButtonController with himself for the provider and onButtonChangeState for the CallBack Method
|
||||
ButtonsController::getInstance()->registerCallback (
|
||||
ButtonEventsHandler::getInstance(),
|
||||
(interface::ButtonsControllerCallbackProvider::CallbackMethod) &ButtonEventsHandler::onButtonChangeState
|
||||
);
|
||||
|
||||
buttonEventLogger_.startBehavior();
|
||||
// Subscribe ButtonEventLogger to ButtonEventsHandler & start SM of ButtonEventsHandler
|
||||
ButtonEventsHandler::getInstance()->subscribe(&buttonEventLogger_);
|
||||
ButtonEventsHandler::getInstance()->startBehavior();
|
||||
|
||||
|
||||
|
||||
// TODO: Start state-machines here
|
||||
|
||||
#if defined(TOUCHGFX_ENABLED) && (TOUCHGFX_ENABLED != 0)
|
||||
getTouchGfxTask().start();
|
||||
#endif
|
||||
|
@ -11,8 +11,6 @@
|
||||
#include "platform/f7-disco-gcc/board/ButtonsController.h"
|
||||
#include "mdw/button/ButtonEventsHandler.h"
|
||||
|
||||
// TODO: Add C++ specific includes here
|
||||
|
||||
namespace app {
|
||||
|
||||
/**
|
||||
@ -30,7 +28,6 @@ public:
|
||||
#endif
|
||||
|
||||
protected:
|
||||
// TODO: Add static attributes here
|
||||
static ButtonEventsLogger buttonEventLogger_;
|
||||
};
|
||||
|
||||
|
@ -13,40 +13,52 @@
|
||||
|
||||
XFState::XFState(XFBehavior* behavior)
|
||||
: pBehavior(behavior) {
|
||||
/*
|
||||
* Initialise behavior of this state on the constructor.
|
||||
* Can't be null !
|
||||
*/
|
||||
assert(behavior != nullptr);
|
||||
cbState_ = nullptr;
|
||||
cbEntry_ = nullptr;
|
||||
cbExit_ = nullptr;
|
||||
cbEvState_ = nullptr;
|
||||
cbEvEntry_ = nullptr;
|
||||
cbEvExit_ = nullptr;
|
||||
}
|
||||
|
||||
void XFState::addTransition(XFEvent::XFEventType type, const int evid, const int time, XFState* state) {
|
||||
assert(state != nullptr);
|
||||
/*
|
||||
* Create a transition with his Type, ID, time if Timeout and the state to be set when this transition happen
|
||||
* Push the transition on the list of transition of the event
|
||||
* Pointer State can't be null
|
||||
*/
|
||||
transition t;
|
||||
t.evType = type;
|
||||
t.evid = evid;
|
||||
t.time = time;
|
||||
t.evType = type;
|
||||
t.nextState = state;
|
||||
transitions_.push_back(t);
|
||||
}
|
||||
|
||||
XFEventStatus XFState::changeState(XFState* state) {
|
||||
pBehavior->curentXFState_ = state;
|
||||
// Change current state of the behavior
|
||||
pBehavior->currentXFState_ = state;
|
||||
|
||||
// Set state is changed
|
||||
pBehavior->changeXFState = true;
|
||||
|
||||
// Return the event status as consumed
|
||||
return XFEventStatus::Consumed;
|
||||
}
|
||||
|
||||
XFEventStatus XFState::onState(const XFEvent* ev) {
|
||||
|
||||
// Execute onState callBack without parameter if it's defined
|
||||
if(cbState_ != nullptr) {
|
||||
(pBehavior->*cbState_)();
|
||||
}
|
||||
|
||||
// Execute onState callBack with event as parameter if it's defined
|
||||
if(cbEvState_ != nullptr) {
|
||||
(pBehavior->*cbEvState_)(ev);
|
||||
}
|
||||
|
||||
// Test each transition and change state if one is actual transition
|
||||
for(transition t : transitions_) {
|
||||
|
||||
switch(ev->getEventType()) {
|
||||
@ -71,21 +83,25 @@ XFEventStatus XFState::onState(const XFEvent* ev) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Return event status as notConsumed if actual event isn't on the list of transitions
|
||||
return XFEventStatus::NotConsumed;
|
||||
}
|
||||
|
||||
void XFState::onEntry(const XFEvent* ev) {
|
||||
|
||||
// Execute onEntry callBack without parameter if it's defined
|
||||
if(cbEntry_ != nullptr) {
|
||||
(pBehavior->*cbEntry_)();
|
||||
}
|
||||
|
||||
// Execute onExit callBack with event as parameter if it's defined
|
||||
if(cbEvEntry_ != nullptr) {
|
||||
(pBehavior->*cbEvEntry_)(ev);
|
||||
}
|
||||
|
||||
// If a timeout is on the list of transition start it with is own delay
|
||||
for(transition t : transitions_) {
|
||||
|
||||
if(t.evType == XFEvent::XFEventType::Timeout) {
|
||||
@ -95,14 +111,18 @@ void XFState::onEntry(const XFEvent* ev) {
|
||||
}
|
||||
}
|
||||
void XFState::onExit(const XFEvent* ev) {
|
||||
|
||||
// Execute onExit callBack without parameter if it's defined
|
||||
if(cbExit_ != nullptr) {
|
||||
(pBehavior->*cbExit_)();
|
||||
}
|
||||
|
||||
// Execute onExit callBack with event as parameter if it's defined
|
||||
if(cbEvExit_ != nullptr) {
|
||||
(pBehavior->*cbEvExit_)(ev);
|
||||
}
|
||||
|
||||
// If a timeout is on the list of transition and isn't the actual event, stop it
|
||||
for(transition t: transitions_) {
|
||||
|
||||
if(t.evType == XFEvent::XFEventType::Timeout) {
|
||||
|
@ -84,16 +84,21 @@ XFBehavior::TerminateBehavior XFBehavior::process(const XFEvent * pEvent)
|
||||
}
|
||||
|
||||
XFEventStatus XFBehavior::processEvent(){
|
||||
|
||||
/*
|
||||
* Basic double switch pattern but not switch on an enum but on Object XFState
|
||||
*/
|
||||
|
||||
XFEventStatus eventStatus = XFEventStatus::Unknown;
|
||||
const XFEvent * ev = getCurrentEvent();
|
||||
|
||||
oldXFState_ = curentXFState_;
|
||||
oldXFState_ = currentXFState_;
|
||||
|
||||
eventStatus = curentXFState_->onState(ev);
|
||||
eventStatus = currentXFState_->onState(ev);
|
||||
|
||||
if(changeXFState){
|
||||
oldXFState_->onExit(ev);
|
||||
curentXFState_->onEntry(ev);
|
||||
currentXFState_->onEntry(ev);
|
||||
}
|
||||
|
||||
return eventStatus;
|
||||
|
@ -97,12 +97,12 @@ protected:
|
||||
} transition;
|
||||
std::list<transition> transitions_;
|
||||
|
||||
callback cbState_;
|
||||
callback cbEntry_;
|
||||
callback cbExit_;
|
||||
callbackEv cbEvState_;
|
||||
callbackEv cbEvEntry_;
|
||||
callbackEv cbEvExit_;
|
||||
callback cbState_ = nullptr;
|
||||
callback cbEntry_ = nullptr;
|
||||
callback cbExit_ = nullptr;
|
||||
callbackEv cbEvState_ = nullptr;
|
||||
callbackEv cbEvEntry_ = nullptr;
|
||||
callbackEv cbEvExit_ = nullptr;
|
||||
|
||||
};
|
||||
|
||||
|
@ -55,7 +55,7 @@ public:
|
||||
protected:
|
||||
/**
|
||||
* Executes the current event in its implemented behavior.
|
||||
* This method needs to be overridden to implement the
|
||||
* This method can be overridden to implement the
|
||||
* behavior (i.e. state machine) needed.
|
||||
*/
|
||||
virtual XFEventStatus processEvent();
|
||||
@ -100,9 +100,20 @@ protected:
|
||||
const XFEvent * pCurrentEvent_; ///< Reference to actually processed event.
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Behavior have at least an Initial State.
|
||||
*/
|
||||
XFInitialState stInitial;
|
||||
XFState* curentXFState_ = &stInitial;
|
||||
|
||||
/**
|
||||
* Pointer for the curent and old state of this behavior
|
||||
*/
|
||||
XFState* currentXFState_ = &stInitial;
|
||||
XFState* oldXFState_ = &stInitial;
|
||||
|
||||
/**
|
||||
* Keep in trace when state is changed (have to be set to true in every processEvent
|
||||
*/
|
||||
bool changeXFState = false;
|
||||
|
||||
};
|
||||
|
Reference in New Issue
Block a user