From ce9452afffac83d6643634ca6ce63d0e843e175f Mon Sep 17 00:00:00 2001 From: lilian Date: Tue, 13 Dec 2016 08:14:49 +0100 Subject: [PATCH] Update example. out of range err add --- examples/ssd1306_fps/main.c | 15 ++++++++------- extras/ssd1306/ssd1306.c | 23 ++++++++++++++--------- extras/ssd1306/ssd1306.h | 10 +++++----- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/examples/ssd1306_fps/main.c b/examples/ssd1306_fps/main.c index 3fcb2b0..b35dbfb 100644 --- a/examples/ssd1306_fps/main.c +++ b/examples/ssd1306_fps/main.c @@ -8,14 +8,14 @@ #include #define LOAD_ICON_X 54 -#define LOAD_ICON_Y 32 +#define LOAD_ICON_Y 42 #define LOAD_ICON_SIZE 20 -#define CIRCLE_COUNT_ICON_X 94 -#define CIRCLE_COUNT_ICON_Y 42 +#define CIRCLE_COUNT_ICON_X 100 +#define CIRCLE_COUNT_ICON_Y 52 /* Remove this line if your display connected by SPI */ -//#define I2C_CONNECTION +#define I2C_CONNECTION #ifdef I2C_CONNECTION #include @@ -29,8 +29,8 @@ #ifdef I2C_CONNECTION #define PROTOCOL SSD1306_PROTO_I2C #define ADDR SSD1306_I2C_ADDR_0 - #define SCL_PIN 14 - #define SDA_PIN 13 + #define SCL_PIN 5 + #define SDA_PIN 4 #else #define PROTOCOL SSD1306_PROTO_SPI4 #define CS_PIN 5 @@ -82,9 +82,10 @@ static void ssd1306_task(void *pvParameters) while (1) { + ssd1306_fill_rectangle(&dev, buffer, 0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT/2, OLED_COLOR_BLACK); ssd1306_draw_string(&dev, buffer, font, 0, 0, "Hello, esp-open-rtos!", OLED_COLOR_WHITE, OLED_COLOR_BLACK); sprintf(text, "FPS: %u ", fps); - ssd1306_draw_string(&dev, buffer, font_builtin_fonts[DEFAULT_FONT], 0, 40, text, OLED_COLOR_WHITE, OLED_COLOR_BLACK); + ssd1306_draw_string(&dev, buffer, font_builtin_fonts[DEFAULT_FONT], 0, 45, text, OLED_COLOR_WHITE, OLED_COLOR_BLACK); // generate loading icon ssd1306_draw_line(&dev, buffer, x0, y0, x1, y1, OLED_COLOR_BLACK); diff --git a/extras/ssd1306/ssd1306.c b/extras/ssd1306/ssd1306.c index 1c690a1..dd198f4 100644 --- a/extras/ssd1306/ssd1306.c +++ b/extras/ssd1306/ssd1306.c @@ -879,13 +879,14 @@ int ssd1306_fill_triangle(const ssd1306_t *dev, uint8_t *fb, int16_t x0, return 0; } -uint8_t ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, +int ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, char c, ssd1306_color_t foreground, ssd1306_color_t background) { uint8_t i, j; const uint8_t *bitmap; uint8_t line = 0; + int err; if (font == NULL) return 0; @@ -901,7 +902,7 @@ uint8_t ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, line = bitmap[(d->width + 7) / 8 * j + i / 8]; // line data } if (line & 0x80) { - ssd1306_draw_pixel(dev, fb, x + i, y + j, foreground); + err = ssd1306_draw_pixel(dev, fb, x + i, y + j, foreground); } else { switch (background) @@ -911,34 +912,38 @@ uint8_t ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, break; case OLED_COLOR_WHITE: case OLED_COLOR_BLACK: - ssd1306_draw_pixel(dev, fb, x + i, y + j, background); + err = ssd1306_draw_pixel(dev, fb, x + i, y + j, background); break; case OLED_COLOR_INVERT: // I don't know why I need invert background break; } } + if (err) return -ERANGE ; line = line << 1; } } return d->width; } -uint8_t ssd1306_draw_string(const ssd1306_t *dev, uint8_t *fb, +int ssd1306_draw_string(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, char *str, ssd1306_color_t foreground, ssd1306_color_t background) { uint8_t t = x; + int err; if (font == NULL || str == NULL) return 0; while (*str) { - x += ssd1306_draw_char(dev, fb, font, x, y, *str, foreground, background); - ++str; - if (*str) - x += font->c; + if ((err = ssd1306_draw_char(dev, fb, font, x, y, *str, foreground, background)) < 0 ) + return err; + x += err; + ++str; + if (*str) + x += font->c; } return x - t; } @@ -974,7 +979,7 @@ int ssd1306_start_scroll_hori(const ssd1306_t *dev, bool way, uint8_t start, uin return -EIO; } -int ssd1306_set_scroll_hori_vert(const ssd1306_t *dev, bool way, uint8_t start, uint8_t stop, uint8_t dy, ssd1306_scroll_t frame) +int ssd1306_start_scroll_hori_vert(const ssd1306_t *dev, bool way, uint8_t start, uint8_t stop, uint8_t dy, ssd1306_scroll_t frame) { //this function dont work well if no vertical setting. if ((!dy) || (dy > 63)) diff --git a/extras/ssd1306/ssd1306.h b/extras/ssd1306/ssd1306.h index 43df6fe..7bbc8f4 100644 --- a/extras/ssd1306/ssd1306.h +++ b/extras/ssd1306/ssd1306.h @@ -442,9 +442,9 @@ int ssd1306_fill_triangle(const ssd1306_t *dev, uint8_t *fb, int16_t x0, int16_t * @param c The character to draw * @param foreground Character color * @param background Background color - * @return Width of the character + * @return Width of the character or negative value if error occured */ -uint8_t ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, char c, ssd1306_color_t foreground, ssd1306_color_t background); +int ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, char c, ssd1306_color_t foreground, ssd1306_color_t background); /** * Draw one character using currently selected font @@ -456,9 +456,9 @@ uint8_t ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, const font_info_t * * @param str The string to draw * @param foreground Character color * @param background Background color - * @return Width of the string (out-of-display pixels also included) + * @return Width of the string (out-of-display pixels also included) or negative value if error occured */ -uint8_t ssd1306_draw_string(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, char *str, ssd1306_color_t foreground, ssd1306_color_t background); +int ssd1306_draw_string(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, char *str, ssd1306_color_t foreground, ssd1306_color_t background); /** * Stop scrolling (the ram data needs to be rewritten) @@ -488,7 +488,7 @@ int ssd1306_start_scroll_hori(const ssd1306_t *dev, bool way, uint8_t start, uin * @param frame Time interval between each scroll * @return Non-zero if error occured */ -int ssd1306_set_scroll_hori_vert(const ssd1306_t *dev, bool way, uint8_t start, uint8_t stop, uint8_t dy, ssd1306_scroll_t frame); +int ssd1306_start_scroll_hori_vert(const ssd1306_t *dev, bool way, uint8_t start, uint8_t stop, uint8_t dy, ssd1306_scroll_t frame); #ifdef __cplusplus extern "C"