]> git.karo-electronics.de Git - oswald.git/blobdiff - ui/LcdDisplay.c
Bluetooth handling, screen reworks for icons
[oswald.git] / ui / LcdDisplay.c
index dbf775fbf4b6da665017c0391f15d35a682568a3..725908a4ab999860fbe6cb865b69ad6bfab5baa1 100644 (file)
@@ -1,9 +1,25 @@
-#include "oswald-ui.h"
+#include "oswald.h"
+#include "oswald_hal.h"
 #include "oswald_strings.h"
 #include "Fonts.h"
 
 #include "LcdDisplay.h"
 
+void oswald_draw_bitmap(const uint8_t xstart, const uint8_t ystart, const uint8_t width, const uint8_t height, const void *bmp)
+{
+       uint8_t x, y;
+       uint8_t *cb;
+
+       // we only draw set pixel, unset pixel remain as they are
+       for (y=0; y<height; y++) {
+               for (x=0; x<width; x++) {
+                       cb = (uint8_t *)(bmp + (y * ((width / 8)+((width % 8) ? 1:0))) + (x / 8));
+                       if (*cb & (1 << (x % 8)))
+                               hal_lcd_set_pixel(xstart + x, ystart + y, TRUE);
+               }
+       }
+}
+
 void DrawLcdLineBresenham(u8t xstart, u8t ystart, u8t xend, u8t yend)
 {
        int x, y, t, dx, dy, incx, incy, pdx, pdy, ddx, ddy, es, el, err;
@@ -32,7 +48,7 @@ void DrawLcdLineBresenham(u8t xstart, u8t ystart, u8t xend, u8t yend)
        x = xstart;
        y = ystart;
        err = el/2;
-       lcd_set_pixel(x, y, TRUE);
+       hal_lcd_set_pixel(x, y, TRUE);
  
        for (t = 0; t < el; ++t) {
                err -= es; 
@@ -44,7 +60,7 @@ void DrawLcdLineBresenham(u8t xstart, u8t ystart, u8t xend, u8t yend)
                        x += pdx;
                        y += pdy;
                }
-               lcd_set_pixel(x, y, TRUE);
+               hal_lcd_set_pixel(x, y, TRUE);
        }
        // lcd_update_display();
 }
@@ -77,12 +93,12 @@ void DrawLcdLineBresenhamWW(u8t xstart, u8t ystart, u8t xend, u8t yend, u8t thic
        x = xstart;
        y = ystart;
        err = el/2;
-       lcd_set_pixel(x, y, TRUE);
+       hal_lcd_set_pixel(x, y, TRUE);
        for (i=1; i<thickness; i++) {
-               lcd_set_pixel(x-i, y, TRUE);
-               lcd_set_pixel(x+i, y, TRUE);
-               lcd_set_pixel(x, y-i, TRUE);
-               lcd_set_pixel(x, y+i, TRUE);
+               hal_lcd_set_pixel(x-i, y, TRUE);
+               hal_lcd_set_pixel(x+i, y, TRUE);
+               hal_lcd_set_pixel(x, y-i, TRUE);
+               hal_lcd_set_pixel(x, y+i, TRUE);
        }
  
        for (t = 0; t < el; ++t) {
@@ -95,12 +111,12 @@ void DrawLcdLineBresenhamWW(u8t xstart, u8t ystart, u8t xend, u8t yend, u8t thic
                        x += pdx;
                        y += pdy;
                }
-               lcd_set_pixel(x, y, TRUE);
+               hal_lcd_set_pixel(x, y, TRUE);
                for (i=1; i<thickness; i++) {
-                       lcd_set_pixel(x-i, y, TRUE);
-                       lcd_set_pixel(x+i, y, TRUE);
-                       lcd_set_pixel(x, y-i, TRUE);
-                       lcd_set_pixel(x, y+i, TRUE);
+                       hal_lcd_set_pixel(x-i, y, TRUE);
+                       hal_lcd_set_pixel(x+i, y, TRUE);
+                       hal_lcd_set_pixel(x, y-i, TRUE);
+                       hal_lcd_set_pixel(x, y+i, TRUE);
                }
        }
        // lcd_update_display();
@@ -119,10 +135,10 @@ u8t WriteLcdCharacter(u8t x, u8t y, u8t Character)
        for (ly=0; ly<CharacterHeight; ly++) {
                for (lx=0; lx<CharacterWidth; lx++) {
                        if (bitmap[ly] & (1<<lx)) {
-                               lcd_set_pixel(lx+x, ly+y, TRUE);
+                               hal_lcd_set_pixel(lx+x, ly+y, TRUE);
                                // printf(".");
                        } else {
-                               lcd_set_pixel(lx+x, ly+y, FALSE);
+                               hal_lcd_set_pixel(lx+x, ly+y, FALSE);
                                // printf(" ");
                        }
                }
@@ -132,18 +148,19 @@ u8t WriteLcdCharacter(u8t x, u8t y, u8t Character)
        return CharacterWidth + GetFontSpacing();
 }
 
-void WriteLcdString(u8t x, u8t y, char *str)
+u8t WriteLcdString(u8t x, u8t y, char *str)
 {
        int lx, i, strl;
 
        strl = oswald_strlen(str);
        if (strl == 0)
-               return;
+               return 0;
 
        lx = x;
        for (i=0; i<strl; i++) {
                lx += WriteLcdCharacter(lx, y, str[i]);
        }
+       return lx;
 }