This repository has been archived on 2024-01-25. You can view files and clone it, but cannot push or open issues or pull requests.
ButtonManager/src/mdw/button/ButtonEventsHandler.cpp

113 lines
2.4 KiB
C++
Raw Normal View History

2023-11-26 20:13:49 +01:00
/*
* ButtonEventsHandler.cpp
*
* Created on: 19 nov. 2023
* Author: remi.heredero
*/
#include <button/ButtonEventsHandler.h>
#include "trace/trace.h"
#include "board/ButtonsController.h"
ButtonEventsHandler::ButtonEventsHandler() {
for(uint8_t i = 0; i< MAX_OBSERVER; i++) {
observer_[i] = nullptr;
}
}
ButtonEventsHandler* ButtonEventsHandler::getInstance() {
static ButtonEventsHandler buttonEventsHandler_;
return &buttonEventsHandler_;
}
XFEventStatus ButtonEventsHandler::processEvent() {
eEventStatus eventStatus = XFEventStatus::Unknown;
const XFEvent* ev = getCurrentEvent();
XFEvent::XFEventType evType = ev->getEventType();
int evid = ev->getId();
oldState_ = currentState_;
changeState_ = false;
switch (currentState_) {
case state::initial:
if(evType == XFEvent::Initial) {
currentState_ = state::run;
changeState_ = true;
eventStatus = XFEventStatus::Consumed;
}
break;
case state::run:
break;
}
if(changeState_) {
switch (oldState_) { // onExit
case state::initial:
break;
case state::run:
break;
}
switch (currentState_) { // onEntry
case state::initial:
break;
case state::run:
buttonStateSm_[0].startBehavior();
buttonStateSm_[1].startBehavior();
buttonStateSm_[2].startBehavior();
buttonStateSm_[3].startBehavior();
break;
}
}
return eventStatus;
}
void ButtonEventsHandler::onButtonChangeState(uint16_t buttonIndex, bool pressed) {
if(pressed) {
buttonStateSm_[buttonIndex].genButtonPressed();
} else {
buttonStateSm_[buttonIndex].genButtonReleased();
}
}
bool ButtonEventsHandler::subscribe(interface::ButtonEventsHandlerObserver *observer) {
for(uint8_t i = 0; i < MAX_OBSERVER; i++) {
if (observer_[i] == nullptr) {
observer_[i] = observer;
return true;
}
}
return false;
}
void ButtonEventsHandler::unsubscribe(interface::ButtonEventsHandlerObserver *observer) {
for(uint8_t i = 0; i < MAX_OBSERVER; i++) {
if (observer_[i] == observer) {
observer_[i] = nullptr;
}
}
}
void ButtonEventsHandler::notifyButtonShortPressed(ButtonIndex buttonIndex) {
for(uint8_t i = 0; i < MAX_OBSERVER; i++) {
if (observer_[i] != nullptr) {
observer_[i]->onButtonShortPressed(buttonIndex);
}
}
}
void ButtonEventsHandler::notifyButtonLongPressed(ButtonIndex buttonIndex) {
for(uint8_t i = 0; i < MAX_OBSERVER; i++) {
if (observer_[i] != nullptr) {
observer_[i]->onButtonLongPressed(buttonIndex);
}
}
}