X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm32f103-nucleo%2Fhello.c;fp=src%2Fstm32f103-nucleo%2Fhello.c;h=76b1d995bd1dd84dc4439e2a56d69f58def4530b;hb=24a4ae736ccc899c9fbfb720c4a0aebc35465c52;hp=1571eae4f5427c457ba3b352c0dd6ce7796daeef;hpb=5530d7b305157a8027ea7f83152a526dec16c546;p=fw%2Faltos diff --git a/src/stm32f103-nucleo/hello.c b/src/stm32f103-nucleo/hello.c index 1571eae4..76b1d995 100644 --- a/src/stm32f103-nucleo/hello.c +++ b/src/stm32f103-nucleo/hello.c @@ -17,26 +17,101 @@ */ #include +#include -static void blink(void) +#define WIDTH AO_ST7565_WIDTH +#define HEIGHT AO_ST7565_HEIGHT +#define STRIDE AO_BITMAP_STRIDE(WIDTH) + +static uint32_t image[STRIDE * HEIGHT]; + +static struct ao_bitmap fb = { + .base = image, + .stride = STRIDE, + .width = WIDTH, + .height = HEIGHT, + .damage = AO_BOX_INIT, +}; + +static void +ao_st7565_test(void) +{ + ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY); + ao_st7565_update(&fb); + ao_text(&fb, &BitstreamVeraSans_Roman_24_font, + 0, 20, "hello world", AO_BLACK, AO_COPY); + ao_st7565_update(&fb); +} + +static int16_t x1 = 32, _y1 = 10, x2 = 32, y2 = 40; +static int16_t dx1 = 2, dy1 = 2, dx2 = -2, dy2 = -1; + +#define bounds(v,m,M,d) \ + if (v < m) { \ + v = m + m - v; \ + d = -d; \ + } else if (v > M) { \ + v = M - (v - M); \ + d = -d; \ + } + +static void +ao_st7565_line(void) { - for (;;) { - ao_led_for(AO_LED_GREEN, 50); - ao_delay(50); + int i; + + for (i = 0; i < 100; i++) { + ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY); + ao_line(&fb, x1, _y1, x2, y2, AO_BLACK, AO_COPY); + ao_st7565_update(&fb); + x1 += dx1; + _y1 += dy1; + x2 += dx2; + y2 += dy2; + printf("%d,%d - %d,%d\n", x1, _y1, x2, y2); + fflush(stdout); + bounds(x1, 0, WIDTH, dx1); + bounds(x2, 0, WIDTH, dx2); + bounds(_y1, 0, HEIGHT, dy1); + bounds(y2, 0, HEIGHT, dy2); + ao_delay(AO_MS_TO_TICKS(200)); } } -static struct ao_task blink_task; +static const struct ao_transform logo_transform = { + .x_scale = 48, .x_off = 0, + .y_scale = 48, .y_off = 0, +}; + +#define LOGO_FONT BenguiatGothicStd_Bold_26_font + +static void +ao_st7565_poly(void) +{ + ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY); + ao_logo(&fb, &logo_transform, &LOGO_FONT, 0x00000000, AO_COPY); + ao_st7565_update(&fb); +} + +const struct ao_cmds ao_st7565_cmds[] = { + { ao_st7565_test, "g\0Test ST7565 display" }, + { ao_st7565_line, "l\0Draw lines" }, + { ao_st7565_poly, "p\0Draw polygon" }, + { 0, NULL }, +}; int main(void) { ao_clock_init(); ao_led_init(); ao_timer_init(); + ao_task_init(); + ao_dma_init(); + ao_spi_init(); ao_serial_init(); ao_usb_init(); - ao_task_init(); + ao_st7565_init(); ao_cmd_init(); - ao_add_task(&blink_task, blink, "blink"); + ao_cmd_register(ao_st7565_cmds); ao_start_scheduler(); }