More flexible InputPollable paradigm

This commit is contained in:
WillyJL 2025-09-24 03:05:26 +02:00
parent f4bdf2f248
commit 696a391cb8
No known key found for this signature in database
3 changed files with 13 additions and 5 deletions

View File

@ -18,14 +18,22 @@ void InputBroker::registerSource(Observable<const InputEvent *> *source)
}
#ifdef HAS_FREE_RTOS
void InputBroker::pollSoonRequestFromIsr(InputPollable *pollable)
void InputBroker::requestPollSoon(InputPollable *pollable)
{
xQueueSendFromISR(pollSoonQueue, &pollable, NULL);
if (xPortInIsrContext() == pdTRUE) {
xQueueSendFromISR(pollSoonQueue, &pollable, NULL);
} else {
xQueueSend(pollSoonQueue, &pollable, 0);
}
}
void InputBroker::queueInputEvent(const InputEvent *event)
{
xQueueSend(inputEventQueue, event, portMAX_DELAY);
if (xPortInIsrContext() == pdTRUE) {
xQueueSendFromISR(inputEventQueue, event, NULL);
} else {
xQueueSend(inputEventQueue, event, portMAX_DELAY);
}
}
void InputBroker::processInputEventQueue()

View File

@ -60,7 +60,7 @@ class InputBroker : public Observable<const InputEvent *>
void registerSource(Observable<const InputEvent *> *source);
void injectInputEvent(const InputEvent *event) { handleInputEvent(event); }
#ifdef HAS_FREE_RTOS
void pollSoonRequestFromIsr(InputPollable *pollable);
void requestPollSoon(InputPollable *pollable);
void queueInputEvent(const InputEvent *event);
void processInputEventQueue();
#endif

View File

@ -641,6 +641,6 @@ void KbI2cBase::toggleBacklight(bool on)
int KbI2cBase::onNotify(KbInterruptObservable *src)
{
// Called from interrupt context, request polling after exiting the ISR
inputBroker->pollSoonRequestFromIsr(this);
inputBroker->requestPollSoon(this);
return 0;
}