/* * © 2020, Chris Harlow, 2021, Neil McKechnie. All rights reserved. * * This file is part of CommandStation-EX * * This is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * It is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CommandStation. If not, see . */ // OLED Implementation of LCDDisplay class // Note: this file is optionally included by LCD_Implementation.h // It is NOT a .cpp file to prevent it being compiled and demanding libraries even when not needed. #include "SSD1306/SSD1306Ascii.h" #include "SSD1306/SSD1306AsciiWire.h" SSD1306AsciiWire LCDDriver; // DEVICE SPECIFIC LCDDisplay Implementation for OLED LCDDisplay::LCDDisplay() { // Scan for device on 0x3c and 0x3d. for (byte address=0x3c; address<=0x3d; address++) { Wire.beginTransmission(address); byte error = Wire.endTransmission(); if (!error) { // Device found DIAG(F("\nOLED display found at 0x%x"), address); interfake(OLED_DRIVER,0); LCDDriver.begin(lcdRows==32 ? &Adafruit128x32 : &Adafruit128x64, address); lcdDisplay=this; LCDDriver.setFont(System5x7); // Normal 1:1 pixel scale clear(); return; } } DIAG(F("\nOLED display not found\n")); } void LCDDisplay::interfake(int p1, int p2, int p3) {(void)p1; lcdRows=p2/8; (void)p3;} void LCDDisplay::clearNative() {LCDDriver.clear();} void LCDDisplay::setRowNative(byte row) { // Positions text write to start of row 1..n and clears previous text int y=row; LCDDriver.setCursor(0, y); LCDDriver.clearToEOL(); } void LCDDisplay::writeNative(char * b){ LCDDriver.write(b); } void LCDDisplay::displayNative() { }