Merge pull request #1977 from AnHardt/Cinese2

We mark this historic day, when Marlin went to China.
This commit is contained in:
Scott Lahteine 2015-04-27 20:37:00 -07:00
commit 2bc1d70a31
22 changed files with 488 additions and 36 deletions

View file

@ -46,11 +46,9 @@ We have two different technologies for the displays:
* nl Dutch
* ca Catalan
* eu Basque-Euskera
* cn Chinese
* jp Japanese (Katakana)
and recently on [Thingiverse](http://www.thingiverse.com/) a new port to
* jp [Japanese](http://www.thingiverse.com/thing:664397)
appeared.
## The Problem
All of this languages, except the English, normally use extended symbol sets, not contained in US-ASCII.
@ -132,6 +130,9 @@ We have two different technologies for the displays:
You'll find all translatable strings in 'language_en.h'. Please don't translate any strings from 'language.h', this may break the serial protocol.
For information about fonts see: Marlin\fonts\README.fonts
## User Instructions
Define your hardware and the wanted language in 'Configuration.h'.
To find out what charset your hardware is, define language 'test' and compile. In the menu you will see two lines from the upper half of the charset.

View file

@ -642,7 +642,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic
// @section lcd
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -641,7 +641,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic
// @section lcd
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -0,0 +1,270 @@
/*
Fontname: ISO10646_CN
Copyright: A. Hardtung, public domain
Capital A Height: 7, '1' Height: 7
Calculated Max Values w=11 h=11 x= 2 y=10 dx=12 dy= 0 ascent=10 len=22
Font Bounding box w=12 h=11 x= 0 y=-2
Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
Pure Font ascent = 7 descent=-1
X Font ascent = 7 descent=-1
Max Font ascent =10 descent=-1
*/
#include <utility/u8g.h>
const u8g_fntpgm_uint8_t ISO10646_CN[4105] U8G_SECTION(".progmem.ISO10646_CN") = {
0,12,11,0,254,7,1,146,3,33,32,255,255,10,255,7,
255,0,0,0,6,0,10,1,7,7,6,2,0,128,128,128,
128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64,
192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5,
5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,0,
0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168,
168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,
7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,
0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240,
136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240,
128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,
5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,
6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,
128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,
16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,
136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,
7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,
0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,
136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,
128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,
7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,
0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,
32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,
136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,
5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,
6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,
32,64,128,248,3,7,7,6,0,0,224,128,128,128,128,128,
224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,
0,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,
80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,
64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,
0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,
128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,
120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,
0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,
136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,
136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,
8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,
6,1,0,128,128,144,160,192,160,144,3,7,7,6,1,0,
192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,
168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,
6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,
136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,
5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,
0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64,
64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5,
5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,
136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,
6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,
0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,
64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,
3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,
6,0,3,104,144,0,0,0,6,0,10,0,0,0,12,0,
10,0,0,0,12,0,10,0,0,0,12,0,10,0,0,0,
12,0,10,0,0,0,12,0,10,0,0,0,12,0,10,0,
0,0,12,0,10,0,0,0,12,0,10,0,0,0,12,0,
10,0,0,0,12,0,10,0,0,0,12,0,10,0,0,0,
12,0,10,0,0,0,12,0,10,0,0,0,12,0,10,0,
0,0,12,0,10,0,0,0,12,0,10,0,0,0,12,0,
10,0,0,0,12,0,10,0,0,0,12,0,10,0,0,0,
12,0,10,0,0,0,12,0,10,0,0,0,12,0,10,0,
0,0,12,0,10,0,0,0,12,0,10,0,0,0,12,0,
10,0,0,0,12,0,10,0,0,0,12,0,10,0,0,0,
12,0,10,0,0,0,12,0,10,11,11,22,12,0,255,255,
224,2,0,2,0,4,0,13,0,20,128,36,64,196,32,4,
0,4,0,4,0,11,11,22,12,0,255,249,0,138,0,171,
224,172,64,170,64,170,64,170,64,170,128,33,0,82,128,140,
96,11,11,22,12,0,255,36,0,36,0,63,128,68,0,132,
0,4,0,255,224,10,0,17,0,32,128,192,96,11,11,22,
12,0,255,36,0,36,0,63,192,68,0,4,0,255,224,9,
0,9,0,17,32,33,32,64,224,11,11,22,12,0,255,32,
0,61,224,81,32,145,32,17,32,255,32,17,32,41,32,37,
224,69,32,128,0,11,11,22,12,0,255,32,128,127,192,8,
64,255,224,17,0,32,128,95,64,128,32,63,128,0,0,127,
192,11,11,22,12,0,255,34,64,71,224,148,128,228,128,47,
224,68,128,244,128,7,224,52,128,196,128,7,224,11,11,22,
12,0,255,4,128,143,224,73,0,25,0,47,192,9,0,9,
0,47,192,73,0,137,0,15,224,11,11,22,12,0,255,16,
0,63,128,81,0,14,0,49,128,192,96,63,128,36,128,63,
128,36,128,63,128,11,11,22,12,0,255,34,128,250,64,7,
224,250,128,138,128,138,128,250,128,34,128,178,128,170,160,100,
224,11,11,22,12,0,255,34,32,71,64,146,128,239,224,34,
0,71,192,236,64,7,192,52,64,199,192,4,64,11,11,22,
12,0,255,8,0,15,192,8,0,8,0,255,224,8,0,14,
0,9,128,8,64,8,0,8,0,10,11,22,12,0,255,255,
128,0,128,0,128,128,128,128,128,255,128,128,0,128,0,128,
64,128,64,127,192,11,11,22,12,0,255,71,192,65,0,239,
224,65,0,69,0,105,96,201,32,77,96,73,32,79,224,200,
32,11,11,22,12,0,255,8,0,4,0,4,0,10,0,10,
0,10,0,17,0,17,0,32,128,64,64,128,32,11,11,22,
12,0,255,34,64,34,0,247,224,34,0,35,224,53,32,229,
32,37,64,40,128,41,64,114,32,11,10,20,12,0,0,68,
64,68,64,68,64,127,192,4,0,4,0,132,32,132,32,132,
32,255,224,11,11,22,12,0,255,4,0,0,0,127,192,4,
0,4,0,4,0,127,192,4,0,4,0,4,0,255,224,11,
11,22,12,0,255,255,224,17,0,1,192,254,0,72,128,37,
0,4,0,255,224,21,0,36,128,196,96,11,11,22,12,0,
255,17,0,127,192,68,64,127,192,68,64,127,192,4,0,255,
224,4,0,4,0,4,0,9,11,22,12,0,255,16,0,255,
128,128,128,128,128,255,128,128,128,128,128,255,128,128,128,128,
128,255,128,11,11,22,12,0,255,113,0,1,0,3,224,249,
32,33,32,65,32,81,32,137,32,250,32,2,32,4,192,11,
11,22,12,0,255,127,192,17,0,17,0,17,0,17,0,255,
224,17,0,17,0,33,0,33,0,65,0,11,11,22,12,0,
255,33,0,34,0,244,64,87,224,80,32,87,192,148,64,84,
64,36,64,87,192,148,64,11,11,22,12,0,255,17,0,10,
0,127,192,4,0,4,0,255,224,4,0,10,0,17,0,32,
128,192,96,10,11,22,12,0,255,95,192,0,64,132,64,132,
64,191,64,132,64,140,64,148,64,164,64,140,64,129,192,11,
11,22,12,0,255,36,0,39,192,36,0,36,0,255,224,0,
0,20,64,36,128,71,0,12,0,112,0,11,11,22,12,0,
255,36,128,4,128,15,192,228,128,36,128,63,224,36,128,36,
128,40,128,80,0,143,224,11,11,22,12,0,255,8,0,8,
0,255,128,136,128,136,128,255,128,136,128,136,128,255,160,136,
32,7,224,11,11,22,12,0,255,39,128,36,128,244,128,36,
128,116,128,108,128,164,128,36,128,36,160,40,160,48,96,10,
11,22,12,0,255,255,192,128,64,128,64,158,64,146,64,146,
64,158,64,128,64,128,64,255,192,128,64,11,11,22,12,0,
255,127,192,68,0,95,192,80,64,95,192,80,64,95,192,66,
0,74,128,82,64,166,32,11,11,22,12,0,255,4,0,7,
224,4,0,127,192,64,64,64,64,64,64,127,192,0,0,82,
64,137,32,11,11,22,12,0,255,71,128,36,128,4,128,4,
128,232,96,32,0,47,192,36,64,34,128,49,0,38,192,11,
11,22,12,0,255,127,192,74,64,127,192,4,0,255,224,4,
0,63,128,32,128,36,128,36,128,255,224,11,11,22,12,0,
255,34,0,79,224,72,32,79,224,200,0,79,224,74,160,90,
160,111,224,74,160,72,96,11,11,22,12,0,255,243,192,36,
64,42,128,241,0,34,128,101,224,114,32,165,64,32,128,35,
0,44,0,11,11,22,12,0,255,4,0,255,224,128,32,0,
0,255,224,4,0,36,0,39,192,36,0,84,0,143,224,11,
11,22,12,0,255,115,224,16,128,81,0,35,224,250,32,42,
160,34,160,34,160,32,128,33,64,98,32,11,11,22,12,0,
255,34,0,247,128,34,128,54,128,226,160,37,160,36,96,104,
32,0,0,82,64,137,32,11,11,22,12,0,255,115,192,66,
0,66,0,123,224,74,64,74,64,122,64,74,64,66,64,68,
64,136,64,11,11,22,12,0,255,8,0,255,224,8,0,31,
192,48,64,95,192,144,64,31,192,16,64,16,64,16,192,11,
11,22,12,0,255,2,0,127,224,66,0,66,0,95,192,66,
0,71,0,74,128,82,64,98,32,130,0,11,11,22,12,0,
255,243,192,150,64,145,128,166,96,161,0,151,192,145,0,149,
0,231,224,129,0,129,0,11,11,22,12,0,255,15,128,136,
128,79,128,8,128,143,128,64,0,31,192,53,64,85,64,149,
64,63,224,11,11,22,12,0,255,39,224,32,128,248,128,32,
128,32,128,56,128,224,128,32,128,32,128,32,128,97,128,11,
11,22,12,0,255,31,224,145,0,87,192,20,64,23,192,148,
64,87,192,17,0,85,64,153,32,35,0,11,11,22,12,0,
255,32,128,39,224,242,64,33,128,34,64,52,32,226,64,34,
64,34,64,34,64,100,64,11,11,22,12,0,255,65,0,65,
0,79,224,233,32,73,32,73,32,111,224,201,32,73,32,73,
32,207,224,11,11,22,12,0,255,33,0,241,0,79,224,169,
32,249,32,47,224,57,32,233,32,41,32,47,224,40,32,11,
11,22,12,0,255,143,224,73,32,9,32,203,160,73,32,79,
224,72,32,75,160,74,160,107,160,80,224,11,11,22,12,0,
255,127,192,4,0,68,64,36,64,36,128,4,0,255,224,4,
0,4,0,4,0,4,0,11,11,22,12,0,255,130,0,66,
0,31,224,194,0,95,192,82,64,95,192,71,0,74,128,82,
64,191,224,11,11,22,12,0,255,4,0,127,224,72,128,127,
224,72,128,79,128,64,0,95,192,72,64,71,128,152,96,11,
11,22,12,0,255,1,0,239,224,161,0,164,64,175,224,164,
64,175,224,169,32,233,32,2,128,12,96,11,11,22,12,0,
255,20,192,246,160,188,96,167,128,168,128,191,224,169,32,239,
224,9,32,15,224,9,32,11,11,22,12,0,255,127,128,64,
128,66,128,98,128,84,128,72,128,72,128,84,160,98,160,64,
96,128,32,11,11,22,12,0,255,4,0,127,224,64,32,127,
224,64,0,125,224,84,32,76,160,84,96,100,160,141,96,11,
11,22,12,0,255,130,0,95,224,4,0,8,64,159,224,64,
32,10,128,10,128,74,160,146,160,34,96,11,11,22,12,0,
255,65,0,79,224,232,32,66,128,68,64,104,32,199,192,65,
0,65,0,65,0,207,224,11,11,22,12,0,255,80,32,125,
32,145,32,255,32,17,32,125,32,85,32,85,32,84,32,92,
32,16,224,11,11,22,12,0,255,63,128,32,128,63,128,32,
128,255,224,72,0,123,192,73,64,121,64,72,128,251,96,11,
11,22,12,0,255,4,0,4,0,4,0,36,128,36,64,68,
64,68,32,132,32,4,0,4,0,28,0,11,11,22,12,0,
255,4,0,4,0,4,0,255,224,4,0,10,0,10,0,17,
0,17,0,32,128,192,96,9,10,20,10,0,0,136,128,73,
0,8,0,255,128,0,128,0,128,127,128,0,128,0,128,255,
128,11,11,22,12,0,255,33,0,18,0,255,224,0,0,120,
128,74,128,122,128,74,128,122,128,72,128,89,128,11,11,22,
12,0,255,39,192,0,0,0,0,239,224,33,0,34,0,36,
64,47,224,32,32,80,0,143,224,11,11,22,12,0,255,32,
128,39,0,249,0,33,192,119,0,33,0,249,224,39,0,113,
32,169,32,32,224,11,11,22,12,0,255,16,64,16,64,253,
224,16,64,56,192,53,64,82,64,148,64,16,64,16,64,16,
192,11,11,22,12,0,255,0,64,248,64,11,224,8,64,136,
64,82,64,81,64,33,64,80,64,72,64,137,192,10,11,22,
12,0,255,132,0,132,64,132,128,245,0,134,0,132,0,132,
0,148,0,164,64,196,64,131,192,11,11,22,12,0,255,17,
32,125,0,17,0,255,224,41,0,253,64,73,64,124,128,8,
160,253,96,10,32,11,11,22,12,0,255,23,192,36,64,36,
64,103,192,161,0,47,224,33,0,35,128,37,64,41,32,33,
0,11,11,22,12,0,255,8,0,255,224,16,0,39,192,32,
128,97,0,175,224,33,0,33,0,33,0,35,0,11,11,22,
12,0,255,36,0,47,224,180,0,164,128,164,160,170,192,42,
128,40,128,41,64,50,64,36,32,11,11,22,12,0,255,127,
224,128,0,63,192,32,64,63,192,16,0,31,192,16,64,40,
128,71,0,56,224,11,11,22,12,0,255,127,224,64,0,64,
0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,128,
0,11,11,22,12,0,255,255,224,4,0,127,192,68,64,127,
192,68,64,127,192,68,0,36,0,24,0,231,224,11,11,22,
12,0,255,17,224,253,0,69,0,41,224,253,64,17,64,125,
64,17,64,85,64,146,64,52,64,11,11,22,12,0,255,33,
0,95,224,64,0,207,192,64,0,79,192,64,0,79,192,72,
64,79,192,72,64,11,11,22,12,0,255,4,0,127,192,64,
64,127,192,64,64,127,192,64,64,127,192,4,64,82,32,191,
160,11,11,22,12,0,255,127,192,68,64,127,192,68,64,127,
192,4,0,27,0,224,224,17,0,17,0,97,0,11,11,22,
12,0,255,255,224,4,0,8,0,127,224,73,32,79,32,73,
32,79,32,73,32,73,32,127,224,11,11,22,12,0,255,253,
224,86,64,121,64,56,128,85,64,146,32,255,224,4,0,39,
192,36,0,255,224,11,11,22,12,0,255,251,128,82,0,123,
224,18,64,250,64,20,64,63,128,32,128,63,128,32,128,63,
128,11,11,22,12,0,255,31,224,32,0,39,192,100,64,167,
192,32,0,47,224,40,32,39,192,33,0,35,0,11,11,22,
12,0,255,243,224,130,32,130,32,250,32,130,32,130,32,138,
32,178,32,194,224,2,0,2,0,11,11,22,12,0,255,36,
128,70,160,149,192,228,128,39,224,68,128,245,192,6,160,52,
128,196,128,7,224,11,11,22,12,0,255,39,192,65,0,135,
224,224,32,34,128,69,128,242,128,15,224,48,128,193,64,2,
32,11,11,22,12,0,255,2,0,2,0,34,0,35,192,34,
0,34,0,34,0,34,0,34,0,34,0,255,224,9,11,22,
12,0,255,8,0,8,0,255,128,136,128,136,128,136,128,255,
128,136,128,136,128,136,128,255,128,11,11,22,12,0,255,33,
0,83,160,65,0,247,224,81,0,83,192,86,64,83,192,90,
64,83,192,66,64,11,11,22,12,0,255,127,192,4,0,4,
0,4,0,255,224,10,0,10,0,18,0,34,32,66,32,129,
224,11,11,22,12,0,255,17,0,33,0,47,224,97,0,163,
128,35,128,37,64,37,64,41,32,33,0,33,0,11,11,22,
12,0,255,247,224,148,32,244,32,151,224,148,128,244,128,151,
224,148,128,244,160,150,96,4,32,11,11,22,12,0,255,123,
224,148,128,4,0,127,192,4,0,255,224,1,0,255,224,33,
0,17,0,7,0,11,11,22,12,0,255,33,0,71,192,145,
0,47,224,96,128,175,224,32,128,36,128,34,128,32,128,35,
128,11,11,22,12,0,255,39,192,36,64,247,192,46,224,42,
160,62,224,225,0,47,224,35,128,37,64,105,32,11,11,22,
12,0,255,20,0,39,224,42,0,98,0,163,192,34,0,34,
0,35,224,34,0,34,0,34,0};

View file

@ -64,6 +64,10 @@
#elif defined( DISPLAY_CHARSET_ISO10646_KANA )
#include "dogm_font_data_ISO10646_Kana.h"
#define FONT_MENU_NAME ISO10646_Kana_5x7
#elif defined( DISPLAY_CHARSET_ISO10646_CN )
#include "dogm_font_data_ISO10646_CN.h"
#define FONT_MENU_NAME ISO10646_CN
#define TALL_FONT_CORRECTION 1
#else // fall-back
#include "dogm_font_data_ISO10646_1.h"
#define FONT_MENU_NAME ISO10646_1_5x7
@ -106,6 +110,10 @@
#define LCD_WIDTH_EDIT 22
#endif
#ifndef TALL_FONT_CORRECTION
#define TALL_FONT_CORRECTION 0
#endif
#define START_ROW 0
// LCD selection
@ -123,6 +131,13 @@
U8GLIB_DOGM128 u8g(DOGLCD_CS, DOGLCD_A0); // HW-SPI Com: CS, A0
#endif
#ifndef LCD_PIXEL_WIDTH
#define LCD_PIXEL_WIDTH 128
#endif
#ifndef LCD_PIXEL_HEIGHT
#define LCD_PIXEL_HEIGHT 64
#endif
#include "utf_mapper.h"
int lcd_contrast;
@ -253,20 +268,21 @@ static void lcd_implementation_status_screen() {
#ifdef SDSUPPORT
// SD Card Symbol
u8g.drawBox(42,42,8,7);
u8g.drawBox(50,44,2,5);
u8g.drawFrame(42,49,10,4);
u8g.drawPixel(50,43);
u8g.drawBox(42, 42 - TALL_FONT_CORRECTION, 8, 7);
u8g.drawBox(50, 44 - TALL_FONT_CORRECTION, 2, 5);
u8g.drawFrame(42, 49 - TALL_FONT_CORRECTION, 10, 4);
u8g.drawPixel(50, 43 - TALL_FONT_CORRECTION);
// Progress bar frame
u8g.drawFrame(54,49,73,4);
u8g.drawFrame(54, 49, 73, 4 - TALL_FONT_CORRECTION);
// SD Card Progress bar and clock
lcd_setFont(FONT_STATUSMENU);
if (IS_SD_PRINTING) {
// Progress bar solid part
u8g.drawBox(55, 50, (unsigned int)(71.f * card.percentDone() / 100.f), 2);
u8g.drawBox(55, 50, (unsigned int)(71.f * card.percentDone() / 100.f), 2 - TALL_FONT_CORRECTION);
}
u8g.setPrintPos(80,48);
@ -307,9 +323,9 @@ static void lcd_implementation_status_screen() {
lcd_setFont(FONT_STATUSMENU);
#ifdef USE_SMALL_INFOFONT
u8g.drawBox(0,30,128,10);
u8g.drawBox(0,30,LCD_PIXEL_WIDTH,10);
#else
u8g.drawBox(0,30,128,9);
u8g.drawBox(0,30,LCD_PIXEL_WIDTH,9);
#endif
u8g.setColorIndex(0); // white on black
u8g.setPrintPos(2,XYZ_BASELINE);
@ -367,7 +383,7 @@ static void lcd_implementation_status_screen() {
static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) {
if (isSelected) {
u8g.setColorIndex(1); // black on white
u8g.drawBox(0, row * DOG_CHAR_HEIGHT + 3, 128, DOG_CHAR_HEIGHT);
u8g.drawBox(0, row * DOG_CHAR_HEIGHT + 3 - TALL_FONT_CORRECTION, LCD_PIXEL_WIDTH, DOG_CHAR_HEIGHT);
u8g.setColorIndex(0); // following text must be white on black
}
else {
@ -387,13 +403,15 @@ static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, co
pstr++;
}
while (n--) lcd_print(' ');
u8g.setPrintPos(LCD_PIXEL_WIDTH - DOG_CHAR_WIDTH, (row + 1) * DOG_CHAR_HEIGHT);
lcd_print(post_char);
lcd_print(' ');
}
static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const char* pstr, const char* data, bool pgm) {
char c;
uint8_t n = LCD_WIDTH - 2 - (pgm ? lcd_strlen_P(data) : (lcd_strlen((char*)data)));
uint8_t vallen = (pgm ? lcd_strlen_P(data) : (lcd_strlen((char*)data)));
uint8_t n = LCD_WIDTH - 2 - vallen;
lcd_implementation_mark_as_selected(row, isSelected);
@ -403,6 +421,7 @@ static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const c
}
lcd_print(':');
while (n--) lcd_print(' ');
u8g.setPrintPos(LCD_PIXEL_WIDTH - DOG_CHAR_WIDTH * vallen, (row + 1) * DOG_CHAR_HEIGHT);
if (pgm) { lcd_printPGM(data); } else { lcd_print((char *)data); }
}

View file

@ -575,7 +575,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -571,7 +571,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -595,7 +595,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -653,7 +653,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic
// @section lcd
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -626,7 +626,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -594,7 +594,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -643,7 +643,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -647,7 +647,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -594,7 +594,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

View file

@ -600,7 +600,7 @@ const bool Z_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic
//==============================LCD and SD support=============================
// Define your display language below. Replace (en) with your language code and uncomment.
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, cn, test
// See also language.h
//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)

Binary file not shown.

View file

@ -4,8 +4,9 @@ Then run make_fonts.bat what calls bdf2u8g.exe with the needed parameters to pro
The .h files must be edited to replace '#include "u8g.h"' with '#include <utility/u8g.h>', replace 'U8G_FONT_SECTION' with 'U8G_SECTION', insert '.progmem.' right behind the first '"' and moved to the main directory.
How to integrate a new font:
Currently we are limited to 256 symbols per font. We use a menu system with 5 lines, on a display with 64 pixel height. That means we have 12 pixel for a line. To have some space in between the lines we can't use more then 10 pixel height for the symbols.
We use fixed width fonts. To fit 22 Symbols on the 128 pixel wide screen, the symbols can't be wider than 5 pixel. Maybe you can work with half symbols - two places in the charset will than build one wide symbol.
Currently we are limited to 256 symbols per font. We use a menu system with 5 lines, on a display with 64 pixel height. That means we have 12 pixel for a line. To have some space in between the lines we can't use more then 10 pixel height for the symbols. For up to 11 pixel set TALL_FONT_CORRECTION 1 when loading the font.
To fit 22 Symbols on the 128 pixel wide screen, the symbols can't be wider than 5 pixel, for the first 128 symbols.
For the second half of the font we now support up to 11x11 pixel.
* Get 'Fony.exe'
* Copy one of the existing *.fon files and work with this.

View file

@ -5,3 +5,4 @@
.\bdf2u8g.exe -b 32 -e 255 ISO10646-1.bdf ISO10646_1_5x7 dogm_font_data_ISO10646_1.h
.\bdf2u8g.exe -b 32 -e 255 ISO10646_5_Cyrillic.bdf ISO10646_5_Cyrillic_5x7 dogm_font_data_ISO10646_5_Cyrillic.h
.\bdf2u8g.exe -b 32 -e 255 ISO10646_Kana.bdf ISO10646_Kana_5x7 dogm_font_data_ISO10646_Kana.h
.\bdf2u8g.exe -b 32 -e 255 ISO10646_CN.bdf ISO10646_CN dogm_font_data_ISO10646_CN.h

View file

@ -30,6 +30,7 @@
// eu Basque-Euskera
// kana Japanese
// kana_utf Japanese
// cn Chinese
#ifndef LANGUAGE_INCLUDE
// pick your language from the list above

159
Marlin/language_cn.h Normal file
View file

@ -0,0 +1,159 @@
/**
* Chinese
*
* LCD Menu Messages
* Se also documentation/LCDLanguageFont.md
*
*/
#ifndef LANGUAGE_CN_H
#define LANGUAGE_CN_H
#define MAPPER_NON // For direct asci codes
#define DISPLAY_CHARSET_ISO10646_CN
#define WELCOME_MSG "\xa4\xa5\xa6\xa7"
#define MSG_SD_INSERTED "\xa8\xa9\xaa\xab"
#define MSG_SD_REMOVED "\xa8\xa9\xac\xad"
#define MSG_MAIN "\xae\xaf\xb0"
#define MSG_AUTOSTART "\xb1\xb2\xb3\xb4"
#define MSG_DISABLE_STEPPERS "\xb5\xb6\xb7\xb8\xb9\xba"
#define MSG_AUTO_HOME "\xbb\xbc\xbd"
#define MSG_SET_HOME_OFFSETS "\xbe\xbf\xbb\xbc\xbd\xc0\xc1"
#define MSG_SET_ORIGIN "\xbe\xbf\xbc\xbd"
#define MSG_PREHEAT_PLA "\xc3\xc4 PLA"
#define MSG_PREHEAT_PLA_N MSG_PREHEAT_PLA " "
#define MSG_PREHEAT_PLA_ALL MSG_PREHEAT_PLA " \xc5\xc6"
#define MSG_PREHEAT_PLA_BEDONLY MSG_PREHEAT_PLA " \xc4\xc7"
#define MSG_PREHEAT_PLA_SETTINGS MSG_PREHEAT_PLA " \xbe\xbf"
#define MSG_PREHEAT_ABS "\xc3\xc4 ABS"
#define MSG_PREHEAT_ABS_N MSG_PREHEAT_ABS " "
#define MSG_PREHEAT_ABS_ALL MSG_PREHEAT_ABS " \xc5\xc6"
#define MSG_PREHEAT_ABS_BEDONLY MSG_PREHEAT_ABS " \xbe\xc6"
#define MSG_PREHEAT_ABS_SETTINGS MSG_PREHEAT_ABS " \xbe\xbf"
#define MSG_H1 "1"
#define MSG_H2 "2"
#define MSG_H3 "3"
#define MSG_H4 "4"
#define MSG_COOLDOWN "\xc8\xc9"
#define MSG_SWITCH_PS_ON "\xb9\xcb\xca\xb3"
#define MSG_SWITCH_PS_OFF "\xb9\xcb\xb5\xb6"
#define MSG_EXTRUDE "\xcc\xad"
#define MSG_RETRACT "\xbb\xcd"
#define MSG_MOVE_AXIS "\xc1\xb2\xce"
#define MSG_LEVEL_BED "\xcf\xe0\xc4\xc7"
#define MSG_MOVE_X "\xc1\xb2 X"
#define MSG_MOVE_Y "\xc1\xb2 Y"
#define MSG_MOVE_Z "\xc1\xb2 Z"
#define MSG_MOVE_E "\xcc\xad\xba"
#define MSG_MOVE_01MM "\xc1\xb2 0.1mm"
#define MSG_MOVE_1MM "\xc1\xb2 1mm"
#define MSG_MOVE_10MM "\xc1\xb2 10mm"
#define MSG_SPEED "\xd1\xd2"
#define MSG_NOZZLE "\xd3\xd4"
#define MSG_N2 " 2"
#define MSG_N3 " 3"
#define MSG_N4 " 4"
#define MSG_BED "\xc4\xc7"
#define MSG_FAN_SPEED "\xd5\xd6\xd1\xd2"
#define MSG_FLOW "\xcc\xad\xd1\xd2"
#define MSG_F0 " 0"
#define MSG_F1 " 1"
#define MSG_F2 " 2"
#define MSG_F3 " 3"
#define MSG_CONTROL "\xd8\xd9"
#define MSG_MIN LCD_STR_THERMOMETER " \xda\xdb"
#define MSG_MAX LCD_STR_THERMOMETER " \xda\xdc"
#define MSG_FACTOR LCD_STR_THERMOMETER " \xdd\xde"
#define MSG_AUTOTEMP "\xb1\xb2\xd8\xc9"
#define MSG_ON "\xb3 " // intentional space to shift wide symbol to the left
#define MSG_OFF "\xb5 " // intentional space to shift wide symbol to the left
#define MSG_PID_P "PID-P"
#define MSG_PID_I "PID-I"
#define MSG_PID_D "PID-D"
#define MSG_PID_C "PID-C"
#define MSG_E2 " E2"
#define MSG_E3 " E3"
#define MSG_E4 " E4"
#define MSG_ACC "Accel"
#define MSG_VXY_JERK "Vxy-jerk"
#define MSG_VZ_JERK "Vz-jerk"
#define MSG_VE_JERK "Ve-jerk"
#define MSG_VMAX "Vmax "
#define MSG_X "x"
#define MSG_Y "y"
#define MSG_Z "z"
#define MSG_E "e"
#define MSG_VMIN "Vmin"
#define MSG_VTRAV_MIN "VTrav min"
#define MSG_AMAX "Amax "
#define MSG_A_RETRACT "A-retract"
#define MSG_A_TRAVEL "A-travel"
#define MSG_XSTEPS "Xsteps/mm"
#define MSG_YSTEPS "Ysteps/mm"
#define MSG_ZSTEPS "Zsteps/mm"
#define MSG_ESTEPS "Esteps/mm"
#define MSG_TEMPERATURE "\xc9\xd2"
#define MSG_MOTION "\xdf\xb2"
#define MSG_VOLUMETRIC "Filament"
#define MSG_VOLUMETRIC_ENABLED "E in mm3"
#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1"
#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2"
#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3"
#define MSG_FILAMENT_SIZE_EXTRUDER_3 "Fil. Dia. 4"
#define MSG_CONTRAST "LCD contrast"
#define MSG_STORE_EPROM "Store memory"
#define MSG_LOAD_EPROM "Load memory"
#define MSG_RESTORE_FAILSAFE "Restore failsafe"
#define MSG_REFRESH "Refresh"
#define MSG_WATCH "\xec\xed\xee\xef"
#define MSG_PREPARE "\xa4\xa5"
#define MSG_TUNE "\xcf\xf0"
#define MSG_PAUSE_PRINT "\xf1\xf2\xca\xf3"
#define MSG_RESUME_PRINT "\xf4\xf5\xca\xf3"
#define MSG_STOP_PRINT "\xf2\xf6\xca\xf3"
#define MSG_CARD_MENU "\xaf\xb0"
#define MSG_NO_CARD "\xf9\xa8"
#define MSG_DWELL "Sleep..."
#define MSG_USERWAIT "Wait for user..."
#define MSG_RESUMING "Resuming print"
#define MSG_PRINT_ABORTED "Print aborted"
#define MSG_NO_MOVE "No move."
#define MSG_KILLED "KILLED. "
#define MSG_STOPPED "STOPPED. "
#define MSG_CONTROL_RETRACT "Retract mm"
#define MSG_CONTROL_RETRACT_SWAP "Swap Re.mm"
#define MSG_CONTROL_RETRACTF "Retract V"
#define MSG_CONTROL_RETRACT_ZLIFT "Hop mm"
#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm"
#define MSG_CONTROL_RETRACT_RECOVER_SWAP "S UnRet+mm"
#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V"
#define MSG_AUTORETRACT "AutoRetr."
#define MSG_FILAMENTCHANGE "Change filament"
#define MSG_INIT_SDCARD "Init. SD card"
#define MSG_CNG_SDCARD "Change SD card"
#define MSG_ZPROBE_OUT "Z probe out. bed"
#define MSG_POSITION_UNKNOWN "Home X/Y before Z"
#define MSG_ZPROBE_ZOFFSET "Z Offset"
#define MSG_BABYSTEP_X "Babystep X"
#define MSG_BABYSTEP_Y "Babystep Y"
#define MSG_BABYSTEP_Z "Babystep Z"
#define MSG_ENDSTOP_ABORT "Endstop abort"
#define MSG_HEATING_FAILED_LCD "Heating failed"
#define MSG_ERR_REDUNDANT_TEMP "Err: REDUNDANT TEMP ERROR"
#define MSG_THERMAL_RUNAWAY "THERMAL RUNAWAY"
#define MSG_ERR_MAXTEMP "Err: MAXTEMP"
#define MSG_ERR_MINTEMP "Err: MINTEMP"
#define MSG_ERR_MAXTEMP_BED "Err: MAXTEMP BED"
#define MSG_END_HOUR "hours"
#define MSG_END_MINUTE "minutes"
#ifdef DELTA_CALIBRATION_MENU
#define MSG_DELTA_CALIBRATE "Delta Calibration"
#define MSG_DELTA_CALIBRATE_X "Calibrate X"
#define MSG_DELTA_CALIBRATE_Y "Calibrate Y"
#define MSG_DELTA_CALIBRATE_Z "Calibrate Z"
#define MSG_DELTA_CALIBRATE_CENTER "Calibrate Center"
#endif // DELTA_CALIBRATION_MENU
#endif // LANGUAGE_CN_H

View file

@ -13,7 +13,7 @@
#endif
//#define SIMULATE_ROMFONT //Comment in to see what is seen on the character based displays
#if !( defined(SIMULATE_ROMFONT)|| defined(DISPLAY_CHARSET_ISO10646_1)|| defined(DISPLAY_CHARSET_ISO10646_5)|| defined(DISPLAY_CHARSET_ISO10646_KANA) )
#if !( defined(SIMULATE_ROMFONT)|| defined(DISPLAY_CHARSET_ISO10646_1)|| defined(DISPLAY_CHARSET_ISO10646_5)|| defined(DISPLAY_CHARSET_ISO10646_KANA)|| defined(DISPLAY_CHARSET_ISO10646_CN) )
#define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
#endif

View file

@ -16,8 +16,8 @@
//#define PAGE_HEIGHT 16 //256 byte framebuffer
#define PAGE_HEIGHT 32 //512 byte framebuffer
#define WIDTH 128
#define HEIGHT 64
#define LCD_PIXEL_WIDTH 128
#define LCD_PIXEL_HEIGHT 64
#include <U8glib.h>
@ -64,12 +64,12 @@ uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, vo
ST7920_WRITE_BYTE(0x01); //clear CGRAM ram
u8g_Delay(15); //delay for CGRAM clear
ST7920_WRITE_BYTE(0x3E); //extended mode + GDRAM active
for(y=0;y<HEIGHT/2;y++) //clear GDRAM
for(y=0;y<LCD_PIXEL_HEIGHT/2;y++) //clear GDRAM
{
ST7920_WRITE_BYTE(0x80|y); //set y
ST7920_WRITE_BYTE(0x80); //set x = 0
ST7920_SET_DAT();
for(i=0;i<2*WIDTH/8;i++) //2x width clears both segments
for(i=0;i<2*LCD_PIXEL_WIDTH/8;i++) //2x width clears both segments
ST7920_WRITE_BYTE(0);
ST7920_SET_CMD();
}
@ -103,7 +103,7 @@ uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, vo
}
ST7920_SET_DAT();
ST7920_WRITE_BYTES(ptr,WIDTH/8); //ptr is incremented inside of macro
ST7920_WRITE_BYTES(ptr,LCD_PIXEL_WIDTH/8); //ptr is incremented inside of macro
y++;
}
ST7920_NCS();
@ -119,8 +119,8 @@ uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, vo
#endif
}
uint8_t u8g_dev_st7920_128x64_rrd_buf[WIDTH*(PAGE_HEIGHT/8)] U8G_NOCOMMON;
u8g_pb_t u8g_dev_st7920_128x64_rrd_pb = {{PAGE_HEIGHT,HEIGHT,0,0,0},WIDTH,u8g_dev_st7920_128x64_rrd_buf};
uint8_t u8g_dev_st7920_128x64_rrd_buf[LCD_PIXEL_WIDTH*(PAGE_HEIGHT/8)] U8G_NOCOMMON;
u8g_pb_t u8g_dev_st7920_128x64_rrd_pb = {{PAGE_HEIGHT,LCD_PIXEL_HEIGHT,0,0,0},LCD_PIXEL_WIDTH,u8g_dev_st7920_128x64_rrd_buf};
u8g_dev_t u8g_dev_st7920_128x64_rrd_sw_spi = {u8g_dev_rrd_st7920_128x64_fn,&u8g_dev_st7920_128x64_rrd_pb,&u8g_com_null_fn};
class U8GLIB_ST7920_128X64_RRD : public U8GLIB