diff --git a/components/badge23/display.c b/components/badge23/display.c index afaffd34acc23612c56551581d84250c5974e0f3..8210c72d9d263cb3fce3acfc7dd80d22ab2f6e16 100644 --- a/components/badge23/display.c +++ b/components/badge23/display.c @@ -17,6 +17,8 @@ Ctx *the_ctx = NULL; +uint8_t scope_active = 0; + uint16_t *pixels; typedef struct leds_cfg { @@ -24,28 +26,13 @@ typedef struct leds_cfg { } display_cfg_t; static QueueHandle_t display_queue = NULL; -static void display_task(TimerHandle_t aaaaa); -//static void display_task(void* arg); +static void display_task(TimerHandle_t dummy); +static TimerHandle_t display_animation_timer; static void _display_init() { GC9A01_Init(); - // GC9A01_Screen_Load(0,0,240,240,pixels); GC9A01_Update(); - - - - /* - display_queue = xQueueCreate(1, sizeof(display_cfg_t)); - TaskHandle_t handle; - xTaskCreate(&display_task, "Display", 4096, NULL, configMAX_PRIORITIES - 3, &handle); - */ - - /* SCOPE TASK - TimerHandle_t aa = xTimerCreate("Display", pdMS_TO_TICKS(100), pdTRUE, (void *) 0, *display_task); - if( xTimerStart(aa, 0 ) != pdPASS ) - { - } - */ + display_animation_timer = xTimerCreate("display animation timer", pdMS_TO_TICKS(100), pdTRUE, (void *) 0, *display_task); } @@ -63,6 +50,7 @@ void display_ctx_init() { } void display_update(){ + if(scope_active) return; GC9A01_Update(); } @@ -79,29 +67,18 @@ void display_fill(uint16_t col){ } void display_draw_scope(){ - //display_cfg_t display_; uint16_t line[240]; - /* - printf("waiting...\n"); - xQueueReceive(display_queue, &display_, portMAX_DELAY); - printf("go...\n"); - */ - //uint32_t t0 = esp_log_timestamp(); begin_scope_read(); - for(int y=0; y<240; y++){ read_line_from_scope(&(line[0]), y); memcpy(&ScreenBuff[y * 240], line, sizeof(line)); } end_scope_read(); - - //uint32_t td = esp_log_timestamp() - t0; - // printf("it took %lu\n", td); - display_update(); - + GC9A01_Update(); } + //static void display_task(void* arg) { -static void display_task(TimerHandle_t aaaaa) { +static void display_task(TimerHandle_t dummy) { display_draw_scope(); } @@ -110,3 +87,20 @@ void display_init() { display_ctx_init(); } +void display_scope_start(){ + scope_active = 1; + vTaskDelay(pdMS_TO_TICKS(100)); //hack: wait until last display update has stopped + if(xTimerStart(display_animation_timer, pdMS_TO_TICKS(100)) != pdPASS) + { // timer startup has failed + scope_active = 0; + } +} + +void display_scope_stop(){ + if(!scope_active) return; //nothing to do + if(xTimerStop(display_animation_timer, pdMS_TO_TICKS(1000)) != pdPASS) + { + // not sure how to handle this, any ideas? just repeat query? throw error? + } + scope_active = 0; +} diff --git a/components/badge23/include/badge23/display.h b/components/badge23/include/badge23/display.h index e2946a47c711e84e73982053045ea07ed903aae2..1ef35ae73659daacf37a54acd900f4be15f92dad 100644 --- a/components/badge23/include/badge23/display.h +++ b/components/badge23/include/badge23/display.h @@ -8,6 +8,8 @@ void display_init(); void display_ctx_init(); void display_draw_scope(); void display_update(); +void display_scope_start(); +void display_scope_stop(); void display_draw_pixel(uint8_t x, uint8_t y, uint16_t col); uint16_t display_get_pixel(uint8_t x, uint8_t y); void display_fill(uint16_t col); diff --git a/python_payload/main.py b/python_payload/main.py index d678944c295b4d56a4bf2e61f4acf0c2244b6073..404492656e9b03333257df858a8bdb13b90be37a 100644 --- a/python_payload/main.py +++ b/python_payload/main.py @@ -94,6 +94,7 @@ def main(): if(get_button(0) == 2): if CURRENT_APP_RUN != run_menu: CURRENT_APP_RUN = run_menu + display_scope_stop() foreground_menu() else: if(get_button(0) == 1): diff --git a/python_payload/melodic_demo.py b/python_payload/melodic_demo.py index 8ffee2979dd158cbfcf233259d63686ca92316bb..9fc2a7c3b3bc0e54adab40547554ee2e93ced98b 100644 --- a/python_payload/melodic_demo.py +++ b/python_payload/melodic_demo.py @@ -65,3 +65,4 @@ def init(): def foreground(): adjust_playing_field_to_octave() + display_scope_start() diff --git a/usermodule/mp_hardware.c b/usermodule/mp_hardware.c index 110f08223900403a248077bdacba15a8c9c97785..0af6255cf09e5aa5791c3df5880d25308d251ccd 100644 --- a/usermodule/mp_hardware.c +++ b/usermodule/mp_hardware.c @@ -33,6 +33,18 @@ STATIC mp_obj_t mp_display_update(size_t n_args, const mp_obj_t *args) { } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_display_update_obj, 0, 1, mp_display_update); +STATIC mp_obj_t mp_display_scope_start(size_t n_args, const mp_obj_t *args) { + display_scope_start(); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_display_scope_start_obj, 0, 1, mp_display_scope_start); + +STATIC mp_obj_t mp_display_scope_stop(size_t n_args, const mp_obj_t *args) { + display_scope_stop(); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_display_scope_stop_obj, 0, 1, mp_display_scope_stop); + STATIC mp_obj_t mp_display_draw_pixel(size_t n_args, const mp_obj_t *args) { uint16_t x = mp_obj_get_int(args[0]); uint16_t y = mp_obj_get_int(args[1]); @@ -161,6 +173,8 @@ STATIC const mp_rom_map_elem_t mp_module_hardware_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_set_led_hsv), MP_ROM_PTR(&mp_set_led_hsv_obj) }, { MP_ROM_QSTR(MP_QSTR_update_leds), MP_ROM_PTR(&mp_update_leds_obj) }, { MP_ROM_QSTR(MP_QSTR_display_update), MP_ROM_PTR(&mp_display_update_obj) }, + { MP_ROM_QSTR(MP_QSTR_display_scope_start), MP_ROM_PTR(&mp_display_scope_start_obj) }, + { MP_ROM_QSTR(MP_QSTR_display_scope_stop), MP_ROM_PTR(&mp_display_scope_stop_obj) }, { MP_ROM_QSTR(MP_QSTR_display_draw_pixel), MP_ROM_PTR(&mp_display_draw_pixel_obj) }, { MP_ROM_QSTR(MP_QSTR_display_get_pixel), MP_ROM_PTR(&mp_display_get_pixel_obj) }, { MP_ROM_QSTR(MP_QSTR_display_fill), MP_ROM_PTR(&mp_display_fill_obj) },