New features:
Version information screen Adjustable frame rate User selectable default menu Extra large fonts for clock and basic menu
This commit is contained in:
parent
9a36df14ec
commit
c1b1036ece
|
@ -115,6 +115,9 @@
|
||||||
|
|
||||||
#define RX_DATA_TIMOUT 50
|
#define RX_DATA_TIMOUT 50
|
||||||
|
|
||||||
|
const int FirmwareRevision = 21;
|
||||||
|
const char* FirmwareDate = "19 Apr 2019";
|
||||||
|
|
||||||
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
#include "src/Bluetooth/BluetoothESP32.h"
|
#include "src/Bluetooth/BluetoothESP32.h"
|
||||||
|
@ -485,7 +488,7 @@ void loop()
|
||||||
unsigned long RxTimeElapsed = timenow - lastRxTime;
|
unsigned long RxTimeElapsed = timenow - lastRxTime;
|
||||||
|
|
||||||
if (BlueWireSerial.available()) {
|
if (BlueWireSerial.available()) {
|
||||||
// Data is avaialable, read and store it now, use it later
|
// Data is available, read and store it now, use it later
|
||||||
// Note that if not in a recognised data receive frame state, the data
|
// Note that if not in a recognised data receive frame state, the data
|
||||||
// will be deliberately lost!
|
// will be deliberately lost!
|
||||||
BlueWireData.setValue(BlueWireSerial.read()); // read hex byte, store for later use
|
BlueWireData.setValue(BlueWireSerial.read()); // read hex byte, store for later use
|
||||||
|
@ -548,7 +551,8 @@ void loop()
|
||||||
// Detect the possible start of a new frame sequence from an OEM controller
|
// Detect the possible start of a new frame sequence from an OEM controller
|
||||||
// This will be the first activity for considerable period on the blue wire
|
// This will be the first activity for considerable period on the blue wire
|
||||||
// The heater always responds to a controller frame, but otherwise never by itself
|
// The heater always responds to a controller frame, but otherwise never by itself
|
||||||
if(RxTimeElapsed >= 970) {
|
// if(RxTimeElapsed >= 970) {
|
||||||
|
if(RxTimeElapsed >= NVstore.getFrameRate()) {
|
||||||
// have not seen any receive data for a second.
|
// have not seen any receive data for a second.
|
||||||
// OEM controller is probably not connected.
|
// OEM controller is probably not connected.
|
||||||
// Skip state machine immediately to BTC_Tx, sending our own settings.
|
// Skip state machine immediately to BTC_Tx, sending our own settings.
|
||||||
|
@ -1291,3 +1295,18 @@ bool getGPIO(int channel)
|
||||||
DebugPort.print("getGPIO: Output #"); DebugPort.print(channel+1); DebugPort.print(" = "); DebugPort.println(retval);
|
DebugPort.print("getGPIO: Output #"); DebugPort.print(channel+1); DebugPort.print(" = "); DebugPort.println(retval);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float getVersion()
|
||||||
|
{
|
||||||
|
return float(FirmwareRevision) * 0.1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* getVersionDate()
|
||||||
|
{
|
||||||
|
return FirmwareDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getBoardRevision()
|
||||||
|
{
|
||||||
|
return BoardRevision;
|
||||||
|
}
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
#include "128x64OLED.h"
|
||||||
#include "fonts/tahoma16.h"
|
#include "fonts/tahoma16.h"
|
||||||
|
#include "fonts/tahoma24.h"
|
||||||
#include "fonts/Icons.h"
|
#include "fonts/Icons.h"
|
||||||
#include "BasicScreen.h"
|
#include "BasicScreen.h"
|
||||||
#include "KeyPad.h"
|
#include "KeyPad.h"
|
||||||
|
@ -29,7 +30,8 @@
|
||||||
#include "../Utility/NVStorage.h"
|
#include "../Utility/NVStorage.h"
|
||||||
|
|
||||||
|
|
||||||
#define MAXIFONT tahoma_16ptFontInfo
|
#define MAXIFONT tahoma_24ptFontInfo
|
||||||
|
//#define MAXIFONT tahoma_16ptFontInfo
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -67,6 +69,7 @@ CBasicScreen::show()
|
||||||
|
|
||||||
{
|
{
|
||||||
CTransientFont AF(_display, &MAXIFONT); // temporarily use a large font
|
CTransientFont AF(_display, &MAXIFONT); // temporarily use a large font
|
||||||
|
// _printMenuText(_display.xCentre(), 23, msg, false, eCentreJustify);
|
||||||
_printMenuText(_display.xCentre(), 25, msg, false, eCentreJustify);
|
_printMenuText(_display.xCentre(), 25, msg, false, eCentreJustify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "KeyPad.h"
|
#include "KeyPad.h"
|
||||||
#include "../Protocol/helpers.h"
|
#include "../Protocol/helpers.h"
|
||||||
#include "fonts/Tahoma16.h"
|
#include "fonts/Tahoma16.h"
|
||||||
|
#include "fonts/Tahoma24.h"
|
||||||
#include "../RTC/Clock.h"
|
#include "../RTC/Clock.h"
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -64,7 +65,8 @@ CClockScreen::show()
|
||||||
|
|
||||||
int yPos = 25;
|
int yPos = 25;
|
||||||
{
|
{
|
||||||
CTransientFont AF(_display, &tahoma_16ptFontInfo); // temporarily use a large font
|
// CTransientFont AF(_display, &tahoma_16ptFontInfo); // temporarily use a large font
|
||||||
|
CTransientFont AF(_display, &tahoma_24ptFontInfo); // temporarily use a large font
|
||||||
_printMenuText(_display.xCentre(), yPos, str, false, eCentreJustify);
|
_printMenuText(_display.xCentre(), yPos, str, false, eCentreJustify);
|
||||||
}
|
}
|
||||||
sprintf(str, "%s %d %s %d", now.dowStr(), now.day(), now.monthStr(), now.year());
|
sprintf(str, "%s %d %s %d", now.dowStr(), now.day(), now.monthStr(), now.year());
|
||||||
|
|
|
@ -343,7 +343,7 @@ CGPIOInfoScreen::show()
|
||||||
sprintf(msg, "%d", GPIOalg.getValue());
|
sprintf(msg, "%d", GPIOalg.getValue());
|
||||||
_printMenuText(58, Line1, msg);
|
_printMenuText(58, Line1, msg);
|
||||||
|
|
||||||
_printMenuText(_display.xCentre(), 53, " \021 \030Edit \020 ", true, eCentreJustify);
|
_printMenuText(_display.xCentre(), 53, " \021 \020 ", true, eCentreJustify);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
156
Arduino/BTCDieselHeater/src/OLED/OtherOptionsScreen.cpp
Normal file
156
Arduino/BTCDieselHeater/src/OLED/OtherOptionsScreen.cpp
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the "bluetoothheater" distribution
|
||||||
|
* (https://gitlab.com/mrjones.id.au/bluetoothheater)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Ray Jones <ray@mrjones.id.au>
|
||||||
|
*
|
||||||
|
* This program 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.
|
||||||
|
*
|
||||||
|
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "128x64OLED.h"
|
||||||
|
#include "OtherOptionsScreen.h"
|
||||||
|
#include "KeyPad.h"
|
||||||
|
#include "../Protocol/helpers.h"
|
||||||
|
#include "../Utility/UtilClasses.h"
|
||||||
|
#include "../Utility/NVStorage.h"
|
||||||
|
#include "../Utility/GPIO.h"
|
||||||
|
#include "fonts/Icons.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
COtherOptionsScreen::COtherOptionsScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COtherOptionsScreen::onSelect()
|
||||||
|
{
|
||||||
|
CScreenHeader::onSelect();
|
||||||
|
_rowSel = 0;
|
||||||
|
_frameRate = NVstore.getFrameRate();
|
||||||
|
_homeMenu = NVstore.getHomeMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COtherOptionsScreen::_initUI()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
COtherOptionsScreen::show()
|
||||||
|
{
|
||||||
|
char msg[16];
|
||||||
|
|
||||||
|
_display.clearDisplay();
|
||||||
|
|
||||||
|
if(!CPasswordScreen::show()) { // for showing "saving settings"
|
||||||
|
|
||||||
|
if(_rowSel == 4) {
|
||||||
|
_printInverted(_display.xCentre(), 0, " Saving Settings ", true, eCentreJustify);
|
||||||
|
_printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify);
|
||||||
|
_printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_printInverted(_display.xCentre(), 0, " Other Options ", true, eCentreJustify);
|
||||||
|
|
||||||
|
_printMenuText(66, 14, "Frame Rate:", false, eRightJustify);
|
||||||
|
sprintf(msg, "%dms", _frameRate);
|
||||||
|
_printMenuText(70, 14, msg, _rowSel == 2);
|
||||||
|
|
||||||
|
_printMenuText(66, 25, "Home menu:", false, eRightJustify);
|
||||||
|
switch(_homeMenu) {
|
||||||
|
case 0: strcpy(msg, "Default"); break;
|
||||||
|
case 1: strcpy(msg, "Detailed"); break;
|
||||||
|
case 2: strcpy(msg, "Basic"); break;
|
||||||
|
case 3: strcpy(msg, "Clock"); break;
|
||||||
|
}
|
||||||
|
_printMenuText(70, 25, msg, _rowSel == 1);
|
||||||
|
|
||||||
|
_printMenuText(_display.xCentre(), 53, " \021 Exit \020 ", _rowSel == 0, eCentreJustify);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
COtherOptionsScreen::keyHandler(uint8_t event)
|
||||||
|
{
|
||||||
|
if(event & keyPressed) {
|
||||||
|
// UP press
|
||||||
|
if(event & key_Up) {
|
||||||
|
if(_rowSel == 4) {
|
||||||
|
_showStoringMessage();
|
||||||
|
NVstore.setFrameRate(_frameRate);
|
||||||
|
NVstore.setHomeMenu(_homeMenu);
|
||||||
|
saveNV();
|
||||||
|
_rowSel = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_rowSel++;
|
||||||
|
UPPERLIMIT(_rowSel, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// UP press
|
||||||
|
if(event & key_Down) {
|
||||||
|
_rowSel--;
|
||||||
|
LOWERLIMIT(_rowSel, 0);
|
||||||
|
}
|
||||||
|
// CENTRE press
|
||||||
|
if(event & key_Centre) {
|
||||||
|
if(_rowSel == 0) {
|
||||||
|
_ScreenManager.selectMenu(CScreenManager::RootMenuLoop); // force return to main menu
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_rowSel = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// LEFT press
|
||||||
|
if(event & key_Left) {
|
||||||
|
if(_rowSel == 0)
|
||||||
|
_ScreenManager.prevMenu();
|
||||||
|
else
|
||||||
|
adjust(-1);
|
||||||
|
}
|
||||||
|
// RIGHT press
|
||||||
|
if(event & key_Right) {
|
||||||
|
if(_rowSel == 0)
|
||||||
|
_ScreenManager.nextMenu();
|
||||||
|
else
|
||||||
|
adjust(+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ScreenManager.reqUpdate();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
COtherOptionsScreen::adjust(int dir)
|
||||||
|
{
|
||||||
|
switch(_rowSel) {
|
||||||
|
case 1:
|
||||||
|
_homeMenu += dir;
|
||||||
|
ROLLLOWERLIMIT(_homeMenu, 0, 3);
|
||||||
|
ROLLUPPERLIMIT(_homeMenu, 3, 0);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
_frameRate += dir * 50;
|
||||||
|
LOWERLIMIT(_frameRate, 300);
|
||||||
|
UPPERLIMIT(_frameRate, 1500);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
46
Arduino/BTCDieselHeater/src/OLED/OtherOptionsScreen.h
Normal file
46
Arduino/BTCDieselHeater/src/OLED/OtherOptionsScreen.h
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the "bluetoothheater" distribution
|
||||||
|
* (https://gitlab.com/mrjones.id.au/bluetoothheater)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Ray Jones <ray@mrjones.id.au>
|
||||||
|
*
|
||||||
|
* This program 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.
|
||||||
|
*
|
||||||
|
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __OTHEROPTIONSCREEN_H__
|
||||||
|
#define __OTHEROPTIONSCREEN_H__
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "PasswordScreen.h"
|
||||||
|
|
||||||
|
class C128x64_OLED;
|
||||||
|
class CScreenManager;
|
||||||
|
|
||||||
|
|
||||||
|
class COtherOptionsScreen : public CPasswordScreen
|
||||||
|
{
|
||||||
|
int _rowSel;
|
||||||
|
uint16_t _frameRate;
|
||||||
|
uint8_t _homeMenu;
|
||||||
|
void _initUI();
|
||||||
|
public:
|
||||||
|
COtherOptionsScreen(C128x64_OLED& display, CScreenManager& mgr);
|
||||||
|
bool show();
|
||||||
|
bool keyHandler(uint8_t event);
|
||||||
|
void onSelect();
|
||||||
|
void adjust(int dir);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -36,6 +36,8 @@
|
||||||
#include "TimerChartScreen.h"
|
#include "TimerChartScreen.h"
|
||||||
#include "InheritSettingsScreen.h"
|
#include "InheritSettingsScreen.h"
|
||||||
#include "GPIOScreen.h"
|
#include "GPIOScreen.h"
|
||||||
|
#include "VersionInfoScreen.h"
|
||||||
|
#include "OtherOptionsScreen.h"
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include "../cfg/pins.h"
|
#include "../cfg/pins.h"
|
||||||
#include "../cfg/BTCConfig.h"
|
#include "../cfg/BTCConfig.h"
|
||||||
|
@ -183,6 +185,7 @@ CScreenManager::begin(bool bNoClock)
|
||||||
menuloop.push_back(new CGPIOInfoScreen(*_pDisplay, *this)); // GPIO info
|
menuloop.push_back(new CGPIOInfoScreen(*_pDisplay, *this)); // GPIO info
|
||||||
menuloop.push_back(new CSettingsScreen(*_pDisplay, *this)); // Tuning info
|
menuloop.push_back(new CSettingsScreen(*_pDisplay, *this)); // Tuning info
|
||||||
_Screens.push_back(menuloop);
|
_Screens.push_back(menuloop);
|
||||||
|
|
||||||
// create timer screens loop
|
// create timer screens loop
|
||||||
menuloop.clear();
|
menuloop.clear();
|
||||||
menuloop.push_back(new CTimerChartScreen(*_pDisplay, *this, 0)); // timer chart
|
menuloop.push_back(new CTimerChartScreen(*_pDisplay, *this, 0)); // timer chart
|
||||||
|
@ -201,16 +204,21 @@ CScreenManager::begin(bool bNoClock)
|
||||||
menuloop.push_back(new CSetTimerScreen(*_pDisplay, *this, 12)); // set timer 13
|
menuloop.push_back(new CSetTimerScreen(*_pDisplay, *this, 12)); // set timer 13
|
||||||
menuloop.push_back(new CSetTimerScreen(*_pDisplay, *this, 13)); // set timer 14
|
menuloop.push_back(new CSetTimerScreen(*_pDisplay, *this, 13)); // set timer 14
|
||||||
_Screens.push_back(menuloop);
|
_Screens.push_back(menuloop);
|
||||||
|
|
||||||
// create heater tuning screens loop - password protected
|
// create heater tuning screens loop - password protected
|
||||||
menuloop.clear();
|
menuloop.clear();
|
||||||
menuloop.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // tuning
|
menuloop.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // tuning
|
||||||
menuloop.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // tuning
|
menuloop.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // tuning
|
||||||
_Screens.push_back(menuloop);
|
_Screens.push_back(menuloop);
|
||||||
|
|
||||||
// create User Settings screens loop
|
// create User Settings screens loop
|
||||||
menuloop.clear();
|
menuloop.clear();
|
||||||
menuloop.push_back(new CThermostatModeScreen(*_pDisplay, *this)); // experimental settings screen
|
menuloop.push_back(new CThermostatModeScreen(*_pDisplay, *this)); // experimental settings screen
|
||||||
menuloop.push_back(new CGPIOScreen(*_pDisplay, *this)); // GPIO settings screen
|
menuloop.push_back(new CGPIOScreen(*_pDisplay, *this)); // GPIO settings screen
|
||||||
|
menuloop.push_back(new CVersionInfoScreen(*_pDisplay, *this)); // GPIO settings screen
|
||||||
|
menuloop.push_back(new COtherOptionsScreen(*_pDisplay, *this)); // Other options screen
|
||||||
_Screens.push_back(menuloop);
|
_Screens.push_back(menuloop);
|
||||||
|
|
||||||
// create branch screens
|
// create branch screens
|
||||||
menuloop.clear();
|
menuloop.clear();
|
||||||
menuloop.push_back(new CSetClockScreen(*_pDisplay, *this)); // clock set branch screen
|
menuloop.push_back(new CSetClockScreen(*_pDisplay, *this)); // clock set branch screen
|
||||||
|
@ -250,8 +258,11 @@ CScreenManager::checkUpdate()
|
||||||
// Clock
|
// Clock
|
||||||
// return to those upon timeout, otherwise return to Basic Control screen
|
// return to those upon timeout, otherwise return to Basic Control screen
|
||||||
if(_rootMenu > 2) {
|
if(_rootMenu > 2) {
|
||||||
_subMenu = 1;
|
_rootMenu = _subMenu = 1;
|
||||||
_rootMenu = 1;
|
if(NVstore.getHomeMenu()) { // allow user to override defualt screen
|
||||||
|
DebugPort.print("Falling back to user home screen #"); DebugPort.println(NVstore.getHomeMenu()-1);
|
||||||
|
_rootMenu = _subMenu = NVstore.getHomeMenu()-1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_enterScreen();
|
_enterScreen();
|
||||||
}
|
}
|
||||||
|
|
100
Arduino/BTCDieselHeater/src/OLED/VersionInfoScreen.cpp
Normal file
100
Arduino/BTCDieselHeater/src/OLED/VersionInfoScreen.cpp
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the "bluetoothheater" distribution
|
||||||
|
* (https://gitlab.com/mrjones.id.au/bluetoothheater)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Ray Jones <ray@mrjones.id.au>
|
||||||
|
*
|
||||||
|
* This program 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.
|
||||||
|
*
|
||||||
|
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "128x64OLED.h"
|
||||||
|
#include "VersionInfoScreen.h"
|
||||||
|
#include "KeyPad.h"
|
||||||
|
#include "../Protocol/helpers.h"
|
||||||
|
#include "../Utility/UtilClasses.h"
|
||||||
|
#include "../Utility/NVStorage.h"
|
||||||
|
#include "../Utility/GPIO.h"
|
||||||
|
#include "fonts/Icons.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CVersionInfoScreen::CVersionInfoScreen(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CVersionInfoScreen::onSelect()
|
||||||
|
{
|
||||||
|
CScreenHeader::onSelect();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CVersionInfoScreen::_initUI()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CVersionInfoScreen::show()
|
||||||
|
{
|
||||||
|
char msg[16];
|
||||||
|
|
||||||
|
_display.clearDisplay();
|
||||||
|
|
||||||
|
_printInverted(_display.xCentre(), 0, " Version Information ", true, eCentreJustify);
|
||||||
|
|
||||||
|
_printMenuText(0, 14, "Firmware:");
|
||||||
|
sprintf(msg, "V%.1f", getVersion());
|
||||||
|
_printMenuText(55, 14, msg);
|
||||||
|
_printMenuText(55, 25, getVersionDate());
|
||||||
|
|
||||||
|
_printMenuText(0, 38, "Hardware:");
|
||||||
|
int PCB = getBoardRevision();
|
||||||
|
sprintf(msg, "V%.1f", float(PCB)*0.1f);
|
||||||
|
_printMenuText(55, 38, msg);
|
||||||
|
if(PCB == 20) {
|
||||||
|
_printMenuText(108, 38, "Analog", false, eCentreJustify);
|
||||||
|
_display.drawLine(88, 42, 127, 42, WHITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
_printMenuText(_display.xCentre(), 53, " \021 \020 ", true, eCentreJustify);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
CVersionInfoScreen::keyHandler(uint8_t event)
|
||||||
|
{
|
||||||
|
if(event & keyPressed) {
|
||||||
|
// UP press
|
||||||
|
if(event & key_Up) {
|
||||||
|
}
|
||||||
|
// CENTRE press
|
||||||
|
if(event & key_Centre) {
|
||||||
|
}
|
||||||
|
// LEFT press
|
||||||
|
if(event & key_Left) {
|
||||||
|
_ScreenManager.prevMenu();
|
||||||
|
}
|
||||||
|
// RIGHT press
|
||||||
|
if(event & key_Right) {
|
||||||
|
_ScreenManager.nextMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_ScreenManager.reqUpdate();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
42
Arduino/BTCDieselHeater/src/OLED/VersionInfoScreen.h
Normal file
42
Arduino/BTCDieselHeater/src/OLED/VersionInfoScreen.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the "bluetoothheater" distribution
|
||||||
|
* (https://gitlab.com/mrjones.id.au/bluetoothheater)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Ray Jones <ray@mrjones.id.au>
|
||||||
|
*
|
||||||
|
* This program 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.
|
||||||
|
*
|
||||||
|
* This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __VERSIONINFOSCREEN_H__
|
||||||
|
#define __VERSIONINFOSCREEN_H__
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "PasswordScreen.h"
|
||||||
|
|
||||||
|
class C128x64_OLED;
|
||||||
|
class CScreenManager;
|
||||||
|
|
||||||
|
|
||||||
|
class CVersionInfoScreen : public CScreenHeader
|
||||||
|
{
|
||||||
|
void _initUI();
|
||||||
|
public:
|
||||||
|
CVersionInfoScreen(C128x64_OLED& display, CScreenManager& mgr);
|
||||||
|
bool show();
|
||||||
|
bool keyHandler(uint8_t event);
|
||||||
|
void onSelect();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
399
Arduino/BTCDieselHeater/src/OLED/fonts/Tahoma24.c
Normal file
399
Arduino/BTCDieselHeater/src/OLED/fonts/Tahoma24.c
Normal file
|
@ -0,0 +1,399 @@
|
||||||
|
//
|
||||||
|
// Font data for Tahoma 24pt
|
||||||
|
//
|
||||||
|
// Generated by The Dot Factory:
|
||||||
|
// http://www.eran.io/the-dot-factory-an-lcd-font-and-image-generator/
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Dot Factory Settings
|
||||||
|
//
|
||||||
|
// Flip/Rotate Padding Removal Line Wrap Descriptors
|
||||||
|
// [X] Flip X Height(Y): Tightest (O) At column [X] Generate descriptor array
|
||||||
|
// [ ] Flip Y Width(X): Tightest ( ) At bitmap Char Width: In Bits
|
||||||
|
// 90deg Char Height: In Bits
|
||||||
|
// Font Height: In Bits
|
||||||
|
// Comments Byte [ ] Multiple descriptor arrays
|
||||||
|
// [X] Variable Name Bit layout: RowMajor
|
||||||
|
// [X] BMP visualise [#] Order: MSBfirst Create new when exceeds [80]
|
||||||
|
// [X] Char descriptor Format: Hex
|
||||||
|
// Style: Cpp Leading: 0x Image width: In Bits
|
||||||
|
// Image height: In Bits
|
||||||
|
// Variable name format
|
||||||
|
// Bitmaps: const uint8_t PROGMEM {0}Bitmaps Space char generation
|
||||||
|
// Char Info: const FONT_CHAR_INFO PROGMEM {0}Descriptors [ ] Generate space bitmap
|
||||||
|
// Font Info: const FONT_INFO {0}FontInfo [2] pixels for space char
|
||||||
|
// Width: const uint8_t {0}Width
|
||||||
|
// Height: const uint8_t {0}Height
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
#include "tahoma24.h"
|
||||||
|
|
||||||
|
// Character bitmaps for Tahoma 24pt
|
||||||
|
const uint8_t tahoma_24ptBitmaps [] PROGMEM =
|
||||||
|
{
|
||||||
|
// @0 ' ' (2 pixels wide)
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, //
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, //
|
||||||
|
|
||||||
|
// @10 '.' (6 pixels wide)
|
||||||
|
0xFC, // ######
|
||||||
|
0xFC, // ######
|
||||||
|
0xFC, // ######
|
||||||
|
0xFC, // ######
|
||||||
|
0xFC, // ######
|
||||||
|
0xFC, // ######
|
||||||
|
|
||||||
|
// @16 '0' (18 pixels wide)
|
||||||
|
0x03, 0xFF, 0x80, // ###########
|
||||||
|
0x0F, 0xFF, 0xE0, // ###############
|
||||||
|
0x3F, 0xFF, 0xF8, // ###################
|
||||||
|
0x7F, 0xFF, 0xFC, // #####################
|
||||||
|
0x7F, 0xFF, 0xFC, // #####################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFC, 0x00, 0x7E, // ###### ######
|
||||||
|
0xF8, 0x00, 0x3E, // ##### #####
|
||||||
|
0xF0, 0x00, 0x1E, // #### ####
|
||||||
|
0xF0, 0x00, 0x1E, // #### ####
|
||||||
|
0xF8, 0x00, 0x3E, // ##### #####
|
||||||
|
0xFC, 0x00, 0x7E, // ###### ######
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0x7F, 0xFF, 0xFC, // #####################
|
||||||
|
0x7F, 0xFF, 0xFC, // #####################
|
||||||
|
0x3F, 0xFF, 0xF8, // ###################
|
||||||
|
0x0F, 0xFF, 0xE0, // ###############
|
||||||
|
0x03, 0xFF, 0x80, // ###########
|
||||||
|
|
||||||
|
// @70 '1' (16 pixels wide)
|
||||||
|
0x1E, 0x00, 0x1E, // #### ####
|
||||||
|
0x1E, 0x00, 0x1E, // #### ####
|
||||||
|
0x1E, 0x00, 0x1E, // #### ####
|
||||||
|
0x1E, 0x00, 0x1E, // #### ####
|
||||||
|
0x3E, 0x00, 0x1E, // ##### ####
|
||||||
|
0x7F, 0xFF, 0xFE, // ######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0x00, 0x00, 0x1E, // ####
|
||||||
|
0x00, 0x00, 0x1E, // ####
|
||||||
|
0x00, 0x00, 0x1E, // ####
|
||||||
|
0x00, 0x00, 0x1E, // ####
|
||||||
|
0x00, 0x00, 0x1E, // ####
|
||||||
|
|
||||||
|
// @118 '2' (17 pixels wide)
|
||||||
|
0x00, 0x00, 0x1E, // ####
|
||||||
|
0x7E, 0x00, 0x3E, // ###### #####
|
||||||
|
0x7C, 0x00, 0x7E, // ##### ######
|
||||||
|
0x78, 0x00, 0x7E, // #### ######
|
||||||
|
0xF8, 0x00, 0xFE, // ##### #######
|
||||||
|
0xF0, 0x01, 0xFE, // #### ########
|
||||||
|
0xF0, 0x03, 0xFE, // #### #########
|
||||||
|
0xF0, 0x07, 0xFE, // #### ##########
|
||||||
|
0xF0, 0x1F, 0xDE, // #### ####### ####
|
||||||
|
0xF8, 0x3F, 0x9E, // ##### ####### ####
|
||||||
|
0xFF, 0xFF, 0x1E, // ################ ####
|
||||||
|
0xFF, 0xFE, 0x1E, // ############### ####
|
||||||
|
0x7F, 0xFC, 0x1E, // ############# ####
|
||||||
|
0x7F, 0xF8, 0x1E, // ############ ####
|
||||||
|
0x3F, 0xF0, 0x1E, // ########## ####
|
||||||
|
0x0F, 0xC0, 0x1E, // ###### ####
|
||||||
|
0x00, 0x00, 0x1E, // ####
|
||||||
|
|
||||||
|
// @169 '3' (17 pixels wide)
|
||||||
|
0x00, 0x00, 0xFC, // ######
|
||||||
|
0x7C, 0x00, 0x7C, // ##### #####
|
||||||
|
0x78, 0x00, 0x3C, // #### ####
|
||||||
|
0x78, 0x00, 0x3E, // #### #####
|
||||||
|
0xF0, 0x00, 0x1E, // #### ####
|
||||||
|
0xF0, 0x78, 0x1E, // #### #### ####
|
||||||
|
0xF0, 0x78, 0x1E, // #### #### ####
|
||||||
|
0xF0, 0x78, 0x1E, // #### #### ####
|
||||||
|
0xF0, 0x78, 0x1E, // #### #### ####
|
||||||
|
0xF8, 0xF8, 0x3E, // ##### ##### #####
|
||||||
|
0xFF, 0xFC, 0x3E, // ############## #####
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0x7F, 0xFF, 0xFC, // #####################
|
||||||
|
0x7F, 0xDF, 0xFC, // ######### ###########
|
||||||
|
0x3F, 0x8F, 0xF8, // ####### #########
|
||||||
|
0x1F, 0x0F, 0xF0, // ##### ########
|
||||||
|
0x00, 0x03, 0xE0, // #####
|
||||||
|
|
||||||
|
// @220 '4' (18 pixels wide)
|
||||||
|
0x00, 0x07, 0xC0, // #####
|
||||||
|
0x00, 0x1F, 0xC0, // #######
|
||||||
|
0x00, 0x3F, 0xC0, // ########
|
||||||
|
0x00, 0xFF, 0xC0, // ##########
|
||||||
|
0x01, 0xFF, 0xC0, // ###########
|
||||||
|
0x07, 0xF3, 0xC0, // ####### ####
|
||||||
|
0x0F, 0xE3, 0xC0, // ####### ####
|
||||||
|
0x3F, 0x83, 0xC0, // ####### ####
|
||||||
|
0x7F, 0x03, 0xC0, // ####### ####
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0x00, 0x03, 0xC0, // ####
|
||||||
|
0x00, 0x03, 0xC0, // ####
|
||||||
|
0x00, 0x03, 0xC0, // ####
|
||||||
|
|
||||||
|
// @274 '5' (17 pixels wide)
|
||||||
|
0x00, 0x00, 0x7C, // #####
|
||||||
|
0xFF, 0xF8, 0x3C, // ############# ####
|
||||||
|
0xFF, 0xF8, 0x3C, // ############# ####
|
||||||
|
0xFF, 0xF0, 0x3E, // ############ #####
|
||||||
|
0xFF, 0xF0, 0x1E, // ############ ####
|
||||||
|
0xFF, 0xF0, 0x1E, // ############ ####
|
||||||
|
0xFF, 0xF0, 0x1E, // ############ ####
|
||||||
|
0xF0, 0xF0, 0x1E, // #### #### ####
|
||||||
|
0xF0, 0xF0, 0x1E, // #### #### ####
|
||||||
|
0xF0, 0xF8, 0x3E, // #### ##### #####
|
||||||
|
0xF0, 0xFC, 0x7E, // #### ###### ######
|
||||||
|
0xF0, 0xFF, 0xFC, // #### ##############
|
||||||
|
0xF0, 0xFF, 0xFC, // #### ##############
|
||||||
|
0xF0, 0x7F, 0xFC, // #### #############
|
||||||
|
0xF0, 0x7F, 0xF8, // #### ############
|
||||||
|
0xF0, 0x3F, 0xF0, // #### ##########
|
||||||
|
0x00, 0x0F, 0xC0, // ######
|
||||||
|
|
||||||
|
// @325 '6' (17 pixels wide)
|
||||||
|
0x00, 0xFF, 0x80, // #########
|
||||||
|
0x07, 0xFF, 0xE0, // ##############
|
||||||
|
0x0F, 0xFF, 0xF8, // #################
|
||||||
|
0x1F, 0xFF, 0xFC, // ###################
|
||||||
|
0x3F, 0xFF, 0xFC, // ####################
|
||||||
|
0x7F, 0xFF, 0xFE, // ######################
|
||||||
|
0x7F, 0x70, 0x7E, // ####### ### ######
|
||||||
|
0xFC, 0x70, 0x1E, // ###### ### ####
|
||||||
|
0xF8, 0xF0, 0x1E, // ##### #### ####
|
||||||
|
0xF0, 0xF0, 0x1E, // #### #### ####
|
||||||
|
0xF0, 0xF8, 0x3E, // #### ##### #####
|
||||||
|
0xF0, 0xFF, 0xFE, // #### ###############
|
||||||
|
0xF0, 0xFF, 0xFC, // #### ##############
|
||||||
|
0xF0, 0x7F, 0xFC, // #### #############
|
||||||
|
0xF8, 0x7F, 0xF8, // ##### ############
|
||||||
|
0x00, 0x3F, 0xF0, // ##########
|
||||||
|
0x00, 0x0F, 0xC0, // ######
|
||||||
|
|
||||||
|
// @376 '7' (17 pixels wide)
|
||||||
|
0xF0, 0x00, 0x00, // ####
|
||||||
|
0xF0, 0x00, 0x02, // #### #
|
||||||
|
0xF0, 0x00, 0x0E, // #### ###
|
||||||
|
0xF0, 0x00, 0x3E, // #### #####
|
||||||
|
0xF0, 0x00, 0xFE, // #### #######
|
||||||
|
0xF0, 0x03, 0xFE, // #### #########
|
||||||
|
0xF0, 0x0F, 0xFE, // #### ###########
|
||||||
|
0xF0, 0x3F, 0xFE, // #### #############
|
||||||
|
0xF0, 0xFF, 0xF8, // #### #############
|
||||||
|
0xF3, 0xFF, 0xE0, // #### #############
|
||||||
|
0xFF, 0xFF, 0x80, // #################
|
||||||
|
0xFF, 0xFE, 0x00, // ###############
|
||||||
|
0xFF, 0xF8, 0x00, // #############
|
||||||
|
0xFF, 0xE0, 0x00, // ###########
|
||||||
|
0xFF, 0x80, 0x00, // #########
|
||||||
|
0xFE, 0x00, 0x00, // #######
|
||||||
|
0xF8, 0x00, 0x00, // #####
|
||||||
|
|
||||||
|
// @427 '8' (18 pixels wide)
|
||||||
|
0x00, 0x03, 0xE0, // #####
|
||||||
|
0x0F, 0x07, 0xF8, // #### ########
|
||||||
|
0x3F, 0xCF, 0xF8, // ######## #########
|
||||||
|
0x7F, 0xEF, 0xFC, // ########## ##########
|
||||||
|
0x7F, 0xFF, 0xFC, // #####################
|
||||||
|
0x7F, 0xFF, 0xFE, // ######################
|
||||||
|
0xFF, 0xFC, 0x3E, // ############## #####
|
||||||
|
0xF8, 0xF8, 0x1E, // ##### ##### ####
|
||||||
|
0xF0, 0xF8, 0x1E, // #### ##### ####
|
||||||
|
0xF0, 0x7C, 0x1E, // #### ##### ####
|
||||||
|
0xF8, 0x7C, 0x1E, // ##### ##### ####
|
||||||
|
0xFF, 0xFE, 0x3E, // ############### #####
|
||||||
|
0xFF, 0xFF, 0xFE, // #######################
|
||||||
|
0x7F, 0xFF, 0xFC, // #####################
|
||||||
|
0x7F, 0xDF, 0xFC, // ######### ###########
|
||||||
|
0x3F, 0x8F, 0xF8, // ####### #########
|
||||||
|
0x1F, 0x0F, 0xF0, // ##### ########
|
||||||
|
0x00, 0x03, 0xE0, // #####
|
||||||
|
|
||||||
|
// @481 '9' (17 pixels wide)
|
||||||
|
0x07, 0xE0, 0x00, // ######
|
||||||
|
0x1F, 0xF8, 0x00, // ##########
|
||||||
|
0x3F, 0xFC, 0x3E, // ############ #####
|
||||||
|
0x7F, 0xFC, 0x1E, // ############# ####
|
||||||
|
0x7F, 0xFE, 0x1E, // ############## ####
|
||||||
|
0xFF, 0xFE, 0x1E, // ############### ####
|
||||||
|
0xF8, 0x3E, 0x1E, // ##### ##### ####
|
||||||
|
0xF0, 0x1E, 0x1E, // #### #### ####
|
||||||
|
0xF0, 0x1E, 0x3E, // #### #### #####
|
||||||
|
0xF0, 0x1C, 0x7E, // #### ### ######
|
||||||
|
0xFC, 0x1D, 0xFC, // ###### ### #######
|
||||||
|
0xFF, 0xFF, 0xFC, // ######################
|
||||||
|
0x7F, 0xFF, 0xF8, // ####################
|
||||||
|
0x7F, 0xFF, 0xF0, // ###################
|
||||||
|
0x3F, 0xFF, 0xE0, // #################
|
||||||
|
0x0F, 0xFF, 0xC0, // ##############
|
||||||
|
0x03, 0xFE, 0x00, // #########
|
||||||
|
|
||||||
|
// @532 ':' (5 pixels wide)
|
||||||
|
0x07, 0x80, 0xf0, // #### ####
|
||||||
|
0x0F, 0xc1, 0xf8, // ###### ######
|
||||||
|
0x0F, 0xc1, 0xf8, // ###### ######
|
||||||
|
0x0F, 0xc1, 0xf8, // ###### ######
|
||||||
|
0x07, 0x80, 0xf0, // #### ####
|
||||||
|
0x00, 0x00, 0x00, //
|
||||||
|
|
||||||
|
// @550 'C' (12 pixels wide)
|
||||||
|
0x07, 0xE0, // ######
|
||||||
|
0x1F, 0xF8, // ##########
|
||||||
|
0x3F, 0xFC, // ############
|
||||||
|
0x7F, 0xFE, // ##############
|
||||||
|
0xF8, 0x1F, // ##### #####
|
||||||
|
0xF0, 0x0F, // #### ####
|
||||||
|
0xE0, 0x07, // ### ###
|
||||||
|
0xE0, 0x07, // ### ###
|
||||||
|
0xE0, 0x07, // ### ###
|
||||||
|
0xE0, 0x07, // ### ###
|
||||||
|
0x70, 0x0E, // ### ###
|
||||||
|
0x78, 0x1E, // #### ####
|
||||||
|
|
||||||
|
// @574 'F' (9 pixels wide)
|
||||||
|
0xFF, 0xFF, // ################
|
||||||
|
0xFF, 0xFF, // ################
|
||||||
|
0xFF, 0xFF, // ################
|
||||||
|
0xFF, 0xFF, // ################
|
||||||
|
0xE3, 0x80, // ### ###
|
||||||
|
0xE3, 0x80, // ### ###
|
||||||
|
0xE3, 0x80, // ### ###
|
||||||
|
0xE3, 0x80, // ### ###
|
||||||
|
0xE3, 0x80, // ### ###
|
||||||
|
0xE3, 0x80, // ### ###
|
||||||
|
|
||||||
|
// @594 '`' (8 pixels wide)
|
||||||
|
0x3C, 0x00, // ####
|
||||||
|
0x7E, 0x00, // ######
|
||||||
|
0xE7, 0x00, // ### ###
|
||||||
|
0xC3, 0x00, // ## ##
|
||||||
|
0xC3, 0x00, // ## ##
|
||||||
|
0xE7, 0x00, // ### ###
|
||||||
|
0x7E, 0x00, // ######
|
||||||
|
0x3C, 0x00, // ####
|
||||||
|
|
||||||
|
// @610 '-' (10 pixels wide)
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
0xF0, // ####
|
||||||
|
|
||||||
|
// @620 ' ' (6 pixels wide)
|
||||||
|
0x00, 0x00, //
|
||||||
|
0x00, 0x00, //
|
||||||
|
0x00, 0x00, //
|
||||||
|
0x00, 0x00, //
|
||||||
|
0x00, 0x00, //
|
||||||
|
0x00, 0x00, //
|
||||||
|
|
||||||
|
// @632 '.' (5 pixels wide)
|
||||||
|
0x00, 0x00, 0x00, //
|
||||||
|
0x00, 0x00, 0x3c, // ####
|
||||||
|
0x00, 0x00, 0x7e, // ######
|
||||||
|
0x00, 0x00, 0x7e, // ######
|
||||||
|
0x00, 0x00, 0x7e, // ######
|
||||||
|
0x00, 0x00, 0x3c, // ####
|
||||||
|
0x00, 0x00, 0x00, //
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Character descriptors for Tahoma 24pt
|
||||||
|
// { [Char width in bits], [Char height in bits], [Offset into tahoma_24ptCharBitmaps in bytes] }
|
||||||
|
const FONT_CHAR_INFO tahoma_24ptDescriptors[] PROGMEM =
|
||||||
|
{
|
||||||
|
{5, 16, 620}, // ' '
|
||||||
|
{0, 0, 0}, // '!'
|
||||||
|
{0, 0, 0}, // '"'
|
||||||
|
{0, 0, 0}, // '#'
|
||||||
|
{0, 0, 0}, // '$'
|
||||||
|
{0, 0, 0}, // '%'
|
||||||
|
{0, 0, 0}, // '&'
|
||||||
|
{0, 0, 0}, // '''
|
||||||
|
{0, 0, 0}, // '('
|
||||||
|
{0, 0, 0}, // ')'
|
||||||
|
{0, 0, 0}, // '*'
|
||||||
|
{0, 0, 0}, // '+'
|
||||||
|
{0, 0, 0}, // ','
|
||||||
|
{10, 4, 610}, // '-'
|
||||||
|
{7, 23, 632}, // '.'
|
||||||
|
{0, 0, 0}, // '/'
|
||||||
|
{18, 23, 16}, // '0'
|
||||||
|
{16, 23, 70}, // '1'
|
||||||
|
{17, 23, 118}, // '2'
|
||||||
|
{17, 23, 169}, // '3'
|
||||||
|
{18, 23, 220}, // '4'
|
||||||
|
{17, 23, 274}, // '5'
|
||||||
|
{17, 23, 325}, // '6'
|
||||||
|
{17, 23, 376}, // '7'
|
||||||
|
{18, 23, 427}, // '8'
|
||||||
|
{17, 23, 481}, // '9'
|
||||||
|
{5, 23, 532}, // ':'
|
||||||
|
{0, 0, 0}, // ';'
|
||||||
|
{0, 0, 0}, // '<'
|
||||||
|
{0, 0, 0}, // '='
|
||||||
|
{0, 0, 0}, // '>'
|
||||||
|
{0, 0, 0}, // '?'
|
||||||
|
{0, 0, 0}, // '@'
|
||||||
|
{0, 0, 0}, // 'A'
|
||||||
|
{0, 0, 0}, // 'B'
|
||||||
|
{12, 16, 550}, // 'C'
|
||||||
|
{0, 0, 0}, // 'D'
|
||||||
|
{0, 0, 0}, // 'E'
|
||||||
|
{10, 16, 574}, // 'F'
|
||||||
|
{0, 0, 0}, // 'G'
|
||||||
|
{0, 0, 0}, // 'H'
|
||||||
|
{0, 0, 0}, // 'I'
|
||||||
|
{0, 0, 0}, // 'J'
|
||||||
|
{0, 0, 0}, // 'K'
|
||||||
|
{0, 0, 0}, // 'L'
|
||||||
|
{0, 0, 0}, // 'M'
|
||||||
|
{0, 0, 0}, // 'N'
|
||||||
|
{0, 0, 0}, // 'O'
|
||||||
|
{0, 0, 0}, // 'P'
|
||||||
|
{0, 0, 0}, // 'Q'
|
||||||
|
{0, 0, 0}, // 'R'
|
||||||
|
{0, 0, 0}, // 'S'
|
||||||
|
{0, 0, 0}, // 'T'
|
||||||
|
{0, 0, 0}, // 'U'
|
||||||
|
{0, 0, 0}, // 'V'
|
||||||
|
{0, 0, 0}, // 'W'
|
||||||
|
{0, 0, 0}, // 'X'
|
||||||
|
{0, 0, 0}, // 'Y'
|
||||||
|
{0, 0, 0}, // 'Z'
|
||||||
|
{0, 0, 0}, // '['
|
||||||
|
{0, 0, 0}, // '\'
|
||||||
|
{0, 0, 0}, // ']'
|
||||||
|
{0, 0, 0}, // '^'
|
||||||
|
{0, 0, 0}, // '_'
|
||||||
|
{8, 16, 594}, // '`'
|
||||||
|
};
|
||||||
|
|
||||||
|
// Font information for Tahoma 24pt
|
||||||
|
const FONT_INFO tahoma_24ptFontInfo =
|
||||||
|
{
|
||||||
|
39, // Character height
|
||||||
|
' ', // Start character
|
||||||
|
'`', // End character
|
||||||
|
2, // width of space character
|
||||||
|
tahoma_24ptDescriptors, // Character descriptor array
|
||||||
|
tahoma_24ptBitmaps, // Character bitmap array
|
||||||
|
};
|
||||||
|
|
7
Arduino/BTCDieselHeater/src/OLED/fonts/Tahoma24.h
Normal file
7
Arduino/BTCDieselHeater/src/OLED/fonts/Tahoma24.h
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#include "FontTypes.h"
|
||||||
|
|
||||||
|
// Font data for Tahoma 16pt
|
||||||
|
extern const uint8_t tahoma_24ptBitmaps[] PROGMEM; // stored in program flash memory
|
||||||
|
extern const FONT_CHAR_INFO tahoma_24ptDescriptors[] PROGMEM; // stored in program flash memory
|
||||||
|
extern const FONT_INFO tahoma_24ptFontInfo;
|
||||||
|
|
|
@ -47,18 +47,21 @@ extern void setGlowDrive(unsigned char val);
|
||||||
extern void saveNV();
|
extern void saveNV();
|
||||||
extern void setSystemVoltage(float val);
|
extern void setSystemVoltage(float val);
|
||||||
extern const CProtocolPackage& getHeaterInfo();
|
extern const CProtocolPackage& getHeaterInfo();
|
||||||
extern void interpretJsonCommand(char* pLine);
|
extern void interpretJsonCommand(char* pLine);
|
||||||
extern void resetWebModerator();
|
extern void resetWebModerator();
|
||||||
extern void resetJSONmoderator();
|
extern void resetJSONmoderator();
|
||||||
extern const char* getBlueWireStatStr();
|
extern const char* getBlueWireStatStr();
|
||||||
extern bool hasOEMcontroller();
|
extern bool hasOEMcontroller();
|
||||||
extern bool hasOEMLCDcontroller();
|
extern bool hasOEMLCDcontroller();
|
||||||
extern int getBlueWireStat();
|
extern int getBlueWireStat();
|
||||||
extern int getSmartError();
|
extern int getSmartError();
|
||||||
extern bool isCyclicActive();
|
extern bool isCyclicActive();
|
||||||
extern void setupGPIO();
|
extern float getVersion();
|
||||||
extern void setGPIO(int channel, bool state);
|
extern const char* getVersionDate();
|
||||||
extern bool getGPIO(int channel);
|
extern int getBoardRevision();
|
||||||
|
extern void setupGPIO();
|
||||||
|
extern void setGPIO(int channel, bool state);
|
||||||
|
extern bool getGPIO(int channel);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -264,8 +264,7 @@ CTimerManager::manageTime(int _hour, int _minute, int _dow)
|
||||||
if(newID) {
|
if(newID) {
|
||||||
DebugPort.println("Start of timer interval, starting heater");
|
DebugPort.println("Start of timer interval, starting heater");
|
||||||
requestOn();
|
requestOn();
|
||||||
activeDow = dow; // dow when timer interval started
|
activeDow = dow; // dow when timer interval start was detected
|
||||||
// activeRepeat = lookup & 0x80;
|
|
||||||
retval = 1;
|
retval = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -339,6 +339,30 @@ CHeaterStorage::setGPIOalgMode(unsigned char val)
|
||||||
_calValues.Options.GPIOalgMode = val;
|
_calValues.Options.GPIOalgMode = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t
|
||||||
|
CHeaterStorage::getFrameRate()
|
||||||
|
{
|
||||||
|
return _calValues.Options.FrameRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CHeaterStorage::setFrameRate(uint16_t val)
|
||||||
|
{
|
||||||
|
_calValues.Options.FrameRate = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t
|
||||||
|
CHeaterStorage::getHomeMenu()
|
||||||
|
{
|
||||||
|
return _calValues.Options.HomeMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CHeaterStorage::setHomeMenu(uint8_t val)
|
||||||
|
{
|
||||||
|
_calValues.Options.HomeMenu = val;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
// ESP32
|
// ESP32
|
||||||
//
|
//
|
||||||
|
@ -461,6 +485,8 @@ CESP32HeaterStorage::loadUI()
|
||||||
validatedLoad("GPIOinMode", _calValues.Options.GPIOinMode, 0, u8inBounds, 0, 3);
|
validatedLoad("GPIOinMode", _calValues.Options.GPIOinMode, 0, u8inBounds, 0, 3);
|
||||||
validatedLoad("GPIOoutMode", _calValues.Options.GPIOoutMode, 0, u8inBounds, 0, 2);
|
validatedLoad("GPIOoutMode", _calValues.Options.GPIOoutMode, 0, u8inBounds, 0, 2);
|
||||||
validatedLoad("GPIOalgMode", _calValues.Options.GPIOalgMode, 0, u8inBounds, 0, 2);
|
validatedLoad("GPIOalgMode", _calValues.Options.GPIOalgMode, 0, u8inBounds, 0, 2);
|
||||||
|
validatedLoad("HomeMenu", _calValues.Options.HomeMenu, 0, u8inBounds, 0, 3);
|
||||||
|
validatedLoad("FrameRate", _calValues.Options.FrameRate, 1000, u16inBounds, 300, 1500);
|
||||||
preferences.end();
|
preferences.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,6 +503,8 @@ CESP32HeaterStorage::saveUI()
|
||||||
preferences.putUChar("GPIOinMode", _calValues.Options.GPIOinMode);
|
preferences.putUChar("GPIOinMode", _calValues.Options.GPIOinMode);
|
||||||
preferences.putUChar("GPIOoutMode", _calValues.Options.GPIOoutMode);
|
preferences.putUChar("GPIOoutMode", _calValues.Options.GPIOoutMode);
|
||||||
preferences.putUChar("GPIOalgMode", _calValues.Options.GPIOalgMode);
|
preferences.putUChar("GPIOalgMode", _calValues.Options.GPIOalgMode);
|
||||||
|
preferences.putUChar("HomeMenu", _calValues.Options.HomeMenu);
|
||||||
|
preferences.putUShort("FrameRate", _calValues.Options.FrameRate);
|
||||||
preferences.end();
|
preferences.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,8 @@ struct sBTCoptions {
|
||||||
uint8_t GPIOinMode;
|
uint8_t GPIOinMode;
|
||||||
uint8_t GPIOoutMode;
|
uint8_t GPIOoutMode;
|
||||||
uint8_t GPIOalgMode;
|
uint8_t GPIOalgMode;
|
||||||
|
uint16_t FrameRate;
|
||||||
|
uint8_t HomeMenu;
|
||||||
|
|
||||||
bool valid() {
|
bool valid() {
|
||||||
bool retval = true;
|
bool retval = true;
|
||||||
|
@ -83,6 +85,8 @@ struct sBTCoptions {
|
||||||
retval &= cyclicMode < 10;
|
retval &= cyclicMode < 10;
|
||||||
retval &= GPIOinMode < 4;
|
retval &= GPIOinMode < 4;
|
||||||
retval &= GPIOoutMode < 3;
|
retval &= GPIOoutMode < 3;
|
||||||
|
retval &= (FrameRate >= 300) && (FrameRate <= 1500);
|
||||||
|
retval &= HomeMenu < 4;
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
void init() {
|
void init() {
|
||||||
|
@ -95,6 +99,8 @@ struct sBTCoptions {
|
||||||
GPIOinMode = 0;
|
GPIOinMode = 0;
|
||||||
GPIOoutMode = 0;
|
GPIOoutMode = 0;
|
||||||
GPIOalgMode = 0;
|
GPIOalgMode = 0;
|
||||||
|
FrameRate = 1000;
|
||||||
|
HomeMenu = 0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -152,6 +158,8 @@ public:
|
||||||
GPIOinModes getGPIOinMode();
|
GPIOinModes getGPIOinMode();
|
||||||
GPIOoutModes getGPIOoutMode();
|
GPIOoutModes getGPIOoutMode();
|
||||||
GPIOalgModes getGPIOalgMode();
|
GPIOalgModes getGPIOalgMode();
|
||||||
|
uint16_t getFrameRate();
|
||||||
|
uint8_t getHomeMenu();
|
||||||
|
|
||||||
void setPmin(float);
|
void setPmin(float);
|
||||||
void setPmax(float);
|
void setPmax(float);
|
||||||
|
@ -172,6 +180,8 @@ public:
|
||||||
void setGPIOinMode(unsigned char val);
|
void setGPIOinMode(unsigned char val);
|
||||||
void setGPIOoutMode(unsigned char val);
|
void setGPIOoutMode(unsigned char val);
|
||||||
void setGPIOalgMode(unsigned char val);
|
void setGPIOalgMode(unsigned char val);
|
||||||
|
void setFrameRate(uint16_t val);
|
||||||
|
void setHomeMenu(uint8_t val);
|
||||||
|
|
||||||
void getTimerInfo(int idx, sTimer& timerInfo);
|
void getTimerInfo(int idx, sTimer& timerInfo);
|
||||||
void setTimerInfo(int idx, const sTimer& timerInfo);
|
void setTimerInfo(int idx, const sTimer& timerInfo);
|
||||||
|
|
Loading…
Reference in a new issue