]> git.karo-electronics.de Git - oswald.git/blobdiff - ui/LcdDisplay.c
Starting to get rid of borrowed code (LcdDisplay, Fonts), integrate
[oswald.git] / ui / LcdDisplay.c
index 4f6bf99a3a9922f00c55a6f9775190c9f4d1dfe5..ae4aea52b4497d950654593e88b2a5776908b1e9 100644 (file)
@@ -1,15 +1,12 @@
-#include "oswald-ui.h"
+#include "oswald.h"
+#include "oswald_hal.h"
 #include "oswald_strings.h"
 #include "Fonts.h"
 
 #include "LcdDisplay.h"
 
-#define NUM_LCD_ROWS  96
-#define NUM_LCD_COL_BYTES  ( 12 )
-#define MAX_FONT_ROWS ( 19 )
 
-
-void DrawLcdLineBresenham(u8t xstart, u8t ystart, u8t xend, u8t yend)
+void DrawLcdLineBresenham(const uint8_t xstart, const uint8_t ystart, const uint8_t xend, const uint8_t yend)
 {
        int x, y, t, dx, dy, incx, incy, pdx, pdy, ddx, ddy, es, el, err;
  
@@ -37,7 +34,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; 
@@ -49,11 +46,12 @@ 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();
 }
 
-void DrawLcdLineBresenhamWW(u8t xstart, u8t ystart, u8t xend, u8t yend, u8t thickness)
+void DrawLcdLineBresenhamWW(const uint8_t xstart, const uint8_t ystart, const uint8_t xend, const uint8_t yend, const uint8_t thickness)
 {
        int i, x, y, t, dx, dy, incx, incy, pdx, pdy, ddx, ddy, es, el, err;
  
@@ -81,12 +79,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) {
@@ -99,47 +97,65 @@ 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();
 }
 
-
-u8t WriteLcdCharacter(u8t x, u8t y, u8t Character)
+u8t WriteLcdCharacter(const uint8_t x, const uint8_t y, const uint8_t Character)
 {
        u8t CharacterHeight = GetCharacterHeight();
        u8t CharacterWidth = GetCharacterWidth(Character);
-       unsigned int bitmap[MAX_FONT_ROWS];
-       register lx, ly;
+       u16t bitmap[MAX_FONT_ROWS];
+       int lx, ly;
 
-       GetCharacterBitmap(Character,(unsigned int*)&bitmap);
+       GetCharacterBitmap(Character, bitmap);
 
        // printf("cw=%d ch=%d\n", CharacterWidth, CharacterHeight);
        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);
+                       } /*else {
+                               hal_lcd_set_pixel(lx+x, ly+y, FALSE);
                                // printf(" ");
-                       }
+                       }*/
                }
                // printf("\n");
        }
-
+       // lcd_update_display();
        return CharacterWidth + GetFontSpacing();
 }
 
-void WriteLcdString(u8t x, u8t y, u8t *str)
+u8t WriteLcdString(const uint8_t x, const uint8_t y, const char *str)
+{
+       int lx, i, strl;
+
+       strl = oswald_strlen((char *)str);
+       if (strl == 0)
+               return 0;
+
+       lx = x;
+       for (i=0; i<strl; i++) {
+               lx += WriteLcdCharacter(lx, y, str[i]);
+       }
+       return lx;
+}
+
+
+void WriteLcdNumber(const uint8_t x, const uint8_t y, const int16_t number)
 {
-       register lx, i, strl;
+       int lx, i, strl;
+       char str[8];
 
+       itoa(number, str, 10);
        strl = oswald_strlen(str);
        if (strl == 0)
                return;