diff --git a/app/modules/u8g.c b/app/modules/u8g.c index 0255a814..f08bb416 100644 --- a/app/modules/u8g.c +++ b/app/modules/u8g.c @@ -339,7 +339,6 @@ static int lu8g_nextPage( lua_State *L ) // ------------------------------------------------------------ // comm functions // -#define I2C_SLA 0x3c #define I2C_CMD_MODE 0x000 #define I2C_DATA_MODE 0x040 @@ -530,7 +529,6 @@ const LUA_REG_TYPE lu8g_map[] = { { LSTRKEY( "ssd1306_128x64_i2c" ), LFUNCVAL ( lu8g_ssd1306_128x64_i2c ) }, #if LUA_OPTIMIZE_MEMORY > 0 - //{ LSTRKEY( "font_6x10" ), LNUMVAL( LU8G_FONT_6X10 ) }, // Register fonts #undef U8G_FONT_TABLE_ENTRY diff --git a/app/u8glib/u8g.h b/app/u8glib/u8g.h index d644fdc9..4921caea 100644 --- a/app/u8glib/u8g.h +++ b/app/u8glib/u8g.h @@ -93,7 +93,7 @@ extern "C" { #endif #ifndef U8G_FONT_SECTION -# define U8G_FONT_SECTION(name) U8G_SECTION(".font_data." name) +# define U8G_FONT_SECTION(name) U8G_SECTION(".u8g_progmem." name) #endif @@ -111,7 +111,7 @@ typedef uint8_t u8g_fntpgm_uint8_t; #else #define U8G_PROGMEM -#define PROGMEM +#define PROGMEM U8G_SECTION(".u8g_progmem.data") typedef uint8_t u8g_pgm_uint8_t; typedef uint8_t u8g_fntpgm_uint8_t; //#define u8g_pgm_read(adr) (*(const u8g_pgm_uint8_t *)(adr)) @@ -153,6 +153,7 @@ typedef struct _u8g_dev_arg_bbx_t u8g_dev_arg_bbx_t; typedef struct _u8g_box_t u8g_box_t; typedef struct _u8g_dev_arg_irgb_t u8g_dev_arg_irgb_t; +typedef struct _pg_struct pg_struct; /*===============================================================*/ /* generic */ @@ -1054,49 +1055,6 @@ typedef void (*u8g_state_cb)(uint8_t msg); #define U8G_FONT_HEIGHT_MODE_XTEXT 1 #define U8G_FONT_HEIGHT_MODE_ALL 2 -struct _u8g_t -{ - u8g_uint_t width; - u8g_uint_t height; - - - u8g_dev_t *dev; /* first device in the device chain */ - const u8g_pgm_uint8_t *font; /* regular font for all text procedures */ - const u8g_pgm_uint8_t *cursor_font; /* special font for cursor procedures */ - uint8_t cursor_fg_color, cursor_bg_color; - uint8_t cursor_encoding; - uint8_t mode; /* display mode, one of U8G_MODE_xxx */ - u8g_uint_t cursor_x; - u8g_uint_t cursor_y; - u8g_draw_cursor_fn cursor_fn; - - int8_t glyph_dx; - int8_t glyph_x; - int8_t glyph_y; - uint8_t glyph_width; - uint8_t glyph_height; - - u8g_font_calc_vref_fnptr font_calc_vref; - uint8_t font_height_mode; - int8_t font_ref_ascent; - int8_t font_ref_descent; - uint8_t font_line_spacing_factor; /* line_spacing = factor * (ascent - descent) / 64 */ - uint8_t line_spacing; - - u8g_dev_arg_pixel_t arg_pixel; - /* uint8_t color_index; */ - -#ifdef U8G_WITH_PINLIST - uint8_t pin_list[U8G_PIN_LIST_LEN]; -#endif - - u8g_state_cb state_cb; - - u8g_box_t current_page; /* current box of the visible page */ - - uint8_t i2c_addr; -}; - #define u8g_GetFontAscent(u8g) ((u8g)->font_ref_ascent) #define u8g_GetFontDescent(u8g) ((u8g)->font_ref_descent) #define u8g_GetFontLineSpacing(u8g) ((u8g)->line_spacing) @@ -1354,8 +1312,6 @@ struct pg_point_struct pg_word_t y; }; -typedef struct _pg_struct pg_struct; /* forward declaration */ - struct pg_edge_struct { pg_word_t x_direction; /* 1, if x2 is greater than x1, -1 otherwise */ @@ -1395,7 +1351,7 @@ struct _pg_struct void pg_ClearPolygonXY(pg_struct *pg); void pg_AddPolygonXY(pg_struct *pg, u8g_t *u8g, int16_t x, int16_t y); void pg_DrawPolygon(pg_struct *pg, u8g_t *u8g); -void u8g_ClearPolygonXY(void); +void u8g_ClearPolygonXY(u8g_t *u8g); void u8g_AddPolygonXY(u8g_t *u8g, int16_t x, int16_t y); void u8g_DrawPolygon(u8g_t *u8g); void u8g_DrawTriangle(u8g_t *u8g, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2); @@ -1470,6 +1426,57 @@ void chess_Init(u8g_t *u8g, uint8_t empty_body_color); void chess_Draw(void); void chess_Step(uint8_t keycode); + + +struct _u8g_t +{ + u8g_uint_t width; + u8g_uint_t height; + + + u8g_dev_t *dev; /* first device in the device chain */ + const u8g_pgm_uint8_t *font; /* regular font for all text procedures */ + const u8g_pgm_uint8_t *cursor_font; /* special font for cursor procedures */ + uint8_t cursor_fg_color, cursor_bg_color; + uint8_t cursor_encoding; + uint8_t mode; /* display mode, one of U8G_MODE_xxx */ + u8g_uint_t cursor_x; + u8g_uint_t cursor_y; + u8g_draw_cursor_fn cursor_fn; + + int8_t glyph_dx; + int8_t glyph_x; + int8_t glyph_y; + uint8_t glyph_width; + uint8_t glyph_height; + + u8g_font_calc_vref_fnptr font_calc_vref; + uint8_t font_height_mode; + int8_t font_ref_ascent; + int8_t font_ref_descent; + uint8_t font_line_spacing_factor; /* line_spacing = factor * (ascent - descent) / 64 */ + uint8_t line_spacing; + + u8g_dev_arg_pixel_t arg_pixel; + /* uint8_t color_index; */ + +#ifdef U8G_WITH_PINLIST + uint8_t pin_list[U8G_PIN_LIST_LEN]; +#endif + + u8g_state_cb state_cb; + + u8g_box_t current_page; /* current box of the visible page */ + + uint8_t i2c_addr; + + /* global variables from u8g_polygon.c */ + pg_struct pg; +}; + + + + /*===============================================================*/ /* font definitions */ extern const u8g_fntpgm_uint8_t u8g_font_m2icon_5[] U8G_FONT_SECTION("u8g_font_m2icon_5"); diff --git a/app/u8glib/u8g_dev_ssd1306_128x64.c b/app/u8glib/u8g_dev_ssd1306_128x64.c index 6efdc7aa..fe5cc452 100644 --- a/app/u8glib/u8g_dev_ssd1306_128x64.c +++ b/app/u8glib/u8g_dev_ssd1306_128x64.c @@ -384,29 +384,28 @@ uint8_t u8g_dev_sh1106_128x64_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi -//U8G_PB_DEV(u8g_dev_ssd1306_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SW_SPI); -//U8G_PB_DEV(u8g_dev_ssd1306_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_HW_SPI); +U8G_PB_DEV(u8g_dev_ssd1306_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SW_SPI); +U8G_PB_DEV(u8g_dev_ssd1306_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_HW_SPI); U8G_PB_DEV(u8g_dev_ssd1306_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SSD_I2C); -//U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_SW_SPI); -//U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_HW_SPI); -//U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_SSD_I2C); -// -// -//uint8_t u8g_dev_ssd1306_128x64_2x_buf[WIDTH*2] U8G_NOCOMMON ; -//u8g_pb_t u8g_dev_ssd1306_128x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1306_128x64_2x_buf}; -//u8g_dev_t u8g_dev_ssd1306_128x64_2x_sw_spi = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_SW_SPI }; -//u8g_dev_t u8g_dev_ssd1306_128x64_2x_hw_spi = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_HW_SPI }; -//u8g_dev_t u8g_dev_ssd1306_128x64_2x_i2c = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_SSD_I2C }; -// -// -//U8G_PB_DEV(u8g_dev_sh1106_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_SW_SPI); -//U8G_PB_DEV(u8g_dev_sh1106_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_HW_SPI); -//U8G_PB_DEV(u8g_dev_sh1106_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_SSD_I2C); -// -//uint8_t u8g_dev_sh1106_128x64_2x_buf[WIDTH*2] U8G_NOCOMMON ; -//u8g_pb_t u8g_dev_sh1106_128x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_sh1106_128x64_2x_buf}; -//u8g_dev_t u8g_dev_sh1106_128x64_2x_sw_spi = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_SW_SPI }; -//u8g_dev_t u8g_dev_sh1106_128x64_2x_hw_spi = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_HW_SPI }; -//u8g_dev_t u8g_dev_sh1106_128x64_2x_i2c = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_SSD_I2C }; +U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_SW_SPI); +U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_HW_SPI); +U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_SSD_I2C); + +uint8_t u8g_dev_ssd1306_128x64_2x_buf[WIDTH*2] U8G_NOCOMMON ; +u8g_pb_t u8g_dev_ssd1306_128x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1306_128x64_2x_buf}; +u8g_dev_t u8g_dev_ssd1306_128x64_2x_sw_spi = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_SW_SPI }; +u8g_dev_t u8g_dev_ssd1306_128x64_2x_hw_spi = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_HW_SPI }; +u8g_dev_t u8g_dev_ssd1306_128x64_2x_i2c = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_SSD_I2C }; + + +U8G_PB_DEV(u8g_dev_sh1106_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_SW_SPI); +U8G_PB_DEV(u8g_dev_sh1106_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_HW_SPI); +U8G_PB_DEV(u8g_dev_sh1106_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_SSD_I2C); + +uint8_t u8g_dev_sh1106_128x64_2x_buf[WIDTH*2] U8G_NOCOMMON ; +u8g_pb_t u8g_dev_sh1106_128x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_sh1106_128x64_2x_buf}; +u8g_dev_t u8g_dev_sh1106_128x64_2x_sw_spi = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_SW_SPI }; +u8g_dev_t u8g_dev_sh1106_128x64_2x_hw_spi = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_HW_SPI }; +u8g_dev_t u8g_dev_sh1106_128x64_2x_i2c = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_SSD_I2C }; diff --git a/app/u8glib/u8g_polygon.c b/app/u8glib/u8g_polygon.c index f7e9b659..38e33e8d 100644 --- a/app/u8glib/u8g_polygon.c +++ b/app/u8glib/u8g_polygon.c @@ -306,26 +306,26 @@ void pg_DrawPolygon(pg_struct *pg, u8g_t *u8g) pg_exec(pg, u8g); } -pg_struct u8g_pg; +//pg_struct u8g_pg; -void u8g_ClearPolygonXY(void) +void u8g_ClearPolygonXY(u8g_t *u8g) { - pg_ClearPolygonXY(&u8g_pg); + pg_ClearPolygonXY(&(u8g->pg)); } void u8g_AddPolygonXY(u8g_t *u8g, int16_t x, int16_t y) { - pg_AddPolygonXY(&u8g_pg, u8g, x, y); + pg_AddPolygonXY(&(u8g->pg), u8g, x, y); } void u8g_DrawPolygon(u8g_t *u8g) { - pg_DrawPolygon(&u8g_pg, u8g); + pg_DrawPolygon(&(u8g->pg), u8g); } void u8g_DrawTriangle(u8g_t *u8g, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2) { - u8g_ClearPolygonXY(); + u8g_ClearPolygonXY(u8g); u8g_AddPolygonXY(u8g, x0, y0); u8g_AddPolygonXY(u8g, x1, y1); u8g_AddPolygonXY(u8g, x2, y2); diff --git a/ld/eagle.app.v6.ld b/ld/eagle.app.v6.ld index ebdddd6e..d633dcd1 100644 --- a/ld/eagle.app.v6.ld +++ b/ld/eagle.app.v6.ld @@ -73,8 +73,8 @@ SECTIONS *(.literal.* .text.*) *(.rodata2.text) - /* put font data into irom0 */ - *(.font_data.*) + /* put font and progmem data into irom0 */ + *(.u8g_progmem.*) _irom0_text_end = ABSOLUTE(.); _flash_used_end = ABSOLUTE(.);