Pushed and shoved and edited and finally there - structured file directories
This commit is contained in:
parent
b07b7db8db
commit
529ac5d8e0
76 changed files with 104 additions and 6014 deletions
|
@ -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__
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "UtilClasses.h"
|
||||
#include "Debugport.h"
|
||||
#include "helpers.h"
|
||||
#include "../Utility/UtilClasses.h"
|
||||
#include "../Utility/Debugport.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
|
||||
class CProtocol;
|
||||
|
|
@ -20,11 +20,11 @@
|
|||
*/
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "pins.h"
|
||||
#include "Protocol.h"
|
||||
#include "debugport.h"
|
||||
#include "../cfg/pins.h"
|
||||
#include "../Protocol/Protocol.h"
|
||||
#include "../Utility/debugport.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 "BTCConfig.h"
|
||||
#include "helpers.h"
|
||||
#include "../cfg/pins.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
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
|
||||
#include "BluetoothAbstract.h"
|
||||
#include "Moderator.h"
|
||||
#include "../Utility/Moderator.h"
|
||||
|
||||
// Define the serial port for access to a HC-05 module.
|
||||
// This is generally Serial2, but different platforms use
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "DebugPort.h"
|
||||
#include "../Utility/DebugPort.h"
|
||||
|
||||
#define DBG DebugPort.print
|
||||
#define DBGln DebugPort.println
|
|
@ -22,10 +22,10 @@
|
|||
#ifndef __128x64OLED_H__
|
||||
#define __128x64OLED_H__
|
||||
|
||||
#include "Adafruit_SH1106.h"
|
||||
#include <Adafruit_SH1106.h>
|
||||
|
||||
#include "FontTypes.h"
|
||||
#include "UtilClasses.h"
|
||||
#include "fonts/FontTypes.h"
|
||||
#include "../Utility/UtilClasses.h"
|
||||
|
||||
class C128x64_OLED : public Adafruit_SH1106 {
|
||||
const FONT_INFO* m_pFontInfo;
|
|
@ -23,10 +23,10 @@
|
|||
#define __SCREEN_H__
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "FontTypes.h"
|
||||
#include "UtilClasses.h"
|
||||
#include "ScreenManager.h"
|
||||
#include "128x64OLED.h"
|
||||
#include "ScreenManager.h"
|
||||
#include "fonts/FontTypes.h"
|
||||
#include "../Utility/UtilClasses.h"
|
||||
|
||||
class CProtocol;
|
||||
|
|
@ -20,14 +20,14 @@
|
|||
*/
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "MiniFont.h"
|
||||
#include "Icons.h"
|
||||
#include "BluetoothAbstract.h"
|
||||
#include "fonts/MiniFont.h"
|
||||
#include "fonts/Icons.h"
|
||||
#include "../Bluetooth/BluetoothAbstract.h"
|
||||
#include "Screen1.h"
|
||||
#include "BTCWifi.h"
|
||||
#include "../Wifi/BTCWifi.h"
|
||||
#include "KeyPad.h"
|
||||
#include "helpers.h"
|
||||
#include "Protocol.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../Protocol/Protocol.h"
|
||||
|
||||
|
||||
#define MINIFONT miniFontInfo
|
|
@ -19,7 +19,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "stdint.h"
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
class C128x64_OLED;
|
|
@ -20,12 +20,12 @@
|
|||
*/
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "tahoma16.h"
|
||||
#include "Icons.h"
|
||||
#include "fonts/tahoma16.h"
|
||||
#include "fonts/Icons.h"
|
||||
#include "Screen2.h"
|
||||
#include "KeyPad.h"
|
||||
#include "helpers.h"
|
||||
#include "UtilClasses.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../Utility/UtilClasses.h"
|
||||
|
||||
|
||||
#define MAXIFONT tahoma_16ptFontInfo
|
|
@ -19,7 +19,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "stdint.h"
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
class C128x64_OLED;
|
|
@ -19,10 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "KeyPad.h"
|
||||
#include "helpers.h"
|
||||
#include "Screen3.h"
|
||||
#include "KeyPad.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
|
@ -19,7 +19,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "stdint.h"
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
class C128x64_OLED;
|
|
@ -19,14 +19,13 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "KeyPad.h"
|
||||
#include "helpers.h"
|
||||
#include "Screen4.h"
|
||||
#include "BTCWifi.h"
|
||||
#include "Tahoma8.h"
|
||||
#include "FranklinGothic.h"
|
||||
#include "src/fonts/Arial.h"
|
||||
#include "KeyPad.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../Wifi/BTCWifi.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"
|
||||
|
||||
class C128x64_OLED;
|
|
@ -28,12 +28,11 @@
|
|||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "KeyPad.h"
|
||||
#include "helpers.h"
|
||||
#include "Screen5.h"
|
||||
#include "BTCWifi.h"
|
||||
#include "src/fonts/Arial.h"
|
||||
#include "KeyPad.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../Wifi/BTCWifi.h"
|
||||
#include "fonts/Arial.h"
|
||||
|
||||
|
||||
CScreen5::CScreen5(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr)
|
|
@ -19,7 +19,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "stdint.h"
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
class C128x64_OLED;
|
|
@ -28,12 +28,11 @@
|
|||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "KeyPad.h"
|
||||
#include "helpers.h"
|
||||
#include "Screen6.h"
|
||||
#include "src/fonts/Arial.h"
|
||||
#include "Clock.h"
|
||||
#include "KeyPad.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "fonts/Arial.h"
|
||||
#include "../RTC/Clock.h"
|
||||
|
||||
|
||||
CScreen6::CScreen6(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr)
|
|
@ -19,9 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "stdint.h"
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
#include "BTCDateTime.h"
|
||||
#include "../RTC/BTCDateTime.h"
|
||||
|
||||
class C128x64_OLED;
|
||||
class CScreenManager;
|
|
@ -28,12 +28,11 @@
|
|||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "KeyPad.h"
|
||||
#include "helpers.h"
|
||||
#include "Screen7.h"
|
||||
#include "NVStorage.h"
|
||||
#include "RTClib.h"
|
||||
#include "KeyPad.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../Utility/NVStorage.h"
|
||||
#include <RTClib.h>
|
||||
|
||||
const char* briefDOW[] = { "S", "M", "T", "W", "T", "F", "S" };
|
||||
|
|
@ -19,9 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "stdint.h"
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
#include "NVStorage.h"
|
||||
#include "../Utility/NVStorage.h"
|
||||
|
||||
class C128x64_OLED;
|
||||
class CScreenManager;
|
|
@ -19,12 +19,11 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "128x64OLED.h"
|
||||
#include "KeyPad.h"
|
||||
#include "helpers.h"
|
||||
#include "Screen8.h"
|
||||
#include "Tahoma16.h"
|
||||
#include "Clock.h"
|
||||
#include "KeyPad.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"
|
||||
|
||||
class C128x64_OLED;
|
|
@ -1,15 +1,14 @@
|
|||
#include <Arduino.h>
|
||||
#include "ScreenHeader.h"
|
||||
#include "Protocol.h"
|
||||
#include "128x64OLED.h"
|
||||
#include "BTCWifi.h"
|
||||
#include "BluetoothAbstract.h"
|
||||
#include "Icons.h"
|
||||
#include "MiniFont.h"
|
||||
#include "helpers.h"
|
||||
#include "NVStorage.h"
|
||||
#include "Clock.h"
|
||||
#include "src/fonts/Arial.h"
|
||||
#include "../Protocol/Protocol.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../Wifi/BTCWifi.h"
|
||||
#include "../Bluetooth/BluetoothAbstract.h"
|
||||
#include "../Utility/NVStorage.h"
|
||||
#include "../RTC/Clock.h"
|
||||
#include "fonts/Arial.h"
|
||||
#include "fonts/Icons.h"
|
||||
#include "fonts/MiniFont.h"
|
||||
|
||||
|
||||
#define MINIFONT miniFontInfo
|
|
@ -23,9 +23,9 @@
|
|||
#define __SCREEN_HEADER_H__
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "FontTypes.h"
|
||||
#include "UtilClasses.h"
|
||||
#include "Screen.h"
|
||||
#include "../Utility/UtilClasses.h"
|
||||
#include "fonts/FontTypes.h"
|
||||
|
||||
|
||||
class CScreenHeader : public CScreen {
|
|
@ -1,7 +1,4 @@
|
|||
#include "ScreenManager.h"
|
||||
#include <Wire.h>
|
||||
#include "128x64OLED.h"
|
||||
#include "pins.h"
|
||||
#include "Screen1.h"
|
||||
#include "Screen2.h"
|
||||
#include "Screen3.h"
|
||||
|
@ -10,7 +7,9 @@
|
|||
#include "Screen6.h"
|
||||
#include "Screen7.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 "keypad.h"
|
||||
#include "pins.h"
|
||||
#include "../cfg/pins.h"
|
||||
|
||||
CKeyPad::CKeyPad()
|
||||
{
|
|
@ -22,10 +22,8 @@
|
|||
#ifndef __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_Right = 0x02;
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include <Arduino.h>
|
||||
#include "Protocol.h"
|
||||
#include "debugport.h"
|
||||
#include "../Utility/DebugPort.h"
|
||||
#include "helpers.h"
|
||||
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
|
||||
#include "TxManage.h"
|
||||
#include "NVStorage.h"
|
||||
#include "../Utility/NVStorage.h"
|
||||
|
||||
extern void DebugReportFrame(const char* hdr, const CProtocol&, const char* ftr);
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
|
||||
#include "BTCDateTime.h"
|
||||
#include "helpers.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
|
||||
const char*
|
||||
BTCDateTime::dowStr() const
|
|
@ -22,7 +22,7 @@
|
|||
#ifndef __BTCDATETIME_H__
|
||||
#define __BTCDATETIME_H__
|
||||
|
||||
#include "RTClib.h"
|
||||
#include <RTClib.h>
|
||||
|
||||
const char daysOfTheWeek[7][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
|
||||
|
|
@ -22,11 +22,11 @@
|
|||
#include <Arduino.h>
|
||||
#include "Clock.h"
|
||||
#include "BTCDateTime.h"
|
||||
#include "Wire.h"
|
||||
#include "RTClib.h"
|
||||
#include "helpers.h"
|
||||
#include "NVStorage.h"
|
||||
#include "DebugPort.h"
|
||||
#include <Wire.h>
|
||||
#include <RTClib.h>
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../Utility/NVStorage.h"
|
||||
#include "../Utility/DebugPort.h"
|
||||
|
||||
|
||||
// create ONE of the RTClib supported real time clock classes
|
|
@ -23,7 +23,7 @@
|
|||
#define __BTC_TIMERS_H__
|
||||
|
||||
#include "BTCDateTime.h"
|
||||
#include "BTCConfig.h"
|
||||
#include "../cfg/BTCConfig.h"
|
||||
|
||||
|
||||
class CClock {
|
|
@ -21,9 +21,9 @@
|
|||
|
||||
#include "BTC_JSON.h"
|
||||
#include "DebugPort.h"
|
||||
#include "helpers.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "NVstorage.h"
|
||||
#include "BTCDateTime.h"
|
||||
#include "../RTC/BTCDateTime.h"
|
||||
|
||||
|
||||
char defaultJSONstr[64];
|
|
@ -19,7 +19,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "Arduino.h"
|
||||
#include <Arduino.h>
|
||||
#include "NVStorage.h"
|
||||
#include "DebugPort.h"
|
||||
|
|
@ -24,8 +24,8 @@
|
|||
|
||||
#include <Arduino.h>
|
||||
#include <string.h>
|
||||
#include "Protocol.h"
|
||||
#include "debugport.h"
|
||||
#include "../Protocol/Protocol.h"
|
||||
#include "DebugPort.h"
|
||||
|
||||
|
||||
// a class to track the blue wire receive / transmit states
|
|
@ -22,13 +22,13 @@
|
|||
|
||||
|
||||
#include "BTCWebServer.h"
|
||||
#include "DebugPort.h"
|
||||
#include "TxManage.h"
|
||||
#include "helpers.h"
|
||||
#include "pins.h"
|
||||
#include "../Utility/DebugPort.h"
|
||||
#include "../Protocol/TxManage.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../cfg/pins.h"
|
||||
#include "Index.h"
|
||||
#include "BTC_JSON.h"
|
||||
#include "Moderator.h"
|
||||
#include "../Utility/BTC_JSON.h"
|
||||
#include "../Utility/Moderator.h"
|
||||
|
||||
WebServer server(80);
|
||||
WebSocketsServer webSocket = WebSocketsServer(81);
|
|
@ -35,7 +35,7 @@
|
|||
#include <WiFiClient.h>
|
||||
#include <WebServer.h>
|
||||
#include <ESPmDNS.h>
|
||||
#include "ESPAsyncWebServer.h"
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <WebSocketsServer.h>
|
||||
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
// Should be working - Jimmy C
|
||||
#include "BTCWifi.h"
|
||||
#include "DebugPort.h"
|
||||
#include "../Utility/DebugPort.h"
|
||||
// select which pin will trigger the configuration portal when set to LOW
|
||||
|
||||
WiFiManager wm;
|
|
@ -20,7 +20,6 @@
|
|||
*/
|
||||
|
||||
#include "BTCota.h"
|
||||
#include "debugport.h"
|
||||
|
||||
void initOTA(){
|
||||
// ArduinoOTA.setHostname("myesp32");
|
|
@ -22,7 +22,7 @@
|
|||
#include <ArduinoOTA.h>
|
||||
#include <Arduino.h>
|
||||
#include "BTCWifi.h"
|
||||
#include "DebugPort.h"
|
||||
#include "../Utility/DebugPort.h"
|
||||
|
||||
void initOTA();
|
||||
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