diff --git a/src/SSD1306.cpp b/src/SSD1306.cpp index 8f20f1a..8db861c 100644 --- a/src/SSD1306.cpp +++ b/src/SSD1306.cpp @@ -27,7 +27,7 @@ extern "C" unsigned char frame[SSD1306_128x64_BYTES]; -SSD1306::SSD1306(int BSCMaster, u8 address, int flip, int type) +SSD1306::SSD1306(int BSCMaster, u8 address, int flip, LCD_MODEL type) : BSCMaster(BSCMaster) , address(address) , type(type) @@ -61,7 +61,10 @@ void SSD1306::InitHardware() } SendCommand(SSD1306_CMD_SET_COM_PINS); // 0xDA Layout and direction - SendCommand(0x12); + if (type == LCD_1306_128x32) + SendCommand(0x02); + else + SendCommand(0x12); SetContrast(GetContrast()); @@ -86,7 +89,7 @@ void SSD1306::InitHardware() Home(); - if (type != 1106) + if (type != LCD_1106_128x64) SendCommand(SSD1306_CMD_DEACTIVATE_SCROLL); // 0x2E } @@ -120,7 +123,7 @@ void SSD1306::MoveCursorByte(u8 row, u8 col) if (col > 127) { col = 127; } if (row > 7) { row = 7; } - if (type == 1106) + if (type == LCD_1106_128x64) col += 2; // sh1106 uses columns 2..129 SendCommand(SSD1306_CMD_SET_PAGE | row); // 0xB0 page address @@ -183,7 +186,7 @@ void SSD1306::SetContrast(u8 value) contrast = value; SendCommand(SSD1306_CMD_SET_CONTRAST_CONTROL); SendCommand(value); - if (type == 1306) + if (type != LCD_1106_128x64) // dont fiddle vcomdeselect on 1106 displays SetVCOMDeselect( value >> 8); } diff --git a/src/SSD1306.h b/src/SSD1306.h index f1ea8d9..08314fa 100644 --- a/src/SSD1306.h +++ b/src/SSD1306.h @@ -76,7 +76,7 @@ class SSD1306 public: // 128x32 0x3C // 128x64 0x3D or 0x3C (if SA0 is grounded) - SSD1306(int BSCMaster = 1, u8 address = 0x3C, int flip = 0, int type=1306); + SSD1306(int BSCMaster = 1, u8 address = 0x3C, int flip = 0, LCD_MODEL type=LCD_UNKNOWN); void PlotCharacter(int x, int y, char ascii, bool inverse); void PlotText(int x, int y, char* str, bool inverse); diff --git a/src/options.h b/src/options.h index f408b36..24dd1e9 100644 --- a/src/options.h +++ b/src/options.h @@ -19,12 +19,7 @@ #ifndef OPTIONS_H #define OPTIONS_H -typedef enum { - LCD_UNKNOWN, - LCD_1306_128x64, - LCD_1306_128x32, - LCD_1106_128x64, -} LCD_MODEL; +#include "types.h" class TextParser { diff --git a/src/stb_image.h b/src/stb_image.h index a056138..dc83749 100644 --- a/src/stb_image.h +++ b/src/stb_image.h @@ -892,12 +892,14 @@ static int stbi__mad3sizes_valid(int a, int b, int c, int add) stbi__addsizes_valid(a*b*c, add); } +#ifndef STBI_NO_LINEAR // returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) { return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); } +#endif // mallocs with size overflow checking static void *stbi__malloc_mad2(int a, int b, int add) @@ -912,11 +914,13 @@ static void *stbi__malloc_mad3(int a, int b, int c, int add) return stbi__malloc(a*b*c + add); } +#ifndef STBI_NO_LINEAR static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) { if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; return stbi__malloc(a*b*c*d + add); } +#endif // stbi__err - error // stbi__errpf - error returning pointer to float diff --git a/src/types.h b/src/types.h index 253092b..22aa7dc 100644 --- a/src/types.h +++ b/src/types.h @@ -9,5 +9,11 @@ typedef unsigned long long u64; typedef signed long long s64; +typedef enum { + LCD_UNKNOWN, + LCD_1306_128x64, + LCD_1306_128x32, + LCD_1106_128x64, +} LCD_MODEL; #endif