btstack_run_loop_qt: implement poll_data_sources_from_irq

This commit is contained in:
Matthias Ringwald 2021-07-02 15:20:34 +02:00
parent b3483efb03
commit 7b06a5623f
2 changed files with 13 additions and 2 deletions

View File

@ -238,8 +238,9 @@ static void btstack_run_loop_qt_add_timer(btstack_timer_source_t *ts){
// BTstackRunLoopQt class implementation // BTstackRunLoopQt class implementation
BTstackRunLoopQt::BTstackRunLoopQt(void) : QObject() { BTstackRunLoopQt::BTstackRunLoopQt(void) : QObject() {
// allow to trigger processCallbacks both from main thread as well as other threads later // enforce slot callback on receiver (main thread) via Qt::QueuedConnection
connect(this, &BTstackRunLoopQt::callbackAdded, this, &BTstackRunLoopQt::processCallbacks, Qt::QueuedConnection); connect(this, &BTstackRunLoopQt::callbackAdded, this, &BTstackRunLoopQt::processCallbacks, Qt::QueuedConnection);
connect(this, &BTstackRunLoopQt::dataSourcesPollRequested, this, &BTstackRunLoopQt::pollDataSources, Qt::QueuedConnection);
} }
void BTstackRunLoopQt::processTimers(){ void BTstackRunLoopQt::processTimers(){
@ -286,6 +287,10 @@ void BTstackRunLoopQt::processCallbacks(void) {
} }
} }
void BTstackRunLoopQt::pollDataSources(void) {
btstack_run_loop_base_poll_data_sources();
}
static void btstack_run_loop_qt_execute_on_main_thread(btstack_context_callback_registration_t * callback_registration){ static void btstack_run_loop_qt_execute_on_main_thread(btstack_context_callback_registration_t * callback_registration){
// protect list with mutex // protect list with mutex
run_loop_callback_mutex.lock(); run_loop_callback_mutex.lock();
@ -294,6 +299,10 @@ static void btstack_run_loop_qt_execute_on_main_thread(btstack_context_callback_
btstack_run_loop_object->emit callbackAdded(); btstack_run_loop_object->emit callbackAdded();
} }
static void btstack_run_loop_qt_poll_data_sources_from_irq(void){
btstack_run_loop_object->emit dataSourcesPollRequested();
}
static void btstack_run_loop_qt_process_data_source(int fd, uint16_t callback_types){ static void btstack_run_loop_qt_process_data_source(int fd, uint16_t callback_types){
// find ds // find ds
btstack_linked_list_iterator_t it; btstack_linked_list_iterator_t it;
@ -363,7 +372,7 @@ static const btstack_run_loop_t btstack_run_loop_qt = {
&btstack_run_loop_qt_execute, &btstack_run_loop_qt_execute,
&btstack_run_loop_qt_dump_timer, &btstack_run_loop_qt_dump_timer,
&btstack_run_loop_qt_get_time_ms, &btstack_run_loop_qt_get_time_ms,
NULL, /* poll data sources from irq */ &btstack_run_loop_qt_poll_data_sources_from_irq,
&btstack_run_loop_qt_execute_on_main_thread, &btstack_run_loop_qt_execute_on_main_thread,
NULL NULL
}; };

View File

@ -62,6 +62,7 @@ public:
public slots: public slots:
void processTimers(void); void processTimers(void);
void processCallbacks(void); void processCallbacks(void);
void pollDataSources(void);
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
void processDataSource(HANDLE handle); void processDataSource(HANDLE handle);
#else #else
@ -70,6 +71,7 @@ public slots:
#endif #endif
signals: signals:
void callbackAdded(void); void callbackAdded(void);
void dataSourcesPollRequested(void);
}; };
#endif #endif