diff --git a/options.txt b/options.txt index 1c47300..124cfac 100644 --- a/options.txt +++ b/options.txt @@ -55,6 +55,9 @@ GraphIEC = 1 // If you are using a LCD screen and you would like PageUp and PageDown keys to work with it then specify this option //KeyboardBrowseLCDScreen = 1 +// change startup logo on oled - 1541ii or 1541classic +//LcdLogoName = 1541ii + // If you are using I2C LCD you can optionally change what pins it is connected to. // (defaults to 0 for non-split lines (Option A) or 1 for split lines (Option B)) //i2cBusMaster = 0 //SDA - pin 27 SCL - pin 28 diff --git a/src/ScreenLCD.cpp b/src/ScreenLCD.cpp index 0650d72..9fffb54 100644 --- a/src/ScreenLCD.cpp +++ b/src/ScreenLCD.cpp @@ -42,10 +42,6 @@ void ScreenLCD::Open(u32 widthDesired, u32 heightDesired, u32 colourDepth, int B ssd1306 = new SSD1306(BSCMaster, LCDAddress, LCDFlip, LCDType); ssd1306->DisplayOn(); -// ssd1306->Plottext(5, 0, "Pi1541", false); -// ssd1306->PlotImage(logo_ssd_1541ii); - ssd1306->PlotImage(logo_ssd_1541classic); - ssd1306->RefreshScreen(); opened = true; @@ -85,6 +81,14 @@ void ScreenLCD::PlotImage(u32* image, int x, int y, int w, int h) { } +void ScreenLCD::PlotRawImage(const u8* image, int x, int y, int w, int h) +{ + if (x==0 && y==0 && w==128 && h==64) + { + ssd1306->PlotImage(image); + } +} + u32 ScreenLCD::PrintText(bool petscii, u32 x, u32 y, char *ptr, RGBA TxtColour, RGBA BkColour, bool measureOnly, u32* width, u32* height) { int len = 0; @@ -102,6 +106,11 @@ u32 ScreenLCD::GetFontHeight() return 16; } +void ScreenLCD::RefreshScreen() +{ + ssd1306->RefreshScreen(); +} + void ScreenLCD::SwapBuffers() { ssd1306->RefreshScreen(); diff --git a/src/ScreenLCD.h b/src/ScreenLCD.h index d3c1dd6..c99237f 100644 --- a/src/ScreenLCD.h +++ b/src/ScreenLCD.h @@ -49,9 +49,12 @@ public: void PlotImage(u32* image, int x, int y, int w, int h); + void PlotRawImage(const u8* image, int x, int y, int w, int h); + u32 GetFontHeight(); void SwapBuffers(); + void RefreshScreen(); void RefreshRows(u8 start, u8 amountOfRows); diff --git a/src/main.cpp b/src/main.cpp index d8cc764..e6e9d61 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,6 +43,7 @@ extern "C" #include "logo.h" #include "sample.h" +#include "ssd_logo.h" unsigned versionMajor = 1; unsigned versionMinor = 7; @@ -355,6 +356,20 @@ void InitialiseLCD() { screenLCD = new ScreenLCD(); screenLCD->Open(128, 64, 1, i2cBusMaster, i2cLcdAddress, i2cLcdFlip, 1306); + + if (strcasecmp(options.GetLcdLogoName(), "1541ii") == 0) + { + screenLCD->PlotRawImage(logo_ssd_1541ii, 0, 0, 128, 64); + snprintf(tempBuffer, tempBufferSize, "Pi1541 V%d.%02d", versionMajor, versionMinor); + screenLCD->PrintText(0, 16, 0, tempBuffer, 0xffffffff); + screenLCD->RefreshScreen(); + } + if (strcasecmp(options.GetLcdLogoName(), "1541classic") == 0) + { + screenLCD->PlotRawImage(logo_ssd_1541classic, 0, 0, 128, 64); + screenLCD->RefreshScreen(); + } + screenLCD->SetContrast(i2cLcdOnContrast); } else if (strcasecmp(options.GetLCDName(), "sh1106_128x64") == 0) @@ -1060,6 +1075,8 @@ void DisplayOptions(int y_pos) screen.PrintText(false, 0, y_pos += 16, tempBuffer, COLOUR_WHITE, COLOUR_BLACK); snprintf(tempBuffer, tempBufferSize, "LCDName = %s\r\n", options.GetLCDName()); screen.PrintText(false, 0, y_pos += 16, tempBuffer, COLOUR_WHITE, COLOUR_BLACK); + snprintf(tempBuffer, tempBufferSize, "LcdLogoName = %s\r\n", options.GetLcdLogoName()); + screen.PrintText(false, 0, y_pos += 16, tempBuffer, COLOUR_WHITE, COLOUR_BLACK); } static void CheckOptions() diff --git a/src/options.cpp b/src/options.cpp index f7d6a2a..27df338 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -221,6 +221,10 @@ void Options::Process(char* buffer) { strncpy(starFileName, pValue, 255); } + else if ((strcasecmp(pOption, "LCDLogoName") == 0)) + { + strncpy(LcdLogoName, pValue, 255); + } else if ((strcasecmp(pOption, "LCDName") == 0)) { strncpy(LCDName, pValue, 255); diff --git a/src/options.h b/src/options.h index 1d1481e..fcf1003 100644 --- a/src/options.h +++ b/src/options.h @@ -76,6 +76,7 @@ public: inline unsigned int I2CLcdOnContrast() const { return i2cLcdOnContrast; } inline unsigned int I2CLcdDimContrast() const { return i2cLcdDimContrast; } inline unsigned int I2CLcdDimTime() const { return i2cLcdDimTime; } + inline const char* GetLcdLogoName() const { return LcdLogoName; } // Page up and down will jump a different amount based on the maximum number rows displayed. // Perhaps we should use some keyboard modifier to the the other screen? @@ -119,6 +120,7 @@ private: char starFileName[256]; char LCDName[256]; + char LcdLogoName[256]; char autoMountImageName[256]; char ROMFontName[256];