This commit is contained in:
olikraus
2016-07-28 13:52:20 +02:00
parent 2f57b018c3
commit 45346c6602
25 changed files with 5128 additions and 42 deletions
@@ -0,0 +1,167 @@
/*
A2Printer.ino
This is a special example for the A2 Thermo Printer
This example can NOT be used with LCDs and OLEDs
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
Copyright (c) 2016, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// use this serial interface
#define PRINTER_SERIAL Serial
// #define PRINTER_SERIAL Serial1
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
/* define our own serial function, this will be assigned later */
extern "C" uint8_t u8x8_byte_arduino_serial(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
uint8_t *data;
switch(msg)
{
case U8X8_MSG_BYTE_SEND:
data = (uint8_t *)arg_ptr;
while( arg_int > 0 )
{
while(PRINTER_SERIAL.available() > 0)
PRINTER_SERIAL.read();
PRINTER_SERIAL.write((uint8_t)*data);
data++;
arg_int--;
}
break;
case U8X8_MSG_BYTE_INIT:
delay(1000);
PRINTER_SERIAL.begin(19200);
/* send something.... */
//PRINTER_SERIAL.begin(9600);
PRINTER_SERIAL.write(27); /* ESC */
PRINTER_SERIAL.write(64); /* @ --> reset printer */
delay(1000);
break;
case U8X8_MSG_BYTE_SET_DC:
break;
case U8X8_MSG_BYTE_START_TRANSFER:
break;
case U8X8_MSG_BYTE_END_TRANSFER:
break;
default:
return 0;
}
return 1;
}
/* define a u8g2 object just with the base class */
/* the baseclass will be configured for the A2 printer in the setup() procedure */
class U8G2 u8g2;
void setup(void) {
u8g2_Setup_a2printer_384x240_1( /* several different a2 printer procs exist... */
u8g2.getU8g2(), /* this is a c call, so use the u8g2 struct instead of the class */
U8G2_R0, /* this defines the usual rotation of the bitmap */
u8x8_byte_arduino_serial, /* this is the new procedure from above */
u8x8_gpio_and_delay_arduino); /* standard arduino low level proc, used only for delay */
u8g2.beginSimple(); /* Do not clear the display, wake is not required */
}
#define XO 10
void drawLogo(void)
{
u8g2.setFontMode(1); // Transparent
u8g2.setFontDirection(0);
u8g2.setFont(u8g2_font_inb24_mf);
u8g2.drawStr(0+XO, 30, "U");
u8g2.setFontDirection(1);
u8g2.setFont(u8g2_font_inb30_mn);
u8g2.drawStr(21+XO,8,"8");
u8g2.setFontDirection(0);
u8g2.setFont(u8g2_font_inb24_mf);
u8g2.drawStr(51+XO,30,"g");
u8g2.drawStr(67+XO,30,"\xb2");
u8g2.drawHLine(2+XO, 35, 47);
u8g2.drawHLine(3+XO, 36, 47);
u8g2.drawVLine(45+XO, 32, 12);
u8g2.drawVLine(46+XO, 33, 12);
}
void drawURL(void)
{
u8g2.setFont(u8g2_font_6x12_tr);
u8g2.drawStr(1+XO,54,"github.com/olikraus/u8g2");
}
void loop(void) {
u8g2.firstPage();
do {
drawLogo();
drawURL();
/* worst case heating test */
u8g2.drawRBox(4,90,384-8,20, 8);
/* heating test with some text */
u8g2.setFont(u8g2_font_inb24_mf);
u8g2.drawStr(10,160,"Hello World!");
/* draw a frame around the picture */
u8g2.drawFrame(0,0,384,240);
u8g2.drawFrame(1,1,384-2,240-2);
} while ( u8g2.nextPage() );
delay(1000);
}
+3
View File
@@ -22,5 +22,8 @@ https://github.com/olikraus/u8g2 ChangeLog
2016-07-02 v2.1.0 olikraus@gmail.com
* T6963 Support
* Experimental Support for SSD1322 256x64
* A2 Thermoprinter Support
* Added several fonts from http://int10h.org/oldschool-pc-fonts/
+1 -1
View File
@@ -1,5 +1,5 @@
name=U8g2
version=2.1.1
version=2.1.2
author=oliver <olikraus@gmail.com>
maintainer=oliver <olikraus@gmail.com>
sentence=Library for monochrome LCDs and OLEDs. Successor of U8glib.
+7 -1
View File
@@ -111,7 +111,13 @@ class U8G2 : public Print
void begin(void) {
initDisplay(); clearDisplay(); setPowerSave(0); u8x8_utf8_init(u8g2_GetU8x8(&u8g2));}
/* note: call to u8x8_utf8_init is not required here, this is done in the setup procedures before */
initDisplay(); clearDisplay(); setPowerSave(0); }
void beginSimple(void) {
/* does not clear the display and does not wake up the display */
/* user is responsible for calling clearDisplay() and setPowerSave(0) */
initDisplay(); }
#ifdef U8X8_USE_PINS
/* use U8X8_PIN_NONE if a pin is not required */
+13 -13
View File
@@ -156,7 +156,7 @@ extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uin
{
uint8_t i, b;
uint8_t *data;
uint8_t takeover_edge = u8x8->display_info->sck_takeover_edge;
uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8);
uint8_t not_takeover_edge = 1 - takeover_edge;
/* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */
@@ -213,7 +213,7 @@ extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uin
/* no wait required here */
/* for SPI: setup correct level of the clock signal */
u8x8_gpio_SetSPIClock(u8x8, u8x8->display_info->sck_takeover_edge);
u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8));
break;
case U8X8_MSG_BYTE_SET_DC:
u8x8_gpio_SetDC(u8x8, arg_int);
@@ -258,7 +258,7 @@ extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uin
/*=============================================*/
extern "C" uint8_t u8x8_byte_arduino_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr)
extern "C" uint8_t u8x8_byte_arduino_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
#ifdef U8X8_HAVE_HW_SPI
uint8_t *data;
@@ -276,38 +276,38 @@ extern "C" uint8_t u8x8_byte_arduino_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t a
break;
case U8X8_MSG_BYTE_INIT:
/* disable chipselect */
u8x8_gpio_SetCS(u8g2, u8g2->display_info->chip_disable_level);
u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level);
/* no wait required here */
/* for SPI: setup correct level of the clock signal */
pinMode(11, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(13, u8g2->display_info->sck_takeover_edge);
digitalWrite(13, u8x8_GetSPIClockPhase(u8x8));
break;
case U8X8_MSG_BYTE_SET_DC:
u8x8_gpio_SetDC(u8g2, arg_int);
u8x8_gpio_SetDC(u8x8, arg_int);
break;
case U8X8_MSG_BYTE_START_TRANSFER:
SPI.begin();
if ( u8g2->display_info->sck_pulse_width_ns < 70 )
if ( u8x8->display_info->sck_pulse_width_ns < 70 )
SPI.setClockDivider( SPI_CLOCK_DIV2 );
else if ( u8g2->display_info->sck_pulse_width_ns < 140 )
else if ( u8x8->display_info->sck_pulse_width_ns < 140 )
SPI.setClockDivider( SPI_CLOCK_DIV4 );
else
SPI.setClockDivider( SPI_CLOCK_DIV8 );
SPI.setDataMode(SPI_MODE0);
SPI.setDataMode(u8x8->display_info->spi_mode);
SPI.setBitOrder(MSBFIRST);
u8x8_gpio_SetCS(u8g2, u8g2->display_info->chip_enable_level);
u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->post_chip_enable_wait_ns, NULL);
u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level);
u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL);
break;
case U8X8_MSG_BYTE_END_TRANSFER:
u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->pre_chip_disable_wait_ns, NULL);
u8x8_gpio_SetCS(u8g2, u8g2->display_info->chip_disable_level);
u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL);
u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level);
SPI.end();
+48
View File
@@ -405,6 +405,9 @@ uint8_t *u8g2_m_t6963_16_f(uint8_t *page_cnt);
uint8_t *u8g2_m_ssd1322_32_1(uint8_t *page_cnt);
uint8_t *u8g2_m_ssd1322_32_2(uint8_t *page_cnt);
uint8_t *u8g2_m_ssd1322_32_f(uint8_t *page_cnt);
uint8_t *u8g2_m_a2printer_48_1(uint8_t *page_cnt);
uint8_t *u8g2_m_a2printer_48_2(uint8_t *page_cnt);
uint8_t *u8g2_m_a2printer_48_f(uint8_t *page_cnt);
/* u8g2_d_memory.c generated code end */
@@ -470,6 +473,9 @@ void u8g2_Setup_t6963_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg
void u8g2_Setup_ssd1322_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
void u8g2_Setup_ssd1322_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
void u8g2_Setup_ssd1322_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
void u8g2_Setup_a2printer_384x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
void u8g2_Setup_a2printer_384x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
void u8g2_Setup_a2printer_384x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb);
/* u8g2_d_setup.c generated code end */
@@ -1261,6 +1267,48 @@ extern const uint8_t u8g2_font_pcsenior_8f[] U8G2_FONT_SECTION("u8g2_font_pcseni
extern const uint8_t u8g2_font_pcsenior_8r[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8r");
extern const uint8_t u8g2_font_pcsenior_8n[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8n");
extern const uint8_t u8g2_font_pcsenior_8u[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8u");
extern const uint8_t u8g2_font_pxplusibmcgathin_8f[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8f");
extern const uint8_t u8g2_font_pxplusibmcgathin_8r[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8r");
extern const uint8_t u8g2_font_pxplusibmcgathin_8n[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8n");
extern const uint8_t u8g2_font_pxplusibmcgathin_8u[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8u");
extern const uint8_t u8g2_font_pxplusibmcga_8f[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8f");
extern const uint8_t u8g2_font_pxplusibmcga_8r[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8r");
extern const uint8_t u8g2_font_pxplusibmcga_8n[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8n");
extern const uint8_t u8g2_font_pxplusibmcga_8u[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8u");
extern const uint8_t u8g2_font_pxplustandynewtv_8f[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8f");
extern const uint8_t u8g2_font_pxplustandynewtv_8r[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8r");
extern const uint8_t u8g2_font_pxplustandynewtv_8n[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8n");
extern const uint8_t u8g2_font_pxplustandynewtv_8u[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8u");
extern const uint8_t u8g2_font_pxplustandynewtv_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_t_all");
extern const uint8_t u8g2_font_pxplustandynewtv_8_all[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8_all");
extern const uint8_t u8g2_font_pxplusibmvga9_tf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tf");
extern const uint8_t u8g2_font_pxplusibmvga9_tr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tr");
extern const uint8_t u8g2_font_pxplusibmvga9_tn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tn");
extern const uint8_t u8g2_font_pxplusibmvga9_mf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mf");
extern const uint8_t u8g2_font_pxplusibmvga9_mr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mr");
extern const uint8_t u8g2_font_pxplusibmvga9_mn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mn");
extern const uint8_t u8g2_font_pxplusibmvga9_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_t_all");
extern const uint8_t u8g2_font_pxplusibmvga9_m_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_m_all");
extern const uint8_t u8g2_font_pxplusibmvga8_tf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tf");
extern const uint8_t u8g2_font_pxplusibmvga8_tr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tr");
extern const uint8_t u8g2_font_pxplusibmvga8_tn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tn");
extern const uint8_t u8g2_font_pxplusibmvga8_mf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mf");
extern const uint8_t u8g2_font_pxplusibmvga8_mr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mr");
extern const uint8_t u8g2_font_pxplusibmvga8_mn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mn");
extern const uint8_t u8g2_font_pxplusibmvga8_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_t_all");
extern const uint8_t u8g2_font_pxplusibmvga8_m_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_m_all");
extern const uint8_t u8g2_font_px437wyse700a_tf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tf");
extern const uint8_t u8g2_font_px437wyse700a_tr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tr");
extern const uint8_t u8g2_font_px437wyse700a_tn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tn");
extern const uint8_t u8g2_font_px437wyse700a_mf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mf");
extern const uint8_t u8g2_font_px437wyse700a_mr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mr");
extern const uint8_t u8g2_font_px437wyse700a_mn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mn");
extern const uint8_t u8g2_font_px437wyse700b_tf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tf");
extern const uint8_t u8g2_font_px437wyse700b_tr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tr");
extern const uint8_t u8g2_font_px437wyse700b_tn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tn");
extern const uint8_t u8g2_font_px437wyse700b_mf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mf");
extern const uint8_t u8g2_font_px437wyse700b_mr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mr");
extern const uint8_t u8g2_font_px437wyse700b_mn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mn");
/* end font list */
+18
View File
@@ -201,4 +201,22 @@ uint8_t *u8g2_m_ssd1322_32_f(uint8_t *page_cnt)
*page_cnt = 8;
return buf;
}
uint8_t *u8g2_m_a2printer_48_1(uint8_t *page_cnt)
{
static uint8_t buf[384];
*page_cnt = 1;
return buf;
}
uint8_t *u8g2_m_a2printer_48_2(uint8_t *page_cnt)
{
static uint8_t buf[768];
*page_cnt = 2;
return buf;
}
uint8_t *u8g2_m_a2printer_48_f(uint8_t *page_cnt)
{
static uint8_t buf[11520];
*page_cnt = 30;
return buf;
}
/* end of generated code */
+28
View File
@@ -563,4 +563,32 @@ void u8g2_Setup_ssd1322_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_m
buf = u8g2_m_ssd1322_32_f(&tile_buf_height);
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
}
/* a2printer */
/* a2printer 1 */
void u8g2_Setup_a2printer_384x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
{
uint8_t tile_buf_height;
uint8_t *buf;
u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb);
buf = u8g2_m_a2printer_48_1(&tile_buf_height);
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
}
/* a2printer 2 */
void u8g2_Setup_a2printer_384x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
{
uint8_t tile_buf_height;
uint8_t *buf;
u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb);
buf = u8g2_m_a2printer_48_2(&tile_buf_height);
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
}
/* a2printer f */
void u8g2_Setup_a2printer_384x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
{
uint8_t tile_buf_height;
uint8_t *buf;
u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb);
buf = u8g2_m_a2printer_48_f(&tile_buf_height);
u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation);
}
/* end of generated code */
File diff suppressed because it is too large Load Diff
+25 -5
View File
@@ -211,10 +211,15 @@ struct u8x8_display_info_struct
/* AVR: below 70: DIV2, 8 MHz, >= 70 --> 4MHz clock (DIV4) */
uint8_t sck_pulse_width_ns; /* UC1701: 50ns */
/* data takeover edge: 0=falling edge, 1=rising edge*/
/* initial default value for sck is low (0) for falling edge and high for rising edge */
/* this means, default value is identical to sck_takeover_edge */
uint8_t sck_takeover_edge; /* UC1601: rising edge (1) */
/* previous name "sck_takeover_edge" renamed to "spi_mode" */
/* bit 0 of spi_mode is equal to the value of the previous variable sck_takeover_edge */
/* SPI has four clock modes: */
/* 0: clock active high, data out on falling edge */
/* 1: clock active high, data out on rising edge */
/* 2: clock active low, data out on rising edge */
/* 3: clock active low, data out on falling edge */
/* most displays have clock mode 1 */
uint8_t spi_mode;
/* == I2C == */
uint8_t i2c_bus_clock_100kHz; /* UC1601: 1000000000/275 = 37 *100k */
@@ -314,7 +319,8 @@ struct u8x8_struct
#define u8x8_GetRows(u8x8) ((u8x8)->display_info->tile_height)
#define u8x8_GetI2CAddress(u8x8) ((u8x8)->i2c_address)
#define u8x8_SetGPIOResult(u8x8, val) ((u8x8)->gpio_result = (val))
#define u8x8_GetSPIClockPhase(u8x8) ((u8x8)->display_info->spi_mode & 0x01) /* this returns "sck_takeover_edge" */
#define u8x8_GetSPIClockPolarity(u8x8) (((u8x8)->display_info->spi_mode & 0x02) >> 1)
#ifdef U8X8_USE_PINS
@@ -516,6 +522,7 @@ uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) U8X8_NOINLINE;
#define U8X8_END() (0xff)
void u8x8_cad_SendSequence(u8x8_t *u8x8, uint8_t const *data);
uint8_t u8x8_cad_empty(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_cad_110(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_cad_001(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_cad_011(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
@@ -675,6 +682,7 @@ uint8_t u8x8_d_t6963_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *a
uint8_t u8x8_d_t6963_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_ssd1322_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_t6963_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_d_a2printer_384x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
/*==========================================*/
@@ -785,6 +793,18 @@ extern const uint8_t u8x8_font_pcsenior_f[] U8X8_FONT_SECTION("u8x8_font_pcsenio
extern const uint8_t u8x8_font_pcsenior_r[] U8X8_FONT_SECTION("u8x8_font_pcsenior_r");
extern const uint8_t u8x8_font_pcsenior_n[] U8X8_FONT_SECTION("u8x8_font_pcsenior_n");
extern const uint8_t u8x8_font_pcsenior_u[] U8X8_FONT_SECTION("u8x8_font_pcsenior_u");
extern const uint8_t u8x8_font_pxplusibmcgathin_f[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_f");
extern const uint8_t u8x8_font_pxplusibmcgathin_r[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_r");
extern const uint8_t u8x8_font_pxplusibmcgathin_n[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_n");
extern const uint8_t u8x8_font_pxplusibmcgathin_u[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_u");
extern const uint8_t u8x8_font_pxplusibmcga_f[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_f");
extern const uint8_t u8x8_font_pxplusibmcga_r[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_r");
extern const uint8_t u8x8_font_pxplusibmcga_n[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_n");
extern const uint8_t u8x8_font_pxplusibmcga_u[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_u");
extern const uint8_t u8x8_font_pxplustandynewtv_f[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_f");
extern const uint8_t u8x8_font_pxplustandynewtv_r[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_r");
extern const uint8_t u8x8_font_pxplustandynewtv_n[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_n");
extern const uint8_t u8x8_font_pxplustandynewtv_u[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_u");
/* end font list */
+1 -1
View File
@@ -139,7 +139,7 @@ uint16_t u8x8_get_encoding_from_utf8_string(const char **str)
/* reset the internal state machine */
void u8x8_utf8_init(u8x8_t *u8x8)
{
u8x8->utf8_state = 0;
u8x8->utf8_state = 0; /* also reset during u8x8_SetupDefaults() */
}
uint16_t u8x8_ascii_next(u8x8_t *u8x8, uint8_t b)
+7 -7
View File
@@ -66,7 +66,7 @@ uint8_t u8x8_byte_EndTransfer(u8x8_t *u8x8)
Uses:
u8x8->display_info->sda_setup_time_ns
u8x8->display_info->sck_pulse_width_ns
u8x8->display_info->sck_takeover_edge
u8x8->display_info->spi_mode
u8x8->display_info->chip_disable_level
u8x8->display_info->chip_enable_level
u8x8->display_info->post_chip_enable_wait_ns
@@ -89,7 +89,7 @@ uint8_t u8x8_byte_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
{
uint8_t i, b;
uint8_t *data;
uint8_t takeover_edge = u8x8->display_info->sck_takeover_edge;
uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8);
uint8_t not_takeover_edge = 1 - takeover_edge;
switch(msg)
@@ -123,7 +123,7 @@ uint8_t u8x8_byte_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
/* no wait required here */
/* for SPI: setup correct level of the clock signal */
u8x8_gpio_SetSPIClock(u8x8, u8x8->display_info->sck_takeover_edge);
u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8));
break;
case U8X8_MSG_BYTE_SET_DC:
u8x8_gpio_SetDC(u8x8, arg_int);
@@ -250,7 +250,7 @@ uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
{
uint8_t i;
uint8_t *data;
uint8_t takeover_edge = u8x8->display_info->sck_takeover_edge;
uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8);
uint8_t not_takeover_edge = 1 - takeover_edge;
uint16_t b;
static uint8_t last_dc;
@@ -288,7 +288,7 @@ uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
/* no wait required here */
/* for SPI: setup correct level of the clock signal */
u8x8_gpio_SetSPIClock(u8x8, u8x8->display_info->sck_takeover_edge);
u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8));
break;
case U8X8_MSG_BYTE_SET_DC:
last_dc = arg_int;
@@ -314,7 +314,7 @@ uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
static void u8x8_byte_st7920_send_byte(u8x8_t *u8x8, uint8_t b) U8X8_NOINLINE;
static void u8x8_byte_st7920_send_byte(u8x8_t *u8x8, uint8_t b)
{
uint8_t takeover_edge = u8x8->display_info->sck_takeover_edge;
uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8);
uint8_t not_takeover_edge = 1 - takeover_edge;
uint8_t cnt;
@@ -376,7 +376,7 @@ uint8_t u8x8_byte_st7920_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void
/* no wait required here */
/* for SPI: setup correct level of the clock signal */
u8x8_gpio_SetSPIClock(u8x8, u8x8->display_info->sck_takeover_edge);
u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8));
break;
case U8X8_MSG_BYTE_SET_DC:
last_dc = arg_int;
+22
View File
@@ -158,6 +158,28 @@ void u8x8_cad_SendSequence(u8x8_t *u8x8, uint8_t const *data)
}
uint8_t u8x8_cad_empty(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
switch(msg)
{
case U8X8_MSG_CAD_SEND_CMD:
u8x8_byte_SendByte(u8x8, arg_int);
break;
case U8X8_MSG_CAD_SEND_ARG:
u8x8_byte_SendByte(u8x8, arg_int);
break;
case U8X8_MSG_CAD_SEND_DATA:
case U8X8_MSG_CAD_INIT:
case U8X8_MSG_CAD_START_TRANSFER:
case U8X8_MSG_CAD_END_TRANSFER:
return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr);
default:
return 0;
}
return 1;
}
/*
convert to bytes by using
dc = 1 for commands and args and
+181
View File
@@ -0,0 +1,181 @@
/*
u8x8_d_a2printer.c
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
Copyright (c) 2016, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Use DC2 bitmap command of the A2 Micro panel termal printer
double stroke
*/
#include "u8x8.h"
#define LINE_MIN_DELAY_MS 15
/* higher values improve quality */
/* however if the value is too high (>=5) then form feed does not work any more */
#define LINE_EXTRA_8PIXEL_DELAY_MS 3
/* this must be a power of two and between 1 and 8 */
/* best quality only with 1 */
#define NO_OF_LINES_TO_SEND_WITHOUT_DELAY 1
/* calculates the delay, based on the number of black pixel */
/* actually only "none-zero" bytes are calculated which is, of course not so accurate, but should be good enough */
uint16_t get_delay_in_milliseconds(uint8_t cnt, uint8_t *data)
{
uint8_t i;
uint16_t time = LINE_MIN_DELAY_MS;
for ( i = 0; i < cnt; i++ )
if ( data[i] != 0 )
time += LINE_EXTRA_8PIXEL_DELAY_MS;
return time;
}
uint8_t u8x8_d_a2printer_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
uint8_t c, i, j;
uint8_t *ptr;
uint16_t delay_in_milliseconds;
switch(msg)
{
/* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */
/*
case U8X8_MSG_DISPLAY_SETUP_MEMORY:
break;
*/
case U8X8_MSG_DISPLAY_INIT:
u8x8_d_helper_display_init(u8x8);
// no setup required
// u8x8_cad_SendSequence(u8x8, u8x8_d_a2printer_init_seq);
break;
case U8X8_MSG_DISPLAY_SET_POWER_SAVE:
// no powersave
break;
case U8X8_MSG_DISPLAY_DRAW_TILE:
u8x8_cad_StartTransfer(u8x8);
u8x8_cad_SendCmd(u8x8, 27); /* ESC */
u8x8_cad_SendCmd(u8x8, 55 ); /* parameter command */
/* increasing the "max printing dots" requires a good power supply, but LINE_EXTRA_8PIXEL_DELAY_MS could be reduced then */
u8x8_cad_SendCmd(u8x8, 0); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1) ... lower values improve, probably my current supply is not sufficient */
u8x8_cad_SendCmd(u8x8, 200); /* 3-255 Heating time,Unit(10us),Default:80(800us) */
u8x8_cad_SendCmd(u8x8, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us) ... does not have much influence */
//c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */
c = u8x8->display_info->tile_width;
ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */
u8x8_cad_SendCmd(u8x8, 18); /* DC2 */
u8x8_cad_SendCmd(u8x8, 42 ); /* * */
u8x8_cad_SendCmd(u8x8, 8 ); /* height */
u8x8_cad_SendCmd(u8x8, c ); /* c, u8x8->display_info->tile_width */
for( j = 0; j < 8 / NO_OF_LINES_TO_SEND_WITHOUT_DELAY; j ++ )
{
delay_in_milliseconds = 0;
for( i = 0; i < NO_OF_LINES_TO_SEND_WITHOUT_DELAY; i++ )
{
u8x8_cad_SendData(u8x8, c, ptr); /* c, note: SendData can not handle more than 255 bytes, send one line of data */
delay_in_milliseconds += get_delay_in_milliseconds(c, ptr);
ptr += c;
}
while( delay_in_milliseconds > 200 )
{
u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_MILLI, 200, NULL);
delay_in_milliseconds -= 200;
}
u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_MILLI, delay_in_milliseconds, NULL);
}
/* set parameters back to their default values */
u8x8_cad_SendCmd(u8x8, 27); /* ESC */
u8x8_cad_SendCmd(u8x8, 55 ); /* parameter command */
u8x8_cad_SendCmd(u8x8, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/
u8x8_cad_SendCmd(u8x8, 80); /* 3-255 Heating time,Unit(10us),Default:80(800us) */
u8x8_cad_SendCmd(u8x8, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/
u8x8_cad_EndTransfer(u8x8);
break;
default:
return 0;
}
return 1;
}
static const u8x8_display_info_t u8x8_a2printer_384x240_display_info =
{
/* most of the settings are not required, because this is a serial RS232 printer */
/* chip_enable_level = */ 1,
/* chip_disable_level = */ 0,
/* post_chip_enable_wait_ns = */ 5,
/* pre_chip_disable_wait_ns = */ 5,
/* reset_pulse_width_ms = */ 1,
/* post_reset_wait_ms = */ 6,
/* sda_setup_time_ns = */ 20,
/* sck_pulse_width_ns = */ 140,
/* spi_mode = */ 1, /* old: sck_takeover_edge, new: active high (bit 1), rising edge (bit 0) */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 30,
/* write_pulse_width_ns = */ 40,
/* tile_width = */ 48,
/* tile_hight = */ 30,
/* default_x_offset = */ 0,
/* flipmode_x_offset = */ 0,
/* pixel_width = */ 384,
/* pixel_height = */ 240
};
uint8_t u8x8_d_a2printer_384x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
switch(msg)
{
case U8X8_MSG_DISPLAY_SETUP_MEMORY:
u8x8_d_helper_display_setup_memory(u8x8, &u8x8_a2printer_384x240_display_info);
break;
default:
return u8x8_d_a2printer_common(u8x8, msg, arg_int, arg_ptr);
}
return 1;
}
+1 -1
View File
@@ -181,7 +181,7 @@ static const u8x8_display_info_t u8x8_ld7032_60x32_display_info =
/* post_reset_wait_ms = */ 100,
/* sda_setup_time_ns = */ 30, /* 20ns, but cycle time is 60ns, so use 60/2 */
/* sck_pulse_width_ns = */ 30, /* 20ns, but cycle time is 60ns, so use 60/2 */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 20,
/* write_pulse_width_ns = */ 40,
+1 -1
View File
@@ -54,7 +54,7 @@ static const u8x8_display_info_t u8x8_ls013b7dh03_128x128_display_info =
/* post_reset_wait_ms = */ 6,
/* sda_setup_time_ns = */ 227, /* 227 nsec according to the datasheet */
/* sck_pulse_width_ns = */ 255, /* 450 nsec according to the datasheet */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 3, /* active low, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 100,
/* write_pulse_width_ns = */ 100,
+1 -1
View File
@@ -188,7 +188,7 @@ static const u8x8_display_info_t u8x8_ssd1306_128x32_univision_display_info =
/* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */
/* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */
/* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 40,
/* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */
+2 -2
View File
@@ -188,7 +188,7 @@ static const u8x8_display_info_t u8x8_ssd1306_128x64_noname_display_info =
/* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */
/* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */
/* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 40,
/* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */
@@ -222,7 +222,7 @@ static const u8x8_display_info_t u8x8_sh1106_128x64_noname_display_info =
/* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */
/* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */
/* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 40,
/* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */
+1 -1
View File
@@ -198,7 +198,7 @@ static const u8x8_display_info_t u8x8_ssd1322_256x64_display_info =
/* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */
/* sda_setup_time_ns = */ 50, /* SSD1322: 15ns, but cycle time is 100ns, so use 100/2 */
/* sck_pulse_width_ns = */ 50, /* SSD1322: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 10,
/* write_pulse_width_ns = */ 150, /* SSD1322: cycle time is 300ns, so use 300/2 = 150 */
+2 -2
View File
@@ -81,7 +81,7 @@ static const u8x8_display_info_t u8x8_st7565_128x64_display_info =
/* post_reset_wait_ms = */ 1,
/* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */
/* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */
/* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */
@@ -104,7 +104,7 @@ static const u8x8_display_info_t u8x8_st7565_128x32_display_info =
/* post_reset_wait_ms = */ 1,
/* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */
/* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */
/* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */
+2 -2
View File
@@ -156,7 +156,7 @@ static const u8x8_display_info_t u8x8_st7920_192x32_display_info =
/* post_reset_wait_ms = */ 6,
/* sda_setup_time_ns = */ 20,
/* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* old: sck_takeover_edge, new: active high (bit 1), rising edge (bit 0) */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 30,
/* write_pulse_width_ns = */ 40,
@@ -179,7 +179,7 @@ static const u8x8_display_info_t u8x8_st7920_128x64_display_info =
/* post_reset_wait_ms = */ 6,
/* sda_setup_time_ns = */ 20,
/* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 30,
/* write_pulse_width_ns = */ 40,
+3 -3
View File
@@ -134,7 +134,7 @@ static const u8x8_display_info_t u8x8_t6963_240x128_display_info =
/* post_reset_wait_ms = */ 6,
/* sda_setup_time_ns = */ 20,
/* sck_pulse_width_ns = */ 140,
/* sck_takeover_edge = */ 1,
/* spi_mode = */ 1,
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 80,
/* write_pulse_width_ns = */ 80,
@@ -220,7 +220,7 @@ static const u8x8_display_info_t u8x8_t6963_256x64_display_info =
/* post_reset_wait_ms = */ 6,
/* sda_setup_time_ns = */ 20,
/* sck_pulse_width_ns = */ 140,
/* sck_takeover_edge = */ 1,
/* spi_mode = */ 1,
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 80,
/* write_pulse_width_ns = */ 80,
@@ -302,7 +302,7 @@ static const u8x8_display_info_t u8x8_t6963_128x64_display_info =
/* post_reset_wait_ms = */ 6,
/* sda_setup_time_ns = */ 20,
/* sck_pulse_width_ns = */ 140,
/* sck_takeover_edge = */ 1,
/* spi_mode = */ 1,
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 80,
/* write_pulse_width_ns = */ 80,
+1 -1
View File
@@ -107,7 +107,7 @@ static const u8x8_display_info_t u8x8_uc1701_display_info =
/* post_reset_wait_ms = */ 6,
/* sda_setup_time_ns = */ 12,
/* sck_pulse_width_ns = */ 75, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */
/* sck_takeover_edge = */ 1, /* rising edge */
/* spi_mode = */ 1, /* active high, rising edge */
/* i2c_bus_clock_100kHz = */ 4,
/* data_setup_time_ns = */ 30,
/* write_pulse_width_ns = */ 40,
+402
View File
@@ -1079,3 +1079,405 @@ const uint8_t u8x8_font_pcsenior_u[515] U8X8_FONT_SECTION("u8x8_font_pcsenior_u"
"\0Cg<\30<gC\0\7OxxO\7\0\0GcqYMgs\0\0AA\0"
"\0\0\1\3\6\14\30\60`\0\0AA\0\0\0\10\14\6\3\6\14\10\0\200\200\200\200\200\200"
"\200\200";
/*
Fontname: -FreeType-PxPlus IBM CGAthin-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 192/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplusibmcgathin_f[1794] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_f") =
" \377\0\0\0\0\0\0\0\0\0\0\6_\6\0\0\0\0\0\7\0\0\7\0\0\0\24\24\24"
"\24\0\0$*kk*\22\0\0F&\20\10db\0\60JEM\62HH\0\0\0\4\3\0\0"
"\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\10*\34\34\34*\10\0\0\10\10>\10\10"
"\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20\10\4"
"\2\0\0>aQIE>\0\0DB@@\0\0\0bQQIIf\0\0\42AIII"
"\66\0\20\30\24RP\20\0\0'EEEE\71\0\0<JIII\60\0\0\3\1q\11\5"
"\3\0\0\66IIII\66\0\0\6III)\36\0\0\0\0f\0\0\0\0\0\0\200f\0\0"
"\0\0\0\10\24\42A\0\0\0\0$$$$$$\0\0\0\0A\42\24\10\0\0\2\1\1Q\11"
"\6\0\0>A]UU\36\0\0|\22\21\21\22|\0\0AIII\66\0\0\34\42AAA"
"\42\0\0AAA\42\34\0\0AI]Ac\0\0AI\35\1\3\0\0\34\42AQQ"
"r\0\0\10\10\10\10\0\0\0AA\0\0\0\0\60@@A?\1\0\0A\10\24\42"
"A@\0AA@@`\0\0\1\2\4\2\1\0\1\2\4\10\0\0\34\42AA\42"
"\34\0\0AI\11\11\6\0\0\36!!\61!^@\0AI\31)F\0\0&IIII"
"\62\0\0\3\1AA\1\3\0?@@@@?\0\0\17\20 @ \20\17\0?@@\70@"
"@?\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0AAA\0"
"\0\0\1\2\4\10\20 @\0\0AAA\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200\200\200"
"\200\200\0\0\0\3\4\0\0\0\0 TTTTx@\0\1\60HHH\60\0\70DDDD"
"(\0\0\60HHH\61@\0\70TTTT\30\0\0\0H~I\1\2\0\0\230\244\244\244\244"
"x\4\0A\10\4\4x\0\0\0D}@\0\0\0\0`\200\200\200\204}\0\0\1\20(D"
"@\0\0\0A@\0\0\0\0|\4\4x\4\4x\0|\10\4\4\4x\0\0\70DDDD"
"\70\0\0\204\374\230$$\30\0\0\30$$\230\374\204\0\0D|H\4\4\30\0\0HTTTT"
"$\0\0\4\4?DD \0\0<@@@ |\0\0\14\20 @ \20\14\0<@@\70@"
"@<\0D(\20(D\0\0\0\234\240\240\240\240|\0\0DdTLD\0\0\0\10\10\66AA"
"\0\0\0\0\0w\0\0\0\0\0\0AA\66\10\10\0\0\2\1\1\2\2\1\0\0pHDBD"
"Hp\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\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\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\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\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\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\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\0z\0\0\0\0\0\30$$\347$$\0\0h^IAB"
" \0BZ$$$ZB\0\0\25\26|\26\25\0\0\0\0\0w\0\0\0\0@\332\247\245\345Y"
"\3\2\0\1\0\0\0\1\0\0~\201\231\245\245\201~\0\0&)))/(\0\0\10\24\42\10\24"
"\42\0\0\10\10\10\10\10\70\0\0\10\10\10\10\10\10\0~\201\275\225\251\201~\0\1\1\1\1\1\1"
"\1\1\0\6\11\11\6\0\0\0\0DD_DD\0\0\0\22\31\25\22\0\0\0\0\12\21\25\12\0"
"\0\0\0\0\0\2\1\0\0\0\200~\20\20\20\16\20\0\6\11\11\1\1\1\0\0\0\20\20\0"
"\0\0\0\0\200\200\240@\0\0\0\22\37\20\0\0\0\0\0&)))&\0\0\0\42\24\10\42\24"
"\10\0J/\30(\64*\375 J/\30\210\324\312\251\260\225U*PhT\372@\0\60HE@@"
" \0\1y\24\22\22\24x\0\0x\24\22\22\24y\1\0r)%%)r\0\0y\25\25\25\25"
"y\0\0y\24\22\22\24y\0\0p(++(p\0\0|\12\11\11II\0\16\221\221\261\261"
"J\0\0E}TTD\0\0\0D|TUE\0\0\2E}UUE\2\0\0E|TTE"
"\0\0\0\1E|D\0\0\0\0\0D|E\1\0\0\2\1E}E\1\2\0\0\1D|D\1"
"\0\0\0IIA\42\34\0\0z\11\21\42Cx\0\1\31$BB$\30\0\0\30$BB$"
"\31\1\22)EEE)\22\0\0\21)EEE)\21\0\31$BB$\31\0\0\42\24\10\24\42"
"\0\0>qYIMG>\0\0=A@@@<\0\0<@@@A=\0\0:AAAA"
":\0\0=@@@@=\0\0\4HpH\5\1\0\0AU\24\24\10\0\0~\1\1IV"
" \0\0 UUTx@\0\0 TTUy@\0\0\42UUUyB\0\0!UUUU"
"y@\0!TTTxA\0\0 TUTx@\0\0 TTx\70TT\0\30$\244\244\344"
"@\0\0\70UUTT\30\0\0\70TTUU\30\0\0:UUUU\32\0\0\71TTTT"
"\31\0\0\0\1E|@\0\0\0\0\0D}A\0\0\2\1E}A\2\0\0\0\0\1D|A"
"\0\0\0\60JJK>\2\0\0z\11\11\12\12q\0\0\60IJHH\60\0\0\60HHJI"
"\60\0\0\60JIIJ\60\0\0\62JJJJ\62\0\0\62HHHH\62\0\0\10\10kk\10"
"\10\0\270DdTLD:\0\0\70AB@@\70\0\0\70@@DB\70\0\0\70BAAB"
"\70\0\0:@@@z@\0\0\30\240\240\240\242z\0\0\201\377\244$$\30\0\0\32\240\240\240\240"
"z";
/*
Fontname: -FreeType-PxPlus IBM CGAthin-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 96/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplusibmcgathin_r[771] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_r") =
" \0\0\0\0\0\0\0\0\0\0\6_\6\0\0\0\0\0\7\0\0\7\0\0\0\24\24\24"
"\24\0\0$*kk*\22\0\0F&\20\10db\0\60JEM\62HH\0\0\0\4\3\0\0"
"\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\10*\34\34\34*\10\0\0\10\10>\10\10"
"\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20\10\4"
"\2\0\0>aQIE>\0\0DB@@\0\0\0bQQIIf\0\0\42AIII"
"\66\0\20\30\24RP\20\0\0'EEEE\71\0\0<JIII\60\0\0\3\1q\11\5"
"\3\0\0\66IIII\66\0\0\6III)\36\0\0\0\0f\0\0\0\0\0\0\200f\0\0"
"\0\0\0\10\24\42A\0\0\0\0$$$$$$\0\0\0\0A\42\24\10\0\0\2\1\1Q\11"
"\6\0\0>A]UU\36\0\0|\22\21\21\22|\0\0AIII\66\0\0\34\42AAA"
"\42\0\0AAA\42\34\0\0AI]Ac\0\0AI\35\1\3\0\0\34\42AQQ"
"r\0\0\10\10\10\10\0\0\0AA\0\0\0\0\60@@A?\1\0\0A\10\24\42"
"A@\0AA@@`\0\0\1\2\4\2\1\0\1\2\4\10\0\0\34\42AA\42"
"\34\0\0AI\11\11\6\0\0\36!!\61!^@\0AI\31)F\0\0&IIII"
"\62\0\0\3\1AA\1\3\0?@@@@?\0\0\17\20 @ \20\17\0?@@\70@"
"@?\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0AAA\0"
"\0\0\1\2\4\10\20 @\0\0AAA\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200\200\200"
"\200\200\0\0\0\3\4\0\0\0\0 TTTTx@\0\1\60HHH\60\0\70DDDD"
"(\0\0\60HHH\61@\0\70TTTT\30\0\0\0H~I\1\2\0\0\230\244\244\244\244"
"x\4\0A\10\4\4x\0\0\0D}@\0\0\0\0`\200\200\200\204}\0\0\1\20(D"
"@\0\0\0A@\0\0\0\0|\4\4x\4\4x\0|\10\4\4\4x\0\0\70DDDD"
"\70\0\0\204\374\230$$\30\0\0\30$$\230\374\204\0\0D|H\4\4\30\0\0HTTTT"
"$\0\0\4\4?DD \0\0<@@@ |\0\0\14\20 @ \20\14\0<@@\70@"
"@<\0D(\20(D\0\0\0\234\240\240\240\240|\0\0DdTLD\0\0\0\10\10\66AA"
"\0\0\0\0\0w\0\0\0\0\0\0AA\66\10\10\0\0\2\1\1\2\2\1\0\0pHDBD"
"Hp";
/*
Fontname: -FreeType-PxPlus IBM CGAthin-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 18/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplusibmcgathin_n[218] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_n") =
" :\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\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\0\0\10*\34\34\34*\10\0\0\10\10>\10\10"
"\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20\10\4"
"\2\0\0>aQIE>\0\0DB@@\0\0\0bQQIIf\0\0\42AIII"
"\66\0\20\30\24RP\20\0\0'EEEE\71\0\0<JIII\60\0\0\3\1q\11\5"
"\3\0\0\66IIII\66\0\0\6III)\36\0\0\0\0f\0\0\0";
/*
Fontname: -FreeType-PxPlus IBM CGAthin-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 64/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplusibmcgathin_u[515] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_u") =
" _\0\0\0\0\0\0\0\0\0\0\6_\6\0\0\0\0\0\7\0\0\7\0\0\0\24\24\24"
"\24\0\0$*kk*\22\0\0F&\20\10db\0\60JEM\62HH\0\0\0\4\3\0\0"
"\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\10*\34\34\34*\10\0\0\10\10>\10\10"
"\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20\10\4"
"\2\0\0>aQIE>\0\0DB@@\0\0\0bQQIIf\0\0\42AIII"
"\66\0\20\30\24RP\20\0\0'EEEE\71\0\0<JIII\60\0\0\3\1q\11\5"
"\3\0\0\66IIII\66\0\0\6III)\36\0\0\0\0f\0\0\0\0\0\0\200f\0\0"
"\0\0\0\10\24\42A\0\0\0\0$$$$$$\0\0\0\0A\42\24\10\0\0\2\1\1Q\11"
"\6\0\0>A]UU\36\0\0|\22\21\21\22|\0\0AIII\66\0\0\34\42AAA"
"\42\0\0AAA\42\34\0\0AI]Ac\0\0AI\35\1\3\0\0\34\42AQQ"
"r\0\0\10\10\10\10\0\0\0AA\0\0\0\0\60@@A?\1\0\0A\10\24\42"
"A@\0AA@@`\0\0\1\2\4\2\1\0\1\2\4\10\0\0\34\42AA\42"
"\34\0\0AI\11\11\6\0\0\36!!\61!^@\0AI\31)F\0\0&IIII"
"\62\0\0\3\1AA\1\3\0?@@@@?\0\0\17\20 @ \20\17\0?@@\70@"
"@?\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0AAA\0"
"\0\0\1\2\4\10\20 @\0\0AAA\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200\200\200"
"\200\200";
/*
Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 192/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplusibmcga_f[1794] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_f") =
" \377\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\24"
"\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0\0\0"
"\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>\10\10"
"\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14\6\3"
"\1\0>qYM>\0@B@@\0\0bsYIOf\0\0\42cII\66"
"\0\0\30\34\26SP\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy\17\7"
"\0\0\66II\66\0\0\6OIi?\36\0\0\0\0ff\0\0\0\0\0@v\66\0\0"
"\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY\17\6"
"\0\0>A]]\37\36\0|~\23\23~|\0\0AII\66\0\34>cAAc"
"\42\0AAc>\34\0AI]Ac\0AI\35\1\3\0\34>cAQs"
"r\0\10\10\0\0\0AA\0\0\0\60p@A?\1\0A\10\34w"
"c\0AA@`p\0\16\34\16\0\6\14\30\0\34>cAc>"
"\34\0AI\11\17\6\0\36?!q^\0\0A\11\31f\0\42gMYs\42"
"\0\0\3AA\3\0\0@@\0\0\37?``?\37\0\0\60\30\60"
"\0Cg<\30<gC\0\7OxxO\7\0\0GcqYMgs\0\0AA\0"
"\0\0\1\3\6\14\30\60`\0\0AA\0\0\0\10\14\6\3\6\14\10\0\200\200\200\200\200\200"
"\200\200\0\0\3\7\4\0\0\0 tTT<x@\0A?HHx\60\0\70|DDl("
"\0\0\60xHI?@\0\70|TT\134\30\0\0H~I\3\2\0\0\230\274\244\244\370|"
"\4\0A\10\4|x\0\0D}}@\0\0\0`\340\200\200\375}\0\0A\20\70l"
"D\0\0A@\0\0\0||\30\70\34|x\0||\4\4|x\0\0\70|DD|\70"
"\0\0\204\374\370\244$<\30\0\30<$\244\370\374\204\0D|xL\4\34\30\0H\134TTt$"
"\0\0\0\4>D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70p|"
"<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>wAA"
"\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLFLx"
"p\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\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\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\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\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\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\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\30<$\347\347$$\0h~ICf"
" \0Z~$$$~Z\0+/\374\374/+\0\0\0\0\0ww\0\0\0@\332\277\245\375Y"
"\3\2\1\1\0\0\0\1\1\0~\201\231\245\245\201~\0\0&/)//(\0\10\34\66\42\10\34"
"\66\42\10\10\10\10\70\70\0\0\0\10\10\10\10\10\10\0~\201\275\225\251\201~\0\1\1\1\1\1\1"
"\1\1\0\6\17\11\17\6\0\0DD__DD\0\0\0\31\35\27\22\0\0\0\0\21\25\37\12\0"
"\0\0\0\0\2\3\1\0\0\0\200\376~ >\36\0\6\17\11\1\0\0\0\20\20\0"
"\0\0\0\0\200\240\340@\0\0\0\22\37\37\20\0\0\0\0&/)/&\0\0\42\66\34\10\42\66"
"\34\10Oo\60\30lv\373\371Oo\60\30\314\356\273\221\221\325:Xl\366\362\60xME` "
"\0\0y}\26\22\26|x\0x|\26\22\26}y\0r{)){r\0\0y}\25\25}y"
"\0\0y}\26\22\26}y\0px++xp\0\0|~\13\11I\0\16\237\221\261\373J"
"\0\0E}}TTD\0\0D||UUE\0\0F}UWF\0\0E}|TUE"
"\0\0\1E}|D\0\0\0\0D|}E\1\0\0\2KyyK\2\0\0\1E||E\1"
"\0\0IIc>\34\0}}\31\61}}\0\0\1\31<ff<\30\0\30<ff<\31"
"\1\0\22;mEm;\22\0\21\71mEm\71\21\0\1\31<ff<\31\1\42\66\34\10\34\66"
"\42\0>qYM>\0=}A@|<\0\0<|@A}=\0\0:{AA{:"
"\0\0=}@@}=\0\0\14\134pq]\15\0\0AU\24\34\10\0~\1\11_v"
" \0!uUT|x@\0 tTU}y@\0\2#uUU}{B!uUU}y"
"@\0!uTT}y@\0 tWW|x@\0 tTT||TT\30<\244\244\344@"
"\0\0\71}UT\134\30\0\0\70|TU]\31\0\0\2;}UU]\33\2\71}TT]\31"
"\0\0\1E}|@\0\0\0\0D}}A\0\0\0\2\3E}}C\2\0\1E||A\1"
"\0\0\60xJK>\2\0zz\12\12zp\0\0\62zJHx\60\0\0\60xHJz\62"
"\0\0\62{II{\62\0\0\62zJJz\62\0\0\62zHHz\62\0\0\10\10kk\10\10"
"\0\0\270|dTL|:\0:zB@xx@\0\70x@Bzz@\0:{AA{z"
"@\0:z@@zz@\0\30\270\240\242\372z\0\0\201\377\377\244$<\30\0\232\272\240\240\372z"
"\0";
/*
Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 96/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplusibmcga_r[770] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_r") =
" \0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\24"
"\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0\0\0"
"\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>\10\10"
"\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14\6\3"
"\1\0>qYM>\0@B@@\0\0bsYIOf\0\0\42cII\66"
"\0\0\30\34\26SP\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy\17\7"
"\0\0\66II\66\0\0\6OIi?\36\0\0\0\0ff\0\0\0\0\0@v\66\0\0"
"\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY\17\6"
"\0\0>A]]\37\36\0|~\23\23~|\0\0AII\66\0\34>cAAc"
"\42\0AAc>\34\0AI]Ac\0AI\35\1\3\0\34>cAQs"
"r\0\10\10\0\0\0AA\0\0\0\60p@A?\1\0A\10\34w"
"c\0AA@`p\0\16\34\16\0\6\14\30\0\34>cAc>"
"\34\0AI\11\17\6\0\36?!q^\0\0A\11\31f\0\42gMYs\42"
"\0\0\3AA\3\0\0@@\0\0\37?``?\37\0\0\60\30\60"
"\0Cg<\30<gC\0\7OxxO\7\0\0GcqYMgs\0\0AA\0"
"\0\0\1\3\6\14\30\60`\0\0AA\0\0\0\10\14\6\3\6\14\10\0\200\200\200\200\200\200"
"\200\200\0\0\3\7\4\0\0\0 tTT<x@\0A?HHx\60\0\70|DDl("
"\0\0\60xHI?@\0\70|TT\134\30\0\0H~I\3\2\0\0\230\274\244\244\370|"
"\4\0A\10\4|x\0\0D}}@\0\0\0`\340\200\200\375}\0\0A\20\70l"
"D\0\0A@\0\0\0||\30\70\34|x\0||\4\4|x\0\0\70|DD|\70"
"\0\0\204\374\370\244$<\30\0\30<$\244\370\374\204\0D|xL\4\34\30\0H\134TTt$"
"\0\0\0\4>D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70p|"
"<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>wAA"
"\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLFLx"
"p";
/*
Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 18/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplusibmcga_n[218] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_n") =
" :\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\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\0\0\10*>\34\34>*\10\10\10>>\10\10"
"\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14\6\3"
"\1\0>qYM>\0@B@@\0\0bsYIOf\0\0\42cII\66"
"\0\0\30\34\26SP\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy\17\7"
"\0\0\66II\66\0\0\6OIi?\36\0\0\0\0ff\0\0\0";
/*
Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 64/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplusibmcga_u[515] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_u") =
" _\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\24"
"\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0\0\0"
"\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>\10\10"
"\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14\6\3"
"\1\0>qYM>\0@B@@\0\0bsYIOf\0\0\42cII\66"
"\0\0\30\34\26SP\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy\17\7"
"\0\0\66II\66\0\0\6OIi?\36\0\0\0\0ff\0\0\0\0\0@v\66\0\0"
"\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY\17\6"
"\0\0>A]]\37\36\0|~\23\23~|\0\0AII\66\0\34>cAAc"
"\42\0AAc>\34\0AI]Ac\0AI\35\1\3\0\34>cAQs"
"r\0\10\10\0\0\0AA\0\0\0\60p@A?\1\0A\10\34w"
"c\0AA@`p\0\16\34\16\0\6\14\30\0\34>cAc>"
"\34\0AI\11\17\6\0\36?!q^\0\0A\11\31f\0\42gMYs\42"
"\0\0\3AA\3\0\0@@\0\0\37?``?\37\0\0\60\30\60"
"\0Cg<\30<gC\0\7OxxO\7\0\0GcqYMgs\0\0AA\0"
"\0\0\1\3\6\14\30\60`\0\0AA\0\0\0\10\14\6\3\6\14\10\0\200\200\200\200\200\200"
"\200\200";
/*
Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 192/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplustandynewtv_f[1794] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_f") =
" \377\0\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\3\7\0\0\7\3\0\24\24"
"\24\0\0$.kk:\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\4\7\3\0"
"\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>>\10"
"\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14\6\3"
"\1\0\34>cIc>\34\0\0@B@@\0BcqYIof\0\42cIII"
"\66\0\30\34\26SP\0/oIIIy\61\0<~KIIx\60\0\3\3qy\15\7"
"\3\0\66III\66\0\6OIIi?\36\0\0\0\0ff\0\0\0\0\0\200\346f\0"
"\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y]\7"
"\2\0>A]]\37\36\0|~\13\11\13~|\0AII\66\0\34>cAAc"
"\42\0AAc>\34\0AI]Ac\0AI\35\1\3\0\34>cAQ\63"
"r\0\10\10\10\0\0\0AA\0\0\60p@A?\1\0A\10\34w"
"c\0AA@`p\0\16\34\16\0\6\14\30\0>AAA"
">\0AI\11\17\6\0>AA\341\377\276\0A\11\31wf\0\0\42gMYs"
"\42\0\0\3AA\3\0?@@@?\0\37?`@`?\37\0?`\70`"
"?\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0AA"
"\0\0\1\3\6\14\30\60`\0\0\0AA\0\0\10\14\6\3\6\14\10\0\200\200\200\200\200\200"
"\200\200\0\0\1\3\6\4\0\0 tTT<x@\0A?DD|\70\0\70|DDDl"
"(\0\70|DE?@\0\70|TTT\134\30\0H~I\11\3\2\0\230\274\244\244\370|"
"\4\0A\10\4|x\0\0\0D}}@\0\0\0`\340\200\200\375}\0A\20\70l"
"D\0\0\0A@\0\0||\14x\14|x\0\4|x\4\4|x\0\70|DDD|"
"\70\0\204\374\370\244$<\30\0\30<$\244\370\374\204\0D|xL\4\14\10\0H\134TTTt"
"$\0\4\4?Dd \0<|@@<|@\0\34<`@`<\34\0<|`\70`|"
"<\0Dl\70\20\70lD\0\234\274\240\240\240\374|\0\0Ldt\134Ld\0\0\10\10>wA"
"A\0\0\0\0\357\357\0\0\0\0AAw>\10\10\0\2\3\1\3\2\3\1\0pxLFLx"
"p\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\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\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\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\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\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\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\60}}\60\0\0\30<$\347\347$$\0\0h~IC"
"f Z~$$$~Z\0\0+/\374\374/+\0\0\0\0\357\357\0\0\0@\232\277\245\245\375"
"Y\2\2\2\0\0\0\2\2\0~\201\231\245\245\245\201~\0&/)//(\0\10\34\66\42\10\34"
"\66\42\0\10\10\10\10\70\70\0\0\10\10\10\10\10\10\0~\201\275\225\225\251\201~\1\1\1\1\1\1"
"\1\1\0\6\17\11\17\6\0\0\0DD__DD\0\0\21\31\35\27\22\0\0\0\21\25\25\37\12"
"\0\0\0\0\4\6\3\1\0\0\0\200\376~ >\36\6\17\11\1\0\0\0\20\20\0"
"\0\0\0\0\200\240\340@\0\0\0\0\22\37\37\20\0\0\0&/)/&\0\0\42\66\34\10\42\66"
"\34\10Bo?Xl\326\373ABo?\30\314\356\273\221\225U?Zh\324\372A\0 p]M@"
"` px,%/zp\0pz/%,xp\0pz-%-zp\0r{-'.{"
"q\0y}\26\22\26}y\0x|\27\23\27|x\0|~\13\11I\0<~B\302\302f"
"$\0||UWVTD\0||VWUDD\0|~UUUVD\0}}TTTU"
"E\0\0\0E~D\0\0\0\0D~E\0\0\0\2E}}E\2\0\0\1E||E"
"\1\0IIc>\34\0~\11\23\42}\0\70|EGF|\70\0\70|FGE|"
"\70\0\70~EEE~\70\0:EGF\71\0=BBB=\0\42\66\34\10\34\66"
"\42\0\134>sIg>\35\0<}CB@|<\0<|BCA|<\0\70zAAAz"
"\70\0=}@@@}=\0\0\14\134rs]\14\0AU\24\34\10\0~\1\11_v"
" \0 tUW>x@\0 tVW=x@\0 vUU>x@\0\42wUW>{"
"A\0!uTT<yA\0 tWW<x@\0 TT|TTX\0\70|D\304\304l"
"(\0\70|UWV\134\30\0\70|TVW]\30\0\70~UUU^\30\0\71}TTT]"
"\31\0\0\0D}B\0\0\0\0F}@\0\0\0\2E}}B\0\0\0\1E||A"
"\1\0\60zKK~>\2\0\12{q\13\12{q\0\60xIKJx\60\0\60xJKIx"
"\60\0\60zIIIz\60\0\62{IKJ{\61\0\61yHHHy\61\0\0\10\10**\10"
"\10\0\270|dTL|:\0<}CB<|@\0<|BC=|@\0\70zAA:x"
"@\0=}@@=}@\0\234\274\242\243\241\374|\0\201\377\377\244$<\30\0\235\275\240\240\240\375"
"}";
/*
Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 96/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplustandynewtv_r[770] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_r") =
" \0\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\3\7\0\0\7\3\0\24\24"
"\24\0\0$.kk:\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\4\7\3\0"
"\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>>\10"
"\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14\6\3"
"\1\0\34>cIc>\34\0\0@B@@\0BcqYIof\0\42cIII"
"\66\0\30\34\26SP\0/oIIIy\61\0<~KIIx\60\0\3\3qy\15\7"
"\3\0\66III\66\0\6OIIi?\36\0\0\0\0ff\0\0\0\0\0\200\346f\0"
"\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y]\7"
"\2\0>A]]\37\36\0|~\13\11\13~|\0AII\66\0\34>cAAc"
"\42\0AAc>\34\0AI]Ac\0AI\35\1\3\0\34>cAQ\63"
"r\0\10\10\10\0\0\0AA\0\0\60p@A?\1\0A\10\34w"
"c\0AA@`p\0\16\34\16\0\6\14\30\0>AAA"
">\0AI\11\17\6\0>AA\341\377\276\0A\11\31wf\0\0\42gMYs"
"\42\0\0\3AA\3\0?@@@?\0\37?`@`?\37\0?`\70`"
"?\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0AA"
"\0\0\1\3\6\14\30\60`\0\0\0AA\0\0\10\14\6\3\6\14\10\0\200\200\200\200\200\200"
"\200\200\0\0\1\3\6\4\0\0 tTT<x@\0A?DD|\70\0\70|DDDl"
"(\0\70|DE?@\0\70|TTT\134\30\0H~I\11\3\2\0\230\274\244\244\370|"
"\4\0A\10\4|x\0\0\0D}}@\0\0\0`\340\200\200\375}\0A\20\70l"
"D\0\0\0A@\0\0||\14x\14|x\0\4|x\4\4|x\0\70|DDD|"
"\70\0\204\374\370\244$<\30\0\30<$\244\370\374\204\0D|xL\4\14\10\0H\134TTTt"
"$\0\4\4?Dd \0<|@@<|@\0\34<`@`<\34\0<|`\70`|"
"<\0Dl\70\20\70lD\0\234\274\240\240\240\374|\0\0Ldt\134Ld\0\0\10\10>wA"
"A\0\0\0\0\357\357\0\0\0\0AAw>\10\10\0\2\3\1\3\2\3\1\0pxLFLx"
"p";
/*
Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 18/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplustandynewtv_n[218] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_n") =
" :\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\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\0\0\10*>\34\34>*\10\0\10\10>>\10"
"\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14\6\3"
"\1\0\34>cIc>\34\0\0@B@@\0BcqYIof\0\42cIII"
"\66\0\30\34\26SP\0/oIIIy\61\0<~KIIx\60\0\3\3qy\15\7"
"\3\0\66III\66\0\6OIIi?\36\0\0\0\0ff\0\0";
/*
Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1
Copyright: Outline (vector) version (c) 2015 VileR
Glyphs: 64/781
BBX Build Mode: 3
*/
const uint8_t u8x8_font_pxplustandynewtv_u[515] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_u") =
" _\0\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\3\7\0\0\7\3\0\24\24"
"\24\0\0$.kk:\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\4\7\3\0"
"\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>>\10"
"\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14\6\3"
"\1\0\34>cIc>\34\0\0@B@@\0BcqYIof\0\42cIII"
"\66\0\30\34\26SP\0/oIIIy\61\0<~KIIx\60\0\3\3qy\15\7"
"\3\0\66III\66\0\6OIIi?\36\0\0\0\0ff\0\0\0\0\0\200\346f\0"
"\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y]\7"
"\2\0>A]]\37\36\0|~\13\11\13~|\0AII\66\0\34>cAAc"
"\42\0AAc>\34\0AI]Ac\0AI\35\1\3\0\34>cAQ\63"
"r\0\10\10\10\0\0\0AA\0\0\60p@A?\1\0A\10\34w"
"c\0AA@`p\0\16\34\16\0\6\14\30\0>AAA"
">\0AI\11\17\6\0>AA\341\377\276\0A\11\31wf\0\0\42gMYs"
"\42\0\0\3AA\3\0?@@@?\0\37?`@`?\37\0?`\70`"
"?\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0AA"
"\0\0\1\3\6\14\30\60`\0\0\0AA\0\0\10\14\6\3\6\14\10\0\200\200\200\200\200\200"
"\200\200";
+1
View File
@@ -58,6 +58,7 @@ void u8x8_SetupDefaults(u8x8_t *u8x8)
u8x8->gpio_and_delay_cb = u8x8_dummy_cb;
u8x8->is_font_inverse_mode = 0;
u8x8->device_address = 0;
u8x8->utf8_state = 0; /* also reset by u8x8_utf8_init */
u8x8->i2c_address = 255;
u8x8->debounce_default_pin_state = 255; /* assume all low active buttons */