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

77 lines
1.8 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"
2023-11-26 20:19:58 +01:00
ButtonEventsHandler::ButtonEventsHandler()
: stRun(this) {
2023-11-26 20:13:49 +01:00
for(uint8_t i = 0; i< MAX_OBSERVER; i++) {
observer_[i] = nullptr;
}
2023-11-26 20:19:58 +01:00
stInitial.setNextState(&stRun);
stRun.registerOnEntry((XFState::callback)&ButtonEventsHandler::startButtonSM);
}
2023-11-27 08:06:53 +01:00
void ButtonEventsHandler::startButtonSM() {
2023-11-26 20:19:58 +01:00
buttonStateSm_[0].startBehavior();
buttonStateSm_[1].startBehavior();
buttonStateSm_[2].startBehavior();
buttonStateSm_[3].startBehavior();
2023-11-26 20:13:49 +01:00
}
ButtonEventsHandler* ButtonEventsHandler::getInstance() {
static ButtonEventsHandler buttonEventsHandler_;
return &buttonEventsHandler_;
}
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);
}
}
}