xref: /btstack/test/embedded/embedded_test.cpp (revision 4902524cc6a45a01cfead054f48b6584dbb1f1cc)
1*4902524cSMatthias Ringwald #include "CppUTest/TestHarness.h"
2*4902524cSMatthias Ringwald #include "CppUTest/CommandLineTestRunner.h"
3*4902524cSMatthias Ringwald 
4*4902524cSMatthias Ringwald #include "hal_cpu.h"
5*4902524cSMatthias Ringwald #include "hal_time_ms.h"
6*4902524cSMatthias Ringwald 
7*4902524cSMatthias Ringwald #include "btstack_run_loop.h"
8*4902524cSMatthias Ringwald #include "btstack_run_loop_embedded.h"
9*4902524cSMatthias Ringwald #include "btstack_memory.h"
10*4902524cSMatthias Ringwald 
11*4902524cSMatthias Ringwald // quick mock
12*4902524cSMatthias Ringwald 
13*4902524cSMatthias Ringwald // hal_cpu
hal_cpu_disable_irqs(void)14*4902524cSMatthias Ringwald void hal_cpu_disable_irqs(void){}
hal_cpu_enable_irqs(void)15*4902524cSMatthias Ringwald void hal_cpu_enable_irqs(void){}
hal_cpu_enable_irqs_and_sleep(void)16*4902524cSMatthias Ringwald void hal_cpu_enable_irqs_and_sleep(void){}
17*4902524cSMatthias Ringwald 
18*4902524cSMatthias Ringwald // hal_time_ms_h
hal_time_ms(void)19*4902524cSMatthias Ringwald uint32_t hal_time_ms(void){
20*4902524cSMatthias Ringwald     return 0;
21*4902524cSMatthias Ringwald }
22*4902524cSMatthias Ringwald 
23*4902524cSMatthias Ringwald #define HEARTBEAT_PERIOD_MS 1000
24*4902524cSMatthias Ringwald 
25*4902524cSMatthias Ringwald static btstack_timer_source_t timer_1;
26*4902524cSMatthias Ringwald static btstack_data_source_t  data_source;
27*4902524cSMatthias Ringwald static bool data_source_called;
28*4902524cSMatthias Ringwald static bool timer_called;
29*4902524cSMatthias Ringwald 
heartbeat_timeout_handler(btstack_timer_source_t * ts)30*4902524cSMatthias Ringwald static void heartbeat_timeout_handler(btstack_timer_source_t * ts){
31*4902524cSMatthias Ringwald     UNUSED(ts);
32*4902524cSMatthias Ringwald     timer_called = true;
33*4902524cSMatthias Ringwald }
data_source_handler(btstack_data_source_t * ds,btstack_data_source_callback_type_t callback_type)34*4902524cSMatthias Ringwald static void data_source_handler(btstack_data_source_t * ds, btstack_data_source_callback_type_t callback_type){
35*4902524cSMatthias Ringwald     UNUSED(ds);
36*4902524cSMatthias Ringwald     UNUSED(callback_type);
37*4902524cSMatthias Ringwald     data_source_called = true;
38*4902524cSMatthias Ringwald }
39*4902524cSMatthias Ringwald 
data_source_handler_trigger_exit(btstack_data_source_t * ds,btstack_data_source_callback_type_t callback_type)40*4902524cSMatthias Ringwald static void data_source_handler_trigger_exit(btstack_data_source_t * ds, btstack_data_source_callback_type_t callback_type){
41*4902524cSMatthias Ringwald     UNUSED(ds);
42*4902524cSMatthias Ringwald     UNUSED(callback_type);
43*4902524cSMatthias Ringwald     btstack_run_loop_trigger_exit();
44*4902524cSMatthias Ringwald }
45*4902524cSMatthias Ringwald 
TEST_GROUP(Embedded)46*4902524cSMatthias Ringwald TEST_GROUP(Embedded){
47*4902524cSMatthias Ringwald 
48*4902524cSMatthias Ringwald     void setup(void){
49*4902524cSMatthias Ringwald         // start with BTstack init - especially configure HCI Transport
50*4902524cSMatthias Ringwald         btstack_memory_init();
51*4902524cSMatthias Ringwald         btstack_run_loop_init(btstack_run_loop_embedded_get_instance());
52*4902524cSMatthias Ringwald         btstack_run_loop_set_timer_handler(&timer_1, heartbeat_timeout_handler);
53*4902524cSMatthias Ringwald     }
54*4902524cSMatthias Ringwald     void teardown(void){
55*4902524cSMatthias Ringwald         btstack_run_loop_deinit();
56*4902524cSMatthias Ringwald         btstack_memory_deinit();
57*4902524cSMatthias Ringwald     }
58*4902524cSMatthias Ringwald };
59*4902524cSMatthias Ringwald 
TEST(Embedded,Init)60*4902524cSMatthias Ringwald TEST(Embedded, Init){
61*4902524cSMatthias Ringwald     btstack_run_loop_set_timer(&timer_1, HEARTBEAT_PERIOD_MS);
62*4902524cSMatthias Ringwald     btstack_run_loop_add_timer(&timer_1);
63*4902524cSMatthias Ringwald 
64*4902524cSMatthias Ringwald     btstack_run_loop_embedded_execute_once();
65*4902524cSMatthias Ringwald     btstack_run_loop_embedded_trigger();
66*4902524cSMatthias Ringwald     btstack_run_loop_embedded_execute_once();
67*4902524cSMatthias Ringwald     btstack_run_loop_get_time_ms();
68*4902524cSMatthias Ringwald     btstack_run_loop_timer_dump();
69*4902524cSMatthias Ringwald     btstack_run_loop_remove_timer(&timer_1);
70*4902524cSMatthias Ringwald     (void) btstack_run_loop_get_timer_context(&timer_1);
71*4902524cSMatthias Ringwald     static btstack_context_callback_registration_t callback_registration;
72*4902524cSMatthias Ringwald     btstack_run_loop_execute_on_main_thread(&callback_registration);
73*4902524cSMatthias Ringwald }
74*4902524cSMatthias Ringwald 
TEST(Embedded,DataSource)75*4902524cSMatthias Ringwald TEST(Embedded, DataSource){
76*4902524cSMatthias Ringwald     btstack_run_loop_set_data_source_handler(&data_source, &data_source_handler);
77*4902524cSMatthias Ringwald     btstack_run_loop_set_data_source_fd(&data_source, 0);
78*4902524cSMatthias Ringwald     btstack_run_loop_set_data_source_handle(&data_source, NULL);
79*4902524cSMatthias Ringwald     btstack_run_loop_enable_data_source_callbacks(&data_source, DATA_SOURCE_CALLBACK_POLL);
80*4902524cSMatthias Ringwald     btstack_run_loop_disable_data_source_callbacks(&data_source, DATA_SOURCE_CALLBACK_POLL);
81*4902524cSMatthias Ringwald     btstack_run_loop_add_data_source(&data_source);
82*4902524cSMatthias Ringwald     btstack_run_loop_remove_data_source(&data_source);
83*4902524cSMatthias Ringwald }
84*4902524cSMatthias Ringwald 
TEST(Embedded,ExitRunLoop)85*4902524cSMatthias Ringwald TEST(Embedded, ExitRunLoop){
86*4902524cSMatthias Ringwald     btstack_run_loop_set_data_source_handler(&data_source, &data_source_handler_trigger_exit);
87*4902524cSMatthias Ringwald     btstack_run_loop_set_data_source_fd(&data_source, 0);
88*4902524cSMatthias Ringwald     btstack_run_loop_set_data_source_handle(&data_source, NULL);
89*4902524cSMatthias Ringwald     btstack_run_loop_enable_data_source_callbacks(&data_source, DATA_SOURCE_CALLBACK_POLL);
90*4902524cSMatthias Ringwald     btstack_run_loop_add_data_source(&data_source);
91*4902524cSMatthias Ringwald     btstack_run_loop_execute();
92*4902524cSMatthias Ringwald }
93*4902524cSMatthias Ringwald 
94*4902524cSMatthias Ringwald 
main(int argc,const char * argv[])95*4902524cSMatthias Ringwald int main (int argc, const char * argv[]){
96*4902524cSMatthias Ringwald     return CommandLineTestRunner::RunAllTests(argc, argv);
97*4902524cSMatthias Ringwald }
98