diff --git a/components/badge23/display.c b/components/badge23/display.c index 8210c72d9d263cb3fce3acfc7dd80d22ab2f6e16..1da50b987fed6bc81a75f872926704224bb7c61c 100644 --- a/components/badge23/display.c +++ b/components/badge23/display.c @@ -67,13 +67,8 @@ void display_fill(uint16_t col){ } void display_draw_scope(){ - uint16_t line[240]; - 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(); + if(!scope_active) return; + scope_write_to_framebuffer(&ScreenBuff); GC9A01_Update(); } diff --git a/components/badge23/include/badge23/scope.h b/components/badge23/include/badge23/scope.h index 302bea447ac39ca1d1ff029f3be08feebfd6b50b..024ccde97786fce796d22df234b73572cf914f64 100644 --- a/components/badge23/include/badge23/scope.h +++ b/components/badge23/include/badge23/scope.h @@ -10,6 +10,4 @@ typedef struct { void init_scope(uint16_t size); void write_to_scope(int16_t value); -void begin_scope_read(); -void end_scope_read(); -void read_line_from_scope(uint16_t * line, int16_t point); +void scope_write_to_framebuffer(uint16_t * framebuffer); diff --git a/components/badge23/scope.c b/components/badge23/scope.c index dc92395dd2987625eb0cac9092d3719f25d17fd4..8eb1f39805c0d60cc622ad0f71871198b85682ac 100644 --- a/components/badge23/scope.c +++ b/components/badge23/scope.c @@ -30,34 +30,40 @@ void begin_scope_read(){ scope->is_being_read = 1; //best mutex } -void read_line_from_scope(uint16_t * line, int16_t point){ - memset(line, 0, 480); - int16_t startpoint = scope->write_head_position - point; - while(startpoint < 0){ - startpoint += scope->buffer_size; - } - int16_t stoppoint = startpoint - 1; - if(stoppoint < 0){ - stoppoint += scope->buffer_size; - } - int16_t start = (scope->buffer[point]/32 + 120); - int16_t stop = (scope->buffer[point+1]/32 + 120); - if(start>240) start = 240; - if(start<0) start = 0; - if(stop>240) stop = 240; - if(stop<0) stop = 0; - - if(start > stop){ - int16_t inter = start; - start = stop; - stop = inter; - } - for(int16_t i = start; i <= stop; i++){ - line[i] = 255; - } -} - void end_scope_read(){ if(scope == NULL) return; scope->is_being_read = 0; //best mutex } + +void scope_write_to_framebuffer(uint16_t * framebuffer){ + //assumes 240x240 16bit framebuffer for now + begin_scope_read(); + memset(framebuffer, 0, 240*240*sizeof(uint16_t)); + + for(int point = 0; point < 240; point++){ + int16_t startpoint = scope->write_head_position - point; + while(startpoint < 0){ + startpoint += scope->buffer_size; + } + int16_t stoppoint = startpoint - 1; + if(stoppoint < 0){ + stoppoint += scope->buffer_size; + } + int16_t start = (scope->buffer[point]/32 + 120); + int16_t stop = (scope->buffer[point+1]/32 + 120); + if(start>240) start = 240; + if(start<0) start = 0; + if(stop>240) stop = 240; + if(stop<0) stop = 0; + + if(start > stop){ + int16_t inter = start; + start = stop; + stop = inter; + } + for(int16_t i = start; i <= stop; i++){ + framebuffer[point + i*240] = 255; + } + } + end_scope_read(); +}