Pushed and shoved and edited and finally there - structured file directories
This commit is contained in:
parent
b07b7db8db
commit
529ac5d8e0
|
@ -1,905 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of the "bluetoothheater" distribution
|
|
||||||
* (https://gitlab.com/mrjones.id.au/bluetoothheater)
|
|
||||||
*
|
|
||||||
* Copyright (C) 2018 Ray Jones <ray@mrjones.id.au>
|
|
||||||
* Copyright (C) 2018 James Clark
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Chinese Heater Half Duplex Serial Data Sending Tool
|
|
||||||
|
|
||||||
Connects to the blue wire of a Chinese heater, which is the half duplex serial link.
|
|
||||||
Sends and receives data from hardware serial port 1.
|
|
||||||
|
|
||||||
Terminology: Tx is to the heater unit, Rx is from the heater unit.
|
|
||||||
|
|
||||||
Typical data frame timing on the blue wire is:
|
|
||||||
__Tx_Rx____________________________Tx_Rx____________________________Tx_Rx___________
|
|
||||||
|
|
||||||
This software can connect to the blue wire in a normal OEM system, detecting the
|
|
||||||
OEM controller and allowing extraction of the data or injecting on/off commands.
|
|
||||||
|
|
||||||
If Pin 21 is grounded on the Due, this simple stream will be reported over Serial and
|
|
||||||
no control from the Arduino will be allowed.
|
|
||||||
This allows passive sniffing of the blue wire in a normal system.
|
|
||||||
|
|
||||||
The binary data is received from the line.
|
|
||||||
If it has been > 100ms since the last blue wire activity this indicates a new frame
|
|
||||||
sequence is starting from the OEM controller.
|
|
||||||
Synchronise as such then count off the next 24 bytes storing them in the Controller's
|
|
||||||
data array. These bytes are then reported over Serial to the PC in ASCII.
|
|
||||||
|
|
||||||
It is then expected the heater will respond with it's 24 bytes.
|
|
||||||
Capture those bytes and store them in the Heater1 data array.
|
|
||||||
Once again these bytes are then reported over Serial to the PC in ASCII.
|
|
||||||
|
|
||||||
If no activity is sensed in a second, it is assumed no OEM controller is attached and we
|
|
||||||
have full control over the heater.
|
|
||||||
|
|
||||||
Either way we can now inject a message onto the blue wire allowing our custom
|
|
||||||
on/off control.
|
|
||||||
We must remain synchronous with an OEM controller if it exists otherwise E-07
|
|
||||||
faults will be caused.
|
|
||||||
|
|
||||||
Typical data frame timing on the blue wire is then:
|
|
||||||
__OEMTx_HtrRx__OurTx_HtrRx____________OEMTx_HtrRx__OurTx_HtrRx____________OEMTx_HtrRx__OurTx_HtrRx_________
|
|
||||||
|
|
||||||
The second HtrRx to the next OEMTx delay is always > 100ms and is paced by the OEM controller.
|
|
||||||
The delay before seeing Heater Rx data after any Tx is usually much less than 10ms.
|
|
||||||
But this does rise if new max/min or voltage settings are sent.
|
|
||||||
**The heater only ever sends Rx data in response to a data frame from a controller**
|
|
||||||
|
|
||||||
For Bluetooth connectivity, a HC-05 Bluetooth module is attached to Serial2:
|
|
||||||
TXD -> Rx2 (pin 17)
|
|
||||||
RXD -> Tx2 (pin 16)
|
|
||||||
EN(key) -> pin 15
|
|
||||||
STATE -> pin 4
|
|
||||||
|
|
||||||
|
|
||||||
This code only works with boards that have more than one hardware serial port like Arduino
|
|
||||||
Mega, Due, Zero, ESP32 etc.
|
|
||||||
|
|
||||||
|
|
||||||
The circuit:
|
|
||||||
- a Tx Rx multiplexer is required to combine the Arduino's Tx1 And Rx1 pins onto the blue wire.
|
|
||||||
- a Tx Enable signal from pin 22 controls the multiplexer, high for Tx, low for Rx
|
|
||||||
- Serial logging software on Serial0 via USB link
|
|
||||||
|
|
||||||
created 23 Sep 2018 by Ray Jones
|
|
||||||
|
|
||||||
This example code is in the public domain.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "BTCWebServer.h"
|
|
||||||
#include "Protocol.h"
|
|
||||||
#include "TxManage.h"
|
|
||||||
#include "pins.h"
|
|
||||||
#include "NVStorage.h"
|
|
||||||
#include "debugport.h"
|
|
||||||
#include "SmartError.h"
|
|
||||||
#include "BTCWifi.h"
|
|
||||||
#include "BTCConfig.h"
|
|
||||||
#include "UtilClasses.h"
|
|
||||||
#include "BTCota.h"
|
|
||||||
#include "BTCWebServer.h"
|
|
||||||
#include "ScreenManager.h"
|
|
||||||
#include <OneWire.h>
|
|
||||||
#include <DallasTemperature.h>
|
|
||||||
#include "keypad.h"
|
|
||||||
#include "helpers.h"
|
|
||||||
#include "Wire.h"
|
|
||||||
#include "Clock.h"
|
|
||||||
#include "BTC_JSON.h"
|
|
||||||
|
|
||||||
#define FAILEDSSID "BTCESP32"
|
|
||||||
#define FAILEDPASSWORD "thereisnospoon"
|
|
||||||
|
|
||||||
#define RX_DATA_TIMOUT 50
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef ESP32
|
|
||||||
#include "BluetoothESP32.h"
|
|
||||||
#else
|
|
||||||
#include "BluetoothHC05.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Setup Serial Port Definitions
|
|
||||||
#if defined(__arm__)
|
|
||||||
// Required for Arduino Due, UARTclass is derived from HardwareSerial
|
|
||||||
static UARTClass& BlueWireSerial(Serial1);
|
|
||||||
#else
|
|
||||||
// for ESP32, Mega
|
|
||||||
// HardwareSerial is it for these boards
|
|
||||||
static HardwareSerial& BlueWireSerial(Serial1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void initBlueWireSerial();
|
|
||||||
bool validateFrame(const CProtocol& frame, const char* name);
|
|
||||||
void checkDisplayUpdate();
|
|
||||||
void checkDebugCommands();
|
|
||||||
void updateJsonBT();
|
|
||||||
|
|
||||||
// DS18B20 temperature sensor support
|
|
||||||
OneWire ds(DS18B20_Pin); // on pin 5 (a 4.7K resistor is necessary)
|
|
||||||
DallasTemperature TempSensor(&ds);
|
|
||||||
long lastTemperatureTime; // used to moderate DS18B20 access
|
|
||||||
float fFilteredTemperature = -100; // -100: force direct update uopn first pass
|
|
||||||
const float fAlpha = 0.95; // exponential mean alpha
|
|
||||||
|
|
||||||
unsigned long lastAnimationTime; // used to sequence updates to LCD for animation
|
|
||||||
|
|
||||||
CommStates CommState;
|
|
||||||
CTxManage TxManage(TxEnbPin, BlueWireSerial);
|
|
||||||
CModeratedFrame OEMCtrlFrame; // data packet received from heater in response to OEM controller packet
|
|
||||||
CModeratedFrame HeaterFrame1; // data packet received from heater in response to OEM controller packet
|
|
||||||
CProtocol HeaterFrame2; // data packet received from heater in response to our packet
|
|
||||||
CProtocol DefaultBTCParams(CProtocol::CtrlMode); // defines the default parameters, used in case of no OEM controller
|
|
||||||
CSmartError SmartError;
|
|
||||||
CKeyPad KeyPad;
|
|
||||||
CScreenManager ScreenManager;
|
|
||||||
TelnetSpy DebugPort;
|
|
||||||
CModerator BTModerator;
|
|
||||||
|
|
||||||
sRxLine PCline;
|
|
||||||
long lastRxTime; // used to observe inter character delays
|
|
||||||
bool hasOEMController = false;
|
|
||||||
|
|
||||||
CProtocolPackage HeaterData;
|
|
||||||
|
|
||||||
unsigned long moderator;
|
|
||||||
bool bUpdateDisplay = false;
|
|
||||||
bool bHaveWebClient = false;
|
|
||||||
bool bBTconnected = false;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Bluetooth instantiation
|
|
||||||
//
|
|
||||||
#ifdef ESP32
|
|
||||||
|
|
||||||
// Bluetooth options for ESP32
|
|
||||||
#if USE_HC05_BLUETOOTH == 1
|
|
||||||
CBluetoothESP32HC05 Bluetooth(HC05_KeyPin, HC05_SensePin, Rx2Pin, Tx2Pin); // Instantiate ESP32 using a HC-05
|
|
||||||
#elif USE_BLE_BLUETOOTH == 1
|
|
||||||
CBluetoothESP32BLE Bluetooth; // Instantiate ESP32 BLE server
|
|
||||||
#elif USE_CLASSIC_BLUETOOTH == 1
|
|
||||||
CBluetoothESP32Classic Bluetooth; // Instantiate ESP32 Classic Bluetooth server
|
|
||||||
#else // none selected
|
|
||||||
CBluetoothAbstract Bluetooth; // default no bluetooth support - empty shell
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else // !ESP32
|
|
||||||
|
|
||||||
// Bluetooth for boards other than ESP32
|
|
||||||
#if USE_HC05_BLUETOOTH == 1
|
|
||||||
CBluetoothHC05 Bluetooth(HC05_KeyPin, HC05_SensePin); // Instantiate a HC-05
|
|
||||||
#else // none selected
|
|
||||||
CBluetoothAbstract Bluetooth; // default no bluetooth support - empty shell
|
|
||||||
#endif // closing USE_HC05_BLUETOOTH
|
|
||||||
|
|
||||||
#endif // closing ESP32
|
|
||||||
//
|
|
||||||
// END Bluetooth instantiation
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// setup Non Volatile storage
|
|
||||||
// this is very much hardware dependent, we can use the ESP32's FLASH
|
|
||||||
//
|
|
||||||
#ifdef ESP32
|
|
||||||
CESP32HeaterStorage actualNVstore;
|
|
||||||
#else
|
|
||||||
CHeaterStorage actualNVstore; // dummy, for now
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// create reference to CHeaterStorage
|
|
||||||
// via the magic of polymorphism we can use this to access whatever
|
|
||||||
// storage is required for a specific platform in a uniform way
|
|
||||||
CHeaterStorage& NVstore = actualNVstore;
|
|
||||||
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
CBluetoothAbstract& getBluetoothClient()
|
|
||||||
{
|
|
||||||
return Bluetooth;
|
|
||||||
}
|
|
||||||
|
|
||||||
// callback function for Keypad events.
|
|
||||||
// must be an absolute function, cannot be a class member due the "this" element!
|
|
||||||
void parentKeyHandler(uint8_t event)
|
|
||||||
{
|
|
||||||
ScreenManager.keyHandler(event); // call into the Screen Manager
|
|
||||||
}
|
|
||||||
|
|
||||||
void setup() {
|
|
||||||
|
|
||||||
// initialise TelnetSpy (port 23) as well as Serial to 115200
|
|
||||||
// Serial is the usual USB connection to a PC
|
|
||||||
// DO THIS BEFORE WE TRY AND SEND DEBUG INFO!
|
|
||||||
|
|
||||||
DebugPort.setWelcomeMsg("*************************************************\r\n"
|
|
||||||
"* Connected to BTC heater controller debug port *\r\n"
|
|
||||||
"*************************************************\r\n");
|
|
||||||
DebugPort.setBufferSize(8192);
|
|
||||||
DebugPort.begin(115200);
|
|
||||||
|
|
||||||
|
|
||||||
NVstore.init();
|
|
||||||
NVstore.load();
|
|
||||||
|
|
||||||
KeyPad.begin(keyLeft_pin, keyRight_pin, keyCentre_pin, keyUp_pin, keyDown_pin);
|
|
||||||
KeyPad.setCallback(parentKeyHandler);
|
|
||||||
|
|
||||||
// Initialize the rtc object
|
|
||||||
Clock.begin();
|
|
||||||
|
|
||||||
// initialise DS18B20 temperature sensor(s)
|
|
||||||
TempSensor.begin();
|
|
||||||
TempSensor.setWaitForConversion(false);
|
|
||||||
TempSensor.requestTemperatures();
|
|
||||||
lastTemperatureTime = millis();
|
|
||||||
lastAnimationTime = millis();
|
|
||||||
|
|
||||||
ScreenManager.begin();
|
|
||||||
|
|
||||||
#if USE_WIFI == 1
|
|
||||||
|
|
||||||
initWifi(WiFi_TriggerPin, FAILEDSSID, FAILEDPASSWORD);
|
|
||||||
#if USE_OTA == 1
|
|
||||||
initOTA();
|
|
||||||
#endif // USE_OTA
|
|
||||||
#if USE_WEBSERVER == 1
|
|
||||||
initWebServer();
|
|
||||||
#endif // USE_WEBSERVER
|
|
||||||
|
|
||||||
#endif // USE_WIFI
|
|
||||||
|
|
||||||
pinMode(ListenOnlyPin, INPUT_PULLUP); // pin to enable passive mode
|
|
||||||
pinMode(LED_Pin, OUTPUT); // On board LED indicator
|
|
||||||
digitalWrite(LED_Pin, LOW);
|
|
||||||
|
|
||||||
initBlueWireSerial();
|
|
||||||
|
|
||||||
// prepare for first long delay detection
|
|
||||||
lastRxTime = millis();
|
|
||||||
|
|
||||||
TxManage.begin(); // ensure Tx enable pin is setup
|
|
||||||
|
|
||||||
// define defaults should OEM controller be missing
|
|
||||||
DefaultBTCParams.setTemperature_Desired(23);
|
|
||||||
DefaultBTCParams.setTemperature_Actual(22);
|
|
||||||
DefaultBTCParams.Controller.OperatingVoltage = 120;
|
|
||||||
DefaultBTCParams.setPump_Min(1.6f);
|
|
||||||
DefaultBTCParams.setPump_Max(5.5f);
|
|
||||||
DefaultBTCParams.setFan_Min(1680);
|
|
||||||
DefaultBTCParams.setFan_Max(4500);
|
|
||||||
|
|
||||||
bBTconnected = false;
|
|
||||||
Bluetooth.begin();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// main functional loop is based about a state machine approach, waiting for data
|
|
||||||
// to appear upon the blue wire, and marshalling into an appropriate receive buffers
|
|
||||||
// according to the state.
|
|
||||||
|
|
||||||
void loop()
|
|
||||||
{
|
|
||||||
|
|
||||||
float fTemperature;
|
|
||||||
unsigned long timenow = millis();
|
|
||||||
|
|
||||||
DebugPort.handle(); // keep telnet spy alive
|
|
||||||
|
|
||||||
#if USE_WIFI == 1
|
|
||||||
|
|
||||||
doWiFiManager();
|
|
||||||
#if USE_OTA == 1
|
|
||||||
DoOTA();
|
|
||||||
#endif // USE_OTA
|
|
||||||
#if USE_WEBSERVER == 1
|
|
||||||
bHaveWebClient = doWebServer();
|
|
||||||
#endif //USE_WEBSERVER
|
|
||||||
|
|
||||||
#endif // USE_WIFI
|
|
||||||
|
|
||||||
checkDebugCommands();
|
|
||||||
|
|
||||||
KeyPad.update(); // scan keypad - key presses handler via callback functions!
|
|
||||||
|
|
||||||
Bluetooth.check(); // check for Bluetooth activity
|
|
||||||
|
|
||||||
if(Bluetooth.isConnected()) {
|
|
||||||
if(!bBTconnected) {
|
|
||||||
bBTconnected = true;
|
|
||||||
BTModerator.reset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
bBTconnected = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Blue wire data reception
|
|
||||||
// Reads data from the "blue wire" Serial port, (to/from heater)
|
|
||||||
// If an OEM controller exists we will also see it's data frames
|
|
||||||
// Note that the data is read now, then held for later use in the state machine
|
|
||||||
//
|
|
||||||
sRxData BlueWireData;
|
|
||||||
|
|
||||||
if (BlueWireSerial.available()) {
|
|
||||||
// Data is avaialable, read and store it now, use it later
|
|
||||||
// Note that if not in a recognised data receive frame state, the data
|
|
||||||
// will be deliberately lost!
|
|
||||||
BlueWireData.setValue(BlueWireSerial.read()); // read hex byte, store for later use
|
|
||||||
|
|
||||||
lastRxTime = timenow; // tickle last rx time, for rx data timeout purposes
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// calc elapsed time since last rxd byte
|
|
||||||
// used to detect no OEM controller, or the start of an OEM frame sequence
|
|
||||||
unsigned long RxTimeElapsed = timenow - lastRxTime;
|
|
||||||
|
|
||||||
// precautionary state machine action if all 24 bytes were not received
|
|
||||||
// whilst expecting a frame from the blue wire
|
|
||||||
if(RxTimeElapsed > RX_DATA_TIMOUT) {
|
|
||||||
if( CommState.is(CommStates::OEMCtrlRx) ||
|
|
||||||
CommState.is(CommStates::HeaterRx1) ||
|
|
||||||
CommState.is(CommStates::HeaterRx2) ) {
|
|
||||||
|
|
||||||
if(RxTimeElapsed >= moderator) {
|
|
||||||
moderator += 10;
|
|
||||||
DebugPort.print(RxTimeElapsed);
|
|
||||||
DebugPort.print("ms - ");
|
|
||||||
if(CommState.is(CommStates::OEMCtrlRx)) {
|
|
||||||
DebugPort.println("Timeout collecting OEM controller data, returning to Idle State");
|
|
||||||
}
|
|
||||||
else if(CommState.is(CommStates::HeaterRx1)) {
|
|
||||||
DebugPort.println("Timeout collecting OEM heater response data, returning to Idle State");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DebugPort.println("Timeout collecting BTC heater response data, returning to Idle State");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DebugPort.println("Recycling blue wire serial interface");
|
|
||||||
initBlueWireSerial();
|
|
||||||
// CommState.set(CommStates::Idle); // revert to idle mode, after passing thru temperature mode
|
|
||||||
CommState.set(CommStates::TemperatureRead); // revert to idle mode, after passing thru temperature mode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// do our state machine to track the reception and delivery of blue wire data
|
|
||||||
|
|
||||||
long tDelta;
|
|
||||||
switch(CommState.get()) {
|
|
||||||
|
|
||||||
case CommStates::Idle:
|
|
||||||
|
|
||||||
moderator = 50;
|
|
||||||
|
|
||||||
#if RX_LED == 1
|
|
||||||
digitalWrite(LED_Pin, LOW);
|
|
||||||
#endif
|
|
||||||
// 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
|
|
||||||
// The heater always responds to a controller frame, but otherwise never by itself
|
|
||||||
if(RxTimeElapsed >= 970) {
|
|
||||||
// have not seen any receive data for a second.
|
|
||||||
// OEM controller is probably not connected.
|
|
||||||
// Skip state machine immediately to BTC_Tx, sending our own settings.
|
|
||||||
hasOEMController = false;
|
|
||||||
bool isBTCmaster = true;
|
|
||||||
TxManage.PrepareFrame(DefaultBTCParams, isBTCmaster); // use our parameters, and mix in NV storage values
|
|
||||||
TxManage.Start(timenow);
|
|
||||||
CommState.set(CommStates::BTC_Tx);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if SUPPORT_OEM_CONTROLLER == 1
|
|
||||||
if(BlueWireData.available() && (RxTimeElapsed > RX_DATA_TIMOUT+10)) {
|
|
||||||
#ifdef REPORT_OEM_RESYNC
|
|
||||||
DebugPort.print("Re-sync'd with OEM Controller. ");
|
|
||||||
DebugPort.print(RxTimeElapsed);
|
|
||||||
DebugPort.println("ms Idle time.");
|
|
||||||
#endif
|
|
||||||
hasOEMController = true;
|
|
||||||
CommState.set(CommStates::OEMCtrlRx); // we must add this new byte!
|
|
||||||
//
|
|
||||||
// ** IMPORTANT - we must drop through to OEMCtrlRx *NOW* (skipping break) **
|
|
||||||
//
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Clock.update();
|
|
||||||
checkDisplayUpdate();
|
|
||||||
break; // only break if we fail all Idle state tests
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
Clock.update();
|
|
||||||
checkDisplayUpdate();
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
case CommStates::OEMCtrlRx:
|
|
||||||
|
|
||||||
#if RX_LED == 1
|
|
||||||
digitalWrite(LED_Pin, HIGH);
|
|
||||||
#endif
|
|
||||||
// collect OEM controller frame
|
|
||||||
if(BlueWireData.available()) {
|
|
||||||
if(CommState.collectData(OEMCtrlFrame, BlueWireData.getValue()) ) {
|
|
||||||
CommState.set(CommStates::OEMCtrlReport); // collected 24 bytes, move on!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case CommStates::OEMCtrlReport:
|
|
||||||
#if RX_LED == 1
|
|
||||||
digitalWrite(LED_Pin, LOW);
|
|
||||||
#endif
|
|
||||||
// test for valid CRC, abort and restarts Serial1 if invalid
|
|
||||||
if(!validateFrame(OEMCtrlFrame, "OEM")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// filled OEM controller frame, report
|
|
||||||
// echo received OEM controller frame over Bluetooth, using [OEM] header
|
|
||||||
// note that Rotary Knob and LED OEM controllers can flood the Bluetooth
|
|
||||||
// handling at the client side, moderate OEM Bluetooth delivery
|
|
||||||
if(OEMCtrlFrame.elapsedTime() > OEM_TO_BLUETOOTH_MODERATION_TIME) {
|
|
||||||
// Bluetooth.sendFrame("[OEM]", OEMCtrlFrame, TERMINATE_OEM_LINE);
|
|
||||||
OEMCtrlFrame.setTime();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
#if REPORT_SUPPRESSED_OEM_DATA_FRAMES != 0
|
|
||||||
DebugPort.println("Suppressed delivery of OEM frame");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
CommState.set(CommStates::HeaterRx1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case CommStates::HeaterRx1:
|
|
||||||
#if RX_LED == 1
|
|
||||||
digitalWrite(LED_Pin, HIGH);
|
|
||||||
#endif
|
|
||||||
// collect heater frame, always in response to an OEM controller frame
|
|
||||||
if(BlueWireData.available()) {
|
|
||||||
if( CommState.collectData(HeaterFrame1, BlueWireData.getValue()) ) {
|
|
||||||
CommState.set(CommStates::HeaterReport1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case CommStates::HeaterReport1:
|
|
||||||
#if RX_LED == 1
|
|
||||||
digitalWrite(LED_Pin, LOW);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// test for valid CRC, abort and restarts Serial1 if invalid
|
|
||||||
if(!validateFrame(HeaterFrame1, "RX1")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// received heater frame (after controller message), report
|
|
||||||
|
|
||||||
// do some monitoring of the heater state variable
|
|
||||||
// if abnormal transitions, introduce a smart error!
|
|
||||||
// This will also cancel ON/OFF requests if runstate in startup/shutdown
|
|
||||||
SmartError.monitor(HeaterFrame1);
|
|
||||||
|
|
||||||
// echo heater reponse data to Bluetooth client
|
|
||||||
// note that Rotary Knob and LED OEM controllers can flood the Bluetooth
|
|
||||||
// handling at the client side, moderate OEM Bluetooth delivery
|
|
||||||
if(HeaterFrame1.elapsedTime() > OEM_TO_BLUETOOTH_MODERATION_TIME) {
|
|
||||||
// Bluetooth.sendFrame("[HTR]", HeaterFrame1, true);
|
|
||||||
HeaterFrame1.setTime();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
#if REPORT_SUPPRESSED_OEM_DATA_FRAMES != 0
|
|
||||||
DebugPort.println("Suppressed delivery of OEM heater response frame");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if(digitalRead(ListenOnlyPin)) {
|
|
||||||
bool isBTCmaster = false;
|
|
||||||
while(BlueWireSerial.available()) {
|
|
||||||
DebugPort.println("DUMPED ROGUE RX DATA");
|
|
||||||
BlueWireSerial.read();
|
|
||||||
}
|
|
||||||
BlueWireSerial.flush();
|
|
||||||
TxManage.PrepareFrame(OEMCtrlFrame, isBTCmaster); // parrot OEM parameters, but block NV modes
|
|
||||||
TxManage.Start(timenow);
|
|
||||||
CommState.set(CommStates::BTC_Tx);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// CommState.set(CommStates::Idle); // "Listen Only" input is held low, don't send out Tx
|
|
||||||
HeaterData.set(HeaterFrame1, OEMCtrlFrame);
|
|
||||||
// pRxFrame = &HeaterFrame1;
|
|
||||||
// pTxFrame = &OEMCtrlFrame;
|
|
||||||
CommState.set(CommStates::TemperatureRead); // "Listen Only" input is held low, don't send out Tx
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case CommStates::BTC_Tx:
|
|
||||||
// Handle time interval where we send data to the blue wire
|
|
||||||
lastRxTime = timenow; // *we* are pumping onto blue wire, track this activity!
|
|
||||||
if(TxManage.CheckTx(timenow) ) { // monitor progress of our data delivery
|
|
||||||
if(!hasOEMController) {
|
|
||||||
// only convey this frames to Bluetooth when NOT using an OEM controller!
|
|
||||||
// Bluetooth.sendFrame("[BTC]", TxManage.getFrame(), TERMINATE_BTC_LINE); // BTC => Bluetooth Controller :-)
|
|
||||||
// Bluetooth.send( createJSON("RunState", 1.50 ) );
|
|
||||||
}
|
|
||||||
CommState.set(CommStates::HeaterRx2); // then await heater repsonse
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case CommStates::HeaterRx2:
|
|
||||||
#if RX_LED == 1
|
|
||||||
digitalWrite(LED_Pin, HIGH);
|
|
||||||
#endif
|
|
||||||
// collect heater frame, in response to our control frame
|
|
||||||
if(BlueWireData.available()) {
|
|
||||||
#ifdef BADSTARTCHECK
|
|
||||||
if(!CommState.checkValidStart(BlueWireData.getValue())) {
|
|
||||||
DebugPort.println("***** Invalid start of frame - restarting Serial port *****");
|
|
||||||
initBlueWireSerial();
|
|
||||||
CommState.set(CommStates::Idle);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if( CommState.collectData(HeaterFrame2, BlueWireData.getValue()) ) {
|
|
||||||
CommState.set(CommStates::HeaterReport2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if( CommState.collectData(HeaterFrame2, BlueWireData.getValue()) ) {
|
|
||||||
CommState.set(CommStates::HeaterReport2);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case CommStates::HeaterReport2:
|
|
||||||
#if RX_LED == 1
|
|
||||||
digitalWrite(LED_Pin, LOW);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// test for valid CRC, abort and restarts Serial1 if invalid
|
|
||||||
if(!validateFrame(HeaterFrame2, "RX2")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// received heater frame (after our control message), report
|
|
||||||
|
|
||||||
// do some monitoring of the heater state variables
|
|
||||||
// if abnormal transitions, introduce a smart error!
|
|
||||||
SmartError.monitor(HeaterFrame2);
|
|
||||||
|
|
||||||
delay(5);
|
|
||||||
if(!hasOEMController) {
|
|
||||||
// only convey these frames to Bluetooth when NOT using an OEM controller!
|
|
||||||
// Bluetooth.sendFrame("[HTR]", HeaterFrame2, true); // pin not grounded, suppress duplicate to BT
|
|
||||||
}
|
|
||||||
CommState.set(CommStates::TemperatureRead);
|
|
||||||
HeaterData.set(HeaterFrame2, TxManage.getFrame());
|
|
||||||
// pRxFrame = &HeaterFrame2;
|
|
||||||
// pTxFrame = &TxManage.getFrame();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CommStates::TemperatureRead:
|
|
||||||
// update temperature reading,
|
|
||||||
// synchronised with serial reception as interrupts do get disabled in the OneWire library
|
|
||||||
tDelta = timenow - lastTemperatureTime;
|
|
||||||
if(tDelta > TEMPERATURE_INTERVAL) { // maintain a minimum holdoff period
|
|
||||||
lastTemperatureTime += TEMPERATURE_INTERVAL; // reset time to observe temeprature
|
|
||||||
fTemperature = TempSensor.getTempCByIndex(0); // read sensor
|
|
||||||
// initialise filtered temperature upon very first pass
|
|
||||||
if(fFilteredTemperature <= -90) { // avoid FP exactness issues
|
|
||||||
fFilteredTemperature = fTemperature; // prime with initial reading
|
|
||||||
}
|
|
||||||
// exponential mean to stabilse readings
|
|
||||||
fFilteredTemperature = fFilteredTemperature * fAlpha + (1-fAlpha) * fTemperature;
|
|
||||||
DefaultBTCParams.setTemperature_Actual((unsigned char)(fFilteredTemperature + 0.5)); // update [BTC] frame to send
|
|
||||||
TempSensor.requestTemperatures(); // prep sensor for future reading
|
|
||||||
ScreenManager.reqUpdate();
|
|
||||||
}
|
|
||||||
CommState.set(CommStates::Idle);
|
|
||||||
updateJsonBT();
|
|
||||||
break;
|
|
||||||
} // switch(CommState)
|
|
||||||
|
|
||||||
BlueWireData.reset(); // ensure we flush any used data
|
|
||||||
|
|
||||||
} // loop
|
|
||||||
|
|
||||||
void DebugReportFrame(const char* hdr, const CProtocol& Frame, const char* ftr)
|
|
||||||
{
|
|
||||||
DebugPort.print(hdr); // header
|
|
||||||
for(int i=0; i<24; i++) {
|
|
||||||
char str[16];
|
|
||||||
sprintf(str, " %02X", Frame.Data[i]); // build 2 dig hex values
|
|
||||||
DebugPort.print(str); // and print
|
|
||||||
}
|
|
||||||
DebugPort.print(ftr); // footer
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void initBlueWireSerial()
|
|
||||||
{
|
|
||||||
// initialize serial port to interact with the "blue wire"
|
|
||||||
// 25000 baud, Tx and Rx channels of Chinese heater comms interface:
|
|
||||||
// Tx/Rx data to/from heater,
|
|
||||||
// Note special baud rate for Chinese heater controllers
|
|
||||||
#if defined(__arm__) || defined(__AVR__)
|
|
||||||
BlueWireSerial.begin(25000);
|
|
||||||
pinMode(Rx1Pin, INPUT_PULLUP); // required for MUX to work properly
|
|
||||||
#elif ESP32
|
|
||||||
// ESP32
|
|
||||||
BlueWireSerial.begin(25000, SERIAL_8N1, Rx1Pin, Tx1Pin); // need to explicitly specify pins for pin multiplexer!
|
|
||||||
pinMode(Rx1Pin, INPUT_PULLUP); // required for MUX to work properly
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool validateFrame(const CProtocol& frame, const char* name)
|
|
||||||
{
|
|
||||||
if(!frame.verifyCRC()) {
|
|
||||||
// Bad CRC - restart blue wire Serial port
|
|
||||||
DebugPort.print("\007Bad CRC detected for ");
|
|
||||||
DebugPort.print(name);
|
|
||||||
DebugPort.println(" frame - restarting blue wire's serial port");
|
|
||||||
char header[16];
|
|
||||||
sprintf(header, "[CRC_%s]", name);
|
|
||||||
DebugReportFrame(header, frame, "\r\n");
|
|
||||||
initBlueWireSerial();
|
|
||||||
CommState.set(CommStates::Idle);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void requestOn()
|
|
||||||
{
|
|
||||||
TxManage.queueOnRequest();
|
|
||||||
SmartError.reset();
|
|
||||||
Bluetooth.setRefTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
void requestOff()
|
|
||||||
{
|
|
||||||
TxManage.queueOffRequest();
|
|
||||||
SmartError.inhibit();
|
|
||||||
Bluetooth.setRefTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ToggleOnOff()
|
|
||||||
{
|
|
||||||
if(HeaterData.getRunState()) {
|
|
||||||
DebugPort.println("ToggleOnOff: Heater OFF");
|
|
||||||
requestOff();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DebugPort.println("ToggleOnOff: Heater ON");
|
|
||||||
requestOn();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void reqTemp(unsigned char newTemp)
|
|
||||||
{
|
|
||||||
unsigned char max = DefaultBTCParams.getTemperature_Max();
|
|
||||||
unsigned char min = DefaultBTCParams.getTemperature_Min();
|
|
||||||
if(newTemp >= max)
|
|
||||||
newTemp = max;
|
|
||||||
if(newTemp <= min)
|
|
||||||
newTemp = min;
|
|
||||||
|
|
||||||
NVstore.setDesiredTemperature(newTemp);
|
|
||||||
|
|
||||||
ScreenManager.reqUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
void reqTempDelta(int delta)
|
|
||||||
{
|
|
||||||
unsigned char newTemp = getSetTemp() + delta;
|
|
||||||
|
|
||||||
reqTemp(newTemp);
|
|
||||||
}
|
|
||||||
|
|
||||||
int getSetTemp()
|
|
||||||
{
|
|
||||||
return NVstore.getDesiredTemperature();
|
|
||||||
}
|
|
||||||
|
|
||||||
void reqThermoToggle()
|
|
||||||
{
|
|
||||||
setThermostatMode(getThermostatMode() ? 0 : 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setThermostatMode(unsigned char val)
|
|
||||||
{
|
|
||||||
NVstore.setThermostatMode(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool getThermostatMode()
|
|
||||||
{
|
|
||||||
return NVstore.getThermostatMode() != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void checkDisplayUpdate()
|
|
||||||
{
|
|
||||||
// only update OLED when not processing blue wire
|
|
||||||
if(ScreenManager.checkUpdate()) {
|
|
||||||
lastAnimationTime = millis() + 100;
|
|
||||||
ScreenManager.animate();
|
|
||||||
ScreenManager.refresh(); // always refresh post major update
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
long tDelta = millis() - lastAnimationTime;
|
|
||||||
if(tDelta >= 100) {
|
|
||||||
lastAnimationTime = millis() + 100;
|
|
||||||
if(ScreenManager.animate())
|
|
||||||
ScreenManager.refresh();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void reqPumpPrime(bool on)
|
|
||||||
{
|
|
||||||
DefaultBTCParams.setPump_Prime(on);
|
|
||||||
}
|
|
||||||
|
|
||||||
float getActualTemperature()
|
|
||||||
{
|
|
||||||
return fFilteredTemperature;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setPumpMin(float val)
|
|
||||||
{
|
|
||||||
NVstore.setPmin(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setPumpMax(float val)
|
|
||||||
{
|
|
||||||
NVstore.setPmax(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setFanMin(short cVal)
|
|
||||||
{
|
|
||||||
NVstore.setFmin(cVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
void setFanMax(short cVal)
|
|
||||||
{
|
|
||||||
NVstore.setFmax(cVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
void saveNV()
|
|
||||||
{
|
|
||||||
NVstore.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
const CProtocolPackage& getHeaterInfo()
|
|
||||||
{
|
|
||||||
return HeaterData;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isWebClientConnected()
|
|
||||||
{
|
|
||||||
return bHaveWebClient;
|
|
||||||
}
|
|
||||||
|
|
||||||
void checkDebugCommands()
|
|
||||||
{
|
|
||||||
// check for test commands received from PC Over USB
|
|
||||||
if(DebugPort.available()) {
|
|
||||||
static int mode = 0;
|
|
||||||
static int val = 0;
|
|
||||||
|
|
||||||
char rxVal = DebugPort.read();
|
|
||||||
|
|
||||||
bool bSendVal = false;
|
|
||||||
if(isControl(rxVal)) { // "End of Line"
|
|
||||||
String convert(PCline.Line);
|
|
||||||
val = convert.toInt();
|
|
||||||
bSendVal = true;
|
|
||||||
PCline.clear();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if(isDigit(rxVal)) {
|
|
||||||
PCline.append(rxVal);
|
|
||||||
}
|
|
||||||
else if((rxVal == 'p') || (rxVal == 'P')) {
|
|
||||||
DebugPort.println("Test Priming Byte... ");
|
|
||||||
mode = 1;
|
|
||||||
}
|
|
||||||
else if((rxVal == 'g') || (rxVal == 'G')) {
|
|
||||||
DebugPort.println("Test glow power byte... ");
|
|
||||||
mode = 2;
|
|
||||||
}
|
|
||||||
else if((rxVal == 'i') || (rxVal == 'I')) {
|
|
||||||
DebugPort.println("Test fan bytes");
|
|
||||||
mode = 3;
|
|
||||||
}
|
|
||||||
else if(rxVal == '+') {
|
|
||||||
TxManage.queueOnRequest();
|
|
||||||
Bluetooth.setRefTime(); // reset time reference "run time"
|
|
||||||
}
|
|
||||||
else if(rxVal == '-') {
|
|
||||||
TxManage.queueOffRequest();
|
|
||||||
Bluetooth.setRefTime();
|
|
||||||
}
|
|
||||||
else if(rxVal == ']') {
|
|
||||||
val++;
|
|
||||||
bSendVal = true;
|
|
||||||
}
|
|
||||||
else if(rxVal == 'r') {
|
|
||||||
ESP.restart(); // reset the esp
|
|
||||||
}
|
|
||||||
else if(rxVal == '[') {
|
|
||||||
val--;
|
|
||||||
bSendVal = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(bSendVal) {
|
|
||||||
switch(mode) {
|
|
||||||
case 1:
|
|
||||||
DefaultBTCParams.Controller.Prime = val & 0xff; // always 0x32:Thermostat, 0xCD:Fixed
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
DefaultBTCParams.Controller.MinTempRise = val & 0xff; // always 0x05
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
DefaultBTCParams.Controller.Unknown2_MSB = (val >> 8) & 0xff; // always 0x0d
|
|
||||||
DefaultBTCParams.Controller.Unknown2_LSB = (val >> 0) & 0xff; // always 0xac 16bit: "3500" ?? Ignition fan max RPM????
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void updateJsonBT()
|
|
||||||
{
|
|
||||||
char jsonStr[512];
|
|
||||||
|
|
||||||
if(makeJsonString(BTModerator, jsonStr, 512)) {
|
|
||||||
Bluetooth.send( jsonStr );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void resetBTModerator()
|
|
||||||
{
|
|
||||||
BTModerator.reset();
|
|
||||||
}
|
|
|
@ -1,83 +0,0 @@
|
||||||
{
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "Visual Micro",
|
|
||||||
"intelliSenseMode": "msvc-x64",
|
|
||||||
"includePath": [
|
|
||||||
"${projectRoot}..\\SenderTrial2",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries\\Preferences\\src",
|
|
||||||
"${projectRoot}..\\..\\..\\libraries\\WifiManager",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries\\WiFi\\src",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries\\WebServer\\src",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries\\DNSServer\\src",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries\\ArduinoOTA\\src",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries\\Update\\src",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries\\FS\\src",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries\\ESPmDNS\\src",
|
|
||||||
"${projectRoot}..\\..\\..\\libraries\\telnetspy-master",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\..\\..\\Program Files (x86)\\Arduino\\libraries",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\libraries",
|
|
||||||
"${projectRoot}..\\..\\..\\libraries",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\cores\\esp32",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\cores\\esp32\\libb64",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\variants\\doitESP32devkitV1",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\config",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\bluedroid",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\bluedroid\\api",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\app_trace",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\app_update",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\bootloader_support",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\bt",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\driver",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\esp32",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\esp_adc_cal",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\esp_http_client",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\esp-tls",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\ethernet",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\fatfs",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\freertos",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\heap",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\jsmn",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\log",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\mdns",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\mbedtls",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\mbedtls_port",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\newlib",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\nvs_flash",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\openssl",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\spi_flash",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\sdmmc",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\smartconfig_ack",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\spiffs",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\tcpip_adapter",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\ulp",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\vfs",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\wear_levelling",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\xtensa-debug-module",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\coap",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\console",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\expat",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\json",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\lwip",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\nghttp",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\soc",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include\\wpa_supplicant",
|
|
||||||
"${projectRoot}..\\..\\..\\..\\..\\AppData\\Local\\arduino15\\packages\\esp32\\hardware\\esp32\\1.0.0\\tools\\sdk\\include"
|
|
||||||
],
|
|
||||||
"defines": [
|
|
||||||
"__ESP32_ESp32__",
|
|
||||||
"__ESP32_ESP32__",
|
|
||||||
"ESP_PLATFORM",
|
|
||||||
"HAVE_CONFIG_H",
|
|
||||||
"F_CPU=240000000L",
|
|
||||||
"ARDUINO=10805",
|
|
||||||
"ARDUINO_ESP32_DEV",
|
|
||||||
"ARDUINO_ARCH_ESP32",
|
|
||||||
"ESP32",
|
|
||||||
"CORE_DEBUG_LEVEL=0",
|
|
||||||
"__cplusplus=201103L",
|
|
||||||
"_VMICRO_INTELLISENSE"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -23,9 +23,9 @@
|
||||||
#define __BLUETOOTHABSTRACT_H__
|
#define __BLUETOOTHABSTRACT_H__
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "UtilClasses.h"
|
#include "../Utility/UtilClasses.h"
|
||||||
#include "Debugport.h"
|
#include "../Utility/Debugport.h"
|
||||||
#include "helpers.h"
|
#include "../Protocol/helpers.h"
|
||||||
|
|
||||||
class CProtocol;
|
class CProtocol;
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "pins.h"
|
#include "../cfg/pins.h"
|
||||||
#include "Protocol.h"
|
#include "../Protocol/Protocol.h"
|
||||||
#include "debugport.h"
|
#include "../Utility/debugport.h"
|
||||||
#include "BluetoothESP32.h"
|
#include "BluetoothESP32.h"
|
||||||
#include "BTCConfig.h"
|
#include "../cfg/BTCConfig.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,12 +19,12 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pins.h"
|
|
||||||
#include "Protocol.h"
|
|
||||||
#include "debugport.h"
|
|
||||||
#include "BluetoothHC05.h"
|
#include "BluetoothHC05.h"
|
||||||
#include "BTCConfig.h"
|
#include "../cfg/pins.h"
|
||||||
#include "helpers.h"
|
#include "../cfg/BTCConfig.h"
|
||||||
|
#include "../Protocol/Protocol.h"
|
||||||
|
#include "../Protocol/helpers.h"
|
||||||
|
#include "../Utility/DebugPort.h"
|
||||||
|
|
||||||
// Bluetooth access via HC-05 Module, using a UART
|
// Bluetooth access via HC-05 Module, using a UART
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "BluetoothAbstract.h"
|
#include "BluetoothAbstract.h"
|
||||||
#include "Moderator.h"
|
#include "../Utility/Moderator.h"
|
||||||
|
|
||||||
// Define the serial port for access to a HC-05 module.
|
// Define the serial port for access to a HC-05 module.
|
||||||
// This is generally Serial2, but different platforms use
|
// This is generally Serial2, but different platforms use
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
#include "128x64OLED.h"
|
||||||
#include "DebugPort.h"
|
#include "../Utility/DebugPort.h"
|
||||||
|
|
||||||
#define DBG DebugPort.print
|
#define DBG DebugPort.print
|
||||||
#define DBGln DebugPort.println
|
#define DBGln DebugPort.println
|
|
@ -22,10 +22,10 @@
|
||||||
#ifndef __128x64OLED_H__
|
#ifndef __128x64OLED_H__
|
||||||
#define __128x64OLED_H__
|
#define __128x64OLED_H__
|
||||||
|
|
||||||
#include "Adafruit_SH1106.h"
|
#include <Adafruit_SH1106.h>
|
||||||
|
|
||||||
#include "FontTypes.h"
|
#include "fonts/FontTypes.h"
|
||||||
#include "UtilClasses.h"
|
#include "../Utility/UtilClasses.h"
|
||||||
|
|
||||||
class C128x64_OLED : public Adafruit_SH1106 {
|
class C128x64_OLED : public Adafruit_SH1106 {
|
||||||
const FONT_INFO* m_pFontInfo;
|
const FONT_INFO* m_pFontInfo;
|
|
@ -23,10 +23,10 @@
|
||||||
#define __SCREEN_H__
|
#define __SCREEN_H__
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "FontTypes.h"
|
|
||||||
#include "UtilClasses.h"
|
|
||||||
#include "ScreenManager.h"
|
|
||||||
#include "128x64OLED.h"
|
#include "128x64OLED.h"
|
||||||
|
#include "ScreenManager.h"
|
||||||
|
#include "fonts/FontTypes.h"
|
||||||
|
#include "../Utility/UtilClasses.h"
|
||||||
|
|
||||||
class CProtocol;
|
class CProtocol;
|
||||||
|
|
|
@ -20,14 +20,14 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
#include "128x64OLED.h"
|
||||||
#include "MiniFont.h"
|
#include "fonts/MiniFont.h"
|
||||||
#include "Icons.h"
|
#include "fonts/Icons.h"
|
||||||
#include "BluetoothAbstract.h"
|
#include "../Bluetooth/BluetoothAbstract.h"
|
||||||
#include "Screen1.h"
|
#include "Screen1.h"
|
||||||
#include "BTCWifi.h"
|
#include "../Wifi/BTCWifi.h"
|
||||||
#include "KeyPad.h"
|
#include "KeyPad.h"
|
||||||
#include "helpers.h"
|
#include "../Protocol/helpers.h"
|
||||||
#include "Protocol.h"
|
#include "../Protocol/Protocol.h"
|
||||||
|
|
||||||
|
|
||||||
#define MINIFONT miniFontInfo
|
#define MINIFONT miniFontInfo
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
|
|
||||||
class C128x64_OLED;
|
class C128x64_OLED;
|
|
@ -20,12 +20,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
#include "128x64OLED.h"
|
||||||
#include "tahoma16.h"
|
#include "fonts/tahoma16.h"
|
||||||
#include "Icons.h"
|
#include "fonts/Icons.h"
|
||||||
#include "Screen2.h"
|
#include "Screen2.h"
|
||||||
#include "KeyPad.h"
|
#include "KeyPad.h"
|
||||||
#include "helpers.h"
|
#include "../Protocol/helpers.h"
|
||||||
#include "UtilClasses.h"
|
#include "../Utility/UtilClasses.h"
|
||||||
|
|
||||||
|
|
||||||
#define MAXIFONT tahoma_16ptFontInfo
|
#define MAXIFONT tahoma_16ptFontInfo
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
|
|
||||||
class C128x64_OLED;
|
class C128x64_OLED;
|
|
@ -19,10 +19,9 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
|
||||||
#include "KeyPad.h"
|
|
||||||
#include "helpers.h"
|
|
||||||
#include "Screen3.h"
|
#include "Screen3.h"
|
||||||
|
#include "KeyPad.h"
|
||||||
|
#include "../Protocol/helpers.h"
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
|
|
||||||
class C128x64_OLED;
|
class C128x64_OLED;
|
|
@ -19,14 +19,13 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
|
||||||
#include "KeyPad.h"
|
|
||||||
#include "helpers.h"
|
|
||||||
#include "Screen4.h"
|
#include "Screen4.h"
|
||||||
#include "BTCWifi.h"
|
#include "KeyPad.h"
|
||||||
#include "Tahoma8.h"
|
#include "../Protocol/helpers.h"
|
||||||
#include "FranklinGothic.h"
|
#include "../Wifi/BTCWifi.h"
|
||||||
#include "src/fonts/Arial.h"
|
#include "fonts/Tahoma8.h"
|
||||||
|
#include "fonts/FranklinGothic.h"
|
||||||
|
#include "fonts/Arial.h"
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
|
|
||||||
class C128x64_OLED;
|
class C128x64_OLED;
|
|
@ -28,12 +28,11 @@
|
||||||
//
|
//
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
|
||||||
#include "KeyPad.h"
|
|
||||||
#include "helpers.h"
|
|
||||||
#include "Screen5.h"
|
#include "Screen5.h"
|
||||||
#include "BTCWifi.h"
|
#include "KeyPad.h"
|
||||||
#include "src/fonts/Arial.h"
|
#include "../Protocol/helpers.h"
|
||||||
|
#include "../Wifi/BTCWifi.h"
|
||||||
|
#include "fonts/Arial.h"
|
||||||
|
|
||||||
|
|
||||||
CScreen5::CScreen5(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr)
|
CScreen5::CScreen5(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr)
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
|
|
||||||
class C128x64_OLED;
|
class C128x64_OLED;
|
|
@ -28,12 +28,11 @@
|
||||||
//
|
//
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
|
||||||
#include "KeyPad.h"
|
|
||||||
#include "helpers.h"
|
|
||||||
#include "Screen6.h"
|
#include "Screen6.h"
|
||||||
#include "src/fonts/Arial.h"
|
#include "KeyPad.h"
|
||||||
#include "Clock.h"
|
#include "../Protocol/helpers.h"
|
||||||
|
#include "fonts/Arial.h"
|
||||||
|
#include "../RTC/Clock.h"
|
||||||
|
|
||||||
|
|
||||||
CScreen6::CScreen6(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr)
|
CScreen6::CScreen6(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr)
|
|
@ -19,9 +19,9 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
#include "BTCDateTime.h"
|
#include "../RTC/BTCDateTime.h"
|
||||||
|
|
||||||
class C128x64_OLED;
|
class C128x64_OLED;
|
||||||
class CScreenManager;
|
class CScreenManager;
|
|
@ -28,12 +28,11 @@
|
||||||
//
|
//
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
|
||||||
#include "KeyPad.h"
|
|
||||||
#include "helpers.h"
|
|
||||||
#include "Screen7.h"
|
#include "Screen7.h"
|
||||||
#include "NVStorage.h"
|
#include "KeyPad.h"
|
||||||
#include "RTClib.h"
|
#include "../Protocol/helpers.h"
|
||||||
|
#include "../Utility/NVStorage.h"
|
||||||
|
#include <RTClib.h>
|
||||||
|
|
||||||
const char* briefDOW[] = { "S", "M", "T", "W", "T", "F", "S" };
|
const char* briefDOW[] = { "S", "M", "T", "W", "T", "F", "S" };
|
||||||
|
|
|
@ -19,9 +19,9 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
#include "NVStorage.h"
|
#include "../Utility/NVStorage.h"
|
||||||
|
|
||||||
class C128x64_OLED;
|
class C128x64_OLED;
|
||||||
class CScreenManager;
|
class CScreenManager;
|
|
@ -19,12 +19,11 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "128x64OLED.h"
|
|
||||||
#include "KeyPad.h"
|
|
||||||
#include "helpers.h"
|
|
||||||
#include "Screen8.h"
|
#include "Screen8.h"
|
||||||
#include "Tahoma16.h"
|
#include "KeyPad.h"
|
||||||
#include "Clock.h"
|
#include "../Protocol/helpers.h"
|
||||||
|
#include "fonts/Tahoma16.h"
|
||||||
|
#include "../RTC/Clock.h"
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
|
|
||||||
class C128x64_OLED;
|
class C128x64_OLED;
|
|
@ -1,15 +1,14 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "ScreenHeader.h"
|
#include "ScreenHeader.h"
|
||||||
#include "Protocol.h"
|
#include "../Protocol/Protocol.h"
|
||||||
#include "128x64OLED.h"
|
#include "../Protocol/helpers.h"
|
||||||
#include "BTCWifi.h"
|
#include "../Wifi/BTCWifi.h"
|
||||||
#include "BluetoothAbstract.h"
|
#include "../Bluetooth/BluetoothAbstract.h"
|
||||||
#include "Icons.h"
|
#include "../Utility/NVStorage.h"
|
||||||
#include "MiniFont.h"
|
#include "../RTC/Clock.h"
|
||||||
#include "helpers.h"
|
#include "fonts/Arial.h"
|
||||||
#include "NVStorage.h"
|
#include "fonts/Icons.h"
|
||||||
#include "Clock.h"
|
#include "fonts/MiniFont.h"
|
||||||
#include "src/fonts/Arial.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define MINIFONT miniFontInfo
|
#define MINIFONT miniFontInfo
|
|
@ -23,9 +23,9 @@
|
||||||
#define __SCREEN_HEADER_H__
|
#define __SCREEN_HEADER_H__
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "FontTypes.h"
|
|
||||||
#include "UtilClasses.h"
|
|
||||||
#include "Screen.h"
|
#include "Screen.h"
|
||||||
|
#include "../Utility/UtilClasses.h"
|
||||||
|
#include "fonts/FontTypes.h"
|
||||||
|
|
||||||
|
|
||||||
class CScreenHeader : public CScreen {
|
class CScreenHeader : public CScreen {
|
|
@ -1,7 +1,4 @@
|
||||||
#include "ScreenManager.h"
|
#include "ScreenManager.h"
|
||||||
#include <Wire.h>
|
|
||||||
#include "128x64OLED.h"
|
|
||||||
#include "pins.h"
|
|
||||||
#include "Screen1.h"
|
#include "Screen1.h"
|
||||||
#include "Screen2.h"
|
#include "Screen2.h"
|
||||||
#include "Screen3.h"
|
#include "Screen3.h"
|
||||||
|
@ -10,7 +7,9 @@
|
||||||
#include "Screen6.h"
|
#include "Screen6.h"
|
||||||
#include "Screen7.h"
|
#include "Screen7.h"
|
||||||
#include "Screen8.h"
|
#include "Screen8.h"
|
||||||
#include "BTCConfig.h"
|
#include <Wire.h>
|
||||||
|
#include "../cfg/pins.h"
|
||||||
|
#include "../cfg/BTCConfig.h"
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "keypad.h"
|
#include "keypad.h"
|
||||||
#include "pins.h"
|
#include "../cfg/pins.h"
|
||||||
|
|
||||||
CKeyPad::CKeyPad()
|
CKeyPad::CKeyPad()
|
||||||
{
|
{
|
|
@ -22,10 +22,8 @@
|
||||||
#ifndef __BTC_KEYPAD_H__
|
#ifndef __BTC_KEYPAD_H__
|
||||||
#define __BTC_KEYPAD_H__
|
#define __BTC_KEYPAD_H__
|
||||||
|
|
||||||
#include "stdint.h"
|
#include <stdint.h>
|
||||||
|
|
||||||
//void initKeyPad();
|
|
||||||
//uint8_t readKeys();
|
|
||||||
|
|
||||||
const uint8_t key_Left = 0x01;
|
const uint8_t key_Left = 0x01;
|
||||||
const uint8_t key_Right = 0x02;
|
const uint8_t key_Right = 0x02;
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "Protocol.h"
|
#include "Protocol.h"
|
||||||
#include "debugport.h"
|
#include "../Utility/DebugPort.h"
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "TxManage.h"
|
#include "TxManage.h"
|
||||||
#include "NVStorage.h"
|
#include "../Utility/NVStorage.h"
|
||||||
|
|
||||||
extern void DebugReportFrame(const char* hdr, const CProtocol&, const char* ftr);
|
extern void DebugReportFrame(const char* hdr, const CProtocol&, const char* ftr);
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "BTCDateTime.h"
|
#include "BTCDateTime.h"
|
||||||
#include "helpers.h"
|
#include "../Protocol/helpers.h"
|
||||||
|
|
||||||
const char*
|
const char*
|
||||||
BTCDateTime::dowStr() const
|
BTCDateTime::dowStr() const
|
|
@ -22,7 +22,7 @@
|
||||||
#ifndef __BTCDATETIME_H__
|
#ifndef __BTCDATETIME_H__
|
||||||
#define __BTCDATETIME_H__
|
#define __BTCDATETIME_H__
|
||||||
|
|
||||||
#include "RTClib.h"
|
#include <RTClib.h>
|
||||||
|
|
||||||
const char daysOfTheWeek[7][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
|
const char daysOfTheWeek[7][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
|
||||||
|
|
|
@ -22,11 +22,11 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "Clock.h"
|
#include "Clock.h"
|
||||||
#include "BTCDateTime.h"
|
#include "BTCDateTime.h"
|
||||||
#include "Wire.h"
|
#include <Wire.h>
|
||||||
#include "RTClib.h"
|
#include <RTClib.h>
|
||||||
#include "helpers.h"
|
#include "../Protocol/helpers.h"
|
||||||
#include "NVStorage.h"
|
#include "../Utility/NVStorage.h"
|
||||||
#include "DebugPort.h"
|
#include "../Utility/DebugPort.h"
|
||||||
|
|
||||||
|
|
||||||
// create ONE of the RTClib supported real time clock classes
|
// create ONE of the RTClib supported real time clock classes
|
|
@ -23,7 +23,7 @@
|
||||||
#define __BTC_TIMERS_H__
|
#define __BTC_TIMERS_H__
|
||||||
|
|
||||||
#include "BTCDateTime.h"
|
#include "BTCDateTime.h"
|
||||||
#include "BTCConfig.h"
|
#include "../cfg/BTCConfig.h"
|
||||||
|
|
||||||
|
|
||||||
class CClock {
|
class CClock {
|
|
@ -21,9 +21,9 @@
|
||||||
|
|
||||||
#include "BTC_JSON.h"
|
#include "BTC_JSON.h"
|
||||||
#include "DebugPort.h"
|
#include "DebugPort.h"
|
||||||
#include "helpers.h"
|
#include "../Protocol/helpers.h"
|
||||||
#include "NVstorage.h"
|
#include "NVstorage.h"
|
||||||
#include "BTCDateTime.h"
|
#include "../RTC/BTCDateTime.h"
|
||||||
|
|
||||||
|
|
||||||
char defaultJSONstr[64];
|
char defaultJSONstr[64];
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Arduino.h"
|
#include <Arduino.h>
|
||||||
#include "NVStorage.h"
|
#include "NVStorage.h"
|
||||||
#include "DebugPort.h"
|
#include "DebugPort.h"
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "Protocol.h"
|
#include "../Protocol/Protocol.h"
|
||||||
#include "debugport.h"
|
#include "DebugPort.h"
|
||||||
|
|
||||||
|
|
||||||
// a class to track the blue wire receive / transmit states
|
// a class to track the blue wire receive / transmit states
|
|
@ -22,13 +22,13 @@
|
||||||
|
|
||||||
|
|
||||||
#include "BTCWebServer.h"
|
#include "BTCWebServer.h"
|
||||||
#include "DebugPort.h"
|
#include "../Utility/DebugPort.h"
|
||||||
#include "TxManage.h"
|
#include "../Protocol/TxManage.h"
|
||||||
#include "helpers.h"
|
#include "../Protocol/helpers.h"
|
||||||
#include "pins.h"
|
#include "../cfg/pins.h"
|
||||||
#include "Index.h"
|
#include "Index.h"
|
||||||
#include "BTC_JSON.h"
|
#include "../Utility/BTC_JSON.h"
|
||||||
#include "Moderator.h"
|
#include "../Utility/Moderator.h"
|
||||||
|
|
||||||
WebServer server(80);
|
WebServer server(80);
|
||||||
WebSocketsServer webSocket = WebSocketsServer(81);
|
WebSocketsServer webSocket = WebSocketsServer(81);
|
|
@ -35,7 +35,7 @@
|
||||||
#include <WiFiClient.h>
|
#include <WiFiClient.h>
|
||||||
#include <WebServer.h>
|
#include <WebServer.h>
|
||||||
#include <ESPmDNS.h>
|
#include <ESPmDNS.h>
|
||||||
#include "ESPAsyncWebServer.h"
|
#include <ESPAsyncWebServer.h>
|
||||||
#include <WebSocketsServer.h>
|
#include <WebSocketsServer.h>
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
// Should be working - Jimmy C
|
// Should be working - Jimmy C
|
||||||
#include "BTCWifi.h"
|
#include "BTCWifi.h"
|
||||||
#include "DebugPort.h"
|
#include "../Utility/DebugPort.h"
|
||||||
// select which pin will trigger the configuration portal when set to LOW
|
// select which pin will trigger the configuration portal when set to LOW
|
||||||
|
|
||||||
WiFiManager wm;
|
WiFiManager wm;
|
|
@ -20,7 +20,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "BTCota.h"
|
#include "BTCota.h"
|
||||||
#include "debugport.h"
|
|
||||||
|
|
||||||
void initOTA(){
|
void initOTA(){
|
||||||
// ArduinoOTA.setHostname("myesp32");
|
// ArduinoOTA.setHostname("myesp32");
|
|
@ -22,7 +22,7 @@
|
||||||
#include <ArduinoOTA.h>
|
#include <ArduinoOTA.h>
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "BTCWifi.h"
|
#include "BTCWifi.h"
|
||||||
#include "DebugPort.h"
|
#include "../Utility/DebugPort.h"
|
||||||
|
|
||||||
void initOTA();
|
void initOTA();
|
||||||
void DoOTA();
|
void DoOTA();
|
File diff suppressed because it is too large
Load diff
|
@ -1,12 +0,0 @@
|
||||||
#include "../../FontTypes.h"
|
|
||||||
|
|
||||||
// Font data for Arial 8pt
|
|
||||||
extern const uint8_t PROGMEM arial_8ptBitmaps [];
|
|
||||||
extern const FONT_INFO arial_8ptFontInfo;
|
|
||||||
extern const FONT_CHAR_INFO PROGMEM arial_8ptDescriptors[];
|
|
||||||
|
|
||||||
// Font data for Arial 7pt
|
|
||||||
extern const uint8_t PROGMEM arial_7ptBitmaps [];
|
|
||||||
extern const FONT_INFO arial_7ptFontInfo;
|
|
||||||
extern const FONT_CHAR_INFO PROGMEM arial_7ptDescriptors[];
|
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 __FONT_TYPES_H__
|
|
||||||
#define __FONT_TYPES_H__
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#ifdef __AVR__
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
#else
|
|
||||||
#define PROGMEM
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t Width; // Char width in bits
|
|
||||||
uint8_t Height;
|
|
||||||
uint16_t Offset; // Offset into bitmap array bytes)
|
|
||||||
} FONT_CHAR_INFO;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t nBitsPerLine; // Character "height"
|
|
||||||
uint8_t StartChar; // Start character
|
|
||||||
uint8_t EndChar; // End character
|
|
||||||
uint8_t SpaceWidth;
|
|
||||||
const FONT_CHAR_INFO* pCharInfo; // Character descriptor array
|
|
||||||
const unsigned char* pBitmaps; // Character bitmap array
|
|
||||||
} FONT_INFO;
|
|
||||||
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,14 +0,0 @@
|
||||||
#include "FontTypes.h"
|
|
||||||
|
|
||||||
// Font data for Franklin Gothic Medium Cond 8pt
|
|
||||||
extern const uint8_t PROGMEM franklinGothicMediumCond_8ptBitmaps [] ;
|
|
||||||
extern const FONT_CHAR_INFO PROGMEM franklinGothicMediumCond_8ptDescriptors[] ;
|
|
||||||
extern const FONT_INFO franklinGothicMediumCond_8ptFontInfo;
|
|
||||||
|
|
||||||
// Font data for Franklin Gothic Medium Cond 7pt
|
|
||||||
extern const uint8_t PROGMEM franklinGothicMediumCond_7ptBitmaps [];
|
|
||||||
extern const FONT_INFO franklinGothicMediumCond_7ptFontInfo;
|
|
||||||
extern const FONT_CHAR_INFO PROGMEM franklinGothicMediumCond_7ptDescriptors[];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,134 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 <Arduino.h>
|
|
||||||
#include "Icons.h"
|
|
||||||
|
|
||||||
// 'Thermometer', 8x50px
|
|
||||||
const unsigned char bodyThermometerIcon [] PROGMEM = {
|
|
||||||
0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x26, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
|
|
||||||
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x26, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
|
|
||||||
0x24, 0x24, 0x24, 0x24, 0x24, 0x26, 0x24, 0x24, 0x24, 0x24, 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x7e, 0x3c
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'ThermometerActual', 8x50px
|
|
||||||
const unsigned char ambientThermometerIcon [] PROGMEM = {
|
|
||||||
0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x26, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
|
|
||||||
0x24, 0x26, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x26, 0x24, 0x24, 0x24, 0x24,
|
|
||||||
0x24, 0x24, 0x24, 0x24, 0x24, 0x26, 0x24, 0x24, 0x24, 0x24, 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff,
|
|
||||||
0x7e, 0x3c
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// 'ThermoPtr', 3x5px
|
|
||||||
const unsigned char thermoPtr [] PROGMEM = {
|
|
||||||
0x80, 0xc0, 0xe0, 0xc0, 0x80
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'Bluetooth icon', 6x11px
|
|
||||||
const unsigned char BTicon [] PROGMEM = {
|
|
||||||
0x20, 0x30, 0x28, 0xa4, 0x68, 0x30, 0x68, 0xa4, 0x28, 0x30, 0x20,
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'wifiIcon', 13x10px
|
|
||||||
const unsigned char wifiIcon [] PROGMEM = {
|
|
||||||
0x1f, 0xc0, 0x20, 0x20, 0x40, 0x10, 0x8f, 0x88, 0x10, 0x40, 0x20, 0x20,
|
|
||||||
0x07, 0x00, 0x08, 0x80, 0x00, 0x00, 0x02, 0x00
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'wifiInIcon, 5x5px
|
|
||||||
const unsigned char wifiInIcon [] PROGMEM = {
|
|
||||||
0x70, 0x70, 0xf8, 0x70, 0x20
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'wifiOutIcon, 5x5px
|
|
||||||
const unsigned char wifiOutIcon [] PROGMEM = {
|
|
||||||
0x20, 0x70, 0xf8, 0x70, 0x70
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'BatteryIcon', 15x10px
|
|
||||||
const unsigned char BatteryIcon [] PROGMEM = {
|
|
||||||
0x30, 0x18, 0xff, 0xfe, 0x80, 0x02, 0xb6, 0xda, 0xb6, 0xda, 0xb6, 0xda, 0xb6, 0xda, 0xb6, 0xda,
|
|
||||||
0x80, 0x02, 0xff, 0xfe
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'GlowPlugIcon', 16x9px
|
|
||||||
const unsigned char GlowPlugIcon [] PROGMEM = {
|
|
||||||
0x71, 0xc7, 0x0e, 0x38, 0x14, 0x14, 0x12, 0x24, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x0a, 0x28,
|
|
||||||
0x0e, 0x38
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'HeatRise', 17x2px
|
|
||||||
const unsigned char GlowHeatIcon [] PROGMEM = {
|
|
||||||
0x80, 0x00, 0x80, 0x40, 0x01, 0x00
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'Fan3_1a', 16x16px
|
|
||||||
const unsigned char FanIcon1 [] PROGMEM = {
|
|
||||||
0x03, 0xc0, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x03, 0xc0, 0x07, 0xe0, 0x06, 0x60,
|
|
||||||
0x7e, 0x7e, 0x87, 0xe1, 0x87, 0xe1, 0x84, 0x21, 0x84, 0x21, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00
|
|
||||||
};
|
|
||||||
// 'Fan3_2a', 16x16px
|
|
||||||
const unsigned char FanIcon2 [] PROGMEM = {
|
|
||||||
0x00, 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x7b, 0xf8, 0x87, 0xe0, 0x86, 0x60,
|
|
||||||
0x86, 0x60, 0x87, 0xe0, 0x7b, 0xf8, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x78
|
|
||||||
};
|
|
||||||
// 'Fan3_3a', 16x16px
|
|
||||||
const unsigned char FanIcon3 [] PROGMEM = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x84, 0x21, 0x84, 0x21, 0x87, 0xe1, 0x87, 0xe1, 0x7e, 0x7e,
|
|
||||||
0x06, 0x60, 0x07, 0xe0, 0x03, 0xc0, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x03, 0xc0
|
|
||||||
};
|
|
||||||
// 'Fan3_4a', 16x16px
|
|
||||||
const unsigned char FanIcon4 [] PROGMEM = {
|
|
||||||
0x1e, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x1f, 0xde, 0x07, 0xe1, 0x06, 0x61,
|
|
||||||
0x06, 0x61, 0x07, 0xe1, 0x1f, 0xde, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x1e, 0x00
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// 'FuelIcon', 7x12px
|
|
||||||
const unsigned char FuelIcon [] PROGMEM = {
|
|
||||||
0x10, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'Target', 13x13px
|
|
||||||
const unsigned char TargetIcon [] PROGMEM = {
|
|
||||||
0x0f, 0x80, 0x10, 0x40, 0x20, 0x20, 0x47, 0x10, 0x88, 0x88, 0x92, 0x48, 0x97, 0x48, 0x92, 0x48,
|
|
||||||
0x88, 0x88, 0x47, 0x10, 0x20, 0x20, 0x10, 0x40, 0x0f, 0x80
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'repeat', 15x15px
|
|
||||||
const unsigned char repeatIcon [] PROGMEM = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x02, 0x00, 0x02, 0xf0, 0x04, 0xe0, 0x04, 0xe0, 0x08, 0x98, 0x30, 0x07, 0xc0
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'timerID1', 15x15px
|
|
||||||
const unsigned char timerID1Icon [] PROGMEM = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x09, 0x20, 0x11, 0x10, 0x21, 0x08, 0x2d, 0x08, 0x25, 0xe8,
|
|
||||||
0x24, 0x08, 0x24, 0x08, 0x10, 0x10, 0x08, 0x20, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'timerID2', 15x15px
|
|
||||||
const unsigned char timerID2Icon [] PROGMEM = {
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x09, 0x20, 0x11, 0x10, 0x21, 0x08, 0x2d, 0x08, 0x25, 0xe8,
|
|
||||||
0x28, 0x08, 0x2c, 0x08, 0x10, 0x10, 0x08, 0x20, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00
|
|
||||||
};
|
|
|
@ -1,95 +0,0 @@
|
||||||
/*
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// 'Thermometer', 8x50px
|
|
||||||
#define W_BULB_ICON 8
|
|
||||||
#define H_BULB_ICON 50
|
|
||||||
extern const unsigned char ambientThermometerIcon [];
|
|
||||||
extern const unsigned char bodyThermometerIcon [];
|
|
||||||
|
|
||||||
// 'ThermoPtr', 3x5px
|
|
||||||
#define W_PTR_ICON 3
|
|
||||||
#define H_PTR_ICON 5
|
|
||||||
extern const unsigned char thermoPtr [];
|
|
||||||
|
|
||||||
// 'Bluetooth icon', 6x11px
|
|
||||||
#define W_BT_ICON 6
|
|
||||||
#define H_BT_ICON 11
|
|
||||||
extern const unsigned char BTicon [];
|
|
||||||
|
|
||||||
// 'wifiIcon', 13x10px
|
|
||||||
#define W_WIFI_ICON 13
|
|
||||||
#define H_WIFI_ICON 10
|
|
||||||
extern const unsigned char wifiIcon [];
|
|
||||||
|
|
||||||
// 'wifiInIcon', 5x5px
|
|
||||||
#define W_WIFIIN_ICON 5
|
|
||||||
#define H_WIFIIN_ICON 5
|
|
||||||
extern const unsigned char wifiInIcon [];
|
|
||||||
|
|
||||||
// 'wifiOutIcon', 5x5px
|
|
||||||
#define W_WIFIOUT_ICON 5
|
|
||||||
#define H_WIFIOUT_ICON 5
|
|
||||||
extern const unsigned char wifiOutIcon [];
|
|
||||||
|
|
||||||
// 'BatteryIcon', 15x10px
|
|
||||||
#define W_BATT_ICON 15
|
|
||||||
#define H_BATT_ICON 10
|
|
||||||
extern const unsigned char BatteryIcon [];
|
|
||||||
|
|
||||||
// 'GlowPlugIcon', 16x9px
|
|
||||||
#define W_GLOW_ICON 16
|
|
||||||
#define H_GLOW_ICON 9
|
|
||||||
extern const unsigned char GlowPlugIcon [];
|
|
||||||
|
|
||||||
// 'HeatRise', 17x2px
|
|
||||||
#define W_HEAT_ICON 17
|
|
||||||
#define H_HEAT_ICON 2
|
|
||||||
extern const unsigned char GlowHeatIcon [];
|
|
||||||
|
|
||||||
#define W_FAN_ICON 16
|
|
||||||
#define H_FAN_ICON 16
|
|
||||||
// 'Fan3_1a', 16x16px
|
|
||||||
extern const unsigned char FanIcon1 [];
|
|
||||||
// 'Fan3_2a', 16x16px
|
|
||||||
extern const unsigned char FanIcon2 [];
|
|
||||||
// 'Fan3_3a', 16x16px
|
|
||||||
extern const unsigned char FanIcon3 [];
|
|
||||||
// 'Fan3_4a', 16x16px
|
|
||||||
extern const unsigned char FanIcon4 [];
|
|
||||||
|
|
||||||
|
|
||||||
// 'FuelIcon', 7x12px
|
|
||||||
#define W_FUEL_ICON 7
|
|
||||||
#define H_FUEL_ICON 12
|
|
||||||
extern const unsigned char FuelIcon [];
|
|
||||||
|
|
||||||
// 'Target', 13x13px
|
|
||||||
#define W_TARGET_ICON 13
|
|
||||||
#define H_TARGET_ICON 13
|
|
||||||
extern const unsigned char TargetIcon [];
|
|
||||||
|
|
||||||
#define W_TIMER_ICON 15
|
|
||||||
#define H_TIMER_ICON 15
|
|
||||||
extern const unsigned char repeatIcon [];
|
|
||||||
extern const unsigned char timerID1Icon [];
|
|
||||||
extern const unsigned char timerID2Icon [];
|
|
||||||
|
|
|
@ -1,218 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 "MiniFont.h"
|
|
||||||
//
|
|
||||||
// Font data for a 3x5 font
|
|
||||||
// Hand carved by Ray Jones, based upon The Dot Factory font tool output structures
|
|
||||||
//
|
|
||||||
|
|
||||||
// Character bitmaps for a 3x5 font
|
|
||||||
const uint8_t miniFontBitmaps[] PROGMEM =
|
|
||||||
{
|
|
||||||
// @0 '.' (1 pixels wide)
|
|
||||||
0x08, // #
|
|
||||||
|
|
||||||
// @1 '0' (3 pixels wide)
|
|
||||||
0x70, // ###
|
|
||||||
0x88, // # #
|
|
||||||
0x70, // ###
|
|
||||||
|
|
||||||
// @4 '1' (3 pixels wide)
|
|
||||||
0x48, // # #
|
|
||||||
0xf8, // #####
|
|
||||||
0x08, // #
|
|
||||||
|
|
||||||
// @7 '2' (3 pixels wide)
|
|
||||||
0x98, // # ##
|
|
||||||
0xa8, // # # #
|
|
||||||
0x48, // # #
|
|
||||||
|
|
||||||
// @10 '3' (3 pixels wide)
|
|
||||||
0x88, // # #
|
|
||||||
0xa8, // # # #
|
|
||||||
0xf8, // #####
|
|
||||||
|
|
||||||
// @13 '4' (3 pixels wide)
|
|
||||||
0xe0, // ###
|
|
||||||
0x20, // #
|
|
||||||
0xf8, // #####
|
|
||||||
|
|
||||||
// @16 '5' (3 pixels wide)
|
|
||||||
0xe8, // ### #
|
|
||||||
0xa8, // # # #
|
|
||||||
0x90, // # #
|
|
||||||
|
|
||||||
// @19 '6' (3 pixels wide)
|
|
||||||
0x78, // ####
|
|
||||||
0xa8, // # # #
|
|
||||||
0xb8, // # ###
|
|
||||||
|
|
||||||
// @22 '7' (3 pixels wide)
|
|
||||||
0x80, // #
|
|
||||||
0x80, // #
|
|
||||||
0xf8, // #####
|
|
||||||
|
|
||||||
// @25 '8' (3 pixels wide)
|
|
||||||
0xf8, // #####
|
|
||||||
0xa8, // # # #
|
|
||||||
0xF8, // #####
|
|
||||||
|
|
||||||
// @28 '9' (3 pixels wide)
|
|
||||||
0xe8, // ### #
|
|
||||||
0xa8, // # # #
|
|
||||||
0xF0, // ####
|
|
||||||
|
|
||||||
// @31 '`' (2 pixels wide)
|
|
||||||
0xC0, // ##
|
|
||||||
0xC0, // ##
|
|
||||||
|
|
||||||
// @33 'A' (3 pixels wide)
|
|
||||||
0xf8, // #####
|
|
||||||
0xa0, // # #
|
|
||||||
0xf8, // #####
|
|
||||||
|
|
||||||
// @36 'C' (3 pixels wide)
|
|
||||||
0x70, // ###
|
|
||||||
0x88, // # #
|
|
||||||
0x88, // # #
|
|
||||||
|
|
||||||
// @39 'H' (3 pixels wide)
|
|
||||||
0xf8, // #####
|
|
||||||
0x20, // #
|
|
||||||
0xf8, // #####
|
|
||||||
|
|
||||||
// @42 'P' (3 pixels wide)
|
|
||||||
0xf8, // #####
|
|
||||||
0xa0, // # #
|
|
||||||
0xe0, // ###
|
|
||||||
|
|
||||||
// @45 'V' (3 pixels wide)
|
|
||||||
0xf0, // ####
|
|
||||||
0x08, // #
|
|
||||||
0xf0, // ####
|
|
||||||
|
|
||||||
// @48 'W' (3 pixels wide)
|
|
||||||
0xf8, // #####
|
|
||||||
0x10, // #
|
|
||||||
0xf8, // #####
|
|
||||||
|
|
||||||
// @51 'z' (3 pixels wide)
|
|
||||||
0x28, // # #
|
|
||||||
0x38, // ###
|
|
||||||
0x28, // # #
|
|
||||||
};
|
|
||||||
|
|
||||||
// Character descriptors for a 3x5 font
|
|
||||||
// { [Char width in bits], [Char height in bits], [Offset into tahoma_16ptCharBitmaps in bytes] }
|
|
||||||
const FONT_CHAR_INFO miniFontDescriptors[] PROGMEM =
|
|
||||||
{
|
|
||||||
{1, 5, 0}, // '.'
|
|
||||||
{0, 0, 0}, // '/'
|
|
||||||
{3, 5, 1}, // '0'
|
|
||||||
{3, 5, 4}, // '1'
|
|
||||||
{3, 5, 7}, // '2'
|
|
||||||
{3, 5, 10}, // '3'
|
|
||||||
{3, 5, 13}, // '4'
|
|
||||||
{3, 5, 16}, // '5'
|
|
||||||
{3, 5, 19}, // '6'
|
|
||||||
{3, 5, 22}, // '7'
|
|
||||||
{3, 5, 25}, // '8'
|
|
||||||
{3, 5, 28}, // '9'
|
|
||||||
{0, 0, 0}, // ':'
|
|
||||||
{0, 0, 0}, // ';'
|
|
||||||
{0, 0, 0}, // '<'
|
|
||||||
{0, 0, 0}, // '='
|
|
||||||
{0, 0, 0}, // '>'
|
|
||||||
{0, 0, 0}, // '?'
|
|
||||||
{0, 0, 0}, // '@'
|
|
||||||
{3, 5, 33}, // 'A'
|
|
||||||
{0, 0, 0}, // 'B'
|
|
||||||
{3, 5, 36}, // 'C'
|
|
||||||
{0, 0, 0}, // 'D'
|
|
||||||
{0, 0, 0}, // 'E'
|
|
||||||
{0, 0, 0}, // 'F'
|
|
||||||
{0, 0, 0}, // 'G'
|
|
||||||
{3, 5, 39}, // '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'
|
|
||||||
{3, 5, 42}, // 'P'
|
|
||||||
{0, 0, 0}, // 'Q'
|
|
||||||
{0, 0, 0}, // 'R'
|
|
||||||
{0, 0, 0}, // 'S'
|
|
||||||
{0, 0, 0}, // 'T'
|
|
||||||
{0, 0, 0}, // 'U'
|
|
||||||
{3, 5, 45}, // 'V'
|
|
||||||
{3, 5, 48}, // '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}, // '_'
|
|
||||||
{2, 5, 31}, // '`' use for degree symbol
|
|
||||||
{0, 0, 0}, // 'a'
|
|
||||||
{0, 0, 0}, // 'b'
|
|
||||||
{0, 0, 0}, // 'c'
|
|
||||||
{0, 0, 0}, // 'd'
|
|
||||||
{0, 0, 0}, // 'e'
|
|
||||||
{0, 0, 0}, // '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'
|
|
||||||
{3, 5, 51}, // 'z'
|
|
||||||
};
|
|
||||||
|
|
||||||
// Font information for Mini Font, a 3x5 font
|
|
||||||
// easier to leave in RAM, not that big anyway
|
|
||||||
const FONT_INFO miniFontInfo =
|
|
||||||
{
|
|
||||||
5, // Character height
|
|
||||||
'.', // Start character
|
|
||||||
'z', // End character
|
|
||||||
1, // Width, in pixels, of space character
|
|
||||||
miniFontDescriptors, // Character descriptor array
|
|
||||||
miniFontBitmaps, // Character bitmap array
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 "FontTypes.h"
|
|
||||||
|
|
||||||
// Font data for Mini Font, a 3x5 font
|
|
||||||
extern const uint8_t miniFontBitmaps[] PROGMEM; // stored in program flash memory
|
|
||||||
extern const FONT_CHAR_INFO miniFontDescriptors[] PROGMEM; // stored in program flash memory
|
|
||||||
extern const FONT_INFO miniFontInfo;
|
|
||||||
|
|
|
@ -1,602 +0,0 @@
|
||||||
#include "OCRfont.h"
|
|
||||||
//
|
|
||||||
// Font data for OCR A Extended 8pt
|
|
||||||
//
|
|
||||||
// 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): None (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 [X] 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
|
|
||||||
//
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Character bitmaps for OCR A Extended 8pt
|
|
||||||
const uint8_t oCRAExtended_8ptBitmaps[] PROGMEM =
|
|
||||||
{
|
|
||||||
// @0 ' ' (2 pixels wide)
|
|
||||||
0x00, 0x00, //
|
|
||||||
0x00, 0x00, //
|
|
||||||
|
|
||||||
// @4 ',' (3 pixels wide)
|
|
||||||
0x80, // #
|
|
||||||
0x80, // #
|
|
||||||
0xE0, // ###
|
|
||||||
|
|
||||||
// @7 '.' (1 pixels wide)
|
|
||||||
0x80, // #
|
|
||||||
|
|
||||||
// @8 '/' (5 pixels wide)
|
|
||||||
0x02, // #
|
|
||||||
0x0C, // ##
|
|
||||||
0x10, // #
|
|
||||||
0x60, // ##
|
|
||||||
0x80, // #
|
|
||||||
|
|
||||||
// @13 '0' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x82, // # #
|
|
||||||
0x82, // # #
|
|
||||||
0x82, // # #
|
|
||||||
0xFE, // #######
|
|
||||||
|
|
||||||
// @18 '1' (5 pixels wide)
|
|
||||||
0x82, // # #
|
|
||||||
0x82, // # #
|
|
||||||
0xFE, // #######
|
|
||||||
0x02, // #
|
|
||||||
0x0E, // ###
|
|
||||||
|
|
||||||
// @23 '2' (5 pixels wide)
|
|
||||||
0x9E, // # ####
|
|
||||||
0x92, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0xF2, // #### #
|
|
||||||
|
|
||||||
// @28 '3' (5 pixels wide)
|
|
||||||
0x82, // # #
|
|
||||||
0x92, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0xEE, // ### ###
|
|
||||||
|
|
||||||
// @33 '4' (4 pixels wide)
|
|
||||||
0xF8, // #####
|
|
||||||
0x08, // #
|
|
||||||
0x08, // #
|
|
||||||
0x7E, // ######
|
|
||||||
|
|
||||||
// @37 '5' (5 pixels wide)
|
|
||||||
0x02, // #
|
|
||||||
0xF2, // #### #
|
|
||||||
0x92, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0x9E, // # ####
|
|
||||||
|
|
||||||
// @42 '6' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x0A, // # #
|
|
||||||
0x0A, // # #
|
|
||||||
0x0A, // # #
|
|
||||||
0x0E, // ###
|
|
||||||
|
|
||||||
// @47 '7' (5 pixels wide)
|
|
||||||
0x80, // #
|
|
||||||
0x80, // #
|
|
||||||
0x8E, // # ###
|
|
||||||
0x90, // # #
|
|
||||||
0xE0, // ###
|
|
||||||
|
|
||||||
// @52 '8' (5 pixels wide)
|
|
||||||
0x1E, // ####
|
|
||||||
0xF2, // #### #
|
|
||||||
0x92, // # # #
|
|
||||||
0xF2, // #### #
|
|
||||||
0x1E, // ####
|
|
||||||
|
|
||||||
// @57 '9' (5 pixels wide)
|
|
||||||
0xE0, // ###
|
|
||||||
0xA0, // # #
|
|
||||||
0xA0, // # #
|
|
||||||
0xA0, // # #
|
|
||||||
0xFE, // #######
|
|
||||||
|
|
||||||
// @62 ':' (1 pixels wide)
|
|
||||||
0xA0, // # #
|
|
||||||
|
|
||||||
// @63 'A' (5 pixels wide)
|
|
||||||
0x06, // ##
|
|
||||||
0x3C, // ####
|
|
||||||
0xC4, // ## #
|
|
||||||
0x3C, // ####
|
|
||||||
0x06, // ##
|
|
||||||
|
|
||||||
// @68 'B' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x92, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0x6C, // ## ##
|
|
||||||
|
|
||||||
// @73 'C' (5 pixels wide)
|
|
||||||
0x38, // ###
|
|
||||||
0x44, // # #
|
|
||||||
0x82, // # #
|
|
||||||
0x82, // # #
|
|
||||||
0x82, // # #
|
|
||||||
|
|
||||||
// @78 'D' (5 pixels wide)
|
|
||||||
0x82, // # #
|
|
||||||
0xFE, // #######
|
|
||||||
0x82, // # #
|
|
||||||
0x44, // # #
|
|
||||||
0x38, // ###
|
|
||||||
|
|
||||||
// @83 'E' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x92, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0x82, // # #
|
|
||||||
0x82, // # #
|
|
||||||
|
|
||||||
// @88 'F' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0xA0, // # #
|
|
||||||
0xA0, // # #
|
|
||||||
0xA0, // # #
|
|
||||||
0x80, // #
|
|
||||||
|
|
||||||
// @93 'G' (5 pixels wide)
|
|
||||||
0x3E, // #####
|
|
||||||
0x42, // # #
|
|
||||||
0x8A, // # # #
|
|
||||||
0x8A, // # # #
|
|
||||||
0x8E, // # ###
|
|
||||||
|
|
||||||
// @98 'H' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x10, // #
|
|
||||||
0x10, // #
|
|
||||||
0x10, // #
|
|
||||||
0xFE, // #######
|
|
||||||
|
|
||||||
// @103 'I' (5 pixels wide)
|
|
||||||
0x82, // # #
|
|
||||||
0x82, // # #
|
|
||||||
0xFE, // #######
|
|
||||||
0x82, // # #
|
|
||||||
0x82, // # #
|
|
||||||
|
|
||||||
// @108 'J' (4 pixels wide)
|
|
||||||
0x0C, // ##
|
|
||||||
0x02, // #
|
|
||||||
0x02, // #
|
|
||||||
0xFC, // ######
|
|
||||||
|
|
||||||
// @112 'K' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x10, // #
|
|
||||||
0x28, // # #
|
|
||||||
0x44, // # #
|
|
||||||
0x82, // # #
|
|
||||||
|
|
||||||
// @117 'L' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x02, // #
|
|
||||||
0x02, // #
|
|
||||||
0x02, // #
|
|
||||||
0x02, // #
|
|
||||||
|
|
||||||
// @122 'M' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0xC0, // ##
|
|
||||||
0x20, // #
|
|
||||||
0xC0, // ##
|
|
||||||
0xFE, // #######
|
|
||||||
|
|
||||||
// @127 'N' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x60, // ##
|
|
||||||
0x10, // #
|
|
||||||
0x0C, // ##
|
|
||||||
0xFE, // #######
|
|
||||||
|
|
||||||
// @132 'O' (5 pixels wide)
|
|
||||||
0x38, // ###
|
|
||||||
0x44, // # #
|
|
||||||
0x82, // # #
|
|
||||||
0x44, // # #
|
|
||||||
0x38, // ###
|
|
||||||
|
|
||||||
// @137 'P' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x90, // # #
|
|
||||||
0x90, // # #
|
|
||||||
0x90, // # #
|
|
||||||
0x60, // ##
|
|
||||||
|
|
||||||
// @142 'Q' (5 pixels wide)
|
|
||||||
0x3E, // #####
|
|
||||||
0x42, // # #
|
|
||||||
0x4C, // # ##
|
|
||||||
0x8E, // # ###
|
|
||||||
0xFA, // ##### #
|
|
||||||
|
|
||||||
// @147 'R' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0xA0, // # #
|
|
||||||
0xB0, // # ##
|
|
||||||
0xAC, // # # ##
|
|
||||||
0x42, // # #
|
|
||||||
|
|
||||||
// @152 'S' (5 pixels wide)
|
|
||||||
0x44, // # #
|
|
||||||
0xA2, // # # #
|
|
||||||
0x92, // # # #
|
|
||||||
0x8A, // # # #
|
|
||||||
0x46, // # ##
|
|
||||||
|
|
||||||
// @157 'T' (5 pixels wide)
|
|
||||||
0xC0, // ##
|
|
||||||
0x80, // #
|
|
||||||
0xFE, // #######
|
|
||||||
0x80, // #
|
|
||||||
0xC0, // ##
|
|
||||||
|
|
||||||
// @162 'U' (5 pixels wide)
|
|
||||||
0xFC, // ######
|
|
||||||
0x02, // #
|
|
||||||
0x02, // #
|
|
||||||
0x02, // #
|
|
||||||
0xFC, // ######
|
|
||||||
|
|
||||||
// @167 'V' (5 pixels wide)
|
|
||||||
0xE0, // ###
|
|
||||||
0x18, // ##
|
|
||||||
0x06, // ##
|
|
||||||
0x18, // ##
|
|
||||||
0xE0, // ###
|
|
||||||
|
|
||||||
// @172 'W' (5 pixels wide)
|
|
||||||
0xFC, // ######
|
|
||||||
0x02, // #
|
|
||||||
0x3C, // ####
|
|
||||||
0x02, // #
|
|
||||||
0xFC, // ######
|
|
||||||
|
|
||||||
// @177 'X' (5 pixels wide)
|
|
||||||
0x82, // # #
|
|
||||||
0x6C, // ## ##
|
|
||||||
0x10, // #
|
|
||||||
0x6C, // ## ##
|
|
||||||
0x82, // # #
|
|
||||||
|
|
||||||
// @182 'Y' (5 pixels wide)
|
|
||||||
0xC0, // ##
|
|
||||||
0x20, // #
|
|
||||||
0x1E, // ####
|
|
||||||
0x20, // #
|
|
||||||
0xC0, // ##
|
|
||||||
|
|
||||||
// @187 'Z' (5 pixels wide)
|
|
||||||
0x82, // # #
|
|
||||||
0x8E, // # ###
|
|
||||||
0x92, // # # #
|
|
||||||
0xE2, // ### #
|
|
||||||
0x82, // # #
|
|
||||||
|
|
||||||
// @192 '\' (5 pixels wide)
|
|
||||||
0x80, // #
|
|
||||||
0x60, // ##
|
|
||||||
0x10, // #
|
|
||||||
0x0C, // ##
|
|
||||||
0x02, // #
|
|
||||||
|
|
||||||
// @197 '`' (3 pixels wide)
|
|
||||||
0x80, // #
|
|
||||||
0x80, // #
|
|
||||||
0x40, // #
|
|
||||||
|
|
||||||
// @200 'a' (5 pixels wide)
|
|
||||||
0x10, // #
|
|
||||||
0xA8, // # # #
|
|
||||||
0xA8, // # # #
|
|
||||||
0xA8, // # # #
|
|
||||||
0x78, // ####
|
|
||||||
|
|
||||||
// @205 'b' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x14, // # #
|
|
||||||
0x22, // # #
|
|
||||||
0x22, // # #
|
|
||||||
0x1C, // ###
|
|
||||||
|
|
||||||
// @210 'c' (5 pixels wide)
|
|
||||||
0x70, // ###
|
|
||||||
0x88, // # #
|
|
||||||
0x88, // # #
|
|
||||||
0x88, // # #
|
|
||||||
0x88, // # #
|
|
||||||
|
|
||||||
// @215 'd' (5 pixels wide)
|
|
||||||
0x1C, // ###
|
|
||||||
0x22, // # #
|
|
||||||
0x22, // # #
|
|
||||||
0x14, // # #
|
|
||||||
0xFE, // #######
|
|
||||||
|
|
||||||
// @220 'e' (5 pixels wide)
|
|
||||||
0x70, // ###
|
|
||||||
0xA8, // # # #
|
|
||||||
0xA8, // # # #
|
|
||||||
0xA8, // # # #
|
|
||||||
0x68, // ## #
|
|
||||||
|
|
||||||
// @225 'f' (4 pixels wide)
|
|
||||||
0x20, // #
|
|
||||||
0x7E, // ######
|
|
||||||
0xA0, // # #
|
|
||||||
0x80, // #
|
|
||||||
|
|
||||||
// @229 'g' (5 pixels wide)
|
|
||||||
0x72, // ### #
|
|
||||||
0x8A, // # # #
|
|
||||||
0x8A, // # # #
|
|
||||||
0x52, // # # #
|
|
||||||
0xFC, // ######
|
|
||||||
|
|
||||||
// @234 'h' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x10, // #
|
|
||||||
0x20, // #
|
|
||||||
0x20, // #
|
|
||||||
0x1E, // ####
|
|
||||||
|
|
||||||
// @239 'i' (3 pixels wide)
|
|
||||||
0x22, // # #
|
|
||||||
0xBE, // # #####
|
|
||||||
0x02, // #
|
|
||||||
|
|
||||||
// @242 'j' (4 pixels wide)
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x20, 0x80, // # #
|
|
||||||
0x20, 0x80, // # #
|
|
||||||
0xBF, 0x00, // # ######
|
|
||||||
|
|
||||||
// @250 'k' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x08, // #
|
|
||||||
0x14, // # #
|
|
||||||
0x14, // # #
|
|
||||||
0x22, // # #
|
|
||||||
|
|
||||||
// @255 'l' (3 pixels wide)
|
|
||||||
0x82, // # #
|
|
||||||
0xFE, // #######
|
|
||||||
0x02, // #
|
|
||||||
|
|
||||||
// @258 'm' (5 pixels wide)
|
|
||||||
0xF8, // #####
|
|
||||||
0x80, // #
|
|
||||||
0x78, // ####
|
|
||||||
0x80, // #
|
|
||||||
0x78, // ####
|
|
||||||
|
|
||||||
// @263 'n' (5 pixels wide)
|
|
||||||
0xF8, // #####
|
|
||||||
0x40, // #
|
|
||||||
0x80, // #
|
|
||||||
0x80, // #
|
|
||||||
0x78, // ####
|
|
||||||
|
|
||||||
// @268 'o' (5 pixels wide)
|
|
||||||
0x70, // ###
|
|
||||||
0x88, // # #
|
|
||||||
0x88, // # #
|
|
||||||
0x88, // # #
|
|
||||||
0x70, // ###
|
|
||||||
|
|
||||||
// @273 'p' (5 pixels wide)
|
|
||||||
0xFE, // #######
|
|
||||||
0x50, // # #
|
|
||||||
0x88, // # #
|
|
||||||
0x88, // # #
|
|
||||||
0x70, // ###
|
|
||||||
|
|
||||||
// @278 'q' (5 pixels wide)
|
|
||||||
0x70, // ###
|
|
||||||
0x88, // # #
|
|
||||||
0x88, // # #
|
|
||||||
0x50, // # #
|
|
||||||
0xFE, // #######
|
|
||||||
|
|
||||||
// @283 'r' (5 pixels wide)
|
|
||||||
0xF8, // #####
|
|
||||||
0x40, // #
|
|
||||||
0x80, // #
|
|
||||||
0x80, // #
|
|
||||||
0x40, // #
|
|
||||||
|
|
||||||
// @288 's' (5 pixels wide)
|
|
||||||
0x48, // # #
|
|
||||||
0xA8, // # # #
|
|
||||||
0xA8, // # # #
|
|
||||||
0xA8, // # # #
|
|
||||||
0x90, // # #
|
|
||||||
|
|
||||||
// @293 't' (5 pixels wide)
|
|
||||||
0x20, // #
|
|
||||||
0xFC, // ######
|
|
||||||
0x22, // # #
|
|
||||||
0x22, // # #
|
|
||||||
0x04, // #
|
|
||||||
|
|
||||||
// @298 'u' (5 pixels wide)
|
|
||||||
0xF0, // ####
|
|
||||||
0x08, // #
|
|
||||||
0x08, // #
|
|
||||||
0x10, // #
|
|
||||||
0xF8, // #####
|
|
||||||
|
|
||||||
// @303 'v' (5 pixels wide)
|
|
||||||
0xC0, // ##
|
|
||||||
0x30, // ##
|
|
||||||
0x08, // #
|
|
||||||
0x30, // ##
|
|
||||||
0xC0, // ##
|
|
||||||
|
|
||||||
// @308 'w' (5 pixels wide)
|
|
||||||
0xF0, // ####
|
|
||||||
0x08, // #
|
|
||||||
0x70, // ###
|
|
||||||
0x08, // #
|
|
||||||
0xF0, // ####
|
|
||||||
|
|
||||||
// @313 'x' (5 pixels wide)
|
|
||||||
0x88, // # #
|
|
||||||
0x50, // # #
|
|
||||||
0x20, // #
|
|
||||||
0x50, // # #
|
|
||||||
0x88, // # #
|
|
||||||
|
|
||||||
// @318 'y' (4 pixels wide)
|
|
||||||
0xE2, // ### #
|
|
||||||
0x1E, // ####
|
|
||||||
0x18, // ##
|
|
||||||
0xE0, // ###
|
|
||||||
|
|
||||||
// @322 'z' (5 pixels wide)
|
|
||||||
0x88, // # #
|
|
||||||
0x98, // # ##
|
|
||||||
0xA8, // # # #
|
|
||||||
0xC8, // ## #
|
|
||||||
0x88, // # #
|
|
||||||
};
|
|
||||||
|
|
||||||
// Character descriptors for OCR A Extended 8pt
|
|
||||||
// { [Char width in bits], [Offset into oCRAExtended_8ptCharBitmaps in bytes] }
|
|
||||||
const FONT_CHAR_INFO oCRAExtended_8ptDescriptors[] PROGMEM =
|
|
||||||
{
|
|
||||||
{1, 7, 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}, // +
|
|
||||||
{3, 3, 4}, // ,
|
|
||||||
{0, 0, 0}, // -
|
|
||||||
{1, 1, 7}, // .
|
|
||||||
{5, 7, 8}, // /
|
|
||||||
{5, 7, 13}, // 0
|
|
||||||
{5, 7, 18}, // 1
|
|
||||||
{5, 7, 23}, // 2
|
|
||||||
{5, 7, 28}, // 3
|
|
||||||
{4, 7, 33}, // 4
|
|
||||||
{5, 7, 37}, // 5
|
|
||||||
{5, 7, 42}, // 6
|
|
||||||
{5, 7, 47}, // 7
|
|
||||||
{5, 7, 52}, // 8
|
|
||||||
{5, 7, 57}, // 9
|
|
||||||
{1, 3, 62}, // :
|
|
||||||
{0, 0, 0}, // ;
|
|
||||||
{0, 0, 0}, // <
|
|
||||||
{0, 0, 0}, // =
|
|
||||||
{0, 0, 0}, // >
|
|
||||||
{0, 0, 0}, // ?
|
|
||||||
{0, 0, 0}, // @
|
|
||||||
{5, 7, 63}, // A
|
|
||||||
{5, 7, 68}, // B
|
|
||||||
{5, 7, 73}, // C
|
|
||||||
{5, 7, 78}, // D
|
|
||||||
{5, 7, 83}, // E
|
|
||||||
{5, 7, 88}, // F
|
|
||||||
{5, 7, 93}, // G
|
|
||||||
{5, 7, 98}, // H
|
|
||||||
{5, 7, 103}, // I
|
|
||||||
{4, 7, 108}, // J
|
|
||||||
{5, 7, 112}, // K
|
|
||||||
{5, 7, 117}, // L
|
|
||||||
{5, 7, 122}, // M
|
|
||||||
{5, 7, 127}, // N
|
|
||||||
{5, 7, 132}, // O
|
|
||||||
{5, 7, 137}, // P
|
|
||||||
{5, 7, 142}, // Q
|
|
||||||
{5, 7, 147}, // R
|
|
||||||
{5, 7, 152}, // S
|
|
||||||
{5, 7, 157}, // T
|
|
||||||
{5, 7, 162}, // U
|
|
||||||
{5, 7, 167}, // V
|
|
||||||
{5, 7, 172}, // W
|
|
||||||
{5, 7, 177}, // X
|
|
||||||
{5, 7, 182}, // Y
|
|
||||||
{5, 7, 187}, // Z
|
|
||||||
{0, 0, 0}, // [
|
|
||||||
{5, 7, 192}, // \ .
|
|
||||||
{0, 0, 0}, // ]
|
|
||||||
{0, 0, 0}, // ^
|
|
||||||
{0, 0, 0}, // _
|
|
||||||
{3, 2, 197}, // `
|
|
||||||
{5, 5, 200}, // a
|
|
||||||
{5, 7, 205}, // b
|
|
||||||
{5, 5, 210}, // c
|
|
||||||
{5, 7, 215}, // d
|
|
||||||
{5, 5, 220}, // e
|
|
||||||
{4, 7, 225}, // f
|
|
||||||
{5, 7, 229}, // g
|
|
||||||
{5, 7, 234}, // h
|
|
||||||
{3, 7, 239}, // i
|
|
||||||
{4, 9, 242}, // j
|
|
||||||
{5, 7, 250}, // k
|
|
||||||
{3, 7, 255}, // l
|
|
||||||
{5, 5, 258}, // m
|
|
||||||
{5, 5, 263}, // n
|
|
||||||
{5, 5, 268}, // o
|
|
||||||
{5, 7, 273}, // p
|
|
||||||
{5, 7, 278}, // q
|
|
||||||
{5, 5, 283}, // r
|
|
||||||
{5, 5, 288}, // s
|
|
||||||
{5, 7, 293}, // t
|
|
||||||
{5, 5, 298}, // u
|
|
||||||
{5, 5, 303}, // v
|
|
||||||
{5, 5, 308}, // w
|
|
||||||
{5, 5, 313}, // x
|
|
||||||
{4, 7, 318}, // y
|
|
||||||
{5, 5, 322}, // z
|
|
||||||
};
|
|
||||||
|
|
||||||
// Font information for OCR A Extended 8pt
|
|
||||||
const FONT_INFO oCRAExtended_8ptFontInfo =
|
|
||||||
{
|
|
||||||
12, // Character height
|
|
||||||
' ', // Start character
|
|
||||||
'z', // End character
|
|
||||||
1, // Width, in pixels, of space character
|
|
||||||
oCRAExtended_8ptDescriptors, // Character descriptor array
|
|
||||||
oCRAExtended_8ptBitmaps, // Character bitmap array
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
#include "FontTypes.h"
|
|
||||||
|
|
||||||
// Font data for OCR A Extended 8pt
|
|
||||||
extern const uint8_t PROGMEM oCRAExtended_8ptBitmaps [];
|
|
||||||
extern const FONT_INFO oCRAExtended_8ptFontInfo;
|
|
||||||
extern const FONT_CHAR_INFO PROGMEM oCRAExtended_8ptDescriptors[];
|
|
||||||
|
|
||||||
|
|
|
@ -1,292 +0,0 @@
|
||||||
//
|
|
||||||
// Font data for Tahoma 16pt
|
|
||||||
//
|
|
||||||
// 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): None (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 "tahoma16.h"
|
|
||||||
|
|
||||||
// Character bitmaps for Tahoma 16pt
|
|
||||||
const uint8_t tahoma_16ptBitmaps[] PROGMEM =
|
|
||||||
{
|
|
||||||
// @0 '.' (4 pixels wide)
|
|
||||||
0x00, 0x0F, // ####
|
|
||||||
0x00, 0x0F, // ####
|
|
||||||
0x00, 0x0F, // ####
|
|
||||||
0x00, 0x0F, // ####
|
|
||||||
|
|
||||||
// @8 '0' (11 pixels wide)
|
|
||||||
0x0F, 0xF0, // ########
|
|
||||||
0x3F, 0xFC, // ############
|
|
||||||
0x7F, 0xFE, // ##############
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0xF0, 0x0F, // #### ####
|
|
||||||
0xE0, 0x07, // ### ###
|
|
||||||
0xF0, 0x0F, // #### ####
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0x7F, 0xFE, // ##############
|
|
||||||
0x3F, 0xFC, // ############
|
|
||||||
0x0F, 0xF0, // ########
|
|
||||||
|
|
||||||
// @30 '1' (10 pixels wide)
|
|
||||||
0x38, 0x07, // ### ###
|
|
||||||
0x38, 0x07, // ### ###
|
|
||||||
0x38, 0x07, // ### ###
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0x00, 0x07, // ###
|
|
||||||
0x00, 0x07, // ###
|
|
||||||
0x00, 0x07, // ###
|
|
||||||
|
|
||||||
// @50 '2' (11 pixels wide)
|
|
||||||
0x70, 0x07, // ### ###
|
|
||||||
0xE0, 0x0F, // ### ####
|
|
||||||
0xE0, 0x1F, // ### #####
|
|
||||||
0xE0, 0x3F, // ### ######
|
|
||||||
0xE0, 0x7F, // ### #######
|
|
||||||
0xF1, 0xF7, // #### ##### ###
|
|
||||||
0xFF, 0xE7, // ########### ###
|
|
||||||
0x7F, 0xC7, // ######### ###
|
|
||||||
0x7F, 0x87, // ######## ###
|
|
||||||
0x3E, 0x07, // ##### ###
|
|
||||||
0x00, 0x07, // ###
|
|
||||||
|
|
||||||
// @72 '3' (11 pixels wide)
|
|
||||||
0x70, 0x0E, // ### ###
|
|
||||||
0xF0, 0x0F, // #### ####
|
|
||||||
0xE0, 0x07, // ### ###
|
|
||||||
0xE3, 0x87, // ### ### ###
|
|
||||||
0xE3, 0x87, // ### ### ###
|
|
||||||
0xE3, 0x87, // ### ### ###
|
|
||||||
0xE7, 0xCF, // ### ##### ####
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0x7E, 0xFE, // ###### #######
|
|
||||||
0x7E, 0xFE, // ###### #######
|
|
||||||
0x3C, 0x78, // #### ####
|
|
||||||
|
|
||||||
// @94 '4' (12 pixels wide)
|
|
||||||
0x00, 0xF0, // ####
|
|
||||||
0x01, 0xF0, // #####
|
|
||||||
0x07, 0x70, // ### ###
|
|
||||||
0x0E, 0x70, // ### ###
|
|
||||||
0x38, 0x70, // ### ###
|
|
||||||
0x70, 0x70, // ### ###
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0x00, 0x70, // ###
|
|
||||||
0x00, 0x70, // ###
|
|
||||||
|
|
||||||
// @118 '5' (11 pixels wide)
|
|
||||||
0x00, 0x0E, // ###
|
|
||||||
0xFF, 0x87, // ######### ###
|
|
||||||
0xFF, 0x87, // ######### ###
|
|
||||||
0xFF, 0x87, // ######### ###
|
|
||||||
0xFF, 0x87, // ######### ###
|
|
||||||
0xE3, 0x87, // ### ### ###
|
|
||||||
0xE3, 0xCF, // ### #### ####
|
|
||||||
0xE3, 0xFF, // ### ##########
|
|
||||||
0xE3, 0xFE, // ### #########
|
|
||||||
0xE1, 0xFC, // ### #######
|
|
||||||
0xE0, 0xF8, // ### #####
|
|
||||||
|
|
||||||
// @140 '6' (11 pixels wide)
|
|
||||||
0x07, 0xF0, // #######
|
|
||||||
0x1F, 0xFC, // ###########
|
|
||||||
0x3F, 0xFE, // #############
|
|
||||||
0x7F, 0xFF, // ###############
|
|
||||||
0xFB, 0x0F, // ##### ## ####
|
|
||||||
0xF7, 0x07, // #### ### ###
|
|
||||||
0xE7, 0x8F, // ### #### ####
|
|
||||||
0xE7, 0xFF, // ### ###########
|
|
||||||
0xE7, 0xFE, // ### ##########
|
|
||||||
0xE3, 0xFC, // ### ########
|
|
||||||
0x01, 0xF8, // ######
|
|
||||||
|
|
||||||
// @162 '7' (11 pixels wide)
|
|
||||||
0xE0, 0x01, // ### #
|
|
||||||
0xE0, 0x07, // ### ###
|
|
||||||
0xE0, 0x1F, // ### #####
|
|
||||||
0xE0, 0x7F, // ### #######
|
|
||||||
0xE1, 0xFF, // ### #########
|
|
||||||
0xE7, 0xFC, // ### #########
|
|
||||||
0xFF, 0xF0, // ############
|
|
||||||
0xFF, 0xC0, // ##########
|
|
||||||
0xFF, 0x00, // ########
|
|
||||||
0xFC, 0x00, // ######
|
|
||||||
0xF0, 0x00, // ####
|
|
||||||
|
|
||||||
// @184 '8' (11 pixels wide)
|
|
||||||
0x3C, 0x3C, // #### ####
|
|
||||||
0x7E, 0xFE, // ###### #######
|
|
||||||
0x7F, 0xFE, // ##############
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0xE7, 0x8F, // ### #### ####
|
|
||||||
0xE3, 0x87, // ### ### ###
|
|
||||||
0xE3, 0xC7, // ### #### ###
|
|
||||||
0xFF, 0xFF, // ################
|
|
||||||
0x7F, 0xFE, // ##############
|
|
||||||
0x7E, 0xFE, // ###### #######
|
|
||||||
0x3C, 0x7C, // #### #####
|
|
||||||
|
|
||||||
// @206 '9' (11 pixels wide)
|
|
||||||
0x1F, 0x80, // ######
|
|
||||||
0x3F, 0xC7, // ######## ###
|
|
||||||
0x7F, 0xE7, // ########## ###
|
|
||||||
0xFF, 0xE7, // ########### ###
|
|
||||||
0xF1, 0xE7, // #### #### ###
|
|
||||||
0xE0, 0xEF, // ### ### ####
|
|
||||||
0xF0, 0xDF, // #### ## #####
|
|
||||||
0xFF, 0xFE, // ###############
|
|
||||||
0x7F, 0xFC, // #############
|
|
||||||
0x3F, 0xF8, // ###########
|
|
||||||
0x0F, 0xE0, // #######
|
|
||||||
|
|
||||||
// @228 '`' (8 pixels wide)
|
|
||||||
0x3C, 0x00, // ####
|
|
||||||
0x7E, 0x00, // ######
|
|
||||||
0xE7, 0x00, // ### ###
|
|
||||||
0xC3, 0x00, // ## ##
|
|
||||||
0xC3, 0x00, // ## ##
|
|
||||||
0xE7, 0x00, // ### ###
|
|
||||||
0x7E, 0x00, // ######
|
|
||||||
0x3C, 0x00, // ####
|
|
||||||
|
|
||||||
// @244 '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, // #### ####
|
|
||||||
|
|
||||||
// @268 ':' (4 pixels wide)
|
|
||||||
0x3C, 0x3C, // #### ####
|
|
||||||
0x3C, 0x3C, // #### ####
|
|
||||||
0x3C, 0x3C, // #### ####
|
|
||||||
0x3C, 0x3C, // #### ####
|
|
||||||
|
|
||||||
// @276 ' ' (4 pixels wide)
|
|
||||||
0x00, 0x00, //
|
|
||||||
0x00, 0x00, //
|
|
||||||
0x00, 0x00, //
|
|
||||||
0x00, 0x00, //
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// Character descriptors for Tahoma 16pt
|
|
||||||
// { [Char width in bits], [Char height in bits], [Offset into tahoma_16ptCharBitmaps in bytes] }
|
|
||||||
const FONT_CHAR_INFO tahoma_16ptDescriptors[] PROGMEM =
|
|
||||||
{
|
|
||||||
{4, 16, 276}, // ' '
|
|
||||||
{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}, // ,
|
|
||||||
{0, 0, 0}, // -
|
|
||||||
{4, 16, 0}, // '.'
|
|
||||||
{0, 0, 0}, // '/'
|
|
||||||
{11, 16, 8}, // '0'
|
|
||||||
{10, 16, 30}, // '1'
|
|
||||||
{11, 16, 50}, // '2'
|
|
||||||
{11, 16, 72}, // '3'
|
|
||||||
{12, 16, 94}, // '4'
|
|
||||||
{11, 16, 118}, // '5'
|
|
||||||
{11, 16, 140}, // '6'
|
|
||||||
{11, 16, 162}, // '7'
|
|
||||||
{11, 16, 184}, // '8'
|
|
||||||
{11, 16, 206}, // '9'
|
|
||||||
{4, 16, 268}, // ':'
|
|
||||||
{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, 244}, // 'C'
|
|
||||||
{0, 0, 0}, // 'D'
|
|
||||||
{0, 0, 0}, // 'E'
|
|
||||||
{0, 0, 0}, // '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, 228}, // '`' use for degree symbol
|
|
||||||
};
|
|
||||||
|
|
||||||
// Font information for Tahoma 16pt
|
|
||||||
// easier to leave in RAM, not that big anyway
|
|
||||||
const FONT_INFO tahoma_16ptFontInfo =
|
|
||||||
{
|
|
||||||
16, // Character height
|
|
||||||
' ', // Start character
|
|
||||||
'`', // End character
|
|
||||||
2, // Width, in pixels, of space character
|
|
||||||
tahoma_16ptDescriptors, // Character descriptor array
|
|
||||||
tahoma_16ptBitmaps, // Character bitmap array
|
|
||||||
};
|
|
|
@ -1,7 +0,0 @@
|
||||||
#include "FontTypes.h"
|
|
||||||
|
|
||||||
// Font data for Tahoma 16pt
|
|
||||||
extern const uint8_t tahoma_16ptBitmaps[] PROGMEM; // stored in program flash memory
|
|
||||||
extern const FONT_CHAR_INFO tahoma_16ptDescriptors[] PROGMEM; // stored in program flash memory
|
|
||||||
extern const FONT_INFO tahoma_16ptFontInfo;
|
|
||||||
|
|
|
@ -1,784 +0,0 @@
|
||||||
//
|
|
||||||
// Font data for Tahoma 8pt
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// 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): None (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 "Tahoma8.h"
|
|
||||||
|
|
||||||
// Character bitmaps for Tahoma 8pt
|
|
||||||
const uint8_t PROGMEM tahoma_8ptBitmaps [] =
|
|
||||||
{
|
|
||||||
// @0 ' ' (2 pixels wide)
|
|
||||||
0x00, 0x00, //
|
|
||||||
0x00, 0x00, //
|
|
||||||
|
|
||||||
// @4 '!' (1 pixels wide)
|
|
||||||
0x1F, 0xA0, // ###### #
|
|
||||||
|
|
||||||
// @6 '"' (3 pixels wide)
|
|
||||||
0x38, 0x00, // ###
|
|
||||||
0x00, 0x00, //
|
|
||||||
0x38, 0x00, // ###
|
|
||||||
|
|
||||||
// @12 '#' (7 pixels wide)
|
|
||||||
0x00, 0x80, // #
|
|
||||||
0x04, 0xE0, // # ###
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x1C, 0xE0, // ### ###
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x1C, 0x80, // ### #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
|
|
||||||
// @26 '$' (5 pixels wide)
|
|
||||||
0x06, 0x20, // ## #
|
|
||||||
0x09, 0x20, // # # #
|
|
||||||
0x3F, 0xF8, // ###########
|
|
||||||
0x09, 0x20, // # # #
|
|
||||||
0x08, 0xC0, // # ##
|
|
||||||
|
|
||||||
// @36 '%' (10 pixels wide)
|
|
||||||
0x0C, 0x00, // ##
|
|
||||||
0x12, 0x00, // # #
|
|
||||||
0x12, 0x00, // # #
|
|
||||||
0x0C, 0x60, // ## ##
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x18, 0xC0, // ## ##
|
|
||||||
0x01, 0x20, // # #
|
|
||||||
0x01, 0x20, // # #
|
|
||||||
0x00, 0xC0, // ##
|
|
||||||
|
|
||||||
// @56 '&' (7 pixels wide)
|
|
||||||
0x0D, 0xC0, // ## ###
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x0D, 0x20, // ## # #
|
|
||||||
0x00, 0xC0, // ##
|
|
||||||
0x03, 0x40, // ## #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
|
|
||||||
// @70 ''' (1 pixels wide)
|
|
||||||
0x38, 0x00, // ###
|
|
||||||
|
|
||||||
// @72 '(' (3 pixels wide)
|
|
||||||
0x07, 0xC0, // #####
|
|
||||||
0x18, 0x30, // ## ##
|
|
||||||
0x20, 0x08, // # #
|
|
||||||
|
|
||||||
// @78 ')' (3 pixels wide)
|
|
||||||
0x20, 0x08, // # #
|
|
||||||
0x18, 0x30, // ## ##
|
|
||||||
0x07, 0xC0, // #####
|
|
||||||
|
|
||||||
// @84 '*' (5 pixels wide)
|
|
||||||
0x14, 0x00, // # #
|
|
||||||
0x08, 0x00, // #
|
|
||||||
0x3E, 0x00, // #####
|
|
||||||
0x08, 0x00, // #
|
|
||||||
0x14, 0x00, // # #
|
|
||||||
|
|
||||||
// @94 '+' (7 pixels wide)
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x0F, 0xE0, // #######
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
|
|
||||||
// @108 ',' (2 pixels wide)
|
|
||||||
0x00, 0x08, // #
|
|
||||||
0x00, 0x70, // ###
|
|
||||||
|
|
||||||
// @112 '-' (3 pixels wide)
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
|
|
||||||
// @118 '.' (1 pixels wide)
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
|
|
||||||
// @120 '/' (3 pixels wide)
|
|
||||||
0x00, 0x38, // ###
|
|
||||||
0x07, 0xC0, // #####
|
|
||||||
0x38, 0x00, // ###
|
|
||||||
|
|
||||||
// @126 '0' (5 pixels wide)
|
|
||||||
0x0F, 0xC0, // ######
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x0F, 0xC0, // ######
|
|
||||||
|
|
||||||
// @136 '1' (3 pixels wide)
|
|
||||||
0x08, 0x20, // # #
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x00, 0x20, // #
|
|
||||||
|
|
||||||
// @142 '2' (5 pixels wide)
|
|
||||||
0x08, 0x60, // # ##
|
|
||||||
0x10, 0xA0, // # # #
|
|
||||||
0x11, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x0C, 0x20, // ## #
|
|
||||||
|
|
||||||
// @152 '3' (5 pixels wide)
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x0D, 0xC0, // ## ###
|
|
||||||
|
|
||||||
// @162 '4' (5 pixels wide)
|
|
||||||
0x03, 0x00, // ##
|
|
||||||
0x05, 0x00, // # #
|
|
||||||
0x09, 0x00, // # #
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x01, 0x00, // #
|
|
||||||
|
|
||||||
// @172 '5' (5 pixels wide)
|
|
||||||
0x1E, 0x40, // #### #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x11, 0xC0, // # ###
|
|
||||||
|
|
||||||
// @182 '6' (5 pixels wide)
|
|
||||||
0x07, 0xC0, // #####
|
|
||||||
0x0A, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x01, 0xC0, // ###
|
|
||||||
|
|
||||||
// @192 '7' (5 pixels wide)
|
|
||||||
0x10, 0x00, // #
|
|
||||||
0x10, 0x60, // # ##
|
|
||||||
0x11, 0x80, // # ##
|
|
||||||
0x16, 0x00, // # ##
|
|
||||||
0x18, 0x00, // ##
|
|
||||||
|
|
||||||
// @202 '8' (5 pixels wide)
|
|
||||||
0x0D, 0xC0, // ## ###
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x0D, 0xC0, // ## ###
|
|
||||||
|
|
||||||
// @212 '9' (5 pixels wide)
|
|
||||||
0x0E, 0x00, // ###
|
|
||||||
0x11, 0x20, // # # #
|
|
||||||
0x11, 0x20, // # # #
|
|
||||||
0x11, 0x40, // # # #
|
|
||||||
0x0F, 0x80, // #####
|
|
||||||
|
|
||||||
// @222 ':' (1 pixels wide)
|
|
||||||
0x06, 0x60, // ## ##
|
|
||||||
|
|
||||||
// @224 ';' (2 pixels wide)
|
|
||||||
0x00, 0x08, // #
|
|
||||||
0x06, 0x70, // ## ###
|
|
||||||
|
|
||||||
// @228 '<' (6 pixels wide)
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x04, 0x40, // # #
|
|
||||||
0x04, 0x40, // # #
|
|
||||||
0x08, 0x20, // # #
|
|
||||||
|
|
||||||
// @240 '=' (7 pixels wide)
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
|
|
||||||
// @254 '>' (6 pixels wide)
|
|
||||||
0x08, 0x20, // # #
|
|
||||||
0x04, 0x40, // # #
|
|
||||||
0x04, 0x40, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
|
|
||||||
// @266 '?' (4 pixels wide)
|
|
||||||
0x10, 0x00, // #
|
|
||||||
0x11, 0xA0, // # ## #
|
|
||||||
0x12, 0x00, // # #
|
|
||||||
0x0C, 0x00, // ##
|
|
||||||
|
|
||||||
// @274 '@' (9 pixels wide)
|
|
||||||
0x07, 0xC0, // #####
|
|
||||||
0x08, 0x20, // # #
|
|
||||||
0x13, 0x90, // # ### #
|
|
||||||
0x14, 0x50, // # # # #
|
|
||||||
0x14, 0x50, // # # # #
|
|
||||||
0x17, 0xD0, // # ##### #
|
|
||||||
0x10, 0x40, // # #
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
|
|
||||||
// @292 'A' (6 pixels wide)
|
|
||||||
0x00, 0xE0, // ###
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x18, 0x80, // ## #
|
|
||||||
0x18, 0x80, // ## #
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x00, 0xE0, // ###
|
|
||||||
|
|
||||||
// @304 'B' (5 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x0D, 0xC0, // ## ###
|
|
||||||
|
|
||||||
// @314 'C' (6 pixels wide)
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
|
|
||||||
// @326 'D' (6 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
|
|
||||||
// @338 'E' (5 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
|
|
||||||
// @348 'F' (5 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x12, 0x00, // # #
|
|
||||||
0x12, 0x00, // # #
|
|
||||||
0x12, 0x00, // # #
|
|
||||||
0x12, 0x00, // # #
|
|
||||||
|
|
||||||
// @358 'G' (6 pixels wide)
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x11, 0x20, // # # #
|
|
||||||
0x11, 0x20, // # # #
|
|
||||||
0x11, 0xE0, // # ####
|
|
||||||
|
|
||||||
// @370 'H' (6 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x02, 0x00, // #
|
|
||||||
0x02, 0x00, // #
|
|
||||||
0x02, 0x00, // #
|
|
||||||
0x02, 0x00, // #
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
|
|
||||||
// @382 'I' (3 pixels wide)
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
|
|
||||||
// @388 'J' (4 pixels wide)
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x1F, 0xC0, // #######
|
|
||||||
|
|
||||||
// @396 'K' (5 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x03, 0x00, // ##
|
|
||||||
0x04, 0x80, // # #
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
|
|
||||||
// @406 'L' (4 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
|
|
||||||
// @414 'M' (7 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x18, 0x00, // ##
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x18, 0x00, // ##
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
|
|
||||||
// @428 'N' (6 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x18, 0x00, // ##
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
|
|
||||||
// @440 'O' (7 pixels wide)
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
|
|
||||||
// @454 'P' (5 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x11, 0x00, // # #
|
|
||||||
0x11, 0x00, // # #
|
|
||||||
0x11, 0x00, // # #
|
|
||||||
0x0E, 0x00, // ###
|
|
||||||
|
|
||||||
// @464 'Q' (7 pixels wide)
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x08, 0x40, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x20, // # #
|
|
||||||
0x10, 0x30, // # ##
|
|
||||||
0x08, 0x48, // # # #
|
|
||||||
0x07, 0x88, // #### #
|
|
||||||
|
|
||||||
// @478 'R' (6 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x11, 0x00, // # #
|
|
||||||
0x11, 0x00, // # #
|
|
||||||
0x11, 0x80, // # ##
|
|
||||||
0x0E, 0x40, // ### #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
|
|
||||||
// @490 'S' (5 pixels wide)
|
|
||||||
0x0C, 0x20, // ## #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x12, 0x20, // # # #
|
|
||||||
0x11, 0xC0, // # ###
|
|
||||||
|
|
||||||
// @500 'T' (5 pixels wide)
|
|
||||||
0x10, 0x00, // #
|
|
||||||
0x10, 0x00, // #
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x10, 0x00, // #
|
|
||||||
0x10, 0x00, // #
|
|
||||||
|
|
||||||
// @510 'U' (6 pixels wide)
|
|
||||||
0x1F, 0xC0, // #######
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x1F, 0xC0, // #######
|
|
||||||
|
|
||||||
// @522 'V' (5 pixels wide)
|
|
||||||
0x1C, 0x00, // ###
|
|
||||||
0x03, 0x80, // ###
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
0x03, 0x80, // ###
|
|
||||||
0x1C, 0x00, // ###
|
|
||||||
|
|
||||||
// @532 'W' (9 pixels wide)
|
|
||||||
0x1C, 0x00, // ###
|
|
||||||
0x03, 0x80, // ###
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
0x03, 0x80, // ###
|
|
||||||
0x1C, 0x00, // ###
|
|
||||||
0x03, 0x80, // ###
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
0x03, 0x80, // ###
|
|
||||||
0x1C, 0x00, // ###
|
|
||||||
|
|
||||||
// @550 'X' (5 pixels wide)
|
|
||||||
0x18, 0x60, // ## ##
|
|
||||||
0x04, 0x80, // # #
|
|
||||||
0x03, 0x00, // ##
|
|
||||||
0x04, 0x80, // # #
|
|
||||||
0x18, 0x60, // ## ##
|
|
||||||
|
|
||||||
// @560 'Y' (5 pixels wide)
|
|
||||||
0x18, 0x00, // ##
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x01, 0xE0, // ####
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x18, 0x00, // ##
|
|
||||||
|
|
||||||
// @570 'Z' (5 pixels wide)
|
|
||||||
0x10, 0x60, // # ##
|
|
||||||
0x10, 0xA0, // # # #
|
|
||||||
0x13, 0x20, // # ## #
|
|
||||||
0x14, 0x20, // # # #
|
|
||||||
0x18, 0x20, // ## #
|
|
||||||
|
|
||||||
// @580 '[' (3 pixels wide)
|
|
||||||
0x3F, 0xF8, // ###########
|
|
||||||
0x20, 0x08, // # #
|
|
||||||
0x20, 0x08, // # #
|
|
||||||
|
|
||||||
// @586 '\' (3 pixels wide)
|
|
||||||
0x38, 0x00, // ###
|
|
||||||
0x07, 0xC0, // #####
|
|
||||||
0x00, 0x38, // ###
|
|
||||||
|
|
||||||
// @592 ']' (3 pixels wide)
|
|
||||||
0x20, 0x08, // # #
|
|
||||||
0x20, 0x08, // # #
|
|
||||||
0x3F, 0xF8, // ###########
|
|
||||||
|
|
||||||
// @598 '^' (7 pixels wide)
|
|
||||||
0x02, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x08, 0x00, // #
|
|
||||||
0x10, 0x00, // #
|
|
||||||
0x08, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x02, 0x00, // #
|
|
||||||
|
|
||||||
// @612 '_' (6 pixels wide)
|
|
||||||
0x00, 0x08, // #
|
|
||||||
0x00, 0x08, // #
|
|
||||||
0x00, 0x08, // #
|
|
||||||
0x00, 0x08, // #
|
|
||||||
0x00, 0x08, // #
|
|
||||||
0x00, 0x08, // #
|
|
||||||
|
|
||||||
// @624 '`' (2 pixels wide)
|
|
||||||
0x20, 0x00, // #
|
|
||||||
0x10, 0x00, // #
|
|
||||||
|
|
||||||
// @628 'a' (5 pixels wide)
|
|
||||||
0x00, 0xC0, // ##
|
|
||||||
0x05, 0x20, // # # #
|
|
||||||
0x05, 0x20, // # # #
|
|
||||||
0x05, 0x20, // # # #
|
|
||||||
0x03, 0xE0, // #####
|
|
||||||
|
|
||||||
// @638 'b' (5 pixels wide)
|
|
||||||
0x3F, 0xE0, // #########
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
|
|
||||||
// @648 'c' (4 pixels wide)
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
|
|
||||||
// @656 'd' (5 pixels wide)
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x3F, 0xE0, // #########
|
|
||||||
|
|
||||||
// @666 'e' (5 pixels wide)
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
0x05, 0x20, // # # #
|
|
||||||
0x05, 0x20, // # # #
|
|
||||||
0x05, 0x20, // # # #
|
|
||||||
0x03, 0x40, // ## #
|
|
||||||
|
|
||||||
// @676 'f' (3 pixels wide)
|
|
||||||
0x1F, 0xE0, // ########
|
|
||||||
0x24, 0x00, // # #
|
|
||||||
0x24, 0x00, // # #
|
|
||||||
|
|
||||||
// @682 'g' (5 pixels wide)
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
0x04, 0x28, // # # #
|
|
||||||
0x04, 0x28, // # # #
|
|
||||||
0x04, 0x28, // # # #
|
|
||||||
0x07, 0xF0, // #######
|
|
||||||
|
|
||||||
// @692 'h' (5 pixels wide)
|
|
||||||
0x3F, 0xE0, // #########
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x03, 0xE0, // #####
|
|
||||||
|
|
||||||
// @702 'i' (1 pixels wide)
|
|
||||||
0x17, 0xE0, // # ######
|
|
||||||
|
|
||||||
// @704 'j' (2 pixels wide)
|
|
||||||
0x04, 0x08, // # #
|
|
||||||
0x17, 0xF0, // # #######
|
|
||||||
|
|
||||||
// @708 'k' (5 pixels wide)
|
|
||||||
0x3F, 0xE0, // #########
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x02, 0x80, // # #
|
|
||||||
0x04, 0x40, // # #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
|
|
||||||
// @718 'l' (1 pixels wide)
|
|
||||||
0x3F, 0xE0, // #########
|
|
||||||
|
|
||||||
// @720 'm' (7 pixels wide)
|
|
||||||
0x07, 0xE0, // ######
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x03, 0xE0, // #####
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x03, 0xE0, // #####
|
|
||||||
|
|
||||||
// @734 'n' (5 pixels wide)
|
|
||||||
0x07, 0xE0, // ######
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
0x03, 0xE0, // #####
|
|
||||||
|
|
||||||
// @744 'o' (5 pixels wide)
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
|
|
||||||
// @754 'p' (5 pixels wide)
|
|
||||||
0x07, 0xF8, // ########
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
|
|
||||||
// @764 'q' (5 pixels wide)
|
|
||||||
0x03, 0xC0, // ####
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x07, 0xF8, // ########
|
|
||||||
|
|
||||||
// @774 'r' (3 pixels wide)
|
|
||||||
0x07, 0xE0, // ######
|
|
||||||
0x02, 0x00, // #
|
|
||||||
0x04, 0x00, // #
|
|
||||||
|
|
||||||
// @780 's' (4 pixels wide)
|
|
||||||
0x03, 0x20, // ## #
|
|
||||||
0x05, 0x20, // # # #
|
|
||||||
0x04, 0xA0, // # # #
|
|
||||||
0x04, 0xC0, // # ##
|
|
||||||
|
|
||||||
// @788 't' (3 pixels wide)
|
|
||||||
0x1F, 0xC0, // #######
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
|
|
||||||
// @794 'u' (5 pixels wide)
|
|
||||||
0x07, 0xC0, // #####
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x00, 0x20, // #
|
|
||||||
0x07, 0xE0, // ######
|
|
||||||
|
|
||||||
// @804 'v' (5 pixels wide)
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
|
|
||||||
// @814 'w' (7 pixels wide)
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
0x07, 0x80, // ####
|
|
||||||
|
|
||||||
// @828 'x' (5 pixels wide)
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
0x02, 0x40, // # #
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x02, 0x40, // # #
|
|
||||||
0x04, 0x20, // # #
|
|
||||||
|
|
||||||
// @838 'y' (5 pixels wide)
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
0x01, 0x98, // ## ##
|
|
||||||
0x00, 0x60, // ##
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x06, 0x00, // ##
|
|
||||||
|
|
||||||
// @848 'z' (4 pixels wide)
|
|
||||||
0x04, 0x60, // # ##
|
|
||||||
0x04, 0xA0, // # # #
|
|
||||||
0x05, 0x20, // # # #
|
|
||||||
0x06, 0x20, // ## #
|
|
||||||
|
|
||||||
// @856 '{' (4 pixels wide)
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x1E, 0xF0, // #### ####
|
|
||||||
0x20, 0x08, // # #
|
|
||||||
|
|
||||||
// @864 '|' (1 pixels wide)
|
|
||||||
0x3F, 0xF8, // ###########
|
|
||||||
|
|
||||||
// @866 '}' (4 pixels wide)
|
|
||||||
0x20, 0x08, // # #
|
|
||||||
0x1E, 0xF0, // #### ####
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
|
|
||||||
// @874 '~' (7 pixels wide)
|
|
||||||
0x01, 0x80, // ##
|
|
||||||
0x02, 0x00, // #
|
|
||||||
0x02, 0x00, // #
|
|
||||||
0x01, 0x00, // #
|
|
||||||
0x00, 0x80, // #
|
|
||||||
0x00, 0x80, // #
|
|
||||||
0x03, 0x00, // ##
|
|
||||||
};
|
|
||||||
|
|
||||||
// Character descriptors for Tahoma 8pt
|
|
||||||
// { [Char width in bits], [Char height in bits], [Offset into tahoma_8ptCharBitmaps in bytes] }
|
|
||||||
const FONT_CHAR_INFO PROGMEM tahoma_8ptDescriptors[] =
|
|
||||||
{
|
|
||||||
{2, 13, 0}, //
|
|
||||||
{1, 13, 4}, // !
|
|
||||||
{3, 13, 6}, // "
|
|
||||||
{7, 13, 12}, // #
|
|
||||||
{5, 13, 26}, // $
|
|
||||||
{10, 13, 36}, // %
|
|
||||||
{7, 13, 56}, // &
|
|
||||||
{1, 13, 70}, // '
|
|
||||||
{3, 13, 72}, // (
|
|
||||||
{3, 13, 78}, // )
|
|
||||||
{5, 13, 84}, // *
|
|
||||||
{7, 13, 94}, // +
|
|
||||||
{2, 13, 108}, // ,
|
|
||||||
{3, 13, 112}, // -
|
|
||||||
{1, 13, 118}, // .
|
|
||||||
{3, 13, 120}, // /
|
|
||||||
{5, 13, 126}, // 0
|
|
||||||
{3, 13, 136}, // 1
|
|
||||||
{5, 13, 142}, // 2
|
|
||||||
{5, 13, 152}, // 3
|
|
||||||
{5, 13, 162}, // 4
|
|
||||||
{5, 13, 172}, // 5
|
|
||||||
{5, 13, 182}, // 6
|
|
||||||
{5, 13, 192}, // 7
|
|
||||||
{5, 13, 202}, // 8
|
|
||||||
{5, 13, 212}, // 9
|
|
||||||
{1, 13, 222}, // :
|
|
||||||
{2, 13, 224}, // ;
|
|
||||||
{6, 13, 228}, // <
|
|
||||||
{7, 13, 240}, // =
|
|
||||||
{6, 13, 254}, // >
|
|
||||||
{4, 13, 266}, // ?
|
|
||||||
{9, 13, 274}, // @
|
|
||||||
{6, 13, 292}, // A
|
|
||||||
{5, 13, 304}, // B
|
|
||||||
{6, 13, 314}, // C
|
|
||||||
{6, 13, 326}, // D
|
|
||||||
{5, 13, 338}, // E
|
|
||||||
{5, 13, 348}, // F
|
|
||||||
{6, 13, 358}, // G
|
|
||||||
{6, 13, 370}, // H
|
|
||||||
{3, 13, 382}, // I
|
|
||||||
{4, 13, 388}, // J
|
|
||||||
{5, 13, 396}, // K
|
|
||||||
{4, 13, 406}, // L
|
|
||||||
{7, 13, 414}, // M
|
|
||||||
{6, 13, 428}, // N
|
|
||||||
{7, 13, 440}, // O
|
|
||||||
{5, 13, 454}, // P
|
|
||||||
{7, 13, 464}, // Q
|
|
||||||
{6, 13, 478}, // R
|
|
||||||
{5, 13, 490}, // S
|
|
||||||
{5, 13, 500}, // T
|
|
||||||
{6, 13, 510}, // U
|
|
||||||
{5, 13, 522}, // V
|
|
||||||
{9, 13, 532}, // W
|
|
||||||
{5, 13, 550}, // X
|
|
||||||
{5, 13, 560}, // Y
|
|
||||||
{5, 13, 570}, // Z
|
|
||||||
{3, 13, 580}, // [
|
|
||||||
{3, 13, 586}, // \ .
|
|
||||||
{3, 13, 592}, // ]
|
|
||||||
{7, 13, 598}, // ^
|
|
||||||
{6, 13, 612}, // _
|
|
||||||
{2, 13, 624}, // `
|
|
||||||
{5, 13, 628}, // a
|
|
||||||
{5, 13, 638}, // b
|
|
||||||
{4, 13, 648}, // c
|
|
||||||
{5, 13, 656}, // d
|
|
||||||
{5, 13, 666}, // e
|
|
||||||
{3, 13, 676}, // f
|
|
||||||
{5, 13, 682}, // g
|
|
||||||
{5, 13, 692}, // h
|
|
||||||
{1, 13, 702}, // i
|
|
||||||
{2, 13, 704}, // j
|
|
||||||
{5, 13, 708}, // k
|
|
||||||
{1, 13, 718}, // l
|
|
||||||
{7, 13, 720}, // m
|
|
||||||
{5, 13, 734}, // n
|
|
||||||
{5, 13, 744}, // o
|
|
||||||
{5, 13, 754}, // p
|
|
||||||
{5, 13, 764}, // q
|
|
||||||
{3, 13, 774}, // r
|
|
||||||
{4, 13, 780}, // s
|
|
||||||
{3, 13, 788}, // t
|
|
||||||
{5, 13, 794}, // u
|
|
||||||
{5, 13, 804}, // v
|
|
||||||
{7, 13, 814}, // w
|
|
||||||
{5, 13, 828}, // x
|
|
||||||
{5, 13, 838}, // y
|
|
||||||
{4, 13, 848}, // z
|
|
||||||
{4, 13, 856}, // {
|
|
||||||
{1, 13, 864}, // |
|
|
||||||
{4, 13, 866}, // }
|
|
||||||
{7, 13, 874}, // ~
|
|
||||||
};
|
|
||||||
|
|
||||||
// Font information for Tahoma 8pt
|
|
||||||
const FONT_INFO tahoma_8ptFontInfo =
|
|
||||||
{
|
|
||||||
13, // Character height
|
|
||||||
' ', // Start character
|
|
||||||
'~', // End character
|
|
||||||
2, // Width, in pixels, of space character
|
|
||||||
tahoma_8ptDescriptors, // Character descriptor array
|
|
||||||
tahoma_8ptBitmaps, // Character bitmap array
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
#include "FontTypes.h"
|
|
||||||
|
|
||||||
// Font data for Tahoma 8pt
|
|
||||||
extern const uint8_t tahoma_8ptBitmaps[] PROGMEM;
|
|
||||||
extern const FONT_CHAR_INFO tahoma_8ptDescriptors[] PROGMEM;
|
|
||||||
extern const FONT_INFO tahoma_8ptFontInfo;
|
|
||||||
|
|
Loading…
Reference in a new issue