From d3846c3e08647da37bf5bfcec155e8200cbcfb89 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Fri, 8 Mar 2024 15:54:34 +0100 Subject: [PATCH] up and down --- displayTest.c | 123 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 108 insertions(+), 15 deletions(-) diff --git a/displayTest.c b/displayTest.c index 502a486..c21c817 100644 --- a/displayTest.c +++ b/displayTest.c @@ -7,20 +7,37 @@ static canvas_t *canvas; #define MAX_COLOR 0x0d +typedef enum { + e_WIPE_LAST_COLUMN_DOWN, + e_PIXELS_UP, + e_WIPE_LAST_PIXEL_UP, + e_PIXELS_DOWN, + e_WIPE_LAST_PIXEL_DOWN, + e_ROWS_UP, + e_WIPE_LAST_ROW_UP, + e_ROWS_DOWN, + e_WIPE_LAST_ROW_DOWN, + e_COLUMNS_UP, + e_WIPE_LAST_COLUMN_UP, + e_COLUMNS_DOWN +} t_State; + void displayTestExec(void *args) { - static uint8_t last = 0xff; - static uint8_t current = 0; + static int16_t last = 0xff; + static int16_t current = 0; static uint8_t color = 0x01; - static uint8_t state = 1; + static t_State state = e_PIXELS_UP; switch (state) { - case 0: + // wipe last column + case e_WIPE_LAST_COLUMN_DOWN: for (uint16_t i = 0; i < canvas->height; i++) { canvasSetPixel(last, i, 0); } last = 0xff; - state = 1; - case 1: + state = e_PIXELS_UP; + // pixels up + case e_PIXELS_UP: if (last != 0xff) { *((canvas->canvas)+last) = 0x80; } @@ -30,14 +47,36 @@ void displayTestExec(void *args) { current++; if (current >= canvas->size) { current = 0; - state = 2; + state = e_WIPE_LAST_PIXEL_UP; } break; - case 2: + // wipe last pixel + case e_WIPE_LAST_PIXEL_UP: *((canvas->canvas)+last) = 0x80; last = 0xff; - state = 3; - case 3: + current = canvas->size - 1; + state = e_PIXELS_DOWN; + // pixels down + case e_PIXELS_DOWN: + if (last != 0xff) { + *((canvas->canvas)+last) = 0x80; + } + + last = current; + *((canvas->canvas)+current) = (color + 0x80); + current--; + if (current < 0) { + current = 0; + state = e_WIPE_LAST_PIXEL_DOWN; + } + break; + // wipe last pixel + case e_WIPE_LAST_PIXEL_DOWN: + *((canvas->canvas)+last) = 0x80; + last = 0xff; + state = e_ROWS_UP; + // rows up + case e_ROWS_UP: if (last != 0xff) { for (uint16_t i = 0; i < canvas->width; i++) { canvasSetPixel(i, last, 0); @@ -51,16 +90,44 @@ void displayTestExec(void *args) { current++; if (current >= canvas->height) { current = 0; - state = 4; + state = e_WIPE_LAST_ROW_UP; } break; - case 4: + // wipe last row + case e_WIPE_LAST_ROW_UP: for (uint16_t i = 0; i < canvas->width; i++) { canvasSetPixel(i, last, 0); } last = 0xff; - state = 5; - case 5: + current = canvas->height - 1; + state = e_ROWS_DOWN; + // rows down + case e_ROWS_DOWN: + if (last != 0xff) { + for (uint16_t i = 0; i < canvas->width; i++) { + canvasSetPixel(i, last, 0); + } + } + + last = current; + for (uint16_t i = 0; i < canvas->width; i++) { + canvasSetPixel(i, current, color); + } + current--; + if (current < 0) { + current = 0; + state = e_WIPE_LAST_ROW_DOWN; + } + break; + // wipe last row + case e_WIPE_LAST_ROW_DOWN: + for (uint16_t i = 0; i < canvas->width; i++) { + canvasSetPixel(i, last, 0); + } + last = 0xff; + state = e_COLUMNS_UP; + // columns up + case e_COLUMNS_UP: if (last != 0xff) { for (uint16_t i = 0; i < canvas->height; i++) { canvasSetPixel(last, i, 0); @@ -74,7 +141,33 @@ void displayTestExec(void *args) { current++; if (current >= canvas->width) { current = 0; - state = 0; + state = e_WIPE_LAST_COLUMN_UP; + } + break; + // wipe last column + case e_WIPE_LAST_COLUMN_UP: + for (uint16_t i = 0; i < canvas->height; i++) { + canvasSetPixel(last, i, 0); + } + last = 0xff; + current = canvas->width - 1; + state = e_COLUMNS_DOWN; + // columns down + case e_COLUMNS_DOWN: + if (last != 0xff) { + for (uint16_t i = 0; i < canvas->height; i++) { + canvasSetPixel(last, i, 0); + } + } + + last = current; + for (uint16_t i = 0; i < canvas->height; i++) { + canvasSetPixel(current, i, color); + } + current--; + if (current < 0) { + current = 0; + state = e_WIPE_LAST_COLUMN_DOWN; } break; }